@spectrum-web-components/picker 0.13.10-styles.28 → 0.13.10

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-picker.ts",
7
+ "path": "sp-picker.js",
8
8
  "declarations": [],
9
9
  "exports": [
10
10
  {
@@ -19,13 +19,13 @@
19
19
  },
20
20
  {
21
21
  "kind": "javascript-module",
22
- "path": "sync/sp-picker.ts",
22
+ "path": "sync/sp-picker.js",
23
23
  "declarations": [],
24
24
  "exports": []
25
25
  },
26
26
  {
27
27
  "kind": "javascript-module",
28
- "path": "src/Picker.ts",
28
+ "path": "src/Picker.js",
29
29
  "declarations": [
30
30
  {
31
31
  "kind": "class",
@@ -751,7 +751,7 @@
751
751
  "privacy": "protected",
752
752
  "inheritedFrom": {
753
753
  "name": "PickerBase",
754
- "module": "src/Picker.ts"
754
+ "module": "src/Picker.js"
755
755
  }
756
756
  },
757
757
  {
@@ -761,7 +761,7 @@
761
761
  "static": true,
762
762
  "inheritedFrom": {
763
763
  "name": "PickerBase",
764
- "module": "src/Picker.ts"
764
+ "module": "src/Picker.js"
765
765
  }
766
766
  },
767
767
  {
@@ -771,7 +771,7 @@
771
771
  "default": "new MatchMediaController(this, IS_MOBILE)",
772
772
  "inheritedFrom": {
773
773
  "name": "PickerBase",
774
- "module": "src/Picker.ts"
774
+ "module": "src/Picker.js"
775
775
  }
776
776
  },
777
777
  {
@@ -783,7 +783,7 @@
783
783
  "privacy": "public",
784
784
  "inheritedFrom": {
785
785
  "name": "PickerBase",
786
- "module": "src/Picker.ts"
786
+ "module": "src/Picker.js"
787
787
  }
788
788
  },
789
789
  {
@@ -795,7 +795,7 @@
795
795
  "privacy": "public",
796
796
  "inheritedFrom": {
797
797
  "name": "PickerBase",
798
- "module": "src/Picker.ts"
798
+ "module": "src/Picker.js"
799
799
  }
800
800
  },
801
801
  {
@@ -810,7 +810,7 @@
810
810
  "reflects": true,
811
811
  "inheritedFrom": {
812
812
  "name": "PickerBase",
813
- "module": "src/Picker.ts"
813
+ "module": "src/Picker.js"
814
814
  }
815
815
  },
816
816
  {
@@ -825,7 +825,7 @@
825
825
  "reflects": true,
826
826
  "inheritedFrom": {
827
827
  "name": "PickerBase",
828
- "module": "src/Picker.ts"
828
+ "module": "src/Picker.js"
829
829
  }
830
830
  },
831
831
  {
@@ -839,7 +839,7 @@
839
839
  "reflects": true,
840
840
  "inheritedFrom": {
841
841
  "name": "PickerBase",
842
- "module": "src/Picker.ts"
842
+ "module": "src/Picker.js"
843
843
  }
844
844
  },
845
845
  {
@@ -854,7 +854,7 @@
854
854
  "reflects": true,
855
855
  "inheritedFrom": {
856
856
  "name": "PickerBase",
857
- "module": "src/Picker.ts"
857
+ "module": "src/Picker.js"
858
858
  }
859
859
  },
860
860
  {
@@ -867,7 +867,7 @@
867
867
  "attribute": "label",
868
868
  "inheritedFrom": {
869
869
  "name": "PickerBase",
870
- "module": "src/Picker.ts"
870
+ "module": "src/Picker.js"
871
871
  }
872
872
  },
873
873
  {
@@ -882,7 +882,7 @@
882
882
  "reflects": true,
883
883
  "inheritedFrom": {
884
884
  "name": "PickerBase",
885
- "module": "src/Picker.ts"
885
+ "module": "src/Picker.js"
886
886
  }
887
887
  },
888
888
  {
@@ -897,7 +897,7 @@
897
897
  "reflects": true,
898
898
  "inheritedFrom": {
899
899
  "name": "PickerBase",
900
- "module": "src/Picker.ts"
900
+ "module": "src/Picker.js"
901
901
  }
902
902
  },
903
903
  {
@@ -910,7 +910,7 @@
910
910
  "default": "'single'",
911
911
  "inheritedFrom": {
912
912
  "name": "PickerBase",
913
- "module": "src/Picker.ts"
913
+ "module": "src/Picker.js"
914
914
  }
915
915
  },
916
916
  {
@@ -923,7 +923,7 @@
923
923
  "default": "[]",
924
924
  "inheritedFrom": {
925
925
  "name": "PickerBase",
926
- "module": "src/Picker.ts"
926
+ "module": "src/Picker.js"
927
927
  }
928
928
  },
929
929
  {
@@ -935,7 +935,7 @@
935
935
  "privacy": "private",
936
936
  "inheritedFrom": {
937
937
  "name": "PickerBase",
938
- "module": "src/Picker.ts"
938
+ "module": "src/Picker.js"
939
939
  }
940
940
  },
941
941
  {
@@ -947,7 +947,7 @@
947
947
  "privacy": "public",
948
948
  "inheritedFrom": {
949
949
  "name": "PickerBase",
950
- "module": "src/Picker.ts"
950
+ "module": "src/Picker.js"
951
951
  }
952
952
  },
953
953
  {
@@ -961,7 +961,7 @@
961
961
  "attribute": "placement",
962
962
  "inheritedFrom": {
963
963
  "name": "PickerBase",
964
- "module": "src/Picker.ts"
964
+ "module": "src/Picker.js"
965
965
  }
966
966
  },
967
967
  {
@@ -976,7 +976,7 @@
976
976
  "reflects": true,
977
977
  "inheritedFrom": {
978
978
  "name": "PickerBase",
979
- "module": "src/Picker.ts"
979
+ "module": "src/Picker.js"
980
980
  }
981
981
  },
982
982
  {
@@ -990,7 +990,7 @@
990
990
  "attribute": "value",
991
991
  "inheritedFrom": {
992
992
  "name": "PickerBase",
993
- "module": "src/Picker.ts"
993
+ "module": "src/Picker.js"
994
994
  }
995
995
  },
996
996
  {
@@ -1002,7 +1002,7 @@
1002
1002
  "privacy": "public",
1003
1003
  "inheritedFrom": {
1004
1004
  "name": "PickerBase",
1005
- "module": "src/Picker.ts"
1005
+ "module": "src/Picker.js"
1006
1006
  }
1007
1007
  },
1008
1008
  {
@@ -1014,7 +1014,7 @@
1014
1014
  "privacy": "private",
1015
1015
  "inheritedFrom": {
1016
1016
  "name": "PickerBase",
1017
- "module": "src/Picker.ts"
1017
+ "module": "src/Picker.js"
1018
1018
  }
1019
1019
  },
1020
1020
  {
@@ -1026,7 +1026,7 @@
1026
1026
  "privacy": "private",
1027
1027
  "inheritedFrom": {
1028
1028
  "name": "PickerBase",
1029
- "module": "src/Picker.ts"
1029
+ "module": "src/Picker.js"
1030
1030
  }
1031
1031
  },
1032
1032
  {
@@ -1039,7 +1039,7 @@
1039
1039
  "default": "'listbox'",
1040
1040
  "inheritedFrom": {
1041
1041
  "name": "PickerBase",
1042
- "module": "src/Picker.ts"
1042
+ "module": "src/Picker.js"
1043
1043
  }
1044
1044
  },
1045
1045
  {
@@ -1052,7 +1052,7 @@
1052
1052
  "default": "'option'",
1053
1053
  "inheritedFrom": {
1054
1054
  "name": "PickerBase",
1055
- "module": "src/Picker.ts"
1055
+ "module": "src/Picker.js"
1056
1056
  }
1057
1057
  },
1058
1058
  {
@@ -1064,7 +1064,7 @@
1064
1064
  "privacy": "public",
1065
1065
  "inheritedFrom": {
1066
1066
  "name": "PickerBase",
1067
- "module": "src/Picker.ts"
1067
+ "module": "src/Picker.js"
1068
1068
  }
1069
1069
  },
1070
1070
  {
@@ -1078,7 +1078,7 @@
1078
1078
  },
1079
1079
  "inheritedFrom": {
1080
1080
  "name": "PickerBase",
1081
- "module": "src/Picker.ts"
1081
+ "module": "src/Picker.js"
1082
1082
  }
1083
1083
  },
1084
1084
  {
@@ -1092,7 +1092,7 @@
1092
1092
  },
1093
1093
  "inheritedFrom": {
1094
1094
  "name": "PickerBase",
1095
- "module": "src/Picker.ts"
1095
+ "module": "src/Picker.js"
1096
1096
  }
1097
1097
  },
1098
1098
  {
@@ -1106,7 +1106,7 @@
1106
1106
  },
1107
1107
  "inheritedFrom": {
1108
1108
  "name": "PickerBase",
1109
- "module": "src/Picker.ts"
1109
+ "module": "src/Picker.js"
1110
1110
  }
1111
1111
  },
1112
1112
  {
@@ -1129,7 +1129,7 @@
1129
1129
  ],
1130
1130
  "inheritedFrom": {
1131
1131
  "name": "PickerBase",
1132
- "module": "src/Picker.ts"
1132
+ "module": "src/Picker.js"
1133
1133
  }
1134
1134
  },
1135
1135
  {
@@ -1143,7 +1143,7 @@
1143
1143
  },
1144
1144
  "inheritedFrom": {
1145
1145
  "name": "PickerBase",
1146
- "module": "src/Picker.ts"
1146
+ "module": "src/Picker.js"
1147
1147
  }
1148
1148
  },
1149
1149
  {
@@ -1157,7 +1157,7 @@
1157
1157
  },
1158
1158
  "inheritedFrom": {
1159
1159
  "name": "PickerBase",
1160
- "module": "src/Picker.ts"
1160
+ "module": "src/Picker.js"
1161
1161
  }
1162
1162
  },
1163
1163
  {
@@ -1179,7 +1179,7 @@
1179
1179
  ],
1180
1180
  "inheritedFrom": {
1181
1181
  "name": "PickerBase",
1182
- "module": "src/Picker.ts"
1182
+ "module": "src/Picker.js"
1183
1183
  }
1184
1184
  },
1185
1185
  {
@@ -1208,7 +1208,7 @@
1208
1208
  ],
1209
1209
  "inheritedFrom": {
1210
1210
  "name": "PickerBase",
1211
- "module": "src/Picker.ts"
1211
+ "module": "src/Picker.js"
1212
1212
  }
1213
1213
  },
1214
1214
  {
@@ -1236,7 +1236,7 @@
1236
1236
  ],
1237
1237
  "inheritedFrom": {
1238
1238
  "name": "PickerBase",
1239
- "module": "src/Picker.ts"
1239
+ "module": "src/Picker.js"
1240
1240
  }
1241
1241
  },
1242
1242
  {
@@ -1259,7 +1259,7 @@
1259
1259
  ],
1260
1260
  "inheritedFrom": {
1261
1261
  "name": "PickerBase",
1262
- "module": "src/Picker.ts"
1262
+ "module": "src/Picker.js"
1263
1263
  }
1264
1264
  },
1265
1265
  {
@@ -1273,7 +1273,7 @@
1273
1273
  },
1274
1274
  "inheritedFrom": {
1275
1275
  "name": "PickerBase",
1276
- "module": "src/Picker.ts"
1276
+ "module": "src/Picker.js"
1277
1277
  }
1278
1278
  },
1279
1279
  {
@@ -1282,7 +1282,7 @@
1282
1282
  "privacy": "public",
1283
1283
  "inheritedFrom": {
1284
1284
  "name": "PickerBase",
1285
- "module": "src/Picker.ts"
1285
+ "module": "src/Picker.js"
1286
1286
  }
1287
1287
  },
1288
1288
  {
@@ -1291,7 +1291,7 @@
1291
1291
  "privacy": "public",
1292
1292
  "inheritedFrom": {
1293
1293
  "name": "PickerBase",
1294
- "module": "src/Picker.ts"
1294
+ "module": "src/Picker.js"
1295
1295
  }
1296
1296
  },
1297
1297
  {
@@ -1303,7 +1303,7 @@
1303
1303
  "privacy": "private",
1304
1304
  "inheritedFrom": {
1305
1305
  "name": "PickerBase",
1306
- "module": "src/Picker.ts"
1306
+ "module": "src/Picker.js"
1307
1307
  }
1308
1308
  },
1309
1309
  {
@@ -1317,7 +1317,7 @@
1317
1317
  },
1318
1318
  "inheritedFrom": {
1319
1319
  "name": "PickerBase",
1320
- "module": "src/Picker.ts"
1320
+ "module": "src/Picker.js"
1321
1321
  }
1322
1322
  },
1323
1323
  {
@@ -1331,7 +1331,7 @@
1331
1331
  },
1332
1332
  "inheritedFrom": {
1333
1333
  "name": "PickerBase",
1334
- "module": "src/Picker.ts"
1334
+ "module": "src/Picker.js"
1335
1335
  }
1336
1336
  },
1337
1337
  {
@@ -1353,7 +1353,7 @@
1353
1353
  ],
1354
1354
  "inheritedFrom": {
1355
1355
  "name": "PickerBase",
1356
- "module": "src/Picker.ts"
1356
+ "module": "src/Picker.js"
1357
1357
  }
1358
1358
  },
1359
1359
  {
@@ -1367,7 +1367,7 @@
1367
1367
  },
1368
1368
  "inheritedFrom": {
1369
1369
  "name": "PickerBase",
1370
- "module": "src/Picker.ts"
1370
+ "module": "src/Picker.js"
1371
1371
  }
1372
1372
  },
1373
1373
  {
@@ -1379,7 +1379,7 @@
1379
1379
  "privacy": "protected",
1380
1380
  "inheritedFrom": {
1381
1381
  "name": "PickerBase",
1382
- "module": "src/Picker.ts"
1382
+ "module": "src/Picker.js"
1383
1383
  }
1384
1384
  },
1385
1385
  {
@@ -1401,7 +1401,7 @@
1401
1401
  ],
1402
1402
  "inheritedFrom": {
1403
1403
  "name": "PickerBase",
1404
- "module": "src/Picker.ts"
1404
+ "module": "src/Picker.js"
1405
1405
  }
1406
1406
  },
1407
1407
  {
@@ -1413,7 +1413,7 @@
1413
1413
  "privacy": "protected",
1414
1414
  "inheritedFrom": {
1415
1415
  "name": "PickerBase",
1416
- "module": "src/Picker.ts"
1416
+ "module": "src/Picker.js"
1417
1417
  }
1418
1418
  },
1419
1419
  {
@@ -1425,7 +1425,7 @@
1425
1425
  "privacy": "protected",
1426
1426
  "inheritedFrom": {
1427
1427
  "name": "PickerBase",
1428
- "module": "src/Picker.ts"
1428
+ "module": "src/Picker.js"
1429
1429
  }
1430
1430
  },
1431
1431
  {
@@ -1437,7 +1437,7 @@
1437
1437
  "privacy": "protected",
1438
1438
  "inheritedFrom": {
1439
1439
  "name": "PickerBase",
1440
- "module": "src/Picker.ts"
1440
+ "module": "src/Picker.js"
1441
1441
  }
1442
1442
  },
1443
1443
  {
@@ -1450,7 +1450,7 @@
1450
1450
  "default": "false",
1451
1451
  "inheritedFrom": {
1452
1452
  "name": "PickerBase",
1453
- "module": "src/Picker.ts"
1453
+ "module": "src/Picker.js"
1454
1454
  }
1455
1455
  },
1456
1456
  {
@@ -1462,7 +1462,7 @@
1462
1462
  "privacy": "protected",
1463
1463
  "inheritedFrom": {
1464
1464
  "name": "PickerBase",
1465
- "module": "src/Picker.ts"
1465
+ "module": "src/Picker.js"
1466
1466
  }
1467
1467
  },
1468
1468
  {
@@ -1486,7 +1486,7 @@
1486
1486
  "description": "Acquire the available MenuItems in the Picker by\ndirect element query or by assuming the list managed\nby the Menu within the open options overlay.",
1487
1487
  "inheritedFrom": {
1488
1488
  "name": "PickerBase",
1489
- "module": "src/Picker.ts"
1489
+ "module": "src/Picker.js"
1490
1490
  }
1491
1491
  },
1492
1492
  {
@@ -1500,7 +1500,7 @@
1500
1500
  },
1501
1501
  "inheritedFrom": {
1502
1502
  "name": "PickerBase",
1503
- "module": "src/Picker.ts"
1503
+ "module": "src/Picker.js"
1504
1504
  }
1505
1505
  },
1506
1506
  {
@@ -1509,7 +1509,7 @@
1509
1509
  "privacy": "private",
1510
1510
  "inheritedFrom": {
1511
1511
  "name": "PickerBase",
1512
- "module": "src/Picker.ts"
1512
+ "module": "src/Picker.js"
1513
1513
  }
1514
1514
  },
1515
1515
  {
@@ -1521,7 +1521,7 @@
1521
1521
  "privacy": "private",
1522
1522
  "inheritedFrom": {
1523
1523
  "name": "PickerBase",
1524
- "module": "src/Picker.ts"
1524
+ "module": "src/Picker.js"
1525
1525
  }
1526
1526
  },
1527
1527
  {
@@ -1530,7 +1530,7 @@
1530
1530
  "privacy": "private",
1531
1531
  "inheritedFrom": {
1532
1532
  "name": "PickerBase",
1533
- "module": "src/Picker.ts"
1533
+ "module": "src/Picker.js"
1534
1534
  }
1535
1535
  },
1536
1536
  {
@@ -1542,7 +1542,7 @@
1542
1542
  "privacy": "private",
1543
1543
  "inheritedFrom": {
1544
1544
  "name": "PickerBase",
1545
- "module": "src/Picker.ts"
1545
+ "module": "src/Picker.js"
1546
1546
  }
1547
1547
  },
1548
1548
  {
@@ -1556,7 +1556,7 @@
1556
1556
  },
1557
1557
  "inheritedFrom": {
1558
1558
  "name": "PickerBase",
1559
- "module": "src/Picker.ts"
1559
+ "module": "src/Picker.js"
1560
1560
  }
1561
1561
  }
1562
1562
  ],
@@ -1724,7 +1724,7 @@
1724
1724
  "name": "PickerBase",
1725
1725
  "declaration": {
1726
1726
  "name": "PickerBase",
1727
- "module": "src/Picker.ts"
1727
+ "module": "src/Picker.js"
1728
1728
  }
1729
1729
  },
1730
1730
  {
@@ -1732,7 +1732,7 @@
1732
1732
  "name": "Picker",
1733
1733
  "declaration": {
1734
1734
  "name": "Picker",
1735
- "module": "src/Picker.ts"
1735
+ "module": "src/Picker.js"
1736
1736
  }
1737
1737
  }
1738
1738
  ]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spectrum-web-components/picker",
3
- "version": "0.13.10-styles.28+7ca5b0103",
3
+ "version": "0.13.10",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -12,7 +12,7 @@
12
12
  "directory": "packages/picker"
13
13
  },
14
14
  "author": "",
15
- "homepage": "https://adobe.github.io/spectrum-web-components/components/picker",
15
+ "homepage": "https://opensource.adobe.com/spectrum-web-components/components/picker",
16
16
  "bugs": {
17
17
  "url": "https://github.com/adobe/spectrum-web-components/issues"
18
18
  },
@@ -65,17 +65,17 @@
65
65
  "lit-html"
66
66
  ],
67
67
  "dependencies": {
68
- "@spectrum-web-components/base": "^0.7.2",
69
- "@spectrum-web-components/button": "^0.19.8",
70
- "@spectrum-web-components/icon": "^0.12.5",
71
- "@spectrum-web-components/icons-ui": "^0.9.5",
72
- "@spectrum-web-components/icons-workflow": "^0.9.5",
73
- "@spectrum-web-components/menu": "^0.16.10-styles.28+7ca5b0103",
74
- "@spectrum-web-components/overlay": "^0.18.10-styles.28+7ca5b0103",
75
- "@spectrum-web-components/popover": "^0.12.10-styles.28+7ca5b0103",
76
- "@spectrum-web-components/reactive-controllers": "^0.3.4",
77
- "@spectrum-web-components/shared": "^0.15.3",
78
- "@spectrum-web-components/tray": "^0.4.7"
68
+ "@spectrum-web-components/base": "^0.7.3",
69
+ "@spectrum-web-components/button": "^0.19.9",
70
+ "@spectrum-web-components/icon": "^0.12.6",
71
+ "@spectrum-web-components/icons-ui": "^0.9.6",
72
+ "@spectrum-web-components/icons-workflow": "^0.9.6",
73
+ "@spectrum-web-components/menu": "^0.16.10",
74
+ "@spectrum-web-components/overlay": "^0.18.10",
75
+ "@spectrum-web-components/popover": "^0.12.10",
76
+ "@spectrum-web-components/reactive-controllers": "^0.3.5",
77
+ "@spectrum-web-components/shared": "^0.15.4",
78
+ "@spectrum-web-components/tray": "^0.4.8"
79
79
  },
80
80
  "devDependencies": {
81
81
  "@spectrum-css/picker": "^1.2.13"
@@ -88,5 +88,5 @@
88
88
  "./sync/index.js",
89
89
  "./sync/sp-*.js"
90
90
  ],
91
- "gitHead": "7ca5b0103010e0a5ede4ecf72eba3b3107e8da0d"
91
+ "gitHead": "02534b6685ff89a21dba86c09b2169f5b30a46f2"
92
92
  }
package/test/index.js CHANGED
@@ -27,6 +27,7 @@ import {
27
27
  import { iconsOnly } from "../stories/picker.stories.js";
28
28
  import { sendMouse } from "../../../test/plugins/browser.js";
29
29
  import { ignoreResizeObserverLoopError } from "../../../test/testing-helpers.js";
30
+ import { isWebKit } from "@spectrum-web-components/shared/src/platform.js";
30
31
  ignoreResizeObserverLoopError(before, after);
31
32
  const isMenuActiveElement = function() {
32
33
  var _a;
@@ -639,7 +640,7 @@ export function runPickerTests() {
639
640
  await nextFrame();
640
641
  expect(document.activeElement, "focuses el").to.equal(el);
641
642
  const opened = oneEvent(el, "sp-opened");
642
- await sendKeys({ press: "ArrowDown" });
643
+ sendKeys({ press: "ArrowDown" });
643
644
  await opened;
644
645
  expect(el.open, "opened").to.be.true;
645
646
  await waitUntil(
@@ -647,12 +648,14 @@ export function runPickerTests() {
647
648
  "first item focused"
648
649
  );
649
650
  const activeElement = document.activeElement;
650
- const blured = oneEvent(activeElement, "blur");
651
- await sendKeys({ press: "Tab" });
652
- await blured;
653
- expect(el.open).to.be.true;
654
- expect(document.activeElement === input1).to.be.false;
655
- expect(document.activeElement === input2).to.be.false;
651
+ if (!isWebKit()) {
652
+ const blured = oneEvent(activeElement, "blur");
653
+ sendKeys({ press: "Tab" });
654
+ await blured;
655
+ expect(el.open, "picker still open").to.be.true;
656
+ expect(document.activeElement === input1).to.be.false;
657
+ expect(document.activeElement === input2).to.be.false;
658
+ }
656
659
  });
657
660
  it('traps tab in the menu as a `type="modal"` overlay backwards', async () => {
658
661
  el.focus();
@@ -667,12 +670,14 @@ export function runPickerTests() {
667
670
  "first item focused"
668
671
  );
669
672
  const activeElement = document.activeElement;
670
- const blured = oneEvent(activeElement, "blur");
671
- await sendKeys({ press: "Shift+Tab" });
672
- await blured;
673
- expect(el.open).to.be.true;
674
- expect(document.activeElement === input1).to.be.false;
675
- expect(document.activeElement === input2).to.be.false;
673
+ if (!isWebKit()) {
674
+ const blured = oneEvent(activeElement, "blur");
675
+ sendKeys({ press: "Shift+Tab" });
676
+ await blured;
677
+ expect(el.open, "picker still open").to.be.true;
678
+ expect(document.activeElement === input1).to.be.false;
679
+ expect(document.activeElement === input2).to.be.false;
680
+ }
676
681
  });
677
682
  it("can close and immediate tab to the next tab stop", async () => {
678
683
  el.focus();
package/test/index.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["index.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 type { Picker } from '@spectrum-web-components/picker';\n\nimport type { OverlayOpenCloseDetail } from '@spectrum-web-components/overlay';\nimport type { MenuItem } from '@spectrum-web-components/menu';\nimport {\n elementUpdated,\n expect,\n fixture,\n html,\n nextFrame,\n oneEvent,\n waitUntil,\n} from '@open-wc/testing';\nimport '@spectrum-web-components/shared/src/focus-visible.js';\nimport { spy, stub } from 'sinon';\nimport {\n arrowDownEvent,\n arrowLeftEvent,\n arrowRightEvent,\n arrowUpEvent,\n escapeEvent,\n testForLitDevWarnings,\n tEvent,\n} from '../../../test/testing-helpers.js';\nimport {\n a11ySnapshot,\n findAccessibilityNode,\n sendKeys,\n} from '@web/test-runner-commands';\nimport { iconsOnly } from '../stories/picker.stories.js';\nimport { sendMouse } from '../../../test/plugins/browser.js';\nimport type { Popover } from '@spectrum-web-components/popover';\nimport { ignoreResizeObserverLoopError } from '../../../test/testing-helpers.js';\n\nignoreResizeObserverLoopError(before, after);\n\nconst isMenuActiveElement = function (): boolean {\n return document.activeElement?.localName === 'sp-menu';\n};\n\nexport function runPickerTests(): void {\n let el: Picker;\n const pickerFixture = async (): Promise<Picker> => {\n const test = await fixture<HTMLDivElement>(\n html`\n <div>\n <sp-field-label for=\"picker\">\n Where do you live?\n </sp-field-label>\n <sp-picker\n id=\"picker\"\n style=\"width: 200px; --spectrum-alias-ui-icon-chevron-size-100: 10px;\"\n >\n <sp-menu-item>Deselect</sp-menu-item>\n <sp-menu-item value=\"option-2\">\n Select Inverse\n </sp-menu-item>\n <sp-menu-item>Feather...</sp-menu-item>\n <sp-menu-item>Select and Mask...</sp-menu-item>\n <sp-menu-divider></sp-menu-divider>\n <sp-menu-item>Save Selection</sp-menu-item>\n <sp-menu-item disabled>Make Work Path</sp-menu-item>\n </sp-picker>\n </div>\n `\n );\n\n return test.querySelector('sp-picker') as Picker;\n };\n describe('standard', () => {\n beforeEach(async () => {\n el = await pickerFixture();\n await elementUpdated(el);\n });\n afterEach(async () => {\n if (el.open) {\n const closed = oneEvent(el, 'sp-closed');\n el.open = false;\n await closed;\n }\n });\n it('loads accessibly', async () => {\n await expect(el).to.be.accessible();\n });\n it('closes accessibly', async () => {\n const opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n\n expect(el.open).to.be.true;\n const accessibleCloseButton = document.querySelector(\n '.visually-hidden button'\n ) as HTMLButtonElement;\n\n const closed = oneEvent(el, 'sp-closed');\n accessibleCloseButton.click();\n await closed;\n\n expect(el.open).to.be.false;\n });\n it('accepts new selected item content', async () => {\n const option2 = el.querySelector('[value=\"option-2\"') as MenuItem;\n el.value = 'option-2';\n await elementUpdated(option2);\n await elementUpdated(el);\n expect(el.value).to.equal('option-2');\n expect((el.button.textContent || '').trim()).to.equal(\n 'Select Inverse'\n );\n let itemUpdated = oneEvent(el, 'sp-menu-item-added-or-updated');\n const newLabel1 = 'Invert Selection';\n option2.innerHTML = newLabel1;\n await itemUpdated;\n await elementUpdated(el);\n expect(el.value).to.equal('option-2');\n expect((el.button.textContent || '').trim()).to.equal(newLabel1);\n itemUpdated = oneEvent(el, 'sp-menu-item-added-or-updated');\n const newLabel2 = 'Other option';\n option2.childNodes[0].textContent = newLabel2;\n await itemUpdated;\n await elementUpdated(el);\n expect(el.value).to.equal('option-2');\n expect((el.button.textContent || '').trim()).to.equal(newLabel2);\n });\n it('accepts new selected item content when open', async () => {\n const option2 = el.querySelector('[value=\"option-2\"') as MenuItem;\n el.value = 'option-2';\n await elementUpdated(el);\n expect(el.value).to.equal('option-2');\n expect((el.button.textContent || '').trim()).to.equal(\n 'Select Inverse'\n );\n const opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n const itemUpdated = oneEvent(\n option2,\n 'sp-menu-item-added-or-updated'\n );\n option2.innerHTML = 'Invert Selection';\n await itemUpdated;\n await elementUpdated(el);\n expect(el.value).to.equal('option-2');\n expect((el.button.textContent || '').trim()).to.equal(\n 'Invert Selection'\n );\n });\n it('unsets value when children removed', async () => {\n el.value = 'option-2';\n\n await elementUpdated(el);\n expect(el.value).to.equal('option-2');\n expect((el.button.textContent || '').trim()).to.equal(\n 'Select Inverse'\n );\n\n const items = el.querySelectorAll('sp-menu-item');\n const removals: Promise<unknown>[] = [];\n items.forEach((item) => {\n const removal = oneEvent(el, 'sp-menu-item-removed');\n item.remove();\n removals.push(removal);\n });\n await Promise.all(removals);\n await elementUpdated(el);\n expect(el.value).to.equal('');\n expect((el.button.textContent || '').trim()).to.equal('');\n });\n it('accepts a new item and value at the same time', async () => {\n el.value = 'option-2';\n\n await elementUpdated(el);\n expect(el.value).to.equal('option-2');\n\n const item = document.createElement('sp-menu-item');\n item.value = 'option-new';\n item.textContent = 'New Option';\n\n el.append(item);\n await elementUpdated(el);\n\n el.value = 'option-new';\n\n await elementUpdated(el);\n expect(el.value).to.equal('option-new');\n });\n it('accepts a new item that can be selected', async () => {\n el.value = 'option-2';\n\n await elementUpdated(el);\n expect(el.value).to.equal('option-2');\n const item = document.createElement('sp-menu-item');\n item.value = 'option-new';\n item.textContent = 'New Option';\n\n el.append(item);\n\n await elementUpdated(item);\n await elementUpdated(el);\n\n let opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n // Overlaid content is outside of the context of the Picker element\n // and cannot be managed via its updateComplete cycle.\n await nextFrame();\n\n const close = oneEvent(el, 'sp-closed');\n item.click();\n await close;\n // Overlaid content is outside of the context of the Picker element\n // and cannot be managed via its updateComplete cycle.\n await nextFrame();\n\n expect(el.value, 'first time').to.equal('option-new');\n\n opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n // Overlaid content is outside of the context of the Picker element\n // and cannot be managed via its updateComplete cycle.\n await nextFrame();\n\n expect(el.value, 'second time').to.equal('option-new');\n });\n it('manages its \"name\" value in the accessibility tree', async () => {\n type NamedNode = { name: string };\n let snapshot = (await a11ySnapshot({})) as unknown as NamedNode & {\n children: NamedNode[];\n };\n\n expect(\n findAccessibilityNode<NamedNode>(\n snapshot,\n (node) => node.name === 'Where do you live?'\n ),\n '`name` is the label text'\n ).to.not.be.null;\n\n el.value = 'option-2';\n await elementUpdated(el);\n snapshot = (await a11ySnapshot({})) as unknown as NamedNode & {\n children: NamedNode[];\n };\n\n expect(\n findAccessibilityNode<NamedNode>(\n snapshot,\n (node) => node.name === 'Where do you live? Select Inverse'\n ),\n '`name` is the label text plus the selected item text'\n ).to.not.be.null;\n });\n it('manages `aria-activedescendant`', async () => {\n const firstItem = el.querySelector('sp-menu-item:nth-child(1)');\n const secondItem = el.querySelector('sp-menu-item:nth-child(2)');\n const opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n expect(\n el.optionsMenu.getAttribute('aria-activedescendant')\n ).to.equal(firstItem?.id);\n await sendKeys({ press: 'ArrowDown' });\n await elementUpdated(el);\n expect(\n el.optionsMenu.getAttribute('aria-activedescendant')\n ).to.equal(secondItem?.id);\n });\n it('renders invalid accessibly', async () => {\n el.invalid = true;\n await elementUpdated(el);\n\n expect(el.invalid).to.be.true;\n await expect(el).to.be.accessible();\n });\n it('renders selection accessibly', async () => {\n el.value = 'option-2';\n await elementUpdated(el);\n\n await expect(el).to.be.accessible();\n });\n it('opens with visible focus on a menu item on `DownArrow`', async () => {\n const firstItem = el.querySelector('sp-menu-item') as MenuItem;\n\n await elementUpdated(el);\n\n expect(firstItem.focused, 'should not visually focused').to.be\n .false;\n\n el.focus();\n await elementUpdated(el);\n const opened = oneEvent(el, 'sp-opened');\n await sendKeys({ press: 'ArrowRight' });\n await sendKeys({ press: 'ArrowLeft' });\n await sendKeys({ press: 'ArrowDown' });\n await opened;\n\n expect(el.open).to.be.true;\n expect(firstItem.focused, 'should be visually focused').to.be.true;\n\n const closed = oneEvent(el, 'sp-closed');\n await sendKeys({\n press: 'Escape',\n });\n await closed;\n\n expect(el.open).to.be.false;\n await waitUntil(() => !firstItem.focused, 'not visually focused');\n });\n it('opens without visible focus on a menu item on click', async () => {\n const firstItem = el.querySelector('sp-menu-item') as MenuItem;\n\n await elementUpdated(el);\n const boundingRect = el.getBoundingClientRect();\n\n expect(firstItem.focused, 'not visually focused').to.be.false;\n const opened = oneEvent(el, 'sp-opened');\n sendMouse({\n steps: [\n {\n type: 'click',\n position: [\n boundingRect.x + boundingRect.width / 2,\n boundingRect.y + boundingRect.height / 2,\n ],\n },\n ],\n });\n await opened;\n await elementUpdated(el);\n\n expect(el.open).to.be.true;\n expect(firstItem.focused, 'still not visually focused').to.be.false;\n });\n it('closes when becoming disabled', async () => {\n expect(el.open).to.be.false;\n el.click();\n await elementUpdated(el);\n\n expect(el.open).to.be.true;\n el.disabled = true;\n await elementUpdated(el);\n\n expect(el.open).to.be.false;\n });\n it('closes when clicking away', async () => {\n el.id = 'closing';\n const other = document.createElement('div');\n document.body.append(other);\n\n await elementUpdated(el);\n\n expect(el.open).to.be.false;\n el.click();\n await elementUpdated(el);\n\n expect(el.open).to.be.true;\n other.click();\n await waitUntil(() => !el.open, 'closed');\n\n other.remove();\n });\n it('selects', async () => {\n const secondItem = el.querySelector(\n 'sp-menu-item:nth-of-type(2)'\n ) as MenuItem;\n const button = el.button as HTMLButtonElement;\n\n const opened = oneEvent(el, 'sp-opened');\n button.click();\n await opened;\n await elementUpdated(el);\n\n expect(el.open).to.be.true;\n expect(el.selectedItem?.itemText).to.be.undefined;\n expect(el.value).to.equal('');\n\n const closed = oneEvent(el, 'sp-closed');\n secondItem.click();\n await closed;\n\n expect(el.open).to.be.false;\n expect(el.selectedItem?.itemText).to.equal('Select Inverse');\n expect(el.value).to.equal('option-2');\n });\n it('re-selects', async () => {\n const firstItem = el.querySelector(\n 'sp-menu-item:nth-of-type(1)'\n ) as MenuItem;\n const secondItem = el.querySelector(\n 'sp-menu-item:nth-of-type(2)'\n ) as MenuItem;\n const button = el.button as HTMLButtonElement;\n\n const opened = oneEvent(el, 'sp-opened');\n button.click();\n await opened;\n await nextFrame();\n\n expect(el.open).to.be.true;\n expect(el.selectedItem?.itemText).to.be.undefined;\n expect(el.value).to.equal('');\n\n const closed = oneEvent(el, 'sp-closed');\n secondItem.click();\n await closed;\n await nextFrame();\n\n expect(el.open).to.be.false;\n expect(el.selectedItem?.itemText).to.equal('Select Inverse');\n expect(el.value).to.equal('option-2');\n\n const opened2 = oneEvent(el, 'sp-opened');\n button.click();\n await opened2;\n await nextFrame();\n\n expect(el.open).to.be.true;\n expect(el.selectedItem?.itemText).to.equal('Select Inverse');\n expect(el.value).to.equal('option-2');\n\n const closed2 = oneEvent(el, 'sp-closed');\n firstItem.click();\n await closed2;\n await nextFrame();\n\n expect(el.open).to.be.false;\n expect(el.selectedItem?.itemText).to.equal('Deselect');\n expect(el.value).to.equal('Deselect');\n });\n it('dispatches bubbling and composed events', async () => {\n const changeSpy = spy();\n const parent = el.parentElement as HTMLElement;\n parent.attachShadow({ mode: 'open' });\n (parent.shadowRoot as ShadowRoot).append(el);\n const secondItem = el.querySelector(\n 'sp-menu-item:nth-of-type(2)'\n ) as MenuItem;\n\n parent.addEventListener('change', () => changeSpy());\n\n expect(el.value).to.equal('');\n\n const opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n await elementUpdated(el);\n\n const closed = oneEvent(el, 'sp-closed');\n secondItem.click();\n await closed;\n await elementUpdated(el);\n\n expect(el.value).to.equal(secondItem.value);\n expect(changeSpy.calledOnce).to.be.true;\n });\n it('can have selection prevented', async () => {\n const preventChangeSpy = spy();\n const secondItem = el.querySelector(\n 'sp-menu-item:nth-of-type(2)'\n ) as MenuItem;\n const button = el.button as HTMLButtonElement;\n\n let opened = oneEvent(el, 'sp-opened');\n button.click();\n await opened;\n await elementUpdated(el);\n\n expect(el.open).to.be.true;\n expect(el.selectedItem?.itemText).to.be.undefined;\n expect(el.value).to.equal('');\n expect(secondItem.selected).to.be.false;\n\n el.addEventListener('change', (event: Event): void => {\n event.preventDefault();\n preventChangeSpy();\n });\n\n const closed = oneEvent(el, 'sp-closed');\n opened = oneEvent(el, 'sp-opened');\n secondItem.click();\n await closed;\n await opened;\n await elementUpdated(el);\n expect(preventChangeSpy.calledOnce).to.be.true;\n expect(secondItem.selected, 'selection prevented').to.be.false;\n });\n it('can throw focus after `change`', async () => {\n const input = document.createElement('input');\n document.body.append(input);\n\n await elementUpdated(el);\n\n const secondItem = el.querySelector(\n 'sp-menu-item:nth-of-type(2)'\n ) as MenuItem;\n const button = el.button as HTMLButtonElement;\n\n const opened = oneEvent(el, 'sp-opened');\n button.click();\n await opened;\n await elementUpdated(el);\n\n expect(el.open).to.be.true;\n expect(el.selectedItem?.itemText).to.be.undefined;\n expect(el.value).to.equal('');\n expect(secondItem.selected).to.be.false;\n\n el.addEventListener('change', (): void => {\n input.focus();\n });\n\n const closed = oneEvent(el, 'sp-closed');\n secondItem.click();\n await closed;\n await elementUpdated(el);\n\n expect(el.open).to.be.false;\n expect(el.value, 'value changed').to.equal('option-2');\n expect(secondItem.selected, 'selected changed').to.be.true;\n await waitUntil(\n () => document.activeElement === input,\n 'focus throw'\n );\n input.remove();\n });\n it('opens on ArrowUp', async () => {\n const button = el.button as HTMLButtonElement;\n\n el.focus();\n await elementUpdated(el);\n\n expect(el.open, 'inially closed').to.be.false;\n\n button.dispatchEvent(tEvent());\n await elementUpdated(el);\n\n expect(el.open, 'still closed').to.be.false;\n\n button.dispatchEvent(arrowUpEvent());\n await elementUpdated(el);\n\n expect(el.open, 'open by ArrowUp').to.be.true;\n\n await waitUntil(\n () => document.querySelector('active-overlay') !== null,\n 'an active-overlay has been inserted on the page'\n );\n\n button.dispatchEvent(escapeEvent());\n await elementUpdated(el);\n await waitUntil(() => el.open === false, 'closed by Escape');\n await waitUntil(\n () => document.querySelector('active-overlay') === null,\n 'an active-overlay has been inserted on the page'\n );\n });\n it('opens on ArrowDown', async () => {\n const firstItem = el.querySelector(\n 'sp-menu-item:nth-of-type(1)'\n ) as MenuItem;\n const button = el.button as HTMLButtonElement;\n\n el.focus();\n await elementUpdated(el);\n\n expect(el.open, 'inially closed').to.be.false;\n\n const opened = oneEvent(el, 'sp-opened');\n button.dispatchEvent(arrowDownEvent());\n await opened;\n await elementUpdated(el);\n\n expect(el.open, 'open by ArrowDown').to.be.true;\n expect(el.selectedItem?.itemText).to.be.undefined;\n expect(el.value).to.equal('');\n\n const closed = oneEvent(el, 'sp-closed');\n firstItem.click();\n await closed;\n await elementUpdated(el);\n\n expect(el.open).to.be.false;\n expect(el.selectedItem?.itemText).to.equal('Deselect');\n expect(el.value).to.equal('Deselect');\n });\n it('quick selects on ArrowLeft/Right', async () => {\n const selectionSpy = spy();\n el.addEventListener('change', (event: Event) => {\n const { value } = event.target as Picker;\n selectionSpy(value);\n });\n const button = el.button as HTMLButtonElement;\n\n el.focus();\n button.dispatchEvent(arrowLeftEvent());\n\n await elementUpdated(el);\n\n expect(selectionSpy.callCount).to.equal(1);\n expect(selectionSpy.calledWith('Deselected'));\n button.dispatchEvent(arrowLeftEvent());\n\n await elementUpdated(el);\n expect(selectionSpy.callCount).to.equal(1);\n button.dispatchEvent(arrowRightEvent());\n\n await elementUpdated(el);\n expect(selectionSpy.calledWith('option-2'));\n\n button.dispatchEvent(arrowRightEvent());\n button.dispatchEvent(arrowRightEvent());\n button.dispatchEvent(arrowRightEvent());\n button.dispatchEvent(arrowRightEvent());\n\n await elementUpdated(el);\n expect(selectionSpy.callCount).to.equal(5);\n expect(selectionSpy.calledWith('Save Selection'));\n expect(selectionSpy.calledWith('Make Work Path')).to.be.false;\n });\n it('quick selects first item on ArrowRight when no value', async () => {\n const selectionSpy = spy();\n el.addEventListener('change', (event: Event) => {\n const { value } = event.target as Picker;\n selectionSpy(value);\n });\n const button = el.button as HTMLButtonElement;\n\n el.focus();\n button.dispatchEvent(arrowRightEvent());\n\n await elementUpdated(el);\n\n expect(selectionSpy.callCount).to.equal(1);\n expect(selectionSpy.calledWith('Deselected'));\n });\n it('loads', async () => {\n expect(el).to.not.be.undefined;\n });\n it('refocuses on list when open', async () => {\n const firstItem = el.querySelector('sp-menu-item') as MenuItem;\n const input = document.createElement('input');\n el.insertAdjacentElement('afterend', input);\n\n el.focus();\n await sendKeys({ press: 'Tab' });\n expect(document.activeElement === input).to.be.true;\n await sendKeys({ press: 'Shift+Tab' });\n expect(document.activeElement === el).to.be.true;\n await sendKeys({ press: 'Enter' });\n const opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n await elementUpdated(el);\n\n await waitUntil(\n () => firstItem.focused,\n 'The first items should have become focused visually.'\n );\n\n el.blur();\n await elementUpdated(el);\n\n expect(el.open).to.be.true;\n el.focus();\n await elementUpdated(el);\n await waitUntil(\n () => isMenuActiveElement(),\n 'first item refocused'\n );\n expect(el.open).to.be.true;\n expect(isMenuActiveElement()).to.be.true;\n // Force :focus-visible heuristic\n await sendKeys({ press: 'ArrowDown' });\n await sendKeys({ press: 'ArrowUp' });\n expect(firstItem.focused).to.be.true;\n });\n it('does not allow tabing to close', async () => {\n el.open = true;\n await elementUpdated(el);\n\n expect(el.open).to.be.true;\n el.focus();\n await elementUpdated(el);\n await waitUntil(\n () => isMenuActiveElement(),\n 'first item refocused'\n );\n expect(el.open).to.be.true;\n expect(isMenuActiveElement()).to.be.true;\n\n await sendKeys({ press: 'Tab' });\n\n expect(el.open, 'stays open').to.be.true;\n });\n describe('tab order', () => {\n let input1: HTMLInputElement;\n let input2: HTMLInputElement;\n beforeEach(() => {\n const surroundingInput = (): HTMLInputElement => {\n const input = document.createElement('input');\n input.type = 'text';\n input.tabIndex = 0;\n return input;\n };\n input1 = surroundingInput();\n input2 = surroundingInput();\n\n el.insertAdjacentElement('beforebegin', input1);\n el.insertAdjacentElement('afterend', input2);\n });\n afterEach(() => {\n input1.remove();\n input2.remove();\n });\n it('tabs forward through the element', async () => {\n // start at input1\n input1.focus();\n await nextFrame();\n expect(document.activeElement === input1, 'focuses input 1').to\n .true;\n // tab to the picker\n let focused = oneEvent(el, 'focus');\n await sendKeys({ press: 'Tab' });\n await focused;\n\n expect(el.focused, 'focused').to.be.true;\n expect(el.open, 'closed').to.be.false;\n expect(document.activeElement === el, 'focuses el').to.be.true;\n // tab through the picker to input2\n focused = oneEvent(input2, 'focus');\n await sendKeys({ press: 'Tab' });\n await focused;\n expect(document.activeElement === input2, 'focuses input 2').to\n .true;\n });\n it('shift+tabs backwards through the element', async () => {\n // start at input1\n input2.focus();\n await nextFrame();\n expect(document.activeElement, 'focuses input 2').to.equal(\n input2\n );\n // tab to the picker\n let focused = oneEvent(el, 'focus');\n await sendKeys({ press: 'Shift+Tab' });\n await focused;\n\n expect(el.focused, 'focused').to.be.true;\n expect(el.open, 'closed').to.be.false;\n expect(document.activeElement, 'focuses el').to.equal(el);\n // tab through the picker to input2\n focused = oneEvent(input1, 'focus');\n await sendKeys({ press: 'Shift+Tab' });\n await focused;\n expect(document.activeElement, 'focuses input 1').to.equal(\n input1\n );\n });\n it('traps tab in the menu as a `type=\"modal\"` overlay forward', async () => {\n el.focus();\n await nextFrame();\n expect(document.activeElement, 'focuses el').to.equal(el);\n // press down to open the picker\n const opened = oneEvent(el, 'sp-opened');\n await sendKeys({ press: 'ArrowDown' });\n await opened;\n\n expect(el.open, 'opened').to.be.true;\n await waitUntil(\n () => isMenuActiveElement(),\n 'first item focused'\n );\n\n const activeElement = document.activeElement as HTMLElement;\n const blured = oneEvent(activeElement, 'blur');\n await sendKeys({ press: 'Tab' });\n await blured;\n\n expect(el.open).to.be.true;\n expect(document.activeElement === input1).to.be.false;\n expect(document.activeElement === input2).to.be.false;\n });\n it('traps tab in the menu as a `type=\"modal\"` overlay backwards', async () => {\n el.focus();\n await nextFrame();\n expect(document.activeElement, 'focuses el').to.equal(el);\n // press down to open the picker\n const opened = oneEvent(el, 'sp-opened');\n await sendKeys({ press: 'ArrowDown' });\n await opened;\n\n expect(el.open, 'opened').to.be.true;\n await waitUntil(\n () => isMenuActiveElement(),\n 'first item focused'\n );\n\n const activeElement = document.activeElement as HTMLElement;\n const blured = oneEvent(activeElement, 'blur');\n await sendKeys({ press: 'Shift+Tab' });\n await blured;\n\n expect(el.open).to.be.true;\n expect(document.activeElement === input1).to.be.false;\n expect(document.activeElement === input2).to.be.false;\n });\n it('can close and immediate tab to the next tab stop', async () => {\n el.focus();\n await nextFrame();\n expect(document.activeElement, 'focuses el').to.equal(el);\n // press down to open the picker\n const opened = oneEvent(el, 'sp-opened');\n await sendKeys({ press: 'ArrowUp' });\n await opened;\n\n expect(el.open, 'opened').to.be.true;\n await waitUntil(\n () => isMenuActiveElement(),\n 'first item focused'\n );\n\n const closed = oneEvent(el, 'sp-closed');\n el.open = false;\n await closed;\n\n expect(el.open).to.be.false;\n expect(document.activeElement === el).to.be.true;\n\n const focused = oneEvent(input2, 'focus');\n await sendKeys({ press: 'Tab' });\n await focused;\n\n expect(el.open).to.be.false;\n expect(document.activeElement === input2).to.be.true;\n });\n it('can close and immediate shift+tab to the previous tab stop', async () => {\n el.focus();\n await nextFrame();\n expect(document.activeElement, 'focuses el').to.equal(el);\n // press down to open the picker\n const opened = oneEvent(el, 'sp-opened');\n await sendKeys({ press: 'ArrowUp' });\n await opened;\n\n expect(el.open, 'opened').to.be.true;\n await waitUntil(\n () => isMenuActiveElement(),\n 'first item focused'\n );\n\n const closed = oneEvent(el, 'sp-closed');\n el.open = false;\n await closed;\n\n expect(el.open).to.be.false;\n expect(document.activeElement === el).to.be.true;\n\n const focused = oneEvent(input1, 'focus');\n await sendKeys({ press: 'Shift+Tab' });\n await focused;\n\n expect(el.open).to.be.false;\n expect(document.activeElement === input1).to.be.true;\n });\n });\n it('does not open when [readonly]', async () => {\n el.readonly = true;\n\n await elementUpdated(el);\n\n const button = el.button as HTMLButtonElement;\n\n button.click();\n await elementUpdated(el);\n\n expect(el.open).to.be.false;\n });\n it('scrolls selected into view on open', async () => {\n await (\n el as unknown as { generatePopover(): void }\n ).generatePopover();\n (el as unknown as { popoverEl: Popover }).popoverEl.style.height =\n '40px';\n\n const firstItem = el.querySelector(\n 'sp-menu-item:first-child'\n ) as MenuItem;\n const lastItem = el.querySelector(\n 'sp-menu-item:last-child'\n ) as MenuItem;\n lastItem.disabled = false;\n el.value = lastItem.value;\n\n await elementUpdated(el);\n\n el.open = true;\n\n await elementUpdated(el);\n await waitUntil(() => isMenuActiveElement(), 'first item focused');\n const getParentOffset = (el: HTMLElement): number => {\n const parentScroll = (el.parentElement as HTMLElement)\n .scrollTop;\n const parentOffset = el.offsetTop - parentScroll;\n return parentOffset;\n };\n expect(getParentOffset(lastItem)).to.be.lessThan(40);\n expect(getParentOffset(firstItem)).to.be.lessThan(-1);\n\n lastItem.dispatchEvent(\n new FocusEvent('focusin', { bubbles: true })\n );\n lastItem.dispatchEvent(arrowDownEvent());\n await elementUpdated(el);\n await nextFrame();\n expect(getParentOffset(lastItem)).to.be.greaterThan(40);\n expect(getParentOffset(firstItem)).to.be.greaterThan(-1);\n });\n });\n describe('grouped', async () => {\n const groupedFixture = async (): Promise<Picker> => {\n return fixture<Picker>(\n html`\n <sp-picker\n quiet\n label=\"I would like to use Spectrum Web Components\"\n value=\"0\"\n >\n <sp-menu-group>\n <span slot=\"header\">Timeline</span>\n <sp-menu-item value=\"0\" id=\"should-be-selected\">\n Immediately\n </sp-menu-item>\n <sp-menu-item value=\"1\">\n I'm already using them\n </sp-menu-item>\n <sp-menu-divider></sp-menu-divider>\n <sp-menu-item value=\"2\">Soon</sp-menu-item>\n <sp-menu-item value=\"3\">\n As part of my next project\n </sp-menu-item>\n <sp-menu-item value=\"4\">In the future</sp-menu-item>\n </sp-menu-group>\n </sp-picker>\n `\n );\n };\n beforeEach(async () => {\n el = await groupedFixture();\n await elementUpdated(el);\n });\n it('selects the item with a matching value in a group', async () => {\n const item = el.querySelector('#should-be-selected') as MenuItem;\n expect(item.selected).to.be.true;\n });\n });\n describe('slotted label', () => {\n const pickerFixture = async (): Promise<Picker> => {\n const test = await fixture<Picker>(\n html`\n <div>\n <sp-field-label for=\"picker-slotted\">\n Where do you live?\n </sp-field-label>\n <sp-picker id=\"picker-slotted\">\n <span slot=\"label\">\n Select a Country with a very long label, too\n long in fact\n </span>\n <sp-menu-item>Deselect</sp-menu-item>\n <sp-menu-item value=\"option-2\">\n Select Inverse\n </sp-menu-item>\n <sp-menu-item>Feather...</sp-menu-item>\n <sp-menu-item>Select and Mask...</sp-menu-item>\n <sp-menu-divider></sp-menu-divider>\n <sp-menu-item>Save Selection</sp-menu-item>\n <sp-menu-item disabled>Make Work Path</sp-menu-item>\n </sp-picker>\n </div>\n `\n );\n\n return test.querySelector('sp-picker') as Picker;\n };\n beforeEach(async () => {\n el = await pickerFixture();\n await elementUpdated(el);\n });\n afterEach(async () => {\n if (el.open) {\n const closed = oneEvent(el, 'sp-closed');\n el.open = false;\n await closed;\n }\n });\n\n it('loads accessibly w/ slotted label', async () => {\n await expect(el).to.be.accessible();\n });\n });\n describe('deprecated', () => {\n const pickerFixture = async (): Promise<Picker> => {\n const test = await fixture<Picker>(\n html`\n <div>\n <sp-field-label for=\"picker-deprecated\">\n Where do you live?\n </sp-field-label>\n <sp-picker\n id=\"picker-deprecated\"\n label=\"Select a Country with a very long label, too long in fact\"\n >\n <sp-menu>\n <sp-menu-item>Deselect</sp-menu-item>\n <sp-menu-item value=\"option-2\">\n Select Inverse\n </sp-menu-item>\n <sp-menu-item>Feather...</sp-menu-item>\n <sp-menu-item>Select and Mask...</sp-menu-item>\n <sp-menu-divider></sp-menu-divider>\n <sp-menu-item>Save Selection</sp-menu-item>\n <sp-menu-item disabled>\n Make Work Path\n </sp-menu-item>\n </sp-menu>\n </sp-picker>\n </div>\n `\n );\n\n return test.querySelector('sp-picker') as Picker;\n };\n describe('Dev mode', () => {\n it('warns in Dev Mode of deprecated `<sp-menu>` usage', async () => {\n const consoleWarnStub = stub(console, 'warn');\n el = await pickerFixture();\n await elementUpdated(el);\n\n expect(consoleWarnStub.called).to.be.true;\n const spyCall = consoleWarnStub.getCall(0);\n expect(\n spyCall.args.at(0).includes('<sp-menu>'),\n 'confirm <sp-menu>-centric message'\n ).to.be.true;\n expect(\n spyCall.args.at(-1),\n 'confirm `data` shape'\n ).to.deep.equal({\n data: {\n localName: 'sp-picker',\n type: 'api',\n level: 'deprecation',\n },\n });\n consoleWarnStub.restore();\n if (el.open) {\n const closed = oneEvent(el, 'sp-closed');\n el.open = false;\n await closed;\n }\n });\n });\n describe('Dev mode ignored', () => {\n const { ignoreWarningLocalNames } = window.__swc;\n before(() => {\n window.__swc.ignoreWarningLocalNames = {\n 'sp-picker': true,\n };\n });\n before(() => {\n window.__swc.ignoreWarningLocalNames = ignoreWarningLocalNames;\n });\n beforeEach(async () => {\n el = await pickerFixture();\n await elementUpdated(el);\n });\n afterEach(async () => {\n if (el.open) {\n const closed = oneEvent(el, 'sp-closed');\n el.open = false;\n await closed;\n }\n });\n it('selects with deprecated syntax', async () => {\n const secondItem = el.querySelector(\n 'sp-menu-item:nth-of-type(2)'\n ) as MenuItem;\n\n const opened = oneEvent(el, 'sp-opened');\n el.button.click();\n await opened;\n await elementUpdated(el);\n\n expect(el.open).to.be.true;\n expect(el.selectedItem?.itemText).to.be.undefined;\n expect(el.value).to.equal('');\n\n const closed = oneEvent(el, 'sp-closed');\n secondItem.click();\n await closed;\n\n expect(el.open).to.be.false;\n expect(el.selectedItem?.itemText).to.equal('Select Inverse');\n expect(el.value).to.equal('option-2');\n });\n });\n });\n testForLitDevWarnings(async () => await pickerFixture());\n it('manages its \"name\" value in the accessibility tree when [icons-only]', async () => {\n const test = await fixture<HTMLDivElement>(html`\n <div>${iconsOnly({})}</div>\n `);\n const el = test.querySelector('sp-picker') as Picker;\n\n await elementUpdated(el);\n type NamedNode = { name: string };\n let snapshot = (await a11ySnapshot({})) as unknown as NamedNode & {\n children: NamedNode[];\n };\n\n expect(\n findAccessibilityNode<NamedNode>(\n snapshot,\n (node) => node.name === 'Choose an action type... Delete'\n ),\n '`name` is the label text'\n ).to.not.be.null;\n\n el.value = '2';\n await elementUpdated(el);\n snapshot = (await a11ySnapshot({})) as unknown as NamedNode & {\n children: NamedNode[];\n };\n\n expect(\n findAccessibilityNode<NamedNode>(\n snapshot,\n (node) => node.name === 'Choose an action type... Copy'\n ),\n '`name` is the label text plus the selected item text'\n ).to.not.be.null;\n });\n it('toggles between pickers', async () => {\n const el2 = await pickerFixture();\n const el1 = await pickerFixture();\n\n el1.id = 'away';\n el2.id = 'other';\n\n await Promise.all([elementUpdated(el1), elementUpdated(el2)]);\n\n expect(el1.open, 'closed 1').to.be.false;\n expect(el2.open, 'closed 1').to.be.false;\n let open = oneEvent(el1, 'sp-opened');\n el1.click();\n await open;\n expect(el1.open).to.be.true;\n expect(el2.open).to.be.false;\n\n open = oneEvent(el2, 'sp-opened');\n let closed = oneEvent(el1, 'sp-closed');\n el2.click();\n await Promise.all([open, closed]);\n expect(el1.open).to.be.false;\n expect(el2.open).to.be.true;\n\n open = oneEvent(el1, 'sp-opened');\n closed = oneEvent(el2, 'sp-closed');\n el1.click();\n await Promise.all([open, closed]);\n expect(el1.open).to.be.true;\n expect(el2.open).to.be.false;\n\n closed = oneEvent(el1, 'sp-closed');\n sendKeys({\n press: 'Escape',\n });\n await closed;\n expect(el1.open).to.be.false;\n });\n it('displays selected item text by default', async () => {\n const el = await fixture<Picker>(\n html`\n <sp-picker\n value=\"inverse\"\n label=\"Select a Country with a very long label, too long in fact\"\n >\n <sp-menu-item value=\"deselect\">Deselect Text</sp-menu-item>\n <sp-menu-item value=\"inverse\">Select Inverse</sp-menu-item>\n <sp-menu-item>Feather...</sp-menu-item>\n <sp-menu-item>Select and Mask...</sp-menu-item>\n <sp-menu-divider></sp-menu-divider>\n <sp-menu-item>Save Selection</sp-menu-item>\n <sp-menu-item disabled>Make Work Path</sp-menu-item>\n </sp-picker>\n `\n );\n\n await elementUpdated(el);\n await waitUntil(\n () => el.selectedItem?.itemText === 'Select Inverse',\n `Selected Item Text: ${el.selectedItem?.itemText}`\n );\n\n const firstItem = el.querySelector(\n 'sp-menu-item:nth-of-type(1)'\n ) as MenuItem;\n const secondItem = el.querySelector(\n 'sp-menu-item:nth-of-type(2)'\n ) as MenuItem;\n\n expect(el.value).to.equal('inverse');\n expect(el.selectedItem?.itemText).to.equal('Select Inverse');\n\n el.focus();\n await elementUpdated(el);\n expect(\n el === document.activeElement,\n `activeElement is ${document.activeElement?.localName}`\n ).to.be.true;\n\n const opened = oneEvent(el, 'sp-opened');\n sendKeys({ press: 'Enter' });\n await opened;\n await elementUpdated(el.optionsMenu);\n\n expect(\n el.optionsMenu === document.activeElement,\n `activeElement is ${document.activeElement?.localName}`\n ).to.be.true;\n\n expect(firstItem.focused, 'firstItem NOT \"focused\"').to.be.false;\n expect(secondItem.focused, 'secondItem \"focused\"').to.be.true;\n expect(el.optionsMenu.getAttribute('aria-activedescendant')).to.equal(\n secondItem.id\n );\n });\n it('resets value when item not available', async () => {\n const el = await fixture<Picker>(\n html`\n <sp-picker\n value=\"missing\"\n label=\"Select a Country with a very long label, too long in fact\"\n >\n <sp-menu-item value=\"deselect\">Deselect Text</sp-menu-item>\n <sp-menu-item value=\"inverse\">Select Inverse</sp-menu-item>\n <sp-menu-item>Feather...</sp-menu-item>\n <sp-menu-item>Select and Mask...</sp-menu-item>\n <sp-menu-divider></sp-menu-divider>\n <sp-menu-item>Save Selection</sp-menu-item>\n <sp-menu-item disabled>Make Work Path</sp-menu-item>\n </sp-picker>\n `\n );\n\n await elementUpdated(el);\n await waitUntil(() => el.value === '');\n\n expect(el.value).to.equal('');\n expect(el.selectedItem?.itemText).to.be.undefined;\n });\n it('allows event listeners on child items', async () => {\n const mouseenterSpy = spy();\n const handleMouseenter = (): void => mouseenterSpy();\n const el = await fixture<Picker>(\n html`\n <sp-picker\n label=\"Select a Country with a very long label, too long in fact\"\n >\n <sp-menu-item\n value=\"deselect\"\n @mouseenter=${handleMouseenter}\n >\n Deselect Text\n </sp-menu-item>\n </sp-picker>\n `\n );\n\n await elementUpdated(el);\n\n const hoverEl = el.querySelector('sp-menu-item') as MenuItem;\n\n const opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n await elementUpdated(el);\n\n expect(el.open).to.be.true;\n hoverEl.dispatchEvent(new MouseEvent('mouseenter'));\n await elementUpdated(el);\n\n expect(el.open).to.be.true;\n\n const closed = oneEvent(el, 'sp-closed');\n el.open = false;\n await closed;\n await elementUpdated(el);\n\n expect(el.open).to.be.false;\n expect(mouseenterSpy.calledOnce).to.be.true;\n });\n it('dispatches events on open/close', async () => {\n const openedSpy = spy();\n const closedSpy = spy();\n const handleOpenedSpy = (event: Event): void => openedSpy(event);\n const handleClosedSpy = (event: Event): void => closedSpy(event);\n\n const el = await fixture<Picker>(\n html`\n <sp-picker\n label=\"Select a Country with a very long label, too long in fact\"\n @sp-opened=${handleOpenedSpy}\n @sp-closed=${handleClosedSpy}\n >\n <sp-menu-item value=\"deselect\">Deselect Text</sp-menu-item>\n </sp-picker>\n `\n );\n\n await elementUpdated(el);\n const opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n await elementUpdated(el);\n\n expect(openedSpy.calledOnce).to.be.true;\n expect(closedSpy.calledOnce).to.be.false;\n\n const openedEvent = openedSpy\n .args[0][0] as CustomEvent<OverlayOpenCloseDetail>;\n expect(openedEvent.detail.interaction).to.equal('modal');\n\n const closed = oneEvent(el, 'sp-closed');\n el.open = false;\n await closed;\n await elementUpdated(el);\n\n expect(closedSpy.calledOnce).to.be.true;\n\n const closedEvent = closedSpy\n .args[0][0] as CustomEvent<OverlayOpenCloseDetail>;\n expect(closedEvent.detail.interaction).to.equal('modal');\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 type { Picker } from '@spectrum-web-components/picker';\n\nimport type { OverlayOpenCloseDetail } from '@spectrum-web-components/overlay';\nimport type { MenuItem } from '@spectrum-web-components/menu';\nimport {\n elementUpdated,\n expect,\n fixture,\n html,\n nextFrame,\n oneEvent,\n waitUntil,\n} from '@open-wc/testing';\nimport '@spectrum-web-components/shared/src/focus-visible.js';\nimport { spy, stub } from 'sinon';\nimport {\n arrowDownEvent,\n arrowLeftEvent,\n arrowRightEvent,\n arrowUpEvent,\n escapeEvent,\n testForLitDevWarnings,\n tEvent,\n} from '../../../test/testing-helpers.js';\nimport {\n a11ySnapshot,\n findAccessibilityNode,\n sendKeys,\n} from '@web/test-runner-commands';\nimport { iconsOnly } from '../stories/picker.stories.js';\nimport { sendMouse } from '../../../test/plugins/browser.js';\nimport type { Popover } from '@spectrum-web-components/popover';\nimport { ignoreResizeObserverLoopError } from '../../../test/testing-helpers.js';\nimport { isWebKit } from '@spectrum-web-components/shared/src/platform.js';\n\nignoreResizeObserverLoopError(before, after);\n\nconst isMenuActiveElement = function (): boolean {\n return document.activeElement?.localName === 'sp-menu';\n};\n\nexport function runPickerTests(): void {\n let el: Picker;\n const pickerFixture = async (): Promise<Picker> => {\n const test = await fixture<HTMLDivElement>(\n html`\n <div>\n <sp-field-label for=\"picker\">\n Where do you live?\n </sp-field-label>\n <sp-picker\n id=\"picker\"\n style=\"width: 200px; --spectrum-alias-ui-icon-chevron-size-100: 10px;\"\n >\n <sp-menu-item>Deselect</sp-menu-item>\n <sp-menu-item value=\"option-2\">\n Select Inverse\n </sp-menu-item>\n <sp-menu-item>Feather...</sp-menu-item>\n <sp-menu-item>Select and Mask...</sp-menu-item>\n <sp-menu-divider></sp-menu-divider>\n <sp-menu-item>Save Selection</sp-menu-item>\n <sp-menu-item disabled>Make Work Path</sp-menu-item>\n </sp-picker>\n </div>\n `\n );\n\n return test.querySelector('sp-picker') as Picker;\n };\n describe('standard', () => {\n beforeEach(async () => {\n el = await pickerFixture();\n await elementUpdated(el);\n });\n afterEach(async () => {\n if (el.open) {\n const closed = oneEvent(el, 'sp-closed');\n el.open = false;\n await closed;\n }\n });\n it('loads accessibly', async () => {\n await expect(el).to.be.accessible();\n });\n it('closes accessibly', async () => {\n const opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n\n expect(el.open).to.be.true;\n const accessibleCloseButton = document.querySelector(\n '.visually-hidden button'\n ) as HTMLButtonElement;\n\n const closed = oneEvent(el, 'sp-closed');\n accessibleCloseButton.click();\n await closed;\n\n expect(el.open).to.be.false;\n });\n it('accepts new selected item content', async () => {\n const option2 = el.querySelector('[value=\"option-2\"') as MenuItem;\n el.value = 'option-2';\n await elementUpdated(option2);\n await elementUpdated(el);\n expect(el.value).to.equal('option-2');\n expect((el.button.textContent || '').trim()).to.equal(\n 'Select Inverse'\n );\n let itemUpdated = oneEvent(el, 'sp-menu-item-added-or-updated');\n const newLabel1 = 'Invert Selection';\n option2.innerHTML = newLabel1;\n await itemUpdated;\n await elementUpdated(el);\n expect(el.value).to.equal('option-2');\n expect((el.button.textContent || '').trim()).to.equal(newLabel1);\n itemUpdated = oneEvent(el, 'sp-menu-item-added-or-updated');\n const newLabel2 = 'Other option';\n option2.childNodes[0].textContent = newLabel2;\n await itemUpdated;\n await elementUpdated(el);\n expect(el.value).to.equal('option-2');\n expect((el.button.textContent || '').trim()).to.equal(newLabel2);\n });\n it('accepts new selected item content when open', async () => {\n const option2 = el.querySelector('[value=\"option-2\"') as MenuItem;\n el.value = 'option-2';\n await elementUpdated(el);\n expect(el.value).to.equal('option-2');\n expect((el.button.textContent || '').trim()).to.equal(\n 'Select Inverse'\n );\n const opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n const itemUpdated = oneEvent(\n option2,\n 'sp-menu-item-added-or-updated'\n );\n option2.innerHTML = 'Invert Selection';\n await itemUpdated;\n await elementUpdated(el);\n expect(el.value).to.equal('option-2');\n expect((el.button.textContent || '').trim()).to.equal(\n 'Invert Selection'\n );\n });\n it('unsets value when children removed', async () => {\n el.value = 'option-2';\n\n await elementUpdated(el);\n expect(el.value).to.equal('option-2');\n expect((el.button.textContent || '').trim()).to.equal(\n 'Select Inverse'\n );\n\n const items = el.querySelectorAll('sp-menu-item');\n const removals: Promise<unknown>[] = [];\n items.forEach((item) => {\n const removal = oneEvent(el, 'sp-menu-item-removed');\n item.remove();\n removals.push(removal);\n });\n await Promise.all(removals);\n await elementUpdated(el);\n expect(el.value).to.equal('');\n expect((el.button.textContent || '').trim()).to.equal('');\n });\n it('accepts a new item and value at the same time', async () => {\n el.value = 'option-2';\n\n await elementUpdated(el);\n expect(el.value).to.equal('option-2');\n\n const item = document.createElement('sp-menu-item');\n item.value = 'option-new';\n item.textContent = 'New Option';\n\n el.append(item);\n await elementUpdated(el);\n\n el.value = 'option-new';\n\n await elementUpdated(el);\n expect(el.value).to.equal('option-new');\n });\n it('accepts a new item that can be selected', async () => {\n el.value = 'option-2';\n\n await elementUpdated(el);\n expect(el.value).to.equal('option-2');\n const item = document.createElement('sp-menu-item');\n item.value = 'option-new';\n item.textContent = 'New Option';\n\n el.append(item);\n\n await elementUpdated(item);\n await elementUpdated(el);\n\n let opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n // Overlaid content is outside of the context of the Picker element\n // and cannot be managed via its updateComplete cycle.\n await nextFrame();\n\n const close = oneEvent(el, 'sp-closed');\n item.click();\n await close;\n // Overlaid content is outside of the context of the Picker element\n // and cannot be managed via its updateComplete cycle.\n await nextFrame();\n\n expect(el.value, 'first time').to.equal('option-new');\n\n opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n // Overlaid content is outside of the context of the Picker element\n // and cannot be managed via its updateComplete cycle.\n await nextFrame();\n\n expect(el.value, 'second time').to.equal('option-new');\n });\n it('manages its \"name\" value in the accessibility tree', async () => {\n type NamedNode = { name: string };\n let snapshot = (await a11ySnapshot({})) as unknown as NamedNode & {\n children: NamedNode[];\n };\n\n expect(\n findAccessibilityNode<NamedNode>(\n snapshot,\n (node) => node.name === 'Where do you live?'\n ),\n '`name` is the label text'\n ).to.not.be.null;\n\n el.value = 'option-2';\n await elementUpdated(el);\n snapshot = (await a11ySnapshot({})) as unknown as NamedNode & {\n children: NamedNode[];\n };\n\n expect(\n findAccessibilityNode<NamedNode>(\n snapshot,\n (node) => node.name === 'Where do you live? Select Inverse'\n ),\n '`name` is the label text plus the selected item text'\n ).to.not.be.null;\n });\n it('manages `aria-activedescendant`', async () => {\n const firstItem = el.querySelector('sp-menu-item:nth-child(1)');\n const secondItem = el.querySelector('sp-menu-item:nth-child(2)');\n const opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n expect(\n el.optionsMenu.getAttribute('aria-activedescendant')\n ).to.equal(firstItem?.id);\n await sendKeys({ press: 'ArrowDown' });\n await elementUpdated(el);\n expect(\n el.optionsMenu.getAttribute('aria-activedescendant')\n ).to.equal(secondItem?.id);\n });\n it('renders invalid accessibly', async () => {\n el.invalid = true;\n await elementUpdated(el);\n\n expect(el.invalid).to.be.true;\n await expect(el).to.be.accessible();\n });\n it('renders selection accessibly', async () => {\n el.value = 'option-2';\n await elementUpdated(el);\n\n await expect(el).to.be.accessible();\n });\n it('opens with visible focus on a menu item on `DownArrow`', async () => {\n const firstItem = el.querySelector('sp-menu-item') as MenuItem;\n\n await elementUpdated(el);\n\n expect(firstItem.focused, 'should not visually focused').to.be\n .false;\n\n el.focus();\n await elementUpdated(el);\n const opened = oneEvent(el, 'sp-opened');\n await sendKeys({ press: 'ArrowRight' });\n await sendKeys({ press: 'ArrowLeft' });\n await sendKeys({ press: 'ArrowDown' });\n await opened;\n\n expect(el.open).to.be.true;\n expect(firstItem.focused, 'should be visually focused').to.be.true;\n\n const closed = oneEvent(el, 'sp-closed');\n await sendKeys({\n press: 'Escape',\n });\n await closed;\n\n expect(el.open).to.be.false;\n await waitUntil(() => !firstItem.focused, 'not visually focused');\n });\n it('opens without visible focus on a menu item on click', async () => {\n const firstItem = el.querySelector('sp-menu-item') as MenuItem;\n\n await elementUpdated(el);\n const boundingRect = el.getBoundingClientRect();\n\n expect(firstItem.focused, 'not visually focused').to.be.false;\n const opened = oneEvent(el, 'sp-opened');\n sendMouse({\n steps: [\n {\n type: 'click',\n position: [\n boundingRect.x + boundingRect.width / 2,\n boundingRect.y + boundingRect.height / 2,\n ],\n },\n ],\n });\n await opened;\n await elementUpdated(el);\n\n expect(el.open).to.be.true;\n expect(firstItem.focused, 'still not visually focused').to.be.false;\n });\n it('closes when becoming disabled', async () => {\n expect(el.open).to.be.false;\n el.click();\n await elementUpdated(el);\n\n expect(el.open).to.be.true;\n el.disabled = true;\n await elementUpdated(el);\n\n expect(el.open).to.be.false;\n });\n it('closes when clicking away', async () => {\n el.id = 'closing';\n const other = document.createElement('div');\n document.body.append(other);\n\n await elementUpdated(el);\n\n expect(el.open).to.be.false;\n el.click();\n await elementUpdated(el);\n\n expect(el.open).to.be.true;\n other.click();\n await waitUntil(() => !el.open, 'closed');\n\n other.remove();\n });\n it('selects', async () => {\n const secondItem = el.querySelector(\n 'sp-menu-item:nth-of-type(2)'\n ) as MenuItem;\n const button = el.button as HTMLButtonElement;\n\n const opened = oneEvent(el, 'sp-opened');\n button.click();\n await opened;\n await elementUpdated(el);\n\n expect(el.open).to.be.true;\n expect(el.selectedItem?.itemText).to.be.undefined;\n expect(el.value).to.equal('');\n\n const closed = oneEvent(el, 'sp-closed');\n secondItem.click();\n await closed;\n\n expect(el.open).to.be.false;\n expect(el.selectedItem?.itemText).to.equal('Select Inverse');\n expect(el.value).to.equal('option-2');\n });\n it('re-selects', async () => {\n const firstItem = el.querySelector(\n 'sp-menu-item:nth-of-type(1)'\n ) as MenuItem;\n const secondItem = el.querySelector(\n 'sp-menu-item:nth-of-type(2)'\n ) as MenuItem;\n const button = el.button as HTMLButtonElement;\n\n const opened = oneEvent(el, 'sp-opened');\n button.click();\n await opened;\n await nextFrame();\n\n expect(el.open).to.be.true;\n expect(el.selectedItem?.itemText).to.be.undefined;\n expect(el.value).to.equal('');\n\n const closed = oneEvent(el, 'sp-closed');\n secondItem.click();\n await closed;\n await nextFrame();\n\n expect(el.open).to.be.false;\n expect(el.selectedItem?.itemText).to.equal('Select Inverse');\n expect(el.value).to.equal('option-2');\n\n const opened2 = oneEvent(el, 'sp-opened');\n button.click();\n await opened2;\n await nextFrame();\n\n expect(el.open).to.be.true;\n expect(el.selectedItem?.itemText).to.equal('Select Inverse');\n expect(el.value).to.equal('option-2');\n\n const closed2 = oneEvent(el, 'sp-closed');\n firstItem.click();\n await closed2;\n await nextFrame();\n\n expect(el.open).to.be.false;\n expect(el.selectedItem?.itemText).to.equal('Deselect');\n expect(el.value).to.equal('Deselect');\n });\n it('dispatches bubbling and composed events', async () => {\n const changeSpy = spy();\n const parent = el.parentElement as HTMLElement;\n parent.attachShadow({ mode: 'open' });\n (parent.shadowRoot as ShadowRoot).append(el);\n const secondItem = el.querySelector(\n 'sp-menu-item:nth-of-type(2)'\n ) as MenuItem;\n\n parent.addEventListener('change', () => changeSpy());\n\n expect(el.value).to.equal('');\n\n const opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n await elementUpdated(el);\n\n const closed = oneEvent(el, 'sp-closed');\n secondItem.click();\n await closed;\n await elementUpdated(el);\n\n expect(el.value).to.equal(secondItem.value);\n expect(changeSpy.calledOnce).to.be.true;\n });\n it('can have selection prevented', async () => {\n const preventChangeSpy = spy();\n const secondItem = el.querySelector(\n 'sp-menu-item:nth-of-type(2)'\n ) as MenuItem;\n const button = el.button as HTMLButtonElement;\n\n let opened = oneEvent(el, 'sp-opened');\n button.click();\n await opened;\n await elementUpdated(el);\n\n expect(el.open).to.be.true;\n expect(el.selectedItem?.itemText).to.be.undefined;\n expect(el.value).to.equal('');\n expect(secondItem.selected).to.be.false;\n\n el.addEventListener('change', (event: Event): void => {\n event.preventDefault();\n preventChangeSpy();\n });\n\n const closed = oneEvent(el, 'sp-closed');\n opened = oneEvent(el, 'sp-opened');\n secondItem.click();\n await closed;\n await opened;\n await elementUpdated(el);\n expect(preventChangeSpy.calledOnce).to.be.true;\n expect(secondItem.selected, 'selection prevented').to.be.false;\n });\n it('can throw focus after `change`', async () => {\n const input = document.createElement('input');\n document.body.append(input);\n\n await elementUpdated(el);\n\n const secondItem = el.querySelector(\n 'sp-menu-item:nth-of-type(2)'\n ) as MenuItem;\n const button = el.button as HTMLButtonElement;\n\n const opened = oneEvent(el, 'sp-opened');\n button.click();\n await opened;\n await elementUpdated(el);\n\n expect(el.open).to.be.true;\n expect(el.selectedItem?.itemText).to.be.undefined;\n expect(el.value).to.equal('');\n expect(secondItem.selected).to.be.false;\n\n el.addEventListener('change', (): void => {\n input.focus();\n });\n\n const closed = oneEvent(el, 'sp-closed');\n secondItem.click();\n await closed;\n await elementUpdated(el);\n\n expect(el.open).to.be.false;\n expect(el.value, 'value changed').to.equal('option-2');\n expect(secondItem.selected, 'selected changed').to.be.true;\n await waitUntil(\n () => document.activeElement === input,\n 'focus throw'\n );\n input.remove();\n });\n it('opens on ArrowUp', async () => {\n const button = el.button as HTMLButtonElement;\n\n el.focus();\n await elementUpdated(el);\n\n expect(el.open, 'inially closed').to.be.false;\n\n button.dispatchEvent(tEvent());\n await elementUpdated(el);\n\n expect(el.open, 'still closed').to.be.false;\n\n button.dispatchEvent(arrowUpEvent());\n await elementUpdated(el);\n\n expect(el.open, 'open by ArrowUp').to.be.true;\n\n await waitUntil(\n () => document.querySelector('active-overlay') !== null,\n 'an active-overlay has been inserted on the page'\n );\n\n button.dispatchEvent(escapeEvent());\n await elementUpdated(el);\n await waitUntil(() => el.open === false, 'closed by Escape');\n await waitUntil(\n () => document.querySelector('active-overlay') === null,\n 'an active-overlay has been inserted on the page'\n );\n });\n it('opens on ArrowDown', async () => {\n const firstItem = el.querySelector(\n 'sp-menu-item:nth-of-type(1)'\n ) as MenuItem;\n const button = el.button as HTMLButtonElement;\n\n el.focus();\n await elementUpdated(el);\n\n expect(el.open, 'inially closed').to.be.false;\n\n const opened = oneEvent(el, 'sp-opened');\n button.dispatchEvent(arrowDownEvent());\n await opened;\n await elementUpdated(el);\n\n expect(el.open, 'open by ArrowDown').to.be.true;\n expect(el.selectedItem?.itemText).to.be.undefined;\n expect(el.value).to.equal('');\n\n const closed = oneEvent(el, 'sp-closed');\n firstItem.click();\n await closed;\n await elementUpdated(el);\n\n expect(el.open).to.be.false;\n expect(el.selectedItem?.itemText).to.equal('Deselect');\n expect(el.value).to.equal('Deselect');\n });\n it('quick selects on ArrowLeft/Right', async () => {\n const selectionSpy = spy();\n el.addEventListener('change', (event: Event) => {\n const { value } = event.target as Picker;\n selectionSpy(value);\n });\n const button = el.button as HTMLButtonElement;\n\n el.focus();\n button.dispatchEvent(arrowLeftEvent());\n\n await elementUpdated(el);\n\n expect(selectionSpy.callCount).to.equal(1);\n expect(selectionSpy.calledWith('Deselected'));\n button.dispatchEvent(arrowLeftEvent());\n\n await elementUpdated(el);\n expect(selectionSpy.callCount).to.equal(1);\n button.dispatchEvent(arrowRightEvent());\n\n await elementUpdated(el);\n expect(selectionSpy.calledWith('option-2'));\n\n button.dispatchEvent(arrowRightEvent());\n button.dispatchEvent(arrowRightEvent());\n button.dispatchEvent(arrowRightEvent());\n button.dispatchEvent(arrowRightEvent());\n\n await elementUpdated(el);\n expect(selectionSpy.callCount).to.equal(5);\n expect(selectionSpy.calledWith('Save Selection'));\n expect(selectionSpy.calledWith('Make Work Path')).to.be.false;\n });\n it('quick selects first item on ArrowRight when no value', async () => {\n const selectionSpy = spy();\n el.addEventListener('change', (event: Event) => {\n const { value } = event.target as Picker;\n selectionSpy(value);\n });\n const button = el.button as HTMLButtonElement;\n\n el.focus();\n button.dispatchEvent(arrowRightEvent());\n\n await elementUpdated(el);\n\n expect(selectionSpy.callCount).to.equal(1);\n expect(selectionSpy.calledWith('Deselected'));\n });\n it('loads', async () => {\n expect(el).to.not.be.undefined;\n });\n it('refocuses on list when open', async () => {\n const firstItem = el.querySelector('sp-menu-item') as MenuItem;\n const input = document.createElement('input');\n el.insertAdjacentElement('afterend', input);\n\n el.focus();\n await sendKeys({ press: 'Tab' });\n expect(document.activeElement === input).to.be.true;\n await sendKeys({ press: 'Shift+Tab' });\n expect(document.activeElement === el).to.be.true;\n await sendKeys({ press: 'Enter' });\n const opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n await elementUpdated(el);\n\n await waitUntil(\n () => firstItem.focused,\n 'The first items should have become focused visually.'\n );\n\n el.blur();\n await elementUpdated(el);\n\n expect(el.open).to.be.true;\n el.focus();\n await elementUpdated(el);\n await waitUntil(\n () => isMenuActiveElement(),\n 'first item refocused'\n );\n expect(el.open).to.be.true;\n expect(isMenuActiveElement()).to.be.true;\n // Force :focus-visible heuristic\n await sendKeys({ press: 'ArrowDown' });\n await sendKeys({ press: 'ArrowUp' });\n expect(firstItem.focused).to.be.true;\n });\n it('does not allow tabing to close', async () => {\n el.open = true;\n await elementUpdated(el);\n\n expect(el.open).to.be.true;\n el.focus();\n await elementUpdated(el);\n await waitUntil(\n () => isMenuActiveElement(),\n 'first item refocused'\n );\n expect(el.open).to.be.true;\n expect(isMenuActiveElement()).to.be.true;\n\n await sendKeys({ press: 'Tab' });\n\n expect(el.open, 'stays open').to.be.true;\n });\n describe('tab order', () => {\n let input1: HTMLInputElement;\n let input2: HTMLInputElement;\n beforeEach(() => {\n const surroundingInput = (): HTMLInputElement => {\n const input = document.createElement('input');\n input.type = 'text';\n input.tabIndex = 0;\n return input;\n };\n input1 = surroundingInput();\n input2 = surroundingInput();\n\n el.insertAdjacentElement('beforebegin', input1);\n el.insertAdjacentElement('afterend', input2);\n });\n afterEach(() => {\n input1.remove();\n input2.remove();\n });\n it('tabs forward through the element', async () => {\n // start at input1\n input1.focus();\n await nextFrame();\n expect(document.activeElement === input1, 'focuses input 1').to\n .true;\n // tab to the picker\n let focused = oneEvent(el, 'focus');\n await sendKeys({ press: 'Tab' });\n await focused;\n\n expect(el.focused, 'focused').to.be.true;\n expect(el.open, 'closed').to.be.false;\n expect(document.activeElement === el, 'focuses el').to.be.true;\n // tab through the picker to input2\n focused = oneEvent(input2, 'focus');\n await sendKeys({ press: 'Tab' });\n await focused;\n expect(document.activeElement === input2, 'focuses input 2').to\n .true;\n });\n it('shift+tabs backwards through the element', async () => {\n // start at input1\n input2.focus();\n await nextFrame();\n expect(document.activeElement, 'focuses input 2').to.equal(\n input2\n );\n // tab to the picker\n let focused = oneEvent(el, 'focus');\n await sendKeys({ press: 'Shift+Tab' });\n await focused;\n\n expect(el.focused, 'focused').to.be.true;\n expect(el.open, 'closed').to.be.false;\n expect(document.activeElement, 'focuses el').to.equal(el);\n // tab through the picker to input2\n focused = oneEvent(input1, 'focus');\n await sendKeys({ press: 'Shift+Tab' });\n await focused;\n expect(document.activeElement, 'focuses input 1').to.equal(\n input1\n );\n });\n it('traps tab in the menu as a `type=\"modal\"` overlay forward', async () => {\n el.focus();\n await nextFrame();\n expect(document.activeElement, 'focuses el').to.equal(el);\n // press down to open the picker\n const opened = oneEvent(el, 'sp-opened');\n sendKeys({ press: 'ArrowDown' });\n await opened;\n\n expect(el.open, 'opened').to.be.true;\n await waitUntil(\n () => isMenuActiveElement(),\n 'first item focused'\n );\n\n const activeElement = document.activeElement as HTMLElement;\n // Skip the rest of this test in Safari as I can't explain why it's failing at test time and not in real usage.\n if (!isWebKit()) {\n const blured = oneEvent(activeElement, 'blur');\n sendKeys({ press: 'Tab' });\n await blured;\n\n expect(el.open, 'picker still open').to.be.true;\n expect(document.activeElement === input1).to.be.false;\n expect(document.activeElement === input2).to.be.false;\n }\n });\n it('traps tab in the menu as a `type=\"modal\"` overlay backwards', async () => {\n el.focus();\n await nextFrame();\n expect(document.activeElement, 'focuses el').to.equal(el);\n // press down to open the picker\n const opened = oneEvent(el, 'sp-opened');\n await sendKeys({ press: 'ArrowDown' });\n await opened;\n\n expect(el.open, 'opened').to.be.true;\n await waitUntil(\n () => isMenuActiveElement(),\n 'first item focused'\n );\n\n const activeElement = document.activeElement as HTMLElement;\n // Skip the rest of this test in Safari as I can't explain why it's failing at test time and not in real usage.\n if (!isWebKit()) {\n const blured = oneEvent(activeElement, 'blur');\n sendKeys({ press: 'Shift+Tab' });\n await blured;\n\n expect(el.open, 'picker still open').to.be.true;\n expect(document.activeElement === input1).to.be.false;\n expect(document.activeElement === input2).to.be.false;\n }\n });\n it('can close and immediate tab to the next tab stop', async () => {\n el.focus();\n await nextFrame();\n expect(document.activeElement, 'focuses el').to.equal(el);\n // press down to open the picker\n const opened = oneEvent(el, 'sp-opened');\n await sendKeys({ press: 'ArrowUp' });\n await opened;\n\n expect(el.open, 'opened').to.be.true;\n await waitUntil(\n () => isMenuActiveElement(),\n 'first item focused'\n );\n\n const closed = oneEvent(el, 'sp-closed');\n el.open = false;\n await closed;\n\n expect(el.open).to.be.false;\n expect(document.activeElement === el).to.be.true;\n\n const focused = oneEvent(input2, 'focus');\n await sendKeys({ press: 'Tab' });\n await focused;\n\n expect(el.open).to.be.false;\n expect(document.activeElement === input2).to.be.true;\n });\n it('can close and immediate shift+tab to the previous tab stop', async () => {\n el.focus();\n await nextFrame();\n expect(document.activeElement, 'focuses el').to.equal(el);\n // press down to open the picker\n const opened = oneEvent(el, 'sp-opened');\n await sendKeys({ press: 'ArrowUp' });\n await opened;\n\n expect(el.open, 'opened').to.be.true;\n await waitUntil(\n () => isMenuActiveElement(),\n 'first item focused'\n );\n\n const closed = oneEvent(el, 'sp-closed');\n el.open = false;\n await closed;\n\n expect(el.open).to.be.false;\n expect(document.activeElement === el).to.be.true;\n\n const focused = oneEvent(input1, 'focus');\n await sendKeys({ press: 'Shift+Tab' });\n await focused;\n\n expect(el.open).to.be.false;\n expect(document.activeElement === input1).to.be.true;\n });\n });\n it('does not open when [readonly]', async () => {\n el.readonly = true;\n\n await elementUpdated(el);\n\n const button = el.button as HTMLButtonElement;\n\n button.click();\n await elementUpdated(el);\n\n expect(el.open).to.be.false;\n });\n it('scrolls selected into view on open', async () => {\n await (\n el as unknown as { generatePopover(): void }\n ).generatePopover();\n (el as unknown as { popoverEl: Popover }).popoverEl.style.height =\n '40px';\n\n const firstItem = el.querySelector(\n 'sp-menu-item:first-child'\n ) as MenuItem;\n const lastItem = el.querySelector(\n 'sp-menu-item:last-child'\n ) as MenuItem;\n lastItem.disabled = false;\n el.value = lastItem.value;\n\n await elementUpdated(el);\n\n el.open = true;\n\n await elementUpdated(el);\n await waitUntil(() => isMenuActiveElement(), 'first item focused');\n const getParentOffset = (el: HTMLElement): number => {\n const parentScroll = (el.parentElement as HTMLElement)\n .scrollTop;\n const parentOffset = el.offsetTop - parentScroll;\n return parentOffset;\n };\n expect(getParentOffset(lastItem)).to.be.lessThan(40);\n expect(getParentOffset(firstItem)).to.be.lessThan(-1);\n\n lastItem.dispatchEvent(\n new FocusEvent('focusin', { bubbles: true })\n );\n lastItem.dispatchEvent(arrowDownEvent());\n await elementUpdated(el);\n await nextFrame();\n expect(getParentOffset(lastItem)).to.be.greaterThan(40);\n expect(getParentOffset(firstItem)).to.be.greaterThan(-1);\n });\n });\n describe('grouped', async () => {\n const groupedFixture = async (): Promise<Picker> => {\n return fixture<Picker>(\n html`\n <sp-picker\n quiet\n label=\"I would like to use Spectrum Web Components\"\n value=\"0\"\n >\n <sp-menu-group>\n <span slot=\"header\">Timeline</span>\n <sp-menu-item value=\"0\" id=\"should-be-selected\">\n Immediately\n </sp-menu-item>\n <sp-menu-item value=\"1\">\n I'm already using them\n </sp-menu-item>\n <sp-menu-divider></sp-menu-divider>\n <sp-menu-item value=\"2\">Soon</sp-menu-item>\n <sp-menu-item value=\"3\">\n As part of my next project\n </sp-menu-item>\n <sp-menu-item value=\"4\">In the future</sp-menu-item>\n </sp-menu-group>\n </sp-picker>\n `\n );\n };\n beforeEach(async () => {\n el = await groupedFixture();\n await elementUpdated(el);\n });\n it('selects the item with a matching value in a group', async () => {\n const item = el.querySelector('#should-be-selected') as MenuItem;\n expect(item.selected).to.be.true;\n });\n });\n describe('slotted label', () => {\n const pickerFixture = async (): Promise<Picker> => {\n const test = await fixture<Picker>(\n html`\n <div>\n <sp-field-label for=\"picker-slotted\">\n Where do you live?\n </sp-field-label>\n <sp-picker id=\"picker-slotted\">\n <span slot=\"label\">\n Select a Country with a very long label, too\n long in fact\n </span>\n <sp-menu-item>Deselect</sp-menu-item>\n <sp-menu-item value=\"option-2\">\n Select Inverse\n </sp-menu-item>\n <sp-menu-item>Feather...</sp-menu-item>\n <sp-menu-item>Select and Mask...</sp-menu-item>\n <sp-menu-divider></sp-menu-divider>\n <sp-menu-item>Save Selection</sp-menu-item>\n <sp-menu-item disabled>Make Work Path</sp-menu-item>\n </sp-picker>\n </div>\n `\n );\n\n return test.querySelector('sp-picker') as Picker;\n };\n beforeEach(async () => {\n el = await pickerFixture();\n await elementUpdated(el);\n });\n afterEach(async () => {\n if (el.open) {\n const closed = oneEvent(el, 'sp-closed');\n el.open = false;\n await closed;\n }\n });\n\n it('loads accessibly w/ slotted label', async () => {\n await expect(el).to.be.accessible();\n });\n });\n describe('deprecated', () => {\n const pickerFixture = async (): Promise<Picker> => {\n const test = await fixture<Picker>(\n html`\n <div>\n <sp-field-label for=\"picker-deprecated\">\n Where do you live?\n </sp-field-label>\n <sp-picker\n id=\"picker-deprecated\"\n label=\"Select a Country with a very long label, too long in fact\"\n >\n <sp-menu>\n <sp-menu-item>Deselect</sp-menu-item>\n <sp-menu-item value=\"option-2\">\n Select Inverse\n </sp-menu-item>\n <sp-menu-item>Feather...</sp-menu-item>\n <sp-menu-item>Select and Mask...</sp-menu-item>\n <sp-menu-divider></sp-menu-divider>\n <sp-menu-item>Save Selection</sp-menu-item>\n <sp-menu-item disabled>\n Make Work Path\n </sp-menu-item>\n </sp-menu>\n </sp-picker>\n </div>\n `\n );\n\n return test.querySelector('sp-picker') as Picker;\n };\n describe('Dev mode', () => {\n it('warns in Dev Mode of deprecated `<sp-menu>` usage', async () => {\n const consoleWarnStub = stub(console, 'warn');\n el = await pickerFixture();\n await elementUpdated(el);\n\n expect(consoleWarnStub.called).to.be.true;\n const spyCall = consoleWarnStub.getCall(0);\n expect(\n spyCall.args.at(0).includes('<sp-menu>'),\n 'confirm <sp-menu>-centric message'\n ).to.be.true;\n expect(\n spyCall.args.at(-1),\n 'confirm `data` shape'\n ).to.deep.equal({\n data: {\n localName: 'sp-picker',\n type: 'api',\n level: 'deprecation',\n },\n });\n consoleWarnStub.restore();\n if (el.open) {\n const closed = oneEvent(el, 'sp-closed');\n el.open = false;\n await closed;\n }\n });\n });\n describe('Dev mode ignored', () => {\n const { ignoreWarningLocalNames } = window.__swc;\n before(() => {\n window.__swc.ignoreWarningLocalNames = {\n 'sp-picker': true,\n };\n });\n before(() => {\n window.__swc.ignoreWarningLocalNames = ignoreWarningLocalNames;\n });\n beforeEach(async () => {\n el = await pickerFixture();\n await elementUpdated(el);\n });\n afterEach(async () => {\n if (el.open) {\n const closed = oneEvent(el, 'sp-closed');\n el.open = false;\n await closed;\n }\n });\n it('selects with deprecated syntax', async () => {\n const secondItem = el.querySelector(\n 'sp-menu-item:nth-of-type(2)'\n ) as MenuItem;\n\n const opened = oneEvent(el, 'sp-opened');\n el.button.click();\n await opened;\n await elementUpdated(el);\n\n expect(el.open).to.be.true;\n expect(el.selectedItem?.itemText).to.be.undefined;\n expect(el.value).to.equal('');\n\n const closed = oneEvent(el, 'sp-closed');\n secondItem.click();\n await closed;\n\n expect(el.open).to.be.false;\n expect(el.selectedItem?.itemText).to.equal('Select Inverse');\n expect(el.value).to.equal('option-2');\n });\n });\n });\n testForLitDevWarnings(async () => await pickerFixture());\n it('manages its \"name\" value in the accessibility tree when [icons-only]', async () => {\n const test = await fixture<HTMLDivElement>(html`\n <div>${iconsOnly({})}</div>\n `);\n const el = test.querySelector('sp-picker') as Picker;\n\n await elementUpdated(el);\n type NamedNode = { name: string };\n let snapshot = (await a11ySnapshot({})) as unknown as NamedNode & {\n children: NamedNode[];\n };\n\n expect(\n findAccessibilityNode<NamedNode>(\n snapshot,\n (node) => node.name === 'Choose an action type... Delete'\n ),\n '`name` is the label text'\n ).to.not.be.null;\n\n el.value = '2';\n await elementUpdated(el);\n snapshot = (await a11ySnapshot({})) as unknown as NamedNode & {\n children: NamedNode[];\n };\n\n expect(\n findAccessibilityNode<NamedNode>(\n snapshot,\n (node) => node.name === 'Choose an action type... Copy'\n ),\n '`name` is the label text plus the selected item text'\n ).to.not.be.null;\n });\n it('toggles between pickers', async () => {\n const el2 = await pickerFixture();\n const el1 = await pickerFixture();\n\n el1.id = 'away';\n el2.id = 'other';\n\n await Promise.all([elementUpdated(el1), elementUpdated(el2)]);\n\n expect(el1.open, 'closed 1').to.be.false;\n expect(el2.open, 'closed 1').to.be.false;\n let open = oneEvent(el1, 'sp-opened');\n el1.click();\n await open;\n expect(el1.open).to.be.true;\n expect(el2.open).to.be.false;\n\n open = oneEvent(el2, 'sp-opened');\n let closed = oneEvent(el1, 'sp-closed');\n el2.click();\n await Promise.all([open, closed]);\n expect(el1.open).to.be.false;\n expect(el2.open).to.be.true;\n\n open = oneEvent(el1, 'sp-opened');\n closed = oneEvent(el2, 'sp-closed');\n el1.click();\n await Promise.all([open, closed]);\n expect(el1.open).to.be.true;\n expect(el2.open).to.be.false;\n\n closed = oneEvent(el1, 'sp-closed');\n sendKeys({\n press: 'Escape',\n });\n await closed;\n expect(el1.open).to.be.false;\n });\n it('displays selected item text by default', async () => {\n const el = await fixture<Picker>(\n html`\n <sp-picker\n value=\"inverse\"\n label=\"Select a Country with a very long label, too long in fact\"\n >\n <sp-menu-item value=\"deselect\">Deselect Text</sp-menu-item>\n <sp-menu-item value=\"inverse\">Select Inverse</sp-menu-item>\n <sp-menu-item>Feather...</sp-menu-item>\n <sp-menu-item>Select and Mask...</sp-menu-item>\n <sp-menu-divider></sp-menu-divider>\n <sp-menu-item>Save Selection</sp-menu-item>\n <sp-menu-item disabled>Make Work Path</sp-menu-item>\n </sp-picker>\n `\n );\n\n await elementUpdated(el);\n await waitUntil(\n () => el.selectedItem?.itemText === 'Select Inverse',\n `Selected Item Text: ${el.selectedItem?.itemText}`\n );\n\n const firstItem = el.querySelector(\n 'sp-menu-item:nth-of-type(1)'\n ) as MenuItem;\n const secondItem = el.querySelector(\n 'sp-menu-item:nth-of-type(2)'\n ) as MenuItem;\n\n expect(el.value).to.equal('inverse');\n expect(el.selectedItem?.itemText).to.equal('Select Inverse');\n\n el.focus();\n await elementUpdated(el);\n expect(\n el === document.activeElement,\n `activeElement is ${document.activeElement?.localName}`\n ).to.be.true;\n\n const opened = oneEvent(el, 'sp-opened');\n sendKeys({ press: 'Enter' });\n await opened;\n await elementUpdated(el.optionsMenu);\n\n expect(\n el.optionsMenu === document.activeElement,\n `activeElement is ${document.activeElement?.localName}`\n ).to.be.true;\n\n expect(firstItem.focused, 'firstItem NOT \"focused\"').to.be.false;\n expect(secondItem.focused, 'secondItem \"focused\"').to.be.true;\n expect(el.optionsMenu.getAttribute('aria-activedescendant')).to.equal(\n secondItem.id\n );\n });\n it('resets value when item not available', async () => {\n const el = await fixture<Picker>(\n html`\n <sp-picker\n value=\"missing\"\n label=\"Select a Country with a very long label, too long in fact\"\n >\n <sp-menu-item value=\"deselect\">Deselect Text</sp-menu-item>\n <sp-menu-item value=\"inverse\">Select Inverse</sp-menu-item>\n <sp-menu-item>Feather...</sp-menu-item>\n <sp-menu-item>Select and Mask...</sp-menu-item>\n <sp-menu-divider></sp-menu-divider>\n <sp-menu-item>Save Selection</sp-menu-item>\n <sp-menu-item disabled>Make Work Path</sp-menu-item>\n </sp-picker>\n `\n );\n\n await elementUpdated(el);\n await waitUntil(() => el.value === '');\n\n expect(el.value).to.equal('');\n expect(el.selectedItem?.itemText).to.be.undefined;\n });\n it('allows event listeners on child items', async () => {\n const mouseenterSpy = spy();\n const handleMouseenter = (): void => mouseenterSpy();\n const el = await fixture<Picker>(\n html`\n <sp-picker\n label=\"Select a Country with a very long label, too long in fact\"\n >\n <sp-menu-item\n value=\"deselect\"\n @mouseenter=${handleMouseenter}\n >\n Deselect Text\n </sp-menu-item>\n </sp-picker>\n `\n );\n\n await elementUpdated(el);\n\n const hoverEl = el.querySelector('sp-menu-item') as MenuItem;\n\n const opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n await elementUpdated(el);\n\n expect(el.open).to.be.true;\n hoverEl.dispatchEvent(new MouseEvent('mouseenter'));\n await elementUpdated(el);\n\n expect(el.open).to.be.true;\n\n const closed = oneEvent(el, 'sp-closed');\n el.open = false;\n await closed;\n await elementUpdated(el);\n\n expect(el.open).to.be.false;\n expect(mouseenterSpy.calledOnce).to.be.true;\n });\n it('dispatches events on open/close', async () => {\n const openedSpy = spy();\n const closedSpy = spy();\n const handleOpenedSpy = (event: Event): void => openedSpy(event);\n const handleClosedSpy = (event: Event): void => closedSpy(event);\n\n const el = await fixture<Picker>(\n html`\n <sp-picker\n label=\"Select a Country with a very long label, too long in fact\"\n @sp-opened=${handleOpenedSpy}\n @sp-closed=${handleClosedSpy}\n >\n <sp-menu-item value=\"deselect\">Deselect Text</sp-menu-item>\n </sp-picker>\n `\n );\n\n await elementUpdated(el);\n const opened = oneEvent(el, 'sp-opened');\n el.open = true;\n await opened;\n await elementUpdated(el);\n\n expect(openedSpy.calledOnce).to.be.true;\n expect(closedSpy.calledOnce).to.be.false;\n\n const openedEvent = openedSpy\n .args[0][0] as CustomEvent<OverlayOpenCloseDetail>;\n expect(openedEvent.detail.interaction).to.equal('modal');\n\n const closed = oneEvent(el, 'sp-closed');\n el.open = false;\n await closed;\n await elementUpdated(el);\n\n expect(closedSpy.calledOnce).to.be.true;\n\n const closedEvent = closedSpy\n .args[0][0] as CustomEvent<OverlayOpenCloseDetail>;\n expect(closedEvent.detail.interaction).to.equal('modal');\n });\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["el", "pickerFixture", "_a"]
7
7
  }