@olenbetong/synergi-react 2.5.2 → 2.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/es/components/AppMenu/index.js +1 -1
  2. package/es/components/Checkbox/index.js +1 -1
  3. package/es/components/ImageEditor/ImageEditor.js +1 -1
  4. package/es/components/ImageEditor/defaultPlugins.d.ts +1 -1
  5. package/es/components/ImageEditor/plugins/cropPlugin/CropOverlay.js +1 -1
  6. package/es/components/ImageEditor/plugins/cropPlugin/CropToolbar.js +1 -1
  7. package/es/components/ImageEditor/plugins/cropPlugin/useCropTool.js +2 -2
  8. package/es/components/ImageEditor/plugins/redactPlugin/RedactOverlay.js +1 -1
  9. package/es/components/ImageEditor/plugins/redactPlugin/RedactToolbar.js +1 -1
  10. package/es/components/ImageEditor/plugins/zoomPlugin/ZoomControls.js +1 -1
  11. package/es/components/MergeProgressDialog/index.js +2 -2
  12. package/es/components/Portal/index.js +1 -1
  13. package/es/components/Sidebar/index.js +2 -2
  14. package/es/elements/ElementDamage/DamageFormButtons.js +1 -1
  15. package/es/elements/ElementDamage/DescriptionInput.js +1 -1
  16. package/es/elements/ElementDamage/DuplicateDamage/DesktopView.js +1 -1
  17. package/es/elements/ElementDamage/DuplicateDamage/DublicateElementDamageDialog.js +1 -1
  18. package/es/elements/ElementDamage/HiddenDamageFields.js +1 -1
  19. package/es/elements/ElementDamage/RegisterFix.js +1 -1
  20. package/es/elements/ElementDamage/TransportElementSelect.js +1 -1
  21. package/es/elements/ElementLookup.js +1 -1
  22. package/es/elements/ElementLookupDialog/HIDScanner/index.js +1 -1
  23. package/es/elements/ProjectSelect.js +1 -1
  24. package/es/useTranslation/index.js +1 -1
  25. package/package.json +6 -6
  26. package/src/components/AppMenu/index.tsx +1 -1
  27. package/src/components/Checkbox/index.tsx +1 -1
  28. package/src/components/DateNavigator/index.tsx +3 -3
  29. package/src/components/ImageEditor/plugins/cropPlugin/useCropTool.ts +2 -2
  30. package/src/components/MergeProgressDialog/index.tsx +1 -1
  31. package/src/components/Portal/index.tsx +1 -1
  32. package/src/components/Sidebar/index.tsx +2 -2
  33. package/src/components/SplitContainer/index.tsx +1 -1
  34. package/src/components/Toolbar/index.tsx +1 -1
  35. package/src/components/ValueToggleGroup/index.tsx +1 -1
  36. package/src/useTranslation/index.ts +1 -1
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import "./AppMenu.css";
3
3
  import { useData, useLoading } from "@olenbetong/appframe-react";
4
4
  import { useEffect, useMemo, useRef, useState } from "react";
@@ -10,7 +10,7 @@ export const Checkbox = forwardRef(function Checkbox({ className, disabled = fal
10
10
  inputId = id ?? inputId;
11
11
  let inputIdRef = `#${inputId}`;
12
12
  let input = useRef(null);
13
- // biome-ignore lint/correctness/useExhaustiveDependencies: Ref object
13
+ // oxlint-disable-next-line react-hooks/exhaustive-deps -- Ref object
14
14
  useEffect(() => {
15
15
  if (typeof ref === "function") {
16
16
  ref(input.current);
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import ArrowBackIcon from "@mui/icons-material/ArrowBack";
3
3
  import CheckIcon from "@mui/icons-material/Check";
4
4
  import RedoIcon from "@mui/icons-material/Redo";
@@ -1,4 +1,4 @@
1
1
  /** Default set of image editing plugins in display order. */
2
- export declare const defaultPlugins: (import("./types.js").ToolPlugin | import("./types.js").ActionPlugin)[];
2
+ export declare const defaultPlugins: (import("./types.js").ActionPlugin | import("./types.js").ToolPlugin)[];
3
3
  /** Default view plugin providing zoom and pan. */
4
4
  export declare const defaultViewPlugin: import("./types.js").ViewPlugin;
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Alert, CircularProgress, Typography } from "@mui/material";
3
3
  import { getLocalizedString } from "@olenbetong/appframe-core";
4
4
  import { CropCanvas } from "../../CropCanvas.js";
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import CheckIcon from "@mui/icons-material/Check";
3
3
  import CloseIcon from "@mui/icons-material/Close";
4
4
  import { Button, CircularProgress } from "@mui/material";
@@ -86,7 +86,7 @@ export function useCropTool(imageUrl, enabled) {
86
86
  };
87
87
  }
88
88
  /** Loads the image at native resolution, maps relative corners, and warps. */
89
- // biome-ignore lint/suspicious/noExplicitAny: OpenCV.js types
89
+ // oxlint-disable-next-line typescript/no-explicit-any -- OpenCV.js types
90
90
  function cropImageAtFullResolution(cv, imageUrl, relCorners) {
91
91
  return new Promise((resolve, reject) => {
92
92
  let img = new Image();
@@ -106,7 +106,7 @@ function cropImageAtFullResolution(cv, imageUrl, relCorners) {
106
106
  });
107
107
  }
108
108
  /** Performs a perspective warp using OpenCV.js. */
109
- // biome-ignore lint/suspicious/noExplicitAny: OpenCV.js types
109
+ // oxlint-disable-next-line typescript/no-explicit-any -- OpenCV.js types
110
110
  function perspectiveCrop(cv, srcCanvas, corners) {
111
111
  let [tl, tr, br, bl] = corners;
112
112
  let outW = Math.round(Math.max(Math.hypot(tr.x - tl.x, tr.y - tl.y), Math.hypot(br.x - bl.x, br.y - bl.y)));
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useZoom } from "../zoomPlugin/ZoomContext.js";
3
3
  import { useRedactContext } from "./RedactContext.js";
4
4
  import { normRect } from "./useRedactTool.js";
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import CheckIcon from "@mui/icons-material/Check";
3
3
  import CloseIcon from "@mui/icons-material/Close";
4
4
  import DeleteSweepIcon from "@mui/icons-material/DeleteSweep";
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import ZoomInIcon from "@mui/icons-material/ZoomIn";
3
3
  import ZoomInMapIcon from "@mui/icons-material/ZoomInMap";
4
4
  import ZoomOutIcon from "@mui/icons-material/ZoomOut";
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Box, Button, DialogActions, LinearProgress, Link, Typography } from "@mui/material";
3
3
  import { getLocalizedString } from "@olenbetong/appframe-core";
4
4
  import { ResponsiveDialog } from "@olenbetong/appframe-mui";
@@ -23,7 +23,7 @@ export function MergeProgressDialog({ open, onClose, getMergerId, mergeType = "p
23
23
  return () => clearInterval(timer);
24
24
  }, [phase.kind]);
25
25
  // Start the merge job each time the dialog opens
26
- // biome-ignore lint/correctness/useExhaustiveDependencies: intentionally only re-runs on open change
26
+ // oxlint-disable-next-line react-hooks/exhaustive-deps -- intentionally only re-runs on open change
27
27
  useEffect(() => {
28
28
  if (!open)
29
29
  return;
@@ -9,7 +9,7 @@ export function Portal({ children, root, type = "div" }) {
9
9
  const forceUpdate = useForceUpdate();
10
10
  const mountNode = useRef(null);
11
11
  const portalNode = useRef(null);
12
- // biome-ignore lint/correctness/useExhaustiveDependencies: because reasons
12
+ // oxlint-disable-next-line react-hooks/exhaustive-deps -- because reasons
13
13
  useEffect(() => {
14
14
  const ownerDocument = mountNode.current?.ownerDocument;
15
15
  if (ownerDocument && !portalNode.current) {
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import "./index.css";
3
3
  import clsx from "clsx";
4
4
  import { useEffect, useRef, useState } from "react";
@@ -23,7 +23,7 @@ export function Sidebar(props) {
23
23
  element?.addEventListener("transitionend", toggleHiddenContent);
24
24
  return () => element?.removeEventListener("transitionend", toggleHiddenContent);
25
25
  }, [open]);
26
- // biome-ignore lint/correctness/useExhaustiveDependencies: TODO
26
+ // oxlint-disable-next-line react-hooks/exhaustive-deps -- TODO
27
27
  useEffect(() => {
28
28
  function handleCloseSidebar(evt) {
29
29
  if (evt.key === "Escape") {
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import Add from "@mui/icons-material/Add";
3
3
  import { Button } from "@mui/material";
4
4
  import { getLocalizedString } from "@olenbetong/appframe-core";
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Autocomplete, Button, TextField } from "@mui/material";
3
3
  import { getLocalizedString } from "@olenbetong/appframe-core";
4
4
  import { useEffect, useRef, useState } from "react";
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Grid, Typography } from "@mui/material";
3
3
  import { getLocalizedString } from "@olenbetong/appframe-core";
4
4
  import { Link } from "@olenbetong/appframe-mui";
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import Add from "@mui/icons-material/Add";
3
3
  import { Button, Dialog, DialogActions, DialogContent, DialogTitle, Grid, useMediaQuery } from "@mui/material";
4
4
  import { getLocalizedString } from "@olenbetong/appframe-core";
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  export function HiddenDamageFields({ primKey, ID }) {
3
3
  return (_jsxs(_Fragment, { children: [_jsx("input", { type: "hidden", name: "PrimKey", value: primKey }), _jsx("input", { type: "hidden", name: "ID", value: ID })] }));
4
4
  }
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import CheckIcon from "@mui/icons-material/Check";
3
3
  import { Button, Checkbox, FormControlLabel, Typography } from "@mui/material";
4
4
  import { getLocalizedString, localize } from "@olenbetong/appframe-core";
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import DropDownArrowIcon from "@mui/icons-material/KeyboardArrowDown";
3
3
  import { Button, ListItemText, Menu, MenuItem } from "@mui/material";
4
4
  import { getLocalizedString } from "@olenbetong/appframe-core";
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import SearchIcon from "@mui/icons-material/Search";
3
3
  import { IconButton, TextField } from "@mui/material";
4
4
  import { getLocalizedString } from "@olenbetong/appframe-core";
@@ -1,4 +1,4 @@
1
- import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import "./index.css";
3
3
  import { Box, Button } from "@mui/material";
4
4
  import { getLocalizedString } from "@olenbetong/appframe-core";
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Autocomplete, ListItem, ListItemText, TextField } from "@mui/material";
3
3
  import { getLocalizedString } from "@olenbetong/appframe-core";
4
4
  import { useDataWithFilter, useDebounce } from "@olenbetong/appframe-react";
@@ -27,7 +27,7 @@ export function useTranslation(text, targetLanguage, apiKey) {
27
27
  let [from, setSourceLang] = useState(null);
28
28
  let [isTranslating, setIsTranslating] = useState(false);
29
29
  let textRef = useRef(text);
30
- // biome-ignore lint/correctness/useExhaustiveDependencies: this is a way of resetting the state so we don't show outdated translations when the text changes
30
+ // oxlint-disable-next-line react-hooks/exhaustive-deps -- this is a way of resetting the state so we don't show outdated translations when the text changes
31
31
  useEffect(() => {
32
32
  textRef.current = text;
33
33
  return () => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@olenbetong/synergi-react",
3
- "version": "2.5.2",
3
+ "version": "2.5.3",
4
4
  "description": "Standalone React component for SynergiWeb and Partner Portal",
5
5
  "type": "module",
6
6
  "exports": {
@@ -23,8 +23,8 @@
23
23
  "license": "MIT",
24
24
  "peerDependencies": {
25
25
  "@mui/material": ">=9.0.0",
26
- "react": ">=18.2.0",
27
- "react-dom": ">=18.2.0"
26
+ "react": ">=19.2.7",
27
+ "react-dom": ">=19.2.7"
28
28
  },
29
29
  "sideEffects": false,
30
30
  "dependencies": {
@@ -36,7 +36,7 @@
36
36
  "filepond-plugin-image-exif-orientation": "^1.0.11",
37
37
  "filepond-plugin-image-preview": "^4.6.12",
38
38
  "filepond-plugin-image-resize": "^2.0.10",
39
- "filepond-plugin-image-transform": "^3.8.7",
39
+ "filepond-plugin-image-transform": "^3.8.8",
40
40
  "localforage": "^1.10.0",
41
41
  "mitt": "^3.0.1",
42
42
  "pdf-lib": "^1.17.1",
@@ -44,8 +44,8 @@
44
44
  "react-pdf": "^10.4.1",
45
45
  "@olenbetong/appframe-core": "2.11.10",
46
46
  "@olenbetong/appframe-data": "1.5.0",
47
- "@olenbetong/appframe-react": "1.22.0",
48
- "@olenbetong/appframe-mui": "6.3.0"
47
+ "@olenbetong/appframe-react": "1.23.0",
48
+ "@olenbetong/appframe-mui": "6.4.0"
49
49
  },
50
50
  "repository": {
51
51
  "type": "git",
@@ -124,7 +124,7 @@ export function AppMenu({ dataObject }: AppMenuProps) {
124
124
  </svg>
125
125
  </button>
126
126
 
127
- {/* biome-ignore lint/a11y/useKeyWithClickEvents: backdrop click handled via mouse coords */}
127
+ {/* oxlint-disable-next-line jsx-a11y/click-events-have-key-events -- backdrop click handled via mouse coords */}
128
128
  <dialog
129
129
  ref={dialogRef}
130
130
  className="app-menu-dialog"
@@ -39,7 +39,7 @@ export const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(function Che
39
39
  let inputIdRef = `#${inputId}`;
40
40
  let input = useRef<HTMLInputElement>(null);
41
41
 
42
- // biome-ignore lint/correctness/useExhaustiveDependencies: Ref object
42
+ // oxlint-disable-next-line react-hooks/exhaustive-deps -- Ref object
43
43
  useEffect(() => {
44
44
  if (typeof ref === "function") {
45
45
  ref(input.current);
@@ -168,9 +168,9 @@ export function DateNavigator({
168
168
  }
169
169
 
170
170
  return (
171
- // biome-ignore lint/a11y/noNoninteractiveTabindex: I hate this component
172
- // biome-ignore lint/a11y/noStaticElementInteractions: legacy component
173
- // biome-ignore lint/a11y/useAriaPropsSupportedByRole: legacy component
171
+ // oxlint-disable-next-line jsx-a11y/no-noninteractive-tabindex -- I hate this component
172
+ // oxlint-disable-next-line jsx-a11y/no-static-element-interactions -- legacy component
173
+ // oxlint-disable-next-line jsx-a11y/role-supports-aria-props -- legacy component
174
174
  <div className="ObDateNavigator-root" onKeyDown={handleKeyDown} tabIndex={0} aria-label="Date navigator">
175
175
  <Arrow direction="left" onClick={() => updateDate(new Date(dateUtc - oneDay))} disabled={disablePrev} />
176
176
  <div className="ObDateNavigator-date">{text}</div>
@@ -120,7 +120,7 @@ export function useCropTool(imageUrl: string, enabled: boolean): CropToolState {
120
120
  }
121
121
 
122
122
  /** Loads the image at native resolution, maps relative corners, and warps. */
123
- // biome-ignore lint/suspicious/noExplicitAny: OpenCV.js types
123
+ // oxlint-disable-next-line typescript/no-explicit-any -- OpenCV.js types
124
124
  function cropImageAtFullResolution(cv: any, imageUrl: string, relCorners: Quad): Promise<Blob> {
125
125
  return new Promise((resolve, reject) => {
126
126
  let img = new Image();
@@ -141,7 +141,7 @@ function cropImageAtFullResolution(cv: any, imageUrl: string, relCorners: Quad):
141
141
  }
142
142
 
143
143
  /** Performs a perspective warp using OpenCV.js. */
144
- // biome-ignore lint/suspicious/noExplicitAny: OpenCV.js types
144
+ // oxlint-disable-next-line typescript/no-explicit-any -- OpenCV.js types
145
145
  function perspectiveCrop(cv: any, srcCanvas: HTMLCanvasElement, corners: Quad): Promise<Blob> {
146
146
  let [tl, tr, br, bl] = corners;
147
147
  let outW = Math.round(Math.max(Math.hypot(tr.x - tl.x, tr.y - tl.y), Math.hypot(br.x - bl.x, br.y - bl.y)));
@@ -38,7 +38,7 @@ export function MergeProgressDialog({ open, onClose, getMergerId, mergeType = "p
38
38
  }, [phase.kind]);
39
39
 
40
40
  // Start the merge job each time the dialog opens
41
- // biome-ignore lint/correctness/useExhaustiveDependencies: intentionally only re-runs on open change
41
+ // oxlint-disable-next-line react-hooks/exhaustive-deps -- intentionally only re-runs on open change
42
42
  useEffect(() => {
43
43
  if (!open) return;
44
44
 
@@ -18,7 +18,7 @@ export function Portal({ children, root, type = "div" }: PortalProps) {
18
18
  const mountNode = useRef<HTMLDivElement>(null);
19
19
  const portalNode = useRef<HTMLElement | null>(null);
20
20
 
21
- // biome-ignore lint/correctness/useExhaustiveDependencies: because reasons
21
+ // oxlint-disable-next-line react-hooks/exhaustive-deps -- because reasons
22
22
  useEffect(() => {
23
23
  const ownerDocument = mountNode.current?.ownerDocument;
24
24
  if (ownerDocument && !portalNode.current) {
@@ -49,7 +49,7 @@ export function Sidebar(props: SidebarProps) {
49
49
  return () => element?.removeEventListener("transitionend", toggleHiddenContent);
50
50
  }, [open]);
51
51
 
52
- // biome-ignore lint/correctness/useExhaustiveDependencies: TODO
52
+ // oxlint-disable-next-line react-hooks/exhaustive-deps -- TODO
53
53
  useEffect(() => {
54
54
  function handleCloseSidebar(evt: KeyboardEvent) {
55
55
  if (evt.key === "Escape") {
@@ -106,7 +106,7 @@ export function Sidebar(props: SidebarProps) {
106
106
  >
107
107
  {(open || !hidden) && children}
108
108
  </div>
109
- {/** biome-ignore lint/a11y/noStaticElementInteractions: legacy component */}
109
+ {/** oxlint-disable-next-line jsx-a11y/no-static-element-interactions -- legacy component */}
110
110
  <div
111
111
  role="presentation"
112
112
  tabIndex={-1}
@@ -67,7 +67,7 @@ type DividerProps = {
67
67
 
68
68
  const Divider = forwardRef<HTMLDivElement, DividerProps>(function Divider(props: DividerProps, ref) {
69
69
  return (
70
- // biome-ignore lint/a11y/useSemanticElements: NO!
70
+ // oxlint-disable-next-line jsx-a11y/prefer-tag-over-role -- NO!
71
71
  <div
72
72
  className={clsx("ObSplitContainer-divider", props.className)}
73
73
  tabIndex={0}
@@ -94,7 +94,7 @@ function BreadcrumbsInner({ items }: ToolbarBreadcrumbsProps) {
94
94
  {overflowOpen && (
95
95
  <ul className="ob-breadcrumbs__overflow-menu" role="menu">
96
96
  {hiddenItems.map((item, index) => (
97
- // biome-ignore lint/suspicious/noArrayIndexKey: stable list with no reordering
97
+ // oxlint-disable-next-line react/no-array-index-key -- stable list with no reordering
98
98
  <li key={index} role="menuitem">
99
99
  {item.href ? <a href={item.href}>{item.label}</a> : <span>{item.label}</span>}
100
100
  </li>
@@ -30,7 +30,7 @@ export const ValueToggleGroup = forwardRef<HTMLFieldSetElement, ValueToggleGroup
30
30
  let isControlled = value !== undefined;
31
31
 
32
32
  return (
33
- // biome-ignore lint/a11y/noNoninteractiveElementToInteractiveRole: legacy component
33
+ // oxlint-disable-next-line jsx-a11y/no-noninteractive-element-to-interactive-role -- legacy component
34
34
  <fieldset className={clsx("ObValueToggleGroup", orientation, className)} role="radiogroup" ref={ref} style={style}>
35
35
  {options.map((opt) => {
36
36
  return (
@@ -35,7 +35,7 @@ export function useTranslation(text: string, targetLanguage: string, apiKey: str
35
35
  let [isTranslating, setIsTranslating] = useState(false);
36
36
  let textRef = useRef(text);
37
37
 
38
- // biome-ignore lint/correctness/useExhaustiveDependencies: this is a way of resetting the state so we don't show outdated translations when the text changes
38
+ // oxlint-disable-next-line react-hooks/exhaustive-deps -- this is a way of resetting the state so we don't show outdated translations when the text changes
39
39
  useEffect(() => {
40
40
  textRef.current = text;
41
41
  return () => {