Editing

Text

The core loop: double-click copy in the page, type a new value, commit. nextcanvas rewrites the matching JSX text in your source file.

How to edit

  1. Make sure the toolbar is on and Buttons is off(edit mode). Clicks on the page won't navigate or fire app handlers.
  2. Hover text — editable elements get an outline.
  3. Double-click to enter edit mode. The caret lands in the text.
  4. Type your change. Press Enter to save, or Escape to cancel. Clicking outside also commits.
Autosave vs Manual. In Autosave (default), the commit writes to disk immediately. In Manual, it stages until you hit Save on the toolbar. See Controls & modes.

What counts as editable text

Plain static text

A host element whose children are literal text — the classic case:

<h1>Generative AI rewires innovation</h1>
<p>Where operators get good at the pipeline.</p>

Double-click the rendered headline or paragraph. The matching string in the .tsx file updates in place, formatting preserved.

Mixed text + inline elements

Text that wraps bold, links, or other inline tags is editable too — you edit the surrounding runs; the inline elements stay locked:

<p>
  Still unsure?{" "}
  <a href="#register">reserve your seat</a>.
</p>
  • You can change "Still unsure?" and the trailing period.
  • You cannot delete the <a> or empty an entire text run — the edit is rejected and reverted with a toast.

Text inside components

Copy wrapped in a plain component tag is editable when it's literal text (or supported bound text) as the children:

<Reveal as="h2">Who you'll hear from:</Reveal>
<Link href="/chat">Talk to an AI partner</Link>

You edit what you see on the page. The write-back still targets the original JSX in your source — even if the component doesn't forward props.

Motion / animated tags

Elements like <motion.h1>, <motion.p>, and <motion.a> are editable the same way as plain h1 / p / a. Hero copy that lives on Motion tags is fair game.

Shared source, many instances

If the same JSX line renders many times (for example a card title inside a .map), editing one instance rewrites that shared source line — so every instance updates. That's intentional: there's only one string in the file.

What won't open an editor

  • Text mixed with an expression in the same parent: © 2026 {SITE.name}
  • Purely dynamic runtime strings (countdown digits, form errors, chat bubbles)
  • Namespaced or deeply nested member tags beyond simple motion.*

For data-driven single-expression children like {speaker.name}, see Bound text.