@rescui/menu 0.13.6-RUI-296-Build-docs-md-files-for-each-docs-section-2a311c841.18 → 0.13.6-RUI-293-Update-menu-component-7a032357e.20
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/_virtual/check-outline.js +106 -0
- package/lib/_virtual/index.css.js +15 -0
- package/lib/index.css +175 -76
- package/lib/index.d.ts +1 -5
- package/lib/menu.d.ts +17 -11
- package/lib/menu.js +123 -24
- package/lib/menu.p.module.css.js +28 -27
- package/lib/parts/divider.d.ts +3 -6
- package/lib/parts/divider.js +1 -0
- package/lib/parts/group-header.d.ts +2 -8
- package/lib/parts/group-header.js +2 -1
- package/lib/parts/menu-context.d.ts +2 -19
- package/lib/parts/menu-context.js +7 -8
- package/lib/parts/menu-item.d.ts +23 -13
- package/lib/parts/menu-item.js +62 -27
- package/lib/parts/navigation-utils.d.ts +2 -2
- package/lib/parts/use-menu-keyboard-navigation.d.ts +7 -5
- package/lib/parts/use-menu-keyboard-navigation.js +98 -99
- package/lib/public-api.p.css +52 -52
- package/lib/public-api.pcss +52 -52
- package/lib/types.d.ts +64 -0
- package/llm/components/menu.md +309 -0
- package/llm/index.md +2 -0
- package/package.json +5 -4
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
# Menu (Deprecated)
|
|
2
|
+
|
|
3
|
+
Deprecated: to get a side menu, use [this component](https://github.com/JetBrains/RescUI/tree/RUI-243-Rework-Menu-component/site/components/menu) instead.
|
|
4
|
+
|
|
5
|
+
A menu is a group of elements consisting of actions and links, represented by combinations of icons and text.
|
|
6
|
+
|
|
7
|
+
## Usage
|
|
8
|
+
|
|
9
|
+
### Features showcase
|
|
10
|
+
|
|
11
|
+
#### Example
|
|
12
|
+
|
|
13
|
+
```tsx
|
|
14
|
+
import { Menu, MenuItem } from '@rescui/menu';
|
|
15
|
+
import {
|
|
16
|
+
PersonOutlineIcon,
|
|
17
|
+
CartOutlineIcon,
|
|
18
|
+
BugOutlineIcon,
|
|
19
|
+
TeamOutlineIcon,
|
|
20
|
+
SuccessOutlineIcon
|
|
21
|
+
} from '@rescui/icons';
|
|
22
|
+
|
|
23
|
+
<Menu style={{ maxWidth: 200 }}>
|
|
24
|
+
<MenuItem icon={<CartOutlineIcon />}>Cart</MenuItem>
|
|
25
|
+
<MenuItem icon={<BugOutlineIcon />}>Bug</MenuItem>
|
|
26
|
+
<MenuItem icon={<PersonOutlineIcon />}>Person</MenuItem>
|
|
27
|
+
<MenuItem icon={<TeamOutlineIcon />}>Team</MenuItem>
|
|
28
|
+
<MenuItem icon={<SuccessOutlineIcon />}>Success</MenuItem>
|
|
29
|
+
</Menu>;
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
#### With glow hover and mode rock
|
|
33
|
+
|
|
34
|
+
```tsx
|
|
35
|
+
import { Menu, MenuItem } from '@rescui/menu';
|
|
36
|
+
import {
|
|
37
|
+
PersonOutlineIcon,
|
|
38
|
+
CartOutlineIcon,
|
|
39
|
+
BugOutlineIcon,
|
|
40
|
+
TeamOutlineIcon,
|
|
41
|
+
SuccessOutlineIcon
|
|
42
|
+
} from '@rescui/icons';
|
|
43
|
+
import { useGlowHover } from '@rescui/use-glow-hover';
|
|
44
|
+
|
|
45
|
+
const GlowMenuItem = props => {
|
|
46
|
+
const ref = useGlowHover({
|
|
47
|
+
preset: 'bright-pink',
|
|
48
|
+
lightSizeEnterAnimationTime: 0,
|
|
49
|
+
lightSizeLeaveAnimationTime: 0,
|
|
50
|
+
enableBurst: true
|
|
51
|
+
});
|
|
52
|
+
return <MenuItem {...props} ref={ref} />;
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
const Demo = () => (
|
|
56
|
+
<Menu mode="rock" style={{ maxWidth: 200 }}>
|
|
57
|
+
<GlowMenuItem icon={<CartOutlineIcon />}>Cart</GlowMenuItem>
|
|
58
|
+
<GlowMenuItem icon={<BugOutlineIcon />}>Bug</GlowMenuItem>
|
|
59
|
+
<GlowMenuItem icon={<PersonOutlineIcon />}>Person</GlowMenuItem>
|
|
60
|
+
<GlowMenuItem icon={<TeamOutlineIcon />}>Team</GlowMenuItem>
|
|
61
|
+
<GlowMenuItem icon={<SuccessOutlineIcon />}>Success</GlowMenuItem>
|
|
62
|
+
</Menu>
|
|
63
|
+
);
|
|
64
|
+
|
|
65
|
+
render(<Demo />);
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
#### Change size
|
|
69
|
+
|
|
70
|
+
If you want to change a size of the menu and items content, you should use `resizeIcons` prop.
|
|
71
|
+
|
|
72
|
+
```tsx
|
|
73
|
+
import { Menu, MenuItem } from '@rescui/menu';
|
|
74
|
+
import {
|
|
75
|
+
PersonOutlineIcon,
|
|
76
|
+
CartOutlineIcon,
|
|
77
|
+
BugOutlineIcon,
|
|
78
|
+
TeamOutlineIcon,
|
|
79
|
+
SuccessOutlineIcon
|
|
80
|
+
} from '@rescui/icons';
|
|
81
|
+
|
|
82
|
+
<Menu size="s" resizeIcons style={{ maxWidth: 200 }}>
|
|
83
|
+
<MenuItem icon={<CartOutlineIcon />}>Cart</MenuItem>
|
|
84
|
+
<MenuItem icon={<BugOutlineIcon />}>Bug</MenuItem>
|
|
85
|
+
<MenuItem icon={<PersonOutlineIcon />}>Person</MenuItem>
|
|
86
|
+
<MenuItem icon={<TeamOutlineIcon />}>Team</MenuItem>
|
|
87
|
+
<MenuItem icon={<SuccessOutlineIcon />}>Success</MenuItem>
|
|
88
|
+
</Menu>;
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
#### Contrast primary color
|
|
92
|
+
|
|
93
|
+
If your primary color background requires dark text color, use `--rs-menu-contrast-primary` CSS variable.
|
|
94
|
+
|
|
95
|
+
```tsx
|
|
96
|
+
import { Menu, MenuItem } from '@rescui/menu';
|
|
97
|
+
|
|
98
|
+
const Demo = () => {
|
|
99
|
+
return (
|
|
100
|
+
<div className="light-green-primary">
|
|
101
|
+
<Menu className="menu-with-contrast-primary" style={{ maxWidth: 200 }}>
|
|
102
|
+
<MenuItem>Some text 1</MenuItem>
|
|
103
|
+
<MenuItem>Some text 2</MenuItem>
|
|
104
|
+
<MenuItem>Some text 3</MenuItem>
|
|
105
|
+
<MenuItem>Some text 4</MenuItem>
|
|
106
|
+
<MenuItem>Some text 5</MenuItem>
|
|
107
|
+
</Menu>
|
|
108
|
+
</div>
|
|
109
|
+
);
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
render(<Demo />);
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
```postcss
|
|
116
|
+
.menu-with-contrast-primary {
|
|
117
|
+
--rs-menu-contrast-primary: 1;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
.light-green-primary {
|
|
121
|
+
--rs-color-primary-light-theme: rgb(71, 224, 84);
|
|
122
|
+
--rs-color-primary-t-dim-light-theme: rgba(71, 224, 84, 0.8);
|
|
123
|
+
--rs-color-primary-t-fog-light-theme: rgba(71, 224, 84, 0.2);
|
|
124
|
+
|
|
125
|
+
--rs-color-primary-dark-theme: rgb(71, 224, 84);
|
|
126
|
+
--rs-color-primary-t-dim-dark-theme: rgba(71, 224, 84, 0.8);
|
|
127
|
+
--rs-color-primary-t-fog-dark-theme: rgba(71, 224, 84, 0.2);
|
|
128
|
+
}
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
## CSS Mixins API
|
|
132
|
+
|
|
133
|
+
#### `Menu` mixins
|
|
134
|
+
|
|
135
|
+
| Mixin name | Details |
|
|
136
|
+
| --- | --- |
|
|
137
|
+
| `rs-menu-size-s` | prop: `size`<br><br>value: `"s"` |
|
|
138
|
+
| `rs-menu-size-m` | prop: `size`<br><br>value: `"m"` |
|
|
139
|
+
| `rs-menu-size-l` | prop: `size`<br><br>value: `"l"` |
|
|
140
|
+
| `rs-menu-mode-classic` | prop: `mode`<br><br>value: `"classic"` |
|
|
141
|
+
| `rs-menu-mode-rock` | prop: `mode`<br><br>value: `"rock"` |
|
|
142
|
+
| `rs-menu-mode-clear` | prop: `mode`<br><br>value: `"clear"` |
|
|
143
|
+
| `rs-menu-icon-placement-left` | prop: `iconPlacement`<br><br>value: `"left"` |
|
|
144
|
+
| `rs-menu-icon-placement-right` | prop: `iconPlacement`<br><br>value: `"right"` |
|
|
145
|
+
|
|
146
|
+
##### Demo
|
|
147
|
+
|
|
148
|
+
Instead of separate classes, it may be a single class with `@media` queries inside:
|
|
149
|
+
|
|
150
|
+
```tsx
|
|
151
|
+
import { Menu, MenuItem } from '@rescui/menu';
|
|
152
|
+
import {
|
|
153
|
+
PersonOutlineIcon,
|
|
154
|
+
CartOutlineIcon,
|
|
155
|
+
BugOutlineIcon,
|
|
156
|
+
TeamOutlineIcon,
|
|
157
|
+
SuccessOutlineIcon
|
|
158
|
+
} from '@rescui/icons';
|
|
159
|
+
|
|
160
|
+
const MyMenu = ({ className }) => {
|
|
161
|
+
return (
|
|
162
|
+
<div style={{ padding: 12, backgroundColor: 'var(--rs-color-black-t5)' }}>
|
|
163
|
+
<Menu
|
|
164
|
+
mode="rock"
|
|
165
|
+
size="l"
|
|
166
|
+
iconPlacement={'left'}
|
|
167
|
+
style={{ maxWidth: 300 }}
|
|
168
|
+
className={className}
|
|
169
|
+
>
|
|
170
|
+
<MenuItem icon={<CartOutlineIcon size="l" className="icon" />}>Cart</MenuItem>
|
|
171
|
+
<MenuItem icon={<BugOutlineIcon size="l" className="icon" />}>Bug</MenuItem>
|
|
172
|
+
<MenuItem icon={<PersonOutlineIcon size="l" className="icon" />}>
|
|
173
|
+
Person
|
|
174
|
+
</MenuItem>
|
|
175
|
+
<MenuItem icon={<TeamOutlineIcon size="l" className="icon" />}>Team</MenuItem>
|
|
176
|
+
<MenuItem icon={<SuccessOutlineIcon size="l" className="icon" />}>
|
|
177
|
+
Success
|
|
178
|
+
</MenuItem>
|
|
179
|
+
</Menu>
|
|
180
|
+
</div>
|
|
181
|
+
);
|
|
182
|
+
};
|
|
183
|
+
|
|
184
|
+
render(
|
|
185
|
+
<div style={{ display: 'flex', flexDirection: 'column', gap: 24 }}>
|
|
186
|
+
<div>
|
|
187
|
+
<p>Default:</p>
|
|
188
|
+
<MyMenu />
|
|
189
|
+
</div>
|
|
190
|
+
<div>
|
|
191
|
+
<p>Var1:</p>
|
|
192
|
+
<MyMenu className={`my-menu-var-1`} />
|
|
193
|
+
</div>
|
|
194
|
+
<div>
|
|
195
|
+
<p>Var1 & Var2 combined:</p>
|
|
196
|
+
<MyMenu className={`my-menu-var-1 my-menu-var-2`} />
|
|
197
|
+
</div>
|
|
198
|
+
</div>
|
|
199
|
+
);
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
```postcss attached
|
|
203
|
+
@import '@rescui/menu/lib/public-api.p.css';
|
|
204
|
+
@import '@rescui/icons/lib/public-api.p.css';
|
|
205
|
+
|
|
206
|
+
.my-menu-var-1 {
|
|
207
|
+
@mixin rs-menu-size-s;
|
|
208
|
+
@mixin rs-menu-mode-classic;
|
|
209
|
+
@mixin rs-menu-icon-placement-right;
|
|
210
|
+
|
|
211
|
+
.icon {
|
|
212
|
+
@mixin rs-icon-size-s;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
.my-menu-var-2 {
|
|
216
|
+
@mixin rs-menu-size-m;
|
|
217
|
+
@mixin rs-menu-mode-clear;
|
|
218
|
+
@mixin rs-menu-icon-placement-left;
|
|
219
|
+
|
|
220
|
+
.icon {
|
|
221
|
+
@mixin rs-icon-size-m;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
#### `Menu` CSS Vars
|
|
227
|
+
|
|
228
|
+
| Variable | Syntax | Description |
|
|
229
|
+
| --- | --- | --- |
|
|
230
|
+
| `--rs-menu-contrast-primary` | `0 \| 1` | The flag whenever the current primary is contrast enough and highlighted text color should be inverted |
|
|
231
|
+
|
|
232
|
+
Check out [this example](/components/menu/#contrast-primary-color) for contrast primary.
|
|
233
|
+
|
|
234
|
+
#### `MenuItem` mixins
|
|
235
|
+
|
|
236
|
+
| Mixin name | Details |
|
|
237
|
+
| --- | --- |
|
|
238
|
+
| `rs-menu-item-size-s` | prop: `size`<br><br>value: `"s"` |
|
|
239
|
+
| `rs-menu-item-size-m` | prop: `size`<br><br>value: `"m"` |
|
|
240
|
+
| `rs-menu-item-size-l` | prop: `size`<br><br>value: `"l"` |
|
|
241
|
+
| `rs-menu-item-mode-classic` | prop: `mode`<br><br>value: `"classic"` |
|
|
242
|
+
| `rs-menu-item-mode-rock` | prop: `mode`<br><br>value: `"rock"` |
|
|
243
|
+
| `rs-menu-item-mode-clear` | prop: `mode`<br><br>value: `"clear"` |
|
|
244
|
+
| `rs-menu-item-icon-placement-left` | prop: `iconPlacement`<br><br>value: `"right"` |
|
|
245
|
+
| `rs-menu-item-icon-placement-right` | prop: `iconPlacement`<br><br>value: `"left"` |
|
|
246
|
+
|
|
247
|
+
##### Demo
|
|
248
|
+
|
|
249
|
+
Instead of separate classes, it may be a single class with `@media` queries inside:
|
|
250
|
+
|
|
251
|
+
```tsx
|
|
252
|
+
import { MenuItem } from '@rescui/menu';
|
|
253
|
+
import { PersonOutlineIcon } from '@rescui/icons';
|
|
254
|
+
|
|
255
|
+
const MyMenuItem = ({ className }) => {
|
|
256
|
+
return (
|
|
257
|
+
<div style={{ padding: 12, backgroundColor: 'var(--rs-color-black-t5)' }}>
|
|
258
|
+
<MenuItem
|
|
259
|
+
icon={<PersonOutlineIcon size="l" className="icon" />}
|
|
260
|
+
className={className}
|
|
261
|
+
style={{ maxWidth: 300 }}
|
|
262
|
+
>
|
|
263
|
+
Item
|
|
264
|
+
</MenuItem>
|
|
265
|
+
</div>
|
|
266
|
+
);
|
|
267
|
+
};
|
|
268
|
+
|
|
269
|
+
render(
|
|
270
|
+
<div style={{ display: 'flex', flexDirection: 'column', gap: 24 }}>
|
|
271
|
+
<div>
|
|
272
|
+
<p>Default:</p>
|
|
273
|
+
<MyMenuItem />
|
|
274
|
+
</div>
|
|
275
|
+
<div>
|
|
276
|
+
<p>Var1:</p>
|
|
277
|
+
<MyMenuItem className={`my-menu-item-var-1`} />
|
|
278
|
+
</div>
|
|
279
|
+
<div>
|
|
280
|
+
<p>Var1 & Var2 combined:</p>
|
|
281
|
+
<MyMenuItem className={`my-menu-item-var-1 my-menu-item-var-2`} />
|
|
282
|
+
</div>
|
|
283
|
+
</div>
|
|
284
|
+
);
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
```postcss
|
|
288
|
+
@import '@rescui/menu/lib/public-api.p.css';
|
|
289
|
+
@import '@rescui/icons/lib/public-api.p.css';
|
|
290
|
+
|
|
291
|
+
.my-menu-item-var-1 {
|
|
292
|
+
@mixin rs-menu-item-size-s;
|
|
293
|
+
@mixin rs-menu-item-mode-classic;
|
|
294
|
+
@mixin rs-menu-item-icon-placement-right;
|
|
295
|
+
|
|
296
|
+
.icon {
|
|
297
|
+
@mixin rs-icon-size-s;
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
.my-menu-item-var-2 {
|
|
301
|
+
@mixin rs-menu-item-size-m;
|
|
302
|
+
@mixin rs-menu-item-mode-clear;
|
|
303
|
+
@mixin rs-menu-item-icon-placement-left;
|
|
304
|
+
|
|
305
|
+
.icon {
|
|
306
|
+
@mixin rs-icon-size-m;
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
```
|
package/llm/index.md
ADDED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rescui/menu",
|
|
3
|
-
"version": "0.13.6-RUI-
|
|
3
|
+
"version": "0.13.6-RUI-293-Update-menu-component-7a032357e.20+7a032357e",
|
|
4
4
|
"description": "",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "JetBrains",
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
"src:main": "src/index.ts",
|
|
10
10
|
"files": [
|
|
11
11
|
"lib",
|
|
12
|
+
"llm",
|
|
12
13
|
"LICENSE.txt"
|
|
13
14
|
],
|
|
14
15
|
"publishConfig": {
|
|
@@ -25,10 +26,10 @@
|
|
|
25
26
|
"react": ">=16.8.0 <20"
|
|
26
27
|
},
|
|
27
28
|
"devDependencies": {
|
|
28
|
-
"@rescui/colors": "0.3.1-RUI-
|
|
29
|
+
"@rescui/colors": "0.3.1-RUI-293-Update-menu-component-7a032357e.55+7a032357e",
|
|
29
30
|
"@rescui/postcss-preset-library": "0.2.2",
|
|
30
31
|
"@rescui/scripts": "0.5.2",
|
|
31
|
-
"@rescui/typography": "0.27.1-RUI-
|
|
32
|
+
"@rescui/typography": "0.27.1-RUI-293-Update-menu-component-7a032357e.20+7a032357e",
|
|
32
33
|
"@rescui/visual-regression": "0.1.4",
|
|
33
34
|
"postcss": "^8.3.0"
|
|
34
35
|
},
|
|
@@ -37,5 +38,5 @@
|
|
|
37
38
|
"build-pcss-api": "rescui-scripts build-pcss-api --file public-api.p.css"
|
|
38
39
|
},
|
|
39
40
|
"nx": {},
|
|
40
|
-
"gitHead": "
|
|
41
|
+
"gitHead": "7a032357e8f31abbf69e18aa6b7ef2d75e40f42e"
|
|
41
42
|
}
|