imbric-theme 0.3.0 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (72) hide show
  1. package/atoms/Button/Button.stories.js +1 -1
  2. package/atoms/Button/__snapshots__/Button.stories.js.snap +8 -8
  3. package/atoms/Heading/Heading.stories.js +2 -2
  4. package/atoms/Heading/__snapshots__/Heading.stories.js.snap +16 -16
  5. package/atoms/Paragraph/Paragraph.stories.js +2 -2
  6. package/atoms/Paragraph/__snapshots__/Paragraph.stories.js.snap +16 -16
  7. package/atoms/Tab/Tab.js +41 -0
  8. package/atoms/Tab/Tab.module.css +17 -0
  9. package/atoms/Tab/Tab.stories.js +27 -0
  10. package/atoms/Tab/constants.js +1 -0
  11. package/atoms/Tab/index.js +3 -0
  12. package/index.js +3 -0
  13. package/layout/FlexColumnContent/FlexColumnContent.js +26 -0
  14. package/layout/FlexColumnContent/FlexColumnContent.module.css +5 -0
  15. package/layout/FlexColumnContent/FlexColumnContent.stories.js +28 -0
  16. package/layout/FlexColumnContent/constants.js +1 -0
  17. package/layout/FlexColumnContent/index.js +3 -0
  18. package/layout/Navbar/Navbar.js +55 -10
  19. package/layout/Navbar/Navbar.module.css +3 -2
  20. package/layout/Navbar/Navbar.stories.js +1 -4
  21. package/layout/Sidebar/Sidebar.js +19 -22
  22. package/layout/Sidebar/Sidebar.module.css +32 -6
  23. package/layout/Sidebar/Sidebar.stories.js +3 -2
  24. package/layout/Sidebar/constants.js +228 -217
  25. package/layout/Sidebar/index.js +1 -2
  26. package/molecules/ItemMenu/ItemMenu.js +36 -25
  27. package/molecules/ItemMenu/ItemMenu.module.css +14 -29
  28. package/molecules/ItemMenu/ItemMenu.stories.js +2 -0
  29. package/molecules/ItemMenu/constants.js +3 -0
  30. package/molecules/Tabs/Tabs.js +53 -0
  31. package/molecules/Tabs/Tabs.module.css +12 -0
  32. package/molecules/Tabs/Tabs.stories.js +34 -0
  33. package/molecules/Tabs/constants.js +29 -0
  34. package/molecules/Tabs/index.js +3 -0
  35. package/package.json +6 -2
  36. package/layout/Sidebar/Sidebar.css +0 -90
  37. package/storybook-static/0.89e7d77f4d365594e982.manager.bundle.js +0 -1
  38. package/storybook-static/0.e189f835.iframe.bundle.js +0 -3
  39. package/storybook-static/0.e189f835.iframe.bundle.js.LICENSE.txt +0 -8
  40. package/storybook-static/0.e189f835.iframe.bundle.js.map +0 -1
  41. package/storybook-static/1.45d0d6aa.iframe.bundle.js +0 -3
  42. package/storybook-static/1.45d0d6aa.iframe.bundle.js.LICENSE.txt +0 -8
  43. package/storybook-static/1.45d0d6aa.iframe.bundle.js.map +0 -1
  44. package/storybook-static/2.75691da5.iframe.bundle.js +0 -1
  45. package/storybook-static/3.08d15cf4.iframe.bundle.js +0 -1
  46. package/storybook-static/4.cbd8fb943995f84e5583.manager.bundle.js +0 -2
  47. package/storybook-static/4.cbd8fb943995f84e5583.manager.bundle.js.LICENSE.txt +0 -8
  48. package/storybook-static/5.d02ab9a798461caeb506.manager.bundle.js +0 -1
  49. package/storybook-static/6.4deac86378225189a26c.manager.bundle.js +0 -2
  50. package/storybook-static/6.4deac86378225189a26c.manager.bundle.js.LICENSE.txt +0 -12
  51. package/storybook-static/7.20dbe97831bee4cf4ce4.manager.bundle.js +0 -1
  52. package/storybook-static/7.53d57a3d.iframe.bundle.js +0 -1
  53. package/storybook-static/8.33a6bfc3865ab87fcc57.manager.bundle.js +0 -1
  54. package/storybook-static/8.9b339902.iframe.bundle.js +0 -3
  55. package/storybook-static/8.9b339902.iframe.bundle.js.LICENSE.txt +0 -12
  56. package/storybook-static/8.9b339902.iframe.bundle.js.map +0 -1
  57. package/storybook-static/9.f9389e45.iframe.bundle.js +0 -1
  58. package/storybook-static/favicon.ico +0 -0
  59. package/storybook-static/iframe.html +0 -348
  60. package/storybook-static/index.html +0 -59
  61. package/storybook-static/main.45162e1b.iframe.bundle.js +0 -1
  62. package/storybook-static/main.e8773e46a6d316c46694.manager.bundle.js +0 -1
  63. package/storybook-static/runtime~main.9b3271f5.iframe.bundle.js +0 -1
  64. package/storybook-static/runtime~main.d0af9adf44459dbc718a.manager.bundle.js +0 -1
  65. package/storybook-static/static/logo.svg +0 -19
  66. package/storybook-static/static/logotipo.svg +0 -50
  67. package/storybook-static/static/logotipoS.svg +0 -26
  68. package/storybook-static/vendors~main.02332eca.iframe.bundle.js +0 -3
  69. package/storybook-static/vendors~main.02332eca.iframe.bundle.js.LICENSE.txt +0 -107
  70. package/storybook-static/vendors~main.02332eca.iframe.bundle.js.map +0 -1
  71. package/storybook-static/vendors~main.29dce51cb06d0354d6c9.manager.bundle.js +0 -2
  72. package/storybook-static/vendors~main.29dce51cb06d0354d6c9.manager.bundle.js.LICENSE.txt +0 -101
@@ -1,217 +1,228 @@
1
- export const subItems = {
2
-
3
- subItemsLegal: [
4
- {
5
- href: 'https://www.imbric.com/privacypolicy/',
6
- title: 'Privacy policy',
7
- },
8
- {
9
- href: 'https://www.imbric.com/general-terms/',
10
- title: 'General terms',
11
- },
12
- {
13
- href: 'https://www.imbric.com/particular-terms/',
14
- title: 'Particular terms',
15
- },
16
- ],
17
-
18
- }
19
-
20
- export const options = {
21
- itemsMenu: [
22
- {
23
- text: "Home",
24
- icon: "home",
25
- href: "/home",
26
- view: true,
27
- },
28
- {
29
- text: "Activity",
30
- icon: "activity",
31
- href: "/home",
32
- view: true,
33
- submenu: [
34
- {
35
- text: "Taxi",
36
- href: "/taxi",
37
- view: true,
38
- },
39
- {
40
- text: "Parking",
41
- href: "/parking",
42
- view: true,
43
- },
44
- {
45
- text: "Sharing",
46
- href: "/sharing",
47
- view: true,
48
- },
49
- {
50
- text: "Public transport",
51
- href: "/publictransport ",
52
- view: true,
53
- },
54
- {
55
- text: "Kilometer sheet",
56
- href: "/kilometersheet",
57
- view: true,
58
- }
59
- ],
60
- },
61
- {
62
- text: "Staff",
63
- icon: "staff",
64
- href: "/home",
65
- view: true,
66
- submenu: [
67
- {
68
- text: "People Add",
69
- href: "/staff/taxi",
70
- view: true,
71
- },
72
- {
73
- text: "People View",
74
- href: "/staff/taxi",
75
- view: true,
76
- },
77
- {
78
- text: "People Group",
79
- href: "/staff/taxi",
80
- view: true,
81
- },
82
-
83
- ],
84
- },
85
- {
86
- text: "Services",
87
- icon: "travelPrograms",
88
- href: "/home",
89
- view: true,
90
-
91
- },
92
- {
93
- text: "Billing",
94
- icon: "billing",
95
- href: "/home",
96
- view: true,
97
-
98
- },
99
- {
100
- text: "Setting",
101
- icon: "setting",
102
- href: "/home",
103
- view: true,
104
- submenu: [
105
- {
106
- text: "Company",
107
- href: "/company/edit",
108
- view: true,
109
- },
110
- {
111
- text: "Wallet",
112
- href: "/company/wallet",
113
- view: true,
114
- },
115
-
116
- ],
117
-
118
- },
119
- {
120
- text: "Order Taxi",
121
- icon: "orderTaxi",
122
- href: "/home",
123
- view: true,
124
-
125
- },
126
- {
127
- text: "Dashboards",
128
- icon: "dashboardsUwa",
129
- href: "/home",
130
- view: true,
131
-
132
- },
133
- {
134
- text: "Projects",
135
- icon: "projectsUwa",
136
- href: "/home",
137
- view: true,
138
-
139
- },
140
- {
141
- text: "Permissions",
142
- icon: "permissions",
143
- href: "/home",
144
- view: true,
145
- submenu: [
146
- {
147
- text: "Permissions",
148
- href: "/permissions/managestaff",
149
- view: true,
150
- },
151
-
152
- ],
153
- },
154
- {
155
- text: "Analytics",
156
- icon: "analytics",
157
- href: "/home",
158
- view: true,
159
- submenu: [
160
- {
161
- text: "Dashboard",
162
- href: "/analytics/dashboard",
163
- view: true,
164
- },
165
- {
166
- text: "Taxi",
167
- href: "/analytics/taxi",
168
- view: true,
169
- },
170
- {
171
- text: "Parking",
172
- href: "/analytics/tollsparking",
173
- view: true,
174
- },
175
- ],
176
- },
177
- {
178
- text: "Legal",
179
- icon: "legal",
180
- href: "/home",
181
- view: true,
182
- submenu: [
183
- {
184
- text: "Privacy policy",
185
- href: "/legal/dashboard",
186
- view: true,
187
- },
188
- {
189
- text: "General terms",
190
- href: "/legal/taxi",
191
- view: true,
192
- },
193
- {
194
- text: "Particular terms",
195
- href: "/legal/tollsparking",
196
- view: true,
197
- },
198
- ],
199
-
200
- },
201
- {
202
- text: "User Guide",
203
- icon: "info",
204
- href: "/home",
205
- view: true,
206
-
207
- },
208
- {
209
- text: "My profile",
210
- icon: "profile",
211
- href: "/home",
212
- view: true,
213
-
214
- },
215
- ],
216
-
217
- }
1
+ export const options = [
2
+ {
3
+ active: false,
4
+ href: '/',
5
+ icon: 'home',
6
+ text: 'Home',
7
+ view: true,
8
+ viewSubMenu: false,
9
+ },
10
+ {
11
+ active: false,
12
+ href: '/activity/activity-taxi',
13
+ icon: 'activity',
14
+ submenu: [
15
+ {
16
+ active: false,
17
+ href: '/activity/activity-taxi',
18
+ text: 'Taxi',
19
+ view: true,
20
+ },
21
+ {
22
+ active: false,
23
+ href: '/activity/activity-parking',
24
+ text: 'Parking',
25
+ view: true,
26
+ },
27
+ {
28
+ active: false,
29
+ href: '/activity/activity-sharing',
30
+ text: 'Sharing',
31
+ view: true,
32
+ },
33
+ {
34
+ active: false,
35
+ href: '/activity/activity-public-transport',
36
+ text: 'Public transport',
37
+ view: true,
38
+ },
39
+ {
40
+ active: false,
41
+ href: '/activity/activity-kilometer-sheet',
42
+ text: 'Kilometer sheet',
43
+ view: true,
44
+ },
45
+ ],
46
+ text: 'Activity',
47
+ view: true,
48
+ viewSubMenu: true,
49
+ },
50
+ {
51
+ active: false,
52
+ href: '/staff/staff-add',
53
+ icon: 'staff',
54
+ submenu: [
55
+ {
56
+ active: false,
57
+ href: '/staff/staff-add',
58
+ text: 'Staff Add',
59
+ view: true,
60
+ },
61
+ {
62
+ active: false,
63
+ href: '/staff/staff-view',
64
+ text: 'Staff View',
65
+ view: true,
66
+ },
67
+ {
68
+ active: false,
69
+ href: '/staff/staff-group',
70
+ text: 'Staff Group',
71
+ view: true,
72
+ },
73
+ ],
74
+ text: 'Staff',
75
+ view: true,
76
+ viewSubMenu: true,
77
+ },
78
+ {
79
+ active: false,
80
+ href: '/services',
81
+ icon: 'travelPrograms',
82
+ text: 'Services',
83
+ view: true,
84
+ viewSubMenu: false,
85
+ },
86
+ {
87
+ active: false,
88
+ href: '/billing',
89
+ icon: 'billing',
90
+ text: 'Billing',
91
+ view: true,
92
+ viewSubMenu: false,
93
+ },
94
+ {
95
+ active: false,
96
+ href: '/setting/setting-company',
97
+ icon: 'setting',
98
+ submenu: [
99
+ {
100
+ active: false,
101
+ href: '/setting/setting-company',
102
+ text: 'Company',
103
+ view: true,
104
+ },
105
+ {
106
+ active: false,
107
+ href: '/setting/setting-wallet',
108
+ text: 'Wallet',
109
+ view: true,
110
+ },
111
+ ],
112
+ text: 'Setting',
113
+ view: true,
114
+ viewSubMenu: true,
115
+ },
116
+ {
117
+ active: false,
118
+ href: '/order-taxi',
119
+ icon: 'orderTaxi',
120
+ text: 'Order Taxi',
121
+ view: true,
122
+ viewSubMenu: false,
123
+ },
124
+ {
125
+ active: false,
126
+ href: '/dashboards',
127
+ icon: 'dashboardsUwa',
128
+ text: 'Dashboards',
129
+ view: true,
130
+ viewSubMenu: false,
131
+ },
132
+ {
133
+ active: false,
134
+ href: '/projects',
135
+ icon: 'projectsUwa',
136
+ text: 'Projects',
137
+ view: true,
138
+ viewSubMenu: false,
139
+ },
140
+ {
141
+ active: false,
142
+ href: '/permissions/permissions-manage-staff',
143
+ icon: 'permissions',
144
+ submenu: [
145
+ {
146
+ active: false,
147
+ href: '/permissions/permissions-manage-staff',
148
+ text: 'Permissions',
149
+ view: true,
150
+ },
151
+ ],
152
+ text: 'Permissions',
153
+ view: true,
154
+ viewSubMenu: true,
155
+ },
156
+ {
157
+ active: false,
158
+ href: '#',
159
+ icon: 'analytics',
160
+ submenu: [
161
+ {
162
+ active: false,
163
+ href: '/analytics/analytics-dashboard',
164
+ text: 'Dashboard',
165
+ view: true,
166
+ },
167
+ {
168
+ active: false,
169
+ href: '/analytics/analytics-taxi',
170
+ text: 'Taxi',
171
+ view: true,
172
+ },
173
+ {
174
+ active: false,
175
+ href: '/analytics/analytics-tollsparking',
176
+ text: 'Parking',
177
+ view: true,
178
+ },
179
+ ],
180
+ text: 'Analytics',
181
+ view: true,
182
+ viewSubMenu: true,
183
+ },
184
+ {
185
+ active: false,
186
+ href: '#',
187
+ icon: 'legal',
188
+ submenu: [
189
+ {
190
+ active: false,
191
+ href: '/legal/dashboard',
192
+ text: 'Privacy policy',
193
+ view: true,
194
+ },
195
+ {
196
+ active: false,
197
+ href: '/legal/taxi',
198
+ text: 'General terms',
199
+ view: true,
200
+ },
201
+ {
202
+ active: false,
203
+ href: '/legal/tollsparking',
204
+ text: 'Particular terms',
205
+ view: true,
206
+ },
207
+ ],
208
+ text: 'Legal',
209
+ view: true,
210
+ viewSubMenu: true,
211
+ },
212
+ {
213
+ active: false,
214
+ href: '/home',
215
+ icon: 'info',
216
+ text: 'User Guide',
217
+ view: true,
218
+ viewSubMenu: false,
219
+ },
220
+ {
221
+ active: false,
222
+ href: '/home',
223
+ icon: 'profile',
224
+ text: 'My profile',
225
+ view: true,
226
+ viewSubMenu: false,
227
+ },
228
+ ]
@@ -1,4 +1,3 @@
1
1
  export { default, Sidebar } from './Sidebar'
2
- export { subItems, options } from './constants'
2
+ export { options } from './constants'
3
3
  export { default as styles } from './Sidebar.module.css'
4
- export { default as SidebarCss } from './Sidebar.css'
@@ -1,5 +1,6 @@
1
1
  import React, { useState } from 'react'
2
2
  import PropTypes from 'prop-types'
3
+ import Link from 'next/link'
3
4
 
4
5
  import styles from './ItemMenu.module.css'
5
6
  import { options } from './constants'
@@ -7,7 +8,7 @@ import withStyles from '../../hocs/withStyles'
7
8
 
8
9
  import Icon from '../../atoms/Icon'
9
10
 
10
- export const ItemMenu = ({ children, getStyles, size, icon, color, background, subMenu, itemSubmenu }) => {
11
+ export const ItemMenu = ({ children, getStyles, size, icon, color, background, subMenu, itemSubmenu, itemHref, itemActive }) => {
11
12
 
12
13
  //create initial menuCollapse state using useState hook
13
14
  const [subMenuCollapse, setSubMenuCollapse] = useState(false)
@@ -22,45 +23,50 @@ export const ItemMenu = ({ children, getStyles, size, icon, color, background, s
22
23
  if (!subMenu) {
23
24
  return (
24
25
  <>
25
- <li className={getStyles('pro-menu-item')}>
26
+ <Link href={itemHref} passHref>
27
+ <li className={getStyles('pro-menu-item', { 'active': itemActive })}>
26
28
 
27
- <div className={getStyles('pro-inner-item')}>
29
+ <div className={getStyles('pro-inner-item')}>
28
30
 
29
- <span className={getStyles('pro-icon-wrapper')}>
31
+ <span className={getStyles('pro-icon-wrapper')}>
30
32
 
31
- <span className={getStyles('pro-icon')}>
32
- <Icon
33
- size={size}
34
- name={icon}
35
- color={color}
36
- background={background}
37
- onClick={function noRefCheck() { }}
38
- />
39
- </span>
33
+ <span className={getStyles('pro-icon')}>
40
34
 
41
- </span>
35
+ <Icon
36
+ size={size}
37
+ name={icon}
38
+ color={ itemActive ? 'primary' : color}
39
+ background={background}
40
+ onClick={function noRefCheck() { }}
41
+ />
42
42
 
43
- <span className={getStyles('pro-item-content', { 'color': color })}>{children}</span>
43
+ </span>
44
44
 
45
- </div>
45
+ </span>
46
46
 
47
- </li>
47
+ <span className={getStyles('pro-item-content', { 'color': color })}>{children}</span>
48
+
49
+ </div>
50
+
51
+ </li>
52
+ </Link>
48
53
  </>
49
54
  )
50
55
  } else {
51
56
  return (
52
57
  <>
53
- <li className={getStyles('pro-menu-item', 'pro-sub-menu', { 'open': subMenuCollapse })} title="Home" href="/">
58
+ <li className={getStyles('pro-menu-item', 'pro-sub-menu', { 'open': subMenuCollapse }, { 'activesubtxt': itemActive })} title="Home" href="/">
54
59
 
55
60
  <div className={getStyles('pro-inner-item')} onClick={subMenuIconClick}>
56
61
 
57
62
  <span className={getStyles('pro-icon-wrapper')}>
58
63
 
59
64
  <span className={getStyles('pro-icon')}>
65
+
60
66
  <Icon
61
67
  size={size}
62
68
  name={icon}
63
- color={color}
69
+ color={ itemActive ? 'primary' : color}
64
70
  background={background}
65
71
  onClick={function noRefCheck() { }}
66
72
  />
@@ -68,7 +74,7 @@ export const ItemMenu = ({ children, getStyles, size, icon, color, background, s
68
74
 
69
75
  </span>
70
76
 
71
- <span className={getStyles('pro-item-content', { 'color': color })}>{children}</span>
77
+ <span className={getStyles('pro-item-content', 'title', { 'color': color })}>{children}</span>
72
78
 
73
79
  <span className={getStyles('pro-arrow-wrapper')}>
74
80
  <span className={getStyles('pro-arrow')}></span>
@@ -80,11 +86,13 @@ export const ItemMenu = ({ children, getStyles, size, icon, color, background, s
80
86
  <div>
81
87
  <ul>
82
88
 
83
- {itemSubmenu.map((item) => (
84
- <li className={getStyles('pro-menu-item')} href={item.href}>
85
- <div className={getStyles('pro-inner-item')} role="button">
86
- <span className={getStyles('pro-item-content')}>{item.text}</span></div>
87
- </li>
89
+ {itemSubmenu.map((item, index) => (
90
+ <Link key={index} href={item.href} passHref>
91
+ <li className={getStyles('pro-menu-item', { 'activesub': item.active })}>
92
+ <div className={getStyles('pro-inner-item')} role="button">
93
+ <span className={getStyles('pro-item-content')}>{item.text}</span></div>
94
+ </li>
95
+ </Link>
88
96
  ))}
89
97
  </ul>
90
98
  </div>
@@ -102,6 +110,7 @@ ItemMenu.propTypes = {
102
110
  children: PropTypes.node.isRequired,
103
111
  getStyles: PropTypes.func.isRequired,
104
112
  subMenu: PropTypes.bool.isRequired,
113
+ itemActive: PropTypes.bool,
105
114
  icon: PropTypes.oneOf(options.icons),
106
115
  size: PropTypes.oneOf(options.sizes),
107
116
  color: PropTypes.oneOf(options.colors),
@@ -110,10 +119,12 @@ ItemMenu.propTypes = {
110
119
 
111
120
  ItemMenu.defaultProps = {
112
121
  subMenu: false,
122
+ itemActive: false,
113
123
  icon: 'home',
114
124
  size: 'lg',
115
125
  color: 'highlight',
116
126
  background: 'transparent',
127
+ itemHref: '/',
117
128
  getStyles: () => { },
118
129
  }
119
130
 
@@ -30,7 +30,7 @@
30
30
  }
31
31
 
32
32
  .pro-menu-item {
33
- font-size: 15px;
33
+ font-size: var(--font-size-base);
34
34
  list-style: none;
35
35
  }
36
36
 
@@ -89,14 +89,23 @@
89
89
  color: var(--color-primary);
90
90
  }
91
91
 
92
-
93
92
  /* ////////////////////// */
94
93
 
94
+ .pro-menu-item.active .pro-item-content {
95
+ color: var(--color-primary);
96
+ }
95
97
 
96
- .pro-menu-item.active {
97
- color: #d8d8d8;
98
+ .pro-sub-menu .pro-menu-item.activesub .pro-item-content {
99
+ color: var(--color-primary);
98
100
  }
99
101
 
102
+ .pro-menu-item.pro-sub-menu.activesubtxt .pro-inner-item .pro-item-content.title {
103
+ color: var(--color-primary);
104
+ /* font-size: 32px; */
105
+ }
106
+
107
+ /* ////////////////////// */
108
+
100
109
  .pro-menu-item .suffix-wrapper {
101
110
  opacity: 1;
102
111
  transition: opacity 0.2s;
@@ -190,7 +199,7 @@
190
199
  }
191
200
 
192
201
  .pro-menu-item.pro-sub-menu .pro-inner-list-item .pro-inner-item {
193
- padding: 14px 30px 14px 15px;
202
+ padding: 10px 30px 10px 15px;
194
203
  margin: 0;
195
204
  }
196
205
 
@@ -324,11 +333,6 @@
324
333
  transition-property: none;
325
334
  }
326
335
 
327
- .pro-menu {
328
- padding-top: 10px;
329
- padding-bottom: 10px;
330
- }
331
-
332
336
  .pro-sub-menu>.pro-inner-list-item {
333
337
  position: relative;
334
338
  background-color: hsl(0deg 0% 0% / 2%);
@@ -339,25 +343,6 @@
339
343
  padding-bottom: 15px;
340
344
  }
341
345
 
342
- .pro-menu a {
343
- text-decoration: none;
344
- color: #adadad;
345
- }
346
-
347
- .pro-menu a:before {
348
- content: '';
349
- position: absolute;
350
- top: 0;
351
- right: 0;
352
- bottom: 0;
353
- left: 0;
354
- background-color: transparent;
355
- }
356
-
357
- .pro-menu a:hover {
358
- color: #d8d8d8;
359
- }
360
-
361
346
  .popper-arrow {
362
347
  position: absolute;
363
348
  z-index: -1;
@@ -16,6 +16,8 @@ export default {
16
16
  children: 'Home',
17
17
  subMenu: false,
18
18
  itemSubmenu: options.itemSubmenu,
19
+ itemActive: false,
20
+ itemHref: '/'
19
21
  },
20
22
  argTypes: {
21
23
  itemSubmenu: {