why-hydration 0.1.5 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1356 @@
1
+ 'use strict';
2
+
3
+ var chunkQFHUKJ5K_cjs = require('./chunk-QFHUKJ5K.cjs');
4
+ var chunkDXPTZB3Z_cjs = require('./chunk-DXPTZB3Z.cjs');
5
+ var React = require('react');
6
+
7
+ function _interopNamespace(e) {
8
+ if (e && e.__esModule) return e;
9
+ var n = Object.create(null);
10
+ if (e) {
11
+ Object.keys(e).forEach(function (k) {
12
+ if (k !== 'default') {
13
+ var d = Object.getOwnPropertyDescriptor(e, k);
14
+ Object.defineProperty(n, k, d.get ? d : {
15
+ enumerable: true,
16
+ get: function () { return e[k]; }
17
+ });
18
+ }
19
+ });
20
+ }
21
+ n.default = e;
22
+ return Object.freeze(n);
23
+ }
24
+
25
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
26
+
27
+ // src/react/console.ts
28
+ function installConsoleInterceptor(onMessage) {
29
+ if (typeof console === "undefined") return () => {
30
+ };
31
+ const original = console.error;
32
+ const patched = (...args) => {
33
+ try {
34
+ const message = chunkQFHUKJ5K_cjs.formatConsoleArgs(args);
35
+ if (message && chunkQFHUKJ5K_cjs.isHydrationMessage(message)) {
36
+ onMessage(message, args);
37
+ }
38
+ } catch {
39
+ }
40
+ original.apply(console, args);
41
+ };
42
+ console.error = patched;
43
+ return () => {
44
+ if (console.error === patched) {
45
+ console.error = original;
46
+ }
47
+ };
48
+ }
49
+ var BADGE = "color:#f59e0b;font-weight:bold";
50
+ var DIM = "color:#9ca3af";
51
+ function createConsoleReporter() {
52
+ const sink = (report) => {
53
+ const title = `%c\u2B21 why-hydration%c ${report.cause.category} \u2014 ${report.node.path}`;
54
+ console.group(title, BADGE, DIM);
55
+ console.log("%cServer:%c", "color:#fb7185", "", report.server ?? "(none)");
56
+ console.log("%cClient:%c", "color:#4ade80", "", report.client ?? "(none)");
57
+ if (report.component) {
58
+ console.log("%cComponent:%c", DIM, "", `<${report.component}>`);
59
+ }
60
+ if (report.location?.file) {
61
+ const loc = report.location.line ? `${report.location.file}:${report.location.line}` : report.location.file;
62
+ console.log("%cSource:%c", DIM, "", loc);
63
+ }
64
+ console.log("%cWhy:%c", DIM, "", report.cause.explanation);
65
+ console.log("%cFix:%c", "color:#86efac", "", report.cause.suggestion);
66
+ if (report.cause.docsUrl) {
67
+ console.log("%cDocs:%c", DIM, "", report.cause.docsUrl);
68
+ }
69
+ if (report.componentStack) {
70
+ console.log("%cComponent stack:%c", DIM, "", report.componentStack);
71
+ }
72
+ console.groupEnd();
73
+ };
74
+ return sink;
75
+ }
76
+
77
+ // src/react/capture.ts
78
+ var MAX_CAPTURED = 50;
79
+ var captured = /* @__PURE__ */ new Set();
80
+ var listeners = /* @__PURE__ */ new Set();
81
+ var uninstall = null;
82
+ function startCapture() {
83
+ if (uninstall || typeof window === "undefined") return;
84
+ uninstall = installConsoleInterceptor((message) => {
85
+ if (captured.has(message) || captured.size >= MAX_CAPTURED) return;
86
+ captured.add(message);
87
+ for (const listener of [...listeners]) listener(message);
88
+ });
89
+ }
90
+ function subscribeCapture(listener) {
91
+ startCapture();
92
+ listeners.add(listener);
93
+ for (const message of [...captured]) listener(message);
94
+ return () => {
95
+ if (!listeners.delete(listener)) return;
96
+ if (listeners.size === 0 && uninstall) {
97
+ uninstall();
98
+ uninstall = null;
99
+ }
100
+ };
101
+ }
102
+
103
+ // src/react/locales/ar.ts
104
+ var AR_MESSAGES = {
105
+ "non-deterministic-value": {
106
+ explanation: "\u0639\u0631\u0636 \u0627\u0644\u062E\u0627\u062F\u0645 \u0648\u0627\u0644\u0639\u0645\u064A\u0644 \u0642\u064A\u0645\u062A\u064A\u0646 \u062A\u0628\u062F\u0648\u0627\u0646 \u0639\u0634\u0648\u0627\u0626\u064A\u062A\u064A\u0646 \u0648\u0645\u062E\u062A\u0644\u0641\u062A\u064A\u0646 (\u0645\u0639\u0631\u0651\u0641 \u0623\u0648 \u0631\u0645\u0632 \u0623\u0648 \u0646\u0627\u062A\u062C `Math.random()`). \u0623\u064A \u0634\u064A\u0621 \u063A\u064A\u0631 \u062D\u062A\u0645\u064A \u0623\u062B\u0646\u0627\u0621 \u0627\u0644\u0639\u0631\u0636 \u064A\u0646\u062A\u062C \u0642\u064A\u0645\u0629 \u0645\u062E\u062A\u0644\u0641\u0629 \u0639\u0644\u0649 \u0643\u0644 \u062C\u0627\u0646\u0628.",
107
+ suggestion: "\u0627\u0633\u062A\u062E\u062F\u0645 `useId()` \u0645\u0646 React \u0644\u0644\u0645\u0639\u0631\u0651\u0641\u0627\u062A. \u0623\u0645\u0627 \u0627\u0644\u0642\u064A\u0645 \u0627\u0644\u0639\u0634\u0648\u0627\u0626\u064A\u0629 \u0641\u0648\u0644\u0651\u062F\u0647\u0627 \u0628\u0639\u062F \u0627\u0644\u062A\u0631\u0643\u064A\u0628 (\u062F\u0627\u062E\u0644 `useEffect`) \u0623\u0648 \u0645\u0631\u0651\u0631\u0647\u0627 \u0645\u0646 \u0627\u0644\u062E\u0627\u062F\u0645 \u0644\u064A\u062A\u0641\u0642 \u0627\u0644\u0637\u0631\u0641\u0627\u0646. \u0644\u0627 \u062A\u0633\u062A\u062F\u0639\u0650 `Math.random()` \u0623\u0648 `crypto` \u0623\u062B\u0646\u0627\u0621 \u0627\u0644\u0639\u0631\u0636 \u0623\u0628\u062F\u064B\u0627."
108
+ },
109
+ "date-time": {
110
+ explanation: "\u0627\u0644\u0642\u064A\u0645\u062A\u0627\u0646 \u062A\u0627\u0631\u064A\u062E\u0627\u0646 \u0623\u0648 \u0648\u0642\u062A\u0627\u0646 \u064A\u062E\u062A\u0644\u0641\u0627\u0646 \u0628\u064A\u0646 \u0639\u0631\u0636 \u0627\u0644\u062E\u0627\u062F\u0645 \u0648\u0639\u0631\u0636 \u0627\u0644\u0639\u0645\u064A\u0644 \u2014 \u062A\u063A\u064A\u0651\u0631\u062A \u0627\u0644\u0633\u0627\u0639\u0629 (\u0623\u0648 \u0627\u062E\u062A\u0644\u0641\u062A \u0627\u0644\u0645\u0646\u0637\u0642\u0629 \u0627\u0644\u0632\u0645\u0646\u064A\u0629) \u0628\u064A\u0646 \u0627\u0644\u0628\u064A\u0626\u062A\u064A\u0646.",
111
+ suggestion: "\u0627\u0639\u0631\u0636 \u0627\u0644\u0648\u0642\u062A \u0627\u0644\u062D\u0627\u0644\u064A \u0628\u0639\u062F \u0627\u0644\u062A\u0631\u0643\u064A\u0628\u060C \u0623\u0648 \u0645\u0631\u0651\u0631 \u0637\u0627\u0628\u0639\u064B\u0627 \u0632\u0645\u0646\u064A\u064B\u0627 \u0648\u0627\u062D\u062F\u064B\u0627 \u0645\u0646 \u0627\u0644\u062E\u0627\u062F\u0645 \u0648\u0646\u0633\u0651\u0642\u0647 \u0628\u0627\u0644\u0637\u0631\u064A\u0642\u0629 \u0646\u0641\u0633\u0647\u0627 \u0639\u0644\u0649 \u0627\u0644\u062C\u0627\u0646\u0628\u064A\u0646. \u0648\u062D\u062F\u0651\u062F \u0645\u0646\u0637\u0642\u0629 \u0632\u0645\u0646\u064A\u0629 \u0635\u0631\u064A\u062D\u0629 \u0639\u0646\u062F \u0627\u0644\u062A\u0646\u0633\u064A\u0642."
112
+ },
113
+ "locale-format.bidi": {
114
+ explanation: "\u0627\u0644\u0642\u064A\u0645\u062A\u0627\u0646 \u0644\u0627 \u062A\u062E\u062A\u0644\u0641\u0627\u0646 \u0625\u0644\u0627 \u0628\u0639\u0644\u0627\u0645\u0627\u062A \u062A\u062D\u0643\u0645 \u062B\u0646\u0627\u0626\u064A\u0629 \u0627\u0644\u0627\u062A\u062C\u0627\u0647 \u063A\u064A\u0631 \u0645\u0631\u0626\u064A\u0629 (`LRM` \u0648`RLM` \u0648\u0639\u0644\u0627\u0645\u0627\u062A \u0627\u0644\u0639\u0632\u0644). \u062A\u0636\u064A\u0641 `Intl` \u0647\u0630\u0647 \u0627\u0644\u0639\u0644\u0627\u0645\u0627\u062A \u062D\u0648\u0644 \u0627\u0644\u0623\u0631\u0642\u0627\u0645 \u0648\u0627\u0644\u062A\u0648\u0627\u0631\u064A\u062E \u0641\u064A \u0627\u0644\u0644\u063A\u0627\u062A \u0627\u0644\u062A\u064A \u062A\u064F\u0643\u062A\u0628 \u0645\u0646 \u0627\u0644\u064A\u0645\u064A\u0646 \u0625\u0644\u0649 \u0627\u0644\u064A\u0633\u0627\u0631\u060C \u0648\u062A\u064F\u0635\u062F\u0631 \u0625\u0635\u062F\u0627\u0631\u0627\u062A ICU \u0627\u0644\u0645\u062E\u062A\u0644\u0641\u0629 \u2014 Node \u0645\u0642\u0627\u0628\u0644 \u0627\u0644\u0645\u062A\u0635\u0641\u062D \u2014 \u0639\u0644\u0627\u0645\u0627\u062A \u0645\u062E\u062A\u0644\u0641\u0629 \u0644\u0644\u0645\u062F\u062E\u0644 \u0646\u0641\u0633\u0647.",
115
+ suggestion: "\u0646\u0633\u0651\u0642 \u0627\u0644\u0642\u064A\u0645\u0629 \u0641\u064A \u0645\u0643\u0627\u0646 \u0648\u0627\u062D\u062F \u0648\u0645\u0631\u0651\u0631 \u0627\u0644\u0646\u0635 \u0627\u0644\u0646\u0627\u062A\u062C\u060C \u0623\u0648 \u062B\u0628\u0651\u062A \u0627\u0644\u0644\u063A\u0629 \u0648\u0627\u0644\u0645\u0646\u0637\u0642\u0629 \u0627\u0644\u0632\u0645\u0646\u064A\u0629 \u0646\u0641\u0633\u064A\u0647\u0645\u0627 \u0639\u0644\u0649 \u0627\u0644\u062C\u0627\u0646\u0628\u064A\u0646. \u0648\u0625\u0646 \u0643\u0627\u0646\u062A \u0627\u0644\u0639\u0644\u0627\u0645\u0627\u062A \u063A\u064A\u0631 \u0645\u0624\u0630\u064A\u0629 \u0641\u0623\u0636\u0641 `suppressHydrationWarning` \u0625\u0644\u0649 \u0627\u0644\u0639\u0646\u0635\u0631."
116
+ },
117
+ "locale-format.script": {
118
+ explanation: "\u0646\u064F\u0633\u0651\u0642\u062A \u0627\u0644\u0642\u064A\u0645\u0629 \u0646\u0641\u0633\u0647\u0627 \u0628\u0646\u0638\u0627\u0645\u064E\u064A \u0623\u0631\u0642\u0627\u0645 \u0645\u062E\u062A\u0644\u0641\u064A\u0646 (\u0623\u0631\u0642\u0627\u0645 \u0639\u0631\u0628\u064A\u0629 \u0645\u0634\u0631\u0642\u064A\u0629 `\u0660\u0661\u0662` \u0645\u0642\u0627\u0628\u0644 \u0623\u0631\u0642\u0627\u0645 \u0644\u0627\u062A\u064A\u0646\u064A\u0629 `012`). \u0627\u062E\u062A\u0627\u0631 \u0627\u0644\u062E\u0627\u062F\u0645 \u0648\u0627\u0644\u0639\u0645\u064A\u0644 \u0625\u0639\u062F\u0627\u062F\u064A\u0646 \u0645\u062D\u0644\u064A\u064A\u0646 \u0645\u062E\u062A\u0644\u0641\u064A\u0646.",
119
+ suggestion: "\u0645\u0631\u0651\u0631 `locale` \u0635\u0631\u064A\u062D\u064B\u0627 (\u0648\u0645\u0646\u0637\u0642\u0629 \u0632\u0645\u0646\u064A\u0629) \u0625\u0644\u0649 `Intl.NumberFormat` \u0623\u0648 `toLocaleString` \u0639\u0644\u0649 \u0627\u0644\u062E\u0627\u062F\u0645 \u0648\u0627\u0644\u0639\u0645\u064A\u0644 \u0645\u0639\u064B\u0627\u060C \u0623\u0648 \u0646\u0633\u0651\u0642 \u0627\u0644\u0642\u064A\u0645\u0629 \u0628\u0639\u062F \u0627\u0644\u062A\u0631\u0643\u064A\u0628 \u0644\u064A\u064F\u0633\u062A\u062E\u062F\u0645 \u0625\u0639\u062F\u0627\u062F \u0627\u0644\u0639\u0645\u064A\u0644 \u0648\u062D\u062F\u0647."
120
+ },
121
+ "locale-format.separators": {
122
+ explanation: "\u0646\u064F\u0633\u0651\u0642 \u0627\u0644\u0631\u0642\u0645 \u0646\u0641\u0633\u0647 \u0628\u0641\u0648\u0627\u0635\u0644 \u0622\u0644\u0627\u0641 \u0623\u0648 \u0641\u0648\u0627\u0635\u0644 \u0639\u0634\u0631\u064A\u0629 \u0645\u062E\u062A\u0644\u0641\u0629 \u0628\u064A\u0646 \u0627\u0644\u062E\u0627\u062F\u0645 \u0648\u0627\u0644\u0639\u0645\u064A\u0644 (\u0645\u062B\u0644 `1,234.56` \u0645\u0642\u0627\u0628\u0644 `1.234,56`).",
123
+ suggestion: "\u0645\u0631\u0651\u0631 \u0625\u0639\u062F\u0627\u062F\u064B\u0627 \u0645\u062D\u0644\u064A\u064B\u0627 \u0635\u0631\u064A\u062D\u064B\u0627 \u0625\u0644\u0649 `Intl.NumberFormat` \u0623\u0648 `toLocaleString` \u0639\u0644\u0649 \u0627\u0644\u062C\u0627\u0646\u0628\u064A\u0646 \u0644\u062A\u062A\u0637\u0627\u0628\u0642 \u0627\u0644\u0641\u0648\u0627\u0635\u0644."
124
+ },
125
+ "locale-format.date-order": {
126
+ explanation: "\u0639\u064F\u0631\u0636 \u0627\u0644\u062A\u0627\u0631\u064A\u062E \u0646\u0641\u0633\u0647 \u0628\u062A\u0631\u062A\u064A\u0628 \u062D\u0642\u0648\u0644 \u0645\u062E\u062A\u0644\u0641 (`MM/DD` \u0645\u0642\u0627\u0628\u0644 `DD/MM`) \u0628\u064A\u0646 \u0627\u0644\u062E\u0627\u062F\u0645 \u0648\u0627\u0644\u0639\u0645\u064A\u0644.",
127
+ suggestion: "\u0646\u0633\u0651\u0642 \u0627\u0644\u062A\u0648\u0627\u0631\u064A\u062E \u0628\u0625\u0639\u062F\u0627\u062F \u0645\u062D\u0644\u064A \u0648\u0645\u0646\u0637\u0642\u0629 \u0632\u0645\u0646\u064A\u0629 \u0635\u0631\u064A\u062D\u064A\u0646 \u0639\u0628\u0631 `Intl` \u0639\u0644\u0649 \u0627\u0644\u062C\u0627\u0646\u0628\u064A\u0646."
128
+ },
129
+ "browser-only-api": {
130
+ explanation: "\u0639\u0631\u0636 \u0627\u0644\u0639\u0645\u064A\u0644 \u0645\u062D\u062A\u0648\u0649 \u062A\u0631\u0643\u0647 \u0627\u0644\u062E\u0627\u062F\u0645 \u0641\u0627\u0631\u063A\u064B\u0627 \u2014 \u0648\u0647\u0630\u0647 \u0639\u0644\u0627\u0645\u0629 \u0639\u0644\u0649 \u0642\u0631\u0627\u0621\u0629 \u0648\u0627\u062C\u0647\u0629 \u0644\u0627 \u062A\u062A\u0648\u0641\u0631 \u0625\u0644\u0627 \u0641\u064A \u0627\u0644\u0645\u062A\u0635\u0641\u062D (`window` \u0623\u0648 `document` \u0623\u0648 `localStorage` \u0623\u0648 `navigator` \u0623\u0648 `matchMedia`) \u0623\u062B\u0646\u0627\u0621 \u0627\u0644\u0639\u0631\u0636.",
131
+ suggestion: "\u0627\u062C\u0639\u0644 \u0642\u0631\u0627\u0621\u0627\u062A \u0627\u0644\u0645\u062A\u0635\u0641\u062D \u0645\u0634\u0631\u0648\u0637\u0629 \u0628\u0639\u0644\u0627\u0645\u0629 \u062A\u0631\u0643\u064A\u0628 \u0623\u0648 \u0636\u0639\u0647\u0627 \u062F\u0627\u062E\u0644 `useEffect`\u060C \u0623\u0648 \u0627\u0633\u062A\u062E\u062F\u0645 `useSyncExternalStore` \u0645\u0639 \u0644\u0642\u0637\u0629 \u0644\u0644\u062E\u0627\u062F\u0645 \u0644\u064A\u0637\u0627\u0628\u0642 \u0623\u0648\u0644 \u0639\u0631\u0636 \u0639\u0644\u0649 \u0627\u0644\u0639\u0645\u064A\u0644 \u0645\u0627 \u0639\u0631\u0636\u0647 \u0627\u0644\u062E\u0627\u062F\u0645."
132
+ },
133
+ "viewport-branching": {
134
+ explanation: "\u0623\u064F\u0636\u064A\u0641\u062A \u0634\u062C\u0631\u0629 \u0641\u0631\u0639\u064A\u0629 \u0643\u0627\u0645\u0644\u0629 \u0623\u0648 \u062D\u064F\u0630\u0641\u062A \u0623\u0648 \u0627\u0633\u062A\u064F\u0628\u062F\u0644\u062A \u0628\u064A\u0646 \u0627\u0644\u062E\u0627\u062F\u0645 \u0648\u0627\u0644\u0639\u0645\u064A\u0644 \u2014 \u063A\u0627\u0644\u0628\u064B\u0627 \u0628\u0633\u0628\u0628 \u0641\u062D\u0635 \u0641\u064A JavaScript \u0644\u0639\u0631\u0636 \u0627\u0644\u0634\u0627\u0634\u0629 \u064A\u0641\u0631\u0651\u0639 \u0627\u0644\u0634\u062C\u0631\u0629 \u0641\u064A \u0623\u0648\u0644 \u0639\u0631\u0636.",
135
+ suggestion: "\u0627\u0639\u0631\u0636 \u0627\u0644\u0641\u0631\u0639\u064A\u0646 \u0648\u0628\u062F\u0651\u0644 \u0628\u064A\u0646\u0647\u0645\u0627 \u0628\u0627\u0633\u062A\u0639\u0644\u0627\u0645\u0627\u062A \u0627\u0644\u0648\u0633\u0627\u0626\u0637 \u0641\u064A CSS \u0639\u0646\u062F \u0623\u0648\u0644 \u0631\u0633\u0645 \u0628\u062F\u0644 \u0627\u0644\u062A\u0641\u0631\u064A\u0639 \u0641\u064A JavaScript\u060C \u0623\u0648 \u0623\u062C\u0651\u0644 \u0627\u0644\u0641\u0631\u0639 \u0627\u0644\u0645\u0639\u062A\u0645\u062F \u0639\u0644\u0649 JavaScript \u0625\u0644\u0649 \u0645\u0627 \u0628\u0639\u062F \u0627\u0644\u062A\u0631\u0643\u064A\u0628."
136
+ },
137
+ "invalid-html-nesting": {
138
+ explanation: "\u0646\u064F\u0642\u0644\u062A \u0639\u0642\u062F\u0629 \u0623\u0648 \u0623\u064F\u062E\u0631\u062C\u062A \u0645\u0646 \u0645\u0643\u0627\u0646\u0647\u0627 \u0644\u0623\u0646 \u062A\u0631\u0645\u064A\u0632 HTML \u063A\u064A\u0631 \u0635\u0627\u0644\u062D (\u0645\u062B\u0644 `<div>` \u062F\u0627\u062E\u0644 `<p>`\u060C \u0623\u0648 `<a>` \u062F\u0627\u062E\u0644 `<a>`). \u064A\u064F\u0635\u0644\u062D \u0627\u0644\u0645\u062A\u0635\u0641\u062D DOM \u0627\u0644\u0642\u0627\u062F\u0645 \u0645\u0646 \u0627\u0644\u062E\u0627\u062F\u0645\u060C \u0641\u0644\u0627 \u064A\u0639\u0648\u062F \u0645\u0637\u0627\u0628\u0642\u064B\u0627 \u0644\u0645\u0627 \u064A\u062A\u0648\u0642\u0639\u0647 React.",
139
+ suggestion: "\u0635\u062D\u0651\u062D \u0635\u0644\u0627\u062D\u064A\u0629 \u0627\u0644\u062A\u0631\u0645\u064A\u0632: \u0644\u0627 \u064A\u0645\u0643\u0646 \u0648\u0636\u0639 \u0627\u0644\u0639\u0646\u0627\u0635\u0631 \u0627\u0644\u0643\u062A\u0644\u064A\u0629 \u062F\u0627\u062E\u0644 `<p>`\u060C \u0648\u0644\u0627 \u064A\u0645\u0643\u0646 \u062A\u062F\u0627\u062E\u0644 \u0627\u0644\u0631\u0648\u0627\u0628\u0637. \u0627\u0633\u062A\u0628\u062F\u0644 \u0627\u0644\u0639\u0646\u0635\u0631 \u0627\u0644\u0623\u0628 \u063A\u064A\u0631 \u0627\u0644\u0635\u0627\u0644\u062D \u0628\u0640 `<div>` \u0623\u0648 \u0623\u0639\u062F \u0647\u064A\u0643\u0644\u0629 \u0627\u0644\u0634\u062C\u0631\u0629."
140
+ },
141
+ "whitespace-minification": {
142
+ explanation: "\u0627\u0644\u0627\u062E\u062A\u0644\u0627\u0641 \u0641\u064A \u0627\u0644\u0645\u0633\u0627\u0641\u0627\u062A \u0627\u0644\u0628\u064A\u0636\u0627\u0621 \u0641\u0642\u0637 \u2014 \u0627\u0644\u0646\u0635 \u0645\u062A\u0637\u0627\u0628\u0642 \u0628\u0627\u0633\u062A\u062B\u0646\u0627\u0621 \u0627\u0644\u0645\u0633\u0627\u0641\u0627\u062A \u0648\u0627\u0644\u0623\u0633\u0637\u0631 \u0627\u0644\u062C\u062F\u064A\u062F\u0629. \u0639\u0644\u0649 \u0627\u0644\u0623\u0631\u062C\u062D \u0636\u063A\u0637 \u0645\u064F\u0635\u063A\u0651\u0631 HTML \u0627\u0644\u0645\u0633\u0627\u0641\u0627\u062A \u062D\u0648\u0644 \u062C\u0630\u0631 \u0627\u0644\u0640 Hydration \u0628\u0637\u0631\u064A\u0642\u0629 \u0645\u062E\u062A\u0644\u0641\u0629 \u0639\u0646 React.",
143
+ suggestion: "\u0631\u0627\u062C\u0639 \u0625\u0639\u062F\u0627\u062F\u0627\u062A \u0645\u064F\u0635\u063A\u0651\u0631 HTML (\u0645\u062B\u0644 `conservativeCollapse`) \u062D\u0648\u0644 \u062C\u0630\u0631 \u0627\u0644\u062A\u0637\u0628\u064A\u0642\u060C \u0623\u0648 \u062A\u062C\u0646\u0651\u0628 \u062A\u0635\u063A\u064A\u0631 \u0627\u0644\u0645\u0633\u0627\u0641\u0627\u062A \u062F\u0627\u062E\u0644 \u0627\u0644\u062A\u0631\u0645\u064A\u0632 \u0627\u0644\u0630\u064A \u064A\u0645\u0631 \u0628\u0627\u0644\u0640 Hydration."
144
+ },
145
+ "third-party-dom-mutation.extension-attribute": {
146
+ explanation: "\u062D\u0642\u0646 \u0627\u0645\u062A\u062F\u0627\u062F \u0645\u062A\u0635\u0641\u062D \u0623\u0648 \u0633\u0643\u0631\u0628\u062A \u062E\u0627\u0631\u062C\u064A (\u0645\u062B\u0644 Grammarly \u0623\u0648 ColorZilla) \u0627\u0644\u0633\u0645\u0629 `{attribute}` \u0642\u0628\u0644 \u0627\u0644\u0640 Hydration\u060C \u0641\u0644\u0645 \u064A\u0639\u062F DOM \u0639\u0644\u0649 \u0627\u0644\u0639\u0645\u064A\u0644 \u0645\u0637\u0627\u0628\u0642\u064B\u0627 \u0644\u0644\u062E\u0627\u062F\u0645.",
147
+ suggestion: "\u063A\u0627\u0644\u0628\u064B\u0627 \u0645\u0627 \u064A\u0643\u0648\u0646 \u0647\u0630\u0627 \u063A\u064A\u0631 \u0645\u0624\u0630\u064D. \u0623\u0636\u0641 `suppressHydrationWarning` \u0625\u0644\u0649 \u0627\u0644\u0639\u0646\u0635\u0631 \u0627\u0644\u0645\u062A\u0623\u062B\u0631\u060C \u0623\u0648 \u0623\u062C\u0651\u0644 \u062A\u0647\u064A\u0626\u0629 \u0627\u0644\u0633\u0643\u0631\u0628\u062A \u0627\u0644\u062E\u0627\u0631\u062C\u064A \u0625\u0644\u0649 \u0645\u0627 \u0628\u0639\u062F \u0627\u0644\u0640 Hydration."
148
+ },
149
+ "third-party-dom-mutation.root-attribute": {
150
+ explanation: "\u0638\u0647\u0631\u062A \u0633\u0645\u0629 (`{attribute}`) \u0639\u0644\u0649 \u0639\u0646\u0635\u0631 \u062C\u0630\u0631\u064A \u0644\u0645 \u064A\u0631\u0633\u0644\u0647\u0627 \u0627\u0644\u062E\u0627\u062F\u0645 \u0623\u0628\u062F\u064B\u0627 \u2014 \u0648\u0647\u064A \u0639\u0644\u0627\u0645\u0629 \u0645\u0645\u064A\u0632\u0629 \u0644\u0627\u0645\u062A\u062F\u0627\u062F \u0623\u0648 \u0633\u0643\u0631\u0628\u062A \u062E\u0627\u0631\u062C\u064A \u0645\u0628\u0643\u0631 \u064A\u0639\u062F\u0651\u0644 DOM.",
151
+ suggestion: "\u0623\u0636\u0641 `suppressHydrationWarning` \u0625\u0644\u0649 \u0627\u0644\u0639\u0646\u0635\u0631 \u0627\u0644\u062C\u0630\u0631\u064A\u060C \u0623\u0648 \u0623\u062C\u0651\u0644 \u0627\u0644\u0633\u0643\u0631\u0628\u062A \u0627\u0644\u062E\u0627\u0631\u062C\u064A \u0625\u0644\u0649 \u0645\u0627 \u0628\u0639\u062F \u0627\u0644\u0640 Hydration."
152
+ },
153
+ "third-party-dom-mutation.injected-node": {
154
+ explanation: (p) => [
155
+ "\u062D\u0642\u0646 \u0633\u0643\u0631\u0628\u062A \u062E\u0627\u0631\u062C\u064A \u0623\u0648 \u0627\u0645\u062A\u062F\u0627\u062F \u0645\u062A\u0635\u0641\u062D \u0627\u0644\u0639\u0646\u0635\u0631 ",
156
+ chunkQFHUKJ5K_cjs.code(chunkQFHUKJ5K_cjs.param(p, "tag")),
157
+ " (\u0625\u0639\u0644\u0627\u0646\u0627\u062A \u0623\u0648 \u0646\u0627\u0641\u0630\u0629 \u0645\u0648\u0627\u0641\u0642\u0629 \u0623\u0648 \u062A\u062D\u0644\u064A\u0644\u0627\u062A \u0623\u0648 \u0645\u062D\u0627\u062F\u062B\u0629) \u0628\u0639\u062F \u0639\u0631\u0636 \u0627\u0644\u062E\u0627\u062F\u0645. \u0644\u064A\u0633 \u0647\u0630\u0627 \u062C\u0632\u0621\u064B\u0627 \u0645\u0646 \u0627\u0644\u0640 Hydration \u0641\u064A \u062A\u0637\u0628\u064A\u0642\u0643\u060C \u0644\u0630\u0627 \u0641\u0647\u0648 \u063A\u0627\u0644\u0628\u064B\u0627 \u0636\u062C\u064A\u062C \u063A\u064A\u0631 \u0645\u0624\u0630\u064D."
158
+ ],
159
+ suggestion: '\u0625\u0646 \u062D\u0630\u0651\u0631 React \u0645\u0646\u0647 \u0641\u0623\u0636\u0641 `suppressHydrationWarning` \u0625\u0644\u0649 \u0623\u0642\u0631\u0628 \u063A\u0644\u0627\u0641 \u0639\u064F\u0631\u0636 \u0639\u0644\u0649 \u0627\u0644\u062E\u0627\u062F\u0645\u060C \u0623\u0648 \u062D\u0645\u0651\u0644 \u0627\u0644\u0633\u0643\u0631\u0628\u062A \u0627\u0644\u062E\u0627\u0631\u062C\u064A \u0628\u0639\u062F \u0627\u0644\u0640 Hydration (\u0645\u062B\u0644 `<Script strategy="afterInteractive">` \u0641\u064A Next.js).'
160
+ },
161
+ "attribute-mismatch.class": {
162
+ explanation: (p) => [
163
+ "\u062A\u062E\u062A\u0644\u0641 ",
164
+ chunkQFHUKJ5K_cjs.code("class"),
165
+ " \u0628\u064A\u0646 \u0627\u0644\u062E\u0627\u062F\u0645 \u0648\u0627\u0644\u0639\u0645\u064A\u0644",
166
+ ...chunkQFHUKJ5K_cjs.classDetail(p, {
167
+ added: "\u0623\u064F\u0636\u064A\u0641 \u0639\u0644\u0649 \u0627\u0644\u0639\u0645\u064A\u0644: ",
168
+ removed: "\u0623\u064F\u0632\u064A\u0644 \u0639\u0644\u0649 \u0627\u0644\u0639\u0645\u064A\u0644: ",
169
+ listSeparator: "\u060C ",
170
+ partSeparator: "\u061B ",
171
+ open: " (",
172
+ close: ")"
173
+ }),
174
+ ". \u0637\u064F\u0628\u0651\u0642\u062A \u0641\u0626\u0629 CSS \u0628\u0634\u0643\u0644 \u0645\u0634\u0631\u0648\u0637 \u0639\u0644\u0649 \u0627\u0644\u0639\u0645\u064A\u0644 \u2014 \u063A\u0627\u0644\u0628\u064B\u0627 \u0628\u0633\u0628\u0628 \u0641\u062D\u0635 \u0644\u062D\u062C\u0645 \u0627\u0644\u0634\u0627\u0634\u0629 \u0623\u0648 \u0627\u0633\u062A\u0639\u0644\u0627\u0645 \u0648\u0633\u0627\u0626\u0637 \u0623\u0648 \u0633\u0645\u0629 (theme) \u0623\u0648 \u0639\u0644\u0627\u0645\u0629 \u0645\u064A\u0632\u0629 \u064A\u064F\u0646\u0641\u064E\u0651\u0630 \u0623\u062B\u0646\u0627\u0621 \u0623\u0648\u0644 \u0639\u0631\u0636."
175
+ ],
176
+ suggestion: "\u0627\u0639\u0631\u0636 \u0642\u064A\u0645\u0629 `className` \u0646\u0641\u0633\u0647\u0627 \u0639\u0644\u0649 \u0627\u0644\u062E\u0627\u062F\u0645 \u0648\u0641\u064A \u0623\u0648\u0644 \u0631\u0633\u0645 \u0639\u0644\u0649 \u0627\u0644\u0639\u0645\u064A\u0644. \u0627\u0646\u0642\u0644 \u0627\u0644\u0634\u0631\u0648\u0637 \u0627\u0644\u062E\u0627\u0635\u0629 \u0628\u0627\u0644\u0639\u0645\u064A\u0644 \u0625\u0644\u0649 `useEffect` \u0623\u0648 \u0639\u0644\u0627\u0645\u0629 \u062A\u0631\u0643\u064A\u0628\u060C \u0623\u0648 \u0646\u0641\u0651\u0630 \u0627\u0644\u062A\u063A\u064A\u064A\u0631 \u0627\u0644\u0628\u0635\u0631\u064A \u0628\u0627\u0633\u062A\u0639\u0644\u0627\u0645\u0627\u062A \u0627\u0644\u0648\u0633\u0627\u0626\u0637 \u0641\u064A CSS \u0628\u062F\u0644 \u062A\u0628\u062F\u064A\u0644 \u0627\u0644\u0641\u0626\u0629 \u0639\u0628\u0631 JavaScript."
177
+ },
178
+ "attribute-mismatch.style": {
179
+ explanation: "\u064A\u062E\u062A\u0644\u0641 `style` \u0627\u0644\u0645\u0636\u0645\u0651\u0646 \u0628\u064A\u0646 \u0627\u0644\u062E\u0627\u062F\u0645 \u0648\u0627\u0644\u0639\u0645\u064A\u0644 \u2014 \u062D\u064F\u0633\u0628 \u0646\u0645\u0637 \u0645\u0636\u0645\u0651\u0646 \u0645\u0646 \u062D\u0627\u0644\u0629 \u062E\u0627\u0635\u0629 \u0628\u0627\u0644\u0639\u0645\u064A\u0644 (\u062D\u062C\u0645 \u0627\u0644\u0634\u0627\u0634\u0629 \u0623\u0648 \u0627\u0644\u0633\u0645\u0629 \u0623\u0648 \u0645\u0648\u0636\u0639 \u0627\u0644\u062A\u0645\u0631\u064A\u0631) \u0623\u062B\u0646\u0627\u0621 \u0627\u0644\u0639\u0631\u0636.",
180
+ suggestion: "\u0627\u062D\u0633\u0628 \u0627\u0644\u0646\u0645\u0637 \u0628\u0639\u062F \u0627\u0644\u062A\u0631\u0643\u064A\u0628 (`useEffect`) \u0644\u064A\u0637\u0627\u0628\u0642 \u0623\u0648\u0644 \u0639\u0631\u0636 \u0639\u0644\u0649 \u0627\u0644\u0639\u0645\u064A\u0644 \u0645\u0627 \u0639\u0631\u0636\u0647 \u0627\u0644\u062E\u0627\u062F\u0645\u060C \u0623\u0648 \u0627\u0646\u0642\u0644\u0647 \u0625\u0644\u0649 \u0641\u0626\u0629 CSS \u0623\u0648 \u0627\u0633\u062A\u0639\u0644\u0627\u0645 \u0648\u0633\u0627\u0626\u0637."
181
+ },
182
+ "attribute-mismatch.generic": {
183
+ explanation: "\u062A\u062E\u062A\u0644\u0641 \u0627\u0644\u0633\u0645\u0629 `{attribute}` \u0628\u064A\u0646 \u0627\u0644\u062E\u0627\u062F\u0645 (`{server}`) \u0648\u0627\u0644\u0639\u0645\u064A\u0644 (`{client}`) \u2014 \u0627\u0634\u062A\u064F\u0642\u0651\u062A \u0642\u064A\u0645\u062A\u0647\u0627 \u0645\u0646 \u0634\u064A\u0621 \u064A\u062E\u062A\u0644\u0641 \u0628\u064A\u0646 \u0627\u0644\u062E\u0627\u062F\u0645 \u0648\u0623\u0648\u0644 \u0639\u0631\u0636 \u0639\u0644\u0649 \u0627\u0644\u0639\u0645\u064A\u0644.",
184
+ suggestion: "\u0627\u062C\u0639\u0644 \u0642\u064A\u0645\u0629 \u0627\u0644\u0633\u0645\u0629 \u062D\u062A\u0645\u064A\u0629 \u0639\u0644\u0649 \u0627\u0644\u062E\u0627\u062F\u0645 \u0648\u0627\u0644\u0639\u0645\u064A\u0644\u060C \u0623\u0648 \u0639\u064A\u0651\u0646\u0647\u0627 \u0628\u0639\u062F \u0627\u0644\u062A\u0631\u0643\u064A\u0628 \u0644\u064A\u0637\u0627\u0628\u0642 \u0623\u0648\u0644 \u0639\u0631\u0636 \u0639\u0644\u0649 \u0627\u0644\u0639\u0645\u064A\u0644 HTML \u0627\u0644\u0642\u0627\u062F\u0645 \u0645\u0646 \u0627\u0644\u062E\u0627\u062F\u0645."
185
+ },
186
+ unknown: {
187
+ explanation: "\u0627\u0643\u062A\u064F\u0634\u0641 \u0639\u062F\u0645 \u062A\u0637\u0627\u0628\u0642 \u0641\u064A \u0627\u0644\u0640 Hydration \u0644\u0643\u0646 \u062A\u0639\u0630\u0651\u0631\u062A \u0645\u0637\u0627\u0628\u0642\u062A\u0647 \u0645\u0639 \u0633\u0628\u0628 \u0645\u0639\u0631\u0648\u0641. \u0627\u0641\u062D\u0635 \u0642\u064A\u0645\u062A\u064E\u064A \u0627\u0644\u062E\u0627\u062F\u0645 \u0648\u0627\u0644\u0639\u0645\u064A\u0644 \u0623\u0639\u0644\u0627\u0647.",
188
+ suggestion: "\u0642\u0627\u0631\u0646 \u0628\u064A\u0646 \u0642\u064A\u0645\u062A\u064E\u064A \u0627\u0644\u062E\u0627\u062F\u0645 \u0648\u0627\u0644\u0639\u0645\u064A\u0644. \u0645\u0646 \u0627\u0644\u0623\u0633\u0628\u0627\u0628 \u0627\u0644\u0634\u0627\u0626\u0639\u0629: \u0627\u0644\u0642\u064A\u0645 \u063A\u064A\u0631 \u0627\u0644\u062D\u062A\u0645\u064A\u0629\u060C \u0648\u0627\u0644\u062A\u0648\u0627\u0631\u064A\u062E \u0648\u0627\u0644\u0625\u0639\u062F\u0627\u062F\u0627\u062A \u0627\u0644\u0645\u062D\u0644\u064A\u0629\u060C \u0648\u0627\u0644\u0648\u0627\u062C\u0647\u0627\u062A \u0627\u0644\u062E\u0627\u0635\u0629 \u0628\u0627\u0644\u0645\u062A\u0635\u0641\u062D \u0627\u0644\u0645\u0633\u062A\u062E\u062F\u0645\u0629 \u0623\u062B\u0646\u0627\u0621 \u0627\u0644\u0639\u0631\u0636."
189
+ },
190
+ "unknown.no-location": {
191
+ explanation: "\u0623\u0628\u0644\u063A React \u0628\u0641\u0634\u0644 \u0627\u0644\u0640 Hydration \u062F\u0648\u0646 \u0623\u0646 \u064A\u062D\u062F\u062F \u0627\u0644\u0639\u0642\u062F\u0629 \u0627\u0644\u0645\u062E\u062A\u0644\u0641\u0629\u060C \u0648\u0644\u0645 \u064A\u062C\u062F \u0641\u062D\u0635 DOM \u0623\u064A \u0627\u062E\u062A\u0644\u0627\u0641 \u064A\u0645\u0643\u0646 \u0627\u0644\u0625\u0634\u0627\u0631\u0629 \u0625\u0644\u064A\u0647.",
192
+ suggestion: "\u062A\u0623\u0643\u062F \u0645\u0646 \u0648\u062C\u0648\u062F `<HydrationSnapshotScript>` (\u0623\u0648 \u0633\u0643\u0631\u0628\u062A \u0627\u0644\u0644\u0642\u0637\u0629 \u0627\u0644\u064A\u062F\u0648\u064A) \u062F\u0627\u062E\u0644 `<head>` \u0644\u064A\u062A\u0645\u0643\u0646 \u0641\u062D\u0635 DOM \u0645\u0646 \u062A\u062D\u062F\u064A\u062F \u0627\u0644\u0639\u0642\u062F\u0629\u060C \u0648\u0627\u0642\u0631\u0623 \u062A\u062D\u0630\u064A\u0631 React \u0627\u0644\u0643\u0627\u0645\u0644 \u0641\u064A \u0648\u062D\u062F\u0629 \u062A\u062D\u0643\u0645 \u0627\u0644\u0645\u062A\u0635\u0641\u062D."
193
+ }
194
+ };
195
+ var arPlural;
196
+ function arabicPlural(count) {
197
+ if (arPlural === void 0) {
198
+ arPlural = typeof Intl !== "undefined" && typeof Intl.PluralRules === "function" ? new Intl.PluralRules("ar") : null;
199
+ }
200
+ return arPlural?.select(count) ?? "other";
201
+ }
202
+ function arabicIssues(count) {
203
+ switch (arabicPlural(count)) {
204
+ case "zero":
205
+ return "\u0644\u0627 \u0645\u0634\u0643\u0644\u0627\u062A";
206
+ case "one":
207
+ return "\u0645\u0634\u0643\u0644\u0629 \u0648\u0627\u062D\u062F\u0629";
208
+ case "two":
209
+ return "\u0645\u0634\u0643\u0644\u062A\u0627\u0646";
210
+ case "few":
211
+ return `${count} \u0645\u0634\u0643\u0644\u0627\u062A`;
212
+ default:
213
+ return `${count} \u0645\u0634\u0643\u0644\u0629`;
214
+ }
215
+ }
216
+ var AR = {
217
+ dir: "rtl",
218
+ title: "\u0639\u062F\u0645 \u062A\u0637\u0627\u0628\u0642 \u0641\u064A \u0627\u0644\u0640 Hydration",
219
+ dialogLabel: "\u062A\u0634\u062E\u064A\u0635 \u0639\u062F\u0645 \u062A\u0637\u0627\u0628\u0642 \u0627\u0644\u0640 Hydration",
220
+ dismiss: "\u0625\u063A\u0644\u0627\u0642",
221
+ dismissLabel: "\u0625\u063A\u0644\u0627\u0642 \u0644\u0648\u062D\u0629 \u0627\u0644\u062A\u0634\u062E\u064A\u0635",
222
+ hintDismissLabel: "\u0625\u062E\u0641\u0627\u0621 \u0627\u0644\u062A\u0644\u0645\u064A\u062D",
223
+ server: "\u0627\u0644\u062E\u0627\u062F\u0645",
224
+ client: "\u0627\u0644\u0639\u0645\u064A\u0644",
225
+ fix: "\u0627\u0644\u062D\u0644:",
226
+ // The docs are only written in English, so say so rather than surprise.
227
+ learnMore: "\u0627\u0639\u0631\u0641 \u0627\u0644\u0645\u0632\u064A\u062F (\u0628\u0627\u0644\u0625\u0646\u062C\u0644\u064A\u0632\u064A\u0629) \u2190",
228
+ none: "(\u0644\u0627 \u0634\u064A\u0621)",
229
+ empty: "(\u0641\u0627\u0631\u063A)",
230
+ fallbackCategory: "\u0639\u062F\u0645 \u062A\u0637\u0627\u0628\u0642",
231
+ categories: {
232
+ "non-deterministic-value": "\u0642\u064A\u0645\u0629 \u063A\u064A\u0631 \u062D\u062A\u0645\u064A\u0629",
233
+ "date-time": "\u0627\u0644\u062A\u0627\u0631\u064A\u062E / \u0627\u0644\u0648\u0642\u062A",
234
+ "locale-format": "\u062A\u0646\u0633\u064A\u0642 \u0627\u0644\u0644\u063A\u0629 \u0648\u0627\u0644\u0645\u0646\u0637\u0642\u0629",
235
+ "browser-only-api": "\u0648\u0627\u062C\u0647\u0629 \u062E\u0627\u0635\u0629 \u0628\u0627\u0644\u0645\u062A\u0635\u0641\u062D",
236
+ "viewport-branching": "\u062A\u0641\u0631\u0651\u0639 \u062D\u0633\u0628 \u062D\u062C\u0645 \u0627\u0644\u0634\u0627\u0634\u0629",
237
+ "invalid-html-nesting": "\u062A\u062F\u0627\u062E\u0644 HTML \u063A\u064A\u0631 \u0635\u0627\u0644\u062D",
238
+ "whitespace-minification": "\u0627\u0644\u0645\u0633\u0627\u0641\u0627\u062A / \u0627\u0644\u062A\u0635\u063A\u064A\u0631",
239
+ "third-party-dom-mutation": "\u062A\u0639\u062F\u064A\u0644 DOM \u0645\u0646 \u0637\u0631\u0641 \u062E\u0627\u0631\u062C\u064A",
240
+ "attribute-mismatch": "\u0627\u062E\u062A\u0644\u0627\u0641 \u0641\u064A \u0627\u0644\u0633\u0645\u0629",
241
+ unknown: "\u063A\u064A\u0631 \u0645\u0639\u0631\u0648\u0641"
242
+ },
243
+ messages: AR_MESSAGES,
244
+ hint: (count) => `\u2193 ${arabicIssues(count)} \u2014 \u0645\u0631\u0651\u0631 \u0644\u0631\u0624\u064A\u0629 \u0627\u0644\u0643\u0644`
245
+ };
246
+
247
+ // src/react/locales/fa.ts
248
+ var FA_MESSAGES = {
249
+ "non-deterministic-value": {
250
+ explanation: "\u0633\u0631\u0648\u0631 \u0648 \u06A9\u0644\u0627\u06CC\u0646\u062A \u062F\u0648 \u0645\u0642\u062F\u0627\u0631 \u0645\u062A\u0641\u0627\u0648\u062A \u0648 \u0628\u0647\u200C\u0638\u0627\u0647\u0631 \u062A\u0635\u0627\u062F\u0641\u06CC \u0631\u0646\u062F\u0631 \u06A9\u0631\u062F\u0646\u062F (\u06CC\u06A9 \u0634\u0646\u0627\u0633\u0647\u060C \u062A\u0648\u06A9\u0646 \u06CC\u0627 \u062E\u0631\u0648\u062C\u06CC `Math.random()`). \u0647\u0631 \u0686\u06CC\u0632 \u063A\u06CC\u0631\u0642\u0637\u0639\u06CC \u062F\u0631 \u0631\u0646\u062F\u0631\u060C \u062F\u0631 \u0647\u0631 \u0637\u0631\u0641 \u0645\u0642\u062F\u0627\u0631 \u0645\u062A\u0641\u0627\u0648\u062A\u06CC \u062A\u0648\u0644\u06CC\u062F \u0645\u06CC\u200C\u06A9\u0646\u062F.",
251
+ suggestion: "\u0628\u0631\u0627\u06CC \u0634\u0646\u0627\u0633\u0647\u200C\u0647\u0627 \u0627\u0632 `useId()` \u062F\u0631 React \u0627\u0633\u062A\u0641\u0627\u062F\u0647 \u06A9\u0646\u06CC\u062F. \u0645\u0642\u062F\u0627\u0631\u0647\u0627\u06CC \u062A\u0635\u0627\u062F\u0641\u06CC \u0631\u0627 \u0628\u0639\u062F \u0627\u0632 mount (\u062F\u0627\u062E\u0644 `useEffect`) \u0628\u0633\u0627\u0632\u06CC\u062F \u06CC\u0627 \u0645\u0642\u062F\u0627\u0631\u06CC \u0631\u0627 \u0627\u0632 \u0633\u0631\u0648\u0631 \u067E\u0627\u0633 \u0628\u062F\u0647\u06CC\u062F \u062A\u0627 \u0647\u0631 \u062F\u0648 \u0637\u0631\u0641 \u06CC\u06A9\u0633\u0627\u0646 \u0628\u0627\u0634\u0646\u062F. \u0647\u0646\u06AF\u0627\u0645 \u0631\u0646\u062F\u0631 \u0647\u0631\u06AF\u0632 `Math.random()` \u06CC\u0627 `crypto` \u0631\u0627 \u0635\u062F\u0627 \u0646\u0632\u0646\u06CC\u062F."
252
+ },
253
+ "date-time": {
254
+ explanation: "\u0645\u0642\u062F\u0627\u0631\u0647\u0627 \u062A\u0627\u0631\u06CC\u062E \u06CC\u0627 \u0632\u0645\u0627\u0646\u200C\u0647\u0627\u06CC\u06CC \u0647\u0633\u062A\u0646\u062F \u06A9\u0647 \u0628\u06CC\u0646 \u0631\u0646\u062F\u0631 \u0633\u0631\u0648\u0631 \u0648 \u0631\u0646\u062F\u0631 \u06A9\u0644\u0627\u06CC\u0646\u062A \u0641\u0631\u0642 \u062F\u0627\u0631\u0646\u062F \u2014 \u0633\u0627\u0639\u062A \u062C\u0644\u0648 \u0631\u0641\u062A\u0647 (\u06CC\u0627 \u0645\u0646\u0637\u0642\u0647\u0654 \u0632\u0645\u0627\u0646\u06CC \u0645\u062A\u0641\u0627\u0648\u062A \u0627\u0633\u062A) \u0628\u06CC\u0646 \u062F\u0648 \u0645\u062D\u06CC\u0637.",
255
+ suggestion: "\u0632\u0645\u0627\u0646 \u0641\u0639\u0644\u06CC \u0631\u0627 \u0628\u0639\u062F \u0627\u0632 mount \u0646\u0645\u0627\u06CC\u0634 \u062F\u0647\u06CC\u062F\u060C \u06CC\u0627 \u06CC\u06A9 timestamp \u0627\u0632 \u0633\u0631\u0648\u0631 \u067E\u0627\u0633 \u0628\u062F\u0647\u06CC\u062F \u0648 \u062F\u0631 \u0647\u0631 \u062F\u0648 \u0637\u0631\u0641 \u06CC\u06A9\u0633\u0627\u0646 \u0642\u0627\u0644\u0628\u200C\u0628\u0646\u062F\u06CC \u06A9\u0646\u06CC\u062F. \u0647\u0646\u06AF\u0627\u0645 \u0642\u0627\u0644\u0628\u200C\u0628\u0646\u062F\u06CC \u06CC\u06A9 \u0645\u0646\u0637\u0642\u0647\u0654 \u0632\u0645\u0627\u0646\u06CC \u0645\u0634\u062E\u0635 \u062A\u0639\u06CC\u06CC\u0646 \u06A9\u0646\u06CC\u062F."
256
+ },
257
+ "locale-format.bidi": {
258
+ explanation: "\u0645\u0642\u062F\u0627\u0631\u0647\u0627 \u0641\u0642\u0637 \u062F\u0631 \u0646\u0648\u06CC\u0633\u0647\u200C\u0647\u0627\u06CC \u06A9\u0646\u062A\u0631\u0644\u06CC \u062F\u0648\u0633\u0648\u06CC\u0647\u0654 \u0646\u0627\u0645\u0631\u0626\u06CC (`LRM`\u060C `RLM` \u0648 \u0646\u0648\u06CC\u0633\u0647\u200C\u0647\u0627\u06CC \u062C\u062F\u0627\u0633\u0627\u0632\u06CC) \u0641\u0631\u0642 \u062F\u0627\u0631\u0646\u062F. `Intl` \u0627\u06CC\u0646 \u0646\u0648\u06CC\u0633\u0647\u200C\u0647\u0627 \u0631\u0627 \u062F\u0631 \u0632\u0628\u0627\u0646\u200C\u0647\u0627\u06CC \u0631\u0627\u0633\u062A\u200C\u0628\u0647\u200C\u0686\u067E \u062F\u0648\u0631 \u0627\u0639\u062F\u0627\u062F \u0648 \u062A\u0627\u0631\u06CC\u062E\u200C\u0647\u0627 \u0627\u0636\u0627\u0641\u0647 \u0645\u06CC\u200C\u06A9\u0646\u062F \u0648 \u0646\u0633\u062E\u0647\u200C\u0647\u0627\u06CC \u0645\u062E\u062A\u0644\u0641 ICU \u2014 Node \u062F\u0631 \u0628\u0631\u0627\u0628\u0631 \u0645\u0631\u0648\u0631\u06AF\u0631 \u2014 \u0628\u0631\u0627\u06CC \u0648\u0631\u0648\u062F\u06CC \u06CC\u06A9\u0633\u0627\u0646 \u0646\u0648\u06CC\u0633\u0647\u200C\u0647\u0627\u06CC \u0645\u062A\u0641\u0627\u0648\u062A\u06CC \u0627\u0636\u0627\u0641\u0647 \u0645\u06CC\u200C\u06A9\u0646\u0646\u062F.",
259
+ suggestion: "\u0645\u0642\u062F\u0627\u0631 \u0631\u0627 \u062F\u0631 \u06CC\u06A9 \u062C\u0627 \u0642\u0627\u0644\u0628\u200C\u0628\u0646\u062F\u06CC \u06A9\u0646\u06CC\u062F \u0648 \u0631\u0634\u062A\u0647\u0654 \u062D\u0627\u0635\u0644 \u0631\u0627 \u067E\u0627\u0633 \u0628\u062F\u0647\u06CC\u062F\u060C \u06CC\u0627 \u0632\u0628\u0627\u0646 \u0648 \u0645\u0646\u0637\u0642\u0647\u0654 \u0632\u0645\u0627\u0646\u06CC \u06CC\u06A9\u0633\u0627\u0646\u06CC \u062F\u0631 \u062F\u0648 \u0637\u0631\u0641 \u062A\u0639\u06CC\u06CC\u0646 \u06A9\u0646\u06CC\u062F. \u0627\u06AF\u0631 \u0627\u06CC\u0646 \u0646\u0648\u06CC\u0633\u0647\u200C\u0647\u0627 \u0628\u06CC\u200C\u0636\u0631\u0631\u0646\u062F\u060C `suppressHydrationWarning` \u0631\u0627 \u0628\u0647 \u0639\u0646\u0635\u0631 \u0627\u0636\u0627\u0641\u0647 \u06A9\u0646\u06CC\u062F."
260
+ },
261
+ "locale-format.script": {
262
+ explanation: "\u06CC\u06A9 \u0645\u0642\u062F\u0627\u0631 \u0628\u0627 \u062F\u0648 \u0646\u0638\u0627\u0645 \u0631\u0642\u0645 \u0645\u062A\u0641\u0627\u0648\u062A \u0642\u0627\u0644\u0628\u200C\u0628\u0646\u062F\u06CC \u0634\u062F\u0647 \u0627\u0633\u062A (\u0631\u0642\u0645\u200C\u0647\u0627\u06CC \u0639\u0631\u0628\u06CC-\u0647\u0646\u062F\u06CC `\u0660\u0661\u0662` \u062F\u0631 \u0628\u0631\u0627\u0628\u0631 \u0631\u0642\u0645\u200C\u0647\u0627\u06CC \u0644\u0627\u062A\u06CC\u0646 `012`). \u0633\u0631\u0648\u0631 \u0648 \u06A9\u0644\u0627\u06CC\u0646\u062A \u062A\u0646\u0638\u06CC\u0645\u0627\u062A \u0645\u0646\u0637\u0642\u0647\u200C\u0627\u06CC \u0645\u062A\u0641\u0627\u0648\u062A\u06CC \u0627\u0646\u062A\u062E\u0627\u0628 \u06A9\u0631\u062F\u0647\u200C\u0627\u0646\u062F.",
263
+ suggestion: "\u06CC\u06A9 `locale` \u0645\u0634\u062E\u0635 (\u0648 \u0645\u0646\u0637\u0642\u0647\u0654 \u0632\u0645\u0627\u0646\u06CC) \u0631\u0627 \u0647\u0645 \u062F\u0631 \u0633\u0631\u0648\u0631 \u0648 \u0647\u0645 \u062F\u0631 \u06A9\u0644\u0627\u06CC\u0646\u062A \u0628\u0647 `Intl.NumberFormat` \u06CC\u0627 `toLocaleString` \u0628\u062F\u0647\u06CC\u062F\u060C \u06CC\u0627 \u0645\u0642\u062F\u0627\u0631 \u0631\u0627 \u0628\u0639\u062F \u0627\u0632 mount \u0642\u0627\u0644\u0628\u200C\u0628\u0646\u062F\u06CC \u06A9\u0646\u06CC\u062F \u062A\u0627 \u0641\u0642\u0637 \u062A\u0646\u0638\u06CC\u0645\u0627\u062A \u06A9\u0644\u0627\u06CC\u0646\u062A \u0628\u0647 \u06A9\u0627\u0631 \u0631\u0648\u062F."
264
+ },
265
+ "locale-format.separators": {
266
+ explanation: "\u06CC\u06A9 \u0639\u062F\u062F \u0628\u0627 \u062C\u062F\u0627\u06A9\u0646\u0646\u062F\u0647\u0654 \u0647\u0632\u0627\u0631\u06AF\u0627\u0646 \u06CC\u0627 \u062C\u062F\u0627\u06A9\u0646\u0646\u062F\u0647\u0654 \u0627\u0639\u0634\u0627\u0631 \u0645\u062A\u0641\u0627\u0648\u062A \u0628\u06CC\u0646 \u0633\u0631\u0648\u0631 \u0648 \u06A9\u0644\u0627\u06CC\u0646\u062A \u0642\u0627\u0644\u0628\u200C\u0628\u0646\u062F\u06CC \u0634\u062F\u0647 \u0627\u0633\u062A (\u0645\u062B\u0644\u0627\u064B `1,234.56` \u062F\u0631 \u0628\u0631\u0627\u0628\u0631 `1.234,56`).",
267
+ suggestion: "\u06CC\u06A9 \u062A\u0646\u0638\u06CC\u0645 \u0645\u0646\u0637\u0642\u0647\u200C\u0627\u06CC \u0645\u0634\u062E\u0635 \u0631\u0627 \u062F\u0631 \u0647\u0631 \u062F\u0648 \u0637\u0631\u0641 \u0628\u0647 `Intl.NumberFormat` \u06CC\u0627 `toLocaleString` \u0628\u062F\u0647\u06CC\u062F \u062A\u0627 \u062C\u062F\u0627\u06A9\u0646\u0646\u062F\u0647\u200C\u0647\u0627 \u06CC\u06A9\u0633\u0627\u0646 \u0634\u0648\u0646\u062F."
268
+ },
269
+ "locale-format.date-order": {
270
+ explanation: "\u06CC\u06A9 \u062A\u0627\u0631\u06CC\u062E \u0628\u0627 \u062A\u0631\u062A\u06CC\u0628 \u0628\u062E\u0634\u200C\u0647\u0627\u06CC \u0645\u062A\u0641\u0627\u0648\u062A (`MM/DD` \u062F\u0631 \u0628\u0631\u0627\u0628\u0631 `DD/MM`) \u0628\u06CC\u0646 \u0633\u0631\u0648\u0631 \u0648 \u06A9\u0644\u0627\u06CC\u0646\u062A \u0646\u0645\u0627\u06CC\u0634 \u062F\u0627\u062F\u0647 \u0634\u062F\u0647 \u0627\u0633\u062A.",
271
+ suggestion: "\u062A\u0627\u0631\u06CC\u062E\u200C\u0647\u0627 \u0631\u0627 \u0628\u0627 \u062A\u0646\u0638\u06CC\u0645 \u0645\u0646\u0637\u0642\u0647\u200C\u0627\u06CC \u0648 \u0645\u0646\u0637\u0642\u0647\u0654 \u0632\u0645\u0627\u0646\u06CC \u0645\u0634\u062E\u0635 \u0627\u0632 \u0637\u0631\u06CC\u0642 `Intl` \u062F\u0631 \u0647\u0631 \u062F\u0648 \u0637\u0631\u0641 \u0642\u0627\u0644\u0628\u200C\u0628\u0646\u062F\u06CC \u06A9\u0646\u06CC\u062F."
272
+ },
273
+ "browser-only-api": {
274
+ explanation: "\u06A9\u0644\u0627\u06CC\u0646\u062A \u0645\u062D\u062A\u0648\u0627\u06CC\u06CC \u0631\u0646\u062F\u0631 \u06A9\u0631\u062F \u06A9\u0647 \u0633\u0631\u0648\u0631 \u062E\u0627\u0644\u06CC \u06AF\u0630\u0627\u0634\u062A\u0647 \u0628\u0648\u062F \u2014 \u0646\u0634\u0627\u0646\u0647\u0654 \u062E\u0648\u0627\u0646\u062F\u0646 \u06CC\u06A9 API \u0645\u062E\u0635\u0648\u0635 \u0645\u0631\u0648\u0631\u06AF\u0631 (`window`\u060C `document`\u060C `localStorage`\u060C `navigator`\u060C `matchMedia`) \u0647\u0646\u06AF\u0627\u0645 \u0631\u0646\u062F\u0631.",
275
+ suggestion: "\u062E\u0648\u0627\u0646\u062F\u0646 \u0627\u0632 \u0645\u0631\u0648\u0631\u06AF\u0631 \u0631\u0627 \u067E\u0634\u062A \u06CC\u06A9 \u067E\u0631\u0686\u0645 mount \u06CC\u0627 \u062F\u0627\u062E\u0644 `useEffect` \u0642\u0631\u0627\u0631 \u062F\u0647\u06CC\u062F\u060C \u06CC\u0627 \u0627\u0632 `useSyncExternalStore` \u0628\u0627 snapshot \u0633\u0631\u0648\u0631 \u0627\u0633\u062A\u0641\u0627\u062F\u0647 \u06A9\u0646\u06CC\u062F \u062A\u0627 \u0627\u0648\u0644\u06CC\u0646 \u0631\u0646\u062F\u0631 \u06A9\u0644\u0627\u06CC\u0646\u062A \u0628\u0627 \u0633\u0631\u0648\u0631 \u06CC\u06A9\u0633\u0627\u0646 \u0628\u0627\u0634\u062F."
276
+ },
277
+ "viewport-branching": {
278
+ explanation: "\u06CC\u06A9 \u0632\u06CC\u0631\u062F\u0631\u062E\u062A \u06A9\u0627\u0645\u0644 \u0628\u06CC\u0646 \u0633\u0631\u0648\u0631 \u0648 \u06A9\u0644\u0627\u06CC\u0646\u062A \u0627\u0636\u0627\u0641\u0647\u060C \u062D\u0630\u0641 \u06CC\u0627 \u062C\u0627\u06CC\u06AF\u0632\u06CC\u0646 \u0634\u062F\u0647 \u0627\u0633\u062A \u2014 \u0645\u0639\u0645\u0648\u0644\u0627\u064B \u06CC\u06A9 \u0628\u0631\u0631\u0633\u06CC \u0639\u0631\u0636 \u0635\u0641\u062D\u0647 \u062F\u0631 JavaScript \u06A9\u0647 \u062F\u0631\u062E\u062A \u0631\u0627 \u062F\u0631 \u0627\u0648\u0644\u06CC\u0646 \u0631\u0646\u062F\u0631 \u062F\u0648\u0634\u0627\u062E\u0647 \u0645\u06CC\u200C\u06A9\u0646\u062F.",
279
+ suggestion: "\u0647\u0631 \u062F\u0648 \u0634\u0627\u062E\u0647 \u0631\u0627 \u0631\u0646\u062F\u0631 \u06A9\u0646\u06CC\u062F \u0648 \u062F\u0631 \u0627\u0648\u0644\u06CC\u0646 \u0646\u0645\u0627\u06CC\u0634 \u0628\u0627 media query\u0647\u0627\u06CC CSS \u0628\u06CC\u0646\u0634\u0627\u0646 \u062C\u0627\u0628\u0647\u200C\u062C\u0627 \u0634\u0648\u06CC\u062F\u060C \u0646\u0647 \u0628\u0627 \u0627\u0646\u0634\u0639\u0627\u0628 \u062F\u0631 JavaScript\u061B \u06CC\u0627 \u0634\u0627\u062E\u0647\u0654 \u0648\u0627\u0628\u0633\u062A\u0647 \u0628\u0647 JavaScript \u0631\u0627 \u062A\u0627 \u0628\u0639\u062F \u0627\u0632 mount \u0628\u0647 \u062A\u0639\u0648\u06CC\u0642 \u0628\u06CC\u0646\u062F\u0627\u0632\u06CC\u062F."
280
+ },
281
+ "invalid-html-nesting": {
282
+ explanation: "\u06CC\u06A9 \u06AF\u0631\u0647 \u062C\u0627\u0628\u0647\u200C\u062C\u0627 \u06CC\u0627 \u0628\u06CC\u0631\u0648\u0646 \u0631\u0627\u0646\u062F\u0647 \u0634\u062F \u0686\u0648\u0646 HTML \u0646\u0627\u0645\u0639\u062A\u0628\u0631 \u0627\u0633\u062A (\u0645\u062B\u0644\u0627\u064B `<div>` \u062F\u0627\u062E\u0644 `<p>`\u060C \u06CC\u0627 `<a>` \u062F\u0627\u062E\u0644 `<a>`). \u0645\u0631\u0648\u0631\u06AF\u0631 DOM \u0631\u0633\u06CC\u062F\u0647 \u0627\u0632 \u0633\u0631\u0648\u0631 \u0631\u0627 \u0627\u0635\u0644\u0627\u062D \u0645\u06CC\u200C\u06A9\u0646\u062F \u0648 \u062F\u06CC\u06AF\u0631 \u0628\u0627 \u0627\u0646\u062A\u0638\u0627\u0631 React \u0645\u0637\u0627\u0628\u0642\u062A \u0646\u062F\u0627\u0631\u062F.",
283
+ suggestion: "\u0627\u0639\u062A\u0628\u0627\u0631 HTML \u0631\u0627 \u062F\u0631\u0633\u062A \u06A9\u0646\u06CC\u062F: \u0639\u0646\u0635\u0631\u0647\u0627\u06CC \u0628\u0644\u0648\u06A9\u06CC \u0646\u0645\u06CC\u200C\u062A\u0648\u0627\u0646\u0646\u062F \u062F\u0627\u062E\u0644 `<p>` \u0628\u0627\u0634\u0646\u062F\u060C \u067E\u06CC\u0648\u0646\u062F\u0647\u0627 \u0646\u0645\u06CC\u200C\u062A\u0648\u0627\u0646\u0646\u062F \u062A\u0648\u062F\u0631\u062A\u0648 \u0628\u0627\u0634\u0646\u062F \u0648 \u0645\u0627\u0646\u0646\u062F \u0622\u0646. \u0648\u0627\u0644\u062F \u0646\u0627\u0645\u0639\u062A\u0628\u0631 \u0631\u0627 \u0628\u0627 `<div>` \u062C\u0627\u06CC\u06AF\u0632\u06CC\u0646 \u06A9\u0646\u06CC\u062F \u06CC\u0627 \u0633\u0627\u062E\u062A\u0627\u0631 \u062F\u0631\u062E\u062A \u0631\u0627 \u062A\u063A\u06CC\u06CC\u0631 \u062F\u0647\u06CC\u062F."
284
+ },
285
+ "whitespace-minification": {
286
+ explanation: "\u062A\u0641\u0627\u0648\u062A \u0641\u0642\u0637 \u062F\u0631 \u0641\u0627\u0635\u0644\u0647\u200C\u0647\u0627\u0633\u062A \u2014 \u0645\u062A\u0646 \u062C\u0632 \u0641\u0627\u0635\u0644\u0647\u200C\u0647\u0627 \u0648 \u062E\u0637\u200C\u0647\u0627\u06CC \u062C\u062F\u06CC\u062F \u06CC\u06A9\u0633\u0627\u0646 \u0627\u0633\u062A. \u0627\u062D\u062A\u0645\u0627\u0644\u0627\u064B \u06CC\u06A9 \u06A9\u0648\u0686\u06A9\u200C\u06A9\u0646\u0646\u062F\u0647\u0654 HTML \u0641\u0627\u0635\u0644\u0647\u200C\u0647\u0627\u06CC \u0627\u0637\u0631\u0627\u0641 \u0631\u06CC\u0634\u0647\u0654 Hydration \u0631\u0627 \u0645\u062A\u0641\u0627\u0648\u062A \u0628\u0627 React \u0641\u0634\u0631\u062F\u0647 \u06A9\u0631\u062F\u0647 \u0627\u0633\u062A.",
287
+ suggestion: "\u062A\u0646\u0638\u06CC\u0645\u0627\u062A \u06A9\u0648\u0686\u06A9\u200C\u06A9\u0646\u0646\u062F\u0647\u0654 HTML (\u0645\u062B\u0644\u0627\u064B `conservativeCollapse`) \u0631\u0627 \u0627\u0637\u0631\u0627\u0641 \u0631\u06CC\u0634\u0647\u0654 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0631\u0631\u0633\u06CC \u06A9\u0646\u06CC\u062F\u060C \u06CC\u0627 \u0627\u0632 \u06A9\u0648\u0686\u06A9\u200C\u0633\u0627\u0632\u06CC \u0641\u0627\u0635\u0644\u0647\u200C\u0647\u0627 \u062F\u0631 markup\u06CC \u06A9\u0647 Hydration \u0645\u06CC\u200C\u0634\u0648\u062F \u067E\u0631\u0647\u06CC\u0632 \u06A9\u0646\u06CC\u062F."
288
+ },
289
+ "third-party-dom-mutation.extension-attribute": {
290
+ explanation: "\u0648\u06CC\u0698\u06AF\u06CC `{attribute}` \u067E\u06CC\u0634 \u0627\u0632 Hydration \u062A\u0648\u0633\u0637 \u06CC\u06A9 \u0627\u0641\u0632\u0648\u0646\u0647\u0654 \u0645\u0631\u0648\u0631\u06AF\u0631 \u06CC\u0627 \u0627\u0633\u06A9\u0631\u06CC\u067E\u062A \u0634\u062E\u0635 \u062B\u0627\u0644\u062B (\u0645\u062B\u0644\u0627\u064B Grammarly \u06CC\u0627 ColorZilla) \u062A\u0632\u0631\u06CC\u0642 \u0634\u062F\u0647 \u0627\u0633\u062A\u060C \u0628\u0646\u0627\u0628\u0631\u0627\u06CC\u0646 DOM \u06A9\u0644\u0627\u06CC\u0646\u062A \u062F\u06CC\u06AF\u0631 \u0628\u0627 \u0633\u0631\u0648\u0631 \u06CC\u06A9\u0633\u0627\u0646 \u0646\u06CC\u0633\u062A.",
291
+ suggestion: "\u0645\u0639\u0645\u0648\u0644\u0627\u064B \u0628\u06CC\u200C\u0636\u0631\u0631 \u0627\u0633\u062A. `suppressHydrationWarning` \u0631\u0627 \u0628\u0647 \u0639\u0646\u0635\u0631 \u0645\u0631\u0628\u0648\u0637 \u0627\u0636\u0627\u0641\u0647 \u06A9\u0646\u06CC\u062F\u060C \u06CC\u0627 \u0631\u0627\u0647\u200C\u0627\u0646\u062F\u0627\u0632\u06CC \u0627\u0633\u06A9\u0631\u06CC\u067E\u062A \u062E\u0627\u0631\u062C\u06CC \u0631\u0627 \u062A\u0627 \u0628\u0639\u062F \u0627\u0632 Hydration \u0628\u0647 \u062A\u0639\u0648\u06CC\u0642 \u0628\u06CC\u0646\u062F\u0627\u0632\u06CC\u062F."
292
+ },
293
+ "third-party-dom-mutation.root-attribute": {
294
+ explanation: "\u0648\u06CC\u0698\u06AF\u06CC\u200C\u0627\u06CC (`{attribute}`) \u0631\u0648\u06CC \u06CC\u06A9 \u0639\u0646\u0635\u0631 \u0631\u06CC\u0634\u0647 \u0638\u0627\u0647\u0631 \u0634\u062F \u06A9\u0647 \u0633\u0631\u0648\u0631 \u0647\u0631\u06AF\u0632 \u0646\u0641\u0631\u0633\u062A\u0627\u062F\u0647 \u0628\u0648\u062F \u2014 \u0646\u0634\u0627\u0646\u0647\u0654 \u0628\u0627\u0631\u0632 \u06CC\u06A9 \u0627\u0641\u0632\u0648\u0646\u0647 \u06CC\u0627 \u0627\u0633\u06A9\u0631\u06CC\u067E\u062A \u0634\u062E\u0635 \u062B\u0627\u0644\u062B \u0632\u0648\u062F\u0647\u0646\u06AF\u0627\u0645 \u06A9\u0647 DOM \u0631\u0627 \u062A\u063A\u06CC\u06CC\u0631 \u0645\u06CC\u200C\u062F\u0647\u062F.",
295
+ suggestion: "`suppressHydrationWarning` \u0631\u0627 \u0628\u0647 \u0639\u0646\u0635\u0631 \u0631\u06CC\u0634\u0647 \u0627\u0636\u0627\u0641\u0647 \u06A9\u0646\u06CC\u062F\u060C \u06CC\u0627 \u0627\u0633\u06A9\u0631\u06CC\u067E\u062A \u062E\u0627\u0631\u062C\u06CC \u0631\u0627 \u062A\u0627 \u0628\u0639\u062F \u0627\u0632 Hydration \u0628\u0647 \u062A\u0639\u0648\u06CC\u0642 \u0628\u06CC\u0646\u062F\u0627\u0632\u06CC\u062F."
296
+ },
297
+ "third-party-dom-mutation.injected-node": {
298
+ explanation: (p) => [
299
+ "\u06CC\u06A9 \u0627\u0633\u06A9\u0631\u06CC\u067E\u062A \u0634\u062E\u0635 \u062B\u0627\u0644\u062B \u06CC\u0627 \u0627\u0641\u0632\u0648\u0646\u0647\u0654 \u0645\u0631\u0648\u0631\u06AF\u0631 \u0639\u0646\u0635\u0631 ",
300
+ chunkQFHUKJ5K_cjs.code(chunkQFHUKJ5K_cjs.param(p, "tag")),
301
+ " \u0631\u0627 \u067E\u0633 \u0627\u0632 \u0631\u0646\u062F\u0631 \u0633\u0631\u0648\u0631 \u062A\u0632\u0631\u06CC\u0642 \u06A9\u0631\u062F (\u062A\u0628\u0644\u06CC\u063A\u0627\u062A\u060C \u0631\u0636\u0627\u06CC\u062A\u200C\u0646\u0627\u0645\u0647\u060C \u0622\u0646\u0627\u0644\u06CC\u062A\u06CC\u06A9\u0633 \u06CC\u0627 \u0686\u062A). \u0627\u06CC\u0646 \u0628\u062E\u0634\u06CC \u0627\u0632 Hydration \u0628\u0631\u0646\u0627\u0645\u0647\u0654 \u0634\u0645\u0627 \u0646\u06CC\u0633\u062A\u060C \u067E\u0633 \u0645\u0639\u0645\u0648\u0644\u0627\u064B \u0646\u0648\u06CC\u0632\u06CC \u0628\u06CC\u200C\u0636\u0631\u0631 \u0627\u0633\u062A."
302
+ ],
303
+ suggestion: '\u0627\u06AF\u0631 React \u062F\u0631\u0628\u0627\u0631\u0647\u0654 \u0622\u0646 \u0647\u0634\u062F\u0627\u0631 \u0645\u06CC\u200C\u062F\u0647\u062F\u060C `suppressHydrationWarning` \u0631\u0627 \u0628\u0647 \u0646\u0632\u062F\u06CC\u06A9\u200C\u062A\u0631\u06CC\u0646 \u067E\u0648\u0634\u0634 \u0631\u0646\u062F\u0631\u0634\u062F\u0647 \u062F\u0631 \u0633\u0631\u0648\u0631 \u0627\u0636\u0627\u0641\u0647 \u06A9\u0646\u06CC\u062F\u060C \u06CC\u0627 \u0627\u0633\u06A9\u0631\u06CC\u067E\u062A \u062E\u0627\u0631\u062C\u06CC \u0631\u0627 \u0628\u0639\u062F \u0627\u0632 Hydration \u0628\u0627\u0631\u06AF\u0630\u0627\u0631\u06CC \u06A9\u0646\u06CC\u062F (\u0645\u062B\u0644\u0627\u064B `<Script strategy="afterInteractive">` \u062F\u0631 Next.js).'
304
+ },
305
+ "attribute-mismatch.class": {
306
+ explanation: (p) => [
307
+ "\u0648\u06CC\u0698\u06AF\u06CC ",
308
+ chunkQFHUKJ5K_cjs.code("class"),
309
+ " \u0628\u06CC\u0646 \u0633\u0631\u0648\u0631 \u0648 \u06A9\u0644\u0627\u06CC\u0646\u062A \u0641\u0631\u0642 \u062F\u0627\u0631\u062F",
310
+ ...chunkQFHUKJ5K_cjs.classDetail(p, {
311
+ added: "\u062F\u0631 \u06A9\u0644\u0627\u06CC\u0646\u062A \u0627\u0636\u0627\u0641\u0647 \u0634\u062F: ",
312
+ removed: "\u062F\u0631 \u06A9\u0644\u0627\u06CC\u0646\u062A \u062D\u0630\u0641 \u0634\u062F: ",
313
+ listSeparator: "\u060C ",
314
+ partSeparator: "\u061B ",
315
+ open: " (",
316
+ close: ")"
317
+ }),
318
+ ". \u06CC\u06A9 \u06A9\u0644\u0627\u0633 \u0628\u0647\u200C\u0635\u0648\u0631\u062A \u0634\u0631\u0637\u06CC \u062F\u0631 \u06A9\u0644\u0627\u06CC\u0646\u062A \u0627\u0639\u0645\u0627\u0644 \u0634\u062F\u0647 \u0627\u0633\u062A \u2014 \u0645\u0639\u0645\u0648\u0644\u0627\u064B \u0628\u0631\u0631\u0633\u06CC \u0627\u0646\u062F\u0627\u0632\u0647\u0654 \u0635\u0641\u062D\u0647\u060C media query\u060C \u062A\u0645 \u06CC\u0627 feature flag \u06A9\u0647 \u062F\u0631 \u0627\u0648\u0644\u06CC\u0646 \u0631\u0646\u062F\u0631 \u0627\u062C\u0631\u0627 \u0645\u06CC\u200C\u0634\u0648\u062F."
319
+ ],
320
+ suggestion: "\u0647\u0645\u0627\u0646 `className` \u0631\u0627 \u062F\u0631 \u0633\u0631\u0648\u0631 \u0648 \u0627\u0648\u0644\u06CC\u0646 \u0646\u0645\u0627\u06CC\u0634 \u06A9\u0644\u0627\u06CC\u0646\u062A \u0631\u0646\u062F\u0631 \u06A9\u0646\u06CC\u062F. \u0634\u0631\u0637\u200C\u0647\u0627\u06CC \u0645\u062E\u0635\u0648\u0635 \u06A9\u0644\u0627\u06CC\u0646\u062A \u0631\u0627 \u0628\u0647 `useEffect` \u06CC\u0627 \u06CC\u06A9 \u067E\u0631\u0686\u0645 mount \u0645\u0646\u062A\u0642\u0644 \u06A9\u0646\u06CC\u062F\u060C \u06CC\u0627 \u062A\u063A\u06CC\u06CC\u0631 \u0638\u0627\u0647\u0631\u06CC \u0631\u0627 \u0628\u0627 media query\u0647\u0627\u06CC CSS \u0627\u0646\u062C\u0627\u0645 \u062F\u0647\u06CC\u062F \u0646\u0647 \u0628\u0627 \u062A\u063A\u06CC\u06CC\u0631 \u06A9\u0644\u0627\u0633 \u062F\u0631 JavaScript."
321
+ },
322
+ "attribute-mismatch.style": {
323
+ explanation: "`style` \u062F\u0631\u0648\u0646\u200C\u062E\u0637\u06CC \u0628\u06CC\u0646 \u0633\u0631\u0648\u0631 \u0648 \u06A9\u0644\u0627\u06CC\u0646\u062A \u0641\u0631\u0642 \u062F\u0627\u0631\u062F \u2014 \u06CC\u06A9 \u0627\u0633\u062A\u0627\u06CC\u0644 \u062F\u0631\u0648\u0646\u200C\u062E\u0637\u06CC \u0647\u0646\u06AF\u0627\u0645 \u0631\u0646\u062F\u0631 \u0627\u0632 \u0648\u0636\u0639\u06CC\u062A \u0645\u062E\u0635\u0648\u0635 \u06A9\u0644\u0627\u06CC\u0646\u062A (\u0627\u0646\u062F\u0627\u0632\u0647\u0654 \u0635\u0641\u062D\u0647\u060C \u062A\u0645\u060C \u0645\u0648\u0642\u0639\u06CC\u062A \u0627\u0633\u06A9\u0631\u0648\u0644) \u0645\u062D\u0627\u0633\u0628\u0647 \u0634\u062F\u0647 \u0627\u0633\u062A.",
324
+ suggestion: "\u0627\u0633\u062A\u0627\u06CC\u0644 \u0631\u0627 \u0628\u0639\u062F \u0627\u0632 mount (`useEffect`) \u0645\u062D\u0627\u0633\u0628\u0647 \u06A9\u0646\u06CC\u062F \u062A\u0627 \u0627\u0648\u0644\u06CC\u0646 \u0631\u0646\u062F\u0631 \u06A9\u0644\u0627\u06CC\u0646\u062A \u0628\u0627 \u0633\u0631\u0648\u0631 \u06CC\u06A9\u0633\u0627\u0646 \u0628\u0627\u0634\u062F\u060C \u06CC\u0627 \u0622\u0646 \u0631\u0627 \u0628\u0647 \u06CC\u06A9 \u06A9\u0644\u0627\u0633 CSS \u06CC\u0627 media query \u0645\u0646\u062A\u0642\u0644 \u06A9\u0646\u06CC\u062F."
325
+ },
326
+ "attribute-mismatch.generic": {
327
+ explanation: "\u0648\u06CC\u0698\u06AF\u06CC `{attribute}` \u0628\u06CC\u0646 \u0633\u0631\u0648\u0631 (`{server}`) \u0648 \u06A9\u0644\u0627\u06CC\u0646\u062A (`{client}`) \u0641\u0631\u0642 \u062F\u0627\u0631\u062F \u2014 \u0645\u0642\u062F\u0627\u0631 \u0622\u0646 \u0627\u0632 \u0686\u06CC\u0632\u06CC \u06AF\u0631\u0641\u062A\u0647 \u0634\u062F\u0647 \u06A9\u0647 \u0628\u06CC\u0646 \u0633\u0631\u0648\u0631 \u0648 \u0627\u0648\u0644\u06CC\u0646 \u0631\u0646\u062F\u0631 \u06A9\u0644\u0627\u06CC\u0646\u062A \u0645\u062A\u0641\u0627\u0648\u062A \u0627\u0633\u062A.",
328
+ suggestion: "\u0648\u06CC\u0698\u06AF\u06CC \u0631\u0627 \u062F\u0631 \u0633\u0631\u0648\u0631 \u0648 \u06A9\u0644\u0627\u06CC\u0646\u062A \u0642\u0637\u0639\u06CC \u06A9\u0646\u06CC\u062F\u060C \u06CC\u0627 \u0622\u0646 \u0631\u0627 \u0628\u0639\u062F \u0627\u0632 mount \u062A\u0646\u0638\u06CC\u0645 \u06A9\u0646\u06CC\u062F \u062A\u0627 \u0627\u0648\u0644\u06CC\u0646 \u0631\u0646\u062F\u0631 \u06A9\u0644\u0627\u06CC\u0646\u062A \u0628\u0627 HTML \u0633\u0631\u0648\u0631 \u06CC\u06A9\u0633\u0627\u0646 \u0628\u0627\u0634\u062F."
329
+ },
330
+ unknown: {
331
+ explanation: "\u06CC\u06A9 \u0646\u0627\u0647\u0645\u062E\u0648\u0627\u0646\u06CC Hydration \u067E\u06CC\u062F\u0627 \u0634\u062F \u0627\u0645\u0627 \u0628\u0627 \u0647\u06CC\u0686 \u0639\u0644\u062A \u0634\u0646\u0627\u062E\u062A\u0647\u200C\u0634\u062F\u0647\u200C\u0627\u06CC \u062A\u0637\u0628\u06CC\u0642 \u062F\u0627\u062F\u0647 \u0646\u0634\u062F. \u0645\u0642\u062F\u0627\u0631\u0647\u0627\u06CC \u0633\u0631\u0648\u0631 \u0648 \u06A9\u0644\u0627\u06CC\u0646\u062A \u0631\u0627 \u062F\u0631 \u0628\u0627\u0644\u0627 \u0628\u0631\u0631\u0633\u06CC \u06A9\u0646\u06CC\u062F.",
332
+ suggestion: "\u0645\u0642\u062F\u0627\u0631\u0647\u0627\u06CC \u0633\u0631\u0648\u0631 \u0648 \u06A9\u0644\u0627\u06CC\u0646\u062A \u0631\u0627 \u0645\u0642\u0627\u06CC\u0633\u0647 \u06A9\u0646\u06CC\u062F. \u0639\u0644\u062A\u200C\u0647\u0627\u06CC \u0631\u0627\u06CC\u062C: \u0645\u0642\u062F\u0627\u0631\u0647\u0627\u06CC \u063A\u06CC\u0631\u0642\u0637\u0639\u06CC\u060C \u062A\u0627\u0631\u06CC\u062E\u200C\u0647\u0627 \u0648 \u062A\u0646\u0638\u06CC\u0645\u0627\u062A \u0645\u0646\u0637\u0642\u0647\u200C\u0627\u06CC\u060C \u0648 API\u0647\u0627\u06CC \u0645\u062E\u0635\u0648\u0635 \u0645\u0631\u0648\u0631\u06AF\u0631 \u06A9\u0647 \u0647\u0646\u06AF\u0627\u0645 \u0631\u0646\u062F\u0631 \u0627\u0633\u062A\u0641\u0627\u062F\u0647 \u0645\u06CC\u200C\u0634\u0648\u0646\u062F."
333
+ },
334
+ "unknown.no-location": {
335
+ explanation: "React \u06AF\u0632\u0627\u0631\u0634 \u062F\u0627\u062F \u06A9\u0647 Hydration \u0634\u06A9\u0633\u062A \u062E\u0648\u0631\u062F\u0647 \u0627\u0645\u0627 \u0646\u06AF\u0641\u062A \u06A9\u062F\u0627\u0645 \u06AF\u0631\u0647 \u0645\u062A\u0641\u0627\u0648\u062A \u0628\u0648\u062F\u0647 \u0627\u0633\u062A\u060C \u0648 \u0628\u0631\u0631\u0633\u06CC DOM \u0647\u0645 \u062A\u0641\u0627\u0648\u062A\u06CC \u0628\u0631\u0627\u06CC \u0646\u0634\u0627\u0646 \u062F\u0627\u062F\u0646 \u067E\u06CC\u062F\u0627 \u0646\u06A9\u0631\u062F.",
336
+ suggestion: "\u0645\u0637\u0645\u0626\u0646 \u0634\u0648\u06CC\u062F `<HydrationSnapshotScript>` (\u06CC\u0627 \u0627\u0633\u06A9\u0631\u06CC\u067E\u062A snapshot \u062F\u0633\u062A\u06CC) \u062F\u0627\u062E\u0644 `<head>` \u0627\u0633\u062A \u062A\u0627 \u0628\u0631\u0631\u0633\u06CC DOM \u0628\u062A\u0648\u0627\u0646\u062F \u06AF\u0631\u0647 \u0631\u0627 \u067E\u06CC\u062F\u0627 \u06A9\u0646\u062F\u060C \u0648 \u0647\u0634\u062F\u0627\u0631 \u06A9\u0627\u0645\u0644 React \u0631\u0627 \u062F\u0631 \u06A9\u0646\u0633\u0648\u0644 \u0645\u0631\u0648\u0631\u06AF\u0631 \u0628\u062E\u0648\u0627\u0646\u06CC\u062F."
337
+ }
338
+ };
339
+ var FA = {
340
+ dir: "rtl",
341
+ title: "\u0646\u0627\u0647\u0645\u062E\u0648\u0627\u0646\u06CC \u062F\u0631 Hydration",
342
+ dialogLabel: "\u0639\u06CC\u0628\u200C\u06CC\u0627\u0628\u06CC \u0646\u0627\u0647\u0645\u062E\u0648\u0627\u0646\u06CC Hydration",
343
+ dismiss: "\u0628\u0633\u062A\u0646",
344
+ dismissLabel: "\u0628\u0633\u062A\u0646 \u067E\u0646\u0644 \u0639\u06CC\u0628\u200C\u06CC\u0627\u0628\u06CC",
345
+ hintDismissLabel: "\u067E\u0646\u0647\u0627\u0646 \u06A9\u0631\u062F\u0646 \u0631\u0627\u0647\u0646\u0645\u0627",
346
+ server: "\u0633\u0631\u0648\u0631",
347
+ client: "\u06A9\u0644\u0627\u06CC\u0646\u062A",
348
+ fix: "\u0631\u0627\u0647\u200C\u062D\u0644:",
349
+ // The docs are only written in English, so say so rather than surprise.
350
+ learnMore: "\u0627\u0637\u0644\u0627\u0639\u0627\u062A \u0628\u06CC\u0634\u062A\u0631 (\u0628\u0647 \u0627\u0646\u06AF\u0644\u06CC\u0633\u06CC) \u2190",
351
+ none: "(\u0647\u06CC\u0686)",
352
+ empty: "(\u062E\u0627\u0644\u06CC)",
353
+ fallbackCategory: "\u0646\u0627\u0647\u0645\u062E\u0648\u0627\u0646\u06CC",
354
+ categories: {
355
+ "non-deterministic-value": "\u0645\u0642\u062F\u0627\u0631 \u063A\u06CC\u0631\u0642\u0637\u0639\u06CC",
356
+ "date-time": "\u062A\u0627\u0631\u06CC\u062E / \u0632\u0645\u0627\u0646",
357
+ "locale-format": "\u0642\u0627\u0644\u0628\u200C\u0628\u0646\u062F\u06CC \u0632\u0628\u0627\u0646 \u0648 \u0645\u0646\u0637\u0642\u0647",
358
+ "browser-only-api": "API \u0645\u062E\u0635\u0648\u0635 \u0645\u0631\u0648\u0631\u06AF\u0631",
359
+ "viewport-branching": "\u0627\u0646\u0634\u0639\u0627\u0628 \u0628\u0631 \u0627\u0633\u0627\u0633 \u0627\u0646\u062F\u0627\u0632\u0647\u0654 \u0635\u0641\u062D\u0647",
360
+ "invalid-html-nesting": "\u062A\u0648\u062F\u0631\u062A\u0648\u06CC\u06CC \u0646\u0627\u0645\u0639\u062A\u0628\u0631 HTML",
361
+ "whitespace-minification": "\u0641\u0627\u0635\u0644\u0647\u200C\u0647\u0627 / \u06A9\u0648\u0686\u06A9\u200C\u0633\u0627\u0632\u06CC",
362
+ "third-party-dom-mutation": "\u062A\u063A\u06CC\u06CC\u0631 DOM \u062A\u0648\u0633\u0637 \u0634\u062E\u0635 \u062B\u0627\u0644\u062B",
363
+ "attribute-mismatch": "\u0646\u0627\u0647\u0645\u062E\u0648\u0627\u0646\u06CC \u0648\u06CC\u0698\u06AF\u06CC",
364
+ unknown: "\u0646\u0627\u0645\u0634\u062E\u0635"
365
+ },
366
+ messages: FA_MESSAGES,
367
+ hint: (count) => `\u2193 ${count === 1 ? "\u06CC\u06A9 \u0645\u0634\u06A9\u0644" : `${count} \u0645\u0634\u06A9\u0644`} \u2014 \u0628\u0631\u0627\u06CC \u062F\u06CC\u062F\u0646 \u0647\u0645\u0647 \u0627\u0633\u06A9\u0631\u0648\u0644 \u06A9\u0646\u06CC\u062F`
368
+ };
369
+
370
+ // src/react/locales/he.ts
371
+ var HE_MESSAGES = {
372
+ "non-deterministic-value": {
373
+ explanation: "\u05D4\u05E9\u05E8\u05EA \u05D5\u05D4\u05DC\u05E7\u05D5\u05D7 \u05E8\u05D9\u05E0\u05D3\u05E8\u05D5 \u05E2\u05E8\u05DB\u05D9\u05DD \u05E9\u05D5\u05E0\u05D9\u05DD \u05E9\u05E0\u05E8\u05D0\u05D9\u05DD \u05D0\u05E7\u05E8\u05D0\u05D9\u05D9\u05DD (\u05DE\u05D6\u05D4\u05D4, \u05D8\u05D5\u05E7\u05DF \u05D0\u05D5 \u05EA\u05D5\u05E6\u05D0\u05D4 \u05E9\u05DC `Math.random()`). \u05DB\u05DC \u05D3\u05D1\u05E8 \u05DC\u05D0 \u05D3\u05D8\u05E8\u05DE\u05D9\u05E0\u05D9\u05E1\u05D8\u05D9 \u05D1\u05E8\u05D9\u05E0\u05D3\u05D5\u05E8 \u05DE\u05E4\u05D9\u05E7 \u05E2\u05E8\u05DA \u05E9\u05D5\u05E0\u05D4 \u05D1\u05DB\u05DC \u05E6\u05D3.",
374
+ suggestion: "\u05D4\u05E9\u05EA\u05DE\u05E9\u05D5 \u05D1-`useId()` \u05E9\u05DC React \u05E2\u05D1\u05D5\u05E8 \u05DE\u05D6\u05D4\u05D9\u05DD. \u05E2\u05E8\u05DB\u05D9\u05DD \u05D0\u05E7\u05E8\u05D0\u05D9\u05D9\u05DD \u05E6\u05E8\u05D5 \u05D0\u05D7\u05E8\u05D9 \u05D4\u05D8\u05E2\u05D9\u05E0\u05D4 (\u05D1\u05EA\u05D5\u05DA `useEffect`) \u05D0\u05D5 \u05D4\u05E2\u05D1\u05D9\u05E8\u05D5 \u05E2\u05E8\u05DA \u05DE\u05D4\u05E9\u05E8\u05EA \u05DB\u05D3\u05D9 \u05E9\u05E9\u05E0\u05D9 \u05D4\u05E6\u05D3\u05D3\u05D9\u05DD \u05D9\u05E1\u05DB\u05D9\u05DE\u05D5. \u05D0\u05DC \u05EA\u05E7\u05E8\u05D0\u05D5 \u05DC-`Math.random()` \u05D0\u05D5 \u05DC-`crypto` \u05D1\u05D6\u05DE\u05DF \u05E8\u05D9\u05E0\u05D3\u05D5\u05E8."
375
+ },
376
+ "date-time": {
377
+ explanation: "\u05D4\u05E2\u05E8\u05DB\u05D9\u05DD \u05D4\u05DD \u05EA\u05D0\u05E8\u05D9\u05DB\u05D9\u05DD \u05D0\u05D5 \u05E9\u05E2\u05D5\u05EA \u05E9\u05E9\u05D5\u05E0\u05D9\u05DD \u05D1\u05D9\u05DF \u05E8\u05D9\u05E0\u05D3\u05D5\u05E8 \u05D4\u05E9\u05E8\u05EA \u05DC\u05E8\u05D9\u05E0\u05D3\u05D5\u05E8 \u05D4\u05DC\u05E7\u05D5\u05D7 \u2014 \u05D4\u05E9\u05E2\u05D5\u05DF \u05D4\u05EA\u05E7\u05D3\u05DD (\u05D0\u05D5 \u05E9\u05D0\u05D6\u05D5\u05E8 \u05D4\u05D6\u05DE\u05DF \u05E9\u05D5\u05E0\u05D4) \u05D1\u05D9\u05DF \u05E9\u05EA\u05D9 \u05D4\u05E1\u05D1\u05D9\u05D1\u05D5\u05EA.",
378
+ suggestion: "\u05D4\u05E6\u05D9\u05D2\u05D5 \u05D0\u05EA \u05D4\u05E9\u05E2\u05D4 \u05D4\u05E0\u05D5\u05DB\u05D7\u05D9\u05EA \u05D0\u05D7\u05E8\u05D9 \u05D4\u05D8\u05E2\u05D9\u05E0\u05D4, \u05D0\u05D5 \u05D4\u05E2\u05D1\u05D9\u05E8\u05D5 \u05D7\u05D5\u05EA\u05DE\u05EA \u05D6\u05DE\u05DF \u05D0\u05D7\u05EA \u05DE\u05D4\u05E9\u05E8\u05EA \u05D5\u05E2\u05E6\u05D1\u05D5 \u05D0\u05D5\u05EA\u05D4 \u05D1\u05D0\u05D5\u05EA\u05D5 \u05D0\u05D5\u05E4\u05DF \u05D1\u05E9\u05E0\u05D9 \u05D4\u05E6\u05D3\u05D3\u05D9\u05DD. \u05E7\u05D1\u05E2\u05D5 \u05D0\u05D6\u05D5\u05E8 \u05D6\u05DE\u05DF \u05DE\u05E4\u05D5\u05E8\u05E9 \u05D1\u05E2\u05EA \u05D4\u05E2\u05D9\u05E6\u05D5\u05D1."
379
+ },
380
+ "locale-format.bidi": {
381
+ explanation: "\u05D4\u05E2\u05E8\u05DB\u05D9\u05DD \u05E9\u05D5\u05E0\u05D9\u05DD \u05E8\u05E7 \u05D1\u05EA\u05D5\u05D5\u05D9 \u05D1\u05E7\u05E8\u05D4 \u05D3\u05D5-\u05DB\u05D9\u05D5\u05D5\u05E0\u05D9\u05D9\u05DD \u05D1\u05DC\u05EA\u05D9 \u05E0\u05E8\u05D0\u05D9\u05DD (`LRM`, `RLM` \u05D5\u05EA\u05D5\u05D5\u05D9 \u05D1\u05D9\u05D3\u05D5\u05D3). `Intl` \u05DE\u05D5\u05E1\u05D9\u05E3 \u05D0\u05D5\u05EA\u05DD \u05E1\u05D1\u05D9\u05D1 \u05DE\u05E1\u05E4\u05E8\u05D9\u05DD \u05D5\u05EA\u05D0\u05E8\u05D9\u05DB\u05D9\u05DD \u05D1\u05E9\u05E4\u05D5\u05EA \u05DE\u05D9\u05DE\u05D9\u05DF \u05DC\u05E9\u05DE\u05D0\u05DC, \u05D5\u05D2\u05E8\u05E1\u05D0\u05D5\u05EA ICU \u05E9\u05D5\u05E0\u05D5\u05EA \u2014 Node \u05DC\u05E2\u05D5\u05DE\u05EA \u05D4\u05D3\u05E4\u05D3\u05E4\u05DF \u2014 \u05DE\u05D5\u05E1\u05D9\u05E4\u05D5\u05EA \u05EA\u05D5\u05D5\u05D9\u05DD \u05E9\u05D5\u05E0\u05D9\u05DD \u05DC\u05D0\u05D5\u05EA\u05D5 \u05E7\u05DC\u05D8.",
382
+ suggestion: "\u05E2\u05E6\u05D1\u05D5 \u05D0\u05EA \u05D4\u05E2\u05E8\u05DA \u05D1\u05DE\u05E7\u05D5\u05DD \u05D0\u05D7\u05D3 \u05D5\u05D4\u05E2\u05D1\u05D9\u05E8\u05D5 \u05D0\u05EA \u05D4\u05DE\u05D7\u05E8\u05D5\u05D6\u05EA \u05D4\u05DC\u05D0\u05D4, \u05D0\u05D5 \u05E7\u05D1\u05E2\u05D5 \u05D0\u05EA \u05D0\u05D5\u05EA\u05D4 \u05E9\u05E4\u05D4 \u05D5\u05D0\u05D5\u05EA\u05D5 \u05D0\u05D6\u05D5\u05E8 \u05D6\u05DE\u05DF \u05D1\u05E9\u05E0\u05D9 \u05D4\u05E6\u05D3\u05D3\u05D9\u05DD. \u05D0\u05DD \u05D4\u05EA\u05D5\u05D5\u05D9\u05DD \u05D0\u05D9\u05E0\u05DD \u05DE\u05D6\u05D9\u05E7\u05D9\u05DD, \u05D4\u05D5\u05E1\u05D9\u05E4\u05D5 `suppressHydrationWarning` \u05DC\u05D0\u05DC\u05DE\u05E0\u05D8."
383
+ },
384
+ "locale-format.script": {
385
+ explanation: "\u05D0\u05D5\u05EA\u05D5 \u05E2\u05E8\u05DA \u05E2\u05D5\u05E6\u05D1 \u05D1\u05DE\u05E2\u05E8\u05DB\u05D5\u05EA \u05E1\u05E4\u05E8\u05D5\u05EA \u05E9\u05D5\u05E0\u05D5\u05EA (\u05E1\u05E4\u05E8\u05D5\u05EA \u05E2\u05E8\u05D1\u05D9\u05D5\u05EA-\u05D4\u05D5\u05D3\u05D9\u05D5\u05EA `\u0660\u0661\u0662` \u05DC\u05E2\u05D5\u05DE\u05EA \u05E1\u05E4\u05E8\u05D5\u05EA \u05DC\u05D8\u05D9\u05E0\u05D9\u05D5\u05EA `012`). \u05D4\u05E9\u05E8\u05EA \u05D5\u05D4\u05DC\u05E7\u05D5\u05D7 \u05D1\u05D7\u05E8\u05D5 \u05D4\u05D2\u05D3\u05E8\u05D5\u05EA \u05D0\u05D6\u05D5\u05E8 \u05E9\u05D5\u05E0\u05D5\u05EA.",
386
+ suggestion: "\u05D4\u05E2\u05D1\u05D9\u05E8\u05D5 `locale` \u05DE\u05E4\u05D5\u05E8\u05E9 (\u05D5\u05D0\u05D6\u05D5\u05E8 \u05D6\u05DE\u05DF) \u05DC-`Intl.NumberFormat` \u05D0\u05D5 \u05DC-`toLocaleString` \u05D2\u05DD \u05D1\u05E9\u05E8\u05EA \u05D5\u05D2\u05DD \u05D1\u05DC\u05E7\u05D5\u05D7, \u05D0\u05D5 \u05E2\u05E6\u05D1\u05D5 \u05D0\u05EA \u05D4\u05E2\u05E8\u05DA \u05D0\u05D7\u05E8\u05D9 \u05D4\u05D8\u05E2\u05D9\u05E0\u05D4 \u05DB\u05DA \u05E9\u05E8\u05E7 \u05D4\u05D2\u05D3\u05E8\u05EA \u05D4\u05DC\u05E7\u05D5\u05D7 \u05EA\u05E9\u05DE\u05E9."
387
+ },
388
+ "locale-format.separators": {
389
+ explanation: "\u05D0\u05D5\u05EA\u05D5 \u05DE\u05E1\u05E4\u05E8 \u05E2\u05D5\u05E6\u05D1 \u05E2\u05DD \u05DE\u05E4\u05E8\u05D9\u05D3\u05D9 \u05D0\u05DC\u05E4\u05D9\u05DD \u05D0\u05D5 \u05DE\u05E4\u05E8\u05D9\u05D3\u05D9\u05DD \u05E2\u05E9\u05E8\u05D5\u05E0\u05D9\u05D9\u05DD \u05E9\u05D5\u05E0\u05D9\u05DD \u05D1\u05D9\u05DF \u05D4\u05E9\u05E8\u05EA \u05DC\u05DC\u05E7\u05D5\u05D7 (\u05DC\u05DE\u05E9\u05DC `1,234.56` \u05DC\u05E2\u05D5\u05DE\u05EA `1.234,56`).",
390
+ suggestion: "\u05D4\u05E2\u05D1\u05D9\u05E8\u05D5 \u05D4\u05D2\u05D3\u05E8\u05EA \u05D0\u05D6\u05D5\u05E8 \u05DE\u05E4\u05D5\u05E8\u05E9\u05EA \u05DC-`Intl.NumberFormat` \u05D0\u05D5 \u05DC-`toLocaleString` \u05D1\u05E9\u05E0\u05D9 \u05D4\u05E6\u05D3\u05D3\u05D9\u05DD \u05DB\u05D3\u05D9 \u05E9\u05D4\u05DE\u05E4\u05E8\u05D9\u05D3\u05D9\u05DD \u05D9\u05EA\u05D0\u05D9\u05DE\u05D5."
391
+ },
392
+ "locale-format.date-order": {
393
+ explanation: "\u05D0\u05D5\u05EA\u05D5 \u05EA\u05D0\u05E8\u05D9\u05DA \u05D4\u05D5\u05E6\u05D2 \u05D1\u05E1\u05D3\u05E8 \u05E9\u05D3\u05D5\u05EA \u05E9\u05D5\u05E0\u05D4 (`MM/DD` \u05DC\u05E2\u05D5\u05DE\u05EA `DD/MM`) \u05D1\u05D9\u05DF \u05D4\u05E9\u05E8\u05EA \u05DC\u05DC\u05E7\u05D5\u05D7.",
394
+ suggestion: "\u05E2\u05E6\u05D1\u05D5 \u05EA\u05D0\u05E8\u05D9\u05DB\u05D9\u05DD \u05E2\u05DD \u05D4\u05D2\u05D3\u05E8\u05EA \u05D0\u05D6\u05D5\u05E8 \u05D5\u05D0\u05D6\u05D5\u05E8 \u05D6\u05DE\u05DF \u05DE\u05E4\u05D5\u05E8\u05E9\u05D9\u05DD \u05D1\u05D0\u05DE\u05E6\u05E2\u05D5\u05EA `Intl` \u05D1\u05E9\u05E0\u05D9 \u05D4\u05E6\u05D3\u05D3\u05D9\u05DD."
395
+ },
396
+ "browser-only-api": {
397
+ explanation: "\u05D4\u05DC\u05E7\u05D5\u05D7 \u05E8\u05D9\u05E0\u05D3\u05E8 \u05EA\u05D5\u05DB\u05DF \u05E9\u05D4\u05E9\u05E8\u05EA \u05D4\u05E9\u05D0\u05D9\u05E8 \u05E8\u05D9\u05E7 \u2014 \u05E1\u05D9\u05DE\u05DF \u05DE\u05D5\u05D1\u05D4\u05E7 \u05DC\u05E7\u05E8\u05D9\u05D0\u05D4 \u05DC-API \u05E9\u05E7\u05D9\u05D9\u05DD \u05E8\u05E7 \u05D1\u05D3\u05E4\u05D3\u05E4\u05DF (`window`, `document`, `localStorage`, `navigator`, `matchMedia`) \u05D1\u05D6\u05DE\u05DF \u05E8\u05D9\u05E0\u05D3\u05D5\u05E8.",
398
+ suggestion: "\u05D4\u05EA\u05E0\u05D5 \u05E7\u05E8\u05D9\u05D0\u05D5\u05EA \u05DE\u05D4\u05D3\u05E4\u05D3\u05E4\u05DF \u05D1\u05D3\u05D2\u05DC \u05D8\u05E2\u05D9\u05E0\u05D4 \u05D0\u05D5 \u05D1-`useEffect`, \u05D0\u05D5 \u05D4\u05E9\u05EA\u05DE\u05E9\u05D5 \u05D1-`useSyncExternalStore` \u05E2\u05DD snapshot \u05DC\u05E9\u05E8\u05EA, \u05DB\u05DA \u05E9\u05D4\u05E8\u05D9\u05E0\u05D3\u05D5\u05E8 \u05D4\u05E8\u05D0\u05E9\u05D5\u05DF \u05D1\u05DC\u05E7\u05D5\u05D7 \u05D9\u05EA\u05D0\u05D9\u05DD \u05DC\u05E9\u05E8\u05EA."
399
+ },
400
+ "viewport-branching": {
401
+ explanation: "\u05EA\u05EA-\u05E2\u05E5 \u05E9\u05DC\u05DD \u05E0\u05D5\u05E1\u05E3, \u05D4\u05D5\u05E1\u05E8 \u05D0\u05D5 \u05D4\u05D5\u05D7\u05DC\u05E3 \u05D1\u05D9\u05DF \u05D4\u05E9\u05E8\u05EA \u05DC\u05DC\u05E7\u05D5\u05D7 \u2014 \u05D1\u05D3\u05E8\u05DA \u05DB\u05DC\u05DC \u05D1\u05D3\u05D9\u05E7\u05D4 \u05E9\u05DC \u05E8\u05D5\u05D7\u05D1 \u05D4\u05DE\u05E1\u05DA \u05D1-JavaScript \u05E9\u05DE\u05E4\u05E6\u05DC\u05EA \u05D0\u05EA \u05D4\u05E2\u05E5 \u05D1\u05E8\u05D9\u05E0\u05D3\u05D5\u05E8 \u05D4\u05E8\u05D0\u05E9\u05D5\u05DF.",
402
+ suggestion: "\u05E8\u05E0\u05D3\u05E8\u05D5 \u05D0\u05EA \u05E9\u05E0\u05D9 \u05D4\u05E2\u05E0\u05E4\u05D9\u05DD \u05D5\u05D4\u05D7\u05DC\u05D9\u05E4\u05D5 \u05D1\u05D9\u05E0\u05D9\u05D4\u05DD \u05E2\u05DD media queries \u05E9\u05DC CSS \u05D1\u05E6\u05D9\u05D5\u05E8 \u05D4\u05E8\u05D0\u05E9\u05D5\u05DF \u05D1\u05DE\u05E7\u05D5\u05DD \u05DC\u05E4\u05E6\u05DC \u05D1-JavaScript, \u05D0\u05D5 \u05D3\u05D7\u05D5 \u05D0\u05EA \u05D4\u05E2\u05E0\u05E3 \u05E9\u05EA\u05DC\u05D5\u05D9 \u05D1-JavaScript \u05DC\u05D0\u05D7\u05E8 \u05D4\u05D8\u05E2\u05D9\u05E0\u05D4."
403
+ },
404
+ "invalid-html-nesting": {
405
+ explanation: "\u05E6\u05D5\u05DE\u05EA \u05D4\u05D5\u05D6\u05D6 \u05D0\u05D5 \u05E0\u05E4\u05DC\u05D8 \u05DB\u05D9 \u05D4-HTML \u05D0\u05D9\u05E0\u05D5 \u05EA\u05E7\u05D9\u05DF (\u05DC\u05DE\u05E9\u05DC `<div>` \u05D1\u05EA\u05D5\u05DA `<p>`, \u05D0\u05D5 `<a>` \u05D1\u05EA\u05D5\u05DA `<a>`). \u05D4\u05D3\u05E4\u05D3\u05E4\u05DF \u05DE\u05EA\u05E7\u05DF \u05D0\u05EA \u05D4-DOM \u05E9\u05D4\u05D2\u05D9\u05E2 \u05DE\u05D4\u05E9\u05E8\u05EA, \u05D5\u05DC\u05DB\u05DF \u05D4\u05D5\u05D0 \u05DB\u05D1\u05E8 \u05DC\u05D0 \u05EA\u05D5\u05D0\u05DD \u05D0\u05EA \u05DE\u05D4 \u05E9-React \u05DE\u05E6\u05E4\u05D4 \u05DC\u05D5.",
406
+ suggestion: "\u05EA\u05E7\u05E0\u05D5 \u05D0\u05EA \u05EA\u05E7\u05D9\u05E0\u05D5\u05EA \u05D4-HTML: \u05D0\u05DC\u05DE\u05E0\u05D8\u05D9 \u05D1\u05DC\u05D5\u05E7 \u05DC\u05D0 \u05D9\u05DB\u05D5\u05DC\u05D9\u05DD \u05DC\u05D4\u05D9\u05D5\u05EA \u05D1\u05EA\u05D5\u05DA `<p>`, \u05E7\u05D9\u05E9\u05D5\u05E8\u05D9\u05DD \u05DC\u05D0 \u05D9\u05DB\u05D5\u05DC\u05D9\u05DD \u05DC\u05D4\u05D9\u05D5\u05EA \u05DE\u05E7\u05D5\u05E0\u05E0\u05D9\u05DD \u05D5\u05DB\u05D3\u05D5\u05DE\u05D4. \u05D4\u05D7\u05DC\u05D9\u05E4\u05D5 \u05D0\u05EA \u05D4\u05D4\u05D5\u05E8\u05D4 \u05D4\u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF \u05D1-`<div>` \u05D0\u05D5 \u05D0\u05E8\u05D2\u05E0\u05D5 \u05DE\u05D7\u05D3\u05E9 \u05D0\u05EA \u05D4\u05E2\u05E5."
407
+ },
408
+ "whitespace-minification": {
409
+ explanation: "\u05D4\u05D4\u05D1\u05D3\u05DC \u05D4\u05D5\u05D0 \u05D1\u05E8\u05D5\u05D5\u05D7\u05D9\u05DD \u05D1\u05DC\u05D1\u05D3 \u2014 \u05D4\u05D8\u05E7\u05E1\u05D8 \u05D6\u05D4\u05D4 \u05DE\u05DC\u05D1\u05D3 \u05E8\u05D5\u05D5\u05D7\u05D9\u05DD \u05D5\u05E9\u05D5\u05E8\u05D5\u05EA \u05D7\u05D3\u05E9\u05D5\u05EA. \u05DB\u05E0\u05E8\u05D0\u05D4 \u05E9-minifier \u05E9\u05DC HTML \u05DB\u05D9\u05D5\u05D5\u05E5 \u05E8\u05D5\u05D5\u05D7\u05D9\u05DD \u05E1\u05D1\u05D9\u05D1 \u05E9\u05D5\u05E8\u05E9 \u05D4-Hydration \u05D1\u05D0\u05D5\u05E4\u05DF \u05E9\u05D5\u05E0\u05D4 \u05DE-React.",
410
+ suggestion: "\u05D1\u05D3\u05E7\u05D5 \u05D0\u05EA \u05D4\u05D2\u05D3\u05E8\u05D5\u05EA \u05D4-minifier \u05E9\u05DC \u05D4-HTML (\u05DC\u05DE\u05E9\u05DC `conservativeCollapse`) \u05E1\u05D1\u05D9\u05D1 \u05E9\u05D5\u05E8\u05E9 \u05D4\u05D0\u05E4\u05DC\u05D9\u05E7\u05E6\u05D9\u05D4, \u05D0\u05D5 \u05D4\u05D9\u05DE\u05E0\u05E2\u05D5 \u05DE\u05DE\u05D9\u05D6\u05E2\u05D5\u05E8 \u05E8\u05D5\u05D5\u05D7\u05D9\u05DD \u05D1\u05EA\u05D5\u05DA markup \u05E9\u05E2\u05D5\u05D1\u05E8 Hydration."
411
+ },
412
+ "third-party-dom-mutation.extension-attribute": {
413
+ explanation: "\u05D4\u05DE\u05D0\u05E4\u05D9\u05D9\u05DF `{attribute}` \u05D4\u05D5\u05D6\u05E8\u05E7 \u05E2\u05DC \u05D9\u05D3\u05D9 \u05EA\u05D5\u05E1\u05E3 \u05D3\u05E4\u05D3\u05E4\u05DF \u05D0\u05D5 \u05E1\u05E7\u05E8\u05D9\u05E4\u05D8 \u05E6\u05D3 \u05E9\u05DC\u05D9\u05E9\u05D9 (\u05DC\u05DE\u05E9\u05DC Grammarly \u05D0\u05D5 ColorZilla) \u05DC\u05E4\u05E0\u05D9 \u05D4-Hydration, \u05D5\u05DC\u05DB\u05DF \u05D4-DOM \u05D1\u05DC\u05E7\u05D5\u05D7 \u05DB\u05D1\u05E8 \u05DC\u05D0 \u05EA\u05D5\u05D0\u05DD \u05DC\u05E9\u05E8\u05EA.",
414
+ suggestion: "\u05D1\u05D3\u05E8\u05DA \u05DB\u05DC\u05DC \u05D6\u05D4 \u05DC\u05D0 \u05DE\u05D6\u05D9\u05E7. \u05D4\u05D5\u05E1\u05D9\u05E4\u05D5 `suppressHydrationWarning` \u05DC\u05D0\u05DC\u05DE\u05E0\u05D8 \u05D4\u05DE\u05D5\u05E9\u05E4\u05E2, \u05D0\u05D5 \u05D3\u05D7\u05D5 \u05D0\u05EA \u05D0\u05EA\u05D7\u05D5\u05DC \u05D4\u05E1\u05E7\u05E8\u05D9\u05E4\u05D8 \u05D4\u05D7\u05D9\u05E6\u05D5\u05E0\u05D9 \u05E2\u05D3 \u05D0\u05D7\u05E8\u05D9 \u05D4-Hydration."
415
+ },
416
+ "third-party-dom-mutation.root-attribute": {
417
+ explanation: "\u05DE\u05D0\u05E4\u05D9\u05D9\u05DF (`{attribute}`) \u05D4\u05D5\u05E4\u05D9\u05E2 \u05E2\u05DC \u05D0\u05DC\u05DE\u05E0\u05D8 \u05E9\u05D5\u05E8\u05E9 \u05E9\u05D4\u05E9\u05E8\u05EA \u05DE\u05E2\u05D5\u05DC\u05DD \u05DC\u05D0 \u05E9\u05DC\u05D7 \u2014 \u05E1\u05D9\u05DE\u05DF \u05D4\u05D9\u05DB\u05E8 \u05DC\u05EA\u05D5\u05E1\u05E3 \u05D0\u05D5 \u05DC\u05E1\u05E7\u05E8\u05D9\u05E4\u05D8 \u05E6\u05D3 \u05E9\u05DC\u05D9\u05E9\u05D9 \u05DE\u05D5\u05E7\u05D3\u05DD \u05E9\u05DE\u05E9\u05E0\u05D4 \u05D0\u05EA \u05D4-DOM.",
418
+ suggestion: "\u05D4\u05D5\u05E1\u05D9\u05E4\u05D5 `suppressHydrationWarning` \u05DC\u05D0\u05DC\u05DE\u05E0\u05D8 \u05D4\u05E9\u05D5\u05E8\u05E9, \u05D0\u05D5 \u05D3\u05D7\u05D5 \u05D0\u05EA \u05D4\u05E1\u05E7\u05E8\u05D9\u05E4\u05D8 \u05D4\u05D7\u05D9\u05E6\u05D5\u05E0\u05D9 \u05E2\u05D3 \u05D0\u05D7\u05E8\u05D9 \u05D4-Hydration."
419
+ },
420
+ "third-party-dom-mutation.injected-node": {
421
+ explanation: (p) => [
422
+ "\u05E1\u05E7\u05E8\u05D9\u05E4\u05D8 \u05E6\u05D3 \u05E9\u05DC\u05D9\u05E9\u05D9 \u05D0\u05D5 \u05EA\u05D5\u05E1\u05E3 \u05D3\u05E4\u05D3\u05E4\u05DF \u05D4\u05D6\u05E8\u05D9\u05E7 \u05D0\u05EA \u05D4\u05D0\u05DC\u05DE\u05E0\u05D8 ",
423
+ chunkQFHUKJ5K_cjs.code(chunkQFHUKJ5K_cjs.param(p, "tag")),
424
+ " (\u05E4\u05E8\u05E1\u05D5\u05DE\u05D5\u05EA, \u05D4\u05E1\u05DB\u05DE\u05D4, \u05D0\u05E0\u05DC\u05D9\u05D8\u05D9\u05E7\u05D4 \u05D0\u05D5 \u05E6\u05F3\u05D0\u05D8) \u05D0\u05D7\u05E8\u05D9 \u05E8\u05D9\u05E0\u05D3\u05D5\u05E8 \u05D4\u05E9\u05E8\u05EA. \u05D4\u05D5\u05D0 \u05DC\u05D0 \u05D7\u05DC\u05E7 \u05DE\u05D4-Hydration \u05E9\u05DC \u05D4\u05D0\u05E4\u05DC\u05D9\u05E7\u05E6\u05D9\u05D4 \u05E9\u05DC\u05DB\u05DD, \u05D5\u05DC\u05DB\u05DF \u05D6\u05D4 \u05D1\u05D3\u05E8\u05DA \u05DB\u05DC\u05DC \u05E8\u05E2\u05E9 \u05DC\u05D0 \u05DE\u05D6\u05D9\u05E7."
425
+ ],
426
+ suggestion: '\u05D0\u05DD React \u05DE\u05D6\u05D4\u05D9\u05E8 \u05DC\u05D2\u05D1\u05D9\u05D5, \u05D4\u05D5\u05E1\u05D9\u05E4\u05D5 `suppressHydrationWarning` \u05DC\u05E2\u05D8\u05D9\u05E4\u05D4 \u05D4\u05E7\u05E8\u05D5\u05D1\u05D4 \u05D1\u05D9\u05D5\u05EA\u05E8 \u05E9\u05E8\u05D5\u05E0\u05D3\u05E8\u05D4 \u05D1\u05E9\u05E8\u05EA, \u05D0\u05D5 \u05D8\u05E2\u05E0\u05D5 \u05D0\u05EA \u05D4\u05E1\u05E7\u05E8\u05D9\u05E4\u05D8 \u05D4\u05D7\u05D9\u05E6\u05D5\u05E0\u05D9 \u05D0\u05D7\u05E8\u05D9 \u05D4-Hydration (\u05DC\u05DE\u05E9\u05DC `<Script strategy="afterInteractive">` \u05D1-Next.js).'
427
+ },
428
+ "attribute-mismatch.class": {
429
+ explanation: (p) => [
430
+ "\u05D4-",
431
+ chunkQFHUKJ5K_cjs.code("class"),
432
+ " \u05E9\u05D5\u05E0\u05D4 \u05D1\u05D9\u05DF \u05D4\u05E9\u05E8\u05EA \u05DC\u05DC\u05E7\u05D5\u05D7",
433
+ ...chunkQFHUKJ5K_cjs.classDetail(p, {
434
+ added: "\u05E0\u05D5\u05E1\u05E3 \u05D1\u05DC\u05E7\u05D5\u05D7: ",
435
+ removed: "\u05D4\u05D5\u05E1\u05E8 \u05D1\u05DC\u05E7\u05D5\u05D7: ",
436
+ listSeparator: ", ",
437
+ partSeparator: "; ",
438
+ open: " (",
439
+ close: ")"
440
+ }),
441
+ ". \u05DE\u05D7\u05DC\u05E7\u05D4 \u05D4\u05D5\u05D7\u05DC\u05D4 \u05D1\u05EA\u05E0\u05D0\u05D9 \u05D1\u05DC\u05E7\u05D5\u05D7 \u2014 \u05DC\u05E8\u05D5\u05D1 \u05D1\u05D3\u05D9\u05E7\u05D4 \u05E9\u05DC \u05D2\u05D5\u05D3\u05DC \u05DE\u05E1\u05DA, media query, \u05E2\u05E8\u05DB\u05EA \u05E0\u05D5\u05E9\u05D0 \u05D0\u05D5 feature flag \u05E9\u05E8\u05E6\u05D4 \u05D1\u05E8\u05D9\u05E0\u05D3\u05D5\u05E8 \u05D4\u05E8\u05D0\u05E9\u05D5\u05DF."
442
+ ],
443
+ suggestion: "\u05E8\u05E0\u05D3\u05E8\u05D5 \u05D0\u05EA \u05D0\u05D5\u05EA\u05D5 `className` \u05D1\u05E9\u05E8\u05EA \u05D5\u05D1\u05E6\u05D9\u05D5\u05E8 \u05D4\u05E8\u05D0\u05E9\u05D5\u05DF \u05D1\u05DC\u05E7\u05D5\u05D7. \u05D4\u05E2\u05D1\u05D9\u05E8\u05D5 \u05EA\u05E0\u05D0\u05D9\u05DD \u05E9\u05E7\u05D9\u05D9\u05DE\u05D9\u05DD \u05E8\u05E7 \u05D1\u05DC\u05E7\u05D5\u05D7 \u05DC-`useEffect` \u05D0\u05D5 \u05DC\u05D3\u05D2\u05DC \u05D8\u05E2\u05D9\u05E0\u05D4, \u05D0\u05D5 \u05D1\u05E6\u05E2\u05D5 \u05D0\u05EA \u05D4\u05E9\u05D9\u05E0\u05D5\u05D9 \u05D4\u05D7\u05D6\u05D5\u05EA\u05D9 \u05E2\u05DD media queries \u05E9\u05DC CSS \u05D1\u05DE\u05E7\u05D5\u05DD \u05D4\u05D7\u05DC\u05E4\u05EA \u05DE\u05D7\u05DC\u05E7\u05D4 \u05D1-JavaScript."
444
+ },
445
+ "attribute-mismatch.style": {
446
+ explanation: "\u05D4-`style` \u05D4\u05DE\u05D5\u05D8\u05D1\u05E2 \u05E9\u05D5\u05E0\u05D4 \u05D1\u05D9\u05DF \u05D4\u05E9\u05E8\u05EA \u05DC\u05DC\u05E7\u05D5\u05D7 \u2014 \u05E1\u05D2\u05E0\u05D5\u05DF \u05DE\u05D5\u05D8\u05D1\u05E2 \u05D7\u05D5\u05E9\u05D1 \u05DE\u05DE\u05E6\u05D1 \u05E9\u05E7\u05D9\u05D9\u05DD \u05E8\u05E7 \u05D1\u05DC\u05E7\u05D5\u05D7 (\u05D2\u05D5\u05D3\u05DC \u05DE\u05E1\u05DA, \u05E2\u05E8\u05DB\u05EA \u05E0\u05D5\u05E9\u05D0, \u05DE\u05D9\u05E7\u05D5\u05DD \u05D2\u05DC\u05D9\u05DC\u05D4) \u05D1\u05D6\u05DE\u05DF \u05E8\u05D9\u05E0\u05D3\u05D5\u05E8.",
447
+ suggestion: "\u05D7\u05E9\u05D1\u05D5 \u05D0\u05EA \u05D4\u05E1\u05D2\u05E0\u05D5\u05DF \u05D0\u05D7\u05E8\u05D9 \u05D4\u05D8\u05E2\u05D9\u05E0\u05D4 (`useEffect`) \u05DB\u05D3\u05D9 \u05E9\u05D4\u05E8\u05D9\u05E0\u05D3\u05D5\u05E8 \u05D4\u05E8\u05D0\u05E9\u05D5\u05DF \u05D1\u05DC\u05E7\u05D5\u05D7 \u05D9\u05EA\u05D0\u05D9\u05DD \u05DC\u05E9\u05E8\u05EA, \u05D0\u05D5 \u05D4\u05E2\u05D1\u05D9\u05E8\u05D5 \u05D0\u05D5\u05EA\u05D5 \u05DC\u05DE\u05D7\u05DC\u05E7\u05EA CSS \u05D0\u05D5 \u05DC-media query."
448
+ },
449
+ "attribute-mismatch.generic": {
450
+ explanation: "\u05D4\u05DE\u05D0\u05E4\u05D9\u05D9\u05DF `{attribute}` \u05E9\u05D5\u05E0\u05D4 \u05D1\u05D9\u05DF \u05D4\u05E9\u05E8\u05EA (`{server}`) \u05DC\u05DC\u05E7\u05D5\u05D7 (`{client}`) \u2014 \u05D4\u05E2\u05E8\u05DA \u05E9\u05DC\u05D5 \u05E0\u05D2\u05D6\u05E8 \u05DE\u05DE\u05E9\u05D4\u05D5 \u05E9\u05E9\u05D5\u05E0\u05D4 \u05D1\u05D9\u05DF \u05D4\u05E9\u05E8\u05EA \u05DC\u05E8\u05D9\u05E0\u05D3\u05D5\u05E8 \u05D4\u05E8\u05D0\u05E9\u05D5\u05DF \u05D1\u05DC\u05E7\u05D5\u05D7.",
451
+ suggestion: "\u05D4\u05E4\u05DB\u05D5 \u05D0\u05EA \u05D4\u05DE\u05D0\u05E4\u05D9\u05D9\u05DF \u05DC\u05D3\u05D8\u05E8\u05DE\u05D9\u05E0\u05D9\u05E1\u05D8\u05D9 \u05D1\u05E9\u05E8\u05EA \u05D5\u05D1\u05DC\u05E7\u05D5\u05D7, \u05D0\u05D5 \u05E7\u05D1\u05E2\u05D5 \u05D0\u05D5\u05EA\u05D5 \u05D0\u05D7\u05E8\u05D9 \u05D4\u05D8\u05E2\u05D9\u05E0\u05D4 \u05DB\u05DA \u05E9\u05D4\u05E8\u05D9\u05E0\u05D3\u05D5\u05E8 \u05D4\u05E8\u05D0\u05E9\u05D5\u05DF \u05D1\u05DC\u05E7\u05D5\u05D7 \u05D9\u05EA\u05D0\u05D9\u05DD \u05DC-HTML \u05DE\u05D4\u05E9\u05E8\u05EA."
452
+ },
453
+ unknown: {
454
+ explanation: "\u05D6\u05D5\u05D4\u05EA\u05D4 \u05D0\u05D9-\u05D4\u05EA\u05D0\u05DE\u05D4 \u05D1-Hydration \u05D0\u05DA \u05DC\u05D0 \u05E0\u05D9\u05EA\u05DF \u05D4\u05D9\u05D4 \u05DC\u05E9\u05D9\u05D9\u05DA \u05D0\u05D5\u05EA\u05D4 \u05DC\u05E1\u05D9\u05D1\u05D4 \u05D9\u05D3\u05D5\u05E2\u05D4. \u05D1\u05D3\u05E7\u05D5 \u05D0\u05EA \u05E2\u05E8\u05DB\u05D9 \u05D4\u05E9\u05E8\u05EA \u05D5\u05D4\u05DC\u05E7\u05D5\u05D7 \u05DC\u05DE\u05E2\u05DC\u05D4.",
455
+ suggestion: "\u05D4\u05E9\u05D5\u05D5 \u05D1\u05D9\u05DF \u05E2\u05E8\u05DB\u05D9 \u05D4\u05E9\u05E8\u05EA \u05D5\u05D4\u05DC\u05E7\u05D5\u05D7. \u05E1\u05D9\u05D1\u05D5\u05EA \u05E0\u05E4\u05D5\u05E6\u05D5\u05EA \u05D4\u05DF \u05E2\u05E8\u05DB\u05D9\u05DD \u05DC\u05D0 \u05D3\u05D8\u05E8\u05DE\u05D9\u05E0\u05D9\u05E1\u05D8\u05D9\u05D9\u05DD, \u05EA\u05D0\u05E8\u05D9\u05DB\u05D9\u05DD \u05D5\u05D4\u05D2\u05D3\u05E8\u05D5\u05EA \u05D0\u05D6\u05D5\u05E8, \u05D5-API \u05E9\u05DC \u05D3\u05E4\u05D3\u05E4\u05DF \u05E9\u05DE\u05E9\u05DE\u05E9\u05D9\u05DD \u05D1\u05D6\u05DE\u05DF \u05E8\u05D9\u05E0\u05D3\u05D5\u05E8."
456
+ },
457
+ "unknown.no-location": {
458
+ explanation: "React \u05D3\u05D9\u05D5\u05D5\u05D7 \u05E9\u05D4-Hydration \u05E0\u05DB\u05E9\u05DC \u05D0\u05DA \u05DC\u05D0 \u05E6\u05D9\u05D9\u05DF \u05D0\u05D9\u05D6\u05D4 \u05E6\u05D5\u05DE\u05EA \u05E9\u05D5\u05E0\u05D4, \u05D5\u05D1\u05D3\u05D9\u05E7\u05EA \u05D4-DOM \u05DC\u05D0 \u05DE\u05E6\u05D0\u05D4 \u05D4\u05D1\u05D3\u05DC \u05DC\u05D4\u05E6\u05D1\u05D9\u05E2 \u05E2\u05DC\u05D9\u05D5.",
459
+ suggestion: "\u05D5\u05D3\u05D0\u05D5 \u05E9-`<HydrationSnapshotScript>` (\u05D0\u05D5 \u05E1\u05E7\u05E8\u05D9\u05E4\u05D8 \u05D4-snapshot \u05D4\u05D9\u05D3\u05E0\u05D9) \u05E0\u05DE\u05E6\u05D0 \u05D1-`<head>` \u05DB\u05D3\u05D9 \u05E9\u05D1\u05D3\u05D9\u05E7\u05EA \u05D4-DOM \u05EA\u05D5\u05DB\u05DC \u05DC\u05D0\u05EA\u05E8 \u05D0\u05EA \u05D4\u05E6\u05D5\u05DE\u05EA, \u05D5\u05E7\u05E8\u05D0\u05D5 \u05D0\u05EA \u05D4\u05D0\u05D6\u05D4\u05E8\u05D4 \u05D4\u05DE\u05DC\u05D0\u05D4 \u05E9\u05DC React \u05D1\u05E7\u05D5\u05E0\u05E1\u05D5\u05DC\u05EA \u05D4\u05D3\u05E4\u05D3\u05E4\u05DF."
460
+ }
461
+ };
462
+ var hePlural;
463
+ function hebrewIssues(count) {
464
+ if (hePlural === void 0) {
465
+ hePlural = typeof Intl !== "undefined" && typeof Intl.PluralRules === "function" ? new Intl.PluralRules("he") : null;
466
+ }
467
+ switch (hePlural?.select(count) ?? "other") {
468
+ case "one":
469
+ return "\u05D1\u05E2\u05D9\u05D4 \u05D0\u05D7\u05EA";
470
+ case "two":
471
+ return "\u05E9\u05EA\u05D9 \u05D1\u05E2\u05D9\u05D5\u05EA";
472
+ default:
473
+ return `${count} \u05D1\u05E2\u05D9\u05D5\u05EA`;
474
+ }
475
+ }
476
+ var HE = {
477
+ dir: "rtl",
478
+ title: "\u05D0\u05D9-\u05D4\u05EA\u05D0\u05DE\u05D4 \u05D1-Hydration",
479
+ dialogLabel: "\u05D0\u05D1\u05D7\u05D5\u05DF \u05D0\u05D9-\u05D4\u05EA\u05D0\u05DE\u05D4 \u05D1-Hydration",
480
+ dismiss: "\u05E1\u05D2\u05D9\u05E8\u05D4",
481
+ dismissLabel: "\u05E1\u05D2\u05D9\u05E8\u05EA \u05D7\u05DC\u05D5\u05E0\u05D9\u05EA \u05D4\u05D0\u05D1\u05D7\u05D5\u05DF",
482
+ hintDismissLabel: "\u05D4\u05E1\u05EA\u05E8\u05EA \u05D4\u05E8\u05DE\u05D6",
483
+ server: "\u05E9\u05E8\u05EA",
484
+ client: "\u05DC\u05E7\u05D5\u05D7",
485
+ fix: "\u05EA\u05D9\u05E7\u05D5\u05DF:",
486
+ // The docs are only written in English, so say so rather than surprise.
487
+ learnMore: "\u05DC\u05DE\u05D9\u05D3\u05E2 \u05E0\u05D5\u05E1\u05E3 (\u05D1\u05D0\u05E0\u05D2\u05DC\u05D9\u05EA) \u2190",
488
+ none: "(\u05D0\u05D9\u05DF)",
489
+ empty: "(\u05E8\u05D9\u05E7)",
490
+ fallbackCategory: "\u05D0\u05D9-\u05D4\u05EA\u05D0\u05DE\u05D4",
491
+ categories: {
492
+ "non-deterministic-value": "\u05E2\u05E8\u05DA \u05DC\u05D0 \u05D3\u05D8\u05E8\u05DE\u05D9\u05E0\u05D9\u05E1\u05D8\u05D9",
493
+ "date-time": "\u05EA\u05D0\u05E8\u05D9\u05DA / \u05E9\u05E2\u05D4",
494
+ "locale-format": "\u05E2\u05D9\u05E6\u05D5\u05D1 \u05DC\u05E4\u05D9 \u05E9\u05E4\u05D4 \u05D5\u05D0\u05D6\u05D5\u05E8",
495
+ "browser-only-api": "API \u05E9\u05DC \u05D3\u05E4\u05D3\u05E4\u05DF \u05D1\u05DC\u05D1\u05D3",
496
+ "viewport-branching": "\u05D4\u05E1\u05EA\u05E2\u05E4\u05D5\u05EA \u05DC\u05E4\u05D9 \u05D2\u05D5\u05D3\u05DC \u05DE\u05E1\u05DA",
497
+ "invalid-html-nesting": "\u05E7\u05D9\u05E0\u05D5\u05DF HTML \u05DC\u05D0 \u05EA\u05E7\u05D9\u05DF",
498
+ "whitespace-minification": "\u05E8\u05D5\u05D5\u05D7\u05D9\u05DD / \u05DE\u05D9\u05D6\u05E2\u05D5\u05E8",
499
+ "third-party-dom-mutation": "\u05E9\u05D9\u05E0\u05D5\u05D9 DOM \u05E2\u05DC \u05D9\u05D3\u05D9 \u05E6\u05D3 \u05E9\u05DC\u05D9\u05E9\u05D9",
500
+ "attribute-mismatch": "\u05D0\u05D9-\u05D4\u05EA\u05D0\u05DE\u05D4 \u05D1\u05DE\u05D0\u05E4\u05D9\u05D9\u05DF",
501
+ unknown: "\u05DC\u05D0 \u05D9\u05D3\u05D5\u05E2"
502
+ },
503
+ messages: HE_MESSAGES,
504
+ hint: (count) => `\u2193 ${hebrewIssues(count)} \u2014 \u05D2\u05DC\u05DC\u05D5 \u05DB\u05D3\u05D9 \u05DC\u05E8\u05D0\u05D5\u05EA \u05D4\u05DB\u05D5\u05DC`
505
+ };
506
+
507
+ // src/react/i18n.ts
508
+ var EN = {
509
+ dir: "ltr",
510
+ title: "Hydration mismatch",
511
+ dialogLabel: "Hydration mismatch diagnostics",
512
+ dismiss: "Dismiss",
513
+ dismissLabel: "Dismiss diagnostics overlay",
514
+ hintDismissLabel: "Dismiss hint",
515
+ server: "Server",
516
+ client: "Client",
517
+ fix: "Fix:",
518
+ learnMore: "Learn more \u2192",
519
+ none: "(none)",
520
+ empty: "(empty)",
521
+ fallbackCategory: "Mismatch",
522
+ categories: {
523
+ "non-deterministic-value": "Non-deterministic value",
524
+ "date-time": "Date / time",
525
+ "locale-format": "Locale formatting",
526
+ "browser-only-api": "Browser-only API",
527
+ "viewport-branching": "Viewport branching",
528
+ "invalid-html-nesting": "Invalid HTML nesting",
529
+ "whitespace-minification": "Whitespace / minification",
530
+ "third-party-dom-mutation": "Third-party DOM mutation",
531
+ "attribute-mismatch": "Attribute mismatch",
532
+ unknown: "Unknown"
533
+ },
534
+ messages: chunkQFHUKJ5K_cjs.EN_MESSAGES,
535
+ hint: (count) => `\u2193 ${count} issues \u2014 scroll to see all`
536
+ };
537
+ var OVERLAY_STRINGS = {
538
+ en: EN,
539
+ ar: AR,
540
+ he: HE,
541
+ fa: FA
542
+ };
543
+ var LANG_CODES = [
544
+ ["ar", /^(?:ar|arb|arz|ary|arq|aeb|apc|ajp|acm|afb|ars|acw|ayl|apd)(?:-|$)/i],
545
+ ["he", /^(?:he|iw)(?:-|$)/i],
546
+ ["fa", /^(?:fa|pes|prs)(?:-|$)/i]
547
+ ];
548
+ var SUPPORTED = /* @__PURE__ */ new Set(["en", "ar", "he", "fa"]);
549
+ function resolveLocale(preference) {
550
+ if (preference != null && preference !== "auto") {
551
+ return SUPPORTED.has(preference) ? preference : "en";
552
+ }
553
+ if (typeof document === "undefined") return "en";
554
+ const lang = (document.documentElement.getAttribute("lang") ?? "").trim();
555
+ for (const [locale, codes] of LANG_CODES) if (codes.test(lang)) return locale;
556
+ return "en";
557
+ }
558
+
559
+ // src/react/overlay.ts
560
+ var CONTAINER_ID = "why-hydration-overlay";
561
+ var ARABIC_FACES = 'Tahoma, "Noto Sans Arabic", "Geeza Pro", "Segoe UI"';
562
+ var UI_FONT = `ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, ${ARABIC_FACES}, sans-serif`;
563
+ var MONO_FONT = "ui-monospace, SFMono-Regular, Menlo, Consolas, monospace";
564
+ var STYLES = `
565
+ :host {
566
+ all: initial;
567
+ /* The "all" shorthand deliberately excludes direction/unicode-bidi (CSS
568
+ spec), so these are set explicitly: the host page's own dir must never
569
+ leak in. The panel below then takes its direction from the overlay's
570
+ language, set inside this shadow root where no page style can reach it. */
571
+ direction: ltr;
572
+ unicode-bidi: isolate;
573
+ }
574
+ * { box-sizing: border-box; }
575
+ .wh-panel {
576
+ position: fixed;
577
+ z-index: 2147483647;
578
+ width: min(420px, calc(100vw - 32px));
579
+ max-height: min(70vh, 640px);
580
+ display: flex;
581
+ flex-direction: column;
582
+ font: 13px/1.5 ${UI_FONT};
583
+ color: #e5e7eb;
584
+ background: #0b0f17;
585
+ border: 1px solid #1f2937;
586
+ border-radius: 12px;
587
+ box-shadow: 0 12px 40px rgba(0,0,0,.5);
588
+ overflow: hidden;
589
+ text-align: start;
590
+ }
591
+ .wh-panel[dir="ltr"] { direction: ltr; }
592
+ /* Arabic reads poorly at Latin sizes, and letter-spacing or uppercasing breaks
593
+ the joining between its letters, so the right-to-left panel resets both. */
594
+ .wh-panel[dir="rtl"] { direction: rtl; font-size: 14px; line-height: 1.7; }
595
+ .wh-panel[dir="rtl"] .wh-side .wh-label { text-transform: none; letter-spacing: 0; font-size: 11px; }
596
+ .wh-bottom-right { bottom: 16px; right: 16px; }
597
+ .wh-bottom-left { bottom: 16px; left: 16px; }
598
+ .wh-top-right { top: 16px; right: 16px; }
599
+ .wh-top-left { top: 16px; left: 16px; }
600
+ .wh-header {
601
+ display: flex; align-items: center; gap: 8px;
602
+ padding: 10px 12px;
603
+ background: linear-gradient(180deg, #151b26, #0d1220);
604
+ border-bottom: 1px solid #1f2937;
605
+ }
606
+ .wh-dot { width: 8px; height: 8px; border-radius: 50%; background: #f59e0b; flex: none; }
607
+ .wh-title { font-weight: 600; color: #f3f4f6; }
608
+ .wh-count {
609
+ margin-inline-start: auto; font-size: 11px; color: #9ca3af;
610
+ background: #111827; border: 1px solid #1f2937; border-radius: 999px;
611
+ padding: 1px 8px;
612
+ }
613
+ .wh-btn {
614
+ appearance: none; border: 1px solid #1f2937; background: #111827;
615
+ color: #9ca3af; border-radius: 6px; cursor: pointer;
616
+ font: inherit; font-size: 12px; padding: 3px 8px;
617
+ }
618
+ .wh-btn:hover { color: #f3f4f6; border-color: #374151; }
619
+ .wh-list { flex: 1 1 auto; min-height: 0; overflow-y: auto; overscroll-behavior: contain; padding: 8px; display: flex; flex-direction: column; gap: 8px; }
620
+ .wh-card { flex: 0 0 auto; border: 1px solid #1f2937; border-radius: 10px; background: #0f1521; overflow: hidden; }
621
+ .wh-card-head { display: flex; align-items: center; gap: 8px; padding: 8px 10px; }
622
+ .wh-cat { font-weight: 600; color: #fbbf24; font-size: 12px; }
623
+ .wh-conf { margin-inline-start: auto; font-size: 11px; color: #6b7280; unicode-bidi: isolate; }
624
+ .wh-body { padding: 0 10px 10px; }
625
+ .wh-where { font-size: 11px; color: #9ca3af; overflow-wrap: anywhere; margin-bottom: 4px; }
626
+ /* Selectors, component names, file paths and attribute names are code: they
627
+ stay left-to-right and isolated, or an RTL line mirrors their brackets and
628
+ reorders their segments. */
629
+ .wh-where code, .wh-comp, .wh-attr { unicode-bidi: isolate; font-family: ${MONO_FONT}; }
630
+ .wh-where code { color: #93c5fd; }
631
+ .wh-comp { color: #f3f4f6; font-weight: 600; }
632
+ .wh-attr { color: #c4b5fd; }
633
+ .wh-loc { font-size: 11px; color: #7dd3fc; overflow-wrap: anywhere; margin-bottom: 8px; font-family: ${MONO_FONT}; unicode-bidi: isolate; text-align: start; }
634
+ .wh-diff { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; margin-bottom: 8px; }
635
+ .wh-side { border-radius: 8px; padding: 6px 8px; font-size: 11px; min-width: 0; }
636
+ .wh-server { background: rgba(244,63,94,.08); border: 1px solid rgba(244,63,94,.35); }
637
+ .wh-client { background: rgba(34,197,94,.08); border: 1px solid rgba(34,197,94,.35); }
638
+ .wh-side .wh-label { display: block; font-size: 9px; text-transform: uppercase; letter-spacing: .04em; margin-bottom: 3px; }
639
+ .wh-server .wh-label { color: #fb7185; }
640
+ .wh-client .wh-label { color: #4ade80; }
641
+ /* A value is page data in any script. Each line takes its direction from its
642
+ own first strong character, so Arabic values read right-to-left with their
643
+ punctuation at the end even inside the English panel, and English values
644
+ stay left-to-right inside the Arabic one. Whitespace is preserved: a diff
645
+ viewer that collapses spaces hides whitespace-only mismatches. */
646
+ .wh-value {
647
+ display: block; unicode-bidi: plaintext; text-align: start;
648
+ white-space: pre-wrap; overflow-wrap: anywhere;
649
+ font-family: ${MONO_FONT};
650
+ }
651
+ .wh-value.wh-prose { font-family: ${UI_FONT}; font-size: 12px; }
652
+ .wh-empty-value { color: #6b7280; font-style: italic; font-family: ${UI_FONT}; }
653
+ .wh-invisible {
654
+ display: inline-block; margin: 0 1px; padding: 0 3px; border-radius: 3px;
655
+ font: 600 8px/1.6 ${MONO_FONT}; letter-spacing: .02em; vertical-align: 1px;
656
+ color: #fde68a; background: rgba(245,158,11,.18); border: 1px solid rgba(245,158,11,.45);
657
+ unicode-bidi: isolate; direction: ltr;
658
+ }
659
+ .wh-explain { color: #cbd5e1; margin-bottom: 8px; }
660
+ .wh-fix { color: #e5e7eb; background: #111827; border-inline-start: 3px solid #22c55e; border-radius: 4px; padding: 6px 8px; }
661
+ .wh-fix strong { color: #86efac; }
662
+ .wh-code {
663
+ font-family: ${MONO_FONT}; font-size: .92em; color: #e2e8f0;
664
+ background: rgba(148,163,184,.14); border-radius: 4px; padding: 0 3px;
665
+ unicode-bidi: isolate; overflow-wrap: anywhere;
666
+ }
667
+ .wh-param { unicode-bidi: isolate; color: #f8fafc; }
668
+ .wh-docs { display: inline-block; margin-top: 6px; color: #60a5fa; text-decoration: none; font-size: 11px; }
669
+ .wh-docs:hover { text-decoration: underline; }
670
+ .wh-hint {
671
+ display: none; align-items: center; gap: 8px;
672
+ padding: 7px 12px; font-size: 11px; color: #cbd5e1;
673
+ background: #0d1220; border-top: 1px solid #1f2937;
674
+ animation: wh-fade .2s ease;
675
+ }
676
+ .wh-hint.wh-show { display: flex; }
677
+ .wh-hint-text { flex: 1; }
678
+ .wh-hint-x {
679
+ appearance: none; border: 0; background: transparent; cursor: pointer;
680
+ color: #9ca3af; font-size: 14px; line-height: 1; padding: 2px 4px;
681
+ }
682
+ .wh-hint-x:hover { color: #f3f4f6; }
683
+ @keyframes wh-fade { from { opacity: 0 } to { opacity: 1 } }
684
+ @media (max-width: 420px) {
685
+ .wh-panel { width: auto; max-height: min(80vh, 640px); }
686
+ .wh-bottom-right, .wh-bottom-left { left: 8px; right: 8px; }
687
+ .wh-top-right, .wh-top-left { left: 8px; right: 8px; }
688
+ .wh-diff { grid-template-columns: 1fr; }
689
+ }
690
+ `;
691
+ function el(tag, className, text) {
692
+ const node = document.createElement(tag);
693
+ if (className) node.className = className;
694
+ if (text != null) node.textContent = text;
695
+ return node;
696
+ }
697
+ function shortenPath(file) {
698
+ const normalized = file.replace(/\\/g, "/");
699
+ const marker = normalized.match(/(?:^|\/)(?:src|app|pages|components)\//);
700
+ if (marker && marker.index != null) {
701
+ return normalized.slice(marker.index).replace(/^\//, "");
702
+ }
703
+ const parts = normalized.split("/");
704
+ return parts.slice(-2).join("/");
705
+ }
706
+ var INVISIBLE = {
707
+ "\u200B": "ZWSP",
708
+ "\u200E": "LRM",
709
+ "\u200F": "RLM",
710
+ "\u061C": "ALM",
711
+ "\u202A": "LRE",
712
+ "\u202B": "RLE",
713
+ "\u202C": "PDF",
714
+ "\u202D": "LRO",
715
+ "\u202E": "RLO",
716
+ "\u2066": "LRI",
717
+ "\u2067": "RLI",
718
+ "\u2068": "FSI",
719
+ "\u2069": "PDI",
720
+ "\uFEFF": "BOM"
721
+ };
722
+ var INVISIBLE_RE = /[\u200b\u200e\u200f\u061c\u202a-\u202e\u2066-\u2069\ufeff]/;
723
+ var INVISIBLE_SPLIT = /([\u200b\u200e\u200f\u061c\u202a-\u202e\u2066-\u2069\ufeff])/;
724
+ var RTL_SCRIPT = /[֐-ࣿיִ-﷿ﹰ-ﻼ]/;
725
+ function renderValue(value, strings) {
726
+ if (value == null || value === "") {
727
+ return el(
728
+ "span",
729
+ "wh-empty-value",
730
+ value === "" ? strings.empty : strings.none
731
+ );
732
+ }
733
+ const block = el("div", "wh-value");
734
+ block.dir = "auto";
735
+ if (RTL_SCRIPT.test(value)) block.classList.add("wh-prose");
736
+ if (!INVISIBLE_RE.test(value)) {
737
+ block.textContent = value;
738
+ return block;
739
+ }
740
+ for (const part of value.split(INVISIBLE_SPLIT)) {
741
+ if (!part) continue;
742
+ const name = INVISIBLE[part];
743
+ if (!name) {
744
+ block.append(part);
745
+ continue;
746
+ }
747
+ const badge = el("span", "wh-invisible", name);
748
+ const cp = part.codePointAt(0).toString(16).toUpperCase().padStart(4, "0");
749
+ badge.title = `U+${cp} ${name}`;
750
+ block.appendChild(badge);
751
+ }
752
+ return block;
753
+ }
754
+ function renderSegments(segments) {
755
+ const out = document.createDocumentFragment();
756
+ for (const s of segments) {
757
+ if (typeof s === "string") {
758
+ out.append(s);
759
+ } else if ("code" in s) {
760
+ const c = el("code", "wh-code", s.code);
761
+ c.dir = "auto";
762
+ out.appendChild(c);
763
+ } else {
764
+ const v = el("bdi", "wh-param", s.value);
765
+ out.appendChild(v);
766
+ }
767
+ }
768
+ return out;
769
+ }
770
+ function splitCode(text) {
771
+ return text.split("`").map((part, i) => i % 2 === 1 ? { code: part } : part).filter((s) => s !== "");
772
+ }
773
+ function causeText(cause, field, strings) {
774
+ const id = cause.messageId;
775
+ const params = cause.params ?? {};
776
+ if (id && Object.prototype.hasOwnProperty.call(chunkQFHUKJ5K_cjs.EN_MESSAGES, id)) {
777
+ const english = chunkQFHUKJ5K_cjs.plainText(chunkQFHUKJ5K_cjs.renderMessage(chunkQFHUKJ5K_cjs.EN_MESSAGES[id][field], params));
778
+ if (english === cause[field]) {
779
+ return {
780
+ segments: chunkQFHUKJ5K_cjs.renderMessage(strings.messages[id][field], params),
781
+ translated: true
782
+ };
783
+ }
784
+ }
785
+ return { segments: splitCode(cause[field]), translated: false };
786
+ }
787
+ function renderCard(report, strings) {
788
+ const card = el("div", "wh-card");
789
+ const head = el("div", "wh-card-head");
790
+ head.appendChild(
791
+ el(
792
+ "span",
793
+ "wh-cat",
794
+ strings.categories[report.cause.category] ?? strings.fallbackCategory
795
+ )
796
+ );
797
+ const conf = el(
798
+ "span",
799
+ "wh-conf",
800
+ `${Math.round(report.cause.confidence * 100)}%`
801
+ );
802
+ conf.dir = "ltr";
803
+ head.appendChild(conf);
804
+ card.appendChild(head);
805
+ const body = el("div", "wh-body");
806
+ const where = el("div", "wh-where");
807
+ const name = report.component ?? report.node.tagName?.toLowerCase();
808
+ if (name) {
809
+ const comp = el(
810
+ "bdi",
811
+ report.component ? "wh-comp" : "wh-attr",
812
+ `<${name}>`
813
+ );
814
+ comp.dir = "ltr";
815
+ where.append(comp, " \xB7 ");
816
+ }
817
+ const path = el("code", void 0, report.node.path);
818
+ path.dir = "ltr";
819
+ where.appendChild(path);
820
+ if (report.node.attribute) {
821
+ const attr = el("bdi", "wh-attr", `@${report.node.attribute}`);
822
+ attr.dir = "ltr";
823
+ where.append(" \xB7 ", attr);
824
+ }
825
+ body.appendChild(where);
826
+ if (report.location?.file) {
827
+ const file = shortenPath(report.location.file);
828
+ const loc = el(
829
+ "div",
830
+ "wh-loc",
831
+ report.location.line ? `${file}:${report.location.line}` : file
832
+ );
833
+ loc.dir = "ltr";
834
+ body.appendChild(loc);
835
+ }
836
+ const diff = el("div", "wh-diff");
837
+ const server = el("div", "wh-side wh-server");
838
+ server.appendChild(el("span", "wh-label", strings.server));
839
+ server.appendChild(renderValue(report.server, strings));
840
+ const client = el("div", "wh-side wh-client");
841
+ client.appendChild(el("span", "wh-label", strings.client));
842
+ client.appendChild(renderValue(report.client, strings));
843
+ diff.appendChild(server);
844
+ diff.appendChild(client);
845
+ body.appendChild(diff);
846
+ const explanation = causeText(report.cause, "explanation", strings);
847
+ const explain = el("div", "wh-explain");
848
+ explain.dir = explanation.translated ? strings.dir : "auto";
849
+ explain.appendChild(renderSegments(explanation.segments));
850
+ body.appendChild(explain);
851
+ const suggestion = causeText(report.cause, "suggestion", strings);
852
+ const fix = el("div", "wh-fix");
853
+ fix.appendChild(el("strong", void 0, strings.fix));
854
+ fix.append(" ");
855
+ const fixText = el("span");
856
+ fixText.dir = suggestion.translated ? strings.dir : "auto";
857
+ fixText.appendChild(renderSegments(suggestion.segments));
858
+ fix.appendChild(fixText);
859
+ body.appendChild(fix);
860
+ if (report.cause.docsUrl && /^https?:\/\//i.test(report.cause.docsUrl)) {
861
+ const a = el("a", "wh-docs", strings.learnMore);
862
+ a.href = report.cause.docsUrl;
863
+ a.target = "_blank";
864
+ a.rel = "noreferrer noopener";
865
+ body.appendChild(a);
866
+ }
867
+ card.appendChild(body);
868
+ return card;
869
+ }
870
+ function createOverlay(options = {}) {
871
+ const position = options.position ?? "bottom-right";
872
+ let host = null;
873
+ let listEl = null;
874
+ let countEl = null;
875
+ let hintEl = null;
876
+ let hintTextEl = null;
877
+ let hintCheckTimer = null;
878
+ let hintDismissed = false;
879
+ let count = 0;
880
+ let strings = OVERLAY_STRINGS.en;
881
+ function ensureMounted() {
882
+ if (host) return;
883
+ document.getElementById(CONTAINER_ID)?.remove();
884
+ const locale = resolveLocale(options.locale);
885
+ strings = OVERLAY_STRINGS[locale];
886
+ host = document.createElement("div");
887
+ host.id = CONTAINER_ID;
888
+ host.setAttribute("data-why-hydration", "overlay");
889
+ host.setAttribute("aria-hidden", "false");
890
+ host.setAttribute("dir", strings.dir);
891
+ host.setAttribute("lang", locale);
892
+ const shadow = host.attachShadow({ mode: "open" });
893
+ const style = document.createElement("style");
894
+ style.textContent = STYLES;
895
+ shadow.appendChild(style);
896
+ const panel = el("div", `wh-panel wh-${position}`);
897
+ panel.setAttribute("dir", strings.dir);
898
+ panel.setAttribute("lang", locale);
899
+ panel.setAttribute("role", "dialog");
900
+ panel.setAttribute("aria-label", strings.dialogLabel);
901
+ const header = el("div", "wh-header");
902
+ header.appendChild(el("span", "wh-dot"));
903
+ header.appendChild(el("span", "wh-title", strings.title));
904
+ countEl = el("span", "wh-count", "0");
905
+ countEl.dir = "ltr";
906
+ header.appendChild(countEl);
907
+ const close = el("button", "wh-btn", strings.dismiss);
908
+ close.setAttribute("aria-label", strings.dismissLabel);
909
+ close.addEventListener("click", () => destroy());
910
+ header.appendChild(close);
911
+ panel.appendChild(header);
912
+ listEl = el("div", "wh-list");
913
+ panel.appendChild(listEl);
914
+ hintEl = el("div", "wh-hint");
915
+ hintTextEl = el("span", "wh-hint-text");
916
+ hintEl.appendChild(hintTextEl);
917
+ const hintX = el("button", "wh-hint-x", "\u2715");
918
+ hintX.setAttribute("aria-label", strings.hintDismissLabel);
919
+ hintX.addEventListener("click", () => dismissHint());
920
+ hintEl.appendChild(hintX);
921
+ panel.appendChild(hintEl);
922
+ shadow.appendChild(panel);
923
+ document.body.appendChild(host);
924
+ host.addEventListener("keydown", (e) => {
925
+ if (e.key === "Escape") destroy();
926
+ });
927
+ }
928
+ function dismissHint() {
929
+ hintDismissed = true;
930
+ hintEl?.classList.remove("wh-show");
931
+ }
932
+ function updateHint() {
933
+ if (!hintEl || !hintTextEl || hintDismissed) return;
934
+ hintTextEl.textContent = strings.hint(count);
935
+ if (count >= 4) hintEl.classList.add("wh-show");
936
+ }
937
+ function destroy() {
938
+ if (hintCheckTimer) clearTimeout(hintCheckTimer);
939
+ hintCheckTimer = null;
940
+ host?.remove();
941
+ host = null;
942
+ listEl = null;
943
+ countEl = null;
944
+ hintEl = null;
945
+ hintTextEl = null;
946
+ count = 0;
947
+ hintDismissed = false;
948
+ }
949
+ function push(report) {
950
+ ensureMounted();
951
+ count += 1;
952
+ if (countEl) countEl.textContent = String(count);
953
+ listEl?.appendChild(renderCard(report, strings));
954
+ if (hintCheckTimer) clearTimeout(hintCheckTimer);
955
+ hintCheckTimer = setTimeout(updateHint, 400);
956
+ }
957
+ return { push, destroy };
958
+ }
959
+
960
+ // src/react/fiber.ts
961
+ function getFiber(node) {
962
+ for (const key in node) {
963
+ if (key.startsWith("__reactFiber$") || key.startsWith("__reactInternalInstance$")) {
964
+ return node[key] ?? null;
965
+ }
966
+ }
967
+ return null;
968
+ }
969
+ function componentName(type) {
970
+ if (!type || typeof type === "string") return void 0;
971
+ if (typeof type === "function") {
972
+ const fn = type;
973
+ return fn.displayName || fn.name || void 0;
974
+ }
975
+ if (typeof type === "object") {
976
+ const obj = type;
977
+ if (obj.displayName) return obj.displayName;
978
+ if (obj.render) return obj.render.displayName || obj.render.name;
979
+ if (obj.type) return componentName(obj.type);
980
+ }
981
+ return void 0;
982
+ }
983
+ function resolveReactSource(node) {
984
+ if (!node) return {};
985
+ try {
986
+ let fiber = getFiber(node);
987
+ let component;
988
+ let location;
989
+ let hops = 0;
990
+ while (fiber && hops < 80) {
991
+ if (!component) {
992
+ const name = componentName(fiber.type);
993
+ if (name && !/^[a-z]/.test(name)) component = name;
994
+ }
995
+ if (!location && fiber._debugSource?.fileName) {
996
+ location = {
997
+ file: fiber._debugSource.fileName,
998
+ line: fiber._debugSource.lineNumber,
999
+ column: fiber._debugSource.columnNumber
1000
+ };
1001
+ }
1002
+ if (component && location) break;
1003
+ fiber = fiber.return ?? null;
1004
+ hops += 1;
1005
+ }
1006
+ const result = {};
1007
+ if (component) result.component = component;
1008
+ if (location) result.location = location;
1009
+ return result;
1010
+ } catch {
1011
+ return {};
1012
+ }
1013
+ }
1014
+
1015
+ // src/react/controller.ts
1016
+ var INSPECT_FALLBACK_MS = 50;
1017
+ function buildIgnore(ignore) {
1018
+ if (!ignore || ignore.length === 0) return void 0;
1019
+ return (divergence) => {
1020
+ const node = divergence.element ?? null;
1021
+ for (const rule of ignore) {
1022
+ if (typeof rule === "function") {
1023
+ if (node && rule(node)) return true;
1024
+ } else if (node) {
1025
+ try {
1026
+ if (node.matches(rule) || node.closest(rule)) return true;
1027
+ } catch {
1028
+ }
1029
+ }
1030
+ }
1031
+ return false;
1032
+ };
1033
+ }
1034
+ var InspectorController = class {
1035
+ constructor(options = {}) {
1036
+ this.overlayTeardown = null;
1037
+ this.matchedRoots = /* @__PURE__ */ new Set();
1038
+ this.cleanups = [];
1039
+ this.started = false;
1040
+ this.pendingContext = {};
1041
+ this.messages = /* @__PURE__ */ new Set();
1042
+ // The component a recoverable error's own stack names, per message. A report
1043
+ // parsed from a message may only carry *that* message's context: borrowing
1044
+ // the latest error's instead labelled unrelated reports with the component
1045
+ // from some other error (a localStorage read attributed to <InvalidNesting>).
1046
+ this.messageContext = /* @__PURE__ */ new Map();
1047
+ this.warnedRoots = /* @__PURE__ */ new Set();
1048
+ this.settlingTimers = [];
1049
+ this.inspectScheduled = false;
1050
+ this.inspectTimer = null;
1051
+ this.onRecoverableError = (error, info) => {
1052
+ if (!chunkQFHUKJ5K_cjs.isDev) return;
1053
+ const message = error instanceof Error ? error.message : String(error);
1054
+ this.rememberMessage(message);
1055
+ if (this.messages.has(message) && info?.componentStack) {
1056
+ this.messageContext.set(message, {
1057
+ componentStack: info.componentStack,
1058
+ component: firstComponentFromStack(info.componentStack)
1059
+ });
1060
+ }
1061
+ this.mergeContext({
1062
+ componentStack: info?.componentStack,
1063
+ component: firstComponentFromStack(info?.componentStack),
1064
+ reactMessage: message
1065
+ });
1066
+ this.scheduleInspect();
1067
+ };
1068
+ this.options = options;
1069
+ this.collector = new chunkQFHUKJ5K_cjs.ReportCollector({
1070
+ maxReports: options.maxReports,
1071
+ extra: options.classify,
1072
+ ignore: buildIgnore(options?.ignore)
1073
+ });
1074
+ }
1075
+ start() {
1076
+ if (this.started || !chunkQFHUKJ5K_cjs.isDev || typeof window === "undefined") return;
1077
+ this.started = true;
1078
+ this.cleanups.push(
1079
+ this.collector.addSink((report) => this.options.onReport?.(report))
1080
+ );
1081
+ this.cleanups.push(this.collector.addSink(createConsoleReporter()));
1082
+ this.mountOverlay();
1083
+ this.cleanups.push(
1084
+ subscribeCapture((message) => {
1085
+ this.rememberMessage(message);
1086
+ this.mergeContext({ reactMessage: message });
1087
+ this.scheduleInspect();
1088
+ })
1089
+ );
1090
+ this.scheduleSettlingInspections();
1091
+ }
1092
+ // React applies client values to mismatched subtrees via a client re-render a
1093
+ // few hundred ms after the initial hydration commit. We diff once per frame
1094
+ // and then across this short "settling window" to catch that, deduped. This
1095
+ // is a bounded, one-shot window — NOT a standing observer — so DOM changes
1096
+ // from later app state are never mistaken for hydration mismatches.
1097
+ scheduleSettlingInspections() {
1098
+ this.scheduleInspect();
1099
+ const delays = [80, 250, 700, 1500];
1100
+ for (const delay of delays) {
1101
+ const last = delay === delays[delays.length - 1];
1102
+ const timer = setTimeout(() => {
1103
+ this.inspectAllRoots();
1104
+ if (last) this.warnUnmatchedRoots();
1105
+ }, delay);
1106
+ this.settlingTimers.push(timer);
1107
+ }
1108
+ }
1109
+ rememberMessage(message) {
1110
+ if (this.messages.size >= MAX_CAPTURED && !this.messages.has(message)) {
1111
+ return;
1112
+ }
1113
+ this.messages.add(message);
1114
+ }
1115
+ mergeContext(ctx) {
1116
+ this.pendingContext = {
1117
+ componentStack: ctx.componentStack ?? this.pendingContext.componentStack,
1118
+ component: ctx.component ?? this.pendingContext.component,
1119
+ location: ctx.location ?? this.pendingContext.location,
1120
+ reactMessage: ctx.reactMessage ?? this.pendingContext.reactMessage
1121
+ };
1122
+ }
1123
+ // Context for reports parsed from one message: that message's own component
1124
+ // and stack if it came with one, plus the source location the caller gave.
1125
+ contextFor(message) {
1126
+ return {
1127
+ location: this.pendingContext.location,
1128
+ ...this.messageContext.get(message)
1129
+ };
1130
+ }
1131
+ domContext() {
1132
+ return {
1133
+ componentStack: this.pendingContext.componentStack,
1134
+ component: this.pendingContext.component,
1135
+ location: this.pendingContext.location
1136
+ };
1137
+ }
1138
+ /**
1139
+ * Apply new options to a running inspector. `<HydrationInspector>` calls
1140
+ * this when its props change; before, it read them once at mount and every
1141
+ * later change was silently ignored until a reload.
1142
+ *
1143
+ * - `onReport` takes effect for the next report.
1144
+ * - `overlay` (on/off, `position`, `locale`) rebuilds the panel, replaying
1145
+ * the reports so far — only when it actually changed, so inline objects
1146
+ * re-created on every render do not remount it.
1147
+ * - `ignore`, `classify` and `maxReports` apply to everything reported from
1148
+ * now on; reports already made stay as they are.
1149
+ */
1150
+ update(options) {
1151
+ const overlayBefore = overlayKey(this.options.overlay);
1152
+ this.options = options;
1153
+ this.collector.configure({
1154
+ maxReports: options.maxReports,
1155
+ extra: options.classify,
1156
+ ignore: buildIgnore(options.ignore)
1157
+ });
1158
+ if (this.started && overlayKey(options.overlay) !== overlayBefore) {
1159
+ this.unmountOverlay();
1160
+ this.mountOverlay();
1161
+ }
1162
+ }
1163
+ mountOverlay() {
1164
+ if (this.options.overlay === false) return;
1165
+ const handle = createOverlay(
1166
+ typeof this.options.overlay === "object" ? this.options.overlay : {}
1167
+ );
1168
+ const detach = this.collector.addSink(handle.push, { replay: true });
1169
+ this.overlayTeardown = () => {
1170
+ detach();
1171
+ handle.destroy();
1172
+ };
1173
+ }
1174
+ unmountOverlay() {
1175
+ this.overlayTeardown?.();
1176
+ this.overlayTeardown = null;
1177
+ }
1178
+ stop() {
1179
+ for (const timer of this.settlingTimers.splice(0)) clearTimeout(timer);
1180
+ this.clearScheduledInspect();
1181
+ this.unmountOverlay();
1182
+ for (const cleanup of this.cleanups.splice(0)) cleanup();
1183
+ this.started = false;
1184
+ }
1185
+ getReports() {
1186
+ return this.collector.getReports();
1187
+ }
1188
+ inspectNow(context = {}) {
1189
+ this.mergeContext(context);
1190
+ this.inspectAllRoots();
1191
+ }
1192
+ inspectAllRoots() {
1193
+ if (!this.started || typeof document === "undefined" || this.collector.isFull) {
1194
+ return;
1195
+ }
1196
+ const configured = this.options.roots;
1197
+ const selectors = configured ?? snapshotSelectors();
1198
+ const context = this.domContext();
1199
+ const seen = /* @__PURE__ */ new Set();
1200
+ for (const selector of selectors) {
1201
+ let root = null;
1202
+ try {
1203
+ root = document.querySelector(selector);
1204
+ } catch {
1205
+ this.warnRoot(selector, `"${selector}" is not a valid CSS selector.`);
1206
+ continue;
1207
+ }
1208
+ if (!root) continue;
1209
+ this.matchedRoots.add(selector);
1210
+ if (seen.has(root)) continue;
1211
+ seen.add(root);
1212
+ if (configured && chunkDXPTZB3Z_cjs.getServerHtmlForRoot(root) == null) {
1213
+ this.warnRoot(
1214
+ selector,
1215
+ `no server HTML was captured for "${selector}". Add it to the \`selectors\` prop of <HydrationSnapshotScript> so the server markup for that root is snapshotted.`
1216
+ );
1217
+ continue;
1218
+ }
1219
+ chunkQFHUKJ5K_cjs.inspectRoot(
1220
+ root,
1221
+ this.collector,
1222
+ context,
1223
+ (divergence) => resolveReactSource(divergence.element ?? null)
1224
+ );
1225
+ }
1226
+ for (const message of this.messages) {
1227
+ chunkQFHUKJ5K_cjs.reportFromMessage(message, this.collector, this.contextFor(message), {
1228
+ locationless: "skip"
1229
+ });
1230
+ }
1231
+ const concrete = this.collector.getReports().some((r) => r.cause.messageId !== "unknown.no-location");
1232
+ if (!concrete) {
1233
+ for (const message of this.messages) {
1234
+ chunkQFHUKJ5K_cjs.reportFromMessage(message, this.collector, this.contextFor(message), {
1235
+ locationless: "only"
1236
+ });
1237
+ }
1238
+ }
1239
+ }
1240
+ // A configured root that matches nothing can never be inspected — usually a
1241
+ // typo, or a selector for markup this page does not have. Checked once the
1242
+ // settling window is over rather than on the first pass, so a root that is
1243
+ // rendered a moment after hydration is not reported by mistake.
1244
+ warnUnmatchedRoots() {
1245
+ if (!this.started) return;
1246
+ for (const selector of this.options.roots ?? []) {
1247
+ if (this.matchedRoots.has(selector)) continue;
1248
+ this.warnRoot(
1249
+ selector,
1250
+ `no element matches "${selector}" on this page, so it was never inspected. Check the selector against your markup.`
1251
+ );
1252
+ }
1253
+ }
1254
+ warnRoot(selector, detail) {
1255
+ if (this.warnedRoots.has(selector)) return;
1256
+ this.warnedRoots.add(selector);
1257
+ console.warn(`[why-hydration] Skipping root: ${detail}`);
1258
+ }
1259
+ scheduleInspect() {
1260
+ if (this.inspectScheduled) return;
1261
+ this.inspectScheduled = true;
1262
+ const run = () => {
1263
+ if (!this.inspectScheduled) return;
1264
+ this.clearScheduledInspect();
1265
+ this.inspectAllRoots();
1266
+ };
1267
+ if (typeof requestAnimationFrame === "function") requestAnimationFrame(run);
1268
+ this.inspectTimer = setTimeout(run, INSPECT_FALLBACK_MS);
1269
+ }
1270
+ clearScheduledInspect() {
1271
+ this.inspectScheduled = false;
1272
+ if (this.inspectTimer != null) {
1273
+ clearTimeout(this.inspectTimer);
1274
+ this.inspectTimer = null;
1275
+ }
1276
+ }
1277
+ };
1278
+ function overlayKey(overlay) {
1279
+ if (overlay === false) return "off";
1280
+ const o = typeof overlay === "object" ? overlay : {};
1281
+ return `${o.position ?? "bottom-right"}|${o.locale ?? "auto"}`;
1282
+ }
1283
+ function snapshotSelectors() {
1284
+ const snapshot = chunkDXPTZB3Z_cjs.readSnapshot();
1285
+ const keys = snapshot ? Object.keys(snapshot.roots) : [];
1286
+ return keys.length > 0 ? keys : [...chunkDXPTZB3Z_cjs.DEFAULT_SNAPSHOT_SELECTORS];
1287
+ }
1288
+ function firstComponentFromStack(stack) {
1289
+ if (!stack) return void 0;
1290
+ const frame = /(?:^|\n)\s*(?:at|in)\s+([A-Za-z0-9_$]+)/g;
1291
+ for (const match of stack.matchAll(frame)) {
1292
+ const name = match[1];
1293
+ if (/^[A-Z]/.test(name) && !chunkQFHUKJ5K_cjs.isInternalComponent(name)) return name;
1294
+ }
1295
+ return void 0;
1296
+ }
1297
+ function InspectorImpl(props) {
1298
+ const { children, overlay, onReport, ignore, classify, maxReports } = props;
1299
+ startCapture();
1300
+ const options = {
1301
+ overlay,
1302
+ onReport,
1303
+ ignore,
1304
+ classify,
1305
+ maxReports
1306
+ };
1307
+ const optionsRef = React__namespace.useRef(options);
1308
+ const controllerRef = React__namespace.useRef(null);
1309
+ React__namespace.useEffect(() => {
1310
+ const controller = new InspectorController(optionsRef.current);
1311
+ controllerRef.current = controller;
1312
+ controller.start();
1313
+ return () => {
1314
+ controller.stop();
1315
+ if (controllerRef.current === controller) controllerRef.current = null;
1316
+ };
1317
+ }, []);
1318
+ React__namespace.useEffect(() => {
1319
+ optionsRef.current = options;
1320
+ controllerRef.current?.update(options);
1321
+ }, [overlay, onReport, ignore, classify, maxReports]);
1322
+ return React__namespace.createElement(React__namespace.Fragment, null, children);
1323
+ }
1324
+
1325
+ // src/react/index.tsx
1326
+ function PassThrough(props) {
1327
+ return React__namespace.createElement(React__namespace.Fragment, null, props.children);
1328
+ }
1329
+ var HydrationInspector = process.env.NODE_ENV !== "production" ? InspectorImpl : PassThrough;
1330
+ function createHydrationInspector(options = {}) {
1331
+ if (process.env.NODE_ENV === "production") {
1332
+ return {
1333
+ onRecoverableError: () => {
1334
+ },
1335
+ Provider: PassThrough
1336
+ };
1337
+ }
1338
+ const controller = new InspectorController(options);
1339
+ controller.start();
1340
+ function Provider(props) {
1341
+ React__namespace.useEffect(() => {
1342
+ controller.start();
1343
+ return () => controller.stop();
1344
+ }, []);
1345
+ return React__namespace.createElement(React__namespace.Fragment, null, props.children);
1346
+ }
1347
+ return {
1348
+ onRecoverableError: controller.onRecoverableError,
1349
+ Provider
1350
+ };
1351
+ }
1352
+
1353
+ exports.HydrationInspector = HydrationInspector;
1354
+ exports.createHydrationInspector = createHydrationInspector;
1355
+ //# sourceMappingURL=chunk-RWMRFTQ4.cjs.map
1356
+ //# sourceMappingURL=chunk-RWMRFTQ4.cjs.map