@spectrum-web-components/tags 0.8.14 → 0.8.15
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/custom-elements.json +6 -6
- package/package.json +32 -12
- package/sp-tag.dev.js +3 -0
- package/sp-tag.dev.js.map +7 -0
- package/sp-tag.js +3 -14
- package/sp-tag.js.map +7 -1
- package/sp-tags.dev.js +3 -0
- package/sp-tags.dev.js.map +7 -0
- package/sp-tags.js +3 -14
- package/sp-tags.js.map +7 -1
- package/src/Tag.dev.js +126 -0
- package/src/Tag.dev.js.map +7 -0
- package/src/Tag.js +104 -113
- package/src/Tag.js.map +7 -1
- package/src/Tags.dev.js +94 -0
- package/src/Tags.dev.js.map +7 -0
- package/src/Tags.js +87 -90
- package/src/Tags.js.map +7 -1
- package/src/index.dev.js +3 -0
- package/src/index.dev.js.map +7 -0
- package/src/index.js +3 -14
- package/src/index.js.map +7 -1
- package/src/spectrum-tag.css.dev.js +292 -0
- package/src/spectrum-tag.css.dev.js.map +7 -0
- package/src/spectrum-tag.css.js +3 -14
- package/src/spectrum-tag.css.js.map +7 -1
- package/src/spectrum-tags.css.dev.js +18 -0
- package/src/spectrum-tags.css.dev.js.map +7 -0
- package/src/spectrum-tags.css.js +3 -14
- package/src/spectrum-tags.css.js.map +7 -1
- package/src/tag.css.dev.js +334 -0
- package/src/tag.css.dev.js.map +7 -0
- package/src/tag.css.js +3 -14
- package/src/tag.css.js.map +7 -1
- package/src/tags.css.dev.js +12 -0
- package/src/tags.css.dev.js.map +7 -0
- package/src/tags.css.js +3 -14
- package/src/tags.css.js.map +7 -1
- package/stories/tags-sizes.stories.js +15 -24
- package/stories/tags-sizes.stories.js.map +7 -1
- package/stories/tags.stories.js +14 -25
- package/stories/tags.stories.js.map +7 -1
- package/test/benchmark/basic-test.js +6 -17
- package/test/benchmark/basic-test.js.map +7 -1
- package/test/tag.test.js +93 -94
- package/test/tag.test.js.map +7 -1
- package/test/tags-sizes.test-vrt.js +4 -15
- package/test/tags-sizes.test-vrt.js.map +7 -1
- package/test/tags.test-vrt.js +4 -15
- package/test/tags.test-vrt.js.map +7 -1
- package/test/tags.test.js +173 -166
- package/test/tags.test.js.map +7 -1
package/custom-elements.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"modules": [
|
|
5
5
|
{
|
|
6
6
|
"kind": "javascript-module",
|
|
7
|
-
"path": "sp-tag.
|
|
7
|
+
"path": "sp-tag.js",
|
|
8
8
|
"declarations": [],
|
|
9
9
|
"exports": [
|
|
10
10
|
{
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
},
|
|
20
20
|
{
|
|
21
21
|
"kind": "javascript-module",
|
|
22
|
-
"path": "sp-tags.
|
|
22
|
+
"path": "sp-tags.js",
|
|
23
23
|
"declarations": [],
|
|
24
24
|
"exports": [
|
|
25
25
|
{
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
},
|
|
35
35
|
{
|
|
36
36
|
"kind": "javascript-module",
|
|
37
|
-
"path": "src/Tag.
|
|
37
|
+
"path": "src/Tag.js",
|
|
38
38
|
"declarations": [
|
|
39
39
|
{
|
|
40
40
|
"kind": "class",
|
|
@@ -184,14 +184,14 @@
|
|
|
184
184
|
"name": "Tag",
|
|
185
185
|
"declaration": {
|
|
186
186
|
"name": "Tag",
|
|
187
|
-
"module": "src/Tag.
|
|
187
|
+
"module": "src/Tag.js"
|
|
188
188
|
}
|
|
189
189
|
}
|
|
190
190
|
]
|
|
191
191
|
},
|
|
192
192
|
{
|
|
193
193
|
"kind": "javascript-module",
|
|
194
|
-
"path": "src/Tags.
|
|
194
|
+
"path": "src/Tags.js",
|
|
195
195
|
"declarations": [
|
|
196
196
|
{
|
|
197
197
|
"kind": "class",
|
|
@@ -281,7 +281,7 @@
|
|
|
281
281
|
"name": "Tags",
|
|
282
282
|
"declaration": {
|
|
283
283
|
"name": "Tags",
|
|
284
|
-
"module": "src/Tags.
|
|
284
|
+
"module": "src/Tags.js"
|
|
285
285
|
}
|
|
286
286
|
}
|
|
287
287
|
]
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@spectrum-web-components/tags",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.15",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -20,13 +20,33 @@
|
|
|
20
20
|
"module": "./src/index.js",
|
|
21
21
|
"type": "module",
|
|
22
22
|
"exports": {
|
|
23
|
-
".":
|
|
24
|
-
|
|
23
|
+
".": {
|
|
24
|
+
"development": "./src/index.dev.js",
|
|
25
|
+
"default": "./src/index.js"
|
|
26
|
+
},
|
|
25
27
|
"./package.json": "./package.json",
|
|
26
|
-
"./
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
"./src/Tag.js": {
|
|
29
|
+
"development": "./src/Tag.dev.js",
|
|
30
|
+
"default": "./src/Tag.js"
|
|
31
|
+
},
|
|
32
|
+
"./src/Tags.js": {
|
|
33
|
+
"development": "./src/Tags.dev.js",
|
|
34
|
+
"default": "./src/Tags.js"
|
|
35
|
+
},
|
|
36
|
+
"./src/index.js": {
|
|
37
|
+
"development": "./src/index.dev.js",
|
|
38
|
+
"default": "./src/index.js"
|
|
39
|
+
},
|
|
40
|
+
"./src/tag.css.js": "./src/tag.css.js",
|
|
41
|
+
"./src/tags.css.js": "./src/tags.css.js",
|
|
42
|
+
"./sp-tags.js": {
|
|
43
|
+
"development": "./sp-tags.dev.js",
|
|
44
|
+
"default": "./sp-tags.js"
|
|
45
|
+
},
|
|
46
|
+
"./sp-tag.js": {
|
|
47
|
+
"development": "./sp-tag.dev.js",
|
|
48
|
+
"default": "./sp-tag.js"
|
|
49
|
+
}
|
|
30
50
|
},
|
|
31
51
|
"scripts": {
|
|
32
52
|
"test": "echo \"Error: run tests from mono-repo root.\" && exit 1"
|
|
@@ -46,10 +66,10 @@
|
|
|
46
66
|
"lit-html"
|
|
47
67
|
],
|
|
48
68
|
"dependencies": {
|
|
49
|
-
"@spectrum-web-components/base": "^0.
|
|
50
|
-
"@spectrum-web-components/button": "^0.18.
|
|
51
|
-
"@spectrum-web-components/reactive-controllers": "^0.2.
|
|
52
|
-
"@spectrum-web-components/shared": "^0.14.
|
|
69
|
+
"@spectrum-web-components/base": "^0.6.0",
|
|
70
|
+
"@spectrum-web-components/button": "^0.18.1",
|
|
71
|
+
"@spectrum-web-components/reactive-controllers": "^0.2.5",
|
|
72
|
+
"@spectrum-web-components/shared": "^0.14.5",
|
|
53
73
|
"tslib": "^2.0.0"
|
|
54
74
|
},
|
|
55
75
|
"devDependencies": {
|
|
@@ -61,5 +81,5 @@
|
|
|
61
81
|
"sideEffects": [
|
|
62
82
|
"./sp-*.js"
|
|
63
83
|
],
|
|
64
|
-
"gitHead": "
|
|
84
|
+
"gitHead": "50cac779bbb0d6735c2061f1eceb86b9daf9b22b"
|
|
65
85
|
}
|
package/sp-tag.dev.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["sp-tag.ts"],
|
|
4
|
+
"sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\nimport { Tag } from './src/Tag.dev.js'\n\ncustomElements.define('sp-tag', Tag);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'sp-tag': Tag;\n }\n}\n"],
|
|
5
|
+
"mappings": "AAWA;AAEA,eAAe,OAAO,UAAU,GAAG;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/sp-tag.js
CHANGED
|
@@ -1,14 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
you may not use this file except in compliance with the License. You may obtain a copy
|
|
5
|
-
of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
6
|
-
|
|
7
|
-
Unless required by applicable law or agreed to in writing, software distributed under
|
|
8
|
-
the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
|
|
9
|
-
OF ANY KIND, either express or implied. See the License for the specific language
|
|
10
|
-
governing permissions and limitations under the License.
|
|
11
|
-
*/
|
|
12
|
-
import { Tag } from './src/Tag.js';
|
|
13
|
-
customElements.define('sp-tag', Tag);
|
|
14
|
-
//# sourceMappingURL=sp-tag.js.map
|
|
1
|
+
import { Tag } from "./src/Tag.js";
|
|
2
|
+
customElements.define("sp-tag", Tag);
|
|
3
|
+
//# sourceMappingURL=sp-tag.js.map
|
package/sp-tag.js.map
CHANGED
|
@@ -1 +1,7 @@
|
|
|
1
|
-
{
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["sp-tag.ts"],
|
|
4
|
+
"sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\nimport { Tag } from './src/Tag.js';\n\ncustomElements.define('sp-tag', Tag);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'sp-tag': Tag;\n }\n}\n"],
|
|
5
|
+
"mappings": "AAWA;AAEA,eAAe,OAAO,UAAU,GAAG;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/sp-tags.dev.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["sp-tags.ts"],
|
|
4
|
+
"sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\nimport { Tags } from './src/Tags.dev.js'\n\ncustomElements.define('sp-tags', Tags);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'sp-tags': Tags;\n }\n}\n"],
|
|
5
|
+
"mappings": "AAWA;AAEA,eAAe,OAAO,WAAW,IAAI;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/sp-tags.js
CHANGED
|
@@ -1,14 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
you may not use this file except in compliance with the License. You may obtain a copy
|
|
5
|
-
of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
6
|
-
|
|
7
|
-
Unless required by applicable law or agreed to in writing, software distributed under
|
|
8
|
-
the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
|
|
9
|
-
OF ANY KIND, either express or implied. See the License for the specific language
|
|
10
|
-
governing permissions and limitations under the License.
|
|
11
|
-
*/
|
|
12
|
-
import { Tags } from './src/Tags.js';
|
|
13
|
-
customElements.define('sp-tags', Tags);
|
|
14
|
-
//# sourceMappingURL=sp-tags.js.map
|
|
1
|
+
import { Tags } from "./src/Tags.js";
|
|
2
|
+
customElements.define("sp-tags", Tags);
|
|
3
|
+
//# sourceMappingURL=sp-tags.js.map
|
package/sp-tags.js.map
CHANGED
|
@@ -1 +1,7 @@
|
|
|
1
|
-
{
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["sp-tags.ts"],
|
|
4
|
+
"sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\nimport { Tags } from './src/Tags.js';\n\ncustomElements.define('sp-tags', Tags);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'sp-tags': Tags;\n }\n}\n"],
|
|
5
|
+
"mappings": "AAWA;AAEA,eAAe,OAAO,WAAW,IAAI;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/src/Tag.dev.js
ADDED
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __decorateClass = (decorators, target, key, kind) => {
|
|
4
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
|
|
5
|
+
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
6
|
+
if (decorator = decorators[i])
|
|
7
|
+
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
8
|
+
if (kind && result)
|
|
9
|
+
__defProp(target, key, result);
|
|
10
|
+
return result;
|
|
11
|
+
};
|
|
12
|
+
import {
|
|
13
|
+
html,
|
|
14
|
+
SizedMixin,
|
|
15
|
+
SpectrumElement
|
|
16
|
+
} from "@spectrum-web-components/base";
|
|
17
|
+
import { property } from "@spectrum-web-components/base/src/decorators.js";
|
|
18
|
+
import "@spectrum-web-components/button/sp-clear-button.js";
|
|
19
|
+
import styles from "./tag.css.js";
|
|
20
|
+
export class Tag extends SizedMixin(SpectrumElement, {
|
|
21
|
+
validSizes: ["s", "m", "l"]
|
|
22
|
+
}) {
|
|
23
|
+
constructor() {
|
|
24
|
+
super();
|
|
25
|
+
this.deletable = false;
|
|
26
|
+
this.disabled = false;
|
|
27
|
+
this.readonly = false;
|
|
28
|
+
this.handleFocusin = () => {
|
|
29
|
+
this.addEventListener("focusout", this.handleFocusout);
|
|
30
|
+
this.addEventListener("keydown", this.handleKeydown);
|
|
31
|
+
};
|
|
32
|
+
this.handleFocusout = () => {
|
|
33
|
+
this.removeEventListener("keydown", this.handleKeydown);
|
|
34
|
+
this.removeEventListener("focusout", this.handleFocusout);
|
|
35
|
+
};
|
|
36
|
+
this.handleKeydown = (event) => {
|
|
37
|
+
if (!this.deletable) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
const { code } = event;
|
|
41
|
+
switch (code) {
|
|
42
|
+
case "Backspace":
|
|
43
|
+
case "Space":
|
|
44
|
+
case "Delete":
|
|
45
|
+
this.delete();
|
|
46
|
+
return;
|
|
47
|
+
default:
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
this.addEventListener("focusin", this.handleFocusin);
|
|
52
|
+
}
|
|
53
|
+
static get styles() {
|
|
54
|
+
return [styles];
|
|
55
|
+
}
|
|
56
|
+
get hasIcon() {
|
|
57
|
+
return !!this.querySelector('[slot="icon"]');
|
|
58
|
+
}
|
|
59
|
+
get hasAvatar() {
|
|
60
|
+
return !!this.querySelector('[slot="avatar"]');
|
|
61
|
+
}
|
|
62
|
+
delete() {
|
|
63
|
+
if (this.readonly) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
this.dispatchEvent(new Event("delete", {
|
|
67
|
+
bubbles: true
|
|
68
|
+
}));
|
|
69
|
+
}
|
|
70
|
+
render() {
|
|
71
|
+
const slots = [];
|
|
72
|
+
if (this.hasAvatar) {
|
|
73
|
+
slots.push(html`
|
|
74
|
+
<slot name="avatar"></slot>
|
|
75
|
+
`);
|
|
76
|
+
}
|
|
77
|
+
if (this.hasIcon) {
|
|
78
|
+
slots.push(html`
|
|
79
|
+
<slot name="icon"></slot>
|
|
80
|
+
`);
|
|
81
|
+
}
|
|
82
|
+
return html`
|
|
83
|
+
${slots}
|
|
84
|
+
<span class="label"><slot></slot></span>
|
|
85
|
+
${this.deletable ? html`
|
|
86
|
+
<sp-clear-button
|
|
87
|
+
class="clear-button"
|
|
88
|
+
?disabled=${this.disabled}
|
|
89
|
+
label="Remove"
|
|
90
|
+
size="s"
|
|
91
|
+
tabindex="-1"
|
|
92
|
+
@click=${this.delete}
|
|
93
|
+
></sp-clear-button>
|
|
94
|
+
` : html``}
|
|
95
|
+
`;
|
|
96
|
+
}
|
|
97
|
+
firstUpdated(changes) {
|
|
98
|
+
super.firstUpdated(changes);
|
|
99
|
+
if (!this.hasAttribute("role")) {
|
|
100
|
+
this.setAttribute("role", "listitem");
|
|
101
|
+
}
|
|
102
|
+
if (this.deletable) {
|
|
103
|
+
this.setAttribute("tabindex", !this.disabled && this.matches(":first-of-type:not([disabled])") ? "0" : "-1");
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
updated(changes) {
|
|
107
|
+
super.updated(changes);
|
|
108
|
+
if (changes.has("disabled")) {
|
|
109
|
+
if (this.disabled) {
|
|
110
|
+
this.setAttribute("aria-disabled", "true");
|
|
111
|
+
} else {
|
|
112
|
+
this.removeAttribute("aria-disabled");
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
__decorateClass([
|
|
118
|
+
property({ type: Boolean, reflect: true })
|
|
119
|
+
], Tag.prototype, "deletable", 2);
|
|
120
|
+
__decorateClass([
|
|
121
|
+
property({ type: Boolean, reflect: true })
|
|
122
|
+
], Tag.prototype, "disabled", 2);
|
|
123
|
+
__decorateClass([
|
|
124
|
+
property({ type: Boolean, reflect: true })
|
|
125
|
+
], Tag.prototype, "readonly", 2);
|
|
126
|
+
//# sourceMappingURL=Tag.dev.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["Tag.ts"],
|
|
4
|
+
"sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport {\n CSSResultArray,\n html,\n PropertyValues,\n SizedMixin,\n SpectrumElement,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport { property } from '@spectrum-web-components/base/src/decorators.js';\n\nimport '@spectrum-web-components/button/sp-clear-button.js';\n\nimport styles from './tag.css.js';\n\n/**\n * @element sp-tag\n *\n * @slot - text content for labeling the tag\n * @slot avatar - an avatar element to display within the Tag\n * @slot icon - an icon element to display within the Tag\n */\nexport class Tag extends SizedMixin(SpectrumElement, {\n validSizes: ['s', 'm', 'l'],\n}) {\n public static override get styles(): CSSResultArray {\n return [styles];\n }\n\n @property({ type: Boolean, reflect: true })\n public deletable = false;\n\n @property({ type: Boolean, reflect: true })\n public disabled = false;\n\n @property({ type: Boolean, reflect: true })\n public readonly = false;\n\n private get hasIcon(): boolean {\n return !!this.querySelector('[slot=\"icon\"]');\n }\n\n private get hasAvatar(): boolean {\n return !!this.querySelector('[slot=\"avatar\"]');\n }\n\n constructor() {\n super();\n this.addEventListener('focusin', this.handleFocusin);\n }\n\n private handleFocusin = (): void => {\n this.addEventListener('focusout', this.handleFocusout);\n this.addEventListener('keydown', this.handleKeydown);\n };\n\n private handleFocusout = (): void => {\n this.removeEventListener('keydown', this.handleKeydown);\n this.removeEventListener('focusout', this.handleFocusout);\n };\n\n private handleKeydown = (event: KeyboardEvent): void => {\n if (!this.deletable) {\n return;\n }\n const { code } = event;\n switch (code) {\n case 'Backspace':\n case 'Space':\n case 'Delete':\n this.delete();\n return;\n default:\n return;\n }\n };\n\n private delete(): void {\n if (this.readonly) {\n return;\n }\n this.dispatchEvent(\n new Event('delete', {\n bubbles: true,\n })\n );\n }\n\n protected override render(): TemplateResult {\n const slots: TemplateResult[] = [];\n if (this.hasAvatar) {\n slots.push(\n html`\n <slot name=\"avatar\"></slot>\n `\n );\n }\n if (this.hasIcon) {\n slots.push(\n html`\n <slot name=\"icon\"></slot>\n `\n );\n }\n return html`\n ${slots}\n <span class=\"label\"><slot></slot></span>\n ${this.deletable\n ? html`\n <sp-clear-button\n class=\"clear-button\"\n ?disabled=${this.disabled}\n label=\"Remove\"\n size=\"s\"\n tabindex=\"-1\"\n @click=${this.delete}\n ></sp-clear-button>\n `\n : html``}\n `;\n }\n\n protected override firstUpdated(changes: PropertyValues): void {\n super.firstUpdated(changes);\n if (!this.hasAttribute('role')) {\n this.setAttribute('role', 'listitem');\n }\n if (this.deletable) {\n this.setAttribute(\n 'tabindex',\n !this.disabled && this.matches(':first-of-type:not([disabled])')\n ? '0'\n : '-1'\n );\n }\n }\n\n protected override updated(changes: PropertyValues): void {\n super.updated(changes);\n if (changes.has('disabled')) {\n if (this.disabled) {\n this.setAttribute('aria-disabled', 'true');\n } else {\n this.removeAttribute('aria-disabled');\n }\n }\n }\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;AAYA;AAAA;AAAA;AAAA;AAAA;AAQA;AAEA;AAEA;AASO,aAAM,YAAY,WAAW,iBAAiB;AAAA,EACjD,YAAY,CAAC,KAAK,KAAK,GAAG;AAC9B,CAAC,EAAE;AAAA,EAsBC,cAAc;AACV,UAAM;AAjBH,qBAAY;AAGZ,oBAAW;AAGX,oBAAW;AAeV,yBAAgB,MAAY;AAChC,WAAK,iBAAiB,YAAY,KAAK,cAAc;AACrD,WAAK,iBAAiB,WAAW,KAAK,aAAa;AAAA,IACvD;AAEQ,0BAAiB,MAAY;AACjC,WAAK,oBAAoB,WAAW,KAAK,aAAa;AACtD,WAAK,oBAAoB,YAAY,KAAK,cAAc;AAAA,IAC5D;AAEQ,yBAAgB,CAAC,UAA+B;AACpD,UAAI,CAAC,KAAK,WAAW;AACjB;AAAA,MACJ;AACA,YAAM,EAAE,SAAS;AACjB,cAAQ;AAAA,aACC;AAAA,aACA;AAAA,aACA;AACD,eAAK,OAAO;AACZ;AAAA;AAEA;AAAA;AAAA,IAEZ;AA3BI,SAAK,iBAAiB,WAAW,KAAK,aAAa;AAAA,EACvD;AAAA,aAxB2B,SAAyB;AAChD,WAAO,CAAC,MAAM;AAAA,EAClB;AAAA,MAWY,UAAmB;AAC3B,WAAO,CAAC,CAAC,KAAK,cAAc,eAAe;AAAA,EAC/C;AAAA,MAEY,YAAqB;AAC7B,WAAO,CAAC,CAAC,KAAK,cAAc,iBAAiB;AAAA,EACjD;AAAA,EAiCQ,SAAe;AACnB,QAAI,KAAK,UAAU;AACf;AAAA,IACJ;AACA,SAAK,cACD,IAAI,MAAM,UAAU;AAAA,MAChB,SAAS;AAAA,IACb,CAAC,CACL;AAAA,EACJ;AAAA,EAEmB,SAAyB;AACxC,UAAM,QAA0B,CAAC;AACjC,QAAI,KAAK,WAAW;AAChB,YAAM,KACF;AAAA;AAAA,iBAGJ;AAAA,IACJ;AACA,QAAI,KAAK,SAAS;AACd,YAAM,KACF;AAAA;AAAA,iBAGJ;AAAA,IACJ;AACA,WAAO;AAAA,cACD;AAAA;AAAA,cAEA,KAAK,YACD;AAAA;AAAA;AAAA,sCAGoB,KAAK;AAAA;AAAA;AAAA;AAAA,mCAIR,KAAK;AAAA;AAAA,sBAGtB;AAAA;AAAA,EAEd;AAAA,EAEmB,aAAa,SAA+B;AAC3D,UAAM,aAAa,OAAO;AAC1B,QAAI,CAAC,KAAK,aAAa,MAAM,GAAG;AAC5B,WAAK,aAAa,QAAQ,UAAU;AAAA,IACxC;AACA,QAAI,KAAK,WAAW;AAChB,WAAK,aACD,YACA,CAAC,KAAK,YAAY,KAAK,QAAQ,gCAAgC,IACzD,MACA,IACV;AAAA,IACJ;AAAA,EACJ;AAAA,EAEmB,QAAQ,SAA+B;AACtD,UAAM,QAAQ,OAAO;AACrB,QAAI,QAAQ,IAAI,UAAU,GAAG;AACzB,UAAI,KAAK,UAAU;AACf,aAAK,aAAa,iBAAiB,MAAM;AAAA,MAC7C,OAAO;AACH,aAAK,gBAAgB,eAAe;AAAA,MACxC;AAAA,IACJ;AAAA,EACJ;AACJ;AArHW;AAAA,EADP,AAAC,SAAS,EAAE,MAAM,SAAS,SAAS,KAAK,CAAC;AAAA,GACnC,AARJ,IAQI;AAGA;AAAA,EADP,AAAC,SAAS,EAAE,MAAM,SAAS,SAAS,KAAK,CAAC;AAAA,GACnC,AAXJ,IAWI;AAGA;AAAA,EADP,AAAC,SAAS,EAAE,MAAM,SAAS,SAAS,KAAK,CAAC;AAAA,GACnC,AAdJ,IAcI;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/src/Tag.js
CHANGED
|
@@ -1,93 +1,88 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
import {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
* @slot - text content for labeling the tag
|
|
21
|
-
* @slot avatar - an avatar element to display within the Tag
|
|
22
|
-
* @slot icon - an icon element to display within the Tag
|
|
23
|
-
*/
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __decorateClass = (decorators, target, key, kind) => {
|
|
4
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
|
|
5
|
+
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
6
|
+
if (decorator = decorators[i])
|
|
7
|
+
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
8
|
+
if (kind && result)
|
|
9
|
+
__defProp(target, key, result);
|
|
10
|
+
return result;
|
|
11
|
+
};
|
|
12
|
+
import {
|
|
13
|
+
html,
|
|
14
|
+
SizedMixin,
|
|
15
|
+
SpectrumElement
|
|
16
|
+
} from "@spectrum-web-components/base";
|
|
17
|
+
import { property } from "@spectrum-web-components/base/src/decorators.js";
|
|
18
|
+
import "@spectrum-web-components/button/sp-clear-button.js";
|
|
19
|
+
import styles from "./tag.css.js";
|
|
24
20
|
export class Tag extends SizedMixin(SpectrumElement, {
|
|
25
|
-
|
|
21
|
+
validSizes: ["s", "m", "l"]
|
|
26
22
|
}) {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
23
|
+
constructor() {
|
|
24
|
+
super();
|
|
25
|
+
this.deletable = false;
|
|
26
|
+
this.disabled = false;
|
|
27
|
+
this.readonly = false;
|
|
28
|
+
this.handleFocusin = () => {
|
|
29
|
+
this.addEventListener("focusout", this.handleFocusout);
|
|
30
|
+
this.addEventListener("keydown", this.handleKeydown);
|
|
31
|
+
};
|
|
32
|
+
this.handleFocusout = () => {
|
|
33
|
+
this.removeEventListener("keydown", this.handleKeydown);
|
|
34
|
+
this.removeEventListener("focusout", this.handleFocusout);
|
|
35
|
+
};
|
|
36
|
+
this.handleKeydown = (event) => {
|
|
37
|
+
if (!this.deletable) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
const { code } = event;
|
|
41
|
+
switch (code) {
|
|
42
|
+
case "Backspace":
|
|
43
|
+
case "Space":
|
|
44
|
+
case "Delete":
|
|
45
|
+
this.delete();
|
|
46
|
+
return;
|
|
47
|
+
default:
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
this.addEventListener("focusin", this.handleFocusin);
|
|
52
|
+
}
|
|
53
|
+
static get styles() {
|
|
54
|
+
return [styles];
|
|
55
|
+
}
|
|
56
|
+
get hasIcon() {
|
|
57
|
+
return !!this.querySelector('[slot="icon"]');
|
|
58
|
+
}
|
|
59
|
+
get hasAvatar() {
|
|
60
|
+
return !!this.querySelector('[slot="avatar"]');
|
|
61
|
+
}
|
|
62
|
+
delete() {
|
|
63
|
+
if (this.readonly) {
|
|
64
|
+
return;
|
|
56
65
|
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
}
|
|
66
|
-
delete() {
|
|
67
|
-
if (this.readonly) {
|
|
68
|
-
return;
|
|
69
|
-
}
|
|
70
|
-
this.dispatchEvent(new Event('delete', {
|
|
71
|
-
bubbles: true,
|
|
72
|
-
}));
|
|
73
|
-
}
|
|
74
|
-
render() {
|
|
75
|
-
const slots = [];
|
|
76
|
-
if (this.hasAvatar) {
|
|
77
|
-
slots.push(html `
|
|
66
|
+
this.dispatchEvent(new Event("delete", {
|
|
67
|
+
bubbles: true
|
|
68
|
+
}));
|
|
69
|
+
}
|
|
70
|
+
render() {
|
|
71
|
+
const slots = [];
|
|
72
|
+
if (this.hasAvatar) {
|
|
73
|
+
slots.push(html`
|
|
78
74
|
<slot name="avatar"></slot>
|
|
79
75
|
`);
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
76
|
+
}
|
|
77
|
+
if (this.hasIcon) {
|
|
78
|
+
slots.push(html`
|
|
83
79
|
<slot name="icon"></slot>
|
|
84
80
|
`);
|
|
85
|
-
|
|
86
|
-
|
|
81
|
+
}
|
|
82
|
+
return html`
|
|
87
83
|
${slots}
|
|
88
84
|
<span class="label"><slot></slot></span>
|
|
89
|
-
${this.deletable
|
|
90
|
-
? html `
|
|
85
|
+
${this.deletable ? html`
|
|
91
86
|
<sp-clear-button
|
|
92
87
|
class="clear-button"
|
|
93
88
|
?disabled=${this.disabled}
|
|
@@ -96,40 +91,36 @@ export class Tag extends SizedMixin(SpectrumElement, {
|
|
|
96
91
|
tabindex="-1"
|
|
97
92
|
@click=${this.delete}
|
|
98
93
|
></sp-clear-button>
|
|
99
|
-
`
|
|
100
|
-
: html ``}
|
|
94
|
+
` : html``}
|
|
101
95
|
`;
|
|
96
|
+
}
|
|
97
|
+
firstUpdated(changes) {
|
|
98
|
+
super.firstUpdated(changes);
|
|
99
|
+
if (!this.hasAttribute("role")) {
|
|
100
|
+
this.setAttribute("role", "listitem");
|
|
102
101
|
}
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
if (!this.hasAttribute('role')) {
|
|
106
|
-
this.setAttribute('role', 'listitem');
|
|
107
|
-
}
|
|
108
|
-
if (this.deletable) {
|
|
109
|
-
this.setAttribute('tabindex', !this.disabled && this.matches(':first-of-type:not([disabled])')
|
|
110
|
-
? '0'
|
|
111
|
-
: '-1');
|
|
112
|
-
}
|
|
102
|
+
if (this.deletable) {
|
|
103
|
+
this.setAttribute("tabindex", !this.disabled && this.matches(":first-of-type:not([disabled])") ? "0" : "-1");
|
|
113
104
|
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
}
|
|
105
|
+
}
|
|
106
|
+
updated(changes) {
|
|
107
|
+
super.updated(changes);
|
|
108
|
+
if (changes.has("disabled")) {
|
|
109
|
+
if (this.disabled) {
|
|
110
|
+
this.setAttribute("aria-disabled", "true");
|
|
111
|
+
} else {
|
|
112
|
+
this.removeAttribute("aria-disabled");
|
|
113
|
+
}
|
|
124
114
|
}
|
|
115
|
+
}
|
|
125
116
|
}
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
], Tag.prototype, "deletable",
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
], Tag.prototype, "disabled",
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
], Tag.prototype, "readonly",
|
|
135
|
-
//# sourceMappingURL=Tag.js.map
|
|
117
|
+
__decorateClass([
|
|
118
|
+
property({ type: Boolean, reflect: true })
|
|
119
|
+
], Tag.prototype, "deletable", 2);
|
|
120
|
+
__decorateClass([
|
|
121
|
+
property({ type: Boolean, reflect: true })
|
|
122
|
+
], Tag.prototype, "disabled", 2);
|
|
123
|
+
__decorateClass([
|
|
124
|
+
property({ type: Boolean, reflect: true })
|
|
125
|
+
], Tag.prototype, "readonly", 2);
|
|
126
|
+
//# sourceMappingURL=Tag.js.map
|
package/src/Tag.js.map
CHANGED
|
@@ -1 +1,7 @@
|
|
|
1
|
-
{
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["Tag.ts"],
|
|
4
|
+
"sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport {\n CSSResultArray,\n html,\n PropertyValues,\n SizedMixin,\n SpectrumElement,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport { property } from '@spectrum-web-components/base/src/decorators.js';\n\nimport '@spectrum-web-components/button/sp-clear-button.js';\n\nimport styles from './tag.css.js';\n\n/**\n * @element sp-tag\n *\n * @slot - text content for labeling the tag\n * @slot avatar - an avatar element to display within the Tag\n * @slot icon - an icon element to display within the Tag\n */\nexport class Tag extends SizedMixin(SpectrumElement, {\n validSizes: ['s', 'm', 'l'],\n}) {\n public static override get styles(): CSSResultArray {\n return [styles];\n }\n\n @property({ type: Boolean, reflect: true })\n public deletable = false;\n\n @property({ type: Boolean, reflect: true })\n public disabled = false;\n\n @property({ type: Boolean, reflect: true })\n public readonly = false;\n\n private get hasIcon(): boolean {\n return !!this.querySelector('[slot=\"icon\"]');\n }\n\n private get hasAvatar(): boolean {\n return !!this.querySelector('[slot=\"avatar\"]');\n }\n\n constructor() {\n super();\n this.addEventListener('focusin', this.handleFocusin);\n }\n\n private handleFocusin = (): void => {\n this.addEventListener('focusout', this.handleFocusout);\n this.addEventListener('keydown', this.handleKeydown);\n };\n\n private handleFocusout = (): void => {\n this.removeEventListener('keydown', this.handleKeydown);\n this.removeEventListener('focusout', this.handleFocusout);\n };\n\n private handleKeydown = (event: KeyboardEvent): void => {\n if (!this.deletable) {\n return;\n }\n const { code } = event;\n switch (code) {\n case 'Backspace':\n case 'Space':\n case 'Delete':\n this.delete();\n return;\n default:\n return;\n }\n };\n\n private delete(): void {\n if (this.readonly) {\n return;\n }\n this.dispatchEvent(\n new Event('delete', {\n bubbles: true,\n })\n );\n }\n\n protected override render(): TemplateResult {\n const slots: TemplateResult[] = [];\n if (this.hasAvatar) {\n slots.push(\n html`\n <slot name=\"avatar\"></slot>\n `\n );\n }\n if (this.hasIcon) {\n slots.push(\n html`\n <slot name=\"icon\"></slot>\n `\n );\n }\n return html`\n ${slots}\n <span class=\"label\"><slot></slot></span>\n ${this.deletable\n ? html`\n <sp-clear-button\n class=\"clear-button\"\n ?disabled=${this.disabled}\n label=\"Remove\"\n size=\"s\"\n tabindex=\"-1\"\n @click=${this.delete}\n ></sp-clear-button>\n `\n : html``}\n `;\n }\n\n protected override firstUpdated(changes: PropertyValues): void {\n super.firstUpdated(changes);\n if (!this.hasAttribute('role')) {\n this.setAttribute('role', 'listitem');\n }\n if (this.deletable) {\n this.setAttribute(\n 'tabindex',\n !this.disabled && this.matches(':first-of-type:not([disabled])')\n ? '0'\n : '-1'\n );\n }\n }\n\n protected override updated(changes: PropertyValues): void {\n super.updated(changes);\n if (changes.has('disabled')) {\n if (this.disabled) {\n this.setAttribute('aria-disabled', 'true');\n } else {\n this.removeAttribute('aria-disabled');\n }\n }\n }\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;AAYA;AAAA;AAAA;AAAA;AAAA;AAQA;AAEA;AAEA;AASO,aAAM,YAAY,WAAW,iBAAiB;AAAA,EACjD,YAAY,CAAC,KAAK,KAAK,GAAG;AAC9B,CAAC,EAAE;AAAA,EAsBC,cAAc;AACV,UAAM;AAjBH,qBAAY;AAGZ,oBAAW;AAGX,oBAAW;AAeV,yBAAgB,MAAY;AAChC,WAAK,iBAAiB,YAAY,KAAK,cAAc;AACrD,WAAK,iBAAiB,WAAW,KAAK,aAAa;AAAA,IACvD;AAEQ,0BAAiB,MAAY;AACjC,WAAK,oBAAoB,WAAW,KAAK,aAAa;AACtD,WAAK,oBAAoB,YAAY,KAAK,cAAc;AAAA,IAC5D;AAEQ,yBAAgB,CAAC,UAA+B;AACpD,UAAI,CAAC,KAAK,WAAW;AACjB;AAAA,MACJ;AACA,YAAM,EAAE,SAAS;AACjB,cAAQ;AAAA,aACC;AAAA,aACA;AAAA,aACA;AACD,eAAK,OAAO;AACZ;AAAA;AAEA;AAAA;AAAA,IAEZ;AA3BI,SAAK,iBAAiB,WAAW,KAAK,aAAa;AAAA,EACvD;AAAA,aAxB2B,SAAyB;AAChD,WAAO,CAAC,MAAM;AAAA,EAClB;AAAA,MAWY,UAAmB;AAC3B,WAAO,CAAC,CAAC,KAAK,cAAc,eAAe;AAAA,EAC/C;AAAA,MAEY,YAAqB;AAC7B,WAAO,CAAC,CAAC,KAAK,cAAc,iBAAiB;AAAA,EACjD;AAAA,EAiCQ,SAAe;AACnB,QAAI,KAAK,UAAU;AACf;AAAA,IACJ;AACA,SAAK,cACD,IAAI,MAAM,UAAU;AAAA,MAChB,SAAS;AAAA,IACb,CAAC,CACL;AAAA,EACJ;AAAA,EAEmB,SAAyB;AACxC,UAAM,QAA0B,CAAC;AACjC,QAAI,KAAK,WAAW;AAChB,YAAM,KACF;AAAA;AAAA,iBAGJ;AAAA,IACJ;AACA,QAAI,KAAK,SAAS;AACd,YAAM,KACF;AAAA;AAAA,iBAGJ;AAAA,IACJ;AACA,WAAO;AAAA,cACD;AAAA;AAAA,cAEA,KAAK,YACD;AAAA;AAAA;AAAA,sCAGoB,KAAK;AAAA;AAAA;AAAA;AAAA,mCAIR,KAAK;AAAA;AAAA,sBAGtB;AAAA;AAAA,EAEd;AAAA,EAEmB,aAAa,SAA+B;AAC3D,UAAM,aAAa,OAAO;AAC1B,QAAI,CAAC,KAAK,aAAa,MAAM,GAAG;AAC5B,WAAK,aAAa,QAAQ,UAAU;AAAA,IACxC;AACA,QAAI,KAAK,WAAW;AAChB,WAAK,aACD,YACA,CAAC,KAAK,YAAY,KAAK,QAAQ,gCAAgC,IACzD,MACA,IACV;AAAA,IACJ;AAAA,EACJ;AAAA,EAEmB,QAAQ,SAA+B;AACtD,UAAM,QAAQ,OAAO;AACrB,QAAI,QAAQ,IAAI,UAAU,GAAG;AACzB,UAAI,KAAK,UAAU;AACf,aAAK,aAAa,iBAAiB,MAAM;AAAA,MAC7C,OAAO;AACH,aAAK,gBAAgB,eAAe;AAAA,MACxC;AAAA,IACJ;AAAA,EACJ;AACJ;AArHW;AAAA,EADP,AAAC,SAAS,EAAE,MAAM,SAAS,SAAS,KAAK,CAAC;AAAA,GACnC,AARJ,IAQI;AAGA;AAAA,EADP,AAAC,SAAS,EAAE,MAAM,SAAS,SAAS,KAAK,CAAC;AAAA,GACnC,AAXJ,IAWI;AAGA;AAAA,EADP,AAAC,SAAS,EAAE,MAAM,SAAS,SAAS,KAAK,CAAC;AAAA,GACnC,AAdJ,IAcI;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|