@multiplatform.one/forms 7.80.0 → 7.81.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 (221) hide show
  1. package/dist/cjs/AdaptivePopup/index.cjs +2 -1
  2. package/dist/cjs/AdaptivePopup/index.native.js +2 -1
  3. package/dist/cjs/AdaptivePopup/index.native.js.map +1 -1
  4. package/dist/cjs/Button/index.cjs +12 -5
  5. package/dist/cjs/Button/index.native.js +14 -6
  6. package/dist/cjs/Button/index.native.js.map +1 -1
  7. package/dist/cjs/FloatingPanel/PanelHeader.cjs +3 -8
  8. package/dist/cjs/FloatingPanel/PanelHeader.native.js +3 -8
  9. package/dist/cjs/FloatingPanel/PanelHeader.native.js.map +1 -1
  10. package/dist/cjs/FloatingPanel/coverRect.cjs +0 -8
  11. package/dist/cjs/FloatingPanel/coverRect.native.js +0 -8
  12. package/dist/cjs/FloatingPanel/coverRect.native.js.map +1 -1
  13. package/dist/cjs/FloatingPanel/echoContext.cjs +5 -27
  14. package/dist/cjs/FloatingPanel/echoContext.native.js +5 -28
  15. package/dist/cjs/FloatingPanel/echoContext.native.js.map +1 -1
  16. package/dist/cjs/FloatingPanel/index.cjs +49 -131
  17. package/dist/cjs/FloatingPanel/index.native.js +216 -135
  18. package/dist/cjs/FloatingPanel/index.native.js.map +1 -1
  19. package/dist/cjs/fields/Combobox/index.cjs +3 -10
  20. package/dist/cjs/fields/Combobox/index.native.js +3 -10
  21. package/dist/cjs/fields/Combobox/index.native.js.map +1 -1
  22. package/dist/cjs/fields/Select/InlineChoices.cjs +4 -8
  23. package/dist/cjs/fields/Select/InlineChoices.native.js +4 -8
  24. package/dist/cjs/fields/Select/InlineChoices.native.js.map +1 -1
  25. package/dist/cjs/fields/Select/index.cjs +65 -201
  26. package/dist/cjs/fields/Select/index.native.js +74 -209
  27. package/dist/cjs/fields/Select/index.native.js.map +1 -1
  28. package/dist/cjs/fields/nativeDateTime/OsDateTimeSheet.cjs +2 -2
  29. package/dist/cjs/fields/nativeDateTime/OsDateTimeSheet.native.js +2 -2
  30. package/dist/cjs/fields/nativeDateTime/OsDateTimeSheet.native.js.map +1 -1
  31. package/dist/cjs/index.cjs +4 -0
  32. package/dist/cjs/index.native.js +4 -0
  33. package/dist/cjs/index.native.js.map +1 -1
  34. package/dist/cjs/shared/CheckGlyph.cjs +40 -0
  35. package/dist/cjs/shared/CheckGlyph.native.js +44 -0
  36. package/dist/cjs/shared/CheckGlyph.native.js.map +1 -0
  37. package/dist/cjs/shared/checkedOnField.cjs +104 -0
  38. package/dist/cjs/shared/checkedOnField.native.js +117 -0
  39. package/dist/cjs/shared/checkedOnField.native.js.map +1 -0
  40. package/dist/cjs/shared/floatingList.cjs +12 -5
  41. package/dist/cjs/shared/floatingList.native.js +15 -7
  42. package/dist/cjs/shared/floatingList.native.js.map +1 -1
  43. package/dist/esm/AdaptivePopup/index.mjs +3 -2
  44. package/dist/esm/AdaptivePopup/index.mjs.map +1 -1
  45. package/dist/esm/AdaptivePopup/index.native.js +3 -2
  46. package/dist/esm/AdaptivePopup/index.native.js.map +1 -1
  47. package/dist/esm/Button/index.mjs +12 -5
  48. package/dist/esm/Button/index.mjs.map +1 -1
  49. package/dist/esm/Button/index.native.js +14 -6
  50. package/dist/esm/Button/index.native.js.map +1 -1
  51. package/dist/esm/FloatingPanel/PanelHeader.mjs +3 -8
  52. package/dist/esm/FloatingPanel/PanelHeader.mjs.map +1 -1
  53. package/dist/esm/FloatingPanel/PanelHeader.native.js +3 -8
  54. package/dist/esm/FloatingPanel/PanelHeader.native.js.map +1 -1
  55. package/dist/esm/FloatingPanel/coverRect.mjs +1 -8
  56. package/dist/esm/FloatingPanel/coverRect.mjs.map +1 -1
  57. package/dist/esm/FloatingPanel/coverRect.native.js +1 -8
  58. package/dist/esm/FloatingPanel/coverRect.native.js.map +1 -1
  59. package/dist/esm/FloatingPanel/echoContext.mjs +4 -24
  60. package/dist/esm/FloatingPanel/echoContext.mjs.map +1 -1
  61. package/dist/esm/FloatingPanel/echoContext.native.js +4 -25
  62. package/dist/esm/FloatingPanel/echoContext.native.js.map +1 -1
  63. package/dist/esm/FloatingPanel/index.mjs +53 -135
  64. package/dist/esm/FloatingPanel/index.mjs.map +1 -1
  65. package/dist/esm/FloatingPanel/index.native.js +180 -99
  66. package/dist/esm/FloatingPanel/index.native.js.map +1 -1
  67. package/dist/esm/fields/Combobox/index.mjs +4 -11
  68. package/dist/esm/fields/Combobox/index.mjs.map +1 -1
  69. package/dist/esm/fields/Combobox/index.native.js +4 -11
  70. package/dist/esm/fields/Combobox/index.native.js.map +1 -1
  71. package/dist/esm/fields/Select/InlineChoices.mjs +2 -6
  72. package/dist/esm/fields/Select/InlineChoices.mjs.map +1 -1
  73. package/dist/esm/fields/Select/InlineChoices.native.js +2 -6
  74. package/dist/esm/fields/Select/InlineChoices.native.js.map +1 -1
  75. package/dist/esm/fields/Select/index.mjs +68 -204
  76. package/dist/esm/fields/Select/index.mjs.map +1 -1
  77. package/dist/esm/fields/Select/index.native.js +77 -212
  78. package/dist/esm/fields/Select/index.native.js.map +1 -1
  79. package/dist/esm/fields/nativeDateTime/OsDateTimeSheet.mjs +3 -3
  80. package/dist/esm/fields/nativeDateTime/OsDateTimeSheet.mjs.map +1 -1
  81. package/dist/esm/fields/nativeDateTime/OsDateTimeSheet.native.js +3 -3
  82. package/dist/esm/fields/nativeDateTime/OsDateTimeSheet.native.js.map +1 -1
  83. package/dist/esm/index.mjs +3 -1
  84. package/dist/esm/index.mjs.map +1 -1
  85. package/dist/esm/index.native.js +3 -1
  86. package/dist/esm/index.native.js.map +1 -1
  87. package/dist/esm/shared/CheckGlyph.mjs +15 -0
  88. package/dist/esm/shared/CheckGlyph.mjs.map +1 -0
  89. package/dist/esm/shared/CheckGlyph.native.js +16 -0
  90. package/dist/esm/shared/CheckGlyph.native.js.map +1 -0
  91. package/dist/esm/shared/checkedOnField.mjs +76 -0
  92. package/dist/esm/shared/checkedOnField.mjs.map +1 -0
  93. package/dist/esm/shared/checkedOnField.native.js +86 -0
  94. package/dist/esm/shared/checkedOnField.native.js.map +1 -0
  95. package/dist/esm/shared/floatingList.mjs +9 -5
  96. package/dist/esm/shared/floatingList.mjs.map +1 -1
  97. package/dist/esm/shared/floatingList.native.js +12 -7
  98. package/dist/esm/shared/floatingList.native.js.map +1 -1
  99. package/dist/jsx/AdaptivePopup/index.mjs +3 -2
  100. package/dist/jsx/AdaptivePopup/index.mjs.map +1 -1
  101. package/dist/jsx/AdaptivePopup/index.native.js +2 -1
  102. package/dist/jsx/AdaptivePopup/index.native.js.map +1 -1
  103. package/dist/jsx/Button/index.mjs +12 -5
  104. package/dist/jsx/Button/index.mjs.map +1 -1
  105. package/dist/jsx/Button/index.native.js +14 -6
  106. package/dist/jsx/Button/index.native.js.map +1 -1
  107. package/dist/jsx/FloatingPanel/PanelHeader.mjs +3 -8
  108. package/dist/jsx/FloatingPanel/PanelHeader.mjs.map +1 -1
  109. package/dist/jsx/FloatingPanel/PanelHeader.native.js +3 -8
  110. package/dist/jsx/FloatingPanel/PanelHeader.native.js.map +1 -1
  111. package/dist/jsx/FloatingPanel/coverRect.mjs +1 -8
  112. package/dist/jsx/FloatingPanel/coverRect.mjs.map +1 -1
  113. package/dist/jsx/FloatingPanel/coverRect.native.js +0 -8
  114. package/dist/jsx/FloatingPanel/coverRect.native.js.map +1 -1
  115. package/dist/jsx/FloatingPanel/echoContext.mjs +4 -24
  116. package/dist/jsx/FloatingPanel/echoContext.mjs.map +1 -1
  117. package/dist/jsx/FloatingPanel/echoContext.native.js +5 -28
  118. package/dist/jsx/FloatingPanel/echoContext.native.js.map +1 -1
  119. package/dist/jsx/FloatingPanel/index.mjs +53 -135
  120. package/dist/jsx/FloatingPanel/index.mjs.map +1 -1
  121. package/dist/jsx/FloatingPanel/index.native.js +216 -135
  122. package/dist/jsx/FloatingPanel/index.native.js.map +1 -1
  123. package/dist/jsx/fields/Combobox/index.mjs +4 -11
  124. package/dist/jsx/fields/Combobox/index.mjs.map +1 -1
  125. package/dist/jsx/fields/Combobox/index.native.js +3 -10
  126. package/dist/jsx/fields/Combobox/index.native.js.map +1 -1
  127. package/dist/jsx/fields/Select/InlineChoices.mjs +2 -6
  128. package/dist/jsx/fields/Select/InlineChoices.mjs.map +1 -1
  129. package/dist/jsx/fields/Select/InlineChoices.native.js +4 -8
  130. package/dist/jsx/fields/Select/InlineChoices.native.js.map +1 -1
  131. package/dist/jsx/fields/Select/index.mjs +68 -204
  132. package/dist/jsx/fields/Select/index.mjs.map +1 -1
  133. package/dist/jsx/fields/Select/index.native.js +74 -209
  134. package/dist/jsx/fields/Select/index.native.js.map +1 -1
  135. package/dist/jsx/fields/nativeDateTime/OsDateTimeSheet.mjs +3 -3
  136. package/dist/jsx/fields/nativeDateTime/OsDateTimeSheet.mjs.map +1 -1
  137. package/dist/jsx/fields/nativeDateTime/OsDateTimeSheet.native.js +2 -2
  138. package/dist/jsx/fields/nativeDateTime/OsDateTimeSheet.native.js.map +1 -1
  139. package/dist/jsx/index.js +3 -1
  140. package/dist/jsx/index.js.map +1 -1
  141. package/dist/jsx/index.mjs +3 -1
  142. package/dist/jsx/index.mjs.map +1 -1
  143. package/dist/jsx/index.native.js +4 -0
  144. package/dist/jsx/index.native.js.map +1 -1
  145. package/dist/jsx/shared/CheckGlyph.mjs +15 -0
  146. package/dist/jsx/shared/CheckGlyph.mjs.map +1 -0
  147. package/dist/jsx/shared/CheckGlyph.native.js +44 -0
  148. package/dist/jsx/shared/CheckGlyph.native.js.map +1 -0
  149. package/dist/jsx/shared/checkedOnField.mjs +76 -0
  150. package/dist/jsx/shared/checkedOnField.mjs.map +1 -0
  151. package/dist/jsx/shared/checkedOnField.native.js +117 -0
  152. package/dist/jsx/shared/checkedOnField.native.js.map +1 -0
  153. package/dist/jsx/shared/floatingList.mjs +9 -5
  154. package/dist/jsx/shared/floatingList.mjs.map +1 -1
  155. package/dist/jsx/shared/floatingList.native.js +15 -7
  156. package/dist/jsx/shared/floatingList.native.js.map +1 -1
  157. package/package.json +8 -8
  158. package/src/AdaptivePopup/index.tsx +6 -3
  159. package/src/Button/Button.iconButton.spec.tsx +39 -0
  160. package/src/Button/index.tsx +20 -8
  161. package/src/FloatingPanel/FloatingPanel.iconCover.spec.tsx +279 -0
  162. package/src/FloatingPanel/FloatingPanel.menuFace.native.spec.tsx +78 -69
  163. package/src/FloatingPanel/FloatingPanel.seamlessCover.spec.tsx +12 -0
  164. package/src/FloatingPanel/PanelHeader.tsx +4 -12
  165. package/src/FloatingPanel/coverRect.ts +2 -15
  166. package/src/FloatingPanel/echoContext.ts +6 -40
  167. package/src/FloatingPanel/index.native.tsx +209 -144
  168. package/src/FloatingPanel/index.tsx +71 -187
  169. package/src/FloatingPanel/pointAnchor.spec.ts +1 -1
  170. package/src/FloatingPanel/pointAnchor.ts +4 -4
  171. package/src/FloatingPanel/sheetGrabber.spec.tsx +53 -0
  172. package/src/fields/Combobox/index.tsx +4 -9
  173. package/src/fields/Select/InlineChoices.tsx +2 -2
  174. package/src/fields/Select/Select.containingBlock.spec.tsx +131 -130
  175. package/src/fields/Select/Select.popUp.native.spec.tsx +276 -0
  176. package/src/fields/Select/Select.stories.tsx +26 -0
  177. package/src/fields/Select/index.tsx +84 -255
  178. package/src/fields/nativeDateTime/OsDateTimeSheet.tsx +3 -3
  179. package/src/index.ts +2 -1
  180. package/src/shared/CheckGlyph.tsx +12 -0
  181. package/src/shared/checkedOnField.ts +116 -0
  182. package/src/shared/floatingList.spec.tsx +154 -1
  183. package/src/shared/floatingList.tsx +18 -9
  184. package/types/AdaptivePopup/index.d.ts.map +1 -1
  185. package/types/Button/index.d.ts.map +1 -1
  186. package/types/FloatingPanel/PanelHeader.d.ts +1 -6
  187. package/types/FloatingPanel/PanelHeader.d.ts.map +1 -1
  188. package/types/FloatingPanel/coverRect.d.ts +2 -11
  189. package/types/FloatingPanel/coverRect.d.ts.map +1 -1
  190. package/types/FloatingPanel/echoContext.d.ts +5 -22
  191. package/types/FloatingPanel/echoContext.d.ts.map +1 -1
  192. package/types/FloatingPanel/index.d.ts +22 -9
  193. package/types/FloatingPanel/index.d.ts.map +1 -1
  194. package/types/FloatingPanel/index.native.d.ts +8 -1
  195. package/types/FloatingPanel/index.native.d.ts.map +1 -1
  196. package/types/FloatingPanel/pointAnchor.d.ts +4 -4
  197. package/types/fields/Combobox/index.d.ts.map +1 -1
  198. package/types/fields/Select/index.d.ts.map +1 -1
  199. package/types/index.d.ts +2 -1
  200. package/types/index.d.ts.map +1 -1
  201. package/types/shared/CheckGlyph.d.ts +10 -0
  202. package/types/shared/CheckGlyph.d.ts.map +1 -0
  203. package/types/shared/checkedOnField.d.ts +54 -0
  204. package/types/shared/checkedOnField.d.ts.map +1 -0
  205. package/types/shared/floatingList.d.ts +5 -2
  206. package/types/shared/floatingList.d.ts.map +1 -1
  207. package/dist/cjs/FloatingPanel/iconEcho.cjs +0 -106
  208. package/dist/cjs/FloatingPanel/iconEcho.native.js +0 -116
  209. package/dist/cjs/FloatingPanel/iconEcho.native.js.map +0 -1
  210. package/dist/esm/FloatingPanel/iconEcho.mjs +0 -79
  211. package/dist/esm/FloatingPanel/iconEcho.mjs.map +0 -1
  212. package/dist/esm/FloatingPanel/iconEcho.native.js +0 -86
  213. package/dist/esm/FloatingPanel/iconEcho.native.js.map +0 -1
  214. package/dist/jsx/FloatingPanel/iconEcho.mjs +0 -79
  215. package/dist/jsx/FloatingPanel/iconEcho.mjs.map +0 -1
  216. package/dist/jsx/FloatingPanel/iconEcho.native.js +0 -116
  217. package/dist/jsx/FloatingPanel/iconEcho.native.js.map +0 -1
  218. package/src/FloatingPanel/FloatingPanel.iconEcho.spec.tsx +0 -357
  219. package/src/FloatingPanel/iconEcho.tsx +0 -124
  220. package/types/FloatingPanel/iconEcho.d.ts +0 -29
  221. package/types/FloatingPanel/iconEcho.d.ts.map +0 -1
@@ -40,6 +40,7 @@ __export(Select_exports, {
40
40
  module.exports = __toCommonJS(Select_exports);
41
41
  var import_jsx_runtime = require("react/jsx-runtime");
42
42
  var import_theme = require("@multiplatform.one/theme");
43
+ var import_CheckGlyph = require("../../shared/CheckGlyph.native.js");
43
44
  var import_react = require("react");
44
45
  var import_react2 = require("@phosphor-icons/react");
45
46
  var import_react3 = require("@floating-ui/react");
@@ -470,11 +471,7 @@ var SelectItem = /* @__PURE__ */(0, import_react.memo)(function SelectItem2(para
470
471
  numberOfLines: 1,
471
472
  flex: 1,
472
473
  children: option.label
473
- }), isSelected && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_react2.CheckIcon, {
474
- size: 14,
475
- weight: "bold",
476
- color: ctx.markColor
477
- })]
474
+ }), isSelected && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_CheckGlyph.CheckGlyph, {})]
478
475
  });
479
476
  });
480
477
  function FloatingSelectCore(param) {
@@ -495,8 +492,8 @@ function FloatingSelectCore(param) {
495
492
  dismissible,
496
493
  panelWidth
497
494
  } = param;
498
- var _ref, _ref1, _ref2, _panel_x, _ref3, _ref4;
499
- var _overlayStyle_current, _panel_triggerRef_current;
495
+ var _ref, _ref1, _ref2, _panel_x;
496
+ var _overlayStyle_current;
500
497
  var overlayZIndex = (0, import_overlayStack.useOverlayZIndex)("dropdown");
501
498
  var {
502
499
  style: elevatedSurfaceStyle,
@@ -604,38 +601,23 @@ function FloatingSelectCore(param) {
604
601
  sortedOptionsRef.current = (0, import_selectedOrder.orderOptionsBySelected)(options, selected, selectedOrder);
605
602
  }, [options, value, multiple, selectedOrder]);
606
603
  var programmaticScrollRef = (0, import_react.useRef)(0);
607
- var pinnedTopRef = (0, import_react.useRef)(0);
608
- var pinnedHeightRef = (0, import_react.useRef)(0);
609
- var grownRef = (0, import_react.useRef)(false);
610
- var growUpOnlyRef = (0, import_react.useRef)(false);
611
- var growDownOnlyRef = (0, import_react.useRef)(false);
612
604
  var lastScrollTopRef = (0, import_react.useRef)(0);
613
- var coverScrollRef = (0, import_react.useRef)(false);
614
- var [coverScroll, setCoverScroll] = (0, import_react.useState)(false);
615
- var growsUpRef = (0, import_react.useRef)(false);
616
- var coverTrimRef = (0, import_react.useRef)(0);
617
- var echoed = !beside && !coverScroll;
605
+ var onFieldRef = (0, import_react.useRef)(null);
606
+ var opensUpRef = (0, import_react.useRef)(false);
607
+ var arrowBand = (0, import_floatingList.scrollArrowBand)(knobProps.menuRow.minHeight);
618
608
  var repositionRef = (0, import_react.useRef)(null);
619
609
  var panel = (0, import_FloatingPanel.useFloatingPanel)({
620
610
  open,
621
611
  onOpenChange: setOpen,
622
612
  disabled,
623
613
  repositionRef,
624
- wheelGrowRef: selectedIndex >= 0 ? grownRef : void 0,
625
614
  onBeforeOpen: function onBeforeOpen() {
626
615
  computeSortedOptions();
627
616
  overlayStyle.current = null;
628
- pinnedTopRef.current = 0;
629
- pinnedHeightRef.current = 0;
630
- grownRef.current = false;
631
- growUpOnlyRef.current = false;
632
- growDownOnlyRef.current = false;
633
617
  lastScrollTopRef.current = 0;
634
618
  programmaticScrollRef.current = 0;
635
- coverScrollRef.current = false;
636
- growsUpRef.current = false;
637
- coverTrimRef.current = 0;
638
- setCoverScroll(false);
619
+ onFieldRef.current = null;
620
+ opensUpRef.current = false;
639
621
  },
640
622
  panelWidth
641
623
  });
@@ -698,10 +680,6 @@ function FloatingSelectCore(param) {
698
680
  if (!selectedItem) return;
699
681
  var isInitial1 = panel.initializingRef.current;
700
682
  if (isInitial1) dropdownElement.style.transition = "none";
701
- if (pinnedTopRef.current === 0 && pinnedHeightRef.current === 0) {
702
- programmaticScrollRef.current++;
703
- dropdownElement.scrollTop = 0;
704
- }
705
683
  var triggerBounds = trigger.getBoundingClientRect();
706
684
  var viewportHeight = window.innerHeight;
707
685
  var originTop = (0, import_containingBlock.fixedContainingBlockOrigin)(dropdownElement).top;
@@ -710,164 +688,54 @@ function FloatingSelectCore(param) {
710
688
  var borderBottomWidth = parseFloat(computedStyle.borderBottomWidth) || 0;
711
689
  var totalBorderWidth = borderTopWidth + borderBottomWidth;
712
690
  var scrollContentHeight = dropdownElement.scrollHeight;
713
- var totalContentHeight = scrollContentHeight + totalBorderWidth;
714
- var firstPlacement = pinnedTopRef.current === 0 && pinnedHeightRef.current === 0;
715
- var boundsTop = import_FloatingPanel.panelViewportPadding;
716
- var boundsBottom = viewportHeight - import_FloatingPanel.panelViewportPadding;
717
- var echoRow = dropdownElement.querySelector("[data-fp-trigger-row]");
718
- var echoHeight = echoRow ? triggerBounds.height : 0;
719
- var listHeight = totalContentHeight - echoHeight;
720
- var roomBelow = boundsBottom - triggerBounds.top;
721
- var roomAbove = triggerBounds.bottom - boundsTop;
722
- if (firstPlacement && totalContentHeight > roomBelow) {
723
- coverScrollRef.current = true;
724
- growsUpRef.current = roomAbove > roomBelow;
725
- setCoverScroll(true);
726
- }
727
- if (coverScrollRef.current) {
728
- var grown = grownRef.current || growUpOnlyRef.current || growDownOnlyRef.current;
729
- var room = grown ? boundsBottom - boundsTop : growsUpRef.current ? roomAbove : roomBelow;
730
- var trim = grown ? 0 : coverTrimRef.current;
731
- var height = Math.max(0, Math.min(listHeight, room - trim));
732
- var anchor = growsUpRef.current ? triggerBounds.bottom - height : triggerBounds.top;
733
- var top1 = Math.min(Math.max(anchor, boundsTop), boundsBottom - height);
734
- var previousTop = pinnedTopRef.current;
735
- if (!overlayStyle.current || overlayStyle.current.top !== top1 - originTop || overlayStyle.current.maxHeight !== height) {
736
- dropdownElement.style.top = `${top1 - originTop}px`;
737
- dropdownElement.style.maxHeight = `${height}px`;
738
- dropdownElement.style.height = "";
739
- overlayStyle.current = {
740
- top: top1 - originTop,
741
- maxHeight: height
742
- };
743
- void dropdownElement.offsetHeight;
744
- }
745
- pinnedTopRef.current = top1;
746
- pinnedHeightRef.current = height;
747
- if (grown && previousTop > top1 && dropdownElement.scrollTop > 0) {
748
- programmaticScrollRef.current++;
749
- dropdownElement.scrollTop = Math.max(0, dropdownElement.scrollTop - (previousTop - top1));
750
- }
751
- if (echoRow) return;
752
- var rowHeight = selectedItem.offsetHeight || 1;
753
- if (isInitial1 && selectedIndex >= 0) {
754
- var maxScrollTop = dropdownElement.scrollHeight - dropdownElement.clientHeight;
755
- var scrollTop;
756
- if (growsUpRef.current) {
757
- scrollTop = selectedItem.offsetTop + rowHeight - (triggerBounds.bottom - top1);
758
- } else {
759
- var short = Math.max(0, selectedItem.offsetTop - maxScrollTop - 2);
760
- scrollTop = selectedItem.offsetTop - Math.ceil(short / rowHeight) * rowHeight;
761
- }
762
- programmaticScrollRef.current++;
763
- dropdownElement.scrollTop = Math.min(maxScrollTop, Math.max(0, scrollTop));
764
- }
765
- if (isInitial1 && !grown) {
766
- var firstRow = listItemsRef.current[0];
767
- var visibleBottom = dropdownElement.scrollTop + dropdownElement.clientHeight;
768
- if (firstRow && visibleBottom < dropdownElement.scrollHeight - 2) {
769
- var cut = (visibleBottom - firstRow.offsetTop) % rowHeight;
770
- if (cut > 3 && cut < rowHeight - 3) {
771
- coverTrimRef.current = cut;
772
- var trimmedHeight = height - cut;
773
- var trimmedTop = growsUpRef.current ? top1 + cut : top1;
774
- dropdownElement.style.top = `${trimmedTop - originTop}px`;
775
- dropdownElement.style.maxHeight = `${trimmedHeight}px`;
776
- overlayStyle.current = {
777
- top: trimmedTop - originTop,
778
- maxHeight: trimmedHeight
779
- };
780
- pinnedTopRef.current = trimmedTop;
781
- pinnedHeightRef.current = trimmedHeight;
782
- }
783
- }
784
- }
785
- panel.initializingRef.current = false;
786
- void dropdownElement.offsetHeight;
787
- if (isInitial1) dropdownElement.style.transition = panel.panelTransition;
788
- requestAnimationFrame(function () {
789
- if (dropdownElement) panel.updateArrows(dropdownElement);
691
+ var boundsTop = import_FloatingPanel.panelViewportPadding + borderTopWidth;
692
+ var boundsBottom = viewportHeight - import_FloatingPanel.panelViewportPadding - borderBottomWidth;
693
+ if (!onFieldRef.current) {
694
+ var fit = (0, import_floatingList.placeCheckedOnField)({
695
+ fieldTop: triggerBounds.top,
696
+ fieldBottom: triggerBounds.bottom,
697
+ rowTop: selectedItem.offsetTop,
698
+ rowHeight: selectedItem.offsetHeight || 1,
699
+ contentHeight: scrollContentHeight,
700
+ boundsTop,
701
+ boundsBottom,
702
+ band: arrowBand
703
+ });
704
+ onFieldRef.current = fit;
705
+ opensUpRef.current = fit.top + fit.height / 2 < (triggerBounds.top + triggerBounds.bottom) / 2;
706
+ } else if (!isInitial1) {
707
+ onFieldRef.current = (0, import_floatingList.growOnScroll)({
708
+ ...onFieldRef.current,
709
+ scrollTop: dropdownElement.scrollTop,
710
+ contentHeight: scrollContentHeight,
711
+ boundsTop,
712
+ boundsBottom
790
713
  });
791
- return;
792
- }
793
- var idealTop = triggerBounds.top;
794
- var idealBottom = idealTop + totalContentHeight;
795
- var pinnedTop = Math.max(import_FloatingPanel.panelViewportPadding, idealTop);
796
- var pinnedBottom = Math.min(viewportHeight - import_FloatingPanel.panelViewportPadding, idealBottom);
797
- var pinnedHeight = Math.max(120, pinnedBottom - pinnedTop);
798
- if (firstPlacement) {
799
- pinnedTopRef.current = pinnedTop;
800
- pinnedHeightRef.current = pinnedHeight;
801
- }
802
- var top2 = pinnedTopRef.current;
803
- var height1 = pinnedHeightRef.current;
804
- if (grownRef.current) {
805
- var canGrowDown = Math.max(0, viewportHeight - import_FloatingPanel.panelViewportPadding - (top2 + height1));
806
- height1 += canGrowDown;
807
- var canGrowUp = Math.max(0, top2 - import_FloatingPanel.panelViewportPadding);
808
- top2 -= canGrowUp;
809
- height1 += canGrowUp;
810
- }
811
- if (growUpOnlyRef.current) {
812
- var canGrowUp1 = Math.max(0, top2 - import_FloatingPanel.panelViewportPadding);
813
- top2 -= canGrowUp1;
814
- height1 += canGrowUp1;
815
- }
816
- if (growDownOnlyRef.current) {
817
- var canGrowDown1 = Math.max(0, viewportHeight - import_FloatingPanel.panelViewportPadding - (top2 + height1));
818
- height1 += canGrowDown1;
819
- }
820
- height1 = Math.min(height1, viewportHeight - top2 - import_FloatingPanel.panelViewportPadding);
821
- height1 = Math.min(height1, totalContentHeight);
822
- height1 = Math.max(120, height1);
823
- var availableViewport = viewportHeight - 2 * import_FloatingPanel.panelViewportPadding;
824
- if ((grownRef.current || growUpOnlyRef.current || growDownOnlyRef.current) && height1 < availableViewport) {
825
- if (panel.placement.startsWith("top")) {
826
- top2 = import_FloatingPanel.panelViewportPadding;
827
- } else {
828
- top2 = viewportHeight - import_FloatingPanel.panelViewportPadding - height1;
829
- }
830
714
  }
831
- var cachedOverlayStyle = overlayStyle.current;
832
- if (!cachedOverlayStyle || cachedOverlayStyle.top !== top2 - originTop || cachedOverlayStyle.maxHeight !== height1) {
833
- dropdownElement.style.top = `${top2 - originTop}px`;
834
- dropdownElement.style.maxHeight = `${height1}px`;
715
+ var placed = onFieldRef.current;
716
+ var top1 = placed.top - borderTopWidth;
717
+ var height = placed.height + totalBorderWidth;
718
+ if (!overlayStyle.current || overlayStyle.current.top !== top1 - originTop || overlayStyle.current.maxHeight !== height) {
719
+ dropdownElement.style.top = `${top1 - originTop}px`;
720
+ dropdownElement.style.maxHeight = `${height}px`;
835
721
  dropdownElement.style.height = "";
836
722
  overlayStyle.current = {
837
- top: top2 - originTop,
838
- maxHeight: height1
723
+ top: top1 - originTop,
724
+ maxHeight: height
839
725
  };
840
726
  void dropdownElement.offsetHeight;
841
727
  }
842
- if (isInitial1 && selectedIndex >= 0 && !grownRef.current && !growUpOnlyRef.current && !growDownOnlyRef.current) {
843
- var rowBottom = selectedItem.offsetTop + selectedItem.offsetHeight;
844
- if (rowBottom > dropdownElement.clientHeight) {
845
- var maxScrollTop1 = dropdownElement.scrollHeight - dropdownElement.clientHeight;
846
- programmaticScrollRef.current++;
847
- dropdownElement.scrollTop = Math.max(0, Math.min(selectedItem.offsetTop - echoHeight, maxScrollTop1));
848
- }
728
+ if (Math.abs(dropdownElement.scrollTop - placed.scrollTop) >= 0.5) {
729
+ programmaticScrollRef.current++;
730
+ dropdownElement.scrollTop = placed.scrollTop;
849
731
  }
850
- (0, import_FloatingPanel.placeEchoOverTrigger)(dropdownElement, {
851
- triggerLeft: triggerBounds.left,
852
- triggerRight: triggerBounds.right,
853
- panelLeft: dropdownElement.getBoundingClientRect().left,
854
- panelWidth: dropdownElement.offsetWidth,
855
- rtl: getComputedStyle(trigger).direction === "rtl"
856
- }, {
857
- stretch: panelWidth !== void 0
858
- });
859
732
  panel.initializingRef.current = false;
860
733
  void dropdownElement.offsetHeight;
861
734
  if (isInitial1) dropdownElement.style.transition = panel.panelTransition;
862
735
  requestAnimationFrame(function () {
863
- if (dropdownElement) {
864
- panel.updateArrows(dropdownElement);
865
- requestAnimationFrame(function () {
866
- if (dropdownElement) panel.updateArrows(dropdownElement);
867
- });
868
- }
736
+ if (dropdownElement) panel.updateArrows(dropdownElement);
869
737
  });
870
- }, [selectedIndex, panel.refs, panel.updateArrows, panel.placement, panel.panelTransition, options.length, beside, coverScroll, panelWidth]);
738
+ }, [selectedIndex, panel.refs, panel.updateArrows, panel.panelTransition, options.length, beside, arrowBand]);
871
739
  repositionRef.current = repositionOverlay;
872
740
  (0, import_react.useLayoutEffect)(function () {
873
741
  if (!open || !panel.mounted) return;
@@ -1061,23 +929,10 @@ function FloatingSelectCore(param) {
1061
929
  return;
1062
930
  }
1063
931
  var arrowDir = panel.arrowScrollDirRef.current;
1064
- if (arrowDir) {
1065
- panel.arrowScrollDirRef.current = null;
1066
- lastScrollTopRef.current = el.scrollTop;
1067
- if (arrowDir === "down") {
1068
- growUpOnlyRef.current = true;
1069
- } else {
1070
- growDownOnlyRef.current = true;
1071
- }
1072
- repositionOverlay();
1073
- return;
1074
- }
932
+ if (arrowDir) panel.arrowScrollDirRef.current = null;
1075
933
  var delta = el.scrollTop - lastScrollTopRef.current;
1076
934
  lastScrollTopRef.current = el.scrollTop;
1077
- if (delta !== 0) {
1078
- grownRef.current = true;
1079
- repositionOverlay();
1080
- }
935
+ if (delta !== 0) repositionOverlay();
1081
936
  }, [panel.updateArrows, repositionOverlay]);
1082
937
  return /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, {
1083
938
  children: [/* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_InputParts.Input.Box, {
@@ -1194,7 +1049,7 @@ function FloatingSelectCore(param) {
1194
1049
  opacity: panel.visible ? 1 : 0,
1195
1050
  transform: panel.visible ? "scale(1)" : "scale(0.96)",
1196
1051
  transition: panel.panelTransition,
1197
- transformOrigin: coverScroll && growsUpRef.current || panel.placement.startsWith("top") ? "bottom left" : "top left",
1052
+ transformOrigin: opensUpRef.current ? "bottom left" : "top left",
1198
1053
  ...dragProps.style
1199
1054
  },
1200
1055
  onPointerDown: dragProps.onPointerDown,
@@ -1238,19 +1093,12 @@ function FloatingSelectCore(param) {
1238
1093
  "data-testid": "select-dropdown",
1239
1094
  paddingVertical: 0,
1240
1095
  paddingBottom: panel.coverCornerInset || 0,
1241
- children: [echoed ? /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_FloatingPanel.TriggerEchoRow, {
1242
- sourceRef: panel.triggerRef,
1243
- source: (_ref3 = selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.label) !== null && _ref3 !== void 0 ? _ref3 : placeholder,
1244
- onPress: function onPress() {
1245
- return setOpen(false);
1246
- },
1247
- presentational: true
1248
- }) : null, /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_floatingList.ScrollArrow, {
1096
+ children: [/* @__PURE__ */(0, import_jsx_runtime.jsx)(import_floatingList.ScrollArrow, {
1249
1097
  direction: "up",
1250
1098
  scrollRef: panel.refs.floating,
1251
1099
  visible: panel.arrowUp,
1252
1100
  arrowScrollDirRef: panel.arrowScrollDirRef,
1253
- topOffset: echoed ? (_ref4 = (_panel_triggerRef_current = panel.triggerRef.current) === null || _panel_triggerRef_current === void 0 ? void 0 : _panel_triggerRef_current.getBoundingClientRect().height) !== null && _ref4 !== void 0 ? _ref4 : 0 : 0
1101
+ band: arrowBand
1254
1102
  }), groupLabel && /* @__PURE__ */(0, import_jsx_runtime.jsx)(GroupHeader, {
1255
1103
  color: textColor,
1256
1104
  paddingHorizontal: knobProps.panelPadding.padding,
@@ -1287,7 +1135,8 @@ function FloatingSelectCore(param) {
1287
1135
  direction: "down",
1288
1136
  scrollRef: panel.refs.floating,
1289
1137
  visible: panel.arrowDown,
1290
- arrowScrollDirRef: panel.arrowScrollDirRef
1138
+ arrowScrollDirRef: panel.arrowScrollDirRef,
1139
+ band: arrowBand
1291
1140
  })]
1292
1141
  })
1293
1142
  })
@@ -1317,6 +1166,7 @@ function NativeSelectCore(param) {
1317
1166
  var insideOverlay = (0, import_overlayStack.useInsideOverlay)();
1318
1167
  var compactFace = (0, import_compactFace.pickerCompactFace)(options.length);
1319
1168
  var asMenu = (0, import_compactFace.resolveCompactFace)(compactFace, insideOverlay) === "menu";
1169
+ var beside = asMenu && insideOverlay && (0, import_shouldInlineChoices.opensBesideTrigger)(options.length);
1320
1170
  var hydrationTouch = (0, import_theme.useTouchSurface)();
1321
1171
  var describedBy = (0, import_fieldLayout.useFieldDescribedBy)();
1322
1172
  var fieldA11y = (0, import_fieldLayout.useFieldA11y)();
@@ -1408,6 +1258,10 @@ function NativeSelectCore(param) {
1408
1258
  });
1409
1259
  }
1410
1260
  }, [open, selectedIndex]);
1261
+ var [onFieldRow, setOnFieldRow] = (0, import_react.useState)(null);
1262
+ (0, import_react.useEffect)(function () {
1263
+ if (!open) setOnFieldRow(null);
1264
+ }, [open]);
1411
1265
  var handleSelect = (0, import_react.useCallback)(function (optionValue) {
1412
1266
  if (multiple) {
1413
1267
  var current = Array.isArray(value) ? value : value ? [value] : [];
@@ -1532,11 +1386,7 @@ function NativeSelectCore(param) {
1532
1386
  numberOfLines: 1,
1533
1387
  flex: 1,
1534
1388
  children: option.label
1535
- }), selected && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_react2.CheckIcon, {
1536
- size: 14,
1537
- weight: "bold",
1538
- color: markColor
1539
- })]
1389
+ }), selected && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_CheckGlyph.CheckGlyph, {})]
1540
1390
  }, import_tamagui.isWeb ? option.value : void 0);
1541
1391
  if (import_tamagui.isWeb) return row;
1542
1392
  return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_react_native.Pressable, {
@@ -1548,6 +1398,17 @@ function NativeSelectCore(param) {
1548
1398
  accessibilityState: {
1549
1399
  selected
1550
1400
  },
1401
+ onLayout: i === Math.max(selectedIndex, 0) ? function (param2) {
1402
+ var {
1403
+ nativeEvent: {
1404
+ layout
1405
+ }
1406
+ } = param2;
1407
+ return setOnFieldRow({
1408
+ top: layout.y,
1409
+ height: layout.height
1410
+ });
1411
+ } : void 0,
1551
1412
  children: row
1552
1413
  }, option.value);
1553
1414
  })]
@@ -1636,10 +1497,14 @@ function NativeSelectCore(param) {
1636
1497
  // sheet at page level and opens as a menu inside another overlay (FZ-7830).
1637
1498
  compactFace,
1638
1499
  panelWidth,
1639
- ...(asMenu && insideOverlay && (0, import_shouldInlineChoices.opensBesideTrigger)(options.length) ? {
1500
+ ...(beside ? {
1640
1501
  anchorMode: "attach",
1641
1502
  triggerEcho: false
1642
- } : null),
1503
+ } : import_tamagui.isWeb || displayOptions.length === 0 ? null : {
1504
+ popUp: {
1505
+ row: onFieldRow
1506
+ }
1507
+ }),
1643
1508
  triggerA11y: {
1644
1509
  label: ariaLabel !== null && ariaLabel !== void 0 ? ariaLabel : fieldA11y === null || fieldA11y === void 0 ? void 0 : fieldA11y.label,
1645
1510
  value: triggerValueText,