@bacon-pos/ui 0.5.1 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/components/Dropdown/Dropdown.js +282 -0
- package/lib/commonjs/components/Dropdown/Dropdown.js.map +1 -0
- package/lib/commonjs/components/Dropdown/Dropdown.stories.js +421 -0
- package/lib/commonjs/components/Dropdown/Dropdown.stories.js.map +1 -0
- package/lib/commonjs/components/Dropdown/Dropdown.test.js +113 -0
- package/lib/commonjs/components/Dropdown/Dropdown.test.js.map +1 -0
- package/lib/commonjs/components/Dropdown/index.js +19 -0
- package/lib/commonjs/components/Dropdown/index.js.map +1 -0
- package/lib/commonjs/components/Menu/Menu.js +214 -0
- package/lib/commonjs/components/Menu/Menu.js.map +1 -0
- package/lib/commonjs/components/Menu/Menu.test.js +71 -0
- package/lib/commonjs/components/Menu/Menu.test.js.map +1 -0
- package/lib/commonjs/components/Menu/MenuButton.js +73 -0
- package/lib/commonjs/components/Menu/MenuButton.js.map +1 -0
- package/lib/commonjs/components/Menu/MenuButton.stories.js +166 -0
- package/lib/commonjs/components/Menu/MenuButton.stories.js.map +1 -0
- package/lib/commonjs/components/Menu/SelectButton.js +143 -0
- package/lib/commonjs/components/Menu/SelectButton.js.map +1 -0
- package/lib/commonjs/components/Menu/SelectButton.stories.js +116 -0
- package/lib/commonjs/components/Menu/SelectButton.stories.js.map +1 -0
- package/lib/commonjs/components/Menu/SelectButton.test.js +80 -0
- package/lib/commonjs/components/Menu/SelectButton.test.js.map +1 -0
- package/lib/commonjs/components/Menu/index.js +27 -0
- package/lib/commonjs/components/Menu/index.js.map +1 -0
- package/lib/commonjs/components/Select/Select.js +246 -0
- package/lib/commonjs/components/Select/Select.js.map +1 -0
- package/lib/commonjs/components/Select/Select.stories.js +221 -0
- package/lib/commonjs/components/Select/Select.stories.js.map +1 -0
- package/lib/commonjs/components/Select/Select.test.js +165 -0
- package/lib/commonjs/components/Select/Select.test.js.map +1 -0
- package/lib/commonjs/components/Select/index.js +13 -0
- package/lib/commonjs/components/Select/index.js.map +1 -0
- package/lib/commonjs/components/UserChip/UserChip.js +121 -0
- package/lib/commonjs/components/UserChip/UserChip.js.map +1 -0
- package/lib/commonjs/components/UserChip/UserChip.stories.js +153 -0
- package/lib/commonjs/components/UserChip/UserChip.stories.js.map +1 -0
- package/lib/commonjs/components/UserChip/UserChip.test.js +59 -0
- package/lib/commonjs/components/UserChip/UserChip.test.js.map +1 -0
- package/lib/commonjs/components/UserChip/index.js +13 -0
- package/lib/commonjs/components/UserChip/index.js.map +1 -0
- package/lib/commonjs/components/index.js +57 -13
- package/lib/commonjs/components/index.js.map +1 -1
- package/lib/module/components/Dropdown/Dropdown.js +277 -0
- package/lib/module/components/Dropdown/Dropdown.js.map +1 -0
- package/lib/module/components/Dropdown/Dropdown.stories.js +417 -0
- package/lib/module/components/Dropdown/Dropdown.stories.js.map +1 -0
- package/lib/module/components/Dropdown/Dropdown.test.js +113 -0
- package/lib/module/components/Dropdown/Dropdown.test.js.map +1 -0
- package/lib/module/components/Dropdown/index.js +4 -0
- package/lib/module/components/Dropdown/index.js.map +1 -0
- package/lib/module/components/Menu/Menu.js +210 -0
- package/lib/module/components/Menu/Menu.js.map +1 -0
- package/lib/module/components/Menu/Menu.test.js +71 -0
- package/lib/module/components/Menu/Menu.test.js.map +1 -0
- package/lib/module/components/Menu/MenuButton.js +69 -0
- package/lib/module/components/Menu/MenuButton.js.map +1 -0
- package/lib/module/components/Menu/MenuButton.stories.js +162 -0
- package/lib/module/components/Menu/MenuButton.stories.js.map +1 -0
- package/lib/module/components/Menu/SelectButton.js +139 -0
- package/lib/module/components/Menu/SelectButton.js.map +1 -0
- package/lib/module/components/Menu/SelectButton.stories.js +112 -0
- package/lib/module/components/Menu/SelectButton.stories.js.map +1 -0
- package/lib/module/components/Menu/SelectButton.test.js +80 -0
- package/lib/module/components/Menu/SelectButton.test.js.map +1 -0
- package/lib/module/components/Menu/index.js +6 -0
- package/lib/module/components/Menu/index.js.map +1 -0
- package/lib/module/components/Select/Select.js +244 -0
- package/lib/module/components/Select/Select.js.map +1 -0
- package/lib/module/components/Select/Select.stories.js +217 -0
- package/lib/module/components/Select/Select.stories.js.map +1 -0
- package/lib/module/components/Select/Select.test.js +165 -0
- package/lib/module/components/Select/Select.test.js.map +1 -0
- package/lib/module/components/Select/index.js +4 -0
- package/lib/module/components/Select/index.js.map +1 -0
- package/lib/module/components/UserChip/UserChip.js +117 -0
- package/lib/module/components/UserChip/UserChip.js.map +1 -0
- package/lib/module/components/UserChip/UserChip.stories.js +149 -0
- package/lib/module/components/UserChip/UserChip.stories.js.map +1 -0
- package/lib/module/components/UserChip/UserChip.test.js +59 -0
- package/lib/module/components/UserChip/UserChip.test.js.map +1 -0
- package/lib/module/components/UserChip/index.js +4 -0
- package/lib/module/components/UserChip/index.js.map +1 -0
- package/lib/module/components/index.js +4 -0
- package/lib/module/components/index.js.map +1 -1
- package/lib/typescript/commonjs/components/Dropdown/Dropdown.d.ts +105 -0
- package/lib/typescript/commonjs/components/Dropdown/Dropdown.d.ts.map +1 -0
- package/lib/typescript/commonjs/components/Dropdown/index.d.ts +3 -0
- package/lib/typescript/commonjs/components/Dropdown/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/components/Menu/Menu.d.ts +66 -0
- package/lib/typescript/commonjs/components/Menu/Menu.d.ts.map +1 -0
- package/lib/typescript/commonjs/components/Menu/MenuButton.d.ts +46 -0
- package/lib/typescript/commonjs/components/Menu/MenuButton.d.ts.map +1 -0
- package/lib/typescript/commonjs/components/Menu/SelectButton.d.ts +60 -0
- package/lib/typescript/commonjs/components/Menu/SelectButton.d.ts.map +1 -0
- package/lib/typescript/commonjs/components/Menu/index.d.ts +7 -0
- package/lib/typescript/commonjs/components/Menu/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/components/Select/Select.d.ts +73 -0
- package/lib/typescript/commonjs/components/Select/Select.d.ts.map +1 -0
- package/lib/typescript/commonjs/components/Select/index.d.ts +3 -0
- package/lib/typescript/commonjs/components/Select/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/components/UserChip/UserChip.d.ts +33 -0
- package/lib/typescript/commonjs/components/UserChip/UserChip.d.ts.map +1 -0
- package/lib/typescript/commonjs/components/UserChip/index.d.ts +3 -0
- package/lib/typescript/commonjs/components/UserChip/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/components/index.d.ts +4 -0
- package/lib/typescript/commonjs/components/index.d.ts.map +1 -1
- package/lib/typescript/module/components/Dropdown/Dropdown.d.ts +105 -0
- package/lib/typescript/module/components/Dropdown/Dropdown.d.ts.map +1 -0
- package/lib/typescript/module/components/Dropdown/index.d.ts +3 -0
- package/lib/typescript/module/components/Dropdown/index.d.ts.map +1 -0
- package/lib/typescript/module/components/Menu/Menu.d.ts +66 -0
- package/lib/typescript/module/components/Menu/Menu.d.ts.map +1 -0
- package/lib/typescript/module/components/Menu/MenuButton.d.ts +46 -0
- package/lib/typescript/module/components/Menu/MenuButton.d.ts.map +1 -0
- package/lib/typescript/module/components/Menu/SelectButton.d.ts +60 -0
- package/lib/typescript/module/components/Menu/SelectButton.d.ts.map +1 -0
- package/lib/typescript/module/components/Menu/index.d.ts +7 -0
- package/lib/typescript/module/components/Menu/index.d.ts.map +1 -0
- package/lib/typescript/module/components/Select/Select.d.ts +73 -0
- package/lib/typescript/module/components/Select/Select.d.ts.map +1 -0
- package/lib/typescript/module/components/Select/index.d.ts +3 -0
- package/lib/typescript/module/components/Select/index.d.ts.map +1 -0
- package/lib/typescript/module/components/UserChip/UserChip.d.ts +33 -0
- package/lib/typescript/module/components/UserChip/UserChip.d.ts.map +1 -0
- package/lib/typescript/module/components/UserChip/index.d.ts +3 -0
- package/lib/typescript/module/components/UserChip/index.d.ts.map +1 -0
- package/lib/typescript/module/components/index.d.ts +4 -0
- package/lib/typescript/module/components/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/Dropdown/Dropdown.tsx +319 -0
- package/src/components/Dropdown/index.ts +2 -0
- package/src/components/Menu/Menu.tsx +249 -0
- package/src/components/Menu/MenuButton.tsx +98 -0
- package/src/components/Menu/SelectButton.tsx +171 -0
- package/src/components/Menu/index.ts +12 -0
- package/src/components/Select/Select.tsx +323 -0
- package/src/components/Select/index.ts +2 -0
- package/src/components/UserChip/UserChip.tsx +138 -0
- package/src/components/UserChip/index.ts +2 -0
- package/src/components/index.ts +4 -0
|
@@ -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":[]}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useState } from 'react';
|
|
4
|
+
import { useTheme } from "../../theme/index.js";
|
|
5
|
+
import { Button } from "../Button/Button.js";
|
|
6
|
+
import { Dropdown } from "../Dropdown/Dropdown.js";
|
|
7
|
+
import { Icon } from "../Icon/Icon.js";
|
|
8
|
+
import { Menu } from "./Menu.js";
|
|
9
|
+
|
|
10
|
+
/** A selectable option. Its `icon` shows both in the row and on the trigger when chosen. */
|
|
11
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
12
|
+
/** Button foreground per variant — mirrors Button so the trigger icon matches the label. */
|
|
13
|
+
function triggerForeground(theme, variant) {
|
|
14
|
+
const {
|
|
15
|
+
action,
|
|
16
|
+
state
|
|
17
|
+
} = theme.colors;
|
|
18
|
+
switch (variant) {
|
|
19
|
+
case 'secondary':
|
|
20
|
+
return action.secondaryForeground;
|
|
21
|
+
case 'inverse':
|
|
22
|
+
return action.inverseForeground;
|
|
23
|
+
case 'destructive':
|
|
24
|
+
return state.destructiveSubtleForeground;
|
|
25
|
+
case 'success':
|
|
26
|
+
return state.successForeground;
|
|
27
|
+
case 'successSubtle':
|
|
28
|
+
return state.successSubtleForeground;
|
|
29
|
+
default:
|
|
30
|
+
return action.primaryForeground;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Select-style button — a `Button` (label + leading icon) that opens an anchored
|
|
36
|
+
* `Dropdown` to change its value; the current option is marked with a check.
|
|
37
|
+
* A composed component built from `Button` + `Menu` + `Dropdown`. Controlled via
|
|
38
|
+
* `value` / `onChange`, or uncontrolled via `defaultValue`.
|
|
39
|
+
*/
|
|
40
|
+
export function SelectButton({
|
|
41
|
+
options,
|
|
42
|
+
value: valueProp,
|
|
43
|
+
defaultValue,
|
|
44
|
+
onChange,
|
|
45
|
+
placeholder = 'Select',
|
|
46
|
+
placeholderIcon,
|
|
47
|
+
showSelectedIcon = true,
|
|
48
|
+
chevron = false,
|
|
49
|
+
variant = 'secondary',
|
|
50
|
+
size = 'sm',
|
|
51
|
+
fullWidth = false,
|
|
52
|
+
disabled = false,
|
|
53
|
+
anchorOrigin = {
|
|
54
|
+
vertical: 'bottom',
|
|
55
|
+
horizontal: 'left'
|
|
56
|
+
},
|
|
57
|
+
menuOrigin = {
|
|
58
|
+
vertical: 'top',
|
|
59
|
+
horizontal: 'left'
|
|
60
|
+
},
|
|
61
|
+
offset = 8,
|
|
62
|
+
menuWidth,
|
|
63
|
+
showDividers,
|
|
64
|
+
closeOnSelect = true,
|
|
65
|
+
open,
|
|
66
|
+
onOpenChange
|
|
67
|
+
}) {
|
|
68
|
+
const theme = useTheme();
|
|
69
|
+
const isControlled = valueProp !== undefined;
|
|
70
|
+
const [uncontrolled, setUncontrolled] = useState(defaultValue);
|
|
71
|
+
const value = isControlled ? valueProp : uncontrolled;
|
|
72
|
+
const selected = options.find(o => o.key === value);
|
|
73
|
+
const label = selected?.label ?? placeholder;
|
|
74
|
+
const triggerIcon = selected?.icon ?? placeholderIcon;
|
|
75
|
+
const fg = triggerForeground(theme, variant);
|
|
76
|
+
const iconSize = size === 'sm' ? 20 : 24;
|
|
77
|
+
const setValue = key => {
|
|
78
|
+
if (!isControlled) setUncontrolled(key);
|
|
79
|
+
onChange?.(key);
|
|
80
|
+
};
|
|
81
|
+
const rows = options.map(o => ({
|
|
82
|
+
key: o.key,
|
|
83
|
+
label: o.label,
|
|
84
|
+
disabled: o.disabled,
|
|
85
|
+
leading: o.icon ? {
|
|
86
|
+
kind: 'icon',
|
|
87
|
+
name: o.icon
|
|
88
|
+
} : undefined,
|
|
89
|
+
trailing: o.key === value ? {
|
|
90
|
+
kind: 'icon',
|
|
91
|
+
name: 'check',
|
|
92
|
+
color: theme.colors.feedback.success
|
|
93
|
+
} : undefined
|
|
94
|
+
}));
|
|
95
|
+
return /*#__PURE__*/_jsx(Menu, {
|
|
96
|
+
anchorOrigin: anchorOrigin,
|
|
97
|
+
menuOrigin: menuOrigin,
|
|
98
|
+
offset: offset,
|
|
99
|
+
open: open,
|
|
100
|
+
onOpenChange: onOpenChange,
|
|
101
|
+
triggerStyle: fullWidth ? {
|
|
102
|
+
alignSelf: 'stretch'
|
|
103
|
+
} : undefined,
|
|
104
|
+
renderTrigger: ({
|
|
105
|
+
toggle
|
|
106
|
+
}) => /*#__PURE__*/_jsx(Button, {
|
|
107
|
+
label: label,
|
|
108
|
+
variant: variant,
|
|
109
|
+
size: size,
|
|
110
|
+
fullWidth: fullWidth,
|
|
111
|
+
disabled: disabled,
|
|
112
|
+
onPress: toggle,
|
|
113
|
+
leftIcon: showSelectedIcon && triggerIcon ? /*#__PURE__*/_jsx(Icon, {
|
|
114
|
+
name: triggerIcon,
|
|
115
|
+
size: iconSize,
|
|
116
|
+
color: fg
|
|
117
|
+
}) : undefined,
|
|
118
|
+
rightIcon: chevron ? /*#__PURE__*/_jsx(Icon, {
|
|
119
|
+
name: "chevron-down",
|
|
120
|
+
size: iconSize,
|
|
121
|
+
color: fg
|
|
122
|
+
}) : undefined
|
|
123
|
+
}),
|
|
124
|
+
children: ({
|
|
125
|
+
close,
|
|
126
|
+
maxHeight
|
|
127
|
+
}) => /*#__PURE__*/_jsx(Dropdown, {
|
|
128
|
+
options: rows,
|
|
129
|
+
width: menuWidth,
|
|
130
|
+
maxHeight: maxHeight,
|
|
131
|
+
showDividers: showDividers,
|
|
132
|
+
onSelect: key => {
|
|
133
|
+
setValue(key);
|
|
134
|
+
if (closeOnSelect) close();
|
|
135
|
+
}
|
|
136
|
+
})
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=SelectButton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useState","useTheme","Button","Dropdown","Icon","Menu","jsx","_jsx","triggerForeground","theme","variant","action","state","colors","secondaryForeground","inverseForeground","destructiveSubtleForeground","successForeground","successSubtleForeground","primaryForeground","SelectButton","options","value","valueProp","defaultValue","onChange","placeholder","placeholderIcon","showSelectedIcon","chevron","size","fullWidth","disabled","anchorOrigin","vertical","horizontal","menuOrigin","offset","menuWidth","showDividers","closeOnSelect","open","onOpenChange","isControlled","undefined","uncontrolled","setUncontrolled","selected","find","o","key","label","triggerIcon","icon","fg","iconSize","setValue","rows","map","leading","kind","name","trailing","color","feedback","success","triggerStyle","alignSelf","renderTrigger","toggle","onPress","leftIcon","rightIcon","children","close","maxHeight","width","onSelect"],"sourceRoot":"..\\..\\..\\..\\src","sources":["components/Menu/SelectButton.tsx"],"mappings":";;AAAA,SAASA,QAAQ,QAAQ,OAAO;AAChC,SAASC,QAAQ,QAAQ,sBAAa;AACtC,SAASC,MAAM,QAA6C,qBAAkB;AAC9E,SAASC,QAAQ,QAA4B,yBAAsB;AACnE,SAASC,IAAI,QAAQ,iBAAc;AAEnC,SAASC,IAAI,QAAyB,WAAQ;;AAE9C;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAmDA;AACA,SAASC,iBAAiBA,CAACC,KAAkC,EAAEC,OAAsB,EAAU;EAC7F,MAAM;IAAEC,MAAM;IAAEC;EAAM,CAAC,GAAGH,KAAK,CAACI,MAAM;EACtC,QAAQH,OAAO;IACb,KAAK,WAAW;MACd,OAAOC,MAAM,CAACG,mBAAmB;IACnC,KAAK,SAAS;MACZ,OAAOH,MAAM,CAACI,iBAAiB;IACjC,KAAK,aAAa;MAChB,OAAOH,KAAK,CAACI,2BAA2B;IAC1C,KAAK,SAAS;MACZ,OAAOJ,KAAK,CAACK,iBAAiB;IAChC,KAAK,eAAe;MAClB,OAAOL,KAAK,CAACM,uBAAuB;IACtC;MACE,OAAOP,MAAM,CAACQ,iBAAiB;EACnC;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,YAAYA,CAAC;EAC3BC,OAAO;EACPC,KAAK,EAAEC,SAAS;EAChBC,YAAY;EACZC,QAAQ;EACRC,WAAW,GAAG,QAAQ;EACtBC,eAAe;EACfC,gBAAgB,GAAG,IAAI;EACvBC,OAAO,GAAG,KAAK;EACfnB,OAAO,GAAG,WAAW;EACrBoB,IAAI,GAAG,IAAI;EACXC,SAAS,GAAG,KAAK;EACjBC,QAAQ,GAAG,KAAK;EAChBC,YAAY,GAAG;IAAEC,QAAQ,EAAE,QAAQ;IAAEC,UAAU,EAAE;EAAO,CAAC;EACzDC,UAAU,GAAG;IAAEF,QAAQ,EAAE,KAAK;IAAEC,UAAU,EAAE;EAAO,CAAC;EACpDE,MAAM,GAAG,CAAC;EACVC,SAAS;EACTC,YAAY;EACZC,aAAa,GAAG,IAAI;EACpBC,IAAI;EACJC;AACiB,CAAC,EAAE;EACpB,MAAMjC,KAAK,GAAGR,QAAQ,CAAC,CAAC;EACxB,MAAM0C,YAAY,GAAGpB,SAAS,KAAKqB,SAAS;EAC5C,MAAM,CAACC,YAAY,EAAEC,eAAe,CAAC,GAAG9C,QAAQ,CAACwB,YAAY,CAAC;EAC9D,MAAMF,KAAK,GAAGqB,YAAY,GAAGpB,SAAS,GAAGsB,YAAY;EAErD,MAAME,QAAQ,GAAG1B,OAAO,CAAC2B,IAAI,CAAEC,CAAC,IAAKA,CAAC,CAACC,GAAG,KAAK5B,KAAK,CAAC;EACrD,MAAM6B,KAAK,GAAGJ,QAAQ,EAAEI,KAAK,IAAIzB,WAAW;EAC5C,MAAM0B,WAAW,GAAGL,QAAQ,EAAEM,IAAI,IAAI1B,eAAe;EACrD,MAAM2B,EAAE,GAAG9C,iBAAiB,CAACC,KAAK,EAAEC,OAAO,CAAC;EAC5C,MAAM6C,QAAQ,GAAGzB,IAAI,KAAK,IAAI,GAAG,EAAE,GAAG,EAAE;EAExC,MAAM0B,QAAQ,GAAIN,GAAW,IAAK;IAChC,IAAI,CAACP,YAAY,EAAEG,eAAe,CAACI,GAAG,CAAC;IACvCzB,QAAQ,GAAGyB,GAAG,CAAC;EACjB,CAAC;EAED,MAAMO,IAAqB,GAAGpC,OAAO,CAACqC,GAAG,CAAET,CAAC,KAAM;IAChDC,GAAG,EAAED,CAAC,CAACC,GAAG;IACVC,KAAK,EAAEF,CAAC,CAACE,KAAK;IACdnB,QAAQ,EAAEiB,CAAC,CAACjB,QAAQ;IACpB2B,OAAO,EAAEV,CAAC,CAACI,IAAI,GAAG;MAAEO,IAAI,EAAE,MAAM;MAAEC,IAAI,EAAEZ,CAAC,CAACI;IAAK,CAAC,GAAGT,SAAS;IAC5DkB,QAAQ,EACNb,CAAC,CAACC,GAAG,KAAK5B,KAAK,GAAG;MAAEsC,IAAI,EAAE,MAAM;MAAEC,IAAI,EAAE,OAAO;MAAEE,KAAK,EAAEtD,KAAK,CAACI,MAAM,CAACmD,QAAQ,CAACC;IAAQ,CAAC,GAAGrB;EAC9F,CAAC,CAAC,CAAC;EAEH,oBACErC,IAAA,CAACF,IAAI;IACH4B,YAAY,EAAEA,YAAa;IAC3BG,UAAU,EAAEA,UAAW;IACvBC,MAAM,EAAEA,MAAO;IACfI,IAAI,EAAEA,IAAK;IACXC,YAAY,EAAEA,YAAa;IAC3BwB,YAAY,EAAEnC,SAAS,GAAG;MAAEoC,SAAS,EAAE;IAAU,CAAC,GAAGvB,SAAU;IAC/DwB,aAAa,EAAEA,CAAC;MAAEC;IAAO,CAAC,kBACxB9D,IAAA,CAACL,MAAM;MACLiD,KAAK,EAAEA,KAAM;MACbzC,OAAO,EAAEA,OAAQ;MACjBoB,IAAI,EAAEA,IAAK;MACXC,SAAS,EAAEA,SAAU;MACrBC,QAAQ,EAAEA,QAAS;MACnBsC,OAAO,EAAED,MAAO;MAChBE,QAAQ,EACN3C,gBAAgB,IAAIwB,WAAW,gBAC7B7C,IAAA,CAACH,IAAI;QAACyD,IAAI,EAAET,WAAY;QAACtB,IAAI,EAAEyB,QAAS;QAACQ,KAAK,EAAET;MAAG,CAAE,CAAC,GACpDV,SACL;MACD4B,SAAS,EAAE3C,OAAO,gBAAGtB,IAAA,CAACH,IAAI;QAACyD,IAAI,EAAC,cAAc;QAAC/B,IAAI,EAAEyB,QAAS;QAACQ,KAAK,EAAET;MAAG,CAAE,CAAC,GAAGV;IAAU,CAC1F,CACD;IAAA6B,QAAA,EAEDA,CAAC;MAAEC,KAAK;MAAEC;IAAU,CAAC,kBACpBpE,IAAA,CAACJ,QAAQ;MACPkB,OAAO,EAAEoC,IAAK;MACdmB,KAAK,EAAEtC,SAAU;MACjBqC,SAAS,EAAEA,SAAU;MACrBpC,YAAY,EAAEA,YAAa;MAC3BsC,QAAQ,EAAG3B,GAAG,IAAK;QACjBM,QAAQ,CAACN,GAAG,CAAC;QACb,IAAIV,aAAa,EAAEkC,KAAK,CAAC,CAAC;MAC5B;IAAE,CACH;EACF,CACG,CAAC;AAEX","ignoreList":[]}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useState } from 'react';
|
|
4
|
+
import { View } from 'react-native';
|
|
5
|
+
import { SelectButton } from "./SelectButton.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/SelectButton',
|
|
10
|
+
component: SelectButton
|
|
11
|
+
};
|
|
12
|
+
export default meta;
|
|
13
|
+
const ORDER_TYPES = [{
|
|
14
|
+
key: 'dine-in',
|
|
15
|
+
label: 'Dine in',
|
|
16
|
+
icon: 'dish'
|
|
17
|
+
}, {
|
|
18
|
+
key: 'take-out',
|
|
19
|
+
label: 'Take out',
|
|
20
|
+
icon: 'shopping-bag'
|
|
21
|
+
}, {
|
|
22
|
+
key: 'delivery',
|
|
23
|
+
label: 'Delivery',
|
|
24
|
+
icon: 'truck-delivery'
|
|
25
|
+
}];
|
|
26
|
+
|
|
27
|
+
/** The order-type selector from the mockup: leading icon, green check on the current value. */
|
|
28
|
+
export const OrderType = {
|
|
29
|
+
render: () => {
|
|
30
|
+
const [value, setValue] = useState('dine-in');
|
|
31
|
+
return /*#__PURE__*/_jsxs(View, {
|
|
32
|
+
style: {
|
|
33
|
+
padding: 24,
|
|
34
|
+
height: 340
|
|
35
|
+
},
|
|
36
|
+
children: [/*#__PURE__*/_jsx(SelectButton, {
|
|
37
|
+
options: ORDER_TYPES,
|
|
38
|
+
value: value,
|
|
39
|
+
onChange: setValue,
|
|
40
|
+
menuWidth: 300
|
|
41
|
+
}), /*#__PURE__*/_jsxs(Text, {
|
|
42
|
+
variant: "caption",
|
|
43
|
+
color: "secondary",
|
|
44
|
+
style: {
|
|
45
|
+
marginTop: 12
|
|
46
|
+
},
|
|
47
|
+
children: ["value: ", value]
|
|
48
|
+
})]
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
/** With a trailing chevron on the trigger. */
|
|
54
|
+
export const WithChevron = {
|
|
55
|
+
render: () => {
|
|
56
|
+
const [value, setValue] = useState('dine-in');
|
|
57
|
+
return /*#__PURE__*/_jsx(View, {
|
|
58
|
+
style: {
|
|
59
|
+
padding: 24,
|
|
60
|
+
height: 340
|
|
61
|
+
},
|
|
62
|
+
children: /*#__PURE__*/_jsx(SelectButton, {
|
|
63
|
+
options: ORDER_TYPES,
|
|
64
|
+
value: value,
|
|
65
|
+
onChange: setValue,
|
|
66
|
+
chevron: true,
|
|
67
|
+
menuWidth: 300
|
|
68
|
+
})
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
/** Uncontrolled with a placeholder (nothing selected initially). */
|
|
74
|
+
export const Placeholder = {
|
|
75
|
+
render: () => /*#__PURE__*/_jsx(View, {
|
|
76
|
+
style: {
|
|
77
|
+
padding: 24,
|
|
78
|
+
height: 340
|
|
79
|
+
},
|
|
80
|
+
children: /*#__PURE__*/_jsx(SelectButton, {
|
|
81
|
+
options: ORDER_TYPES,
|
|
82
|
+
placeholder: "Order type",
|
|
83
|
+
placeholderIcon: "dish",
|
|
84
|
+
chevron: true,
|
|
85
|
+
menuWidth: 300,
|
|
86
|
+
onChange: () => {}
|
|
87
|
+
})
|
|
88
|
+
})
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
/** Full-width trigger (e.g. inside a form). */
|
|
92
|
+
export const FullWidth = {
|
|
93
|
+
render: () => {
|
|
94
|
+
const [value, setValue] = useState('take-out');
|
|
95
|
+
return /*#__PURE__*/_jsx(View, {
|
|
96
|
+
style: {
|
|
97
|
+
padding: 24,
|
|
98
|
+
height: 340,
|
|
99
|
+
width: 360
|
|
100
|
+
},
|
|
101
|
+
children: /*#__PURE__*/_jsx(SelectButton, {
|
|
102
|
+
options: ORDER_TYPES,
|
|
103
|
+
value: value,
|
|
104
|
+
onChange: setValue,
|
|
105
|
+
fullWidth: true,
|
|
106
|
+
chevron: true,
|
|
107
|
+
menuWidth: 312
|
|
108
|
+
})
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
//# sourceMappingURL=SelectButton.stories.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useState","View","SelectButton","Text","jsx","_jsx","jsxs","_jsxs","meta","title","component","ORDER_TYPES","key","label","icon","OrderType","render","value","setValue","style","padding","height","children","options","onChange","menuWidth","variant","color","marginTop","WithChevron","chevron","Placeholder","placeholder","placeholderIcon","FullWidth","width","fullWidth"],"sourceRoot":"..\\..\\..\\..\\src","sources":["components/Menu/SelectButton.stories.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useState } from 'react';
|
|
4
|
+
import { render, fireEvent, screen } from '@testing-library/react-native';
|
|
5
|
+
import { ThemeProvider } from "../../theme/index.js";
|
|
6
|
+
import { SelectButton } from "./SelectButton.js";
|
|
7
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
8
|
+
function wrap(ui) {
|
|
9
|
+
return render(/*#__PURE__*/_jsx(ThemeProvider, {
|
|
10
|
+
children: ui
|
|
11
|
+
}));
|
|
12
|
+
}
|
|
13
|
+
const OPTIONS = [{
|
|
14
|
+
key: 'dine-in',
|
|
15
|
+
label: 'Dine in',
|
|
16
|
+
icon: 'dish'
|
|
17
|
+
}, {
|
|
18
|
+
key: 'take-out',
|
|
19
|
+
label: 'Take out',
|
|
20
|
+
icon: 'shopping-bag'
|
|
21
|
+
}, {
|
|
22
|
+
key: 'delivery',
|
|
23
|
+
label: 'Delivery',
|
|
24
|
+
icon: 'truck-delivery'
|
|
25
|
+
}];
|
|
26
|
+
function Controlled() {
|
|
27
|
+
const [value, setValue] = useState('dine-in');
|
|
28
|
+
return /*#__PURE__*/_jsx(SelectButton, {
|
|
29
|
+
options: OPTIONS,
|
|
30
|
+
value: value,
|
|
31
|
+
onChange: setValue
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
describe('SelectButton', () => {
|
|
35
|
+
it('shows the placeholder when nothing is selected', () => {
|
|
36
|
+
wrap(/*#__PURE__*/_jsx(SelectButton, {
|
|
37
|
+
options: OPTIONS,
|
|
38
|
+
placeholder: "Order type"
|
|
39
|
+
}));
|
|
40
|
+
expect(screen.getByText('Order type')).toBeTruthy();
|
|
41
|
+
});
|
|
42
|
+
it('shows the selected option label on the trigger', () => {
|
|
43
|
+
wrap(/*#__PURE__*/_jsx(SelectButton, {
|
|
44
|
+
options: OPTIONS,
|
|
45
|
+
value: "take-out"
|
|
46
|
+
}));
|
|
47
|
+
expect(screen.getByText('Take out')).toBeTruthy();
|
|
48
|
+
});
|
|
49
|
+
it('opens the menu and lists the options', () => {
|
|
50
|
+
wrap(/*#__PURE__*/_jsx(SelectButton, {
|
|
51
|
+
options: OPTIONS,
|
|
52
|
+
value: "dine-in"
|
|
53
|
+
}));
|
|
54
|
+
// The trigger shows "Dine in"; open the menu to reveal the rows.
|
|
55
|
+
fireEvent.press(screen.getByText('Dine in'));
|
|
56
|
+
expect(screen.getByText('Take out')).toBeTruthy();
|
|
57
|
+
expect(screen.getByText('Delivery')).toBeTruthy();
|
|
58
|
+
});
|
|
59
|
+
it('selecting a row calls onChange with its key and closes', () => {
|
|
60
|
+
const onChange = jest.fn();
|
|
61
|
+
wrap(/*#__PURE__*/_jsx(SelectButton, {
|
|
62
|
+
options: OPTIONS,
|
|
63
|
+
value: "dine-in",
|
|
64
|
+
onChange: onChange
|
|
65
|
+
}));
|
|
66
|
+
fireEvent.press(screen.getByText('Dine in'));
|
|
67
|
+
fireEvent.press(screen.getByText('Delivery'));
|
|
68
|
+
expect(onChange).toHaveBeenCalledWith('delivery');
|
|
69
|
+
expect(screen.queryByText('Take out')).toBeNull();
|
|
70
|
+
});
|
|
71
|
+
it('uncontrolled: the trigger reflects the new selection', () => {
|
|
72
|
+
wrap(/*#__PURE__*/_jsx(Controlled, {}));
|
|
73
|
+
fireEvent.press(screen.getByText('Dine in'));
|
|
74
|
+
fireEvent.press(screen.getByText('Delivery'));
|
|
75
|
+
// Trigger now shows Delivery; menu closed.
|
|
76
|
+
expect(screen.getByText('Delivery')).toBeTruthy();
|
|
77
|
+
expect(screen.queryByText('Take out')).toBeNull();
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
//# sourceMappingURL=SelectButton.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useState","render","fireEvent","screen","ThemeProvider","SelectButton","jsx","_jsx","wrap","ui","children","OPTIONS","key","label","icon","Controlled","value","setValue","options","onChange","describe","it","placeholder","expect","getByText","toBeTruthy","press","jest","fn","toHaveBeenCalledWith","queryByText","toBeNull"],"sourceRoot":"..\\..\\..\\..\\src","sources":["components/Menu/SelectButton.test.tsx"],"mappings":";;AAAA,SAASA,QAAQ,QAAQ,OAAO;AAChC,SAASC,MAAM,EAAEC,SAAS,EAAEC,MAAM,QAAQ,+BAA+B;AACzE,SAASC,aAAa,QAAQ,sBAAa;AAC3C,SAASC,YAAY,QAAiC,mBAAgB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAEvE,SAASC,IAAIA,CAACC,EAAsB,EAAE;EACpC,OAAOR,MAAM,cAACM,IAAA,CAACH,aAAa;IAAAM,QAAA,EAAED;EAAE,CAAgB,CAAC,CAAC;AACpD;AAEA,MAAME,OAA6B,GAAG,CACpC;EAAEC,GAAG,EAAE,SAAS;EAAEC,KAAK,EAAE,SAAS;EAAEC,IAAI,EAAE;AAAO,CAAC,EAClD;EAAEF,GAAG,EAAE,UAAU;EAAEC,KAAK,EAAE,UAAU;EAAEC,IAAI,EAAE;AAAe,CAAC,EAC5D;EAAEF,GAAG,EAAE,UAAU;EAAEC,KAAK,EAAE,UAAU;EAAEC,IAAI,EAAE;AAAiB,CAAC,CAC/D;AAED,SAASC,UAAUA,CAAA,EAAG;EACpB,MAAM,CAACC,KAAK,EAAEC,QAAQ,CAAC,GAAGjB,QAAQ,CAAC,SAAS,CAAC;EAC7C,oBAAOO,IAAA,CAACF,YAAY;IAACa,OAAO,EAAEP,OAAQ;IAACK,KAAK,EAAEA,KAAM;IAACG,QAAQ,EAAEF;EAAS,CAAE,CAAC;AAC7E;AAEAG,QAAQ,CAAC,cAAc,EAAE,MAAM;EAC7BC,EAAE,CAAC,gDAAgD,EAAE,MAAM;IACzDb,IAAI,cAACD,IAAA,CAACF,YAAY;MAACa,OAAO,EAAEP,OAAQ;MAACW,WAAW,EAAC;IAAY,CAAE,CAAC,CAAC;IACjEC,MAAM,CAACpB,MAAM,CAACqB,SAAS,CAAC,YAAY,CAAC,CAAC,CAACC,UAAU,CAAC,CAAC;EACrD,CAAC,CAAC;EAEFJ,EAAE,CAAC,gDAAgD,EAAE,MAAM;IACzDb,IAAI,cAACD,IAAA,CAACF,YAAY;MAACa,OAAO,EAAEP,OAAQ;MAACK,KAAK,EAAC;IAAU,CAAE,CAAC,CAAC;IACzDO,MAAM,CAACpB,MAAM,CAACqB,SAAS,CAAC,UAAU,CAAC,CAAC,CAACC,UAAU,CAAC,CAAC;EACnD,CAAC,CAAC;EAEFJ,EAAE,CAAC,sCAAsC,EAAE,MAAM;IAC/Cb,IAAI,cAACD,IAAA,CAACF,YAAY;MAACa,OAAO,EAAEP,OAAQ;MAACK,KAAK,EAAC;IAAS,CAAE,CAAC,CAAC;IACxD;IACAd,SAAS,CAACwB,KAAK,CAACvB,MAAM,CAACqB,SAAS,CAAC,SAAS,CAAC,CAAC;IAC5CD,MAAM,CAACpB,MAAM,CAACqB,SAAS,CAAC,UAAU,CAAC,CAAC,CAACC,UAAU,CAAC,CAAC;IACjDF,MAAM,CAACpB,MAAM,CAACqB,SAAS,CAAC,UAAU,CAAC,CAAC,CAACC,UAAU,CAAC,CAAC;EACnD,CAAC,CAAC;EAEFJ,EAAE,CAAC,wDAAwD,EAAE,MAAM;IACjE,MAAMF,QAAQ,GAAGQ,IAAI,CAACC,EAAE,CAAC,CAAC;IAC1BpB,IAAI,cAACD,IAAA,CAACF,YAAY;MAACa,OAAO,EAAEP,OAAQ;MAACK,KAAK,EAAC,SAAS;MAACG,QAAQ,EAAEA;IAAS,CAAE,CAAC,CAAC;IAC5EjB,SAAS,CAACwB,KAAK,CAACvB,MAAM,CAACqB,SAAS,CAAC,SAAS,CAAC,CAAC;IAC5CtB,SAAS,CAACwB,KAAK,CAACvB,MAAM,CAACqB,SAAS,CAAC,UAAU,CAAC,CAAC;IAC7CD,MAAM,CAACJ,QAAQ,CAAC,CAACU,oBAAoB,CAAC,UAAU,CAAC;IACjDN,MAAM,CAACpB,MAAM,CAAC2B,WAAW,CAAC,UAAU,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EACnD,CAAC,CAAC;EAEFV,EAAE,CAAC,sDAAsD,EAAE,MAAM;IAC/Db,IAAI,cAACD,IAAA,CAACQ,UAAU,IAAE,CAAC,CAAC;IACpBb,SAAS,CAACwB,KAAK,CAACvB,MAAM,CAACqB,SAAS,CAAC,SAAS,CAAC,CAAC;IAC5CtB,SAAS,CAACwB,KAAK,CAACvB,MAAM,CAACqB,SAAS,CAAC,UAAU,CAAC,CAAC;IAC7C;IACAD,MAAM,CAACpB,MAAM,CAACqB,SAAS,CAAC,UAAU,CAAC,CAAC,CAACC,UAAU,CAAC,CAAC;IACjDF,MAAM,CAACpB,MAAM,CAAC2B,WAAW,CAAC,UAAU,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;EACnD,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Menu","MenuButton","SelectButton"],"sourceRoot":"..\\..\\..\\..\\src","sources":["components/Menu/index.ts"],"mappings":";;AAAA,SAASA,IAAI,QAAQ,WAAQ;AAQ7B,SAASC,UAAU,QAAQ,iBAAc;AAEzC,SAASC,YAAY,QAAQ,mBAAgB","ignoreList":[]}
|