This is an automated email from the ASF dual-hosted git repository.
bbovenzi pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git
The following commit(s) were added to refs/heads/main by this push:
new f5fd3bc4c8f Add eslint-no-duplicate-imports (#67201)
f5fd3bc4c8f is described below
commit f5fd3bc4c8fa0d0f4c1cbbd8d265be808c7c7912
Author: Brent Bovenzi <[email protected]>
AuthorDate: Tue May 19 15:30:41 2026 -0400
Add eslint-no-duplicate-imports (#67201)
---
airflow-core/src/airflow/ui/pnpm-lock.yaml | 28 ++++++++++++++++------
airflow-core/src/airflow/ui/rules/core.js | 18 ++++++++++++++
.../ui/src/components/AdvancedSearchToggle.tsx | 3 +--
.../ui/src/components/Assets/AssetEvents.tsx | 13 +++++++---
.../ui/src/components/AttrSelectFilterMulti.tsx | 4 ++--
.../ui/src/components/DataTable/DataTable.tsx | 3 +--
.../src/components/DataTable/FilterMenuButton.tsx | 3 +--
.../src/components/DataTable/useTableUrlState.ts | 3 +--
.../ui/src/components/DisplayMarkdownButton.tsx | 3 +--
.../ui/src/components/EditableMarkdownButton.tsx | 3 +--
.../ui/src/components/Graph/DownloadButton.tsx | 3 +--
.../airflow/ui/src/components/GraphTaskFilters.tsx | 3 +--
.../src/components/MarkAs/Run/MarkRunAsButton.tsx | 3 +--
.../MarkAs/TaskGroup/MarkTaskGroupAsButton.tsx | 3 +--
.../TaskInstance/MarkTaskInstanceAsButton.tsx | 3 +--
.../airflow/ui/src/components/ReactMarkdown.tsx | 2 +-
.../src/airflow/ui/src/components/RunTypeIcon.tsx | 3 +--
.../src/components/TriggerDag/TriggerDAGButton.tsx | 4 +---
.../ui/src/layouts/Details/DetailsLayout.tsx | 4 +---
.../ui/src/layouts/Details/PanelButtons.tsx | 3 +--
.../ui/src/layouts/Details/TaskStreamFilter.tsx | 3 +--
airflow-core/src/airflow/ui/src/main.tsx | 3 +--
.../src/airflow/ui/src/pages/Asset/AssetLayout.tsx | 3 +--
.../src/airflow/ui/src/pages/Dag/Code/Code.tsx | 3 +--
.../airflow/ui/src/pages/Pools/EditPoolButton.tsx | 3 +--
.../ui/src/pages/TaskInstance/HITLResponse.tsx | 3 +--
.../src/pages/TaskInstance/Logs/TaskLogHeader.tsx | 3 +--
.../ManageVariable/DeleteVariableButton.tsx | 3 +--
.../ManageVariable/EditVariableButton.tsx | 3 +--
.../airflow/ui/src/pages/XCom/DeleteXComButton.tsx | 6 ++---
.../src/airflow/ui/src/queries/useDeleteDag.ts | 3 +--
31 files changed, 79 insertions(+), 69 deletions(-)
diff --git a/airflow-core/src/airflow/ui/pnpm-lock.yaml
b/airflow-core/src/airflow/ui/pnpm-lock.yaml
index deacc4a6867..bc1dab32411 100644
--- a/airflow-core/src/airflow/ui/pnpm-lock.yaml
+++ b/airflow-core/src/airflow/ui/pnpm-lock.yaml
@@ -962,36 +962,42 @@ packages:
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
+ libc: [glibc]
'@rolldown/[email protected]':
resolution: {integrity:
sha512-ZvRYMGrAklV9PEkgt4LQM6MjQX2P58HPAuecwYObY2DhS2t35R0I810bKi0wmaYORt6m/2Sm+Z+nFgb0WhXNcQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
+ libc: [musl]
'@rolldown/[email protected]':
resolution: {integrity:
sha512-VDpgGBzgfg5hLg+uBpCLoFG5kVvEyafmfxGUV0UHLcL5irxAK7PKNeC2MwClgk6ZAiNhmo9FLhRYgvMmedLtnQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [ppc64]
os: [linux]
+ libc: [glibc]
'@rolldown/[email protected]':
resolution: {integrity:
sha512-y1uXY3qQWCzcPgRJATPSOUP4tCemh4uBdY7e3EZbVwCJTY3gLJWnQABgeUetvED+bt1FQ01OeZwvhLS2bpNrAQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [s390x]
os: [linux]
+ libc: [glibc]
'@rolldown/[email protected]':
resolution: {integrity:
sha512-023bTPBod7J3Y/4fzAN6QtpkSABR0rigtrwaP+qSEabUh5zf6ELr9Nc7GujaROuPY3uwdSIXWrvhn1KxOvurWA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
+ libc: [glibc]
'@rolldown/[email protected]':
resolution: {integrity:
sha512-witB2O0/hU4CgfOOKUoeFgQ4GktPi1eEbAhaLAIpgD6+ZnhcPkUtPsoKKHRzmOoWPZue46IThdSgdo4XneOLYw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
+ libc: [musl]
'@rolldown/[email protected]':
resolution: {integrity:
sha512-UCL68NJ0Ud5zRipXZE9dF5PmirzJE4E4BCIOOssEnM7wLDsxjc6Qb0sGDxTNRTP53I6MZpygyCpY8Aa8sPfKPg==}
@@ -1074,24 +1080,28 @@ packages:
engines: {node: '>=10'}
cpu: [arm64]
os: [linux]
+ libc: [glibc]
'@swc/[email protected]':
resolution: {integrity:
sha512-0a+Lix+FSSHBSBOA0XznCcHo5/1nA6oLLjcnocvzXeqtdjnPb+SvchItHI+lfeiuj1sClYPDvPMLSLyXFaiIKw==}
engines: {node: '>=10'}
cpu: [arm64]
os: [linux]
+ libc: [musl]
'@swc/[email protected]':
resolution: {integrity:
sha512-wG9J8vReUlpaHz4KOD/5UE1AUgirimU4UFT9oZmupUDEofxJKYb1mTA/DrMj0s78bkBiNI+7Fo2EgPuvOJfuAA==}
engines: {node: '>=10'}
cpu: [x64]
os: [linux]
+ libc: [glibc]
'@swc/[email protected]':
resolution: {integrity:
sha512-4nwbVvCphKzicwNWRmvD5iBaZj8JYsRGa4xOxJmOyHlMDpsvvJ2OR2cODlvWyGFH6BYL1MfIAK3qph3hp0Az6g==}
engines: {node: '>=10'}
cpu: [x64]
os: [linux]
+ libc: [musl]
'@swc/[email protected]':
resolution: {integrity:
sha512-zk0RYO+LjiBCat2RTMHzAWaMky0cra9loH4oRrLKLLNuL+jarxKLFDA8xTZWEkCPLjUTwlRN7d28eDLLMgtUcQ==}
@@ -3045,24 +3055,28 @@ packages:
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [linux]
+ libc: [glibc]
[email protected]:
resolution: {integrity:
sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==}
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [linux]
+ libc: [musl]
[email protected]:
resolution: {integrity:
sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [linux]
+ libc: [glibc]
[email protected]:
resolution: {integrity:
sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [linux]
+ libc: [musl]
[email protected]:
resolution: {integrity:
sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==}
@@ -6777,7 +6791,7 @@ snapshots:
has-property-descriptors: 1.0.2
has-proto: 1.2.0
has-symbols: 1.1.0
- hasown: 2.0.2
+ hasown: 2.0.3
internal-slot: 1.1.0
is-array-buffer: 3.0.5
is-callable: 1.2.7
@@ -6845,7 +6859,7 @@ snapshots:
[email protected]:
dependencies:
- hasown: 2.0.2
+ hasown: 2.0.3
[email protected]:
dependencies:
@@ -7203,7 +7217,7 @@ snapshots:
get-proto: 1.0.1
gopd: 1.2.0
has-symbols: 1.1.0
- hasown: 2.0.2
+ hasown: 2.0.3
math-intrinsics: 1.1.0
[email protected]:
@@ -7409,7 +7423,7 @@ snapshots:
[email protected]:
dependencies:
es-errors: 1.3.0
- hasown: 2.0.2
+ hasown: 2.0.3
side-channel: 1.1.0
[email protected]: {}
@@ -7465,7 +7479,7 @@ snapshots:
[email protected]:
dependencies:
- hasown: 2.0.2
+ hasown: 2.0.3
[email protected]:
dependencies:
@@ -7523,7 +7537,7 @@ snapshots:
call-bound: 1.0.4
gopd: 1.2.0
has-tostringtag: 1.0.2
- hasown: 2.0.2
+ hasown: 2.0.3
[email protected]: {}
@@ -7759,7 +7773,7 @@ snapshots:
[email protected]:
dependencies:
- semver: 7.7.4
+ semver: 7.8.0
[email protected]: {}
diff --git a/airflow-core/src/airflow/ui/rules/core.js
b/airflow-core/src/airflow/ui/rules/core.js
index 55ee1533251..48fcce1f39a 100644
--- a/airflow-core/src/airflow/ui/rules/core.js
+++ b/airflow-core/src/airflow/ui/rules/core.js
@@ -427,6 +427,24 @@ export const coreRules = /** @type {const} @satisfies
{FlatConfig.Config} */ ({
*/
"no-duplicate-case": ERROR,
+ /**
+ * Disallow duplicate value imports from the same module.
+ * Separate `import type` statements are allowed.
+ *
+ * @example
+ * ```typescript
+ * // ❌ Incorrect
+ * import { Foo } from "src/components/ui";
+ * import { Bar } from "src/components/ui";
+ *
+ * // ✅ Correct
+ * import { Foo, Bar } from "src/components/ui";
+ * import type { Baz } from "src/components/ui";
+ * ```
+ * @see
[no-duplicate-imports](https://eslint.org/docs/latest/rules/no-duplicate-imports)
+ */
+ "no-duplicate-imports": [ERROR, { allowSeparateTypeImports: true }],
+
/**
* Disallow empty block statements.
*
diff --git
a/airflow-core/src/airflow/ui/src/components/AdvancedSearchToggle.tsx
b/airflow-core/src/airflow/ui/src/components/AdvancedSearchToggle.tsx
index b72a13bba83..3a3053c319a 100644
--- a/airflow-core/src/airflow/ui/src/components/AdvancedSearchToggle.tsx
+++ b/airflow-core/src/airflow/ui/src/components/AdvancedSearchToggle.tsx
@@ -20,8 +20,7 @@ import { Box, Stack, Text } from "@chakra-ui/react";
import { useTranslation } from "react-i18next";
import { LuRegex } from "react-icons/lu";
-import { IconButton } from "src/components/ui";
-import { Tooltip } from "src/components/ui";
+import { IconButton, Tooltip } from "src/components/ui";
export type AdvancedSearchToggleProps = {
readonly enabled: boolean;
diff --git a/airflow-core/src/airflow/ui/src/components/Assets/AssetEvents.tsx
b/airflow-core/src/airflow/ui/src/components/Assets/AssetEvents.tsx
index 18156d70811..f0f1e6173ad 100644
--- a/airflow-core/src/airflow/ui/src/components/Assets/AssetEvents.tsx
+++ b/airflow-core/src/airflow/ui/src/components/Assets/AssetEvents.tsx
@@ -16,9 +16,16 @@
* specific language governing permissions and limitations
* under the License.
*/
-import { Box, Heading, Flex, HStack, Skeleton, Separator } from
"@chakra-ui/react";
-import type { BoxProps } from "@chakra-ui/react";
-import { createListCollection } from "@chakra-ui/react/collection";
+import {
+ Box,
+ Heading,
+ Flex,
+ HStack,
+ Skeleton,
+ Separator,
+ type BoxProps,
+ createListCollection,
+} from "@chakra-ui/react";
import { useTranslation } from "react-i18next";
import { FiDatabase } from "react-icons/fi";
diff --git
a/airflow-core/src/airflow/ui/src/components/AttrSelectFilterMulti.tsx
b/airflow-core/src/airflow/ui/src/components/AttrSelectFilterMulti.tsx
index 99dab0b918b..9b45c314330 100644
--- a/airflow-core/src/airflow/ui/src/components/AttrSelectFilterMulti.tsx
+++ b/airflow-core/src/airflow/ui/src/components/AttrSelectFilterMulti.tsx
@@ -16,8 +16,8 @@
* specific language governing permissions and limitations
* under the License.
*/
-import { type CollectionItem, createListCollection } from "@chakra-ui/react";
-import type { SelectValueChangeDetails } from "@chakra-ui/react";
+import { createListCollection } from "@chakra-ui/react";
+import type { SelectValueChangeDetails, CollectionItem } from
"@chakra-ui/react";
import { Select } from "src/components/ui";
diff --git a/airflow-core/src/airflow/ui/src/components/DataTable/DataTable.tsx
b/airflow-core/src/airflow/ui/src/components/DataTable/DataTable.tsx
index 19b058aaecd..9adc95b6490 100644
--- a/airflow-core/src/airflow/ui/src/components/DataTable/DataTable.tsx
+++ b/airflow-core/src/airflow/ui/src/components/DataTable/DataTable.tsx
@@ -39,8 +39,7 @@ import { TableList } from
"src/components/DataTable/TableList";
import { ToggleTableDisplay } from
"src/components/DataTable/ToggleTableDisplay";
import { createSkeletonMock } from "src/components/DataTable/skeleton";
import type { CardDef, MetaColumn, TableState } from
"src/components/DataTable/types";
-import { IconButton } from "src/components/ui";
-import { ProgressBar, Pagination, Toaster } from "src/components/ui";
+import { IconButton, ProgressBar, Pagination, Toaster } from
"src/components/ui";
type DataTableProps<TData> = {
readonly allowFiltering?: boolean;
diff --git
a/airflow-core/src/airflow/ui/src/components/DataTable/FilterMenuButton.tsx
b/airflow-core/src/airflow/ui/src/components/DataTable/FilterMenuButton.tsx
index a378cdf9f27..bee7b9f8be4 100644
--- a/airflow-core/src/airflow/ui/src/components/DataTable/FilterMenuButton.tsx
+++ b/airflow-core/src/airflow/ui/src/components/DataTable/FilterMenuButton.tsx
@@ -20,8 +20,7 @@ import { flexRender, type Header, type Table } from
"@tanstack/react-table";
import { useTranslation } from "react-i18next";
import { LuColumns3 } from "react-icons/lu";
-import { IconButton } from "src/components/ui";
-import { Menu } from "src/components/ui";
+import { Menu, IconButton } from "src/components/ui";
import { Checkbox } from "src/components/ui/Checkbox";
type Props<TData> = {
diff --git
a/airflow-core/src/airflow/ui/src/components/DataTable/useTableUrlState.ts
b/airflow-core/src/airflow/ui/src/components/DataTable/useTableUrlState.ts
index a968a0c4cb4..da4889b833a 100644
--- a/airflow-core/src/airflow/ui/src/components/DataTable/useTableUrlState.ts
+++ b/airflow-core/src/airflow/ui/src/components/DataTable/useTableUrlState.ts
@@ -16,8 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-import { useSearchParams } from "react-router-dom";
-import { useLocation } from "react-router-dom";
+import { useSearchParams, useLocation } from "react-router-dom";
import { useLocalStorage } from "usehooks-ts";
import { tableSortKey } from "src/constants/localStorage";
diff --git
a/airflow-core/src/airflow/ui/src/components/DisplayMarkdownButton.tsx
b/airflow-core/src/airflow/ui/src/components/DisplayMarkdownButton.tsx
index 422a7503482..0724adfa351 100644
--- a/airflow-core/src/airflow/ui/src/components/DisplayMarkdownButton.tsx
+++ b/airflow-core/src/airflow/ui/src/components/DisplayMarkdownButton.tsx
@@ -19,8 +19,7 @@
import { Box, Heading, VStack } from "@chakra-ui/react";
import { type ReactElement, useState } from "react";
-import { IconButton } from "src/components/ui";
-import { Dialog } from "src/components/ui";
+import { IconButton, Dialog } from "src/components/ui";
import { ResizableWrapper, MARKDOWN_DIALOG_STORAGE_KEY } from
"src/components/ui/ResizableWrapper";
import ReactMarkdown from "./ReactMarkdown";
diff --git
a/airflow-core/src/airflow/ui/src/components/EditableMarkdownButton.tsx
b/airflow-core/src/airflow/ui/src/components/EditableMarkdownButton.tsx
index 4cd85e1d38b..7d2f5e61c8e 100644
--- a/airflow-core/src/airflow/ui/src/components/EditableMarkdownButton.tsx
+++ b/airflow-core/src/airflow/ui/src/components/EditableMarkdownButton.tsx
@@ -21,8 +21,7 @@ import { useState } from "react";
import { useTranslation } from "react-i18next";
import { PiNoteBold, PiNoteBlankBold } from "react-icons/pi";
-import { IconButton } from "src/components/ui";
-import { Dialog } from "src/components/ui";
+import { IconButton, Dialog } from "src/components/ui";
import { ResizableWrapper, MARKDOWN_DIALOG_STORAGE_KEY } from
"src/components/ui/ResizableWrapper";
import EditableMarkdownArea from "./EditableMarkdownArea";
diff --git
a/airflow-core/src/airflow/ui/src/components/Graph/DownloadButton.tsx
b/airflow-core/src/airflow/ui/src/components/Graph/DownloadButton.tsx
index f67e990c765..327c63306b8 100644
--- a/airflow-core/src/airflow/ui/src/components/Graph/DownloadButton.tsx
+++ b/airflow-core/src/airflow/ui/src/components/Graph/DownloadButton.tsx
@@ -21,8 +21,7 @@ import { toPng } from "html-to-image";
import { useTranslation } from "react-i18next";
import { FiDownload } from "react-icons/fi";
-import { IconButton } from "src/components/ui";
-import { toaster } from "src/components/ui";
+import { IconButton, toaster } from "src/components/ui";
export const DownloadButton = ({ name }: { readonly name: string }) => {
const { t: translate } = useTranslation("components");
diff --git a/airflow-core/src/airflow/ui/src/components/GraphTaskFilters.tsx
b/airflow-core/src/airflow/ui/src/components/GraphTaskFilters.tsx
index 68db3a5218d..e6515458f48 100644
--- a/airflow-core/src/airflow/ui/src/components/GraphTaskFilters.tsx
+++ b/airflow-core/src/airflow/ui/src/components/GraphTaskFilters.tsx
@@ -33,8 +33,7 @@ import { useParams, useSearchParams } from "react-router-dom";
import type { TaskInstanceState } from "openapi/requests/types.gen";
import { AttrSelectFilterMulti } from "src/components/AttrSelectFilterMulti";
import { StateBadge } from "src/components/StateBadge";
-import { IconButton } from "src/components/ui";
-import { Select } from "src/components/ui";
+import { IconButton, Select } from "src/components/ui";
import { Menu } from "src/components/ui/Menu";
import { NumberInputField, NumberInputRoot } from
"src/components/ui/NumberInput";
import { SearchParamsKeys } from "src/constants/searchParams";
diff --git
a/airflow-core/src/airflow/ui/src/components/MarkAs/Run/MarkRunAsButton.tsx
b/airflow-core/src/airflow/ui/src/components/MarkAs/Run/MarkRunAsButton.tsx
index e98c76872c0..975691c9657 100644
--- a/airflow-core/src/airflow/ui/src/components/MarkAs/Run/MarkRunAsButton.tsx
+++ b/airflow-core/src/airflow/ui/src/components/MarkAs/Run/MarkRunAsButton.tsx
@@ -25,8 +25,7 @@ import { LuCheck } from "react-icons/lu";
import type { DAGRunPatchStates, DAGRunResponse } from
"openapi/requests/types.gen";
import { StateBadge } from "src/components/StateBadge";
-import { IconButton } from "src/components/ui";
-import { Menu, Tooltip } from "src/components/ui";
+import { IconButton, Menu, Tooltip } from "src/components/ui";
import { allowedStates } from "../utils";
import MarkRunAsDialog from "./MarkRunAsDialog";
diff --git
a/airflow-core/src/airflow/ui/src/components/MarkAs/TaskGroup/MarkTaskGroupAsButton.tsx
b/airflow-core/src/airflow/ui/src/components/MarkAs/TaskGroup/MarkTaskGroupAsButton.tsx
index 0d40ac61a7d..1fd80b403ac 100644
---
a/airflow-core/src/airflow/ui/src/components/MarkAs/TaskGroup/MarkTaskGroupAsButton.tsx
+++
b/airflow-core/src/airflow/ui/src/components/MarkAs/TaskGroup/MarkTaskGroupAsButton.tsx
@@ -25,8 +25,7 @@ import { LuCheck } from "react-icons/lu";
import type { LightGridTaskInstanceSummary, TaskInstanceState } from
"openapi/requests/types.gen";
import { StateBadge } from "src/components/StateBadge";
-import { IconButton } from "src/components/ui";
-import { Menu, Tooltip } from "src/components/ui";
+import { IconButton, Menu, Tooltip } from "src/components/ui";
import { allowedStates } from "../utils";
import MarkTaskGroupAsDialog from "./MarkTaskGroupAsDialog";
diff --git
a/airflow-core/src/airflow/ui/src/components/MarkAs/TaskInstance/MarkTaskInstanceAsButton.tsx
b/airflow-core/src/airflow/ui/src/components/MarkAs/TaskInstance/MarkTaskInstanceAsButton.tsx
index c0b4d105059..a930938132d 100644
---
a/airflow-core/src/airflow/ui/src/components/MarkAs/TaskInstance/MarkTaskInstanceAsButton.tsx
+++
b/airflow-core/src/airflow/ui/src/components/MarkAs/TaskInstance/MarkTaskInstanceAsButton.tsx
@@ -25,8 +25,7 @@ import { LuCheck } from "react-icons/lu";
import type { TaskInstanceResponse, TaskInstanceState } from
"openapi/requests/types.gen";
import { StateBadge } from "src/components/StateBadge";
-import { IconButton } from "src/components/ui";
-import { Menu, Tooltip } from "src/components/ui";
+import { IconButton, Menu, Tooltip } from "src/components/ui";
import { allowedStates } from "../utils";
import MarkTaskInstanceAsDialog from "./MarkTaskInstanceAsDialog";
diff --git a/airflow-core/src/airflow/ui/src/components/ReactMarkdown.tsx
b/airflow-core/src/airflow/ui/src/components/ReactMarkdown.tsx
index cc14275265f..57a585a2b91 100644
--- a/airflow-core/src/airflow/ui/src/components/ReactMarkdown.tsx
+++ b/airflow-core/src/airflow/ui/src/components/ReactMarkdown.tsx
@@ -29,8 +29,8 @@ import {
Text,
} from "@chakra-ui/react";
import type { PropsWithChildren, ReactNode } from "react";
-import type { Components, Options } from "react-markdown";
import ReactMD from "react-markdown";
+import type { Components, Options } from "react-markdown";
import remarkGfm from "remark-gfm";
import { useColorMode } from "src/context/colorMode";
diff --git a/airflow-core/src/airflow/ui/src/components/RunTypeIcon.tsx
b/airflow-core/src/airflow/ui/src/components/RunTypeIcon.tsx
index 9eef6066a0b..bec5289d1f0 100644
--- a/airflow-core/src/airflow/ui/src/components/RunTypeIcon.tsx
+++ b/airflow-core/src/airflow/ui/src/components/RunTypeIcon.tsx
@@ -17,8 +17,7 @@
* under the License.
*/
import type { IconBaseProps } from "react-icons";
-import { HiDatabase } from "react-icons/hi";
-import { HiLightningBolt } from "react-icons/hi";
+import { HiDatabase, HiLightningBolt } from "react-icons/hi";
import { MdPlayArrow, MdOutlineSchedule } from "react-icons/md";
import { RiArrowGoBackFill } from "react-icons/ri";
diff --git
a/airflow-core/src/airflow/ui/src/components/TriggerDag/TriggerDAGButton.tsx
b/airflow-core/src/airflow/ui/src/components/TriggerDag/TriggerDAGButton.tsx
index 303d6e5799e..7466bfc4a6a 100644
--- a/airflow-core/src/airflow/ui/src/components/TriggerDag/TriggerDAGButton.tsx
+++ b/airflow-core/src/airflow/ui/src/components/TriggerDag/TriggerDAGButton.tsx
@@ -24,9 +24,7 @@ import { FiPlay } from "react-icons/fi";
import { useParams } from "react-router-dom";
import { useDagRunServiceGetDagRun } from "openapi/queries";
-import { IconButton } from "src/components/ui";
-import { Menu } from "src/components/ui";
-import { Tooltip } from "src/components/ui";
+import { IconButton, Menu, Tooltip } from "src/components/ui";
import TriggerDAGModal from "./TriggerDAGModal";
diff --git a/airflow-core/src/airflow/ui/src/layouts/Details/DetailsLayout.tsx
b/airflow-core/src/airflow/ui/src/layouts/Details/DetailsLayout.tsx
index 6bb9b5f1bad..97d184a4491 100644
--- a/airflow-core/src/airflow/ui/src/layouts/Details/DetailsLayout.tsx
+++ b/airflow-core/src/airflow/ui/src/layouts/Details/DetailsLayout.tsx
@@ -42,9 +42,7 @@ import BackfillBanner from
"src/components/Banner/BackfillBanner";
import { DAGWarningsModal } from "src/components/DAGWarningsModal";
import { SearchDagsButton } from "src/components/SearchDags";
import { TriggerDAGButton } from "src/components/TriggerDag/TriggerDAGButton";
-import { IconButton } from "src/components/ui";
-import { ProgressBar } from "src/components/ui";
-import { Toaster } from "src/components/ui";
+import { IconButton, ProgressBar, Toaster } from "src/components/ui";
import type { DagView } from "src/constants/dagView";
import { DEFAULT_DAG_VIEW_KEY } from "src/constants/localStorage";
import { SearchParamsKeys } from "src/constants/searchParams";
diff --git a/airflow-core/src/airflow/ui/src/layouts/Details/PanelButtons.tsx
b/airflow-core/src/airflow/ui/src/layouts/Details/PanelButtons.tsx
index d0f1cc6a635..2d550c20941 100644
--- a/airflow-core/src/airflow/ui/src/layouts/Details/PanelButtons.tsx
+++ b/airflow-core/src/airflow/ui/src/layouts/Details/PanelButtons.tsx
@@ -41,8 +41,7 @@ import { useLocalStorage } from "usehooks-ts";
import { DagVersionSelect } from "src/components/DagVersionSelect";
import { DirectionDropdown } from "src/components/Graph/DirectionDropdown";
import { GraphTaskFilters } from "src/components/GraphTaskFilters";
-import { IconButton } from "src/components/ui";
-import { Tooltip } from "src/components/ui";
+import { IconButton, Tooltip } from "src/components/ui";
import { type ButtonGroupOption, ButtonGroupToggle } from
"src/components/ui/ButtonGroupToggle";
import type { DagView } from "src/constants/dagView";
import { dependenciesKey } from "src/constants/localStorage";
diff --git
a/airflow-core/src/airflow/ui/src/layouts/Details/TaskStreamFilter.tsx
b/airflow-core/src/airflow/ui/src/layouts/Details/TaskStreamFilter.tsx
index 231edeb31cc..af8905950ed 100644
--- a/airflow-core/src/airflow/ui/src/layouts/Details/TaskStreamFilter.tsx
+++ b/airflow-core/src/airflow/ui/src/layouts/Details/TaskStreamFilter.tsx
@@ -22,8 +22,7 @@ import { useTranslation } from "react-i18next";
import { FiFilter, FiInfo } from "react-icons/fi";
import { useParams, useSearchParams } from "react-router-dom";
-import { IconButton } from "src/components/ui";
-import { Tooltip } from "src/components/ui";
+import { IconButton, Tooltip } from "src/components/ui";
import { Menu } from "src/components/ui/Menu";
export const TaskStreamFilter = () => {
diff --git a/airflow-core/src/airflow/ui/src/main.tsx
b/airflow-core/src/airflow/ui/src/main.tsx
index 4daeb12b19e..ef24cb75b29 100644
--- a/airflow-core/src/airflow/ui/src/main.tsx
+++ b/airflow-core/src/airflow/ui/src/main.tsx
@@ -20,8 +20,7 @@ import * as ChakraUI from "@chakra-ui/react";
import * as EmotionReact from "@emotion/react";
import { QueryClientProvider } from "@tanstack/react-query";
import axios, { type AxiosError } from "axios";
-import { StrictMode } from "react";
-import React from "react";
+import React, { StrictMode } from "react";
import * as ReactDOM from "react-dom";
import { createRoot } from "react-dom/client";
import { I18nextProvider } from "react-i18next";
diff --git a/airflow-core/src/airflow/ui/src/pages/Asset/AssetLayout.tsx
b/airflow-core/src/airflow/ui/src/pages/Asset/AssetLayout.tsx
index e44540d2b59..47a7edf6295 100644
--- a/airflow-core/src/airflow/ui/src/pages/Asset/AssetLayout.tsx
+++ b/airflow-core/src/airflow/ui/src/pages/Asset/AssetLayout.tsx
@@ -21,8 +21,7 @@ import { useReactFlow } from "@xyflow/react";
import { useState } from "react";
import { useTranslation } from "react-i18next";
import { PanelGroup, Panel, PanelResizeHandle } from "react-resizable-panels";
-import { useParams } from "react-router-dom";
-import { useSearchParams } from "react-router-dom";
+import { useParams, useSearchParams } from "react-router-dom";
import { useAssetServiceGetAsset, useAssetServiceGetAssetEvents } from
"openapi/queries";
import { AssetEvents } from "src/components/Assets/AssetEvents";
diff --git a/airflow-core/src/airflow/ui/src/pages/Dag/Code/Code.tsx
b/airflow-core/src/airflow/ui/src/pages/Dag/Code/Code.tsx
index 0196f947ca9..8d6f3a3455e 100644
--- a/airflow-core/src/airflow/ui/src/pages/Dag/Code/Code.tsx
+++ b/airflow-core/src/airflow/ui/src/pages/Dag/Code/Code.tsx
@@ -34,8 +34,7 @@ import { DagVersionSelect } from
"src/components/DagVersionSelect";
import { ErrorAlert } from "src/components/ErrorAlert";
import Editor, { type EditorProps } from "src/components/MonacoEditor";
import Time from "src/components/Time";
-import { ClipboardRoot, ClipboardButton, Tooltip } from "src/components/ui";
-import { ProgressBar } from "src/components/ui";
+import { ClipboardRoot, ClipboardButton, Tooltip, ProgressBar } from
"src/components/ui";
import { useMonacoTheme } from "src/context/colorMode";
import useSelectedVersion from "src/hooks/useSelectedVersion";
import { useConfig } from "src/queries/useConfig";
diff --git a/airflow-core/src/airflow/ui/src/pages/Pools/EditPoolButton.tsx
b/airflow-core/src/airflow/ui/src/pages/Pools/EditPoolButton.tsx
index e4893ffcc7a..6036f5714d6 100644
--- a/airflow-core/src/airflow/ui/src/pages/Pools/EditPoolButton.tsx
+++ b/airflow-core/src/airflow/ui/src/pages/Pools/EditPoolButton.tsx
@@ -21,8 +21,7 @@ import { useTranslation } from "react-i18next";
import { FiEdit } from "react-icons/fi";
import type { PoolResponse } from "openapi/requests/types.gen";
-import { IconButton } from "src/components/ui";
-import { Dialog } from "src/components/ui";
+import { IconButton, Dialog } from "src/components/ui";
import { useEditPool } from "src/queries/useEditPool";
import PoolForm, { type PoolBody } from "./PoolForm";
diff --git
a/airflow-core/src/airflow/ui/src/pages/TaskInstance/HITLResponse.tsx
b/airflow-core/src/airflow/ui/src/pages/TaskInstance/HITLResponse.tsx
index 65bd1042a4f..aecd524db47 100644
--- a/airflow-core/src/airflow/ui/src/pages/TaskInstance/HITLResponse.tsx
+++ b/airflow-core/src/airflow/ui/src/pages/TaskInstance/HITLResponse.tsx
@@ -17,8 +17,7 @@
* under the License.
*/
import { Box } from "@chakra-ui/react";
-import { useParams } from "react-router-dom";
-import { useSearchParams } from "react-router-dom";
+import { useParams, useSearchParams } from "react-router-dom";
import {
useTaskInstanceServiceGetHitlDetailTryDetail,
diff --git
a/airflow-core/src/airflow/ui/src/pages/TaskInstance/Logs/TaskLogHeader.tsx
b/airflow-core/src/airflow/ui/src/pages/TaskInstance/Logs/TaskLogHeader.tsx
index f3d70a3a4d0..8e50660314e 100644
--- a/airflow-core/src/airflow/ui/src/pages/TaskInstance/Logs/TaskLogHeader.tsx
+++ b/airflow-core/src/airflow/ui/src/pages/TaskInstance/Logs/TaskLogHeader.tsx
@@ -32,8 +32,7 @@ import { useSearchParams } from "react-router-dom";
import type { TaskInstanceResponse } from "openapi/requests/types.gen";
import { TaskTrySelect } from "src/components/TaskTrySelect";
-import { IconButton } from "src/components/ui";
-import { Menu, Select } from "src/components/ui";
+import { IconButton, Menu, Select } from "src/components/ui";
import { LazyClipboard } from "src/components/ui/LazyClipboard";
import { SearchParamsKeys } from "src/constants/searchParams";
import { defaultSystem } from "src/theme";
diff --git
a/airflow-core/src/airflow/ui/src/pages/Variables/ManageVariable/DeleteVariableButton.tsx
b/airflow-core/src/airflow/ui/src/pages/Variables/ManageVariable/DeleteVariableButton.tsx
index 487f7466b7d..eaa94a6ddb5 100644
---
a/airflow-core/src/airflow/ui/src/pages/Variables/ManageVariable/DeleteVariableButton.tsx
+++
b/airflow-core/src/airflow/ui/src/pages/Variables/ManageVariable/DeleteVariableButton.tsx
@@ -20,8 +20,7 @@ import { Button, Code, Flex, Heading, Text, useDisclosure,
VStack } from "@chakr
import { useTranslation } from "react-i18next";
import { FiTrash2 } from "react-icons/fi";
-import { IconButton } from "src/components/ui";
-import { Dialog } from "src/components/ui";
+import { IconButton, Dialog } from "src/components/ui";
import { useDeleteVariable } from "src/queries/useDeleteVariable";
type Props = {
diff --git
a/airflow-core/src/airflow/ui/src/pages/Variables/ManageVariable/EditVariableButton.tsx
b/airflow-core/src/airflow/ui/src/pages/Variables/ManageVariable/EditVariableButton.tsx
index 12e258d3fb1..3ab1888c332 100644
---
a/airflow-core/src/airflow/ui/src/pages/Variables/ManageVariable/EditVariableButton.tsx
+++
b/airflow-core/src/airflow/ui/src/pages/Variables/ManageVariable/EditVariableButton.tsx
@@ -21,8 +21,7 @@ import { useTranslation } from "react-i18next";
import { FiEdit } from "react-icons/fi";
import type { VariableResponse } from "openapi/requests/types.gen";
-import { IconButton } from "src/components/ui";
-import { Dialog } from "src/components/ui";
+import { IconButton, Dialog } from "src/components/ui";
import { useEditVariable } from "src/queries/useEditVariable";
import type { VariableBody } from "./VariableForm";
diff --git a/airflow-core/src/airflow/ui/src/pages/XCom/DeleteXComButton.tsx
b/airflow-core/src/airflow/ui/src/pages/XCom/DeleteXComButton.tsx
index 082d7d1b321..828125d24cc 100644
--- a/airflow-core/src/airflow/ui/src/pages/XCom/DeleteXComButton.tsx
+++ b/airflow-core/src/airflow/ui/src/pages/XCom/DeleteXComButton.tsx
@@ -23,11 +23,9 @@ import { FiTrash2 } from "react-icons/fi";
import { useXcomServiceGetXcomEntriesKey } from "openapi/queries";
import { XcomService } from "openapi/requests/services.gen";
-import type { XComResponse } from "openapi/requests/types.gen";
-import type { DeleteXcomEntryData } from "openapi/requests/types.gen";
+import type { XComResponse, DeleteXcomEntryData } from
"openapi/requests/types.gen";
import DeleteDialog from "src/components/DeleteDialog";
-import { IconButton } from "src/components/ui";
-import { toaster } from "src/components/ui";
+import { IconButton, toaster } from "src/components/ui";
type DeleteXComButtonProps = {
readonly xcom: XComResponse;
diff --git a/airflow-core/src/airflow/ui/src/queries/useDeleteDag.ts
b/airflow-core/src/airflow/ui/src/queries/useDeleteDag.ts
index d5f4838df72..2c94ccef980 100644
--- a/airflow-core/src/airflow/ui/src/queries/useDeleteDag.ts
+++ b/airflow-core/src/airflow/ui/src/queries/useDeleteDag.ts
@@ -19,8 +19,7 @@
import { useQueryClient } from "@tanstack/react-query";
import { useTranslation } from "react-i18next";
-import { useDagServiceDeleteDag, useDagServiceGetDagsUiKey } from
"openapi/queries";
-import { useDagServiceGetDagKey } from "openapi/queries";
+import { useDagServiceDeleteDag, useDagServiceGetDagsUiKey,
useDagServiceGetDagKey } from "openapi/queries";
import { toaster } from "src/components/ui";
import { gridQueryKeys } from "src/queries/gridViewQueryKeys";
import { createErrorToaster } from "src/utils";