Skip to content
5 changes: 3 additions & 2 deletions docs/design/user-states.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,12 +52,13 @@ surface.
- **DR1 — Press the manipulated surface.** During pointer hold or drag, each
enabled surface in the matrix below MUST paint `--color-overlay-pressed` on
the named visual part. The overlay is transient and MUST clear when the press
or drag ends.
or drag ends. Under a finger, the overlay's timing follows `spec:AST-094` FR11's press profiles.
- **DR2 — Disabled means no response.** A disabled control in the matrix MUST
remain inoperable and MUST NOT gain a pressed visual treatment.
- **DR3 — Persistent selection wins.** A selected SegmentedControl item MUST
keep its raised selected surface during pointer hold; only an unselected item
receives the pressed overlay.
receives the pressed overlay. Under a finger the item keeps that surface, and its press timing follows
`spec:AST-094` FR11.

## Anatomy and hierarchy

Expand Down
18 changes: 9 additions & 9 deletions docs/families/buttons.md
Original file line number Diff line number Diff line change
Expand Up @@ -93,15 +93,15 @@ Membership follows public responsibility, not an import of Button or a rendered

## Canonical concepts

| Concept | Values or states | Default semantics | Stability |
| ---------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | --------------------------------------------------- |
| activation model | momentary action, navigation, persistent press | Button and IconButton activate once; ToggleButton represents retained pressed state | shipped distinction |
| content mode | visible label, custom visible content, icon-only | every control has a required accessible `label`; icon-only hides it visually | shipped family rule |
| size | `sm`, `md`, `lg` | `md`; explicit member size wins over an inherited group size | shipped family axis |
| visual state | rest, hover, focus, active, disabled, loading; pressed where applicable | states preserve control geometry and accessible purpose | shipped family rule |
| async action | absent, fire-once, interruptible persistent action | ordinary actions deduplicate while pending; persistent toggles remain reversible | shipped family distinction |
| elevation | `none`, `low`, `med`, `high` | `none`; the element painting the visible surface owns the shadow | shipped family axis; ToggleButton adoption approved |
| grouping | standalone, spaced set, connected surface | semantics and painted containment decide ownership; grouping alone does not | family rule |
| Concept | Values or states | Default semantics | Stability |
| ---------------- | ----------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------- |
| activation model | momentary action, navigation, persistent press | Button and IconButton activate once; ToggleButton represents retained pressed state | shipped distinction |
| content mode | visible label, custom visible content, icon-only | every control has a required accessible `label`; icon-only hides it visually | shipped family rule |
| size | `sm`, `md`, `lg` | `md`; explicit member size wins over an inherited group size | shipped family axis |
| visual state | rest, hover, focus, active, disabled, loading; pressed where applicable | states preserve control geometry and accessible purpose; under a finger, press feedback follows `spec:AST-094` FR11's control profile | shipped family rule |
| async action | absent, fire-once, interruptible persistent action | ordinary actions deduplicate while pending; persistent toggles remain reversible | shipped family distinction |
| elevation | `none`, `low`, `med`, `high` | `none`; the element painting the visible surface owns the shadow | shipped family axis; ToggleButton adoption approved |
| grouping | standalone, spaced set, connected surface | semantics and painted containment decide ownership; grouping alone does not | family rule |

## Cross-component invariants

Expand Down
15 changes: 9 additions & 6 deletions docs/specs/AST-013/spec.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,10 +72,12 @@ requirements. Assistive-technology evidence remains separately owned.
public [Browser Support guide](../../../packages/cli/assets/docs/browser-support.doc.mjs)
and record their source and refresh date. TypeScript targets, build targets, and
feature tables are not support evidence.
- **FR3 — Two explicit browser support rows are always included.** Independently
- **FR3 — Explicit browser support rows are always included.** Independently
of the generated Baseline coverage, Astryx explicitly supports:
- the latest stable Chrome release on desktop; and
- Safari on the latest stable iOS release.
- the latest stable Chrome release on desktop;
- Safari on the latest stable iOS release; and
- for touch presentations, Chrome on the latest stable Android release
(`spec:AST-094`).

“Latest” means the current stable release identified and refreshed from
authoritative browser release data, not a handwritten version. Other browsers
Expand Down Expand Up @@ -191,23 +193,24 @@ hydrating render can differ from the server's markup.

## Decision log

### DEC-1 — Rolling Baseline tiers plus two official browser rows
### DEC-1 — Rolling Baseline tiers plus official browser rows

**Reference:** `spec:AST-013/DEC-1`
**Decider:** `cixzhang`, `2026-09-01`

Astryx uses current Web Platform Baseline for full support, Baseline minus two
years for reduced fallback, and no promise below that tier. Latest stable Chrome
on desktop and Safari on latest stable iOS are always included as official support
and test rows independently of generated Baseline coverage. Generated compatibility
and test rows independently of generated Baseline coverage, and touch
presentations add Chrome on the latest stable Android (`spec:AST-094`). Generated compatibility
rows and the named official test matrix remain distinct public facts.

### DEC-2 — Explicit support does not require proof on every change

**Reference:** `spec:AST-013/DEC-2`
**Decider:** `cixzhang`, `2026-09-02`

DEC-1's two named browser rows are explicit support rows, not a required automated
DEC-1's named browser rows are explicit support rows, not a required automated
or per-change test matrix. Astryx investigates and fixes defects reproduced in
those browsers, but routine changes do not need to prove every supported browser
before landing. Actual-browser evidence is required when the change makes a
Expand Down
3 changes: 2 additions & 1 deletion docs/specs/AST-025/spec.md
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,8 @@ the behavior.
the requested direction. A containment policy MAY stop chaining, but its
`overscroll-behavior` effect MUST be active only on axes that currently overflow.
This avoids dead scroll zones in engines that honor containment on non-overflowing
`overflow: auto` elements.
`overflow: auto` elements. Inside a touch presentation under a finger, who
gets a drag is decided once, when it begins (`spec:AST-094` FR14).
- **FR15 — Native scrollbars are the default presentation.** The default presenter
MUST preserve native scrolling and use standards-based CSS such as
`scrollbar-width`, `scrollbar-color`, and `scrollbar-gutter` where supported.
Expand Down
16 changes: 9 additions & 7 deletions docs/specs/AST-057-row-actions/spec.md
Original file line number Diff line number Diff line change
Expand Up @@ -131,10 +131,11 @@ and its panels stay put, so no element is added to any row.
- **A render prop for a custom panel.** Deferred, not foreclosed: a
`render*`-shaped addition can land when a caller needs something the
vocabulary cannot say (DEC-1).
- **Gesture tuning.** Axis-lock distance, commit ratio, fling velocity, slide
and spring durations, resistance past the panel: behavior constants in
source, not public API and not design tokens (the same ruling the touch
press model received for its clocks).
- **Gesture tuning.** Axis-lock distance, commit ratio, fling velocity,
resistance past the panel: behavior constants in source, not public API and
not design tokens (the same ruling the touch press model received for its
clocks). The row's slide and spring motion plays on theme motion roles

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This hands the row's slide and spring motion to theme motion roles, but FR4's table has no row-swipe role and this record measures none, so Item's swipe has no named role or sourced default to read once it may no longer play its constants. Please name which FR4 roles the slide and the spring-back play (or add the row's measured roles with sources), or keep the durations as source constants until they are measured.

(`spec:AST-094` FR4).
- **Vertical swipes**, two-finger trackpad swipes, and a swipe whose only
meaning is dismissal (Toast already has that in `useToastGesture`).
- **Public out-of-flow slots on `Item`.** Deliberately not admitted: the
Expand Down Expand Up @@ -219,9 +220,10 @@ and its panels stay put, so no element is added to any row.
| open state | closed, resting open | The row's own. A pointer landing anywhere outside a resting row closes it, which is also how a drag on a neighbour closes it; no group state exists. | closed | `spec:AST-057` | proposed |
| the modality split | internal | A mouse never starts the drag; a coarse pointer does. Read from the pointer event, not a prop or a media query (`architecture:interaction-modality` INV6). | — | `spec:AST-057` | proposed |

Not public: axis-lock distance, commit ratio, fling velocity, durations,
resistance, panel widths, the custom property's name. They are behavior
constants.
Not public: axis-lock distance, commit ratio, fling velocity, resistance,
panel widths, the custom property's name. They are behavior constants. The
row's slide and spring motion plays on theme motion roles (`spec:AST-094`
FR4).

## Requirements

Expand Down
Loading
Loading