add eslint

This commit is contained in:
Eduard Gert
2026-06-18 13:56:41 +02:00
parent 3175b880e4
commit cc842f17d5
61 changed files with 2631 additions and 364 deletions
@@ -1,4 +1,4 @@
import { ButtonHTMLAttributes, forwardRef } from "react";
import { type ButtonHTMLAttributes, forwardRef } from "react";
import {
Briefcase,
Building,
@@ -1,4 +1,4 @@
import { FormEvent, useEffect, useId, useRef, useState } from "react";
import { type FormEvent, useEffect, useId, useRef, useState } from "react";
import { useTranslation } from "react-i18next";
import * as Dialog from "@/components/dialog/Dialog";
import { Input } from "@/components/inputs/Input";
@@ -125,16 +125,16 @@ export const ProfileCreationModal = ({ open, onOpenChange, onCreate }: Props) =>
return (
<Dialog.Root open={open} onOpenChange={onOpenChange}>
<Dialog.Content
maxWidthClass="max-w-md"
maxWidthClass={"max-w-md"}
showClose={false}
className="py-7"
className={"py-7"}
srTitle={t("profile.dialog.title")}
srDescription={t("profile.dialog.description")}
onOpenAutoFocus={(e) => e.preventDefault()}
>
<form onSubmit={handleSubmit}>
<div className="flex flex-col gap-6 px-7">
<div className="flex flex-col gap-2">
<div className={"flex flex-col gap-6 px-7"}>
<div className={"flex flex-col gap-2"}>
<div className={"pl-1"}>
<Label htmlFor={nameId} className={"mb-0.5"}>
{t("profile.dialog.nameLabel")}
@@ -153,13 +153,13 @@ export const ProfileCreationModal = ({ open, onOpenChange, onCreate }: Props) =>
error={nameError ?? undefined}
maxLength={MAX_PROFILE_NAME_LEN}
spellCheck={false}
autoComplete="off"
autoCapitalize="off"
autoComplete={"off"}
autoCapitalize={"off"}
/>
</div>
{!managedManagementUrl && (
<div className="flex flex-col gap-2">
<div className={"flex flex-col gap-2"}>
<div className={"pl-1"}>
<Label as={"div"} className={"mb-0.5"}>
{t("settings.general.management.label")}
@@ -168,7 +168,7 @@ export const ProfileCreationModal = ({ open, onOpenChange, onCreate }: Props) =>
{t("profile.dialog.managementHelp")}
</HelpText>
</div>
<div className="flex flex-col gap-3">
<div className={"flex flex-col gap-3"}>
<ManagementServerSwitch
value={mode}
onChange={setMode}
@@ -188,9 +188,9 @@ export const ProfileCreationModal = ({ open, onOpenChange, onCreate }: Props) =>
error={urlInputError}
warning={urlInputWarning}
spellCheck={false}
autoComplete="off"
autoCorrect="off"
autoCapitalize="off"
autoComplete={"off"}
autoCorrect={"off"}
autoCapitalize={"off"}
/>
)}
</div>
@@ -199,7 +199,7 @@ export const ProfileCreationModal = ({ open, onOpenChange, onCreate }: Props) =>
<DialogActions className={"flex-row items-center justify-end gap-2.5 pt-2"}>
<Button
type="button"
type={"button"}
variant={"secondary"}
size={"xs2"}
disabled={checking}
@@ -208,7 +208,7 @@ export const ProfileCreationModal = ({ open, onOpenChange, onCreate }: Props) =>
{t("common.cancel")}
</Button>
<Button
type="submit"
type={"submit"}
variant={"primary"}
size={"xs2"}
loading={checking}
@@ -80,7 +80,7 @@ export const ProfileDropdown = ({ onManageProfiles }: ProfileDropdownProps) => {
</Popover.Trigger>
<Popover.Portal>
<Popover.Content
align="center"
align={"center"}
sideOffset={8}
collisionPadding={12}
onOpenAutoFocus={(e) => {
@@ -111,8 +111,8 @@ export const ProfileDropdown = ({ onManageProfiles }: ProfileDropdownProps) => {
>
{sortedProfiles.length > 0 && (
<>
<ScrollArea.Root type="auto" className="overflow-hidden -mx-1">
<ScrollArea.Viewport className="max-h-60 px-1">
<ScrollArea.Root type={"auto"} className={"overflow-hidden -mx-1"}>
<ScrollArea.Viewport className={"max-h-60 px-1"}>
{sortedProfiles.map((profile) => (
<ProfileRow
key={profile.id}
@@ -123,16 +123,16 @@ export const ProfileDropdown = ({ onManageProfiles }: ProfileDropdownProps) => {
))}
</ScrollArea.Viewport>
<ScrollArea.Scrollbar
orientation="vertical"
orientation={"vertical"}
className={cn(
"flex select-none touch-none transition-colors",
"w-1.5 bg-transparent",
)}
>
<ScrollArea.Thumb className="flex-1 rounded-full bg-nb-gray-800 hover:bg-nb-gray-700 relative" />
<ScrollArea.Thumb className={"flex-1 rounded-full bg-nb-gray-800 hover:bg-nb-gray-700 relative"} />
</ScrollArea.Scrollbar>
</ScrollArea.Root>
<div className="-mx-1 h-px bg-nb-gray-910" />
<div className={"-mx-1 h-px bg-nb-gray-910"} />
</>
)}
@@ -148,8 +148,8 @@ export const ProfileDropdown = ({ onManageProfiles }: ProfileDropdownProps) => {
"data-[disabled=true]:opacity-50 data-[disabled=true]:pointer-events-none",
)}
>
<Settings2 size={14} aria-hidden="true" className="shrink-0" />
<span className="truncate flex-1">
<Settings2 size={14} aria-hidden={"true"} className={"shrink-0"} />
<span className={"truncate flex-1"}>
{t("profile.dropdown.manageProfiles")}
</span>
</Command.Item>
@@ -164,16 +164,16 @@ export const ProfileDropdown = ({ onManageProfiles }: ProfileDropdownProps) => {
const ProfileTriggerSkeleton = () => (
<div
role="status"
aria-busy="true"
aria-live="polite"
className="h-10 flex items-center gap-2 px-3 rounded-lg select-none wails-no-draggable"
role={"status"}
aria-busy={"true"}
aria-live={"polite"}
className={"h-10 flex items-center gap-2 px-3 rounded-lg select-none wails-no-draggable"}
>
<div
aria-hidden="true"
className="size-4 rounded-full bg-nb-gray-900 animate-pulse shrink-0"
aria-hidden={"true"}
className={"size-4 rounded-full bg-nb-gray-900 animate-pulse shrink-0"}
/>
<div aria-hidden="true" className="h-4 w-24 rounded bg-nb-gray-900 animate-pulse" />
<div aria-hidden={"true"} className={"h-4 w-24 rounded bg-nb-gray-900 animate-pulse"} />
</div>
);
@@ -188,11 +188,11 @@ const ProfileTriggerButton = forwardRef<HTMLButtonElement, ProfileTriggerButtonP
return (
<button
ref={ref}
type="button"
type={"button"}
disabled={disabled}
tabIndex={disabled ? -1 : 0}
aria-label={t("header.profile.switch")}
aria-haspopup="listbox"
aria-haspopup={"listbox"}
className={cn(
"h-10 flex items-center gap-2 px-3 rounded-lg outline-none cursor-default select-none wails-no-draggable",
"text-nb-gray-200 hover:bg-nb-gray-900",
@@ -206,7 +206,7 @@ const ProfileTriggerButton = forwardRef<HTMLButtonElement, ProfileTriggerButtonP
>
<Icon
size={16}
aria-hidden="true"
aria-hidden={"true"}
className={"text-nb-gray-200 shrink-0 wails-no-draggable"}
/>
<span className={"text-sm font-medium truncate max-w-[140px] wails-no-draggable"}>
@@ -214,7 +214,7 @@ const ProfileTriggerButton = forwardRef<HTMLButtonElement, ProfileTriggerButtonP
</span>
<ChevronDown
size={14}
aria-hidden="true"
aria-hidden={"true"}
className={"text-nb-gray-200 shrink-0 wails-no-draggable"}
/>
</button>
@@ -241,14 +241,14 @@ const ProfileRow = ({ profile, isActive, onSelect }: ProfileRowProps) => {
showEmail ? "items-start" : "items-center",
)}
>
<div className="flex flex-col min-w-0 flex-1 leading-tight">
<span className="truncate">{profile.name}</span>
<div className={"flex flex-col min-w-0 flex-1 leading-tight"}>
<span className={"truncate"}>{profile.name}</span>
{showEmail && <TruncatedEmail email={profile.email} />}
</div>
{isActive && (
<Check
size={16}
aria-hidden="true"
aria-hidden={"true"}
className={cn("shrink-0 text-netbird", showEmail && "mt-0.5")}
/>
)}
@@ -267,7 +267,7 @@ const TruncatedEmail = ({ email }: { email: string }) => {
}, [email]);
const span = (
<span ref={ref} className="text-xs mt-0.5 text-nb-gray-300 truncate max-w-[180px]">
<span ref={ref} className={"text-xs mt-0.5 text-nb-gray-300 truncate max-w-[180px]"}>
{email}
</span>
);
@@ -1,4 +1,4 @@
import { KeyboardEvent, useLayoutEffect, useMemo, useRef, useState } from "react";
import { type KeyboardEvent, useLayoutEffect, useMemo, useRef, useState } from "react";
import { useTranslation } from "react-i18next";
import { CircleMinus, LogIn, PlusCircle, Trash2, UserCircle } from "lucide-react";
import type { Profile } from "@bindings/services/models.js";
@@ -138,13 +138,11 @@ export function ProfilesTab() {
{loaded && ordered.length === 0 && (
<div
className={
"flex flex-col items-center justify-center py-10 text-center"
}
className={"flex flex-col items-center justify-center py-10 text-center"}
>
<UserCircle
size={28}
aria-hidden="true"
aria-hidden={"true"}
className={"text-nb-gray-500 mb-2"}
/>
<p className={"text-sm font-semibold text-nb-gray-200"}>
@@ -159,7 +157,7 @@ export function ProfilesTab() {
<SettingsBottomBar>
<Button variant={"primary"} size={"md"} onClick={() => setNewOpen(true)}>
<PlusCircle size={14} aria-hidden="true" />
<PlusCircle size={14} aria-hidden={"true"} />
{t("settings.profiles.addProfile")}
</Button>
</SettingsBottomBar>
@@ -355,15 +353,13 @@ const ProfileRow = ({
>
<Icon
size={15}
aria-hidden="true"
aria-hidden={"true"}
className={cn("text-nb-gray-200 shrink-0", showEmail ? "mt-0.5" : "")}
/>
<div className={"flex flex-col min-w-0 flex-1 leading-tight"}>
<div className={"flex items-center gap-2 min-w-0"}>
<span
className={
"truncate font-medium text-nb-gray-100 select-text cursor-text"
}
className={"truncate font-medium text-nb-gray-100 select-text cursor-text"}
>
{profile.name}
</span>
@@ -505,7 +501,7 @@ const ActionIconButton = ({
"opacity-40 cursor-not-allowed hover:!text-nb-gray-400 hover:!bg-transparent",
)}
>
<Icon size={16} aria-hidden="true" />
<Icon size={16} aria-hidden={"true"} />
</button>
);
if (hidden) return button;