studio-engine 0.109.0.rc1 → 0.109.0.rc2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1a916913ae747d410986fa4bc0f8abef5379e749678542100a0c396a954ff05e
4
- data.tar.gz: 8816f7f0bc15437c3f509ce93c38e9d4d52b2425c81ed1f63a48f8022e21d0e9
3
+ metadata.gz: 19c0cd3c18b09bb009d42eea9911cb5eef64299aa74ba800f7bdd011da66623b
4
+ data.tar.gz: b22bc36fc79bac82a01ff679bbd9e7d9a49ea92f4d5b71fb52d1efc95e75bd0b
5
5
  SHA512:
6
- metadata.gz: 105b1f39b9c67041a6bae67a769f65ecb54f75abad1cea11088df3d69e98c83c75fd5c705eb17c8384a513f6d58488ffb36633a6af6955ca242bc504c4881670
7
- data.tar.gz: 2dd6e01fc32d25b69558452f39351c5e3bc5e98b35da3064ea12eb10f8a4f1aba9fcee8f39cbe57cb325109ab64e5624c65ed50d035156e050dcf152ff8ef2e6
6
+ metadata.gz: dd07af40833cdeb4acdaab8e37bffc7f021b9369c14c3b5f6d83c417e7344ada891143924f662cda4bcf6b389098b21eb9c85a860c99134798417273caf7b715
7
+ data.tar.gz: e4a4fc94d72ffcb463a1e37117dcd53f2d2897aea9ee070852a732cf1bace6b31ec35f3c0bdaa128528dcebd63c5d008a98142a024eb4415eabda0ccc5a02a69
data/CHANGELOG.md CHANGED
@@ -4,6 +4,19 @@ The format is [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). This pro
4
4
 
5
5
  ## Unreleased
6
6
 
7
+ ### Changed
8
+
9
+ - **A held navbar eases its collapse again.** 0.108.0 held the header's
10
+ footprint so the page never moves, and with it let the header follow the
11
+ scroll position exactly. On a hard flick that crossed the whole ramp in a
12
+ frame or two, the header then snapped full to compact (or back) in one frame,
13
+ which read as a jerk on the hub's `/deployments`. The `--nav-max-step` cap
14
+ (5px of header travel per frame) now applies to held headers too, so a flick
15
+ plays as a short animation of about 8-9 frames. The page still never moves:
16
+ the hold keeps the document's height whatever `--nav-p` is. After a hard
17
+ flick to the top, page background shows between the header and the content
18
+ for those frames while the header grows back. A slow scroll is unchanged.
19
+
7
20
  ## 0.109.0 — 2026-10-15
8
21
 
9
22
  ### Added
@@ -630,9 +630,10 @@ body.modal-open .studio-app-banner {
630
630
  single frame on a flick — measured 39px in turf-monster, the full
631
631
  178 -> 139. navCollapse() converts this to --nav-p units off
632
632
  --nav-ramp's 3x relation to the collapse total, so one number covers
633
- every band. It binds only a header OUT of the page's flow: a header
634
- in flow is held (studio/nav_collapse, the hold), so the page cannot
635
- move, and its progress follows the scroll exactly. */
633
+ every band. It eases every header, held or not: a held header cannot
634
+ move the page (studio/nav_collapse, the hold), so for it the cap only
635
+ shapes the header's own motion, and a flick plays as a short animation
636
+ rather than a one-frame jump. */
636
637
  --nav-max-step: 5px;
637
638
  --nav-pad: calc(1.5rem - 1rem * var(--nav-p, 0)); /* py-6 -> py-2 */
638
639
  --nav-logo-size: calc(3rem - 1rem * var(--nav-p, 0)); /* 48px -> 32px */
@@ -35,12 +35,17 @@
35
35
  // finger moved it, and only the header itself changes size. A header that
36
36
  // is not in flow (fixed or absolute) is left alone: it never moved the page.
37
37
  //
38
- // (Held, the two guards below exist only for an UNHELD header. The document
39
- // no longer shortens, so the short-page flap cannot happen, and the per-frame
40
- // cap, which slowed the header so the page it dragged would not jump, now
41
- // only makes the header lag the scroll. Worse, a lagging header opens a gap
42
- // above the content on a fast scroll back to the top. Held, the progress is
43
- // the scroll position, every frame.)
38
+ // (Held, the short-page guard below is off: the document no longer
39
+ // shortens, so the flap it prevents cannot happen. The per-frame CAP stays
40
+ // on. It was written to stop a flick dragging the page, and the hold already
41
+ // does that; what it buys a held header is the header's own motion. With the
42
+ // cap off, a flick that crossed the ramp in one frame snapped the header
43
+ // from full to compact in one frame, which read as a jerk on the hub's
44
+ // /deployments (2026-10-15). Capped, the header eases over a few frames, and
45
+ // the page under it still holds, because the hold keeps the document's
46
+ // height whatever --nav-p is. Easing open after a flick to the top leaves
47
+ // page background between the header and the content for those frames, the
48
+ // space the header is growing back into.)
44
49
  //
45
50
  // passive + rAF: the listener never blocks the compositor and coalesces a
46
51
  // burst of scroll events (iOS momentum fires far above 60Hz) into one write
@@ -85,7 +90,7 @@ export const DEFAULT_MAX_STEP = 5;
85
90
  // innerHeight window.innerHeight
86
91
  // reduce prefers-reduced-motion matches
87
92
  // held the header holds its footprint (see the hold above): no
88
- // short-page guard, no per-frame cap
93
+ // short-page guard; the per-frame cap still eases the header
89
94
  //
90
95
  // Answers { p, settling }: the progress to publish, and whether the frame
91
96
  // clamp left it short of where the scroll position wants it (so the caller
@@ -107,8 +112,6 @@ export function collapseFrame({ y, p, ramp, maxPx, scrollHeight, innerHeight, re
107
112
  } else {
108
113
  var t = Math.min(1, y / ramp);
109
114
  target = t * t * (3 - 2 * t);
110
- // Held, the progress IS the scroll position: nothing to cap.
111
- if (held) snap = true;
112
115
  }
113
116
 
114
117
  // THE RATE LIMIT: how far the collapse may travel in ONE frame.
@@ -139,7 +142,7 @@ export function collapseFrame({ y, p, ramp, maxPx, scrollHeight, innerHeight, re
139
142
  if (snap) {
140
143
  // A guard refusal and a reduced-motion state are DECISIONS, not
141
144
  // motion; ramping them would animate the very thing each exists to
142
- // avoid. A held header follows the scroll exactly.
145
+ // avoid.
143
146
  next = target;
144
147
  } else {
145
148
  var maxStep = (3 * maxPx) / ramp;
@@ -1,3 +1,3 @@
1
1
  module Studio
2
- VERSION = "0.109.0.rc1"
2
+ VERSION = "0.109.0.rc2"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: studio-engine
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.109.0.rc1
4
+ version: 0.109.0.rc2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex McRitchie