@studio-piot/native-ui 0.2.5 → 0.17.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/README.md +22 -18
- package/dist/components/Button/Button.d.ts +20 -4
- package/dist/components/Button/Button.d.ts.map +1 -1
- package/dist/components/Button/Button.js +34 -21
- package/dist/components/Button/Button.js.map +1 -1
- package/dist/components/Button/buttonAppearance.d.ts +20 -0
- package/dist/components/Button/buttonAppearance.d.ts.map +1 -0
- package/dist/components/Button/buttonAppearance.js +28 -0
- package/dist/components/Button/buttonAppearance.js.map +1 -0
- package/dist/components/Button/buttonThemeRoles.d.ts +6 -0
- package/dist/components/Button/buttonThemeRoles.d.ts.map +1 -0
- package/dist/components/Button/buttonThemeRoles.js +8 -0
- package/dist/components/Button/buttonThemeRoles.js.map +1 -0
- package/dist/components/Button/index.d.ts +3 -1
- package/dist/components/Button/index.d.ts.map +1 -1
- package/dist/components/Button/index.js +4 -1
- package/dist/components/Button/index.js.map +1 -1
- package/dist/components/Choice/Choice.d.ts +10 -0
- package/dist/components/Choice/Choice.d.ts.map +1 -0
- package/dist/components/Choice/Choice.js +66 -0
- package/dist/components/Choice/Choice.js.map +1 -0
- package/dist/components/Choice/choiceLayout.d.ts +23 -0
- package/dist/components/Choice/choiceLayout.d.ts.map +1 -0
- package/dist/components/Choice/choiceLayout.js +32 -0
- package/dist/components/Choice/choiceLayout.js.map +1 -0
- package/dist/components/Choice/choiceThemeRoles.d.ts +9 -0
- package/dist/components/Choice/choiceThemeRoles.d.ts.map +1 -0
- package/dist/components/Choice/choiceThemeRoles.js +11 -0
- package/dist/components/Choice/choiceThemeRoles.js.map +1 -0
- package/dist/components/Choice/index.d.ts +5 -0
- package/dist/components/Choice/index.d.ts.map +1 -0
- package/dist/components/Choice/index.js +10 -0
- package/dist/components/Choice/index.js.map +1 -0
- package/dist/components/Choice/types.d.ts +33 -0
- package/dist/components/Choice/types.d.ts.map +1 -0
- package/dist/components/Choice/types.js +3 -0
- package/dist/components/Choice/types.js.map +1 -0
- package/dist/components/ErrorBanner/ErrorBanner.d.ts +1 -1
- package/dist/components/ErrorBanner/ErrorBanner.d.ts.map +1 -1
- package/dist/components/ErrorBanner/ErrorBanner.js +19 -19
- package/dist/components/ErrorBanner/ErrorBanner.js.map +1 -1
- package/dist/components/ErrorBanner/errorBannerContext.d.ts +23 -3
- package/dist/components/ErrorBanner/errorBannerContext.d.ts.map +1 -1
- package/dist/components/ErrorBanner/errorBannerContext.js +9 -5
- package/dist/components/ErrorBanner/errorBannerContext.js.map +1 -1
- package/dist/components/ErrorBanner/errorBannerLayout.d.ts +18 -0
- package/dist/components/ErrorBanner/errorBannerLayout.d.ts.map +1 -0
- package/dist/components/ErrorBanner/errorBannerLayout.js +54 -0
- package/dist/components/ErrorBanner/errorBannerLayout.js.map +1 -0
- package/dist/components/ErrorBanner/icons.d.ts +7 -5
- package/dist/components/ErrorBanner/icons.d.ts.map +1 -1
- package/dist/components/ErrorBanner/icons.js +8 -4
- package/dist/components/ErrorBanner/icons.js.map +1 -1
- package/dist/components/ErrorBanner/index.d.ts +1 -1
- package/dist/components/ErrorBanner/index.d.ts.map +1 -1
- package/dist/components/ErrorBanner/index.js.map +1 -1
- package/dist/components/Form/Form.d.ts +9 -1
- package/dist/components/Form/Form.d.ts.map +1 -1
- package/dist/components/Form/Form.js +56 -78
- package/dist/components/Form/Form.js.map +1 -1
- package/dist/components/Form/FormCloseButton.d.ts +3 -1
- package/dist/components/Form/FormCloseButton.d.ts.map +1 -1
- package/dist/components/Form/FormCloseButton.js +5 -4
- package/dist/components/Form/FormCloseButton.js.map +1 -1
- package/dist/components/Form/FormErrorBanner.d.ts +15 -0
- package/dist/components/Form/FormErrorBanner.d.ts.map +1 -0
- package/dist/components/Form/FormErrorBanner.js +30 -0
- package/dist/components/Form/FormErrorBanner.js.map +1 -0
- package/dist/components/Form/FormSubmitFooter.d.ts +17 -0
- package/dist/components/Form/FormSubmitFooter.d.ts.map +1 -0
- package/dist/components/Form/FormSubmitFooter.js +32 -0
- package/dist/components/Form/FormSubmitFooter.js.map +1 -0
- package/dist/components/Form/formThemeRoles.d.ts +7 -0
- package/dist/components/Form/formThemeRoles.d.ts.map +1 -0
- package/dist/components/Form/formThemeRoles.js +9 -0
- package/dist/components/Form/formThemeRoles.js.map +1 -0
- package/dist/components/Form/index.d.ts +1 -0
- package/dist/components/Form/index.d.ts.map +1 -1
- package/dist/components/Form/index.js +3 -1
- package/dist/components/Form/index.js.map +1 -1
- package/dist/components/Form/types.d.ts +14 -10
- package/dist/components/Form/types.d.ts.map +1 -1
- package/dist/components/FormSheet/FormSheet.d.ts +10 -0
- package/dist/components/FormSheet/FormSheet.d.ts.map +1 -0
- package/dist/components/FormSheet/FormSheet.js +153 -0
- package/dist/components/FormSheet/FormSheet.js.map +1 -0
- package/dist/components/FormSheet/formSheetLayout.d.ts +32 -0
- package/dist/components/FormSheet/formSheetLayout.d.ts.map +1 -0
- package/dist/components/FormSheet/formSheetLayout.js +43 -0
- package/dist/components/FormSheet/formSheetLayout.js.map +1 -0
- package/dist/components/FormSheet/formSheetThemeRoles.d.ts +8 -0
- package/dist/components/FormSheet/formSheetThemeRoles.d.ts.map +1 -0
- package/dist/components/FormSheet/formSheetThemeRoles.js +10 -0
- package/dist/components/FormSheet/formSheetThemeRoles.js.map +1 -0
- package/dist/components/FormSheet/index.d.ts +5 -0
- package/dist/components/FormSheet/index.d.ts.map +1 -0
- package/dist/components/FormSheet/index.js +10 -0
- package/dist/components/FormSheet/index.js.map +1 -0
- package/dist/components/FormSheet/types.d.ts +64 -0
- package/dist/components/FormSheet/types.d.ts.map +1 -0
- package/dist/components/FormSheet/types.js +3 -0
- package/dist/components/FormSheet/types.js.map +1 -0
- package/dist/components/HeaderButton/HeaderCapsule.d.ts +4 -0
- package/dist/components/HeaderButton/HeaderCapsule.d.ts.map +1 -0
- package/dist/components/HeaderButton/HeaderCapsule.js +32 -0
- package/dist/components/HeaderButton/HeaderCapsule.js.map +1 -0
- package/dist/components/HeaderButton/HeaderGroup.d.ts +4 -0
- package/dist/components/HeaderButton/HeaderGroup.d.ts.map +1 -0
- package/dist/components/HeaderButton/HeaderGroup.js +23 -0
- package/dist/components/HeaderButton/HeaderGroup.js.map +1 -0
- package/dist/components/HeaderButton/HeaderIcon.d.ts +4 -0
- package/dist/components/HeaderButton/HeaderIcon.d.ts.map +1 -0
- package/dist/components/HeaderButton/HeaderIcon.js +28 -0
- package/dist/components/HeaderButton/HeaderIcon.js.map +1 -0
- package/dist/components/HeaderButton/headerButtonLayout.d.ts +21 -0
- package/dist/components/HeaderButton/headerButtonLayout.d.ts.map +1 -0
- package/dist/components/HeaderButton/headerButtonLayout.js +34 -0
- package/dist/components/HeaderButton/headerButtonLayout.js.map +1 -0
- package/dist/components/HeaderButton/headerButtonThemeRoles.d.ts +5 -0
- package/dist/components/HeaderButton/headerButtonThemeRoles.d.ts.map +1 -0
- package/dist/components/HeaderButton/headerButtonThemeRoles.js +7 -0
- package/dist/components/HeaderButton/headerButtonThemeRoles.js.map +1 -0
- package/dist/components/HeaderButton/index.d.ts +7 -0
- package/dist/components/HeaderButton/index.d.ts.map +1 -0
- package/dist/components/HeaderButton/index.js +14 -0
- package/dist/components/HeaderButton/index.js.map +1 -0
- package/dist/components/HeaderButton/types.d.ts +40 -0
- package/dist/components/HeaderButton/types.d.ts.map +1 -0
- package/dist/components/HeaderButton/types.js +3 -0
- package/dist/components/HeaderButton/types.js.map +1 -0
- package/dist/components/HeaderWash/HeaderWash.d.ts +10 -0
- package/dist/components/HeaderWash/HeaderWash.d.ts.map +1 -0
- package/dist/components/HeaderWash/HeaderWash.js +19 -0
- package/dist/components/HeaderWash/HeaderWash.js.map +1 -0
- package/dist/components/HeaderWash/headerWashGradient.d.ts +8 -0
- package/dist/components/HeaderWash/headerWashGradient.d.ts.map +1 -0
- package/dist/components/HeaderWash/headerWashGradient.js +21 -0
- package/dist/components/HeaderWash/headerWashGradient.js.map +1 -0
- package/dist/components/HeaderWash/index.d.ts +2 -0
- package/dist/components/HeaderWash/index.d.ts.map +1 -0
- package/dist/components/HeaderWash/index.js +6 -0
- package/dist/components/HeaderWash/index.js.map +1 -0
- package/dist/components/Page/Page.d.ts +13 -0
- package/dist/components/Page/Page.d.ts.map +1 -0
- package/dist/components/Page/Page.js +49 -0
- package/dist/components/Page/Page.js.map +1 -0
- package/dist/components/Page/PageBleed.d.ts +9 -0
- package/dist/components/Page/PageBleed.d.ts.map +1 -0
- package/dist/components/Page/PageBleed.js +12 -0
- package/dist/components/Page/PageBleed.js.map +1 -0
- package/dist/components/Page/index.d.ts +5 -0
- package/dist/components/Page/index.d.ts.map +1 -0
- package/dist/components/Page/index.js +10 -0
- package/dist/components/Page/index.js.map +1 -0
- package/dist/components/Page/pageContext.d.ts +4 -0
- package/dist/components/Page/pageContext.d.ts.map +1 -0
- package/dist/components/Page/pageContext.js +11 -0
- package/dist/components/Page/pageContext.js.map +1 -0
- package/dist/components/Page/pageInsets.d.ts +26 -0
- package/dist/components/Page/pageInsets.d.ts.map +1 -0
- package/dist/components/Page/pageInsets.js +37 -0
- package/dist/components/Page/pageInsets.js.map +1 -0
- package/dist/components/Page/pageLayout.d.ts +5 -0
- package/dist/components/Page/pageLayout.d.ts.map +1 -0
- package/dist/components/Page/pageLayout.js +8 -0
- package/dist/components/Page/pageLayout.js.map +1 -0
- package/dist/components/Page/pageThemeRoles.d.ts +5 -0
- package/dist/components/Page/pageThemeRoles.d.ts.map +1 -0
- package/dist/components/Page/pageThemeRoles.js +7 -0
- package/dist/components/Page/pageThemeRoles.js.map +1 -0
- package/dist/components/Page/types.d.ts +22 -0
- package/dist/components/Page/types.d.ts.map +1 -0
- package/dist/components/Page/types.js +3 -0
- package/dist/components/Page/types.js.map +1 -0
- package/dist/components/Select/Select.d.ts +1 -1
- package/dist/components/Select/Select.d.ts.map +1 -1
- package/dist/components/Select/Select.js +8 -9
- package/dist/components/Select/Select.js.map +1 -1
- package/dist/components/Select/selectThemeRoles.d.ts +2 -0
- package/dist/components/Select/selectThemeRoles.d.ts.map +1 -1
- package/dist/components/Select/selectThemeRoles.js +2 -0
- package/dist/components/Select/selectThemeRoles.js.map +1 -1
- package/dist/components/Select/types.d.ts +4 -0
- package/dist/components/Select/types.d.ts.map +1 -1
- package/dist/components/TabAccessoryButton/TabAccessoryButton.d.ts +8 -0
- package/dist/components/TabAccessoryButton/TabAccessoryButton.d.ts.map +1 -0
- package/dist/components/TabAccessoryButton/TabAccessoryButton.js +77 -0
- package/dist/components/TabAccessoryButton/TabAccessoryButton.js.map +1 -0
- package/dist/components/TabAccessoryButton/index.d.ts +5 -0
- package/dist/components/TabAccessoryButton/index.d.ts.map +1 -0
- package/dist/components/TabAccessoryButton/index.js +11 -0
- package/dist/components/TabAccessoryButton/index.js.map +1 -0
- package/dist/components/TabAccessoryButton/tabAccessoryLayout.d.ts +27 -0
- package/dist/components/TabAccessoryButton/tabAccessoryLayout.d.ts.map +1 -0
- package/dist/components/TabAccessoryButton/tabAccessoryLayout.js +38 -0
- package/dist/components/TabAccessoryButton/tabAccessoryLayout.js.map +1 -0
- package/dist/components/TabAccessoryButton/tabAccessoryThemeRoles.d.ts +14 -0
- package/dist/components/TabAccessoryButton/tabAccessoryThemeRoles.d.ts.map +1 -0
- package/dist/components/TabAccessoryButton/tabAccessoryThemeRoles.js +19 -0
- package/dist/components/TabAccessoryButton/tabAccessoryThemeRoles.js.map +1 -0
- package/dist/components/TabAccessoryButton/types.d.ts +27 -0
- package/dist/components/TabAccessoryButton/types.d.ts.map +1 -0
- package/dist/components/TabAccessoryButton/types.js +3 -0
- package/dist/components/TabAccessoryButton/types.js.map +1 -0
- package/dist/components/index.d.ts +9 -3
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +30 -1
- package/dist/components/index.js.map +1 -1
- package/dist/index.d.ts +11 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +34 -2
- package/dist/index.js.map +1 -1
- package/dist/layout/HeaderInsetProbe.d.ts +15 -0
- package/dist/layout/HeaderInsetProbe.d.ts.map +1 -0
- package/dist/layout/HeaderInsetProbe.js +28 -0
- package/dist/layout/HeaderInsetProbe.js.map +1 -0
- package/dist/layout/headerInset.d.ts +26 -0
- package/dist/layout/headerInset.d.ts.map +1 -0
- package/dist/layout/headerInset.js +29 -0
- package/dist/layout/headerInset.js.map +1 -0
- package/dist/layout/index.d.ts +1 -0
- package/dist/layout/index.d.ts.map +1 -1
- package/dist/layout/index.js +3 -1
- package/dist/layout/index.js.map +1 -1
- package/dist/layout/sheet.d.ts +3 -0
- package/dist/layout/sheet.d.ts.map +1 -0
- package/dist/layout/sheet.js +6 -0
- package/dist/layout/sheet.js.map +1 -0
- package/dist/theme/ThemeProvider.d.ts +4 -1
- package/dist/theme/ThemeProvider.d.ts.map +1 -1
- package/dist/theme/ThemeProvider.js +5 -2
- package/dist/theme/ThemeProvider.js.map +1 -1
- package/dist/theme/index.d.ts +2 -0
- package/dist/theme/index.d.ts.map +1 -1
- package/dist/theme/index.js +6 -1
- package/dist/theme/index.js.map +1 -1
- package/dist/theme/resolveThemeSpacing.d.ts +12 -0
- package/dist/theme/resolveThemeSpacing.d.ts.map +1 -0
- package/dist/theme/resolveThemeSpacing.js +14 -0
- package/dist/theme/resolveThemeSpacing.js.map +1 -0
- package/dist/theme/types.d.ts +2 -0
- package/dist/theme/types.d.ts.map +1 -1
- package/dist/theme/useThemeSpacing.d.ts +4 -0
- package/dist/theme/useThemeSpacing.d.ts.map +1 -0
- package/dist/theme/useThemeSpacing.js +11 -0
- package/dist/theme/useThemeSpacing.js.map +1 -0
- package/docs/components/button.md +92 -38
- package/docs/components/choice.md +111 -0
- package/docs/components/error-banner.md +46 -3
- package/docs/components/form-sheet.md +140 -0
- package/docs/components/form.md +80 -45
- package/docs/components/header-button.md +310 -0
- package/docs/components/header-wash.md +40 -0
- package/docs/components/page.md +183 -0
- package/docs/components/select.md +2 -2
- package/docs/components/tab-accessory-button.md +146 -0
- package/docs/specifications/Liquid Glass header buttons in Expo Router.md +327 -0
- package/package.json +1 -1
- package/src/components/Button/Button.tsx +82 -38
- package/src/components/Button/buttonAppearance.test.ts +44 -0
- package/src/components/Button/buttonAppearance.ts +38 -0
- package/src/components/Button/buttonThemeRoles.test.ts +10 -0
- package/src/components/Button/buttonThemeRoles.ts +6 -0
- package/src/components/Button/index.ts +12 -1
- package/src/components/Choice/Choice.tsx +120 -0
- package/src/components/Choice/choiceLayout.test.ts +49 -0
- package/src/components/Choice/choiceLayout.ts +34 -0
- package/src/components/Choice/choiceThemeRoles.test.ts +15 -0
- package/src/components/Choice/choiceThemeRoles.ts +9 -0
- package/src/components/Choice/index.ts +4 -0
- package/src/components/Choice/types.ts +33 -0
- package/src/components/ErrorBanner/ErrorBanner.tsx +32 -22
- package/src/components/ErrorBanner/errorBannerContext.tsx +31 -6
- package/src/components/ErrorBanner/errorBannerLayout.test.ts +49 -0
- package/src/components/ErrorBanner/errorBannerLayout.ts +59 -0
- package/src/components/ErrorBanner/icons.tsx +25 -6
- package/src/components/ErrorBanner/index.ts +1 -0
- package/src/components/Form/Form.tsx +77 -173
- package/src/components/Form/FormCloseButton.tsx +12 -4
- package/src/components/Form/FormErrorBanner.tsx +57 -0
- package/src/components/Form/FormSubmitFooter.tsx +70 -0
- package/src/components/Form/formThemeRoles.test.ts +13 -0
- package/src/components/Form/formThemeRoles.ts +7 -0
- package/src/components/Form/index.ts +1 -0
- package/src/components/Form/types.ts +14 -10
- package/src/components/FormSheet/FormSheet.tsx +279 -0
- package/src/components/FormSheet/formSheetLayout.test.ts +66 -0
- package/src/components/FormSheet/formSheetLayout.ts +55 -0
- package/src/components/FormSheet/formSheetThemeRoles.test.ts +14 -0
- package/src/components/FormSheet/formSheetThemeRoles.ts +8 -0
- package/src/components/FormSheet/index.ts +7 -0
- package/src/components/FormSheet/types.ts +66 -0
- package/src/components/HeaderButton/HeaderCapsule.tsx +63 -0
- package/src/components/HeaderButton/HeaderGroup.tsx +36 -0
- package/src/components/HeaderButton/HeaderIcon.tsx +56 -0
- package/src/components/HeaderButton/headerButtonLayout.test.ts +47 -0
- package/src/components/HeaderButton/headerButtonLayout.ts +36 -0
- package/src/components/HeaderButton/headerButtonThemeRoles.test.ts +9 -0
- package/src/components/HeaderButton/headerButtonThemeRoles.ts +5 -0
- package/src/components/HeaderButton/index.ts +14 -0
- package/src/components/HeaderButton/types.ts +40 -0
- package/src/components/HeaderWash/HeaderWash.tsx +20 -0
- package/src/components/HeaderWash/headerWashGradient.test.ts +22 -0
- package/src/components/{Form/withAlpha.ts → HeaderWash/headerWashGradient.ts} +9 -0
- package/src/components/HeaderWash/index.ts +1 -0
- package/src/components/Page/Page.tsx +80 -0
- package/src/components/Page/PageBleed.tsx +14 -0
- package/src/components/Page/index.ts +4 -0
- package/src/components/Page/pageContext.ts +8 -0
- package/src/components/Page/pageInsets.test.ts +73 -0
- package/src/components/Page/pageInsets.ts +52 -0
- package/src/components/Page/pageThemeRoles.test.ts +9 -0
- package/src/components/Page/pageThemeRoles.ts +5 -0
- package/src/components/Page/types.ts +26 -0
- package/src/components/Select/Select.tsx +11 -4
- package/src/components/Select/selectThemeRoles.test.ts +5 -0
- package/src/components/Select/selectThemeRoles.ts +2 -0
- package/src/components/Select/types.ts +4 -0
- package/src/components/TabAccessoryButton/TabAccessoryButton.tsx +150 -0
- package/src/components/TabAccessoryButton/index.ts +12 -0
- package/src/components/TabAccessoryButton/tabAccessoryLayout.test.ts +42 -0
- package/src/components/TabAccessoryButton/tabAccessoryLayout.ts +43 -0
- package/src/components/TabAccessoryButton/tabAccessoryThemeRoles.test.ts +28 -0
- package/src/components/TabAccessoryButton/tabAccessoryThemeRoles.ts +22 -0
- package/src/components/TabAccessoryButton/types.ts +27 -0
- package/src/components/index.ts +64 -2
- package/src/index.ts +61 -2
- package/src/layout/headerInset.test.ts +60 -0
- package/src/layout/headerInset.ts +41 -0
- package/src/layout/index.ts +1 -0
- package/src/layout/sheet.ts +2 -0
- package/src/theme/ThemeProvider.tsx +9 -1
- package/src/theme/index.ts +6 -0
- package/src/theme/resolveThemeSpacing.test.ts +29 -0
- package/src/theme/resolveThemeSpacing.ts +21 -0
- package/src/theme/types.ts +3 -0
- package/src/theme/useThemeSpacing.ts +8 -0
- package/src/components/Form/withAlpha.test.ts +0 -13
|
@@ -7,8 +7,9 @@ const react_native_1 = require("react-native");
|
|
|
7
7
|
const react_native_safe_area_context_1 = require("react-native-safe-area-context");
|
|
8
8
|
const buttonRadius_1 = require("../Button/buttonRadius");
|
|
9
9
|
const useResolvedFieldColor_1 = require("../Field/useResolvedFieldColor");
|
|
10
|
-
const
|
|
10
|
+
const useThemeSpacing_1 = require("../../theme/useThemeSpacing");
|
|
11
11
|
const errorBannerCopy_1 = require("./errorBannerCopy");
|
|
12
|
+
const errorBannerLayout_1 = require("./errorBannerLayout");
|
|
12
13
|
const errorBannerThemeRoles_1 = require("./errorBannerThemeRoles");
|
|
13
14
|
const icons_1 = require("./icons");
|
|
14
15
|
const BOTTOM_RADIUS = (0, buttonRadius_1.buttonRadiusValue)("xl");
|
|
@@ -17,7 +18,9 @@ const BOTTOM_RADIUS = (0, buttonRadius_1.buttonRadiusValue)("xl");
|
|
|
17
18
|
* exit animation can play. It is not tied to a form shell: pass `errors`,
|
|
18
19
|
* `onJump`, and `onDismiss`. `Form` does that by default.
|
|
19
20
|
*/
|
|
20
|
-
function ErrorBanner({ open, errors, onJump, onDismiss, onHeightChange, safeAreaTop, paddingHorizontal
|
|
21
|
+
function ErrorBanner({ open, errors, onJump, onDismiss, onHeightChange, safeAreaTop, paddingHorizontal: paddingHorizontalProp, backgroundColor: backgroundColorProp, textColor: textColorProp, secondaryColor: secondaryColorProp, dividerColor: dividerColorProp, accentColor: accentColorProp, }) {
|
|
22
|
+
const spacing = (0, useThemeSpacing_1.useThemeSpacing)();
|
|
23
|
+
const paddingHorizontal = paddingHorizontalProp ?? spacing.screen;
|
|
21
24
|
const insets = (0, react_native_safe_area_context_1.useSafeAreaInsets)();
|
|
22
25
|
const topInset = safeAreaTop ?? insets.top;
|
|
23
26
|
const backgroundColor = (0, useResolvedFieldColor_1.useResolvedFieldColor)(backgroundColorProp, errorBannerThemeRoles_1.ERROR_BANNER_THEME_ROLES.backgroundColor);
|
|
@@ -63,7 +66,7 @@ function ErrorBanner({ open, errors, onJump, onDismiss, onHeightChange, safeArea
|
|
|
63
66
|
setHeight((current) => (current === next ? current : next));
|
|
64
67
|
onHeightChange?.(next);
|
|
65
68
|
};
|
|
66
|
-
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [open ? (0, jsx_runtime_1.jsx)(react_native_1.StatusBar, { animated: true, barStyle:
|
|
69
|
+
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [open ? (0, jsx_runtime_1.jsx)(react_native_1.StatusBar, { animated: true, barStyle: (0, errorBannerLayout_1.errorBannerBarStyle)(backgroundColor) }) : null, (0, jsx_runtime_1.jsxs)(react_native_1.Animated.View, { accessibilityRole: "alert", accessibilityElementsHidden: !open, importantForAccessibility: open ? "auto" : "no-hide-descendants", onLayout: onLayout, pointerEvents: open ? "auto" : "none", style: [
|
|
67
70
|
styles.banner,
|
|
68
71
|
{
|
|
69
72
|
backgroundColor,
|
|
@@ -73,11 +76,11 @@ function ErrorBanner({ open, errors, onJump, onDismiss, onHeightChange, safeArea
|
|
|
73
76
|
borderBottomRightRadius: BOTTOM_RADIUS,
|
|
74
77
|
},
|
|
75
78
|
motion,
|
|
76
|
-
], children: [(0, jsx_runtime_1.jsxs)(react_native_1.View, { style: styles.header, children: [(0, jsx_runtime_1.jsx)(react_native_1.View, { accessibilityElementsHidden: true, importantForAccessibility: "no-hide-descendants", style: [styles.iconDisc, { backgroundColor: accentColor }], children: (0, jsx_runtime_1.jsx)(icons_1.Megaphone, { color: backgroundColor }) }), (0, jsx_runtime_1.jsx)(react_native_1.Text, { style: [styles.title, { color: textColor }], children: title }), (0, jsx_runtime_1.jsx)(react_native_1.Pressable, { accessibilityLabel: "Dismiss", accessibilityRole: "button", hitSlop: 12, onPress: onDismiss, children: (0, jsx_runtime_1.jsx)(
|
|
79
|
+
], children: [(0, jsx_runtime_1.jsxs)(react_native_1.View, { style: styles.header, children: [(0, jsx_runtime_1.jsx)(react_native_1.View, { accessibilityElementsHidden: true, importantForAccessibility: "no-hide-descendants", style: [styles.iconDisc, { backgroundColor: accentColor }], children: (0, jsx_runtime_1.jsx)(icons_1.Megaphone, { color: backgroundColor, size: errorBannerLayout_1.ERROR_BANNER_MEGAPHONE_SIZE }) }), (0, jsx_runtime_1.jsx)(react_native_1.Text, { style: [styles.title, { color: textColor }], children: title }), (0, jsx_runtime_1.jsx)(react_native_1.Pressable, { accessibilityLabel: "Dismiss", accessibilityRole: "button", hitSlop: 12, onPress: onDismiss, children: (0, jsx_runtime_1.jsx)(icons_1.Cross, { color: secondaryColor, size: errorBannerLayout_1.ERROR_BANNER_DISMISS_SIZE }) })] }), (0, jsx_runtime_1.jsx)(react_native_1.View, { style: styles.rows, children: errors.map((error) => ((0, jsx_runtime_1.jsxs)(react_native_1.Pressable, { accessibilityLabel: `${error.short}. Go to field.`, accessibilityRole: "button", onPress: () => onJump(error.field), style: ({ pressed }) => [
|
|
77
80
|
styles.row,
|
|
78
81
|
{ borderTopColor: dividerColor },
|
|
79
82
|
pressed && styles.pressed,
|
|
80
|
-
], children: [(0, jsx_runtime_1.jsx)(react_native_1.Text, { style: [styles.rowLabel, { color: textColor }], children: error.short }), (0, jsx_runtime_1.jsx)(react_native_1.View, { accessibilityElementsHidden: true, importantForAccessibility: "no-hide-descendants", children: (0, jsx_runtime_1.jsx)(icons_1.ArrowRight, { color: secondaryColor }) })] }, error.field))) })] })] }));
|
|
83
|
+
], children: [(0, jsx_runtime_1.jsx)(react_native_1.Text, { style: [styles.rowLabel, { color: textColor }], children: error.short }), (0, jsx_runtime_1.jsx)(react_native_1.View, { accessibilityElementsHidden: true, importantForAccessibility: "no-hide-descendants", children: (0, jsx_runtime_1.jsx)(icons_1.ArrowRight, { color: secondaryColor, size: errorBannerLayout_1.ERROR_BANNER_ARROW_SIZE }) })] }, error.field))) })] })] }));
|
|
81
84
|
}
|
|
82
85
|
const styles = react_native_1.StyleSheet.create({
|
|
83
86
|
banner: {
|
|
@@ -87,7 +90,7 @@ const styles = react_native_1.StyleSheet.create({
|
|
|
87
90
|
right: 0,
|
|
88
91
|
zIndex: 100,
|
|
89
92
|
paddingBottom: 10,
|
|
90
|
-
shadowColor: "#
|
|
93
|
+
shadowColor: "#000000",
|
|
91
94
|
shadowOpacity: 0.25,
|
|
92
95
|
shadowRadius: 12,
|
|
93
96
|
shadowOffset: { width: 0, height: 8 },
|
|
@@ -96,32 +99,29 @@ const styles = react_native_1.StyleSheet.create({
|
|
|
96
99
|
header: {
|
|
97
100
|
flexDirection: "row",
|
|
98
101
|
alignItems: "center",
|
|
99
|
-
gap:
|
|
102
|
+
gap: errorBannerLayout_1.ERROR_BANNER_HEADER_GAP,
|
|
100
103
|
},
|
|
101
104
|
iconDisc: {
|
|
102
|
-
width:
|
|
103
|
-
height:
|
|
104
|
-
borderRadius:
|
|
105
|
+
width: errorBannerLayout_1.ERROR_BANNER_DISC_SIZE,
|
|
106
|
+
height: errorBannerLayout_1.ERROR_BANNER_DISC_SIZE,
|
|
107
|
+
borderRadius: errorBannerLayout_1.ERROR_BANNER_DISC_SIZE / 2,
|
|
105
108
|
alignItems: "center",
|
|
106
109
|
justifyContent: "center",
|
|
107
110
|
},
|
|
108
111
|
title: {
|
|
109
112
|
flex: 1,
|
|
110
|
-
fontSize:
|
|
111
|
-
lineHeight:
|
|
113
|
+
fontSize: errorBannerLayout_1.ERROR_BANNER_FONT_SIZE,
|
|
114
|
+
lineHeight: errorBannerLayout_1.ERROR_BANNER_LINE_HEIGHT,
|
|
112
115
|
fontWeight: "600",
|
|
113
116
|
},
|
|
114
|
-
dismiss: {
|
|
115
|
-
fontSize: 15,
|
|
116
|
-
},
|
|
117
117
|
rows: {
|
|
118
118
|
marginTop: 6,
|
|
119
119
|
},
|
|
120
120
|
row: {
|
|
121
121
|
flexDirection: "row",
|
|
122
122
|
alignItems: "center",
|
|
123
|
-
minHeight:
|
|
124
|
-
marginLeft:
|
|
123
|
+
minHeight: errorBannerLayout_1.ERROR_BANNER_ROW_MIN_HEIGHT,
|
|
124
|
+
marginLeft: errorBannerLayout_1.ERROR_BANNER_ROW_INSET,
|
|
125
125
|
borderTopWidth: 1,
|
|
126
126
|
},
|
|
127
127
|
pressed: {
|
|
@@ -129,8 +129,8 @@ const styles = react_native_1.StyleSheet.create({
|
|
|
129
129
|
},
|
|
130
130
|
rowLabel: {
|
|
131
131
|
flex: 1,
|
|
132
|
-
fontSize:
|
|
133
|
-
lineHeight:
|
|
132
|
+
fontSize: errorBannerLayout_1.ERROR_BANNER_FONT_SIZE,
|
|
133
|
+
lineHeight: errorBannerLayout_1.ERROR_BANNER_LINE_HEIGHT,
|
|
134
134
|
},
|
|
135
135
|
});
|
|
136
136
|
//# sourceMappingURL=ErrorBanner.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ErrorBanner.js","sourceRoot":"","sources":["../../../src/components/ErrorBanner/ErrorBanner.tsx"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"ErrorBanner.js","sourceRoot":"","sources":["../../../src/components/ErrorBanner/ErrorBanner.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
import { type ReactNode, type RefObject } from "react";
|
|
2
|
-
import { View
|
|
2
|
+
import { View } from "react-native";
|
|
3
3
|
import type { FieldError } from "./types";
|
|
4
|
+
/** Anything that scrolls: a ScrollView, a KeyboardAwareScrollView, a BottomSheetScrollView. */
|
|
5
|
+
export type ErrorBannerScrollTarget = {
|
|
6
|
+
scrollTo(options: {
|
|
7
|
+
y: number;
|
|
8
|
+
animated?: boolean;
|
|
9
|
+
}): void;
|
|
10
|
+
};
|
|
4
11
|
export type ErrorBannerAnchor = {
|
|
5
12
|
view: View;
|
|
6
13
|
focus?: () => void;
|
|
@@ -21,12 +28,25 @@ export declare function useErrorBannerField(name: string | undefined, focus?: ()
|
|
|
21
28
|
viewRef: RefObject<View | null>;
|
|
22
29
|
listed: FieldError | undefined;
|
|
23
30
|
};
|
|
24
|
-
export declare function ErrorBannerProvider({ children, scrollRef, errors, onDismiss, bannerHeightRef, }: {
|
|
31
|
+
export declare function ErrorBannerProvider({ children, scrollRef, errors, onDismiss, bannerHeightRef, measureRef, onBeforeJump, scrollYForField, }: {
|
|
25
32
|
children: ReactNode;
|
|
26
|
-
scrollRef: RefObject<
|
|
33
|
+
scrollRef: RefObject<ErrorBannerScrollTarget | null>;
|
|
27
34
|
errors: readonly FieldError[];
|
|
28
35
|
onDismiss: () => void;
|
|
36
|
+
/** How far the banner covers the top of the scroll area. */
|
|
29
37
|
bannerHeightRef: RefObject<number>;
|
|
38
|
+
/**
|
|
39
|
+
* View that field positions are measured against: the scroll content's
|
|
40
|
+
* top. Defaults to `scrollRef`, which works for a plain ScrollView.
|
|
41
|
+
*/
|
|
42
|
+
measureRef?: RefObject<View | null>;
|
|
43
|
+
/** Runs before scrolling to a field, e.g. to expand a sheet. */
|
|
44
|
+
onBeforeJump?: () => void;
|
|
45
|
+
/**
|
|
46
|
+
* Scroll offset for a field at content y `fieldY`. Defaults to clearing
|
|
47
|
+
* `bannerHeightRef` from the top of the scroll area.
|
|
48
|
+
*/
|
|
49
|
+
scrollYForField?: (fieldY: number) => number;
|
|
30
50
|
}): import("react").JSX.Element;
|
|
31
51
|
export declare function ErrorBannerField({ name, children, }: {
|
|
32
52
|
name: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errorBannerContext.d.ts","sourceRoot":"","sources":["../../../src/components/ErrorBanner/errorBannerContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,IAAI,EAA2B,
|
|
1
|
+
{"version":3,"file":"errorBannerContext.d.ts","sourceRoot":"","sources":["../../../src/components/ErrorBanner/errorBannerContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,IAAI,EAA2B,MAAM,cAAc,CAAC;AAE7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C,+FAA+F;AAC/F,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,CAAC,OAAO,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;CAC5D,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;CACpB,CAAC;AAEF,KAAK,uBAAuB,GAAG;IAC7B,MAAM,EAAE,SAAS,UAAU,EAAE,CAAC;IAC9B,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAG,IAAI,KAAK,IAAI,CAAC;IACpE,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/B,CAAC;AAIF,wBAAgB,qBAAqB,IAAI,uBAAuB,GAAG,IAAI,CAEtE;AAED,wBAAgB,qBAAqB,IAAI,MAAM,IAAI,CAGlD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,KAAK,CAAC,EAAE,MAAM,IAAI;;;EA2BnB;AAED,wBAAgB,mBAAmB,CAAC,EAClC,QAAQ,EACR,SAAS,EACT,MAAM,EACN,SAAS,EACT,eAAe,EACf,UAAU,EACV,YAAY,EACZ,eAAe,GAChB,EAAE;IACD,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,EAAE,SAAS,CAAC,uBAAuB,GAAG,IAAI,CAAC,CAAC;IACrD,MAAM,EAAE,SAAS,UAAU,EAAE,CAAC;IAC9B,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,4DAA4D;IAC5D,eAAe,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IACnC;;;OAGG;IACH,UAAU,CAAC,EAAE,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IACpC,gEAAgE;IAChE,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B;;;OAGG;IACH,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;CAC9C,+BA4CA;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,SAAS,CAAC;CACrB,+BAOA"}
|
|
@@ -45,7 +45,7 @@ function useErrorBannerField(name, focus) {
|
|
|
45
45
|
: undefined;
|
|
46
46
|
return { viewRef, listed };
|
|
47
47
|
}
|
|
48
|
-
function ErrorBannerProvider({ children, scrollRef, errors, onDismiss, bannerHeightRef, }) {
|
|
48
|
+
function ErrorBannerProvider({ children, scrollRef, errors, onDismiss, bannerHeightRef, measureRef, onBeforeJump, scrollYForField, }) {
|
|
49
49
|
const anchors = (0, react_1.useRef)(new Map());
|
|
50
50
|
const register = (0, react_1.useCallback)((field, anchor) => {
|
|
51
51
|
if (!anchor) {
|
|
@@ -57,17 +57,21 @@ function ErrorBannerProvider({ children, scrollRef, errors, onDismiss, bannerHei
|
|
|
57
57
|
const jump = (0, react_1.useCallback)((field) => {
|
|
58
58
|
const anchor = anchors.current.get(field);
|
|
59
59
|
const scroll = scrollRef.current;
|
|
60
|
-
|
|
60
|
+
const relativeTo = measureRef?.current ?? scroll;
|
|
61
|
+
if (!anchor || !scroll || !relativeTo) {
|
|
61
62
|
return;
|
|
62
63
|
}
|
|
63
|
-
|
|
64
|
+
onBeforeJump?.();
|
|
65
|
+
anchor.view.measureLayout(relativeTo, (_x, y) => {
|
|
64
66
|
scroll.scrollTo({
|
|
65
|
-
y:
|
|
67
|
+
y: scrollYForField
|
|
68
|
+
? scrollYForField(y)
|
|
69
|
+
: (0, errorBannerCopy_1.fieldScrollY)(y, bannerHeightRef.current ?? 0),
|
|
66
70
|
animated: true,
|
|
67
71
|
});
|
|
68
72
|
anchor.focus?.();
|
|
69
73
|
}, () => undefined);
|
|
70
|
-
}, [bannerHeightRef, scrollRef]);
|
|
74
|
+
}, [bannerHeightRef, measureRef, onBeforeJump, scrollRef, scrollYForField]);
|
|
71
75
|
const value = (0, react_1.useMemo)(() => ({ errors, register, dismiss: onDismiss, jump }), [errors, jump, onDismiss, register]);
|
|
72
76
|
return ((0, jsx_runtime_1.jsx)(ErrorBannerContext.Provider, { value: value, children: children }));
|
|
73
77
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errorBannerContext.js","sourceRoot":"","sources":["../../../src/components/ErrorBanner/errorBannerContext.tsx"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"errorBannerContext.js","sourceRoot":"","sources":["../../../src/components/ErrorBanner/errorBannerContext.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/** Title and rows, matching the 17pt body text of Button, Field and Select. */
|
|
2
|
+
export declare const ERROR_BANNER_FONT_SIZE = 17;
|
|
3
|
+
export declare const ERROR_BANNER_LINE_HEIGHT = 22;
|
|
4
|
+
export declare const ERROR_BANNER_DISC_SIZE = 32;
|
|
5
|
+
export declare const ERROR_BANNER_MEGAPHONE_SIZE = 18;
|
|
6
|
+
export declare const ERROR_BANNER_ARROW_SIZE = 20;
|
|
7
|
+
export declare const ERROR_BANNER_DISMISS_SIZE = 18;
|
|
8
|
+
export declare const ERROR_BANNER_HEADER_GAP = 12;
|
|
9
|
+
export declare const ERROR_BANNER_ROW_MIN_HEIGHT = 44;
|
|
10
|
+
/** Rows start under the title, past the disc and gap. */
|
|
11
|
+
export declare const ERROR_BANNER_ROW_INSET: number;
|
|
12
|
+
export type ErrorBannerBarStyle = "light-content" | "dark-content" | "default";
|
|
13
|
+
/**
|
|
14
|
+
* Status bar text that stays readable over the banner fill: light text on a
|
|
15
|
+
* dark banner, dark text on a light one. Pure so it can be unit-tested.
|
|
16
|
+
*/
|
|
17
|
+
export declare function errorBannerBarStyle(backgroundColor: string): ErrorBannerBarStyle;
|
|
18
|
+
//# sourceMappingURL=errorBannerLayout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errorBannerLayout.d.ts","sourceRoot":"","sources":["../../../src/components/ErrorBanner/errorBannerLayout.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,eAAO,MAAM,sBAAsB,KAAK,CAAC;AACzC,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAC3C,eAAO,MAAM,sBAAsB,KAAK,CAAC;AACzC,eAAO,MAAM,2BAA2B,KAAK,CAAC;AAC9C,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAC1C,eAAO,MAAM,yBAAyB,KAAK,CAAC;AAC5C,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAC1C,eAAO,MAAM,2BAA2B,KAAK,CAAC;AAC9C,yDAAyD;AACzD,eAAO,MAAM,sBAAsB,QACe,CAAC;AAEnD,MAAM,MAAM,mBAAmB,GAAG,eAAe,GAAG,cAAc,GAAG,SAAS,CAAC;AA8B/E;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,eAAe,EAAE,MAAM,GAAG,mBAAmB,CAWhF"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ERROR_BANNER_ROW_INSET = exports.ERROR_BANNER_ROW_MIN_HEIGHT = exports.ERROR_BANNER_HEADER_GAP = exports.ERROR_BANNER_DISMISS_SIZE = exports.ERROR_BANNER_ARROW_SIZE = exports.ERROR_BANNER_MEGAPHONE_SIZE = exports.ERROR_BANNER_DISC_SIZE = exports.ERROR_BANNER_LINE_HEIGHT = exports.ERROR_BANNER_FONT_SIZE = void 0;
|
|
4
|
+
exports.errorBannerBarStyle = errorBannerBarStyle;
|
|
5
|
+
/** Title and rows, matching the 17pt body text of Button, Field and Select. */
|
|
6
|
+
exports.ERROR_BANNER_FONT_SIZE = 17;
|
|
7
|
+
exports.ERROR_BANNER_LINE_HEIGHT = 22;
|
|
8
|
+
exports.ERROR_BANNER_DISC_SIZE = 32;
|
|
9
|
+
exports.ERROR_BANNER_MEGAPHONE_SIZE = 18;
|
|
10
|
+
exports.ERROR_BANNER_ARROW_SIZE = 20;
|
|
11
|
+
exports.ERROR_BANNER_DISMISS_SIZE = 18;
|
|
12
|
+
exports.ERROR_BANNER_HEADER_GAP = 12;
|
|
13
|
+
exports.ERROR_BANNER_ROW_MIN_HEIGHT = 44;
|
|
14
|
+
/** Rows start under the title, past the disc and gap. */
|
|
15
|
+
exports.ERROR_BANNER_ROW_INSET = exports.ERROR_BANNER_DISC_SIZE + exports.ERROR_BANNER_HEADER_GAP;
|
|
16
|
+
function parseRgb(color) {
|
|
17
|
+
const value = color.trim();
|
|
18
|
+
const hex = /^#([0-9a-f]{3,8})$/i.exec(value)?.[1];
|
|
19
|
+
if (hex) {
|
|
20
|
+
const full = hex.length === 3 || hex.length === 4
|
|
21
|
+
? hex
|
|
22
|
+
.slice(0, 3)
|
|
23
|
+
.split("")
|
|
24
|
+
.map((c) => c + c)
|
|
25
|
+
.join("")
|
|
26
|
+
: hex.slice(0, 6);
|
|
27
|
+
if (full.length !== 6) {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
return [0, 2, 4].map((i) => parseInt(full.slice(i, i + 2), 16));
|
|
31
|
+
}
|
|
32
|
+
const rgb = /^rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)/i.exec(value);
|
|
33
|
+
if (rgb) {
|
|
34
|
+
return [Number(rgb[1]), Number(rgb[2]), Number(rgb[3])];
|
|
35
|
+
}
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Status bar text that stays readable over the banner fill: light text on a
|
|
40
|
+
* dark banner, dark text on a light one. Pure so it can be unit-tested.
|
|
41
|
+
*/
|
|
42
|
+
function errorBannerBarStyle(backgroundColor) {
|
|
43
|
+
const rgb = parseRgb(backgroundColor);
|
|
44
|
+
if (!rgb) {
|
|
45
|
+
return "default";
|
|
46
|
+
}
|
|
47
|
+
const [r, g, b] = rgb.map((c) => {
|
|
48
|
+
const s = c / 255;
|
|
49
|
+
return s <= 0.03928 ? s / 12.92 : ((s + 0.055) / 1.055) ** 2.4;
|
|
50
|
+
});
|
|
51
|
+
const luminance = 0.2126 * r + 0.7152 * g + 0.0722 * b;
|
|
52
|
+
return luminance > 0.179 ? "dark-content" : "light-content";
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=errorBannerLayout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errorBannerLayout.js","sourceRoot":"","sources":["../../../src/components/ErrorBanner/errorBannerLayout.ts"],"names":[],"mappings":";;;AA+CA,kDAWC;AA1DD,+EAA+E;AAClE,QAAA,sBAAsB,GAAG,EAAE,CAAC;AAC5B,QAAA,wBAAwB,GAAG,EAAE,CAAC;AAC9B,QAAA,sBAAsB,GAAG,EAAE,CAAC;AAC5B,QAAA,2BAA2B,GAAG,EAAE,CAAC;AACjC,QAAA,uBAAuB,GAAG,EAAE,CAAC;AAC7B,QAAA,yBAAyB,GAAG,EAAE,CAAC;AAC/B,QAAA,uBAAuB,GAAG,EAAE,CAAC;AAC7B,QAAA,2BAA2B,GAAG,EAAE,CAAC;AAC9C,yDAAyD;AAC5C,QAAA,sBAAsB,GACjC,8BAAsB,GAAG,+BAAuB,CAAC;AAInD,SAAS,QAAQ,CAAC,KAAa;IAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC3B,MAAM,GAAG,GAAG,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACnD,IAAI,GAAG,EAAE,CAAC;QACR,MAAM,IAAI,GACR,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;YAClC,CAAC,CAAC,GAAG;iBACA,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;iBACX,KAAK,CAAC,EAAE,CAAC;iBACT,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;iBACjB,IAAI,CAAC,EAAE,CAAC;YACb,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACtB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAI7D,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,GAAG,2CAA2C,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpE,IAAI,GAAG,EAAE,CAAC;QACR,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,SAAgB,mBAAmB,CAAC,eAAuB;IACzD,MAAM,GAAG,GAAG,QAAQ,CAAC,eAAe,CAAC,CAAC;IACtC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAC9B,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;QAClB,OAAO,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,GAAG,CAAC;IACjE,CAAC,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;IACvD,OAAO,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,eAAe,CAAC;AAC9D,CAAC"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
type IconProps = {
|
|
2
2
|
color: string;
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
}): import("react").JSX.Element;
|
|
3
|
+
size: number;
|
|
4
|
+
};
|
|
5
|
+
export declare function Megaphone({ color, size }: IconProps): import("react").JSX.Element;
|
|
6
|
+
export declare function ArrowRight({ color, size }: IconProps): import("react").JSX.Element;
|
|
7
|
+
export declare function Cross({ color, size }: IconProps): import("react").JSX.Element;
|
|
8
|
+
export {};
|
|
7
9
|
//# sourceMappingURL=icons.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../../src/components/ErrorBanner/icons.tsx"],"names":[],"mappings":"AAEA,
|
|
1
|
+
{"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../../src/components/ErrorBanner/icons.tsx"],"names":[],"mappings":"AAEA,KAAK,SAAS,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjD,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,SAAS,+BAiBnD;AAED,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,SAAS,+BAgBpD;AAED,wBAAgB,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,SAAS,+BAe/C"}
|
|
@@ -35,12 +35,16 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.Megaphone = Megaphone;
|
|
37
37
|
exports.ArrowRight = ArrowRight;
|
|
38
|
+
exports.Cross = Cross;
|
|
38
39
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
39
40
|
const react_native_svg_1 = __importStar(require("react-native-svg"));
|
|
40
|
-
function Megaphone({ color }) {
|
|
41
|
-
return ((0, jsx_runtime_1.jsx)(react_native_svg_1.default, { width:
|
|
41
|
+
function Megaphone({ color, size }) {
|
|
42
|
+
return ((0, jsx_runtime_1.jsx)(react_native_svg_1.default, { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: color, strokeWidth: 1.8, children: (0, jsx_runtime_1.jsx)(react_native_svg_1.Path, { strokeLinecap: "round", strokeLinejoin: "round", d: "M10.34 15.84c-.688-.06-1.386-.09-2.09-.09H7.5a4.5 4.5 0 1 1 0-9h.75c.704 0 1.402-.03 2.09-.09m0 9.18c.253.962.584 1.892.985 2.783.247.55.06 1.21-.463 1.511l-.657.38c-.551.318-1.26.117-1.527-.461a20.845 20.845 0 0 1-1.44-4.282m3.102.069a18.03 18.03 0 0 1-.59-4.59c0-1.586.205-3.124.59-4.59m0 9.18a23.848 23.848 0 0 1 8.835 2.535M10.34 6.66a23.847 23.847 0 0 0 8.835-2.535m0 0A23.74 23.74 0 0 0 18.795 3m.38 1.125a23.91 23.91 0 0 1 1.014 5.395m-1.014 8.855c-.118.38-.245.754-.38 1.125m.38-1.125a23.91 23.91 0 0 0 1.014-5.395m0-3.46c.495.413.811 1.035.811 1.73 0 .695-.316 1.317-.811 1.73m0-3.46a24.347 24.347 0 0 1 0 3.46" }) }));
|
|
42
43
|
}
|
|
43
|
-
function ArrowRight({ color }) {
|
|
44
|
-
return ((0, jsx_runtime_1.jsxs)(react_native_svg_1.default, { width:
|
|
44
|
+
function ArrowRight({ color, size }) {
|
|
45
|
+
return ((0, jsx_runtime_1.jsxs)(react_native_svg_1.default, { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: color, strokeWidth: 2.25, strokeLinecap: "round", strokeLinejoin: "round", children: [(0, jsx_runtime_1.jsx)(react_native_svg_1.Line, { x1: 5, y1: 12, x2: 19, y2: 12 }), (0, jsx_runtime_1.jsx)(react_native_svg_1.Polyline, { points: "13 6 19 12 13 18" })] }));
|
|
46
|
+
}
|
|
47
|
+
function Cross({ color, size }) {
|
|
48
|
+
return ((0, jsx_runtime_1.jsxs)(react_native_svg_1.default, { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: color, strokeWidth: 2.25, strokeLinecap: "round", children: [(0, jsx_runtime_1.jsx)(react_native_svg_1.Line, { x1: 6, y1: 6, x2: 18, y2: 18 }), (0, jsx_runtime_1.jsx)(react_native_svg_1.Line, { x1: 18, y1: 6, x2: 6, y2: 18 })] }));
|
|
45
49
|
}
|
|
46
50
|
//# sourceMappingURL=icons.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"icons.js","sourceRoot":"","sources":["../../../src/components/ErrorBanner/icons.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"icons.js","sourceRoot":"","sources":["../../../src/components/ErrorBanner/icons.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,8BAiBC;AAED,gCAgBC;AAED,sBAeC;;AAxDD,qEAA6D;AAI7D,SAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAa;IAClD,OAAO,CACL,uBAAC,0BAAG,IACF,KAAK,EAAE,IAAI,EACX,MAAM,EAAE,IAAI,EACZ,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,MAAM,EACX,MAAM,EAAE,KAAK,EACb,WAAW,EAAE,GAAG,YAEhB,uBAAC,uBAAI,IACH,aAAa,EAAC,OAAO,EACrB,cAAc,EAAC,OAAO,EACtB,CAAC,EAAC,6mBAA6mB,GAC/mB,GACE,CACP,CAAC;AACJ,CAAC;AAED,SAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,IAAI,EAAa;IACnD,OAAO,CACL,wBAAC,0BAAG,IACF,KAAK,EAAE,IAAI,EACX,MAAM,EAAE,IAAI,EACZ,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,MAAM,EACX,MAAM,EAAE,KAAK,EACb,WAAW,EAAE,IAAI,EACjB,aAAa,EAAC,OAAO,EACrB,cAAc,EAAC,OAAO,aAEtB,uBAAC,uBAAI,IAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAI,EACvC,uBAAC,2BAAQ,IAAC,MAAM,EAAC,kBAAkB,GAAG,IAClC,CACP,CAAC;AACJ,CAAC;AAED,SAAgB,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,EAAa;IAC9C,OAAO,CACL,wBAAC,0BAAG,IACF,KAAK,EAAE,IAAI,EACX,MAAM,EAAE,IAAI,EACZ,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,MAAM,EACX,MAAM,EAAE,KAAK,EACb,WAAW,EAAE,IAAI,EACjB,aAAa,EAAC,OAAO,aAErB,uBAAC,uBAAI,IAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAI,EACtC,uBAAC,uBAAI,IAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,GAAI,IAClC,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { ErrorBanner } from "./ErrorBanner";
|
|
2
|
-
export { ErrorBannerField, ErrorBannerProvider, useErrorBannerContext, useErrorBannerDismiss, useErrorBannerField, } from "./errorBannerContext";
|
|
2
|
+
export { ErrorBannerField, ErrorBannerProvider, useErrorBannerContext, useErrorBannerDismiss, useErrorBannerField, type ErrorBannerScrollTarget, } from "./errorBannerContext";
|
|
3
3
|
export { ERROR_BANNER_THEME_ROLES, type ErrorBannerThemeColorProp, } from "./errorBannerThemeRoles";
|
|
4
4
|
export { useErrorBanner } from "./useErrorBanner";
|
|
5
5
|
export type { ErrorBannerProps, FieldError } from "./types";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/ErrorBanner/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/ErrorBanner/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,EACnB,KAAK,uBAAuB,GAC7B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,wBAAwB,EACxB,KAAK,yBAAyB,GAC/B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,YAAY,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/ErrorBanner/index.ts"],"names":[],"mappings":";;;AAAA,6CAA4C;AAAnC,0GAAA,WAAW,OAAA;AACpB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/ErrorBanner/index.ts"],"names":[],"mappings":";;;AAAA,6CAA4C;AAAnC,0GAAA,WAAW,OAAA;AACpB,2DAO8B;AAN5B,sHAAA,gBAAgB,OAAA;AAChB,yHAAA,mBAAmB,OAAA;AACnB,2HAAA,qBAAqB,OAAA;AACrB,2HAAA,qBAAqB,OAAA;AACrB,yHAAA,mBAAmB,OAAA;AAGrB,iEAGiC;AAF/B,iIAAA,wBAAwB,OAAA;AAG1B,mDAAkD;AAAzC,gHAAA,cAAc,OAAA"}
|
|
@@ -1,3 +1,11 @@
|
|
|
1
1
|
import type { FormProps } from "./types";
|
|
2
|
-
|
|
2
|
+
/**
|
|
3
|
+
* A full-screen form under the native stack header. Set the title and the
|
|
4
|
+
* close button in the screen's stack options. The scroll view is the
|
|
5
|
+
* screen's first child, so iOS insets it for the header (including a large
|
|
6
|
+
* title) and content scrolls behind the bar. Render `Form` as the screen's
|
|
7
|
+
* root element. For a wash behind a transparent header, use `HeaderWash` as
|
|
8
|
+
* the stack's `headerBackground`.
|
|
9
|
+
*/
|
|
10
|
+
export declare function Form({ children, onSubmit, errors, submitLabel, submitting, submitDisabled, submitRadius, headerHeight: headerHeightProp, paddingHorizontal: paddingHorizontalProp, backgroundColor: backgroundColorProp, footerBackgroundColor: footerBackgroundColorProp, buttonBackgroundColor, buttonLabelColor, }: FormProps): import("react").JSX.Element;
|
|
3
11
|
//# sourceMappingURL=Form.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Form.d.ts","sourceRoot":"","sources":["../../../src/components/Form/Form.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Form.d.ts","sourceRoot":"","sources":["../../../src/components/Form/Form.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAazC;;;;;;;GAOG;AACH,wBAAgB,IAAI,CAAC,EACnB,QAAQ,EACR,QAAQ,EACR,MAAW,EACX,WAAoB,EACpB,UAAkB,EAClB,cAAsB,EACtB,YAAmB,EACnB,YAAY,EAAE,gBAAgB,EAC9B,iBAAiB,EAAE,qBAAqB,EACxC,eAAe,EAAE,mBAAmB,EACpC,qBAAqB,EAAE,yBAAyB,EAChD,qBAAqB,EACrB,gBAAgB,GACjB,EAAE,SAAS,+BAwGX"}
|
|
@@ -5,19 +5,15 @@ const jsx_runtime_1 = require("react/jsx-runtime");
|
|
|
5
5
|
const react_1 = require("react");
|
|
6
6
|
const react_native_1 = require("react-native");
|
|
7
7
|
const react_native_keyboard_controller_1 = require("react-native-keyboard-controller");
|
|
8
|
-
const ErrorBanner_1 = require("../ErrorBanner");
|
|
9
8
|
const react_native_safe_area_context_1 = require("react-native-safe-area-context");
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
const
|
|
9
|
+
const headerInset_1 = require("../../layout/headerInset");
|
|
10
|
+
const useThemeSpacing_1 = require("../../theme/useThemeSpacing");
|
|
11
|
+
const ErrorBanner_1 = require("../ErrorBanner");
|
|
12
|
+
const errorBannerCopy_1 = require("../ErrorBanner/errorBannerCopy");
|
|
13
|
+
const FormErrorBanner_1 = require("./FormErrorBanner");
|
|
14
|
+
const FormSubmitFooter_1 = require("./FormSubmitFooter");
|
|
15
|
+
const formThemeRoles_1 = require("./formThemeRoles");
|
|
13
16
|
const useResolvedThemeColor_1 = require("./useResolvedThemeColor");
|
|
14
|
-
const withAlpha_1 = require("./withAlpha");
|
|
15
|
-
/** How far the header wash continues below the buttons. */
|
|
16
|
-
const FADE_TAIL = 32;
|
|
17
|
-
function FormErrorBanner({ open, errors, onDismiss, onHeightChange, }) {
|
|
18
|
-
const ctx = (0, ErrorBanner_1.useErrorBannerContext)();
|
|
19
|
-
return ((0, jsx_runtime_1.jsx)(ErrorBanner_1.ErrorBanner, { errors: errors, onDismiss: onDismiss, onHeightChange: onHeightChange, onJump: (field) => ctx?.jump(field), open: open }));
|
|
20
|
-
}
|
|
21
17
|
/** Space kept between the focused field and the top of the footer. */
|
|
22
18
|
const FIELD_GAP = 12;
|
|
23
19
|
/**
|
|
@@ -25,89 +21,71 @@ const FIELD_GAP = 12;
|
|
|
25
21
|
* the rest of the control below the caret so the rounded bottom stays visible.
|
|
26
22
|
*/
|
|
27
23
|
const FIELD_BELOW_CARET = 36;
|
|
28
|
-
|
|
24
|
+
/**
|
|
25
|
+
* A full-screen form under the native stack header. Set the title and the
|
|
26
|
+
* close button in the screen's stack options. The scroll view is the
|
|
27
|
+
* screen's first child, so iOS insets it for the header (including a large
|
|
28
|
+
* title) and content scrolls behind the bar. Render `Form` as the screen's
|
|
29
|
+
* root element. For a wash behind a transparent header, use `HeaderWash` as
|
|
30
|
+
* the stack's `headerBackground`.
|
|
31
|
+
*/
|
|
32
|
+
function Form({ children, onSubmit, errors = [], submitLabel = "Save", submitting = false, submitDisabled = false, submitRadius = "lg", headerHeight: headerHeightProp, paddingHorizontal: paddingHorizontalProp, backgroundColor: backgroundColorProp, footerBackgroundColor: footerBackgroundColorProp, buttonBackgroundColor, buttonLabelColor, }) {
|
|
33
|
+
const spacing = (0, useThemeSpacing_1.useThemeSpacing)();
|
|
29
34
|
const insets = (0, react_native_safe_area_context_1.useSafeAreaInsets)();
|
|
30
|
-
const
|
|
31
|
-
const
|
|
32
|
-
const footerBackground = (0, useResolvedThemeColor_1.useResolvedThemeColor)(footerBackgroundColorProp,
|
|
33
|
-
const buttonBackground = (0, useResolvedThemeColor_1.useResolvedThemeColor)(buttonBackgroundColorProp, "buttonBackground");
|
|
34
|
-
const buttonLabel = (0, useResolvedThemeColor_1.useResolvedThemeColor)(buttonLabelColorProp, "buttonLabel");
|
|
35
|
+
const paddingHorizontal = paddingHorizontalProp ?? spacing.screen;
|
|
36
|
+
const background = (0, useResolvedThemeColor_1.useResolvedThemeColor)(backgroundColorProp, formThemeRoles_1.FORM_THEME_ROLES.backgroundColor);
|
|
37
|
+
const footerBackground = (0, useResolvedThemeColor_1.useResolvedThemeColor)(footerBackgroundColorProp, formThemeRoles_1.FORM_THEME_ROLES.footerBackgroundColor);
|
|
35
38
|
const scrollRef = (0, react_1.useRef)(null);
|
|
36
39
|
const bannerHeightRef = (0, react_1.useRef)(0);
|
|
40
|
+
const scrollTopRef = (0, react_1.useRef)(0);
|
|
41
|
+
const headerHeight = headerHeightProp ?? (0, headerInset_1.estimateHeaderHeight)(react_native_1.Platform.OS, insets.top);
|
|
42
|
+
const headerHeightRef = (0, react_1.useRef)(headerHeight);
|
|
43
|
+
headerHeightRef.current = headerHeight;
|
|
37
44
|
const banner = (0, ErrorBanner_1.useErrorBanner)(errors);
|
|
38
45
|
const [footerHeight, setFooterHeight] = (0, react_1.useState)(0);
|
|
39
|
-
const [cancelWidth, setCancelWidth] = (0, react_1.useState)(0);
|
|
40
|
-
const [barHeight, setBarHeight] = (0, react_1.useState)(0);
|
|
41
|
-
const resolvedBar = barHeight || insets.top + 52;
|
|
42
46
|
const onFooterLayout = (event) => {
|
|
43
47
|
const next = Math.round(event.nativeEvent.layout.height);
|
|
44
48
|
setFooterHeight((current) => (current === next ? current : next));
|
|
45
49
|
};
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
50
|
+
// Window y of the scroll view: 0 under a transparent header, the header's
|
|
51
|
+
// bottom under an opaque one.
|
|
52
|
+
const onScrollLayout = (event) => {
|
|
53
|
+
event.currentTarget.measureInWindow((_x, y) => {
|
|
54
|
+
scrollTopRef.current = Math.round(y);
|
|
55
|
+
});
|
|
56
|
+
};
|
|
57
|
+
// A banner row scrolls its field clear of the header and the banner.
|
|
58
|
+
const scrollYForField = (0, react_1.useCallback)((fieldY) => {
|
|
59
|
+
const scrollTop = scrollTopRef.current;
|
|
60
|
+
const header = headerHeightRef.current;
|
|
61
|
+
// iOS draws the banner over the window top; Android inside the screen.
|
|
62
|
+
const bannerTop = react_native_1.Platform.OS === "ios" ? 0 : scrollTop;
|
|
63
|
+
return (0, headerInset_1.formFieldScrollY)({
|
|
64
|
+
fieldY,
|
|
65
|
+
scrollTop,
|
|
66
|
+
visibleTop: Math.max(scrollTop, header),
|
|
67
|
+
bannerBottom: bannerTop + bannerHeightRef.current,
|
|
68
|
+
// Under a transparent header iOS rests the content at -(header).
|
|
69
|
+
minScrollY: Math.min(0, scrollTop - header),
|
|
70
|
+
gap: errorBannerCopy_1.ERROR_BANNER_SCROLL_GAP,
|
|
71
|
+
});
|
|
72
|
+
}, []);
|
|
73
|
+
return ((0, jsx_runtime_1.jsxs)(ErrorBanner_1.ErrorBannerProvider, { bannerHeightRef: bannerHeightRef, errors: errors, onDismiss: banner.dismiss, scrollRef: scrollRef, scrollYForField: scrollYForField, children: [(0, jsx_runtime_1.jsx)(react_native_keyboard_controller_1.KeyboardAwareScrollView, { ref: scrollRef, automaticallyAdjustKeyboardInsets: false, bottomOffset: footerHeight + FIELD_GAP + FIELD_BELOW_CARET, contentContainerStyle: [
|
|
74
|
+
styles.content,
|
|
75
|
+
{ paddingTop: spacing.pageTop, paddingHorizontal },
|
|
76
|
+
], contentInsetAdjustmentBehavior: "automatic", keyboardDismissMode: "interactive", keyboardShouldPersistTaps: "handled", onLayout: onScrollLayout, showsVerticalScrollIndicator: false, style: [styles.scroll, { backgroundColor: background }], children: children }), (0, jsx_runtime_1.jsx)(FormSubmitFooter_1.FormSubmitFooter, { backgroundColor: footerBackground, buttonBackgroundColor: buttonBackgroundColor, buttonLabelColor: buttonLabelColor, disabled: submitDisabled, label: submitLabel, onLayout: onFooterLayout, onPress: () => {
|
|
77
|
+
banner.present();
|
|
78
|
+
onSubmit();
|
|
79
|
+
}, paddingHorizontal: paddingHorizontal, radius: submitRadius, submitting: submitting }), (0, jsx_runtime_1.jsx)(FormErrorBanner_1.FormErrorBanner, { errors: errors, onDismiss: banner.dismiss, onHeightChange: (height) => {
|
|
80
|
+
bannerHeightRef.current = height;
|
|
81
|
+
}, open: banner.open })] }));
|
|
74
82
|
}
|
|
75
83
|
const styles = react_native_1.StyleSheet.create({
|
|
76
|
-
screen: {
|
|
77
|
-
flex: 1,
|
|
78
|
-
},
|
|
79
84
|
scroll: {
|
|
80
85
|
flex: 1,
|
|
81
86
|
},
|
|
82
87
|
content: {
|
|
83
|
-
paddingTop: 20,
|
|
84
88
|
paddingBottom: 24,
|
|
85
89
|
},
|
|
86
|
-
fade: {
|
|
87
|
-
position: "absolute",
|
|
88
|
-
top: 0,
|
|
89
|
-
left: 0,
|
|
90
|
-
right: 0,
|
|
91
|
-
},
|
|
92
|
-
header: {
|
|
93
|
-
flexDirection: "row",
|
|
94
|
-
alignItems: "center",
|
|
95
|
-
},
|
|
96
|
-
title: {
|
|
97
|
-
fontSize: 17,
|
|
98
|
-
fontWeight: "600",
|
|
99
|
-
textAlign: "center",
|
|
100
|
-
},
|
|
101
|
-
footerShell: {
|
|
102
|
-
// Cast upward so the sticky footer separates from the scroll body.
|
|
103
|
-
shadowColor: "#000",
|
|
104
|
-
shadowOffset: { width: 0, height: -4 },
|
|
105
|
-
shadowOpacity: 0.08,
|
|
106
|
-
shadowRadius: 12,
|
|
107
|
-
elevation: 8,
|
|
108
|
-
},
|
|
109
|
-
footer: {
|
|
110
|
-
paddingVertical: 12,
|
|
111
|
-
},
|
|
112
90
|
});
|
|
113
91
|
//# sourceMappingURL=Form.js.map
|