@multiplatform.one/forms 7.70.0 → 7.72.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/Button/index.cjs +16 -0
- package/dist/cjs/Button/index.native.js +16 -0
- package/dist/cjs/Button/index.native.js.map +1 -1
- package/dist/cjs/FloatingPanel/echoContext.cjs +39 -0
- package/dist/cjs/FloatingPanel/echoContext.native.js +42 -0
- package/dist/cjs/FloatingPanel/echoContext.native.js.map +1 -0
- package/dist/cjs/FloatingPanel/index.cjs +212 -80
- package/dist/cjs/FloatingPanel/index.native.js +92 -17
- package/dist/cjs/FloatingPanel/index.native.js.map +1 -1
- package/dist/cjs/FloatingPanel/panelWidth.cjs +92 -0
- package/dist/cjs/FloatingPanel/panelWidth.native.js +99 -0
- package/dist/cjs/FloatingPanel/panelWidth.native.js.map +1 -0
- package/dist/cjs/FloatingPanel/pointAnchor.cjs +15 -5
- package/dist/cjs/FloatingPanel/pointAnchor.native.js +15 -5
- package/dist/cjs/FloatingPanel/pointAnchor.native.js.map +1 -1
- package/dist/cjs/FloatingPanel/useFloatingPanel.cjs +58 -4
- package/dist/cjs/FloatingPanel/useFloatingPanel.native.js +69 -4
- package/dist/cjs/FloatingPanel/useFloatingPanel.native.js.map +1 -1
- package/dist/cjs/InputParts/index.cjs +20 -1
- package/dist/cjs/InputParts/index.native.js +22 -2
- package/dist/cjs/InputParts/index.native.js.map +1 -1
- package/dist/cjs/Wheel/NativeWheel.native.js +1 -1
- package/dist/cjs/Wheel/NativeWheel.native.js.map +1 -1
- package/dist/cjs/Wheel/index.cjs +2 -1
- package/dist/cjs/Wheel/index.native.js +4 -1
- package/dist/cjs/Wheel/index.native.js.map +1 -1
- package/dist/cjs/Wheel/wheelShared.cjs +6 -1
- package/dist/cjs/Wheel/wheelShared.native.js +7 -1
- package/dist/cjs/Wheel/wheelShared.native.js.map +1 -1
- package/dist/cjs/fields/Combobox/index.cjs +1 -0
- package/dist/cjs/fields/Combobox/index.native.js +1 -0
- package/dist/cjs/fields/Combobox/index.native.js.map +1 -1
- package/dist/cjs/fields/DatePicker/DatetimePicker.catalog.cjs +6 -30
- package/dist/cjs/fields/DatePicker/DatetimePicker.catalog.native.js +11 -34
- package/dist/cjs/fields/DatePicker/DatetimePicker.catalog.native.js.map +1 -1
- package/dist/cjs/fields/DatePicker/DatetimePicker.native.js.map +1 -1
- package/dist/cjs/fields/DatePicker/catalog.cjs +2 -28
- package/dist/cjs/fields/DatePicker/catalog.native.js +2 -30
- package/dist/cjs/fields/DatePicker/catalog.native.js.map +1 -1
- package/dist/cjs/fields/DatePicker/index.native.js.map +1 -1
- package/dist/cjs/fields/DatePicker/parts.cjs +11 -20
- package/dist/cjs/fields/DatePicker/parts.native.js +13 -22
- package/dist/cjs/fields/DatePicker/parts.native.js.map +1 -1
- package/dist/cjs/fields/SearchInput/index.cjs +23 -1
- package/dist/cjs/fields/SearchInput/index.native.js +23 -1
- package/dist/cjs/fields/SearchInput/index.native.js.map +1 -1
- package/dist/cjs/fields/Select/index.cjs +65 -44
- package/dist/cjs/fields/Select/index.native.js +69 -47
- package/dist/cjs/fields/Select/index.native.js.map +1 -1
- package/dist/cjs/fields/Select/shouldInlineChoices.cjs +3 -1
- package/dist/cjs/fields/Select/shouldInlineChoices.native.js +3 -1
- package/dist/cjs/fields/Select/shouldInlineChoices.native.js.map +1 -1
- package/dist/cjs/fields/TimePicker/catalog.cjs +4 -25
- package/dist/cjs/fields/TimePicker/catalog.native.js +7 -29
- package/dist/cjs/fields/TimePicker/catalog.native.js.map +1 -1
- package/dist/cjs/fields/TimePicker/index.native.js.map +1 -1
- package/dist/cjs/fields/TimePicker/parts.cjs +8 -21
- package/dist/cjs/fields/TimePicker/parts.native.js +8 -21
- package/dist/cjs/fields/TimePicker/parts.native.js.map +1 -1
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/shared/floatingList.cjs +13 -4
- package/dist/cjs/shared/floatingList.native.js +15 -4
- package/dist/cjs/shared/floatingList.native.js.map +1 -1
- package/dist/esm/Button/index.mjs +17 -1
- package/dist/esm/Button/index.mjs.map +1 -1
- package/dist/esm/Button/index.native.js +17 -1
- package/dist/esm/Button/index.native.js.map +1 -1
- package/dist/esm/FloatingPanel/echoContext.mjs +11 -0
- package/dist/esm/FloatingPanel/echoContext.mjs.map +1 -0
- package/dist/esm/FloatingPanel/echoContext.native.js +11 -0
- package/dist/esm/FloatingPanel/echoContext.native.js.map +1 -0
- package/dist/esm/FloatingPanel/index.mjs +213 -83
- package/dist/esm/FloatingPanel/index.mjs.map +1 -1
- package/dist/esm/FloatingPanel/index.native.js +92 -19
- package/dist/esm/FloatingPanel/index.native.js.map +1 -1
- package/dist/esm/FloatingPanel/panelWidth.mjs +63 -0
- package/dist/esm/FloatingPanel/panelWidth.mjs.map +1 -0
- package/dist/esm/FloatingPanel/panelWidth.native.js +67 -0
- package/dist/esm/FloatingPanel/panelWidth.native.js.map +1 -0
- package/dist/esm/FloatingPanel/pointAnchor.mjs +15 -5
- package/dist/esm/FloatingPanel/pointAnchor.mjs.map +1 -1
- package/dist/esm/FloatingPanel/pointAnchor.native.js +15 -5
- package/dist/esm/FloatingPanel/pointAnchor.native.js.map +1 -1
- package/dist/esm/FloatingPanel/useFloatingPanel.mjs +58 -5
- package/dist/esm/FloatingPanel/useFloatingPanel.mjs.map +1 -1
- package/dist/esm/FloatingPanel/useFloatingPanel.native.js +69 -5
- package/dist/esm/FloatingPanel/useFloatingPanel.native.js.map +1 -1
- package/dist/esm/InputParts/index.mjs +21 -2
- package/dist/esm/InputParts/index.mjs.map +1 -1
- package/dist/esm/InputParts/index.native.js +23 -3
- package/dist/esm/InputParts/index.native.js.map +1 -1
- package/dist/esm/Wheel/NativeWheel.native.js +1 -1
- package/dist/esm/Wheel/NativeWheel.native.js.map +1 -1
- package/dist/esm/Wheel/index.mjs +2 -1
- package/dist/esm/Wheel/index.mjs.map +1 -1
- package/dist/esm/Wheel/index.native.js +4 -1
- package/dist/esm/Wheel/index.native.js.map +1 -1
- package/dist/esm/Wheel/wheelShared.mjs +6 -1
- package/dist/esm/Wheel/wheelShared.mjs.map +1 -1
- package/dist/esm/Wheel/wheelShared.native.js +7 -1
- package/dist/esm/Wheel/wheelShared.native.js.map +1 -1
- package/dist/esm/fields/Combobox/index.mjs +1 -0
- package/dist/esm/fields/Combobox/index.mjs.map +1 -1
- package/dist/esm/fields/Combobox/index.native.js +1 -0
- package/dist/esm/fields/Combobox/index.native.js.map +1 -1
- package/dist/esm/fields/DatePicker/DatetimePicker.catalog.mjs +6 -30
- package/dist/esm/fields/DatePicker/DatetimePicker.catalog.mjs.map +1 -1
- package/dist/esm/fields/DatePicker/DatetimePicker.catalog.native.js +11 -34
- package/dist/esm/fields/DatePicker/DatetimePicker.catalog.native.js.map +1 -1
- package/dist/esm/fields/DatePicker/DatetimePicker.native.js.map +1 -1
- package/dist/esm/fields/DatePicker/catalog.mjs +2 -28
- package/dist/esm/fields/DatePicker/catalog.mjs.map +1 -1
- package/dist/esm/fields/DatePicker/catalog.native.js +2 -30
- package/dist/esm/fields/DatePicker/catalog.native.js.map +1 -1
- package/dist/esm/fields/DatePicker/index.native.js.map +1 -1
- package/dist/esm/fields/DatePicker/parts.mjs +11 -20
- package/dist/esm/fields/DatePicker/parts.mjs.map +1 -1
- package/dist/esm/fields/DatePicker/parts.native.js +13 -22
- package/dist/esm/fields/DatePicker/parts.native.js.map +1 -1
- package/dist/esm/fields/SearchInput/index.mjs +25 -3
- package/dist/esm/fields/SearchInput/index.mjs.map +1 -1
- package/dist/esm/fields/SearchInput/index.native.js +25 -3
- package/dist/esm/fields/SearchInput/index.native.js.map +1 -1
- package/dist/esm/fields/Select/index.mjs +66 -45
- package/dist/esm/fields/Select/index.mjs.map +1 -1
- package/dist/esm/fields/Select/index.native.js +70 -48
- package/dist/esm/fields/Select/index.native.js.map +1 -1
- package/dist/esm/fields/Select/shouldInlineChoices.mjs +3 -1
- package/dist/esm/fields/Select/shouldInlineChoices.mjs.map +1 -1
- package/dist/esm/fields/Select/shouldInlineChoices.native.js +3 -1
- package/dist/esm/fields/Select/shouldInlineChoices.native.js.map +1 -1
- package/dist/esm/fields/TimePicker/catalog.mjs +4 -25
- package/dist/esm/fields/TimePicker/catalog.mjs.map +1 -1
- package/dist/esm/fields/TimePicker/catalog.native.js +7 -29
- package/dist/esm/fields/TimePicker/catalog.native.js.map +1 -1
- package/dist/esm/fields/TimePicker/index.native.js.map +1 -1
- package/dist/esm/fields/TimePicker/parts.mjs +8 -21
- package/dist/esm/fields/TimePicker/parts.mjs.map +1 -1
- package/dist/esm/fields/TimePicker/parts.native.js +8 -21
- package/dist/esm/fields/TimePicker/parts.native.js.map +1 -1
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/index.native.js.map +1 -1
- package/dist/esm/shared/floatingList.mjs +14 -5
- package/dist/esm/shared/floatingList.mjs.map +1 -1
- package/dist/esm/shared/floatingList.native.js +16 -5
- package/dist/esm/shared/floatingList.native.js.map +1 -1
- package/dist/jsx/Button/index.mjs +17 -1
- package/dist/jsx/Button/index.mjs.map +1 -1
- package/dist/jsx/Button/index.native.js +16 -0
- package/dist/jsx/Button/index.native.js.map +1 -1
- package/dist/jsx/FloatingPanel/echoContext.mjs +11 -0
- package/dist/jsx/FloatingPanel/echoContext.mjs.map +1 -0
- package/dist/jsx/FloatingPanel/echoContext.native.js +42 -0
- package/dist/jsx/FloatingPanel/echoContext.native.js.map +1 -0
- package/dist/jsx/FloatingPanel/index.mjs +213 -83
- package/dist/jsx/FloatingPanel/index.mjs.map +1 -1
- package/dist/jsx/FloatingPanel/index.native.js +92 -17
- package/dist/jsx/FloatingPanel/index.native.js.map +1 -1
- package/dist/jsx/FloatingPanel/panelWidth.mjs +63 -0
- package/dist/jsx/FloatingPanel/panelWidth.mjs.map +1 -0
- package/dist/jsx/FloatingPanel/panelWidth.native.js +99 -0
- package/dist/jsx/FloatingPanel/panelWidth.native.js.map +1 -0
- package/dist/jsx/FloatingPanel/pointAnchor.mjs +15 -5
- package/dist/jsx/FloatingPanel/pointAnchor.mjs.map +1 -1
- package/dist/jsx/FloatingPanel/pointAnchor.native.js +15 -5
- package/dist/jsx/FloatingPanel/pointAnchor.native.js.map +1 -1
- package/dist/jsx/FloatingPanel/useFloatingPanel.mjs +58 -5
- package/dist/jsx/FloatingPanel/useFloatingPanel.mjs.map +1 -1
- package/dist/jsx/FloatingPanel/useFloatingPanel.native.js +69 -4
- package/dist/jsx/FloatingPanel/useFloatingPanel.native.js.map +1 -1
- package/dist/jsx/InputParts/index.mjs +21 -2
- package/dist/jsx/InputParts/index.mjs.map +1 -1
- package/dist/jsx/InputParts/index.native.js +22 -2
- package/dist/jsx/InputParts/index.native.js.map +1 -1
- package/dist/jsx/Wheel/NativeWheel.native.js +1 -1
- package/dist/jsx/Wheel/NativeWheel.native.js.map +1 -1
- package/dist/jsx/Wheel/index.mjs +2 -1
- package/dist/jsx/Wheel/index.mjs.map +1 -1
- package/dist/jsx/Wheel/index.native.js +4 -1
- package/dist/jsx/Wheel/index.native.js.map +1 -1
- package/dist/jsx/Wheel/wheelShared.mjs +6 -1
- package/dist/jsx/Wheel/wheelShared.mjs.map +1 -1
- package/dist/jsx/Wheel/wheelShared.native.js +7 -1
- package/dist/jsx/Wheel/wheelShared.native.js.map +1 -1
- package/dist/jsx/fields/Combobox/index.mjs +1 -0
- package/dist/jsx/fields/Combobox/index.mjs.map +1 -1
- package/dist/jsx/fields/Combobox/index.native.js +1 -0
- package/dist/jsx/fields/Combobox/index.native.js.map +1 -1
- package/dist/jsx/fields/DatePicker/DatetimePicker.catalog.mjs +6 -30
- package/dist/jsx/fields/DatePicker/DatetimePicker.catalog.mjs.map +1 -1
- package/dist/jsx/fields/DatePicker/DatetimePicker.catalog.native.js +11 -34
- package/dist/jsx/fields/DatePicker/DatetimePicker.catalog.native.js.map +1 -1
- package/dist/jsx/fields/DatePicker/DatetimePicker.native.js.map +1 -1
- package/dist/jsx/fields/DatePicker/catalog.mjs +2 -28
- package/dist/jsx/fields/DatePicker/catalog.mjs.map +1 -1
- package/dist/jsx/fields/DatePicker/catalog.native.js +2 -30
- package/dist/jsx/fields/DatePicker/catalog.native.js.map +1 -1
- package/dist/jsx/fields/DatePicker/index.native.js.map +1 -1
- package/dist/jsx/fields/DatePicker/parts.mjs +11 -20
- package/dist/jsx/fields/DatePicker/parts.mjs.map +1 -1
- package/dist/jsx/fields/DatePicker/parts.native.js +13 -22
- package/dist/jsx/fields/DatePicker/parts.native.js.map +1 -1
- package/dist/jsx/fields/SearchInput/index.mjs +25 -3
- package/dist/jsx/fields/SearchInput/index.mjs.map +1 -1
- package/dist/jsx/fields/SearchInput/index.native.js +23 -1
- package/dist/jsx/fields/SearchInput/index.native.js.map +1 -1
- package/dist/jsx/fields/Select/index.mjs +66 -45
- package/dist/jsx/fields/Select/index.mjs.map +1 -1
- package/dist/jsx/fields/Select/index.native.js +69 -47
- package/dist/jsx/fields/Select/index.native.js.map +1 -1
- package/dist/jsx/fields/Select/shouldInlineChoices.mjs +3 -1
- package/dist/jsx/fields/Select/shouldInlineChoices.mjs.map +1 -1
- package/dist/jsx/fields/Select/shouldInlineChoices.native.js +3 -1
- package/dist/jsx/fields/Select/shouldInlineChoices.native.js.map +1 -1
- package/dist/jsx/fields/TimePicker/catalog.mjs +4 -25
- package/dist/jsx/fields/TimePicker/catalog.mjs.map +1 -1
- package/dist/jsx/fields/TimePicker/catalog.native.js +7 -29
- package/dist/jsx/fields/TimePicker/catalog.native.js.map +1 -1
- package/dist/jsx/fields/TimePicker/index.native.js.map +1 -1
- package/dist/jsx/fields/TimePicker/parts.mjs +8 -21
- package/dist/jsx/fields/TimePicker/parts.mjs.map +1 -1
- package/dist/jsx/fields/TimePicker/parts.native.js +8 -21
- package/dist/jsx/fields/TimePicker/parts.native.js.map +1 -1
- package/dist/jsx/index.js.map +1 -1
- package/dist/jsx/index.mjs.map +1 -1
- package/dist/jsx/index.native.js.map +1 -1
- package/dist/jsx/shared/floatingList.mjs +14 -5
- package/dist/jsx/shared/floatingList.mjs.map +1 -1
- package/dist/jsx/shared/floatingList.native.js +15 -4
- package/dist/jsx/shared/floatingList.native.js.map +1 -1
- package/package.json +8 -8
- package/src/Button/index.tsx +22 -0
- package/src/FloatingPanel/FloatingPanel.echoStretch.spec.tsx +67 -0
- package/src/FloatingPanel/FloatingPanel.menuFace.native.spec.tsx +193 -2
- package/src/FloatingPanel/FloatingPanel.seamlessCover.spec.tsx +237 -0
- package/src/FloatingPanel/echoContext.ts +22 -0
- package/src/FloatingPanel/index.native.tsx +106 -9
- package/src/FloatingPanel/index.tsx +310 -102
- package/src/FloatingPanel/panelWidth.spec.ts +158 -0
- package/src/FloatingPanel/panelWidth.ts +122 -0
- package/src/FloatingPanel/panelWidthContract.spec.ts +10 -10
- package/src/FloatingPanel/pointAnchor.spec.ts +64 -2
- package/src/FloatingPanel/pointAnchor.ts +28 -3
- package/src/FloatingPanel/useFloatingPanel.spec.tsx +124 -4
- package/src/FloatingPanel/useFloatingPanel.ts +106 -33
- package/src/InputParts/index.tsx +30 -1
- package/src/Wheel/NativeWheel.native.tsx +1 -1
- package/src/Wheel/Wheel.spec.tsx +9 -0
- package/src/Wheel/index.tsx +12 -3
- package/src/Wheel/wheelShared.ts +6 -2
- package/src/fields/Combobox/index.tsx +1 -0
- package/src/fields/DatePicker/DatePicker.stories.tsx +3 -3
- package/src/fields/DatePicker/DatetimePicker.catalog.tsx +17 -45
- package/src/fields/DatePicker/DatetimePicker.native.tsx +3 -0
- package/src/fields/DatePicker/catalog.tsx +8 -39
- package/src/fields/DatePicker/index.native.tsx +3 -0
- package/src/fields/DatePicker/parts.tsx +13 -23
- package/src/fields/DatePicker/seamlessCover.spec.tsx +180 -0
- package/src/fields/DatePicker/touchWeb.spec.tsx +109 -167
- package/src/fields/SearchInput/SearchInput.spec.tsx +40 -0
- package/src/fields/SearchInput/index.tsx +47 -2
- package/src/fields/Select/Select.containingBlock.spec.tsx +191 -0
- package/src/fields/Select/Select.stories.tsx +43 -0
- package/src/fields/Select/index.tsx +109 -45
- package/src/fields/Select/shouldInlineChoices.spec.ts +13 -0
- package/src/fields/Select/shouldInlineChoices.ts +6 -0
- package/src/fields/TimePicker/catalog.tsx +12 -33
- package/src/fields/TimePicker/index.native.tsx +2 -0
- package/src/fields/TimePicker/parts.tsx +6 -20
- package/src/index.ts +1 -0
- package/src/shared/floatingList.tsx +21 -5
- package/types/Button/index.d.ts.map +1 -1
- package/types/FloatingPanel/echoContext.d.ts +14 -0
- package/types/FloatingPanel/echoContext.d.ts.map +1 -0
- package/types/FloatingPanel/index.d.ts +59 -0
- package/types/FloatingPanel/index.d.ts.map +1 -1
- package/types/FloatingPanel/index.native.d.ts +9 -1
- package/types/FloatingPanel/index.native.d.ts.map +1 -1
- package/types/FloatingPanel/panelWidth.d.ts +71 -0
- package/types/FloatingPanel/panelWidth.d.ts.map +1 -0
- package/types/FloatingPanel/pointAnchor.d.ts +8 -1
- package/types/FloatingPanel/pointAnchor.d.ts.map +1 -1
- package/types/FloatingPanel/useFloatingPanel.d.ts +33 -2
- package/types/FloatingPanel/useFloatingPanel.d.ts.map +1 -1
- package/types/InputParts/index.d.ts +5 -1
- package/types/InputParts/index.d.ts.map +1 -1
- package/types/Wheel/index.d.ts.map +1 -1
- package/types/Wheel/wheelShared.d.ts +2 -1
- package/types/Wheel/wheelShared.d.ts.map +1 -1
- package/types/fields/Combobox/index.d.ts.map +1 -1
- package/types/fields/DatePicker/DatetimePicker.catalog.d.ts +6 -0
- package/types/fields/DatePicker/DatetimePicker.catalog.d.ts.map +1 -1
- package/types/fields/DatePicker/DatetimePicker.native.d.ts +3 -0
- package/types/fields/DatePicker/DatetimePicker.native.d.ts.map +1 -1
- package/types/fields/DatePicker/catalog.d.ts +6 -0
- package/types/fields/DatePicker/catalog.d.ts.map +1 -1
- package/types/fields/DatePicker/index.native.d.ts +3 -0
- package/types/fields/DatePicker/index.native.d.ts.map +1 -1
- package/types/fields/DatePicker/parts.d.ts +5 -7
- package/types/fields/DatePicker/parts.d.ts.map +1 -1
- package/types/fields/Input/index.d.ts +3 -1
- package/types/fields/Input/index.d.ts.map +1 -1
- package/types/fields/SearchInput/index.d.ts +11 -0
- package/types/fields/SearchInput/index.d.ts.map +1 -1
- package/types/fields/Select/index.d.ts +8 -1
- package/types/fields/Select/index.d.ts.map +1 -1
- package/types/fields/Select/shouldInlineChoices.d.ts +5 -1
- package/types/fields/Select/shouldInlineChoices.d.ts.map +1 -1
- package/types/fields/TimePicker/catalog.d.ts +7 -1
- package/types/fields/TimePicker/catalog.d.ts.map +1 -1
- package/types/fields/TimePicker/index.native.d.ts +2 -0
- package/types/fields/TimePicker/index.native.d.ts.map +1 -1
- package/types/fields/TimePicker/parts.d.ts +1 -3
- package/types/fields/TimePicker/parts.d.ts.map +1 -1
- package/types/index.d.ts +1 -0
- package/types/index.d.ts.map +1 -1
- package/types/shared/floatingList.d.ts +5 -1
- package/types/shared/floatingList.d.ts.map +1 -1
- package/dist/cjs/shared/touchWebPicker.cjs +0 -136
- package/dist/cjs/shared/touchWebPicker.native.js +0 -154
- package/dist/cjs/shared/touchWebPicker.native.js.map +0 -1
- package/dist/esm/shared/touchWebPicker.mjs +0 -105
- package/dist/esm/shared/touchWebPicker.mjs.map +0 -1
- package/dist/esm/shared/touchWebPicker.native.js +0 -120
- package/dist/esm/shared/touchWebPicker.native.js.map +0 -1
- package/dist/jsx/shared/touchWebPicker.mjs +0 -105
- package/dist/jsx/shared/touchWebPicker.mjs.map +0 -1
- package/dist/jsx/shared/touchWebPicker.native.js +0 -154
- package/dist/jsx/shared/touchWebPicker.native.js.map +0 -1
- package/src/shared/touchWebPicker.spec.ts +0 -98
- package/src/shared/touchWebPicker.tsx +0 -158
- package/types/shared/touchWebPicker.d.ts +0 -40
- package/types/shared/touchWebPicker.d.ts.map +0 -1
|
@@ -33,6 +33,46 @@ describe("SearchInput", () => {
|
|
|
33
33
|
expect(result.container.querySelector("svg")).toBeTruthy();
|
|
34
34
|
});
|
|
35
35
|
|
|
36
|
+
it("puts trailing accessories inside the field, after clear, without an end inset", () => {
|
|
37
|
+
const result = renderWithProviders(
|
|
38
|
+
<SearchInput
|
|
39
|
+
defaultValue="abc"
|
|
40
|
+
trailing={
|
|
41
|
+
<button type="button" aria-label="Filter">
|
|
42
|
+
f
|
|
43
|
+
</button>
|
|
44
|
+
}
|
|
45
|
+
/>,
|
|
46
|
+
);
|
|
47
|
+
const input = result.container.querySelector("input")!;
|
|
48
|
+
const trailing = result.container.querySelector<HTMLElement>("[data-search-trailing]")!;
|
|
49
|
+
const box = trailing.parentElement!;
|
|
50
|
+
expect(box.contains(input)).toBe(true);
|
|
51
|
+
const clear = result.getByLabelText("Clear search");
|
|
52
|
+
expect(clear.compareDocumentPosition(trailing) & Node.DOCUMENT_POSITION_FOLLOWING).toBeTruthy();
|
|
53
|
+
expect(trailing.contains(result.getByLabelText("Filter"))).toBe(true);
|
|
54
|
+
const style = getComputedStyle(box);
|
|
55
|
+
expect(style.paddingInlineEnd || "0px").toBe("0px");
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
it("filled is the .searchable field: the tinted wash, no edge at rest (FZ-8039)", () => {
|
|
59
|
+
const boxOf = (node: Element) => node.closest("[data-ring-target]") as HTMLElement;
|
|
60
|
+
const filled = renderWithProviders(<SearchInput filled />);
|
|
61
|
+
const filledBox = boxOf(filled.container.querySelector("input")!);
|
|
62
|
+
expect(String(filledBox.className)).toMatch(/_bg-color3\b/);
|
|
63
|
+
expect(String(filledBox.className)).toMatch(/_btc-transparent\b/);
|
|
64
|
+
filled.unmount();
|
|
65
|
+
const plain = renderWithProviders(<SearchInput />);
|
|
66
|
+
const plainBox = boxOf(plain.container.querySelector("input")!);
|
|
67
|
+
expect(String(plainBox.className)).not.toMatch(/_bg-color3\b/);
|
|
68
|
+
expect(String(plainBox.className)).not.toMatch(/_btc-transparent\b/);
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
it("keeps its end inset without trailing accessories", () => {
|
|
72
|
+
const result = renderWithProviders(<SearchInput />);
|
|
73
|
+
expect(result.container.querySelector("[data-search-trailing]")).toBeNull();
|
|
74
|
+
});
|
|
75
|
+
|
|
36
76
|
it("uses readable glyph ink for search and clear rather than the boundary ramp", () => {
|
|
37
77
|
let expectedInk = "";
|
|
38
78
|
function Sample() {
|
|
@@ -13,14 +13,17 @@ import { useTouchSurface } from "@multiplatform.one/theme";
|
|
|
13
13
|
import { MagnifyingGlassIcon, XIcon } from "@phosphor-icons/react";
|
|
14
14
|
import {
|
|
15
15
|
MIN_PRESS_TARGET,
|
|
16
|
+
controlTierWash,
|
|
16
17
|
ensureCompositeFocusRing,
|
|
18
|
+
isDarkThemeName,
|
|
17
19
|
pressTargetHitSlop,
|
|
18
20
|
sizeRecipeForToken,
|
|
21
|
+
useElevatedSurface,
|
|
19
22
|
} from "@multiplatform.one/theme";
|
|
20
23
|
import type { ComponentProps, ReactNode, Ref, RefObject } from "react";
|
|
21
24
|
import { forwardRef, useCallback, useEffect, useImperativeHandle, useRef, useState } from "react";
|
|
22
25
|
import type { LabelProps, SizeTokens, TamaguiElement } from "tamagui";
|
|
23
|
-
import { isWeb } from "tamagui";
|
|
26
|
+
import { XStack, isWeb, useThemeName } from "tamagui";
|
|
24
27
|
import { Skeleton } from "../../Skeleton";
|
|
25
28
|
import { Field, FieldLayout } from "../../fieldLayout";
|
|
26
29
|
import { Input as InputParts } from "../../InputParts";
|
|
@@ -70,6 +73,11 @@ export interface SearchInputProps {
|
|
|
70
73
|
size?: SizeTokens;
|
|
71
74
|
/** Borderless/background-less (flush toolbar bands). */
|
|
72
75
|
chromeless?: boolean;
|
|
76
|
+
/**
|
|
77
|
+
* The `.searchable` field of a list (UISearchBar): the LC-153 tinted wash
|
|
78
|
+
* with no edge at rest. Focus still turns the edge accent (LC-133).
|
|
79
|
+
*/
|
|
80
|
+
filled?: boolean;
|
|
73
81
|
skeleton?: boolean;
|
|
74
82
|
label?: ReactNode;
|
|
75
83
|
labelProps?: Omit<LabelProps, "htmlFor" | "ref">;
|
|
@@ -78,6 +86,12 @@ export interface SearchInputProps {
|
|
|
78
86
|
/** Leading icon size in px. Defaults from the size token. */
|
|
79
87
|
iconSize?: number;
|
|
80
88
|
inputProps?: Omit<AreaProps, "value" | "id" | "onChange" | "onChangeText" | "ref">;
|
|
89
|
+
/**
|
|
90
|
+
* Bare glyph buttons at the field's trailing edge, after clear: the
|
|
91
|
+
* `.searchable` accessories of the list the field searches (filter, sort,
|
|
92
|
+
* more). The field drops its end inset so the last glyph's square closes it.
|
|
93
|
+
*/
|
|
94
|
+
trailing?: ReactNode;
|
|
81
95
|
}
|
|
82
96
|
|
|
83
97
|
const SEARCH_STYLE_ID = "mp-search-input-chrome";
|
|
@@ -141,6 +155,7 @@ function SearchInputImpl(
|
|
|
141
155
|
error,
|
|
142
156
|
size,
|
|
143
157
|
chromeless,
|
|
158
|
+
filled,
|
|
144
159
|
skeleton,
|
|
145
160
|
label,
|
|
146
161
|
labelProps,
|
|
@@ -148,6 +163,7 @@ function SearchInputImpl(
|
|
|
148
163
|
"aria-label": ariaLabel,
|
|
149
164
|
iconSize,
|
|
150
165
|
inputProps,
|
|
166
|
+
trailing,
|
|
151
167
|
}: SearchInputProps,
|
|
152
168
|
ref: Ref<SearchInputHandle>,
|
|
153
169
|
) {
|
|
@@ -244,6 +260,18 @@ function SearchInputImpl(
|
|
|
244
260
|
...(belowFloor ? { hitSlop: pressTargetHitSlop(visualHeight) } : undefined),
|
|
245
261
|
} as const;
|
|
246
262
|
|
|
263
|
+
const elevatedGround = useElevatedSurface();
|
|
264
|
+
const darkScheme = isDarkThemeName(useThemeName());
|
|
265
|
+
const filledWash = controlTierWash(darkScheme, elevatedGround).rest;
|
|
266
|
+
const filledProps =
|
|
267
|
+
filled && !chromeless
|
|
268
|
+
? {
|
|
269
|
+
backgroundColor: filledWash,
|
|
270
|
+
borderColor: "transparent" as const,
|
|
271
|
+
hoverStyle: { backgroundColor: filledWash, borderColor: "transparent" as const },
|
|
272
|
+
}
|
|
273
|
+
: undefined;
|
|
274
|
+
|
|
247
275
|
const chromelessProps = chromeless
|
|
248
276
|
? {
|
|
249
277
|
borderWidth: 0,
|
|
@@ -345,7 +373,13 @@ function SearchInputImpl(
|
|
|
345
373
|
} as unknown as AreaProps;
|
|
346
374
|
|
|
347
375
|
return (
|
|
348
|
-
<InputParts.Box
|
|
376
|
+
<InputParts.Box
|
|
377
|
+
{...boxContract}
|
|
378
|
+
disabled={disabled}
|
|
379
|
+
trailingFlush={trailing != null}
|
|
380
|
+
{...filledProps}
|
|
381
|
+
{...chromelessProps}
|
|
382
|
+
>
|
|
349
383
|
<InputParts.Icon
|
|
350
384
|
adornment="leading"
|
|
351
385
|
color={formCommonColors.muted}
|
|
@@ -368,6 +402,17 @@ function SearchInputImpl(
|
|
|
368
402
|
<XIcon />
|
|
369
403
|
</InputParts.Action>
|
|
370
404
|
) : null}
|
|
405
|
+
{trailing != null ? (
|
|
406
|
+
<XStack
|
|
407
|
+
data-search-trailing=""
|
|
408
|
+
flexDirection="row"
|
|
409
|
+
alignItems="center"
|
|
410
|
+
alignSelf="stretch"
|
|
411
|
+
flexShrink={0}
|
|
412
|
+
>
|
|
413
|
+
{trailing}
|
|
414
|
+
</XStack>
|
|
415
|
+
) : null}
|
|
371
416
|
</InputParts.Box>
|
|
372
417
|
);
|
|
373
418
|
};
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FZ-8438 (Clay's rv_0ea65e640a0ef261, an iPad Select inside a sheet): the
|
|
3
|
+
* listbox is `position: fixed`, and inside a transformed sheet it lays out
|
|
4
|
+
* against that sheet, not the viewport. Its top is offset by the sheet's
|
|
5
|
+
* origin so the panel still lands on its field.
|
|
6
|
+
*/
|
|
7
|
+
import { fireEvent, waitFor } from "@testing-library/react";
|
|
8
|
+
import { renderWithProviders } from "@multiplatform.one/test-utils";
|
|
9
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
10
|
+
import { OverlayStackProvider } from "../../shared/overlayStack";
|
|
11
|
+
import { Select, type SelectOption } from "./index";
|
|
12
|
+
|
|
13
|
+
const options: SelectOption[] = [
|
|
14
|
+
{ value: "hel", label: "Helsinki" },
|
|
15
|
+
{ value: "fsn", label: "Falkenstein" },
|
|
16
|
+
{ value: "nbg", label: "Nuremberg" },
|
|
17
|
+
];
|
|
18
|
+
|
|
19
|
+
async function openTop(result: ReturnType<typeof renderWithProviders>) {
|
|
20
|
+
fireEvent.keyDown(result.getByTestId("select-trigger"), { key: "Enter" });
|
|
21
|
+
const dropdown = await result.findByTestId("select-dropdown");
|
|
22
|
+
await waitFor(() => expect(dropdown.style.top).not.toBe(""));
|
|
23
|
+
return { dropdown, top: parseFloat(dropdown.style.top) };
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
describe("Select inside a transformed sheet (FZ-8438)", () => {
|
|
27
|
+
beforeEach(() => {
|
|
28
|
+
Object.defineProperty(window, "innerWidth", {
|
|
29
|
+
configurable: true,
|
|
30
|
+
writable: true,
|
|
31
|
+
value: 1200,
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
it("offsets its top by the sheet it lays out against", async () => {
|
|
36
|
+
const plain = renderWithProviders(<Select options={options} value="hel" />);
|
|
37
|
+
const { top: viewportTop } = await openTop(plain);
|
|
38
|
+
plain.unmount();
|
|
39
|
+
|
|
40
|
+
const result = renderWithProviders(
|
|
41
|
+
<div
|
|
42
|
+
role="dialog"
|
|
43
|
+
data-testid="sheet"
|
|
44
|
+
style={{ transform: "translateY(0px)", overflowY: "auto", height: 100 }}
|
|
45
|
+
>
|
|
46
|
+
<Select options={options} value="hel" />
|
|
47
|
+
</div>,
|
|
48
|
+
);
|
|
49
|
+
const sheet = result.getByTestId("sheet");
|
|
50
|
+
sheet.scrollTop = 40;
|
|
51
|
+
const { dropdown, top } = await openTop(result);
|
|
52
|
+
expect(sheet.contains(dropdown)).toBe(true);
|
|
53
|
+
expect(top).toBe(viewportTop + 40);
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
describe("Select seamless cover (LC-112, FZ-8438)", () => {
|
|
58
|
+
beforeEach(() => {
|
|
59
|
+
Object.defineProperty(window, "innerWidth", {
|
|
60
|
+
configurable: true,
|
|
61
|
+
writable: true,
|
|
62
|
+
value: 1200,
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
afterEach(() => {
|
|
66
|
+
vi.restoreAllMocks();
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
it("opens on the field's top edge with the field echoed as a hidden first row", async () => {
|
|
70
|
+
const original = HTMLElement.prototype.getBoundingClientRect;
|
|
71
|
+
vi.spyOn(HTMLElement.prototype, "getBoundingClientRect").mockImplementation(
|
|
72
|
+
function (this: HTMLElement) {
|
|
73
|
+
const field = this.querySelector('[data-testid="select-trigger"]');
|
|
74
|
+
if (this.dataset.testid === "select-trigger" || field) {
|
|
75
|
+
return {
|
|
76
|
+
x: 16,
|
|
77
|
+
y: 200,
|
|
78
|
+
top: 200,
|
|
79
|
+
left: 16,
|
|
80
|
+
right: 416,
|
|
81
|
+
bottom: 240,
|
|
82
|
+
width: 400,
|
|
83
|
+
height: 40,
|
|
84
|
+
toJSON: () => ({}),
|
|
85
|
+
} as DOMRect;
|
|
86
|
+
}
|
|
87
|
+
return original.call(this);
|
|
88
|
+
},
|
|
89
|
+
);
|
|
90
|
+
const result = renderWithProviders(<Select options={options} value="nbg" />);
|
|
91
|
+
const { dropdown, top } = await openTop(result);
|
|
92
|
+
expect(top).toBe(200);
|
|
93
|
+
const echo = dropdown.querySelector<HTMLElement>("[data-fp-trigger-row]");
|
|
94
|
+
expect(echo).not.toBeNull();
|
|
95
|
+
expect(dropdown.firstElementChild).toBe(echo);
|
|
96
|
+
expect(echo?.getAttribute("aria-hidden")).toBe("true");
|
|
97
|
+
expect(echo?.getAttribute("role")).toBeNull();
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
describe("Select drop-up (LC-112, FZ-8438 r3)", () => {
|
|
102
|
+
const field = (top: number) => ({
|
|
103
|
+
x: 16,
|
|
104
|
+
y: top,
|
|
105
|
+
top,
|
|
106
|
+
left: 16,
|
|
107
|
+
right: 416,
|
|
108
|
+
bottom: top + 40,
|
|
109
|
+
width: 400,
|
|
110
|
+
height: 40,
|
|
111
|
+
toJSON: () => ({}),
|
|
112
|
+
});
|
|
113
|
+
let fieldTop = 700;
|
|
114
|
+
beforeEach(() => {
|
|
115
|
+
Object.defineProperty(window, "innerWidth", {
|
|
116
|
+
configurable: true,
|
|
117
|
+
writable: true,
|
|
118
|
+
value: 1024,
|
|
119
|
+
});
|
|
120
|
+
Object.defineProperty(window, "innerHeight", {
|
|
121
|
+
configurable: true,
|
|
122
|
+
writable: true,
|
|
123
|
+
value: 768,
|
|
124
|
+
});
|
|
125
|
+
const original = HTMLElement.prototype.getBoundingClientRect;
|
|
126
|
+
vi.spyOn(HTMLElement.prototype, "getBoundingClientRect").mockImplementation(
|
|
127
|
+
function (this: HTMLElement) {
|
|
128
|
+
if (
|
|
129
|
+
this.dataset.testid === "select-trigger" ||
|
|
130
|
+
this.querySelector('[data-testid="select-trigger"]')
|
|
131
|
+
) {
|
|
132
|
+
return field(fieldTop) as DOMRect;
|
|
133
|
+
}
|
|
134
|
+
return original.call(this);
|
|
135
|
+
},
|
|
136
|
+
);
|
|
137
|
+
vi.spyOn(HTMLElement.prototype, "scrollHeight", "get").mockImplementation(
|
|
138
|
+
function (this: HTMLElement) {
|
|
139
|
+
return this.dataset.testid === "select-dropdown" ? 300 : 0;
|
|
140
|
+
},
|
|
141
|
+
);
|
|
142
|
+
});
|
|
143
|
+
afterEach(() => {
|
|
144
|
+
vi.restoreAllMocks();
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
it("a field too low for its list opens upward, its bottom edge on the field's", async () => {
|
|
148
|
+
fieldTop = 700;
|
|
149
|
+
const result = renderWithProviders(<Select options={options} value="hel" />);
|
|
150
|
+
const { dropdown } = await openTop(result);
|
|
151
|
+
// The panel's bottom edge is the field's (740): the 300 list plus the
|
|
152
|
+
// frame's borders, above it.
|
|
153
|
+
await waitFor(() => expect(parseFloat(dropdown.style.top)).toBeLessThan(700));
|
|
154
|
+
expect(parseFloat(dropdown.style.top) + parseFloat(dropdown.style.maxHeight)).toBe(740);
|
|
155
|
+
expect(parseFloat(dropdown.style.maxHeight)).toBeGreaterThanOrEqual(300);
|
|
156
|
+
const echo = dropdown.querySelector<HTMLElement>("[data-fp-trigger-row]");
|
|
157
|
+
await waitFor(() => expect(echo?.style.order).toBe("1"));
|
|
158
|
+
expect(echo?.style.top).toBe("");
|
|
159
|
+
expect(echo?.style.bottom).not.toBe("");
|
|
160
|
+
});
|
|
161
|
+
|
|
162
|
+
it("a field with room below keeps the echo on top, opening down", async () => {
|
|
163
|
+
fieldTop = 120;
|
|
164
|
+
const result = renderWithProviders(<Select options={options} value="hel" />);
|
|
165
|
+
const { dropdown, top } = await openTop(result);
|
|
166
|
+
expect(top).toBe(120);
|
|
167
|
+
const echo = dropdown.querySelector<HTMLElement>("[data-fp-trigger-row]");
|
|
168
|
+
expect(echo?.style.order).toBe("");
|
|
169
|
+
});
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
describe("Select beside its field in a sheet (LC-262, FZ-8438)", () => {
|
|
173
|
+
beforeEach(() => {
|
|
174
|
+
Object.defineProperty(window, "innerWidth", {
|
|
175
|
+
configurable: true,
|
|
176
|
+
writable: true,
|
|
177
|
+
value: 1200,
|
|
178
|
+
});
|
|
179
|
+
});
|
|
180
|
+
|
|
181
|
+
it("draws no trigger echo row when it opens beside the field", async () => {
|
|
182
|
+
const result = renderWithProviders(
|
|
183
|
+
<OverlayStackProvider zIndex={100000}>
|
|
184
|
+
<Select options={options} value="hel" />
|
|
185
|
+
</OverlayStackProvider>,
|
|
186
|
+
);
|
|
187
|
+
const { dropdown } = await openTop(result);
|
|
188
|
+
expect(dropdown.querySelector("[data-fp-trigger-row]")).toBeNull();
|
|
189
|
+
expect(dropdown.textContent?.match(/Helsinki/g)?.length ?? 0).toBe(1);
|
|
190
|
+
});
|
|
191
|
+
});
|
|
@@ -496,3 +496,46 @@ export const NativeIos: Story = {
|
|
|
496
496
|
native: true,
|
|
497
497
|
},
|
|
498
498
|
};
|
|
499
|
+
|
|
500
|
+
const zoneOptions: SelectOption[] = [
|
|
501
|
+
{ value: "hst", label: "Hawaii" },
|
|
502
|
+
{ value: "akst", label: "Alaska" },
|
|
503
|
+
{ value: "pt", label: "Pacific Time (US and Canada)" },
|
|
504
|
+
{ value: "mt", label: "Mountain Time (US and Canada)" },
|
|
505
|
+
{ value: "ct", label: "Central Time (US and Canada)" },
|
|
506
|
+
{ value: "et", label: "Eastern Time (US and Canada)" },
|
|
507
|
+
{ value: "gmt", label: "London" },
|
|
508
|
+
{ value: "cet", label: "Berlin" },
|
|
509
|
+
{ value: "eet", label: "Helsinki" },
|
|
510
|
+
{ value: "ist", label: "Kolkata" },
|
|
511
|
+
{ value: "jst", label: "Tokyo" },
|
|
512
|
+
{ value: "aest", label: "Sydney" },
|
|
513
|
+
];
|
|
514
|
+
|
|
515
|
+
/**
|
|
516
|
+
* LC-112 width setting (FZ-8438 r3): the same field opened four ways. Each
|
|
517
|
+
* panel's top edge sits on its field; only the width changes.
|
|
518
|
+
*/
|
|
519
|
+
export const PanelWidths: Story = {
|
|
520
|
+
render: () => (
|
|
521
|
+
<YStack gap="$4" width={260}>
|
|
522
|
+
<Select label="Content" options={zoneOptions} defaultValue="pt" panelWidth="content" />
|
|
523
|
+
<Select label="Trigger" options={zoneOptions} defaultValue="pt" panelWidth="trigger" />
|
|
524
|
+
<Select label="Screen" options={zoneOptions} defaultValue="pt" panelWidth="screen" />
|
|
525
|
+
<Select label="Fixed 360" options={zoneOptions} defaultValue="pt" panelWidth={360} />
|
|
526
|
+
</YStack>
|
|
527
|
+
),
|
|
528
|
+
};
|
|
529
|
+
|
|
530
|
+
/**
|
|
531
|
+
* Phone width (LC-112, FZ-7830): a long list opens its sheet at page level and
|
|
532
|
+
* a short one (seven or fewer options) opens as a menu over its field.
|
|
533
|
+
*/
|
|
534
|
+
export const PhoneLists: Story = {
|
|
535
|
+
render: () => (
|
|
536
|
+
<YStack gap="$4">
|
|
537
|
+
<Select label="Time zone" options={zoneOptions} defaultValue="pt" />
|
|
538
|
+
<Select label="Country" options={countryOptions} defaultValue="us" />
|
|
539
|
+
</YStack>
|
|
540
|
+
),
|
|
541
|
+
};
|