@primer/react 38.6.0 → 38.6.1
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/CHANGELOG.md +6 -0
- package/dist/PageLayout/PageLayout-c092f3db.css +2 -0
- package/dist/PageLayout/PageLayout-c092f3db.css.map +1 -0
- package/dist/PageLayout/PageLayout.d.ts +1 -12
- package/dist/PageLayout/PageLayout.d.ts.map +1 -1
- package/dist/PageLayout/PageLayout.js +502 -490
- package/dist/PageLayout/PageLayout.module.css.js +2 -2
- package/dist/PageLayout/usePaneWidth.d.ts +71 -0
- package/dist/PageLayout/usePaneWidth.d.ts.map +1 -0
- package/dist/PageLayout/usePaneWidth.js +283 -0
- package/dist/PageLayout/usePaneWidth.test.d.ts +2 -0
- package/dist/PageLayout/usePaneWidth.test.d.ts.map +1 -0
- package/package.json +1 -1
- package/dist/PageLayout/PageLayout-28a244f7.css +0 -2
- package/dist/PageLayout/PageLayout-28a244f7.css.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import './PageLayout-
|
|
1
|
+
import './PageLayout-c092f3db.css';
|
|
2
2
|
|
|
3
|
-
var classes = {"PageLayoutRoot":"prc-PageLayout-PageLayoutRoot--KH-d","PageLayoutWrapper":"prc-PageLayout-PageLayoutWrapper-2BhU2","PageLayoutContent":"prc-PageLayout-PageLayoutContent-BneH9","HorizontalDivider":"prc-PageLayout-HorizontalDivider-JLVqp","VerticalDivider":"prc-PageLayout-VerticalDivider-9QRmK","Header":"prc-PageLayout-Header-0of-R","HeaderContent":"prc-PageLayout-HeaderContent-gdFfN","HeaderHorizontalDivider":"prc-PageLayout-HeaderHorizontalDivider-odAHl","ContentWrapper":"prc-PageLayout-ContentWrapper-gR9eG","Content":"prc-PageLayout-Content-xWL-A","PaneWrapper":"prc-PageLayout-PaneWrapper-pHPop","PaneVerticalDivider":"prc-PageLayout-PaneVerticalDivider-le57g","Pane":"prc-PageLayout-Pane-AyzHK","PaneHorizontalDivider":"prc-PageLayout-PaneHorizontalDivider-9tbnE","FooterWrapper":"prc-PageLayout-FooterWrapper-9cB8y","FooterHorizontalDivider":"prc-PageLayout-FooterHorizontalDivider-W-RaS","FooterContent":"prc-PageLayout-FooterContent-HUS0V","DraggableHandle":"prc-PageLayout-DraggableHandle-9s6B4"};
|
|
3
|
+
var classes = {"paneMaxWidthDiffBreakpoint":"1280","paneMaxWidthDiffDefault":"511","PageLayoutRoot":"prc-PageLayout-PageLayoutRoot--KH-d","PageLayoutWrapper":"prc-PageLayout-PageLayoutWrapper-2BhU2","PageLayoutContent":"prc-PageLayout-PageLayoutContent-BneH9","HorizontalDivider":"prc-PageLayout-HorizontalDivider-JLVqp","VerticalDivider":"prc-PageLayout-VerticalDivider-9QRmK","Header":"prc-PageLayout-Header-0of-R","HeaderContent":"prc-PageLayout-HeaderContent-gdFfN","HeaderHorizontalDivider":"prc-PageLayout-HeaderHorizontalDivider-odAHl","ContentWrapper":"prc-PageLayout-ContentWrapper-gR9eG","Content":"prc-PageLayout-Content-xWL-A","PaneWrapper":"prc-PageLayout-PaneWrapper-pHPop","PaneVerticalDivider":"prc-PageLayout-PaneVerticalDivider-le57g","Pane":"prc-PageLayout-Pane-AyzHK","PaneHorizontalDivider":"prc-PageLayout-PaneHorizontalDivider-9tbnE","FooterWrapper":"prc-PageLayout-FooterWrapper-9cB8y","FooterHorizontalDivider":"prc-PageLayout-FooterHorizontalDivider-W-RaS","FooterContent":"prc-PageLayout-FooterContent-HUS0V","DraggableHandle":"prc-PageLayout-DraggableHandle-9s6B4"};
|
|
4
4
|
|
|
5
5
|
export { classes as default };
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
type Measurement = `${number}px`;
|
|
3
|
+
export type CustomWidthOptions = {
|
|
4
|
+
min: Measurement;
|
|
5
|
+
default: Measurement;
|
|
6
|
+
max: Measurement;
|
|
7
|
+
};
|
|
8
|
+
export type PaneWidth = 'small' | 'medium' | 'large';
|
|
9
|
+
export type UsePaneWidthOptions = {
|
|
10
|
+
width: PaneWidth | CustomWidthOptions;
|
|
11
|
+
minWidth: number;
|
|
12
|
+
resizable: boolean;
|
|
13
|
+
widthStorageKey: string;
|
|
14
|
+
paneRef: React.RefObject<HTMLDivElement | null>;
|
|
15
|
+
handleRef: React.RefObject<HTMLDivElement | null>;
|
|
16
|
+
};
|
|
17
|
+
export type UsePaneWidthResult = {
|
|
18
|
+
/** Current width for React state (used in ARIA attributes) */
|
|
19
|
+
currentWidth: number;
|
|
20
|
+
/** Mutable ref tracking width during drag operations */
|
|
21
|
+
currentWidthRef: React.MutableRefObject<number>;
|
|
22
|
+
/** Minimum allowed pane width */
|
|
23
|
+
minPaneWidth: number;
|
|
24
|
+
/** Maximum allowed pane width (updates on viewport resize) */
|
|
25
|
+
maxPaneWidth: number;
|
|
26
|
+
/** Calculate current max width constraint */
|
|
27
|
+
getMaxPaneWidth: () => number;
|
|
28
|
+
/** Persist width to localStorage and sync React state */
|
|
29
|
+
saveWidth: (value: number) => void;
|
|
30
|
+
/** Reset to default width */
|
|
31
|
+
getDefaultWidth: () => number;
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Default value for --pane-max-width-diff CSS variable.
|
|
35
|
+
* Imported from CSS to ensure JS fallback matches the CSS default.
|
|
36
|
+
*/
|
|
37
|
+
export declare const DEFAULT_MAX_WIDTH_DIFF: number;
|
|
38
|
+
/**
|
|
39
|
+
* Default max pane width for SSR when viewport is unknown.
|
|
40
|
+
* Updated to actual value in layout effect before paint.
|
|
41
|
+
*/
|
|
42
|
+
export declare const SSR_DEFAULT_MAX_WIDTH = 600;
|
|
43
|
+
/**
|
|
44
|
+
* Pixel increment for keyboard arrow key resizing.
|
|
45
|
+
* @see https://github.com/github/accessibility/issues/5101#issuecomment-1822870655
|
|
46
|
+
*/
|
|
47
|
+
export declare const ARROW_KEY_STEP = 3;
|
|
48
|
+
/** Default widths for preset size options */
|
|
49
|
+
export declare const defaultPaneWidth: Record<PaneWidth, number>;
|
|
50
|
+
export declare const isCustomWidthOptions: (width: PaneWidth | CustomWidthOptions) => width is CustomWidthOptions;
|
|
51
|
+
export declare const isPaneWidth: (width: PaneWidth | CustomWidthOptions) => width is PaneWidth;
|
|
52
|
+
export declare const getDefaultPaneWidth: (w: PaneWidth | CustomWidthOptions) => number;
|
|
53
|
+
/**
|
|
54
|
+
* Gets the --pane-max-width-diff CSS variable value from a pane element.
|
|
55
|
+
* This value is set by CSS media queries and controls the max pane width constraint.
|
|
56
|
+
* Note: This calls getComputedStyle which forces layout - cache the result when possible.
|
|
57
|
+
*/
|
|
58
|
+
export declare function getPaneMaxWidthDiff(paneElement: HTMLElement | null): number;
|
|
59
|
+
export declare const updateAriaValues: (handle: HTMLElement | null, values: {
|
|
60
|
+
current?: number;
|
|
61
|
+
min?: number;
|
|
62
|
+
max?: number;
|
|
63
|
+
}) => void;
|
|
64
|
+
/**
|
|
65
|
+
* Manages pane width state with localStorage persistence and viewport constraints.
|
|
66
|
+
* Handles initialization from storage, clamping on viewport resize, and provides
|
|
67
|
+
* functions to save and reset width.
|
|
68
|
+
*/
|
|
69
|
+
export declare function usePaneWidth({ width, minWidth, resizable, widthStorageKey, paneRef, handleRef, }: UsePaneWidthOptions): UsePaneWidthResult;
|
|
70
|
+
export {};
|
|
71
|
+
//# sourceMappingURL=usePaneWidth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePaneWidth.d.ts","sourceRoot":"","sources":["../../src/PageLayout/usePaneWidth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAwB,MAAM,OAAO,CAAA;AAQ5C,KAAK,WAAW,GAAG,GAAG,MAAM,IAAI,CAAA;AAEhC,MAAM,MAAM,kBAAkB,GAAG;IAC/B,GAAG,EAAE,WAAW,CAAA;IAChB,OAAO,EAAE,WAAW,CAAA;IACpB,GAAG,EAAE,WAAW,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAA;AAEpD,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,EAAE,SAAS,GAAG,kBAAkB,CAAA;IACrC,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,OAAO,CAAA;IAClB,eAAe,EAAE,MAAM,CAAA;IACvB,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAA;IAC/C,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAA;CAClD,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,8DAA8D;IAC9D,YAAY,EAAE,MAAM,CAAA;IACpB,wDAAwD;IACxD,eAAe,EAAE,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAA;IAC/C,iCAAiC;IACjC,YAAY,EAAE,MAAM,CAAA;IACpB,8DAA8D;IAC9D,YAAY,EAAE,MAAM,CAAA;IACpB,6CAA6C;IAC7C,eAAe,EAAE,MAAM,MAAM,CAAA;IAC7B,yDAAyD;IACzD,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,6BAA6B;IAC7B,eAAe,EAAE,MAAM,MAAM,CAAA;CAC9B,CAAA;AAKD;;;GAGG;AACH,eAAO,MAAM,sBAAsB,QAA6C,CAAA;AAIhF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,MAAM,CAAA;AAExC;;;GAGG;AACH,eAAO,MAAM,cAAc,IAAI,CAAA;AAE/B,6CAA6C;AAC7C,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAyC,CAAA;AAKhG,eAAO,MAAM,oBAAoB,GAAI,OAAO,SAAS,GAAG,kBAAkB,KAAG,KAAK,IAAI,kBAGrF,CAAA;AAED,eAAO,MAAM,WAAW,GAAI,OAAO,SAAS,GAAG,kBAAkB,KAAG,KAAK,IAAI,SAE5E,CAAA;AAED,eAAO,MAAM,mBAAmB,GAAI,GAAG,SAAS,GAAG,kBAAkB,KAAG,MAOvE,CAAA;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI,GAAG,MAAM,CAI3E;AAID,eAAO,MAAM,gBAAgB,GAC3B,QAAQ,WAAW,GAAG,IAAI,EAC1B,QAAQ;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAC,SASvD,CAAA;AAKD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,QAAQ,EACR,SAAS,EACT,eAAe,EACf,OAAO,EACP,SAAS,GACV,EAAE,mBAAmB,GAAG,kBAAkB,CA8L1C"}
|
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
import React, { startTransition } from 'react';
|
|
2
|
+
import { canUseDOM } from '../utils/environment.js';
|
|
3
|
+
import useIsomorphicLayoutEffect from '../utils/useIsomorphicLayoutEffect.js';
|
|
4
|
+
import classes from './PageLayout.module.css.js';
|
|
5
|
+
|
|
6
|
+
// ----------------------------------------------------------------------------
|
|
7
|
+
// Types
|
|
8
|
+
|
|
9
|
+
// ----------------------------------------------------------------------------
|
|
10
|
+
// Constants
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Default value for --pane-max-width-diff CSS variable.
|
|
14
|
+
* Imported from CSS to ensure JS fallback matches the CSS default.
|
|
15
|
+
*/
|
|
16
|
+
const DEFAULT_MAX_WIDTH_DIFF = Number(classes.paneMaxWidthDiffDefault);
|
|
17
|
+
|
|
18
|
+
// --pane-max-width-diff changes at this breakpoint in PageLayout.module.css.
|
|
19
|
+
const DEFAULT_PANE_MAX_WIDTH_DIFF_BREAKPOINT = Number(classes.paneMaxWidthDiffBreakpoint);
|
|
20
|
+
/**
|
|
21
|
+
* Default max pane width for SSR when viewport is unknown.
|
|
22
|
+
* Updated to actual value in layout effect before paint.
|
|
23
|
+
*/
|
|
24
|
+
const SSR_DEFAULT_MAX_WIDTH = 600;
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Pixel increment for keyboard arrow key resizing.
|
|
28
|
+
* @see https://github.com/github/accessibility/issues/5101#issuecomment-1822870655
|
|
29
|
+
*/
|
|
30
|
+
const ARROW_KEY_STEP = 3;
|
|
31
|
+
|
|
32
|
+
/** Default widths for preset size options */
|
|
33
|
+
const defaultPaneWidth = {
|
|
34
|
+
small: 256,
|
|
35
|
+
medium: 296,
|
|
36
|
+
large: 320
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
// ----------------------------------------------------------------------------
|
|
40
|
+
// Helper functions
|
|
41
|
+
|
|
42
|
+
const isCustomWidthOptions = width => {
|
|
43
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
44
|
+
return width.default !== undefined;
|
|
45
|
+
};
|
|
46
|
+
const isPaneWidth = width => {
|
|
47
|
+
return ['small', 'medium', 'large'].includes(width);
|
|
48
|
+
};
|
|
49
|
+
const getDefaultPaneWidth = w => {
|
|
50
|
+
if (isPaneWidth(w)) {
|
|
51
|
+
return defaultPaneWidth[w];
|
|
52
|
+
} else if (isCustomWidthOptions(w)) {
|
|
53
|
+
return parseInt(w.default, 10);
|
|
54
|
+
}
|
|
55
|
+
return 0;
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Gets the --pane-max-width-diff CSS variable value from a pane element.
|
|
60
|
+
* This value is set by CSS media queries and controls the max pane width constraint.
|
|
61
|
+
* Note: This calls getComputedStyle which forces layout - cache the result when possible.
|
|
62
|
+
*/
|
|
63
|
+
function getPaneMaxWidthDiff(paneElement) {
|
|
64
|
+
if (!paneElement) return DEFAULT_MAX_WIDTH_DIFF;
|
|
65
|
+
const value = parseInt(getComputedStyle(paneElement).getPropertyValue('--pane-max-width-diff'), 10);
|
|
66
|
+
return value > 0 ? value : DEFAULT_MAX_WIDTH_DIFF;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// Helper to update ARIA slider attributes via direct DOM manipulation
|
|
70
|
+
// This avoids re-renders when values change during drag or on viewport resize
|
|
71
|
+
const updateAriaValues = (handle, values) => {
|
|
72
|
+
if (!handle) return;
|
|
73
|
+
if (values.min !== undefined) handle.setAttribute('aria-valuemin', String(values.min));
|
|
74
|
+
if (values.max !== undefined) handle.setAttribute('aria-valuemax', String(values.max));
|
|
75
|
+
if (values.current !== undefined) {
|
|
76
|
+
handle.setAttribute('aria-valuenow', String(values.current));
|
|
77
|
+
handle.setAttribute('aria-valuetext', `Pane width ${values.current} pixels`);
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
// ----------------------------------------------------------------------------
|
|
82
|
+
// Hook
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Manages pane width state with localStorage persistence and viewport constraints.
|
|
86
|
+
* Handles initialization from storage, clamping on viewport resize, and provides
|
|
87
|
+
* functions to save and reset width.
|
|
88
|
+
*/
|
|
89
|
+
function usePaneWidth({
|
|
90
|
+
width,
|
|
91
|
+
minWidth,
|
|
92
|
+
resizable,
|
|
93
|
+
widthStorageKey,
|
|
94
|
+
paneRef,
|
|
95
|
+
handleRef
|
|
96
|
+
}) {
|
|
97
|
+
// Derive constraints from width configuration
|
|
98
|
+
const isCustomWidth = isCustomWidthOptions(width);
|
|
99
|
+
const minPaneWidth = isCustomWidth ? parseInt(width.min, 10) : minWidth;
|
|
100
|
+
const customMaxWidth = isCustomWidth ? parseInt(width.max, 10) : null;
|
|
101
|
+
|
|
102
|
+
// Cache the CSS variable value to avoid getComputedStyle during drag (causes layout thrashing)
|
|
103
|
+
// Updated on mount and resize when breakpoints might change
|
|
104
|
+
const maxWidthDiffRef = React.useRef(DEFAULT_MAX_WIDTH_DIFF);
|
|
105
|
+
|
|
106
|
+
// Calculate max width constraint - for custom widths this is fixed, otherwise viewport-dependent
|
|
107
|
+
const getMaxPaneWidth = React.useCallback(() => {
|
|
108
|
+
if (customMaxWidth !== null) return customMaxWidth;
|
|
109
|
+
const viewportWidth = window.innerWidth;
|
|
110
|
+
return viewportWidth > 0 ? Math.max(minPaneWidth, viewportWidth - maxWidthDiffRef.current) : minPaneWidth;
|
|
111
|
+
}, [customMaxWidth, minPaneWidth]);
|
|
112
|
+
|
|
113
|
+
// --- State ---
|
|
114
|
+
// Current width for React renders (ARIA attributes). Updates go through saveWidth() or clamp on resize.
|
|
115
|
+
//
|
|
116
|
+
// NOTE: We read from localStorage during initial state to avoid a visible resize flicker
|
|
117
|
+
// when the stored width differs from the default. This causes a React hydration mismatch
|
|
118
|
+
// (server renders default width, client renders stored width), but we handle this with
|
|
119
|
+
// suppressHydrationWarning on the Pane element. The mismatch only affects the --pane-width
|
|
120
|
+
// CSS variable, not DOM structure or children.
|
|
121
|
+
const [currentWidth, setCurrentWidth] = React.useState(() => {
|
|
122
|
+
const defaultWidth = getDefaultPaneWidth(width);
|
|
123
|
+
if (!resizable || !canUseDOM) {
|
|
124
|
+
return defaultWidth;
|
|
125
|
+
}
|
|
126
|
+
try {
|
|
127
|
+
const storedWidth = localStorage.getItem(widthStorageKey);
|
|
128
|
+
if (storedWidth !== null) {
|
|
129
|
+
const parsed = Number(storedWidth);
|
|
130
|
+
if (!isNaN(parsed) && parsed > 0) {
|
|
131
|
+
return parsed;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
} catch {
|
|
135
|
+
// localStorage unavailable - keep default
|
|
136
|
+
}
|
|
137
|
+
return defaultWidth;
|
|
138
|
+
});
|
|
139
|
+
// Mutable ref for drag operations - avoids re-renders on every pixel move
|
|
140
|
+
const currentWidthRef = React.useRef(currentWidth);
|
|
141
|
+
// Max width for ARIA - SSR uses custom max or a sensible default, updated on mount
|
|
142
|
+
const [maxPaneWidth, setMaxPaneWidth] = React.useState(() => customMaxWidth !== null && customMaxWidth !== void 0 ? customMaxWidth : SSR_DEFAULT_MAX_WIDTH);
|
|
143
|
+
|
|
144
|
+
// --- Callbacks ---
|
|
145
|
+
const getDefaultWidth = React.useCallback(() => getDefaultPaneWidth(width), [width]);
|
|
146
|
+
const saveWidth = React.useCallback(value => {
|
|
147
|
+
currentWidthRef.current = value;
|
|
148
|
+
setCurrentWidth(value);
|
|
149
|
+
try {
|
|
150
|
+
localStorage.setItem(widthStorageKey, value.toString());
|
|
151
|
+
} catch {
|
|
152
|
+
// Ignore write errors (private browsing, quota exceeded, etc.)
|
|
153
|
+
}
|
|
154
|
+
}, [widthStorageKey]);
|
|
155
|
+
|
|
156
|
+
// --- Effects ---
|
|
157
|
+
// Stable ref to getMaxPaneWidth for use in resize handler without re-subscribing
|
|
158
|
+
const getMaxPaneWidthRef = React.useRef(getMaxPaneWidth);
|
|
159
|
+
useIsomorphicLayoutEffect(() => {
|
|
160
|
+
getMaxPaneWidthRef.current = getMaxPaneWidth;
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
// Update CSS variable, refs, and ARIA on mount and window resize.
|
|
164
|
+
// Strategy:
|
|
165
|
+
// 1. Throttled (16ms): Update --pane-max-width CSS variable for immediate visual clamp
|
|
166
|
+
// 2. Debounced (150ms): Sync refs, ARIA, and React state when resize stops
|
|
167
|
+
useIsomorphicLayoutEffect(() => {
|
|
168
|
+
var _paneRef$current4;
|
|
169
|
+
if (!resizable) return;
|
|
170
|
+
let lastViewportWidth = window.innerWidth;
|
|
171
|
+
|
|
172
|
+
// Quick CSS-only update for immediate visual feedback (throttled)
|
|
173
|
+
const updateCSSOnly = () => {
|
|
174
|
+
var _paneRef$current;
|
|
175
|
+
const actualMax = getMaxPaneWidthRef.current();
|
|
176
|
+
(_paneRef$current = paneRef.current) === null || _paneRef$current === void 0 ? void 0 : _paneRef$current.style.setProperty('--pane-max-width', `${actualMax}px`);
|
|
177
|
+
};
|
|
178
|
+
|
|
179
|
+
// Full sync of refs, ARIA, and state (debounced, runs when resize stops)
|
|
180
|
+
const syncAll = () => {
|
|
181
|
+
var _paneRef$current2;
|
|
182
|
+
const currentViewportWidth = window.innerWidth;
|
|
183
|
+
|
|
184
|
+
// Only call getComputedStyle if we crossed the breakpoint (expensive)
|
|
185
|
+
const crossedBreakpoint = lastViewportWidth < DEFAULT_PANE_MAX_WIDTH_DIFF_BREAKPOINT && currentViewportWidth >= DEFAULT_PANE_MAX_WIDTH_DIFF_BREAKPOINT || lastViewportWidth >= DEFAULT_PANE_MAX_WIDTH_DIFF_BREAKPOINT && currentViewportWidth < DEFAULT_PANE_MAX_WIDTH_DIFF_BREAKPOINT;
|
|
186
|
+
lastViewportWidth = currentViewportWidth;
|
|
187
|
+
if (crossedBreakpoint) {
|
|
188
|
+
maxWidthDiffRef.current = getPaneMaxWidthDiff(paneRef.current);
|
|
189
|
+
}
|
|
190
|
+
const actualMax_0 = getMaxPaneWidthRef.current();
|
|
191
|
+
|
|
192
|
+
// Update CSS variable for visual clamping (may already be set by throttled update)
|
|
193
|
+
(_paneRef$current2 = paneRef.current) === null || _paneRef$current2 === void 0 ? void 0 : _paneRef$current2.style.setProperty('--pane-max-width', `${actualMax_0}px`);
|
|
194
|
+
|
|
195
|
+
// Track if we clamped current width
|
|
196
|
+
const wasClamped = currentWidthRef.current > actualMax_0;
|
|
197
|
+
if (wasClamped) {
|
|
198
|
+
var _paneRef$current3;
|
|
199
|
+
currentWidthRef.current = actualMax_0;
|
|
200
|
+
(_paneRef$current3 = paneRef.current) === null || _paneRef$current3 === void 0 ? void 0 : _paneRef$current3.style.setProperty('--pane-width', `${actualMax_0}px`);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
// Update ARIA via DOM - cheap, no React re-render
|
|
204
|
+
updateAriaValues(handleRef.current, {
|
|
205
|
+
max: actualMax_0,
|
|
206
|
+
current: currentWidthRef.current
|
|
207
|
+
});
|
|
208
|
+
|
|
209
|
+
// Defer state updates so parent re-renders see accurate values
|
|
210
|
+
startTransition(() => {
|
|
211
|
+
setMaxPaneWidth(actualMax_0);
|
|
212
|
+
if (wasClamped) {
|
|
213
|
+
setCurrentWidth(actualMax_0);
|
|
214
|
+
}
|
|
215
|
+
});
|
|
216
|
+
};
|
|
217
|
+
|
|
218
|
+
// Initial calculation on mount
|
|
219
|
+
maxWidthDiffRef.current = getPaneMaxWidthDiff(paneRef.current);
|
|
220
|
+
const initialMax = getMaxPaneWidthRef.current();
|
|
221
|
+
setMaxPaneWidth(initialMax);
|
|
222
|
+
(_paneRef$current4 = paneRef.current) === null || _paneRef$current4 === void 0 ? void 0 : _paneRef$current4.style.setProperty('--pane-max-width', `${initialMax}px`);
|
|
223
|
+
updateAriaValues(handleRef.current, {
|
|
224
|
+
min: minPaneWidth,
|
|
225
|
+
max: initialMax,
|
|
226
|
+
current: currentWidthRef.current
|
|
227
|
+
});
|
|
228
|
+
|
|
229
|
+
// For custom widths, max is fixed - no need to listen to resize
|
|
230
|
+
if (customMaxWidth !== null) return;
|
|
231
|
+
|
|
232
|
+
// Throttle CSS updates (16ms ≈ 60fps), debounce full sync (150ms)
|
|
233
|
+
const THROTTLE_MS = 16;
|
|
234
|
+
const DEBOUNCE_MS = 150;
|
|
235
|
+
let rafId = null;
|
|
236
|
+
let debounceId = null;
|
|
237
|
+
let lastThrottleTime = 0;
|
|
238
|
+
const handleResize = () => {
|
|
239
|
+
const now = Date.now();
|
|
240
|
+
|
|
241
|
+
// Throttled CSS update for immediate visual feedback
|
|
242
|
+
if (now - lastThrottleTime >= THROTTLE_MS) {
|
|
243
|
+
lastThrottleTime = now;
|
|
244
|
+
updateCSSOnly();
|
|
245
|
+
} else if (rafId === null) {
|
|
246
|
+
// Schedule next frame if we're within throttle window
|
|
247
|
+
rafId = requestAnimationFrame(() => {
|
|
248
|
+
rafId = null;
|
|
249
|
+
lastThrottleTime = Date.now();
|
|
250
|
+
updateCSSOnly();
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
// Debounced full sync (refs, ARIA, state) when resize stops
|
|
255
|
+
if (debounceId !== null) {
|
|
256
|
+
clearTimeout(debounceId);
|
|
257
|
+
}
|
|
258
|
+
debounceId = setTimeout(() => {
|
|
259
|
+
debounceId = null;
|
|
260
|
+
syncAll();
|
|
261
|
+
}, DEBOUNCE_MS);
|
|
262
|
+
};
|
|
263
|
+
|
|
264
|
+
// eslint-disable-next-line github/prefer-observers -- Uses window resize events instead of ResizeObserver to avoid INP issues. ResizeObserver on document.documentElement fires on any content change (typing, etc), while window resize only fires on actual viewport changes.
|
|
265
|
+
window.addEventListener('resize', handleResize);
|
|
266
|
+
return () => {
|
|
267
|
+
if (rafId !== null) cancelAnimationFrame(rafId);
|
|
268
|
+
if (debounceId !== null) clearTimeout(debounceId);
|
|
269
|
+
window.removeEventListener('resize', handleResize);
|
|
270
|
+
};
|
|
271
|
+
}, [resizable, customMaxWidth, minPaneWidth, paneRef, handleRef]);
|
|
272
|
+
return {
|
|
273
|
+
currentWidth,
|
|
274
|
+
currentWidthRef,
|
|
275
|
+
minPaneWidth,
|
|
276
|
+
maxPaneWidth,
|
|
277
|
+
getMaxPaneWidth,
|
|
278
|
+
saveWidth,
|
|
279
|
+
getDefaultWidth
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
export { ARROW_KEY_STEP, DEFAULT_MAX_WIDTH_DIFF, SSR_DEFAULT_MAX_WIDTH, defaultPaneWidth, getDefaultPaneWidth, getPaneMaxWidthDiff, isCustomWidthOptions, isPaneWidth, updateAriaValues, usePaneWidth };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePaneWidth.test.d.ts","sourceRoot":"","sources":["../../src/PageLayout/usePaneWidth.test.ts"],"names":[],"mappings":""}
|
package/package.json
CHANGED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
body[data-page-layout-dragging=true]{cursor:col-resize}body[data-page-layout-dragging=true] *{-webkit-user-select:none;user-select:none}.prc-PageLayout-PageLayoutRoot--KH-d{--region-order-header:0;--region-order-pane-start:1;--region-order-content:2;--region-order-pane-end:3;--region-order-footer:4;--spacing-none:0;--spacing-condensed:var(--base-size-16,1rem);--spacing-normal:var(--base-size-16,1rem)}@media screen and (min-width:1012px){.prc-PageLayout-PageLayoutRoot--KH-d{--spacing-normal:var(--base-size-24,1.5rem)}}.prc-PageLayout-PageLayoutRoot--KH-d{--pane-width-small:100%;--pane-width-medium:100%;--pane-width-large:100%;--pane-max-width-diff:511px}@media screen and (min-width:768px){.prc-PageLayout-PageLayoutRoot--KH-d{--pane-width-small:240px;--pane-width-medium:256px;--pane-width-large:256px}}@media screen and (min-width:1012px){.prc-PageLayout-PageLayoutRoot--KH-d{--pane-width-small:256px;--pane-width-medium:296px;--pane-width-large:320px}}@media screen and (min-width:1280px){.prc-PageLayout-PageLayoutRoot--KH-d{--pane-max-width-diff:959px}}.prc-PageLayout-PageLayoutRoot--KH-d{--spacing:0;--spacing-row:0;--spacing-column:0;--spacing-divider:0;--offset-header:0;--pane-width:0;--pane-min-width:0;--pane-max-width:0;--pane-width-custom:0;--pane-width-size:0;padding:var(--spacing)}.prc-PageLayout-PageLayoutWrapper-2BhU2{display:flex;flex-wrap:wrap;height:100%;margin-left:auto;margin-right:auto;width:100%}.prc-PageLayout-PageLayoutWrapper-2BhU2:where([data-width=medium]){max-width:768px}.prc-PageLayout-PageLayoutWrapper-2BhU2:where([data-width=large]){max-width:1012px}.prc-PageLayout-PageLayoutWrapper-2BhU2:where([data-width=full]){max-width:100%}.prc-PageLayout-PageLayoutWrapper-2BhU2:where([data-width=xlarge]){max-width:1280px}.prc-PageLayout-PageLayoutContent-BneH9{display:flex;flex:1 1 100%;flex-wrap:wrap;max-width:100%}.prc-PageLayout-HorizontalDivider-JLVqp{margin-left:calc(var(--spacing-divider)*-1);margin-right:calc(var(--spacing-divider)*-1)}.prc-PageLayout-HorizontalDivider-JLVqp:where([data-variant=none]){display:none}.prc-PageLayout-HorizontalDivider-JLVqp:where([data-variant=line]){background-color:var(--borderColor-default,var(--color-border-default));display:block;height:1px}.prc-PageLayout-HorizontalDivider-JLVqp:where([data-variant=filled]){background-color:var(--bgColor-inset,var(--color-canvas-inset));box-shadow:inset 0 -1px 0 0 var(--borderColor-default,var(--color-border-default)),inset 0 1px 0 0 var(--borderColor-default,var(--color-border-default));display:block;height:var(--base-size-8,.5rem)}@media (max-width:calc(48rem - 0.02px)){.prc-PageLayout-HorizontalDivider-JLVqp:where([data-variant-narrow=none]){display:none}.prc-PageLayout-HorizontalDivider-JLVqp:where([data-variant-narrow=line]){background-color:var(--borderColor-default,var(--color-border-default));display:block;height:1px}.prc-PageLayout-HorizontalDivider-JLVqp:where([data-variant-narrow=filled]){background-color:var(--bgColor-inset,var(--color-canvas-inset));box-shadow:inset 0 -1px 0 0 var(--borderColor-default,var(--color-border-default)),inset 0 1px 0 0 var(--borderColor-default,var(--color-border-default));display:block;height:var(--base-size-8,.5rem)}}@media (min-width:48rem){.prc-PageLayout-HorizontalDivider-JLVqp:where([data-variant-regular=none]){display:none}.prc-PageLayout-HorizontalDivider-JLVqp:where([data-variant-regular=line]){background-color:var(--borderColor-default,var(--color-border-default));display:block;height:1px}.prc-PageLayout-HorizontalDivider-JLVqp:where([data-variant-regular=filled]){background-color:var(--bgColor-inset,var(--color-canvas-inset));box-shadow:inset 0 -1px 0 0 var(--borderColor-default,var(--color-border-default)),inset 0 1px 0 0 var(--borderColor-default,var(--color-border-default));display:block;height:var(--base-size-8,.5rem)}}@media (min-width:87.5rem){.prc-PageLayout-HorizontalDivider-JLVqp:where([data-variant-wide=none]){display:none}.prc-PageLayout-HorizontalDivider-JLVqp:where([data-variant-wide=line]){background-color:var(--borderColor-default,var(--color-border-default));display:block;height:1px}.prc-PageLayout-HorizontalDivider-JLVqp:where([data-variant-wide=filled]){background-color:var(--bgColor-inset,var(--color-canvas-inset));box-shadow:inset 0 -1px 0 0 var(--borderColor-default,var(--color-border-default)),inset 0 1px 0 0 var(--borderColor-default,var(--color-border-default));display:block;height:var(--base-size-8,.5rem)}}@media screen and (min-width:768px){.prc-PageLayout-HorizontalDivider-JLVqp{margin-left:0!important;margin-right:0!important}}.prc-PageLayout-VerticalDivider-9QRmK{height:100%;position:relative}.prc-PageLayout-VerticalDivider-9QRmK:where([data-variant=none]){display:none}.prc-PageLayout-VerticalDivider-9QRmK:where([data-variant=line]){background-color:var(--borderColor-default,var(--color-border-default));display:block;width:1px}.prc-PageLayout-VerticalDivider-9QRmK:where([data-variant=filled]){background-color:var(--bgColor-inset,var(--color-canvas-inset));box-shadow:inset -1px 0 0 0 var(--borderColor-default,var(--color-border-default)),inset 1px 0 0 0 var(--borderColor-default,var(--color-border-default));display:block;width:var(--base-size-8,.5rem)}@media (max-width:calc(48rem - 0.02px)){.prc-PageLayout-VerticalDivider-9QRmK:where([data-variant-narrow=none]){display:none}.prc-PageLayout-VerticalDivider-9QRmK:where([data-variant-narrow=line]){background-color:var(--borderColor-default,var(--color-border-default));display:block;width:1px}.prc-PageLayout-VerticalDivider-9QRmK:where([data-variant-narrow=filled]){background-color:var(--bgColor-inset,var(--color-canvas-inset));box-shadow:inset -1px 0 0 0 var(--borderColor-default,var(--color-border-default)),inset 1px 0 0 0 var(--borderColor-default,var(--color-border-default));display:block;width:var(--base-size-8,.5rem)}}@media (min-width:48rem){.prc-PageLayout-VerticalDivider-9QRmK:where([data-variant-regular=none]){display:none}.prc-PageLayout-VerticalDivider-9QRmK:where([data-variant-regular=line]){background-color:var(--borderColor-default,var(--color-border-default));display:block;width:1px}.prc-PageLayout-VerticalDivider-9QRmK:where([data-variant-regular=filled]){background-color:var(--bgColor-inset,var(--color-canvas-inset));box-shadow:inset -1px 0 0 0 var(--borderColor-default,var(--color-border-default)),inset 1px 0 0 0 var(--borderColor-default,var(--color-border-default));display:block;width:var(--base-size-8,.5rem)}}@media (min-width:87.5rem){.prc-PageLayout-VerticalDivider-9QRmK:where([data-variant-wide=none]){display:none}.prc-PageLayout-VerticalDivider-9QRmK:where([data-variant-wide=line]){background-color:var(--borderColor-default,var(--color-border-default));display:block;width:1px}.prc-PageLayout-VerticalDivider-9QRmK:where([data-variant-wide=filled]){background-color:var(--bgColor-inset,var(--color-canvas-inset));box-shadow:inset -1px 0 0 0 var(--borderColor-default,var(--color-border-default)),inset 1px 0 0 0 var(--borderColor-default,var(--color-border-default));display:block;width:var(--base-size-8,.5rem)}}.prc-PageLayout-Header-0of-R{margin-bottom:var(--spacing);width:100%}.prc-PageLayout-Header-0of-R:where([data-hidden=true]){display:none}@media (max-width:calc(48rem - 0.02px)){.prc-PageLayout-Header-0of-R:where([data-hidden-narrow=true]){display:none}}@media (min-width:48rem){.prc-PageLayout-Header-0of-R:where([data-hidden-regular=true]){display:none}}@media (min-width:87.5rem){.prc-PageLayout-Header-0of-R:where([data-hidden-wide=true]){display:none}}.prc-PageLayout-HeaderContent-gdFfN{padding:var(--spacing)}.prc-PageLayout-HeaderHorizontalDivider-odAHl{margin-top:var(--spacing)}.prc-PageLayout-ContentWrapper-gR9eG{display:flex;flex-basis:0;flex-direction:column;flex-grow:1;flex-shrink:1;min-width:1px;order:var(--region-order-content)}.prc-PageLayout-ContentWrapper-gR9eG:where([data-is-hidden=true]){display:none}@media (max-width:calc(48rem - 0.02px)){.prc-PageLayout-ContentWrapper-gR9eG:where([data-is-hidden-narrow=true]){display:none}}@media (min-width:48rem){.prc-PageLayout-ContentWrapper-gR9eG:where([data-is-hidden-regular=true]){display:none}}@media (min-width:87.5rem){.prc-PageLayout-ContentWrapper-gR9eG:where([data-is-hidden-wide=true]){display:none}}.prc-PageLayout-Content-xWL-A{flex-grow:1;margin-left:auto;margin-right:auto;padding:var(--spacing);width:100%}.prc-PageLayout-Content-xWL-A:where([data-width=medium]){max-width:768px}.prc-PageLayout-Content-xWL-A:where([data-width=large]){max-width:1012px}.prc-PageLayout-Content-xWL-A:where([data-width=full]){max-width:100%}.prc-PageLayout-Content-xWL-A:where([data-width=xlarge]){max-width:1280px}.prc-PageLayout-PaneWrapper-pHPop{display:flex;margin-left:0;margin-right:0;width:100%}.prc-PageLayout-PaneWrapper-pHPop:where([data-is-hidden=true]){display:none}@media (max-width:calc(48rem - 0.02px)){.prc-PageLayout-PaneWrapper-pHPop:where([data-is-hidden-narrow=true]){display:none}.prc-PageLayout-PaneWrapper-pHPop:where([data-position-narrow=end]){flex-direction:column;margin-top:var(--spacing-row);order:var(--region-order-pane-end)}.prc-PageLayout-PaneWrapper-pHPop:where([data-position-narrow=start]){flex-direction:column-reverse;margin-bottom:var(--spacing-row);order:var(--region-order-pane-start)}}@media (max-width:calc(48rem - 0.02px)){.prc-PageLayout-PaneWrapper-pHPop:where([data-position=end]){flex-direction:column;margin-top:var(--spacing-row);order:var(--region-order-pane-end)}.prc-PageLayout-PaneWrapper-pHPop:where([data-position=start]){flex-direction:column-reverse;margin-bottom:var(--spacing-row);order:var(--region-order-pane-start)}}@media screen and (min-width:768px){.prc-PageLayout-PaneWrapper-pHPop:where([data-is-hidden-regular=true]){display:none}.prc-PageLayout-PaneWrapper-pHPop{margin-bottom:0!important;margin-top:0!important;width:auto}.prc-PageLayout-PaneWrapper-pHPop:where([data-sticky]){max-height:100vh;position:sticky;top:var(--offset-header)}.prc-PageLayout-PaneWrapper-pHPop:where([data-position=end]){flex-direction:row-reverse;margin-left:var(--spacing-column);order:var(--region-order-pane-end)}.prc-PageLayout-PaneWrapper-pHPop:where([data-position=start]){flex-direction:row;margin-right:var(--spacing-column);order:var(--region-order-pane-start)}.prc-PageLayout-PaneWrapper-pHPop:where([data-position-regular=end]){flex-direction:row-reverse;margin-left:var(--spacing-column);order:var(--region-order-pane-end)}.prc-PageLayout-PaneWrapper-pHPop:where([data-position-regular=start]){flex-direction:row;margin-right:var(--spacing-column);order:var(--region-order-pane-start)}}@media (min-width:87.5rem){.prc-PageLayout-PaneWrapper-pHPop:where([data-is-hidden-wide=true]){display:none}.prc-PageLayout-PaneWrapper-pHPop:where([data-position-wide=end]){flex-direction:row-reverse;margin-left:var(--spacing-column);order:var(--region-order-pane-end)}.prc-PageLayout-PaneWrapper-pHPop:where([data-position-wide=start]){flex-direction:row;margin-right:var(--spacing-column);order:var(--region-order-pane-start)}}.prc-PageLayout-PaneVerticalDivider-le57g:where([data-position=start]){margin-left:var(--spacing)}.prc-PageLayout-PaneVerticalDivider-le57g:where([data-position=end]){margin-right:var(--spacing)}@media (max-width:calc(48rem - 0.02px)){.prc-PageLayout-PaneVerticalDivider-le57g:where([data-position-narrow=start]){margin-left:var(--spacing);margin-right:0}.prc-PageLayout-PaneVerticalDivider-le57g:where([data-position-narrow=end]){margin-left:0;margin-right:var(--spacing)}}@media (min-width:48rem){.prc-PageLayout-PaneVerticalDivider-le57g:where([data-position-regular=start]){margin-left:var(--spacing);margin-right:0}.prc-PageLayout-PaneVerticalDivider-le57g:where([data-position-regular=end]){margin-left:0;margin-right:var(--spacing)}}@media (min-width:87.5rem){.prc-PageLayout-PaneVerticalDivider-le57g:where([data-position-wide=start]){margin-left:var(--spacing);margin-right:0}.prc-PageLayout-PaneVerticalDivider-le57g:where([data-position-wide=end]){margin-left:0;margin-right:var(--spacing)}}.prc-PageLayout-Pane-AyzHK{padding:var(--spacing);width:var(--pane-width-size)}@media screen and (min-width:768px){.prc-PageLayout-Pane-AyzHK{overflow:auto}}.prc-PageLayout-Pane-AyzHK:where([data-resizable]){width:100%}@media screen and (min-width:768px){.prc-PageLayout-Pane-AyzHK:where([data-resizable]){width:clamp(var(--pane-min-width),var(--pane-width),var(--pane-max-width))}}.prc-PageLayout-PaneHorizontalDivider-9tbnE:where([data-position=start]){margin-top:var(--spacing)}.prc-PageLayout-PaneHorizontalDivider-9tbnE:where([data-position=end]){margin-bottom:var(--spacing)}@media (max-width:calc(48rem - 0.02px)){.prc-PageLayout-PaneHorizontalDivider-9tbnE:where([data-position-narrow=start]){margin-bottom:0;margin-top:var(--spacing)}.prc-PageLayout-PaneHorizontalDivider-9tbnE:where([data-position-narrow=end]){margin-bottom:var(--spacing);margin-top:0}}@media (min-width:48rem){.prc-PageLayout-PaneHorizontalDivider-9tbnE:where([data-position-regular=start]){margin-bottom:0;margin-top:var(--spacing)}.prc-PageLayout-PaneHorizontalDivider-9tbnE:where([data-position-regular=end]){margin-bottom:var(--spacing);margin-top:0}}@media (min-width:87.5rem){.prc-PageLayout-PaneHorizontalDivider-9tbnE:where([data-position-wide=start]){margin-bottom:0;margin-top:var(--spacing)}.prc-PageLayout-PaneHorizontalDivider-9tbnE:where([data-position-wide=end]){margin-bottom:var(--spacing);margin-top:0}}.prc-PageLayout-FooterWrapper-9cB8y{margin-top:var(--spacing);order:var(--region-order-footer);width:100%}.prc-PageLayout-FooterWrapper-9cB8y:where([data-hidden=true]){display:none}@media (max-width:calc(48rem - 0.02px)){.prc-PageLayout-FooterWrapper-9cB8y:where([data-hidden-narrow=true]){display:none}}@media (min-width:48rem){.prc-PageLayout-FooterWrapper-9cB8y:where([data-hidden-regular=true]){display:none}}@media (min-width:87.5rem){.prc-PageLayout-FooterWrapper-9cB8y:where([data-hidden-wide=true]){display:none}}.prc-PageLayout-FooterHorizontalDivider-W-RaS{margin-bottom:var(--spacing)}.prc-PageLayout-FooterContent-HUS0V{padding:var(--spacing)}.prc-PageLayout-DraggableHandle-9s6B4{background-color:transparent;cursor:col-resize;inset:0 -2px;position:absolute;transition-delay:.1s}.prc-PageLayout-DraggableHandle-9s6B4:hover{background-color:var(--bgColor-neutral-muted,var(--color-neutral-subtle))}.prc-PageLayout-DraggableHandle-9s6B4[data-dragging=true],.prc-PageLayout-DraggableHandle-9s6B4[data-dragging=true]:hover{background-color:var(--bgColor-accent-emphasis,var(--color-accent-emphasis))}
|
|
2
|
-
/*# sourceMappingURL=PageLayout-28a244f7.css.map */
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/PageLayout/PageLayout.module.css.js"],"names":[],"mappings":"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","file":"PageLayout-28a244f7.css","sourcesContent":["/* Maintain resize cursor while dragging */\n/* stylelint-disable-next-line selector-no-qualifying-type */\nbody[data-page-layout-dragging='true'] {\n cursor: col-resize;\n}\n\n/* Disable text selection while dragging */\n/* stylelint-disable-next-line selector-no-qualifying-type */\nbody[data-page-layout-dragging='true'] * {\n user-select: none;\n}\n\n.PageLayoutRoot {\n /* Region Order */\n --region-order-header: 0;\n --region-order-pane-start: 1;\n --region-order-content: 2;\n --region-order-pane-end: 3;\n --region-order-footer: 4;\n\n /* Spacing Values */\n --spacing-none: 0;\n --spacing-condensed: var(--base-size-16);\n --spacing-normal: var(--base-size-16);\n\n @media screen and (min-width: 1012px) {\n --spacing-normal: var(--base-size-24);\n }\n\n /* Pane Width Values */\n --pane-width-small: 100%;\n --pane-width-medium: 100%;\n --pane-width-large: 100%;\n --pane-max-width-diff: 511px;\n\n @media screen and (min-width: 768px) {\n --pane-width-small: 240px;\n --pane-width-medium: 256px;\n --pane-width-large: 256px;\n }\n\n @media screen and (min-width: 1012px) {\n --pane-width-small: 256px;\n --pane-width-medium: 296px;\n --pane-width-large: 320px;\n }\n\n @media screen and (min-width: 1280px) {\n --pane-max-width-diff: 959px;\n }\n\n /* These following CSS variables are dynamic values that get overridden by styles passed in via props. */\n --spacing: 0;\n --spacing-row: 0;\n --spacing-column: 0;\n --spacing-divider: 0;\n --offset-header: 0;\n --pane-width: 0;\n --pane-min-width: 0;\n --pane-max-width: 0;\n --pane-width-custom: 0;\n --pane-width-size: 0;\n\n /* stylelint-disable-next-line primer/spacing */\n padding: var(--spacing);\n}\n\n.PageLayoutWrapper {\n display: flex;\n margin-right: auto;\n margin-left: auto;\n flex-wrap: wrap;\n /* the wrapper should match the Root's dimensions by default */\n width: 100%;\n height: 100%;\n\n &:where([data-width='medium']) {\n max-width: 768px;\n }\n\n &:where([data-width='large']) {\n max-width: 1012px;\n }\n\n &:where([data-width='full']) {\n max-width: 100%;\n }\n\n &:where([data-width='xlarge']) {\n max-width: 1280px;\n }\n}\n\n.PageLayoutContent {\n display: flex;\n flex: 1 1 100%;\n flex-wrap: wrap;\n max-width: 100%;\n}\n\n.HorizontalDivider {\n /* stylelint-disable-next-line primer/spacing */\n margin-right: calc(-1 * var(--spacing-divider));\n /* stylelint-disable-next-line primer/spacing */\n margin-left: calc(-1 * var(--spacing-divider));\n\n &:where([data-variant='none']) {\n display: none;\n }\n\n &:where([data-variant='line']) {\n display: block;\n height: 1px;\n /* stylelint-disable-next-line primer/colors */\n background-color: var(--borderColor-default);\n }\n\n &:where([data-variant='filled']) {\n display: block;\n height: var(--base-size-8);\n background-color: var(--bgColor-inset);\n box-shadow:\n /* stylelint-disable-next-line primer/box-shadow */\n inset 0 -1px 0 0 var(--borderColor-default),\n inset 0 1px 0 0 var(--borderColor-default);\n }\n\n /* Narrow viewport */\n @media (--viewportRange-narrow) {\n &:where([data-variant-narrow='none']) {\n display: none;\n }\n\n &:where([data-variant-narrow='line']) {\n display: block;\n height: 1px;\n /* stylelint-disable-next-line primer/colors */\n background-color: var(--borderColor-default);\n }\n\n &:where([data-variant-narrow='filled']) {\n display: block;\n height: var(--base-size-8);\n background-color: var(--bgColor-inset);\n box-shadow:\n /* stylelint-disable-next-line primer/box-shadow */\n inset 0 -1px 0 0 var(--borderColor-default),\n inset 0 1px 0 0 var(--borderColor-default);\n }\n }\n\n /* Regular viewport */\n @media (--viewportRange-regular) {\n &:where([data-variant-regular='none']) {\n display: none;\n }\n\n &:where([data-variant-regular='line']) {\n display: block;\n height: 1px;\n /* stylelint-disable-next-line primer/colors */\n background-color: var(--borderColor-default);\n }\n\n &:where([data-variant-regular='filled']) {\n display: block;\n height: var(--base-size-8);\n background-color: var(--bgColor-inset);\n box-shadow:\n /* stylelint-disable-next-line primer/box-shadow */\n inset 0 -1px 0 0 var(--borderColor-default),\n inset 0 1px 0 0 var(--borderColor-default);\n }\n }\n\n /* Wide viewport */\n @media (--viewportRange-wide) {\n &:where([data-variant-wide='none']) {\n display: none;\n }\n\n &:where([data-variant-wide='line']) {\n display: block;\n height: 1px;\n /* stylelint-disable-next-line primer/colors */\n background-color: var(--borderColor-default);\n }\n\n &:where([data-variant-wide='filled']) {\n display: block;\n height: var(--base-size-8);\n background-color: var(--bgColor-inset);\n box-shadow:\n /* stylelint-disable-next-line primer/box-shadow */\n inset 0 -1px 0 0 var(--borderColor-default),\n inset 0 1px 0 0 var(--borderColor-default);\n }\n }\n\n @media screen and (min-width: 768px) {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n}\n\n.VerticalDivider {\n position: relative;\n height: 100%;\n\n &:where([data-variant='none']) {\n display: none;\n }\n\n &:where([data-variant='line']) {\n display: block;\n width: 1px;\n /* stylelint-disable-next-line primer/colors */\n background-color: var(--borderColor-default);\n }\n\n &:where([data-variant='filled']) {\n display: block;\n width: var(--base-size-8);\n background-color: var(--bgColor-inset);\n box-shadow:\n /* stylelint-disable-next-line primer/box-shadow */\n inset -1px 0 0 0 var(--borderColor-default),\n inset 1px 0 0 0 var(--borderColor-default);\n }\n\n /* Narrow viewport */\n @media (--viewportRange-narrow) {\n &:where([data-variant-narrow='none']) {\n display: none;\n }\n\n &:where([data-variant-narrow='line']) {\n display: block;\n width: 1px;\n /* stylelint-disable-next-line primer/colors */\n background-color: var(--borderColor-default);\n }\n\n &:where([data-variant-narrow='filled']) {\n display: block;\n width: var(--base-size-8);\n background-color: var(--bgColor-inset);\n box-shadow:\n /* stylelint-disable-next-line primer/box-shadow */\n inset -1px 0 0 0 var(--borderColor-default),\n inset 1px 0 0 0 var(--borderColor-default);\n }\n }\n\n /* Regular viewport */\n @media (--viewportRange-regular) {\n &:where([data-variant-regular='none']) {\n display: none;\n }\n\n &:where([data-variant-regular='line']) {\n display: block;\n width: 1px;\n /* stylelint-disable-next-line primer/colors */\n background-color: var(--borderColor-default);\n }\n\n &:where([data-variant-regular='filled']) {\n display: block;\n width: var(--base-size-8);\n background-color: var(--bgColor-inset);\n box-shadow:\n /* stylelint-disable-next-line primer/box-shadow */\n inset -1px 0 0 0 var(--borderColor-default),\n inset 1px 0 0 0 var(--borderColor-default);\n }\n }\n\n /* Wide viewport */\n @media (--viewportRange-wide) {\n &:where([data-variant-wide='none']) {\n display: none;\n }\n\n &:where([data-variant-wide='line']) {\n display: block;\n width: 1px;\n /* stylelint-disable-next-line primer/colors */\n background-color: var(--borderColor-default);\n }\n\n &:where([data-variant-wide='filled']) {\n display: block;\n width: var(--base-size-8);\n background-color: var(--bgColor-inset);\n box-shadow:\n /* stylelint-disable-next-line primer/box-shadow */\n inset -1px 0 0 0 var(--borderColor-default),\n inset 1px 0 0 0 var(--borderColor-default);\n }\n }\n}\n\n.Header {\n width: 100%;\n /* stylelint-disable-next-line primer/spacing */\n margin-bottom: var(--spacing);\n\n &:where([data-hidden='true']) {\n display: none;\n }\n\n /* Narrow viewport */\n @media (--viewportRange-narrow) {\n &:where([data-hidden-narrow='true']) {\n display: none;\n }\n }\n\n /* Regular viewport */\n @media (--viewportRange-regular) {\n &:where([data-hidden-regular='true']) {\n display: none;\n }\n }\n\n /* Wide viewport */\n @media (--viewportRange-wide) {\n &:where([data-hidden-wide='true']) {\n display: none;\n }\n }\n}\n\n.HeaderContent {\n /* stylelint-disable-next-line primer/spacing */\n padding: var(--spacing);\n}\n\n.HeaderHorizontalDivider {\n /* stylelint-disable-next-line primer/spacing */\n margin-top: var(--spacing);\n}\n\n.ContentWrapper {\n display: flex;\n\n /* Hack to prevent overflowing content from pushing the pane region to the next line */\n min-width: 1px;\n flex-direction: column;\n order: var(--region-order-content);\n\n /* Set flex-basis to 0% to allow flex-grow to control the width of the content region.\n Without this, the content region could wrap onto a different line\n than the pane region on wide viewports if its contents are too wide. */\n flex-basis: 0;\n flex-grow: 1;\n flex-shrink: 1;\n\n &:where([data-is-hidden='true']) {\n display: none;\n }\n\n /* Narrow viewport */\n @media (--viewportRange-narrow) {\n &:where([data-is-hidden-narrow='true']) {\n display: none;\n }\n }\n\n /* Regular viewport */\n @media (--viewportRange-regular) {\n &:where([data-is-hidden-regular='true']) {\n display: none;\n }\n }\n\n /* Wide viewport */\n @media (--viewportRange-wide) {\n &:where([data-is-hidden-wide='true']) {\n display: none;\n }\n }\n}\n\n.Content {\n width: 100%;\n\n /* stylelint-disable-next-line primer/spacing */\n padding: var(--spacing);\n margin-right: auto;\n margin-left: auto;\n flex-grow: 1;\n\n &:where([data-width='medium']) {\n max-width: 768px;\n }\n\n &:where([data-width='large']) {\n max-width: 1012px;\n }\n\n &:where([data-width='full']) {\n max-width: 100%;\n }\n\n &:where([data-width='xlarge']) {\n max-width: 1280px;\n }\n}\n\n.PaneWrapper {\n display: flex;\n width: 100%;\n margin-right: 0;\n margin-left: 0;\n\n &:where([data-is-hidden='true']) {\n display: none;\n }\n\n /* Narrow viewport */\n @media (--viewportRange-narrow) {\n &:where([data-is-hidden-narrow='true']) {\n display: none;\n }\n\n &:where([data-position-narrow='end']) {\n /* stylelint-disable-next-line primer/spacing */\n margin-top: var(--spacing-row);\n flex-direction: column;\n order: var(--region-order-pane-end);\n }\n\n &:where([data-position-narrow='start']) {\n /* stylelint-disable-next-line primer/spacing */\n margin-bottom: var(--spacing-row);\n flex-direction: column-reverse;\n order: var(--region-order-pane-start);\n }\n }\n\n /* Base position (non-responsive) - applies at narrow viewports only */\n @media (--viewportRange-narrow) {\n &:where([data-position='end']) {\n /* stylelint-disable-next-line primer/spacing */\n margin-top: var(--spacing-row);\n flex-direction: column;\n order: var(--region-order-pane-end);\n }\n\n &:where([data-position='start']) {\n /* stylelint-disable-next-line primer/spacing */\n margin-bottom: var(--spacing-row);\n flex-direction: column-reverse;\n order: var(--region-order-pane-start);\n }\n }\n\n @media screen and (min-width: 768px) {\n &:where([data-is-hidden-regular='true']) {\n display: none;\n }\n\n width: auto;\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n\n &:where([data-sticky]) {\n position: sticky;\n /* stylelint-disable-next-line primer/spacing */\n top: var(--offset-header);\n max-height: 100vh;\n }\n\n /* Base position (non-responsive) - applies at regular+ viewports */\n &:where([data-position='end']) {\n /* stylelint-disable-next-line primer/spacing */\n margin-left: var(--spacing-column);\n flex-direction: row-reverse;\n order: var(--region-order-pane-end);\n }\n\n &:where([data-position='start']) {\n /* stylelint-disable-next-line primer/spacing */\n margin-right: var(--spacing-column);\n flex-direction: row;\n order: var(--region-order-pane-start);\n }\n\n &:where([data-position-regular='end']) {\n /* stylelint-disable-next-line primer/spacing */\n margin-left: var(--spacing-column);\n flex-direction: row-reverse;\n order: var(--region-order-pane-end);\n }\n\n &:where([data-position-regular='start']) {\n /* stylelint-disable-next-line primer/spacing */\n margin-right: var(--spacing-column);\n flex-direction: row;\n order: var(--region-order-pane-start);\n }\n }\n\n @media (--viewportRange-wide) {\n &:where([data-is-hidden-wide='true']) {\n display: none;\n }\n\n &:where([data-position-wide='end']) {\n /* stylelint-disable-next-line primer/spacing */\n margin-left: var(--spacing-column);\n flex-direction: row-reverse;\n order: var(--region-order-pane-end);\n }\n\n &:where([data-position-wide='start']) {\n /* stylelint-disable-next-line primer/spacing */\n margin-right: var(--spacing-column);\n flex-direction: row;\n order: var(--region-order-pane-start);\n }\n }\n}\n\n.PaneVerticalDivider {\n /* Base position (non-responsive) */\n &:where([data-position='start']) {\n /* stylelint-disable-next-line primer/spacing */\n margin-left: var(--spacing);\n }\n\n &:where([data-position='end']) {\n /* stylelint-disable-next-line primer/spacing */\n margin-right: var(--spacing);\n }\n\n /* Responsive position */\n @media (--viewportRange-narrow) {\n &:where([data-position-narrow='start']) {\n /* stylelint-disable-next-line primer/spacing */\n margin-left: var(--spacing);\n margin-right: 0;\n }\n\n &:where([data-position-narrow='end']) {\n /* stylelint-disable-next-line primer/spacing */\n margin-right: var(--spacing);\n margin-left: 0;\n }\n }\n\n @media (--viewportRange-regular) {\n &:where([data-position-regular='start']) {\n /* stylelint-disable-next-line primer/spacing */\n margin-left: var(--spacing);\n margin-right: 0;\n }\n\n &:where([data-position-regular='end']) {\n /* stylelint-disable-next-line primer/spacing */\n margin-right: var(--spacing);\n margin-left: 0;\n }\n }\n\n @media (--viewportRange-wide) {\n &:where([data-position-wide='start']) {\n /* stylelint-disable-next-line primer/spacing */\n margin-left: var(--spacing);\n margin-right: 0;\n }\n\n &:where([data-position-wide='end']) {\n /* stylelint-disable-next-line primer/spacing */\n margin-right: var(--spacing);\n margin-left: 0;\n }\n }\n}\n\n.Pane {\n width: var(--pane-width-size);\n /* stylelint-disable-next-line primer/spacing */\n padding: var(--spacing);\n\n @media screen and (min-width: 768px) {\n overflow: auto;\n }\n\n &:where([data-resizable]) {\n width: 100%;\n\n @media screen and (min-width: 768px) {\n width: clamp(var(--pane-min-width), var(--pane-width), var(--pane-max-width));\n }\n }\n}\n\n.PaneHorizontalDivider {\n &:where([data-position='start']) {\n /* stylelint-disable-next-line primer/spacing */\n margin-top: var(--spacing);\n }\n\n &:where([data-position='end']) {\n /* stylelint-disable-next-line primer/spacing */\n margin-bottom: var(--spacing);\n }\n\n /* Responsive position */\n @media (--viewportRange-narrow) {\n &:where([data-position-narrow='start']) {\n /* stylelint-disable-next-line primer/spacing */\n margin-top: var(--spacing);\n margin-bottom: 0;\n }\n\n &:where([data-position-narrow='end']) {\n /* stylelint-disable-next-line primer/spacing */\n margin-bottom: var(--spacing);\n margin-top: 0;\n }\n }\n\n @media (--viewportRange-regular) {\n &:where([data-position-regular='start']) {\n /* stylelint-disable-next-line primer/spacing */\n margin-top: var(--spacing);\n margin-bottom: 0;\n }\n\n &:where([data-position-regular='end']) {\n /* stylelint-disable-next-line primer/spacing */\n margin-bottom: var(--spacing);\n margin-top: 0;\n }\n }\n\n @media (--viewportRange-wide) {\n &:where([data-position-wide='start']) {\n /* stylelint-disable-next-line primer/spacing */\n margin-top: var(--spacing);\n margin-bottom: 0;\n }\n\n &:where([data-position-wide='end']) {\n /* stylelint-disable-next-line primer/spacing */\n margin-bottom: var(--spacing);\n margin-top: 0;\n }\n }\n}\n\n.FooterWrapper {\n width: 100%;\n order: var(--region-order-footer);\n\n /* stylelint-disable-next-line primer/spacing */\n margin-top: var(--spacing);\n\n &:where([data-hidden='true']) {\n display: none;\n }\n\n /* Narrow viewport */\n @media (--viewportRange-narrow) {\n &:where([data-hidden-narrow='true']) {\n display: none;\n }\n }\n\n /* Regular viewport */\n @media (--viewportRange-regular) {\n &:where([data-hidden-regular='true']) {\n display: none;\n }\n }\n\n /* Wide viewport */\n @media (--viewportRange-wide) {\n &:where([data-hidden-wide='true']) {\n display: none;\n }\n }\n}\n\n.FooterHorizontalDivider {\n /* stylelint-disable-next-line primer/spacing */\n margin-bottom: var(--spacing);\n}\n\n.FooterContent {\n /* stylelint-disable-next-line primer/spacing */\n padding: var(--spacing);\n}\n\n.DraggableHandle {\n position: absolute;\n inset: 0 -2px;\n cursor: col-resize;\n background-color: transparent;\n transition-delay: 0.1s;\n}\n\n.DraggableHandle:hover {\n background-color: var(--bgColor-neutral-muted);\n}\n\n.DraggableHandle[data-dragging='true'] {\n background-color: var(--bgColor-accent-emphasis);\n}\n\n.DraggableHandle[data-dragging='true']:hover {\n background-color: var(--bgColor-accent-emphasis);\n}\n"]}
|