@multiplatform.one/forms 7.6.2 → 7.7.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 +7 -1
- package/dist/cjs/Button/index.native.js +7 -1
- package/dist/cjs/Button/index.native.js.map +1 -1
- package/dist/cjs/Chip/index.cjs +1 -3
- package/dist/cjs/Chip/index.native.js +5 -3
- package/dist/cjs/Chip/index.native.js.map +1 -1
- package/dist/cjs/ContextualSaveBar/index.cjs +19 -3
- package/dist/cjs/ContextualSaveBar/index.native.js +19 -3
- package/dist/cjs/ContextualSaveBar/index.native.js.map +1 -1
- package/dist/cjs/DescriptionList/index.cjs +38 -12
- package/dist/cjs/DescriptionList/index.native.js +38 -12
- package/dist/cjs/DescriptionList/index.native.js.map +1 -1
- package/dist/cjs/ErrorSummary.cjs +4 -1
- package/dist/cjs/ErrorSummary.native.js +4 -1
- package/dist/cjs/ErrorSummary.native.js.map +1 -1
- package/dist/cjs/FloatingPanel/useFloatingPanel.cjs +24 -2
- package/dist/cjs/FloatingPanel/useFloatingPanel.native.js +43 -2
- package/dist/cjs/FloatingPanel/useFloatingPanel.native.js.map +1 -1
- package/dist/cjs/InputParts/index.cjs +42 -2
- package/dist/cjs/InputParts/index.native.js +42 -2
- package/dist/cjs/InputParts/index.native.js.map +1 -1
- package/dist/cjs/fields/Checkbox/Checkbox.cjs +5 -2
- package/dist/cjs/fields/Checkbox/Checkbox.native.js +6 -3
- package/dist/cjs/fields/Checkbox/Checkbox.native.js.map +1 -1
- package/dist/cjs/fields/Checkbox/CheckboxGroup.cjs +69 -59
- package/dist/cjs/fields/Checkbox/CheckboxGroup.native.js +75 -65
- package/dist/cjs/fields/Checkbox/CheckboxGroup.native.js.map +1 -1
- package/dist/cjs/fields/Checkbox/checkboxGroupContext.cjs +33 -0
- package/dist/cjs/fields/Checkbox/checkboxGroupContext.native.js +36 -0
- package/dist/cjs/fields/Checkbox/checkboxGroupContext.native.js.map +1 -0
- package/dist/cjs/fields/DatePicker/DatetimePicker.catalog.cjs +402 -0
- package/dist/cjs/fields/DatePicker/DatetimePicker.catalog.native.js +441 -0
- package/dist/cjs/fields/DatePicker/DatetimePicker.catalog.native.js.map +1 -0
- package/dist/cjs/fields/DatePicker/DatetimePicker.cjs +2 -376
- package/dist/cjs/fields/DatePicker/DatetimePicker.native.js +69 -297
- package/dist/cjs/fields/DatePicker/DatetimePicker.native.js.map +1 -1
- package/dist/cjs/fields/DatePicker/catalog.cjs +306 -0
- package/dist/cjs/fields/DatePicker/catalog.native.js +350 -0
- package/dist/cjs/fields/DatePicker/catalog.native.js.map +1 -0
- package/dist/cjs/fields/DatePicker/index.cjs +7 -280
- package/dist/cjs/fields/DatePicker/index.native.js +66 -185
- package/dist/cjs/fields/DatePicker/index.native.js.map +1 -1
- package/dist/cjs/fields/DatePicker/parts.cjs +12 -9
- package/dist/cjs/fields/DatePicker/parts.native.js +12 -9
- package/dist/cjs/fields/DatePicker/parts.native.js.map +1 -1
- package/dist/cjs/fields/Duration/index.cjs +29 -3
- package/dist/cjs/fields/Duration/index.native.js +29 -3
- package/dist/cjs/fields/Duration/index.native.js.map +1 -1
- package/dist/cjs/fields/PhoneInput/index.cjs +9 -4
- package/dist/cjs/fields/PhoneInput/index.native.js +13 -6
- package/dist/cjs/fields/PhoneInput/index.native.js.map +1 -1
- package/dist/cjs/fields/Rating/index.cjs +1 -1
- package/dist/cjs/fields/Rating/index.native.js +4 -1
- package/dist/cjs/fields/Rating/index.native.js.map +1 -1
- package/dist/cjs/fields/SearchInput/index.cjs +6 -0
- package/dist/cjs/fields/SearchInput/index.native.js +6 -0
- package/dist/cjs/fields/SearchInput/index.native.js.map +1 -1
- package/dist/cjs/fields/Select/index.cjs +75 -2
- package/dist/cjs/fields/Select/index.native.js +77 -2
- package/dist/cjs/fields/Select/index.native.js.map +1 -1
- package/dist/cjs/fields/Signature/index.cjs +9 -5
- package/dist/cjs/fields/Signature/index.native.js +9 -5
- package/dist/cjs/fields/Signature/index.native.js.map +1 -1
- package/dist/cjs/fields/Slider/index.cjs +3 -1
- package/dist/cjs/fields/Slider/index.native.js +3 -1
- package/dist/cjs/fields/Slider/index.native.js.map +1 -1
- package/dist/cjs/fields/Switch/index.cjs +5 -18
- package/dist/cjs/fields/Switch/index.native.js +5 -18
- package/dist/cjs/fields/Switch/index.native.js.map +1 -1
- package/dist/cjs/fields/TextArea/index.cjs +19 -5
- package/dist/cjs/fields/TextArea/index.native.js +23 -5
- package/dist/cjs/fields/TextArea/index.native.js.map +1 -1
- package/dist/cjs/fields/TimePicker/catalog.cjs +203 -0
- package/dist/cjs/fields/TimePicker/catalog.native.js +227 -0
- package/dist/cjs/fields/TimePicker/catalog.native.js.map +1 -0
- package/dist/cjs/fields/TimePicker/index.cjs +6 -177
- package/dist/cjs/fields/TimePicker/index.native.js +74 -85
- package/dist/cjs/fields/TimePicker/index.native.js.map +1 -1
- package/dist/cjs/fields/TimeRangeScrubber/geometry.cjs +6 -0
- package/dist/cjs/fields/TimeRangeScrubber/geometry.native.js +6 -0
- package/dist/cjs/fields/TimeRangeScrubber/geometry.native.js.map +1 -1
- package/dist/cjs/fields/TimeRangeScrubber/index.cjs +34 -14
- package/dist/cjs/fields/TimeRangeScrubber/index.native.js +38 -14
- package/dist/cjs/fields/TimeRangeScrubber/index.native.js.map +1 -1
- package/dist/cjs/fields/nativeDateTime/OsDateTimeSheet.cjs +202 -0
- package/dist/cjs/fields/nativeDateTime/OsDateTimeSheet.native.js +211 -0
- package/dist/cjs/fields/nativeDateTime/OsDateTimeSheet.native.js.map +1 -0
- package/dist/cjs/fields/nativeDateTime/osDateTimeIosDisplay.cjs +30 -0
- package/dist/cjs/fields/nativeDateTime/osDateTimeIosDisplay.native.js +33 -0
- package/dist/cjs/fields/nativeDateTime/osDateTimeIosDisplay.native.js.map +1 -0
- package/dist/cjs/fields/nativeSelect.cjs +30 -0
- package/dist/cjs/fields/nativeSelect.native.js +33 -0
- package/dist/cjs/fields/nativeSelect.native.js.map +1 -0
- package/dist/cjs/index.cjs +1 -0
- package/dist/cjs/index.native.js +1 -0
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/themedPrimitives.cjs +5 -0
- package/dist/cjs/themedPrimitives.native.js +5 -0
- package/dist/cjs/themedPrimitives.native.js.map +1 -1
- package/dist/esm/Button/index.mjs +8 -2
- package/dist/esm/Button/index.mjs.map +1 -1
- package/dist/esm/Button/index.native.js +8 -2
- package/dist/esm/Button/index.native.js.map +1 -1
- package/dist/esm/Chip/index.mjs +1 -3
- package/dist/esm/Chip/index.mjs.map +1 -1
- package/dist/esm/Chip/index.native.js +5 -3
- package/dist/esm/Chip/index.native.js.map +1 -1
- package/dist/esm/ContextualSaveBar/index.mjs +19 -3
- package/dist/esm/ContextualSaveBar/index.mjs.map +1 -1
- package/dist/esm/ContextualSaveBar/index.native.js +19 -3
- package/dist/esm/ContextualSaveBar/index.native.js.map +1 -1
- package/dist/esm/DescriptionList/index.mjs +38 -12
- package/dist/esm/DescriptionList/index.mjs.map +1 -1
- package/dist/esm/DescriptionList/index.native.js +38 -12
- package/dist/esm/DescriptionList/index.native.js.map +1 -1
- package/dist/esm/ErrorSummary.mjs +5 -2
- package/dist/esm/ErrorSummary.mjs.map +1 -1
- package/dist/esm/ErrorSummary.native.js +5 -2
- package/dist/esm/ErrorSummary.native.js.map +1 -1
- package/dist/esm/FloatingPanel/useFloatingPanel.mjs +24 -3
- package/dist/esm/FloatingPanel/useFloatingPanel.mjs.map +1 -1
- package/dist/esm/FloatingPanel/useFloatingPanel.native.js +43 -3
- package/dist/esm/FloatingPanel/useFloatingPanel.native.js.map +1 -1
- package/dist/esm/InputParts/index.mjs +43 -3
- package/dist/esm/InputParts/index.mjs.map +1 -1
- package/dist/esm/InputParts/index.native.js +43 -3
- package/dist/esm/InputParts/index.native.js.map +1 -1
- package/dist/esm/fields/Checkbox/Checkbox.mjs +5 -2
- package/dist/esm/fields/Checkbox/Checkbox.mjs.map +1 -1
- package/dist/esm/fields/Checkbox/Checkbox.native.js +6 -3
- package/dist/esm/fields/Checkbox/Checkbox.native.js.map +1 -1
- package/dist/esm/fields/Checkbox/CheckboxGroup.mjs +69 -59
- package/dist/esm/fields/Checkbox/CheckboxGroup.mjs.map +1 -1
- package/dist/esm/fields/Checkbox/CheckboxGroup.native.js +75 -65
- package/dist/esm/fields/Checkbox/CheckboxGroup.native.js.map +1 -1
- package/dist/esm/fields/Checkbox/checkboxGroupContext.mjs +7 -0
- package/dist/esm/fields/Checkbox/checkboxGroupContext.mjs.map +1 -0
- package/dist/esm/fields/Checkbox/checkboxGroupContext.native.js +7 -0
- package/dist/esm/fields/Checkbox/checkboxGroupContext.native.js.map +1 -0
- package/dist/esm/fields/DatePicker/DatetimePicker.catalog.mjs +377 -0
- package/dist/esm/fields/DatePicker/DatetimePicker.catalog.mjs.map +1 -0
- package/dist/esm/fields/DatePicker/DatetimePicker.catalog.native.js +413 -0
- package/dist/esm/fields/DatePicker/DatetimePicker.catalog.native.js.map +1 -0
- package/dist/esm/fields/DatePicker/DatetimePicker.mjs +1 -375
- package/dist/esm/fields/DatePicker/DatetimePicker.mjs.map +1 -1
- package/dist/esm/fields/DatePicker/DatetimePicker.native.js +65 -293
- package/dist/esm/fields/DatePicker/DatetimePicker.native.js.map +1 -1
- package/dist/esm/fields/DatePicker/catalog.mjs +276 -0
- package/dist/esm/fields/DatePicker/catalog.mjs.map +1 -0
- package/dist/esm/fields/DatePicker/catalog.native.js +317 -0
- package/dist/esm/fields/DatePicker/catalog.native.js.map +1 -0
- package/dist/esm/fields/DatePicker/index.mjs +1 -274
- package/dist/esm/fields/DatePicker/index.mjs.map +1 -1
- package/dist/esm/fields/DatePicker/index.native.js +60 -179
- package/dist/esm/fields/DatePicker/index.native.js.map +1 -1
- package/dist/esm/fields/DatePicker/parts.mjs +13 -10
- package/dist/esm/fields/DatePicker/parts.mjs.map +1 -1
- package/dist/esm/fields/DatePicker/parts.native.js +13 -10
- package/dist/esm/fields/DatePicker/parts.native.js.map +1 -1
- package/dist/esm/fields/Duration/index.mjs +29 -4
- package/dist/esm/fields/Duration/index.mjs.map +1 -1
- package/dist/esm/fields/Duration/index.native.js +29 -4
- package/dist/esm/fields/Duration/index.native.js.map +1 -1
- package/dist/esm/fields/PhoneInput/index.mjs +9 -4
- package/dist/esm/fields/PhoneInput/index.mjs.map +1 -1
- package/dist/esm/fields/PhoneInput/index.native.js +13 -6
- package/dist/esm/fields/PhoneInput/index.native.js.map +1 -1
- package/dist/esm/fields/Rating/index.mjs +2 -2
- package/dist/esm/fields/Rating/index.mjs.map +1 -1
- package/dist/esm/fields/Rating/index.native.js +5 -2
- package/dist/esm/fields/Rating/index.native.js.map +1 -1
- package/dist/esm/fields/SearchInput/index.mjs +6 -0
- package/dist/esm/fields/SearchInput/index.mjs.map +1 -1
- package/dist/esm/fields/SearchInput/index.native.js +6 -0
- package/dist/esm/fields/SearchInput/index.native.js.map +1 -1
- package/dist/esm/fields/Select/index.mjs +76 -3
- package/dist/esm/fields/Select/index.mjs.map +1 -1
- package/dist/esm/fields/Select/index.native.js +78 -3
- package/dist/esm/fields/Select/index.native.js.map +1 -1
- package/dist/esm/fields/Signature/index.mjs +10 -6
- package/dist/esm/fields/Signature/index.mjs.map +1 -1
- package/dist/esm/fields/Signature/index.native.js +10 -6
- package/dist/esm/fields/Signature/index.native.js.map +1 -1
- package/dist/esm/fields/Slider/index.mjs +4 -2
- package/dist/esm/fields/Slider/index.mjs.map +1 -1
- package/dist/esm/fields/Slider/index.native.js +4 -2
- package/dist/esm/fields/Slider/index.native.js.map +1 -1
- package/dist/esm/fields/Switch/index.mjs +6 -19
- package/dist/esm/fields/Switch/index.mjs.map +1 -1
- package/dist/esm/fields/Switch/index.native.js +6 -19
- package/dist/esm/fields/Switch/index.native.js.map +1 -1
- package/dist/esm/fields/TextArea/index.mjs +19 -5
- package/dist/esm/fields/TextArea/index.mjs.map +1 -1
- package/dist/esm/fields/TextArea/index.native.js +23 -5
- package/dist/esm/fields/TextArea/index.native.js.map +1 -1
- package/dist/esm/fields/TimePicker/catalog.mjs +174 -0
- package/dist/esm/fields/TimePicker/catalog.mjs.map +1 -0
- package/dist/esm/fields/TimePicker/catalog.native.js +195 -0
- package/dist/esm/fields/TimePicker/catalog.native.js.map +1 -0
- package/dist/esm/fields/TimePicker/index.mjs +2 -173
- package/dist/esm/fields/TimePicker/index.mjs.map +1 -1
- package/dist/esm/fields/TimePicker/index.native.js +76 -87
- package/dist/esm/fields/TimePicker/index.native.js.map +1 -1
- package/dist/esm/fields/TimeRangeScrubber/geometry.mjs +6 -1
- package/dist/esm/fields/TimeRangeScrubber/geometry.mjs.map +1 -1
- package/dist/esm/fields/TimeRangeScrubber/geometry.native.js +6 -1
- package/dist/esm/fields/TimeRangeScrubber/geometry.native.js.map +1 -1
- package/dist/esm/fields/TimeRangeScrubber/index.mjs +37 -18
- package/dist/esm/fields/TimeRangeScrubber/index.mjs.map +1 -1
- package/dist/esm/fields/TimeRangeScrubber/index.native.js +41 -18
- package/dist/esm/fields/TimeRangeScrubber/index.native.js.map +1 -1
- package/dist/esm/fields/nativeDateTime/OsDateTimeSheet.mjs +166 -0
- package/dist/esm/fields/nativeDateTime/OsDateTimeSheet.mjs.map +1 -0
- package/dist/esm/fields/nativeDateTime/OsDateTimeSheet.native.js +172 -0
- package/dist/esm/fields/nativeDateTime/OsDateTimeSheet.native.js.map +1 -0
- package/dist/esm/fields/nativeDateTime/osDateTimeIosDisplay.mjs +5 -0
- package/dist/esm/fields/nativeDateTime/osDateTimeIosDisplay.mjs.map +1 -0
- package/dist/esm/fields/nativeDateTime/osDateTimeIosDisplay.native.js +5 -0
- package/dist/esm/fields/nativeDateTime/osDateTimeIosDisplay.native.js.map +1 -0
- package/dist/esm/fields/nativeSelect.mjs +5 -0
- package/dist/esm/fields/nativeSelect.mjs.map +1 -0
- package/dist/esm/fields/nativeSelect.native.js +5 -0
- package/dist/esm/fields/nativeSelect.native.js.map +1 -0
- package/dist/esm/index.mjs +2 -2
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/index.native.js +2 -2
- package/dist/esm/index.native.js.map +1 -1
- package/dist/esm/themedPrimitives.mjs +5 -0
- package/dist/esm/themedPrimitives.mjs.map +1 -1
- package/dist/esm/themedPrimitives.native.js +5 -0
- package/dist/esm/themedPrimitives.native.js.map +1 -1
- package/dist/jsx/Button/index.mjs +8 -2
- package/dist/jsx/Button/index.mjs.map +1 -1
- package/dist/jsx/Button/index.native.js +7 -1
- package/dist/jsx/Button/index.native.js.map +1 -1
- package/dist/jsx/Chip/index.mjs +1 -3
- package/dist/jsx/Chip/index.mjs.map +1 -1
- package/dist/jsx/Chip/index.native.js +5 -3
- package/dist/jsx/Chip/index.native.js.map +1 -1
- package/dist/jsx/ContextualSaveBar/index.mjs +19 -3
- package/dist/jsx/ContextualSaveBar/index.mjs.map +1 -1
- package/dist/jsx/ContextualSaveBar/index.native.js +19 -3
- package/dist/jsx/ContextualSaveBar/index.native.js.map +1 -1
- package/dist/jsx/DescriptionList/index.mjs +38 -12
- package/dist/jsx/DescriptionList/index.mjs.map +1 -1
- package/dist/jsx/DescriptionList/index.native.js +38 -12
- package/dist/jsx/DescriptionList/index.native.js.map +1 -1
- package/dist/jsx/ErrorSummary.mjs +5 -2
- package/dist/jsx/ErrorSummary.mjs.map +1 -1
- package/dist/jsx/ErrorSummary.native.js +4 -1
- package/dist/jsx/ErrorSummary.native.js.map +1 -1
- package/dist/jsx/FloatingPanel/useFloatingPanel.mjs +24 -3
- package/dist/jsx/FloatingPanel/useFloatingPanel.mjs.map +1 -1
- package/dist/jsx/FloatingPanel/useFloatingPanel.native.js +43 -2
- package/dist/jsx/FloatingPanel/useFloatingPanel.native.js.map +1 -1
- package/dist/jsx/InputParts/index.mjs +43 -3
- package/dist/jsx/InputParts/index.mjs.map +1 -1
- package/dist/jsx/InputParts/index.native.js +42 -2
- package/dist/jsx/InputParts/index.native.js.map +1 -1
- package/dist/jsx/fields/Checkbox/Checkbox.mjs +5 -2
- package/dist/jsx/fields/Checkbox/Checkbox.mjs.map +1 -1
- package/dist/jsx/fields/Checkbox/Checkbox.native.js +6 -3
- package/dist/jsx/fields/Checkbox/Checkbox.native.js.map +1 -1
- package/dist/jsx/fields/Checkbox/CheckboxGroup.mjs +69 -59
- package/dist/jsx/fields/Checkbox/CheckboxGroup.mjs.map +1 -1
- package/dist/jsx/fields/Checkbox/CheckboxGroup.native.js +75 -65
- package/dist/jsx/fields/Checkbox/CheckboxGroup.native.js.map +1 -1
- package/dist/jsx/fields/Checkbox/checkboxGroupContext.mjs +7 -0
- package/dist/jsx/fields/Checkbox/checkboxGroupContext.mjs.map +1 -0
- package/dist/jsx/fields/Checkbox/checkboxGroupContext.native.js +36 -0
- package/dist/jsx/fields/Checkbox/checkboxGroupContext.native.js.map +1 -0
- package/dist/jsx/fields/DatePicker/DatetimePicker.catalog.mjs +377 -0
- package/dist/jsx/fields/DatePicker/DatetimePicker.catalog.mjs.map +1 -0
- package/dist/jsx/fields/DatePicker/DatetimePicker.catalog.native.js +441 -0
- package/dist/jsx/fields/DatePicker/DatetimePicker.catalog.native.js.map +1 -0
- package/dist/jsx/fields/DatePicker/DatetimePicker.mjs +1 -375
- package/dist/jsx/fields/DatePicker/DatetimePicker.mjs.map +1 -1
- package/dist/jsx/fields/DatePicker/DatetimePicker.native.js +69 -297
- package/dist/jsx/fields/DatePicker/DatetimePicker.native.js.map +1 -1
- package/dist/jsx/fields/DatePicker/catalog.mjs +276 -0
- package/dist/jsx/fields/DatePicker/catalog.mjs.map +1 -0
- package/dist/jsx/fields/DatePicker/catalog.native.js +350 -0
- package/dist/jsx/fields/DatePicker/catalog.native.js.map +1 -0
- package/dist/jsx/fields/DatePicker/index.mjs +1 -274
- package/dist/jsx/fields/DatePicker/index.mjs.map +1 -1
- package/dist/jsx/fields/DatePicker/index.native.js +66 -185
- package/dist/jsx/fields/DatePicker/index.native.js.map +1 -1
- package/dist/jsx/fields/DatePicker/parts.mjs +13 -10
- package/dist/jsx/fields/DatePicker/parts.mjs.map +1 -1
- package/dist/jsx/fields/DatePicker/parts.native.js +12 -9
- package/dist/jsx/fields/DatePicker/parts.native.js.map +1 -1
- package/dist/jsx/fields/Duration/index.mjs +29 -4
- package/dist/jsx/fields/Duration/index.mjs.map +1 -1
- package/dist/jsx/fields/Duration/index.native.js +29 -3
- package/dist/jsx/fields/Duration/index.native.js.map +1 -1
- package/dist/jsx/fields/PhoneInput/index.mjs +9 -4
- package/dist/jsx/fields/PhoneInput/index.mjs.map +1 -1
- package/dist/jsx/fields/PhoneInput/index.native.js +13 -6
- package/dist/jsx/fields/PhoneInput/index.native.js.map +1 -1
- package/dist/jsx/fields/Rating/index.mjs +2 -2
- package/dist/jsx/fields/Rating/index.mjs.map +1 -1
- package/dist/jsx/fields/Rating/index.native.js +4 -1
- package/dist/jsx/fields/Rating/index.native.js.map +1 -1
- package/dist/jsx/fields/SearchInput/index.mjs +6 -0
- package/dist/jsx/fields/SearchInput/index.mjs.map +1 -1
- package/dist/jsx/fields/SearchInput/index.native.js +6 -0
- package/dist/jsx/fields/SearchInput/index.native.js.map +1 -1
- package/dist/jsx/fields/Select/index.mjs +76 -3
- package/dist/jsx/fields/Select/index.mjs.map +1 -1
- package/dist/jsx/fields/Select/index.native.js +77 -2
- package/dist/jsx/fields/Select/index.native.js.map +1 -1
- package/dist/jsx/fields/Signature/index.mjs +10 -6
- package/dist/jsx/fields/Signature/index.mjs.map +1 -1
- package/dist/jsx/fields/Signature/index.native.js +9 -5
- package/dist/jsx/fields/Signature/index.native.js.map +1 -1
- package/dist/jsx/fields/Slider/index.mjs +4 -2
- package/dist/jsx/fields/Slider/index.mjs.map +1 -1
- package/dist/jsx/fields/Slider/index.native.js +3 -1
- package/dist/jsx/fields/Slider/index.native.js.map +1 -1
- package/dist/jsx/fields/Switch/index.mjs +6 -19
- package/dist/jsx/fields/Switch/index.mjs.map +1 -1
- package/dist/jsx/fields/Switch/index.native.js +5 -18
- package/dist/jsx/fields/Switch/index.native.js.map +1 -1
- package/dist/jsx/fields/TextArea/index.mjs +19 -5
- package/dist/jsx/fields/TextArea/index.mjs.map +1 -1
- package/dist/jsx/fields/TextArea/index.native.js +23 -5
- package/dist/jsx/fields/TextArea/index.native.js.map +1 -1
- package/dist/jsx/fields/TimePicker/catalog.mjs +174 -0
- package/dist/jsx/fields/TimePicker/catalog.mjs.map +1 -0
- package/dist/jsx/fields/TimePicker/catalog.native.js +227 -0
- package/dist/jsx/fields/TimePicker/catalog.native.js.map +1 -0
- package/dist/jsx/fields/TimePicker/index.mjs +2 -173
- package/dist/jsx/fields/TimePicker/index.mjs.map +1 -1
- package/dist/jsx/fields/TimePicker/index.native.js +74 -85
- package/dist/jsx/fields/TimePicker/index.native.js.map +1 -1
- package/dist/jsx/fields/TimeRangeScrubber/geometry.mjs +6 -1
- package/dist/jsx/fields/TimeRangeScrubber/geometry.mjs.map +1 -1
- package/dist/jsx/fields/TimeRangeScrubber/geometry.native.js +6 -0
- package/dist/jsx/fields/TimeRangeScrubber/geometry.native.js.map +1 -1
- package/dist/jsx/fields/TimeRangeScrubber/index.mjs +37 -18
- package/dist/jsx/fields/TimeRangeScrubber/index.mjs.map +1 -1
- package/dist/jsx/fields/TimeRangeScrubber/index.native.js +38 -14
- package/dist/jsx/fields/TimeRangeScrubber/index.native.js.map +1 -1
- package/dist/jsx/fields/nativeDateTime/OsDateTimeSheet.mjs +166 -0
- package/dist/jsx/fields/nativeDateTime/OsDateTimeSheet.mjs.map +1 -0
- package/dist/jsx/fields/nativeDateTime/OsDateTimeSheet.native.js +211 -0
- package/dist/jsx/fields/nativeDateTime/OsDateTimeSheet.native.js.map +1 -0
- package/dist/jsx/fields/nativeDateTime/osDateTimeIosDisplay.mjs +5 -0
- package/dist/jsx/fields/nativeDateTime/osDateTimeIosDisplay.mjs.map +1 -0
- package/dist/jsx/fields/nativeDateTime/osDateTimeIosDisplay.native.js +33 -0
- package/dist/jsx/fields/nativeDateTime/osDateTimeIosDisplay.native.js.map +1 -0
- package/dist/jsx/fields/nativeSelect.mjs +5 -0
- package/dist/jsx/fields/nativeSelect.mjs.map +1 -0
- package/dist/jsx/fields/nativeSelect.native.js +33 -0
- package/dist/jsx/fields/nativeSelect.native.js.map +1 -0
- package/dist/jsx/index.js +2 -2
- package/dist/jsx/index.js.map +1 -1
- package/dist/jsx/index.mjs +2 -2
- package/dist/jsx/index.mjs.map +1 -1
- package/dist/jsx/index.native.js +1 -0
- package/dist/jsx/index.native.js.map +1 -1
- package/dist/jsx/themedPrimitives.mjs +5 -0
- package/dist/jsx/themedPrimitives.mjs.map +1 -1
- package/dist/jsx/themedPrimitives.native.js +5 -0
- package/dist/jsx/themedPrimitives.native.js.map +1 -1
- package/package.json +12 -9
- package/src/Button/Button.labelInk.spec.tsx +1 -1
- package/src/Button/Button.sizeLadder.spec.tsx +124 -0
- package/src/Button/Button.spec.tsx +7 -17
- package/src/Button/Button.stories.tsx +14 -0
- package/src/Button/index.tsx +18 -3
- package/src/Chip/Chip.spec.tsx +15 -0
- package/src/Chip/Chip.stories.tsx +251 -0
- package/src/Chip/index.tsx +5 -1
- package/src/ContextualSaveBar/ContextualSaveBar.spec.tsx +51 -0
- package/src/ContextualSaveBar/ContextualSaveBar.stories.tsx +42 -23
- package/src/ContextualSaveBar/UnsavedChangesDialog.spec.tsx +167 -0
- package/src/ContextualSaveBar/index.tsx +14 -5
- package/src/DescriptionList/DescriptionList.spec.tsx +19 -1
- package/src/DescriptionList/DescriptionList.stories.tsx +5 -1
- package/src/DescriptionList/index.tsx +57 -19
- package/src/ErrorSummary.tsx +5 -2
- package/src/FloatingPanel/panelWidthContract.spec.ts +2 -2
- package/src/FloatingPanel/useFloatingPanel.spec.tsx +199 -1
- package/src/FloatingPanel/useFloatingPanel.ts +45 -3
- package/src/InputParts/index.tsx +56 -2
- package/src/Spinner/SpinnerGlyph.spec.tsx +132 -0
- package/src/Wheel/WheelEdgeFade.spec.tsx +141 -0
- package/src/fields/Checkbox/Checkbox.spec.tsx +24 -0
- package/src/fields/Checkbox/Checkbox.tsx +8 -3
- package/src/fields/Checkbox/CheckboxBox.spec.tsx +395 -0
- package/src/fields/Checkbox/CheckboxCard.spec.tsx +197 -0
- package/src/fields/Checkbox/CheckboxFieldFrame.spec.tsx +116 -0
- package/src/fields/Checkbox/CheckboxGroup.stories.tsx +15 -0
- package/src/fields/Checkbox/CheckboxGroup.tsx +77 -70
- package/src/fields/Checkbox/checkboxGroupContext.ts +12 -0
- package/src/fields/DatePicker/Calendar.spec.tsx +6 -5
- package/src/fields/DatePicker/DatePicker.stories.tsx +13 -0
- package/src/fields/DatePicker/DatetimePicker.catalog.tsx +586 -0
- package/src/fields/DatePicker/DatetimePicker.native.tsx +243 -0
- package/src/fields/DatePicker/DatetimePicker.tsx +2 -584
- package/src/fields/DatePicker/catalog.tsx +450 -0
- package/src/fields/DatePicker/index.native.tsx +261 -0
- package/src/fields/DatePicker/index.tsx +20 -448
- package/src/fields/DatePicker/parts.tsx +11 -6
- package/src/fields/Duration/Duration.spec.tsx +50 -0
- package/src/fields/Duration/Duration.stories.tsx +21 -0
- package/src/fields/Duration/index.tsx +43 -5
- package/src/fields/PhoneInput/PhoneInput.spec.tsx +16 -63
- package/src/fields/PhoneInput/PhoneInput.tvalue-source.spec.ts +23 -0
- package/src/fields/PhoneInput/index.tsx +10 -3
- package/src/fields/Rating/index.tsx +9 -1
- package/src/fields/SearchInput/SearchInput.spec.tsx +20 -0
- package/src/fields/SearchInput/index.tsx +6 -0
- package/src/fields/Select/Select.stories.tsx +23 -1
- package/src/fields/Select/index.tsx +77 -1
- package/src/fields/Signature/Signature.spec.tsx +22 -3
- package/src/fields/Signature/index.tsx +16 -7
- package/src/fields/Slider/index.tsx +4 -1
- package/src/fields/Switch/index.tsx +14 -12
- package/src/fields/TextArea/TextArea.spec.tsx +68 -0
- package/src/fields/TextArea/index.tsx +23 -5
- package/src/fields/TimePicker/TimePicker.stories.tsx +13 -0
- package/src/fields/TimePicker/catalog.tsx +265 -0
- package/src/fields/TimePicker/index.native.tsx +229 -0
- package/src/fields/TimePicker/index.tsx +6 -261
- package/src/fields/TimeRangeScrubber/TimeRangeScrubber.spec.tsx +36 -0
- package/src/fields/TimeRangeScrubber/geometry.ts +13 -0
- package/src/fields/TimeRangeScrubber/index.tsx +49 -8
- package/src/fields/nativeDateTime/OsDateTimeSheet.spec.ts +12 -0
- package/src/fields/nativeDateTime/OsDateTimeSheet.tsx +197 -0
- package/src/fields/nativeDateTime/osDateTimeIosDisplay.ts +4 -0
- package/src/fields/nativeSelect.spec.ts +28 -0
- package/src/fields/nativeSelect.ts +13 -0
- package/src/index.ts +2 -2
- package/src/themedPrimitives.tsx +10 -6
- package/types/Button/index.d.ts +3 -2
- package/types/Button/index.d.ts.map +1 -1
- package/types/Chip/index.d.ts.map +1 -1
- package/types/ContextualSaveBar/index.d.ts.map +1 -1
- package/types/DescriptionList/index.d.ts.map +1 -1
- package/types/ErrorSummary.d.ts.map +1 -1
- package/types/FloatingPanel/useFloatingPanel.d.ts +13 -0
- package/types/FloatingPanel/useFloatingPanel.d.ts.map +1 -1
- package/types/InputParts/index.d.ts.map +1 -1
- package/types/fields/Checkbox/Checkbox.d.ts.map +1 -1
- package/types/fields/Checkbox/CheckboxGroup.d.ts.map +1 -1
- package/types/fields/Checkbox/checkboxGroupContext.d.ts +8 -0
- package/types/fields/Checkbox/checkboxGroupContext.d.ts.map +1 -0
- package/types/fields/DatePicker/DatetimePicker.catalog.d.ts +35 -0
- package/types/fields/DatePicker/DatetimePicker.catalog.d.ts.map +1 -0
- package/types/fields/DatePicker/DatetimePicker.d.ts +2 -32
- package/types/fields/DatePicker/DatetimePicker.d.ts.map +1 -1
- package/types/fields/DatePicker/DatetimePicker.native.d.ts +26 -0
- package/types/fields/DatePicker/DatetimePicker.native.d.ts.map +1 -0
- package/types/fields/DatePicker/catalog.d.ts +42 -0
- package/types/fields/DatePicker/catalog.d.ts.map +1 -0
- package/types/fields/DatePicker/index.d.ts +2 -39
- package/types/fields/DatePicker/index.d.ts.map +1 -1
- package/types/fields/DatePicker/index.native.d.ts +40 -0
- package/types/fields/DatePicker/index.native.d.ts.map +1 -0
- package/types/fields/DatePicker/parts.d.ts.map +1 -1
- package/types/fields/Duration/index.d.ts +2 -0
- package/types/fields/Duration/index.d.ts.map +1 -1
- package/types/fields/PhoneInput/index.d.ts.map +1 -1
- package/types/fields/Rating/index.d.ts.map +1 -1
- package/types/fields/SearchInput/index.d.ts.map +1 -1
- package/types/fields/Select/index.d.ts +6 -1
- package/types/fields/Select/index.d.ts.map +1 -1
- package/types/fields/Signature/index.d.ts.map +1 -1
- package/types/fields/Slider/index.d.ts.map +1 -1
- package/types/fields/Switch/index.d.ts.map +1 -1
- package/types/fields/TextArea/index.d.ts.map +1 -1
- package/types/fields/TimePicker/catalog.d.ts +41 -0
- package/types/fields/TimePicker/catalog.d.ts.map +1 -0
- package/types/fields/TimePicker/index.d.ts +2 -38
- package/types/fields/TimePicker/index.d.ts.map +1 -1
- package/types/fields/TimePicker/index.native.d.ts +31 -0
- package/types/fields/TimePicker/index.native.d.ts.map +1 -0
- package/types/fields/TimeRangeScrubber/geometry.d.ts +8 -0
- package/types/fields/TimeRangeScrubber/geometry.d.ts.map +1 -1
- package/types/fields/TimeRangeScrubber/index.d.ts +1 -1
- package/types/fields/TimeRangeScrubber/index.d.ts.map +1 -1
- package/types/fields/nativeDateTime/OsDateTimeSheet.d.ts +12 -0
- package/types/fields/nativeDateTime/OsDateTimeSheet.d.ts.map +1 -0
- package/types/fields/nativeDateTime/osDateTimeIosDisplay.d.ts +3 -0
- package/types/fields/nativeDateTime/osDateTimeIosDisplay.d.ts.map +1 -0
- package/types/fields/nativeSelect.d.ts +12 -0
- package/types/fields/nativeSelect.d.ts.map +1 -0
- package/types/index.d.ts +2 -2
- package/types/index.d.ts.map +1 -1
- package/types/themedPrimitives.d.ts.map +1 -1
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { sizeRecipeForToken } from "@multiplatform.one/theme";
|
|
2
1
|
import { useForm } from "@tanstack/react-form";
|
|
3
2
|
import { act, fireEvent, waitFor } from "@testing-library/react";
|
|
4
3
|
import { YStack } from "tamagui";
|
|
@@ -402,10 +401,10 @@ describe("PhoneInput", () => {
|
|
|
402
401
|
});
|
|
403
402
|
});
|
|
404
403
|
|
|
405
|
-
describe("design-law (LC-71 /
|
|
404
|
+
describe("design-law (LC-71 / T-VALUE)", () => {
|
|
406
405
|
it("rings the Box that includes the flag (LC-71)", () => {
|
|
407
406
|
const result = renderWithProviders(<PhoneInput label="Ring Phone" />);
|
|
408
|
-
const box = result.container.querySelector("[data-
|
|
407
|
+
const box = result.container.querySelector("[data-testid='phone-box']") as HTMLElement;
|
|
409
408
|
const flag = result.container.querySelector('[data-testid="combobox-trigger"]');
|
|
410
409
|
const input = result.container.querySelector("input");
|
|
411
410
|
expect(box).toBeTruthy();
|
|
@@ -414,72 +413,27 @@ describe("PhoneInput", () => {
|
|
|
414
413
|
expect(box.contains(input)).toBe(true);
|
|
415
414
|
});
|
|
416
415
|
|
|
417
|
-
it("
|
|
418
|
-
const result = renderWithProviders(<PhoneInput label="Phone" compact />);
|
|
419
|
-
const box = result.container.querySelector("[data-ring-target='box']") as HTMLElement;
|
|
420
|
-
expect(box.getAttribute("data-density")).toBe("compact");
|
|
421
|
-
expect(box.getAttribute("data-size")).toBe("$4");
|
|
422
|
-
});
|
|
423
|
-
|
|
424
|
-
it("size ejects painted height and leaves density comfortable (LC-76)", () => {
|
|
425
|
-
const result = renderWithProviders(<PhoneInput label="Phone" size="$5" />);
|
|
426
|
-
const box = result.container.querySelector("[data-ring-target='box']") as HTMLElement;
|
|
427
|
-
expect(box.getAttribute("data-density")).toBe("comfortable");
|
|
428
|
-
expect(box.getAttribute("data-size")).toBe("$5");
|
|
429
|
-
});
|
|
430
|
-
|
|
431
|
-
it("compact + size stay orthogonal (LC-76)", () => {
|
|
432
|
-
const result = renderWithProviders(<PhoneInput label="Phone" compact size="$5" />);
|
|
433
|
-
const box = result.container.querySelector("[data-ring-target='box']") as HTMLElement;
|
|
434
|
-
expect(box.getAttribute("data-density")).toBe("compact");
|
|
435
|
-
expect(box.getAttribute("data-size")).toBe("$5");
|
|
436
|
-
});
|
|
437
|
-
|
|
438
|
-
it("default painted box meets the 44px floor", () => {
|
|
416
|
+
it("national digits and the dial are T-VALUE, not textAccent", () => {
|
|
439
417
|
const result = renderWithProviders(<PhoneInput label="Phone" />);
|
|
440
|
-
const
|
|
441
|
-
|
|
442
|
-
expect(
|
|
418
|
+
const input = result.container.querySelector("[data-testid='phone-input']");
|
|
419
|
+
const dial = result.container.querySelector("[data-testid='phone-dial']");
|
|
420
|
+
expect(input?.getAttribute("data-text-class")).toBe("T-VALUE");
|
|
421
|
+
expect(dial?.getAttribute("data-text-class")).toBe("T-VALUE");
|
|
422
|
+
expect(dial?.textContent).toMatch(/^\+\d+/);
|
|
443
423
|
});
|
|
444
424
|
|
|
445
|
-
it("
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
425
|
+
it("compact and size still mount without throwing (LC-76)", () => {
|
|
426
|
+
expect(() => renderWithProviders(<PhoneInput label="Phone" compact />)).not.toThrow();
|
|
427
|
+
expect(() => renderWithProviders(<PhoneInput label="Phone" size="$5" />)).not.toThrow();
|
|
428
|
+
expect(() =>
|
|
429
|
+
renderWithProviders(<PhoneInput label="Phone" compact size="$5" />),
|
|
430
|
+
).not.toThrow();
|
|
451
431
|
});
|
|
452
432
|
|
|
453
|
-
it("flag and
|
|
454
|
-
const small = renderWithProviders(<PhoneInput label="S" size="$2" />);
|
|
455
|
-
const large = renderWithProviders(<PhoneInput label="L" size="$6" />);
|
|
456
|
-
const smallCountry = small.container.querySelector("[data-testid='phone-country']");
|
|
457
|
-
const largeCountry = large.container.querySelector("[data-testid='phone-country']");
|
|
458
|
-
const smallRecipe = sizeRecipeForToken("$2");
|
|
459
|
-
const largeRecipe = sizeRecipeForToken("$6");
|
|
460
|
-
expect(Number(smallCountry?.getAttribute("data-flag-size"))).toBe(smallRecipe.iconSize);
|
|
461
|
-
expect(Number(largeCountry?.getAttribute("data-flag-size"))).toBe(largeRecipe.iconSize);
|
|
462
|
-
expect(Number(smallCountry?.getAttribute("data-flag-size"))).toBeLessThan(
|
|
463
|
-
Number(largeCountry?.getAttribute("data-flag-size")),
|
|
464
|
-
);
|
|
465
|
-
expect(Number(smallCountry?.getAttribute("data-country-pad"))).toBe(
|
|
466
|
-
smallRecipe.paddingHorizontal,
|
|
467
|
-
);
|
|
468
|
-
expect(Number(largeCountry?.getAttribute("data-country-pad"))).toBe(
|
|
469
|
-
largeRecipe.paddingHorizontal,
|
|
470
|
-
);
|
|
471
|
-
expect(Number(smallCountry?.getAttribute("data-country-gap"))).toBe(smallRecipe.gap);
|
|
472
|
-
expect(Number(largeCountry?.getAttribute("data-country-gap"))).toBe(largeRecipe.gap);
|
|
473
|
-
});
|
|
474
|
-
|
|
475
|
-
it("skeleton mirrors flag+number anatomy at recipe height (LC-20)", () => {
|
|
433
|
+
it("skeleton keeps flag+number bones and hides the field (LC-20)", () => {
|
|
476
434
|
const result = renderWithProviders(<PhoneInput label="Phone" skeleton size="$4" />);
|
|
477
|
-
const box = result.container.querySelector("[data-testid='phone-skeleton']") as HTMLElement;
|
|
478
|
-
expect(box).toBeTruthy();
|
|
479
|
-
expect(Number(box.getAttribute("data-visual-height"))).toBe(sizeRecipeForToken("$4").height);
|
|
480
|
-
expect(result.container.querySelector("[data-testid='phone-skeleton-flag']")).toBeTruthy();
|
|
481
|
-
expect(result.container.querySelector("[data-testid='phone-skeleton-number']")).toBeTruthy();
|
|
482
435
|
expect(result.container.querySelector("input")).toBeNull();
|
|
436
|
+
expect(result.container.querySelector("[data-testid='phone-input']")).toBeNull();
|
|
483
437
|
});
|
|
484
438
|
|
|
485
439
|
it("does not open the country picker when disabled (SB-M-213)", async () => {
|
|
@@ -500,7 +454,6 @@ describe("PhoneInput", () => {
|
|
|
500
454
|
"[data-testid='phone-country']",
|
|
501
455
|
) as HTMLElement;
|
|
502
456
|
expect(country).toBeTruthy();
|
|
503
|
-
expect(result.container.querySelector('[data-testid="combobox-trigger"]')).toBeNull();
|
|
504
457
|
await act(async () => {
|
|
505
458
|
fireEvent.click(country);
|
|
506
459
|
});
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { dirname, join } from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
import { describe, expect, it } from "vitest";
|
|
5
|
+
|
|
6
|
+
const src = readFileSync(join(dirname(fileURLToPath(import.meta.url)), "index.tsx"), "utf8");
|
|
7
|
+
|
|
8
|
+
describe("PhoneInput T-VALUE source contract", () => {
|
|
9
|
+
it("puts dial and Area on $color so textAccent cannot dim them", () => {
|
|
10
|
+
expect(src).toContain('data-testid="phone-dial"');
|
|
11
|
+
expect(src).toContain('data-testid="phone-input"');
|
|
12
|
+
expect(src).toContain('data-text-class="T-VALUE"');
|
|
13
|
+
expect((src.match(/color="\$color"/g) ?? []).length).toBeGreaterThanOrEqual(2);
|
|
14
|
+
expect(src).not.toContain("formCommonColors.muted");
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
it("letters the closed trigger 23px paint and 0/9/9/0 segment without retuning knobs", () => {
|
|
18
|
+
expect(src).toContain("23px");
|
|
19
|
+
expect(src).toContain("0/9/9/0");
|
|
20
|
+
expect(src).not.toMatch(/height=\{23\}/);
|
|
21
|
+
expect(src).not.toMatch(/borderTopRightRadius=\{9\}/);
|
|
22
|
+
});
|
|
23
|
+
});
|
|
@@ -322,6 +322,7 @@ export function PhoneInput<
|
|
|
322
322
|
: undefined)}
|
|
323
323
|
>
|
|
324
324
|
<InputParts.Section>
|
|
325
|
+
{/* Letter (fuzz RULE): closed country trigger paints 23px; segment radius is 0/9/9/0. Box keeps the 44 press floor. Do not retune those onto size/radius knobs. */}
|
|
325
326
|
<View
|
|
326
327
|
data-focus-skip
|
|
327
328
|
flexDirection="row"
|
|
@@ -338,13 +339,14 @@ export function PhoneInput<
|
|
|
338
339
|
emptyMessage={t("No countries found.")}
|
|
339
340
|
popoverWidth={320}
|
|
340
341
|
tabIndex={disabled || readOnly ? -1 : 0}
|
|
341
|
-
disabled={disabled}
|
|
342
|
+
disabled={disabled || readOnly}
|
|
342
343
|
aria-label={t("Country code")}
|
|
343
344
|
trigger={(selected) => {
|
|
344
345
|
const opt = Array.isArray(selected) ? selected[0] : selected;
|
|
345
346
|
const code = opt?.value ?? regionCode;
|
|
346
347
|
return (
|
|
347
348
|
<XStack
|
|
349
|
+
data-testid="phone-country"
|
|
348
350
|
alignItems="center"
|
|
349
351
|
gap="$1.5"
|
|
350
352
|
// size-recipe-escape: zero-reset — the country trigger rides inside Input.Box, which owns the inset (LC-71)
|
|
@@ -365,9 +367,12 @@ export function PhoneInput<
|
|
|
365
367
|
</InputParts.Icon>
|
|
366
368
|
)}
|
|
367
369
|
<Text
|
|
370
|
+
data-testid="phone-dial"
|
|
371
|
+
data-text-class="T-VALUE"
|
|
368
372
|
fontFamily={knobProps.body.fontFamily}
|
|
369
373
|
fontWeight={knobProps.body.fontWeight}
|
|
370
|
-
|
|
374
|
+
// T-VALUE: dial is the country-code value, never textAccent / muted
|
|
375
|
+
color="$color"
|
|
371
376
|
userSelect="none"
|
|
372
377
|
>
|
|
373
378
|
+{dialOf(code)}
|
|
@@ -389,7 +394,6 @@ export function PhoneInput<
|
|
|
389
394
|
<InputParts.Area
|
|
390
395
|
ref={areaRef}
|
|
391
396
|
id={id}
|
|
392
|
-
data-testid="phone-input"
|
|
393
397
|
keyboardType="phone-pad"
|
|
394
398
|
autoComplete="tel"
|
|
395
399
|
inputMode="tel"
|
|
@@ -402,6 +406,9 @@ export function PhoneInput<
|
|
|
402
406
|
aria-invalid={hasError || undefined}
|
|
403
407
|
aria-readonly={readOnly || undefined}
|
|
404
408
|
{...(inputProps as ComponentProps<typeof InputParts.Area>)}
|
|
409
|
+
data-testid="phone-input"
|
|
410
|
+
data-text-class="T-VALUE"
|
|
411
|
+
color="$color"
|
|
405
412
|
/>
|
|
406
413
|
</InputParts.Section>
|
|
407
414
|
</InputParts.Box>
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { KnobProps } from "@multiplatform.one/theme";
|
|
2
2
|
import {
|
|
3
3
|
ensureKeyboardModalityTracking,
|
|
4
|
+
FOCUS_RING_HALO_OFFSET,
|
|
4
5
|
keyboardFocusRingProps,
|
|
5
6
|
MIN_PRESS_TARGET,
|
|
6
7
|
pressTargetHitSlop,
|
|
@@ -398,8 +399,15 @@ function StarRow({
|
|
|
398
399
|
>
|
|
399
400
|
<View
|
|
400
401
|
borderRadius={itemRadius}
|
|
402
|
+
// LC-71 §4 halo: circular thumb (star glyph). The inset the
|
|
403
|
+
// composite ring carries would paint over the star's own points;
|
|
404
|
+
// the halo clears it.
|
|
401
405
|
{...(showRing
|
|
402
|
-
? {
|
|
406
|
+
? {
|
|
407
|
+
...keyboardFocusRingProps,
|
|
408
|
+
outlineOffset: FOCUS_RING_HALO_OFFSET,
|
|
409
|
+
"data-rating-ring": "true",
|
|
410
|
+
}
|
|
403
411
|
: {})}
|
|
404
412
|
>
|
|
405
413
|
{glyph(isFilled)}
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { dirname, join } from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
1
4
|
import { fireEvent } from "@testing-library/react";
|
|
2
5
|
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
3
6
|
import { SIZE_RECIPE_TOKENS, sizeRecipeForToken } from "@multiplatform.one/theme";
|
|
@@ -5,6 +8,11 @@ import { renderWithProviders } from "@multiplatform.one/test-utils";
|
|
|
5
8
|
import { Form } from "../../Form";
|
|
6
9
|
import { SearchInput } from "./index";
|
|
7
10
|
|
|
11
|
+
const SEARCH_INPUT_SRC = readFileSync(
|
|
12
|
+
join(dirname(fileURLToPath(import.meta.url)), "index.tsx"),
|
|
13
|
+
"utf8",
|
|
14
|
+
);
|
|
15
|
+
|
|
8
16
|
describe("SearchInput", () => {
|
|
9
17
|
beforeEach(() => {
|
|
10
18
|
vi.useFakeTimers();
|
|
@@ -182,6 +190,18 @@ describe("SearchInput", () => {
|
|
|
182
190
|
expect((input as HTMLInputElement).value).toBe("hello");
|
|
183
191
|
});
|
|
184
192
|
|
|
193
|
+
it("entered value uses the full input ramp (T-VALUE ignore), not textAccent", () => {
|
|
194
|
+
// InputFrame drops unknown data-* on the raw <input>; the contract is the
|
|
195
|
+
// Area color override. T-VALUE = full ramp; textAccent must not dim it.
|
|
196
|
+
expect(SEARCH_INPUT_SRC).toContain('color: "$color"');
|
|
197
|
+
expect(SEARCH_INPUT_SRC).toContain('"data-mp-t-value": "full"');
|
|
198
|
+
expect(SEARCH_INPUT_SRC).toMatch(/textAccentColor/);
|
|
199
|
+
const result = renderWithProviders(<SearchInput defaultValue="pikachu" />);
|
|
200
|
+
const input = result.container.querySelector("input");
|
|
201
|
+
if (!input) throw new Error("input not found");
|
|
202
|
+
expect((input as HTMLInputElement).value).toBe("pikachu");
|
|
203
|
+
});
|
|
204
|
+
|
|
185
205
|
it("clearable=false hides the clear button", () => {
|
|
186
206
|
const result = renderWithProviders(<SearchInput defaultValue="abc" clearable={false} />);
|
|
187
207
|
expect(result.container.querySelector("[aria-label='Clear search']")).toBeNull();
|
|
@@ -295,6 +295,12 @@ export function SearchInput({
|
|
|
295
295
|
disabled,
|
|
296
296
|
readOnly,
|
|
297
297
|
placeholder,
|
|
298
|
+
// T-VALUE (knob-laws § textAccent › entered text): full ramp, never
|
|
299
|
+
// dimmed. InputParts.Area still defaults to textAccentColor — override
|
|
300
|
+
// here so SearchInput does not wait on that shared default. Consumer
|
|
301
|
+
// inputProps still eject last.
|
|
302
|
+
color: "$color",
|
|
303
|
+
"data-mp-t-value": "full",
|
|
298
304
|
paddingInlineStart: 0,
|
|
299
305
|
paddingInlineEnd: showClear ? 0 : undefined,
|
|
300
306
|
className: isWeb ? "mp-input-area mp-search-input" : undefined,
|
|
@@ -11,6 +11,12 @@ import { useViewportGtSm } from "../../FloatingPanel";
|
|
|
11
11
|
import { Form } from "../../Form";
|
|
12
12
|
import { Select, type SelectOption } from "./index";
|
|
13
13
|
|
|
14
|
+
// tamagui v2 types Select.Content as children + scope + FocusScopeProps only,
|
|
15
|
+
// but it still forwards unknown props onto the popper frame — which is where
|
|
16
|
+
// this story needs the z-index to land so the menu clears the Sheet overlay.
|
|
17
|
+
// `as never` used to stand here and made the spread itself a TS2698 (MPO-109).
|
|
18
|
+
const raiseAbovePortal: Record<string, unknown> = { zIndex: 200000 };
|
|
19
|
+
|
|
14
20
|
const meta: Meta<typeof Select> = {
|
|
15
21
|
title: "Forms/Select",
|
|
16
22
|
component: Select,
|
|
@@ -39,6 +45,11 @@ const meta: Meta<typeof Select> = {
|
|
|
39
45
|
description:
|
|
40
46
|
"Multi-select list order. selected-first pins chosen rows to the top; stable keeps options order.",
|
|
41
47
|
},
|
|
48
|
+
native: {
|
|
49
|
+
control: "boolean",
|
|
50
|
+
description:
|
|
51
|
+
"iOS only. Opt into the OS ActionSheet. Ignored on web, Android, and when multiple is set.",
|
|
52
|
+
},
|
|
42
53
|
},
|
|
43
54
|
};
|
|
44
55
|
|
|
@@ -406,7 +417,7 @@ export const Comparison: StoryObj<typeof Select> = {
|
|
|
406
417
|
/>
|
|
407
418
|
</Sheet>
|
|
408
419
|
) : (
|
|
409
|
-
<TamaguiSelect.Content {...
|
|
420
|
+
<TamaguiSelect.Content {...raiseAbovePortal}>
|
|
410
421
|
<TamaguiSelect.ScrollUpButton
|
|
411
422
|
alignItems="center"
|
|
412
423
|
justifyContent="center"
|
|
@@ -473,3 +484,14 @@ export const InTable: Story = {
|
|
|
473
484
|
);
|
|
474
485
|
},
|
|
475
486
|
};
|
|
487
|
+
|
|
488
|
+
export const NativeIos: Story = {
|
|
489
|
+
name: "Native iOS ActionSheet",
|
|
490
|
+
args: {
|
|
491
|
+
label: "Country",
|
|
492
|
+
options: countryOptions,
|
|
493
|
+
placeholder: "Choose a country",
|
|
494
|
+
helperText: "native — iOS ActionSheet; catalog sheet everywhere else",
|
|
495
|
+
native: true,
|
|
496
|
+
},
|
|
497
|
+
};
|
|
@@ -22,7 +22,7 @@ import {
|
|
|
22
22
|
wasKeyboardFocus,
|
|
23
23
|
} from "@multiplatform.one/theme";
|
|
24
24
|
import type { LabelProps, SizeTokens } from "tamagui";
|
|
25
|
-
import { Pressable as RNPressable } from "react-native";
|
|
25
|
+
import { ActionSheetIOS, Platform, Pressable as RNPressable } from "react-native";
|
|
26
26
|
import { Paragraph, Text, View, YStack, isWeb, styled, useTheme } from "tamagui";
|
|
27
27
|
import { Chip, type ChipProps } from "../../Chip";
|
|
28
28
|
import { Skeleton } from "../../Skeleton";
|
|
@@ -50,6 +50,7 @@ import { useDragScroll } from "../../shared/useDragScroll";
|
|
|
50
50
|
import { useIsInTableCell } from "../../shared/tableCellContext";
|
|
51
51
|
import { t } from "../../shared/t";
|
|
52
52
|
import { orderOptionsBySelected, type SelectedOrder } from "../selectedOrder";
|
|
53
|
+
import { shouldUseIosNativeSelect } from "../nativeSelect";
|
|
53
54
|
|
|
54
55
|
// ── Types ─────────────────────────────────────────────────────
|
|
55
56
|
|
|
@@ -99,6 +100,11 @@ export interface SelectProps {
|
|
|
99
100
|
"aria-label"?: string;
|
|
100
101
|
/** When true, uses compact sizing */
|
|
101
102
|
compact?: boolean;
|
|
103
|
+
/**
|
|
104
|
+
* Opt into the OS picker on iOS (ActionSheet). Ignored on web, when
|
|
105
|
+
* `multiple` is set, and on Android (the catalog sheet stays). Default false.
|
|
106
|
+
*/
|
|
107
|
+
native?: boolean;
|
|
102
108
|
}
|
|
103
109
|
|
|
104
110
|
// ── Lightweight item row (replaces heavy ListItem-based DropdownItem) ──
|
|
@@ -464,6 +470,7 @@ interface FloatingSelectCoreProps {
|
|
|
464
470
|
multiple?: boolean;
|
|
465
471
|
selectedOrder?: SelectedOrder;
|
|
466
472
|
dismissible?: boolean;
|
|
473
|
+
native?: boolean;
|
|
467
474
|
}
|
|
468
475
|
function FloatingSelectCore({
|
|
469
476
|
options,
|
|
@@ -1198,6 +1205,7 @@ function NativeSelectCore({
|
|
|
1198
1205
|
multiple,
|
|
1199
1206
|
selectedOrder,
|
|
1200
1207
|
dismissible,
|
|
1208
|
+
native,
|
|
1201
1209
|
}: FloatingSelectCoreProps) {
|
|
1202
1210
|
const describedBy = useFieldDescribedBy();
|
|
1203
1211
|
const fieldA11y = useFieldA11y();
|
|
@@ -1418,6 +1426,72 @@ function NativeSelectCore({
|
|
|
1418
1426
|
: placeholder
|
|
1419
1427
|
: (selectedOption?.label ?? placeholder);
|
|
1420
1428
|
|
|
1429
|
+
if (shouldUseIosNativeSelect({ native, multiple, isWeb, os: Platform.OS })) {
|
|
1430
|
+
const openNative = () => {
|
|
1431
|
+
if (disabled) return;
|
|
1432
|
+
const labels = options.map((o) => o.label);
|
|
1433
|
+
ActionSheetIOS.showActionSheetWithOptions(
|
|
1434
|
+
{
|
|
1435
|
+
options: [...labels, t("Cancel")],
|
|
1436
|
+
cancelButtonIndex: labels.length,
|
|
1437
|
+
},
|
|
1438
|
+
(index) => {
|
|
1439
|
+
if (index == null || index === labels.length) {
|
|
1440
|
+
onBlur?.();
|
|
1441
|
+
return;
|
|
1442
|
+
}
|
|
1443
|
+
handleSelect(options[index].value);
|
|
1444
|
+
},
|
|
1445
|
+
);
|
|
1446
|
+
};
|
|
1447
|
+
return (
|
|
1448
|
+
<RNPressable
|
|
1449
|
+
onPress={openNative}
|
|
1450
|
+
disabled={disabled}
|
|
1451
|
+
accessibilityRole="button"
|
|
1452
|
+
accessibilityState={{ disabled: !!disabled, expanded: false }}
|
|
1453
|
+
accessibilityLabel={ariaLabel ?? fieldA11y?.label}
|
|
1454
|
+
accessibilityValue={{ text: triggerValueText }}
|
|
1455
|
+
style={{ width: "100%" }}
|
|
1456
|
+
>
|
|
1457
|
+
<InputParts.Box
|
|
1458
|
+
disabled={disabled}
|
|
1459
|
+
size={knobProps.sizeToken}
|
|
1460
|
+
minHeight={MIN_PRESS_TARGET}
|
|
1461
|
+
pointerEvents="none"
|
|
1462
|
+
{...(inTableCell
|
|
1463
|
+
? {}
|
|
1464
|
+
: {
|
|
1465
|
+
borderRadius: knobProps.borderRadius.borderRadius,
|
|
1466
|
+
borderWidth: knobProps.borderRadius.borderWidth,
|
|
1467
|
+
})}
|
|
1468
|
+
data-testid="select-trigger"
|
|
1469
|
+
id={id}
|
|
1470
|
+
>
|
|
1471
|
+
<View
|
|
1472
|
+
flex={1}
|
|
1473
|
+
paddingHorizontal={knobProps.panelPadding.padding}
|
|
1474
|
+
paddingVertical="$2"
|
|
1475
|
+
justifyContent="flex-start"
|
|
1476
|
+
alignItems="flex-start"
|
|
1477
|
+
>
|
|
1478
|
+
<Text
|
|
1479
|
+
fontFamily={knobProps.body.fontFamily}
|
|
1480
|
+
fontWeight={knobProps.body.fontWeight}
|
|
1481
|
+
color={selectedOption ? formCommonColors.text : formCommonColors.muted}
|
|
1482
|
+
numberOfLines={1}
|
|
1483
|
+
>
|
|
1484
|
+
{triggerValueText}
|
|
1485
|
+
</Text>
|
|
1486
|
+
</View>
|
|
1487
|
+
<View paddingInlineEnd="$2" alignSelf="center">
|
|
1488
|
+
<CaretDownIcon size={16} />
|
|
1489
|
+
</View>
|
|
1490
|
+
</InputParts.Box>
|
|
1491
|
+
</RNPressable>
|
|
1492
|
+
);
|
|
1493
|
+
}
|
|
1494
|
+
|
|
1421
1495
|
return (
|
|
1422
1496
|
<FloatingPanel
|
|
1423
1497
|
open={open}
|
|
@@ -1574,6 +1648,7 @@ export function Select({
|
|
|
1574
1648
|
dismissible,
|
|
1575
1649
|
skeleton,
|
|
1576
1650
|
compact,
|
|
1651
|
+
native,
|
|
1577
1652
|
"aria-label": ariaLabel,
|
|
1578
1653
|
...rest
|
|
1579
1654
|
}: SelectProps) {
|
|
@@ -1690,6 +1765,7 @@ export function Select({
|
|
|
1690
1765
|
multiple={multiple}
|
|
1691
1766
|
selectedOrder={selectedOrder}
|
|
1692
1767
|
dismissible={dismissible}
|
|
1768
|
+
native={native}
|
|
1693
1769
|
/>
|
|
1694
1770
|
);
|
|
1695
1771
|
};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { fireEvent } from "@testing-library/react";
|
|
2
|
-
import { beforeAll, describe, expect, it, vi } from "vitest";
|
|
1
|
+
import { cleanup, fireEvent } from "@testing-library/react";
|
|
2
|
+
import { afterEach, beforeAll, describe, expect, it, vi } from "vitest";
|
|
3
3
|
import { renderWithProviders } from "@multiplatform.one/test-utils";
|
|
4
|
+
import { Preset } from "@multiplatform.one/theme";
|
|
4
5
|
import { Form } from "../../Form";
|
|
5
6
|
import { Signature, signatureValueToSvg } from "./index";
|
|
6
7
|
|
|
@@ -39,6 +40,8 @@ beforeAll(() => {
|
|
|
39
40
|
})) as any;
|
|
40
41
|
});
|
|
41
42
|
|
|
43
|
+
afterEach(cleanup);
|
|
44
|
+
|
|
42
45
|
describe("Signature", () => {
|
|
43
46
|
describe("without form context", () => {
|
|
44
47
|
it("renders with label", () => {
|
|
@@ -192,7 +195,23 @@ describe("design-law", () => {
|
|
|
192
195
|
expect(bg).not.toBe("white");
|
|
193
196
|
expect(bg.replace(/\s/g, "")).not.toMatch(/^rgb\(255,255,255\)$/);
|
|
194
197
|
expect(bg.replace(/\s/g, "")).not.toMatch(/^#fff(fff)?$/i);
|
|
195
|
-
|
|
198
|
+
});
|
|
199
|
+
|
|
200
|
+
it("elevation knob reaches the pad frame (large-canvas honour, FileUpload sibling)", () => {
|
|
201
|
+
const none = renderWithProviders(
|
|
202
|
+
<Preset overrides={{ elevation: "none" }}>
|
|
203
|
+
<Signature label="Signature" name="sig" clearIcon={clearIcon} />
|
|
204
|
+
</Preset>,
|
|
205
|
+
);
|
|
206
|
+
expect(getPad(none.container).className).not.toMatch(/_bxsh-/);
|
|
207
|
+
cleanup();
|
|
208
|
+
|
|
209
|
+
const large = renderWithProviders(
|
|
210
|
+
<Preset overrides={{ elevation: "large" }}>
|
|
211
|
+
<Signature label="Signature" name="sig" clearIcon={clearIcon} />
|
|
212
|
+
</Preset>,
|
|
213
|
+
);
|
|
214
|
+
expect(getPad(large.container).className).toMatch(/_bxsh-/);
|
|
196
215
|
});
|
|
197
216
|
|
|
198
217
|
it("derives pad minHeight from the size token, not a 200px canvas", () => {
|
|
@@ -8,7 +8,7 @@ import type { PointerEvent, ReactNode } from "react";
|
|
|
8
8
|
import { useCallback, useEffect, useRef, useState } from "react";
|
|
9
9
|
import type { GestureResponderEvent, LayoutChangeEvent } from "react-native";
|
|
10
10
|
import type { LabelProps, SizeTokens } from "tamagui";
|
|
11
|
-
import { isWeb, Text, XStack, YStack, useTheme as useTamaguiTheme } from "tamagui";
|
|
11
|
+
import { isWeb, Text, XStack, YStack, styled, useTheme as useTamaguiTheme } from "tamagui";
|
|
12
12
|
import { EraserIcon } from "@phosphor-icons/react";
|
|
13
13
|
import { getStroke } from "perfect-freehand";
|
|
14
14
|
// Named import (not default): under tamagui 2.7.6 the vitest/vite pipeline
|
|
@@ -245,6 +245,18 @@ const signatureHeightRows = 3;
|
|
|
245
245
|
const signatureAspect = 2.5;
|
|
246
246
|
const defaultClearIcon = <EraserIcon size={16} />;
|
|
247
247
|
|
|
248
|
+
// Large-canvas family (knob-laws § Family rules): honour elevation on the
|
|
249
|
+
// pad FRAME the same way FileUpload's dropzone does — a styled surface that
|
|
250
|
+
// accepts the resolver token. Ink stays clipped; web box-shadow paints
|
|
251
|
+
// outside overflow:hidden (LC-85).
|
|
252
|
+
const SignaturePadFrame = styled(YStack, {
|
|
253
|
+
name: "SignaturePad",
|
|
254
|
+
position: "relative",
|
|
255
|
+
overflow: "hidden",
|
|
256
|
+
userSelect: "none",
|
|
257
|
+
outlineWidth: 0,
|
|
258
|
+
});
|
|
259
|
+
|
|
248
260
|
interface SignatureCanvasProps {
|
|
249
261
|
id?: string;
|
|
250
262
|
hasLabel?: boolean;
|
|
@@ -498,22 +510,19 @@ function SignatureCanvasImpl({
|
|
|
498
510
|
const frameRing = kbFocus ? ensureFocusVisibleRing({ outlineOffset: -2 }) : undefined;
|
|
499
511
|
|
|
500
512
|
return (
|
|
501
|
-
<
|
|
513
|
+
<SignaturePadFrame
|
|
502
514
|
id={id}
|
|
503
|
-
position="relative"
|
|
504
515
|
onLayout={handleLayout}
|
|
505
516
|
{...knobProps.inputSurface}
|
|
506
517
|
backgroundColor={backgroundColor ?? knobProps.inputBackground}
|
|
507
518
|
{...(disabled ? disabledSurface : undefined)}
|
|
508
519
|
borderRadius={cappedRadius}
|
|
509
520
|
borderWidth={knobProps.borderRadius.borderWidth}
|
|
521
|
+
elevation={knobProps.elevation}
|
|
510
522
|
borderColor={error ? formCommonColors.error : formInputColors.border.base}
|
|
511
|
-
overflow="hidden"
|
|
512
523
|
aspectRatio={aspectRatio}
|
|
513
524
|
minHeight={minHeightPx}
|
|
514
|
-
userSelect="none"
|
|
515
525
|
cursor={cursor}
|
|
516
|
-
outlineWidth={0}
|
|
517
526
|
hoverStyle={
|
|
518
527
|
disabled
|
|
519
528
|
? undefined
|
|
@@ -600,7 +609,7 @@ function SignatureCanvasImpl({
|
|
|
600
609
|
</Button>
|
|
601
610
|
</XStack>
|
|
602
611
|
)}
|
|
603
|
-
</
|
|
612
|
+
</SignaturePadFrame>
|
|
604
613
|
);
|
|
605
614
|
}
|
|
606
615
|
|
|
@@ -16,6 +16,7 @@ import {
|
|
|
16
16
|
borderRadiusMap,
|
|
17
17
|
ensureFocusVisibleRing,
|
|
18
18
|
ensureKeyboardModalityTracking,
|
|
19
|
+
FOCUS_RING_HALO_OFFSET,
|
|
19
20
|
resolveRadiusClass,
|
|
20
21
|
useReadableTextOn,
|
|
21
22
|
useResolvedKnobs,
|
|
@@ -240,7 +241,9 @@ function SliderControl({
|
|
|
240
241
|
const fieldTheme = useTheme();
|
|
241
242
|
const thumbFocusRing = ensureFocusVisibleRing({
|
|
242
243
|
outlineColor: (fieldTheme.outlineColor?.val as string | undefined) ?? "$outlineColor",
|
|
243
|
-
|
|
244
|
+
// LC-71 §4 halo: circular thumb. At offset 0 the band is concentric with
|
|
245
|
+
// the thumb's edge and reads as a fatter thumb rather than a focus ring.
|
|
246
|
+
outlineOffset: FOCUS_RING_HALO_OFFSET,
|
|
244
247
|
});
|
|
245
248
|
// Apple/Material/Spectrum: the filled rail is the value (accent). Pin the
|
|
246
249
|
// literal so Tamagui's SliderActive sub-theme cannot remap `$accentBackground`
|
|
@@ -40,6 +40,7 @@ import { Skeleton } from "../../Skeleton";
|
|
|
40
40
|
import { Field, FieldLayout } from "../../fieldLayout";
|
|
41
41
|
import { formCommonColors, formControlColors, formSwitchColors } from "../../shared/colorRamps";
|
|
42
42
|
import {
|
|
43
|
+
clampRadiusInStateProps,
|
|
43
44
|
getElevationWrapperProps,
|
|
44
45
|
getFieldError,
|
|
45
46
|
mergeFieldHandler,
|
|
@@ -143,23 +144,24 @@ function resolveSwitchRadiusStop(pointy: boolean | undefined, radiusToken: strin
|
|
|
143
144
|
return stop;
|
|
144
145
|
}
|
|
145
146
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
147
|
+
/**
|
|
148
|
+
* Rewrite a state bag's radius to the BINARY row (0 or h/2).
|
|
149
|
+
*
|
|
150
|
+
* Delegates to the shared `clampRadiusInStateProps`, which reads the
|
|
151
|
+
* doctrine-GENERATED table through `resolveRadiusClass` (LC-16
|
|
152
|
+
* ONE-IMPLEMENTATION). Switch used to carry its own copy of this walk; a
|
|
153
|
+
* second copy is how a DG-RAD edit reaches the base radius and silently
|
|
154
|
+
* misses every hover/press/focus bag. The only thing left here is the
|
|
155
|
+
* empty-bag convention the JSX below needs: `hoverStyle={undefined}` rather
|
|
156
|
+
* than `hoverStyle={{}}`.
|
|
157
|
+
*/
|
|
154
158
|
function withBinaryStateRadius(
|
|
155
159
|
stateProps: Record<string, any> | undefined,
|
|
156
160
|
heightPx: number,
|
|
157
161
|
): Record<string, any> | undefined {
|
|
158
162
|
if (!stateProps) return undefined;
|
|
159
|
-
const {
|
|
160
|
-
|
|
161
|
-
const next = resolved === undefined ? rest : { ...rest, borderRadius: resolved };
|
|
162
|
-
return Object.keys(next).length > 0 ? next : undefined;
|
|
163
|
+
const next = clampRadiusInStateProps(stateProps, { radiusClass: "BINARY", heightPx });
|
|
164
|
+
return next && Object.keys(next).length > 0 ? next : undefined;
|
|
163
165
|
}
|
|
164
166
|
|
|
165
167
|
const SwitchThumbStyled = styled(View, {
|