@astryxdesign/core 0.7.8 → 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/BottomSheet/BottomSheet.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheet.js +5 -0
- package/dist/Calendar/styles.d.ts +1 -1
- package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
- package/dist/CheckboxInput/CheckboxInput.js +54 -11
- package/dist/ClickableCard/ClickableCard.d.ts +1 -1
- package/dist/ClickableCard/ClickableCard.d.ts.map +1 -1
- package/dist/ClickableCard/ClickableCard.js +5 -1
- package/dist/DateInput/PickerWheel.d.ts.map +1 -1
- package/dist/DateInput/PickerWheel.js +7 -1
- package/dist/DateRangeInput/DateRangeInput.js +1 -1
- package/dist/Dialog/Dialog.d.ts +2 -1
- package/dist/Dialog/Dialog.d.ts.map +1 -1
- package/dist/Dialog/Dialog.js +12 -1
- package/dist/Drawer/useDrawerDialogPresence.d.ts +2 -1
- package/dist/Drawer/useDrawerDialogPresence.d.ts.map +1 -1
- package/dist/Drawer/useDrawerDialogPresence.js +11 -2
- package/dist/DropdownMenu/DropdownMenu.d.ts +9 -1
- package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenu.js +9 -4
- package/dist/DropdownMenu/DropdownMenuCheckboxItem.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuCheckboxItem.js +3 -2
- package/dist/DropdownMenu/DropdownMenuItem.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuItem.js +3 -2
- package/dist/DropdownMenu/DropdownMenuRadioItem.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuRadioItem.js +3 -2
- package/dist/DropdownMenu/DropdownMenuSubMenu.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuSubMenu.js +3 -2
- package/dist/Field/inputDisabledFocus.d.ts +4 -4
- package/dist/Field/inputStyles.stylex.d.ts +1 -1
- package/dist/FileInput/FileInput.d.ts.map +1 -1
- package/dist/FileInput/FileInput.js +16 -2
- package/dist/Icon/Icon.d.ts +1 -1
- package/dist/InfoTip/InfoTip.d.ts +1 -0
- package/dist/InfoTip/InfoTip.d.ts.map +1 -1
- package/dist/InfoTip/InfoTip.js +1 -0
- 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/Item/Item.d.ts +2 -1
- package/dist/Item/Item.d.ts.map +1 -1
- package/dist/Item/Item.js +29 -6
- package/dist/Layer/holdEntranceInput.d.ts +24 -0
- package/dist/Layer/holdEntranceInput.d.ts.map +1 -0
- package/dist/Layer/holdEntranceInput.js +65 -0
- package/dist/Layer/inputHold.d.ts +49 -0
- package/dist/Layer/inputHold.d.ts.map +1 -0
- package/dist/Layer/inputHold.js +636 -0
- package/dist/Layer/preserveAnimations.d.ts +1 -5
- package/dist/Layer/preserveAnimations.d.ts.map +1 -1
- package/dist/Layer/preserveAnimations.js +12 -214
- 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/Lightbox/Lightbox.d.ts.map +1 -1
- package/dist/Lightbox/Lightbox.js +4 -0
- package/dist/MetadataList/MetadataList.js +1 -1
- package/dist/MobileNav/MobileNav.d.ts +11 -1
- package/dist/MobileNav/MobileNav.d.ts.map +1 -1
- package/dist/MobileNav/MobileNav.js +39 -1
- package/dist/MoreMenu/MoreMenu.d.ts +5 -3
- package/dist/MoreMenu/MoreMenu.d.ts.map +1 -1
- package/dist/RadioList/RadioListItem.d.ts.map +1 -1
- package/dist/RadioList/RadioListItem.js +22 -4
- package/dist/SelectableCard/SelectableCard.d.ts +1 -1
- package/dist/SelectableCard/SelectableCard.d.ts.map +1 -1
- package/dist/SelectableCard/SelectableCard.js +5 -1
- package/dist/Spinner/Spinner.d.ts.map +1 -1
- package/dist/Spinner/Spinner.js +12 -2
- 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/Table/plugins/sortable/useTableSortable.js +1 -1
- package/dist/Token/Token.d.ts.map +1 -1
- package/dist/Token/Token.js +9 -0
- package/dist/Token/TokenLink.d.ts +1 -1
- package/dist/Token/TokenLink.d.ts.map +1 -1
- package/dist/Token/TokenLink.js +4 -1
- package/dist/Tooltip/useTooltip.d.ts.map +1 -1
- package/dist/Tooltip/useTooltip.js +162 -59
- package/dist/TreeList/TreeListItem.d.ts +2 -1
- package/dist/TreeList/TreeListItem.d.ts.map +1 -1
- package/dist/TreeList/TreeListItem.js +27 -3
- package/dist/astryx.css +35 -8
- package/dist/gestures/GestureHost.d.ts +2 -2
- package/dist/gestures/GestureHost.d.ts.map +1 -1
- package/dist/gestures/GestureHost.js +21 -6
- 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/gestures/nativeScroll.d.ts +3 -6
- package/dist/gestures/nativeScroll.d.ts.map +1 -1
- package/dist/gestures/nativeScroll.js +7 -52
- package/dist/gestures/wheelSegmenter.d.ts +68 -1
- package/dist/gestures/wheelSegmenter.d.ts.map +1 -1
- package/dist/gestures/wheelSegmenter.js +199 -10
- 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/menuPressGesture.d.ts +133 -21
- package/dist/hooks/menuPressGesture.d.ts.map +1 -1
- package/dist/hooks/menuPressGesture.js +155 -30
- package/dist/hooks/menuPressValues.d.ts +16 -0
- package/dist/hooks/menuPressValues.d.ts.map +1 -0
- package/dist/hooks/menuPressValues.js +18 -0
- package/dist/hooks/useClickableContainer.d.ts +27 -5
- package/dist/hooks/useClickableContainer.d.ts.map +1 -1
- package/dist/hooks/useClickableContainer.js +41 -5
- package/dist/hooks/useFocusTrap.d.ts +10 -0
- package/dist/hooks/useFocusTrap.d.ts.map +1 -1
- package/dist/hooks/useFocusTrap.js +225 -132
- package/dist/hooks/useMenuPress.d.ts +34 -1
- package/dist/hooks/useMenuPress.d.ts.map +1 -1
- package/dist/hooks/useMenuPress.js +93 -5
- package/dist/hooks/usePressFeedback.d.ts +6 -6
- package/dist/hooks/usePressFeedback.js +6 -6
- 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/motion/carryAnimations.d.ts +58 -0
- package/dist/motion/carryAnimations.d.ts.map +1 -0
- package/dist/motion/carryAnimations.js +305 -0
- package/dist/motion/transientCopy.d.ts +4 -2
- package/dist/motion/transientCopy.d.ts.map +1 -1
- package/dist/motion/transientCopy.js +34 -5
- package/dist/motion/uikit/gestures.d.ts +41 -0
- package/dist/motion/uikit/gestures.d.ts.map +1 -1
- package/dist/motion/uikit/gestures.js +25 -0
- package/dist/motion/uikit/index.d.ts +1 -1
- package/dist/motion/uikit/index.d.ts.map +1 -1
- package/dist/motion/uikit/index.js +1 -1
- package/dist/privateAttributes/menuPressLit.stylex.d.ts +52 -0
- package/dist/privateAttributes/menuPressLit.stylex.d.ts.map +1 -0
- package/dist/privateAttributes/menuPressLit.stylex.js +99 -0
- package/dist/privateAttributes/press.stylex.d.ts +139 -0
- package/dist/privateAttributes/press.stylex.d.ts.map +1 -0
- package/dist/privateAttributes/press.stylex.js +98 -0
- package/dist/theme/tokens.stylex.d.ts +2 -2
- package/dist/theme/tokens.stylex.js +1 -1
- package/dist/utils/flatTree.d.ts +6 -3
- package/dist/utils/flatTree.d.ts.map +1 -1
- package/dist/utils/flatTree.js +13 -3
- package/dist/utils/hitArea.d.ts.map +1 -1
- package/dist/utils/hitArea.js +82 -5
- package/dist/utils/inputStream.d.ts +14 -1
- package/dist/utils/inputStream.d.ts.map +1 -1
- package/dist/utils/inputStream.js +40 -9
- package/dist/utils/interactionOverlay.stylex.d.ts +2 -1
- package/dist/utils/interactionOverlay.stylex.d.ts.map +1 -1
- package/dist/utils/interactionOverlay.stylex.js +7 -2
- package/dist/utils/pressFeedback.d.ts +7 -0
- package/dist/utils/pressFeedback.d.ts.map +1 -1
- package/dist/utils/pressFeedback.js +32 -7
- package/dist/utils/pressGesture.d.ts +6 -0
- package/dist/utils/pressGesture.d.ts.map +1 -1
- package/dist/utils/pressGesture.js +17 -0
- package/dist/utils/rowPressLayer.stylex.d.ts +14 -0
- package/dist/utils/rowPressLayer.stylex.d.ts.map +1 -0
- package/dist/utils/rowPressLayer.stylex.js +25 -0
- package/dist/utils/scrollView.d.ts +25 -0
- package/dist/utils/scrollView.d.ts.map +1 -0
- package/dist/utils/scrollView.js +108 -0
- package/dist/utils/selectionLock.d.ts.map +1 -1
- package/dist/utils/selectionLock.js +1 -10
- 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/dist/utils/triggerFocus.d.ts +5 -0
- package/dist/utils/triggerFocus.d.ts.map +1 -1
- package/dist/utils/triggerFocus.js +9 -2
- package/locales/en.json +4 -0
- package/locales/pseudo.json +3 -0
- package/package.json +5 -5
- package/src/AppShell/observeMainOverflow.ts +9 -6
- package/src/BottomSheet/BottomSheet.tsx +5 -0
- package/src/CheckboxInput/CheckboxInput.doc.mjs +3 -2
- package/src/CheckboxInput/CheckboxInput.tsx +71 -9
- package/src/ClickableCard/ClickableCard.tsx +8 -1
- package/src/DateInput/PickerWheel.tsx +7 -2
- package/src/DateRangeInput/DateRangeInput.tsx +1 -1
- package/src/Dialog/Dialog.doc.mjs +1 -1
- package/src/Dialog/Dialog.tsx +12 -1
- package/src/Drawer/Drawer.doc.mjs +1 -1
- package/src/Drawer/useDrawerDialogPresence.ts +9 -2
- package/src/DropdownMenu/DropdownMenu.doc.mjs +1 -2
- package/src/DropdownMenu/DropdownMenu.tsx +29 -5
- package/src/DropdownMenu/DropdownMenuCheckboxItem.tsx +5 -1
- package/src/DropdownMenu/DropdownMenuItem.tsx +8 -4
- package/src/DropdownMenu/DropdownMenuRadioItem.tsx +5 -1
- package/src/DropdownMenu/DropdownMenuSubMenu.tsx +5 -1
- package/src/FileInput/FileInput.tsx +16 -2
- package/src/InfoTip/InfoTip.doc.mjs +26 -2
- package/src/InfoTip/InfoTip.tsx +1 -0
- package/src/InputGroup/InputGroup.doc.mjs +4 -3
- package/src/InputGroup/InputGroup.tsx +4 -3
- package/src/InputGroup/groupStyles.ts +3 -1
- package/src/Item/Item.tsx +51 -9
- package/src/Layer/holdEntranceInput.ts +84 -0
- package/src/Layer/inputHold.ts +734 -0
- package/src/Layer/preserveAnimations.ts +12 -275
- 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/Lightbox/Lightbox.tsx +4 -0
- package/src/MetadataList/MetadataList.tsx +1 -1
- package/src/MobileNav/MobileNav.doc.mjs +3 -3
- package/src/MobileNav/MobileNav.tsx +39 -1
- package/src/MoreMenu/MoreMenu.doc.mjs +2 -4
- package/src/MoreMenu/MoreMenu.tsx +5 -3
- package/src/RadioList/RadioListItem.doc.mjs +3 -2
- package/src/RadioList/RadioListItem.tsx +25 -7
- package/src/SelectableCard/SelectableCard.tsx +8 -1
- package/src/Spinner/Spinner.tsx +13 -3
- package/src/Stack/Stack.doc.mjs +1 -1
- package/src/Stack/StackItem.tsx +27 -13
- package/src/Table/plugins/sortable/useTableSortable.tsx +1 -1
- package/src/Token/Token.tsx +18 -1
- package/src/Token/TokenLink.tsx +7 -1
- package/src/Tooltip/useTooltip.tsx +175 -79
- package/src/TreeList/TreeListItem.tsx +36 -2
- package/src/gestures/GestureHost.ts +21 -5
- package/src/gestures/PanGestureRecognizer.ts +19 -2
- package/src/gestures/README.md +14 -5
- package/src/gestures/ScreenEdgePanGestureRecognizer.ts +6 -1
- package/src/gestures/nativeScroll.ts +12 -68
- package/src/gestures/wheelSegmenter.ts +243 -10
- package/src/hooks/StackItemScrollRegion.tsx +57 -0
- package/src/hooks/menuPressGesture.ts +244 -38
- package/src/hooks/menuPressValues.ts +18 -0
- package/src/hooks/useClickableContainer.doc.mjs +8 -2
- package/src/hooks/useClickableContainer.ts +72 -6
- package/src/hooks/useFocusTrap.ts +268 -151
- package/src/hooks/useMenuPress.ts +118 -11
- package/src/hooks/usePressFeedback.doc.mjs +3 -3
- package/src/hooks/usePressFeedback.ts +6 -6
- 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/motion/MEASUREMENTS.md +11 -0
- package/src/motion/carryAnimations.ts +389 -0
- package/src/motion/transientCopy.ts +45 -5
- package/src/motion/uikit/gestures.ts +22 -0
- package/src/motion/uikit/index.ts +1 -0
- package/src/privateAttributes/menuPressLit.stylex.ts +104 -0
- package/src/privateAttributes/press.stylex.ts +244 -0
- package/src/theme/tokens.stylex.ts +1 -1
- package/src/utils/flatTree.ts +15 -3
- package/src/utils/hitArea.ts +107 -5
- package/src/utils/inputStream.ts +47 -10
- package/src/utils/interactionOverlay.stylex.ts +7 -2
- package/src/utils/pressFeedback.ts +31 -6
- package/src/utils/pressGesture.ts +24 -1
- package/src/utils/rowPressLayer.stylex.ts +27 -0
- package/src/utils/scrollView.ts +135 -0
- package/src/utils/selectionLock.ts +5 -10
- package/src/utils/touchHitArea.stylex.ts +41 -0
- package/src/utils/triggerFocus.ts +17 -4
|
@@ -11,189 +11,23 @@
|
|
|
11
11
|
*
|
|
12
12
|
* Taking an element out of rendering cancels every CSS animation and
|
|
13
13
|
* transition of it and its subtree. When it returns, the browser creates the
|
|
14
|
-
* animations again from the stylesheet, at their start
|
|
15
|
-
*
|
|
16
|
-
* reads every animation's state first
|
|
17
|
-
* CSS animation that state and resumes
|
|
18
|
-
* script animation at the same point.
|
|
19
|
-
*
|
|
20
|
-
* The
|
|
21
|
-
*
|
|
22
|
-
* chains, every field of the effect's timing, and its keyframes. Only values
|
|
23
|
-
* that differ from the recreated animation's are written, so a value the
|
|
24
|
-
* stylesheet controls stays under its control. A few members are not plain
|
|
25
|
-
* state and are handled in their own step (`ORDERED`); the rest need no
|
|
26
|
-
* handling (`DERIVED`). What cannot be carried over is the Animation and
|
|
27
|
-
* effect objects themselves: the old ones are idle, their `addEventListener`
|
|
28
|
-
* listeners and `finished`/`ready` promises stay with them, and the browser
|
|
29
|
-
* fires `animationcancel`/`transitioncancel` for them and `animationstart`
|
|
14
|
+
* animations again from the stylesheet, at their start. It starts no
|
|
15
|
+
* transition but one from `@starting-style`, and script-created animations
|
|
16
|
+
* are untouched. `preserveAnimations` reads every animation's state first.
|
|
17
|
+
* Afterwards it gives each recreated CSS animation that state, and resumes
|
|
18
|
+
* each cancelled transition with a script animation at the same point. Any
|
|
19
|
+
* other animation the return started is finished, unless it never ends
|
|
20
|
+
* (motion/carryAnimations.ts). The browser fires
|
|
21
|
+
* `animationcancel`/`transitioncancel` for the old ones and `animationstart`
|
|
30
22
|
* for the new ones.
|
|
31
23
|
*/
|
|
32
24
|
|
|
33
|
-
|
|
34
|
-
* Animation members written in a fixed order rather than generically: the
|
|
35
|
-
* timeline before the range that is measured on it, the rate before the
|
|
36
|
-
* time, and the start time (or, for a paused animation, the current time)
|
|
37
|
-
* last, once the play state is set. `effect` is not
|
|
38
|
-
* replaced, because a CSS animation whose effect script replaces leaves the
|
|
39
|
-
* stylesheet's control; its state is copied onto the new effect instead.
|
|
40
|
-
*/
|
|
41
|
-
const ORDERED = new Set(['effect', 'timeline', 'rangeStart', 'rangeEnd', 'playbackRate', 'startTime', 'currentTime']);
|
|
42
|
-
/** Every accessor with a setter on `object`'s prototype chain. */
|
|
43
|
-
function writableAccessors(object) {
|
|
44
|
-
const names = new Set();
|
|
45
|
-
for (let proto = Object.getPrototypeOf(object); proto != null && proto !== Object.prototype; proto = Object.getPrototypeOf(proto)) {
|
|
46
|
-
for (const [name, descriptor] of Object.entries(Object.getOwnPropertyDescriptors(proto))) {
|
|
47
|
-
if (descriptor.set != null) {
|
|
48
|
-
names.add(name);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
return [...names];
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* A textual form of a value that is compared by content rather than by
|
|
57
|
-
* identity: a CSS numeric value (as in a timeline range offset) through its
|
|
58
|
-
* serialization, a plain object (a range) through its members. Anything else
|
|
59
|
-
* is compared by identity (`null`).
|
|
60
|
-
*/
|
|
61
|
-
function contentOf(value) {
|
|
62
|
-
if (typeof CSSNumericValue !== 'undefined' && value instanceof CSSNumericValue) {
|
|
63
|
-
return value.toString();
|
|
64
|
-
}
|
|
65
|
-
if (value != null && typeof value === 'object' && Object.getPrototypeOf(value) === Object.prototype) {
|
|
66
|
-
return Object.entries(value).map(([key, inner]) => `${key}:${contentOf(inner) ?? String(inner)}`).join(';');
|
|
67
|
-
}
|
|
68
|
-
return null;
|
|
69
|
-
}
|
|
70
|
-
function differs(a, b) {
|
|
71
|
-
if (a === b) {
|
|
72
|
-
return false;
|
|
73
|
-
}
|
|
74
|
-
const textA = contentOf(a);
|
|
75
|
-
return textA == null || textA !== contentOf(b);
|
|
76
|
-
}
|
|
77
|
-
function save(animation) {
|
|
78
|
-
const effect = animation.effect;
|
|
79
|
-
const values = {};
|
|
80
|
-
for (const name of writableAccessors(animation)) {
|
|
81
|
-
values[name] = animation[name];
|
|
82
|
-
}
|
|
83
|
-
const effectValues = {};
|
|
84
|
-
if (effect != null) {
|
|
85
|
-
for (const name of writableAccessors(effect)) {
|
|
86
|
-
effectValues[name] = effect[name];
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
return {
|
|
90
|
-
animation,
|
|
91
|
-
name: animation.animationName ?? '',
|
|
92
|
-
target: effect?.target ?? null,
|
|
93
|
-
pseudoElement: effect?.pseudoElement ?? null,
|
|
94
|
-
values,
|
|
95
|
-
effectValues,
|
|
96
|
-
timing: effect?.getTiming() ?? null,
|
|
97
|
-
keyframes: effect?.getKeyframes() ?? null,
|
|
98
|
-
playState: animation.playState,
|
|
99
|
-
replaceState: animation.replaceState
|
|
100
|
-
};
|
|
101
|
-
}
|
|
102
|
-
function write(object, name, value) {
|
|
103
|
-
object[name] = value;
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
/** Give `next` the effect state `saved` had: every writable member. */
|
|
107
|
-
function restoreEffect(next, saved) {
|
|
108
|
-
for (const name of writableAccessors(next)) {
|
|
109
|
-
if (name in saved.effectValues && differs(saved.effectValues[name], next[name])) {
|
|
110
|
-
write(next, name, saved.effectValues[name]);
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
if (saved.timing != null) {
|
|
114
|
-
const timing = next.getTiming();
|
|
115
|
-
const changed = {};
|
|
116
|
-
for (const [field, value] of Object.entries(saved.timing)) {
|
|
117
|
-
if (differs(value, timing[field])) {
|
|
118
|
-
changed[field] = value;
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
if (Object.keys(changed).length > 0) {
|
|
122
|
-
next.updateTiming(changed);
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
if (saved.keyframes != null && JSON.stringify(saved.keyframes) !== JSON.stringify(next.getKeyframes())) {
|
|
126
|
-
next.setKeyframes(saved.keyframes);
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
/** Give `next` the state `saved` had, member by member. */
|
|
131
|
-
function restore(next, saved) {
|
|
132
|
-
const effect = next.effect;
|
|
133
|
-
if (effect != null) {
|
|
134
|
-
restoreEffect(effect, saved);
|
|
135
|
-
}
|
|
136
|
-
const current = next;
|
|
137
|
-
for (const name of ['timeline', 'rangeStart', 'rangeEnd']) {
|
|
138
|
-
if (name in saved.values && differs(saved.values[name], current[name])) {
|
|
139
|
-
write(next, name, saved.values[name]);
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
for (const name of writableAccessors(next)) {
|
|
143
|
-
if (!ORDERED.has(name) && name in saved.values && differs(saved.values[name], current[name])) {
|
|
144
|
-
write(next, name, saved.values[name]);
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
if (saved.replaceState === 'persisted' && next.replaceState !== 'persisted') {
|
|
148
|
-
next.persist();
|
|
149
|
-
}
|
|
150
|
-
const rate = saved.values.playbackRate;
|
|
151
|
-
if (typeof rate === 'number' && rate !== next.playbackRate) {
|
|
152
|
-
next.playbackRate = rate;
|
|
153
|
-
}
|
|
154
|
-
if (saved.playState === 'paused' && next.playState !== 'paused') {
|
|
155
|
-
next.pause();
|
|
156
|
-
} else if (saved.playState !== 'paused' && next.playState === 'paused') {
|
|
157
|
-
next.play();
|
|
158
|
-
}
|
|
159
|
-
// A running animation is anchored to its timeline by its start time, which
|
|
160
|
-
// carries its current time on exactly. A paused one has none and keeps its
|
|
161
|
-
// current time. A finished one holds its end: finishing it again holds the
|
|
162
|
-
// same time, though its start time is then counted from now, since script
|
|
163
|
-
// cannot set a start time and a held time together.
|
|
164
|
-
const start = saved.values.startTime;
|
|
165
|
-
const time = saved.values.currentTime;
|
|
166
|
-
if (saved.playState === 'finished') {
|
|
167
|
-
next.finish();
|
|
168
|
-
} else if (start != null) {
|
|
169
|
-
next.startTime = start;
|
|
170
|
-
} else if (time != null) {
|
|
171
|
-
next.currentTime = time;
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
/** Resume a cancelled CSS transition with a script animation in its state. */
|
|
176
|
-
function resumeTransition(saved) {
|
|
177
|
-
if (saved.target == null || saved.keyframes == null) {
|
|
178
|
-
return;
|
|
179
|
-
}
|
|
180
|
-
const replacement = saved.target.animate(saved.keyframes, {
|
|
181
|
-
pseudoElement: saved.pseudoElement ?? undefined
|
|
182
|
-
});
|
|
183
|
-
restore(replacement, saved);
|
|
184
|
-
}
|
|
185
|
-
function isTransition(animation) {
|
|
186
|
-
return typeof CSSTransition !== 'undefined' && animation instanceof CSSTransition;
|
|
187
|
-
}
|
|
25
|
+
import { restoreAnimations, saveAnimation } from "../motion/carryAnimations.js";
|
|
188
26
|
|
|
189
27
|
/**
|
|
190
28
|
* Run `reset`, which takes `root` out of rendering and back, and put every
|
|
191
29
|
* CSS animation and transition of `root` and its subtree back in the state it
|
|
192
|
-
* was in before.
|
|
193
|
-
* element, pseudo-element and name, in order, and then by name alone (an
|
|
194
|
-
* effect script moved to another element or pseudo-element); a recreated
|
|
195
|
-
* animation with no predecessor (an entry animation that had already played
|
|
196
|
-
* and been dropped) is finished.
|
|
30
|
+
* was in before.
|
|
197
31
|
*/
|
|
198
32
|
export function preserveAnimations(root, reset) {
|
|
199
33
|
if (typeof root.getAnimations !== 'function') {
|
|
@@ -203,43 +37,7 @@ export function preserveAnimations(root, reset) {
|
|
|
203
37
|
const before = root.getAnimations({
|
|
204
38
|
subtree: true
|
|
205
39
|
});
|
|
206
|
-
const saved = before.map(
|
|
40
|
+
const saved = before.map(saveAnimation);
|
|
207
41
|
reset();
|
|
208
|
-
|
|
209
|
-
subtree: true
|
|
210
|
-
});
|
|
211
|
-
const current = new Set(after);
|
|
212
|
-
const survivors = new Set(before);
|
|
213
|
-
const cancelled = [];
|
|
214
|
-
for (const state of saved) {
|
|
215
|
-
if (current.has(state.animation)) {
|
|
216
|
-
continue;
|
|
217
|
-
}
|
|
218
|
-
if (isTransition(state.animation)) {
|
|
219
|
-
resumeTransition(state);
|
|
220
|
-
} else {
|
|
221
|
-
cancelled.push(state);
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
const recreated = after.filter(animation => !survivors.has(animation));
|
|
225
|
-
const unmatched = [];
|
|
226
|
-
for (const animation of recreated) {
|
|
227
|
-
const effect = animation.effect;
|
|
228
|
-
const name = animation.animationName ?? '';
|
|
229
|
-
const index = cancelled.findIndex(state => state.name === name && state.target === (effect?.target ?? null) && state.pseudoElement === (effect?.pseudoElement ?? null));
|
|
230
|
-
if (index === -1) {
|
|
231
|
-
unmatched.push(animation);
|
|
232
|
-
} else {
|
|
233
|
-
restore(animation, cancelled.splice(index, 1)[0]);
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
for (const animation of unmatched) {
|
|
237
|
-
const name = animation.animationName ?? '';
|
|
238
|
-
const index = cancelled.findIndex(state => state.name === name);
|
|
239
|
-
if (index === -1) {
|
|
240
|
-
animation.finish();
|
|
241
|
-
} else {
|
|
242
|
-
restore(animation, cancelled.splice(index, 1)[0]);
|
|
243
|
-
}
|
|
244
|
-
}
|
|
42
|
+
restoreAnimations(root, saved, new Set(before));
|
|
245
43
|
}
|
|
@@ -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":"Lightbox.d.ts","sourceRoot":"","sources":["../../src/Lightbox/Lightbox.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAOL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AASf,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"Lightbox.d.ts","sourceRoot":"","sources":["../../src/Lightbox/Lightbox.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAOL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AASf,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAwB5C;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,OAAO,CAAC;AAElD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,uBAAuB;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,gEAAgE;IAChE,GAAG,EAAE,MAAM,CAAC;IACZ,iDAAiD;IACjD,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB;;;OAGG;IACH,IAAI,CAAC,EAAE,iBAAiB,CAAC;CAC1B;AAED,MAAM,WAAW,aAAc,SAAQ,SAAS,CAAC,iBAAiB,CAAC;IACjE,+CAA+C;IAC/C,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACnC;;OAEG;IACH,MAAM,EAAE,OAAO,CAAC;IAChB;;;OAGG;IACH,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACxC;;;OAGG;IACH,KAAK,EAAE,aAAa,GAAG,aAAa,EAAE,CAAC;IACvC;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAmKD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,wBAAgB,QAAQ,CAAC,EACvB,MAAM,EACN,YAAY,EACZ,KAAK,EACL,KAAK,EAAE,eAAe,EACtB,YAAgB,EAChB,aAAa,EACb,OAAe,EACf,WAAmB,EACnB,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,aAAa,EACxB,GAAG,KAAK,EACT,EAAE,aAAa,sCA2ef;yBA3fe,QAAQ"}
|
|
@@ -37,6 +37,7 @@ import { ModalAnnounceProvider } from "../hooks/ModalAnnounceProvider.js";
|
|
|
37
37
|
import { overlayPaddingReset } from "../Layout/overlayPaddingReset.stylex.js";
|
|
38
38
|
import { LayerDepthProvider } from "../Layer/LayerDepthContext.js";
|
|
39
39
|
import { useLayerDismissal } from "../Layer/useLayerDismissal.js";
|
|
40
|
+
import { useFocusRegionContainment } from "../hooks/useFocusTrap.js";
|
|
40
41
|
import { useMergedRefs } from "../hooks/useMergedRefs.js";
|
|
41
42
|
import { isRtlElement } from "../hooks/isRtlElement.js";
|
|
42
43
|
import { registerEnglishFallback, useComponentTranslator } from "../i18n/useComponentTranslator.js";
|
|
@@ -218,6 +219,9 @@ export function Lightbox({
|
|
|
218
219
|
const t = useComponentTranslator();
|
|
219
220
|
const dialogRef = useRef(null);
|
|
220
221
|
const mergedDialogRef = useMergedRefs(ref, dialogRef);
|
|
222
|
+
// Native showModal() lets Tab leave for the browser's own UI, so the shared
|
|
223
|
+
// module wraps it.
|
|
224
|
+
useFocusRegionContainment(dialogRef, isOpen);
|
|
221
225
|
const containerRef = useRef(null);
|
|
222
226
|
const imageWrapperRef = useRef(null);
|
|
223
227
|
const triggerElementRef = useRef(null);
|
|
@@ -216,7 +216,7 @@ export function MetadataList({
|
|
|
216
216
|
"aria-expanded": isShowAll,
|
|
217
217
|
onClick: () => setIsShowAll(prev => !prev),
|
|
218
218
|
...{
|
|
219
|
-
className: "xjyslct xjbqb8w xc342km xng3xce x15nmkw0 x1ypdohk x16khyan
|
|
219
|
+
className: "xjyslct xjbqb8w xc342km xng3xce x15nmkw0 x1ypdohk x16khyan xjse4m1 xjm74w1 xw6l6zx x1e4wzip xjb2p0i x1yc453h xqcrz7y"
|
|
220
220
|
},
|
|
221
221
|
children: isShowAll ? t('@astryx.metadataList.showLess') : t('@astryx.metadataList.showMore')
|
|
222
222
|
})]
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @file MobileNav.tsx
|
|
3
|
-
* @input Uses React, useEffect, useRef, useCallback, ReactNode, StyleX
|
|
3
|
+
* @input Uses React, useEffect, useRef, useCallback, ReactNode, StyleX and
|
|
4
|
+
* the Layer module's entrance hold
|
|
4
5
|
* @output Exports MobileNav component and MobileNavProps
|
|
5
6
|
* @position Core implementation; consumed by index.ts
|
|
6
7
|
*
|
|
@@ -34,6 +35,7 @@
|
|
|
34
35
|
* - /packages/core/src/MobileNav/index.ts (exports if types change)
|
|
35
36
|
* - /packages/core/src/Layer/useLayerDismissal.ts (dismissal stack)
|
|
36
37
|
* - /packages/core/src/hooks/useScrollLock.ts (the page's scroll lock)
|
|
38
|
+
* - /packages/core/src/MobileNav/MobileNavTouchPresentation.test.tsx (touch)
|
|
37
39
|
* - /packages/cli/assets/templates/blocks/components/MobileNav/ (showcase blocks)
|
|
38
40
|
*/
|
|
39
41
|
import { type ReactNode } from 'react';
|
|
@@ -47,6 +49,14 @@ import type { BaseProps } from '../BaseProps.js';
|
|
|
47
49
|
* own scheduled `dialog.close()` has a chance to run (#5701).
|
|
48
50
|
*/
|
|
49
51
|
export declare const MAX_CLOSE_DELAY_MS = 250;
|
|
52
|
+
/**
|
|
53
|
+
* Longest the drawer slides in or out for, in ms. Both run for the theme's
|
|
54
|
+
* `--duration-medium`: 410 ms by default, and at most 545 ms on the default
|
|
55
|
+
* scale (`--duration-medium-max`). The slide-out keeps playing after the
|
|
56
|
+
* dialog closes, while the dialog's `display` transition keeps it rendered.
|
|
57
|
+
* The touch hold on the slide-in ends by this time.
|
|
58
|
+
*/
|
|
59
|
+
export declare const MAX_EXIT_MS = 550;
|
|
50
60
|
/**
|
|
51
61
|
* Shortest duration in a `transition-duration` list, in ms; null if unreadable.
|
|
52
62
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MobileNav.d.ts","sourceRoot":"","sources":["../../src/MobileNav/MobileNav.tsx"],"names":[],"mappings":"AAIA
|
|
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"}
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* @file MobileNav.tsx
|
|
7
|
-
* @input Uses React, useEffect, useRef, useCallback, ReactNode, StyleX
|
|
7
|
+
* @input Uses React, useEffect, useRef, useCallback, ReactNode, StyleX and
|
|
8
|
+
* the Layer module's entrance hold
|
|
8
9
|
* @output Exports MobileNav component and MobileNavProps
|
|
9
10
|
* @position Core implementation; consumed by index.ts
|
|
10
11
|
*
|
|
@@ -38,6 +39,7 @@
|
|
|
38
39
|
* - /packages/core/src/MobileNav/index.ts (exports if types change)
|
|
39
40
|
* - /packages/core/src/Layer/useLayerDismissal.ts (dismissal stack)
|
|
40
41
|
* - /packages/core/src/hooks/useScrollLock.ts (the page's scroll lock)
|
|
42
|
+
* - /packages/core/src/MobileNav/MobileNavTouchPresentation.test.tsx (touch)
|
|
41
43
|
* - /packages/cli/assets/templates/blocks/components/MobileNav/ (showcase blocks)
|
|
42
44
|
*/
|
|
43
45
|
import { useCallback, useEffect, useId, useMemo, useRef, useState } from 'react';
|
|
@@ -48,6 +50,7 @@ import { Button } from "../Button/index.js";
|
|
|
48
50
|
import { Icon } from "../Icon/index.js";
|
|
49
51
|
import { Heading } from "../Heading/Heading.js";
|
|
50
52
|
import { useAppShellMobile } from "../AppShell/AppShellMobileContext.js";
|
|
53
|
+
import { holdEntranceInput } from "../Layer/holdEntranceInput.js";
|
|
51
54
|
import { mergeProps, composeEventHandlers } from "../utils/index.js";
|
|
52
55
|
import { layerTextReset } from "../Layer/layerTextReset.stylex.js";
|
|
53
56
|
import { layerStructureReset } from "../Layer/layerStructureReset.stylex.js";
|
|
@@ -60,6 +63,7 @@ import { useLayerDismissal } from "../Layer/useLayerDismissal.js";
|
|
|
60
63
|
import { themeProps } from "../utils/themeProps.js";
|
|
61
64
|
import { useMergedRefs } from "../hooks/useMergedRefs.js";
|
|
62
65
|
import { useScrollLock } from "../hooks/useScrollLock.js";
|
|
66
|
+
import { useFocusRegionContainment } from "../hooks/useFocusTrap.js";
|
|
63
67
|
import { registerEnglishFallback, useComponentTranslator } from "../i18n/useComponentTranslator.js";
|
|
64
68
|
import english from "../i18n/generated-english/MobileNav/MobileNav.generated.js";
|
|
65
69
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
@@ -177,6 +181,14 @@ const dynamicStyles = {
|
|
|
177
181
|
* own scheduled `dialog.close()` has a chance to run (#5701).
|
|
178
182
|
*/
|
|
179
183
|
export const MAX_CLOSE_DELAY_MS = 250;
|
|
184
|
+
/**
|
|
185
|
+
* Longest the drawer slides in or out for, in ms. Both run for the theme's
|
|
186
|
+
* `--duration-medium`: 410 ms by default, and at most 545 ms on the default
|
|
187
|
+
* scale (`--duration-medium-max`). The slide-out keeps playing after the
|
|
188
|
+
* dialog closes, while the dialog's `display` transition keeps it rendered.
|
|
189
|
+
* The touch hold on the slide-in ends by this time.
|
|
190
|
+
*/
|
|
191
|
+
export const MAX_EXIT_MS = 550;
|
|
180
192
|
/** Fraction of the hold to close at, so the close never lands on its boundary. */
|
|
181
193
|
const CLOSE_WITHIN_HOLD = 0.6;
|
|
182
194
|
|
|
@@ -317,7 +329,15 @@ export function MobileNav({
|
|
|
317
329
|
}
|
|
318
330
|
}), [onOpenChangeProp, appShellMobile]);
|
|
319
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);
|
|
336
|
+
const drawerRef = useRef(null);
|
|
320
337
|
const closeTimeoutRef = useRef(null);
|
|
338
|
+
// The input hold on the drawer's layer while it slides in under a coarse
|
|
339
|
+
// primary pointer. It is null under a fine one and once the slide-in ends.
|
|
340
|
+
const releaseHoldRef = useRef(null);
|
|
321
341
|
// Element that was focused when the drawer opened; focus goes back to it
|
|
322
342
|
// once the native dialog has closed (see closeAndRestoreFocus).
|
|
323
343
|
const triggerElementRef = useRef(null);
|
|
@@ -376,6 +396,8 @@ export function MobileNav({
|
|
|
376
396
|
return;
|
|
377
397
|
}
|
|
378
398
|
if (isOpen) {
|
|
399
|
+
releaseHoldRef.current?.();
|
|
400
|
+
releaseHoldRef.current = null;
|
|
379
401
|
if (!dialog.open) {
|
|
380
402
|
// Capture the opener before showModal() pulls focus into the top
|
|
381
403
|
// layer. Only on the transition into open: a reopen while the delayed
|
|
@@ -384,7 +406,16 @@ export function MobileNav({
|
|
|
384
406
|
triggerElementRef.current = document.activeElement;
|
|
385
407
|
dialog.showModal();
|
|
386
408
|
}
|
|
409
|
+
// Under a coarse primary pointer, nothing takes a touch until the
|
|
410
|
+
// slide-in ends, at most MAX_EXIT_MS in. A close holds nothing, because
|
|
411
|
+
// only an entrance is held. Under a fine one, nothing is held.
|
|
412
|
+
releaseHoldRef.current = holdEntranceInput(dialog, {
|
|
413
|
+
entrance: drawerRef.current,
|
|
414
|
+
capMs: MAX_EXIT_MS
|
|
415
|
+
});
|
|
387
416
|
} else if (dialog.open) {
|
|
417
|
+
releaseHoldRef.current?.();
|
|
418
|
+
releaseHoldRef.current = null;
|
|
388
419
|
closeTimeoutRef.current = setTimeout(() => {
|
|
389
420
|
closeAndRestoreFocus(dialog, triggerElementRef);
|
|
390
421
|
setIsCloseHeld(false);
|
|
@@ -399,6 +430,10 @@ export function MobileNav({
|
|
|
399
430
|
clearTimeout(closeTimeoutRef.current);
|
|
400
431
|
closeTimeoutRef.current = null;
|
|
401
432
|
}
|
|
433
|
+
// The hold this run took ends with it: a reopen, a close or an
|
|
434
|
+
// unmount mid-slide never leaves input blocked.
|
|
435
|
+
releaseHoldRef.current?.();
|
|
436
|
+
releaseHoldRef.current = null;
|
|
402
437
|
};
|
|
403
438
|
}, [isOpen]);
|
|
404
439
|
|
|
@@ -418,6 +453,8 @@ export function MobileNav({
|
|
|
418
453
|
useEffect(() => {
|
|
419
454
|
const dialog = dialogRef.current;
|
|
420
455
|
return () => {
|
|
456
|
+
releaseHoldRef.current?.();
|
|
457
|
+
releaseHoldRef.current = null;
|
|
421
458
|
if (dialog?.open) {
|
|
422
459
|
closeAndRestoreFocus(dialog, triggerElementRef);
|
|
423
460
|
}
|
|
@@ -486,6 +523,7 @@ export function MobileNav({
|
|
|
486
523
|
children: /*#__PURE__*/_jsx(LayerDepthProvider, {
|
|
487
524
|
children: /*#__PURE__*/_jsx(LayerContentBoundary, {
|
|
488
525
|
children: /*#__PURE__*/_jsxs("div", {
|
|
526
|
+
ref: drawerRef,
|
|
489
527
|
tabIndex: -1,
|
|
490
528
|
...stylex.props(styles.drawer, dynamicStyles.width(width), isStart && styles.drawerStart, isStart && isOpen && styles.drawerStartOpen, !isStart && styles.drawerEnd, !isStart && isOpen && styles.drawerEndOpen),
|
|
491
529
|
children: [/*#__PURE__*/_jsxs("div", {
|
|
@@ -65,9 +65,11 @@ export interface MoreMenuProps extends Pick<BaseProps, 'xstyle' | 'className' |
|
|
|
65
65
|
*/
|
|
66
66
|
alignment?: LayerAlignment;
|
|
67
67
|
/**
|
|
68
|
-
* Menu presentation policy. `adaptive` uses a
|
|
69
|
-
* coarse-pointer viewports and an anchored popover
|
|
70
|
-
*
|
|
68
|
+
* Menu presentation policy, forwarded to DropdownMenu. `adaptive` uses a
|
|
69
|
+
* BottomSheet on compact coarse-pointer viewports and an anchored popover
|
|
70
|
+
* elsewhere. Omitted, the menu is the anchored popover, and the finger that
|
|
71
|
+
* opened it follows UIMenu's handoff on every device. `'popover'` pins the
|
|
72
|
+
* pointer behavior on every device.
|
|
71
73
|
*/
|
|
72
74
|
presentation?: DropdownMenuPresentation;
|
|
73
75
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MoreMenu.d.ts","sourceRoot":"","sources":["../../src/MoreMenu/MoreMenu.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,OAAO,CAAC;AAIrC,OAAO,KAAK,EACV,kBAAkB,EAClB,wBAAwB,EACzB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAC,cAAc,EAAE,cAAc,EAAC,MAAM,UAAU,CAAC;AAC7D,OAAO,KAAK,EAAC,aAAa,EAAE,UAAU,EAAC,MAAM,WAAW,CAAC;AACzD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAU5C,MAAM,WAAW,aAAc,SAAQ,IAAI,CACzC,SAAS,EACT,QAAQ,GAAG,WAAW,GAAG,OAAO,CACjC;IACC,0CAA0C;IAC1C,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAEnC;;;OAGG;IACH,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAE5B;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,OAAO,CAAC,EAAE,aAAa,CAAC;IAExB;;;OAGG;IACH,IAAI,CAAC,EAAE,UAAU,CAAC;IAElB;;;OAGG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;IAEjB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;;OAIG;IACH,SAAS,CAAC,EAAE,cAAc,CAAC;IAE3B;;;;OAIG;IACH,SAAS,CAAC,EAAE,cAAc,CAAC;IAE3B
|
|
1
|
+
{"version":3,"file":"MoreMenu.d.ts","sourceRoot":"","sources":["../../src/MoreMenu/MoreMenu.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,OAAO,CAAC;AAIrC,OAAO,KAAK,EACV,kBAAkB,EAClB,wBAAwB,EACzB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAC,cAAc,EAAE,cAAc,EAAC,MAAM,UAAU,CAAC;AAC7D,OAAO,KAAK,EAAC,aAAa,EAAE,UAAU,EAAC,MAAM,WAAW,CAAC;AACzD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAU5C,MAAM,WAAW,aAAc,SAAQ,IAAI,CACzC,SAAS,EACT,QAAQ,GAAG,WAAW,GAAG,OAAO,CACjC;IACC,0CAA0C;IAC1C,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAEnC;;;OAGG;IACH,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAE5B;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,OAAO,CAAC,EAAE,aAAa,CAAC;IAExB;;;OAGG;IACH,IAAI,CAAC,EAAE,UAAU,CAAC;IAElB;;;OAGG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;IAEjB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;;OAIG;IACH,SAAS,CAAC,EAAE,cAAc,CAAC;IAE3B;;;;OAIG;IACH,SAAS,CAAC,EAAE,cAAc,CAAC;IAE3B;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,wBAAwB,CAAC;IAExC;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAEzC,sCAAsC;IACtC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,QAAQ,CAAC,EACvB,KAAK,EACL,KAAK,EAAE,cAAc,EACrB,OAAiB,EACjB,IAAI,EAAE,QAAQ,EACd,IAAI,EACJ,UAAkB,EAClB,SAAS,EACT,SAAS,EACT,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,MAAM,EACN,SAAS,EAAE,aAAa,EACxB,KAAK,EACL,aAAa,EAAE,MAAM,EACrB,GAAG,GACJ,EAAE,aAAa,+BAmCf;yBApDe,QAAQ"}
|
|
@@ -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"}
|