cursedbelt 5.99.4 → 5.99.6
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.
- package/dist/react/components/PanelGrid.d.ts +4 -1
- package/dist/react/components/PanelGrid.d.ts.map +1 -1
- package/dist/react/components/PanelGrid.js +18 -10
- package/dist/react/components/PanelGrid.js.map +1 -1
- package/dist/react/media/DenseGalleryShell.d.ts.map +1 -1
- package/dist/react/media/DenseGalleryShell.js +61 -4
- package/dist/react/media/DenseGalleryShell.js.map +1 -1
- package/dist/react/media/denseGallery.css +8 -1
- package/package.json +13 -3
- package/src/demoFixture.spec.ts +6 -3
- package/src/react/components/PanelGrid.tsx +27 -4
- package/src/react/components/SplitPane.spec.tsx +17 -0
- package/src/react/media/DenseGalleryShell.tsx +63 -4
- package/src/react/media/denseGallery.css +8 -1
- package/src/verifyGraph.spec.ts +25 -3
|
@@ -24,7 +24,10 @@ export interface PanelGridLeaf {
|
|
|
24
24
|
/** A split — lays its children out along `direction` with dividers between them. */
|
|
25
25
|
export interface PanelGridSplit {
|
|
26
26
|
type: 'split';
|
|
27
|
-
/**
|
|
27
|
+
/**
|
|
28
|
+
* Unique within the whole grid — namespaces the persisted layout of this group. It need not be
|
|
29
|
+
* unique on the PAGE: the library's group is registered as `<this grid's useId()>:<id>`.
|
|
30
|
+
*/
|
|
28
31
|
id: string;
|
|
29
32
|
/** 'horizontal' = children side-by-side; 'vertical' = children stacked. */
|
|
30
33
|
direction: 'horizontal' | 'vertical';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PanelGrid.d.ts","sourceRoot":"","sources":["../../../src/react/components/PanelGrid.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,
|
|
1
|
+
{"version":3,"file":"PanelGrid.d.ts","sourceRoot":"","sources":["../../../src/react/components/PanelGrid.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAkB,MAAM,OAAO,CAAC;AAIvD,OAAO,EAAkB,KAAK,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAEjF,0EAA0E;AAC1E,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,6EAA6E;IAC7E,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,SAAS,CAAC;IACnB;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,oFAAoF;AACpF,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,OAAO,CAAC;IACd;;;OAGG;IACH,EAAE,EAAE,MAAM,CAAC;IACX,2EAA2E;IAC3E,SAAS,EAAE,YAAY,GAAG,UAAU,CAAC;IACrC,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,sFAAsF;IACtF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iFAAiF;IACjF,gBAAgB,CAAC,EAAE,qBAAqB,CAAC;IACzC,2GAA2G;IAC3G,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG,cAAc,CAAC;AAE3D,MAAM,WAAW,cAAc;IAC7B,+EAA+E;IAC/E,IAAI,EAAE,cAAc,CAAC;IACrB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kCAAkC;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iDAAiD;IACjD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,qBAAqB,CAAC;IACzC;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAUD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,wBAAgB,SAAS,CAAC,EACxB,IAAI,EACJ,UAAU,EACV,QAAQ,EACR,WAAkB,EAClB,gBAAyB,EACzB,WAAkB,EAClB,SAAS,EACT,GAAG,IAAI,EACR,EAAE,cAAc,+BAoChB"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useMemo } from 'react';
|
|
2
|
+
import { useId, useMemo } from 'react';
|
|
3
3
|
import { Group, Panel, useDefaultLayout } from 'react-resizable-panels';
|
|
4
4
|
import { useMediaQuery } from '../hooks/useMediaQuery.js';
|
|
5
5
|
import { cn } from '../lib/cn.js';
|
|
@@ -52,33 +52,41 @@ function leavesOf(node) {
|
|
|
52
52
|
export function PanelGrid({ root, storageKey, disabled, withHandles = true, separatorVariant = 'line', mobileStack = true, className, ...rest }) {
|
|
53
53
|
const isMobile = useMediaQuery('(max-width: 639px)');
|
|
54
54
|
const flatLeaves = useMemo(() => leavesOf(root), [root]);
|
|
55
|
+
// 🔴 react-resizable-panels keys its group registry by `id` ACROSS THE DOCUMENT, and each Group's
|
|
56
|
+
// listener takes every change made under its id. `SplitPane` gave every instance the same root
|
|
57
|
+
// id, `'root'`, so two on one page heard each other's layouts: a collapsible panel looked itself
|
|
58
|
+
// up in the other group's layout, found nothing, and `toFixed` threw out of a ResizeObserver —
|
|
59
|
+
// before the listener applied the new layout (forge task 3981, caught by the kitchen sink's
|
|
60
|
+
// `test:browser:smoke`). It also put a second `id="root"` in the DOM beside the app's mount node.
|
|
61
|
+
// Each grid instance scopes its groups; the persisted key stays `${storageKey}:${split.id}`.
|
|
62
|
+
const scope = useId();
|
|
55
63
|
if (mobileStack && isMobile) {
|
|
56
64
|
return (_jsx("div", { ...rest, className: cn('flex flex-col', className), children: flatLeaves.map((leaf) => (_jsx("div", { className: cn('min-h-0', leaf.className), children: leaf.content }, leaf.id))) }));
|
|
57
65
|
}
|
|
58
|
-
return (_jsx(GridSplit, { ...rest, node: root, storageKey: storageKey, disabled: disabled, withHandles: withHandles, separatorVariant: separatorVariant, className: cn('h-full', className) }));
|
|
66
|
+
return (_jsx(GridSplit, { ...rest, node: root, scope: scope, storageKey: storageKey, disabled: disabled, withHandles: withHandles, separatorVariant: separatorVariant, className: cn('h-full', className) }));
|
|
59
67
|
}
|
|
60
68
|
function GridSplit(props) {
|
|
61
69
|
// Persistence needs the useDefaultLayout hook; hooks can't be conditional,
|
|
62
70
|
// so the persistent and plain variants are separate components.
|
|
63
71
|
return props.storageKey ? _jsx(PersistentGridSplit, { ...props }) : _jsx(PlainGridSplit, { ...props });
|
|
64
72
|
}
|
|
65
|
-
function PlainGridSplit({ node, storageKey, disabled, withHandles, separatorVariant, className, }) {
|
|
66
|
-
return (_jsx(Group, { id: node.id
|
|
73
|
+
function PlainGridSplit({ node, scope, storageKey, disabled, withHandles, separatorVariant, className, }) {
|
|
74
|
+
return (_jsx(Group, { id: `${scope}:${node.id}`, orientation: node.direction, disabled: disabled, className: cn('flex', node.direction === 'horizontal' ? 'flex-row' : 'flex-col', className ?? node.className), children: _jsx(GridChildren, { node: node, scope: scope, storageKey: storageKey, disabled: disabled, withHandles: withHandles, separatorVariant: separatorVariant }) }));
|
|
67
75
|
}
|
|
68
|
-
function PersistentGridSplit({ node, storageKey, disabled, withHandles, separatorVariant, className, }) {
|
|
76
|
+
function PersistentGridSplit({ node, scope, storageKey, disabled, withHandles, separatorVariant, className, }) {
|
|
69
77
|
const { defaultLayout, onLayoutChanged } = useDefaultLayout({
|
|
70
78
|
id: `${storageKey}:${node.id}`,
|
|
71
79
|
onlySaveAfterUserInteractions: true,
|
|
72
80
|
storage: localStorage,
|
|
73
81
|
});
|
|
74
|
-
return (_jsx(Group, { id: node.id
|
|
82
|
+
return (_jsx(Group, { id: `${scope}:${node.id}`, orientation: node.direction, defaultLayout: defaultLayout, onLayoutChanged: onLayoutChanged, disabled: disabled, className: cn('flex', node.direction === 'horizontal' ? 'flex-row' : 'flex-col', className ?? node.className), children: _jsx(GridChildren, { node: node, scope: scope, storageKey: storageKey, disabled: disabled, withHandles: withHandles, separatorVariant: separatorVariant }) }));
|
|
75
83
|
}
|
|
76
|
-
function GridChildren({ node, storageKey, disabled, withHandles, separatorVariant, }) {
|
|
84
|
+
function GridChildren({ node, scope, storageKey, disabled, withHandles, separatorVariant, }) {
|
|
77
85
|
const showSeparators = node.resizable !== false;
|
|
78
86
|
const variant = node.separatorVariant ?? separatorVariant;
|
|
79
|
-
return (_jsx(_Fragment, { children: node.children.map((child, i) => (_jsx(GridCell, { child: child, direction: node.direction, storageKey: storageKey, disabled: disabled, withHandles: withHandles, separatorVariant: variant, separatorBefore: i > 0 && showSeparators }, child.id))) }));
|
|
87
|
+
return (_jsx(_Fragment, { children: node.children.map((child, i) => (_jsx(GridCell, { child: child, scope: scope, direction: node.direction, storageKey: storageKey, disabled: disabled, withHandles: withHandles, separatorVariant: variant, separatorBefore: i > 0 && showSeparators }, child.id))) }));
|
|
80
88
|
}
|
|
81
|
-
function GridCell({ child, direction, storageKey, disabled, withHandles, separatorVariant, separatorBefore, }) {
|
|
82
|
-
return (_jsxs(_Fragment, { children: [separatorBefore && (_jsx(PanelSeparator, { direction: direction, disabled: disabled, variant: separatorVariant, withHandle: withHandles })), _jsx(Panel, { id: child.id, defaultSize: child.defaultSize, minSize: child.minSize, collapsible: true, collapsedSize: 0, className: cn('min-h-0 min-w-0', child.className), children: isSplit(child) ? (_jsx(GridSplit, { node: child, storageKey: storageKey, disabled: disabled, withHandles: withHandles, separatorVariant: separatorVariant, className: 'h-full' })) : (child.content) })] }));
|
|
89
|
+
function GridCell({ child, scope, direction, storageKey, disabled, withHandles, separatorVariant, separatorBefore, }) {
|
|
90
|
+
return (_jsxs(_Fragment, { children: [separatorBefore && (_jsx(PanelSeparator, { direction: direction, disabled: disabled, variant: separatorVariant, withHandle: withHandles })), _jsx(Panel, { id: child.id, defaultSize: child.defaultSize, minSize: child.minSize, collapsible: true, collapsedSize: 0, className: cn('min-h-0 min-w-0', child.className), children: isSplit(child) ? (_jsx(GridSplit, { node: child, scope: scope, storageKey: storageKey, disabled: disabled, withHandles: withHandles, separatorVariant: separatorVariant, className: 'h-full' })) : (child.content) })] }));
|
|
83
91
|
}
|
|
84
92
|
//# sourceMappingURL=PanelGrid.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PanelGrid.js","sourceRoot":"","sources":["../../../src/react/components/PanelGrid.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAkB,OAAO,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"PanelGrid.js","sourceRoot":"","sources":["../../../src/react/components/PanelGrid.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DenseGalleryShell.d.ts","sourceRoot":"","sources":["../../../src/react/media/DenseGalleryShell.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"DenseGalleryShell.d.ts","sourceRoot":"","sources":["../../../src/react/media/DenseGalleryShell.tsx"],"names":[],"mappings":"AAAA,OAAO,oBAAoB,CAAC;AAE5B,OAAO,EACL,KAAK,oBAAoB,EAGzB,KAAK,SAAS,EACd,KAAK,GAAG,EAMT,MAAM,OAAO,CAAC;AAiBf;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,wBACf,SAAQ,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,WAAW,CAAC;IAClE,gEAAgE;IAChE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,yFAAyF;IACzF,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB;;;;;;;;;;;;;;OAcG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,mBAAmB,CAAC,EAClC,MAAM,EACN,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,IAAI,EACJ,GAAG,KAAK,EACT,EAAE,wBAAwB,+BAc1B;AAED,mDAAmD;AACnD,MAAM,WAAW,uBAAuB,CAAC,CAAC,SAAS,MAAM;IACvD,GAAG,EAAE,CAAC,CAAC;IACP,KAAK,EAAE,MAAM,CAAC;IACd;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,CAAC,CAAC;IACf,wFAAwF;IACxF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mFAAmF;IACnF,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;CACpD;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC,SAAS,MAAM;IACjD,KAAK,EAAE,CAAC,CAAC;IACT,OAAO,EAAE,uBAAuB,CAAC,CAAC,CAAC,EAAE,CAAC;IACtC,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAmDD,MAAM,WAAW,sBAAsB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IAC/D,uDAAuD;IACvD,KAAK,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IAC/B,2BAA2B;IAC3B,KAAK,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAC7B,oEAAoE;IACpE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,qEAAqE;IACrE,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,MAAM,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;IACvC,mEAAmE;IACnE,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,SAAS,CAAC;IACzC;;;;;;;;OAQG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,oDAAoD;IACpD,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB;;uDAEmD;IACnD,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;;;;;;;OAUG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,OAAO,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;CAC/B;AAED,sFAAsF;AACtF,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,EAC3D,KAAK,EACL,OAAO,EAAE,QAAiB,EAC1B,KAAK,EACL,KAAK,EACL,aAAa,EACb,iBAA6B,EAC7B,WAAW,EACX,MAAiB,EACjB,WAAW,EACX,OAAO,EACP,SAAS,EACT,UAAU,EACV,IAAI,EACJ,SAAS,EACT,OAAO,EACP,KAAK,EACL,WAAW,EACX,cAAoB,EAEpB,cAAc,EACd,OAAO,EACP,GAAG,IAAI,EACR,EAAE,sBAAsB,CAAC,CAAC,CAAC,+BA+D3B;AAED,MAAM,WAAW,uBAAuB;IACtC,2EAA2E;IAC3E,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB;;;;;iBAKa;IACb,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB;;;;;;;;;;OAUG;IACH,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC;IACjC,0CAA0C;IAC1C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,sDAAsD;IACtD,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB;;;;;;;;;;;;;;;OAeG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kEAAkE;IAClE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,0DAA0D;IAC1D,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,SAAS,CAAC;IACzC;;;;;;;;;;;;OAYG;IACH,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,uEAAuE;IACvE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;;;;;;OASG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5C;;;;;;;;;;;;;;;;OAgBG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;;;;OAKG;IACH,0BAA0B,CAAC,EAAE,OAAO,CAAC;CACtC;AAgBD,8FAA8F;AAC9F,wBAAgB,kBAAkB,CAAC,EACjC,KAAK,EACL,KAAK,EACL,IAAI,EACJ,OAAO,EACP,MAAM,EACN,OAAc,EACd,IAAI,EACJ,WAAW,EACX,MAAM,EACN,YAAY,EACZ,SAAS,EACT,UAAU,EACV,WAAW,EACX,SAAS,EACT,OAAO,EACP,cAAoB,EAEpB,cAAc,EACd,SAAS,EAAE,aAAa,EACxB,iBAAiB,EACjB,oBAA4B,EAC5B,0BAAkC,EAClC,GAAG,WAAW,EACf,EAAE,uBAAuB,+BAqfzB"}
|
|
@@ -64,6 +64,11 @@ rowExtraHeight, rootRef, ...rest }) {
|
|
|
64
64
|
* bottom" whatever the arithmetic says.
|
|
65
65
|
*/
|
|
66
66
|
const STAGE_SHARE = 0.58;
|
|
67
|
+
/**
|
|
68
|
+
* The shortest a PINNED frame is capped to, however little the window leaves it: a player's
|
|
69
|
+
* own control bar is most of this, and a frame shorter than its controls shows neither.
|
|
70
|
+
*/
|
|
71
|
+
const PINNED_STAGE_FLOOR_PX = 96;
|
|
67
72
|
/** The selected/detail view: a stage on top, titlebar + optional rail, related grid below. */
|
|
68
73
|
export function DenseGalleryDetail({ stage, title, meta, actions, onStep, canStep = true, rail, stageHeight, sticky, relatedLabel, itemCount, renderTile, relatedBody, onNearEnd, loading, minColumnWidth = 160,
|
|
69
74
|
// 🔴 Deliberately NOT defaulted here — see the prop's doc comment.
|
|
@@ -110,6 +115,7 @@ rowExtraHeight, fullStage: fullStageProp, onFullStageChange, stageOwnsDoubleClic
|
|
|
110
115
|
return;
|
|
111
116
|
const host = watchEl.parentElement ?? watchEl;
|
|
112
117
|
let last = '';
|
|
118
|
+
let lastPin = null;
|
|
113
119
|
const apply = () => {
|
|
114
120
|
const available = host.clientHeight;
|
|
115
121
|
if (!available)
|
|
@@ -167,9 +173,51 @@ rowExtraHeight, fullStage: fullStageProp, onFullStageChange, stageOwnsDoubleClic
|
|
|
167
173
|
// Beside, the frame is measured against the SCROLLER itself: its parent also holds the
|
|
168
174
|
// app's page header, and the whole point is that the picture fits the scroller's height.
|
|
169
175
|
// Loop-free — the scroller's box is its parent's layout, not its content's.
|
|
176
|
+
/*
|
|
177
|
+
* 🔴 PINNED, the frame is capped so the whole band fits under the band's own ceiling.
|
|
178
|
+
*
|
|
179
|
+
* Owner, 2026-10-29, collections: *"I used the pin on a large video window and could no
|
|
180
|
+
* longer see the toolstrip or video controls until I used command + minus key to shrink
|
|
181
|
+
* the screen size to around 70%. It should keep the controls and tool strip visible at
|
|
182
|
+
* all sizes."* Pinned, `.cbgd-watch-top` is sticky with a `max-height` and clips what
|
|
183
|
+
* overflows it — the stylesheet's way of keeping files visible under it. A frame sized as
|
|
184
|
+
* if unpinned (a drag reaches 86% of the scroller) plus the resize rail and the titlebar
|
|
185
|
+
* ran past that ceiling, and the clip took the bottom of the picture, which is where the
|
|
186
|
+
* player's control bar is, and the titlebar under it.
|
|
187
|
+
*
|
|
188
|
+
* So the ceiling is READ from the stylesheet (one number, kept there) and the frame may
|
|
189
|
+
* take what the chrome leaves of it: `--cbgd-stage-pin`, which caps the dragged height
|
|
190
|
+
* below and the fit here. The chrome is measured from the region's top edge to the
|
|
191
|
+
* titlebar's bottom, never as the region's own height: clipped, that box is the ceiling,
|
|
192
|
+
* not its content. Loop-free for the reason the fit is — shrinking the frame moves the
|
|
193
|
+
* titlebar up by exactly as much. `e2e/pinned-stage.spec.ts` drags it tall and measures.
|
|
194
|
+
*/
|
|
195
|
+
const titlebar = watchEl.querySelector('.cbgd-watch-titlebar');
|
|
196
|
+
const stackedChromePx = top && frame && titlebar && topStyle
|
|
197
|
+
? Math.ceil(titlebar.getBoundingClientRect().bottom -
|
|
198
|
+
top.getBoundingClientRect().top -
|
|
199
|
+
frame.getBoundingClientRect().height +
|
|
200
|
+
Number.parseFloat(topStyle.paddingBottom))
|
|
201
|
+
: chromePx;
|
|
202
|
+
// `none` when unpinned or full-window (`.cbgd-watch-sticky.cbgd-watch-full`), which reads NaN:
|
|
203
|
+
// no pin. Full window resizes this scroller, so the observer re-reads it either way.
|
|
204
|
+
const ceilingPx = sticky && topStyle ? Number.parseFloat(topStyle.maxHeight) : Number.NaN;
|
|
205
|
+
const pinChromePx = beside ? chromePx : stackedChromePx;
|
|
206
|
+
const pin = Number.isFinite(ceilingPx)
|
|
207
|
+
? `${Math.max(PINNED_STAGE_FLOOR_PX, Math.floor(ceilingPx - pinChromePx))}px`
|
|
208
|
+
: '';
|
|
209
|
+
if (pin !== lastPin) {
|
|
210
|
+
lastPin = pin;
|
|
211
|
+
if (pin)
|
|
212
|
+
watchEl.style.setProperty('--cbgd-stage-pin', pin);
|
|
213
|
+
else
|
|
214
|
+
watchEl.style.removeProperty('--cbgd-stage-pin');
|
|
215
|
+
}
|
|
216
|
+
// Clipped, the region's box under-reads the chrome; the stacked measure does not.
|
|
217
|
+
const fitChromePx = beside ? chromePx : chromePx > stackedChromePx ? chromePx : stackedChromePx;
|
|
170
218
|
const room = beside ? watchEl.clientHeight : available;
|
|
171
|
-
const usable = room >
|
|
172
|
-
const fit = `min(${Math.round(usable * share)}px, var(--cbgd-stage-default))`;
|
|
219
|
+
const usable = room > fitChromePx ? room - fitChromePx : 0;
|
|
220
|
+
const fit = `min(${Math.round(usable * share)}px, var(--cbgd-stage-default)${pin ? `, ${pin}` : ''})`;
|
|
173
221
|
if (fit === last)
|
|
174
222
|
return;
|
|
175
223
|
last = fit;
|
|
@@ -179,9 +227,13 @@ rowExtraHeight, fullStage: fullStageProp, onFullStageChange, stageOwnsDoubleClic
|
|
|
179
227
|
observer.observe(host);
|
|
180
228
|
if (host !== watchEl)
|
|
181
229
|
observer.observe(watchEl);
|
|
230
|
+
// The titlebar too: its actions wrap with the width, and that is chrome the pin subtracts.
|
|
231
|
+
const titlebarEl = watchEl.querySelector('.cbgd-watch-titlebar');
|
|
232
|
+
if (titlebarEl)
|
|
233
|
+
observer.observe(titlebarEl);
|
|
182
234
|
apply();
|
|
183
235
|
return () => observer.disconnect();
|
|
184
|
-
}, [watchEl]);
|
|
236
|
+
}, [watchEl, sticky]);
|
|
185
237
|
/*
|
|
186
238
|
* 🔴 Full-stage means FULL WINDOW — the browser window, not the plugin and not the screen.
|
|
187
239
|
*
|
|
@@ -280,7 +332,12 @@ rowExtraHeight, fullStage: fullStageProp, onFullStageChange, stageOwnsDoubleClic
|
|
|
280
332
|
containerPx: Math.max(0, (watchEl?.clientHeight ?? 0) - railPx),
|
|
281
333
|
frameEl,
|
|
282
334
|
});
|
|
283
|
-
const
|
|
335
|
+
const chosenStageHeight = dragHeight !== null ? `${dragHeight}px` : stageHeight;
|
|
336
|
+
// Pinned, a chosen height is still the height — up to what the pinned band can show (see
|
|
337
|
+
// `--cbgd-stage-pin` in the fit above). Unmeasured, the fallback is the height itself.
|
|
338
|
+
const effectiveStageHeight = chosenStageHeight && sticky && !fullStage
|
|
339
|
+
? `min(${chosenStageHeight}, var(--cbgd-stage-pin, ${chosenStageHeight}))`
|
|
340
|
+
: chosenStageHeight;
|
|
284
341
|
/*
|
|
285
342
|
* 🔴 On a phone the action row is ONE line, and what does not fit FOLDS behind a toggle.
|
|
286
343
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DenseGalleryShell.js","sourceRoot":"","sources":["../../../src/react/media/DenseGalleryShell.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DenseGalleryShell.js","sourceRoot":"","sources":["../../../src/react/media/DenseGalleryShell.tsx"],"names":[],"mappings":"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"}
|
|
@@ -617,13 +617,20 @@
|
|
|
617
617
|
line-height: 1;
|
|
618
618
|
}
|
|
619
619
|
|
|
620
|
-
/* Opt-in: pin the top region while the "More" grid scrolls under it.
|
|
620
|
+
/* Opt-in: pin the top region while the "More" grid scrolls under it.
|
|
621
|
+
🔴 `max-height` is the band's CEILING, and `DenseGalleryDetail` reads it: pinned, the frame is
|
|
622
|
+
capped at what the chrome leaves of it (`--cbgd-stage-pin`), so nothing is clipped — owner,
|
|
623
|
+
2026-10-29: *"could no longer see the toolstrip or video controls"* (`e2e/pinned-stage.spec.ts`).
|
|
624
|
+
🔴 `flex-shrink: 0` for the same report: `overflow: hidden` drops a flex item's automatic
|
|
625
|
+
minimum to 0, so in a short scroller the band — not `.cbgd-related`'s 160px floor — gave way,
|
|
626
|
+
and the cut took the titlebar. The scroller scrolls instead. */
|
|
621
627
|
.cbgd-watch-sticky .cbgd-watch-top {
|
|
622
628
|
position: sticky;
|
|
623
629
|
top: 0;
|
|
624
630
|
/* Sticky pinned region → the sticky band token (06 §1), not a raw literal. */
|
|
625
631
|
z-index: var(--z-sticky);
|
|
626
632
|
max-height: 70vh;
|
|
633
|
+
flex-shrink: 0;
|
|
627
634
|
overflow: hidden;
|
|
628
635
|
background: var(--background);
|
|
629
636
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cursedbelt",
|
|
3
|
-
"version": "5.99.
|
|
3
|
+
"version": "5.99.6",
|
|
4
4
|
"license": "ISC",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "The React design system of the cursedbelt split — components, styles, theme. cursedbelt-core below it; server tier in cursedbelt-server.",
|
|
@@ -90,6 +90,7 @@
|
|
|
90
90
|
"demo:serve": "bun run demo:build && bun run scripts/demoServer.ts",
|
|
91
91
|
"build": "rm -rf dist.next dist.prev && bun run scripts/generateStaticStyles.ts && bun run scripts/generateUtilityStyles.ts && bun run scripts/generateAreaStyles.ts && tsc --project tsconfig.build.json --outDir dist.next && tsc --project tsconfig.scripts.build.json --outDir dist.next/scripts && CURSEDBELT_DIST_DIR=dist.next bun run scripts/copyDistAssets.ts && CURSEDBELT_DIST_DIR=dist.next bun run scripts/checkDistExports.ts &&{ [ -d dist ] && mv dist dist.prev || true; } && mv dist.next dist && rm -rf dist.prev",
|
|
92
92
|
"e2e": "playwright test --config e2e/playwright.config.ts",
|
|
93
|
+
"test:browser:smoke": "playwright test --config e2e/playwright.config.ts smoke.spec.ts --project=chromium",
|
|
93
94
|
"e2e:filter-rail": "playwright test --config e2e/playwright.config.ts filter-rail.spec.ts",
|
|
94
95
|
"e2e:table-layout": "playwright test --config e2e/playwright.config.ts table-layout.spec.ts",
|
|
95
96
|
"e2e:stage-layout": "playwright test --config e2e/playwright.config.ts stage-layout.spec.ts",
|
|
@@ -965,7 +966,7 @@
|
|
|
965
966
|
"@vidstack/react": "1.15.6",
|
|
966
967
|
"@vitejs/plugin-react": "^5.2.0",
|
|
967
968
|
"cursedbelt-server": "^4.43.1",
|
|
968
|
-
"cursedops": "^0.
|
|
969
|
+
"cursedops": "^0.23.0",
|
|
969
970
|
"diff": "^9.0.0",
|
|
970
971
|
"emoji-mart": "^5.6.0",
|
|
971
972
|
"hls.js": "^1.5.0",
|
|
@@ -1076,12 +1077,21 @@
|
|
|
1076
1077
|
"why": "stylesStaticMatches / stylesUtilitiesMatches read those two files and assert they are current",
|
|
1077
1078
|
"timeoutSec": 300
|
|
1078
1079
|
},
|
|
1080
|
+
{
|
|
1081
|
+
"script": "test:browser:smoke",
|
|
1082
|
+
"needs": [
|
|
1083
|
+
"styles"
|
|
1084
|
+
],
|
|
1085
|
+
"why": "the one browser proof every verify keeps (forge task 3981): the built kitchen sink boots, renders its first sections and logs no console error. Behind styles because the demo bundle is compiled from those stylesheets"
|
|
1086
|
+
}
|
|
1087
|
+
],
|
|
1088
|
+
"deferred": [
|
|
1079
1089
|
{
|
|
1080
1090
|
"script": "e2e",
|
|
1081
1091
|
"needs": [
|
|
1082
1092
|
"styles"
|
|
1083
1093
|
],
|
|
1084
|
-
"why": "the demo bundle it drives is compiled from the same stylesheets"
|
|
1094
|
+
"why": "the whole kitchen-sink suite — 60 specs, ~127 s, the slowest stage in the generation. The queue's suite job runs it after landing (verify --full here), and prepublishOnly's --force runs it before any publish. Behind styles because the demo bundle it drives is compiled from the same stylesheets"
|
|
1085
1095
|
}
|
|
1086
1096
|
]
|
|
1087
1097
|
}
|
package/src/demoFixture.spec.ts
CHANGED
|
@@ -14,8 +14,11 @@ import {
|
|
|
14
14
|
} from '../demo/devServer.js';
|
|
15
15
|
import { DEMO_TSCONFIG, derivePaths, readDemoTsconfig, renderPathsBlock } from '../demo/generatePaths.js';
|
|
16
16
|
import pkg from '../package.json';
|
|
17
|
-
// The declared graph, read as data — there is no scheduler in this repo to import from.
|
|
18
|
-
|
|
17
|
+
// The declared graph, read as data — there is no scheduler in this repo to import from. Both halves:
|
|
18
|
+
// `e2e` is the deferred half since forge task 3981, which `verify --full`, the queue's suite job and a
|
|
19
|
+
// publish's `--force` run — `verifyGraph.spec.ts` pins which half it sits in.
|
|
20
|
+
const GATE = (pkg as { gate?: { stages?: { script: string }[]; deferred?: { script: string }[] } }).gate;
|
|
21
|
+
const STAGES: readonly { script: string }[] = [...(GATE?.stages ?? []), ...(GATE?.deferred ?? [])];
|
|
19
22
|
|
|
20
23
|
/**
|
|
21
24
|
* 🔴 The e2e suite must never be able to sit green while it drives nothing.
|
|
@@ -159,7 +162,7 @@ describe('the e2e fixture exists', () => {
|
|
|
159
162
|
// is still in it, which the `toInclude` never checked for any of them.
|
|
160
163
|
expect(
|
|
161
164
|
STAGES.map((s) => s.script),
|
|
162
|
-
'`verify` must still run the e2e suite',
|
|
165
|
+
'the gate (`verify --full`) must still run the e2e suite',
|
|
163
166
|
).toContain('e2e');
|
|
164
167
|
expect(pkg.scripts.e2e).toInclude('e2e/playwright.config.ts');
|
|
165
168
|
});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type ReactNode, useMemo } from 'react';
|
|
1
|
+
import { type ReactNode, useId, useMemo } from 'react';
|
|
2
2
|
import { Group, Panel, useDefaultLayout } from 'react-resizable-panels';
|
|
3
3
|
import { useMediaQuery } from '../hooks/useMediaQuery.js';
|
|
4
4
|
import { cn } from '../lib/cn.js';
|
|
@@ -29,7 +29,10 @@ export interface PanelGridLeaf {
|
|
|
29
29
|
/** A split — lays its children out along `direction` with dividers between them. */
|
|
30
30
|
export interface PanelGridSplit {
|
|
31
31
|
type: 'split';
|
|
32
|
-
/**
|
|
32
|
+
/**
|
|
33
|
+
* Unique within the whole grid — namespaces the persisted layout of this group. It need not be
|
|
34
|
+
* unique on the PAGE: the library's group is registered as `<this grid's useId()>:<id>`.
|
|
35
|
+
*/
|
|
33
36
|
id: string;
|
|
34
37
|
/** 'horizontal' = children side-by-side; 'vertical' = children stacked. */
|
|
35
38
|
direction: 'horizontal' | 'vertical';
|
|
@@ -133,6 +136,14 @@ export function PanelGrid({
|
|
|
133
136
|
}: PanelGridProps) {
|
|
134
137
|
const isMobile = useMediaQuery('(max-width: 639px)');
|
|
135
138
|
const flatLeaves = useMemo(() => leavesOf(root), [root]);
|
|
139
|
+
// 🔴 react-resizable-panels keys its group registry by `id` ACROSS THE DOCUMENT, and each Group's
|
|
140
|
+
// listener takes every change made under its id. `SplitPane` gave every instance the same root
|
|
141
|
+
// id, `'root'`, so two on one page heard each other's layouts: a collapsible panel looked itself
|
|
142
|
+
// up in the other group's layout, found nothing, and `toFixed` threw out of a ResizeObserver —
|
|
143
|
+
// before the listener applied the new layout (forge task 3981, caught by the kitchen sink's
|
|
144
|
+
// `test:browser:smoke`). It also put a second `id="root"` in the DOM beside the app's mount node.
|
|
145
|
+
// Each grid instance scopes its groups; the persisted key stays `${storageKey}:${split.id}`.
|
|
146
|
+
const scope = useId();
|
|
136
147
|
|
|
137
148
|
if (mobileStack && isMobile) {
|
|
138
149
|
return (
|
|
@@ -150,6 +161,7 @@ export function PanelGrid({
|
|
|
150
161
|
<GridSplit
|
|
151
162
|
{...rest}
|
|
152
163
|
node={root}
|
|
164
|
+
scope={scope}
|
|
153
165
|
storageKey={storageKey}
|
|
154
166
|
disabled={disabled}
|
|
155
167
|
withHandles={withHandles}
|
|
@@ -161,6 +173,8 @@ export function PanelGrid({
|
|
|
161
173
|
|
|
162
174
|
interface GridSplitProps {
|
|
163
175
|
node: PanelGridSplit;
|
|
176
|
+
/** This grid instance's `useId()` — prefixes every Group id so two grids never share one. */
|
|
177
|
+
scope: string;
|
|
164
178
|
storageKey: string | undefined;
|
|
165
179
|
disabled: boolean | undefined;
|
|
166
180
|
withHandles: boolean;
|
|
@@ -176,6 +190,7 @@ function GridSplit(props: GridSplitProps) {
|
|
|
176
190
|
|
|
177
191
|
function PlainGridSplit({
|
|
178
192
|
node,
|
|
193
|
+
scope,
|
|
179
194
|
storageKey,
|
|
180
195
|
disabled,
|
|
181
196
|
withHandles,
|
|
@@ -184,7 +199,7 @@ function PlainGridSplit({
|
|
|
184
199
|
}: GridSplitProps) {
|
|
185
200
|
return (
|
|
186
201
|
<Group
|
|
187
|
-
id={node.id}
|
|
202
|
+
id={`${scope}:${node.id}`}
|
|
188
203
|
orientation={node.direction}
|
|
189
204
|
disabled={disabled}
|
|
190
205
|
className={cn(
|
|
@@ -195,6 +210,7 @@ function PlainGridSplit({
|
|
|
195
210
|
>
|
|
196
211
|
<GridChildren
|
|
197
212
|
node={node}
|
|
213
|
+
scope={scope}
|
|
198
214
|
storageKey={storageKey}
|
|
199
215
|
disabled={disabled}
|
|
200
216
|
withHandles={withHandles}
|
|
@@ -206,6 +222,7 @@ function PlainGridSplit({
|
|
|
206
222
|
|
|
207
223
|
function PersistentGridSplit({
|
|
208
224
|
node,
|
|
225
|
+
scope,
|
|
209
226
|
storageKey,
|
|
210
227
|
disabled,
|
|
211
228
|
withHandles,
|
|
@@ -219,7 +236,7 @@ function PersistentGridSplit({
|
|
|
219
236
|
});
|
|
220
237
|
return (
|
|
221
238
|
<Group
|
|
222
|
-
id={node.id}
|
|
239
|
+
id={`${scope}:${node.id}`}
|
|
223
240
|
orientation={node.direction}
|
|
224
241
|
defaultLayout={defaultLayout}
|
|
225
242
|
onLayoutChanged={onLayoutChanged}
|
|
@@ -232,6 +249,7 @@ function PersistentGridSplit({
|
|
|
232
249
|
>
|
|
233
250
|
<GridChildren
|
|
234
251
|
node={node}
|
|
252
|
+
scope={scope}
|
|
235
253
|
storageKey={storageKey}
|
|
236
254
|
disabled={disabled}
|
|
237
255
|
withHandles={withHandles}
|
|
@@ -243,6 +261,7 @@ function PersistentGridSplit({
|
|
|
243
261
|
|
|
244
262
|
function GridChildren({
|
|
245
263
|
node,
|
|
264
|
+
scope,
|
|
246
265
|
storageKey,
|
|
247
266
|
disabled,
|
|
248
267
|
withHandles,
|
|
@@ -256,6 +275,7 @@ function GridChildren({
|
|
|
256
275
|
<GridCell
|
|
257
276
|
key={child.id}
|
|
258
277
|
child={child}
|
|
278
|
+
scope={scope}
|
|
259
279
|
direction={node.direction}
|
|
260
280
|
storageKey={storageKey}
|
|
261
281
|
disabled={disabled}
|
|
@@ -270,6 +290,7 @@ function GridChildren({
|
|
|
270
290
|
|
|
271
291
|
interface GridCellProps {
|
|
272
292
|
child: PanelGridNode;
|
|
293
|
+
scope: string;
|
|
273
294
|
direction: 'horizontal' | 'vertical';
|
|
274
295
|
storageKey: string | undefined;
|
|
275
296
|
disabled: boolean | undefined;
|
|
@@ -280,6 +301,7 @@ interface GridCellProps {
|
|
|
280
301
|
|
|
281
302
|
function GridCell({
|
|
282
303
|
child,
|
|
304
|
+
scope,
|
|
283
305
|
direction,
|
|
284
306
|
storageKey,
|
|
285
307
|
disabled,
|
|
@@ -308,6 +330,7 @@ function GridCell({
|
|
|
308
330
|
{isSplit(child) ? (
|
|
309
331
|
<GridSplit
|
|
310
332
|
node={child}
|
|
333
|
+
scope={scope}
|
|
311
334
|
storageKey={storageKey}
|
|
312
335
|
disabled={disabled}
|
|
313
336
|
withHandles={withHandles}
|
|
@@ -32,6 +32,23 @@ describe('SplitPane', () => {
|
|
|
32
32
|
expect(getByText('Panel C')).toBeTruthy();
|
|
33
33
|
});
|
|
34
34
|
|
|
35
|
+
// 🔴 forge task 3981: every SplitPane registered its group as `'root'`, and react-resizable-panels
|
|
36
|
+
// keys groups by id across the document — two on one page heard each other's layouts and threw
|
|
37
|
+
// `toFixed` of undefined out of a ResizeObserver (the kitchen sink's `test:browser:smoke`), and the
|
|
38
|
+
// page carried a second `id="root"` beside the app's mount node.
|
|
39
|
+
test('two SplitPanes on one page register distinct groups, and neither is id="root"', () => {
|
|
40
|
+
const { container } = render(
|
|
41
|
+
<>
|
|
42
|
+
<SplitPane panels={TWO_PANELS} />
|
|
43
|
+
<SplitPane panels={THREE_PANELS} />
|
|
44
|
+
</>,
|
|
45
|
+
);
|
|
46
|
+
const ids = [...container.querySelectorAll('[data-group]')].map((g) => g.id);
|
|
47
|
+
expect(ids).toHaveLength(2);
|
|
48
|
+
expect(new Set(ids).size).toBe(2);
|
|
49
|
+
expect(container.querySelector('#root')).toBeNull();
|
|
50
|
+
});
|
|
51
|
+
|
|
35
52
|
test('horizontal layout: Group gets flex-row class', () => {
|
|
36
53
|
const { container } = render(<SplitPane panels={TWO_PANELS} />);
|
|
37
54
|
const group = container.querySelector('[data-group]');
|
|
@@ -462,6 +462,12 @@ export interface DenseGalleryDetailProps {
|
|
|
462
462
|
*/
|
|
463
463
|
const STAGE_SHARE = 0.58;
|
|
464
464
|
|
|
465
|
+
/**
|
|
466
|
+
* The shortest a PINNED frame is capped to, however little the window leaves it: a player's
|
|
467
|
+
* own control bar is most of this, and a frame shorter than its controls shows neither.
|
|
468
|
+
*/
|
|
469
|
+
const PINNED_STAGE_FLOOR_PX = 96;
|
|
470
|
+
|
|
465
471
|
/** The selected/detail view: a stage on top, titlebar + optional rail, related grid below. */
|
|
466
472
|
export function DenseGalleryDetail({
|
|
467
473
|
stage,
|
|
@@ -531,6 +537,7 @@ export function DenseGalleryDetail({
|
|
|
531
537
|
if (!watchEl || typeof ResizeObserver === 'undefined') return;
|
|
532
538
|
const host = watchEl.parentElement ?? watchEl;
|
|
533
539
|
let last = '';
|
|
540
|
+
let lastPin: string | null = null;
|
|
534
541
|
const apply = () => {
|
|
535
542
|
const available = host.clientHeight;
|
|
536
543
|
if (!available) return; // unmeasurable — the stylesheet's default stands
|
|
@@ -591,9 +598,52 @@ export function DenseGalleryDetail({
|
|
|
591
598
|
// Beside, the frame is measured against the SCROLLER itself: its parent also holds the
|
|
592
599
|
// app's page header, and the whole point is that the picture fits the scroller's height.
|
|
593
600
|
// Loop-free — the scroller's box is its parent's layout, not its content's.
|
|
601
|
+
/*
|
|
602
|
+
* 🔴 PINNED, the frame is capped so the whole band fits under the band's own ceiling.
|
|
603
|
+
*
|
|
604
|
+
* Owner, 2026-10-29, collections: *"I used the pin on a large video window and could no
|
|
605
|
+
* longer see the toolstrip or video controls until I used command + minus key to shrink
|
|
606
|
+
* the screen size to around 70%. It should keep the controls and tool strip visible at
|
|
607
|
+
* all sizes."* Pinned, `.cbgd-watch-top` is sticky with a `max-height` and clips what
|
|
608
|
+
* overflows it — the stylesheet's way of keeping files visible under it. A frame sized as
|
|
609
|
+
* if unpinned (a drag reaches 86% of the scroller) plus the resize rail and the titlebar
|
|
610
|
+
* ran past that ceiling, and the clip took the bottom of the picture, which is where the
|
|
611
|
+
* player's control bar is, and the titlebar under it.
|
|
612
|
+
*
|
|
613
|
+
* So the ceiling is READ from the stylesheet (one number, kept there) and the frame may
|
|
614
|
+
* take what the chrome leaves of it: `--cbgd-stage-pin`, which caps the dragged height
|
|
615
|
+
* below and the fit here. The chrome is measured from the region's top edge to the
|
|
616
|
+
* titlebar's bottom, never as the region's own height: clipped, that box is the ceiling,
|
|
617
|
+
* not its content. Loop-free for the reason the fit is — shrinking the frame moves the
|
|
618
|
+
* titlebar up by exactly as much. `e2e/pinned-stage.spec.ts` drags it tall and measures.
|
|
619
|
+
*/
|
|
620
|
+
const titlebar = watchEl.querySelector('.cbgd-watch-titlebar');
|
|
621
|
+
const stackedChromePx =
|
|
622
|
+
top && frame && titlebar && topStyle
|
|
623
|
+
? Math.ceil(
|
|
624
|
+
titlebar.getBoundingClientRect().bottom -
|
|
625
|
+
top.getBoundingClientRect().top -
|
|
626
|
+
frame.getBoundingClientRect().height +
|
|
627
|
+
Number.parseFloat(topStyle.paddingBottom),
|
|
628
|
+
)
|
|
629
|
+
: chromePx;
|
|
630
|
+
// `none` when unpinned or full-window (`.cbgd-watch-sticky.cbgd-watch-full`), which reads NaN:
|
|
631
|
+
// no pin. Full window resizes this scroller, so the observer re-reads it either way.
|
|
632
|
+
const ceilingPx = sticky && topStyle ? Number.parseFloat(topStyle.maxHeight) : Number.NaN;
|
|
633
|
+
const pinChromePx = beside ? chromePx : stackedChromePx;
|
|
634
|
+
const pin = Number.isFinite(ceilingPx)
|
|
635
|
+
? `${Math.max(PINNED_STAGE_FLOOR_PX, Math.floor(ceilingPx - pinChromePx))}px`
|
|
636
|
+
: '';
|
|
637
|
+
if (pin !== lastPin) {
|
|
638
|
+
lastPin = pin;
|
|
639
|
+
if (pin) watchEl.style.setProperty('--cbgd-stage-pin', pin);
|
|
640
|
+
else watchEl.style.removeProperty('--cbgd-stage-pin');
|
|
641
|
+
}
|
|
642
|
+
// Clipped, the region's box under-reads the chrome; the stacked measure does not.
|
|
643
|
+
const fitChromePx = beside ? chromePx : chromePx > stackedChromePx ? chromePx : stackedChromePx;
|
|
594
644
|
const room = beside ? watchEl.clientHeight : available;
|
|
595
|
-
const usable = room >
|
|
596
|
-
const fit = `min(${Math.round(usable * share)}px, var(--cbgd-stage-default))`;
|
|
645
|
+
const usable = room > fitChromePx ? room - fitChromePx : 0;
|
|
646
|
+
const fit = `min(${Math.round(usable * share)}px, var(--cbgd-stage-default)${pin ? `, ${pin}` : ''})`;
|
|
597
647
|
if (fit === last) return;
|
|
598
648
|
last = fit;
|
|
599
649
|
watchEl.style.setProperty('--cbgd-stage-fit', fit);
|
|
@@ -601,9 +651,12 @@ export function DenseGalleryDetail({
|
|
|
601
651
|
const observer = new ResizeObserver(apply);
|
|
602
652
|
observer.observe(host);
|
|
603
653
|
if (host !== watchEl) observer.observe(watchEl);
|
|
654
|
+
// The titlebar too: its actions wrap with the width, and that is chrome the pin subtracts.
|
|
655
|
+
const titlebarEl = watchEl.querySelector('.cbgd-watch-titlebar');
|
|
656
|
+
if (titlebarEl) observer.observe(titlebarEl);
|
|
604
657
|
apply();
|
|
605
658
|
return () => observer.disconnect();
|
|
606
|
-
}, [watchEl]);
|
|
659
|
+
}, [watchEl, sticky]);
|
|
607
660
|
/*
|
|
608
661
|
* 🔴 Full-stage means FULL WINDOW — the browser window, not the plugin and not the screen.
|
|
609
662
|
*
|
|
@@ -710,7 +763,13 @@ export function DenseGalleryDetail({
|
|
|
710
763
|
frameEl,
|
|
711
764
|
});
|
|
712
765
|
|
|
713
|
-
const
|
|
766
|
+
const chosenStageHeight = dragHeight !== null ? `${dragHeight}px` : stageHeight;
|
|
767
|
+
// Pinned, a chosen height is still the height — up to what the pinned band can show (see
|
|
768
|
+
// `--cbgd-stage-pin` in the fit above). Unmeasured, the fallback is the height itself.
|
|
769
|
+
const effectiveStageHeight =
|
|
770
|
+
chosenStageHeight && sticky && !fullStage
|
|
771
|
+
? `min(${chosenStageHeight}, var(--cbgd-stage-pin, ${chosenStageHeight}))`
|
|
772
|
+
: chosenStageHeight;
|
|
714
773
|
|
|
715
774
|
/*
|
|
716
775
|
* 🔴 On a phone the action row is ONE line, and what does not fit FOLDS behind a toggle.
|
|
@@ -617,13 +617,20 @@
|
|
|
617
617
|
line-height: 1;
|
|
618
618
|
}
|
|
619
619
|
|
|
620
|
-
/* Opt-in: pin the top region while the "More" grid scrolls under it.
|
|
620
|
+
/* Opt-in: pin the top region while the "More" grid scrolls under it.
|
|
621
|
+
🔴 `max-height` is the band's CEILING, and `DenseGalleryDetail` reads it: pinned, the frame is
|
|
622
|
+
capped at what the chrome leaves of it (`--cbgd-stage-pin`), so nothing is clipped — owner,
|
|
623
|
+
2026-10-29: *"could no longer see the toolstrip or video controls"* (`e2e/pinned-stage.spec.ts`).
|
|
624
|
+
🔴 `flex-shrink: 0` for the same report: `overflow: hidden` drops a flex item's automatic
|
|
625
|
+
minimum to 0, so in a short scroller the band — not `.cbgd-related`'s 160px floor — gave way,
|
|
626
|
+
and the cut took the titlebar. The scroller scrolls instead. */
|
|
621
627
|
.cbgd-watch-sticky .cbgd-watch-top {
|
|
622
628
|
position: sticky;
|
|
623
629
|
top: 0;
|
|
624
630
|
/* Sticky pinned region → the sticky band token (06 §1), not a raw literal. */
|
|
625
631
|
z-index: var(--z-sticky);
|
|
626
632
|
max-height: 70vh;
|
|
633
|
+
flex-shrink: 0;
|
|
627
634
|
overflow: hidden;
|
|
628
635
|
background: var(--background);
|
|
629
636
|
}
|
package/src/verifyGraph.spec.ts
CHANGED
|
@@ -40,8 +40,18 @@ interface Stage {
|
|
|
40
40
|
why?: string;
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
-
|
|
44
|
-
|
|
43
|
+
const GATE = (pkg as { gate?: { stages?: Stage[]; deferred?: Stage[] } }).gate;
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* The declared graph, read as data — BOTH halves. There is no import of the scheduler to drift from.
|
|
47
|
+
*
|
|
48
|
+
* 🔴 Since 2026-10-29 (forge task 3981) `e2e` sits in `gate.deferred`: plain `verify` runs `stages`
|
|
49
|
+
* and the one `test:browser:smoke` spec, while `verify --full` — the queue's `suite` job after
|
|
50
|
+
* landing — and `--force` run the deferred half too. Moving a stage there is not removing it, so the
|
|
51
|
+
* stage-set floor below reads both halves; what it must never be is in NEITHER.
|
|
52
|
+
*/
|
|
53
|
+
const STAGES: readonly Stage[] = [...(GATE?.stages ?? []), ...(GATE?.deferred ?? [])];
|
|
54
|
+
const DEFERRED: readonly string[] = (GATE?.deferred ?? []).map((s) => s.script);
|
|
45
55
|
|
|
46
56
|
/**
|
|
47
57
|
* What `verify` ran before it became a graph, expanded to the leaf scripts.
|
|
@@ -118,6 +128,18 @@ describe('the verify graph', () => {
|
|
|
118
128
|
// never let them be replaced. `--force` is the re-roll.
|
|
119
129
|
expect(pkg.scripts.prepublishOnly).toInclude('--force');
|
|
120
130
|
});
|
|
131
|
+
|
|
132
|
+
it('🔴 e2e is deferred, never dropped — and a publish still runs it', () => {
|
|
133
|
+
// `$FORGE/tools/gate.ts` → `runnable(spec, full)`: `--force` implies `--full`, which is the
|
|
134
|
+
// deferred half joining the graph. So the `--force` above is also what makes a publish run
|
|
135
|
+
// `e2e`; this pins that the suite is in the half `--force` reaches, and that `verify` keeps
|
|
136
|
+
// the one browser proof check-gate-graph rule 9 asks of a repo deferring its browser suite.
|
|
137
|
+
expect(DEFERRED).toContain('e2e');
|
|
138
|
+
expect(pkg.scripts.gate).not.toInclude('--full');
|
|
139
|
+
const smoke = (GATE?.stages ?? []).find((s) => s.script === 'test:browser:smoke');
|
|
140
|
+
expect(smoke, '`verify` must keep `test:browser:smoke` in `stages`').toBeTruthy();
|
|
141
|
+
expect((pkg.scripts as Record<string, string | undefined>)['test:browser:smoke']).toInclude('smoke.spec.ts');
|
|
142
|
+
});
|
|
121
143
|
});
|
|
122
144
|
|
|
123
145
|
describe('the two edges the graph rests on', () => {
|
|
@@ -126,7 +148,7 @@ describe('the two edges the graph rests on', () => {
|
|
|
126
148
|
// stylesStaticMatches.spec.ts and stylesUtilitiesMatches.spec.ts assert those exact files
|
|
127
149
|
// are current, and the demo bundle e2e drives is compiled from them. Any of those three
|
|
128
150
|
// running beside the generators is a writer racing a reader.
|
|
129
|
-
for (const script of ['build', 'test', 'e2e']) {
|
|
151
|
+
for (const script of ['build', 'test', 'e2e', 'test:browser:smoke']) {
|
|
130
152
|
const stage = STAGES.find((s) => s.script === script);
|
|
131
153
|
expect(stage?.needs, `\`${script}\` must wait for \`styles\``).toContain('styles');
|
|
132
154
|
// 🔴 And it must say WHY. An edge nobody can explain is an edge nobody can safely
|