imbric-theme 0.2.6 → 0.2.9

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,121 @@
1
+ import React, { useState } from 'react'
2
+ import PropTypes from 'prop-types'
3
+
4
+ import styles from './ItemMenu.module.css'
5
+ import { options } from './constants'
6
+ import withStyles from '../../hocs/withStyles'
7
+
8
+ import Icon from '../../atoms/Icon'
9
+
10
+ export const ItemMenu = ({ children, getStyles, size, icon, color, background, subMenu, itemSubmenu }) => {
11
+
12
+ //create initial menuCollapse state using useState hook
13
+ const [subMenuCollapse, setSubMenuCollapse] = useState(false)
14
+
15
+ //create a custom function that will change menucollapse state from false to true and true to false
16
+ const subMenuIconClick = () => {
17
+ //condition checking to change state from true to false and vice versa
18
+ subMenuCollapse ? setSubMenuCollapse(false) : setSubMenuCollapse(true);
19
+ };
20
+
21
+
22
+ if (!subMenu) {
23
+ return (
24
+ <>
25
+ <li className={getStyles('pro-menu-item')}>
26
+
27
+ <div className={getStyles('pro-inner-item')}>
28
+
29
+ <span className={getStyles('pro-icon-wrapper')}>
30
+
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>
40
+
41
+ </span>
42
+
43
+ <span className={getStyles('pro-item-content', { 'color': color })}>{children}</span>
44
+
45
+ </div>
46
+
47
+ </li>
48
+ </>
49
+ )
50
+ } else {
51
+ return (
52
+ <>
53
+ <li className={getStyles('pro-menu-item', 'pro-sub-menu', { 'open': subMenuCollapse })} title="Home" href="/">
54
+
55
+ <div className={getStyles('pro-inner-item')} onClick={subMenuIconClick}>
56
+
57
+ <span className={getStyles('pro-icon-wrapper')}>
58
+
59
+ <span className={getStyles('pro-icon')}>
60
+ <Icon
61
+ size={size}
62
+ name={icon}
63
+ color={color}
64
+ background={background}
65
+ onClick={function noRefCheck() { }}
66
+ />
67
+ </span>
68
+
69
+ </span>
70
+
71
+ <span className={getStyles('pro-item-content', { 'color': color })}>{children}</span>
72
+
73
+ <span className={getStyles('pro-arrow-wrapper')}>
74
+ <span className={getStyles('pro-arrow')}></span>
75
+ </span>
76
+
77
+ </div>
78
+
79
+ <div className={getStyles('react-slidedown', 'pro-inner-list-item', { 'closed': !subMenuCollapse })}>
80
+ <div>
81
+ <ul>
82
+
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>
88
+ ))}
89
+ </ul>
90
+ </div>
91
+ </div>
92
+
93
+ </li>
94
+ </>
95
+ )
96
+ }
97
+
98
+
99
+ }
100
+
101
+ ItemMenu.propTypes = {
102
+ children: PropTypes.node.isRequired,
103
+ getStyles: PropTypes.func.isRequired,
104
+ subMenu: PropTypes.bool.isRequired,
105
+ icon: PropTypes.oneOf(options.icons),
106
+ size: PropTypes.oneOf(options.sizes),
107
+ color: PropTypes.oneOf(options.colors),
108
+ background: PropTypes.oneOf(options.backgrounds),
109
+ }
110
+
111
+ ItemMenu.defaultProps = {
112
+ subMenu: false,
113
+ icon: 'home',
114
+ size: 'lg',
115
+ color: 'highlight',
116
+ background: 'transparent',
117
+ getStyles: () => { },
118
+ }
119
+
120
+
121
+ export default withStyles(styles)(ItemMenu)
@@ -0,0 +1,378 @@
1
+ @keyframes swing {
2
+
3
+ 0%,
4
+ 30%,
5
+ 50%,
6
+ 70%,
7
+ 100% {
8
+ transform: rotate(0deg);
9
+ }
10
+
11
+ 10% {
12
+ transform: rotate(10deg);
13
+ }
14
+
15
+ 40% {
16
+ transform: rotate(-10deg);
17
+ }
18
+
19
+ 60% {
20
+ transform: rotate(5deg);
21
+ }
22
+
23
+ 80% {
24
+ transform: rotate(-5deg);
25
+ }
26
+ }
27
+
28
+ .item-menu {
29
+ display: flex;
30
+ }
31
+
32
+ .pro-menu-item {
33
+ font-size: 15px;
34
+ list-style: none;
35
+ }
36
+
37
+ .pro-inner-item {
38
+ color: var(--color-font-highlight);
39
+ margin: 6px 0px;
40
+ position: relative;
41
+ display: flex;
42
+ align-items: center;
43
+ padding: 8px 35px 8px 20px;
44
+ cursor: pointer;
45
+ }
46
+
47
+ .pro-inner-item:focus {
48
+ outline: none;
49
+ color: #d8d8d8;
50
+ }
51
+
52
+ .pro-icon-wrapper {
53
+ margin-right: 10px;
54
+ font-size: 14px;
55
+ width: 35px;
56
+ min-width: 35px;
57
+ height: 35px;
58
+ line-height: 35px;
59
+ text-align: center;
60
+ display: inline-block;
61
+ }
62
+
63
+ .pro-icon {
64
+ display: flex;
65
+ height: 100%;
66
+ align-items: center;
67
+ justify-content: center;
68
+ }
69
+
70
+ .pro-inner-item:hover .pro-icon-wrapper .pro-icon {
71
+ animation: swing ease-in-out 0.5s 1 alternate;
72
+ }
73
+
74
+
75
+ .pro-sidebar.collapsed .pro-menu>ul>.pro-menu-item.pro-sub-menu:hover .pro-icon-wrapper .pro-icon {
76
+ animation: swing ease-in-out 0.5s 1 alternate;
77
+ }
78
+
79
+ .pro-item-content {
80
+ /* color: var(--color-font-highlight); */
81
+ overflow: hidden;
82
+ text-overflow: ellipsis;
83
+ white-space: nowrap;
84
+ flex-grow: 1;
85
+ flex-shrink: 1;
86
+ }
87
+
88
+ .pro-inner-item:hover .pro-item-content {
89
+ color: var(--color-primary);
90
+ }
91
+
92
+
93
+ /* ////////////////////// */
94
+
95
+
96
+ .pro-menu-item.active {
97
+ color: #d8d8d8;
98
+ }
99
+
100
+ .pro-menu-item .suffix-wrapper {
101
+ opacity: 1;
102
+ transition: opacity 0.2s;
103
+ }
104
+
105
+ .pro-menu-item .prefix-wrapper {
106
+ display: flex;
107
+ margin-right: 5px;
108
+ opacity: 1;
109
+ transition: opacity 0.2s;
110
+ }
111
+
112
+ .pro-menu-item>.pro-inner-item {
113
+ position: relative;
114
+ display: flex;
115
+ align-items: center;
116
+ padding: 8px 35px 8px 20px;
117
+ cursor: pointer;
118
+ }
119
+
120
+ .pro-menu-item>.pro-inner-item:focus {
121
+ outline: none;
122
+ color: #d8d8d8;
123
+ }
124
+
125
+ .pro-menu-item>.pro-inner-item>.pro-icon-wrapper {
126
+ margin-right: 10px;
127
+ font-size: 14px;
128
+ width: 35px;
129
+ min-width: 35px;
130
+ height: 35px;
131
+ line-height: 35px;
132
+ text-align: center;
133
+ display: inline-block;
134
+ }
135
+
136
+ .pro-menu-item>.pro-inner-item>.pro-icon-wrapper .pro-icon {
137
+ display: flex;
138
+ height: 100%;
139
+ align-items: center;
140
+ justify-content: center;
141
+ }
142
+
143
+ .pro-menu-item>.pro-inner-item>.pro-item-content {
144
+ flex-grow: 1;
145
+ flex-shrink: 1;
146
+ }
147
+
148
+ .pro-menu-item>.pro-inner-item:hover {
149
+ color: #d8d8d8;
150
+ }
151
+
152
+ .pro-menu-item>.pro-inner-item:hover .pro-icon-wrapper .pro-icon {
153
+ animation: swing ease-in-out 0.5s 1 alternate;
154
+ }
155
+
156
+ .pro-menu-item.pro-sub-menu>.pro-inner-item:before {
157
+ background: #adadad;
158
+ }
159
+
160
+ .pro-menu-item.pro-sub-menu>.pro-inner-item>.pro-arrow-wrapper {
161
+ position: absolute;
162
+ right: 20px;
163
+ top: 50%;
164
+ transform: translateY(-50%);
165
+ }
166
+
167
+ .pro-menu-item.pro-sub-menu>.pro-inner-item>.pro-arrow-wrapper .pro-arrow {
168
+ display: inline-block;
169
+ border-style: solid;
170
+ border-color: #adadad;
171
+ border-width: 0 2px 2px 0;
172
+ padding: 2.5px;
173
+ vertical-align: middle;
174
+ transition: transform 0.3s;
175
+ transform: rotate(-45deg);
176
+ }
177
+
178
+ .pro-menu-item.pro-sub-menu.open>.pro-inner-item:before {
179
+ background: transparent !important;
180
+ }
181
+
182
+ .pro-menu-item.pro-sub-menu.open>.pro-inner-item>.pro-arrow-wrapper .pro-arrow {
183
+ transform: rotate(45deg);
184
+ }
185
+
186
+ .pro-menu-item.pro-sub-menu .pro-inner-list-item {
187
+ padding-left: 50px;
188
+ padding-top: 6px;
189
+ padding-bottom: 6px;
190
+ }
191
+
192
+ .pro-menu-item.pro-sub-menu .pro-inner-list-item .pro-inner-item {
193
+ padding: 14px 30px 14px 15px;
194
+ margin: 0;
195
+ }
196
+
197
+ .pro-menu-item.pro-sub-menu .pro-inner-list-item .pro-inner-item>.pro-icon-wrapper {
198
+ background: none;
199
+ width: auto;
200
+ min-width: auto;
201
+ height: auto;
202
+ line-height: auto;
203
+ }
204
+
205
+
206
+ .pro-menu:not(.inner-submenu-arrows) .pro-inner-list-item .pro-menu-item.pro-sub-menu .pro-inner-item .pro-arrow-wrapper {
207
+ display: none;
208
+ }
209
+
210
+
211
+ .pro-sidebar.collapsed .pro-menu>ul>.pro-menu-item {
212
+ position: relative;
213
+ }
214
+
215
+ .pro-sidebar.collapsed .pro-menu>ul>.pro-menu-item>.pro-inner-item>.suffix-wrapper,
216
+ .pro-sidebar.collapsed .pro-menu>ul>.pro-menu-item>.pro-inner-item>.prefix-wrapper {
217
+ opacity: 0;
218
+ }
219
+
220
+ .pro-sidebar.collapsed .pro-menu>ul>.pro-menu-item>.pro-inner-list-item {
221
+ background-color: #2b2b2b;
222
+ z-index: 111;
223
+ }
224
+
225
+ .pro-sidebar.collapsed .pro-menu>ul>.pro-menu-item::before {
226
+ content: '';
227
+ display: inline-block;
228
+ position: absolute;
229
+ top: 0;
230
+ bottom: 0;
231
+ left: 0;
232
+ right: 0;
233
+ cursor: pointer;
234
+ }
235
+
236
+ .pro-sidebar.collapsed .pro-menu>ul>.pro-menu-item.pro-sub-menu {
237
+ position: relative;
238
+ }
239
+
240
+ .pro-sidebar.collapsed .pro-menu>ul>.pro-menu-item.pro-sub-menu>.pro-inner-item {
241
+ pointer-events: none;
242
+ }
243
+
244
+ .pro-sidebar.collapsed .pro-menu>ul>.pro-menu-item.pro-sub-menu>.pro-inner-item>.pro-arrow-wrapper {
245
+ display: none;
246
+ }
247
+
248
+ .pro-sidebar.collapsed .pro-menu>ul>.pro-menu-item.pro-sub-menu>.pro-inner-list-item {
249
+ height: auto !important;
250
+ position: fixed;
251
+ visibility: hidden;
252
+ min-width: 220px;
253
+ max-width: 270px;
254
+ background-color: transparent;
255
+ max-height: 100%;
256
+ padding-left: 3px;
257
+ }
258
+
259
+ .pro-sidebar.collapsed .pro-menu>ul>.pro-menu-item.pro-sub-menu>.pro-inner-list-item.has-arrow {
260
+ padding-left: 10px;
261
+ }
262
+
263
+ .pro-sidebar.collapsed .pro-menu>ul>.pro-menu-item.pro-sub-menu>.pro-inner-list-item>.popper-inner {
264
+ max-height: 100vh;
265
+ overflow-y: auto;
266
+ background-color: #2b2b2b;
267
+ padding-left: 20px;
268
+ border-radius: 4px;
269
+ }
270
+
271
+ .pro-sidebar.collapsed .pro-menu>ul>.pro-menu-item.pro-sub-menu:hover>.pro-inner-list-item {
272
+ transition: visibility, transform 0.3s;
273
+ visibility: visible;
274
+ }
275
+
276
+ .pro-sidebar.collapsed .pro-menu>ul>.pro-menu-item.pro-sub-menu:hover .pro-icon-wrapper .pro-icon {
277
+ animation: swing ease-in-out 0.5s 1 alternate;
278
+ }
279
+
280
+ .pro-sidebar.collapsed .pro-menu>ul>.pro-menu-item.pro-sub-menu .pro-inner-list-item .pro-sub-menu-item,
281
+ .pro-sidebar.collapsed .pro-menu>ul>.pro-menu-item.pro-sub-menu .pro-inner-list-item .pro-inner-item {
282
+ padding: 8px 30px 8px 5px;
283
+ }
284
+
285
+ /* ////////////////////// */
286
+
287
+
288
+ .pro-menu.submenu-bullets .pro-menu-item.pro-sub-menu .pro-inner-list-item .pro-inner-item:before {
289
+ content: '';
290
+ display: inline-block;
291
+ width: 4px;
292
+ min-width: 4px;
293
+ height: 4px;
294
+ border: 1px solid #2b2b2b;
295
+ border-radius: 50%;
296
+ margin-right: 15px;
297
+ position: relative;
298
+ box-shadow: 1px 0px 0px #adadad, 0px -1px 0px #adadad, 0px 1px 0px #adadad, -1px 0px 0px #adadad;
299
+ }
300
+
301
+ .pro-menu .pro-menu-item>.pro-inner-item>.pro-item-content {
302
+ overflow: hidden;
303
+ text-overflow: ellipsis;
304
+ white-space: nowrap;
305
+ }
306
+
307
+ .react-slidedown {
308
+ height: 0;
309
+ transition-property: none;
310
+ transition-duration: 0.2s;
311
+ transition-timing-function: ease-in-out;
312
+ }
313
+
314
+ .react-slidedown.transitioning {
315
+ overflow-y: hidden;
316
+ }
317
+
318
+ .react-slidedown.closed {
319
+ display: none;
320
+ }
321
+
322
+ .react-slidedown {
323
+ height: auto;
324
+ transition-property: none;
325
+ }
326
+
327
+ .pro-menu {
328
+ padding-top: 10px;
329
+ padding-bottom: 10px;
330
+ }
331
+
332
+ .pro-sub-menu>.pro-inner-list-item {
333
+ position: relative;
334
+ background-color: hsl(0deg 0% 0% / 2%);
335
+ }
336
+
337
+ .pro-sub-menu>.pro-inner-list-item>div>ul {
338
+ padding-top: 15px;
339
+ padding-bottom: 15px;
340
+ }
341
+
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
+ .popper-arrow {
362
+ position: absolute;
363
+ z-index: -1;
364
+ width: 0;
365
+ height: 0;
366
+ border-top: 7px solid transparent;
367
+ border-bottom: 7px solid transparent;
368
+ }
369
+
370
+ .popper-element[data-popper-placement^='left']>.popper-arrow {
371
+ right: 0;
372
+ border-right: 7px solid #2b2b2b;
373
+ }
374
+
375
+ .popper-element[data-popper-placement^='right']>.popper-arrow {
376
+ left: 0;
377
+ border-left: 7px solid #2b2b2b;
378
+ }
@@ -0,0 +1,40 @@
1
+ import { ItemMenu, styles, options } from '.'
2
+
3
+ import {
4
+ getTemplate,
5
+ getListTemplate,
6
+ getOptionsArgTypes,
7
+ } from '../../helpers/storybook'
8
+
9
+ const Template = getTemplate(ItemMenu, styles)
10
+ const ListTemplate = getListTemplate(ItemMenu, styles)
11
+
12
+ export default {
13
+ title: 'Molecules/ItemMenu',
14
+ component: ItemMenu,
15
+ args: {
16
+ children: 'Home',
17
+ subMenu: false,
18
+ itemSubmenu: options.itemSubmenu,
19
+ },
20
+ argTypes: {
21
+ itemSubmenu: {
22
+ description: '**array of shaped objects:**',
23
+ table: {
24
+ type: {
25
+ summary: 'object',
26
+ detail: "{ text: 'string', href: 'string', view: 'bool'}",
27
+ },
28
+ },
29
+ },
30
+ size: getOptionsArgTypes(options.sizes),
31
+ icon: getOptionsArgTypes(options.icons),
32
+ color: getOptionsArgTypes(options.colors),
33
+ background: getOptionsArgTypes(options.backgrounds),
34
+ children: { control: 'text' },
35
+ },
36
+ }
37
+
38
+ export const Default = Template.bind({})
39
+ // export const List = ListTemplate.bind({})
40
+ // List.args = { items: options.types.map((type) => ({ type })) }
@@ -0,0 +1,33 @@
1
+ import { options as iconOptions } from '../../atoms/Icon/constants'
2
+
3
+ export const options = {
4
+ sizes: ['xs', 'sm', 'md', 'lg', 'xl'],
5
+ icons: iconOptions.names,
6
+ colors: ['base', 'highlight', 'muted', 'primary', 'inverted'],
7
+ backgrounds: [
8
+ 'transparent',
9
+ 'base',
10
+ 'highlight',
11
+ 'inverted',
12
+ 'muted',
13
+ 'spotlight',
14
+ ],
15
+ subMenu: false,
16
+ itemSubmenu: [
17
+ {
18
+ text: "Taxi",
19
+ href: "/taxi",
20
+ view: true,
21
+ },
22
+ {
23
+ text: "Parking",
24
+ href: "/parking",
25
+ view: true,
26
+ },
27
+ {
28
+ text: "Sharing",
29
+ href: "/sharing",
30
+ view: true,
31
+ },
32
+ ],
33
+ }
@@ -0,0 +1,3 @@
1
+ export { default, ItemMenu } from './ItemMenu'
2
+ export { options } from './constants'
3
+ export { default as styles } from './ItemMenu.module.css'
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "imbric-theme",
3
- "version": "0.2.6",
3
+ "version": "0.2.9",
4
4
  "description": "Components library IMBRIC",
5
5
  "private": false,
6
6
  "main": "index.js",
@@ -51,8 +51,7 @@
51
51
  "license": "MIT",
52
52
  "dependencies": {
53
53
  "classnames": "2.3.1",
54
- "react-icons": "4.3.1",
55
- "react-pro-sidebar": "0.7.1"
54
+ "react-icons": "4.3.1"
56
55
  },
57
56
  "devDependencies": {
58
57
  "@babel/core": "7.11.6",