accessibility-insights-report 7.0.0 → 7.1.0

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.
Files changed (2) hide show
  1. package/drop/index.js +165 -113
  2. package/package.json +1 -1
package/drop/index.js CHANGED
@@ -1060,14 +1060,32 @@ var outcomeIconMapInverted = {
1060
1060
  unscannable: /* @__PURE__ */ React11.createElement(InapplicableIconInverted, null)
1061
1061
  };
1062
1062
 
1063
+ // src/common/components/guidance-tags.tsx
1064
+ var import_lodash4 = require("lodash");
1065
+ var React12 = __toESM(require("react"));
1066
+ var GuidanceTags = NamedFC("GuidanceTags", (props) => {
1067
+ const { links, deps } = props;
1068
+ if ((0, import_lodash4.isEmpty)(links)) {
1069
+ return null;
1070
+ }
1071
+ const tags = deps.getGuidanceTagsFromGuidanceLinks(links);
1072
+ if ((0, import_lodash4.isEmpty)(tags)) {
1073
+ return null;
1074
+ }
1075
+ const tagElements = tags.map((tag, index) => {
1076
+ return /* @__PURE__ */ React12.createElement("span", { key: index }, tag.displayText);
1077
+ });
1078
+ return /* @__PURE__ */ React12.createElement("span", { className: "guidance-tags" }, tagElements);
1079
+ });
1080
+
1063
1081
  // src/reports/components/report-sections/minimal-rule-header.tsx
1064
- var React13 = __toESM(require("react"));
1082
+ var React14 = __toESM(require("react"));
1065
1083
 
1066
1084
  // src/reports/components/report-sections/minimal-rule-header.scss
1067
1085
  var minimal_rule_header_default = { "outcomeChipContainer": "outcome-chip-container--G5Dfr" };
1068
1086
 
1069
1087
  // src/reports/components/outcome-chip.tsx
1070
- var React12 = __toESM(require("react"));
1088
+ var React13 = __toESM(require("react"));
1071
1089
 
1072
1090
  // src/reports/components/outcome-icon.tsx
1073
1091
  var OutcomeIcon = NamedFC(
@@ -1078,10 +1096,10 @@ var OutcomeIcon = NamedFC(
1078
1096
  // src/reports/components/outcome-chip.tsx
1079
1097
  var failureCountAutomationId = "count";
1080
1098
  var OutcomeChip = NamedFC("OutcomeChip", (props) => {
1081
- const { outcomeType, count } = props;
1099
+ const { outcomeType, count, labelledBy } = props;
1082
1100
  const { pastTense } = outcomeTypeSemantics[outcomeType];
1083
1101
  const text = `${count} ${pastTense}`;
1084
- return /* @__PURE__ */ React12.createElement("span", { className: "outcome-chip outcome-chip-" + outcomeType, title: text }, /* @__PURE__ */ React12.createElement("span", { className: "icon" }, /* @__PURE__ */ React12.createElement(OutcomeIcon, { outcomeType })), /* @__PURE__ */ React12.createElement(
1102
+ return /* @__PURE__ */ React13.createElement("span", { className: "outcome-chip outcome-chip-" + outcomeType, title: text }, /* @__PURE__ */ React13.createElement("span", { className: "icon" }, /* @__PURE__ */ React13.createElement(OutcomeIcon, { outcomeType })), /* @__PURE__ */ React13.createElement(
1085
1103
  "span",
1086
1104
  {
1087
1105
  "data-automation-id": failureCountAutomationId,
@@ -1090,24 +1108,30 @@ var OutcomeChip = NamedFC("OutcomeChip", (props) => {
1090
1108
  },
1091
1109
  " ",
1092
1110
  count
1093
- ), /* @__PURE__ */ React12.createElement("span", { className: "screen-reader-only" }, text));
1111
+ ), !labelledBy && /* @__PURE__ */ React13.createElement("span", { className: "screen-reader-only" }, text));
1094
1112
  });
1095
1113
 
1096
1114
  // src/reports/components/report-sections/minimal-rule-header.tsx
1097
1115
  var cardsRuleIdAutomationId = "cards-rule-id";
1098
1116
  var ruleDetailAutomationId = "rule-detail";
1099
1117
  var MinimalRuleHeader = NamedFC("MinimalRuleHeader", (props) => {
1100
- const { outcomeType, rule, outcomeCounter } = props;
1118
+ const { outcomeType, rule, outcomeCounter, deps } = props;
1101
1119
  const renderCountBadge = () => {
1102
1120
  if (outcomeType !== "fail" && outcomeType !== "review") {
1103
1121
  return null;
1104
1122
  }
1105
1123
  const count = outcomeCounter(rule.nodes);
1106
- return /* @__PURE__ */ React13.createElement("span", { "aria-hidden": "true" }, /* @__PURE__ */ React13.createElement(OutcomeChip, { count, outcomeType }));
1124
+ return /* @__PURE__ */ React14.createElement("span", { "aria-hidden": "true" }, /* @__PURE__ */ React14.createElement(OutcomeChip, { count, outcomeType, labelledBy: true }));
1107
1125
  };
1108
- const renderRuleName = () => /* @__PURE__ */ React13.createElement("span", { "data-automation-id": cardsRuleIdAutomationId, className: "rule-details-id" }, /* @__PURE__ */ React13.createElement("strong", null, rule.id));
1109
- const renderDescription = () => /* @__PURE__ */ React13.createElement("span", { className: "rule-details-description" }, rule.description);
1110
- return /* @__PURE__ */ React13.createElement("span", { "data-automation-id": ruleDetailAutomationId, className: "rule-detail" }, /* @__PURE__ */ React13.createElement("span", { className: minimal_rule_header_default.outcomeChipContainer }, renderCountBadge()), /* @__PURE__ */ React13.createElement("span", null, renderRuleName(), ": ", renderDescription()));
1126
+ const renderRuleName = () => /* @__PURE__ */ React14.createElement("span", { "data-automation-id": cardsRuleIdAutomationId, className: "rule-details-id" }, /* @__PURE__ */ React14.createElement("strong", null, rule.id));
1127
+ const renderDescription = () => /* @__PURE__ */ React14.createElement("span", { className: "rule-details-description" }, rule.description);
1128
+ const renderGuidanceTags = () => {
1129
+ if (!rule.guidance) {
1130
+ return null;
1131
+ }
1132
+ return /* @__PURE__ */ React14.createElement(GuidanceTags, { deps, links: rule.guidance });
1133
+ };
1134
+ return /* @__PURE__ */ React14.createElement("span", { "data-automation-id": ruleDetailAutomationId, className: "rule-detail" }, /* @__PURE__ */ React14.createElement("span", { className: minimal_rule_header_default.outcomeChipContainer }, renderCountBadge()), /* @__PURE__ */ React14.createElement("span", null, renderRuleName(), ": ", renderDescription(), rule.guidance && " ", renderGuidanceTags()));
1111
1135
  });
1112
1136
 
1113
1137
  // src/common/components/cards/rule-content.tsx
@@ -1123,7 +1147,7 @@ var getNeedsReviewRuleResourcesUrl = (ruleId) => {
1123
1147
  };
1124
1148
 
1125
1149
  // src/common/components/cards/instance-details-group.tsx
1126
- var React26 = __toESM(require("react"));
1150
+ var React27 = __toESM(require("react"));
1127
1151
 
1128
1152
  // src/common/components/cards/instance-details.tsx
1129
1153
  var import_classnames = __toESM(require("classnames"));
@@ -1178,19 +1202,19 @@ ${howToFix}`);
1178
1202
  }
1179
1203
 
1180
1204
  // src/common/components/cards/instance-details.tsx
1181
- var import_lodash4 = require("lodash");
1182
- var React25 = __toESM(require("react"));
1205
+ var import_lodash5 = require("lodash");
1206
+ var React26 = __toESM(require("react"));
1183
1207
 
1184
1208
  // src/reports/components/instance-details.scss
1185
1209
  var instance_details_default = { "hiddenHighlightButton": "hidden-highlight-button--vu3B3", "instanceDetailsCard": "instance-details-card--owGQF", "instanceDetailsCardContainer": "instance-details-card-container--KLHTp", "selected": "selected--wEA4l", "focused": "focused--pvBWq", "interactive": "interactive--an0ab", "reportInstanceTable": "report-instance-table--3VoZX", "row": "row---3i35", "rowLabel": "row-label--FlVZl", "rowContent": "row-content--07KUh" };
1186
1210
 
1187
1211
  // src/common/components/cards/failed-instances-markup-footer.tsx
1188
- var React19 = __toESM(require("react"));
1212
+ var React20 = __toESM(require("react"));
1189
1213
 
1190
1214
  // src/common/icons/copy-details-icon.tsx
1191
- var React14 = __toESM(require("react"));
1215
+ var React15 = __toESM(require("react"));
1192
1216
  var d = "M5.5028 4.62704L5.5 6.75V17.2542C5.5 19.0491 6.95507 20.5042 8.75 20.5042L17.3663 20.5045C17.0573 21.3782 16.224 22.0042 15.2444 22.0042H8.75C6.12665 22.0042 4 19.8776 4 17.2542V6.75C4 5.76929 4.62745 4.93512 5.5028 4.62704ZM17.75 2C18.9926 2 20 3.00736 20 4.25V17.25C20 18.4926 18.9926 19.5 17.75 19.5H8.75C7.50736 19.5 6.5 18.4926 6.5 17.25V4.25C6.5 3.00736 7.50736 2 8.75 2H17.75ZM17.75 3.5H8.75C8.33579 3.5 8 3.83579 8 4.25V17.25C8 17.6642 8.33579 18 8.75 18H17.75C18.1642 18 18.5 17.6642 18.5 17.25V4.25C18.5 3.83579 18.1642 3.5 17.75 3.5Z";
1193
- var CopyDetailsIcon = NamedFC("CopyDetailsIcon", () => /* @__PURE__ */ React14.createElement(
1217
+ var CopyDetailsIcon = NamedFC("CopyDetailsIcon", () => /* @__PURE__ */ React15.createElement(
1194
1218
  "svg",
1195
1219
  {
1196
1220
  width: "16",
@@ -1200,7 +1224,7 @@ var CopyDetailsIcon = NamedFC("CopyDetailsIcon", () => /* @__PURE__ */ React14.c
1200
1224
  role: "img",
1201
1225
  "aria-hidden": "true"
1202
1226
  },
1203
- /* @__PURE__ */ React14.createElement("path", { d, fill: "#212121", transform: "scale(2)" })
1227
+ /* @__PURE__ */ React15.createElement("path", { d, fill: "#212121", transform: "scale(2)" })
1204
1228
  ));
1205
1229
 
1206
1230
  // src/common/utils/id-generator.ts
@@ -1216,7 +1240,7 @@ function generateDeterministicContentId(content) {
1216
1240
  }
1217
1241
 
1218
1242
  // src/common/components/cards/copy-content-button.tsx
1219
- var React15 = __toESM(require("react"));
1243
+ var React16 = __toESM(require("react"));
1220
1244
 
1221
1245
  // src/common/components/cards/failed-instances-markup-footer.scss
1222
1246
  var failed_instances_markup_footer_default = { "markupFooter": "markup-footer--HEVHv", "feedbackText": "feedback-text--yBb6Z", "feedbackButtons": "feedback-buttons--rDHVY", "buttonsGroupLeft": "buttons-group-left--JSoCT", "buttonsGroupRight": "buttons-group-right--SKsSu", "feedbackButton": "feedback-button--Vn-lA", "aiContentLabel": "ai-content-label--1cidK", "notificationContainer": "notification-container--axJpL", "copyNotification": "copy-notification--MlMTG", "fadeInOut": "fade-in-out--AuVTM", "visible": "visible--GCwEf", "hiddenContent": "hidden-content--9JuU6" };
@@ -1232,7 +1256,7 @@ var CopyContentButton = NamedFC(
1232
1256
  const copyButtonId = `copy-button-${idBase}`;
1233
1257
  const copyContentId = `copy-content-${idBase}`;
1234
1258
  const notificationId = `copy-notification-${idBase}`;
1235
- return /* @__PURE__ */ React15.createElement(React15.Fragment, null, /* @__PURE__ */ React15.createElement(
1259
+ return /* @__PURE__ */ React16.createElement(React16.Fragment, null, /* @__PURE__ */ React16.createElement(
1236
1260
  "button",
1237
1261
  {
1238
1262
  id: copyButtonId,
@@ -1241,9 +1265,9 @@ var CopyContentButton = NamedFC(
1241
1265
  "aria-label": "Copy failure details to clipboard",
1242
1266
  "aria-describedby": contentToCopy ? copyContentId : void 0
1243
1267
  },
1244
- /* @__PURE__ */ React15.createElement(CopyDetailsIcon, null),
1245
- /* @__PURE__ */ React15.createElement("span", null, "Copy Failure Details")
1246
- ), contentToCopy && /* @__PURE__ */ React15.createElement("span", { id: copyContentId, className: failed_instances_markup_footer_default.hiddenContent }, contentToCopy), /* @__PURE__ */ React15.createElement("div", { className: failed_instances_markup_footer_default.notificationContainer }, /* @__PURE__ */ React15.createElement(
1268
+ /* @__PURE__ */ React16.createElement(CopyDetailsIcon, null),
1269
+ /* @__PURE__ */ React16.createElement("span", null, "Copy Failure Details")
1270
+ ), contentToCopy && /* @__PURE__ */ React16.createElement("span", { id: copyContentId, className: failed_instances_markup_footer_default.hiddenContent }, contentToCopy), /* @__PURE__ */ React16.createElement("div", { className: failed_instances_markup_footer_default.notificationContainer }, /* @__PURE__ */ React16.createElement(
1247
1271
  "span",
1248
1272
  {
1249
1273
  id: notificationId,
@@ -1257,9 +1281,9 @@ var CopyContentButton = NamedFC(
1257
1281
  );
1258
1282
 
1259
1283
  // src/common/icons/thumbs-down-icon.tsx
1260
- var React16 = __toESM(require("react"));
1284
+ var React17 = __toESM(require("react"));
1261
1285
  var d2 = "M16.4996 17.9852C16.4996 20.4271 15.3595 22.1838 13.4932 22.1838C12.5183 22.1838 12.1518 21.6411 11.8021 20.3881L11.596 19.6162C11.495 19.2574 11.3192 18.6467 11.069 17.7852C11.0623 17.7621 11.0524 17.7403 11.0396 17.7203L8.17281 13.2346C7.49476 12.1736 6.49429 11.3581 5.31841 10.9079L4.84513 10.7267C3.5984 10.2494 2.87457 8.94562 3.1287 7.63505L3.53319 5.54897C3.77462 4.30388 4.71828 3.31298 5.9501 3.01106L13.5778 1.14153C16.109 0.521138 18.6674 2.05607 19.3113 4.5814L20.7262 10.1306C21.1697 11.8698 20.1192 13.6393 18.3799 14.0828C18.1175 14.1497 17.8478 14.1835 17.5769 14.1835H15.7536C16.2497 15.8164 16.4996 17.0762 16.4996 17.9852ZM4.60127 7.92059C4.48576 8.5163 4.81477 9.10893 5.38147 9.3259L5.85475 9.5071C7.33036 10.0721 8.58585 11.0954 9.43674 12.4268L12.3035 16.9125C12.3935 17.0534 12.4629 17.2064 12.5095 17.367L13.0614 19.2873L13.2731 20.0786C13.4125 20.5666 13.4827 20.6838 13.4932 20.6838C14.3609 20.6838 14.9996 19.6998 14.9996 17.9852C14.9996 17.1007 14.6738 15.6497 14.0158 13.6701C13.8544 13.1846 14.2158 12.6835 14.7275 12.6835H17.5769C17.7228 12.6835 17.868 12.6653 18.0093 12.6293C18.9459 12.3905 19.5115 11.4377 19.2727 10.5012L17.8578 4.952C17.4172 3.22415 15.6668 2.17393 13.9349 2.59841L6.30718 4.46794C5.64389 4.63051 5.13577 5.16407 5.00577 5.83451L4.60127 7.92059Z";
1262
- var ThumbsDownIcon = NamedFC("ThumbsDownIcon", () => /* @__PURE__ */ React16.createElement(
1286
+ var ThumbsDownIcon = NamedFC("ThumbsDownIcon", () => /* @__PURE__ */ React17.createElement(
1263
1287
  "svg",
1264
1288
  {
1265
1289
  viewBox: "0 0 48 48",
@@ -1270,13 +1294,13 @@ var ThumbsDownIcon = NamedFC("ThumbsDownIcon", () => /* @__PURE__ */ React16.cre
1270
1294
  role: "img",
1271
1295
  "aria-hidden": "true"
1272
1296
  },
1273
- /* @__PURE__ */ React16.createElement("path", { d: d2, fill: "#212121", transform: "scale(2)" })
1297
+ /* @__PURE__ */ React17.createElement("path", { d: d2, fill: "#212121", transform: "scale(2)" })
1274
1298
  ));
1275
1299
 
1276
1300
  // src/common/icons/thumbs-up-icon.tsx
1277
- var React17 = __toESM(require("react"));
1301
+ var React18 = __toESM(require("react"));
1278
1302
  var d3 = "M16.4996 5.20259C16.4996 2.76065 15.3595 1.00391 13.4932 1.00391C12.467 1.00391 12.1149 1.60527 11.747 3.00348C11.6719 3.29233 11.635 3.43297 11.596 3.57157C11.495 3.93031 11.3192 4.54106 11.069 5.40258C11.0623 5.42566 11.0524 5.44741 11.0396 5.46749L8.17281 9.95315C7.49476 11.0141 6.49429 11.8296 5.31841 12.2798L4.84513 12.461C3.5984 12.9384 2.87457 14.2421 3.1287 15.5527L3.53319 17.6388C3.77462 18.8839 4.71828 19.8748 5.9501 20.1767L13.5778 22.0462C16.109 22.6666 18.6674 21.1317 19.3113 18.6064L20.7262 13.0572C21.1697 11.3179 20.1192 9.54845 18.3799 9.10498C18.1175 9.03807 17.8478 9.00422 17.5769 9.00422H15.7536C16.2497 7.37133 16.4996 6.11155 16.4996 5.20259ZM4.60127 15.2672C4.48576 14.6715 4.81477 14.0788 5.38147 13.8619L5.85475 13.6806C7.33036 13.1157 8.58585 12.0923 9.43674 10.7609L12.3035 6.27526C12.3935 6.13437 12.4629 5.98131 12.5095 5.82074C12.7608 4.95574 12.9375 4.34175 13.0399 3.97786C13.083 3.82461 13.1239 3.66916 13.1976 3.38519C13.3875 2.66348 13.4809 2.50391 13.4932 2.50391C14.3609 2.50391 14.9996 3.48797 14.9996 5.20259C14.9996 6.08708 14.6738 7.53803 14.0158 9.51766C13.8544 10.0032 14.2158 10.5042 14.7275 10.5042H17.5769C17.7228 10.5042 17.868 10.5224 18.0093 10.5585C18.9459 10.7973 19.5115 11.7501 19.2727 12.6866L17.8578 18.2357C17.4172 19.9636 15.6668 21.0138 13.9349 20.5893L6.30718 18.7198C5.64389 18.5572 5.13577 18.0237 5.00577 17.3532L4.60127 15.2672Z";
1279
- var ThumbsUpIcon = NamedFC("ThumbsUpIcon", () => /* @__PURE__ */ React17.createElement(
1303
+ var ThumbsUpIcon = NamedFC("ThumbsUpIcon", () => /* @__PURE__ */ React18.createElement(
1280
1304
  "svg",
1281
1305
  {
1282
1306
  viewBox: "0 0 48 48",
@@ -1287,18 +1311,18 @@ var ThumbsUpIcon = NamedFC("ThumbsUpIcon", () => /* @__PURE__ */ React17.createE
1287
1311
  role: "img",
1288
1312
  "aria-hidden": "true"
1289
1313
  },
1290
- /* @__PURE__ */ React17.createElement("path", { d: d3, fill: "#212121", transform: "scale(2)" })
1314
+ /* @__PURE__ */ React18.createElement("path", { d: d3, fill: "#212121", transform: "scale(2)" })
1291
1315
  ));
1292
1316
 
1293
1317
  // src/common/components/cards/feedback-buttons.tsx
1294
- var React18 = __toESM(require("react"));
1318
+ var React19 = __toESM(require("react"));
1295
1319
  var FeedbackButtons = NamedFC(
1296
1320
  "FeedbackButtons",
1297
1321
  ({ feedbackURL, isIssueAIdetected = false }) => {
1298
1322
  const getFeedbackUrl = () => {
1299
1323
  return feedbackURL;
1300
1324
  };
1301
- return /* @__PURE__ */ React18.createElement(React18.Fragment, null, /* @__PURE__ */ React18.createElement("a", { href: getFeedbackUrl(), className: failed_instances_markup_footer_default.feedbackButton, title: "Helpful" }, /* @__PURE__ */ React18.createElement(ThumbsUpIcon, null)), /* @__PURE__ */ React18.createElement("a", { href: getFeedbackUrl(), className: failed_instances_markup_footer_default.feedbackButton, title: "Unhelpful" }, /* @__PURE__ */ React18.createElement(ThumbsDownIcon, null)), isIssueAIdetected && /* @__PURE__ */ React18.createElement("span", { className: failed_instances_markup_footer_default.aiContentLabel }, "AI-generated content may be incorrect"));
1325
+ return /* @__PURE__ */ React19.createElement(React19.Fragment, null, /* @__PURE__ */ React19.createElement("a", { href: getFeedbackUrl(), className: failed_instances_markup_footer_default.feedbackButton, title: "Helpful" }, /* @__PURE__ */ React19.createElement(ThumbsUpIcon, null)), /* @__PURE__ */ React19.createElement("a", { href: getFeedbackUrl(), className: failed_instances_markup_footer_default.feedbackButton, title: "Unhelpful" }, /* @__PURE__ */ React19.createElement(ThumbsDownIcon, null)), isIssueAIdetected && /* @__PURE__ */ React19.createElement("span", { className: failed_instances_markup_footer_default.aiContentLabel }, "AI-generated content may be incorrect"));
1302
1326
  }
1303
1327
  );
1304
1328
 
@@ -1318,14 +1342,14 @@ var MarkupFooter = NamedFC("MarkupFooter", (props) => {
1318
1342
  if (!feedbackURL && !supportsCopy) {
1319
1343
  return null;
1320
1344
  }
1321
- return /* @__PURE__ */ React19.createElement("div", { className: failed_instances_markup_footer_default.markupFooter }, feedbackURL && /* @__PURE__ */ React19.createElement("div", { className: failed_instances_markup_footer_default.buttonsGroupLeft }, /* @__PURE__ */ React19.createElement(
1345
+ return /* @__PURE__ */ React20.createElement("div", { className: failed_instances_markup_footer_default.markupFooter }, feedbackURL && /* @__PURE__ */ React20.createElement("div", { className: failed_instances_markup_footer_default.buttonsGroupLeft }, /* @__PURE__ */ React20.createElement(
1322
1346
  FeedbackButtons,
1323
1347
  {
1324
1348
  feedbackURL,
1325
1349
  instanceId,
1326
1350
  isIssueAIdetected
1327
1351
  }
1328
- )), supportsCopy && /* @__PURE__ */ React19.createElement("div", { className: failed_instances_markup_footer_default.buttonsGroupRight }, /* @__PURE__ */ React19.createElement(
1352
+ )), supportsCopy && /* @__PURE__ */ React20.createElement("div", { className: failed_instances_markup_footer_default.buttonsGroupRight }, /* @__PURE__ */ React20.createElement(
1329
1353
  CopyContentButton,
1330
1354
  {
1331
1355
  instanceId,
@@ -1345,8 +1369,8 @@ var import_react4 = require("@fluentui/react");
1345
1369
  var import_Styling = require("@fluentui/react/lib/Styling");
1346
1370
 
1347
1371
  // src/common/icons/more-actions-menu-icon.tsx
1348
- var React20 = __toESM(require("react"));
1349
- var MoreActionsMenuIcon = NamedFC("MoreActionsMenuIcon", () => /* @__PURE__ */ React20.createElement(
1372
+ var React21 = __toESM(require("react"));
1373
+ var MoreActionsMenuIcon = NamedFC("MoreActionsMenuIcon", () => /* @__PURE__ */ React21.createElement(
1350
1374
  "svg",
1351
1375
  {
1352
1376
  width: "10",
@@ -1358,23 +1382,23 @@ var MoreActionsMenuIcon = NamedFC("MoreActionsMenuIcon", () => /* @__PURE__ */ R
1358
1382
  role: "img",
1359
1383
  "aria-hidden": "true"
1360
1384
  },
1361
- /* @__PURE__ */ React20.createElement("circle", { cx: "5", cy: "14", r: "1.5" }),
1362
- /* @__PURE__ */ React20.createElement("circle", { cx: "5", cy: "8", r: "1.5" }),
1363
- /* @__PURE__ */ React20.createElement("circle", { cx: "5", cy: "2", r: "1.5" })
1385
+ /* @__PURE__ */ React21.createElement("circle", { cx: "5", cy: "14", r: "1.5" }),
1386
+ /* @__PURE__ */ React21.createElement("circle", { cx: "5", cy: "8", r: "1.5" }),
1387
+ /* @__PURE__ */ React21.createElement("circle", { cx: "5", cy: "2", r: "1.5" })
1364
1388
  ));
1365
1389
 
1366
1390
  // src/common/components/cards/card-footer-instance-action-buttons.tsx
1367
- var React22 = __toESM(require("react"));
1391
+ var React23 = __toESM(require("react"));
1368
1392
 
1369
1393
  // src/common/components/toast.tsx
1370
1394
  var import_utilities3 = require("@fluentui/utilities");
1371
- var React21 = __toESM(require("react"));
1395
+ var React22 = __toESM(require("react"));
1372
1396
 
1373
1397
  // src/common/components/toast.scss
1374
1398
  var toast_default = { "toastContainer": "toast-container--L-5HM", "toastContent": "toast-content--8-Mx1" };
1375
1399
 
1376
1400
  // src/common/components/toast.tsx
1377
- var Toast = class _Toast extends React21.Component {
1401
+ var Toast = class _Toast extends React22.Component {
1378
1402
  timeoutId;
1379
1403
  static defaultProps = {
1380
1404
  timeoutLength: 6e3
@@ -1396,7 +1420,7 @@ var Toast = class _Toast extends React21.Component {
1396
1420
  }
1397
1421
  }
1398
1422
  render() {
1399
- return /* @__PURE__ */ React21.createElement("div", { className: toast_default.toastContainer, "aria-live": "polite" }, this.state.toastVisible ? /* @__PURE__ */ React21.createElement("div", { className: (0, import_utilities3.css)("ms-fadeIn100", toast_default.toastContent) }, this.state.content) : null);
1423
+ return /* @__PURE__ */ React22.createElement("div", { className: toast_default.toastContainer, "aria-live": "polite" }, this.state.toastVisible ? /* @__PURE__ */ React22.createElement("div", { className: (0, import_utilities3.css)("ms-fadeIn100", toast_default.toastContent) }, this.state.content) : null);
1400
1424
  }
1401
1425
  };
1402
1426
 
@@ -1406,10 +1430,10 @@ var card_footer_instance_action_buttons_default = { "kebabMenuIcon": "kebab-menu
1406
1430
  // src/common/components/cards/card-footer-instance-action-buttons.tsx
1407
1431
  (0, import_Styling.registerIcons)({
1408
1432
  icons: {
1409
- MoreActionsMenuIcon: /* @__PURE__ */ React22.createElement(MoreActionsMenuIcon, null)
1433
+ MoreActionsMenuIcon: /* @__PURE__ */ React23.createElement(MoreActionsMenuIcon, null)
1410
1434
  }
1411
1435
  });
1412
- var CardFooterInstanceActionButtons = class extends React22.Component {
1436
+ var CardFooterInstanceActionButtons = class extends React23.Component {
1413
1437
  constructor(props) {
1414
1438
  super(props);
1415
1439
  this.focusButtonAfterDialogClosed = () => {
@@ -1420,7 +1444,7 @@ var CardFooterInstanceActionButtons = class extends React22.Component {
1420
1444
  (_c = this.fileIssueButtonRef) == null ? void 0 : _c.focus();
1421
1445
  }
1422
1446
  };
1423
- this.toastRef = React22.createRef();
1447
+ this.toastRef = React23.createRef();
1424
1448
  }
1425
1449
  render() {
1426
1450
  const menuItems = this.getMenuItems();
@@ -1431,7 +1455,7 @@ var CardFooterInstanceActionButtons = class extends React22.Component {
1431
1455
  // The wrapper has to be a real element, not a <>, because we want the placeholder elements
1432
1456
  // the dialog/toast involve to be considered as part of the button for the purposes of layout
1433
1457
  // calculation in this component's parent.
1434
- /* @__PURE__ */ React22.createElement("div", { onKeyDown: (event) => event.stopPropagation() }, this.renderButtons(), this.renderCopyFailureDetailsToast())
1458
+ /* @__PURE__ */ React23.createElement("div", { onKeyDown: (event) => event.stopPropagation() }, this.renderButtons(), this.renderCopyFailureDetailsToast())
1435
1459
  );
1436
1460
  }
1437
1461
  renderButtons() {
@@ -1443,7 +1467,7 @@ var CardFooterInstanceActionButtons = class extends React22.Component {
1443
1467
  }
1444
1468
  }
1445
1469
  renderKebabButton() {
1446
- return /* @__PURE__ */ React22.createElement(
1470
+ return /* @__PURE__ */ React23.createElement(
1447
1471
  import_react4.ActionButton,
1448
1472
  {
1449
1473
  componentRef: (ref) => this.kebabButtonRef = ref,
@@ -1462,7 +1486,7 @@ var CardFooterInstanceActionButtons = class extends React22.Component {
1462
1486
  }
1463
1487
  renderExpandedButtons() {
1464
1488
  const menuItems = this.getMenuItems();
1465
- return /* @__PURE__ */ React22.createElement(React22.Fragment, null, menuItems.map((props) => /* @__PURE__ */ React22.createElement("span", { key: props.key }, /* @__PURE__ */ React22.createElement(
1489
+ return /* @__PURE__ */ React23.createElement(React23.Fragment, null, menuItems.map((props) => /* @__PURE__ */ React23.createElement("span", { key: props.key }, /* @__PURE__ */ React23.createElement(
1466
1490
  import_react4.ActionButton,
1467
1491
  {
1468
1492
  onClick: props.onClick,
@@ -1478,7 +1502,7 @@ var CardFooterInstanceActionButtons = class extends React22.Component {
1478
1502
  if (!cardInteractionSupport.supportsCopyFailureDetails) {
1479
1503
  return null;
1480
1504
  }
1481
- return /* @__PURE__ */ React22.createElement(Toast, { ref: this.toastRef, deps: this.props.deps });
1505
+ return /* @__PURE__ */ React23.createElement(Toast, { ref: this.toastRef, deps: this.props.deps });
1482
1506
  }
1483
1507
  getMenuItems() {
1484
1508
  return this.props.deps.cardFooterMenuItemsBuilder.getCardFooterMenuItems({
@@ -1491,8 +1515,8 @@ var CardFooterInstanceActionButtons = class extends React22.Component {
1491
1515
  };
1492
1516
 
1493
1517
  // src/common/icons/highlight-status-icons.tsx
1494
- var React23 = __toESM(require("react"));
1495
- var HighlightVisibleIcon = NamedFC("HighlightVisibleIcon", () => /* @__PURE__ */ React23.createElement(
1518
+ var React24 = __toESM(require("react"));
1519
+ var HighlightVisibleIcon = NamedFC("HighlightVisibleIcon", () => /* @__PURE__ */ React24.createElement(
1496
1520
  "svg",
1497
1521
  {
1498
1522
  width: "34",
@@ -1502,7 +1526,7 @@ var HighlightVisibleIcon = NamedFC("HighlightVisibleIcon", () => /* @__PURE__ */
1502
1526
  role: "img",
1503
1527
  "aria-hidden": "true"
1504
1528
  },
1505
- /* @__PURE__ */ React23.createElement(
1529
+ /* @__PURE__ */ React24.createElement(
1506
1530
  "path",
1507
1531
  {
1508
1532
  fillRule: "evenodd",
@@ -1511,7 +1535,7 @@ var HighlightVisibleIcon = NamedFC("HighlightVisibleIcon", () => /* @__PURE__ */
1511
1535
  }
1512
1536
  )
1513
1537
  ));
1514
- var HighlightUnavailableIcon = NamedFC("HighlightUnavailableIcon", () => /* @__PURE__ */ React23.createElement(
1538
+ var HighlightUnavailableIcon = NamedFC("HighlightUnavailableIcon", () => /* @__PURE__ */ React24.createElement(
1515
1539
  "svg",
1516
1540
  {
1517
1541
  width: "34",
@@ -1521,7 +1545,7 @@ var HighlightUnavailableIcon = NamedFC("HighlightUnavailableIcon", () => /* @__P
1521
1545
  role: "img",
1522
1546
  "aria-hidden": "true"
1523
1547
  },
1524
- /* @__PURE__ */ React23.createElement(
1548
+ /* @__PURE__ */ React24.createElement(
1525
1549
  "path",
1526
1550
  {
1527
1551
  fillRule: "evenodd",
@@ -1530,7 +1554,7 @@ var HighlightUnavailableIcon = NamedFC("HighlightUnavailableIcon", () => /* @__P
1530
1554
  }
1531
1555
  )
1532
1556
  ));
1533
- var HighlightHiddenIcon = NamedFC("HighlightHiddenIcon", () => /* @__PURE__ */ React23.createElement(
1557
+ var HighlightHiddenIcon = NamedFC("HighlightHiddenIcon", () => /* @__PURE__ */ React24.createElement(
1534
1558
  "svg",
1535
1559
  {
1536
1560
  width: "34",
@@ -1540,7 +1564,7 @@ var HighlightHiddenIcon = NamedFC("HighlightHiddenIcon", () => /* @__PURE__ */ R
1540
1564
  role: "img",
1541
1565
  "aria-hidden": "true"
1542
1566
  },
1543
- /* @__PURE__ */ React23.createElement(
1567
+ /* @__PURE__ */ React24.createElement(
1544
1568
  "path",
1545
1569
  {
1546
1570
  fillRule: "evenodd",
@@ -1551,7 +1575,7 @@ var HighlightHiddenIcon = NamedFC("HighlightHiddenIcon", () => /* @__PURE__ */ R
1551
1575
  ));
1552
1576
 
1553
1577
  // src/common/components/cards/instance-details-footer.tsx
1554
- var React24 = __toESM(require("react"));
1578
+ var React25 = __toESM(require("react"));
1555
1579
 
1556
1580
  // src/common/components/cards/instance-details-footer.scss
1557
1581
  var instance_details_footer_default = { "foot": "foot--p1DfC", "highlightStatus": "highlight-status--xJvvI" };
@@ -1573,7 +1597,7 @@ var InstanceDetailsFooter = NamedFC(
1573
1597
  }
1574
1598
  const issueDetailsData = deps.unifiedResultToIssueFilingDataConverter.convert(result, rule, targetAppInfo);
1575
1599
  const kebabMenuAriaLabel = `More Actions for failure instance ${result.identifiers.identifier} in rule ${rule.id}`;
1576
- return /* @__PURE__ */ React24.createElement(
1600
+ return /* @__PURE__ */ React25.createElement(
1577
1601
  CardFooterInstanceActionButtons,
1578
1602
  {
1579
1603
  deps,
@@ -1591,13 +1615,13 @@ var InstanceDetailsFooter = NamedFC(
1591
1615
  const highlightState = result.highlightStatus;
1592
1616
  const label = "Highlight " + highlightState;
1593
1617
  const icon = {
1594
- unavailable: /* @__PURE__ */ React24.createElement(HighlightUnavailableIcon, null),
1595
- visible: /* @__PURE__ */ React24.createElement(HighlightVisibleIcon, null),
1596
- hidden: /* @__PURE__ */ React24.createElement(HighlightHiddenIcon, null)
1618
+ unavailable: /* @__PURE__ */ React25.createElement(HighlightUnavailableIcon, null),
1619
+ visible: /* @__PURE__ */ React25.createElement(HighlightVisibleIcon, null),
1620
+ hidden: /* @__PURE__ */ React25.createElement(HighlightHiddenIcon, null)
1597
1621
  }[highlightState];
1598
- return /* @__PURE__ */ React24.createElement("div", { className: instance_details_footer_default.highlightStatus }, icon, /* @__PURE__ */ React24.createElement(import_react5.Label, null, label));
1622
+ return /* @__PURE__ */ React25.createElement("div", { className: instance_details_footer_default.highlightStatus }, icon, /* @__PURE__ */ React25.createElement(import_react5.Label, null, label));
1599
1623
  };
1600
- return /* @__PURE__ */ React24.createElement("div", { className: instance_details_footer_default.foot }, renderHighlightStatus(), renderKebabMenu());
1624
+ return /* @__PURE__ */ React25.createElement("div", { className: instance_details_footer_default.foot }, renderHighlightStatus(), renderKebabMenu());
1601
1625
  }
1602
1626
  );
1603
1627
 
@@ -1616,7 +1640,7 @@ var InstanceDetails = NamedFC("InstanceDetails", (props) => {
1616
1640
  narrowModeStatus,
1617
1641
  feedbackURL
1618
1642
  } = props;
1619
- const [cardFocused, setCardFocus] = React25.useState(false);
1643
+ const [cardFocused, setCardFocus] = React26.useState(false);
1620
1644
  const isHighlightSupported = deps.cardInteractionSupport.supportsHighlighting;
1621
1645
  const hasFeedbackEnabledTag = () => {
1622
1646
  if (!rule || !rule.guidance) return false;
@@ -1644,7 +1668,7 @@ var InstanceDetails = NamedFC("InstanceDetails", (props) => {
1644
1668
  event.stopPropagation();
1645
1669
  cardSelectionMessageCreator == null ? void 0 : cardSelectionMessageCreator.toggleCardSelection(result.ruleId, result.uid, event);
1646
1670
  };
1647
- const hiddenButton = React25.useRef(null);
1671
+ const hiddenButton = React26.useRef(null);
1648
1672
  const cardHighlightingProperties = isHighlightSupported ? {
1649
1673
  onClick: (event) => {
1650
1674
  var _a, _b;
@@ -1660,13 +1684,13 @@ var InstanceDetails = NamedFC("InstanceDetails", (props) => {
1660
1684
  const target = ((_a = result.identifiers) == null ? void 0 : _a.target) || ((_b = result.identifiers) == null ? void 0 : _b.identifier) || ((_c = result.identifiers) == null ? void 0 : _c.conciseName) || "";
1661
1685
  return typeof target === "string" ? target : JSON.stringify(target);
1662
1686
  };
1663
- return /* @__PURE__ */ React25.createElement(
1687
+ return /* @__PURE__ */ React26.createElement(
1664
1688
  "div",
1665
1689
  {
1666
1690
  "data-automation-id": instanceCardAutomationId,
1667
1691
  className: instanceDetailsCardContainerStyling
1668
1692
  },
1669
- /* @__PURE__ */ React25.createElement("div", { className: instanceDetailsCardStyling, ...cardHighlightingProperties }, /* @__PURE__ */ React25.createElement("div", null, /* @__PURE__ */ React25.createElement("table", { className: instance_details_default.reportInstanceTable }, /* @__PURE__ */ React25.createElement("tbody", null, renderCardRowsForPropertyBag(result.identifiers, props), renderCardRowsForPropertyBag(result.descriptors, props), renderCardRowsForPropertyBag(result.resolution, props))), isHighlightSupported && cardSelectionMessageCreator !== void 0 && /* @__PURE__ */ React25.createElement(
1693
+ /* @__PURE__ */ React26.createElement("div", { className: instanceDetailsCardStyling, ...cardHighlightingProperties }, /* @__PURE__ */ React26.createElement("div", null, /* @__PURE__ */ React26.createElement("table", { className: instance_details_default.reportInstanceTable }, /* @__PURE__ */ React26.createElement("tbody", null, renderCardRowsForPropertyBag(result.identifiers, props), renderCardRowsForPropertyBag(result.descriptors, props), renderCardRowsForPropertyBag(result.resolution, props))), isHighlightSupported && cardSelectionMessageCreator !== void 0 && /* @__PURE__ */ React26.createElement(
1670
1694
  "button",
1671
1695
  {
1672
1696
  ref: hiddenButton,
@@ -1677,7 +1701,7 @@ var InstanceDetails = NamedFC("InstanceDetails", (props) => {
1677
1701
  onFocus: (_) => setCardFocus(true),
1678
1702
  onBlur: (_) => setCardFocus(false)
1679
1703
  }
1680
- ), /* @__PURE__ */ React25.createElement(
1704
+ ), /* @__PURE__ */ React26.createElement(
1681
1705
  InstanceDetailsFooter,
1682
1706
  {
1683
1707
  deps,
@@ -1687,7 +1711,7 @@ var InstanceDetails = NamedFC("InstanceDetails", (props) => {
1687
1711
  targetAppInfo,
1688
1712
  narrowModeStatus
1689
1713
  }
1690
- ), /* @__PURE__ */ React25.createElement(
1714
+ ), /* @__PURE__ */ React26.createElement(
1691
1715
  MarkupFooter,
1692
1716
  {
1693
1717
  deps,
@@ -1705,13 +1729,13 @@ var InstanceDetails = NamedFC("InstanceDetails", (props) => {
1705
1729
  var renderCardRowsForPropertyBag = (propertyBag, props) => {
1706
1730
  let propertyIndex = 0;
1707
1731
  const cardRows = [];
1708
- (0, import_lodash4.forOwn)(propertyBag, (propertyData, propertyName) => {
1732
+ (0, import_lodash5.forOwn)(propertyBag, (propertyData, propertyName) => {
1709
1733
  const propertyConfig = props.deps.getPropertyConfigById(propertyName);
1710
- if (!(0, import_lodash4.isEmpty)(propertyConfig)) {
1734
+ if (!(0, import_lodash5.isEmpty)(propertyConfig)) {
1711
1735
  const CardRow = propertyConfig.cardRow;
1712
1736
  ++propertyIndex;
1713
1737
  cardRows.push(
1714
- /* @__PURE__ */ React25.createElement(
1738
+ /* @__PURE__ */ React26.createElement(
1715
1739
  CardRow,
1716
1740
  {
1717
1741
  deps: props.deps,
@@ -1723,7 +1747,7 @@ var renderCardRowsForPropertyBag = (propertyBag, props) => {
1723
1747
  );
1724
1748
  }
1725
1749
  });
1726
- return /* @__PURE__ */ React25.createElement(React25.Fragment, null, cardRows);
1750
+ return /* @__PURE__ */ React26.createElement(React26.Fragment, null, cardRows);
1727
1751
  };
1728
1752
 
1729
1753
  // src/common/components/cards/instance-details-group.scss
@@ -1750,14 +1774,14 @@ var InstanceDetailsGroup = NamedFC(
1750
1774
  url: rule.url,
1751
1775
  guidance: rule.guidance
1752
1776
  };
1753
- return /* @__PURE__ */ React26.createElement(
1777
+ return /* @__PURE__ */ React27.createElement(
1754
1778
  "ul",
1755
1779
  {
1756
1780
  "data-automation-id": ruleContentAutomationId,
1757
1781
  className: instance_details_group_default.instanceDetailsList,
1758
1782
  "aria-label": "instances with additional information like path, snippet and how to fix"
1759
1783
  },
1760
- nodes.map((node, index) => /* @__PURE__ */ React26.createElement("li", { key: `instance-details-${index}` }, /* @__PURE__ */ React26.createElement(
1784
+ nodes.map((node, index) => /* @__PURE__ */ React27.createElement("li", { key: `instance-details-${index}` }, /* @__PURE__ */ React27.createElement(
1761
1785
  InstanceDetails,
1762
1786
  {
1763
1787
  ...{ index },
@@ -1776,11 +1800,11 @@ var InstanceDetailsGroup = NamedFC(
1776
1800
  );
1777
1801
 
1778
1802
  // src/common/components/guidance-links.tsx
1779
- var import_lodash5 = require("lodash");
1780
- var React27 = __toESM(require("react"));
1803
+ var import_lodash6 = require("lodash");
1804
+ var React28 = __toESM(require("react"));
1781
1805
  var GuidanceLinks = NamedFC("GuidanceLinks", (props) => {
1782
1806
  const { links, classNameForDiv } = props;
1783
- if ((0, import_lodash5.isEmpty)(links)) {
1807
+ if ((0, import_lodash6.isEmpty)(links)) {
1784
1808
  return null;
1785
1809
  }
1786
1810
  const renderLinks = () => {
@@ -1790,34 +1814,16 @@ var GuidanceLinks = NamedFC("GuidanceLinks", (props) => {
1790
1814
  });
1791
1815
  };
1792
1816
  const getLinksWithDestinations = () => {
1793
- return links.filter((link2) => !(0, import_lodash5.isEmpty)(link2.href));
1817
+ return links.filter((link2) => !(0, import_lodash6.isEmpty)(link2.href));
1794
1818
  };
1795
1819
  const renderLink = (link2, index, length) => {
1796
1820
  const addComma = index !== length - 1;
1797
- const comma = addComma ? /* @__PURE__ */ React27.createElement("span", null, ",\xA0") : null;
1821
+ const comma = addComma ? /* @__PURE__ */ React28.createElement("span", null, ",\xA0") : null;
1798
1822
  const LinkComponent = props.LinkComponent;
1799
- return /* @__PURE__ */ React27.createElement(React27.Fragment, { key: `guidance-link-${index}` }, /* @__PURE__ */ React27.createElement(LinkComponent, { href: link2.href, onClick: (event) => event.stopPropagation() }, link2.text.toUpperCase()), comma);
1823
+ return /* @__PURE__ */ React28.createElement(React28.Fragment, { key: `guidance-link-${index}` }, /* @__PURE__ */ React28.createElement(LinkComponent, { href: link2.href, onClick: (event) => event.stopPropagation() }, link2.text.toUpperCase()), comma);
1800
1824
  };
1801
1825
  const spanClassName = classNameForDiv || "guidance-links";
1802
- return /* @__PURE__ */ React27.createElement("span", { className: spanClassName }, renderLinks());
1803
- });
1804
-
1805
- // src/common/components/guidance-tags.tsx
1806
- var import_lodash6 = require("lodash");
1807
- var React28 = __toESM(require("react"));
1808
- var GuidanceTags = NamedFC("GuidanceTags", (props) => {
1809
- const { links, deps } = props;
1810
- if ((0, import_lodash6.isEmpty)(links)) {
1811
- return null;
1812
- }
1813
- const tags = deps.getGuidanceTagsFromGuidanceLinks(links);
1814
- if ((0, import_lodash6.isEmpty)(tags)) {
1815
- return null;
1816
- }
1817
- const tagElements = tags.map((tag, index) => {
1818
- return /* @__PURE__ */ React28.createElement("span", { key: index }, tag.displayText);
1819
- });
1820
- return /* @__PURE__ */ React28.createElement("span", { className: "guidance-tags" }, tagElements);
1826
+ return /* @__PURE__ */ React28.createElement("span", { className: spanClassName }, renderLinks());
1821
1827
  });
1822
1828
 
1823
1829
  // src/common/components/cards/rule-resources.tsx
@@ -1844,9 +1850,13 @@ var RuleResources = NamedFC(
1844
1850
  return /* @__PURE__ */ React29.createElement("span", { className: rule_resources_default.ruleDetailsId }, /* @__PURE__ */ React29.createElement(deps.LinkComponent, { href: ruleUrl }, "More information about ", ruleId));
1845
1851
  };
1846
1852
  const renderGuidanceLinks = () => {
1847
- return /* @__PURE__ */ React29.createElement(GuidanceLinks, { links: rule.guidance, LinkComponent: deps.LinkComponent });
1853
+ var _a;
1854
+ const links = ((_a = rule.guidance) == null ? void 0 : _a.filter((guidanceLink) => !(0, import_lodash7.isEmpty)(guidanceLink.href))) || [];
1855
+ return /* @__PURE__ */ React29.createElement(GuidanceLinks, { links, LinkComponent: deps.LinkComponent });
1856
+ };
1857
+ const renderGuidanceTags = () => {
1858
+ return /* @__PURE__ */ React29.createElement(GuidanceTags, { deps, links: rule.guidance });
1848
1859
  };
1849
- const renderGuidanceTags = () => /* @__PURE__ */ React29.createElement(GuidanceTags, { deps, links: rule.guidance });
1850
1860
  return /* @__PURE__ */ React29.createElement("div", { className: rule_resources_default.ruleMoreResources }, renderTitle(), renderRuleLink(), /* @__PURE__ */ React29.createElement("span", { className: rule_resources_default.ruleGuidance }, renderGuidanceLinks(), renderGuidanceTags()));
1851
1861
  }
1852
1862
  );
@@ -1877,7 +1887,12 @@ var RulesWithInstances = NamedFC(
1877
1887
  cardSelectionMessageCreator,
1878
1888
  narrowModeStatus
1879
1889
  }) => {
1880
- const getCollapsibleComponentProps = (rule, idx, buttonAriaLabel) => {
1890
+ const getCollapsibleComponentProps = (rule, idx) => {
1891
+ const { pastTense } = outcomeTypeSemantics[outcomeType];
1892
+ const count = outcomeCounter(rule.nodes);
1893
+ const guidanceTags2 = rule.guidance && deps.getGuidanceTagsFromGuidanceLinks ? deps.getGuidanceTagsFromGuidanceLinks(rule.guidance) : [];
1894
+ const guidanceTagsText = guidanceTags2.length > 0 ? `${guidanceTags2.map((tag) => tag.displayText).join(" ")}` : "";
1895
+ const buttonAriaLabel = `${count} ${pastTense} ${rule.id}: ${rule.description}${guidanceTagsText ? ` ${guidanceTagsText}` : ""}`.trim();
1881
1896
  return {
1882
1897
  id: rule.id,
1883
1898
  key: `summary-details-${idx + 1}`,
@@ -1885,6 +1900,7 @@ var RulesWithInstances = NamedFC(
1885
1900
  MinimalRuleHeader,
1886
1901
  {
1887
1902
  key: rule.id,
1903
+ deps,
1888
1904
  rule,
1889
1905
  outcomeType,
1890
1906
  outcomeCounter
@@ -1904,9 +1920,9 @@ var RulesWithInstances = NamedFC(
1904
1920
  feedbackURL: deps.feedbackURL || void 0
1905
1921
  }
1906
1922
  ),
1923
+ buttonAriaLabel,
1907
1924
  containerAutomationId: ruleGroupAutomationId,
1908
1925
  containerClassName: rules_with_instances_default.collapsibleRuleDetailsGroup,
1909
- buttonAriaLabel,
1910
1926
  headingLevel,
1911
1927
  deps,
1912
1928
  onExpandToggle: (event) => {
@@ -1922,11 +1938,8 @@ var RulesWithInstances = NamedFC(
1922
1938
  "data-automation-id": ruleDetailsGroupAutomationId
1923
1939
  },
1924
1940
  rules.map((rule, idx) => {
1925
- const { pastTense } = outcomeTypeSemantics[outcomeType];
1926
- const count = outcomeCounter(rule.nodes);
1927
- const buttonAriaLabel = `${count} ${pastTense} ${rule.id} ${rule.description}`;
1928
1941
  const CollapsibleComponent = deps.collapsibleControl(
1929
- getCollapsibleComponentProps(rule, idx, buttonAriaLabel)
1942
+ getCollapsibleComponentProps(rule, idx)
1930
1943
  );
1931
1944
  return CollapsibleComponent;
1932
1945
  })
@@ -4649,6 +4662,14 @@ var guidanceTags = {
4649
4662
  AI_SCAN: {
4650
4663
  id: "AI_SCAN",
4651
4664
  displayText: "AI suggested"
4665
+ },
4666
+ PREVIEW_FEATURE: {
4667
+ id: "PREVIEW_FEATURE",
4668
+ displayText: "Preview"
4669
+ },
4670
+ EXPERIMENTAL_FEATURE: {
4671
+ id: "EXPERIMENTAL_FEATURE",
4672
+ displayText: "Experimental"
4652
4673
  }
4653
4674
  };
4654
4675
 
@@ -5434,6 +5455,16 @@ var AiScan = {
5434
5455
  href: "",
5435
5456
  tags: [guidanceTags.AI_SCAN]
5436
5457
  };
5458
+ var PreviewFeature = {
5459
+ text: "",
5460
+ href: "",
5461
+ tags: [guidanceTags.PREVIEW_FEATURE]
5462
+ };
5463
+ var ExperimentalFeature = {
5464
+ text: "",
5465
+ href: "",
5466
+ tags: [guidanceTags.EXPERIMENTAL_FEATURE]
5467
+ };
5437
5468
  var bestPracticeToGuidanceTagOverrideMapping = {
5438
5469
  "aria-allowed-role": ["wcag131", "wcag412"],
5439
5470
  "presentation-role-conflict": ["wcag131"]
@@ -5448,6 +5479,12 @@ function mapAxeTagToGuidanceLink(axeTag) {
5448
5479
  if (axeTag === "ai-scan") {
5449
5480
  return AiScan;
5450
5481
  }
5482
+ if (axeTag === "preview-feature") {
5483
+ return PreviewFeature;
5484
+ }
5485
+ if (axeTag === "experimental-feature") {
5486
+ return ExperimentalFeature;
5487
+ }
5451
5488
  const metadata = guidelineMetadata[getGuidelineKeyByAxeTag(axeTag)] ?? null;
5452
5489
  if (metadata === null) {
5453
5490
  return null;
@@ -5501,7 +5538,7 @@ var ResultDecorator = class {
5501
5538
  decorateResults(results) {
5502
5539
  const scanResults = {
5503
5540
  passes: this.decorateAxeRuleResults(results.passes),
5504
- violations: this.decorateAxeRuleResults(results.violations),
5541
+ violations: this.decorateAxeRuleResults(results.violations, false, true),
5505
5542
  inapplicable: this.decorateAxeRuleResults(results.inapplicable, true),
5506
5543
  incomplete: this.decorateAxeRuleResults(results.incomplete),
5507
5544
  timestamp: results.timestamp,
@@ -5511,13 +5548,18 @@ var ResultDecorator = class {
5511
5548
  };
5512
5549
  return scanResults;
5513
5550
  }
5514
- decorateAxeRuleResults(ruleResults, isInapplicable = false) {
5551
+ decorateAxeRuleResults(ruleResults, isInapplicable = false, isViolation = false) {
5515
5552
  return ruleResults.reduce((filteredArray, result) => {
5516
5553
  this.messageDecorator.decorateResultWithMessages(result);
5517
- const processedResult = this.ruleProcessor.suppressChecksByMessages(
5554
+ let processedResult = this.ruleProcessor.suppressChecksByMessages(
5518
5555
  result,
5519
5556
  !isInapplicable
5520
5557
  );
5558
+ if (processedResult != null) {
5559
+ if (isViolation) {
5560
+ processedResult = this.ruleProcessor.suppressFluentUITabsterResult(processedResult);
5561
+ }
5562
+ }
5521
5563
  if (processedResult != null) {
5522
5564
  filteredArray.push({
5523
5565
  ...processedResult,
@@ -5547,6 +5589,14 @@ var RuleProcessor = class {
5547
5589
  }
5548
5590
  return rule;
5549
5591
  }
5592
+ suppressFluentUITabsterResult(result) {
5593
+ if (result.id === "aria-hidden-focus") {
5594
+ result.nodes = result.nodes.filter((node) => {
5595
+ return !(node.html.includes("data-tabster-dummy") || node.html.includes('data-is-focus-trap-zone-bumper="true"'));
5596
+ });
5597
+ }
5598
+ return result;
5599
+ }
5550
5600
  normalizeMessage(message) {
5551
5601
  return message.toLowerCase().trim();
5552
5602
  }
@@ -5599,7 +5649,8 @@ var FixInstructionProcessor = class {
5599
5649
  contrastRatioRegExp = new RegExp(`${this.contrastRatioText}`, "i");
5600
5650
  originalMiddleSentence = " and the original foreground color: ";
5601
5651
  process(fixInstruction, recommendColor) {
5602
- return this.tryProcessAsColorContrastRecommendation(fixInstruction, recommendColor) ?? this.tryProcessAsRelatedNodesReference(fixInstruction) ?? this.processAsNoop(fixInstruction);
5652
+ const instruction = fixInstruction || "";
5653
+ return this.tryProcessAsColorContrastRecommendation(instruction, recommendColor) ?? this.tryProcessAsRelatedNodesReference(instruction) ?? this.processAsNoop(instruction);
5603
5654
  }
5604
5655
  processAsNoop(fixInstruction) {
5605
5656
  return /* @__PURE__ */ React81.createElement(React81.Fragment, null, fixInstruction);
@@ -5609,7 +5660,7 @@ var FixInstructionProcessor = class {
5609
5660
  // with the aria-required-children rule and is likely to be obsoleted with the resolution of
5610
5661
  // https://github.com/dequelabs/axe-core/issues/3842
5611
5662
  tryProcessAsRelatedNodesReference(input) {
5612
- if (!input.endsWith(" (see related nodes)")) {
5663
+ if (!input || !input.endsWith(" (see related nodes)")) {
5613
5664
  return null;
5614
5665
  }
5615
5666
  const inputBody = input.slice(0, input.length - " (see related nodes)".length);
@@ -5953,7 +6004,8 @@ var FixInstructionPanel = NamedFC(
5953
6004
  };
5954
6005
  const renderInstructions = (checkType) => {
5955
6006
  const instructionList = props.checks.map((check, checkIndex) => {
5956
- return /* @__PURE__ */ React89.createElement("li", { key: `instruction-${CheckType[checkType]}-${checkIndex + 1}` }, fixInstructionProcessor.process(check.message, props.deps.recommendColor));
6007
+ const message = check.message || "";
6008
+ return /* @__PURE__ */ React89.createElement("li", { key: `instruction-${CheckType[checkType]}-${checkIndex + 1}` }, fixInstructionProcessor.process(message, props.deps.recommendColor));
5957
6009
  });
5958
6010
  return instructionList;
5959
6011
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "accessibility-insights-report",
3
- "version": "7.0.0",
3
+ "version": "7.1.0",
4
4
  "description": "Accessibility Insights Report",
5
5
  "license": "MIT",
6
6
  "files": [