@vaadin/accordion 23.2.0-dev.8a7678b70 → 23.3.0-alpha1

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 CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  A web component for displaying a vertically stacked set of expandable panels.
4
4
 
5
- [Documentation + Live Demo ↗](https://vaadin.com/docs/latest/ds/components/accordion)
5
+ [Documentation + Live Demo ↗](https://vaadin.com/docs/latest/components/accordion)
6
6
 
7
7
  [![npm version](https://badgen.net/npm/v/@vaadin/accordion)](https://www.npmjs.com/package/@vaadin/accordion)
8
8
  [![Discord](https://img.shields.io/discord/732335336448852018?label=discord)](https://discord.gg/PHmkCKC)
@@ -20,7 +20,7 @@ A web component for displaying a vertically stacked set of expandable panels.
20
20
  </vaadin-accordion>
21
21
  ```
22
22
 
23
- [<img src="https://raw.githubusercontent.com/vaadin/web-components/master/packages/accordion/screenshot.png" alt="Screenshot of vaadin-accordion" width="900">](https://vaadin.com/docs/latest/ds/components/accordion)
23
+ [<img src="https://raw.githubusercontent.com/vaadin/web-components/master/packages/accordion/screenshot.png" alt="Screenshot of vaadin-accordion" width="900">](https://vaadin.com/docs/latest/components/accordion)
24
24
 
25
25
  ## Installation
26
26
 
@@ -38,7 +38,7 @@ import '@vaadin/accordion';
38
38
 
39
39
  ## Themes
40
40
 
41
- Vaadin components come with two built-in [themes](https://vaadin.com/docs/latest/ds/customization/using-themes), Lumo and Material.
41
+ Vaadin components come with two built-in [themes](https://vaadin.com/docs/latest/styling), Lumo and Material.
42
42
  The [main entrypoint](https://github.com/vaadin/web-components/blob/master/packages/accordion/vaadin-accordion.js) of the package uses the Lumo theme.
43
43
 
44
44
  To use the Material theme, import the component from the `theme/material` folder:
@@ -61,7 +61,7 @@ import '@vaadin/accordion/src/vaadin-accordion.js';
61
61
 
62
62
  ## Contributing
63
63
 
64
- Read the [contributing guide](https://vaadin.com/docs/latest/guide/contributing/overview) to learn about our development process, how to propose bugfixes and improvements, and how to test your changes to Vaadin components.
64
+ Read the [contributing guide](https://vaadin.com/docs/latest/contributing/overview) to learn about our development process, how to propose bugfixes and improvements, and how to test your changes to Vaadin components.
65
65
 
66
66
  ## License
67
67
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vaadin/accordion",
3
- "version": "23.2.0-dev.8a7678b70",
3
+ "version": "23.3.0-alpha1",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -23,7 +23,9 @@
23
23
  "src",
24
24
  "theme",
25
25
  "vaadin-*.d.ts",
26
- "vaadin-*.js"
26
+ "vaadin-*.js",
27
+ "web-types.json",
28
+ "web-types.lit.json"
27
29
  ],
28
30
  "keywords": [
29
31
  "Vaadin",
@@ -34,16 +36,20 @@
34
36
  ],
35
37
  "dependencies": {
36
38
  "@polymer/polymer": "^3.0.0",
37
- "@vaadin/component-base": "23.2.0-dev.8a7678b70",
38
- "@vaadin/details": "23.2.0-dev.8a7678b70",
39
- "@vaadin/vaadin-lumo-styles": "23.2.0-dev.8a7678b70",
40
- "@vaadin/vaadin-material-styles": "23.2.0-dev.8a7678b70",
41
- "@vaadin/vaadin-themable-mixin": "23.2.0-dev.8a7678b70"
39
+ "@vaadin/component-base": "23.3.0-alpha1",
40
+ "@vaadin/details": "23.3.0-alpha1",
41
+ "@vaadin/vaadin-lumo-styles": "23.3.0-alpha1",
42
+ "@vaadin/vaadin-material-styles": "23.3.0-alpha1",
43
+ "@vaadin/vaadin-themable-mixin": "23.3.0-alpha1"
42
44
  },
43
45
  "devDependencies": {
44
46
  "@esm-bundle/chai": "^4.3.4",
45
47
  "@vaadin/testing-helpers": "^0.3.2",
46
48
  "sinon": "^13.0.2"
47
49
  },
48
- "gitHead": "85b403f96d8282f262322b56c0ff4289f843d02a"
50
+ "web-types": [
51
+ "web-types.json",
52
+ "web-types.lit.json"
53
+ ],
54
+ "gitHead": "beabc527d4b1274eb798ff701d406fed45cfe638"
49
55
  }
@@ -28,7 +28,7 @@ import { Details } from '@vaadin/details/src/vaadin-details.js';
28
28
  * `focus-ring` | Set when the element is focused using the keyboard.
29
29
  * `focused` | Set when the element is focused.
30
30
  *
31
- * See [Styling Components](https://vaadin.com/docs/latest/ds/customization/styling-components) documentation.
31
+ * See [Styling Components](https://vaadin.com/docs/latest/styling/custom-theme/styling-components) documentation.
32
32
  *
33
33
  * @fires {CustomEvent} opened-changed - Fired when the `opened` property changes.
34
34
  */
@@ -28,7 +28,7 @@ import { Details } from '@vaadin/details/src/vaadin-details.js';
28
28
  * `focus-ring` | Set when the element is focused using the keyboard.
29
29
  * `focused` | Set when the element is focused.
30
30
  *
31
- * See [Styling Components](https://vaadin.com/docs/latest/ds/customization/styling-components) documentation.
31
+ * See [Styling Components](https://vaadin.com/docs/latest/styling/custom-theme/styling-components) documentation.
32
32
  *
33
33
  * @fires {CustomEvent} opened-changed - Fired when the `opened` property changes.
34
34
  */
@@ -4,8 +4,9 @@
4
4
  * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
5
5
  */
6
6
  import { ElementMixin } from '@vaadin/component-base/src/element-mixin.js';
7
+ import { KeyboardDirectionMixin } from '@vaadin/component-base/src/keyboard-direction-mixin.js';
7
8
  import { ThemableMixin } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';
8
- import { AccordionPanel } from './vaadin-accordion-panel.js';
9
+ import type { AccordionPanel } from './vaadin-accordion-panel.js';
9
10
 
10
11
  /**
11
12
  * Fired when the `items` property changes.
@@ -23,7 +24,7 @@ export interface AccordionCustomEventMap {
23
24
  'opened-changed': AccordionOpenedChangedEvent;
24
25
  }
25
26
 
26
- export type AccordionEventMap = HTMLElementEventMap & AccordionCustomEventMap;
27
+ export type AccordionEventMap = AccordionCustomEventMap & HTMLElementEventMap;
27
28
 
28
29
  /**
29
30
  * `<vaadin-accordion>` is a Web Component implementing accordion widget —
@@ -64,12 +65,12 @@ export type AccordionEventMap = HTMLElementEventMap & AccordionCustomEventMap;
64
65
  * }
65
66
  * ```
66
67
  *
67
- * See [Styling Components](https://vaadin.com/docs/latest/ds/customization/styling-components) documentation.
68
+ * See [Styling Components](https://vaadin.com/docs/latest/styling/custom-theme/styling-components) documentation.
68
69
  *
69
70
  * @fires {CustomEvent} items-changed - Fired when the `items` property changes.
70
71
  * @fires {CustomEvent} opened-changed - Fired when the `opened` property changes.
71
72
  */
72
- declare class Accordion extends ElementMixin(ThemableMixin(HTMLElement)) {
73
+ declare class Accordion extends KeyboardDirectionMixin(ElementMixin(ThemableMixin(HTMLElement))) {
73
74
  /**
74
75
  * The index of currently opened panel. First panel is opened by
75
76
  * default. Only one panel can be opened at the same time.
@@ -87,13 +88,13 @@ declare class Accordion extends ElementMixin(ThemableMixin(HTMLElement)) {
87
88
  addEventListener<K extends keyof AccordionEventMap>(
88
89
  type: K,
89
90
  listener: (this: Accordion, ev: AccordionEventMap[K]) => void,
90
- options?: boolean | AddEventListenerOptions,
91
+ options?: AddEventListenerOptions | boolean,
91
92
  ): void;
92
93
 
93
94
  removeEventListener<K extends keyof AccordionEventMap>(
94
95
  type: K,
95
96
  listener: (this: Accordion, ev: AccordionEventMap[K]) => void,
96
- options?: boolean | EventListenerOptions,
97
+ options?: EventListenerOptions | boolean,
97
98
  ): void;
98
99
  }
99
100
 
@@ -6,6 +6,7 @@
6
6
  import { FlattenedNodesObserver } from '@polymer/polymer/lib/utils/flattened-nodes-observer.js';
7
7
  import { html, PolymerElement } from '@polymer/polymer/polymer-element.js';
8
8
  import { ElementMixin } from '@vaadin/component-base/src/element-mixin.js';
9
+ import { KeyboardDirectionMixin } from '@vaadin/component-base/src/keyboard-direction-mixin.js';
9
10
  import { ThemableMixin } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';
10
11
  import { AccordionPanel } from './vaadin-accordion-panel.js';
11
12
 
@@ -48,16 +49,17 @@ import { AccordionPanel } from './vaadin-accordion-panel.js';
48
49
  * }
49
50
  * ```
50
51
  *
51
- * See [Styling Components](https://vaadin.com/docs/latest/ds/customization/styling-components) documentation.
52
+ * See [Styling Components](https://vaadin.com/docs/latest/styling/custom-theme/styling-components) documentation.
52
53
  *
53
54
  * @fires {CustomEvent} items-changed - Fired when the `items` property changes.
54
55
  * @fires {CustomEvent} opened-changed - Fired when the `opened` property changes.
55
56
  *
56
57
  * @extends HTMLElement
57
58
  * @mixes ElementMixin
59
+ * @mixes KeyboardDirectionMixin
58
60
  * @mixes ThemableMixin
59
61
  */
60
- class Accordion extends ThemableMixin(ElementMixin(PolymerElement)) {
62
+ class Accordion extends KeyboardDirectionMixin(ThemableMixin(ElementMixin(PolymerElement))) {
61
63
  static get template() {
62
64
  return html`
63
65
  <style>
@@ -115,35 +117,21 @@ class Accordion extends ThemableMixin(ElementMixin(PolymerElement)) {
115
117
  this._boundUpdateOpened = this._updateOpened.bind(this);
116
118
  }
117
119
 
118
- /**
119
- * @return {Element | null}
120
- * @protected
121
- */
122
- get focused() {
123
- return this.getRootNode().activeElement;
124
- }
125
-
126
120
  /**
127
121
  * @protected
122
+ * @override
128
123
  */
129
124
  focus() {
130
125
  if (this._observer) {
131
126
  this._observer.flush();
132
127
  }
133
- if (Array.isArray(this.items)) {
134
- const idx = this._getAvailableIndex(0);
135
- if (idx >= 0) {
136
- this.items[idx].focus();
137
- }
138
- }
128
+ super.focus();
139
129
  }
140
130
 
141
131
  /** @protected */
142
132
  ready() {
143
133
  super.ready();
144
134
 
145
- this.addEventListener('keydown', (e) => this._onKeydown(e));
146
-
147
135
  this._observer = new FlattenedNodesObserver(this, (info) => {
148
136
  this._setItems(this._filterItems(Array.from(this.children)));
149
137
 
@@ -153,6 +141,18 @@ class Accordion extends ThemableMixin(ElementMixin(PolymerElement)) {
153
141
  });
154
142
  }
155
143
 
144
+ /**
145
+ * Override method inherited from `KeyboardDirectionMixin`
146
+ * to use the stored list of accordion panels as items.
147
+ *
148
+ * @return {Element[]}
149
+ * @protected
150
+ * @override
151
+ */
152
+ _getItems() {
153
+ return this.items;
154
+ }
155
+
156
156
  /**
157
157
  * @param {!Array<!Element>} array
158
158
  * @return {!Array<!AccordionPanel>}
@@ -173,71 +173,21 @@ class Accordion extends ThemableMixin(ElementMixin(PolymerElement)) {
173
173
  }
174
174
 
175
175
  /**
176
+ * Override an event listener from `KeyboardMixin`
177
+ * to only handle details toggle buttons events.
178
+ *
176
179
  * @param {!KeyboardEvent} event
177
180
  * @protected
181
+ * @override
178
182
  */
179
- _onKeydown(event) {
183
+ _onKeyDown(event) {
180
184
  // Only check keyboard events on details toggle buttons
181
185
  const item = event.composedPath()[0];
182
186
  if (!this.items.some((el) => el.focusElement === item)) {
183
187
  return;
184
188
  }
185
189
 
186
- const currentIdx = this.items.indexOf(this.focused);
187
- let idx;
188
- let increment;
189
-
190
- switch (event.key) {
191
- case 'ArrowUp':
192
- increment = -1;
193
- idx = currentIdx - 1;
194
- break;
195
- case 'ArrowDown':
196
- increment = 1;
197
- idx = currentIdx + 1;
198
- break;
199
- case 'Home':
200
- increment = 1;
201
- idx = 0;
202
- break;
203
- case 'End':
204
- increment = -1;
205
- idx = this.items.length - 1;
206
- break;
207
- default:
208
- // Do nothing.
209
- }
210
-
211
- idx = this._getAvailableIndex(idx, increment);
212
- if (idx >= 0) {
213
- this.items[idx].focus();
214
- this.items[idx].setAttribute('focus-ring', '');
215
- event.preventDefault();
216
- }
217
- }
218
-
219
- /**
220
- * @param {number} index
221
- * @param {number} increment
222
- * @return {number}
223
- * @protected
224
- */
225
- _getAvailableIndex(index, increment) {
226
- const totalItems = this.items.length;
227
- let idx = index;
228
- for (let i = 0; typeof idx === 'number' && i < totalItems; i++, idx += increment || 1) {
229
- if (idx < 0) {
230
- idx = totalItems - 1;
231
- } else if (idx >= totalItems) {
232
- idx = 0;
233
- }
234
-
235
- const item = this.items[idx];
236
- if (!item.disabled) {
237
- return idx;
238
- }
239
- }
240
- return -1;
190
+ super._onKeyDown(event);
241
191
  }
242
192
 
243
193
  /** @private */
package/web-types.json ADDED
@@ -0,0 +1,150 @@
1
+ {
2
+ "$schema": "https://json.schemastore.org/web-types",
3
+ "name": "@vaadin/accordion",
4
+ "version": "23.3.0-alpha1",
5
+ "description-markup": "markdown",
6
+ "contributions": {
7
+ "html": {
8
+ "elements": [
9
+ {
10
+ "name": "vaadin-accordion-panel",
11
+ "description": "The accordion panel element.\n\n### Styling\n\nThe following shadow DOM parts are exposed for styling:\n\nPart name | Description\n-----------------|----------------\n`summary` | The element used to open and close collapsible content.\n`toggle` | The element used as indicator, can represent an icon.\n`summary-content`| The wrapper for the slotted summary content.\n`content` | The wrapper for the collapsible panel content.\n\nThe following attributes are exposed for styling:\n\nAttribute | Description\n-------------| -----------\n`opened` | Set when the collapsible content is expanded and visible.\n`disabled` | Set when the element is disabled.\n`focus-ring` | Set when the element is focused using the keyboard.\n`focused` | Set when the element is focused.\n\nSee [Styling Components](https://vaadin.com/docs/latest/styling/custom-theme/styling-components) documentation.",
12
+ "attributes": [
13
+ {
14
+ "name": "disabled",
15
+ "description": "If true, the user cannot interact with this element.",
16
+ "value": {
17
+ "type": [
18
+ "boolean",
19
+ "null",
20
+ "undefined"
21
+ ]
22
+ }
23
+ },
24
+ {
25
+ "name": "autofocus",
26
+ "description": "Specify that this control should have input focus when the page loads.",
27
+ "value": {
28
+ "type": [
29
+ "boolean",
30
+ "null",
31
+ "undefined"
32
+ ]
33
+ }
34
+ },
35
+ {
36
+ "name": "opened",
37
+ "description": "If true, the details content is visible.",
38
+ "value": {
39
+ "type": [
40
+ "boolean"
41
+ ]
42
+ }
43
+ },
44
+ {
45
+ "name": "theme",
46
+ "description": "The theme variants to apply to the component.",
47
+ "value": {
48
+ "type": [
49
+ "string",
50
+ "null",
51
+ "undefined"
52
+ ]
53
+ }
54
+ }
55
+ ],
56
+ "js": {
57
+ "properties": [
58
+ {
59
+ "name": "disabled",
60
+ "description": "If true, the user cannot interact with this element.",
61
+ "value": {
62
+ "type": [
63
+ "boolean",
64
+ "null",
65
+ "undefined"
66
+ ]
67
+ }
68
+ },
69
+ {
70
+ "name": "autofocus",
71
+ "description": "Specify that this control should have input focus when the page loads.",
72
+ "value": {
73
+ "type": [
74
+ "boolean",
75
+ "null",
76
+ "undefined"
77
+ ]
78
+ }
79
+ },
80
+ {
81
+ "name": "opened",
82
+ "description": "If true, the details content is visible.",
83
+ "value": {
84
+ "type": [
85
+ "boolean"
86
+ ]
87
+ }
88
+ }
89
+ ],
90
+ "events": [
91
+ {
92
+ "name": "opened-changed",
93
+ "description": "Fired when the `opened` property changes."
94
+ }
95
+ ]
96
+ }
97
+ },
98
+ {
99
+ "name": "vaadin-accordion",
100
+ "description": "`<vaadin-accordion>` is a Web Component implementing accordion widget —\na vertically stacked set of expandable panels. The component should be\nused as a wrapper for two or more `<vaadin-accordion-panel>` components.\n\nPanel headings function as controls that enable users to open (expand)\nor hide (collapse) their associated sections of content. The user can\ntoggle panels by mouse click, Enter and Space keys.\n\nOnly one panel can be opened at a time, opening a new one forces\nprevious panel to close and hide its content.\n\n```\n<vaadin-accordion>\n <vaadin-accordion-panel>\n <div slot=\"summary\">Panel 1</div>\n This panel is opened, so the text is visible by default.\n </vaadin-accordion-panel>\n <vaadin-accordion-panel>\n <div slot=\"summary\">Panel 2</div>\n After opening this panel, the first one becomes closed.\n </vaadin-accordion-panel>\n</vaadin-accordion>\n```\n\n### Styling\n\nSee the [`<vaadin-accordion-panel>`](https://cdn.vaadin.com/vaadin-web-components/23.3.0-alpha1/#/elements/vaadin-accordion-panel)\ndocumentation for the available state attributes and stylable shadow parts.\n\n**Note:** You can apply the theme to `<vaadin-accordion>` component itself,\nespecially by using the following CSS selector:\n\n```\n:host ::slotted(vaadin-accordion-panel) {\n margin-bottom: 5px;\n}\n```\n\nSee [Styling Components](https://vaadin.com/docs/latest/styling/custom-theme/styling-components) documentation.",
101
+ "attributes": [
102
+ {
103
+ "name": "opened",
104
+ "description": "The index of currently opened panel. First panel is opened by\ndefault. Only one panel can be opened at the same time.\nSetting null or undefined closes all the accordion panels.",
105
+ "value": {
106
+ "type": [
107
+ "number"
108
+ ]
109
+ }
110
+ },
111
+ {
112
+ "name": "theme",
113
+ "description": "The theme variants to apply to the component.",
114
+ "value": {
115
+ "type": [
116
+ "string",
117
+ "null",
118
+ "undefined"
119
+ ]
120
+ }
121
+ }
122
+ ],
123
+ "js": {
124
+ "properties": [
125
+ {
126
+ "name": "opened",
127
+ "description": "The index of currently opened panel. First panel is opened by\ndefault. Only one panel can be opened at the same time.\nSetting null or undefined closes all the accordion panels.",
128
+ "value": {
129
+ "type": [
130
+ "number"
131
+ ]
132
+ }
133
+ }
134
+ ],
135
+ "events": [
136
+ {
137
+ "name": "opened-changed",
138
+ "description": "Fired when the `opened` property changes."
139
+ },
140
+ {
141
+ "name": "items-changed",
142
+ "description": "Fired when the `items` property changes."
143
+ }
144
+ ]
145
+ }
146
+ }
147
+ ]
148
+ }
149
+ }
150
+ }
@@ -0,0 +1,83 @@
1
+ {
2
+ "$schema": "https://json.schemastore.org/web-types",
3
+ "name": "@vaadin/accordion",
4
+ "version": "23.3.0-alpha1",
5
+ "description-markup": "markdown",
6
+ "framework": "lit",
7
+ "framework-config": {
8
+ "enable-when": {
9
+ "node-packages": [
10
+ "lit"
11
+ ]
12
+ }
13
+ },
14
+ "contributions": {
15
+ "html": {
16
+ "elements": [
17
+ {
18
+ "name": "vaadin-accordion-panel",
19
+ "description": "The accordion panel element.\n\n### Styling\n\nThe following shadow DOM parts are exposed for styling:\n\nPart name | Description\n-----------------|----------------\n`summary` | The element used to open and close collapsible content.\n`toggle` | The element used as indicator, can represent an icon.\n`summary-content`| The wrapper for the slotted summary content.\n`content` | The wrapper for the collapsible panel content.\n\nThe following attributes are exposed for styling:\n\nAttribute | Description\n-------------| -----------\n`opened` | Set when the collapsible content is expanded and visible.\n`disabled` | Set when the element is disabled.\n`focus-ring` | Set when the element is focused using the keyboard.\n`focused` | Set when the element is focused.\n\nSee [Styling Components](https://vaadin.com/docs/latest/styling/custom-theme/styling-components) documentation.",
20
+ "extension": true,
21
+ "attributes": [
22
+ {
23
+ "name": "?disabled",
24
+ "description": "If true, the user cannot interact with this element.",
25
+ "value": {
26
+ "kind": "expression"
27
+ }
28
+ },
29
+ {
30
+ "name": "?autofocus",
31
+ "description": "Specify that this control should have input focus when the page loads.",
32
+ "value": {
33
+ "kind": "expression"
34
+ }
35
+ },
36
+ {
37
+ "name": "?opened",
38
+ "description": "If true, the details content is visible.",
39
+ "value": {
40
+ "kind": "expression"
41
+ }
42
+ },
43
+ {
44
+ "name": "@opened-changed",
45
+ "description": "Fired when the `opened` property changes.",
46
+ "value": {
47
+ "kind": "expression"
48
+ }
49
+ }
50
+ ]
51
+ },
52
+ {
53
+ "name": "vaadin-accordion",
54
+ "description": "`<vaadin-accordion>` is a Web Component implementing accordion widget —\na vertically stacked set of expandable panels. The component should be\nused as a wrapper for two or more `<vaadin-accordion-panel>` components.\n\nPanel headings function as controls that enable users to open (expand)\nor hide (collapse) their associated sections of content. The user can\ntoggle panels by mouse click, Enter and Space keys.\n\nOnly one panel can be opened at a time, opening a new one forces\nprevious panel to close and hide its content.\n\n```\n<vaadin-accordion>\n <vaadin-accordion-panel>\n <div slot=\"summary\">Panel 1</div>\n This panel is opened, so the text is visible by default.\n </vaadin-accordion-panel>\n <vaadin-accordion-panel>\n <div slot=\"summary\">Panel 2</div>\n After opening this panel, the first one becomes closed.\n </vaadin-accordion-panel>\n</vaadin-accordion>\n```\n\n### Styling\n\nSee the [`<vaadin-accordion-panel>`](https://cdn.vaadin.com/vaadin-web-components/23.3.0-alpha1/#/elements/vaadin-accordion-panel)\ndocumentation for the available state attributes and stylable shadow parts.\n\n**Note:** You can apply the theme to `<vaadin-accordion>` component itself,\nespecially by using the following CSS selector:\n\n```\n:host ::slotted(vaadin-accordion-panel) {\n margin-bottom: 5px;\n}\n```\n\nSee [Styling Components](https://vaadin.com/docs/latest/styling/custom-theme/styling-components) documentation.",
55
+ "extension": true,
56
+ "attributes": [
57
+ {
58
+ "name": ".opened",
59
+ "description": "The index of currently opened panel. First panel is opened by\ndefault. Only one panel can be opened at the same time.\nSetting null or undefined closes all the accordion panels.",
60
+ "value": {
61
+ "kind": "expression"
62
+ }
63
+ },
64
+ {
65
+ "name": "@opened-changed",
66
+ "description": "Fired when the `opened` property changes.",
67
+ "value": {
68
+ "kind": "expression"
69
+ }
70
+ },
71
+ {
72
+ "name": "@items-changed",
73
+ "description": "Fired when the `items` property changes.",
74
+ "value": {
75
+ "kind": "expression"
76
+ }
77
+ }
78
+ ]
79
+ }
80
+ ]
81
+ }
82
+ }
83
+ }