1.0.0 • Published 8 months ago

@spectrum-web-components/menu v1.0.0

Weekly downloads
499
License
Apache-2.0
Repository
github
Last release
8 months ago

Description

An <sp-menu> is used for creating a menu list. The various elements inside a menu are given as <sp-menu-group>, <sp-menu-item>, or <sp-menu-divider>. Often a <sp-menu> element will appear in a <sp-popover> element so that it displays as a togglig menu.

Usage

See it on NPM! How big is this package in your project? Try it on webcomponents.dev

yarn add @spectrum-web-components/menu

Import the side effectful registration of <sp-menu>, <sp-menu-group>, <sp-menu-item>, or <sp-menu-divider> individually as follows:

import '@spectrum-web-components/menu/sp-menu.js';
import '@spectrum-web-components/menu/sp-menu-group.js';
import '@spectrum-web-components/menu/sp-menu-item.js';
import '@spectrum-web-components/menu/sp-menu-divider.js';

When looking to leverage the Menu, MenuGroup, MenuItem, or MenuDivider base classes as a type and/or for extension purposes, do so via:

import {
    Menu,
    MenuGroup,
    MenuItem,
    MenuDivider
} from '@spectrum-web-components/menu';

Example

<sp-menu>
    <sp-menu-item>
        Deselect
    </sp-menu-item>
    <sp-menu-item>
        Select inverse
    </sp-menu-item>
    <sp-menu-item>
        Feather...
    </sp-menu-item>
    <sp-menu-item>
        Select and mask...
    </sp-menu-item>
    <sp-menu-item>
        Save selection
    </sp-menu-item>
    <sp-menu-item disabled>
        Make work path
    </sp-menu-item>
</sp-menu>

Often an <sp-menu> element will be delivered inside of an <sp-popover> element when displaying it above other content.

<sp-popover open style="position: relative">
    <sp-menu>
        <sp-menu-item value="item-1">Deselect</sp-menu-item>
        <sp-menu-item value="item-2">Select inverse</sp-menu-item>
        <sp-menu-item value="item-3">Feather...</sp-menu-item>
        <sp-menu-item value="item-4">Select and mask...</sp-menu-item>
        <sp-menu-item value="item-5">Save selection</sp-menu-item>
        <sp-menu-item value="item-6" disabled>Make work path</sp-menu-item>
    </sp-menu>
</sp-popover>

Managing a selection

The <sp-menu> element can be instructed to maintain a selection via the selects attribute. Depending on the chosen algorithm, the <sp-menu> element will hold a value property and manage the selected state of its <sp-menu-item> descendants.

selects="single"

When selects is set to single, the <sp-menu> element will maintain one selected item after an initial selection is made.

<p>
    The value of the `&lt;sp-menu&gt;` element is:
    <span id="single-value"></span>
</p>
<sp-menu
    label="Choose a shape"
    selects="single"
    onchange="this.previousElementSibling.querySelector('#single-value').textContent=this.value"
>
    <sp-menu-item value="item-1">Square</sp-menu-item>
    <sp-menu-item value="item-2">Triangle</sp-menu-item>
    <sp-menu-item value="item-3">Parallelogram</sp-menu-item>
    <sp-menu-item value="item-4">Star</sp-menu-item>
    <sp-menu-item value="item-5">Hexagon</sp-menu-item>
    <sp-menu-item value="item-6" disabled>Circle</sp-menu-item>
</sp-menu>

selects="multiple"

When selects is set to multiple, the <sp-menu> element will maintain zero or more selected items.

<p>
    The value of the `&lt;sp-menu&gt;` element is:
    <span id="multiple-value">item-3,item-4</span>
</p>
<sp-menu
    label="Choose some fruit"
    selects="multiple"
    onchange="this.previousElementSibling.querySelector('#multiple-value').textContent=this.value"
>
    <sp-menu-item value="item-1">Apple</sp-menu-item>
    <sp-menu-item value="item-2">Banana</sp-menu-item>
    <sp-menu-item value="item-3" selected>Goji berry</sp-menu-item>
    <sp-menu-item value="item-4" selected>Grapes</sp-menu-item>
    <sp-menu-item value="item-5" disabled>Kumquat</sp-menu-item>
    <sp-menu-item value="item-6">Orange</sp-menu-item>
</sp-menu>

selects="inherit"

When selects is set to inherit, the <sp-menu> element will allow its <sp-menu-item> children to participate in the selection of its nearest <sp-menu> ancestor.

<p>
    The value of the `&lt;sp-menu&gt;` element is:
    <span id="inherit-value">item-3 || item-4 || item-8 || item-11</span>
</p>
<sp-menu
    label="Choose some groceries"
    selects="multiple"
    value-separator=" || "
    onchange="this.previousElementSibling.querySelector('#inherit-value').textContent=this.value"
>
    <sp-menu label="Fruit" selects="inherit">
        <sp-menu-item value="item-1">Apple</sp-menu-item>
        <sp-menu-item value="item-2">Banana</sp-menu-item>
        <sp-menu-item value="item-3" selected>Goji berry</sp-menu-item>
        <sp-menu-item value="item-4" selected>Grapes</sp-menu-item>
        <sp-menu-item value="item-5" disabled>Kumquat</sp-menu-item>
        <sp-menu-item value="item-6">Orange</sp-menu-item>
    </sp-menu>
    <sp-menu label="Vegetables" selects="inherit">
        <sp-menu-item value="item-7">Carrot</sp-menu-item>
        <sp-menu-item value="item-8" selected>Garlic</sp-menu-item>
        <sp-menu-item value="item-9" disabled>Lettuce</sp-menu-item>
        <sp-menu-item value="item-10">Onion</sp-menu-item>
        <sp-menu-item value="item-11" selected>Potato</sp-menu-item>
        <sp-menu-item value="item-12">Tomato</sp-menu-item>
    </sp-menu>
</sp-menu>

"change" event

Whether <sp-menu> carries a selection or not, when one of the <sp-menu-item> children that it manages is activated the <sp-menu> element will dispatch a change event. At dispatch time, even when a selection is not held due to the absence of the selects attribute, the value of the <sp-menu> will correspond to the <sp-menu-item> that was activated. When the selects attribute is present, this value will be persisted beyond the lifecycle of the change event. When selects="multiple" the values of multiple items will be comma separated unless otherwise set via the value-separator attribute.

Note: The change event is only dispatched on a left mouse click or Enter/Space keypress. Right/Middle mouse clicks will not dispatch the change event.

1.0.0-rc.9

8 months ago

1.0.0-rc.7

8 months ago

1.0.0-rc.8

8 months ago

1.0.0-rc.5

8 months ago

1.0.0-rc.6

8 months ago

1.0.0-rc.10

8 months ago

1.0.0-rc.3

8 months ago

1.0.0-rc.4

8 months ago

1.0.0-rc.1

8 months ago

1.0.0-rc.2

8 months ago

0.50.0-beta.11

8 months ago

0.50.0-beta.12

8 months ago

0.50.0-beta.10

8 months ago

1.1.0-beta.1

8 months ago

1.1.0-beta.0

8 months ago

0.50.0-beta.9

8 months ago

0.50.0-beta.8

8 months ago

0.50.0-beta.7

8 months ago

0.50.0-beta.6

8 months ago

0.50.0-beta.5

8 months ago

0.50.0-beta.4

8 months ago

1.0.0

8 months ago

0.50.0-beta.3

8 months ago

0.50.0-beta.2

8 months ago

1.0.0-rc.0

8 months ago

0.50.0-beta.1

8 months ago

0.49.0-beta.2

8 months ago

0.50.0-beta.0

8 months ago

0.49.0

8 months ago

0.49.0-beta.1

8 months ago

0.48.0-beta.0

9 months ago

0.48.0-beta.1

9 months ago

0.48.0-beta.2

9 months ago

0.49.0-beta.0

9 months ago

0.48.1

9 months ago

0.43.0

1 year ago

0.44.0

11 months ago

0.45.0

11 months ago

0.42.5

1 year ago

0.48.0

9 months ago

0.46.0

10 months ago

0.47.1

10 months ago

0.47.2

9 months ago

0.47.0

10 months ago

0.42.4

1 year ago

0.42.3

1 year ago

0.42.2

1 year ago

0.42.1

1 year ago

0.42.0

1 year ago

0.41.2

1 year ago

0.41.1

1 year ago

0.41.0

1 year ago

0.40.5

1 year ago

0.40.4

1 year ago

0.40.3

1 year ago

0.40.2

1 year ago

0.40.1

2 years ago

0.35.1-rc.15

2 years ago

0.35.1-rc.25

2 years ago

0.35.1-rc.26

2 years ago

0.35.1-rc.24

2 years ago

0.38.0

2 years ago

0.35.1-rc.34

2 years ago

0.35.1-rc.43

2 years ago

0.35.1-rc.41

2 years ago

0.39.1

2 years ago

0.39.0

2 years ago

0.39.4

2 years ago

0.39.3

2 years ago

0.39.2

2 years ago

0.36.0

2 years ago

0.40.0

2 years ago

0.37.0

2 years ago

0.34.1-rc.0

2 years ago

0.34.0

2 years ago

0.35.0

2 years ago

0.32.0

2 years ago

0.31.1-react.3

2 years ago

0.31.1-react.2

2 years ago

0.33.2

2 years ago

0.33.1

2 years ago

0.33.0

2 years ago

0.30.0

2 years ago

0.31.0

2 years ago

0.31.1-react.21

2 years ago

0.16.14

2 years ago

0.16.15

2 years ago

0.16.16

2 years ago

0.16.17

2 years ago

0.16.13

2 years ago

0.16.12-react.75

2 years ago

0.16.12-react.50

2 years ago

0.16.12-react.48

2 years ago

0.16.12-react.49

2 years ago

0.16.12

2 years ago

0.16.9-react.54

3 years ago

0.16.10-style.28

2 years ago

0.16.12-react.32

2 years ago

0.16.10

2 years ago

0.16.11

2 years ago

0.16.9

3 years ago

0.16.4

3 years ago

0.16.5

3 years ago

0.16.6

3 years ago

0.16.7

3 years ago

0.16.8

3 years ago

0.16.3

3 years ago

0.16.1

3 years ago

0.16.2

3 years ago

0.15.1-devmode.0

3 years ago

0.14.3

3 years ago

0.14.4

3 years ago

0.14.5-devmode.7

3 years ago

0.14.5-devmode.0

3 years ago

0.15.0

3 years ago

0.16.0-devmode.0

3 years ago

0.16.0

3 years ago

0.14.0

3 years ago

0.14.1

3 years ago

0.14.2

3 years ago

0.14.2-slim.2

3 years ago

0.13.0

3 years ago

0.12.6-express.0

3 years ago

0.12.5

3 years ago

0.13.0-slim.10

3 years ago

0.12.5-slim.10

3 years ago

0.12.3-express.0

3 years ago

0.12.5-express.6

3 years ago

0.12.2

3 years ago

0.12.3

3 years ago

0.12.4

3 years ago

0.11.3-express.0

3 years ago

0.12.2-express.9

3 years ago

0.11.2

3 years ago

0.11.3

3 years ago

0.12.0

3 years ago

0.12.1

3 years ago

0.10.1

4 years ago

0.11.0

4 years ago

0.11.1

4 years ago

0.10.0

4 years ago

0.9.6

4 years ago

0.9.7-lit-next.0

4 years ago

0.9.5

4 years ago

0.9.6-lit-next.0

4 years ago

0.9.4

4 years ago

0.9.5-lit-next.0

4 years ago

0.9.3

4 years ago

0.9.4-lit-next.0

4 years ago

0.9.2

4 years ago

0.9.3-lit-next.0

4 years ago

0.9.2-beta.3

4 years ago

0.9.1

4 years ago

0.9.2-alpha.1

4 years ago

0.9.1-alpha.1

4 years ago

0.9.0

4 years ago

0.8.11-alpha.1

4 years ago

0.8.10

4 years ago

0.8.9

4 years ago

0.8.10-alpha.1

4 years ago

0.8.8

4 years ago

0.8.9-alpha.1

4 years ago

0.8.8-alpha.14

4 years ago

0.8.8-alpha.13

4 years ago

0.8.8-alpha.12

4 years ago

0.8.8-alpha.1

4 years ago

0.8.7

4 years ago

0.8.7-alpha.22

4 years ago

0.8.7-alpha.0

4 years ago

0.8.6

4 years ago

0.8.6-alpha.0

4 years ago

0.8.5

4 years ago

0.8.4

4 years ago

0.8.3-alpha.26

4 years ago

0.8.3

4 years ago

0.8.3-alpha.23

4 years ago

0.8.3-alpha.21

4 years ago

0.8.3-alpha.10

4 years ago

0.8.3-alpha.12

4 years ago

0.8.3-alpha.11

4 years ago

0.8.3-beta.10

4 years ago

0.8.3-alpha.17

4 years ago

0.8.3-beta.17

4 years ago

0.8.3-beta.16

4 years ago

0.8.3-beta.15

4 years ago

0.8.3-beta.14

4 years ago

0.8.3-beta.13

4 years ago

0.8.3-beta.12

4 years ago

0.8.3-beta.11

4 years ago

0.8.3-alpha.9

4 years ago

0.8.2

4 years ago

0.8.1

4 years ago

0.8.0

4 years ago

0.7.1

4 years ago

0.7.0

4 years ago

0.6.3-alpha.33

4 years ago

0.6.3

4 years ago

0.6.2

4 years ago

0.6.1

4 years ago

0.6.0

4 years ago

0.4.5-alpha.178

4 years ago

0.5.0-alpha.40

4 years ago

0.5.0

4 years ago

0.4.5-alpha.169

4 years ago

0.4.5-alpha.85

5 years ago

0.4.5-alpha.84

5 years ago

0.4.5-alpha.60

5 years ago

0.4.4

5 years ago

0.4.4-alpha.0

5 years ago

0.4.3

5 years ago

0.4.3-beta.17

5 years ago

0.4.3-alpha.17

5 years ago

0.4.2

5 years ago

0.4.1

5 years ago

0.4.0

5 years ago

0.3.2-alpha.46

5 years ago

0.3.2

5 years ago

0.3.2-alpha.3

5 years ago

0.3.1

5 years ago

0.3.0

5 years ago

0.2.8-alpha.38

5 years ago

0.2.7

5 years ago

0.2.6

5 years ago

0.2.6-alpha.11

5 years ago

0.2.5

5 years ago

0.2.4

5 years ago

0.2.3

5 years ago

0.2.2

6 years ago

0.2.1

6 years ago

0.2.0

6 years ago

0.1.4

6 years ago

0.1.3

6 years ago

0.1.2

6 years ago

0.1.1

6 years ago

0.1.0

6 years ago

0.0.1

6 years ago