@bacon-pos/ui 0.5.1 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (157) hide show
  1. package/lib/commonjs/components/Dropdown/Dropdown.js +282 -0
  2. package/lib/commonjs/components/Dropdown/Dropdown.js.map +1 -0
  3. package/lib/commonjs/components/Dropdown/Dropdown.stories.js +519 -0
  4. package/lib/commonjs/components/Dropdown/Dropdown.stories.js.map +1 -0
  5. package/lib/commonjs/components/Dropdown/Dropdown.test.js +113 -0
  6. package/lib/commonjs/components/Dropdown/Dropdown.test.js.map +1 -0
  7. package/lib/commonjs/components/Dropdown/index.js +19 -0
  8. package/lib/commonjs/components/Dropdown/index.js.map +1 -0
  9. package/lib/commonjs/components/Menu/Menu.js +214 -0
  10. package/lib/commonjs/components/Menu/Menu.js.map +1 -0
  11. package/lib/commonjs/components/Menu/Menu.test.js +71 -0
  12. package/lib/commonjs/components/Menu/Menu.test.js.map +1 -0
  13. package/lib/commonjs/components/Menu/MenuButton.js +73 -0
  14. package/lib/commonjs/components/Menu/MenuButton.js.map +1 -0
  15. package/lib/commonjs/components/Menu/MenuButton.stories.js +166 -0
  16. package/lib/commonjs/components/Menu/MenuButton.stories.js.map +1 -0
  17. package/lib/commonjs/components/Menu/SelectButton.js +143 -0
  18. package/lib/commonjs/components/Menu/SelectButton.js.map +1 -0
  19. package/lib/commonjs/components/Menu/SelectButton.stories.js +116 -0
  20. package/lib/commonjs/components/Menu/SelectButton.stories.js.map +1 -0
  21. package/lib/commonjs/components/Menu/SelectButton.test.js +80 -0
  22. package/lib/commonjs/components/Menu/SelectButton.test.js.map +1 -0
  23. package/lib/commonjs/components/Menu/UserMenu.js +73 -0
  24. package/lib/commonjs/components/Menu/UserMenu.js.map +1 -0
  25. package/lib/commonjs/components/Menu/UserMenu.stories.js +85 -0
  26. package/lib/commonjs/components/Menu/UserMenu.stories.js.map +1 -0
  27. package/lib/commonjs/components/Menu/UserMenu.test.js +52 -0
  28. package/lib/commonjs/components/Menu/UserMenu.test.js.map +1 -0
  29. package/lib/commonjs/components/Menu/index.js +34 -0
  30. package/lib/commonjs/components/Menu/index.js.map +1 -0
  31. package/lib/commonjs/components/Select/Select.js +246 -0
  32. package/lib/commonjs/components/Select/Select.js.map +1 -0
  33. package/lib/commonjs/components/Select/Select.stories.js +221 -0
  34. package/lib/commonjs/components/Select/Select.stories.js.map +1 -0
  35. package/lib/commonjs/components/Select/Select.test.js +165 -0
  36. package/lib/commonjs/components/Select/Select.test.js.map +1 -0
  37. package/lib/commonjs/components/Select/index.js +13 -0
  38. package/lib/commonjs/components/Select/index.js.map +1 -0
  39. package/lib/commonjs/components/UserChip/UserChip.js +121 -0
  40. package/lib/commonjs/components/UserChip/UserChip.js.map +1 -0
  41. package/lib/commonjs/components/UserChip/UserChip.stories.js +153 -0
  42. package/lib/commonjs/components/UserChip/UserChip.stories.js.map +1 -0
  43. package/lib/commonjs/components/UserChip/UserChip.test.js +59 -0
  44. package/lib/commonjs/components/UserChip/UserChip.test.js.map +1 -0
  45. package/lib/commonjs/components/UserChip/index.js +13 -0
  46. package/lib/commonjs/components/UserChip/index.js.map +1 -0
  47. package/lib/commonjs/components/index.js +57 -13
  48. package/lib/commonjs/components/index.js.map +1 -1
  49. package/lib/module/components/Dropdown/Dropdown.js +277 -0
  50. package/lib/module/components/Dropdown/Dropdown.js.map +1 -0
  51. package/lib/module/components/Dropdown/Dropdown.stories.js +515 -0
  52. package/lib/module/components/Dropdown/Dropdown.stories.js.map +1 -0
  53. package/lib/module/components/Dropdown/Dropdown.test.js +113 -0
  54. package/lib/module/components/Dropdown/Dropdown.test.js.map +1 -0
  55. package/lib/module/components/Dropdown/index.js +4 -0
  56. package/lib/module/components/Dropdown/index.js.map +1 -0
  57. package/lib/module/components/Menu/Menu.js +210 -0
  58. package/lib/module/components/Menu/Menu.js.map +1 -0
  59. package/lib/module/components/Menu/Menu.test.js +71 -0
  60. package/lib/module/components/Menu/Menu.test.js.map +1 -0
  61. package/lib/module/components/Menu/MenuButton.js +69 -0
  62. package/lib/module/components/Menu/MenuButton.js.map +1 -0
  63. package/lib/module/components/Menu/MenuButton.stories.js +162 -0
  64. package/lib/module/components/Menu/MenuButton.stories.js.map +1 -0
  65. package/lib/module/components/Menu/SelectButton.js +139 -0
  66. package/lib/module/components/Menu/SelectButton.js.map +1 -0
  67. package/lib/module/components/Menu/SelectButton.stories.js +112 -0
  68. package/lib/module/components/Menu/SelectButton.stories.js.map +1 -0
  69. package/lib/module/components/Menu/SelectButton.test.js +80 -0
  70. package/lib/module/components/Menu/SelectButton.test.js.map +1 -0
  71. package/lib/module/components/Menu/UserMenu.js +69 -0
  72. package/lib/module/components/Menu/UserMenu.js.map +1 -0
  73. package/lib/module/components/Menu/UserMenu.stories.js +81 -0
  74. package/lib/module/components/Menu/UserMenu.stories.js.map +1 -0
  75. package/lib/module/components/Menu/UserMenu.test.js +52 -0
  76. package/lib/module/components/Menu/UserMenu.test.js.map +1 -0
  77. package/lib/module/components/Menu/index.js +7 -0
  78. package/lib/module/components/Menu/index.js.map +1 -0
  79. package/lib/module/components/Select/Select.js +244 -0
  80. package/lib/module/components/Select/Select.js.map +1 -0
  81. package/lib/module/components/Select/Select.stories.js +217 -0
  82. package/lib/module/components/Select/Select.stories.js.map +1 -0
  83. package/lib/module/components/Select/Select.test.js +165 -0
  84. package/lib/module/components/Select/Select.test.js.map +1 -0
  85. package/lib/module/components/Select/index.js +4 -0
  86. package/lib/module/components/Select/index.js.map +1 -0
  87. package/lib/module/components/UserChip/UserChip.js +117 -0
  88. package/lib/module/components/UserChip/UserChip.js.map +1 -0
  89. package/lib/module/components/UserChip/UserChip.stories.js +149 -0
  90. package/lib/module/components/UserChip/UserChip.stories.js.map +1 -0
  91. package/lib/module/components/UserChip/UserChip.test.js +59 -0
  92. package/lib/module/components/UserChip/UserChip.test.js.map +1 -0
  93. package/lib/module/components/UserChip/index.js +4 -0
  94. package/lib/module/components/UserChip/index.js.map +1 -0
  95. package/lib/module/components/index.js +4 -0
  96. package/lib/module/components/index.js.map +1 -1
  97. package/lib/typescript/commonjs/components/Dropdown/Dropdown.d.ts +105 -0
  98. package/lib/typescript/commonjs/components/Dropdown/Dropdown.d.ts.map +1 -0
  99. package/lib/typescript/commonjs/components/Dropdown/index.d.ts +3 -0
  100. package/lib/typescript/commonjs/components/Dropdown/index.d.ts.map +1 -0
  101. package/lib/typescript/commonjs/components/Menu/Menu.d.ts +66 -0
  102. package/lib/typescript/commonjs/components/Menu/Menu.d.ts.map +1 -0
  103. package/lib/typescript/commonjs/components/Menu/MenuButton.d.ts +46 -0
  104. package/lib/typescript/commonjs/components/Menu/MenuButton.d.ts.map +1 -0
  105. package/lib/typescript/commonjs/components/Menu/SelectButton.d.ts +60 -0
  106. package/lib/typescript/commonjs/components/Menu/SelectButton.d.ts.map +1 -0
  107. package/lib/typescript/commonjs/components/Menu/UserMenu.d.ts +46 -0
  108. package/lib/typescript/commonjs/components/Menu/UserMenu.d.ts.map +1 -0
  109. package/lib/typescript/commonjs/components/Menu/index.d.ts +9 -0
  110. package/lib/typescript/commonjs/components/Menu/index.d.ts.map +1 -0
  111. package/lib/typescript/commonjs/components/Select/Select.d.ts +73 -0
  112. package/lib/typescript/commonjs/components/Select/Select.d.ts.map +1 -0
  113. package/lib/typescript/commonjs/components/Select/index.d.ts +3 -0
  114. package/lib/typescript/commonjs/components/Select/index.d.ts.map +1 -0
  115. package/lib/typescript/commonjs/components/UserChip/UserChip.d.ts +33 -0
  116. package/lib/typescript/commonjs/components/UserChip/UserChip.d.ts.map +1 -0
  117. package/lib/typescript/commonjs/components/UserChip/index.d.ts +3 -0
  118. package/lib/typescript/commonjs/components/UserChip/index.d.ts.map +1 -0
  119. package/lib/typescript/commonjs/components/index.d.ts +4 -0
  120. package/lib/typescript/commonjs/components/index.d.ts.map +1 -1
  121. package/lib/typescript/module/components/Dropdown/Dropdown.d.ts +105 -0
  122. package/lib/typescript/module/components/Dropdown/Dropdown.d.ts.map +1 -0
  123. package/lib/typescript/module/components/Dropdown/index.d.ts +3 -0
  124. package/lib/typescript/module/components/Dropdown/index.d.ts.map +1 -0
  125. package/lib/typescript/module/components/Menu/Menu.d.ts +66 -0
  126. package/lib/typescript/module/components/Menu/Menu.d.ts.map +1 -0
  127. package/lib/typescript/module/components/Menu/MenuButton.d.ts +46 -0
  128. package/lib/typescript/module/components/Menu/MenuButton.d.ts.map +1 -0
  129. package/lib/typescript/module/components/Menu/SelectButton.d.ts +60 -0
  130. package/lib/typescript/module/components/Menu/SelectButton.d.ts.map +1 -0
  131. package/lib/typescript/module/components/Menu/UserMenu.d.ts +46 -0
  132. package/lib/typescript/module/components/Menu/UserMenu.d.ts.map +1 -0
  133. package/lib/typescript/module/components/Menu/index.d.ts +9 -0
  134. package/lib/typescript/module/components/Menu/index.d.ts.map +1 -0
  135. package/lib/typescript/module/components/Select/Select.d.ts +73 -0
  136. package/lib/typescript/module/components/Select/Select.d.ts.map +1 -0
  137. package/lib/typescript/module/components/Select/index.d.ts +3 -0
  138. package/lib/typescript/module/components/Select/index.d.ts.map +1 -0
  139. package/lib/typescript/module/components/UserChip/UserChip.d.ts +33 -0
  140. package/lib/typescript/module/components/UserChip/UserChip.d.ts.map +1 -0
  141. package/lib/typescript/module/components/UserChip/index.d.ts +3 -0
  142. package/lib/typescript/module/components/UserChip/index.d.ts.map +1 -0
  143. package/lib/typescript/module/components/index.d.ts +4 -0
  144. package/lib/typescript/module/components/index.d.ts.map +1 -1
  145. package/package.json +1 -1
  146. package/src/components/Dropdown/Dropdown.tsx +319 -0
  147. package/src/components/Dropdown/index.ts +2 -0
  148. package/src/components/Menu/Menu.tsx +249 -0
  149. package/src/components/Menu/MenuButton.tsx +98 -0
  150. package/src/components/Menu/SelectButton.tsx +171 -0
  151. package/src/components/Menu/UserMenu.tsx +100 -0
  152. package/src/components/Menu/index.ts +14 -0
  153. package/src/components/Select/Select.tsx +323 -0
  154. package/src/components/Select/index.ts +2 -0
  155. package/src/components/UserChip/UserChip.tsx +138 -0
  156. package/src/components/UserChip/index.ts +2 -0
  157. package/src/components/index.ts +4 -0
@@ -0,0 +1,210 @@
1
+ "use strict";
2
+
3
+ import { useEffect, useRef, useState } from 'react';
4
+ import { Animated, Dimensions, Easing, Modal, Platform, Pressable, View } from 'react-native';
5
+
6
+ /** A point on a box: a vertical and a horizontal edge/center. */
7
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
8
+ const V_FRAC = {
9
+ top: 0,
10
+ center: 0.5,
11
+ bottom: 1
12
+ };
13
+ const H_FRAC = {
14
+ left: 0,
15
+ center: 0.5,
16
+ right: 1
17
+ };
18
+
19
+ /** State handed to the trigger renderer and (optionally) the content renderer. */
20
+
21
+ const ZERO_INSETS = {
22
+ top: 0,
23
+ right: 0,
24
+ bottom: 0,
25
+ left: 0
26
+ };
27
+ function clamp(value, min, max) {
28
+ if (max < min) return min;
29
+ return Math.min(Math.max(value, min), max);
30
+ }
31
+
32
+ /**
33
+ * Anchored overlay menu. Renders a trigger inline and, when open, a floating
34
+ * panel positioned relative to the trigger via two origins — `anchorOrigin`
35
+ * (point on the trigger) and `menuOrigin` (matching point on the menu). Tapping
36
+ * outside (or the hardware back button) dismisses it. Used to compose menu
37
+ * buttons, select fields, popovers, etc.
38
+ */
39
+ export function Menu({
40
+ renderTrigger,
41
+ children,
42
+ anchorOrigin = {
43
+ vertical: 'bottom',
44
+ horizontal: 'left'
45
+ },
46
+ menuOrigin = {
47
+ vertical: 'top',
48
+ horizontal: 'left'
49
+ },
50
+ offset = 8,
51
+ autoFit = true,
52
+ insets = ZERO_INSETS,
53
+ open: openProp,
54
+ onOpenChange,
55
+ screenPadding = 8,
56
+ triggerStyle
57
+ }) {
58
+ const triggerRef = useRef(null);
59
+ const [uncontrolledOpen, setUncontrolledOpen] = useState(false);
60
+ const isControlled = openProp !== undefined;
61
+ const open = isControlled ? openProp : uncontrolledOpen;
62
+ const [rect, setRect] = useState(null);
63
+ const [menuSize, setMenuSize] = useState(null);
64
+ // The content's natural (uncapped) height, captured once per open — used to
65
+ // decide whether it fits the preferred side (kept stable so the flip decision
66
+ // doesn't oscillate once a maxHeight cap is applied).
67
+ const [naturalHeight, setNaturalHeight] = useState(null);
68
+ const anim = useRef(new Animated.Value(0)).current;
69
+ const setOpen = next => {
70
+ if (!isControlled) setUncontrolledOpen(next);
71
+ onOpenChange?.(next);
72
+ };
73
+ const close = () => setOpen(false);
74
+ const toggle = () => setOpen(!open);
75
+
76
+ // Measure the trigger whenever the menu opens.
77
+ useEffect(() => {
78
+ if (!open) {
79
+ setMenuSize(null);
80
+ setNaturalHeight(null);
81
+ anim.setValue(0);
82
+ return;
83
+ }
84
+ triggerRef.current?.measureInWindow((x, y, width, height) => {
85
+ setRect({
86
+ x,
87
+ y,
88
+ width,
89
+ height
90
+ });
91
+ });
92
+ }, [open, anim]);
93
+
94
+ // Fade + scale in once the menu has been measured (so it never flashes unplaced).
95
+ useEffect(() => {
96
+ if (open && rect && menuSize) {
97
+ Animated.timing(anim, {
98
+ toValue: 1,
99
+ duration: 120,
100
+ easing: Easing.out(Easing.ease),
101
+ useNativeDriver: Platform.OS !== 'web'
102
+ }).start();
103
+ }
104
+ }, [open, rect, menuSize, anim]);
105
+ const onMenuLayout = e => {
106
+ const {
107
+ width,
108
+ height
109
+ } = e.nativeEvent.layout;
110
+ if (!menuSize || menuSize.width !== width || menuSize.height !== height) {
111
+ setMenuSize({
112
+ width,
113
+ height
114
+ });
115
+ }
116
+ // Capture the natural height once — before any maxHeight cap is applied.
117
+ if (naturalHeight === null) setNaturalHeight(height);
118
+ };
119
+
120
+ // Auto-fit: choose a vertical direction with room and cap the height so the
121
+ // menu never runs off-screen. Only meaningful for a "drop" origin config
122
+ // (top↔bottom); otherwise we keep the origins as given.
123
+ const isDropConfig = anchorOrigin.vertical === 'bottom' && menuOrigin.vertical === 'top' || anchorOrigin.vertical === 'top' && menuOrigin.vertical === 'bottom';
124
+ const preferredUp = anchorOrigin.vertical === 'top' && menuOrigin.vertical === 'bottom';
125
+ let effAnchor = anchorOrigin;
126
+ let effMenu = menuOrigin;
127
+ let autoMaxHeight;
128
+ if (autoFit && isDropConfig && rect && naturalHeight !== null) {
129
+ const screen = Dimensions.get('window');
130
+ const spaceBelow = screen.height - insets.bottom - (rect.y + rect.height) - offset - screenPadding;
131
+ const spaceAbove = rect.y - insets.top - offset - screenPadding;
132
+ let up = preferredUp;
133
+ if (!preferredUp) up = naturalHeight > spaceBelow && spaceAbove > spaceBelow;else up = !(naturalHeight > spaceAbove && spaceBelow > spaceAbove);
134
+ const chosen = up ? spaceAbove : spaceBelow;
135
+ if (naturalHeight > chosen && chosen > 0) autoMaxHeight = chosen;
136
+ effAnchor = {
137
+ horizontal: anchorOrigin.horizontal,
138
+ vertical: up ? 'top' : 'bottom'
139
+ };
140
+ effMenu = {
141
+ horizontal: menuOrigin.horizontal,
142
+ vertical: up ? 'bottom' : 'top'
143
+ };
144
+ }
145
+ let top = 0;
146
+ let left = 0;
147
+ if (rect && menuSize) {
148
+ const screen = Dimensions.get('window');
149
+ const anchorX = rect.x + H_FRAC[effAnchor.horizontal] * rect.width;
150
+ const anchorY = rect.y + V_FRAC[effAnchor.vertical] * rect.height;
151
+ const offsetY = effMenu.vertical === 'top' ? offset : effMenu.vertical === 'bottom' ? -offset : 0;
152
+ left = anchorX - H_FRAC[effMenu.horizontal] * menuSize.width;
153
+ top = anchorY - V_FRAC[effMenu.vertical] * menuSize.height + offsetY;
154
+ left = clamp(left, screenPadding + insets.left, screen.width - insets.right - menuSize.width - screenPadding);
155
+ top = clamp(top, screenPadding + insets.top, screen.height - insets.bottom - menuSize.height - screenPadding);
156
+ }
157
+ const placed = Boolean(rect && menuSize);
158
+ const content = typeof children === 'function' ? children({
159
+ close,
160
+ triggerWidth: rect?.width,
161
+ maxHeight: autoMaxHeight
162
+ }) : children;
163
+ return /*#__PURE__*/_jsxs(_Fragment, {
164
+ children: [/*#__PURE__*/_jsx(View, {
165
+ ref: triggerRef,
166
+ collapsable: false,
167
+ style: [{
168
+ alignSelf: 'flex-start'
169
+ }, triggerStyle],
170
+ children: renderTrigger({
171
+ open,
172
+ toggle,
173
+ close
174
+ })
175
+ }), /*#__PURE__*/_jsx(Modal, {
176
+ visible: open,
177
+ transparent: true,
178
+ animationType: "none",
179
+ onRequestClose: close,
180
+ statusBarTranslucent: true,
181
+ children: /*#__PURE__*/_jsx(Pressable, {
182
+ accessibilityLabel: "Close menu",
183
+ onPress: close,
184
+ style: {
185
+ flex: 1
186
+ },
187
+ children: /*#__PURE__*/_jsx(Animated.View, {
188
+ onLayout: onMenuLayout
189
+ // Stop presses inside the menu from bubbling to the backdrop.
190
+ ,
191
+ onStartShouldSetResponder: () => true,
192
+ style: {
193
+ position: 'absolute',
194
+ top,
195
+ left,
196
+ opacity: placed ? anim : 0,
197
+ transform: [{
198
+ scale: placed ? anim.interpolate({
199
+ inputRange: [0, 1],
200
+ outputRange: [0.96, 1]
201
+ }) : 1
202
+ }]
203
+ },
204
+ children: content
205
+ })
206
+ })
207
+ })]
208
+ });
209
+ }
210
+ //# sourceMappingURL=Menu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useEffect","useRef","useState","Animated","Dimensions","Easing","Modal","Platform","Pressable","View","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","V_FRAC","top","center","bottom","H_FRAC","left","right","ZERO_INSETS","clamp","value","min","max","Math","Menu","renderTrigger","children","anchorOrigin","vertical","horizontal","menuOrigin","offset","autoFit","insets","open","openProp","onOpenChange","screenPadding","triggerStyle","triggerRef","uncontrolledOpen","setUncontrolledOpen","isControlled","undefined","rect","setRect","menuSize","setMenuSize","naturalHeight","setNaturalHeight","anim","Value","current","setOpen","next","close","toggle","setValue","measureInWindow","x","y","width","height","timing","toValue","duration","easing","out","ease","useNativeDriver","OS","start","onMenuLayout","e","nativeEvent","layout","isDropConfig","preferredUp","effAnchor","effMenu","autoMaxHeight","screen","get","spaceBelow","spaceAbove","up","chosen","anchorX","anchorY","offsetY","placed","Boolean","content","triggerWidth","maxHeight","ref","collapsable","style","alignSelf","visible","transparent","animationType","onRequestClose","statusBarTranslucent","accessibilityLabel","onPress","flex","onLayout","onStartShouldSetResponder","position","opacity","transform","scale","interpolate","inputRange","outputRange"],"sourceRoot":"..\\..\\..\\..\\src","sources":["components/Menu/Menu.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+
3
+ import { render, fireEvent, screen } from '@testing-library/react-native';
4
+ import { ThemeProvider } from "../../theme/index.js";
5
+ import { MenuButton } from "./MenuButton.js";
6
+ import { jsx as _jsx } from "react/jsx-runtime";
7
+ function wrap(ui) {
8
+ return render(/*#__PURE__*/_jsx(ThemeProvider, {
9
+ children: ui
10
+ }));
11
+ }
12
+ const options = [{
13
+ key: 'a',
14
+ label: 'Edit'
15
+ }, {
16
+ key: 'b',
17
+ label: 'Delete',
18
+ destructive: true
19
+ }];
20
+ describe('MenuButton', () => {
21
+ it('is closed initially — options are not shown', () => {
22
+ wrap(/*#__PURE__*/_jsx(MenuButton, {
23
+ options: options
24
+ }));
25
+ expect(screen.queryByText('Edit')).toBeNull();
26
+ });
27
+ it('opens on trigger press and shows the options', () => {
28
+ wrap(/*#__PURE__*/_jsx(MenuButton, {
29
+ options: options
30
+ }));
31
+ fireEvent.press(screen.getByLabelText('More options'));
32
+ expect(screen.getByText('Edit')).toBeTruthy();
33
+ expect(screen.getByText('Delete')).toBeTruthy();
34
+ });
35
+ it('calls onSelect with the pressed key', () => {
36
+ const onSelect = jest.fn();
37
+ wrap(/*#__PURE__*/_jsx(MenuButton, {
38
+ options: options,
39
+ onSelect: onSelect
40
+ }));
41
+ fireEvent.press(screen.getByLabelText('More options'));
42
+ fireEvent.press(screen.getByText('Edit'));
43
+ expect(onSelect).toHaveBeenCalledWith('a');
44
+ });
45
+ it('closes after selecting (closeOnSelect default)', () => {
46
+ wrap(/*#__PURE__*/_jsx(MenuButton, {
47
+ options: options
48
+ }));
49
+ fireEvent.press(screen.getByLabelText('More options'));
50
+ fireEvent.press(screen.getByText('Edit'));
51
+ expect(screen.queryByText('Edit')).toBeNull();
52
+ });
53
+ it('closes when the backdrop is pressed', () => {
54
+ wrap(/*#__PURE__*/_jsx(MenuButton, {
55
+ options: options
56
+ }));
57
+ fireEvent.press(screen.getByLabelText('More options'));
58
+ expect(screen.getByText('Edit')).toBeTruthy();
59
+ fireEvent.press(screen.getByLabelText('Close menu'));
60
+ expect(screen.queryByText('Edit')).toBeNull();
61
+ });
62
+ it('respects a custom trigger icon / label', () => {
63
+ wrap(/*#__PURE__*/_jsx(MenuButton, {
64
+ options: options,
65
+ icon: "settings",
66
+ accessibilityLabel: "Row actions"
67
+ }));
68
+ expect(screen.getByLabelText('Row actions')).toBeTruthy();
69
+ });
70
+ });
71
+ //# sourceMappingURL=Menu.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["render","fireEvent","screen","ThemeProvider","MenuButton","jsx","_jsx","wrap","ui","children","options","key","label","destructive","describe","it","expect","queryByText","toBeNull","press","getByLabelText","getByText","toBeTruthy","onSelect","jest","fn","toHaveBeenCalledWith","icon","accessibilityLabel"],"sourceRoot":"..\\..\\..\\..\\src","sources":["components/Menu/Menu.test.tsx"],"mappings":";;AAAA,SAASA,MAAM,EAAEC,SAAS,EAAEC,MAAM,QAAQ,+BAA+B;AACzE,SAASC,aAAa,QAAQ,sBAAa;AAC3C,SAASC,UAAU,QAAQ,iBAAc;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAG1C,SAASC,IAAIA,CAACC,EAAsB,EAAE;EACpC,OAAOR,MAAM,cAACM,IAAA,CAACH,aAAa;IAAAM,QAAA,EAAED;EAAE,CAAgB,CAAC,CAAC;AACpD;AAEA,MAAME,OAAwB,GAAG,CAC/B;EAAEC,GAAG,EAAE,GAAG;EAAEC,KAAK,EAAE;AAAO,CAAC,EAC3B;EAAED,GAAG,EAAE,GAAG;EAAEC,KAAK,EAAE,QAAQ;EAAEC,WAAW,EAAE;AAAK,CAAC,CACjD;AAEDC,QAAQ,CAAC,YAAY,EAAE,MAAM;EAC3BC,EAAE,CAAC,6CAA6C,EAAE,MAAM;IACtDR,IAAI,cAACD,IAAA,CAACF,UAAU;MAACM,OAAO,EAAEA;IAAQ,CAAE,CAAC,CAAC;IACtCM,MAAM,CAACd,MAAM,CAACe,WAAW,CAAC,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EAC/C,CAAC,CAAC;EAEFH,EAAE,CAAC,8CAA8C,EAAE,MAAM;IACvDR,IAAI,cAACD,IAAA,CAACF,UAAU;MAACM,OAAO,EAAEA;IAAQ,CAAE,CAAC,CAAC;IACtCT,SAAS,CAACkB,KAAK,CAACjB,MAAM,CAACkB,cAAc,CAAC,cAAc,CAAC,CAAC;IACtDJ,MAAM,CAACd,MAAM,CAACmB,SAAS,CAAC,MAAM,CAAC,CAAC,CAACC,UAAU,CAAC,CAAC;IAC7CN,MAAM,CAACd,MAAM,CAACmB,SAAS,CAAC,QAAQ,CAAC,CAAC,CAACC,UAAU,CAAC,CAAC;EACjD,CAAC,CAAC;EAEFP,EAAE,CAAC,qCAAqC,EAAE,MAAM;IAC9C,MAAMQ,QAAQ,GAAGC,IAAI,CAACC,EAAE,CAAC,CAAC;IAC1BlB,IAAI,cAACD,IAAA,CAACF,UAAU;MAACM,OAAO,EAAEA,OAAQ;MAACa,QAAQ,EAAEA;IAAS,CAAE,CAAC,CAAC;IAC1DtB,SAAS,CAACkB,KAAK,CAACjB,MAAM,CAACkB,cAAc,CAAC,cAAc,CAAC,CAAC;IACtDnB,SAAS,CAACkB,KAAK,CAACjB,MAAM,CAACmB,SAAS,CAAC,MAAM,CAAC,CAAC;IACzCL,MAAM,CAACO,QAAQ,CAAC,CAACG,oBAAoB,CAAC,GAAG,CAAC;EAC5C,CAAC,CAAC;EAEFX,EAAE,CAAC,gDAAgD,EAAE,MAAM;IACzDR,IAAI,cAACD,IAAA,CAACF,UAAU;MAACM,OAAO,EAAEA;IAAQ,CAAE,CAAC,CAAC;IACtCT,SAAS,CAACkB,KAAK,CAACjB,MAAM,CAACkB,cAAc,CAAC,cAAc,CAAC,CAAC;IACtDnB,SAAS,CAACkB,KAAK,CAACjB,MAAM,CAACmB,SAAS,CAAC,MAAM,CAAC,CAAC;IACzCL,MAAM,CAACd,MAAM,CAACe,WAAW,CAAC,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EAC/C,CAAC,CAAC;EAEFH,EAAE,CAAC,qCAAqC,EAAE,MAAM;IAC9CR,IAAI,cAACD,IAAA,CAACF,UAAU;MAACM,OAAO,EAAEA;IAAQ,CAAE,CAAC,CAAC;IACtCT,SAAS,CAACkB,KAAK,CAACjB,MAAM,CAACkB,cAAc,CAAC,cAAc,CAAC,CAAC;IACtDJ,MAAM,CAACd,MAAM,CAACmB,SAAS,CAAC,MAAM,CAAC,CAAC,CAACC,UAAU,CAAC,CAAC;IAC7CrB,SAAS,CAACkB,KAAK,CAACjB,MAAM,CAACkB,cAAc,CAAC,YAAY,CAAC,CAAC;IACpDJ,MAAM,CAACd,MAAM,CAACe,WAAW,CAAC,MAAM,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EAC/C,CAAC,CAAC;EAEFH,EAAE,CAAC,wCAAwC,EAAE,MAAM;IACjDR,IAAI,cAACD,IAAA,CAACF,UAAU;MAACM,OAAO,EAAEA,OAAQ;MAACiB,IAAI,EAAC,UAAU;MAACC,kBAAkB,EAAC;IAAa,CAAE,CAAC,CAAC;IACvFZ,MAAM,CAACd,MAAM,CAACkB,cAAc,CAAC,aAAa,CAAC,CAAC,CAACE,UAAU,CAAC,CAAC;EAC3D,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+
3
+ import { Dropdown } from "../Dropdown/Dropdown.js";
4
+ import { IconButton } from "../IconButton/IconButton.js";
5
+ import { Menu } from "./Menu.js";
6
+ import { jsx as _jsx } from "react/jsx-runtime";
7
+ /**
8
+ * A "More"-style menu button — an `IconButton` that opens an anchored `Dropdown`.
9
+ * The first composed component built from `IconButton` + `Icon` + `Dropdown` +
10
+ * `Menu`. Placement is controlled by the two-origin model (`anchorOrigin` on the
11
+ * trigger, `menuOrigin` on the menu). Dismisses on outside press / back button.
12
+ */
13
+ export function MenuButton({
14
+ options,
15
+ onSelect,
16
+ icon = 'more',
17
+ accessibilityLabel = 'More options',
18
+ variant = 'secondary',
19
+ size = 'md',
20
+ shape = 'round',
21
+ disabled = false,
22
+ anchorOrigin = {
23
+ vertical: 'bottom',
24
+ horizontal: 'right'
25
+ },
26
+ menuOrigin = {
27
+ vertical: 'top',
28
+ horizontal: 'right'
29
+ },
30
+ offset = 8,
31
+ menuWidth,
32
+ showDividers,
33
+ closeOnSelect = true,
34
+ open,
35
+ onOpenChange
36
+ }) {
37
+ return /*#__PURE__*/_jsx(Menu, {
38
+ anchorOrigin: anchorOrigin,
39
+ menuOrigin: menuOrigin,
40
+ offset: offset,
41
+ open: open,
42
+ onOpenChange: onOpenChange,
43
+ renderTrigger: ({
44
+ toggle
45
+ }) => /*#__PURE__*/_jsx(IconButton, {
46
+ icon: icon,
47
+ accessibilityLabel: accessibilityLabel,
48
+ variant: variant,
49
+ size: size,
50
+ shape: shape,
51
+ disabled: disabled,
52
+ onPress: toggle
53
+ }),
54
+ children: ({
55
+ close,
56
+ maxHeight
57
+ }) => /*#__PURE__*/_jsx(Dropdown, {
58
+ options: options,
59
+ width: menuWidth,
60
+ maxHeight: maxHeight,
61
+ showDividers: showDividers,
62
+ onSelect: key => {
63
+ onSelect?.(key);
64
+ if (closeOnSelect) close();
65
+ }
66
+ })
67
+ });
68
+ }
69
+ //# sourceMappingURL=MenuButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Dropdown","IconButton","Menu","jsx","_jsx","MenuButton","options","onSelect","icon","accessibilityLabel","variant","size","shape","disabled","anchorOrigin","vertical","horizontal","menuOrigin","offset","menuWidth","showDividers","closeOnSelect","open","onOpenChange","renderTrigger","toggle","onPress","children","close","maxHeight","width","key"],"sourceRoot":"..\\..\\..\\..\\src","sources":["components/Menu/MenuButton.tsx"],"mappings":";;AAAA,SAASA,QAAQ,QAA4B,yBAAsB;AACnE,SAASC,UAAU,QAA2E,6BAA0B;AAExH,SAASC,IAAI,QAAyB,WAAQ;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAqC/C;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,UAAUA,CAAC;EACzBC,OAAO;EACPC,QAAQ;EACRC,IAAI,GAAG,MAAM;EACbC,kBAAkB,GAAG,cAAc;EACnCC,OAAO,GAAG,WAAW;EACrBC,IAAI,GAAG,IAAI;EACXC,KAAK,GAAG,OAAO;EACfC,QAAQ,GAAG,KAAK;EAChBC,YAAY,GAAG;IAAEC,QAAQ,EAAE,QAAQ;IAAEC,UAAU,EAAE;EAAQ,CAAC;EAC1DC,UAAU,GAAG;IAAEF,QAAQ,EAAE,KAAK;IAAEC,UAAU,EAAE;EAAQ,CAAC;EACrDE,MAAM,GAAG,CAAC;EACVC,SAAS;EACTC,YAAY;EACZC,aAAa,GAAG,IAAI;EACpBC,IAAI;EACJC;AACe,CAAC,EAAE;EAClB,oBACEnB,IAAA,CAACF,IAAI;IACHY,YAAY,EAAEA,YAAa;IAC3BG,UAAU,EAAEA,UAAW;IACvBC,MAAM,EAAEA,MAAO;IACfI,IAAI,EAAEA,IAAK;IACXC,YAAY,EAAEA,YAAa;IAC3BC,aAAa,EAAEA,CAAC;MAAEC;IAAO,CAAC,kBACxBrB,IAAA,CAACH,UAAU;MACTO,IAAI,EAAEA,IAAK;MACXC,kBAAkB,EAAEA,kBAAmB;MACvCC,OAAO,EAAEA,OAAQ;MACjBC,IAAI,EAAEA,IAAK;MACXC,KAAK,EAAEA,KAAM;MACbC,QAAQ,EAAEA,QAAS;MACnBa,OAAO,EAAED;IAAO,CACjB,CACD;IAAAE,QAAA,EAEDA,CAAC;MAAEC,KAAK;MAAEC;IAAU,CAAC,kBACpBzB,IAAA,CAACJ,QAAQ;MACPM,OAAO,EAAEA,OAAQ;MACjBwB,KAAK,EAAEX,SAAU;MACjBU,SAAS,EAAEA,SAAU;MACrBT,YAAY,EAAEA,YAAa;MAC3Bb,QAAQ,EAAGwB,GAAG,IAAK;QACjBxB,QAAQ,GAAGwB,GAAG,CAAC;QACf,IAAIV,aAAa,EAAEO,KAAK,CAAC,CAAC;MAC5B;IAAE,CACH;EACF,CACG,CAAC;AAEX","ignoreList":[]}
@@ -0,0 +1,162 @@
1
+ "use strict";
2
+
3
+ import { useState } from 'react';
4
+ import { View } from 'react-native';
5
+ import { MenuButton } from "./MenuButton.js";
6
+ import { Text } from "../Text/Text.js";
7
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
8
+ const meta = {
9
+ title: 'Components/MenuButton',
10
+ component: MenuButton
11
+ };
12
+ export default meta;
13
+ /** The "More" button from the mockup: a switch row + two plain options. */
14
+ export const More = {
15
+ render: () => {
16
+ const [showPhotos, setShowPhotos] = useState(true);
17
+ const options = [{
18
+ key: 'photos',
19
+ label: 'Show product photos',
20
+ trailing: {
21
+ kind: 'switch',
22
+ value: showPhotos,
23
+ onChange: setShowPhotos
24
+ }
25
+ }, {
26
+ key: 'opt2',
27
+ label: 'Option 2'
28
+ }, {
29
+ key: 'opt3',
30
+ label: 'Option 3'
31
+ }];
32
+ return (
33
+ /*#__PURE__*/
34
+ // Right-aligned in a toolbar, as in the mockup.
35
+ _jsx(View, {
36
+ style: {
37
+ padding: 24,
38
+ height: 360,
39
+ alignItems: 'flex-end'
40
+ },
41
+ children: /*#__PURE__*/_jsx(MenuButton, {
42
+ options: options,
43
+ menuWidth: 260,
44
+ onSelect: () => {}
45
+ })
46
+ })
47
+ );
48
+ }
49
+ };
50
+
51
+ /** Action menu with a destructive row. */
52
+ export const Actions = {
53
+ render: () => {
54
+ const options = [{
55
+ key: 'edit',
56
+ label: 'Edit',
57
+ leading: {
58
+ kind: 'icon',
59
+ name: 'edit'
60
+ }
61
+ }, {
62
+ key: 'duplicate',
63
+ label: 'Duplicate',
64
+ leading: {
65
+ kind: 'icon',
66
+ name: 'copy-01'
67
+ }
68
+ }, {
69
+ key: 'div',
70
+ type: 'divider'
71
+ }, {
72
+ key: 'delete',
73
+ label: 'Delete',
74
+ leading: {
75
+ kind: 'icon',
76
+ name: 'trash'
77
+ },
78
+ destructive: true
79
+ }];
80
+ return /*#__PURE__*/_jsx(View, {
81
+ style: {
82
+ padding: 24,
83
+ height: 320,
84
+ alignItems: 'flex-end'
85
+ },
86
+ children: /*#__PURE__*/_jsx(MenuButton, {
87
+ options: options,
88
+ menuWidth: 240,
89
+ onSelect: () => {}
90
+ })
91
+ });
92
+ }
93
+ };
94
+
95
+ /** Left-anchored: menu drops below, left edges aligned. */
96
+ export const AnchorLeft = {
97
+ render: () => {
98
+ const options = ['Profile', 'Billing', 'Log out'].map(label => ({
99
+ key: label,
100
+ label
101
+ }));
102
+ return /*#__PURE__*/_jsx(View, {
103
+ style: {
104
+ padding: 24,
105
+ height: 320,
106
+ alignItems: 'flex-start'
107
+ },
108
+ children: /*#__PURE__*/_jsx(MenuButton, {
109
+ options: options,
110
+ menuWidth: 240,
111
+ anchorOrigin: {
112
+ vertical: 'bottom',
113
+ horizontal: 'left'
114
+ },
115
+ menuOrigin: {
116
+ vertical: 'top',
117
+ horizontal: 'left'
118
+ },
119
+ onSelect: () => {}
120
+ })
121
+ });
122
+ }
123
+ };
124
+
125
+ /** Opens upward (e.g. a button near the bottom of the screen). */
126
+ export const OpenUp = {
127
+ render: () => {
128
+ const options = ['One', 'Two', 'Three'].map(label => ({
129
+ key: label,
130
+ label
131
+ }));
132
+ return /*#__PURE__*/_jsxs(View, {
133
+ style: {
134
+ padding: 24,
135
+ height: 320,
136
+ justifyContent: 'flex-end',
137
+ alignItems: 'flex-end'
138
+ },
139
+ children: [/*#__PURE__*/_jsx(MenuButton, {
140
+ options: options,
141
+ menuWidth: 220,
142
+ anchorOrigin: {
143
+ vertical: 'top',
144
+ horizontal: 'right'
145
+ },
146
+ menuOrigin: {
147
+ vertical: 'bottom',
148
+ horizontal: 'right'
149
+ },
150
+ onSelect: () => {}
151
+ }), /*#__PURE__*/_jsx(Text, {
152
+ variant: "caption",
153
+ color: "secondary",
154
+ style: {
155
+ marginTop: 8
156
+ },
157
+ children: "anchor top/right \xB7 menu bottom/right"
158
+ })]
159
+ });
160
+ }
161
+ };
162
+ //# sourceMappingURL=MenuButton.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useState","View","MenuButton","Text","jsx","_jsx","jsxs","_jsxs","meta","title","component","More","render","showPhotos","setShowPhotos","options","key","label","trailing","kind","value","onChange","style","padding","height","alignItems","children","menuWidth","onSelect","Actions","leading","name","type","destructive","AnchorLeft","map","anchorOrigin","vertical","horizontal","menuOrigin","OpenUp","justifyContent","variant","color","marginTop"],"sourceRoot":"..\\..\\..\\..\\src","sources":["components/Menu/MenuButton.stories.tsx"],"mappings":"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","ignoreList":[]}