Skip to content

chore: version packages#2950

Merged
viniciusdacal merged 1 commit into
mainfrom
changeset-release/main
Apr 24, 2026
Merged

chore: version packages#2950
viniciusdacal merged 1 commit into
mainfrom
changeset-release/main

Conversation

@github-actions
Copy link
Copy Markdown
Contributor

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.

Releases

@vertz/native-compiler@0.2.79

@vertz/native-compiler

0.2.76

Patch Changes

  • #2883 8a9546d Thanks @viniciusdacal! - fix(compiler): recognize regex literals in strip_comments so a backtick inside a regex body doesn't eat the rest of the file

    Closes #2878.

    The native compiler's import_injection pass scans source for helper usage via strip_comments, which replaces string-literal contents with spaces so signal() inside a template literal doesn't trigger a spurious signal import. A ` inside a regex literal like /`([^`]+)`/ was being treated as a template-literal opener — the scanner then consumed everything to EOF looking for a closing backtick and erased every subsequent helper call (__element, __flushMountFrame, __discardMountFrame, …). Those helpers then never made it into the generated import block and the bundled component crashed at runtime with ReferenceError: __flushMountFrame is not defined as soon as it tried to render under SSR.

    strip_comments now detects regex literals (using the preceding-token heuristic — / after ), ], }, or an expression-valued identifier is division; anything else that isn't a // or /* comment starts a regex) and copies the regex body verbatim. Fixes pre-render for routes that transitively rendered packages/landing/src/components/features.tsx (vertz.dev / and /openapi), which reached the landing page as the inner repro from bug(ui-primitives): List context lost during SSR — List.Item throws under vertz build #2878.

    Also adds a List SSR regression test in @vertz/ui-primitives covering <List><List.Item/></List> end-to-end through ssrRenderSinglePass so the Provider/context flow the original ticket worried about is exercised on the server path.

0.2.73

Patch Changes

  • #2830 35eb962 Thanks @viniciusdacal! - fix(compiler): transform JSX inside .map() callbacks with destructured params

    Previously, when a .map() callback used destructuring in its parameter
    list, the JSX inside the callback was emitted verbatim, causing a
    SyntaxError: Unexpected token '<' in the browser.

    const entries: [string, string][] = [
      ["a", "Alpha"],
      ["b", "Beta"],
    ];
    <div>
      {entries.map(([key, label]) => (
        <button key={key}>{label}</button>
      ))}
    </div>;

    The list classifier bailed to the generic-expression path whenever the
    first parameter wasn't a plain BindingIdentifier. It now accepts any
    binding pattern (array or object destructuring) and preserves the raw
    pattern source in the emitted render / key functions.

    Closes compiler: destructured tuple/object param in .map() callback leaves JSX untransformed in output #2817.

  • #2828 0c0cf38 Thanks @viniciusdacal! - fix(compiler): don't reactify ternaries inside callback bodies in JSX branches

    When a conditional's non-JSX branch contained a nested callback with its
    own ternary (e.g., onPick={(v) => selected = v ? env.id : null}), the
    JSX compiler would lift that inner ternary out of its closure, rewriting
    it as __conditional(() => v, () => env.id, () => null) at the call site.
    This produced a runtime ReferenceError: v is not defined because the
    callback parameter v no longer existed in the outer scope.

    The branch-level ConditionalSpanFinder now stops descending into
    function/arrow-function bodies that are strictly nested inside the target
    branch span, so imperative ternaries inside callbacks stay in place while
    genuine JSX-level nested ternaries (a ? <X/> : b ? <Y/> : <Z/>) keep
    their reactive __conditional wrapping.

    Closes compiler: inline callback param in nested .map() hoisted out of scope, generating orphan reference #2816.

  • #2827 7e80041 Thanks @viniciusdacal! - fix(compiler,ui): wrap multi-child component children in a DocumentFragment

    Previously, a component with multiple JSX children compiled to
    Component({ children: () => [a, b] }). Consumers such as
    Context.Provider, Suspense, and ErrorBoundary call children() and
    expect a single node — they got an array instead, which downstream
    appendChild calls rejected. This affected any component that treats
    children as a renderable slot, so code like

    <RouterContext.Provider value={router}>
      <aside></aside>
      <main></main>
    </RouterContext.Provider>

    crashed at mount with a generic
    TypeError: Failed to execute 'appendChild' on 'Node': parameter 1 is not of type 'Node'.

    The compiler now emits a DocumentFragment-returning thunk for
    multi-child components, mirroring how <>…</> fragments are already
    handled. Context.Provider also wraps any hand-written array result in a
    DocumentFragment as a defensive fallback, replacing the previous
    dev-only throw (which was unreliable in the browser because
    process.env.NODE_ENV is not polyfilled).

    Closes router: RouterContext.Provider with multiple JSX children throws generic appendChild error #2821.

  • #2833 5223868 Thanks @viniciusdacal! - fix(jsx): honor defaultValue / defaultChecked on <input> and <textarea>

    The React-style uncontrolled-initial-value props were silently dropped:

    <textarea defaultValue="Hello world" />  // rendered empty
    <input defaultValue="initial" />          // rendered empty
    <input type="checkbox" defaultChecked /> // rendered unchecked

    Both have no HTML content attribute, so the compiler's fallback to
    setAttribute("defaultValue", ...) was a no-op in the browser.

    The native compiler and the test-time JSX runtime now route these through
    the IDL property path (el.defaultValue = "...", el.defaultChecked = true),
    matching how value / checked are already handled. The SSR DOM shim
    serializes them to the correct initial HTML — value="..." for <input>,
    text content for <textarea>, and the checked attribute for
    <input type="checkbox"> — so the value is visible before hydration.

    Closes jsx: defaultValue on <textarea> and <input> is silently ignored #2820.

0.2.72

Patch Changes

  • #2799 d8e23a1 Thanks @viniciusdacal! - fix(ui,compiler): emit numeric/boolean raw CSS declarations from css() and variants()

    Raw object declarations inside nested selectors used to silently drop
    non-string values. Numeric values now flow through the same kebab-case +
    unitless/px rules as shorthand tokens, in both the runtime and the AOT
    compiler.

    css({
      card: [
        {
          "&:hover": {
            fontSize: 16, // → font-size: 16px
            opacity: 0.8, // → opacity: 0.8 (unitless)
            marginTop: -8, // → margin-top: -8px
            "--my-tone": 1, // → --my-tone: 1 (custom prop, no unit)
            padding: 0, // → padding: 0 (zero is unitless)
          },
        },
      ],
    });

    UnaryExpression(-, NumericLiteral) and BooleanLiteral are also accepted.
    The unitless property list is shared between packages/ui/src/css/unitless-properties.ts
    and native/vertz-compiler-core/src/css_unitless.rs, with a parity test
    already enforcing they stay in sync.

    Closes compiler(css): extract_css_declarations drops numeric values like { opacity: 1 } #2783.

  • #2795 8bed545 Thanks @viniciusdacal! - refactor(ui): drop shorthand-string CSS API in favour of object-form css() +
    token.*

    The array-form css() API is gone. css() and variants() now accept only
    object-form StyleBlock trees:

    // Before
    css({ card: ["bg:background", "p:4", "rounded:lg"] });
    
    // After
    css({
      card: {
        backgroundColor: token.color.background,
        padding: token.spacing[4],
        borderRadius: token.radius.lg,
      },
    });

    Removed from the public API: StyleEntry, StyleValue, UtilityClass, s,
    parseShorthand, resolveToken, ShorthandParseError, TokenResolveError,
    InlineStyleError, isKnownProperty, isValidColorToken, and all
    token-table helpers.

    The Rust compiler (@vertz/native-compiler) is smaller: the array-form
    shorthand parser, the 1,900-line token tables, and the diagnostic pass that
    validated shorthand strings have all been deleted. Only object-form extraction
    remains.

    Closes fix(ui-server): SSR emits 10,663B of dead component CSS on every AOT page #1988.

  • #2798 e2db646 Thanks @viniciusdacal! - fix(compiler): emit valid code for callback ref props on host elements

    Previously, the native compiler always emitted {expr}.current = {el} for
    the ref JSX prop, assuming an object ref. For a callback ref such as
    ref={(el) => { /* ... */ }}, the output was the invalid JavaScript
    (el) => { /* ... */ }.current = __el0 — a member expression cannot
    follow an arrow function with a block body, so the module failed to parse
    with "Unexpected token '.'".

    The fix routes both forms through a new __ref(el, value) runtime helper
    (matching the existing inline logic in jsx-runtime/index.ts) that calls
    the value if it is a function and otherwise assigns to .current.

    Closes compiler: ref callback + innerHTML on host element emits invalid code #2788.

  • #2797 483dbe2 Thanks @viniciusdacal! - fix(compiler): route innerHTML through AOT content, not as an HTML attribute

    When a JSX element with an innerHTML prop was compiled through the AOT SSR
    path (for example a <BrandedIcon> sub-component), the attribute was being
    serialized as the HTML attribute innerHTML="..." rather than written into
    the element's content slot. The DOM path (via __html()) already handled it
    correctly; the AOT path missed it because innerHTML was not in the skip
    list and had no extraction helper.

    The AOT transformer now mirrors dangerouslySetInnerHTML: it skips
    innerHTML during attribute serialization and uses the expression as the
    element's content.

    Closes compiler: innerHTML prop set as HTML attribute (not DOM property) inside nested component JSX #2790.

0.2.67

Patch Changes

  • #2725 56e7e2f Thanks @viniciusdacal! - fix(native-compiler): add repository/license/description fields to package.json

    npm publish with --provenance rejected the 0.2.66 publish with:

    npm error code E422
    Error verifying sigstore provenance bundle: Failed to validate
    repository information: package.json: "repository.url" is "",
    expected to match "https://github.com/vertz-dev/vertz" from provenance
    

    The @vertz/native-compiler package had never been published before, and its package.json was missing repository, license, and description. npm's provenance attestation requires the manifest's repository.url to match the source repo recorded in the provenance bundle. Added all three fields matching the pattern used by the other @vertz/* packages.

0.2.66

Patch Changes

  • #2685 4cc0aa9 Thanks @viniciusdacal! - Fix false-positive batch import injection when async batch() appears as an object method definition

0.1.1

Patch Changes

  • #2265 36b0f20 Thanks @viniciusdacal! - feat(ui): add form-level onChange with per-input debounce

    <form onChange={handler}> fires when any child input changes, receiving all current form values as a FormValues object. Per-input debounce={ms} delays the callback for text inputs while immediate controls (selects, checkboxes) flush instantly.

    Breaking: onChange on <form> now receives FormValues instead of a DOM Event. Use ref + addEventListener for the raw DOM event.

@vertz/cli@0.2.79

Patch Changes

  • Updated dependencies []:
    • @vertz/codegen@0.2.79
    • @vertz/compiler@0.2.79
    • @vertz/create-vertz-app@0.2.79
    • @vertz/db@0.2.79
    • @vertz/errors@0.2.79
    • @vertz/tui@0.2.79
    • @vertz/ui-server@0.2.79
    • @vertz/docs@0.1.3

@vertz/cloudflare@0.2.79

Patch Changes

  • Updated dependencies []:
    • @vertz/core@0.2.79
    • @vertz/ui-server@0.2.79

@vertz/codegen@0.2.79

Patch Changes

  • Updated dependencies []:
    • @vertz/compiler@0.2.79

@vertz/core@0.2.79

Patch Changes

  • Updated dependencies []:
    • @vertz/schema@0.2.79

create-vertz@0.2.79

Patch Changes

  • Updated dependencies []:
    • @vertz/create-vertz-app@0.2.79

@vertz/db@0.2.79

Patch Changes

  • Updated dependencies []:
    • @vertz/errors@0.2.79
    • @vertz/schema@0.2.79

@vertz/desktop@0.2.79

Patch Changes

  • Updated dependencies []:
    • @vertz/errors@0.2.79

@vertz/fetch@0.2.79

Patch Changes

  • Updated dependencies []:
    • @vertz/errors@0.2.79

@vertz/runtime@0.2.79

Patch Changes

  • #2940 7106c64 Thanks @viniciusdacal! - fix(vtz): invalidate dependents' cache when a source file fails to compile

    Closes #2766.

    The dev-server file-watcher loop continued inside the compile-error branch, bypassing process_file_change. Consequence: if a user introduced a syntax error in utils.ts, transitive dependents of utils.ts kept their stale compiled cache entries until they were individually re-touched. After the error was fixed, those dependents could still serve stale code.

    Same shape as the delete-event bug fixed in #2764. The compile-error branch now falls through to process_file_change so the changed file and its transitive dependents are invalidated. The module-graph update is still skipped on error — we don't want to commit import edges scanned from broken source.

    As part of this fix, the per-change handler body was moved out of the file-watcher closure in server::http into server::file_change_handler::handle_file_change so the pipeline is directly reachable from tests without spinning up start_server_with_lifecycle.

@vertz/schema@0.2.79

Patch Changes

  • Updated dependencies []:
    • @vertz/errors@0.2.79

@vertz/server@0.2.79

Patch Changes

  • Updated dependencies []:
    • @vertz/core@0.2.79
    • @vertz/db@0.2.79
    • @vertz/errors@0.2.79
    • @vertz/schema@0.2.79

@vertz/testing@0.2.79

Patch Changes

  • Updated dependencies []:
    • @vertz/core@0.2.79
    • @vertz/db@0.2.79
    • @vertz/server@0.2.79

@vertz/theme-shadcn@0.2.79

Patch Changes

  • Updated dependencies []:
    • @vertz/ui@0.2.79
    • @vertz/ui-primitives@0.2.79

@vertz/tui@0.2.79

Patch Changes

  • Updated dependencies []:
    • @vertz/ui@0.2.79

@vertz/ui@0.2.79

Patch Changes

  • Updated dependencies []:
    • @vertz/fetch@0.2.79
    • @vertz/schema@0.2.79

@vertz/ui-canvas@0.2.79

Patch Changes

  • Updated dependencies []:
    • @vertz/ui@0.2.79

@vertz/ui-primitives@0.2.79

Patch Changes

  • Updated dependencies []:
    • @vertz/ui@0.2.79

@vertz/ui-server@0.2.79

Patch Changes

  • Updated dependencies []:
    • @vertz/core@0.2.79
    • @vertz/ui@0.2.79

vertz@0.2.79

Patch Changes

  • Updated dependencies []:
    • @vertz/cli@0.2.79
    • @vertz/cloudflare@0.2.79
    • @vertz/db@0.2.79
    • @vertz/errors@0.2.79
    • @vertz/fetch@0.2.79
    • @vertz/schema@0.2.79
    • @vertz/server@0.2.79
    • @vertz/testing@0.2.79
    • @vertz/tui@0.2.79
    • @vertz/ui@0.2.79
    • @vertz/ui-primitives@0.2.79
    • @vertz/ui-server@0.2.79
    • @vertz/ui-auth@0.2.20

@vertz/compiler@0.2.79

@vertz/create-vertz-app@0.2.79

@vertz/errors@0.2.79

@vertz/icons@0.2.79

@vertz/test@0.2.79

@vertz-benchmarks/vertz-app@0.0.77

Patch Changes

  • Updated dependencies []:
    • @vertz/theme-shadcn@0.2.79
    • @vertz/ui@0.2.79
    • @vertz/ui-server@0.2.79

@vertz-examples/task-manager@0.2.79

Patch Changes

  • Updated dependencies []:
    • @vertz/errors@0.2.79
    • @vertz/fetch@0.2.79
    • @vertz/icons@0.2.79
    • @vertz/schema@0.2.79
    • @vertz/theme-shadcn@0.2.79
    • @vertz/ui@0.2.79
    • @vertz/ui-primitives@0.2.79
    • @vertz/ui-server@0.2.79

@vertz/cli-runtime@0.2.79

Patch Changes

  • Updated dependencies []:
    • @vertz/fetch@0.2.79

@vertz/native-compiler-darwin-arm64@0.2.79

@vertz/native-compiler-darwin-arm64

0.2.65

@vertz/native-compiler-darwin-x64@0.2.79

@vertz/native-compiler-darwin-x64

0.2.65

@vertz/native-compiler-linux-arm64@0.2.79

@vertz/native-compiler-linux-arm64

0.2.65

@vertz/native-compiler-linux-x64@0.2.79

@vertz/native-compiler-linux-x64

0.2.65

@vertz/runtime-darwin-arm64@0.2.79

@vertz/runtime-darwin-x64@0.2.79

@vertz/runtime-linux-arm64@0.2.79

@vertz/runtime-linux-x64@0.2.79

@viniciusdacal viniciusdacal merged commit 1141aef into main Apr 24, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment