@tamagui/select 3.0.0-beta.924.1 → 3.0.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 (106) hide show
  1. package/dist/cjs/Select.cjs +23 -25
  2. package/dist/cjs/Select.native.cjs +27 -26
  3. package/dist/cjs/Select.native.js +27 -26
  4. package/dist/cjs/Select.native.js.map +1 -1
  5. package/dist/cjs/SelectImpl.cjs +67 -63
  6. package/dist/cjs/SelectItem.cjs +49 -60
  7. package/dist/cjs/SelectItem.native.cjs +51 -79
  8. package/dist/cjs/SelectItem.native.js +51 -79
  9. package/dist/cjs/SelectItem.native.js.map +1 -1
  10. package/dist/cjs/SelectScrollButton.cjs +9 -25
  11. package/dist/cjs/SelectTrigger.cjs +22 -5
  12. package/dist/cjs/SelectTrigger.native.cjs +15 -5
  13. package/dist/cjs/SelectTrigger.native.js +15 -5
  14. package/dist/cjs/SelectTrigger.native.js.map +1 -1
  15. package/dist/cjs/SelectViewport.cjs +29 -32
  16. package/dist/cjs/SelectViewport.native.cjs +2 -2
  17. package/dist/cjs/SelectViewport.native.js +2 -2
  18. package/dist/cjs/SelectViewport.native.js.map +1 -1
  19. package/dist/cjs/selectionController.cjs +15 -5
  20. package/dist/cjs/selectionController.native.cjs +20 -15
  21. package/dist/cjs/selectionController.native.js +20 -15
  22. package/dist/cjs/selectionController.native.js.map +1 -1
  23. package/dist/esm/Select.mjs +27 -28
  24. package/dist/esm/Select.mjs.map +1 -1
  25. package/dist/esm/Select.native.js +31 -29
  26. package/dist/esm/Select.native.js.map +1 -1
  27. package/dist/esm/SelectImpl.mjs +68 -64
  28. package/dist/esm/SelectImpl.mjs.map +1 -1
  29. package/dist/esm/SelectItem.mjs +50 -61
  30. package/dist/esm/SelectItem.mjs.map +1 -1
  31. package/dist/esm/SelectItem.native.js +52 -80
  32. package/dist/esm/SelectItem.native.js.map +1 -1
  33. package/dist/esm/SelectScrollButton.mjs +10 -26
  34. package/dist/esm/SelectScrollButton.mjs.map +1 -1
  35. package/dist/esm/SelectTrigger.mjs +16 -5
  36. package/dist/esm/SelectTrigger.mjs.map +1 -1
  37. package/dist/esm/SelectTrigger.native.js +15 -4
  38. package/dist/esm/SelectTrigger.native.js.map +1 -1
  39. package/dist/esm/SelectViewport.mjs +30 -33
  40. package/dist/esm/SelectViewport.mjs.map +1 -1
  41. package/dist/esm/SelectViewport.native.js +3 -3
  42. package/dist/esm/SelectViewport.native.js.map +1 -1
  43. package/dist/esm/selectionController.mjs +15 -5
  44. package/dist/esm/selectionController.mjs.map +1 -1
  45. package/dist/esm/selectionController.native.js +20 -15
  46. package/dist/esm/selectionController.native.js.map +1 -1
  47. package/dist/jsx/Select.mjs +27 -28
  48. package/dist/jsx/Select.mjs.map +1 -1
  49. package/dist/jsx/Select.native.cjs +27 -26
  50. package/dist/jsx/Select.native.js +27 -26
  51. package/dist/jsx/Select.native.js.map +1 -1
  52. package/dist/jsx/SelectImpl.mjs +68 -64
  53. package/dist/jsx/SelectImpl.mjs.map +1 -1
  54. package/dist/jsx/SelectItem.mjs +50 -61
  55. package/dist/jsx/SelectItem.mjs.map +1 -1
  56. package/dist/jsx/SelectItem.native.cjs +51 -79
  57. package/dist/jsx/SelectItem.native.js +51 -79
  58. package/dist/jsx/SelectItem.native.js.map +1 -1
  59. package/dist/jsx/SelectScrollButton.mjs +10 -26
  60. package/dist/jsx/SelectScrollButton.mjs.map +1 -1
  61. package/dist/jsx/SelectTrigger.mjs +16 -5
  62. package/dist/jsx/SelectTrigger.mjs.map +1 -1
  63. package/dist/jsx/SelectTrigger.native.cjs +15 -5
  64. package/dist/jsx/SelectTrigger.native.js +15 -5
  65. package/dist/jsx/SelectTrigger.native.js.map +1 -1
  66. package/dist/jsx/SelectViewport.mjs +30 -33
  67. package/dist/jsx/SelectViewport.mjs.map +1 -1
  68. package/dist/jsx/SelectViewport.native.cjs +2 -2
  69. package/dist/jsx/SelectViewport.native.js +2 -2
  70. package/dist/jsx/SelectViewport.native.js.map +1 -1
  71. package/dist/jsx/selectionController.mjs +15 -5
  72. package/dist/jsx/selectionController.mjs.map +1 -1
  73. package/dist/jsx/selectionController.native.cjs +20 -15
  74. package/dist/jsx/selectionController.native.js +20 -15
  75. package/dist/jsx/selectionController.native.js.map +1 -1
  76. package/package.json +30 -29
  77. package/src/Select.tsx +41 -41
  78. package/src/SelectImpl.tsx +107 -95
  79. package/src/SelectItem.tsx +66 -91
  80. package/src/SelectScrollButton.tsx +14 -32
  81. package/src/SelectTrigger.tsx +19 -2
  82. package/src/SelectViewport.native.tsx +4 -4
  83. package/src/SelectViewport.tsx +34 -30
  84. package/src/selectionController.ts +20 -5
  85. package/src/types.tsx +26 -22
  86. package/types/Select.d.ts +42 -81
  87. package/types/Select.d.ts.map +1 -1
  88. package/types/SelectImpl.d.ts.map +1 -1
  89. package/types/SelectItem.d.ts +3 -5
  90. package/types/SelectItem.d.ts.map +1 -1
  91. package/types/SelectItemText.d.ts +3 -5
  92. package/types/SelectItemText.d.ts.map +1 -1
  93. package/types/SelectScrollButton.d.ts +5 -9
  94. package/types/SelectScrollButton.d.ts.map +1 -1
  95. package/types/SelectScrollButton.native.d.ts +5 -9
  96. package/types/SelectScrollButton.native.d.ts.map +1 -1
  97. package/types/SelectTrigger.d.ts +3 -5
  98. package/types/SelectTrigger.d.ts.map +1 -1
  99. package/types/SelectViewport.d.ts +4 -9
  100. package/types/SelectViewport.d.ts.map +1 -1
  101. package/types/SelectViewport.native.d.ts +4 -9
  102. package/types/SelectViewport.native.d.ts.map +1 -1
  103. package/types/selectionController.d.ts +2 -0
  104. package/types/selectionController.d.ts.map +1 -1
  105. package/types/types.d.ts +30 -22
  106. package/types/types.d.ts.map +1 -1
@@ -1,9 +1,8 @@
1
1
  import { View, createStyledHOC, styled } from "@tamagui/core";
2
- import { autoUpdate, offset, useFloatingRaw } from "@tamagui/floating";
2
+ import { autoUpdate, useFloatingRaw } from "@tamagui/floating";
3
3
  import { useComposedRefs } from "@tamagui/compose-refs";
4
4
  import { composeEventHandlers } from "@tamagui/helpers";
5
5
  import * as React from "react";
6
- import { flushSync } from "react-dom";
7
6
  import { useSelectContext } from "./context.mjs";
8
7
  import { jsx } from "react/jsx-runtime";
9
8
 
@@ -31,53 +30,39 @@ SelectScrollDownButton.displayName = SCROLL_DOWN_BUTTON_NAME;
31
30
  const SelectScrollButtonImpl = React.memo(createStyledHOC(SelectScrollButtonFrame, (props, forwardedRef) => {
32
31
  const { scope, dir, partClassName, ...scrollIndicatorProps } = props;
33
32
  const { className, onPointerEnter, onPointerLeave, ...frameProps } = scrollIndicatorProps;
34
- const { open, fallback, setScrollTop, setInnerOffset, ...context } = useSelectContext(scope);
33
+ const { open, ...context } = useSelectContext(scope);
35
34
  const floatingRef = context.floatingContext?.refs.floating;
36
- const statusRef = React.useRef("idle");
37
35
  const isVisible = context[dir === "down" ? "canScrollDown" : "canScrollUp"];
38
36
  const frameRef = React.useRef(null);
37
+ const arrowRef = dir === "up" ? context.upArrowRef : context.downArrowRef;
39
38
  const { x, y, refs, strategy } = useFloatingRaw({
40
39
  open: open && isVisible,
41
40
  strategy: "fixed",
42
41
  elements: { reference: floatingRef?.current },
43
42
  placement: dir === "up" ? "top" : "bottom",
44
- middleware: [offset(({ rects }) => -rects.floating.height)],
45
- whileElementsMounted: (...args) => autoUpdate(...args, { animationFrame: true })
43
+ whileElementsMounted: autoUpdate
46
44
  });
47
45
  const setFloatingRef = React.useCallback((node) => {
48
46
  refs.setFloating(node);
49
- }, [refs.setFloating]);
47
+ if (arrowRef) arrowRef.current = node;
48
+ }, [refs.setFloating, arrowRef]);
50
49
  const composedRef = useComposedRefs(forwardedRef, setFloatingRef);
51
50
  React.useEffect(() => {
52
51
  return () => cancelAnimationFrame(frameRef.current);
53
- }, []);
54
- if (!isVisible) {
55
- return null;
56
- }
57
- const onScroll = (amount) => {
58
- const floating = floatingRef;
59
- if (!floating) return;
60
- if (fallback) {
61
- if (floating.current) {
62
- floating.current.scrollTop -= amount;
63
- flushSync(() => setScrollTop(floating.current?.scrollTop ?? 0));
64
- }
65
- } else {
66
- flushSync(() => setInnerOffset((value) => value - amount));
67
- }
68
- };
52
+ }, [isVisible]);
69
53
  return /* @__PURE__ */ jsx(SelectScrollButtonFrame, {
70
54
  ref: composedRef,
71
55
  className: `${partClassName} ${className || ""}`.trim(),
72
56
  "aria-hidden": true,
73
57
  ...frameProps,
58
+ visibility: isVisible ? "visible" : "hidden",
59
+ pointerEvents: isVisible ? "auto" : "none",
74
60
  zIndex: 1e3,
75
61
  position: strategy,
76
62
  left: x || 0,
77
63
  top: y || 0,
78
64
  width: `calc(${(floatingRef?.current?.offsetWidth ?? 0) - 2}px)`,
79
65
  onPointerEnter: composeEventHandlers(onPointerEnter, () => {
80
- statusRef.current = "active";
81
66
  let prevNow = Date.now();
82
67
  function frame() {
83
68
  const element = floatingRef?.current;
@@ -88,7 +73,7 @@ const SelectScrollButtonImpl = React.memo(createStyledHOC(SelectScrollButtonFram
88
73
  const pixelsToScroll = msElapsed / 2;
89
74
  const remainingPixels = dir === "up" ? element.scrollTop : element.scrollHeight - element.clientHeight - element.scrollTop;
90
75
  const scrollRemaining = dir === "up" ? element.scrollTop - pixelsToScroll > 0 : element.scrollTop + pixelsToScroll < element.scrollHeight - element.clientHeight;
91
- onScroll(dir === "up" ? Math.min(pixelsToScroll, remainingPixels) : Math.max(-pixelsToScroll, -remainingPixels));
76
+ element.scrollTop += dir === "up" ? -Math.min(pixelsToScroll, remainingPixels) : Math.min(pixelsToScroll, remainingPixels);
92
77
  if (scrollRemaining) {
93
78
  frameRef.current = requestAnimationFrame(frame);
94
79
  }
@@ -98,7 +83,6 @@ const SelectScrollButtonImpl = React.memo(createStyledHOC(SelectScrollButtonFram
98
83
  frameRef.current = requestAnimationFrame(frame);
99
84
  }),
100
85
  onPointerLeave: composeEventHandlers(onPointerLeave, () => {
101
- statusRef.current = "idle";
102
86
  cancelAnimationFrame(frameRef.current);
103
87
  })
104
88
  });
@@ -1 +1 @@
1
- {"version":3,"file":"SelectScrollButton.js","names":["useFloating"],"sources":["esm/SelectScrollButton.js"],"sourcesContent":["import { createStyledHOC, styled, View } from \"@tamagui/core\";\nimport { autoUpdate, offset, useFloatingRaw as useFloating } from \"@tamagui/floating\";\nimport { useComposedRefs } from \"@tamagui/compose-refs\";\nimport { composeEventHandlers } from \"@tamagui/helpers\";\nimport * as React from \"react\";\nimport { flushSync } from \"react-dom\";\nimport { useSelectContext } from \"./context\";\nimport { jsx } from \"react/jsx-runtime\";\nconst SCROLL_UP_BUTTON_NAME = \"SelectScrollUpButton\";\nconst SelectScrollButtonFrame = styled(View, {\n displayName: \"SelectScrollButton\"\n});\nconst SelectScrollUpButton = createStyledHOC(\n SelectScrollButtonFrame,\n (props, forwardedRef) => {\n return /* @__PURE__ */ jsx(\n SelectScrollButtonImpl,\n {\n partClassName: `is_${SCROLL_UP_BUTTON_NAME}`,\n ...props,\n dir: \"up\",\n ref: forwardedRef\n }\n );\n }\n);\nSelectScrollUpButton.displayName = SCROLL_UP_BUTTON_NAME;\nconst SCROLL_DOWN_BUTTON_NAME = \"SelectScrollDownButton\";\nconst SelectScrollDownButton = createStyledHOC(\n SelectScrollButtonFrame,\n (props, forwardedRef) => {\n return /* @__PURE__ */ jsx(\n SelectScrollButtonImpl,\n {\n partClassName: `is_${SCROLL_DOWN_BUTTON_NAME}`,\n ...props,\n dir: \"down\",\n ref: forwardedRef\n }\n );\n }\n);\nSelectScrollDownButton.displayName = SCROLL_DOWN_BUTTON_NAME;\nconst SelectScrollButtonImpl = React.memo(\n createStyledHOC(\n SelectScrollButtonFrame,\n (props, forwardedRef) => {\n const { scope, dir, partClassName, ...scrollIndicatorProps } = props;\n const { className, onPointerEnter, onPointerLeave, ...frameProps } = scrollIndicatorProps;\n const { open, fallback, setScrollTop, setInnerOffset, ...context } = useSelectContext(scope);\n const floatingRef = context.floatingContext?.refs.floating;\n const statusRef = React.useRef(\"idle\");\n const isVisible = context[dir === \"down\" ? \"canScrollDown\" : \"canScrollUp\"];\n const frameRef = React.useRef(null);\n const { x, y, refs, strategy } = useFloating({\n open: open && isVisible,\n strategy: \"fixed\",\n elements: {\n reference: floatingRef?.current\n },\n placement: dir === \"up\" ? \"top\" : \"bottom\",\n middleware: [offset(({ rects }) => -rects.floating.height)],\n whileElementsMounted: (...args) => autoUpdate(...args, { animationFrame: true })\n });\n const setFloatingRef = React.useCallback(\n (node) => {\n refs.setFloating(node);\n },\n [refs.setFloating]\n );\n const composedRef = useComposedRefs(forwardedRef, setFloatingRef);\n React.useEffect(() => {\n return () => cancelAnimationFrame(frameRef.current);\n }, []);\n if (!isVisible) {\n return null;\n }\n const onScroll = (amount) => {\n const floating = floatingRef;\n if (!floating) return;\n if (fallback) {\n if (floating.current) {\n floating.current.scrollTop -= amount;\n flushSync(() => setScrollTop(floating.current?.scrollTop ?? 0));\n }\n } else {\n flushSync(() => setInnerOffset((value) => value - amount));\n }\n };\n return /* @__PURE__ */ jsx(\n SelectScrollButtonFrame,\n {\n ref: composedRef,\n className: `${partClassName} ${className || \"\"}`.trim(),\n \"aria-hidden\": true,\n ...frameProps,\n zIndex: 1e3,\n position: strategy,\n left: x || 0,\n top: y || 0,\n width: `calc(${(floatingRef?.current?.offsetWidth ?? 0) - 2}px)`,\n onPointerEnter: composeEventHandlers(onPointerEnter, () => {\n statusRef.current = \"active\";\n let prevNow = Date.now();\n function frame() {\n const element = floatingRef?.current;\n if (element) {\n const currentNow = Date.now();\n const msElapsed = currentNow - prevNow;\n prevNow = currentNow;\n const pixelsToScroll = msElapsed / 2;\n const remainingPixels = dir === \"up\" ? element.scrollTop : element.scrollHeight - element.clientHeight - element.scrollTop;\n const scrollRemaining = dir === \"up\" ? element.scrollTop - pixelsToScroll > 0 : element.scrollTop + pixelsToScroll < element.scrollHeight - element.clientHeight;\n onScroll(\n dir === \"up\" ? Math.min(pixelsToScroll, remainingPixels) : Math.max(-pixelsToScroll, -remainingPixels)\n );\n if (scrollRemaining) {\n frameRef.current = requestAnimationFrame(frame);\n }\n }\n }\n cancelAnimationFrame(frameRef.current);\n frameRef.current = requestAnimationFrame(frame);\n }),\n onPointerLeave: composeEventHandlers(onPointerLeave, () => {\n statusRef.current = \"idle\";\n cancelAnimationFrame(frameRef.current);\n })\n }\n );\n }\n )\n);\nexport {\n SelectScrollButtonFrame,\n SelectScrollDownButton,\n SelectScrollUpButton\n};\n//# sourceMappingURL=SelectScrollButton.js.map\n"],"mappings":"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"}
1
+ {"version":3,"file":"SelectScrollButton.js","names":["useFloating"],"sources":["esm/SelectScrollButton.js"],"sourcesContent":["import { createStyledHOC, styled, View } from \"@tamagui/core\";\nimport { autoUpdate, useFloatingRaw as useFloating } from \"@tamagui/floating\";\nimport { useComposedRefs } from \"@tamagui/compose-refs\";\nimport { composeEventHandlers } from \"@tamagui/helpers\";\nimport * as React from \"react\";\nimport { useSelectContext } from \"./context\";\nimport { jsx } from \"react/jsx-runtime\";\nconst SCROLL_UP_BUTTON_NAME = \"SelectScrollUpButton\";\nconst SelectScrollButtonFrame = styled(View, {\n displayName: \"SelectScrollButton\"\n});\nconst SelectScrollUpButton = createStyledHOC(\n SelectScrollButtonFrame,\n (props, forwardedRef) => {\n return /* @__PURE__ */ jsx(\n SelectScrollButtonImpl,\n {\n partClassName: `is_${SCROLL_UP_BUTTON_NAME}`,\n ...props,\n dir: \"up\",\n ref: forwardedRef\n }\n );\n }\n);\nSelectScrollUpButton.displayName = SCROLL_UP_BUTTON_NAME;\nconst SCROLL_DOWN_BUTTON_NAME = \"SelectScrollDownButton\";\nconst SelectScrollDownButton = createStyledHOC(\n SelectScrollButtonFrame,\n (props, forwardedRef) => {\n return /* @__PURE__ */ jsx(\n SelectScrollButtonImpl,\n {\n partClassName: `is_${SCROLL_DOWN_BUTTON_NAME}`,\n ...props,\n dir: \"down\",\n ref: forwardedRef\n }\n );\n }\n);\nSelectScrollDownButton.displayName = SCROLL_DOWN_BUTTON_NAME;\nconst SelectScrollButtonImpl = React.memo(\n createStyledHOC(\n SelectScrollButtonFrame,\n (props, forwardedRef) => {\n const { scope, dir, partClassName, ...scrollIndicatorProps } = props;\n const { className, onPointerEnter, onPointerLeave, ...frameProps } = scrollIndicatorProps;\n const { open, ...context } = useSelectContext(scope);\n const floatingRef = context.floatingContext?.refs.floating;\n const isVisible = context[dir === \"down\" ? \"canScrollDown\" : \"canScrollUp\"];\n const frameRef = React.useRef(null);\n const arrowRef = dir === \"up\" ? context.upArrowRef : context.downArrowRef;\n const { x, y, refs, strategy } = useFloating({\n open: open && isVisible,\n strategy: \"fixed\",\n elements: {\n reference: floatingRef?.current\n },\n placement: dir === \"up\" ? \"top\" : \"bottom\",\n whileElementsMounted: autoUpdate\n });\n const setFloatingRef = React.useCallback(\n (node) => {\n refs.setFloating(node);\n if (arrowRef) arrowRef.current = node;\n },\n [refs.setFloating, arrowRef]\n );\n const composedRef = useComposedRefs(forwardedRef, setFloatingRef);\n React.useEffect(() => {\n return () => cancelAnimationFrame(frameRef.current);\n }, [isVisible]);\n return /* @__PURE__ */ jsx(\n SelectScrollButtonFrame,\n {\n ref: composedRef,\n className: `${partClassName} ${className || \"\"}`.trim(),\n \"aria-hidden\": true,\n ...frameProps,\n visibility: isVisible ? \"visible\" : \"hidden\",\n pointerEvents: isVisible ? \"auto\" : \"none\",\n zIndex: 1e3,\n position: strategy,\n left: x || 0,\n top: y || 0,\n width: `calc(${(floatingRef?.current?.offsetWidth ?? 0) - 2}px)`,\n onPointerEnter: composeEventHandlers(onPointerEnter, () => {\n let prevNow = Date.now();\n function frame() {\n const element = floatingRef?.current;\n if (element) {\n const currentNow = Date.now();\n const msElapsed = currentNow - prevNow;\n prevNow = currentNow;\n const pixelsToScroll = msElapsed / 2;\n const remainingPixels = dir === \"up\" ? element.scrollTop : element.scrollHeight - element.clientHeight - element.scrollTop;\n const scrollRemaining = dir === \"up\" ? element.scrollTop - pixelsToScroll > 0 : element.scrollTop + pixelsToScroll < element.scrollHeight - element.clientHeight;\n element.scrollTop += dir === \"up\" ? -Math.min(pixelsToScroll, remainingPixels) : Math.min(pixelsToScroll, remainingPixels);\n if (scrollRemaining) {\n frameRef.current = requestAnimationFrame(frame);\n }\n }\n }\n cancelAnimationFrame(frameRef.current);\n frameRef.current = requestAnimationFrame(frame);\n }),\n onPointerLeave: composeEventHandlers(onPointerLeave, () => {\n cancelAnimationFrame(frameRef.current);\n })\n }\n );\n }\n )\n);\nexport {\n SelectScrollButtonFrame,\n SelectScrollDownButton,\n SelectScrollUpButton\n};\n//# sourceMappingURL=SelectScrollButton.js.map\n"],"mappings":";;;;;;;;;AAOA,MAAM,wBAAwB;AAC9B,MAAM,0BAA0B,OAAO,MAAM,EAC3C,aAAa,qBACf,CAAC;AACD,MAAM,uBAAuB,gBAC3B,0BACC,OAAO,iBAAiB;CACvB,OAAuB,oBACrB,wBACA;EACE,eAAe,MAAM;EACrB,GAAG;EACH,KAAK;EACL,KAAK;CACP,CACF;AACF,CACF;AACA,qBAAqB,cAAc;AACnC,MAAM,0BAA0B;AAChC,MAAM,yBAAyB,gBAC7B,0BACC,OAAO,iBAAiB;CACvB,OAAuB,oBACrB,wBACA;EACE,eAAe,MAAM;EACrB,GAAG;EACH,KAAK;EACL,KAAK;CACP,CACF;AACF,CACF;AACA,uBAAuB,cAAc;AACrC,MAAM,yBAAyB,MAAM,KACnC,gBACE,0BACC,OAAO,iBAAiB;CACvB,MAAM,EAAE,OAAO,KAAK,eAAe,GAAG,yBAAyB;CAC/D,MAAM,EAAE,WAAW,gBAAgB,gBAAgB,GAAG,eAAe;CACrE,MAAM,EAAE,MAAM,GAAG,YAAY,iBAAiB,KAAK;CACnD,MAAM,cAAc,QAAQ,iBAAiB,KAAK;CAClD,MAAM,YAAY,QAAQ,QAAQ,SAAS,kBAAkB;CAC7D,MAAM,WAAW,MAAM,OAAO,IAAI;CAClC,MAAM,WAAW,QAAQ,OAAO,QAAQ,aAAa,QAAQ;CAC7D,MAAM,EAAE,GAAG,GAAG,MAAM,aAAaA,eAAY;EAC3C,MAAM,QAAQ;EACd,UAAU;EACV,UAAU,EACR,WAAW,aAAa,QAC1B;EACA,WAAW,QAAQ,OAAO,QAAQ;EAClC,sBAAsB;CACxB,CAAC;CACD,MAAM,iBAAiB,MAAM,aAC1B,SAAS;EACR,KAAK,YAAY,IAAI;EACrB,IAAI,UAAU,SAAS,UAAU;CACnC,GACA,CAAC,KAAK,aAAa,QAAQ,CAC7B;CACA,MAAM,cAAc,gBAAgB,cAAc,cAAc;CAChE,MAAM,gBAAgB;EACpB,aAAa,qBAAqB,SAAS,OAAO;CACpD,GAAG,CAAC,SAAS,CAAC;CACd,OAAuB,oBACrB,yBACA;EACE,KAAK;EACL,WAAW,GAAG,cAAc,GAAG,aAAa,KAAK,KAAK;EACtD,eAAe;EACf,GAAG;EACH,YAAY,YAAY,YAAY;EACpC,eAAe,YAAY,SAAS;EACpC,QAAQ;EACR,UAAU;EACV,MAAM,KAAK;EACX,KAAK,KAAK;EACV,OAAO,SAAS,aAAa,SAAS,eAAe,KAAK,EAAE;EAC5D,gBAAgB,qBAAqB,sBAAsB;GACzD,IAAI,UAAU,KAAK,IAAI;GACvB,SAAS,QAAQ;IACf,MAAM,UAAU,aAAa;IAC7B,IAAI,SAAS;KACX,MAAM,aAAa,KAAK,IAAI;KAC5B,MAAM,YAAY,aAAa;KAC/B,UAAU;KACV,MAAM,iBAAiB,YAAY;KACnC,MAAM,kBAAkB,QAAQ,OAAO,QAAQ,YAAY,QAAQ,eAAe,QAAQ,eAAe,QAAQ;KACjH,MAAM,kBAAkB,QAAQ,OAAO,QAAQ,YAAY,iBAAiB,IAAI,QAAQ,YAAY,iBAAiB,QAAQ,eAAe,QAAQ;KACpJ,QAAQ,aAAa,QAAQ,OAAO,CAAC,KAAK,IAAI,gBAAgB,eAAe,IAAI,KAAK,IAAI,gBAAgB,eAAe;KACzH,IAAI,iBAAiB;MACnB,SAAS,UAAU,sBAAsB,KAAK;KAChD;IACF;GACF;GACA,qBAAqB,SAAS,OAAO;GACrC,SAAS,UAAU,sBAAsB,KAAK;EAChD,CAAC;EACD,gBAAgB,qBAAqB,sBAAsB;GACzD,qBAAqB,SAAS,OAAO;EACvC,CAAC;CACH,CACF;AACF,CACF,CACF"}
@@ -2,6 +2,7 @@ import { useComposedRefs } from "@tamagui/compose-refs";
2
2
  import { isWeb } from "@tamagui/constants";
3
3
  import { View, createChangeEventDetails, createStyledHOC, styled } from "@tamagui/core";
4
4
  import { composeEventHandlers } from "@tamagui/helpers";
5
+ import * as React from "react";
5
6
  import { useSelectContext, useSelectItemParentContext } from "./context.mjs";
6
7
  import { jsx } from "react/jsx-runtime";
7
8
 
@@ -16,19 +17,29 @@ const SelectTrigger = createStyledHOC(SelectTriggerFrame, function SelectTrigger
16
17
  const context = useSelectContext(scope);
17
18
  const itemParentContext = useSelectItemParentContext(scope);
18
19
  const composedRefs = useComposedRefs(forwardedRef, context.floatingContext?.refs.setReference);
20
+ const pressIsTouch = React.useRef(false);
19
21
  if (itemParentContext.shouldRenderWebNative) return null;
20
22
  const toggleOpen = (event, reason = "trigger-press") => {
21
23
  if (!disabled) itemParentContext.requestOpenChange(!context.open, createChangeEventDetails(reason, event?.nativeEvent || event, event?.currentTarget));
22
24
  };
23
- const interactionProps = itemParentContext.interactions ? itemParentContext.interactions.getReferenceProps({
25
+ const interactionProps = context.interactions ? context.interactions.getReferenceProps({
24
26
  ...triggerProps,
25
27
  onMouseDown: composeEventHandlers(triggerProps.onMouseDown, () => context.floatingContext?.update?.())
26
28
  }) : {
27
29
  ...triggerProps,
28
- ...isWeb ? { onMouseDown: composeEventHandlers(triggerProps.onMouseDown, (event) => {
29
- event.preventDefault();
30
- toggleOpen(event);
31
- }) } : { onPress: composeEventHandlers(triggerProps.onPress, toggleOpen) },
30
+ ...isWeb ? {
31
+ onMouseDown: composeEventHandlers(triggerProps.onMouseDown, (event) => {
32
+ pressIsTouch.current = event.type === "touchstart";
33
+ if (pressIsTouch.current) return;
34
+ event.preventDefault();
35
+ toggleOpen(event);
36
+ }),
37
+ onPress: composeEventHandlers(triggerProps.onPress, (event) => {
38
+ if (!pressIsTouch.current) return;
39
+ pressIsTouch.current = false;
40
+ toggleOpen(event);
41
+ })
42
+ } : { onPress: composeEventHandlers(triggerProps.onPress, toggleOpen) },
32
43
  onKeyDown: composeEventHandlers(triggerProps.onKeyDown, (event) => {
33
44
  if (event.key === "Enter" || event.key === " ") {
34
45
  event.preventDefault();
@@ -1 +1 @@
1
- {"version":3,"file":"SelectTrigger.js","names":[],"sources":["esm/SelectTrigger.js"],"sourcesContent":["import { useComposedRefs } from \"@tamagui/compose-refs\";\nimport { isWeb } from \"@tamagui/constants\";\nimport { View, createChangeEventDetails, createStyledHOC, styled } from \"@tamagui/core\";\nimport { composeEventHandlers } from \"@tamagui/helpers\";\nimport { useSelectContext, useSelectItemParentContext } from \"./context\";\nimport { jsx } from \"react/jsx-runtime\";\n\nconst SelectTriggerFrame = styled(View, {\n\tdisplayName: \"SelectTrigger\",\n\talignItems: \"center\",\n\tflexDirection: \"row\",\n\trender: /* @__PURE__ */ jsx(\"button\", { type: \"button\" })\n});\nconst SelectTrigger = createStyledHOC(SelectTriggerFrame, function SelectTrigger2(props, forwardedRef) {\n\tconst { scope, disabled = false, ...triggerProps } = props;\n\tconst context = useSelectContext(scope);\n\tconst itemParentContext = useSelectItemParentContext(scope);\n\tconst composedRefs = useComposedRefs(forwardedRef, context.floatingContext?.refs.setReference);\n\tif (itemParentContext.shouldRenderWebNative) return null;\n\tconst toggleOpen = (event, reason = \"trigger-press\") => {\n\t\tif (!disabled) itemParentContext.requestOpenChange(!context.open, createChangeEventDetails(reason, event?.nativeEvent || event, event?.currentTarget));\n\t};\n\tconst interactionProps = itemParentContext.interactions ? itemParentContext.interactions.getReferenceProps({\n\t\t...triggerProps,\n\t\tonMouseDown: composeEventHandlers(triggerProps.onMouseDown, () => context.floatingContext?.update?.())\n\t}) : {\n\t\t...triggerProps,\n\t\t...isWeb ? { onMouseDown: composeEventHandlers(triggerProps.onMouseDown, (event) => {\n\t\t\tevent.preventDefault();\n\t\t\ttoggleOpen(event);\n\t\t}) } : { onPress: composeEventHandlers(triggerProps.onPress, toggleOpen) },\n\t\tonKeyDown: composeEventHandlers(triggerProps.onKeyDown, (event) => {\n\t\t\tif (event.key === \"Enter\" || event.key === \" \") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\ttoggleOpen(event, \"keyboard\");\n\t\t\t}\n\t\t})\n\t};\n\treturn /* @__PURE__ */ jsx(SelectTriggerFrame, {\n\t\ttype: \"button\",\n\t\tid: itemParentContext.id,\n\t\trole: \"combobox\",\n\t\t\"aria-haspopup\": \"listbox\",\n\t\t\"aria-expanded\": context.open,\n\t\t\"data-state\": context.open ? \"open\" : \"closed\",\n\t\t\"aria-autocomplete\": \"none\",\n\t\taccessibilityRole: isWeb ? void 0 : \"button\",\n\t\taccessibilityState: isWeb ? void 0 : {\n\t\t\texpanded: context.open,\n\t\t\tdisabled\n\t\t},\n\t\tdir: context.dir,\n\t\tdisabled,\n\t\t\"data-disabled\": disabled ? \"\" : void 0,\n\t\t...interactionProps,\n\t\tref: composedRefs\n\t});\n});\n\nexport { SelectTrigger, SelectTriggerFrame };"],"mappings":";;;;;;;;AAOA,MAAM,qBAAqB,OAAO,MAAM;CACvC,aAAa;CACb,YAAY;CACZ,eAAe;CACf,QAAwB,oBAAI,UAAU,EAAE,MAAM,SAAS,CAAC;AACzD,CAAC;AACD,MAAM,gBAAgB,gBAAgB,oBAAoB,SAAS,eAAe,OAAO,cAAc;CACtG,MAAM,EAAE,OAAO,WAAW,OAAO,GAAG,iBAAiB;CACrD,MAAM,UAAU,iBAAiB,KAAK;CACtC,MAAM,oBAAoB,2BAA2B,KAAK;CAC1D,MAAM,eAAe,gBAAgB,cAAc,QAAQ,iBAAiB,KAAK,YAAY;CAC7F,IAAI,kBAAkB,uBAAuB,OAAO;CACpD,MAAM,cAAc,OAAO,SAAS,oBAAoB;EACvD,IAAI,CAAC,UAAU,kBAAkB,kBAAkB,CAAC,QAAQ,MAAM,yBAAyB,QAAQ,OAAO,eAAe,OAAO,OAAO,aAAa,CAAC;CACtJ;CACA,MAAM,mBAAmB,kBAAkB,eAAe,kBAAkB,aAAa,kBAAkB;EAC1G,GAAG;EACH,aAAa,qBAAqB,aAAa,mBAAmB,QAAQ,iBAAiB,SAAS,CAAC;CACtG,CAAC,IAAI;EACJ,GAAG;EACH,GAAG,QAAQ,EAAE,aAAa,qBAAqB,aAAa,cAAc,UAAU;GACnF,MAAM,eAAe;GACrB,WAAW,KAAK;EACjB,CAAC,EAAE,IAAI,EAAE,SAAS,qBAAqB,aAAa,SAAS,UAAU,EAAE;EACzE,WAAW,qBAAqB,aAAa,YAAY,UAAU;GAClE,IAAI,MAAM,QAAQ,WAAW,MAAM,QAAQ,KAAK;IAC/C,MAAM,eAAe;IACrB,WAAW,OAAO,UAAU;GAC7B;EACD,CAAC;CACF;CACA,OAAuB,oBAAI,oBAAoB;EAC9C,MAAM;EACN,IAAI,kBAAkB;EACtB,MAAM;EACN,iBAAiB;EACjB,iBAAiB,QAAQ;EACzB,cAAc,QAAQ,OAAO,SAAS;EACtC,qBAAqB;EACrB,mBAAmB,QAAQ,KAAK,IAAI;EACpC,oBAAoB,QAAQ,KAAK,IAAI;GACpC,UAAU,QAAQ;GAClB;EACD;EACA,KAAK,QAAQ;EACb;EACA,iBAAiB,WAAW,KAAK,KAAK;EACtC,GAAG;EACH,KAAK;CACN,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"SelectTrigger.js","names":[],"sources":["esm/SelectTrigger.js"],"sourcesContent":["import { useComposedRefs } from \"@tamagui/compose-refs\";\nimport { isWeb } from \"@tamagui/constants\";\nimport { View, createChangeEventDetails, createStyledHOC, styled } from \"@tamagui/core\";\nimport { composeEventHandlers } from \"@tamagui/helpers\";\nimport * as React from \"react\";\nimport { useSelectContext, useSelectItemParentContext } from \"./context\";\nimport { jsx } from \"react/jsx-runtime\";\n\nconst SelectTriggerFrame = styled(View, {\n\tdisplayName: \"SelectTrigger\",\n\talignItems: \"center\",\n\tflexDirection: \"row\",\n\trender: /* @__PURE__ */ jsx(\"button\", { type: \"button\" })\n});\nconst SelectTrigger = createStyledHOC(SelectTriggerFrame, function SelectTrigger2(props, forwardedRef) {\n\tconst { scope, disabled = false, ...triggerProps } = props;\n\tconst context = useSelectContext(scope);\n\tconst itemParentContext = useSelectItemParentContext(scope);\n\tconst composedRefs = useComposedRefs(forwardedRef, context.floatingContext?.refs.setReference);\n\tconst pressIsTouch = React.useRef(false);\n\tif (itemParentContext.shouldRenderWebNative) return null;\n\tconst toggleOpen = (event, reason = \"trigger-press\") => {\n\t\tif (!disabled) itemParentContext.requestOpenChange(!context.open, createChangeEventDetails(reason, event?.nativeEvent || event, event?.currentTarget));\n\t};\n\tconst interactionProps = context.interactions ? context.interactions.getReferenceProps({\n\t\t...triggerProps,\n\t\tonMouseDown: composeEventHandlers(triggerProps.onMouseDown, () => context.floatingContext?.update?.())\n\t}) : {\n\t\t...triggerProps,\n\t\t...isWeb ? {\n\t\t\tonMouseDown: composeEventHandlers(triggerProps.onMouseDown, (event) => {\n\t\t\t\tpressIsTouch.current = event.type === \"touchstart\";\n\t\t\t\tif (pressIsTouch.current) return;\n\t\t\t\tevent.preventDefault();\n\t\t\t\ttoggleOpen(event);\n\t\t\t}),\n\t\t\tonPress: composeEventHandlers(triggerProps.onPress, (event) => {\n\t\t\t\tif (!pressIsTouch.current) return;\n\t\t\t\tpressIsTouch.current = false;\n\t\t\t\ttoggleOpen(event);\n\t\t\t})\n\t\t} : { onPress: composeEventHandlers(triggerProps.onPress, toggleOpen) },\n\t\tonKeyDown: composeEventHandlers(triggerProps.onKeyDown, (event) => {\n\t\t\tif (event.key === \"Enter\" || event.key === \" \") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\ttoggleOpen(event, \"keyboard\");\n\t\t\t}\n\t\t})\n\t};\n\treturn /* @__PURE__ */ jsx(SelectTriggerFrame, {\n\t\ttype: \"button\",\n\t\tid: itemParentContext.id,\n\t\trole: \"combobox\",\n\t\t\"aria-haspopup\": \"listbox\",\n\t\t\"aria-expanded\": context.open,\n\t\t\"data-state\": context.open ? \"open\" : \"closed\",\n\t\t\"aria-autocomplete\": \"none\",\n\t\taccessibilityRole: isWeb ? void 0 : \"button\",\n\t\taccessibilityState: isWeb ? void 0 : {\n\t\t\texpanded: context.open,\n\t\t\tdisabled\n\t\t},\n\t\tdir: context.dir,\n\t\tdisabled,\n\t\t\"data-disabled\": disabled ? \"\" : void 0,\n\t\t...interactionProps,\n\t\tref: composedRefs\n\t});\n});\n\nexport { SelectTrigger, SelectTriggerFrame };"],"mappings":";;;;;;;;;AAQA,MAAM,qBAAqB,OAAO,MAAM;CACvC,aAAa;CACb,YAAY;CACZ,eAAe;CACf,QAAwB,oBAAI,UAAU,EAAE,MAAM,SAAS,CAAC;AACzD,CAAC;AACD,MAAM,gBAAgB,gBAAgB,oBAAoB,SAAS,eAAe,OAAO,cAAc;CACtG,MAAM,EAAE,OAAO,WAAW,OAAO,GAAG,iBAAiB;CACrD,MAAM,UAAU,iBAAiB,KAAK;CACtC,MAAM,oBAAoB,2BAA2B,KAAK;CAC1D,MAAM,eAAe,gBAAgB,cAAc,QAAQ,iBAAiB,KAAK,YAAY;CAC7F,MAAM,eAAe,MAAM,OAAO,KAAK;CACvC,IAAI,kBAAkB,uBAAuB,OAAO;CACpD,MAAM,cAAc,OAAO,SAAS,oBAAoB;EACvD,IAAI,CAAC,UAAU,kBAAkB,kBAAkB,CAAC,QAAQ,MAAM,yBAAyB,QAAQ,OAAO,eAAe,OAAO,OAAO,aAAa,CAAC;CACtJ;CACA,MAAM,mBAAmB,QAAQ,eAAe,QAAQ,aAAa,kBAAkB;EACtF,GAAG;EACH,aAAa,qBAAqB,aAAa,mBAAmB,QAAQ,iBAAiB,SAAS,CAAC;CACtG,CAAC,IAAI;EACJ,GAAG;EACH,GAAG,QAAQ;GACV,aAAa,qBAAqB,aAAa,cAAc,UAAU;IACtE,aAAa,UAAU,MAAM,SAAS;IACtC,IAAI,aAAa,SAAS;IAC1B,MAAM,eAAe;IACrB,WAAW,KAAK;GACjB,CAAC;GACD,SAAS,qBAAqB,aAAa,UAAU,UAAU;IAC9D,IAAI,CAAC,aAAa,SAAS;IAC3B,aAAa,UAAU;IACvB,WAAW,KAAK;GACjB,CAAC;EACF,IAAI,EAAE,SAAS,qBAAqB,aAAa,SAAS,UAAU,EAAE;EACtE,WAAW,qBAAqB,aAAa,YAAY,UAAU;GAClE,IAAI,MAAM,QAAQ,WAAW,MAAM,QAAQ,KAAK;IAC/C,MAAM,eAAe;IACrB,WAAW,OAAO,UAAU;GAC7B;EACD,CAAC;CACF;CACA,OAAuB,oBAAI,oBAAoB;EAC9C,MAAM;EACN,IAAI,kBAAkB;EACtB,MAAM;EACN,iBAAiB;EACjB,iBAAiB,QAAQ;EACzB,cAAc,QAAQ,OAAO,SAAS;EACtC,qBAAqB;EACrB,mBAAmB,QAAQ,KAAK,IAAI;EACpC,oBAAoB,QAAQ,KAAK,IAAI;GACpC,UAAU,QAAQ;GAClB;EACD;EACA,KAAK,QAAQ;EACb;EACA,iBAAiB,WAAW,KAAK,KAAK;EACtC,GAAG;EACH,KAAK;CACN,CAAC;AACF,CAAC"}
@@ -3,6 +3,7 @@ import { useComposedRefs } from "@tamagui/compose-refs";
3
3
  import { isWeb } from "@tamagui/constants";
4
4
  import { View, createChangeEventDetails, createStyledHOC, styled } from "@tamagui/core";
5
5
  import { composeEventHandlers } from "@tamagui/helpers";
6
+ import * as React from "react";
6
7
  import { useSelectContext, useSelectItemParentContext } from "./context.native.js";
7
8
 
8
9
  var SelectTriggerFrame = styled(View, {
@@ -17,6 +18,7 @@ var SelectTrigger = createStyledHOC(SelectTriggerFrame, function SelectTrigger2(
17
18
  var context = useSelectContext(scope);
18
19
  var itemParentContext = useSelectItemParentContext(scope);
19
20
  var composedRefs = useComposedRefs(forwardedRef, (_context_floatingContext = context.floatingContext) === null || _context_floatingContext === void 0 ? void 0 : _context_floatingContext.refs.setReference);
21
+ var pressIsTouch = React.useRef(false);
20
22
  if (itemParentContext.shouldRenderWebNative) return null;
21
23
  var toggleOpen = function(event) {
22
24
  var reason = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : "trigger-press";
@@ -24,10 +26,19 @@ var SelectTrigger = createStyledHOC(SelectTriggerFrame, function SelectTrigger2(
24
26
  };
25
27
  var interactionProps = {
26
28
  ...triggerProps,
27
- ...isWeb ? { onMouseDown: composeEventHandlers(triggerProps.onMouseDown, function(event) {
28
- event.preventDefault();
29
- toggleOpen(event);
30
- }) } : { onPress: composeEventHandlers(triggerProps.onPress, toggleOpen) },
29
+ ...isWeb ? {
30
+ onMouseDown: composeEventHandlers(triggerProps.onMouseDown, function(event) {
31
+ pressIsTouch.current = event.type === "touchstart";
32
+ if (pressIsTouch.current) return;
33
+ event.preventDefault();
34
+ toggleOpen(event);
35
+ }),
36
+ onPress: composeEventHandlers(triggerProps.onPress, function(event) {
37
+ if (!pressIsTouch.current) return;
38
+ pressIsTouch.current = false;
39
+ toggleOpen(event);
40
+ })
41
+ } : { onPress: composeEventHandlers(triggerProps.onPress, toggleOpen) },
31
42
  onKeyDown: composeEventHandlers(triggerProps.onKeyDown, function(event) {
32
43
  if (event.key === "Enter" || event.key === " ") {
33
44
  event.preventDefault();
@@ -1 +1 @@
1
- {"version":3,"file":"SelectTrigger.native.js","names":[],"sources":["esm/SelectTrigger.native.js"],"sourcesContent":["import { jsx } from \"react/jsx-runtime\";\nimport { useComposedRefs } from \"@tamagui/compose-refs\";\nimport { isWeb } from \"@tamagui/constants\";\nimport { View, createChangeEventDetails, createStyledHOC, styled } from \"@tamagui/core\";\nimport { composeEventHandlers } from \"@tamagui/helpers\";\n\nimport { useSelectContext, useSelectItemParentContext } from \"./context\";\n\nvar SelectTriggerFrame = styled(View, {\n\tdisplayName: \"SelectTrigger\",\n\talignItems: \"center\",\n\tflexDirection: \"row\",\n\trender: /* @__PURE__ */ jsx(\"button\", { type: \"button\" })\n});\nvar SelectTrigger = createStyledHOC(SelectTriggerFrame, function SelectTrigger2(props, forwardedRef) {\n\tvar _context_floatingContext;\n\tvar { scope, disabled = false, ...triggerProps } = props;\n\tvar context = useSelectContext(scope);\n\tvar itemParentContext = useSelectItemParentContext(scope);\n\tvar composedRefs = useComposedRefs(forwardedRef, (_context_floatingContext = context.floatingContext) === null || _context_floatingContext === void 0 ? void 0 : _context_floatingContext.refs.setReference);\n\tif (itemParentContext.shouldRenderWebNative) return null;\n\tvar toggleOpen = function(event) {\n\t\tvar reason = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : \"trigger-press\";\n\t\tif (!disabled) itemParentContext.requestOpenChange(!context.open, createChangeEventDetails(reason, (event === null || event === void 0 ? void 0 : event.nativeEvent) || event, event === null || event === void 0 ? void 0 : event.currentTarget));\n\t};\n\tvar interactionProps = {\n\t\t...triggerProps,\n\t\t...isWeb ? { onMouseDown: composeEventHandlers(triggerProps.onMouseDown, function(event) {\n\t\t\tevent.preventDefault();\n\t\t\ttoggleOpen(event);\n\t\t}) } : { onPress: composeEventHandlers(triggerProps.onPress, toggleOpen) },\n\t\tonKeyDown: composeEventHandlers(triggerProps.onKeyDown, function(event) {\n\t\t\tif (event.key === \"Enter\" || event.key === \" \") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\ttoggleOpen(event, \"keyboard\");\n\t\t\t}\n\t\t})\n\t};\n\treturn /* @__PURE__ */ jsx(SelectTriggerFrame, {\n\t\ttype: \"button\",\n\t\tid: itemParentContext.id,\n\t\trole: \"combobox\",\n\t\t\"aria-haspopup\": \"listbox\",\n\t\t\"aria-expanded\": context.open,\n\t\t\"aria-autocomplete\": \"none\",\n\t\taccessibilityRole: isWeb ? void 0 : \"button\",\n\t\taccessibilityState: isWeb ? void 0 : {\n\t\t\texpanded: context.open,\n\t\t\tdisabled\n\t\t},\n\t\tdir: context.dir,\n\t\tdisabled,\n\t\t\"data-disabled\": disabled ? \"\" : void 0,\n\t\t...interactionProps,\n\t\tref: composedRefs\n\t});\n});\n\nexport { SelectTrigger, SelectTriggerFrame };"],"mappings":";;;;;;;;AAQA,IAAI,qBAAqB,OAAO,MAAM;CACrC,aAAa;CACb,YAAY;CACZ,eAAe;CACf,QAAwB,oBAAI,UAAU,EAAE,MAAM,SAAS,CAAC;AACzD,CAAC;AACD,IAAI,gBAAgB,gBAAgB,oBAAoB,SAAS,eAAe,OAAO,cAAc;CACpG,IAAI;CACJ,IAAI,EAAE,OAAO,WAAW,OAAO,GAAG,iBAAiB;CACnD,IAAI,UAAU,iBAAiB,KAAK;CACpC,IAAI,oBAAoB,2BAA2B,KAAK;CACxD,IAAI,eAAe,gBAAgB,eAAe,2BAA2B,QAAQ,qBAAqB,QAAQ,6BAA6B,KAAK,IAAI,KAAK,IAAI,yBAAyB,KAAK,YAAY;CAC3M,IAAI,kBAAkB,uBAAuB,OAAO;CACpD,IAAI,aAAa,SAAS,OAAO;EAChC,IAAI,SAAS,UAAU,SAAS,KAAK,UAAU,OAAO,KAAK,IAAI,UAAU,KAAK;EAC9E,IAAI,CAAC,UAAU,kBAAkB,kBAAkB,CAAC,QAAQ,MAAM,yBAAyB,SAAS,UAAU,QAAQ,UAAU,KAAK,IAAI,KAAK,IAAI,MAAM,gBAAgB,OAAO,UAAU,QAAQ,UAAU,KAAK,IAAI,KAAK,IAAI,MAAM,aAAa,CAAC;CAClP;CACA,IAAI,mBAAmB;EACtB,GAAG;EACH,GAAG,QAAQ,EAAE,aAAa,qBAAqB,aAAa,aAAa,SAAS,OAAO;GACxF,MAAM,eAAe;GACrB,WAAW,KAAK;EACjB,CAAC,EAAE,IAAI,EAAE,SAAS,qBAAqB,aAAa,SAAS,UAAU,EAAE;EACzE,WAAW,qBAAqB,aAAa,WAAW,SAAS,OAAO;GACvE,IAAI,MAAM,QAAQ,WAAW,MAAM,QAAQ,KAAK;IAC/C,MAAM,eAAe;IACrB,WAAW,OAAO,UAAU;GAC7B;EACD,CAAC;CACF;CACA,OAAuB,oBAAI,oBAAoB;EAC9C,MAAM;EACN,IAAI,kBAAkB;EACtB,MAAM;EACN,iBAAiB;EACjB,iBAAiB,QAAQ;EACzB,qBAAqB;EACrB,mBAAmB,QAAQ,KAAK,IAAI;EACpC,oBAAoB,QAAQ,KAAK,IAAI;GACpC,UAAU,QAAQ;GAClB;EACD;EACA,KAAK,QAAQ;EACb;EACA,iBAAiB,WAAW,KAAK,KAAK;EACtC,GAAG;EACH,KAAK;CACN,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"SelectTrigger.native.js","names":[],"sources":["esm/SelectTrigger.native.js"],"sourcesContent":["import { jsx } from \"react/jsx-runtime\";\nimport { useComposedRefs } from \"@tamagui/compose-refs\";\nimport { isWeb } from \"@tamagui/constants\";\nimport { View, createChangeEventDetails, createStyledHOC, styled } from \"@tamagui/core\";\nimport { composeEventHandlers } from \"@tamagui/helpers\";\nimport * as React from \"react\";\nimport { useSelectContext, useSelectItemParentContext } from \"./context\";\n\nvar SelectTriggerFrame = styled(View, {\n\tdisplayName: \"SelectTrigger\",\n\talignItems: \"center\",\n\tflexDirection: \"row\",\n\trender: /* @__PURE__ */ jsx(\"button\", { type: \"button\" })\n});\nvar SelectTrigger = createStyledHOC(SelectTriggerFrame, function SelectTrigger2(props, forwardedRef) {\n\tvar _context_floatingContext;\n\tvar { scope, disabled = false, ...triggerProps } = props;\n\tvar context = useSelectContext(scope);\n\tvar itemParentContext = useSelectItemParentContext(scope);\n\tvar composedRefs = useComposedRefs(forwardedRef, (_context_floatingContext = context.floatingContext) === null || _context_floatingContext === void 0 ? void 0 : _context_floatingContext.refs.setReference);\n\tvar pressIsTouch = React.useRef(false);\n\tif (itemParentContext.shouldRenderWebNative) return null;\n\tvar toggleOpen = function(event) {\n\t\tvar reason = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : \"trigger-press\";\n\t\tif (!disabled) itemParentContext.requestOpenChange(!context.open, createChangeEventDetails(reason, (event === null || event === void 0 ? void 0 : event.nativeEvent) || event, event === null || event === void 0 ? void 0 : event.currentTarget));\n\t};\n\tvar interactionProps = {\n\t\t...triggerProps,\n\t\t...isWeb ? {\n\t\t\tonMouseDown: composeEventHandlers(triggerProps.onMouseDown, function(event) {\n\t\t\t\tpressIsTouch.current = event.type === \"touchstart\";\n\t\t\t\tif (pressIsTouch.current) return;\n\t\t\t\tevent.preventDefault();\n\t\t\t\ttoggleOpen(event);\n\t\t\t}),\n\t\t\tonPress: composeEventHandlers(triggerProps.onPress, function(event) {\n\t\t\t\tif (!pressIsTouch.current) return;\n\t\t\t\tpressIsTouch.current = false;\n\t\t\t\ttoggleOpen(event);\n\t\t\t})\n\t\t} : { onPress: composeEventHandlers(triggerProps.onPress, toggleOpen) },\n\t\tonKeyDown: composeEventHandlers(triggerProps.onKeyDown, function(event) {\n\t\t\tif (event.key === \"Enter\" || event.key === \" \") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\ttoggleOpen(event, \"keyboard\");\n\t\t\t}\n\t\t})\n\t};\n\treturn /* @__PURE__ */ jsx(SelectTriggerFrame, {\n\t\ttype: \"button\",\n\t\tid: itemParentContext.id,\n\t\trole: \"combobox\",\n\t\t\"aria-haspopup\": \"listbox\",\n\t\t\"aria-expanded\": context.open,\n\t\t\"aria-autocomplete\": \"none\",\n\t\taccessibilityRole: isWeb ? void 0 : \"button\",\n\t\taccessibilityState: isWeb ? void 0 : {\n\t\t\texpanded: context.open,\n\t\t\tdisabled\n\t\t},\n\t\tdir: context.dir,\n\t\tdisabled,\n\t\t\"data-disabled\": disabled ? \"\" : void 0,\n\t\t...interactionProps,\n\t\tref: composedRefs\n\t});\n});\n\nexport { SelectTrigger, SelectTriggerFrame };"],"mappings":";;;;;;;;;AAQA,IAAI,qBAAqB,OAAO,MAAM;CACrC,aAAa;CACb,YAAY;CACZ,eAAe;CACf,QAAwB,oBAAI,UAAU,EAAE,MAAM,SAAS,CAAC;AACzD,CAAC;AACD,IAAI,gBAAgB,gBAAgB,oBAAoB,SAAS,eAAe,OAAO,cAAc;CACpG,IAAI;CACJ,IAAI,EAAE,OAAO,WAAW,OAAO,GAAG,iBAAiB;CACnD,IAAI,UAAU,iBAAiB,KAAK;CACpC,IAAI,oBAAoB,2BAA2B,KAAK;CACxD,IAAI,eAAe,gBAAgB,eAAe,2BAA2B,QAAQ,qBAAqB,QAAQ,6BAA6B,KAAK,IAAI,KAAK,IAAI,yBAAyB,KAAK,YAAY;CAC3M,IAAI,eAAe,MAAM,OAAO,KAAK;CACrC,IAAI,kBAAkB,uBAAuB,OAAO;CACpD,IAAI,aAAa,SAAS,OAAO;EAChC,IAAI,SAAS,UAAU,SAAS,KAAK,UAAU,OAAO,KAAK,IAAI,UAAU,KAAK;EAC9E,IAAI,CAAC,UAAU,kBAAkB,kBAAkB,CAAC,QAAQ,MAAM,yBAAyB,SAAS,UAAU,QAAQ,UAAU,KAAK,IAAI,KAAK,IAAI,MAAM,gBAAgB,OAAO,UAAU,QAAQ,UAAU,KAAK,IAAI,KAAK,IAAI,MAAM,aAAa,CAAC;CAClP;CACA,IAAI,mBAAmB;EACtB,GAAG;EACH,GAAG,QAAQ;GACV,aAAa,qBAAqB,aAAa,aAAa,SAAS,OAAO;IAC3E,aAAa,UAAU,MAAM,SAAS;IACtC,IAAI,aAAa,SAAS;IAC1B,MAAM,eAAe;IACrB,WAAW,KAAK;GACjB,CAAC;GACD,SAAS,qBAAqB,aAAa,SAAS,SAAS,OAAO;IACnE,IAAI,CAAC,aAAa,SAAS;IAC3B,aAAa,UAAU;IACvB,WAAW,KAAK;GACjB,CAAC;EACF,IAAI,EAAE,SAAS,qBAAqB,aAAa,SAAS,UAAU,EAAE;EACtE,WAAW,qBAAqB,aAAa,WAAW,SAAS,OAAO;GACvE,IAAI,MAAM,QAAQ,WAAW,MAAM,QAAQ,KAAK;IAC/C,MAAM,eAAe;IACrB,WAAW,OAAO,UAAU;GAC7B;EACD,CAAC;CACF;CACA,OAAuB,oBAAI,oBAAoB;EAC9C,MAAM;EACN,IAAI,kBAAkB;EACtB,MAAM;EACN,iBAAiB;EACjB,iBAAiB,QAAQ;EACzB,qBAAqB;EACrB,mBAAmB,QAAQ,KAAK,IAAI;EACpC,oBAAoB,QAAQ,KAAK,IAAI;GACpC,UAAU,QAAQ;GAClB;EACD;EACA,KAAK,QAAQ;EACb;EACA,iBAAiB,WAAW,KAAK,KAAK;EACtC,GAAG;EACH,KAAK;CACN,CAAC;AACF,CAAC"}
@@ -2,10 +2,9 @@ import { AdaptPortalContents, useAdaptIsActive } from "@tamagui/adapt";
2
2
  import { AnimatePresence } from "@tamagui/animate-presence";
3
3
  import { useComposedRefs } from "@tamagui/compose-refs";
4
4
  import { isWeb, useIsomorphicLayoutEffect } from "@tamagui/constants";
5
- import { View, createStyledHOC, styled } from "@tamagui/core";
5
+ import { View, createStyledHOC, splitStyleProps, styled } from "@tamagui/core";
6
6
  import { needsPortalRepropagation } from "@tamagui/portal";
7
7
  import { YStack } from "@tamagui/stacks";
8
- import { startTransition } from "@tamagui/start-transition";
9
8
  import * as React from "react";
10
9
  import { VIEWPORT_NAME } from "./constants.mjs";
11
10
  import { ForwardSelectContext, useSelectContext, useSelectItemParentContext } from "./context.mjs";
@@ -17,6 +16,10 @@ const SelectViewportFrame = styled(View, {
17
16
  position: "relative"
18
17
  });
19
18
  const needsRepropagation = needsPortalRepropagation();
19
+ const getSheetFrameProps = (props) => {
20
+ const { className, style, "data-tamagui-hoc-class": _hocClassNames, ...rest } = props;
21
+ return splitStyleProps(rest)[1];
22
+ };
20
23
  const SelectViewport = createStyledHOC(SelectViewportFrame, function SelectViewport2(props, forwardedRef) {
21
24
  const { scope, children, disableScroll, ...viewportProps } = props;
22
25
  const context = useSelectContext(scope);
@@ -24,19 +27,9 @@ const SelectViewport = createStyledHOC(SelectViewportFrame, function SelectViewp
24
27
  const isAdapted = useAdaptIsActive(context.adaptScope);
25
28
  const viewportRef = React.useRef(null);
26
29
  const registeredItemCount = itemContext.registry.getItems().length;
27
- const [lazyMounted, setLazyMounted] = React.useState(context.lazyMount ? false : true);
28
- React.useEffect(() => {
29
- if (!context.lazyMount) return;
30
- if (!context.open) return;
31
- if (lazyMounted) return;
32
- startTransition(() => {
33
- setLazyMounted(true);
34
- });
35
- }, [
36
- context.lazyMount,
37
- context.open,
38
- lazyMounted
39
- ]);
30
+ const hasOpenedRef = React.useRef(!context.lazyMount);
31
+ if (context.open) hasOpenedRef.current = true;
32
+ const lazyMounted = hasOpenedRef.current;
40
33
  React.useEffect(() => {
41
34
  if (!isWeb || !isAdapted || !context.open) return;
42
35
  const frame = requestAnimationFrame(() => {
@@ -46,7 +39,6 @@ const SelectViewport = createStyledHOC(SelectViewportFrame, function SelectViewp
46
39
  });
47
40
  return () => cancelAnimationFrame(frame);
48
41
  }, [
49
- context.activeIndex,
50
42
  context.open,
51
43
  isAdapted,
52
44
  registeredItemCount
@@ -58,11 +50,11 @@ const SelectViewport = createStyledHOC(SelectViewportFrame, function SelectViewp
58
50
  }
59
51
  }, [isAdapted]);
60
52
  React.useEffect(() => {
61
- if (context.lazyMount && lazyMounted && context.open && context.update) {
53
+ if (context.lazyMount && context.open && context.update) {
62
54
  const frame = requestAnimationFrame(context.update);
63
55
  return () => cancelAnimationFrame(frame);
64
56
  }
65
- }, [lazyMounted, registeredItemCount]);
57
+ }, [context.open, registeredItemCount]);
66
58
  if (itemContext.shouldRenderWebNative) {
67
59
  return /* @__PURE__ */ jsx(YStack, {
68
60
  position: "relative",
@@ -70,8 +62,9 @@ const SelectViewport = createStyledHOC(SelectViewportFrame, function SelectViewp
70
62
  });
71
63
  }
72
64
  if (isAdapted || !isWeb) {
65
+ const frameProps = isAdapted ? getSheetFrameProps(viewportProps) : viewportProps;
73
66
  let content = /* @__PURE__ */ jsx(SelectViewportFrame, {
74
- ...viewportProps,
67
+ ...frameProps,
75
68
  ...isWeb ? getSelectListboxProps(itemContext.mode) : {},
76
69
  "data-select-viewport": "",
77
70
  ref: composedRefs,
@@ -89,23 +82,27 @@ const SelectViewport = createStyledHOC(SelectViewportFrame, function SelectViewp
89
82
  children: content
90
83
  });
91
84
  }
92
- if (!itemContext.interactions) {
85
+ if (!context.interactions) {
93
86
  return null;
94
87
  }
95
- const { style, className, ...floatingProps } = itemContext.interactions.getFloatingProps();
88
+ const floatingProps = context.interactions.getFloatingProps();
96
89
  return /* @__PURE__ */ jsxs(Fragment, { children: [
97
90
  !disableScroll && /* @__PURE__ */ jsx("style", { dangerouslySetInnerHTML: { __html: selectViewportCSS } }),
98
- /* @__PURE__ */ jsx(AnimatePresence, { children: context.open ? /* @__PURE__ */ jsx(SelectViewportFrame, {
99
- "data-select-viewport": "",
100
- ...isWeb && { "data-state": context.open ? "open" : "closed" },
101
- ...viewportProps,
102
- ...style,
103
- ...floatingProps,
104
- ...getSelectListboxProps(itemContext.mode),
105
- overflowY: disableScroll ? void 0 : style.overflow ?? "auto",
106
- ref: composedRefs,
107
- children: lazyMounted ? children : null
108
- }, "select-viewport") : null }),
91
+ /* @__PURE__ */ jsx(AnimatePresence, {
92
+ presenceAffectsLayout: false,
93
+ children: context.open ? /* @__PURE__ */ jsx(SelectViewportFrame, {
94
+ "data-select-viewport": "",
95
+ ...isWeb && { "data-state": context.open ? "open" : "closed" },
96
+ ...viewportProps,
97
+ ...context.floatingPosition,
98
+ outlineWidth: 0,
99
+ ...floatingProps,
100
+ ...getSelectListboxProps(itemContext.mode),
101
+ overflowY: disableScroll ? void 0 : "auto",
102
+ ref: composedRefs,
103
+ children: lazyMounted ? children : null
104
+ }, "select-viewport") : null
105
+ }),
109
106
  !context.open && !(context.lazyMount && context.renderValue) && lazyMounted && /* @__PURE__ */ jsx("div", {
110
107
  style: { display: "none" },
111
108
  children
@@ -116,7 +113,7 @@ const selectViewportCSS = `
116
113
  [data-select-viewport] {
117
114
  scrollbar-width: none;
118
115
  -webkit-overflow-scrolling: touch;
119
- overscroll-behavior: contain;
116
+ overscroll-behavior: none;
120
117
  }
121
118
 
122
119
  [data-select-viewport]::-webkit-scrollbar{
@@ -1 +1 @@
1
- {"version":3,"file":"SelectViewport.js","names":[],"sources":["esm/SelectViewport.js"],"sourcesContent":["import { AdaptPortalContents, useAdaptIsActive } from \"@tamagui/adapt\";\nimport { AnimatePresence } from \"@tamagui/animate-presence\";\nimport { useComposedRefs } from \"@tamagui/compose-refs\";\nimport { isWeb, useIsomorphicLayoutEffect } from \"@tamagui/constants\";\nimport { createStyledHOC, styled, View } from \"@tamagui/core\";\nimport { needsPortalRepropagation } from \"@tamagui/portal\";\nimport { YStack } from \"@tamagui/stacks\";\nimport { startTransition } from \"@tamagui/start-transition\";\nimport * as React from \"react\";\nimport { VIEWPORT_NAME } from \"./constants\";\nimport {\n ForwardSelectContext,\n useSelectContext,\n useSelectItemParentContext\n} from \"./context\";\nimport { getSelectListboxProps } from \"./selectionController\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nconst SelectViewportFrame = styled(View, {\n displayName: VIEWPORT_NAME,\n position: \"relative\"\n});\nconst needsRepropagation = needsPortalRepropagation();\nconst SelectViewport = createStyledHOC(\n SelectViewportFrame,\n function SelectViewport2(props, forwardedRef) {\n const { scope, children, disableScroll, ...viewportProps } = props;\n const context = useSelectContext(scope);\n const itemContext = useSelectItemParentContext(scope);\n const isAdapted = useAdaptIsActive(context.adaptScope);\n const viewportRef = React.useRef(null);\n const registeredItemCount = itemContext.registry.getItems().length;\n const [lazyMounted, setLazyMounted] = React.useState(context.lazyMount ? false : true);\n React.useEffect(() => {\n if (!context.lazyMount) return;\n if (!context.open) return;\n if (lazyMounted) return;\n startTransition(() => {\n setLazyMounted(true);\n });\n }, [context.lazyMount, context.open, lazyMounted]);\n React.useEffect(() => {\n if (!isWeb || !isAdapted || !context.open) return;\n const frame = requestAnimationFrame(() => {\n const index = context.activeIndexRef.current ?? itemContext.registry.firstEnabledIndex();\n const activeItem = viewportRef.current?.querySelector(\n '[role=\"option\"][tabindex=\"0\"]'\n ) ?? (index >= 0 ? itemContext.listRef?.current[index] : null);\n activeItem?.focus();\n });\n return () => cancelAnimationFrame(frame);\n }, [context.activeIndex, context.open, isAdapted, registeredItemCount]);\n const composedRefs = useComposedRefs(\n // @ts-ignore react 19 ref type mismatch\n forwardedRef,\n viewportRef,\n context.floatingContext?.refs.setFloating\n );\n useIsomorphicLayoutEffect(() => {\n if (context.update) {\n context.update();\n }\n }, [isAdapted]);\n React.useEffect(() => {\n if (context.lazyMount && lazyMounted && context.open && context.update) {\n const frame = requestAnimationFrame(context.update);\n return () => cancelAnimationFrame(frame);\n }\n }, [lazyMounted, registeredItemCount]);\n if (itemContext.shouldRenderWebNative) {\n return /* @__PURE__ */ jsx(YStack, { position: \"relative\", children });\n }\n if (isAdapted || !isWeb) {\n let content = /* @__PURE__ */ jsx(\n SelectViewportFrame,\n {\n ...viewportProps,\n ...isWeb ? getSelectListboxProps(itemContext.mode) : {},\n \"data-select-viewport\": \"\",\n ref: composedRefs,\n children: lazyMounted ? children : null\n }\n );\n if (needsRepropagation) {\n content = /* @__PURE__ */ jsx(ForwardSelectContext, { itemContext, context, children: content });\n }\n return /* @__PURE__ */ jsx(AdaptPortalContents, { scope: context.adaptScope, children: content });\n }\n if (!itemContext.interactions) {\n return null;\n }\n const {\n style,\n // remove this, it was set to \"Select\" always\n className,\n ...floatingProps\n } = itemContext.interactions.getFloatingProps();\n return /* @__PURE__ */ jsxs(Fragment, { children: [\n !disableScroll && /* @__PURE__ */ jsx(\n \"style\",\n {\n dangerouslySetInnerHTML: {\n __html: selectViewportCSS\n }\n }\n ),\n /* @__PURE__ */ jsx(AnimatePresence, { children: context.open ? /* @__PURE__ */ jsx(\n SelectViewportFrame,\n {\n \"data-select-viewport\": \"\",\n ...isWeb && {\n \"data-state\": context.open ? \"open\" : \"closed\"\n },\n ...viewportProps,\n ...style,\n ...floatingProps,\n ...getSelectListboxProps(itemContext.mode),\n overflowY: disableScroll ? void 0 : style.overflow ?? \"auto\",\n ref: composedRefs,\n children: lazyMounted ? children : null\n },\n \"select-viewport\"\n ) : null }),\n !context.open && !(context.lazyMount && context.renderValue) && lazyMounted && /* @__PURE__ */ jsx(\"div\", { style: { display: \"none\" }, children })\n ] });\n }\n);\nconst selectViewportCSS = `\n[data-select-viewport] {\n scrollbar-width: none;\n -webkit-overflow-scrolling: touch;\n overscroll-behavior: contain;\n}\n\n[data-select-viewport]::-webkit-scrollbar{\n display:none\n}\n`;\nexport {\n SelectViewport,\n SelectViewportFrame\n};\n//# sourceMappingURL=SelectViewport.js.map\n"],"mappings":"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"}
1
+ {"version":3,"file":"SelectViewport.js","names":[],"sources":["esm/SelectViewport.js"],"sourcesContent":["import { AdaptPortalContents, useAdaptIsActive } from \"@tamagui/adapt\";\nimport { AnimatePresence } from \"@tamagui/animate-presence\";\nimport { useComposedRefs } from \"@tamagui/compose-refs\";\nimport { isWeb, useIsomorphicLayoutEffect } from \"@tamagui/constants\";\nimport { createStyledHOC, splitStyleProps, styled, View } from \"@tamagui/core\";\nimport { needsPortalRepropagation } from \"@tamagui/portal\";\nimport { YStack } from \"@tamagui/stacks\";\nimport * as React from \"react\";\nimport { VIEWPORT_NAME } from \"./constants\";\nimport {\n ForwardSelectContext,\n useSelectContext,\n useSelectItemParentContext\n} from \"./context\";\nimport { getSelectListboxProps } from \"./selectionController\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nconst SelectViewportFrame = styled(View, {\n displayName: VIEWPORT_NAME,\n position: \"relative\"\n});\nconst needsRepropagation = needsPortalRepropagation();\nconst getSheetFrameProps = (props) => {\n const { className, style, \"data-tamagui-hoc-class\": _hocClassNames, ...rest } = props;\n return splitStyleProps(rest)[1];\n};\nconst SelectViewport = createStyledHOC(\n SelectViewportFrame,\n function SelectViewport2(props, forwardedRef) {\n const { scope, children, disableScroll, ...viewportProps } = props;\n const context = useSelectContext(scope);\n const itemContext = useSelectItemParentContext(scope);\n const isAdapted = useAdaptIsActive(context.adaptScope);\n const viewportRef = React.useRef(null);\n const registeredItemCount = itemContext.registry.getItems().length;\n const hasOpenedRef = React.useRef(!context.lazyMount);\n if (context.open) hasOpenedRef.current = true;\n const lazyMounted = hasOpenedRef.current;\n React.useEffect(() => {\n if (!isWeb || !isAdapted || !context.open) return;\n const frame = requestAnimationFrame(() => {\n const index = context.activeIndexRef.current ?? itemContext.registry.firstEnabledIndex();\n const activeItem = viewportRef.current?.querySelector(\n '[role=\"option\"][tabindex=\"0\"]'\n ) ?? (index >= 0 ? itemContext.listRef?.current[index] : null);\n activeItem?.focus();\n });\n return () => cancelAnimationFrame(frame);\n }, [context.open, isAdapted, registeredItemCount]);\n const composedRefs = useComposedRefs(\n // @ts-ignore react 19 ref type mismatch\n forwardedRef,\n viewportRef,\n context.floatingContext?.refs.setFloating\n );\n useIsomorphicLayoutEffect(() => {\n if (context.update) {\n context.update();\n }\n }, [isAdapted]);\n React.useEffect(() => {\n if (context.lazyMount && context.open && context.update) {\n const frame = requestAnimationFrame(context.update);\n return () => cancelAnimationFrame(frame);\n }\n }, [context.open, registeredItemCount]);\n if (itemContext.shouldRenderWebNative) {\n return /* @__PURE__ */ jsx(YStack, { position: \"relative\", children });\n }\n if (isAdapted || !isWeb) {\n const frameProps = isAdapted ? getSheetFrameProps(viewportProps) : viewportProps;\n let content = /* @__PURE__ */ jsx(\n SelectViewportFrame,\n {\n ...frameProps,\n ...isWeb ? getSelectListboxProps(itemContext.mode) : {},\n \"data-select-viewport\": \"\",\n ref: composedRefs,\n children: lazyMounted ? children : null\n }\n );\n if (needsRepropagation) {\n content = /* @__PURE__ */ jsx(ForwardSelectContext, { itemContext, context, children: content });\n }\n return /* @__PURE__ */ jsx(AdaptPortalContents, { scope: context.adaptScope, children: content });\n }\n if (!context.interactions) {\n return null;\n }\n const floatingProps = context.interactions.getFloatingProps();\n return /* @__PURE__ */ jsxs(Fragment, { children: [\n !disableScroll && /* @__PURE__ */ jsx(\n \"style\",\n {\n dangerouslySetInnerHTML: {\n __html: selectViewportCSS\n }\n }\n ),\n /* @__PURE__ */ jsx(AnimatePresence, { presenceAffectsLayout: false, children: context.open ? /* @__PURE__ */ jsx(\n SelectViewportFrame,\n {\n \"data-select-viewport\": \"\",\n ...isWeb && {\n \"data-state\": context.open ? \"open\" : \"closed\"\n },\n ...viewportProps,\n ...context.floatingPosition,\n outlineWidth: 0,\n ...floatingProps,\n ...getSelectListboxProps(itemContext.mode),\n overflowY: disableScroll ? void 0 : \"auto\",\n ref: composedRefs,\n children: lazyMounted ? children : null\n },\n \"select-viewport\"\n ) : null }),\n !context.open && !(context.lazyMount && context.renderValue) && lazyMounted && /* @__PURE__ */ jsx(\"div\", { style: { display: \"none\" }, children })\n ] });\n }\n);\nconst selectViewportCSS = `\n[data-select-viewport] {\n scrollbar-width: none;\n -webkit-overflow-scrolling: touch;\n overscroll-behavior: none;\n}\n\n[data-select-viewport]::-webkit-scrollbar{\n display:none\n}\n`;\nexport {\n SelectViewport,\n SelectViewportFrame\n};\n//# sourceMappingURL=SelectViewport.js.map\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
- import { AdaptContext, AdaptPortalContents, useAdaptContext, useAdaptIsActive } from "@tamagui/adapt";
2
+ import { AdaptPortalContents, ProvideAdaptContext, useAdaptContext, useAdaptIsActive } from "@tamagui/adapt";
3
3
  import { Theme, View, createStyledHOC, styled, useThemeName } from "@tamagui/core";
4
4
  import { VIEWPORT_NAME } from "./constants.native.js";
5
5
  import { ForwardSelectContext, useSelectContext, useSelectItemParentContext } from "./context.native.js";
@@ -13,14 +13,14 @@ var SelectViewport = createStyledHOC(SelectViewportFrame, function SelectViewpor
13
13
  var context = useSelectContext(scope);
14
14
  var itemParentContext = useSelectItemParentContext(scope);
15
15
  var themeName = useThemeName();
16
- var adaptContext = useAdaptContext();
16
+ var adaptContext = useAdaptContext(context.adaptScope);
17
17
  var isAdapted = useAdaptIsActive(context.adaptScope);
18
18
  var contents = /* @__PURE__ */ jsx(Theme, {
19
19
  name: themeName,
20
20
  children: /* @__PURE__ */ jsx(ForwardSelectContext, {
21
21
  itemContext: itemParentContext,
22
22
  context,
23
- children: /* @__PURE__ */ jsx(AdaptContext.Provider, {
23
+ children: /* @__PURE__ */ jsx(ProvideAdaptContext, {
24
24
  ...adaptContext,
25
25
  children: /* @__PURE__ */ jsx(SelectViewportFrame, {
26
26
  ...viewportProps,
@@ -1 +1 @@
1
- {"version":3,"file":"SelectViewport.native.js","names":[],"sources":["esm/SelectViewport.native.js"],"sourcesContent":["import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { AdaptContext, AdaptPortalContents, useAdaptContext, useAdaptIsActive } from \"@tamagui/adapt\";\nimport { createStyledHOC, styled, Theme, useThemeName, View } from \"@tamagui/core\";\nimport { VIEWPORT_NAME } from \"./constants\";\nimport { ForwardSelectContext, useSelectContext, useSelectItemParentContext } from \"./context\";\nvar SelectViewportFrame = styled(View, {\n displayName: VIEWPORT_NAME,\n position: \"relative\"\n});\nvar SelectViewport = createStyledHOC(SelectViewportFrame, function SelectViewport2(props, forwardedRef) {\n var { scope, children, disableScroll: _disableScroll, ...viewportProps } = props;\n var context = useSelectContext(scope);\n var itemParentContext = useSelectItemParentContext(scope);\n var themeName = useThemeName();\n var adaptContext = useAdaptContext();\n var isAdapted = useAdaptIsActive(context.adaptScope);\n var contents = /* @__PURE__ */ _jsx(Theme, {\n name: themeName,\n children: /* @__PURE__ */ _jsx(ForwardSelectContext, {\n itemContext: itemParentContext,\n context,\n children: /* @__PURE__ */ _jsx(AdaptContext.Provider, {\n ...adaptContext,\n children: /* @__PURE__ */ _jsx(SelectViewportFrame, {\n ...viewportProps,\n ref: forwardedRef,\n children\n })\n })\n })\n });\n if (!context.open) {\n if (context.lazyMount && context.renderValue) return null;\n return /* @__PURE__ */ _jsx(SelectViewportFrame, {\n display: \"none\",\n children: contents\n });\n }\n return isAdapted ? /* @__PURE__ */ _jsx(AdaptPortalContents, {\n scope: context.adaptScope,\n children: contents\n }) : contents;\n});\nSelectViewport.displayName = VIEWPORT_NAME;\nexport {\n SelectViewport,\n SelectViewportFrame\n};\n//# sourceMappingURL=SelectViewport.native.js.map\n"],"mappings":";;;;;;;AAKA,IAAI,sBAAsB,OAAO,MAAM;CACrC,aAAa;CACb,UAAU;AACZ,CAAC;AACD,IAAI,iBAAiB,gBAAgB,qBAAqB,SAAS,gBAAgB,OAAO,cAAc;CACtG,IAAI,EAAE,OAAO,UAAU,eAAe,gBAAgB,GAAG,kBAAkB;CAC3E,IAAI,UAAU,iBAAiB,KAAK;CACpC,IAAI,oBAAoB,2BAA2B,KAAK;CACxD,IAAI,YAAY,aAAa;CAC7B,IAAI,eAAe,gBAAgB;CACnC,IAAI,YAAY,iBAAiB,QAAQ,UAAU;CACnD,IAAI,WAA2B,oBAAK,OAAO;EACzC,MAAM;EACN,UAA0B,oBAAK,sBAAsB;GACnD,aAAa;GACb;GACA,UAA0B,oBAAK,aAAa,UAAU;IACpD,GAAG;IACH,UAA0B,oBAAK,qBAAqB;KAClD,GAAG;KACH,KAAK;KACL;IACF,CAAC;GACH,CAAC;EACH,CAAC;CACH,CAAC;CACD,IAAI,CAAC,QAAQ,MAAM;EACjB,IAAI,QAAQ,aAAa,QAAQ,aAAa,OAAO;EACrD,OAAuB,oBAAK,qBAAqB;GAC/C,SAAS;GACT,UAAU;EACZ,CAAC;CACH;CACA,OAAO,YAA4B,oBAAK,qBAAqB;EAC3D,OAAO,QAAQ;EACf,UAAU;CACZ,CAAC,IAAI;AACP,CAAC;AACD,eAAe,cAAc"}
1
+ {"version":3,"file":"SelectViewport.native.js","names":[],"sources":["esm/SelectViewport.native.js"],"sourcesContent":["import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { AdaptPortalContents, ProvideAdaptContext, useAdaptContext, useAdaptIsActive } from \"@tamagui/adapt\";\nimport { createStyledHOC, styled, Theme, useThemeName, View } from \"@tamagui/core\";\nimport { VIEWPORT_NAME } from \"./constants\";\nimport { ForwardSelectContext, useSelectContext, useSelectItemParentContext } from \"./context\";\nvar SelectViewportFrame = styled(View, {\n displayName: VIEWPORT_NAME,\n position: \"relative\"\n});\nvar SelectViewport = createStyledHOC(SelectViewportFrame, function SelectViewport2(props, forwardedRef) {\n var { scope, children, disableScroll: _disableScroll, ...viewportProps } = props;\n var context = useSelectContext(scope);\n var itemParentContext = useSelectItemParentContext(scope);\n var themeName = useThemeName();\n var adaptContext = useAdaptContext(context.adaptScope);\n var isAdapted = useAdaptIsActive(context.adaptScope);\n var contents = /* @__PURE__ */ _jsx(Theme, {\n name: themeName,\n children: /* @__PURE__ */ _jsx(ForwardSelectContext, {\n itemContext: itemParentContext,\n context,\n children: /* @__PURE__ */ _jsx(ProvideAdaptContext, {\n ...adaptContext,\n children: /* @__PURE__ */ _jsx(SelectViewportFrame, {\n ...viewportProps,\n ref: forwardedRef,\n children\n })\n })\n })\n });\n if (!context.open) {\n if (context.lazyMount && context.renderValue) return null;\n return /* @__PURE__ */ _jsx(SelectViewportFrame, {\n display: \"none\",\n children: contents\n });\n }\n return isAdapted ? /* @__PURE__ */ _jsx(AdaptPortalContents, {\n scope: context.adaptScope,\n children: contents\n }) : contents;\n});\nSelectViewport.displayName = VIEWPORT_NAME;\nexport {\n SelectViewport,\n SelectViewportFrame\n};\n//# sourceMappingURL=SelectViewport.native.js.map\n"],"mappings":";;;;;;;AAKA,IAAI,sBAAsB,OAAO,MAAM;CACrC,aAAa;CACb,UAAU;AACZ,CAAC;AACD,IAAI,iBAAiB,gBAAgB,qBAAqB,SAAS,gBAAgB,OAAO,cAAc;CACtG,IAAI,EAAE,OAAO,UAAU,eAAe,gBAAgB,GAAG,kBAAkB;CAC3E,IAAI,UAAU,iBAAiB,KAAK;CACpC,IAAI,oBAAoB,2BAA2B,KAAK;CACxD,IAAI,YAAY,aAAa;CAC7B,IAAI,eAAe,gBAAgB,QAAQ,UAAU;CACrD,IAAI,YAAY,iBAAiB,QAAQ,UAAU;CACnD,IAAI,WAA2B,oBAAK,OAAO;EACzC,MAAM;EACN,UAA0B,oBAAK,sBAAsB;GACnD,aAAa;GACb;GACA,UAA0B,oBAAK,qBAAqB;IAClD,GAAG;IACH,UAA0B,oBAAK,qBAAqB;KAClD,GAAG;KACH,KAAK;KACL;IACF,CAAC;GACH,CAAC;EACH,CAAC;CACH,CAAC;CACD,IAAI,CAAC,QAAQ,MAAM;EACjB,IAAI,QAAQ,aAAa,QAAQ,aAAa,OAAO;EACrD,OAAuB,oBAAK,qBAAqB;GAC/C,SAAS;GACT,UAAU;EACZ,CAAC;CACH;CACA,OAAO,YAA4B,oBAAK,qBAAqB;EAC3D,OAAO,QAAQ;EACf,UAAU;CACZ,CAAC,IAAI;AACP,CAAC;AACD,eAAe,cAAc"}
@@ -16,13 +16,24 @@ function createSelectItemRegistry(onChange) {
16
16
  const explicitTextValues = /* @__PURE__ */ new Map();
17
17
  const itemNodes = /* @__PURE__ */ new Map();
18
18
  const listeners = /* @__PURE__ */ new Set();
19
+ let indexByValue = null;
19
20
  const notify = () => {
21
+ indexByValue = null;
20
22
  onChange?.();
21
23
  listeners.forEach((listener) => listener());
22
24
  };
23
25
  const getItems = () => items;
24
26
  const getItem = (value) => items.find((item) => item.value === value);
25
- const getIndex = (value) => items.findIndex((item) => item.value === value);
27
+ const getIndex = (value) => {
28
+ if (!indexByValue) {
29
+ indexByValue = /* @__PURE__ */ new Map();
30
+ items.forEach((item, index) => {
31
+ if (!indexByValue.has(item.value)) indexByValue.set(item.value, index);
32
+ });
33
+ }
34
+ return indexByValue.get(value) ?? -1;
35
+ };
36
+ const getNodes = () => items.map((item) => itemNodes.get(item.id) ?? null);
26
37
  const getRegisteredLabel = (value) => {
27
38
  const registrations = labelRegistrations.get(value);
28
39
  if (!registrations?.size) return void 0;
@@ -45,7 +56,6 @@ function createSelectItemRegistry(onChange) {
45
56
  if (changed) notify();
46
57
  };
47
58
  const syncNodeOrder = () => {
48
- const previousOrder = items.map((item) => item.id);
49
59
  items.sort((a, b) => {
50
60
  const aNode = itemNodes.get(a.id);
51
61
  const bNode = itemNodes.get(b.id);
@@ -57,9 +67,6 @@ function createSelectItemRegistry(onChange) {
57
67
  if (position & 2) return 1;
58
68
  return 0;
59
69
  });
60
- if (items.some((item, index) => item.id !== previousOrder[index])) {
61
- notify();
62
- }
63
70
  };
64
71
  const registerItem = (item) => {
65
72
  const id = Symbol(item.value);
@@ -99,12 +106,14 @@ function createSelectItemRegistry(onChange) {
99
106
  notify();
100
107
  },
101
108
  setNode(node) {
109
+ if ((itemNodes.get(id) ?? null) === (node ?? null)) return;
102
110
  if (node) {
103
111
  itemNodes.set(id, node);
104
112
  syncNodeOrder();
105
113
  } else {
106
114
  itemNodes.delete(id);
107
115
  }
116
+ notify();
108
117
  },
109
118
  unregister() {
110
119
  const index = items.findIndex((current) => current.id === id);
@@ -179,6 +188,7 @@ function createSelectItemRegistry(onChange) {
179
188
  getItems,
180
189
  getItem,
181
190
  getIndex,
191
+ getNodes,
182
192
  firstEnabledIndex,
183
193
  nextEnabledIndex,
184
194
  findTypeaheadIndex,
@@ -1 +1 @@
1
- {"version":3,"file":"selectionController.js","names":[],"sources":["esm/selectionController.js"],"sourcesContent":["function getSelectLabelText(label) {\n if (typeof label === \"string\" || typeof label === \"number\") {\n return String(label);\n }\n if (Array.isArray(label)) {\n return label.map(getSelectLabelText).join(\"\");\n }\n if (label && typeof label === \"object\" && \"props\" in label) {\n return getSelectLabelText(label.props?.children);\n }\n return \"\";\n}\nfunction createSelectItemRegistry(onChange) {\n const items = [];\n const labelRegistrations = /* @__PURE__ */ new Map();\n const explicitTextValues = /* @__PURE__ */ new Map();\n const itemNodes = /* @__PURE__ */ new Map();\n const listeners = /* @__PURE__ */ new Set();\n const notify = () => {\n onChange?.();\n listeners.forEach((listener) => listener());\n };\n const getItems = () => items;\n const getItem = (value) => items.find((item) => item.value === value);\n const getIndex = (value) => items.findIndex((item) => item.value === value);\n const getRegisteredLabel = (value) => {\n const registrations = labelRegistrations.get(value);\n if (!registrations?.size) return void 0;\n const values = Array.from(registrations.values());\n return values[values.length - 1];\n };\n const applyRegisteredLabel = (value) => {\n const registeredLabel = getRegisteredLabel(value);\n let changed = false;\n for (const item of items) {\n if (item.value !== value) continue;\n const nextLabel = registeredLabel?.label;\n const nextTextValue = explicitTextValues.get(item.id) || registeredLabel?.textValue;\n if (item.label !== nextLabel || item.textValue !== nextTextValue) {\n item.label = nextLabel;\n item.textValue = nextTextValue;\n changed = true;\n }\n }\n if (changed) notify();\n };\n const syncNodeOrder = () => {\n const previousOrder = items.map((item) => item.id);\n items.sort((a, b) => {\n const aNode = itemNodes.get(a.id);\n const bNode = itemNodes.get(b.id);\n if (!aNode || !bNode || typeof aNode.compareDocumentPosition !== \"function\") {\n return 0;\n }\n const position = aNode.compareDocumentPosition(bNode);\n if (position & 4) return -1;\n if (position & 2) return 1;\n return 0;\n });\n if (items.some((item, index) => item.id !== previousOrder[index])) {\n notify();\n }\n };\n const registerItem = (item) => {\n const id = Symbol(item.value);\n const registeredLabel = getRegisteredLabel(item.value);\n const registeredItem = {\n ...item,\n ...registeredLabel,\n textValue: item.textValue ?? registeredLabel?.textValue,\n id\n };\n explicitTextValues.set(id, item.textValue);\n items.push(registeredItem);\n notify();\n return {\n id,\n update(next) {\n const index = items.findIndex((current2) => current2.id === id);\n if (index < 0) return;\n const current = items[index];\n if (\"textValue\" in next) {\n explicitTextValues.set(id, next.textValue);\n }\n const nextItem = { ...current, ...next };\n if (next.value !== void 0 && next.value !== current.value) {\n const nextLabel = getRegisteredLabel(next.value);\n nextItem.label = nextLabel?.label;\n }\n const explicitTextValue = explicitTextValues.get(id);\n nextItem.textValue = explicitTextValue || getSelectLabelText(nextItem.label) || (nextItem.label ? nextItem.value : void 0);\n const changed = Object.entries(next).some(\n ([key, value]) => current[key] !== value\n );\n const textValueChanged = current.textValue !== nextItem.textValue;\n if (!changed && !textValueChanged) return;\n items[index] = nextItem;\n notify();\n },\n setNode(node) {\n if (node) {\n itemNodes.set(id, node);\n syncNodeOrder();\n } else {\n itemNodes.delete(id);\n }\n },\n unregister() {\n const index = items.findIndex((current) => current.id === id);\n if (index < 0) return;\n items.splice(index, 1);\n explicitTextValues.delete(id);\n itemNodes.delete(id);\n notify();\n }\n };\n };\n const registerLabel = (value, label, textValue) => {\n const id = Symbol(value);\n const normalizedTextValue = textValue || getSelectLabelText(label) || value;\n const registrations = labelRegistrations.get(value) ?? (() => {\n const next = /* @__PURE__ */ new Map();\n labelRegistrations.set(value, next);\n return next;\n })();\n registrations.set(id, { label, textValue: normalizedTextValue });\n applyRegisteredLabel(value);\n return () => {\n registrations.delete(id);\n if (!registrations.size) {\n labelRegistrations.delete(value);\n }\n applyRegisteredLabel(value);\n };\n };\n const firstEnabledIndex = () => items.findIndex((item) => !item.disabled);\n const nextEnabledIndex = (fromIndex, direction) => {\n if (!items.length) return -1;\n if (fromIndex == null || fromIndex < 0 || fromIndex >= items.length) {\n if (direction === 1) return firstEnabledIndex();\n for (let index = items.length - 1; index >= 0; index--) {\n if (!items[index].disabled) return index;\n }\n return -1;\n }\n for (let offset = 1; offset <= items.length; offset++) {\n const index = (fromIndex + direction * offset + items.length) % items.length;\n if (!items[index]?.disabled) return index;\n }\n return -1;\n };\n const findTypeaheadIndex = (search, fromIndex) => {\n const normalizedSearch = search.trim().toLocaleLowerCase();\n if (!normalizedSearch) return -1;\n const start = fromIndex == null || fromIndex < 0 ? -1 : fromIndex;\n for (let offset = 1; offset <= items.length; offset++) {\n const index = (start + offset) % items.length;\n const item = items[index];\n const label = item.textValue || getSelectLabelText(item.label) || item.value;\n if (!item.disabled && label.toLocaleLowerCase().startsWith(normalizedSearch)) {\n return index;\n }\n }\n return -1;\n };\n return {\n subscribe(listener) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n registerItem,\n registerLabel,\n getItems,\n getItem,\n getIndex,\n firstEnabledIndex,\n nextEnabledIndex,\n findTypeaheadIndex,\n getDisabledIndices: () => items.flatMap((item, index) => item.disabled ? [index] : []),\n getTypeaheadLabels: () => items.map((item) => item.textValue || getSelectLabelText(item.label) || item.value)\n };\n}\nfunction normalizeSelectSelection(mode, value) {\n if (mode === \"single\") {\n return typeof value === \"string\" ? value : \"\";\n }\n const values = Array.isArray(value) ? value : [];\n return [...new Set(values)];\n}\nfunction selectedValuesFromSelection(mode, value) {\n const normalized = normalizeSelectSelection(mode, value);\n return mode === \"multiple\" ? normalized : normalized ? [normalized] : [];\n}\nfunction createSelectSelectionController({\n mode: initialMode,\n value: initialValue,\n registry\n}) {\n let mode = initialMode;\n let value = normalizeSelectSelection(mode, initialValue);\n let activeIndex = null;\n const selectedValues = () => selectedValuesFromSelection(mode, value);\n const setMode = (nextMode) => {\n if (mode === nextMode) return value;\n mode = nextMode;\n value = normalizeSelectSelection(mode, value);\n return value;\n };\n const setValue = (nextValue) => {\n value = normalizeSelectSelection(mode, nextValue);\n return value;\n };\n const isSelected = (itemValue) => selectedValues().includes(itemValue);\n const toggle = (itemValue) => {\n const item = registry.getItem(itemValue);\n if (!item || item.disabled) return value;\n if (mode === \"single\") {\n value = itemValue;\n return value;\n }\n const current = selectedValues();\n value = current.includes(itemValue) ? current.filter((currentValue) => currentValue !== itemValue) : [...current, itemValue];\n return value;\n };\n const selectionAnchor = () => {\n const values = selectedValues();\n for (let index = values.length - 1; index >= 0; index--) {\n const item = registry.getItem(values[index]);\n if (item) return item;\n }\n const firstEnabledIndex = registry.firstEnabledIndex();\n return firstEnabledIndex < 0 ? void 0 : registry.getItems()[firstEnabledIndex];\n };\n const selectionAnchorIndex = () => {\n const anchor = selectionAnchor();\n return anchor ? registry.getIndex(anchor.value) : -1;\n };\n const initialActiveIndex = () => {\n const anchorIndex = selectionAnchorIndex();\n const anchor = anchorIndex < 0 ? void 0 : registry.getItems()[anchorIndex];\n return anchor && !anchor.disabled ? anchorIndex : registry.firstEnabledIndex();\n };\n const moveActive = (direction) => {\n const nextIndex = registry.nextEnabledIndex(activeIndex, direction);\n activeIndex = nextIndex < 0 ? null : nextIndex;\n return activeIndex == null ? void 0 : registry.getItems()[activeIndex];\n };\n return {\n registry,\n get mode() {\n return mode;\n },\n get value() {\n return value;\n },\n get activeIndex() {\n return activeIndex;\n },\n get activeItem() {\n return activeIndex == null ? void 0 : registry.getItems()[activeIndex];\n },\n get shouldCloseOnSelect() {\n return mode === \"single\";\n },\n setMode,\n setValue,\n isSelected,\n toggle,\n selectionAnchor,\n selectionAnchorIndex,\n initialActiveIndex,\n setActiveIndex(index) {\n activeIndex = index;\n },\n moveActive\n };\n}\nfunction getSelectListboxProps(mode) {\n return {\n role: \"listbox\",\n \"aria-multiselectable\": mode === \"multiple\" ? true : void 0\n };\n}\nfunction getSelectOptionProps(mode, selected, disabled, platform) {\n if (platform === \"native\") {\n return {\n accessibilityRole: mode === \"multiple\" ? \"checkbox\" : \"button\",\n accessibilityState: {\n selected: mode === \"single\" ? selected : void 0,\n checked: mode === \"multiple\" ? selected : void 0,\n disabled\n }\n };\n }\n return {\n role: \"option\",\n \"aria-selected\": selected,\n \"aria-disabled\": disabled || void 0\n };\n}\nexport {\n createSelectItemRegistry,\n createSelectSelectionController,\n getSelectLabelText,\n getSelectListboxProps,\n getSelectOptionProps,\n normalizeSelectSelection,\n selectedValuesFromSelection\n};\n//# sourceMappingURL=selectionController.js.map\n"],"mappings":"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"}
1
+ {"version":3,"file":"selectionController.js","names":[],"sources":["esm/selectionController.js"],"sourcesContent":["function getSelectLabelText(label) {\n if (typeof label === \"string\" || typeof label === \"number\") {\n return String(label);\n }\n if (Array.isArray(label)) {\n return label.map(getSelectLabelText).join(\"\");\n }\n if (label && typeof label === \"object\" && \"props\" in label) {\n return getSelectLabelText(label.props?.children);\n }\n return \"\";\n}\nfunction createSelectItemRegistry(onChange) {\n const items = [];\n const labelRegistrations = /* @__PURE__ */ new Map();\n const explicitTextValues = /* @__PURE__ */ new Map();\n const itemNodes = /* @__PURE__ */ new Map();\n const listeners = /* @__PURE__ */ new Set();\n let indexByValue = null;\n const notify = () => {\n indexByValue = null;\n onChange?.();\n listeners.forEach((listener) => listener());\n };\n const getItems = () => items;\n const getItem = (value) => items.find((item) => item.value === value);\n const getIndex = (value) => {\n if (!indexByValue) {\n indexByValue = /* @__PURE__ */ new Map();\n items.forEach((item, index) => {\n if (!indexByValue.has(item.value)) indexByValue.set(item.value, index);\n });\n }\n return indexByValue.get(value) ?? -1;\n };\n const getNodes = () => items.map((item) => itemNodes.get(item.id) ?? null);\n const getRegisteredLabel = (value) => {\n const registrations = labelRegistrations.get(value);\n if (!registrations?.size) return void 0;\n const values = Array.from(registrations.values());\n return values[values.length - 1];\n };\n const applyRegisteredLabel = (value) => {\n const registeredLabel = getRegisteredLabel(value);\n let changed = false;\n for (const item of items) {\n if (item.value !== value) continue;\n const nextLabel = registeredLabel?.label;\n const nextTextValue = explicitTextValues.get(item.id) || registeredLabel?.textValue;\n if (item.label !== nextLabel || item.textValue !== nextTextValue) {\n item.label = nextLabel;\n item.textValue = nextTextValue;\n changed = true;\n }\n }\n if (changed) notify();\n };\n const syncNodeOrder = () => {\n items.sort((a, b) => {\n const aNode = itemNodes.get(a.id);\n const bNode = itemNodes.get(b.id);\n if (!aNode || !bNode || typeof aNode.compareDocumentPosition !== \"function\") {\n return 0;\n }\n const position = aNode.compareDocumentPosition(bNode);\n if (position & 4) return -1;\n if (position & 2) return 1;\n return 0;\n });\n };\n const registerItem = (item) => {\n const id = Symbol(item.value);\n const registeredLabel = getRegisteredLabel(item.value);\n const registeredItem = {\n ...item,\n ...registeredLabel,\n textValue: item.textValue ?? registeredLabel?.textValue,\n id\n };\n explicitTextValues.set(id, item.textValue);\n items.push(registeredItem);\n notify();\n return {\n id,\n update(next) {\n const index = items.findIndex((current2) => current2.id === id);\n if (index < 0) return;\n const current = items[index];\n if (\"textValue\" in next) {\n explicitTextValues.set(id, next.textValue);\n }\n const nextItem = { ...current, ...next };\n if (next.value !== void 0 && next.value !== current.value) {\n const nextLabel = getRegisteredLabel(next.value);\n nextItem.label = nextLabel?.label;\n }\n const explicitTextValue = explicitTextValues.get(id);\n nextItem.textValue = explicitTextValue || getSelectLabelText(nextItem.label) || (nextItem.label ? nextItem.value : void 0);\n const changed = Object.entries(next).some(\n ([key, value]) => current[key] !== value\n );\n const textValueChanged = current.textValue !== nextItem.textValue;\n if (!changed && !textValueChanged) return;\n items[index] = nextItem;\n notify();\n },\n setNode(node) {\n if ((itemNodes.get(id) ?? null) === (node ?? null)) return;\n if (node) {\n itemNodes.set(id, node);\n syncNodeOrder();\n } else {\n itemNodes.delete(id);\n }\n notify();\n },\n unregister() {\n const index = items.findIndex((current) => current.id === id);\n if (index < 0) return;\n items.splice(index, 1);\n explicitTextValues.delete(id);\n itemNodes.delete(id);\n notify();\n }\n };\n };\n const registerLabel = (value, label, textValue) => {\n const id = Symbol(value);\n const normalizedTextValue = textValue || getSelectLabelText(label) || value;\n const registrations = labelRegistrations.get(value) ?? (() => {\n const next = /* @__PURE__ */ new Map();\n labelRegistrations.set(value, next);\n return next;\n })();\n registrations.set(id, { label, textValue: normalizedTextValue });\n applyRegisteredLabel(value);\n return () => {\n registrations.delete(id);\n if (!registrations.size) {\n labelRegistrations.delete(value);\n }\n applyRegisteredLabel(value);\n };\n };\n const firstEnabledIndex = () => items.findIndex((item) => !item.disabled);\n const nextEnabledIndex = (fromIndex, direction) => {\n if (!items.length) return -1;\n if (fromIndex == null || fromIndex < 0 || fromIndex >= items.length) {\n if (direction === 1) return firstEnabledIndex();\n for (let index = items.length - 1; index >= 0; index--) {\n if (!items[index].disabled) return index;\n }\n return -1;\n }\n for (let offset = 1; offset <= items.length; offset++) {\n const index = (fromIndex + direction * offset + items.length) % items.length;\n if (!items[index]?.disabled) return index;\n }\n return -1;\n };\n const findTypeaheadIndex = (search, fromIndex) => {\n const normalizedSearch = search.trim().toLocaleLowerCase();\n if (!normalizedSearch) return -1;\n const start = fromIndex == null || fromIndex < 0 ? -1 : fromIndex;\n for (let offset = 1; offset <= items.length; offset++) {\n const index = (start + offset) % items.length;\n const item = items[index];\n const label = item.textValue || getSelectLabelText(item.label) || item.value;\n if (!item.disabled && label.toLocaleLowerCase().startsWith(normalizedSearch)) {\n return index;\n }\n }\n return -1;\n };\n return {\n subscribe(listener) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n registerItem,\n registerLabel,\n getItems,\n getItem,\n getIndex,\n getNodes,\n firstEnabledIndex,\n nextEnabledIndex,\n findTypeaheadIndex,\n getDisabledIndices: () => items.flatMap((item, index) => item.disabled ? [index] : []),\n getTypeaheadLabels: () => items.map((item) => item.textValue || getSelectLabelText(item.label) || item.value)\n };\n}\nfunction normalizeSelectSelection(mode, value) {\n if (mode === \"single\") {\n return typeof value === \"string\" ? value : \"\";\n }\n const values = Array.isArray(value) ? value : [];\n return [...new Set(values)];\n}\nfunction selectedValuesFromSelection(mode, value) {\n const normalized = normalizeSelectSelection(mode, value);\n return mode === \"multiple\" ? normalized : normalized ? [normalized] : [];\n}\nfunction createSelectSelectionController({\n mode: initialMode,\n value: initialValue,\n registry\n}) {\n let mode = initialMode;\n let value = normalizeSelectSelection(mode, initialValue);\n let activeIndex = null;\n const selectedValues = () => selectedValuesFromSelection(mode, value);\n const setMode = (nextMode) => {\n if (mode === nextMode) return value;\n mode = nextMode;\n value = normalizeSelectSelection(mode, value);\n return value;\n };\n const setValue = (nextValue) => {\n value = normalizeSelectSelection(mode, nextValue);\n return value;\n };\n const isSelected = (itemValue) => selectedValues().includes(itemValue);\n const toggle = (itemValue) => {\n const item = registry.getItem(itemValue);\n if (!item || item.disabled) return value;\n if (mode === \"single\") {\n value = itemValue;\n return value;\n }\n const current = selectedValues();\n value = current.includes(itemValue) ? current.filter((currentValue) => currentValue !== itemValue) : [...current, itemValue];\n return value;\n };\n const selectionAnchor = () => {\n const values = selectedValues();\n for (let index = values.length - 1; index >= 0; index--) {\n const item = registry.getItem(values[index]);\n if (item) return item;\n }\n const firstEnabledIndex = registry.firstEnabledIndex();\n return firstEnabledIndex < 0 ? void 0 : registry.getItems()[firstEnabledIndex];\n };\n const selectionAnchorIndex = () => {\n const anchor = selectionAnchor();\n return anchor ? registry.getIndex(anchor.value) : -1;\n };\n const initialActiveIndex = () => {\n const anchorIndex = selectionAnchorIndex();\n const anchor = anchorIndex < 0 ? void 0 : registry.getItems()[anchorIndex];\n return anchor && !anchor.disabled ? anchorIndex : registry.firstEnabledIndex();\n };\n const moveActive = (direction) => {\n const nextIndex = registry.nextEnabledIndex(activeIndex, direction);\n activeIndex = nextIndex < 0 ? null : nextIndex;\n return activeIndex == null ? void 0 : registry.getItems()[activeIndex];\n };\n return {\n registry,\n get mode() {\n return mode;\n },\n get value() {\n return value;\n },\n get activeIndex() {\n return activeIndex;\n },\n get activeItem() {\n return activeIndex == null ? void 0 : registry.getItems()[activeIndex];\n },\n get shouldCloseOnSelect() {\n return mode === \"single\";\n },\n setMode,\n setValue,\n isSelected,\n toggle,\n selectionAnchor,\n selectionAnchorIndex,\n initialActiveIndex,\n setActiveIndex(index) {\n activeIndex = index;\n },\n moveActive\n };\n}\nfunction getSelectListboxProps(mode) {\n return {\n role: \"listbox\",\n \"aria-multiselectable\": mode === \"multiple\" ? true : void 0\n };\n}\nfunction getSelectOptionProps(mode, selected, disabled, platform) {\n if (platform === \"native\") {\n return {\n accessibilityRole: mode === \"multiple\" ? \"checkbox\" : \"button\",\n accessibilityState: {\n selected: mode === \"single\" ? selected : void 0,\n checked: mode === \"multiple\" ? selected : void 0,\n disabled\n }\n };\n }\n return {\n role: \"option\",\n \"aria-selected\": selected,\n \"aria-disabled\": disabled || void 0\n };\n}\nexport {\n createSelectItemRegistry,\n createSelectSelectionController,\n getSelectLabelText,\n getSelectListboxProps,\n getSelectOptionProps,\n normalizeSelectSelection,\n selectedValuesFromSelection\n};\n//# sourceMappingURL=selectionController.js.map\n"],"mappings":"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"}