@tamagui/select 1.47.4 → 1.47.6
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 +82 -40
- package/dist/cjs/Select.js.map +1 -1
- package/dist/cjs/SelectContent.js +2 -1
- package/dist/cjs/SelectContent.js.map +1 -1
- package/dist/cjs/SelectImpl.js +38 -23
- package/dist/cjs/SelectImpl.js.map +2 -2
- package/dist/cjs/SelectItem.js +24 -12
- package/dist/cjs/SelectItem.js.map +1 -1
- package/dist/cjs/SelectTrigger.js +7 -6
- package/dist/cjs/SelectTrigger.js.map +1 -1
- package/dist/cjs/SelectViewport.js +6 -5
- package/dist/cjs/SelectViewport.js.map +1 -1
- package/dist/cjs/context.js +19 -4
- package/dist/cjs/context.js.map +1 -1
- package/dist/esm/Select.js +89 -41
- package/dist/esm/Select.js.map +1 -1
- package/dist/esm/SelectContent.js +3 -2
- package/dist/esm/SelectContent.js.map +1 -1
- package/dist/esm/SelectImpl.js +42 -23
- package/dist/esm/SelectImpl.js.map +1 -1
- package/dist/esm/SelectItem.js +28 -13
- package/dist/esm/SelectItem.js.map +1 -1
- package/dist/esm/SelectTrigger.js +8 -7
- package/dist/esm/SelectTrigger.js.map +1 -1
- package/dist/esm/SelectViewport.js +11 -6
- package/dist/esm/SelectViewport.js.map +1 -1
- package/dist/esm/context.js +14 -3
- package/dist/esm/context.js.map +1 -1
- package/dist/jsx/Select.js +66 -22
- package/dist/jsx/Select.js.map +1 -1
- package/dist/jsx/SelectContent.js +3 -2
- package/dist/jsx/SelectContent.js.map +1 -1
- package/dist/jsx/SelectImpl.js +38 -23
- package/dist/jsx/SelectImpl.js.map +1 -1
- package/dist/jsx/SelectItem.js +28 -13
- package/dist/jsx/SelectItem.js.map +1 -1
- package/dist/jsx/SelectTrigger.js +8 -7
- package/dist/jsx/SelectTrigger.js.map +1 -1
- package/dist/jsx/SelectViewport.js +11 -6
- package/dist/jsx/SelectViewport.js.map +1 -1
- package/dist/jsx/context.js +14 -3
- package/dist/jsx/context.js.map +1 -1
- package/package.json +19 -19
- package/src/Select.tsx +101 -49
- package/src/SelectContent.tsx +3 -2
- package/src/SelectImpl.tsx +46 -23
- package/src/SelectItem.tsx +33 -14
- package/src/SelectTrigger.tsx +8 -7
- package/src/SelectViewport.tsx +13 -6
- package/src/context.tsx +24 -8
- package/src/types.tsx +24 -18
- package/types/Select.d.ts.map +1 -1
- package/types/SelectContent.d.ts.map +1 -1
- package/types/SelectImpl.d.ts +2 -1
- package/types/SelectImpl.d.ts.map +1 -1
- package/types/SelectItem.d.ts.map +1 -1
- package/types/SelectTrigger.d.ts.map +1 -1
- package/types/SelectViewport.d.ts.map +1 -1
- package/types/context.d.ts +23 -2
- package/types/context.d.ts.map +1 -1
- package/types/types.d.ts +23 -16
- package/types/types.d.ts.map +1 -1
package/dist/jsx/SelectItem.js
CHANGED
|
@@ -6,7 +6,10 @@ import {
|
|
|
6
6
|
} from "@tamagui/core";
|
|
7
7
|
import { ListItem } from "@tamagui/list-item";
|
|
8
8
|
import * as React from "react";
|
|
9
|
-
import {
|
|
9
|
+
import {
|
|
10
|
+
createSelectContext,
|
|
11
|
+
useSelectItemParentContext
|
|
12
|
+
} from "./context";
|
|
10
13
|
const ITEM_NAME = "SelectItem";
|
|
11
14
|
const [SelectItemContextProvider, useSelectItemContext] = createSelectContext(ITEM_NAME);
|
|
12
15
|
const SelectItem = React.forwardRef(
|
|
@@ -19,23 +22,36 @@ const SelectItem = React.forwardRef(
|
|
|
19
22
|
index,
|
|
20
23
|
...itemProps
|
|
21
24
|
} = props;
|
|
22
|
-
const context =
|
|
23
|
-
const isSelected = context.value === value;
|
|
24
|
-
const textId = React.useId();
|
|
25
|
+
const context = useSelectItemParentContext(ITEM_NAME, __scopeSelect);
|
|
25
26
|
const {
|
|
26
|
-
selectedIndex,
|
|
27
27
|
setSelectedIndex,
|
|
28
28
|
listRef,
|
|
29
|
-
open,
|
|
30
29
|
setOpen,
|
|
31
30
|
onChange,
|
|
32
|
-
|
|
31
|
+
activeIndexSubscribe,
|
|
32
|
+
valueSubscribe,
|
|
33
33
|
allowMouseUpRef,
|
|
34
34
|
allowSelectRef,
|
|
35
35
|
setValueAtIndex,
|
|
36
36
|
selectTimeoutRef,
|
|
37
|
-
dataRef
|
|
37
|
+
dataRef,
|
|
38
|
+
interactions,
|
|
39
|
+
shouldRenderWebNative,
|
|
40
|
+
size
|
|
38
41
|
} = context;
|
|
42
|
+
const [isSelected, setSelected] = React.useState(false);
|
|
43
|
+
const [isActive, setActive] = React.useState(false);
|
|
44
|
+
React.useEffect(() => {
|
|
45
|
+
return activeIndexSubscribe((i) => {
|
|
46
|
+
setActive(index === i);
|
|
47
|
+
});
|
|
48
|
+
}, [index]);
|
|
49
|
+
React.useEffect(() => {
|
|
50
|
+
return valueSubscribe((val) => {
|
|
51
|
+
setSelected(val === value);
|
|
52
|
+
});
|
|
53
|
+
}, [value]);
|
|
54
|
+
const textId = React.useId();
|
|
39
55
|
const composedRefs = useComposedRefs(forwardedRef, (node) => {
|
|
40
56
|
if (!isWeb)
|
|
41
57
|
return;
|
|
@@ -53,7 +69,7 @@ const SelectItem = React.forwardRef(
|
|
|
53
69
|
onChange(value);
|
|
54
70
|
setOpen(false);
|
|
55
71
|
}
|
|
56
|
-
const selectItemProps =
|
|
72
|
+
const selectItemProps = interactions ? interactions.getItemProps({
|
|
57
73
|
...isWebTouchable ? {
|
|
58
74
|
onTouchStart() {
|
|
59
75
|
allowSelectRef.current = true;
|
|
@@ -98,8 +114,7 @@ const SelectItem = React.forwardRef(
|
|
|
98
114
|
}) : {
|
|
99
115
|
onPress: handleSelect
|
|
100
116
|
};
|
|
101
|
-
|
|
102
|
-
React.useLayoutEffect(() => {
|
|
117
|
+
useIsomorphicLayoutEffect(() => {
|
|
103
118
|
if (isActive) {
|
|
104
119
|
listRef?.current[index]?.focus();
|
|
105
120
|
}
|
|
@@ -109,7 +124,7 @@ const SelectItem = React.forwardRef(
|
|
|
109
124
|
value={value}
|
|
110
125
|
textId={textId || ""}
|
|
111
126
|
isSelected={isSelected}
|
|
112
|
-
>{
|
|
127
|
+
>{shouldRenderWebNative ? <option value={value}>{props.children}</option> : <ListItem
|
|
113
128
|
tag="div"
|
|
114
129
|
componentName={ITEM_NAME}
|
|
115
130
|
backgrounded
|
|
@@ -125,7 +140,7 @@ const SelectItem = React.forwardRef(
|
|
|
125
140
|
aria-disabled={disabled || void 0}
|
|
126
141
|
data-disabled={disabled ? "" : void 0}
|
|
127
142
|
tabIndex={disabled ? void 0 : -1}
|
|
128
|
-
size={
|
|
143
|
+
size={size}
|
|
129
144
|
{...itemProps}
|
|
130
145
|
{...selectItemProps}
|
|
131
146
|
/>}</SelectItemContextProvider>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/SelectItem.tsx"],
|
|
4
|
-
"mappings": "AAAA,SAAS,uBAAuB;AAChC;AAAA,EAEE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,gBAA+B;AACxC,YAAY,WAAW;AAEvB,
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
import { useComposedRefs } from "@tamagui/compose-refs";
|
|
2
2
|
import { ListItem } from "@tamagui/list-item";
|
|
3
3
|
import * as React from "react";
|
|
4
|
-
import { useSelectContext } from "./context";
|
|
4
|
+
import { useSelectContext, useSelectItemParentContext } from "./context";
|
|
5
5
|
const TRIGGER_NAME = "SelectTrigger";
|
|
6
6
|
const SelectTrigger = React.forwardRef(
|
|
7
7
|
function SelectTrigger2(props, forwardedRef) {
|
|
8
8
|
const { __scopeSelect, disabled = false, unstyled = false, ...triggerProps } = props;
|
|
9
9
|
const context = useSelectContext(TRIGGER_NAME, __scopeSelect);
|
|
10
|
+
const itemParentContext = useSelectItemParentContext(TRIGGER_NAME, __scopeSelect);
|
|
10
11
|
const composedRefs = useComposedRefs(
|
|
11
12
|
forwardedRef,
|
|
12
13
|
context.floatingContext?.refs.setReference
|
|
13
14
|
);
|
|
14
|
-
if (
|
|
15
|
+
if (itemParentContext.shouldRenderWebNative) {
|
|
15
16
|
return null;
|
|
16
17
|
}
|
|
17
18
|
return <ListItem
|
|
@@ -30,7 +31,7 @@ const SelectTrigger = React.forwardRef(
|
|
|
30
31
|
},
|
|
31
32
|
borderWidth: 1
|
|
32
33
|
}}
|
|
33
|
-
size={
|
|
34
|
+
size={itemParentContext.size}
|
|
34
35
|
aria-expanded={context.open}
|
|
35
36
|
aria-autocomplete="none"
|
|
36
37
|
dir={context.dir}
|
|
@@ -38,15 +39,15 @@ const SelectTrigger = React.forwardRef(
|
|
|
38
39
|
data-disabled={disabled ? "" : void 0}
|
|
39
40
|
{...triggerProps}
|
|
40
41
|
ref={composedRefs}
|
|
41
|
-
{...process.env.TAMAGUI_TARGET === "web" &&
|
|
42
|
-
...
|
|
42
|
+
{...process.env.TAMAGUI_TARGET === "web" && itemParentContext.interactions ? {
|
|
43
|
+
...itemParentContext.interactions.getReferenceProps(),
|
|
43
44
|
onMouseDown() {
|
|
44
45
|
context.floatingContext?.update();
|
|
45
|
-
|
|
46
|
+
itemParentContext.setOpen(!context.open);
|
|
46
47
|
}
|
|
47
48
|
} : {
|
|
48
49
|
onPress() {
|
|
49
|
-
|
|
50
|
+
itemParentContext.setOpen(!context.open);
|
|
50
51
|
}
|
|
51
52
|
}}
|
|
52
53
|
/>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/SelectTrigger.tsx"],
|
|
4
|
-
"mappings": "AAAA,SAAS,uBAAuB;AAEhC,SAAS,gBAA+B;AACxC,YAAY,WAAW;AAEvB,SAAS,
|
|
4
|
+
"mappings": "AAAA,SAAS,uBAAuB;AAEhC,SAAS,gBAA+B;AACxC,YAAY,WAAW;AAEvB,SAAS,kBAAkB,kCAAkC;AAM7D,MAAM,eAAe;AAId,MAAM,gBAAgB,MAAM;AAAA,EACjC,SAASA,eAAc,OAAwC,cAAc;AAC3E,UAAM,EAAE,eAAe,WAAW,OAAO,WAAW,OAAO,GAAG,aAAa,IAAI;AAE/E,UAAM,UAAU,iBAAiB,cAAc,aAAa;AAC5D,UAAM,oBAAoB,2BAA2B,cAAc,aAAa;AAChF,UAAM,eAAe;AAAA,MACnB;AAAA,MACA,QAAQ,iBAAiB,KAAK;AAAA,IAChC;AAIA,QAAI,kBAAkB,uBAAuB;AAC3C,aAAO;AAAA,IACT;AAEA,WACE,CAAC;AAAA,MACC,eAAe;AAAA,MACf,UAAU;AAAA,UACL,CAAC,YAAY;AAAA,QAChB,cAAc;AAAA,QACd,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ,WAAW;AAAA,QACX,YAAY;AAAA,UACV,cAAc;AAAA,UACd,cAAc;AAAA,UACd,cAAc;AAAA,QAChB;AAAA,QACA,aAAa;AAAA,MACf;AAAA,MACA,MAAM,kBAAkB;AAAA,MAExB,eAAe,QAAQ;AAAA,MACvB,kBAAkB;AAAA,MAClB,KAAK,QAAQ;AAAA,MACb,UAAU;AAAA,MACV,eAAe,WAAW,KAAK;AAAA,UAC3B;AAAA,MACJ,KAAK;AAAA,UACA,QAAQ,IAAI,mBAAmB,SAAS,kBAAkB,eAC3D;AAAA,QACE,GAAG,kBAAkB,aAAa,kBAAkB;AAAA,QACpD,cAAc;AACZ,kBAAQ,iBAAiB,OAAO;AAChC,4BAAkB,QAAQ,CAAC,QAAQ,IAAI;AAAA,QACzC;AAAA,MACF,IACA;AAAA,QACE,UAAU;AACR,4BAAkB,QAAQ,CAAC,QAAQ,IAAI;AAAA,QACzC;AAAA,MACF;AAAA,IACN;AAAA,EAEJ;AACF;",
|
|
5
5
|
"names": ["SelectTrigger"]
|
|
6
6
|
}
|
|
@@ -9,7 +9,11 @@ import { styled } from "@tamagui/core";
|
|
|
9
9
|
import { PortalItem } from "@tamagui/portal";
|
|
10
10
|
import { ThemeableStack } from "@tamagui/stacks";
|
|
11
11
|
import { VIEWPORT_NAME } from "./constants";
|
|
12
|
-
import {
|
|
12
|
+
import {
|
|
13
|
+
ForwardSelectContext,
|
|
14
|
+
useSelectContext,
|
|
15
|
+
useSelectItemParentContext
|
|
16
|
+
} from "./context";
|
|
13
17
|
import { useSelectBreakpointActive } from "./useSelectBreakpointActive";
|
|
14
18
|
const SelectViewportFrame = styled(ThemeableStack, {
|
|
15
19
|
name: VIEWPORT_NAME,
|
|
@@ -40,6 +44,7 @@ const SelectViewport = SelectViewportFrame.styleable(
|
|
|
40
44
|
function SelectViewport2(props, forwardedRef) {
|
|
41
45
|
const { __scopeSelect, children, disableScroll, ...viewportProps } = props;
|
|
42
46
|
const context = useSelectContext(VIEWPORT_NAME, __scopeSelect);
|
|
47
|
+
const itemContext = useSelectItemParentContext(VIEWPORT_NAME, __scopeSelect);
|
|
43
48
|
const breakpointActive = useSelectBreakpointActive(context.sheetBreakpoint);
|
|
44
49
|
useIsomorphicLayoutEffect(() => {
|
|
45
50
|
if (context.update) {
|
|
@@ -50,13 +55,13 @@ const SelectViewport = SelectViewportFrame.styleable(
|
|
|
50
55
|
forwardedRef,
|
|
51
56
|
context.floatingContext?.refs.setFloating
|
|
52
57
|
);
|
|
53
|
-
if (
|
|
58
|
+
if (itemContext.shouldRenderWebNative) {
|
|
54
59
|
return <>{children}</>;
|
|
55
60
|
}
|
|
56
61
|
if (breakpointActive || !isWeb) {
|
|
57
|
-
return <PortalItem hostName={`${context.scopeKey}SheetContents`}><ForwardSelectContext context={context}>{children}</ForwardSelectContext></PortalItem>;
|
|
62
|
+
return <PortalItem hostName={`${context.scopeKey}SheetContents`}><ForwardSelectContext itemContext={itemContext} context={context}>{children}</ForwardSelectContext></PortalItem>;
|
|
58
63
|
}
|
|
59
|
-
if (!
|
|
64
|
+
if (!itemContext.interactions) {
|
|
60
65
|
if (process.env.NODE_ENV === "development") {
|
|
61
66
|
console.warn(`No interactions provided to Select, potentially missing Adapt`);
|
|
62
67
|
}
|
|
@@ -65,7 +70,7 @@ const SelectViewport = SelectViewportFrame.styleable(
|
|
|
65
70
|
const {
|
|
66
71
|
style: { scrollbarWidth, listStyleType, overflow, ...restStyle },
|
|
67
72
|
...floatingProps
|
|
68
|
-
} =
|
|
73
|
+
} = itemContext.interactions.getFloatingProps();
|
|
69
74
|
return <>
|
|
70
75
|
{!disableScroll && !props.unstyled && <style
|
|
71
76
|
dangerouslySetInnerHTML={{
|
|
@@ -74,7 +79,7 @@ const SelectViewport = SelectViewportFrame.styleable(
|
|
|
74
79
|
/>}
|
|
75
80
|
<FloatingFocusManager context={context.floatingContext}><AnimatePresence>{context.open ? <SelectViewportFrame
|
|
76
81
|
key="select-viewport"
|
|
77
|
-
size={
|
|
82
|
+
size={itemContext.size}
|
|
78
83
|
role="presentation"
|
|
79
84
|
{...viewportProps}
|
|
80
85
|
ref={composedRefs}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/SelectViewport.tsx"],
|
|
4
|
-
"mappings": "AAAA,SAAS,4BAA4B;AACrC,SAAS,uBAAuB;AAChC;AAAA,EAEE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,cAAc;AACvB,SAAS,kBAAkB;AAC3B,SAAS,sBAAsB;AAG/B,SAAS,qBAAqB;AAC9B,
|
|
4
|
+
"mappings": "AAAA,SAAS,4BAA4B;AACrC,SAAS,uBAAuB;AAChC;AAAA,EAEE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,cAAc;AACvB,SAAS,kBAAkB;AAC3B,SAAS,sBAAsB;AAG/B,SAAS,qBAAqB;AAC9B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,SAAS,iCAAiC;AAMnC,MAAM,sBAAsB,OAAO,gBAAgB;AAAA,EACxD,MAAM;AAAA,EAEN,UAAU;AAAA,IACR,UAAU;AAAA,MACR,OAAO;AAAA,QACL,MAAM;AAAA,QACN,iBAAiB;AAAA,QACjB,SAAS;AAAA,QACT,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,cAAc;AAAA,MAChB;AAAA,IACF;AAAA,IAEA,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,UAAU;AAAA,EACZ;AACF,CAAC;AAEM,MAAM,iBAAiB,oBAAoB;AAAA,EAChD,SAASA,gBAAe,OAAyC,cAAc;AAC7E,UAAM,EAAE,eAAe,UAAU,eAAe,GAAG,cAAc,IAAI;AACrE,UAAM,UAAU,iBAAiB,eAAe,aAAa;AAC7D,UAAM,cAAc,2BAA2B,eAAe,aAAa;AAC3E,UAAM,mBAAmB,0BAA0B,QAAQ,eAAe;AAE1E,8BAA0B,MAAM;AAC9B,UAAI,QAAQ,QAAQ;AAClB,gBAAQ,OAAO;AAAA,MACjB;AAAA,IACF,GAAG,CAAC,gBAAgB,CAAC;AAErB,UAAM,eAAe;AAAA,MACnB;AAAA,MACA,QAAQ,iBAAiB,KAAK;AAAA,IAChC;AAEA,QAAI,YAAY,uBAAuB;AACrC,aAAO,GAAG,SAAS;AAAA,IACrB;AAEA,QAAI,oBAAoB,CAAC,OAAO;AAC9B,aACE,CAAC,WAAW,UAAU,GAAG,QAAQ,yBAC/B,CAAC,qBAAqB,aAAa,aAAa,SAAS,UACtD,SACH,EAFC,qBAGH,EAJC;AAAA,IAML;AAEA,QAAI,CAAC,YAAY,cAAc;AAC7B,UAAI,QAAQ,IAAI,aAAa,eAAe;AAC1C,gBAAQ,KAAK,+DAA+D;AAAA,MAC9E;AAEA,aAAO;AAAA,IACT;AAEA,UAAM;AAAA,MACJ,OAAO,EAAE,gBAAgB,eAAe,UAAU,GAAG,UAAU;AAAA,MAC/D,GAAG;AAAA,IACL,IAAI,YAAY,aAAa,iBAAiB;AAE9C,WACE;AAAA,OACG,CAAC,iBAAiB,CAAC,MAAM,YACxB,CAAC;AAAA,QACC,yBAAyB;AAAA,UACvB,QAAQ;AAAA,QACV;AAAA,MACF;AAAA,MAEF,CAAC,qBAAqB,SAAS,QAAQ,iBACrC,CAAC,iBACE,QAAQ,OACP,CAAC;AAAA,QACC,IAAI;AAAA,QACJ,MAAM,YAAY;AAAA,QAElB,KAAK;AAAA,YACD;AAAA,QACJ,KAAK;AAAA,YACD;AAAA,YACA;AAAA,YACC,CAAC,MAAM,YAAY;AAAA,UACtB,UAAU,gBAAgB,SAAY,YAAY;AAAA,QACpD;AAAA,QAEC,SACH,EAdC,uBAeC,KACN,EAlBC,gBAmBH,EApBC;AAAA;AAAA;AAAA;AAAA,OAuBA,CAAC,QAAQ,QAAQ,CAAC,IAAI,OAAO,EAAE,SAAS,OAAO,IAAI,MAAM,SAAS,EAAhD;AAAA,IACrB;AAAA,EAEJ;AACF;AAEA,MAAM,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;",
|
|
5
5
|
"names": ["SelectViewport"]
|
|
6
6
|
}
|
package/dist/jsx/context.js
CHANGED
|
@@ -2,14 +2,25 @@ import { createContextScope } from "@tamagui/create-context";
|
|
|
2
2
|
import { SELECT_NAME } from "./constants";
|
|
3
3
|
const [createSelectContext, createSelectScope] = createContextScope(SELECT_NAME);
|
|
4
4
|
const [SelectProvider, useSelectContext] = createSelectContext(SELECT_NAME);
|
|
5
|
-
const
|
|
6
|
-
|
|
5
|
+
const [createSelectItemParentContext, createSelectItemParentScope] = createContextScope(SELECT_NAME + "ItemParent");
|
|
6
|
+
const [SelectItemParentProvider, useSelectItemParentContext] = createSelectContext(SELECT_NAME);
|
|
7
|
+
const ForwardSelectContext = ({
|
|
8
|
+
__scopeSelect,
|
|
9
|
+
context,
|
|
10
|
+
itemContext,
|
|
11
|
+
children
|
|
12
|
+
}) => {
|
|
13
|
+
return <SelectProvider isInSheet scope={__scopeSelect} {...context}><SelectItemParentProvider scope={__scopeSelect} {...itemContext}>{children}</SelectItemParentProvider></SelectProvider>;
|
|
7
14
|
};
|
|
8
15
|
export {
|
|
9
16
|
ForwardSelectContext,
|
|
17
|
+
SelectItemParentProvider,
|
|
10
18
|
SelectProvider,
|
|
11
19
|
createSelectContext,
|
|
20
|
+
createSelectItemParentContext,
|
|
21
|
+
createSelectItemParentScope,
|
|
12
22
|
createSelectScope,
|
|
13
|
-
useSelectContext
|
|
23
|
+
useSelectContext,
|
|
24
|
+
useSelectItemParentContext
|
|
14
25
|
};
|
|
15
26
|
//# sourceMappingURL=context.js.map
|
package/dist/jsx/context.js.map
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/context.tsx"],
|
|
4
|
-
"mappings": "AAAA,SAAS,0BAA0B;AAEnC,SAAS,mBAAmB;AAGrB,MAAM,CAAC,qBAAqB,iBAAiB,
|
|
4
|
+
"mappings": "AAAA,SAAS,0BAA0B;AAEnC,SAAS,mBAAmB;AAGrB,MAAM,CAAC,qBAAqB,iBAAiB,IAAI,mBAAmB,WAAW;AAE/E,MAAM,CAAC,gBAAgB,gBAAgB,IAC5C,oBAAwC,WAAW;AAI9C,MAAM,CAAC,+BAA+B,2BAA2B,IACtE,mBAAmB,cAAc,YAAY;AAExC,MAAM,CAAC,0BAA0B,0BAA0B,IAChE,oBAAkD,WAAW;AAExD,MAAM,uBAAuB,CAAC;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAIO;AACL,SACE,CAAC,eAAe,UAAU,OAAO,mBAAmB,SAClD,CAAC,yBAAyB,OAAO,mBAAmB,cACjD,SACH,EAFC,yBAGH,EAJC;AAML;",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tamagui/select",
|
|
3
|
-
"version": "1.47.
|
|
3
|
+
"version": "1.47.6",
|
|
4
4
|
"sideEffects": [
|
|
5
5
|
"*.css"
|
|
6
6
|
],
|
|
@@ -34,23 +34,23 @@
|
|
|
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.47.
|
|
38
|
-
"@tamagui/animate-presence": "1.47.
|
|
39
|
-
"@tamagui/compose-refs": "1.47.
|
|
40
|
-
"@tamagui/core": "1.47.
|
|
41
|
-
"@tamagui/create-context": "1.47.
|
|
42
|
-
"@tamagui/dismissable": "1.47.
|
|
43
|
-
"@tamagui/focus-scope": "1.47.
|
|
44
|
-
"@tamagui/get-token": "1.47.
|
|
45
|
-
"@tamagui/list-item": "1.47.
|
|
46
|
-
"@tamagui/portal": "1.47.
|
|
47
|
-
"@tamagui/separator": "1.47.
|
|
48
|
-
"@tamagui/sheet": "1.47.
|
|
49
|
-
"@tamagui/stacks": "1.47.
|
|
50
|
-
"@tamagui/text": "1.47.
|
|
51
|
-
"@tamagui/use-controllable-state": "1.47.
|
|
52
|
-
"@tamagui/use-event": "1.47.
|
|
53
|
-
"@tamagui/use-previous": "1.47.
|
|
37
|
+
"@tamagui/adapt": "1.47.6",
|
|
38
|
+
"@tamagui/animate-presence": "1.47.6",
|
|
39
|
+
"@tamagui/compose-refs": "1.47.6",
|
|
40
|
+
"@tamagui/core": "1.47.6",
|
|
41
|
+
"@tamagui/create-context": "1.47.6",
|
|
42
|
+
"@tamagui/dismissable": "1.47.6",
|
|
43
|
+
"@tamagui/focus-scope": "1.47.6",
|
|
44
|
+
"@tamagui/get-token": "1.47.6",
|
|
45
|
+
"@tamagui/list-item": "1.47.6",
|
|
46
|
+
"@tamagui/portal": "1.47.6",
|
|
47
|
+
"@tamagui/separator": "1.47.6",
|
|
48
|
+
"@tamagui/sheet": "1.47.6",
|
|
49
|
+
"@tamagui/stacks": "1.47.6",
|
|
50
|
+
"@tamagui/text": "1.47.6",
|
|
51
|
+
"@tamagui/use-controllable-state": "1.47.6",
|
|
52
|
+
"@tamagui/use-event": "1.47.6",
|
|
53
|
+
"@tamagui/use-previous": "1.47.6"
|
|
54
54
|
},
|
|
55
55
|
"peerDependencies": {
|
|
56
56
|
"react": "*",
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
"react-native": "*"
|
|
59
59
|
},
|
|
60
60
|
"devDependencies": {
|
|
61
|
-
"@tamagui/build": "1.47.
|
|
61
|
+
"@tamagui/build": "1.47.6",
|
|
62
62
|
"react": "^18.2.0",
|
|
63
63
|
"react-dom": "^18.2.0",
|
|
64
64
|
"react-native": "^0.72.1"
|
package/src/Select.tsx
CHANGED
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
getVariableValue,
|
|
9
9
|
isWeb,
|
|
10
10
|
styled,
|
|
11
|
+
useEvent,
|
|
11
12
|
useGet,
|
|
12
13
|
useIsomorphicLayoutEffect,
|
|
13
14
|
withStaticProperties,
|
|
@@ -23,7 +24,13 @@ import { useControllableState } from '@tamagui/use-controllable-state'
|
|
|
23
24
|
import * as React from 'react'
|
|
24
25
|
|
|
25
26
|
import { SELECT_NAME } from './constants'
|
|
26
|
-
import {
|
|
27
|
+
import {
|
|
28
|
+
SelectItemParentProvider,
|
|
29
|
+
SelectProvider,
|
|
30
|
+
createSelectContext,
|
|
31
|
+
useSelectContext,
|
|
32
|
+
useSelectItemParentContext,
|
|
33
|
+
} from './context'
|
|
27
34
|
import { SelectContent } from './SelectContent'
|
|
28
35
|
import { SelectInlineImpl } from './SelectImpl'
|
|
29
36
|
import { SelectItem, useSelectItemContext } from './SelectItem'
|
|
@@ -62,6 +69,7 @@ const SelectValue = SelectValueFrame.styleable<SelectValueProps>(function Select
|
|
|
62
69
|
) {
|
|
63
70
|
// We ignore `className` and `style` as this part shouldn't be styled.
|
|
64
71
|
const context = useSelectContext(VALUE_NAME, __scopeSelect)
|
|
72
|
+
const itemParentContext = useSelectItemParentContext(VALUE_NAME, __scopeSelect)
|
|
65
73
|
const composedRefs = useComposedRefs(forwardedRef, context.onValueNodeChange)
|
|
66
74
|
const children = childrenProp ?? context.selectedItem
|
|
67
75
|
const isEmptyValue = context.value == null || context.value === ''
|
|
@@ -69,7 +77,7 @@ const SelectValue = SelectValueFrame.styleable<SelectValueProps>(function Select
|
|
|
69
77
|
|
|
70
78
|
return (
|
|
71
79
|
<SelectValueFrame
|
|
72
|
-
size={
|
|
80
|
+
size={itemParentContext.size as any}
|
|
73
81
|
ref={composedRefs}
|
|
74
82
|
// we don't want events from the portalled `SelectValue` children to bubble
|
|
75
83
|
// through the item they came from
|
|
@@ -135,6 +143,7 @@ const SelectItemText = React.forwardRef<TamaguiTextElement, SelectItemTextProps>
|
|
|
135
143
|
(props: ScopedProps<SelectItemTextProps>, forwardedRef) => {
|
|
136
144
|
const { __scopeSelect, className, ...itemTextProps } = props
|
|
137
145
|
const context = useSelectContext(ITEM_TEXT_NAME, __scopeSelect)
|
|
146
|
+
const itemParentContext = useSelectItemParentContext(ITEM_TEXT_NAME, __scopeSelect)
|
|
138
147
|
const ref = React.useRef<TamaguiTextElement | null>(null)
|
|
139
148
|
const composedRefs = useComposedRefs(forwardedRef, ref)
|
|
140
149
|
const itemContext = useSelectItemContext(ITEM_TEXT_NAME, __scopeSelect)
|
|
@@ -143,14 +152,14 @@ const SelectItemText = React.forwardRef<TamaguiTextElement, SelectItemTextProps>
|
|
|
143
152
|
() => (
|
|
144
153
|
<SelectItemTextFrame
|
|
145
154
|
className={className}
|
|
146
|
-
size={
|
|
155
|
+
size={itemParentContext.size as any}
|
|
147
156
|
id={itemContext.textId}
|
|
148
157
|
{...itemTextProps}
|
|
149
158
|
ref={composedRefs}
|
|
150
159
|
/>
|
|
151
160
|
),
|
|
152
161
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
153
|
-
[props,
|
|
162
|
+
[props, itemParentContext.size, className, itemContext.textId]
|
|
154
163
|
)
|
|
155
164
|
|
|
156
165
|
// until portals work in sub-trees on RN, use this just for native:
|
|
@@ -161,7 +170,7 @@ const SelectItemText = React.forwardRef<TamaguiTextElement, SelectItemTextProps>
|
|
|
161
170
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
162
171
|
}, [isSelected, contents])
|
|
163
172
|
|
|
164
|
-
if (
|
|
173
|
+
if (itemParentContext.shouldRenderWebNative) {
|
|
165
174
|
return <>{props.children}</>
|
|
166
175
|
}
|
|
167
176
|
|
|
@@ -199,7 +208,7 @@ type SelectItemIndicatorProps = GetProps<typeof SelectItemIndicatorFrame>
|
|
|
199
208
|
const SelectItemIndicator = React.forwardRef<TamaguiElement, SelectItemIndicatorProps>(
|
|
200
209
|
(props: ScopedProps<SelectItemIndicatorProps>, forwardedRef) => {
|
|
201
210
|
const { __scopeSelect, ...itemIndicatorProps } = props
|
|
202
|
-
const context =
|
|
211
|
+
const context = useSelectItemParentContext(ITEM_INDICATOR_NAME, __scopeSelect)
|
|
203
212
|
const itemContext = useSelectItemContext(ITEM_INDICATOR_NAME, __scopeSelect)
|
|
204
213
|
|
|
205
214
|
if (context.shouldRenderWebNative) {
|
|
@@ -279,18 +288,19 @@ const SelectGroup = React.forwardRef<TamaguiElement, SelectGroupProps>(
|
|
|
279
288
|
const groupId = React.useId()
|
|
280
289
|
|
|
281
290
|
const context = useSelectContext(GROUP_NAME, __scopeSelect)
|
|
282
|
-
const
|
|
291
|
+
const itemParentContext = useSelectItemParentContext(GROUP_NAME, __scopeSelect)
|
|
292
|
+
const size = itemParentContext.size ?? '$true'
|
|
283
293
|
const nativeSelectRef = React.useRef<HTMLSelectElement>(null)
|
|
284
294
|
|
|
285
295
|
const content = (function () {
|
|
286
|
-
if (
|
|
296
|
+
if (itemParentContext.shouldRenderWebNative) {
|
|
287
297
|
return (
|
|
288
298
|
// @ts-expect-error until we support typing based on tag
|
|
289
299
|
<NativeSelectFrame asChild size={size} value={context.value}>
|
|
290
300
|
<NativeSelectTextFrame
|
|
291
301
|
// @ts-ignore it's ok since tag="select"
|
|
292
302
|
onChange={(event: React.ChangeEvent<HTMLSelectElement>) => {
|
|
293
|
-
|
|
303
|
+
itemParentContext.onChange(event.currentTarget.value)
|
|
294
304
|
}}
|
|
295
305
|
size={size as FontSizeTokens}
|
|
296
306
|
ref={nativeSelectRef}
|
|
@@ -336,7 +346,7 @@ export type SelectLabelProps = ListItemProps
|
|
|
336
346
|
const SelectLabel = React.forwardRef<TamaguiElement, SelectLabelProps>(
|
|
337
347
|
(props: ScopedProps<SelectLabelProps>, forwardedRef) => {
|
|
338
348
|
const { __scopeSelect, ...labelProps } = props
|
|
339
|
-
const context =
|
|
349
|
+
const context = useSelectItemParentContext(LABEL_NAME, __scopeSelect)
|
|
340
350
|
const groupContext = useSelectGroupContext(LABEL_NAME, __scopeSelect)
|
|
341
351
|
|
|
342
352
|
if (context.shouldRenderWebNative) {
|
|
@@ -446,6 +456,17 @@ export const Select = withStaticProperties(
|
|
|
446
456
|
})
|
|
447
457
|
|
|
448
458
|
const [activeIndex, setActiveIndex] = React.useState<number | null>(0)
|
|
459
|
+
|
|
460
|
+
const [emitValue, valueSubscribe] = useEmitter<any>()
|
|
461
|
+
const [emitActiveIndex, activeIndexSubscribe] = useEmitter<number>()
|
|
462
|
+
|
|
463
|
+
React.useEffect(() => {
|
|
464
|
+
// to go after the item mount 🤷♂️
|
|
465
|
+
queueMicrotask(() => {
|
|
466
|
+
emitValue(value)
|
|
467
|
+
})
|
|
468
|
+
}, [value])
|
|
469
|
+
|
|
449
470
|
const selectedIndexRef = React.useRef<number | null>(null)
|
|
450
471
|
const activeIndexRef = React.useRef<number | null>(null)
|
|
451
472
|
const listContentRef = React.useRef<string[]>([])
|
|
@@ -465,50 +486,64 @@ export const Select = withStaticProperties(
|
|
|
465
486
|
|
|
466
487
|
return (
|
|
467
488
|
<AdaptProvider>
|
|
468
|
-
<
|
|
469
|
-
dir={dir}
|
|
470
|
-
blockSelection={false}
|
|
471
|
-
size={sizeProp}
|
|
472
|
-
fallback={false}
|
|
473
|
-
selectedItem={selectedItem}
|
|
474
|
-
setSelectedItem={setSelectedItem}
|
|
475
|
-
forceUpdate={forceUpdate}
|
|
476
|
-
valueNode={valueNode}
|
|
477
|
-
onValueNodeChange={setValueNode}
|
|
478
|
-
scopeKey={scopeKey}
|
|
479
|
-
sheetBreakpoint={sheetBreakpoint}
|
|
489
|
+
<SelectItemParentProvider
|
|
480
490
|
scope={__scopeSelect}
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
}
|
|
484
|
-
activeIndex={activeIndex}
|
|
485
|
-
onChange={setValue}
|
|
486
|
-
selectedIndex={selectedIndex}
|
|
487
|
-
setActiveIndex={setActiveIndex}
|
|
491
|
+
size={sizeProp}
|
|
492
|
+
activeIndexSubscribe={activeIndexSubscribe}
|
|
493
|
+
valueSubscribe={valueSubscribe}
|
|
488
494
|
setOpen={setOpen}
|
|
495
|
+
onChange={React.useCallback((val) => {
|
|
496
|
+
setValue(val)
|
|
497
|
+
emitValue(val)
|
|
498
|
+
}, [])}
|
|
489
499
|
setSelectedIndex={setSelectedIndex}
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
500
|
+
setValueAtIndex={React.useCallback((index, value) => {
|
|
501
|
+
listContentRef.current[index] = value
|
|
502
|
+
}, [])}
|
|
493
503
|
shouldRenderWebNative={shouldRenderWebNative}
|
|
494
504
|
>
|
|
495
|
-
<
|
|
496
|
-
{
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
)
|
|
510
|
-
|
|
511
|
-
|
|
505
|
+
<SelectProvider
|
|
506
|
+
scope={__scopeSelect}
|
|
507
|
+
dir={dir}
|
|
508
|
+
blockSelection={false}
|
|
509
|
+
fallback={false}
|
|
510
|
+
selectedItem={selectedItem}
|
|
511
|
+
setSelectedItem={setSelectedItem}
|
|
512
|
+
forceUpdate={forceUpdate}
|
|
513
|
+
valueNode={valueNode}
|
|
514
|
+
onValueNodeChange={setValueNode}
|
|
515
|
+
scopeKey={scopeKey}
|
|
516
|
+
sheetBreakpoint={sheetBreakpoint}
|
|
517
|
+
activeIndex={activeIndex}
|
|
518
|
+
selectedIndex={selectedIndex}
|
|
519
|
+
setActiveIndex={React.useCallback((index) => {
|
|
520
|
+
setActiveIndex(index)
|
|
521
|
+
if (typeof index === 'number') {
|
|
522
|
+
emitActiveIndex(index)
|
|
523
|
+
}
|
|
524
|
+
}, [])}
|
|
525
|
+
value={value}
|
|
526
|
+
open={open}
|
|
527
|
+
native={native}
|
|
528
|
+
>
|
|
529
|
+
<SelectSheetController onOpenChange={setOpen} __scopeSelect={__scopeSelect}>
|
|
530
|
+
{shouldRenderWebNative ? (
|
|
531
|
+
children
|
|
532
|
+
) : (
|
|
533
|
+
<SelectImpl
|
|
534
|
+
activeIndexRef={activeIndexRef}
|
|
535
|
+
listContentRef={listContentRef}
|
|
536
|
+
selectedIndexRef={selectedIndexRef}
|
|
537
|
+
{...props}
|
|
538
|
+
open={open}
|
|
539
|
+
value={value}
|
|
540
|
+
>
|
|
541
|
+
{children}
|
|
542
|
+
</SelectImpl>
|
|
543
|
+
)}
|
|
544
|
+
</SelectSheetController>
|
|
545
|
+
</SelectProvider>
|
|
546
|
+
</SelectItemParentProvider>
|
|
512
547
|
</AdaptProvider>
|
|
513
548
|
)
|
|
514
549
|
},
|
|
@@ -530,5 +565,22 @@ export const Select = withStaticProperties(
|
|
|
530
565
|
}
|
|
531
566
|
)
|
|
532
567
|
|
|
568
|
+
function useEmitter<A>() {
|
|
569
|
+
const listeners = React.useRef<Set<Function>>()
|
|
570
|
+
if (!listeners.current) {
|
|
571
|
+
listeners.current = new Set()
|
|
572
|
+
}
|
|
573
|
+
const emit = (value: A) => {
|
|
574
|
+
listeners.current!.forEach((l) => l(value))
|
|
575
|
+
}
|
|
576
|
+
const subscribe = React.useCallback((listener: (val: A) => void) => {
|
|
577
|
+
listeners.current!.add(listener)
|
|
578
|
+
return () => {
|
|
579
|
+
listeners.current!.delete(listener)
|
|
580
|
+
}
|
|
581
|
+
}, [])
|
|
582
|
+
return [emit, subscribe] as const
|
|
583
|
+
}
|
|
584
|
+
|
|
533
585
|
// @ts-ignore
|
|
534
586
|
Select.displayName = SELECT_NAME
|
package/src/SelectContent.tsx
CHANGED
|
@@ -2,7 +2,7 @@ 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
4
|
|
|
5
|
-
import { useSelectContext } from './context'
|
|
5
|
+
import { useSelectContext, useSelectItemParentContext } from './context'
|
|
6
6
|
import { SelectContentProps } from './types'
|
|
7
7
|
import { useShowSelectSheet } from './useSelectBreakpointActive'
|
|
8
8
|
|
|
@@ -19,6 +19,7 @@ export const SelectContent = ({
|
|
|
19
19
|
...focusScopeProps
|
|
20
20
|
}: SelectContentProps & FocusScopeProps) => {
|
|
21
21
|
const context = useSelectContext(CONTENT_NAME, __scopeSelect)
|
|
22
|
+
const itemParentContext = useSelectItemParentContext(CONTENT_NAME, __scopeSelect)
|
|
22
23
|
const themeName = useThemeName()
|
|
23
24
|
const showSheet = useShowSelectSheet(context)
|
|
24
25
|
|
|
@@ -30,7 +31,7 @@ export const SelectContent = ({
|
|
|
30
31
|
|
|
31
32
|
const touch = useIsTouchDevice()
|
|
32
33
|
|
|
33
|
-
if (
|
|
34
|
+
if (itemParentContext.shouldRenderWebNative) {
|
|
34
35
|
return <>{children}</>
|
|
35
36
|
}
|
|
36
37
|
|