github ruvnet/RuView v1404
Release v1404

latest releases: v1409, v1408, v1407...
2 hours ago

Automated release from CI pipeline

Changes:
feat(homecore-ui iter 1): Modal + EntityForm + Add Entity flow

First CRUD increment. Click "+ Add entity" on the Dashboard
toolbar → modal opens → form with entity_id / state / attributes
fields → Create validates client-side then POSTs /api/states/
→ modal closes, toast confirms, dashboard refreshes.

New components:
frontend/src/components/Modal.ts (~110 LOC) — reusable accessible
overlay. open property; closes on Escape and backdrop click.
Heading prop; default + footer slots.

frontend/src/components/EntityForm.ts (~130 LOC) — three-field form
with public requestSubmit()/requestCancel() methods. Client-side
validation:
- entity_id matches /^[a-z][a-z0-9_].[a-z][a-z0-9_]$/
- state non-empty
- attributes parses as a JSON object (rejects array/scalar)
Emits hc-entity-submit / hc-entity-cancel events for host to
handle. Footer buttons live in the host (modal slot=footer).

frontend/src/pages/Dashboard.ts (+60 LOC) — toolbar with
"+ Add entity" button, modal state, POST handler that wraps
fetch with bearer token, success toast (3 s), refresh().

Browser-verified end-to-end (real homecore-server :8123):

  • Toolbar button visible: Y
  • Modal opens: Y
  • 3/3 validation paths fire correctly:
    BadID → "entity_id must match domain.snake_case"
    blank state → "state must not be empty"
    [1,2,3] attrs → "attributes must be a JSON object"
  • Successful create: light.test_bulb POSTed; modal closes; toast
    "Created light.test_bulb = on"; grid count went 10 → 11
  • Persistence: hard reload, count stays
  • 0 console errors (Lit dev-mode notices excluded)

Note: TypeScript caught a name collision — attributes is reserved
on HTMLElement (NamedNodeMap). Renamed the Lit @Property to
entityAttrs so the class extends LitElement cleanly.

Co-Authored-By: claude-flow ruv@ruv.net

Docker Image:
ghcr.io/ruvnet/RuView:e7215a16e57656aa1fe6874ba260fc8844dd665c

Don't miss a new RuView release

NewReleases is sending notifications on new releases.