@astryxdesign/core 0.7.9-canary.048476f → 0.7.9-canary.0a64fdb
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/AppShell/observeMainOverflow.d.ts.map +1 -1
- package/dist/AppShell/observeMainOverflow.js +9 -6
- package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
- package/dist/CheckboxInput/CheckboxInput.js +54 -11
- package/dist/InputGroup/InputGroup.d.ts +4 -3
- package/dist/InputGroup/InputGroup.d.ts.map +1 -1
- package/dist/InputGroup/InputGroup.js +2 -2
- package/dist/InputGroup/groupStyles.d.ts +1 -1
- package/dist/InputGroup/groupStyles.d.ts.map +1 -1
- package/dist/InputGroup/groupStyles.js +1 -1
- package/dist/Layout/LayoutContent.d.ts +3 -1
- package/dist/Layout/LayoutContent.d.ts.map +1 -1
- package/dist/Layout/LayoutContent.js +12 -4
- package/dist/Layout/LayoutPanel.d.ts +4 -1
- package/dist/Layout/LayoutPanel.d.ts.map +1 -1
- package/dist/Layout/LayoutPanel.js +13 -4
- package/dist/MobileNav/MobileNav.d.ts.map +1 -1
- package/dist/MobileNav/MobileNav.js +5 -0
- package/dist/RadioList/RadioListItem.d.ts.map +1 -1
- package/dist/RadioList/RadioListItem.js +18 -3
- package/dist/Stack/StackItem.d.ts +8 -4
- package/dist/Stack/StackItem.d.ts.map +1 -1
- package/dist/Stack/StackItem.js +17 -4
- package/dist/astryx.css +5 -1
- package/dist/gestures/PanGestureRecognizer.d.ts +11 -1
- package/dist/gestures/PanGestureRecognizer.d.ts.map +1 -1
- package/dist/gestures/PanGestureRecognizer.js +15 -1
- package/dist/gestures/ScreenEdgePanGestureRecognizer.d.ts +6 -1
- package/dist/gestures/ScreenEdgePanGestureRecognizer.d.ts.map +1 -1
- package/dist/hooks/StackItemScrollRegion.d.ts +31 -0
- package/dist/hooks/StackItemScrollRegion.d.ts.map +1 -0
- package/dist/hooks/StackItemScrollRegion.js +40 -0
- package/dist/hooks/useScrollRegionProps.d.ts +35 -0
- package/dist/hooks/useScrollRegionProps.d.ts.map +1 -0
- package/dist/hooks/useScrollRegionProps.js +51 -0
- package/dist/i18n/generated-english/hooks/useScrollRegionProps.generated.d.ts +8 -0
- package/dist/i18n/generated-english/hooks/useScrollRegionProps.generated.d.ts.map +1 -0
- package/dist/i18n/generated-english/hooks/useScrollRegionProps.generated.js +12 -0
- package/dist/i18n/generated-locales/en.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/en.generated.js +1 -0
- package/dist/i18n/generated-locales/pseudo.generated.d.ts.map +1 -1
- package/dist/i18n/generated-locales/pseudo.generated.js +1 -0
- package/dist/utils/touchHitArea.stylex.d.ts +35 -0
- package/dist/utils/touchHitArea.stylex.d.ts.map +1 -0
- package/dist/utils/touchHitArea.stylex.js +32 -0
- package/locales/en.json +4 -0
- package/locales/pseudo.json +3 -0
- package/package.json +4 -4
- package/src/AppShell/observeMainOverflow.ts +9 -6
- package/src/CheckboxInput/CheckboxInput.doc.mjs +3 -2
- package/src/CheckboxInput/CheckboxInput.tsx +71 -9
- package/src/InputGroup/InputGroup.doc.mjs +4 -3
- package/src/InputGroup/InputGroup.tsx +4 -3
- package/src/InputGroup/groupStyles.ts +3 -1
- package/src/Layout/LayoutContent.doc.mjs +6 -3
- package/src/Layout/LayoutContent.tsx +10 -4
- package/src/Layout/LayoutPanel.doc.mjs +6 -3
- package/src/Layout/LayoutPanel.tsx +11 -4
- package/src/MobileNav/MobileNav.tsx +5 -0
- package/src/RadioList/RadioListItem.doc.mjs +3 -2
- package/src/RadioList/RadioListItem.tsx +21 -2
- package/src/Stack/Stack.doc.mjs +1 -1
- package/src/Stack/StackItem.tsx +27 -13
- package/src/gestures/PanGestureRecognizer.ts +19 -2
- package/src/gestures/README.md +2 -1
- package/src/gestures/ScreenEdgePanGestureRecognizer.ts +6 -1
- package/src/hooks/StackItemScrollRegion.tsx +57 -0
- package/src/hooks/useScrollRegionProps.ts +76 -0
- package/src/i18n/generated-english/hooks/useScrollRegionProps.generated.ts +13 -0
- package/src/i18n/generated-locales/en.generated.ts +1 -0
- package/src/i18n/generated-locales/pseudo.generated.ts +1 -0
- package/src/utils/touchHitArea.stylex.ts +41 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observeMainOverflow.d.ts","sourceRoot":"","sources":["../../src/AppShell/observeMainOverflow.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"observeMainOverflow.d.ts","sourceRoot":"","sources":["../../src/AppShell/observeMainOverflow.ts"],"names":[],"mappings":"AA4CA;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,WAAW,EACjB,QAAQ,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,GACrC,MAAM,IAAI,CA2FZ"}
|
|
@@ -4,20 +4,23 @@
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* @file observeMainOverflow.ts
|
|
7
|
-
* @input
|
|
8
|
-
*
|
|
7
|
+
* @input A scroll container that holds its content as direct children with
|
|
8
|
+
* no wrapper: AppShell's main region under `height="fill"`, or a scrolling
|
|
9
|
+
* LayoutContent, LayoutPanel or StackItem
|
|
9
10
|
* @output observeMainOverflow(main, onChange): reports whether main's content
|
|
10
11
|
* overflows it on either axis, once at the start and on every change, and
|
|
11
12
|
* returns the function that stops observing
|
|
12
|
-
* @position Internal
|
|
13
|
+
* @position Internal and never exported. AppShell makes main a
|
|
13
14
|
* keyboard stop only while it overflows (`spec:AST-025` FR12,
|
|
14
|
-
* `component:AppShell` FR4 and PR1).
|
|
15
|
-
*
|
|
16
|
-
*
|
|
15
|
+
* `component:AppShell` FR4 and PR1). useScrollRegionProps names a
|
|
16
|
+
* scrolling region only while it overflows. Main has no inner content
|
|
17
|
+
* box, so its content grows inside it without resizing it: its direct
|
|
18
|
+
* children's sizes are watched instead.
|
|
17
19
|
*
|
|
18
20
|
* SYNC: When modified, update:
|
|
19
21
|
* - /packages/core/src/AppShell/AppShell.tsx
|
|
20
22
|
* - /packages/core/src/AppShell/observeMainOverflow.test.ts
|
|
23
|
+
* - /packages/core/src/hooks/useScrollRegionProps.ts
|
|
21
24
|
*/
|
|
22
25
|
import { getLogicalAxisMapping, measureLogicalScrollAxis } from "../hooks/scrollGeometry.js";
|
|
23
26
|
import { observeMutations } from "../utils/sharedMutationObserver.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CheckboxInput.d.ts","sourceRoot":"","sources":["../../src/CheckboxInput/CheckboxInput.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAML,KAAK,WAAW,EAChB,KAAK,UAAU,
|
|
1
|
+
{"version":3,"file":"CheckboxInput.d.ts","sourceRoot":"","sources":["../../src/CheckboxInput/CheckboxInput.tsx"],"names":[],"mappings":"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"}
|
|
@@ -36,6 +36,8 @@ import { usePressFeedback } from "../hooks/usePressFeedback.js";
|
|
|
36
36
|
import { useIndicator } from "../Indicator/useIndicator.js";
|
|
37
37
|
import { themeProps } from "../utils/themeProps.js";
|
|
38
38
|
import { useMergedRefs } from "../hooks/useMergedRefs.js";
|
|
39
|
+
import { watchHitArea, writeHitInsets } from "../utils/hitArea.js";
|
|
40
|
+
import { touchHitAreaStyles } from "../utils/touchHitArea.stylex.js";
|
|
39
41
|
import { registerEnglishFallback, useComponentTranslator } from "../i18n/useComponentTranslator.js";
|
|
40
42
|
import english from "../i18n/generated-english/CheckboxInput/CheckboxInput.generated.js";
|
|
41
43
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
@@ -62,6 +64,10 @@ const styles = {
|
|
|
62
64
|
kOIVth: "xxhr3t",
|
|
63
65
|
$$css: true
|
|
64
66
|
},
|
|
67
|
+
hitAreaHost: {
|
|
68
|
+
kVAEAm: "xrxqdxo",
|
|
69
|
+
$$css: true
|
|
70
|
+
},
|
|
65
71
|
indicatorPressImage: {
|
|
66
72
|
"--_indicator-press-image": "x1dueop1 x189o2zt",
|
|
67
73
|
$$css: true
|
|
@@ -210,6 +216,49 @@ export function CheckboxInput({
|
|
|
210
216
|
const {
|
|
211
217
|
focusProps
|
|
212
218
|
} = useIndicatorFocusRing(indicatorRef);
|
|
219
|
+
|
|
220
|
+
// Under a coarse pointer a labelled checkbox's row grows toward 44 px
|
|
221
|
+
// through an invisible band, and nothing changes size. A label-hidden
|
|
222
|
+
// checkbox is a marker in another component's row, which keeps its target.
|
|
223
|
+
const hasHitArea = !isLabelHidden && !isDisabled && !isReadOnly;
|
|
224
|
+
const inputRef = useRef(null);
|
|
225
|
+
// The watch lives as long as the row is attached: the ref's cleanup stops
|
|
226
|
+
// it, and a replaced row starts its own.
|
|
227
|
+
const watchRowHitArea = useCallback(row => {
|
|
228
|
+
if (row == null || !hasHitArea) {
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
return watchHitArea(row, insets => writeHitInsets(row, insets));
|
|
232
|
+
}, [hasHitArea]);
|
|
233
|
+
// The disabled-message tooltip listens for hover and focus on the whole
|
|
234
|
+
// row, a larger trigger. It anchors on the checkbox itself (below), so it
|
|
235
|
+
// shows next to the control. Its handlers check isEnabled, so the row
|
|
236
|
+
// always attaches them.
|
|
237
|
+
const rowRef = useMergedRefs(disabledMessageTooltip.interactionRef, watchRowHitArea);
|
|
238
|
+
// Where a press on the row itself began. A browser can move a tap's click
|
|
239
|
+
// onto the row's edge, so the band is judged from the press.
|
|
240
|
+
const pressPointRef = useRef(null);
|
|
241
|
+
const handleRowPointerDown = event => {
|
|
242
|
+
pressPointRef.current = event.target === event.currentTarget ? {
|
|
243
|
+
x: event.clientX,
|
|
244
|
+
y: event.clientY
|
|
245
|
+
} : null;
|
|
246
|
+
};
|
|
247
|
+
// A press that began on the band, outside the row's box, toggles the
|
|
248
|
+
// checkbox, as a tap on the box does. A click from code has no press count
|
|
249
|
+
// (`detail` is 0), so it never toggles from here.
|
|
250
|
+
const handleRowClick = event => {
|
|
251
|
+
const press = pressPointRef.current;
|
|
252
|
+
pressPointRef.current = null;
|
|
253
|
+
if (press == null || event.detail === 0 || event.target !== event.currentTarget) {
|
|
254
|
+
return;
|
|
255
|
+
}
|
|
256
|
+
const box = event.currentTarget.getBoundingClientRect();
|
|
257
|
+
const isOnBand = press.x < box.left || press.x > box.right || press.y < box.top || press.y > box.bottom;
|
|
258
|
+
if (isOnBand) {
|
|
259
|
+
inputRef.current?.click();
|
|
260
|
+
}
|
|
261
|
+
};
|
|
213
262
|
const isIndeterminate = optimisticValue === 'indeterminate';
|
|
214
263
|
const isChecked = optimisticValue === true;
|
|
215
264
|
|
|
@@ -249,17 +298,11 @@ export function CheckboxInput({
|
|
|
249
298
|
size
|
|
250
299
|
}), stylex.props(width != null && dynamicWidthStyles.width(width), xstyle), className, style),
|
|
251
300
|
children: [/*#__PURE__*/_jsxs("div", {
|
|
252
|
-
ref:
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
// positioning anchors on the checkbox itself (below) so the tooltip
|
|
256
|
-
// appears next to the control, not the far edge of the row.
|
|
257
|
-
// Handlers are gated internally by isEnabled, so attaching
|
|
258
|
-
// unconditionally is safe.
|
|
259
|
-
disabledMessageTooltip.interactionRef(el);
|
|
260
|
-
},
|
|
301
|
+
ref: rowRef,
|
|
302
|
+
onPointerDown: hasHitArea ? handleRowPointerDown : undefined,
|
|
303
|
+
onClick: hasHitArea ? handleRowClick : undefined,
|
|
261
304
|
...(isDisabled ? undefined : pressable),
|
|
262
|
-
...stylex.props(styles.container, isLabelHidden && styles.containerLabelHidden,
|
|
305
|
+
...stylex.props(styles.container, isLabelHidden && styles.containerLabelHidden, hasHitArea && styles.hitAreaHost, hasHitArea && touchHitAreaStyles.layer,
|
|
263
306
|
// Hover and focus reach the checkbox visual through this ancestor
|
|
264
307
|
// marker rather than props, so the whole row drives it.
|
|
265
308
|
!isDisabled && indicatorScope, !isDisabled && styles.indicatorPressImage,
|
|
@@ -272,7 +315,7 @@ export function CheckboxInput({
|
|
|
272
315
|
...focusProps,
|
|
273
316
|
children: [/*#__PURE__*/_jsx("input", {
|
|
274
317
|
...rest,
|
|
275
|
-
ref: useMergedRefs(ref, indeterminateRef, disabledMessageTooltip.positionRef),
|
|
318
|
+
ref: useMergedRefs(ref, indeterminateRef, disabledMessageTooltip.positionRef, inputRef),
|
|
276
319
|
id: id,
|
|
277
320
|
type: "checkbox"
|
|
278
321
|
// Withhold the name while disabled: the input stays focusable (not
|
|
@@ -59,7 +59,8 @@ export interface InputGroupProps extends Omit<BaseProps<HTMLDivElement>, 'childr
|
|
|
59
59
|
*/
|
|
60
60
|
size?: InputGroupSize;
|
|
61
61
|
/**
|
|
62
|
-
*
|
|
62
|
+
* Validation status. Its message shows below the group. The group border
|
|
63
|
+
* does not change; a theme can style the row from `data-status`.
|
|
63
64
|
*/
|
|
64
65
|
status?: InputStatus;
|
|
65
66
|
/**
|
|
@@ -72,8 +73,8 @@ export interface InputGroupProps extends Omit<BaseProps<HTMLDivElement>, 'childr
|
|
|
72
73
|
'data-testid'?: string;
|
|
73
74
|
}
|
|
74
75
|
/**
|
|
75
|
-
* Groups an input with prefix
|
|
76
|
-
*
|
|
76
|
+
* Groups an input with prefix and suffix addons in one connected row. A
|
|
77
|
+
* focused member stays above its neighbours, so its focus ring shows in full.
|
|
77
78
|
*
|
|
78
79
|
* @example
|
|
79
80
|
* ```
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InputGroup.d.ts","sourceRoot":"","sources":["../../src/InputGroup/InputGroup.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAsB,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAG1D,OAAO,EAAQ,KAAK,WAAW,EAAC,MAAM,UAAU,CAAC;AAGjD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAK5C,MAAM,MAAM,cAAc,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AA0BhD,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAC3C,SAAS,CAAC,cAAc,CAAC,EACzB,UAAU,CACX;IACC,mDAAmD;IACnD,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAEhC;;OAEG;IACH,QAAQ,EAAE,SAAS,CAAC;IAEpB;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;OAGG;IACH,IAAI,CAAC,EAAE,cAAc,CAAC;IAEtB
|
|
1
|
+
{"version":3,"file":"InputGroup.d.ts","sourceRoot":"","sources":["../../src/InputGroup/InputGroup.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAsB,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAG1D,OAAO,EAAQ,KAAK,WAAW,EAAC,MAAM,UAAU,CAAC;AAGjD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAK5C,MAAM,MAAM,cAAc,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AA0BhD,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAC3C,SAAS,CAAC,cAAc,CAAC,EACzB,UAAU,CACX;IACC,mDAAmD;IACnD,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAEhC;;OAEG;IACH,QAAQ,EAAE,SAAS,CAAC;IAEpB;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;OAGG;IACH,IAAI,CAAC,EAAE,cAAc,CAAC;IAEtB;;;OAGG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;IAErB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU,CAAC,EACzB,QAAQ,EACR,KAAK,EACL,aAAqB,EACrB,WAAW,EACX,UAAU,EAAE,cAAsB,EAClC,UAAkB,EAClB,UAAkB,EAClB,IAAI,EAAE,QAAQ,EACd,MAAM,EACN,YAAY,EACZ,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,aAAa,EAAE,MAAM,EACrB,GAAG,IAAI,EACR,EAAE,eAAe,+BA8EjB;yBA/Fe,UAAU"}
|
|
@@ -57,8 +57,8 @@ const sizeStyles = {
|
|
|
57
57
|
}
|
|
58
58
|
};
|
|
59
59
|
/**
|
|
60
|
-
* Groups an input with prefix
|
|
61
|
-
*
|
|
60
|
+
* Groups an input with prefix and suffix addons in one connected row. A
|
|
61
|
+
* focused member stays above its neighbours, so its focus ring shows in full.
|
|
62
62
|
*
|
|
63
63
|
* @example
|
|
64
64
|
* ```
|
|
@@ -33,7 +33,7 @@ export declare const groupStyles: Readonly<{
|
|
|
33
33
|
readonly borderStartEndRadius: stylex.StyleXClassNameFor<"borderStartEndRadius", 0 | "8px">;
|
|
34
34
|
readonly borderEndEndRadius: stylex.StyleXClassNameFor<"borderEndEndRadius", 0 | "8px">;
|
|
35
35
|
readonly ':focus-within': stylex.StyleXClassNameFor<":focus-within", {
|
|
36
|
-
readonly zIndex:
|
|
36
|
+
readonly zIndex: 2;
|
|
37
37
|
}>;
|
|
38
38
|
}>;
|
|
39
39
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"groupStyles.d.ts","sourceRoot":"","sources":["../../src/InputGroup/groupStyles.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAC;AAG3C;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB;;CAEtB,CAAC;AA0BX,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"groupStyles.d.ts","sourceRoot":"","sources":["../../src/InputGroup/groupStyles.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAC;AAG3C;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB;;CAEtB,CAAC;AA0BX,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;EA0DtB,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @file LayoutContent.tsx
|
|
3
|
-
* @input Uses React StyleX, LayoutSlotsContext
|
|
3
|
+
* @input Uses React StyleX, LayoutSlotsContext, useScrollRegionProps
|
|
4
4
|
* @output Exports LayoutContent component and LayoutContentProps
|
|
5
5
|
* @position Scrollable main content area for Layout. Wraps the primary body content
|
|
6
6
|
* with automatic scroll containment and context-aware padding.
|
|
@@ -35,6 +35,8 @@ export interface LayoutContentProps extends BaseProps<HTMLDivElement> {
|
|
|
35
35
|
/**
|
|
36
36
|
* Accessible label for the landmark.
|
|
37
37
|
* Required when role is set and multiple landmarks of the same type exist.
|
|
38
|
+
* While the content scrolls, it also names the scrolling region, which
|
|
39
|
+
* otherwise takes a translated "Content".
|
|
38
40
|
*/
|
|
39
41
|
label?: string;
|
|
40
42
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LayoutContent.d.ts","sourceRoot":"","sources":["../../src/Layout/LayoutContent.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAC,QAAQ,EAAE,SAAS,EAAC,MAAM,OAAO,CAAC;AAC/C,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"LayoutContent.d.ts","sourceRoot":"","sources":["../../src/Layout/LayoutContent.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAC,QAAQ,EAAE,SAAS,EAAC,MAAM,OAAO,CAAC;AAC/C,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAQ5C,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAqFhD,MAAM,WAAW,kBAAmB,SAAQ,SAAS,CAAC,cAAc,CAAC;IACnE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB;;;;OAIG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC;IAEtB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,IAAI,CAAC,EAAE,QAAQ,CAAC;CACjB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,YAAmB,EACnB,OAAO,EACP,KAAK,EACL,IAAI,EACJ,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,GAAG,KAAK,EACT,EAAE,kBAAkB,+BAoDpB;yBA/De,aAAa"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* @file LayoutContent.tsx
|
|
7
|
-
* @input Uses React StyleX, LayoutSlotsContext
|
|
7
|
+
* @input Uses React StyleX, LayoutSlotsContext, useScrollRegionProps
|
|
8
8
|
* @output Exports LayoutContent component and LayoutContentProps
|
|
9
9
|
* @position Scrollable main content area for Layout. Wraps the primary body content
|
|
10
10
|
* with automatic scroll containment and context-aware padding.
|
|
@@ -19,6 +19,8 @@ import * as stylex from '@stylexjs/stylex';
|
|
|
19
19
|
import "../theme/tokens.stylex.js";
|
|
20
20
|
import { spacingVars } from "../theme/tokens.stylex.js";
|
|
21
21
|
import { LayoutSlotsContext } from "./LayoutSlotsContext.js";
|
|
22
|
+
import { useMergedRefs } from "../hooks/useMergedRefs.js";
|
|
23
|
+
import { useScrollRegionProps } from "../hooks/useScrollRegionProps.js";
|
|
22
24
|
import { mergeProps } from "../utils/mergeProps.js";
|
|
23
25
|
import { themeProps } from "../utils/themeProps.js";
|
|
24
26
|
import { paddingStyles, containerPaddingInlineVarStyles, containerPaddingBlockStartVarStyles, containerPaddingBlockEndVarStyles } from "./padding.stylex.js";
|
|
@@ -146,10 +148,16 @@ export function LayoutContent({
|
|
|
146
148
|
hasEnd
|
|
147
149
|
} = use(LayoutSlotsContext);
|
|
148
150
|
const isZeroPadding = padding === 0;
|
|
151
|
+
const region = useScrollRegionProps({
|
|
152
|
+
isScrollable,
|
|
153
|
+
role,
|
|
154
|
+
label
|
|
155
|
+
});
|
|
156
|
+
const mergedRef = useMergedRefs(ref, region.ref);
|
|
149
157
|
return /*#__PURE__*/_jsx("div", {
|
|
150
|
-
ref:
|
|
151
|
-
role: role,
|
|
152
|
-
"aria-label": label,
|
|
158
|
+
ref: mergedRef,
|
|
159
|
+
role: region.role,
|
|
160
|
+
"aria-label": region['aria-label'],
|
|
153
161
|
...mergeProps(themeProps('layout-content'), stylex.props(styles.content,
|
|
154
162
|
// Outer padding on container edges (unless content is full bleed)
|
|
155
163
|
!hasStart && !isZeroPadding && padding == null && styles.noStart, !hasEnd && !isZeroPadding && padding == null && styles.noEnd, !hasHeader && !isZeroPadding && padding == null && styles.noHeader, !hasFooter && !isZeroPadding && padding == null && styles.noFooter, isScrollable && styles.scrollable, isZeroPadding && styles.fullBleed, padding != null && paddingStyles[padding], padding != null && containerPaddingInlineVarStyles[padding], padding != null && containerPaddingBlockStartVarStyles[padding], padding != null && containerPaddingBlockEndVarStyles[padding], !hasStart && !hasEnd && !isZeroPadding && styles.constrainedNoPanelsStart, !hasStart && !hasEnd && !isZeroPadding && styles.constrainedNoPanelsEnd, hasStart && !hasEnd && !isZeroPadding && styles.constrainedSingleStartPanel, !hasStart && hasEnd && !isZeroPadding && styles.constrainedSingleEndPanel, xstyle), className, style),
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @file LayoutPanel.tsx
|
|
3
|
-
* @input Uses React StyleX, LayoutAreaContext, LayoutSlotsContext
|
|
3
|
+
* @input Uses React StyleX, LayoutAreaContext, LayoutSlotsContext,
|
|
4
|
+
* useScrollRegionProps
|
|
4
5
|
* @output Exports LayoutPanel component and LayoutPanelProps
|
|
5
6
|
* @position Sidebar panel for Layout start/end slots. Use for navigation panels,
|
|
6
7
|
* settings sidebars, detail panels, or any fixed-width side content.
|
|
@@ -47,6 +48,8 @@ export interface LayoutPanelProps extends BaseProps<HTMLDivElement> {
|
|
|
47
48
|
/**
|
|
48
49
|
* Accessible label for the landmark.
|
|
49
50
|
* Required when role is set and multiple landmarks of the same type exist.
|
|
51
|
+
* While the panel scrolls, it also names the scrolling region, which
|
|
52
|
+
* otherwise takes a translated "Content".
|
|
50
53
|
*/
|
|
51
54
|
label?: string;
|
|
52
55
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LayoutPanel.d.ts","sourceRoot":"","sources":["../../src/Layout/LayoutPanel.tsx"],"names":[],"mappings":"AAIA
|
|
1
|
+
{"version":3,"file":"LayoutPanel.d.ts","sourceRoot":"","sources":["../../src/Layout/LayoutPanel.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAC,QAAQ,EAAE,SAAS,EAAC,MAAM,OAAO,CAAC;AAC/C,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAS5C,OAAO,KAAK,EAAC,SAAS,EAAE,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAC3D,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,2BAA2B,CAAC;AAmF9D,MAAM,WAAW,gBAAiB,SAAQ,SAAS,CAAC,cAAc,CAAC;IACjE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB;;;;;;;;;OASG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;;OAIG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC;IAEtB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,IAAI,CAAC,EAAE,QAAQ,CAAC;IAEhB;;;;OAIG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAElB;;;;;;;;;;;;;OAaG;IACH,SAAS,CAAC,EAAE,cAAc,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,UAAkB,EAClB,YAAmB,EACnB,KAAK,EACL,OAAO,EACP,IAAI,EACJ,KAAK,EACL,SAAS,EACT,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,GAAG,KAAK,EACT,EAAE,gBAAgB,+BAoElB;yBAlFe,WAAW"}
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* @file LayoutPanel.tsx
|
|
7
|
-
* @input Uses React StyleX, LayoutAreaContext, LayoutSlotsContext
|
|
7
|
+
* @input Uses React StyleX, LayoutAreaContext, LayoutSlotsContext,
|
|
8
|
+
* useScrollRegionProps
|
|
8
9
|
* @output Exports LayoutPanel component and LayoutPanelProps
|
|
9
10
|
* @position Sidebar panel for Layout start/end slots. Use for navigation panels,
|
|
10
11
|
* settings sidebars, detail panels, or any fixed-width side content.
|
|
@@ -20,6 +21,8 @@ import "../theme/tokens.stylex.js";
|
|
|
20
21
|
import { colorVars, spacingVars } from "../theme/tokens.stylex.js";
|
|
21
22
|
import { LayoutAreaContext } from "./LayoutAreaContext.js";
|
|
22
23
|
import { LayoutSlotsContext } from "./LayoutSlotsContext.js";
|
|
24
|
+
import { useMergedRefs } from "../hooks/useMergedRefs.js";
|
|
25
|
+
import { useScrollRegionProps } from "../hooks/useScrollRegionProps.js";
|
|
23
26
|
import { mergeProps } from "../utils/index.js";
|
|
24
27
|
import { themeProps } from "../utils/themeProps.js";
|
|
25
28
|
import { paddingStyles, containerPaddingInlineVarStyles, containerPaddingBlockStartVarStyles, containerPaddingBlockEndVarStyles } from "./padding.stylex.js";
|
|
@@ -160,6 +163,12 @@ export function LayoutPanel({
|
|
|
160
163
|
|
|
161
164
|
// When no divider, collapse spacing for seamless visual flow
|
|
162
165
|
const shouldCollapseSpacing = !hasDivider && !isZeroPadding && padding == null;
|
|
166
|
+
const region = useScrollRegionProps({
|
|
167
|
+
isScrollable,
|
|
168
|
+
role,
|
|
169
|
+
label
|
|
170
|
+
});
|
|
171
|
+
const mergedRef = useMergedRefs(ref, region.ref);
|
|
163
172
|
|
|
164
173
|
// Select divider style based on position
|
|
165
174
|
const dividerStyle = isStartPanel ? styles.dividerEnd : isEndPanel ? styles.dividerStart : null;
|
|
@@ -167,9 +176,9 @@ export function LayoutPanel({
|
|
|
167
176
|
// Select collapse style based on position (collapse the side where divider would be)
|
|
168
177
|
const collapseStyle = isStartPanel ? styles.collapseEnd : isEndPanel ? styles.collapseStart : null;
|
|
169
178
|
return /*#__PURE__*/_jsx("div", {
|
|
170
|
-
ref:
|
|
171
|
-
role: role,
|
|
172
|
-
"aria-label": label,
|
|
179
|
+
ref: mergedRef,
|
|
180
|
+
role: region.role,
|
|
181
|
+
"aria-label": region['aria-label'],
|
|
173
182
|
...mergeProps(themeProps('layout-panel'), stylex.props(styles.panel, dynamicStyles.sizing(effectiveWidth ?? null),
|
|
174
183
|
// Outer padding on container edges (unless component is full bleed)
|
|
175
184
|
isStartPanel && !isZeroPadding && padding == null && styles.startPanel, isEndPanel && !isZeroPadding && padding == null && styles.endPanel, !hasHeader && !isZeroPadding && padding == null && styles.noHeader, !hasFooter && !isZeroPadding && padding == null && styles.noFooter, isScrollable && styles.scrollable, isZeroPadding && styles.fullBleed, padding != null && paddingStyles[padding], padding != null && containerPaddingInlineVarStyles[padding], padding != null && containerPaddingBlockStartVarStyles[padding], padding != null && containerPaddingBlockEndVarStyles[padding], hasDivider && dividerStyle, shouldCollapseSpacing && collapseStyle, xstyle), className, style),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MobileNav.d.ts","sourceRoot":"","sources":["../../src/MobileNav/MobileNav.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAEH,OAAO,EAOL,KAAK,SAAS,EAEf,MAAM,OAAO,CAAC;AAuBf,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"MobileNav.d.ts","sourceRoot":"","sources":["../../src/MobileNav/MobileNav.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAEH,OAAO,EAOL,KAAK,SAAS,EAEf,MAAM,OAAO,CAAC;AAuBf,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AA0M5C;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,MAAM,CAAC;AACtC;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,MAAM,CAAC;AAI/B;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAkBpE;AA+DD,MAAM,WAAW,cAAe,SAAQ,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC;IAC9D,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACnC;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAEzC;;OAEG;IACH,QAAQ,EAAE,SAAS,CAAC;IAEpB;;;;OAIG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IAEnB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;;;;;;OAQG;IACH,IAAI,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;IAEhC;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,SAAS,CAAC,EACxB,MAAM,EAAE,UAAU,EAClB,YAAY,EAAE,gBAAgB,EAC9B,QAAQ,EACR,MAAM,EACN,KAAW,EACX,IAAa,EACb,KAAK,EACL,aAAa,EAAE,MAAM,EACrB,MAAM,EACN,SAAS,EACT,KAAK,EACL,OAAO,EAAE,WAAW,EACpB,GAAG,EACH,GAAG,IAAI,EACR,EAAE,cAAc,+BAgShB;yBA/Se,SAAS"}
|
|
@@ -63,6 +63,7 @@ import { useLayerDismissal } from "../Layer/useLayerDismissal.js";
|
|
|
63
63
|
import { themeProps } from "../utils/themeProps.js";
|
|
64
64
|
import { useMergedRefs } from "../hooks/useMergedRefs.js";
|
|
65
65
|
import { useScrollLock } from "../hooks/useScrollLock.js";
|
|
66
|
+
import { useFocusRegionContainment } from "../hooks/useFocusTrap.js";
|
|
66
67
|
import { registerEnglishFallback, useComponentTranslator } from "../i18n/useComponentTranslator.js";
|
|
67
68
|
import english from "../i18n/generated-english/MobileNav/MobileNav.generated.js";
|
|
68
69
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
@@ -328,6 +329,10 @@ export function MobileNav({
|
|
|
328
329
|
}
|
|
329
330
|
}), [onOpenChangeProp, appShellMobile]);
|
|
330
331
|
const dialogRef = useRef(null);
|
|
332
|
+
// Native showModal() lets Tab leave for the browser's own UI, so the shared
|
|
333
|
+
// module wraps it. A closing drawer stops containing as soon as it starts to
|
|
334
|
+
// slide out.
|
|
335
|
+
useFocusRegionContainment(dialogRef, isOpen);
|
|
331
336
|
const drawerRef = useRef(null);
|
|
332
337
|
const closeTimeoutRef = useRef(null);
|
|
333
338
|
// The input hold on the drawer's layer while it slides in under a coarse
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RadioListItem.d.ts","sourceRoot":"","sources":["../../src/RadioList/RadioListItem.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"RadioListItem.d.ts","sourceRoot":"","sources":["../../src/RadioList/RadioListItem.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,EAAkC,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAG7E,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAe5C,OAAO,EAAO,KAAK,SAAS,EAAC,MAAM,cAAc,CAAC;AAsIlD,MAAM,WAAW,kBAAmB,SAAQ,SAAS,CAAC,cAAc,CAAC;IACnE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAChC;;;;;OAKG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB;;;;;;;;;;OAUG;IACH,KAAK,EAAE,SAAS,CAAC;IACjB;;;;;;;;;;;;;;OAcG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;;;;OAKG;IACH,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;OAEG;IACH,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB;;OAEG;IACH,UAAU,CAAC,EAAE,SAAS,CAAC;CACxB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,EAC5B,GAAG,EACH,KAAK,EACL,YAAY,EAAE,SAAS,EACvB,KAAK,EACL,WAAW,EACX,UAAU,EAAE,cAAsB,EAClC,YAAY,EACZ,UAAU,EACV,KAAK,EACL,MAAM,EACN,SAAS,EACT,KAAK,EACL,OAAO,EACP,GAAG,IAAI,EACR,EAAE,kBAAkB,qBAuMpB;yBAtNe,aAAa"}
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
* - /apps/storybook/stories/RadioList.stories.tsx
|
|
18
18
|
* - /packages/cli/assets/templates/blocks/components/RadioList/ (showcase blocks)
|
|
19
19
|
*/
|
|
20
|
-
import React, { use, useId, useRef } from 'react';
|
|
20
|
+
import React, { use, useCallback, useId, useRef } from 'react';
|
|
21
21
|
import * as stylex from '@stylexjs/stylex';
|
|
22
22
|
import { RadioListContext } from "./RadioList.js";
|
|
23
23
|
import { RadioListReasonContext } from "./RadioListReasonContext.js";
|
|
@@ -31,6 +31,9 @@ import "../Indicator/indicator.markers.stylex.js";
|
|
|
31
31
|
import { indicatorScope } from "../Indicator/indicator.markers.stylex.js";
|
|
32
32
|
import { useIndicatorFocusRing } from "../hooks/useIndicatorFocusRing.js";
|
|
33
33
|
import { usePressFeedback } from "../hooks/usePressFeedback.js";
|
|
34
|
+
import { useMergedRefs } from "../hooks/useMergedRefs.js";
|
|
35
|
+
import { watchHitArea, writeHitInsets } from "../utils/hitArea.js";
|
|
36
|
+
import { touchHitAreaStyles } from "../utils/touchHitArea.stylex.js";
|
|
34
37
|
import { useIndicator } from "../Indicator/useIndicator.js";
|
|
35
38
|
import { Item } from "../Item/Item.js";
|
|
36
39
|
import { themeProps } from "../utils/themeProps.js";
|
|
@@ -186,6 +189,18 @@ export function RadioListItem({
|
|
|
186
189
|
// since the visible label is now a plain (non-`<label>`) text node — a real
|
|
187
190
|
// `<label htmlFor>` would double-fire under delegation.
|
|
188
191
|
const radioRef = useRef(null);
|
|
192
|
+
|
|
193
|
+
// Under a coarse pointer an option's row grows toward 44 px through an
|
|
194
|
+
// invisible band, and the row keeps its size. A tap on the band lands on
|
|
195
|
+
// the row, which hands it to the radio. The watch lives as long as the row
|
|
196
|
+
// is attached: the ref's cleanup stops it.
|
|
197
|
+
const watchRowHitArea = useCallback(row => {
|
|
198
|
+
if (row == null || isDisabled) {
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
return watchHitArea(row, insets => writeHitInsets(row, insets));
|
|
202
|
+
}, [isDisabled]);
|
|
203
|
+
const mergedRowRef = useMergedRefs(ref, watchRowHitArea);
|
|
189
204
|
const radioCircle = /*#__PURE__*/_jsxs("div", {
|
|
190
205
|
...stylex.props(styles.radioWrapper, wrapperSizeStyles[size], !isDisabled && styles.indicatorPressOverlay),
|
|
191
206
|
...focusProps,
|
|
@@ -251,7 +266,7 @@ export function RadioListItem({
|
|
|
251
266
|
children: [radioCircle, startContent]
|
|
252
267
|
}) : radioCircle;
|
|
253
268
|
return /*#__PURE__*/_jsx(Item, {
|
|
254
|
-
ref:
|
|
269
|
+
ref: mergedRowRef,
|
|
255
270
|
...(isDisabled ? undefined : pressable),
|
|
256
271
|
startContent: mediaContent
|
|
257
272
|
// Delegate row-surface clicks (label text, description, and the empty
|
|
@@ -283,7 +298,7 @@ export function RadioListItem({
|
|
|
283
298
|
// interactive hover/press background. Applied after Item's own base
|
|
284
299
|
// styles so it wins within the base layer; a `radio-list-item` theme
|
|
285
300
|
// still overrides it from the higher `astryx-theme` layer.
|
|
286
|
-
rowStyles.root, !isDisabled && rowStyles.press, xstyle],
|
|
301
|
+
rowStyles.root, !isDisabled && rowStyles.press, !isDisabled && touchHitAreaStyles.layer, xstyle],
|
|
287
302
|
...mergeProps(
|
|
288
303
|
// One target for every row, carrying its size and runtime state so a
|
|
289
304
|
// theme can express "selected option at large" or restyle disabled
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @file StackItem.tsx
|
|
3
|
-
* @input Uses React, ElementType, stackItem utility
|
|
3
|
+
* @input Uses React, ElementType, stackItem utility, StackItemScrollRegion
|
|
4
4
|
* @output Exports StackItem polymorphic component and StackItemProps
|
|
5
|
-
* @position Layout/Stack component; uses stackItem.stylex.ts
|
|
5
|
+
* @position Layout/Stack component; uses stackItem.stylex.ts. A scrollable
|
|
6
|
+
* `div` or `span` item renders through StackItemScrollRegion, which names
|
|
7
|
+
* it while it scrolls.
|
|
6
8
|
*
|
|
7
9
|
* SYNC: When modified, update these files to stay in sync:
|
|
8
10
|
* - /packages/core/src/Stack/Stack.doc.mjs
|
|
@@ -34,7 +36,9 @@ export interface StackItemProps extends BaseProps<HTMLElement> {
|
|
|
34
36
|
* reset, so `<StackItem size="fill" isScrollable>` is a complete scroll
|
|
35
37
|
* region — it grows to fill the stack and scrolls its own overflow with
|
|
36
38
|
* no extra style plumbing. Matches `isScrollable` on `LayoutContent`
|
|
37
|
-
* and `LayoutPanel`.
|
|
39
|
+
* and `LayoutPanel`. While its content overflows, a `div` or `span` item
|
|
40
|
+
* is a group named by the caller's `aria-label`, or by a translated
|
|
41
|
+
* "Content". Another element keeps its own role.
|
|
38
42
|
* @default false
|
|
39
43
|
*/
|
|
40
44
|
isScrollable?: boolean;
|
|
@@ -62,7 +66,7 @@ export interface StackItemProps extends BaseProps<HTMLElement> {
|
|
|
62
66
|
* </HStack>
|
|
63
67
|
* ```
|
|
64
68
|
*/
|
|
65
|
-
export declare function StackItem({ crossAlignSelf, size, isScrollable, as: element, xstyle, className, style, children, ref, ...props }: StackItemProps): import("react").ReactElement<any, string | import("react").JSXElementConstructor<any
|
|
69
|
+
export declare function StackItem({ crossAlignSelf, size, isScrollable, as: element, xstyle, className, style, children, ref, ...props }: StackItemProps): import("react").ReactElement<any, string | import("react").JSXElementConstructor<any>> | import("react").FunctionComponentElement<import("../hooks/StackItemScrollRegion.js").StackItemScrollRegionProps>;
|
|
66
70
|
export declare namespace StackItem {
|
|
67
71
|
var displayName: string;
|
|
68
72
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StackItem.d.ts","sourceRoot":"","sources":["../../src/Stack/StackItem.tsx"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"StackItem.d.ts","sourceRoot":"","sources":["../../src/Stack/StackItem.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAgB,KAAK,WAAW,EAAE,KAAK,SAAS,EAAW,MAAM,OAAO,CAAC;AAChF,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAE5C,OAAO,EAEL,KAAK,uBAAuB,EAC5B,KAAK,aAAa,EACnB,MAAM,oBAAoB,CAAC;AAW5B,MAAM,WAAW,cAAe,SAAQ,SAAS,CAAC,WAAW,CAAC;IAC5D,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC7B;;;OAGG;IACH,cAAc,CAAC,EAAE,uBAAuB,CAAC;IAEzC;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,aAAa,CAAC;IAErB;;;;;;;;;;;OAWG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;;OAGG;IACH,EAAE,CAAC,EAAE,WAAW,CAAC;IAEjB;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,SAAS,CAAC,EACxB,cAAc,EACd,IAAI,EACJ,YAAY,EACZ,EAAE,EAAE,OAAe,EACnB,MAAM,EACN,SAAS,EACT,KAAK,EACL,QAAQ,EACR,GAAG,EACH,GAAG,KAAK,EACT,EAAE,cAAc,0MA8BhB;yBAzCe,SAAS"}
|
package/dist/Stack/StackItem.js
CHANGED
|
@@ -2,9 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* @file StackItem.tsx
|
|
5
|
-
* @input Uses React, ElementType, stackItem utility
|
|
5
|
+
* @input Uses React, ElementType, stackItem utility, StackItemScrollRegion
|
|
6
6
|
* @output Exports StackItem polymorphic component and StackItemProps
|
|
7
|
-
* @position Layout/Stack component; uses stackItem.stylex.ts
|
|
7
|
+
* @position Layout/Stack component; uses stackItem.stylex.ts. A scrollable
|
|
8
|
+
* `div` or `span` item renders through StackItemScrollRegion, which names
|
|
9
|
+
* it while it scrolls.
|
|
8
10
|
*
|
|
9
11
|
* SYNC: When modified, update these files to stay in sync:
|
|
10
12
|
* - /packages/core/src/Stack/Stack.doc.mjs
|
|
@@ -16,6 +18,7 @@ import * as stylex from '@stylexjs/stylex';
|
|
|
16
18
|
import { stackItem } from "./stackItem.stylex.js";
|
|
17
19
|
import { mergeProps } from "../utils/mergeProps.js";
|
|
18
20
|
import { themeProps } from "../utils/themeProps.js";
|
|
21
|
+
import { StackItemScrollRegion } from "../hooks/StackItemScrollRegion.js";
|
|
19
22
|
const overflowStyles = {
|
|
20
23
|
scrollable: {
|
|
21
24
|
kVQacm: "xysyzu8",
|
|
@@ -52,12 +55,22 @@ export function StackItem({
|
|
|
52
55
|
crossAlignSelf,
|
|
53
56
|
size
|
|
54
57
|
}), isScrollable && overflowStyles.scrollable, xstyle);
|
|
55
|
-
|
|
56
|
-
ref: ref,
|
|
58
|
+
const elementProps = {
|
|
57
59
|
...mergeProps(themeProps('stack-item', {
|
|
58
60
|
size
|
|
59
61
|
}), stylexProps, className, style),
|
|
60
62
|
...props
|
|
63
|
+
};
|
|
64
|
+
if (isScrollable && (element === 'div' || element === 'span')) {
|
|
65
|
+
return /*#__PURE__*/createElement(StackItemScrollRegion, {
|
|
66
|
+
as: element,
|
|
67
|
+
ref,
|
|
68
|
+
elementProps
|
|
69
|
+
}, children);
|
|
70
|
+
}
|
|
71
|
+
return /*#__PURE__*/createElement(element, {
|
|
72
|
+
ref: ref,
|
|
73
|
+
...elementProps
|
|
61
74
|
}, children);
|
|
62
75
|
}
|
|
63
76
|
StackItem.displayName = 'StackItem';
|
package/dist/astryx.css
CHANGED
|
@@ -1633,7 +1633,7 @@
|
|
|
1633
1633
|
.xttggg:is([dir="rtl"] *):not(#\#):not(#\#):not(#\#){transform:translateX(100%)}
|
|
1634
1634
|
.x1nyx83j:is([dir="rtl"] *):not(#\#):not(#\#):not(#\#){transform:translateX(50%)}
|
|
1635
1635
|
.x9cjr8z:popover-open:not(#\#):not(#\#):not(#\#){transform:translateY(0)}
|
|
1636
|
-
.
|
|
1636
|
+
.x1pc0aet:focus-within:not(#\#):not(#\#):not(#\#){z-index:2}
|
|
1637
1637
|
.xf5goe6.xf5goe6:where(.astryx-input-group > [data-astryx-input-group-item]):focus-visible:not(#\#):not(#\#):not(#\#){z-index:2}
|
|
1638
1638
|
.x151j4nw:has(input[aria-disabled="true"]:focus-visible):not(#\#):not(#\#):not(#\#){box-shadow:inset 0 0 0 2px var(--color-accent-muted)}
|
|
1639
1639
|
.xwmge8v:has(> [aria-disabled="true"]:focus-visible):not(#\#):not(#\#):not(#\#){box-shadow:inset 0 0 0 2px var(--color-accent-muted)}
|
|
@@ -2322,6 +2322,7 @@
|
|
|
2322
2322
|
@media (prefers-reduced-motion: reduce) and (not (pointer: coarse)) and (not (pointer: coarse)){.xxsp3er.xxsp3er[data-astryx-press="fading"]:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#){animation-name:none}}
|
|
2323
2323
|
@media (forced-colors: active){.x1pjcgc3.x1pjcgc3[data-astryx-press="fading"]:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#){background-color:Highlight}}
|
|
2324
2324
|
@media (forced-colors: active){.x1r4mieh.x1r4mieh[data-astryx-press="on"]:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#){background-color:Highlight}}
|
|
2325
|
+
@media (pointer: coarse){.x16x82qr.x16x82qr:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::after{inset:calc(var(--astryx-hit-inset-top,0px) * -1) calc(var(--astryx-hit-inset-right,0px) * -1) calc(var(--astryx-hit-inset-bottom,0px) * -1) calc(var(--astryx-hit-inset-left,0px) * -1)}}
|
|
2325
2326
|
@starting-style{@media (prefers-reduced-motion: reduce) and (pointer: coarse){.xgo67oj.xgo67oj.xgo67oj:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#){opacity:0}}}
|
|
2326
2327
|
@starting-style{@media (prefers-reduced-motion: reduce){.xspp5ug.xspp5ug.xspp5ug:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#){transform:translateY(0)}}}
|
|
2327
2328
|
@media (pointer: coarse){.x10ogxw0.x10ogxw0.x10ogxw0:where(:not(:disabled,[aria-disabled="true"]))[data-astryx-press="on"]:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#){background-image:none}}
|
|
@@ -2493,7 +2494,10 @@
|
|
|
2493
2494
|
.x1c108yo:is([dir="rtl"] *):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::after{transform:translateX(-100%)}
|
|
2494
2495
|
.x12ayhd5:is([dir="rtl"] *):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::after{transform:translateX(100%)}
|
|
2495
2496
|
@media (forced-colors: none){.x1my3e5g.x1my3e5g:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::before{background-color:var(--color-overlay-pressed)}}
|
|
2497
|
+
@media (pointer: coarse){.x1c440c0.x1c440c0:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::after{clip-path:polygon(evenodd,0 0,100% 0,100% 100%,0 100%,0 0,var(--astryx-hit-inset-left,0px) var(--astryx-hit-inset-top,0px),calc(100% - var(--astryx-hit-inset-right,0px)) var(--astryx-hit-inset-top,0px),calc(100% - var(--astryx-hit-inset-right,0px)) calc(100% - var(--astryx-hit-inset-bottom,0px)),var(--astryx-hit-inset-left,0px) calc(100% - var(--astryx-hit-inset-bottom,0px)),var(--astryx-hit-inset-left,0px) var(--astryx-hit-inset-top,0px))}}
|
|
2498
|
+
@media (pointer: coarse){.x1fjtqre.x1fjtqre:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::after{content:""}}
|
|
2496
2499
|
@media (pointer: coarse){.x1ep27e9.x1ep27e9:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::after{display:block}}
|
|
2500
|
+
@media (pointer: coarse){.x7b72wb.x7b72wb:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::after{position:absolute}}
|
|
2497
2501
|
@media (prefers-reduced-motion: reduce){.xhhm9v0.xhhm9v0:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::before{transition-delay:0s}}
|
|
2498
2502
|
@media (prefers-reduced-motion: reduce){.x1viac0w.x1viac0w:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::backdrop{transition-duration:.01s}}
|
|
2499
2503
|
@media (prefers-reduced-motion: reduce){.x13sdc92.x13sdc92:not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#):not(#\#)::before{transition-duration:0s}}
|
|
@@ -6,7 +6,12 @@ export interface PanGestureRecognizerOptions extends GestureRecognizerOptions<Pa
|
|
|
6
6
|
minimumNumberOfTouches?: number;
|
|
7
7
|
/** @default Infinity */
|
|
8
8
|
maximumNumberOfTouches?: number;
|
|
9
|
-
|
|
9
|
+
/**
|
|
10
|
+
* The travel that begins the pan, px. A function gives each press its own
|
|
11
|
+
* threshold: it reads the press's first touch when that touch lands.
|
|
12
|
+
* @default UIKit's 10
|
|
13
|
+
*/
|
|
14
|
+
hysteresis?: number | ((touch: GestureTouch) => number);
|
|
10
15
|
/** Movement that may begin the pan; anything else fails it. @default 'any' */
|
|
11
16
|
direction?: PanDirection;
|
|
12
17
|
/**
|
|
@@ -51,6 +56,11 @@ export declare class PanGestureRecognizer extends GestureRecognizer {
|
|
|
51
56
|
/** The movement the begin threshold took (excluded from `translation()`). */
|
|
52
57
|
travelAtBegan: Point;
|
|
53
58
|
private readonly tracker;
|
|
59
|
+
/**
|
|
60
|
+
* Read once per press. A finger that lands later keeps the press's
|
|
61
|
+
* threshold.
|
|
62
|
+
*/
|
|
63
|
+
private readonly hysteresisFor;
|
|
54
64
|
/** The lift's event time once the pan ended: its release (AST-100 FR2). */
|
|
55
65
|
private releaseTime;
|
|
56
66
|
/** The centroid where the gesture started, in client px. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PanGestureRecognizer.d.ts","sourceRoot":"","sources":["../../src/gestures/PanGestureRecognizer.ts"],"names":[],"mappings":"AAuCA,OAAO,EAEL,iBAAiB,EAEjB,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,EACzB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAC,mBAAmB,EAAE,YAAY,EAAE,KAAK,EAAC,MAAM,SAAS,CAAC;AAGtE,MAAM,MAAM,YAAY,GACtB,KAAK,GAAG,YAAY,GAAG,UAAU,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,MAAM,CAAC;AAEvE,MAAM,WAAW,2BAA4B,SAAQ,wBAAwB,CAAC,oBAAoB,CAAC;IACjG,iBAAiB;IACjB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,wBAAwB;IACxB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"PanGestureRecognizer.d.ts","sourceRoot":"","sources":["../../src/gestures/PanGestureRecognizer.ts"],"names":[],"mappings":"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"}
|