@multiplatform.one/forms 7.21.0 → 7.23.0

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 (103) hide show
  1. package/dist/cjs/FloatingPanel/index.cjs +85 -29
  2. package/dist/cjs/FloatingPanel/index.native.js +108 -11
  3. package/dist/cjs/FloatingPanel/index.native.js.map +1 -1
  4. package/dist/cjs/FloatingPanel/pointAnchor.cjs +88 -0
  5. package/dist/cjs/FloatingPanel/pointAnchor.native.js +98 -0
  6. package/dist/cjs/FloatingPanel/pointAnchor.native.js.map +1 -0
  7. package/dist/cjs/FloatingPanel/useFloatingPanel.cjs +4 -3
  8. package/dist/cjs/FloatingPanel/useFloatingPanel.native.js +4 -3
  9. package/dist/cjs/FloatingPanel/useFloatingPanel.native.js.map +1 -1
  10. package/dist/cjs/InputParts/index.cjs +9 -1
  11. package/dist/cjs/InputParts/index.native.js +9 -1
  12. package/dist/cjs/InputParts/index.native.js.map +1 -1
  13. package/dist/cjs/fields/Combobox/index.cjs +0 -2
  14. package/dist/cjs/fields/Combobox/index.native.js +0 -2
  15. package/dist/cjs/fields/Combobox/index.native.js.map +1 -1
  16. package/dist/cjs/fields/Select/index.cjs +2 -4
  17. package/dist/cjs/fields/Select/index.native.js +2 -4
  18. package/dist/cjs/fields/Select/index.native.js.map +1 -1
  19. package/dist/cjs/shared/utils.cjs +2 -1
  20. package/dist/cjs/shared/utils.native.js +2 -1
  21. package/dist/cjs/shared/utils.native.js.map +1 -1
  22. package/dist/esm/FloatingPanel/index.mjs +86 -30
  23. package/dist/esm/FloatingPanel/index.mjs.map +1 -1
  24. package/dist/esm/FloatingPanel/index.native.js +107 -10
  25. package/dist/esm/FloatingPanel/index.native.js.map +1 -1
  26. package/dist/esm/FloatingPanel/pointAnchor.mjs +59 -0
  27. package/dist/esm/FloatingPanel/pointAnchor.mjs.map +1 -0
  28. package/dist/esm/FloatingPanel/pointAnchor.native.js +66 -0
  29. package/dist/esm/FloatingPanel/pointAnchor.native.js.map +1 -0
  30. package/dist/esm/FloatingPanel/useFloatingPanel.mjs +4 -3
  31. package/dist/esm/FloatingPanel/useFloatingPanel.mjs.map +1 -1
  32. package/dist/esm/FloatingPanel/useFloatingPanel.native.js +4 -3
  33. package/dist/esm/FloatingPanel/useFloatingPanel.native.js.map +1 -1
  34. package/dist/esm/InputParts/index.mjs +10 -2
  35. package/dist/esm/InputParts/index.mjs.map +1 -1
  36. package/dist/esm/InputParts/index.native.js +10 -2
  37. package/dist/esm/InputParts/index.native.js.map +1 -1
  38. package/dist/esm/fields/Combobox/index.mjs +0 -2
  39. package/dist/esm/fields/Combobox/index.mjs.map +1 -1
  40. package/dist/esm/fields/Combobox/index.native.js +0 -2
  41. package/dist/esm/fields/Combobox/index.native.js.map +1 -1
  42. package/dist/esm/fields/Select/index.mjs +2 -4
  43. package/dist/esm/fields/Select/index.mjs.map +1 -1
  44. package/dist/esm/fields/Select/index.native.js +2 -4
  45. package/dist/esm/fields/Select/index.native.js.map +1 -1
  46. package/dist/esm/shared/utils.mjs +2 -1
  47. package/dist/esm/shared/utils.mjs.map +1 -1
  48. package/dist/esm/shared/utils.native.js +2 -1
  49. package/dist/esm/shared/utils.native.js.map +1 -1
  50. package/dist/jsx/FloatingPanel/index.mjs +86 -30
  51. package/dist/jsx/FloatingPanel/index.mjs.map +1 -1
  52. package/dist/jsx/FloatingPanel/index.native.js +108 -11
  53. package/dist/jsx/FloatingPanel/index.native.js.map +1 -1
  54. package/dist/jsx/FloatingPanel/pointAnchor.mjs +59 -0
  55. package/dist/jsx/FloatingPanel/pointAnchor.mjs.map +1 -0
  56. package/dist/jsx/FloatingPanel/pointAnchor.native.js +98 -0
  57. package/dist/jsx/FloatingPanel/pointAnchor.native.js.map +1 -0
  58. package/dist/jsx/FloatingPanel/useFloatingPanel.mjs +4 -3
  59. package/dist/jsx/FloatingPanel/useFloatingPanel.mjs.map +1 -1
  60. package/dist/jsx/FloatingPanel/useFloatingPanel.native.js +4 -3
  61. package/dist/jsx/FloatingPanel/useFloatingPanel.native.js.map +1 -1
  62. package/dist/jsx/InputParts/index.mjs +10 -2
  63. package/dist/jsx/InputParts/index.mjs.map +1 -1
  64. package/dist/jsx/InputParts/index.native.js +9 -1
  65. package/dist/jsx/InputParts/index.native.js.map +1 -1
  66. package/dist/jsx/fields/Combobox/index.mjs +0 -2
  67. package/dist/jsx/fields/Combobox/index.mjs.map +1 -1
  68. package/dist/jsx/fields/Combobox/index.native.js +0 -2
  69. package/dist/jsx/fields/Combobox/index.native.js.map +1 -1
  70. package/dist/jsx/fields/Select/index.mjs +2 -4
  71. package/dist/jsx/fields/Select/index.mjs.map +1 -1
  72. package/dist/jsx/fields/Select/index.native.js +2 -4
  73. package/dist/jsx/fields/Select/index.native.js.map +1 -1
  74. package/dist/jsx/shared/utils.mjs +2 -1
  75. package/dist/jsx/shared/utils.mjs.map +1 -1
  76. package/dist/jsx/shared/utils.native.js +2 -1
  77. package/dist/jsx/shared/utils.native.js.map +1 -1
  78. package/package.json +18 -8
  79. package/src/FloatingPanel/FloatingPanel.pointMenu.native.spec.tsx +126 -0
  80. package/src/FloatingPanel/index.native.tsx +199 -81
  81. package/src/FloatingPanel/index.tsx +130 -42
  82. package/src/FloatingPanel/pointAnchor.spec.ts +141 -0
  83. package/src/FloatingPanel/pointAnchor.ts +122 -0
  84. package/src/FloatingPanel/useFloatingPanel.ts +9 -2
  85. package/src/InputParts/index.tsx +20 -1
  86. package/src/fieldFamilyStories.radius.spec.tsx +23 -15
  87. package/src/fields/Combobox/index.tsx +0 -2
  88. package/src/fields/Input/Input.spec.tsx +23 -0
  89. package/src/fields/Select/index.tsx +6 -4
  90. package/src/shared/utils.ts +7 -2
  91. package/types/FloatingPanel/index.d.ts +4 -1
  92. package/types/FloatingPanel/index.d.ts.map +1 -1
  93. package/types/FloatingPanel/index.native.d.ts +5 -0
  94. package/types/FloatingPanel/index.native.d.ts.map +1 -1
  95. package/types/FloatingPanel/pointAnchor.d.ts +66 -0
  96. package/types/FloatingPanel/pointAnchor.d.ts.map +1 -0
  97. package/types/FloatingPanel/useFloatingPanel.d.ts +7 -1
  98. package/types/FloatingPanel/useFloatingPanel.d.ts.map +1 -1
  99. package/types/InputParts/index.d.ts.map +1 -1
  100. package/types/fields/Combobox/index.d.ts.map +1 -1
  101. package/types/fields/Select/index.d.ts.map +1 -1
  102. package/types/shared/utils.d.ts +1 -0
  103. package/types/shared/utils.d.ts.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"names":["useId","useMemo","borderRadiusMap","isTouchSurface","resolveRadiusClass","sizeRecipeForToken","useResolvedKnobs","useFormContext","useFormValidate","remapValidatorsForTiming","resolveEffectiveValidateOn","getFieldHeight","sizeToken","rows","touch","String","height","clampRadius","radiusToken","maxTokenNum","fallback","startsWith","num","Number","parseInt","slice","clampRadiusForControl","clampRadiusForLargeComponent","OTP_RADIUS_STOPS","Object","keys","otpRadiusStop","stop","Error","getOTPCellRadius","heightPx","getElevationWrapperProps","knobProps","elevationRecipe","elevation","hoverKnobProps","pressKnobProps","focusVisibleKnobProps","props","overflow","elevationChrome","hoverStyle","pressStyle","focusVisibleStyle","transition","animation","useFormField","formContext","resolvedForm","form","resolved","compact","generatedId","id","getFieldError","field","propError","fieldError","state","meta","errors","length","defaultIsEmpty","v","useResolvedValidators","required","validators","label","name","isEmpty","validateOn","hasSubmitted","effective","requiredValidator","value","onSubmit","existingOnSubmit","composedOnSubmit","mergeFieldHandler","handler","args","stripRadiusFromStateProps","borderRadius","_","rest","STATE_STYLE_KEYS","RADIUS_TOKEN_TO_STOP","fromEntries","flatMap","radiusValueToStop","key","trim","resolveBinaryStateRadius","clampOneStateRadius","options","radiusClass","isClampOptions","clampRadiusInStateProps","maxTokenNumOrOptions","nestedKeys","filter","next","bag"],"sources":["../../../src/shared/utils.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["useId","useMemo","borderRadiusMap","isTouchSurface","resolveRadiusClass","sizeRecipeForToken","useResolvedKnobs","useFormContext","useFormValidate","remapValidatorsForTiming","resolveEffectiveValidateOn","getFieldHeight","sizeToken","rows","touch","String","height","clampRadius","radiusToken","maxTokenNum","fallback","startsWith","num","Number","parseInt","slice","clampRadiusForControl","clampRadiusForLargeComponent","OTP_RADIUS_STOPS","Object","keys","otpRadiusStop","stop","Error","getOTPCellRadius","heightPx","getElevationWrapperProps","knobProps","elevationRecipe","elevation","hoverKnobProps","pressKnobProps","focusVisibleKnobProps","props","overflow","elevationChrome","hoverStyle","pressStyle","focusVisibleStyle","transition","animation","useFormField","formContext","resolvedForm","form","resolved","compact","size","generatedId","id","getFieldError","field","propError","fieldError","state","meta","errors","length","defaultIsEmpty","v","useResolvedValidators","required","validators","label","name","isEmpty","validateOn","hasSubmitted","effective","requiredValidator","value","onSubmit","existingOnSubmit","composedOnSubmit","mergeFieldHandler","handler","args","stripRadiusFromStateProps","borderRadius","_","rest","STATE_STYLE_KEYS","RADIUS_TOKEN_TO_STOP","fromEntries","flatMap","radiusValueToStop","key","trim","resolveBinaryStateRadius","clampOneStateRadius","options","radiusClass","isClampOptions","clampRadiusInStateProps","maxTokenNumOrOptions","nestedKeys","filter","next","bag"],"sources":["../../../src/shared/utils.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -128,7 +128,8 @@ function useFormField(props) {
128
128
  var formContext = (0, import_Form.useFormContext)();
129
129
  var resolvedForm = props.form || formContext || void 0;
130
130
  var resolved = (0, import_theme.useResolvedKnobs)({
131
- compact: props.compact
131
+ compact: props.compact,
132
+ size: props.size
132
133
  });
133
134
  var generatedId = (0, import_react.useId)();
134
135
  var id = props.id || generatedId;
@@ -1 +1 @@
1
- {"version":3,"names":["__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","utils_exports","clampRadiusForControl","clampRadiusForLargeComponent","clampRadiusInStateProps","getElevationWrapperProps","getFieldError","getFieldHeight","getOTPCellRadius","mergeFieldHandler","stripRadiusFromStateProps","useFormField","useResolvedValidators","module","exports","import_react","require","import_theme","import_Form","import_validateOn","_type_of","obj","Symbol","constructor","sizeToken","rows","arguments","length","touch","isTouchSurface","sizeRecipeForToken","String","height","clampRadius","radiusToken","maxTokenNum","fallback","startsWith","num","Number","parseInt","slice","OTP_RADIUS_STOPS","keys","borderRadiusMap","otpRadiusStop","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","iterator","_step","next","done","stop","err","return","Error","heightPx","resolveRadiusClass","knobProps","elevationRecipe","_elevationRecipe_hoverKnobProps","_elevationRecipe_pressKnobProps","_elevationRecipe_focusVisibleKnobProps","elevation","hoverKnobProps","pressKnobProps","focusVisibleKnobProps","props","overflow","elevationChrome","hoverStyle","pressStyle","focusVisibleStyle","transition","animation","formContext","useFormContext","resolvedForm","form","resolved","useResolvedKnobs","compact","generatedId","useId","id","field","propError","fieldError","state","meta","errors","defaultIsEmpty","defaultIsEmpty2","v","required","validators","label","isEmpty","validateOn","hasSubmitted","useFormValidate","effective","resolveEffectiveValidateOn","useMemo","requiredValidator","requiredValidator2","param","onSubmit","existingOnSubmit","composedOnSubmit","_existingOnSubmit"],"sources":["../../../src/shared/utils.ts"],"sourcesContent":[null],"mappings":"AAAA,YAAyB;;AAQzB,IAAAA,SAAA,GAAAC,MAAA,CAAAC,cAAA;AAAA,IACEC,gBAAA,GAAAF,MAAA,CAAAG,wBAAA;AAAA,IACAC,iBAAA,GAAAJ,MAAA,CAAAK,mBAAA;AAAA,IACAC,YAAA,GAAAN,MAAA,CAAAO,SAAA,CAAAC,cAAA;AAAA,IACAC,QAAA,GAAAA,CAAAC,MAAA,EAAAC,GAAA;EACA,SAAAC,IAAA,IAAAD,GAAA,EAAAZ,SACK,CAAAW,MAAA,EAAAE,IAAA;IAAAC,GAAA,EAAAF,GAAA,CAAAC,IAAA;IAAAE,UAAA;EAAA;AAEP;AACA,IAAAC,WAAS,GAAAA,CAAAC,EAAA,EAAAC,IAAA,EAAAC,MAA0B,EAAAC,IAAA;EAO5B,IAAAF,IAAS,WAAAA,IAAe,aAAuB,IAAO,OAAGA,IAAQ,eAAe;IACrF,KAAO,IAAAG,GAAA,IAAAhB,iBAA0B,CAAAa,IAAA,GACnC,KAAAX,YAAA,CAAAe,IAAA,CAAAL,EAAA,EAAAI,GAAA,KAAAA,GAAA,KAAAF,MAAA,EAEAnB,SAAS,CAAAiB,EAAA,EACPI,GAAA;MAAAP,GAAA,EACAA,CAAA,KAAAI,IAAA,CAAAG,GACA;MAAAN,UACY,IAAAK,IAAA,GAAAjB,gBAAA,CAAAe,IAAA,EAAAG,GAAA,MAAAD,IAAA,CAAAL;IAAA;EACZ;EACA,OAAIE,EAAA;AACJ;AACE,IAAAM,YAAY,GAAAC,GAAO,IAAAR,WAAS,CAAAhB,SAAY,CAAM,CAAC,GAAG,YAAE;EAAAyB,KAAA;AAAA,IAAAD,GAAA;AACpD,IAAAE,aAAa;AAAkChB,QACjD,CAAAgB,aAAA;EACAC,qBAAO,EAAAA,CAAA,KAAAA,qBAAA;EACTC,4BAAA,EAAAA,CAAA,KAAAA,4BAAA;EAMOC,uBAAS,EAAAA,CAAA,KACdA,uBACA;EAEAC,wBAAmB,EAAAA,CAAA,KAAaA,wBAAiB;EACnDC,aAAA,EAAAA,CAAA,KAAAA,aAAA;EASOC,cAAS,EAAAA,CAAA,KAAAA,cACd;EAGAC,gBAAO,EAAAA,CAAA,KAAYA,gBAAa;EAClCC,iBAAA,EAAAA,CAAA,KAAAA,iBAAA;EAIAC,yBAAyB,EAAAA,CAAA,KAAOA,yBAAoB;EAEpDC,YAAS,EAAAA,CAAA,KAAAA,YAAc;EACrBC,qBAAmB,EAAAA,CAAA,KAAMA;AACzB;AACEC,MAAA,CAAAC,OAAI,GAAShB,YAAA,CAAAG,aAAe;AAA8C,IAC5Ec,YAAA,GAAAC,OAAA;AACA,IAAAC,YAAU,GAAAD,OAAA;AAAA,IACRE,WAAA,GAAAF,OAAA,CAAsB;AAAW,IACnCG,iBAAA,GAAAH,OAAA;AACF,SAAAI,SAAAC,GAAA;EAQO,uBAAS;;EACd,OAAOA,GAAA,WAAAC,MAAmB,oBAAoBD,GAAA,CAAAE,WAAc,KAAAD,MAAW,GAAK,WAAU,OAAAD,GAAA;AACxF;AAUO,SAASd,eAAAiB,SAAA,EACd;EAGA,IAAAC,IAAM,GAAAC,SAAY,CAAAC,MAAA,GAAU,KAAAD,SAAA,iBAAAA,SAAA;IAAAE,KAAA,GAAAF,SAAA,CAAAC,MAAA,QAAAD,SAAA,iBAAAA,SAAA,UAAAT,YAAA,CAAAY,cAAA;EAC5B,OACG,IAAAZ,YACA,CAAAa,kBAAgB,EAAAC,MAAA,CAAgBP,SAAA;IAIjCI;EACF,GAAAI,MAAA,GAAAP,IAAA;AACA;AAAmC,SACjCQ,WAAUA,CAAAC,WAAA,EAAAC,WAAA,EAAAC,QAAA;EAAA,IACV,CAAGF,WAAU,SAAAE,QAAA;EACf,IAAAF,WAAA;EACA,IAAI,OAAAA,WAAgB,iBAAgBA,WAAA,CAAAG,UAAA;IAClC,IAAAC,GAAM,GAAAC,MAAA,CAAAC,QAAa,CAAAN,WAAgB,CAAAO,KAAA;IACrC,OAAAH,GAAA,GAAAH,WAAA,OAAAA,WAAA,KAAAD,WAAA;EACA;EACE,OAAAA,WAAM;AAA6B;AAErC,SAAIhC,qBAAgBA,CAAAgC,WAAA;EAClB,IAAAC,WAAM,GAAAT,SAAA,CAAoBC,MAAA,QAAAD,SAAgB,iBAAAA,SAAA;EAC5C,OAAAO,WAAA,CAAAC,WAAA,EAAAC,WAAA;AACA;AACA,SAAOhC,6BAAA+B,WAAA;EACT,IAAAC,WAAA,GAAAT,SAAA,CAAAC,MAAA,QAAAD,SAAA,iBAAAA,SAAA;EAEO,OAASO,WAAA,CAAAC,WAGE,EAAAC,WAAA;AAChB;AACA,IAAAO,gBAAM,GAAgBlE,MAAM,CAAAmE,IAAA,CAAA1B,YAAQ,CAAA2B,eAAe;AACnD,SAAMC,aAAWA,CAAAX,WAAA,EAAiB;EAClC,IAAAA,WAAM,QAAc,SAAM;EAC1B,IAAAY,yBAAuB;IAAAC,iBAAA;IAAAC,cAAA;EACvB;IACF,SAAAC,SAAA,GAAAP,gBAAA,CAAApB,MAAA,CAAA4B,QAAA,KAAAC,KAAA,IAAAL,yBAAA,IAAAK,KAAA,GAAAF,SAAA,CAAAG,IAAA,IAAAC,IAAA,GAAAP,yBAAA;MAEO,IAASQ,IAAA,GAAAH,KAAA,CACdnD,KAAA;MAGA,IAAMsD,IAAA,KAAApB,WAAmB,IAAMjB,YAAY,CAAA2B,eAChC,CAAAU,IAAM,MAAMpB,WAAK,EAAQ,OAChCoB,IAAA;IACJ;EACF,SAAAC,GAAA;IAEAR,iBAAM,GAAkB;IAEjBC,cAAS,GAAAO,GAAA;EAOd,UAAQ;IACR,IAAM;MAEN,IAAO,CAAAT,yBAAc,IAAAG,SAAA,CAAAO,MAAA;QACfP,SAAA,CAAAO,MAAW;MACf;IACE,UAAM;MAIN,IAAIT,iBAAa;QACf,MAAAC,cAAa;MACf;IACE;EACA;EAIA,UAAAS,KAAA,uBAA4BvB,WAAU,mEAAiB;AAAA;AACzD,SACF1B,iBAAA0B,WAAA,EAAAwB,QAAA;EACA,SAAO,EAAAzC,YAAA,CAAA0C,kBAAyB,EAAU,kBAAS,EAAAd,aAAA,CAAAX,WAAA;IACrDwB;EACF;AAEO;AAKL,SAAOrD,wBAAoBA,CAAAuD,SAAA,EAAAC,eAAA;EACzB,IAACC,+BAAgD,EAAAC,+BAAA,EAAAC,sCAAA;EACjD,IAAAC,SAAU,GAAGL,SAAI,CAAAK,SAAA;EACnB,KAAAA,SAAA,OAAAH,+BAAA,GAAAD,eAAA,CAAAK,cAAA,cAAAJ,+BAAA,uBAAAA,+BAAA,CAAAG,SAAA,QAAAF,+BAAA,GAAAF,eAAA,CAAAM,cAAA,cAAAJ,+BAAA,uBAAAA,+BAAA,CAAAE,SAAA,QAAAD,sCAAA,GAAAH,eAAA,CAAAO,qBAAA,cAAAJ,sCAAA,uBAAAA,sCAAA,CAAAC,SAAA;IACF;EAWO;EACL,IAAII,KAAC;IACLC,QAAQ;IACR,GAAAV,SAAc,CAAAW;EAChB;EAoBA,IAAMV,eAAA,CAAAK,cAAoB;IAQ1BG,KAAM,CAAAG,UAAA,GAAAX,eAA8B,CAAAK,cAAA;EACjC;EAAkE,IAChEL,eAAU,CAAAM,cAAA;IACXE,KAAC,CAAAI,UAAA,GAAgBZ,eAAW,CAAAM,cAAA;EAC9B;EACF,IAAAN,eAAA,CAAAO,qBAAA;IAQAC,KAAS,CAAAK,iBAAkB,GAAAb,eAA8B,CAAAO,qBAAA;EACvD;EACA,IAAAR,SAAY,CAAAe,UAAY,EAAEN,KAAK,CAAAO,SAAA,GAAAhB,SAAA,CAAAe,UAAA;EAC/B,OAAIN,KAAQ;AACZ;AACF,SAAA1D,aAAA0D,KAAA;EAgBA,IAAAQ,WAAS,OAAA3D,WAAyB,CAAA4D,cAAgB,EAAsC;EACtF,IAAIC,YAAA,GAAaV,KAAA,CAAAW,IAAa,IAAAH,WAAe;EAC3C,IAAAI,QAAU,OAAAhE,YAAA,CAAAiE,gBAAA;IAAAC,OACR,EAAAd,KAAA,CAAAc;EAAA,EACF;EACF,IAAAC,WAAA,OAAArE,YAAA,CAAAsE,KAAA;EACA,IAAAC,EAAA,GAAOjB,KAAA,CAAAiB,EAAA,IAAAF,WAAmB;EAC5B;IAEAL,YAAS;IAIP,GAAIE,QAAQ;IACVK;EACF;AACA;AAAO,SACLhF,aAAOA,CAAAiF,KAAiB,EAAAC,SAAA,EAAY;EAEb,IACvBC,UAAQ,GAAAF,KAAA,CAAAG,KAAA,CAAAC,IAAA,CAAAC,MAAA,CAAAjE,MAAA,GAAAI,MAAA,CAAAwD,KAAA,CAAAG,KAAA,CAAAC,IAAA,CAAAC,MAAA;EACV,OAAAJ,SAAA,aAAAA,SAAA,cAAAA,SAAA,GAAAC,UAAA;AACF;AAEA,IAAAI,cAAS,YACPC,eACyCA,CAAAC,CAAA;EACzC,OAAOA,CAAA,QAAO,IAAAA,CAAA,KAAU;AAC1B;AAUO,SAASnF,sBAAAoF,QACd,EACAC,UAAA,EAAAC,KAAA,EAAA9G,IAAgE,EAC7C;EACnB,IAAI+G,OAAQ,GAAAzE,SAAO,CAAAC,MAAA,QAAAD,SAAA,iBAAAA,SAAA,MAAAmE,cAAA;EACnB;IAAMO,UAAU;IAAAC;EAAe,QAAAnF,WAAA,CAAoBoF,eAC/C;EAAA,IACEC,SAAA,GAAa,IAAApF,iBAAqB,CAAAqF,0BAAe,EAAAJ,UAAA,EAAAC,YAAA;EAAA,OACjD,IAAAtF,YAAa,CAAA0F,OAAA,cAAqB;IAClC,IAAAxB,QAAU,GAAAgB,UAAA;IACZ,IACED,QAAA;MAEN,IAAMU,iBAAa,YAAiBC,mBAAAC,KAAA;QACjC;UAAQ5G;QAAM,IAAG4G,KAAK;QACzB,OAAAT,OAAA,CAAAnG,KAAA,cAAAkG,KAAA,gBAAAA,KAAA,GAAA9G,IAAA;MACI;MAEJ,IAAM,CAAA6G,UAAiC;QACnChB,QAAA;UACG4B,QAAA,EAAAH;QACP;MACA,OAAW;QACT,IAAMI,gBAAe,GAAAb,UAAA,CAAAY,QAAA;QACrB,IAAQE,gBAAI,GAAAD,gBAAA,aAAAF,KAAA;UACP;YAAA5G;UAAA,IAAA4G,KAAA;UACH,IAAAI,iBAAc;UAChB,QAAAA,iBAAA,GAAAF,gBAAA;YACF9G;UACO,gBAAAgH,iBAAA,cAAAA,iBAAA,GAAAN,iBAAA;YACT1G","ignoreList":[]}
1
+ {"version":3,"names":["__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","utils_exports","clampRadiusForControl","clampRadiusForLargeComponent","clampRadiusInStateProps","getElevationWrapperProps","getFieldError","getFieldHeight","getOTPCellRadius","mergeFieldHandler","stripRadiusFromStateProps","useFormField","useResolvedValidators","module","exports","import_react","require","import_theme","import_Form","import_validateOn","_type_of","obj","Symbol","constructor","sizeToken","rows","arguments","length","touch","isTouchSurface","sizeRecipeForToken","String","height","clampRadius","radiusToken","maxTokenNum","fallback","startsWith","num","Number","parseInt","slice","OTP_RADIUS_STOPS","keys","borderRadiusMap","otpRadiusStop","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_iterator","iterator","_step","next","done","stop","err","return","Error","heightPx","resolveRadiusClass","knobProps","elevationRecipe","_elevationRecipe_hoverKnobProps","_elevationRecipe_pressKnobProps","_elevationRecipe_focusVisibleKnobProps","elevation","hoverKnobProps","pressKnobProps","focusVisibleKnobProps","props","overflow","elevationChrome","hoverStyle","pressStyle","focusVisibleStyle","transition","animation","formContext","useFormContext","resolvedForm","form","resolved","useResolvedKnobs","compact","size","generatedId","useId","id","field","propError","fieldError","state","meta","errors","defaultIsEmpty","defaultIsEmpty2","v","required","validators","label","isEmpty","validateOn","hasSubmitted","useFormValidate","effective","resolveEffectiveValidateOn","useMemo","requiredValidator","requiredValidator2","param","onSubmit","existingOnSubmit","composedOnSubmit","_existingOnSubmit"],"sources":["../../../src/shared/utils.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@multiplatform.one/forms",
3
- "version": "7.21.0",
3
+ "version": "7.23.0",
4
4
  "description": "Cross-platform form components with URL state management",
5
5
  "keywords": [
6
6
  "cross-platform",
@@ -57,16 +57,18 @@
57
57
  },
58
58
  "dependencies": {
59
59
  "@floating-ui/react": "^0.27.19",
60
- "@multiplatform.one/platform": "7.21.0",
61
- "@multiplatform.one/router": "7.21.0",
62
- "@multiplatform.one/table-primitives": "7.21.0",
63
- "@multiplatform.one/theme": "7.21.0",
60
+ "@multiplatform.one/platform": "7.23.0",
61
+ "@multiplatform.one/router": "7.23.0",
62
+ "@multiplatform.one/table-primitives": "7.23.0",
63
+ "@multiplatform.one/theme": "7.23.0",
64
64
  "@phosphor-icons/react": "^2.1.10",
65
65
  "@tamagui/get-font-sized": "2.7.6",
66
66
  "@tamagui/get-token": "2.7.6",
67
67
  "@tamagui/lucide-icons-2": "2.7.6",
68
68
  "@tamagui/roving-focus": "2.7.6",
69
+ "@tamagui/stacks": "2.7.6",
69
70
  "@tamagui/web": "2.7.6",
71
+ "@tanstack/form-core": "^1.29.1",
70
72
  "@tanstack/react-form": "^1.29.1",
71
73
  "@tanstack/react-store": "0.9.2",
72
74
  "expo-camera": "~55.0.18",
@@ -77,9 +79,9 @@
77
79
  "tamagui": "2.7.6"
78
80
  },
79
81
  "devDependencies": {
80
- "@multiplatform.one/config": "7.21.0",
81
- "@multiplatform.one/storybook": "7.21.0",
82
- "@multiplatform.one/test-utils": "7.21.0",
82
+ "@multiplatform.one/config": "7.23.0",
83
+ "@multiplatform.one/storybook": "7.23.0",
84
+ "@multiplatform.one/test-utils": "7.23.0",
83
85
  "@tamagui/build": "2.7.6",
84
86
  "@tamagui/config": "2.7.6",
85
87
  "@tamagui/vite-plugin": "2.7.6",
@@ -106,10 +108,12 @@
106
108
  "expo-haptics": "55.0.17",
107
109
  "expo-image-picker": "*",
108
110
  "expo-maps": "*",
111
+ "expo-modules-core": "*",
109
112
  "i18next": "^25.0.0",
110
113
  "react": "^19.1.0",
111
114
  "react-dom": "^19.1.0",
112
115
  "react-i18next": ">=14",
116
+ "react-native": ">=0.83.0",
113
117
  "react-native-safe-area-context": "*"
114
118
  },
115
119
  "peerDependenciesMeta": {
@@ -128,12 +132,18 @@
128
132
  "expo-haptics": {
129
133
  "optional": true
130
134
  },
135
+ "expo-modules-core": {
136
+ "optional": true
137
+ },
131
138
  "i18next": {
132
139
  "optional": true
133
140
  },
134
141
  "react-i18next": {
135
142
  "optional": true
136
143
  },
144
+ "react-native": {
145
+ "optional": true
146
+ },
137
147
  "react-native-safe-area-context": {
138
148
  "optional": true
139
149
  }
@@ -0,0 +1,126 @@
1
+ import { renderWithProviders } from "@multiplatform.one/test-utils";
2
+ import { OVERLAY_ANCHOR_GAP } from "@multiplatform.one/theme";
3
+ import { act } from "@testing-library/react";
4
+ import { useState } from "react";
5
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
6
+ import { Text } from "tamagui";
7
+ import { FloatingPanel } from "./index.native";
8
+ import { panelViewportPadding } from "./useFloatingPanel";
9
+
10
+ const screen = vi.hoisted(() => ({ width: 1024, height: 768 }));
11
+ vi.mock("react-native-web", async (importOriginal) => {
12
+ const actual = await importOriginal<typeof import("react-native")>();
13
+ return {
14
+ ...actual,
15
+ ActionSheetIOS: undefined,
16
+ Modal: ({ children, visible }: { children: import("react").ReactNode; visible: boolean }) =>
17
+ visible ? children : null,
18
+ useWindowDimensions: () => ({ ...screen, scale: 1, fontScale: 1 }),
19
+ };
20
+ });
21
+
22
+ beforeEach(() => {
23
+ vi.useFakeTimers();
24
+ });
25
+ afterEach(() => {
26
+ vi.useRealTimers();
27
+ screen.width = 1024;
28
+ screen.height = 768;
29
+ });
30
+
31
+ function ContextPanel() {
32
+ const [open, setOpen] = useState(false);
33
+ return (
34
+ <FloatingPanel
35
+ open={open}
36
+ onOpenChange={setOpen}
37
+ openOn="contextmenu"
38
+ trigger={<Text>Row</Text>}
39
+ triggerA11y={{ label: "Row" }}
40
+ >
41
+ <Text>Copy</Text>
42
+ </FloatingPanel>
43
+ );
44
+ }
45
+
46
+ /** A finger held on the target past the 500ms long-press delay. */
47
+ function longPress(target: Element, pageX: number, pageY: number) {
48
+ const down = new MouseEvent("mousedown", { bubbles: true, cancelable: true, button: 0 });
49
+ Object.defineProperties(down, { pageX: { value: pageX }, pageY: { value: pageY } });
50
+ act(() => {
51
+ target.dispatchEvent(down);
52
+ vi.advanceTimersByTime(600);
53
+ });
54
+ }
55
+
56
+ /** RN-web parks onLayout on the node for a ResizeObserver happy-dom never fires. */
57
+ function layout(node: Element, width: number, height: number) {
58
+ const onLayout = (node as unknown as { __reactLayoutHandler?: (event: unknown) => void })
59
+ .__reactLayoutHandler;
60
+ expect(onLayout).toBeTypeOf("function");
61
+ act(() => {
62
+ onLayout?.({ nativeEvent: { layout: { x: 0, y: 0, width, height } } });
63
+ });
64
+ }
65
+
66
+ const pointPanel = () =>
67
+ document.querySelector<HTMLElement>('[data-testid="floating-panel-point"]');
68
+ const sheet = () => document.querySelector('[data-testid="floating-panel-sheet"]');
69
+
70
+ describe("FloatingPanel native ContextMenu at the long-press point", () => {
71
+ it("opens at the press point on a tablet-wide window, OVERLAY_ANCHOR_GAP below it", () => {
72
+ const result = renderWithProviders(<ContextPanel />);
73
+ longPress(result.getByRole("button", { name: "Row" }), 300, 200);
74
+ const panel = pointPanel();
75
+ expect(panel).not.toBeNull();
76
+ expect(sheet()).toBeNull();
77
+ expect(panel?.style.opacity).toBe("0");
78
+ layout(panel as HTMLElement, 180, 140);
79
+ expect(panel?.style.left).toBe("300px");
80
+ expect(panel?.style.top).toBe(`${200 + OVERLAY_ANCHOR_GAP}px`);
81
+ expect(panel?.style.opacity).toBe("1");
82
+ });
83
+
84
+ it("flips toward the start and up near the bottom-right corner", () => {
85
+ const result = renderWithProviders(<ContextPanel />);
86
+ longPress(result.getByRole("button", { name: "Row" }), 1000, 740);
87
+ const panel = pointPanel() as HTMLElement;
88
+ layout(panel, 180, 140);
89
+ expect(panel.style.left).toBe(`${1000 - 180}px`);
90
+ expect(panel.style.top).toBe(`${740 - OVERLAY_ANCHOR_GAP - 140}px`);
91
+ });
92
+
93
+ it("clamps a menu taller than either side inside the padded window", () => {
94
+ screen.height = 400;
95
+ const result = renderWithProviders(<ContextPanel />);
96
+ longPress(result.getByRole("button", { name: "Row" }), 300, 250);
97
+ const panel = pointPanel() as HTMLElement;
98
+ layout(panel, 180, 600);
99
+ const top = parseFloat(panel.style.top);
100
+ const maxHeight = parseFloat(panel.style.maxHeight);
101
+ expect(top).toBeGreaterThanOrEqual(panelViewportPadding);
102
+ expect(top + maxHeight).toBe(250 - OVERLAY_ANCHOR_GAP);
103
+ });
104
+
105
+ it("keeps the sheet on a phone-wide window", () => {
106
+ screen.width = 390;
107
+ screen.height = 844;
108
+ const result = renderWithProviders(<ContextPanel />);
109
+ longPress(result.getByRole("button", { name: "Row" }), 200, 300);
110
+ expect(pointPanel()).toBeNull();
111
+ expect(sheet()).not.toBeNull();
112
+ });
113
+
114
+ it("does not open on a tap", () => {
115
+ const result = renderWithProviders(<ContextPanel />);
116
+ const target = result.getByRole("button", { name: "Row" });
117
+ act(() => {
118
+ target.dispatchEvent(new MouseEvent("mousedown", { bubbles: true, button: 0 }));
119
+ vi.advanceTimersByTime(100);
120
+ target.dispatchEvent(new MouseEvent("mouseup", { bubbles: true, button: 0 }));
121
+ target.dispatchEvent(new MouseEvent("click", { bubbles: true, button: 0 }));
122
+ });
123
+ expect(pointPanel()).toBeNull();
124
+ expect(sheet()).toBeNull();
125
+ });
126
+ });
@@ -43,9 +43,15 @@
43
43
  * and the sheet never appears. Fields should not also toggle open on native.
44
44
  * - Opening a Modal under the same finger can synthesize a backdrop press;
45
45
  * backdrop dismiss is armed a short delay after the present begins.
46
+ *
47
+ * ContextMenu (`openOn="contextmenu"`): long-press opens it. On a window wider
48
+ * than OVERLAY_BREAKPOINT (a tablet) it opens at the long-press point, the
49
+ * same free overlay the web draws at the pointer; a phone keeps the sheet,
50
+ * as web does at ≤640.
46
51
  */
47
52
 
48
53
  import {
54
+ type ReactNode,
49
55
  useCallback,
50
56
  useContext,
51
57
  useEffect,
@@ -57,6 +63,7 @@ import {
57
63
  import {
58
64
  Animated,
59
65
  Easing,
66
+ I18nManager,
60
67
  Modal,
61
68
  PanResponder,
62
69
  Platform,
@@ -65,13 +72,16 @@ import {
65
72
  StyleSheet,
66
73
  useWindowDimensions,
67
74
  View as RNView,
75
+ type GestureResponderEvent,
68
76
  } from "react-native";
69
77
  import { SafeAreaInsetsContext, initialWindowMetrics } from "react-native-safe-area-context";
70
- import { Surface, useResolvedKnobs } from "@multiplatform.one/theme";
78
+ import { OVERLAY_BREAKPOINT, Surface, useResolvedKnobs } from "@multiplatform.one/theme";
71
79
  import { View, YStack } from "tamagui";
72
80
  import { t } from "../shared/t";
73
81
  import { useKeyboardInset } from "../shared/useKeyboardInset";
74
82
  import type { FloatingPanelProps } from "./index";
83
+ import { placeAtPoint, type PanelBounds, type PanelPoint } from "./pointAnchor";
84
+ import { panelViewportPadding } from "./useFloatingPanel";
75
85
 
76
86
  // Re-export the hook + constants so Select / Combobox / external consumers
77
87
  // resolve identically on native (their floating cores are unused on device
@@ -127,20 +137,31 @@ export function FloatingPanel({
127
137
  openOn = "press",
128
138
  }: FloatingPanelProps) {
129
139
  const { knobProps } = useResolvedKnobs();
130
- const { height: windowHeight } = useWindowDimensions();
140
+ const { width: windowWidth, height: windowHeight } = useWindowDimensions();
131
141
  // MPO-64: the sheet must end ABOVE the keyboard, not run under it.
132
142
  const keyboardInset = useKeyboardInset();
133
- const topInset = useContext(SafeAreaInsetsContext)?.top ?? initialWindowMetrics?.insets.top ?? 0;
143
+ const safeArea = useContext(SafeAreaInsetsContext) ?? initialWindowMetrics?.insets;
144
+ const topInset = safeArea?.top ?? 0;
145
+ const [pressPoint, setPressPoint] = useState<PanelPoint | null>(null);
134
146
  const [backdropArmed, setBackdropArmed] = useState(false);
135
147
  const armTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);
136
148
  const close = useCallback(() => onOpenChange(false), [onOpenChange]);
137
149
  const handleTriggerPress = useCallback(() => {
138
150
  if (!disabled) onOpenChange(!open);
139
151
  }, [disabled, onOpenChange, open]);
140
- const handleTriggerLongPress = useCallback(() => {
141
- if (!disabled) onOpenChange(true);
142
- }, [disabled, onOpenChange]);
152
+ const handleTriggerLongPress = useCallback(
153
+ (event?: GestureResponderEvent) => {
154
+ if (disabled) return;
155
+ const { pageX, pageY } = event?.nativeEvent ?? {};
156
+ setPressPoint(
157
+ typeof pageX === "number" && typeof pageY === "number" ? { x: pageX, y: pageY } : null,
158
+ );
159
+ onOpenChange(true);
160
+ },
161
+ [disabled, onOpenChange],
162
+ );
143
163
  const isContextMenu = openOn === "contextmenu";
164
+ const atPoint = isContextMenu && pressPoint !== null && windowWidth > OVERLAY_BREAKPOINT;
144
165
 
145
166
  const handleBackdropPress = useCallback(() => {
146
167
  if (backdropArmed) close();
@@ -480,96 +501,193 @@ export function FloatingPanel({
480
501
  onNativeShow?.();
481
502
  }}
482
503
  >
483
- {/*
504
+ {atPoint && pressPoint ? (
505
+ <PointPanel
506
+ key={`${pressPoint.x},${pressPoint.y}`}
507
+ point={pressPoint}
508
+ bounds={{
509
+ top: topInset + panelViewportPadding,
510
+ left: (safeArea?.left ?? 0) + panelViewportPadding,
511
+ right: windowWidth - (safeArea?.right ?? 0) - panelViewportPadding,
512
+ bottom:
513
+ windowHeight -
514
+ Math.max(safeArea?.bottom ?? 0, keyboardInset) -
515
+ panelViewportPadding,
516
+ }}
517
+ framePadding={framePadding}
518
+ frameGap={frameGap}
519
+ onBackdropPress={handleBackdropPress}
520
+ onEscape={close}
521
+ >
522
+ {header}
523
+ {children}
524
+ </PointPanel>
525
+ ) : (
526
+ /*
484
527
  A plain padded column, not KeyboardAvoidingView: inside a Modal the
485
528
  latter pads the container while the sheet keeps its own fixed height,
486
529
  so the sheet overflows off the TOP instead of shrinking (MPO-64).
487
- */}
488
- <RNView style={{ flex: 1, justifyContent: "flex-end", paddingBottom: keyboardInset }}>
489
- <Pressable
490
- style={StyleSheet.absoluteFill}
491
- onPress={handleBackdropPress}
492
- accessibilityRole="button"
493
- accessibilityLabel={t("Close")}
494
- >
495
- <View flex={1} backgroundColor="$shadow6" />
496
- </Pressable>
497
- {/*
530
+ */
531
+ <RNView style={{ flex: 1, justifyContent: "flex-end", paddingBottom: keyboardInset }}>
532
+ <Pressable
533
+ style={StyleSheet.absoluteFill}
534
+ onPress={handleBackdropPress}
535
+ accessibilityRole="button"
536
+ accessibilityLabel={t("Close")}
537
+ >
538
+ <View flex={1} backgroundColor="$shadow6" />
539
+ </Pressable>
540
+ {/*
498
541
  Sheet sits above the absoluteFill backdrop in z-order (later sibling).
499
542
  Do NOT claim the responder on a wrapper here — that steals presses
500
543
  from option rows / calendar days and blocks commit.
501
544
  */}
502
- <Animated.View
503
- testID="floating-panel-sheet"
504
- onLayout={(e) => {
505
- // Travel distance for a dismiss, and the basis for the detents.
506
- // A content-sized picker is shorter than maxHeight, and sliding
507
- // it by maxHeight would overshoot into a visible lag.
508
- if (restHeightRef.current !== null) return;
509
- const h = Math.round(e.nativeEvent.layout.height);
510
- if (h <= 0) return;
511
- naturalRef.current = h;
512
- filledRef.current = h >= maxHeightRef.current - 1;
513
- if (h !== measuredHeight) setMeasuredHeight(h);
514
- }}
515
- style={{
516
- // MPO-64: a flex child defaults to flexShrink 0, so without this
517
- // the sheet cannot give way to the keyboard at all.
518
- flexShrink: 1,
519
- minHeight: 0,
520
- maxHeight: frameCap,
521
- transform: [{ translateY }],
522
- }}
523
- >
524
- <YStack
525
- {...knobProps.elevatedSurface}
526
- borderBottomLeftRadius={0}
527
- borderBottomRightRadius={0}
528
- maxHeight={maxHeight}
529
- flexShrink={1}
530
- minHeight={0}
531
- // sheetFill opens at full sheet height (flexShrink keeps the
532
- // keyboard from pushing the top of the sheet off-screen).
533
- {...(sheetFill ? { height: maxHeight } : undefined)}
534
- paddingTop="$2"
535
- paddingBottom={sheetBottomPadding}
536
- // VoiceOver escape gesture (two-finger Z) dismisses the sheet.
537
- onAccessibilityEscape={close}
545
+ <Animated.View
546
+ testID="floating-panel-sheet"
547
+ onLayout={(e) => {
548
+ // Travel distance for a dismiss, and the basis for the detents.
549
+ // A content-sized picker is shorter than maxHeight, and sliding
550
+ // it by maxHeight would overshoot into a visible lag.
551
+ if (restHeightRef.current !== null) return;
552
+ const h = Math.round(e.nativeEvent.layout.height);
553
+ if (h <= 0) return;
554
+ naturalRef.current = h;
555
+ filledRef.current = h >= maxHeightRef.current - 1;
556
+ if (h !== measuredHeight) setMeasuredHeight(h);
557
+ }}
558
+ style={{
559
+ // MPO-64: a flex child defaults to flexShrink 0, so without this
560
+ // the sheet cannot give way to the keyboard at all.
561
+ flexShrink: 1,
562
+ minHeight: 0,
563
+ maxHeight: frameCap,
564
+ transform: [{ translateY }],
565
+ }}
538
566
  >
539
- {/*
567
+ <YStack
568
+ {...knobProps.elevatedSurface}
569
+ borderBottomLeftRadius={0}
570
+ borderBottomRightRadius={0}
571
+ maxHeight={maxHeight}
572
+ flexShrink={1}
573
+ minHeight={0}
574
+ // sheetFill opens at full sheet height (flexShrink keeps the
575
+ // keyboard from pushing the top of the sheet off-screen).
576
+ {...(sheetFill ? { height: maxHeight } : undefined)}
577
+ paddingTop="$2"
578
+ paddingBottom={sheetBottomPadding}
579
+ // VoiceOver escape gesture (two-finger Z) dismisses the sheet.
580
+ onAccessibilityEscape={close}
581
+ >
582
+ {/*
540
583
  The grab ZONE, not just the 4pt pill: a 4pt tall target is
541
584
  unhittable. The gesture lives here rather than on the whole
542
585
  sheet so it never fights the ScrollView inside it, which is the
543
586
  same division iOS uses.
544
587
  */}
545
- <RNView
546
- {...panResponder.panHandlers}
547
- accessibilityRole="adjustable"
548
- accessibilityLabel={t("Drag to resize")}
549
- style={{
550
- alignSelf: "stretch",
551
- alignItems: "center",
552
- paddingTop: 4,
553
- paddingBottom: 12,
554
- }}
555
- >
556
- <View width={40} height={4} borderRadius={2} backgroundColor="$color8" />
557
- </RNView>
558
- <YStack
559
- padding={framePadding}
560
- gap={frameGap}
561
- flexShrink={1}
562
- {...(sheetFill ? { flex: 1, minHeight: 0 } : undefined)}
563
- >
564
- <Surface size="md">
565
- {header}
566
- {content}
567
- </Surface>
588
+ <RNView
589
+ {...panResponder.panHandlers}
590
+ accessibilityRole="adjustable"
591
+ accessibilityLabel={t("Drag to resize")}
592
+ style={{
593
+ alignSelf: "stretch",
594
+ alignItems: "center",
595
+ paddingTop: 4,
596
+ paddingBottom: 12,
597
+ }}
598
+ >
599
+ <View width={40} height={4} borderRadius={2} backgroundColor="$color8" />
600
+ </RNView>
601
+ <YStack
602
+ padding={framePadding}
603
+ gap={frameGap}
604
+ flexShrink={1}
605
+ {...(sheetFill ? { flex: 1, minHeight: 0 } : undefined)}
606
+ >
607
+ <Surface size="md">
608
+ {header}
609
+ {content}
610
+ </Surface>
611
+ </YStack>
568
612
  </YStack>
569
- </YStack>
570
- </Animated.View>
571
- </RNView>
613
+ </Animated.View>
614
+ </RNView>
615
+ )}
572
616
  </Modal>
573
617
  </>
574
618
  );
575
619
  }
620
+
621
+ /**
622
+ * The menu at the long-press point: measured once per open at its natural
623
+ * size, then placed by the same rule as the web pointer menu. Later layouts
624
+ * are its own capped height and must not re-decide the side it opened on.
625
+ */
626
+ function PointPanel({
627
+ point,
628
+ bounds,
629
+ framePadding,
630
+ frameGap,
631
+ onBackdropPress,
632
+ onEscape,
633
+ children,
634
+ }: {
635
+ point: PanelPoint;
636
+ bounds: PanelBounds;
637
+ framePadding: string;
638
+ frameGap: string | undefined;
639
+ onBackdropPress: () => void;
640
+ onEscape: () => void;
641
+ children: ReactNode;
642
+ }) {
643
+ const { knobProps } = useResolvedKnobs();
644
+ const [size, setSize] = useState<{ width: number; height: number } | null>(null);
645
+ const placement = size
646
+ ? placeAtPoint({
647
+ point,
648
+ width: size.width,
649
+ height: size.height,
650
+ bounds,
651
+ rtl: I18nManager.isRTL,
652
+ })
653
+ : null;
654
+ return (
655
+ <RNView style={StyleSheet.absoluteFill}>
656
+ <Pressable
657
+ style={StyleSheet.absoluteFill}
658
+ onPress={onBackdropPress}
659
+ accessibilityRole="button"
660
+ accessibilityLabel={t("Close")}
661
+ />
662
+ <RNView
663
+ testID="floating-panel-point"
664
+ onLayout={(e) => {
665
+ if (size) return;
666
+ const { width, height } = e.nativeEvent.layout;
667
+ if (width > 0 && height > 0) setSize({ width, height });
668
+ }}
669
+ style={{
670
+ position: "absolute",
671
+ left: placement?.left ?? bounds.left,
672
+ top: placement?.top ?? bounds.top,
673
+ maxWidth: bounds.right - bounds.left,
674
+ maxHeight: placement?.maxHeight ?? bounds.bottom - bounds.top,
675
+ opacity: placement ? 1 : 0,
676
+ }}
677
+ >
678
+ <YStack
679
+ {...knobProps.elevatedSurface}
680
+ padding={framePadding}
681
+ gap={frameGap}
682
+ flexShrink={1}
683
+ minHeight={0}
684
+ onAccessibilityEscape={onEscape}
685
+ >
686
+ <RNScrollView style={{ flexGrow: 0, flexShrink: 1 }} keyboardShouldPersistTaps="handled">
687
+ {children}
688
+ </RNScrollView>
689
+ </YStack>
690
+ </RNView>
691
+ </RNView>
692
+ );
693
+ }