@bacon-pos/ui 0.2.1 → 0.4.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.
Files changed (80) hide show
  1. package/lib/commonjs/components/Dialog/Dialog.js +234 -0
  2. package/lib/commonjs/components/Dialog/Dialog.js.map +1 -0
  3. package/lib/commonjs/components/Dialog/Dialog.stories.js +217 -0
  4. package/lib/commonjs/components/Dialog/Dialog.stories.js.map +1 -0
  5. package/lib/commonjs/components/Dialog/Dialog.test.js +71 -0
  6. package/lib/commonjs/components/Dialog/Dialog.test.js.map +1 -0
  7. package/lib/commonjs/components/Dialog/index.js +13 -0
  8. package/lib/commonjs/components/Dialog/index.js.map +1 -0
  9. package/lib/commonjs/components/Toast/Toast.js +184 -0
  10. package/lib/commonjs/components/Toast/Toast.js.map +1 -0
  11. package/lib/commonjs/components/Toast/Toast.stories.js +109 -0
  12. package/lib/commonjs/components/Toast/Toast.stories.js.map +1 -0
  13. package/lib/commonjs/components/Toast/Toast.test.js +70 -0
  14. package/lib/commonjs/components/Toast/Toast.test.js.map +1 -0
  15. package/lib/commonjs/components/Toast/ToastProvider.js +95 -0
  16. package/lib/commonjs/components/Toast/ToastProvider.js.map +1 -0
  17. package/lib/commonjs/components/Toast/index.js +26 -0
  18. package/lib/commonjs/components/Toast/index.js.map +1 -0
  19. package/lib/commonjs/components/_internal/ScrollArea.js +96 -0
  20. package/lib/commonjs/components/_internal/ScrollArea.js.map +1 -0
  21. package/lib/commonjs/components/index.js +33 -11
  22. package/lib/commonjs/components/index.js.map +1 -1
  23. package/lib/module/components/Dialog/Dialog.js +230 -0
  24. package/lib/module/components/Dialog/Dialog.js.map +1 -0
  25. package/lib/module/components/Dialog/Dialog.stories.js +213 -0
  26. package/lib/module/components/Dialog/Dialog.stories.js.map +1 -0
  27. package/lib/module/components/Dialog/Dialog.test.js +70 -0
  28. package/lib/module/components/Dialog/Dialog.test.js.map +1 -0
  29. package/lib/module/components/Dialog/index.js +4 -0
  30. package/lib/module/components/Dialog/index.js.map +1 -0
  31. package/lib/module/components/Toast/Toast.js +180 -0
  32. package/lib/module/components/Toast/Toast.js.map +1 -0
  33. package/lib/module/components/Toast/Toast.stories.js +105 -0
  34. package/lib/module/components/Toast/Toast.stories.js.map +1 -0
  35. package/lib/module/components/Toast/Toast.test.js +69 -0
  36. package/lib/module/components/Toast/Toast.test.js.map +1 -0
  37. package/lib/module/components/Toast/ToastProvider.js +90 -0
  38. package/lib/module/components/Toast/ToastProvider.js.map +1 -0
  39. package/lib/module/components/Toast/index.js +5 -0
  40. package/lib/module/components/Toast/index.js.map +1 -0
  41. package/lib/module/components/_internal/ScrollArea.js +92 -0
  42. package/lib/module/components/_internal/ScrollArea.js.map +1 -0
  43. package/lib/module/components/index.js +2 -0
  44. package/lib/module/components/index.js.map +1 -1
  45. package/lib/typescript/commonjs/components/Dialog/Dialog.d.ts +79 -0
  46. package/lib/typescript/commonjs/components/Dialog/Dialog.d.ts.map +1 -0
  47. package/lib/typescript/commonjs/components/Dialog/index.d.ts +2 -0
  48. package/lib/typescript/commonjs/components/Dialog/index.d.ts.map +1 -0
  49. package/lib/typescript/commonjs/components/Toast/Toast.d.ts +40 -0
  50. package/lib/typescript/commonjs/components/Toast/Toast.d.ts.map +1 -0
  51. package/lib/typescript/commonjs/components/Toast/ToastProvider.d.ts +34 -0
  52. package/lib/typescript/commonjs/components/Toast/ToastProvider.d.ts.map +1 -0
  53. package/lib/typescript/commonjs/components/Toast/index.d.ts +3 -0
  54. package/lib/typescript/commonjs/components/Toast/index.d.ts.map +1 -0
  55. package/lib/typescript/commonjs/components/_internal/ScrollArea.d.ts +20 -0
  56. package/lib/typescript/commonjs/components/_internal/ScrollArea.d.ts.map +1 -0
  57. package/lib/typescript/commonjs/components/index.d.ts +2 -0
  58. package/lib/typescript/commonjs/components/index.d.ts.map +1 -1
  59. package/lib/typescript/module/components/Dialog/Dialog.d.ts +79 -0
  60. package/lib/typescript/module/components/Dialog/Dialog.d.ts.map +1 -0
  61. package/lib/typescript/module/components/Dialog/index.d.ts +2 -0
  62. package/lib/typescript/module/components/Dialog/index.d.ts.map +1 -0
  63. package/lib/typescript/module/components/Toast/Toast.d.ts +40 -0
  64. package/lib/typescript/module/components/Toast/Toast.d.ts.map +1 -0
  65. package/lib/typescript/module/components/Toast/ToastProvider.d.ts +34 -0
  66. package/lib/typescript/module/components/Toast/ToastProvider.d.ts.map +1 -0
  67. package/lib/typescript/module/components/Toast/index.d.ts +3 -0
  68. package/lib/typescript/module/components/Toast/index.d.ts.map +1 -0
  69. package/lib/typescript/module/components/_internal/ScrollArea.d.ts +20 -0
  70. package/lib/typescript/module/components/_internal/ScrollArea.d.ts.map +1 -0
  71. package/lib/typescript/module/components/index.d.ts +2 -0
  72. package/lib/typescript/module/components/index.d.ts.map +1 -1
  73. package/package.json +1 -1
  74. package/src/components/Dialog/Dialog.tsx +299 -0
  75. package/src/components/Dialog/index.ts +6 -0
  76. package/src/components/Toast/Toast.tsx +173 -0
  77. package/src/components/Toast/ToastProvider.tsx +126 -0
  78. package/src/components/Toast/index.ts +7 -0
  79. package/src/components/_internal/ScrollArea.tsx +95 -0
  80. package/src/components/index.ts +2 -0
@@ -0,0 +1,184 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ToastView = ToastView;
7
+ var _react = require("react");
8
+ var _reactNative = require("react-native");
9
+ var _index = require("../../theme/index.js");
10
+ var _palette = require("../../theme/palette.js");
11
+ var _Icon = require("../Icon/Icon.js");
12
+ var _Text = require("../Text/Text.js");
13
+ var _jsxRuntime = require("react/jsx-runtime");
14
+ /** Built-in statuses. More can be added later, or use custom colors. */
15
+
16
+ function statusColors(theme, status) {
17
+ switch (status) {
18
+ case 'success':
19
+ return {
20
+ bg: theme.colors.feedback.successSubtle,
21
+ fg: theme.colors.feedback.success
22
+ };
23
+ case 'error':
24
+ return {
25
+ bg: theme.colors.feedback.errorSubtle,
26
+ fg: theme.colors.feedback.error
27
+ };
28
+ case 'warning':
29
+ return {
30
+ bg: theme.colors.feedback.warningSubtle,
31
+ fg: _palette.palette.warning[600]
32
+ };
33
+ case 'info':
34
+ default:
35
+ return {
36
+ bg: theme.colors.background.subtle,
37
+ fg: _palette.palette.neutral[500]
38
+ };
39
+ }
40
+ }
41
+ /**
42
+ * A single toast with an elegant slide + fade in/out. Self-contained: it runs
43
+ * its own duration timer and exit animation. Managed by `ToastProvider`.
44
+ */
45
+ function ToastView({
46
+ id,
47
+ message,
48
+ status = 'info',
49
+ icon,
50
+ duration = 3000,
51
+ height,
52
+ width,
53
+ showProgress = false,
54
+ backgroundColor,
55
+ color,
56
+ progressColor,
57
+ position,
58
+ leaving,
59
+ onRequestClose,
60
+ onRemove,
61
+ maxWidth
62
+ }) {
63
+ const theme = (0, _index.useTheme)();
64
+ const base = statusColors(theme, status);
65
+ const bg = backgroundColor ?? base.bg;
66
+ const fg = color ?? base.fg;
67
+ const from = position === 'top' ? -12 : 12;
68
+ const translateY = (0, _react.useRef)(new _reactNative.Animated.Value(from)).current;
69
+ const opacity = (0, _react.useRef)(new _reactNative.Animated.Value(0)).current;
70
+ const remaining = (0, _react.useRef)(new _reactNative.Animated.Value(1)).current;
71
+ const [contentW, setContentW] = (0, _react.useState)(0);
72
+ const withProgress = showProgress && duration > 0;
73
+ (0, _react.useEffect)(() => {
74
+ _reactNative.Animated.parallel([_reactNative.Animated.timing(opacity, {
75
+ toValue: 1,
76
+ duration: 260,
77
+ easing: _reactNative.Easing.out(_reactNative.Easing.cubic),
78
+ useNativeDriver: true
79
+ }), _reactNative.Animated.timing(translateY, {
80
+ toValue: 0,
81
+ duration: 260,
82
+ easing: _reactNative.Easing.out(_reactNative.Easing.cubic),
83
+ useNativeDriver: true
84
+ })]).start();
85
+ if (withProgress) {
86
+ _reactNative.Animated.timing(remaining, {
87
+ toValue: 0,
88
+ duration,
89
+ easing: _reactNative.Easing.linear,
90
+ useNativeDriver: false
91
+ }).start();
92
+ }
93
+ if (duration > 0) {
94
+ const timer = setTimeout(() => onRequestClose(id), duration);
95
+ return () => clearTimeout(timer);
96
+ }
97
+ return undefined;
98
+ // Mount only.
99
+ // eslint-disable-next-line react-hooks/exhaustive-deps
100
+ }, []);
101
+ (0, _react.useEffect)(() => {
102
+ if (!leaving) return;
103
+ _reactNative.Animated.parallel([_reactNative.Animated.timing(opacity, {
104
+ toValue: 0,
105
+ duration: 200,
106
+ easing: _reactNative.Easing.in(_reactNative.Easing.cubic),
107
+ useNativeDriver: true
108
+ }), _reactNative.Animated.timing(translateY, {
109
+ toValue: from,
110
+ duration: 200,
111
+ easing: _reactNative.Easing.in(_reactNative.Easing.cubic),
112
+ useNativeDriver: true
113
+ })]).start(() => onRemove(id));
114
+ // eslint-disable-next-line react-hooks/exhaustive-deps
115
+ }, [leaving]);
116
+ const pressStyle = {
117
+ flexDirection: 'row',
118
+ alignItems: 'center',
119
+ justifyContent: 'center',
120
+ gap: 12,
121
+ paddingHorizontal: 20,
122
+ paddingVertical: height ? 0 : 20,
123
+ borderRadius: 16,
124
+ backgroundColor: bg,
125
+ overflow: 'hidden',
126
+ ...(height ? {
127
+ height
128
+ } : null)
129
+ };
130
+
131
+ // Fixed width if given, otherwise full width (capped by the provider maxWidth).
132
+ const outerWidth = width != null ? {
133
+ width
134
+ } : {
135
+ width: '100%',
136
+ maxWidth
137
+ };
138
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Animated.View, {
139
+ accessibilityRole: "alert",
140
+ accessibilityLiveRegion: "polite",
141
+ style: {
142
+ opacity,
143
+ transform: [{
144
+ translateY
145
+ }],
146
+ ...outerWidth
147
+ },
148
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Pressable, {
149
+ onPress: () => onRequestClose(id),
150
+ onLayout: e => setContentW(e.nativeEvent.layout.width),
151
+ style: pressStyle,
152
+ children: [icon ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_Icon.Icon, {
153
+ name: icon,
154
+ size: 24,
155
+ color: fg
156
+ }) : null, /*#__PURE__*/(0, _jsxRuntime.jsx)(_Text.Text, {
157
+ variant: "bodyLarge",
158
+ weight: "medium",
159
+ color: fg,
160
+ numberOfLines: 1,
161
+ align: "center",
162
+ style: {
163
+ flexShrink: 1
164
+ },
165
+ children: message
166
+ }), withProgress ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Animated.View, {
167
+ pointerEvents: "none",
168
+ style: {
169
+ position: 'absolute',
170
+ left: 0,
171
+ bottom: 0,
172
+ height: 3,
173
+ borderRadius: 3,
174
+ backgroundColor: progressColor ?? fg,
175
+ width: remaining.interpolate({
176
+ inputRange: [0, 1],
177
+ outputRange: [0, contentW]
178
+ })
179
+ }
180
+ }) : null]
181
+ })
182
+ });
183
+ }
184
+ //# sourceMappingURL=Toast.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","require","_reactNative","_index","_palette","_Icon","_Text","_jsxRuntime","statusColors","theme","status","bg","colors","feedback","successSubtle","fg","success","errorSubtle","error","warningSubtle","palette","warning","background","subtle","neutral","ToastView","id","message","icon","duration","height","width","showProgress","backgroundColor","color","progressColor","position","leaving","onRequestClose","onRemove","maxWidth","useTheme","base","from","translateY","useRef","Animated","Value","current","opacity","remaining","contentW","setContentW","useState","withProgress","useEffect","parallel","timing","toValue","easing","Easing","out","cubic","useNativeDriver","start","linear","timer","setTimeout","clearTimeout","undefined","in","pressStyle","flexDirection","alignItems","justifyContent","gap","paddingHorizontal","paddingVertical","borderRadius","overflow","outerWidth","jsx","View","accessibilityRole","accessibilityLiveRegion","style","transform","children","jsxs","Pressable","onPress","onLayout","e","nativeEvent","layout","Icon","name","size","Text","variant","weight","numberOfLines","align","flexShrink","pointerEvents","left","bottom","interpolate","inputRange","outputRange"],"sourceRoot":"..\\..\\..\\..\\src","sources":["components/Toast/Toast.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = exports.Top = exports.Bottom = void 0;
7
+ var _reactNative = require("react-native");
8
+ var _ToastProvider = require("./ToastProvider.js");
9
+ var _Button = require("../Button/Button.js");
10
+ var _jsxRuntime = require("react/jsx-runtime");
11
+ const meta = {
12
+ title: 'Components/Toast',
13
+ component: _ToastProvider.ToastProvider
14
+ };
15
+ var _default = exports.default = meta;
16
+ function Triggers() {
17
+ const {
18
+ show,
19
+ hideAll
20
+ } = (0, _ToastProvider.useToast)();
21
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
22
+ style: {
23
+ gap: 12,
24
+ padding: 24
25
+ },
26
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.Button, {
27
+ label: "Success",
28
+ variant: "success",
29
+ onPress: () => show({
30
+ message: 'Clocked out successfully. 11:58 AM',
31
+ status: 'success',
32
+ icon: 'check'
33
+ })
34
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.Button, {
35
+ label: "Error",
36
+ variant: "destructive",
37
+ onPress: () => show({
38
+ message: 'Something went wrong, please try again',
39
+ status: 'error',
40
+ icon: 'close'
41
+ })
42
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.Button, {
43
+ label: "Warning",
44
+ variant: "secondary",
45
+ onPress: () => show({
46
+ message: 'Your session is about to expire',
47
+ status: 'warning',
48
+ icon: 'info'
49
+ })
50
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.Button, {
51
+ label: "Info (no icon)",
52
+ variant: "secondary",
53
+ onPress: () => show({
54
+ message: 'A new update is available',
55
+ status: 'info'
56
+ })
57
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.Button, {
58
+ label: "Long text (ellipsis)",
59
+ variant: "secondary",
60
+ onPress: () => show({
61
+ message: 'This is a very long toast message that should be truncated with an ellipsis when it exceeds the available width of the toast',
62
+ status: 'info'
63
+ })
64
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.Button, {
65
+ label: "With countdown bar",
66
+ variant: "secondary",
67
+ onPress: () => show({
68
+ message: 'Saving… this will dismiss soon',
69
+ status: 'success',
70
+ icon: 'check',
71
+ showProgress: true,
72
+ duration: 4000
73
+ })
74
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.Button, {
75
+ label: "Custom width (280)",
76
+ variant: "secondary",
77
+ onPress: () => show({
78
+ message: 'Compact toast',
79
+ status: 'info',
80
+ width: 280
81
+ })
82
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.Button, {
83
+ label: "Sticky (duration 0)",
84
+ variant: "secondary",
85
+ onPress: () => show({
86
+ message: 'I stay until dismissed — tap me',
87
+ status: 'warning',
88
+ duration: 0
89
+ })
90
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.Button, {
91
+ label: "Hide all",
92
+ variant: "inverse",
93
+ onPress: hideAll
94
+ })]
95
+ });
96
+ }
97
+ const Bottom = exports.Bottom = {
98
+ render: () => /*#__PURE__*/(0, _jsxRuntime.jsx)(_ToastProvider.ToastProvider, {
99
+ position: "bottom",
100
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(Triggers, {})
101
+ })
102
+ };
103
+ const Top = exports.Top = {
104
+ render: () => /*#__PURE__*/(0, _jsxRuntime.jsx)(_ToastProvider.ToastProvider, {
105
+ position: "top",
106
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(Triggers, {})
107
+ })
108
+ };
109
+ //# sourceMappingURL=Toast.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_reactNative","require","_ToastProvider","_Button","_jsxRuntime","meta","title","component","ToastProvider","_default","exports","default","Triggers","show","hideAll","useToast","jsxs","View","style","gap","padding","children","jsx","Button","label","variant","onPress","message","status","icon","showProgress","duration","width","Bottom","render","position","Top"],"sourceRoot":"..\\..\\..\\..\\src","sources":["components/Toast/Toast.stories.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+
3
+ var _react = _interopRequireDefault(require("react"));
4
+ var _reactNative = require("@testing-library/react-native");
5
+ var _ToastProvider = require("./ToastProvider.js");
6
+ var _Button = require("../Button/Button.js");
7
+ var _index = require("../../theme/index.js");
8
+ var _jsxRuntime = require("react/jsx-runtime");
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
+ function Harness() {
11
+ const {
12
+ show,
13
+ hideAll
14
+ } = (0, _ToastProvider.useToast)();
15
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
16
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.Button, {
17
+ label: "add",
18
+ onPress: () => show({
19
+ message: `Toast ${Date.now()}`,
20
+ duration: 0
21
+ })
22
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.Button, {
23
+ label: "named",
24
+ onPress: () => show({
25
+ message: 'Saved!',
26
+ status: 'success',
27
+ duration: 0
28
+ })
29
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.Button, {
30
+ label: "clear",
31
+ onPress: hideAll
32
+ })]
33
+ });
34
+ }
35
+ function renderProvider(maxVisible = 2) {
36
+ return (0, _reactNative.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(_index.ThemeProvider, {
37
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_ToastProvider.ToastProvider, {
38
+ maxVisible: maxVisible,
39
+ duration: 0,
40
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(Harness, {})
41
+ })
42
+ }));
43
+ }
44
+ describe('Toast', () => {
45
+ it('shows a toast when triggered', () => {
46
+ renderProvider();
47
+ _reactNative.fireEvent.press(_reactNative.screen.getByText('named'));
48
+ expect(_reactNative.screen.getByText('Saved!')).toBeTruthy();
49
+ });
50
+ it('keeps at most maxVisible toasts', () => {
51
+ renderProvider(2);
52
+ const add = _reactNative.screen.getByText('add');
53
+ _reactNative.fireEvent.press(add);
54
+ _reactNative.fireEvent.press(add);
55
+ _reactNative.fireEvent.press(add);
56
+ // 3 shown, but only 2 remain (plus the two trigger buttons' labels aren't "Toast ...")
57
+ const toasts = _reactNative.screen.queryAllByText(/^Toast /);
58
+ expect(toasts.length).toBe(2);
59
+ });
60
+ it('useToast throws outside a provider', () => {
61
+ const Boom = () => {
62
+ (0, _ToastProvider.useToast)();
63
+ return null;
64
+ };
65
+ const spy = jest.spyOn(console, 'error').mockImplementation(() => {});
66
+ expect(() => (0, _reactNative.render)(/*#__PURE__*/(0, _jsxRuntime.jsx)(Boom, {}))).toThrow(/ToastProvider/);
67
+ spy.mockRestore();
68
+ });
69
+ });
70
+ //# sourceMappingURL=Toast.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_ToastProvider","_Button","_index","_jsxRuntime","e","__esModule","default","Harness","show","hideAll","useToast","jsxs","Fragment","children","jsx","Button","label","onPress","message","Date","now","duration","status","renderProvider","maxVisible","render","ThemeProvider","ToastProvider","describe","it","fireEvent","press","screen","getByText","expect","toBeTruthy","add","toasts","queryAllByText","length","toBe","Boom","spy","jest","spyOn","console","mockImplementation","toThrow","mockRestore"],"sourceRoot":"..\\..\\..\\..\\src","sources":["components/Toast/Toast.test.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ToastProvider = ToastProvider;
7
+ exports.useToast = useToast;
8
+ var _react = require("react");
9
+ var _reactNative = require("react-native");
10
+ var _Toast = require("./Toast.js");
11
+ var _jsxRuntime = require("react/jsx-runtime");
12
+ const ToastContext = /*#__PURE__*/(0, _react.createContext)(null);
13
+ /**
14
+ * Provides the imperative toast API and renders the toast stack. Wrap your app
15
+ * (inside ThemeProvider). Trigger toasts with `useToast().show(...)`. Newest
16
+ * toasts appear nearest the edge; at most `maxVisible` show at once.
17
+ */
18
+ function ToastProvider({
19
+ children,
20
+ position = 'bottom',
21
+ maxVisible = 2,
22
+ duration = 3000,
23
+ offset = 24,
24
+ gap = 8,
25
+ maxWidth
26
+ }) {
27
+ const [toasts, setToasts] = (0, _react.useState)([]);
28
+ const idRef = (0, _react.useRef)(0);
29
+ const show = (0, _react.useCallback)(options => {
30
+ const id = idRef.current += 1;
31
+ setToasts(prev => {
32
+ const next = [...prev, {
33
+ leaving: false,
34
+ duration,
35
+ ...options,
36
+ id
37
+ }];
38
+ return next.length > maxVisible ? next.slice(next.length - maxVisible) : next;
39
+ });
40
+ return id;
41
+ }, [duration, maxVisible]);
42
+ const hide = (0, _react.useCallback)(id => {
43
+ setToasts(prev => prev.map(t => t.id === id ? {
44
+ ...t,
45
+ leaving: true
46
+ } : t));
47
+ }, []);
48
+ const remove = (0, _react.useCallback)(id => {
49
+ setToasts(prev => prev.filter(t => t.id !== id));
50
+ }, []);
51
+ const hideAll = (0, _react.useCallback)(() => {
52
+ setToasts(prev => prev.map(t => ({
53
+ ...t,
54
+ leaving: true
55
+ })));
56
+ }, []);
57
+ const api = (0, _react.useMemo)(() => ({
58
+ show,
59
+ hide,
60
+ hideAll
61
+ }), [show, hide, hideAll]);
62
+
63
+ // Newest nearest the edge.
64
+ const display = position === 'top' ? [...toasts].reverse() : toasts;
65
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(ToastContext.Provider, {
66
+ value: api,
67
+ children: [children, /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
68
+ pointerEvents: "box-none",
69
+ style: {
70
+ position: 'absolute',
71
+ left: 0,
72
+ right: 0,
73
+ [position]: offset,
74
+ alignItems: 'center',
75
+ paddingHorizontal: 16,
76
+ gap
77
+ },
78
+ children: display.map(t => /*#__PURE__*/(0, _jsxRuntime.jsx)(_Toast.ToastView, {
79
+ ...t,
80
+ position: position,
81
+ maxWidth: maxWidth,
82
+ onRequestClose: hide,
83
+ onRemove: remove
84
+ }, t.id))
85
+ })]
86
+ });
87
+ }
88
+
89
+ /** Access the toast API. Must be used within a `ToastProvider`. */
90
+ function useToast() {
91
+ const ctx = (0, _react.useContext)(ToastContext);
92
+ if (!ctx) throw new Error('useToast must be used within a ToastProvider');
93
+ return ctx;
94
+ }
95
+ //# sourceMappingURL=ToastProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","require","_reactNative","_Toast","_jsxRuntime","ToastContext","createContext","ToastProvider","children","position","maxVisible","duration","offset","gap","maxWidth","toasts","setToasts","useState","idRef","useRef","show","useCallback","options","id","current","prev","next","leaving","length","slice","hide","map","t","remove","filter","hideAll","api","useMemo","display","reverse","jsxs","Provider","value","jsx","View","pointerEvents","style","left","right","alignItems","paddingHorizontal","ToastView","onRequestClose","onRemove","useToast","ctx","useContext","Error"],"sourceRoot":"..\\..\\..\\..\\src","sources":["components/Toast/ToastProvider.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "ToastProvider", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _ToastProvider.ToastProvider;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "ToastView", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _Toast.ToastView;
16
+ }
17
+ });
18
+ Object.defineProperty(exports, "useToast", {
19
+ enumerable: true,
20
+ get: function () {
21
+ return _ToastProvider.useToast;
22
+ }
23
+ });
24
+ var _Toast = require("./Toast.js");
25
+ var _ToastProvider = require("./ToastProvider.js");
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_Toast","require","_ToastProvider"],"sourceRoot":"..\\..\\..\\..\\src","sources":["components/Toast/index.ts"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,cAAA,GAAAD,OAAA","ignoreList":[]}
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ScrollArea = ScrollArea;
7
+ var _react = require("react");
8
+ var _reactNative = require("react-native");
9
+ var _jsxRuntime = require("react/jsx-runtime");
10
+ /**
11
+ * ScrollView with an elegant custom vertical indicator: thin, rounded, colored,
12
+ * and only visible while scrolling (fades out when idle). The native indicator
13
+ * is hidden so it looks the same on iOS, Android and web.
14
+ */
15
+ function ScrollArea({
16
+ children,
17
+ indicatorColor,
18
+ indicatorWidth = 4,
19
+ keyboardShouldPersistTaps,
20
+ keyboardDismissMode,
21
+ style,
22
+ contentContainerStyle
23
+ }) {
24
+ const [viewportH, setViewportH] = (0, _react.useState)(0);
25
+ const [contentH, setContentH] = (0, _react.useState)(0);
26
+ const scrollY = (0, _react.useRef)(new _reactNative.Animated.Value(0)).current;
27
+ const opacity = (0, _react.useRef)(new _reactNative.Animated.Value(0)).current;
28
+ const hideTimer = (0, _react.useRef)(null);
29
+ const scrollable = contentH > viewportH + 1;
30
+ const thumbH = scrollable ? Math.max(24, viewportH / contentH * viewportH) : 0;
31
+ const maxScroll = Math.max(1, contentH - viewportH);
32
+ const translateY = scrollY.interpolate({
33
+ inputRange: [0, maxScroll],
34
+ outputRange: [0, viewportH - thumbH],
35
+ extrapolate: 'clamp'
36
+ });
37
+ const reveal = () => {
38
+ _reactNative.Animated.timing(opacity, {
39
+ toValue: 1,
40
+ duration: 120,
41
+ useNativeDriver: true
42
+ }).start();
43
+ if (hideTimer.current) clearTimeout(hideTimer.current);
44
+ hideTimer.current = setTimeout(() => {
45
+ _reactNative.Animated.timing(opacity, {
46
+ toValue: 0,
47
+ duration: 400,
48
+ useNativeDriver: true
49
+ }).start();
50
+ }, 900);
51
+ };
52
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Animated.View, {
53
+ style: [{
54
+ position: 'relative'
55
+ }, style],
56
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Animated.ScrollView, {
57
+ style: {
58
+ flexShrink: 1
59
+ },
60
+ contentContainerStyle: contentContainerStyle,
61
+ showsVerticalScrollIndicator: false,
62
+ scrollEventThrottle: 16,
63
+ keyboardShouldPersistTaps: keyboardShouldPersistTaps,
64
+ keyboardDismissMode: keyboardDismissMode,
65
+ onLayout: e => setViewportH(e.nativeEvent.layout.height),
66
+ onContentSizeChange: (_w, h) => setContentH(h),
67
+ onScroll: _reactNative.Animated.event([{
68
+ nativeEvent: {
69
+ contentOffset: {
70
+ y: scrollY
71
+ }
72
+ }
73
+ }], {
74
+ useNativeDriver: true,
75
+ listener: _e => reveal()
76
+ }),
77
+ children: children
78
+ }), scrollable ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Animated.View, {
79
+ pointerEvents: "none",
80
+ style: {
81
+ position: 'absolute',
82
+ top: 0,
83
+ right: 2,
84
+ width: indicatorWidth,
85
+ height: thumbH,
86
+ borderRadius: indicatorWidth / 2,
87
+ backgroundColor: indicatorColor,
88
+ opacity,
89
+ transform: [{
90
+ translateY
91
+ }]
92
+ }
93
+ }) : null]
94
+ });
95
+ }
96
+ //# sourceMappingURL=ScrollArea.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","require","_reactNative","_jsxRuntime","ScrollArea","children","indicatorColor","indicatorWidth","keyboardShouldPersistTaps","keyboardDismissMode","style","contentContainerStyle","viewportH","setViewportH","useState","contentH","setContentH","scrollY","useRef","Animated","Value","current","opacity","hideTimer","scrollable","thumbH","Math","max","maxScroll","translateY","interpolate","inputRange","outputRange","extrapolate","reveal","timing","toValue","duration","useNativeDriver","start","clearTimeout","setTimeout","jsxs","View","position","jsx","ScrollView","flexShrink","showsVerticalScrollIndicator","scrollEventThrottle","onLayout","e","nativeEvent","layout","height","onContentSizeChange","_w","h","onScroll","event","contentOffset","y","listener","_e","pointerEvents","top","right","width","borderRadius","backgroundColor","transform"],"sourceRoot":"..\\..\\..\\..\\src","sources":["components/_internal/ScrollArea.tsx"],"mappings":"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","ignoreList":[]}