@tamagui/select 1.30.29 → 1.31.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/Select.js +15 -3
- package/dist/cjs/Select.js.map +2 -2
- package/dist/cjs/SelectImpl.js +13 -7
- package/dist/cjs/SelectImpl.js.map +1 -1
- package/dist/cjs/SelectScrollButton.js +17 -35
- package/dist/cjs/SelectScrollButton.js.map +1 -1
- package/dist/cjs/SelectViewport.js +6 -1
- package/dist/cjs/SelectViewport.js.map +1 -1
- package/dist/esm/Select.js +15 -3
- package/dist/esm/Select.js.map +2 -2
- package/dist/esm/SelectImpl.js +13 -8
- package/dist/esm/SelectImpl.js.map +1 -1
- package/dist/esm/SelectScrollButton.js +17 -35
- package/dist/esm/SelectScrollButton.js.map +1 -1
- package/dist/esm/SelectViewport.js +7 -2
- package/dist/esm/SelectViewport.js.map +1 -1
- package/dist/jsx/Select.js +13 -3
- package/dist/jsx/Select.js.map +1 -1
- package/dist/jsx/Select.mjs +13 -3
- package/dist/jsx/Select.mjs.map +1 -1
- package/dist/jsx/SelectImpl.js +13 -8
- package/dist/jsx/SelectImpl.js.map +1 -1
- package/dist/jsx/SelectImpl.mjs +13 -8
- package/dist/jsx/SelectImpl.mjs.map +1 -1
- package/dist/jsx/SelectScrollButton.js +15 -33
- package/dist/jsx/SelectScrollButton.js.map +1 -1
- package/dist/jsx/SelectScrollButton.mjs +15 -33
- package/dist/jsx/SelectScrollButton.mjs.map +1 -1
- package/dist/jsx/SelectViewport.js +6 -2
- package/dist/jsx/SelectViewport.js.map +1 -1
- package/dist/jsx/SelectViewport.mjs +6 -2
- package/dist/jsx/SelectViewport.mjs.map +1 -1
- package/package.json +20 -20
- package/src/Select.tsx +15 -4
- package/src/SelectImpl.tsx +13 -6
- package/src/SelectScrollButton.tsx +16 -36
- package/src/SelectViewport.tsx +6 -2
- package/src/types.tsx +0 -1
- package/types/Select.d.ts +204 -162
- package/types/Select.d.ts.map +1 -1
- package/types/SelectImpl.d.ts.map +1 -1
- package/types/SelectViewport.d.ts +38 -14
- package/types/SelectViewport.d.ts.map +1 -1
- package/types/types.d.ts +0 -1
- package/types/types.d.ts.map +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/SelectScrollButton.tsx"],
|
|
4
|
-
"mappings": "AAAA,SAAS,YAAY,QAAQ,mBAAmB;AAChD,SAAS,uBAAuB;
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { autoUpdate, offset, useFloating } from "@floating-ui/react";
|
|
2
2
|
import { useComposedRefs } from "@tamagui/compose-refs";
|
|
3
|
-
import { useIsomorphicLayoutEffect } from "@tamagui/core";
|
|
4
3
|
import { YStack } from "@tamagui/stacks";
|
|
5
4
|
import * as React from "react";
|
|
6
5
|
import { flushSync } from "react-dom";
|
|
@@ -29,51 +28,33 @@ const SelectScrollButtonImpl = React.memo(
|
|
|
29
28
|
React.forwardRef(
|
|
30
29
|
(props, forwardedRef) => {
|
|
31
30
|
const { __scopeSelect, dir, componentName, ...scrollIndicatorProps } = props;
|
|
32
|
-
const {
|
|
33
|
-
|
|
34
|
-
forceUpdate,
|
|
35
|
-
open,
|
|
36
|
-
fallback,
|
|
37
|
-
setScrollTop,
|
|
38
|
-
setInnerOffset,
|
|
39
|
-
...context
|
|
40
|
-
} = useSelectContext(componentName, __scopeSelect);
|
|
41
|
-
const [element, setElement] = React.useState(null);
|
|
31
|
+
const { forceUpdate, open, fallback, setScrollTop, setInnerOffset, ...context } = useSelectContext(componentName, __scopeSelect);
|
|
32
|
+
const floatingRef = context.floatingContext?.refs.floating;
|
|
42
33
|
const statusRef = React.useRef("idle");
|
|
43
34
|
const isVisible = context[dir === "down" ? "canScrollDown" : "canScrollUp"];
|
|
44
35
|
const frameRef = React.useRef();
|
|
45
|
-
const { x, y,
|
|
36
|
+
const { x, y, refs, strategy } = useFloating({
|
|
46
37
|
open: open && isVisible,
|
|
47
38
|
strategy: "fixed",
|
|
39
|
+
elements: {
|
|
40
|
+
reference: floatingRef?.current
|
|
41
|
+
},
|
|
48
42
|
placement: dir === "up" ? "top" : "bottom",
|
|
49
43
|
middleware: [offset(({ rects }) => -rects.floating.height)],
|
|
50
44
|
whileElementsMounted: (...args) => autoUpdate(...args, { animationFrame: true })
|
|
51
45
|
});
|
|
52
|
-
const composedRef = useComposedRefs(forwardedRef,
|
|
53
|
-
if (
|
|
54
|
-
if (open) {
|
|
55
|
-
if (element !== floatingRef.current) {
|
|
56
|
-
setElement(floatingRef.current);
|
|
57
|
-
reference(floatingRef.current);
|
|
58
|
-
requestAnimationFrame(update);
|
|
59
|
-
}
|
|
60
|
-
} else {
|
|
61
|
-
cancelAnimationFrame(frameRef.current);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
useIsomorphicLayoutEffect(() => {
|
|
65
|
-
return () => {
|
|
66
|
-
cancelAnimationFrame(frameRef.current);
|
|
67
|
-
};
|
|
68
|
-
}, []);
|
|
69
|
-
if (!(isVisible && floatingRef)) {
|
|
46
|
+
const composedRef = useComposedRefs(forwardedRef, refs.setFloating);
|
|
47
|
+
if (!isVisible) {
|
|
70
48
|
return null;
|
|
71
49
|
}
|
|
72
50
|
const onScroll = (amount) => {
|
|
51
|
+
const floating = floatingRef;
|
|
52
|
+
if (!floating)
|
|
53
|
+
return;
|
|
73
54
|
if (fallback) {
|
|
74
|
-
if (
|
|
75
|
-
|
|
76
|
-
flushSync(() => setScrollTop(
|
|
55
|
+
if (floating.current) {
|
|
56
|
+
floating.current.scrollTop -= amount;
|
|
57
|
+
flushSync(() => setScrollTop(floating.current?.scrollTop ?? 0));
|
|
77
58
|
}
|
|
78
59
|
} else {
|
|
79
60
|
flushSync(() => setInnerOffset((value) => value - amount));
|
|
@@ -93,6 +74,7 @@ const SelectScrollButtonImpl = React.memo(
|
|
|
93
74
|
statusRef.current = "active";
|
|
94
75
|
let prevNow = Date.now();
|
|
95
76
|
function frame() {
|
|
77
|
+
const element = floatingRef?.current;
|
|
96
78
|
if (element) {
|
|
97
79
|
const currentNow = Date.now();
|
|
98
80
|
const msElapsed = currentNow - prevNow;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/SelectScrollButton.tsx"],
|
|
4
|
-
"mappings": "AAAA,SAAS,YAAY,QAAQ,mBAAmB;AAChD,SAAS,uBAAuB;
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { FloatingFocusManager } from "@floating-ui/react";
|
|
2
|
-
import { isWeb } from "@tamagui/core";
|
|
2
|
+
import { composeRefs, isWeb } from "@tamagui/core";
|
|
3
3
|
import { styled } from "@tamagui/core";
|
|
4
4
|
import { PortalItem } from "@tamagui/portal";
|
|
5
5
|
import { ThemeableStack } from "@tamagui/stacks";
|
|
@@ -32,6 +32,10 @@ const SelectViewport = React.forwardRef(
|
|
|
32
32
|
const { __scopeSelect, children, disableScroll, ...viewportProps } = props;
|
|
33
33
|
const context = useSelectContext(VIEWPORT_NAME, __scopeSelect);
|
|
34
34
|
const breakpointActive = useSelectBreakpointActive(context.sheetBreakpoint);
|
|
35
|
+
const composedRefs = composeRefs(
|
|
36
|
+
forwardedRef,
|
|
37
|
+
context.floatingContext?.refs.setFloating
|
|
38
|
+
);
|
|
35
39
|
if (context.shouldRenderWebNative) {
|
|
36
40
|
return <>{children}</>;
|
|
37
41
|
}
|
|
@@ -58,7 +62,7 @@ const SelectViewport = React.forwardRef(
|
|
|
58
62
|
size={context.size}
|
|
59
63
|
role="presentation"
|
|
60
64
|
{...viewportProps}
|
|
61
|
-
ref={
|
|
65
|
+
ref={composedRefs}
|
|
62
66
|
{...floatingProps}
|
|
63
67
|
{...restStyle}
|
|
64
68
|
overflow={disableScroll ? void 0 : overflow ?? "scroll"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/SelectViewport.tsx"],
|
|
4
|
-
"mappings": "AAAA,SAAS,4BAA4B;AACrC,SAAyB,aAAa;
|
|
4
|
+
"mappings": "AAAA,SAAS,4BAA4B;AACrC,SAAyB,aAAa,aAAa;AACnD,SAAS,cAAc;AACvB,SAAS,kBAAkB;AAC3B,SAAS,sBAAsB;AAC/B,YAAY,WAAW;AAEvB,SAAS,qBAAqB;AAC9B,SAAS,sBAAsB,wBAAwB;AAEvD,SAAS,iCAAiC;AAMnC,MAAM,sBAAsB,OAAO,gBAAgB;AAAA,EACxD,MAAM;AAAA,EACN,iBAAiB;AAAA,EACjB,SAAS;AAAA,EACT,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,cAAc;AAAA,EAEd,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,WAAW,CAAC,KAAK,EAAE,OAAO,MAAM;AAC9B,eAAO;AAAA,UACL,cAAc,OAAO,OAAO,GAAG,KAAK;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,iBAAiB;AAAA,IACf,MAAM;AAAA,EACR;AACF,CAAC;AAEM,MAAM,iBAAiB,MAAM;AAAA,EAClC,CAAC,OAAyC,iBAAiB;AACzD,UAAM,EAAE,eAAe,UAAU,eAAe,GAAG,cAAc,IAAI;AACrE,UAAM,UAAU,iBAAiB,eAAe,aAAa;AAC7D,UAAM,mBAAmB,0BAA0B,QAAQ,eAAe;AAE1E,UAAM,eAAe;AAAA,MACnB;AAAA,MACA,QAAQ,iBAAiB,KAAK;AAAA,IAChC;AACA,QAAI,QAAQ,uBAAuB;AACjC,aAAO,GAAG,SAAS;AAAA,IACrB;AAEA,QAAI,oBAAoB,CAAC,OAAO;AAC9B,aACE,CAAC,WAAW,UAAU,GAAG,QAAQ,yBAC/B,CAAC,qBAAqB,SAAS,UAAU,SAAS,EAAjD,qBACH,EAFC;AAAA,IAIL;AAEA,QAAI,CAAC,QAAQ,iBAAiB;AAC5B,aAAO;AAAA,IACT;AAEA,QAAI,CAAC,QAAQ,MAAM;AACjB,aAAO,GAAG,SAAS;AAAA,IACrB;AAEA,UAAM;AAAA,MACJ,OAAO,EAAE,gBAAgB,eAAe,UAAU,GAAG,UAAU;AAAA,MAC/D,GAAG;AAAA,IACL,IAAI,QAAQ,aAAc,iBAAiB;AAE3C,WACE;AAAA,OACG,CAAC,iBACA,CAAC;AAAA,QACC,yBAAyB;AAAA,UACvB,QAAQ;AAAA,QACV;AAAA,MACF;AAAA,MAEF,CAAC,qBAAqB,SAAS,QAAQ,iBACrC,CAAC;AAAA,QACC,MAAM,QAAQ;AAAA,QAEd,KAAK;AAAA,YACD;AAAA,QACJ,KAAK;AAAA,YACD;AAAA,YACA;AAAA,QACJ,UAAU,gBAAgB,SAAY,YAAY;AAAA,QAEjD,SACH,EAXC,oBAYH,EAbC;AAAA,IAcH;AAAA,EAEJ;AACF;AAEA,eAAe,cAAc;AAE7B,MAAM,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { FloatingFocusManager } from "@floating-ui/react";
|
|
2
|
-
import { isWeb } from "@tamagui/core";
|
|
2
|
+
import { composeRefs, isWeb } from "@tamagui/core";
|
|
3
3
|
import { styled } from "@tamagui/core";
|
|
4
4
|
import { PortalItem } from "@tamagui/portal";
|
|
5
5
|
import { ThemeableStack } from "@tamagui/stacks";
|
|
@@ -32,6 +32,10 @@ const SelectViewport = React.forwardRef(
|
|
|
32
32
|
const { __scopeSelect, children, disableScroll, ...viewportProps } = props;
|
|
33
33
|
const context = useSelectContext(VIEWPORT_NAME, __scopeSelect);
|
|
34
34
|
const breakpointActive = useSelectBreakpointActive(context.sheetBreakpoint);
|
|
35
|
+
const composedRefs = composeRefs(
|
|
36
|
+
forwardedRef,
|
|
37
|
+
context.floatingContext?.refs.setFloating
|
|
38
|
+
);
|
|
35
39
|
if (context.shouldRenderWebNative) {
|
|
36
40
|
return <>{children}</>;
|
|
37
41
|
}
|
|
@@ -58,7 +62,7 @@ const SelectViewport = React.forwardRef(
|
|
|
58
62
|
size={context.size}
|
|
59
63
|
role="presentation"
|
|
60
64
|
{...viewportProps}
|
|
61
|
-
ref={
|
|
65
|
+
ref={composedRefs}
|
|
62
66
|
{...floatingProps}
|
|
63
67
|
{...restStyle}
|
|
64
68
|
overflow={disableScroll ? void 0 : overflow ?? "scroll"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/SelectViewport.tsx"],
|
|
4
|
-
"mappings": "AAAA,SAAS,4BAA4B;AACrC,SAAyB,aAAa;
|
|
4
|
+
"mappings": "AAAA,SAAS,4BAA4B;AACrC,SAAyB,aAAa,aAAa;AACnD,SAAS,cAAc;AACvB,SAAS,kBAAkB;AAC3B,SAAS,sBAAsB;AAC/B,YAAY,WAAW;AAEvB,SAAS,qBAAqB;AAC9B,SAAS,sBAAsB,wBAAwB;AAEvD,SAAS,iCAAiC;AAMnC,MAAM,sBAAsB,OAAO,gBAAgB;AAAA,EACxD,MAAM;AAAA,EACN,iBAAiB;AAAA,EACjB,SAAS;AAAA,EACT,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,cAAc;AAAA,EAEd,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,WAAW,CAAC,KAAK,EAAE,OAAO,MAAM;AAC9B,eAAO;AAAA,UACL,cAAc,OAAO,OAAO,GAAG,KAAK;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,iBAAiB;AAAA,IACf,MAAM;AAAA,EACR;AACF,CAAC;AAEM,MAAM,iBAAiB,MAAM;AAAA,EAClC,CAAC,OAAyC,iBAAiB;AACzD,UAAM,EAAE,eAAe,UAAU,eAAe,GAAG,cAAc,IAAI;AACrE,UAAM,UAAU,iBAAiB,eAAe,aAAa;AAC7D,UAAM,mBAAmB,0BAA0B,QAAQ,eAAe;AAE1E,UAAM,eAAe;AAAA,MACnB;AAAA,MACA,QAAQ,iBAAiB,KAAK;AAAA,IAChC;AACA,QAAI,QAAQ,uBAAuB;AACjC,aAAO,GAAG,SAAS;AAAA,IACrB;AAEA,QAAI,oBAAoB,CAAC,OAAO;AAC9B,aACE,CAAC,WAAW,UAAU,GAAG,QAAQ,yBAC/B,CAAC,qBAAqB,SAAS,UAAU,SAAS,EAAjD,qBACH,EAFC;AAAA,IAIL;AAEA,QAAI,CAAC,QAAQ,iBAAiB;AAC5B,aAAO;AAAA,IACT;AAEA,QAAI,CAAC,QAAQ,MAAM;AACjB,aAAO,GAAG,SAAS;AAAA,IACrB;AAEA,UAAM;AAAA,MACJ,OAAO,EAAE,gBAAgB,eAAe,UAAU,GAAG,UAAU;AAAA,MAC/D,GAAG;AAAA,IACL,IAAI,QAAQ,aAAc,iBAAiB;AAE3C,WACE;AAAA,OACG,CAAC,iBACA,CAAC;AAAA,QACC,yBAAyB;AAAA,UACvB,QAAQ;AAAA,QACV;AAAA,MACF;AAAA,MAEF,CAAC,qBAAqB,SAAS,QAAQ,iBACrC,CAAC;AAAA,QACC,MAAM,QAAQ;AAAA,QAEd,KAAK;AAAA,YACD;AAAA,QACJ,KAAK;AAAA,YACD;AAAA,YACA;AAAA,QACJ,UAAU,gBAAgB,SAAY,YAAY;AAAA,QAEjD,SACH,EAXC,oBAYH,EAbC;AAAA,IAcH;AAAA,EAEJ;AACF;AAEA,eAAe,cAAc;AAE7B,MAAM,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tamagui/select",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.31.1",
|
|
4
4
|
"sideEffects": [
|
|
5
5
|
"*.css"
|
|
6
6
|
],
|
|
@@ -31,25 +31,25 @@
|
|
|
31
31
|
}
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@floating-ui/react": "
|
|
35
|
-
"@floating-ui/react-dom": "
|
|
36
|
-
"@floating-ui/react-native": "
|
|
34
|
+
"@floating-ui/react": "^0.24.2",
|
|
35
|
+
"@floating-ui/react-dom": "^2.0.0",
|
|
36
|
+
"@floating-ui/react-native": "^0.10.0",
|
|
37
37
|
"@radix-ui/react-use-previous": "^1.0.0",
|
|
38
|
-
"@tamagui/adapt": "1.
|
|
39
|
-
"@tamagui/compose-refs": "1.
|
|
40
|
-
"@tamagui/core": "1.
|
|
41
|
-
"@tamagui/create-context": "1.
|
|
42
|
-
"@tamagui/dismissable": "1.
|
|
43
|
-
"@tamagui/focus-scope": "1.
|
|
44
|
-
"@tamagui/get-token": "1.
|
|
45
|
-
"@tamagui/list-item": "1.
|
|
46
|
-
"@tamagui/portal": "1.
|
|
47
|
-
"@tamagui/separator": "1.
|
|
48
|
-
"@tamagui/sheet": "1.
|
|
49
|
-
"@tamagui/stacks": "1.
|
|
50
|
-
"@tamagui/text": "1.
|
|
51
|
-
"@tamagui/use-controllable-state": "1.
|
|
52
|
-
"@tamagui/use-event": "1.
|
|
38
|
+
"@tamagui/adapt": "1.31.1",
|
|
39
|
+
"@tamagui/compose-refs": "1.31.1",
|
|
40
|
+
"@tamagui/core": "1.31.1",
|
|
41
|
+
"@tamagui/create-context": "1.31.1",
|
|
42
|
+
"@tamagui/dismissable": "1.31.1",
|
|
43
|
+
"@tamagui/focus-scope": "1.31.1",
|
|
44
|
+
"@tamagui/get-token": "1.31.1",
|
|
45
|
+
"@tamagui/list-item": "1.31.1",
|
|
46
|
+
"@tamagui/portal": "1.31.1",
|
|
47
|
+
"@tamagui/separator": "1.31.1",
|
|
48
|
+
"@tamagui/sheet": "1.31.1",
|
|
49
|
+
"@tamagui/stacks": "1.31.1",
|
|
50
|
+
"@tamagui/text": "1.31.1",
|
|
51
|
+
"@tamagui/use-controllable-state": "1.31.1",
|
|
52
|
+
"@tamagui/use-event": "1.31.1"
|
|
53
53
|
},
|
|
54
54
|
"peerDependencies": {
|
|
55
55
|
"react": "*",
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
"react-native": "*"
|
|
58
58
|
},
|
|
59
59
|
"devDependencies": {
|
|
60
|
-
"@tamagui/build": "1.
|
|
60
|
+
"@tamagui/build": "1.31.1",
|
|
61
61
|
"react": "^18.2.0",
|
|
62
62
|
"react-dom": "^18.2.0",
|
|
63
63
|
"react-native": "^0.71.7"
|
package/src/Select.tsx
CHANGED
|
@@ -45,11 +45,16 @@ export const SelectTrigger = React.forwardRef<TamaguiElement, SelectTriggerProps
|
|
|
45
45
|
const { __scopeSelect, disabled = false, ...triggerProps } = props
|
|
46
46
|
|
|
47
47
|
const context = useSelectContext(TRIGGER_NAME, __scopeSelect)
|
|
48
|
-
|
|
48
|
+
const composedRefs = useComposedRefs(
|
|
49
|
+
forwardedRef,
|
|
50
|
+
context.floatingContext?.refs.setReference as any
|
|
51
|
+
)
|
|
49
52
|
// const getItems = useCollection(__scopeSelect)
|
|
50
53
|
// const labelId = useLabelContext(context.trigger)
|
|
51
54
|
// const labelledBy = ariaLabelledby || labelId
|
|
52
55
|
|
|
56
|
+
// console.log('wtf', context.interactions.getReferenceProps())
|
|
57
|
+
|
|
53
58
|
if (context.shouldRenderWebNative) {
|
|
54
59
|
return null
|
|
55
60
|
}
|
|
@@ -76,9 +81,15 @@ export const SelectTrigger = React.forwardRef<TamaguiElement, SelectTriggerProps
|
|
|
76
81
|
disabled={disabled}
|
|
77
82
|
data-disabled={disabled ? '' : undefined}
|
|
78
83
|
{...triggerProps}
|
|
79
|
-
ref={
|
|
84
|
+
ref={composedRefs}
|
|
80
85
|
{...(process.env.TAMAGUI_TARGET === 'web' && context.interactions
|
|
81
|
-
?
|
|
86
|
+
? {
|
|
87
|
+
...context.interactions.getReferenceProps(),
|
|
88
|
+
onMouseDown() {
|
|
89
|
+
context.floatingContext?.update()
|
|
90
|
+
context.setOpen(!context.open)
|
|
91
|
+
},
|
|
92
|
+
}
|
|
82
93
|
: {
|
|
83
94
|
onPress() {
|
|
84
95
|
context.setOpen(!context.open)
|
|
@@ -462,7 +473,7 @@ const NativeSelectFrame = styled(ThemeableStack, {
|
|
|
462
473
|
paddingRight: paddingHorizontal + 20,
|
|
463
474
|
paddingLeft: paddingHorizontal,
|
|
464
475
|
paddingVertical: getSpace(val, {
|
|
465
|
-
shift: -
|
|
476
|
+
shift: -3,
|
|
466
477
|
}),
|
|
467
478
|
}
|
|
468
479
|
},
|
package/src/SelectImpl.tsx
CHANGED
|
@@ -111,10 +111,9 @@ export const SelectInlineImpl = (props: SelectImplProps) => {
|
|
|
111
111
|
padding: WINDOW_PADDING,
|
|
112
112
|
})
|
|
113
113
|
|
|
114
|
-
const { x, y,
|
|
114
|
+
const { x, y, strategy, context, refs, update } = useFloating({
|
|
115
115
|
open,
|
|
116
116
|
onOpenChange: setOpen,
|
|
117
|
-
whileElementsMounted: autoUpdate,
|
|
118
117
|
placement: 'bottom-start',
|
|
119
118
|
middleware: fallback
|
|
120
119
|
? [
|
|
@@ -141,6 +140,14 @@ export const SelectInlineImpl = (props: SelectImplProps) => {
|
|
|
141
140
|
],
|
|
142
141
|
})
|
|
143
142
|
|
|
143
|
+
React.useLayoutEffect(() => {
|
|
144
|
+
window.addEventListener('resize', update)
|
|
145
|
+
if (open) {
|
|
146
|
+
update()
|
|
147
|
+
}
|
|
148
|
+
return () => window.removeEventListener('resize', update)
|
|
149
|
+
}, [update, open])
|
|
150
|
+
|
|
144
151
|
const floatingRef = refs.floating
|
|
145
152
|
|
|
146
153
|
const showUpArrow = open && scrollTop > SCROLL_ARROW_THRESHOLD
|
|
@@ -160,6 +167,7 @@ export const SelectInlineImpl = (props: SelectImplProps) => {
|
|
|
160
167
|
enabled: !fallback,
|
|
161
168
|
onChange: setInnerOffset,
|
|
162
169
|
overflowRef,
|
|
170
|
+
scrollRef: refs.floating,
|
|
163
171
|
}),
|
|
164
172
|
useListNavigation(context, {
|
|
165
173
|
listRef: listItemsRef,
|
|
@@ -180,7 +188,7 @@ export const SelectInlineImpl = (props: SelectImplProps) => {
|
|
|
180
188
|
...interactions,
|
|
181
189
|
getReferenceProps() {
|
|
182
190
|
return interactions.getReferenceProps({
|
|
183
|
-
ref: reference,
|
|
191
|
+
ref: refs.reference as any,
|
|
184
192
|
className: 'SelectTrigger',
|
|
185
193
|
onKeyDown(event) {
|
|
186
194
|
if (
|
|
@@ -195,7 +203,7 @@ export const SelectInlineImpl = (props: SelectImplProps) => {
|
|
|
195
203
|
},
|
|
196
204
|
getFloatingProps(props) {
|
|
197
205
|
return interactions.getFloatingProps({
|
|
198
|
-
ref: floating,
|
|
206
|
+
ref: refs.floating,
|
|
199
207
|
className: 'Select',
|
|
200
208
|
...props,
|
|
201
209
|
style: {
|
|
@@ -232,7 +240,7 @@ export const SelectInlineImpl = (props: SelectImplProps) => {
|
|
|
232
240
|
})
|
|
233
241
|
},
|
|
234
242
|
}
|
|
235
|
-
}, [floating, y, x, interactions])
|
|
243
|
+
}, [refs.reference.current, refs.floating.current, y, x, interactions])
|
|
236
244
|
|
|
237
245
|
// effects
|
|
238
246
|
|
|
@@ -319,7 +327,6 @@ export const SelectInlineImpl = (props: SelectImplProps) => {
|
|
|
319
327
|
{...(selectContext as Required<typeof selectContext>)}
|
|
320
328
|
setScrollTop={setScrollTop}
|
|
321
329
|
setInnerOffset={setInnerOffset}
|
|
322
|
-
floatingRef={floatingRef}
|
|
323
330
|
setValueAtIndex={(index, value) => {
|
|
324
331
|
listContentRef.current[index] = value
|
|
325
332
|
}}
|
|
@@ -62,59 +62,38 @@ const SelectScrollButtonImpl = React.memo(
|
|
|
62
62
|
React.forwardRef<SelectScrollButtonImplElement, SelectScrollButtonImplProps>(
|
|
63
63
|
(props: ScopedProps<SelectScrollButtonImplProps>, forwardedRef) => {
|
|
64
64
|
const { __scopeSelect, dir, componentName, ...scrollIndicatorProps } = props
|
|
65
|
-
const {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
fallback,
|
|
70
|
-
setScrollTop,
|
|
71
|
-
setInnerOffset,
|
|
72
|
-
...context
|
|
73
|
-
} = useSelectContext(componentName, __scopeSelect)
|
|
74
|
-
|
|
75
|
-
const [element, setElement] = React.useState<HTMLElement | null>(null)
|
|
65
|
+
const { forceUpdate, open, fallback, setScrollTop, setInnerOffset, ...context } =
|
|
66
|
+
useSelectContext(componentName, __scopeSelect)
|
|
67
|
+
const floatingRef = context.floatingContext?.refs.floating
|
|
68
|
+
|
|
76
69
|
const statusRef = React.useRef<'idle' | 'active'>('idle')
|
|
77
70
|
const isVisible = context[dir === 'down' ? 'canScrollDown' : 'canScrollUp']
|
|
78
71
|
const frameRef = React.useRef<any>()
|
|
79
72
|
|
|
80
|
-
const { x, y,
|
|
73
|
+
const { x, y, refs, strategy } = useFloating({
|
|
81
74
|
open: open && isVisible,
|
|
82
75
|
strategy: 'fixed',
|
|
76
|
+
elements: {
|
|
77
|
+
reference: floatingRef?.current,
|
|
78
|
+
},
|
|
83
79
|
placement: dir === 'up' ? 'top' : 'bottom',
|
|
84
80
|
middleware: [offset(({ rects }) => -rects.floating.height)],
|
|
85
81
|
whileElementsMounted: (...args) => autoUpdate(...args, { animationFrame: true }),
|
|
86
82
|
})
|
|
87
83
|
|
|
88
|
-
const composedRef = useComposedRefs(forwardedRef,
|
|
89
|
-
|
|
90
|
-
if (floatingRef) {
|
|
91
|
-
if (open) {
|
|
92
|
-
if (element !== floatingRef.current) {
|
|
93
|
-
setElement(floatingRef.current)
|
|
94
|
-
reference(floatingRef.current)
|
|
95
|
-
requestAnimationFrame(update)
|
|
96
|
-
}
|
|
97
|
-
} else {
|
|
98
|
-
cancelAnimationFrame(frameRef.current)
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
useIsomorphicLayoutEffect(() => {
|
|
103
|
-
return () => {
|
|
104
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
105
|
-
cancelAnimationFrame(frameRef.current)
|
|
106
|
-
}
|
|
107
|
-
}, [])
|
|
84
|
+
const composedRef = useComposedRefs(forwardedRef, refs.setFloating)
|
|
108
85
|
|
|
109
|
-
if (!
|
|
86
|
+
if (!isVisible) {
|
|
110
87
|
return null
|
|
111
88
|
}
|
|
112
89
|
|
|
113
90
|
const onScroll = (amount: number) => {
|
|
91
|
+
const floating = floatingRef
|
|
92
|
+
if (!floating) return
|
|
114
93
|
if (fallback) {
|
|
115
|
-
if (
|
|
116
|
-
|
|
117
|
-
flushSync(() => setScrollTop!(
|
|
94
|
+
if (floating.current) {
|
|
95
|
+
floating.current.scrollTop -= amount
|
|
96
|
+
flushSync(() => setScrollTop!(floating.current?.scrollTop ?? 0))
|
|
118
97
|
}
|
|
119
98
|
} else {
|
|
120
99
|
flushSync(() => setInnerOffset!((value) => value - amount))
|
|
@@ -138,6 +117,7 @@ const SelectScrollButtonImpl = React.memo(
|
|
|
138
117
|
let prevNow = Date.now()
|
|
139
118
|
|
|
140
119
|
function frame() {
|
|
120
|
+
const element = floatingRef?.current
|
|
141
121
|
if (element) {
|
|
142
122
|
const currentNow = Date.now()
|
|
143
123
|
const msElapsed = currentNow - prevNow
|
package/src/SelectViewport.tsx
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { FloatingFocusManager } from '@floating-ui/react'
|
|
2
|
-
import { TamaguiElement, isWeb } from '@tamagui/core'
|
|
2
|
+
import { TamaguiElement, composeRefs, isWeb } from '@tamagui/core'
|
|
3
3
|
import { styled } from '@tamagui/core'
|
|
4
4
|
import { PortalItem } from '@tamagui/portal'
|
|
5
5
|
import { ThemeableStack } from '@tamagui/stacks'
|
|
@@ -43,6 +43,10 @@ export const SelectViewport = React.forwardRef<TamaguiElement, SelectViewportPro
|
|
|
43
43
|
const context = useSelectContext(VIEWPORT_NAME, __scopeSelect)
|
|
44
44
|
const breakpointActive = useSelectBreakpointActive(context.sheetBreakpoint)
|
|
45
45
|
|
|
46
|
+
const composedRefs = composeRefs(
|
|
47
|
+
forwardedRef,
|
|
48
|
+
context.floatingContext?.refs.setFloating
|
|
49
|
+
)
|
|
46
50
|
if (context.shouldRenderWebNative) {
|
|
47
51
|
return <>{children}</>
|
|
48
52
|
}
|
|
@@ -83,7 +87,7 @@ export const SelectViewport = React.forwardRef<TamaguiElement, SelectViewportPro
|
|
|
83
87
|
// @ts-ignore
|
|
84
88
|
role="presentation"
|
|
85
89
|
{...viewportProps}
|
|
86
|
-
ref={
|
|
90
|
+
ref={composedRefs}
|
|
87
91
|
{...floatingProps}
|
|
88
92
|
{...restStyle}
|
|
89
93
|
overflow={disableScroll ? undefined : overflow ?? 'scroll'}
|
package/src/types.tsx
CHANGED
|
@@ -69,7 +69,6 @@ export interface SelectContextValue {
|
|
|
69
69
|
dataRef?: MutableRefObject<ContextData>
|
|
70
70
|
controlledScrolling?: boolean
|
|
71
71
|
listRef?: MutableRefObject<Array<HTMLElement | null>>
|
|
72
|
-
floatingRef?: MutableRefObject<HTMLElement | null>
|
|
73
72
|
canScrollUp?: boolean
|
|
74
73
|
canScrollDown?: boolean
|
|
75
74
|
floatingContext?: FloatingContext<ReferenceType>
|