Skip to content

refactor(dom-renderer): accept a per-side [top, right, bottom, left] boundsMargin - #67

Merged
chiefcll merged 1 commit into
solid-tv:mainfrom
pecoram:feat/bounds-margin-per-side
Oct 4, 2026
Merged

chiefcll merged 1 commit into
solid-tv:mainfrom
pecoram:feat/bounds-margin-per-side

Conversation

@pecoram

@pecoram pecoram commented Oct 2, 2026 •

Copy link
Copy Markdown
Contributor

Changes

  • DomRendererMainSettings.boundsMargin: number | [number, number, number, number].
  • normalizeBoundsMargin returns a [t, r, b, l] tuple. It used to coerce to the largest edge and log a warning.
  • computeRenderStateForNode expands the root rect per side.

A scalar behaves exactly as before.

Depends on

solid-tv/renderer#225. Until a renderer release includes it, tsc fails in lightningInit.ts, because RendererMainSettings.boundsMargin is still number there. Tests pass (222/222).

@pecoram pecoram changed the title feat(dom-renderer): accept a per-side [top, right, bottom, left] boundsMargin feat: accept a per-side [top, right, bottom, left] boundsMargin Oct 2, 2026
@pecoram pecoram changed the title feat: accept a per-side [top, right, bottom, left] boundsMargin refactor(dom-renderer): accept a per-side [top, right, bottom, left] boundsMargin Oct 2, 2026
@chiefcll
chiefcll merged commit 6378a33 into solid-tv:main Oct 4, 2026
1 check failed
chiefcll added a commit that referenced this pull request Oct 6, 2026
#70)

#67 widened DomRendererMainSettings.boundsMargin to accept a per-side
tuple, matching renderer 1.10.1. The repo still resolved renderer 1.9.0,
whose RendererMainSettings.boundsMargin is number-only, so
startLightningRenderer no longer type-checked and `pnpm build` failed.

Raise the peer floor to ^1.10.1 (the first release with the tuple) and
refresh the lockfile.

Renderer 1.10.1 also dropped AnimationTickPayload and added BoundsMargin
and normalizeBoundsMargin, which @solidtv/solid re-exports via
`export type *`. Update the contract-types list to match.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
chiefcll added a commit that referenced this pull request Oct 6, 2026
Main brought the contract tests and benchmark harness from 1.7, adapted to
1.6.4 on renderer 1.9 (#68), the per-side boundsMargin tuple on the DOM
renderer (#67), restoreFocus skipping destroyed elements (#69), the
renderer 1.10.1 requirement (#70) and version 1.6.5. Resolution, keeping
1.7's behaviour and the smallest diff against main:

- Tests: merged against the Phase 1 commits main started from (a12c778),
  so only main's rewording applied. 1.7's assertions and expected values
  win. Main's headers are kept where true on 1.7; "1.6.4 (renderer 1.9)"
  becomes "1.7 (renderer 2.0)". contract-types.tsx keeps 1.7's renderer 2
  type names (main added no Solid-side name that 1.7 lacks);
  tests/webgl/setup.ts and the late-font WebGL test stay 1.7's (renderer 2
  lets a text wait for its font). tests/focusStack.test.tsx from main
  passes on 1.7.
- bench/: main's files, plus arm B (f1c8ab0 on renderer faf4b9f), arm C on
  the linked ../renderer-v2-solid (main's installed-renderer lookup, plus
  1.7's rebuild of its dist and its revision in the record), skipC for the
  demo scripts, the A/B and B/C ratio table, default --arms A,B,C.
  Main's probe fix (renderer 1.x shader props are non-enumerable accessors)
  and the summary's per-arm Solid/renderer lines are kept; the renderer 2
  hooks install on arms B and C. bench/src/arm-v2.ts, bench/demo/* and
  bench/micro/* stay.
- docs/perf/README.md: main's text plus arm B, the per-major count hooks,
  the 120 Hz note and a section for bench/demo and bench/micro.
- package.json: version 1.6.5; @solidtv/renderer stays 1.7's (peer
  ^2.0.0-alpha.0, devDependency link:../renderer-v2-solid). pnpm install
  regenerated the lockfile (unchanged from 1.7's).
- .gitignore, eslint.config.js: union (main's recursive results ignore,
  1.7's .superpowers ignores).
- src/: #67 and #69's createFocusStack change auto-merged. #69's DOMNode
  `destroyed` field and markDestroyed() are dropped: 1.7's DOMNode already
  has a `destroyed` getter (this node or an ancestor destroyed), which
  restoreFocus reads through ElementNode.destroyed. Renderer 2.0 still
  takes one boundsMargin number (the tuple's widest edge, with a warning),
  so the tuple works on the DOM renderer only.
- MIGRATION-1.7.md: the boundsMargin tuple is a break inherited from
  renderer 2.0; the DOM renderer's `destroyed` was undefined before 1.6.5.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants