diff --git a/apps/web/src/core/accountSettings/components/OrdinaryColumn.tsx b/apps/web/src/core/accountSettings/components/OrdinaryColumn.tsx index bf4b7bb5c..3a888958a 100644 --- a/apps/web/src/core/accountSettings/components/OrdinaryColumn.tsx +++ b/apps/web/src/core/accountSettings/components/OrdinaryColumn.tsx @@ -22,7 +22,8 @@ function OrdinaryColumn({ const { open } = useModalStore() const { userData } = useAuth() const { t } = useTranslation('common.accountSettings') - const handleOpenModifyModal = useCallback(() => { + +const handleOpenModifyModal = useCallback(() => { open(ModifyModal, { type, title, diff --git a/apps/web/src/core/accountSettings/components/QRLoginColumn.tsx b/apps/web/src/core/accountSettings/components/QRLoginColumn.tsx index f82e0c7a2..ccf279cb2 100644 --- a/apps/web/src/core/accountSettings/components/QRLoginColumn.tsx +++ b/apps/web/src/core/accountSettings/components/QRLoginColumn.tsx @@ -14,7 +14,8 @@ import QRLoginApprovalModal from '../modals/QRLoginScannerModal' function QRLoginColumn() { const { open } = useModalStore() const { t } = useTranslation('common.auth') - const handleOpenScanner = useCallback(() => { + +const handleOpenScanner = useCallback(() => { open(QRCodeScanner, { onScanned: (scannedData: string) => { // Validate that this is a LifeForge QR login code diff --git a/apps/web/src/core/accountSettings/modals/EnableTwoFAModal/index.tsx b/apps/web/src/core/accountSettings/modals/EnableTwoFAModal/index.tsx index f03563bbf..32ac3d3e9 100644 --- a/apps/web/src/core/accountSettings/modals/EnableTwoFAModal/index.tsx +++ b/apps/web/src/core/accountSettings/modals/EnableTwoFAModal/index.tsx @@ -9,7 +9,8 @@ import TwoFAEnableProcedure from './components/TwoFAEnableProcedure' function EnableTwoFAModal({ onClose }: { onClose: () => void }) { const { t } = useTranslation('common.accountSettings') const { setUserData } = useAuth() - const handleSuccess = useCallback(() => { + +const handleSuccess = useCallback(() => { setUserData(userData => userData ? { ...userData, twoFAEnabled: true } : null ) diff --git a/apps/web/src/core/apiKeys/components/EntryItem.tsx b/apps/web/src/core/apiKeys/components/EntryItem.tsx index eab8143c7..53a989a53 100644 --- a/apps/web/src/core/apiKeys/components/EntryItem.tsx +++ b/apps/web/src/core/apiKeys/components/EntryItem.tsx @@ -36,7 +36,8 @@ function EntryItem({ entry }: { entry: APIKeyEntry }) { const queryClient = useQueryClient() const { open } = useModalStore() const [isCopying, setIsCopying] = useState(false) - const deleteMutation = useMutation( + +const deleteMutation = useMutation( forgeAPI.apiKeys.entries.remove .input({ id: entry.id diff --git a/apps/web/src/core/apiKeys/modals/ModifyAPIKeyModal.tsx b/apps/web/src/core/apiKeys/modals/ModifyAPIKeyModal.tsx index 098df9e02..074d8a69c 100644 --- a/apps/web/src/core/apiKeys/modals/ModifyAPIKeyModal.tsx +++ b/apps/web/src/core/apiKeys/modals/ModifyAPIKeyModal.tsx @@ -54,7 +54,8 @@ function ModifyAPIKeyModal({ onClose: () => void }) { const queryClient = useQueryClient() - const mutation = useMutation( + +const mutation = useMutation( (type === 'create' ? forgeAPI.apiKeys.entries.create : forgeAPI.apiKeys.entries.update.input({ @@ -82,7 +83,8 @@ function ModifyAPIKeyModal({ mode: 'all', resolver: zodResolver(schema) }) - const overrideKey = useWatch({ control: form.control, name: 'overrideKey' }) + +const overrideKey = useWatch({ control: form.control, name: 'overrideKey' }) return ( ) => { if (e.key === 'Enter') { onSubmit() diff --git a/apps/web/src/core/auth/components/AuthSignInButtons/components/SigninWithProviderButton.tsx b/apps/web/src/core/auth/components/AuthSignInButtons/components/SigninWithProviderButton.tsx index cdc23ebe5..d571d1cbc 100644 --- a/apps/web/src/core/auth/components/AuthSignInButtons/components/SigninWithProviderButton.tsx +++ b/apps/web/src/core/auth/components/AuthSignInButtons/components/SigninWithProviderButton.tsx @@ -16,7 +16,8 @@ function SigninWithProviderButton({ }) { const { auth } = useAuth() const [searchParams] = useSearchParams() - const signInWithProvider = useCallback(async () => { + +const signInWithProvider = useCallback(async () => { const providerInstance = await fetch( forgeAPI.user.oauth.getEndpoint.input({ provider diff --git a/apps/web/src/core/auth/modals/QRLoginModal/components/QRContent.tsx b/apps/web/src/core/auth/modals/QRLoginModal/components/QRContent.tsx index bf5c193e8..0cb75f777 100644 --- a/apps/web/src/core/auth/modals/QRLoginModal/components/QRContent.tsx +++ b/apps/web/src/core/auth/modals/QRLoginModal/components/QRContent.tsx @@ -41,7 +41,8 @@ const getStyle = (status: QRStatus) => { function QRContent({ onClose }: { onClose: () => void }) { const { t } = useTranslation('common.auth') - const { status, qrData, timeLeft, refreshSession } = useQRLoginSession({ + +const { status, qrData, timeLeft, refreshSession } = useQRLoginSession({ onSuccess: onClose }) diff --git a/apps/web/src/core/auth/modals/QRLoginModal/hooks/useQRLoginSession.ts b/apps/web/src/core/auth/modals/QRLoginModal/hooks/useQRLoginSession.ts index dd05416c5..9bdfadd0b 100644 --- a/apps/web/src/core/auth/modals/QRLoginModal/hooks/useQRLoginSession.ts +++ b/apps/web/src/core/auth/modals/QRLoginModal/hooks/useQRLoginSession.ts @@ -43,7 +43,8 @@ export default function useQRLoginSession({ /** * Fallback polling for WebSocket connection issues */ - const startPolling = useCallback( + +const startPolling = useCallback( (sessionId: string) => { if (pollingIntervalRef.current) return diff --git a/apps/web/src/core/auth/modals/TwoFAModal/components/UsingEmail.tsx b/apps/web/src/core/auth/modals/TwoFAModal/components/UsingEmail.tsx index 1a4eb0874..ce047b51d 100644 --- a/apps/web/src/core/auth/modals/TwoFAModal/components/UsingEmail.tsx +++ b/apps/web/src/core/auth/modals/TwoFAModal/components/UsingEmail.tsx @@ -27,7 +27,8 @@ function UsingEmail({ const [sendOtpLoading, setSendOtpLoading] = useState(false) const [verifyOtpLoading, setVerifyOtpLoading] = useState(false) const [otpSent, setOtpSent] = useState(false) - const [otpCooldown, setOtpCooldown] = useState( + +const [otpCooldown, setOtpCooldown] = useState( localStorage.getItem(`otpCooldown:2fa`) ? Math.floor( (Number(localStorage.getItem(`otpCooldown:2fa`)) - diff --git a/apps/web/src/core/auth/pages/LoginPage.tsx b/apps/web/src/core/auth/pages/LoginPage.tsx index fd888509e..d06c3025e 100644 --- a/apps/web/src/core/auth/pages/LoginPage.tsx +++ b/apps/web/src/core/auth/pages/LoginPage.tsx @@ -14,7 +14,8 @@ import AuthSideImage from '../components/AuthSideImage' function LoginPage() { const { verifyOAuth } = useAuth() const [searchParams, setSearchParams] = useSearchParams() - useEffect(() => { + +useEffect(() => { const code = searchParams.get('code') const state = searchParams.get('state') diff --git a/apps/web/src/core/auth/pages/UserCreationPage.tsx b/apps/web/src/core/auth/pages/UserCreationPage.tsx index 139ca75b3..3e5bd5c64 100644 --- a/apps/web/src/core/auth/pages/UserCreationPage.tsx +++ b/apps/web/src/core/auth/pages/UserCreationPage.tsx @@ -16,15 +16,18 @@ import forgeAPI from '@/forgeAPI' function UserCreationPage() { const { t } = useTranslation('common.auth') - const [formData, setFormData] = useState({ + +const [formData, setFormData] = useState({ email: '', username: '', name: '', password: '', confirmPassword: '' }) - const [errors, setErrors] = useState>({}) - const createUserMutation = useMutation( + +const [errors, setErrors] = useState>({}) + +const createUserMutation = useMutation( forgeAPI.user.auth.createFirstUser.mutationOptions({ onSuccess: () => { toast.success(t('messages.userCreated')) diff --git a/apps/web/src/core/backups/components/BackupItem.tsx b/apps/web/src/core/backups/components/BackupItem.tsx index 606610520..3d0a94012 100644 --- a/apps/web/src/core/backups/components/BackupItem.tsx +++ b/apps/web/src/core/backups/components/BackupItem.tsx @@ -30,7 +30,8 @@ function BackupItem({ const queryClient = useQueryClient() const { open } = useModalStore() const [downloadLoading, setDownloadLoading] = useState(false) - const deleteMutation = useMutation( + +const deleteMutation = useMutation( forgeAPI.backups.remove .input({ key: backup.key diff --git a/apps/web/src/core/backups/components/CreateBackupModal.tsx b/apps/web/src/core/backups/components/CreateBackupModal.tsx index 875dcd3ea..aedf7c58e 100644 --- a/apps/web/src/core/backups/components/CreateBackupModal.tsx +++ b/apps/web/src/core/backups/components/CreateBackupModal.tsx @@ -21,7 +21,8 @@ const schema = z.object({ function CreateBackupModal({ onClose }: { onClose: () => void }) { const { t } = useTranslation('common.backups') const queryClient = useQueryClient() - const mutation = useMutation( + +const mutation = useMutation( forgeAPI.backups.create.mutationOptions({ onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['backups'] }) diff --git a/apps/web/src/core/dashboard/components/DashboardGrid.tsx b/apps/web/src/core/dashboard/components/DashboardGrid.tsx index 58d218461..092d7a212 100644 --- a/apps/web/src/core/dashboard/components/DashboardGrid.tsx +++ b/apps/web/src/core/dashboard/components/DashboardGrid.tsx @@ -40,14 +40,16 @@ function DashboardGrid({ }) { const { t } = useTranslation('common.dashboard') const { widgets } = useWidgets() - const COMPONENTS = useMemo( + +const COMPONENTS = useMemo( () => Object.fromEntries( Object.entries(widgets).map(([key, value]) => [key, value.component]) ), [widgets] ) - const { width, height } = useDivSize(wrapperRef) + +const { width, height } = useDivSize(wrapperRef) const { dashboardLayout: enabledWidgets } = usePersonalization() const { changeDashboardLayout } = useUserPersonalization() diff --git a/apps/web/src/core/dashboard/index.tsx b/apps/web/src/core/dashboard/index.tsx index e56d72181..5c51541e3 100644 --- a/apps/web/src/core/dashboard/index.tsx +++ b/apps/web/src/core/dashboard/index.tsx @@ -18,7 +18,8 @@ function DashboardContent() { const { widgets } = useWidgets() const wrapperRef = useRef(null) const [canLayoutChange, setCanLayoutChange] = useState(false) - const handleManageWidget = useCallback(() => { + +const handleManageWidget = useCallback(() => { open(ManageWidgetsModal, { widgets }) }, [widgets, open]) diff --git a/apps/web/src/core/dashboard/modals/ManageWidgetsModal/components/ComponentItem.tsx b/apps/web/src/core/dashboard/modals/ManageWidgetsModal/components/ComponentItem.tsx index c4ac2cbee..e3462995f 100644 --- a/apps/web/src/core/dashboard/modals/ManageWidgetsModal/components/ComponentItem.tsx +++ b/apps/web/src/core/dashboard/modals/ManageWidgetsModal/components/ComponentItem.tsx @@ -35,12 +35,15 @@ function ComponentListItem({ namespace?: string }) { const { t } = useTranslation([namespace ?? 'common.dashboard']) - const { + +const { dashboardLayout: enabledWidgets, setDashboardLayout: setEnabledWidgets } = usePersonalization() - const { changeDashboardLayout: setDashboardLayout } = useUserPersonalization() - const isEnabled = useMemo(() => { + +const { changeDashboardLayout: setDashboardLayout } = useUserPersonalization() + +const isEnabled = useMemo(() => { return Object.values( JSON.stringify(enabledWidgets) !== '{}' ? enabledWidgets : { a: [] } ).some(e => e.find(i => i.i === id) !== undefined) diff --git a/apps/web/src/core/dashboard/providers/WidgetProvider.tsx b/apps/web/src/core/dashboard/providers/WidgetProvider.tsx index bf3f2bbba..8f3995762 100644 --- a/apps/web/src/core/dashboard/providers/WidgetProvider.tsx +++ b/apps/web/src/core/dashboard/providers/WidgetProvider.tsx @@ -38,11 +38,14 @@ export function useWidgets(): WidgetContextValue { function WidgetProvider({ children }: { children: React.ReactNode }) { const { modules } = useFederation() - const [federatedWidgets, setFederatedWidgets] = useState< + +const [federatedWidgets, setFederatedWidgets] = useState< Record >({}) - const [loading, setLoading] = useState(true) - useEffect(() => { + +const [loading, setLoading] = useState(true) + +useEffect(() => { async function loadFederatedWidgets() { setLoading(true) diff --git a/apps/web/src/core/documentation/index.tsx b/apps/web/src/core/documentation/index.tsx index ae9b98667..66517f074 100644 --- a/apps/web/src/core/documentation/index.tsx +++ b/apps/web/src/core/documentation/index.tsx @@ -7,7 +7,8 @@ import { toast } from '@lifeforge/ui' function index() { const navigate = useNavigate() const { t } = useTranslation('common.fetch') - useEffect(() => { + +useEffect(() => { const a = document.createElement('a') a.href = 'https://docs.lifeforge.dev' diff --git a/apps/web/src/core/moduleManager/pages/Categories/components/CategoryItem.tsx b/apps/web/src/core/moduleManager/pages/Categories/components/CategoryItem.tsx index b32d7ea6d..f978b76f9 100644 --- a/apps/web/src/core/moduleManager/pages/Categories/components/CategoryItem.tsx +++ b/apps/web/src/core/moduleManager/pages/Categories/components/CategoryItem.tsx @@ -34,7 +34,8 @@ function CategoryItem({ }) { const { open } = useModalStore() const { categoryTranslations, refetch } = useFederation() - const { + +const { attributes, listeners, setNodeRef, diff --git a/apps/web/src/core/moduleManager/pages/Categories/components/ModifyCategoryModal.tsx b/apps/web/src/core/moduleManager/pages/Categories/components/ModifyCategoryModal.tsx index bdf96b6cf..ee11bbad3 100644 --- a/apps/web/src/core/moduleManager/pages/Categories/components/ModifyCategoryModal.tsx +++ b/apps/web/src/core/moduleManager/pages/Categories/components/ModifyCategoryModal.tsx @@ -38,11 +38,13 @@ function ModifyCategoryModal({ const { t } = useTranslation('common.module-manager') const languagesQuery = useQuery(forgeAPI.locales.listLanguages.queryOptions()) const { open } = useModalStore() - const [data, setData] = useState({ + +const [data, setData] = useState({ key: category?.key || '', value: Object.entries(category?.value || {}) }) - const [aiLoading, setAiLoading] = useState(false) + +const [aiLoading, setAiLoading] = useState(false) function handleSubmit() { if (!data.key.trim() || data.value.some(([_, v]) => !v.trim())) { diff --git a/apps/web/src/core/moduleManager/pages/Categories/index.tsx b/apps/web/src/core/moduleManager/pages/Categories/index.tsx index 7c68fa25b..5ac609084 100644 --- a/apps/web/src/core/moduleManager/pages/Categories/index.tsx +++ b/apps/web/src/core/moduleManager/pages/Categories/index.tsx @@ -37,7 +37,8 @@ function Categories() { const { t } = useTranslation('common.module-manager') const { open } = useModalStore() const { categoryTranslations, modules, refetch } = useFederation() - const [items, setItems] = useState< + +const [items, setItems] = useState< Array<{ key: string; value: Record }> >([]) const missingKeys = useMemo(() => { diff --git a/apps/web/src/core/moduleManager/pages/Modules/components/ModuleItem.tsx b/apps/web/src/core/moduleManager/pages/Modules/components/ModuleItem.tsx index f78ecc3c6..96fd9a846 100644 --- a/apps/web/src/core/moduleManager/pages/Modules/components/ModuleItem.tsx +++ b/apps/web/src/core/moduleManager/pages/Modules/components/ModuleItem.tsx @@ -48,7 +48,8 @@ function ModuleItem({ const { open } = useModalStore() const { refetch: refetchFederation } = useFederation() - const devModeMutation = useMutation({ + +const devModeMutation = useMutation({ mutationFn: () => forgeAPI.modules.devMode.toggle.mutate({ moduleName: module.name }), onSuccess: () => { diff --git a/apps/web/src/core/moduleManager/pages/Modules/index.tsx b/apps/web/src/core/moduleManager/pages/Modules/index.tsx index 5965208d6..82d13077e 100644 --- a/apps/web/src/core/moduleManager/pages/Modules/index.tsx +++ b/apps/web/src/core/moduleManager/pages/Modules/index.tsx @@ -36,7 +36,8 @@ function Modules() { const { language } = usePersonalization() const queryClient = useQueryClient() const modulesQuery = useQuery(forgeAPI.modules.list.queryOptions()) - const uninstallMutation = useMutation({ + +const uninstallMutation = useMutation({ mutationFn: (moduleName: string) => forgeAPI.modules.uninstall.mutate({ moduleName }), onSuccess: (data, moduleName) => { diff --git a/apps/web/src/core/personalization/components/BgImageSelector/index.tsx b/apps/web/src/core/personalization/components/BgImageSelector/index.tsx index 519745f67..4642f8db9 100644 --- a/apps/web/src/core/personalization/components/BgImageSelector/index.tsx +++ b/apps/web/src/core/personalization/components/BgImageSelector/index.tsx @@ -22,7 +22,8 @@ function BgImageSelector() { const { t } = useTranslation('common.personalization') const { bgImage } = usePersonalization() const { setBgImage, setBackdropFilters } = usePersonalization() - const handleAdjustBgImage = useCallback(() => { + +const handleAdjustBgImage = useCallback(() => { open(AdjustBgImageModal, {}) }, []) const deleteMutation = useMutation( diff --git a/apps/web/src/core/personalization/components/BgImageSelector/modals/AdjustBgImageModal/index.tsx b/apps/web/src/core/personalization/components/BgImageSelector/modals/AdjustBgImageModal/index.tsx index b32e9e199..87abc61c7 100644 --- a/apps/web/src/core/personalization/components/BgImageSelector/modals/AdjustBgImageModal/index.tsx +++ b/apps/web/src/core/personalization/components/BgImageSelector/modals/AdjustBgImageModal/index.tsx @@ -13,14 +13,18 @@ function AdjustBgImageModal({ onClose }: { onClose: () => void }) { const { t } = useTranslation('common.personalization') const { backdropFilters } = usePersonalization() const { changeBackdropFilters } = useUserPersonalization() - const [bgBlur, setBgBlur] = useState( + +const [bgBlur, setBgBlur] = useState( backdropFilters.blur ) - const [bgBrightness, setBgBrightness] = useState(backdropFilters.brightness) - const [overlayOpacity, setOverlayOpacity] = useState( + +const [bgBrightness, setBgBrightness] = useState(backdropFilters.brightness) + +const [overlayOpacity, setOverlayOpacity] = useState( backdropFilters.overlayOpacity ) - const [bgContrast, setBgContrast] = useState(backdropFilters.contrast) + +const [bgContrast, setBgContrast] = useState(backdropFilters.contrast) const [bgSaturation, setBgSaturation] = useState(backdropFilters.saturation) const ADJUSTMENTS_COLUMNS = [ diff --git a/apps/web/src/core/personalization/components/BgTempSelector/index.tsx b/apps/web/src/core/personalization/components/BgTempSelector/index.tsx index a891c8716..e3802d98e 100644 --- a/apps/web/src/core/personalization/components/BgTempSelector/index.tsx +++ b/apps/web/src/core/personalization/components/BgTempSelector/index.tsx @@ -18,10 +18,12 @@ import DefaultBgTempSelector from './components/DefaultBgTempSelector' function BgTempSelector() { const { bgTemp } = usePersonalization() const { changeBgTemp } = useUserPersonalization() - const [customBgTemp, setCustomBgTemp] = useState( + +const [customBgTemp, setCustomBgTemp] = useState( bgTemp.startsWith('#') ? bgTemp : '#000000' ) - const { t } = useTranslation(['common.personalization', 'common.buttons']) + +const { t } = useTranslation(['common.personalization', 'common.buttons']) return ( void }) { const { t } = useTranslation('common.personalization') const { fontFamily } = usePersonalization() const { changeFontFamily } = useUserPersonalization() - const [activeTab, setActiveTab] = useState( + +const [activeTab, setActiveTab] = useState( fontFamily.startsWith('custom:') ? 'custom' : 'google' ) - const [selectedFont, setSelectedFont] = useState(fontFamily) + +const [selectedFont, setSelectedFont] = useState(fontFamily) return ( diff --git a/apps/web/src/core/personalization/components/FontFamilySelector/components/FontFamilySelectorModal/tabs/custom/components/CustomFontUploadModal.tsx b/apps/web/src/core/personalization/components/FontFamilySelector/components/FontFamilySelectorModal/tabs/custom/components/CustomFontUploadModal.tsx index 50b1dcb5e..2091073cc 100644 --- a/apps/web/src/core/personalization/components/FontFamilySelector/components/FontFamilySelectorModal/tabs/custom/components/CustomFontUploadModal.tsx +++ b/apps/web/src/core/personalization/components/FontFamilySelector/components/FontFamilySelectorModal/tabs/custom/components/CustomFontUploadModal.tsx @@ -50,7 +50,8 @@ function CustomFontUploadModal({ data: { openType: 'create' | 'edit'; initialData?: CustomFont } }) { const queryClient = useQueryClient() - const uploadMutation = useMutation( + +const uploadMutation = useMutation( forgeAPI.user.customFonts.upload .input({ id: openType === 'edit' && initialData ? initialData.id : undefined diff --git a/apps/web/src/core/personalization/components/FontFamilySelector/components/FontFamilySelectorModal/tabs/custom/index.tsx b/apps/web/src/core/personalization/components/FontFamilySelector/components/FontFamilySelectorModal/tabs/custom/index.tsx index 41adfaaac..78d482ec4 100644 --- a/apps/web/src/core/personalization/components/FontFamilySelector/components/FontFamilySelectorModal/tabs/custom/index.tsx +++ b/apps/web/src/core/personalization/components/FontFamilySelector/components/FontFamilySelectorModal/tabs/custom/index.tsx @@ -35,7 +35,8 @@ function CustomFontSelector({ }) { const { t } = useTranslation('common.personalization') const { open } = useModalStore() - const customFontsQuery = useQuery( + +const customFontsQuery = useQuery( forgeAPI.user.customFonts.list.queryOptions() ) diff --git a/apps/web/src/core/personalization/components/FontFamilySelector/components/FontFamilySelectorModal/tabs/google/components/FontListItem.tsx b/apps/web/src/core/personalization/components/FontFamilySelector/components/FontFamilySelectorModal/tabs/google/components/FontListItem.tsx index 2e4a44895..9b1418a65 100644 --- a/apps/web/src/core/personalization/components/FontFamilySelector/components/FontFamilySelectorModal/tabs/google/components/FontListItem.tsx +++ b/apps/web/src/core/personalization/components/FontFamilySelector/components/FontFamilySelectorModal/tabs/google/components/FontListItem.tsx @@ -35,7 +35,8 @@ function FontListItem({ setSelectedFont: (font: string) => void }) { const queryClient = useQueryClient() - const togglePinMutation = useMutation( + +const togglePinMutation = useMutation( forgeAPI.user.personalization.toggleGoogleFontsPin.mutationOptions({ onSuccess: () => { queryClient.invalidateQueries({ diff --git a/apps/web/src/core/personalization/components/FontFamilySelector/components/FontFamilySelectorModal/tabs/google/contexts/GoogleFontContext.tsx b/apps/web/src/core/personalization/components/FontFamilySelector/components/FontFamilySelectorModal/tabs/google/contexts/GoogleFontContext.tsx index ffbe1a878..cb2ceec1b 100644 --- a/apps/web/src/core/personalization/components/FontFamilySelector/components/FontFamilySelectorModal/tabs/google/contexts/GoogleFontContext.tsx +++ b/apps/web/src/core/personalization/components/FontFamilySelector/components/FontFamilySelectorModal/tabs/google/contexts/GoogleFontContext.tsx @@ -48,18 +48,21 @@ function GoogleFontProvider({ setSelectedFont: (font: string | null) => void }) { const { fontFamily } = usePersonalization() - const fontsQuery = useQuery<{ + +const fontsQuery = useQuery<{ enabled: boolean items: FontFamily[] }>(forgeAPI.user.personalization.listGoogleFonts.queryOptions()) const pinnedFontsQuery = useQuery( forgeAPI.user.personalization.listGoogleFontsPin.queryOptions() ) - const [selectedCategory, setSelectedCategory] = useState(null) + +const [selectedCategory, setSelectedCategory] = useState(null) const [searchQuery, setSearchQuery] = useState('') const [page, setPage] = useState(1) const scrollableRef = useRef(null) - const categories = useMemo( + +const categories = useMemo( () => [...new Set(fontsQuery.data?.items.map(font => font.category))], [fontsQuery.data?.items] ) diff --git a/apps/web/src/core/personalization/components/FontFamilySelector/components/FontFamilySelectorModal/tabs/google/index.tsx b/apps/web/src/core/personalization/components/FontFamilySelector/components/FontFamilySelectorModal/tabs/google/index.tsx index 54d162ae6..328488ad0 100644 --- a/apps/web/src/core/personalization/components/FontFamilySelector/components/FontFamilySelectorModal/tabs/google/index.tsx +++ b/apps/web/src/core/personalization/components/FontFamilySelector/components/FontFamilySelectorModal/tabs/google/index.tsx @@ -21,7 +21,8 @@ function GoogleFontSelectorContent() { }) .queryOptions() ) - const { pinnedFontsQuery, fontsQuery } = useGoogleFont() + +const { pinnedFontsQuery, fontsQuery } = useGoogleFont() return ( diff --git a/apps/web/src/core/personalization/components/FontFamilySelector/index.tsx b/apps/web/src/core/personalization/components/FontFamilySelector/index.tsx index c4ddecc1a..aa7f846e7 100644 --- a/apps/web/src/core/personalization/components/FontFamilySelector/index.tsx +++ b/apps/web/src/core/personalization/components/FontFamilySelector/index.tsx @@ -21,7 +21,8 @@ function FontFamilySelector() { const { t } = useTranslation('common.personalization') const { open } = useModalStore() const { fontFamily } = usePersonalization() - const customFontQuery = useQuery( + +const customFontQuery = useQuery( forgeAPI.user.customFonts.get .input({ id: fontFamily.replace('custom:', '') diff --git a/apps/web/src/core/personalization/components/ThemeColorSelector/index.tsx b/apps/web/src/core/personalization/components/ThemeColorSelector/index.tsx index 3c160746f..15eb25d56 100644 --- a/apps/web/src/core/personalization/components/ThemeColorSelector/index.tsx +++ b/apps/web/src/core/personalization/components/ThemeColorSelector/index.tsx @@ -18,10 +18,12 @@ import DefaultThemeColorSelector from './components/DefaultThemeColorSelector' function ThemeColorSelector() { const { rawThemeColor: themeColor } = usePersonalization() const { changeThemeColor } = useUserPersonalization() - const [customThemeColor, setCustomThemeColor] = useState( + +const [customThemeColor, setCustomThemeColor] = useState( themeColor.startsWith('#') ? themeColor : '#000000' ) - const { t } = useTranslation(['common.personalization', 'common.buttons']) + +const { t } = useTranslation(['common.personalization', 'common.buttons']) return ( // IMPORTANT: The order of these providers matters! // From top to bottom, they are nested inside one another in that order. diff --git a/apps/web/src/routes/components/Sidebar/MainSidebarTitle.tsx b/apps/web/src/routes/components/Sidebar/MainSidebarTitle.tsx index dbe7a6d38..83b4a17ca 100644 --- a/apps/web/src/routes/components/Sidebar/MainSidebarTitle.tsx +++ b/apps/web/src/routes/components/Sidebar/MainSidebarTitle.tsx @@ -6,7 +6,8 @@ import { SidebarTitle, usePersonalization } from '@lifeforge/ui' function MainSidebarTitle({ title }: { title: string }) { const { categoryTranslations } = useFederation() const { language } = usePersonalization() - const translatedTitle = useMemo(() => { + +const translatedTitle = useMemo(() => { const key = title.toLowerCase() const translations = categoryTranslations[key] diff --git a/apps/web/src/routes/components/Sidebar/SidebarBottomBar.tsx b/apps/web/src/routes/components/Sidebar/SidebarBottomBar.tsx index 1efa8e32a..1182f1c46 100644 --- a/apps/web/src/routes/components/Sidebar/SidebarBottomBar.tsx +++ b/apps/web/src/routes/components/Sidebar/SidebarBottomBar.tsx @@ -20,7 +20,8 @@ function SidebarBottomBar() { const navigate = useNavigate() const { sidebarExpanded, toggleSidebar } = useMainSidebarState() const { userData, getAvatarURL, logout } = useAuth() - const handleNavigateToAccountSettings = useCallback(() => { + +const handleNavigateToAccountSettings = useCallback(() => { if (window.innerWidth < 1024) { toggleSidebar() } diff --git a/apps/web/src/routes/components/Sidebar/SidebarEventBanner.tsx b/apps/web/src/routes/components/Sidebar/SidebarEventBanner.tsx index d683a0505..fd1ed83a9 100644 --- a/apps/web/src/routes/components/Sidebar/SidebarEventBanner.tsx +++ b/apps/web/src/routes/components/Sidebar/SidebarEventBanner.tsx @@ -67,7 +67,8 @@ export default function SidebarEventBanner() { const { sidebarExpanded } = useMainSidebarState() const { derivedThemeColor: themeColor } = usePersonalization() const { userData } = useAuth() - const eventType = useMemo( + +const eventType = useMemo( () => getEventType(userData?.dateOfBirth), [userData?.dateOfBirth] ) diff --git a/apps/web/src/routes/components/Sidebar/SidebarItems.tsx b/apps/web/src/routes/components/Sidebar/SidebarItems.tsx index d95794236..daff006e9 100644 --- a/apps/web/src/routes/components/Sidebar/SidebarItems.tsx +++ b/apps/web/src/routes/components/Sidebar/SidebarItems.tsx @@ -22,7 +22,8 @@ function SidebarItems({ query }: { query: string }) { const location = useLocation() const { sidebarExpanded, toggleSidebar } = useMainSidebarState() const [resolvedRoutes, setResolvedRoutes] = useState(modules) - const filteredRoutes = useMemo( + +const filteredRoutes = useMemo( () => resolvedRoutes.filter( e => diff --git a/apps/web/src/routes/hooks/useAppRouter.ts b/apps/web/src/routes/hooks/useAppRouter.ts index 096bcc95d..706354158 100644 --- a/apps/web/src/routes/hooks/useAppRouter.ts +++ b/apps/web/src/routes/hooks/useAppRouter.ts @@ -16,7 +16,8 @@ export function useAppRouter() { const { auth, authLoading } = useAuth() const { modules, loading: modulesLoading } = useFederation() const [appRouter, setAppRouter] = useState(null) - const loadingRouter = useMemo( + +const loadingRouter = useMemo( () => createBrowserRouter(createAuthLoadingConfig()), [] ) diff --git a/apps/web/src/routes/hooks/useTitleEffect.ts b/apps/web/src/routes/hooks/useTitleEffect.ts index 6e62cb9b8..972aa332e 100644 --- a/apps/web/src/routes/hooks/useTitleEffect.ts +++ b/apps/web/src/routes/hooks/useTitleEffect.ts @@ -7,7 +7,8 @@ import { useFederation } from '@lifeforge/federation' function useTitleEffect() { const { modules } = useFederation() const location = useLocation() - useEffect(() => { + +useEffect(() => { const target = modules .flatMap(e => e.items) diff --git a/docs/src/components/Boilerplate/components/NavigationBar.tsx b/docs/src/components/Boilerplate/components/NavigationBar.tsx index 64a7bceb7..2d8e5fd5c 100644 --- a/docs/src/components/Boilerplate/components/NavigationBar.tsx +++ b/docs/src/components/Boilerplate/components/NavigationBar.tsx @@ -7,7 +7,8 @@ import ROUTES from '../../../Router' function NavigationBar() { const location = useLocation() - const currentGroup = useMemo( + +const currentGroup = useMemo( () => location.pathname.split('/')[1], [location] ) diff --git a/docs/src/components/Boilerplate/index.tsx b/docs/src/components/Boilerplate/index.tsx index 699f46798..92d8a4e14 100644 --- a/docs/src/components/Boilerplate/index.tsx +++ b/docs/src/components/Boilerplate/index.tsx @@ -8,7 +8,8 @@ import NavigationBar from './components/NavigationBar' function Boilerplate({ children }: { children: React.ReactNode }) { const location = useLocation() - useEffect(() => { + +useEffect(() => { const hash = location.hash if (hash) { diff --git a/docs/src/components/GithubStarCount.tsx b/docs/src/components/GithubStarCount.tsx index 85dc0a795..befd18a26 100644 --- a/docs/src/components/GithubStarCount.tsx +++ b/docs/src/components/GithubStarCount.tsx @@ -5,7 +5,8 @@ import { TagChip } from '@lifeforge/ui' function GithubStarCount() { const [stars, setStars] = useState(null) - useEffect(() => { + +useEffect(() => { fetch('https://api.github.com/repos/LifeForge-app/lifeforge') .then(res => res.json()) .then(data => setStars(data.stargazers_count)) diff --git a/docs/src/components/MermaidChart.tsx b/docs/src/components/MermaidChart.tsx index 5ea7173c0..bc586cfeb 100644 --- a/docs/src/components/MermaidChart.tsx +++ b/docs/src/components/MermaidChart.tsx @@ -20,7 +20,8 @@ function MermaidChart({ chart }: { chart: string }) { const [svg, setSvg] = useState('') const [error, setError] = useState('') - useEffect(() => { + +useEffect(() => { const renderChart = async () => { try { const { svg } = await mermaid.render(`mermaid-${id}`, chart) diff --git a/docs/src/components/Rightbar.tsx b/docs/src/components/Rightbar.tsx index e983fc142..d1485d9b4 100644 --- a/docs/src/components/Rightbar.tsx +++ b/docs/src/components/Rightbar.tsx @@ -12,7 +12,8 @@ function Rightbar() { const userClickedRef = useRef(false) const userClickTimeoutRef = useRef(null) // Apply aria-current attribute whenever activeSection changes - useEffect(() => { + +useEffect(() => { if (activeSection) { document.querySelectorAll('li[aria-current=page]').forEach(li => { li.removeAttribute('aria-current') diff --git a/docs/src/contents/01.getting-started/components/EnvExample.tsx b/docs/src/contents/01.getting-started/components/EnvExample.tsx index 270062e1a..2da81ae22 100644 --- a/docs/src/contents/01.getting-started/components/EnvExample.tsx +++ b/docs/src/contents/01.getting-started/components/EnvExample.tsx @@ -6,7 +6,8 @@ import Code from '@/components/Code' function EnvExample() { const [envContent, setEnvContent] = useState('') - useEffect(() => { + +useEffect(() => { fetch( 'https://raw.githubusercontent.com/LifeForge-app/lifeforge/refs/heads/main/env/.env.example' ) diff --git a/docs/src/contents/02.user-guide/components/CustomColorInput.tsx b/docs/src/contents/02.user-guide/components/CustomColorInput.tsx index a9c7624e2..7a95c9a72 100644 --- a/docs/src/contents/02.user-guide/components/CustomColorInput.tsx +++ b/docs/src/contents/02.user-guide/components/CustomColorInput.tsx @@ -6,7 +6,8 @@ import { Button, ColorInput, Switch, usePersonalization } from '@lifeforge/ui' function CustomColorInput() { const [color, setColor] = useState('#a9d066') const { setRawThemeColor, rawThemeColor } = usePersonalization() - useEffect(() => { + +useEffect(() => { setColor(rawThemeColor.toUpperCase()) }, [rawThemeColor]) diff --git a/eslint/index.ts b/eslint/index.ts index 152377a13..73d232045 100644 --- a/eslint/index.ts +++ b/eslint/index.ts @@ -1,6 +1,11 @@ export { default as importsConfig } from './imports' + export { default as reactConfig } from './react' + export { default as sonarConfig } from './sonar' + export { default as storiesConfig } from './stories' + export { default as styleConfig } from './style' + export { default as testsConfig } from './tests' diff --git a/eslint/padding-react-hooks.ts b/eslint/padding-react-hooks.ts index 3e8e654f2..eb9430761 100644 --- a/eslint/padding-react-hooks.ts +++ b/eslint/padding-react-hooks.ts @@ -1,5 +1,5 @@ -import type { Rule } from 'eslint' import type { TSESTree } from '@typescript-eslint/utils' +import type { Rule } from 'eslint' const rule: Rule.RuleModule = { meta: { @@ -13,121 +13,131 @@ const rule: Rule.RuleModule = { messages: { noBlankLineBetweenHooks: 'Expected no blank line between hook calls.', blankLineRequiredAfterHook: 'Expected blank line after hook calls.', - blankLineRequiredBeforeHook: 'Expected blank line before hook calls.', - blankLineRequiredBetweenConsts: 'Expected blank line between const declarations.' + blankLineRequiredBeforeHook: 'Expected blank line before hook calls.' } }, create(context) { - const sourceCode = context.sourceCode; + const sourceCode = context.sourceCode function isHookCall(node: any): boolean { - if (!node || node.type !== 'CallExpression') return false; - const callee = node.callee; + if (!node || node.type !== 'CallExpression') return false + + const callee = node.callee + if (callee.type === 'Identifier') { - return /^use[A-Z]/.test(callee.name); + return /^use[A-Z]/.test(callee.name) } - if (callee.type === 'MemberExpression' && callee.property.type === 'Identifier') { - return /^use[A-Z]/.test(callee.property.name); + + if ( + callee.type === 'MemberExpression' && + callee.property.type === 'Identifier' + ) { + return /^use[A-Z]/.test(callee.property.name) } - return false; + + return false } function isHookStatement(statement: TSESTree.Statement): boolean { if (statement.type === 'ExpressionStatement') { - return isHookCall((statement as TSESTree.ExpressionStatement).expression); + return isHookCall( + (statement as TSESTree.ExpressionStatement).expression + ) } + if (statement.type === 'VariableDeclaration') { - return (statement as TSESTree.VariableDeclaration).declarations.some(decl => isHookCall(decl.init)); + return (statement as TSESTree.VariableDeclaration).declarations.some( + decl => isHookCall(decl.init) + ) } - return false; + + return false + } + + function isSingleLineHookStatement(statement: TSESTree.Statement): boolean { + return ( + isHookStatement(statement) && + statement.loc?.start.line === statement.loc?.end.line + ) } function isConstDeclaration(statement: TSESTree.Statement): boolean { - return statement.type === 'VariableDeclaration' && (statement as TSESTree.VariableDeclaration).kind === 'const'; + return ( + statement.type === 'VariableDeclaration' && + (statement as TSESTree.VariableDeclaration).kind === 'const' + ) } function hasBlankLineBetween(startLine: number, endLine: number): boolean { for (let line = startLine + 1; line < endLine; line++) { - const lineText = sourceCode.lines[line - 1]; + const lineText = sourceCode.lines[line - 1] + if (lineText.trim() === '') { - return true; + return true } } - return false; + + return false } function checkStatements(statements: TSESTree.Statement[]) { for (let i = 0; i < statements.length - 1; i++) { - const current = statements[i]; - const next = statements[i + 1]; + const current = statements[i] + const next = statements[i + 1] - const currentIsHook = isHookStatement(current); - const nextIsHook = isHookStatement(next); + const currentIsHook = isSingleLineHookStatement(current) + const nextIsHook = isSingleLineHookStatement(next) - const currentIsConst = isConstDeclaration(current); - const nextIsConst = isConstDeclaration(next); + const currentIsConst = isConstDeclaration(current) + const nextIsConst = isConstDeclaration(next) - const currentIsExpr = current.type === 'ExpressionStatement'; - const nextIsExpr = next.type === 'ExpressionStatement'; + const currentIsExpr = current.type === 'ExpressionStatement' + const nextIsExpr = next.type === 'ExpressionStatement' - const currentEndLine = current.loc?.end.line; - const nextStartLine = next.loc?.start.line; - if (currentEndLine === undefined || nextStartLine === undefined) continue; + const currentEndLine = current.loc?.end.line + const nextStartLine = next.loc?.start.line + + if (currentEndLine === undefined || nextStartLine === undefined) + continue if (currentIsHook && nextIsHook) { if (hasBlankLineBetween(currentEndLine, nextStartLine)) { context.report({ - node: next as any, + node: next, messageId: 'noBlankLineBetweenHooks', fix(fixer) { - const rangeStart = current.range?.[1]; - const rangeEnd = next.range?.[0]; - if (rangeStart === undefined || rangeEnd === undefined) return null; - const textBetween = sourceCode.text.slice(rangeStart, rangeEnd); - const fixedText = textBetween.replace(/\r?\n\s*\r?\n/g, '\n'); - return fixer.replaceTextRange([rangeStart, rangeEnd], fixedText); + const rangeStart = current.range?.[1] + const rangeEnd = next.range?.[0] + + if (rangeStart === undefined || rangeEnd === undefined) + return null + + const textBetween = sourceCode.text.slice(rangeStart, rangeEnd) + const fixedText = textBetween.replace(/\r?\n\s*\r?\n/g, '\n') + + return fixer.replaceTextRange([rangeStart, rangeEnd], fixedText) } - }); + }) } } else if (currentIsHook && (nextIsConst || nextIsExpr)) { if (!hasBlankLineBetween(currentEndLine, nextStartLine)) { context.report({ - node: next as any, + node: next, messageId: 'blankLineRequiredAfterHook', fix(fixer) { - return fixer.insertTextBefore(next as any, '\n'); + return fixer.insertTextBefore(next, '\n') } - }); + }) } } else if ((currentIsConst || currentIsExpr) && nextIsHook) { if (!hasBlankLineBetween(currentEndLine, nextStartLine)) { context.report({ - node: next as any, + node: next, messageId: 'blankLineRequiredBeforeHook', fix(fixer) { - return fixer.insertTextBefore(next as any, '\n'); + return fixer.insertTextBefore(next, '\n') } - }); - } - } else if (currentIsConst && (nextIsConst || nextIsExpr)) { - if (!hasBlankLineBetween(currentEndLine, nextStartLine)) { - context.report({ - node: next as any, - messageId: 'blankLineRequiredBetweenConsts', - fix(fixer) { - return fixer.insertTextBefore(next as any, '\n'); - } - }); - } - } else if (currentIsExpr && nextIsConst) { - if (!hasBlankLineBetween(currentEndLine, nextStartLine)) { - context.report({ - node: next as any, - messageId: 'blankLineRequiredBetweenConsts', - fix(fixer) { - return fixer.insertTextBefore(next as any, '\n'); - } - }); + }) } } } @@ -135,13 +145,13 @@ const rule: Rule.RuleModule = { return { BlockStatement(node: any) { - checkStatements(node.body); + checkStatements(node.body) }, Program(node: any) { - checkStatements(node.body); + checkStatements(node.body) } - }; + } } } -export default rule; +export default rule diff --git a/packages/api/src/providers/APIOnlineStatusProvider.tsx b/packages/api/src/providers/APIOnlineStatusProvider.tsx index 5d4398483..748ef5523 100644 --- a/packages/api/src/providers/APIOnlineStatusProvider.tsx +++ b/packages/api/src/providers/APIOnlineStatusProvider.tsx @@ -58,7 +58,8 @@ export function APIOnlineStatusProvider({ }) { const apiEndpoint = useAPIEndpoint() const [isOnline, setIsOnline] = useState('loading') - const [environment, setEnvironment] = useState< + +const [environment, setEnvironment] = useState< 'production' | 'development' | null >(null) const handleRetry = useCallback(() => { diff --git a/packages/api/src/providers/AuthProvider.tsx b/packages/api/src/providers/AuthProvider.tsx index ea0015db9..20f2eeb4c 100644 --- a/packages/api/src/providers/AuthProvider.tsx +++ b/packages/api/src/providers/AuthProvider.tsx @@ -68,7 +68,8 @@ export function AuthProvider({ const [userData, setUserData] = useState(null) const [authLoading, setAuthLoading] = useState(true) const tid = useRef('') - const setAuth = useCallback( + +const setAuth = useCallback( (value: boolean) => { _setAuth(value) }, diff --git a/packages/api/src/providers/EncryptionProvider.tsx b/packages/api/src/providers/EncryptionProvider.tsx index 700ae8ad7..91f4f80bb 100644 --- a/packages/api/src/providers/EncryptionProvider.tsx +++ b/packages/api/src/providers/EncryptionProvider.tsx @@ -25,7 +25,8 @@ export function EncryptionProvider({ }: EncryptionProviderProps) { const [ready, setReady] = useState(hasServerPublicKey()) const [error, setError] = useState(null) - useEffect(() => { + +useEffect(() => { if (ready) return initializeEncryption(apiHost) diff --git a/packages/api/src/providers/SocketProvider.tsx b/packages/api/src/providers/SocketProvider.tsx index 8b7d395a5..777fa163a 100644 --- a/packages/api/src/providers/SocketProvider.tsx +++ b/packages/api/src/providers/SocketProvider.tsx @@ -21,7 +21,8 @@ export interface SocketEvent< export function SocketProvider({ children }: { children: React.ReactNode }) { const apiHost = useAPIEndpoint() const [socket, setSocket] = useState(null) - useEffect(() => { + +useEffect(() => { const newSocket = io(apiHost, { auth: { token: localStorage.getItem('session') diff --git a/packages/api/src/utils/usePromiseLoading.ts b/packages/api/src/utils/usePromiseLoading.ts index b62af46ce..7bd21aae6 100644 --- a/packages/api/src/utils/usePromiseLoading.ts +++ b/packages/api/src/utils/usePromiseLoading.ts @@ -6,7 +6,8 @@ export function usePromiseLoading( onError?: (error: unknown) => void ): [boolean, (...args: T) => Promise] { const [isLoading, setIsLoading] = useState(false) - const onClick = useCallback( + +const onClick = useCallback( async (...args: T) => { setIsLoading(true) diff --git a/packages/federation/src/providers/FederationProvider.tsx b/packages/federation/src/providers/FederationProvider.tsx index f57e6a225..4b35ce9a0 100644 --- a/packages/federation/src/providers/FederationProvider.tsx +++ b/packages/federation/src/providers/FederationProvider.tsx @@ -50,16 +50,19 @@ export function useFederation(): FederationContextValue { function FederationProvider({ children }: { children: React.ReactNode }) { const [modules, setModules] = useState([]) - const [globalProviders, setGlobalProviders] = useState< + +const [globalProviders, setGlobalProviders] = useState< React.FC<{ children: React.ReactNode }>[] >([]) const [categoryTranslations, setCategoryTranslations] = useState< Record> >({}) - const [loading, setLoading] = useState(true) + +const [loading, setLoading] = useState(true) const [error, setError] = useState(null) const refetch = useRef<() => Promise>(async () => {}) - const value = useMemo( + +const value = useMemo( () => ({ modules, setModules, diff --git a/packages/localization/src/providers/I18nInitProvider.tsx b/packages/localization/src/providers/I18nInitProvider.tsx index 62f144b19..b6328d6a8 100644 --- a/packages/localization/src/providers/I18nInitProvider.tsx +++ b/packages/localization/src/providers/I18nInitProvider.tsx @@ -12,7 +12,8 @@ export function I18nInitProvider({ errorFallback: React.ReactNode }) { const [initialized, setInitialized] = useState(false) - useEffect(() => { + +useEffect(() => { init() .then(() => { setInitialized(true) diff --git a/packages/ui/src/components/auth/WithMasterPassword/components/CreatePasswordScreen.tsx b/packages/ui/src/components/auth/WithMasterPassword/components/CreatePasswordScreen.tsx index 54bd59c0a..1621c84b1 100644 --- a/packages/ui/src/components/auth/WithMasterPassword/components/CreatePasswordScreen.tsx +++ b/packages/ui/src/components/auth/WithMasterPassword/components/CreatePasswordScreen.tsx @@ -21,7 +21,8 @@ export function CreatePasswordScreen({ const { t } = useTranslation('common.vault') const [newPassword, setNewPassword] = useState('') const [confirmPassword, setConfirmPassword] = useState('') - const createPasswordMutation = useMutation( + +const createPasswordMutation = useMutation( controller.mutationOptions({ onSuccess: () => { window.location.reload() diff --git a/packages/ui/src/components/auth/WithMasterPassword/components/LockedScreen.tsx b/packages/ui/src/components/auth/WithMasterPassword/components/LockedScreen.tsx index 2a3bfd168..81b927cd6 100644 --- a/packages/ui/src/components/auth/WithMasterPassword/components/LockedScreen.tsx +++ b/packages/ui/src/components/auth/WithMasterPassword/components/LockedScreen.tsx @@ -19,7 +19,8 @@ export function LockedScreen({ }) { const [masterPassWordInputContent, setMasterPassWordInputContent] = useState('') - const { t } = useTranslation('common.vault') + +const { t } = useTranslation('common.vault') async function handleSubmit(): Promise { if (masterPassWordInputContent.trim() === '') { diff --git a/packages/ui/src/components/data-display/ViewModeSelector/ViewModeSelector.stories.tsx b/packages/ui/src/components/data-display/ViewModeSelector/ViewModeSelector.stories.tsx index e12be2a44..b857824b3 100644 --- a/packages/ui/src/components/data-display/ViewModeSelector/ViewModeSelector.stories.tsx +++ b/packages/ui/src/components/data-display/ViewModeSelector/ViewModeSelector.stories.tsx @@ -121,7 +121,8 @@ export const BesideSearchBar: Story = { const [viewMode, setViewMode] = useState<'list' | 'grid' | 'gallery'>( 'list' ) - const [searchValue, setSearchValue] = useState('') + +const [searchValue, setSearchValue] = useState('') return ( diff --git a/packages/ui/src/components/data-display/VirtualGrid/index.tsx b/packages/ui/src/components/data-display/VirtualGrid/index.tsx index 9e3b44fa1..9d9042efa 100644 --- a/packages/ui/src/components/data-display/VirtualGrid/index.tsx +++ b/packages/ui/src/components/data-display/VirtualGrid/index.tsx @@ -34,7 +34,8 @@ export function VirtualGrid({ defaultRowHeight = 320 }: VirtualGridProps) { const listRef = useRef(null) - const cache = useMemo( + +const cache = useMemo( () => new CellMeasurerCache({ defaultHeight: defaultRowHeight, diff --git a/packages/ui/src/components/form/components/fields/CheckboxField.tsx b/packages/ui/src/components/form/components/fields/CheckboxField.tsx index e0f9371ba..1a1ce3d28 100644 --- a/packages/ui/src/components/form/components/fields/CheckboxField.tsx +++ b/packages/ui/src/components/form/components/fields/CheckboxField.tsx @@ -33,7 +33,8 @@ export function CheckboxField({ control, name }) - const contextNamespace = useNamespace() + +const contextNamespace = useNamespace() const activeNamespace = namespace ?? contextNamespace diff --git a/packages/ui/src/components/form/components/fields/ColorField.tsx b/packages/ui/src/components/form/components/fields/ColorField.tsx index 4134a38a2..d7ddecd07 100644 --- a/packages/ui/src/components/form/components/fields/ColorField.tsx +++ b/packages/ui/src/components/form/components/fields/ColorField.tsx @@ -24,7 +24,8 @@ export function ColorField({ control, name }) - const contextNamespace = useNamespace() + +const contextNamespace = useNamespace() const activeNamespace = namespace ?? contextNamespace diff --git a/packages/ui/src/components/form/components/fields/CurrencyField.tsx b/packages/ui/src/components/form/components/fields/CurrencyField.tsx index d18ad3bc0..63d9b890e 100644 --- a/packages/ui/src/components/form/components/fields/CurrencyField.tsx +++ b/packages/ui/src/components/form/components/fields/CurrencyField.tsx @@ -24,7 +24,8 @@ export function CurrencyField({ control, name }) - const contextNamespace = useNamespace() + +const contextNamespace = useNamespace() const activeNamespace = namespace ?? contextNamespace diff --git a/packages/ui/src/components/form/components/fields/DateField.tsx b/packages/ui/src/components/form/components/fields/DateField.tsx index fcbcfe6eb..c9b03757a 100644 --- a/packages/ui/src/components/form/components/fields/DateField.tsx +++ b/packages/ui/src/components/form/components/fields/DateField.tsx @@ -25,7 +25,8 @@ export function DateField({ control, name }) - const contextNamespace = useNamespace() + +const contextNamespace = useNamespace() const activeNamespace = namespace ?? contextNamespace diff --git a/packages/ui/src/components/form/components/fields/FileField.tsx b/packages/ui/src/components/form/components/fields/FileField.tsx index d93d894a2..41f1d1b23 100644 --- a/packages/ui/src/components/form/components/fields/FileField.tsx +++ b/packages/ui/src/components/form/components/fields/FileField.tsx @@ -39,7 +39,8 @@ export function FileField({ control, name }) - const contextNamespace = useNamespace() + +const contextNamespace = useNamespace() const activeNamespace = namespace ?? contextNamespace diff --git a/packages/ui/src/components/form/components/fields/IconField.tsx b/packages/ui/src/components/form/components/fields/IconField.tsx index 126b924d4..eace72815 100644 --- a/packages/ui/src/components/form/components/fields/IconField.tsx +++ b/packages/ui/src/components/form/components/fields/IconField.tsx @@ -24,7 +24,8 @@ export function IconField({ control, name }) - const contextNamespace = useNamespace() + +const contextNamespace = useNamespace() const activeNamespace = namespace ?? contextNamespace diff --git a/packages/ui/src/components/form/components/fields/ListboxField.tsx b/packages/ui/src/components/form/components/fields/ListboxField.tsx index 8930dafb1..1d862edea 100644 --- a/packages/ui/src/components/form/components/fields/ListboxField.tsx +++ b/packages/ui/src/components/form/components/fields/ListboxField.tsx @@ -137,7 +137,8 @@ export function ListboxField({ control, name }) - const contextNamespace = useNamespace() + +const contextNamespace = useNamespace() const activeNamespace = namespace ?? contextNamespace diff --git a/packages/ui/src/components/form/components/fields/LocationField.tsx b/packages/ui/src/components/form/components/fields/LocationField.tsx index 9bd33fc38..182217714 100644 --- a/packages/ui/src/components/form/components/fields/LocationField.tsx +++ b/packages/ui/src/components/form/components/fields/LocationField.tsx @@ -33,7 +33,8 @@ export function LocationField({ control, name }) - const contextNamespace = useNamespace() + +const contextNamespace = useNamespace() const activeNamespace = namespace ?? contextNamespace diff --git a/packages/ui/src/components/form/components/fields/NumberField.tsx b/packages/ui/src/components/form/components/fields/NumberField.tsx index dcc2c7190..77999c909 100644 --- a/packages/ui/src/components/form/components/fields/NumberField.tsx +++ b/packages/ui/src/components/form/components/fields/NumberField.tsx @@ -24,7 +24,8 @@ export function NumberField({ control, name }) - const contextNamespace = useNamespace() + +const contextNamespace = useNamespace() const activeNamespace = namespace ?? contextNamespace diff --git a/packages/ui/src/components/form/components/fields/SliderField.tsx b/packages/ui/src/components/form/components/fields/SliderField.tsx index d29602d1e..769e09155 100644 --- a/packages/ui/src/components/form/components/fields/SliderField.tsx +++ b/packages/ui/src/components/form/components/fields/SliderField.tsx @@ -25,7 +25,8 @@ export function SliderField({ control, name }) - const contextNamespace = useNamespace() + +const contextNamespace = useNamespace() const activeNamespace = namespace ?? contextNamespace diff --git a/packages/ui/src/components/form/components/fields/TextAreaField.tsx b/packages/ui/src/components/form/components/fields/TextAreaField.tsx index 3881b6e06..915197a6e 100644 --- a/packages/ui/src/components/form/components/fields/TextAreaField.tsx +++ b/packages/ui/src/components/form/components/fields/TextAreaField.tsx @@ -24,7 +24,8 @@ export function TextAreaField({ control, name }) - const contextNamespace = useNamespace() + +const contextNamespace = useNamespace() const activeNamespace = namespace ?? contextNamespace diff --git a/packages/ui/src/components/form/components/fields/TextField.tsx b/packages/ui/src/components/form/components/fields/TextField.tsx index bd30289b3..76c62fe1e 100644 --- a/packages/ui/src/components/form/components/fields/TextField.tsx +++ b/packages/ui/src/components/form/components/fields/TextField.tsx @@ -29,11 +29,13 @@ export function TextField({ ...rest }: TextFieldProps) { const { open } = useModalStore() - const { field, fieldState } = useController({ + +const { field, fieldState } = useController({ control, name }) - const contextNamespace = useNamespace() + +const contextNamespace = useNamespace() const activeNamespace = namespace ?? contextNamespace diff --git a/packages/ui/src/components/inputs/Button/index.tsx b/packages/ui/src/components/inputs/Button/index.tsx index 622048d6f..e8215ed98 100644 --- a/packages/ui/src/components/inputs/Button/index.tsx +++ b/packages/ui/src/components/inputs/Button/index.tsx @@ -82,7 +82,8 @@ export function Button({ style, props: props as any }) - const { t } = useTranslation(namespace) + +const { t } = useTranslation(namespace) return ( diff --git a/packages/ui/src/components/inputs/ColorInput/ColorPickerModal/components/PaletteButtons.tsx b/packages/ui/src/components/inputs/ColorInput/ColorPickerModal/components/PaletteButtons.tsx index 3d5b1ec8e..e3f7a165c 100644 --- a/packages/ui/src/components/inputs/ColorInput/ColorPickerModal/components/PaletteButtons.tsx +++ b/packages/ui/src/components/inputs/ColorInput/ColorPickerModal/components/PaletteButtons.tsx @@ -12,7 +12,8 @@ import { TailwindCSSColorsModal } from './modals/TailwindCSSColorsModal' export function PaletteButtons() { const { open } = useModalStore() const { innerColor, setInnerColor } = useColorPickerModalStore() - const handleColorPaletteModalOpen = useCallback( + +const handleColorPaletteModalOpen = useCallback( (type: 'morandi' | 'tailwind' | 'flatUiColors') => () => open( { diff --git a/packages/ui/src/components/inputs/ColorInput/ColorPickerModal/components/modals/TailwindCSSColorsModal/components/ColorItem.tsx b/packages/ui/src/components/inputs/ColorInput/ColorPickerModal/components/modals/TailwindCSSColorsModal/components/ColorItem.tsx index 1a4349234..ac520047d 100644 --- a/packages/ui/src/components/inputs/ColorInput/ColorPickerModal/components/modals/TailwindCSSColorsModal/components/ColorItem.tsx +++ b/packages/ui/src/components/inputs/ColorInput/ColorPickerModal/components/modals/TailwindCSSColorsModal/components/ColorItem.tsx @@ -16,7 +16,8 @@ function _ColorItem({ onSelect: (color: string) => void }) { const { getMostReadableColor } = usePersonalization() - const colorHex = useMemo( + +const colorHex = useMemo( () => formatHex(converter('rgb')(parse(value))) || '', [value] ) diff --git a/packages/ui/src/components/inputs/ComboboxInput/index.tsx b/packages/ui/src/components/inputs/ComboboxInput/index.tsx index cf8c3db25..c72f23d13 100644 --- a/packages/ui/src/components/inputs/ComboboxInput/index.tsx +++ b/packages/ui/src/components/inputs/ComboboxInput/index.tsx @@ -65,7 +65,8 @@ export function ComboboxInput({ errorMsg }: ComboboxInputProps & InputVariants) { const inputLabel = useInputLabel({ namespace, label: label ?? '' }) - const isActive = useMemo(() => { + +const isActive = useMemo(() => { if (typeof customActive === 'boolean') { return customActive } diff --git a/packages/ui/src/components/inputs/CurrencyInput/index.tsx b/packages/ui/src/components/inputs/CurrencyInput/index.tsx index 3db3db9c8..70019286a 100644 --- a/packages/ui/src/components/inputs/CurrencyInput/index.tsx +++ b/packages/ui/src/components/inputs/CurrencyInput/index.tsx @@ -54,12 +54,15 @@ export function CurrencyInput({ errorMsg }: CurrencyInputProps) { const inputLabel = useInputLabel({ namespace, label: label ?? '' }) - const [innerValue, setInnerValue] = useState( + +const [innerValue, setInnerValue] = useState( value.toString() === '0' ? '' : value.toString() ) - const [focused, setFocused] = useState(false) + +const [focused, setFocused] = useState(false) const inputRef = useRef(null) - useEffect(() => { + +useEffect(() => { setInnerValue(value.toString() === '0' ? '' : value.toString()) }, [value]) diff --git a/packages/ui/src/components/inputs/FileInput/FilePickerModal/components/AIImageGenerator.tsx b/packages/ui/src/components/inputs/FileInput/FilePickerModal/components/AIImageGenerator.tsx index 35d99c2b8..cbd25adab 100644 --- a/packages/ui/src/components/inputs/FileInput/FilePickerModal/components/AIImageGenerator.tsx +++ b/packages/ui/src/components/inputs/FileInput/FilePickerModal/components/AIImageGenerator.tsx @@ -22,7 +22,8 @@ export function AIImageGenerator({ }) { const apiHost = useAPIEndpoint() const [prompt, setPrompt] = useState('') - const [loading, onSubmit] = usePromiseLoading(async () => { + +const [loading, onSubmit] = usePromiseLoading(async () => { if (prompt === '') { toast.error('Please enter a prompt') diff --git a/packages/ui/src/components/inputs/FileInput/FilePickerModal/components/LocalUpload/components/DnDContainer.tsx b/packages/ui/src/components/inputs/FileInput/FilePickerModal/components/LocalUpload/components/DnDContainer.tsx index d0aef8aa7..ad120ffe6 100644 --- a/packages/ui/src/components/inputs/FileInput/FilePickerModal/components/LocalUpload/components/DnDContainer.tsx +++ b/packages/ui/src/components/inputs/FileInput/FilePickerModal/components/LocalUpload/components/DnDContainer.tsx @@ -22,7 +22,8 @@ export function DnDContainer({ acceptedMimeTypes: Record }) { const { t } = useTranslation('common.misc') - const acceptedMimeTypesFlattened = useMemo(() => { + +const acceptedMimeTypesFlattened = useMemo(() => { return Object.entries(acceptedMimeTypes) .flatMap(([type, exts]) => exts.map(ext => `${type}/${ext}`)) .join(', ') diff --git a/packages/ui/src/components/inputs/FileInput/FilePickerModal/components/Pixabay/index.tsx b/packages/ui/src/components/inputs/FileInput/FilePickerModal/components/Pixabay/index.tsx index d0bb4cc6e..283263a78 100644 --- a/packages/ui/src/components/inputs/FileInput/FilePickerModal/components/Pixabay/index.tsx +++ b/packages/ui/src/components/inputs/FileInput/FilePickerModal/components/Pixabay/index.tsx @@ -57,13 +57,16 @@ export function Pixabay({ }) { const apiHost = useAPIEndpoint() const [query, setQuery] = useState('') - const [results, setResults] = useState<'error' | IPixabaySearchResult | null>( + +const [results, setResults] = useState<'error' | IPixabaySearchResult | null>( null ) - const [page, setPage] = useState(1) + +const [page, setPage] = useState(1) const [filters, updateFilters] = useReducer(reducer, initialFilter) const [isSearchFilterModalOpen, setIsSearchFilterModalOpen] = useState(false) - const [loading, onSearch] = usePromiseLoading(async (page: number) => { + +const [loading, onSearch] = usePromiseLoading(async (page: number) => { if (loading) return if (query === '') { diff --git a/packages/ui/src/components/inputs/FileInput/FilePickerModal/index.tsx b/packages/ui/src/components/inputs/FileInput/FilePickerModal/index.tsx index 66feaebfb..0a4c718ac 100644 --- a/packages/ui/src/components/inputs/FileInput/FilePickerModal/index.tsx +++ b/packages/ui/src/components/inputs/FileInput/FilePickerModal/index.tsx @@ -28,7 +28,8 @@ export function FilePickerModal({ const [file, setFile] = useState(null) const [preview, setPreview] = useState(null) const [mode, setMode] = useState<'local' | 'url' | 'pixabay' | 'ai'>('local') - const [loading, onClick] = usePromiseLoading(() => + +const [loading, onClick] = usePromiseLoading(() => onSelect(file as string | File, preview) .catch(console.error) .finally(() => { diff --git a/packages/ui/src/components/inputs/FileInput/index.tsx b/packages/ui/src/components/inputs/FileInput/index.tsx index ece44eb31..351acb22d 100644 --- a/packages/ui/src/components/inputs/FileInput/index.tsx +++ b/packages/ui/src/components/inputs/FileInput/index.tsx @@ -97,7 +97,8 @@ export function FileInput({ }) { const { open } = useModalStore() const inputLabel = useInputLabel({ namespace, label }) - const handleFilePickerOpen = useCallback( + +const handleFilePickerOpen = useCallback( function () { open(FilePickerModal, { sources, diff --git a/packages/ui/src/components/inputs/IconInput/IconPickerModal/components/ChipSelector.tsx b/packages/ui/src/components/inputs/IconInput/IconPickerModal/components/ChipSelector.tsx index 1da27ec79..3f4c92d5e 100644 --- a/packages/ui/src/components/inputs/IconInput/IconPickerModal/components/ChipSelector.tsx +++ b/packages/ui/src/components/inputs/IconInput/IconPickerModal/components/ChipSelector.tsx @@ -15,7 +15,8 @@ export function ChipSelector({ }) { const [expanded, setExpanded] = useState(false) const { derivedThemeColor } = usePersonalization() - const sortedOptions = useMemo( + +const sortedOptions = useMemo( () => [...options].sort((a, b) => { if (a[0] === b[0]) return a.length - b.length diff --git a/packages/ui/src/components/inputs/IconInput/IconPickerModal/pages/IconSet.tsx b/packages/ui/src/components/inputs/IconInput/IconPickerModal/pages/IconSet.tsx index b68563436..cb668b00a 100644 --- a/packages/ui/src/components/inputs/IconInput/IconPickerModal/pages/IconSet.tsx +++ b/packages/ui/src/components/inputs/IconInput/IconPickerModal/pages/IconSet.tsx @@ -40,7 +40,8 @@ export function IconSet({ const [searchTerm, setSearchTerm] = useState('') const [currentTag, setCurrentTag] = useState(null) const [iconData, setIconData] = useState(null) - const filteredIconList = useMemo(() => { + +const filteredIconList = useMemo(() => { if (!iconData) return [] const allIcons = [ diff --git a/packages/ui/src/components/inputs/IconInput/IconPickerModal/pages/IconSetList/index.tsx b/packages/ui/src/components/inputs/IconInput/IconPickerModal/pages/IconSetList/index.tsx index 63d3d1baa..4857bd9c9 100644 --- a/packages/ui/src/components/inputs/IconInput/IconPickerModal/pages/IconSetList/index.tsx +++ b/packages/ui/src/components/inputs/IconInput/IconPickerModal/pages/IconSetList/index.tsx @@ -38,7 +38,8 @@ export function IconSetList({ const [searchQuery, setSearchQuery] = useState('') const [selectedCategory, setSelectedCategory] = useState(null) const [iconFilterTerm, setIconFilterTerm] = useState('') - const filteredCollections = useMemo(() => { + +const filteredCollections = useMemo(() => { const normalizedFilter = iconFilterTerm.trim().toLowerCase() return Object.entries(COLLECTIONS) diff --git a/packages/ui/src/components/inputs/IconInput/IconPickerModal/pages/SearchResult.tsx b/packages/ui/src/components/inputs/IconInput/IconPickerModal/pages/SearchResult.tsx index fb356f30e..91641a698 100644 --- a/packages/ui/src/components/inputs/IconInput/IconPickerModal/pages/SearchResult.tsx +++ b/packages/ui/src/components/inputs/IconInput/IconPickerModal/pages/SearchResult.tsx @@ -81,7 +81,8 @@ export function SearchResult({ const [currentIconSet, setCurrentIconSet] = useState(null) const [iconData, setIconData] = useState(null) const [searchQuery, setSearchQuery] = useState(searchTerm ?? '') - const filteredIconList = useMemo(() => { + +const filteredIconList = useMemo(() => { if (iconData === null) return [] if (currentIconSet !== null) { diff --git a/packages/ui/src/components/inputs/IconInput/components/IconPreview.tsx b/packages/ui/src/components/inputs/IconInput/components/IconPreview.tsx index c5ca002f4..5cd40ba4c 100644 --- a/packages/ui/src/components/inputs/IconInput/components/IconPreview.tsx +++ b/packages/ui/src/components/inputs/IconInput/components/IconPreview.tsx @@ -14,7 +14,8 @@ export function IconPreview({ variant: InputVariant }) { const [iconExists, setIconExists] = useState(false) - useEffect(() => { + +useEffect(() => { let active = true if (!value) { diff --git a/packages/ui/src/components/inputs/IconInput/index.tsx b/packages/ui/src/components/inputs/IconInput/index.tsx index b919b76d4..3bbc8a7c3 100644 --- a/packages/ui/src/components/inputs/IconInput/index.tsx +++ b/packages/ui/src/components/inputs/IconInput/index.tsx @@ -40,7 +40,8 @@ export function IconInput({ const { open } = useModalStore() const inputLabel = useInputLabel({ namespace, label: label ?? '' }) const ref = useRef(null) - const handleIconSelectorOpen = useCallback(() => { + +const handleIconSelectorOpen = useCallback(() => { open(IconPickerModal, { setSelectedIcon: onChange }) }, [open, onChange]) diff --git a/packages/ui/src/components/inputs/ListboxInput/hooks/useListboxBlurOnClose.ts b/packages/ui/src/components/inputs/ListboxInput/hooks/useListboxBlurOnClose.ts index e2bcaa11a..23681266e 100644 --- a/packages/ui/src/components/inputs/ListboxInput/hooks/useListboxBlurOnClose.ts +++ b/packages/ui/src/components/inputs/ListboxInput/hooks/useListboxBlurOnClose.ts @@ -13,7 +13,8 @@ import { useEffect, useRef } from 'react' */ export function useListboxBlurOnClose() { const containerRef = useRef(null) - useEffect(() => { + +useEffect(() => { const el = containerRef.current if (!el) return diff --git a/packages/ui/src/components/inputs/ListboxInput/index.tsx b/packages/ui/src/components/inputs/ListboxInput/index.tsx index f1f97cffa..1feee2404 100644 --- a/packages/ui/src/components/inputs/ListboxInput/index.tsx +++ b/packages/ui/src/components/inputs/ListboxInput/index.tsx @@ -62,7 +62,8 @@ export function ListboxInput({ errorMsg }: ListboxInputPropsWithVariants) { const inputLabel = useInputLabel({ namespace, label: label ?? '' }) - const isActive = useMemo(() => { + +const isActive = useMemo(() => { if (typeof customActive === 'boolean') { return customActive } diff --git a/packages/ui/src/components/inputs/LocationInput/index.tsx b/packages/ui/src/components/inputs/LocationInput/index.tsx index 003633d5d..ef763a5c6 100644 --- a/packages/ui/src/components/inputs/LocationInput/index.tsx +++ b/packages/ui/src/components/inputs/LocationInput/index.tsx @@ -48,7 +48,8 @@ export function LocationInput({ const apiHost = useAPIEndpoint() const [query, setQuery] = useState('') const debouncedQuery = useDebounce(query, 500) - const enabledQuery = useQuery( + +const enabledQuery = useQuery( forgeAPI .checkAPIKeys({ keys: 'gcloud' diff --git a/packages/ui/src/components/inputs/NumberInput/index.tsx b/packages/ui/src/components/inputs/NumberInput/index.tsx index 4aa451032..cfbbe06e2 100644 --- a/packages/ui/src/components/inputs/NumberInput/index.tsx +++ b/packages/ui/src/components/inputs/NumberInput/index.tsx @@ -40,7 +40,8 @@ function NumberTextInputAdapter(props: any) { const { onChange, getInputRef, ...rest } = props const localRef = useRef(null) - useEffect(function () { + +useEffect(function () { if (getInputRef) { if (typeof getInputRef === 'function') { getInputRef(localRef.current) diff --git a/packages/ui/src/components/inputs/RRuleInput/index.tsx b/packages/ui/src/components/inputs/RRuleInput/index.tsx index e6a39605b..a9d54f317 100644 --- a/packages/ui/src/components/inputs/RRuleInput/index.tsx +++ b/packages/ui/src/components/inputs/RRuleInput/index.tsx @@ -108,7 +108,8 @@ export function RRuleInput({ }) { const { t } = useTranslation(['apps.calendar', 'common.misc']) const valueParsed = useMemo(() => fromRRULEString(value), [value]) - const [start, setStart] = useState( + +const [start, setStart] = useState( valueParsed ? valueParsed.start : null ) const [duration, setDuration] = useState<{ diff --git a/packages/ui/src/components/inputs/SearchInput/SearchInput.stories.tsx b/packages/ui/src/components/inputs/SearchInput/SearchInput.stories.tsx index 12359111e..e06f69006 100644 --- a/packages/ui/src/components/inputs/SearchInput/SearchInput.stories.tsx +++ b/packages/ui/src/components/inputs/SearchInput/SearchInput.stories.tsx @@ -260,7 +260,8 @@ function SearchWithSuggestions() { render: args => { const [value, onChange] = useState('') // Replace with actual API call for search suggestions - const productQuery = useQuery({ + +const productQuery = useQuery({ enabled: value.length > 0, queryFn: async () => { const res = await fetch( diff --git a/packages/ui/src/components/inputs/SearchInput/index.tsx b/packages/ui/src/components/inputs/SearchInput/index.tsx index 75171d53e..fb15e319e 100644 --- a/packages/ui/src/components/inputs/SearchInput/index.tsx +++ b/packages/ui/src/components/inputs/SearchInput/index.tsx @@ -75,13 +75,15 @@ export function SearchInput({ ...(namespace ? [namespace] : []) ]) // Internal state for immediate input feedback when debouncing - const [internalValue, setInternalValue] = useState(value) + +const [internalValue, setInternalValue] = useState(value) const [isFocused, setIsFocused] = useState(false) const debouncedValue = useDebounce(internalValue, debounceMs ?? 0) // Track if we have a pending debounce to avoid syncing back from parent const isPendingDebounce = useRef(false) // Sync internal value when external value changes (only if not pending our own debounce) - useEffect(() => { + +useEffect(() => { if (!isPendingDebounce.current) { setInternalValue(value) } @@ -131,7 +133,8 @@ export function SearchInput({ const childrenRef = useRef(null) const { height: childrenHeight } = useDivSize(childrenRef) const [dropdownStyle, setDropdownStyle] = useState({}) - useEffect(() => { + +useEffect(() => { const updatePosition = () => { if (!containerRef.current || !shouldShowChildren) return diff --git a/packages/ui/src/components/inputs/TextAreaInput/index.tsx b/packages/ui/src/components/inputs/TextAreaInput/index.tsx index 33648df82..6ea6699a6 100644 --- a/packages/ui/src/components/inputs/TextAreaInput/index.tsx +++ b/packages/ui/src/components/inputs/TextAreaInput/index.tsx @@ -52,7 +52,8 @@ export function TextAreaInput({ }: TextAreaInputProps) { const inputLabel = useInputLabel({ namespace, label: label ?? '' }) const ref = useRef(null) - useEffect(() => { + +useEffect(() => { if (!ref.current) return ref.current.style.height = 'auto' diff --git a/packages/ui/src/components/inputs/TextInput/index.tsx b/packages/ui/src/components/inputs/TextInput/index.tsx index eed6c7dd5..3e9ee9618 100644 --- a/packages/ui/src/components/inputs/TextInput/index.tsx +++ b/packages/ui/src/components/inputs/TextInput/index.tsx @@ -67,7 +67,8 @@ export function _TextInput({ const inputRef = externalInputRef || localInputRef const inputLabel = useInputLabel({ namespace, label: label ?? '' }) - const [actionButtonLoading, handleClick] = usePromiseLoading( + +const [actionButtonLoading, handleClick] = usePromiseLoading( (actionButtonProps?.onClick as () => Promise) || (async (): Promise => {}) ) diff --git a/packages/ui/src/components/inputs/shared/contexts/InputFocusContext.tsx b/packages/ui/src/components/inputs/shared/contexts/InputFocusContext.tsx index 98f738fb0..dbe1b99a0 100644 --- a/packages/ui/src/components/inputs/shared/contexts/InputFocusContext.tsx +++ b/packages/ui/src/components/inputs/shared/contexts/InputFocusContext.tsx @@ -17,7 +17,8 @@ export function InputFocusProvider({ }) { const [isFocused, setIsFocused] = useState(false) const containerRef = useRef(null) - const handleFocus = useCallback(() => { + +const handleFocus = useCallback(() => { setIsFocused(true) }, []) const handleBlur = useCallback((e: React.FocusEvent) => { diff --git a/packages/ui/src/components/layout/ModuleHeader/index.tsx b/packages/ui/src/components/layout/ModuleHeader/index.tsx index db99cf7a4..8df24943b 100644 --- a/packages/ui/src/components/layout/ModuleHeader/index.tsx +++ b/packages/ui/src/components/layout/ModuleHeader/index.tsx @@ -48,7 +48,8 @@ export function ModuleHeader({ 'common.misc', namespace ?? '' ]) - const { toggleSidebar, sidebarExpanded } = useMainSidebarState() + +const { toggleSidebar, sidebarExpanded } = useMainSidebarState() return ( { + +useEffect(() => { return () => { if (!clearQueryOnUnmount) return diff --git a/packages/ui/src/components/navigation/sidebar/MainSidebarItem/index.tsx b/packages/ui/src/components/navigation/sidebar/MainSidebarItem/index.tsx index a9bfa39dc..08e135c74 100644 --- a/packages/ui/src/components/navigation/sidebar/MainSidebarItem/index.tsx +++ b/packages/ui/src/components/navigation/sidebar/MainSidebarItem/index.tsx @@ -51,7 +51,8 @@ export function MainSidebarItem({ }: MainSidebarItemProps) { const navigate = useNavigate() const [subsectionExpanded, setSubsectionExpanded] = useState(false) - const handleNavigation = useCallback(() => { + +const handleNavigation = useCallback(() => { setSubsectionExpanded(!subsectionExpanded) if (subsection?.length) { diff --git a/packages/ui/src/components/navigation/sidebar/SidebarItem/components/SidebarItemContent.tsx b/packages/ui/src/components/navigation/sidebar/SidebarItem/components/SidebarItemContent.tsx index 67422dfc1..ed4219fc9 100644 --- a/packages/ui/src/components/navigation/sidebar/SidebarItem/components/SidebarItemContent.tsx +++ b/packages/ui/src/components/navigation/sidebar/SidebarItem/components/SidebarItemContent.tsx @@ -37,7 +37,8 @@ export function SidebarItemContent({ const { t } = useTranslation( namespace === false ? [] : [namespace, 'common.sidebar'] ) - const [isMenuOpen, setIsMenuOpen] = useState(false) + +const [isMenuOpen, setIsMenuOpen] = useState(false) return ( <> diff --git a/packages/ui/src/components/navigation/sidebar/SidebarItem/components/SidebarSubsectionItemLink.tsx b/packages/ui/src/components/navigation/sidebar/SidebarItem/components/SidebarSubsectionItemLink.tsx index 132d0c40e..9a9befaf3 100644 --- a/packages/ui/src/components/navigation/sidebar/SidebarItem/components/SidebarSubsectionItemLink.tsx +++ b/packages/ui/src/components/navigation/sidebar/SidebarItem/components/SidebarSubsectionItemLink.tsx @@ -21,7 +21,8 @@ export function SidebarSubsectionItemLink({ const location = useLocation() const { sidebarExpanded, toggleSidebar } = useMainSidebarState() const { t } = useTranslation('common.sidebar') - const isActive = useMemo( + +const isActive = useMemo( () => location.pathname === path, [path, location.pathname] ) diff --git a/packages/ui/src/components/navigation/sidebar/SidebarItem/components/SidebarSubsectionItemWithOnClick.tsx b/packages/ui/src/components/navigation/sidebar/SidebarItem/components/SidebarSubsectionItemWithOnClick.tsx index a1cd38c9f..230bd6c54 100644 --- a/packages/ui/src/components/navigation/sidebar/SidebarItem/components/SidebarSubsectionItemWithOnClick.tsx +++ b/packages/ui/src/components/navigation/sidebar/SidebarItem/components/SidebarSubsectionItemWithOnClick.tsx @@ -24,7 +24,8 @@ export function SidebarSubsectionItemWithOnClick({ namespace?: string | false }) { const { setIsSidebarOpen } = useModuleSidebarState() - const { t } = useTranslation( + +const { t } = useTranslation( namespace ? [namespace, 'common.sidebar'] : namespace === false diff --git a/packages/ui/src/components/navigation/sidebar/SidebarItem/index.tsx b/packages/ui/src/components/navigation/sidebar/SidebarItem/index.tsx index 31e0cbbf0..422c37dcc 100644 --- a/packages/ui/src/components/navigation/sidebar/SidebarItem/index.tsx +++ b/packages/ui/src/components/navigation/sidebar/SidebarItem/index.tsx @@ -85,7 +85,8 @@ export function SidebarItem({ }: SidebarItemProps) { const { setIsSidebarOpen } = useModuleSidebarState() const [subsectionExpanded, setSubsectionExpanded] = useState(active ?? false) - const handleNavigation = useCallback(() => { + +const handleNavigation = useCallback(() => { if (onClick === 'expand' && subsection?.length) { setSubsectionExpanded(!subsectionExpanded) diff --git a/packages/ui/src/components/overlays/modals/ModalManager/index.tsx b/packages/ui/src/components/overlays/modals/ModalManager/index.tsx index bb9515d60..290309bc0 100644 --- a/packages/ui/src/components/overlays/modals/ModalManager/index.tsx +++ b/packages/ui/src/components/overlays/modals/ModalManager/index.tsx @@ -26,7 +26,8 @@ function StackModal({ index }: { index: number }) { const { isClosing } = item || {} const [localOpen, setLocalOpen] = useState(false) - useEffect(() => { + +useEffect(() => { const timer = setTimeout(() => { setLocalOpen(true) }, 10) diff --git a/packages/ui/src/providers/MainSidebarStateProvider.tsx b/packages/ui/src/providers/MainSidebarStateProvider.tsx index 991916d17..8ac9ecd2c 100644 --- a/packages/ui/src/providers/MainSidebarStateProvider.tsx +++ b/packages/ui/src/providers/MainSidebarStateProvider.tsx @@ -20,7 +20,8 @@ export function MainSidebarStateProvider({ children: React.ReactNode }) { const [sidebarExpanded, setSidebarExpanded] = useState(true) - const toggleSidebar = useCallback(() => { + +const toggleSidebar = useCallback(() => { setSidebarExpanded(prev => !prev) }, []) useEffect(() => { diff --git a/packages/ui/src/providers/PersonalizationProvider/hooks/useFontFamilyEffect.tsx b/packages/ui/src/providers/PersonalizationProvider/hooks/useFontFamilyEffect.tsx index 86c383c8a..2dd59877d 100644 --- a/packages/ui/src/providers/PersonalizationProvider/hooks/useFontFamilyEffect.tsx +++ b/packages/ui/src/providers/PersonalizationProvider/hooks/useFontFamilyEffect.tsx @@ -14,7 +14,8 @@ interface CustomFontData { function useFontFamily(fontFamily: string, fontScale: number, forgeAPI: any) { const apiEndpoint = useAPIEndpoint() const abortControllerRef = useRef(null) - useEffect(() => { + +useEffect(() => { const styleTagId = 'dynamic-font-style' // Get or create the style tag (don't remove existing one to avoid flicker) diff --git a/packages/ui/src/providers/PersonalizationProvider/index.tsx b/packages/ui/src/providers/PersonalizationProvider/index.tsx index aaf01e16e..c065471b7 100644 --- a/packages/ui/src/providers/PersonalizationProvider/index.tsx +++ b/packages/ui/src/providers/PersonalizationProvider/index.tsx @@ -81,15 +81,20 @@ export function PersonalizationProvider({ const [fontFamily, setFontFamily] = useState(defaultValue.fontFamily) const [fontScale, setFontScale] = useState(defaultValue.fontScale) - const [borderRadiusMultiplier, setBorderRadiusMultiplier] = useState( + +const [borderRadiusMultiplier, setBorderRadiusMultiplier] = useState( defaultValue.borderRadiusMultiplier ) - const [bordered, setBordered] = useState(defaultValue.bordered) - const [theme, setTheme] = useState<'light' | 'dark' | 'system'>( + +const [bordered, setBordered] = useState(defaultValue.bordered) + +const [theme, setTheme] = useState<'light' | 'dark' | 'system'>( defaultValue.theme ) - const [rawThemeColor, setRawThemeColor] = useState(defaultValue.rawThemeColor) - const [bgTemp, setBgTemp] = useState< + +const [rawThemeColor, setRawThemeColor] = useState(defaultValue.rawThemeColor) + +const [bgTemp, setBgTemp] = useState< | 'bg-slate' | 'bg-gray' | 'bg-neutral' @@ -101,9 +106,11 @@ export function PersonalizationProvider({ | 'bg-taupe' | string >(defaultValue.bgTemp) - const [bgImage, setBgImage] = useState(defaultValue.bgImage) + +const [bgImage, setBgImage] = useState(defaultValue.bgImage) const [language, setLanguage] = useState(defaultValue.language) - const [dashboardLayout, setDashboardLayout] = useState( + +const [dashboardLayout, setDashboardLayout] = useState( defaultValue.dashboardLayout ) const [backdropFilters, setBackdropFilters] = useState( @@ -145,18 +152,22 @@ export function PersonalizationProvider({ .toHexString(), [themeColor, bgTempPalette] ) - useFontFamily(fontFamily, fontScale, forgeAPI) + +useFontFamily(fontFamily, fontScale, forgeAPI) useThemeEffect(rootElement, derivedTheme, rawThemeColor, bgTemp) useBgTempEffect(rootElement, bgTemp, derivedTheme) - useRawThemeColorEffect(rootElement, rawThemeColor, derivedTheme, [ + +useRawThemeColorEffect(rootElement, rawThemeColor, derivedTheme, [ bgTempPalette[100], bgTempPalette[800] ]) - useLanguageEffect(language) + +useLanguageEffect(language) useMetaEffect(themeColor) useBorderRadiusEffect(borderRadiusMultiplier) useBorderedEffect(rootElement, bordered) - const value = useMemo( + +const value = useMemo( () => ({ rootElement, fontFamily, diff --git a/packages/ui/src/storybook/SBThemeProvider.tsx b/packages/ui/src/storybook/SBThemeProvider.tsx index ef48b8e38..9434ab012 100644 --- a/packages/ui/src/storybook/SBThemeProvider.tsx +++ b/packages/ui/src/storybook/SBThemeProvider.tsx @@ -33,7 +33,8 @@ export function SBThemeProvider({ } } }, [context]) - useSBTheme(derivedContext) + +useSBTheme(derivedContext) return (