@tamagui/select 1.13.2 → 1.13.4

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.
Files changed (143) hide show
  1. package/dist/cjs/BubbleSelect.js +1 -47
  2. package/dist/cjs/BubbleSelect.js.map +2 -2
  3. package/dist/cjs/Select.js +1 -494
  4. package/dist/cjs/Select.js.map +2 -2
  5. package/dist/cjs/SelectContent.js +1 -54
  6. package/dist/cjs/SelectContent.js.map +2 -2
  7. package/dist/cjs/SelectContent.native.js +1 -30
  8. package/dist/cjs/SelectContent.native.js.map +2 -2
  9. package/dist/cjs/SelectImpl.js +1 -308
  10. package/dist/cjs/SelectImpl.js.map +2 -2
  11. package/dist/cjs/SelectImpl.native.js +1 -34
  12. package/dist/cjs/SelectImpl.native.js.map +2 -2
  13. package/dist/cjs/SelectScrollButton.js +1 -175
  14. package/dist/cjs/SelectScrollButton.js.map +2 -2
  15. package/dist/cjs/SelectScrollButton.native.js +1 -31
  16. package/dist/cjs/SelectScrollButton.native.js.map +2 -2
  17. package/dist/cjs/SelectViewport.js +2 -115
  18. package/dist/cjs/SelectViewport.js.map +2 -2
  19. package/dist/cjs/SelectViewport.native.js +1 -52
  20. package/dist/cjs/SelectViewport.native.js.map +2 -2
  21. package/dist/cjs/constants.js +1 -46
  22. package/dist/cjs/constants.js.map +2 -2
  23. package/dist/cjs/context.js +1 -43
  24. package/dist/cjs/context.js.map +2 -2
  25. package/dist/cjs/index.js +1 -19
  26. package/dist/cjs/index.js.map +2 -2
  27. package/dist/cjs/types.js +1 -16
  28. package/dist/cjs/types.js.map +2 -2
  29. package/dist/cjs/useSelectBreakpointActive.js +1 -42
  30. package/dist/cjs/useSelectBreakpointActive.js.map +2 -2
  31. package/dist/esm/BubbleSelect.js +1 -24
  32. package/dist/esm/BubbleSelect.js.map +2 -2
  33. package/dist/esm/BubbleSelect.mjs +1 -24
  34. package/dist/esm/BubbleSelect.mjs.map +2 -2
  35. package/dist/esm/Select.js +1 -464
  36. package/dist/esm/Select.js.map +2 -2
  37. package/dist/esm/Select.mjs +1 -464
  38. package/dist/esm/Select.mjs.map +2 -2
  39. package/dist/esm/SelectContent.js +1 -30
  40. package/dist/esm/SelectContent.js.map +2 -2
  41. package/dist/esm/SelectContent.mjs +1 -30
  42. package/dist/esm/SelectContent.mjs.map +2 -2
  43. package/dist/esm/SelectContent.native.js +1 -6
  44. package/dist/esm/SelectContent.native.js.map +2 -2
  45. package/dist/esm/SelectContent.native.mjs +1 -6
  46. package/dist/esm/SelectContent.native.mjs.map +2 -2
  47. package/dist/esm/SelectImpl.js +1 -294
  48. package/dist/esm/SelectImpl.js.map +2 -2
  49. package/dist/esm/SelectImpl.mjs +1 -294
  50. package/dist/esm/SelectImpl.mjs.map +2 -2
  51. package/dist/esm/SelectImpl.native.js +1 -10
  52. package/dist/esm/SelectImpl.native.js.map +2 -2
  53. package/dist/esm/SelectImpl.native.mjs +1 -10
  54. package/dist/esm/SelectImpl.native.mjs.map +2 -2
  55. package/dist/esm/SelectScrollButton.js +1 -140
  56. package/dist/esm/SelectScrollButton.js.map +2 -2
  57. package/dist/esm/SelectScrollButton.mjs +1 -140
  58. package/dist/esm/SelectScrollButton.mjs.map +2 -2
  59. package/dist/esm/SelectScrollButton.native.js +1 -6
  60. package/dist/esm/SelectScrollButton.native.js.map +2 -2
  61. package/dist/esm/SelectScrollButton.native.mjs +1 -6
  62. package/dist/esm/SelectScrollButton.native.mjs.map +2 -2
  63. package/dist/esm/SelectViewport.js +2 -80
  64. package/dist/esm/SelectViewport.js.map +2 -2
  65. package/dist/esm/SelectViewport.mjs +2 -80
  66. package/dist/esm/SelectViewport.mjs.map +2 -2
  67. package/dist/esm/SelectViewport.native.js +1 -18
  68. package/dist/esm/SelectViewport.native.js.map +2 -2
  69. package/dist/esm/SelectViewport.native.mjs +1 -18
  70. package/dist/esm/SelectViewport.native.mjs.map +2 -2
  71. package/dist/esm/constants.js +1 -16
  72. package/dist/esm/constants.js.map +2 -2
  73. package/dist/esm/constants.mjs +1 -16
  74. package/dist/esm/constants.mjs.map +2 -2
  75. package/dist/esm/context.js +1 -15
  76. package/dist/esm/context.js.map +2 -2
  77. package/dist/esm/context.mjs +1 -15
  78. package/dist/esm/context.mjs.map +2 -2
  79. package/dist/esm/index.js +1 -2
  80. package/dist/esm/index.js.map +1 -1
  81. package/dist/esm/index.mjs +1 -2
  82. package/dist/esm/index.mjs.map +1 -1
  83. package/dist/esm/useSelectBreakpointActive.js +1 -17
  84. package/dist/esm/useSelectBreakpointActive.js.map +2 -2
  85. package/dist/esm/useSelectBreakpointActive.mjs +1 -17
  86. package/dist/esm/useSelectBreakpointActive.mjs.map +2 -2
  87. package/dist/jsx/BubbleSelect.js +1 -24
  88. package/dist/jsx/BubbleSelect.js.map +2 -2
  89. package/dist/jsx/BubbleSelect.mjs +1 -24
  90. package/dist/jsx/BubbleSelect.mjs.map +2 -2
  91. package/dist/jsx/Select.js +1 -428
  92. package/dist/jsx/Select.js.map +2 -2
  93. package/dist/jsx/Select.mjs +1 -428
  94. package/dist/jsx/Select.mjs.map +2 -2
  95. package/dist/jsx/SelectContent.js +1 -29
  96. package/dist/jsx/SelectContent.js.map +2 -2
  97. package/dist/jsx/SelectContent.mjs +1 -29
  98. package/dist/jsx/SelectContent.mjs.map +2 -2
  99. package/dist/jsx/SelectContent.native.js +1 -6
  100. package/dist/jsx/SelectContent.native.js.map +2 -2
  101. package/dist/jsx/SelectContent.native.mjs +1 -6
  102. package/dist/jsx/SelectContent.native.mjs.map +2 -2
  103. package/dist/jsx/SelectImpl.js +1 -286
  104. package/dist/jsx/SelectImpl.js.map +2 -2
  105. package/dist/jsx/SelectImpl.mjs +1 -286
  106. package/dist/jsx/SelectImpl.mjs.map +2 -2
  107. package/dist/jsx/SelectImpl.native.js +1 -9
  108. package/dist/jsx/SelectImpl.native.js.map +2 -2
  109. package/dist/jsx/SelectImpl.native.mjs +1 -9
  110. package/dist/jsx/SelectImpl.native.mjs.map +2 -2
  111. package/dist/jsx/SelectScrollButton.js +1 -126
  112. package/dist/jsx/SelectScrollButton.js.map +2 -2
  113. package/dist/jsx/SelectScrollButton.mjs +1 -126
  114. package/dist/jsx/SelectScrollButton.mjs.map +2 -2
  115. package/dist/jsx/SelectScrollButton.native.js +1 -6
  116. package/dist/jsx/SelectScrollButton.native.js.map +2 -2
  117. package/dist/jsx/SelectScrollButton.native.mjs +1 -6
  118. package/dist/jsx/SelectScrollButton.native.mjs.map +2 -2
  119. package/dist/jsx/SelectViewport.js +2 -72
  120. package/dist/jsx/SelectViewport.js.map +2 -2
  121. package/dist/jsx/SelectViewport.mjs +2 -72
  122. package/dist/jsx/SelectViewport.mjs.map +2 -2
  123. package/dist/jsx/SelectViewport.native.js +1 -17
  124. package/dist/jsx/SelectViewport.native.js.map +2 -2
  125. package/dist/jsx/SelectViewport.native.mjs +1 -17
  126. package/dist/jsx/SelectViewport.native.mjs.map +2 -2
  127. package/dist/jsx/constants.js +1 -16
  128. package/dist/jsx/constants.js.map +2 -2
  129. package/dist/jsx/constants.mjs +1 -16
  130. package/dist/jsx/constants.mjs.map +2 -2
  131. package/dist/jsx/context.js +1 -14
  132. package/dist/jsx/context.js.map +2 -2
  133. package/dist/jsx/context.mjs +1 -14
  134. package/dist/jsx/context.mjs.map +2 -2
  135. package/dist/jsx/index.js +1 -2
  136. package/dist/jsx/index.js.map +1 -1
  137. package/dist/jsx/index.mjs +1 -2
  138. package/dist/jsx/index.mjs.map +1 -1
  139. package/dist/jsx/useSelectBreakpointActive.js +1 -17
  140. package/dist/jsx/useSelectBreakpointActive.js.map +2 -2
  141. package/dist/jsx/useSelectBreakpointActive.mjs +1 -17
  142. package/dist/jsx/useSelectBreakpointActive.mjs.map +2 -2
  143. package/package.json +16 -16
@@ -1,295 +1,2 @@
1
- import { jsx } from "react/jsx-runtime";
2
- import {
3
- autoUpdate,
4
- flip,
5
- inner,
6
- offset,
7
- shift,
8
- size,
9
- useClick,
10
- useDismiss,
11
- useFloating,
12
- useInnerOffset,
13
- useInteractions,
14
- useListNavigation,
15
- useRole,
16
- useTypeahead
17
- } from "@floating-ui/react";
18
- import {
19
- isClient,
20
- isWeb,
21
- useIsTouchDevice,
22
- useIsomorphicLayoutEffect
23
- } from "@tamagui/core";
24
- import * as React from "react";
25
- import { flushSync } from "react-dom";
26
- import { SCROLL_ARROW_THRESHOLD, WINDOW_PADDING } from "./constants";
27
- import { SelectProvider, useSelectContext } from "./context";
28
- const SelectInlineImpl = (props) => {
29
- const {
30
- __scopeSelect,
31
- children,
32
- open = false,
33
- selectedIndexRef,
34
- listContentRef
35
- } = props;
36
- const selectContext = useSelectContext("SelectSheetImpl", __scopeSelect);
37
- const {
38
- setActiveIndex,
39
- setOpen,
40
- setSelectedIndex,
41
- selectedIndex,
42
- activeIndex,
43
- forceUpdate
44
- } = selectContext;
45
- const [scrollTop, setScrollTop] = React.useState(0);
46
- const touch = useIsTouchDevice();
47
- const listItemsRef = React.useRef([]);
48
- const overflowRef = React.useRef(null);
49
- const upArrowRef = React.useRef(null);
50
- const downArrowRef = React.useRef(null);
51
- const allowSelectRef = React.useRef(false);
52
- const allowMouseUpRef = React.useRef(true);
53
- const selectTimeoutRef = React.useRef();
54
- const state = React.useRef({
55
- isMouseOutside: false
56
- });
57
- const [controlledScrolling, setControlledScrolling] = React.useState(false);
58
- const [fallback, setFallback] = React.useState(false);
59
- const [innerOffset, setInnerOffset] = React.useState(0);
60
- const [blockSelection, setBlockSelection] = React.useState(false);
61
- const floatingStyle = React.useRef({});
62
- React.useEffect(() => {
63
- const frame = requestAnimationFrame(() => {
64
- if (!open) {
65
- setScrollTop(0);
66
- setFallback(false);
67
- setActiveIndex(null);
68
- setControlledScrolling(false);
69
- }
70
- });
71
- return () => {
72
- cancelAnimationFrame(frame);
73
- };
74
- }, [open, setActiveIndex]);
75
- if (isWeb && isClient) {
76
- React.useEffect(() => {
77
- if (!open)
78
- return;
79
- const mouseUp = (e) => {
80
- if (state.current.isMouseOutside) {
81
- setOpen(false);
82
- }
83
- };
84
- document.addEventListener("mouseup", mouseUp);
85
- return () => {
86
- document.removeEventListener("mouseup", mouseUp);
87
- };
88
- }, [open]);
89
- }
90
- const updateFloatingSize = size({
91
- apply({
92
- availableHeight,
93
- rects: {
94
- reference: { width }
95
- }
96
- }) {
97
- floatingStyle.current = {
98
- width,
99
- maxHeight: availableHeight
100
- };
101
- },
102
- padding: WINDOW_PADDING
103
- });
104
- const { x, y, reference, floating, strategy, context, refs } = useFloating({
105
- open,
106
- onOpenChange: setOpen,
107
- whileElementsMounted: autoUpdate,
108
- placement: "bottom-start",
109
- middleware: fallback ? [
110
- offset(5),
111
- ...[
112
- touch ? shift({ crossAxis: true, padding: WINDOW_PADDING }) : flip({ padding: WINDOW_PADDING })
113
- ],
114
- updateFloatingSize
115
- ] : [
116
- inner({
117
- listRef: listItemsRef,
118
- overflowRef,
119
- index: selectedIndex,
120
- offset: innerOffset,
121
- onFallbackChange: setFallback,
122
- padding: 10,
123
- minItemsVisible: touch ? 10 : 4,
124
- referenceOverflowThreshold: 20
125
- }),
126
- updateFloatingSize
127
- ]
128
- });
129
- const floatingRef = refs.floating;
130
- const showUpArrow = open && scrollTop > SCROLL_ARROW_THRESHOLD;
131
- const showDownArrow = open && floatingRef.current && scrollTop < floatingRef.current.scrollHeight - floatingRef.current.clientHeight - SCROLL_ARROW_THRESHOLD;
132
- const interactions = useInteractions([
133
- useClick(context, { event: "mousedown" }),
134
- useDismiss(context, { outsidePress: true }),
135
- useRole(context, { role: "listbox" }),
136
- useInnerOffset(context, {
137
- enabled: !fallback,
138
- onChange: setInnerOffset,
139
- overflowRef
140
- }),
141
- useListNavigation(context, {
142
- listRef: listItemsRef,
143
- activeIndex,
144
- selectedIndex,
145
- onNavigate: setActiveIndex
146
- }),
147
- useTypeahead(context, {
148
- listRef: listContentRef,
149
- onMatch: open ? setActiveIndex : setSelectedIndex,
150
- selectedIndex,
151
- activeIndex
152
- })
153
- ]);
154
- const interactionsContext = React.useMemo(() => {
155
- return {
156
- ...interactions,
157
- getReferenceProps() {
158
- return interactions.getReferenceProps({
159
- ref: reference,
160
- className: "SelectTrigger",
161
- onKeyDown(event) {
162
- if (event.key === "Enter" || event.key === " " && !context.dataRef.current.typing) {
163
- event.preventDefault();
164
- setOpen(true);
165
- }
166
- }
167
- });
168
- },
169
- getFloatingProps(props2) {
170
- return interactions.getFloatingProps({
171
- ref: floating,
172
- className: "Select",
173
- ...props2,
174
- style: {
175
- position: strategy,
176
- top: y ?? "",
177
- left: x ?? "",
178
- outline: 0,
179
- scrollbarWidth: "none",
180
- ...floatingStyle.current,
181
- ...props2 == null ? void 0 : props2.style
182
- },
183
- onPointerEnter() {
184
- setControlledScrolling(false);
185
- state.current.isMouseOutside = false;
186
- },
187
- onPointerLeave() {
188
- state.current.isMouseOutside = true;
189
- },
190
- onPointerMove() {
191
- state.current.isMouseOutside = false;
192
- setControlledScrolling(false);
193
- },
194
- onKeyDown() {
195
- setControlledScrolling(true);
196
- },
197
- onContextMenu(e) {
198
- e.preventDefault();
199
- },
200
- onScroll(event) {
201
- flushSync(() => setScrollTop(event.currentTarget.scrollTop));
202
- }
203
- });
204
- }
205
- };
206
- }, [floating, y, x, interactions]);
207
- useIsomorphicLayoutEffect(() => {
208
- if (open) {
209
- selectTimeoutRef.current = setTimeout(() => {
210
- allowSelectRef.current = true;
211
- }, 300);
212
- return () => {
213
- clearTimeout(selectTimeoutRef.current);
214
- };
215
- } else {
216
- allowSelectRef.current = false;
217
- allowMouseUpRef.current = true;
218
- setInnerOffset(0);
219
- setFallback(false);
220
- setBlockSelection(false);
221
- }
222
- }, [open]);
223
- useIsomorphicLayoutEffect(() => {
224
- function onPointerDown(e) {
225
- var _a, _b, _c;
226
- const target = e.target;
227
- if (!(((_a = refs.floating.current) == null ? void 0 : _a.contains(target)) || ((_b = upArrowRef.current) == null ? void 0 : _b.contains(target)) || ((_c = downArrowRef.current) == null ? void 0 : _c.contains(target)))) {
228
- setOpen(false);
229
- setControlledScrolling(false);
230
- }
231
- }
232
- if (open) {
233
- document.addEventListener("pointerdown", onPointerDown);
234
- return () => {
235
- document.removeEventListener("pointerdown", onPointerDown);
236
- };
237
- }
238
- }, [open, refs, setOpen]);
239
- useIsomorphicLayoutEffect(() => {
240
- var _a, _b;
241
- if (open && controlledScrolling) {
242
- if (activeIndex != null) {
243
- (_a = listItemsRef.current[activeIndex]) == null ? void 0 : _a.scrollIntoView({ block: "nearest" });
244
- }
245
- }
246
- setScrollTop(((_b = refs.floating.current) == null ? void 0 : _b.scrollTop) ?? 0);
247
- }, [open, refs, controlledScrolling, activeIndex]);
248
- useIsomorphicLayoutEffect(() => {
249
- var _a;
250
- if (open && fallback) {
251
- if (selectedIndex != null) {
252
- (_a = listItemsRef.current[selectedIndex]) == null ? void 0 : _a.scrollIntoView({ block: "nearest" });
253
- }
254
- }
255
- }, [open, fallback, selectedIndex]);
256
- useIsomorphicLayoutEffect(() => {
257
- if (refs.floating.current && fallback) {
258
- refs.floating.current.style.maxHeight = "";
259
- }
260
- }, [refs, fallback]);
261
- return /* @__PURE__ */ jsx(
262
- SelectProvider,
263
- {
264
- scope: __scopeSelect,
265
- ...selectContext,
266
- setScrollTop,
267
- setInnerOffset,
268
- floatingRef,
269
- setValueAtIndex: (index, value) => {
270
- listContentRef.current[index] = value;
271
- },
272
- fallback,
273
- interactions: interactionsContext,
274
- floatingContext: context,
275
- activeIndex,
276
- canScrollDown: !!showDownArrow,
277
- canScrollUp: !!showUpArrow,
278
- controlledScrolling,
279
- dataRef: context.dataRef,
280
- listRef: listItemsRef,
281
- blockSelection,
282
- allowMouseUpRef,
283
- upArrowRef,
284
- downArrowRef,
285
- selectTimeoutRef,
286
- allowSelectRef,
287
- children
288
- }
289
- );
290
- };
291
- const userAgent = typeof navigator !== "undefined" && navigator.userAgent || "";
292
- export {
293
- SelectInlineImpl
294
- };
1
+ import{jsx as Ie}from"react/jsx-runtime";import{autoUpdate as ee,flip as te,inner as ne,offset as oe,shift as se,size as re,useClick as le,useDismiss as ce,useFloating as ie,useInnerOffset as ue,useInteractions as ae,useListNavigation as fe,useRole as de,useTypeahead as me}from"@floating-ui/react";import{isClient as pe,isWeb as ge,useIsTouchDevice as Re,useIsomorphicLayoutEffect as d}from"@tamagui/core";import*as t from"react";import{flushSync as Se}from"react-dom";import{SCROLL_ARROW_THRESHOLD as q,WINDOW_PADDING as O}from"./constants";import{SelectProvider as we,useSelectContext as ve}from"./context";const Pe=z=>{const{__scopeSelect:T,children:K,open:n=!1,selectedIndexRef:he,listContentRef:b}=z,A=ve("SelectSheetImpl",T),{setActiveIndex:m,setOpen:u,setSelectedIndex:j,selectedIndex:c,activeIndex:i,forceUpdate:xe}=A,[E,p]=t.useState(0),M=Re(),a=t.useRef([]),D=t.useRef(null),P=t.useRef(null),C=t.useRef(null),w=t.useRef(!1),L=t.useRef(!0),v=t.useRef(),g=t.useRef({isMouseOutside:!1}),[I,f]=t.useState(!1),[l,h]=t.useState(!1),[B,x]=t.useState(0),[G,J]=t.useState(!1),k=t.useRef({});t.useEffect(()=>{const e=requestAnimationFrame(()=>{n||(p(0),h(!1),m(null),f(!1))});return()=>{cancelAnimationFrame(e)}},[n,m]),ge&&pe&&t.useEffect(()=>{if(!n)return;const e=o=>{g.current.isMouseOutside&&u(!1)};return document.addEventListener("mouseup",e),()=>{document.removeEventListener("mouseup",e)}},[n]);const H=re({apply({availableHeight:e,rects:{reference:{width:o}}}){k.current={width:o,maxHeight:e}},padding:O}),{x:F,y:N,reference:Q,floating:U,strategy:X,context:s,refs:r}=ie({open:n,onOpenChange:u,whileElementsMounted:ee,placement:"bottom-start",middleware:l?[oe(5),M?se({crossAxis:!0,padding:O}):te({padding:O}),H]:[ne({listRef:a,overflowRef:D,index:c,offset:B,onFallbackChange:h,padding:10,minItemsVisible:M?10:4,referenceOverflowThreshold:20}),H]}),R=r.floating,Y=n&&E>q,Z=n&&R.current&&E<R.current.scrollHeight-R.current.clientHeight-q,S=ae([le(s,{event:"mousedown"}),ce(s,{outsidePress:!0}),de(s,{role:"listbox"}),ue(s,{enabled:!l,onChange:x,overflowRef:D}),fe(s,{listRef:a,activeIndex:i,selectedIndex:c,onNavigate:m}),me(s,{listRef:b,onMatch:n?m:j,selectedIndex:c,activeIndex:i})]),$=t.useMemo(()=>({...S,getReferenceProps(){return S.getReferenceProps({ref:Q,className:"SelectTrigger",onKeyDown(e){(e.key==="Enter"||e.key===" "&&!s.dataRef.current.typing)&&(e.preventDefault(),u(!0))}})},getFloatingProps(e){return S.getFloatingProps({ref:U,className:"Select",...e,style:{position:X,top:N??"",left:F??"",outline:0,scrollbarWidth:"none",...k.current,...e==null?void 0:e.style},onPointerEnter(){f(!1),g.current.isMouseOutside=!1},onPointerLeave(){g.current.isMouseOutside=!0},onPointerMove(){g.current.isMouseOutside=!1,f(!1)},onKeyDown(){f(!0)},onContextMenu(o){o.preventDefault()},onScroll(o){Se(()=>p(o.currentTarget.scrollTop))}})}}),[U,N,F,S]);return d(()=>{if(n)return v.current=setTimeout(()=>{w.current=!0},300),()=>{clearTimeout(v.current)};w.current=!1,L.current=!0,x(0),h(!1),J(!1)},[n]),d(()=>{function e(o){var W,_,V;const y=o.target;(W=r.floating.current)!=null&&W.contains(y)||(_=P.current)!=null&&_.contains(y)||(V=C.current)!=null&&V.contains(y)||(u(!1),f(!1))}if(n)return document.addEventListener("pointerdown",e),()=>{document.removeEventListener("pointerdown",e)}},[n,r,u]),d(()=>{var e,o;n&&I&&i!=null&&((e=a.current[i])==null||e.scrollIntoView({block:"nearest"})),p(((o=r.floating.current)==null?void 0:o.scrollTop)??0)},[n,r,I,i]),d(()=>{var e;n&&l&&c!=null&&((e=a.current[c])==null||e.scrollIntoView({block:"nearest"}))},[n,l,c]),d(()=>{r.floating.current&&l&&(r.floating.current.style.maxHeight="")},[r,l]),Ie(we,{scope:T,...A,setScrollTop:p,setInnerOffset:x,floatingRef:R,setValueAtIndex:(e,o)=>{b.current[e]=o},fallback:l,interactions:$,floatingContext:s,activeIndex:i,canScrollDown:!!Z,canScrollUp:!!Y,controlledScrolling:I,dataRef:s.dataRef,listRef:a,blockSelection:G,allowMouseUpRef:L,upArrowRef:P,downArrowRef:C,selectTimeoutRef:v,allowSelectRef:w,children:K})},Ce=typeof navigator<"u"&&navigator.userAgent||"";export{Pe as SelectInlineImpl};
295
2
  //# sourceMappingURL=SelectImpl.mjs.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/SelectImpl.tsx"],
4
4
  "sourcesContent": ["import {\n SideObject,\n autoUpdate,\n flip,\n inner,\n offset,\n shift,\n size,\n useClick,\n useDismiss,\n useFloating,\n useInnerOffset,\n useInteractions,\n useListNavigation,\n useRole,\n useTypeahead,\n} from '@floating-ui/react'\nimport {\n isClient,\n isWeb,\n useIsTouchDevice,\n useIsomorphicLayoutEffect,\n} from '@tamagui/core'\nimport * as React from 'react'\nimport { flushSync } from 'react-dom'\n\nimport { SCROLL_ARROW_THRESHOLD, WINDOW_PADDING } from './constants'\nimport { SelectProvider, useSelectContext } from './context'\nimport { SelectImplProps } from './types'\n\n// TODO use id for focusing from label\nexport const SelectInlineImpl = (props: SelectImplProps) => {\n const {\n __scopeSelect,\n children,\n open = false,\n selectedIndexRef,\n listContentRef,\n } = props\n\n const selectContext = useSelectContext('SelectSheetImpl', __scopeSelect)\n const {\n setActiveIndex,\n setOpen,\n setSelectedIndex,\n selectedIndex,\n activeIndex,\n forceUpdate,\n } = selectContext\n const [scrollTop, setScrollTop] = React.useState(0)\n const touch = useIsTouchDevice()\n\n const listItemsRef = React.useRef<Array<HTMLElement | null>>([])\n const overflowRef = React.useRef<null | SideObject>(null)\n const upArrowRef = React.useRef<HTMLDivElement | null>(null)\n const downArrowRef = React.useRef<HTMLDivElement | null>(null)\n const allowSelectRef = React.useRef(false)\n const allowMouseUpRef = React.useRef(true)\n const selectTimeoutRef = React.useRef<any>()\n const state = React.useRef({\n isMouseOutside: false,\n })\n\n const [controlledScrolling, setControlledScrolling] = React.useState(false)\n const [fallback, setFallback] = React.useState(false)\n const [innerOffset, setInnerOffset] = React.useState(0)\n const [blockSelection, setBlockSelection] = React.useState(false)\n const floatingStyle = React.useRef({})\n\n // Wait for scroll position to settle before showing arrows to prevent\n // interference with pointer events.\n React.useEffect(() => {\n const frame = requestAnimationFrame(() => {\n if (!open) {\n setScrollTop(0)\n setFallback(false)\n setActiveIndex(null)\n setControlledScrolling(false)\n }\n })\n return () => {\n cancelAnimationFrame(frame)\n }\n }, [open, setActiveIndex])\n\n // close when mouseup outside select\n if (isWeb && isClient) {\n React.useEffect(() => {\n if (!open) return\n const mouseUp = (e: MouseEvent) => {\n if (state.current.isMouseOutside) {\n setOpen(false)\n }\n }\n document.addEventListener('mouseup', mouseUp)\n return () => {\n document.removeEventListener('mouseup', mouseUp)\n }\n }, [open])\n }\n\n const updateFloatingSize = size({\n apply({\n availableHeight,\n rects: {\n reference: { width },\n },\n }) {\n floatingStyle.current = {\n width: width,\n maxHeight: availableHeight,\n }\n },\n padding: WINDOW_PADDING,\n })\n\n const { x, y, reference, floating, strategy, context, refs } = useFloating({\n open,\n onOpenChange: setOpen,\n whileElementsMounted: autoUpdate,\n placement: 'bottom-start',\n middleware: fallback\n ? [\n offset(5),\n ...[\n touch\n ? shift({ crossAxis: true, padding: WINDOW_PADDING })\n : flip({ padding: WINDOW_PADDING }),\n ],\n updateFloatingSize,\n ]\n : [\n inner({\n listRef: listItemsRef,\n overflowRef,\n index: selectedIndex,\n offset: innerOffset,\n onFallbackChange: setFallback,\n padding: 10,\n minItemsVisible: touch ? 10 : 4,\n referenceOverflowThreshold: 20,\n }),\n updateFloatingSize,\n ],\n })\n\n const floatingRef = refs.floating\n\n const showUpArrow = open && scrollTop > SCROLL_ARROW_THRESHOLD\n const showDownArrow =\n open &&\n floatingRef.current &&\n scrollTop <\n floatingRef.current.scrollHeight -\n floatingRef.current.clientHeight -\n SCROLL_ARROW_THRESHOLD\n\n const interactions = useInteractions([\n useClick(context, { event: 'mousedown' }),\n useDismiss(context, { outsidePress: true }),\n useRole(context, { role: 'listbox' }),\n useInnerOffset(context, {\n enabled: !fallback,\n onChange: setInnerOffset,\n overflowRef,\n }),\n useListNavigation(context, {\n listRef: listItemsRef,\n activeIndex,\n selectedIndex,\n onNavigate: setActiveIndex,\n }),\n useTypeahead(context, {\n listRef: listContentRef,\n onMatch: open ? setActiveIndex : setSelectedIndex,\n selectedIndex,\n activeIndex,\n }),\n ])\n\n const interactionsContext = React.useMemo(() => {\n return {\n ...interactions,\n getReferenceProps() {\n return interactions.getReferenceProps({\n ref: reference,\n className: 'SelectTrigger',\n onKeyDown(event) {\n if (\n event.key === 'Enter' ||\n (event.key === ' ' && !context.dataRef.current.typing)\n ) {\n event.preventDefault()\n setOpen(true)\n }\n },\n })\n },\n getFloatingProps(props) {\n return interactions.getFloatingProps({\n ref: floating,\n className: 'Select',\n ...props,\n style: {\n position: strategy,\n top: y ?? '',\n left: x ?? '',\n outline: 0,\n scrollbarWidth: 'none',\n ...floatingStyle.current,\n ...props?.style,\n },\n onPointerEnter() {\n setControlledScrolling(false)\n state.current.isMouseOutside = false\n },\n onPointerLeave() {\n state.current.isMouseOutside = true\n },\n onPointerMove() {\n state.current.isMouseOutside = false\n setControlledScrolling(false)\n },\n onKeyDown() {\n setControlledScrolling(true)\n },\n onContextMenu(e) {\n e.preventDefault()\n },\n onScroll(event) {\n // In React 18, the ScrollArrows need to synchronously know this value to prevent\n // painting at the wrong time.\n flushSync(() => setScrollTop(event.currentTarget.scrollTop))\n },\n })\n },\n }\n }, [floating, y, x, interactions])\n\n // effects\n\n useIsomorphicLayoutEffect(() => {\n if (open) {\n selectTimeoutRef.current = setTimeout(() => {\n allowSelectRef.current = true\n }, 300)\n\n return () => {\n clearTimeout(selectTimeoutRef.current)\n }\n } else {\n allowSelectRef.current = false\n allowMouseUpRef.current = true\n setInnerOffset(0)\n setFallback(false)\n setBlockSelection(false)\n }\n }, [open])\n\n // Replacement for `useDismiss` as the arrows are outside of the floating\n // element DOM tree.\n useIsomorphicLayoutEffect(() => {\n function onPointerDown(e: PointerEvent) {\n const target = e.target as Node\n if (\n !(\n refs.floating.current?.contains(target) ||\n upArrowRef.current?.contains(target) ||\n downArrowRef.current?.contains(target)\n )\n ) {\n setOpen(false)\n setControlledScrolling(false)\n }\n }\n\n if (open) {\n document.addEventListener('pointerdown', onPointerDown)\n return () => {\n document.removeEventListener('pointerdown', onPointerDown)\n }\n }\n }, [open, refs, setOpen])\n\n // Scroll the `activeIndex` item into view only in \"controlledScrolling\"\n // (keyboard nav) mode.\n useIsomorphicLayoutEffect(() => {\n if (open && controlledScrolling) {\n if (activeIndex != null) {\n listItemsRef.current[activeIndex]?.scrollIntoView({ block: 'nearest' })\n }\n }\n\n setScrollTop(refs.floating.current?.scrollTop ?? 0)\n }, [open, refs, controlledScrolling, activeIndex])\n\n // Scroll the `selectedIndex` into view upon opening the floating element.\n useIsomorphicLayoutEffect(() => {\n if (open && fallback) {\n if (selectedIndex != null) {\n listItemsRef.current[selectedIndex]?.scrollIntoView({ block: 'nearest' })\n }\n }\n }, [open, fallback, selectedIndex])\n\n // Unset the height limiting for fallback mode. This gets executed prior to\n // the positioning call.\n useIsomorphicLayoutEffect(() => {\n if (refs.floating.current && fallback) {\n refs.floating.current.style.maxHeight = ''\n }\n }, [refs, fallback])\n\n // We set this to true by default so that events bubble to forms without JS (SSR)\n // const isFormControl = trigger ? Boolean(trigger.closest('form')) : true\n // const [bubbleSelect, setBubbleSelect] = React.useState<HTMLSelectElement | null>(null)\n // const triggerPointerDownPosRef = React.useRef<{ x: number; y: number } | null>(null)\n\n return (\n <SelectProvider\n scope={__scopeSelect}\n {...(selectContext as Required<typeof selectContext>)}\n setScrollTop={setScrollTop}\n setInnerOffset={setInnerOffset}\n floatingRef={floatingRef}\n setValueAtIndex={(index, value) => {\n listContentRef.current[index] = value\n }}\n fallback={fallback}\n interactions={interactionsContext}\n floatingContext={context}\n activeIndex={activeIndex}\n canScrollDown={!!showDownArrow}\n canScrollUp={!!showUpArrow}\n controlledScrolling={controlledScrolling}\n dataRef={context.dataRef}\n listRef={listItemsRef}\n blockSelection={blockSelection}\n allowMouseUpRef={allowMouseUpRef}\n upArrowRef={upArrowRef}\n downArrowRef={downArrowRef}\n selectTimeoutRef={selectTimeoutRef}\n allowSelectRef={allowSelectRef}\n >\n {children}\n {/* {isFormControl ? (\n <BubbleSelect\n ref={setBubbleSelect}\n aria-hidden\n tabIndex={-1}\n name={name}\n autoComplete={autoComplete}\n value={value}\n // enable form autofill\n onChange={(event) => setValue(event.target.value)}\n />\n ) : null} */}\n </SelectProvider>\n )\n}\n\n// Cross browser fixes for pinch-zooming/backdrop-filter \uD83D\uDE44\nconst userAgent = (typeof navigator !== 'undefined' && navigator.userAgent) || ''\n"],
5
- "mappings": "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",
6
- "names": ["props"]
5
+ "mappings": "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",
6
+ "names": ["jsx", "autoUpdate", "flip", "inner", "offset", "shift", "size", "useClick", "useDismiss", "useFloating", "useInnerOffset", "useInteractions", "useListNavigation", "useRole", "useTypeahead", "isClient", "isWeb", "useIsTouchDevice", "useIsomorphicLayoutEffect", "React", "flushSync", "SCROLL_ARROW_THRESHOLD", "WINDOW_PADDING", "SelectProvider", "useSelectContext", "SelectInlineImpl", "props", "__scopeSelect", "children", "open", "selectedIndexRef", "listContentRef", "selectContext", "setActiveIndex", "setOpen", "setSelectedIndex", "selectedIndex", "activeIndex", "forceUpdate", "scrollTop", "setScrollTop", "touch", "listItemsRef", "overflowRef", "upArrowRef", "downArrowRef", "allowSelectRef", "allowMouseUpRef", "selectTimeoutRef", "state", "controlledScrolling", "setControlledScrolling", "fallback", "setFallback", "innerOffset", "setInnerOffset", "blockSelection", "setBlockSelection", "floatingStyle", "frame", "mouseUp", "e", "updateFloatingSize", "availableHeight", "width", "x", "y", "reference", "floating", "strategy", "context", "refs", "floatingRef", "showUpArrow", "showDownArrow", "interactions", "interactionsContext", "event", "onPointerDown", "_a", "_b", "_c", "target", "index", "value", "userAgent"]
7
7
  }
@@ -1,11 +1,2 @@
1
- import { Fragment, jsx } from "react/jsx-runtime";
2
- const SelectInlineImpl = (props) => {
3
- if (process.env.NODE_ENV === "development") {
4
- console.warn("Sheet not implemented inline on native");
5
- }
6
- return /* @__PURE__ */ jsx(Fragment, { children: props.children });
7
- };
8
- export {
9
- SelectInlineImpl
10
- };
1
+ import{Fragment as n,jsx as l}from"react/jsx-runtime";const t=e=>(process.env.NODE_ENV==="development"&&console.warn("Sheet not implemented inline on native"),l(n,{children:e.children}));export{t as SelectInlineImpl};
11
2
  //# sourceMappingURL=SelectImpl.native.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/SelectImpl.native.tsx"],
4
4
  "sourcesContent": ["import { SelectImplProps } from './types'\n\n/**\n * TODO can just make it a sheet for native\n * later on can have `native` prop\n */\n\nexport const SelectInlineImpl = (props: SelectImplProps) => {\n if (process.env.NODE_ENV === 'development') {\n // eslint-disable-next-line no-console\n console.warn('Sheet not implemented inline on native')\n }\n return <>{props.children}</>\n}\n"],
5
- "mappings": "AAYS;AALF,MAAM,mBAAmB,CAAC,UAA2B;AAC1D,MAAI,QAAQ,IAAI,aAAa,eAAe;AAE1C,YAAQ,KAAK,wCAAwC;AAAA,EACvD;AACA,SAAO,gCAAG,gBAAM,UAAS;AAC3B;",
6
- "names": []
5
+ "mappings": "AAYS,mBAAAA,EAAA,OAAAC,MAAA,oBALF,MAAMC,EAAoBC,IAC3B,QAAQ,IAAI,WAAa,eAE3B,QAAQ,KAAK,wCAAwC,EAEhDF,EAAAD,EAAA,CAAG,SAAAG,EAAM,SAAS",
6
+ "names": ["Fragment", "jsx", "SelectInlineImpl", "props"]
7
7
  }
@@ -1,11 +1,2 @@
1
- import { Fragment, jsx } from "react/jsx-runtime";
2
- const SelectInlineImpl = (props) => {
3
- if (process.env.NODE_ENV === "development") {
4
- console.warn("Sheet not implemented inline on native");
5
- }
6
- return /* @__PURE__ */ jsx(Fragment, { children: props.children });
7
- };
8
- export {
9
- SelectInlineImpl
10
- };
1
+ import{Fragment as n,jsx as l}from"react/jsx-runtime";const t=e=>(process.env.NODE_ENV==="development"&&console.warn("Sheet not implemented inline on native"),l(n,{children:e.children}));export{t as SelectInlineImpl};
11
2
  //# sourceMappingURL=SelectImpl.native.mjs.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/SelectImpl.native.tsx"],
4
4
  "sourcesContent": ["import { SelectImplProps } from './types'\n\n/**\n * TODO can just make it a sheet for native\n * later on can have `native` prop\n */\n\nexport const SelectInlineImpl = (props: SelectImplProps) => {\n if (process.env.NODE_ENV === 'development') {\n // eslint-disable-next-line no-console\n console.warn('Sheet not implemented inline on native')\n }\n return <>{props.children}</>\n}\n"],
5
- "mappings": "AAYS;AALF,MAAM,mBAAmB,CAAC,UAA2B;AAC1D,MAAI,QAAQ,IAAI,aAAa,eAAe;AAE1C,YAAQ,KAAK,wCAAwC;AAAA,EACvD;AACA,SAAO,gCAAG,gBAAM,UAAS;AAC3B;",
6
- "names": []
5
+ "mappings": "AAYS,mBAAAA,EAAA,OAAAC,MAAA,oBALF,MAAMC,EAAoBC,IAC3B,QAAQ,IAAI,WAAa,eAE3B,QAAQ,KAAK,wCAAwC,EAEhDF,EAAAD,EAAA,CAAG,SAAAG,EAAM,SAAS",
6
+ "names": ["Fragment", "jsx", "SelectInlineImpl", "props"]
7
7
  }
@@ -1,141 +1,2 @@
1
- import { jsx } from "react/jsx-runtime";
2
- import { autoUpdate, offset, useFloating } from "@floating-ui/react";
3
- import { useComposedRefs } from "@tamagui/compose-refs";
4
- import { useIsomorphicLayoutEffect } from "@tamagui/core";
5
- import { YStack } from "@tamagui/stacks";
6
- import * as React from "react";
7
- import { flushSync } from "react-dom";
8
- import { useSelectContext } from "./context";
9
- const SCROLL_UP_BUTTON_NAME = "SelectScrollUpButton";
10
- const SelectScrollUpButton = React.forwardRef((props, forwardedRef) => {
11
- return /* @__PURE__ */ jsx(
12
- SelectScrollButtonImpl,
13
- {
14
- componentName: SCROLL_UP_BUTTON_NAME,
15
- ...props,
16
- dir: "up",
17
- ref: forwardedRef
18
- }
19
- );
20
- });
21
- SelectScrollUpButton.displayName = SCROLL_UP_BUTTON_NAME;
22
- const SCROLL_DOWN_BUTTON_NAME = "SelectScrollDownButton";
23
- const SelectScrollDownButton = React.forwardRef((props, forwardedRef) => {
24
- return /* @__PURE__ */ jsx(
25
- SelectScrollButtonImpl,
26
- {
27
- componentName: SCROLL_DOWN_BUTTON_NAME,
28
- ...props,
29
- dir: "down",
30
- ref: forwardedRef
31
- }
32
- );
33
- });
34
- SelectScrollDownButton.displayName = SCROLL_DOWN_BUTTON_NAME;
35
- const SelectScrollButtonImpl = React.memo(
36
- React.forwardRef(
37
- (props, forwardedRef) => {
38
- var _a;
39
- const { __scopeSelect, dir, componentName, ...scrollIndicatorProps } = props;
40
- const {
41
- floatingRef,
42
- forceUpdate,
43
- open,
44
- fallback,
45
- setScrollTop,
46
- setInnerOffset,
47
- ...context
48
- } = useSelectContext(componentName, __scopeSelect);
49
- const [element, setElement] = React.useState(null);
50
- const statusRef = React.useRef("idle");
51
- const isVisible = context[dir === "down" ? "canScrollDown" : "canScrollUp"];
52
- const frameRef = React.useRef();
53
- const { x, y, reference, floating, strategy, update, refs } = useFloating({
54
- open: open && isVisible,
55
- strategy: "fixed",
56
- placement: dir === "up" ? "top" : "bottom",
57
- middleware: [offset(({ rects }) => -rects.floating.height)],
58
- whileElementsMounted: (...args) => autoUpdate(...args, { animationFrame: true })
59
- });
60
- const composedRef = useComposedRefs(forwardedRef, floating);
61
- if (floatingRef) {
62
- if (open) {
63
- if (element !== floatingRef.current) {
64
- setElement(floatingRef.current);
65
- reference(floatingRef.current);
66
- requestAnimationFrame(update);
67
- }
68
- } else {
69
- cancelAnimationFrame(frameRef.current);
70
- }
71
- }
72
- useIsomorphicLayoutEffect(() => {
73
- return () => {
74
- cancelAnimationFrame(frameRef.current);
75
- };
76
- }, []);
77
- if (!(isVisible && floatingRef)) {
78
- return null;
79
- }
80
- const onScroll = (amount) => {
81
- console.log("on scroll?");
82
- if (fallback) {
83
- if (refs.floating.current) {
84
- refs.floating.current.scrollTop -= amount;
85
- flushSync(() => {
86
- var _a2;
87
- return setScrollTop(((_a2 = refs.floating.current) == null ? void 0 : _a2.scrollTop) ?? 0);
88
- });
89
- }
90
- } else {
91
- flushSync(() => setInnerOffset((value) => value - amount));
92
- }
93
- };
94
- return /* @__PURE__ */ jsx(
95
- YStack,
96
- {
97
- ref: composedRef,
98
- componentName,
99
- "aria-hidden": true,
100
- ...scrollIndicatorProps,
101
- zIndex: 1e3,
102
- position: strategy,
103
- left: x || 0,
104
- top: y || 0,
105
- width: `calc(${(((_a = floatingRef == null ? void 0 : floatingRef.current) == null ? void 0 : _a.offsetWidth) ?? 0) - 2}px)`,
106
- onPointerEnter: () => {
107
- statusRef.current = "active";
108
- let prevNow = Date.now();
109
- function frame() {
110
- if (element) {
111
- const currentNow = Date.now();
112
- const msElapsed = currentNow - prevNow;
113
- prevNow = currentNow;
114
- const pixelsToScroll = msElapsed / 2;
115
- const remainingPixels = dir === "up" ? element.scrollTop : element.scrollHeight - element.clientHeight - element.scrollTop;
116
- const scrollRemaining = dir === "up" ? element.scrollTop - pixelsToScroll > 0 : element.scrollTop + pixelsToScroll < element.scrollHeight - element.clientHeight;
117
- onScroll(
118
- dir === "up" ? Math.min(pixelsToScroll, remainingPixels) : Math.max(-pixelsToScroll, -remainingPixels)
119
- );
120
- if (scrollRemaining) {
121
- frameRef.current = requestAnimationFrame(frame);
122
- }
123
- }
124
- }
125
- cancelAnimationFrame(frameRef.current);
126
- frameRef.current = requestAnimationFrame(frame);
127
- },
128
- onPointerLeave: () => {
129
- statusRef.current = "idle";
130
- cancelAnimationFrame(frameRef.current);
131
- }
132
- }
133
- );
134
- }
135
- )
136
- );
137
- export {
138
- SelectScrollDownButton,
139
- SelectScrollUpButton
140
- };
1
+ import{jsx as p}from"react/jsx-runtime";import{autoUpdate as q,offset as k,useFloating as W}from"@floating-ui/react";import{useComposedRefs as z}from"@tamagui/compose-refs";import{useIsomorphicLayoutEffect as V}from"@tamagui/core";import{YStack as Y}from"@tamagui/stacks";import*as n from"react";import{flushSync as T}from"react-dom";import{useSelectContext as $}from"./context";const w="SelectScrollUpButton",G=n.forwardRef((c,s)=>p(E,{componentName:w,...c,dir:"up",ref:s}));G.displayName=w;const h="SelectScrollDownButton",J=n.forwardRef((c,s)=>p(E,{componentName:h,...c,dir:"down",ref:s}));J.displayName=h;const E=n.memo(n.forwardRef((c,s)=>{var g;const{__scopeSelect:N,dir:i,componentName:u,...R}=c,{floatingRef:o,forceUpdate:K,open:f,fallback:x,setScrollTop:I,setInnerOffset:y,...A}=$(u,N),[e,F]=n.useState(null),S=n.useRef("idle"),d=A[i==="down"?"canScrollDown":"canScrollUp"],l=n.useRef(),{x:U,y:_,reference:L,floating:D,strategy:M,update:O,refs:m}=W({open:f&&d,strategy:"fixed",placement:i==="up"?"top":"bottom",middleware:[k(({rects:t})=>-t.floating.height)],whileElementsMounted:(...t)=>q(...t,{animationFrame:!0})}),H=z(s,D);if(o&&(f?e!==o.current&&(F(o.current),L(o.current),requestAnimationFrame(O)):cancelAnimationFrame(l.current)),V(()=>()=>{cancelAnimationFrame(l.current)},[]),!(d&&o))return null;const b=t=>{console.log("on scroll?"),x?m.floating.current&&(m.floating.current.scrollTop-=t,T(()=>{var r;return I(((r=m.floating.current)==null?void 0:r.scrollTop)??0)})):T(()=>y(r=>r-t))};return p(Y,{ref:H,componentName:u,"aria-hidden":!0,...R,zIndex:1e3,position:M,left:U||0,top:_||0,width:`calc(${(((g=o==null?void 0:o.current)==null?void 0:g.offsetWidth)??0)-2}px)`,onPointerEnter:()=>{S.current="active";let t=Date.now();function r(){if(e){const B=Date.now(),v=B-t;t=B;const a=v/2,P=i==="up"?e.scrollTop:e.scrollHeight-e.clientHeight-e.scrollTop,C=i==="up"?e.scrollTop-a>0:e.scrollTop+a<e.scrollHeight-e.clientHeight;b(i==="up"?Math.min(a,P):Math.max(-a,-P)),C&&(l.current=requestAnimationFrame(r))}}cancelAnimationFrame(l.current),l.current=requestAnimationFrame(r)},onPointerLeave:()=>{S.current="idle",cancelAnimationFrame(l.current)}})}));export{J as SelectScrollDownButton,G as SelectScrollUpButton};
141
2
  //# sourceMappingURL=SelectScrollButton.js.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/SelectScrollButton.tsx"],
4
4
  "sourcesContent": ["import { autoUpdate, offset, useFloating } from '@floating-ui/react'\nimport { useComposedRefs } from '@tamagui/compose-refs'\nimport { TamaguiElement, useIsomorphicLayoutEffect } from '@tamagui/core'\nimport { YStack } from '@tamagui/stacks'\nimport * as React from 'react'\nimport { flushSync } from 'react-dom'\n\nimport { useSelectContext } from './context'\nimport {\n ScopedProps,\n SelectScrollButtonImplProps,\n SelectScrollButtonProps,\n} from './types'\n\n/* -------------------------------------------------------------------------------------------------\n * SelectScrollUpButton\n * -----------------------------------------------------------------------------------------------*/\n\nconst SCROLL_UP_BUTTON_NAME = 'SelectScrollUpButton'\n\nexport const SelectScrollUpButton = React.forwardRef<\n TamaguiElement,\n SelectScrollButtonProps\n>((props: ScopedProps<SelectScrollButtonProps>, forwardedRef) => {\n return (\n <SelectScrollButtonImpl\n componentName={SCROLL_UP_BUTTON_NAME}\n {...props}\n dir=\"up\"\n ref={forwardedRef}\n />\n )\n})\n\nSelectScrollUpButton.displayName = SCROLL_UP_BUTTON_NAME\n\n/* -------------------------------------------------------------------------------------------------\n * SelectScrollDownButton\n * -----------------------------------------------------------------------------------------------*/\n\nconst SCROLL_DOWN_BUTTON_NAME = 'SelectScrollDownButton'\n\nexport const SelectScrollDownButton = React.forwardRef<\n TamaguiElement,\n SelectScrollButtonProps\n>((props: ScopedProps<SelectScrollButtonProps>, forwardedRef) => {\n return (\n <SelectScrollButtonImpl\n componentName={SCROLL_DOWN_BUTTON_NAME}\n {...props}\n dir=\"down\"\n ref={forwardedRef}\n />\n )\n})\n\nSelectScrollDownButton.displayName = SCROLL_DOWN_BUTTON_NAME\n\ntype SelectScrollButtonImplElement = TamaguiElement\n\nconst SelectScrollButtonImpl = React.memo(\n React.forwardRef<SelectScrollButtonImplElement, SelectScrollButtonImplProps>(\n (props: ScopedProps<SelectScrollButtonImplProps>, forwardedRef) => {\n const { __scopeSelect, dir, componentName, ...scrollIndicatorProps } = props\n const {\n floatingRef,\n forceUpdate,\n open,\n fallback,\n setScrollTop,\n setInnerOffset,\n ...context\n } = useSelectContext(componentName, __scopeSelect)\n\n const [element, setElement] = React.useState<HTMLElement | null>(null)\n const statusRef = React.useRef<'idle' | 'active'>('idle')\n const isVisible = context[dir === 'down' ? 'canScrollDown' : 'canScrollUp']\n const frameRef = React.useRef<any>()\n\n const { x, y, reference, floating, strategy, update, refs } = useFloating({\n open: open && isVisible,\n strategy: 'fixed',\n placement: dir === 'up' ? 'top' : 'bottom',\n middleware: [offset(({ rects }) => -rects.floating.height)],\n whileElementsMounted: (...args) => autoUpdate(...args, { animationFrame: true }),\n })\n\n const composedRef = useComposedRefs(forwardedRef, floating)\n\n if (floatingRef) {\n if (open) {\n if (element !== floatingRef.current) {\n setElement(floatingRef.current)\n reference(floatingRef.current)\n requestAnimationFrame(update)\n }\n } else {\n cancelAnimationFrame(frameRef.current)\n }\n }\n\n useIsomorphicLayoutEffect(() => {\n return () => {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n cancelAnimationFrame(frameRef.current)\n }\n }, [])\n\n if (!(isVisible && floatingRef)) {\n return null\n }\n\n const onScroll = (amount: number) => {\n console.log('on scroll?')\n if (fallback) {\n if (refs.floating.current) {\n refs.floating.current.scrollTop -= amount\n flushSync(() => setScrollTop!(refs.floating.current?.scrollTop ?? 0))\n }\n } else {\n flushSync(() => setInnerOffset!((value) => value - amount))\n }\n }\n\n return (\n <YStack\n ref={composedRef}\n componentName={componentName}\n aria-hidden\n {...scrollIndicatorProps}\n zIndex={1000}\n // @ts-expect-error\n position={strategy}\n left={x || 0}\n top={y || 0}\n width={`calc(${(floatingRef?.current?.offsetWidth ?? 0) - 2}px)`}\n onPointerEnter={() => {\n statusRef.current = 'active'\n let prevNow = Date.now()\n\n function frame() {\n if (element) {\n const currentNow = Date.now()\n const msElapsed = currentNow - prevNow\n prevNow = currentNow\n\n const pixelsToScroll = msElapsed / 2\n\n const remainingPixels =\n dir === 'up'\n ? element.scrollTop\n : element.scrollHeight - element.clientHeight - element.scrollTop\n\n const scrollRemaining =\n dir === 'up'\n ? element.scrollTop - pixelsToScroll > 0\n : element.scrollTop + pixelsToScroll <\n element.scrollHeight - element.clientHeight\n\n onScroll(\n dir === 'up'\n ? Math.min(pixelsToScroll, remainingPixels)\n : Math.max(-pixelsToScroll, -remainingPixels)\n )\n\n if (scrollRemaining) {\n frameRef.current = requestAnimationFrame(frame)\n }\n }\n }\n\n cancelAnimationFrame(frameRef.current)\n frameRef.current = requestAnimationFrame(frame)\n }}\n onPointerLeave={() => {\n statusRef.current = 'idle'\n cancelAnimationFrame(frameRef.current)\n }}\n />\n )\n }\n )\n)\n"],
5
- "mappings": "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",
6
- "names": ["_a"]
5
+ "mappings": "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",
6
+ "names": ["jsx", "autoUpdate", "offset", "useFloating", "useComposedRefs", "useIsomorphicLayoutEffect", "YStack", "React", "flushSync", "useSelectContext", "SCROLL_UP_BUTTON_NAME", "SelectScrollUpButton", "props", "forwardedRef", "SelectScrollButtonImpl", "SCROLL_DOWN_BUTTON_NAME", "SelectScrollDownButton", "_a", "__scopeSelect", "dir", "componentName", "scrollIndicatorProps", "floatingRef", "forceUpdate", "open", "fallback", "setScrollTop", "setInnerOffset", "context", "element", "setElement", "statusRef", "isVisible", "frameRef", "x", "y", "reference", "floating", "strategy", "update", "refs", "rects", "args", "composedRef", "onScroll", "amount", "value", "prevNow", "frame", "currentNow", "msElapsed", "pixelsToScroll", "remainingPixels", "scrollRemaining"]
7
7
  }