@tamagui/select 2.7.7 → 3.0.0-beta.1091.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (248) hide show
  1. package/dist/cjs/Select.cjs +406 -467
  2. package/dist/cjs/Select.native.cjs +495 -0
  3. package/dist/cjs/Select.native.js +445 -492
  4. package/dist/cjs/Select.native.js.map +1 -1
  5. package/dist/cjs/SelectContent.cjs +79 -79
  6. package/dist/cjs/SelectContent.native.cjs +29 -0
  7. package/dist/cjs/SelectContent.native.js +17 -22
  8. package/dist/cjs/SelectContent.native.js.map +1 -1
  9. package/dist/cjs/SelectImpl.cjs +305 -320
  10. package/dist/cjs/SelectImpl.native.cjs +29 -0
  11. package/dist/cjs/SelectImpl.native.js +16 -24
  12. package/dist/cjs/SelectImpl.native.js.map +1 -1
  13. package/dist/cjs/SelectItem.cjs +256 -205
  14. package/dist/cjs/SelectItem.native.cjs +288 -0
  15. package/dist/cjs/SelectItem.native.js +264 -213
  16. package/dist/cjs/SelectItem.native.js.map +1 -1
  17. package/dist/cjs/SelectItemText.cjs +48 -79
  18. package/dist/cjs/SelectItemText.native.cjs +73 -0
  19. package/dist/cjs/SelectItemText.native.js +49 -79
  20. package/dist/cjs/SelectItemText.native.js.map +1 -1
  21. package/dist/cjs/SelectScrollButton.cjs +110 -130
  22. package/dist/cjs/SelectScrollButton.native.cjs +37 -0
  23. package/dist/cjs/SelectScrollButton.native.js +24 -22
  24. package/dist/cjs/SelectScrollButton.native.js.map +1 -1
  25. package/dist/cjs/SelectTrigger.cjs +68 -84
  26. package/dist/cjs/SelectTrigger.native.cjs +90 -0
  27. package/dist/cjs/SelectTrigger.native.js +70 -66
  28. package/dist/cjs/SelectTrigger.native.js.map +1 -1
  29. package/dist/cjs/SelectViewport.cjs +121 -142
  30. package/dist/cjs/SelectViewport.native.cjs +72 -0
  31. package/dist/cjs/SelectViewport.native.js +53 -50
  32. package/dist/cjs/SelectViewport.native.js.map +1 -1
  33. package/dist/cjs/constants.cjs +20 -22
  34. package/dist/cjs/constants.native.cjs +40 -0
  35. package/dist/cjs/constants.native.js +20 -21
  36. package/dist/cjs/constants.native.js.map +1 -1
  37. package/dist/cjs/context.cjs +37 -48
  38. package/dist/cjs/context.native.cjs +57 -0
  39. package/dist/cjs/context.native.js +39 -49
  40. package/dist/cjs/context.native.js.map +1 -1
  41. package/dist/cjs/index.cjs +14 -11
  42. package/dist/cjs/index.native.cjs +26 -0
  43. package/dist/cjs/index.native.js +14 -10
  44. package/dist/cjs/index.native.js.map +1 -1
  45. package/dist/cjs/selectionController.cjs +343 -0
  46. package/dist/cjs/selectionController.native.cjs +407 -0
  47. package/dist/cjs/selectionController.native.js +409 -0
  48. package/dist/cjs/selectionController.native.js.map +1 -0
  49. package/dist/cjs/types.cjs +9 -11
  50. package/dist/cjs/types.native.cjs +18 -0
  51. package/dist/cjs/types.native.js +9 -10
  52. package/dist/cjs/types.native.js.map +1 -1
  53. package/dist/esm/Select.mjs +381 -443
  54. package/dist/esm/Select.mjs.map +1 -1
  55. package/dist/esm/Select.native.js +420 -469
  56. package/dist/esm/Select.native.js.map +1 -1
  57. package/dist/esm/SelectContent.mjs +67 -61
  58. package/dist/esm/SelectContent.mjs.map +1 -1
  59. package/dist/esm/SelectContent.native.js +4 -5
  60. package/dist/esm/SelectContent.native.js.map +1 -1
  61. package/dist/esm/SelectImpl.mjs +291 -295
  62. package/dist/esm/SelectImpl.mjs.map +1 -1
  63. package/dist/esm/SelectImpl.native.js +5 -8
  64. package/dist/esm/SelectImpl.native.js.map +1 -1
  65. package/dist/esm/SelectItem.mjs +240 -181
  66. package/dist/esm/SelectItem.mjs.map +1 -1
  67. package/dist/esm/SelectItem.native.js +249 -191
  68. package/dist/esm/SelectItem.native.js.map +1 -1
  69. package/dist/esm/SelectItemText.mjs +33 -55
  70. package/dist/esm/SelectItemText.mjs.map +1 -1
  71. package/dist/esm/SelectItemText.native.js +34 -56
  72. package/dist/esm/SelectItemText.native.js.map +1 -1
  73. package/dist/esm/SelectScrollButton.mjs +95 -107
  74. package/dist/esm/SelectScrollButton.mjs.map +1 -1
  75. package/dist/esm/SelectScrollButton.native.js +11 -7
  76. package/dist/esm/SelectScrollButton.native.js.map +1 -1
  77. package/dist/esm/SelectTrigger.mjs +56 -58
  78. package/dist/esm/SelectTrigger.mjs.map +1 -1
  79. package/dist/esm/SelectTrigger.native.js +54 -44
  80. package/dist/esm/SelectTrigger.native.js.map +1 -1
  81. package/dist/esm/SelectViewport.mjs +107 -119
  82. package/dist/esm/SelectViewport.mjs.map +1 -1
  83. package/dist/esm/SelectViewport.native.js +44 -39
  84. package/dist/esm/SelectViewport.native.js.map +1 -1
  85. package/dist/esm/constants.mjs +1 -0
  86. package/dist/esm/constants.mjs.map +1 -1
  87. package/dist/esm/constants.native.js +1 -0
  88. package/dist/esm/constants.native.js.map +1 -1
  89. package/dist/esm/context.mjs +20 -28
  90. package/dist/esm/context.mjs.map +1 -1
  91. package/dist/esm/context.native.js +23 -31
  92. package/dist/esm/context.native.js.map +1 -1
  93. package/dist/esm/index.js +13 -3
  94. package/dist/esm/index.mjs +13 -3
  95. package/dist/esm/index.native.js +13 -3
  96. package/dist/esm/selectionController.mjs +315 -0
  97. package/dist/esm/selectionController.mjs.map +1 -0
  98. package/dist/esm/selectionController.native.js +377 -0
  99. package/dist/esm/selectionController.native.js.map +1 -0
  100. package/dist/esm/types.mjs +0 -2
  101. package/dist/esm/types.native.js +0 -2
  102. package/dist/jsx/Select.mjs +381 -443
  103. package/dist/jsx/Select.mjs.map +1 -1
  104. package/dist/jsx/Select.native.cjs +495 -0
  105. package/dist/jsx/Select.native.js +445 -492
  106. package/dist/jsx/Select.native.js.map +1 -1
  107. package/dist/jsx/SelectContent.mjs +67 -61
  108. package/dist/jsx/SelectContent.mjs.map +1 -1
  109. package/dist/jsx/SelectContent.native.cjs +29 -0
  110. package/dist/jsx/SelectContent.native.js +17 -22
  111. package/dist/jsx/SelectContent.native.js.map +1 -1
  112. package/dist/jsx/SelectImpl.mjs +291 -295
  113. package/dist/jsx/SelectImpl.mjs.map +1 -1
  114. package/dist/jsx/SelectImpl.native.cjs +29 -0
  115. package/dist/jsx/SelectImpl.native.js +16 -24
  116. package/dist/jsx/SelectImpl.native.js.map +1 -1
  117. package/dist/jsx/SelectItem.mjs +240 -181
  118. package/dist/jsx/SelectItem.mjs.map +1 -1
  119. package/dist/jsx/SelectItem.native.cjs +288 -0
  120. package/dist/jsx/SelectItem.native.js +264 -213
  121. package/dist/jsx/SelectItem.native.js.map +1 -1
  122. package/dist/jsx/SelectItemText.mjs +33 -55
  123. package/dist/jsx/SelectItemText.mjs.map +1 -1
  124. package/dist/jsx/SelectItemText.native.cjs +73 -0
  125. package/dist/jsx/SelectItemText.native.js +49 -79
  126. package/dist/jsx/SelectItemText.native.js.map +1 -1
  127. package/dist/jsx/SelectScrollButton.mjs +95 -107
  128. package/dist/jsx/SelectScrollButton.mjs.map +1 -1
  129. package/dist/jsx/SelectScrollButton.native.cjs +37 -0
  130. package/dist/jsx/SelectScrollButton.native.js +24 -22
  131. package/dist/jsx/SelectScrollButton.native.js.map +1 -1
  132. package/dist/jsx/SelectTrigger.mjs +56 -58
  133. package/dist/jsx/SelectTrigger.mjs.map +1 -1
  134. package/dist/jsx/SelectTrigger.native.cjs +90 -0
  135. package/dist/jsx/SelectTrigger.native.js +70 -66
  136. package/dist/jsx/SelectTrigger.native.js.map +1 -1
  137. package/dist/jsx/SelectViewport.mjs +107 -119
  138. package/dist/jsx/SelectViewport.mjs.map +1 -1
  139. package/dist/jsx/SelectViewport.native.cjs +72 -0
  140. package/dist/jsx/SelectViewport.native.js +53 -50
  141. package/dist/jsx/SelectViewport.native.js.map +1 -1
  142. package/dist/jsx/constants.mjs +1 -0
  143. package/dist/jsx/constants.mjs.map +1 -1
  144. package/dist/jsx/constants.native.cjs +40 -0
  145. package/dist/jsx/constants.native.js +20 -21
  146. package/dist/jsx/constants.native.js.map +1 -1
  147. package/dist/jsx/context.mjs +20 -28
  148. package/dist/jsx/context.mjs.map +1 -1
  149. package/dist/jsx/context.native.cjs +57 -0
  150. package/dist/jsx/context.native.js +39 -49
  151. package/dist/jsx/context.native.js.map +1 -1
  152. package/dist/jsx/index.js +13 -3
  153. package/dist/jsx/index.mjs +13 -3
  154. package/dist/jsx/index.native.cjs +26 -0
  155. package/dist/jsx/index.native.js +14 -10
  156. package/dist/jsx/index.native.js.map +1 -1
  157. package/dist/jsx/selectionController.mjs +315 -0
  158. package/dist/jsx/selectionController.mjs.map +1 -0
  159. package/dist/jsx/selectionController.native.cjs +407 -0
  160. package/dist/jsx/selectionController.native.js +409 -0
  161. package/dist/jsx/selectionController.native.js.map +1 -0
  162. package/dist/jsx/types.mjs +0 -2
  163. package/dist/jsx/types.native.cjs +18 -0
  164. package/dist/jsx/types.native.js +9 -10
  165. package/dist/jsx/types.native.js.map +1 -1
  166. package/package.json +31 -30
  167. package/src/Select.tsx +478 -378
  168. package/src/SelectContent.tsx +46 -16
  169. package/src/SelectImpl.native.tsx +0 -8
  170. package/src/SelectImpl.tsx +149 -160
  171. package/src/SelectItem.tsx +280 -159
  172. package/src/SelectItemText.tsx +16 -33
  173. package/src/SelectScrollButton.native.tsx +13 -4
  174. package/src/SelectScrollButton.tsx +57 -42
  175. package/src/SelectTrigger.tsx +77 -53
  176. package/src/SelectViewport.native.tsx +42 -25
  177. package/src/SelectViewport.tsx +60 -60
  178. package/src/context.tsx +6 -2
  179. package/src/index.tsx +5 -2
  180. package/src/selectionController.ts +404 -0
  181. package/src/types.tsx +105 -59
  182. package/types/Select.d.ts +139 -201
  183. package/types/Select.d.ts.map +1 -1
  184. package/types/SelectContent.d.ts +1 -1
  185. package/types/SelectContent.d.ts.map +1 -1
  186. package/types/SelectContent.native.d.ts.map +1 -1
  187. package/types/SelectImpl.d.ts +2 -1
  188. package/types/SelectImpl.d.ts.map +1 -1
  189. package/types/SelectImpl.native.d.ts +1 -5
  190. package/types/SelectImpl.native.d.ts.map +1 -1
  191. package/types/SelectItem.d.ts +13 -16
  192. package/types/SelectItem.d.ts.map +1 -1
  193. package/types/SelectItemText.d.ts +9 -13
  194. package/types/SelectItemText.d.ts.map +1 -1
  195. package/types/SelectScrollButton.d.ts +15 -2
  196. package/types/SelectScrollButton.d.ts.map +1 -1
  197. package/types/SelectScrollButton.native.d.ts +16 -3
  198. package/types/SelectScrollButton.native.d.ts.map +1 -1
  199. package/types/SelectTrigger.d.ts +11 -23
  200. package/types/SelectTrigger.d.ts.map +1 -1
  201. package/types/SelectViewport.d.ts +11 -38
  202. package/types/SelectViewport.d.ts.map +1 -1
  203. package/types/SelectViewport.native.d.ts +15 -4
  204. package/types/SelectViewport.native.d.ts.map +1 -1
  205. package/types/context.d.ts +2 -0
  206. package/types/context.d.ts.map +1 -1
  207. package/types/index.d.ts +5 -2
  208. package/types/index.d.ts.map +1 -1
  209. package/types/selectionController.d.ts +90 -0
  210. package/types/selectionController.d.ts.map +1 -0
  211. package/types/types.d.ts +66 -50
  212. package/types/types.d.ts.map +1 -1
  213. package/dist/cjs/BubbleSelect.cjs +0 -50
  214. package/dist/cjs/BubbleSelect.native.js +0 -30
  215. package/dist/cjs/BubbleSelect.native.js.map +0 -1
  216. package/dist/cjs/useSelectBreakpointActive.cjs +0 -32
  217. package/dist/cjs/useSelectBreakpointActive.native.js +0 -35
  218. package/dist/cjs/useSelectBreakpointActive.native.js.map +0 -1
  219. package/dist/esm/BubbleSelect.mjs +0 -27
  220. package/dist/esm/BubbleSelect.mjs.map +0 -1
  221. package/dist/esm/BubbleSelect.native.js +0 -4
  222. package/dist/esm/BubbleSelect.native.js.map +0 -1
  223. package/dist/esm/index.js.map +0 -1
  224. package/dist/esm/index.mjs.map +0 -1
  225. package/dist/esm/index.native.js.map +0 -1
  226. package/dist/esm/types.mjs.map +0 -1
  227. package/dist/esm/types.native.js.map +0 -1
  228. package/dist/esm/useSelectBreakpointActive.mjs +0 -7
  229. package/dist/esm/useSelectBreakpointActive.mjs.map +0 -1
  230. package/dist/esm/useSelectBreakpointActive.native.js +0 -7
  231. package/dist/esm/useSelectBreakpointActive.native.js.map +0 -1
  232. package/dist/jsx/BubbleSelect.mjs +0 -27
  233. package/dist/jsx/BubbleSelect.mjs.map +0 -1
  234. package/dist/jsx/BubbleSelect.native.js +0 -30
  235. package/dist/jsx/BubbleSelect.native.js.map +0 -1
  236. package/dist/jsx/index.js.map +0 -1
  237. package/dist/jsx/index.mjs.map +0 -1
  238. package/dist/jsx/types.mjs.map +0 -1
  239. package/dist/jsx/useSelectBreakpointActive.mjs +0 -7
  240. package/dist/jsx/useSelectBreakpointActive.mjs.map +0 -1
  241. package/dist/jsx/useSelectBreakpointActive.native.js +0 -35
  242. package/dist/jsx/useSelectBreakpointActive.native.js.map +0 -1
  243. package/src/BubbleSelect.tsx +0 -50
  244. package/src/useSelectBreakpointActive.tsx +0 -7
  245. package/types/BubbleSelect.d.ts +0 -2
  246. package/types/BubbleSelect.d.ts.map +0 -1
  247. package/types/useSelectBreakpointActive.d.ts +0 -3
  248. package/types/useSelectBreakpointActive.d.ts.map +0 -1
@@ -5,336 +5,321 @@ var __getOwnPropNames = Object.getOwnPropertyNames;
5
5
  var __getProtoOf = Object.getPrototypeOf;
6
6
  var __hasOwnProp = Object.prototype.hasOwnProperty;
7
7
  var __export = (target, all) => {
8
- for (var name in all) __defProp(target, name, {
9
- get: all[name],
10
- enumerable: true
11
- });
8
+ for (var name in all) __defProp(target, name, {
9
+ get: all[name],
10
+ enumerable: true
11
+ });
12
12
  };
13
13
  var __copyProps = (to, from, except, desc) => {
14
- if (from && typeof from === "object" || typeof from === "function") {
15
- for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
16
- get: () => from[key],
17
- enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
18
- });
19
- }
20
- return to;
14
+ if (from && typeof from === "object" || typeof from === "function") {
15
+ for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
16
+ get: () => from[key],
17
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
18
+ });
19
+ }
20
+ return to;
21
21
  };
22
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
23
- // If the importer is in node compatibility mode or this is not an ESM
24
- // file that has been converted to a CommonJS file using a Babel-
25
- // compatible transform (i.e. "__esModule" has not been set), then set
26
- // "default" to the CommonJS "module.exports" for node compatibility.
27
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
28
- value: mod,
29
- enumerable: true
22
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
23
+ value: mod,
24
+ enumerable: true
30
25
  }) : target, mod));
31
- var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
32
- value: true
33
- }), mod);
26
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
34
27
  var SelectImpl_exports = {};
35
- __export(SelectImpl_exports, {
36
- SelectInlineImpl: () => SelectInlineImpl
37
- });
28
+ __export(SelectImpl_exports, { SelectInlineImpl: () => SelectInlineImpl });
38
29
  module.exports = __toCommonJS(SelectImpl_exports);
39
30
  var import_floating = require("@tamagui/floating");
40
31
  var import_constants = require("@tamagui/constants");
41
32
  var import_core = require("@tamagui/core");
33
+ var import_helpers = require("@tamagui/helpers");
42
34
  var React = __toESM(require("react"), 1);
43
- var import_react_dom = require("react-dom");
44
35
  var import_constants2 = require("./constants.cjs");
45
36
  var import_context = require("./context.cjs");
46
37
  var import_jsx_runtime = require("react/jsx-runtime");
47
- const SelectInlineImpl = props => {
48
- const {
49
- scope,
50
- children,
51
- open = false,
52
- listContentRef,
53
- setActiveIndexFast
54
- } = props;
55
- const selectContext = (0, import_context.useSelectContext)(scope);
56
- const selectItemParentContext = (0, import_context.useSelectItemParentContext)(scope);
57
- const {
58
- setActiveIndex,
59
- selectedIndex,
60
- activeIndexRef
61
- } = selectContext;
62
- const {
63
- setOpen,
64
- setSelectedIndex
65
- } = selectItemParentContext;
66
- const [scrollTop, setScrollTop] = React.useState(0);
67
- const touch = (0, import_core.useIsTouchDevice)();
68
- const listItemsRef = React.useRef([]);
69
- const overflowRef = React.useRef(null);
70
- const upArrowRef = React.useRef(null);
71
- const downArrowRef = React.useRef(null);
72
- const allowSelectRef = React.useRef(false);
73
- const allowMouseUpRef = React.useRef(true);
74
- const selectTimeoutRef = React.useRef(null);
75
- const state = React.useRef({
76
- isMouseOutside: false,
77
- isTyping: false
78
- });
79
- const [controlledScrolling, setControlledScrolling] = React.useState(false);
80
- const [fallback, setFallback] = React.useState(false);
81
- const [innerOffset, setInnerOffset] = React.useState(0);
82
- const [blockSelection, setBlockSelection] = React.useState(false);
83
- const floatingStyle = React.useRef({});
84
- React.useEffect(() => {
85
- if (open) setActiveIndexFast(selectedIndex ?? 0);else {
86
- setScrollTop(0);
87
- setFallback(false);
88
- setActiveIndexFast(null);
89
- setControlledScrolling(false);
90
- }
91
- }, [open, selectedIndex, setActiveIndexFast]);
92
- (0, import_constants.useIsomorphicLayoutEffect)(() => {
93
- if (!open) return;
94
- const mouseUp = e => {
95
- if (state.current.isMouseOutside) setOpen(false);
96
- };
97
- document.addEventListener("mouseup", mouseUp);
98
- return () => {
99
- document.removeEventListener("mouseup", mouseUp);
100
- };
101
- }, [open]);
102
- const {
103
- x,
104
- y,
105
- strategy,
106
- refs,
107
- update,
108
- placement: computedPlacement
109
- } = (0, import_floating.useFloatingRaw)({
110
- open,
111
- placement: "bottom-start",
112
- whileElementsMounted: import_floating.autoUpdate,
113
- middleware: [(0, import_floating.size)({
114
- apply({
115
- rects: {
116
- reference: {
117
- width
118
- }
119
- }
120
- }) {
121
- Object.assign(floatingStyle.current, {
122
- minWidth: width + 8
123
- });
124
- if (refs.floating.current) Object.assign(refs.floating.current.style, floatingStyle.current);
125
- }
126
- }), (0, import_floating.inner)({
127
- listRef: listItemsRef,
128
- overflowRef,
129
- index: selectedIndex,
130
- offset: innerOffset,
131
- onFallbackChange: setFallback,
132
- padding: 10,
133
- minItemsVisible: touch ? 10 : 4,
134
- referenceOverflowThreshold: 20
135
- }), (0, import_floating.offset)({
136
- crossAxis: -5
137
- })]
138
- });
139
- const floatingRef = refs.floating;
140
- const showUpArrow = open && scrollTop > import_constants2.SCROLL_ARROW_THRESHOLD;
141
- const showDownArrow = open && floatingRef.current && scrollTop < floatingRef.current.scrollHeight - floatingRef.current.clientHeight - import_constants2.SCROLL_ARROW_THRESHOLD;
142
- const isScrollable = showDownArrow || showUpArrow;
143
- (0, import_constants.useIsomorphicLayoutEffect)(() => {
144
- if (typeof window === "undefined") return;
145
- window.addEventListener("resize", update);
146
- if (open) update();
147
- return () => window.removeEventListener("resize", update);
148
- }, [update, open]);
149
- const onMatch = (0, import_core.useEvent)(index => {
150
- return (open ? setActiveIndex : setSelectedIndex)(index);
151
- });
152
- const dataRef = React.useRef({});
153
- dataRef.current.placement = computedPlacement;
154
- const interactionContext = {
155
- open,
156
- onOpenChange: val => setOpen(val),
157
- refs: {
158
- reference: refs.reference,
159
- floating: refs.floating,
160
- domReference: refs.reference
161
- },
162
- elements: {
163
- reference: refs.reference?.current || null,
164
- floating: refs.floating?.current || null,
165
- domReference: refs.reference?.current || null
166
- },
167
- dataRef
168
- };
169
- const interactionsProps = [(0, import_floating.useClick)(interactionContext, {
170
- event: "mousedown",
171
- keyboardHandlers: false
172
- }), (0, import_floating.useRole)(interactionContext, {
173
- role: "listbox"
174
- }), (0, import_floating.useInnerOffset)(interactionContext, {
175
- enabled: !fallback && isScrollable,
176
- onChange: setInnerOffset,
177
- overflowRef,
178
- scrollRef: refs.floating
179
- }), (0, import_floating.useListNavigation)(interactionContext, {
180
- listRef: listItemsRef,
181
- activeIndex: selectContext.activeIndex ?? 0,
182
- selectedIndex,
183
- onNavigate: index => {
184
- if (index !== null) setActiveIndex(index);
185
- },
186
- scrollItemIntoView: false
187
- }), (0, import_floating.useTypeahead)(interactionContext, {
188
- listRef: listContentRef,
189
- onMatch,
190
- selectedIndex,
191
- activeIndex: selectContext.activeIndex,
192
- onTypingChange: e => {
193
- state.current.isTyping = e;
194
- }
195
- })];
196
- const interactions = (0, import_floating.useInteractions)(React.useMemo(() => {
197
- return interactionsProps;
198
- }, interactionsProps));
199
- const interactionsContext = React.useMemo(() => {
200
- return {
201
- ...interactions,
202
- getReferenceProps() {
203
- return interactions.getReferenceProps({
204
- ref: refs.reference,
205
- className: "SelectTrigger",
206
- onKeyDown(event) {
207
- if (event.key === "Enter" || event.code === "Space" || event.key === " " && !state.current.isTyping) {
208
- event.preventDefault();
209
- setOpen(true);
210
- }
211
- }
212
- });
213
- },
214
- getFloatingProps(props2) {
215
- return interactions.getFloatingProps({
216
- ref: refs.floating,
217
- className: "Select",
218
- ...props2,
219
- style: {
220
- position: strategy,
221
- top: y ?? "",
222
- left: x ?? "",
223
- outline: 0,
224
- scrollbarWidth: "none",
225
- ...floatingStyle.current,
226
- ...props2?.style
227
- },
228
- onPointerEnter() {
229
- setControlledScrolling(false);
230
- state.current.isMouseOutside = false;
231
- },
232
- onPointerLeave() {
233
- state.current.isMouseOutside = true;
234
- },
235
- onPointerMove() {
236
- state.current.isMouseOutside = false;
237
- setControlledScrolling(false);
238
- },
239
- onKeyDown() {
240
- setControlledScrolling(true);
241
- },
242
- onContextMenu(e) {
243
- e.preventDefault();
244
- },
245
- onScroll(event) {
246
- (0, import_react_dom.flushSync)(() => {
247
- setScrollTop(event.currentTarget.scrollTop);
248
- });
249
- }
250
- });
251
- }
252
- };
253
- }, [refs.reference.current, x, y, refs.floating.current, interactions]);
254
- (0, import_constants.useIsomorphicLayoutEffect)(() => {
255
- if (open) {
256
- allowMouseUpRef.current = false;
257
- selectTimeoutRef.current = setTimeout(() => {
258
- allowSelectRef.current = true;
259
- allowMouseUpRef.current = true;
260
- }, 300);
261
- return () => {
262
- clearTimeout(selectTimeoutRef.current);
263
- };
264
- }
265
- allowSelectRef.current = false;
266
- allowMouseUpRef.current = true;
267
- setInnerOffset(0);
268
- setFallback(false);
269
- setBlockSelection(false);
270
- }, [open]);
271
- (0, import_constants.useIsomorphicLayoutEffect)(() => {
272
- if (!open && state.current.isMouseOutside) state.current.isMouseOutside = false;
273
- }, [open]);
274
- (0, import_constants.useIsomorphicLayoutEffect)(() => {
275
- function onPointerDown(e) {
276
- const target = e.target;
277
- if (!(refs.floating.current?.contains(target) || upArrowRef.current?.contains(target) || downArrowRef.current?.contains(target))) {
278
- setOpen(false);
279
- setControlledScrolling(false);
280
- }
281
- }
282
- if (open) {
283
- document.addEventListener("pointerdown", onPointerDown);
284
- return () => {
285
- document.removeEventListener("pointerdown", onPointerDown);
286
- };
287
- }
288
- }, [open, refs, setOpen]);
289
- React.useEffect(() => {
290
- if (!open) return;
291
- const scrollActiveIntoView = index => {
292
- if (controlledScrolling && index != null) listItemsRef.current[index]?.scrollIntoView({
293
- block: "nearest"
294
- });
295
- setScrollTop(refs.floating.current?.scrollTop ?? 0);
296
- };
297
- scrollActiveIntoView(activeIndexRef.current);
298
- return selectItemParentContext.activeIndexSubscribe(scrollActiveIntoView);
299
- }, [open, refs, controlledScrolling, selectItemParentContext.activeIndexSubscribe]);
300
- React.useEffect(() => {
301
- if (open && fallback) {
302
- if (selectedIndex != null) listItemsRef.current[selectedIndex]?.scrollIntoView({
303
- block: "nearest"
304
- });
305
- }
306
- }, [open, fallback, selectedIndex]);
307
- (0, import_constants.useIsomorphicLayoutEffect)(() => {
308
- if (refs.floating.current && fallback) refs.floating.current.style.maxHeight = "";
309
- }, [refs, fallback]);
310
- const floatingContext = React.useMemo(() => ({
311
- refs,
312
- dataRef
313
- }), [refs]);
314
- return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_context.SelectProvider, {
315
- scope,
316
- ...selectContext,
317
- setScrollTop,
318
- setInnerOffset,
319
- fallback,
320
- floatingContext,
321
- canScrollDown: !!showDownArrow,
322
- canScrollUp: !!showUpArrow,
323
- controlledScrolling,
324
- blockSelection,
325
- upArrowRef,
326
- downArrowRef,
327
- update,
328
- children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_context.SelectItemParentProvider, {
329
- scope,
330
- ...selectItemParentContext,
331
- allowMouseUpRef,
332
- allowSelectRef,
333
- dataRef,
334
- interactions: interactionsContext,
335
- listRef: listItemsRef,
336
- selectTimeoutRef,
337
- children
338
- })
339
- });
340
- };
38
+ const SelectInlineImpl = (props) => {
39
+ const { scope, children, open = false, listContentRef } = props;
40
+ const selectContext = (0, import_context.useSelectContext)(scope);
41
+ const selectItemParentContext = (0, import_context.useSelectItemParentContext)(scope);
42
+ const { setActiveIndex, selectedIndex, activeIndexRef } = selectContext;
43
+ const { requestOpenChange, registry } = selectItemParentContext;
44
+ const touch = (0, import_core.useIsTouchDevice)();
45
+ const listItemsRef = selectItemParentContext.listRef;
46
+ const overflowRef = React.useRef(null);
47
+ const upArrowRef = React.useRef(null);
48
+ const downArrowRef = React.useRef(null);
49
+ const allowSelectRef = React.useRef(false);
50
+ const allowMouseUpRef = React.useRef(true);
51
+ const selectTimeoutRef = React.useRef(null);
52
+ const latestKeyboardEventRef = React.useRef(void 0);
53
+ const state = React.useRef({
54
+ isMouseOutside: false,
55
+ isTyping: 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
+ React.useEffect(() => {
62
+ if (!open) {
63
+ setCanScrollUp(false);
64
+ setCanScrollDown(false);
65
+ setFallback(false);
66
+ setControlledScrolling(false);
67
+ }
68
+ }, [open]);
69
+ (0, import_constants.useIsomorphicLayoutEffect)(() => {
70
+ if (!open) return;
71
+ const mouseUp = (e) => {
72
+ if (state.current.isMouseOutside) requestOpenChange(false, (0, import_core.createChangeEventDetails)("outside-press", e));
73
+ };
74
+ document.addEventListener("mouseup", mouseUp);
75
+ return () => {
76
+ document.removeEventListener("mouseup", mouseUp);
77
+ };
78
+ }, [open]);
79
+ const { x, y, strategy, refs, update, placement: computedPlacement } = (0, import_floating.useFloatingRaw)({
80
+ open,
81
+ placement: "bottom-start",
82
+ whileElementsMounted: import_floating.autoUpdate,
83
+ middleware: [
84
+ (0, import_floating.size)({ apply({ rects, elements }) {
85
+ elements.floating.style.minWidth = `${rects.reference.width + 8}px`;
86
+ } }),
87
+ (0, import_floating.inner)({
88
+ listRef: listItemsRef,
89
+ overflowRef,
90
+ index: selectedIndex,
91
+ offset: innerOffset,
92
+ onFallbackChange: setFallback,
93
+ padding: 10,
94
+ minItemsVisible: touch ? 10 : 4,
95
+ referenceOverflowThreshold: 20
96
+ }),
97
+ (0, import_floating.offset)({ crossAxis: -4 })
98
+ ]
99
+ });
100
+ const [canScrollUp, setCanScrollUp] = React.useState(false);
101
+ const [canScrollDown, setCanScrollDown] = React.useState(false);
102
+ const updateScrollArrows = React.useCallback(() => {
103
+ const el = refs.floating.current;
104
+ if (!el) return;
105
+ setCanScrollUp(el.scrollTop > import_constants2.SCROLL_ARROW_THRESHOLD);
106
+ setCanScrollDown(el.scrollTop < el.scrollHeight - el.clientHeight - import_constants2.SCROLL_ARROW_THRESHOLD);
107
+ }, [refs]);
108
+ const showUpArrow = open && canScrollUp;
109
+ const showDownArrow = open && canScrollDown;
110
+ const isScrollable = showDownArrow || showUpArrow;
111
+ (0, import_constants.useIsomorphicLayoutEffect)(() => {
112
+ if (open) update();
113
+ }, [update, open]);
114
+ const onMatch = (0, import_core.useEvent)((index) => {
115
+ if (!open) return;
116
+ setActiveIndex(index, {
117
+ reason: "keyboard",
118
+ event: latestKeyboardEventRef.current,
119
+ trigger: void 0,
120
+ index
121
+ });
122
+ });
123
+ const dataRef = React.useRef({});
124
+ dataRef.current.placement = computedPlacement;
125
+ const onOpenChange = (0, import_core.useEvent)((nextOpen, event, reason) => {
126
+ requestOpenChange(nextOpen, (0, import_core.createChangeEventDetails)(reason === "list-navigation" ? "keyboard" : "trigger-press", event, refs.reference.current));
127
+ });
128
+ const referenceElement = refs.reference.current || null;
129
+ const floatingElement = refs.floating.current || null;
130
+ const interactionContext = React.useMemo(() => ({
131
+ open,
132
+ onOpenChange,
133
+ refs: {
134
+ reference: refs.reference,
135
+ floating: refs.floating,
136
+ domReference: refs.reference
137
+ },
138
+ elements: {
139
+ reference: referenceElement,
140
+ floating: floatingElement,
141
+ domReference: referenceElement
142
+ },
143
+ dataRef
144
+ }), [
145
+ open,
146
+ onOpenChange,
147
+ refs,
148
+ referenceElement,
149
+ floatingElement
150
+ ]);
151
+ const interactionsProps = [
152
+ (0, import_floating.useClick)(interactionContext, {
153
+ event: "mousedown",
154
+ keyboardHandlers: false
155
+ }),
156
+ (0, import_floating.useRole)(interactionContext, { role: "listbox" }),
157
+ (0, import_floating.useInnerOffset)(interactionContext, {
158
+ enabled: !fallback && isScrollable,
159
+ onChange: setInnerOffset,
160
+ overflowRef,
161
+ scrollRef: refs.floating
162
+ }),
163
+ (0, import_floating.useListNavigation)(interactionContext, {
164
+ listRef: listItemsRef,
165
+ activeIndex: null,
166
+ selectedIndex,
167
+ onNavigate: (index) => {
168
+ if (index !== null) setActiveIndex(index, {
169
+ reason: "list-navigation",
170
+ event: latestKeyboardEventRef.current,
171
+ trigger: void 0,
172
+ index
173
+ });
174
+ },
175
+ disabledIndices: registry.getDisabledIndices(),
176
+ scrollItemIntoView: false,
177
+ focusItemOnHover: false
178
+ }),
179
+ (0, import_floating.useTypeahead)(interactionContext, {
180
+ listRef: listContentRef,
181
+ onMatch,
182
+ selectedIndex,
183
+ activeIndex: null,
184
+ onTypingChange: (e) => {
185
+ state.current.isTyping = e;
186
+ }
187
+ })
188
+ ];
189
+ const interactions = (0, import_floating.useInteractions)(React.useMemo(() => {
190
+ return interactionsProps;
191
+ }, interactionsProps));
192
+ const interactionsContext = React.useMemo(() => {
193
+ return {
194
+ getReferenceProps(props2 = {}) {
195
+ return interactions.getReferenceProps({
196
+ ...props2,
197
+ onKeyDown: (0, import_helpers.composeEventHandlers)(props2.onKeyDown, (event) => {
198
+ latestKeyboardEventRef.current = event.nativeEvent || event;
199
+ if (event.key === "Enter" || event.code === "Space" || event.key === " " && !state.current.isTyping) {
200
+ event.preventDefault();
201
+ requestOpenChange(true, (0, import_core.createChangeEventDetails)("keyboard", event.nativeEvent || event, refs.reference.current));
202
+ }
203
+ })
204
+ });
205
+ },
206
+ getFloatingProps(props2) {
207
+ return interactions.getFloatingProps({
208
+ ref: refs.floating,
209
+ ...props2,
210
+ onPointerEnter() {
211
+ setControlledScrolling(false);
212
+ state.current.isMouseOutside = false;
213
+ },
214
+ onPointerLeave() {
215
+ state.current.isMouseOutside = true;
216
+ },
217
+ onPointerMove() {
218
+ state.current.isMouseOutside = false;
219
+ setControlledScrolling(false);
220
+ },
221
+ onKeyDown(event) {
222
+ latestKeyboardEventRef.current = event.nativeEvent || event;
223
+ setControlledScrolling(true);
224
+ },
225
+ onContextMenu(e) {
226
+ e.preventDefault();
227
+ },
228
+ onScroll: updateScrollArrows
229
+ });
230
+ }
231
+ };
232
+ }, [
233
+ refs,
234
+ interactions,
235
+ requestOpenChange,
236
+ updateScrollArrows
237
+ ]);
238
+ const floatingPosition = React.useMemo(() => ({
239
+ position: strategy,
240
+ top: y ?? "",
241
+ left: x ?? ""
242
+ }), [
243
+ strategy,
244
+ x,
245
+ y
246
+ ]);
247
+ (0, import_constants.useIsomorphicLayoutEffect)(() => {
248
+ if (open) {
249
+ allowMouseUpRef.current = false;
250
+ selectTimeoutRef.current = setTimeout(() => {
251
+ allowSelectRef.current = true;
252
+ allowMouseUpRef.current = true;
253
+ }, 300);
254
+ return () => {
255
+ clearTimeout(selectTimeoutRef.current);
256
+ };
257
+ }
258
+ allowSelectRef.current = false;
259
+ allowMouseUpRef.current = true;
260
+ setInnerOffset(0);
261
+ setFallback(false);
262
+ setBlockSelection(false);
263
+ }, [open]);
264
+ (0, import_constants.useIsomorphicLayoutEffect)(() => {
265
+ if (!open && state.current.isMouseOutside) state.current.isMouseOutside = false;
266
+ }, [open]);
267
+ React.useEffect(() => {
268
+ if (!open) return;
269
+ const scrollActiveIntoView = (index) => {
270
+ if (controlledScrolling && index != null) listItemsRef.current[index]?.scrollIntoView({ block: "nearest" });
271
+ updateScrollArrows();
272
+ };
273
+ scrollActiveIntoView(activeIndexRef.current);
274
+ return selectItemParentContext.activeIndexSubscribe(scrollActiveIntoView);
275
+ }, [
276
+ open,
277
+ controlledScrolling,
278
+ selectItemParentContext.activeIndexSubscribe,
279
+ updateScrollArrows
280
+ ]);
281
+ React.useEffect(() => {
282
+ if (open && fallback) {
283
+ if (selectedIndex != null) listItemsRef.current[selectedIndex]?.scrollIntoView({ block: "nearest" });
284
+ }
285
+ }, [
286
+ open,
287
+ fallback,
288
+ selectedIndex
289
+ ]);
290
+ (0, import_constants.useIsomorphicLayoutEffect)(() => {
291
+ if (refs.floating.current && fallback) refs.floating.current.style.maxHeight = "";
292
+ }, [refs, fallback]);
293
+ const floatingContext = React.useMemo(() => ({
294
+ refs,
295
+ dataRef
296
+ }), [refs]);
297
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_context.SelectProvider, {
298
+ scope,
299
+ ...selectContext,
300
+ updateScrollArrows,
301
+ setInnerOffset,
302
+ fallback,
303
+ floatingContext,
304
+ interactions: interactionsContext,
305
+ floatingPosition,
306
+ canScrollDown: !!showDownArrow,
307
+ canScrollUp: !!showUpArrow,
308
+ controlledScrolling,
309
+ blockSelection,
310
+ upArrowRef,
311
+ downArrowRef,
312
+ update,
313
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_context.SelectItemParentProvider, {
314
+ scope,
315
+ ...selectItemParentContext,
316
+ allowMouseUpRef,
317
+ allowSelectRef,
318
+ dataRef,
319
+ getItemProps: interactions.getItemProps,
320
+ listRef: listItemsRef,
321
+ selectTimeoutRef,
322
+ children
323
+ })
324
+ });
325
+ };