Skip to content

Releases

0.2.9

Choose a tag to compare

@apexshift apexshift released this 05 Nov 22:22
c507564

Added

  • Canvas inline text editing (#659). Double-click a heading, paragraph, span, link, button, list item or label on the canvas to edit its text in place. Enter (or clicking elsewhere) saves to the .astro source; Escape cancels. Text containing a {dynamic expression} is blocked with an "edit in source" tooltip (#660, #661).
  • Multi-line text (#662). Shift+Enter inserts a line break, saved as <br />. The Settings content field now shows each <br> as a muted ↵ marker that deletes as one unit, so the tag is visible wherever the text is edited.
  • Edit-mode feedback (#663). While editing, the preview toolbar shows "h1: editing — Enter to save · Esc to cancel" with the node's icon, the canvas label reads "h1: editing", and the node's outline turns orange (the complement of the blue selection ring), with WCAG AA text on the orange label. Editable text shows a text cursor on hover.

Fixed

  • Inline-edit interactions. Click to place the caret, drag to select and double-click a word all work inside the element being edited; clicking elsewhere on the canvas now saves the edit; and double-clicking text inside a layout or component drills into it again instead of doing nothing.

0.2.8

Choose a tag to compare

@apexshift apexshift released this 04 Nov 12:06
c507564

Fixed

  • Spurious blank line after each property in generated interface Props block (#625). renderDefinition returned a string with an implicit leading \n (the per-property separator). The insert-into-existing-block path also had a \n already present in the source before }, producing a double newline — a blank line between every consecutive property. Removed the implicit leading \n from renderDefinition and made each of the four call sites explicit about their separator.

0.2.7

Choose a tag to compare

@apexshift apexshift released this 04 Nov 12:05
c507564

Fixed

  • Double-clicking a component in the Components or Layouts panel inserted it after the Layout wrapper, not inside it (#624). PalettePanel and LayoutsPanel called addComponent(name, null), bypassing insertTargetFor and always appending to the end of root nodes. Both onInsert callbacks now compute the insertion target via insertTargetFor — matching the behaviour of the Insert palette — so the selection context is respected and the new component lands inside the correct container.

0.2.6

Choose a tag to compare

@apexshift apexshift released this 03 Nov 23:20
c507564

Fixed

  • CMD+Enter (Focus Class Field) not invokable via Command Palette (#623). The shortcut appeared in the CMD+/ keyboard shortcuts overlay but had no registered handler in waveOneHandlers.ts, so selecting it from the Command Palette (CMD+K) was a silent no-op. Registered the handler: checks selectedId for applicability, switches the inspector to Settings, and bumps classFocus — matching the existing keyboard handler.

0.2.5

Choose a tag to compare

@apexshift apexshift released this 03 Nov 22:57
c507564

Fixed

  • Data-attribute value not saved — bare attribute written instead (#620). After committing a new attribute name in the Attributes panel, AttrEditor remounted with isNew=false but the value field (BindField/BindInput) received no auto-focus signal. Keystrokes typed immediately after pressing Enter went to the browser body rather than the value input, leaving the attribute bare. Threaded autoFocus through BindField → BindInput and pass focusValue from AttrEditor, so the value field grabs focus immediately after name commit.
  • Inline content edits not persisted for heading elements (h1–h6) (#621). Typing into the Content field for a heading in the Settings panel was silently discarded. Same root cause as #622 — covered by that fix.
  • Anchor content and href value not persisted from Settings panel (#622). Editing the content or href of an <a> element via the Settings panel had no visible effect. RichContent.onChange emits id-less RichContentInputNode[] from DOM parsing, but asPageNode in App.tsx required typeof value.id === "string" and silently dropped every node that lacked one. Removed the unnecessary id check; setNodeInline regenerates all node ids via withIds() anyway.

0.2.4

Choose a tag to compare

@apexshift apexshift released this 03 Nov 22:05
c507564

Fixed

  • Escape key still exited component edit context when focus had not yet moved to the dropdown listbox (#626). The initial fix (stopPropagation on the listbox) covered the steady-state case but missed a timing gap: openMenu() defers the focus-move to the listbox via requestAnimationFrame, so if Escape is pressed immediately after opening, focus is still on the trigger <button> and the event bubbled unhandled to the global backOutOfComponent listener. Added an Escape case to onButtonKeyDown that intercepts and cancels the menu whenever the popup is open, closing the gap.

0.2.1

Choose a tag to compare

@apexshift apexshift released this 01 Nov 19:48
c507564

Fixed

  • App failed to launch on first open. The TypeScript compiler package was missing from the packaged app because it was listed as a dev dependency. Five Electron main-process modules use the TypeScript Compiler API at runtime to parse and edit Astro component frontmatter — moving typescript to dependencies and including it in the electron-builder bundle resolves the crash.

0.2.0

Choose a tag to compare

@apexshift apexshift released this 31 Oct 04:29
c507564

The headline of this release is a full Code editor mode built on Monaco — a second editing surface alongside the visual canvas, toggled with ⌘\. The release also ships Astro Islands visualisation, CMS content authoring improvements, two new manager panels, a Command Palette, and a broad WCAG AA accessibility pass.

Added

  • Code editor mode (⌘\). Switch between Visual mode and the new Monaco-based code editor at any time. Entering Code mode always opens the current Visual canvas page as the active tab; leaving with unsaved changes prompts you to apply or discard them (apply-on-exit).
  • File tree. Scoped to project content by default with an "All files" toggle. Create, rename, and delete files and folders from the toolbar. The tree is resizable via a drag handle and scrolls horizontally for deep paths. Indent guides and expand/collapse-all toggle included.
  • Code editor tabs and session state. Open buffers persist across app restarts; the file list and active tab are restored on re-entry. ⌘S saves the active buffer to disk.
  • Astro frontmatter syntax highlighting. .astro files render dedicated frontmatter highlighting in the Monaco editor.
  • Cmd+click import navigation. Jump to any imported file by Cmd+clicking its path — ES imports, CSS @import, Sass @use, CommonJS require, and tsconfig path aliases (@/…) are all resolved.
  • Problems panel (⌘⇧M). Lists all Monaco diagnostics for the active file. HTML and .astro files are also checked for unclosed or mismatched tags.
  • Astro Islands & Slots visualisation. The visual canvas now identifies and annotates client directive islands (client:load, client:idle, etc.) and named slots, keeping the visual structure accurate for component-heavy pages.
  • Command Palette (⌘K). A searchable list of every registered command.
  • Integrations panel. Browse and manage Astro integrations configured in astro.config.mjs.
  • Site Map panel. A top-level view of every page and route in the project.
  • CMS: create and delete entries. The CMS panel now supports creating new entries in glob collections and deleting existing ones, with an undo step registered for each operation.
  • Component dependency graph (dev builds). A force-directed SVG view of the module-import graph with layer violations highlighted. Available in the Developer menu in dev builds.
  • Registry Browser (dev builds). A dev-only window for browsing all registered StyleSections, PanelViews, and Commands.

Changed

  • Code editor mode toggle label changed from "IDE" to "Code" in the mode toggle UI.
  • Release script now promotes the [Unreleased] section of CHANGELOG.md to a versioned heading automatically and refuses to release if the section is empty.

Fixed

  • Untracked folders no longer duplicate in the file tree when changes are detected.
  • Code editor session correctly reopens the canvas page when the stored session has no tabs.
  • CMS content entry IDs are now stable; focus reliably lands on the new entry after creation.

Accessibility

  • WCAG AA audit and fixes across style panel surfaces, manager panels (CMS, Assets, Pages, History, Variables, Framework), and app chrome (Structure, Props, canvas overlays, code dock, terminal, welcome screen, modals).

0.1.27

Choose a tag to compare

@apexshift apexshift released this 06 Oct 18:30
c507564

Added

  • Code dock: Cmd+click import navigation. Cmd+clicking any local import path in the code dock jumps directly to that file. Hovering while holding Cmd underlines the path to signal it is clickable.
  • Code dock: single-editor with staged apply. The dock now shows one editor at a time with an explicit Apply button, replacing the multi-pane layout. Changes stage locally and are written to disk on apply.
  • Code dock: edit-target chip. The current file's name is shown inline in the dock bar so you always know which file you are editing.

Fixed

  • Astro files in the code dock now render correct mixed-language highlighting, distinguishing the TypeScript frontmatter from the HTML template.
  • Unsigned Mac builds now show a clear explanation dialog instead of a cryptic Squirrel code-signature error when checking for updates.

0.1.26

Choose a tag to compare

@apexshift apexshift released this 01 Oct 22:51
c507564

Fixed

  • Props panel host fields are now extracted into a dedicated component, keeping always-mounted views hook-safe and preventing hook order violations.
  • Panel compound component overhauled to production quality — more robust layout, consistent sizing, and correct scroll behaviour across panel variants.