@birdapi/velinstyle 1.1.0 → 1.2.1
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 +89 -161
- package/README.md +187 -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 +128 -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 +560 -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/transparency.js +221 -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/attributes/registry.js +14 -0
- 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 +13 -1
- package/core/meta/sections/registry.json +185 -0
- package/core/transparency/attach.js +74 -0
- package/core/transparency/claims.js +97 -0
- package/core/transparency/doctor.js +142 -0
- package/core/transparency/engine.js +75 -0
- package/core/transparency/export.js +98 -0
- package/core/transparency/index.js +30 -0
- package/core/transparency/migrate.js +130 -0
- package/core/transparency/normalize.js +125 -0
- package/core/transparency/policy.js +105 -0
- package/core/transparency/providers.js +235 -0
- package/core/transparency/registry.js +104 -0
- package/core/transparency/renderer.js +111 -0
- package/core/transparency/reporter.js +113 -0
- package/core/transparency/validator.js +112 -0
- package/dist/chunks/attach-H2ZSEAE6.js +365 -0
- package/dist/chunks/{attributes-STYCS3O5.js → attributes-A423NX5J.js} +3 -3
- package/dist/chunks/attributes-DZCXX2RZ.js +404 -0
- 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-CQMTCEI6.js +113 -0
- 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 +31 -8
- package/dist/search-index.json +182 -10
- package/dist/velin-agent.json +3980 -31
- package/dist/velinstyle-components.iife.js +1622 -286
- package/dist/velinstyle-components.js +1624 -286
- package/dist/velinstyle-components.min.js +262 -114
- package/dist/velinstyle.css +412 -67
- package/dist/velinstyle.d.ts +2 -0
- package/dist/velinstyle.min.css +1 -1
- package/package.json +21 -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/components/transparency.css +138 -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-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
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
<form class="velin-flex velin-flex
|
|
2
|
-
<label class="velin-flex velin-flex
|
|
1
|
+
<form class="velin-flex velin-flex--wrap velin-gap-3 velin-p-4 velin-border-block-end" role="search" aria-label="Filter list">
|
|
2
|
+
<label class="velin-flex velin-flex--col velin-gap-1">
|
|
3
3
|
<span class="velin-text-sm">Query</span>
|
|
4
4
|
<input type="search" class="velin-input" name="q" placeholder="Search…" />
|
|
5
5
|
</label>
|
|
6
|
-
<label class="velin-flex velin-flex
|
|
6
|
+
<label class="velin-flex velin-flex--col velin-gap-1">
|
|
7
7
|
<span class="velin-text-sm">Status</span>
|
|
8
8
|
<select class="velin-select" name="status">
|
|
9
9
|
<option value="">All</option>
|
|
@@ -11,5 +11,5 @@
|
|
|
11
11
|
<option value="done">Done</option>
|
|
12
12
|
</select>
|
|
13
13
|
</label>
|
|
14
|
-
<button type="submit" class="velin-btn velin-btn--primary
|
|
14
|
+
<button type="submit" class="velin-btn velin-btn--primary">Apply</button>
|
|
15
15
|
</form>
|
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
<!-- VelinStyle blueprint: contact form -->
|
|
2
|
-
<form class="velin-container" style="max-width:32rem" novalidate>
|
|
3
|
-
<h2 class="velin-text-2xl" style="font-weight:var(--velin-weight-semibold);margin-block-end:var(--velin-space-
|
|
2
|
+
<form class="velin-container" style="max-width:32rem" id="contact" novalidate>
|
|
3
|
+
<h2 class="velin-text-2xl" style="font-weight:var(--velin-weight-semibold);margin-block-end:var(--velin-space-4)">Contact</h2>
|
|
4
|
+
<velin-form-summary></velin-form-summary>
|
|
4
5
|
<div class="velin-field">
|
|
5
6
|
<label class="velin-label" for="bp-contact-name">Name</label>
|
|
6
|
-
<input type="text" id="bp-contact-name" class="velin-input" autocomplete="name" required>
|
|
7
|
+
<input type="text" id="bp-contact-name" name="name" class="velin-input" autocomplete="name" required>
|
|
7
8
|
</div>
|
|
8
9
|
<div class="velin-field">
|
|
9
10
|
<label class="velin-label" for="bp-contact-email">Email</label>
|
|
10
|
-
<input type="email" id="bp-contact-email" class="velin-input" autocomplete="email" required>
|
|
11
|
+
<input type="email" id="bp-contact-email" name="email" class="velin-input" autocomplete="email" required>
|
|
11
12
|
</div>
|
|
12
13
|
<div class="velin-field">
|
|
13
14
|
<label class="velin-label" for="bp-contact-msg">Message</label>
|
|
14
|
-
<textarea id="bp-contact-msg" class="velin-input" rows="4" required></textarea>
|
|
15
|
+
<textarea id="bp-contact-msg" name="message" class="velin-input" rows="4" required></textarea>
|
|
15
16
|
</div>
|
|
16
17
|
<button type="submit" class="velin-btn velin-btn--primary">Send</button>
|
|
17
18
|
</form>
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
<!-- VelinStyle blueprint: hero section -->
|
|
2
|
-
<section class="velin-container velin-
|
|
2
|
+
<section class="velin-container velin-py-10" style="text-align:center;max-width:48rem;margin-inline:auto">
|
|
3
3
|
<h1 class="velin-text-4xl" style="font-weight:var(--velin-weight-bold);letter-spacing:-0.02em;margin-block-end:var(--velin-space-4)">Headline</h1>
|
|
4
4
|
<p class="velin-text-lg" style="color:var(--velin-color-text-muted);margin-block-end:var(--velin-space-6)">Short value proposition for your product.</p>
|
|
5
5
|
<div class="velin-flex velin-flex--gap-3 velin-flex--justify-center velin-flex--wrap">
|
|
6
|
-
<a class="velin-btn velin-btn--primary" href="#">Primary CTA</a>
|
|
7
|
-
<a class="velin-btn velin-btn--outline" href="#">Secondary</a>
|
|
6
|
+
<a class="velin-btn velin-btn--primary" href="#contact">Primary CTA</a>
|
|
7
|
+
<a class="velin-btn velin-btn--outline" href="#services">Secondary</a>
|
|
8
8
|
</div>
|
|
9
9
|
</section>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<section class="velin-p-4" aria-labelledby="notif-title">
|
|
2
2
|
<h2 id="notif-title" class="velin-text-lg velin-font-bold velin-mbe-4">Notifications</h2>
|
|
3
|
-
<ul class="velin-flex velin-flex
|
|
3
|
+
<ul class="velin-flex velin-flex--col velin-gap-3" role="list">
|
|
4
4
|
<li class="velin-p-3 velin-border velin-rounded-lg">
|
|
5
5
|
<p class="velin-font-medium">Backup complete</p>
|
|
6
6
|
<p class="velin-text-sm velin-text-muted">2 minutes ago</p>
|
|
@@ -15,7 +15,8 @@
|
|
|
15
15
|
</section>
|
|
16
16
|
</velin-stepper>
|
|
17
17
|
<script type="module">
|
|
18
|
-
import '
|
|
18
|
+
// Prefer package entry; for offline vendor installs use: import './vendor/velinstyle/velinstyle-components.min.js';
|
|
19
|
+
import '@birdapi/velinstyle/bundle';
|
|
19
20
|
const stepper = document.getElementById('onboard');
|
|
20
21
|
document.querySelectorAll('[data-next]').forEach((btn) => {
|
|
21
22
|
btn.addEventListener('click', () => stepper?.next());
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
<!-- VelinStyle blueprint: ops console (holy-grail + table) -->
|
|
2
|
+
<div class="velin-layout-holy-grail">
|
|
3
|
+
<header class="velin-p-3 velin-border-block-end" role="banner">
|
|
4
|
+
<strong>Ops console</strong>
|
|
5
|
+
</header>
|
|
6
|
+
<aside class="velin-p-4" aria-label="Console navigation">
|
|
7
|
+
<nav class="velin-flex velin-flex--col velin-gap-2">
|
|
8
|
+
<a class="velin-btn velin-btn--ghost velin-btn--sm" href="#queue">Queue</a>
|
|
9
|
+
<a class="velin-btn velin-btn--ghost velin-btn--sm" href="#reviews">Reviews</a>
|
|
10
|
+
<a class="velin-btn velin-btn--ghost velin-btn--sm" href="#shipped">Shipped</a>
|
|
11
|
+
</nav>
|
|
12
|
+
</aside>
|
|
13
|
+
<main id="main" class="velin-p-6" role="main">
|
|
14
|
+
<h1 class="velin-text-xl velin-font-bold velin-mbe-4">Queue</h1>
|
|
15
|
+
<div class="velin-table-wrapper">
|
|
16
|
+
<table class="velin-table">
|
|
17
|
+
<caption class="velin-sr-only">Ops queue</caption>
|
|
18
|
+
<thead>
|
|
19
|
+
<tr><th scope="col">Item</th><th scope="col">Owner</th><th scope="col">Status</th></tr>
|
|
20
|
+
</thead>
|
|
21
|
+
<tbody>
|
|
22
|
+
<tr><td>Brand refresh</td><td>Alex</td><td><span class="velin-badge velin-badge--success">Ready</span></td></tr>
|
|
23
|
+
<tr><td>Case study</td><td>Sam</td><td><span class="velin-badge">Draft</span></td></tr>
|
|
24
|
+
</tbody>
|
|
25
|
+
</table>
|
|
26
|
+
</div>
|
|
27
|
+
</main>
|
|
28
|
+
<footer class="velin-p-3 velin-border-block-start velin-text-sm velin-text-muted" role="contentinfo">Status · live</footer>
|
|
29
|
+
</div>
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
<!-- VelinStyle blueprint: contiguous pricing band -->
|
|
2
|
+
<section class="velin-container velin-py-10" id="pricing" aria-labelledby="pricing-title">
|
|
3
|
+
<header class="velin-mbe-6" style="text-align:center;max-inline-size:40rem;margin-inline:auto">
|
|
4
|
+
<h2 id="pricing-title" class="velin-text-3xl velin-font-bold velin-mbe-2">Pricing</h2>
|
|
5
|
+
<p class="velin-text-muted">Contiguous columns — highlight the recommended plan with border-primary.</p>
|
|
6
|
+
</header>
|
|
7
|
+
<div class="velin-grid velin-gap-0" style="grid-template-columns:repeat(auto-fit,minmax(14rem,1fr));border:1px solid var(--velin-color-border);border-radius:var(--velin-radius-lg);overflow:hidden">
|
|
8
|
+
<article class="velin-p-6 velin-border-inline" style="border-inline-end:1px solid var(--velin-color-border)">
|
|
9
|
+
<h3 class="velin-text-lg velin-font-bold">Starter</h3>
|
|
10
|
+
<p class="velin-text-3xl velin-font-bold velin-mbs-2 velin-mbe-4">$0</p>
|
|
11
|
+
<ul class="velin-text-sm velin-mbe-4" role="list">
|
|
12
|
+
<li>1 workspace</li>
|
|
13
|
+
<li>Community support</li>
|
|
14
|
+
</ul>
|
|
15
|
+
<button type="button" class="velin-btn velin-btn--outline velin-w-full">Choose</button>
|
|
16
|
+
</article>
|
|
17
|
+
<article class="velin-p-6 velin-border velin-border-primary" style="border-width:2px;z-index:1">
|
|
18
|
+
<span class="velin-badge velin-badge--primary">Recommended</span>
|
|
19
|
+
<h3 class="velin-text-lg velin-font-bold velin-mbs-2">Pro</h3>
|
|
20
|
+
<p class="velin-text-3xl velin-font-bold velin-mbs-2 velin-mbe-4">$29</p>
|
|
21
|
+
<ul class="velin-text-sm velin-mbe-4" role="list">
|
|
22
|
+
<li>Unlimited projects</li>
|
|
23
|
+
<li>Priority support</li>
|
|
24
|
+
</ul>
|
|
25
|
+
<button type="button" class="velin-btn velin-btn--primary velin-w-full">Choose</button>
|
|
26
|
+
</article>
|
|
27
|
+
<article class="velin-p-6">
|
|
28
|
+
<h3 class="velin-text-lg velin-font-bold">Studio</h3>
|
|
29
|
+
<p class="velin-text-3xl velin-font-bold velin-mbs-2 velin-mbe-4">$99</p>
|
|
30
|
+
<ul class="velin-text-sm velin-mbe-4" role="list">
|
|
31
|
+
<li>SSO + seats</li>
|
|
32
|
+
<li>Dedicated success</li>
|
|
33
|
+
</ul>
|
|
34
|
+
<button type="button" class="velin-btn velin-btn--outline velin-w-full">Contact</button>
|
|
35
|
+
</article>
|
|
36
|
+
</div>
|
|
37
|
+
</section>
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<!-- VelinStyle blueprint: process steps -->
|
|
2
|
+
<section class="velin-container velin-py-8" id="process">
|
|
3
|
+
<h2 class="velin-text-3xl" style="font-weight:var(--velin-weight-semibold);margin-block-end:var(--velin-space-6)">How it works</h2>
|
|
4
|
+
<ol class="velin-stack" style="padding-inline-start:1.25rem">
|
|
5
|
+
<li><strong>Discover</strong> — short intake to clarify goals and constraints.</li>
|
|
6
|
+
<li><strong>Plan</strong> — transparent next steps and timeline.</li>
|
|
7
|
+
<li><strong>Deliver</strong> — reviewed output with clear ownership.</li>
|
|
8
|
+
<li><strong>Support</strong> — follow-up when regulations or needs change.</li>
|
|
9
|
+
</ol>
|
|
10
|
+
</section>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<!-- VelinStyle blueprint: services / Leistungen grid -->
|
|
2
|
+
<section class="velin-container velin-py-8" id="services">
|
|
3
|
+
<h2 class="velin-text-3xl" style="font-weight:var(--velin-weight-semibold);margin-block-end:var(--velin-space-6)">Services</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">Service one</h3><p class="velin-card__text">Outcome-focused description.</p><a href="#contact" class="velin-btn velin-btn--outline velin-btn--sm">Learn more</a></div></article>
|
|
6
|
+
<article class="velin-card"><div class="velin-card__body"><h3 class="velin-card__title">Service two</h3><p class="velin-card__text">Outcome-focused description.</p><a href="#contact" class="velin-btn velin-btn--outline velin-btn--sm">Learn more</a></div></article>
|
|
7
|
+
<article class="velin-card"><div class="velin-card__body"><h3 class="velin-card__title">Service three</h3><p class="velin-card__text">Outcome-focused description.</p><a href="#contact" class="velin-btn velin-btn--outline velin-btn--sm">Learn more</a></div></article>
|
|
8
|
+
</div>
|
|
9
|
+
</section>
|
|
@@ -1,19 +1,21 @@
|
|
|
1
1
|
<velin-sheet id="settings-sheet" title="Settings">
|
|
2
|
-
<form class="velin-flex velin-flex
|
|
3
|
-
<label class="velin-flex velin-flex
|
|
2
|
+
<form class="velin-flex velin-flex--col velin-gap-4 velin-p-4">
|
|
3
|
+
<label class="velin-flex velin-flex--col velin-gap-1">
|
|
4
4
|
<span>Display name</span>
|
|
5
5
|
<input type="text" class="velin-input" name="name" autocomplete="name" />
|
|
6
6
|
</label>
|
|
7
|
-
<label class="velin-
|
|
8
|
-
<input type="checkbox" class="velin-
|
|
9
|
-
<span
|
|
7
|
+
<label class="velin-switch">
|
|
8
|
+
<input type="checkbox" class="velin-switch__input" name="notify" />
|
|
9
|
+
<span class="velin-switch__track" aria-hidden="true"></span>
|
|
10
|
+
<span class="velin-switch__label">Email notifications</span>
|
|
10
11
|
</label>
|
|
11
12
|
<button type="submit" class="velin-btn velin-btn--primary">Save</button>
|
|
12
13
|
</form>
|
|
13
14
|
</velin-sheet>
|
|
14
15
|
<button type="button" class="velin-btn velin-btn--outline" id="open-settings">Open settings</button>
|
|
15
16
|
<script type="module">
|
|
16
|
-
import '
|
|
17
|
+
// Prefer package entry; for offline vendor installs use: import './vendor/velinstyle/velinstyle-components.min.js';
|
|
18
|
+
import '@birdapi/velinstyle/bundle';
|
|
17
19
|
document.getElementById('open-settings')?.addEventListener('click', () => {
|
|
18
20
|
document.getElementById('settings-sheet')?.open?.();
|
|
19
21
|
});
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
<!-- VelinStyle blueprint: split hero (copy + ops panel) -->
|
|
2
|
+
<section class="velin-container velin-py-10" id="hero" data-velin-section="hero" aria-labelledby="split-hero-title">
|
|
3
|
+
<div class="velin-grid velin-gap-6" style="grid-template-columns:repeat(auto-fit,minmax(16rem,1fr));align-items:center">
|
|
4
|
+
<div>
|
|
5
|
+
<p class="velin-text-sm velin-text-muted velin-mbe-2">Creative ops</p>
|
|
6
|
+
<h1 id="split-hero-title" class="velin-text-4xl velin-font-bold velin-mbe-4">Ship editorial work without chaos</h1>
|
|
7
|
+
<p class="velin-text-lg velin-text-muted velin-mbe-6">Split layout hero — primary and secondary CTAs only.</p>
|
|
8
|
+
<div class="velin-flex velin-flex--gap-3 velin-flex--wrap">
|
|
9
|
+
<a class="velin-btn velin-btn--primary" href="#contact">Book a call</a>
|
|
10
|
+
<a class="velin-btn velin-btn--outline" href="#capabilities">See capabilities</a>
|
|
11
|
+
</div>
|
|
12
|
+
</div>
|
|
13
|
+
<aside class="velin-card" aria-label="Ops snapshot">
|
|
14
|
+
<div class="velin-card__body">
|
|
15
|
+
<h2 class="velin-card__title">Live ops</h2>
|
|
16
|
+
<p class="velin-card__text velin-text-muted">Queue · reviews · publishes</p>
|
|
17
|
+
<ul class="velin-stack velin-mbs-4" role="list">
|
|
18
|
+
<li class="velin-flex velin-flex--justify-between"><span>Briefs</span><strong>12</strong></li>
|
|
19
|
+
<li class="velin-flex velin-flex--justify-between"><span>In review</span><strong>4</strong></li>
|
|
20
|
+
<li class="velin-flex velin-flex--justify-between"><span>Shipped</span><strong>38</strong></li>
|
|
21
|
+
</ul>
|
|
22
|
+
</div>
|
|
23
|
+
</aside>
|
|
24
|
+
</div>
|
|
25
|
+
</section>
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<!-- VelinStyle blueprint: testimonials -->
|
|
2
|
+
<section class="velin-container velin-py-8" id="testimonials">
|
|
3
|
+
<h2 class="velin-text-3xl" style="font-weight:var(--velin-weight-semibold);margin-block-end:var(--velin-space-6)">What clients say</h2>
|
|
4
|
+
<div class="velin-grid velin-grid--auto-fit">
|
|
5
|
+
<figure class="velin-card"><div class="velin-card__body"><blockquote class="velin-card__text">“Clear advice and a process we could follow.”</blockquote><figcaption class="velin-text-sm" style="color:var(--velin-color-text-muted);margin-block-start:var(--velin-space-3)">— A. Meyer, Founder</figcaption></div></figure>
|
|
6
|
+
<figure class="velin-card"><div class="velin-card__body"><blockquote class="velin-card__text">“We finally understood our options without pressure.”</blockquote><figcaption class="velin-text-sm" style="color:var(--velin-color-text-muted);margin-block-start:var(--velin-space-3)">— S. Keller, Operator</figcaption></div></figure>
|
|
7
|
+
</div>
|
|
8
|
+
</section>
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<!-- VelinStyle blueprint: trust bar -->
|
|
2
|
+
<section class="velin-container velin-py-6" aria-label="Trusted by">
|
|
3
|
+
<p class="velin-text-sm velin-text-center" style="color:var(--velin-color-text-muted);margin-block-end:var(--velin-space-4)">Trusted by teams who value clarity</p>
|
|
4
|
+
<ul class="velin-flex velin-flex--wrap velin-flex--justify-center velin-flex--gap-6" style="list-style:none;padding:0;margin:0">
|
|
5
|
+
<li class="velin-text-sm" style="font-weight:var(--velin-weight-semibold)">Acme Audit</li>
|
|
6
|
+
<li class="velin-text-sm" style="font-weight:var(--velin-weight-semibold)">Nordic Ledger</li>
|
|
7
|
+
<li class="velin-text-sm" style="font-weight:var(--velin-weight-semibold)">Rhein Finance</li>
|
|
8
|
+
<li class="velin-text-sm" style="font-weight:var(--velin-weight-semibold)">Helix Tax</li>
|
|
9
|
+
</ul>
|
|
10
|
+
</section>
|
package/cli/cli-manifest.json
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "1.1
|
|
2
|
+
"version": "1.2.1",
|
|
3
3
|
"commands": [
|
|
4
4
|
{
|
|
5
5
|
"name": "init",
|
|
6
|
-
"summary": "Create velinstyle.config.js",
|
|
6
|
+
"summary": "Create velinstyle.config.js, optional vendor copy, and starter HTML with reveal/sprite defaults",
|
|
7
7
|
"flags": [],
|
|
8
8
|
"example": "velinstyle init"
|
|
9
9
|
},
|
|
10
10
|
{
|
|
11
11
|
"name": "build",
|
|
12
12
|
"summary": "Build custom CSS with selected layers from config",
|
|
13
|
-
"flags": [],
|
|
14
|
-
"example": "velinstyle build"
|
|
13
|
+
"flags": ["--output", "-o", "--minify", "--preset"],
|
|
14
|
+
"example": "velinstyle build --preset lite -o ./lite.css"
|
|
15
15
|
},
|
|
16
16
|
{
|
|
17
17
|
"name": "themes",
|
|
@@ -34,9 +34,9 @@
|
|
|
34
34
|
},
|
|
35
35
|
{
|
|
36
36
|
"name": "scan",
|
|
37
|
-
"summary": "Security, accessibility, CSS, and PII scanner",
|
|
37
|
+
"summary": "Security, accessibility, CSS, and PII scanner (directory or single file)",
|
|
38
38
|
"flags": ["--format", "--severity", "--only", "--fix", "--fix-dry-run", "--fix-lang"],
|
|
39
|
-
"example": "velinstyle scan .
|
|
39
|
+
"example": "velinstyle scan index.html"
|
|
40
40
|
},
|
|
41
41
|
{
|
|
42
42
|
"name": "prefix",
|
|
@@ -46,17 +46,61 @@
|
|
|
46
46
|
},
|
|
47
47
|
{
|
|
48
48
|
"name": "blueprint",
|
|
49
|
-
"summary": "Print HTML blueprint snippets",
|
|
50
|
-
"flags": ["--output", "-o"],
|
|
49
|
+
"summary": "Print HTML blueprint snippets; --strict fails on classes missing from CSS",
|
|
50
|
+
"flags": ["--output", "-o", "--strict"],
|
|
51
51
|
"subcommands": ["list"],
|
|
52
|
-
"example": "velinstyle blueprint modal -o snippet.html"
|
|
52
|
+
"example": "velinstyle blueprint modal -o snippet.html --strict"
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"name": "create",
|
|
56
|
+
"summary": "Scaffold a runnable project: landing | dashboard | docs | auth",
|
|
57
|
+
"flags": ["--theme", "--no-copy"],
|
|
58
|
+
"subcommands": ["landing", "dashboard", "docs", "auth"],
|
|
59
|
+
"example": "velinstyle create landing ./my-site --theme earth"
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"name": "serve",
|
|
63
|
+
"summary": "Serve a directory over HTTP (default port 4173)",
|
|
64
|
+
"flags": ["--port"],
|
|
65
|
+
"example": "velinstyle serve . --port 4173"
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"name": "doctor",
|
|
69
|
+
"summary": "Check dist assets, themes, config, icons, and Windows ESM import hints",
|
|
70
|
+
"flags": [],
|
|
71
|
+
"example": "velinstyle doctor"
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"name": "check",
|
|
75
|
+
"summary": "Aggregate gate: doctor + blueprint --strict + scan + review (alias: validate)",
|
|
76
|
+
"flags": ["--json", "--sarif", "--profile"],
|
|
77
|
+
"example": "velinstyle check . --profile marketing"
|
|
53
78
|
},
|
|
54
79
|
{
|
|
55
80
|
"name": "scaffold",
|
|
56
|
-
"summary": "
|
|
81
|
+
"summary": "Plan-first page HTML or recipe fragment from natural language",
|
|
57
82
|
"flags": ["--output", "-o", "--json"],
|
|
58
83
|
"subcommands": ["list-intents"],
|
|
59
|
-
"example": "velinstyle scaffold \"
|
|
84
|
+
"example": "velinstyle scaffold \"Steuerberater Landingpage mit Kontakt\""
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"name": "plan",
|
|
88
|
+
"summary": "Emit page plan JSON from a prompt (no HTML)",
|
|
89
|
+
"flags": ["--output", "-o", "--json"],
|
|
90
|
+
"example": "velinstyle plan \"SaaS landing with pricing\""
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"name": "review",
|
|
94
|
+
"summary": "Design / a11y / SEO / performance / conversion review gate",
|
|
95
|
+
"flags": ["--json", "--prompt", "--profile"],
|
|
96
|
+
"example": "velinstyle review out.html --profile marketing"
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"name": "wc",
|
|
100
|
+
"summary": "Inspect Web Component APIs from source",
|
|
101
|
+
"flags": [],
|
|
102
|
+
"subcommands": ["api"],
|
|
103
|
+
"example": "velinstyle wc api velin-toast"
|
|
60
104
|
},
|
|
61
105
|
{
|
|
62
106
|
"name": "layout",
|
|
@@ -67,10 +111,10 @@
|
|
|
67
111
|
},
|
|
68
112
|
{
|
|
69
113
|
"name": "perf",
|
|
70
|
-
"summary": "Performance audit for images and scripts",
|
|
114
|
+
"summary": "Performance audit for images and scripts (directory or .html file)",
|
|
71
115
|
"flags": ["--json", "--write", "--dry-run"],
|
|
72
116
|
"subcommands": ["audit", "suggest", "fix"],
|
|
73
|
-
"example": "velinstyle perf audit
|
|
117
|
+
"example": "velinstyle perf audit index.html"
|
|
74
118
|
},
|
|
75
119
|
{
|
|
76
120
|
"name": "tokens",
|
|
@@ -81,17 +125,37 @@
|
|
|
81
125
|
},
|
|
82
126
|
{
|
|
83
127
|
"name": "docs",
|
|
84
|
-
"summary": "Generate developer reference Markdown",
|
|
128
|
+
"summary": "Generate developer reference Markdown (alias: documentation)",
|
|
85
129
|
"flags": ["--scope", "--out"],
|
|
86
130
|
"subcommands": ["generate"],
|
|
87
131
|
"example": "velinstyle docs generate --scope all"
|
|
88
132
|
},
|
|
89
133
|
{
|
|
90
134
|
"name": "meta",
|
|
91
|
-
"summary": "Build Velin-Meta agent bundle
|
|
92
|
-
"flags": ["--out", "--llms-out", "--base-url", "--no-llms"],
|
|
135
|
+
"summary": "Build Velin-Meta agent bundle; page --write merges curated goals/intent",
|
|
136
|
+
"flags": ["--out", "--llms-out", "--base-url", "--no-llms", "--write"],
|
|
93
137
|
"subcommands": ["page"],
|
|
94
|
-
"example": "velinstyle meta"
|
|
138
|
+
"example": "velinstyle meta page index.html --write"
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
"name": "search",
|
|
142
|
+
"summary": "Build JSON search index for VelinSearch",
|
|
143
|
+
"flags": ["--out", "--extra-html"],
|
|
144
|
+
"subcommands": ["index"],
|
|
145
|
+
"example": "velinstyle search index --out dist/search-index.json"
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
"name": "skills",
|
|
149
|
+
"summary": "Registry-first AI skill catalog and install runner",
|
|
150
|
+
"flags": ["--capability", "--status", "--priority", "--origin", "--category", "--target", "--no-deps", "--json", "--human"],
|
|
151
|
+
"subcommands": ["list", "show", "install", "run", "validate", "doctor", "packs", "bundles", "templates", "projects", "graphs"],
|
|
152
|
+
"example": "velinstyle skills show scaffold.landing --human"
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
"name": "workflow",
|
|
156
|
+
"summary": "Resolve workflow graph or project workflow steps",
|
|
157
|
+
"flags": ["--json", "--dry-run", "--step"],
|
|
158
|
+
"example": "velinstyle workflow landingpage --json"
|
|
95
159
|
}
|
|
96
160
|
]
|
|
97
161
|
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared WCAG contrast math for token checks and HTML scan (inline styles).
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
const AA_NORMAL = 4.5;
|
|
6
|
+
const AA_LARGE = 3;
|
|
7
|
+
|
|
8
|
+
export function parseOklch(str) {
|
|
9
|
+
const m = String(str).match(/oklch\(\s*([\d.]+%?)\s+([\d.]+)\s+([\d.]+)/i);
|
|
10
|
+
if (!m) return null;
|
|
11
|
+
const L = m[1].includes('%') ? parseFloat(m[1]) / 100 : parseFloat(m[1]);
|
|
12
|
+
const C = parseFloat(m[2]);
|
|
13
|
+
const H = (parseFloat(m[3]) * Math.PI) / 180;
|
|
14
|
+
const a = C * Math.cos(H);
|
|
15
|
+
const b = C * Math.sin(H);
|
|
16
|
+
return oklabToXyz(L, a, b);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function oklabToXyz(L, a, b) {
|
|
20
|
+
const l_ = L + 0.3963377774 * a + 0.2158037573 * b;
|
|
21
|
+
const m_ = L - 0.1055613458 * a - 0.0638541728 * b;
|
|
22
|
+
const s_ = L - 0.0894841775 * a - 1.291485548 * b;
|
|
23
|
+
const l = l_ ** 3;
|
|
24
|
+
const m = m_ ** 3;
|
|
25
|
+
const s = s_ ** 3;
|
|
26
|
+
return {
|
|
27
|
+
x: 1.2268798758 * l - 0.557814996 * m + 0.2813910455 * s,
|
|
28
|
+
y: -0.0405801784 * l + 1.1122568696 * m - 0.0717110581 * s,
|
|
29
|
+
z: -0.0192546317 * l - 0.2163216959 * m + 1.5169393792 * s,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export function parseHex(str) {
|
|
34
|
+
const m = String(str).trim().match(/^#([0-9a-f]{3}|[0-9a-f]{6})$/i);
|
|
35
|
+
if (!m) return null;
|
|
36
|
+
let hex = m[1];
|
|
37
|
+
if (hex.length === 3) hex = hex.split('').map((c) => c + c).join('');
|
|
38
|
+
const r = parseInt(hex.slice(0, 2), 16) / 255;
|
|
39
|
+
const g = parseInt(hex.slice(2, 4), 16) / 255;
|
|
40
|
+
const b = parseInt(hex.slice(4, 6), 16) / 255;
|
|
41
|
+
const lin = (v) => (v <= 0.04045 ? v / 12.92 : ((v + 0.055) / 1.055) ** 2.4);
|
|
42
|
+
return { x: 0, y: 0.2126 * lin(r) + 0.7152 * lin(g) + 0.0722 * lin(b), z: 0, _lum: 0.2126 * lin(r) + 0.7152 * lin(g) + 0.0722 * lin(b) };
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export function relLuminance(xyz) {
|
|
46
|
+
if (xyz && typeof xyz._lum === 'number') return xyz._lum;
|
|
47
|
+
const { x, y, z } = xyz;
|
|
48
|
+
const lin = (v) => (v <= 0.04045 ? v / 12.92 : ((v + 0.055) / 1.055) ** 2.4);
|
|
49
|
+
const r = lin(3.2406 * x - 1.5372 * y - 0.4986 * z);
|
|
50
|
+
const g = lin(-0.9689 * x + 1.8758 * y + 0.0415 * z);
|
|
51
|
+
const b = lin(0.0557 * x - 0.204 * y + 1.057 * z);
|
|
52
|
+
return 0.2126 * r + 0.7152 * g + 0.0722 * b;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export function contrastRatio(l1, l2) {
|
|
56
|
+
const [hi, lo] = l1 > l2 ? [l1, l2] : [l2, l1];
|
|
57
|
+
return (hi + 0.05) / (lo + 0.05);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export function parseColor(str) {
|
|
61
|
+
if (!str) return null;
|
|
62
|
+
const s = String(str).trim();
|
|
63
|
+
if (s.startsWith('#')) return parseHex(s);
|
|
64
|
+
if (/^oklch\(/i.test(s)) return parseOklch(s);
|
|
65
|
+
const rgb = s.match(/^rgba?\(\s*([\d.]+)\s*,\s*([\d.]+)\s*,\s*([\d.]+)/i);
|
|
66
|
+
if (rgb) {
|
|
67
|
+
const r = Number(rgb[1]) / 255;
|
|
68
|
+
const g = Number(rgb[2]) / 255;
|
|
69
|
+
const b = Number(rgb[3]) / 255;
|
|
70
|
+
const lin = (v) => (v <= 0.04045 ? v / 12.92 : ((v + 0.055) / 1.055) ** 2.4);
|
|
71
|
+
return { x: 0, y: 0, z: 0, _lum: 0.2126 * lin(r) + 0.7152 * lin(g) + 0.0722 * lin(b) };
|
|
72
|
+
}
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export function styleDecl(style, prop) {
|
|
77
|
+
const re = new RegExp(`(?:^|;)\\s*${prop}\\s*:\\s*([^;]+)`, 'i');
|
|
78
|
+
const m = String(style).match(re);
|
|
79
|
+
return m ? m[1].trim() : null;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/** Returns ratio or null if colors cannot be parsed. */
|
|
83
|
+
export function contrastFromInlineStyle(style, { largeText = false } = {}) {
|
|
84
|
+
const fgRaw = styleDecl(style, 'color');
|
|
85
|
+
const bgRaw = styleDecl(style, 'background-color') || styleDecl(style, 'background');
|
|
86
|
+
if (!fgRaw || !bgRaw) return null;
|
|
87
|
+
// Ignore gradients / images
|
|
88
|
+
if (/gradient|url\(/i.test(bgRaw)) return null;
|
|
89
|
+
const fg = parseColor(fgRaw.split(/\s+/)[0] === 'url' ? null : fgRaw);
|
|
90
|
+
const bg = parseColor(bgRaw.split(/\s/)[0]);
|
|
91
|
+
if (!fg || !bg) return null;
|
|
92
|
+
const ratio = contrastRatio(relLuminance(fg), relLuminance(bg));
|
|
93
|
+
const min = largeText ? AA_LARGE : AA_NORMAL;
|
|
94
|
+
return { ratio, min, pass: ratio >= min, fg: fgRaw, bg: bgRaw };
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
export { AA_NORMAL, AA_LARGE };
|