chore(slice-3): version 0.3, README status, label-input association fix (a11y §6.6)
ci / check (push) Has been cancelled
ci / check (pull_request) Has been cancelled

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-06-10 22:46:12 -07:00
parent 25ac540171
commit 877be249c7
4 changed files with 1998 additions and 9 deletions
+9 -7
View File
@@ -20,10 +20,12 @@ This app (One Name `ecomm`, see [`app.json`](./app.json)) is composed of:
## Status ## Status
SLICE-2 (identity) of SD-0001 is in place on top of the SLICE-1 skeleton: open, SLICE-3 (storefront) of SD-0001 is in place on top of SLICE-1/2: the `storefronts`
passwordless sign-up/log-in by email + one-time code (`accounts` domain, INV-2/INV-3), domain (create + owner membership, INV-4's one-storefront guard with concurrent-create
signed-cookie sessions, the `/api/auth/*` endpoints (`request-code`, `verify`, `me`, refusal), `POST /api/storefronts`, the Create-storefront and Admin-shell screens, the
`logout`), the `platform/mailer` port with `LogMailer` (the dev code channel), and the complete entry-routing rule (landing / create-storefront / admin), and the INV-1
Landing + Sign-in screens with the entry-routing rule (storefront hard-wired `null` until whole-flow bootstrap test — all skinned to the Claude Design export
SLICE-3). See [`docs/BOOTSTRAP.md`](./docs/BOOTSTRAP.md) to run it locally. The storefront (`wiggleverse-ecomm-content/ui/designs/ecomm-login-and-create-storefront-designs/`),
(SLICE-3) and deployed environments (SLICE-4) are next. which also re-skinned the SLICE-2 Landing + Sign-in screens. See
[`docs/BOOTSTRAP.md`](./docs/BOOTSTRAP.md) to run it locally. Deployed environments
(SLICE-4) are next.
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"name": "wiggleverse-ecomm-frontend", "name": "wiggleverse-ecomm-frontend",
"private": true, "private": true,
"version": "0.2.0", "version": "0.3.0",
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev": "vite", "dev": "vite",
+4 -1
View File
@@ -1,6 +1,7 @@
// The ecomm UI kit — React faces of the app.css primitives, matching the Claude Design // The ecomm UI kit — React faces of the app.css primitives, matching the Claude Design
// export (ui/designs/ecomm-login-and-create-storefront-designs, hf-kit). Presentation // export (ui/designs/ecomm-login-and-create-storefront-designs, hf-kit). Presentation
// only: no business rules live here (§6.2 — the SPA renders what the BFF returns). // only: no business rules live here (§6.2 — the SPA renders what the BFF returns).
import { useId } from "react";
import type { ReactNode } from "react"; import type { ReactNode } from "react";
export function Screen({ export function Screen({
@@ -110,13 +111,15 @@ export function Field({
helper?: string; helper?: string;
inputProps: React.InputHTMLAttributes<HTMLInputElement>; inputProps: React.InputHTMLAttributes<HTMLInputElement>;
}) { }) {
const id = useId();
return ( return (
<div className="field"> <div className="field">
<label className="field__label"> <label className="field__label" htmlFor={id}>
<span>{label}</span> <span>{label}</span>
{optional && <span className="field__optional">optional</span>} {optional && <span className="field__optional">optional</span>}
</label> </label>
<input <input
id={id}
className={`field__input${error ? " field__input--error" : ""}`} className={`field__input${error ? " field__input--error" : ""}`}
aria-invalid={!!error} aria-invalid={!!error}
{...inputProps} {...inputProps}