@vaadin/menu-bar 22.0.0-alpha9 → 22.0.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/README.md +37 -24
- package/package.json +11 -10
- package/src/vaadin-menu-bar-button.js +1 -1
- package/src/vaadin-menu-bar-buttons-mixin.d.ts +7 -12
- package/src/vaadin-menu-bar-interactions-mixin.d.ts +5 -8
- package/src/vaadin-menu-bar-interactions-mixin.js +11 -9
- package/src/vaadin-menu-bar.d.ts +1 -0
- package/src/vaadin-menu-bar.js +3 -3
- package/theme/lumo/vaadin-menu-bar-button-styles.js +2 -19
- package/theme/lumo/vaadin-menu-bar-item-styles.js +1 -1
- package/theme/lumo/vaadin-menu-bar-overlay-styles.js +1 -1
- package/theme/material/vaadin-menu-bar-button-styles.js +2 -1
- package/theme/material/vaadin-menu-bar-item-styles.js +1 -1
- package/theme/material/vaadin-menu-bar-overlay-styles.js +1 -1
- package/theme/material/vaadin-menu-bar-styles.js +1 -1
package/README.md
CHANGED
|
@@ -1,54 +1,66 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @vaadin/menu-bar
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
|
5
|
-
[API documentation ↗](https://vaadin.com/components/vaadin-menu-bar/html-api)
|
|
3
|
+
A web component for creating a horizontal button bar with hierarchical drop-down menus.
|
|
6
4
|
|
|
7
|
-
[
|
|
5
|
+
[Documentation + Live Demo ↗](https://vaadin.com/docs/latest/ds/components/menu-bar)
|
|
8
6
|
|
|
9
7
|
[](https://www.npmjs.com/package/@vaadin/menu-bar)
|
|
10
|
-
[](https://vaadin.com/directory/component/vaadinvaadin-menu-bar)
|
|
11
8
|
[](https://discord.gg/PHmkCKC)
|
|
12
9
|
|
|
13
10
|
```html
|
|
14
11
|
<vaadin-menu-bar></vaadin-menu-bar>
|
|
12
|
+
|
|
13
|
+
<script>
|
|
14
|
+
document.querySelector('vaadin-menu-bar').items = [
|
|
15
|
+
{ text: 'View' },
|
|
16
|
+
{ text: 'Edit' },
|
|
17
|
+
{
|
|
18
|
+
text: 'Move',
|
|
19
|
+
children: [{ text: 'To folder' }, { text: 'To trash' }]
|
|
20
|
+
},
|
|
21
|
+
{ text: 'Duplicate' }
|
|
22
|
+
];
|
|
23
|
+
</script>
|
|
15
24
|
```
|
|
16
25
|
|
|
17
|
-
[<img src="https://raw.githubusercontent.com/vaadin/
|
|
26
|
+
[<img src="https://raw.githubusercontent.com/vaadin/web-components/master/packages/menu-bar/screenshot.png" width="345" alt="Screenshot of vaadin-menu-bar">](https://vaadin.com/docs/latest/ds/components/menu-bar)
|
|
18
27
|
|
|
19
28
|
## Installation
|
|
20
29
|
|
|
21
|
-
Install
|
|
30
|
+
Install the component:
|
|
22
31
|
|
|
23
32
|
```sh
|
|
24
|
-
npm i @vaadin/menu-bar
|
|
33
|
+
npm i @vaadin/menu-bar
|
|
25
34
|
```
|
|
26
35
|
|
|
27
|
-
Once installed, import
|
|
36
|
+
Once installed, import the component in your application:
|
|
28
37
|
|
|
29
38
|
```js
|
|
30
|
-
import '@vaadin/menu-bar
|
|
39
|
+
import '@vaadin/menu-bar';
|
|
31
40
|
```
|
|
32
41
|
|
|
33
|
-
##
|
|
34
|
-
|
|
35
|
-
Vaadin components use the Lumo theme by default.
|
|
36
|
-
|
|
37
|
-
To use the Material theme, import the correspondent file from the `theme/material` folder.
|
|
42
|
+
## Themes
|
|
38
43
|
|
|
39
|
-
|
|
44
|
+
Vaadin components come with two built-in [themes](https://vaadin.com/docs/latest/ds/customization/using-themes), Lumo and Material.
|
|
45
|
+
The [main entrypoint](https://github.com/vaadin/web-components/blob/master/packages/menu-bar/vaadin-menu-bar.js) of the package uses the Lumo theme.
|
|
40
46
|
|
|
41
|
-
|
|
47
|
+
To use the Material theme, import the component from the `theme/material` folder:
|
|
42
48
|
|
|
43
|
-
|
|
49
|
+
```js
|
|
50
|
+
import '@vaadin/menu-bar/theme/material/vaadin-menu-bar.js';
|
|
51
|
+
```
|
|
44
52
|
|
|
45
|
-
|
|
53
|
+
You can also import the Lumo version of the component explicitly:
|
|
46
54
|
|
|
47
|
-
|
|
55
|
+
```js
|
|
56
|
+
import '@vaadin/menu-bar/theme/lumo/vaadin-menu-bar.js';
|
|
57
|
+
```
|
|
48
58
|
|
|
49
|
-
-
|
|
59
|
+
Finally, you can import the un-themed component from the `src` folder to get a minimal starting point:
|
|
50
60
|
|
|
51
|
-
|
|
61
|
+
```js
|
|
62
|
+
import '@vaadin/menu-bar/src/vaadin-menu-bar.js';
|
|
63
|
+
```
|
|
52
64
|
|
|
53
65
|
## Contributing
|
|
54
66
|
|
|
@@ -58,4 +70,5 @@ Read the [contributing guide](https://vaadin.com/docs/latest/guide/contributing/
|
|
|
58
70
|
|
|
59
71
|
Apache License 2.0
|
|
60
72
|
|
|
61
|
-
Vaadin collects development time
|
|
73
|
+
Vaadin collects usage statistics at development time to improve this product.
|
|
74
|
+
For details and to opt-out, see https://github.com/vaadin/vaadin-usage-statistics.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vaadin/menu-bar",
|
|
3
|
-
"version": "22.0.0
|
|
3
|
+
"version": "22.0.0",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -32,20 +32,21 @@
|
|
|
32
32
|
"polymer"
|
|
33
33
|
],
|
|
34
34
|
"dependencies": {
|
|
35
|
+
"@open-wc/dedupe-mixin": "^1.3.0",
|
|
35
36
|
"@polymer/iron-resizable-behavior": "^3.0.0",
|
|
36
37
|
"@polymer/polymer": "^3.0.0",
|
|
37
|
-
"@vaadin/button": "22.0.0
|
|
38
|
-
"@vaadin/component-base": "22.0.0
|
|
39
|
-
"@vaadin/vaadin-context-menu": "22.0.0
|
|
40
|
-
"@vaadin/vaadin-lumo-styles": "22.0.0
|
|
41
|
-
"@vaadin/vaadin-material-styles": "22.0.0
|
|
42
|
-
"@vaadin/vaadin-themable-mixin": "22.0.0
|
|
38
|
+
"@vaadin/button": "^22.0.0",
|
|
39
|
+
"@vaadin/component-base": "^22.0.0",
|
|
40
|
+
"@vaadin/vaadin-context-menu": "^22.0.0",
|
|
41
|
+
"@vaadin/vaadin-lumo-styles": "^22.0.0",
|
|
42
|
+
"@vaadin/vaadin-material-styles": "^22.0.0",
|
|
43
|
+
"@vaadin/vaadin-themable-mixin": "^22.0.0"
|
|
43
44
|
},
|
|
44
45
|
"devDependencies": {
|
|
45
46
|
"@esm-bundle/chai": "^4.3.4",
|
|
46
|
-
"@vaadin/icon": "22.0.0
|
|
47
|
-
"@vaadin/testing-helpers": "^0.3.
|
|
47
|
+
"@vaadin/icon": "^22.0.0",
|
|
48
|
+
"@vaadin/testing-helpers": "^0.3.2",
|
|
48
49
|
"sinon": "^9.2.1"
|
|
49
50
|
},
|
|
50
|
-
"gitHead": "
|
|
51
|
+
"gitHead": "b668e9b1a975227fbe34beb70d1cd5b03dce2348"
|
|
51
52
|
}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
|
|
5
5
|
*/
|
|
6
6
|
import { Button } from '@vaadin/button/src/vaadin-button.js';
|
|
7
|
-
import {
|
|
7
|
+
import { css, registerStyles } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';
|
|
8
8
|
|
|
9
9
|
registerStyles(
|
|
10
10
|
'vaadin-menu-bar-button',
|
|
@@ -3,21 +3,16 @@
|
|
|
3
3
|
* Copyright (c) 2021 Vaadin Ltd.
|
|
4
4
|
* This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
|
|
5
5
|
*/
|
|
6
|
+
import { Constructor } from '@open-wc/dedupe-mixin';
|
|
6
7
|
|
|
7
|
-
declare function ButtonsMixin<T extends
|
|
8
|
+
export declare function ButtonsMixin<T extends Constructor<HTMLElement>>(base: T): T & Constructor<ButtonsMixinClass>;
|
|
8
9
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
interface ButtonsMixin {
|
|
14
|
-
readonly _buttons: HTMLElement[];
|
|
10
|
+
export declare class ButtonsMixinClass {
|
|
11
|
+
protected readonly _buttons: HTMLElement[];
|
|
15
12
|
|
|
16
|
-
readonly _container: HTMLElement;
|
|
13
|
+
protected readonly _container: HTMLElement;
|
|
17
14
|
|
|
18
|
-
readonly _overflow: HTMLElement;
|
|
15
|
+
protected readonly _overflow: HTMLElement;
|
|
19
16
|
|
|
20
|
-
_hasOverflow: boolean;
|
|
17
|
+
protected _hasOverflow: boolean;
|
|
21
18
|
}
|
|
22
|
-
|
|
23
|
-
export { ButtonsMixin, ButtonsMixinConstructor };
|
|
@@ -3,14 +3,13 @@
|
|
|
3
3
|
* Copyright (c) 2021 Vaadin Ltd.
|
|
4
4
|
* This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
|
|
5
5
|
*/
|
|
6
|
+
import { Constructor } from '@open-wc/dedupe-mixin';
|
|
6
7
|
|
|
7
|
-
declare function InteractionsMixin<T extends
|
|
8
|
+
export declare function InteractionsMixin<T extends Constructor<HTMLElement>>(
|
|
9
|
+
base: T
|
|
10
|
+
): T & Constructor<InteractionsMixinClass>;
|
|
8
11
|
|
|
9
|
-
|
|
10
|
-
new (...args: any[]): InteractionsMixin;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
interface InteractionsMixin {
|
|
12
|
+
export declare class InteractionsMixinClass {
|
|
14
13
|
/**
|
|
15
14
|
* If true, the submenu will open on hover (mouseover) instead of click.
|
|
16
15
|
* @attr {boolean} open-on-hover
|
|
@@ -23,5 +22,3 @@ interface InteractionsMixin {
|
|
|
23
22
|
*/
|
|
24
23
|
notifyResize(): void;
|
|
25
24
|
}
|
|
26
|
-
|
|
27
|
-
export { InteractionsMixin, InteractionsMixinConstructor };
|
|
@@ -66,6 +66,7 @@ export const InteractionsMixin = (superClass) =>
|
|
|
66
66
|
/** @protected */
|
|
67
67
|
_setExpanded(button, expanded) {
|
|
68
68
|
button.toggleAttribute('expanded', expanded);
|
|
69
|
+
button.toggleAttribute('active', expanded);
|
|
69
70
|
button.setAttribute('aria-expanded', expanded ? 'true' : 'false');
|
|
70
71
|
}
|
|
71
72
|
|
|
@@ -313,16 +314,16 @@ export const InteractionsMixin = (superClass) =>
|
|
|
313
314
|
|
|
314
315
|
subMenu.items = items;
|
|
315
316
|
subMenu.listenOn = button;
|
|
316
|
-
|
|
317
|
+
const overlay = subMenu.$.overlay;
|
|
318
|
+
overlay.positionTarget = button;
|
|
319
|
+
overlay.noVerticalOverlap = true;
|
|
317
320
|
|
|
318
|
-
|
|
321
|
+
this._expandedButton = button;
|
|
319
322
|
|
|
320
323
|
requestAnimationFrame(() => {
|
|
321
324
|
button.dispatchEvent(
|
|
322
325
|
new CustomEvent('opensubmenu', {
|
|
323
326
|
detail: {
|
|
324
|
-
x: this.__isRTL ? rect.right : rect.left,
|
|
325
|
-
y: rect.bottom,
|
|
326
327
|
children: items
|
|
327
328
|
}
|
|
328
329
|
})
|
|
@@ -341,12 +342,13 @@ export const InteractionsMixin = (superClass) =>
|
|
|
341
342
|
});
|
|
342
343
|
}
|
|
343
344
|
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
345
|
+
this.__onceOpened(() => {
|
|
346
|
+
// do not focus item when open not from keyboard
|
|
347
|
+
if (event.type !== 'keydown') {
|
|
347
348
|
subMenu.$.overlay.$.overlay.focus();
|
|
348
|
-
}
|
|
349
|
-
|
|
349
|
+
}
|
|
350
|
+
overlay._updatePosition();
|
|
351
|
+
});
|
|
350
352
|
}
|
|
351
353
|
|
|
352
354
|
/** @private */
|
package/src/vaadin-menu-bar.d.ts
CHANGED
package/src/vaadin-menu-bar.js
CHANGED
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
* Copyright (c) 2021 Vaadin Ltd.
|
|
4
4
|
* This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
|
|
5
5
|
*/
|
|
6
|
-
import
|
|
6
|
+
import './vaadin-menu-bar-submenu.js';
|
|
7
|
+
import './vaadin-menu-bar-button.js';
|
|
8
|
+
import { html, PolymerElement } from '@polymer/polymer/polymer-element.js';
|
|
7
9
|
import { ElementMixin } from '@vaadin/component-base/src/element-mixin.js';
|
|
8
10
|
import { ThemableMixin } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';
|
|
9
11
|
import { ButtonsMixin } from './vaadin-menu-bar-buttons-mixin.js';
|
|
10
12
|
import { InteractionsMixin } from './vaadin-menu-bar-interactions-mixin.js';
|
|
11
|
-
import './vaadin-menu-bar-submenu.js';
|
|
12
|
-
import './vaadin-menu-bar-button.js';
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
15
|
* `<vaadin-menu-bar>` is a Web Component providing a set of horizontally stacked buttons offering
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { registerStyles, css } from '@vaadin/vaadin-themable-mixin/register-styles.js';
|
|
2
1
|
import { button } from '@vaadin/button/theme/lumo/vaadin-button-styles.js';
|
|
2
|
+
import { css, registerStyles } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';
|
|
3
3
|
|
|
4
4
|
const menuBarButton = css`
|
|
5
5
|
:host {
|
|
@@ -15,6 +15,7 @@ const menuBarButton = css`
|
|
|
15
15
|
/* NOTE(web-padawan): avoid using shorthand padding property for IE11 */
|
|
16
16
|
[part='label'] ::slotted(vaadin-context-menu-item) {
|
|
17
17
|
justify-content: center;
|
|
18
|
+
background-color: transparent;
|
|
18
19
|
height: var(--lumo-button-size);
|
|
19
20
|
margin: 0 calc((var(--lumo-size-m) / 3 + var(--lumo-border-radius-m) / 2) * -1);
|
|
20
21
|
padding-left: calc(var(--lumo-size-m) / 3 + var(--lumo-border-radius-m) / 2);
|
|
@@ -45,24 +46,6 @@ const menuBarButton = css`
|
|
|
45
46
|
padding: 0;
|
|
46
47
|
}
|
|
47
48
|
|
|
48
|
-
:host([expanded]) {
|
|
49
|
-
background-color: var(--lumo-primary-color-10pct);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
:host([expanded][theme~='primary']) {
|
|
53
|
-
background-color: var(--lumo-primary-color-50pct);
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
:host([disabled][theme~='primary']) {
|
|
57
|
-
color: var(--lumo-disabled-text-color);
|
|
58
|
-
background-color: var(--lumo-contrast-5pct);
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
:host([expanded][theme~='tertiary']),
|
|
62
|
-
:host([expanded][theme~='tertiary-inline']) {
|
|
63
|
-
background-color: var(--lumo-primary-color-10pct) !important;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
49
|
:host(:first-of-type) {
|
|
67
50
|
border-radius: var(--lumo-border-radius-m) 0 0 var(--lumo-border-radius-m);
|
|
68
51
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { registerStyles, css } from '@vaadin/vaadin-themable-mixin/register-styles.js';
|
|
2
1
|
import '@vaadin/vaadin-lumo-styles/sizing.js';
|
|
3
2
|
import '@vaadin/vaadin-lumo-styles/spacing.js';
|
|
3
|
+
import { css, registerStyles } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';
|
|
4
4
|
|
|
5
5
|
registerStyles(
|
|
6
6
|
'vaadin-context-menu-item',
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { registerStyles, css } from '@vaadin/vaadin-themable-mixin/register-styles.js';
|
|
2
1
|
import { button } from '@vaadin/button/theme/material/vaadin-button-styles';
|
|
2
|
+
import { css, registerStyles } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';
|
|
3
3
|
|
|
4
4
|
const menuBarButton = css`
|
|
5
5
|
[part='label'] {
|
|
@@ -8,6 +8,7 @@ const menuBarButton = css`
|
|
|
8
8
|
|
|
9
9
|
[part='label'] ::slotted(vaadin-context-menu-item) {
|
|
10
10
|
line-height: 20px;
|
|
11
|
+
background-color: transparent;
|
|
11
12
|
margin: -8px;
|
|
12
13
|
padding: 8px;
|
|
13
14
|
justify-content: center;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { registerStyles, css } from '@vaadin/vaadin-themable-mixin/register-styles.js';
|
|
2
1
|
import '@vaadin/vaadin-material-styles/typography.js';
|
|
2
|
+
import { css, registerStyles } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';
|
|
3
3
|
|
|
4
4
|
registerStyles(
|
|
5
5
|
'vaadin-context-menu-item',
|