@cdx-ui/primitives 0.0.1-beta.159 → 0.0.1-beta.160
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/lib/commonjs/dialog/DialogContent.js +17 -3
- package/lib/commonjs/dialog/DialogContent.js.map +1 -1
- package/lib/commonjs/dialog/DialogPopup.js +5 -1
- package/lib/commonjs/dialog/DialogPopup.js.map +1 -1
- package/lib/commonjs/index.js +54 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/menu/MenuCheckboxItem.js +42 -0
- package/lib/commonjs/menu/MenuCheckboxItem.js.map +1 -0
- package/lib/commonjs/menu/MenuItem.js +142 -0
- package/lib/commonjs/menu/MenuItem.js.map +1 -0
- package/lib/commonjs/menu/MenuOverlayRoot.js +80 -0
- package/lib/commonjs/menu/MenuOverlayRoot.js.map +1 -0
- package/lib/commonjs/menu/MenuPopup.js +78 -0
- package/lib/commonjs/menu/MenuPopup.js.map +1 -0
- package/lib/commonjs/menu/MenuRadioGroup.js +48 -0
- package/lib/commonjs/menu/MenuRadioGroup.js.map +1 -0
- package/lib/commonjs/menu/MenuRadioItem.js +32 -0
- package/lib/commonjs/menu/MenuRadioItem.js.map +1 -0
- package/lib/commonjs/menu/MenuRoot.js +139 -0
- package/lib/commonjs/menu/MenuRoot.js.map +1 -0
- package/lib/commonjs/menu/MenuTrigger.js +59 -0
- package/lib/commonjs/menu/MenuTrigger.js.map +1 -0
- package/lib/commonjs/menu/context.js +36 -0
- package/lib/commonjs/menu/context.js.map +1 -0
- package/lib/commonjs/menu/index.js +118 -0
- package/lib/commonjs/menu/index.js.map +1 -0
- package/lib/commonjs/menu/overlayContext.js +30 -0
- package/lib/commonjs/menu/overlayContext.js.map +1 -0
- package/lib/commonjs/menu/types.js +6 -0
- package/lib/commonjs/menu/types.js.map +1 -0
- package/lib/commonjs/menu/useMenuNavigation.js +87 -0
- package/lib/commonjs/menu/useMenuNavigation.js.map +1 -0
- package/lib/commonjs/menu/useMenuOverlayLifecycle.js +68 -0
- package/lib/commonjs/menu/useMenuOverlayLifecycle.js.map +1 -0
- package/lib/commonjs/menu/useMenuTrigger.js +115 -0
- package/lib/commonjs/menu/useMenuTrigger.js.map +1 -0
- package/lib/commonjs/overlay/OverlayContainer.js +2 -3
- package/lib/commonjs/overlay/OverlayContainer.js.map +1 -1
- package/lib/commonjs/overlay/OverlayStack.js +125 -0
- package/lib/commonjs/overlay/OverlayStack.js.map +1 -0
- package/lib/commonjs/overlay/constants.js +7 -1
- package/lib/commonjs/overlay/constants.js.map +1 -1
- package/lib/commonjs/overlay/getAnchoredOverlayPosition.js +188 -0
- package/lib/commonjs/overlay/getAnchoredOverlayPosition.js.map +1 -0
- package/lib/commonjs/overlay/index.js +39 -0
- package/lib/commonjs/overlay/index.js.map +1 -1
- package/lib/commonjs/overlay/useAnchoredOverlay.js +127 -0
- package/lib/commonjs/overlay/useAnchoredOverlay.js.map +1 -0
- package/lib/commonjs/overlay/useDismissOverlay.js +8 -1
- package/lib/commonjs/overlay/useDismissOverlay.js.map +1 -1
- package/lib/commonjs/overlay/useDismissOverlay.web.js +11 -3
- package/lib/commonjs/overlay/useDismissOverlay.web.js.map +1 -1
- package/lib/commonjs/overlay/useEscapeKey.js +8 -1
- package/lib/commonjs/overlay/useEscapeKey.js.map +1 -1
- package/lib/commonjs/overlay/useEscapeKey.web.js +11 -3
- package/lib/commonjs/overlay/useEscapeKey.web.js.map +1 -1
- package/lib/commonjs/overlay/useOverlayPosition.js +16 -7
- package/lib/commonjs/overlay/useOverlayPosition.js.map +1 -1
- package/lib/commonjs/portal/portal.js +86 -63
- package/lib/commonjs/portal/portal.js.map +1 -1
- package/lib/commonjs/select/SelectContent.js +23 -11
- package/lib/commonjs/select/SelectContent.js.map +1 -1
- package/lib/commonjs/select/useListboxNavigation.js +10 -11
- package/lib/commonjs/select/useListboxNavigation.js.map +1 -1
- package/lib/commonjs/tooltip/TooltipContent.js +25 -24
- package/lib/commonjs/tooltip/TooltipContent.js.map +1 -1
- package/lib/commonjs/tooltip/getTooltipPosition.js +37 -84
- package/lib/commonjs/tooltip/getTooltipPosition.js.map +1 -1
- package/lib/module/dialog/DialogContent.js +18 -4
- package/lib/module/dialog/DialogContent.js.map +1 -1
- package/lib/module/dialog/DialogPopup.js +5 -1
- package/lib/module/dialog/DialogPopup.js.map +1 -1
- package/lib/module/index.js +2 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/menu/MenuCheckboxItem.js +38 -0
- package/lib/module/menu/MenuCheckboxItem.js.map +1 -0
- package/lib/module/menu/MenuItem.js +138 -0
- package/lib/module/menu/MenuItem.js.map +1 -0
- package/lib/module/menu/MenuOverlayRoot.js +76 -0
- package/lib/module/menu/MenuOverlayRoot.js.map +1 -0
- package/lib/module/menu/MenuPopup.js +74 -0
- package/lib/module/menu/MenuPopup.js.map +1 -0
- package/lib/module/menu/MenuRadioGroup.js +44 -0
- package/lib/module/menu/MenuRadioGroup.js.map +1 -0
- package/lib/module/menu/MenuRadioItem.js +28 -0
- package/lib/module/menu/MenuRadioItem.js.map +1 -0
- package/lib/module/menu/MenuRoot.js +135 -0
- package/lib/module/menu/MenuRoot.js.map +1 -0
- package/lib/module/menu/MenuTrigger.js +55 -0
- package/lib/module/menu/MenuTrigger.js.map +1 -0
- package/lib/module/menu/context.js +27 -0
- package/lib/module/menu/context.js.map +1 -0
- package/lib/module/menu/index.js +13 -0
- package/lib/module/menu/index.js.map +1 -0
- package/lib/module/menu/overlayContext.js +24 -0
- package/lib/module/menu/overlayContext.js.map +1 -0
- package/lib/module/menu/types.js +4 -0
- package/lib/module/menu/types.js.map +1 -0
- package/lib/module/menu/useMenuNavigation.js +84 -0
- package/lib/module/menu/useMenuNavigation.js.map +1 -0
- package/lib/module/menu/useMenuOverlayLifecycle.js +63 -0
- package/lib/module/menu/useMenuOverlayLifecycle.js.map +1 -0
- package/lib/module/menu/useMenuTrigger.js +111 -0
- package/lib/module/menu/useMenuTrigger.js.map +1 -0
- package/lib/module/overlay/OverlayContainer.js +2 -3
- package/lib/module/overlay/OverlayContainer.js.map +1 -1
- package/lib/module/overlay/OverlayStack.js +119 -0
- package/lib/module/overlay/OverlayStack.js.map +1 -0
- package/lib/module/overlay/constants.js +6 -0
- package/lib/module/overlay/constants.js.map +1 -1
- package/lib/module/overlay/getAnchoredOverlayPosition.js +183 -0
- package/lib/module/overlay/getAnchoredOverlayPosition.js.map +1 -0
- package/lib/module/overlay/index.js +4 -1
- package/lib/module/overlay/index.js.map +1 -1
- package/lib/module/overlay/useAnchoredOverlay.js +123 -0
- package/lib/module/overlay/useAnchoredOverlay.js.map +1 -0
- package/lib/module/overlay/useDismissOverlay.js +9 -1
- package/lib/module/overlay/useDismissOverlay.js.map +1 -1
- package/lib/module/overlay/useDismissOverlay.web.js +11 -3
- package/lib/module/overlay/useDismissOverlay.web.js.map +1 -1
- package/lib/module/overlay/useEscapeKey.js +9 -1
- package/lib/module/overlay/useEscapeKey.js.map +1 -1
- package/lib/module/overlay/useEscapeKey.web.js +11 -3
- package/lib/module/overlay/useEscapeKey.web.js.map +1 -1
- package/lib/module/overlay/useOverlayPosition.js +16 -7
- package/lib/module/overlay/useOverlayPosition.js.map +1 -1
- package/lib/module/portal/portal.js +86 -64
- package/lib/module/portal/portal.js.map +1 -1
- package/lib/module/select/SelectContent.js +25 -13
- package/lib/module/select/SelectContent.js.map +1 -1
- package/lib/module/select/useListboxNavigation.js +10 -11
- package/lib/module/select/useListboxNavigation.js.map +1 -1
- package/lib/module/tooltip/TooltipContent.js +30 -29
- package/lib/module/tooltip/TooltipContent.js.map +1 -1
- package/lib/module/tooltip/getTooltipPosition.js +37 -84
- package/lib/module/tooltip/getTooltipPosition.js.map +1 -1
- package/lib/typescript/dialog/DialogContent.d.ts.map +1 -1
- package/lib/typescript/dialog/DialogPopup.d.ts.map +1 -1
- package/lib/typescript/index.d.ts +2 -1
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/menu/MenuCheckboxItem.d.ts +6 -0
- package/lib/typescript/menu/MenuCheckboxItem.d.ts.map +1 -0
- package/lib/typescript/menu/MenuItem.d.ts +8 -0
- package/lib/typescript/menu/MenuItem.d.ts.map +1 -0
- package/lib/typescript/menu/MenuOverlayRoot.d.ts +8 -0
- package/lib/typescript/menu/MenuOverlayRoot.d.ts.map +1 -0
- package/lib/typescript/menu/MenuPopup.d.ts +8 -0
- package/lib/typescript/menu/MenuPopup.d.ts.map +1 -0
- package/lib/typescript/menu/MenuRadioGroup.d.ts +8 -0
- package/lib/typescript/menu/MenuRadioGroup.d.ts.map +1 -0
- package/lib/typescript/menu/MenuRadioItem.d.ts +6 -0
- package/lib/typescript/menu/MenuRadioItem.d.ts.map +1 -0
- package/lib/typescript/menu/MenuRoot.d.ts +8 -0
- package/lib/typescript/menu/MenuRoot.d.ts.map +1 -0
- package/lib/typescript/menu/MenuTrigger.d.ts +7 -0
- package/lib/typescript/menu/MenuTrigger.d.ts.map +1 -0
- package/lib/typescript/menu/context.d.ts +15 -0
- package/lib/typescript/menu/context.d.ts.map +1 -0
- package/lib/typescript/menu/index.d.ts +12 -0
- package/lib/typescript/menu/index.d.ts.map +1 -0
- package/lib/typescript/menu/overlayContext.d.ts +35 -0
- package/lib/typescript/menu/overlayContext.d.ts.map +1 -0
- package/lib/typescript/menu/types.d.ts +104 -0
- package/lib/typescript/menu/types.d.ts.map +1 -0
- package/lib/typescript/menu/useMenuNavigation.d.ts +16 -0
- package/lib/typescript/menu/useMenuNavigation.d.ts.map +1 -0
- package/lib/typescript/menu/useMenuOverlayLifecycle.d.ts +15 -0
- package/lib/typescript/menu/useMenuOverlayLifecycle.d.ts.map +1 -0
- package/lib/typescript/menu/useMenuTrigger.d.ts +35 -0
- package/lib/typescript/menu/useMenuTrigger.d.ts.map +1 -0
- package/lib/typescript/overlay/OverlayContainer.d.ts.map +1 -1
- package/lib/typescript/overlay/OverlayStack.d.ts +46 -0
- package/lib/typescript/overlay/OverlayStack.d.ts.map +1 -0
- package/lib/typescript/overlay/constants.d.ts +5 -0
- package/lib/typescript/overlay/constants.d.ts.map +1 -1
- package/lib/typescript/overlay/getAnchoredOverlayPosition.d.ts +45 -0
- package/lib/typescript/overlay/getAnchoredOverlayPosition.d.ts.map +1 -0
- package/lib/typescript/overlay/index.d.ts +5 -2
- package/lib/typescript/overlay/index.d.ts.map +1 -1
- package/lib/typescript/overlay/useAnchoredOverlay.d.ts +15 -0
- package/lib/typescript/overlay/useAnchoredOverlay.d.ts.map +1 -0
- package/lib/typescript/overlay/useDismissOverlay.d.ts +2 -1
- package/lib/typescript/overlay/useDismissOverlay.d.ts.map +1 -1
- package/lib/typescript/overlay/useDismissOverlay.web.d.ts +2 -1
- package/lib/typescript/overlay/useDismissOverlay.web.d.ts.map +1 -1
- package/lib/typescript/overlay/useEscapeKey.d.ts +2 -1
- package/lib/typescript/overlay/useEscapeKey.d.ts.map +1 -1
- package/lib/typescript/overlay/useEscapeKey.web.d.ts +2 -1
- package/lib/typescript/overlay/useEscapeKey.web.d.ts.map +1 -1
- package/lib/typescript/overlay/useOverlayPosition.d.ts +5 -1
- package/lib/typescript/overlay/useOverlayPosition.d.ts.map +1 -1
- package/lib/typescript/portal/portal.d.ts +3 -0
- package/lib/typescript/portal/portal.d.ts.map +1 -1
- package/lib/typescript/select/SelectContent.d.ts.map +1 -1
- package/lib/typescript/select/useListboxNavigation.d.ts.map +1 -1
- package/lib/typescript/tooltip/TooltipContent.d.ts.map +1 -1
- package/lib/typescript/tooltip/getTooltipPosition.d.ts +6 -8
- package/lib/typescript/tooltip/getTooltipPosition.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/dialog/DialogContent.tsx +16 -4
- package/src/dialog/DialogPopup.tsx +5 -1
- package/src/index.ts +23 -0
- package/src/menu/MenuCheckboxItem.tsx +51 -0
- package/src/menu/MenuItem.tsx +197 -0
- package/src/menu/MenuOverlayRoot.tsx +100 -0
- package/src/menu/MenuPopup.tsx +81 -0
- package/src/menu/MenuRadioGroup.tsx +48 -0
- package/src/menu/MenuRadioItem.tsx +32 -0
- package/src/menu/MenuRoot.tsx +190 -0
- package/src/menu/MenuTrigger.tsx +57 -0
- package/src/menu/context.tsx +38 -0
- package/src/menu/index.ts +36 -0
- package/src/menu/overlayContext.tsx +61 -0
- package/src/menu/types.ts +119 -0
- package/src/menu/useMenuNavigation.ts +102 -0
- package/src/menu/useMenuOverlayLifecycle.ts +77 -0
- package/src/menu/useMenuTrigger.ts +161 -0
- package/src/overlay/OverlayContainer.tsx +3 -1
- package/src/overlay/OverlayStack.tsx +202 -0
- package/src/overlay/constants.ts +6 -0
- package/src/overlay/getAnchoredOverlayPosition.ts +326 -0
- package/src/overlay/index.ts +29 -1
- package/src/overlay/useAnchoredOverlay.ts +153 -0
- package/src/overlay/useDismissOverlay.ts +10 -2
- package/src/overlay/useDismissOverlay.web.ts +9 -2
- package/src/overlay/useEscapeKey.ts +13 -1
- package/src/overlay/useEscapeKey.web.ts +13 -3
- package/src/overlay/useOverlayPosition.ts +35 -8
- package/src/portal/portal.tsx +109 -69
- package/src/select/SelectContent.tsx +29 -17
- package/src/select/useListboxNavigation.ts +12 -9
- package/src/tooltip/TooltipContent.tsx +32 -34
- package/src/tooltip/getTooltipPosition.ts +58 -125
|
@@ -1,8 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import { useOverlayStackRegistration } from './OverlayStack';
|
|
4
|
+
|
|
3
5
|
/**
|
|
4
6
|
* No-op on native — overlay dismissal is handled by backdrop press
|
|
5
7
|
* or the system back gesture / hardware button via Modal.
|
|
6
8
|
*/
|
|
7
|
-
export function useDismissOverlay(
|
|
9
|
+
export function useDismissOverlay(open, _contentRef, _excludeRefs, _onDismiss, options = {}) {
|
|
10
|
+
useOverlayStackRegistration({
|
|
11
|
+
active: open,
|
|
12
|
+
capabilities: ['outside'],
|
|
13
|
+
...options
|
|
14
|
+
});
|
|
15
|
+
}
|
|
8
16
|
//# sourceMappingURL=useDismissOverlay.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useDismissOverlay","
|
|
1
|
+
{"version":3,"names":["useOverlayStackRegistration","useDismissOverlay","open","_contentRef","_excludeRefs","_onDismiss","options","active","capabilities"],"sourceRoot":"../../../src","sources":["overlay/useDismissOverlay.ts"],"mappings":";;AACA,SAASA,2BAA2B,QAAmC,gBAAgB;;AAEvF;AACA;AACA;AACA;AACA,OAAO,SAASC,iBAAiBA,CAC/BC,IAAa,EACbC,WAA2B,EAC3BC,YAA8B,EAC9BC,UAAsB,EACtBC,OAA6B,GAAG,CAAC,CAAC,EAClC;EACAN,2BAA2B,CAAC;IAC1BO,MAAM,EAAEL,IAAI;IACZM,YAAY,EAAE,CAAC,SAAS,CAAC;IACzB,GAAGF;EACL,CAAC,CAAC;AACJ","ignoreList":[]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import { useEffect, useRef } from 'react';
|
|
4
|
+
import { useOverlayStackRegistration } from './OverlayStack';
|
|
4
5
|
function refContainsNode(ref, target) {
|
|
5
6
|
const current = ref.current;
|
|
6
7
|
if (!current || typeof current.contains !== 'function') {
|
|
@@ -14,11 +15,18 @@ function refContainsNode(ref, target) {
|
|
|
14
15
|
* focus moves to an element outside the overlay via keyboard.
|
|
15
16
|
* Events targeting `contentRef` or any of `excludeRefs` are ignored.
|
|
16
17
|
*/
|
|
17
|
-
export function useDismissOverlay(open, contentRef, excludeRefs, onDismiss) {
|
|
18
|
+
export function useDismissOverlay(open, contentRef, excludeRefs, onDismiss, options = {}) {
|
|
18
19
|
const onDismissRef = useRef(onDismiss);
|
|
19
20
|
onDismissRef.current = onDismiss;
|
|
20
21
|
const excludeRefsRef = useRef(excludeRefs);
|
|
21
22
|
excludeRefsRef.current = excludeRefs;
|
|
23
|
+
const {
|
|
24
|
+
isTopmost
|
|
25
|
+
} = useOverlayStackRegistration({
|
|
26
|
+
active: open,
|
|
27
|
+
capabilities: ['outside'],
|
|
28
|
+
...options
|
|
29
|
+
});
|
|
22
30
|
useEffect(() => {
|
|
23
31
|
if (!open) {
|
|
24
32
|
return;
|
|
@@ -35,7 +43,7 @@ export function useDismissOverlay(open, contentRef, excludeRefs, onDismiss) {
|
|
|
35
43
|
return false;
|
|
36
44
|
};
|
|
37
45
|
const dismissIfOutside = e => {
|
|
38
|
-
if (!isInsideOverlay(e.target)) {
|
|
46
|
+
if (isTopmost('outside') && !isInsideOverlay(e.target)) {
|
|
39
47
|
onDismissRef.current();
|
|
40
48
|
}
|
|
41
49
|
};
|
|
@@ -45,6 +53,6 @@ export function useDismissOverlay(open, contentRef, excludeRefs, onDismiss) {
|
|
|
45
53
|
document.removeEventListener('pointerdown', dismissIfOutside);
|
|
46
54
|
document.removeEventListener('focusin', dismissIfOutside);
|
|
47
55
|
};
|
|
48
|
-
}, [open, contentRef]);
|
|
56
|
+
}, [open, contentRef, isTopmost]);
|
|
49
57
|
}
|
|
50
58
|
//# sourceMappingURL=useDismissOverlay.web.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useEffect","useRef","refContainsNode","ref","target","current","contains","useDismissOverlay","open","contentRef","excludeRefs","onDismiss","onDismissRef","excludeRefsRef","isInsideOverlay","dismissIfOutside","e","document","addEventListener","removeEventListener"],"sourceRoot":"../../../src","sources":["overlay/useDismissOverlay.web.ts"],"mappings":";;AACA,SAASA,SAAS,EAAEC,MAAM,QAAQ,OAAO;
|
|
1
|
+
{"version":3,"names":["useEffect","useRef","useOverlayStackRegistration","refContainsNode","ref","target","current","contains","useDismissOverlay","open","contentRef","excludeRefs","onDismiss","options","onDismissRef","excludeRefsRef","isTopmost","active","capabilities","isInsideOverlay","dismissIfOutside","e","document","addEventListener","removeEventListener"],"sourceRoot":"../../../src","sources":["overlay/useDismissOverlay.web.ts"],"mappings":";;AACA,SAASA,SAAS,EAAEC,MAAM,QAAQ,OAAO;AACzC,SAASC,2BAA2B,QAAmC,gBAAgB;AAEvF,SAASC,eAAeA,CAACC,GAAuB,EAAEC,MAAY,EAAW;EACvE,MAAMC,OAAO,GAAGF,GAAG,CAACE,OAAwD;EAC5E,IAAI,CAACA,OAAO,IAAI,OAAOA,OAAO,CAACC,QAAQ,KAAK,UAAU,EAAE;IACtD,OAAO,KAAK;EACd;EACA,OAAOD,OAAO,CAACC,QAAQ,CAACF,MAAM,CAAC;AACjC;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASG,iBAAiBA,CAC/BC,IAAa,EACbC,UAA0B,EAC1BC,WAA6B,EAC7BC,SAAqB,EACrBC,OAA6B,GAAG,CAAC,CAAC,EAClC;EACA,MAAMC,YAAY,GAAGb,MAAM,CAACW,SAAS,CAAC;EACtCE,YAAY,CAACR,OAAO,GAAGM,SAAS;EAEhC,MAAMG,cAAc,GAAGd,MAAM,CAACU,WAAW,CAAC;EAC1CI,cAAc,CAACT,OAAO,GAAGK,WAAW;EACpC,MAAM;IAAEK;EAAU,CAAC,GAAGd,2BAA2B,CAAC;IAChDe,MAAM,EAAER,IAAI;IACZS,YAAY,EAAE,CAAC,SAAS,CAAC;IACzB,GAAGL;EACL,CAAC,CAAC;EAEFb,SAAS,CAAC,MAAM;IACd,IAAI,CAACS,IAAI,EAAE;MACT;IACF;IAEA,MAAMU,eAAe,GAAId,MAAY,IAAK;MACxC,IAAIF,eAAe,CAACO,UAAU,EAAEL,MAAM,CAAC,EAAE;QACvC,OAAO,IAAI;MACb;MACA,KAAK,MAAMD,GAAG,IAAIW,cAAc,CAACT,OAAO,EAAE;QACxC,IAAIH,eAAe,CAACC,GAAG,EAAEC,MAAM,CAAC,EAAE;UAChC,OAAO,IAAI;QACb;MACF;MACA,OAAO,KAAK;IACd,CAAC;IAED,MAAMe,gBAAgB,GAAIC,CAAQ,IAAK;MACrC,IAAIL,SAAS,CAAC,SAAS,CAAC,IAAI,CAACG,eAAe,CAACE,CAAC,CAAChB,MAAc,CAAC,EAAE;QAC9DS,YAAY,CAACR,OAAO,CAAC,CAAC;MACxB;IACF,CAAC;IAEDgB,QAAQ,CAACC,gBAAgB,CAAC,aAAa,EAAEH,gBAAgB,CAAC;IAC1DE,QAAQ,CAACC,gBAAgB,CAAC,SAAS,EAAEH,gBAAgB,CAAC;IACtD,OAAO,MAAM;MACXE,QAAQ,CAACE,mBAAmB,CAAC,aAAa,EAAEJ,gBAAgB,CAAC;MAC7DE,QAAQ,CAACE,mBAAmB,CAAC,SAAS,EAAEJ,gBAAgB,CAAC;IAC3D,CAAC;EACH,CAAC,EAAE,CAACX,IAAI,EAAEC,UAAU,EAAEM,SAAS,CAAC,CAAC;AACnC","ignoreList":[]}
|
|
@@ -1,8 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import { useOverlayStackRegistration } from './OverlayStack';
|
|
4
|
+
|
|
3
5
|
/**
|
|
4
6
|
* No-op on native — Escape key dismissal is not applicable.
|
|
5
7
|
* Native uses the system back gesture / hardware button via Modal.
|
|
6
8
|
*/
|
|
7
|
-
export function useEscapeKey(
|
|
9
|
+
export function useEscapeKey(open, _onEscape, options = {}) {
|
|
10
|
+
useOverlayStackRegistration({
|
|
11
|
+
active: open,
|
|
12
|
+
capabilities: ['escape'],
|
|
13
|
+
...options
|
|
14
|
+
});
|
|
15
|
+
}
|
|
8
16
|
//# sourceMappingURL=useEscapeKey.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useEscapeKey","
|
|
1
|
+
{"version":3,"names":["useOverlayStackRegistration","useEscapeKey","open","_onEscape","options","active","capabilities"],"sourceRoot":"../../../src","sources":["overlay/useEscapeKey.ts"],"mappings":";;AAAA,SAASA,2BAA2B,QAAmC,gBAAgB;;AAEvF;AACA;AACA;AACA;AACA,OAAO,SAASC,YAAYA,CAC1BC,IAAa,EACbC,SAAqB,EACrBC,OAA6B,GAAG,CAAC,CAAC,EAClC;EACAJ,2BAA2B,CAAC;IAC1BK,MAAM,EAAEH,IAAI;IACZI,YAAY,EAAE,CAAC,QAAQ,CAAC;IACxB,GAAGF;EACL,CAAC,CAAC;AACJ","ignoreList":[]}
|
|
@@ -1,20 +1,28 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import { useEffect, useRef } from 'react';
|
|
4
|
+
import { useOverlayStackRegistration } from './OverlayStack';
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* Closes an overlay when the user presses the Escape key.
|
|
7
8
|
* Web-only — native platforms use Modal's `onRequestClose` for back/dismiss.
|
|
8
9
|
*/
|
|
9
|
-
export function useEscapeKey(open, onEscape) {
|
|
10
|
+
export function useEscapeKey(open, onEscape, options = {}) {
|
|
10
11
|
const onEscapeRef = useRef(onEscape);
|
|
11
12
|
onEscapeRef.current = onEscape;
|
|
13
|
+
const {
|
|
14
|
+
isTopmost
|
|
15
|
+
} = useOverlayStackRegistration({
|
|
16
|
+
active: open,
|
|
17
|
+
capabilities: ['escape'],
|
|
18
|
+
...options
|
|
19
|
+
});
|
|
12
20
|
useEffect(() => {
|
|
13
21
|
if (!open) {
|
|
14
22
|
return;
|
|
15
23
|
}
|
|
16
24
|
const handleKeyDown = e => {
|
|
17
|
-
if (e.key === 'Escape') {
|
|
25
|
+
if (e.key === 'Escape' && isTopmost('escape')) {
|
|
18
26
|
onEscapeRef.current();
|
|
19
27
|
}
|
|
20
28
|
};
|
|
@@ -22,6 +30,6 @@ export function useEscapeKey(open, onEscape) {
|
|
|
22
30
|
return () => {
|
|
23
31
|
document.removeEventListener('keydown', handleKeyDown);
|
|
24
32
|
};
|
|
25
|
-
}, [open]);
|
|
33
|
+
}, [isTopmost, open]);
|
|
26
34
|
}
|
|
27
35
|
//# sourceMappingURL=useEscapeKey.web.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useEffect","useRef","useEscapeKey","open","onEscape","onEscapeRef","current","handleKeyDown","e","key","document","addEventListener","removeEventListener"],"sourceRoot":"../../../src","sources":["overlay/useEscapeKey.web.ts"],"mappings":";;AAAA,SAASA,SAAS,EAAEC,MAAM,QAAQ,OAAO;;
|
|
1
|
+
{"version":3,"names":["useEffect","useRef","useOverlayStackRegistration","useEscapeKey","open","onEscape","options","onEscapeRef","current","isTopmost","active","capabilities","handleKeyDown","e","key","document","addEventListener","removeEventListener"],"sourceRoot":"../../../src","sources":["overlay/useEscapeKey.web.ts"],"mappings":";;AAAA,SAASA,SAAS,EAAEC,MAAM,QAAQ,OAAO;AACzC,SAASC,2BAA2B,QAAmC,gBAAgB;;AAEvF;AACA;AACA;AACA;AACA,OAAO,SAASC,YAAYA,CAC1BC,IAAa,EACbC,QAAoB,EACpBC,OAA6B,GAAG,CAAC,CAAC,EAClC;EACA,MAAMC,WAAW,GAAGN,MAAM,CAACI,QAAQ,CAAC;EACpCE,WAAW,CAACC,OAAO,GAAGH,QAAQ;EAC9B,MAAM;IAAEI;EAAU,CAAC,GAAGP,2BAA2B,CAAC;IAChDQ,MAAM,EAAEN,IAAI;IACZO,YAAY,EAAE,CAAC,QAAQ,CAAC;IACxB,GAAGL;EACL,CAAC,CAAC;EAEFN,SAAS,CAAC,MAAM;IACd,IAAI,CAACI,IAAI,EAAE;MACT;IACF;IAEA,MAAMQ,aAAa,GAAIC,CAAgB,IAAK;MAC1C,IAAIA,CAAC,CAACC,GAAG,KAAK,QAAQ,IAAIL,SAAS,CAAC,QAAQ,CAAC,EAAE;QAC7CF,WAAW,CAACC,OAAO,CAAC,CAAC;MACvB;IACF,CAAC;IAEDO,QAAQ,CAACC,gBAAgB,CAAC,SAAS,EAAEJ,aAAa,CAAC;IACnD,OAAO,MAAM;MACXG,QAAQ,CAACE,mBAAmB,CAAC,SAAS,EAAEL,aAAa,CAAC;IACxD,CAAC;EACH,CAAC,EAAE,CAACH,SAAS,EAAEL,IAAI,CAAC,CAAC;AACvB","ignoreList":[]}
|
|
@@ -48,27 +48,37 @@ const MIN_CONTENT_HEIGHT = 200;
|
|
|
48
48
|
*
|
|
49
49
|
* Respects safe-area insets provided via `OverlayInsetsProvider`.
|
|
50
50
|
*/
|
|
51
|
-
export function useOverlayPosition(anchorLayout) {
|
|
51
|
+
export function useOverlayPosition(anchorLayout, options) {
|
|
52
52
|
const {
|
|
53
|
+
width: viewportWidth,
|
|
53
54
|
height: viewportHeight
|
|
54
55
|
} = useWindowDimensions();
|
|
55
56
|
const {
|
|
56
57
|
top: insetTop,
|
|
57
|
-
bottom: insetBottom
|
|
58
|
+
bottom: insetBottom,
|
|
59
|
+
right: insetRight
|
|
58
60
|
} = useContext(OverlayInsetsContext);
|
|
61
|
+
const matchAnchorWidth = options?.matchAnchorWidth ?? true;
|
|
59
62
|
return useMemo(() => {
|
|
60
63
|
if (!anchorLayout) return null;
|
|
61
64
|
const anchorBottom = anchorLayout.y + anchorLayout.height;
|
|
62
65
|
const spaceBelow = viewportHeight - anchorBottom - insetBottom - SCREEN_EDGE_PADDING;
|
|
63
66
|
const spaceAbove = anchorLayout.y - insetTop - SCREEN_EDGE_PADDING;
|
|
64
67
|
const preferBelow = spaceBelow >= MIN_CONTENT_HEIGHT || spaceBelow >= spaceAbove;
|
|
68
|
+
const horizontalStyle = matchAnchorWidth ? {
|
|
69
|
+
left: anchorLayout.x,
|
|
70
|
+
width: anchorLayout.width
|
|
71
|
+
} : {
|
|
72
|
+
left: anchorLayout.x,
|
|
73
|
+
alignItems: 'flex-start',
|
|
74
|
+
maxWidth: Math.max(0, viewportWidth - anchorLayout.x - insetRight - SCREEN_EDGE_PADDING)
|
|
75
|
+
};
|
|
65
76
|
if (preferBelow) {
|
|
66
77
|
const maxHeight = Math.max(0, spaceBelow);
|
|
67
78
|
return {
|
|
68
79
|
style: {
|
|
80
|
+
...horizontalStyle,
|
|
69
81
|
top: anchorBottom + POPOVER_GAP,
|
|
70
|
-
left: anchorLayout.x,
|
|
71
|
-
width: anchorLayout.width,
|
|
72
82
|
maxHeight
|
|
73
83
|
},
|
|
74
84
|
maxHeight,
|
|
@@ -78,14 +88,13 @@ export function useOverlayPosition(anchorLayout) {
|
|
|
78
88
|
const maxHeight = Math.max(0, spaceAbove);
|
|
79
89
|
return {
|
|
80
90
|
style: {
|
|
91
|
+
...horizontalStyle,
|
|
81
92
|
bottom: viewportHeight - anchorLayout.y + POPOVER_GAP,
|
|
82
|
-
left: anchorLayout.x,
|
|
83
|
-
width: anchorLayout.width,
|
|
84
93
|
maxHeight
|
|
85
94
|
},
|
|
86
95
|
maxHeight,
|
|
87
96
|
placement: 'top'
|
|
88
97
|
};
|
|
89
|
-
}, [anchorLayout, viewportHeight, insetTop, insetBottom]);
|
|
98
|
+
}, [anchorLayout, viewportWidth, viewportHeight, insetTop, insetBottom, insetRight, matchAnchorWidth]);
|
|
90
99
|
}
|
|
91
100
|
//# sourceMappingURL=useOverlayPosition.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createContext","useContext","useMemo","useWindowDimensions","DEFAULT_INSETS","top","right","bottom","left","OverlayInsetsContext","OverlayInsetsProvider","Provider","SCREEN_EDGE_PADDING","POPOVER_GAP","MIN_CONTENT_HEIGHT","useOverlayPosition","anchorLayout","height","viewportHeight","insetTop","insetBottom","anchorBottom","y","spaceBelow","spaceAbove","preferBelow","
|
|
1
|
+
{"version":3,"names":["createContext","useContext","useMemo","useWindowDimensions","DEFAULT_INSETS","top","right","bottom","left","OverlayInsetsContext","OverlayInsetsProvider","Provider","SCREEN_EDGE_PADDING","POPOVER_GAP","MIN_CONTENT_HEIGHT","useOverlayPosition","anchorLayout","options","width","viewportWidth","height","viewportHeight","insetTop","insetBottom","insetRight","matchAnchorWidth","anchorBottom","y","spaceBelow","spaceAbove","preferBelow","horizontalStyle","x","alignItems","maxWidth","Math","max","maxHeight","style","placement"],"sourceRoot":"../../../src","sources":["overlay/useOverlayPosition.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -4,84 +4,100 @@ import * as React from 'react';
|
|
|
4
4
|
import { useEffect, useSyncExternalStore } from 'react';
|
|
5
5
|
import { Platform } from 'react-native';
|
|
6
6
|
import { createPortalFn } from '../utils/createPortal';
|
|
7
|
-
import {
|
|
7
|
+
import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
|
|
8
8
|
const DEFAULT_PORTAL_HOST = 'FORGE_UI_DEFAULT_HOST_NAME';
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
listeners: new Set()
|
|
18
|
-
};
|
|
19
|
-
let hasWarnedMultiplePortalHosts = false;
|
|
20
|
-
|
|
21
|
-
// --------------------------------------------------
|
|
22
|
-
|
|
23
|
-
function emit() {
|
|
24
|
-
for (const cb of store.listeners) cb();
|
|
9
|
+
function createPortalRegistry() {
|
|
10
|
+
return {
|
|
11
|
+
map: new Map().set(DEFAULT_PORTAL_HOST, new Map()),
|
|
12
|
+
hostStacks: new Map(),
|
|
13
|
+
portalListeners: new Set(),
|
|
14
|
+
hostListeners: new Set(),
|
|
15
|
+
hasWarnedMultipleHosts: false
|
|
16
|
+
};
|
|
25
17
|
}
|
|
26
|
-
|
|
27
|
-
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Standalone Portal and PortalHost instances continue to share this fallback.
|
|
21
|
+
* PortalProvider creates an isolated registry for each provider subtree.
|
|
22
|
+
*/
|
|
23
|
+
const fallbackPortalRegistry = createPortalRegistry();
|
|
24
|
+
const PortalRegistryContext = /*#__PURE__*/React.createContext(null);
|
|
25
|
+
function emitPortals(registry) {
|
|
26
|
+
for (const cb of registry.portalListeners) cb();
|
|
28
27
|
}
|
|
29
|
-
function
|
|
30
|
-
|
|
28
|
+
function emitHosts(registry) {
|
|
29
|
+
for (const cb of registry.hostListeners) cb();
|
|
31
30
|
}
|
|
32
|
-
function
|
|
33
|
-
|
|
31
|
+
function subscribeHosts(registry, cb) {
|
|
32
|
+
registry.hostListeners.add(cb);
|
|
34
33
|
return () => {
|
|
35
|
-
|
|
34
|
+
registry.hostListeners.delete(cb);
|
|
36
35
|
};
|
|
37
36
|
}
|
|
38
|
-
function pushPortalHost(name, id) {
|
|
39
|
-
const stacks = new Map(
|
|
37
|
+
function pushPortalHost(registry, name, id) {
|
|
38
|
+
const stacks = new Map(registry.hostStacks);
|
|
40
39
|
const stack = [...(stacks.get(name) ?? [])];
|
|
41
40
|
stack.push(id);
|
|
42
41
|
stacks.set(name, stack);
|
|
43
|
-
|
|
44
|
-
if (__DEV__ && !
|
|
45
|
-
|
|
42
|
+
registry.hostStacks = stacks;
|
|
43
|
+
if (__DEV__ && !registry.hasWarnedMultipleHosts && stack.length > 1) {
|
|
44
|
+
registry.hasWarnedMultipleHosts = true;
|
|
46
45
|
console.warn('[Forge UI] Multiple PortalHost instances detected for the same host name. ' + 'Only the first mounted PortalHost renders portal content. ' + 'Mount a single PortalHost near your app root (ForgeDesignProvider does this automatically).');
|
|
47
46
|
}
|
|
48
|
-
|
|
47
|
+
emitHosts(registry);
|
|
49
48
|
}
|
|
50
|
-
function popPortalHost(name, id) {
|
|
51
|
-
const stacks = new Map(
|
|
49
|
+
function popPortalHost(registry, name, id) {
|
|
50
|
+
const stacks = new Map(registry.hostStacks);
|
|
52
51
|
const stack = (stacks.get(name) ?? []).filter(entry => entry !== id);
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
52
|
+
if (stack.length === 0) {
|
|
53
|
+
stacks.delete(name);
|
|
54
|
+
} else {
|
|
55
|
+
stacks.set(name, stack);
|
|
56
|
+
}
|
|
57
|
+
registry.hostStacks = stacks;
|
|
58
|
+
emitHosts(registry);
|
|
56
59
|
}
|
|
57
|
-
function isActivePortalHost(name, id) {
|
|
58
|
-
const stack =
|
|
60
|
+
function isActivePortalHost(registry, name, id) {
|
|
61
|
+
const stack = registry.hostStacks.get(name) ?? [];
|
|
59
62
|
return stack.length > 0 && stack[0] === id;
|
|
60
63
|
}
|
|
61
|
-
function
|
|
62
|
-
|
|
63
|
-
}
|
|
64
|
-
function subscribe(cb) {
|
|
65
|
-
store.listeners.add(cb);
|
|
64
|
+
function subscribePortals(registry, cb) {
|
|
65
|
+
registry.portalListeners.add(cb);
|
|
66
66
|
return () => {
|
|
67
|
-
|
|
67
|
+
registry.portalListeners.delete(cb);
|
|
68
68
|
};
|
|
69
69
|
}
|
|
70
|
-
function updatePortal(hostName, name, children) {
|
|
71
|
-
const next = new Map(
|
|
72
|
-
const portal = next.get(hostName) ??
|
|
70
|
+
function updatePortal(registry, hostName, name, children) {
|
|
71
|
+
const next = new Map(registry.map);
|
|
72
|
+
const portal = new Map(next.get(hostName) ?? []);
|
|
73
73
|
portal.set(name, children);
|
|
74
74
|
next.set(hostName, portal);
|
|
75
|
-
|
|
76
|
-
|
|
75
|
+
registry.map = next;
|
|
76
|
+
emitPortals(registry);
|
|
77
77
|
}
|
|
78
|
-
function removePortal(hostName, name) {
|
|
79
|
-
const next = new Map(
|
|
80
|
-
const portal = next.get(hostName) ??
|
|
78
|
+
function removePortal(registry, hostName, name) {
|
|
79
|
+
const next = new Map(registry.map);
|
|
80
|
+
const portal = new Map(next.get(hostName) ?? []);
|
|
81
81
|
portal.delete(name);
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
82
|
+
if (portal.size === 0 && hostName !== DEFAULT_PORTAL_HOST) {
|
|
83
|
+
next.delete(hostName);
|
|
84
|
+
} else {
|
|
85
|
+
next.set(hostName, portal);
|
|
86
|
+
}
|
|
87
|
+
registry.map = next;
|
|
88
|
+
emitPortals(registry);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// --------------------------------------------------
|
|
92
|
+
|
|
93
|
+
export function PortalProvider({
|
|
94
|
+
children
|
|
95
|
+
}) {
|
|
96
|
+
const [registry] = React.useState(createPortalRegistry);
|
|
97
|
+
return /*#__PURE__*/_jsx(PortalRegistryContext.Provider, {
|
|
98
|
+
value: registry,
|
|
99
|
+
children: children
|
|
100
|
+
});
|
|
85
101
|
}
|
|
86
102
|
|
|
87
103
|
// --------------------------------------------------
|
|
@@ -89,21 +105,24 @@ function removePortal(hostName, name) {
|
|
|
89
105
|
export function PortalHost({
|
|
90
106
|
name = DEFAULT_PORTAL_HOST
|
|
91
107
|
}) {
|
|
108
|
+
const registry = React.useContext(PortalRegistryContext) ?? fallbackPortalRegistry;
|
|
92
109
|
const hostId = React.useRef(Symbol()).current;
|
|
93
110
|
useEffect(() => {
|
|
94
|
-
pushPortalHost(name, hostId);
|
|
111
|
+
pushPortalHost(registry, name, hostId);
|
|
95
112
|
return () => {
|
|
96
|
-
popPortalHost(name, hostId);
|
|
113
|
+
popPortalHost(registry, name, hostId);
|
|
97
114
|
};
|
|
98
|
-
}, [name, hostId]);
|
|
99
|
-
useSyncExternalStore(
|
|
100
|
-
const map = useSyncExternalStore(
|
|
115
|
+
}, [registry, name, hostId]);
|
|
116
|
+
useSyncExternalStore(cb => subscribeHosts(registry, cb), () => registry.hostStacks, () => registry.hostStacks);
|
|
117
|
+
const map = useSyncExternalStore(cb => subscribePortals(registry, cb), () => registry.map, () => registry.map);
|
|
101
118
|
const portalMap = map.get(name) ?? new Map();
|
|
102
|
-
if (!isActivePortalHost(name, hostId) || portalMap.size === 0) {
|
|
119
|
+
if (!isActivePortalHost(registry, name, hostId) || portalMap.size === 0) {
|
|
103
120
|
return null;
|
|
104
121
|
}
|
|
105
122
|
const content = /*#__PURE__*/_jsx(_Fragment, {
|
|
106
|
-
children: Array.from(portalMap.
|
|
123
|
+
children: Array.from(portalMap.entries()).map(([portalName, children]) => /*#__PURE__*/_jsx(React.Fragment, {
|
|
124
|
+
children: children
|
|
125
|
+
}, portalName))
|
|
107
126
|
});
|
|
108
127
|
if (Platform.OS === 'web' && createPortalFn && typeof document !== 'undefined') {
|
|
109
128
|
return createPortalFn(content, document.body);
|
|
@@ -118,12 +137,15 @@ export function Portal({
|
|
|
118
137
|
hostName = DEFAULT_PORTAL_HOST,
|
|
119
138
|
children
|
|
120
139
|
}) {
|
|
140
|
+
const registry = React.useContext(PortalRegistryContext) ?? fallbackPortalRegistry;
|
|
141
|
+
useEffect(() => {
|
|
142
|
+
updatePortal(registry, hostName, name, children);
|
|
143
|
+
}, [registry, hostName, name, children]);
|
|
121
144
|
useEffect(() => {
|
|
122
|
-
updatePortal(hostName, name, children);
|
|
123
145
|
return () => {
|
|
124
|
-
removePortal(hostName, name);
|
|
146
|
+
removePortal(registry, hostName, name);
|
|
125
147
|
};
|
|
126
|
-
}, [hostName, name
|
|
148
|
+
}, [registry, hostName, name]);
|
|
127
149
|
return null;
|
|
128
150
|
}
|
|
129
151
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useEffect","useSyncExternalStore","Platform","createPortalFn","
|
|
1
|
+
{"version":3,"names":["React","useEffect","useSyncExternalStore","Platform","createPortalFn","jsx","_jsx","Fragment","_Fragment","DEFAULT_PORTAL_HOST","createPortalRegistry","map","Map","set","hostStacks","portalListeners","Set","hostListeners","hasWarnedMultipleHosts","fallbackPortalRegistry","PortalRegistryContext","createContext","emitPortals","registry","cb","emitHosts","subscribeHosts","add","delete","pushPortalHost","name","id","stacks","stack","get","push","__DEV__","length","console","warn","popPortalHost","filter","entry","isActivePortalHost","subscribePortals","updatePortal","hostName","children","next","portal","removePortal","size","PortalProvider","useState","Provider","value","PortalHost","useContext","hostId","useRef","Symbol","current","portalMap","content","Array","from","entries","portalName","OS","document","body","Portal","ROOT","flex","useModalPortalRoot","ref","offset","setSideOffSet","onLayout","useCallback","measure","_x","_y","_width","_height","_pageX","pageY","style"],"sourceRoot":"../../../src","sources":["portal/portal.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import React, { forwardRef, useCallback, useRef } from 'react';
|
|
4
|
-
import { Platform,
|
|
4
|
+
import { Platform, View } from 'react-native';
|
|
5
5
|
import { FadeIn, FadeOut } from 'react-native-reanimated';
|
|
6
6
|
import { composeEventHandlers, mergeRefs } from '@cdx-ui/utils';
|
|
7
|
-
import { OverlayContainer,
|
|
7
|
+
import { OverlayContainer, useAnchoredOverlay, useDismissOverlay } from '../overlay';
|
|
8
8
|
import { Slot } from '../slot';
|
|
9
9
|
import { dataAttributes, mergeDataAttributes } from '../utils/dataAttributes';
|
|
10
10
|
import { useSelectContext } from './context';
|
|
@@ -16,6 +16,8 @@ export const SelectContent = /*#__PURE__*/forwardRef(({
|
|
|
16
16
|
children,
|
|
17
17
|
enteringAnimation,
|
|
18
18
|
exitingAnimation,
|
|
19
|
+
onLayout,
|
|
20
|
+
style,
|
|
19
21
|
...props
|
|
20
22
|
}, ref) => {
|
|
21
23
|
const {
|
|
@@ -42,11 +44,21 @@ export const SelectContent = /*#__PURE__*/forwardRef(({
|
|
|
42
44
|
});
|
|
43
45
|
}
|
|
44
46
|
}, []);
|
|
45
|
-
const mergedRef = mergeRefs(ref, focusOnMount);
|
|
46
47
|
const dismiss = useCallback(() => setOpen(false), [setOpen]);
|
|
47
|
-
const
|
|
48
|
-
const
|
|
49
|
-
|
|
48
|
+
const overlayOpen = open && !native;
|
|
49
|
+
const {
|
|
50
|
+
floatingRef,
|
|
51
|
+
onFloatingLayout,
|
|
52
|
+
style: overlayStyle,
|
|
53
|
+
position
|
|
54
|
+
} = useAnchoredOverlay(triggerRef, overlayOpen, {
|
|
55
|
+
placement: 'bottom-start',
|
|
56
|
+
offset: 4,
|
|
57
|
+
collisionBehavior: 'flip-shift',
|
|
58
|
+
width: 'anchor'
|
|
59
|
+
});
|
|
60
|
+
const mergedRef = mergeRefs(ref, focusOnMount, floatingRef);
|
|
61
|
+
useDismissOverlay(overlayOpen, contentRef, [triggerRef], dismiss);
|
|
50
62
|
const {
|
|
51
63
|
handleKeyDown
|
|
52
64
|
} = useListboxNavigation({
|
|
@@ -66,7 +78,7 @@ export const SelectContent = /*#__PURE__*/forwardRef(({
|
|
|
66
78
|
value,
|
|
67
79
|
setActiveValue
|
|
68
80
|
});
|
|
69
|
-
if (
|
|
81
|
+
if (!overlayOpen) {
|
|
70
82
|
return null;
|
|
71
83
|
}
|
|
72
84
|
const webProps = Platform.OS === 'web' ? {
|
|
@@ -78,21 +90,21 @@ export const SelectContent = /*#__PURE__*/forwardRef(({
|
|
|
78
90
|
onDismiss: dismiss,
|
|
79
91
|
entering: enteringAnimation ?? FadeIn.duration(150),
|
|
80
92
|
exiting: exitingAnimation ?? FadeOut.duration(100),
|
|
81
|
-
style: position.style,
|
|
82
93
|
children: /*#__PURE__*/_jsx(Comp, {
|
|
83
94
|
ref: mergedRef,
|
|
95
|
+
onLayout: composeEventHandlers(onLayout, onFloatingLayout),
|
|
96
|
+
style: [style, overlayStyle],
|
|
84
97
|
role: "listbox",
|
|
85
98
|
id: contentId,
|
|
86
99
|
"aria-labelledby": triggerId,
|
|
87
100
|
...props,
|
|
88
101
|
...mergeDataAttributes(props, dataAttributes({
|
|
89
|
-
state: 'open'
|
|
102
|
+
state: 'open',
|
|
103
|
+
side: position?.resolvedPlacement.side,
|
|
104
|
+
align: position?.resolvedPlacement.align
|
|
90
105
|
})),
|
|
91
106
|
...webProps,
|
|
92
|
-
children:
|
|
93
|
-
scrollEventThrottle: 16,
|
|
94
|
-
children: children
|
|
95
|
-
})
|
|
107
|
+
children: children
|
|
96
108
|
})
|
|
97
109
|
});
|
|
98
110
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","forwardRef","useCallback","useRef","Platform","
|
|
1
|
+
{"version":3,"names":["React","forwardRef","useCallback","useRef","Platform","View","FadeIn","FadeOut","composeEventHandlers","mergeRefs","OverlayContainer","useAnchoredOverlay","useDismissOverlay","Slot","dataAttributes","mergeDataAttributes","useSelectContext","useContentFocus","useListboxNavigation","jsx","_jsx","SelectContent","asChild","children","enteringAnimation","exitingAnimation","onLayout","style","props","ref","open","setOpen","contentId","triggerId","activeValue","setActiveValue","value","onValueChange","native","triggerRef","items","contentRef","focusOnMount","node","current","OS","requestAnimationFrame","setTimeout","focus","dismiss","overlayOpen","floatingRef","onFloatingLayout","overlayStyle","position","placement","offset","collisionBehavior","width","mergedRef","handleKeyDown","onSelect","val","onDismiss","webProps","onKeyDown","tabIndex","Comp","entering","duration","exiting","role","id","state","side","resolvedPlacement","align","displayName"],"sourceRoot":"../../../src","sources":["select/SelectContent.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -17,6 +17,16 @@ export function useListboxNavigation({
|
|
|
17
17
|
onDismissRef.current = onDismiss;
|
|
18
18
|
const getEnabledItems = useCallback(() => items.filter(item => !item.disabled), [items]);
|
|
19
19
|
const handleKeyDown = useCallback(e => {
|
|
20
|
+
if (e.key === 'Escape') {
|
|
21
|
+
e.preventDefault();
|
|
22
|
+
e.stopPropagation?.();
|
|
23
|
+
onDismissRef.current();
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
if (e.key === 'Tab') {
|
|
27
|
+
onDismissRef.current();
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
20
30
|
const enabledItems = getEnabledItems();
|
|
21
31
|
if (enabledItems.length === 0) {
|
|
22
32
|
return;
|
|
@@ -59,17 +69,6 @@ export function useListboxNavigation({
|
|
|
59
69
|
}
|
|
60
70
|
break;
|
|
61
71
|
}
|
|
62
|
-
case 'Escape':
|
|
63
|
-
{
|
|
64
|
-
e.preventDefault();
|
|
65
|
-
onDismissRef.current();
|
|
66
|
-
break;
|
|
67
|
-
}
|
|
68
|
-
case 'Tab':
|
|
69
|
-
{
|
|
70
|
-
onDismissRef.current();
|
|
71
|
-
break;
|
|
72
|
-
}
|
|
73
72
|
}
|
|
74
73
|
}, [activeValue, getEnabledItems, setActiveValue]);
|
|
75
74
|
return {
|