@studio-piot/native-ui 0.2.2 → 0.2.4

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.
Files changed (116) hide show
  1. package/README.md +3 -1
  2. package/dist/components/ErrorBanner/ErrorBanner.d.ts +8 -0
  3. package/dist/components/ErrorBanner/ErrorBanner.d.ts.map +1 -0
  4. package/dist/components/ErrorBanner/ErrorBanner.js +136 -0
  5. package/dist/components/ErrorBanner/ErrorBanner.js.map +1 -0
  6. package/dist/components/ErrorBanner/errorBannerContext.d.ts +36 -0
  7. package/dist/components/ErrorBanner/errorBannerContext.d.ts.map +1 -0
  8. package/dist/components/ErrorBanner/errorBannerContext.js +78 -0
  9. package/dist/components/ErrorBanner/errorBannerContext.js.map +1 -0
  10. package/dist/components/ErrorBanner/errorBannerCopy.d.ts +7 -0
  11. package/dist/components/ErrorBanner/errorBannerCopy.d.ts.map +1 -0
  12. package/dist/components/ErrorBanner/errorBannerCopy.js +22 -0
  13. package/dist/components/ErrorBanner/errorBannerCopy.js.map +1 -0
  14. package/dist/components/ErrorBanner/errorBannerThemeRoles.d.ts +9 -0
  15. package/dist/components/ErrorBanner/errorBannerThemeRoles.d.ts.map +1 -0
  16. package/dist/components/ErrorBanner/errorBannerThemeRoles.js +11 -0
  17. package/dist/components/ErrorBanner/errorBannerThemeRoles.js.map +1 -0
  18. package/dist/components/ErrorBanner/icons.d.ts +7 -0
  19. package/dist/components/ErrorBanner/icons.d.ts.map +1 -0
  20. package/dist/components/ErrorBanner/icons.js +46 -0
  21. package/dist/components/ErrorBanner/icons.js.map +1 -0
  22. package/dist/components/ErrorBanner/index.d.ts +6 -0
  23. package/dist/components/ErrorBanner/index.d.ts.map +1 -0
  24. package/dist/components/ErrorBanner/index.js +16 -0
  25. package/dist/components/ErrorBanner/index.js.map +1 -0
  26. package/dist/components/ErrorBanner/types.d.ts +31 -0
  27. package/dist/components/ErrorBanner/types.d.ts.map +1 -0
  28. package/dist/components/ErrorBanner/types.js +3 -0
  29. package/dist/components/ErrorBanner/types.js.map +1 -0
  30. package/dist/components/ErrorBanner/useErrorBanner.d.ts +13 -0
  31. package/dist/components/ErrorBanner/useErrorBanner.d.ts.map +1 -0
  32. package/dist/components/ErrorBanner/useErrorBanner.js +31 -0
  33. package/dist/components/ErrorBanner/useErrorBanner.js.map +1 -0
  34. package/dist/components/Field/fieldChrome.d.ts +1 -1
  35. package/dist/components/Field/fieldChrome.d.ts.map +1 -1
  36. package/dist/components/Field/fieldChrome.js +20 -4
  37. package/dist/components/Field/fieldChrome.js.map +1 -1
  38. package/dist/components/Field/types.d.ts +2 -0
  39. package/dist/components/Field/types.d.ts.map +1 -1
  40. package/dist/components/Form/Form.d.ts +1 -1
  41. package/dist/components/Form/Form.d.ts.map +1 -1
  42. package/dist/components/Form/Form.js +36 -23
  43. package/dist/components/Form/Form.js.map +1 -1
  44. package/dist/components/Form/types.d.ts +7 -0
  45. package/dist/components/Form/types.d.ts.map +1 -1
  46. package/dist/components/RadioField/RadioField.d.ts.map +1 -1
  47. package/dist/components/RadioField/RadioField.js +6 -1
  48. package/dist/components/RadioField/RadioField.js.map +1 -1
  49. package/dist/components/SegmentedControl/SegmentedControl.d.ts +3 -0
  50. package/dist/components/SegmentedControl/SegmentedControl.d.ts.map +1 -0
  51. package/dist/components/SegmentedControl/SegmentedControl.js +181 -0
  52. package/dist/components/SegmentedControl/SegmentedControl.js.map +1 -0
  53. package/dist/components/SegmentedControl/index.d.ts +4 -0
  54. package/dist/components/SegmentedControl/index.d.ts.map +1 -0
  55. package/dist/components/SegmentedControl/index.js +8 -0
  56. package/dist/components/SegmentedControl/index.js.map +1 -0
  57. package/dist/components/SegmentedControl/segmentIndicatorFrame.d.ts +16 -0
  58. package/dist/components/SegmentedControl/segmentIndicatorFrame.d.ts.map +1 -0
  59. package/dist/components/SegmentedControl/segmentIndicatorFrame.js +27 -0
  60. package/dist/components/SegmentedControl/segmentIndicatorFrame.js.map +1 -0
  61. package/dist/components/SegmentedControl/segmentThemeRoles.d.ts +9 -0
  62. package/dist/components/SegmentedControl/segmentThemeRoles.d.ts.map +1 -0
  63. package/dist/components/SegmentedControl/segmentThemeRoles.js +11 -0
  64. package/dist/components/SegmentedControl/segmentThemeRoles.js.map +1 -0
  65. package/dist/components/SegmentedControl/types.d.ts +23 -0
  66. package/dist/components/SegmentedControl/types.d.ts.map +1 -0
  67. package/dist/components/SegmentedControl/types.js +3 -0
  68. package/dist/components/SegmentedControl/types.js.map +1 -0
  69. package/dist/components/Select/Select.d.ts +1 -1
  70. package/dist/components/Select/Select.d.ts.map +1 -1
  71. package/dist/components/Select/Select.js +11 -4
  72. package/dist/components/Select/Select.js.map +1 -1
  73. package/dist/components/Select/types.d.ts +2 -0
  74. package/dist/components/Select/types.d.ts.map +1 -1
  75. package/dist/components/Slider/Slider.d.ts.map +1 -1
  76. package/dist/components/Slider/Slider.js +6 -1
  77. package/dist/components/Slider/Slider.js.map +1 -1
  78. package/dist/components/index.d.ts +2 -0
  79. package/dist/components/index.d.ts.map +1 -1
  80. package/dist/components/index.js +13 -1
  81. package/dist/components/index.js.map +1 -1
  82. package/dist/index.d.ts +3 -1
  83. package/dist/index.d.ts.map +1 -1
  84. package/dist/index.js +14 -2
  85. package/dist/index.js.map +1 -1
  86. package/docs/components/error-banner.md +85 -0
  87. package/docs/components/form.md +2 -1
  88. package/docs/components/segmented-control.md +105 -0
  89. package/package.json +4 -2
  90. package/src/components/ErrorBanner/ErrorBanner.tsx +232 -0
  91. package/src/components/ErrorBanner/errorBannerContext.tsx +140 -0
  92. package/src/components/ErrorBanner/errorBannerCopy.test.ts +41 -0
  93. package/src/components/ErrorBanner/errorBannerCopy.ts +22 -0
  94. package/src/components/ErrorBanner/errorBannerThemeRoles.test.ts +19 -0
  95. package/src/components/ErrorBanner/errorBannerThemeRoles.ts +9 -0
  96. package/src/components/ErrorBanner/icons.tsx +38 -0
  97. package/src/components/ErrorBanner/index.ts +14 -0
  98. package/src/components/ErrorBanner/types.ts +31 -0
  99. package/src/components/ErrorBanner/useErrorBanner.ts +33 -0
  100. package/src/components/Field/fieldChrome.tsx +33 -7
  101. package/src/components/Field/types.ts +2 -0
  102. package/src/components/Form/Form.tsx +56 -2
  103. package/src/components/Form/types.ts +7 -0
  104. package/src/components/RadioField/RadioField.tsx +6 -1
  105. package/src/components/SegmentedControl/SegmentedControl.tsx +230 -0
  106. package/src/components/SegmentedControl/index.ts +6 -0
  107. package/src/components/SegmentedControl/segmentIndicatorFrame.test.ts +39 -0
  108. package/src/components/SegmentedControl/segmentIndicatorFrame.ts +31 -0
  109. package/src/components/SegmentedControl/segmentThemeRoles.test.ts +19 -0
  110. package/src/components/SegmentedControl/segmentThemeRoles.ts +9 -0
  111. package/src/components/SegmentedControl/types.ts +24 -0
  112. package/src/components/Select/Select.tsx +20 -5
  113. package/src/components/Select/types.ts +2 -0
  114. package/src/components/Slider/Slider.tsx +6 -1
  115. package/src/components/index.ts +20 -0
  116. package/src/index.ts +21 -1
package/README.md CHANGED
@@ -10,7 +10,7 @@ The package is the native counterpart of `@studio-piot/ui`. Apps own their palet
10
10
  npm install @studio-piot/native-ui
11
11
  ```
12
12
 
13
- `Select` peers `@gorhom/bottom-sheet`, `react-native-reanimated`, `react-native-gesture-handler`, and `react-native-screens` (iOS `FullWindowOverlay` so the sheet appears above React Navigation modals). `Slider` peers `@react-native-community/slider`.
13
+ `Select` peers `@gorhom/bottom-sheet`, `react-native-reanimated`, `react-native-gesture-handler`, and `react-native-screens` (iOS `FullWindowOverlay` so the sheet appears above React Navigation modals). `SegmentedControl` uses that same `react-native-reanimated` peer to slide the selection fill. `Slider` peers `@react-native-community/slider`. `ErrorBanner` peers `react-native-svg` for the megaphone and row arrow.
14
14
 
15
15
  ## Docs
16
16
 
@@ -18,8 +18,10 @@ npm install @studio-piot/native-ui
18
18
  - [LinkBlocks usage](./docs/components/link-blocks.md)
19
19
  - [Field usage](./docs/components/field.md)
20
20
  - [Form usage](./docs/components/form.md)
21
+ - [ErrorBanner usage](./docs/components/error-banner.md)
21
22
  - [RadioField usage](./docs/components/radio-field.md)
22
23
  - [Select usage](./docs/components/select.md)
24
+ - [SegmentedControl usage](./docs/components/segmented-control.md)
23
25
  - [Slider usage](./docs/components/slider.md)
24
26
  - [Design: theme provider and Button](./docs/superpowers/specs/2026-09-24-theme-provider-button-design.md)
25
27
  - [Design: LinkBlocks](./docs/superpowers/specs/2026-09-24-link-blocks-design.md)
@@ -0,0 +1,8 @@
1
+ import type { ErrorBannerProps } from "./types";
2
+ /**
3
+ * Screen-wide field-error banner. Mount it once and drive `open` so the
4
+ * exit animation can play. It is not tied to a form shell: pass `errors`,
5
+ * `onJump`, and `onDismiss`. `Form` does that by default.
6
+ */
7
+ export declare function ErrorBanner({ open, errors, onJump, onDismiss, onHeightChange, safeAreaTop, paddingHorizontal, backgroundColor: backgroundColorProp, textColor: textColorProp, secondaryColor: secondaryColorProp, dividerColor: dividerColorProp, accentColor: accentColorProp, }: ErrorBannerProps): import("react").JSX.Element;
8
+ //# sourceMappingURL=ErrorBanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ErrorBanner.d.ts","sourceRoot":"","sources":["../../../src/components/ErrorBanner/ErrorBanner.tsx"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAIhD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,EAC1B,IAAI,EACJ,MAAM,EACN,MAAM,EACN,SAAS,EACT,cAAc,EACd,WAAW,EACX,iBAA2C,EAC3C,eAAe,EAAE,mBAAmB,EACpC,SAAS,EAAE,aAAa,EACxB,cAAc,EAAE,kBAAkB,EAClC,YAAY,EAAE,gBAAgB,EAC9B,WAAW,EAAE,eAAe,GAC7B,EAAE,gBAAgB,+BAuIlB"}
@@ -0,0 +1,136 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ErrorBanner = ErrorBanner;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("react");
6
+ const react_native_1 = require("react-native");
7
+ const react_native_safe_area_context_1 = require("react-native-safe-area-context");
8
+ const buttonRadius_1 = require("../Button/buttonRadius");
9
+ const useResolvedFieldColor_1 = require("../Field/useResolvedFieldColor");
10
+ const screenPadding_1 = require("../../layout/screenPadding");
11
+ const errorBannerCopy_1 = require("./errorBannerCopy");
12
+ const errorBannerThemeRoles_1 = require("./errorBannerThemeRoles");
13
+ const icons_1 = require("./icons");
14
+ const BOTTOM_RADIUS = (0, buttonRadius_1.buttonRadiusValue)("xl");
15
+ /**
16
+ * Screen-wide field-error banner. Mount it once and drive `open` so the
17
+ * exit animation can play. It is not tied to a form shell: pass `errors`,
18
+ * `onJump`, and `onDismiss`. `Form` does that by default.
19
+ */
20
+ function ErrorBanner({ open, errors, onJump, onDismiss, onHeightChange, safeAreaTop, paddingHorizontal = screenPadding_1.screenPaddingHorizontal, backgroundColor: backgroundColorProp, textColor: textColorProp, secondaryColor: secondaryColorProp, dividerColor: dividerColorProp, accentColor: accentColorProp, }) {
21
+ const insets = (0, react_native_safe_area_context_1.useSafeAreaInsets)();
22
+ const topInset = safeAreaTop ?? insets.top;
23
+ const backgroundColor = (0, useResolvedFieldColor_1.useResolvedFieldColor)(backgroundColorProp, errorBannerThemeRoles_1.ERROR_BANNER_THEME_ROLES.backgroundColor);
24
+ const textColor = (0, useResolvedFieldColor_1.useResolvedFieldColor)(textColorProp, errorBannerThemeRoles_1.ERROR_BANNER_THEME_ROLES.textColor);
25
+ const secondaryColor = (0, useResolvedFieldColor_1.useResolvedFieldColor)(secondaryColorProp, errorBannerThemeRoles_1.ERROR_BANNER_THEME_ROLES.secondaryColor);
26
+ const dividerColor = (0, useResolvedFieldColor_1.useResolvedFieldColor)(dividerColorProp, errorBannerThemeRoles_1.ERROR_BANNER_THEME_ROLES.dividerColor);
27
+ const accentColor = (0, useResolvedFieldColor_1.useResolvedFieldColor)(accentColorProp, errorBannerThemeRoles_1.ERROR_BANNER_THEME_ROLES.accentColor);
28
+ const [height, setHeight] = (0, react_1.useState)(400);
29
+ const [reduceMotion, setReduceMotion] = (0, react_1.useState)(false);
30
+ const progress = (0, react_1.useRef)(new react_native_1.Animated.Value(0)).current;
31
+ const count = errors.length;
32
+ const title = (0, errorBannerCopy_1.errorBannerTitle)(count);
33
+ const titleRef = (0, react_1.useRef)(title);
34
+ titleRef.current = title;
35
+ (0, react_1.useEffect)(() => {
36
+ react_native_1.AccessibilityInfo.isReduceMotionEnabled().then(setReduceMotion);
37
+ }, []);
38
+ (0, react_1.useEffect)(() => {
39
+ react_native_1.Animated.timing(progress, {
40
+ toValue: open ? 1 : 0,
41
+ duration: reduceMotion ? 120 : open ? 260 : 200,
42
+ easing: react_native_1.Easing.bezier(0.16, 1, 0.3, 1),
43
+ useNativeDriver: true,
44
+ }).start();
45
+ if (open) {
46
+ react_native_1.AccessibilityInfo.announceForAccessibility(titleRef.current);
47
+ }
48
+ }, [open, progress, reduceMotion]);
49
+ const motion = reduceMotion
50
+ ? { opacity: progress }
51
+ : {
52
+ transform: [
53
+ {
54
+ translateY: progress.interpolate({
55
+ inputRange: [0, 1],
56
+ outputRange: [-(height + 24), 0],
57
+ }),
58
+ },
59
+ ],
60
+ };
61
+ const onLayout = (event) => {
62
+ const next = Math.round(event.nativeEvent.layout.height);
63
+ setHeight((current) => (current === next ? current : next));
64
+ onHeightChange?.(next);
65
+ };
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: "light-content" }) : 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
+ styles.banner,
68
+ {
69
+ backgroundColor,
70
+ paddingTop: topInset + 8,
71
+ paddingHorizontal,
72
+ borderBottomLeftRadius: BOTTOM_RADIUS,
73
+ borderBottomRightRadius: BOTTOM_RADIUS,
74
+ },
75
+ 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)(react_native_1.Text, { style: [styles.dismiss, { color: secondaryColor }], children: "\u2715" }) })] }), (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", hitSlop: { top: 4, bottom: 4 }, onPress: () => onJump(error.field), style: ({ pressed }) => [
77
+ styles.row,
78
+ { borderTopColor: dividerColor },
79
+ 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))) })] })] }));
81
+ }
82
+ const styles = react_native_1.StyleSheet.create({
83
+ banner: {
84
+ position: "absolute",
85
+ top: 0,
86
+ left: 0,
87
+ right: 0,
88
+ zIndex: 100,
89
+ paddingBottom: 10,
90
+ shadowColor: "#22201D",
91
+ shadowOpacity: 0.25,
92
+ shadowRadius: 12,
93
+ shadowOffset: { width: 0, height: 8 },
94
+ elevation: 12,
95
+ },
96
+ header: {
97
+ flexDirection: "row",
98
+ alignItems: "center",
99
+ gap: 10,
100
+ },
101
+ iconDisc: {
102
+ width: 28,
103
+ height: 28,
104
+ borderRadius: 14,
105
+ alignItems: "center",
106
+ justifyContent: "center",
107
+ },
108
+ title: {
109
+ flex: 1,
110
+ fontSize: 15,
111
+ lineHeight: 20,
112
+ fontWeight: "600",
113
+ },
114
+ dismiss: {
115
+ fontSize: 15,
116
+ },
117
+ rows: {
118
+ marginTop: 6,
119
+ },
120
+ row: {
121
+ flexDirection: "row",
122
+ alignItems: "center",
123
+ minHeight: 36,
124
+ marginLeft: 38,
125
+ borderTopWidth: 1,
126
+ },
127
+ pressed: {
128
+ opacity: 0.6,
129
+ },
130
+ rowLabel: {
131
+ flex: 1,
132
+ fontSize: 15,
133
+ lineHeight: 20,
134
+ },
135
+ });
136
+ //# sourceMappingURL=ErrorBanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ErrorBanner.js","sourceRoot":"","sources":["../../../src/components/ErrorBanner/ErrorBanner.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import { type ReactNode, type RefObject } from "react";
2
+ import { View, type ScrollView } from "react-native";
3
+ import type { FieldError } from "./types";
4
+ export type ErrorBannerAnchor = {
5
+ view: View;
6
+ focus?: () => void;
7
+ };
8
+ type ErrorBannerContextValue = {
9
+ errors: readonly FieldError[];
10
+ register: (field: string, anchor: ErrorBannerAnchor | null) => void;
11
+ dismiss: () => void;
12
+ jump: (field: string) => void;
13
+ };
14
+ export declare function useErrorBannerContext(): ErrorBannerContextValue | null;
15
+ export declare function useErrorBannerDismiss(): () => void;
16
+ /**
17
+ * Registers a field so a banner row can scroll it into view.
18
+ * No-ops outside `ErrorBannerProvider` (and `Form`, which provides one).
19
+ */
20
+ export declare function useErrorBannerField(name: string | undefined, focus?: () => void): {
21
+ viewRef: RefObject<View | null>;
22
+ listed: FieldError | undefined;
23
+ };
24
+ export declare function ErrorBannerProvider({ children, scrollRef, errors, onDismiss, bannerHeightRef, }: {
25
+ children: ReactNode;
26
+ scrollRef: RefObject<ScrollView | null>;
27
+ errors: readonly FieldError[];
28
+ onDismiss: () => void;
29
+ bannerHeightRef: RefObject<number>;
30
+ }): import("react").JSX.Element;
31
+ export declare function ErrorBannerField({ name, children, }: {
32
+ name: string;
33
+ children: ReactNode;
34
+ }): import("react").JSX.Element;
35
+ export {};
36
+ //# sourceMappingURL=errorBannerContext.d.ts.map
@@ -0,0 +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,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAE9E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C,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,GAChB,EAAE;IACD,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,EAAE,SAAS,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IACxC,MAAM,EAAE,SAAS,UAAU,EAAE,CAAC;IAC9B,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,eAAe,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;CACpC,+BAwCA;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,SAAS,CAAC;CACrB,+BAOA"}
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useErrorBannerContext = useErrorBannerContext;
4
+ exports.useErrorBannerDismiss = useErrorBannerDismiss;
5
+ exports.useErrorBannerField = useErrorBannerField;
6
+ exports.ErrorBannerProvider = ErrorBannerProvider;
7
+ exports.ErrorBannerField = ErrorBannerField;
8
+ const jsx_runtime_1 = require("react/jsx-runtime");
9
+ const react_1 = require("react");
10
+ const react_native_1 = require("react-native");
11
+ const errorBannerCopy_1 = require("./errorBannerCopy");
12
+ const ErrorBannerContext = (0, react_1.createContext)(null);
13
+ function useErrorBannerContext() {
14
+ return (0, react_1.useContext)(ErrorBannerContext);
15
+ }
16
+ function useErrorBannerDismiss() {
17
+ const ctx = (0, react_1.useContext)(ErrorBannerContext);
18
+ return ctx?.dismiss ?? (() => undefined);
19
+ }
20
+ /**
21
+ * Registers a field so a banner row can scroll it into view.
22
+ * No-ops outside `ErrorBannerProvider` (and `Form`, which provides one).
23
+ */
24
+ function useErrorBannerField(name, focus) {
25
+ const ctx = (0, react_1.useContext)(ErrorBannerContext);
26
+ const viewRef = (0, react_1.useRef)(null);
27
+ const focusRef = (0, react_1.useRef)(focus);
28
+ focusRef.current = focus;
29
+ (0, react_1.useEffect)(() => {
30
+ if (!name || !ctx) {
31
+ return;
32
+ }
33
+ const view = viewRef.current;
34
+ if (!view) {
35
+ return;
36
+ }
37
+ ctx.register(name, {
38
+ view,
39
+ focus: () => focusRef.current?.(),
40
+ });
41
+ return () => ctx.register(name, null);
42
+ }, [ctx, name]);
43
+ const listed = name
44
+ ? ctx?.errors.find((error) => error.field === name)
45
+ : undefined;
46
+ return { viewRef, listed };
47
+ }
48
+ function ErrorBannerProvider({ children, scrollRef, errors, onDismiss, bannerHeightRef, }) {
49
+ const anchors = (0, react_1.useRef)(new Map());
50
+ const register = (0, react_1.useCallback)((field, anchor) => {
51
+ if (!anchor) {
52
+ anchors.current.delete(field);
53
+ return;
54
+ }
55
+ anchors.current.set(field, anchor);
56
+ }, []);
57
+ const jump = (0, react_1.useCallback)((field) => {
58
+ const anchor = anchors.current.get(field);
59
+ const scroll = scrollRef.current;
60
+ if (!anchor || !scroll) {
61
+ return;
62
+ }
63
+ anchor.view.measureLayout(scroll, (_x, y) => {
64
+ scroll.scrollTo({
65
+ y: (0, errorBannerCopy_1.fieldScrollY)(y, bannerHeightRef.current ?? 0),
66
+ animated: true,
67
+ });
68
+ anchor.focus?.();
69
+ }, () => undefined);
70
+ }, [bannerHeightRef, scrollRef]);
71
+ const value = (0, react_1.useMemo)(() => ({ errors, register, dismiss: onDismiss, jump }), [errors, jump, onDismiss, register]);
72
+ return ((0, jsx_runtime_1.jsx)(ErrorBannerContext.Provider, { value: value, children: children }));
73
+ }
74
+ function ErrorBannerField({ name, children, }) {
75
+ const { viewRef } = useErrorBannerField(name);
76
+ return ((0, jsx_runtime_1.jsx)(react_native_1.View, { ref: viewRef, collapsable: false, children: children }));
77
+ }
78
+ //# sourceMappingURL=errorBannerContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errorBannerContext.js","sourceRoot":"","sources":["../../../src/components/ErrorBanner/errorBannerContext.tsx"],"names":[],"mappings":";;AA4BA,sDAEC;AAED,sDAGC;AAMD,kDA6BC;AAED,kDAoDC;AAED,4CAaC;;AA3ID,iCASe;AACf,+CAA8E;AAC9E,uDAAiD;AAejD,MAAM,kBAAkB,GAAG,IAAA,qBAAa,EAAiC,IAAI,CAAC,CAAC;AAE/E,SAAgB,qBAAqB;IACnC,OAAO,IAAA,kBAAU,EAAC,kBAAkB,CAAC,CAAC;AACxC,CAAC;AAED,SAAgB,qBAAqB;IACnC,MAAM,GAAG,GAAG,IAAA,kBAAU,EAAC,kBAAkB,CAAC,CAAC;IAC3C,OAAO,GAAG,EAAE,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;AAC3C,CAAC;AAED;;;GAGG;AACH,SAAgB,mBAAmB,CACjC,IAAwB,EACxB,KAAkB;IAElB,MAAM,GAAG,GAAG,IAAA,kBAAU,EAAC,kBAAkB,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,IAAA,cAAM,EAAO,IAAI,CAAC,CAAC;IACnC,MAAM,QAAQ,GAAG,IAAA,cAAM,EAAC,KAAK,CAAC,CAAC;IAC/B,QAAQ,CAAC,OAAO,GAAG,KAAK,CAAC;IAEzB,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YAClB,OAAO;QACT,CAAC;QACD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO;QACT,CAAC;QACD,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE;YACjB,IAAI;YACJ,KAAK,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE;SAClC,CAAC,CAAC;QACH,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACxC,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;IAEhB,MAAM,MAAM,GAAG,IAAI;QACjB,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC;QACnD,CAAC,CAAC,SAAS,CAAC;IAEd,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AAC7B,CAAC;AAED,SAAgB,mBAAmB,CAAC,EAClC,QAAQ,EACR,SAAS,EACT,MAAM,EACN,SAAS,EACT,eAAe,GAOhB;IACC,MAAM,OAAO,GAAG,IAAA,cAAM,EAAC,IAAI,GAAG,EAA6B,CAAC,CAAC;IAE7D,MAAM,QAAQ,GAAG,IAAA,mBAAW,EAAC,CAAC,KAAa,EAAE,MAAgC,EAAE,EAAE;QAC/E,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC9B,OAAO;QACT,CAAC;QACD,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACrC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,IAAI,GAAG,IAAA,mBAAW,EAAC,CAAC,KAAa,EAAE,EAAE;QACzC,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC;QACjC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,aAAa,CACvB,MAAuC,EACvC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;YACR,MAAM,CAAC,QAAQ,CAAC;gBACd,CAAC,EAAE,IAAA,8BAAY,EAAC,CAAC,EAAE,eAAe,CAAC,OAAO,IAAI,CAAC,CAAC;gBAChD,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;YACH,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;QACnB,CAAC,EACD,GAAG,EAAE,CAAC,SAAS,CAChB,CAAC;IACJ,CAAC,EAAE,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC,CAAC;IAEjC,MAAM,KAAK,GAAG,IAAA,eAAO,EACnB,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EACtD,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,CACpC,CAAC;IAEF,OAAO,CACL,uBAAC,kBAAkB,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YACtC,QAAQ,GACmB,CAC/B,CAAC;AACJ,CAAC;AAED,SAAgB,gBAAgB,CAAC,EAC/B,IAAI,EACJ,QAAQ,GAIT;IACC,MAAM,EAAE,OAAO,EAAE,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC9C,OAAO,CACL,uBAAC,mBAAI,IAAC,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,YACnC,QAAQ,GACJ,CACR,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ /** Gap kept between the banner and a field scrolled into view. */
2
+ export declare const ERROR_BANNER_SCROLL_GAP = 16;
3
+ export declare function errorBannerTitle(count: number): string;
4
+ export declare function errorBannerOpen(errorCount: number, dismissed: boolean): boolean;
5
+ /** Content y that places the field just below the banner. */
6
+ export declare function fieldScrollY(fieldY: number, bannerHeight: number, gap?: number): number;
7
+ //# sourceMappingURL=errorBannerCopy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errorBannerCopy.d.ts","sourceRoot":"","sources":["../../../src/components/ErrorBanner/errorBannerCopy.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAE1C,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKtD;AAED,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,OAAO,CAE/E;AAED,6DAA6D;AAC7D,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,GAAG,SAA0B,GAC5B,MAAM,CAER"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ERROR_BANNER_SCROLL_GAP = void 0;
4
+ exports.errorBannerTitle = errorBannerTitle;
5
+ exports.errorBannerOpen = errorBannerOpen;
6
+ exports.fieldScrollY = fieldScrollY;
7
+ /** Gap kept between the banner and a field scrolled into view. */
8
+ exports.ERROR_BANNER_SCROLL_GAP = 16;
9
+ function errorBannerTitle(count) {
10
+ if (count === 1) {
11
+ return "Nearly there. One thing to review";
12
+ }
13
+ return `Nearly there. ${count} things to review`;
14
+ }
15
+ function errorBannerOpen(errorCount, dismissed) {
16
+ return errorCount > 0 && !dismissed;
17
+ }
18
+ /** Content y that places the field just below the banner. */
19
+ function fieldScrollY(fieldY, bannerHeight, gap = exports.ERROR_BANNER_SCROLL_GAP) {
20
+ return Math.max(0, fieldY - bannerHeight - gap);
21
+ }
22
+ //# sourceMappingURL=errorBannerCopy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errorBannerCopy.js","sourceRoot":"","sources":["../../../src/components/ErrorBanner/errorBannerCopy.ts"],"names":[],"mappings":";;;AAGA,4CAKC;AAED,0CAEC;AAGD,oCAMC;AArBD,kEAAkE;AACrD,QAAA,uBAAuB,GAAG,EAAE,CAAC;AAE1C,SAAgB,gBAAgB,CAAC,KAAa;IAC5C,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;QAChB,OAAO,mCAAmC,CAAC;IAC7C,CAAC;IACD,OAAO,iBAAiB,KAAK,mBAAmB,CAAC;AACnD,CAAC;AAED,SAAgB,eAAe,CAAC,UAAkB,EAAE,SAAkB;IACpE,OAAO,UAAU,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;AACtC,CAAC;AAED,6DAA6D;AAC7D,SAAgB,YAAY,CAC1B,MAAc,EACd,YAAoB,EACpB,GAAG,GAAG,+BAAuB;IAE7B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,YAAY,GAAG,GAAG,CAAC,CAAC;AAClD,CAAC"}
@@ -0,0 +1,9 @@
1
+ export declare const ERROR_BANNER_THEME_ROLES: {
2
+ readonly backgroundColor: "errorBannerBackground";
3
+ readonly textColor: "errorBannerText";
4
+ readonly secondaryColor: "errorBannerSecondary";
5
+ readonly dividerColor: "errorBannerDivider";
6
+ readonly accentColor: "errorBannerAccent";
7
+ };
8
+ export type ErrorBannerThemeColorProp = keyof typeof ERROR_BANNER_THEME_ROLES;
9
+ //# sourceMappingURL=errorBannerThemeRoles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errorBannerThemeRoles.d.ts","sourceRoot":"","sources":["../../../src/components/ErrorBanner/errorBannerThemeRoles.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,wBAAwB;;;;;;CAM3B,CAAC;AAEX,MAAM,MAAM,yBAAyB,GAAG,MAAM,OAAO,wBAAwB,CAAC"}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ERROR_BANNER_THEME_ROLES = void 0;
4
+ exports.ERROR_BANNER_THEME_ROLES = {
5
+ backgroundColor: "errorBannerBackground",
6
+ textColor: "errorBannerText",
7
+ secondaryColor: "errorBannerSecondary",
8
+ dividerColor: "errorBannerDivider",
9
+ accentColor: "errorBannerAccent",
10
+ };
11
+ //# sourceMappingURL=errorBannerThemeRoles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errorBannerThemeRoles.js","sourceRoot":"","sources":["../../../src/components/ErrorBanner/errorBannerThemeRoles.ts"],"names":[],"mappings":";;;AAAa,QAAA,wBAAwB,GAAG;IACtC,eAAe,EAAE,uBAAuB;IACxC,SAAS,EAAE,iBAAiB;IAC5B,cAAc,EAAE,sBAAsB;IACtC,YAAY,EAAE,oBAAoB;IAClC,WAAW,EAAE,mBAAmB;CACxB,CAAC"}
@@ -0,0 +1,7 @@
1
+ export declare function Megaphone({ color }: {
2
+ color: string;
3
+ }): import("react").JSX.Element;
4
+ export declare function ArrowRight({ color }: {
5
+ color: string;
6
+ }): import("react").JSX.Element;
7
+ //# sourceMappingURL=icons.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../../src/components/ErrorBanner/icons.tsx"],"names":[],"mappings":"AAEA,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,+BAiBrD;AAED,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,+BAgBtD"}
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.Megaphone = Megaphone;
37
+ exports.ArrowRight = ArrowRight;
38
+ const jsx_runtime_1 = require("react/jsx-runtime");
39
+ 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: 16, height: 16, 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
+ function ArrowRight({ color }) {
44
+ return ((0, jsx_runtime_1.jsxs)(react_native_svg_1.default, { width: 18, height: 18, 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" })] }));
45
+ }
46
+ //# sourceMappingURL=icons.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icons.js","sourceRoot":"","sources":["../../../src/components/ErrorBanner/icons.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,8BAiBC;AAED,gCAgBC;;AArCD,qEAA6D;AAE7D,SAAgB,SAAS,CAAC,EAAE,KAAK,EAAqB;IACpD,OAAO,CACL,uBAAC,0BAAG,IACF,KAAK,EAAE,EAAE,EACT,MAAM,EAAE,EAAE,EACV,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,EAAqB;IACrD,OAAO,CACL,wBAAC,0BAAG,IACF,KAAK,EAAE,EAAE,EACT,MAAM,EAAE,EAAE,EACV,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"}
@@ -0,0 +1,6 @@
1
+ export { ErrorBanner } from "./ErrorBanner";
2
+ export { ErrorBannerField, ErrorBannerProvider, useErrorBannerContext, useErrorBannerDismiss, useErrorBannerField, } from "./errorBannerContext";
3
+ export { ERROR_BANNER_THEME_ROLES, type ErrorBannerThemeColorProp, } from "./errorBannerThemeRoles";
4
+ export { useErrorBanner } from "./useErrorBanner";
5
+ export type { ErrorBannerProps, FieldError } from "./types";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +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,GACpB,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"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useErrorBanner = exports.ERROR_BANNER_THEME_ROLES = exports.useErrorBannerField = exports.useErrorBannerDismiss = exports.useErrorBannerContext = exports.ErrorBannerProvider = exports.ErrorBannerField = exports.ErrorBanner = void 0;
4
+ var ErrorBanner_1 = require("./ErrorBanner");
5
+ Object.defineProperty(exports, "ErrorBanner", { enumerable: true, get: function () { return ErrorBanner_1.ErrorBanner; } });
6
+ var errorBannerContext_1 = require("./errorBannerContext");
7
+ Object.defineProperty(exports, "ErrorBannerField", { enumerable: true, get: function () { return errorBannerContext_1.ErrorBannerField; } });
8
+ Object.defineProperty(exports, "ErrorBannerProvider", { enumerable: true, get: function () { return errorBannerContext_1.ErrorBannerProvider; } });
9
+ Object.defineProperty(exports, "useErrorBannerContext", { enumerable: true, get: function () { return errorBannerContext_1.useErrorBannerContext; } });
10
+ Object.defineProperty(exports, "useErrorBannerDismiss", { enumerable: true, get: function () { return errorBannerContext_1.useErrorBannerDismiss; } });
11
+ Object.defineProperty(exports, "useErrorBannerField", { enumerable: true, get: function () { return errorBannerContext_1.useErrorBannerField; } });
12
+ var errorBannerThemeRoles_1 = require("./errorBannerThemeRoles");
13
+ Object.defineProperty(exports, "ERROR_BANNER_THEME_ROLES", { enumerable: true, get: function () { return errorBannerThemeRoles_1.ERROR_BANNER_THEME_ROLES; } });
14
+ var useErrorBanner_1 = require("./useErrorBanner");
15
+ Object.defineProperty(exports, "useErrorBanner", { enumerable: true, get: function () { return useErrorBanner_1.useErrorBanner; } });
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/ErrorBanner/index.ts"],"names":[],"mappings":";;;AAAA,6CAA4C;AAAnC,0GAAA,WAAW,OAAA;AACpB,2DAM8B;AAL5B,sHAAA,gBAAgB,OAAA;AAChB,yHAAA,mBAAmB,OAAA;AACnB,2HAAA,qBAAqB,OAAA;AACrB,2HAAA,qBAAqB,OAAA;AACrB,yHAAA,mBAAmB,OAAA;AAErB,iEAGiC;AAF/B,iIAAA,wBAAwB,OAAA;AAG1B,mDAAkD;AAAzC,gHAAA,cAAc,OAAA"}
@@ -0,0 +1,31 @@
1
+ export type FieldError = {
2
+ /** Matches the field `name`. */
3
+ field: string;
4
+ /** Banner row, about 40 characters. */
5
+ short: string;
6
+ /** Fuller sentence for the field's accessibility hint. */
7
+ message: string;
8
+ };
9
+ export type ErrorBannerProps = {
10
+ open: boolean;
11
+ errors: readonly FieldError[];
12
+ /** Scroll the field into view. The banner stays open until dismiss or an edit. */
13
+ onJump: (field: string) => void;
14
+ onDismiss: () => void;
15
+ /** Reported so the host can scroll the field clear of the banner. */
16
+ onHeightChange?: (height: number) => void;
17
+ /** Override `useSafeAreaInsets().top`. */
18
+ safeAreaTop?: number;
19
+ paddingHorizontal?: number;
20
+ /** Defaults to theme role `errorBannerBackground`. */
21
+ backgroundColor?: string;
22
+ /** Defaults to theme role `errorBannerText`. */
23
+ textColor?: string;
24
+ /** Defaults to theme role `errorBannerSecondary`. Dismiss and arrows. */
25
+ secondaryColor?: string;
26
+ /** Defaults to theme role `errorBannerDivider`. */
27
+ dividerColor?: string;
28
+ /** Defaults to theme role `errorBannerAccent`. Megaphone disc. */
29
+ accentColor?: string;
30
+ };
31
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/ErrorBanner/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG;IACvB,gCAAgC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,SAAS,UAAU,EAAE,CAAC;IAC9B,kFAAkF;IAClF,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,qEAAqE;IACrE,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,sDAAsD;IACtD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yEAAyE;IACzE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,mDAAmD;IACnD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kEAAkE;IAClE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/components/ErrorBanner/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,13 @@
1
+ import type { FieldError } from "./types";
2
+ /**
3
+ * Open / dismiss state for a field-error banner.
4
+ * Call `present` when the runner submits. Call `dismiss` when they close it
5
+ * or edit the form. A cleared error list resets dismiss so the next failure
6
+ * can show the banner again.
7
+ */
8
+ export declare function useErrorBanner(errors: readonly FieldError[]): {
9
+ open: boolean;
10
+ dismiss: () => void;
11
+ present: () => void;
12
+ };
13
+ //# sourceMappingURL=useErrorBanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useErrorBanner.d.ts","sourceRoot":"","sources":["../../../src/components/ErrorBanner/useErrorBanner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE;;;;EAsB3D"}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useErrorBanner = useErrorBanner;
4
+ const react_1 = require("react");
5
+ const errorBannerCopy_1 = require("./errorBannerCopy");
6
+ /**
7
+ * Open / dismiss state for a field-error banner.
8
+ * Call `present` when the runner submits. Call `dismiss` when they close it
9
+ * or edit the form. A cleared error list resets dismiss so the next failure
10
+ * can show the banner again.
11
+ */
12
+ function useErrorBanner(errors) {
13
+ const [dismissed, setDismissed] = (0, react_1.useState)(false);
14
+ (0, react_1.useEffect)(() => {
15
+ if (errors.length === 0) {
16
+ setDismissed(false);
17
+ }
18
+ }, [errors.length]);
19
+ const dismiss = (0, react_1.useCallback)(() => {
20
+ setDismissed(true);
21
+ }, []);
22
+ const present = (0, react_1.useCallback)(() => {
23
+ setDismissed(false);
24
+ }, []);
25
+ return {
26
+ open: (0, errorBannerCopy_1.errorBannerOpen)(errors.length, dismissed),
27
+ dismiss,
28
+ present,
29
+ };
30
+ }
31
+ //# sourceMappingURL=useErrorBanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useErrorBanner.js","sourceRoot":"","sources":["../../../src/components/ErrorBanner/useErrorBanner.ts"],"names":[],"mappings":";;AAUA,wCAsBC;AAhCD,iCAAyD;AACzD,uDAAoD;AAGpD;;;;;GAKG;AACH,SAAgB,cAAc,CAAC,MAA6B;IAC1D,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IAElD,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IAEpB,MAAM,OAAO,GAAG,IAAA,mBAAW,EAAC,GAAG,EAAE;QAC/B,YAAY,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,OAAO,GAAG,IAAA,mBAAW,EAAC,GAAG,EAAE;QAC/B,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO;QACL,IAAI,EAAE,IAAA,iCAAe,EAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC;QAC/C,OAAO;QACP,OAAO;KACR,CAAC;AACJ,CAAC"}
@@ -6,5 +6,5 @@ export type FieldChromeProps = FieldSharedProps & {
6
6
  minHeight?: number;
7
7
  textAlignVertical?: TextInputProps["textAlignVertical"];
8
8
  };
9
- export declare function FieldChrome({ value, onChangeText, borderColor: borderColorProp, focusedBorderColor: focusedBorderColorProp, errorColor: errorColorProp, textColor: textColorProp, labelColor: labelColorProp, placeholderColor: placeholderColorProp, backgroundColor: backgroundColorProp, label, description, error, placeholder, radius, editable, clearIcon, onClear, style, inputStyle, multiline, numberOfLines, minHeight, textAlignVertical, secureTextEntry, keyboardType, autoCapitalize, autoComplete, textContentType, onFocus, onBlur, ref, }: FieldChromeProps): import("react").JSX.Element;
9
+ export declare function FieldChrome({ name, value, onChangeText, borderColor: borderColorProp, focusedBorderColor: focusedBorderColorProp, errorColor: errorColorProp, textColor: textColorProp, labelColor: labelColorProp, placeholderColor: placeholderColorProp, backgroundColor: backgroundColorProp, label, description, error, placeholder, radius, editable, clearIcon, onClear, style, inputStyle, multiline, numberOfLines, minHeight, textAlignVertical, secureTextEntry, keyboardType, autoCapitalize, autoComplete, textContentType, onFocus, onBlur, ref, }: FieldChromeProps): import("react").JSX.Element;
10
10
  //# sourceMappingURL=fieldChrome.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fieldChrome.d.ts","sourceRoot":"","sources":["../../../src/components/Field/fieldChrome.tsx"],"names":[],"mappings":"AACA,OAAO,EAML,KAAK,cAAc,EACpB,MAAM,cAAc,CAAC;AAOtB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAGhD,MAAM,MAAM,gBAAgB,GAAG,gBAAgB,GAAG;IAChD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,cAAc,CAAC,mBAAmB,CAAC,CAAC;CACzD,CAAC;AAEF,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,YAAY,EACZ,WAAW,EAAE,eAAe,EAC5B,kBAAkB,EAAE,sBAAsB,EAC1C,UAAU,EAAE,cAAc,EAC1B,SAAS,EAAE,aAAa,EACxB,UAAU,EAAE,cAAc,EAC1B,gBAAgB,EAAE,oBAAoB,EACtC,eAAe,EAAE,mBAAmB,EACpC,KAAK,EACL,WAAW,EACX,KAAK,EACL,WAAW,EACX,MAAa,EACb,QAAe,EACf,SAAS,EACT,OAAO,EACP,KAAK,EACL,UAAU,EACV,SAAiB,EACjB,aAAa,EACb,SAAc,EACd,iBAAiB,EACjB,eAAe,EACf,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,eAAe,EACf,OAAO,EACP,MAAM,EACN,GAAG,GACJ,EAAE,gBAAgB,+BAyHlB"}
1
+ {"version":3,"file":"fieldChrome.d.ts","sourceRoot":"","sources":["../../../src/components/Field/fieldChrome.tsx"],"names":[],"mappings":"AACA,OAAO,EAML,KAAK,cAAc,EACpB,MAAM,cAAc,CAAC;AAWtB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAGhD,MAAM,MAAM,gBAAgB,GAAG,gBAAgB,GAAG;IAChD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,cAAc,CAAC,mBAAmB,CAAC,CAAC;CACzD,CAAC;AAEF,wBAAgB,WAAW,CAAC,EAC1B,IAAI,EACJ,KAAK,EACL,YAAY,EACZ,WAAW,EAAE,eAAe,EAC5B,kBAAkB,EAAE,sBAAsB,EAC1C,UAAU,EAAE,cAAc,EAC1B,SAAS,EAAE,aAAa,EACxB,UAAU,EAAE,cAAc,EAC1B,gBAAgB,EAAE,oBAAoB,EACtC,eAAe,EAAE,mBAAmB,EACpC,KAAK,EACL,WAAW,EACX,KAAK,EACL,WAAW,EACX,MAAa,EACb,QAAe,EACf,SAAS,EACT,OAAO,EACP,KAAK,EACL,UAAU,EACV,SAAiB,EACjB,aAAa,EACb,SAAc,EACd,iBAAiB,EACjB,eAAe,EACf,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,eAAe,EACf,OAAO,EACP,MAAM,EACN,GAAG,GACJ,EAAE,gBAAgB,+BA8IlB"}