Skip to content

History

Revisions

  • docs(wiki): document LayrzStepper's minimum height constraint LayrzStepper needs roughly 150px of height before it can render a step body at all, regardless of direction. Names the four irreducible pieces of fixed chrome that make up that floor — the indicator band, label line, spacing gap, and Back/Next button row — so the number stays comprehensible if the underlying tokens change. Cross-references the showroom's regression test and its deliberately excluded 320x300 case.

    @PHKenny PHKenny committed Aug 28, 2026
    5594595
  • docs(wiki): document LayrzStepper's required direction parameter The page previously described layout selection as derived from context.isCompact; it now documents the required LayrzStepperDirection parameter, adds a section for the enum, includes the migration snippet for callers who want the old responsive behaviour, and records that the component needs roughly 150px of height for its own chrome before it can render a step body.

    @PHKenny PHKenny committed Aug 28, 2026
    1d9101b
  • docs(wiki): add the LayrzStepper page and catalog entries Adds a new wiki page documenting LayrzStepper's two layouts (full-width wide header, compact vertical accordion), the icon-vs-state-glyph rule, tappability including error steps, and accessibility notes. Registers the page in the sidebar under Menus and Navigation, and adds two Component-Catalog rows for LayrzStepper and LayrzStepIndicator.

    @PHKenny PHKenny committed Aug 28, 2026
    30ec5b3
  • docs(wiki): document LayrzBottomSheet's new actions slot - LayrzBottomSheet: document the actions parameter added in d020037 -- a right-aligned button row pinned as a sibling of the Expanded content (not nested in its scroll view), never pushed behind the keyboard, and not a substitute for a close ("X") button. Rewrite the canDismiss section's no-actions-slot line: the slot now exists, but canDismiss deliberately does not infer its default from actions the way the dialog does, since a freeform builder makes actions-presence a weaker signal on the sheet. Add matching usage examples (an actions row; non-dismissible answered only through actions) verified against test/sheets/bottom_sheet_actions_test.dart. - LayrzResponsiveModal: verified against responsive_modal.dart that show() has no actions parameter and forwards none to either branch. Extend "The Builder-vs-Slots Limitation" to cover the sheet's new actions slot symmetrically with the dialog's title/content/actions, rather than leaving the sheet described as having no slotted shape at all. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

    @PHKenny PHKenny committed Aug 28, 2026
    770bea8
  • docs(wiki): document LayrzBottomSheet canDismiss, fix stale asymmetry note - LayrzResponsiveModal: canDismiss now forwards to both branches (af002a4 fixed the sheet-branch gap this page previously documented as permanent); rewrite "The canDismiss Asymmetry" as "The canDismiss Defaulting Asymmetry", covering the one surviving difference -- an unset canDismiss maps to actions-inferred on the dialog branch vs. an unconditional true on the sheet branch, since LayrzBottomSheet.show's parameter is non-nullable. - LayrzBottomSheet: document the new canDismiss parameter (barrier, Escape, back gesture, and drag-to-dismiss; composes with isPersistent on a separate axis); document the real PopScope backing the back gesture, replacing the previously-inaccurate claim that back-gesture handling already existed; note the drag handle keeps rendering and resizing when non-dismissible; note there is no close ("X") button on a sheet by design. - LayrzBottomSheet: also remove the useRootNavigator parameter and its usage example/section, which 908d020 deleted before af002a4 landed but this page had not caught up to -- root-navigator presentation is now intrinsic, same as the dialog. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

    @PHKenny PHKenny committed Aug 28, 2026
    47617d8
  • docs(wiki): correct slider geometry/bubble, dialog canDismiss rename, modal asymmetry - LayrzSlider: fix stale 20px/circular-thumb hit-slop numbers to the shipped 36px painted area (28px square thumb, 8px track); document the drag-value bubble (LayrzSliderValueBubble) that now supplements the static label instead of the removed "no bubble" scope limit; document state-varying thumb elevation. - LayrzDialog: rename barrierDismissible -> canDismiss throughout and document its broadened four-route contract (barrier, Escape, X icon, back gesture); document the X close affordance and its non-render when non-dismissible; remove the deleted useRootNavigator parameter in favor of documenting the dialog's always-root-navigator behavior; document content's unbounded-height constraint and its workarounds. - LayrzResponsiveModal: same canDismiss rename and useRootNavigator removal; document the canDismiss forwarding asymmetry (dialog branch only, silently ignored by the sheet branch). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

    @PHKenny PHKenny committed Aug 28, 2026
    12aabee
  • docs(dialogs): add LayrzDialog and LayrzResponsiveModal pages, register sidebar entries Documents LayrzDialog.show<T>() (title/content/actions slots, the child escape hatch, the double-pop guard shared with LayrzBottomSheet via LayrzModalRoute, barrierDismissible defaulting on actions presence, focus restoration, and the v1 no-stacking rule) and LayrzResponsiveModal.show<T>() (viewport-driven via context.isCompact, the decide-once non-goal stated prominently, the two config objects, and the builder-vs-slots limitation). Registers LayrzDialog and LayrzResponsiveModal under Navigation and LayrzSlider under Inputs in the sidebar.

    @PHKenny PHKenny committed Aug 27, 2026
    ccd6bfc
  • docs(slider): add LayrzSlider widget page Documents the new single-value slider control: full API, divisions quantisation with a worked example, keyboard interaction, D63 exclusion from LayrzInputChrome composition, D15/D7 compliance notes, and the v1 scope limits (no range variant, no tick marks, no draggable value bubble).

    @PHKenny PHKenny committed Aug 27, 2026
    c83c5bc
  • fix(input-contract): align composition claim with D63 The "Central Architectural Fact" stated that LayrzTextInput is the base of the input family and that every other Layrz*Input composes it internally. D63 (2026-08-23) decided the opposite after that wrapping pattern produced three shipped defects (dropped errors on LayrzNumberInput, LayrzSearchInput unable to show an error, duplicated chrome border). Replace the claim with D63's actual rule — every input composes its own editing primitive plus LayrzInputChrome directly — and record D63's exclusion for LayrzCheckboxInput, LayrzSwitchInput, LayrzRadioInput, and the in-progress LayrzSlider. Also fixes two downstream restatements of the old claim in the Shared Contract intro and the Value Display and Formatting section.

    @PHKenny PHKenny committed Aug 27, 2026
    15a3357
  • docs(sheets): add LayrzBottomSheet page, register in sidebar (0.0.14) LayrzBottomSheet shipped with zero documentation despite being the most-changed component in 0.0.14 and the mobile/narrow-band presentation surface for three picker inputs and LayrzScaffoldShell's detail sheet. Modeled on LayrzAnchoredPanel.md's structure (Overview / API Structure / Usage Examples / Behavior / Placement in the UI), since both are static-surface, behaviour-heavy overlay components rather than stateful widgets with a long constructor. Documents, read directly from lib/src/sheets/src/bottom_sheet.dart: - The full show<T>() parameter list, including snapSizes/minSize/maxSize/ showDragHandle/scrollable, none of which were in the release brief. - Safe area: content inset clear of system bars while the surface stays edge-to-edge under them, and why SafeArea alone composes with the keyboard for free (paddingOf collapses to zero under the keyboard, unlike viewPadding). - Keyboard shrink-and-pin, inert expansion controls, working drag-to- dismiss via a separate dismiss-only gesture path, and exact-size restore on keyboard close -- cross-linked to D65, which LayrzLayout.md also documents for the same underlying pattern. - The ModalRoute.isCurrent double-pop guard on every pop site (barrier tap, Escape, both drag-to-dismiss paths), stated plainly that the unguarded version silently dismissed the caller's own page in a release build. - isPersistent's full behavioral matrix (barrier, Escape, double-pop guard, route semantics -- vs. keyboard handling and drag, which apply to both). - useRootNavigator, with the same go_router ShellRoute rationale already on LayrzScaffoldShell.md, cross-linked both ways. - scrollable: false and the PrimaryScrollController handoff it enables. Registered in Widgets/_Sidebar.md under Navigation, alphabetically between LayrzAnchoredPanel and LayrzDropdownMenu -- the closest existing widgets in kind (anchor/overlay presentation surfaces), matching the sidebar's alphabetical-within-group ordering. Cross-linked LayrzScaffoldShell.md's two existing prose mentions of LayrzBottomSheet to the new page, plus a Related entry.

    @PHKenny PHKenny committed Aug 27, 2026
    44e86c6
  • docs: align wiki with v0.0.14 — dense padding uniform, type scale, sheet nav, keyboard isCompact no longer varies input chrome padding (D66 follow-up): padding is now pd2/dense pd1 identically on every viewport, not pd3/pd2 compact vs pd2/pd1 wide. This obsoleted the 14px-compact/10px-wide split documented earlier today in Input-Contract.md and 6 chrome-owning input pages (LayrzTextInput, LayrzTextAreaInput, LayrzSearchInput, LayrzSelectInput, LayrzDurationInput, LayrzComboBoxInput) -- corrected all of them, and added the measured flat field heights (43px default / 35px dense) with an explicit statement of the touch-target trade-off accepted in D66. Icon size in LayrzInputChrome no longer tracks body.fontSize -- it is now fixed at 20px. Documented in LayrzTextInput.md's key invariants. Removed isRequired from LayrzSearchInput.md's shipped-additions table; the parameter was deleted from the widget (it had no labelText to mark). Corrected the type scale to the new figures (display 40->30, title 20->18, body 16->14, label 14->12) in Design-Tokens.md and Theming.md, plus two call sites that quoted absolute sizes (LayrzLayout.md user block name, LayrzSelectionToolbar.md text style). Documented previously-unwritten 0.0.14 behavior: - LayrzScaffoldShell.md: detail sheet now presents on the root navigator (fixes selection bleed-through and barrier coverage under go_router ShellRoute), and DetailPane content is independently selectable in both presentations. - LayrzLayout.md: new "Keyboard Handling" section documenting D65 (body and navigator panel resize for the on-screen keyboard, Scaffold-style). Left untouched, per the "Reference: Current/ThemedX layrz_theme API" convention: LayrzNumberInput.md, LayrzTextAreaInput.md's, LayrzSelectInput.md's, LayrzDurationInput.md's and LayrzComboBoxInput.md's historical mirror tables, which correctly describe the old Material-based widgets and are unaffected by this release. No LayrzBottomSheet.md page exists; its new keyboard/safe-area/barrier behavior from 0.0.14 is intentionally left undocumented pending a decision on creating a new sidebar-registered page.

    @PHKenny PHKenny committed Aug 27, 2026
    7746646
  • docs(search): fix stale labelText reference in shipped isRequired doc LayrzSearchInput.md:122 said isRequired renders the marker next to labelText, but labelText was removed from the widget's public API (4cee030). The current parameter is hintText (search_input.dart:147). Source-verified against current HEAD before correcting.

    @PHKenny PHKenny committed Aug 26, 2026
    690f18e
  • docs: correct stale padding docs on checkbox/radio and Input-Contract (DESIGN-126) LayrzCheckboxInput.md and LayrzRadioInput.md still documented a live `padding` parameter that DESIGN-126 removed with no replacement -- these widgets have no input chrome, so unlike the 7 chrome-owning inputs they gained no `dense` either. Their padding is fixed internally at pd2 (10px). This left the public wiki instructing consumers to write code that will not compile. Input-Contract.md carried the same wrong "pd2 (8 logical pixels)" figure that LayrzTextInput.md had, plus a "Customizable per-field via the padding parameter" claim that is now false for every chrome-owning input. Corrected both, added the density table, and stated the checkbox/switch/ radio asymmetry explicitly. Cross-linked D66 throughout. Left untouched: the "Reference: ThemedXInput API" historical blocks, the generic sp1-sp5 spacing-scale prose (separate, already-tracked doc rot in spacing.dart itself), and the unrelated r2/8px radius mentions.

    @PHKenny PHKenny committed Aug 26, 2026
    60c1d52
  • docs(inputs): document dense parameter (DESIGN-126, BREAKING), fix pd2/8px error Documents the new `bool dense` parameter (default false) on the 7 chrome-owning inputs -- LayrzTextInput, LayrzTextAreaInput, LayrzSearchInput, LayrzNumberInput, LayrzSelectInput, LayrzDurationInput, LayrzComboBoxInput -- and the removal of the public `padding` parameter they previously exposed (D66). Also corrects a pre-existing documentation defect independent of this change: LayrzTextInput.md stated padding "defaults to pd2 (8 logical pixels)". Both figures were wrong -- pd2 is 10px, and the compact default was never pd2 at all, it is pd3/14px. Verified against lib/src/tokens/src/spacing.dart (sp1=6, sp2=10, sp3=14) and did not carry the 8px figure into any dense documentation. Left untouched: the "Reference: Current layrz_theme API" / historical sections on each page (old ThemedXInput padding is real, unrelated to this row), and unrelated `inputPadding` on LayrzSearchInput.

    @PHKenny PHKenny committed Aug 26, 2026
    1527a58
  • docs: document the v0.0.13 picker-input changes Update LayrzSelectInput, LayrzComboBoxInput, and LayrzDurationInput wiki pages to match the behaviour shipping in v0.0.13: the elevated-panel redesign, the removed combobox confirmation row, panel width/dismissal changes on duration input, and the error-footer label-gating fix shared by select and combobox. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y2CdNZfLDUJjYDWQ9Sfnmk

    @PHKenny PHKenny committed Aug 26, 2026
    1bbf0cd
  • docs(select): document LayrzSelectItem's reduction to value/child/searchableStrings (BREAKING, DESIGN-142) - labelText is gone; child is now required as the item's only presentation, rendered in the field itself while idle as well as in the surface's list. - searchableAttributes renamed searchableStrings, now the sole search key. - Documents the RichText-vs-Text.rich trap (RichText does not inherit DefaultTextStyle, so a child built with it renders with no forced color). - Documents the radio accessibility migration note: an icon-only child now announces with no label unless it supplies its own Semantics(label:).

    @PHKenny PHKenny committed Aug 26, 2026
    f25e9af
  • docs(select): correct the chrome-tap note -- LayrzTappable fallback restores full-chrome tap The field-as-searcher redesign initially narrowed the tappable area to the field's own text (matching LayrzComboBoxInput). A transparent LayrzTappable fallback around the chrome region restores tapping anywhere in the chrome, matching pre-redesign behavior, without disturbing text selection/drag/long-press.

    @PHKenny PHKenny committed Aug 25, 2026
    af5ae34
  • docs(select): document the field-as-searcher redesign (BREAKING) Documents the field-as-searcher change: the field is now the searcher when enableSearch is true, self-displays from internal state on both enableSearch values, the dropdown chevron moved to an external sibling, and LayrzInputChrome.readOnly is now always false. Corrects the now-stale readOnly/SDK-primitive/conformance claims left over from before this change.

    @PHKenny PHKenny committed Aug 25, 2026
    2cadfe6
  • docs: document LayrzDurationInput's external clock affordance icon (duration-external-affordance)

    @PHKenny PHKenny committed Aug 25, 2026
    5045c9b
  • docs: remove maxOptionsToDisplay, document the fixed 300px overlay height and the onChanged/onSubmit selection-callback split (DESIGN-35)

    @PHKenny PHKenny committed Aug 25, 2026
    ff72bec
  • docs: correct LayrzSelectInput height rule and focus wiring (DESIGN-40/144) Adds a "Shipped behavior" section documenting the actual desktop/mobile selection surface height rule (height = min(content, 300), scroll past 300, enforced once via LayrzAnchoredPanel.maxHeight) and the focusNode wiring (Focus(focusNode: ...) on both platforms, plus childFocusNode on the desktop anchored panel). Flags the remainder of the page as a pre-implementation design sketch that predates the shipped API and still needs a full documentation pass -- out of scope for this fix. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CbPdzx9WGe9ch9N2hb4KrZ

    @PHKenny PHKenny committed Aug 25, 2026
    4170d1b
  • docs: correct LayrzScaffoldShell narrow-band sheet description The narrow band's detail sheet was described as full-height and drag-down-to-dismiss; it actually opens at half the screen (per LayrzBottomSheet's own defaults) and dismisses by dragging the handle past the 50% snap point, not by any drag-down gesture. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CbPdzx9WGe9ch9N2hb4KrZ

    @PHKenny PHKenny committed Aug 25, 2026
    fa7a285
  • docs: document LayrzSearchInput.preferredSide (DESIGN-143)

    @PHKenny PHKenny committed Aug 25, 2026
    6bf12db
  • docs: document preferredSide, cross-axis alignment, and width clamp on LayrzAnchoredPanel

    @PHKenny PHKenny committed Aug 25, 2026
    9083988
  • docs: rename LayrzTooltipPosition to LayrzPreferredSide The tooltip's four-value side vocabulary moves to a new shared package-level type, LayrzPreferredSide, also consumed by LayrzAnchoredPanel. Same four values, same semantics.

    @PHKenny PHKenny committed Aug 25, 2026
    6a6a0a7
  • docs: require container: true on caller-supplied slot Semantics Closes the gap where following the 'pass a real, focusable, labelled widget' advice for prefix:/suffix: could recreate the DESIGN-148 defect if the caller's Semantics node lacked container: true and merged onto the field's own semantics node.

    @PHKenny PHKenny committed Aug 25, 2026
    88e6297
  • docs: document prefix/suffix slot semantics contract Adds a Semantics subsection under Prefix and Suffix: the four-category accounting (decorative / merged-into-name / pointer-only / caller's own responsibility), why the callback forms are pointer-only today, and the "pass a real focusable widget instead" contract that already works. Cross-links D64. DESIGN-148

    @PHKenny PHKenny committed Aug 25, 2026
    fa2e3b2
  • LayrzSearchInput: document errors, isRequired, help text and readOnly These five parameters did not exist on the widget before DESIGN-142 -- it could not display an error at all. Also documents that the clear affordance now appears while typing; it previously appeared only when the field was seeded with an initial value, because nothing listened to the controller.

    @PHKenny PHKenny committed Aug 24, 2026
    5052681
  • docs(scaffold-shell): update narrow band to use modal bottom sheet instead of back affordance - List pane always visible on narrow (sm/xs) breakpoints - Detail presented in modal LayrzBottomSheet (50% initialSize, snaps [0.5, 0.95], maxSize 95%) - Selection persists across breakpoint crossing - Navigator ancestor required (debug assert if missing) - Sheet not customizable; uses LayrzBottomSheet defaults - Lifting DESIGN-62 deferral per DESIGN-140 Last updated 2026-08-23

    @PHKenny PHKenny committed Aug 23, 2026
    5be5013
  • docs: add LayrzAnchoredPanel widget documentation - Add LayrzAnchoredPanel.md with API structure, usage examples, and behavior documentation - Register component in Widgets/_Sidebar.md under Navigation section - Document width policies (matchAnchor and contentSized), positioning logic, and keyboard/a11y support - Distinguish from LayrzDropdownMenu with comparison table and placement guidance

    @PHKenny PHKenny committed Aug 21, 2026
    fdcdb91