@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.
- package/dist/cjs/FloatingPanel/index.cjs +85 -29
- package/dist/cjs/FloatingPanel/index.native.js +108 -11
- package/dist/cjs/FloatingPanel/index.native.js.map +1 -1
- package/dist/cjs/FloatingPanel/pointAnchor.cjs +88 -0
- package/dist/cjs/FloatingPanel/pointAnchor.native.js +98 -0
- package/dist/cjs/FloatingPanel/pointAnchor.native.js.map +1 -0
- package/dist/cjs/FloatingPanel/useFloatingPanel.cjs +4 -3
- package/dist/cjs/FloatingPanel/useFloatingPanel.native.js +4 -3
- package/dist/cjs/FloatingPanel/useFloatingPanel.native.js.map +1 -1
- package/dist/cjs/InputParts/index.cjs +9 -1
- package/dist/cjs/InputParts/index.native.js +9 -1
- package/dist/cjs/InputParts/index.native.js.map +1 -1
- package/dist/cjs/fields/Combobox/index.cjs +0 -2
- package/dist/cjs/fields/Combobox/index.native.js +0 -2
- package/dist/cjs/fields/Combobox/index.native.js.map +1 -1
- package/dist/cjs/fields/Select/index.cjs +2 -4
- package/dist/cjs/fields/Select/index.native.js +2 -4
- package/dist/cjs/fields/Select/index.native.js.map +1 -1
- package/dist/cjs/shared/utils.cjs +2 -1
- package/dist/cjs/shared/utils.native.js +2 -1
- package/dist/cjs/shared/utils.native.js.map +1 -1
- package/dist/esm/FloatingPanel/index.mjs +86 -30
- package/dist/esm/FloatingPanel/index.mjs.map +1 -1
- package/dist/esm/FloatingPanel/index.native.js +107 -10
- package/dist/esm/FloatingPanel/index.native.js.map +1 -1
- package/dist/esm/FloatingPanel/pointAnchor.mjs +59 -0
- package/dist/esm/FloatingPanel/pointAnchor.mjs.map +1 -0
- package/dist/esm/FloatingPanel/pointAnchor.native.js +66 -0
- package/dist/esm/FloatingPanel/pointAnchor.native.js.map +1 -0
- package/dist/esm/FloatingPanel/useFloatingPanel.mjs +4 -3
- package/dist/esm/FloatingPanel/useFloatingPanel.mjs.map +1 -1
- package/dist/esm/FloatingPanel/useFloatingPanel.native.js +4 -3
- package/dist/esm/FloatingPanel/useFloatingPanel.native.js.map +1 -1
- package/dist/esm/InputParts/index.mjs +10 -2
- package/dist/esm/InputParts/index.mjs.map +1 -1
- package/dist/esm/InputParts/index.native.js +10 -2
- package/dist/esm/InputParts/index.native.js.map +1 -1
- package/dist/esm/fields/Combobox/index.mjs +0 -2
- package/dist/esm/fields/Combobox/index.mjs.map +1 -1
- package/dist/esm/fields/Combobox/index.native.js +0 -2
- package/dist/esm/fields/Combobox/index.native.js.map +1 -1
- package/dist/esm/fields/Select/index.mjs +2 -4
- package/dist/esm/fields/Select/index.mjs.map +1 -1
- package/dist/esm/fields/Select/index.native.js +2 -4
- package/dist/esm/fields/Select/index.native.js.map +1 -1
- package/dist/esm/shared/utils.mjs +2 -1
- package/dist/esm/shared/utils.mjs.map +1 -1
- package/dist/esm/shared/utils.native.js +2 -1
- package/dist/esm/shared/utils.native.js.map +1 -1
- package/dist/jsx/FloatingPanel/index.mjs +86 -30
- package/dist/jsx/FloatingPanel/index.mjs.map +1 -1
- package/dist/jsx/FloatingPanel/index.native.js +108 -11
- package/dist/jsx/FloatingPanel/index.native.js.map +1 -1
- package/dist/jsx/FloatingPanel/pointAnchor.mjs +59 -0
- package/dist/jsx/FloatingPanel/pointAnchor.mjs.map +1 -0
- package/dist/jsx/FloatingPanel/pointAnchor.native.js +98 -0
- package/dist/jsx/FloatingPanel/pointAnchor.native.js.map +1 -0
- package/dist/jsx/FloatingPanel/useFloatingPanel.mjs +4 -3
- package/dist/jsx/FloatingPanel/useFloatingPanel.mjs.map +1 -1
- package/dist/jsx/FloatingPanel/useFloatingPanel.native.js +4 -3
- package/dist/jsx/FloatingPanel/useFloatingPanel.native.js.map +1 -1
- package/dist/jsx/InputParts/index.mjs +10 -2
- package/dist/jsx/InputParts/index.mjs.map +1 -1
- package/dist/jsx/InputParts/index.native.js +9 -1
- package/dist/jsx/InputParts/index.native.js.map +1 -1
- package/dist/jsx/fields/Combobox/index.mjs +0 -2
- package/dist/jsx/fields/Combobox/index.mjs.map +1 -1
- package/dist/jsx/fields/Combobox/index.native.js +0 -2
- package/dist/jsx/fields/Combobox/index.native.js.map +1 -1
- package/dist/jsx/fields/Select/index.mjs +2 -4
- package/dist/jsx/fields/Select/index.mjs.map +1 -1
- package/dist/jsx/fields/Select/index.native.js +2 -4
- package/dist/jsx/fields/Select/index.native.js.map +1 -1
- package/dist/jsx/shared/utils.mjs +2 -1
- package/dist/jsx/shared/utils.mjs.map +1 -1
- package/dist/jsx/shared/utils.native.js +2 -1
- package/dist/jsx/shared/utils.native.js.map +1 -1
- package/package.json +18 -8
- package/src/FloatingPanel/FloatingPanel.pointMenu.native.spec.tsx +126 -0
- package/src/FloatingPanel/index.native.tsx +199 -81
- package/src/FloatingPanel/index.tsx +130 -42
- package/src/FloatingPanel/pointAnchor.spec.ts +141 -0
- package/src/FloatingPanel/pointAnchor.ts +122 -0
- package/src/FloatingPanel/useFloatingPanel.ts +9 -2
- package/src/InputParts/index.tsx +20 -1
- package/src/fieldFamilyStories.radius.spec.tsx +23 -15
- package/src/fields/Combobox/index.tsx +0 -2
- package/src/fields/Input/Input.spec.tsx +23 -0
- package/src/fields/Select/index.tsx +6 -4
- package/src/shared/utils.ts +7 -2
- package/types/FloatingPanel/index.d.ts +4 -1
- package/types/FloatingPanel/index.d.ts.map +1 -1
- package/types/FloatingPanel/index.native.d.ts +5 -0
- package/types/FloatingPanel/index.native.d.ts.map +1 -1
- package/types/FloatingPanel/pointAnchor.d.ts +66 -0
- package/types/FloatingPanel/pointAnchor.d.ts.map +1 -0
- package/types/FloatingPanel/useFloatingPanel.d.ts +7 -1
- package/types/FloatingPanel/useFloatingPanel.d.ts.map +1 -1
- package/types/InputParts/index.d.ts.map +1 -1
- package/types/fields/Combobox/index.d.ts.map +1 -1
- package/types/fields/Select/index.d.ts.map +1 -1
- package/types/shared/utils.d.ts +1 -0
- 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":"AAAA,SAAyBA,KAAA,EAAOC,OAAA,QAAe;AAQ/C,SACEC,eAAA,EACAC,cAAA,EACAC,kBAAA,EACAC,kBAAA,EACAC,gBAAA,QACK;AAEP,SAASC,cAAA,EAAgBC,eAAA,QAAuB;AAChD,SAASC,wBAAA,EAA0BC,0BAAA,QAAkC;AAO9D,SAASC,eAAeC,SAAA,EAAuBC,IAAA,GAAO,GAAGC,KAAA,GAAQX,cAAA,CAAe,GAAW;EAChG,OAAOE,kBAAA,CAAmBU,MAAA,CAAOH,SAAS,GAAG;IAAEE;EAAM,CAAC,EAAEE,MAAA,GAASH,IAAA;AACnE;AAEA,SAASI,YACPC,WAAA,EACAC,WAAA,EACAC,QAAA,EACY;EACZ,IAAI,CAACF,WAAA,EAAa,OAAOE,QAAA;EACzB,IAAIF,WAAA,KAAgB,MAAM,OAAO;EACjC,IAAI,OAAOA,WAAA,KAAgB,YAAYA,WAAA,CAAYG,UAAA,CAAW,GAAG,GAAG;IAClE,MAAMC,GAAA,GAAMC,MAAA,CAAOC,QAAA,CAASN,WAAA,CAAYO,KAAA,CAAM,CAAC,GAAG,EAAE;IACpD,OAAOH,GAAA,GAAMH,WAAA,GAAc,IAAIA,WAAW,KAAKD,WAAA;EACjD;EACA,OAAOA,WAAA;AACT;AAMO,SAASQ,sBACdR,WAAA,EACAC,WAAA,GAAc,GACF;EACZ,OAAOF,WAAA,CAAYC,WAAA,EAAaC,WAAA,EAAa,IAAI;AACnD;AASO,SAASQ,6BACdT,WAAA,EACAC,WAAA,GAAc,GACF;EACZ,OAAOF,WAAA,CAAYC,WAAA,EAAaC,WAAA,EAAa,IAAI;AACnD;AAIA,MAAMS,gBAAA,GAAmBC,MAAA,CAAOC,IAAA,CAAK5B,eAAe;AAEpD,SAAS6B,cAAcb,WAAA,EAAgD;EACrE,IAAIA,WAAA,IAAe,MAAM,OAAO;EAChC,WAAWc,IAAA,IAAQJ,gBAAA,EAAkB;IACnC,IAAII,IAAA,KAASd,WAAA,IAAehB,eAAA,CAAgB8B,IAAI,MAAMd,WAAA,EAAa,OAAOc,IAAA;EAC5E;EACA,MAAM,IAAIC,KAAA,CACR,sBAAsBf,WAAW,mEACnC;AACF;AAQO,SAASgB,iBAAiBhB,WAAA,EAAiCiB,QAAA,EAA0B;EAC1F,OAAO/B,kBAAA,CAAmB,oBAAoB2B,aAAA,CAAcb,WAAW,GAAG;IAAEiB;EAAS,CAAC;AACxF;AAUO,SAASC,yBACdC,SAAA,EACAC,eAAA,EACqB;EACrB,MAAMC,SAAA,GAAYF,SAAA,CAAUE,SAAA;EAC5B,IACE,CAACA,SAAA,IACD,CAACD,eAAA,CAAgBE,cAAA,EAAgBD,SAAA,IACjC,CAACD,eAAA,CAAgBG,cAAA,EAAgBF,SAAA,IACjC,CAACD,eAAA,CAAgBI,qBAAA,EAAuBH,SAAA,EACxC;IACA,OAAO,CAAC;EACV;EACA,MAAMI,KAAA,GAA6B;IACjCC,QAAA,EAAU;IACV,GAAGP,SAAA,CAAUQ;EACf;EACA,IAAIP,eAAA,CAAgBE,cAAA,EAAgB;IAClCG,KAAA,CAAMG,UAAA,GAAaR,eAAA,CAAgBE,cAAA;EACrC;EACA,IAAIF,eAAA,CAAgBG,cAAA,EAAgB;IAClCE,KAAA,CAAMI,UAAA,GAAaT,eAAA,CAAgBG,cAAA;EACrC;EACA,IAAIH,eAAA,CAAgBI,qBAAA,EAAuB;IACzCC,KAAA,CAAMK,iBAAA,GAAoBV,eAAA,CAAgBI,qBAAA;EAC5C;EACA,IAAIL,SAAA,CAAUY,UAAA,EAAYN,KAAA,CAAMO,SAAA,GAAYb,SAAA,CAAUY,UAAA;EACtD,OAAON,KAAA;AACT;AAEO,SAASQ,aAAaR,KAAA,
|
|
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":"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
|
|
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.
|
|
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.
|
|
61
|
-
"@multiplatform.one/router": "7.
|
|
62
|
-
"@multiplatform.one/table-primitives": "7.
|
|
63
|
-
"@multiplatform.one/theme": "7.
|
|
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.
|
|
81
|
-
"@multiplatform.one/storybook": "7.
|
|
82
|
-
"@multiplatform.one/test-utils": "7.
|
|
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
|
|
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
|
-
|
|
142
|
-
|
|
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
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
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
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
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
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
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
|
-
</
|
|
570
|
-
</
|
|
571
|
-
|
|
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
|
+
}
|