@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.
- package/README.de.md +87 -158
- package/README.md +188 -115
- 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-a11y.js +4 -2
- 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 +535 -46
- 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 +4 -0
- package/components/runtime/component-loaders.js +4 -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 +438 -0
- 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-form-summary.js +348 -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 +35 -1
- package/core/highlight/languages/go.js +28 -0
- package/core/highlight/languages/python.js +29 -0
- package/core/highlight/languages/rust.js +32 -0
- package/core/highlight/languages/yaml.js +23 -0
- package/core/highlight/registry.js +13 -2
- package/core/meta/build.js +126 -6
- 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-TPANLMLF.js → attributes-A423NX5J.js} +3 -3
- package/dist/chunks/{attributes-ADOKLKA7.js → attributes-F6UPIEVP.js} +2 -2
- package/dist/chunks/{attributes-STYCS3O5.js → attributes-GLYXGGAL.js} +3 -3
- package/dist/chunks/{attributes-5Q2WXGRC.js → attributes-UFTYOSAU.js} +20 -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-SRL6EWHP.js → chunk-2LSKX57P.js} +13 -11
- package/dist/chunks/{chunk-RSMRR27R.js → chunk-2TGCVDUL.js} +11 -9
- package/dist/chunks/{chunk-XIET2VSZ.js → chunk-5JWGUAPC.js} +17 -13
- package/dist/chunks/chunk-7YSO2OQ2.js +113 -0
- package/dist/chunks/{chunk-IEHKRARD.js → chunk-BHR3ZG6U.js} +10 -8
- package/dist/chunks/{chunk-J472ERN2.js → chunk-ERF5YVP4.js} +15 -4
- package/dist/chunks/{chunk-XYLJ2GCB.js → chunk-JMSIHEYX.js} +55 -7
- package/dist/chunks/{chunk-MKZP2TBH.js → chunk-L7ZGUU4D.js} +2 -2
- package/dist/chunks/chunk-TUGIPKW5.js +113 -0
- package/dist/chunks/go-HZ6XTFCK.js +31 -0
- package/dist/chunks/{highlight-GJHHV4KM.js → highlight-IBDX4XWS.js} +1 -1
- package/dist/chunks/{highlight-XTHRKBA3.js → highlight-M2ELQNYK.js} +1 -1
- package/dist/chunks/python-BMPKDKNO.js +32 -0
- package/dist/chunks/runtime-entry.js +1 -1
- package/dist/chunks/rust-2BWKI2MN.js +35 -0
- 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-2N2TYWOF.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-ITCLIC6T.js} +1 -1
- package/dist/chunks/{velin-code-block-TSUKPY4C.js → velin-code-block-ZGWG7JI5.js} +12 -3
- 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-KK7IDGTP.js +302 -0
- 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-form-summary-XRQ7COQH.js +273 -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-I75U6JF4.js → velin-lightbox-P725FLTY.js} +15 -5
- 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/chunks/yaml-O67LEQYT.js +26 -0
- package/dist/llms.txt +29 -7
- package/dist/search-index.json +182 -10
- package/dist/velin-agent.json +3997 -26
- package/dist/velinstyle-components.iife.js +1952 -287
- package/dist/velinstyle-components.js +1956 -287
- package/dist/velinstyle-components.min.js +267 -119
- package/dist/velinstyle.css +381 -67
- package/dist/velinstyle.d.ts +4 -0
- package/dist/velinstyle.min.css +1 -1
- package/package.json +26 -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/base/wc-placeholder.css +7 -0
- package/src/components/alert.css +22 -1
- package/src/components/calendar-dropzone.css +5 -0
- package/src/components/data-table.css +93 -0
- package/src/components/form-validation.css +40 -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 +3 -0
- package/dist/chunks/attributes-3BZLI7XF.js +0 -364
- package/dist/chunks/attributes-4N5JP4CG.js +0 -364
- 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-ZPSPKUYD.js +0 -109
- package/dist/chunks/velin-bottom-nav-N3DFQR66.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-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-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,45 +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, HTML, CSS, JSON, and more
|
|
46
|
-
- **HTML attributes** — 27 declarative bridges (`velin-modal`, `velin-reveal`, `velin-scroll-top`, `velin-code`, …)
|
|
47
|
-
- **Quality** — 36/36 component a11y contracts, Playwright cross-browser smoke (`npm run test:e2e`), CLS placeholders (`wc-placeholder.css`)
|
|
48
|
-
- **Security tools** — `scan`, PII rules, sanitize API, hardened components
|
|
49
|
-
- **CLI** — init, build, scan, scaffold, tokens, docs generate, perf audit, layout audit
|
|
50
|
-
- **Velin-Meta** — `velin-agent.json`, `llms.txt`, and page-level agent JSON for AI assistants
|
|
90
|
+
Details: [`RELEASE_NOTES_1.2.0.md`](RELEASE_NOTES_1.2.0.md) · full history: [`CHANGELOG.md`](CHANGELOG.md)
|
|
51
91
|
|
|
52
92
|
---
|
|
53
93
|
|
|
@@ -55,30 +95,31 @@ Built for teams who want **readable HTML**, **AAA token defaults** (AA via `data
|
|
|
55
95
|
|
|
56
96
|
```bash
|
|
57
97
|
npm i @birdapi/velinstyle
|
|
98
|
+
pnpm add @birdapi/velinstyle
|
|
99
|
+
yarn add @birdapi/velinstyle
|
|
100
|
+
bun add @birdapi/velinstyle
|
|
58
101
|
```
|
|
59
102
|
|
|
60
|
-
|
|
61
|
-
| --- | --- |
|
|
62
|
-
| `@birdapi/velinstyle/css` | Full minified stylesheet |
|
|
63
|
-
| `@birdapi/velinstyle/bundle` | Web Components ESM bundle |
|
|
64
|
-
| `@birdapi/velinstyle/search` | VelinSearch module |
|
|
65
|
-
| `@birdapi/velinstyle/motion` | Motion runtime |
|
|
66
|
-
| `@birdapi/velinstyle/attributes` | HTML attribute bridges |
|
|
67
|
-
| `@birdapi/velinstyle/highlight` | Syntax highlighting |
|
|
68
|
-
| `@birdapi/velinstyle/meta` | Agent metadata API |
|
|
69
|
-
|
|
70
|
-
**CDN (pin version):**
|
|
103
|
+
**CDN** (pin a version):
|
|
71
104
|
|
|
72
105
|
```html
|
|
73
|
-
<link rel="stylesheet" href="https://unpkg.com/@birdapi/velinstyle@1.
|
|
74
|
-
<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>
|
|
75
108
|
```
|
|
76
109
|
|
|
77
|
-
|
|
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.
|
|
78
119
|
|
|
79
120
|
---
|
|
80
121
|
|
|
81
|
-
##
|
|
122
|
+
## Quick start
|
|
82
123
|
|
|
83
124
|
```html
|
|
84
125
|
<!DOCTYPE html>
|
|
@@ -86,141 +127,173 @@ After cloning, run `npm install && npm run build` — `dist/` is generated, not
|
|
|
86
127
|
<head>
|
|
87
128
|
<meta charset="UTF-8">
|
|
88
129
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
89
|
-
<link rel="stylesheet" href="https://unpkg.com/@birdapi/velinstyle@1.
|
|
90
|
-
<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>
|
|
91
132
|
</head>
|
|
92
133
|
<body class="velin-p-6">
|
|
93
|
-
<button type="button" class="velin-btn velin-btn--primary"
|
|
94
|
-
<velin-
|
|
134
|
+
<button type="button" class="velin-btn velin-btn--primary">Ship it</button>
|
|
135
|
+
<velin-toast></velin-toast>
|
|
95
136
|
</body>
|
|
96
137
|
</html>
|
|
97
138
|
```
|
|
98
139
|
|
|
99
|
-
|
|
140
|
+
Scaffold + gate (local 1.2 tree / after publish):
|
|
100
141
|
|
|
101
|
-
|
|
142
|
+
```bash
|
|
143
|
+
npx @birdapi/velinstyle create landing ./my-site
|
|
144
|
+
cd my-site && npx @birdapi/velinstyle serve . && npx @birdapi/velinstyle check .
|
|
145
|
+
```
|
|
102
146
|
|
|
103
|
-
|
|
104
|
-
| --- | --- |
|
|
105
|
-
| `@birdapi/velinstyle/search` | Fuzzy offline search, providers, optional Web Worker |
|
|
106
|
-
| `@birdapi/velinstyle/motion` | `initMotion`, stagger, smooth scroll, unified `.velin-in-view` |
|
|
107
|
-
| `@birdapi/velinstyle/attributes` | Registry of declarative `velin-*` HTML attribute bridges |
|
|
108
|
-
| `@birdapi/velinstyle/highlight` | `velinSyntax`, lazy language packs, OKLCH token colors |
|
|
109
|
-
| `@birdapi/velinstyle/meta` | `buildAgentBundle`, page meta MIME `application/vnd.velinstyle.meta+json` |
|
|
147
|
+
More: [`GETTING_STARTED.md`](GETTING_STARTED.md)
|
|
110
148
|
|
|
111
149
|
---
|
|
112
150
|
|
|
113
|
-
##
|
|
114
|
-
|
|
115
|
-
**36 canonical** custom elements (38 lazy-loader entries including legacy `velin-tooltip-wc` and `velin-stepper-wc`) — use plain CSS when you do not need behavior. `src/base/wc-placeholder.css` reduces layout shift before elements upgrade.
|
|
151
|
+
## CLI
|
|
116
152
|
|
|
117
|
-
|
|
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 |
|
|
118
167
|
|
|
119
|
-
|
|
120
|
-
|
|
168
|
+
```bash
|
|
169
|
+
npx @birdapi/velinstyle check . --profile marketing
|
|
170
|
+
npx @birdapi/velinstyle wc api velin-toast
|
|
171
|
+
```
|
|
121
172
|
|
|
122
173
|
---
|
|
123
174
|
|
|
124
|
-
##
|
|
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**.
|
|
125
178
|
|
|
126
|
-
|
|
127
|
-
| --- | --- |
|
|
128
|
-
| `npx velinstyle init` | Create `velinstyle.config.js` in your project |
|
|
129
|
-
| `npx velinstyle scan` | Security, accessibility, CSS, and PII checks |
|
|
130
|
-
| `npx velinstyle search index` | Build `dist/search-index.json` for offline doc search |
|
|
131
|
-
| `npx velinstyle tokens build` | Compile design tokens JSON to CSS |
|
|
132
|
-
| `npx velinstyle meta` | Generate `velin-agent.json` and `llms.txt` |
|
|
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`).
|
|
133
180
|
|
|
134
|
-
|
|
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)
|
|
135
182
|
|
|
136
183
|
---
|
|
137
184
|
|
|
138
|
-
##
|
|
185
|
+
## Components
|
|
139
186
|
|
|
140
|
-
|
|
187
|
+
**40 canonical** custom elements (**42** lazy-loader entries including legacy `*-wc` aliases).
|
|
141
188
|
|
|
142
|
-
|
|
143
|
-
- **`@birdapi/velinstyle/sanitize`** — URL and text sanitization helpers
|
|
144
|
-
- **`<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).
|
|
145
190
|
|
|
146
|
-
|
|
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.
|
|
147
194
|
|
|
148
195
|
---
|
|
149
196
|
|
|
150
|
-
##
|
|
197
|
+
## Accessibility
|
|
151
198
|
|
|
152
|
-
|
|
199
|
+
Accessibility is a **default**, not a plugin.
|
|
153
200
|
|
|
154
|
-
-
|
|
155
|
-
-
|
|
156
|
-
-
|
|
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
|
|
157
206
|
|
|
158
|
-
[
|
|
207
|
+
Docs: [a11y matrix](https://velinstyle.info/docs/a11y.html) · AAA marketing language: see `VELINSTYLE_2030.md` (strategy ADRs are local-only)
|
|
159
208
|
|
|
160
209
|
---
|
|
161
210
|
|
|
162
|
-
##
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
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 |
|
|
168
227
|
|
|
169
228
|
---
|
|
170
229
|
|
|
171
|
-
##
|
|
230
|
+
## Repository structure
|
|
172
231
|
|
|
173
|
-
|
|
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
|
+
```
|
|
174
246
|
|
|
175
247
|
---
|
|
176
248
|
|
|
177
|
-
##
|
|
249
|
+
## Philosophy
|
|
250
|
+
|
|
251
|
+
**Mensch → Framework → Design Intelligence → AI**
|
|
178
252
|
|
|
179
|
-
|
|
180
|
-
| --- | :---: | :---: | :---: | :---: |
|
|
181
|
-
| HTML readability | Medium | Low | Medium | **High** |
|
|
182
|
-
| Class predictability | Medium | Low | Medium | **`velin-btn--primary`** |
|
|
183
|
-
| Utility sprawl | Low | **High** | Low | **Controlled** |
|
|
184
|
-
| Override story | Hard | Config file | Shadow DOM | **CSS layers + tokens** |
|
|
185
|
-
| Accessibility | Partial | DIY | Good WC | **WCAG 2.2 AAA tokens** |
|
|
186
|
-
| Dark mode | Manual | `dark:` everywhere | Theme attr | **Token swap** |
|
|
187
|
-
| App chrome | Legacy JS | BYO | WC only | **CSS + optional WCs** |
|
|
188
|
-
| Ship speed | Fast | Fast (with build) | Fast | **CDN, no build required** |
|
|
189
|
-
| Runtime modules | — | — | — | **Search, motion, meta, …** |
|
|
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.
|
|
190
254
|
|
|
191
255
|
---
|
|
192
256
|
|
|
193
|
-
##
|
|
257
|
+
## Roadmap (maturity)
|
|
194
258
|
|
|
195
|
-
|
|
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 |
|
|
196
265
|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
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** |
|
|
202
278
|
|
|
203
279
|
---
|
|
204
280
|
|
|
205
281
|
## Contributing
|
|
206
282
|
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
2. `npm install && npm run build`
|
|
211
|
-
3. Make your change · run `npm test`, `npm run test:a11y`, and `npm run test:e2e` (after `npm run build`)
|
|
212
|
-
4. Open a pull request
|
|
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
|
|
213
286
|
|
|
214
|
-
See [CONTRIBUTING.md](CONTRIBUTING.md)
|
|
287
|
+
See [`CONTRIBUTING.md`](CONTRIBUTING.md).
|
|
215
288
|
|
|
216
289
|
---
|
|
217
290
|
|
|
218
291
|
## License
|
|
219
292
|
|
|
220
|
-
[MIT](LICENSE) —
|
|
221
|
-
|
|
222
|
-
<div align="center">
|
|
223
|
-
|
|
224
|
-
Made with care for the web by [SkyliteDesign](https://github.com/SkyliteDesign)
|
|
293
|
+
[MIT](LICENSE) — © 2026 VelinStyle · [SkyliteDesign](https://github.com/SkyliteDesign)
|
|
225
294
|
|
|
226
|
-
|
|
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>
|