@eslint-react/eslint-plugin 1.11.0-beta.4 → 1.11.0-beta.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
  [![Size](https://img.shields.io/bundlephobia/minzip/@eslint-react/eslint-plugin?label=gzip&style=flat&colorA=000000&colorB=000000)](https://bundlephobia.com/package/@eslint-react/eslint-plugin)
7
7
  [![Downloads](https://img.shields.io/npm/dt/@eslint-react/eslint-plugin.svg?style=flat&colorA=000000&colorB=000000)](https://npmjs.com/package/@eslint-react/eslint-plugin)
8
8
 
9
- A series of composable ESLint plugins for building robust and reliable React applications across all platforms.
9
+ A series of ESLint plugins for building robust and reliable React applications.
10
10
 
11
11
  ## Features
12
12
 
package/dist/index.d.mts CHANGED
@@ -227,6 +227,7 @@ declare const _default: {
227
227
  };
228
228
  readonly rules: {
229
229
  readonly "@eslint-react/web-api/no-leaked-event-listener": "warn";
230
+ readonly "@eslint-react/web-api/no-leaked-timeout": "warn";
230
231
  readonly "@eslint-react/dom/no-children-in-void-dom-elements": "warn";
231
232
  readonly "@eslint-react/dom/no-dangerously-set-innerhtml": "warn";
232
233
  readonly "@eslint-react/dom/no-dangerously-set-innerhtml-with-children": "error";
@@ -286,6 +287,7 @@ declare const _default: {
286
287
  readonly plugins: readonly ["@eslint-react"];
287
288
  readonly rules: {
288
289
  readonly "@eslint-react/web-api/no-leaked-event-listener": "warn";
290
+ readonly "@eslint-react/web-api/no-leaked-timeout": "warn";
289
291
  readonly "@eslint-react/dom/no-children-in-void-dom-elements": "warn";
290
292
  readonly "@eslint-react/dom/no-dangerously-set-innerhtml": "warn";
291
293
  readonly "@eslint-react/dom/no-dangerously-set-innerhtml-with-children": "error";
@@ -353,6 +355,7 @@ declare const _default: {
353
355
  readonly rules: {
354
356
  readonly "@eslint-react/no-leaked-conditional-rendering": "warn";
355
357
  readonly "@eslint-react/web-api/no-leaked-event-listener": "warn";
358
+ readonly "@eslint-react/web-api/no-leaked-timeout": "warn";
356
359
  readonly "@eslint-react/dom/no-children-in-void-dom-elements": "warn";
357
360
  readonly "@eslint-react/dom/no-dangerously-set-innerhtml": "warn";
358
361
  readonly "@eslint-react/dom/no-dangerously-set-innerhtml-with-children": "error";
@@ -413,6 +416,7 @@ declare const _default: {
413
416
  readonly rules: {
414
417
  readonly "@eslint-react/no-leaked-conditional-rendering": "warn";
415
418
  readonly "@eslint-react/web-api/no-leaked-event-listener": "warn";
419
+ readonly "@eslint-react/web-api/no-leaked-timeout": "warn";
416
420
  readonly "@eslint-react/dom/no-children-in-void-dom-elements": "warn";
417
421
  readonly "@eslint-react/dom/no-dangerously-set-innerhtml": "warn";
418
422
  readonly "@eslint-react/dom/no-dangerously-set-innerhtml-with-children": "error";
@@ -538,6 +542,7 @@ declare const _default: {
538
542
  };
539
543
  readonly rules: {
540
544
  "@eslint-react/web-api/no-leaked-event-listener"?: "off";
545
+ "@eslint-react/web-api/no-leaked-timeout"?: "off";
541
546
  };
542
547
  readonly settings: {
543
548
  readonly "react-x": {
@@ -554,6 +559,7 @@ declare const _default: {
554
559
  readonly plugins: readonly ["@eslint-react"];
555
560
  readonly rules: {
556
561
  "@eslint-react/web-api/no-leaked-event-listener"?: "off";
562
+ "@eslint-react/web-api/no-leaked-timeout"?: "off";
557
563
  };
558
564
  readonly settings: {
559
565
  readonly "react-x": {
@@ -670,6 +676,7 @@ declare const _default: {
670
676
  readonly "@eslint-react/dom/no-unsafe-iframe-sandbox": "warn";
671
677
  readonly "@eslint-react/dom/no-unsafe-target-blank": "warn";
672
678
  readonly "@eslint-react/web-api/no-leaked-event-listener": "warn";
679
+ readonly "@eslint-react/web-api/no-leaked-timeout": "warn";
673
680
  readonly "@eslint-react/hooks-extra/ensure-custom-hooks-using-other-hooks": "warn";
674
681
  readonly "@eslint-react/hooks-extra/ensure-use-callback-has-non-empty-deps": "warn";
675
682
  readonly "@eslint-react/hooks-extra/ensure-use-memo-has-non-empty-deps": "warn";
@@ -750,6 +757,7 @@ declare const _default: {
750
757
  readonly "@eslint-react/dom/no-unsafe-iframe-sandbox": "warn";
751
758
  readonly "@eslint-react/dom/no-unsafe-target-blank": "warn";
752
759
  readonly "@eslint-react/web-api/no-leaked-event-listener": "warn";
760
+ readonly "@eslint-react/web-api/no-leaked-timeout": "warn";
753
761
  readonly "@eslint-react/hooks-extra/ensure-custom-hooks-using-other-hooks": "warn";
754
762
  readonly "@eslint-react/hooks-extra/ensure-use-callback-has-non-empty-deps": "warn";
755
763
  readonly "@eslint-react/hooks-extra/ensure-use-memo-has-non-empty-deps": "warn";
@@ -837,6 +845,7 @@ declare const _default: {
837
845
  readonly "@eslint-react/dom/no-unsafe-iframe-sandbox"?: "off";
838
846
  readonly "@eslint-react/dom/no-unsafe-target-blank"?: "off";
839
847
  readonly "@eslint-react/web-api/no-leaked-event-listener"?: "off";
848
+ readonly "@eslint-react/web-api/no-leaked-timeout"?: "off";
840
849
  readonly "@eslint-react/hooks-extra/ensure-custom-hooks-using-other-hooks"?: "off";
841
850
  readonly "@eslint-react/hooks-extra/ensure-use-callback-has-non-empty-deps"?: "off";
842
851
  readonly "@eslint-react/hooks-extra/ensure-use-memo-has-non-empty-deps"?: "off";
@@ -917,6 +926,7 @@ declare const _default: {
917
926
  readonly "@eslint-react/dom/no-unsafe-iframe-sandbox"?: "off";
918
927
  readonly "@eslint-react/dom/no-unsafe-target-blank"?: "off";
919
928
  readonly "@eslint-react/web-api/no-leaked-event-listener"?: "off";
929
+ readonly "@eslint-react/web-api/no-leaked-timeout"?: "off";
920
930
  readonly "@eslint-react/hooks-extra/ensure-custom-hooks-using-other-hooks"?: "off";
921
931
  readonly "@eslint-react/hooks-extra/ensure-use-callback-has-non-empty-deps"?: "off";
922
932
  readonly "@eslint-react/hooks-extra/ensure-use-memo-has-non-empty-deps"?: "off";
@@ -1010,7 +1020,7 @@ declare const _default: {
1010
1020
  excepts?: readonly string[];
1011
1021
  rule?: "CONSTANT_CASE" | "PascalCase";
1012
1022
  } | "CONSTANT_CASE" | "PascalCase" | undefined], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
1013
- readonly "naming-convention/filename": _typescript_eslint_utils_ts_eslint.RuleModule<"filenameCaseMismatch" | "filenameCaseMismatchSuggestion" | "filenameEmpty", readonly ["PascalCase" | {
1023
+ readonly "naming-convention/filename": _typescript_eslint_utils_ts_eslint.RuleModule<"filenameCaseMismatchSuggestion" | "filenameEmpty", readonly ["PascalCase" | {
1014
1024
  excepts?: readonly string[];
1015
1025
  extensions?: readonly string[];
1016
1026
  rule?: "PascalCase" | "camelCase" | "kebab-case" | "snake_case";
@@ -1027,6 +1037,7 @@ declare const _default: {
1027
1037
  readonly "hooks-extra/no-direct-set-state-in-use-layout-effect": _typescript_eslint_utils_ts_eslint.RuleModule<"noDirectSetStateInUseLayoutEffect", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
1028
1038
  readonly "hooks-extra/prefer-use-state-lazy-initialization": _typescript_eslint_utils_ts_eslint.RuleModule<"preferUseStateLazyInitialization", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
1029
1039
  readonly "web-api/no-leaked-event-listener": _typescript_eslint_utils_ts_eslint.RuleModule<"noLeakedEventListenerInEffect" | "noLeakedEventListenerInLifecycle" | "noLeakedEventListenerOfInlineFunction", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
1040
+ readonly "web-api/no-leaked-timeout": _typescript_eslint_utils_ts_eslint.RuleModule<"noLeakedTimeoutInEffect" | "noLeakedTimeoutInLifecycle" | "noLeakedTimeoutNoTimeoutId", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
1030
1041
  readonly "dom/no-children-in-void-dom-elements": _typescript_eslint_utils_ts_eslint.RuleModule<"noChildrenInVoidDomElements", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
1031
1042
  readonly "dom/no-dangerously-set-innerhtml": _typescript_eslint_utils_ts_eslint.RuleModule<"noDangerouslySetInnerhtml", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
1032
1043
  readonly "dom/no-dangerously-set-innerhtml-with-children": _typescript_eslint_utils_ts_eslint.RuleModule<"noDangerouslySetInnerhtmlWithChildren", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
package/dist/index.d.ts CHANGED
@@ -227,6 +227,7 @@ declare const _default: {
227
227
  };
228
228
  readonly rules: {
229
229
  readonly "@eslint-react/web-api/no-leaked-event-listener": "warn";
230
+ readonly "@eslint-react/web-api/no-leaked-timeout": "warn";
230
231
  readonly "@eslint-react/dom/no-children-in-void-dom-elements": "warn";
231
232
  readonly "@eslint-react/dom/no-dangerously-set-innerhtml": "warn";
232
233
  readonly "@eslint-react/dom/no-dangerously-set-innerhtml-with-children": "error";
@@ -286,6 +287,7 @@ declare const _default: {
286
287
  readonly plugins: readonly ["@eslint-react"];
287
288
  readonly rules: {
288
289
  readonly "@eslint-react/web-api/no-leaked-event-listener": "warn";
290
+ readonly "@eslint-react/web-api/no-leaked-timeout": "warn";
289
291
  readonly "@eslint-react/dom/no-children-in-void-dom-elements": "warn";
290
292
  readonly "@eslint-react/dom/no-dangerously-set-innerhtml": "warn";
291
293
  readonly "@eslint-react/dom/no-dangerously-set-innerhtml-with-children": "error";
@@ -353,6 +355,7 @@ declare const _default: {
353
355
  readonly rules: {
354
356
  readonly "@eslint-react/no-leaked-conditional-rendering": "warn";
355
357
  readonly "@eslint-react/web-api/no-leaked-event-listener": "warn";
358
+ readonly "@eslint-react/web-api/no-leaked-timeout": "warn";
356
359
  readonly "@eslint-react/dom/no-children-in-void-dom-elements": "warn";
357
360
  readonly "@eslint-react/dom/no-dangerously-set-innerhtml": "warn";
358
361
  readonly "@eslint-react/dom/no-dangerously-set-innerhtml-with-children": "error";
@@ -413,6 +416,7 @@ declare const _default: {
413
416
  readonly rules: {
414
417
  readonly "@eslint-react/no-leaked-conditional-rendering": "warn";
415
418
  readonly "@eslint-react/web-api/no-leaked-event-listener": "warn";
419
+ readonly "@eslint-react/web-api/no-leaked-timeout": "warn";
416
420
  readonly "@eslint-react/dom/no-children-in-void-dom-elements": "warn";
417
421
  readonly "@eslint-react/dom/no-dangerously-set-innerhtml": "warn";
418
422
  readonly "@eslint-react/dom/no-dangerously-set-innerhtml-with-children": "error";
@@ -538,6 +542,7 @@ declare const _default: {
538
542
  };
539
543
  readonly rules: {
540
544
  "@eslint-react/web-api/no-leaked-event-listener"?: "off";
545
+ "@eslint-react/web-api/no-leaked-timeout"?: "off";
541
546
  };
542
547
  readonly settings: {
543
548
  readonly "react-x": {
@@ -554,6 +559,7 @@ declare const _default: {
554
559
  readonly plugins: readonly ["@eslint-react"];
555
560
  readonly rules: {
556
561
  "@eslint-react/web-api/no-leaked-event-listener"?: "off";
562
+ "@eslint-react/web-api/no-leaked-timeout"?: "off";
557
563
  };
558
564
  readonly settings: {
559
565
  readonly "react-x": {
@@ -670,6 +676,7 @@ declare const _default: {
670
676
  readonly "@eslint-react/dom/no-unsafe-iframe-sandbox": "warn";
671
677
  readonly "@eslint-react/dom/no-unsafe-target-blank": "warn";
672
678
  readonly "@eslint-react/web-api/no-leaked-event-listener": "warn";
679
+ readonly "@eslint-react/web-api/no-leaked-timeout": "warn";
673
680
  readonly "@eslint-react/hooks-extra/ensure-custom-hooks-using-other-hooks": "warn";
674
681
  readonly "@eslint-react/hooks-extra/ensure-use-callback-has-non-empty-deps": "warn";
675
682
  readonly "@eslint-react/hooks-extra/ensure-use-memo-has-non-empty-deps": "warn";
@@ -750,6 +757,7 @@ declare const _default: {
750
757
  readonly "@eslint-react/dom/no-unsafe-iframe-sandbox": "warn";
751
758
  readonly "@eslint-react/dom/no-unsafe-target-blank": "warn";
752
759
  readonly "@eslint-react/web-api/no-leaked-event-listener": "warn";
760
+ readonly "@eslint-react/web-api/no-leaked-timeout": "warn";
753
761
  readonly "@eslint-react/hooks-extra/ensure-custom-hooks-using-other-hooks": "warn";
754
762
  readonly "@eslint-react/hooks-extra/ensure-use-callback-has-non-empty-deps": "warn";
755
763
  readonly "@eslint-react/hooks-extra/ensure-use-memo-has-non-empty-deps": "warn";
@@ -837,6 +845,7 @@ declare const _default: {
837
845
  readonly "@eslint-react/dom/no-unsafe-iframe-sandbox"?: "off";
838
846
  readonly "@eslint-react/dom/no-unsafe-target-blank"?: "off";
839
847
  readonly "@eslint-react/web-api/no-leaked-event-listener"?: "off";
848
+ readonly "@eslint-react/web-api/no-leaked-timeout"?: "off";
840
849
  readonly "@eslint-react/hooks-extra/ensure-custom-hooks-using-other-hooks"?: "off";
841
850
  readonly "@eslint-react/hooks-extra/ensure-use-callback-has-non-empty-deps"?: "off";
842
851
  readonly "@eslint-react/hooks-extra/ensure-use-memo-has-non-empty-deps"?: "off";
@@ -917,6 +926,7 @@ declare const _default: {
917
926
  readonly "@eslint-react/dom/no-unsafe-iframe-sandbox"?: "off";
918
927
  readonly "@eslint-react/dom/no-unsafe-target-blank"?: "off";
919
928
  readonly "@eslint-react/web-api/no-leaked-event-listener"?: "off";
929
+ readonly "@eslint-react/web-api/no-leaked-timeout"?: "off";
920
930
  readonly "@eslint-react/hooks-extra/ensure-custom-hooks-using-other-hooks"?: "off";
921
931
  readonly "@eslint-react/hooks-extra/ensure-use-callback-has-non-empty-deps"?: "off";
922
932
  readonly "@eslint-react/hooks-extra/ensure-use-memo-has-non-empty-deps"?: "off";
@@ -1010,7 +1020,7 @@ declare const _default: {
1010
1020
  excepts?: readonly string[];
1011
1021
  rule?: "CONSTANT_CASE" | "PascalCase";
1012
1022
  } | "CONSTANT_CASE" | "PascalCase" | undefined], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
1013
- readonly "naming-convention/filename": _typescript_eslint_utils_ts_eslint.RuleModule<"filenameCaseMismatch" | "filenameCaseMismatchSuggestion" | "filenameEmpty", readonly ["PascalCase" | {
1023
+ readonly "naming-convention/filename": _typescript_eslint_utils_ts_eslint.RuleModule<"filenameCaseMismatchSuggestion" | "filenameEmpty", readonly ["PascalCase" | {
1014
1024
  excepts?: readonly string[];
1015
1025
  extensions?: readonly string[];
1016
1026
  rule?: "PascalCase" | "camelCase" | "kebab-case" | "snake_case";
@@ -1027,6 +1037,7 @@ declare const _default: {
1027
1037
  readonly "hooks-extra/no-direct-set-state-in-use-layout-effect": _typescript_eslint_utils_ts_eslint.RuleModule<"noDirectSetStateInUseLayoutEffect", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
1028
1038
  readonly "hooks-extra/prefer-use-state-lazy-initialization": _typescript_eslint_utils_ts_eslint.RuleModule<"preferUseStateLazyInitialization", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
1029
1039
  readonly "web-api/no-leaked-event-listener": _typescript_eslint_utils_ts_eslint.RuleModule<"noLeakedEventListenerInEffect" | "noLeakedEventListenerInLifecycle" | "noLeakedEventListenerOfInlineFunction", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
1040
+ readonly "web-api/no-leaked-timeout": _typescript_eslint_utils_ts_eslint.RuleModule<"noLeakedTimeoutInEffect" | "noLeakedTimeoutInLifecycle" | "noLeakedTimeoutNoTimeoutId", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
1030
1041
  readonly "dom/no-children-in-void-dom-elements": _typescript_eslint_utils_ts_eslint.RuleModule<"noChildrenInVoidDomElements", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
1031
1042
  readonly "dom/no-dangerously-set-innerhtml": _typescript_eslint_utils_ts_eslint.RuleModule<"noDangerouslySetInnerhtml", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
1032
1043
  readonly "dom/no-dangerously-set-innerhtml-with-children": _typescript_eslint_utils_ts_eslint.RuleModule<"noDangerouslySetInnerhtmlWithChildren", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener>;
package/dist/index.js CHANGED
@@ -38,7 +38,7 @@ var react__namespace = /*#__PURE__*/_interopNamespace(react);
38
38
 
39
39
  // package.json
40
40
  var name = "@eslint-react/eslint-plugin";
41
- var version = "1.11.0-beta.4";
41
+ var version = "1.11.0-beta.7";
42
42
  function transformKeys(obj, transform) {
43
43
  if (tools.typeOf(obj) !== "object") return obj;
44
44
  const res = {};
@@ -115,6 +115,7 @@ var allPreset = {
115
115
  "dom/no-unsafe-target-blank": "warn",
116
116
  // Part: Web API
117
117
  "web-api/no-leaked-event-listener": "warn",
118
+ "web-api/no-leaked-timeout": "warn",
118
119
  // Part: Hooks Extra
119
120
  "hooks-extra/ensure-custom-hooks-using-other-hooks": "warn",
120
121
  "hooks-extra/ensure-use-callback-has-non-empty-deps": "warn",
@@ -188,7 +189,8 @@ var domPreset = {
188
189
  "dom/no-unsafe-target-blank": "warn"
189
190
  };
190
191
  var webApiPreset = {
191
- "web-api/no-leaked-event-listener": "warn"
192
+ "web-api/no-leaked-event-listener": "warn",
193
+ "web-api/no-leaked-timeout": "warn"
192
194
  };
193
195
  var recommendedPreset = {
194
196
  ...corePreset,
package/dist/index.mjs CHANGED
@@ -11,7 +11,7 @@ import * as react from 'eslint-plugin-react-x';
11
11
 
12
12
  // package.json
13
13
  var name = "@eslint-react/eslint-plugin";
14
- var version = "1.11.0-beta.4";
14
+ var version = "1.11.0-beta.7";
15
15
  function transformKeys(obj, transform) {
16
16
  if (typeOf(obj) !== "object") return obj;
17
17
  const res = {};
@@ -88,6 +88,7 @@ var allPreset = {
88
88
  "dom/no-unsafe-target-blank": "warn",
89
89
  // Part: Web API
90
90
  "web-api/no-leaked-event-listener": "warn",
91
+ "web-api/no-leaked-timeout": "warn",
91
92
  // Part: Hooks Extra
92
93
  "hooks-extra/ensure-custom-hooks-using-other-hooks": "warn",
93
94
  "hooks-extra/ensure-use-callback-has-non-empty-deps": "warn",
@@ -161,7 +162,8 @@ var domPreset = {
161
162
  "dom/no-unsafe-target-blank": "warn"
162
163
  };
163
164
  var webApiPreset = {
164
- "web-api/no-leaked-event-listener": "warn"
165
+ "web-api/no-leaked-event-listener": "warn",
166
+ "web-api/no-leaked-timeout": "warn"
165
167
  };
166
168
  var recommendedPreset = {
167
169
  ...corePreset,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eslint-react/eslint-plugin",
3
- "version": "1.11.0-beta.4",
3
+ "version": "1.11.0-beta.7",
4
4
  "description": "The main ESLint plugin of ESLint React. Contains all the rules and presets of ESLint React.",
5
5
  "keywords": [
6
6
  "eslint",
@@ -43,19 +43,19 @@
43
43
  "./package.json"
44
44
  ],
45
45
  "dependencies": {
46
- "@typescript-eslint/scope-manager": "^8.1.0",
47
- "@typescript-eslint/type-utils": "^8.1.0",
48
- "@typescript-eslint/types": "^8.1.0",
49
- "@typescript-eslint/utils": "^8.1.0",
50
- "@eslint-react/shared": "1.11.0-beta.4",
51
- "@eslint-react/tools": "1.11.0-beta.4",
52
- "@eslint-react/types": "1.11.0-beta.4",
53
- "eslint-plugin-react-debug": "1.11.0-beta.4",
54
- "eslint-plugin-react-dom": "1.11.0-beta.4",
55
- "eslint-plugin-react-hooks-extra": "1.11.0-beta.4",
56
- "eslint-plugin-react-naming-convention": "1.11.0-beta.4",
57
- "eslint-plugin-react-web-api": "1.11.0-beta.4",
58
- "eslint-plugin-react-x": "1.11.0-beta.4"
46
+ "@typescript-eslint/scope-manager": "^8.2.0",
47
+ "@typescript-eslint/type-utils": "^8.2.0",
48
+ "@typescript-eslint/types": "^8.2.0",
49
+ "@typescript-eslint/utils": "^8.2.0",
50
+ "@eslint-react/shared": "1.11.0-beta.7",
51
+ "@eslint-react/tools": "1.11.0-beta.7",
52
+ "eslint-plugin-react-debug": "1.11.0-beta.7",
53
+ "eslint-plugin-react-dom": "1.11.0-beta.7",
54
+ "@eslint-react/types": "1.11.0-beta.7",
55
+ "eslint-plugin-react-hooks-extra": "1.11.0-beta.7",
56
+ "eslint-plugin-react-naming-convention": "1.11.0-beta.7",
57
+ "eslint-plugin-react-x": "1.11.0-beta.7",
58
+ "eslint-plugin-react-web-api": "1.11.0-beta.7"
59
59
  },
60
60
  "devDependencies": {
61
61
  "tsup": "^8.2.4"