@birdapi/velinstyle 1.1.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.
- package/README.de.md +87 -162
- package/README.md +188 -119
- package/cli/blueprint.js +98 -5
- package/cli/blueprints/app-chrome.html +18 -0
- package/cli/blueprints/benefits-grid.html +9 -0
- package/cli/blueprints/bottom-nav-mobile.html +2 -1
- package/cli/blueprints/cookie-consent.html +1 -1
- package/cli/blueprints/cta-band.html +6 -0
- package/cli/blueprints/faq-section.html +18 -0
- package/cli/blueprints/filter-bar.html +4 -4
- package/cli/blueprints/form-contact.html +6 -5
- package/cli/blueprints/hero-section.html +3 -3
- package/cli/blueprints/notification-center.html +1 -1
- package/cli/blueprints/onboarding.html +2 -1
- package/cli/blueprints/ops-console.html +29 -0
- package/cli/blueprints/pricing-band.html +37 -0
- package/cli/blueprints/process-steps.html +10 -0
- package/cli/blueprints/services-grid.html +9 -0
- package/cli/blueprints/settings-panel.html +8 -6
- package/cli/blueprints/split-hero.html +25 -0
- package/cli/blueprints/testimonials.html +8 -0
- package/cli/blueprints/trust-bar.html +10 -0
- package/cli/cli-manifest.json +81 -17
- package/cli/contrast-utils.js +97 -0
- package/cli/create.js +370 -0
- package/cli/docgen/extract-attributes.js +126 -10
- package/cli/docgen/extract-cli.js +3 -2
- package/cli/docgen/extract-components.js +61 -2
- package/cli/docgen/extract-utilities.js +10 -10
- package/cli/doctor.js +119 -0
- package/cli/index.js +531 -44
- package/cli/meta.js +84 -1
- package/cli/perf-audit.js +15 -2
- package/cli/prompt-engine.js +243 -0
- package/cli/review.js +268 -0
- package/cli/scaffold.js +119 -4
- package/cli/scanner-rules-data.js +7 -0
- package/cli/scanner.js +357 -4
- package/cli/serve.js +81 -0
- package/cli/skills.js +223 -0
- package/cli/wc-api.js +89 -0
- package/cli/workflow.js +42 -0
- package/components/index.js +2 -0
- package/components/runtime/component-loaders.js +2 -0
- package/components/velin-accordion.js +62 -13
- package/components/velin-bottom-nav.js +10 -0
- package/components/velin-calendar.js +212 -0
- package/components/velin-command.js +18 -2
- package/components/velin-data-table.js +78 -1
- package/components/velin-dialog.js +4 -1
- package/components/velin-drawer.js +2 -4
- package/components/velin-file-dropzone.js +162 -0
- package/components/velin-icon.js +22 -1
- package/components/velin-lightbox.js +5 -3
- package/components/velin-modal.js +2 -4
- package/components/velin-search.js +1 -1
- package/components/velin-sheet.js +2 -4
- package/core/a11y/component-contracts.json +20 -3
- package/core/meta/build.js +125 -5
- package/core/meta/design-constraints/contact.json +9 -0
- package/core/meta/design-constraints/faq.json +9 -0
- package/core/meta/design-constraints/hero.json +13 -0
- package/core/meta/knowledge/components.json +622 -0
- package/core/meta/knowledge/tokens.json +282 -0
- package/core/meta/pages/registry.json +294 -0
- package/core/meta/schema.js +3 -1
- package/core/meta/sections/registry.json +185 -0
- package/dist/chunks/{attributes-STYCS3O5.js → attributes-A423NX5J.js} +3 -3
- package/dist/chunks/{attributes-353XDOAX.js → attributes-F6UPIEVP.js} +1 -1
- package/dist/chunks/{attributes-ADOKLKA7.js → attributes-GLYXGGAL.js} +3 -3
- package/dist/chunks/{attributes-TPANLMLF.js → attributes-UFTYOSAU.js} +3 -3
- package/dist/chunks/attributes-XGLXLR2T.js +391 -0
- package/dist/chunks/attributes-YF4NI2QS.js +391 -0
- package/dist/chunks/browser-AUABBYUK.js +1544 -0
- package/dist/chunks/{chunk-RSMRR27R.js → chunk-2LSKX57P.js} +12 -10
- package/dist/chunks/{chunk-IEHKRARD.js → chunk-2TGCVDUL.js} +11 -9
- package/dist/chunks/{chunk-SRL6EWHP.js → chunk-5JWGUAPC.js} +17 -13
- package/dist/chunks/chunk-7YSO2OQ2.js +113 -0
- package/dist/chunks/{chunk-QVHYL3R4.js → chunk-BHR3ZG6U.js} +6 -6
- package/dist/chunks/{chunk-J472ERN2.js → chunk-JMSIHEYX.js} +15 -4
- package/dist/chunks/{chunk-MKZP2TBH.js → chunk-L7ZGUU4D.js} +2 -2
- package/dist/chunks/chunk-TUGIPKW5.js +113 -0
- package/dist/chunks/{highlight-GJHHV4KM.js → highlight-M2ELQNYK.js} +1 -1
- package/dist/chunks/runtime-entry.js +1 -1
- package/dist/chunks/{velin-accordion-FBIPAEXG.js → velin-accordion-WSY6BMLA.js} +64 -10
- package/dist/chunks/{velin-bottom-nav-7GEMPIM6.js → velin-bottom-nav-5RVRNGIP.js} +25 -0
- package/dist/chunks/{velin-bottom-nav-N3DFQR66.js → velin-bottom-nav-N5F4UO2I.js} +26 -1
- package/dist/chunks/velin-calendar-OFE6THUD.js +210 -0
- package/dist/chunks/velin-calendar-PGVNJTXK.js +217 -0
- package/dist/chunks/velin-calendar-XC7JRDSH.js +217 -0
- package/dist/chunks/{velin-code-block-CIAURDRJ.js → velin-code-block-ZGWG7JI5.js} +1 -1
- package/dist/chunks/{velin-combobox-NXS4QB4R.js → velin-combobox-56V2ZWT5.js} +1 -1
- package/dist/chunks/{velin-command-ONKO2A3J.js → velin-command-2HO2EKR6.js} +29 -2
- package/dist/chunks/{velin-command-TMLSRGIU.js → velin-command-ZJSLPK7B.js} +30 -3
- package/dist/chunks/{velin-copy-NYDBOKXT.js → velin-copy-XDQSV2XU.js} +1 -1
- package/dist/chunks/{velin-countdown-4ZVDGK4R.js → velin-countdown-V4Z5MA63.js} +1 -1
- package/dist/chunks/velin-data-table-UVR42UUM.js +372 -0
- package/dist/chunks/{velin-dialog-GTTZI564.js → velin-dialog-3YK2RPRV.js} +9 -2
- package/dist/chunks/{velin-dialog-ELFOZIXZ.js → velin-dialog-S24KAP4S.js} +3 -1
- package/dist/chunks/{velin-drawer-BE6TYN3H.js → velin-drawer-5PNU624J.js} +2 -4
- package/dist/chunks/{velin-drawer-DLL2GLT6.js → velin-drawer-CCM6S25D.js} +3 -5
- package/dist/chunks/{velin-email-RBX6ZR4S.js → velin-email-TNFONXPW.js} +1 -1
- package/dist/chunks/velin-file-dropzone-QRGF2JNA.js +154 -0
- package/dist/chunks/velin-file-dropzone-XIZMJ3NB.js +154 -0
- package/dist/chunks/{velin-icon-7M76DOPB.js → velin-icon-A6NCXGUK.js} +59 -17
- package/dist/chunks/{velin-icon-ZTSKUOVN.js → velin-icon-EC4B5XCM.js} +18 -5
- package/dist/chunks/{velin-lightbox-6E7CAATP.js → velin-lightbox-FFK4TUUP.js} +7 -6
- package/dist/chunks/{velin-lightbox-NXA3U2FM.js → velin-lightbox-P725FLTY.js} +5 -4
- package/dist/chunks/{velin-menubar-J66JXRWW.js → velin-menubar-6I2LM5HL.js} +1 -1
- package/dist/chunks/{velin-modal-5HYNNNUI.js → velin-modal-ICTMGRSU.js} +7 -8
- package/dist/chunks/{velin-modal-AEOTZ67O.js → velin-modal-JBNODH7D.js} +2 -4
- package/dist/chunks/{velin-popover-T72HK3DF.js → velin-popover-WZG2GHBL.js} +25 -4
- package/dist/chunks/{velin-rating-N4DI2XNL.js → velin-rating-QBBYRRBU.js} +1 -1
- package/dist/chunks/{velin-search-7B4KJ6TX.js → velin-search-B3L6J2RP.js} +2 -2
- package/dist/chunks/{velin-search-2XRQFBCS.js → velin-search-L3UG6NDQ.js} +5 -4
- package/dist/chunks/{velin-secure-field-6PV7RZDJ.js → velin-secure-field-DGYMP7OK.js} +1 -1
- package/dist/chunks/{velin-segmented-control-GYD5BIXQ.js → velin-segmented-control-P74GJPAR.js} +1 -1
- package/dist/chunks/{velin-sheet-R2Y67X6H.js → velin-sheet-M5GZZD7G.js} +2 -4
- package/dist/chunks/{velin-sheet-OUK6572T.js → velin-sheet-X7RXIWKV.js} +3 -5
- package/dist/chunks/{velin-stepper-X54WGHDG.js → velin-stepper-4YQJUHPC.js} +12 -5
- package/dist/chunks/{velin-toast-OMMOA2DK.js → velin-toast-UG5LWTG2.js} +5 -1
- package/dist/chunks/{velin-tooltip-BDHGRTQB.js → velin-tooltip-ZDH5SDLU.js} +1 -1
- package/dist/llms.txt +29 -7
- package/dist/search-index.json +156 -10
- package/dist/velin-agent.json +3973 -28
- package/dist/velinstyle-components.iife.js +1211 -284
- package/dist/velinstyle-components.js +1213 -284
- package/dist/velinstyle-components.min.js +266 -118
- package/dist/velinstyle.css +252 -67
- package/dist/velinstyle.d.ts +2 -0
- package/dist/velinstyle.min.css +1 -1
- package/package.json +20 -6
- package/packages/skill-engine/README.md +24 -0
- package/packages/skill-engine/package.json +7 -0
- package/packages/skill-engine/src/catalog.js +29 -0
- package/packages/skill-engine/src/index.js +5 -0
- package/packages/skill-engine/src/install.js +69 -0
- package/packages/skill-engine/src/registry.js +27 -0
- package/packages/skill-engine/src/resolve.js +68 -0
- package/packages/skill-engine/src/validate.js +40 -0
- package/packages/velinstyle-skills/README.md +6 -0
- package/packages/velinstyle-skills/adapter.json +8 -0
- package/packages/velinstyle-skills/bundles/landing-starter.bundle.yaml +12 -0
- package/packages/velinstyle-skills/bundles/review-suite.bundle.yaml +11 -0
- package/packages/velinstyle-skills/catalog.json +1004 -0
- package/packages/velinstyle-skills/graphs/component-ship.graph.yaml +14 -0
- package/packages/velinstyle-skills/graphs/landingpage.graph.yaml +21 -0
- package/packages/velinstyle-skills/graphs/release-gate.graph.yaml +15 -0
- package/packages/velinstyle-skills/index.js +22 -0
- package/packages/velinstyle-skills/package.json +7 -0
- package/packages/velinstyle-skills/packs/accessibility.pack.yaml +9 -0
- package/packages/velinstyle-skills/packs/design.pack.yaml +10 -0
- package/packages/velinstyle-skills/packs/documentation.pack.yaml +8 -0
- package/packages/velinstyle-skills/packs/enterprise.pack.yaml +10 -0
- package/packages/velinstyle-skills/packs/frontend.pack.yaml +10 -0
- package/packages/velinstyle-skills/packs/review.pack.yaml +9 -0
- package/packages/velinstyle-skills/projects/admin-panel.project.yaml +12 -0
- package/packages/velinstyle-skills/projects/blog.project.yaml +11 -0
- package/packages/velinstyle-skills/projects/documentation-portal.project.yaml +13 -0
- package/packages/velinstyle-skills/projects/ecommerce-shop.project.yaml +12 -0
- package/packages/velinstyle-skills/projects/landing-page.project.yaml +12 -0
- package/packages/velinstyle-skills/projects/laravel-dashboard.project.yaml +12 -0
- package/packages/velinstyle-skills/projects/marketing-website.project.yaml +14 -0
- package/packages/velinstyle-skills/projects/portfolio.project.yaml +12 -0
- package/packages/velinstyle-skills/registry.json +142 -0
- package/packages/velinstyle-skills/scripts/generate-assets.mjs +163 -0
- package/packages/velinstyle-skills/skills/velin-a11y-focus-keyboard/SKILL.md +57 -0
- package/packages/velinstyle-skills/skills/velin-a11y-page-checklist/SKILL.md +57 -0
- package/packages/velinstyle-skills/skills/velin-a11y-scan-fix/SKILL.md +57 -0
- package/packages/velinstyle-skills/skills/velin-ai-agent-briefing/SKILL.md +57 -0
- package/packages/velinstyle-skills/skills/velin-ai-plan-scaffold-review/SKILL.md +57 -0
- package/packages/velinstyle-skills/skills/velin-ai-skill-authoring/SKILL.md +57 -0
- package/packages/velinstyle-skills/skills/velin-components-accessibility-map/SKILL.md +57 -0
- package/packages/velinstyle-skills/skills/velin-components-api-contract/SKILL.md +57 -0
- package/packages/velinstyle-skills/skills/velin-components-recipe/SKILL.md +57 -0
- package/packages/velinstyle-skills/skills/velin-components-select-compose/SKILL.md +57 -0
- package/packages/velinstyle-skills/skills/velin-design-hero-compose/SKILL.md +57 -0
- package/packages/velinstyle-skills/skills/velin-design-section-rhythm/SKILL.md +57 -0
- package/packages/velinstyle-skills/skills/velin-design-surface-roles/SKILL.md +57 -0
- package/packages/velinstyle-skills/skills/velin-dev-component-wire/SKILL.md +57 -0
- package/packages/velinstyle-skills/skills/velin-dev-page-scaffold/SKILL.md +57 -0
- package/packages/velinstyle-skills/skills/velin-dev-plan-first/SKILL.md +57 -0
- package/packages/velinstyle-skills/skills/velin-docs-component-guide/SKILL.md +57 -0
- package/packages/velinstyle-skills/skills/velin-docs-generate-api/SKILL.md +57 -0
- package/packages/velinstyle-skills/skills/velin-dx-doctor-setup/SKILL.md +57 -0
- package/packages/velinstyle-skills/skills/velin-dx-project-init/SKILL.md +57 -0
- package/packages/velinstyle-skills/skills/velin-migration-legacy-wc/SKILL.md +57 -0
- package/packages/velinstyle-skills/skills/velin-migration-prefix-classes/SKILL.md +57 -0
- package/packages/velinstyle-skills/skills/velin-motion-reduced-safe/SKILL.md +57 -0
- package/packages/velinstyle-skills/skills/velin-motion-reveal-feedback/SKILL.md +57 -0
- package/packages/velinstyle-skills/skills/velin-perf-audit-fix/SKILL.md +57 -0
- package/packages/velinstyle-skills/skills/velin-perf-runtime-tree-shake/SKILL.md +57 -0
- package/packages/velinstyle-skills/skills/velin-release-changelog-sync/SKILL.md +57 -0
- package/packages/velinstyle-skills/skills/velin-release-meta-rebuild/SKILL.md +57 -0
- package/packages/velinstyle-skills/skills/velin-review-conversion-hero/SKILL.md +57 -0
- package/packages/velinstyle-skills/skills/velin-review-page-gate/SKILL.md +57 -0
- package/packages/velinstyle-skills/skills/velin-review-seo-meta/SKILL.md +57 -0
- package/packages/velinstyle-skills/skills/velin-security-sanitize-html/SKILL.md +57 -0
- package/packages/velinstyle-skills/skills/velin-security-scan-pii/SKILL.md +57 -0
- package/packages/velinstyle-skills/skills/velin-testing-a11y-suite/SKILL.md +57 -0
- package/packages/velinstyle-skills/skills/velin-testing-visual-smoke/SKILL.md +57 -0
- package/packages/velinstyle-skills/skills/velin-themes-apply-token/SKILL.md +57 -0
- package/packages/velinstyle-skills/skills/velin-themes-contrast-check/SKILL.md +57 -0
- package/packages/velinstyle-skills/skills/velin-utilities-layout-apply/SKILL.md +57 -0
- package/packages/velinstyle-skills/skills/velin-utilities-prefix-fix/SKILL.md +57 -0
- package/packages/velinstyle-skills/skills/velin-utilities-token-map/SKILL.md +57 -0
- package/packages/velinstyle-skills/templates/admin-panel.template.yaml +12 -0
- package/packages/velinstyle-skills/templates/blog.template.yaml +12 -0
- package/packages/velinstyle-skills/templates/documentation-portal.template.yaml +12 -0
- package/packages/velinstyle-skills/templates/ecommerce-shop.template.yaml +13 -0
- package/packages/velinstyle-skills/templates/landing-page.template.yaml +12 -0
- package/packages/velinstyle-skills/templates/laravel-dashboard.template.yaml +11 -0
- package/packages/velinstyle-skills/templates/marketing-website.template.yaml +13 -0
- package/packages/velinstyle-skills/templates/portfolio.template.yaml +12 -0
- package/schemas/component-knowledge.schema.json +33 -0
- package/schemas/design-constraint.schema.json +15 -0
- package/schemas/design-intelligence.schema.json +19 -0
- package/schemas/design-rule.schema.json +19 -0
- package/schemas/page-template.schema.json +24 -0
- package/schemas/review-report.schema.json +36 -0
- package/schemas/section.schema.json +22 -0
- package/schemas/skill-bundle.schema.json +15 -0
- package/schemas/skill-graph.schema.json +25 -0
- package/schemas/skill-pack.schema.json +14 -0
- package/schemas/skill-project.schema.json +16 -0
- package/schemas/skill-record.schema.json +27 -0
- package/schemas/skill-registry.schema.json +17 -0
- package/schemas/skill-template.schema.json +17 -0
- package/schemas/token-graph.schema.json +27 -0
- package/schemas/utility.schema.json +166 -0
- package/src/components/alert.css +22 -1
- package/src/components/calendar-dropzone.css +5 -0
- package/src/layout/app-shell.css +33 -0
- package/src/tokens/shadow.css +13 -0
- package/src/utilities/border.css +2 -0
- package/src/utilities/display.css +1 -24
- package/src/utilities/responsive.css +16 -1
- package/src/utilities/spacing.css +32 -0
- package/src/velinstyle.css +2 -0
- package/dist/chunks/attributes-3BZLI7XF.js +0 -364
- package/dist/chunks/attributes-4N5JP4CG.js +0 -364
- package/dist/chunks/attributes-5Q2WXGRC.js +0 -374
- package/dist/chunks/attributes-AIR7SVLK.js +0 -364
- package/dist/chunks/attributes-BGRN5XZO.js +0 -364
- package/dist/chunks/attributes-BVSQAYLR.js +0 -364
- package/dist/chunks/attributes-CDYFUY7Y.js +0 -364
- package/dist/chunks/attributes-JMYJZBPE.js +0 -364
- package/dist/chunks/attributes-R5JY3X4O.js +0 -374
- package/dist/chunks/attributes-TNSPQTHX.js +0 -374
- package/dist/chunks/chunk-2354NEBP.js +0 -109
- package/dist/chunks/chunk-2VNA7G7S.js +0 -109
- package/dist/chunks/chunk-AQLRJSGG.js +0 -109
- package/dist/chunks/chunk-EWPSDMQT.js +0 -109
- package/dist/chunks/chunk-LA7264K4.js +0 -85
- package/dist/chunks/chunk-QTJJ3DPO.js +0 -109
- package/dist/chunks/chunk-RZQVWFHW.js +0 -109
- package/dist/chunks/chunk-U4XHMZ7D.js +0 -109
- package/dist/chunks/chunk-V5YIUA6G.js +0 -109
- package/dist/chunks/chunk-XIET2VSZ.js +0 -109
- package/dist/chunks/chunk-XYLJ2GCB.js +0 -205
- package/dist/chunks/chunk-ZPSPKUYD.js +0 -109
- package/dist/chunks/highlight-XTHRKBA3.js +0 -37
- package/dist/chunks/velin-bottom-nav-2N2TYWOF.js +0 -86
- package/dist/chunks/velin-carousel-Y5VCOABZ.js +0 -213
- package/dist/chunks/velin-code-block-ASUBTAQV.js +0 -119
- package/dist/chunks/velin-code-block-TSUKPY4C.js +0 -123
- package/dist/chunks/velin-code-block-Y6CM726Q.js +0 -119
- package/dist/chunks/velin-combobox-2KDTCQ7N.js +0 -155
- package/dist/chunks/velin-command-M7RNHUPR.js +0 -136
- package/dist/chunks/velin-copy-T5KDTDXP.js +0 -81
- package/dist/chunks/velin-countdown-5XSTN3BH.js +0 -101
- package/dist/chunks/velin-counter-ISCTEAHI.js +0 -118
- package/dist/chunks/velin-dialog-D2GUHSCD.js +0 -144
- package/dist/chunks/velin-dialog-IJLFDXAJ.js +0 -144
- package/dist/chunks/velin-dialog-TNS3WXMB.js +0 -144
- package/dist/chunks/velin-drawer-MJS6WCF7.js +0 -130
- package/dist/chunks/velin-email-N5B5ZYTE.js +0 -90
- package/dist/chunks/velin-icon-KZO3IEHG.js +0 -164
- package/dist/chunks/velin-lightbox-I75U6JF4.js +0 -140
- package/dist/chunks/velin-lightbox-QOTB4PRL.js +0 -140
- package/dist/chunks/velin-lightbox-UCD6N7HF.js +0 -140
- package/dist/chunks/velin-live-dot-XHUZCIDZ.js +0 -67
- package/dist/chunks/velin-menubar-SFEXJE56.js +0 -86
- package/dist/chunks/velin-modal-2HOBXE6F.js +0 -176
- package/dist/chunks/velin-modal-GLI2XZZB.js +0 -176
- package/dist/chunks/velin-popover-EXINRIGJ.js +0 -145
- package/dist/chunks/velin-popover-OXX7MRZ6.js +0 -145
- package/dist/chunks/velin-popover-YKCCROJG.js +0 -145
- package/dist/chunks/velin-rating-XRQJV4LO.js +0 -91
- package/dist/chunks/velin-scroll-top-F2FCZNYD.js +0 -58
- package/dist/chunks/velin-search-4YHJWYSS.js +0 -556
- package/dist/chunks/velin-search-LWHY23Q5.js +0 -474
- package/dist/chunks/velin-secure-field-H7FSBUJW.js +0 -95
- package/dist/chunks/velin-segmented-control-PQX6LKOJ.js +0 -109
- package/dist/chunks/velin-sheet-3OGI4HD7.js +0 -119
- package/dist/chunks/velin-sparkline-GVEANJVW.js +0 -184
- package/dist/chunks/velin-sparkline-KDA3GQAN.js +0 -162
- package/dist/chunks/velin-stepper-2ZIHLKGM.js +0 -141
- package/dist/chunks/velin-stepper-FYEUEWE6.js +0 -141
- package/dist/chunks/velin-stepper-wc-QU3KRVQR.js +0 -133
- package/dist/chunks/velin-theme-toggle-BNNS7WLV.js +0 -285
- package/dist/chunks/velin-theme-toggle-NO7V4TWI.js +0 -285
- package/dist/chunks/velin-theme-toggle-QELCJM2Q.js +0 -291
- package/dist/chunks/velin-toast-RCZ4CSUC.js +0 -109
- package/dist/chunks/velin-toast-WEUBTJG6.js +0 -109
- package/dist/chunks/velin-tooltip-664IOHZA.js +0 -112
- package/dist/chunks/velin-tooltip-wc-LXDVT6DE.js +0 -103
- package/dist/chunks/worker-client-R6DBYPFT.js +0 -46
package/README.md
CHANGED
|
@@ -9,47 +9,85 @@
|
|
|
9
9
|
╚═══╝ ╚══════╝╚══════╝╚═╝╚═╝ ╚═══╝╚══════╝ ╚═╝ ╚═╝ ╚═╝╚══════╝╚══════╝
|
|
10
10
|
```
|
|
11
11
|
|
|
12
|
+
**Accessibility-first CSS Framework · Web Components · Design Intelligence · AI Workflows**
|
|
13
|
+
|
|
14
|
+
One framework. One CLI. One design system. One AI-ready ecosystem.
|
|
15
|
+
|
|
12
16
|
[](LICENSE)
|
|
13
|
-
[](https://velinstyle.info/docs/a11y.html)
|
|
17
|
+
[](https://www.npmjs.com/package/@birdapi/velinstyle)
|
|
18
|
+
[](https://www.npmjs.com/package/@birdapi/velinstyle)
|
|
16
19
|
[](https://github.com/SkyliteDesign/velinstyle/stargazers)
|
|
20
|
+
[](https://nodejs.org/)
|
|
21
|
+
[](https://velinstyle.info/docs/getting-started/introduction.html)
|
|
22
|
+
[](https://velinstyle.info/docs/a11y.html)
|
|
17
23
|
[](CONTRIBUTING.md)
|
|
18
24
|
|
|
19
25
|
```bash
|
|
20
26
|
npm i @birdapi/velinstyle
|
|
21
27
|
```
|
|
22
28
|
|
|
23
|
-
**[Website](https://velinstyle.info)** · **[Docs](https://velinstyle.info/docs/)** · **[Demos](https://velinstyle.info/demos/)** · **[
|
|
24
|
-
|
|
25
|
-
**English** · **[Deutsch](README.de.md)**
|
|
29
|
+
**[Website](https://velinstyle.info)** · **[Docs](https://velinstyle.info/docs/getting-started/introduction.html)** · **[Demos](https://velinstyle.info/demos/)** · **[Getting Started](GETTING_STARTED.md)** · **[Architecture](ARCHITECTURE.md)** · **[Deutsch](README.de.md)**
|
|
26
30
|
|
|
27
31
|
</div>
|
|
28
32
|
|
|
29
33
|
---
|
|
30
34
|
|
|
31
|
-
|
|
35
|
+
VelinStyle is a **production CSS + Web Components framework** with **WCAG 2.2 AAA-oriented defaults**, a real **CLI ship surface**, and the first **Design Intelligence / AI Foundation** systems (beta). No external UI framework in the core.
|
|
32
36
|
|
|
33
|
-
|
|
37
|
+
**Best fit today:** marketing landings, docs shells, simple admin starters.
|
|
38
|
+
**Not yet:** sole primary stack for large multipage shop + enterprise admin without custom work.
|
|
34
39
|
|
|
35
|
-
> **
|
|
40
|
+
> **Release:** **1.2.0** (Core + Design Intelligence Foundation + Trust/Ship). Using VelinStyle does **not** certify your app — see the [a11y matrix](https://velinstyle.info/docs/a11y.html).
|
|
36
41
|
|
|
37
42
|
---
|
|
38
43
|
|
|
39
|
-
##
|
|
44
|
+
## Why VelinStyle
|
|
45
|
+
|
|
46
|
+
| Need | What you get |
|
|
47
|
+
|------|----------------|
|
|
48
|
+
| Readable HTML | Semantic BEM (`velin-btn--primary`), not utility walls |
|
|
49
|
+
| Accessibility | AAA-capable tokens, focus management, reduced motion — built in |
|
|
50
|
+
| Ship without a build | CDN CSS + optional WCs; Vite/React when you want them |
|
|
51
|
+
| Predictable overrides | Cascade layers + OKLCH design tokens |
|
|
52
|
+
| Quality gates | `scan`, `review`, `check` — catch real defects before merge |
|
|
53
|
+
| AI that helps | Skills, workflows, and agent metadata — **Mensch → Framework → KI** |
|
|
54
|
+
|
|
55
|
+
Compared to **Tailwind**: less class sprawl, stronger defaults for contrast and semantics.
|
|
56
|
+
Compared to **Bootstrap**: modern tokens/layers, optional progressive WCs, CLI automation instead of jQuery-era chrome.
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## Feature highlights
|
|
61
|
+
|
|
62
|
+
| | Area | What it does |
|
|
63
|
+
|---|------|----------------|
|
|
64
|
+
| 🎨 | **CSS Framework** | OKLCH themes, utilities, components, lite preset for marketing budgets |
|
|
65
|
+
| 🧩 | **Web Components** | 40 canonical custom elements; use CSS alone when you need no JS |
|
|
66
|
+
| ⚡ | **Runtime** | Search, motion, highlight, attributes, `bootFromDOM` tree-shaking |
|
|
67
|
+
| 🛠 | **CLI** | `create` · `serve` · `doctor` · `check` · `scan` · `review` · `skills` |
|
|
68
|
+
| 🧠 | **Design Intelligence** | Plan → constraints → page/section registry → review (beta) |
|
|
69
|
+
| 🤖 | **AI Skills** | 40 skills, packs, bundles, templates, workflow graphs (beta) |
|
|
70
|
+
| 📦 | **Registry** | Skills + page/section registries as machine-readable contracts |
|
|
71
|
+
| 📄 | **AI Metadata** | `velin-agent.json`, `llms.txt`, page-level agent JSON |
|
|
72
|
+
| 📚 | **Documentation** | Dogfooded site — 100% VelinStyle |
|
|
73
|
+
| 🔍 | **Review Engine** | Heuristic design / a11y / SEO / conversion gates (beta) |
|
|
74
|
+
| 🛡 | **Scan Engine** | A11y, security, CSS honesty, PII |
|
|
75
|
+
| 🚀 | **Performance** | Lite CSS, chunked runtime, CLS placeholders |
|
|
76
|
+
| ♿ | **Accessibility** | Contracts, WCAG 2.2 tooling, keyboard + ARIA patterns |
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## What's new in 1.2
|
|
81
|
+
|
|
82
|
+
Not a CSS bump — a **foundation release**.
|
|
83
|
+
|
|
84
|
+
- **Ship surface** — `create landing|dashboard|docs|auth`, `serve`, `doctor`, `check` (`--json` / `--sarif`)
|
|
85
|
+
- **Design Intelligence (beta)** — Prompt Engine (`plan`), Review Engine, knowledge graph seed, design constraints
|
|
86
|
+
- **AI Foundation (beta)** — skill engine, workflows, richer agent metadata
|
|
87
|
+
- **New primitives** — `<velin-calendar>`, `<velin-file-dropzone>`, editable `<velin-data-table>`
|
|
88
|
+
- **Trust gates** — stricter scan/review so junk pages cannot fake green scores
|
|
40
89
|
|
|
41
|
-
|
|
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, TS, HTML, CSS, JSON, Bash, Python, YAML, Go, Rust, and more
|
|
46
|
-
- **HTML attributes** — 27 declarative bridges (`velin-modal`, `velin-reveal`, `velin-scroll-top`, `velin-code`, …)
|
|
47
|
-
- **Quality** — 38/38 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
|
|
51
|
-
- **React adapter** — `@velinstyle/react` wraps every canonical Web Component with typed props and events
|
|
52
|
-
- **Release guard** — `npm run release:check` fails the build on version or docs drift between framework and site
|
|
90
|
+
Details: [`RELEASE_NOTES_1.2.0.md`](RELEASE_NOTES_1.2.0.md) · full history: [`CHANGELOG.md`](CHANGELOG.md)
|
|
53
91
|
|
|
54
92
|
---
|
|
55
93
|
|
|
@@ -57,30 +95,31 @@ Built for teams who want **readable HTML**, **AAA token defaults** (AA via `data
|
|
|
57
95
|
|
|
58
96
|
```bash
|
|
59
97
|
npm i @birdapi/velinstyle
|
|
98
|
+
pnpm add @birdapi/velinstyle
|
|
99
|
+
yarn add @birdapi/velinstyle
|
|
100
|
+
bun add @birdapi/velinstyle
|
|
60
101
|
```
|
|
61
102
|
|
|
62
|
-
|
|
63
|
-
| --- | --- |
|
|
64
|
-
| `@birdapi/velinstyle/css` | Full minified stylesheet |
|
|
65
|
-
| `@birdapi/velinstyle/bundle` | Web Components ESM bundle |
|
|
66
|
-
| `@birdapi/velinstyle/search` | VelinSearch module |
|
|
67
|
-
| `@birdapi/velinstyle/motion` | Motion runtime |
|
|
68
|
-
| `@birdapi/velinstyle/attributes` | HTML attribute bridges |
|
|
69
|
-
| `@birdapi/velinstyle/highlight` | Syntax highlighting |
|
|
70
|
-
| `@birdapi/velinstyle/meta` | Agent metadata API |
|
|
71
|
-
|
|
72
|
-
**CDN (pin version):**
|
|
103
|
+
**CDN** (pin a version):
|
|
73
104
|
|
|
74
105
|
```html
|
|
75
|
-
<link rel="stylesheet" href="https://unpkg.com/@birdapi/velinstyle@1.
|
|
76
|
-
<script type="module" src="https://unpkg.com/@birdapi/velinstyle@1.
|
|
106
|
+
<link rel="stylesheet" href="https://unpkg.com/@birdapi/velinstyle@1.2.0/dist/velinstyle.min.css">
|
|
107
|
+
<script type="module" src="https://unpkg.com/@birdapi/velinstyle@1.2.0/dist/velinstyle-components.min.js"></script>
|
|
77
108
|
```
|
|
78
109
|
|
|
79
|
-
|
|
110
|
+
> Pin **`@1.2.0`** (or `@latest` after publish). Examples above match this package version.
|
|
111
|
+
|
|
112
|
+
| Export | Use |
|
|
113
|
+
|--------|-----|
|
|
114
|
+
| `@birdapi/velinstyle/css` | Full stylesheet |
|
|
115
|
+
| `@birdapi/velinstyle/bundle` | Web Components ESM |
|
|
116
|
+
| `/search` `/motion` `/attributes` `/highlight` `/meta` `/sanitize` | Tree-shakeable modules |
|
|
117
|
+
|
|
118
|
+
After clone: `npm install && npm run build` — `dist/` is generated, not committed.
|
|
80
119
|
|
|
81
120
|
---
|
|
82
121
|
|
|
83
|
-
##
|
|
122
|
+
## Quick start
|
|
84
123
|
|
|
85
124
|
```html
|
|
86
125
|
<!DOCTYPE html>
|
|
@@ -88,143 +127,173 @@ After cloning, run `npm install && npm run build` — `dist/` is generated, not
|
|
|
88
127
|
<head>
|
|
89
128
|
<meta charset="UTF-8">
|
|
90
129
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
91
|
-
<link rel="stylesheet" href="https://unpkg.com/@birdapi/velinstyle@1.
|
|
92
|
-
<script type="module" src="https://unpkg.com/@birdapi/velinstyle@1.
|
|
130
|
+
<link rel="stylesheet" href="https://unpkg.com/@birdapi/velinstyle@1.2.0/dist/velinstyle.min.css">
|
|
131
|
+
<script type="module" src="https://unpkg.com/@birdapi/velinstyle@1.2.0/dist/velinstyle-components.min.js"></script>
|
|
93
132
|
</head>
|
|
94
133
|
<body class="velin-p-6">
|
|
95
|
-
<button type="button" class="velin-btn velin-btn--primary"
|
|
96
|
-
<velin-
|
|
134
|
+
<button type="button" class="velin-btn velin-btn--primary">Ship it</button>
|
|
135
|
+
<velin-toast></velin-toast>
|
|
97
136
|
</body>
|
|
98
137
|
</html>
|
|
99
138
|
```
|
|
100
139
|
|
|
101
|
-
|
|
140
|
+
Scaffold + gate (local 1.2 tree / after publish):
|
|
102
141
|
|
|
103
|
-
|
|
142
|
+
```bash
|
|
143
|
+
npx @birdapi/velinstyle create landing ./my-site
|
|
144
|
+
cd my-site && npx @birdapi/velinstyle serve . && npx @birdapi/velinstyle check .
|
|
145
|
+
```
|
|
104
146
|
|
|
105
|
-
|
|
106
|
-
| --- | --- |
|
|
107
|
-
| `@birdapi/velinstyle/search` | Fuzzy offline search, providers, optional Web Worker |
|
|
108
|
-
| `@birdapi/velinstyle/motion` | `initMotion`, stagger, smooth scroll, unified `.velin-in-view` |
|
|
109
|
-
| `@birdapi/velinstyle/attributes` | Registry of declarative `velin-*` HTML attribute bridges |
|
|
110
|
-
| `@birdapi/velinstyle/highlight` | `velinSyntax`, lazy language packs, OKLCH token colors |
|
|
111
|
-
| `@birdapi/velinstyle/meta` | `buildAgentBundle`, page meta MIME `application/vnd.velinstyle.meta+json` |
|
|
147
|
+
More: [`GETTING_STARTED.md`](GETTING_STARTED.md)
|
|
112
148
|
|
|
113
149
|
---
|
|
114
150
|
|
|
115
|
-
##
|
|
116
|
-
|
|
117
|
-
**38 canonical** custom elements (40 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.
|
|
118
|
-
|
|
119
|
-
Examples: `velin-modal`, `velin-search`, `velin-code-block`, `velin-drawer`, `velin-stepper`, `velin-tooltip`, `velin-toast`, `velin-persist`, `velin-data-table`, `velin-form-summary`.
|
|
151
|
+
## CLI
|
|
120
152
|
|
|
121
|
-
|
|
153
|
+
| Command | Role |
|
|
154
|
+
|---------|------|
|
|
155
|
+
| `init` | Project config |
|
|
156
|
+
| `create` | Opinionated scaffolds (`landing` · `dashboard` · `docs` · `auth`) |
|
|
157
|
+
| `build` | CSS build (`--preset lite` for marketing) |
|
|
158
|
+
| `serve` | Static preview |
|
|
159
|
+
| `doctor` | Install / path health |
|
|
160
|
+
| `check` | doctor + blueprints + scan + review |
|
|
161
|
+
| `scan` | A11y / security / CSS / PII |
|
|
162
|
+
| `review` | Design-intelligence gate (beta) |
|
|
163
|
+
| `plan` | Prompt → plan JSON → render (beta) |
|
|
164
|
+
| `skills` / `workflow` | AI skill registry & graphs (beta) |
|
|
165
|
+
| `meta` | Agent bundle + `llms.txt` |
|
|
166
|
+
| `wc api <tag>` | Human-readable WC API from source |
|
|
122
167
|
|
|
123
|
-
|
|
124
|
-
|
|
168
|
+
```bash
|
|
169
|
+
npx @birdapi/velinstyle check . --profile marketing
|
|
170
|
+
npx @birdapi/velinstyle wc api velin-toast
|
|
171
|
+
```
|
|
125
172
|
|
|
126
173
|
---
|
|
127
174
|
|
|
128
|
-
##
|
|
175
|
+
## AI Skills & Design Intelligence
|
|
176
|
+
|
|
177
|
+
**AI Skills** give agents and humans a shared vocabulary: skill records, packs, bundles, templates, and workflow graphs. They exist so tooling can scaffold, review, and ship **without inventing VelinStyle from scratch**.
|
|
129
178
|
|
|
130
|
-
|
|
131
|
-
| --- | --- |
|
|
132
|
-
| `npx velinstyle init` | Create `velinstyle.config.js` in your project |
|
|
133
|
-
| `npx velinstyle scan` | Security, accessibility, CSS, and PII checks |
|
|
134
|
-
| `npx velinstyle search index` | Build `dist/search-index.json` for offline doc search |
|
|
135
|
-
| `npx velinstyle tokens build` | Compile design tokens JSON to CSS |
|
|
136
|
-
| `npx velinstyle meta` | Generate `velin-agent.json` and `llms.txt` |
|
|
179
|
+
**Design Intelligence** adds structure ordinary CSS frameworks lack: a knowledge graph seed, page/section registries, design constraints, and `plan` / `review` so pages are assembled from known patterns — then checked against profiles (`marketing` · `app` · `docs` · `ecommerce`).
|
|
137
180
|
|
|
138
|
-
|
|
181
|
+
Deep dive: [`ARCHITECTURE.md`](ARCHITECTURE.md) · [`VELINSTYLE_2030.md`](VELINSTYLE_2030.md) · Strategy (lokal, nicht im Git): [`docs/strategy/README.md`](docs/strategy/README.md)
|
|
139
182
|
|
|
140
183
|
---
|
|
141
184
|
|
|
142
|
-
##
|
|
185
|
+
## Components
|
|
143
186
|
|
|
144
|
-
|
|
187
|
+
**40 canonical** custom elements (**42** lazy-loader entries including legacy `*-wc` aliases).
|
|
145
188
|
|
|
146
|
-
|
|
147
|
-
- **`@birdapi/velinstyle/sanitize`** — URL and text sanitization helpers
|
|
148
|
-
- **`<velin-secure-field>`** — no plaintext secrets in the DOM; hardened search/copy URLs
|
|
189
|
+
Philosophy: **progressive enhancement** — semantic HTML + CSS first; upgrade to a Web Component only when you need behavior (focus traps, sorting, offline search).
|
|
149
190
|
|
|
150
|
-
|
|
191
|
+
Highlights: `velin-modal`, `velin-drawer`, `velin-search`, `velin-data-table`, `velin-form-summary`, `velin-calendar`, `velin-file-dropzone`, `velin-toast`, `velin-code-block`.
|
|
192
|
+
|
|
193
|
+
React: [`@velinstyle/react`](./packages/react/README.md) wraps every canonical tag.
|
|
151
194
|
|
|
152
195
|
---
|
|
153
196
|
|
|
154
|
-
##
|
|
197
|
+
## Accessibility
|
|
155
198
|
|
|
156
|
-
|
|
199
|
+
Accessibility is a **default**, not a plugin.
|
|
157
200
|
|
|
158
|
-
-
|
|
159
|
-
-
|
|
160
|
-
-
|
|
201
|
+
- WCAG 2.2 **AAA-oriented** token defaults (`data-velin-contrast="aa"` when you need the lighter palette)
|
|
202
|
+
- Semantic HTML patterns and BEM components
|
|
203
|
+
- Keyboard support, focus management, `inert` overlays
|
|
204
|
+
- `prefers-reduced-motion` gating
|
|
205
|
+
- Component a11y contracts + scanner rules
|
|
161
206
|
|
|
162
|
-
[
|
|
207
|
+
Docs: [a11y matrix](https://velinstyle.info/docs/a11y.html) · AAA marketing language: see `VELINSTYLE_2030.md` (strategy ADRs are local-only)
|
|
163
208
|
|
|
164
209
|
---
|
|
165
210
|
|
|
166
|
-
##
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
211
|
+
## Documentation map
|
|
212
|
+
|
|
213
|
+
| Layer | File / link | Audience |
|
|
214
|
+
|-------|-------------|----------|
|
|
215
|
+
| Landing | This README | First 30 seconds |
|
|
216
|
+
| First build | [`GETTING_STARTED.md`](GETTING_STARTED.md) | New adopters |
|
|
217
|
+
| FAQ | [`FAQ.md`](FAQ.md) | Common questions |
|
|
218
|
+
| Troubleshooting | [`TROUBLESHOOTING.md`](TROUBLESHOOTING.md) | When stuck |
|
|
219
|
+
| Deploy | [`DEPLOY.md`](DEPLOY.md) | Ship to production |
|
|
220
|
+
| Systems | [`ARCHITECTURE.md`](ARCHITECTURE.md) | Advanced / AI / DI |
|
|
221
|
+
| Design Intelligence | [`docs/guides/design-intelligence.md`](docs/guides/design-intelligence.md) | Plan / review |
|
|
222
|
+
| CLI ship surface | [`docs/guides/cli-ship-surface.md`](docs/guides/cli-ship-surface.md) | create / check / wc |
|
|
223
|
+
| AI Skills | [`docs/guides/ai-skills.md`](docs/guides/ai-skills.md) | Skills / workflows |
|
|
224
|
+
| Product site | [velinstyle.info/docs](https://velinstyle.info/docs/getting-started/introduction.html) | Guides, demos, reference |
|
|
225
|
+
| Upgrade | [`UPGRADING.md`](UPGRADING.md) | 1.1 → 1.2 |
|
|
226
|
+
| North star | [`VELINSTYLE_2030.md`](VELINSTYLE_2030.md) | Long-term vision |
|
|
172
227
|
|
|
173
228
|
---
|
|
174
229
|
|
|
175
|
-
##
|
|
230
|
+
## Repository structure
|
|
176
231
|
|
|
177
|
-
|
|
232
|
+
```
|
|
233
|
+
velinstyle/
|
|
234
|
+
├── src/ # CSS source (tokens, base, components, utilities)
|
|
235
|
+
├── components/ # Web Components (JS)
|
|
236
|
+
├── core/ # Runtime: search, motion, highlight, attributes, meta
|
|
237
|
+
├── cli/ # velinstyle binary
|
|
238
|
+
├── packages/ # React wrappers, skill-engine, skills registry
|
|
239
|
+
├── schemas/ # Design Intelligence + skill contracts
|
|
240
|
+
├── docs/ # Docs + strategy ADRs
|
|
241
|
+
├── samples/ # Local HTML samples
|
|
242
|
+
├── templates/ # Starters (e.g. Vite + React)
|
|
243
|
+
├── fixtures/ # Scanner / chaos fixtures
|
|
244
|
+
└── showcase-demos/ # Full-page demos
|
|
245
|
+
```
|
|
178
246
|
|
|
179
247
|
---
|
|
180
248
|
|
|
181
|
-
##
|
|
249
|
+
## Philosophy
|
|
250
|
+
|
|
251
|
+
**Mensch → Framework → Design Intelligence → AI**
|
|
182
252
|
|
|
183
|
-
|
|
184
|
-
| --- | :---: | :---: | :---: | :---: |
|
|
185
|
-
| HTML readability | Medium | Low | Medium | **High** |
|
|
186
|
-
| Class predictability | Medium | Low | Medium | **`velin-btn--primary`** |
|
|
187
|
-
| Utility sprawl | Low | **High** | Low | **Controlled** |
|
|
188
|
-
| Override story | Hard | Config file | Shadow DOM | **CSS layers + tokens** |
|
|
189
|
-
| Accessibility | Partial | DIY | Good WC | **WCAG 2.2 AAA tokens** |
|
|
190
|
-
| Dark mode | Manual | `dark:` everywhere | Theme attr | **Token swap** |
|
|
191
|
-
| App chrome | Legacy JS | BYO | WC only | **CSS + optional WCs** |
|
|
192
|
-
| Ship speed | Fast | Fast (with build) | Fast | **CDN, no build required** |
|
|
193
|
-
| Runtime modules | — | — | — | **Search, motion, meta, …** |
|
|
253
|
+
Humans own product intent. The framework ships reliable CSS and components. Design Intelligence encodes patterns and constraints. AI skills and workflows accelerate scaffolding and review — they **support** developers; they do not replace judgment, accessibility ownership, or design responsibility.
|
|
194
254
|
|
|
195
255
|
---
|
|
196
256
|
|
|
197
|
-
##
|
|
257
|
+
## Roadmap (maturity)
|
|
198
258
|
|
|
199
|
-
|
|
259
|
+
| Status | Surfaces |
|
|
260
|
+
|--------|----------|
|
|
261
|
+
| **Stable** | CSS · Utilities · Runtime · Web Components · CLI core · Blueprints |
|
|
262
|
+
| **Beta** | Review Engine · Prompt Engine · Knowledge Graph · AI Metadata · Design Constraints |
|
|
263
|
+
| **Foundation** | AI Skills · Workflow Graphs · Registries |
|
|
264
|
+
| **Planned** | Studio · Utility Engine Generator |
|
|
200
265
|
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
266
|
+
---
|
|
267
|
+
|
|
268
|
+
## Comparison
|
|
269
|
+
|
|
270
|
+
| | Bootstrap | Tailwind | **VelinStyle** |
|
|
271
|
+
|---|:---:|:---:|:---:|
|
|
272
|
+
| HTML readability | Medium | Low | **High** |
|
|
273
|
+
| Utility sprawl | Low | High | **Controlled** |
|
|
274
|
+
| A11y defaults | Partial | DIY | **AAA-capable tokens** |
|
|
275
|
+
| Dark mode | Manual | `dark:` everywhere | **Token swap** |
|
|
276
|
+
| Build required | No | Usually | **CDN optional** |
|
|
277
|
+
| Design / AI gates | — | — | **plan · review · skills** |
|
|
206
278
|
|
|
207
279
|
---
|
|
208
280
|
|
|
209
281
|
## Contributing
|
|
210
282
|
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
2. `npm install && npm run build`
|
|
215
|
-
3. Make your change · run `npm test`, `npm run test:a11y`, and `npm run test:e2e` (after `npm run build`)
|
|
216
|
-
4. Open a pull request
|
|
283
|
+
1. Fork → `npm install && npm run build`
|
|
284
|
+
2. Change code · run `npm test`, `npm run test:a11y`, `npm run test:e2e`
|
|
285
|
+
3. Open a PR
|
|
217
286
|
|
|
218
|
-
See [CONTRIBUTING.md](CONTRIBUTING.md)
|
|
287
|
+
See [`CONTRIBUTING.md`](CONTRIBUTING.md).
|
|
219
288
|
|
|
220
289
|
---
|
|
221
290
|
|
|
222
291
|
## License
|
|
223
292
|
|
|
224
|
-
[MIT](LICENSE) —
|
|
225
|
-
|
|
226
|
-
<div align="center">
|
|
227
|
-
|
|
228
|
-
Made with care for the web by [SkyliteDesign](https://github.com/SkyliteDesign)
|
|
293
|
+
[MIT](LICENSE) — © 2026 VelinStyle · [SkyliteDesign](https://github.com/SkyliteDesign)
|
|
229
294
|
|
|
230
|
-
|
|
295
|
+
<p align="center">
|
|
296
|
+
<a href="https://velinstyle.info/demos/showcase-crypto.html">
|
|
297
|
+
<img src=".github/assets/readme/hero-demo.webp" alt="VelinStyle crypto dashboard demo" width="720">
|
|
298
|
+
</a>
|
|
299
|
+
</p>
|
package/cli/blueprint.js
CHANGED
|
@@ -1,12 +1,18 @@
|
|
|
1
|
-
import { readFileSync, existsSync, writeFileSync } from 'fs';
|
|
2
|
-
import { join, dirname } from 'path';
|
|
1
|
+
import { readFileSync, existsSync, writeFileSync, readdirSync } from 'fs';
|
|
2
|
+
import { join, dirname, extname } from 'path';
|
|
3
3
|
import { fileURLToPath } from 'url';
|
|
4
4
|
|
|
5
5
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
6
|
+
const PKG_ROOT = join(__dirname, '..');
|
|
7
|
+
const BLUEPRINT_DIR = join(__dirname, 'blueprints');
|
|
8
|
+
|
|
6
9
|
const BLUEPRINTS = {
|
|
7
10
|
'alert-stack': 'alert-stack.html',
|
|
11
|
+
'benefits-grid': 'benefits-grid.html',
|
|
8
12
|
'breadcrumb-bar': 'breadcrumb-bar.html',
|
|
9
13
|
'card-grid': 'card-grid.html',
|
|
14
|
+
'cta-band': 'cta-band.html',
|
|
15
|
+
'faq-section': 'faq-section.html',
|
|
10
16
|
'footer-simple': 'footer-simple.html',
|
|
11
17
|
'form-contact': 'form-contact.html',
|
|
12
18
|
'form-login': 'form-login.html',
|
|
@@ -15,9 +21,13 @@ const BLUEPRINTS = {
|
|
|
15
21
|
modal: 'modal.html',
|
|
16
22
|
'navbar-header': 'navbar-header.html',
|
|
17
23
|
'pagination-bar': 'pagination-bar.html',
|
|
24
|
+
'process-steps': 'process-steps.html',
|
|
18
25
|
'search-field': 'search-field.html',
|
|
26
|
+
'services-grid': 'services-grid.html',
|
|
19
27
|
'sidebar-layout': 'sidebar-layout.html',
|
|
20
28
|
'table-responsive': 'table-responsive.html',
|
|
29
|
+
testimonials: 'testimonials.html',
|
|
30
|
+
'trust-bar': 'trust-bar.html',
|
|
21
31
|
'bottom-nav-mobile': 'bottom-nav-mobile.html',
|
|
22
32
|
'empty-state': 'empty-state.html',
|
|
23
33
|
'cookie-consent': 'cookie-consent.html',
|
|
@@ -26,18 +36,101 @@ const BLUEPRINTS = {
|
|
|
26
36
|
'settings-panel': 'settings-panel.html',
|
|
27
37
|
onboarding: 'onboarding.html',
|
|
28
38
|
'pricing-table': 'pricing-table.html',
|
|
39
|
+
'split-hero': 'split-hero.html',
|
|
40
|
+
'pricing-band': 'pricing-band.html',
|
|
41
|
+
'app-chrome': 'app-chrome.html',
|
|
42
|
+
'ops-console': 'ops-console.html',
|
|
29
43
|
};
|
|
30
44
|
|
|
45
|
+
const CLASS_RE = /class\s*=\s*["']([^"']+)["']/gi;
|
|
46
|
+
const CSS_CLASS_RE = /\.((?:velin|expo)-[a-z0-9_-]+)/gi;
|
|
47
|
+
|
|
48
|
+
let _cssClassCache = null;
|
|
49
|
+
|
|
50
|
+
function walkCssFiles(dir, out = []) {
|
|
51
|
+
if (!existsSync(dir)) return out;
|
|
52
|
+
for (const name of readdirSync(dir, { withFileTypes: true })) {
|
|
53
|
+
const full = join(dir, name.name);
|
|
54
|
+
if (name.isDirectory()) walkCssFiles(full, out);
|
|
55
|
+
else if (extname(name.name) === '.css') out.push(full);
|
|
56
|
+
}
|
|
57
|
+
return out;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/** Collect known CSS class names from framework source (+ optional dist). */
|
|
61
|
+
export function loadKnownCssClasses({ includeDist = true } = {}) {
|
|
62
|
+
if (_cssClassCache) return _cssClassCache;
|
|
63
|
+
const files = walkCssFiles(join(PKG_ROOT, 'src'));
|
|
64
|
+
if (includeDist) {
|
|
65
|
+
const distCss = join(PKG_ROOT, 'dist', 'velinstyle.css');
|
|
66
|
+
if (existsSync(distCss)) files.push(distCss);
|
|
67
|
+
}
|
|
68
|
+
const set = new Set();
|
|
69
|
+
for (const file of files) {
|
|
70
|
+
const css = readFileSync(file, 'utf-8');
|
|
71
|
+
for (const m of css.matchAll(CSS_CLASS_RE)) set.add(m[1]);
|
|
72
|
+
}
|
|
73
|
+
_cssClassCache = set;
|
|
74
|
+
return set;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export function extractVelinClasses(html) {
|
|
78
|
+
const classes = new Set();
|
|
79
|
+
for (const m of String(html || '').matchAll(CLASS_RE)) {
|
|
80
|
+
for (const token of m[1].split(/\s+/)) {
|
|
81
|
+
if (token.startsWith('velin-')) classes.add(token);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return [...classes];
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* @returns {{ ok: boolean, missing: string[], classes: string[] }}
|
|
89
|
+
*/
|
|
90
|
+
export function validateBlueprintHtml(html, known = loadKnownCssClasses()) {
|
|
91
|
+
const classes = extractVelinClasses(html);
|
|
92
|
+
const missing = classes.filter((c) => !known.has(c));
|
|
93
|
+
return { ok: missing.length === 0, missing, classes };
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
export function validateBlueprintId(id, known = loadKnownCssClasses()) {
|
|
97
|
+
const file = BLUEPRINTS[id];
|
|
98
|
+
if (!file) return { ok: false, error: `Unknown blueprint "${id}"`, missing: [], classes: [] };
|
|
99
|
+
const path = join(BLUEPRINT_DIR, file);
|
|
100
|
+
if (!existsSync(path)) return { ok: false, error: `Missing template: ${path}`, missing: [], classes: [] };
|
|
101
|
+
const body = readFileSync(path, 'utf-8');
|
|
102
|
+
const result = validateBlueprintHtml(body, known);
|
|
103
|
+
return { ...result, id, path };
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export function validateAllBlueprints(known = loadKnownCssClasses()) {
|
|
107
|
+
const results = [];
|
|
108
|
+
for (const id of listBlueprints()) {
|
|
109
|
+
results.push(validateBlueprintId(id, known));
|
|
110
|
+
}
|
|
111
|
+
return results;
|
|
112
|
+
}
|
|
113
|
+
|
|
31
114
|
export function listBlueprints() {
|
|
32
|
-
return Object.keys(BLUEPRINTS);
|
|
115
|
+
return Object.keys(BLUEPRINTS).sort();
|
|
33
116
|
}
|
|
34
117
|
|
|
35
|
-
export function emitBlueprint(id, { output } = {}) {
|
|
118
|
+
export function emitBlueprint(id, { output, strict = false } = {}) {
|
|
36
119
|
const file = BLUEPRINTS[id];
|
|
37
120
|
if (!file) return { ok: false, error: `Unknown blueprint "${id}". Try: ${listBlueprints().join(', ')}` };
|
|
38
|
-
const path = join(
|
|
121
|
+
const path = join(BLUEPRINT_DIR, file);
|
|
39
122
|
if (!existsSync(path)) return { ok: false, error: `Missing template: ${path}` };
|
|
40
123
|
const body = readFileSync(path, 'utf-8');
|
|
124
|
+
if (strict) {
|
|
125
|
+
const v = validateBlueprintHtml(body);
|
|
126
|
+
if (!v.ok) {
|
|
127
|
+
return {
|
|
128
|
+
ok: false,
|
|
129
|
+
error: `Blueprint "${id}" emits unknown CSS classes: ${v.missing.join(', ')}. Fix templates or add utilities.`,
|
|
130
|
+
missing: v.missing,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
}
|
|
41
134
|
const banner = `<!-- Generated by velinstyle blueprint ${id} — VelinStyle tokens: --velin-color-*, --velin-space-*, --velin-radius-* -->\n`;
|
|
42
135
|
const out = banner + body;
|
|
43
136
|
if (output) {
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
<!-- VelinStyle blueprint: app chrome (menubar + command) -->
|
|
2
|
+
<header class="velin-flex velin-flex--justify-between velin-flex--items-center velin-flex--wrap velin-gap-3 velin-p-3 velin-border-block-end" role="banner">
|
|
3
|
+
<strong class="velin-text-lg">Brand</strong>
|
|
4
|
+
<velin-menubar aria-label="App menu">
|
|
5
|
+
<button type="button" data-menu="file">File</button>
|
|
6
|
+
<button type="button" data-menu="view">View</button>
|
|
7
|
+
<button type="button" data-menu="help">Help</button>
|
|
8
|
+
</velin-menubar>
|
|
9
|
+
<button type="button" class="velin-btn velin-btn--outline velin-btn--sm" id="open-command" aria-keyshortcuts="Control+K Meta+K">Command</button>
|
|
10
|
+
</header>
|
|
11
|
+
<velin-command id="app-command" aria-label="Command palette"></velin-command>
|
|
12
|
+
<script type="module">
|
|
13
|
+
// Prefer package entry; for offline vendor installs use: import './vendor/velinstyle/velinstyle-components.min.js';
|
|
14
|
+
import '@birdapi/velinstyle/bundle';
|
|
15
|
+
document.getElementById('open-command')?.addEventListener('click', () => {
|
|
16
|
+
document.getElementById('app-command')?.open?.();
|
|
17
|
+
});
|
|
18
|
+
</script>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<!-- VelinStyle blueprint: benefits grid -->
|
|
2
|
+
<section class="velin-container velin-py-8">
|
|
3
|
+
<h2 class="velin-text-3xl" style="font-weight:var(--velin-weight-semibold);margin-block-end:var(--velin-space-6)">Benefits</h2>
|
|
4
|
+
<div class="velin-grid velin-grid--auto-fit">
|
|
5
|
+
<article class="velin-card"><div class="velin-card__body"><h3 class="velin-card__title">Clarity first</h3><p class="velin-card__text">Plain-language guidance without jargon walls.</p></div></article>
|
|
6
|
+
<article class="velin-card"><div class="velin-card__body"><h3 class="velin-card__title">Reliable process</h3><p class="velin-card__text">Predictable steps from first call to delivery.</p></div></article>
|
|
7
|
+
<article class="velin-card"><div class="velin-card__body"><h3 class="velin-card__title">Accessible by default</h3><p class="velin-card__text">Interfaces that respect contrast, focus, and motion preferences.</p></div></article>
|
|
8
|
+
</div>
|
|
9
|
+
</section>
|
|
@@ -6,7 +6,8 @@
|
|
|
6
6
|
</velin-bottom-nav>
|
|
7
7
|
</nav>
|
|
8
8
|
<script type="module">
|
|
9
|
-
import '
|
|
9
|
+
// Prefer package entry; for offline vendor installs use: import './vendor/velinstyle/velinstyle-components.min.js';
|
|
10
|
+
import '@birdapi/velinstyle/bundle';
|
|
10
11
|
const nav = document.querySelector('velin-bottom-nav');
|
|
11
12
|
nav?.querySelectorAll('a').forEach((link) => {
|
|
12
13
|
link.addEventListener('click', (e) => {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<aside class="velin-p-4 velin-border velin-rounded-lg velin-pb-safe" role="region" aria-label="Cookie consent">
|
|
2
2
|
<div class="velin-user-content">
|
|
3
|
-
<p class="velin-mbe-
|
|
3
|
+
<p class="velin-mbe-4">We use essential cookies only. No third-party trackers in this demo.</p>
|
|
4
4
|
</div>
|
|
5
5
|
<div class="velin-flex velin-gap-3">
|
|
6
6
|
<button type="button" class="velin-btn velin-btn--primary">Accept</button>
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<!-- VelinStyle blueprint: CTA band -->
|
|
2
|
+
<section class="velin-container velin-py-10" style="text-align:center">
|
|
3
|
+
<h2 class="velin-text-3xl" style="font-weight:var(--velin-weight-semibold);margin-block-end:var(--velin-space-3)">Ready to talk?</h2>
|
|
4
|
+
<p style="color:var(--velin-color-text-muted);margin-block-end:var(--velin-space-6)">Book a short intro call — no jargon, no pressure.</p>
|
|
5
|
+
<a class="velin-btn velin-btn--primary" href="#contact">Request a consultation</a>
|
|
6
|
+
</section>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
<!-- VelinStyle blueprint: FAQ with accordion -->
|
|
2
|
+
<section class="velin-container velin-py-8" id="faq">
|
|
3
|
+
<h2 class="velin-text-3xl" style="font-weight:var(--velin-weight-semibold);margin-block-end:var(--velin-space-6)">FAQ</h2>
|
|
4
|
+
<velin-accordion>
|
|
5
|
+
<details>
|
|
6
|
+
<summary>What happens in the first meeting?</summary>
|
|
7
|
+
<p>We clarify goals, documents needed, and realistic next steps.</p>
|
|
8
|
+
</details>
|
|
9
|
+
<details>
|
|
10
|
+
<summary>How long does a typical engagement take?</summary>
|
|
11
|
+
<p>Timelines depend on scope; we share a clear plan before work starts.</p>
|
|
12
|
+
</details>
|
|
13
|
+
<details>
|
|
14
|
+
<summary>Do you work with remote clients?</summary>
|
|
15
|
+
<p>Yes — secure document exchange and scheduled calls are standard.</p>
|
|
16
|
+
</details>
|
|
17
|
+
</velin-accordion>
|
|
18
|
+
</section>
|