@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.js CHANGED
@@ -45,17 +45,18 @@ var import_editor_app_bar = require("@elementor/editor-app-bar");
45
45
 
46
46
  // src/hooks/use-audit-toggle-props.ts
47
47
  var import_icons13 = require("@elementor/icons");
48
- var import_i18n24 = require("@wordpress/i18n");
48
+ var import_i18n17 = require("@wordpress/i18n");
49
49
 
50
50
  // src/editor-panel.tsx
51
51
  var import_editor_floating_panels4 = require("@elementor/editor-floating-panels");
52
52
 
53
53
  // src/components/audit-panel.tsx
54
- var React25 = __toESM(require("react"));
54
+ var React19 = __toESM(require("react"));
55
55
  var import_editor_elements6 = require("@elementor/editor-elements");
56
56
  var import_editor_floating_panels3 = require("@elementor/editor-floating-panels");
57
- var import_ui24 = require("@elementor/ui");
58
- var import_i18n23 = require("@wordpress/i18n");
57
+ var import_icons12 = require("@elementor/icons");
58
+ var import_ui18 = require("@elementor/ui");
59
+ var import_i18n16 = require("@wordpress/i18n");
59
60
 
60
61
  // src/constants.ts
61
62
  var import_i18n = require("@wordpress/i18n");
@@ -175,9 +176,6 @@ function getRegisteredAudits() {
175
176
  return Array.from(registry.values());
176
177
  }
177
178
 
178
- // src/utils/audit-status-summary.ts
179
- var import_i18n2 = require("@wordpress/i18n");
180
-
181
179
  // src/utils/is-scored-audit.ts
182
180
  function isScoredAudit(audit26) {
183
181
  return audit26.weight > 0;
@@ -232,52 +230,6 @@ function partitionAuditResults(report, options = {}) {
232
230
  totalViolations
233
231
  };
234
232
  }
235
- function auditStatusDisplayCounts(report) {
236
- let pass = 0;
237
- let skipped = 0;
238
- let totalViolations = 0;
239
- for (const { audit: audit26, result } of report.auditResults) {
240
- if (!isScoredAudit(audit26)) {
241
- continue;
242
- }
243
- switch (result.status) {
244
- case "fail":
245
- totalViolations += result.violations.length;
246
- break;
247
- case "pass":
248
- pass++;
249
- break;
250
- case "skipped":
251
- skipped++;
252
- break;
253
- }
254
- }
255
- return {
256
- fail: totalViolations,
257
- pass,
258
- skipped
259
- };
260
- }
261
- function auditStatusColor(status) {
262
- switch (status) {
263
- case "fail":
264
- return "error";
265
- case "pass":
266
- return "success";
267
- case "skipped":
268
- return "default";
269
- }
270
- }
271
- function auditStatusLabel(status) {
272
- switch (status) {
273
- case "fail":
274
- return (0, import_i18n2.__)("Failed audits", "elementor");
275
- case "pass":
276
- return (0, import_i18n2.__)("Passed audits", "elementor");
277
- case "skipped":
278
- return (0, import_i18n2.__)("Skipped audits", "elementor");
279
- }
280
- }
281
233
  function getPopulatedCategories(categoryTotals, categories) {
282
234
  return categories.filter((category) => categoryTotals[category].total > 0);
283
235
  }
@@ -729,9 +681,9 @@ var import_events = require("@elementor/events");
729
681
  var import_http_client2 = require("@elementor/http-client");
730
682
  var import_icons = require("@elementor/icons");
731
683
  var import_ui = require("@elementor/ui");
732
- var import_i18n3 = require("@wordpress/i18n");
684
+ var import_i18n2 = require("@wordpress/i18n");
733
685
  var FEEDBACK_SUBJECT = "Page Audit Tool";
734
- var FEEDBACK_SUBJECT_LABEL = (0, import_i18n3.__)("Page Audit Tool", "elementor");
686
+ var FEEDBACK_SUBJECT_LABEL = (0, import_i18n2.__)("Page Audit Tool", "elementor");
735
687
  var SUCCESS_NOTIFICATION_ID = "audit-feedback-success";
736
688
  var ERROR_NOTIFICATION_ID = "audit-feedback-error";
737
689
  var DIALOG_TITLE_ID = "audit-feedback-dialog-title";
@@ -740,12 +692,12 @@ var isUserConnected = () => Boolean(window.elementorCommon?.config?.library_conn
740
692
  var notifySuccess = () => (0, import_editor_notifications.notify)({
741
693
  id: SUCCESS_NOTIFICATION_ID,
742
694
  type: "success",
743
- message: (0, import_i18n3.__)("Feedback sent. Thanks for helping us out.", "elementor")
695
+ message: (0, import_i18n2.__)("Feedback sent. Thanks for helping us out.", "elementor")
744
696
  });
745
697
  var notifyError = () => (0, import_editor_notifications.notify)({
746
698
  id: ERROR_NOTIFICATION_ID,
747
699
  type: "error",
748
- message: (0, import_i18n3.__)("Something went wrong. Please try sending your feedback again.", "elementor")
700
+ message: (0, import_i18n2.__)("Something went wrong. Please try sending your feedback again.", "elementor")
749
701
  });
750
702
  function AuditFeedback() {
751
703
  const [isOpen, setIsOpen] = (0, import_react2.useState)(false);
@@ -761,7 +713,7 @@ function AuditFeedback() {
761
713
  if (!connected && !connectUrl) {
762
714
  return null;
763
715
  }
764
- const triggerLabel = (0, import_i18n3.__)("Give feedback", "elementor");
716
+ const triggerLabel = (0, import_i18n2.__)("Give feedback", "elementor");
765
717
  const handleOpen = () => {
766
718
  if (!connected) {
767
719
  window.open(connectUrl, "_blank", "noopener");
@@ -803,11 +755,11 @@ function AuditFeedback() {
803
755
  "aria-describedby": DIALOG_DESCRIPTION_ID,
804
756
  PaperProps: { sx: { borderRadius: 1 } }
805
757
  },
806
- /* @__PURE__ */ React.createElement(import_ui.DialogHeader, { logo: false, onClose: handleClose }, /* @__PURE__ */ React.createElement(import_ui.DialogTitle, { id: DIALOG_TITLE_ID }, (0, import_i18n3.__)("Let us know what you think", "elementor"))),
758
+ /* @__PURE__ */ React.createElement(import_ui.DialogHeader, { logo: false, onClose: handleClose }, /* @__PURE__ */ React.createElement(import_ui.DialogTitle, { id: DIALOG_TITLE_ID }, (0, import_i18n2.__)("Let us know what you think", "elementor"))),
807
759
  /* @__PURE__ */ React.createElement(import_ui.DialogContent, { dividers: true }, /* @__PURE__ */ React.createElement(import_ui.Stack, { direction: "column", gap: 2 }, /* @__PURE__ */ React.createElement(import_ui.TextField, { value: FEEDBACK_SUBJECT_LABEL, disabled: true, fullWidth: true, size: "small" }), /* @__PURE__ */ React.createElement(
808
760
  import_ui.TextField,
809
761
  {
810
- placeholder: (0, import_i18n3.__)(
762
+ placeholder: (0, import_i18n2.__)(
811
763
  "Tell us what you had in mind, what we can improve or fix to make this feature better.",
812
764
  "elementor"
813
765
  ),
@@ -818,11 +770,11 @@ function AuditFeedback() {
818
770
  onChange: (event) => setFeedbackText(event.target.value),
819
771
  value: feedbackText
820
772
  }
821
- ), /* @__PURE__ */ React.createElement(import_ui.Typography, { id: DIALOG_DESCRIPTION_ID, variant: "caption", color: "text.secondary" }, (0, import_i18n3.__)(
773
+ ), /* @__PURE__ */ React.createElement(import_ui.Typography, { id: DIALOG_DESCRIPTION_ID, variant: "caption", color: "text.secondary" }, (0, import_i18n2.__)(
822
774
  "We appreciate your feedback! While we review all submissions, we can't guarantee that every suggestion will result in a change or update.",
823
775
  "elementor"
824
776
  )))),
825
- /* @__PURE__ */ React.createElement(import_ui.DialogActions, null, /* @__PURE__ */ React.createElement(import_ui.Button, { variant: "text", color: "secondary", onClick: handleCancel }, (0, import_i18n3.__)("Cancel", "elementor")), /* @__PURE__ */ React.createElement(
777
+ /* @__PURE__ */ React.createElement(import_ui.DialogActions, null, /* @__PURE__ */ React.createElement(import_ui.Button, { variant: "text", color: "secondary", onClick: handleCancel }, (0, import_i18n2.__)("Cancel", "elementor")), /* @__PURE__ */ React.createElement(
826
778
  import_ui.Button,
827
779
  {
828
780
  variant: "contained",
@@ -830,7 +782,7 @@ function AuditFeedback() {
830
782
  disabled: isSubmitting || feedbackText.trim().length === 0,
831
783
  onClick: handleSubmit
832
784
  },
833
- (0, import_i18n3.__)("Send", "elementor")
785
+ (0, import_i18n2.__)("Send", "elementor")
834
786
  ))
835
787
  ));
836
788
  }
@@ -838,23 +790,23 @@ function AuditFeedback() {
838
790
  // src/components/pages/error-page.tsx
839
791
  var React2 = __toESM(require("react"));
840
792
  var import_ui2 = require("@elementor/ui");
841
- var import_i18n4 = require("@wordpress/i18n");
793
+ var import_i18n3 = require("@wordpress/i18n");
842
794
  function ErrorPage({ message, onRetry }) {
843
- return /* @__PURE__ */ React2.createElement(import_ui2.Box, { sx: { display: "flex", flexDirection: "column", alignItems: "center", gap: 1.5, p: 4 } }, /* @__PURE__ */ React2.createElement(import_ui2.Typography, { variant: "body2", color: "error", textAlign: "center" }, message), /* @__PURE__ */ React2.createElement(import_ui2.Button, { variant: "contained", size: "small", onClick: onRetry }, (0, import_i18n4.__)("Try again", "elementor")));
795
+ return /* @__PURE__ */ React2.createElement(import_ui2.Box, { sx: { display: "flex", flexDirection: "column", alignItems: "center", gap: 1.5, p: 4 } }, /* @__PURE__ */ React2.createElement(import_ui2.Typography, { variant: "body2", color: "error", textAlign: "center" }, message), /* @__PURE__ */ React2.createElement(import_ui2.Button, { variant: "contained", size: "small", onClick: onRetry }, (0, import_i18n3.__)("Try again", "elementor")));
844
796
  }
845
797
 
846
798
  // src/components/pages/loading-page.tsx
847
799
  var React3 = __toESM(require("react"));
848
800
  var import_ui3 = require("@elementor/ui");
849
- var import_i18n5 = require("@wordpress/i18n");
801
+ var import_i18n4 = require("@wordpress/i18n");
850
802
  function LoadingPage() {
851
- return /* @__PURE__ */ React3.createElement(import_ui3.Box, { sx: { display: "flex", flexDirection: "column", alignItems: "center", gap: 1.5, p: 4 } }, /* @__PURE__ */ React3.createElement(import_ui3.CircularProgress, { size: 32 }), /* @__PURE__ */ React3.createElement(import_ui3.Typography, { variant: "body2" }, (0, import_i18n5.__)("Audit in progress.", "elementor")));
803
+ return /* @__PURE__ */ React3.createElement(import_ui3.Box, { sx: { display: "flex", flexDirection: "column", alignItems: "center", gap: 1.5, p: 4 } }, /* @__PURE__ */ React3.createElement(import_ui3.CircularProgress, { size: 32 }), /* @__PURE__ */ React3.createElement(import_ui3.Typography, { variant: "body2" }, (0, import_i18n4.__)("Audit in progress.", "elementor")));
852
804
  }
853
805
 
854
806
  // src/components/pages/welcome-page.tsx
855
807
  var React4 = __toESM(require("react"));
856
808
  var import_ui4 = require("@elementor/ui");
857
- var import_i18n6 = require("@wordpress/i18n");
809
+ var import_i18n5 = require("@wordpress/i18n");
858
810
  var INFORMATION_IMAGE_PATH = "images/information.svg";
859
811
  function WelcomePage() {
860
812
  const assetsUrl = window.elementorCommon?.config?.urls?.assets ?? "";
@@ -876,11 +828,11 @@ function WelcomePage() {
876
828
  className: "elementor-nerd-box-icon",
877
829
  src: `${assetsUrl}${INFORMATION_IMAGE_PATH}`,
878
830
  loading: "lazy",
879
- alt: (0, import_i18n6.__)("Elementor", "elementor")
831
+ alt: (0, import_i18n5.__)("Elementor", "elementor")
880
832
  }
881
833
  ),
882
- /* @__PURE__ */ React4.createElement(import_ui4.Typography, { variant: "subtitle1", component: "h3", sx: { marginBlockStart: 2 } }, (0, import_i18n6.__)("Audit your page!", "elementor")),
883
- /* @__PURE__ */ React4.createElement(import_ui4.Typography, { variant: "caption", textAlign: "center" }, (0, import_i18n6.__)(
834
+ /* @__PURE__ */ React4.createElement(import_ui4.Typography, { variant: "subtitle1", component: "h3", sx: { marginBlockStart: 2 } }, (0, import_i18n5.__)("Audit your page!", "elementor")),
835
+ /* @__PURE__ */ React4.createElement(import_ui4.Typography, { variant: "caption", textAlign: "center" }, (0, import_i18n5.__)(
884
836
  'Check SEO, accessibility, performance, and best practices. Click "Run page audit" to begin.',
885
837
  "elementor"
886
838
  ))
@@ -888,15 +840,14 @@ function WelcomePage() {
888
840
  }
889
841
 
890
842
  // src/components/report-shell.tsx
891
- var React24 = __toESM(require("react"));
892
- var import_react6 = require("react");
893
- var import_ui23 = require("@elementor/ui");
894
- var import_i18n22 = require("@wordpress/i18n");
843
+ var React18 = __toESM(require("react"));
844
+ var import_react5 = require("react");
845
+ var import_ui17 = require("@elementor/ui");
895
846
 
896
- // src/components/pages/all-audits-page.tsx
847
+ // src/components/pages/category-page.tsx
897
848
  var React12 = __toESM(require("react"));
898
849
  var import_ui11 = require("@elementor/ui");
899
- var import_i18n12 = require("@wordpress/i18n");
850
+ var import_i18n11 = require("@wordpress/i18n");
900
851
 
901
852
  // src/hooks/use-single-expanded-card.ts
902
853
  var import_react3 = require("react");
@@ -908,12 +859,22 @@ function useSingleExpandedCard(initialId = null) {
908
859
  return { expandedId, toggle };
909
860
  }
910
861
 
862
+ // src/components/category-icons.ts
863
+ var import_icons2 = require("@elementor/icons");
864
+ var CATEGORY_ICONS = {
865
+ "best-practices": import_icons2.Settings2Icon,
866
+ seo: import_icons2.FileSearchIcon,
867
+ accessibility: import_icons2.ElementorAccessibilityIcon,
868
+ performance: import_icons2.BoltIcon,
869
+ compliance: import_icons2.ShieldCheckIcon
870
+ };
871
+
911
872
  // src/components/status-section.tsx
912
873
  var React5 = __toESM(require("react"));
913
874
  var import_react4 = require("react");
914
- var import_icons2 = require("@elementor/icons");
875
+ var import_icons3 = require("@elementor/icons");
915
876
  var import_ui5 = require("@elementor/ui");
916
- var import_i18n7 = require("@wordpress/i18n");
877
+ var import_i18n6 = require("@wordpress/i18n");
917
878
  function StatusSection({ label, count, color = "default", defaultExpanded = false, children }) {
918
879
  const [expanded, setExpanded] = (0, import_react4.useState)(defaultExpanded);
919
880
  if (React5.Children.count(children) === 0) {
@@ -929,10 +890,10 @@ function StatusSection({ label, count, color = "default", defaultExpanded = fals
929
890
  import_ui5.IconButton,
930
891
  {
931
892
  size: "small",
932
- "aria-label": expanded ? (0, import_i18n7.__)("Collapse", "elementor") : (0, import_i18n7.__)("Expand", "elementor")
893
+ "aria-label": expanded ? (0, import_i18n6.__)("Collapse", "elementor") : (0, import_i18n6.__)("Expand", "elementor")
933
894
  },
934
895
  /* @__PURE__ */ React5.createElement(
935
- import_icons2.ChevronDownIcon,
896
+ import_icons3.ChevronDownIcon,
936
897
  {
937
898
  fontSize: "small",
938
899
  sx: {
@@ -948,21 +909,21 @@ function StatusSection({ label, count, color = "default", defaultExpanded = fals
948
909
 
949
910
  // src/components/subpage-header.tsx
950
911
  var React6 = __toESM(require("react"));
951
- var import_icons3 = require("@elementor/icons");
912
+ var import_icons4 = require("@elementor/icons");
952
913
  var import_ui6 = require("@elementor/ui");
953
- var import_i18n8 = require("@wordpress/i18n");
914
+ var import_i18n7 = require("@wordpress/i18n");
954
915
  function SubpageHeader({ title, onBack, backLabel, icon }) {
955
916
  const isRtl = "rtl" === (0, import_ui6.useTheme)().direction;
956
- return /* @__PURE__ */ React6.createElement(import_ui6.Box, { sx: { display: "flex", alignItems: "center", gap: 0.5, p: 1 } }, /* @__PURE__ */ React6.createElement(import_ui6.IconButton, { size: "small", onClick: onBack, "aria-label": backLabel ?? (0, import_i18n8.__)("Back", "elementor") }, /* @__PURE__ */ React6.createElement(import_ui6.Rotate, { in: isRtl }, /* @__PURE__ */ React6.createElement(import_icons3.ArrowLeftIcon, { fontSize: "small" }))), icon, /* @__PURE__ */ React6.createElement(import_ui6.Typography, { variant: "subtitle2", fontWeight: "bold" }, title));
917
+ return /* @__PURE__ */ React6.createElement(import_ui6.Box, { sx: { display: "flex", alignItems: "center", gap: 0.5, p: 1 } }, /* @__PURE__ */ React6.createElement(import_ui6.IconButton, { size: "small", onClick: onBack, "aria-label": backLabel ?? (0, import_i18n7.__)("Back", "elementor") }, /* @__PURE__ */ React6.createElement(import_ui6.Rotate, { in: isRtl }, /* @__PURE__ */ React6.createElement(import_icons4.ArrowLeftIcon, { fontSize: "small" }))), icon, /* @__PURE__ */ React6.createElement(import_ui6.Typography, { variant: "subtitle2", fontWeight: "bold" }, title));
957
918
  }
958
919
 
959
920
  // src/components/violation-row.tsx
960
921
  var React11 = __toESM(require("react"));
961
922
  var import_editor_elements5 = require("@elementor/editor-elements");
962
923
  var import_editor_floating_panels2 = require("@elementor/editor-floating-panels");
963
- var import_icons8 = require("@elementor/icons");
924
+ var import_icons9 = require("@elementor/icons");
964
925
  var import_ui10 = require("@elementor/ui");
965
- var import_i18n11 = require("@wordpress/i18n");
926
+ var import_i18n10 = require("@wordpress/i18n");
966
927
 
967
928
  // src/hooks/focus-violation.ts
968
929
  var import_editor_elements4 = require("@elementor/editor-elements");
@@ -1003,11 +964,11 @@ function focusViolation(violation) {
1003
964
  }
1004
965
 
1005
966
  // src/utils/build-angie-prompt.ts
1006
- var import_i18n9 = require("@wordpress/i18n");
967
+ var import_i18n8 = require("@wordpress/i18n");
1007
968
  function buildAngiePrompt(violationText) {
1008
- return (0, import_i18n9.sprintf)(
969
+ return (0, import_i18n8.sprintf)(
1009
970
  /* translators: %s: audit violation description. */
1010
- (0, import_i18n9.__)("Help me fix: %s", "elementor"),
971
+ (0, import_i18n8.__)("Help me fix: %s", "elementor"),
1011
972
  violationText
1012
973
  );
1013
974
  }
@@ -1025,11 +986,11 @@ function onKeyboardClick(callback) {
1025
986
  // src/components/fix-violation-with-angie.tsx
1026
987
  var React7 = __toESM(require("react"));
1027
988
  var import_editor_mcp = require("@elementor/editor-mcp");
1028
- var import_icons4 = require("@elementor/icons");
989
+ var import_icons5 = require("@elementor/icons");
1029
990
  var import_ui7 = require("@elementor/ui");
1030
- var import_i18n10 = require("@wordpress/i18n");
991
+ var import_i18n9 = require("@wordpress/i18n");
1031
992
  function FixViolationWithAngie({ prompt, panelZIndex }) {
1032
- const label = (0, import_i18n10.__)("Fix with Angie", "elementor");
993
+ const label = (0, import_i18n9.__)("Fix with Angie", "elementor");
1033
994
  const href = `#angie-prompt=${encodeURIComponent(prompt)}`;
1034
995
  const handleClick = (event) => {
1035
996
  event.stopPropagation();
@@ -1047,16 +1008,16 @@ function FixViolationWithAngie({ prompt, panelZIndex }) {
1047
1008
  })
1048
1009
  );
1049
1010
  };
1050
- return /* @__PURE__ */ React7.createElement(import_ui7.Tooltip, { title: label, placement: "top", PopperProps: { sx: { zIndex: panelZIndex } } }, /* @__PURE__ */ React7.createElement(import_ui7.IconButton, { component: "a", href, size: "small", "aria-label": label, onClick: handleClick }, /* @__PURE__ */ React7.createElement(import_icons4.AngieIcon, { fontSize: "tiny" })));
1011
+ return /* @__PURE__ */ React7.createElement(import_ui7.Tooltip, { title: label, placement: "top", PopperProps: { sx: { zIndex: panelZIndex } } }, /* @__PURE__ */ React7.createElement(import_ui7.IconButton, { component: "a", href, size: "small", "aria-label": label, onClick: handleClick }, /* @__PURE__ */ React7.createElement(import_icons5.AngieIcon, { fontSize: "tiny" })));
1051
1012
  }
1052
1013
 
1053
1014
  // src/components/severity-icons.tsx
1054
1015
  var React8 = __toESM(require("react"));
1055
- var import_icons5 = require("@elementor/icons");
1016
+ var import_icons6 = require("@elementor/icons");
1056
1017
  var SEVERITY_CONFIG = {
1057
- error: { Icon: import_icons5.AlertTriangleFilledIcon, color: "error" },
1058
- warning: { Icon: import_icons5.AlertCircleIcon, color: "warning" },
1059
- info: { Icon: import_icons5.BulbIcon, color: "info" }
1018
+ error: { Icon: import_icons6.AlertTriangleFilledIcon, color: "error" },
1019
+ warning: { Icon: import_icons6.AlertCircleIcon, color: "warning" },
1020
+ info: { Icon: import_icons6.BulbIcon, color: "info" }
1060
1021
  };
1061
1022
  function SeverityIcon({ severity }) {
1062
1023
  const { Icon, color } = SEVERITY_CONFIG[severity];
@@ -1065,7 +1026,7 @@ function SeverityIcon({ severity }) {
1065
1026
 
1066
1027
  // src/components/violation-cta-button.tsx
1067
1028
  var React9 = __toESM(require("react"));
1068
- var import_icons6 = require("@elementor/icons");
1029
+ var import_icons7 = require("@elementor/icons");
1069
1030
  var import_ui8 = require("@elementor/ui");
1070
1031
  function ViolationCtaButton({ ctaLabel, externalUrl, variant = "outlined", withIcon = false }) {
1071
1032
  const handleClick = (event) => {
@@ -1079,7 +1040,7 @@ function ViolationCtaButton({ ctaLabel, externalUrl, variant = "outlined", withI
1079
1040
  variant,
1080
1041
  color: "secondary",
1081
1042
  size: "small",
1082
- startIcon: withIcon ? /* @__PURE__ */ React9.createElement(import_icons6.WandIcon, { fontSize: "tiny", "aria-hidden": true }) : void 0,
1043
+ startIcon: withIcon ? /* @__PURE__ */ React9.createElement(import_icons7.WandIcon, { fontSize: "tiny", "aria-hidden": true }) : void 0,
1083
1044
  onClick: handleClick
1084
1045
  },
1085
1046
  ctaLabel
@@ -1088,7 +1049,7 @@ function ViolationCtaButton({ ctaLabel, externalUrl, variant = "outlined", withI
1088
1049
 
1089
1050
  // src/components/violation-icons.tsx
1090
1051
  var React10 = __toESM(require("react"));
1091
- var import_icons7 = require("@elementor/icons");
1052
+ var import_icons8 = require("@elementor/icons");
1092
1053
  var import_ui9 = require("@elementor/ui");
1093
1054
  function ViolationIcon({ violation, widgetIcon }) {
1094
1055
  if (widgetIcon) {
@@ -1103,30 +1064,30 @@ function ViolationIcon({ violation, widgetIcon }) {
1103
1064
  );
1104
1065
  }
1105
1066
  if (violation.targetHint === "page-settings") {
1106
- return /* @__PURE__ */ React10.createElement(import_icons7.FileSettingsIcon, { fontSize: "inherit", "aria-hidden": true });
1067
+ return /* @__PURE__ */ React10.createElement(import_icons8.FileSettingsIcon, { fontSize: "inherit", "aria-hidden": true });
1107
1068
  }
1108
1069
  if (violation.targetHint === "site-settings" || violation.targetHint === "site-identity-settings") {
1109
- return /* @__PURE__ */ React10.createElement(import_icons7.SettingsIcon, { fontSize: "inherit", "aria-hidden": true });
1070
+ return /* @__PURE__ */ React10.createElement(import_icons8.SettingsIcon, { fontSize: "inherit", "aria-hidden": true });
1110
1071
  }
1111
- return /* @__PURE__ */ React10.createElement(import_icons7.SettingsIcon, { fontSize: "inherit", "aria-hidden": true });
1072
+ return /* @__PURE__ */ React10.createElement(import_icons8.SettingsIcon, { fontSize: "inherit", "aria-hidden": true });
1112
1073
  }
1113
1074
 
1114
1075
  // src/components/violation-row.tsx
1115
1076
  function SkipReasonTooltip({ reason }) {
1116
- return /* @__PURE__ */ React11.createElement(import_ui10.Tooltip, { title: reason, placement: "top" }, /* @__PURE__ */ React11.createElement(import_ui10.Box, { "aria-label": reason, component: "span", sx: { display: "inline-flex", alignItems: "center" } }, /* @__PURE__ */ React11.createElement(import_icons8.HelpIcon, { fontSize: "small", color: "action" })));
1077
+ return /* @__PURE__ */ React11.createElement(import_ui10.Tooltip, { title: reason, placement: "top" }, /* @__PURE__ */ React11.createElement(import_ui10.Box, { "aria-label": reason, component: "span", sx: { display: "inline-flex", alignItems: "center" } }, /* @__PURE__ */ React11.createElement(import_icons9.HelpIcon, { fontSize: "small", color: "action" })));
1117
1078
  }
1118
1079
  function StatusIndicator({ audit: audit26, violations }) {
1119
1080
  if (violations) {
1120
1081
  return /* @__PURE__ */ React11.createElement(React11.Fragment, null, /* @__PURE__ */ React11.createElement(SeverityIcon, { severity: audit26.severity }), isScoredAudit(audit26) && /* @__PURE__ */ React11.createElement(import_ui10.Typography, { variant: "caption", color: "text.secondary", fontWeight: "bold" }, violations.length));
1121
1082
  }
1122
- return /* @__PURE__ */ React11.createElement(import_icons8.CheckIcon, { fontSize: "small", color: "success" });
1083
+ return /* @__PURE__ */ React11.createElement(import_icons9.CheckIcon, { fontSize: "small", color: "success" });
1123
1084
  }
1124
1085
  function GuidanceAction({ violation }) {
1125
1086
  const hasPrimaryCta = !!(violation.ctaLabel && violation.externalUrl);
1126
1087
  if (!hasPrimaryCta) {
1127
1088
  return null;
1128
1089
  }
1129
- return /* @__PURE__ */ React11.createElement(import_ui10.Box, { sx: { display: "flex", alignItems: "center", gap: 1 } }, /* @__PURE__ */ React11.createElement(
1090
+ return /* @__PURE__ */ React11.createElement(import_ui10.Box, { display: "flex", alignItems: "center", gap: 1, mt: 1 }, /* @__PURE__ */ React11.createElement(
1130
1091
  ViolationCtaButton,
1131
1092
  {
1132
1093
  ctaLabel: violation.ctaLabel,
@@ -1170,11 +1131,11 @@ function ViolationRow({ audit: audit26, expanded, onToggleExpand, skipReason, vi
1170
1131
  import_ui10.IconButton,
1171
1132
  {
1172
1133
  size: "small",
1173
- "aria-label": expanded ? (0, import_i18n11.__)("Collapse", "elementor") : (0, import_i18n11.__)("Expand", "elementor"),
1134
+ "aria-label": expanded ? (0, import_i18n10.__)("Collapse", "elementor") : (0, import_i18n10.__)("Expand", "elementor"),
1174
1135
  onClick: onToggleExpand
1175
1136
  },
1176
1137
  /* @__PURE__ */ React11.createElement(
1177
- import_icons8.ChevronDownIcon,
1138
+ import_icons9.ChevronDownIcon,
1178
1139
  {
1179
1140
  fontSize: "small",
1180
1141
  sx: {
@@ -1183,19 +1144,20 @@ function ViolationRow({ audit: audit26, expanded, onToggleExpand, skipReason, vi
1183
1144
  }
1184
1145
  }
1185
1146
  )
1186
- )), /* @__PURE__ */ React11.createElement(import_ui10.Collapse, { in: expanded }, /* @__PURE__ */ React11.createElement(import_ui10.Box, { sx: { display: "flex", flexDirection: "column", gap: 1, paddingBlock: 1 } }, /* @__PURE__ */ React11.createElement(import_ui10.Tooltip, { title: audit26.fixHint, placement: "top" }, /* @__PURE__ */ React11.createElement(
1147
+ )), /* @__PURE__ */ React11.createElement(import_ui10.Collapse, { in: expanded }, /* @__PURE__ */ React11.createElement(import_ui10.Box, { paddingBlock: 1 }, /* @__PURE__ */ React11.createElement(import_ui10.Tooltip, { title: audit26.fixHint, placement: "top" }, /* @__PURE__ */ React11.createElement(
1187
1148
  import_ui10.Alert,
1188
1149
  {
1189
1150
  severity: "secondary",
1190
1151
  sx: { p: 1, cursor: isGuidanceFocusable ? "pointer" : void 0 },
1191
- icon: /* @__PURE__ */ React11.createElement(import_icons8.InfoCircleIcon, { fontSize: "small", "aria-hidden": true }),
1152
+ icon: /* @__PURE__ */ React11.createElement(import_icons9.InfoCircleIcon, { fontSize: "small", "aria-hidden": true }),
1192
1153
  role: isGuidanceFocusable ? "button" : void 0,
1193
1154
  tabIndex: isGuidanceFocusable ? 0 : void 0,
1194
1155
  onClick: isGuidanceFocusable ? handleGuidanceClick : void 0,
1195
1156
  onKeyDown: isGuidanceFocusable ? onKeyboardClick(handleGuidanceClick) : void 0
1196
1157
  },
1197
- /* @__PURE__ */ React11.createElement(import_ui10.Typography, { variant: "caption", component: "p", color: "text.secondary" }, audit26.description)
1198
- )), primaryViolation && /* @__PURE__ */ React11.createElement(GuidanceAction, { violation: primaryViolation })), violations && violations.length > 0 && /* @__PURE__ */ React11.createElement(import_ui10.Box, { role: "list", sx: { paddingBlockEnd: 1 } }, violations.map((violation, idx) => {
1158
+ /* @__PURE__ */ React11.createElement(import_ui10.Typography, { variant: "caption", component: "p", color: "text.secondary" }, audit26.description),
1159
+ primaryViolation && /* @__PURE__ */ React11.createElement(GuidanceAction, { violation: primaryViolation })
1160
+ ))), violations && violations.length > 0 && /* @__PURE__ */ React11.createElement(import_ui10.Box, { role: "list", sx: { paddingBlockEnd: 1 } }, violations.map((violation, idx) => {
1199
1161
  const widgetIcon = violation.elementId ? (0, import_editor_elements5.getElementIcon)(violation.elementId) : null;
1200
1162
  const elementTitle = violation.elementId ? (0, import_editor_elements5.getElementTitle)(violation.elementId) : null;
1201
1163
  const rowLabel = elementTitle ? `${elementTitle} - ${violation.label}` : violation.label;
@@ -1226,111 +1188,33 @@ function ViolationRow({ audit: audit26, expanded, onToggleExpand, skipReason, vi
1226
1188
  prompt: violation.angiePrompt ?? buildAngiePrompt(rowLabel),
1227
1189
  panelZIndex
1228
1190
  }
1229
- ) : /* @__PURE__ */ React11.createElement(import_icons8.WandIcon, { fontSize: "tiny", "aria-hidden": true })
1191
+ ) : /* @__PURE__ */ React11.createElement(import_icons9.WandIcon, { fontSize: "tiny", "aria-hidden": true })
1230
1192
  );
1231
1193
  }))));
1232
1194
  }
1233
1195
 
1234
- // src/components/pages/all-audits-page.tsx
1235
- function AllAuditsPage({ initialExpandedStatus, onBack, report }) {
1236
- const { failed, passed, skipped, totalViolations } = partitionAuditResults(report);
1237
- const expandFail = !initialExpandedStatus || initialExpandedStatus === "fail";
1238
- const expandPass = initialExpandedStatus === "pass";
1239
- const expandSkipped = initialExpandedStatus === "skipped";
1240
- const { expandedId, toggle } = useSingleExpandedCard();
1241
- return /* @__PURE__ */ React12.createElement(import_ui11.Box, { key: initialExpandedStatus ?? "default" }, /* @__PURE__ */ React12.createElement(SubpageHeader, { title: (0, import_i18n12.__)("All audits", "elementor"), onBack }), /* @__PURE__ */ React12.createElement(import_ui11.Box, { sx: { p: 1 } }, /* @__PURE__ */ React12.createElement(
1242
- StatusSection,
1243
- {
1244
- label: auditStatusLabel("fail"),
1245
- count: totalViolations,
1246
- color: auditStatusColor("fail"),
1247
- defaultExpanded: expandFail
1248
- },
1249
- failed.map((r) => /* @__PURE__ */ React12.createElement(
1250
- ViolationRow,
1251
- {
1252
- key: r.audit.id,
1253
- audit: r.audit,
1254
- violations: r.result.violations,
1255
- expanded: expandedId === r.audit.id,
1256
- onToggleExpand: () => toggle(r.audit.id)
1257
- }
1258
- ))
1259
- ), /* @__PURE__ */ React12.createElement(
1260
- StatusSection,
1261
- {
1262
- label: auditStatusLabel("pass"),
1263
- count: passed.length,
1264
- color: auditStatusColor("pass"),
1265
- defaultExpanded: expandPass
1266
- },
1267
- passed.map((r) => /* @__PURE__ */ React12.createElement(
1268
- ViolationRow,
1269
- {
1270
- key: r.audit.id,
1271
- audit: r.audit,
1272
- expanded: expandedId === r.audit.id,
1273
- onToggleExpand: () => toggle(r.audit.id)
1274
- }
1275
- ))
1276
- ), /* @__PURE__ */ React12.createElement(
1277
- StatusSection,
1278
- {
1279
- label: auditStatusLabel("skipped"),
1280
- count: skipped.length,
1281
- color: auditStatusColor("skipped"),
1282
- defaultExpanded: expandSkipped
1283
- },
1284
- skipped.map((r) => /* @__PURE__ */ React12.createElement(
1285
- ViolationRow,
1286
- {
1287
- key: r.audit.id,
1288
- audit: r.audit,
1289
- skipReason: r.result.reason,
1290
- expanded: expandedId === r.audit.id,
1291
- onToggleExpand: () => toggle(r.audit.id)
1292
- }
1293
- ))
1294
- )));
1295
- }
1296
-
1297
- // src/components/pages/category-page.tsx
1298
- var React13 = __toESM(require("react"));
1299
- var import_ui12 = require("@elementor/ui");
1300
- var import_i18n13 = require("@wordpress/i18n");
1301
-
1302
- // src/components/category-icons.ts
1303
- var import_icons9 = require("@elementor/icons");
1304
- var CATEGORY_ICONS = {
1305
- "best-practices": import_icons9.Settings2Icon,
1306
- seo: import_icons9.FileSearchIcon,
1307
- accessibility: import_icons9.ElementorAccessibilityIcon,
1308
- performance: import_icons9.BoltIcon,
1309
- compliance: import_icons9.ShieldCheckIcon
1310
- };
1311
-
1312
1196
  // src/components/pages/category-page.tsx
1313
1197
  function CategoryPage({ category, report, onBack }) {
1314
1198
  const Icon = CATEGORY_ICONS[category];
1315
1199
  const { failed, passed, skipped, totalViolations } = partitionAuditResults(report, { category });
1316
1200
  const { expandedId, toggle } = useSingleExpandedCard();
1317
- return /* @__PURE__ */ React13.createElement(React13.Fragment, null, /* @__PURE__ */ React13.createElement(
1201
+ return /* @__PURE__ */ React12.createElement(React12.Fragment, null, /* @__PURE__ */ React12.createElement(
1318
1202
  SubpageHeader,
1319
1203
  {
1320
1204
  title: CATEGORY_LABELS[category],
1321
1205
  onBack,
1322
- backLabel: (0, import_i18n13.__)("Back to all issues", "elementor"),
1323
- icon: /* @__PURE__ */ React13.createElement(Icon, { fontSize: "small", color: "action" })
1206
+ backLabel: (0, import_i18n11.__)("Back to all issues", "elementor"),
1207
+ icon: /* @__PURE__ */ React12.createElement(Icon, { fontSize: "small", color: "action" })
1324
1208
  }
1325
- ), /* @__PURE__ */ React13.createElement(import_ui12.Box, { sx: { p: 1 } }, /* @__PURE__ */ React13.createElement(
1209
+ ), /* @__PURE__ */ React12.createElement(import_ui11.Box, { sx: { p: 1 } }, /* @__PURE__ */ React12.createElement(
1326
1210
  StatusSection,
1327
1211
  {
1328
- label: (0, import_i18n13.__)("Failed audits", "elementor"),
1212
+ label: (0, import_i18n11.__)("Failed audits", "elementor"),
1329
1213
  count: totalViolations,
1330
1214
  color: "error",
1331
1215
  defaultExpanded: true
1332
1216
  },
1333
- failed.map((r) => /* @__PURE__ */ React13.createElement(
1217
+ failed.map((r) => /* @__PURE__ */ React12.createElement(
1334
1218
  ViolationRow,
1335
1219
  {
1336
1220
  key: r.audit.id,
@@ -1340,7 +1224,7 @@ function CategoryPage({ category, report, onBack }) {
1340
1224
  onToggleExpand: () => toggle(r.audit.id)
1341
1225
  }
1342
1226
  ))
1343
- ), /* @__PURE__ */ React13.createElement(StatusSection, { label: (0, import_i18n13.__)("Passed audits", "elementor"), count: passed.length, color: "success" }, passed.map((r) => /* @__PURE__ */ React13.createElement(
1227
+ ), /* @__PURE__ */ React12.createElement(StatusSection, { label: (0, import_i18n11.__)("Passed audits", "elementor"), count: passed.length, color: "success" }, passed.map((r) => /* @__PURE__ */ React12.createElement(
1344
1228
  ViolationRow,
1345
1229
  {
1346
1230
  key: r.audit.id,
@@ -1348,7 +1232,7 @@ function CategoryPage({ category, report, onBack }) {
1348
1232
  expanded: expandedId === r.audit.id,
1349
1233
  onToggleExpand: () => toggle(r.audit.id)
1350
1234
  }
1351
- ))), /* @__PURE__ */ React13.createElement(StatusSection, { label: (0, import_i18n13.__)("Skipped audits", "elementor"), count: skipped.length, color: "default" }, skipped.map((r) => /* @__PURE__ */ React13.createElement(
1235
+ ))), /* @__PURE__ */ React12.createElement(StatusSection, { label: (0, import_i18n11.__)("Skipped audits", "elementor"), count: skipped.length, color: "default" }, skipped.map((r) => /* @__PURE__ */ React12.createElement(
1352
1236
  ViolationRow,
1353
1237
  {
1354
1238
  key: r.audit.id,
@@ -1360,14 +1244,13 @@ function CategoryPage({ category, report, onBack }) {
1360
1244
  )))));
1361
1245
  }
1362
1246
 
1363
- // src/components/pages/issues-page.tsx
1364
- var React18 = __toESM(require("react"));
1365
- var import_react5 = require("react");
1366
- var import_ui17 = require("@elementor/ui");
1367
- var import_i18n17 = require("@wordpress/i18n");
1247
+ // src/components/pages/overview-page.tsx
1248
+ var React17 = __toESM(require("react"));
1249
+ var import_ui16 = require("@elementor/ui");
1250
+ var import_i18n15 = require("@wordpress/i18n");
1368
1251
 
1369
1252
  // src/utils/severity-counts.ts
1370
- var import_i18n14 = require("@wordpress/i18n");
1253
+ var import_i18n12 = require("@wordpress/i18n");
1371
1254
  var ALL_SEVERITIES = ["error", "warning", "info"];
1372
1255
  function countSeverities(report, category) {
1373
1256
  const counts = { error: 0, warning: 0, info: 0 };
@@ -1388,119 +1271,23 @@ function countSeverities(report, category) {
1388
1271
  function severityPluralLabel(severity) {
1389
1272
  switch (severity) {
1390
1273
  case "error":
1391
- return (0, import_i18n14.__)("Errors", "elementor");
1274
+ return (0, import_i18n12.__)("Errors", "elementor");
1392
1275
  case "warning":
1393
- return (0, import_i18n14.__)("Warnings", "elementor");
1276
+ return (0, import_i18n12.__)("Warnings", "elementor");
1394
1277
  case "info":
1395
- return (0, import_i18n14.__)("Suggestions", "elementor");
1278
+ return (0, import_i18n12.__)("Suggestions", "elementor");
1396
1279
  }
1397
1280
  }
1398
1281
 
1399
- // src/components/audit-statuses-section.tsx
1400
- var React15 = __toESM(require("react"));
1401
- var import_ui14 = require("@elementor/ui");
1402
- var import_i18n15 = require("@wordpress/i18n");
1403
-
1404
- // src/components/count-summary-circle.tsx
1405
- var React14 = __toESM(require("react"));
1406
- var import_ui13 = require("@elementor/ui");
1407
- var COUNT_SUMMARY_CIRCLE_SIZE = 64;
1408
- var COUNT_SUMMARY_BORDER_WIDTH = 4;
1409
- function chipBorderColor(theme, color) {
1410
- if (color === "default" || !color) {
1411
- return theme.palette.text.secondary;
1412
- }
1413
- return theme.palette[color].main;
1414
- }
1415
- function CountSummaryCircle({ ariaLabel, color, count, label, onClick }) {
1416
- return /* @__PURE__ */ React14.createElement(
1417
- import_ui13.Box,
1418
- {
1419
- "aria-label": ariaLabel,
1420
- component: "button",
1421
- onClick,
1422
- type: "button",
1423
- sx: {
1424
- alignItems: "center",
1425
- background: "none",
1426
- border: "none",
1427
- cursor: "pointer",
1428
- display: "flex",
1429
- flex: 1,
1430
- flexDirection: "column",
1431
- gap: 0.5,
1432
- padding: 0
1433
- }
1434
- },
1435
- /* @__PURE__ */ React14.createElement(
1436
- import_ui13.Chip,
1437
- {
1438
- color,
1439
- label: count,
1440
- size: "small",
1441
- variant: "standard",
1442
- sx: (theme) => ({
1443
- border: `${COUNT_SUMMARY_BORDER_WIDTH}px solid ${chipBorderColor(theme, color)}`,
1444
- borderRadius: "50%",
1445
- height: COUNT_SUMMARY_CIRCLE_SIZE,
1446
- maxWidth: COUNT_SUMMARY_CIRCLE_SIZE,
1447
- width: COUNT_SUMMARY_CIRCLE_SIZE,
1448
- "& .MuiChip-label": {
1449
- fontSize: theme.typography.body2.fontSize,
1450
- fontWeight: 700,
1451
- lineHeight: 1,
1452
- padding: 0
1453
- }
1454
- })
1455
- }
1456
- ),
1457
- /* @__PURE__ */ React14.createElement(import_ui13.Typography, { color: "text.secondary", sx: { textAlign: "center" }, variant: "caption" }, label)
1458
- );
1459
- }
1460
-
1461
- // src/components/audit-statuses-section.tsx
1462
- var STATUS_ARIA_LABELS = {
1463
- pass: (count) => (0, import_i18n15.sprintf)(
1464
- /* translators: %d: number of passed audits. */
1465
- (0, import_i18n15.__)("%d passed audits, view all", "elementor"),
1466
- count
1467
- ),
1468
- fail: (count) => (0, import_i18n15.sprintf)(
1469
- /* translators: %d: number of failed audit violations. */
1470
- (0, import_i18n15.__)("%d failed audits, view all", "elementor"),
1471
- count
1472
- ),
1473
- skipped: (count) => (0, import_i18n15.sprintf)(
1474
- /* translators: %d: number of skipped audits. */
1475
- (0, import_i18n15.__)("%d skipped audits, view all", "elementor"),
1476
- count
1477
- )
1478
- };
1479
- var STATUS_GROUPS = ["fail", "pass", "skipped"];
1480
- function AuditStatusesSection({ report, onStatusClick }) {
1481
- const statusCounts = auditStatusDisplayCounts(report);
1482
- return /* @__PURE__ */ React15.createElement(React15.Fragment, null, /* @__PURE__ */ React15.createElement(import_ui14.Typography, { variant: "subtitle1", fontWeight: "bold" }, (0, import_i18n15.__)("Audit statuses", "elementor")), /* @__PURE__ */ React15.createElement(import_ui14.Box, { sx: { display: "flex", justifyContent: "space-around", gap: 2 } }, STATUS_GROUPS.map((status) => /* @__PURE__ */ React15.createElement(
1483
- CountSummaryCircle,
1484
- {
1485
- key: status,
1486
- ariaLabel: STATUS_ARIA_LABELS[status](statusCounts[status]),
1487
- color: auditStatusColor(status),
1488
- count: statusCounts[status],
1489
- label: auditStatusLabel(status),
1490
- onClick: () => onStatusClick(status)
1491
- }
1492
- ))), /* @__PURE__ */ React15.createElement(import_ui14.Divider, null));
1493
- }
1494
-
1495
1282
  // src/components/issues-category-row.tsx
1496
- var React16 = __toESM(require("react"));
1283
+ var React13 = __toESM(require("react"));
1497
1284
  var import_icons10 = require("@elementor/icons");
1498
- var import_ui15 = require("@elementor/ui");
1285
+ var import_ui12 = require("@elementor/ui");
1499
1286
  function IssuesCategoryRow({ category, label, counts, onClick }) {
1500
- const isRtl = "rtl" === (0, import_ui15.useTheme)().direction;
1287
+ const isRtl = "rtl" === (0, import_ui12.useTheme)().direction;
1501
1288
  const Icon = CATEGORY_ICONS[category];
1502
- return /* @__PURE__ */ React16.createElement(
1503
- import_ui15.Box,
1289
+ return /* @__PURE__ */ React13.createElement(
1290
+ import_ui12.Box,
1504
1291
  {
1505
1292
  role: "button",
1506
1293
  tabIndex: 0,
@@ -1521,112 +1308,21 @@ function IssuesCategoryRow({ category, label, counts, onClick }) {
1521
1308
  "&:focus-visible": { outline: "2px solid", outlineColor: "primary.main" }
1522
1309
  }
1523
1310
  },
1524
- /* @__PURE__ */ React16.createElement(Icon, { fontSize: "small", color: "action" }),
1525
- /* @__PURE__ */ React16.createElement(import_ui15.Typography, { variant: "body2", fontWeight: "bold", sx: { flex: 1 } }, label),
1526
- /* @__PURE__ */ React16.createElement(import_ui15.Box, { sx: { display: "flex", alignItems: "center", gap: 0.5 } }, ALL_SEVERITIES.filter((s) => counts[s] > 0).map((severity) => /* @__PURE__ */ React16.createElement(import_ui15.Box, { key: severity, sx: { display: "flex", alignItems: "center", gap: 0.25 } }, /* @__PURE__ */ React16.createElement(SeverityIcon, { severity }), /* @__PURE__ */ React16.createElement(import_ui15.Typography, { variant: "caption", color: "text.primary", fontWeight: "bold" }, counts[severity])))),
1527
- /* @__PURE__ */ React16.createElement(import_ui15.Rotate, { in: isRtl }, /* @__PURE__ */ React16.createElement(import_icons10.ChevronRightIcon, { fontSize: "small", color: "action" }))
1528
- );
1529
- }
1530
-
1531
- // src/components/severity-filter-chips.tsx
1532
- var React17 = __toESM(require("react"));
1533
- var import_ui16 = require("@elementor/ui");
1534
- var import_i18n16 = require("@wordpress/i18n");
1535
- function SeverityFilterChips({ selected, onChange }) {
1536
- return /* @__PURE__ */ React17.createElement(import_ui16.Box, { sx: { display: "flex", alignItems: "center", gap: 1 } }, /* @__PURE__ */ React17.createElement(
1537
- FilterChip,
1538
- {
1539
- label: (0, import_i18n16.__)("All", "elementor"),
1540
- isSelected: selected === "all",
1541
- onClick: () => onChange("all")
1542
- }
1543
- ), ALL_SEVERITIES.map((severity) => /* @__PURE__ */ React17.createElement(
1544
- FilterChip,
1545
- {
1546
- key: severity,
1547
- label: severityPluralLabel(severity),
1548
- icon: /* @__PURE__ */ React17.createElement(SeverityIcon, { severity }),
1549
- isSelected: selected === severity,
1550
- onClick: () => onChange(severity)
1551
- }
1552
- )));
1553
- }
1554
- function FilterChip({ label, icon, isSelected, onClick }) {
1555
- return /* @__PURE__ */ React17.createElement(
1556
- import_ui16.Chip,
1557
- {
1558
- label,
1559
- icon,
1560
- size: "small",
1561
- variant: "filled",
1562
- color: "default",
1563
- onClick,
1564
- "aria-pressed": isSelected,
1565
- sx: { bgcolor: isSelected ? "action.selected" : "transparent" }
1566
- }
1311
+ /* @__PURE__ */ React13.createElement(Icon, { fontSize: "small", color: "action" }),
1312
+ /* @__PURE__ */ React13.createElement(import_ui12.Typography, { variant: "body2", fontWeight: "bold", sx: { flex: 1 } }, label),
1313
+ /* @__PURE__ */ React13.createElement(import_ui12.Box, { sx: { display: "flex", alignItems: "center", gap: 0.5 } }, ALL_SEVERITIES.filter((s) => counts[s] > 0).map((severity) => /* @__PURE__ */ React13.createElement(import_ui12.Box, { key: severity, sx: { display: "flex", alignItems: "center", gap: 0.25 } }, /* @__PURE__ */ React13.createElement(SeverityIcon, { severity }), /* @__PURE__ */ React13.createElement(import_ui12.Typography, { variant: "caption", color: "text.primary", fontWeight: "bold" }, counts[severity])))),
1314
+ /* @__PURE__ */ React13.createElement(import_ui12.Rotate, { in: isRtl }, /* @__PURE__ */ React13.createElement(import_icons10.ChevronRightIcon, { fontSize: "small", color: "action" }))
1567
1315
  );
1568
1316
  }
1569
1317
 
1570
- // src/components/pages/issues-page.tsx
1571
- function filterCounts(counts, filter) {
1572
- if (filter === "all") {
1573
- return counts;
1574
- }
1575
- return { error: 0, warning: 0, info: 0, [filter]: counts[filter] };
1576
- }
1577
- function IssuesPage({ report, onCategoryClick, onAllAuditsClick, onStatusClick }) {
1578
- const [filter, setFilter] = (0, import_react5.useState)("all");
1579
- const populatedCategories = getPopulatedCategories(report.categories, ALL_CATEGORIES);
1580
- const categoryRows = populatedCategories.map((category) => ({ category, counts: filterCounts(countSeverities(report, category), filter) })).filter(({ counts }) => Object.values(counts).some((count) => count > 0));
1581
- return /* @__PURE__ */ React18.createElement(import_ui17.Box, { sx: { display: "flex", flexDirection: "column", gap: 4, p: 2 } }, /* @__PURE__ */ React18.createElement(AuditStatusesSection, { report, onStatusClick }), /* @__PURE__ */ React18.createElement(
1582
- import_ui17.Link,
1583
- {
1584
- component: "button",
1585
- underline: "none",
1586
- color: "inherit",
1587
- onClick: onAllAuditsClick,
1588
- sx: { textAlign: "start" }
1589
- },
1590
- /* @__PURE__ */ React18.createElement(import_ui17.Typography, { variant: "subtitle1", component: "h2" }, (0, import_i18n17.__)("All issues", "elementor"))
1591
- ), /* @__PURE__ */ React18.createElement(SeverityFilterChips, { selected: filter, onChange: setFilter }), /* @__PURE__ */ React18.createElement(import_ui17.Box, { sx: { display: "flex", flexDirection: "column", gap: 1 } }, categoryRows.map(({ category, counts }) => /* @__PURE__ */ React18.createElement(
1592
- IssuesCategoryRow,
1593
- {
1594
- key: category,
1595
- category,
1596
- label: CATEGORY_LABELS[category],
1597
- counts,
1598
- onClick: () => onCategoryClick(category)
1599
- }
1600
- ))));
1601
- }
1602
-
1603
- // src/components/pages/overview-page.tsx
1604
- var React23 = __toESM(require("react"));
1605
- var import_ui22 = require("@elementor/ui");
1606
- var import_i18n21 = require("@wordpress/i18n");
1607
-
1608
- // src/utils/score-thresholds.ts
1609
- var import_i18n18 = require("@wordpress/i18n");
1610
- var GOOD_THRESHOLD = 90;
1611
- var OK_THRESHOLD = 50;
1612
- function getScoreTier(score) {
1613
- if (score >= GOOD_THRESHOLD) {
1614
- return { color: "success", label: (0, import_i18n18.__)("Good", "elementor") };
1615
- }
1616
- if (score >= OK_THRESHOLD) {
1617
- return { color: "warning", label: (0, import_i18n18.__)("Needs work", "elementor") };
1618
- }
1619
- return { color: "error", label: (0, import_i18n18.__)("At risk", "elementor") };
1620
- }
1621
-
1622
1318
  // src/components/promotions.tsx
1623
- var React20 = __toESM(require("react"));
1624
- var import_ui19 = require("@elementor/ui");
1625
- var import_i18n20 = require("@wordpress/i18n");
1319
+ var React15 = __toESM(require("react"));
1320
+ var import_ui14 = require("@elementor/ui");
1321
+ var import_i18n14 = require("@wordpress/i18n");
1626
1322
 
1627
1323
  // src/register-promotions.ts
1628
1324
  var import_icons11 = require("@elementor/icons");
1629
- var import_i18n19 = require("@wordpress/i18n");
1325
+ var import_i18n13 = require("@wordpress/i18n");
1630
1326
  function firstFailExternalUrl(run) {
1631
1327
  return run.result.status === "fail" ? run.result.violations[0]?.externalUrl : void 0;
1632
1328
  }
@@ -1634,7 +1330,7 @@ var PROMOTIONS = [
1634
1330
  {
1635
1331
  auditId: "audits/images-alt-text",
1636
1332
  icon: import_icons11.PhotoIcon,
1637
- ctaLabel: (0, import_i18n19.__)("Fix with Ally", "elementor"),
1333
+ ctaLabel: (0, import_i18n13.__)("Fix with Ally", "elementor"),
1638
1334
  formatSubtitle: (run) => {
1639
1335
  if (run.result.status !== "fail") {
1640
1336
  return null;
@@ -1643,9 +1339,9 @@ var PROMOTIONS = [
1643
1339
  if (count === 0) {
1644
1340
  return null;
1645
1341
  }
1646
- return (0, import_i18n19.sprintf)(
1342
+ return (0, import_i18n13.sprintf)(
1647
1343
  /* translators: %d: number of images missing alt text. */
1648
- (0, import_i18n19._n)("%d image", "%d images", count, "elementor"),
1344
+ (0, import_i18n13._n)("%d image", "%d images", count, "elementor"),
1649
1345
  count
1650
1346
  );
1651
1347
  },
@@ -1654,21 +1350,21 @@ var PROMOTIONS = [
1654
1350
  {
1655
1351
  auditId: "audits/cookie-policy",
1656
1352
  icon: import_icons11.ElementorCookieIcon,
1657
- ctaLabel: (0, import_i18n19.__)("Fix with Cookiez", "elementor"),
1658
- formatSubtitle: (run) => run.result.status === "fail" ? (0, import_i18n19.__)("Generate cookie policy", "elementor") : null,
1353
+ ctaLabel: (0, import_i18n13.__)("Fix with Cookiez", "elementor"),
1354
+ formatSubtitle: (run) => run.result.status === "fail" ? (0, import_i18n13.__)("Generate cookie policy", "elementor") : null,
1659
1355
  getCtaUrl: firstFailExternalUrl
1660
1356
  },
1661
1357
  {
1662
1358
  auditId: "audits/scan-for-cookies",
1663
1359
  icon: import_icons11.ElementorCookieIcon,
1664
- ctaLabel: (0, import_i18n19.__)("Scan", "elementor"),
1665
- formatSubtitle: (run) => run.result.status === "fail" ? (0, import_i18n19.__)("Scan this page for cookies", "elementor") : null,
1360
+ ctaLabel: (0, import_i18n13.__)("Scan", "elementor"),
1361
+ formatSubtitle: (run) => run.result.status === "fail" ? (0, import_i18n13.__)("Scan this page for cookies", "elementor") : null,
1666
1362
  getCtaUrl: firstFailExternalUrl
1667
1363
  },
1668
1364
  {
1669
1365
  auditId: "audits/images-too-large",
1670
1366
  icon: import_icons11.ShieldHalfFilledIcon,
1671
- ctaLabel: (0, import_i18n19.__)("Optimize all", "elementor"),
1367
+ ctaLabel: (0, import_i18n13.__)("Optimize all", "elementor"),
1672
1368
  formatSubtitle: (run) => {
1673
1369
  if (run.result.status !== "fail") {
1674
1370
  return null;
@@ -1677,9 +1373,9 @@ var PROMOTIONS = [
1677
1373
  if (count === 0) {
1678
1374
  return null;
1679
1375
  }
1680
- return (0, import_i18n19.sprintf)(
1376
+ return (0, import_i18n13.sprintf)(
1681
1377
  /* translators: %d: number of oversized images. */
1682
- (0, import_i18n19._n)("%d image", "%d images", count, "elementor"),
1378
+ (0, import_i18n13._n)("%d image", "%d images", count, "elementor"),
1683
1379
  count
1684
1380
  );
1685
1381
  },
@@ -1693,11 +1389,11 @@ function findAuditRun(report, auditId) {
1693
1389
  }
1694
1390
 
1695
1391
  // src/components/promotion-card.tsx
1696
- var React19 = __toESM(require("react"));
1697
- var import_ui18 = require("@elementor/ui");
1392
+ var React14 = __toESM(require("react"));
1393
+ var import_ui13 = require("@elementor/ui");
1698
1394
  function PromotionCard({ ctaDisabled, ctaLabel, icon: Icon, onCtaClick, subtitle, title }) {
1699
- return /* @__PURE__ */ React19.createElement(
1700
- import_ui18.Box,
1395
+ return /* @__PURE__ */ React14.createElement(
1396
+ import_ui13.Box,
1701
1397
  {
1702
1398
  sx: {
1703
1399
  alignItems: "center",
@@ -1710,9 +1406,9 @@ function PromotionCard({ ctaDisabled, ctaLabel, icon: Icon, onCtaClick, subtitle
1710
1406
  py: 1.5
1711
1407
  }
1712
1408
  },
1713
- /* @__PURE__ */ React19.createElement(Icon, { fontSize: "small", color: "action" }),
1714
- /* @__PURE__ */ React19.createElement(import_ui18.Box, { sx: { display: "flex", flex: 1, flexDirection: "column", gap: 0.25, minWidth: 0 } }, /* @__PURE__ */ React19.createElement(import_ui18.Typography, { variant: "body2", fontWeight: "bold" }, title), /* @__PURE__ */ React19.createElement(import_ui18.Typography, { variant: "caption", color: "text.secondary" }, subtitle)),
1715
- /* @__PURE__ */ React19.createElement(import_ui18.Button, { variant: "outlined", color: "secondary", size: "small", disabled: ctaDisabled, onClick: onCtaClick }, ctaLabel)
1409
+ /* @__PURE__ */ React14.createElement(Icon, { fontSize: "small", color: "action" }),
1410
+ /* @__PURE__ */ React14.createElement(import_ui13.Box, { sx: { display: "flex", flex: 1, flexDirection: "column", gap: 0.25, minWidth: 0 } }, /* @__PURE__ */ React14.createElement(import_ui13.Typography, { variant: "body2", fontWeight: "bold" }, title), /* @__PURE__ */ React14.createElement(import_ui13.Typography, { variant: "caption", color: "text.secondary" }, subtitle)),
1411
+ /* @__PURE__ */ React14.createElement(import_ui13.Button, { variant: "outlined", color: "secondary", size: "small", disabled: ctaDisabled, onClick: onCtaClick }, ctaLabel)
1716
1412
  );
1717
1413
  }
1718
1414
 
@@ -1741,7 +1437,7 @@ function Promotions({ report }) {
1741
1437
  if (cards.length === 0) {
1742
1438
  return null;
1743
1439
  }
1744
- return /* @__PURE__ */ React20.createElement(React20.Fragment, null, /* @__PURE__ */ React20.createElement(import_ui19.Divider, null), /* @__PURE__ */ React20.createElement(import_ui19.Typography, { variant: "subtitle1", fontWeight: "bold" }, (0, import_i18n20.__)("Quick actions", "elementor")), /* @__PURE__ */ React20.createElement(import_ui19.Box, { sx: { display: "flex", flexDirection: "column", gap: 1 } }, cards.map(({ config, ctaUrl, key, run, subtitle }) => /* @__PURE__ */ React20.createElement(
1440
+ return /* @__PURE__ */ React15.createElement(React15.Fragment, null, /* @__PURE__ */ React15.createElement(import_ui14.Divider, null), /* @__PURE__ */ React15.createElement(import_ui14.Typography, { variant: "subtitle1", fontWeight: "bold" }, (0, import_i18n14.__)("Quick actions", "elementor")), /* @__PURE__ */ React15.createElement(import_ui14.Box, { sx: { display: "flex", flexDirection: "column", gap: 1 } }, cards.map(({ config, ctaUrl, key, run, subtitle }) => /* @__PURE__ */ React15.createElement(
1745
1441
  PromotionCard,
1746
1442
  {
1747
1443
  key,
@@ -1759,207 +1455,56 @@ function Promotions({ report }) {
1759
1455
  ))));
1760
1456
  }
1761
1457
 
1762
- // src/components/score-bar.tsx
1763
- var React21 = __toESM(require("react"));
1764
- var import_icons12 = require("@elementor/icons");
1765
- var import_ui20 = require("@elementor/ui");
1766
- function ScoreBar({ label, score, onClick }) {
1767
- const isRtl = "rtl" === (0, import_ui20.useTheme)().direction;
1768
- return /* @__PURE__ */ React21.createElement(
1769
- import_ui20.Box,
1770
- {
1771
- role: onClick ? "button" : void 0,
1772
- tabIndex: onClick ? 0 : void 0,
1773
- onClick,
1774
- onKeyDown: onClick ? onKeyboardClick(onClick) : void 0,
1775
- sx: {
1776
- display: "flex",
1777
- alignItems: "center",
1778
- gap: 1,
1779
- cursor: onClick ? "pointer" : "default",
1780
- outline: "none",
1781
- "&:focus-visible": { outline: "2px solid", outlineColor: "primary.main", borderRadius: 1 },
1782
- py: 0.5
1783
- }
1784
- },
1785
- /* @__PURE__ */ React21.createElement(import_ui20.Typography, { variant: "body2", sx: { minWidth: 96 } }, label),
1786
- /* @__PURE__ */ React21.createElement(
1787
- import_ui20.LinearProgress,
1788
- {
1789
- variant: "determinate",
1790
- value: score,
1791
- color: getScoreTier(score).color,
1792
- sx: { flex: 1, height: 6, borderRadius: 4, bgcolor: "action.disabledBackground" }
1793
- }
1794
- ),
1795
- /* @__PURE__ */ React21.createElement(
1796
- import_ui20.Typography,
1797
- {
1798
- variant: "body2",
1799
- color: "text.primary",
1800
- sx: { minWidth: 24, textAlign: "right", fontWeight: 900 }
1801
- },
1802
- score
1803
- ),
1804
- onClick && /* @__PURE__ */ React21.createElement(import_ui20.Rotate, { in: isRtl }, /* @__PURE__ */ React21.createElement(import_icons12.ChevronRightIcon, { fontSize: "small", color: "action" }))
1805
- );
1458
+ // src/components/severity-summary-cards.tsx
1459
+ var React16 = __toESM(require("react"));
1460
+ var import_ui15 = require("@elementor/ui");
1461
+ function SeveritySummaryCards({ report }) {
1462
+ const counts = countSeverities(report);
1463
+ return /* @__PURE__ */ React16.createElement(import_ui15.Box, { display: "flex", gap: 1.5 }, ALL_SEVERITIES.map((severity) => /* @__PURE__ */ React16.createElement(SeverityCard, { key: severity, severity, count: counts[severity] })));
1806
1464
  }
1807
-
1808
- // src/components/score-circle.tsx
1809
- var React22 = __toESM(require("react"));
1810
- var import_ui21 = require("@elementor/ui");
1811
- var SCORE_CIRCLE_SIZE = 88;
1812
- var SCORE_CIRCLE_THICKNESS = 3;
1813
- function ScoreCircle({ color, score }) {
1814
- const progressColor = color ?? getScoreTier(score).color;
1815
- return /* @__PURE__ */ React22.createElement(
1816
- import_ui21.Box,
1465
+ function SeverityCard({ severity, count }) {
1466
+ return /* @__PURE__ */ React16.createElement(
1467
+ import_ui15.Box,
1817
1468
  {
1818
- role: "progressbar",
1819
- "aria-valuenow": score,
1820
- "aria-valuemin": 0,
1821
- "aria-valuemax": 100,
1822
- sx: { position: "relative", display: "inline-flex" }
1469
+ display: "flex",
1470
+ flex: 1,
1471
+ flexDirection: "column",
1472
+ gap: 1,
1473
+ bgcolor: "grey.50",
1474
+ borderRadius: 1.5,
1475
+ px: 1.5,
1476
+ py: 1
1823
1477
  },
1824
- /* @__PURE__ */ React22.createElement(
1825
- import_ui21.CircularProgress,
1826
- {
1827
- variant: "determinate",
1828
- value: 100,
1829
- size: SCORE_CIRCLE_SIZE,
1830
- thickness: SCORE_CIRCLE_THICKNESS,
1831
- sx: { color: "action.disabledBackground" }
1832
- }
1833
- ),
1834
- /* @__PURE__ */ React22.createElement(
1835
- import_ui21.CircularProgress,
1836
- {
1837
- variant: "determinate",
1838
- value: score,
1839
- size: SCORE_CIRCLE_SIZE,
1840
- thickness: SCORE_CIRCLE_THICKNESS,
1841
- color: progressColor,
1842
- sx: { position: "absolute", left: 0 }
1843
- }
1844
- ),
1845
- /* @__PURE__ */ React22.createElement(
1846
- import_ui21.Box,
1847
- {
1848
- sx: {
1849
- position: "absolute",
1850
- inset: 0,
1851
- display: "flex",
1852
- alignItems: "center",
1853
- justifyContent: "center"
1854
- }
1855
- },
1856
- /* @__PURE__ */ React22.createElement(
1857
- import_ui21.Typography,
1858
- {
1859
- variant: "h4",
1860
- component: "span",
1861
- color: "text.primary",
1862
- sx: { fontWeight: 700, lineHeight: 1 }
1863
- },
1864
- score
1865
- )
1866
- )
1478
+ /* @__PURE__ */ React16.createElement(SeverityIcon, { severity }),
1479
+ /* @__PURE__ */ React16.createElement(import_ui15.Box, { display: "flex", flexDirection: "column" }, /* @__PURE__ */ React16.createElement(import_ui15.Typography, { variant: "h5", fontWeight: 700, component: "span" }, count), /* @__PURE__ */ React16.createElement(import_ui15.Typography, { variant: "caption", color: "text.secondary" }, severityPluralLabel(severity)))
1867
1480
  );
1868
1481
  }
1869
1482
 
1870
1483
  // src/components/pages/overview-page.tsx
1871
1484
  function OverviewPage({ onCategoryClick, report }) {
1872
1485
  const populatedCategories = getPopulatedCategories(report.categories, ALL_CATEGORIES);
1873
- const overallScore = getScoreTier(report.overall);
1874
- return /* @__PURE__ */ React23.createElement(import_ui22.Box, { sx: { display: "flex", flexDirection: "column", gap: 4, p: 2 } }, /* @__PURE__ */ React23.createElement(import_ui22.Box, { sx: { display: "flex", alignItems: "center", gap: 2 } }, /* @__PURE__ */ React23.createElement(ScoreCircle, { color: overallScore.color, score: report.overall }), /* @__PURE__ */ React23.createElement(import_ui22.Box, { sx: { display: "flex", flexDirection: "column", gap: 0.5 } }, /* @__PURE__ */ React23.createElement(
1875
- import_ui22.Chip,
1876
- {
1877
- label: overallScore.label,
1878
- color: overallScore.color,
1879
- variant: "standard",
1880
- size: "small",
1881
- sx: { fontWeight: 600, alignSelf: "flex-start" }
1882
- }
1883
- ), /* @__PURE__ */ React23.createElement(import_ui22.Typography, { variant: "body2", color: "text.secondary" }, (0, import_i18n21.__)("Overall score", "elementor")))), /* @__PURE__ */ React23.createElement(import_ui22.Box, { sx: { display: "flex", flexDirection: "column", gap: 2 } }, populatedCategories.map((category) => /* @__PURE__ */ React23.createElement(
1884
- ScoreBar,
1486
+ const categoryRows = populatedCategories.map((category) => ({ category, counts: countSeverities(report, category) })).filter(({ counts }) => Object.values(counts).some((count) => count > 0));
1487
+ return /* @__PURE__ */ React17.createElement(import_ui16.Box, { display: "flex", flexDirection: "column", gap: 3, p: 2 }, /* @__PURE__ */ React17.createElement(SeveritySummaryCards, { report }), /* @__PURE__ */ React17.createElement(import_ui16.Box, { display: "flex", flexDirection: "column", gap: 1 }, /* @__PURE__ */ React17.createElement(import_ui16.Typography, { variant: "subtitle1", component: "h2" }, (0, import_i18n15.__)("All issues", "elementor")), /* @__PURE__ */ React17.createElement(import_ui16.Box, { display: "flex", flexDirection: "column", gap: 1 }, categoryRows.map(({ category, counts }) => /* @__PURE__ */ React17.createElement(
1488
+ IssuesCategoryRow,
1885
1489
  {
1886
1490
  key: category,
1491
+ category,
1887
1492
  label: CATEGORY_LABELS[category],
1888
- score: report.categories[category].score,
1493
+ counts,
1889
1494
  onClick: () => onCategoryClick(category)
1890
1495
  }
1891
- ))), /* @__PURE__ */ React23.createElement(Promotions, { report }));
1496
+ )))), /* @__PURE__ */ React17.createElement(Promotions, { report }));
1892
1497
  }
1893
1498
 
1894
1499
  // src/components/report-shell.tsx
1895
- function activeTab(page) {
1896
- if (page === "overview") {
1897
- return "overview";
1898
- }
1899
- if (page === "issues") {
1900
- return "issues";
1901
- }
1902
- return page.backTo;
1903
- }
1904
- function isAllAuditsPage(page) {
1905
- return typeof page === "object" && "page" in page && page.page === "all-audits";
1906
- }
1907
1500
  function isCategoryPage(page) {
1908
1501
  return typeof page === "object" && "category" in page;
1909
1502
  }
1910
1503
  function ReportShell({ report }) {
1911
- const [activePage, setActivePage] = (0, import_react6.useState)("overview");
1912
- const currentTab = activeTab(activePage);
1913
- const handleTabChange = (_, value) => {
1914
- setActivePage(value);
1915
- };
1916
- const openCategory = (category, backTo) => {
1917
- setActivePage({ category, backTo });
1918
- };
1919
- const openAllAudits = (expand, backTo = "issues") => {
1920
- setActivePage({ page: "all-audits", expand, backTo });
1921
- };
1922
- const backFromSubPage = () => {
1923
- if (isAllAuditsPage(activePage) || isCategoryPage(activePage)) {
1924
- setActivePage(activePage.backTo);
1925
- }
1926
- };
1927
- return /* @__PURE__ */ React24.createElement(import_ui23.Box, { sx: { display: "flex", flexDirection: "column", flex: 1, minHeight: 0 } }, /* @__PURE__ */ React24.createElement(import_ui23.Box, { sx: { flexShrink: 0 } }, /* @__PURE__ */ React24.createElement(
1928
- import_ui23.Tabs,
1929
- {
1930
- "aria-label": (0, import_i18n22.__)("Audit navigation", "elementor"),
1931
- value: currentTab,
1932
- onChange: handleTabChange,
1933
- textColor: "secondary",
1934
- indicatorColor: "secondary",
1935
- size: "small",
1936
- centered: true,
1937
- variant: "fullWidth"
1938
- },
1939
- /* @__PURE__ */ React24.createElement(import_ui23.Tab, { value: "overview", label: (0, import_i18n22.__)("Overview", "elementor") }),
1940
- /* @__PURE__ */ React24.createElement(import_ui23.Tab, { value: "issues", label: (0, import_i18n22.__)("Issues", "elementor") })
1941
- ), /* @__PURE__ */ React24.createElement(import_ui23.Divider, null)), /* @__PURE__ */ React24.createElement(import_ui23.Box, { sx: { flex: 1, minHeight: 0, overflowY: "auto" } }, activePage === "overview" && /* @__PURE__ */ React24.createElement(
1942
- OverviewPage,
1943
- {
1944
- report,
1945
- onCategoryClick: (category) => openCategory(category, "overview")
1946
- }
1947
- ), activePage === "issues" && /* @__PURE__ */ React24.createElement(
1948
- IssuesPage,
1949
- {
1950
- report,
1951
- onCategoryClick: (category) => openCategory(category, "issues"),
1952
- onAllAuditsClick: () => openAllAudits(),
1953
- onStatusClick: (status) => openAllAudits(status)
1954
- }
1955
- ), isAllAuditsPage(activePage) && /* @__PURE__ */ React24.createElement(
1956
- AllAuditsPage,
1957
- {
1958
- report,
1959
- initialExpandedStatus: activePage.expand,
1960
- onBack: backFromSubPage
1961
- }
1962
- ), isCategoryPage(activePage) && /* @__PURE__ */ React24.createElement(CategoryPage, { category: activePage.category, report, onBack: backFromSubPage })));
1504
+ const [activePage, setActivePage] = (0, import_react5.useState)("overview");
1505
+ const openCategory = (category) => setActivePage({ category });
1506
+ const backToOverview = () => setActivePage("overview");
1507
+ return /* @__PURE__ */ React18.createElement(import_ui17.Box, { 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 }));
1963
1508
  }
1964
1509
 
1965
1510
  // src/components/audit-panel.tsx
@@ -1968,32 +1513,33 @@ function AuditPanel() {
1968
1513
  const hostDocumentId = (0, import_editor_elements6.getHostDocumentId)() ?? 0;
1969
1514
  const onRun = () => run(hostDocumentId);
1970
1515
  const lastScanLabel = report ? new Date(report.runAt).toLocaleTimeString() : null;
1971
- return /* @__PURE__ */ React25.createElement(React25.Fragment, null, /* @__PURE__ */ React25.createElement(
1516
+ return /* @__PURE__ */ React19.createElement(React19.Fragment, null, /* @__PURE__ */ React19.createElement(
1972
1517
  import_editor_floating_panels3.FloatingPanelHeader,
1973
1518
  {
1974
1519
  panelId: AUDIT_PANEL_ID,
1975
- title: (0, import_i18n23.__)("Page Audit", "elementor"),
1976
- badge: (0, import_i18n23.__)("Beta", "elementor"),
1520
+ title: (0, import_i18n16.__)("Page Audit", "elementor"),
1521
+ badge: (0, import_i18n16.__)("Beta", "elementor"),
1977
1522
  titleVariant: "subtitle2"
1978
1523
  }
1979
- ), /* @__PURE__ */ React25.createElement(
1524
+ ), /* @__PURE__ */ React19.createElement(
1980
1525
  import_editor_floating_panels3.FloatingPanelBody,
1981
1526
  {
1982
1527
  sx: status === "ready" ? { display: "flex", flexDirection: "column", overflow: "hidden", minHeight: 0 } : void 0
1983
1528
  },
1984
- status === "idle" && /* @__PURE__ */ React25.createElement(WelcomePage, null),
1985
- status === "loading" && /* @__PURE__ */ React25.createElement(LoadingPage, null),
1986
- status === "error" && /* @__PURE__ */ React25.createElement(ErrorPage, { message: error ?? "", onRetry: onRun }),
1987
- status === "ready" && report && /* @__PURE__ */ React25.createElement(ReportShell, { report })
1988
- ), /* @__PURE__ */ React25.createElement(import_editor_floating_panels3.FloatingPanelFooter, null, lastScanLabel ? /* @__PURE__ */ React25.createElement(import_ui24.Typography, { variant: "caption", sx: { flex: 1 } }, (0, import_i18n23.__)("Last scan:", "elementor"), " ", lastScanLabel) : /* @__PURE__ */ React25.createElement(import_ui24.Box, { sx: { flex: 1 } }), lastScanLabel && /* @__PURE__ */ React25.createElement(AuditFeedback, null), /* @__PURE__ */ React25.createElement(
1989
- import_ui24.Button,
1529
+ status === "idle" && /* @__PURE__ */ React19.createElement(WelcomePage, null),
1530
+ status === "loading" && /* @__PURE__ */ React19.createElement(LoadingPage, null),
1531
+ status === "error" && /* @__PURE__ */ React19.createElement(ErrorPage, { message: error ?? "", onRetry: onRun }),
1532
+ status === "ready" && report && /* @__PURE__ */ React19.createElement(ReportShell, { report })
1533
+ ), /* @__PURE__ */ React19.createElement(import_editor_floating_panels3.FloatingPanelFooter, null, lastScanLabel ? /* @__PURE__ */ React19.createElement(import_ui18.Typography, { variant: "caption", sx: { flex: 1 } }, (0, import_i18n16.__)("Last scan:", "elementor"), " ", lastScanLabel) : /* @__PURE__ */ React19.createElement(import_ui18.Box, { sx: { flex: 1 } }), lastScanLabel && /* @__PURE__ */ React19.createElement(AuditFeedback, null), /* @__PURE__ */ React19.createElement(
1534
+ import_ui18.Button,
1990
1535
  {
1991
1536
  variant: "contained",
1992
1537
  size: "small",
1538
+ startIcon: lastScanLabel ? /* @__PURE__ */ React19.createElement(import_icons12.ReloadIcon, { fontSize: "small" }) : void 0,
1993
1539
  onClick: onRun,
1994
1540
  disabled: status === "loading" || hostDocumentId === 0
1995
1541
  },
1996
- lastScanLabel ? (0, import_i18n23.__)("Re-scan", "elementor") : (0, import_i18n23.__)("Run page audit", "elementor")
1542
+ lastScanLabel ? (0, import_i18n16.__)("Rescan", "elementor") : (0, import_i18n16.__)("Run page audit", "elementor")
1997
1543
  )));
1998
1544
  }
1999
1545
 
@@ -2018,7 +1564,7 @@ function useAuditToggleProps() {
2018
1564
  const { isOpen } = auditPanel.useFloatingPanelStatus();
2019
1565
  const { toggle } = auditPanel.useFloatingPanelActions();
2020
1566
  return {
2021
- title: (0, import_i18n24.__)("Audit Page", "elementor"),
1567
+ title: (0, import_i18n17.__)("Audit Page", "elementor"),
2022
1568
  icon: import_icons13.ShieldCheckIcon,
2023
1569
  selected: isOpen,
2024
1570
  onClick: () => toggle()
@@ -2036,15 +1582,15 @@ function registerAppBarAuditsToggle() {
2036
1582
  }
2037
1583
 
2038
1584
  // src/audits/accessibility-policy.ts
2039
- var import_i18n25 = require("@wordpress/i18n");
1585
+ var import_i18n18 = require("@wordpress/i18n");
2040
1586
  var audit = {
2041
1587
  id: "audits/accessibility-policy",
2042
- title: (0, import_i18n25.__)("Accessibility policy", "elementor"),
2043
- description: (0, import_i18n25.__)(
1588
+ title: (0, import_i18n18.__)("Accessibility policy", "elementor"),
1589
+ description: (0, import_i18n18.__)(
2044
1590
  "An accessibility policy demonstrates your commitment to digital inclusion and may be legally required in some regions.",
2045
1591
  "elementor"
2046
1592
  ),
2047
- fixHint: (0, import_i18n25.__)("Install the Ally plugin to add an accessibility policy to your website.", "elementor"),
1593
+ fixHint: (0, import_i18n18.__)("Install the Ally plugin to add an accessibility policy to your website.", "elementor"),
2048
1594
  categories: ["compliance"],
2049
1595
  severity: "info",
2050
1596
  weight: 1,
@@ -2057,7 +1603,7 @@ var audit = {
2057
1603
  violations: [
2058
1604
  {
2059
1605
  auditId: audit.id,
2060
- label: (0, import_i18n25.__)("Ally plugin is not installed or active.", "elementor"),
1606
+ label: (0, import_i18n18.__)("Ally plugin is not installed or active.", "elementor"),
2061
1607
  externalUrl: ctx.pageContext.ally_plugin_url
2062
1608
  }
2063
1609
  ]
@@ -2066,15 +1612,15 @@ var audit = {
2066
1612
  };
2067
1613
 
2068
1614
  // src/audits/accessibility-statement.ts
2069
- var import_i18n26 = require("@wordpress/i18n");
1615
+ var import_i18n19 = require("@wordpress/i18n");
2070
1616
  var audit2 = {
2071
1617
  id: "audits/accessibility-statement",
2072
- title: (0, import_i18n26.__)("Create an accessibility statement", "elementor"),
2073
- description: (0, import_i18n26.__)(
1618
+ title: (0, import_i18n19.__)("Create an accessibility statement", "elementor"),
1619
+ description: (0, import_i18n19.__)(
2074
1620
  "An accessibility statement showcases your efforts to create an inclusive online space, highlighting helpful features and a commitment to accessibility.",
2075
1621
  "elementor"
2076
1622
  ),
2077
- fixHint: (0, import_i18n26.__)("Use Ally to create and publish an accessibility statement for your site.", "elementor"),
1623
+ fixHint: (0, import_i18n19.__)("Use Ally to create and publish an accessibility statement for your site.", "elementor"),
2078
1624
  categories: ["accessibility"],
2079
1625
  severity: "info",
2080
1626
  weight: 1,
@@ -2088,10 +1634,10 @@ var audit2 = {
2088
1634
  violations: [
2089
1635
  {
2090
1636
  auditId: audit2.id,
2091
- label: (0, import_i18n26.__)("No accessibility statement has been created for this site.", "elementor"),
1637
+ label: (0, import_i18n19.__)("No accessibility statement has been created for this site.", "elementor"),
2092
1638
  externalUrl: isReady ? ctx.pageContext.ally_accessibility_statement_url : ctx.pageContext.ally_plugin_url,
2093
- ctaLabel: (0, import_i18n26.__)("Create", "elementor"),
2094
- secondaryCtaLabel: (0, import_i18n26.__)("Learn more", "elementor"),
1639
+ ctaLabel: (0, import_i18n19.__)("Create", "elementor"),
1640
+ secondaryCtaLabel: (0, import_i18n19.__)("Learn more", "elementor"),
2095
1641
  secondaryCtaUrl: "https://elementor.com/help/start-using-ally/#statement"
2096
1642
  }
2097
1643
  ]
@@ -2100,7 +1646,7 @@ var audit2 = {
2100
1646
  };
2101
1647
 
2102
1648
  // src/audits/accessibility-widget.ts
2103
- var import_i18n27 = require("@wordpress/i18n");
1649
+ var import_i18n20 = require("@wordpress/i18n");
2104
1650
 
2105
1651
  // src/utils/scan-accessibility-widgets.ts
2106
1652
  var ACCESSIBILITY_WIDGET_SCRIPT_SOURCES = ["cdn.elementor.com/a11y/widget.js"];
@@ -2111,18 +1657,18 @@ function hasAccessibilityWidgetScript(html) {
2111
1657
  // src/audits/accessibility-widget.ts
2112
1658
  var audit3 = {
2113
1659
  id: "audits/accessibility-widget",
2114
- title: (0, import_i18n27.__)("Add an accessibility widget", "elementor"),
2115
- description: (0, import_i18n27.__)("Make your site more inclusive by adding an accessibility widget.", "elementor"),
2116
- fixHint: (0, import_i18n27.__)("Activate Ally\u2019s accessibility widget to give visitors on-page accessibility tools.", "elementor"),
1660
+ title: (0, import_i18n20.__)("Add an accessibility widget", "elementor"),
1661
+ description: (0, import_i18n20.__)("Make your site more inclusive by adding an accessibility widget.", "elementor"),
1662
+ fixHint: (0, import_i18n20.__)("Activate Ally\u2019s accessibility widget to give visitors on-page accessibility tools.", "elementor"),
2117
1663
  categories: ["accessibility"],
2118
1664
  severity: "info",
2119
1665
  weight: 1,
2120
1666
  evaluate: (ctx) => {
2121
1667
  if (!ctx.pageContext.frontend_url) {
2122
- return { status: "skipped", reason: (0, import_i18n27.__)("Page is not published.", "elementor") };
1668
+ return { status: "skipped", reason: (0, import_i18n20.__)("Page is not published.", "elementor") };
2123
1669
  }
2124
1670
  if (!ctx.renderedHtml) {
2125
- return { status: "skipped", reason: (0, import_i18n27.__)("Could not fetch the published page.", "elementor") };
1671
+ return { status: "skipped", reason: (0, import_i18n20.__)("Could not fetch the published page.", "elementor") };
2126
1672
  }
2127
1673
  if (hasAccessibilityWidgetScript(ctx.renderedHtml)) {
2128
1674
  return { status: "pass" };
@@ -2133,9 +1679,9 @@ var audit3 = {
2133
1679
  violations: [
2134
1680
  {
2135
1681
  auditId: audit3.id,
2136
- label: (0, import_i18n27.__)("No accessibility widget is active on this site.", "elementor"),
1682
+ label: (0, import_i18n20.__)("No accessibility widget is active on this site.", "elementor"),
2137
1683
  externalUrl: isReady ? ctx.pageContext.ally_widget_settings_url : ctx.pageContext.ally_plugin_url,
2138
- ctaLabel: (0, import_i18n27.__)("Activate", "elementor")
1684
+ ctaLabel: (0, import_i18n20.__)("Activate", "elementor")
2139
1685
  }
2140
1686
  ]
2141
1687
  };
@@ -2143,15 +1689,15 @@ var audit3 = {
2143
1689
  };
2144
1690
 
2145
1691
  // src/audits/cookie-policy.ts
2146
- var import_i18n28 = require("@wordpress/i18n");
1692
+ var import_i18n21 = require("@wordpress/i18n");
2147
1693
  var audit4 = {
2148
1694
  id: "audits/cookie-policy",
2149
- title: (0, import_i18n28.__)("Cookie policy", "elementor"),
2150
- description: (0, import_i18n28.__)(
1695
+ title: (0, import_i18n21.__)("Cookie policy", "elementor"),
1696
+ description: (0, import_i18n21.__)(
2151
1697
  "A cookie policy is required by privacy regulations such as GDPR (EU) or CCPA (US) to inform visitors about tracking and data collection.",
2152
1698
  "elementor"
2153
1699
  ),
2154
- fixHint: (0, import_i18n28.__)("Install the Cookiez plugin to add a cookie policy to your website.", "elementor"),
1700
+ fixHint: (0, import_i18n21.__)("Install the Cookiez plugin to add a cookie policy to your website.", "elementor"),
2155
1701
  categories: ["compliance"],
2156
1702
  severity: "info",
2157
1703
  weight: 1,
@@ -2164,9 +1710,9 @@ var audit4 = {
2164
1710
  violations: [
2165
1711
  {
2166
1712
  auditId: audit4.id,
2167
- label: (0, import_i18n28.__)("Cookiez plugin is not installed or active.", "elementor"),
1713
+ label: (0, import_i18n21.__)("Cookiez plugin is not installed or active.", "elementor"),
2168
1714
  externalUrl: ctx.pageContext.cookiez_plugin_url,
2169
- ctaLabel: (0, import_i18n28.__)("Set up cookie consent", "elementor")
1715
+ ctaLabel: (0, import_i18n21.__)("Set up cookie consent", "elementor")
2170
1716
  }
2171
1717
  ]
2172
1718
  };
@@ -2175,7 +1721,7 @@ var audit4 = {
2175
1721
 
2176
1722
  // src/audits/deep-nesting.ts
2177
1723
  var import_editor_elements7 = require("@elementor/editor-elements");
2178
- var import_i18n29 = require("@wordpress/i18n");
1724
+ var import_i18n22 = require("@wordpress/i18n");
2179
1725
  var MAX_NESTING_DEPTH = 6;
2180
1726
  function isNestingElement(node, widgetsCache) {
2181
1727
  if (node.elType === "container") {
@@ -2185,18 +1731,18 @@ function isNestingElement(node, widgetsCache) {
2185
1731
  }
2186
1732
  var audit5 = {
2187
1733
  id: "audits/deep-nesting",
2188
- title: (0, import_i18n29.__)("Deep container nesting", "elementor"),
2189
- description: (0, import_i18n29.__)(
1734
+ title: (0, import_i18n22.__)("Deep container nesting", "elementor"),
1735
+ description: (0, import_i18n22.__)(
2190
1736
  "Container nesting exceeds the recommended depth. Deep DOM trees hurt rendering performance and readability.",
2191
1737
  "elementor"
2192
1738
  ),
2193
- fixHint: (0, import_i18n29.__)("Flatten the layout by removing unnecessary wrapper containers.", "elementor"),
1739
+ fixHint: (0, import_i18n22.__)("Flatten the layout by removing unnecessary wrapper containers.", "elementor"),
2194
1740
  categories: ["performance", "best-practices"],
2195
1741
  severity: "warning",
2196
1742
  weight: 5,
2197
1743
  evaluate: (ctx) => {
2198
1744
  if (ctx.elements.tree.length === 0) {
2199
- return { status: "skipped", reason: (0, import_i18n29.__)("No elements", "elementor") };
1745
+ return { status: "skipped", reason: (0, import_i18n22.__)("No elements", "elementor") };
2200
1746
  }
2201
1747
  const widgetsCache = (0, import_editor_elements7.getWidgetsCache)();
2202
1748
  const violations = [];
@@ -2210,7 +1756,7 @@ var audit5 = {
2210
1756
  auditId: audit5.id,
2211
1757
  elementId: node.id,
2212
1758
  targetHint: "element-settings",
2213
- label: (0, import_i18n29.__)("Container nesting is too deep.", "elementor")
1759
+ label: (0, import_i18n22.__)("Container nesting is too deep.", "elementor")
2214
1760
  });
2215
1761
  }
2216
1762
  });
@@ -2219,15 +1765,15 @@ var audit5 = {
2219
1765
  };
2220
1766
 
2221
1767
  // src/audits/default-design-system.ts
2222
- var import_i18n30 = require("@wordpress/i18n");
1768
+ var import_i18n23 = require("@wordpress/i18n");
2223
1769
  var audit6 = {
2224
1770
  id: "audits/default-design-system",
2225
- title: (0, import_i18n30.__)("Default website kit", "elementor"),
2226
- description: (0, import_i18n30.__)(
1771
+ title: (0, import_i18n23.__)("Default website kit", "elementor"),
1772
+ description: (0, import_i18n23.__)(
2227
1773
  "Your website is using the default design system colors and fonts. Custom branding makes the website feel uniquely yours.",
2228
1774
  "elementor"
2229
1775
  ),
2230
- fixHint: (0, import_i18n30.__)("Open Site Settings and customize your kit (colors, fonts, layout).", "elementor"),
1776
+ fixHint: (0, import_i18n23.__)("Open Site Settings and customize your kit (colors, fonts, layout).", "elementor"),
2231
1777
  categories: ["best-practices"],
2232
1778
  severity: "info",
2233
1779
  weight: 1,
@@ -2240,7 +1786,7 @@ var audit6 = {
2240
1786
  violations: [
2241
1787
  {
2242
1788
  auditId: audit6.id,
2243
- label: (0, import_i18n30.__)("Kit appears unchanged from default.", "elementor"),
1789
+ label: (0, import_i18n23.__)("Kit appears unchanged from default.", "elementor"),
2244
1790
  targetHint: "site-settings"
2245
1791
  }
2246
1792
  ]
@@ -2250,16 +1796,16 @@ var audit6 = {
2250
1796
 
2251
1797
  // src/audits/deprecated-widgets.ts
2252
1798
  var import_editor_elements8 = require("@elementor/editor-elements");
2253
- var import_i18n31 = require("@wordpress/i18n");
1799
+ var import_i18n24 = require("@wordpress/i18n");
2254
1800
  var DEPRECATION_CONTROL_NAME = "deprecation_message";
2255
1801
  var audit7 = {
2256
1802
  id: "audits/deprecated-widgets",
2257
- title: (0, import_i18n31.__)("Deprecated widgets", "elementor"),
2258
- description: (0, import_i18n31.__)(
1803
+ title: (0, import_i18n24.__)("Deprecated widgets", "elementor"),
1804
+ description: (0, import_i18n24.__)(
2259
1805
  "Deprecated widgets should not be used. For better capabilities use the recommended replacement.",
2260
1806
  "elementor"
2261
1807
  ),
2262
- fixHint: (0, import_i18n31.__)("Replace each deprecated widget with the recommended new widget shown in its panel.", "elementor"),
1808
+ fixHint: (0, import_i18n24.__)("Replace each deprecated widget with the recommended new widget shown in its panel.", "elementor"),
2263
1809
  categories: ["best-practices", "performance"],
2264
1810
  severity: "warning",
2265
1811
  weight: 7,
@@ -2286,7 +1832,7 @@ var audit7 = {
2286
1832
  auditId: audit7.id,
2287
1833
  elementId: node.id,
2288
1834
  targetHint: "element-settings",
2289
- label: (0, import_i18n31.__)("Using deprecated widget.", "elementor")
1835
+ label: (0, import_i18n24.__)("Using deprecated widget.", "elementor")
2290
1836
  });
2291
1837
  });
2292
1838
  return violations.length === 0 ? { status: "pass" } : { status: "fail", violations };
@@ -2294,7 +1840,7 @@ var audit7 = {
2294
1840
  };
2295
1841
 
2296
1842
  // src/audits/google-consent-mode.ts
2297
- var import_i18n32 = require("@wordpress/i18n");
1843
+ var import_i18n25 = require("@wordpress/i18n");
2298
1844
 
2299
1845
  // src/utils/scan-consent-signals.ts
2300
1846
  var GOOGLE_TRACKING_PATTERNS = [
@@ -2317,12 +1863,12 @@ function hasConsentDefaultCall(html) {
2317
1863
  // src/audits/google-consent-mode.ts
2318
1864
  var audit8 = {
2319
1865
  id: "audits/google-consent-mode",
2320
- title: (0, import_i18n32.__)("Google Consent Mode", "elementor"),
2321
- description: (0, import_i18n32.__)(
1866
+ title: (0, import_i18n25.__)("Google Consent Mode", "elementor"),
1867
+ description: (0, import_i18n25.__)(
2322
1868
  "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.",
2323
1869
  "elementor"
2324
1870
  ),
2325
- fixHint: (0, import_i18n32.__)(
1871
+ fixHint: (0, import_i18n25.__)(
2326
1872
  "Turn on Google Consent Mode in your cookie consent plugin so Google tags respect visitor consent choices.",
2327
1873
  "elementor"
2328
1874
  ),
@@ -2331,18 +1877,18 @@ var audit8 = {
2331
1877
  weight: 1,
2332
1878
  evaluate: (ctx) => {
2333
1879
  if (!ctx.pageContext.frontend_url) {
2334
- return { status: "skipped", reason: (0, import_i18n32.__)("Page is not published.", "elementor") };
1880
+ return { status: "skipped", reason: (0, import_i18n25.__)("Page is not published.", "elementor") };
2335
1881
  }
2336
1882
  if (!ctx.renderedHtml) {
2337
- return { status: "skipped", reason: (0, import_i18n32.__)("Could not fetch the published page.", "elementor") };
1883
+ return { status: "skipped", reason: (0, import_i18n25.__)("Could not fetch the published page.", "elementor") };
2338
1884
  }
2339
1885
  if (!hasGoogleTracking(ctx.renderedHtml)) {
2340
- return { status: "skipped", reason: (0, import_i18n32.__)("No Google tracking product detected.", "elementor") };
1886
+ return { status: "skipped", reason: (0, import_i18n25.__)("No Google tracking product detected.", "elementor") };
2341
1887
  }
2342
1888
  if (hasConsentDefaultCall(ctx.renderedHtml)) {
2343
1889
  return { status: "pass" };
2344
1890
  }
2345
- const label = (0, import_i18n32.__)("No Google Consent Mode signal was found on the page.", "elementor");
1891
+ const label = (0, import_i18n25.__)("No Google Consent Mode signal was found on the page.", "elementor");
2346
1892
  const isCookiezReady = ctx.pageContext.cookiez_plugin_installed && ctx.pageContext.cookiez_plugin_active;
2347
1893
  if (isCookiezReady) {
2348
1894
  return {
@@ -2351,7 +1897,7 @@ var audit8 = {
2351
1897
  {
2352
1898
  auditId: audit8.id,
2353
1899
  label,
2354
- ctaLabel: (0, import_i18n32.__)("Enable", "elementor"),
1900
+ ctaLabel: (0, import_i18n25.__)("Enable", "elementor"),
2355
1901
  externalUrl: ctx.pageContext.cookiez_consent_mode_settings_url
2356
1902
  }
2357
1903
  ]
@@ -2371,7 +1917,7 @@ var audit8 = {
2371
1917
  };
2372
1918
 
2373
1919
  // src/audits/heading-structure.ts
2374
- var import_i18n33 = require("@wordpress/i18n");
1920
+ var import_i18n26 = require("@wordpress/i18n");
2375
1921
  var HEADING_LEVELS = ["h1", "h2", "h3", "h4", "h5", "h6"];
2376
1922
  var HEADING_CONTROLS_REGISTRY = {
2377
1923
  // Core
@@ -2549,27 +2095,27 @@ function extractPageHeadings(tree) {
2549
2095
  }
2550
2096
  var audit9 = {
2551
2097
  id: "audits/heading-structure",
2552
- title: (0, import_i18n33.__)("Heading structure", "elementor"),
2553
- description: (0, import_i18n33.__)("Pages should have exactly one H1 and a non-skipping heading order.", "elementor"),
2554
- fixHint: (0, import_i18n33.__)("Ensure your page has one H1 and that heading levels do not skip (no H2 \u2192 H4).", "elementor"),
2098
+ title: (0, import_i18n26.__)("Heading structure", "elementor"),
2099
+ description: (0, import_i18n26.__)("Pages should have exactly one H1 and a non-skipping heading order.", "elementor"),
2100
+ fixHint: (0, import_i18n26.__)("Ensure your page has one H1 and that heading levels do not skip (no H2 \u2192 H4).", "elementor"),
2555
2101
  categories: ["seo", "accessibility"],
2556
2102
  severity: "error",
2557
2103
  weight: 10,
2558
2104
  evaluate: (ctx) => {
2559
2105
  if (ctx.elements.tree.length === 0) {
2560
- return { status: "skipped", reason: (0, import_i18n33.__)("No elements", "elementor") };
2106
+ return { status: "skipped", reason: (0, import_i18n26.__)("No elements", "elementor") };
2561
2107
  }
2562
2108
  const headings = extractPageHeadings(ctx.elements.tree);
2563
2109
  const violations = [];
2564
2110
  if (headings.length === 0) {
2565
2111
  violations.push({
2566
2112
  auditId: audit9.id,
2567
- label: (0, import_i18n33.__)("No headings found on the page.", "elementor")
2113
+ label: (0, import_i18n26.__)("No headings found on the page.", "elementor")
2568
2114
  });
2569
2115
  } else {
2570
2116
  const h1Count = headings.filter((h) => h.level === 1).length;
2571
2117
  if (h1Count === 0) {
2572
- violations.push({ auditId: audit9.id, label: (0, import_i18n33.__)("No H1 on the page.", "elementor") });
2118
+ violations.push({ auditId: audit9.id, label: (0, import_i18n26.__)("No H1 on the page.", "elementor") });
2573
2119
  }
2574
2120
  if (h1Count > 1) {
2575
2121
  headings.filter((h) => h.level === 1).slice(1).forEach(
@@ -2577,7 +2123,7 @@ var audit9 = {
2577
2123
  auditId: audit9.id,
2578
2124
  elementId: h.elementId,
2579
2125
  targetHint: "element-settings",
2580
- label: (0, import_i18n33.__)("More than one H1 on the page.", "elementor")
2126
+ label: (0, import_i18n26.__)("More than one H1 on the page.", "elementor")
2581
2127
  })
2582
2128
  );
2583
2129
  }
@@ -2587,7 +2133,7 @@ var audit9 = {
2587
2133
  auditId: audit9.id,
2588
2134
  elementId: headings[i].elementId,
2589
2135
  targetHint: "element-settings",
2590
- label: (0, import_i18n33.__)("Heading level skipped.", "elementor")
2136
+ label: (0, import_i18n26.__)("Heading level skipped.", "elementor")
2591
2137
  });
2592
2138
  }
2593
2139
  }
@@ -2597,24 +2143,24 @@ var audit9 = {
2597
2143
  };
2598
2144
 
2599
2145
  // src/audits/hidden-elements.ts
2600
- var import_i18n34 = require("@wordpress/i18n");
2146
+ var import_i18n27 = require("@wordpress/i18n");
2601
2147
  function isHiddenOnAllDevices(settings) {
2602
2148
  return Boolean(settings.hide_desktop) && Boolean(settings.hide_tablet) && Boolean(settings.hide_mobile);
2603
2149
  }
2604
2150
  var audit10 = {
2605
2151
  id: "audits/hidden-elements",
2606
- title: (0, import_i18n34.__)("Hidden elements", "elementor"),
2607
- description: (0, import_i18n34.__)(
2152
+ title: (0, import_i18n27.__)("Hidden elements", "elementor"),
2153
+ description: (0, import_i18n27.__)(
2608
2154
  "Elements hidden on all devices simultaneously are effectively dead code in the page tree.",
2609
2155
  "elementor"
2610
2156
  ),
2611
- fixHint: (0, import_i18n34.__)("Remove the element or make it visible on at least one device breakpoint.", "elementor"),
2157
+ fixHint: (0, import_i18n27.__)("Remove the element or make it visible on at least one device breakpoint.", "elementor"),
2612
2158
  categories: ["best-practices", "performance"],
2613
2159
  severity: "info",
2614
2160
  weight: 3,
2615
2161
  evaluate: (ctx) => {
2616
2162
  if (ctx.elements.tree.length === 0) {
2617
- return { status: "skipped", reason: (0, import_i18n34.__)("No elements", "elementor") };
2163
+ return { status: "skipped", reason: (0, import_i18n27.__)("No elements", "elementor") };
2618
2164
  }
2619
2165
  const violations = [];
2620
2166
  walkElements(ctx.elements.tree, (node) => {
@@ -2623,7 +2169,7 @@ var audit10 = {
2623
2169
  auditId: audit10.id,
2624
2170
  elementId: node.id,
2625
2171
  targetHint: "element-settings",
2626
- label: (0, import_i18n34.__)("Element is hidden on all devices.", "elementor")
2172
+ label: (0, import_i18n27.__)("Element is hidden on all devices.", "elementor")
2627
2173
  });
2628
2174
  }
2629
2175
  });
@@ -2632,7 +2178,7 @@ var audit10 = {
2632
2178
  };
2633
2179
 
2634
2180
  // src/audits/images-alt-text.ts
2635
- var import_i18n35 = require("@wordpress/i18n");
2181
+ var import_i18n28 = require("@wordpress/i18n");
2636
2182
 
2637
2183
  // src/utils/image-alt.ts
2638
2184
  function hasMeaningfulAlt(media, pageContext) {
@@ -2653,15 +2199,15 @@ function isImageSourcePresent(media) {
2653
2199
  // src/audits/images-alt-text.ts
2654
2200
  var audit11 = {
2655
2201
  id: "audits/images-alt-text",
2656
- title: (0, import_i18n35.__)("Images alt text", "elementor"),
2657
- description: (0, import_i18n35.__)("Every image needs a meaningful alt attribute for screen readers and image-search.", "elementor"),
2658
- fixHint: (0, import_i18n35.__)("Open the image's settings and add an Alt Text describing the image.", "elementor"),
2202
+ title: (0, import_i18n28.__)("Images alt text", "elementor"),
2203
+ description: (0, import_i18n28.__)("Every image needs a meaningful alt attribute for screen readers and image-search.", "elementor"),
2204
+ fixHint: (0, import_i18n28.__)("Open the image's settings and add an Alt Text describing the image.", "elementor"),
2659
2205
  categories: ["seo", "accessibility"],
2660
2206
  severity: "error",
2661
2207
  weight: 10,
2662
2208
  evaluate: (ctx) => {
2663
2209
  if (!hasPageImages(ctx.elements.tree)) {
2664
- return { status: "skipped", reason: (0, import_i18n35.__)("No images", "elementor") };
2210
+ return { status: "skipped", reason: (0, import_i18n28.__)("No images", "elementor") };
2665
2211
  }
2666
2212
  const violations = [];
2667
2213
  const failedWidgetIds = /* @__PURE__ */ new Set();
@@ -2677,9 +2223,9 @@ var audit11 = {
2677
2223
  auditId: audit11.id,
2678
2224
  elementId: node.id,
2679
2225
  targetHint: "element-settings",
2680
- label: (0, import_i18n35.__)("Image is missing alt text.", "elementor"),
2226
+ label: (0, import_i18n28.__)("Image is missing alt text.", "elementor"),
2681
2227
  externalUrl: ctx.pageContext.ally_plugin_url,
2682
- ctaLabel: (0, import_i18n35.__)("Fix with Ally", "elementor")
2228
+ ctaLabel: (0, import_i18n28.__)("Fix with Ally", "elementor")
2683
2229
  });
2684
2230
  }
2685
2231
  });
@@ -2688,13 +2234,13 @@ var audit11 = {
2688
2234
  };
2689
2235
 
2690
2236
  // src/audits/images-inefficient-format.ts
2691
- var import_i18n36 = require("@wordpress/i18n");
2237
+ var import_i18n29 = require("@wordpress/i18n");
2692
2238
  var LEGACY_RASTER_MIME_TYPES = /* @__PURE__ */ new Set(["image/jpeg", "image/png", "image/gif", "image/bmp", "image/tiff"]);
2693
2239
  var audit12 = {
2694
2240
  id: "audits/images-inefficient-format",
2695
- title: (0, import_i18n36.__)("Inefficient image format", "elementor"),
2696
- description: (0, import_i18n36.__)("Image isn't served in a modern, efficient format like WebP or AVIF.", "elementor"),
2697
- fixHint: (0, import_i18n36.__)("Convert the image to a modern format like WebP or AVIF, or enable image optimization.", "elementor"),
2241
+ title: (0, import_i18n29.__)("Inefficient image format", "elementor"),
2242
+ description: (0, import_i18n29.__)("Image isn't served in a modern, efficient format like WebP or AVIF.", "elementor"),
2243
+ fixHint: (0, import_i18n29.__)("Convert the image to a modern format like WebP or AVIF, or enable image optimization.", "elementor"),
2698
2244
  categories: ["performance"],
2699
2245
  severity: "info",
2700
2246
  weight: 1,
@@ -2722,29 +2268,29 @@ var audit12 = {
2722
2268
  walkAtomicImageSources(ctx.elements.tree, ({ node, media }) => evaluateSource(node, media));
2723
2269
  walkAtomicBackgroundImageSources(ctx.elements.tree, ({ node, media }) => evaluateSource(node, media));
2724
2270
  if (!hasAnyImage) {
2725
- return { status: "skipped", reason: (0, import_i18n36.__)("No images", "elementor") };
2271
+ return { status: "skipped", reason: (0, import_i18n29.__)("No images", "elementor") };
2726
2272
  }
2727
2273
  const violations = Array.from(offendingElementIds).map((elementId) => ({
2728
2274
  auditId: audit12.id,
2729
2275
  elementId,
2730
2276
  targetHint: "element-settings",
2731
- label: (0, import_i18n36.__)("Image isn't served in a modern format like WebP or AVIF.", "elementor"),
2277
+ label: (0, import_i18n29.__)("Image isn't served in a modern format like WebP or AVIF.", "elementor"),
2732
2278
  externalUrl: ctx.pageContext.image_optimization_plugin_url,
2733
- ctaLabel: (0, import_i18n36.__)("Optimize all", "elementor")
2279
+ ctaLabel: (0, import_i18n29.__)("Optimize all", "elementor")
2734
2280
  }));
2735
2281
  return violations.length === 0 ? { status: "pass" } : { status: "fail", violations, metadata: { inefficientImageFormatCount } };
2736
2282
  }
2737
2283
  };
2738
2284
 
2739
2285
  // src/audits/images-too-large.ts
2740
- var import_i18n37 = require("@wordpress/i18n");
2286
+ var import_i18n30 = require("@wordpress/i18n");
2741
2287
  var SIZE_THRESHOLD_BYTES = 500 * 1024;
2742
2288
  var BYTES_PER_KB = 1024;
2743
2289
  var audit13 = {
2744
2290
  id: "audits/images-too-large",
2745
- title: (0, import_i18n37.__)("Oversized images", "elementor"),
2746
- description: (0, import_i18n37.__)("Large image files slow down the page.", "elementor"),
2747
- fixHint: (0, import_i18n37.__)("Replace the image with a smaller version or enable image optimization.", "elementor"),
2291
+ title: (0, import_i18n30.__)("Oversized images", "elementor"),
2292
+ description: (0, import_i18n30.__)("Large image files slow down the page.", "elementor"),
2293
+ fixHint: (0, import_i18n30.__)("Replace the image with a smaller version or enable image optimization.", "elementor"),
2748
2294
  categories: ["performance"],
2749
2295
  severity: "warning",
2750
2296
  weight: 7,
@@ -2774,40 +2320,40 @@ var audit13 = {
2774
2320
  walkAtomicImageSources(ctx.elements.tree, ({ node, media }) => evaluateSource(node, media));
2775
2321
  walkAtomicBackgroundImageSources(ctx.elements.tree, ({ node, media }) => evaluateSource(node, media));
2776
2322
  if (!hasAnyImage) {
2777
- return { status: "skipped", reason: (0, import_i18n37.__)("No images", "elementor") };
2323
+ return { status: "skipped", reason: (0, import_i18n30.__)("No images", "elementor") };
2778
2324
  }
2779
2325
  const violations = Array.from(widgetMaxKb.entries()).map(([elementId, kb]) => ({
2780
2326
  auditId: audit13.id,
2781
2327
  elementId,
2782
2328
  targetHint: "element-settings",
2783
- label: (0, import_i18n37.sprintf)(
2329
+ label: (0, import_i18n30.sprintf)(
2784
2330
  /* translators: %d is the image file size in kilobytes. */
2785
- (0, import_i18n37.__)("Image is %d KB (over 500 KB).", "elementor"),
2331
+ (0, import_i18n30.__)("Image is %d KB (over 500 KB).", "elementor"),
2786
2332
  kb
2787
2333
  ),
2788
2334
  externalUrl: ctx.pageContext.image_optimization_plugin_url,
2789
- ctaLabel: (0, import_i18n37.__)("Optimize all", "elementor")
2335
+ ctaLabel: (0, import_i18n30.__)("Optimize all", "elementor")
2790
2336
  }));
2791
2337
  return violations.length === 0 ? { status: "pass" } : { status: "fail", violations, metadata: { oversizedImageCount } };
2792
2338
  }
2793
2339
  };
2794
2340
 
2795
2341
  // src/audits/nested-boxed-containers.ts
2796
- var import_i18n38 = require("@wordpress/i18n");
2342
+ var import_i18n31 = require("@wordpress/i18n");
2797
2343
  function isBoxed(settings) {
2798
2344
  return settings.content_width === "boxed";
2799
2345
  }
2800
2346
  var audit14 = {
2801
2347
  id: "audits/nested-boxed-containers",
2802
- title: (0, import_i18n38.__)("Boxed container nested inside a boxed parent", "elementor"),
2803
- description: (0, import_i18n38.__)("An inner container does not need to be boxed when its parent already is.", "elementor"),
2804
- fixHint: (0, import_i18n38.__)("Change the inner container's content width to Full Width.", "elementor"),
2348
+ title: (0, import_i18n31.__)("Boxed container nested inside a boxed parent", "elementor"),
2349
+ description: (0, import_i18n31.__)("An inner container does not need to be boxed when its parent already is.", "elementor"),
2350
+ fixHint: (0, import_i18n31.__)("Change the inner container's content width to Full Width.", "elementor"),
2805
2351
  categories: ["best-practices", "performance"],
2806
2352
  severity: "info",
2807
2353
  weight: 5,
2808
2354
  evaluate: (ctx) => {
2809
2355
  if (ctx.elements.tree.length === 0) {
2810
- return { status: "skipped", reason: (0, import_i18n38.__)("No elements", "elementor") };
2356
+ return { status: "skipped", reason: (0, import_i18n31.__)("No elements", "elementor") };
2811
2357
  }
2812
2358
  const violations = [];
2813
2359
  walkElements(ctx.elements.tree, (node, parents) => {
@@ -2820,7 +2366,7 @@ var audit14 = {
2820
2366
  auditId: audit14.id,
2821
2367
  elementId: node.id,
2822
2368
  targetHint: "element-settings",
2823
- label: (0, import_i18n38.__)("Nested boxed container.", "elementor")
2369
+ label: (0, import_i18n31.__)("Nested boxed container.", "elementor")
2824
2370
  });
2825
2371
  }
2826
2372
  });
@@ -2829,12 +2375,12 @@ var audit14 = {
2829
2375
  };
2830
2376
 
2831
2377
  // src/audits/page-excerpt.ts
2832
- var import_i18n39 = require("@wordpress/i18n");
2378
+ var import_i18n32 = require("@wordpress/i18n");
2833
2379
  var audit15 = {
2834
2380
  id: "audits/page-excerpt",
2835
- title: (0, import_i18n39.__)("Page excerpt", "elementor"),
2836
- description: (0, import_i18n39.__)("A descriptive excerpt helps search engines and previews summarize the page.", "elementor"),
2837
- fixHint: (0, import_i18n39.__)("Open Page Settings and write a short excerpt.", "elementor"),
2381
+ title: (0, import_i18n32.__)("Page excerpt", "elementor"),
2382
+ description: (0, import_i18n32.__)("A descriptive excerpt helps search engines and previews summarize the page.", "elementor"),
2383
+ fixHint: (0, import_i18n32.__)("Open Page Settings and write a short excerpt.", "elementor"),
2838
2384
  categories: ["seo"],
2839
2385
  severity: "warning",
2840
2386
  weight: 5,
@@ -2847,7 +2393,7 @@ var audit15 = {
2847
2393
  violations: [
2848
2394
  {
2849
2395
  auditId: audit15.id,
2850
- label: (0, import_i18n39.__)("Page has no excerpt.", "elementor"),
2396
+ label: (0, import_i18n32.__)("Page has no excerpt.", "elementor"),
2851
2397
  targetHint: "page-settings",
2852
2398
  angieFix: true
2853
2399
  }
@@ -2857,12 +2403,12 @@ var audit15 = {
2857
2403
  };
2858
2404
 
2859
2405
  // src/audits/page-featured-image.ts
2860
- var import_i18n40 = require("@wordpress/i18n");
2406
+ var import_i18n33 = require("@wordpress/i18n");
2861
2407
  var audit16 = {
2862
2408
  id: "audits/page-featured-image",
2863
- title: (0, import_i18n40.__)("Page featured image", "elementor"),
2864
- description: (0, import_i18n40.__)("Featured images are used by social shares and many themes for hero visuals.", "elementor"),
2865
- fixHint: (0, import_i18n40.__)("Open Page Settings and set a featured image.", "elementor"),
2409
+ title: (0, import_i18n33.__)("Page featured image", "elementor"),
2410
+ description: (0, import_i18n33.__)("Featured images are used by social shares and many themes for hero visuals.", "elementor"),
2411
+ fixHint: (0, import_i18n33.__)("Open Page Settings and set a featured image.", "elementor"),
2866
2412
  categories: ["seo"],
2867
2413
  severity: "info",
2868
2414
  weight: 5,
@@ -2875,7 +2421,7 @@ var audit16 = {
2875
2421
  violations: [
2876
2422
  {
2877
2423
  auditId: audit16.id,
2878
- label: (0, import_i18n40.__)("No featured image set.", "elementor"),
2424
+ label: (0, import_i18n33.__)("No featured image set.", "elementor"),
2879
2425
  targetHint: "page-settings"
2880
2426
  }
2881
2427
  ]
@@ -2884,13 +2430,13 @@ var audit16 = {
2884
2430
  };
2885
2431
 
2886
2432
  // src/audits/page-title.ts
2887
- var import_i18n41 = require("@wordpress/i18n");
2433
+ var import_i18n34 = require("@wordpress/i18n");
2888
2434
  var MAX_TITLE_LENGTH = 60;
2889
2435
  var audit17 = {
2890
2436
  id: "audits/page-title",
2891
- title: (0, import_i18n41.__)("Page title", "elementor"),
2892
- description: (0, import_i18n41.__)("Pages need a clear title for SEO and screen-reader navigation.", "elementor"),
2893
- fixHint: (0, import_i18n41.__)("Open Page Settings and add a title.", "elementor"),
2437
+ title: (0, import_i18n34.__)("Page title", "elementor"),
2438
+ description: (0, import_i18n34.__)("Pages need a clear title for SEO and screen-reader navigation.", "elementor"),
2439
+ fixHint: (0, import_i18n34.__)("Open Page Settings and add a title.", "elementor"),
2894
2440
  categories: ["seo"],
2895
2441
  severity: "error",
2896
2442
  weight: 10,
@@ -2902,10 +2448,10 @@ var audit17 = {
2902
2448
  violations: [
2903
2449
  {
2904
2450
  auditId: audit17.id,
2905
- label: (0, import_i18n41.__)("Page has no title.", "elementor"),
2451
+ label: (0, import_i18n34.__)("Page has no title.", "elementor"),
2906
2452
  targetHint: "page-settings",
2907
2453
  angieFix: true,
2908
- angiePrompt: (0, import_i18n41.__)(
2454
+ angiePrompt: (0, import_i18n34.__)(
2909
2455
  "Based on this page's contents, generate a title for this page.",
2910
2456
  "elementor"
2911
2457
  )
@@ -2919,7 +2465,7 @@ var audit17 = {
2919
2465
  violations: [
2920
2466
  {
2921
2467
  auditId: audit17.id,
2922
- label: (0, import_i18n41.__)("Page title is too long.", "elementor"),
2468
+ label: (0, import_i18n34.__)("Page title is too long.", "elementor"),
2923
2469
  targetHint: "page-settings",
2924
2470
  angieFix: true
2925
2471
  }
@@ -2931,7 +2477,7 @@ var audit17 = {
2931
2477
  };
2932
2478
 
2933
2479
  // src/audits/prefer-global-colors.ts
2934
- var import_i18n42 = require("@wordpress/i18n");
2480
+ var import_i18n35 = require("@wordpress/i18n");
2935
2481
 
2936
2482
  // src/utils/collect-hardcoded-colors.ts
2937
2483
  var RESERVED_SETTING_KEYS = /* @__PURE__ */ new Set(["__globals__", "__dynamic__"]);
@@ -2999,18 +2545,18 @@ function findMatchingGlobalByValue(value, globals) {
2999
2545
  // src/audits/prefer-global-colors.ts
3000
2546
  var audit18 = {
3001
2547
  id: "audits/prefer-global-colors",
3002
- title: (0, import_i18n42.__)("Prefer global colors", "elementor"),
3003
- description: (0, import_i18n42.__)("Global colors make the design consistent and easy to update site-wide.", "elementor"),
3004
- fixHint: (0, import_i18n42.__)("Replace the hard-coded value with the matching global color.", "elementor"),
2548
+ title: (0, import_i18n35.__)("Prefer global colors", "elementor"),
2549
+ description: (0, import_i18n35.__)("Global colors make the design consistent and easy to update site-wide.", "elementor"),
2550
+ fixHint: (0, import_i18n35.__)("Replace the hard-coded value with the matching global color.", "elementor"),
3005
2551
  categories: ["best-practices"],
3006
2552
  severity: "info",
3007
2553
  weight: 3,
3008
2554
  evaluate: (ctx) => {
3009
2555
  if (ctx.elements.tree.length === 0) {
3010
- return { status: "skipped", reason: (0, import_i18n42.__)("No elements", "elementor") };
2556
+ return { status: "skipped", reason: (0, import_i18n35.__)("No elements", "elementor") };
3011
2557
  }
3012
2558
  if (ctx.kit.globals.colors.length === 0) {
3013
- return { status: "skipped", reason: (0, import_i18n42.__)("No global colors", "elementor") };
2559
+ return { status: "skipped", reason: (0, import_i18n35.__)("No global colors", "elementor") };
3014
2560
  }
3015
2561
  const violations = [];
3016
2562
  walkElements(ctx.elements.tree, (node) => {
@@ -3024,9 +2570,9 @@ var audit18 = {
3024
2570
  elementId: node.id,
3025
2571
  targetHint: "element-settings",
3026
2572
  angieFix: true,
3027
- label: (0, import_i18n42.sprintf)(
2573
+ label: (0, import_i18n35.sprintf)(
3028
2574
  /* translators: 1: hard-coded color value, 2: global color title. */
3029
- (0, import_i18n42.__)('replace "%1$s" with "%2$s" global color', "elementor"),
2575
+ (0, import_i18n35.__)('replace "%1$s" with "%2$s" global color', "elementor"),
3030
2576
  value,
3031
2577
  global.title
3032
2578
  )
@@ -3038,7 +2584,7 @@ var audit18 = {
3038
2584
  };
3039
2585
 
3040
2586
  // src/audits/prefer-global-fonts.ts
3041
- var import_i18n43 = require("@wordpress/i18n");
2587
+ var import_i18n36 = require("@wordpress/i18n");
3042
2588
 
3043
2589
  // src/utils/collect-hardcoded-fonts.ts
3044
2590
  var RESERVED_SETTING_KEYS2 = /* @__PURE__ */ new Set(["__globals__", "__dynamic__"]);
@@ -3098,18 +2644,18 @@ function collectHardcodedFonts(settings, pathPrefix = "") {
3098
2644
  // src/audits/prefer-global-fonts.ts
3099
2645
  var audit19 = {
3100
2646
  id: "audits/prefer-global-fonts",
3101
- title: (0, import_i18n43.__)("Prefer global fonts", "elementor"),
3102
- description: (0, import_i18n43.__)("Global fonts make the design consistent and easy to update site-wide.", "elementor"),
3103
- fixHint: (0, import_i18n43.__)("Replace the hard-coded value with the matching global font.", "elementor"),
2647
+ title: (0, import_i18n36.__)("Prefer global fonts", "elementor"),
2648
+ description: (0, import_i18n36.__)("Global fonts make the design consistent and easy to update site-wide.", "elementor"),
2649
+ fixHint: (0, import_i18n36.__)("Replace the hard-coded value with the matching global font.", "elementor"),
3104
2650
  categories: ["best-practices", "performance"],
3105
2651
  severity: "info",
3106
2652
  weight: 3,
3107
2653
  evaluate: (ctx) => {
3108
2654
  if (ctx.elements.tree.length === 0) {
3109
- return { status: "skipped", reason: (0, import_i18n43.__)("No elements", "elementor") };
2655
+ return { status: "skipped", reason: (0, import_i18n36.__)("No elements", "elementor") };
3110
2656
  }
3111
2657
  if (ctx.kit.globals.fonts.length === 0) {
3112
- return { status: "skipped", reason: (0, import_i18n43.__)("No global fonts", "elementor") };
2658
+ return { status: "skipped", reason: (0, import_i18n36.__)("No global fonts", "elementor") };
3113
2659
  }
3114
2660
  const violations = [];
3115
2661
  walkElements(ctx.elements.tree, (node) => {
@@ -3122,9 +2668,9 @@ var audit19 = {
3122
2668
  auditId: audit19.id,
3123
2669
  elementId: node.id,
3124
2670
  targetHint: "element-settings",
3125
- label: (0, import_i18n43.sprintf)(
2671
+ label: (0, import_i18n36.sprintf)(
3126
2672
  /* translators: %s: global font title. */
3127
- (0, import_i18n43.__)('replace hardcoded typography with "%s" global font', "elementor"),
2673
+ (0, import_i18n36.__)('replace hardcoded typography with "%s" global font', "elementor"),
3128
2674
  global.title
3129
2675
  )
3130
2676
  });
@@ -3135,15 +2681,15 @@ var audit19 = {
3135
2681
  };
3136
2682
 
3137
2683
  // src/audits/privacy-policy.ts
3138
- var import_i18n44 = require("@wordpress/i18n");
2684
+ var import_i18n37 = require("@wordpress/i18n");
3139
2685
  var audit20 = {
3140
2686
  id: "audits/privacy-policy",
3141
- title: (0, import_i18n44.__)("Privacy policy", "elementor"),
3142
- description: (0, import_i18n44.__)(
2687
+ title: (0, import_i18n37.__)("Privacy policy", "elementor"),
2688
+ description: (0, import_i18n37.__)(
3143
2689
  "A privacy policy page is required by privacy regulations such as GDPR (EU) and CCPA (US).",
3144
2690
  "elementor"
3145
2691
  ),
3146
- fixHint: (0, import_i18n44.__)(
2692
+ fixHint: (0, import_i18n37.__)(
3147
2693
  "Go to Settings > Privacy in the WordPress admin and assign a published privacy policy page.",
3148
2694
  "elementor"
3149
2695
  ),
@@ -3159,9 +2705,9 @@ var audit20 = {
3159
2705
  violations: [
3160
2706
  {
3161
2707
  auditId: audit20.id,
3162
- label: (0, import_i18n44.__)("No privacy policy page is set.", "elementor"),
2708
+ label: (0, import_i18n37.__)("No privacy policy page is set.", "elementor"),
3163
2709
  externalUrl: ctx.pageContext.privacy_settings_url,
3164
- ctaLabel: (0, import_i18n44.__)("Create", "elementor")
2710
+ ctaLabel: (0, import_i18n37.__)("Create", "elementor")
3165
2711
  }
3166
2712
  ]
3167
2713
  };
@@ -3169,15 +2715,15 @@ var audit20 = {
3169
2715
  };
3170
2716
 
3171
2717
  // src/audits/robots-noindex.ts
3172
- var import_i18n45 = require("@wordpress/i18n");
2718
+ var import_i18n38 = require("@wordpress/i18n");
3173
2719
  var audit21 = {
3174
2720
  id: "audits/robots-noindex",
3175
- title: (0, import_i18n45.__)("Search engine visibility", "elementor"),
3176
- description: (0, import_i18n45.__)(
2721
+ title: (0, import_i18n38.__)("Search engine visibility", "elementor"),
2722
+ description: (0, import_i18n38.__)(
3177
2723
  "When search engine visibility is checked in WordPress Settings -> Reading -> Search Engine Visibility, search engines are discouraged from indexing the website.",
3178
2724
  "elementor"
3179
2725
  ),
3180
- fixHint: (0, import_i18n45.__)(
2726
+ fixHint: (0, import_i18n38.__)(
3181
2727
  'Go to Settings \u2192 Reading in the WordPress admin and uncheck "Discourage search engines from indexing this site" when the website should be indexed.',
3182
2728
  "elementor"
3183
2729
  ),
@@ -3193,7 +2739,7 @@ var audit21 = {
3193
2739
  violations: [
3194
2740
  {
3195
2741
  auditId: audit21.id,
3196
- label: (0, import_i18n45.__)("Search engines are discouraged from indexing this website.", "elementor"),
2742
+ label: (0, import_i18n38.__)("Search engines are discouraged from indexing this website.", "elementor"),
3197
2743
  externalUrl: ctx.pageContext.reading_settings_url
3198
2744
  }
3199
2745
  ]
@@ -3202,15 +2748,15 @@ var audit21 = {
3202
2748
  };
3203
2749
 
3204
2750
  // src/audits/scan-for-cookies.ts
3205
- var import_i18n46 = require("@wordpress/i18n");
2751
+ var import_i18n39 = require("@wordpress/i18n");
3206
2752
  var audit22 = {
3207
2753
  id: "audits/scan-for-cookies",
3208
- title: (0, import_i18n46.__)("Scan for cookies", "elementor"),
3209
- description: (0, import_i18n46.__)(
2754
+ title: (0, import_i18n39.__)("Scan for cookies", "elementor"),
2755
+ description: (0, import_i18n39.__)(
3210
2756
  "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.",
3211
2757
  "elementor"
3212
2758
  ),
3213
- fixHint: (0, import_i18n46.__)("Run a Cookiez scan on this page to see which cookies need disclosure.", "elementor"),
2759
+ fixHint: (0, import_i18n39.__)("Run a Cookiez scan on this page to see which cookies need disclosure.", "elementor"),
3214
2760
  categories: ["compliance"],
3215
2761
  severity: "info",
3216
2762
  weight: 0,
@@ -3221,7 +2767,7 @@ var audit22 = {
3221
2767
  violations: [
3222
2768
  {
3223
2769
  auditId: audit22.id,
3224
- label: (0, import_i18n46.__)("This page has not been scanned for cookies yet.", "elementor"),
2770
+ label: (0, import_i18n39.__)("This page has not been scanned for cookies yet.", "elementor"),
3225
2771
  externalUrl: isReady ? ctx.pageContext.cookiez_scan_url : ctx.pageContext.cookiez_plugin_action_url
3226
2772
  }
3227
2773
  ]
@@ -3230,21 +2776,21 @@ var audit22 = {
3230
2776
  };
3231
2777
 
3232
2778
  // src/audits/sections-and-columns.ts
3233
- var import_i18n47 = require("@wordpress/i18n");
2779
+ var import_i18n40 = require("@wordpress/i18n");
3234
2780
  var audit23 = {
3235
2781
  id: "audits/sections-and-columns",
3236
- title: (0, import_i18n47.__)("Sections and columns", "elementor"),
3237
- description: (0, import_i18n47.__)(
2782
+ title: (0, import_i18n40.__)("Sections and columns", "elementor"),
2783
+ description: (0, import_i18n40.__)(
3238
2784
  "Sections and columns are legacy elements. Containers render fewer DOM nodes and are more flexible.",
3239
2785
  "elementor"
3240
2786
  ),
3241
- fixHint: (0, import_i18n47.__)("Use the Container Converter to replace each section/column with a container.", "elementor"),
2787
+ fixHint: (0, import_i18n40.__)("Use the Container Converter to replace each section/column with a container.", "elementor"),
3242
2788
  categories: ["best-practices", "performance"],
3243
2789
  severity: "warning",
3244
2790
  weight: 7,
3245
2791
  evaluate: (ctx) => {
3246
2792
  if (ctx.elements.tree.length === 0) {
3247
- return { status: "skipped", reason: (0, import_i18n47.__)("No elements", "elementor") };
2793
+ return { status: "skipped", reason: (0, import_i18n40.__)("No elements", "elementor") };
3248
2794
  }
3249
2795
  const violations = [];
3250
2796
  walkElements(ctx.elements.tree, (node) => {
@@ -3252,7 +2798,7 @@ var audit23 = {
3252
2798
  violations.push({
3253
2799
  auditId: audit23.id,
3254
2800
  elementId: node.id,
3255
- label: node.elType === "section" ? (0, import_i18n47.__)("Section element", "elementor") : (0, import_i18n47.__)("Column element", "elementor")
2801
+ label: node.elType === "section" ? (0, import_i18n40.__)("Section element", "elementor") : (0, import_i18n40.__)("Column element", "elementor")
3256
2802
  });
3257
2803
  }
3258
2804
  });
@@ -3261,15 +2807,15 @@ var audit23 = {
3261
2807
  };
3262
2808
 
3263
2809
  // src/audits/site-identity.ts
3264
- var import_i18n48 = require("@wordpress/i18n");
2810
+ var import_i18n41 = require("@wordpress/i18n");
3265
2811
  var audit24 = {
3266
2812
  id: "audits/site-identity",
3267
- title: (0, import_i18n48.__)("Site identity", "elementor"),
3268
- description: (0, import_i18n48.__)(
2813
+ title: (0, import_i18n41.__)("Site identity", "elementor"),
2814
+ description: (0, import_i18n41.__)(
3269
2815
  "Site name, description, logo, and favicon establish your brand and appear in search results and browser tabs.",
3270
2816
  "elementor"
3271
2817
  ),
3272
- fixHint: (0, import_i18n48.__)("Open Site Settings \u2192 Site Identity and complete all the missing fields.", "elementor"),
2818
+ fixHint: (0, import_i18n41.__)("Open Site Settings \u2192 Site Identity and complete all the missing fields.", "elementor"),
3273
2819
  categories: ["best-practices", "seo"],
3274
2820
  severity: "info",
3275
2821
  weight: 7,
@@ -3279,14 +2825,14 @@ var audit24 = {
3279
2825
  if (!identity.site_name_set) {
3280
2826
  violations.push({
3281
2827
  auditId: audit24.id,
3282
- label: (0, import_i18n48.__)("Site name is missing or still uses the default.", "elementor"),
2828
+ label: (0, import_i18n41.__)("Site name is missing or still uses the default.", "elementor"),
3283
2829
  targetHint: "site-identity-settings"
3284
2830
  });
3285
2831
  }
3286
2832
  if (!identity.site_description_set) {
3287
2833
  violations.push({
3288
2834
  auditId: audit24.id,
3289
- label: (0, import_i18n48.__)("Site description is missing or still uses the default.", "elementor"),
2835
+ label: (0, import_i18n41.__)("Site description is missing or still uses the default.", "elementor"),
3290
2836
  targetHint: "site-identity-settings",
3291
2837
  angieFix: true
3292
2838
  });
@@ -3294,14 +2840,14 @@ var audit24 = {
3294
2840
  if (!identity.site_logo_set) {
3295
2841
  violations.push({
3296
2842
  auditId: audit24.id,
3297
- label: (0, import_i18n48.__)("Site logo is not set.", "elementor"),
2843
+ label: (0, import_i18n41.__)("Site logo is not set.", "elementor"),
3298
2844
  targetHint: "site-identity-settings"
3299
2845
  });
3300
2846
  }
3301
2847
  if (!identity.site_favicon_set) {
3302
2848
  violations.push({
3303
2849
  auditId: audit24.id,
3304
- label: (0, import_i18n48.__)("Site favicon is not set.", "elementor"),
2850
+ label: (0, import_i18n41.__)("Site favicon is not set.", "elementor"),
3305
2851
  targetHint: "site-identity-settings"
3306
2852
  });
3307
2853
  }
@@ -3317,7 +2863,7 @@ var audit24 = {
3317
2863
 
3318
2864
  // src/audits/too-many-widgets.ts
3319
2865
  var import_editor_elements9 = require("@elementor/editor-elements");
3320
- var import_i18n49 = require("@wordpress/i18n");
2866
+ var import_i18n42 = require("@wordpress/i18n");
3321
2867
  var WIDGET_COUNT_THRESHOLD = 100;
3322
2868
  function isCountableWidget(node, widgetsCache) {
3323
2869
  if (node.elType === "widget") {
@@ -3327,15 +2873,15 @@ function isCountableWidget(node, widgetsCache) {
3327
2873
  }
3328
2874
  var audit25 = {
3329
2875
  id: "audits/too-many-widgets",
3330
- title: (0, import_i18n49.__)("Too many widgets", "elementor"),
3331
- description: (0, import_i18n49.__)("Excessive DOM size caused by too many widgets degrades rendering performance.", "elementor"),
3332
- fixHint: (0, import_i18n49.__)("Reduce the number of widgets on the page by removing or combining elements.", "elementor"),
2876
+ title: (0, import_i18n42.__)("Too many widgets", "elementor"),
2877
+ description: (0, import_i18n42.__)("Excessive DOM size caused by too many widgets degrades rendering performance.", "elementor"),
2878
+ fixHint: (0, import_i18n42.__)("Reduce the number of widgets on the page by removing or combining elements.", "elementor"),
3333
2879
  categories: ["best-practices", "performance"],
3334
2880
  severity: "warning",
3335
2881
  weight: 5,
3336
2882
  evaluate: (ctx) => {
3337
2883
  if (ctx.elements.tree.length === 0) {
3338
- return { status: "skipped", reason: (0, import_i18n49.__)("No elements", "elementor") };
2884
+ return { status: "skipped", reason: (0, import_i18n42.__)("No elements", "elementor") };
3339
2885
  }
3340
2886
  const widgetsCache = (0, import_editor_elements9.getWidgetsCache)();
3341
2887
  let widgetCount = 0;
@@ -3352,7 +2898,7 @@ var audit25 = {
3352
2898
  violations: [
3353
2899
  {
3354
2900
  auditId: audit25.id,
3355
- label: (0, import_i18n49.__)("Page has too many widgets.", "elementor")
2901
+ label: (0, import_i18n42.__)("Page has too many widgets.", "elementor")
3356
2902
  }
3357
2903
  ]
3358
2904
  };