@tamagui/select 1.74.13 → 1.74.14
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 +5 -45
- package/dist/cjs/Select.js.map +1 -1
- package/dist/cjs/Select.native.js +5 -45
- package/dist/cjs/Select.native.js.map +1 -1
- package/dist/cjs/SelectContent.js +3 -3
- package/dist/cjs/SelectContent.js.map +2 -2
- package/dist/cjs/SelectImpl.js +9 -24
- package/dist/cjs/SelectImpl.js.map +1 -1
- package/dist/cjs/SelectItem.js +17 -11
- package/dist/cjs/SelectItem.js.map +1 -1
- package/dist/cjs/SelectItem.native.js +17 -11
- package/dist/cjs/SelectItem.native.js.map +1 -1
- package/dist/cjs/SelectItemText.js +68 -0
- package/dist/cjs/SelectItemText.js.map +6 -0
- package/dist/cjs/SelectItemText.native.js +69 -0
- package/dist/cjs/SelectItemText.native.js.map +6 -0
- package/dist/esm/Select.js +2 -40
- package/dist/esm/Select.js.map +1 -1
- package/dist/esm/Select.native.js +2 -40
- package/dist/esm/Select.native.js.map +1 -1
- package/dist/esm/SelectContent.js +3 -2
- package/dist/esm/SelectContent.js.map +1 -1
- package/dist/esm/SelectImpl.js +10 -24
- package/dist/esm/SelectImpl.js.map +1 -1
- package/dist/esm/SelectItem.js +18 -12
- package/dist/esm/SelectItem.js.map +1 -1
- package/dist/esm/SelectItem.native.js +18 -12
- package/dist/esm/SelectItem.native.js.map +1 -1
- package/dist/esm/SelectItemText.js +44 -0
- package/dist/esm/SelectItemText.js.map +6 -0
- package/dist/esm/SelectItemText.native.js +44 -0
- package/dist/esm/SelectItemText.native.js.map +6 -0
- package/dist/jsx/Select.js +2 -51
- package/dist/jsx/Select.js.map +1 -1
- package/dist/jsx/Select.native.js +2 -51
- package/dist/jsx/Select.native.js.map +1 -1
- package/dist/jsx/SelectContent.js +3 -2
- package/dist/jsx/SelectContent.js.map +1 -1
- package/dist/jsx/SelectImpl.js +10 -24
- package/dist/jsx/SelectImpl.js.map +1 -1
- package/dist/jsx/SelectItem.js +18 -12
- package/dist/jsx/SelectItem.js.map +1 -1
- package/dist/jsx/SelectItem.native.js +18 -12
- package/dist/jsx/SelectItem.native.js.map +1 -1
- package/dist/jsx/SelectItemText.js +54 -0
- package/dist/jsx/SelectItemText.js.map +6 -0
- package/dist/jsx/SelectItemText.native.js +54 -0
- package/dist/jsx/SelectItemText.native.js.map +6 -0
- package/package.json +20 -20
- package/src/Select.tsx +1 -90
- package/src/SelectContent.tsx +6 -1
- package/src/SelectImpl.tsx +43 -49
- package/src/SelectItem.tsx +66 -56
- package/src/SelectItemText.tsx +92 -0
- package/types/Select.d.ts +167 -79
- package/types/Select.d.ts.map +1 -1
- package/types/SelectContent.d.ts.map +1 -1
- package/types/SelectImpl.d.ts.map +1 -1
- package/types/SelectItem.d.ts +136 -1
- package/types/SelectItem.d.ts.map +1 -1
- package/types/SelectItemText.d.ts +87 -0
- package/types/SelectItemText.d.ts.map +1 -0
- package/types/SelectViewport.d.ts +1 -36
- package/types/SelectViewport.d.ts.map +1 -1
package/dist/jsx/SelectItem.js
CHANGED
|
@@ -1,18 +1,23 @@
|
|
|
1
1
|
import { useComposedRefs } from "@tamagui/compose-refs";
|
|
2
2
|
import { isWeb, useIsomorphicLayoutEffect } from "@tamagui/core";
|
|
3
|
-
import {
|
|
3
|
+
import { ListItemFrame, useListItem } from "@tamagui/list-item";
|
|
4
4
|
import * as React from "react";
|
|
5
5
|
import { createSelectContext, useSelectItemParentContext } from "./context";
|
|
6
|
-
const ITEM_NAME = "SelectItem", [SelectItemContextProvider, useSelectItemContext] = createSelectContext(ITEM_NAME), SelectItem =
|
|
7
|
-
(props, forwardedRef)
|
|
6
|
+
const ITEM_NAME = "SelectItem", [SelectItemContextProvider, useSelectItemContext] = createSelectContext(ITEM_NAME), SelectItem = ListItemFrame.styleable(
|
|
7
|
+
function(props, forwardedRef) {
|
|
8
8
|
const {
|
|
9
9
|
__scopeSelect,
|
|
10
10
|
value,
|
|
11
11
|
disabled = !1,
|
|
12
12
|
textValue: textValueProp,
|
|
13
13
|
index,
|
|
14
|
-
...
|
|
15
|
-
} = props,
|
|
14
|
+
...restProps
|
|
15
|
+
} = props, { props: listItemProps } = useListItem({
|
|
16
|
+
...!props.unstyled && {
|
|
17
|
+
ellipse: !0
|
|
18
|
+
},
|
|
19
|
+
...restProps
|
|
20
|
+
}), context = useSelectItemParentContext(ITEM_NAME, __scopeSelect), {
|
|
16
21
|
setSelectedIndex,
|
|
17
22
|
listRef,
|
|
18
23
|
setOpen,
|
|
@@ -45,7 +50,7 @@ const ITEM_NAME = "SelectItem", [SelectItemContextProvider, useSelectItemContext
|
|
|
45
50
|
function handleSelect() {
|
|
46
51
|
setSelectedIndex(index), onChange(value), setOpen(!1);
|
|
47
52
|
}
|
|
48
|
-
const selectItemProps = interactions ? interactions.getItemProps({
|
|
53
|
+
const selectItemProps = React.useMemo(() => interactions ? interactions.getItemProps({
|
|
49
54
|
onTouchMove() {
|
|
50
55
|
allowSelectRef.current = !0, allowMouseUpRef.current = !1;
|
|
51
56
|
},
|
|
@@ -65,7 +70,7 @@ const ITEM_NAME = "SelectItem", [SelectItemContextProvider, useSelectItemContext
|
|
|
65
70
|
}
|
|
66
71
|
}) : {
|
|
67
72
|
onPress: handleSelect
|
|
68
|
-
};
|
|
73
|
+
}, [handleSelect]);
|
|
69
74
|
return useIsomorphicLayoutEffect(() => {
|
|
70
75
|
isActive && listRef?.current[index]?.focus();
|
|
71
76
|
}, [isActive]), <SelectItemContextProvider
|
|
@@ -73,7 +78,7 @@ const ITEM_NAME = "SelectItem", [SelectItemContextProvider, useSelectItemContext
|
|
|
73
78
|
value={value}
|
|
74
79
|
textId={textId || ""}
|
|
75
80
|
isSelected={isSelected}
|
|
76
|
-
>{shouldRenderWebNative ? <option value={value}>{props.children}</option> : <
|
|
81
|
+
>{shouldRenderWebNative ? <option value={value}>{props.children}</option> : <ListItemFrame
|
|
77
82
|
tag="div"
|
|
78
83
|
componentName={ITEM_NAME}
|
|
79
84
|
ref={composedRefs}
|
|
@@ -90,15 +95,16 @@ const ITEM_NAME = "SelectItem", [SelectItemContextProvider, useSelectItemContext
|
|
|
90
95
|
focusTheme: !0,
|
|
91
96
|
cursor: "default",
|
|
92
97
|
outlineWidth: 0,
|
|
93
|
-
size
|
|
94
|
-
ellipse: !0
|
|
98
|
+
size
|
|
95
99
|
}}
|
|
96
|
-
{...
|
|
100
|
+
{...listItemProps}
|
|
97
101
|
{...selectItemProps}
|
|
98
102
|
/>}</SelectItemContextProvider>;
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
disableTheme: !0
|
|
99
106
|
}
|
|
100
107
|
);
|
|
101
|
-
SelectItem.displayName = ITEM_NAME;
|
|
102
108
|
export {
|
|
103
109
|
SelectItem,
|
|
104
110
|
SelectItemContextProvider,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/SelectItem.tsx"],
|
|
4
|
-
"mappings": "AAAA,SAAS,uBAAuB;AAChC,SAAyB,OAAO,iCAAiC;AACjE,
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": ["isActive"]
|
|
6
6
|
}
|
|
@@ -1,18 +1,23 @@
|
|
|
1
1
|
import { useComposedRefs } from "@tamagui/compose-refs";
|
|
2
2
|
import { isWeb, useIsomorphicLayoutEffect } from "@tamagui/core";
|
|
3
|
-
import {
|
|
3
|
+
import { ListItemFrame, useListItem } from "@tamagui/list-item";
|
|
4
4
|
import * as React from "react";
|
|
5
5
|
import { createSelectContext, useSelectItemParentContext } from "./context";
|
|
6
|
-
const ITEM_NAME = "SelectItem", [SelectItemContextProvider, useSelectItemContext] = createSelectContext(ITEM_NAME), SelectItem =
|
|
7
|
-
(props, forwardedRef)
|
|
6
|
+
const ITEM_NAME = "SelectItem", [SelectItemContextProvider, useSelectItemContext] = createSelectContext(ITEM_NAME), SelectItem = ListItemFrame.styleable(
|
|
7
|
+
function(props, forwardedRef) {
|
|
8
8
|
const {
|
|
9
9
|
__scopeSelect,
|
|
10
10
|
value,
|
|
11
11
|
disabled = !1,
|
|
12
12
|
textValue: textValueProp,
|
|
13
13
|
index,
|
|
14
|
-
...
|
|
15
|
-
} = props,
|
|
14
|
+
...restProps
|
|
15
|
+
} = props, { props: listItemProps } = useListItem({
|
|
16
|
+
...!props.unstyled && {
|
|
17
|
+
ellipse: !0
|
|
18
|
+
},
|
|
19
|
+
...restProps
|
|
20
|
+
}), context = useSelectItemParentContext(ITEM_NAME, __scopeSelect), {
|
|
16
21
|
setSelectedIndex,
|
|
17
22
|
listRef,
|
|
18
23
|
setOpen,
|
|
@@ -45,7 +50,7 @@ const ITEM_NAME = "SelectItem", [SelectItemContextProvider, useSelectItemContext
|
|
|
45
50
|
function handleSelect() {
|
|
46
51
|
setSelectedIndex(index), onChange(value), setOpen(!1);
|
|
47
52
|
}
|
|
48
|
-
const selectItemProps = interactions ? interactions.getItemProps({
|
|
53
|
+
const selectItemProps = React.useMemo(() => interactions ? interactions.getItemProps({
|
|
49
54
|
onTouchMove() {
|
|
50
55
|
allowSelectRef.current = !0, allowMouseUpRef.current = !1;
|
|
51
56
|
},
|
|
@@ -65,7 +70,7 @@ const ITEM_NAME = "SelectItem", [SelectItemContextProvider, useSelectItemContext
|
|
|
65
70
|
}
|
|
66
71
|
}) : {
|
|
67
72
|
onPress: handleSelect
|
|
68
|
-
};
|
|
73
|
+
}, [handleSelect]);
|
|
69
74
|
return useIsomorphicLayoutEffect(() => {
|
|
70
75
|
var _a;
|
|
71
76
|
isActive && ((_a = listRef == null ? void 0 : listRef.current[index]) == null || _a.focus());
|
|
@@ -74,7 +79,7 @@ const ITEM_NAME = "SelectItem", [SelectItemContextProvider, useSelectItemContext
|
|
|
74
79
|
value={value}
|
|
75
80
|
textId={textId || ""}
|
|
76
81
|
isSelected={isSelected}
|
|
77
|
-
>{shouldRenderWebNative ? <option value={value}>{props.children}</option> : <
|
|
82
|
+
>{shouldRenderWebNative ? <option value={value}>{props.children}</option> : <ListItemFrame
|
|
78
83
|
tag="div"
|
|
79
84
|
componentName={ITEM_NAME}
|
|
80
85
|
ref={composedRefs}
|
|
@@ -91,15 +96,16 @@ const ITEM_NAME = "SelectItem", [SelectItemContextProvider, useSelectItemContext
|
|
|
91
96
|
focusTheme: !0,
|
|
92
97
|
cursor: "default",
|
|
93
98
|
outlineWidth: 0,
|
|
94
|
-
size
|
|
95
|
-
ellipse: !0
|
|
99
|
+
size
|
|
96
100
|
}}
|
|
97
|
-
{...
|
|
101
|
+
{...listItemProps}
|
|
98
102
|
{...selectItemProps}
|
|
99
103
|
/>}</SelectItemContextProvider>;
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
disableTheme: !0
|
|
100
107
|
}
|
|
101
108
|
);
|
|
102
|
-
SelectItem.displayName = ITEM_NAME;
|
|
103
109
|
export {
|
|
104
110
|
SelectItem,
|
|
105
111
|
SelectItemContextProvider,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/SelectItem.tsx"],
|
|
4
|
-
"mappings": "AAAA,SAAS,uBAAuB;AAChC,SAAyB,OAAO,iCAAiC;AACjE,
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": ["isActive"]
|
|
6
6
|
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { useComposedRefs } from "@tamagui/compose-refs";
|
|
2
|
+
import { styled } from "@tamagui/core";
|
|
3
|
+
import { SizableText } from "@tamagui/text";
|
|
4
|
+
import * as React from "react";
|
|
5
|
+
import { useSelectContext, useSelectItemParentContext } from "./context";
|
|
6
|
+
import { useSelectItemContext } from "./SelectItem";
|
|
7
|
+
const ITEM_TEXT_NAME = "SelectItemText", SelectItemTextFrame = styled(SizableText, {
|
|
8
|
+
name: ITEM_TEXT_NAME,
|
|
9
|
+
variants: {
|
|
10
|
+
unstyled: {
|
|
11
|
+
false: {
|
|
12
|
+
userSelect: "none",
|
|
13
|
+
color: "$color",
|
|
14
|
+
ellipse: !0
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
defaultVariants: {
|
|
19
|
+
unstyled: !1
|
|
20
|
+
}
|
|
21
|
+
}), SelectItemText = SelectItemTextFrame.styleable(function(props, forwardedRef) {
|
|
22
|
+
const { __scopeSelect, className, ...itemTextProps } = props, context = useSelectContext(ITEM_TEXT_NAME, __scopeSelect), itemParentContext = useSelectItemParentContext(ITEM_TEXT_NAME, __scopeSelect), ref = React.useRef(null), composedRefs = useComposedRefs(forwardedRef, ref), itemContext = useSelectItemContext(ITEM_TEXT_NAME, __scopeSelect), contents = React.useRef();
|
|
23
|
+
return contents.current = <SelectItemTextFrame
|
|
24
|
+
className={className}
|
|
25
|
+
size={itemParentContext.size}
|
|
26
|
+
id={itemContext.textId}
|
|
27
|
+
{...itemTextProps}
|
|
28
|
+
ref={composedRefs}
|
|
29
|
+
/>, React.useEffect(() => {
|
|
30
|
+
itemParentContext.initialValue === itemContext.value && !context.selectedIndex && context.setSelectedItem(contents.current);
|
|
31
|
+
}, []), React.useEffect(() => itemParentContext.valueSubscribe((val) => {
|
|
32
|
+
val === itemContext.value && context.setSelectedItem(contents.current);
|
|
33
|
+
}), [itemContext.value]), itemParentContext.shouldRenderWebNative ? <>{props.children}</> : <>
|
|
34
|
+
{contents.current}
|
|
35
|
+
{
|
|
36
|
+
/* Portal an option in the bubble select */
|
|
37
|
+
}
|
|
38
|
+
{
|
|
39
|
+
/* {context.bubbleSelect
|
|
40
|
+
? ReactDOM.createPortal(
|
|
41
|
+
// we use `.textContent` because `option` only support `string` or `number`
|
|
42
|
+
<option value={itemContext.value}>{ref.current?.textContent}</option>,
|
|
43
|
+
context.bubbleSelect
|
|
44
|
+
)
|
|
45
|
+
: null} */
|
|
46
|
+
}
|
|
47
|
+
</>;
|
|
48
|
+
});
|
|
49
|
+
export {
|
|
50
|
+
ITEM_TEXT_NAME,
|
|
51
|
+
SelectItemText,
|
|
52
|
+
SelectItemTextFrame
|
|
53
|
+
};
|
|
54
|
+
//# sourceMappingURL=SelectItemText.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/SelectItemText.tsx"],
|
|
4
|
+
"mappings": "AAAA,SAAS,uBAAuB;AAChC,SAAuC,cAAc;AACrD,SAAS,mBAAmB;AAC5B,YAAY,WAAW;AAEvB,SAAS,kBAAkB,kCAAkC;AAC7D,SAAS,4BAA4B;AAO9B,MAAM,iBAAiB,kBAEjB,sBAAsB,OAAO,aAAa;AAAA,EACrD,MAAM;AAAA,EAEN,UAAU;AAAA,IACR,UAAU;AAAA,MACR,OAAO;AAAA,QACL,YAAY;AAAA,QACZ,OAAO;AAAA,QACP,SAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF;AAAA,EAEA,iBAAiB;AAAA,IACf,UAAU;AAAA,EACZ;AACF,CAAC,GAIY,iBAAiB,oBAAoB,UAAU,SAC1D,OACA,cACA;AACA,QAAM,EAAE,eAAe,WAAW,GAAG,cAAc,IAAI,OACjD,UAAU,iBAAiB,gBAAgB,aAAa,GACxD,oBAAoB,2BAA2B,gBAAgB,aAAa,GAC5E,MAAM,MAAM,OAAkC,IAAI,GAClD,eAAe,gBAAgB,cAAc,GAAG,GAChD,cAAc,qBAAqB,gBAAgB,aAAa,GAChE,WAAW,MAAM,OAAwB;AA4B/C,SAxBA,SAAS,UACP,CAAC;AAAA,IACC,WAAW;AAAA,IACX,MAAM,kBAAkB;AAAA,IACxB,IAAI,YAAY;AAAA,QACZ;AAAA,IACJ,KAAK;AAAA,EACP,IAGF,MAAM,UAAU,MAAM;AACpB,IAAI,kBAAkB,iBAAiB,YAAY,SAAS,CAAC,QAAQ,iBACnE,QAAQ,gBAAgB,SAAS,OAAO;AAAA,EAE5C,GAAG,CAAC,CAAC,GAEL,MAAM,UAAU,MACP,kBAAkB,eAAe,CAAC,QAAQ;AAC/C,IAAI,QAAQ,YAAY,SACtB,QAAQ,gBAAgB,SAAS,OAAO;AAAA,EAE5C,CAAC,GACA,CAAC,YAAY,KAAK,CAAC,GAElB,kBAAkB,wBACb,GAAG,MAAM,SAAS,MAIzB;AAAA,KACG,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUZ;AAEJ,CAAC;",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { useComposedRefs } from "@tamagui/compose-refs";
|
|
2
|
+
import { styled } from "@tamagui/core";
|
|
3
|
+
import { SizableText } from "@tamagui/text";
|
|
4
|
+
import * as React from "react";
|
|
5
|
+
import { useSelectContext, useSelectItemParentContext } from "./context";
|
|
6
|
+
import { useSelectItemContext } from "./SelectItem";
|
|
7
|
+
const ITEM_TEXT_NAME = "SelectItemText", SelectItemTextFrame = styled(SizableText, {
|
|
8
|
+
name: ITEM_TEXT_NAME,
|
|
9
|
+
variants: {
|
|
10
|
+
unstyled: {
|
|
11
|
+
false: {
|
|
12
|
+
userSelect: "none",
|
|
13
|
+
color: "$color",
|
|
14
|
+
ellipse: !0
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
defaultVariants: {
|
|
19
|
+
unstyled: !1
|
|
20
|
+
}
|
|
21
|
+
}), SelectItemText = SelectItemTextFrame.styleable(function(props, forwardedRef) {
|
|
22
|
+
const { __scopeSelect, className, ...itemTextProps } = props, context = useSelectContext(ITEM_TEXT_NAME, __scopeSelect), itemParentContext = useSelectItemParentContext(ITEM_TEXT_NAME, __scopeSelect), ref = React.useRef(null), composedRefs = useComposedRefs(forwardedRef, ref), itemContext = useSelectItemContext(ITEM_TEXT_NAME, __scopeSelect), contents = React.useRef();
|
|
23
|
+
return contents.current = <SelectItemTextFrame
|
|
24
|
+
className={className}
|
|
25
|
+
size={itemParentContext.size}
|
|
26
|
+
id={itemContext.textId}
|
|
27
|
+
{...itemTextProps}
|
|
28
|
+
ref={composedRefs}
|
|
29
|
+
/>, React.useEffect(() => {
|
|
30
|
+
itemParentContext.initialValue === itemContext.value && !context.selectedIndex && context.setSelectedItem(contents.current);
|
|
31
|
+
}, []), React.useEffect(() => itemParentContext.valueSubscribe((val) => {
|
|
32
|
+
val === itemContext.value && context.setSelectedItem(contents.current);
|
|
33
|
+
}), [itemContext.value]), itemParentContext.shouldRenderWebNative ? <>{props.children}</> : <>
|
|
34
|
+
{contents.current}
|
|
35
|
+
{
|
|
36
|
+
/* Portal an option in the bubble select */
|
|
37
|
+
}
|
|
38
|
+
{
|
|
39
|
+
/* {context.bubbleSelect
|
|
40
|
+
? ReactDOM.createPortal(
|
|
41
|
+
// we use `.textContent` because `option` only support `string` or `number`
|
|
42
|
+
<option value={itemContext.value}>{ref.current?.textContent}</option>,
|
|
43
|
+
context.bubbleSelect
|
|
44
|
+
)
|
|
45
|
+
: null} */
|
|
46
|
+
}
|
|
47
|
+
</>;
|
|
48
|
+
});
|
|
49
|
+
export {
|
|
50
|
+
ITEM_TEXT_NAME,
|
|
51
|
+
SelectItemText,
|
|
52
|
+
SelectItemTextFrame
|
|
53
|
+
};
|
|
54
|
+
//# sourceMappingURL=SelectItemText.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/SelectItemText.tsx"],
|
|
4
|
+
"mappings": "AAAA,SAAS,uBAAuB;AAChC,SAAuC,cAAc;AACrD,SAAS,mBAAmB;AAC5B,YAAY,WAAW;AAEvB,SAAS,kBAAkB,kCAAkC;AAC7D,SAAS,4BAA4B;AAO9B,MAAM,iBAAiB,kBAEjB,sBAAsB,OAAO,aAAa;AAAA,EACrD,MAAM;AAAA,EAEN,UAAU;AAAA,IACR,UAAU;AAAA,MACR,OAAO;AAAA,QACL,YAAY;AAAA,QACZ,OAAO;AAAA,QACP,SAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF;AAAA,EAEA,iBAAiB;AAAA,IACf,UAAU;AAAA,EACZ;AACF,CAAC,GAIY,iBAAiB,oBAAoB,UAAU,SAC1D,OACA,cACA;AACA,QAAM,EAAE,eAAe,WAAW,GAAG,cAAc,IAAI,OACjD,UAAU,iBAAiB,gBAAgB,aAAa,GACxD,oBAAoB,2BAA2B,gBAAgB,aAAa,GAC5E,MAAM,MAAM,OAAkC,IAAI,GAClD,eAAe,gBAAgB,cAAc,GAAG,GAChD,cAAc,qBAAqB,gBAAgB,aAAa,GAChE,WAAW,MAAM,OAAwB;AA4B/C,SAxBA,SAAS,UACP,CAAC;AAAA,IACC,WAAW;AAAA,IACX,MAAM,kBAAkB;AAAA,IACxB,IAAI,YAAY;AAAA,QACZ;AAAA,IACJ,KAAK;AAAA,EACP,IAGF,MAAM,UAAU,MAAM;AACpB,IAAI,kBAAkB,iBAAiB,YAAY,SAAS,CAAC,QAAQ,iBACnE,QAAQ,gBAAgB,SAAS,OAAO;AAAA,EAE5C,GAAG,CAAC,CAAC,GAEL,MAAM,UAAU,MACP,kBAAkB,eAAe,CAAC,QAAQ;AAC/C,IAAI,QAAQ,YAAY,SACtB,QAAQ,gBAAgB,SAAS,OAAO;AAAA,EAE5C,CAAC,GACA,CAAC,YAAY,KAAK,CAAC,GAElB,kBAAkB,wBACb,GAAG,MAAM,SAAS,MAIzB;AAAA,KACG,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUZ;AAEJ,CAAC;",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tamagui/select",
|
|
3
|
-
"version": "1.74.
|
|
3
|
+
"version": "1.74.14",
|
|
4
4
|
"sideEffects": [
|
|
5
5
|
"*.css"
|
|
6
6
|
],
|
|
@@ -34,24 +34,24 @@
|
|
|
34
34
|
"@floating-ui/react": "^0.24.7",
|
|
35
35
|
"@floating-ui/react-dom": "^2.0.1",
|
|
36
36
|
"@floating-ui/react-native": "^0.10.1",
|
|
37
|
-
"@tamagui/adapt": "1.74.
|
|
38
|
-
"@tamagui/animate-presence": "1.74.
|
|
39
|
-
"@tamagui/compose-refs": "1.74.
|
|
40
|
-
"@tamagui/core": "1.74.
|
|
41
|
-
"@tamagui/create-context": "1.74.
|
|
42
|
-
"@tamagui/dismissable": "1.74.
|
|
43
|
-
"@tamagui/focus-scope": "1.74.
|
|
44
|
-
"@tamagui/get-token": "1.74.
|
|
45
|
-
"@tamagui/list-item": "1.74.
|
|
46
|
-
"@tamagui/portal": "1.74.
|
|
47
|
-
"@tamagui/remove-scroll": "1.74.
|
|
48
|
-
"@tamagui/separator": "1.74.
|
|
49
|
-
"@tamagui/sheet": "1.74.
|
|
50
|
-
"@tamagui/stacks": "1.74.
|
|
51
|
-
"@tamagui/text": "1.74.
|
|
52
|
-
"@tamagui/use-controllable-state": "1.74.
|
|
53
|
-
"@tamagui/use-event": "1.74.
|
|
54
|
-
"@tamagui/use-previous": "1.74.
|
|
37
|
+
"@tamagui/adapt": "1.74.14",
|
|
38
|
+
"@tamagui/animate-presence": "1.74.14",
|
|
39
|
+
"@tamagui/compose-refs": "1.74.14",
|
|
40
|
+
"@tamagui/core": "1.74.14",
|
|
41
|
+
"@tamagui/create-context": "1.74.14",
|
|
42
|
+
"@tamagui/dismissable": "1.74.14",
|
|
43
|
+
"@tamagui/focus-scope": "1.74.14",
|
|
44
|
+
"@tamagui/get-token": "1.74.14",
|
|
45
|
+
"@tamagui/list-item": "1.74.14",
|
|
46
|
+
"@tamagui/portal": "1.74.14",
|
|
47
|
+
"@tamagui/remove-scroll": "1.74.14",
|
|
48
|
+
"@tamagui/separator": "1.74.14",
|
|
49
|
+
"@tamagui/sheet": "1.74.14",
|
|
50
|
+
"@tamagui/stacks": "1.74.14",
|
|
51
|
+
"@tamagui/text": "1.74.14",
|
|
52
|
+
"@tamagui/use-controllable-state": "1.74.14",
|
|
53
|
+
"@tamagui/use-event": "1.74.14",
|
|
54
|
+
"@tamagui/use-previous": "1.74.14",
|
|
55
55
|
"react-dom": "^18.2.0"
|
|
56
56
|
},
|
|
57
57
|
"peerDependencies": {
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
"react-native": "*"
|
|
60
60
|
},
|
|
61
61
|
"devDependencies": {
|
|
62
|
-
"@tamagui/build": "1.74.
|
|
62
|
+
"@tamagui/build": "1.74.14",
|
|
63
63
|
"react": "^18.2.0",
|
|
64
64
|
"react-native": "^0.72.1"
|
|
65
65
|
},
|
package/src/Select.tsx
CHANGED
|
@@ -4,7 +4,6 @@ import {
|
|
|
4
4
|
FontSizeTokens,
|
|
5
5
|
GetProps,
|
|
6
6
|
TamaguiElement,
|
|
7
|
-
TamaguiTextElement,
|
|
8
7
|
getVariableValue,
|
|
9
8
|
isWeb,
|
|
10
9
|
styled,
|
|
@@ -34,6 +33,7 @@ import {
|
|
|
34
33
|
import { SelectContent } from './SelectContent'
|
|
35
34
|
import { SelectInlineImpl } from './SelectImpl'
|
|
36
35
|
import { SelectItem, useSelectItemContext } from './SelectItem'
|
|
36
|
+
import { ITEM_TEXT_NAME, SelectItemText } from './SelectItemText'
|
|
37
37
|
import { SelectScrollDownButton, SelectScrollUpButton } from './SelectScrollButton'
|
|
38
38
|
import { SelectTrigger } from './SelectTrigger'
|
|
39
39
|
import { SelectViewport } from './SelectViewport'
|
|
@@ -117,95 +117,6 @@ export const SelectIcon = styled(XStack, {
|
|
|
117
117
|
children: <Paragraph>▼</Paragraph>,
|
|
118
118
|
})
|
|
119
119
|
|
|
120
|
-
/* -------------------------------------------------------------------------------------------------
|
|
121
|
-
* SelectItemText
|
|
122
|
-
* -----------------------------------------------------------------------------------------------*/
|
|
123
|
-
|
|
124
|
-
const ITEM_TEXT_NAME = 'SelectItemText'
|
|
125
|
-
|
|
126
|
-
export const SelectItemTextFrame = styled(SizableText, {
|
|
127
|
-
name: ITEM_TEXT_NAME,
|
|
128
|
-
|
|
129
|
-
variants: {
|
|
130
|
-
unstyled: {
|
|
131
|
-
false: {
|
|
132
|
-
userSelect: 'none',
|
|
133
|
-
color: '$color',
|
|
134
|
-
ellipse: true,
|
|
135
|
-
},
|
|
136
|
-
},
|
|
137
|
-
} as const,
|
|
138
|
-
|
|
139
|
-
defaultVariants: {
|
|
140
|
-
unstyled: false,
|
|
141
|
-
},
|
|
142
|
-
})
|
|
143
|
-
|
|
144
|
-
type SelectItemTextProps = GetProps<typeof SelectItemTextFrame>
|
|
145
|
-
|
|
146
|
-
const SelectItemText = React.forwardRef<TamaguiTextElement, SelectItemTextProps>(
|
|
147
|
-
(props: ScopedProps<SelectItemTextProps>, forwardedRef) => {
|
|
148
|
-
const { __scopeSelect, className, ...itemTextProps } = props
|
|
149
|
-
const context = useSelectContext(ITEM_TEXT_NAME, __scopeSelect)
|
|
150
|
-
const itemParentContext = useSelectItemParentContext(ITEM_TEXT_NAME, __scopeSelect)
|
|
151
|
-
const ref = React.useRef<TamaguiTextElement | null>(null)
|
|
152
|
-
const composedRefs = useComposedRefs(forwardedRef, ref)
|
|
153
|
-
const itemContext = useSelectItemContext(ITEM_TEXT_NAME, __scopeSelect)
|
|
154
|
-
|
|
155
|
-
const contents = React.useMemo(
|
|
156
|
-
() => (
|
|
157
|
-
<SelectItemTextFrame
|
|
158
|
-
className={className}
|
|
159
|
-
size={itemParentContext.size as any}
|
|
160
|
-
id={itemContext.textId}
|
|
161
|
-
{...itemTextProps}
|
|
162
|
-
ref={composedRefs}
|
|
163
|
-
/>
|
|
164
|
-
),
|
|
165
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
166
|
-
[props, itemParentContext.size, className, itemContext.textId]
|
|
167
|
-
)
|
|
168
|
-
|
|
169
|
-
React.useEffect(() => {
|
|
170
|
-
if (
|
|
171
|
-
itemParentContext.initialValue === itemContext.value &&
|
|
172
|
-
!context.selectedIndex
|
|
173
|
-
) {
|
|
174
|
-
context.setSelectedItem(contents)
|
|
175
|
-
}
|
|
176
|
-
}, [])
|
|
177
|
-
|
|
178
|
-
React.useEffect(() => {
|
|
179
|
-
return itemParentContext.valueSubscribe((val) => {
|
|
180
|
-
if (val === itemContext.value) {
|
|
181
|
-
context.setSelectedItem(contents)
|
|
182
|
-
}
|
|
183
|
-
})
|
|
184
|
-
}, [itemContext.value])
|
|
185
|
-
|
|
186
|
-
if (itemParentContext.shouldRenderWebNative) {
|
|
187
|
-
return <>{props.children}</>
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
return (
|
|
191
|
-
<>
|
|
192
|
-
{contents}
|
|
193
|
-
|
|
194
|
-
{/* Portal an option in the bubble select */}
|
|
195
|
-
{/* {context.bubbleSelect
|
|
196
|
-
? ReactDOM.createPortal(
|
|
197
|
-
// we use `.textContent` because `option` only support `string` or `number`
|
|
198
|
-
<option value={itemContext.value}>{ref.current?.textContent}</option>,
|
|
199
|
-
context.bubbleSelect
|
|
200
|
-
)
|
|
201
|
-
: null} */}
|
|
202
|
-
</>
|
|
203
|
-
)
|
|
204
|
-
}
|
|
205
|
-
)
|
|
206
|
-
|
|
207
|
-
SelectItemText.displayName = ITEM_TEXT_NAME
|
|
208
|
-
|
|
209
120
|
/* -------------------------------------------------------------------------------------------------
|
|
210
121
|
* SelectItemIndicator
|
|
211
122
|
* -----------------------------------------------------------------------------------------------*/
|
package/src/SelectContent.tsx
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { FloatingOverlay, FloatingPortal } from '@floating-ui/react'
|
|
2
2
|
import { Theme, useIsTouchDevice, useThemeName } from '@tamagui/core'
|
|
3
3
|
import { FocusScope, FocusScopeProps } from '@tamagui/focus-scope'
|
|
4
|
+
import { useMemo } from 'react'
|
|
4
5
|
|
|
5
6
|
import { useSelectContext, useSelectItemParentContext } from './context'
|
|
6
7
|
import { SelectContentProps } from './types'
|
|
@@ -31,6 +32,10 @@ export const SelectContent = ({
|
|
|
31
32
|
|
|
32
33
|
const touch = useIsTouchDevice()
|
|
33
34
|
|
|
35
|
+
const overlayStyle = useMemo(() => {
|
|
36
|
+
return { zIndex, pointerEvents: context.open ? 'auto' : 'none' } as const
|
|
37
|
+
}, [context.open])
|
|
38
|
+
|
|
34
39
|
if (itemParentContext.shouldRenderWebNative) {
|
|
35
40
|
return <>{children}</>
|
|
36
41
|
}
|
|
@@ -45,7 +50,7 @@ export const SelectContent = ({
|
|
|
45
50
|
return (
|
|
46
51
|
<FloatingPortal>
|
|
47
52
|
<FloatingOverlay
|
|
48
|
-
style={
|
|
53
|
+
style={overlayStyle}
|
|
49
54
|
lockScroll={!context.disablePreventBodyScroll && !!context.open && !touch}
|
|
50
55
|
>
|
|
51
56
|
<FocusScope loop enabled={!!context.open} trapped {...focusScopeProps}>
|
package/src/SelectImpl.tsx
CHANGED
|
@@ -17,6 +17,8 @@ import {
|
|
|
17
17
|
import {
|
|
18
18
|
isClient,
|
|
19
19
|
isWeb,
|
|
20
|
+
useEvent,
|
|
21
|
+
useGet,
|
|
20
22
|
useIsTouchDevice,
|
|
21
23
|
useIsomorphicLayoutEffect,
|
|
22
24
|
} from '@tamagui/core'
|
|
@@ -110,51 +112,31 @@ export const SelectInlineImpl = (props: SelectImplProps) => {
|
|
|
110
112
|
open,
|
|
111
113
|
onOpenChange: setOpen,
|
|
112
114
|
placement: 'bottom-start',
|
|
113
|
-
middleware:
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
},
|
|
139
|
-
}) {
|
|
140
|
-
floatingStyle.current = {
|
|
141
|
-
minWidth: width + 8,
|
|
142
|
-
}
|
|
143
|
-
},
|
|
144
|
-
}),
|
|
145
|
-
...flipOrShiftMiddlewares,
|
|
146
|
-
inner({
|
|
147
|
-
listRef: listItemsRef,
|
|
148
|
-
overflowRef,
|
|
149
|
-
index: selectedIndex,
|
|
150
|
-
offset: innerOffset,
|
|
151
|
-
onFallbackChange: setFallback,
|
|
152
|
-
padding: 10,
|
|
153
|
-
minItemsVisible: touch ? 10 : 4,
|
|
154
|
-
referenceOverflowThreshold: 20,
|
|
155
|
-
}),
|
|
156
|
-
offset({ crossAxis: -5 }),
|
|
157
|
-
],
|
|
115
|
+
middleware: [
|
|
116
|
+
size({
|
|
117
|
+
apply({
|
|
118
|
+
rects: {
|
|
119
|
+
reference: { width },
|
|
120
|
+
},
|
|
121
|
+
}) {
|
|
122
|
+
floatingStyle.current = {
|
|
123
|
+
minWidth: width + 8,
|
|
124
|
+
}
|
|
125
|
+
},
|
|
126
|
+
}),
|
|
127
|
+
...flipOrShiftMiddlewares,
|
|
128
|
+
inner({
|
|
129
|
+
listRef: listItemsRef,
|
|
130
|
+
overflowRef,
|
|
131
|
+
index: selectedIndex,
|
|
132
|
+
offset: innerOffset,
|
|
133
|
+
// onFallbackChange: setFallback,
|
|
134
|
+
padding: 10,
|
|
135
|
+
minItemsVisible: touch ? 10 : 4,
|
|
136
|
+
referenceOverflowThreshold: 20,
|
|
137
|
+
}),
|
|
138
|
+
offset({ crossAxis: -5 }),
|
|
139
|
+
],
|
|
158
140
|
})
|
|
159
141
|
|
|
160
142
|
useIsomorphicLayoutEffect(() => {
|
|
@@ -176,7 +158,12 @@ export const SelectInlineImpl = (props: SelectImplProps) => {
|
|
|
176
158
|
floatingRef.current.clientHeight -
|
|
177
159
|
SCROLL_ARROW_THRESHOLD
|
|
178
160
|
|
|
179
|
-
const
|
|
161
|
+
const onMatch = useEvent((index: number) => {
|
|
162
|
+
const fn = open ? setActiveIndex : setSelectedIndex
|
|
163
|
+
return fn(index)
|
|
164
|
+
})
|
|
165
|
+
|
|
166
|
+
const interactionsProps = [
|
|
180
167
|
useClick(context, { event: 'mousedown' }),
|
|
181
168
|
useDismiss(context, { outsidePress: false }),
|
|
182
169
|
useRole(context, { role: 'listbox' }),
|
|
@@ -194,11 +181,18 @@ export const SelectInlineImpl = (props: SelectImplProps) => {
|
|
|
194
181
|
}),
|
|
195
182
|
useTypeahead(context, {
|
|
196
183
|
listRef: listContentRef,
|
|
197
|
-
onMatch
|
|
184
|
+
onMatch,
|
|
198
185
|
selectedIndex,
|
|
199
186
|
activeIndex,
|
|
200
187
|
}),
|
|
201
|
-
]
|
|
188
|
+
]
|
|
189
|
+
|
|
190
|
+
const interactions = useInteractions(
|
|
191
|
+
// unfortunately these memos will just always break due to floating-ui context always changing :/
|
|
192
|
+
React.useMemo(() => {
|
|
193
|
+
return interactionsProps
|
|
194
|
+
}, interactionsProps)
|
|
195
|
+
)
|
|
202
196
|
|
|
203
197
|
const interactionsContext = React.useMemo(() => {
|
|
204
198
|
return {
|
|
@@ -257,7 +251,7 @@ export const SelectInlineImpl = (props: SelectImplProps) => {
|
|
|
257
251
|
})
|
|
258
252
|
},
|
|
259
253
|
}
|
|
260
|
-
}, [refs.reference.current, refs.floating.current,
|
|
254
|
+
}, [refs.reference.current, x, y, refs.floating.current, interactions])
|
|
261
255
|
|
|
262
256
|
// effects
|
|
263
257
|
|