Fix/cli consumer validation - #71
Merged
Merged
Conversation
volt add silently shipped broken consumer code: utils.ts and form-control-state.ts (imported by 14 of 41 components) were never copied or import-rewritten, and sidebar's relative import to tooltip pointed outside the consumer's project after copy. Both are fixed in cli/lib/core.js's transformContent/copyComponent. Adds e2e/consumer-cli/, a new fixture that runs volt init + volt add for every component and builds/boots the result (pnpm test:e2e:consumer-cli), which is what caught these bugs — the existing e2e/consumer/ fixture only exercised the npm-import path. Wired into CI and test:all. volt init also now prints Tailwind v4 setup guidance when none is detected. Completes v0.9 Phase 1. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…bugs Adds VoltRangeSlider (dual-thumb, ng-primitives/slider) with full ripple effects. Rewrites VoltNativeSelect as a @directive with an attribute selector directly on <select>, matching ng-primitives' own reference pattern: it existed in source and was already copied by volt add select, but wrapping <select> in a component template meant Angular's built-in native-select ControlValueAccessor could never attach, so it had zero forms support. Documented, tested, and given a COMPONENT_STATUS.md entry for the first time. A background a11y-reviewer sweep of the ng-primitives-wrapped components found two more real bugs, both fixed with regression tests that fail without the fix: VoltDropdownMenuItem had no disabled input at all (hostDirectives had no inputs mapping for ngpMenuItemDisabled), and VoltInputOtp's disabled input never reached NgpInputOtp's own state (dead isDisabled alias, so the primitive's disabled-aware slot click guard never engaged even though the native input was separately disabled correctly). Also corrects a stale hardcoded test-count stat on the homepage. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Bumps root, @voltui/components, and @voltui/cli to 0.8.4, finalizes the CHANGELOG [Unreleased] section, and updates every hardcoded version/stat string across README, the docs header, and the homepage. pnpm release:check green (lint, typecheck, check:ai-docs, coverage, pack:lib/cli/mcp); docs e2e, npm-path consumer fixture, and CLI-driven consumer fixture all pass. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…und fixing it Phase 2 (bundle & performance audit): confirmed tree-shaking works correctly on the flat FESM bundle (button-only fixture excludes every unrelated component's identifiers), confirmed themes.css already ships a single preset by default (249 bytes, not all 25), and a Lighthouse pass on 3 docs pages found nothing to fix (LCP 113-143ms, CLS 0.00 across the board). Budget baselines recorded in specs/plans/v0.9.md for v1.0 to compare against. Phase 3 (API freeze): generated specs/api-freeze-0.9.md (41 components, 87 directives, 301 inputs, 42 outputs) via a new scripts/generate-api-freeze.mjs, sharing its extraction logic with scripts/generate-api-reference.mjs through a new scripts/lib/api-extract.mjs module. Reviewing the inventory for naming consistency surfaced and fixed 4 real issues, not just naming nits: - The variant-options parser matched Tailwind pseudo-class prefixes (hover:, focus-visible:) embedded inside class-string values as if they were CVA option keys, corrupting the live docs site's API Reference panel for toggle/pagination/toggle-group/textarea. - VoltNavigationMenuLink's selector was kebab-case, the only attribute selector in the library not using camelCase (had an unexplained lint suppression). Renamed with a deprecated multi-selector + dev-mode warning; fixing it surfaced a test that silently never exercised the directive (wrong selector case) and a usage snippet with markup that never worked (open/close tags on an attribute-only selector). - VoltResizableHandle.resizing and VoltFileUpload/VoltFileDropzone.dragOver renamed to resizingChange/dragOverChange for consistency with every other boolean-state output. Discovered hostDirectives.outputs cannot map one primitive output to two public aliases (both silently go dead) -- fixed by injecting the host directive and bridging its real output manually. All four changes ship with regression tests that fail without the fix. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Bumps root, @voltui/components, and @voltui/cli to 0.9.0 and finalizes the CHANGELOG with a dedicated "Upgrade to 1.0" section listing the three deprecated aliases from Phase 3 (all still working, all removed in 1.0.0). Adds MIGRATION.md, the full 0.x -> 1.0 upgrade guide: the same three renames plus explicit confirmation that no components were removed, v0.7 was purely additive, and every other input/selector/CVA key was reviewed against specs/api-freeze-0.9.md and found already consistent. Updates every hardcoded version/stat string across README, the docs header, and the homepage (including the component/test counts, which had drifted to 41/264 instead of 42/268), and announces in README that the public API is frozen for 1.0. pnpm release:check green (lint, typecheck, check:ai-docs, coverage, pack:lib/cli/mcp); full docs e2e (20 tests), npm-path consumer fixture, and CLI-driven consumer fixture all pass. Not included: publishing to npm. That's handled automatically by .github/workflows/release.yml (scripts/release.mjs) once this merges to main -- it diffs each package's version against what's already published and publishes only what's new, so it doesn't need to run locally or separately for the 0.8.4 vs 0.9.0 versions that were never actually released as intermediates. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Verification
pnpm lintpnpm typecheckpnpm check:ai-docspnpm test:coverageAccessibility