@elementor/editor-audits 4.4.0-1114 → 4.4.0-1116

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -7,17 +7,18 @@ import { utilitiesMenu } from "@elementor/editor-app-bar";
7
7
 
8
8
  // src/hooks/use-audit-toggle-props.ts
9
9
  import { ShieldCheckIcon as ShieldCheckIcon2 } from "@elementor/icons";
10
- import { __ as __24 } from "@wordpress/i18n";
10
+ import { __ as __17 } from "@wordpress/i18n";
11
11
 
12
12
  // src/editor-panel.tsx
13
13
  import { createFloatingPanel } from "@elementor/editor-floating-panels";
14
14
 
15
15
  // src/components/audit-panel.tsx
16
- import * as React25 from "react";
16
+ import * as React19 from "react";
17
17
  import { getHostDocumentId as getHostDocumentId3 } from "@elementor/editor-elements";
18
18
  import { FloatingPanelBody, FloatingPanelFooter, FloatingPanelHeader } from "@elementor/editor-floating-panels";
19
- import { Box as Box21, Button as Button5, Typography as Typography16 } from "@elementor/ui";
20
- import { __ as __23 } from "@wordpress/i18n";
19
+ import { ReloadIcon } from "@elementor/icons";
20
+ import { Box as Box15, Button as Button5, Typography as Typography12 } from "@elementor/ui";
21
+ import { __ as __16 } from "@wordpress/i18n";
21
22
 
22
23
  // src/constants.ts
23
24
  import { __ } from "@wordpress/i18n";
@@ -137,9 +138,6 @@ function getRegisteredAudits() {
137
138
  return Array.from(registry.values());
138
139
  }
139
140
 
140
- // src/utils/audit-status-summary.ts
141
- import { __ as __2 } from "@wordpress/i18n";
142
-
143
141
  // src/utils/is-scored-audit.ts
144
142
  function isScoredAudit(audit26) {
145
143
  return audit26.weight > 0;
@@ -194,52 +192,6 @@ function partitionAuditResults(report, options = {}) {
194
192
  totalViolations
195
193
  };
196
194
  }
197
- function auditStatusDisplayCounts(report) {
198
- let pass = 0;
199
- let skipped = 0;
200
- let totalViolations = 0;
201
- for (const { audit: audit26, result } of report.auditResults) {
202
- if (!isScoredAudit(audit26)) {
203
- continue;
204
- }
205
- switch (result.status) {
206
- case "fail":
207
- totalViolations += result.violations.length;
208
- break;
209
- case "pass":
210
- pass++;
211
- break;
212
- case "skipped":
213
- skipped++;
214
- break;
215
- }
216
- }
217
- return {
218
- fail: totalViolations,
219
- pass,
220
- skipped
221
- };
222
- }
223
- function auditStatusColor(status) {
224
- switch (status) {
225
- case "fail":
226
- return "error";
227
- case "pass":
228
- return "success";
229
- case "skipped":
230
- return "default";
231
- }
232
- }
233
- function auditStatusLabel(status) {
234
- switch (status) {
235
- case "fail":
236
- return __2("Failed audits", "elementor");
237
- case "pass":
238
- return __2("Passed audits", "elementor");
239
- case "skipped":
240
- return __2("Skipped audits", "elementor");
241
- }
242
- }
243
195
  function getPopulatedCategories(categoryTotals, categories) {
244
196
  return categories.filter((category) => categoryTotals[category].total > 0);
245
197
  }
@@ -713,9 +665,9 @@ import {
713
665
  Tooltip,
714
666
  Typography
715
667
  } from "@elementor/ui";
716
- import { __ as __3 } from "@wordpress/i18n";
668
+ import { __ as __2 } from "@wordpress/i18n";
717
669
  var FEEDBACK_SUBJECT = "Page Audit Tool";
718
- var FEEDBACK_SUBJECT_LABEL = __3("Page Audit Tool", "elementor");
670
+ var FEEDBACK_SUBJECT_LABEL = __2("Page Audit Tool", "elementor");
719
671
  var SUCCESS_NOTIFICATION_ID = "audit-feedback-success";
720
672
  var ERROR_NOTIFICATION_ID = "audit-feedback-error";
721
673
  var DIALOG_TITLE_ID = "audit-feedback-dialog-title";
@@ -724,12 +676,12 @@ var isUserConnected = () => Boolean(window.elementorCommon?.config?.library_conn
724
676
  var notifySuccess = () => notify({
725
677
  id: SUCCESS_NOTIFICATION_ID,
726
678
  type: "success",
727
- message: __3("Feedback sent. Thanks for helping us out.", "elementor")
679
+ message: __2("Feedback sent. Thanks for helping us out.", "elementor")
728
680
  });
729
681
  var notifyError = () => notify({
730
682
  id: ERROR_NOTIFICATION_ID,
731
683
  type: "error",
732
- message: __3("Something went wrong. Please try sending your feedback again.", "elementor")
684
+ message: __2("Something went wrong. Please try sending your feedback again.", "elementor")
733
685
  });
734
686
  function AuditFeedback() {
735
687
  const [isOpen, setIsOpen] = useState(false);
@@ -745,7 +697,7 @@ function AuditFeedback() {
745
697
  if (!connected && !connectUrl) {
746
698
  return null;
747
699
  }
748
- const triggerLabel = __3("Give feedback", "elementor");
700
+ const triggerLabel = __2("Give feedback", "elementor");
749
701
  const handleOpen = () => {
750
702
  if (!connected) {
751
703
  window.open(connectUrl, "_blank", "noopener");
@@ -787,11 +739,11 @@ function AuditFeedback() {
787
739
  "aria-describedby": DIALOG_DESCRIPTION_ID,
788
740
  PaperProps: { sx: { borderRadius: 1 } }
789
741
  },
790
- /* @__PURE__ */ React.createElement(DialogHeader, { logo: false, onClose: handleClose }, /* @__PURE__ */ React.createElement(DialogTitle, { id: DIALOG_TITLE_ID }, __3("Let us know what you think", "elementor"))),
742
+ /* @__PURE__ */ React.createElement(DialogHeader, { logo: false, onClose: handleClose }, /* @__PURE__ */ React.createElement(DialogTitle, { id: DIALOG_TITLE_ID }, __2("Let us know what you think", "elementor"))),
791
743
  /* @__PURE__ */ React.createElement(DialogContent, { dividers: true }, /* @__PURE__ */ React.createElement(Stack, { direction: "column", gap: 2 }, /* @__PURE__ */ React.createElement(TextField, { value: FEEDBACK_SUBJECT_LABEL, disabled: true, fullWidth: true, size: "small" }), /* @__PURE__ */ React.createElement(
792
744
  TextField,
793
745
  {
794
- placeholder: __3(
746
+ placeholder: __2(
795
747
  "Tell us what you had in mind, what we can improve or fix to make this feature better.",
796
748
  "elementor"
797
749
  ),
@@ -802,11 +754,11 @@ function AuditFeedback() {
802
754
  onChange: (event) => setFeedbackText(event.target.value),
803
755
  value: feedbackText
804
756
  }
805
- ), /* @__PURE__ */ React.createElement(Typography, { id: DIALOG_DESCRIPTION_ID, variant: "caption", color: "text.secondary" }, __3(
757
+ ), /* @__PURE__ */ React.createElement(Typography, { id: DIALOG_DESCRIPTION_ID, variant: "caption", color: "text.secondary" }, __2(
806
758
  "We appreciate your feedback! While we review all submissions, we can't guarantee that every suggestion will result in a change or update.",
807
759
  "elementor"
808
760
  )))),
809
- /* @__PURE__ */ React.createElement(DialogActions, null, /* @__PURE__ */ React.createElement(Button, { variant: "text", color: "secondary", onClick: handleCancel }, __3("Cancel", "elementor")), /* @__PURE__ */ React.createElement(
761
+ /* @__PURE__ */ React.createElement(DialogActions, null, /* @__PURE__ */ React.createElement(Button, { variant: "text", color: "secondary", onClick: handleCancel }, __2("Cancel", "elementor")), /* @__PURE__ */ React.createElement(
810
762
  Button,
811
763
  {
812
764
  variant: "contained",
@@ -814,7 +766,7 @@ function AuditFeedback() {
814
766
  disabled: isSubmitting || feedbackText.trim().length === 0,
815
767
  onClick: handleSubmit
816
768
  },
817
- __3("Send", "elementor")
769
+ __2("Send", "elementor")
818
770
  ))
819
771
  ));
820
772
  }
@@ -822,23 +774,23 @@ function AuditFeedback() {
822
774
  // src/components/pages/error-page.tsx
823
775
  import * as React2 from "react";
824
776
  import { Box, Button as Button2, Typography as Typography2 } from "@elementor/ui";
825
- import { __ as __4 } from "@wordpress/i18n";
777
+ import { __ as __3 } from "@wordpress/i18n";
826
778
  function ErrorPage({ message, onRetry }) {
827
- return /* @__PURE__ */ React2.createElement(Box, { sx: { display: "flex", flexDirection: "column", alignItems: "center", gap: 1.5, p: 4 } }, /* @__PURE__ */ React2.createElement(Typography2, { variant: "body2", color: "error", textAlign: "center" }, message), /* @__PURE__ */ React2.createElement(Button2, { variant: "contained", size: "small", onClick: onRetry }, __4("Try again", "elementor")));
779
+ return /* @__PURE__ */ React2.createElement(Box, { sx: { display: "flex", flexDirection: "column", alignItems: "center", gap: 1.5, p: 4 } }, /* @__PURE__ */ React2.createElement(Typography2, { variant: "body2", color: "error", textAlign: "center" }, message), /* @__PURE__ */ React2.createElement(Button2, { variant: "contained", size: "small", onClick: onRetry }, __3("Try again", "elementor")));
828
780
  }
829
781
 
830
782
  // src/components/pages/loading-page.tsx
831
783
  import * as React3 from "react";
832
784
  import { Box as Box2, CircularProgress, Typography as Typography3 } from "@elementor/ui";
833
- import { __ as __5 } from "@wordpress/i18n";
785
+ import { __ as __4 } from "@wordpress/i18n";
834
786
  function LoadingPage() {
835
- return /* @__PURE__ */ React3.createElement(Box2, { sx: { display: "flex", flexDirection: "column", alignItems: "center", gap: 1.5, p: 4 } }, /* @__PURE__ */ React3.createElement(CircularProgress, { size: 32 }), /* @__PURE__ */ React3.createElement(Typography3, { variant: "body2" }, __5("Audit in progress.", "elementor")));
787
+ return /* @__PURE__ */ React3.createElement(Box2, { sx: { display: "flex", flexDirection: "column", alignItems: "center", gap: 1.5, p: 4 } }, /* @__PURE__ */ React3.createElement(CircularProgress, { size: 32 }), /* @__PURE__ */ React3.createElement(Typography3, { variant: "body2" }, __4("Audit in progress.", "elementor")));
836
788
  }
837
789
 
838
790
  // src/components/pages/welcome-page.tsx
839
791
  import * as React4 from "react";
840
792
  import { Box as Box3, Typography as Typography4 } from "@elementor/ui";
841
- import { __ as __6 } from "@wordpress/i18n";
793
+ import { __ as __5 } from "@wordpress/i18n";
842
794
  var INFORMATION_IMAGE_PATH = "images/information.svg";
843
795
  function WelcomePage() {
844
796
  const assetsUrl = window.elementorCommon?.config?.urls?.assets ?? "";
@@ -860,11 +812,11 @@ function WelcomePage() {
860
812
  className: "elementor-nerd-box-icon",
861
813
  src: `${assetsUrl}${INFORMATION_IMAGE_PATH}`,
862
814
  loading: "lazy",
863
- alt: __6("Elementor", "elementor")
815
+ alt: __5("Elementor", "elementor")
864
816
  }
865
817
  ),
866
- /* @__PURE__ */ React4.createElement(Typography4, { variant: "subtitle1", component: "h3", sx: { marginBlockStart: 2 } }, __6("Audit your page!", "elementor")),
867
- /* @__PURE__ */ React4.createElement(Typography4, { variant: "caption", textAlign: "center" }, __6(
818
+ /* @__PURE__ */ React4.createElement(Typography4, { variant: "subtitle1", component: "h3", sx: { marginBlockStart: 2 } }, __5("Audit your page!", "elementor")),
819
+ /* @__PURE__ */ React4.createElement(Typography4, { variant: "caption", textAlign: "center" }, __5(
868
820
  'Check SEO, accessibility, performance, and best practices. Click "Run page audit" to begin.',
869
821
  "elementor"
870
822
  ))
@@ -872,15 +824,14 @@ function WelcomePage() {
872
824
  }
873
825
 
874
826
  // src/components/report-shell.tsx
875
- import * as React24 from "react";
876
- import { useState as useState5 } from "react";
877
- import { Box as Box20, Divider as Divider3, Tab, Tabs } from "@elementor/ui";
878
- import { __ as __22 } from "@wordpress/i18n";
827
+ import * as React18 from "react";
828
+ import { useState as useState4 } from "react";
829
+ import { Box as Box14 } from "@elementor/ui";
879
830
 
880
- // src/components/pages/all-audits-page.tsx
831
+ // src/components/pages/category-page.tsx
881
832
  import * as React12 from "react";
882
833
  import { Box as Box8 } from "@elementor/ui";
883
- import { __ as __12 } from "@wordpress/i18n";
834
+ import { __ as __11 } from "@wordpress/i18n";
884
835
 
885
836
  // src/hooks/use-single-expanded-card.ts
886
837
  import { useState as useState2 } from "react";
@@ -892,12 +843,22 @@ function useSingleExpandedCard(initialId = null) {
892
843
  return { expandedId, toggle };
893
844
  }
894
845
 
846
+ // src/components/category-icons.ts
847
+ import { BoltIcon, ElementorAccessibilityIcon, FileSearchIcon, Settings2Icon, ShieldCheckIcon } from "@elementor/icons";
848
+ var CATEGORY_ICONS = {
849
+ "best-practices": Settings2Icon,
850
+ seo: FileSearchIcon,
851
+ accessibility: ElementorAccessibilityIcon,
852
+ performance: BoltIcon,
853
+ compliance: ShieldCheckIcon
854
+ };
855
+
895
856
  // src/components/status-section.tsx
896
857
  import * as React5 from "react";
897
858
  import { useState as useState3 } from "react";
898
859
  import { ChevronDownIcon } from "@elementor/icons";
899
860
  import { Box as Box4, Chip, Collapse, IconButton as IconButton2 } from "@elementor/ui";
900
- import { __ as __7 } from "@wordpress/i18n";
861
+ import { __ as __6 } from "@wordpress/i18n";
901
862
  function StatusSection({ label, count, color = "default", defaultExpanded = false, children }) {
902
863
  const [expanded, setExpanded] = useState3(defaultExpanded);
903
864
  if (React5.Children.count(children) === 0) {
@@ -913,7 +874,7 @@ function StatusSection({ label, count, color = "default", defaultExpanded = fals
913
874
  IconButton2,
914
875
  {
915
876
  size: "small",
916
- "aria-label": expanded ? __7("Collapse", "elementor") : __7("Expand", "elementor")
877
+ "aria-label": expanded ? __6("Collapse", "elementor") : __6("Expand", "elementor")
917
878
  },
918
879
  /* @__PURE__ */ React5.createElement(
919
880
  ChevronDownIcon,
@@ -934,10 +895,10 @@ function StatusSection({ label, count, color = "default", defaultExpanded = fals
934
895
  import * as React6 from "react";
935
896
  import { ArrowLeftIcon } from "@elementor/icons";
936
897
  import { Box as Box5, IconButton as IconButton3, Rotate, Typography as Typography5, useTheme } from "@elementor/ui";
937
- import { __ as __8 } from "@wordpress/i18n";
898
+ import { __ as __7 } from "@wordpress/i18n";
938
899
  function SubpageHeader({ title, onBack, backLabel, icon }) {
939
900
  const isRtl = "rtl" === useTheme().direction;
940
- return /* @__PURE__ */ React6.createElement(Box5, { sx: { display: "flex", alignItems: "center", gap: 0.5, p: 1 } }, /* @__PURE__ */ React6.createElement(IconButton3, { size: "small", onClick: onBack, "aria-label": backLabel ?? __8("Back", "elementor") }, /* @__PURE__ */ React6.createElement(Rotate, { in: isRtl }, /* @__PURE__ */ React6.createElement(ArrowLeftIcon, { fontSize: "small" }))), icon, /* @__PURE__ */ React6.createElement(Typography5, { variant: "subtitle2", fontWeight: "bold" }, title));
901
+ return /* @__PURE__ */ React6.createElement(Box5, { sx: { display: "flex", alignItems: "center", gap: 0.5, p: 1 } }, /* @__PURE__ */ React6.createElement(IconButton3, { size: "small", onClick: onBack, "aria-label": backLabel ?? __7("Back", "elementor") }, /* @__PURE__ */ React6.createElement(Rotate, { in: isRtl }, /* @__PURE__ */ React6.createElement(ArrowLeftIcon, { fontSize: "small" }))), icon, /* @__PURE__ */ React6.createElement(Typography5, { variant: "subtitle2", fontWeight: "bold" }, title));
941
902
  }
942
903
 
943
904
  // src/components/violation-row.tsx
@@ -946,7 +907,7 @@ import { getElementIcon, getElementTitle } from "@elementor/editor-elements";
946
907
  import { useFloatingPanelZIndex as useFloatingPanelZIndex2 } from "@elementor/editor-floating-panels";
947
908
  import { CheckIcon, ChevronDownIcon as ChevronDownIcon2, HelpIcon, InfoCircleIcon, WandIcon as WandIcon2 } from "@elementor/icons";
948
909
  import { Alert, Box as Box7, Collapse as Collapse2, IconButton as IconButton5, Tooltip as Tooltip3, Typography as Typography6 } from "@elementor/ui";
949
- import { __ as __11 } from "@wordpress/i18n";
910
+ import { __ as __10 } from "@wordpress/i18n";
950
911
 
951
912
  // src/hooks/focus-violation.ts
952
913
  import { getContainer, selectElement } from "@elementor/editor-elements";
@@ -987,11 +948,11 @@ function focusViolation(violation) {
987
948
  }
988
949
 
989
950
  // src/utils/build-angie-prompt.ts
990
- import { __ as __9, sprintf } from "@wordpress/i18n";
951
+ import { __ as __8, sprintf } from "@wordpress/i18n";
991
952
  function buildAngiePrompt(violationText) {
992
953
  return sprintf(
993
954
  /* translators: %s: audit violation description. */
994
- __9("Help me fix: %s", "elementor"),
955
+ __8("Help me fix: %s", "elementor"),
995
956
  violationText
996
957
  );
997
958
  }
@@ -1011,9 +972,9 @@ import * as React7 from "react";
1011
972
  import { isAngieAvailable, sendPromptToAngie } from "@elementor/editor-mcp";
1012
973
  import { AngieIcon } from "@elementor/icons";
1013
974
  import { IconButton as IconButton4, Tooltip as Tooltip2 } from "@elementor/ui";
1014
- import { __ as __10 } from "@wordpress/i18n";
975
+ import { __ as __9 } from "@wordpress/i18n";
1015
976
  function FixViolationWithAngie({ prompt, panelZIndex }) {
1016
- const label = __10("Fix with Angie", "elementor");
977
+ const label = __9("Fix with Angie", "elementor");
1017
978
  const href = `#angie-prompt=${encodeURIComponent(prompt)}`;
1018
979
  const handleClick = (event) => {
1019
980
  event.stopPropagation();
@@ -1110,7 +1071,7 @@ function GuidanceAction({ violation }) {
1110
1071
  if (!hasPrimaryCta) {
1111
1072
  return null;
1112
1073
  }
1113
- return /* @__PURE__ */ React11.createElement(Box7, { sx: { display: "flex", alignItems: "center", gap: 1 } }, /* @__PURE__ */ React11.createElement(
1074
+ return /* @__PURE__ */ React11.createElement(Box7, { display: "flex", alignItems: "center", gap: 1, mt: 1 }, /* @__PURE__ */ React11.createElement(
1114
1075
  ViolationCtaButton,
1115
1076
  {
1116
1077
  ctaLabel: violation.ctaLabel,
@@ -1154,7 +1115,7 @@ function ViolationRow({ audit: audit26, expanded, onToggleExpand, skipReason, vi
1154
1115
  IconButton5,
1155
1116
  {
1156
1117
  size: "small",
1157
- "aria-label": expanded ? __11("Collapse", "elementor") : __11("Expand", "elementor"),
1118
+ "aria-label": expanded ? __10("Collapse", "elementor") : __10("Expand", "elementor"),
1158
1119
  onClick: onToggleExpand
1159
1120
  },
1160
1121
  /* @__PURE__ */ React11.createElement(
@@ -1167,7 +1128,7 @@ function ViolationRow({ audit: audit26, expanded, onToggleExpand, skipReason, vi
1167
1128
  }
1168
1129
  }
1169
1130
  )
1170
- )), /* @__PURE__ */ React11.createElement(Collapse2, { in: expanded }, /* @__PURE__ */ React11.createElement(Box7, { sx: { display: "flex", flexDirection: "column", gap: 1, paddingBlock: 1 } }, /* @__PURE__ */ React11.createElement(Tooltip3, { title: audit26.fixHint, placement: "top" }, /* @__PURE__ */ React11.createElement(
1131
+ )), /* @__PURE__ */ React11.createElement(Collapse2, { in: expanded }, /* @__PURE__ */ React11.createElement(Box7, { paddingBlock: 1 }, /* @__PURE__ */ React11.createElement(Tooltip3, { title: audit26.fixHint, placement: "top" }, /* @__PURE__ */ React11.createElement(
1171
1132
  Alert,
1172
1133
  {
1173
1134
  severity: "secondary",
@@ -1178,8 +1139,9 @@ function ViolationRow({ audit: audit26, expanded, onToggleExpand, skipReason, vi
1178
1139
  onClick: isGuidanceFocusable ? handleGuidanceClick : void 0,
1179
1140
  onKeyDown: isGuidanceFocusable ? onKeyboardClick(handleGuidanceClick) : void 0
1180
1141
  },
1181
- /* @__PURE__ */ React11.createElement(Typography6, { variant: "caption", component: "p", color: "text.secondary" }, audit26.description)
1182
- )), primaryViolation && /* @__PURE__ */ React11.createElement(GuidanceAction, { violation: primaryViolation })), violations && violations.length > 0 && /* @__PURE__ */ React11.createElement(Box7, { role: "list", sx: { paddingBlockEnd: 1 } }, violations.map((violation, idx) => {
1142
+ /* @__PURE__ */ React11.createElement(Typography6, { variant: "caption", component: "p", color: "text.secondary" }, audit26.description),
1143
+ primaryViolation && /* @__PURE__ */ React11.createElement(GuidanceAction, { violation: primaryViolation })
1144
+ ))), violations && violations.length > 0 && /* @__PURE__ */ React11.createElement(Box7, { role: "list", sx: { paddingBlockEnd: 1 } }, violations.map((violation, idx) => {
1183
1145
  const widgetIcon = violation.elementId ? getElementIcon(violation.elementId) : null;
1184
1146
  const elementTitle = violation.elementId ? getElementTitle(violation.elementId) : null;
1185
1147
  const rowLabel = elementTitle ? `${elementTitle} - ${violation.label}` : violation.label;
@@ -1215,106 +1177,28 @@ function ViolationRow({ audit: audit26, expanded, onToggleExpand, skipReason, vi
1215
1177
  }))));
1216
1178
  }
1217
1179
 
1218
- // src/components/pages/all-audits-page.tsx
1219
- function AllAuditsPage({ initialExpandedStatus, onBack, report }) {
1220
- const { failed, passed, skipped, totalViolations } = partitionAuditResults(report);
1221
- const expandFail = !initialExpandedStatus || initialExpandedStatus === "fail";
1222
- const expandPass = initialExpandedStatus === "pass";
1223
- const expandSkipped = initialExpandedStatus === "skipped";
1224
- const { expandedId, toggle } = useSingleExpandedCard();
1225
- return /* @__PURE__ */ React12.createElement(Box8, { key: initialExpandedStatus ?? "default" }, /* @__PURE__ */ React12.createElement(SubpageHeader, { title: __12("All audits", "elementor"), onBack }), /* @__PURE__ */ React12.createElement(Box8, { sx: { p: 1 } }, /* @__PURE__ */ React12.createElement(
1226
- StatusSection,
1227
- {
1228
- label: auditStatusLabel("fail"),
1229
- count: totalViolations,
1230
- color: auditStatusColor("fail"),
1231
- defaultExpanded: expandFail
1232
- },
1233
- failed.map((r) => /* @__PURE__ */ React12.createElement(
1234
- ViolationRow,
1235
- {
1236
- key: r.audit.id,
1237
- audit: r.audit,
1238
- violations: r.result.violations,
1239
- expanded: expandedId === r.audit.id,
1240
- onToggleExpand: () => toggle(r.audit.id)
1241
- }
1242
- ))
1243
- ), /* @__PURE__ */ React12.createElement(
1244
- StatusSection,
1245
- {
1246
- label: auditStatusLabel("pass"),
1247
- count: passed.length,
1248
- color: auditStatusColor("pass"),
1249
- defaultExpanded: expandPass
1250
- },
1251
- passed.map((r) => /* @__PURE__ */ React12.createElement(
1252
- ViolationRow,
1253
- {
1254
- key: r.audit.id,
1255
- audit: r.audit,
1256
- expanded: expandedId === r.audit.id,
1257
- onToggleExpand: () => toggle(r.audit.id)
1258
- }
1259
- ))
1260
- ), /* @__PURE__ */ React12.createElement(
1261
- StatusSection,
1262
- {
1263
- label: auditStatusLabel("skipped"),
1264
- count: skipped.length,
1265
- color: auditStatusColor("skipped"),
1266
- defaultExpanded: expandSkipped
1267
- },
1268
- skipped.map((r) => /* @__PURE__ */ React12.createElement(
1269
- ViolationRow,
1270
- {
1271
- key: r.audit.id,
1272
- audit: r.audit,
1273
- skipReason: r.result.reason,
1274
- expanded: expandedId === r.audit.id,
1275
- onToggleExpand: () => toggle(r.audit.id)
1276
- }
1277
- ))
1278
- )));
1279
- }
1280
-
1281
- // src/components/pages/category-page.tsx
1282
- import * as React13 from "react";
1283
- import { Box as Box9 } from "@elementor/ui";
1284
- import { __ as __13 } from "@wordpress/i18n";
1285
-
1286
- // src/components/category-icons.ts
1287
- import { BoltIcon, ElementorAccessibilityIcon, FileSearchIcon, Settings2Icon, ShieldCheckIcon } from "@elementor/icons";
1288
- var CATEGORY_ICONS = {
1289
- "best-practices": Settings2Icon,
1290
- seo: FileSearchIcon,
1291
- accessibility: ElementorAccessibilityIcon,
1292
- performance: BoltIcon,
1293
- compliance: ShieldCheckIcon
1294
- };
1295
-
1296
1180
  // src/components/pages/category-page.tsx
1297
1181
  function CategoryPage({ category, report, onBack }) {
1298
1182
  const Icon = CATEGORY_ICONS[category];
1299
1183
  const { failed, passed, skipped, totalViolations } = partitionAuditResults(report, { category });
1300
1184
  const { expandedId, toggle } = useSingleExpandedCard();
1301
- return /* @__PURE__ */ React13.createElement(React13.Fragment, null, /* @__PURE__ */ React13.createElement(
1185
+ return /* @__PURE__ */ React12.createElement(React12.Fragment, null, /* @__PURE__ */ React12.createElement(
1302
1186
  SubpageHeader,
1303
1187
  {
1304
1188
  title: CATEGORY_LABELS[category],
1305
1189
  onBack,
1306
- backLabel: __13("Back to all issues", "elementor"),
1307
- icon: /* @__PURE__ */ React13.createElement(Icon, { fontSize: "small", color: "action" })
1190
+ backLabel: __11("Back to all issues", "elementor"),
1191
+ icon: /* @__PURE__ */ React12.createElement(Icon, { fontSize: "small", color: "action" })
1308
1192
  }
1309
- ), /* @__PURE__ */ React13.createElement(Box9, { sx: { p: 1 } }, /* @__PURE__ */ React13.createElement(
1193
+ ), /* @__PURE__ */ React12.createElement(Box8, { sx: { p: 1 } }, /* @__PURE__ */ React12.createElement(
1310
1194
  StatusSection,
1311
1195
  {
1312
- label: __13("Failed audits", "elementor"),
1196
+ label: __11("Failed audits", "elementor"),
1313
1197
  count: totalViolations,
1314
1198
  color: "error",
1315
1199
  defaultExpanded: true
1316
1200
  },
1317
- failed.map((r) => /* @__PURE__ */ React13.createElement(
1201
+ failed.map((r) => /* @__PURE__ */ React12.createElement(
1318
1202
  ViolationRow,
1319
1203
  {
1320
1204
  key: r.audit.id,
@@ -1324,7 +1208,7 @@ function CategoryPage({ category, report, onBack }) {
1324
1208
  onToggleExpand: () => toggle(r.audit.id)
1325
1209
  }
1326
1210
  ))
1327
- ), /* @__PURE__ */ React13.createElement(StatusSection, { label: __13("Passed audits", "elementor"), count: passed.length, color: "success" }, passed.map((r) => /* @__PURE__ */ React13.createElement(
1211
+ ), /* @__PURE__ */ React12.createElement(StatusSection, { label: __11("Passed audits", "elementor"), count: passed.length, color: "success" }, passed.map((r) => /* @__PURE__ */ React12.createElement(
1328
1212
  ViolationRow,
1329
1213
  {
1330
1214
  key: r.audit.id,
@@ -1332,7 +1216,7 @@ function CategoryPage({ category, report, onBack }) {
1332
1216
  expanded: expandedId === r.audit.id,
1333
1217
  onToggleExpand: () => toggle(r.audit.id)
1334
1218
  }
1335
- ))), /* @__PURE__ */ React13.createElement(StatusSection, { label: __13("Skipped audits", "elementor"), count: skipped.length, color: "default" }, skipped.map((r) => /* @__PURE__ */ React13.createElement(
1219
+ ))), /* @__PURE__ */ React12.createElement(StatusSection, { label: __11("Skipped audits", "elementor"), count: skipped.length, color: "default" }, skipped.map((r) => /* @__PURE__ */ React12.createElement(
1336
1220
  ViolationRow,
1337
1221
  {
1338
1222
  key: r.audit.id,
@@ -1344,14 +1228,13 @@ function CategoryPage({ category, report, onBack }) {
1344
1228
  )))));
1345
1229
  }
1346
1230
 
1347
- // src/components/pages/issues-page.tsx
1348
- import * as React18 from "react";
1349
- import { useState as useState4 } from "react";
1350
- import { Box as Box14, Link, Typography as Typography10 } from "@elementor/ui";
1351
- import { __ as __17 } from "@wordpress/i18n";
1231
+ // src/components/pages/overview-page.tsx
1232
+ import * as React17 from "react";
1233
+ import { Box as Box13, Typography as Typography11 } from "@elementor/ui";
1234
+ import { __ as __15 } from "@wordpress/i18n";
1352
1235
 
1353
1236
  // src/utils/severity-counts.ts
1354
- import { __ as __14 } from "@wordpress/i18n";
1237
+ import { __ as __12 } from "@wordpress/i18n";
1355
1238
  var ALL_SEVERITIES = ["error", "warning", "info"];
1356
1239
  function countSeverities(report, category) {
1357
1240
  const counts = { error: 0, warning: 0, info: 0 };
@@ -1372,119 +1255,23 @@ function countSeverities(report, category) {
1372
1255
  function severityPluralLabel(severity) {
1373
1256
  switch (severity) {
1374
1257
  case "error":
1375
- return __14("Errors", "elementor");
1258
+ return __12("Errors", "elementor");
1376
1259
  case "warning":
1377
- return __14("Warnings", "elementor");
1260
+ return __12("Warnings", "elementor");
1378
1261
  case "info":
1379
- return __14("Suggestions", "elementor");
1262
+ return __12("Suggestions", "elementor");
1380
1263
  }
1381
1264
  }
1382
1265
 
1383
- // src/components/audit-statuses-section.tsx
1384
- import * as React15 from "react";
1385
- import { Box as Box11, Divider, Typography as Typography8 } from "@elementor/ui";
1386
- import { __ as __15, sprintf as sprintf2 } from "@wordpress/i18n";
1387
-
1388
- // src/components/count-summary-circle.tsx
1389
- import * as React14 from "react";
1390
- import { Box as Box10, Chip as Chip2, Typography as Typography7 } from "@elementor/ui";
1391
- var COUNT_SUMMARY_CIRCLE_SIZE = 64;
1392
- var COUNT_SUMMARY_BORDER_WIDTH = 4;
1393
- function chipBorderColor(theme, color) {
1394
- if (color === "default" || !color) {
1395
- return theme.palette.text.secondary;
1396
- }
1397
- return theme.palette[color].main;
1398
- }
1399
- function CountSummaryCircle({ ariaLabel, color, count, label, onClick }) {
1400
- return /* @__PURE__ */ React14.createElement(
1401
- Box10,
1402
- {
1403
- "aria-label": ariaLabel,
1404
- component: "button",
1405
- onClick,
1406
- type: "button",
1407
- sx: {
1408
- alignItems: "center",
1409
- background: "none",
1410
- border: "none",
1411
- cursor: "pointer",
1412
- display: "flex",
1413
- flex: 1,
1414
- flexDirection: "column",
1415
- gap: 0.5,
1416
- padding: 0
1417
- }
1418
- },
1419
- /* @__PURE__ */ React14.createElement(
1420
- Chip2,
1421
- {
1422
- color,
1423
- label: count,
1424
- size: "small",
1425
- variant: "standard",
1426
- sx: (theme) => ({
1427
- border: `${COUNT_SUMMARY_BORDER_WIDTH}px solid ${chipBorderColor(theme, color)}`,
1428
- borderRadius: "50%",
1429
- height: COUNT_SUMMARY_CIRCLE_SIZE,
1430
- maxWidth: COUNT_SUMMARY_CIRCLE_SIZE,
1431
- width: COUNT_SUMMARY_CIRCLE_SIZE,
1432
- "& .MuiChip-label": {
1433
- fontSize: theme.typography.body2.fontSize,
1434
- fontWeight: 700,
1435
- lineHeight: 1,
1436
- padding: 0
1437
- }
1438
- })
1439
- }
1440
- ),
1441
- /* @__PURE__ */ React14.createElement(Typography7, { color: "text.secondary", sx: { textAlign: "center" }, variant: "caption" }, label)
1442
- );
1443
- }
1444
-
1445
- // src/components/audit-statuses-section.tsx
1446
- var STATUS_ARIA_LABELS = {
1447
- pass: (count) => sprintf2(
1448
- /* translators: %d: number of passed audits. */
1449
- __15("%d passed audits, view all", "elementor"),
1450
- count
1451
- ),
1452
- fail: (count) => sprintf2(
1453
- /* translators: %d: number of failed audit violations. */
1454
- __15("%d failed audits, view all", "elementor"),
1455
- count
1456
- ),
1457
- skipped: (count) => sprintf2(
1458
- /* translators: %d: number of skipped audits. */
1459
- __15("%d skipped audits, view all", "elementor"),
1460
- count
1461
- )
1462
- };
1463
- var STATUS_GROUPS = ["fail", "pass", "skipped"];
1464
- function AuditStatusesSection({ report, onStatusClick }) {
1465
- const statusCounts = auditStatusDisplayCounts(report);
1466
- return /* @__PURE__ */ React15.createElement(React15.Fragment, null, /* @__PURE__ */ React15.createElement(Typography8, { variant: "subtitle1", fontWeight: "bold" }, __15("Audit statuses", "elementor")), /* @__PURE__ */ React15.createElement(Box11, { sx: { display: "flex", justifyContent: "space-around", gap: 2 } }, STATUS_GROUPS.map((status) => /* @__PURE__ */ React15.createElement(
1467
- CountSummaryCircle,
1468
- {
1469
- key: status,
1470
- ariaLabel: STATUS_ARIA_LABELS[status](statusCounts[status]),
1471
- color: auditStatusColor(status),
1472
- count: statusCounts[status],
1473
- label: auditStatusLabel(status),
1474
- onClick: () => onStatusClick(status)
1475
- }
1476
- ))), /* @__PURE__ */ React15.createElement(Divider, null));
1477
- }
1478
-
1479
1266
  // src/components/issues-category-row.tsx
1480
- import * as React16 from "react";
1267
+ import * as React13 from "react";
1481
1268
  import { ChevronRightIcon } from "@elementor/icons";
1482
- import { Box as Box12, Rotate as Rotate2, Typography as Typography9, useTheme as useTheme2 } from "@elementor/ui";
1269
+ import { Box as Box9, Rotate as Rotate2, Typography as Typography7, useTheme as useTheme2 } from "@elementor/ui";
1483
1270
  function IssuesCategoryRow({ category, label, counts, onClick }) {
1484
1271
  const isRtl = "rtl" === useTheme2().direction;
1485
1272
  const Icon = CATEGORY_ICONS[category];
1486
- return /* @__PURE__ */ React16.createElement(
1487
- Box12,
1273
+ return /* @__PURE__ */ React13.createElement(
1274
+ Box9,
1488
1275
  {
1489
1276
  role: "button",
1490
1277
  tabIndex: 0,
@@ -1505,112 +1292,21 @@ function IssuesCategoryRow({ category, label, counts, onClick }) {
1505
1292
  "&:focus-visible": { outline: "2px solid", outlineColor: "primary.main" }
1506
1293
  }
1507
1294
  },
1508
- /* @__PURE__ */ React16.createElement(Icon, { fontSize: "small", color: "action" }),
1509
- /* @__PURE__ */ React16.createElement(Typography9, { variant: "body2", fontWeight: "bold", sx: { flex: 1 } }, label),
1510
- /* @__PURE__ */ React16.createElement(Box12, { sx: { display: "flex", alignItems: "center", gap: 0.5 } }, ALL_SEVERITIES.filter((s) => counts[s] > 0).map((severity) => /* @__PURE__ */ React16.createElement(Box12, { key: severity, sx: { display: "flex", alignItems: "center", gap: 0.25 } }, /* @__PURE__ */ React16.createElement(SeverityIcon, { severity }), /* @__PURE__ */ React16.createElement(Typography9, { variant: "caption", color: "text.primary", fontWeight: "bold" }, counts[severity])))),
1511
- /* @__PURE__ */ React16.createElement(Rotate2, { in: isRtl }, /* @__PURE__ */ React16.createElement(ChevronRightIcon, { fontSize: "small", color: "action" }))
1512
- );
1513
- }
1514
-
1515
- // src/components/severity-filter-chips.tsx
1516
- import * as React17 from "react";
1517
- import { Box as Box13, Chip as Chip3 } from "@elementor/ui";
1518
- import { __ as __16 } from "@wordpress/i18n";
1519
- function SeverityFilterChips({ selected, onChange }) {
1520
- return /* @__PURE__ */ React17.createElement(Box13, { sx: { display: "flex", alignItems: "center", gap: 1 } }, /* @__PURE__ */ React17.createElement(
1521
- FilterChip,
1522
- {
1523
- label: __16("All", "elementor"),
1524
- isSelected: selected === "all",
1525
- onClick: () => onChange("all")
1526
- }
1527
- ), ALL_SEVERITIES.map((severity) => /* @__PURE__ */ React17.createElement(
1528
- FilterChip,
1529
- {
1530
- key: severity,
1531
- label: severityPluralLabel(severity),
1532
- icon: /* @__PURE__ */ React17.createElement(SeverityIcon, { severity }),
1533
- isSelected: selected === severity,
1534
- onClick: () => onChange(severity)
1535
- }
1536
- )));
1537
- }
1538
- function FilterChip({ label, icon, isSelected, onClick }) {
1539
- return /* @__PURE__ */ React17.createElement(
1540
- Chip3,
1541
- {
1542
- label,
1543
- icon,
1544
- size: "small",
1545
- variant: "filled",
1546
- color: "default",
1547
- onClick,
1548
- "aria-pressed": isSelected,
1549
- sx: { bgcolor: isSelected ? "action.selected" : "transparent" }
1550
- }
1295
+ /* @__PURE__ */ React13.createElement(Icon, { fontSize: "small", color: "action" }),
1296
+ /* @__PURE__ */ React13.createElement(Typography7, { variant: "body2", fontWeight: "bold", sx: { flex: 1 } }, label),
1297
+ /* @__PURE__ */ React13.createElement(Box9, { sx: { display: "flex", alignItems: "center", gap: 0.5 } }, ALL_SEVERITIES.filter((s) => counts[s] > 0).map((severity) => /* @__PURE__ */ React13.createElement(Box9, { key: severity, sx: { display: "flex", alignItems: "center", gap: 0.25 } }, /* @__PURE__ */ React13.createElement(SeverityIcon, { severity }), /* @__PURE__ */ React13.createElement(Typography7, { variant: "caption", color: "text.primary", fontWeight: "bold" }, counts[severity])))),
1298
+ /* @__PURE__ */ React13.createElement(Rotate2, { in: isRtl }, /* @__PURE__ */ React13.createElement(ChevronRightIcon, { fontSize: "small", color: "action" }))
1551
1299
  );
1552
1300
  }
1553
1301
 
1554
- // src/components/pages/issues-page.tsx
1555
- function filterCounts(counts, filter) {
1556
- if (filter === "all") {
1557
- return counts;
1558
- }
1559
- return { error: 0, warning: 0, info: 0, [filter]: counts[filter] };
1560
- }
1561
- function IssuesPage({ report, onCategoryClick, onAllAuditsClick, onStatusClick }) {
1562
- const [filter, setFilter] = useState4("all");
1563
- const populatedCategories = getPopulatedCategories(report.categories, ALL_CATEGORIES);
1564
- const categoryRows = populatedCategories.map((category) => ({ category, counts: filterCounts(countSeverities(report, category), filter) })).filter(({ counts }) => Object.values(counts).some((count) => count > 0));
1565
- return /* @__PURE__ */ React18.createElement(Box14, { sx: { display: "flex", flexDirection: "column", gap: 4, p: 2 } }, /* @__PURE__ */ React18.createElement(AuditStatusesSection, { report, onStatusClick }), /* @__PURE__ */ React18.createElement(
1566
- Link,
1567
- {
1568
- component: "button",
1569
- underline: "none",
1570
- color: "inherit",
1571
- onClick: onAllAuditsClick,
1572
- sx: { textAlign: "start" }
1573
- },
1574
- /* @__PURE__ */ React18.createElement(Typography10, { variant: "subtitle1", component: "h2" }, __17("All issues", "elementor"))
1575
- ), /* @__PURE__ */ React18.createElement(SeverityFilterChips, { selected: filter, onChange: setFilter }), /* @__PURE__ */ React18.createElement(Box14, { sx: { display: "flex", flexDirection: "column", gap: 1 } }, categoryRows.map(({ category, counts }) => /* @__PURE__ */ React18.createElement(
1576
- IssuesCategoryRow,
1577
- {
1578
- key: category,
1579
- category,
1580
- label: CATEGORY_LABELS[category],
1581
- counts,
1582
- onClick: () => onCategoryClick(category)
1583
- }
1584
- ))));
1585
- }
1586
-
1587
- // src/components/pages/overview-page.tsx
1588
- import * as React23 from "react";
1589
- import { Box as Box19, Chip as Chip4, Typography as Typography15 } from "@elementor/ui";
1590
- import { __ as __21 } from "@wordpress/i18n";
1591
-
1592
- // src/utils/score-thresholds.ts
1593
- import { __ as __18 } from "@wordpress/i18n";
1594
- var GOOD_THRESHOLD = 90;
1595
- var OK_THRESHOLD = 50;
1596
- function getScoreTier(score) {
1597
- if (score >= GOOD_THRESHOLD) {
1598
- return { color: "success", label: __18("Good", "elementor") };
1599
- }
1600
- if (score >= OK_THRESHOLD) {
1601
- return { color: "warning", label: __18("Needs work", "elementor") };
1602
- }
1603
- return { color: "error", label: __18("At risk", "elementor") };
1604
- }
1605
-
1606
1302
  // src/components/promotions.tsx
1607
- import * as React20 from "react";
1608
- import { Box as Box16, Divider as Divider2, Typography as Typography12 } from "@elementor/ui";
1609
- import { __ as __20 } from "@wordpress/i18n";
1303
+ import * as React15 from "react";
1304
+ import { Box as Box11, Divider, Typography as Typography9 } from "@elementor/ui";
1305
+ import { __ as __14 } from "@wordpress/i18n";
1610
1306
 
1611
1307
  // src/register-promotions.ts
1612
1308
  import { ElementorCookieIcon, PhotoIcon, ShieldHalfFilledIcon } from "@elementor/icons";
1613
- import { __ as __19, _n, sprintf as sprintf3 } from "@wordpress/i18n";
1309
+ import { __ as __13, _n, sprintf as sprintf2 } from "@wordpress/i18n";
1614
1310
  function firstFailExternalUrl(run) {
1615
1311
  return run.result.status === "fail" ? run.result.violations[0]?.externalUrl : void 0;
1616
1312
  }
@@ -1618,7 +1314,7 @@ var PROMOTIONS = [
1618
1314
  {
1619
1315
  auditId: "audits/images-alt-text",
1620
1316
  icon: PhotoIcon,
1621
- ctaLabel: __19("Fix with Ally", "elementor"),
1317
+ ctaLabel: __13("Fix with Ally", "elementor"),
1622
1318
  formatSubtitle: (run) => {
1623
1319
  if (run.result.status !== "fail") {
1624
1320
  return null;
@@ -1627,7 +1323,7 @@ var PROMOTIONS = [
1627
1323
  if (count === 0) {
1628
1324
  return null;
1629
1325
  }
1630
- return sprintf3(
1326
+ return sprintf2(
1631
1327
  /* translators: %d: number of images missing alt text. */
1632
1328
  _n("%d image", "%d images", count, "elementor"),
1633
1329
  count
@@ -1638,21 +1334,21 @@ var PROMOTIONS = [
1638
1334
  {
1639
1335
  auditId: "audits/cookie-policy",
1640
1336
  icon: ElementorCookieIcon,
1641
- ctaLabel: __19("Fix with Cookiez", "elementor"),
1642
- formatSubtitle: (run) => run.result.status === "fail" ? __19("Generate cookie policy", "elementor") : null,
1337
+ ctaLabel: __13("Fix with Cookiez", "elementor"),
1338
+ formatSubtitle: (run) => run.result.status === "fail" ? __13("Generate cookie policy", "elementor") : null,
1643
1339
  getCtaUrl: firstFailExternalUrl
1644
1340
  },
1645
1341
  {
1646
1342
  auditId: "audits/scan-for-cookies",
1647
1343
  icon: ElementorCookieIcon,
1648
- ctaLabel: __19("Scan", "elementor"),
1649
- formatSubtitle: (run) => run.result.status === "fail" ? __19("Scan this page for cookies", "elementor") : null,
1344
+ ctaLabel: __13("Scan", "elementor"),
1345
+ formatSubtitle: (run) => run.result.status === "fail" ? __13("Scan this page for cookies", "elementor") : null,
1650
1346
  getCtaUrl: firstFailExternalUrl
1651
1347
  },
1652
1348
  {
1653
1349
  auditId: "audits/images-too-large",
1654
1350
  icon: ShieldHalfFilledIcon,
1655
- ctaLabel: __19("Optimize all", "elementor"),
1351
+ ctaLabel: __13("Optimize all", "elementor"),
1656
1352
  formatSubtitle: (run) => {
1657
1353
  if (run.result.status !== "fail") {
1658
1354
  return null;
@@ -1661,7 +1357,7 @@ var PROMOTIONS = [
1661
1357
  if (count === 0) {
1662
1358
  return null;
1663
1359
  }
1664
- return sprintf3(
1360
+ return sprintf2(
1665
1361
  /* translators: %d: number of oversized images. */
1666
1362
  _n("%d image", "%d images", count, "elementor"),
1667
1363
  count
@@ -1677,11 +1373,11 @@ function findAuditRun(report, auditId) {
1677
1373
  }
1678
1374
 
1679
1375
  // src/components/promotion-card.tsx
1680
- import * as React19 from "react";
1681
- import { Box as Box15, Button as Button4, Typography as Typography11 } from "@elementor/ui";
1376
+ import * as React14 from "react";
1377
+ import { Box as Box10, Button as Button4, Typography as Typography8 } from "@elementor/ui";
1682
1378
  function PromotionCard({ ctaDisabled, ctaLabel, icon: Icon, onCtaClick, subtitle, title }) {
1683
- return /* @__PURE__ */ React19.createElement(
1684
- Box15,
1379
+ return /* @__PURE__ */ React14.createElement(
1380
+ Box10,
1685
1381
  {
1686
1382
  sx: {
1687
1383
  alignItems: "center",
@@ -1694,9 +1390,9 @@ function PromotionCard({ ctaDisabled, ctaLabel, icon: Icon, onCtaClick, subtitle
1694
1390
  py: 1.5
1695
1391
  }
1696
1392
  },
1697
- /* @__PURE__ */ React19.createElement(Icon, { fontSize: "small", color: "action" }),
1698
- /* @__PURE__ */ React19.createElement(Box15, { sx: { display: "flex", flex: 1, flexDirection: "column", gap: 0.25, minWidth: 0 } }, /* @__PURE__ */ React19.createElement(Typography11, { variant: "body2", fontWeight: "bold" }, title), /* @__PURE__ */ React19.createElement(Typography11, { variant: "caption", color: "text.secondary" }, subtitle)),
1699
- /* @__PURE__ */ React19.createElement(Button4, { variant: "outlined", color: "secondary", size: "small", disabled: ctaDisabled, onClick: onCtaClick }, ctaLabel)
1393
+ /* @__PURE__ */ React14.createElement(Icon, { fontSize: "small", color: "action" }),
1394
+ /* @__PURE__ */ React14.createElement(Box10, { sx: { display: "flex", flex: 1, flexDirection: "column", gap: 0.25, minWidth: 0 } }, /* @__PURE__ */ React14.createElement(Typography8, { variant: "body2", fontWeight: "bold" }, title), /* @__PURE__ */ React14.createElement(Typography8, { variant: "caption", color: "text.secondary" }, subtitle)),
1395
+ /* @__PURE__ */ React14.createElement(Button4, { variant: "outlined", color: "secondary", size: "small", disabled: ctaDisabled, onClick: onCtaClick }, ctaLabel)
1700
1396
  );
1701
1397
  }
1702
1398
 
@@ -1725,7 +1421,7 @@ function Promotions({ report }) {
1725
1421
  if (cards.length === 0) {
1726
1422
  return null;
1727
1423
  }
1728
- return /* @__PURE__ */ React20.createElement(React20.Fragment, null, /* @__PURE__ */ React20.createElement(Divider2, null), /* @__PURE__ */ React20.createElement(Typography12, { variant: "subtitle1", fontWeight: "bold" }, __20("Quick actions", "elementor")), /* @__PURE__ */ React20.createElement(Box16, { sx: { display: "flex", flexDirection: "column", gap: 1 } }, cards.map(({ config, ctaUrl, key, run, subtitle }) => /* @__PURE__ */ React20.createElement(
1424
+ return /* @__PURE__ */ React15.createElement(React15.Fragment, null, /* @__PURE__ */ React15.createElement(Divider, null), /* @__PURE__ */ React15.createElement(Typography9, { variant: "subtitle1", fontWeight: "bold" }, __14("Quick actions", "elementor")), /* @__PURE__ */ React15.createElement(Box11, { sx: { display: "flex", flexDirection: "column", gap: 1 } }, cards.map(({ config, ctaUrl, key, run, subtitle }) => /* @__PURE__ */ React15.createElement(
1729
1425
  PromotionCard,
1730
1426
  {
1731
1427
  key,
@@ -1743,207 +1439,56 @@ function Promotions({ report }) {
1743
1439
  ))));
1744
1440
  }
1745
1441
 
1746
- // src/components/score-bar.tsx
1747
- import * as React21 from "react";
1748
- import { ChevronRightIcon as ChevronRightIcon2 } from "@elementor/icons";
1749
- import { Box as Box17, LinearProgress, Rotate as Rotate3, Typography as Typography13, useTheme as useTheme3 } from "@elementor/ui";
1750
- function ScoreBar({ label, score, onClick }) {
1751
- const isRtl = "rtl" === useTheme3().direction;
1752
- return /* @__PURE__ */ React21.createElement(
1753
- Box17,
1754
- {
1755
- role: onClick ? "button" : void 0,
1756
- tabIndex: onClick ? 0 : void 0,
1757
- onClick,
1758
- onKeyDown: onClick ? onKeyboardClick(onClick) : void 0,
1759
- sx: {
1760
- display: "flex",
1761
- alignItems: "center",
1762
- gap: 1,
1763
- cursor: onClick ? "pointer" : "default",
1764
- outline: "none",
1765
- "&:focus-visible": { outline: "2px solid", outlineColor: "primary.main", borderRadius: 1 },
1766
- py: 0.5
1767
- }
1768
- },
1769
- /* @__PURE__ */ React21.createElement(Typography13, { variant: "body2", sx: { minWidth: 96 } }, label),
1770
- /* @__PURE__ */ React21.createElement(
1771
- LinearProgress,
1772
- {
1773
- variant: "determinate",
1774
- value: score,
1775
- color: getScoreTier(score).color,
1776
- sx: { flex: 1, height: 6, borderRadius: 4, bgcolor: "action.disabledBackground" }
1777
- }
1778
- ),
1779
- /* @__PURE__ */ React21.createElement(
1780
- Typography13,
1781
- {
1782
- variant: "body2",
1783
- color: "text.primary",
1784
- sx: { minWidth: 24, textAlign: "right", fontWeight: 900 }
1785
- },
1786
- score
1787
- ),
1788
- onClick && /* @__PURE__ */ React21.createElement(Rotate3, { in: isRtl }, /* @__PURE__ */ React21.createElement(ChevronRightIcon2, { fontSize: "small", color: "action" }))
1789
- );
1442
+ // src/components/severity-summary-cards.tsx
1443
+ import * as React16 from "react";
1444
+ import { Box as Box12, Typography as Typography10 } from "@elementor/ui";
1445
+ function SeveritySummaryCards({ report }) {
1446
+ const counts = countSeverities(report);
1447
+ return /* @__PURE__ */ React16.createElement(Box12, { display: "flex", gap: 1.5 }, ALL_SEVERITIES.map((severity) => /* @__PURE__ */ React16.createElement(SeverityCard, { key: severity, severity, count: counts[severity] })));
1790
1448
  }
1791
-
1792
- // src/components/score-circle.tsx
1793
- import * as React22 from "react";
1794
- import { Box as Box18, CircularProgress as CircularProgress2, Typography as Typography14 } from "@elementor/ui";
1795
- var SCORE_CIRCLE_SIZE = 88;
1796
- var SCORE_CIRCLE_THICKNESS = 3;
1797
- function ScoreCircle({ color, score }) {
1798
- const progressColor = color ?? getScoreTier(score).color;
1799
- return /* @__PURE__ */ React22.createElement(
1800
- Box18,
1449
+ function SeverityCard({ severity, count }) {
1450
+ return /* @__PURE__ */ React16.createElement(
1451
+ Box12,
1801
1452
  {
1802
- role: "progressbar",
1803
- "aria-valuenow": score,
1804
- "aria-valuemin": 0,
1805
- "aria-valuemax": 100,
1806
- sx: { position: "relative", display: "inline-flex" }
1453
+ display: "flex",
1454
+ flex: 1,
1455
+ flexDirection: "column",
1456
+ gap: 1,
1457
+ bgcolor: "grey.50",
1458
+ borderRadius: 1.5,
1459
+ px: 1.5,
1460
+ py: 1
1807
1461
  },
1808
- /* @__PURE__ */ React22.createElement(
1809
- CircularProgress2,
1810
- {
1811
- variant: "determinate",
1812
- value: 100,
1813
- size: SCORE_CIRCLE_SIZE,
1814
- thickness: SCORE_CIRCLE_THICKNESS,
1815
- sx: { color: "action.disabledBackground" }
1816
- }
1817
- ),
1818
- /* @__PURE__ */ React22.createElement(
1819
- CircularProgress2,
1820
- {
1821
- variant: "determinate",
1822
- value: score,
1823
- size: SCORE_CIRCLE_SIZE,
1824
- thickness: SCORE_CIRCLE_THICKNESS,
1825
- color: progressColor,
1826
- sx: { position: "absolute", left: 0 }
1827
- }
1828
- ),
1829
- /* @__PURE__ */ React22.createElement(
1830
- Box18,
1831
- {
1832
- sx: {
1833
- position: "absolute",
1834
- inset: 0,
1835
- display: "flex",
1836
- alignItems: "center",
1837
- justifyContent: "center"
1838
- }
1839
- },
1840
- /* @__PURE__ */ React22.createElement(
1841
- Typography14,
1842
- {
1843
- variant: "h4",
1844
- component: "span",
1845
- color: "text.primary",
1846
- sx: { fontWeight: 700, lineHeight: 1 }
1847
- },
1848
- score
1849
- )
1850
- )
1462
+ /* @__PURE__ */ React16.createElement(SeverityIcon, { severity }),
1463
+ /* @__PURE__ */ React16.createElement(Box12, { display: "flex", flexDirection: "column" }, /* @__PURE__ */ React16.createElement(Typography10, { variant: "h5", fontWeight: 700, component: "span" }, count), /* @__PURE__ */ React16.createElement(Typography10, { variant: "caption", color: "text.secondary" }, severityPluralLabel(severity)))
1851
1464
  );
1852
1465
  }
1853
1466
 
1854
1467
  // src/components/pages/overview-page.tsx
1855
1468
  function OverviewPage({ onCategoryClick, report }) {
1856
1469
  const populatedCategories = getPopulatedCategories(report.categories, ALL_CATEGORIES);
1857
- const overallScore = getScoreTier(report.overall);
1858
- return /* @__PURE__ */ React23.createElement(Box19, { sx: { display: "flex", flexDirection: "column", gap: 4, p: 2 } }, /* @__PURE__ */ React23.createElement(Box19, { sx: { display: "flex", alignItems: "center", gap: 2 } }, /* @__PURE__ */ React23.createElement(ScoreCircle, { color: overallScore.color, score: report.overall }), /* @__PURE__ */ React23.createElement(Box19, { sx: { display: "flex", flexDirection: "column", gap: 0.5 } }, /* @__PURE__ */ React23.createElement(
1859
- Chip4,
1860
- {
1861
- label: overallScore.label,
1862
- color: overallScore.color,
1863
- variant: "standard",
1864
- size: "small",
1865
- sx: { fontWeight: 600, alignSelf: "flex-start" }
1866
- }
1867
- ), /* @__PURE__ */ React23.createElement(Typography15, { variant: "body2", color: "text.secondary" }, __21("Overall score", "elementor")))), /* @__PURE__ */ React23.createElement(Box19, { sx: { display: "flex", flexDirection: "column", gap: 2 } }, populatedCategories.map((category) => /* @__PURE__ */ React23.createElement(
1868
- ScoreBar,
1470
+ const categoryRows = populatedCategories.map((category) => ({ category, counts: countSeverities(report, category) })).filter(({ counts }) => Object.values(counts).some((count) => count > 0));
1471
+ return /* @__PURE__ */ React17.createElement(Box13, { display: "flex", flexDirection: "column", gap: 3, p: 2 }, /* @__PURE__ */ React17.createElement(SeveritySummaryCards, { report }), /* @__PURE__ */ React17.createElement(Box13, { display: "flex", flexDirection: "column", gap: 1 }, /* @__PURE__ */ React17.createElement(Typography11, { variant: "subtitle1", component: "h2" }, __15("All issues", "elementor")), /* @__PURE__ */ React17.createElement(Box13, { display: "flex", flexDirection: "column", gap: 1 }, categoryRows.map(({ category, counts }) => /* @__PURE__ */ React17.createElement(
1472
+ IssuesCategoryRow,
1869
1473
  {
1870
1474
  key: category,
1475
+ category,
1871
1476
  label: CATEGORY_LABELS[category],
1872
- score: report.categories[category].score,
1477
+ counts,
1873
1478
  onClick: () => onCategoryClick(category)
1874
1479
  }
1875
- ))), /* @__PURE__ */ React23.createElement(Promotions, { report }));
1480
+ )))), /* @__PURE__ */ React17.createElement(Promotions, { report }));
1876
1481
  }
1877
1482
 
1878
1483
  // src/components/report-shell.tsx
1879
- function activeTab(page) {
1880
- if (page === "overview") {
1881
- return "overview";
1882
- }
1883
- if (page === "issues") {
1884
- return "issues";
1885
- }
1886
- return page.backTo;
1887
- }
1888
- function isAllAuditsPage(page) {
1889
- return typeof page === "object" && "page" in page && page.page === "all-audits";
1890
- }
1891
1484
  function isCategoryPage(page) {
1892
1485
  return typeof page === "object" && "category" in page;
1893
1486
  }
1894
1487
  function ReportShell({ report }) {
1895
- const [activePage, setActivePage] = useState5("overview");
1896
- const currentTab = activeTab(activePage);
1897
- const handleTabChange = (_, value) => {
1898
- setActivePage(value);
1899
- };
1900
- const openCategory = (category, backTo) => {
1901
- setActivePage({ category, backTo });
1902
- };
1903
- const openAllAudits = (expand, backTo = "issues") => {
1904
- setActivePage({ page: "all-audits", expand, backTo });
1905
- };
1906
- const backFromSubPage = () => {
1907
- if (isAllAuditsPage(activePage) || isCategoryPage(activePage)) {
1908
- setActivePage(activePage.backTo);
1909
- }
1910
- };
1911
- return /* @__PURE__ */ React24.createElement(Box20, { sx: { display: "flex", flexDirection: "column", flex: 1, minHeight: 0 } }, /* @__PURE__ */ React24.createElement(Box20, { sx: { flexShrink: 0 } }, /* @__PURE__ */ React24.createElement(
1912
- Tabs,
1913
- {
1914
- "aria-label": __22("Audit navigation", "elementor"),
1915
- value: currentTab,
1916
- onChange: handleTabChange,
1917
- textColor: "secondary",
1918
- indicatorColor: "secondary",
1919
- size: "small",
1920
- centered: true,
1921
- variant: "fullWidth"
1922
- },
1923
- /* @__PURE__ */ React24.createElement(Tab, { value: "overview", label: __22("Overview", "elementor") }),
1924
- /* @__PURE__ */ React24.createElement(Tab, { value: "issues", label: __22("Issues", "elementor") })
1925
- ), /* @__PURE__ */ React24.createElement(Divider3, null)), /* @__PURE__ */ React24.createElement(Box20, { sx: { flex: 1, minHeight: 0, overflowY: "auto" } }, activePage === "overview" && /* @__PURE__ */ React24.createElement(
1926
- OverviewPage,
1927
- {
1928
- report,
1929
- onCategoryClick: (category) => openCategory(category, "overview")
1930
- }
1931
- ), activePage === "issues" && /* @__PURE__ */ React24.createElement(
1932
- IssuesPage,
1933
- {
1934
- report,
1935
- onCategoryClick: (category) => openCategory(category, "issues"),
1936
- onAllAuditsClick: () => openAllAudits(),
1937
- onStatusClick: (status) => openAllAudits(status)
1938
- }
1939
- ), isAllAuditsPage(activePage) && /* @__PURE__ */ React24.createElement(
1940
- AllAuditsPage,
1941
- {
1942
- report,
1943
- initialExpandedStatus: activePage.expand,
1944
- onBack: backFromSubPage
1945
- }
1946
- ), isCategoryPage(activePage) && /* @__PURE__ */ React24.createElement(CategoryPage, { category: activePage.category, report, onBack: backFromSubPage })));
1488
+ const [activePage, setActivePage] = useState4("overview");
1489
+ const openCategory = (category) => setActivePage({ category });
1490
+ const backToOverview = () => setActivePage("overview");
1491
+ return /* @__PURE__ */ React18.createElement(Box14, { sx: { flex: 1, minHeight: 0, overflowY: "auto" } }, activePage === "overview" && /* @__PURE__ */ React18.createElement(OverviewPage, { report, onCategoryClick: openCategory }), isCategoryPage(activePage) && /* @__PURE__ */ React18.createElement(CategoryPage, { category: activePage.category, report, onBack: backToOverview }));
1947
1492
  }
1948
1493
 
1949
1494
  // src/components/audit-panel.tsx
@@ -1952,32 +1497,33 @@ function AuditPanel() {
1952
1497
  const hostDocumentId = getHostDocumentId3() ?? 0;
1953
1498
  const onRun = () => run(hostDocumentId);
1954
1499
  const lastScanLabel = report ? new Date(report.runAt).toLocaleTimeString() : null;
1955
- return /* @__PURE__ */ React25.createElement(React25.Fragment, null, /* @__PURE__ */ React25.createElement(
1500
+ return /* @__PURE__ */ React19.createElement(React19.Fragment, null, /* @__PURE__ */ React19.createElement(
1956
1501
  FloatingPanelHeader,
1957
1502
  {
1958
1503
  panelId: AUDIT_PANEL_ID,
1959
- title: __23("Page Audit", "elementor"),
1960
- badge: __23("Beta", "elementor"),
1504
+ title: __16("Page Audit", "elementor"),
1505
+ badge: __16("Beta", "elementor"),
1961
1506
  titleVariant: "subtitle2"
1962
1507
  }
1963
- ), /* @__PURE__ */ React25.createElement(
1508
+ ), /* @__PURE__ */ React19.createElement(
1964
1509
  FloatingPanelBody,
1965
1510
  {
1966
1511
  sx: status === "ready" ? { display: "flex", flexDirection: "column", overflow: "hidden", minHeight: 0 } : void 0
1967
1512
  },
1968
- status === "idle" && /* @__PURE__ */ React25.createElement(WelcomePage, null),
1969
- status === "loading" && /* @__PURE__ */ React25.createElement(LoadingPage, null),
1970
- status === "error" && /* @__PURE__ */ React25.createElement(ErrorPage, { message: error ?? "", onRetry: onRun }),
1971
- status === "ready" && report && /* @__PURE__ */ React25.createElement(ReportShell, { report })
1972
- ), /* @__PURE__ */ React25.createElement(FloatingPanelFooter, null, lastScanLabel ? /* @__PURE__ */ React25.createElement(Typography16, { variant: "caption", sx: { flex: 1 } }, __23("Last scan:", "elementor"), " ", lastScanLabel) : /* @__PURE__ */ React25.createElement(Box21, { sx: { flex: 1 } }), lastScanLabel && /* @__PURE__ */ React25.createElement(AuditFeedback, null), /* @__PURE__ */ React25.createElement(
1513
+ status === "idle" && /* @__PURE__ */ React19.createElement(WelcomePage, null),
1514
+ status === "loading" && /* @__PURE__ */ React19.createElement(LoadingPage, null),
1515
+ status === "error" && /* @__PURE__ */ React19.createElement(ErrorPage, { message: error ?? "", onRetry: onRun }),
1516
+ status === "ready" && report && /* @__PURE__ */ React19.createElement(ReportShell, { report })
1517
+ ), /* @__PURE__ */ React19.createElement(FloatingPanelFooter, null, lastScanLabel ? /* @__PURE__ */ React19.createElement(Typography12, { variant: "caption", sx: { flex: 1 } }, __16("Last scan:", "elementor"), " ", lastScanLabel) : /* @__PURE__ */ React19.createElement(Box15, { sx: { flex: 1 } }), lastScanLabel && /* @__PURE__ */ React19.createElement(AuditFeedback, null), /* @__PURE__ */ React19.createElement(
1973
1518
  Button5,
1974
1519
  {
1975
1520
  variant: "contained",
1976
1521
  size: "small",
1522
+ startIcon: lastScanLabel ? /* @__PURE__ */ React19.createElement(ReloadIcon, { fontSize: "small" }) : void 0,
1977
1523
  onClick: onRun,
1978
1524
  disabled: status === "loading" || hostDocumentId === 0
1979
1525
  },
1980
- lastScanLabel ? __23("Re-scan", "elementor") : __23("Run page audit", "elementor")
1526
+ lastScanLabel ? __16("Rescan", "elementor") : __16("Run page audit", "elementor")
1981
1527
  )));
1982
1528
  }
1983
1529
 
@@ -2002,7 +1548,7 @@ function useAuditToggleProps() {
2002
1548
  const { isOpen } = auditPanel.useFloatingPanelStatus();
2003
1549
  const { toggle } = auditPanel.useFloatingPanelActions();
2004
1550
  return {
2005
- title: __24("Audit Page", "elementor"),
1551
+ title: __17("Audit Page", "elementor"),
2006
1552
  icon: ShieldCheckIcon2,
2007
1553
  selected: isOpen,
2008
1554
  onClick: () => toggle()
@@ -2020,15 +1566,15 @@ function registerAppBarAuditsToggle() {
2020
1566
  }
2021
1567
 
2022
1568
  // src/audits/accessibility-policy.ts
2023
- import { __ as __25 } from "@wordpress/i18n";
1569
+ import { __ as __18 } from "@wordpress/i18n";
2024
1570
  var audit = {
2025
1571
  id: "audits/accessibility-policy",
2026
- title: __25("Accessibility policy", "elementor"),
2027
- description: __25(
1572
+ title: __18("Accessibility policy", "elementor"),
1573
+ description: __18(
2028
1574
  "An accessibility policy demonstrates your commitment to digital inclusion and may be legally required in some regions.",
2029
1575
  "elementor"
2030
1576
  ),
2031
- fixHint: __25("Install the Ally plugin to add an accessibility policy to your website.", "elementor"),
1577
+ fixHint: __18("Install the Ally plugin to add an accessibility policy to your website.", "elementor"),
2032
1578
  categories: ["compliance"],
2033
1579
  severity: "info",
2034
1580
  weight: 1,
@@ -2041,7 +1587,7 @@ var audit = {
2041
1587
  violations: [
2042
1588
  {
2043
1589
  auditId: audit.id,
2044
- label: __25("Ally plugin is not installed or active.", "elementor"),
1590
+ label: __18("Ally plugin is not installed or active.", "elementor"),
2045
1591
  externalUrl: ctx.pageContext.ally_plugin_url
2046
1592
  }
2047
1593
  ]
@@ -2050,15 +1596,15 @@ var audit = {
2050
1596
  };
2051
1597
 
2052
1598
  // src/audits/accessibility-statement.ts
2053
- import { __ as __26 } from "@wordpress/i18n";
1599
+ import { __ as __19 } from "@wordpress/i18n";
2054
1600
  var audit2 = {
2055
1601
  id: "audits/accessibility-statement",
2056
- title: __26("Create an accessibility statement", "elementor"),
2057
- description: __26(
1602
+ title: __19("Create an accessibility statement", "elementor"),
1603
+ description: __19(
2058
1604
  "An accessibility statement showcases your efforts to create an inclusive online space, highlighting helpful features and a commitment to accessibility.",
2059
1605
  "elementor"
2060
1606
  ),
2061
- fixHint: __26("Use Ally to create and publish an accessibility statement for your site.", "elementor"),
1607
+ fixHint: __19("Use Ally to create and publish an accessibility statement for your site.", "elementor"),
2062
1608
  categories: ["accessibility"],
2063
1609
  severity: "info",
2064
1610
  weight: 1,
@@ -2072,10 +1618,10 @@ var audit2 = {
2072
1618
  violations: [
2073
1619
  {
2074
1620
  auditId: audit2.id,
2075
- label: __26("No accessibility statement has been created for this site.", "elementor"),
1621
+ label: __19("No accessibility statement has been created for this site.", "elementor"),
2076
1622
  externalUrl: isReady ? ctx.pageContext.ally_accessibility_statement_url : ctx.pageContext.ally_plugin_url,
2077
- ctaLabel: __26("Create", "elementor"),
2078
- secondaryCtaLabel: __26("Learn more", "elementor"),
1623
+ ctaLabel: __19("Create", "elementor"),
1624
+ secondaryCtaLabel: __19("Learn more", "elementor"),
2079
1625
  secondaryCtaUrl: "https://elementor.com/help/start-using-ally/#statement"
2080
1626
  }
2081
1627
  ]
@@ -2084,7 +1630,7 @@ var audit2 = {
2084
1630
  };
2085
1631
 
2086
1632
  // src/audits/accessibility-widget.ts
2087
- import { __ as __27 } from "@wordpress/i18n";
1633
+ import { __ as __20 } from "@wordpress/i18n";
2088
1634
 
2089
1635
  // src/utils/scan-accessibility-widgets.ts
2090
1636
  var ACCESSIBILITY_WIDGET_SCRIPT_SOURCES = ["cdn.elementor.com/a11y/widget.js"];
@@ -2095,18 +1641,18 @@ function hasAccessibilityWidgetScript(html) {
2095
1641
  // src/audits/accessibility-widget.ts
2096
1642
  var audit3 = {
2097
1643
  id: "audits/accessibility-widget",
2098
- title: __27("Add an accessibility widget", "elementor"),
2099
- description: __27("Make your site more inclusive by adding an accessibility widget.", "elementor"),
2100
- fixHint: __27("Activate Ally\u2019s accessibility widget to give visitors on-page accessibility tools.", "elementor"),
1644
+ title: __20("Add an accessibility widget", "elementor"),
1645
+ description: __20("Make your site more inclusive by adding an accessibility widget.", "elementor"),
1646
+ fixHint: __20("Activate Ally\u2019s accessibility widget to give visitors on-page accessibility tools.", "elementor"),
2101
1647
  categories: ["accessibility"],
2102
1648
  severity: "info",
2103
1649
  weight: 1,
2104
1650
  evaluate: (ctx) => {
2105
1651
  if (!ctx.pageContext.frontend_url) {
2106
- return { status: "skipped", reason: __27("Page is not published.", "elementor") };
1652
+ return { status: "skipped", reason: __20("Page is not published.", "elementor") };
2107
1653
  }
2108
1654
  if (!ctx.renderedHtml) {
2109
- return { status: "skipped", reason: __27("Could not fetch the published page.", "elementor") };
1655
+ return { status: "skipped", reason: __20("Could not fetch the published page.", "elementor") };
2110
1656
  }
2111
1657
  if (hasAccessibilityWidgetScript(ctx.renderedHtml)) {
2112
1658
  return { status: "pass" };
@@ -2117,9 +1663,9 @@ var audit3 = {
2117
1663
  violations: [
2118
1664
  {
2119
1665
  auditId: audit3.id,
2120
- label: __27("No accessibility widget is active on this site.", "elementor"),
1666
+ label: __20("No accessibility widget is active on this site.", "elementor"),
2121
1667
  externalUrl: isReady ? ctx.pageContext.ally_widget_settings_url : ctx.pageContext.ally_plugin_url,
2122
- ctaLabel: __27("Activate", "elementor")
1668
+ ctaLabel: __20("Activate", "elementor")
2123
1669
  }
2124
1670
  ]
2125
1671
  };
@@ -2127,15 +1673,15 @@ var audit3 = {
2127
1673
  };
2128
1674
 
2129
1675
  // src/audits/cookie-policy.ts
2130
- import { __ as __28 } from "@wordpress/i18n";
1676
+ import { __ as __21 } from "@wordpress/i18n";
2131
1677
  var audit4 = {
2132
1678
  id: "audits/cookie-policy",
2133
- title: __28("Cookie policy", "elementor"),
2134
- description: __28(
1679
+ title: __21("Cookie policy", "elementor"),
1680
+ description: __21(
2135
1681
  "A cookie policy is required by privacy regulations such as GDPR (EU) or CCPA (US) to inform visitors about tracking and data collection.",
2136
1682
  "elementor"
2137
1683
  ),
2138
- fixHint: __28("Install the Cookiez plugin to add a cookie policy to your website.", "elementor"),
1684
+ fixHint: __21("Install the Cookiez plugin to add a cookie policy to your website.", "elementor"),
2139
1685
  categories: ["compliance"],
2140
1686
  severity: "info",
2141
1687
  weight: 1,
@@ -2148,9 +1694,9 @@ var audit4 = {
2148
1694
  violations: [
2149
1695
  {
2150
1696
  auditId: audit4.id,
2151
- label: __28("Cookiez plugin is not installed or active.", "elementor"),
1697
+ label: __21("Cookiez plugin is not installed or active.", "elementor"),
2152
1698
  externalUrl: ctx.pageContext.cookiez_plugin_url,
2153
- ctaLabel: __28("Set up cookie consent", "elementor")
1699
+ ctaLabel: __21("Set up cookie consent", "elementor")
2154
1700
  }
2155
1701
  ]
2156
1702
  };
@@ -2159,7 +1705,7 @@ var audit4 = {
2159
1705
 
2160
1706
  // src/audits/deep-nesting.ts
2161
1707
  import { getWidgetsCache } from "@elementor/editor-elements";
2162
- import { __ as __29 } from "@wordpress/i18n";
1708
+ import { __ as __22 } from "@wordpress/i18n";
2163
1709
  var MAX_NESTING_DEPTH = 6;
2164
1710
  function isNestingElement(node, widgetsCache) {
2165
1711
  if (node.elType === "container") {
@@ -2169,18 +1715,18 @@ function isNestingElement(node, widgetsCache) {
2169
1715
  }
2170
1716
  var audit5 = {
2171
1717
  id: "audits/deep-nesting",
2172
- title: __29("Deep container nesting", "elementor"),
2173
- description: __29(
1718
+ title: __22("Deep container nesting", "elementor"),
1719
+ description: __22(
2174
1720
  "Container nesting exceeds the recommended depth. Deep DOM trees hurt rendering performance and readability.",
2175
1721
  "elementor"
2176
1722
  ),
2177
- fixHint: __29("Flatten the layout by removing unnecessary wrapper containers.", "elementor"),
1723
+ fixHint: __22("Flatten the layout by removing unnecessary wrapper containers.", "elementor"),
2178
1724
  categories: ["performance", "best-practices"],
2179
1725
  severity: "warning",
2180
1726
  weight: 5,
2181
1727
  evaluate: (ctx) => {
2182
1728
  if (ctx.elements.tree.length === 0) {
2183
- return { status: "skipped", reason: __29("No elements", "elementor") };
1729
+ return { status: "skipped", reason: __22("No elements", "elementor") };
2184
1730
  }
2185
1731
  const widgetsCache = getWidgetsCache();
2186
1732
  const violations = [];
@@ -2194,7 +1740,7 @@ var audit5 = {
2194
1740
  auditId: audit5.id,
2195
1741
  elementId: node.id,
2196
1742
  targetHint: "element-settings",
2197
- label: __29("Container nesting is too deep.", "elementor")
1743
+ label: __22("Container nesting is too deep.", "elementor")
2198
1744
  });
2199
1745
  }
2200
1746
  });
@@ -2203,15 +1749,15 @@ var audit5 = {
2203
1749
  };
2204
1750
 
2205
1751
  // src/audits/default-design-system.ts
2206
- import { __ as __30 } from "@wordpress/i18n";
1752
+ import { __ as __23 } from "@wordpress/i18n";
2207
1753
  var audit6 = {
2208
1754
  id: "audits/default-design-system",
2209
- title: __30("Default website kit", "elementor"),
2210
- description: __30(
1755
+ title: __23("Default website kit", "elementor"),
1756
+ description: __23(
2211
1757
  "Your website is using the default design system colors and fonts. Custom branding makes the website feel uniquely yours.",
2212
1758
  "elementor"
2213
1759
  ),
2214
- fixHint: __30("Open Site Settings and customize your kit (colors, fonts, layout).", "elementor"),
1760
+ fixHint: __23("Open Site Settings and customize your kit (colors, fonts, layout).", "elementor"),
2215
1761
  categories: ["best-practices"],
2216
1762
  severity: "info",
2217
1763
  weight: 1,
@@ -2224,7 +1770,7 @@ var audit6 = {
2224
1770
  violations: [
2225
1771
  {
2226
1772
  auditId: audit6.id,
2227
- label: __30("Kit appears unchanged from default.", "elementor"),
1773
+ label: __23("Kit appears unchanged from default.", "elementor"),
2228
1774
  targetHint: "site-settings"
2229
1775
  }
2230
1776
  ]
@@ -2234,16 +1780,16 @@ var audit6 = {
2234
1780
 
2235
1781
  // src/audits/deprecated-widgets.ts
2236
1782
  import { getWidgetsCache as getWidgetsCache2 } from "@elementor/editor-elements";
2237
- import { __ as __31 } from "@wordpress/i18n";
1783
+ import { __ as __24 } from "@wordpress/i18n";
2238
1784
  var DEPRECATION_CONTROL_NAME = "deprecation_message";
2239
1785
  var audit7 = {
2240
1786
  id: "audits/deprecated-widgets",
2241
- title: __31("Deprecated widgets", "elementor"),
2242
- description: __31(
1787
+ title: __24("Deprecated widgets", "elementor"),
1788
+ description: __24(
2243
1789
  "Deprecated widgets should not be used. For better capabilities use the recommended replacement.",
2244
1790
  "elementor"
2245
1791
  ),
2246
- fixHint: __31("Replace each deprecated widget with the recommended new widget shown in its panel.", "elementor"),
1792
+ fixHint: __24("Replace each deprecated widget with the recommended new widget shown in its panel.", "elementor"),
2247
1793
  categories: ["best-practices", "performance"],
2248
1794
  severity: "warning",
2249
1795
  weight: 7,
@@ -2270,7 +1816,7 @@ var audit7 = {
2270
1816
  auditId: audit7.id,
2271
1817
  elementId: node.id,
2272
1818
  targetHint: "element-settings",
2273
- label: __31("Using deprecated widget.", "elementor")
1819
+ label: __24("Using deprecated widget.", "elementor")
2274
1820
  });
2275
1821
  });
2276
1822
  return violations.length === 0 ? { status: "pass" } : { status: "fail", violations };
@@ -2278,7 +1824,7 @@ var audit7 = {
2278
1824
  };
2279
1825
 
2280
1826
  // src/audits/google-consent-mode.ts
2281
- import { __ as __32 } from "@wordpress/i18n";
1827
+ import { __ as __25 } from "@wordpress/i18n";
2282
1828
 
2283
1829
  // src/utils/scan-consent-signals.ts
2284
1830
  var GOOGLE_TRACKING_PATTERNS = [
@@ -2301,12 +1847,12 @@ function hasConsentDefaultCall(html) {
2301
1847
  // src/audits/google-consent-mode.ts
2302
1848
  var audit8 = {
2303
1849
  id: "audits/google-consent-mode",
2304
- title: __32("Google Consent Mode", "elementor"),
2305
- description: __32(
1850
+ title: __25("Google Consent Mode", "elementor"),
1851
+ description: __25(
2306
1852
  "Google Analytics, Ads, or Tag Manager are running on this site and may not receive a consent signal, which risks losing conversion/analytics data and compliance exposure.",
2307
1853
  "elementor"
2308
1854
  ),
2309
- fixHint: __32(
1855
+ fixHint: __25(
2310
1856
  "Turn on Google Consent Mode in your cookie consent plugin so Google tags respect visitor consent choices.",
2311
1857
  "elementor"
2312
1858
  ),
@@ -2315,18 +1861,18 @@ var audit8 = {
2315
1861
  weight: 1,
2316
1862
  evaluate: (ctx) => {
2317
1863
  if (!ctx.pageContext.frontend_url) {
2318
- return { status: "skipped", reason: __32("Page is not published.", "elementor") };
1864
+ return { status: "skipped", reason: __25("Page is not published.", "elementor") };
2319
1865
  }
2320
1866
  if (!ctx.renderedHtml) {
2321
- return { status: "skipped", reason: __32("Could not fetch the published page.", "elementor") };
1867
+ return { status: "skipped", reason: __25("Could not fetch the published page.", "elementor") };
2322
1868
  }
2323
1869
  if (!hasGoogleTracking(ctx.renderedHtml)) {
2324
- return { status: "skipped", reason: __32("No Google tracking product detected.", "elementor") };
1870
+ return { status: "skipped", reason: __25("No Google tracking product detected.", "elementor") };
2325
1871
  }
2326
1872
  if (hasConsentDefaultCall(ctx.renderedHtml)) {
2327
1873
  return { status: "pass" };
2328
1874
  }
2329
- const label = __32("No Google Consent Mode signal was found on the page.", "elementor");
1875
+ const label = __25("No Google Consent Mode signal was found on the page.", "elementor");
2330
1876
  const isCookiezReady = ctx.pageContext.cookiez_plugin_installed && ctx.pageContext.cookiez_plugin_active;
2331
1877
  if (isCookiezReady) {
2332
1878
  return {
@@ -2335,7 +1881,7 @@ var audit8 = {
2335
1881
  {
2336
1882
  auditId: audit8.id,
2337
1883
  label,
2338
- ctaLabel: __32("Enable", "elementor"),
1884
+ ctaLabel: __25("Enable", "elementor"),
2339
1885
  externalUrl: ctx.pageContext.cookiez_consent_mode_settings_url
2340
1886
  }
2341
1887
  ]
@@ -2355,7 +1901,7 @@ var audit8 = {
2355
1901
  };
2356
1902
 
2357
1903
  // src/audits/heading-structure.ts
2358
- import { __ as __33 } from "@wordpress/i18n";
1904
+ import { __ as __26 } from "@wordpress/i18n";
2359
1905
  var HEADING_LEVELS = ["h1", "h2", "h3", "h4", "h5", "h6"];
2360
1906
  var HEADING_CONTROLS_REGISTRY = {
2361
1907
  // Core
@@ -2533,27 +2079,27 @@ function extractPageHeadings(tree) {
2533
2079
  }
2534
2080
  var audit9 = {
2535
2081
  id: "audits/heading-structure",
2536
- title: __33("Heading structure", "elementor"),
2537
- description: __33("Pages should have exactly one H1 and a non-skipping heading order.", "elementor"),
2538
- fixHint: __33("Ensure your page has one H1 and that heading levels do not skip (no H2 \u2192 H4).", "elementor"),
2082
+ title: __26("Heading structure", "elementor"),
2083
+ description: __26("Pages should have exactly one H1 and a non-skipping heading order.", "elementor"),
2084
+ fixHint: __26("Ensure your page has one H1 and that heading levels do not skip (no H2 \u2192 H4).", "elementor"),
2539
2085
  categories: ["seo", "accessibility"],
2540
2086
  severity: "error",
2541
2087
  weight: 10,
2542
2088
  evaluate: (ctx) => {
2543
2089
  if (ctx.elements.tree.length === 0) {
2544
- return { status: "skipped", reason: __33("No elements", "elementor") };
2090
+ return { status: "skipped", reason: __26("No elements", "elementor") };
2545
2091
  }
2546
2092
  const headings = extractPageHeadings(ctx.elements.tree);
2547
2093
  const violations = [];
2548
2094
  if (headings.length === 0) {
2549
2095
  violations.push({
2550
2096
  auditId: audit9.id,
2551
- label: __33("No headings found on the page.", "elementor")
2097
+ label: __26("No headings found on the page.", "elementor")
2552
2098
  });
2553
2099
  } else {
2554
2100
  const h1Count = headings.filter((h) => h.level === 1).length;
2555
2101
  if (h1Count === 0) {
2556
- violations.push({ auditId: audit9.id, label: __33("No H1 on the page.", "elementor") });
2102
+ violations.push({ auditId: audit9.id, label: __26("No H1 on the page.", "elementor") });
2557
2103
  }
2558
2104
  if (h1Count > 1) {
2559
2105
  headings.filter((h) => h.level === 1).slice(1).forEach(
@@ -2561,7 +2107,7 @@ var audit9 = {
2561
2107
  auditId: audit9.id,
2562
2108
  elementId: h.elementId,
2563
2109
  targetHint: "element-settings",
2564
- label: __33("More than one H1 on the page.", "elementor")
2110
+ label: __26("More than one H1 on the page.", "elementor")
2565
2111
  })
2566
2112
  );
2567
2113
  }
@@ -2571,7 +2117,7 @@ var audit9 = {
2571
2117
  auditId: audit9.id,
2572
2118
  elementId: headings[i].elementId,
2573
2119
  targetHint: "element-settings",
2574
- label: __33("Heading level skipped.", "elementor")
2120
+ label: __26("Heading level skipped.", "elementor")
2575
2121
  });
2576
2122
  }
2577
2123
  }
@@ -2581,24 +2127,24 @@ var audit9 = {
2581
2127
  };
2582
2128
 
2583
2129
  // src/audits/hidden-elements.ts
2584
- import { __ as __34 } from "@wordpress/i18n";
2130
+ import { __ as __27 } from "@wordpress/i18n";
2585
2131
  function isHiddenOnAllDevices(settings) {
2586
2132
  return Boolean(settings.hide_desktop) && Boolean(settings.hide_tablet) && Boolean(settings.hide_mobile);
2587
2133
  }
2588
2134
  var audit10 = {
2589
2135
  id: "audits/hidden-elements",
2590
- title: __34("Hidden elements", "elementor"),
2591
- description: __34(
2136
+ title: __27("Hidden elements", "elementor"),
2137
+ description: __27(
2592
2138
  "Elements hidden on all devices simultaneously are effectively dead code in the page tree.",
2593
2139
  "elementor"
2594
2140
  ),
2595
- fixHint: __34("Remove the element or make it visible on at least one device breakpoint.", "elementor"),
2141
+ fixHint: __27("Remove the element or make it visible on at least one device breakpoint.", "elementor"),
2596
2142
  categories: ["best-practices", "performance"],
2597
2143
  severity: "info",
2598
2144
  weight: 3,
2599
2145
  evaluate: (ctx) => {
2600
2146
  if (ctx.elements.tree.length === 0) {
2601
- return { status: "skipped", reason: __34("No elements", "elementor") };
2147
+ return { status: "skipped", reason: __27("No elements", "elementor") };
2602
2148
  }
2603
2149
  const violations = [];
2604
2150
  walkElements(ctx.elements.tree, (node) => {
@@ -2607,7 +2153,7 @@ var audit10 = {
2607
2153
  auditId: audit10.id,
2608
2154
  elementId: node.id,
2609
2155
  targetHint: "element-settings",
2610
- label: __34("Element is hidden on all devices.", "elementor")
2156
+ label: __27("Element is hidden on all devices.", "elementor")
2611
2157
  });
2612
2158
  }
2613
2159
  });
@@ -2616,7 +2162,7 @@ var audit10 = {
2616
2162
  };
2617
2163
 
2618
2164
  // src/audits/images-alt-text.ts
2619
- import { __ as __35 } from "@wordpress/i18n";
2165
+ import { __ as __28 } from "@wordpress/i18n";
2620
2166
 
2621
2167
  // src/utils/image-alt.ts
2622
2168
  function hasMeaningfulAlt(media, pageContext) {
@@ -2637,15 +2183,15 @@ function isImageSourcePresent(media) {
2637
2183
  // src/audits/images-alt-text.ts
2638
2184
  var audit11 = {
2639
2185
  id: "audits/images-alt-text",
2640
- title: __35("Images alt text", "elementor"),
2641
- description: __35("Every image needs a meaningful alt attribute for screen readers and image-search.", "elementor"),
2642
- fixHint: __35("Open the image's settings and add an Alt Text describing the image.", "elementor"),
2186
+ title: __28("Images alt text", "elementor"),
2187
+ description: __28("Every image needs a meaningful alt attribute for screen readers and image-search.", "elementor"),
2188
+ fixHint: __28("Open the image's settings and add an Alt Text describing the image.", "elementor"),
2643
2189
  categories: ["seo", "accessibility"],
2644
2190
  severity: "error",
2645
2191
  weight: 10,
2646
2192
  evaluate: (ctx) => {
2647
2193
  if (!hasPageImages(ctx.elements.tree)) {
2648
- return { status: "skipped", reason: __35("No images", "elementor") };
2194
+ return { status: "skipped", reason: __28("No images", "elementor") };
2649
2195
  }
2650
2196
  const violations = [];
2651
2197
  const failedWidgetIds = /* @__PURE__ */ new Set();
@@ -2661,9 +2207,9 @@ var audit11 = {
2661
2207
  auditId: audit11.id,
2662
2208
  elementId: node.id,
2663
2209
  targetHint: "element-settings",
2664
- label: __35("Image is missing alt text.", "elementor"),
2210
+ label: __28("Image is missing alt text.", "elementor"),
2665
2211
  externalUrl: ctx.pageContext.ally_plugin_url,
2666
- ctaLabel: __35("Fix with Ally", "elementor")
2212
+ ctaLabel: __28("Fix with Ally", "elementor")
2667
2213
  });
2668
2214
  }
2669
2215
  });
@@ -2672,13 +2218,13 @@ var audit11 = {
2672
2218
  };
2673
2219
 
2674
2220
  // src/audits/images-inefficient-format.ts
2675
- import { __ as __36 } from "@wordpress/i18n";
2221
+ import { __ as __29 } from "@wordpress/i18n";
2676
2222
  var LEGACY_RASTER_MIME_TYPES = /* @__PURE__ */ new Set(["image/jpeg", "image/png", "image/gif", "image/bmp", "image/tiff"]);
2677
2223
  var audit12 = {
2678
2224
  id: "audits/images-inefficient-format",
2679
- title: __36("Inefficient image format", "elementor"),
2680
- description: __36("Image isn't served in a modern, efficient format like WebP or AVIF.", "elementor"),
2681
- fixHint: __36("Convert the image to a modern format like WebP or AVIF, or enable image optimization.", "elementor"),
2225
+ title: __29("Inefficient image format", "elementor"),
2226
+ description: __29("Image isn't served in a modern, efficient format like WebP or AVIF.", "elementor"),
2227
+ fixHint: __29("Convert the image to a modern format like WebP or AVIF, or enable image optimization.", "elementor"),
2682
2228
  categories: ["performance"],
2683
2229
  severity: "info",
2684
2230
  weight: 1,
@@ -2706,29 +2252,29 @@ var audit12 = {
2706
2252
  walkAtomicImageSources(ctx.elements.tree, ({ node, media }) => evaluateSource(node, media));
2707
2253
  walkAtomicBackgroundImageSources(ctx.elements.tree, ({ node, media }) => evaluateSource(node, media));
2708
2254
  if (!hasAnyImage) {
2709
- return { status: "skipped", reason: __36("No images", "elementor") };
2255
+ return { status: "skipped", reason: __29("No images", "elementor") };
2710
2256
  }
2711
2257
  const violations = Array.from(offendingElementIds).map((elementId) => ({
2712
2258
  auditId: audit12.id,
2713
2259
  elementId,
2714
2260
  targetHint: "element-settings",
2715
- label: __36("Image isn't served in a modern format like WebP or AVIF.", "elementor"),
2261
+ label: __29("Image isn't served in a modern format like WebP or AVIF.", "elementor"),
2716
2262
  externalUrl: ctx.pageContext.image_optimization_plugin_url,
2717
- ctaLabel: __36("Optimize all", "elementor")
2263
+ ctaLabel: __29("Optimize all", "elementor")
2718
2264
  }));
2719
2265
  return violations.length === 0 ? { status: "pass" } : { status: "fail", violations, metadata: { inefficientImageFormatCount } };
2720
2266
  }
2721
2267
  };
2722
2268
 
2723
2269
  // src/audits/images-too-large.ts
2724
- import { __ as __37, sprintf as sprintf4 } from "@wordpress/i18n";
2270
+ import { __ as __30, sprintf as sprintf3 } from "@wordpress/i18n";
2725
2271
  var SIZE_THRESHOLD_BYTES = 500 * 1024;
2726
2272
  var BYTES_PER_KB = 1024;
2727
2273
  var audit13 = {
2728
2274
  id: "audits/images-too-large",
2729
- title: __37("Oversized images", "elementor"),
2730
- description: __37("Large image files slow down the page.", "elementor"),
2731
- fixHint: __37("Replace the image with a smaller version or enable image optimization.", "elementor"),
2275
+ title: __30("Oversized images", "elementor"),
2276
+ description: __30("Large image files slow down the page.", "elementor"),
2277
+ fixHint: __30("Replace the image with a smaller version or enable image optimization.", "elementor"),
2732
2278
  categories: ["performance"],
2733
2279
  severity: "warning",
2734
2280
  weight: 7,
@@ -2758,40 +2304,40 @@ var audit13 = {
2758
2304
  walkAtomicImageSources(ctx.elements.tree, ({ node, media }) => evaluateSource(node, media));
2759
2305
  walkAtomicBackgroundImageSources(ctx.elements.tree, ({ node, media }) => evaluateSource(node, media));
2760
2306
  if (!hasAnyImage) {
2761
- return { status: "skipped", reason: __37("No images", "elementor") };
2307
+ return { status: "skipped", reason: __30("No images", "elementor") };
2762
2308
  }
2763
2309
  const violations = Array.from(widgetMaxKb.entries()).map(([elementId, kb]) => ({
2764
2310
  auditId: audit13.id,
2765
2311
  elementId,
2766
2312
  targetHint: "element-settings",
2767
- label: sprintf4(
2313
+ label: sprintf3(
2768
2314
  /* translators: %d is the image file size in kilobytes. */
2769
- __37("Image is %d KB (over 500 KB).", "elementor"),
2315
+ __30("Image is %d KB (over 500 KB).", "elementor"),
2770
2316
  kb
2771
2317
  ),
2772
2318
  externalUrl: ctx.pageContext.image_optimization_plugin_url,
2773
- ctaLabel: __37("Optimize all", "elementor")
2319
+ ctaLabel: __30("Optimize all", "elementor")
2774
2320
  }));
2775
2321
  return violations.length === 0 ? { status: "pass" } : { status: "fail", violations, metadata: { oversizedImageCount } };
2776
2322
  }
2777
2323
  };
2778
2324
 
2779
2325
  // src/audits/nested-boxed-containers.ts
2780
- import { __ as __38 } from "@wordpress/i18n";
2326
+ import { __ as __31 } from "@wordpress/i18n";
2781
2327
  function isBoxed(settings) {
2782
2328
  return settings.content_width === "boxed";
2783
2329
  }
2784
2330
  var audit14 = {
2785
2331
  id: "audits/nested-boxed-containers",
2786
- title: __38("Boxed container nested inside a boxed parent", "elementor"),
2787
- description: __38("An inner container does not need to be boxed when its parent already is.", "elementor"),
2788
- fixHint: __38("Change the inner container's content width to Full Width.", "elementor"),
2332
+ title: __31("Boxed container nested inside a boxed parent", "elementor"),
2333
+ description: __31("An inner container does not need to be boxed when its parent already is.", "elementor"),
2334
+ fixHint: __31("Change the inner container's content width to Full Width.", "elementor"),
2789
2335
  categories: ["best-practices", "performance"],
2790
2336
  severity: "info",
2791
2337
  weight: 5,
2792
2338
  evaluate: (ctx) => {
2793
2339
  if (ctx.elements.tree.length === 0) {
2794
- return { status: "skipped", reason: __38("No elements", "elementor") };
2340
+ return { status: "skipped", reason: __31("No elements", "elementor") };
2795
2341
  }
2796
2342
  const violations = [];
2797
2343
  walkElements(ctx.elements.tree, (node, parents) => {
@@ -2804,7 +2350,7 @@ var audit14 = {
2804
2350
  auditId: audit14.id,
2805
2351
  elementId: node.id,
2806
2352
  targetHint: "element-settings",
2807
- label: __38("Nested boxed container.", "elementor")
2353
+ label: __31("Nested boxed container.", "elementor")
2808
2354
  });
2809
2355
  }
2810
2356
  });
@@ -2813,12 +2359,12 @@ var audit14 = {
2813
2359
  };
2814
2360
 
2815
2361
  // src/audits/page-excerpt.ts
2816
- import { __ as __39 } from "@wordpress/i18n";
2362
+ import { __ as __32 } from "@wordpress/i18n";
2817
2363
  var audit15 = {
2818
2364
  id: "audits/page-excerpt",
2819
- title: __39("Page excerpt", "elementor"),
2820
- description: __39("A descriptive excerpt helps search engines and previews summarize the page.", "elementor"),
2821
- fixHint: __39("Open Page Settings and write a short excerpt.", "elementor"),
2365
+ title: __32("Page excerpt", "elementor"),
2366
+ description: __32("A descriptive excerpt helps search engines and previews summarize the page.", "elementor"),
2367
+ fixHint: __32("Open Page Settings and write a short excerpt.", "elementor"),
2822
2368
  categories: ["seo"],
2823
2369
  severity: "warning",
2824
2370
  weight: 5,
@@ -2831,7 +2377,7 @@ var audit15 = {
2831
2377
  violations: [
2832
2378
  {
2833
2379
  auditId: audit15.id,
2834
- label: __39("Page has no excerpt.", "elementor"),
2380
+ label: __32("Page has no excerpt.", "elementor"),
2835
2381
  targetHint: "page-settings",
2836
2382
  angieFix: true
2837
2383
  }
@@ -2841,12 +2387,12 @@ var audit15 = {
2841
2387
  };
2842
2388
 
2843
2389
  // src/audits/page-featured-image.ts
2844
- import { __ as __40 } from "@wordpress/i18n";
2390
+ import { __ as __33 } from "@wordpress/i18n";
2845
2391
  var audit16 = {
2846
2392
  id: "audits/page-featured-image",
2847
- title: __40("Page featured image", "elementor"),
2848
- description: __40("Featured images are used by social shares and many themes for hero visuals.", "elementor"),
2849
- fixHint: __40("Open Page Settings and set a featured image.", "elementor"),
2393
+ title: __33("Page featured image", "elementor"),
2394
+ description: __33("Featured images are used by social shares and many themes for hero visuals.", "elementor"),
2395
+ fixHint: __33("Open Page Settings and set a featured image.", "elementor"),
2850
2396
  categories: ["seo"],
2851
2397
  severity: "info",
2852
2398
  weight: 5,
@@ -2859,7 +2405,7 @@ var audit16 = {
2859
2405
  violations: [
2860
2406
  {
2861
2407
  auditId: audit16.id,
2862
- label: __40("No featured image set.", "elementor"),
2408
+ label: __33("No featured image set.", "elementor"),
2863
2409
  targetHint: "page-settings"
2864
2410
  }
2865
2411
  ]
@@ -2868,13 +2414,13 @@ var audit16 = {
2868
2414
  };
2869
2415
 
2870
2416
  // src/audits/page-title.ts
2871
- import { __ as __41 } from "@wordpress/i18n";
2417
+ import { __ as __34 } from "@wordpress/i18n";
2872
2418
  var MAX_TITLE_LENGTH = 60;
2873
2419
  var audit17 = {
2874
2420
  id: "audits/page-title",
2875
- title: __41("Page title", "elementor"),
2876
- description: __41("Pages need a clear title for SEO and screen-reader navigation.", "elementor"),
2877
- fixHint: __41("Open Page Settings and add a title.", "elementor"),
2421
+ title: __34("Page title", "elementor"),
2422
+ description: __34("Pages need a clear title for SEO and screen-reader navigation.", "elementor"),
2423
+ fixHint: __34("Open Page Settings and add a title.", "elementor"),
2878
2424
  categories: ["seo"],
2879
2425
  severity: "error",
2880
2426
  weight: 10,
@@ -2886,10 +2432,10 @@ var audit17 = {
2886
2432
  violations: [
2887
2433
  {
2888
2434
  auditId: audit17.id,
2889
- label: __41("Page has no title.", "elementor"),
2435
+ label: __34("Page has no title.", "elementor"),
2890
2436
  targetHint: "page-settings",
2891
2437
  angieFix: true,
2892
- angiePrompt: __41(
2438
+ angiePrompt: __34(
2893
2439
  "Based on this page's contents, generate a title for this page.",
2894
2440
  "elementor"
2895
2441
  )
@@ -2903,7 +2449,7 @@ var audit17 = {
2903
2449
  violations: [
2904
2450
  {
2905
2451
  auditId: audit17.id,
2906
- label: __41("Page title is too long.", "elementor"),
2452
+ label: __34("Page title is too long.", "elementor"),
2907
2453
  targetHint: "page-settings",
2908
2454
  angieFix: true
2909
2455
  }
@@ -2915,7 +2461,7 @@ var audit17 = {
2915
2461
  };
2916
2462
 
2917
2463
  // src/audits/prefer-global-colors.ts
2918
- import { __ as __42, sprintf as sprintf5 } from "@wordpress/i18n";
2464
+ import { __ as __35, sprintf as sprintf4 } from "@wordpress/i18n";
2919
2465
 
2920
2466
  // src/utils/collect-hardcoded-colors.ts
2921
2467
  var RESERVED_SETTING_KEYS = /* @__PURE__ */ new Set(["__globals__", "__dynamic__"]);
@@ -2983,18 +2529,18 @@ function findMatchingGlobalByValue(value, globals) {
2983
2529
  // src/audits/prefer-global-colors.ts
2984
2530
  var audit18 = {
2985
2531
  id: "audits/prefer-global-colors",
2986
- title: __42("Prefer global colors", "elementor"),
2987
- description: __42("Global colors make the design consistent and easy to update site-wide.", "elementor"),
2988
- fixHint: __42("Replace the hard-coded value with the matching global color.", "elementor"),
2532
+ title: __35("Prefer global colors", "elementor"),
2533
+ description: __35("Global colors make the design consistent and easy to update site-wide.", "elementor"),
2534
+ fixHint: __35("Replace the hard-coded value with the matching global color.", "elementor"),
2989
2535
  categories: ["best-practices"],
2990
2536
  severity: "info",
2991
2537
  weight: 3,
2992
2538
  evaluate: (ctx) => {
2993
2539
  if (ctx.elements.tree.length === 0) {
2994
- return { status: "skipped", reason: __42("No elements", "elementor") };
2540
+ return { status: "skipped", reason: __35("No elements", "elementor") };
2995
2541
  }
2996
2542
  if (ctx.kit.globals.colors.length === 0) {
2997
- return { status: "skipped", reason: __42("No global colors", "elementor") };
2543
+ return { status: "skipped", reason: __35("No global colors", "elementor") };
2998
2544
  }
2999
2545
  const violations = [];
3000
2546
  walkElements(ctx.elements.tree, (node) => {
@@ -3008,9 +2554,9 @@ var audit18 = {
3008
2554
  elementId: node.id,
3009
2555
  targetHint: "element-settings",
3010
2556
  angieFix: true,
3011
- label: sprintf5(
2557
+ label: sprintf4(
3012
2558
  /* translators: 1: hard-coded color value, 2: global color title. */
3013
- __42('replace "%1$s" with "%2$s" global color', "elementor"),
2559
+ __35('replace "%1$s" with "%2$s" global color', "elementor"),
3014
2560
  value,
3015
2561
  global.title
3016
2562
  )
@@ -3022,7 +2568,7 @@ var audit18 = {
3022
2568
  };
3023
2569
 
3024
2570
  // src/audits/prefer-global-fonts.ts
3025
- import { __ as __43, sprintf as sprintf6 } from "@wordpress/i18n";
2571
+ import { __ as __36, sprintf as sprintf5 } from "@wordpress/i18n";
3026
2572
 
3027
2573
  // src/utils/collect-hardcoded-fonts.ts
3028
2574
  var RESERVED_SETTING_KEYS2 = /* @__PURE__ */ new Set(["__globals__", "__dynamic__"]);
@@ -3082,18 +2628,18 @@ function collectHardcodedFonts(settings, pathPrefix = "") {
3082
2628
  // src/audits/prefer-global-fonts.ts
3083
2629
  var audit19 = {
3084
2630
  id: "audits/prefer-global-fonts",
3085
- title: __43("Prefer global fonts", "elementor"),
3086
- description: __43("Global fonts make the design consistent and easy to update site-wide.", "elementor"),
3087
- fixHint: __43("Replace the hard-coded value with the matching global font.", "elementor"),
2631
+ title: __36("Prefer global fonts", "elementor"),
2632
+ description: __36("Global fonts make the design consistent and easy to update site-wide.", "elementor"),
2633
+ fixHint: __36("Replace the hard-coded value with the matching global font.", "elementor"),
3088
2634
  categories: ["best-practices", "performance"],
3089
2635
  severity: "info",
3090
2636
  weight: 3,
3091
2637
  evaluate: (ctx) => {
3092
2638
  if (ctx.elements.tree.length === 0) {
3093
- return { status: "skipped", reason: __43("No elements", "elementor") };
2639
+ return { status: "skipped", reason: __36("No elements", "elementor") };
3094
2640
  }
3095
2641
  if (ctx.kit.globals.fonts.length === 0) {
3096
- return { status: "skipped", reason: __43("No global fonts", "elementor") };
2642
+ return { status: "skipped", reason: __36("No global fonts", "elementor") };
3097
2643
  }
3098
2644
  const violations = [];
3099
2645
  walkElements(ctx.elements.tree, (node) => {
@@ -3106,9 +2652,9 @@ var audit19 = {
3106
2652
  auditId: audit19.id,
3107
2653
  elementId: node.id,
3108
2654
  targetHint: "element-settings",
3109
- label: sprintf6(
2655
+ label: sprintf5(
3110
2656
  /* translators: %s: global font title. */
3111
- __43('replace hardcoded typography with "%s" global font', "elementor"),
2657
+ __36('replace hardcoded typography with "%s" global font', "elementor"),
3112
2658
  global.title
3113
2659
  )
3114
2660
  });
@@ -3119,15 +2665,15 @@ var audit19 = {
3119
2665
  };
3120
2666
 
3121
2667
  // src/audits/privacy-policy.ts
3122
- import { __ as __44 } from "@wordpress/i18n";
2668
+ import { __ as __37 } from "@wordpress/i18n";
3123
2669
  var audit20 = {
3124
2670
  id: "audits/privacy-policy",
3125
- title: __44("Privacy policy", "elementor"),
3126
- description: __44(
2671
+ title: __37("Privacy policy", "elementor"),
2672
+ description: __37(
3127
2673
  "A privacy policy page is required by privacy regulations such as GDPR (EU) and CCPA (US).",
3128
2674
  "elementor"
3129
2675
  ),
3130
- fixHint: __44(
2676
+ fixHint: __37(
3131
2677
  "Go to Settings > Privacy in the WordPress admin and assign a published privacy policy page.",
3132
2678
  "elementor"
3133
2679
  ),
@@ -3143,9 +2689,9 @@ var audit20 = {
3143
2689
  violations: [
3144
2690
  {
3145
2691
  auditId: audit20.id,
3146
- label: __44("No privacy policy page is set.", "elementor"),
2692
+ label: __37("No privacy policy page is set.", "elementor"),
3147
2693
  externalUrl: ctx.pageContext.privacy_settings_url,
3148
- ctaLabel: __44("Create", "elementor")
2694
+ ctaLabel: __37("Create", "elementor")
3149
2695
  }
3150
2696
  ]
3151
2697
  };
@@ -3153,15 +2699,15 @@ var audit20 = {
3153
2699
  };
3154
2700
 
3155
2701
  // src/audits/robots-noindex.ts
3156
- import { __ as __45 } from "@wordpress/i18n";
2702
+ import { __ as __38 } from "@wordpress/i18n";
3157
2703
  var audit21 = {
3158
2704
  id: "audits/robots-noindex",
3159
- title: __45("Search engine visibility", "elementor"),
3160
- description: __45(
2705
+ title: __38("Search engine visibility", "elementor"),
2706
+ description: __38(
3161
2707
  "When search engine visibility is checked in WordPress Settings -> Reading -> Search Engine Visibility, search engines are discouraged from indexing the website.",
3162
2708
  "elementor"
3163
2709
  ),
3164
- fixHint: __45(
2710
+ fixHint: __38(
3165
2711
  'Go to Settings \u2192 Reading in the WordPress admin and uncheck "Discourage search engines from indexing this site" when the website should be indexed.',
3166
2712
  "elementor"
3167
2713
  ),
@@ -3177,7 +2723,7 @@ var audit21 = {
3177
2723
  violations: [
3178
2724
  {
3179
2725
  auditId: audit21.id,
3180
- label: __45("Search engines are discouraged from indexing this website.", "elementor"),
2726
+ label: __38("Search engines are discouraged from indexing this website.", "elementor"),
3181
2727
  externalUrl: ctx.pageContext.reading_settings_url
3182
2728
  }
3183
2729
  ]
@@ -3186,15 +2732,15 @@ var audit21 = {
3186
2732
  };
3187
2733
 
3188
2734
  // src/audits/scan-for-cookies.ts
3189
- import { __ as __46 } from "@wordpress/i18n";
2735
+ import { __ as __39 } from "@wordpress/i18n";
3190
2736
  var audit22 = {
3191
2737
  id: "audits/scan-for-cookies",
3192
- title: __46("Scan for cookies", "elementor"),
3193
- description: __46(
2738
+ title: __39("Scan for cookies", "elementor"),
2739
+ description: __39(
3194
2740
  "Your site may be setting cookies you haven't disclosed. Some countries require a banner even without a full consent policy. Scan to see what needs disclosure.",
3195
2741
  "elementor"
3196
2742
  ),
3197
- fixHint: __46("Run a Cookiez scan on this page to see which cookies need disclosure.", "elementor"),
2743
+ fixHint: __39("Run a Cookiez scan on this page to see which cookies need disclosure.", "elementor"),
3198
2744
  categories: ["compliance"],
3199
2745
  severity: "info",
3200
2746
  weight: 0,
@@ -3205,7 +2751,7 @@ var audit22 = {
3205
2751
  violations: [
3206
2752
  {
3207
2753
  auditId: audit22.id,
3208
- label: __46("This page has not been scanned for cookies yet.", "elementor"),
2754
+ label: __39("This page has not been scanned for cookies yet.", "elementor"),
3209
2755
  externalUrl: isReady ? ctx.pageContext.cookiez_scan_url : ctx.pageContext.cookiez_plugin_action_url
3210
2756
  }
3211
2757
  ]
@@ -3214,21 +2760,21 @@ var audit22 = {
3214
2760
  };
3215
2761
 
3216
2762
  // src/audits/sections-and-columns.ts
3217
- import { __ as __47 } from "@wordpress/i18n";
2763
+ import { __ as __40 } from "@wordpress/i18n";
3218
2764
  var audit23 = {
3219
2765
  id: "audits/sections-and-columns",
3220
- title: __47("Sections and columns", "elementor"),
3221
- description: __47(
2766
+ title: __40("Sections and columns", "elementor"),
2767
+ description: __40(
3222
2768
  "Sections and columns are legacy elements. Containers render fewer DOM nodes and are more flexible.",
3223
2769
  "elementor"
3224
2770
  ),
3225
- fixHint: __47("Use the Container Converter to replace each section/column with a container.", "elementor"),
2771
+ fixHint: __40("Use the Container Converter to replace each section/column with a container.", "elementor"),
3226
2772
  categories: ["best-practices", "performance"],
3227
2773
  severity: "warning",
3228
2774
  weight: 7,
3229
2775
  evaluate: (ctx) => {
3230
2776
  if (ctx.elements.tree.length === 0) {
3231
- return { status: "skipped", reason: __47("No elements", "elementor") };
2777
+ return { status: "skipped", reason: __40("No elements", "elementor") };
3232
2778
  }
3233
2779
  const violations = [];
3234
2780
  walkElements(ctx.elements.tree, (node) => {
@@ -3236,7 +2782,7 @@ var audit23 = {
3236
2782
  violations.push({
3237
2783
  auditId: audit23.id,
3238
2784
  elementId: node.id,
3239
- label: node.elType === "section" ? __47("Section element", "elementor") : __47("Column element", "elementor")
2785
+ label: node.elType === "section" ? __40("Section element", "elementor") : __40("Column element", "elementor")
3240
2786
  });
3241
2787
  }
3242
2788
  });
@@ -3245,15 +2791,15 @@ var audit23 = {
3245
2791
  };
3246
2792
 
3247
2793
  // src/audits/site-identity.ts
3248
- import { __ as __48 } from "@wordpress/i18n";
2794
+ import { __ as __41 } from "@wordpress/i18n";
3249
2795
  var audit24 = {
3250
2796
  id: "audits/site-identity",
3251
- title: __48("Site identity", "elementor"),
3252
- description: __48(
2797
+ title: __41("Site identity", "elementor"),
2798
+ description: __41(
3253
2799
  "Site name, description, logo, and favicon establish your brand and appear in search results and browser tabs.",
3254
2800
  "elementor"
3255
2801
  ),
3256
- fixHint: __48("Open Site Settings \u2192 Site Identity and complete all the missing fields.", "elementor"),
2802
+ fixHint: __41("Open Site Settings \u2192 Site Identity and complete all the missing fields.", "elementor"),
3257
2803
  categories: ["best-practices", "seo"],
3258
2804
  severity: "info",
3259
2805
  weight: 7,
@@ -3263,14 +2809,14 @@ var audit24 = {
3263
2809
  if (!identity.site_name_set) {
3264
2810
  violations.push({
3265
2811
  auditId: audit24.id,
3266
- label: __48("Site name is missing or still uses the default.", "elementor"),
2812
+ label: __41("Site name is missing or still uses the default.", "elementor"),
3267
2813
  targetHint: "site-identity-settings"
3268
2814
  });
3269
2815
  }
3270
2816
  if (!identity.site_description_set) {
3271
2817
  violations.push({
3272
2818
  auditId: audit24.id,
3273
- label: __48("Site description is missing or still uses the default.", "elementor"),
2819
+ label: __41("Site description is missing or still uses the default.", "elementor"),
3274
2820
  targetHint: "site-identity-settings",
3275
2821
  angieFix: true
3276
2822
  });
@@ -3278,14 +2824,14 @@ var audit24 = {
3278
2824
  if (!identity.site_logo_set) {
3279
2825
  violations.push({
3280
2826
  auditId: audit24.id,
3281
- label: __48("Site logo is not set.", "elementor"),
2827
+ label: __41("Site logo is not set.", "elementor"),
3282
2828
  targetHint: "site-identity-settings"
3283
2829
  });
3284
2830
  }
3285
2831
  if (!identity.site_favicon_set) {
3286
2832
  violations.push({
3287
2833
  auditId: audit24.id,
3288
- label: __48("Site favicon is not set.", "elementor"),
2834
+ label: __41("Site favicon is not set.", "elementor"),
3289
2835
  targetHint: "site-identity-settings"
3290
2836
  });
3291
2837
  }
@@ -3301,7 +2847,7 @@ var audit24 = {
3301
2847
 
3302
2848
  // src/audits/too-many-widgets.ts
3303
2849
  import { getWidgetsCache as getWidgetsCache3 } from "@elementor/editor-elements";
3304
- import { __ as __49 } from "@wordpress/i18n";
2850
+ import { __ as __42 } from "@wordpress/i18n";
3305
2851
  var WIDGET_COUNT_THRESHOLD = 100;
3306
2852
  function isCountableWidget(node, widgetsCache) {
3307
2853
  if (node.elType === "widget") {
@@ -3311,15 +2857,15 @@ function isCountableWidget(node, widgetsCache) {
3311
2857
  }
3312
2858
  var audit25 = {
3313
2859
  id: "audits/too-many-widgets",
3314
- title: __49("Too many widgets", "elementor"),
3315
- description: __49("Excessive DOM size caused by too many widgets degrades rendering performance.", "elementor"),
3316
- fixHint: __49("Reduce the number of widgets on the page by removing or combining elements.", "elementor"),
2860
+ title: __42("Too many widgets", "elementor"),
2861
+ description: __42("Excessive DOM size caused by too many widgets degrades rendering performance.", "elementor"),
2862
+ fixHint: __42("Reduce the number of widgets on the page by removing or combining elements.", "elementor"),
3317
2863
  categories: ["best-practices", "performance"],
3318
2864
  severity: "warning",
3319
2865
  weight: 5,
3320
2866
  evaluate: (ctx) => {
3321
2867
  if (ctx.elements.tree.length === 0) {
3322
- return { status: "skipped", reason: __49("No elements", "elementor") };
2868
+ return { status: "skipped", reason: __42("No elements", "elementor") };
3323
2869
  }
3324
2870
  const widgetsCache = getWidgetsCache3();
3325
2871
  let widgetCount = 0;
@@ -3336,7 +2882,7 @@ var audit25 = {
3336
2882
  violations: [
3337
2883
  {
3338
2884
  auditId: audit25.id,
3339
- label: __49("Page has too many widgets.", "elementor")
2885
+ label: __42("Page has too many widgets.", "elementor")
3340
2886
  }
3341
2887
  ]
3342
2888
  };