diff --git a/package.json b/package.json
index 81ef994..70d4490 100644
--- a/package.json
+++ b/package.json
@@ -10,6 +10,7 @@
"format": "prettier --write \"src/**/*.{ts,tsx}\"",
"lint": "eslint src",
"lint:fix": "eslint src --fix",
+ "fix:imports": "node scripts/fix-duplicate-imports.mjs",
"prepare": "husky"
},
"dependencies": {
diff --git a/scripts/fix-duplicate-imports.mjs b/scripts/fix-duplicate-imports.mjs
new file mode 100644
index 0000000..1353dae
--- /dev/null
+++ b/scripts/fix-duplicate-imports.mjs
@@ -0,0 +1,227 @@
+/**
+ * fix-duplicate-imports.mjs
+ *
+ * Merges duplicate import statements from the same module across all TypeScript
+ * source files in the project. Run this whenever `npm run lint` reports
+ * `no-duplicate-imports` errors.
+ *
+ * Usage:
+ * node scripts/fix-duplicate-imports.mjs
+ *
+ * Handles:
+ * import type { A, B } from 'module' — type-only imports
+ * import Default from 'module' — default imports
+ * import Default, { A, B } from 'mod' — mixed default + named
+ * import { A, B } from 'module' — named imports
+ * import {\n A,\n B\n} from 'mod' — multi-line named imports
+ *
+ * When merging a `import type` with a value import from the same module,
+ * type-only specifiers are inlined as `type Name` in the merged statement.
+ */
+
+import { readFileSync, readdirSync, statSync, writeFileSync } from "fs";
+import { extname, join, resolve } from "path";
+
+// ---------------------------------------------------------------------------
+// Config
+// ---------------------------------------------------------------------------
+
+const projectRoot = resolve(new URL(".", import.meta.url).pathname, "..");
+const srcDir = join(projectRoot, "src");
+const extensions = new Set([".ts", ".tsx"]);
+
+// ---------------------------------------------------------------------------
+// File discovery — recursively find all TS/TSX files under src/
+// ---------------------------------------------------------------------------
+
+function findFiles(dir) {
+ const results = [];
+ for (const entry of readdirSync(dir)) {
+ const full = join(dir, entry);
+ if (statSync(full).isDirectory()) {
+ results.push(...findFiles(full));
+ } else if (extensions.has(extname(entry))) {
+ results.push(full);
+ }
+ }
+ return results;
+}
+
+// ---------------------------------------------------------------------------
+// Import extraction
+// ---------------------------------------------------------------------------
+
+/**
+ * Extracts all top-level import statements from file content.
+ * Returns array of { start, end, raw, module, isType, defaultImport, namedImports }
+ * where start/end are character positions in the content.
+ */
+function extractImports(content) {
+ const results = [];
+ const importRe = /^import\s+([\s\S]*?)from\s+['"]([^'"]+)['"]\s*;?/gm;
+
+ let match;
+ while ((match = importRe.exec(content)) !== null) {
+ const raw = match[0];
+ const specifierPart = match[1];
+ const moduleName = match[2];
+
+ const isType = /^type\s+/.test(specifierPart.trimStart());
+ const cleanSpec = specifierPart.replace(/^type\s+/, "").trim();
+
+ let defaultImport = null;
+ let namedStr = null;
+
+ const namespaceMatch = cleanSpec.match(/^\*\s+as\s+(\w+)/);
+ if (namespaceMatch) {
+ defaultImport = `* as ${namespaceMatch[1]}`;
+ } else {
+ const braceIdx = cleanSpec.indexOf("{");
+ if (braceIdx === -1) {
+ const def = cleanSpec.replace(/,$/, "").trim();
+ if (def) defaultImport = def;
+ } else {
+ const beforeBrace = cleanSpec.slice(0, braceIdx).replace(/,$/, "").trim();
+ if (beforeBrace) defaultImport = beforeBrace;
+ const closeBrace = cleanSpec.lastIndexOf("}");
+ namedStr = cleanSpec.slice(braceIdx + 1, closeBrace);
+ }
+ }
+
+ const namedImports = namedStr
+ ? namedStr.split(",").map((s) => s.trim()).filter(Boolean)
+ : [];
+
+ results.push({
+ start: match.index,
+ end: match.index + raw.length,
+ raw,
+ module: moduleName,
+ isType,
+ defaultImport,
+ namedImports,
+ });
+ }
+
+ return results;
+}
+
+// ---------------------------------------------------------------------------
+// Import merging
+// ---------------------------------------------------------------------------
+
+/**
+ * Build a single merged import statement from multiple imports of the same module.
+ *
+ * - All type imports → merged `import type { ... }`
+ * - Mixed type + value → merged value import with inline `type Name` specifiers
+ */
+function buildMergedImport(moduleName, importList) {
+ const allType = importList.every((i) => i.isType);
+
+ if (allType) {
+ const allNamed = new Set(importList.flatMap((i) => i.namedImports));
+ const defaultImport = importList.map((i) => i.defaultImport).find(Boolean) ?? null;
+ const parts = [];
+ if (defaultImport) parts.push(defaultImport);
+ if (allNamed.size > 0) parts.push(`{ ${[...allNamed].join(", ")} }`);
+ if (parts.length === 0) return `import type "${moduleName}";`;
+ return `import type ${parts.join(", ")} from "${moduleName}";`;
+ }
+
+ // Mixed: collect value default, type-only named, value named separately
+ let valueDefault = null;
+ const typeNamed = new Set();
+ const valueNamed = new Set();
+
+ for (const imp of importList) {
+ if (imp.defaultImport && !imp.isType) valueDefault = imp.defaultImport;
+ for (const n of imp.namedImports) {
+ (imp.isType ? typeNamed : valueNamed).add(n);
+ }
+ }
+
+ // Build named specifiers: `type X` for type-only, plain for value
+ const typeSpecifiers = [...typeNamed].filter((n) => !valueNamed.has(n)).map((n) => `type ${n}`);
+ const valueSpecifiers = [...valueNamed];
+ const namedParts = [...typeSpecifiers, ...valueSpecifiers];
+
+ const parts = [];
+ if (valueDefault) parts.push(valueDefault);
+ if (namedParts.length > 0) parts.push(`{ ${namedParts.join(", ")} }`);
+ if (parts.length === 0) return `import "${moduleName}";`;
+ return `import ${parts.join(", ")} from "${moduleName}";`;
+}
+
+// ---------------------------------------------------------------------------
+// File fixer
+// ---------------------------------------------------------------------------
+
+function fixFile(filePath) {
+ let content = readFileSync(filePath, "utf-8");
+ const imports = extractImports(content);
+ if (imports.length === 0) return null;
+
+ // Group by module
+ const byModule = new Map();
+ for (const imp of imports) {
+ if (!byModule.has(imp.module)) byModule.set(imp.module, []);
+ byModule.get(imp.module).push(imp);
+ }
+
+ if (![...byModule.values()].some((v) => v.length > 1)) return null;
+
+ // Build merged text for each module
+ const mergedMap = new Map();
+ for (const [mod, imps] of byModule) {
+ mergedMap.set(mod, imps.length === 1 ? imps[0].raw : buildMergedImport(mod, imps));
+ }
+
+ // Build replacement list (process in reverse order to preserve character positions)
+ imports.sort((a, b) => a.start - b.start);
+ const placedModules = new Set();
+ const replacements = [];
+
+ for (const imp of imports) {
+ if (!placedModules.has(imp.module)) {
+ replacements.push({ start: imp.start, end: imp.end, replacement: mergedMap.get(imp.module) });
+ placedModules.add(imp.module);
+ } else {
+ // Remove duplicate, including its trailing newline
+ const end = content[imp.end] === "\n" ? imp.end + 1 : imp.end;
+ replacements.push({ start: imp.start, end, replacement: "" });
+ }
+ }
+
+ replacements.sort((a, b) => b.start - a.start);
+ for (const { start, end, replacement } of replacements) {
+ content = content.slice(0, start) + replacement + content.slice(end);
+ }
+
+ return content;
+}
+
+// ---------------------------------------------------------------------------
+// Main
+// ---------------------------------------------------------------------------
+
+const files = findFiles(srcDir);
+let fixedCount = 0;
+
+for (const filePath of files) {
+ try {
+ const original = readFileSync(filePath, "utf-8");
+ const fixed = fixFile(filePath);
+ if (fixed && fixed !== original) {
+ writeFileSync(filePath, fixed, "utf-8");
+ const rel = filePath.replace(projectRoot + "/", "");
+ console.log(`Fixed: ${rel}`);
+ fixedCount++;
+ }
+ } catch (err) {
+ const rel = filePath.replace(projectRoot + "/", "");
+ console.error(`Error: ${rel} — ${err.message}`);
+ }
+}
+
+console.log(`\nDone. Fixed ${fixedCount} file${fixedCount !== 1 ? "s" : ""}.`);
diff --git a/src/components/admin/sla-metrics.tsx b/src/components/admin/sla-metrics.tsx
index df3119c..b2a5b47 100644
--- a/src/components/admin/sla-metrics.tsx
+++ b/src/components/admin/sla-metrics.tsx
@@ -1,5 +1,4 @@
-import type { FC } from "react";
-import { useMemo } from "react";
+import { type FC, useMemo } from "react";
import { faCircleCheck, faCircleExclamation, faTriangleExclamation } from "@fortawesome/pro-duotone-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import type { Lead } from "@/types/entities";
@@ -42,7 +41,11 @@ export const SlaMetrics = ({ leads }: SlaMetricsProps) => {
return { avgHours, withinSla, total, slaPercent };
}, [leads]);
- const getTargetStatus = (): { icon: FC<{ className?: string }>; label: string; colorClass: string } => {
+ const getTargetStatus = (): {
+ icon: FC<{ className?: string }>;
+ label: string;
+ colorClass: string;
+ } => {
const diff = metrics.avgHours - SLA_TARGET_HOURS;
if (diff <= 0) {
@@ -100,7 +103,8 @@ export const SlaMetrics = ({ leads }: SlaMetricsProps) => {
/>
- {metrics.withinSla} of {metrics.total} leads within SLA ({Math.round(metrics.slaPercent)}%)
+ {metrics.withinSla} of {metrics.total} leads within SLA ({Math.round(metrics.slaPercent)}
+ %)
diff --git a/src/components/application/app-navigation/base-components/nav-account-card.tsx b/src/components/application/app-navigation/base-components/nav-account-card.tsx
index 3bdfa92..ab66034 100644
--- a/src/components/application/app-navigation/base-components/nav-account-card.tsx
+++ b/src/components/application/app-navigation/base-components/nav-account-card.tsx
@@ -1,11 +1,15 @@
-import type { FC, HTMLAttributes } from "react";
-import { useCallback, useEffect, useRef } from "react";
+import { type FC, type HTMLAttributes, useCallback, useEffect, useRef } from "react";
import { faArrowRightFromBracket, faGear, faPhoneVolume, faSort, faUser } from "@fortawesome/pro-duotone-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import type { Placement } from "@react-types/overlays";
import { useFocusManager } from "react-aria";
-import type { DialogProps as AriaDialogProps } from "react-aria-components";
-import { Button as AriaButton, Dialog as AriaDialog, DialogTrigger as AriaDialogTrigger, Popover as AriaPopover } from "react-aria-components";
+import {
+ Button as AriaButton,
+ Dialog as AriaDialog,
+ type DialogProps as AriaDialogProps,
+ DialogTrigger as AriaDialogTrigger,
+ Popover as AriaPopover,
+} from "react-aria-components";
import { AvatarLabelGroup } from "@/components/base/avatar/avatar-label-group";
import { useBreakpoint } from "@/hooks/use-breakpoint";
import { cx } from "@/utils/cx";
diff --git a/src/components/application/app-navigation/sidebar-navigation/sidebar-dual-tier.tsx b/src/components/application/app-navigation/sidebar-navigation/sidebar-dual-tier.tsx
index 5910093..be9873a 100644
--- a/src/components/application/app-navigation/sidebar-navigation/sidebar-dual-tier.tsx
+++ b/src/components/application/app-navigation/sidebar-navigation/sidebar-dual-tier.tsx
@@ -1,5 +1,4 @@
-import type { FC, ReactNode } from "react";
-import { useState } from "react";
+import { type FC, type ReactNode, useState } from "react";
import { faMagnifyingGlass } from "@fortawesome/pro-duotone-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { AnimatePresence, motion } from "motion/react";
diff --git a/src/components/application/app-navigation/sidebar-navigation/sidebar-slim.tsx b/src/components/application/app-navigation/sidebar-navigation/sidebar-slim.tsx
index f55bc61..28dccc8 100644
--- a/src/components/application/app-navigation/sidebar-navigation/sidebar-slim.tsx
+++ b/src/components/application/app-navigation/sidebar-navigation/sidebar-slim.tsx
@@ -1,5 +1,4 @@
-import type { FC } from "react";
-import { useState } from "react";
+import { type FC, useState } from "react";
import { faArrowRightFromBracket, faGear, faLifeRing } from "@fortawesome/pro-duotone-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { AnimatePresence, motion } from "motion/react";
diff --git a/src/components/application/date-picker/calendar.tsx b/src/components/application/date-picker/calendar.tsx
index 34207d0..9daa4c8 100644
--- a/src/components/application/date-picker/calendar.tsx
+++ b/src/components/application/date-picker/calendar.tsx
@@ -1,9 +1,7 @@
-import type { FC, HTMLAttributes, PropsWithChildren } from "react";
-import { Fragment, useContext, useState } from "react";
+import { type FC, Fragment, type HTMLAttributes, type PropsWithChildren, useContext, useState } from "react";
import { faChevronLeft, faChevronRight } from "@fortawesome/pro-duotone-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { type CalendarDate, getLocalTimeZone, today } from "@internationalized/date";
-import type { CalendarProps as AriaCalendarProps, DateValue } from "react-aria-components";
import {
Calendar as AriaCalendar,
CalendarContext as AriaCalendarContext,
@@ -11,8 +9,10 @@ import {
CalendarGridBody as AriaCalendarGridBody,
CalendarGridHeader as AriaCalendarGridHeader,
CalendarHeaderCell as AriaCalendarHeaderCell,
+ type CalendarProps as AriaCalendarProps,
CalendarStateContext as AriaCalendarStateContext,
Heading as AriaHeading,
+ type DateValue,
useSlottedContext,
} from "react-aria-components";
import { Button } from "@/components/base/buttons/button";
diff --git a/src/components/application/date-picker/cell.tsx b/src/components/application/date-picker/cell.tsx
index bac6d03..c429562 100644
--- a/src/components/application/date-picker/cell.tsx
+++ b/src/components/application/date-picker/cell.tsx
@@ -1,6 +1,11 @@
import { getDayOfWeek, getLocalTimeZone, isToday } from "@internationalized/date";
-import type { CalendarCellProps as AriaCalendarCellProps } from "react-aria-components";
-import { CalendarCell as AriaCalendarCell, RangeCalendarContext, useLocale, useSlottedContext } from "react-aria-components";
+import {
+ CalendarCell as AriaCalendarCell,
+ type CalendarCellProps as AriaCalendarCellProps,
+ RangeCalendarContext,
+ useLocale,
+ useSlottedContext,
+} from "react-aria-components";
import { cx } from "@/utils/cx";
interface CalendarCellProps extends AriaCalendarCellProps {
diff --git a/src/components/application/date-picker/date-input.tsx b/src/components/application/date-picker/date-input.tsx
index 131c585..529fa3b 100644
--- a/src/components/application/date-picker/date-input.tsx
+++ b/src/components/application/date-picker/date-input.tsx
@@ -1,5 +1,4 @@
-import type { DateInputProps as AriaDateInputProps } from "react-aria-components";
-import { DateInput as AriaDateInput, DateSegment as AriaDateSegment } from "react-aria-components";
+import { DateInput as AriaDateInput, type DateInputProps as AriaDateInputProps, DateSegment as AriaDateSegment } from "react-aria-components";
import { cx } from "@/utils/cx";
type DateInputProps = Omit;
diff --git a/src/components/application/date-picker/date-picker.tsx b/src/components/application/date-picker/date-picker.tsx
index fe57212..3ebceb9 100644
--- a/src/components/application/date-picker/date-picker.tsx
+++ b/src/components/application/date-picker/date-picker.tsx
@@ -4,8 +4,14 @@ import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { getLocalTimeZone, today } from "@internationalized/date";
import { useControlledState } from "@react-stately/utils";
import { useDateFormatter } from "react-aria";
-import type { DatePickerProps as AriaDatePickerProps, DateValue } from "react-aria-components";
-import { DatePicker as AriaDatePicker, Dialog as AriaDialog, Group as AriaGroup, Popover as AriaPopover } from "react-aria-components";
+import {
+ DatePicker as AriaDatePicker,
+ type DatePickerProps as AriaDatePickerProps,
+ Dialog as AriaDialog,
+ Group as AriaGroup,
+ Popover as AriaPopover,
+ type DateValue,
+} from "react-aria-components";
import { Button } from "@/components/base/buttons/button";
import { cx } from "@/utils/cx";
import { Calendar } from "./calendar";
diff --git a/src/components/application/date-picker/date-range-picker.tsx b/src/components/application/date-picker/date-range-picker.tsx
index 2b258d9..8f26ade 100644
--- a/src/components/application/date-picker/date-range-picker.tsx
+++ b/src/components/application/date-picker/date-range-picker.tsx
@@ -1,12 +1,18 @@
-import type { FC } from "react";
-import { useMemo, useState } from "react";
+import { type FC, useMemo, useState } from "react";
import { faCalendar } from "@fortawesome/pro-duotone-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { endOfMonth, endOfWeek, getLocalTimeZone, startOfMonth, startOfWeek, today } from "@internationalized/date";
import { useControlledState } from "@react-stately/utils";
import { useDateFormatter } from "react-aria";
-import type { DateRangePickerProps as AriaDateRangePickerProps, DateValue } from "react-aria-components";
-import { DateRangePicker as AriaDateRangePicker, Dialog as AriaDialog, Group as AriaGroup, Popover as AriaPopover, useLocale } from "react-aria-components";
+import {
+ DateRangePicker as AriaDateRangePicker,
+ type DateRangePickerProps as AriaDateRangePickerProps,
+ Dialog as AriaDialog,
+ Group as AriaGroup,
+ Popover as AriaPopover,
+ type DateValue,
+ useLocale,
+} from "react-aria-components";
import { Button } from "@/components/base/buttons/button";
import { cx } from "@/utils/cx";
import { DateInput } from "./date-input";
diff --git a/src/components/application/date-picker/range-calendar.tsx b/src/components/application/date-picker/range-calendar.tsx
index d166eb1..6a68f52 100644
--- a/src/components/application/date-picker/range-calendar.tsx
+++ b/src/components/application/date-picker/range-calendar.tsx
@@ -1,16 +1,16 @@
-import type { FC, HTMLAttributes, PropsWithChildren } from "react";
-import { Fragment, useContext, useState } from "react";
+import { type FC, Fragment, type HTMLAttributes, type PropsWithChildren, useContext, useState } from "react";
import { faChevronLeft, faChevronRight } from "@fortawesome/pro-duotone-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import type { CalendarDate } from "@internationalized/date";
import { useDateFormatter } from "react-aria";
-import type { RangeCalendarProps as AriaRangeCalendarProps, DateValue } from "react-aria-components";
import {
CalendarGrid as AriaCalendarGrid,
CalendarGridBody as AriaCalendarGridBody,
CalendarGridHeader as AriaCalendarGridHeader,
CalendarHeaderCell as AriaCalendarHeaderCell,
RangeCalendar as AriaRangeCalendar,
+ type RangeCalendarProps as AriaRangeCalendarProps,
+ type DateValue,
RangeCalendarContext,
RangeCalendarStateContext,
useSlottedContext,
diff --git a/src/components/application/empty-state/empty-state.tsx b/src/components/application/empty-state/empty-state.tsx
index bad8242..477ba86 100644
--- a/src/components/application/empty-state/empty-state.tsx
+++ b/src/components/application/empty-state/empty-state.tsx
@@ -1,11 +1,9 @@
-import type { ComponentProps, ComponentPropsWithRef, FC } from "react";
-import { Children, createContext, isValidElement, useContext } from "react";
+import { Children, type ComponentProps, type ComponentPropsWithRef, type FC, createContext, isValidElement, useContext } from "react";
import { faMagnifyingGlass } from "@fortawesome/pro-duotone-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { FileIcon } from "@untitledui/file-icons";
import { FeaturedIcon as FeaturedIconbase } from "@/components/foundations/featured-icon/featured-icon";
-import type { BackgroundPatternProps } from "@/components/shared-assets/background-patterns";
-import { BackgroundPattern } from "@/components/shared-assets/background-patterns";
+import { BackgroundPattern, type BackgroundPatternProps } from "@/components/shared-assets/background-patterns";
import { Illustration as Illustrations } from "@/components/shared-assets/illustrations";
import { cx } from "@/utils/cx";
diff --git a/src/components/application/file-upload/file-upload-base.tsx b/src/components/application/file-upload/file-upload-base.tsx
index d56d8bf..3360d11 100644
--- a/src/components/application/file-upload/file-upload-base.tsx
+++ b/src/components/application/file-upload/file-upload-base.tsx
@@ -1,9 +1,7 @@
-import type { ComponentProps, ComponentPropsWithRef, FC } from "react";
-import { useId, useRef, useState } from "react";
+import { type ComponentProps, type ComponentPropsWithRef, type FC, useId, useRef, useState } from "react";
import { faCircleCheck, faCircleXmark, faCloudArrowUp, faTrash } from "@fortawesome/pro-duotone-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
-import type { FileIcon } from "@untitledui/file-icons";
-import { FileIcon as FileTypeIcon } from "@untitledui/file-icons";
+import { type FileIcon, FileIcon as FileTypeIcon } from "@untitledui/file-icons";
import { AnimatePresence, motion } from "motion/react";
import { Button } from "@/components/base/buttons/button";
import { ButtonUtility } from "@/components/base/buttons/button-utility";
diff --git a/src/components/application/modals/modal.tsx b/src/components/application/modals/modal.tsx
index bfd3896..ac7aa72 100644
--- a/src/components/application/modals/modal.tsx
+++ b/src/components/application/modals/modal.tsx
@@ -1,5 +1,11 @@
-import type { DialogProps as AriaDialogProps, ModalOverlayProps as AriaModalOverlayProps } from "react-aria-components";
-import { Dialog as AriaDialog, DialogTrigger as AriaDialogTrigger, Modal as AriaModal, ModalOverlay as AriaModalOverlay } from "react-aria-components";
+import {
+ Dialog as AriaDialog,
+ type DialogProps as AriaDialogProps,
+ DialogTrigger as AriaDialogTrigger,
+ Modal as AriaModal,
+ ModalOverlay as AriaModalOverlay,
+ type ModalOverlayProps as AriaModalOverlayProps,
+} from "react-aria-components";
import { cx } from "@/utils/cx";
export const DialogTrigger = AriaDialogTrigger;
diff --git a/src/components/application/notifications/toaster.tsx b/src/components/application/notifications/toaster.tsx
index 76051f4..d8a62ef 100644
--- a/src/components/application/notifications/toaster.tsx
+++ b/src/components/application/notifications/toaster.tsx
@@ -1,5 +1,4 @@
-import type { ToasterProps } from "sonner";
-import { Toaster as SonnerToaster, useSonner } from "sonner";
+import { Toaster as SonnerToaster, type ToasterProps, useSonner } from "sonner";
import { cx } from "@/utils/cx";
export const DEFAULT_TOAST_POSITION = "bottom-right";
diff --git a/src/components/application/pagination/pagination-base.tsx b/src/components/application/pagination/pagination-base.tsx
index 3c4cc02..bc8df42 100644
--- a/src/components/application/pagination/pagination-base.tsx
+++ b/src/components/application/pagination/pagination-base.tsx
@@ -1,5 +1,15 @@
-import type { CSSProperties, FC, HTMLAttributes, ReactNode } from "react";
-import React, { cloneElement, createContext, isValidElement, useCallback, useContext, useMemo } from "react";
+import React, {
+ type CSSProperties,
+ type FC,
+ type HTMLAttributes,
+ type ReactNode,
+ cloneElement,
+ createContext,
+ isValidElement,
+ useCallback,
+ useContext,
+ useMemo,
+} from "react";
type PaginationPage = {
/** The type of the pagination item. */
diff --git a/src/components/application/pagination/pagination-dot.tsx b/src/components/application/pagination/pagination-dot.tsx
index 544721e..e1e5b6d 100644
--- a/src/components/application/pagination/pagination-dot.tsx
+++ b/src/components/application/pagination/pagination-dot.tsx
@@ -1,6 +1,5 @@
import { cx } from "@/utils/cx";
-import type { PaginationRootProps } from "./pagination-base";
-import { Pagination } from "./pagination-base";
+import { Pagination, type PaginationRootProps } from "./pagination-base";
interface PaginationDotProps extends Omit {
/** The size of the pagination dot. */
diff --git a/src/components/application/pagination/pagination-line.tsx b/src/components/application/pagination/pagination-line.tsx
index abaae45..34774d7 100644
--- a/src/components/application/pagination/pagination-line.tsx
+++ b/src/components/application/pagination/pagination-line.tsx
@@ -1,6 +1,5 @@
import { cx } from "@/utils/cx";
-import type { PaginationRootProps } from "./pagination-base";
-import { Pagination } from "./pagination-base";
+import { Pagination, type PaginationRootProps } from "./pagination-base";
interface PaginationLineProps extends Omit {
/** The size of the pagination line. */
diff --git a/src/components/application/pagination/pagination.tsx b/src/components/application/pagination/pagination.tsx
index c50ab21..f7822f3 100644
--- a/src/components/application/pagination/pagination.tsx
+++ b/src/components/application/pagination/pagination.tsx
@@ -5,8 +5,7 @@ import { ButtonGroup, ButtonGroupItem } from "@/components/base/button-group/but
import { Button } from "@/components/base/buttons/button";
import { useBreakpoint } from "@/hooks/use-breakpoint";
import { cx } from "@/utils/cx";
-import type { PaginationRootProps } from "./pagination-base";
-import { Pagination } from "./pagination-base";
+import { Pagination, type PaginationRootProps } from "./pagination-base";
const ArrowLeft: FC<{ className?: string }> = ({ className }) => ;
const ArrowRight: FC<{ className?: string }> = ({ className }) => ;
diff --git a/src/components/application/slideout-menus/slideout-menu.tsx b/src/components/application/slideout-menus/slideout-menu.tsx
index c337257..2cd1d3d 100644
--- a/src/components/application/slideout-menus/slideout-menu.tsx
+++ b/src/components/application/slideout-menus/slideout-menu.tsx
@@ -1,10 +1,13 @@
import { type ComponentPropsWithRef, type ReactNode, type RefAttributes } from "react";
-import type {
- DialogProps as AriaDialogProps,
- ModalOverlayProps as AriaModalOverlayProps,
- ModalRenderProps as AriaModalRenderProps,
+import {
+ Dialog as AriaDialog,
+ type DialogProps as AriaDialogProps,
+ DialogTrigger as AriaDialogTrigger,
+ Modal as AriaModal,
+ ModalOverlay as AriaModalOverlay,
+ type ModalOverlayProps as AriaModalOverlayProps,
+ type ModalRenderProps as AriaModalRenderProps,
} from "react-aria-components";
-import { Dialog as AriaDialog, DialogTrigger as AriaDialogTrigger, Modal as AriaModal, ModalOverlay as AriaModalOverlay } from "react-aria-components";
import { CloseButton } from "@/components/base/buttons/close-button";
import { cx } from "@/utils/cx";
diff --git a/src/components/application/table/table.tsx b/src/components/application/table/table.tsx
index 83ddd0c..6b811f1 100644
--- a/src/components/application/table/table.tsx
+++ b/src/components/application/table/table.tsx
@@ -1,23 +1,31 @@
-import type { ComponentPropsWithRef, FC, HTMLAttributes, ReactNode, Ref, TdHTMLAttributes, ThHTMLAttributes } from "react";
-import { createContext, isValidElement, useContext } from "react";
+import {
+ type ComponentPropsWithRef,
+ type FC,
+ type HTMLAttributes,
+ type ReactNode,
+ type Ref,
+ type TdHTMLAttributes,
+ type ThHTMLAttributes,
+ createContext,
+ isValidElement,
+ useContext,
+} from "react";
import { faArrowDown, faCircleQuestion, faCopy, faPenToSquare, faSort, faTrash } from "@fortawesome/pro-duotone-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
-import type {
- CellProps as AriaCellProps,
- ColumnProps as AriaColumnProps,
- RowProps as AriaRowProps,
- TableHeaderProps as AriaTableHeaderProps,
- TableProps as AriaTableProps,
-} from "react-aria-components";
import {
Cell as AriaCell,
+ type CellProps as AriaCellProps,
Collection as AriaCollection,
Column as AriaColumn,
+ type ColumnProps as AriaColumnProps,
Group as AriaGroup,
Row as AriaRow,
+ type RowProps as AriaRowProps,
Table as AriaTable,
TableBody as AriaTableBody,
TableHeader as AriaTableHeader,
+ type TableHeaderProps as AriaTableHeaderProps,
+ type TableProps as AriaTableProps,
useTableOptions,
} from "react-aria-components";
import { Badge } from "@/components/base/badges/badges";
diff --git a/src/components/application/tabs/tabs.tsx b/src/components/application/tabs/tabs.tsx
index f7f090c..3b4b356 100644
--- a/src/components/application/tabs/tabs.tsx
+++ b/src/components/application/tabs/tabs.tsx
@@ -1,7 +1,15 @@
-import type { ComponentPropsWithRef, ReactNode } from "react";
-import { Fragment, createContext, useContext } from "react";
-import type { TabListProps as AriaTabListProps, TabProps as AriaTabProps, TabRenderProps as AriaTabRenderProps } from "react-aria-components";
-import { Tab as AriaTab, TabList as AriaTabList, TabPanel as AriaTabPanel, Tabs as AriaTabs, TabsContext, useSlottedContext } from "react-aria-components";
+import { type ComponentPropsWithRef, Fragment, type ReactNode, createContext, useContext } from "react";
+import {
+ Tab as AriaTab,
+ TabList as AriaTabList,
+ type TabListProps as AriaTabListProps,
+ TabPanel as AriaTabPanel,
+ type TabProps as AriaTabProps,
+ type TabRenderProps as AriaTabRenderProps,
+ Tabs as AriaTabs,
+ TabsContext,
+ useSlottedContext,
+} from "react-aria-components";
import type { BadgeColors } from "@/components/base/badges/badge-types";
import { Badge } from "@/components/base/badges/badges";
import { cx } from "@/utils/cx";
diff --git a/src/components/base/badges/badge-groups.tsx b/src/components/base/badges/badge-groups.tsx
index ac47645..2337c09 100644
--- a/src/components/base/badges/badge-groups.tsx
+++ b/src/components/base/badges/badge-groups.tsx
@@ -1,5 +1,4 @@
-import type { FC, ReactNode } from "react";
-import { isValidElement } from "react";
+import { type FC, type ReactNode, isValidElement } from "react";
import { faArrowRight } from "@fortawesome/pro-duotone-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { cx, sortCx } from "@/utils/cx";
diff --git a/src/components/base/badges/badges.tsx b/src/components/base/badges/badges.tsx
index aa2137c..b8ff30d 100644
--- a/src/components/base/badges/badges.tsx
+++ b/src/components/base/badges/badges.tsx
@@ -3,8 +3,7 @@ import { faXmark } from "@fortawesome/pro-duotone-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { Dot } from "@/components/foundations/dot-icon";
import { cx } from "@/utils/cx";
-import type { BadgeColors, BadgeTypeToColorMap, BadgeTypes, FlagTypes, IconComponentType, Sizes } from "./badge-types";
-import { badgeTypes } from "./badge-types";
+import { type BadgeColors, type BadgeTypeToColorMap, type BadgeTypes, type FlagTypes, type IconComponentType, type Sizes, badgeTypes } from "./badge-types";
const CloseX: FC<{ className?: string }> = ({ className }) => ;
diff --git a/src/components/base/buttons/button-utility.tsx b/src/components/base/buttons/button-utility.tsx
index 7d9371b..fd3e12e 100644
--- a/src/components/base/buttons/button-utility.tsx
+++ b/src/components/base/buttons/button-utility.tsx
@@ -1,8 +1,6 @@
-import type { AnchorHTMLAttributes, ButtonHTMLAttributes, DetailedHTMLProps, FC, ReactNode } from "react";
-import { isValidElement } from "react";
+import { type AnchorHTMLAttributes, type ButtonHTMLAttributes, type DetailedHTMLProps, type FC, type ReactNode, isValidElement } from "react";
import type { Placement } from "react-aria";
-import type { ButtonProps as AriaButtonProps, LinkProps as AriaLinkProps } from "react-aria-components";
-import { Button as AriaButton, Link as AriaLink } from "react-aria-components";
+import { Button as AriaButton, type ButtonProps as AriaButtonProps, Link as AriaLink, type LinkProps as AriaLinkProps } from "react-aria-components";
import { Tooltip } from "@/components/base/tooltip/tooltip";
import { cx } from "@/utils/cx";
import { isReactComponent } from "@/utils/is-react-component";
diff --git a/src/components/base/buttons/button.tsx b/src/components/base/buttons/button.tsx
index fb4cf36..0d76861 100644
--- a/src/components/base/buttons/button.tsx
+++ b/src/components/base/buttons/button.tsx
@@ -1,7 +1,5 @@
-import type { AnchorHTMLAttributes, ButtonHTMLAttributes, DetailedHTMLProps, FC, ReactNode } from "react";
-import React, { isValidElement } from "react";
-import type { ButtonProps as AriaButtonProps, LinkProps as AriaLinkProps } from "react-aria-components";
-import { Button as AriaButton, Link as AriaLink } from "react-aria-components";
+import React, { type AnchorHTMLAttributes, type ButtonHTMLAttributes, type DetailedHTMLProps, type FC, type ReactNode, isValidElement } from "react";
+import { Button as AriaButton, type ButtonProps as AriaButtonProps, Link as AriaLink, type LinkProps as AriaLinkProps } from "react-aria-components";
import { cx, sortCx } from "@/utils/cx";
import { isReactComponent } from "@/utils/is-react-component";
diff --git a/src/components/base/buttons/social-button.tsx b/src/components/base/buttons/social-button.tsx
index f6963bc..ee16757 100644
--- a/src/components/base/buttons/social-button.tsx
+++ b/src/components/base/buttons/social-button.tsx
@@ -1,6 +1,5 @@
import type { AnchorHTMLAttributes, ButtonHTMLAttributes, DetailedHTMLProps } from "react";
-import type { ButtonProps as AriaButtonProps, LinkProps as AriaLinkProps } from "react-aria-components";
-import { Button as AriaButton, Link as AriaLink } from "react-aria-components";
+import { Button as AriaButton, type ButtonProps as AriaButtonProps, Link as AriaLink, type LinkProps as AriaLinkProps } from "react-aria-components";
import { cx, sortCx } from "@/utils/cx";
import { AppleLogo, DribbleLogo, FacebookLogo, FigmaLogo, FigmaLogoOutlined, GoogleLogo, TwitterLogo } from "./social-logos";
diff --git a/src/components/base/dropdown/dropdown.tsx b/src/components/base/dropdown/dropdown.tsx
index c311fa1..66e6d19 100644
--- a/src/components/base/dropdown/dropdown.tsx
+++ b/src/components/base/dropdown/dropdown.tsx
@@ -1,22 +1,20 @@
import type { FC, RefAttributes } from "react";
import { faEllipsisVertical } from "@fortawesome/pro-duotone-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
-import type {
- ButtonProps as AriaButtonProps,
- MenuItemProps as AriaMenuItemProps,
- MenuProps as AriaMenuProps,
- PopoverProps as AriaPopoverProps,
- SeparatorProps as AriaSeparatorProps,
-} from "react-aria-components";
import {
Button as AriaButton,
+ type ButtonProps as AriaButtonProps,
Header as AriaHeader,
Menu as AriaMenu,
MenuItem as AriaMenuItem,
+ type MenuItemProps as AriaMenuItemProps,
+ type MenuProps as AriaMenuProps,
MenuSection as AriaMenuSection,
MenuTrigger as AriaMenuTrigger,
Popover as AriaPopover,
+ type PopoverProps as AriaPopoverProps,
Separator as AriaSeparator,
+ type SeparatorProps as AriaSeparatorProps,
} from "react-aria-components";
import { cx } from "@/utils/cx";
diff --git a/src/components/base/file-upload-trigger/file-upload-trigger.tsx b/src/components/base/file-upload-trigger/file-upload-trigger.tsx
index e4bcdea..34cb539 100644
--- a/src/components/base/file-upload-trigger/file-upload-trigger.tsx
+++ b/src/components/base/file-upload-trigger/file-upload-trigger.tsx
@@ -1,5 +1,4 @@
-import type { DetailedReactHTMLElement, HTMLAttributes, ReactNode } from "react";
-import React, { cloneElement, useRef } from "react";
+import React, { type DetailedReactHTMLElement, type HTMLAttributes, type ReactNode, cloneElement, useRef } from "react";
import { filterDOMProps } from "@react-aria/utils";
interface FileTriggerProps {
diff --git a/src/components/base/input/hint-text.tsx b/src/components/base/input/hint-text.tsx
index b2d1e3e..758cd8e 100644
--- a/src/components/base/input/hint-text.tsx
+++ b/src/components/base/input/hint-text.tsx
@@ -1,6 +1,5 @@
import type { ReactNode, Ref } from "react";
-import type { TextProps as AriaTextProps } from "react-aria-components";
-import { Text as AriaText } from "react-aria-components";
+import { Text as AriaText, type TextProps as AriaTextProps } from "react-aria-components";
import { cx } from "@/utils/cx";
interface HintTextProps extends AriaTextProps {
diff --git a/src/components/base/input/input-group.tsx b/src/components/base/input/input-group.tsx
index 09d34df..a52bfa8 100644
--- a/src/components/base/input/input-group.tsx
+++ b/src/components/base/input/input-group.tsx
@@ -1,7 +1,6 @@
import { type HTMLAttributes, type ReactNode } from "react";
import { HintText } from "@/components/base/input/hint-text";
-import type { InputBaseProps } from "@/components/base/input/input";
-import { TextField } from "@/components/base/input/input";
+import { type InputBaseProps, TextField } from "@/components/base/input/input";
import { Label } from "@/components/base/input/label";
import { cx, sortCx } from "@/utils/cx";
diff --git a/src/components/base/input/input-payment.tsx b/src/components/base/input/input-payment.tsx
index f25457b..9a64058 100644
--- a/src/components/base/input/input-payment.tsx
+++ b/src/components/base/input/input-payment.tsx
@@ -1,7 +1,6 @@
import { useControlledState } from "@react-stately/utils";
import { HintText } from "@/components/base/input/hint-text";
-import type { InputBaseProps } from "@/components/base/input/input";
-import { InputBase, TextField } from "@/components/base/input/input";
+import { InputBase, type InputBaseProps, TextField } from "@/components/base/input/input";
import { Label } from "@/components/base/input/label";
import { AmexIcon, DiscoverIcon, MastercardIcon, UnionPayIcon, VisaIcon } from "@/components/foundations/payment-icons";
diff --git a/src/components/base/input/input.tsx b/src/components/base/input/input.tsx
index afd4335..2bd3bb8 100644
--- a/src/components/base/input/input.tsx
+++ b/src/components/base/input/input.tsx
@@ -1,8 +1,13 @@
import { type ComponentType, type HTMLAttributes, type ReactNode, type Ref, createContext, useContext } from "react";
import { faCircleExclamation, faCircleQuestion } from "@fortawesome/pro-duotone-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
-import type { InputProps as AriaInputProps, TextFieldProps as AriaTextFieldProps } from "react-aria-components";
-import { Group as AriaGroup, Input as AriaInput, TextField as AriaTextField } from "react-aria-components";
+import {
+ Group as AriaGroup,
+ Input as AriaInput,
+ type InputProps as AriaInputProps,
+ TextField as AriaTextField,
+ type TextFieldProps as AriaTextFieldProps,
+} from "react-aria-components";
import { HintText } from "@/components/base/input/hint-text";
import { Label } from "@/components/base/input/label";
import { Tooltip, TooltipTrigger } from "@/components/base/tooltip/tooltip";
diff --git a/src/components/base/input/label.tsx b/src/components/base/input/label.tsx
index 11c8a17..d0a9106 100644
--- a/src/components/base/input/label.tsx
+++ b/src/components/base/input/label.tsx
@@ -1,8 +1,7 @@
import type { ReactNode, Ref } from "react";
import { faCircleQuestion } from "@fortawesome/pro-duotone-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
-import type { LabelProps as AriaLabelProps } from "react-aria-components";
-import { Label as AriaLabel } from "react-aria-components";
+import { Label as AriaLabel, type LabelProps as AriaLabelProps } from "react-aria-components";
import { Tooltip, TooltipTrigger } from "@/components/base/tooltip/tooltip";
import { cx } from "@/utils/cx";
diff --git a/src/components/base/pin-input/pin-input.tsx b/src/components/base/pin-input/pin-input.tsx
index 0f01d45..ff076cf 100644
--- a/src/components/base/pin-input/pin-input.tsx
+++ b/src/components/base/pin-input/pin-input.tsx
@@ -1,5 +1,4 @@
-import type { ComponentPropsWithRef } from "react";
-import { createContext, useContext, useId } from "react";
+import { type ComponentPropsWithRef, createContext, useContext, useId } from "react";
import { OTPInput, OTPInputContext } from "input-otp";
import { cx } from "@/utils/cx";
diff --git a/src/components/base/select/combobox.tsx b/src/components/base/select/combobox.tsx
index cfb657c..9cd18b8 100644
--- a/src/components/base/select/combobox.tsx
+++ b/src/components/base/select/combobox.tsx
@@ -1,9 +1,16 @@
-import type { FocusEventHandler, PointerEventHandler, RefAttributes, RefObject } from "react";
-import { useCallback, useContext, useRef, useState } from "react";
+import { type FocusEventHandler, type PointerEventHandler, type RefAttributes, type RefObject, useCallback, useContext, useRef, useState } from "react";
import { faMagnifyingGlass } from "@fortawesome/pro-duotone-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
-import type { ComboBoxProps as AriaComboBoxProps, GroupProps as AriaGroupProps, ListBoxProps as AriaListBoxProps } from "react-aria-components";
-import { ComboBox as AriaComboBox, Group as AriaGroup, Input as AriaInput, ListBox as AriaListBox, ComboBoxStateContext } from "react-aria-components";
+import {
+ ComboBox as AriaComboBox,
+ type ComboBoxProps as AriaComboBoxProps,
+ Group as AriaGroup,
+ type GroupProps as AriaGroupProps,
+ Input as AriaInput,
+ ListBox as AriaListBox,
+ type ListBoxProps as AriaListBoxProps,
+ ComboBoxStateContext,
+} from "react-aria-components";
import { HintText } from "@/components/base/input/hint-text";
import { Label } from "@/components/base/input/label";
import { Popover } from "@/components/base/select/popover";
diff --git a/src/components/base/select/multi-select.tsx b/src/components/base/select/multi-select.tsx
index 44d2075..3d97745 100644
--- a/src/components/base/select/multi-select.tsx
+++ b/src/components/base/select/multi-select.tsx
@@ -1,12 +1,31 @@
-import type { FC, FocusEventHandler, KeyboardEvent, PointerEventHandler, RefAttributes, RefObject } from "react";
-import { createContext, useCallback, useContext, useRef, useState } from "react";
+import {
+ type FC,
+ type FocusEventHandler,
+ type KeyboardEvent,
+ type PointerEventHandler,
+ type RefAttributes,
+ type RefObject,
+ createContext,
+ useCallback,
+ useContext,
+ useRef,
+ useState,
+} from "react";
import { faMagnifyingGlass } from "@fortawesome/pro-duotone-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { FocusScope, useFilter, useFocusManager } from "react-aria";
-import type { ComboBoxProps as AriaComboBoxProps, GroupProps as AriaGroupProps, ListBoxProps as AriaListBoxProps, Key } from "react-aria-components";
-import { ComboBox as AriaComboBox, Group as AriaGroup, Input as AriaInput, ListBox as AriaListBox, ComboBoxStateContext } from "react-aria-components";
-import type { ListData } from "react-stately";
-import { useListData } from "react-stately";
+import {
+ ComboBox as AriaComboBox,
+ type ComboBoxProps as AriaComboBoxProps,
+ Group as AriaGroup,
+ type GroupProps as AriaGroupProps,
+ Input as AriaInput,
+ ListBox as AriaListBox,
+ type ListBoxProps as AriaListBoxProps,
+ ComboBoxStateContext,
+ type Key,
+} from "react-aria-components";
+import { type ListData, useListData } from "react-stately";
import { Avatar } from "@/components/base/avatar/avatar";
import type { IconComponentType } from "@/components/base/badges/badge-types";
import { HintText } from "@/components/base/input/hint-text";
diff --git a/src/components/base/select/popover.tsx b/src/components/base/select/popover.tsx
index b9e4fd6..4b558b2 100644
--- a/src/components/base/select/popover.tsx
+++ b/src/components/base/select/popover.tsx
@@ -1,6 +1,5 @@
import type { RefAttributes } from "react";
-import type { PopoverProps as AriaPopoverProps } from "react-aria-components";
-import { Popover as AriaPopover } from "react-aria-components";
+import { Popover as AriaPopover, type PopoverProps as AriaPopoverProps } from "react-aria-components";
import { cx } from "@/utils/cx";
interface PopoverProps extends AriaPopoverProps, RefAttributes {
diff --git a/src/components/base/select/select-item.tsx b/src/components/base/select/select-item.tsx
index 9a19390..5108623 100644
--- a/src/components/base/select/select-item.tsx
+++ b/src/components/base/select/select-item.tsx
@@ -1,13 +1,11 @@
import { isValidElement, useContext } from "react";
import { faCheck } from "@fortawesome/pro-duotone-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
-import type { ListBoxItemProps as AriaListBoxItemProps } from "react-aria-components";
-import { ListBoxItem as AriaListBoxItem, Text as AriaText } from "react-aria-components";
+import { ListBoxItem as AriaListBoxItem, type ListBoxItemProps as AriaListBoxItemProps, Text as AriaText } from "react-aria-components";
import { Avatar } from "@/components/base/avatar/avatar";
import { cx } from "@/utils/cx";
import { isReactComponent } from "@/utils/is-react-component";
-import type { SelectItemType } from "./select";
-import { SelectContext } from "./select";
+import { SelectContext, type SelectItemType } from "./select";
const sizes = {
sm: "p-2 pr-2.5",
diff --git a/src/components/base/select/select.tsx b/src/components/base/select/select.tsx
index 79d254b..122282f 100644
--- a/src/components/base/select/select.tsx
+++ b/src/components/base/select/select.tsx
@@ -1,9 +1,13 @@
-import type { FC, ReactNode, Ref, RefAttributes } from "react";
-import { createContext, isValidElement } from "react";
+import { type FC, type ReactNode, type Ref, type RefAttributes, createContext, isValidElement } from "react";
import { faChevronDown } from "@fortawesome/pro-duotone-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
-import type { SelectProps as AriaSelectProps } from "react-aria-components";
-import { Button as AriaButton, ListBox as AriaListBox, Select as AriaSelect, SelectValue as AriaSelectValue } from "react-aria-components";
+import {
+ Button as AriaButton,
+ ListBox as AriaListBox,
+ Select as AriaSelect,
+ type SelectProps as AriaSelectProps,
+ SelectValue as AriaSelectValue,
+} from "react-aria-components";
import { Avatar } from "@/components/base/avatar/avatar";
import { HintText } from "@/components/base/input/hint-text";
import { Label } from "@/components/base/input/label";
diff --git a/src/components/base/slider/slider.tsx b/src/components/base/slider/slider.tsx
index 6136f27..d71f9be 100644
--- a/src/components/base/slider/slider.tsx
+++ b/src/components/base/slider/slider.tsx
@@ -1,8 +1,8 @@
-import type { SliderProps as AriaSliderProps } from "react-aria-components";
import {
Label as AriaLabel,
Slider as AriaSlider,
SliderOutput as AriaSliderOutput,
+ type SliderProps as AriaSliderProps,
SliderThumb as AriaSliderThumb,
SliderTrack as AriaSliderTrack,
} from "react-aria-components";
diff --git a/src/components/base/textarea/textarea.tsx b/src/components/base/textarea/textarea.tsx
index 8fe7dc9..109a749 100644
--- a/src/components/base/textarea/textarea.tsx
+++ b/src/components/base/textarea/textarea.tsx
@@ -1,7 +1,10 @@
-import type { ReactNode, Ref } from "react";
-import React from "react";
-import type { TextAreaProps as AriaTextAreaProps, TextFieldProps as AriaTextFieldProps } from "react-aria-components";
-import { TextArea as AriaTextArea, TextField as AriaTextField } from "react-aria-components";
+import React, { type ReactNode, type Ref } from "react";
+import {
+ TextArea as AriaTextArea,
+ type TextAreaProps as AriaTextAreaProps,
+ TextField as AriaTextField,
+ type TextFieldProps as AriaTextFieldProps,
+} from "react-aria-components";
import { HintText } from "@/components/base/input/hint-text";
import { Label } from "@/components/base/input/label";
import { cx } from "@/utils/cx";
diff --git a/src/components/base/toggle/toggle.tsx b/src/components/base/toggle/toggle.tsx
index 0a938a1..70f6a6d 100644
--- a/src/components/base/toggle/toggle.tsx
+++ b/src/components/base/toggle/toggle.tsx
@@ -1,6 +1,5 @@
import type { ReactNode } from "react";
-import type { SwitchProps as AriaSwitchProps } from "react-aria-components";
-import { Switch as AriaSwitch } from "react-aria-components";
+import { Switch as AriaSwitch, type SwitchProps as AriaSwitchProps } from "react-aria-components";
import { cx } from "@/utils/cx";
interface ToggleBaseProps {
diff --git a/src/components/base/tooltip/tooltip.tsx b/src/components/base/tooltip/tooltip.tsx
index c85aae6..0da1bfc 100644
--- a/src/components/base/tooltip/tooltip.tsx
+++ b/src/components/base/tooltip/tooltip.tsx
@@ -1,10 +1,13 @@
import type { ReactNode } from "react";
-import type {
- ButtonProps as AriaButtonProps,
- TooltipProps as AriaTooltipProps,
- TooltipTriggerComponentProps as AriaTooltipTriggerComponentProps,
+import {
+ Button as AriaButton,
+ type ButtonProps as AriaButtonProps,
+ OverlayArrow as AriaOverlayArrow,
+ Tooltip as AriaTooltip,
+ type TooltipProps as AriaTooltipProps,
+ TooltipTrigger as AriaTooltipTrigger,
+ type TooltipTriggerComponentProps as AriaTooltipTriggerComponentProps,
} from "react-aria-components";
-import { Button as AriaButton, OverlayArrow as AriaOverlayArrow, Tooltip as AriaTooltip, TooltipTrigger as AriaTooltipTrigger } from "react-aria-components";
import { cx } from "@/utils/cx";
interface TooltipProps extends AriaTooltipTriggerComponentProps, Omit {
diff --git a/src/components/call-desk/ai-chat-panel.tsx b/src/components/call-desk/ai-chat-panel.tsx
index dda4055..ad360d6 100644
--- a/src/components/call-desk/ai-chat-panel.tsx
+++ b/src/components/call-desk/ai-chat-panel.tsx
@@ -1,5 +1,4 @@
-import type { ReactNode } from "react";
-import { useCallback, useEffect, useRef, useState } from "react";
+import { type ReactNode, useCallback, useEffect, useRef, useState } from "react";
import { faPaperPlaneTop, faRobot, faSparkles, faUserHeadset } from "@fortawesome/pro-duotone-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { apiClient } from "@/lib/api-client";
diff --git a/src/components/call-desk/appointment-form.tsx b/src/components/call-desk/appointment-form.tsx
index be6052f..79bc7d1 100644
--- a/src/components/call-desk/appointment-form.tsx
+++ b/src/components/call-desk/appointment-form.tsx
@@ -104,9 +104,9 @@ export const AppointmentForm = ({ isOpen, onOpenChange, callerNumber, leadName,
// Fetch doctors on mount
useEffect(() => {
if (!isOpen) return;
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
+
apiClient
- .graphql<{ doctors: { edges: Array<{ node: any }> } }>(
+ .graphql<{ doctors: { edges: Array<{ node: unknown }> } }>(
`{ doctors(first: 50) { edges { node {
id name fullName { firstName lastName } department clinic { id name clinicName }
} } } }`,
@@ -131,9 +131,9 @@ export const AppointmentForm = ({ isOpen, onOpenChange, callerNumber, leadName,
}
setLoadingSlots(true);
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
+
apiClient
- .graphql<{ appointments: { edges: Array<{ node: any }> } }>(
+ .graphql<{ appointments: { edges: Array<{ node: unknown }> } }>(
`{ appointments(filter: {
doctorId: { eq: "${doctor}" },
scheduledAt: { gte: "${date}T00:00:00", lte: "${date}T23:59:59" }
diff --git a/src/components/call-desk/context-panel.tsx b/src/components/call-desk/context-panel.tsx
index c45550f..c238bd2 100644
--- a/src/components/call-desk/context-panel.tsx
+++ b/src/components/call-desk/context-panel.tsx
@@ -98,9 +98,9 @@ const Lead360Tab = ({ lead, activities }: { lead: Lead | null; activities: LeadA
}
setLoadingPatient(true);
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
+
apiClient
- .graphql<{ patients: { edges: Array<{ node: any }> } }>(
+ .graphql<{ patients: { edges: Array<{ node: unknown }> } }>(
`query GetPatient($id: UUID!) { patients(filter: { id: { eq: $id } }) { edges { node {
id fullName { firstName lastName } dateOfBirth gender patientType
phones { primaryPhoneNumber } emails { primaryEmail }
diff --git a/src/components/dashboard/kpi-cards.tsx b/src/components/dashboard/kpi-cards.tsx
index 56c8d29..2845a00 100644
--- a/src/components/dashboard/kpi-cards.tsx
+++ b/src/components/dashboard/kpi-cards.tsx
@@ -1,6 +1,5 @@
import type { IconDefinition } from "@fortawesome/fontawesome-svg-core";
-import { faPhone, faPhoneArrowDownLeft, faPhoneArrowUpRight, faPhoneMissed } from "@fortawesome/pro-duotone-svg-icons";
-import { faCircleInfo } from "@fortawesome/pro-duotone-svg-icons";
+import { faCircleInfo, faPhone, faPhoneArrowDownLeft, faPhoneArrowUpRight, faPhoneMissed } from "@fortawesome/pro-duotone-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import type { Call, Lead } from "@/types/entities";
diff --git a/src/components/foundations/featured-icon/featured-icon.tsx b/src/components/foundations/featured-icon/featured-icon.tsx
index cf22650..31cd92e 100644
--- a/src/components/foundations/featured-icon/featured-icon.tsx
+++ b/src/components/foundations/featured-icon/featured-icon.tsx
@@ -1,5 +1,4 @@
-import type { FC, ReactNode, Ref } from "react";
-import { isValidElement } from "react";
+import { type FC, type ReactNode, type Ref, isValidElement } from "react";
import { cx, sortCx } from "@/utils/cx";
import { isReactComponent } from "@/utils/is-react-component";
diff --git a/src/components/foundations/logo/untitledui-logo-minimal.tsx b/src/components/foundations/logo/untitledui-logo-minimal.tsx
index 2807e48..38ff7c6 100644
--- a/src/components/foundations/logo/untitledui-logo-minimal.tsx
+++ b/src/components/foundations/logo/untitledui-logo-minimal.tsx
@@ -1,5 +1,4 @@
-import type { SVGProps } from "react";
-import { useId } from "react";
+import { type SVGProps, useId } from "react";
import { cx } from "@/utils/cx";
export const UntitledLogoMinimal = (props: SVGProps) => {
diff --git a/src/components/foundations/rating-stars.tsx b/src/components/foundations/rating-stars.tsx
index baab09f..461c143 100644
--- a/src/components/foundations/rating-stars.tsx
+++ b/src/components/foundations/rating-stars.tsx
@@ -1,5 +1,4 @@
-import type { HTMLAttributes, SVGProps } from "react";
-import { useId } from "react";
+import { type HTMLAttributes, type SVGProps, useId } from "react";
import { cx } from "@/utils/cx";
// eslint-disable-next-line react-refresh/only-export-components
diff --git a/src/components/leads/lead-table.tsx b/src/components/leads/lead-table.tsx
index 1454827..c9db0b3 100644
--- a/src/components/leads/lead-table.tsx
+++ b/src/components/leads/lead-table.tsx
@@ -1,9 +1,7 @@
-import type { FC } from "react";
-import { useMemo, useState } from "react";
+import { type FC, useMemo, useState } from "react";
import { faEllipsisVertical } from "@fortawesome/pro-duotone-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
-import { TableBody as AriaTableBody } from "react-aria-components";
-import type { Selection, SortDescriptor } from "react-aria-components";
+import { TableBody as AriaTableBody, type Selection, type SortDescriptor } from "react-aria-components";
import { Table } from "@/components/application/table/table";
import { Badge } from "@/components/base/badges/badges";
import { Button } from "@/components/base/buttons/button";
diff --git a/src/components/marketing/header-navigation/header.tsx b/src/components/marketing/header-navigation/header.tsx
index 47ca3e0..45eb70b 100644
--- a/src/components/marketing/header-navigation/header.tsx
+++ b/src/components/marketing/header-navigation/header.tsx
@@ -1,5 +1,4 @@
-import type { ReactNode } from "react";
-import { useRef, useState } from "react";
+import { type ReactNode, useRef, useState } from "react";
import { faChevronDown } from "@fortawesome/pro-duotone-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { Button as AriaButton, Dialog as AriaDialog, DialogTrigger as AriaDialogTrigger, Popover as AriaPopover } from "react-aria-components";
diff --git a/src/components/outreach/template-list.tsx b/src/components/outreach/template-list.tsx
index b724fa2..e823d52 100644
--- a/src/components/outreach/template-list.tsx
+++ b/src/components/outreach/template-list.tsx
@@ -1,5 +1,4 @@
-import type { FC } from "react";
-import { useState } from "react";
+import { type FC, useState } from "react";
import { faMagnifyingGlass } from "@fortawesome/pro-duotone-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { Tab, TabList, TabPanel, Tabs } from "@/components/application/tabs/tabs";
diff --git a/src/components/shared-assets/qr-code.tsx b/src/components/shared-assets/qr-code.tsx
index ac4309a..6ea8340 100644
--- a/src/components/shared-assets/qr-code.tsx
+++ b/src/components/shared-assets/qr-code.tsx
@@ -1,5 +1,4 @@
-import type { HTMLAttributes } from "react";
-import { useEffect, useRef, useState } from "react";
+import { type HTMLAttributes, useEffect, useRef, useState } from "react";
import QRCodeStyling, { type Options as QRCodeStylingOptions } from "qr-code-styling";
import { cx } from "@/utils/cx";
diff --git a/src/hooks/use-call-assist.ts b/src/hooks/use-call-assist.ts
index 07bfcab..e2d7344 100644
--- a/src/hooks/use-call-assist.ts
+++ b/src/hooks/use-call-assist.ts
@@ -1,6 +1,5 @@
import { useCallback, useEffect, useRef, useState } from "react";
-import type { Socket } from "socket.io-client";
-import { io } from "socket.io-client";
+import { type Socket, io } from "socket.io-client";
import { startAudioCapture, stopAudioCapture } from "@/lib/audio-capture";
import { getSipClient } from "@/state/sip-manager";
diff --git a/src/lib/icon-wrapper.ts b/src/lib/icon-wrapper.ts
index c1f3012..fa0f846 100644
--- a/src/lib/icon-wrapper.ts
+++ b/src/lib/icon-wrapper.ts
@@ -1,5 +1,4 @@
-import type { FC } from "react";
-import { createElement } from "react";
+import { type FC, createElement } from "react";
import type { IconDefinition } from "@fortawesome/fontawesome-svg-core";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
diff --git a/src/lib/socket.ts b/src/lib/socket.ts
index 3b69cad..a82253f 100644
--- a/src/lib/socket.ts
+++ b/src/lib/socket.ts
@@ -1,5 +1,4 @@
-import type { Socket } from "socket.io-client";
-import { io } from "socket.io-client";
+import { type Socket, io } from "socket.io-client";
const SIDECAR_URL = import.meta.env.VITE_SIDECAR_URL ?? "http://localhost:4100";
diff --git a/src/pages/all-leads.tsx b/src/pages/all-leads.tsx
index e21d548..f59a828 100644
--- a/src/pages/all-leads.tsx
+++ b/src/pages/all-leads.tsx
@@ -1,5 +1,4 @@
-import type { FC } from "react";
-import { useMemo, useState } from "react";
+import { type FC, useMemo, useState } from "react";
import { faArrowDownToLine, faArrowLeft, faArrowUpArrowDown, faFilterList, faMagnifyingGlass } from "@fortawesome/pro-duotone-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { useSearchParams } from "react-router";
diff --git a/src/pages/call-history.tsx b/src/pages/call-history.tsx
index 8ef40e9..9933f23 100644
--- a/src/pages/call-history.tsx
+++ b/src/pages/call-history.tsx
@@ -1,5 +1,4 @@
-import { useMemo, useRef, useState } from "react";
-import type { FC } from "react";
+import { type FC, useMemo, useRef, useState } from "react";
import { faMagnifyingGlass, faPause, faPhoneArrowDown, faPhoneArrowUp, faPhoneXmark, faPlay } from "@fortawesome/pro-duotone-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { Table, TableCard } from "@/components/application/table/table";
diff --git a/src/pages/reports.tsx b/src/pages/reports.tsx
index be5a31e..87ba50a 100644
--- a/src/pages/reports.tsx
+++ b/src/pages/reports.tsx
@@ -1,7 +1,5 @@
-import { useMemo } from "react";
-import type { FC } from "react";
-import { faPercent, faPhoneArrowDownLeft, faPhoneArrowUpRight, faPhoneVolume } from "@fortawesome/pro-duotone-svg-icons";
-import { faArrowDown, faArrowUp } from "@fortawesome/pro-duotone-svg-icons";
+import { type FC, useMemo } from "react";
+import { faArrowDown, faArrowUp, faPercent, faPhoneArrowDownLeft, faPhoneArrowUpRight, faPhoneVolume } from "@fortawesome/pro-duotone-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import ReactECharts from "echarts-for-react";
import { BadgeWithIcon } from "@/components/base/badges/badges";
diff --git a/src/providers/data-provider.tsx b/src/providers/data-provider.tsx
index 61b549a..15eaf47 100644
--- a/src/providers/data-provider.tsx
+++ b/src/providers/data-provider.tsx
@@ -1,5 +1,4 @@
-import type { ReactNode } from "react";
-import { createContext, useCallback, useContext, useEffect, useState } from "react";
+import { type ReactNode, createContext, useCallback, useContext, useEffect, useState } from "react";
import { apiClient } from "@/lib/api-client";
import { ADS_QUERY, CALLS_QUERY, CAMPAIGNS_QUERY, FOLLOW_UPS_QUERY, LEADS_QUERY, LEAD_ACTIVITIES_QUERY, PATIENTS_QUERY } from "@/lib/queries";
import {
diff --git a/src/providers/router-provider.tsx b/src/providers/router-provider.tsx
index 1669a61..fdf71ac 100644
--- a/src/providers/router-provider.tsx
+++ b/src/providers/router-provider.tsx
@@ -1,7 +1,6 @@
import { type PropsWithChildren } from "react";
import { RouterProvider } from "react-aria-components";
-import { useNavigate } from "react-router";
-import type { NavigateOptions } from "react-router";
+import { type NavigateOptions, useNavigate } from "react-router";
declare module "react-aria-components" {
interface RouterConfig {
diff --git a/src/providers/theme-provider.tsx b/src/providers/theme-provider.tsx
index 1b69cff..c17616b 100644
--- a/src/providers/theme-provider.tsx
+++ b/src/providers/theme-provider.tsx
@@ -1,5 +1,4 @@
-import type { ReactNode } from "react";
-import { createContext, useContext, useEffect, useState } from "react";
+import { type ReactNode, createContext, useContext, useEffect, useState } from "react";
type Theme = "light" | "dark" | "system";