@spectrum-web-components/menu 0.16.7 → 0.16.9-react.54

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.
@@ -4,7 +4,7 @@
4
4
  "modules": [
5
5
  {
6
6
  "kind": "javascript-module",
7
- "path": "sp-menu-divider.js",
7
+ "path": "sp-menu-divider.ts",
8
8
  "declarations": [],
9
9
  "exports": [
10
10
  {
@@ -19,7 +19,7 @@
19
19
  },
20
20
  {
21
21
  "kind": "javascript-module",
22
- "path": "sp-menu-group.js",
22
+ "path": "sp-menu-group.ts",
23
23
  "declarations": [],
24
24
  "exports": [
25
25
  {
@@ -34,7 +34,7 @@
34
34
  },
35
35
  {
36
36
  "kind": "javascript-module",
37
- "path": "sp-menu-item.js",
37
+ "path": "sp-menu-item.ts",
38
38
  "declarations": [],
39
39
  "exports": [
40
40
  {
@@ -49,7 +49,7 @@
49
49
  },
50
50
  {
51
51
  "kind": "javascript-module",
52
- "path": "sp-menu.js",
52
+ "path": "sp-menu.ts",
53
53
  "declarations": [],
54
54
  "exports": [
55
55
  {
@@ -64,7 +64,7 @@
64
64
  },
65
65
  {
66
66
  "kind": "javascript-module",
67
- "path": "src/Menu.js",
67
+ "path": "src/Menu.ts",
68
68
  "declarations": [
69
69
  {
70
70
  "kind": "class",
@@ -666,14 +666,14 @@
666
666
  "name": "Menu",
667
667
  "declaration": {
668
668
  "name": "Menu",
669
- "module": "src/Menu.js"
669
+ "module": "src/Menu.ts"
670
670
  }
671
671
  }
672
672
  ]
673
673
  },
674
674
  {
675
675
  "kind": "javascript-module",
676
- "path": "src/MenuDivider.js",
676
+ "path": "src/MenuDivider.ts",
677
677
  "declarations": [
678
678
  {
679
679
  "kind": "class",
@@ -694,14 +694,14 @@
694
694
  "name": "MenuDivider",
695
695
  "declaration": {
696
696
  "name": "MenuDivider",
697
- "module": "src/MenuDivider.js"
697
+ "module": "src/MenuDivider.ts"
698
698
  }
699
699
  }
700
700
  ]
701
701
  },
702
702
  {
703
703
  "kind": "javascript-module",
704
- "path": "src/MenuGroup.js",
704
+ "path": "src/MenuGroup.ts",
705
705
  "declarations": [
706
706
  {
707
707
  "kind": "class",
@@ -762,7 +762,7 @@
762
762
  "privacy": "protected",
763
763
  "inheritedFrom": {
764
764
  "name": "Menu",
765
- "module": "src/Menu.js"
765
+ "module": "src/Menu.ts"
766
766
  }
767
767
  },
768
768
  {
@@ -785,7 +785,7 @@
785
785
  "default": "false",
786
786
  "inheritedFrom": {
787
787
  "name": "Menu",
788
- "module": "src/Menu.js"
788
+ "module": "src/Menu.ts"
789
789
  }
790
790
  },
791
791
  {
@@ -800,7 +800,7 @@
800
800
  "reflects": true,
801
801
  "inheritedFrom": {
802
802
  "name": "Menu",
803
- "module": "src/Menu.js"
803
+ "module": "src/Menu.ts"
804
804
  }
805
805
  },
806
806
  {
@@ -814,7 +814,7 @@
814
814
  "reflects": true,
815
815
  "inheritedFrom": {
816
816
  "name": "Menu",
817
- "module": "src/Menu.js"
817
+ "module": "src/Menu.ts"
818
818
  }
819
819
  },
820
820
  {
@@ -828,7 +828,7 @@
828
828
  "attribute": "value",
829
829
  "inheritedFrom": {
830
830
  "name": "Menu",
831
- "module": "src/Menu.js"
831
+ "module": "src/Menu.ts"
832
832
  }
833
833
  },
834
834
  {
@@ -842,7 +842,7 @@
842
842
  "attribute": "value-separator",
843
843
  "inheritedFrom": {
844
844
  "name": "Menu",
845
- "module": "src/Menu.js"
845
+ "module": "src/Menu.ts"
846
846
  }
847
847
  },
848
848
  {
@@ -852,7 +852,7 @@
852
852
  "default": "[]",
853
853
  "inheritedFrom": {
854
854
  "name": "Menu",
855
- "module": "src/Menu.js"
855
+ "module": "src/Menu.ts"
856
856
  }
857
857
  },
858
858
  {
@@ -862,7 +862,7 @@
862
862
  "default": "[]",
863
863
  "inheritedFrom": {
864
864
  "name": "Menu",
865
- "module": "src/Menu.js"
865
+ "module": "src/Menu.ts"
866
866
  }
867
867
  },
868
868
  {
@@ -874,7 +874,7 @@
874
874
  "privacy": "public",
875
875
  "inheritedFrom": {
876
876
  "name": "Menu",
877
- "module": "src/Menu.js"
877
+ "module": "src/Menu.ts"
878
878
  }
879
879
  },
880
880
  {
@@ -884,7 +884,7 @@
884
884
  "default": "new Set<MenuItem>()",
885
885
  "inheritedFrom": {
886
886
  "name": "Menu",
887
- "module": "src/Menu.js"
887
+ "module": "src/Menu.ts"
888
888
  }
889
889
  },
890
890
  {
@@ -897,7 +897,7 @@
897
897
  "default": "0",
898
898
  "inheritedFrom": {
899
899
  "name": "Menu",
900
- "module": "src/Menu.js"
900
+ "module": "src/Menu.ts"
901
901
  }
902
902
  },
903
903
  {
@@ -910,7 +910,7 @@
910
910
  "default": "0",
911
911
  "inheritedFrom": {
912
912
  "name": "Menu",
913
- "module": "src/Menu.js"
913
+ "module": "src/Menu.ts"
914
914
  }
915
915
  },
916
916
  {
@@ -920,7 +920,7 @@
920
920
  "default": "new Map()",
921
921
  "inheritedFrom": {
922
922
  "name": "Menu",
923
- "module": "src/Menu.js"
923
+ "module": "src/Menu.ts"
924
924
  }
925
925
  },
926
926
  {
@@ -932,7 +932,7 @@
932
932
  "privacy": "public",
933
933
  "inheritedFrom": {
934
934
  "name": "Menu",
935
- "module": "src/Menu.js"
935
+ "module": "src/Menu.ts"
936
936
  }
937
937
  },
938
938
  {
@@ -944,7 +944,7 @@
944
944
  "privacy": "private",
945
945
  "inheritedFrom": {
946
946
  "name": "Menu",
947
- "module": "src/Menu.js"
947
+ "module": "src/Menu.ts"
948
948
  }
949
949
  },
950
950
  {
@@ -958,7 +958,7 @@
958
958
  },
959
959
  "inheritedFrom": {
960
960
  "name": "Menu",
961
- "module": "src/Menu.js"
961
+ "module": "src/Menu.ts"
962
962
  }
963
963
  },
964
964
  {
@@ -971,7 +971,7 @@
971
971
  "description": "Hide this getter from web-component-analyzer until\nhttps://github.com/runem/web-component-analyzer/issues/131\nhas been addressed.",
972
972
  "inheritedFrom": {
973
973
  "name": "Menu",
974
- "module": "src/Menu.js"
974
+ "module": "src/Menu.ts"
975
975
  }
976
976
  },
977
977
  {
@@ -983,7 +983,7 @@
983
983
  "privacy": "private",
984
984
  "inheritedFrom": {
985
985
  "name": "Menu",
986
- "module": "src/Menu.js"
986
+ "module": "src/Menu.ts"
987
987
  }
988
988
  },
989
989
  {
@@ -995,7 +995,7 @@
995
995
  "privacy": "private",
996
996
  "inheritedFrom": {
997
997
  "name": "Menu",
998
- "module": "src/Menu.js"
998
+ "module": "src/Menu.ts"
999
999
  }
1000
1000
  },
1001
1001
  {
@@ -1018,7 +1018,7 @@
1018
1018
  "description": "When a descendant `<sp-menu-item>` element is added or updated it will dispatch\nthis event to announce its presence in the DOM. During the capture phase the first\nMenu based element that the event encounters will manage the focus state of the\ndispatching `<sp-menu-item>` element.",
1019
1019
  "inheritedFrom": {
1020
1020
  "name": "Menu",
1021
- "module": "src/Menu.js"
1021
+ "module": "src/Menu.ts"
1022
1022
  }
1023
1023
  },
1024
1024
  {
@@ -1041,7 +1041,7 @@
1041
1041
  "description": "When a descendant `<sp-menu-item>` element is added or updated it will dispatch\nthis event to announce its presence in the DOM. During the bubble phase the first\nMenu based element that the event encounters that does not inherit selection will\nmanage the selection state of the dispatching `<sp-menu-item>` element.",
1042
1042
  "inheritedFrom": {
1043
1043
  "name": "Menu",
1044
- "module": "src/Menu.js"
1044
+ "module": "src/Menu.ts"
1045
1045
  }
1046
1046
  },
1047
1047
  {
@@ -1063,7 +1063,7 @@
1063
1063
  ],
1064
1064
  "inheritedFrom": {
1065
1065
  "name": "Menu",
1066
- "module": "src/Menu.js"
1066
+ "module": "src/Menu.ts"
1067
1067
  }
1068
1068
  },
1069
1069
  {
@@ -1085,7 +1085,7 @@
1085
1085
  ],
1086
1086
  "inheritedFrom": {
1087
1087
  "name": "Menu",
1088
- "module": "src/Menu.js"
1088
+ "module": "src/Menu.ts"
1089
1089
  }
1090
1090
  },
1091
1091
  {
@@ -1108,7 +1108,7 @@
1108
1108
  ],
1109
1109
  "inheritedFrom": {
1110
1110
  "name": "Menu",
1111
- "module": "src/Menu.js"
1111
+ "module": "src/Menu.ts"
1112
1112
  }
1113
1113
  },
1114
1114
  {
@@ -1130,7 +1130,7 @@
1130
1130
  ],
1131
1131
  "inheritedFrom": {
1132
1132
  "name": "Menu",
1133
- "module": "src/Menu.js"
1133
+ "module": "src/Menu.ts"
1134
1134
  }
1135
1135
  },
1136
1136
  {
@@ -1152,7 +1152,7 @@
1152
1152
  ],
1153
1153
  "inheritedFrom": {
1154
1154
  "name": "Menu",
1155
- "module": "src/Menu.js"
1155
+ "module": "src/Menu.ts"
1156
1156
  }
1157
1157
  },
1158
1158
  {
@@ -1166,7 +1166,7 @@
1166
1166
  },
1167
1167
  "inheritedFrom": {
1168
1168
  "name": "Menu",
1169
- "module": "src/Menu.js"
1169
+ "module": "src/Menu.ts"
1170
1170
  }
1171
1171
  },
1172
1172
  {
@@ -1188,7 +1188,7 @@
1188
1188
  ],
1189
1189
  "inheritedFrom": {
1190
1190
  "name": "Menu",
1191
- "module": "src/Menu.js"
1191
+ "module": "src/Menu.ts"
1192
1192
  }
1193
1193
  },
1194
1194
  {
@@ -1202,7 +1202,7 @@
1202
1202
  },
1203
1203
  "inheritedFrom": {
1204
1204
  "name": "Menu",
1205
- "module": "src/Menu.js"
1205
+ "module": "src/Menu.ts"
1206
1206
  }
1207
1207
  },
1208
1208
  {
@@ -1224,7 +1224,7 @@
1224
1224
  ],
1225
1225
  "inheritedFrom": {
1226
1226
  "name": "Menu",
1227
- "module": "src/Menu.js"
1227
+ "module": "src/Menu.ts"
1228
1228
  }
1229
1229
  },
1230
1230
  {
@@ -1246,7 +1246,7 @@
1246
1246
  ],
1247
1247
  "inheritedFrom": {
1248
1248
  "name": "Menu",
1249
- "module": "src/Menu.js"
1249
+ "module": "src/Menu.ts"
1250
1250
  }
1251
1251
  },
1252
1252
  {
@@ -1268,7 +1268,7 @@
1268
1268
  ],
1269
1269
  "inheritedFrom": {
1270
1270
  "name": "Menu",
1271
- "module": "src/Menu.js"
1271
+ "module": "src/Menu.ts"
1272
1272
  }
1273
1273
  },
1274
1274
  {
@@ -1290,7 +1290,7 @@
1290
1290
  ],
1291
1291
  "inheritedFrom": {
1292
1292
  "name": "Menu",
1293
- "module": "src/Menu.js"
1293
+ "module": "src/Menu.ts"
1294
1294
  }
1295
1295
  },
1296
1296
  {
@@ -1312,7 +1312,7 @@
1312
1312
  ],
1313
1313
  "inheritedFrom": {
1314
1314
  "name": "Menu",
1315
- "module": "src/Menu.js"
1315
+ "module": "src/Menu.ts"
1316
1316
  }
1317
1317
  },
1318
1318
  {
@@ -1326,7 +1326,7 @@
1326
1326
  },
1327
1327
  "inheritedFrom": {
1328
1328
  "name": "Menu",
1329
- "module": "src/Menu.js"
1329
+ "module": "src/Menu.ts"
1330
1330
  }
1331
1331
  },
1332
1332
  {
@@ -1340,7 +1340,7 @@
1340
1340
  },
1341
1341
  "inheritedFrom": {
1342
1342
  "name": "Menu",
1343
- "module": "src/Menu.js"
1343
+ "module": "src/Menu.ts"
1344
1344
  }
1345
1345
  },
1346
1346
  {
@@ -1353,7 +1353,7 @@
1353
1353
  "default": "false",
1354
1354
  "inheritedFrom": {
1355
1355
  "name": "Menu",
1356
- "module": "src/Menu.js"
1356
+ "module": "src/Menu.ts"
1357
1357
  }
1358
1358
  },
1359
1359
  {
@@ -1367,7 +1367,7 @@
1367
1367
  },
1368
1368
  "inheritedFrom": {
1369
1369
  "name": "Menu",
1370
- "module": "src/Menu.js"
1370
+ "module": "src/Menu.ts"
1371
1371
  }
1372
1372
  },
1373
1373
  {
@@ -1381,7 +1381,7 @@
1381
1381
  },
1382
1382
  "inheritedFrom": {
1383
1383
  "name": "Menu",
1384
- "module": "src/Menu.js"
1384
+ "module": "src/Menu.ts"
1385
1385
  }
1386
1386
  },
1387
1387
  {
@@ -1403,7 +1403,7 @@
1403
1403
  ],
1404
1404
  "inheritedFrom": {
1405
1405
  "name": "Menu",
1406
- "module": "src/Menu.js"
1406
+ "module": "src/Menu.ts"
1407
1407
  }
1408
1408
  },
1409
1409
  {
@@ -1416,7 +1416,7 @@
1416
1416
  "default": "false",
1417
1417
  "inheritedFrom": {
1418
1418
  "name": "Menu",
1419
- "module": "src/Menu.js"
1419
+ "module": "src/Menu.ts"
1420
1420
  }
1421
1421
  },
1422
1422
  {
@@ -1430,7 +1430,7 @@
1430
1430
  },
1431
1431
  "inheritedFrom": {
1432
1432
  "name": "Menu",
1433
- "module": "src/Menu.js"
1433
+ "module": "src/Menu.ts"
1434
1434
  }
1435
1435
  },
1436
1436
  {
@@ -1442,7 +1442,7 @@
1442
1442
  "privacy": "protected",
1443
1443
  "inheritedFrom": {
1444
1444
  "name": "Menu",
1445
- "module": "src/Menu.js"
1445
+ "module": "src/Menu.ts"
1446
1446
  }
1447
1447
  },
1448
1448
  {
@@ -1451,7 +1451,7 @@
1451
1451
  "privacy": "protected",
1452
1452
  "inheritedFrom": {
1453
1453
  "name": "Menu",
1454
- "module": "src/Menu.js"
1454
+ "module": "src/Menu.ts"
1455
1455
  }
1456
1456
  },
1457
1457
  {
@@ -1465,7 +1465,7 @@
1465
1465
  },
1466
1466
  "inheritedFrom": {
1467
1467
  "name": "Menu",
1468
- "module": "src/Menu.js"
1468
+ "module": "src/Menu.ts"
1469
1469
  }
1470
1470
  }
1471
1471
  ],
@@ -1556,14 +1556,14 @@
1556
1556
  "name": "MenuGroup",
1557
1557
  "declaration": {
1558
1558
  "name": "MenuGroup",
1559
- "module": "src/MenuGroup.js"
1559
+ "module": "src/MenuGroup.ts"
1560
1560
  }
1561
1561
  }
1562
1562
  ]
1563
1563
  },
1564
1564
  {
1565
1565
  "kind": "javascript-module",
1566
- "path": "src/MenuItem.js",
1566
+ "path": "src/MenuItem.ts",
1567
1567
  "declarations": [
1568
1568
  {
1569
1569
  "kind": "class",
@@ -2160,7 +2160,7 @@
2160
2160
  "name": "MenuItemRemovedEvent",
2161
2161
  "declaration": {
2162
2162
  "name": "MenuItemRemovedEvent",
2163
- "module": "src/MenuItem.js"
2163
+ "module": "src/MenuItem.ts"
2164
2164
  }
2165
2165
  },
2166
2166
  {
@@ -2168,7 +2168,7 @@
2168
2168
  "name": "MenuItemAddedOrUpdatedEvent",
2169
2169
  "declaration": {
2170
2170
  "name": "MenuItemAddedOrUpdatedEvent",
2171
- "module": "src/MenuItem.js"
2171
+ "module": "src/MenuItem.ts"
2172
2172
  }
2173
2173
  },
2174
2174
  {
@@ -2176,7 +2176,7 @@
2176
2176
  "name": "MenuItem",
2177
2177
  "declaration": {
2178
2178
  "name": "MenuItem",
2179
- "module": "src/MenuItem.js"
2179
+ "module": "src/MenuItem.ts"
2180
2180
  }
2181
2181
  }
2182
2182
  ]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spectrum-web-components/menu",
3
- "version": "0.16.7",
3
+ "version": "0.16.9-react.54+c59ca07be",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -85,16 +85,16 @@
85
85
  ],
86
86
  "dependencies": {
87
87
  "@lit-labs/observers": "^1.0.1",
88
- "@spectrum-web-components/action-button": "^0.10.6",
89
- "@spectrum-web-components/base": "^0.7.1",
90
- "@spectrum-web-components/divider": "^0.6.1",
91
- "@spectrum-web-components/icon": "^0.12.3",
92
- "@spectrum-web-components/icons-ui": "^0.9.3",
93
- "@spectrum-web-components/overlay": "^0.18.7",
94
- "@spectrum-web-components/shared": "^0.15.2"
88
+ "@spectrum-web-components/action-button": "^0.10.8-react.54+c59ca07be",
89
+ "@spectrum-web-components/base": "^0.7.3-react.54+c59ca07be",
90
+ "@spectrum-web-components/divider": "^0.6.3-react.54+c59ca07be",
91
+ "@spectrum-web-components/icon": "^0.12.5-react.54+c59ca07be",
92
+ "@spectrum-web-components/icons-ui": "^0.9.5-react.54+c59ca07be",
93
+ "@spectrum-web-components/overlay": "^0.18.9-react.54+c59ca07be",
94
+ "@spectrum-web-components/shared": "^0.15.4-react.54+c59ca07be"
95
95
  },
96
96
  "devDependencies": {
97
- "@spectrum-css/menu": "^4.0.4"
97
+ "@spectrum-css/menu": "^4.0.5"
98
98
  },
99
99
  "types": "./src/index.d.ts",
100
100
  "customElements": "custom-elements.json",
@@ -102,5 +102,5 @@
102
102
  "./sp-*.js",
103
103
  "./**/*.dev.js"
104
104
  ],
105
- "gitHead": "8bd87724e91e23df83dbf63a434bbbe10b8daaa6"
105
+ "gitHead": "c59ca07bef1633dd16241d4be7d87b037ce7ddbf"
106
106
  }
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["Menu.ts"],
4
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 SpectrumElement,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport {\n property,\n query,\n} from '@spectrum-web-components/base/src/decorators.js';\n\nimport { MenuItem } from './MenuItem.dev.js'\nimport type {\n MenuItemAddedOrUpdatedEvent,\n MenuItemRemovedEvent,\n} from './MenuItem.dev.js'\nimport menuStyles from './menu.css.js';\n\nexport interface MenuChildItem {\n menuItem: MenuItem;\n managed: boolean;\n active: boolean;\n focusable: boolean;\n focusRoot: Menu;\n}\n\ntype SelectsType = 'none' | 'ignore' | 'inherit' | 'multiple' | 'single';\ntype RoleType = 'group' | 'menu' | 'listbox' | 'none';\n\nfunction elementIsOrContains(\n el: Node,\n isOrContains: Node | undefined | null\n): boolean {\n return !!isOrContains && (el === isOrContains || el.contains(isOrContains));\n}\n\n/**\n * Spectrum Menu Component\n * @element sp-menu\n *\n * @slot - menu items to be listed in the menu\n * @fires change - Announces that the `value` of the element has changed\n * @attr selects - whether the element has a specific selection algorithm that it applies\n * to its item descendants. `single` allows only one descendent to be selected at a time.\n * `multiple` allows many descendants to be selected. `inherit` will be applied dynamically\n * when an ancestor of this element is actively managing the selection of its descendents.\n * When the `selects` attribute is not present a `value` will not be maintained and the Menu\n * Item children of this Menu will not have their `selected` state managed.\n */\nexport class Menu extends SpectrumElement {\n public static override get styles(): CSSResultArray {\n return [menuStyles];\n }\n\n public isSubmenu = false;\n\n @property({ type: String, reflect: true })\n public label = '';\n\n @property({ type: String, reflect: true })\n public selects: undefined | 'inherit' | 'single' | 'multiple';\n\n @property({ type: String })\n public value = '';\n\n // For the multiple select case, we'll join the value strings together\n // for the value property with this separator\n @property({ type: String, attribute: 'value-separator' })\n public valueSeparator = ',';\n\n // TODO: which of these to keep?\n // TODO: allow setting this in the API to change the values\n @property({ attribute: false })\n public selected = [] as string[];\n\n @property({ attribute: false })\n public selectedItems = [] as MenuItem[];\n\n @query('slot:not([name])')\n public menuSlot!: HTMLSlotElement;\n\n private childItemSet = new Set<MenuItem>();\n public focusedItemIndex = 0;\n public focusInItemIndex = 0;\n\n private selectedItemsMap = new Map() as Map<MenuItem, boolean>;\n\n public get childItems(): MenuItem[] {\n if (!this.cachedChildItems) {\n this.cachedChildItems = this.updateCachedMenuItems();\n }\n return this.cachedChildItems;\n }\n\n private cachedChildItems: MenuItem[] | undefined;\n\n private updateCachedMenuItems(): MenuItem[] {\n this.cachedChildItems = [];\n\n const slotElements = this.menuSlot\n ? this.menuSlot.assignedElements({ flatten: true })\n : [];\n for (const slotElement of slotElements) {\n const childMenuItems: MenuItem[] =\n slotElement instanceof MenuItem\n ? [slotElement as MenuItem]\n : ([...slotElement.querySelectorAll(`*`)] as MenuItem[]);\n\n for (const childMenuItem of childMenuItems) {\n if (this.childItemSet.has(childMenuItem)) {\n this.cachedChildItems.push(childMenuItem);\n }\n }\n }\n\n return this.cachedChildItems;\n }\n\n /**\n * Hide this getter from web-component-analyzer until\n * https://github.com/runem/web-component-analyzer/issues/131\n * has been addressed.\n *\n * @private\n */\n public get childRole(): string {\n if (this.resolvedRole === 'listbox') {\n return 'option';\n }\n switch (this.resolvedSelects) {\n case 'single':\n return 'menuitemradio';\n case 'multiple':\n return 'menuitemcheckbox';\n default:\n return 'menuitem';\n }\n }\n\n protected get ownRole(): string {\n return 'menu';\n }\n\n private resolvedSelects?: SelectsType;\n private resolvedRole?: RoleType;\n\n /**\n * When a descendant `<sp-menu-item>` element is added or updated it will dispatch\n * this event to announce its presence in the DOM. During the capture phase the first\n * Menu based element that the event encounters will manage the focus state of the\n * dispatching `<sp-menu-item>` element.\n * @param event\n */\n private onFocusableItemAddedOrUpdated(\n event: MenuItemAddedOrUpdatedEvent\n ): void {\n if (event.item.menuData.focusRoot) {\n // Only have one tab stop per Menu tree\n this.tabIndex = -1;\n }\n event.focusRoot = this;\n this.addChildItem(event.item);\n\n if (this.selects === 'inherit') {\n this.resolvedSelects = 'inherit';\n this.resolvedRole = (event.currentAncestorWithSelects?.getAttribute(\n 'role'\n ) ||\n this.getAttribute('role') ||\n undefined) as RoleType;\n } else if (this.selects) {\n this.resolvedRole = (this.getAttribute('role') ||\n undefined) as RoleType;\n this.resolvedSelects = this.selects;\n event.currentAncestorWithSelects = this;\n } else {\n this.resolvedRole = (this.getAttribute('role') ||\n undefined) as RoleType;\n this.resolvedSelects =\n this.resolvedRole === 'none' ? 'ignore' : 'none';\n }\n }\n\n /**\n * When a descendant `<sp-menu-item>` element is added or updated it will dispatch\n * this event to announce its presence in the DOM. During the bubble phase the first\n * Menu based element that the event encounters that does not inherit selection will\n * manage the selection state of the dispatching `<sp-menu-item>` element.\n * @param event\n */\n private onSelectableItemAddedOrUpdated(\n event: MenuItemAddedOrUpdatedEvent\n ): void {\n const selects =\n this.resolvedSelects === 'single' ||\n this.resolvedSelects === 'multiple';\n if (\n (selects || (!this.selects && this.resolvedSelects !== 'ignore')) &&\n !event.item.menuData.selectionRoot\n ) {\n event.item.setRole(this.childRole);\n event.selectionRoot = this;\n }\n }\n\n private addChildItem(item: MenuItem): void {\n this.childItemSet.add(item);\n this.handleItemsChanged();\n }\n\n private async removeChildItem(event: MenuItemRemovedEvent): Promise<void> {\n this.childItemSet.delete(event.item);\n this.cachedChildItems = undefined;\n if (event.item.focused) {\n this.handleItemsChanged();\n await this.updateComplete;\n this.focus();\n }\n }\n\n public constructor() {\n super();\n\n this.addEventListener(\n 'sp-menu-item-added-or-updated',\n this.onSelectableItemAddedOrUpdated\n );\n this.addEventListener(\n 'sp-menu-item-added-or-updated',\n this.onFocusableItemAddedOrUpdated,\n {\n capture: true,\n }\n );\n\n this.addEventListener('sp-menu-item-removed', this.removeChildItem);\n this.addEventListener('click', this.onClick);\n this.addEventListener('focusin', this.handleFocusin);\n }\n\n public override focus({ preventScroll }: FocusOptions = {}): void {\n if (\n !this.childItems.length ||\n this.childItems.every((childItem) => childItem.disabled)\n ) {\n return;\n }\n if (\n this.childItems.some(\n (childItem) => childItem.menuData.focusRoot !== this\n )\n ) {\n super.focus({ preventScroll });\n return;\n }\n this.focusMenuItemByOffset(0);\n super.focus({ preventScroll });\n const selectedItem = this.querySelector('[selected]');\n if (selectedItem && !preventScroll) {\n selectedItem.scrollIntoView({ block: 'nearest' });\n }\n }\n\n private onClick(event: Event): void {\n if (event.defaultPrevented) {\n return;\n }\n const path = event.composedPath();\n const target = path.find((el) => {\n /* c8 ignore next 3 */\n if (!(el instanceof Element)) {\n return false;\n }\n return el.getAttribute('role') === this.childRole;\n }) as MenuItem;\n if (target?.href && target.href.length) {\n // This event will NOT ALLOW CANCELATION as link action\n // cancelation should occur on the `<sp-menu-item>` itself.\n this.dispatchEvent(\n new Event('change', {\n bubbles: true,\n composed: true,\n })\n );\n return;\n } else if (\n target?.menuData.selectionRoot === this &&\n this.childItems.length\n ) {\n event.preventDefault();\n if (target.hasSubmenu || target.open) {\n return;\n }\n this.selectOrToggleItem(target);\n } else {\n return;\n }\n this.prepareToCleanUp();\n }\n\n public handleFocusin(event: FocusEvent): void {\n const isOrContainsRelatedTarget = elementIsOrContains(\n this,\n event.relatedTarget as Node\n );\n if (\n isOrContainsRelatedTarget ||\n this.childItems.some(\n (childItem) => childItem.menuData.focusRoot !== this\n )\n ) {\n return;\n }\n const activeElement = (this.getRootNode() as Document).activeElement as\n | MenuItem\n | Menu;\n const selectionRoot =\n this.childItems[this.focusedItemIndex]?.menuData.selectionRoot ||\n this;\n if (activeElement !== selectionRoot || !isOrContainsRelatedTarget) {\n selectionRoot.focus({ preventScroll: true });\n if (activeElement && this.focusedItemIndex === 0) {\n const offset = this.childItems.findIndex(\n (childItem) => childItem === activeElement\n );\n if (offset > 0) {\n this.focusMenuItemByOffset(offset);\n }\n }\n }\n this.startListeningToKeyboard();\n }\n\n public startListeningToKeyboard(): void {\n this.addEventListener('keydown', this.handleKeydown);\n this.addEventListener('focusout', this.handleFocusout);\n }\n\n public handleFocusout(event: FocusEvent): void {\n if (elementIsOrContains(this, event.relatedTarget as Node)) {\n (event.composedPath()[0] as MenuItem).focused = false;\n return;\n }\n this.stopListeningToKeyboard();\n if (\n event.target === this &&\n this.childItems.some(\n (childItem) => childItem.menuData.focusRoot === this\n )\n ) {\n const focusedItem = this.childItems[this.focusedItemIndex];\n if (focusedItem) {\n focusedItem.focused = false;\n }\n }\n this.removeAttribute('aria-activedescendant');\n }\n\n public stopListeningToKeyboard(): void {\n this.removeEventListener('keydown', this.handleKeydown);\n this.removeEventListener('focusout', this.handleFocusout);\n }\n\n public async selectOrToggleItem(targetItem: MenuItem): Promise<void> {\n const resolvedSelects = this.resolvedSelects;\n const oldSelectedItemsMap = new Map(this.selectedItemsMap);\n const oldSelected = this.selected.slice();\n const oldSelectedItems = this.selectedItems.slice();\n const oldValue = this.value;\n this.childItems[this.focusedItemIndex].focused = false;\n this.focusedItemIndex = this.childItems.indexOf(targetItem);\n this.forwardFocusVisibleToItem(targetItem);\n\n if (resolvedSelects === 'multiple') {\n if (this.selectedItemsMap.has(targetItem)) {\n this.selectedItemsMap.delete(targetItem);\n } else {\n this.selectedItemsMap.set(targetItem, true);\n }\n\n // Match HTML select and set the first selected\n // item as the value. Also set the selected array\n // in the order of the menu items.\n const selected: string[] = [];\n const selectedItems: MenuItem[] = [];\n\n this.childItemSet.forEach((childItem) => {\n if (childItem.menuData.selectionRoot !== this) return;\n\n if (this.selectedItemsMap.has(childItem)) {\n selected.push(childItem.value);\n selectedItems.push(childItem);\n }\n });\n this.selected = selected;\n this.selectedItems = selectedItems;\n this.value = this.selected.join(this.valueSeparator);\n } else {\n this.selectedItemsMap.clear();\n this.selectedItemsMap.set(targetItem, true);\n this.value = targetItem.value;\n this.selected = [targetItem.value];\n this.selectedItems = [targetItem];\n }\n\n await this.updateComplete;\n const applyDefault = this.dispatchEvent(\n new Event('change', {\n cancelable: true,\n bubbles: true,\n composed: true,\n })\n );\n if (!applyDefault) {\n // Cancel the event & don't apply the selection\n this.selected = oldSelected;\n this.selectedItems = oldSelectedItems;\n this.selectedItemsMap = oldSelectedItemsMap;\n this.value = oldValue;\n return;\n }\n // Apply the selection changes to the menu items\n if (resolvedSelects === 'single') {\n for (const oldItem of oldSelectedItemsMap.keys()) {\n if (oldItem !== targetItem) {\n oldItem.selected = false;\n }\n }\n targetItem.selected = true;\n } else if (resolvedSelects === 'multiple') {\n targetItem.selected = !targetItem.selected;\n }\n }\n\n protected navigateWithinMenu(event: KeyboardEvent): void {\n const { code } = event;\n const lastFocusedItem = this.childItems[this.focusedItemIndex];\n const direction = code === 'ArrowDown' ? 1 : -1;\n const itemToFocus = this.focusMenuItemByOffset(direction);\n if (itemToFocus === lastFocusedItem) {\n return;\n }\n event.preventDefault();\n itemToFocus.scrollIntoView({ block: 'nearest' });\n }\n\n protected navigateBetweenRelatedMenus(code: string): void {\n const shouldOpenSubmenu =\n (this.isLTR && code === 'ArrowRight') ||\n (!this.isLTR && code === 'ArrowLeft');\n const shouldCloseSelfAsSubmenu =\n (this.isLTR && code === 'ArrowLeft') ||\n (!this.isLTR && code === 'ArrowRight');\n if (shouldOpenSubmenu) {\n const lastFocusedItem = this.childItems[this.focusedItemIndex];\n if (lastFocusedItem.hasSubmenu) {\n // Remove focus while opening overlay from keyboard or the visible focus\n // will slip back to the first item in the menu.\n this.blur();\n lastFocusedItem.openOverlay();\n }\n } else if (shouldCloseSelfAsSubmenu && this.isSubmenu) {\n this.dispatchEvent(new Event('close', { bubbles: true }));\n }\n }\n\n public handleKeydown(event: KeyboardEvent): void {\n const { code } = event;\n if (code === 'Tab') {\n this.prepareToCleanUp();\n return;\n }\n if (code === 'Space') {\n const lastFocusedItem = this.childItems[this.focusedItemIndex];\n if (lastFocusedItem.hasSubmenu) {\n // Remove focus while opening overlay from keyboard or the visible focus\n // will slip back to the first item in the menu.\n this.blur();\n lastFocusedItem.openOverlay();\n return;\n }\n }\n if (code === 'Space' || code === 'Enter') {\n this.childItems[this.focusedItemIndex]?.click();\n return;\n }\n if (code === 'ArrowDown' || code === 'ArrowUp') {\n this.navigateWithinMenu(event);\n return;\n }\n this.navigateBetweenRelatedMenus(code);\n }\n\n public focusMenuItemByOffset(offset: number): MenuItem {\n const step = offset || 1;\n const focusedItem = this.childItems[this.focusedItemIndex];\n focusedItem.focused = false;\n this.focusedItemIndex =\n (this.childItems.length + this.focusedItemIndex + offset) %\n this.childItems.length;\n let itemToFocus = this.childItems[this.focusedItemIndex];\n let availableItems = this.childItems.length;\n // cycle through the available items in the directions of the offset to find the next non-disabled item\n while (itemToFocus.disabled && availableItems) {\n availableItems -= 1;\n this.focusedItemIndex =\n (this.childItems.length + this.focusedItemIndex + step) %\n this.childItems.length;\n itemToFocus = this.childItems[this.focusedItemIndex];\n }\n // if there are no non-disabled items, skip the work to focus a child\n if (!itemToFocus?.disabled) {\n this.forwardFocusVisibleToItem(itemToFocus);\n }\n return itemToFocus;\n }\n\n private prepareToCleanUp(): void {\n document.addEventListener(\n 'focusout',\n () => {\n requestAnimationFrame(() => {\n const focusedItem = this.childItems[this.focusedItemIndex];\n if (focusedItem) {\n focusedItem.focused = false;\n this.updateSelectedItemIndex();\n }\n });\n },\n { once: true }\n );\n }\n\n public updateSelectedItemIndex(): void {\n let firstOrFirstSelectedIndex = 0;\n const selectedItemsMap = new Map<MenuItem, boolean>();\n const selected: string[] = [];\n const selectedItems: MenuItem[] = [];\n let itemIndex = this.childItems.length;\n while (itemIndex) {\n itemIndex -= 1;\n const childItem = this.childItems[itemIndex];\n if (childItem.menuData.selectionRoot === this) {\n if (childItem.selected) {\n firstOrFirstSelectedIndex = itemIndex;\n selectedItemsMap.set(childItem, true);\n selected.unshift(childItem.value);\n selectedItems.unshift(childItem);\n }\n // Remove \"focused\" from non-\"selected\" items ONLY\n // Preserve \"focused\" on index===0 when no selection\n if (itemIndex !== firstOrFirstSelectedIndex) {\n childItem.focused = false;\n }\n }\n }\n selectedItems.map((item, i) => {\n // When there is more than one \"selected\" item,\n // ensure only the first one can be \"focused\"\n if (i > 0) {\n item.focused = false;\n }\n });\n this.selectedItemsMap = selectedItemsMap;\n this.selected = selected;\n this.selectedItems = selectedItems;\n this.value = this.selected.join(this.valueSeparator);\n this.focusedItemIndex = firstOrFirstSelectedIndex;\n this.focusInItemIndex = firstOrFirstSelectedIndex;\n }\n\n private _willUpdateItems = false;\n\n private handleItemsChanged(): void {\n this.cachedChildItems = undefined;\n if (!this._willUpdateItems) {\n /* c8 ignore next 3 */\n let resolve = (): void => {\n return;\n };\n this.cacheUpdated = new Promise((res) => (resolve = res));\n this._willUpdateItems = true;\n // Debounce the update so we only update once\n // if multiple items have changed\n window.requestAnimationFrame(() => {\n if (this.cachedChildItems === undefined) {\n this.updateSelectedItemIndex();\n this.updateItemFocus();\n }\n this._willUpdateItems = false;\n resolve();\n });\n }\n }\n\n private updateItemFocus(): void {\n if (this.childItems.length == 0) {\n return;\n }\n const focusInItem = this.childItems[this.focusInItemIndex];\n if (\n (this.getRootNode() as Document).activeElement ===\n focusInItem.menuData.focusRoot\n ) {\n this.forwardFocusVisibleToItem(focusInItem);\n }\n }\n\n private forwardFocusVisibleToItem(item: MenuItem): void {\n if (item.menuData.focusRoot !== this) {\n return;\n }\n item.focused = this.hasVisibleFocusInTree();\n this.setAttribute('aria-activedescendant', item.id);\n if (\n item.menuData.selectionRoot &&\n item.menuData.selectionRoot !== this\n ) {\n item.menuData.selectionRoot.focus();\n }\n }\n\n public override render(): TemplateResult {\n return html`\n <slot></slot>\n `;\n }\n\n private _notFirstUpdated = false;\n\n protected override firstUpdated(changed: PropertyValues): void {\n super.firstUpdated(changed);\n if (!this.hasAttribute('tabindex')) {\n const role = this.getAttribute('role');\n if (role === 'group') {\n this.tabIndex = -1;\n } else if (role !== 'none') {\n this.tabIndex = 0;\n }\n }\n const updates: Promise<unknown>[] = [\n new Promise((res) => requestAnimationFrame(() => res(true))),\n ];\n [...this.children].forEach((item) => {\n if ((item as MenuItem).localName === 'sp-menu-item') {\n updates.push((item as MenuItem).updateComplete);\n }\n });\n this.childItemsUpdated = Promise.all(updates);\n }\n\n protected override updated(changes: PropertyValues<this>): void {\n super.updated(changes);\n if (changes.has('selects') && this._notFirstUpdated) {\n this.selectsChanged();\n }\n if (changes.has('label')) {\n if (this.label) {\n this.setAttribute('aria-label', this.label);\n } else {\n this.removeAttribute('aria-label');\n }\n }\n this._notFirstUpdated = true;\n }\n\n protected selectsChanged(): void {\n const updates: Promise<unknown>[] = [\n new Promise((res) => requestAnimationFrame(() => res(true))),\n ];\n this.childItemSet.forEach((childItem) => {\n updates.push(childItem.triggerUpdate());\n });\n this.childItemsUpdated = Promise.all(updates);\n }\n\n public override connectedCallback(): void {\n super.connectedCallback();\n if (!this.hasAttribute('role')) {\n this.setAttribute('role', this.ownRole);\n }\n this.updateComplete.then(() => this.updateItemFocus());\n }\n\n protected childItemsUpdated!: Promise<unknown[]>;\n protected cacheUpdated = Promise.resolve();\n\n protected override async getUpdateComplete(): Promise<boolean> {\n const complete = (await super.getUpdateComplete()) as boolean;\n await this.childItemsUpdated;\n await this.cacheUpdated;\n return complete;\n }\n}\n"],
5
- "mappings": "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",
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
package/src/Menu.js.map CHANGED
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["Menu.ts"],
4
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 SpectrumElement,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport {\n property,\n query,\n} from '@spectrum-web-components/base/src/decorators.js';\n\nimport { MenuItem } from './MenuItem.js';\nimport type {\n MenuItemAddedOrUpdatedEvent,\n MenuItemRemovedEvent,\n} from './MenuItem.js';\nimport menuStyles from './menu.css.js';\n\nexport interface MenuChildItem {\n menuItem: MenuItem;\n managed: boolean;\n active: boolean;\n focusable: boolean;\n focusRoot: Menu;\n}\n\ntype SelectsType = 'none' | 'ignore' | 'inherit' | 'multiple' | 'single';\ntype RoleType = 'group' | 'menu' | 'listbox' | 'none';\n\nfunction elementIsOrContains(\n el: Node,\n isOrContains: Node | undefined | null\n): boolean {\n return !!isOrContains && (el === isOrContains || el.contains(isOrContains));\n}\n\n/**\n * Spectrum Menu Component\n * @element sp-menu\n *\n * @slot - menu items to be listed in the menu\n * @fires change - Announces that the `value` of the element has changed\n * @attr selects - whether the element has a specific selection algorithm that it applies\n * to its item descendants. `single` allows only one descendent to be selected at a time.\n * `multiple` allows many descendants to be selected. `inherit` will be applied dynamically\n * when an ancestor of this element is actively managing the selection of its descendents.\n * When the `selects` attribute is not present a `value` will not be maintained and the Menu\n * Item children of this Menu will not have their `selected` state managed.\n */\nexport class Menu extends SpectrumElement {\n public static override get styles(): CSSResultArray {\n return [menuStyles];\n }\n\n public isSubmenu = false;\n\n @property({ type: String, reflect: true })\n public label = '';\n\n @property({ type: String, reflect: true })\n public selects: undefined | 'inherit' | 'single' | 'multiple';\n\n @property({ type: String })\n public value = '';\n\n // For the multiple select case, we'll join the value strings together\n // for the value property with this separator\n @property({ type: String, attribute: 'value-separator' })\n public valueSeparator = ',';\n\n // TODO: which of these to keep?\n // TODO: allow setting this in the API to change the values\n @property({ attribute: false })\n public selected = [] as string[];\n\n @property({ attribute: false })\n public selectedItems = [] as MenuItem[];\n\n @query('slot:not([name])')\n public menuSlot!: HTMLSlotElement;\n\n private childItemSet = new Set<MenuItem>();\n public focusedItemIndex = 0;\n public focusInItemIndex = 0;\n\n private selectedItemsMap = new Map() as Map<MenuItem, boolean>;\n\n public get childItems(): MenuItem[] {\n if (!this.cachedChildItems) {\n this.cachedChildItems = this.updateCachedMenuItems();\n }\n return this.cachedChildItems;\n }\n\n private cachedChildItems: MenuItem[] | undefined;\n\n private updateCachedMenuItems(): MenuItem[] {\n this.cachedChildItems = [];\n\n const slotElements = this.menuSlot\n ? this.menuSlot.assignedElements({ flatten: true })\n : [];\n for (const slotElement of slotElements) {\n const childMenuItems: MenuItem[] =\n slotElement instanceof MenuItem\n ? [slotElement as MenuItem]\n : ([...slotElement.querySelectorAll(`*`)] as MenuItem[]);\n\n for (const childMenuItem of childMenuItems) {\n if (this.childItemSet.has(childMenuItem)) {\n this.cachedChildItems.push(childMenuItem);\n }\n }\n }\n\n return this.cachedChildItems;\n }\n\n /**\n * Hide this getter from web-component-analyzer until\n * https://github.com/runem/web-component-analyzer/issues/131\n * has been addressed.\n *\n * @private\n */\n public get childRole(): string {\n if (this.resolvedRole === 'listbox') {\n return 'option';\n }\n switch (this.resolvedSelects) {\n case 'single':\n return 'menuitemradio';\n case 'multiple':\n return 'menuitemcheckbox';\n default:\n return 'menuitem';\n }\n }\n\n protected get ownRole(): string {\n return 'menu';\n }\n\n private resolvedSelects?: SelectsType;\n private resolvedRole?: RoleType;\n\n /**\n * When a descendant `<sp-menu-item>` element is added or updated it will dispatch\n * this event to announce its presence in the DOM. During the capture phase the first\n * Menu based element that the event encounters will manage the focus state of the\n * dispatching `<sp-menu-item>` element.\n * @param event\n */\n private onFocusableItemAddedOrUpdated(\n event: MenuItemAddedOrUpdatedEvent\n ): void {\n if (event.item.menuData.focusRoot) {\n // Only have one tab stop per Menu tree\n this.tabIndex = -1;\n }\n event.focusRoot = this;\n this.addChildItem(event.item);\n\n if (this.selects === 'inherit') {\n this.resolvedSelects = 'inherit';\n this.resolvedRole = (event.currentAncestorWithSelects?.getAttribute(\n 'role'\n ) ||\n this.getAttribute('role') ||\n undefined) as RoleType;\n } else if (this.selects) {\n this.resolvedRole = (this.getAttribute('role') ||\n undefined) as RoleType;\n this.resolvedSelects = this.selects;\n event.currentAncestorWithSelects = this;\n } else {\n this.resolvedRole = (this.getAttribute('role') ||\n undefined) as RoleType;\n this.resolvedSelects =\n this.resolvedRole === 'none' ? 'ignore' : 'none';\n }\n }\n\n /**\n * When a descendant `<sp-menu-item>` element is added or updated it will dispatch\n * this event to announce its presence in the DOM. During the bubble phase the first\n * Menu based element that the event encounters that does not inherit selection will\n * manage the selection state of the dispatching `<sp-menu-item>` element.\n * @param event\n */\n private onSelectableItemAddedOrUpdated(\n event: MenuItemAddedOrUpdatedEvent\n ): void {\n const selects =\n this.resolvedSelects === 'single' ||\n this.resolvedSelects === 'multiple';\n if (\n (selects || (!this.selects && this.resolvedSelects !== 'ignore')) &&\n !event.item.menuData.selectionRoot\n ) {\n event.item.setRole(this.childRole);\n event.selectionRoot = this;\n }\n }\n\n private addChildItem(item: MenuItem): void {\n this.childItemSet.add(item);\n this.handleItemsChanged();\n }\n\n private async removeChildItem(event: MenuItemRemovedEvent): Promise<void> {\n this.childItemSet.delete(event.item);\n this.cachedChildItems = undefined;\n if (event.item.focused) {\n this.handleItemsChanged();\n await this.updateComplete;\n this.focus();\n }\n }\n\n public constructor() {\n super();\n\n this.addEventListener(\n 'sp-menu-item-added-or-updated',\n this.onSelectableItemAddedOrUpdated\n );\n this.addEventListener(\n 'sp-menu-item-added-or-updated',\n this.onFocusableItemAddedOrUpdated,\n {\n capture: true,\n }\n );\n\n this.addEventListener('sp-menu-item-removed', this.removeChildItem);\n this.addEventListener('click', this.onClick);\n this.addEventListener('focusin', this.handleFocusin);\n }\n\n public override focus({ preventScroll }: FocusOptions = {}): void {\n if (\n !this.childItems.length ||\n this.childItems.every((childItem) => childItem.disabled)\n ) {\n return;\n }\n if (\n this.childItems.some(\n (childItem) => childItem.menuData.focusRoot !== this\n )\n ) {\n super.focus({ preventScroll });\n return;\n }\n this.focusMenuItemByOffset(0);\n super.focus({ preventScroll });\n const selectedItem = this.querySelector('[selected]');\n if (selectedItem && !preventScroll) {\n selectedItem.scrollIntoView({ block: 'nearest' });\n }\n }\n\n private onClick(event: Event): void {\n if (event.defaultPrevented) {\n return;\n }\n const path = event.composedPath();\n const target = path.find((el) => {\n /* c8 ignore next 3 */\n if (!(el instanceof Element)) {\n return false;\n }\n return el.getAttribute('role') === this.childRole;\n }) as MenuItem;\n if (target?.href && target.href.length) {\n // This event will NOT ALLOW CANCELATION as link action\n // cancelation should occur on the `<sp-menu-item>` itself.\n this.dispatchEvent(\n new Event('change', {\n bubbles: true,\n composed: true,\n })\n );\n return;\n } else if (\n target?.menuData.selectionRoot === this &&\n this.childItems.length\n ) {\n event.preventDefault();\n if (target.hasSubmenu || target.open) {\n return;\n }\n this.selectOrToggleItem(target);\n } else {\n return;\n }\n this.prepareToCleanUp();\n }\n\n public handleFocusin(event: FocusEvent): void {\n const isOrContainsRelatedTarget = elementIsOrContains(\n this,\n event.relatedTarget as Node\n );\n if (\n isOrContainsRelatedTarget ||\n this.childItems.some(\n (childItem) => childItem.menuData.focusRoot !== this\n )\n ) {\n return;\n }\n const activeElement = (this.getRootNode() as Document).activeElement as\n | MenuItem\n | Menu;\n const selectionRoot =\n this.childItems[this.focusedItemIndex]?.menuData.selectionRoot ||\n this;\n if (activeElement !== selectionRoot || !isOrContainsRelatedTarget) {\n selectionRoot.focus({ preventScroll: true });\n if (activeElement && this.focusedItemIndex === 0) {\n const offset = this.childItems.findIndex(\n (childItem) => childItem === activeElement\n );\n if (offset > 0) {\n this.focusMenuItemByOffset(offset);\n }\n }\n }\n this.startListeningToKeyboard();\n }\n\n public startListeningToKeyboard(): void {\n this.addEventListener('keydown', this.handleKeydown);\n this.addEventListener('focusout', this.handleFocusout);\n }\n\n public handleFocusout(event: FocusEvent): void {\n if (elementIsOrContains(this, event.relatedTarget as Node)) {\n (event.composedPath()[0] as MenuItem).focused = false;\n return;\n }\n this.stopListeningToKeyboard();\n if (\n event.target === this &&\n this.childItems.some(\n (childItem) => childItem.menuData.focusRoot === this\n )\n ) {\n const focusedItem = this.childItems[this.focusedItemIndex];\n if (focusedItem) {\n focusedItem.focused = false;\n }\n }\n this.removeAttribute('aria-activedescendant');\n }\n\n public stopListeningToKeyboard(): void {\n this.removeEventListener('keydown', this.handleKeydown);\n this.removeEventListener('focusout', this.handleFocusout);\n }\n\n public async selectOrToggleItem(targetItem: MenuItem): Promise<void> {\n const resolvedSelects = this.resolvedSelects;\n const oldSelectedItemsMap = new Map(this.selectedItemsMap);\n const oldSelected = this.selected.slice();\n const oldSelectedItems = this.selectedItems.slice();\n const oldValue = this.value;\n this.childItems[this.focusedItemIndex].focused = false;\n this.focusedItemIndex = this.childItems.indexOf(targetItem);\n this.forwardFocusVisibleToItem(targetItem);\n\n if (resolvedSelects === 'multiple') {\n if (this.selectedItemsMap.has(targetItem)) {\n this.selectedItemsMap.delete(targetItem);\n } else {\n this.selectedItemsMap.set(targetItem, true);\n }\n\n // Match HTML select and set the first selected\n // item as the value. Also set the selected array\n // in the order of the menu items.\n const selected: string[] = [];\n const selectedItems: MenuItem[] = [];\n\n this.childItemSet.forEach((childItem) => {\n if (childItem.menuData.selectionRoot !== this) return;\n\n if (this.selectedItemsMap.has(childItem)) {\n selected.push(childItem.value);\n selectedItems.push(childItem);\n }\n });\n this.selected = selected;\n this.selectedItems = selectedItems;\n this.value = this.selected.join(this.valueSeparator);\n } else {\n this.selectedItemsMap.clear();\n this.selectedItemsMap.set(targetItem, true);\n this.value = targetItem.value;\n this.selected = [targetItem.value];\n this.selectedItems = [targetItem];\n }\n\n await this.updateComplete;\n const applyDefault = this.dispatchEvent(\n new Event('change', {\n cancelable: true,\n bubbles: true,\n composed: true,\n })\n );\n if (!applyDefault) {\n // Cancel the event & don't apply the selection\n this.selected = oldSelected;\n this.selectedItems = oldSelectedItems;\n this.selectedItemsMap = oldSelectedItemsMap;\n this.value = oldValue;\n return;\n }\n // Apply the selection changes to the menu items\n if (resolvedSelects === 'single') {\n for (const oldItem of oldSelectedItemsMap.keys()) {\n if (oldItem !== targetItem) {\n oldItem.selected = false;\n }\n }\n targetItem.selected = true;\n } else if (resolvedSelects === 'multiple') {\n targetItem.selected = !targetItem.selected;\n }\n }\n\n protected navigateWithinMenu(event: KeyboardEvent): void {\n const { code } = event;\n const lastFocusedItem = this.childItems[this.focusedItemIndex];\n const direction = code === 'ArrowDown' ? 1 : -1;\n const itemToFocus = this.focusMenuItemByOffset(direction);\n if (itemToFocus === lastFocusedItem) {\n return;\n }\n event.preventDefault();\n itemToFocus.scrollIntoView({ block: 'nearest' });\n }\n\n protected navigateBetweenRelatedMenus(code: string): void {\n const shouldOpenSubmenu =\n (this.isLTR && code === 'ArrowRight') ||\n (!this.isLTR && code === 'ArrowLeft');\n const shouldCloseSelfAsSubmenu =\n (this.isLTR && code === 'ArrowLeft') ||\n (!this.isLTR && code === 'ArrowRight');\n if (shouldOpenSubmenu) {\n const lastFocusedItem = this.childItems[this.focusedItemIndex];\n if (lastFocusedItem.hasSubmenu) {\n // Remove focus while opening overlay from keyboard or the visible focus\n // will slip back to the first item in the menu.\n this.blur();\n lastFocusedItem.openOverlay();\n }\n } else if (shouldCloseSelfAsSubmenu && this.isSubmenu) {\n this.dispatchEvent(new Event('close', { bubbles: true }));\n }\n }\n\n public handleKeydown(event: KeyboardEvent): void {\n const { code } = event;\n if (code === 'Tab') {\n this.prepareToCleanUp();\n return;\n }\n if (code === 'Space') {\n const lastFocusedItem = this.childItems[this.focusedItemIndex];\n if (lastFocusedItem.hasSubmenu) {\n // Remove focus while opening overlay from keyboard or the visible focus\n // will slip back to the first item in the menu.\n this.blur();\n lastFocusedItem.openOverlay();\n return;\n }\n }\n if (code === 'Space' || code === 'Enter') {\n this.childItems[this.focusedItemIndex]?.click();\n return;\n }\n if (code === 'ArrowDown' || code === 'ArrowUp') {\n this.navigateWithinMenu(event);\n return;\n }\n this.navigateBetweenRelatedMenus(code);\n }\n\n public focusMenuItemByOffset(offset: number): MenuItem {\n const step = offset || 1;\n const focusedItem = this.childItems[this.focusedItemIndex];\n focusedItem.focused = false;\n this.focusedItemIndex =\n (this.childItems.length + this.focusedItemIndex + offset) %\n this.childItems.length;\n let itemToFocus = this.childItems[this.focusedItemIndex];\n let availableItems = this.childItems.length;\n // cycle through the available items in the directions of the offset to find the next non-disabled item\n while (itemToFocus.disabled && availableItems) {\n availableItems -= 1;\n this.focusedItemIndex =\n (this.childItems.length + this.focusedItemIndex + step) %\n this.childItems.length;\n itemToFocus = this.childItems[this.focusedItemIndex];\n }\n // if there are no non-disabled items, skip the work to focus a child\n if (!itemToFocus?.disabled) {\n this.forwardFocusVisibleToItem(itemToFocus);\n }\n return itemToFocus;\n }\n\n private prepareToCleanUp(): void {\n document.addEventListener(\n 'focusout',\n () => {\n requestAnimationFrame(() => {\n const focusedItem = this.childItems[this.focusedItemIndex];\n if (focusedItem) {\n focusedItem.focused = false;\n this.updateSelectedItemIndex();\n }\n });\n },\n { once: true }\n );\n }\n\n public updateSelectedItemIndex(): void {\n let firstOrFirstSelectedIndex = 0;\n const selectedItemsMap = new Map<MenuItem, boolean>();\n const selected: string[] = [];\n const selectedItems: MenuItem[] = [];\n let itemIndex = this.childItems.length;\n while (itemIndex) {\n itemIndex -= 1;\n const childItem = this.childItems[itemIndex];\n if (childItem.menuData.selectionRoot === this) {\n if (childItem.selected) {\n firstOrFirstSelectedIndex = itemIndex;\n selectedItemsMap.set(childItem, true);\n selected.unshift(childItem.value);\n selectedItems.unshift(childItem);\n }\n // Remove \"focused\" from non-\"selected\" items ONLY\n // Preserve \"focused\" on index===0 when no selection\n if (itemIndex !== firstOrFirstSelectedIndex) {\n childItem.focused = false;\n }\n }\n }\n selectedItems.map((item, i) => {\n // When there is more than one \"selected\" item,\n // ensure only the first one can be \"focused\"\n if (i > 0) {\n item.focused = false;\n }\n });\n this.selectedItemsMap = selectedItemsMap;\n this.selected = selected;\n this.selectedItems = selectedItems;\n this.value = this.selected.join(this.valueSeparator);\n this.focusedItemIndex = firstOrFirstSelectedIndex;\n this.focusInItemIndex = firstOrFirstSelectedIndex;\n }\n\n private _willUpdateItems = false;\n\n private handleItemsChanged(): void {\n this.cachedChildItems = undefined;\n if (!this._willUpdateItems) {\n /* c8 ignore next 3 */\n let resolve = (): void => {\n return;\n };\n this.cacheUpdated = new Promise((res) => (resolve = res));\n this._willUpdateItems = true;\n // Debounce the update so we only update once\n // if multiple items have changed\n window.requestAnimationFrame(() => {\n if (this.cachedChildItems === undefined) {\n this.updateSelectedItemIndex();\n this.updateItemFocus();\n }\n this._willUpdateItems = false;\n resolve();\n });\n }\n }\n\n private updateItemFocus(): void {\n if (this.childItems.length == 0) {\n return;\n }\n const focusInItem = this.childItems[this.focusInItemIndex];\n if (\n (this.getRootNode() as Document).activeElement ===\n focusInItem.menuData.focusRoot\n ) {\n this.forwardFocusVisibleToItem(focusInItem);\n }\n }\n\n private forwardFocusVisibleToItem(item: MenuItem): void {\n if (item.menuData.focusRoot !== this) {\n return;\n }\n item.focused = this.hasVisibleFocusInTree();\n this.setAttribute('aria-activedescendant', item.id);\n if (\n item.menuData.selectionRoot &&\n item.menuData.selectionRoot !== this\n ) {\n item.menuData.selectionRoot.focus();\n }\n }\n\n public override render(): TemplateResult {\n return html`\n <slot></slot>\n `;\n }\n\n private _notFirstUpdated = false;\n\n protected override firstUpdated(changed: PropertyValues): void {\n super.firstUpdated(changed);\n if (!this.hasAttribute('tabindex')) {\n const role = this.getAttribute('role');\n if (role === 'group') {\n this.tabIndex = -1;\n } else if (role !== 'none') {\n this.tabIndex = 0;\n }\n }\n const updates: Promise<unknown>[] = [\n new Promise((res) => requestAnimationFrame(() => res(true))),\n ];\n [...this.children].forEach((item) => {\n if ((item as MenuItem).localName === 'sp-menu-item') {\n updates.push((item as MenuItem).updateComplete);\n }\n });\n this.childItemsUpdated = Promise.all(updates);\n }\n\n protected override updated(changes: PropertyValues<this>): void {\n super.updated(changes);\n if (changes.has('selects') && this._notFirstUpdated) {\n this.selectsChanged();\n }\n if (changes.has('label')) {\n if (this.label) {\n this.setAttribute('aria-label', this.label);\n } else {\n this.removeAttribute('aria-label');\n }\n }\n this._notFirstUpdated = true;\n }\n\n protected selectsChanged(): void {\n const updates: Promise<unknown>[] = [\n new Promise((res) => requestAnimationFrame(() => res(true))),\n ];\n this.childItemSet.forEach((childItem) => {\n updates.push(childItem.triggerUpdate());\n });\n this.childItemsUpdated = Promise.all(updates);\n }\n\n public override connectedCallback(): void {\n super.connectedCallback();\n if (!this.hasAttribute('role')) {\n this.setAttribute('role', this.ownRole);\n }\n this.updateComplete.then(() => this.updateItemFocus());\n }\n\n protected childItemsUpdated!: Promise<unknown[]>;\n protected cacheUpdated = Promise.resolve();\n\n protected override async getUpdateComplete(): Promise<boolean> {\n const complete = (await super.getUpdateComplete()) as boolean;\n await this.childItemsUpdated;\n await this.cacheUpdated;\n return complete;\n }\n}\n"],
5
- "mappings": "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",
5
+ "mappings": "qNAYA,OAEI,QAAAA,EAEA,mBAAAC,MAEG,gCACP,OACI,YAAAC,EACA,SAAAC,MACG,kDAEP,OAAS,YAAAC,MAAgB,gBAKzB,OAAOC,MAAgB,gBAavB,SAASC,EACLC,EACAC,EACO,CACP,MAAO,CAAC,CAACA,IAAiBD,IAAOC,GAAgBD,EAAG,SAASC,CAAY,EAC7E,CAeO,aAAM,aAAaP,CAAgB,CA2K/B,aAAc,CACjB,MAAM,EAvKV,KAAO,UAAY,GAGnB,KAAO,MAAQ,GAMf,KAAO,MAAQ,GAKf,KAAO,eAAiB,IAKxB,KAAO,SAAW,CAAC,EAGnB,KAAO,cAAgB,CAAC,EAKxB,KAAQ,aAAe,IAAI,IAC3B,KAAO,iBAAmB,EAC1B,KAAO,iBAAmB,EAE1B,KAAQ,iBAAmB,IAAI,IAse/B,KAAQ,iBAAmB,GAyD3B,KAAQ,iBAAmB,GAyD3B,KAAU,aAAe,QAAQ,QAAQ,EA9crC,KAAK,iBACD,gCACA,KAAK,8BACT,EACA,KAAK,iBACD,gCACA,KAAK,8BACL,CACI,QAAS,EACb,CACJ,EAEA,KAAK,iBAAiB,uBAAwB,KAAK,eAAe,EAClE,KAAK,iBAAiB,QAAS,KAAK,OAAO,EAC3C,KAAK,iBAAiB,UAAW,KAAK,aAAa,CACvD,CA5LA,WAA2B,QAAyB,CAChD,MAAO,CAACI,CAAU,CACtB,CAmCA,IAAW,YAAyB,CAChC,OAAK,KAAK,mBACN,KAAK,iBAAmB,KAAK,sBAAsB,GAEhD,KAAK,gBAChB,CAIQ,uBAAoC,CACxC,KAAK,iBAAmB,CAAC,EAEzB,MAAMI,EAAe,KAAK,SACpB,KAAK,SAAS,iBAAiB,CAAE,QAAS,EAAK,CAAC,EAChD,CAAC,EACP,UAAWC,KAAeD,EAAc,CACpC,MAAME,EACFD,aAAuBN,EACjB,CAACM,CAAuB,EACvB,CAAC,GAAGA,EAAY,iBAAiB,GAAG,CAAC,EAEhD,UAAWE,KAAiBD,EACpB,KAAK,aAAa,IAAIC,CAAa,GACnC,KAAK,iBAAiB,KAAKA,CAAa,CAGpD,CAEA,OAAO,KAAK,gBAChB,CASA,IAAW,WAAoB,CAC3B,GAAI,KAAK,eAAiB,UACtB,MAAO,SAEX,OAAQ,KAAK,gBAAiB,CAC1B,IAAK,SACD,MAAO,gBACX,IAAK,WACD,MAAO,mBACX,QACI,MAAO,UACf,CACJ,CAEA,IAAc,SAAkB,CAC5B,MAAO,MACX,CAYQ,8BACJC,EACI,CAxKZ,IAAAC,EAyKYD,EAAM,KAAK,SAAS,YAEpB,KAAK,SAAW,IAEpBA,EAAM,UAAY,KAClB,KAAK,aAAaA,EAAM,IAAI,EAExB,KAAK,UAAY,WACjB,KAAK,gBAAkB,UACvB,KAAK,eAAgBC,EAAAD,EAAM,6BAAN,YAAAC,EAAkC,aACnD,UAEA,KAAK,aAAa,MAAM,GACxB,QACG,KAAK,SACZ,KAAK,aAAgB,KAAK,aAAa,MAAM,GACzC,OACJ,KAAK,gBAAkB,KAAK,QAC5BD,EAAM,2BAA6B,OAEnC,KAAK,aAAgB,KAAK,aAAa,MAAM,GACzC,OACJ,KAAK,gBACD,KAAK,eAAiB,OAAS,SAAW,OAEtD,CASQ,+BACJA,EACI,EAEA,KAAK,kBAAoB,UACzB,KAAK,kBAAoB,YAEZ,CAAC,KAAK,SAAW,KAAK,kBAAoB,WACvD,CAACA,EAAM,KAAK,SAAS,gBAErBA,EAAM,KAAK,QAAQ,KAAK,SAAS,EACjCA,EAAM,cAAgB,KAE9B,CAEQ,aAAaE,EAAsB,CACvC,KAAK,aAAa,IAAIA,CAAI,EAC1B,KAAK,mBAAmB,CAC5B,CAEA,MAAc,gBAAgBF,EAA4C,CACtE,KAAK,aAAa,OAAOA,EAAM,IAAI,EACnC,KAAK,iBAAmB,OACpBA,EAAM,KAAK,UACX,KAAK,mBAAmB,EACxB,MAAM,KAAK,eACX,KAAK,MAAM,EAEnB,CAsBgB,MAAM,CAAE,cAAAG,CAAc,EAAkB,CAAC,EAAS,CAC9D,GACI,CAAC,KAAK,WAAW,QACjB,KAAK,WAAW,MAAOC,GAAcA,EAAU,QAAQ,EAEvD,OAEJ,GACI,KAAK,WAAW,KACXA,GAAcA,EAAU,SAAS,YAAc,IACpD,EACF,CACE,MAAM,MAAM,CAAE,cAAAD,CAAc,CAAC,EAC7B,MACJ,CACA,KAAK,sBAAsB,CAAC,EAC5B,MAAM,MAAM,CAAE,cAAAA,CAAc,CAAC,EAC7B,MAAME,EAAe,KAAK,cAAc,YAAY,EAChDA,GAAgB,CAACF,GACjBE,EAAa,eAAe,CAAE,MAAO,SAAU,CAAC,CAExD,CAEQ,QAAQL,EAAoB,CAChC,GAAIA,EAAM,iBACN,OAGJ,MAAMM,EADON,EAAM,aAAa,EACZ,KAAMN,GAEhBA,aAAc,QAGbA,EAAG,aAAa,MAAM,IAAM,KAAK,UAF7B,EAGd,EACD,IAAIY,GAAA,YAAAA,EAAQ,OAAQA,EAAO,KAAK,OAAQ,CAGpC,KAAK,cACD,IAAI,MAAM,SAAU,CAChB,QAAS,GACT,SAAU,EACd,CAAC,CACL,EACA,MACJ,UACIA,GAAA,YAAAA,EAAQ,SAAS,iBAAkB,MACnC,KAAK,WAAW,OAClB,CAEE,GADAN,EAAM,eAAe,EACjBM,EAAO,YAAcA,EAAO,KAC5B,OAEJ,KAAK,mBAAmBA,CAAM,CAClC,KACI,QAEJ,KAAK,iBAAiB,CAC1B,CAEO,cAAcN,EAAyB,CAzTlD,IAAAC,EA0TQ,MAAMM,EAA4Bd,EAC9B,KACAO,EAAM,aACV,EACA,GACIO,GACA,KAAK,WAAW,KACXH,GAAcA,EAAU,SAAS,YAAc,IACpD,EAEA,OAEJ,MAAMI,EAAiB,KAAK,YAAY,EAAe,cAGjDC,IACFR,EAAA,KAAK,WAAW,KAAK,oBAArB,YAAAA,EAAwC,SAAS,gBACjD,KACJ,IAAIO,IAAkBC,GAAiB,CAACF,KACpCE,EAAc,MAAM,CAAE,cAAe,EAAK,CAAC,EACvCD,GAAiB,KAAK,mBAAqB,GAAG,CAC9C,MAAME,EAAS,KAAK,WAAW,UAC1BN,GAAcA,IAAcI,CACjC,EACIE,EAAS,GACT,KAAK,sBAAsBA,CAAM,CAEzC,CAEJ,KAAK,yBAAyB,CAClC,CAEO,0BAAiC,CACpC,KAAK,iBAAiB,UAAW,KAAK,aAAa,EACnD,KAAK,iBAAiB,WAAY,KAAK,cAAc,CACzD,CAEO,eAAeV,EAAyB,CAC3C,GAAIP,EAAoB,KAAMO,EAAM,aAAqB,EAAG,CACvDA,EAAM,aAAa,EAAE,GAAgB,QAAU,GAChD,MACJ,CAEA,GADA,KAAK,wBAAwB,EAEzBA,EAAM,SAAW,MACjB,KAAK,WAAW,KACXI,GAAcA,EAAU,SAAS,YAAc,IACpD,EACF,CACE,MAAMO,EAAc,KAAK,WAAW,KAAK,kBACrCA,IACAA,EAAY,QAAU,GAE9B,CACA,KAAK,gBAAgB,uBAAuB,CAChD,CAEO,yBAAgC,CACnC,KAAK,oBAAoB,UAAW,KAAK,aAAa,EACtD,KAAK,oBAAoB,WAAY,KAAK,cAAc,CAC5D,CAEA,MAAa,mBAAmBC,EAAqC,CACjE,MAAMC,EAAkB,KAAK,gBACvBC,EAAsB,IAAI,IAAI,KAAK,gBAAgB,EACnDC,EAAc,KAAK,SAAS,MAAM,EAClCC,EAAmB,KAAK,cAAc,MAAM,EAC5CC,EAAW,KAAK,MAKtB,GAJA,KAAK,WAAW,KAAK,kBAAkB,QAAU,GACjD,KAAK,iBAAmB,KAAK,WAAW,QAAQL,CAAU,EAC1D,KAAK,0BAA0BA,CAAU,EAErCC,IAAoB,WAAY,CAC5B,KAAK,iBAAiB,IAAID,CAAU,EACpC,KAAK,iBAAiB,OAAOA,CAAU,EAEvC,KAAK,iBAAiB,IAAIA,EAAY,EAAI,EAM9C,MAAMM,EAAqB,CAAC,EACtBC,EAA4B,CAAC,EAEnC,KAAK,aAAa,QAASf,GAAc,CACjCA,EAAU,SAAS,gBAAkB,MAErC,KAAK,iBAAiB,IAAIA,CAAS,IACnCc,EAAS,KAAKd,EAAU,KAAK,EAC7Be,EAAc,KAAKf,CAAS,EAEpC,CAAC,EACD,KAAK,SAAWc,EAChB,KAAK,cAAgBC,EACrB,KAAK,MAAQ,KAAK,SAAS,KAAK,KAAK,cAAc,CACvD,MACI,KAAK,iBAAiB,MAAM,EAC5B,KAAK,iBAAiB,IAAIP,EAAY,EAAI,EAC1C,KAAK,MAAQA,EAAW,MACxB,KAAK,SAAW,CAACA,EAAW,KAAK,EACjC,KAAK,cAAgB,CAACA,CAAU,EAWpC,GARA,MAAM,KAAK,eAQP,CAPiB,KAAK,cACtB,IAAI,MAAM,SAAU,CAChB,WAAY,GACZ,QAAS,GACT,SAAU,EACd,CAAC,CACL,EACmB,CAEf,KAAK,SAAWG,EAChB,KAAK,cAAgBC,EACrB,KAAK,iBAAmBF,EACxB,KAAK,MAAQG,EACb,MACJ,CAEA,GAAIJ,IAAoB,SAAU,CAC9B,UAAWO,KAAWN,EAAoB,KAAK,EACvCM,IAAYR,IACZQ,EAAQ,SAAW,IAG3BR,EAAW,SAAW,EAC1B,MAAWC,IAAoB,aAC3BD,EAAW,SAAW,CAACA,EAAW,SAE1C,CAEU,mBAAmBZ,EAA4B,CACrD,KAAM,CAAE,KAAAqB,CAAK,EAAIrB,EACXsB,EAAkB,KAAK,WAAW,KAAK,kBACvCC,EAAYF,IAAS,YAAc,EAAI,GACvCG,EAAc,KAAK,sBAAsBD,CAAS,EACpDC,IAAgBF,IAGpBtB,EAAM,eAAe,EACrBwB,EAAY,eAAe,CAAE,MAAO,SAAU,CAAC,EACnD,CAEU,4BAA4BH,EAAoB,CACtD,MAAMI,EACD,KAAK,OAASJ,IAAS,cACvB,CAAC,KAAK,OAASA,IAAS,YACvBK,EACD,KAAK,OAASL,IAAS,aACvB,CAAC,KAAK,OAASA,IAAS,aAC7B,GAAII,EAAmB,CACnB,MAAMH,EAAkB,KAAK,WAAW,KAAK,kBACzCA,EAAgB,aAGhB,KAAK,KAAK,EACVA,EAAgB,YAAY,EAEpC,MAAWI,GAA4B,KAAK,WACxC,KAAK,cAAc,IAAI,MAAM,QAAS,CAAE,QAAS,EAAK,CAAC,CAAC,CAEhE,CAEO,cAAc1B,EAA4B,CA/drD,IAAAC,EAgeQ,KAAM,CAAE,KAAAoB,CAAK,EAAIrB,EACjB,GAAIqB,IAAS,MAAO,CAChB,KAAK,iBAAiB,EACtB,MACJ,CACA,GAAIA,IAAS,QAAS,CAClB,MAAMC,EAAkB,KAAK,WAAW,KAAK,kBAC7C,GAAIA,EAAgB,WAAY,CAG5B,KAAK,KAAK,EACVA,EAAgB,YAAY,EAC5B,MACJ,CACJ,CACA,GAAID,IAAS,SAAWA,IAAS,QAAS,EACtCpB,EAAA,KAAK,WAAW,KAAK,oBAArB,MAAAA,EAAwC,QACxC,MACJ,CACA,GAAIoB,IAAS,aAAeA,IAAS,UAAW,CAC5C,KAAK,mBAAmBrB,CAAK,EAC7B,MACJ,CACA,KAAK,4BAA4BqB,CAAI,CACzC,CAEO,sBAAsBX,EAA0B,CACnD,MAAMiB,EAAOjB,GAAU,EACjBC,EAAc,KAAK,WAAW,KAAK,kBACzCA,EAAY,QAAU,GACtB,KAAK,kBACA,KAAK,WAAW,OAAS,KAAK,iBAAmBD,GAClD,KAAK,WAAW,OACpB,IAAIc,EAAc,KAAK,WAAW,KAAK,kBACnCI,EAAiB,KAAK,WAAW,OAErC,KAAOJ,EAAY,UAAYI,GAC3BA,GAAkB,EAClB,KAAK,kBACA,KAAK,WAAW,OAAS,KAAK,iBAAmBD,GAClD,KAAK,WAAW,OACpBH,EAAc,KAAK,WAAW,KAAK,kBAGvC,OAAKA,GAAA,MAAAA,EAAa,UACd,KAAK,0BAA0BA,CAAW,EAEvCA,CACX,CAEQ,kBAAyB,CAC7B,SAAS,iBACL,WACA,IAAM,CACF,sBAAsB,IAAM,CACxB,MAAMb,EAAc,KAAK,WAAW,KAAK,kBACrCA,IACAA,EAAY,QAAU,GACtB,KAAK,wBAAwB,EAErC,CAAC,CACL,EACA,CAAE,KAAM,EAAK,CACjB,CACJ,CAEO,yBAAgC,CACnC,IAAIkB,EAA4B,EAChC,MAAMC,EAAmB,IAAI,IACvBZ,EAAqB,CAAC,EACtBC,EAA4B,CAAC,EACnC,IAAIY,EAAY,KAAK,WAAW,OAChC,KAAOA,GAAW,CACdA,GAAa,EACb,MAAM3B,EAAY,KAAK,WAAW2B,GAC9B3B,EAAU,SAAS,gBAAkB,OACjCA,EAAU,WACVyB,EAA4BE,EAC5BD,EAAiB,IAAI1B,EAAW,EAAI,EACpCc,EAAS,QAAQd,EAAU,KAAK,EAChCe,EAAc,QAAQf,CAAS,GAI/B2B,IAAcF,IACdzB,EAAU,QAAU,IAGhC,CACAe,EAAc,IAAI,CAACjB,EAAM8B,IAAM,CAGvBA,EAAI,IACJ9B,EAAK,QAAU,GAEvB,CAAC,EACD,KAAK,iBAAmB4B,EACxB,KAAK,SAAWZ,EAChB,KAAK,cAAgBC,EACrB,KAAK,MAAQ,KAAK,SAAS,KAAK,KAAK,cAAc,EACnD,KAAK,iBAAmBU,EACxB,KAAK,iBAAmBA,CAC5B,CAIQ,oBAA2B,CAE/B,GADA,KAAK,iBAAmB,OACpB,CAAC,KAAK,iBAAkB,CAExB,IAAII,EAAU,IAAY,CAE1B,EACA,KAAK,aAAe,IAAI,QAASC,GAASD,EAAUC,CAAI,EACxD,KAAK,iBAAmB,GAGxB,OAAO,sBAAsB,IAAM,CAC3B,KAAK,mBAAqB,SAC1B,KAAK,wBAAwB,EAC7B,KAAK,gBAAgB,GAEzB,KAAK,iBAAmB,GACxBD,EAAQ,CACZ,CAAC,CACL,CACJ,CAEQ,iBAAwB,CAC5B,GAAI,KAAK,WAAW,QAAU,EAC1B,OAEJ,MAAME,EAAc,KAAK,WAAW,KAAK,kBAEpC,KAAK,YAAY,EAAe,gBACjCA,EAAY,SAAS,WAErB,KAAK,0BAA0BA,CAAW,CAElD,CAEQ,0BAA0BjC,EAAsB,CAChDA,EAAK,SAAS,YAAc,OAGhCA,EAAK,QAAU,KAAK,sBAAsB,EAC1C,KAAK,aAAa,wBAAyBA,EAAK,EAAE,EAE9CA,EAAK,SAAS,eACdA,EAAK,SAAS,gBAAkB,MAEhCA,EAAK,SAAS,cAAc,MAAM,EAE1C,CAEgB,QAAyB,CACrC,OAAOf;AAAA;AAAA,SAGX,CAImB,aAAaiD,EAA+B,CAE3D,GADA,MAAM,aAAaA,CAAO,EACtB,CAAC,KAAK,aAAa,UAAU,EAAG,CAChC,MAAMC,EAAO,KAAK,aAAa,MAAM,EACjCA,IAAS,QACT,KAAK,SAAW,GACTA,IAAS,SAChB,KAAK,SAAW,EAExB,CACA,MAAMC,EAA8B,CAChC,IAAI,QAASJ,GAAQ,sBAAsB,IAAMA,EAAI,EAAI,CAAC,CAAC,CAC/D,EACA,CAAC,GAAG,KAAK,QAAQ,EAAE,QAAShC,GAAS,CAC5BA,EAAkB,YAAc,gBACjCoC,EAAQ,KAAMpC,EAAkB,cAAc,CAEtD,CAAC,EACD,KAAK,kBAAoB,QAAQ,IAAIoC,CAAO,CAChD,CAEmB,QAAQC,EAAqC,CAC5D,MAAM,QAAQA,CAAO,EACjBA,EAAQ,IAAI,SAAS,GAAK,KAAK,kBAC/B,KAAK,eAAe,EAEpBA,EAAQ,IAAI,OAAO,IACf,KAAK,MACL,KAAK,aAAa,aAAc,KAAK,KAAK,EAE1C,KAAK,gBAAgB,YAAY,GAGzC,KAAK,iBAAmB,EAC5B,CAEU,gBAAuB,CAC7B,MAAMD,EAA8B,CAChC,IAAI,QAASJ,GAAQ,sBAAsB,IAAMA,EAAI,EAAI,CAAC,CAAC,CAC/D,EACA,KAAK,aAAa,QAAS9B,GAAc,CACrCkC,EAAQ,KAAKlC,EAAU,cAAc,CAAC,CAC1C,CAAC,EACD,KAAK,kBAAoB,QAAQ,IAAIkC,CAAO,CAChD,CAEgB,mBAA0B,CACtC,MAAM,kBAAkB,EACnB,KAAK,aAAa,MAAM,GACzB,KAAK,aAAa,OAAQ,KAAK,OAAO,EAE1C,KAAK,eAAe,KAAK,IAAM,KAAK,gBAAgB,CAAC,CACzD,CAKA,MAAyB,mBAAsC,CAC3D,MAAME,EAAY,MAAM,MAAM,kBAAkB,EAChD,aAAM,KAAK,kBACX,MAAM,KAAK,aACJA,CACX,CACJ,CA5nBWC,EAAA,CADNpD,EAAS,CAAE,KAAM,OAAQ,QAAS,EAAK,CAAC,GAPhC,KAQF,qBAGAoD,EAAA,CADNpD,EAAS,CAAE,KAAM,OAAQ,QAAS,EAAK,CAAC,GAVhC,KAWF,uBAGAoD,EAAA,CADNpD,EAAS,CAAE,KAAM,MAAO,CAAC,GAbjB,KAcF,qBAKAoD,EAAA,CADNpD,EAAS,CAAE,KAAM,OAAQ,UAAW,iBAAkB,CAAC,GAlB/C,KAmBF,8BAKAoD,EAAA,CADNpD,EAAS,CAAE,UAAW,EAAM,CAAC,GAvBrB,KAwBF,wBAGAoD,EAAA,CADNpD,EAAS,CAAE,UAAW,EAAM,CAAC,GA1BrB,KA2BF,6BAGAoD,EAAA,CADNnD,EAAM,kBAAkB,GA7BhB,KA8BF",
6
6
  "names": ["html", "SpectrumElement", "property", "query", "MenuItem", "menuStyles", "elementIsOrContains", "el", "isOrContains", "slotElements", "slotElement", "childMenuItems", "childMenuItem", "event", "_a", "item", "preventScroll", "childItem", "selectedItem", "target", "isOrContainsRelatedTarget", "activeElement", "selectionRoot", "offset", "focusedItem", "targetItem", "resolvedSelects", "oldSelectedItemsMap", "oldSelected", "oldSelectedItems", "oldValue", "selected", "selectedItems", "oldItem", "code", "lastFocusedItem", "direction", "itemToFocus", "shouldOpenSubmenu", "shouldCloseSelfAsSubmenu", "step", "availableItems", "firstOrFirstSelectedIndex", "selectedItemsMap", "itemIndex", "i", "resolve", "res", "focusInItem", "changed", "role", "updates", "changes", "complete", "__decorateClass"]
7
7
  }
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["MenuGroup.ts"],
4
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 TemplateResult,\n} from '@spectrum-web-components/base';\nimport {\n queryAssignedNodes,\n state,\n} from '@spectrum-web-components/base/src/decorators.js';\n\nimport { Menu } from './Menu.dev.js'\nimport '../sp-menu.dev.js'\nimport menuGroupStyles from './menu-group.css.js';\n\n/**\n * @element sp-menu-group\n *\n * @slot header - headline of the menu group\n * @slot - menu items to be listed in the group\n */\nexport class MenuGroup extends Menu {\n public static override get styles(): CSSResultArray {\n return [...super.styles, menuGroupStyles];\n }\n\n private static instances = 0;\n\n private headerId!: string;\n\n public constructor() {\n super();\n MenuGroup.instances += 1;\n this.headerId = `sp-menu-group-label-${MenuGroup.instances}`;\n }\n\n @queryAssignedNodes('header', true)\n private headerElements!: NodeListOf<HTMLElement>;\n\n @state()\n private headerElement?: HTMLElement;\n\n protected override get ownRole(): string {\n switch (this.selects) {\n case 'multiple':\n case 'single':\n case 'inherit':\n return 'group';\n default:\n return 'menu';\n }\n }\n\n protected updateLabel(): void {\n const headerElement = this.headerElements.length\n ? this.headerElements[0]\n : undefined;\n if (headerElement !== this.headerElement) {\n if (this.headerElement && this.headerElement.id === this.headerId) {\n this.headerElement.removeAttribute('id');\n }\n if (headerElement) {\n const headerId = headerElement.id || this.headerId;\n if (!headerElement.id) {\n headerElement.id = headerId;\n }\n this.setAttribute('aria-labelledby', headerId);\n } else {\n this.removeAttribute('aria-labelledby');\n }\n }\n this.headerElement = headerElement;\n }\n\n public override render(): TemplateResult {\n return html`\n <span\n class=\"header\"\n aria-hidden=\"true\"\n ?hidden=${!this.headerElement}\n >\n <slot name=\"header\" @slotchange=${this.updateLabel}></slot>\n </span>\n <sp-menu role=\"none\">\n <slot></slot>\n </sp-menu>\n `;\n }\n}\n"],
5
- "mappings": ";;;;;;;;;;;;AAYA;AAAA,EAEI;AAAA,OAEG;AACP;AAAA,EACI;AAAA,EACA;AAAA,OACG;AAEP,SAAS,YAAY;AACrB,OAAO;AACP,OAAO,qBAAqB;AAQrB,MAAM,aAAN,cAAwB,KAAK;AAAA,EASzB,cAAc;AACjB,UAAM;AACN,eAAU,aAAa;AACvB,SAAK,WAAW,uBAAuB,WAAU;AAAA,EACrD;AAAA,EAZA,WAA2B,SAAyB;AAChD,WAAO,CAAC,GAAG,MAAM,QAAQ,eAAe;AAAA,EAC5C;AAAA,EAkBA,IAAuB,UAAkB;AACrC,YAAQ,KAAK;AAAA,WACJ;AAAA,WACA;AAAA,WACA;AACD,eAAO;AAAA;AAEP,eAAO;AAAA;AAAA,EAEnB;AAAA,EAEU,cAAoB;AAC1B,UAAM,gBAAgB,KAAK,eAAe,SACpC,KAAK,eAAe,KACpB;AACN,QAAI,kBAAkB,KAAK,eAAe;AACtC,UAAI,KAAK,iBAAiB,KAAK,cAAc,OAAO,KAAK,UAAU;AAC/D,aAAK,cAAc,gBAAgB,IAAI;AAAA,MAC3C;AACA,UAAI,eAAe;AACf,cAAM,WAAW,cAAc,MAAM,KAAK;AAC1C,YAAI,CAAC,cAAc,IAAI;AACnB,wBAAc,KAAK;AAAA,QACvB;AACA,aAAK,aAAa,mBAAmB,QAAQ;AAAA,MACjD,OAAO;AACH,aAAK,gBAAgB,iBAAiB;AAAA,MAC1C;AAAA,IACJ;AACA,SAAK,gBAAgB;AAAA,EACzB;AAAA,EAEgB,SAAyB;AACrC,WAAO;AAAA;AAAA;AAAA;AAAA,0BAIW,CAAC,KAAK;AAAA;AAAA,kDAEkB,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMnD;AACJ;AAnEO,WAAM,YAAN;AAAM,UAKM,YAAY;AAWnB;AAAA,EADP,mBAAmB,UAAU,IAAI;AAAA,GAfzB,UAgBD;AAGA;AAAA,EADP,MAAM;AAAA,GAlBE,UAmBD;",
5
+ "mappings": ";;;;;;;;;;;;AAYA;AAAA,EAEI;AAAA,OAEG;AACP;AAAA,EACI;AAAA,EACA;AAAA,OACG;AAEP,SAAS,YAAY;AACrB,OAAO;AACP,OAAO,qBAAqB;AAQrB,MAAM,aAAN,cAAwB,KAAK;AAAA,EASzB,cAAc;AACjB,UAAM;AACN,eAAU,aAAa;AACvB,SAAK,WAAW,uBAAuB,WAAU;AAAA,EACrD;AAAA,EAZA,WAA2B,SAAyB;AAChD,WAAO,CAAC,GAAG,MAAM,QAAQ,eAAe;AAAA,EAC5C;AAAA,EAkBA,IAAuB,UAAkB;AACrC,YAAQ,KAAK,SAAS;AAAA,MAClB,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACD,eAAO;AAAA,MACX;AACI,eAAO;AAAA,IACf;AAAA,EACJ;AAAA,EAEU,cAAoB;AAC1B,UAAM,gBAAgB,KAAK,eAAe,SACpC,KAAK,eAAe,KACpB;AACN,QAAI,kBAAkB,KAAK,eAAe;AACtC,UAAI,KAAK,iBAAiB,KAAK,cAAc,OAAO,KAAK,UAAU;AAC/D,aAAK,cAAc,gBAAgB,IAAI;AAAA,MAC3C;AACA,UAAI,eAAe;AACf,cAAM,WAAW,cAAc,MAAM,KAAK;AAC1C,YAAI,CAAC,cAAc,IAAI;AACnB,wBAAc,KAAK;AAAA,QACvB;AACA,aAAK,aAAa,mBAAmB,QAAQ;AAAA,MACjD,OAAO;AACH,aAAK,gBAAgB,iBAAiB;AAAA,MAC1C;AAAA,IACJ;AACA,SAAK,gBAAgB;AAAA,EACzB;AAAA,EAEgB,SAAyB;AACrC,WAAO;AAAA;AAAA;AAAA;AAAA,0BAIW,CAAC,KAAK;AAAA;AAAA,kDAEkB,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMnD;AACJ;AAnEO,WAAM,YAAN;AAAM,UAKM,YAAY;AAWnB;AAAA,EADP,mBAAmB,UAAU,IAAI;AAAA,GAfzB,UAgBD;AAGA;AAAA,EADP,MAAM;AAAA,GAlBE,UAmBD;",
6
6
  "names": []
7
7
  }
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["MenuGroup.ts"],
4
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 TemplateResult,\n} from '@spectrum-web-components/base';\nimport {\n queryAssignedNodes,\n state,\n} from '@spectrum-web-components/base/src/decorators.js';\n\nimport { Menu } from './Menu.js';\nimport '../sp-menu.js';\nimport menuGroupStyles from './menu-group.css.js';\n\n/**\n * @element sp-menu-group\n *\n * @slot header - headline of the menu group\n * @slot - menu items to be listed in the group\n */\nexport class MenuGroup extends Menu {\n public static override get styles(): CSSResultArray {\n return [...super.styles, menuGroupStyles];\n }\n\n private static instances = 0;\n\n private headerId!: string;\n\n public constructor() {\n super();\n MenuGroup.instances += 1;\n this.headerId = `sp-menu-group-label-${MenuGroup.instances}`;\n }\n\n @queryAssignedNodes('header', true)\n private headerElements!: NodeListOf<HTMLElement>;\n\n @state()\n private headerElement?: HTMLElement;\n\n protected override get ownRole(): string {\n switch (this.selects) {\n case 'multiple':\n case 'single':\n case 'inherit':\n return 'group';\n default:\n return 'menu';\n }\n }\n\n protected updateLabel(): void {\n const headerElement = this.headerElements.length\n ? this.headerElements[0]\n : undefined;\n if (headerElement !== this.headerElement) {\n if (this.headerElement && this.headerElement.id === this.headerId) {\n this.headerElement.removeAttribute('id');\n }\n if (headerElement) {\n const headerId = headerElement.id || this.headerId;\n if (!headerElement.id) {\n headerElement.id = headerId;\n }\n this.setAttribute('aria-labelledby', headerId);\n } else {\n this.removeAttribute('aria-labelledby');\n }\n }\n this.headerElement = headerElement;\n }\n\n public override render(): TemplateResult {\n return html`\n <span\n class=\"header\"\n aria-hidden=\"true\"\n ?hidden=${!this.headerElement}\n >\n <slot name=\"header\" @slotchange=${this.updateLabel}></slot>\n </span>\n <sp-menu role=\"none\">\n <slot></slot>\n </sp-menu>\n `;\n }\n}\n"],
5
- "mappings": "qNAYA,OAEI,QAAAA,MAEG,gCACP,OACI,sBAAAC,EACA,SAAAC,MACG,kDAEP,OAAS,QAAAC,MAAY,YACrB,MAAO,gBACP,OAAOC,MAAqB,sBAQrB,MAAMC,EAAN,cAAwBF,CAAK,CASzB,aAAc,CACjB,MAAM,EACNE,EAAU,WAAa,EACvB,KAAK,SAAW,uBAAuBA,EAAU,WACrD,CAZA,WAA2B,QAAyB,CAChD,MAAO,CAAC,GAAG,MAAM,OAAQD,CAAe,CAC5C,CAkBA,IAAuB,SAAkB,CACrC,OAAQ,KAAK,aACJ,eACA,aACA,UACD,MAAO,gBAEP,MAAO,OAEnB,CAEU,aAAoB,CAC1B,MAAME,EAAgB,KAAK,eAAe,OACpC,KAAK,eAAe,GACpB,OACN,GAAIA,IAAkB,KAAK,cAIvB,GAHI,KAAK,eAAiB,KAAK,cAAc,KAAO,KAAK,UACrD,KAAK,cAAc,gBAAgB,IAAI,EAEvCA,EAAe,CACf,MAAMC,EAAWD,EAAc,IAAM,KAAK,SACrCA,EAAc,KACfA,EAAc,GAAKC,GAEvB,KAAK,aAAa,kBAAmBA,CAAQ,CACjD,MACI,KAAK,gBAAgB,iBAAiB,EAG9C,KAAK,cAAgBD,CACzB,CAEgB,QAAyB,CACrC,OAAON;AAAA;AAAA;AAAA;AAAA,0BAIW,CAAC,KAAK;AAAA;AAAA,kDAEkB,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA,SAMnD,CACJ,EAnEO,WAAM,UAANK,EAAM,UAKM,UAAY,EAWnBG,EAAA,CADPP,EAAmB,SAAU,EAAI,GAfzB,UAgBD,8BAGAO,EAAA,CADPN,EAAM,GAlBE,UAmBD",
5
+ "mappings": "qNAYA,OAEI,QAAAA,MAEG,gCACP,OACI,sBAAAC,EACA,SAAAC,MACG,kDAEP,OAAS,QAAAC,MAAY,YACrB,MAAO,gBACP,OAAOC,MAAqB,sBAQrB,MAAMC,EAAN,cAAwBF,CAAK,CASzB,aAAc,CACjB,MAAM,EACNE,EAAU,WAAa,EACvB,KAAK,SAAW,uBAAuBA,EAAU,WACrD,CAZA,WAA2B,QAAyB,CAChD,MAAO,CAAC,GAAG,MAAM,OAAQD,CAAe,CAC5C,CAkBA,IAAuB,SAAkB,CACrC,OAAQ,KAAK,QAAS,CAClB,IAAK,WACL,IAAK,SACL,IAAK,UACD,MAAO,QACX,QACI,MAAO,MACf,CACJ,CAEU,aAAoB,CAC1B,MAAME,EAAgB,KAAK,eAAe,OACpC,KAAK,eAAe,GACpB,OACN,GAAIA,IAAkB,KAAK,cAIvB,GAHI,KAAK,eAAiB,KAAK,cAAc,KAAO,KAAK,UACrD,KAAK,cAAc,gBAAgB,IAAI,EAEvCA,EAAe,CACf,MAAMC,EAAWD,EAAc,IAAM,KAAK,SACrCA,EAAc,KACfA,EAAc,GAAKC,GAEvB,KAAK,aAAa,kBAAmBA,CAAQ,CACjD,MACI,KAAK,gBAAgB,iBAAiB,EAG9C,KAAK,cAAgBD,CACzB,CAEgB,QAAyB,CACrC,OAAON;AAAA;AAAA;AAAA;AAAA,0BAIW,CAAC,KAAK;AAAA;AAAA,kDAEkB,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA,SAMnD,CACJ,EAnEO,WAAM,UAANK,EAAM,UAKM,UAAY,EAWnBG,EAAA,CADPP,EAAmB,SAAU,EAAI,GAfzB,UAgBD,8BAGAO,EAAA,CADPN,EAAM,GAlBE,UAmBD",
6
6
  "names": ["html", "queryAssignedNodes", "state", "Menu", "menuGroupStyles", "_MenuGroup", "headerElement", "headerId", "__decorateClass"]
7
7
  }
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["menu-group.stories.ts"],
4
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 { html, TemplateResult } from '@spectrum-web-components/base';\n\nimport { MenuGroup } from '@spectrum-web-components/menu';\nimport '@spectrum-web-components/menu/sp-menu.js';\nimport '@spectrum-web-components/menu/sp-menu-divider.js';\nimport '@spectrum-web-components/popover/sp-popover.js';\nimport '@spectrum-web-components/menu/sp-menu.js';\nimport '@spectrum-web-components/menu/sp-menu-item.js';\nimport '@spectrum-web-components/menu/sp-menu-divider.js';\nimport '@spectrum-web-components/menu/sp-menu-group.js';\n\nexport default {\n component: 'sp-menu',\n title: 'Menu Group',\n};\n\nexport const mixed = (): TemplateResult => {\n let style = 'italic';\n let weight = '700';\n let color = 'blue';\n let decoration = 'overline';\n const styleRules = ({\n style,\n weight,\n color,\n decoration,\n }: {\n style: string;\n weight: string;\n color: string;\n decoration: string;\n }): string => {\n return `\n .style-rule {\n font-weight: ${weight};\n font-style: ${style};\n color: ${color};\n text-decoration: ${decoration};\n }\n `;\n };\n const update = (event: Event): void => {\n const { value, id } = event.target as MenuGroup;\n switch (id) {\n case 'font':\n const values = value.split(',');\n style = values.indexOf('italic') > -1 ? 'italic' : 'normal';\n weight = values.indexOf('bold') > -1 ? '700' : '400';\n break;\n case 'color':\n color = value;\n break;\n case 'decoration':\n decoration = value;\n break;\n }\n (document.querySelector('#output') as HTMLElement).textContent =\n styleRules({\n style,\n weight,\n color,\n decoration,\n });\n };\n return html`\n <style>\n sp-popover {\n position: static;\n float: left;\n }\n </style>\n <sp-popover open>\n <sp-menu label=\"Style/Color\" @change=${update}>\n <sp-menu-group label=\"Font Style\" selects=\"multiple\" id=\"font\">\n <sp-menu-item value=\"bold\" selected>Bold</sp-menu-item>\n <sp-menu-item value=\"italic\" selected>Italic</sp-menu-item>\n </sp-menu-group>\n <sp-menu-divider></sp-menu-divider>\n <sp-menu-group label=\"Text Color\" selects=\"single\" id=\"color\">\n <sp-menu-item value=\"black\">Black</sp-menu-item>\n <sp-menu-item value=\"blue\" selected>Blue</sp-menu-item>\n <sp-menu-item value=\"red\">Red</sp-menu-item>\n <sp-menu-item value=\"green\">Green</sp-menu-item>\n </sp-menu-group>\n <sp-menu-divider></sp-menu-divider>\n <sp-menu-group\n label=\"Text Decoration\"\n selects=\"single\"\n id=\"decoration\"\n >\n <sp-menu-item value=\"none\">None</sp-menu-item>\n <sp-menu-item value=\"overline\" selected>\n Overline\n </sp-menu-item>\n <sp-menu-item value=\"line-through\">\n Line-through\n </sp-menu-item>\n <sp-menu-item value=\"underline\">Underline</sp-menu-item>\n </sp-menu-group>\n </sp-menu>\n </sp-popover>\n <pre\n id=\"output\"\n style=\"font-family: var(--spectrum-alias-body-text-font-family);\"\n >\n ${styleRules({ style, weight, color, decoration })}\n </pre\n >\n `;\n};\n\nexport const inherit = (): TemplateResult => {\n return html`\n <style>\n sp-popover {\n position: static;\n float: left;\n }\n </style>\n <sp-popover open>\n <sp-menu label=\"Groceries\" selects=\"multiple\">\n <sp-menu-group label=\"Juice\" selects=\"inherit\">\n <sp-menu-item selected>Orange</sp-menu-item>\n <sp-menu-item selected>Apple</sp-menu-item>\n <sp-menu-item>Grape</sp-menu-item>\n </sp-menu-group>\n <sp-menu-divider></sp-menu-divider>\n <sp-menu-group label=\"Vegetables\" selects=\"inherit\">\n <sp-menu-item>Carrots</sp-menu-item>\n <sp-menu-item selected>Summer Squash</sp-menu-item>\n <sp-menu-item>Zuccini</sp-menu-item>\n </sp-menu-group>\n <sp-menu-divider></sp-menu-divider>\n <sp-menu-group label=\"Dry Goods\" selects=\"inherit\">\n <sp-menu-item>Ceral</sp-menu-item>\n <sp-menu-item selected>Flour</sp-menu-item>\n <sp-menu-item>Salt</sp-menu-item>\n <sp-menu-item>Sugar</sp-menu-item>\n </sp-menu-group>\n </sp-menu>\n </sp-popover>\n `;\n};\n"],
5
- "mappings": ";AAWA,SAAS,YAA4B;AAGrC,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AAEP,eAAe;AAAA,EACX,WAAW;AAAA,EACX,OAAO;AACX;AAEO,aAAM,QAAQ,MAAsB;AACvC,MAAI,QAAQ;AACZ,MAAI,SAAS;AACb,MAAI,QAAQ;AACZ,MAAI,aAAa;AACjB,QAAM,aAAa,CAAC;AAAA,IAChB,OAAAA;AAAA,IACA,QAAAC;AAAA,IACA,OAAAC;AAAA,IACA,YAAAC;AAAA,EACJ,MAKc;AACV,WAAO;AAAA;AAAA,2BAEYF;AAAA,0BACDD;AAAA,qBACLE;AAAA,+BACUC;AAAA;AAAA;AAAA,EAG3B;AACA,QAAM,SAAS,CAAC,UAAuB;AACnC,UAAM,EAAE,OAAO,GAAG,IAAI,MAAM;AAC5B,YAAQ;AAAA,WACC;AACD,cAAM,SAAS,MAAM,MAAM,GAAG;AAC9B,gBAAQ,OAAO,QAAQ,QAAQ,IAAI,KAAK,WAAW;AACnD,iBAAS,OAAO,QAAQ,MAAM,IAAI,KAAK,QAAQ;AAC/C;AAAA,WACC;AACD,gBAAQ;AACR;AAAA,WACC;AACD,qBAAa;AACb;AAAA;AAER,IAAC,SAAS,cAAc,SAAS,EAAkB,cAC/C,WAAW;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACJ,CAAC;AAAA,EACT;AACA,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mDAQwC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAiCrC,WAAW,EAAE,OAAO,QAAQ,OAAO,WAAW,CAAC;AAAA;AAAA;AAAA;AAI7D;AAEO,aAAM,UAAU,MAAsB;AACzC,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA8BX;",
5
+ "mappings": ";AAWA,SAAS,YAA4B;AAGrC,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AAEP,eAAe;AAAA,EACX,WAAW;AAAA,EACX,OAAO;AACX;AAEO,aAAM,QAAQ,MAAsB;AACvC,MAAI,QAAQ;AACZ,MAAI,SAAS;AACb,MAAI,QAAQ;AACZ,MAAI,aAAa;AACjB,QAAM,aAAa,CAAC;AAAA,IAChB,OAAAA;AAAA,IACA,QAAAC;AAAA,IACA,OAAAC;AAAA,IACA,YAAAC;AAAA,EACJ,MAKc;AACV,WAAO;AAAA;AAAA,2BAEYF;AAAA,0BACDD;AAAA,qBACLE;AAAA,+BACUC;AAAA;AAAA;AAAA,EAG3B;AACA,QAAM,SAAS,CAAC,UAAuB;AACnC,UAAM,EAAE,OAAO,GAAG,IAAI,MAAM;AAC5B,YAAQ,IAAI;AAAA,MACR,KAAK;AACD,cAAM,SAAS,MAAM,MAAM,GAAG;AAC9B,gBAAQ,OAAO,QAAQ,QAAQ,IAAI,KAAK,WAAW;AACnD,iBAAS,OAAO,QAAQ,MAAM,IAAI,KAAK,QAAQ;AAC/C;AAAA,MACJ,KAAK;AACD,gBAAQ;AACR;AAAA,MACJ,KAAK;AACD,qBAAa;AACb;AAAA,IACR;AACA,IAAC,SAAS,cAAc,SAAS,EAAkB,cAC/C,WAAW;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACJ,CAAC;AAAA,EACT;AACA,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mDAQwC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAiCrC,WAAW,EAAE,OAAO,QAAQ,OAAO,WAAW,CAAC;AAAA;AAAA;AAAA;AAI7D;AAEO,aAAM,UAAU,MAAsB;AACzC,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA8BX;",
6
6
  "names": ["style", "weight", "color", "decoration"]
7
7
  }
@@ -787,5 +787,124 @@ describe("Submenu", () => {
787
787
  activeOverlays = document.querySelectorAll("active-overlay");
788
788
  expect(activeOverlays.length).to.equal(0);
789
789
  });
790
+ it('cleans up submenus that close before they are "open"', async () => {
791
+ await sendMouse({
792
+ steps: [
793
+ {
794
+ type: "move",
795
+ position: [-5, -5]
796
+ }
797
+ ]
798
+ });
799
+ const el = await styledFixture(
800
+ html`
801
+ <sp-menu>
802
+ <sp-menu-item class="root-1">
803
+ Has submenu
804
+ <sp-menu slot="submenu">
805
+ <sp-menu-item class="submenu-item-1">
806
+ One
807
+ </sp-menu-item>
808
+ <sp-menu-item class="submenu-item-2">
809
+ Two
810
+ </sp-menu-item>
811
+ <sp-menu-item class="submenu-item-3">
812
+ Three
813
+ </sp-menu-item>
814
+ </sp-menu>
815
+ </sp-menu-item>
816
+ <sp-menu-item class="root-2">
817
+ Has submenu
818
+ <sp-menu slot="submenu">
819
+ <sp-menu-item class="submenu-item-1">
820
+ One
821
+ </sp-menu-item>
822
+ <sp-menu-item class="submenu-item-2">
823
+ Two
824
+ </sp-menu-item>
825
+ <sp-menu-item class="submenu-item-3">
826
+ Three
827
+ </sp-menu-item>
828
+ </sp-menu>
829
+ </sp-menu-item>
830
+ </sp-menu>
831
+ `
832
+ );
833
+ await elementUpdated(el);
834
+ const rootItem1 = el.querySelector(".root-1");
835
+ const rootItem2 = el.querySelector(".root-2");
836
+ expect(rootItem1.open, "initially closed 1").to.be.false;
837
+ expect(rootItem2.open, "initially closed 2").to.be.false;
838
+ const rootItemBoundingRect1 = rootItem1.getBoundingClientRect();
839
+ const rootItemBoundingRect2 = rootItem2.getBoundingClientRect();
840
+ let activeOverlay;
841
+ await sendMouse({
842
+ steps: [
843
+ {
844
+ type: "move",
845
+ position: [
846
+ rootItemBoundingRect1.left + rootItemBoundingRect1.width / 2,
847
+ rootItemBoundingRect1.top + rootItemBoundingRect1.height / 2
848
+ ]
849
+ }
850
+ ]
851
+ });
852
+ await sendMouse({
853
+ steps: [
854
+ {
855
+ type: "move",
856
+ position: [
857
+ rootItemBoundingRect2.left + rootItemBoundingRect2.width / 2,
858
+ rootItemBoundingRect2.top + rootItemBoundingRect2.height / 2
859
+ ]
860
+ }
861
+ ]
862
+ });
863
+ await sendMouse({
864
+ steps: [
865
+ {
866
+ type: "move",
867
+ position: [
868
+ rootItemBoundingRect1.left + rootItemBoundingRect1.width / 2,
869
+ rootItemBoundingRect1.top + rootItemBoundingRect1.height / 2
870
+ ]
871
+ }
872
+ ]
873
+ });
874
+ await sendMouse({
875
+ steps: [
876
+ {
877
+ type: "move",
878
+ position: [
879
+ rootItemBoundingRect2.left + rootItemBoundingRect2.width / 2,
880
+ rootItemBoundingRect2.top + rootItemBoundingRect2.height / 2
881
+ ]
882
+ }
883
+ ]
884
+ });
885
+ const closed = oneEvent(rootItem2, "sp-closed");
886
+ await sendMouse({
887
+ steps: [
888
+ {
889
+ type: "move",
890
+ position: [
891
+ rootItemBoundingRect2.left + rootItemBoundingRect2.width / 2,
892
+ rootItemBoundingRect2.top + rootItemBoundingRect2.top + rootItemBoundingRect2.height / 2
893
+ ]
894
+ }
895
+ ]
896
+ });
897
+ activeOverlay = document.querySelector(
898
+ "active-overlay"
899
+ );
900
+ expect(activeOverlay).to.not.be.null;
901
+ await closed;
902
+ activeOverlay = document.querySelector(
903
+ "active-overlay"
904
+ );
905
+ expect(activeOverlay).to.be.null;
906
+ expect(rootItem1.open, "finally closed 1").to.be.false;
907
+ expect(rootItem2.open, "finally closed 2").to.be.false;
908
+ });
790
909
  });
791
910
  //# sourceMappingURL=submenu.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["submenu.test.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 '@spectrum-web-components/menu/sp-menu.js';\nimport '@spectrum-web-components/menu/sp-menu-item.js';\nimport { Menu, MenuItem } from '@spectrum-web-components/menu';\nimport {\n elementUpdated,\n expect,\n fixture,\n html,\n nextFrame,\n oneEvent,\n} from '@open-wc/testing';\nimport '@spectrum-web-components/theme/sp-theme.js';\nimport '@spectrum-web-components/theme/src/themes.js';\nimport { sendMouse } from '../../../test/plugins/browser.js';\nimport { spy } from 'sinon';\nimport { Theme } from '@spectrum-web-components/theme';\nimport { TemplateResult } from '@spectrum-web-components/base';\nimport { sendKeys } from '@web/test-runner-commands';\nimport { ActionMenu } from '@spectrum-web-components/action-menu';\nimport '@spectrum-web-components/action-menu/sp-action-menu.js';\nimport '@spectrum-web-components/menu/sp-menu-group.js';\nimport '@spectrum-web-components/icons-workflow/icons/sp-icon-show-menu.js';\n\nasync function styledFixture<T extends Element>(\n story: TemplateResult,\n dir: 'ltr' | 'rtl' | 'auto' = 'ltr'\n): Promise<T> {\n const test = await fixture<Theme>(html`\n <sp-theme dir=${dir} scale=\"medium\" color=\"dark\">${story}</sp-theme>\n `);\n document.documentElement.dir = dir;\n return test.children[0] as T;\n}\n\ndescribe('Submenu', () => {\n it('selects - pointer', async () => {\n const rootChanged = spy();\n const submenuChanged = spy();\n const el = await styledFixture<Menu>(\n html`\n <sp-menu\n @change=${(event: Event & { target: Menu }) => {\n rootChanged(event.target.value);\n }}\n >\n <sp-menu-item class=\"root\">\n Has submenu\n <sp-menu\n slot=\"submenu\"\n @change=${(event: Event & { target: Menu }) => {\n submenuChanged(event.target.value);\n }}\n >\n <sp-menu-item class=\"submenu-item-1\">\n One\n </sp-menu-item>\n <sp-menu-item class=\"submenu-item-2\">\n Two\n </sp-menu-item>\n <sp-menu-item class=\"submenu-item-3\">\n Three\n </sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n </sp-menu>\n `\n );\n\n await elementUpdated(el);\n const rootItem = el.querySelector('.root') as MenuItem;\n const rootItemBoundingRect = rootItem.getBoundingClientRect();\n expect(rootItem.open).to.be.false;\n\n const opened = oneEvent(rootItem, 'sp-opened');\n sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n rootItemBoundingRect.left +\n rootItemBoundingRect.width / 2,\n rootItemBoundingRect.top +\n rootItemBoundingRect.height / 2,\n ],\n },\n ],\n });\n await opened;\n\n expect(rootItem.open).to.be.true;\n\n const item2 = document.querySelector('.submenu-item-2') as MenuItem;\n const item2BoundingRect = item2.getBoundingClientRect();\n\n const closed = oneEvent(rootItem, 'sp-closed');\n sendMouse({\n steps: [\n {\n type: 'click',\n position: [\n item2BoundingRect.left + item2BoundingRect.width / 2,\n item2BoundingRect.top + item2BoundingRect.height / 2,\n ],\n },\n ],\n });\n await closed;\n await nextFrame();\n\n expect(rootChanged.calledWith('Has submenu'), 'root changed').to.be\n .true;\n expect(submenuChanged.calledWith('Two'), 'submenu changed').to.be.true;\n });\n it('closes deep tree on selection', async () => {\n const rootChanged = spy();\n const submenuChanged = spy();\n const subSubmenuChanged = spy();\n const el = await styledFixture<Menu>(\n html`\n <sp-menu\n @change=${(event: Event & { target: Menu }) => {\n rootChanged(event.target.value);\n }}\n >\n <sp-menu-item class=\"root\">\n Has submenu\n <sp-menu\n slot=\"submenu\"\n @change=${(event: Event & { target: Menu }) => {\n submenuChanged(event.target.value);\n }}\n >\n <sp-menu-item class=\"submenu-item-1\">\n One\n </sp-menu-item>\n <sp-menu-item class=\"submenu-item-2\">\n Two\n <sp-menu\n slot=\"submenu\"\n @change=${(\n event: Event & { target: Menu }\n ) => {\n subSubmenuChanged(event.target.value);\n }}\n >\n <sp-menu-item class=\"sub-submenu-item-1\">\n A\n </sp-menu-item>\n <sp-menu-item class=\"sub-submenu-item-2\">\n B\n </sp-menu-item>\n <sp-menu-item class=\"sub-submenu-item-3\">\n C\n </sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n <sp-menu-item class=\"submenu-item-3\">\n Three\n </sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n </sp-menu>\n `\n );\n\n await elementUpdated(el);\n const rootItem = el.querySelector('.root') as MenuItem;\n const rootItemBoundingRect = rootItem.getBoundingClientRect();\n expect(rootItem.open).to.be.false;\n\n const opened = oneEvent(rootItem, 'sp-opened');\n sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n rootItemBoundingRect.left +\n rootItemBoundingRect.width / 2,\n rootItemBoundingRect.top +\n rootItemBoundingRect.height / 2,\n ],\n },\n ],\n });\n await opened;\n\n expect(rootItem.open).to.be.true;\n\n const item2 = document.querySelector('.submenu-item-2') as MenuItem;\n const item2BoundingRect = item2.getBoundingClientRect();\n\n let closed = oneEvent(item2, 'sp-opened');\n sendMouse({\n steps: [\n {\n type: 'click',\n position: [\n item2BoundingRect.left + item2BoundingRect.width / 2,\n item2BoundingRect.top + item2BoundingRect.height / 2,\n ],\n },\n ],\n });\n await closed;\n await nextFrame();\n\n expect(item2.open).to.be.true;\n\n const itemC = document.querySelector('.sub-submenu-item-3') as MenuItem;\n const itemCBoundingRect = itemC.getBoundingClientRect();\n\n closed = oneEvent(rootItem, 'sp-closed');\n sendMouse({\n steps: [\n {\n type: 'click',\n position: [\n itemCBoundingRect.left + itemCBoundingRect.width / 2,\n itemCBoundingRect.top + itemCBoundingRect.height / 2,\n ],\n },\n ],\n });\n await closed;\n await nextFrame();\n\n expect(rootChanged.calledWith('Has submenu'), 'root changed').to.be\n .true;\n expect(submenuChanged.calledWith('Two'), 'submenu changed').to.be.true;\n expect(subSubmenuChanged.calledWith('C'), 'sub submenu changed').to.be\n .true;\n });\n (\n [\n {\n dir: 'ltr',\n openKey: 'ArrowRight',\n closeKey: 'ArrowLeft',\n },\n {\n dir: 'rtl',\n openKey: 'ArrowLeft',\n closeKey: 'ArrowRight',\n },\n ] as {\n dir: 'ltr' | 'rtl' | 'auto';\n openKey: 'ArrowRight' | 'ArrowLeft';\n closeKey: 'ArrowRight' | 'ArrowLeft';\n }[]\n ).map((testData) => {\n it(`selects - keyboard: ${testData.dir}`, async () => {\n const rootChanged = spy();\n const submenuChanged = spy();\n const el = await styledFixture<Menu>(\n html`\n <sp-menu\n @change=${(event: Event & { target: Menu }) => {\n rootChanged(event.target.value);\n }}\n >\n <sp-menu-item class=\"root\">\n Has submenu\n <sp-menu\n slot=\"submenu\"\n @change=${(event: Event & { target: Menu }) => {\n submenuChanged(event.target.value);\n }}\n >\n <sp-menu-item class=\"submenu-item-1\">\n One\n </sp-menu-item>\n <sp-menu-item class=\"submenu-item-2\">\n Two\n </sp-menu-item>\n <sp-menu-item class=\"submenu-item-3\">\n Three\n </sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n </sp-menu>\n `,\n testData.dir\n );\n\n await elementUpdated(el);\n const rootItem = el.querySelector('.root') as MenuItem;\n expect(rootItem.open).to.be.false;\n el.focus();\n await elementUpdated(el);\n\n let opened = oneEvent(rootItem, 'sp-opened');\n sendKeys({\n press: testData.openKey,\n });\n await opened;\n\n expect(rootItem.open).to.be.true;\n\n let closed = oneEvent(rootItem, 'sp-closed');\n sendKeys({\n press: testData.closeKey,\n });\n await closed;\n\n expect(rootItem.open).to.be.false;\n\n opened = oneEvent(rootItem, 'sp-opened');\n sendKeys({\n press: testData.openKey,\n });\n await opened;\n\n expect(rootItem.open).to.be.true;\n\n await sendKeys({\n press: 'ArrowDown',\n });\n\n closed = oneEvent(rootItem, 'sp-closed');\n sendKeys({\n press: 'Enter',\n });\n await closed;\n\n expect(rootChanged.calledWith('Has submenu'), 'root changed').to.be\n .true;\n expect(submenuChanged.calledWith('Two'), 'submenu changed').to.be\n .true;\n });\n });\n it('closes on `pointerleave`', async () => {\n const el = await styledFixture<Menu>(\n html`\n <sp-menu>\n <sp-menu-item class=\"root\">\n Has submenu\n <sp-menu slot=\"submenu\">\n <sp-menu-item class=\"submenu-item-1\">\n One\n </sp-menu-item>\n <sp-menu-item class=\"submenu-item-2\">\n Two\n </sp-menu-item>\n <sp-menu-item class=\"submenu-item-3\">\n Three\n </sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n </sp-menu>\n `\n );\n\n await elementUpdated(el);\n const rootItem = el.querySelector('.root') as MenuItem;\n const rootItemBoundingRect = rootItem.getBoundingClientRect();\n expect(rootItem.open).to.be.false;\n\n const opened = oneEvent(rootItem, 'sp-opened');\n sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n rootItemBoundingRect.left +\n rootItemBoundingRect.width / 2,\n rootItemBoundingRect.top +\n rootItemBoundingRect.height / 2,\n ],\n },\n ],\n });\n await opened;\n\n expect(rootItem.open).to.be.true;\n\n const closed = oneEvent(rootItem, 'sp-closed');\n sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n rootItemBoundingRect.left +\n rootItemBoundingRect.width / 2,\n rootItemBoundingRect.top +\n rootItemBoundingRect.height * 2,\n ],\n },\n ],\n });\n await closed;\n\n expect(rootItem.open).to.be.false;\n });\n it('stays open when mousing off menu item and back again', async () => {\n const el = await styledFixture<Menu>(\n html`\n <sp-menu>\n <sp-menu-item class=\"root\">\n Has submenu\n <sp-menu slot=\"submenu\">\n <sp-menu-item class=\"submenu-item-1\">\n One\n </sp-menu-item>\n <sp-menu-item class=\"submenu-item-2\">\n Two\n </sp-menu-item>\n <sp-menu-item class=\"submenu-item-3\">\n Three\n </sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n </sp-menu>\n `\n );\n\n await elementUpdated(el);\n const rootItem = el.querySelector('.root') as MenuItem;\n const rootItemBoundingRect = rootItem.getBoundingClientRect();\n expect(rootItem.open).to.be.false;\n\n const opened = oneEvent(rootItem, 'sp-opened');\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n rootItemBoundingRect.left +\n rootItemBoundingRect.width / 2,\n rootItemBoundingRect.top +\n rootItemBoundingRect.height / 2,\n ],\n },\n ],\n });\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n rootItemBoundingRect.left +\n rootItemBoundingRect.width / 2,\n rootItemBoundingRect.top +\n rootItemBoundingRect.height * 2,\n ],\n },\n ],\n });\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n rootItemBoundingRect.left +\n rootItemBoundingRect.width / 2,\n rootItemBoundingRect.top +\n rootItemBoundingRect.height / 2,\n ],\n },\n ],\n });\n await opened;\n\n expect(rootItem.open).to.be.true;\n\n const closed = oneEvent(rootItem, 'sp-closed');\n sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n rootItemBoundingRect.left +\n rootItemBoundingRect.width / 2,\n rootItemBoundingRect.top +\n rootItemBoundingRect.height * 2,\n ],\n },\n ],\n });\n await closed;\n });\n it('stays open when mousing between menu item and submenu', async () => {\n const el = await styledFixture<Menu>(\n html`\n <sp-menu>\n <sp-menu-item class=\"root\">\n Has submenu\n <sp-menu slot=\"submenu\">\n <sp-menu-item class=\"submenu-item-1\">\n One\n </sp-menu-item>\n <sp-menu-item class=\"submenu-item-2\">\n Two\n </sp-menu-item>\n <sp-menu-item class=\"submenu-item-3\">\n Three\n </sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n </sp-menu>\n `\n );\n\n await elementUpdated(el);\n const rootItem = el.querySelector('.root') as MenuItem;\n const rootItemBoundingRect = rootItem.getBoundingClientRect();\n expect(rootItem.open).to.be.false;\n\n const opened = oneEvent(rootItem, 'sp-opened');\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n rootItemBoundingRect.left +\n rootItemBoundingRect.width / 2,\n rootItemBoundingRect.top +\n rootItemBoundingRect.height / 2,\n ],\n },\n ],\n });\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n rootItemBoundingRect.left +\n rootItemBoundingRect.width / 2,\n rootItemBoundingRect.top +\n rootItemBoundingRect.height * 2,\n ],\n },\n ],\n });\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n rootItemBoundingRect.left +\n rootItemBoundingRect.width * 1.5,\n rootItemBoundingRect.top +\n rootItemBoundingRect.height / 2,\n ],\n },\n ],\n });\n await opened;\n\n expect(rootItem.open).to.be.true;\n });\n it('not opens if disabled', async () => {\n const el = await styledFixture<Menu>(\n html`\n <sp-menu>\n <sp-menu-item disabled class=\"root\">\n Has submenu\n <sp-menu slot=\"submenu\">\n <sp-menu-item class=\"submenu-item-1\">\n One\n </sp-menu-item>\n <sp-menu-item class=\"submenu-item-2\">\n Two\n </sp-menu-item>\n <sp-menu-item class=\"submenu-item-3\">\n Three\n </sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n </sp-menu>\n `\n );\n\n await elementUpdated(el);\n const rootItem = el.querySelector('.root') as MenuItem;\n const rootItemBoundingRect = rootItem.getBoundingClientRect();\n expect(rootItem.open).to.be.false;\n\n sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n rootItemBoundingRect.left +\n rootItemBoundingRect.width / 2,\n rootItemBoundingRect.top +\n rootItemBoundingRect.height / 2,\n ],\n },\n ],\n });\n // wait 200ms for open\n await new Promise((r) => setTimeout(r, 200));\n\n expect(rootItem.open).to.be.false;\n });\n it('closes all decendent submenus when closing a ancestor menu', async () => {\n const el = await styledFixture<ActionMenu>(html`\n <sp-action-menu>\n <sp-icon-show-menu slot=\"icon\"></sp-icon-show-menu>\n <sp-menu-group role=\"none\">\n <span slot=\"header\">New York</span>\n <sp-menu-item>Bronx</sp-menu-item>\n <sp-menu-item id=\"submenu-item-1\">\n Brooklyn\n <sp-menu slot=\"submenu\">\n <sp-menu-item id=\"submenu-item-2\">\n Ft. Greene\n <sp-menu slot=\"submenu\">\n <sp-menu-item>S. Oxford St</sp-menu-item>\n <sp-menu-item>S. Portland Ave</sp-menu-item>\n <sp-menu-item>S. Elliot Pl</sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n <sp-menu-item disabled>Park Slope</sp-menu-item>\n <sp-menu-item>Williamsburg</sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n <sp-menu-item id=\"submenu-item-3\">\n Manhattan\n <sp-menu slot=\"submenu\">\n <sp-menu-item disabled>SoHo</sp-menu-item>\n <sp-menu-item>\n Union Square\n <sp-menu slot=\"submenu\">\n <sp-menu-item>14th St</sp-menu-item>\n <sp-menu-item>Broadway</sp-menu-item>\n <sp-menu-item>Park Ave</sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n <sp-menu-item>Upper East Side</sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n </sp-menu-group>\n </sp-action-menu>\n `);\n\n const rootMenu1 = el.querySelector('#submenu-item-1') as Menu;\n const rootMenu2 = el.querySelector('#submenu-item-3') as Menu;\n const childMenu2 = el.querySelector('#submenu-item-2') as Menu;\n\n expect(el.open).to.be.false;\n let opened = oneEvent(el, 'sp-opened');\n el.click();\n await opened;\n expect(el.open).to.be.true;\n\n let activeOverlays = document.querySelectorAll('active-overlay');\n expect(activeOverlays.length).to.equal(1);\n opened = oneEvent(rootMenu1, 'sp-opened');\n rootMenu1.dispatchEvent(\n new PointerEvent('pointerenter', { bubbles: true })\n );\n await opened;\n activeOverlays = document.querySelectorAll('active-overlay');\n expect(activeOverlays.length).to.equal(2);\n\n opened = oneEvent(childMenu2, 'sp-opened');\n childMenu2.dispatchEvent(\n new PointerEvent('pointerenter', { bubbles: true })\n );\n await opened;\n activeOverlays = document.querySelectorAll('active-overlay');\n expect(activeOverlays.length).to.equal(3);\n\n const overlaysManaged = Promise.all([\n oneEvent(childMenu2, 'sp-closed'),\n oneEvent(rootMenu1, 'sp-closed'),\n oneEvent(rootMenu2, 'sp-opened'),\n ]);\n rootMenu2.dispatchEvent(\n new PointerEvent('pointerenter', { bubbles: true })\n );\n await overlaysManaged;\n activeOverlays = document.querySelectorAll('active-overlay');\n expect(activeOverlays.length).to.equal(2);\n });\n\n it('closes back to the first overlay without a `root` when clicking away', async () => {\n const el = await styledFixture<ActionMenu>(html`\n <sp-action-menu>\n <sp-icon-show-menu slot=\"icon\"></sp-icon-show-menu>\n <sp-menu-group role=\"none\">\n <span slot=\"header\">New York</span>\n <sp-menu-item>Bronx</sp-menu-item>\n <sp-menu-item id=\"submenu-item-1\">\n Brooklyn\n <sp-menu slot=\"submenu\">\n <sp-menu-item id=\"submenu-item-2\">\n Ft. Greene\n <sp-menu slot=\"submenu\">\n <sp-menu-item>S. Oxford St</sp-menu-item>\n <sp-menu-item>S. Portland Ave</sp-menu-item>\n <sp-menu-item>S. Elliot Pl</sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n <sp-menu-item disabled>Park Slope</sp-menu-item>\n <sp-menu-item>Williamsburg</sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n <sp-menu-item id=\"submenu-item-3\">\n Manhattan\n <sp-menu slot=\"submenu\">\n <sp-menu-item disabled>SoHo</sp-menu-item>\n <sp-menu-item>\n Union Square\n <sp-menu slot=\"submenu\">\n <sp-menu-item>14th St</sp-menu-item>\n <sp-menu-item>Broadway</sp-menu-item>\n <sp-menu-item>Park Ave</sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n <sp-menu-item>Upper East Side</sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n </sp-menu-group>\n </sp-action-menu>\n `);\n\n const rootMenu1 = el.querySelector('#submenu-item-1') as Menu;\n const childMenu2 = el.querySelector('#submenu-item-2') as Menu;\n\n expect(el.open).to.be.false;\n let opened = oneEvent(el, 'sp-opened');\n el.click();\n await opened;\n expect(el.open).to.be.true;\n\n let activeOverlays = document.querySelectorAll('active-overlay');\n expect(activeOverlays.length).to.equal(1);\n opened = oneEvent(rootMenu1, 'sp-opened');\n rootMenu1.dispatchEvent(\n new PointerEvent('pointerenter', { bubbles: true })\n );\n await opened;\n activeOverlays = document.querySelectorAll('active-overlay');\n expect(activeOverlays.length).to.equal(2);\n\n opened = oneEvent(childMenu2, 'sp-opened');\n childMenu2.dispatchEvent(\n new PointerEvent('pointerenter', { bubbles: true })\n );\n await opened;\n activeOverlays = document.querySelectorAll('active-overlay');\n expect(activeOverlays.length).to.equal(3);\n\n const closed = Promise.all([\n oneEvent(childMenu2, 'sp-closed'),\n oneEvent(rootMenu1, 'sp-closed'),\n oneEvent(el, 'sp-closed'),\n ]);\n document.body.click();\n await closed;\n activeOverlays = document.querySelectorAll('active-overlay');\n expect(activeOverlays.length).to.equal(0);\n });\n\n it('closes decendent menus when Menu Item in ancestor without a submenu is pointerentered', async () => {\n const el = await styledFixture<ActionMenu>(html`\n <sp-action-menu>\n <sp-icon-show-menu slot=\"icon\"></sp-icon-show-menu>\n <sp-menu-group role=\"none\">\n <span slot=\"header\">New York</span>\n <sp-menu-item id=\"no-submenu\">Bronx</sp-menu-item>\n <sp-menu-item id=\"submenu-item-1\">\n Brooklyn\n <sp-menu slot=\"submenu\">\n <sp-menu-item id=\"submenu-item-2\">\n Ft. Greene\n </sp-menu-item>\n <sp-menu-item disabled>Park Slope</sp-menu-item>\n <sp-menu-item id=\"ancestor-item\">\n Williamsburg\n </sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n <sp-menu-item id=\"submenu-item-3\">\n Manhattan\n <sp-menu slot=\"submenu\">\n <sp-menu-item disabled>SoHo</sp-menu-item>\n <sp-menu-item>Union Square</sp-menu-item>\n <sp-menu-item>Upper East Side</sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n </sp-menu-group>\n </sp-action-menu>\n `);\n\n const rootMenu = el.querySelector('#submenu-item-1') as MenuItem;\n const noSubmenu = el.querySelector('#no-submenu') as MenuItem;\n\n expect(el.open).to.be.false;\n let opened = oneEvent(el, 'sp-opened');\n el.click();\n await opened;\n expect(el.open).to.be.true;\n\n let activeOverlays = document.querySelectorAll('active-overlay');\n expect(activeOverlays.length).to.equal(1);\n opened = oneEvent(rootMenu, 'sp-opened');\n rootMenu.dispatchEvent(\n new PointerEvent('pointerenter', { bubbles: true })\n );\n await opened;\n activeOverlays = document.querySelectorAll('active-overlay');\n expect(activeOverlays.length).to.equal(2);\n\n const closed = oneEvent(rootMenu, 'sp-closed');\n noSubmenu.dispatchEvent(\n new PointerEvent('pointerenter', { bubbles: true })\n );\n await closed;\n activeOverlays = document.querySelectorAll('active-overlay');\n expect(activeOverlays.length).to.equal(1);\n });\n\n it('closes decendent menus when Menu Item in ancestor is clicked', async () => {\n const el = await styledFixture<ActionMenu>(html`\n <sp-action-menu>\n <sp-icon-show-menu slot=\"icon\"></sp-icon-show-menu>\n <sp-menu-group role=\"none\">\n <span slot=\"header\">New York</span>\n <sp-menu-item>Bronx</sp-menu-item>\n <sp-menu-item id=\"submenu-item-1\">\n Brooklyn\n <sp-menu slot=\"submenu\">\n <sp-menu-item id=\"submenu-item-2\">\n Ft. Greene\n <sp-menu slot=\"submenu\">\n <sp-menu-item>S. Oxford St</sp-menu-item>\n <sp-menu-item>S. Portland Ave</sp-menu-item>\n <sp-menu-item>S. Elliot Pl</sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n <sp-menu-item disabled>Park Slope</sp-menu-item>\n <sp-menu-item id=\"ancestor-item\">\n Williamsburg\n </sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n <sp-menu-item id=\"submenu-item-3\">\n Manhattan\n <sp-menu slot=\"submenu\">\n <sp-menu-item disabled>SoHo</sp-menu-item>\n <sp-menu-item>\n Union Square\n <sp-menu slot=\"submenu\">\n <sp-menu-item>14th St</sp-menu-item>\n <sp-menu-item>Broadway</sp-menu-item>\n <sp-menu-item>Park Ave</sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n <sp-menu-item>Upper East Side</sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n </sp-menu-group>\n </sp-action-menu>\n `);\n\n const rootMenu1 = el.querySelector('#submenu-item-1') as MenuItem;\n const childMenu2 = el.querySelector('#submenu-item-2') as MenuItem;\n const ancestorItem = el.querySelector('#ancestor-item') as MenuItem;\n\n expect(el.open).to.be.false;\n let opened = oneEvent(el, 'sp-opened');\n el.click();\n await opened;\n expect(el.open).to.be.true;\n\n let activeOverlays = document.querySelectorAll('active-overlay');\n expect(activeOverlays.length).to.equal(1);\n opened = oneEvent(rootMenu1, 'sp-opened');\n rootMenu1.dispatchEvent(\n new PointerEvent('pointerenter', { bubbles: true })\n );\n await opened;\n activeOverlays = document.querySelectorAll('active-overlay');\n expect(activeOverlays.length).to.equal(2);\n\n opened = oneEvent(childMenu2, 'sp-opened');\n childMenu2.dispatchEvent(\n new PointerEvent('pointerenter', { bubbles: true })\n );\n await opened;\n activeOverlays = document.querySelectorAll('active-overlay');\n expect(activeOverlays.length).to.equal(3);\n\n const closed = Promise.all([\n oneEvent(childMenu2, 'sp-closed'),\n oneEvent(rootMenu1, 'sp-closed'),\n oneEvent(el, 'sp-closed'),\n ]);\n ancestorItem.click();\n await closed;\n activeOverlays = document.querySelectorAll('active-overlay');\n expect(activeOverlays.length).to.equal(0);\n });\n});\n"],
5
- "mappings": "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",
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 '@spectrum-web-components/menu/sp-menu.js';\nimport '@spectrum-web-components/menu/sp-menu-item.js';\nimport { Menu, MenuItem } from '@spectrum-web-components/menu';\nimport {\n elementUpdated,\n expect,\n fixture,\n html,\n nextFrame,\n oneEvent,\n} from '@open-wc/testing';\nimport '@spectrum-web-components/theme/sp-theme.js';\nimport '@spectrum-web-components/theme/src/themes.js';\nimport { sendMouse } from '../../../test/plugins/browser.js';\nimport { spy } from 'sinon';\nimport { Theme } from '@spectrum-web-components/theme';\nimport { TemplateResult } from '@spectrum-web-components/base';\nimport { sendKeys } from '@web/test-runner-commands';\nimport { ActionMenu } from '@spectrum-web-components/action-menu';\nimport '@spectrum-web-components/action-menu/sp-action-menu.js';\nimport '@spectrum-web-components/menu/sp-menu-group.js';\nimport '@spectrum-web-components/icons-workflow/icons/sp-icon-show-menu.js';\nimport { ActiveOverlay } from '@spectrum-web-components/overlay';\n\nasync function styledFixture<T extends Element>(\n story: TemplateResult,\n dir: 'ltr' | 'rtl' | 'auto' = 'ltr'\n): Promise<T> {\n const test = await fixture<Theme>(html`\n <sp-theme dir=${dir} scale=\"medium\" color=\"dark\">${story}</sp-theme>\n `);\n document.documentElement.dir = dir;\n return test.children[0] as T;\n}\n\ndescribe('Submenu', () => {\n it('selects - pointer', async () => {\n const rootChanged = spy();\n const submenuChanged = spy();\n const el = await styledFixture<Menu>(\n html`\n <sp-menu\n @change=${(event: Event & { target: Menu }) => {\n rootChanged(event.target.value);\n }}\n >\n <sp-menu-item class=\"root\">\n Has submenu\n <sp-menu\n slot=\"submenu\"\n @change=${(event: Event & { target: Menu }) => {\n submenuChanged(event.target.value);\n }}\n >\n <sp-menu-item class=\"submenu-item-1\">\n One\n </sp-menu-item>\n <sp-menu-item class=\"submenu-item-2\">\n Two\n </sp-menu-item>\n <sp-menu-item class=\"submenu-item-3\">\n Three\n </sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n </sp-menu>\n `\n );\n\n await elementUpdated(el);\n const rootItem = el.querySelector('.root') as MenuItem;\n const rootItemBoundingRect = rootItem.getBoundingClientRect();\n expect(rootItem.open).to.be.false;\n\n const opened = oneEvent(rootItem, 'sp-opened');\n sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n rootItemBoundingRect.left +\n rootItemBoundingRect.width / 2,\n rootItemBoundingRect.top +\n rootItemBoundingRect.height / 2,\n ],\n },\n ],\n });\n await opened;\n\n expect(rootItem.open).to.be.true;\n\n const item2 = document.querySelector('.submenu-item-2') as MenuItem;\n const item2BoundingRect = item2.getBoundingClientRect();\n\n const closed = oneEvent(rootItem, 'sp-closed');\n sendMouse({\n steps: [\n {\n type: 'click',\n position: [\n item2BoundingRect.left + item2BoundingRect.width / 2,\n item2BoundingRect.top + item2BoundingRect.height / 2,\n ],\n },\n ],\n });\n await closed;\n await nextFrame();\n\n expect(rootChanged.calledWith('Has submenu'), 'root changed').to.be\n .true;\n expect(submenuChanged.calledWith('Two'), 'submenu changed').to.be.true;\n });\n it('closes deep tree on selection', async () => {\n const rootChanged = spy();\n const submenuChanged = spy();\n const subSubmenuChanged = spy();\n const el = await styledFixture<Menu>(\n html`\n <sp-menu\n @change=${(event: Event & { target: Menu }) => {\n rootChanged(event.target.value);\n }}\n >\n <sp-menu-item class=\"root\">\n Has submenu\n <sp-menu\n slot=\"submenu\"\n @change=${(event: Event & { target: Menu }) => {\n submenuChanged(event.target.value);\n }}\n >\n <sp-menu-item class=\"submenu-item-1\">\n One\n </sp-menu-item>\n <sp-menu-item class=\"submenu-item-2\">\n Two\n <sp-menu\n slot=\"submenu\"\n @change=${(\n event: Event & { target: Menu }\n ) => {\n subSubmenuChanged(event.target.value);\n }}\n >\n <sp-menu-item class=\"sub-submenu-item-1\">\n A\n </sp-menu-item>\n <sp-menu-item class=\"sub-submenu-item-2\">\n B\n </sp-menu-item>\n <sp-menu-item class=\"sub-submenu-item-3\">\n C\n </sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n <sp-menu-item class=\"submenu-item-3\">\n Three\n </sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n </sp-menu>\n `\n );\n\n await elementUpdated(el);\n const rootItem = el.querySelector('.root') as MenuItem;\n const rootItemBoundingRect = rootItem.getBoundingClientRect();\n expect(rootItem.open).to.be.false;\n\n const opened = oneEvent(rootItem, 'sp-opened');\n sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n rootItemBoundingRect.left +\n rootItemBoundingRect.width / 2,\n rootItemBoundingRect.top +\n rootItemBoundingRect.height / 2,\n ],\n },\n ],\n });\n await opened;\n\n expect(rootItem.open).to.be.true;\n\n const item2 = document.querySelector('.submenu-item-2') as MenuItem;\n const item2BoundingRect = item2.getBoundingClientRect();\n\n let closed = oneEvent(item2, 'sp-opened');\n sendMouse({\n steps: [\n {\n type: 'click',\n position: [\n item2BoundingRect.left + item2BoundingRect.width / 2,\n item2BoundingRect.top + item2BoundingRect.height / 2,\n ],\n },\n ],\n });\n await closed;\n await nextFrame();\n\n expect(item2.open).to.be.true;\n\n const itemC = document.querySelector('.sub-submenu-item-3') as MenuItem;\n const itemCBoundingRect = itemC.getBoundingClientRect();\n\n closed = oneEvent(rootItem, 'sp-closed');\n sendMouse({\n steps: [\n {\n type: 'click',\n position: [\n itemCBoundingRect.left + itemCBoundingRect.width / 2,\n itemCBoundingRect.top + itemCBoundingRect.height / 2,\n ],\n },\n ],\n });\n await closed;\n await nextFrame();\n\n expect(rootChanged.calledWith('Has submenu'), 'root changed').to.be\n .true;\n expect(submenuChanged.calledWith('Two'), 'submenu changed').to.be.true;\n expect(subSubmenuChanged.calledWith('C'), 'sub submenu changed').to.be\n .true;\n });\n (\n [\n {\n dir: 'ltr',\n openKey: 'ArrowRight',\n closeKey: 'ArrowLeft',\n },\n {\n dir: 'rtl',\n openKey: 'ArrowLeft',\n closeKey: 'ArrowRight',\n },\n ] as {\n dir: 'ltr' | 'rtl' | 'auto';\n openKey: 'ArrowRight' | 'ArrowLeft';\n closeKey: 'ArrowRight' | 'ArrowLeft';\n }[]\n ).map((testData) => {\n it(`selects - keyboard: ${testData.dir}`, async () => {\n const rootChanged = spy();\n const submenuChanged = spy();\n const el = await styledFixture<Menu>(\n html`\n <sp-menu\n @change=${(event: Event & { target: Menu }) => {\n rootChanged(event.target.value);\n }}\n >\n <sp-menu-item class=\"root\">\n Has submenu\n <sp-menu\n slot=\"submenu\"\n @change=${(event: Event & { target: Menu }) => {\n submenuChanged(event.target.value);\n }}\n >\n <sp-menu-item class=\"submenu-item-1\">\n One\n </sp-menu-item>\n <sp-menu-item class=\"submenu-item-2\">\n Two\n </sp-menu-item>\n <sp-menu-item class=\"submenu-item-3\">\n Three\n </sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n </sp-menu>\n `,\n testData.dir\n );\n\n await elementUpdated(el);\n const rootItem = el.querySelector('.root') as MenuItem;\n expect(rootItem.open).to.be.false;\n el.focus();\n await elementUpdated(el);\n\n let opened = oneEvent(rootItem, 'sp-opened');\n sendKeys({\n press: testData.openKey,\n });\n await opened;\n\n expect(rootItem.open).to.be.true;\n\n let closed = oneEvent(rootItem, 'sp-closed');\n sendKeys({\n press: testData.closeKey,\n });\n await closed;\n\n expect(rootItem.open).to.be.false;\n\n opened = oneEvent(rootItem, 'sp-opened');\n sendKeys({\n press: testData.openKey,\n });\n await opened;\n\n expect(rootItem.open).to.be.true;\n\n await sendKeys({\n press: 'ArrowDown',\n });\n\n closed = oneEvent(rootItem, 'sp-closed');\n sendKeys({\n press: 'Enter',\n });\n await closed;\n\n expect(rootChanged.calledWith('Has submenu'), 'root changed').to.be\n .true;\n expect(submenuChanged.calledWith('Two'), 'submenu changed').to.be\n .true;\n });\n });\n it('closes on `pointerleave`', async () => {\n const el = await styledFixture<Menu>(\n html`\n <sp-menu>\n <sp-menu-item class=\"root\">\n Has submenu\n <sp-menu slot=\"submenu\">\n <sp-menu-item class=\"submenu-item-1\">\n One\n </sp-menu-item>\n <sp-menu-item class=\"submenu-item-2\">\n Two\n </sp-menu-item>\n <sp-menu-item class=\"submenu-item-3\">\n Three\n </sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n </sp-menu>\n `\n );\n\n await elementUpdated(el);\n const rootItem = el.querySelector('.root') as MenuItem;\n const rootItemBoundingRect = rootItem.getBoundingClientRect();\n expect(rootItem.open).to.be.false;\n\n const opened = oneEvent(rootItem, 'sp-opened');\n sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n rootItemBoundingRect.left +\n rootItemBoundingRect.width / 2,\n rootItemBoundingRect.top +\n rootItemBoundingRect.height / 2,\n ],\n },\n ],\n });\n await opened;\n\n expect(rootItem.open).to.be.true;\n\n const closed = oneEvent(rootItem, 'sp-closed');\n sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n rootItemBoundingRect.left +\n rootItemBoundingRect.width / 2,\n rootItemBoundingRect.top +\n rootItemBoundingRect.height * 2,\n ],\n },\n ],\n });\n await closed;\n\n expect(rootItem.open).to.be.false;\n });\n it('stays open when mousing off menu item and back again', async () => {\n const el = await styledFixture<Menu>(\n html`\n <sp-menu>\n <sp-menu-item class=\"root\">\n Has submenu\n <sp-menu slot=\"submenu\">\n <sp-menu-item class=\"submenu-item-1\">\n One\n </sp-menu-item>\n <sp-menu-item class=\"submenu-item-2\">\n Two\n </sp-menu-item>\n <sp-menu-item class=\"submenu-item-3\">\n Three\n </sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n </sp-menu>\n `\n );\n\n await elementUpdated(el);\n const rootItem = el.querySelector('.root') as MenuItem;\n const rootItemBoundingRect = rootItem.getBoundingClientRect();\n expect(rootItem.open).to.be.false;\n\n const opened = oneEvent(rootItem, 'sp-opened');\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n rootItemBoundingRect.left +\n rootItemBoundingRect.width / 2,\n rootItemBoundingRect.top +\n rootItemBoundingRect.height / 2,\n ],\n },\n ],\n });\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n rootItemBoundingRect.left +\n rootItemBoundingRect.width / 2,\n rootItemBoundingRect.top +\n rootItemBoundingRect.height * 2,\n ],\n },\n ],\n });\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n rootItemBoundingRect.left +\n rootItemBoundingRect.width / 2,\n rootItemBoundingRect.top +\n rootItemBoundingRect.height / 2,\n ],\n },\n ],\n });\n await opened;\n\n expect(rootItem.open).to.be.true;\n\n const closed = oneEvent(rootItem, 'sp-closed');\n sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n rootItemBoundingRect.left +\n rootItemBoundingRect.width / 2,\n rootItemBoundingRect.top +\n rootItemBoundingRect.height * 2,\n ],\n },\n ],\n });\n await closed;\n });\n it('stays open when mousing between menu item and submenu', async () => {\n const el = await styledFixture<Menu>(\n html`\n <sp-menu>\n <sp-menu-item class=\"root\">\n Has submenu\n <sp-menu slot=\"submenu\">\n <sp-menu-item class=\"submenu-item-1\">\n One\n </sp-menu-item>\n <sp-menu-item class=\"submenu-item-2\">\n Two\n </sp-menu-item>\n <sp-menu-item class=\"submenu-item-3\">\n Three\n </sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n </sp-menu>\n `\n );\n\n await elementUpdated(el);\n const rootItem = el.querySelector('.root') as MenuItem;\n const rootItemBoundingRect = rootItem.getBoundingClientRect();\n expect(rootItem.open).to.be.false;\n\n const opened = oneEvent(rootItem, 'sp-opened');\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n rootItemBoundingRect.left +\n rootItemBoundingRect.width / 2,\n rootItemBoundingRect.top +\n rootItemBoundingRect.height / 2,\n ],\n },\n ],\n });\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n rootItemBoundingRect.left +\n rootItemBoundingRect.width / 2,\n rootItemBoundingRect.top +\n rootItemBoundingRect.height * 2,\n ],\n },\n ],\n });\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n rootItemBoundingRect.left +\n rootItemBoundingRect.width * 1.5,\n rootItemBoundingRect.top +\n rootItemBoundingRect.height / 2,\n ],\n },\n ],\n });\n await opened;\n\n expect(rootItem.open).to.be.true;\n });\n it('not opens if disabled', async () => {\n const el = await styledFixture<Menu>(\n html`\n <sp-menu>\n <sp-menu-item disabled class=\"root\">\n Has submenu\n <sp-menu slot=\"submenu\">\n <sp-menu-item class=\"submenu-item-1\">\n One\n </sp-menu-item>\n <sp-menu-item class=\"submenu-item-2\">\n Two\n </sp-menu-item>\n <sp-menu-item class=\"submenu-item-3\">\n Three\n </sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n </sp-menu>\n `\n );\n\n await elementUpdated(el);\n const rootItem = el.querySelector('.root') as MenuItem;\n const rootItemBoundingRect = rootItem.getBoundingClientRect();\n expect(rootItem.open).to.be.false;\n\n sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n rootItemBoundingRect.left +\n rootItemBoundingRect.width / 2,\n rootItemBoundingRect.top +\n rootItemBoundingRect.height / 2,\n ],\n },\n ],\n });\n // wait 200ms for open\n await new Promise((r) => setTimeout(r, 200));\n\n expect(rootItem.open).to.be.false;\n });\n it('closes all decendent submenus when closing a ancestor menu', async () => {\n const el = await styledFixture<ActionMenu>(html`\n <sp-action-menu>\n <sp-icon-show-menu slot=\"icon\"></sp-icon-show-menu>\n <sp-menu-group role=\"none\">\n <span slot=\"header\">New York</span>\n <sp-menu-item>Bronx</sp-menu-item>\n <sp-menu-item id=\"submenu-item-1\">\n Brooklyn\n <sp-menu slot=\"submenu\">\n <sp-menu-item id=\"submenu-item-2\">\n Ft. Greene\n <sp-menu slot=\"submenu\">\n <sp-menu-item>S. Oxford St</sp-menu-item>\n <sp-menu-item>S. Portland Ave</sp-menu-item>\n <sp-menu-item>S. Elliot Pl</sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n <sp-menu-item disabled>Park Slope</sp-menu-item>\n <sp-menu-item>Williamsburg</sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n <sp-menu-item id=\"submenu-item-3\">\n Manhattan\n <sp-menu slot=\"submenu\">\n <sp-menu-item disabled>SoHo</sp-menu-item>\n <sp-menu-item>\n Union Square\n <sp-menu slot=\"submenu\">\n <sp-menu-item>14th St</sp-menu-item>\n <sp-menu-item>Broadway</sp-menu-item>\n <sp-menu-item>Park Ave</sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n <sp-menu-item>Upper East Side</sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n </sp-menu-group>\n </sp-action-menu>\n `);\n\n const rootMenu1 = el.querySelector('#submenu-item-1') as Menu;\n const rootMenu2 = el.querySelector('#submenu-item-3') as Menu;\n const childMenu2 = el.querySelector('#submenu-item-2') as Menu;\n\n expect(el.open).to.be.false;\n let opened = oneEvent(el, 'sp-opened');\n el.click();\n await opened;\n expect(el.open).to.be.true;\n\n let activeOverlays = document.querySelectorAll('active-overlay');\n expect(activeOverlays.length).to.equal(1);\n opened = oneEvent(rootMenu1, 'sp-opened');\n rootMenu1.dispatchEvent(\n new PointerEvent('pointerenter', { bubbles: true })\n );\n await opened;\n activeOverlays = document.querySelectorAll('active-overlay');\n expect(activeOverlays.length).to.equal(2);\n\n opened = oneEvent(childMenu2, 'sp-opened');\n childMenu2.dispatchEvent(\n new PointerEvent('pointerenter', { bubbles: true })\n );\n await opened;\n activeOverlays = document.querySelectorAll('active-overlay');\n expect(activeOverlays.length).to.equal(3);\n\n const overlaysManaged = Promise.all([\n oneEvent(childMenu2, 'sp-closed'),\n oneEvent(rootMenu1, 'sp-closed'),\n oneEvent(rootMenu2, 'sp-opened'),\n ]);\n rootMenu2.dispatchEvent(\n new PointerEvent('pointerenter', { bubbles: true })\n );\n await overlaysManaged;\n activeOverlays = document.querySelectorAll('active-overlay');\n expect(activeOverlays.length).to.equal(2);\n });\n\n it('closes back to the first overlay without a `root` when clicking away', async () => {\n const el = await styledFixture<ActionMenu>(html`\n <sp-action-menu>\n <sp-icon-show-menu slot=\"icon\"></sp-icon-show-menu>\n <sp-menu-group role=\"none\">\n <span slot=\"header\">New York</span>\n <sp-menu-item>Bronx</sp-menu-item>\n <sp-menu-item id=\"submenu-item-1\">\n Brooklyn\n <sp-menu slot=\"submenu\">\n <sp-menu-item id=\"submenu-item-2\">\n Ft. Greene\n <sp-menu slot=\"submenu\">\n <sp-menu-item>S. Oxford St</sp-menu-item>\n <sp-menu-item>S. Portland Ave</sp-menu-item>\n <sp-menu-item>S. Elliot Pl</sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n <sp-menu-item disabled>Park Slope</sp-menu-item>\n <sp-menu-item>Williamsburg</sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n <sp-menu-item id=\"submenu-item-3\">\n Manhattan\n <sp-menu slot=\"submenu\">\n <sp-menu-item disabled>SoHo</sp-menu-item>\n <sp-menu-item>\n Union Square\n <sp-menu slot=\"submenu\">\n <sp-menu-item>14th St</sp-menu-item>\n <sp-menu-item>Broadway</sp-menu-item>\n <sp-menu-item>Park Ave</sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n <sp-menu-item>Upper East Side</sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n </sp-menu-group>\n </sp-action-menu>\n `);\n\n const rootMenu1 = el.querySelector('#submenu-item-1') as Menu;\n const childMenu2 = el.querySelector('#submenu-item-2') as Menu;\n\n expect(el.open).to.be.false;\n let opened = oneEvent(el, 'sp-opened');\n el.click();\n await opened;\n expect(el.open).to.be.true;\n\n let activeOverlays = document.querySelectorAll('active-overlay');\n expect(activeOverlays.length).to.equal(1);\n opened = oneEvent(rootMenu1, 'sp-opened');\n rootMenu1.dispatchEvent(\n new PointerEvent('pointerenter', { bubbles: true })\n );\n await opened;\n activeOverlays = document.querySelectorAll('active-overlay');\n expect(activeOverlays.length).to.equal(2);\n\n opened = oneEvent(childMenu2, 'sp-opened');\n childMenu2.dispatchEvent(\n new PointerEvent('pointerenter', { bubbles: true })\n );\n await opened;\n activeOverlays = document.querySelectorAll('active-overlay');\n expect(activeOverlays.length).to.equal(3);\n\n const closed = Promise.all([\n oneEvent(childMenu2, 'sp-closed'),\n oneEvent(rootMenu1, 'sp-closed'),\n oneEvent(el, 'sp-closed'),\n ]);\n document.body.click();\n await closed;\n activeOverlays = document.querySelectorAll('active-overlay');\n expect(activeOverlays.length).to.equal(0);\n });\n\n it('closes decendent menus when Menu Item in ancestor without a submenu is pointerentered', async () => {\n const el = await styledFixture<ActionMenu>(html`\n <sp-action-menu>\n <sp-icon-show-menu slot=\"icon\"></sp-icon-show-menu>\n <sp-menu-group role=\"none\">\n <span slot=\"header\">New York</span>\n <sp-menu-item id=\"no-submenu\">Bronx</sp-menu-item>\n <sp-menu-item id=\"submenu-item-1\">\n Brooklyn\n <sp-menu slot=\"submenu\">\n <sp-menu-item id=\"submenu-item-2\">\n Ft. Greene\n </sp-menu-item>\n <sp-menu-item disabled>Park Slope</sp-menu-item>\n <sp-menu-item id=\"ancestor-item\">\n Williamsburg\n </sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n <sp-menu-item id=\"submenu-item-3\">\n Manhattan\n <sp-menu slot=\"submenu\">\n <sp-menu-item disabled>SoHo</sp-menu-item>\n <sp-menu-item>Union Square</sp-menu-item>\n <sp-menu-item>Upper East Side</sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n </sp-menu-group>\n </sp-action-menu>\n `);\n\n const rootMenu = el.querySelector('#submenu-item-1') as MenuItem;\n const noSubmenu = el.querySelector('#no-submenu') as MenuItem;\n\n expect(el.open).to.be.false;\n let opened = oneEvent(el, 'sp-opened');\n el.click();\n await opened;\n expect(el.open).to.be.true;\n\n let activeOverlays = document.querySelectorAll('active-overlay');\n expect(activeOverlays.length).to.equal(1);\n opened = oneEvent(rootMenu, 'sp-opened');\n rootMenu.dispatchEvent(\n new PointerEvent('pointerenter', { bubbles: true })\n );\n await opened;\n activeOverlays = document.querySelectorAll('active-overlay');\n expect(activeOverlays.length).to.equal(2);\n\n const closed = oneEvent(rootMenu, 'sp-closed');\n noSubmenu.dispatchEvent(\n new PointerEvent('pointerenter', { bubbles: true })\n );\n await closed;\n activeOverlays = document.querySelectorAll('active-overlay');\n expect(activeOverlays.length).to.equal(1);\n });\n\n it('closes decendent menus when Menu Item in ancestor is clicked', async () => {\n const el = await styledFixture<ActionMenu>(html`\n <sp-action-menu>\n <sp-icon-show-menu slot=\"icon\"></sp-icon-show-menu>\n <sp-menu-group role=\"none\">\n <span slot=\"header\">New York</span>\n <sp-menu-item>Bronx</sp-menu-item>\n <sp-menu-item id=\"submenu-item-1\">\n Brooklyn\n <sp-menu slot=\"submenu\">\n <sp-menu-item id=\"submenu-item-2\">\n Ft. Greene\n <sp-menu slot=\"submenu\">\n <sp-menu-item>S. Oxford St</sp-menu-item>\n <sp-menu-item>S. Portland Ave</sp-menu-item>\n <sp-menu-item>S. Elliot Pl</sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n <sp-menu-item disabled>Park Slope</sp-menu-item>\n <sp-menu-item id=\"ancestor-item\">\n Williamsburg\n </sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n <sp-menu-item id=\"submenu-item-3\">\n Manhattan\n <sp-menu slot=\"submenu\">\n <sp-menu-item disabled>SoHo</sp-menu-item>\n <sp-menu-item>\n Union Square\n <sp-menu slot=\"submenu\">\n <sp-menu-item>14th St</sp-menu-item>\n <sp-menu-item>Broadway</sp-menu-item>\n <sp-menu-item>Park Ave</sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n <sp-menu-item>Upper East Side</sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n </sp-menu-group>\n </sp-action-menu>\n `);\n\n const rootMenu1 = el.querySelector('#submenu-item-1') as MenuItem;\n const childMenu2 = el.querySelector('#submenu-item-2') as MenuItem;\n const ancestorItem = el.querySelector('#ancestor-item') as MenuItem;\n\n expect(el.open).to.be.false;\n let opened = oneEvent(el, 'sp-opened');\n el.click();\n await opened;\n expect(el.open).to.be.true;\n\n let activeOverlays = document.querySelectorAll('active-overlay');\n expect(activeOverlays.length).to.equal(1);\n opened = oneEvent(rootMenu1, 'sp-opened');\n rootMenu1.dispatchEvent(\n new PointerEvent('pointerenter', { bubbles: true })\n );\n await opened;\n activeOverlays = document.querySelectorAll('active-overlay');\n expect(activeOverlays.length).to.equal(2);\n\n opened = oneEvent(childMenu2, 'sp-opened');\n childMenu2.dispatchEvent(\n new PointerEvent('pointerenter', { bubbles: true })\n );\n await opened;\n activeOverlays = document.querySelectorAll('active-overlay');\n expect(activeOverlays.length).to.equal(3);\n\n const closed = Promise.all([\n oneEvent(childMenu2, 'sp-closed'),\n oneEvent(rootMenu1, 'sp-closed'),\n oneEvent(el, 'sp-closed'),\n ]);\n ancestorItem.click();\n await closed;\n activeOverlays = document.querySelectorAll('active-overlay');\n expect(activeOverlays.length).to.equal(0);\n });\n it('cleans up submenus that close before they are \"open\"', async () => {\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [-5, -5],\n },\n ],\n });\n const el = await styledFixture<Menu>(\n html`\n <sp-menu>\n <sp-menu-item class=\"root-1\">\n Has submenu\n <sp-menu slot=\"submenu\">\n <sp-menu-item class=\"submenu-item-1\">\n One\n </sp-menu-item>\n <sp-menu-item class=\"submenu-item-2\">\n Two\n </sp-menu-item>\n <sp-menu-item class=\"submenu-item-3\">\n Three\n </sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n <sp-menu-item class=\"root-2\">\n Has submenu\n <sp-menu slot=\"submenu\">\n <sp-menu-item class=\"submenu-item-1\">\n One\n </sp-menu-item>\n <sp-menu-item class=\"submenu-item-2\">\n Two\n </sp-menu-item>\n <sp-menu-item class=\"submenu-item-3\">\n Three\n </sp-menu-item>\n </sp-menu>\n </sp-menu-item>\n </sp-menu>\n `\n );\n\n await elementUpdated(el);\n const rootItem1 = el.querySelector('.root-1') as MenuItem;\n const rootItem2 = el.querySelector('.root-2') as MenuItem;\n expect(rootItem1.open, 'initially closed 1').to.be.false;\n expect(rootItem2.open, 'initially closed 2').to.be.false;\n\n const rootItemBoundingRect1 = rootItem1.getBoundingClientRect();\n const rootItemBoundingRect2 = rootItem2.getBoundingClientRect();\n let activeOverlay!: ActiveOverlay | null;\n\n // Open the first submenu\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n rootItemBoundingRect1.left +\n rootItemBoundingRect1.width / 2,\n rootItemBoundingRect1.top +\n rootItemBoundingRect1.height / 2,\n ],\n },\n ],\n });\n // Open the second submenu, closing the first\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n rootItemBoundingRect2.left +\n rootItemBoundingRect2.width / 2,\n rootItemBoundingRect2.top +\n rootItemBoundingRect2.height / 2,\n ],\n },\n ],\n });\n // Open the first submenu, closing the second\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n rootItemBoundingRect1.left +\n rootItemBoundingRect1.width / 2,\n rootItemBoundingRect1.top +\n rootItemBoundingRect1.height / 2,\n ],\n },\n ],\n });\n // Open the second submenu, closing the first\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n rootItemBoundingRect2.left +\n rootItemBoundingRect2.width / 2,\n rootItemBoundingRect2.top +\n rootItemBoundingRect2.height / 2,\n ],\n },\n ],\n });\n const closed = oneEvent(rootItem2, 'sp-closed');\n // Close the second submenu\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n rootItemBoundingRect2.left +\n rootItemBoundingRect2.width / 2,\n rootItemBoundingRect2.top +\n rootItemBoundingRect2.top +\n rootItemBoundingRect2.height / 2,\n ],\n },\n ],\n });\n activeOverlay = document.querySelector(\n 'active-overlay'\n ) as ActiveOverlay;\n expect(activeOverlay).to.not.be.null;\n await closed;\n\n activeOverlay = document.querySelector(\n 'active-overlay'\n ) as ActiveOverlay;\n expect(activeOverlay).to.be.null;\n expect(rootItem1.open, 'finally closed 1').to.be.false;\n expect(rootItem2.open, 'finally closed 2').to.be.false;\n });\n});\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }