@multiplatform.one/forms 7.7.6 → 7.10.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 +1 -4
- package/dist/cjs/Button/index.native.js +5 -6
- package/dist/cjs/Button/index.native.js.map +1 -1
- package/dist/cjs/Chip/index.cjs +1 -1
- package/dist/cjs/Chip/index.native.js +1 -1
- package/dist/cjs/Chip/index.native.js.map +1 -1
- package/dist/cjs/FloatingPanel/index.cjs +59 -14
- package/dist/cjs/FloatingPanel/index.native.js +16 -7
- package/dist/cjs/FloatingPanel/index.native.js.map +1 -1
- package/dist/cjs/FloatingPanel/nestedAction.cjs +37 -0
- package/dist/cjs/FloatingPanel/nestedAction.native.js +42 -0
- package/dist/cjs/FloatingPanel/nestedAction.native.js.map +1 -0
- package/dist/cjs/InputParts/index.cjs +19 -8
- package/dist/cjs/InputParts/index.native.js +20 -11
- package/dist/cjs/InputParts/index.native.js.map +1 -1
- package/dist/cjs/Wheel/index.cjs +3 -3
- package/dist/cjs/Wheel/index.native.js +3 -3
- package/dist/cjs/Wheel/index.native.js.map +1 -1
- package/dist/cjs/fieldLayout.cjs +3 -3
- package/dist/cjs/fieldLayout.native.js +3 -3
- package/dist/cjs/fieldLayout.native.js.map +1 -1
- package/dist/cjs/fields/Checkbox/CheckboxFieldFrame.cjs +9 -2
- package/dist/cjs/fields/Checkbox/CheckboxFieldFrame.native.js +10 -1
- package/dist/cjs/fields/Checkbox/CheckboxFieldFrame.native.js.map +1 -1
- package/dist/cjs/fields/Combobox/index.cjs +36 -29
- package/dist/cjs/fields/Combobox/index.native.js +38 -38
- package/dist/cjs/fields/Combobox/index.native.js.map +1 -1
- package/dist/cjs/fields/DatePicker/Calendar.cjs +6 -1
- package/dist/cjs/fields/DatePicker/Calendar.native.js +6 -1
- package/dist/cjs/fields/DatePicker/Calendar.native.js.map +1 -1
- package/dist/cjs/fields/DatePicker/DateRangePicker.cjs +2 -2
- package/dist/cjs/fields/DatePicker/DateRangePicker.native.js +2 -2
- package/dist/cjs/fields/DatePicker/DateRangePicker.native.js.map +1 -1
- package/dist/cjs/fields/DatePicker/DatetimePicker.catalog.cjs +15 -12
- package/dist/cjs/fields/DatePicker/DatetimePicker.catalog.native.js +16 -12
- package/dist/cjs/fields/DatePicker/DatetimePicker.catalog.native.js.map +1 -1
- package/dist/cjs/fields/DatePicker/DatetimePicker.native.js +39 -14
- package/dist/cjs/fields/DatePicker/DatetimePicker.native.js.map +1 -1
- package/dist/cjs/fields/DatePicker/MonthPicker.cjs +10 -3
- package/dist/cjs/fields/DatePicker/MonthPicker.native.js +10 -3
- package/dist/cjs/fields/DatePicker/MonthPicker.native.js.map +1 -1
- package/dist/cjs/fields/DatePicker/MultiDatePicker.cjs +2 -2
- package/dist/cjs/fields/DatePicker/MultiDatePicker.native.js +2 -2
- package/dist/cjs/fields/DatePicker/MultiDatePicker.native.js.map +1 -1
- package/dist/cjs/fields/DatePicker/index.native.js +3 -0
- package/dist/cjs/fields/DatePicker/index.native.js.map +1 -1
- package/dist/cjs/fields/DatePicker/parts.cjs +26 -14
- package/dist/cjs/fields/DatePicker/parts.native.js +28 -14
- package/dist/cjs/fields/DatePicker/parts.native.js.map +1 -1
- package/dist/cjs/fields/FileUpload/index.cjs +6 -0
- package/dist/cjs/fields/FileUpload/index.native.js +6 -0
- package/dist/cjs/fields/FileUpload/index.native.js.map +1 -1
- package/dist/cjs/fields/Geolocation/GeolocationMap.native.js.map +1 -1
- package/dist/cjs/fields/Geolocation/geocoder.cjs +63 -0
- package/dist/cjs/fields/Geolocation/geocoder.native.js +68 -0
- package/dist/cjs/fields/Geolocation/geocoder.native.js.map +1 -0
- package/dist/cjs/fields/Geolocation/index.cjs +801 -152
- package/dist/cjs/fields/Geolocation/index.native.js +856 -167
- package/dist/cjs/fields/Geolocation/index.native.js.map +1 -1
- package/dist/cjs/fields/Geolocation/nativeSearchFocus.cjs +44 -0
- package/dist/cjs/fields/Geolocation/nativeSearchFocus.native.js +47 -0
- package/dist/cjs/fields/Geolocation/nativeSearchFocus.native.js.map +1 -0
- package/dist/cjs/fields/Icon/drawnSet.cjs +16 -3
- package/dist/cjs/fields/Icon/drawnSet.native.js +20 -3
- package/dist/cjs/fields/Icon/drawnSet.native.js.map +1 -1
- package/dist/cjs/fields/Icon/index.cjs +102 -27
- package/dist/cjs/fields/Icon/index.native.js +115 -31
- package/dist/cjs/fields/Icon/index.native.js.map +1 -1
- package/dist/cjs/fields/Input/index.cjs +5 -12
- package/dist/cjs/fields/Input/index.native.js +5 -13
- package/dist/cjs/fields/Input/index.native.js.map +1 -1
- package/dist/cjs/fields/PhoneInput/index.cjs +2 -2
- package/dist/cjs/fields/PhoneInput/index.native.js +2 -2
- package/dist/cjs/fields/PhoneInput/index.native.js.map +1 -1
- package/dist/cjs/fields/RadioGroup/index.cjs +34 -5
- package/dist/cjs/fields/RadioGroup/index.native.js +49 -7
- package/dist/cjs/fields/RadioGroup/index.native.js.map +1 -1
- package/dist/cjs/fields/SearchInput/index.cjs +8 -9
- package/dist/cjs/fields/SearchInput/index.native.js +8 -9
- package/dist/cjs/fields/SearchInput/index.native.js.map +1 -1
- package/dist/cjs/fields/Select/index.cjs +42 -11
- package/dist/cjs/fields/Select/index.native.js +52 -20
- package/dist/cjs/fields/Select/index.native.js.map +1 -1
- package/dist/cjs/fields/Stepper/index.cjs +144 -31
- package/dist/cjs/fields/Stepper/index.native.js +151 -31
- package/dist/cjs/fields/Stepper/index.native.js.map +1 -1
- package/dist/cjs/fields/ToggleGroup/index.cjs +35 -2
- package/dist/cjs/fields/ToggleGroup/index.native.js +42 -2
- package/dist/cjs/fields/ToggleGroup/index.native.js.map +1 -1
- package/dist/cjs/index.cjs +2 -0
- package/dist/cjs/index.native.js +2 -0
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/shared/focusManagement.cjs +24 -11
- package/dist/cjs/shared/focusManagement.native.js +24 -11
- package/dist/cjs/shared/focusManagement.native.js.map +1 -1
- package/dist/cjs/shared/nativeA11y.cjs +57 -0
- package/dist/cjs/shared/nativeA11y.native.js +61 -0
- package/dist/cjs/shared/nativeA11y.native.js.map +1 -0
- package/dist/esm/Button/index.mjs +1 -4
- package/dist/esm/Button/index.mjs.map +1 -1
- package/dist/esm/Button/index.native.js +5 -6
- package/dist/esm/Button/index.native.js.map +1 -1
- package/dist/esm/Chip/index.mjs +1 -1
- package/dist/esm/Chip/index.mjs.map +1 -1
- package/dist/esm/Chip/index.native.js +1 -1
- package/dist/esm/Chip/index.native.js.map +1 -1
- package/dist/esm/FloatingPanel/index.mjs +58 -15
- package/dist/esm/FloatingPanel/index.mjs.map +1 -1
- package/dist/esm/FloatingPanel/index.native.js +15 -8
- package/dist/esm/FloatingPanel/index.native.js.map +1 -1
- package/dist/esm/FloatingPanel/nestedAction.mjs +11 -0
- package/dist/esm/FloatingPanel/nestedAction.mjs.map +1 -0
- package/dist/esm/FloatingPanel/nestedAction.native.js +13 -0
- package/dist/esm/FloatingPanel/nestedAction.native.js.map +1 -0
- package/dist/esm/InputParts/index.mjs +20 -9
- package/dist/esm/InputParts/index.mjs.map +1 -1
- package/dist/esm/InputParts/index.native.js +21 -12
- package/dist/esm/InputParts/index.native.js.map +1 -1
- package/dist/esm/Wheel/index.mjs +3 -3
- package/dist/esm/Wheel/index.mjs.map +1 -1
- package/dist/esm/Wheel/index.native.js +3 -3
- package/dist/esm/Wheel/index.native.js.map +1 -1
- package/dist/esm/fieldLayout.mjs +3 -3
- package/dist/esm/fieldLayout.mjs.map +1 -1
- package/dist/esm/fieldLayout.native.js +3 -3
- package/dist/esm/fieldLayout.native.js.map +1 -1
- package/dist/esm/fields/Checkbox/CheckboxFieldFrame.mjs +8 -1
- package/dist/esm/fields/Checkbox/CheckboxFieldFrame.mjs.map +1 -1
- package/dist/esm/fields/Checkbox/CheckboxFieldFrame.native.js +10 -1
- package/dist/esm/fields/Checkbox/CheckboxFieldFrame.native.js.map +1 -1
- package/dist/esm/fields/Combobox/index.mjs +36 -29
- package/dist/esm/fields/Combobox/index.mjs.map +1 -1
- package/dist/esm/fields/Combobox/index.native.js +38 -38
- package/dist/esm/fields/Combobox/index.native.js.map +1 -1
- package/dist/esm/fields/DatePicker/Calendar.mjs +6 -1
- package/dist/esm/fields/DatePicker/Calendar.mjs.map +1 -1
- package/dist/esm/fields/DatePicker/Calendar.native.js +6 -1
- package/dist/esm/fields/DatePicker/Calendar.native.js.map +1 -1
- package/dist/esm/fields/DatePicker/DateRangePicker.mjs +2 -2
- package/dist/esm/fields/DatePicker/DateRangePicker.mjs.map +1 -1
- package/dist/esm/fields/DatePicker/DateRangePicker.native.js +2 -2
- package/dist/esm/fields/DatePicker/DateRangePicker.native.js.map +1 -1
- package/dist/esm/fields/DatePicker/DatetimePicker.catalog.mjs +15 -12
- package/dist/esm/fields/DatePicker/DatetimePicker.catalog.mjs.map +1 -1
- package/dist/esm/fields/DatePicker/DatetimePicker.catalog.native.js +16 -12
- package/dist/esm/fields/DatePicker/DatetimePicker.catalog.native.js.map +1 -1
- package/dist/esm/fields/DatePicker/DatetimePicker.native.js +39 -14
- package/dist/esm/fields/DatePicker/DatetimePicker.native.js.map +1 -1
- package/dist/esm/fields/DatePicker/MonthPicker.mjs +10 -3
- package/dist/esm/fields/DatePicker/MonthPicker.mjs.map +1 -1
- package/dist/esm/fields/DatePicker/MonthPicker.native.js +10 -3
- package/dist/esm/fields/DatePicker/MonthPicker.native.js.map +1 -1
- package/dist/esm/fields/DatePicker/MultiDatePicker.mjs +2 -2
- package/dist/esm/fields/DatePicker/MultiDatePicker.mjs.map +1 -1
- package/dist/esm/fields/DatePicker/MultiDatePicker.native.js +2 -2
- package/dist/esm/fields/DatePicker/MultiDatePicker.native.js.map +1 -1
- package/dist/esm/fields/DatePicker/index.native.js +3 -0
- package/dist/esm/fields/DatePicker/index.native.js.map +1 -1
- package/dist/esm/fields/DatePicker/parts.mjs +28 -16
- package/dist/esm/fields/DatePicker/parts.mjs.map +1 -1
- package/dist/esm/fields/DatePicker/parts.native.js +30 -16
- package/dist/esm/fields/DatePicker/parts.native.js.map +1 -1
- package/dist/esm/fields/FileUpload/index.mjs +6 -0
- package/dist/esm/fields/FileUpload/index.mjs.map +1 -1
- package/dist/esm/fields/FileUpload/index.native.js +6 -0
- package/dist/esm/fields/FileUpload/index.native.js.map +1 -1
- package/dist/esm/fields/Geolocation/GeolocationMap.mjs.map +1 -1
- package/dist/esm/fields/Geolocation/GeolocationMap.native.js.map +1 -1
- package/dist/esm/fields/Geolocation/geocoder.mjs +33 -0
- package/dist/esm/fields/Geolocation/geocoder.mjs.map +1 -0
- package/dist/esm/fields/Geolocation/geocoder.native.js +35 -0
- package/dist/esm/fields/Geolocation/geocoder.native.js.map +1 -0
- package/dist/esm/fields/Geolocation/index.mjs +792 -149
- package/dist/esm/fields/Geolocation/index.mjs.map +1 -1
- package/dist/esm/fields/Geolocation/index.native.js +847 -164
- package/dist/esm/fields/Geolocation/index.native.js.map +1 -1
- package/dist/esm/fields/Geolocation/nativeSearchFocus.mjs +19 -0
- package/dist/esm/fields/Geolocation/nativeSearchFocus.mjs.map +1 -0
- package/dist/esm/fields/Geolocation/nativeSearchFocus.native.js +19 -0
- package/dist/esm/fields/Geolocation/nativeSearchFocus.native.js.map +1 -0
- package/dist/esm/fields/Icon/drawnSet.mjs +16 -3
- package/dist/esm/fields/Icon/drawnSet.mjs.map +1 -1
- package/dist/esm/fields/Icon/drawnSet.native.js +20 -3
- package/dist/esm/fields/Icon/drawnSet.native.js.map +1 -1
- package/dist/esm/fields/Icon/index.mjs +93 -18
- package/dist/esm/fields/Icon/index.mjs.map +1 -1
- package/dist/esm/fields/Icon/index.native.js +106 -22
- package/dist/esm/fields/Icon/index.native.js.map +1 -1
- package/dist/esm/fields/Input/index.mjs +5 -12
- package/dist/esm/fields/Input/index.mjs.map +1 -1
- package/dist/esm/fields/Input/index.native.js +5 -13
- package/dist/esm/fields/Input/index.native.js.map +1 -1
- package/dist/esm/fields/PhoneInput/index.mjs +2 -2
- package/dist/esm/fields/PhoneInput/index.mjs.map +1 -1
- package/dist/esm/fields/PhoneInput/index.native.js +2 -2
- package/dist/esm/fields/PhoneInput/index.native.js.map +1 -1
- package/dist/esm/fields/RadioGroup/index.mjs +34 -5
- package/dist/esm/fields/RadioGroup/index.mjs.map +1 -1
- package/dist/esm/fields/RadioGroup/index.native.js +49 -7
- package/dist/esm/fields/RadioGroup/index.native.js.map +1 -1
- package/dist/esm/fields/SearchInput/index.mjs +9 -10
- package/dist/esm/fields/SearchInput/index.mjs.map +1 -1
- package/dist/esm/fields/SearchInput/index.native.js +9 -10
- package/dist/esm/fields/SearchInput/index.native.js.map +1 -1
- package/dist/esm/fields/Select/index.mjs +42 -11
- package/dist/esm/fields/Select/index.mjs.map +1 -1
- package/dist/esm/fields/Select/index.native.js +52 -20
- package/dist/esm/fields/Select/index.native.js.map +1 -1
- package/dist/esm/fields/Stepper/index.mjs +145 -32
- package/dist/esm/fields/Stepper/index.mjs.map +1 -1
- package/dist/esm/fields/Stepper/index.native.js +152 -32
- package/dist/esm/fields/Stepper/index.native.js.map +1 -1
- package/dist/esm/fields/ToggleGroup/index.mjs +35 -2
- package/dist/esm/fields/ToggleGroup/index.mjs.map +1 -1
- package/dist/esm/fields/ToggleGroup/index.native.js +42 -2
- package/dist/esm/fields/ToggleGroup/index.native.js.map +1 -1
- package/dist/esm/index.mjs +2 -1
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/index.native.js +2 -1
- package/dist/esm/index.native.js.map +1 -1
- package/dist/esm/shared/focusManagement.mjs +24 -11
- package/dist/esm/shared/focusManagement.mjs.map +1 -1
- package/dist/esm/shared/focusManagement.native.js +24 -11
- package/dist/esm/shared/focusManagement.native.js.map +1 -1
- package/dist/esm/shared/nativeA11y.mjs +31 -0
- package/dist/esm/shared/nativeA11y.mjs.map +1 -0
- package/dist/esm/shared/nativeA11y.native.js +32 -0
- package/dist/esm/shared/nativeA11y.native.js.map +1 -0
- package/dist/jsx/Button/index.mjs +1 -4
- package/dist/jsx/Button/index.mjs.map +1 -1
- package/dist/jsx/Button/index.native.js +5 -6
- package/dist/jsx/Button/index.native.js.map +1 -1
- package/dist/jsx/Chip/index.mjs +1 -1
- package/dist/jsx/Chip/index.mjs.map +1 -1
- package/dist/jsx/Chip/index.native.js +1 -1
- package/dist/jsx/Chip/index.native.js.map +1 -1
- package/dist/jsx/FloatingPanel/index.mjs +58 -15
- package/dist/jsx/FloatingPanel/index.mjs.map +1 -1
- package/dist/jsx/FloatingPanel/index.native.js +16 -7
- package/dist/jsx/FloatingPanel/index.native.js.map +1 -1
- package/dist/jsx/FloatingPanel/nestedAction.mjs +11 -0
- package/dist/jsx/FloatingPanel/nestedAction.mjs.map +1 -0
- package/dist/jsx/FloatingPanel/nestedAction.native.js +42 -0
- package/dist/jsx/FloatingPanel/nestedAction.native.js.map +1 -0
- package/dist/jsx/InputParts/index.mjs +20 -9
- package/dist/jsx/InputParts/index.mjs.map +1 -1
- package/dist/jsx/InputParts/index.native.js +20 -11
- package/dist/jsx/InputParts/index.native.js.map +1 -1
- package/dist/jsx/Wheel/index.mjs +3 -3
- package/dist/jsx/Wheel/index.mjs.map +1 -1
- package/dist/jsx/Wheel/index.native.js +3 -3
- package/dist/jsx/Wheel/index.native.js.map +1 -1
- package/dist/jsx/fieldLayout.mjs +3 -3
- package/dist/jsx/fieldLayout.mjs.map +1 -1
- package/dist/jsx/fieldLayout.native.js +3 -3
- package/dist/jsx/fieldLayout.native.js.map +1 -1
- package/dist/jsx/fields/Checkbox/CheckboxFieldFrame.mjs +8 -1
- package/dist/jsx/fields/Checkbox/CheckboxFieldFrame.mjs.map +1 -1
- package/dist/jsx/fields/Checkbox/CheckboxFieldFrame.native.js +10 -1
- package/dist/jsx/fields/Checkbox/CheckboxFieldFrame.native.js.map +1 -1
- package/dist/jsx/fields/Combobox/index.mjs +36 -29
- package/dist/jsx/fields/Combobox/index.mjs.map +1 -1
- package/dist/jsx/fields/Combobox/index.native.js +38 -38
- package/dist/jsx/fields/Combobox/index.native.js.map +1 -1
- package/dist/jsx/fields/DatePicker/Calendar.mjs +6 -1
- package/dist/jsx/fields/DatePicker/Calendar.mjs.map +1 -1
- package/dist/jsx/fields/DatePicker/Calendar.native.js +6 -1
- package/dist/jsx/fields/DatePicker/Calendar.native.js.map +1 -1
- package/dist/jsx/fields/DatePicker/DateRangePicker.mjs +2 -2
- package/dist/jsx/fields/DatePicker/DateRangePicker.mjs.map +1 -1
- package/dist/jsx/fields/DatePicker/DateRangePicker.native.js +2 -2
- package/dist/jsx/fields/DatePicker/DateRangePicker.native.js.map +1 -1
- package/dist/jsx/fields/DatePicker/DatetimePicker.catalog.mjs +15 -12
- package/dist/jsx/fields/DatePicker/DatetimePicker.catalog.mjs.map +1 -1
- package/dist/jsx/fields/DatePicker/DatetimePicker.catalog.native.js +16 -12
- package/dist/jsx/fields/DatePicker/DatetimePicker.catalog.native.js.map +1 -1
- package/dist/jsx/fields/DatePicker/DatetimePicker.native.js +39 -14
- package/dist/jsx/fields/DatePicker/DatetimePicker.native.js.map +1 -1
- package/dist/jsx/fields/DatePicker/MonthPicker.mjs +10 -3
- package/dist/jsx/fields/DatePicker/MonthPicker.mjs.map +1 -1
- package/dist/jsx/fields/DatePicker/MonthPicker.native.js +10 -3
- package/dist/jsx/fields/DatePicker/MonthPicker.native.js.map +1 -1
- package/dist/jsx/fields/DatePicker/MultiDatePicker.mjs +2 -2
- package/dist/jsx/fields/DatePicker/MultiDatePicker.mjs.map +1 -1
- package/dist/jsx/fields/DatePicker/MultiDatePicker.native.js +2 -2
- package/dist/jsx/fields/DatePicker/MultiDatePicker.native.js.map +1 -1
- package/dist/jsx/fields/DatePicker/index.native.js +3 -0
- package/dist/jsx/fields/DatePicker/index.native.js.map +1 -1
- package/dist/jsx/fields/DatePicker/parts.mjs +28 -16
- package/dist/jsx/fields/DatePicker/parts.mjs.map +1 -1
- package/dist/jsx/fields/DatePicker/parts.native.js +28 -14
- package/dist/jsx/fields/DatePicker/parts.native.js.map +1 -1
- package/dist/jsx/fields/FileUpload/index.mjs +6 -0
- package/dist/jsx/fields/FileUpload/index.mjs.map +1 -1
- package/dist/jsx/fields/FileUpload/index.native.js +6 -0
- package/dist/jsx/fields/FileUpload/index.native.js.map +1 -1
- package/dist/jsx/fields/Geolocation/GeolocationMap.mjs.map +1 -1
- package/dist/jsx/fields/Geolocation/GeolocationMap.native.js.map +1 -1
- package/dist/jsx/fields/Geolocation/geocoder.mjs +33 -0
- package/dist/jsx/fields/Geolocation/geocoder.mjs.map +1 -0
- package/dist/jsx/fields/Geolocation/geocoder.native.js +68 -0
- package/dist/jsx/fields/Geolocation/geocoder.native.js.map +1 -0
- package/dist/jsx/fields/Geolocation/index.mjs +792 -149
- package/dist/jsx/fields/Geolocation/index.mjs.map +1 -1
- package/dist/jsx/fields/Geolocation/index.native.js +856 -167
- package/dist/jsx/fields/Geolocation/index.native.js.map +1 -1
- package/dist/jsx/fields/Geolocation/nativeSearchFocus.mjs +19 -0
- package/dist/jsx/fields/Geolocation/nativeSearchFocus.mjs.map +1 -0
- package/dist/jsx/fields/Geolocation/nativeSearchFocus.native.js +47 -0
- package/dist/jsx/fields/Geolocation/nativeSearchFocus.native.js.map +1 -0
- package/dist/jsx/fields/Icon/drawnSet.mjs +16 -3
- package/dist/jsx/fields/Icon/drawnSet.mjs.map +1 -1
- package/dist/jsx/fields/Icon/drawnSet.native.js +20 -3
- package/dist/jsx/fields/Icon/drawnSet.native.js.map +1 -1
- package/dist/jsx/fields/Icon/index.mjs +93 -18
- package/dist/jsx/fields/Icon/index.mjs.map +1 -1
- package/dist/jsx/fields/Icon/index.native.js +115 -31
- package/dist/jsx/fields/Icon/index.native.js.map +1 -1
- package/dist/jsx/fields/Input/index.mjs +5 -12
- package/dist/jsx/fields/Input/index.mjs.map +1 -1
- package/dist/jsx/fields/Input/index.native.js +5 -13
- package/dist/jsx/fields/Input/index.native.js.map +1 -1
- package/dist/jsx/fields/PhoneInput/index.mjs +2 -2
- package/dist/jsx/fields/PhoneInput/index.mjs.map +1 -1
- package/dist/jsx/fields/PhoneInput/index.native.js +2 -2
- package/dist/jsx/fields/PhoneInput/index.native.js.map +1 -1
- package/dist/jsx/fields/RadioGroup/index.mjs +34 -5
- package/dist/jsx/fields/RadioGroup/index.mjs.map +1 -1
- package/dist/jsx/fields/RadioGroup/index.native.js +49 -7
- package/dist/jsx/fields/RadioGroup/index.native.js.map +1 -1
- package/dist/jsx/fields/SearchInput/index.mjs +9 -10
- package/dist/jsx/fields/SearchInput/index.mjs.map +1 -1
- package/dist/jsx/fields/SearchInput/index.native.js +8 -9
- package/dist/jsx/fields/SearchInput/index.native.js.map +1 -1
- package/dist/jsx/fields/Select/index.mjs +42 -11
- package/dist/jsx/fields/Select/index.mjs.map +1 -1
- package/dist/jsx/fields/Select/index.native.js +52 -20
- package/dist/jsx/fields/Select/index.native.js.map +1 -1
- package/dist/jsx/fields/Stepper/index.mjs +145 -32
- package/dist/jsx/fields/Stepper/index.mjs.map +1 -1
- package/dist/jsx/fields/Stepper/index.native.js +151 -31
- package/dist/jsx/fields/Stepper/index.native.js.map +1 -1
- package/dist/jsx/fields/ToggleGroup/index.mjs +35 -2
- package/dist/jsx/fields/ToggleGroup/index.mjs.map +1 -1
- package/dist/jsx/fields/ToggleGroup/index.native.js +42 -2
- package/dist/jsx/fields/ToggleGroup/index.native.js.map +1 -1
- package/dist/jsx/index.js +2 -1
- package/dist/jsx/index.js.map +1 -1
- package/dist/jsx/index.mjs +2 -1
- package/dist/jsx/index.mjs.map +1 -1
- package/dist/jsx/index.native.js +2 -0
- package/dist/jsx/index.native.js.map +1 -1
- package/dist/jsx/shared/focusManagement.mjs +24 -11
- package/dist/jsx/shared/focusManagement.mjs.map +1 -1
- package/dist/jsx/shared/focusManagement.native.js +24 -11
- package/dist/jsx/shared/focusManagement.native.js.map +1 -1
- package/dist/jsx/shared/nativeA11y.mjs +31 -0
- package/dist/jsx/shared/nativeA11y.mjs.map +1 -0
- package/dist/jsx/shared/nativeA11y.native.js +61 -0
- package/dist/jsx/shared/nativeA11y.native.js.map +1 -0
- package/package.json +9 -7
- package/src/Button/Button.fontWeight.spec.tsx +75 -0
- package/src/Button/Button.labelInk.spec.tsx +21 -18
- package/src/Button/Button.outlinedChannel.spec.tsx +46 -0
- package/src/Button/Button.sizeLadder.spec.tsx +4 -3
- package/src/Button/Button.stories.tsx +20 -0
- package/src/Button/index.tsx +30 -7
- package/src/Chip/Chip.spec.tsx +3 -1
- package/src/Chip/index.tsx +1 -5
- package/src/FieldGroup.stories.tsx +3 -7
- package/src/FieldLayout.stories.tsx +75 -12
- package/src/Fieldset.stories.tsx +3 -7
- package/src/FloatingPanel/FloatingPanel.native.spec.tsx +54 -0
- package/src/FloatingPanel/FloatingPanel.spec.tsx +109 -0
- package/src/FloatingPanel/index.native.tsx +24 -7
- package/src/FloatingPanel/index.tsx +80 -13
- package/src/FloatingPanel/nestedAction.spec.ts +36 -0
- package/src/FloatingPanel/nestedAction.ts +15 -0
- package/src/FloatingPanel/panelWidthContract.spec.ts +12 -15
- package/src/FormGrid.stories.tsx +5 -11
- package/src/FormsIntegration.stories.tsx +2 -6
- package/src/InputParts/InputButton.spec.tsx +16 -0
- package/src/InputParts/index.tsx +34 -7
- package/src/InputParts/layoutGap.spec.tsx +43 -0
- package/src/Wheel/Wheel.spec.tsx +16 -0
- package/src/Wheel/index.tsx +3 -3
- package/src/fieldFamilyStories.radius.spec.tsx +118 -0
- package/src/fieldLayout.spec.tsx +42 -1
- package/src/fieldLayout.tsx +9 -9
- package/src/fields/Barcode/Barcode.spec.tsx +2 -0
- package/src/fields/Checkbox/CheckboxFieldFrame.spec.tsx +18 -0
- package/src/fields/Checkbox/CheckboxFieldFrame.tsx +6 -1
- package/src/fields/Combobox/Combobox.spec.tsx +48 -1
- package/src/fields/Combobox/index.tsx +53 -39
- package/src/fields/DatePicker/Calendar.tsx +4 -1
- package/src/fields/DatePicker/DatePicker.stories.tsx +22 -1
- package/src/fields/DatePicker/DateRangePicker.tsx +4 -2
- package/src/fields/DatePicker/DatetimePicker.catalog.tsx +21 -19
- package/src/fields/DatePicker/DatetimePicker.native.spec.tsx +144 -0
- package/src/fields/DatePicker/DatetimePicker.native.tsx +57 -32
- package/src/fields/DatePicker/DatetimePicker.stories.tsx +22 -0
- package/src/fields/DatePicker/MonthPicker.tsx +8 -3
- package/src/fields/DatePicker/MultiDatePicker.tsx +4 -2
- package/src/fields/DatePicker/index.native.tsx +1 -0
- package/src/fields/DatePicker/parts.spec.tsx +56 -0
- package/src/fields/DatePicker/parts.tsx +33 -12
- package/src/fields/FileUpload/FileUpload.spec.tsx +29 -0
- package/src/fields/FileUpload/index.tsx +6 -0
- package/src/fields/Geolocation/Geolocation.spec.tsx +287 -35
- package/src/fields/Geolocation/Geolocation.stories.tsx +141 -7
- package/src/fields/Geolocation/GeolocationMap.native.tsx +3 -0
- package/src/fields/Geolocation/GeolocationMap.tsx +4 -0
- package/src/fields/Geolocation/geocoder.spec.ts +59 -0
- package/src/fields/Geolocation/geocoder.ts +84 -0
- package/src/fields/Geolocation/geocoderSeam.spec.tsx +203 -0
- package/src/fields/Geolocation/index.tsx +912 -180
- package/src/fields/Geolocation/nativeSearchFocus.spec.ts +34 -0
- package/src/fields/Geolocation/nativeSearchFocus.ts +19 -0
- package/src/fields/Geolocation/salvage.spec.tsx +398 -0
- package/src/fields/Geolocation/storyProviders.spec.tsx +44 -0
- package/src/fields/Icon/Icon.spec.tsx +215 -1
- package/src/fields/Icon/Icon.stories.tsx +9 -1
- package/src/fields/Icon/drawnSet.tsx +44 -4
- package/src/fields/Icon/index.tsx +118 -18
- package/src/fields/Input/Input.copy.spec.tsx +1 -0
- package/src/fields/Input/Input.spec.tsx +50 -0
- package/src/fields/Input/Input.stories.tsx +1 -1
- package/src/fields/Input/index.tsx +7 -13
- package/src/fields/PhoneInput/index.tsx +2 -2
- package/src/fields/RadioGroup/RadioGroup.native.spec.tsx +67 -0
- package/src/fields/RadioGroup/index.tsx +82 -8
- package/src/fields/SearchInput/SearchInput.spec.tsx +14 -0
- package/src/fields/SearchInput/index.tsx +5 -6
- package/src/fields/Select/Select.spec.tsx +54 -0
- package/src/fields/Select/index.tsx +52 -17
- package/src/fields/Stepper/Stepper.spec.tsx +34 -1
- package/src/fields/Stepper/index.tsx +193 -33
- package/src/fields/ToggleGroup/ToggleGroup.native.spec.tsx +73 -0
- package/src/fields/ToggleGroup/ToggleGroup.spec.tsx +49 -0
- package/src/fields/ToggleGroup/index.tsx +76 -1
- package/src/index.ts +9 -0
- package/src/shared/focusManagement.spec.tsx +68 -0
- package/src/shared/focusManagement.ts +20 -10
- package/src/shared/nativeA11y.spec.ts +64 -0
- package/src/shared/nativeA11y.ts +80 -0
- package/types/Button/index.d.ts +22 -3
- package/types/Button/index.d.ts.map +1 -1
- package/types/Chip/index.d.ts.map +1 -1
- package/types/FloatingPanel/index.d.ts +11 -1
- package/types/FloatingPanel/index.d.ts.map +1 -1
- package/types/FloatingPanel/index.native.d.ts +2 -1
- package/types/FloatingPanel/index.native.d.ts.map +1 -1
- package/types/FloatingPanel/nestedAction.d.ts +13 -0
- package/types/FloatingPanel/nestedAction.d.ts.map +1 -0
- package/types/InputParts/index.d.ts.map +1 -1
- package/types/fields/Checkbox/CheckboxFieldFrame.d.ts +46 -2
- package/types/fields/Checkbox/CheckboxFieldFrame.d.ts.map +1 -1
- package/types/fields/Checkbox/index.d.ts +3 -3
- package/types/fields/Combobox/index.d.ts +3 -1
- package/types/fields/Combobox/index.d.ts.map +1 -1
- package/types/fields/DatePicker/Calendar.d.ts.map +1 -1
- package/types/fields/DatePicker/DateRangePicker.d.ts.map +1 -1
- package/types/fields/DatePicker/DatetimePicker.catalog.d.ts.map +1 -1
- package/types/fields/DatePicker/DatetimePicker.native.d.ts.map +1 -1
- package/types/fields/DatePicker/MonthPicker.d.ts.map +1 -1
- package/types/fields/DatePicker/MultiDatePicker.d.ts.map +1 -1
- package/types/fields/DatePicker/index.native.d.ts.map +1 -1
- package/types/fields/DatePicker/parts.d.ts.map +1 -1
- package/types/fields/FileUpload/index.d.ts.map +1 -1
- package/types/fields/Geolocation/GeolocationMap.d.ts +4 -0
- package/types/fields/Geolocation/GeolocationMap.d.ts.map +1 -1
- package/types/fields/Geolocation/GeolocationMap.native.d.ts +3 -0
- package/types/fields/Geolocation/GeolocationMap.native.d.ts.map +1 -1
- package/types/fields/Geolocation/geocoder.d.ts +53 -0
- package/types/fields/Geolocation/geocoder.d.ts.map +1 -0
- package/types/fields/Geolocation/index.d.ts +18 -2
- package/types/fields/Geolocation/index.d.ts.map +1 -1
- package/types/fields/Geolocation/nativeSearchFocus.d.ts +8 -0
- package/types/fields/Geolocation/nativeSearchFocus.d.ts.map +1 -0
- package/types/fields/Icon/drawnSet.d.ts.map +1 -1
- package/types/fields/Icon/index.d.ts.map +1 -1
- package/types/fields/Input/index.d.ts.map +1 -1
- package/types/fields/PhoneInput/index.d.ts.map +1 -1
- package/types/fields/RadioGroup/index.d.ts +30 -3
- package/types/fields/RadioGroup/index.d.ts.map +1 -1
- package/types/fields/SearchInput/index.d.ts.map +1 -1
- package/types/fields/Select/index.d.ts.map +1 -1
- package/types/fields/Stepper/index.d.ts.map +1 -1
- package/types/fields/ToggleGroup/index.d.ts +31 -2
- package/types/fields/ToggleGroup/index.d.ts.map +1 -1
- package/types/index.d.ts +2 -0
- package/types/index.d.ts.map +1 -1
- package/types/shared/focusManagement.d.ts +2 -2
- package/types/shared/focusManagement.d.ts.map +1 -1
- package/types/shared/nativeA11y.d.ts +61 -0
- package/types/shared/nativeA11y.d.ts.map +1 -0
- package/src/router.d.ts +0 -16
|
@@ -44,18 +44,25 @@ function focusIsDropped(insideEl) {
|
|
|
44
44
|
function useCaptureOnOpen(open) {
|
|
45
45
|
var prevRef = (0, import_react.useRef)(null);
|
|
46
46
|
var wasOpenRef = (0, import_react.useRef)(false);
|
|
47
|
+
var generationRef = (0, import_react.useRef)(0);
|
|
47
48
|
if (canUseDom()) {
|
|
49
|
+
if (open !== wasOpenRef.current) generationRef.current += 1;
|
|
48
50
|
if (open && !wasOpenRef.current) {
|
|
49
51
|
prevRef.current = document.activeElement;
|
|
50
52
|
}
|
|
51
53
|
wasOpenRef.current = open;
|
|
52
54
|
}
|
|
53
|
-
return
|
|
55
|
+
return {
|
|
56
|
+
prevRef,
|
|
57
|
+
generationRef
|
|
58
|
+
};
|
|
54
59
|
}
|
|
55
|
-
function restoreLater(prevRef, insideRef) {
|
|
60
|
+
function restoreLater(prevRef, generationRef, insideRef, skipReturnFocusRef) {
|
|
61
|
+
var generation = generationRef.current;
|
|
56
62
|
var restore = function restore2() {
|
|
57
63
|
var _ref;
|
|
58
64
|
if (!canUseDom()) return;
|
|
65
|
+
if ((skipReturnFocusRef === null || skipReturnFocusRef === void 0 ? void 0 : skipReturnFocusRef.current) || generationRef.current !== generation) return;
|
|
59
66
|
var target = prevRef.current;
|
|
60
67
|
if (!target || !target.isConnected) return;
|
|
61
68
|
if (focusIsDropped((_ref = insideRef === null || insideRef === void 0 ? void 0 : insideRef.current) !== null && _ref !== void 0 ? _ref : null)) {
|
|
@@ -70,23 +77,29 @@ function restoreLater(prevRef, insideRef) {
|
|
|
70
77
|
});
|
|
71
78
|
setTimeout(restore, 320);
|
|
72
79
|
}
|
|
73
|
-
function useReturnFocusOnClose(open) {
|
|
74
|
-
var
|
|
80
|
+
function useReturnFocusOnClose(open, skipReturnFocusRef) {
|
|
81
|
+
var {
|
|
82
|
+
prevRef,
|
|
83
|
+
generationRef
|
|
84
|
+
} = useCaptureOnOpen(open);
|
|
75
85
|
(0, import_react.useEffect)(function () {
|
|
76
86
|
if (!canUseDom() || !open) return;
|
|
77
87
|
return function () {
|
|
78
|
-
return restoreLater(prevRef);
|
|
88
|
+
return restoreLater(prevRef, generationRef, void 0, skipReturnFocusRef);
|
|
79
89
|
};
|
|
80
|
-
}, [open, prevRef]);
|
|
90
|
+
}, [open, prevRef, generationRef, skipReturnFocusRef]);
|
|
81
91
|
}
|
|
82
|
-
function useSheetModalFocus(open, frameRef) {
|
|
83
|
-
var
|
|
92
|
+
function useSheetModalFocus(open, frameRef, skipReturnFocusRef) {
|
|
93
|
+
var {
|
|
94
|
+
prevRef,
|
|
95
|
+
generationRef
|
|
96
|
+
} = useCaptureOnOpen(open);
|
|
84
97
|
(0, import_react.useEffect)(function () {
|
|
85
98
|
if (!canUseDom() || !open) return;
|
|
86
99
|
var frame = frameRef.current;
|
|
87
100
|
if (!frame || typeof frame.addEventListener !== "function") {
|
|
88
101
|
return function () {
|
|
89
|
-
return restoreLater(prevRef, frameRef);
|
|
102
|
+
return restoreLater(prevRef, generationRef, frameRef, skipReturnFocusRef);
|
|
90
103
|
};
|
|
91
104
|
}
|
|
92
105
|
var focusIn = function focusIn2() {
|
|
@@ -127,8 +140,8 @@ function useSheetModalFocus(open, frameRef) {
|
|
|
127
140
|
cancelAnimationFrame(raf);
|
|
128
141
|
cancelAnimationFrame(innerRaf);
|
|
129
142
|
frame.removeEventListener("keydown", onKeyDown);
|
|
130
|
-
restoreLater(prevRef, frameRef);
|
|
143
|
+
restoreLater(prevRef, generationRef, frameRef, skipReturnFocusRef);
|
|
131
144
|
};
|
|
132
|
-
}, [open, frameRef, prevRef]);
|
|
145
|
+
}, [open, frameRef, prevRef, generationRef, skipReturnFocusRef]);
|
|
133
146
|
}
|
|
134
147
|
//# sourceMappingURL=focusManagement.native.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","focusManagement_exports","useReturnFocusOnClose","useSheetModalFocus","module","exports","import_react","require","import_tamagui","import_theme","FOCUSABLE","canUseDom","canUseDom2","isWeb","document","focusIsDropped","insideEl","ae","activeElement","body","documentElement","contains","useCaptureOnOpen","open","prevRef","useRef","wasOpenRef","current","restoreLater","insideRef","restore","restore2","_ref","isConnected","focus","preventScroll","focusVisible","wasKeyboardFocus","requestAnimationFrame","setTimeout","useEffect","frameRef","frame","addEventListener"
|
|
1
|
+
{"version":3,"names":["__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","focusManagement_exports","useReturnFocusOnClose","useSheetModalFocus","module","exports","import_react","require","import_tamagui","import_theme","FOCUSABLE","canUseDom","canUseDom2","isWeb","document","focusIsDropped","insideEl","ae","activeElement","body","documentElement","contains","useCaptureOnOpen","open","prevRef","useRef","wasOpenRef","generationRef","current","restoreLater","insideRef","skipReturnFocusRef","generation","restore","restore2","_ref","isConnected","focus","preventScroll","focusVisible","wasKeyboardFocus","requestAnimationFrame","setTimeout","useEffect","frameRef","frame","addEventListener"],"sources":["../../../src/shared/focusManagement.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
const nativeChoiceRole = "button";
|
|
2
|
+
function composeA11yName(groupName, ownName) {
|
|
3
|
+
const group = groupName?.trim();
|
|
4
|
+
return group ? `${group}, ${ownName}` : ownName;
|
|
5
|
+
}
|
|
6
|
+
function choiceItemA11y({
|
|
7
|
+
name,
|
|
8
|
+
selected,
|
|
9
|
+
disabled,
|
|
10
|
+
hint
|
|
11
|
+
}) {
|
|
12
|
+
return {
|
|
13
|
+
accessible: true,
|
|
14
|
+
role: nativeChoiceRole,
|
|
15
|
+
accessibilityRole: nativeChoiceRole,
|
|
16
|
+
accessibilityLabel: name,
|
|
17
|
+
// `selected` is what a reader announces for a segment, `checked` what it
|
|
18
|
+
// announces for a radio; the iOS tree surfaces them as `selected: true`
|
|
19
|
+
// and `value: "checked"`. Both are set so one shape serves both controls.
|
|
20
|
+
accessibilityState: {
|
|
21
|
+
disabled,
|
|
22
|
+
selected,
|
|
23
|
+
checked: selected
|
|
24
|
+
},
|
|
25
|
+
...(hint ? {
|
|
26
|
+
accessibilityHint: hint
|
|
27
|
+
} : void 0)
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
export { choiceItemA11y, composeA11yName };
|
|
31
|
+
//# sourceMappingURL=nativeA11y.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["nativeChoiceRole","composeA11yName","groupName","ownName","group","trim","choiceItemA11y","name","selected","disabled","hint","accessible","role","accessibilityRole","accessibilityLabel","accessibilityState","checked","accessibilityHint"],"sources":["../../../src/shared/nativeA11y.ts"],"sourcesContent":[null],"mappings":"AAiCA,MAAMA,gBAAA,GAAmB;AAiBlB,SAASC,gBAAgBC,SAAA,EAA+BC,OAAA,EAAyB;EACtF,MAAMC,KAAA,GAAQF,SAAA,EAAWG,IAAA,CAAK;EAC9B,OAAOD,KAAA,GAAQ,GAAGA,KAAK,KAAKD,OAAO,KAAKA,OAAA;AAC1C;AAEO,SAASG,eAAe;EAC7BC,IAAA;EACAC,QAAA;EACAC,QAAA;EACAC;AACF,GAOoB;EAClB,OAAO;IACLC,UAAA,EAAY;IACZC,IAAA,EAAMZ,gBAAA;IACNa,iBAAA,EAAmBb,gBAAA;IACnBc,kBAAA,EAAoBP,IAAA;IAAA;IAAA;IAAA;IAIpBQ,kBAAA,EAAoB;MAAEN,QAAA;MAAUD,QAAA;MAAUQ,OAAA,EAASR;IAAS;IAC5D,IAAIE,IAAA,GAAO;MAAEO,iBAAA,EAAmBP;IAAK,IAAI;EAC3C;AACF","ignoreList":[]}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all) __defProp(target, name, {
|
|
9
|
+
get: all[name],
|
|
10
|
+
enumerable: true
|
|
11
|
+
});
|
|
12
|
+
};
|
|
13
|
+
var __copyProps = (to, from, except, desc) => {
|
|
14
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
15
|
+
for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
16
|
+
get: () => from[key],
|
|
17
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
return to;
|
|
21
|
+
};
|
|
22
|
+
var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
|
|
23
|
+
value: true
|
|
24
|
+
}), mod);
|
|
25
|
+
var nativeA11y_exports = {};
|
|
26
|
+
__export(nativeA11y_exports, {
|
|
27
|
+
choiceItemA11y: () => choiceItemA11y,
|
|
28
|
+
composeA11yName: () => composeA11yName
|
|
29
|
+
});
|
|
30
|
+
module.exports = __toCommonJS(nativeA11y_exports);
|
|
31
|
+
var nativeChoiceRole = "button";
|
|
32
|
+
function composeA11yName(groupName, ownName) {
|
|
33
|
+
var group = groupName === null || groupName === void 0 ? void 0 : groupName.trim();
|
|
34
|
+
return group ? `${group}, ${ownName}` : ownName;
|
|
35
|
+
}
|
|
36
|
+
function choiceItemA11y(param) {
|
|
37
|
+
var {
|
|
38
|
+
name,
|
|
39
|
+
selected,
|
|
40
|
+
disabled,
|
|
41
|
+
hint
|
|
42
|
+
} = param;
|
|
43
|
+
return {
|
|
44
|
+
accessible: true,
|
|
45
|
+
role: nativeChoiceRole,
|
|
46
|
+
accessibilityRole: nativeChoiceRole,
|
|
47
|
+
accessibilityLabel: name,
|
|
48
|
+
// `selected` is what a reader announces for a segment, `checked` what it
|
|
49
|
+
// announces for a radio; the iOS tree surfaces them as `selected: true`
|
|
50
|
+
// and `value: "checked"`. Both are set so one shape serves both controls.
|
|
51
|
+
accessibilityState: {
|
|
52
|
+
disabled,
|
|
53
|
+
selected,
|
|
54
|
+
checked: selected
|
|
55
|
+
},
|
|
56
|
+
...(hint ? {
|
|
57
|
+
accessibilityHint: hint
|
|
58
|
+
} : void 0)
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=nativeA11y.native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","nativeA11y_exports","choiceItemA11y","composeA11yName"],"sources":["../../../src/shared/nativeA11y.ts"],"sourcesContent":[null],"mappings":"AAiCA,YAAM;;AAiBC,IAAAA,SAAS,GAAAC,MAAA,CAAAC,cAA+C;AAC7D,IAAAC,gBAAc,GAAAF,MAAW,CAAAG,wBAAK;AAC9B,IAAAC,iBAAkB,GAAAJ,MAAU,CAAAK,mBAAY;AAC1C,IAAAC,YAAA,GAAAN,MAAA,CAAAO,SAAA,CAAAC,cAAA;AAEO,IAAAC,QAAS,GAAAA,CAAAC,MAAA,EAAeC,GAAA;EAC7B,SAAAC,IAAA,IAAAD,GAAA,EACAZ,SAAA,CAAAW,MAAA,EAAAE,IAAA;IAAAC,GAAA,EAAAF,GAAA,CAAAC,IAAA;IAAAE,UAAA;EAAA;AAAA;AACA,IACAC,WAAA,GAAAA,CAAAC,EAAA,EAAAC,IAAA,EAAAC,MAAA,EAAAC,IAAA;EACF,IAOoBF,IAAA,WAAAA,IAAA,wBAAAA,IAAA;IAClB,KAAO,IAAAG,GAAA,IAAAhB,iBAAA,CAAAa,IAAA,GACL,KAAAX,YAAY,CAAAe,IAAA,CAAAL,EAAA,EAAAI,GAAA,KAAAA,GAAA,KAAAF,MAAA,EACZnB,SAAM,CAAAiB,EAAA,EAAAI,GAAA;MAAAP,GAAA,EAAAA,CAAA,KAAAI,IAAA,CAAAG,GAAA;MAAAN,UAAA,IAAAK,IAAA,GAAAjB,gBAAA,CAAAe,IAAA,EAAAG,GAAA,MAAAD,IAAA,CAAAL;IAAA;EAAA;EACa,OACnBE,EAAA;AAAoB;AAAA,IAAAM,YAAA,GAAAC,GAAA,IAAAR,WAAA,CAAAhB,SAAA;EAAAyB,KAAA;AAAA,IAAAD,GAAA;AAAA,IAAAE,kBAAA;AAAAhB,QAIpB,CAAAgB,kBAAsB;EAAsCC,cAC/C,EAAAA,CAAA,KAAAA,cAAmB;EAClCC,eAAA,EAAAA,CAAA,KAAAA;AACF","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@multiplatform.one/forms",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.10.0",
|
|
4
4
|
"description": "Cross-platform form components with URL state management",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"cross-platform",
|
|
@@ -64,15 +64,17 @@
|
|
|
64
64
|
"@tamagui/roving-focus": "2.7.6",
|
|
65
65
|
"@tamagui/web": "2.7.6",
|
|
66
66
|
"@tanstack/react-form": "^1.29.1",
|
|
67
|
+
"@tanstack/react-store": "0.9.2",
|
|
67
68
|
"expo-camera": "~55.0.18",
|
|
68
69
|
"expo-linear-gradient": "~55.0.13",
|
|
69
70
|
"html5-qrcode": "^2.3.8",
|
|
70
71
|
"perfect-freehand": "^1.2.3",
|
|
71
72
|
"react-native-svg": "15.15.4",
|
|
72
73
|
"tamagui": "2.7.6",
|
|
73
|
-
"@multiplatform.one/
|
|
74
|
-
"@multiplatform.one/
|
|
75
|
-
"@multiplatform.one/
|
|
74
|
+
"@multiplatform.one/platform": "7.10.0",
|
|
75
|
+
"@multiplatform.one/theme": "7.10.0",
|
|
76
|
+
"@multiplatform.one/table-primitives": "7.10.0",
|
|
77
|
+
"@multiplatform.one/router": "7.10.0"
|
|
76
78
|
},
|
|
77
79
|
"devDependencies": {
|
|
78
80
|
"@tamagui/build": "2.7.6",
|
|
@@ -94,9 +96,9 @@
|
|
|
94
96
|
"react-i18next": "^16.6.6",
|
|
95
97
|
"react-native-web": "^0.21.2",
|
|
96
98
|
"vitest": "^4.1.5",
|
|
97
|
-
"@multiplatform.one/config": "7.
|
|
98
|
-
"@multiplatform.one/
|
|
99
|
-
"@multiplatform.one/
|
|
99
|
+
"@multiplatform.one/config": "7.10.0",
|
|
100
|
+
"@multiplatform.one/test-utils": "7.10.0",
|
|
101
|
+
"@multiplatform.one/storybook": "7.10.0"
|
|
100
102
|
},
|
|
101
103
|
"peerDependencies": {
|
|
102
104
|
"@react-native-community/datetimepicker": ">=8.0.1",
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @vitest-environment jsdom
|
|
3
|
+
*
|
|
4
|
+
* MPO-125: the `fontWeight` knob must reach the Button LABEL. A literal
|
|
5
|
+
* `fontWeight="400"` sat after the `knobProps.body` spread and pinned the
|
|
6
|
+
* label at 400 in both schemes, while Input and Select moved to 700 off the
|
|
7
|
+
* same knob. `docs/design/knob-laws.md` § Family rules already says
|
|
8
|
+
* `button | ... | fonts honour`, so the render was the thing that was wrong.
|
|
9
|
+
*
|
|
10
|
+
* The weight is read off the TEXT NODE, not the frame — the frame reported
|
|
11
|
+
* 400 either way, which is how the defect survived. jsdom cannot cascade
|
|
12
|
+
* Tamagui CSS, so the rendered value is the atomic class the text node emits
|
|
13
|
+
* (`_fow-700`); it exists only when the prop survived the merge, which is the
|
|
14
|
+
* thing under test. Same measurement Button.labelInk.spec.tsx uses.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import { renderWithProviders } from "@multiplatform.one/test-utils";
|
|
18
|
+
import { Preset } from "@multiplatform.one/theme";
|
|
19
|
+
import { cleanup, screen } from "@testing-library/react";
|
|
20
|
+
import { Theme } from "tamagui";
|
|
21
|
+
import { afterEach, describe, expect, it } from "vitest";
|
|
22
|
+
import { Button } from "./index";
|
|
23
|
+
|
|
24
|
+
afterEach(cleanup);
|
|
25
|
+
|
|
26
|
+
const SCHEMES = ["light", "dark"] as const;
|
|
27
|
+
|
|
28
|
+
function inkWeight(el: HTMLElement): string {
|
|
29
|
+
const inline = el.style.fontWeight;
|
|
30
|
+
if (inline) return String(inline);
|
|
31
|
+
for (const cls of String(el.className ?? "").split(/\s+/)) {
|
|
32
|
+
const match = cls.match(/^_fow-(\d+)$/);
|
|
33
|
+
if (match) return match[1];
|
|
34
|
+
}
|
|
35
|
+
return "";
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function labelNode(
|
|
39
|
+
fontWeight: "regular" | "bold",
|
|
40
|
+
scheme: (typeof SCHEMES)[number],
|
|
41
|
+
label: string,
|
|
42
|
+
): HTMLElement {
|
|
43
|
+
renderWithProviders(
|
|
44
|
+
<Theme name={scheme}>
|
|
45
|
+
<Preset overrides={{ fontWeight }}>
|
|
46
|
+
<Button>{label}</Button>
|
|
47
|
+
</Preset>
|
|
48
|
+
</Theme>,
|
|
49
|
+
);
|
|
50
|
+
const node = screen.getByText(label) as HTMLElement;
|
|
51
|
+
expect(node.tagName).not.toBe("BUTTON");
|
|
52
|
+
return node;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
describe("Button MPO-125 fontWeight knob", () => {
|
|
56
|
+
it.each(SCHEMES)("%s: bold takes the label to 700", (scheme) => {
|
|
57
|
+
const node = labelNode("bold", scheme, `bold-${scheme}`);
|
|
58
|
+
expect(inkWeight(node)).toBe("700");
|
|
59
|
+
expect(node.className).not.toMatch(/_fow-400\b/);
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
it.each(SCHEMES)("%s: regular keeps the label at 400", (scheme) => {
|
|
63
|
+
const node = labelNode("regular", scheme, `regular-${scheme}`);
|
|
64
|
+
expect(inkWeight(node)).toBe("400");
|
|
65
|
+
expect(node.className).not.toMatch(/_fow-700\b/);
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
it.each(SCHEMES)("%s: the size variant never leaks 500/600 at either stop", (scheme) => {
|
|
69
|
+
for (const stop of ["regular", "bold"] as const) {
|
|
70
|
+
const node = labelNode(stop, scheme, `leak-${stop}-${scheme}`);
|
|
71
|
+
expect(node.className).not.toMatch(/_fow-500\b/);
|
|
72
|
+
expect(node.className).not.toMatch(/_fow-600\b/);
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
});
|
|
@@ -62,9 +62,8 @@ function labelNode(text: string): HTMLElement {
|
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
/**
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
* failure prints is the number the verdict used.
|
|
65
|
+
* Use the canonical unrounded measurement so a below-floor pair cannot
|
|
66
|
+
* pass through display rounding.
|
|
68
67
|
*/
|
|
69
68
|
function pageRatio(ink: string, ground: string, label: string): number {
|
|
70
69
|
return measureContrast({ foreground: ink, background: ground, label }).ratio;
|
|
@@ -159,21 +158,22 @@ describe("Button MPO-40 outlined intent label ink", () => {
|
|
|
159
158
|
}
|
|
160
159
|
});
|
|
161
160
|
|
|
162
|
-
//
|
|
161
|
+
// CLOSED — MPO-40's secondary finding, fixed by the palette step.
|
|
163
162
|
//
|
|
164
163
|
// Fixing the plumbing (the arm above) was necessary, not sufficient. On
|
|
165
164
|
// $color2 — the surface every gallery board is shot on — light warning
|
|
166
|
-
// and success $color11
|
|
167
|
-
// the numbers button-anatomy
|
|
168
|
-
//
|
|
169
|
-
//
|
|
170
|
-
// the Button. colorRules.ts pins the same warning miss on the intent's
|
|
171
|
-
// own color1 (#fcfcf7, 4.44:1); this pins it on the page ground.
|
|
165
|
+
// and success $color11 sat UNDER mpo's own floor at 4.34 and 4.48, and
|
|
166
|
+
// those were exactly the numbers button-anatomy printed for its CONTRACT
|
|
167
|
+
// row. This block used to assert the miss, and said in as many words that
|
|
168
|
+
// stepping the palette should break it rather than be re-baselined away.
|
|
172
169
|
//
|
|
173
|
-
//
|
|
174
|
-
//
|
|
175
|
-
//
|
|
176
|
-
|
|
170
|
+
// The palette stepped: `intentInkFloor` in theme/createThemes.ts darkens
|
|
171
|
+
// light yellow-11 (#9e6c00 -> #996900) and green-11 (#218358 -> #1c8257)
|
|
172
|
+
// by the smallest hue-holding amount that clears the floor here. So the
|
|
173
|
+
// assertion is inverted rather than deleted — the ground and the exact
|
|
174
|
+
// ratios stay pinned, because $color2 is the STRICTEST base surface and a
|
|
175
|
+
// future re-lightening has to fail somewhere loud.
|
|
176
|
+
it("light warning/success $color11 now clear 4.5:1 on the $color2 page surface", () => {
|
|
177
177
|
const ground = houseThemes.light.color2;
|
|
178
178
|
const measured = Object.fromEntries(
|
|
179
179
|
INTENTS.map((intent): [string, number] => [
|
|
@@ -187,10 +187,13 @@ describe("Button MPO-40 outlined intent label ink", () => {
|
|
|
187
187
|
);
|
|
188
188
|
expect(measured, `light.color2 is ${ground}`).toEqual({
|
|
189
189
|
error: 4.95,
|
|
190
|
-
warning: 4.
|
|
191
|
-
success: 4.
|
|
190
|
+
warning: 4.56,
|
|
191
|
+
success: 4.55,
|
|
192
192
|
});
|
|
193
|
-
|
|
194
|
-
|
|
193
|
+
for (const intent of INTENTS) {
|
|
194
|
+
expect(measured[intent], `light_${intent} on light.color2`).toBeGreaterThanOrEqual(
|
|
195
|
+
aaTextContrastRatio,
|
|
196
|
+
);
|
|
197
|
+
}
|
|
195
198
|
});
|
|
196
199
|
});
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @vitest-environment jsdom
|
|
3
|
+
*
|
|
4
|
+
* MPO-91: the forms Button's outlined chrome cannot be requested through a
|
|
5
|
+
* channel the component ignores.
|
|
6
|
+
*
|
|
7
|
+
* `ButtonFrame` is `styled(View)` and declares only an `outlined` BOOLEAN.
|
|
8
|
+
* `variant="outlined"` was never read, but `ButtonProps` inherited it from
|
|
9
|
+
* `TamaguiButtonProps`, so 75 call sites across 29 files typechecked, rendered
|
|
10
|
+
* FILLED, and said nothing. The type now Omits `variant`, and this spec pins
|
|
11
|
+
* both halves of that: the type refuses it (checked by `tsgo --noEmit`), and
|
|
12
|
+
* the runtime genuinely ignores it, so the refusal is honest rather than
|
|
13
|
+
* cosmetic.
|
|
14
|
+
*
|
|
15
|
+
* jsdom cannot cascade Tamagui CSS — assertions read the atomic border-color
|
|
16
|
+
* classes the FRAME emits, the same idiom as Button.filledBorder.spec.tsx.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
import { renderWithProviders } from "@multiplatform.one/test-utils";
|
|
20
|
+
import { cleanup, screen } from "@testing-library/react";
|
|
21
|
+
import { afterEach, describe, expect, it } from "vitest";
|
|
22
|
+
import { Button } from "./index";
|
|
23
|
+
|
|
24
|
+
afterEach(cleanup);
|
|
25
|
+
|
|
26
|
+
function frame(): HTMLElement {
|
|
27
|
+
return screen.getByRole("button");
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
describe("Button outlined channel (MPO-91)", () => {
|
|
31
|
+
it("the outlined boolean is the channel, and it paints $borderColor", () => {
|
|
32
|
+
renderWithProviders(<Button outlined>Outlined</Button>);
|
|
33
|
+
expect(frame().className).toMatch(/_btc-borderColor\b/);
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
it("the type refuses variant, so a dead pass cannot come back silently", () => {
|
|
37
|
+
// THE GUARD. If someone re-adds `variant` to ButtonProps this stops being
|
|
38
|
+
// an error and `tsgo --noEmit` fails on the unused directive — which is
|
|
39
|
+
// the point: the failure is loud either way.
|
|
40
|
+
// @ts-expect-error MPO-91: `variant` is Omitted from ButtonProps on purpose.
|
|
41
|
+
renderWithProviders(<Button variant="outlined">Refused</Button>);
|
|
42
|
+
// ...and the refusal is honest: it really does render filled.
|
|
43
|
+
expect(frame().className).toMatch(/_btc-transparent\b/);
|
|
44
|
+
expect(frame().className).not.toMatch(/_btc-borderColor\b/);
|
|
45
|
+
});
|
|
46
|
+
});
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
* MPO-46 AC-1: the painted Button, not the recipe source, matches the
|
|
5
5
|
* measured Tamagui v5 table at $2/$3/$4/$6. Radius used to sit on the
|
|
6
6
|
* borderRadius knob (flat 9px); it must step with the size token, and
|
|
7
|
-
* gap
|
|
7
|
+
* default gap matches that table. Corner shape overrides preserve the
|
|
8
|
+
* internal spacing rather than jamming or separating the icon and label.
|
|
8
9
|
*/
|
|
9
10
|
|
|
10
11
|
import { renderWithProviders } from "@multiplatform.one/test-utils";
|
|
@@ -106,7 +107,7 @@ describe("MPO-46 painted Button size ladder", () => {
|
|
|
106
107
|
}
|
|
107
108
|
});
|
|
108
109
|
|
|
109
|
-
it("
|
|
110
|
+
it("corner overrides preserve the measured internal gap", () => {
|
|
110
111
|
for (const [stop, px] of Object.entries(KNOB_STOPS) as [keyof typeof KNOB_STOPS, number][]) {
|
|
111
112
|
renderWithProviders(
|
|
112
113
|
<Preset overrides={{ borderRadius: stop }}>
|
|
@@ -117,7 +118,7 @@ describe("MPO-46 painted Button size ladder", () => {
|
|
|
117
118
|
);
|
|
118
119
|
const frame = screen.getByRole("button");
|
|
119
120
|
expect(radiusPx(frame), `${stop} radius`).toBe(px);
|
|
120
|
-
expect(gapPx(frame), `${stop} gap`).toBe(
|
|
121
|
+
expect(gapPx(frame), `${stop} gap`).toBe(MEASURED.$4.radius);
|
|
121
122
|
cleanup();
|
|
122
123
|
}
|
|
123
124
|
});
|
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
} from "@multiplatform.one/theme";
|
|
9
9
|
import { Button as TamaguiButton, Paragraph, XStack, YStack, useTheme } from "tamagui";
|
|
10
10
|
import { Button } from "./index";
|
|
11
|
+
import { useState } from "react";
|
|
11
12
|
|
|
12
13
|
const pressed = (name: string) => () => action(name)();
|
|
13
14
|
|
|
@@ -44,6 +45,25 @@ const meta: Meta<typeof Button> = {
|
|
|
44
45
|
export default meta;
|
|
45
46
|
type Story = StoryObj<typeof Button>;
|
|
46
47
|
|
|
48
|
+
function DestructiveContrastExample({ disabled = false }: { disabled?: boolean }) {
|
|
49
|
+
const [presses, setPresses] = useState(0);
|
|
50
|
+
return (
|
|
51
|
+
<YStack data-lc-clicks={presses}>
|
|
52
|
+
<Button error disabled={disabled} onPress={() => setPresses((value) => value + 1)}>
|
|
53
|
+
Delete
|
|
54
|
+
</Button>
|
|
55
|
+
</YStack>
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export const DestructiveEnabled: Story = {
|
|
60
|
+
render: () => <DestructiveContrastExample />,
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
export const DestructiveDisabled: Story = {
|
|
64
|
+
render: () => <DestructiveContrastExample disabled />,
|
|
65
|
+
};
|
|
66
|
+
|
|
47
67
|
export const Basic: Story = {
|
|
48
68
|
name: "Main",
|
|
49
69
|
args: {
|
package/src/Button/index.tsx
CHANGED
|
@@ -56,8 +56,8 @@ import { useControlGrouped } from "../shared/groupContext";
|
|
|
56
56
|
* Coordinated size recipe (Polaris slim/medium/large, Primer s/m/l, Linear
|
|
57
57
|
* 28/32/40, Spectrum S/M, M3 XS/S). Height, pad, type, icon, gap and radius
|
|
58
58
|
* step together from the size table. The borderRadius knob is an override
|
|
59
|
-
*
|
|
60
|
-
* Density
|
|
59
|
+
* of painted corners only (`resolveControlRadius`); internal gap keeps the
|
|
60
|
+
* icon and label grouped. Density selects the same-height compact family.
|
|
61
61
|
*
|
|
62
62
|
* GENERATED (LC-75 / LC-80): Button consumes `recipeFamilies.control` — the
|
|
63
63
|
* handwritten mirror table this file used to carry drifted (md font 13 vs the
|
|
@@ -239,7 +239,29 @@ export const ButtonFrame = styled(View, {
|
|
|
239
239
|
},
|
|
240
240
|
});
|
|
241
241
|
|
|
242
|
-
|
|
242
|
+
/**
|
|
243
|
+
* MPO-91: `variant` is Omitted, and that Omit IS the guard.
|
|
244
|
+
*
|
|
245
|
+
* `ButtonFrame` is `styled(View)` and declares only an `outlined` BOOLEAN, so
|
|
246
|
+
* `variant="outlined"` was never read — it landed on the frame as an unread
|
|
247
|
+
* prop and the button rendered FILLED. Because `TamaguiButtonProps` carries
|
|
248
|
+
* `variant`, the inherited type advertised a channel this component ignores,
|
|
249
|
+
* so 75 call sites across 29 files typechecked, rendered wrong, and said
|
|
250
|
+
* nothing. Declaring the prop and dropping it on the floor is the lying API
|
|
251
|
+
* MPO-81 refused to ship.
|
|
252
|
+
*
|
|
253
|
+
* Omitting it turns every one of those call sites into a compile error instead
|
|
254
|
+
* of a silent no-op, which is what stops the prop coming back. The house
|
|
255
|
+
* channel is the `outlined` boolean.
|
|
256
|
+
*
|
|
257
|
+
* `@multiplatform.one/components`' Button still accepts `variant` and maps it
|
|
258
|
+
* onto `outlined` — that shim is the documented raw-tamagui compat hatch, and
|
|
259
|
+
* it declares the prop itself rather than inheriting it from here.
|
|
260
|
+
*/
|
|
261
|
+
export interface ButtonProps extends Omit<
|
|
262
|
+
TamaguiButtonProps,
|
|
263
|
+
"form" | "icon" | "iconAfter" | "variant"
|
|
264
|
+
> {
|
|
243
265
|
action?: "submit" | "reset";
|
|
244
266
|
form?: AnyFormApi;
|
|
245
267
|
loading?: boolean;
|
|
@@ -523,9 +545,11 @@ export function Button({
|
|
|
523
545
|
// LC-40: on the washed disabled chrome the label leaves the on-fill
|
|
524
546
|
// foreground and pins to the lowest AA tier (keepLabel keeps >=4.5:1).
|
|
525
547
|
{...(isDisabled ? disabledState.textKnobProps : undefined)}
|
|
526
|
-
// Boards measure ink.weight on the TEXT NODE, never the frame.
|
|
527
|
-
//
|
|
528
|
-
|
|
548
|
+
// Boards measure ink.weight on the TEXT NODE, never the frame. The
|
|
549
|
+
// prop is restated after the spreads because SizableText's size
|
|
550
|
+
// variant otherwise leaks 500/600 over it (MPO-125: a literal 400
|
|
551
|
+
// here pinned the label and swallowed the fontWeight knob).
|
|
552
|
+
fontWeight={knobProps.body.fontWeight}
|
|
529
553
|
transition={knobProps.transition}
|
|
530
554
|
>
|
|
531
555
|
{label}
|
|
@@ -650,7 +674,6 @@ export function Button({
|
|
|
650
674
|
circular={!nested && isCircular ? true : undefined}
|
|
651
675
|
chromeless={selectedFill ? false : chromeless}
|
|
652
676
|
selected={selectedFill || undefined}
|
|
653
|
-
{...(outlined ? { variant: "outlined" as const } : undefined)}
|
|
654
677
|
{...(!isCircular || nested
|
|
655
678
|
? {
|
|
656
679
|
paddingHorizontal: padX,
|
package/src/Chip/Chip.spec.tsx
CHANGED
|
@@ -161,7 +161,9 @@ describe("Chip", () => {
|
|
|
161
161
|
|
|
162
162
|
it("selected chip renders a leading check when no icon is passed", () => {
|
|
163
163
|
const result = renderWithProviders(<Chip selected>On</Chip>);
|
|
164
|
-
|
|
164
|
+
const fill = result.container.querySelector("svg")?.getAttribute("fill");
|
|
165
|
+
expect(fill).toBeTruthy();
|
|
166
|
+
expect(fill?.startsWith("$")).toBe(false);
|
|
165
167
|
});
|
|
166
168
|
|
|
167
169
|
it("onPress fires from the chip body and does not fire dismiss", () => {
|
package/src/Chip/index.tsx
CHANGED
|
@@ -436,11 +436,7 @@ export function Chip({
|
|
|
436
436
|
? t("Remove {{label}}", { label: String(children) })
|
|
437
437
|
: t("Remove");
|
|
438
438
|
const leading =
|
|
439
|
-
icon !== undefined ?
|
|
440
|
-
icon
|
|
441
|
-
) : selected ? (
|
|
442
|
-
<CheckIcon size={iconSize} color={textColor as string} />
|
|
443
|
-
) : null;
|
|
439
|
+
icon !== undefined ? icon : selected ? <CheckIcon size={iconSize} color={glyphInk} /> : null;
|
|
444
440
|
|
|
445
441
|
const onBodyKeyDown = ((e: KeyboardEvent) => {
|
|
446
442
|
if ((e.key === "Enter" || e.key === " ") && onPress) {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { Meta, StoryObj } from "@storybook/react-native-web-vite";
|
|
2
|
-
import {
|
|
2
|
+
import { YStack } from "tamagui";
|
|
3
3
|
import { FieldGroup } from "./FieldGroup";
|
|
4
4
|
import { FormSection, FormSectionStack } from "./FormSection";
|
|
5
|
-
import {
|
|
5
|
+
import { Input } from "./fields/Input";
|
|
6
6
|
|
|
7
7
|
const meta: Meta<typeof FieldGroup> = {
|
|
8
8
|
title: "Forms/FieldGroup",
|
|
@@ -18,11 +18,7 @@ export default meta;
|
|
|
18
18
|
type Story = StoryObj<typeof FieldGroup>;
|
|
19
19
|
|
|
20
20
|
function Field({ id, label }: { id: string; label: string }) {
|
|
21
|
-
return
|
|
22
|
-
<FieldLayout id={id} label={label}>
|
|
23
|
-
<TamaguiInput id={id} placeholder={label} />
|
|
24
|
-
</FieldLayout>
|
|
25
|
-
);
|
|
21
|
+
return <Input id={id} label={label} placeholder={label} />;
|
|
26
22
|
}
|
|
27
23
|
|
|
28
24
|
export const Basic: Story = {
|