From 72af9d52d1babbd8d3f40f1066292f0b2f10883a Mon Sep 17 00:00:00 2001 From: schroda <50052685+schroda@users.noreply.github.com> Date: Wed, 11 Mar 2026 00:11:29 +0100 Subject: [PATCH] Update lint rules --- .oxlintrc.jsonc | 121 +++++------------- package.json | 2 + src/UtilTypes.d.ts | 2 +- src/assets/SuwayomiLogo.tsx | 3 +- src/base/AppRoute.constants.ts | 8 +- src/base/Base.types.ts | 4 +- src/base/IsoLanguages.ts | 2 +- src/base/components/AppbarSearch.tsx | 4 +- src/base/components/AvatarSpinner.tsx | 6 +- src/base/components/CustomTooltip.tsx | 3 +- src/base/components/SpinnerImage.tsx | 10 +- src/base/components/buttons/ButtonSelect.tsx | 2 +- src/base/components/buttons/CustomButton.tsx | 3 +- .../components/buttons/CustomButtonIcon.tsx | 3 +- src/base/components/buttons/ResetButton.tsx | 6 +- .../buttons/ValueRotationButton.tsx | 5 +- .../downloads/DownloadStateIndicator.tsx | 4 +- src/base/components/feedback/EmptyView.tsx | 2 +- .../feedback/EmptyViewAbsoluteCentered.tsx | 3 +- .../components/feedback/ErrorBoundary.tsx | 3 +- src/base/components/feedback/Progress.tsx | 3 +- .../feedback/SnackbarWithDescription.tsx | 8 +- .../components/inputs/ButtonSelectInput.tsx | 2 +- src/base/components/inputs/CheckboxInput.tsx | 6 +- .../components/inputs/PasswordTextField.tsx | 3 +- src/base/components/inputs/RadioInput.tsx | 3 +- .../components/inputs/SearchTextField.tsx | 6 +- src/base/components/inputs/SliderInput.tsx | 6 +- src/base/components/inputs/SortRadioInput.tsx | 3 +- .../components/inputs/ThreeStateCheckbox.tsx | 11 +- .../inputs/ThreeStateCheckboxInput.tsx | 3 +- src/base/components/lists/ListItemLink.tsx | 3 +- .../components/lists/cards/ListCardAvatar.tsx | 2 +- .../lists/cards/ListCardContent.tsx | 3 +- .../cards/OptionalCardActionAreaLink.tsx | 2 +- src/base/components/menu/IconMenuItem.tsx | 12 +- src/base/components/menu/Menu.tsx | 3 +- src/base/components/menu/Menu.utils.ts | 2 +- src/base/components/menu/MenuItem.tsx | 7 +- src/base/components/menu/NestedMenuItem.tsx | 14 +- src/base/components/modals/ConfirmDialog.tsx | 2 +- src/base/components/modals/LoginDialog.tsx | 3 +- .../settings/CheckboxListSetting.tsx | 2 +- src/base/components/settings/DateSetting.tsx | 4 +- .../settings/MutableListSetting.tsx | 3 +- .../components/settings/NumberSetting.tsx | 2 +- .../components/settings/SelectSetting.tsx | 2 +- .../components/settings/text/TextSetting.tsx | 5 +- src/base/components/tabs/TabPanel.tsx | 3 +- src/base/components/tabs/TabsMenu.tsx | 3 +- src/base/components/tabs/TabsWrapper.tsx | 3 +- src/base/components/texts/Metadata.tsx | 8 +- .../components/texts/TypographyMaxLines.tsx | 6 +- .../components/virtuoso/StyledGroupHeader.tsx | 2 +- .../virtuoso/StyledGroupedVirtuoso.tsx | 5 +- src/base/hoc/withPropsFrom.tsx | 3 +- src/base/hooks/useAutomaticScrolling.ts | 3 +- src/base/hooks/useIntersectionObserver.tsx | 3 +- src/base/hooks/useMouseDragScroll.tsx | 3 +- src/base/hooks/useResizeObserver.tsx | 3 +- src/base/hooks/useStorage.tsx | 6 +- src/base/utils/ApplyStyles.ts | 2 +- src/base/utils/DateHelper.ts | 3 +- src/base/utils/Languages.ts | 5 +- src/base/utils/MediaQuery.tsx | 2 +- src/base/utils/Strings.ts | 2 +- src/base/utils/Toast.ts | 3 +- src/base/utils/cloneObject.tsx | 2 +- .../components/WebUIUpdateChecker.tsx | 3 +- .../authentication/components/AuthGuard.tsx | 3 +- .../components/SplashScreen.tsx | 5 +- src/features/backup/Backup.constants.ts | 5 +- src/features/backup/Backup.types.ts | 4 +- src/features/backup/Backup.utils.ts | 6 +- .../component/BackupFlagInclusionDialog.tsx | 4 +- .../component/BackupValidationDialog.tsx | 4 +- src/features/backup/screens/Backup.tsx | 16 +-- src/features/browse/Browse.types.ts | 2 +- src/features/browse/extensions/Extensions.tsx | 12 +- .../extensions/components/ExtensionCard.tsx | 9 +- .../browse/screens/BrowseSettings.tsx | 4 +- src/features/browse/sources/Sources.tsx | 6 +- .../browse/sources/components/SourceCard.tsx | 2 +- src/features/category/Category.types.ts | 6 +- .../components/CategoriesInclusionSetting.tsx | 2 +- .../category/components/CategorySelect.tsx | 4 +- .../components/CategorySettingsCard.tsx | 2 +- .../components/CreateOrEditCategoryDialog.tsx | 2 +- .../category/screens/CategorySettings.tsx | 13 +- src/features/category/services/Categories.ts | 2 +- .../category/services/CategoryMetadata.ts | 6 +- src/features/chapter/Chapter.constants.ts | 4 +- src/features/chapter/Chapter.types.ts | 2 +- .../ChapterExcludeSanlatorsFilter.tsx | 2 +- .../chapter/components/ChapterList.tsx | 5 +- .../chapter/components/ChapterOptions.tsx | 6 +- .../components/ChaptersToolbarMenu.tsx | 5 +- .../actions/ChapterActionMenuItems.tsx | 11 +- .../ChaptersDownloadActionMenuItems.tsx | 7 +- .../buttons/ChapterDownloadButton.tsx | 2 +- .../buttons/ChapterDownloadRetryButton.tsx | 2 +- .../chapter/components/cards/ChapterCard.tsx | 29 +++-- .../components/cards/ChapterCardMetadata.tsx | 2 +- .../components/cards/ChapterCardThumbnail.tsx | 4 +- .../components/cards/ChapterListCard.tsx | 2 +- src/features/chapter/services/Chapters.ts | 19 +-- .../chapter/utils/ChapterList.util.tsx | 8 +- src/features/device/DeviceContext.tsx | 3 +- src/features/device/screens/DeviceSetting.tsx | 2 +- .../DeleteChaptersWhileReadingSetting.tsx | 7 +- .../components/DownloadAheadSetting.tsx | 4 +- .../components/DownloadQueueChapterCard.tsx | 2 +- .../downloads/screens/DownloadQueue.tsx | 5 +- .../downloads/screens/DownloadSettings.tsx | 9 +- .../extension/Extensions.constants.ts | 4 +- src/features/extension/Extensions.types.ts | 2 +- src/features/extension/Extensions.utils.ts | 10 +- .../info/components/ActionButton.tsx | 3 +- .../info/components/ExtensionMetadata.tsx | 2 +- .../extension/info/components/Header.tsx | 2 +- .../extension/info/components/Meta.tsx | 2 +- .../extension/info/components/SourceCard.tsx | 2 +- .../global-search/screens/SearchAll.tsx | 6 +- .../history/components/ChapterHistoryCard.tsx | 2 +- .../history/screens/HistorySettings.tsx | 2 +- src/features/hotkeys/AppHotkeysProvider.tsx | 2 +- src/features/library/Library.types.ts | 4 +- .../library/components/LibraryMangaGrid.tsx | 3 +- .../components/LibraryOptionsPanel.tsx | 9 +- .../library/components/LibraryToolbarMenu.tsx | 3 +- .../hooks/useGetVisibleLibraryMangas.ts | 14 +- src/features/library/screens/Library.tsx | 5 +- .../library/screens/LibraryDuplicates.tsx | 15 ++- .../library/screens/LibrarySettings.tsx | 4 +- .../library/util/LibraryDuplicates.util.ts | 4 +- .../LibraryDuplicatesDescriptionWorker.ts | 2 +- .../workers/LibraryDuplicatesWorker.ts | 2 +- src/features/manga/Manga.constants.ts | 7 +- src/features/manga/Manga.types.ts | 16 +-- .../manga/components/BaseMangaGrid.tsx | 3 +- .../components/ContinueReadingButton.tsx | 2 +- .../components/ContinueReadingTooltip.tsx | 4 +- .../manga/components/MangaActionMenuItems.tsx | 6 +- src/features/manga/components/MangaBadges.tsx | 2 +- src/features/manga/components/MangaGrid.tsx | 25 +++- .../manga/components/MangaOptionButton.tsx | 19 +-- .../manga/components/MangaToolbarMenu.tsx | 2 +- src/features/manga/components/ResumeFAB.tsx | 2 +- .../manga/components/TrackMangaButton.tsx | 4 +- .../manga/components/cards/MangaCard.tsx | 7 +- .../manga/components/cards/MangaGridCard.tsx | 2 +- .../manga/components/cards/MangaListCard.tsx | 2 +- .../components/details/DescriptionGenre.tsx | 2 +- .../manga/components/details/MangaDetails.tsx | 9 +- .../manga/components/details/SearchLink.tsx | 6 +- .../manga/components/details/Thumbnail.tsx | 7 +- .../hooks/useManageMangaLibraryState.tsx | 6 +- src/features/manga/screens/Manga.tsx | 8 +- src/features/manga/services/MangaMetadata.ts | 4 +- src/features/manga/services/Mangas.ts | 46 +++---- src/features/metadata/Metadata.constants.ts | 32 ++--- src/features/metadata/Metadata.types.ts | 12 +- src/features/metadata/Metadata.utils.ts | 2 +- .../services/MetadataApolloCacheHandler.ts | 6 +- .../metadata/services/MetadataChunker.ts | 8 +- .../metadata/services/MetadataConverter.ts | 4 +- .../metadata/services/MetadataMigrations.ts | 12 +- .../metadata/services/MetadataReader.ts | 12 +- .../metadata/services/MetadataUpdater.ts | 16 ++- .../metadata/services/MetadataValueCache.ts | 2 +- src/features/migration/Migration.constants.ts | 2 +- src/features/migration/Migration.types.ts | 2 +- .../migration/components/MigrateDialog.tsx | 4 +- .../migration/components/MigrationCard.tsx | 2 +- src/features/migration/screens/Migrate.tsx | 4 +- src/features/migration/screens/Migration.tsx | 6 +- src/features/navigation-bar/NavbarContext.tsx | 2 +- .../navigation-bar/NavigationBar.constants.ts | 3 +- .../navigation-bar/NavigationBar.types.ts | 14 +- .../navigation-bar/NavigationBar.util.ts | 7 +- .../components/DefaultNavBar.tsx | 4 +- .../components/DesktopSideBar.tsx | 2 +- .../components/MobileBottomBar.tsx | 7 +- .../navigation-bar/hooks/useAppAction.ts | 2 +- .../navigation-bar/hooks/useAppTitle.ts | 2 +- .../hooks/useAppTitleAndAction.ts | 2 +- src/features/reader/Reader.types.ts | 14 +- src/features/reader/Reader.utils.ts | 13 +- .../reader/auto-scroll/ReaderAutoScroll.tsx | 3 +- .../auto-scroll/ReaderAutoScrollStore.ts | 7 +- .../auto-scroll/hooks/useReaderAutoScroll.ts | 2 +- .../settings/ReaderSettingAutoScroll.tsx | 2 +- .../ReaderNavBarDesktopAutoScroll.tsx | 2 +- .../reader/filters/ReaderRGBAFilter.tsx | 2 +- .../filters/settings/ReaderFilterSettings.tsx | 2 +- .../components/ReaderSettingBrightness.tsx | 2 +- .../components/ReaderSettingContrast.tsx | 2 +- .../components/ReaderSettingGrayscale.tsx | 2 +- .../settings/components/ReaderSettingHue.tsx | 2 +- .../components/ReaderSettingInvert.tsx | 2 +- .../settings/components/ReaderSettingRGBA.tsx | 4 +- .../components/ReaderSettingSaturate.tsx | 2 +- .../components/ReaderSettingSepia.tsx | 2 +- .../reader/hooks/useReaderSetChaptersState.ts | 8 +- .../reader/hooks/useReaderSetSettingsState.ts | 11 +- .../useReaderShowSettingPreviewOnChange.ts | 4 +- src/features/reader/hotkeys/ReaderHotkeys.tsx | 3 +- .../settings/ReaderHotkeysSettings.tsx | 2 +- .../components/ReaderSettingHotkey.tsx | 2 +- .../ReaderInfiniteScrollUpdateChapter.tsx | 2 +- .../reader/overlay/ReaderOverlay.types.ts | 6 +- .../reader/overlay/ReaderOverlayStore.ts | 2 +- .../overlay/components/ReaderPageNumber.tsx | 2 +- .../hooks/useReaderHideOverlayOnUserScroll.ts | 3 +- .../mobile/ReaderOverlayHeaderMobile.tsx | 5 +- .../components/ReaderBookmarkButton.tsx | 2 +- .../components/ReaderChapterList.tsx | 7 +- .../desktop/ReaderNavBarDesktop.tsx | 4 +- .../components/ReaderNavBarDesktopActions.tsx | 2 +- .../ReaderNavBarDesktopChapterNavigation.tsx | 4 +- .../ReaderNavBarDesktopNextPreviousButton.tsx | 2 +- .../ReaderNavBarDesktopQuickSettings.tsx | 2 +- .../ReaderNavBarDesktopOffsetDoubleSpread.tsx | 2 +- .../ReaderNavBarDesktopPageScale.tsx | 4 +- .../ReaderNavBarDesktopReadingDirection.tsx | 4 +- .../ReaderNavBarDesktopReadingMode.tsx | 4 +- .../mobile/ReaderBottomBarMobile.tsx | 2 +- .../progress-bar/ReaderProgressBar.tsx | 13 +- .../progress-bar/ReaderProgressBar.types.ts | 8 +- .../progress-bar/ReaderProgressBar.utils.tsx | 7 +- .../progress-bar/ReaderProgressBarStore.tsx | 4 +- .../ProgressBarHighlightReadPages.tsx | 2 +- .../components/ReaderProgressBarContainer.tsx | 2 +- .../ReaderProgressBarCurrentPageSlot.tsx | 4 +- .../ReaderProgressBarDirectionWrapper.tsx | 3 +- .../components/ReaderProgressBarSlot.tsx | 5 +- .../ReaderProgressBarSlotWrapper.tsx | 8 +- .../desktop/StandardReaderProgressBar.tsx | 2 +- .../ReaderProgressBarSlotDesktop.tsx | 2 +- .../mobile/MobileReaderProgressBar.tsx | 6 +- .../ReaderProgressBarSlotMobile.tsx | 3 +- .../ReaderSettingProgressBarPosition.tsx | 9 +- .../ReaderSettingProgressBarSize.tsx | 3 +- .../ReaderSettingProgressBarType.tsx | 5 +- .../settings/ReaderSettingOverlayMode.tsx | 5 +- src/features/reader/screens/Reader.tsx | 4 +- .../reader/services/ReaderControls.ts | 17 ++- src/features/reader/services/ReaderService.ts | 26 ++-- .../settings/ReaderSettings.constants.tsx | 12 +- .../reader/settings/ReaderSettings.utils.tsx | 10 +- .../reader/settings/ReaderSettingsMetadata.ts | 8 +- .../behaviour/ReaderBehaviourSettings.tsx | 4 +- .../components/ReaderSettingExitMode.tsx | 5 +- .../components/ReaderSettingScrollAmount.tsx | 5 +- .../components/ReaderSettingsTabs.tsx | 2 +- .../general/ReaderGeneralSettings.tsx | 8 +- .../ReaderSettingBackgroundColor.tsx | 5 +- .../layout/ReaderDefaultLayoutSettings.tsx | 6 +- .../settings/layout/ReaderLayoutSettings.tsx | 2 +- .../components/ReaderSettingPageGap.tsx | 5 +- .../components/ReaderSettingPageScaleMode.tsx | 8 +- .../ReaderSettingProfileSettings.tsx | 5 +- .../ReaderSettingReadingDirection.tsx | 5 +- .../components/ReaderSettingReadingMode.tsx | 4 +- .../components/ReaderSettingStretchPage.tsx | 2 +- .../ReaderSettingTapZoneInvertMode.tsx | 10 +- .../components/ReaderSettingTapZoneLayout.tsx | 4 +- .../layout/components/ReaderSettingWidth.tsx | 6 +- .../settings/screens/GlobalReaderSettings.tsx | 2 +- .../reader/stores/ReaderChaptersStore.ts | 4 +- .../reader/stores/ReaderPagesStore.ts | 5 +- src/features/reader/stores/ReaderStore.ts | 37 ++---- .../tap-zones/ReaderTapZone.constants.ts | 5 +- .../reader/tap-zones/ReaderTapZoneService.ts | 13 +- .../reader/tap-zones/ReaderTapZoneStore.tsx | 4 +- .../reader/tap-zones/TapZoneLayout.tsx | 2 +- .../reader/viewer/ReaderChapterViewer.tsx | 13 +- src/features/reader/viewer/ReaderViewer.tsx | 16 +-- .../reader/viewer/components/ReaderPage.tsx | 7 +- .../components/ReaderTransitionPage.tsx | 12 +- .../useReaderConvertPagesForReadingMode.ts | 5 +- .../hooks/useReaderHandlePageSelection.ts | 9 +- .../hooks/useReaderHideCursorOnInactivity.ts | 3 +- .../useReaderHorizontalModeRevampScrolling.ts | 3 +- .../hooks/useReaderPreserveScrollPosition.ts | 7 +- .../useReaderScrollToStartOnPageChange.ts | 7 +- .../viewer/hooks/useReaderSetPagesState.ts | 14 +- .../reader/viewer/pager/ReaderPager.utils.tsx | 10 +- .../viewer/pager/components/BasePager.tsx | 15 +-- .../components/ReaderDoublePagedPager.tsx | 11 +- .../components/ReaderHorizontalPager.tsx | 3 +- .../pager/components/ReaderPagedPager.tsx | 2 +- .../pager/components/ReaderVerticalPager.tsx | 3 +- .../settings/ImageProcessing.utils.ts | 6 +- src/features/settings/Settings.constants.ts | 9 +- src/features/settings/Settings.types.ts | 20 +-- .../globalUpdate/GlobalUpdateSettings.tsx | 8 +- .../GlobalUpdateSettingsEntries.tsx | 2 +- .../GlobalUpdateSettingsInterval.tsx | 2 +- .../components/images/KeyValueItem.tsx | 2 +- .../components/images/KeyValueItems.tsx | 4 +- .../settings/components/images/Processing.tsx | 5 +- .../koreaderSync/KoreaderSyncSettings.tsx | 4 +- .../webUI/WebUIUpdateIntervalSetting.tsx | 2 +- src/features/settings/screens/Appearance.tsx | 3 +- .../screens/ImageProcessingSetting.tsx | 2 +- src/features/settings/screens/More.tsx | 3 +- .../settings/screens/ServerSettings.tsx | 4 +- .../settings/screens/WebUISettings.tsx | 7 +- .../services/ServerSettingsMetadata.ts | 4 +- src/features/source/Source.types.ts | 2 +- .../browse/components/SourceOptions.tsx | 10 +- .../components/filters/CheckBoxFilter.tsx | 3 +- .../browse/components/filters/GroupFilter.tsx | 4 +- .../components/filters/SelectFilter.tsx | 5 +- .../browse/components/filters/SortFilter.tsx | 5 +- .../browse/components/filters/TextFilter.tsx | 3 +- .../components/filters/TriStateFilter.tsx | 3 +- .../source/browse/screens/SourceMangas.tsx | 15 +-- .../components/SourceLanguageSelect.tsx | 4 +- .../components/EditTextPreference.tsx | 2 +- .../components/ListPreference.tsx | 2 +- .../components/MultiSelectListPreference.tsx | 2 +- .../components/TwoStatePreference.tsx | 2 +- .../configuration/screens/SourceConfigure.tsx | 4 +- .../source/services/SourceMetadata.ts | 4 +- src/features/source/services/Sources.ts | 2 +- src/features/theme/AppTheme.types.ts | 6 +- src/features/theme/AppThemeContext.tsx | 12 +- src/features/theme/ThemeDirectionCache.ts | 4 +- src/features/theme/Themes.ts | 2 +- .../theme/components/CreateThemeDialog.tsx | 9 +- src/features/theme/components/ThemeList.tsx | 2 +- .../theme/components/ThemePreview.tsx | 2 +- src/features/theme/services/AppThemes.ts | 3 +- src/features/theme/services/ThemeCreator.ts | 18 +-- .../theme/services/ThemeFontLoader.ts | 12 +- src/features/tracker/Tracker.constants.ts | 4 +- src/features/tracker/Tracker.types.ts | 2 +- .../tracker/components/TrackManga.tsx | 4 +- .../tracker/components/TrackerSearch.tsx | 7 +- .../components/cards/SettingsTrackerCard.tsx | 2 +- .../components/cards/TrackerActiveCard.tsx | 7 +- .../tracker/components/cards/TrackerCard.tsx | 6 +- .../components/cards/TrackerMangaCard.tsx | 2 +- .../components/cards/TrackerUntrackedCard.tsx | 2 +- .../tracker/screens/TrackingSettings.tsx | 4 +- src/features/tracker/services/Trackers.ts | 5 +- .../updates/components/ChapterUpdateCard.tsx | 2 +- .../updates/components/UpdateChecker.tsx | 2 +- src/lib/HelperFunctions.ts | 2 +- src/lib/ISOLanguageUtil.ts | 3 +- src/lib/Queue.ts | 3 +- src/lib/dayjs/LocaleImporter.ts | 3 +- src/lib/dnd-kit/DndKitUtil.ts | 14 +- src/lib/dnd-kit/DndOverlayItem.tsx | 2 +- src/lib/dnd-kit/DndSortableItem.tsx | 4 +- src/lib/mui/MUI.util.ts | 3 +- .../ReactRouterDom.types.d.ts | 4 +- src/lib/react-router/ReactRouter.ts | 2 +- src/lib/requests/RequestManager.ts | 31 +++-- src/lib/requests/client/BaseClient.ts | 4 +- src/lib/requests/client/GraphQLClient.ts | 15 ++- src/lib/requests/client/RestClient.ts | 4 +- .../Component/GroupedVirtuosoPersisted.tsx | 6 +- .../Component/VirtuosoGridPersisted.tsx | 6 +- .../virtuoso/Component/VirtuosoPersisted.tsx | 6 +- src/lib/zustand/Zustand.types.ts | 2 +- tools/scripts/dayjs/generateDayJsLocales.ts | 2 +- .../dayjs/generateDayJsLocalesImport.ts | 2 +- tools/scripts/manga/generateMangaTypeTags.ts | 2 +- .../scripts/release/CommitChangelog.utils.ts | 10 +- .../release/TranslationChangelog.utils.ts | 2 +- tools/scripts/updateDependencies.ts | 7 +- tools/scripts/weblate/Weblate.utils.ts | 6 +- .../scripts/weblate/generatei18nResources.ts | 6 +- yarn.lock | 10 ++ 377 files changed, 1132 insertions(+), 1048 deletions(-) diff --git a/.oxlintrc.jsonc b/.oxlintrc.jsonc index 71e35b4c..44d956e8 100644 --- a/.oxlintrc.jsonc +++ b/.oxlintrc.jsonc @@ -1,36 +1,34 @@ { "plugins": [ "react", + "unicorn", "typescript", "import", "jsx-a11y" ], "jsPlugins": [ "eslint-plugin-lingui", - "eslint-plugin-no-relative-import-paths" + "eslint-plugin-no-relative-import-paths", + "eslint-plugin-unused-imports", + "eslint-plugin-no-only-tests" ], "categories": { "correctness": "off" }, "rules": { // ── Core JS: correctness (from js.configs.recommended) ── - "constructor-super": "error", + // Rules redundant with TypeScript strict mode have been removed. "for-direction": "error", - "getter-return": "error", "no-async-promise-executor": "error", "no-case-declarations": "error", - "no-class-assign": "error", "no-compare-neg-zero": "error", "no-cond-assign": "error", - "no-const-assign": "error", "no-constant-binary-expression": "error", "no-constant-condition": "error", "no-control-regex": "error", "no-debugger": "error", "no-delete-var": "error", - "no-dupe-class-members": "error", "no-dupe-else-if": "error", - "no-dupe-keys": "error", "no-duplicate-case": "error", "no-empty": "error", "no-empty-character-class": "error", @@ -38,29 +36,17 @@ "no-empty-static-block": "error", "no-ex-assign": "error", "no-extra-boolean-cast": "error", - "no-fallthrough": "error", - "no-func-assign": "error", - "no-global-assign": "error", - "no-import-assign": "error", "no-invalid-regexp": "error", "no-irregular-whitespace": "error", "no-loss-of-precision": "error", "no-misleading-character-class": "error", - "no-new-native-nonconstructor": "error", "no-nonoctal-decimal-escape": "error", - "no-obj-calls": "error", "no-prototype-builtins": "error", - "no-redeclare": "error", "no-regex-spaces": "error", "no-self-assign": "error", - "no-setter-return": "error", "no-shadow-restricted-names": "error", "no-sparse-arrays": "error", - "no-this-before-super": "error", - "no-undef": "error", - "no-unreachable": "error", "no-unsafe-finally": "error", - "no-unsafe-negation": "error", "no-unsafe-optional-chaining": "error", "no-unused-labels": "error", "no-unused-private-class-members": "error", @@ -81,13 +67,11 @@ "no-with": "error", "require-yield": "error", "use-isnan": "error", - "valid-typeof": "error", "no-array-constructor": "error", "no-unused-expressions": "error", - // ── Core JS: Airbnb-style rules ── - "no-console": "warn", - "no-nested-ternary": "error", + // ── Core JS: style & best practices ── + "no-console": "error", "no-else-return": [ "error", { @@ -113,13 +97,8 @@ "no-eval": "error", "no-script-url": "error", "no-self-compare": "error", - "no-proto": "error", "no-extend-native": "error", - "no-caller": "error", - "no-alert": "warn", - "no-void": "error", - "no-bitwise": "error", - "no-continue": "error", + "no-alert": "error", "no-restricted-globals": [ "error", "isFinite", @@ -140,7 +119,6 @@ "null": "ignore" } ], - "guard-for-in": "error", "default-case": [ "error", { @@ -148,29 +126,8 @@ } ], "default-case-last": "error", - "radix": "error", "yoda": "error", - "max-classes-per-file": [ - "error", - 1 - ], "prefer-template": "error", - "prefer-destructuring": [ - "error", - { - "VariableDeclarator": { - "array": false, - "object": true - }, - "AssignmentExpression": { - "array": true, - "object": false - } - }, - { - "enforceForRenamedProperties": false - } - ], "prefer-exponentiation-operator": "error", "prefer-object-spread": "error", "prefer-promise-reject-errors": [ @@ -188,12 +145,6 @@ ] } ], - "no-plusplus": [ - "error", - { - "allowForLoopAfterthoughts": true - } - ], "no-restricted-imports": [ "error", { @@ -215,6 +166,19 @@ } ], + // ── New: modern JS essentials ── + "prefer-const": "error", + "no-var": "error", + "curly": "error", + "no-warning-comments": [ + "error", + { + "terms": [ + "@nocommit" + ] + } + ], + // ── TypeScript rules (non-type-checked) ── "no-shadow": "error", "no-loop-func": "error", @@ -243,6 +207,13 @@ "typescript/prefer-namespace-keyword": "error", "typescript/triple-slash-reference": "error", + // ── New: TypeScript safety ── + "typescript/no-explicit-any": "off", + "typescript/no-empty-object-type": "error", + "typescript/no-unsafe-function-type": "error", + "typescript/consistent-type-imports": "error", + "typescript/switch-exhaustiveness-check": "error", + // ── TypeScript rules (type-checked) ── "typescript/no-implied-eval": "error", "typescript/only-throw-error": "error", @@ -256,7 +227,7 @@ "import/namespace": "error", "import/default": "error", "import/export": "error", - "import/no-duplicates": "warn", + "import/no-duplicates": "error", "import/no-mutable-exports": "error", "import/first": "error", "import/no-amd": "error", @@ -264,23 +235,11 @@ "import/no-self-import": "error", "import/no-default-export": "error", - // ── Lingui (via jsPlugin) ── - "lingui/t-call-in-function": "error", - "lingui/no-single-tag-to-translate": "warn", - "lingui/no-single-variables-to-translate": "warn", - "lingui/no-trans-inside-trans": "warn", - "lingui/no-expression-in-message": "off", - - // ── Header — handled by minimal ESLint fallback ── - - // ── No relative import paths (via jsPlugin) ── - "no-relative-import-paths/no-relative-import-paths": [ - "error", - { - "rootDir": "src", - "prefix": "@" - } - ], + // ── Unicorn: modern JS (auto-fixable) ── + "unicorn/prefer-array-flat-map": "error", + "unicorn/prefer-structured-clone": "error", + "unicorn/prefer-string-replace-all": "error", + "unicorn/consistent-function-scoping": "error", // ── React rules ── "react/jsx-key": "error", @@ -290,14 +249,9 @@ "react/jsx-no-undef": "error", "react/no-children-prop": "error", "react/no-danger-with-children": "error", - "react/no-direct-mutation-state": "error", - "react/no-find-dom-node": "error", - "react/no-is-mounted": "error", "react/no-render-return-value": "error", - "react/no-string-refs": "error", "react/no-unescaped-entities": "error", "react/no-unknown-property": "error", - "react/require-render-return": "error", "react/rules-of-hooks": "error", "react/no-array-index-key": "error", "react/jsx-no-useless-fragment": "error", @@ -328,12 +282,7 @@ "react/jsx-no-script-url": "error", "react/style-prop-object": "error", "react/void-dom-elements-no-children": "error", - "react/no-danger": "warn", - "react/no-this-in-sfc": "error", - "react/state-in-constructor": [ - "error", - "always" - ], + "react/no-danger": "error", // ── jsx-a11y rules ── "jsx_a11y/alt-text": "error", diff --git a/package.json b/package.json index 79e33dad..7d845677 100644 --- a/package.json +++ b/package.json @@ -110,7 +110,9 @@ "dotenv": "17.3.1", "eslint": "9.39.4", "eslint-plugin-lingui": "0.11.0", + "eslint-plugin-no-only-tests": "3.3.0", "eslint-plugin-no-relative-import-paths": "1.6.1", + "eslint-plugin-unused-imports": "4.4.1", "husky": "9.1.7", "lint-staged": "16.3.2", "oxfmt": "0.37.0", diff --git a/src/UtilTypes.d.ts b/src/UtilTypes.d.ts index a4484f95..993afeb4 100644 --- a/src/UtilTypes.d.ts +++ b/src/UtilTypes.d.ts @@ -44,7 +44,7 @@ type ExtractValueWithDefaultFlag> = T extend type MergeObjectsArray = T extends [infer F, ...infer R] ? F & MergeObjectsArray - : {}; + : Record; type OmitNotMatching = { [P in K]: T[K]; diff --git a/src/assets/SuwayomiLogo.tsx b/src/assets/SuwayomiLogo.tsx index 7b5b4fa5..f73a5421 100644 --- a/src/assets/SuwayomiLogo.tsx +++ b/src/assets/SuwayomiLogo.tsx @@ -6,7 +6,8 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import SvgIcon, { SvgIconProps } from '@mui/material/SvgIcon'; +import type { SvgIconProps } from '@mui/material/SvgIcon'; +import SvgIcon from '@mui/material/SvgIcon'; export const SuwayomiLogo = ({ circleRingColor = '#35d4d5', diff --git a/src/base/AppRoute.constants.ts b/src/base/AppRoute.constants.ts index c981579b..b650cf8a 100644 --- a/src/base/AppRoute.constants.ts +++ b/src/base/AppRoute.constants.ts @@ -6,11 +6,11 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { SourceType } from '@/lib/graphql/generated/graphql.ts'; -import { MangaIdInfo } from '@/features/manga/Manga.types.ts'; +import type { SourceType } from '@/lib/graphql/generated/graphql.ts'; +import type { MangaIdInfo } from '@/features/manga/Manga.types.ts'; -import { ChapterSourceOrderInfo } from '@/features/chapter/Chapter.types.ts'; -import { BrowseTab } from '@/features/browse/Browse.types.ts'; +import type { ChapterSourceOrderInfo } from '@/features/chapter/Chapter.types.ts'; +import type { BrowseTab } from '@/features/browse/Browse.types.ts'; import { SearchParam } from '@/base/Base.types.ts'; import { UrlUtil } from '@/lib/UrlUtil.ts'; diff --git a/src/base/Base.types.ts b/src/base/Base.types.ts index ae92cb87..112eaa13 100644 --- a/src/base/Base.types.ts +++ b/src/base/Base.types.ts @@ -6,8 +6,8 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { MessageDescriptor } from '@lingui/core'; -import { ReactNode } from 'react'; +import type { MessageDescriptor } from '@lingui/core'; +import type { ReactNode } from 'react'; export enum GridLayout { Compact = 0, diff --git a/src/base/IsoLanguages.ts b/src/base/IsoLanguages.ts index cf17b3c4..adc66bfd 100644 --- a/src/base/IsoLanguages.ts +++ b/src/base/IsoLanguages.ts @@ -6,7 +6,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { I18nResourceCode } from '@/i18n'; +import type { I18nResourceCode } from '@/i18n'; export type ISOLanguage = { name: string; diff --git a/src/base/components/AppbarSearch.tsx b/src/base/components/AppbarSearch.tsx index 39412051..5bb057f8 100644 --- a/src/base/components/AppbarSearch.tsx +++ b/src/base/components/AppbarSearch.tsx @@ -74,7 +74,9 @@ export const AppbarSearch: React.FunctionComponent = (props) => { updateSearchOpenState(false); }; const handleBlur = () => { - if (!searchString) updateSearchOpenState(false); + if (!searchString) { + updateSearchOpenState(false); + } }; useHotkeys( diff --git a/src/base/components/AvatarSpinner.tsx b/src/base/components/AvatarSpinner.tsx index 6ed4e9ac..147cdf9f 100644 --- a/src/base/components/AvatarSpinner.tsx +++ b/src/base/components/AvatarSpinner.tsx @@ -6,8 +6,10 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import Avatar, { AvatarProps } from '@mui/material/Avatar'; -import { SpinnerImage, SpinnerImageProps } from '@/base/components/SpinnerImage.tsx'; +import type { AvatarProps } from '@mui/material/Avatar'; +import Avatar from '@mui/material/Avatar'; +import type { SpinnerImageProps } from '@/base/components/SpinnerImage.tsx'; +import { SpinnerImage } from '@/base/components/SpinnerImage.tsx'; export const AvatarSpinner = ({ iconUrl, diff --git a/src/base/components/CustomTooltip.tsx b/src/base/components/CustomTooltip.tsx index 72847534..289a605f 100644 --- a/src/base/components/CustomTooltip.tsx +++ b/src/base/components/CustomTooltip.tsx @@ -6,7 +6,8 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import Tooltip, { TooltipProps } from '@mui/material/Tooltip'; +import type { TooltipProps } from '@mui/material/Tooltip'; +import Tooltip from '@mui/material/Tooltip'; export const CustomTooltip = ({ children, diff --git a/src/base/components/SpinnerImage.tsx b/src/base/components/SpinnerImage.tsx index 28f75cf1..6fc4c7c7 100644 --- a/src/base/components/SpinnerImage.tsx +++ b/src/base/components/SpinnerImage.tsx @@ -6,7 +6,8 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { useState, useEffect, useCallback, useRef, Ref } from 'react'; +import type { Ref } from 'react'; +import { useState, useEffect, useCallback, useRef } from 'react'; import CircularProgress from '@mui/material/CircularProgress'; import Box from '@mui/material/Box'; import Stack from '@mui/material/Stack'; @@ -14,11 +15,12 @@ import Button from '@mui/material/Button'; import BrokenImageIcon from '@mui/icons-material/BrokenImage'; import RefreshIcon from '@mui/icons-material/Refresh'; import ImageIcon from '@mui/icons-material/Image'; -import { SxProps, Theme } from '@mui/material/styles'; +import type { SxProps, Theme } from '@mui/material/styles'; import { useLingui } from '@lingui/react/macro'; import { usePrevious } from '@mantine/hooks'; -import { ImageRequest, requestManager } from '@/lib/requests/RequestManager.ts'; -import { Priority } from '@/lib/Queue.ts'; +import type { ImageRequest } from '@/lib/requests/RequestManager.ts'; +import { requestManager } from '@/lib/requests/RequestManager.ts'; +import type { Priority } from '@/lib/Queue.ts'; import { applyStyles } from '@/base/utils/ApplyStyles.ts'; import { useIntersectionObserver } from '@/base/hooks/useIntersectionObserver.tsx'; import { noOp } from '@/lib/HelperFunctions.ts'; diff --git a/src/base/components/buttons/ButtonSelect.tsx b/src/base/components/buttons/ButtonSelect.tsx index f567b596..f29bf9cd 100644 --- a/src/base/components/buttons/ButtonSelect.tsx +++ b/src/base/components/buttons/ButtonSelect.tsx @@ -10,7 +10,7 @@ import Stack from '@mui/material/Stack'; import Button from '@mui/material/Button'; import { useLingui } from '@lingui/react/macro'; import { CustomTooltip } from '@/base/components/CustomTooltip.tsx'; -import { MultiValueButtonProps } from '@/base/Base.types.ts'; +import type { MultiValueButtonProps } from '@/base/Base.types.ts'; import { Superscript } from '@/base/components/texts/Superscript.tsx'; export const ButtonSelect = ({ diff --git a/src/base/components/buttons/CustomButton.tsx b/src/base/components/buttons/CustomButton.tsx index 267f7ca6..14dad6aa 100644 --- a/src/base/components/buttons/CustomButton.tsx +++ b/src/base/components/buttons/CustomButton.tsx @@ -6,7 +6,8 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import Button, { ButtonProps } from '@mui/material/Button'; +import type { ButtonProps } from '@mui/material/Button'; +import Button from '@mui/material/Button'; import Stack from '@mui/material/Stack'; export const CustomButton = ({ diff --git a/src/base/components/buttons/CustomButtonIcon.tsx b/src/base/components/buttons/CustomButtonIcon.tsx index e9e00e00..6e38e6bc 100644 --- a/src/base/components/buttons/CustomButtonIcon.tsx +++ b/src/base/components/buttons/CustomButtonIcon.tsx @@ -6,7 +6,8 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import Button, { ButtonProps } from '@mui/material/Button'; +import type { ButtonProps } from '@mui/material/Button'; +import Button from '@mui/material/Button'; export const CustomButtonIcon = ({ children, diff --git a/src/base/components/buttons/ResetButton.tsx b/src/base/components/buttons/ResetButton.tsx index c4d64483..2d4eb91a 100644 --- a/src/base/components/buttons/ResetButton.tsx +++ b/src/base/components/buttons/ResetButton.tsx @@ -6,9 +6,11 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import Button, { ButtonProps } from '@mui/material/Button'; +import type { ButtonProps } from '@mui/material/Button'; +import Button from '@mui/material/Button'; import RestartAltIcon from '@mui/icons-material/RestartAlt'; -import IconButton, { IconButtonProps } from '@mui/material/IconButton'; +import type { IconButtonProps } from '@mui/material/IconButton'; +import IconButton from '@mui/material/IconButton'; import { useLingui } from '@lingui/react/macro'; import { CustomTooltip } from '@/base/components/CustomTooltip.tsx'; diff --git a/src/base/components/buttons/ValueRotationButton.tsx b/src/base/components/buttons/ValueRotationButton.tsx index 47726e7f..f810e2a8 100644 --- a/src/base/components/buttons/ValueRotationButton.tsx +++ b/src/base/components/buttons/ValueRotationButton.tsx @@ -6,11 +6,12 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { ReactNode, useMemo } from 'react'; +import type { ReactNode } from 'react'; +import { useMemo } from 'react'; import Button from '@mui/material/Button'; import { useLingui } from '@lingui/react/macro'; import { CustomTooltip } from '@/base/components/CustomTooltip.tsx'; -import { MultiValueButtonProps } from '@/base/Base.types.ts'; +import type { MultiValueButtonProps } from '@/base/Base.types.ts'; import { getNextRotationValue } from '@/base/utils/ValueRotationButton.utils.ts'; import { Superscript } from '@/base/components/texts/Superscript.tsx'; diff --git a/src/base/components/downloads/DownloadStateIndicator.tsx b/src/base/components/downloads/DownloadStateIndicator.tsx index 3e76d3af..538dc801 100644 --- a/src/base/components/downloads/DownloadStateIndicator.tsx +++ b/src/base/components/downloads/DownloadStateIndicator.tsx @@ -6,7 +6,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { MessageDescriptor } from '@lingui/core'; +import type { MessageDescriptor } from '@lingui/core'; import CircularProgress from '@mui/material/CircularProgress'; import Box from '@mui/material/Box'; import Typography from '@mui/material/Typography'; @@ -14,7 +14,7 @@ import { useLingui } from '@lingui/react/macro'; import { msg } from '@lingui/core/macro'; import { DownloadState } from '@/lib/graphql/generated/graphql.ts'; import { Chapters } from '@/features/chapter/services/Chapters.ts'; -import { ChapterIdInfo } from '@/features/chapter/Chapter.types.ts'; +import type { ChapterIdInfo } from '@/features/chapter/Chapter.types.ts'; const DOWNLOAD_STATE_TO_TRANSLATION_MAP: { [state in DownloadState]: MessageDescriptor } = { DOWNLOADING: msg`Downloading`, diff --git a/src/base/components/feedback/EmptyView.tsx b/src/base/components/feedback/EmptyView.tsx index fcc3269b..1c11ceaf 100644 --- a/src/base/components/feedback/EmptyView.tsx +++ b/src/base/components/feedback/EmptyView.tsx @@ -10,7 +10,7 @@ import { type JSX, useMemo, useState } from 'react'; import Typography from '@mui/material/Typography'; -import { SxProps, Theme } from '@mui/material/styles'; +import type { SxProps, Theme } from '@mui/material/styles'; import Button from '@mui/material/Button'; import Stack from '@mui/material/Stack'; import Collapse from '@mui/material/Collapse'; diff --git a/src/base/components/feedback/EmptyViewAbsoluteCentered.tsx b/src/base/components/feedback/EmptyViewAbsoluteCentered.tsx index 0c8ce52f..f36a21c4 100644 --- a/src/base/components/feedback/EmptyViewAbsoluteCentered.tsx +++ b/src/base/components/feedback/EmptyViewAbsoluteCentered.tsx @@ -6,7 +6,8 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { EmptyView, EmptyViewProps } from '@/base/components/feedback/EmptyView.tsx'; +import type { EmptyViewProps } from '@/base/components/feedback/EmptyView.tsx'; +import { EmptyView } from '@/base/components/feedback/EmptyView.tsx'; export function EmptyViewAbsoluteCentered({ sx, ...emptyViewProps }: EmptyViewProps) { return ( diff --git a/src/base/components/feedback/ErrorBoundary.tsx b/src/base/components/feedback/ErrorBoundary.tsx index 3f1e9970..1951e53c 100644 --- a/src/base/components/feedback/ErrorBoundary.tsx +++ b/src/base/components/feedback/ErrorBoundary.tsx @@ -6,7 +6,8 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { Component, ErrorInfo, ReactNode, useEffect, useRef, useState } from 'react'; +import type { ErrorInfo, ReactNode } from 'react'; +import { Component, useEffect, useRef, useState } from 'react'; import { useLocation } from 'react-router-dom'; import { t } from '@lingui/core/macro'; import { getErrorMessage } from '@/lib/HelperFunctions.ts'; diff --git a/src/base/components/feedback/Progress.tsx b/src/base/components/feedback/Progress.tsx index 42feeeef..f0451da9 100644 --- a/src/base/components/feedback/Progress.tsx +++ b/src/base/components/feedback/Progress.tsx @@ -7,7 +7,8 @@ */ import Box from '@mui/material/Box'; -import CircularProgress, { CircularProgressProps } from '@mui/material/CircularProgress'; +import type { CircularProgressProps } from '@mui/material/CircularProgress'; +import CircularProgress from '@mui/material/CircularProgress'; import Typography from '@mui/material/Typography'; export const Progress = ({ diff --git a/src/base/components/feedback/SnackbarWithDescription.tsx b/src/base/components/feedback/SnackbarWithDescription.tsx index a3dd282d..9a0f3cef 100644 --- a/src/base/components/feedback/SnackbarWithDescription.tsx +++ b/src/base/components/feedback/SnackbarWithDescription.tsx @@ -6,9 +6,11 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { MessageDescriptor } from '@lingui/core'; -import { closeSnackbar, CustomContentProps, SnackbarContent, VariantType } from 'notistack'; -import { ForwardedRef, Fragment, memo } from 'react'; +import type { MessageDescriptor } from '@lingui/core'; +import type { CustomContentProps, VariantType } from 'notistack'; +import { closeSnackbar, SnackbarContent } from 'notistack'; +import type { ForwardedRef } from 'react'; +import { Fragment, memo } from 'react'; import Alert from '@mui/material/Alert'; import AlertTitle from '@mui/material/AlertTitle'; import Button from '@mui/material/Button'; diff --git a/src/base/components/inputs/ButtonSelectInput.tsx b/src/base/components/inputs/ButtonSelectInput.tsx index 16d6b501..429ab965 100644 --- a/src/base/components/inputs/ButtonSelectInput.tsx +++ b/src/base/components/inputs/ButtonSelectInput.tsx @@ -8,7 +8,7 @@ import Stack from '@mui/material/Stack'; import Typography from '@mui/material/Typography'; -import { ComponentProps } from 'react'; +import type { ComponentProps } from 'react'; import { ButtonSelect } from '@/base/components/buttons/ButtonSelect.tsx'; diff --git a/src/base/components/inputs/CheckboxInput.tsx b/src/base/components/inputs/CheckboxInput.tsx index 6b41917b..ce0357eb 100644 --- a/src/base/components/inputs/CheckboxInput.tsx +++ b/src/base/components/inputs/CheckboxInput.tsx @@ -6,8 +6,10 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import Checkbox, { CheckboxProps } from '@mui/material/Checkbox'; -import FormControlLabel, { FormControlLabelProps } from '@mui/material/FormControlLabel'; +import type { CheckboxProps } from '@mui/material/Checkbox'; +import Checkbox from '@mui/material/Checkbox'; +import type { FormControlLabelProps } from '@mui/material/FormControlLabel'; +import FormControlLabel from '@mui/material/FormControlLabel'; import React from 'react'; interface IProps extends CheckboxProps { diff --git a/src/base/components/inputs/PasswordTextField.tsx b/src/base/components/inputs/PasswordTextField.tsx index c0fd0f78..8f62a3b8 100644 --- a/src/base/components/inputs/PasswordTextField.tsx +++ b/src/base/components/inputs/PasswordTextField.tsx @@ -7,7 +7,8 @@ */ import InputAdornment from '@mui/material/InputAdornment'; -import TextField, { TextFieldProps } from '@mui/material/TextField'; +import type { TextFieldProps } from '@mui/material/TextField'; +import TextField from '@mui/material/TextField'; import { useState } from 'react'; import IconButton from '@mui/material/IconButton'; import Visibility from '@mui/icons-material/Visibility'; diff --git a/src/base/components/inputs/RadioInput.tsx b/src/base/components/inputs/RadioInput.tsx index 34847cfd..5e3a1be5 100644 --- a/src/base/components/inputs/RadioInput.tsx +++ b/src/base/components/inputs/RadioInput.tsx @@ -7,7 +7,8 @@ */ import FormControlLabel from '@mui/material/FormControlLabel'; -import Radio, { RadioProps } from '@mui/material/Radio'; +import type { RadioProps } from '@mui/material/Radio'; +import Radio from '@mui/material/Radio'; import React from 'react'; export interface RadioInputProps extends RadioProps { diff --git a/src/base/components/inputs/SearchTextField.tsx b/src/base/components/inputs/SearchTextField.tsx index 68172fcc..898b85b1 100644 --- a/src/base/components/inputs/SearchTextField.tsx +++ b/src/base/components/inputs/SearchTextField.tsx @@ -6,8 +6,10 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import TextField, { TextFieldProps } from '@mui/material/TextField'; -import IconButton, { IconButtonProps } from '@mui/material/IconButton'; +import type { TextFieldProps } from '@mui/material/TextField'; +import TextField from '@mui/material/TextField'; +import type { IconButtonProps } from '@mui/material/IconButton'; +import IconButton from '@mui/material/IconButton'; import InputAdornment from '@mui/material/InputAdornment'; import CancelIcon from '@mui/icons-material/Cancel'; diff --git a/src/base/components/inputs/SliderInput.tsx b/src/base/components/inputs/SliderInput.tsx index 0fccd841..b6d371e0 100644 --- a/src/base/components/inputs/SliderInput.tsx +++ b/src/base/components/inputs/SliderInput.tsx @@ -6,8 +6,10 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import Slider, { SliderProps } from '@mui/material/Slider'; -import Typography, { TypographyProps } from '@mui/material/Typography'; +import type { SliderProps } from '@mui/material/Slider'; +import Slider from '@mui/material/Slider'; +import type { TypographyProps } from '@mui/material/Typography'; +import Typography from '@mui/material/Typography'; import Stack from '@mui/material/Stack'; import { ResetButton } from '@/base/components/buttons/ResetButton.tsx'; diff --git a/src/base/components/inputs/SortRadioInput.tsx b/src/base/components/inputs/SortRadioInput.tsx index be857ea1..b61ce61b 100644 --- a/src/base/components/inputs/SortRadioInput.tsx +++ b/src/base/components/inputs/SortRadioInput.tsx @@ -9,7 +9,8 @@ import ArrowDownward from '@mui/icons-material/ArrowDownward'; import ArrowUpward from '@mui/icons-material/ArrowUpward'; import { memo } from 'react'; -import { RadioInput, RadioInputProps } from '@/base/components/inputs/RadioInput.tsx'; +import type { RadioInputProps } from '@/base/components/inputs/RadioInput.tsx'; +import { RadioInput } from '@/base/components/inputs/RadioInput.tsx'; interface IProps extends RadioInputProps { sortDescending?: boolean | null | undefined; diff --git a/src/base/components/inputs/ThreeStateCheckbox.tsx b/src/base/components/inputs/ThreeStateCheckbox.tsx index 00a0c410..105bf0d6 100644 --- a/src/base/components/inputs/ThreeStateCheckbox.tsx +++ b/src/base/components/inputs/ThreeStateCheckbox.tsx @@ -7,14 +7,19 @@ */ import DisabledByDefaultRounded from '@mui/icons-material/DisabledByDefaultRounded'; -import Checkbox, { CheckboxProps } from '@mui/material/Checkbox'; +import type { CheckboxProps } from '@mui/material/Checkbox'; +import Checkbox from '@mui/material/Checkbox'; import React, { useCallback } from 'react'; type CheckState = boolean | undefined | null; function nextState(state: CheckState): CheckState { - if (state === true) return false; - if (state === false) return undefined; + if (state === true) { + return false; + } + if (state === false) { + return undefined; + } return true; } diff --git a/src/base/components/inputs/ThreeStateCheckboxInput.tsx b/src/base/components/inputs/ThreeStateCheckboxInput.tsx index 1ef2e3bd..bf3432b9 100644 --- a/src/base/components/inputs/ThreeStateCheckboxInput.tsx +++ b/src/base/components/inputs/ThreeStateCheckboxInput.tsx @@ -8,7 +8,8 @@ import FormControlLabel from '@mui/material/FormControlLabel'; import React from 'react'; -import { ThreeStateCheckbox, ThreeStateCheckboxProps } from '@/base/components/inputs/ThreeStateCheckbox.tsx'; +import type { ThreeStateCheckboxProps } from '@/base/components/inputs/ThreeStateCheckbox.tsx'; +import { ThreeStateCheckbox } from '@/base/components/inputs/ThreeStateCheckbox.tsx'; interface IProps extends ThreeStateCheckboxProps { label?: string; diff --git a/src/base/components/lists/ListItemLink.tsx b/src/base/components/lists/ListItemLink.tsx index 7feed88c..fa8f5c53 100644 --- a/src/base/components/lists/ListItemLink.tsx +++ b/src/base/components/lists/ListItemLink.tsx @@ -7,7 +7,8 @@ */ import { Link } from 'react-router-dom'; -import ListItemButton, { ListItemButtonProps } from '@mui/material/ListItemButton'; +import type { ListItemButtonProps } from '@mui/material/ListItemButton'; +import ListItemButton from '@mui/material/ListItemButton'; export function ListItemLink(props: ListItemButtonProps) { return ; diff --git a/src/base/components/lists/cards/ListCardAvatar.tsx b/src/base/components/lists/cards/ListCardAvatar.tsx index 77fea4be..b6756b9e 100644 --- a/src/base/components/lists/cards/ListCardAvatar.tsx +++ b/src/base/components/lists/cards/ListCardAvatar.tsx @@ -6,7 +6,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { ComponentProps } from 'react'; +import type { ComponentProps } from 'react'; import { AvatarSpinner } from '@/base/components/AvatarSpinner.tsx'; export const ListCardAvatar = (props: ComponentProps) => { diff --git a/src/base/components/lists/cards/ListCardContent.tsx b/src/base/components/lists/cards/ListCardContent.tsx index cf9a59a4..3b7b69c7 100644 --- a/src/base/components/lists/cards/ListCardContent.tsx +++ b/src/base/components/lists/cards/ListCardContent.tsx @@ -6,7 +6,8 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import CardContent, { CardContentProps } from '@mui/material/CardContent'; +import type { CardContentProps } from '@mui/material/CardContent'; +import CardContent from '@mui/material/CardContent'; export const ListCardContent = ({ children, ...props }: CardContentProps) => ( { - if (!date) return; + if (!date) { + return; + } setDialogValue(date.valueOf().toString()); }} /> diff --git a/src/base/components/settings/MutableListSetting.tsx b/src/base/components/settings/MutableListSetting.tsx index 46b16f6c..c83ec00f 100644 --- a/src/base/components/settings/MutableListSetting.tsx +++ b/src/base/components/settings/MutableListSetting.tsx @@ -24,7 +24,8 @@ import DialogContentText from '@mui/material/DialogContentText'; import InfoIcon from '@mui/icons-material/Info'; import { useLingui } from '@lingui/react/macro'; import { CustomTooltip } from '@/base/components/CustomTooltip.tsx'; -import { TextSetting, TextSettingProps } from '@/base/components/settings/text/TextSetting.tsx'; +import type { TextSettingProps } from '@/base/components/settings/text/TextSetting.tsx'; +import { TextSetting } from '@/base/components/settings/text/TextSetting.tsx'; import { TextSettingDialog } from '@/base/components/settings/text/TextSettingDialog.tsx'; import { makeToast } from '@/base/utils/Toast.ts'; diff --git a/src/base/components/settings/NumberSetting.tsx b/src/base/components/settings/NumberSetting.tsx index 3298b6e8..cc8742d9 100644 --- a/src/base/components/settings/NumberSetting.tsx +++ b/src/base/components/settings/NumberSetting.tsx @@ -23,7 +23,7 @@ import ListItemIcon from '@mui/material/ListItemIcon'; import Slider from '@mui/material/Slider'; import DialogContentText from '@mui/material/DialogContentText'; import InfoIcon from '@mui/icons-material/Info'; -import { SxProps, Theme } from '@mui/material/styles'; +import type { SxProps, Theme } from '@mui/material/styles'; import { useLingui } from '@lingui/react/macro'; type BaseProps = { diff --git a/src/base/components/settings/SelectSetting.tsx b/src/base/components/settings/SelectSetting.tsx index 73ce0df2..a8ddf8e8 100644 --- a/src/base/components/settings/SelectSetting.tsx +++ b/src/base/components/settings/SelectSetting.tsx @@ -6,7 +6,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { MessageDescriptor } from '@lingui/core'; +import type { MessageDescriptor } from '@lingui/core'; import Button from '@mui/material/Button'; import Dialog from '@mui/material/Dialog'; import DialogTitle from '@mui/material/DialogTitle'; diff --git a/src/base/components/settings/text/TextSetting.tsx b/src/base/components/settings/text/TextSetting.tsx index 06706ada..5b5202c1 100644 --- a/src/base/components/settings/text/TextSetting.tsx +++ b/src/base/components/settings/text/TextSetting.tsx @@ -9,7 +9,8 @@ import ListItemText from '@mui/material/ListItemText'; import ListItemButton from '@mui/material/ListItemButton'; import { useState } from 'react'; -import { TextSettingDialog, TextSettingDialogProps } from '@/base/components/settings/text/TextSettingDialog.tsx'; +import type { TextSettingDialogProps } from '@/base/components/settings/text/TextSettingDialog.tsx'; +import { TextSettingDialog } from '@/base/components/settings/text/TextSettingDialog.tsx'; export type TextSettingProps = Omit & Required> & { @@ -27,7 +28,7 @@ export const TextSetting = (props: TextSettingProps) => { setIsDialogOpen(true)}> ( diff --git a/src/base/components/texts/Metadata.tsx b/src/base/components/texts/Metadata.tsx index 3b54e212..9a4a4107 100644 --- a/src/base/components/texts/Metadata.tsx +++ b/src/base/components/texts/Metadata.tsx @@ -6,9 +6,11 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import Stack, { StackProps } from '@mui/material/Stack'; -import Typography, { TypographyProps } from '@mui/material/Typography'; -import { ReactNode } from 'react'; +import type { StackProps } from '@mui/material/Stack'; +import Stack from '@mui/material/Stack'; +import type { TypographyProps } from '@mui/material/Typography'; +import Typography from '@mui/material/Typography'; +import type { ReactNode } from 'react'; export const Metadata = ({ title, diff --git a/src/base/components/texts/TypographyMaxLines.tsx b/src/base/components/texts/TypographyMaxLines.tsx index 9cd5bcbd..4ba720e8 100644 --- a/src/base/components/texts/TypographyMaxLines.tsx +++ b/src/base/components/texts/TypographyMaxLines.tsx @@ -6,8 +6,10 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { styled, Theme, TypographyVariant } from '@mui/material/styles'; -import Typography, { TypographyProps } from '@mui/material/Typography'; +import type { Theme, TypographyVariant } from '@mui/material/styles'; +import { styled } from '@mui/material/styles'; +import type { TypographyProps } from '@mui/material/Typography'; +import Typography from '@mui/material/Typography'; import { shouldForwardProp } from '@/base/utils/ShouldForwardProp.ts'; const DEFAULT_LINE_HEIGHT = '1.5'; diff --git a/src/base/components/virtuoso/StyledGroupHeader.tsx b/src/base/components/virtuoso/StyledGroupHeader.tsx index 204047c7..957401a6 100644 --- a/src/base/components/virtuoso/StyledGroupHeader.tsx +++ b/src/base/components/virtuoso/StyledGroupHeader.tsx @@ -7,7 +7,7 @@ */ import { styled } from '@mui/material/styles'; -import { TypographyProps } from '@mui/material/Typography'; +import type { TypographyProps } from '@mui/material/Typography'; import Stack from '@mui/material/Stack'; import { shouldForwardProp } from '@/base/utils/ShouldForwardProp.ts'; diff --git a/src/base/components/virtuoso/StyledGroupedVirtuoso.tsx b/src/base/components/virtuoso/StyledGroupedVirtuoso.tsx index f4a85a32..6c656f83 100644 --- a/src/base/components/virtuoso/StyledGroupedVirtuoso.tsx +++ b/src/base/components/virtuoso/StyledGroupedVirtuoso.tsx @@ -6,8 +6,9 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { ContextProp, TopItemListProps } from 'react-virtuoso'; -import { ComponentProps, useMemo } from 'react'; +import type { ContextProp, TopItemListProps } from 'react-virtuoso'; +import type { ComponentProps } from 'react'; +import { useMemo } from 'react'; import Box from '@mui/material/Box'; import { useNavBarContext } from '@/features/navigation-bar/NavbarContext.tsx'; import { GroupedVirtuosoPersisted } from '@/lib/virtuoso/Component/GroupedVirtuosoPersisted.tsx'; diff --git a/src/base/hoc/withPropsFrom.tsx b/src/base/hoc/withPropsFrom.tsx index 5a2b45fe..d36e2778 100644 --- a/src/base/hoc/withPropsFrom.tsx +++ b/src/base/hoc/withPropsFrom.tsx @@ -6,7 +6,8 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { ComponentType, memo, Ref } from 'react'; +import type { ComponentType, Ref } from 'react'; +import { memo } from 'react'; type PropsSourceCreator> = (props: Props) => T; diff --git a/src/base/hooks/useAutomaticScrolling.ts b/src/base/hooks/useAutomaticScrolling.ts index 72fc0b7c..038eae7d 100644 --- a/src/base/hooks/useAutomaticScrolling.ts +++ b/src/base/hooks/useAutomaticScrolling.ts @@ -6,7 +6,8 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { MutableRefObject, useCallback, useEffect, useMemo, useRef, useState } from 'react'; +import type { MutableRefObject } from 'react'; +import { useCallback, useEffect, useMemo, useRef, useState } from 'react'; import { ScrollDirection } from '@/base/Base.types.ts'; import { useResizeObserver } from '@/base/hooks/useResizeObserver.tsx'; diff --git a/src/base/hooks/useIntersectionObserver.tsx b/src/base/hooks/useIntersectionObserver.tsx index d17e9feb..d30ddde5 100644 --- a/src/base/hooks/useIntersectionObserver.tsx +++ b/src/base/hooks/useIntersectionObserver.tsx @@ -6,7 +6,8 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { RefObject, useLayoutEffect, useState } from 'react'; +import type { RefObject } from 'react'; +import { useLayoutEffect, useState } from 'react'; export const useIntersectionObserver = ( ref: RefObject | HTMLElement | undefined | null, diff --git a/src/base/hooks/useMouseDragScroll.tsx b/src/base/hooks/useMouseDragScroll.tsx index 7dcc0821..edda3b04 100644 --- a/src/base/hooks/useMouseDragScroll.tsx +++ b/src/base/hooks/useMouseDragScroll.tsx @@ -12,7 +12,8 @@ * https://github.com/utsb-fmm/MobileLikeScroller/blob/main/mobilelikescroller.js */ -import { MutableRefObject, useEffect, useRef, useState } from 'react'; +import type { MutableRefObject } from 'react'; +import { useEffect, useRef, useState } from 'react'; import { ScrollDirection } from '@/base/Base.types.ts'; import { coerceIn } from '@/lib/HelperFunctions.ts'; diff --git a/src/base/hooks/useResizeObserver.tsx b/src/base/hooks/useResizeObserver.tsx index da138693..2f0e9169 100644 --- a/src/base/hooks/useResizeObserver.tsx +++ b/src/base/hooks/useResizeObserver.tsx @@ -6,7 +6,8 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { RefObject, useLayoutEffect, useState } from 'react'; +import type { RefObject } from 'react'; +import { useLayoutEffect, useState } from 'react'; export const useResizeObserver = ( ref: RefObject | HTMLElement | undefined | null, diff --git a/src/base/hooks/useStorage.tsx b/src/base/hooks/useStorage.tsx index bac98234..6b525102 100644 --- a/src/base/hooks/useStorage.tsx +++ b/src/base/hooks/useStorage.tsx @@ -6,8 +6,10 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { Dispatch, Reducer, SetStateAction, useCallback, useMemo, useReducer, useSyncExternalStore } from 'react'; -import { AppStorage, Storage } from '@/lib/storage/AppStorage.ts'; +import type { Dispatch, Reducer, SetStateAction } from 'react'; +import { useCallback, useMemo, useReducer, useSyncExternalStore } from 'react'; +import type { Storage } from '@/lib/storage/AppStorage.ts'; +import { AppStorage } from '@/lib/storage/AppStorage.ts'; import { jsonSaveParse } from '@/lib/HelperFunctions.ts'; const subscribeToStorageUpdates = (callback: () => void) => { diff --git a/src/base/utils/ApplyStyles.ts b/src/base/utils/ApplyStyles.ts index 12fb13e7..835e9b76 100644 --- a/src/base/utils/ApplyStyles.ts +++ b/src/base/utils/ApplyStyles.ts @@ -6,7 +6,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { Theme } from '@mui/material/styles'; +import type { Theme } from '@mui/material/styles'; // use CSSObject instead of SxProps because this completely fucks over typescript by causing an out of memory error during compilation type CSSObject = ReturnType; diff --git a/src/base/utils/DateHelper.ts b/src/base/utils/DateHelper.ts index 680d9281..4fb8664a 100644 --- a/src/base/utils/DateHelper.ts +++ b/src/base/utils/DateHelper.ts @@ -6,7 +6,8 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import dayjs, { Dayjs } from 'dayjs'; +import type { Dayjs } from 'dayjs'; +import dayjs from 'dayjs'; import { t } from '@lingui/core/macro'; export const timeFormatter = new Intl.DateTimeFormat(navigator.language, { hour: '2-digit', minute: '2-digit' }); diff --git a/src/base/utils/Languages.ts b/src/base/utils/Languages.ts index f75319c5..97ec92a4 100644 --- a/src/base/utils/Languages.ts +++ b/src/base/utils/Languages.ts @@ -6,10 +6,11 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { MessageDescriptor } from '@lingui/core'; +import type { MessageDescriptor } from '@lingui/core'; import { msg, t } from '@lingui/core/macro'; -import { getISOLanguage, getPreferredISOLanguageCodes, LanguageObject } from '@/lib/ISOLanguageUtil.ts'; +import type { LanguageObject } from '@/lib/ISOLanguageUtil.ts'; +import { getISOLanguage, getPreferredISOLanguageCodes } from '@/lib/ISOLanguageUtil.ts'; import { i18n } from '@/i18n'; diff --git a/src/base/utils/MediaQuery.tsx b/src/base/utils/MediaQuery.tsx index 9ccf3a07..82015e3e 100644 --- a/src/base/utils/MediaQuery.tsx +++ b/src/base/utils/MediaQuery.tsx @@ -7,7 +7,7 @@ */ import useMediaQuery from '@mui/material/useMediaQuery'; -import { Breakpoint, SxProps, Theme } from '@mui/material/styles'; +import type { Breakpoint, SxProps, Theme } from '@mui/material/styles'; import { useCallback, useState } from 'react'; import { getCurrentTheme } from '@/features/theme/services/ThemeCreator.ts'; import { useResizeObserver } from '@/base/hooks/useResizeObserver.tsx'; diff --git a/src/base/utils/Strings.ts b/src/base/utils/Strings.ts index 348e0b24..52d4d4d7 100644 --- a/src/base/utils/Strings.ts +++ b/src/base/utils/Strings.ts @@ -11,7 +11,7 @@ export const baseCleanup = (str: string) => str.toLowerCase().trim(); export const enhancedCleanup = (str: string): string => baseCleanup(str) .normalize('NFKC') - .replace(/[^\p{L}\p{N}]+/gu, ' ') + .replaceAll(/[^\p{L}\p{N}]+/gu, ' ') .trim(); export const reverseString = (str: string, separator: string = ''): string => diff --git a/src/base/utils/Toast.ts b/src/base/utils/Toast.ts index 94fd4407..76642d6d 100644 --- a/src/base/utils/Toast.ts +++ b/src/base/utils/Toast.ts @@ -6,7 +6,8 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { enqueueSnackbar, OptionsObject, SnackbarKey } from 'notistack'; +import type { OptionsObject, SnackbarKey } from 'notistack'; +import { enqueueSnackbar } from 'notistack'; export function makeToast(message: string, severity?: OptionsObject['variant'], description?: string): SnackbarKey; export function makeToast(message: string, options?: OptionsObject, description?: string): SnackbarKey; diff --git a/src/base/utils/cloneObject.tsx b/src/base/utils/cloneObject.tsx index 2f7cfbbf..8eee09e3 100644 --- a/src/base/utils/cloneObject.tsx +++ b/src/base/utils/cloneObject.tsx @@ -7,5 +7,5 @@ */ export function cloneObject(obj: T) { - return JSON.parse(JSON.stringify(obj)) as T; + return structuredClone(obj); } diff --git a/src/features/app-updates/components/WebUIUpdateChecker.tsx b/src/features/app-updates/components/WebUIUpdateChecker.tsx index b057720c..83dd0f4d 100644 --- a/src/features/app-updates/components/WebUIUpdateChecker.tsx +++ b/src/features/app-updates/components/WebUIUpdateChecker.tsx @@ -15,7 +15,8 @@ import DialogActions from '@mui/material/DialogActions'; import Button from '@mui/material/Button'; import { useLingui } from '@lingui/react/macro'; import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts'; -import { UpdateState, WebUiChannel, WebUiUpdateStatus } from '@/lib/graphql/generated/graphql.ts'; +import type { WebUiUpdateStatus } from '@/lib/graphql/generated/graphql.ts'; +import { UpdateState, WebUiChannel } from '@/lib/graphql/generated/graphql.ts'; import { useLocalStorage, useSessionStorage } from '@/base/hooks/useStorage.tsx'; import { requestManager } from '@/lib/requests/RequestManager.ts'; import { makeToast } from '@/base/utils/Toast.ts'; diff --git a/src/features/authentication/components/AuthGuard.tsx b/src/features/authentication/components/AuthGuard.tsx index 7d291e71..9138127c 100644 --- a/src/features/authentication/components/AuthGuard.tsx +++ b/src/features/authentication/components/AuthGuard.tsx @@ -6,7 +6,8 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { ReactNode, useEffect } from 'react'; +import type { ReactNode } from 'react'; +import { useEffect } from 'react'; import { SplashScreen } from '@/features/authentication/components/SplashScreen.tsx'; import { requestManager } from '@/lib/requests/RequestManager.ts'; import { AuthManager } from '@/features/authentication/AuthManager.ts'; diff --git a/src/features/authentication/components/SplashScreen.tsx b/src/features/authentication/components/SplashScreen.tsx index e5548cf7..cd9140e0 100644 --- a/src/features/authentication/components/SplashScreen.tsx +++ b/src/features/authentication/components/SplashScreen.tsx @@ -7,8 +7,9 @@ */ import { useTheme } from '@mui/material/styles'; -import Stack, { StackProps } from '@mui/material/Stack'; -import { ComponentProps } from 'react'; +import type { StackProps } from '@mui/material/Stack'; +import Stack from '@mui/material/Stack'; +import type { ComponentProps } from 'react'; import { SuwayomiLogo } from '@/assets/SuwayomiLogo.tsx'; import { ServerAddressSetting } from '@/features/settings/components/ServerAddressSetting.tsx'; diff --git a/src/features/backup/Backup.constants.ts b/src/features/backup/Backup.constants.ts index bdea8bb4..1f8359f8 100644 --- a/src/features/backup/Backup.constants.ts +++ b/src/features/backup/Backup.constants.ts @@ -6,9 +6,10 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { MessageDescriptor } from '@lingui/core'; +import type { MessageDescriptor } from '@lingui/core'; import { msg } from '@lingui/core/macro'; -import { BackupFlag, BackupFlagGroup } from '@/features/backup/Backup.types.ts'; +import type { BackupFlag } from '@/features/backup/Backup.types.ts'; +import { BackupFlagGroup } from '@/features/backup/Backup.types.ts'; export const BACKUP_FLAGS_TO_TRANSLATION: Record = { includeManga: msg`Library entries`, diff --git a/src/features/backup/Backup.types.ts b/src/features/backup/Backup.types.ts index 0acbde1e..919f37e3 100644 --- a/src/features/backup/Backup.types.ts +++ b/src/features/backup/Backup.types.ts @@ -6,8 +6,8 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { PartialBackupFlagsInput } from '@/lib/graphql/generated/graphql.ts'; -import { ServerSettings } from '@/features/settings/Settings.types.ts'; +import type { PartialBackupFlagsInput } from '@/lib/graphql/generated/graphql.ts'; +import type { ServerSettings } from '@/features/settings/Settings.types.ts'; export enum BackupFlagGroup { LIBRARY = 'library', diff --git a/src/features/backup/Backup.utils.ts b/src/features/backup/Backup.utils.ts index 73149627..96ac96fa 100644 --- a/src/features/backup/Backup.utils.ts +++ b/src/features/backup/Backup.utils.ts @@ -7,7 +7,11 @@ */ import { plural, t } from '@lingui/core/macro'; -import { AutoBackupFlagInclusionState, BackupFlag, BackupFlagInclusionState } from '@/features/backup/Backup.types.ts'; +import type { + AutoBackupFlagInclusionState, + BackupFlag, + BackupFlagInclusionState, +} from '@/features/backup/Backup.types.ts'; import { BACKUP_FLAGS_TO_TRANSLATION } from '@/features/backup/Backup.constants.ts'; export const convertToAutoBackupFlags = (flags: BackupFlagInclusionState): AutoBackupFlagInclusionState => ({ diff --git a/src/features/backup/component/BackupFlagInclusionDialog.tsx b/src/features/backup/component/BackupFlagInclusionDialog.tsx index e926f22f..fbb45f2e 100644 --- a/src/features/backup/component/BackupFlagInclusionDialog.tsx +++ b/src/features/backup/component/BackupFlagInclusionDialog.tsx @@ -15,7 +15,7 @@ import { useState } from 'react'; import Button from '@mui/material/Button'; import Stack from '@mui/material/Stack'; import Typography from '@mui/material/Typography'; -import { AwaitableComponentProps } from 'awaitable-component'; +import type { AwaitableComponentProps } from 'awaitable-component'; import { useLingui } from '@lingui/react/macro'; import { CheckboxInput } from '@/base/components/inputs/CheckboxInput.tsx'; import { @@ -24,7 +24,7 @@ import { BACKUP_FLAGS_BY_GROUP, BACKUP_FLAGS_TO_TRANSLATION, } from '@/features/backup/Backup.constants.ts'; -import { BackupFlagGroup, BackupFlagInclusionState } from '@/features/backup/Backup.types.ts'; +import type { BackupFlagGroup, BackupFlagInclusionState } from '@/features/backup/Backup.types.ts'; export const BackupFlagInclusionDialog = ({ onDismiss, diff --git a/src/features/backup/component/BackupValidationDialog.tsx b/src/features/backup/component/BackupValidationDialog.tsx index 025bde48..ffa050e7 100644 --- a/src/features/backup/component/BackupValidationDialog.tsx +++ b/src/features/backup/component/BackupValidationDialog.tsx @@ -15,11 +15,11 @@ import Button from '@mui/material/Button'; import ListItem from '@mui/material/ListItem'; import { Link } from 'react-router-dom'; import Stack from '@mui/material/Stack'; -import { AwaitableComponentProps } from 'awaitable-component'; +import type { AwaitableComponentProps } from 'awaitable-component'; import { useLingui } from '@lingui/react/macro'; import { BrowseTab } from '@/features/browse/Browse.types.ts'; import { AppRoutes } from '@/base/AppRoute.constants.ts'; -import { ValidateBackupResult } from '@/lib/graphql/generated/graphql.ts'; +import type { ValidateBackupResult } from '@/lib/graphql/generated/graphql.ts'; export const BackupValidationDialog = ({ validationResult, diff --git a/src/features/backup/screens/Backup.tsx b/src/features/backup/screens/Backup.tsx index 4e333494..48ad1f91 100644 --- a/src/features/backup/screens/Backup.tsx +++ b/src/features/backup/screens/Backup.tsx @@ -37,10 +37,17 @@ import { getAutoBackupFlagsInfo, getBackupCleanupDisplayValue, } from '@/features/backup/Backup.utils.ts'; -import { BackupSettingsType } from '@/features/backup/Backup.types.ts'; +import type { BackupSettingsType } from '@/features/backup/Backup.types.ts'; let backupRestoreId: string | undefined; +const resetBackupState = () => { + const input = document.getElementById('backup-file') as HTMLInputElement; + if (input) { + input.value = ''; + } +}; + export function Backup() { const { t } = useLingui(); @@ -113,13 +120,6 @@ export function Backup() { } }, [data?.restoreStatus?.state]); - const resetBackupState = () => { - const input = document.getElementById('backup-file') as HTMLInputElement; - if (input) { - input.value = ''; - } - }; - const createBackup = async () => { const flags = await AwaitableComponent.show(BackupFlagInclusionDialog, { title: t`Create backup`, diff --git a/src/features/browse/Browse.types.ts b/src/features/browse/Browse.types.ts index 23ded639..abbc0376 100644 --- a/src/features/browse/Browse.types.ts +++ b/src/features/browse/Browse.types.ts @@ -6,7 +6,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { SourceIdInfo } from '@/features/source/Source.types.ts'; +import type { SourceIdInfo } from '@/features/source/Source.types.ts'; export type MetadataBrowseSettings = { hideLibraryEntries: boolean; diff --git a/src/features/browse/extensions/Extensions.tsx b/src/features/browse/extensions/Extensions.tsx index 01d93d0c..c457a27a 100644 --- a/src/features/browse/extensions/Extensions.tsx +++ b/src/features/browse/extensions/Extensions.tsx @@ -36,12 +36,8 @@ import { translateExtensionLanguage, filterExtensions, } from '@/features/extension/Extensions.utils.ts'; -import { - ExtensionAction, - ExtensionGroupState, - ExtensionState, - TExtension, -} from '@/features/extension/Extensions.types.ts'; +import type { TExtension } from '@/features/extension/Extensions.types.ts'; +import { ExtensionAction, ExtensionGroupState, ExtensionState } from '@/features/extension/Extensions.types.ts'; import { EXTENSION_ACTION_TO_FAILURE_TRANSLATION_MAP } from '@/features/extension/Extensions.constants.ts'; import { AppRoutes } from '@/base/AppRoute.constants.ts'; import { getErrorMessage } from '@/lib/HelperFunctions.ts'; @@ -49,7 +45,7 @@ import { createUpdateMetadataServerSettings, useMetadataServerSettings, } from '@/features/settings/services/ServerSettingsMetadata.ts'; -import { MetadataBrowseSettings } from '@/features/browse/Browse.types.ts'; +import type { MetadataBrowseSettings } from '@/features/browse/Browse.types.ts'; import { useAppAction } from '@/features/navigation-bar/hooks/useAppAction.ts'; import { SearchParam } from '@/base/Base.types.ts'; import { i18n } from '@/i18n'; @@ -159,7 +155,7 @@ export function Extensions({ tabsMenuHeight }: { tabsMenuHeight: number }) { [groupedExtensions], ); const visibleExtensions = useMemo( - () => groupedExtensions.map(([, extensions]) => extensions).flat(1), + () => groupedExtensions.flatMap(([, extensions]) => extensions), [groupedExtensions], ); diff --git a/src/features/browse/extensions/components/ExtensionCard.tsx b/src/features/browse/extensions/components/ExtensionCard.tsx index 9bb619cc..cfa2014d 100644 --- a/src/features/browse/extensions/components/ExtensionCard.tsx +++ b/src/features/browse/extensions/components/ExtensionCard.tsx @@ -16,13 +16,8 @@ import Stack from '@mui/material/Stack'; import { useLingui } from '@lingui/react/macro'; import { requestManager } from '@/lib/requests/RequestManager.ts'; import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts'; -import { - ExtensionAction, - ExtensionState, - InstalledState, - InstalledStates, - TExtension, -} from '@/features/extension/Extensions.types.ts'; +import type { InstalledStates, TExtension } from '@/features/extension/Extensions.types.ts'; +import { ExtensionAction, ExtensionState, InstalledState } from '@/features/extension/Extensions.types.ts'; import { EXTENSION_ACTION_TO_NEXT_ACTION_MAP, EXTENSION_ACTION_TO_STATE_MAP, diff --git a/src/features/browse/screens/BrowseSettings.tsx b/src/features/browse/screens/BrowseSettings.tsx index 384a1a9d..b9a4361d 100644 --- a/src/features/browse/screens/BrowseSettings.tsx +++ b/src/features/browse/screens/BrowseSettings.tsx @@ -24,8 +24,8 @@ import { LoadingPlaceholder } from '@/base/components/feedback/LoadingPlaceholde import { EmptyViewAbsoluteCentered } from '@/base/components/feedback/EmptyViewAbsoluteCentered.tsx'; import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts'; import { makeToast } from '@/base/utils/Toast.ts'; -import { MetadataBrowseSettings } from '@/features/browse/Browse.types.ts'; -import { ServerSettings as GqlServerSettings } from '@/features/settings/Settings.types.ts'; +import type { MetadataBrowseSettings } from '@/features/browse/Browse.types.ts'; +import type { ServerSettings as GqlServerSettings } from '@/features/settings/Settings.types.ts'; import { getErrorMessage } from '@/lib/HelperFunctions.ts'; import { useAppTitle } from '@/features/navigation-bar/hooks/useAppTitle.ts'; diff --git a/src/features/browse/sources/Sources.tsx b/src/features/browse/sources/Sources.tsx index 86c27a3f..62650071 100644 --- a/src/features/browse/sources/Sources.tsx +++ b/src/features/browse/sources/Sources.tsx @@ -89,7 +89,7 @@ export function Sources({ tabsMenuHeight }: { tabsMenuHeight: number }) { [filteredSources], ); const visibleSources = useMemo( - () => sourcesByLanguage.map(([, sourcesOfLanguage]) => sourcesOfLanguage).flat(1), + () => sourcesByLanguage.flatMap(([, sourcesOfLanguage]) => sourcesOfLanguage), [sourcesByLanguage], ); @@ -125,7 +125,9 @@ export function Sources({ tabsMenuHeight }: { tabsMenuHeight: number }) { [t, shownLangs, sourceLanguages, sourcesForLanguageFilter], ); - if (isLoading) return ; + if (isLoading) { + return ; + } if (error) { return ( diff --git a/src/features/browse/sources/components/SourceCard.tsx b/src/features/browse/sources/components/SourceCard.tsx index ab2b46da..b64b6447 100644 --- a/src/features/browse/sources/components/SourceCard.tsx +++ b/src/features/browse/sources/components/SourceCard.tsx @@ -19,7 +19,7 @@ import IconButton from '@mui/material/IconButton'; import { useLingui } from '@lingui/react/macro'; import { requestManager } from '@/lib/requests/RequestManager.ts'; import { SourceContentType } from '@/features/source/browse/screens/SourceMangas.tsx'; -import { GetSourcesListQuery } from '@/lib/graphql/generated/graphql.ts'; +import type { GetSourcesListQuery } from '@/lib/graphql/generated/graphql.ts'; import { AppRoutes } from '@/base/AppRoute.constants.ts'; import { MUIUtil } from '@/lib/mui/MUI.util.ts'; import { Sources } from '@/features/source/services/Sources.ts'; diff --git a/src/features/category/Category.types.ts b/src/features/category/Category.types.ts index 187bae56..217906fb 100644 --- a/src/features/category/Category.types.ts +++ b/src/features/category/Category.types.ts @@ -6,10 +6,10 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { LibraryOptions } from '@/features/library/Library.types.ts'; -import { CategoryMetaType, CategoryType } from '@/lib/graphql/generated/graphql.ts'; +import type { LibraryOptions } from '@/features/library/Library.types.ts'; +import type { CategoryMetaType, CategoryType } from '@/lib/graphql/generated/graphql.ts'; -export interface ICategoryMetadata extends LibraryOptions {} +export type ICategoryMetadata = LibraryOptions; export type CategoryMetadataKeys = keyof ICategoryMetadata; diff --git a/src/features/category/components/CategoriesInclusionSetting.tsx b/src/features/category/components/CategoriesInclusionSetting.tsx index 5899f2f4..fb0cd6ad 100644 --- a/src/features/category/components/CategoriesInclusionSetting.tsx +++ b/src/features/category/components/CategoriesInclusionSetting.tsx @@ -22,7 +22,7 @@ import { makeToast } from '@/base/utils/Toast.ts'; import { IncludeOrExclude } from '@/lib/graphql/generated/graphql.ts'; import { requestManager } from '@/lib/requests/RequestManager.ts'; import { CheckboxContainer } from '@/base/components/inputs/CheckboxContainer.ts'; -import { +import type { CategoryDownloadInclusionInfo, CategoryIdInfo, CategoryNameInfo, diff --git a/src/features/category/components/CategorySelect.tsx b/src/features/category/components/CategorySelect.tsx index 2bbb8a87..8749ac98 100644 --- a/src/features/category/components/CategorySelect.tsx +++ b/src/features/category/components/CategorySelect.tsx @@ -15,7 +15,7 @@ import Dialog from '@mui/material/Dialog'; import FormGroup from '@mui/material/FormGroup'; import { Link } from 'react-router-dom'; import Stack from '@mui/material/Stack'; -import { AwaitableComponentProps } from 'awaitable-component'; +import type { AwaitableComponentProps } from 'awaitable-component'; import { useLingui } from '@lingui/react/macro'; import { requestManager } from '@/lib/requests/RequestManager.ts'; import { Mangas } from '@/features/manga/services/Mangas.ts'; @@ -26,7 +26,7 @@ import { CheckboxInput } from '@/base/components/inputs/CheckboxInput.tsx'; import { makeToast } from '@/base/utils/Toast.ts'; import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts'; import { updateMetadataServerSettings } from '@/features/settings/services/ServerSettingsMetadata.ts'; -import { +import type { GetCategoriesBaseQuery, GetCategoriesBaseQueryVariables, GetMangaCategoriesQuery, diff --git a/src/features/category/components/CategorySettingsCard.tsx b/src/features/category/components/CategorySettingsCard.tsx index bb8e16fb..f472e406 100644 --- a/src/features/category/components/CategorySettingsCard.tsx +++ b/src/features/category/components/CategorySettingsCard.tsx @@ -17,7 +17,7 @@ import Typography from '@mui/material/Typography'; import { useLingui } from '@lingui/react/macro'; import { CustomTooltip } from '@/base/components/CustomTooltip.tsx'; import { requestManager } from '@/lib/requests/RequestManager.ts'; -import { CategoryType } from '@/lib/graphql/generated/graphql.ts'; +import type { CategoryType } from '@/lib/graphql/generated/graphql.ts'; import { ListCardContent } from '@/base/components/lists/cards/ListCardContent.tsx'; export const CategorySettingsCard = ({ diff --git a/src/features/category/components/CreateOrEditCategoryDialog.tsx b/src/features/category/components/CreateOrEditCategoryDialog.tsx index 1396064c..9ef5ec88 100644 --- a/src/features/category/components/CreateOrEditCategoryDialog.tsx +++ b/src/features/category/components/CreateOrEditCategoryDialog.tsx @@ -17,7 +17,7 @@ import Checkbox from '@mui/material/Checkbox'; import FormControlLabel from '@mui/material/FormControlLabel'; import { useLingui } from '@lingui/react/macro'; import { requestManager } from '@/lib/requests/RequestManager.ts'; -import { CategoryDefaultInfo, CategoryIdInfo, CategoryNameInfo } from '@/features/category/Category.types.ts'; +import type { CategoryDefaultInfo, CategoryIdInfo, CategoryNameInfo } from '@/features/category/Category.types.ts'; import { getErrorMessage } from '@/lib/HelperFunctions.ts'; import { makeToast } from '@/base/utils/Toast.ts'; import { assertIsDefined } from '@/base/Asserts.ts'; diff --git a/src/features/category/screens/CategorySettings.tsx b/src/features/category/screens/CategorySettings.tsx index d00417b6..50e6033a 100644 --- a/src/features/category/screens/CategorySettings.tsx +++ b/src/features/category/screens/CategorySettings.tsx @@ -6,11 +6,13 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { ComponentProps, useMemo, useState } from 'react'; +import type { ComponentProps } from 'react'; +import { useMemo, useState } from 'react'; import Fab from '@mui/material/Fab'; import AddIcon from '@mui/icons-material/Add'; import Box from '@mui/material/Box'; -import { closestCenter, DndContext, DragEndEvent } from '@dnd-kit/core'; +import type { DragEndEvent } from '@dnd-kit/core'; +import { closestCenter, DndContext } from '@dnd-kit/core'; import { SortableContext, verticalListSortingStrategy } from '@dnd-kit/sortable'; import { useLingui } from '@lingui/react/macro'; import { requestManager } from '@/lib/requests/RequestManager.ts'; @@ -18,10 +20,13 @@ import { DEFAULT_FULL_FAB_HEIGHT } from '@/base/components/buttons/StyledFab.tsx import { LoadingPlaceholder } from '@/base/components/feedback/LoadingPlaceholder.tsx'; import { EmptyViewAbsoluteCentered } from '@/base/components/feedback/EmptyViewAbsoluteCentered.tsx'; import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts'; -import { GetCategoriesSettingsQuery, GetCategoriesSettingsQueryVariables } from '@/lib/graphql/generated/graphql.ts'; +import type { + GetCategoriesSettingsQuery, + GetCategoriesSettingsQueryVariables, +} from '@/lib/graphql/generated/graphql.ts'; import { GET_CATEGORIES_SETTINGS } from '@/lib/graphql/category/CategoryQuery.ts'; import { CategorySettingsCard } from '@/features/category/components/CategorySettingsCard.tsx'; -import { CategoryIdInfo } from '@/features/category/Category.types.ts'; +import type { CategoryIdInfo } from '@/features/category/Category.types.ts'; import { getErrorMessage, noOp } from '@/lib/HelperFunctions.ts'; import { DndSortableItem } from '@/lib/dnd-kit/DndSortableItem.tsx'; import { DndKitUtil } from '@/lib/dnd-kit/DndKitUtil.ts'; diff --git a/src/features/category/services/Categories.ts b/src/features/category/services/Categories.ts index 69ee8198..a2ed38b4 100644 --- a/src/features/category/services/Categories.ts +++ b/src/features/category/services/Categories.ts @@ -6,7 +6,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { CategoryDefaultInfo, CategoryIdInfo } from '@/features/category/Category.types.ts'; +import type { CategoryDefaultInfo, CategoryIdInfo } from '@/features/category/Category.types.ts'; export const DEFAULT_CATEGORY_ID = 0; diff --git a/src/features/category/services/CategoryMetadata.ts b/src/features/category/services/CategoryMetadata.ts index 9f8aec9e..ec942c04 100644 --- a/src/features/category/services/CategoryMetadata.ts +++ b/src/features/category/services/CategoryMetadata.ts @@ -12,11 +12,11 @@ import { requestBatchCategoryMetadataUpdate, } from '@/features/metadata/services/MetadataUpdater.ts'; import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts'; -import { LibraryOptions } from '@/features/library/Library.types.ts'; -import { CategoryIdInfo, CategoryMetadataKeys, ICategoryMetadata } from '@/features/category/Category.types.ts'; +import type { LibraryOptions } from '@/features/library/Library.types.ts'; +import type { CategoryIdInfo, CategoryMetadataKeys, ICategoryMetadata } from '@/features/category/Category.types.ts'; import { convertFromGqlMeta } from '@/features/metadata/services/MetadataConverter.ts'; import { getMetadataFrom } from '@/features/metadata/services/MetadataReader.ts'; -import { +import type { AllowedMetadataValueTypes, GqlMetaHolder, Metadata, diff --git a/src/features/chapter/Chapter.constants.ts b/src/features/chapter/Chapter.constants.ts index ee5b1505..25d0f2f3 100644 --- a/src/features/chapter/Chapter.constants.ts +++ b/src/features/chapter/Chapter.constants.ts @@ -6,9 +6,9 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { MessageDescriptor } from '@lingui/core'; +import type { MessageDescriptor } from '@lingui/core'; import { msg } from '@lingui/core/macro'; -import { ChapterAction, ChapterListOptions, ChapterSortMode } from '@/features/chapter/Chapter.types.ts'; +import type { ChapterAction, ChapterListOptions, ChapterSortMode } from '@/features/chapter/Chapter.types.ts'; export const FALLBACK_CHAPTER = { id: -1, name: '', realUrl: '', isDownloaded: false, isBookmarked: false }; diff --git a/src/features/chapter/Chapter.types.ts b/src/features/chapter/Chapter.types.ts index 26ec4643..fcf0cf79 100644 --- a/src/features/chapter/Chapter.types.ts +++ b/src/features/chapter/Chapter.types.ts @@ -6,7 +6,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { +import type { ChapterReaderFieldsFragment, ChapterType, DownloadStatusFieldsFragment, diff --git a/src/features/chapter/components/ChapterExcludeSanlatorsFilter.tsx b/src/features/chapter/components/ChapterExcludeSanlatorsFilter.tsx index fd886be7..f5780110 100644 --- a/src/features/chapter/components/ChapterExcludeSanlatorsFilter.tsx +++ b/src/features/chapter/components/ChapterExcludeSanlatorsFilter.tsx @@ -11,7 +11,7 @@ import PeopleAltOutlinedIcon from '@mui/icons-material/PeopleAltOutlined'; import DisabledByDefaultRounded from '@mui/icons-material/DisabledByDefaultRounded'; import { useLingui } from '@lingui/react/macro'; import { CheckboxListSetting } from '@/base/components/settings/CheckboxListSetting.tsx'; -import { updateChapterListOptions } from '@/features/chapter/utils/ChapterList.util.tsx'; +import type { updateChapterListOptions } from '@/features/chapter/utils/ChapterList.util.tsx'; import { CheckboxInput } from '@/base/components/inputs/CheckboxInput.tsx'; export const ChapterExcludeSanlatorsFilter = ({ diff --git a/src/features/chapter/components/ChapterList.tsx b/src/features/chapter/components/ChapterList.tsx index c23a8568..8c540828 100644 --- a/src/features/chapter/components/ChapterList.tsx +++ b/src/features/chapter/components/ChapterList.tsx @@ -10,7 +10,8 @@ import Box from '@mui/material/Box'; import Stack from '@mui/material/Stack'; import { styled } from '@mui/material/styles'; import Typography from '@mui/material/Typography'; -import { ComponentProps, useCallback, useMemo, useState } from 'react'; +import type { ComponentProps } from 'react'; +import { useCallback, useMemo, useState } from 'react'; import { useLingui } from '@lingui/react/macro'; import { plural } from '@lingui/core/macro'; import { requestManager } from '@/lib/requests/RequestManager.ts'; @@ -24,7 +25,7 @@ import { EmptyViewAbsoluteCentered } from '@/base/components/feedback/EmptyViewA import { ChaptersToolbarMenu } from '@/features/chapter/components/ChaptersToolbarMenu.tsx'; import { SelectionFAB } from '@/base/collection/components/SelectionFAB.tsx'; import { DEFAULT_FULL_FAB_HEIGHT } from '@/base/components/buttons/StyledFab.tsx'; -import { +import type { ChapterListFieldsFragment, GetChaptersMangaQuery, GetChaptersMangaQueryVariables, diff --git a/src/features/chapter/components/ChapterOptions.tsx b/src/features/chapter/components/ChapterOptions.tsx index 21b9d49e..aea5c624 100644 --- a/src/features/chapter/components/ChapterOptions.tsx +++ b/src/features/chapter/components/ChapterOptions.tsx @@ -6,7 +6,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { MessageDescriptor } from '@lingui/core'; +import type { MessageDescriptor } from '@lingui/core'; import RadioGroup from '@mui/material/RadioGroup'; import React from 'react'; import { useLingui } from '@lingui/react/macro'; @@ -16,8 +16,8 @@ import { SortRadioInput } from '@/base/components/inputs/SortRadioInput.tsx'; import { ThreeStateCheckboxInput } from '@/base/components/inputs/ThreeStateCheckboxInput.tsx'; import { OptionsTabs } from '@/base/components/modals/OptionsTabs.tsx'; import { CHAPTER_SORT_OPTIONS_TO_TRANSLATION } from '@/features/chapter/Chapter.constants.ts'; -import { ChapterListOptions } from '@/features/chapter/Chapter.types.ts'; -import { updateChapterListOptions } from '@/features/chapter/utils/ChapterList.util.tsx'; +import type { ChapterListOptions } from '@/features/chapter/Chapter.types.ts'; +import type { updateChapterListOptions } from '@/features/chapter/utils/ChapterList.util.tsx'; import { ChapterExcludeSanlatorsFilter } from '@/features/chapter/components/ChapterExcludeSanlatorsFilter.tsx'; interface IProps { diff --git a/src/features/chapter/components/ChaptersToolbarMenu.tsx b/src/features/chapter/components/ChaptersToolbarMenu.tsx index 2758e968..652e0328 100644 --- a/src/features/chapter/components/ChaptersToolbarMenu.tsx +++ b/src/features/chapter/components/ChaptersToolbarMenu.tsx @@ -17,8 +17,9 @@ import { useMemo } from 'react'; import { useLingui } from '@lingui/react/macro'; import { CustomTooltip } from '@/base/components/CustomTooltip.tsx'; import { ChapterOptions } from '@/features/chapter/components/ChapterOptions.tsx'; -import { isFilterActive, updateChapterListOptions } from '@/features/chapter/utils/ChapterList.util.tsx'; -import { +import type { updateChapterListOptions } from '@/features/chapter/utils/ChapterList.util.tsx'; +import { isFilterActive } from '@/features/chapter/utils/ChapterList.util.tsx'; +import type { ChapterBookmarkInfo, ChapterDownloadInfo, ChapterIdInfo, diff --git a/src/features/chapter/components/actions/ChapterActionMenuItems.tsx b/src/features/chapter/components/actions/ChapterActionMenuItems.tsx index 7d5534d3..25d0b267 100644 --- a/src/features/chapter/components/actions/ChapterActionMenuItems.tsx +++ b/src/features/chapter/components/actions/ChapterActionMenuItems.tsx @@ -14,9 +14,10 @@ import Done from '@mui/icons-material/Done'; import BookmarkRemove from '@mui/icons-material/BookmarkRemove'; import BookmarkAdd from '@mui/icons-material/BookmarkAdd'; import DoneAll from '@mui/icons-material/DoneAll'; -import { ComponentProps, useMemo } from 'react'; +import type { ComponentProps } from 'react'; +import { useMemo } from 'react'; import { useLingui } from '@lingui/react/macro'; -import { SelectableCollectionReturnType } from '@/base/collection/hooks/useSelectableCollection.ts'; +import type { SelectableCollectionReturnType } from '@/base/collection/hooks/useSelectableCollection.ts'; import { Chapters } from '@/features/chapter/services/Chapters.ts'; import { MenuItem } from '@/base/components/menu/MenuItem.tsx'; import { @@ -26,12 +27,12 @@ import { } from '@/base/components/menu/Menu.utils.ts'; import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts'; import { useMetadataServerSettings } from '@/features/settings/services/ServerSettingsMetadata.ts'; -import { ChapterCard } from '@/features/chapter/components/cards/ChapterCard.tsx'; +import type { ChapterCard } from '@/features/chapter/components/cards/ChapterCard.tsx'; import { requestManager } from '@/lib/requests/RequestManager.ts'; -import { GetChaptersMangaQuery } from '@/lib/graphql/generated/graphql.ts'; +import type { GetChaptersMangaQuery } from '@/lib/graphql/generated/graphql.ts'; import { GET_CHAPTERS_MANGA } from '@/lib/graphql/chapter/ChapterQuery.ts'; import { CHAPTER_ACTION_TO_TRANSLATION } from '@/features/chapter/Chapter.constants.ts'; -import { +import type { ChapterAction, ChapterBookmarkInfo, ChapterDownloadInfo, diff --git a/src/features/chapter/components/actions/ChaptersDownloadActionMenuItems.tsx b/src/features/chapter/components/actions/ChaptersDownloadActionMenuItems.tsx index 726fcc3a..c7b8b45d 100644 --- a/src/features/chapter/components/actions/ChaptersDownloadActionMenuItems.tsx +++ b/src/features/chapter/components/actions/ChaptersDownloadActionMenuItems.tsx @@ -6,20 +6,19 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { MessageDescriptor } from '@lingui/core'; +import type { MessageDescriptor } from '@lingui/core'; import MenuItem from '@mui/material/MenuItem'; import gql from 'graphql-tag'; import { msg } from '@lingui/core/macro'; import { useMetadataServerSettings } from '@/features/settings/services/ServerSettingsMetadata.ts'; import { Mangas } from '@/features/manga/services/Mangas.ts'; import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts'; -import { - ChapterOrderBy, +import type { GetChaptersMangaQuery, GetChaptersMangaQueryVariables, MangaType, - SortOrder, } from '@/lib/graphql/generated/graphql.ts'; +import { ChapterOrderBy, SortOrder } from '@/lib/graphql/generated/graphql.ts'; import { MANGA_META_FIELDS } from '@/lib/graphql/manga/MangaFragments.ts'; import { getMangaMetadata } from '@/features/manga/services/MangaMetadata.ts'; import { requestManager } from '@/lib/requests/RequestManager.ts'; diff --git a/src/features/chapter/components/buttons/ChapterDownloadButton.tsx b/src/features/chapter/components/buttons/ChapterDownloadButton.tsx index c98e8b5e..fe0cd4d6 100644 --- a/src/features/chapter/components/buttons/ChapterDownloadButton.tsx +++ b/src/features/chapter/components/buttons/ChapterDownloadButton.tsx @@ -15,7 +15,7 @@ import { requestManager } from '@/lib/requests/RequestManager.ts'; import { makeToast } from '@/base/utils/Toast.ts'; import { getErrorMessage } from '@/lib/HelperFunctions.ts'; import { MUIUtil } from '@/lib/mui/MUI.util.ts'; -import { ChapterIdInfo } from '@/features/chapter/Chapter.types.ts'; +import type { ChapterIdInfo } from '@/features/chapter/Chapter.types.ts'; export const ChapterDownloadButton = ({ chapterId, diff --git a/src/features/chapter/components/buttons/ChapterDownloadRetryButton.tsx b/src/features/chapter/components/buttons/ChapterDownloadRetryButton.tsx index a7fbe4fd..873cf2f9 100644 --- a/src/features/chapter/components/buttons/ChapterDownloadRetryButton.tsx +++ b/src/features/chapter/components/buttons/ChapterDownloadRetryButton.tsx @@ -16,7 +16,7 @@ import { requestManager } from '@/lib/requests/RequestManager.ts'; import { makeToast } from '@/base/utils/Toast.ts'; import { getErrorMessage } from '@/lib/HelperFunctions.ts'; import { MUIUtil } from '@/lib/mui/MUI.util.ts'; -import { ChapterIdInfo } from '@/features/chapter/Chapter.types.ts'; +import type { ChapterIdInfo } from '@/features/chapter/Chapter.types.ts'; export const ChapterDownloadRetryButton = ({ chapterId }: { chapterId: ChapterIdInfo['id'] }) => { const { t } = useLingui(); diff --git a/src/features/chapter/components/cards/ChapterCard.tsx b/src/features/chapter/components/cards/ChapterCard.tsx index 66a4227a..210be0b3 100644 --- a/src/features/chapter/components/cards/ChapterCard.tsx +++ b/src/features/chapter/components/cards/ChapterCard.tsx @@ -14,7 +14,8 @@ import Stack from '@mui/material/Stack'; import Card from '@mui/material/Card'; import IconButton from '@mui/material/IconButton'; import { useTheme } from '@mui/material/styles'; -import React, { memo, MouseEvent, TouchEvent, useRef } from 'react'; +import type { MouseEvent, TouchEvent } from 'react'; +import React, { memo, useRef } from 'react'; import { Link } from 'react-router-dom'; import PopupState, { bindMenu, bindTrigger } from 'material-ui-popup-state'; import { useLongPress } from 'use-long-press'; @@ -22,7 +23,7 @@ import { useLingui } from '@lingui/react/macro'; import { CustomTooltip } from '@/base/components/CustomTooltip.tsx'; import { getDateString } from '@/base/utils/DateHelper.ts'; import { DownloadStateIndicator } from '@/base/components/downloads/DownloadStateIndicator.tsx'; -import { ChapterType } from '@/lib/graphql/generated/graphql.ts'; +import type { ChapterType } from '@/lib/graphql/generated/graphql.ts'; import { ChapterActionMenuItems } from '@/features/chapter/components/actions/ChapterActionMenuItems.tsx'; import { Menu } from '@/base/components/menu/Menu.tsx'; import { Chapters } from '@/features/chapter/services/Chapters.ts'; @@ -30,7 +31,7 @@ import { applyStyles } from '@/base/utils/ApplyStyles.ts'; import { ChapterCardMetadata } from '@/features/chapter/components/cards/ChapterCardMetadata.tsx'; import { MUIUtil } from '@/lib/mui/MUI.util.ts'; import { ListCardContent } from '@/base/components/lists/cards/ListCardContent.tsx'; -import { +import type { ChapterBookmarkInfo, ChapterDownloadInfo, ChapterIdInfo, @@ -60,6 +61,15 @@ interface IProps { isActiveChapter?: boolean; // reader } +const handleClickOpenMenu = ( + event: React.MouseEvent | React.TouchEvent, + openMenu?: (e: React.SyntheticEvent) => void, +) => { + event.stopPropagation(); + event.preventDefault(); + openMenu?.(event); +}; + export const ChapterCard = memo((props: IProps) => { const { t } = useLingui(); const theme = useTheme(); @@ -81,22 +91,15 @@ export const ChapterCard = memo((props: IProps) => { const { isDownloaded } = chapter; const handleClick = (event: MouseEvent | TouchEvent) => { - if (!isSelecting) return; + if (!isSelecting) { + return; + } event.preventDefault(); event.stopPropagation(); onSelect(chapter.id, !selected, event.shiftKey); }; - const handleClickOpenMenu = ( - event: React.MouseEvent | React.TouchEvent, - openMenu?: (e: React.SyntheticEvent) => void, - ) => { - event.stopPropagation(); - event.preventDefault(); - openMenu?.(event); - }; - const longPressBind = useLongPress((event, { context: openMenu }) => { if (!isSelecting && !!menuButtonRef.current) { handleClickOpenMenu(event, () => (openMenu as (event: Element) => void)?.(menuButtonRef.current!)); diff --git a/src/features/chapter/components/cards/ChapterCardMetadata.tsx b/src/features/chapter/components/cards/ChapterCardMetadata.tsx index e739b2ae..55806053 100644 --- a/src/features/chapter/components/cards/ChapterCardMetadata.tsx +++ b/src/features/chapter/components/cards/ChapterCardMetadata.tsx @@ -7,7 +7,7 @@ */ import Box from '@mui/material/Box'; -import { ComponentProps, ReactNode } from 'react'; +import type { ComponentProps, ReactNode } from 'react'; import Stack from '@mui/material/Stack'; import { TypographyMaxLines } from '@/base/components/texts/TypographyMaxLines.tsx'; import { CustomTooltip } from '@/base/components/CustomTooltip.tsx'; diff --git a/src/features/chapter/components/cards/ChapterCardThumbnail.tsx b/src/features/chapter/components/cards/ChapterCardThumbnail.tsx index e19e5bfd..6e7d6b41 100644 --- a/src/features/chapter/components/cards/ChapterCardThumbnail.tsx +++ b/src/features/chapter/components/cards/ChapterCardThumbnail.tsx @@ -9,8 +9,8 @@ import { Link } from 'react-router-dom'; import { AppRoutes } from '@/base/AppRoute.constants.ts'; import { Mangas } from '@/features/manga/services/Mangas.ts'; -import { MangaIdInfo, MangaThumbnailInfo } from '@/features/manga/Manga.types.ts'; -import { MangaType } from '@/lib/graphql/generated/graphql.ts'; +import type { MangaIdInfo, MangaThumbnailInfo } from '@/features/manga/Manga.types.ts'; +import type { MangaType } from '@/lib/graphql/generated/graphql.ts'; import { ListCardAvatar } from '@/base/components/lists/cards/ListCardAvatar.tsx'; export const ChapterCardThumbnail = ({ diff --git a/src/features/chapter/components/cards/ChapterListCard.tsx b/src/features/chapter/components/cards/ChapterListCard.tsx index c302f2a2..5129cc63 100644 --- a/src/features/chapter/components/cards/ChapterListCard.tsx +++ b/src/features/chapter/components/cards/ChapterListCard.tsx @@ -7,7 +7,7 @@ */ import Stack from '@mui/material/Stack'; -import { ComponentProps } from 'react'; +import type { ComponentProps } from 'react'; import { ChapterCard } from '@/features/chapter/components/cards/ChapterCard.tsx'; import { Chapters } from '@/features/chapter/services/Chapters.ts'; diff --git a/src/features/chapter/services/Chapters.ts b/src/features/chapter/services/Chapters.ts index b70fa78f..5d2731d5 100644 --- a/src/features/chapter/services/Chapters.ts +++ b/src/features/chapter/services/Chapters.ts @@ -6,22 +6,23 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { DocumentNode, MaybeMasked, Unmasked } from '@apollo/client'; +import type { DocumentNode, MaybeMasked, Unmasked } from '@apollo/client'; import { useFragment } from '@apollo/client/react'; import { t } from '@lingui/core/macro'; import { makeToast } from '@/base/utils/Toast.ts'; import { requestManager } from '@/lib/requests/RequestManager.ts'; import { getMetadataServerSettings } from '@/features/settings/services/ServerSettingsMetadata.ts'; -import { +import type { ChapterListFieldsFragment, ChapterType, - DownloadState, DownloadTypeFieldsFragment, } from '@/lib/graphql/generated/graphql.ts'; +import { DownloadState } from '@/lib/graphql/generated/graphql.ts'; import { CHAPTER_LIST_FIELDS } from '@/lib/graphql/chapter/ChapterFragments.ts'; -import { MangaIdInfo } from '@/features/manga/Manga.types.ts'; +import type { MangaIdInfo } from '@/features/manga/Manga.types.ts'; -import { ReaderOpenChapterLocationState, ReaderResumeMode } from '@/features/reader/Reader.types.ts'; +import type { ReaderOpenChapterLocationState } from '@/features/reader/Reader.types.ts'; +import { ReaderResumeMode } from '@/features/reader/Reader.types.ts'; import { AppRoutes } from '@/base/AppRoute.constants.ts'; import { getErrorMessage } from '@/lib/HelperFunctions.ts'; import { DOWNLOAD_TYPE_FIELDS } from '@/lib/graphql/download/DownloadFragments.ts'; @@ -30,7 +31,7 @@ import { CHAPTER_ACTION_TO_CONFIRMATION_REQUIRED, CHAPTER_ACTION_TO_TRANSLATION, } from '@/features/chapter/Chapter.constants.ts'; -import { +import type { ChapterAction, ChapterBookmarkInfo, ChapterDownloadInfo, @@ -355,9 +356,9 @@ export class Chapters { ): T[] { const chapterNumberToChapters = Object.groupBy(allChapters, ({ chapterNumber }) => chapterNumber); - return uniqueChapters - .map((uniqueChapter) => chapterNumberToChapters[uniqueChapter.chapterNumber] ?? [uniqueChapter]) - .flat(); + return uniqueChapters.flatMap( + (uniqueChapter) => chapterNumberToChapters[uniqueChapter.chapterNumber] ?? [uniqueChapter], + ); } static removeDuplicates( diff --git a/src/features/chapter/utils/ChapterList.util.tsx b/src/features/chapter/utils/ChapterList.util.tsx index 5e4f74e9..e4b39f00 100644 --- a/src/features/chapter/utils/ChapterList.util.tsx +++ b/src/features/chapter/utils/ChapterList.util.tsx @@ -7,16 +7,16 @@ */ import { useMemo } from 'react'; -import { ChapterType } from '@/lib/graphql/generated/graphql.ts'; -import { +import type { ChapterType } from '@/lib/graphql/generated/graphql.ts'; +import type { ChapterBookmarkInfo, ChapterDownloadInfo, ChapterListOptions, ChapterReadInfo, ChapterScanlatorInfo, } from '@/features/chapter/Chapter.types.ts'; -import { MangaIdInfo } from '@/features/manga/Manga.types.ts'; -import { GqlMetaHolder } from '@/features/metadata/Metadata.types.ts'; +import type { MangaIdInfo } from '@/features/manga/Manga.types.ts'; +import type { GqlMetaHolder } from '@/features/metadata/Metadata.types.ts'; import { createUpdateMangaMetadata, useGetMangaMetadata } from '@/features/manga/services/MangaMetadata.ts'; import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts'; diff --git a/src/features/device/DeviceContext.tsx b/src/features/device/DeviceContext.tsx index 06782ec6..751d5eb9 100644 --- a/src/features/device/DeviceContext.tsx +++ b/src/features/device/DeviceContext.tsx @@ -6,7 +6,8 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import React, { ReactNode, useContext, useMemo } from 'react'; +import type { ReactNode } from 'react'; +import React, { useContext, useMemo } from 'react'; import { DEFAULT_DEVICE, setActiveDevice } from '@/features/device/services/Device.ts'; import { useLocalStorage } from '@/base/hooks/useStorage.tsx'; diff --git a/src/features/device/screens/DeviceSetting.tsx b/src/features/device/screens/DeviceSetting.tsx index 16eb650d..0ef54456 100644 --- a/src/features/device/screens/DeviceSetting.tsx +++ b/src/features/device/screens/DeviceSetting.tsx @@ -23,7 +23,7 @@ import { LoadingPlaceholder } from '@/base/components/feedback/LoadingPlaceholde import { EmptyViewAbsoluteCentered } from '@/base/components/feedback/EmptyViewAbsoluteCentered.tsx'; import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts'; import { DEFAULT_DEVICE } from '@/features/device/services/Device.ts'; -import { MetadataServerSettingKeys, MetadataServerSettings } from '@/features/settings/Settings.types.ts'; +import type { MetadataServerSettingKeys, MetadataServerSettings } from '@/features/settings/Settings.types.ts'; import { getErrorMessage } from '@/lib/HelperFunctions.ts'; import { useAppTitle } from '@/features/navigation-bar/hooks/useAppTitle.ts'; diff --git a/src/features/downloads/components/DeleteChaptersWhileReadingSetting.tsx b/src/features/downloads/components/DeleteChaptersWhileReadingSetting.tsx index 55188b75..81a0cfda 100644 --- a/src/features/downloads/components/DeleteChaptersWhileReadingSetting.tsx +++ b/src/features/downloads/components/DeleteChaptersWhileReadingSetting.tsx @@ -8,11 +8,8 @@ import { useLingui } from '@lingui/react/macro'; import { msg } from '@lingui/core/macro'; -import { - SelectSetting, - SelectSettingValue, - SelectSettingValueDisplayInfo, -} from '@/base/components/settings/SelectSetting.tsx'; +import type { SelectSettingValue, SelectSettingValueDisplayInfo } from '@/base/components/settings/SelectSetting.tsx'; +import { SelectSetting } from '@/base/components/settings/SelectSetting.tsx'; const CHAPTERS_TO_DELETE = [0, 1, 2, 3, 4, 5] as const; const CHAPTERS_TO_DELETE_TO_TRANSLATION: { diff --git a/src/features/downloads/components/DownloadAheadSetting.tsx b/src/features/downloads/components/DownloadAheadSetting.tsx index 13752aed..9e214bf9 100644 --- a/src/features/downloads/components/DownloadAheadSetting.tsx +++ b/src/features/downloads/components/DownloadAheadSetting.tsx @@ -16,8 +16,8 @@ import { NumberSetting } from '@/base/components/settings/NumberSetting.tsx'; import { getPersistedServerSetting, usePersistedValue } from '@/base/hooks/usePersistedValue.tsx'; import { updateMetadataServerSettings } from '@/features/settings/services/ServerSettingsMetadata.ts'; import { makeToast } from '@/base/utils/Toast.ts'; -import { MetadataDownloadSettings } from '@/features/downloads/Downloads.types.ts'; -import { MetadataServerSettings } from '@/features/settings/Settings.types.ts'; +import type { MetadataDownloadSettings } from '@/features/downloads/Downloads.types.ts'; +import type { MetadataServerSettings } from '@/features/settings/Settings.types.ts'; import { getErrorMessage } from '@/lib/HelperFunctions.ts'; import { DOWNLOAD_AHEAD } from '@/features/downloads/Downloads.constants.ts'; diff --git a/src/features/downloads/components/DownloadQueueChapterCard.tsx b/src/features/downloads/components/DownloadQueueChapterCard.tsx index 85734ca9..e369ead8 100644 --- a/src/features/downloads/components/DownloadQueueChapterCard.tsx +++ b/src/features/downloads/components/DownloadQueueChapterCard.tsx @@ -27,7 +27,7 @@ import { getErrorMessage } from '@/lib/HelperFunctions.ts'; import { makeToast } from '@/base/utils/Toast.ts'; import { requestManager } from '@/lib/requests/RequestManager.ts'; import { DownloaderState } from '@/lib/graphql/generated/graphql.ts'; -import { ChapterDownloadStatus, ChapterIdInfo } from '@/features/chapter/Chapter.types.ts'; +import type { ChapterDownloadStatus, ChapterIdInfo } from '@/features/chapter/Chapter.types.ts'; import { MediaQuery } from '@/base/utils/MediaQuery.tsx'; export const DownloadQueueChapterCard = memo( diff --git a/src/features/downloads/screens/DownloadQueue.tsx b/src/features/downloads/screens/DownloadQueue.tsx index 831ed8fa..a1ae27de 100644 --- a/src/features/downloads/screens/DownloadQueue.tsx +++ b/src/features/downloads/screens/DownloadQueue.tsx @@ -12,7 +12,8 @@ import Box from '@mui/material/Box'; import IconButton from '@mui/material/IconButton'; import React, { useMemo, useState } from 'react'; import DeleteSweepIcon from '@mui/icons-material/DeleteSweep'; -import { closestCenter, DndContext, DragEndEvent } from '@dnd-kit/core'; +import type { DragEndEvent } from '@dnd-kit/core'; +import { closestCenter, DndContext } from '@dnd-kit/core'; import { SortableContext, verticalListSortingStrategy } from '@dnd-kit/sortable'; import { useWindowEvent } from '@mantine/hooks'; import { useLingui } from '@lingui/react/macro'; @@ -30,7 +31,7 @@ import { DndOverlayItem } from '@/lib/dnd-kit/DndOverlayItem.tsx'; import { DownloadQueueChapterCard } from '@/features/downloads/components/DownloadQueueChapterCard.tsx'; import { useAppTitle } from '@/features/navigation-bar/hooks/useAppTitle.ts'; import { useAppAction } from '@/features/navigation-bar/hooks/useAppAction.ts'; -import { ChapterDownloadStatus } from '@/features/chapter/Chapter.types.ts'; +import type { ChapterDownloadStatus } from '@/features/chapter/Chapter.types.ts'; import { VirtuosoPersisted } from '@/lib/virtuoso/Component/VirtuosoPersisted.tsx'; export const DownloadQueue: React.FC = () => { diff --git a/src/features/downloads/screens/DownloadSettings.tsx b/src/features/downloads/screens/DownloadSettings.tsx index 710808de..8948415e 100644 --- a/src/features/downloads/screens/DownloadSettings.tsx +++ b/src/features/downloads/screens/DownloadSettings.tsx @@ -27,10 +27,13 @@ import { NumberSetting } from '@/base/components/settings/NumberSetting.tsx'; import { LoadingPlaceholder } from '@/base/components/feedback/LoadingPlaceholder.tsx'; import { EmptyViewAbsoluteCentered } from '@/base/components/feedback/EmptyViewAbsoluteCentered.tsx'; import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts'; -import { GetCategoriesSettingsQuery, GetCategoriesSettingsQueryVariables } from '@/lib/graphql/generated/graphql.ts'; +import type { + GetCategoriesSettingsQuery, + GetCategoriesSettingsQueryVariables, +} from '@/lib/graphql/generated/graphql.ts'; import { GET_CATEGORIES_SETTINGS } from '@/lib/graphql/category/CategoryQuery.ts'; -import { MetadataDownloadSettings } from '@/features/downloads/Downloads.types.ts'; -import { ServerSettings } from '@/features/settings/Settings.types.ts'; +import type { MetadataDownloadSettings } from '@/features/downloads/Downloads.types.ts'; +import type { ServerSettings } from '@/features/settings/Settings.types.ts'; import { getErrorMessage } from '@/lib/HelperFunctions.ts'; import { useAppTitle } from '@/features/navigation-bar/hooks/useAppTitle.ts'; import { ListItemLink } from '@/base/components/lists/ListItemLink.tsx'; diff --git a/src/features/extension/Extensions.constants.ts b/src/features/extension/Extensions.constants.ts index 69cc188c..3a65e91e 100644 --- a/src/features/extension/Extensions.constants.ts +++ b/src/features/extension/Extensions.constants.ts @@ -6,14 +6,14 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { MessageDescriptor } from '@lingui/core'; +import type { MessageDescriptor } from '@lingui/core'; import { msg } from '@lingui/core/macro'; +import type { InstalledStates } from '@/features/extension/Extensions.types.ts'; import { ExtensionAction, ExtensionGroupState, ExtensionState, InstalledState, - InstalledStates, } from '@/features/extension/Extensions.types.ts'; import { DefaultLanguage } from '@/base/utils/Languages.ts'; diff --git a/src/features/extension/Extensions.types.ts b/src/features/extension/Extensions.types.ts index 1625b149..0a9456c2 100644 --- a/src/features/extension/Extensions.types.ts +++ b/src/features/extension/Extensions.types.ts @@ -6,7 +6,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { ExtensionType } from '@/lib/graphql/generated/graphql.ts'; +import type { ExtensionType } from '@/lib/graphql/generated/graphql.ts'; export enum ExtensionAction { UPDATE = 'UPDATE', diff --git a/src/features/extension/Extensions.utils.ts b/src/features/extension/Extensions.utils.ts index 61d6ecf0..1162e64a 100644 --- a/src/features/extension/Extensions.utils.ts +++ b/src/features/extension/Extensions.utils.ts @@ -6,14 +6,8 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { - ExtensionAction, - ExtensionGroupState, - ExtensionState, - GroupedExtensionsResult, - InstalledState, - TExtension, -} from '@/features/extension/Extensions.types.ts'; +import type { ExtensionState, GroupedExtensionsResult, TExtension } from '@/features/extension/Extensions.types.ts'; +import { ExtensionAction, ExtensionGroupState, InstalledState } from '@/features/extension/Extensions.types.ts'; import { DefaultLanguage, languageCodeToName, diff --git a/src/features/extension/info/components/ActionButton.tsx b/src/features/extension/info/components/ActionButton.tsx index f3ddee8d..e6397f27 100644 --- a/src/features/extension/info/components/ActionButton.tsx +++ b/src/features/extension/info/components/ActionButton.tsx @@ -13,7 +13,8 @@ import { INSTALLED_STATE_TO_TRANSLATION_MAP } from '@/features/extension/Extensi import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts'; import { getInstalledState, updateExtension } from '@/features/extension/Extensions.utils.ts'; import { useBackButton } from '@/base/hooks/useBackButton.ts'; -import { ExtensionAction, InstalledState, TExtension } from '@/features/extension/Extensions.types.ts'; +import type { TExtension } from '@/features/extension/Extensions.types.ts'; +import { ExtensionAction, InstalledState } from '@/features/extension/Extensions.types.ts'; export const ActionButton = ({ pkgName, isInstalled, isObsolete, hasUpdate }: TExtension) => { const handleBack = useBackButton(); diff --git a/src/features/extension/info/components/ExtensionMetadata.tsx b/src/features/extension/info/components/ExtensionMetadata.tsx index 1e3b1408..32515e2c 100644 --- a/src/features/extension/info/components/ExtensionMetadata.tsx +++ b/src/features/extension/info/components/ExtensionMetadata.tsx @@ -6,7 +6,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { ComponentProps } from 'react'; +import type { ComponentProps } from 'react'; import Divider from '@mui/material/Divider'; import { Metadata } from '@/base/components/texts/Metadata.tsx'; diff --git a/src/features/extension/info/components/Header.tsx b/src/features/extension/info/components/Header.tsx index 3d1a6f42..541624d0 100644 --- a/src/features/extension/info/components/Header.tsx +++ b/src/features/extension/info/components/Header.tsx @@ -10,7 +10,7 @@ import Stack from '@mui/material/Stack'; import Typography from '@mui/material/Typography'; import { requestManager } from '@/lib/requests/RequestManager.ts'; import { SpinnerImage } from '@/base/components/SpinnerImage.tsx'; -import { TExtension } from '@/features/extension/Extensions.types.ts'; +import type { TExtension } from '@/features/extension/Extensions.types.ts'; export const Header = ({ name, pkgName, iconUrl, repo }: TExtension) => ( diff --git a/src/features/extension/info/components/Meta.tsx b/src/features/extension/info/components/Meta.tsx index c793cc36..b5408ef2 100644 --- a/src/features/extension/info/components/Meta.tsx +++ b/src/features/extension/info/components/Meta.tsx @@ -8,7 +8,7 @@ import Stack from '@mui/material/Stack'; import { useLingui } from '@lingui/react/macro'; -import { TExtension } from '@/features/extension/Extensions.types.ts'; +import type { TExtension } from '@/features/extension/Extensions.types.ts'; import { ExtensionMetadata } from '@/features/extension/info/components/ExtensionMetadata.tsx'; import { languageCodeToName } from '@/base/utils/Languages.ts'; diff --git a/src/features/extension/info/components/SourceCard.tsx b/src/features/extension/info/components/SourceCard.tsx index 8afa92c9..43fe3003 100644 --- a/src/features/extension/info/components/SourceCard.tsx +++ b/src/features/extension/info/components/SourceCard.tsx @@ -24,7 +24,7 @@ import { StyledGroupItemWrapper } from '@/base/components/virtuoso/StyledGroupIt import { getErrorMessage } from '@/lib/HelperFunctions.ts'; import { makeToast } from '@/base/utils/Toast.ts'; import { createUpdateSourceMetadata, useGetSourceMetadata } from '@/features/source/services/SourceMetadata.ts'; -import { SourceConfigurableInfo, SourceIdInfo, SourceLanguageInfo } from '@/features/source/Source.types.ts'; +import type { SourceConfigurableInfo, SourceIdInfo, SourceLanguageInfo } from '@/features/source/Source.types.ts'; export const SourceCard = (source: SourceIdInfo & SourceLanguageInfo & SourceConfigurableInfo) => { const { id, isConfigurable } = source; diff --git a/src/features/global-search/screens/SearchAll.tsx b/src/features/global-search/screens/SearchAll.tsx index b7808d70..6c3b0e66 100644 --- a/src/features/global-search/screens/SearchAll.tsx +++ b/src/features/global-search/screens/SearchAll.tsx @@ -26,7 +26,7 @@ import { useLingui } from '@lingui/react/macro'; import { requestManager } from '@/lib/requests/RequestManager.ts'; import { AppbarSearch } from '@/base/components/AppbarSearch.tsx'; import { useDebounce } from '@/base/hooks/useDebounce.ts'; -import { MangaCardProps } from '@/features/manga/Manga.types.ts'; +import type { MangaCardProps } from '@/features/manga/Manga.types.ts'; import { EmptyView } from '@/base/components/feedback/EmptyView.tsx'; import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts'; import { LoadingPlaceholder } from '@/base/components/feedback/LoadingPlaceholder.tsx'; @@ -36,7 +36,7 @@ import { translateExtensionLanguage } from '@/features/extension/Extensions.util import { AppRoutes } from '@/base/AppRoute.constants.ts'; import { getErrorMessage } from '@/lib/HelperFunctions.ts'; import { Sources } from '@/features/source/services/Sources.ts'; -import { +import type { SourceDisplayNameInfo, SourceIdInfo, SourceLanguageInfo, @@ -52,7 +52,7 @@ import { getSourceMetadata } from '@/features/source/services/SourceMetadata.ts' import { makeToast } from '@/base/utils/Toast.ts'; import { CustomTooltip } from '@/base/components/CustomTooltip.tsx'; import { MUIUtil } from '@/lib/mui/MUI.util.ts'; -import { MetadataBrowseSettings } from '@/features/browse/Browse.types.ts'; +import type { MetadataBrowseSettings } from '@/features/browse/Browse.types.ts'; import { SourceLanguageSelect } from '@/features/source/components/SourceLanguageSelect.tsx'; import { SearchParam } from '@/base/Base.types.ts'; diff --git a/src/features/history/components/ChapterHistoryCard.tsx b/src/features/history/components/ChapterHistoryCard.tsx index aa48a92c..896d8aa5 100644 --- a/src/features/history/components/ChapterHistoryCard.tsx +++ b/src/features/history/components/ChapterHistoryCard.tsx @@ -12,7 +12,7 @@ import Card from '@mui/material/Card'; import { Link } from 'react-router-dom'; import { memo } from 'react'; import { DownloadStateIndicator } from '@/base/components/downloads/DownloadStateIndicator.tsx'; -import { ChapterHistoryListFieldsFragment } from '@/lib/graphql/generated/graphql.ts'; +import type { ChapterHistoryListFieldsFragment } from '@/lib/graphql/generated/graphql.ts'; import { AppRoutes } from '@/base/AppRoute.constants.ts'; import { Chapters } from '@/features/chapter/services/Chapters.ts'; import { epochToDate, timeFormatter } from '@/base/utils/DateHelper.ts'; diff --git a/src/features/history/screens/HistorySettings.tsx b/src/features/history/screens/HistorySettings.tsx index 31c1b2d6..7126dc3e 100644 --- a/src/features/history/screens/HistorySettings.tsx +++ b/src/features/history/screens/HistorySettings.tsx @@ -20,7 +20,7 @@ import { EmptyViewAbsoluteCentered } from '@/base/components/feedback/EmptyViewA import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts'; import { makeToast } from '@/base/utils/Toast.ts'; import { getErrorMessage } from '@/lib/HelperFunctions.ts'; -import { MetadataHistorySettings } from '@/features/history/History.types.ts'; +import type { MetadataHistorySettings } from '@/features/history/History.types.ts'; import { useAppTitle } from '@/features/navigation-bar/hooks/useAppTitle.ts'; export const HistorySettings = () => { diff --git a/src/features/hotkeys/AppHotkeysProvider.tsx b/src/features/hotkeys/AppHotkeysProvider.tsx index 8a2b5308..66b5446c 100644 --- a/src/features/hotkeys/AppHotkeysProvider.tsx +++ b/src/features/hotkeys/AppHotkeysProvider.tsx @@ -7,7 +7,7 @@ */ import { HotkeysProvider } from 'react-hotkeys-hook'; -import { ReactNode } from 'react'; +import type { ReactNode } from 'react'; import { HotkeyScope } from '@/features/hotkeys/Hotkeys.types.ts'; export const AppHotkeysProvider = ({ children }: { children?: ReactNode }) => ( diff --git a/src/features/library/Library.types.ts b/src/features/library/Library.types.ts index 142b307a..69134a6f 100644 --- a/src/features/library/Library.types.ts +++ b/src/features/library/Library.types.ts @@ -6,8 +6,8 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { MangaStatus, MangaType, TrackerType } from '@/lib/graphql/generated/graphql.ts'; -import { GridLayout } from '@/base/Base.types.ts'; +import type { MangaStatus, MangaType, TrackerType } from '@/lib/graphql/generated/graphql.ts'; +import type { GridLayout } from '@/base/Base.types.ts'; export type MetadataLibrarySettings = { showAddToLibraryCategorySelectDialog: boolean; diff --git a/src/features/library/components/LibraryMangaGrid.tsx b/src/features/library/components/LibraryMangaGrid.tsx index 9037c8e0..34dac1ef 100644 --- a/src/features/library/components/LibraryMangaGrid.tsx +++ b/src/features/library/components/LibraryMangaGrid.tsx @@ -8,7 +8,8 @@ import React, { useLayoutEffect } from 'react'; import { useLingui } from '@lingui/react/macro'; -import { IMangaGridProps, MangaGrid } from '@/features/manga/components/MangaGrid.tsx'; +import type { IMangaGridProps } from '@/features/manga/components/MangaGrid.tsx'; +import { MangaGrid } from '@/features/manga/components/MangaGrid.tsx'; import { GridLayout } from '@/base/Base.types.ts'; import { useMetadataServerSettings } from '@/features/settings/services/ServerSettingsMetadata.ts'; diff --git a/src/features/library/components/LibraryOptionsPanel.tsx b/src/features/library/components/LibraryOptionsPanel.tsx index 217122b4..a2237189 100644 --- a/src/features/library/components/LibraryOptionsPanel.tsx +++ b/src/features/library/components/LibraryOptionsPanel.tsx @@ -6,7 +6,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { MessageDescriptor } from '@lingui/core'; +import type { MessageDescriptor } from '@lingui/core'; import FormLabel from '@mui/material/FormLabel'; import RadioGroup from '@mui/material/RadioGroup'; import { useLingui } from '@lingui/react/macro'; @@ -18,7 +18,8 @@ import { ThreeStateCheckboxInput } from '@/base/components/inputs/ThreeStateChec import { OptionsTabs } from '@/base/components/modals/OptionsTabs.tsx'; import { requestManager } from '@/lib/requests/RequestManager.ts'; import { Trackers } from '@/features/tracker/services/Trackers.ts'; -import { GetTrackersSettingsQuery, MangaStatus } from '@/lib/graphql/generated/graphql.ts'; +import type { GetTrackersSettingsQuery } from '@/lib/graphql/generated/graphql.ts'; +import { MangaStatus } from '@/lib/graphql/generated/graphql.ts'; import { GET_TRACKERS_SETTINGS } from '@/lib/graphql/tracker/TrackerQuery.ts'; import { createUpdateCategoryMetadata, useGetCategoryMetadata } from '@/features/category/services/CategoryMetadata.ts'; import { makeToast } from '@/base/utils/Toast.ts'; @@ -27,8 +28,8 @@ import { updateMetadataServerSettings, useMetadataServerSettings, } from '@/features/settings/services/ServerSettingsMetadata.ts'; -import { LibrarySortMode } from '@/features/library/Library.types.ts'; -import { CategoryMetadataInfo } from '@/features/category/Category.types.ts'; +import type { LibrarySortMode } from '@/features/library/Library.types.ts'; +import type { CategoryMetadataInfo } from '@/features/category/Category.types.ts'; import { MANGA_STATUS_TO_TRANSLATION } from '@/features/manga/Manga.constants.ts'; import { GridLayout } from '@/base/Base.types'; import { getErrorMessage } from '@/lib/HelperFunctions.ts'; diff --git a/src/features/library/components/LibraryToolbarMenu.tsx b/src/features/library/components/LibraryToolbarMenu.tsx index bce85b0d..34baef0b 100644 --- a/src/features/library/components/LibraryToolbarMenu.tsx +++ b/src/features/library/components/LibraryToolbarMenu.tsx @@ -8,7 +8,8 @@ import FilterList from '@mui/icons-material/FilterList'; import IconButton from '@mui/material/IconButton'; -import { ComponentProps, useState } from 'react'; +import type { ComponentProps } from 'react'; +import { useState } from 'react'; import { useLingui } from '@lingui/react/macro'; import { CustomTooltip } from '@/base/components/CustomTooltip.tsx'; import { LibraryOptionsPanel } from '@/features/library/components/LibraryOptionsPanel.tsx'; diff --git a/src/features/library/hooks/useGetVisibleLibraryMangas.ts b/src/features/library/hooks/useGetVisibleLibraryMangas.ts index 3ddf38c8..558b5668 100644 --- a/src/features/library/hooks/useGetVisibleLibraryMangas.ts +++ b/src/features/library/hooks/useGetVisibleLibraryMangas.ts @@ -9,19 +9,19 @@ import { StringParam, useQueryParam } from 'use-query-params'; import { useMemo } from 'react'; import { useMetadataServerSettings } from '@/features/settings/services/ServerSettingsMetadata.ts'; -import { ChapterType, MangaType, TrackRecordType } from '@/lib/graphql/generated/graphql.ts'; +import type { ChapterType, MangaType, TrackRecordType } from '@/lib/graphql/generated/graphql.ts'; import { enhancedCleanup } from '@/base/utils/Strings.ts'; import { useGetCategoryMetadata } from '@/features/category/services/CategoryMetadata.ts'; -import { LibraryOptions, LibrarySortMode } from '@/features/library/Library.types.ts'; -import { CategoryIdInfo, CategoryMetadataInfo } from '@/features/category/Category.types.ts'; -import { +import type { LibraryOptions, LibrarySortMode } from '@/features/library/Library.types.ts'; +import type { CategoryIdInfo, CategoryMetadataInfo } from '@/features/category/Category.types.ts'; +import type { MangaChapterCountInfo, MangaDownloadInfo, MangaIdInfo, MangaStatusInfo, MangaUnreadInfo, } from '@/features/manga/Manga.types.ts'; -import { SourceDisplayNameInfo } from '@/features/source/Source.types.ts'; +import type { SourceDisplayNameInfo } from '@/features/source/Source.types.ts'; import { SearchParam } from '@/base/Base.types.ts'; const triStateFilter = ( @@ -60,7 +60,9 @@ const performSearch = ( const actualQueries = queries?.filter((query) => query != null); const actualStrings = strings?.filter((str) => str != null); - if (!actualQueries?.length) return true; + if (!actualQueries?.length) { + return true; + } const cleanedUpQueries = actualQueries.map(enhancedCleanup); const cleanedUpStrings = actualStrings.map(enhancedCleanup).join(', '); diff --git a/src/features/library/screens/Library.tsx b/src/features/library/screens/Library.tsx index 0a19aa2c..d487d65f 100644 --- a/src/features/library/screens/Library.tsx +++ b/src/features/library/screens/Library.tsx @@ -6,7 +6,8 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import Chip, { ChipProps } from '@mui/material/Chip'; +import type { ChipProps } from '@mui/material/Chip'; +import Chip from '@mui/material/Chip'; import Tab from '@mui/material/Tab'; import { styled, useTheme } from '@mui/material/styles'; import { useCallback, useMemo, useState } from 'react'; @@ -32,7 +33,7 @@ import { MangaActionMenuItems } from '@/features/manga/components/MangaActionMen import { TabsMenu } from '@/base/components/tabs/TabsMenu.tsx'; import { TabsWrapper } from '@/base/components/tabs/TabsWrapper.tsx'; import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts'; -import { +import type { GetCategoriesLibraryQuery, GetCategoriesLibraryQueryVariables, GetLibraryMangaCountQuery, diff --git a/src/features/library/screens/LibraryDuplicates.tsx b/src/features/library/screens/LibraryDuplicates.tsx index 14f49fde..8ae34805 100644 --- a/src/features/library/screens/LibraryDuplicates.tsx +++ b/src/features/library/screens/LibraryDuplicates.tsx @@ -25,13 +25,17 @@ import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts' import { MangaCard } from '@/features/manga/components/cards/MangaCard.tsx'; import { StyledGroupedVirtuoso } from '@/base/components/virtuoso/StyledGroupedVirtuoso.tsx'; import { StyledGroupHeader } from '@/base/components/virtuoso/StyledGroupHeader.tsx'; -import { GetMangasDuplicatesQuery, GetMangasDuplicatesQueryVariables } from '@/lib/graphql/generated/graphql.ts'; +import type { GetMangasDuplicatesQuery, GetMangasDuplicatesQueryVariables } from '@/lib/graphql/generated/graphql.ts'; import { GET_MANGAS_DUPLICATES } from '@/lib/graphql/manga/MangaQuery.ts'; import { BaseMangaGrid } from '@/features/manga/components/BaseMangaGrid.tsx'; -import { IMangaGridProps } from '@/features/manga/components/MangaGrid.tsx'; +import type { IMangaGridProps } from '@/features/manga/components/MangaGrid.tsx'; import { StyledGroupItemWrapper } from '@/base/components/virtuoso/StyledGroupItemWrapper.tsx'; import { VirtuosoUtil } from '@/lib/virtuoso/Virtuoso.util.tsx'; -import { LibraryDuplicatesWorkerInput, TMangaDuplicate, TMangaDuplicates } from '@/features/library/Library.types.ts'; +import type { + LibraryDuplicatesWorkerInput, + TMangaDuplicate, + TMangaDuplicates, +} from '@/features/library/Library.types.ts'; import { GridLayout } from '@/base/Base.types.ts'; import { getErrorMessage } from '@/lib/HelperFunctions.ts'; import { useAppTitleAndAction } from '@/features/navigation-bar/hooks/useAppTitleAndAction.ts'; @@ -105,10 +109,7 @@ export const LibraryDuplicates = () => { () => Object.keys(mangasByTitle).toSorted((titleA, titleB) => titleA.localeCompare(titleB)), [mangasByTitle], ); - const duplicatedMangas = useMemo( - () => duplicatedTitles.map((title) => mangasByTitle[title]).flat(), - [mangasByTitle], - ); + const duplicatedMangas = useMemo(() => duplicatedTitles.flatMap((title) => mangasByTitle[title]), [mangasByTitle]); const mangasCountByTitle = useMemo( () => duplicatedTitles.map((title) => mangasByTitle[title]).map((mangas) => mangas.length), [mangasByTitle], diff --git a/src/features/library/screens/LibrarySettings.tsx b/src/features/library/screens/LibrarySettings.tsx index 1ea1623a..c83bf35d 100644 --- a/src/features/library/screens/LibrarySettings.tsx +++ b/src/features/library/screens/LibrarySettings.tsx @@ -26,7 +26,7 @@ import { EmptyViewAbsoluteCentered } from '@/base/components/feedback/EmptyViewA import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts'; import { LoadingPlaceholder } from '@/base/components/feedback/LoadingPlaceholder.tsx'; import { ListItemLink } from '@/base/components/lists/ListItemLink.tsx'; -import { +import type { GetCategoriesSettingsQuery, GetCategoriesSettingsQueryVariables, GetMangasBaseQuery, @@ -34,7 +34,7 @@ import { } from '@/lib/graphql/generated/graphql.ts'; import { GET_CATEGORIES_SETTINGS } from '@/lib/graphql/category/CategoryQuery.ts'; import { GET_MANGAS_BASE } from '@/lib/graphql/manga/MangaQuery.ts'; -import { MetadataLibrarySettings } from '@/features/library/Library.types.ts'; +import type { MetadataLibrarySettings } from '@/features/library/Library.types.ts'; import { AppRoutes } from '@/base/AppRoute.constants.ts'; import { getErrorMessage } from '@/lib/HelperFunctions.ts'; import { useAppTitle } from '@/features/navigation-bar/hooks/useAppTitle.ts'; diff --git a/src/features/library/util/LibraryDuplicates.util.ts b/src/features/library/util/LibraryDuplicates.util.ts index 6dbc12b7..044d92cc 100644 --- a/src/features/library/util/LibraryDuplicates.util.ts +++ b/src/features/library/util/LibraryDuplicates.util.ts @@ -6,9 +6,9 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { MangaType } from '@/lib/graphql/generated/graphql.ts'; +import type { MangaType } from '@/lib/graphql/generated/graphql.ts'; import { enhancedCleanup } from '@/base/utils/Strings.ts'; -import { TMangaDuplicate, TMangaDuplicateResult, TMangaDuplicates } from '@/features/library/Library.types.ts'; +import type { TMangaDuplicate, TMangaDuplicateResult, TMangaDuplicates } from '@/features/library/Library.types.ts'; export const findDuplicatesByTitle = >( libraryMangas: Manga[], diff --git a/src/features/library/workers/LibraryDuplicatesDescriptionWorker.ts b/src/features/library/workers/LibraryDuplicatesDescriptionWorker.ts index cb87a575..e0f19434 100644 --- a/src/features/library/workers/LibraryDuplicatesDescriptionWorker.ts +++ b/src/features/library/workers/LibraryDuplicatesDescriptionWorker.ts @@ -7,7 +7,7 @@ */ import { findDuplicatesByTitleAndAlternativeTitles } from '@/features/library/util/LibraryDuplicates.util.ts'; -import { LibraryDuplicatesDescriptionWorkerInput } from '@/features/library/Library.types.ts'; +import type { LibraryDuplicatesDescriptionWorkerInput } from '@/features/library/Library.types.ts'; self.onmessage = (event: MessageEvent) => { const { mangasToCheck, mangas } = event.data; diff --git a/src/features/library/workers/LibraryDuplicatesWorker.ts b/src/features/library/workers/LibraryDuplicatesWorker.ts index ee9e20a9..80e9b1ee 100644 --- a/src/features/library/workers/LibraryDuplicatesWorker.ts +++ b/src/features/library/workers/LibraryDuplicatesWorker.ts @@ -7,7 +7,7 @@ */ import { findDuplicatesByTitle } from '@/features/library/util/LibraryDuplicates.util.ts'; -import { +import type { LibraryDuplicatesDescriptionWorkerInput, LibraryDuplicatesWorkerInput, TMangaDuplicate, diff --git a/src/features/manga/Manga.constants.ts b/src/features/manga/Manga.constants.ts index 9a18299d..dfe5896a 100644 --- a/src/features/manga/Manga.constants.ts +++ b/src/features/manga/Manga.constants.ts @@ -6,15 +6,16 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { MessageDescriptor } from '@lingui/core'; +import type { MessageDescriptor } from '@lingui/core'; import { msg } from '@lingui/core/macro'; import { MangaStatus } from '@/lib/graphql/generated/graphql.ts'; -import { MangaAction, MangaIdInfo, MangaType } from '@/features/manga/Manga.types.ts'; +import type { MangaAction, MangaIdInfo } from '@/features/manga/Manga.types.ts'; +import { MangaType } from '@/features/manga/Manga.types.ts'; import { CHAPTER_ACTION_TO_CONFIRMATION_REQUIRED, CHAPTER_ACTION_TO_TRANSLATION, } from '@/features/chapter/Chapter.constants.ts'; -import { GqlMetaHolder } from '@/features/metadata/Metadata.types.ts'; +import type { GqlMetaHolder } from '@/features/metadata/Metadata.types.ts'; export const FALLBACK_MANGA: MangaIdInfo & GqlMetaHolder = { id: -1 }; diff --git a/src/features/manga/Manga.types.ts b/src/features/manga/Manga.types.ts index d7d8bd32..31c5415c 100644 --- a/src/features/manga/Manga.types.ts +++ b/src/features/manga/Manga.types.ts @@ -6,12 +6,12 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { LongPressPointerHandlers, LongPressResult } from 'use-long-press'; -import { PopupState } from 'material-ui-popup-state/hooks'; +import type { LongPressPointerHandlers, LongPressResult } from 'use-long-press'; +import type { PopupState } from 'material-ui-popup-state/hooks'; import type { JSX } from 'react'; -import { SelectableCollectionReturnType } from '@/base/collection/hooks/useSelectableCollection.ts'; -import { useManageMangaLibraryState } from '@/features/manga/hooks/useManageMangaLibraryState.tsx'; -import { +import type { SelectableCollectionReturnType } from '@/base/collection/hooks/useSelectableCollection.ts'; +import type { useManageMangaLibraryState } from '@/features/manga/hooks/useManageMangaLibraryState.tsx'; +import type { ChapterType, MangaReaderFieldsFragment, MangaType as MangaTypeGql, @@ -19,9 +19,9 @@ import { SourceType, TrackRecordType, } from '@/lib/graphql/generated/graphql.ts'; -import { SingleModeProps } from '@/features/manga/components/MangaActionMenuItems.tsx'; -import { GridLayout } from '@/base/Base.types.ts'; -import { ChapterListOptions } from '@/features/chapter/Chapter.types.ts'; +import type { SingleModeProps } from '@/features/manga/components/MangaActionMenuItems.tsx'; +import type { GridLayout } from '@/base/Base.types.ts'; +import type { ChapterListOptions } from '@/features/chapter/Chapter.types.ts'; export type MangaCardMode = 'default' | 'source' | 'migrate.search' | 'migrate.select' | 'duplicate'; diff --git a/src/features/manga/components/BaseMangaGrid.tsx b/src/features/manga/components/BaseMangaGrid.tsx index 053a098f..cedcbb1f 100644 --- a/src/features/manga/components/BaseMangaGrid.tsx +++ b/src/features/manga/components/BaseMangaGrid.tsx @@ -6,7 +6,8 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { MangaGrid, IMangaGridProps } from '@/features/manga/components/MangaGrid.tsx'; +import type { IMangaGridProps } from '@/features/manga/components/MangaGrid.tsx'; +import { MangaGrid } from '@/features/manga/components/MangaGrid.tsx'; type TMangaBaseGrid = Omit; diff --git a/src/features/manga/components/ContinueReadingButton.tsx b/src/features/manga/components/ContinueReadingButton.tsx index 1cf84556..50e08f4f 100644 --- a/src/features/manga/components/ContinueReadingButton.tsx +++ b/src/features/manga/components/ContinueReadingButton.tsx @@ -11,7 +11,7 @@ import PlayArrowIcon from '@mui/icons-material/PlayArrow'; import { Link } from 'react-router-dom'; import { Chapters } from '@/features/chapter/services/Chapters.ts'; import { MUIUtil } from '@/lib/mui/MUI.util.ts'; -import { +import type { ChapterNameInfo, ChapterNumberInfo, ChapterReadInfo, diff --git a/src/features/manga/components/ContinueReadingTooltip.tsx b/src/features/manga/components/ContinueReadingTooltip.tsx index 9dfb29cd..517b887d 100644 --- a/src/features/manga/components/ContinueReadingTooltip.tsx +++ b/src/features/manga/components/ContinueReadingTooltip.tsx @@ -6,10 +6,10 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { ReactElement } from 'react'; +import type { ReactElement } from 'react'; import { useLingui } from '@lingui/react/macro'; import { CustomTooltip } from '@/base/components/CustomTooltip'; -import { +import type { ChapterNameInfo, ChapterNumberInfo, ChapterScanlatorInfo, diff --git a/src/features/manga/components/MangaActionMenuItems.tsx b/src/features/manga/components/MangaActionMenuItems.tsx index e0b530a5..9a76f76b 100644 --- a/src/features/manga/components/MangaActionMenuItems.tsx +++ b/src/features/manga/components/MangaActionMenuItems.tsx @@ -21,7 +21,7 @@ import Dialog from '@mui/material/Dialog'; import { AwaitableComponent } from 'awaitable-component'; import { useLingui } from '@lingui/react/macro'; import { Mangas } from '@/features/manga/services/Mangas.ts'; -import { SelectableCollectionReturnType } from '@/base/collection/hooks/useSelectableCollection.ts'; +import type { SelectableCollectionReturnType } from '@/base/collection/hooks/useSelectableCollection.ts'; import { MenuItem } from '@/base/components/menu/MenuItem.tsx'; import { createGetMenuItemTitle, @@ -32,8 +32,8 @@ import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts' import { TrackManga } from '@/features/tracker/components/TrackManga.tsx'; import { ChaptersDownloadActionMenuItems } from '@/features/chapter/components/actions/ChaptersDownloadActionMenuItems.tsx'; import { NestedMenuItem } from '@/base/components/menu/NestedMenuItem.tsx'; -import { MangaChapterStatFieldsFragment, MangaType } from '@/lib/graphql/generated/graphql.ts'; -import { MangaAction, MangaDownloadInfo, MangaIdInfo, MangaUnreadInfo } from '@/features/manga/Manga.types.ts'; +import type { MangaChapterStatFieldsFragment, MangaType } from '@/lib/graphql/generated/graphql.ts'; +import type { MangaAction, MangaDownloadInfo, MangaIdInfo, MangaUnreadInfo } from '@/features/manga/Manga.types.ts'; import { MANGA_ACTION_TO_TRANSLATION } from '@/features/manga/Manga.constants.ts'; import { AppRoutes } from '@/base/AppRoute.constants.ts'; import { CategorySelect } from '@/features/category/components/CategorySelect.tsx'; diff --git a/src/features/manga/components/MangaBadges.tsx b/src/features/manga/components/MangaBadges.tsx index 98dbd8fd..8c9d2cc5 100644 --- a/src/features/manga/components/MangaBadges.tsx +++ b/src/features/manga/components/MangaBadges.tsx @@ -10,7 +10,7 @@ import { styled } from '@mui/material/styles'; import Button from '@mui/material/Button'; import Typography from '@mui/material/Typography'; import { useLingui } from '@lingui/react/macro'; -import { MangaCardMode } from '@/features/manga/Manga.types.ts'; +import type { MangaCardMode } from '@/features/manga/Manga.types.ts'; import { MediaQuery } from '@/base/utils/MediaQuery.tsx'; import { useMetadataServerSettings } from '@/features/settings/services/ServerSettingsMetadata.ts'; import { MUIUtil } from '@/lib/mui/MUI.util.ts'; diff --git a/src/features/manga/components/MangaGrid.tsx b/src/features/manga/components/MangaGrid.tsx index 309713f9..20771838 100644 --- a/src/features/manga/components/MangaGrid.tsx +++ b/src/features/manga/components/MangaGrid.tsx @@ -6,18 +6,29 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import React, { ForwardedRef, Ref, useCallback, useLayoutEffect, useMemo, useRef, useState, type JSX } from 'react'; -import Grid, { GridTypeMap } from '@mui/material/Grid'; -import Box, { BoxProps } from '@mui/material/Box'; -import { GridItemProps } from 'react-virtuoso'; +import React, { + useCallback, + useLayoutEffect, + useMemo, + useRef, + useState, + type ForwardedRef, + type Ref, + type JSX, +} from 'react'; +import type { GridTypeMap } from '@mui/material/Grid'; +import Grid from '@mui/material/Grid'; +import type { BoxProps } from '@mui/material/Box'; +import Box from '@mui/material/Box'; +import type { GridItemProps } from 'react-virtuoso'; import { useLingui } from '@lingui/react/macro'; import { EmptyViewAbsoluteCentered } from '@/base/components/feedback/EmptyViewAbsoluteCentered.tsx'; import { LoadingPlaceholder } from '@/base/components/feedback/LoadingPlaceholder.tsx'; import { MangaCard } from '@/features/manga/components/cards/MangaCard.tsx'; -import { SelectableCollectionReturnType } from '@/base/collection/hooks/useSelectableCollection.ts'; +import type { SelectableCollectionReturnType } from '@/base/collection/hooks/useSelectableCollection.ts'; import { DEFAULT_FULL_FAB_HEIGHT } from '@/base/components/buttons/StyledFab.tsx'; -import { MangaCardProps } from '@/features/manga/Manga.types.ts'; -import { MangaType } from '@/lib/graphql/generated/graphql.ts'; +import type { MangaCardProps } from '@/features/manga/Manga.types.ts'; +import type { MangaType } from '@/lib/graphql/generated/graphql.ts'; import { useResizeObserver } from '@/base/hooks/useResizeObserver.tsx'; import { useNavBarContext } from '@/features/navigation-bar/NavbarContext.tsx'; import { GridLayout } from '@/base/Base.types.ts'; diff --git a/src/features/manga/components/MangaOptionButton.tsx b/src/features/manga/components/MangaOptionButton.tsx index 3b63ed55..bbe1bf9c 100644 --- a/src/features/manga/components/MangaOptionButton.tsx +++ b/src/features/manga/components/MangaOptionButton.tsx @@ -6,19 +6,25 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { BaseSyntheticEvent, ChangeEvent, useMemo, ForwardedRef } from 'react'; +import type { BaseSyntheticEvent, ChangeEvent, ForwardedRef } from 'react'; +import { useMemo } from 'react'; import Button from '@mui/material/Button'; import Checkbox from '@mui/material/Checkbox'; import IconButton from '@mui/material/IconButton'; import MoreVertIcon from '@mui/icons-material/MoreVert'; -import { PopupState } from 'material-ui-popup-state/hooks'; +import type { PopupState } from 'material-ui-popup-state/hooks'; import { bindTrigger } from 'material-ui-popup-state'; import { useLingui } from '@lingui/react/macro'; import { CustomTooltip } from '@/base/components/CustomTooltip.tsx'; -import { SelectableCollectionReturnType } from '@/base/collection/hooks/useSelectableCollection.ts'; -import { MangaType } from '@/lib/graphql/generated/graphql.ts'; +import type { SelectableCollectionReturnType } from '@/base/collection/hooks/useSelectableCollection.ts'; +import type { MangaType } from '@/lib/graphql/generated/graphql.ts'; import { MUIUtil } from '@/lib/mui/MUI.util.ts'; +const preventDefaultAction = (e: BaseSyntheticEvent) => { + e.stopPropagation(); + e.preventDefault(); +}; + export const MangaOptionButton = ({ id, selected, @@ -38,11 +44,6 @@ export const MangaOptionButton = ({ const bindTriggerProps = useMemo(() => bindTrigger(popupState), [popupState]); - const preventDefaultAction = (e: BaseSyntheticEvent) => { - e.stopPropagation(); - e.preventDefault(); - }; - const handleSelectionChange = (e: ChangeEvent, isSelected: boolean) => { preventDefaultAction(e); handleSelection?.(id, isSelected); diff --git a/src/features/manga/components/MangaToolbarMenu.tsx b/src/features/manga/components/MangaToolbarMenu.tsx index 1905c76c..08945f38 100644 --- a/src/features/manga/components/MangaToolbarMenu.tsx +++ b/src/features/manga/components/MangaToolbarMenu.tsx @@ -23,7 +23,7 @@ import { AwaitableComponent } from 'awaitable-component'; import ColorLensIcon from '@mui/icons-material/ColorLens'; import { useLingui } from '@lingui/react/macro'; import { CustomTooltip } from '@/base/components/CustomTooltip.tsx'; -import { MangaType } from '@/lib/graphql/generated/graphql.ts'; +import type { MangaType } from '@/lib/graphql/generated/graphql.ts'; import { AppRoutes } from '@/base/AppRoute.constants.ts'; import { CategorySelect } from '@/features/category/components/CategorySelect.tsx'; import { useMetadataServerSettings } from '@/features/settings/services/ServerSettingsMetadata.ts'; diff --git a/src/features/manga/components/ResumeFAB.tsx b/src/features/manga/components/ResumeFAB.tsx index f065af4c..e8d10f6e 100644 --- a/src/features/manga/components/ResumeFAB.tsx +++ b/src/features/manga/components/ResumeFAB.tsx @@ -11,7 +11,7 @@ import PlayArrow from '@mui/icons-material/PlayArrow'; import { useLingui } from '@lingui/react/macro'; import { StyledFab } from '@/base/components/buttons/StyledFab.tsx'; import { Chapters } from '@/features/chapter/services/Chapters.ts'; -import { +import type { ChapterMangaInfo, ChapterNameInfo, ChapterNumberInfo, diff --git a/src/features/manga/components/TrackMangaButton.tsx b/src/features/manga/components/TrackMangaButton.tsx index a43e415f..d4a9b825 100644 --- a/src/features/manga/components/TrackMangaButton.tsx +++ b/src/features/manga/components/TrackMangaButton.tsx @@ -18,9 +18,9 @@ import { makeToast } from '@/base/utils/Toast.ts'; import { TrackManga } from '@/features/tracker/components/TrackManga.tsx'; import { Trackers } from '@/features/tracker/services/Trackers.ts'; import { CustomButton } from '@/base/components/buttons/CustomButton.tsx'; -import { GetTrackersSettingsQuery, MangaType } from '@/lib/graphql/generated/graphql.ts'; +import type { GetTrackersSettingsQuery, MangaType } from '@/lib/graphql/generated/graphql.ts'; import { GET_TRACKERS_SETTINGS } from '@/lib/graphql/tracker/TrackerQuery.ts'; -import { MangaTrackRecordInfo } from '@/features/manga/Manga.types.ts'; +import type { MangaTrackRecordInfo } from '@/features/manga/Manga.types.ts'; import { AppRoutes } from '@/base/AppRoute.constants.ts'; import { MediaQuery } from '@/base/utils/MediaQuery.tsx'; diff --git a/src/features/manga/components/cards/MangaCard.tsx b/src/features/manga/components/cards/MangaCard.tsx index ac4c62da..8e693dea 100644 --- a/src/features/manga/components/cards/MangaCard.tsx +++ b/src/features/manga/components/cards/MangaCard.tsx @@ -9,13 +9,14 @@ import PopupState, { bindMenu } from 'material-ui-popup-state'; import { memo, useCallback, useMemo, useState } from 'react'; import { useLongPress } from 'use-long-press'; -import { MangaActionMenuItems, SingleModeProps } from '@/features/manga/components/MangaActionMenuItems.tsx'; +import type { SingleModeProps } from '@/features/manga/components/MangaActionMenuItems.tsx'; +import { MangaActionMenuItems } from '@/features/manga/components/MangaActionMenuItems.tsx'; import { Menu } from '@/base/components/menu/Menu.tsx'; import { MigrateDialog } from '@/features/migration/components/MigrateDialog.tsx'; import { useManageMangaLibraryState } from '@/features/manga/hooks/useManageMangaLibraryState.tsx'; import { MangaGridCard } from '@/features/manga/components/cards/MangaGridCard.tsx'; import { MangaListCard } from '@/features/manga/components/cards/MangaListCard.tsx'; -import { MangaCardMode, MangaCardProps } from '@/features/manga/Manga.types.ts'; +import type { MangaCardMode, MangaCardProps } from '@/features/manga/Manga.types.ts'; import { ContinueReadingButton } from '@/features/manga/components/ContinueReadingButton.tsx'; import { MangaBadges } from '@/features/manga/components/MangaBadges.tsx'; import { GridLayout } from '@/base/Base.types.ts'; @@ -98,7 +99,7 @@ export const MangaCard = memo((props: MangaCardProps) => { (e: any, { context }: any) => { // oxlint-disable-next-line no-param-reassign e.shiftKey = true; - handleClick(e, context as () => {}); + handleClick(e, context as () => void); }, [handleClick], ), diff --git a/src/features/manga/components/cards/MangaGridCard.tsx b/src/features/manga/components/cards/MangaGridCard.tsx index 4d532614..a6ba9e9e 100644 --- a/src/features/manga/components/cards/MangaGridCard.tsx +++ b/src/features/manga/components/cards/MangaGridCard.tsx @@ -18,7 +18,7 @@ import { CustomTooltip } from '@/base/components/CustomTooltip.tsx'; import { SpinnerImage } from '@/base/components/SpinnerImage.tsx'; import { MangaOptionButton } from '@/features/manga/components/MangaOptionButton.tsx'; import { Mangas } from '@/features/manga/services/Mangas.ts'; -import { SpecificMangaCardProps } from '@/features/manga/Manga.types.ts'; +import type { SpecificMangaCardProps } from '@/features/manga/Manga.types.ts'; import { TypographyMaxLines } from '@/base/components/texts/TypographyMaxLines.tsx'; import { MANGA_COVER_ASPECT_RATIO } from '@/features/manga/Manga.constants.ts'; import { GridLayout } from '@/base/Base.types.ts'; diff --git a/src/features/manga/components/cards/MangaListCard.tsx b/src/features/manga/components/cards/MangaListCard.tsx index 53526cf7..4ef06063 100644 --- a/src/features/manga/components/cards/MangaListCard.tsx +++ b/src/features/manga/components/cards/MangaListCard.tsx @@ -14,7 +14,7 @@ import { Link as RouterLink } from 'react-router-dom'; import { memo, useRef } from 'react'; import { CustomTooltip } from '@/base/components/CustomTooltip.tsx'; import { TypographyMaxLines } from '@/base/components/texts/TypographyMaxLines.tsx'; -import { SpecificMangaCardProps } from '@/features/manga/Manga.types.ts'; +import type { SpecificMangaCardProps } from '@/features/manga/Manga.types.ts'; import { Mangas } from '@/features/manga/services/Mangas.ts'; import { MangaOptionButton } from '@/features/manga/components/MangaOptionButton.tsx'; import { ListCardAvatar } from '@/base/components/lists/cards/ListCardAvatar.tsx'; diff --git a/src/features/manga/components/details/DescriptionGenre.tsx b/src/features/manga/components/details/DescriptionGenre.tsx index 702d0d78..a8ca7734 100644 --- a/src/features/manga/components/details/DescriptionGenre.tsx +++ b/src/features/manga/components/details/DescriptionGenre.tsx @@ -16,7 +16,7 @@ import ExpandLessIcon from '@mui/icons-material/ExpandLess'; import ExpandMoreIcon from '@mui/icons-material/ExpandMore'; import { useLocalStorage } from '@/base/hooks/useStorage.tsx'; import { useResizeObserver } from '@/base/hooks/useResizeObserver.tsx'; -import { +import type { MangaDescriptionInfo, MangaGenreInfo, MangaLocationState, diff --git a/src/features/manga/components/details/MangaDetails.tsx b/src/features/manga/components/details/MangaDetails.tsx index 850cb456..ebc05a44 100644 --- a/src/features/manga/components/details/MangaDetails.tsx +++ b/src/features/manga/components/details/MangaDetails.tsx @@ -9,7 +9,8 @@ import FavoriteIcon from '@mui/icons-material/Favorite'; import FavoriteBorderIcon from '@mui/icons-material/FavoriteBorder'; import { styled } from '@mui/material/styles'; -import { ComponentProps, ReactNode, useEffect } from 'react'; +import type { ComponentProps, ReactNode } from 'react'; +import { useEffect } from 'react'; import Link from '@mui/material/Link'; import Typography from '@mui/material/Typography'; import Stack from '@mui/material/Stack'; @@ -27,10 +28,10 @@ import { TrackMangaButton } from '@/features/manga/components/TrackMangaButton.t import { useManageMangaLibraryState } from '@/features/manga/hooks/useManageMangaLibraryState.tsx'; import { Metadata as BaseMetadata } from '@/base/components/texts/Metadata.tsx'; import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts'; -import { MangaType, SourceType } from '@/lib/graphql/generated/graphql.ts'; +import type { MangaType, SourceType } from '@/lib/graphql/generated/graphql.ts'; import { useMetadataServerSettings } from '@/features/settings/services/ServerSettingsMetadata.ts'; import { MANGA_STATUS_TO_TRANSLATION } from '@/features/manga/Manga.constants.ts'; -import { +import type { MangaArtistInfo, MangaAuthorInfo, MangaDescriptionInfo, @@ -47,7 +48,7 @@ import { import { applyStyles } from '@/base/utils/ApplyStyles.ts'; import { CustomButtonIcon } from '@/base/components/buttons/CustomButtonIcon.tsx'; import { Sources } from '@/features/source/services/Sources.ts'; -import { SourceIdInfo } from '@/features/source/Source.types.ts'; +import type { SourceIdInfo } from '@/features/source/Source.types.ts'; import { Thumbnail } from '@/features/manga/components/details/Thumbnail.tsx'; import { DescriptionGenre } from '@/features/manga/components/details/DescriptionGenre.tsx'; import { SearchLink } from '@/features/manga/components/details/SearchLink.tsx'; diff --git a/src/features/manga/components/details/SearchLink.tsx b/src/features/manga/components/details/SearchLink.tsx index 296b1fda..8e235fc5 100644 --- a/src/features/manga/components/details/SearchLink.tsx +++ b/src/features/manga/components/details/SearchLink.tsx @@ -6,11 +6,11 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { ReactNode } from 'react'; +import type { ReactNode } from 'react'; import Link from '@mui/material/Link'; import { Link as RouterLink } from 'react-router-dom'; -import { MangaLocationState } from '@/features/manga/Manga.types.ts'; -import { SourceIdInfo } from '@/features/source/Source.types.ts'; +import type { MangaLocationState } from '@/features/manga/Manga.types.ts'; +import type { SourceIdInfo } from '@/features/source/Source.types.ts'; import { AppRoutes } from '@/base/AppRoute.constants.ts'; export const SearchLink = ({ diff --git a/src/features/manga/components/details/Thumbnail.tsx b/src/features/manga/components/details/Thumbnail.tsx index ba7af5c0..58c6a438 100644 --- a/src/features/manga/components/details/Thumbnail.tsx +++ b/src/features/manga/components/details/Thumbnail.tsx @@ -17,10 +17,11 @@ import { FastAverageColor } from 'fast-average-color'; import { Mangas } from '@/features/manga/services/Mangas.ts'; import { SpinnerImage } from '@/base/components/SpinnerImage.tsx'; import { MANGA_COVER_ASPECT_RATIO } from '@/features/manga/Manga.constants.ts'; -import { MangaThumbnailInfo } from '@/features/manga/Manga.types.ts'; +import type { MangaThumbnailInfo } from '@/features/manga/Manga.types.ts'; import { useAppThemeContext } from '@/features/theme/AppThemeContext.tsx'; -import { TAppThemeContext } from '@/features/theme/AppTheme.types.ts'; -import { ImageRequest, requestManager } from '@/lib/requests/RequestManager.ts'; +import type { TAppThemeContext } from '@/features/theme/AppTheme.types.ts'; +import type { ImageRequest } from '@/lib/requests/RequestManager.ts'; +import { requestManager } from '@/lib/requests/RequestManager.ts'; import { noOp } from '@/lib/HelperFunctions.ts'; export const Thumbnail = ({ diff --git a/src/features/manga/hooks/useManageMangaLibraryState.tsx b/src/features/manga/hooks/useManageMangaLibraryState.tsx index ee7733ea..7ac1b0ee 100644 --- a/src/features/manga/hooks/useManageMangaLibraryState.tsx +++ b/src/features/manga/hooks/useManageMangaLibraryState.tsx @@ -16,7 +16,11 @@ import { getMetadataServerSettings } from '@/features/settings/services/ServerSe import { Categories } from '@/features/category/services/Categories.ts'; import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts'; import { Mangas } from '@/features/manga/services/Mangas.ts'; -import { GetCategoriesBaseQuery, GetCategoriesBaseQueryVariables, MangaType } from '@/lib/graphql/generated/graphql.ts'; +import type { + GetCategoriesBaseQuery, + GetCategoriesBaseQueryVariables, + MangaType, +} from '@/lib/graphql/generated/graphql.ts'; import { GET_CATEGORIES_BASE } from '@/lib/graphql/category/CategoryQuery.ts'; import { AppRoutes } from '@/base/AppRoute.constants.ts'; import { getErrorMessage } from '@/lib/HelperFunctions.ts'; diff --git a/src/features/manga/screens/Manga.tsx b/src/features/manga/screens/Manga.tsx index 2fc28195..9f03b2ae 100644 --- a/src/features/manga/screens/Manga.tsx +++ b/src/features/manga/screens/Manga.tsx @@ -23,11 +23,11 @@ import { MangaDetails } from '@/features/manga/components/details/MangaDetails.t import { MangaToolbarMenu } from '@/features/manga/components/MangaToolbarMenu.tsx'; import { EmptyViewAbsoluteCentered } from '@/base/components/feedback/EmptyViewAbsoluteCentered.tsx'; import { LoadingPlaceholder } from '@/base/components/feedback/LoadingPlaceholder.tsx'; -import { GetMangaScreenQuery } from '@/lib/graphql/generated/graphql.ts'; +import type { GetMangaScreenQuery } from '@/lib/graphql/generated/graphql.ts'; import { GET_MANGA_SCREEN } from '@/lib/graphql/manga/MangaQuery.ts'; import { getErrorMessage } from '@/lib/HelperFunctions.ts'; import { useAppTitleAndAction } from '@/features/navigation-bar/hooks/useAppTitleAndAction.ts'; -import { MangaLocationState } from '@/features/manga/Manga.types.ts'; +import type { MangaLocationState } from '@/features/manga/Manga.types.ts'; export const Manga: React.FC = () => { const { t } = useLingui(); @@ -51,7 +51,9 @@ export const Manga: React.FC = () => { const error = mangaError ?? refreshError; useEffect(() => { - if (manga == null) return; + if (manga == null) { + return; + } const doFetch = !autofetchedRef.current && !manga.initialized; if (doFetch) { diff --git a/src/features/manga/services/MangaMetadata.ts b/src/features/manga/services/MangaMetadata.ts index bab695f9..d024109d 100644 --- a/src/features/manga/services/MangaMetadata.ts +++ b/src/features/manga/services/MangaMetadata.ts @@ -9,8 +9,8 @@ import { useEffect, useMemo } from 'react'; import { DEFAULT_CHAPTER_OPTIONS } from '@/features/chapter/Chapter.constants.ts'; import { getMetadataFrom } from '@/features/metadata/services/MetadataReader.ts'; -import { MangaIdInfo, MangaMetadata, MangaMetadataKeys } from '@/features/manga/Manga.types.ts'; -import { +import type { MangaIdInfo, MangaMetadata, MangaMetadataKeys } from '@/features/manga/Manga.types.ts'; +import type { AllowedMetadataValueTypes, GqlMetaHolder, Metadata, diff --git a/src/features/manga/services/Mangas.ts b/src/features/manga/services/Mangas.ts index b53a49ec..47b64d3a 100644 --- a/src/features/manga/services/Mangas.ts +++ b/src/features/manga/services/Mangas.ts @@ -6,11 +6,11 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { DocumentNode, Unmasked } from '@apollo/client'; +import type { DocumentNode, Unmasked } from '@apollo/client'; import { t } from '@lingui/core/macro'; import { i18n } from '@/i18n'; import { requestManager } from '@/lib/requests/RequestManager.ts'; -import { +import type { ChapterConditionInput, GetMangasBaseQuery, GetMangasBaseQueryVariables, @@ -26,8 +26,8 @@ import { makeToast } from '@/base/utils/Toast.ts'; import { getMetadataServerSettings } from '@/features/settings/services/ServerSettingsMetadata.ts'; import { GET_MANGAS_BASE } from '@/lib/graphql/manga/MangaQuery.ts'; import { MANGA_BASE_FIELDS } from '@/lib/graphql/manga/MangaFragments.ts'; -import { MetadataMigrationSettings } from '@/features/migration/Migration.types.ts'; -import { +import type { MetadataMigrationSettings } from '@/features/migration/Migration.types.ts'; +import type { MangaAction, MangaArtistInfo, MangaAuthorInfo, @@ -39,10 +39,10 @@ import { MangaSourceNameInfo, MangaThumbnailInfo, MangaTitleInfo, - MangaType, MangaUnreadInfo, MigrateMode, } from '@/features/manga/Manga.types.ts'; +import { MangaType } from '@/features/manga/Manga.types.ts'; import { MANGA_ACTION_TO_CONFIRMATION_REQUIRED, MANGA_ACTION_TO_TRANSLATION, @@ -104,6 +104,9 @@ type PerformActionOptions = Action extends 'mark_as_ type MigrateAction = { copy: () => Promise[]; cleanup: () => Promise[] }; type MigrateActionCreator = () => MigrateAction; +const performMigrationAction = async (migrateAction: keyof MigrateAction, ...actions: MigrateAction[]) => + Promise.all(actions.flatMap((action) => action[migrateAction]())); + const ARTIST_AUTHOR_SEPARATOR_REGEX = /\s*[,|、]\s*/; export class Mangas { @@ -236,25 +239,23 @@ export class Mangas { Object.fromEntries([...mangaIdToDefaultDownloadSize, ...mangaIdToDownloadSize]), ) satisfies MangaIdToDownloadSize[]; - const chapterIdsToDownload = mangaIdToActualDownloadSize - .map(([mangaId, actualSize]) => { - const mangaChapters = mangaIdToChaptersToConsider[Number(mangaId)] ?? []; + const chapterIdsToDownload = mangaIdToActualDownloadSize.flatMap(([mangaId, actualSize]) => { + const mangaChapters = mangaIdToChaptersToConsider[Number(mangaId)] ?? []; - if (!mangaChapters.length) { - return []; - } + if (!mangaChapters.length) { + return []; + } - const shouldDownloadAll = actualSize === undefined; - if (shouldDownloadAll) { - return mangaChapters; - } + const shouldDownloadAll = actualSize === undefined; + if (shouldDownloadAll) { + return mangaChapters; + } - const uniqueMangaChapters = Chapters.removeDuplicates(mangaChapters[0], mangaChapters); - const uniqueMangaChaptersToDownload = uniqueMangaChapters.slice(0, actualSize); + const uniqueMangaChapters = Chapters.removeDuplicates(mangaChapters[0], mangaChapters); + const uniqueMangaChaptersToDownload = uniqueMangaChapters.slice(0, actualSize); - return Chapters.addDuplicates(uniqueMangaChaptersToDownload, mangaChapters); - }) - .flat(); + return Chapters.addDuplicates(uniqueMangaChaptersToDownload, mangaChapters); + }); if (!chapterIdsToDownload.length) { return Promise.resolve(); @@ -531,11 +532,6 @@ export class Mangas { mangaToMigrateToData.fetchChapters = { chapters: [] }; } - const performMigrationAction = async ( - migrateAction: keyof MigrateAction, - ...actions: MigrateAction[] - ) => Promise.all(actions.map((action) => action[migrateAction]()).flat()); - const performMigrationActions = async ( ...actionCreators: [boolean | undefined, MigrateActionCreator][] ) => { diff --git a/src/features/metadata/Metadata.constants.ts b/src/features/metadata/Metadata.constants.ts index cec2aa23..bce57f70 100644 --- a/src/features/metadata/Metadata.constants.ts +++ b/src/features/metadata/Metadata.constants.ts @@ -7,14 +7,9 @@ */ import deepmerge from '@mui/utils/deepmerge'; -import { AppMetadataKeys, IMetadataMigration } from '@/features/metadata/Metadata.types.ts'; -import { - IReaderSettings, - ProgressBarPosition, - ReaderCustomFilter, - ReaderPageScaleMode, - ReadingMode, -} from '@/features/reader/Reader.types.ts'; +import type { AppMetadataKeys, IMetadataMigration } from '@/features/metadata/Metadata.types.ts'; +import type { IReaderSettings, ReaderCustomFilter } from '@/features/reader/Reader.types.ts'; +import { ProgressBarPosition, ReaderPageScaleMode, ReadingMode } from '@/features/reader/Reader.types.ts'; import { AUTO_SCROLL_SPEED, CUSTOM_FILTER, @@ -27,20 +22,25 @@ import { import { coerceIn, jsonSaveParse } from '@/lib/HelperFunctions.ts'; import { DOWNLOAD_AHEAD } from '@/features/downloads/Downloads.constants.ts'; import { MANGA_GRID_WIDTH } from '@/features/settings/Settings.constants.ts'; -import { SortSettings } from '@/features/migration/Migration.types.ts'; -import { ISourceMetadata } from '@/features/source/Source.types.ts'; -import { LibraryOptions } from '@/features/library/Library.types.ts'; -import { MetadataThemeSettings } from '@/features/theme/AppTheme.types.ts'; -import { TapZoneInvertMode } from '@/features/reader/tap-zones/TapZoneLayout.types.ts'; +import type { SortSettings } from '@/features/migration/Migration.types.ts'; +import type { ISourceMetadata } from '@/features/source/Source.types.ts'; +import type { LibraryOptions } from '@/features/library/Library.types.ts'; +import type { MetadataThemeSettings } from '@/features/theme/AppTheme.types.ts'; +import type { TapZoneInvertMode } from '@/features/reader/tap-zones/TapZoneLayout.types.ts'; import { detectLocale, getISOLanguage } from '@/lib/ISOLanguageUtil.ts'; -import { I18nResourceCode, i18nResources } from '@/i18n'; +import type { I18nResourceCode } from '@/i18n'; +import { i18nResources } from '@/i18n'; import { toUniqueLanguageCodes } from '@/base/utils/Languages.ts'; export const APP_METADATA_KEY_PREFIX = 'webUI'; const convertToTypeNullAndUndefined = (value: string, convertToType: (value: string) => T): NullAndUndefined => { - if (value === 'null') return null; - if (value === 'undefined') return undefined; + if (value === 'null') { + return null; + } + if (value === 'undefined') { + return undefined; + } return convertToType(value); }; const convertToString = (value: string): string => value; diff --git a/src/features/metadata/Metadata.types.ts b/src/features/metadata/Metadata.types.ts index fcba1a9a..43210ab2 100644 --- a/src/features/metadata/Metadata.types.ts +++ b/src/features/metadata/Metadata.types.ts @@ -6,12 +6,12 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { MetadataServerSettingKeys, SearchMetadataKeys } from '@/features/settings/Settings.types.ts'; -import { MangaMetadataKeys } from '@/features/manga/Manga.types.ts'; -import { SourceMetadataKeys } from '@/features/source/Source.types.ts'; -import { CategoryMetadataKeys } from '@/features/category/Category.types.ts'; -import { MetaType } from '@/lib/graphql/generated/graphql.ts'; -import { IReaderSettings } from '@/features/reader/Reader.types.ts'; +import type { MetadataServerSettingKeys, SearchMetadataKeys } from '@/features/settings/Settings.types.ts'; +import type { MangaMetadataKeys } from '@/features/manga/Manga.types.ts'; +import type { SourceMetadataKeys } from '@/features/source/Source.types.ts'; +import type { CategoryMetadataKeys } from '@/features/category/Category.types.ts'; +import type { MetaType } from '@/lib/graphql/generated/graphql.ts'; +import type { IReaderSettings } from '@/features/reader/Reader.types.ts'; export interface IMetadataMigration { appKeyPrefix?: { oldPrefix: string; newPrefix: string }; diff --git a/src/features/metadata/Metadata.utils.ts b/src/features/metadata/Metadata.utils.ts index 986cf342..c49a77d7 100644 --- a/src/features/metadata/Metadata.utils.ts +++ b/src/features/metadata/Metadata.utils.ts @@ -7,7 +7,7 @@ */ import { APP_METADATA_KEY_PREFIX, GLOBAL_METADATA_KEYS } from '@/features/metadata/Metadata.constants.ts'; -import { AppMetadataKeys, Metadata } from '@/features/metadata/Metadata.types.ts'; +import type { AppMetadataKeys, Metadata } from '@/features/metadata/Metadata.types.ts'; import { getActiveDevice } from '@/features/device/services/Device.ts'; export const extractOriginalKey = (key: string) => key.split('_').slice(-1)[0]; diff --git a/src/features/metadata/services/MetadataApolloCacheHandler.ts b/src/features/metadata/services/MetadataApolloCacheHandler.ts index c000329e..ea4d9e07 100644 --- a/src/features/metadata/services/MetadataApolloCacheHandler.ts +++ b/src/features/metadata/services/MetadataApolloCacheHandler.ts @@ -6,9 +6,9 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { FieldFunctionOptions } from '@apollo/client/cache'; -import { Reference } from '@apollo/client/utilities'; -import { MetaType } from '@/lib/graphql/generated/graphql.ts'; +import type { FieldFunctionOptions } from '@apollo/client/cache'; +import type { Reference } from '@apollo/client/utilities'; +import type { MetaType } from '@/lib/graphql/generated/graphql.ts'; type ReadFieldFunction = FieldFunctionOptions['readField']; diff --git a/src/features/metadata/services/MetadataChunker.ts b/src/features/metadata/services/MetadataChunker.ts index 2db26ab1..ca071a48 100644 --- a/src/features/metadata/services/MetadataChunker.ts +++ b/src/features/metadata/services/MetadataChunker.ts @@ -6,11 +6,11 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { GqlMetaHolder, Metadata, MetadataHolderType } from '@/features/metadata/Metadata.types.ts'; +import type { GqlMetaHolder, Metadata, MetadataHolderType } from '@/features/metadata/Metadata.types.ts'; import { convertFromGqlMeta } from '@/features/metadata/services/MetadataConverter.ts'; import { requestManager } from '@/lib/requests/RequestManager.ts'; import { GET_GLOBAL_METADATAS } from '@/lib/graphql/metadata/GlobalMetadataQuery.ts'; -import { +import type { GetGlobalMetadatasQuery, GetGlobalMetadatasQueryVariables, MetaInput, @@ -52,7 +52,9 @@ export class MetadataChunker { } static getStaleChunkKeyCount(metadata: Metadata | undefined, fullKey: string): number { - if (!metadata) return 0; + if (!metadata) { + return 0; + } const scanFrom = (index: number): number => doesMetadataKeyExistIn(metadata, this.getChunkIndexKey(fullKey, index)) ? scanFrom(index + 1) : index; diff --git a/src/features/metadata/services/MetadataConverter.ts b/src/features/metadata/services/MetadataConverter.ts index a9f7cbdc..ce14e85f 100644 --- a/src/features/metadata/services/MetadataConverter.ts +++ b/src/features/metadata/services/MetadataConverter.ts @@ -6,8 +6,8 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { MetaType } from '@/lib/graphql/generated/graphql.ts'; -import { AllowedMetadataValueTypes, AppMetadataKeys, Metadata } from '@/features/metadata/Metadata.types.ts'; +import type { MetaType } from '@/lib/graphql/generated/graphql.ts'; +import type { AllowedMetadataValueTypes, AppMetadataKeys, Metadata } from '@/features/metadata/Metadata.types.ts'; import { APP_METADATA } from '@/features/metadata/Metadata.constants.ts'; export const convertValueFromMetadata = ( diff --git a/src/features/metadata/services/MetadataMigrations.ts b/src/features/metadata/services/MetadataMigrations.ts index 1ddc1ec8..23a2021f 100644 --- a/src/features/metadata/services/MetadataMigrations.ts +++ b/src/features/metadata/services/MetadataMigrations.ts @@ -6,13 +6,13 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { useEffect } from 'react'; +import type { useEffect } from 'react'; import { APP_METADATA_KEY_PREFIX, METADATA_MIGRATIONS, VALID_APP_METADATA_KEYS, } from '@/features/metadata/Metadata.constants.ts'; -import { +import type { AppMetadataKeys, IMetadataMigration, Metadata, @@ -21,13 +21,13 @@ import { MetadataKeyValuePair, } from '@/features/metadata/Metadata.types.ts'; import { extractOriginalKey, getMetadataKey } from '@/features/metadata/Metadata.utils.ts'; -import { MangaIdInfo } from '@/features/manga/Manga.types.ts'; -import { CategoryIdInfo } from '@/features/category/Category.types.ts'; +import type { MangaIdInfo } from '@/features/manga/Manga.types.ts'; +import type { CategoryIdInfo } from '@/features/category/Category.types.ts'; import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts'; import { getMetadataUpdateFunction } from '@/features/metadata/services/MetadataUpdater.ts'; import { MetadataChunker } from '@/features/metadata/services/MetadataChunker.ts'; -import { SourceIdInfo } from '@/features/source/Source.types.ts'; -import { ChapterIdInfo } from '@/features/chapter/Chapter.types.ts'; +import type { SourceIdInfo } from '@/features/source/Source.types.ts'; +import type { ChapterIdInfo } from '@/features/chapter/Chapter.types.ts'; const getAppKeyPrefixForMigration = (migrationId: number): string => { const appKeyPrefix = METADATA_MIGRATIONS.slice(0, migrationId) diff --git a/src/features/metadata/services/MetadataReader.ts b/src/features/metadata/services/MetadataReader.ts index 2fabfc7c..db0464bd 100644 --- a/src/features/metadata/services/MetadataReader.ts +++ b/src/features/metadata/services/MetadataReader.ts @@ -6,23 +6,23 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { useEffect } from 'react'; +import type { useEffect } from 'react'; import { convertValueFromMetadata } from '@/features/metadata/services/MetadataConverter.ts'; -import { +import type { AllowedMetadataValueTypes, AppMetadataKeys, Metadata, MetadataHolder, MetadataHolderType, } from '@/features/metadata/Metadata.types.ts'; -import { MangaIdInfo } from '@/features/manga/Manga.types.ts'; +import type { MangaIdInfo } from '@/features/manga/Manga.types.ts'; -import { CategoryIdInfo } from '@/features/category/Category.types.ts'; +import type { CategoryIdInfo } from '@/features/category/Category.types.ts'; import { doesMetadataKeyExistIn, getMetadataKey } from '@/features/metadata/Metadata.utils.ts'; import { MetadataChunker } from '@/features/metadata/services/MetadataChunker.ts'; import { applyMetadataMigrations } from '@/features/metadata/services/MetadataMigrations.ts'; -import { SourceIdInfo } from '@/features/source/Source.types.ts'; -import { ChapterIdInfo } from '@/features/chapter/Chapter.types.ts'; +import type { SourceIdInfo } from '@/features/source/Source.types.ts'; +import type { ChapterIdInfo } from '@/features/chapter/Chapter.types.ts'; import { APP_METADATA } from '@/features/metadata/Metadata.constants.ts'; import { MetadataValueCache } from '@/features/metadata/services/MetadataValueCache.ts'; diff --git a/src/features/metadata/services/MetadataUpdater.ts b/src/features/metadata/services/MetadataUpdater.ts index 1ce1a86b..d03ae355 100644 --- a/src/features/metadata/services/MetadataUpdater.ts +++ b/src/features/metadata/services/MetadataUpdater.ts @@ -7,21 +7,21 @@ */ import { requestManager } from '@/lib/requests/RequestManager.ts'; -import { CategoryIdInfo } from '@/features/category/Category.types.ts'; -import { +import type { CategoryIdInfo } from '@/features/category/Category.types.ts'; +import type { AppMetadataKeys, GqlMetaHolder, MetadataHolder, MetadataHolderType, MetadataKeyValuePair, } from '@/features/metadata/Metadata.types.ts'; -import { MangaIdInfo } from '@/features/manga/Manga.types.ts'; +import type { MangaIdInfo } from '@/features/manga/Manga.types.ts'; import { getMetadataKey } from '@/features/metadata/Metadata.utils.ts'; import { convertToGqlMeta } from '@/features/metadata/services/MetadataConverter.ts'; import { MetadataChunker } from '@/features/metadata/services/MetadataChunker.ts'; -import { SourceIdInfo } from '@/features/source/Source.types.ts'; -import { ChapterIdInfo } from '@/features/chapter/Chapter.types.ts'; -import { MetaInput } from '@/lib/graphql/generated/graphql.ts'; +import type { SourceIdInfo } from '@/features/source/Source.types.ts'; +import type { ChapterIdInfo } from '@/features/chapter/Chapter.types.ts'; +import type { MetaInput } from '@/lib/graphql/generated/graphql.ts'; type MetadataUpdateOptions = { update?: MetadataKeyValuePair[]; @@ -189,7 +189,9 @@ const requestBatchMetadataUpdate = async ( holderType: MetadataHolderType, entries: Array<{ metadataHolders: GqlMetaHolder[]; options: MetadataUpdateOptions }>, ): Promise => { - if (entries.length === 0) return; + if (entries.length === 0) { + return; + } const processed = entries.flatMap(({ metadataHolders, options }) => metadataHolders.map((metadataHolder) => ({ diff --git a/src/features/metadata/services/MetadataValueCache.ts b/src/features/metadata/services/MetadataValueCache.ts index d8ebc1ba..cf790f52 100644 --- a/src/features/metadata/services/MetadataValueCache.ts +++ b/src/features/metadata/services/MetadataValueCache.ts @@ -6,7 +6,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { MetadataHolderType } from '@/features/metadata/Metadata.types.ts'; +import type { MetadataHolderType } from '@/features/metadata/Metadata.types.ts'; export class MetadataValueCache { private static convertedValueByKey = new Map(); diff --git a/src/features/migration/Migration.constants.ts b/src/features/migration/Migration.constants.ts index 7c2581bd..73ac948d 100644 --- a/src/features/migration/Migration.constants.ts +++ b/src/features/migration/Migration.constants.ts @@ -6,7 +6,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { MessageDescriptor } from '@lingui/core'; +import type { MessageDescriptor } from '@lingui/core'; import { msg } from '@lingui/core/macro'; import { SortBy, SortOrder } from '@/features/migration/Migration.types.ts'; diff --git a/src/features/migration/Migration.types.ts b/src/features/migration/Migration.types.ts index 7bd5123d..2fc638f5 100644 --- a/src/features/migration/Migration.types.ts +++ b/src/features/migration/Migration.types.ts @@ -6,7 +6,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { GetMigratableSourcesQuery } from '@/lib/graphql/generated/graphql.ts'; +import type { GetMigratableSourcesQuery } from '@/lib/graphql/generated/graphql.ts'; export enum SortBy { SOURCE_NAME, diff --git a/src/features/migration/components/MigrateDialog.tsx b/src/features/migration/components/MigrateDialog.tsx index dacae3eb..7a1aed12 100644 --- a/src/features/migration/components/MigrateDialog.tsx +++ b/src/features/migration/components/MigrateDialog.tsx @@ -24,8 +24,8 @@ import { useMetadataServerSettings, } from '@/features/settings/services/ServerSettingsMetadata.ts'; import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts'; -import { MetadataMigrationSettings } from '@/features/migration/Migration.types.ts'; -import { MigrateMode } from '@/features/manga/Manga.types.ts'; +import type { MetadataMigrationSettings } from '@/features/migration/Migration.types.ts'; +import type { MigrateMode } from '@/features/manga/Manga.types.ts'; import { AppRoutes } from '@/base/AppRoute.constants.ts'; export const MigrateDialog = ({ mangaIdToMigrateTo, onClose }: { mangaIdToMigrateTo: number; onClose: () => void }) => { diff --git a/src/features/migration/components/MigrationCard.tsx b/src/features/migration/components/MigrationCard.tsx index c635c910..97bbade5 100644 --- a/src/features/migration/components/MigrationCard.tsx +++ b/src/features/migration/components/MigrationCard.tsx @@ -14,7 +14,7 @@ import Typography from '@mui/material/Typography'; import { Link } from 'react-router-dom'; import { useLingui } from '@lingui/react/macro'; import { requestManager } from '@/lib/requests/RequestManager.ts'; -import { GetMigratableSourcesQuery } from '@/lib/graphql/generated/graphql.ts'; +import type { GetMigratableSourcesQuery } from '@/lib/graphql/generated/graphql.ts'; import { translateExtensionLanguage } from '@/features/extension/Extensions.utils.ts'; import { AppRoutes } from '@/base/AppRoute.constants.ts'; import { ListCardAvatar } from '@/base/components/lists/cards/ListCardAvatar.tsx'; diff --git a/src/features/migration/screens/Migrate.tsx b/src/features/migration/screens/Migrate.tsx index d41be942..e1ea5af1 100644 --- a/src/features/migration/screens/Migrate.tsx +++ b/src/features/migration/screens/Migrate.tsx @@ -10,13 +10,13 @@ import { useEffect, useState } from 'react'; import { useParams } from 'react-router-dom'; import { useLingui } from '@lingui/react/macro'; import { requestManager } from '@/lib/requests/RequestManager.ts'; -import { TMigratableSource } from '@/features/migration/components/MigrationCard.tsx'; +import type { TMigratableSource } from '@/features/migration/components/MigrationCard.tsx'; import { LoadingPlaceholder } from '@/base/components/feedback/LoadingPlaceholder.tsx'; import { EmptyViewAbsoluteCentered } from '@/base/components/feedback/EmptyViewAbsoluteCentered.tsx'; import { GridLayouts } from '@/base/components/GridLayouts.tsx'; import { useLocalStorage } from '@/base/hooks/useStorage.tsx'; import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts'; -import { GetSourceMigratableQuery, GetSourceMigratableQueryVariables } from '@/lib/graphql/generated/graphql.ts'; +import type { GetSourceMigratableQuery, GetSourceMigratableQueryVariables } from '@/lib/graphql/generated/graphql.ts'; import { GET_SOURCE_MIGRATABLE } from '@/lib/graphql/source/SourceQuery.ts'; import { SOURCE_BASE_FIELDS } from '@/lib/graphql/source/SourceFragments.ts'; import { BaseMangaGrid } from '@/features/manga/components/BaseMangaGrid.tsx'; diff --git a/src/features/migration/screens/Migration.tsx b/src/features/migration/screens/Migration.tsx index b8f4bf02..d4c977cf 100644 --- a/src/features/migration/screens/Migration.tsx +++ b/src/features/migration/screens/Migration.tsx @@ -19,10 +19,12 @@ import { CustomTooltip } from '@/base/components/CustomTooltip.tsx'; import { requestManager } from '@/lib/requests/RequestManager.ts'; import { LoadingPlaceholder } from '@/base/components/feedback/LoadingPlaceholder.tsx'; import { EmptyViewAbsoluteCentered } from '@/base/components/feedback/EmptyViewAbsoluteCentered.tsx'; -import { MigrationCard, TMigratableSource } from '@/features/migration/components/MigrationCard.tsx'; +import type { TMigratableSource } from '@/features/migration/components/MigrationCard.tsx'; +import { MigrationCard } from '@/features/migration/components/MigrationCard.tsx'; import { StyledGroupItemWrapper } from '@/base/components/virtuoso/StyledGroupItemWrapper.tsx'; import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts'; -import { SortBy, SortOrder, SortSettings, TMigratableSourcesResult } from '@/features/migration/Migration.types.ts'; +import type { SortSettings, TMigratableSourcesResult } from '@/features/migration/Migration.types.ts'; +import { SortBy, SortOrder } from '@/features/migration/Migration.types.ts'; import { sortByToTranslation, sortOrderToTranslation } from '@/features/migration/Migration.constants.ts'; import { createUpdateMetadataServerSettings, diff --git a/src/features/navigation-bar/NavbarContext.tsx b/src/features/navigation-bar/NavbarContext.tsx index a4d0f583..69bf6490 100644 --- a/src/features/navigation-bar/NavbarContext.tsx +++ b/src/features/navigation-bar/NavbarContext.tsx @@ -7,7 +7,7 @@ */ import React, { useContext, useCallback, useMemo, useState } from 'react'; -import { INavbarOverride, NavbarContextType } from '@/features/navigation-bar/NavigationBar.types.ts'; +import type { INavbarOverride, NavbarContextType } from '@/features/navigation-bar/NavigationBar.types.ts'; import { useLocalStorage } from '@/base/hooks/useStorage.tsx'; export const NavBarContext = React.createContext({ diff --git a/src/features/navigation-bar/NavigationBar.constants.ts b/src/features/navigation-bar/NavigationBar.constants.ts index 98d9b88c..9323c2ba 100644 --- a/src/features/navigation-bar/NavigationBar.constants.ts +++ b/src/features/navigation-bar/NavigationBar.constants.ts @@ -21,7 +21,8 @@ import SettingsIcon from '@mui/icons-material/Settings'; import InfoIcon from '@mui/icons-material/Info'; import { useLingui } from '@lingui/react/macro'; import { msg, plural } from '@lingui/core/macro'; -import { NavbarItem, NavBarItemMoreGroup } from '@/features/navigation-bar/NavigationBar.types.ts'; +import type { NavbarItem } from '@/features/navigation-bar/NavigationBar.types.ts'; +import { NavBarItemMoreGroup } from '@/features/navigation-bar/NavigationBar.types.ts'; import { AppRoutes } from '@/base/AppRoute.constants.ts'; import { requestManager } from '@/lib/requests/RequestManager.ts'; import { DownloaderState } from '@/lib/graphql/generated/graphql.ts'; diff --git a/src/features/navigation-bar/NavigationBar.types.ts b/src/features/navigation-bar/NavigationBar.types.ts index 91885cca..e2ceb340 100644 --- a/src/features/navigation-bar/NavigationBar.types.ts +++ b/src/features/navigation-bar/NavigationBar.types.ts @@ -6,11 +6,11 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { MessageDescriptor } from '@lingui/core'; -import { OverridableComponent } from '@mui/material/OverridableComponent'; -import { SvgIconTypeMap } from '@mui/material/SvgIcon'; -import { ReactNode } from 'react'; -import { StaticAppRoute } from '@/base/AppRoute.constants.ts'; +import type { MessageDescriptor } from '@lingui/core'; +import type { OverridableComponent } from '@mui/material/OverridableComponent'; +import type { SvgIconTypeMap } from '@mui/material/SvgIcon'; +import type { ReactNode } from 'react'; +import type { StaticAppRoute } from '@/base/AppRoute.constants.ts'; export interface INavbarOverride { status: boolean; @@ -27,8 +27,8 @@ export interface NavbarItem { path: StaticAppRoute; title: MessageDescriptor; moreTitle?: MessageDescriptor; - SelectedIconComponent: OverridableComponent>; - IconComponent: OverridableComponent>; + SelectedIconComponent: OverridableComponent>; + IconComponent: OverridableComponent>; show: 'mobile' | 'desktop' | 'both'; moreGroup: NavBarItemMoreGroup; useBadge?: () => { count: number; title: string }; diff --git a/src/features/navigation-bar/NavigationBar.util.ts b/src/features/navigation-bar/NavigationBar.util.ts index 1f09606c..cf88f70d 100644 --- a/src/features/navigation-bar/NavigationBar.util.ts +++ b/src/features/navigation-bar/NavigationBar.util.ts @@ -6,9 +6,10 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { NavbarItem } from '@/features/navigation-bar/NavigationBar.types.ts'; -import { MetadataHistorySettings } from '@/features/history/History.types.ts'; -import { AppRoutes, StaticAppRoute } from '@/base/AppRoute.constants.ts'; +import type { NavbarItem } from '@/features/navigation-bar/NavigationBar.types.ts'; +import type { MetadataHistorySettings } from '@/features/history/History.types.ts'; +import type { StaticAppRoute } from '@/base/AppRoute.constants.ts'; +import { AppRoutes } from '@/base/AppRoute.constants.ts'; type NavBarItemDeviceFilterKey = `hide${Capitalize}`; diff --git a/src/features/navigation-bar/components/DefaultNavBar.tsx b/src/features/navigation-bar/components/DefaultNavBar.tsx index b46f222f..81ef7f7c 100644 --- a/src/features/navigation-bar/components/DefaultNavBar.tsx +++ b/src/features/navigation-bar/components/DefaultNavBar.tsx @@ -103,7 +103,9 @@ export function DefaultNavBar() { }, [isMobileWidth]); // Allow default navbar to be overrided - if (override.status) return override.value; + if (override.status) { + return override.value; + } return ( <> diff --git a/src/features/navigation-bar/components/DesktopSideBar.tsx b/src/features/navigation-bar/components/DesktopSideBar.tsx index 247fab65..65b87f5b 100644 --- a/src/features/navigation-bar/components/DesktopSideBar.tsx +++ b/src/features/navigation-bar/components/DesktopSideBar.tsx @@ -27,7 +27,7 @@ import { ListItemLink } from '@/base/components/lists/ListItemLink.tsx'; import { useGetOptionForDirection } from '@/features/theme/services/ThemeCreator.ts'; import { useNavBarContext } from '@/features/navigation-bar/NavbarContext.tsx'; import { useResizeObserver } from '@/base/hooks/useResizeObserver.tsx'; -import { NavbarItem } from '@/features/navigation-bar/NavigationBar.types.ts'; +import type { NavbarItem } from '@/features/navigation-bar/NavigationBar.types.ts'; import { TypographyMaxLines } from '@/base/components/texts/TypographyMaxLines.tsx'; const DrawerHeader = styled('div')(({ theme }) => ({ diff --git a/src/features/navigation-bar/components/MobileBottomBar.tsx b/src/features/navigation-bar/components/MobileBottomBar.tsx index 5c69c75c..3aeb5a18 100644 --- a/src/features/navigation-bar/components/MobileBottomBar.tsx +++ b/src/features/navigation-bar/components/MobileBottomBar.tsx @@ -9,15 +9,16 @@ import BottomNavigation from '@mui/material/BottomNavigation'; import BottomNavigationAction from '@mui/material/BottomNavigationAction'; import Paper from '@mui/material/Paper'; -import { CSSProperties, useCallback, useLayoutEffect, useRef, useState } from 'react'; +import type { CSSProperties } from 'react'; +import { useCallback, useLayoutEffect, useRef, useState } from 'react'; import { useLocation, useNavigate } from 'react-router-dom'; import { useTheme } from '@mui/material/styles'; import Badge from '@mui/material/Badge'; import { useLingui } from '@lingui/react/macro'; import { useResizeObserver } from '@/base/hooks/useResizeObserver.tsx'; import { useNavBarContext } from '@/features/navigation-bar/NavbarContext.tsx'; -import { NavbarItem } from '@/features/navigation-bar/NavigationBar.types.ts'; -import { StaticAppRoute } from '@/base/AppRoute.constants.ts'; +import type { NavbarItem } from '@/features/navigation-bar/NavigationBar.types.ts'; +import type { StaticAppRoute } from '@/base/AppRoute.constants.ts'; export const MobileBottomBar = ({ navBarItems }: { navBarItems: NavbarItem[] }) => { const { t } = useLingui(); diff --git a/src/features/navigation-bar/hooks/useAppAction.ts b/src/features/navigation-bar/hooks/useAppAction.ts index b0a7af9c..1c068716 100644 --- a/src/features/navigation-bar/hooks/useAppAction.ts +++ b/src/features/navigation-bar/hooks/useAppAction.ts @@ -8,7 +8,7 @@ import { useEffect } from 'react'; import { useNavBarContext } from '@/features/navigation-bar/NavbarContext.tsx'; -import { NavbarContextType } from '@/features/navigation-bar/NavigationBar.types.ts'; +import type { NavbarContextType } from '@/features/navigation-bar/NavigationBar.types.ts'; export const useAppAction = (action: NavbarContextType['action'], dependencies: any[] = []) => { const { setAction } = useNavBarContext(); diff --git a/src/features/navigation-bar/hooks/useAppTitle.ts b/src/features/navigation-bar/hooks/useAppTitle.ts index 2b4539d1..270cad92 100644 --- a/src/features/navigation-bar/hooks/useAppTitle.ts +++ b/src/features/navigation-bar/hooks/useAppTitle.ts @@ -8,7 +8,7 @@ import { useLayoutEffect } from 'react'; import { useNavBarContext } from '@/features/navigation-bar/NavbarContext.tsx'; -import { NavbarContextType } from '@/features/navigation-bar/NavigationBar.types.ts'; +import type { NavbarContextType } from '@/features/navigation-bar/NavigationBar.types.ts'; export function useAppTitle( title: NavbarContextType['title'], diff --git a/src/features/navigation-bar/hooks/useAppTitleAndAction.ts b/src/features/navigation-bar/hooks/useAppTitleAndAction.ts index 2b0753fc..be1aad72 100644 --- a/src/features/navigation-bar/hooks/useAppTitleAndAction.ts +++ b/src/features/navigation-bar/hooks/useAppTitleAndAction.ts @@ -6,7 +6,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { NavbarContextType } from '@/features/navigation-bar/NavigationBar.types.ts'; +import type { NavbarContextType } from '@/features/navigation-bar/NavigationBar.types.ts'; import { useAppTitle } from '@/features/navigation-bar/hooks/useAppTitle.ts'; import { useAppAction } from '@/features/navigation-bar/hooks/useAppAction.ts'; diff --git a/src/features/reader/Reader.types.ts b/src/features/reader/Reader.types.ts index 8e74dfa4..17cba9ff 100644 --- a/src/features/reader/Reader.types.ts +++ b/src/features/reader/Reader.types.ts @@ -6,11 +6,11 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { MutableRefObject, Ref } from 'react'; -import { TapZoneInvertMode, TapZoneLayouts } from '@/features/reader/tap-zones/TapZoneLayout.types.ts'; -import { TChapterReader } from '@/features/chapter/Chapter.types.ts'; -import { ReaderService } from '@/features/reader/services/ReaderService.ts'; -import { NavbarContextType } from '@/features/navigation-bar/NavigationBar.types.ts'; +import type { MutableRefObject, Ref } from 'react'; +import type { TapZoneInvertMode, TapZoneLayouts } from '@/features/reader/tap-zones/TapZoneLayout.types.ts'; +import type { TChapterReader } from '@/features/chapter/Chapter.types.ts'; +import type { ReaderService } from '@/features/reader/services/ReaderService.ts'; +import type { NavbarContextType } from '@/features/navigation-bar/NavigationBar.types.ts'; export enum ProgressBarType { HIDDEN, @@ -192,7 +192,7 @@ export interface IReaderSettingsManga { }; } -export interface IReaderSettings extends IReaderSettingsGlobal, IReaderSettingsManga {} +export type IReaderSettings = IReaderSettingsGlobal & IReaderSettingsManga; export interface IReaderSettingsWithDefaultFlag extends IReaderSettingsGlobal, TransformRecordToWithDefaultFlag {} @@ -252,7 +252,7 @@ interface ReaderSettingsTypeDefaultableProps extends ReaderSettingsTypeBaseProps isDefaultable: true; } -interface ReaderSettingsTypeNonDefaultableProps extends ReaderSettingsTypeBaseProps {} +type ReaderSettingsTypeNonDefaultableProps = ReaderSettingsTypeBaseProps; export type ReaderSettingsTypeProps = | ReaderSettingsTypeDefaultableProps diff --git a/src/features/reader/Reader.utils.ts b/src/features/reader/Reader.utils.ts index 2be7f2e8..6ca2f17c 100644 --- a/src/features/reader/Reader.utils.ts +++ b/src/features/reader/Reader.utils.ts @@ -6,15 +6,10 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { - ReaderPageSpreadState, - ReaderResumeMode, - ReaderStateChapters, - ReaderStatePages, - ReadingMode, -} from '@/features/reader/Reader.types.ts'; -import { UpdateChapterPatchInput } from '@/lib/graphql/generated/graphql.ts'; -import { ChapterIdInfo, TChapterReader } from '@/features/chapter/Chapter.types.ts'; +import type { ReaderPageSpreadState, ReaderStateChapters, ReaderStatePages } from '@/features/reader/Reader.types.ts'; +import { ReaderResumeMode, ReadingMode } from '@/features/reader/Reader.types.ts'; +import type { UpdateChapterPatchInput } from '@/lib/graphql/generated/graphql.ts'; +import type { ChapterIdInfo, TChapterReader } from '@/features/chapter/Chapter.types.ts'; import { Chapters } from '@/features/chapter/services/Chapters.ts'; import { CHAPTER_READER_FIELDS } from '@/lib/graphql/chapter/ChapterFragments.ts'; import { isPageOfOutdatedPageLoadStates, isSpreadPage } from '@/features/reader/viewer/pager/ReaderPager.utils.tsx'; diff --git a/src/features/reader/auto-scroll/ReaderAutoScroll.tsx b/src/features/reader/auto-scroll/ReaderAutoScroll.tsx index b8e85426..6bf1fe8d 100644 --- a/src/features/reader/auto-scroll/ReaderAutoScroll.tsx +++ b/src/features/reader/auto-scroll/ReaderAutoScroll.tsx @@ -7,7 +7,8 @@ */ import { memo, useCallback, useEffect } from 'react'; -import { Direction, useTheme } from '@mui/material/styles'; +import type { Direction } from '@mui/material/styles'; +import { useTheme } from '@mui/material/styles'; import { ReaderScrollAmount, ReadingMode } from '@/features/reader/Reader.types.ts'; import { ReaderControls } from '@/features/reader/services/ReaderControls.ts'; import { ScrollOffset } from '@/base/Base.types.ts'; diff --git a/src/features/reader/auto-scroll/ReaderAutoScrollStore.ts b/src/features/reader/auto-scroll/ReaderAutoScrollStore.ts index 60c3a7cd..256566b2 100644 --- a/src/features/reader/auto-scroll/ReaderAutoScrollStore.ts +++ b/src/features/reader/auto-scroll/ReaderAutoScrollStore.ts @@ -6,10 +6,11 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { createRef, MutableRefObject } from 'react'; -import { SliceCreator } from '@/lib/zustand/Zustand.types.ts'; +import type { MutableRefObject } from 'react'; +import { createRef } from 'react'; +import type { SliceCreator } from '@/lib/zustand/Zustand.types.ts'; import { ScrollOffset } from '@/base/Base.types.ts'; -import { useAutomaticScrolling } from '@/base/hooks/useAutomaticScrolling.ts'; +import type { useAutomaticScrolling } from '@/base/hooks/useAutomaticScrolling.ts'; import { noOp } from '@/lib/HelperFunctions.ts'; export interface ReaderAutoScrollStoreSlice { diff --git a/src/features/reader/auto-scroll/hooks/useReaderAutoScroll.ts b/src/features/reader/auto-scroll/hooks/useReaderAutoScroll.ts index 03776e79..361f70e6 100644 --- a/src/features/reader/auto-scroll/hooks/useReaderAutoScroll.ts +++ b/src/features/reader/auto-scroll/hooks/useReaderAutoScroll.ts @@ -7,7 +7,7 @@ */ import { useEffect } from 'react'; -import { IReaderSettings } from '@/features/reader/Reader.types.ts'; +import type { IReaderSettings } from '@/features/reader/Reader.types.ts'; import { getReaderAutoScrollStore, useReaderAutoScrollStore } from '@/features/reader/stores/ReaderStore.ts'; export const useReaderAutoScroll = (isOverlayVisible: boolean, isStaticNav: IReaderSettings['isStaticNav']): void => { diff --git a/src/features/reader/auto-scroll/settings/ReaderSettingAutoScroll.tsx b/src/features/reader/auto-scroll/settings/ReaderSettingAutoScroll.tsx index 3c5087ae..9d9c14c0 100644 --- a/src/features/reader/auto-scroll/settings/ReaderSettingAutoScroll.tsx +++ b/src/features/reader/auto-scroll/settings/ReaderSettingAutoScroll.tsx @@ -9,7 +9,7 @@ import { useLingui } from '@lingui/react/macro'; import { plural } from '@lingui/core/macro'; import { CheckboxInput } from '@/base/components/inputs/CheckboxInput.tsx'; -import { IReaderSettings } from '@/features/reader/Reader.types.ts'; +import type { IReaderSettings } from '@/features/reader/Reader.types.ts'; import { SliderInput } from '@/base/components/inputs/SliderInput.tsx'; import { AUTO_SCROLL_SPEED, DEFAULT_READER_SETTINGS } from '@/features/reader/settings/ReaderSettings.constants.tsx'; diff --git a/src/features/reader/auto-scroll/settings/quick-setting/ReaderNavBarDesktopAutoScroll.tsx b/src/features/reader/auto-scroll/settings/quick-setting/ReaderNavBarDesktopAutoScroll.tsx index b7f6ec9b..63d609dc 100644 --- a/src/features/reader/auto-scroll/settings/quick-setting/ReaderNavBarDesktopAutoScroll.tsx +++ b/src/features/reader/auto-scroll/settings/quick-setting/ReaderNavBarDesktopAutoScroll.tsx @@ -16,7 +16,7 @@ import { useRef } from 'react'; import { d } from 'koration'; import { useLingui } from '@lingui/react/macro'; import { plural } from '@lingui/core/macro'; -import { IReaderSettings } from '@/features/reader/Reader.types.ts'; +import type { IReaderSettings } from '@/features/reader/Reader.types.ts'; import { AUTO_SCROLL_SPEED } from '@/features/reader/settings/ReaderSettings.constants.tsx'; import { coerceIn } from '@/lib/HelperFunctions.ts'; import { getReaderAutoScrollStore, useReaderAutoScrollStore } from '@/features/reader/stores/ReaderStore.ts'; diff --git a/src/features/reader/filters/ReaderRGBAFilter.tsx b/src/features/reader/filters/ReaderRGBAFilter.tsx index 38a6a94d..5e84ce2e 100644 --- a/src/features/reader/filters/ReaderRGBAFilter.tsx +++ b/src/features/reader/filters/ReaderRGBAFilter.tsx @@ -8,7 +8,7 @@ import Box from '@mui/material/Box'; import { useNavBarContext } from '@/features/navigation-bar/NavbarContext.tsx'; -import { NavbarContextType } from '@/features/navigation-bar/NavigationBar.types.ts'; +import type { NavbarContextType } from '@/features/navigation-bar/NavigationBar.types.ts'; import { withPropsFrom } from '@/base/hoc/withPropsFrom.tsx'; import { useReaderSettingsStore } from '@/features/reader/stores/ReaderStore.ts'; diff --git a/src/features/reader/filters/settings/ReaderFilterSettings.tsx b/src/features/reader/filters/settings/ReaderFilterSettings.tsx index b968bcbd..bb38e81c 100644 --- a/src/features/reader/filters/settings/ReaderFilterSettings.tsx +++ b/src/features/reader/filters/settings/ReaderFilterSettings.tsx @@ -15,7 +15,7 @@ import { ReaderSettingRGBA } from '@/features/reader/filters/settings/components import { ReaderSettingSepia } from '@/features/reader/filters/settings/components/ReaderSettingSepia.tsx'; import { ReaderSettingGrayscale } from '@/features/reader/filters/settings/components/ReaderSettingGrayscale.tsx'; import { ReaderSettingInvert } from '@/features/reader/filters/settings/components/ReaderSettingInvert.tsx'; -import { ReaderSettingsTypeProps } from '@/features/reader/Reader.types.ts'; +import type { ReaderSettingsTypeProps } from '@/features/reader/Reader.types.ts'; import { ResetButton } from '@/base/components/buttons/ResetButton.tsx'; export const ReaderFilterSettings = ({ diff --git a/src/features/reader/filters/settings/components/ReaderSettingBrightness.tsx b/src/features/reader/filters/settings/components/ReaderSettingBrightness.tsx index abe3a1fd..fff89ae3 100644 --- a/src/features/reader/filters/settings/components/ReaderSettingBrightness.tsx +++ b/src/features/reader/filters/settings/components/ReaderSettingBrightness.tsx @@ -8,7 +8,7 @@ import Stack from '@mui/material/Stack'; import { useLingui } from '@lingui/react/macro'; -import { IReaderSettings } from '@/features/reader/Reader.types.ts'; +import type { IReaderSettings } from '@/features/reader/Reader.types.ts'; import { CheckboxInput } from '@/base/components/inputs/CheckboxInput.tsx'; import { SliderInput } from '@/base/components/inputs/SliderInput.tsx'; import { CUSTOM_FILTER, DEFAULT_READER_SETTINGS } from '@/features/reader/settings/ReaderSettings.constants.tsx'; diff --git a/src/features/reader/filters/settings/components/ReaderSettingContrast.tsx b/src/features/reader/filters/settings/components/ReaderSettingContrast.tsx index c5ed23f1..b6b3af79 100644 --- a/src/features/reader/filters/settings/components/ReaderSettingContrast.tsx +++ b/src/features/reader/filters/settings/components/ReaderSettingContrast.tsx @@ -8,7 +8,7 @@ import Stack from '@mui/material/Stack'; import { useLingui } from '@lingui/react/macro'; -import { IReaderSettings } from '@/features/reader/Reader.types.ts'; +import type { IReaderSettings } from '@/features/reader/Reader.types.ts'; import { CheckboxInput } from '@/base/components/inputs/CheckboxInput.tsx'; import { SliderInput } from '@/base/components/inputs/SliderInput.tsx'; import { CUSTOM_FILTER, DEFAULT_READER_SETTINGS } from '@/features/reader/settings/ReaderSettings.constants.tsx'; diff --git a/src/features/reader/filters/settings/components/ReaderSettingGrayscale.tsx b/src/features/reader/filters/settings/components/ReaderSettingGrayscale.tsx index f219b75f..9c3e3faf 100644 --- a/src/features/reader/filters/settings/components/ReaderSettingGrayscale.tsx +++ b/src/features/reader/filters/settings/components/ReaderSettingGrayscale.tsx @@ -8,7 +8,7 @@ import Stack from '@mui/material/Stack'; import { useLingui } from '@lingui/react/macro'; -import { IReaderSettings } from '@/features/reader/Reader.types.ts'; +import type { IReaderSettings } from '@/features/reader/Reader.types.ts'; import { CheckboxInput } from '@/base/components/inputs/CheckboxInput.tsx'; export const ReaderSettingGrayscale = ({ diff --git a/src/features/reader/filters/settings/components/ReaderSettingHue.tsx b/src/features/reader/filters/settings/components/ReaderSettingHue.tsx index 77c4dae2..ec6ebf54 100644 --- a/src/features/reader/filters/settings/components/ReaderSettingHue.tsx +++ b/src/features/reader/filters/settings/components/ReaderSettingHue.tsx @@ -8,7 +8,7 @@ import Stack from '@mui/material/Stack'; import { useLingui } from '@lingui/react/macro'; -import { IReaderSettings } from '@/features/reader/Reader.types.ts'; +import type { IReaderSettings } from '@/features/reader/Reader.types.ts'; import { CheckboxInput } from '@/base/components/inputs/CheckboxInput.tsx'; import { SliderInput } from '@/base/components/inputs/SliderInput.tsx'; import { CUSTOM_FILTER, DEFAULT_READER_SETTINGS } from '@/features/reader/settings/ReaderSettings.constants.tsx'; diff --git a/src/features/reader/filters/settings/components/ReaderSettingInvert.tsx b/src/features/reader/filters/settings/components/ReaderSettingInvert.tsx index fceab0a2..bdaeaee9 100644 --- a/src/features/reader/filters/settings/components/ReaderSettingInvert.tsx +++ b/src/features/reader/filters/settings/components/ReaderSettingInvert.tsx @@ -8,7 +8,7 @@ import Stack from '@mui/material/Stack'; import { useLingui } from '@lingui/react/macro'; -import { IReaderSettings } from '@/features/reader/Reader.types.ts'; +import type { IReaderSettings } from '@/features/reader/Reader.types.ts'; import { CheckboxInput } from '@/base/components/inputs/CheckboxInput.tsx'; export const ReaderSettingInvert = ({ diff --git a/src/features/reader/filters/settings/components/ReaderSettingRGBA.tsx b/src/features/reader/filters/settings/components/ReaderSettingRGBA.tsx index f83644f7..7dfac214 100644 --- a/src/features/reader/filters/settings/components/ReaderSettingRGBA.tsx +++ b/src/features/reader/filters/settings/components/ReaderSettingRGBA.tsx @@ -6,11 +6,11 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { MessageDescriptor } from '@lingui/core'; +import type { MessageDescriptor } from '@lingui/core'; import Stack from '@mui/material/Stack'; import { useLingui } from '@lingui/react/macro'; import { msg } from '@lingui/core/macro'; -import { IReaderSettings } from '@/features/reader/Reader.types.ts'; +import type { IReaderSettings } from '@/features/reader/Reader.types.ts'; import { CheckboxInput } from '@/base/components/inputs/CheckboxInput.tsx'; import { SliderInput } from '@/base/components/inputs/SliderInput.tsx'; import { diff --git a/src/features/reader/filters/settings/components/ReaderSettingSaturate.tsx b/src/features/reader/filters/settings/components/ReaderSettingSaturate.tsx index d54a41b0..ddadff03 100644 --- a/src/features/reader/filters/settings/components/ReaderSettingSaturate.tsx +++ b/src/features/reader/filters/settings/components/ReaderSettingSaturate.tsx @@ -8,7 +8,7 @@ import Stack from '@mui/material/Stack'; import { useLingui } from '@lingui/react/macro'; -import { IReaderSettings } from '@/features/reader/Reader.types.ts'; +import type { IReaderSettings } from '@/features/reader/Reader.types.ts'; import { CheckboxInput } from '@/base/components/inputs/CheckboxInput.tsx'; import { SliderInput } from '@/base/components/inputs/SliderInput.tsx'; import { CUSTOM_FILTER, DEFAULT_READER_SETTINGS } from '@/features/reader/settings/ReaderSettings.constants.tsx'; diff --git a/src/features/reader/filters/settings/components/ReaderSettingSepia.tsx b/src/features/reader/filters/settings/components/ReaderSettingSepia.tsx index 6abd1b32..0ea6012b 100644 --- a/src/features/reader/filters/settings/components/ReaderSettingSepia.tsx +++ b/src/features/reader/filters/settings/components/ReaderSettingSepia.tsx @@ -8,7 +8,7 @@ import Stack from '@mui/material/Stack'; import { useLingui } from '@lingui/react/macro'; -import { IReaderSettings } from '@/features/reader/Reader.types.ts'; +import type { IReaderSettings } from '@/features/reader/Reader.types.ts'; import { CheckboxInput } from '@/base/components/inputs/CheckboxInput.tsx'; export const ReaderSettingSepia = ({ diff --git a/src/features/reader/hooks/useReaderSetChaptersState.ts b/src/features/reader/hooks/useReaderSetChaptersState.ts index 12518852..72147127 100644 --- a/src/features/reader/hooks/useReaderSetChaptersState.ts +++ b/src/features/reader/hooks/useReaderSetChaptersState.ts @@ -9,15 +9,15 @@ import { useEffect } from 'react'; import { useLocation, useNavigate } from 'react-router-dom'; import { Chapters } from '@/features/chapter/services/Chapters.ts'; -import { requestManager } from '@/lib/requests/RequestManager.ts'; -import { GetChaptersReaderQuery } from '@/lib/graphql/generated/graphql.ts'; -import { +import type { requestManager } from '@/lib/requests/RequestManager.ts'; +import type { GetChaptersReaderQuery } from '@/lib/graphql/generated/graphql.ts'; +import type { IReaderSettings, ReaderOpenChapterLocationState, ReaderStateChapters, } from '@/features/reader/Reader.types.ts'; import { filterChapters } from '@/features/chapter/utils/ChapterList.util.tsx'; -import { ChapterListOptions } from '@/features/chapter/Chapter.types.ts'; +import type { ChapterListOptions } from '@/features/chapter/Chapter.types.ts'; import { getReaderChapterFromCache } from '@/features/reader/Reader.utils.ts'; import { DirectionOffset } from '@/base/Base.types.ts'; import { getReaderChaptersStore } from '@/features/reader/stores/ReaderStore.ts'; diff --git a/src/features/reader/hooks/useReaderSetSettingsState.ts b/src/features/reader/hooks/useReaderSetSettingsState.ts index ef68658e..9dcd9a27 100644 --- a/src/features/reader/hooks/useReaderSetSettingsState.ts +++ b/src/features/reader/hooks/useReaderSetSettingsState.ts @@ -7,15 +7,12 @@ */ import { useEffect } from 'react'; -import { - getReaderSettings, - getReaderSettingsFor, - useDefaultReaderSettings, -} from '@/features/reader/settings/ReaderSettingsMetadata.ts'; +import type { useDefaultReaderSettings } from '@/features/reader/settings/ReaderSettingsMetadata.ts'; +import { getReaderSettings, getReaderSettingsFor } from '@/features/reader/settings/ReaderSettingsMetadata.ts'; import { isAutoWebtoonMode } from '@/features/reader/settings/ReaderSettings.utils.tsx'; import { ReadingMode } from '@/features/reader/Reader.types.ts'; -import { GetMangaReaderQuery } from '@/lib/graphql/generated/graphql.ts'; -import { requestManager } from '@/lib/requests/RequestManager.ts'; +import type { GetMangaReaderQuery } from '@/lib/graphql/generated/graphql.ts'; +import type { requestManager } from '@/lib/requests/RequestManager.ts'; import { getReaderSettingsStore } from '@/features/reader/stores/ReaderStore.ts'; export const useReaderSetSettingsState = ( diff --git a/src/features/reader/hooks/useReaderShowSettingPreviewOnChange.ts b/src/features/reader/hooks/useReaderShowSettingPreviewOnChange.ts index 3e219691..2b9433af 100644 --- a/src/features/reader/hooks/useReaderShowSettingPreviewOnChange.ts +++ b/src/features/reader/hooks/useReaderShowSettingPreviewOnChange.ts @@ -6,11 +6,11 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { MessageDescriptor } from '@lingui/core'; +import type { MessageDescriptor } from '@lingui/core'; import { useEffect, useRef } from 'react'; import { d } from 'koration'; import { useLingui } from '@lingui/react/macro'; -import { IReaderSettings, IReaderSettingsWithDefaultFlag } from '@/features/reader/Reader.types.ts'; +import type { IReaderSettings, IReaderSettingsWithDefaultFlag } from '@/features/reader/Reader.types.ts'; import { makeToast } from '@/base/utils/Toast.ts'; import { READING_MODE_VALUE_TO_DISPLAY_DATA } from '@/features/reader/settings/ReaderSettings.constants.tsx'; import { getReaderTapZoneStore } from '@/features/reader/stores/ReaderStore.ts'; diff --git a/src/features/reader/hotkeys/ReaderHotkeys.tsx b/src/features/reader/hotkeys/ReaderHotkeys.tsx index 1a858787..f31eb8fa 100644 --- a/src/features/reader/hotkeys/ReaderHotkeys.tsx +++ b/src/features/reader/hotkeys/ReaderHotkeys.tsx @@ -10,7 +10,8 @@ import { useHotkeys as useHotKeysHook, useHotkeysContext } from 'react-hotkeys-h import { useEffect } from 'react'; import { HOTKEY_SCOPES } from '@/features/hotkeys/Hotkeys.constants.ts'; import { ReaderService } from '@/features/reader/services/ReaderService.ts'; -import { IReaderSettings, ReaderHotkey } from '@/features/reader/Reader.types.ts'; +import type { IReaderSettings } from '@/features/reader/Reader.types.ts'; +import { ReaderHotkey } from '@/features/reader/Reader.types.ts'; import { getNextRotationValue } from '@/base/utils/ValueRotationButton.utils.ts'; import { AUTO_SCROLL_SPEED, diff --git a/src/features/reader/hotkeys/settings/ReaderHotkeysSettings.tsx b/src/features/reader/hotkeys/settings/ReaderHotkeysSettings.tsx index 36c4f222..697d62b4 100644 --- a/src/features/reader/hotkeys/settings/ReaderHotkeysSettings.tsx +++ b/src/features/reader/hotkeys/settings/ReaderHotkeysSettings.tsx @@ -9,7 +9,7 @@ import Stack from '@mui/material/Stack'; import Typography from '@mui/material/Typography'; import { useLingui } from '@lingui/react/macro'; -import { ReaderSettingsTypeProps } from '@/features/reader/Reader.types.ts'; +import type { ReaderSettingsTypeProps } from '@/features/reader/Reader.types.ts'; import { ReaderSettingHotkey } from '@/features/reader/hotkeys/settings/components/ReaderSettingHotkey.tsx'; import { READER_HOTKEYS } from '@/features/reader/settings/ReaderSettings.constants.tsx'; import { ResetButton } from '@/base/components/buttons/ResetButton.tsx'; diff --git a/src/features/reader/hotkeys/settings/components/ReaderSettingHotkey.tsx b/src/features/reader/hotkeys/settings/components/ReaderSettingHotkey.tsx index 25dc6e2b..4087b488 100644 --- a/src/features/reader/hotkeys/settings/components/ReaderSettingHotkey.tsx +++ b/src/features/reader/hotkeys/settings/components/ReaderSettingHotkey.tsx @@ -6,7 +6,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { MessageDescriptor } from '@lingui/core'; +import type { MessageDescriptor } from '@lingui/core'; import Stack from '@mui/material/Stack'; import AddIcon from '@mui/icons-material/Add'; import Typography from '@mui/material/Typography'; diff --git a/src/features/reader/infinite-scroll/ReaderInfiniteScrollUpdateChapter.tsx b/src/features/reader/infinite-scroll/ReaderInfiniteScrollUpdateChapter.tsx index 41667f22..130c6046 100644 --- a/src/features/reader/infinite-scroll/ReaderInfiniteScrollUpdateChapter.tsx +++ b/src/features/reader/infinite-scroll/ReaderInfiniteScrollUpdateChapter.tsx @@ -8,7 +8,7 @@ import { memo } from 'react'; import { useReaderInfiniteScrollUpdateChapter } from '@/features/reader/infinite-scroll/useReaderInfiniteScrollUpdateChapter.ts'; -import { ChapterIdInfo } from '@/features/chapter/Chapter.types.ts'; +import type { ChapterIdInfo } from '@/features/chapter/Chapter.types.ts'; const BaseReaderInfiniteScrollUpdateChapter = ({ chapterId, diff --git a/src/features/reader/overlay/ReaderOverlay.types.ts b/src/features/reader/overlay/ReaderOverlay.types.ts index bfa2aa04..95e4d0ef 100644 --- a/src/features/reader/overlay/ReaderOverlay.types.ts +++ b/src/features/reader/overlay/ReaderOverlay.types.ts @@ -10,12 +10,12 @@ export interface BaseReaderOverlayProps { isVisible: boolean; } -export interface MobileHeaderProps extends BaseReaderOverlayProps {} +export type MobileHeaderProps = BaseReaderOverlayProps; interface ReaderNavBarBaseProps extends BaseReaderOverlayProps { openSettings: () => void; } -export interface ReaderBottomBarMobileProps extends ReaderNavBarBaseProps {} +export type ReaderBottomBarMobileProps = ReaderNavBarBaseProps; -export interface ReaderNavBarDesktopProps extends ReaderNavBarBaseProps {} +export type ReaderNavBarDesktopProps = ReaderNavBarBaseProps; diff --git a/src/features/reader/overlay/ReaderOverlayStore.ts b/src/features/reader/overlay/ReaderOverlayStore.ts index 060257bb..ed328a0d 100644 --- a/src/features/reader/overlay/ReaderOverlayStore.ts +++ b/src/features/reader/overlay/ReaderOverlayStore.ts @@ -6,7 +6,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { SliceCreator } from '@/lib/zustand/Zustand.types.ts'; +import type { SliceCreator } from '@/lib/zustand/Zustand.types.ts'; export interface ReaderOverlayStoreSlice { overlay: { diff --git a/src/features/reader/overlay/components/ReaderPageNumber.tsx b/src/features/reader/overlay/components/ReaderPageNumber.tsx index f399e557..c84cc880 100644 --- a/src/features/reader/overlay/components/ReaderPageNumber.tsx +++ b/src/features/reader/overlay/components/ReaderPageNumber.tsx @@ -15,7 +15,7 @@ import { ProgressBarType, ReadingDirection } from '@/features/reader/Reader.type import { getPage } from '@/features/reader/overlay/progress-bar/ReaderProgressBar.utils.tsx'; import { useNavBarContext } from '@/features/navigation-bar/NavbarContext.tsx'; import { reverseString } from '@/base/utils/Strings.ts'; -import { NavbarContextType } from '@/features/navigation-bar/NavigationBar.types.ts'; +import type { NavbarContextType } from '@/features/navigation-bar/NavigationBar.types.ts'; import { withPropsFrom } from '@/base/hoc/withPropsFrom.tsx'; import { useReaderPagesStore, diff --git a/src/features/reader/overlay/hooks/useReaderHideOverlayOnUserScroll.ts b/src/features/reader/overlay/hooks/useReaderHideOverlayOnUserScroll.ts index 50915a7d..60912960 100644 --- a/src/features/reader/overlay/hooks/useReaderHideOverlayOnUserScroll.ts +++ b/src/features/reader/overlay/hooks/useReaderHideOverlayOnUserScroll.ts @@ -6,7 +6,8 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { MutableRefObject, useEffect } from 'react'; +import type { MutableRefObject } from 'react'; +import { useEffect } from 'react'; import { getReaderOverlayStore, getReaderTapZoneStore, diff --git a/src/features/reader/overlay/mobile/ReaderOverlayHeaderMobile.tsx b/src/features/reader/overlay/mobile/ReaderOverlayHeaderMobile.tsx index afdd97e8..cecd19cd 100644 --- a/src/features/reader/overlay/mobile/ReaderOverlayHeaderMobile.tsx +++ b/src/features/reader/overlay/mobile/ReaderOverlayHeaderMobile.tsx @@ -16,12 +16,13 @@ import Link from '@mui/material/Link'; import { Link as RouterLink } from 'react-router-dom'; import { alpha } from '@mui/material/styles'; import Slide from '@mui/material/Slide'; -import { memo, Ref } from 'react'; +import type { Ref } from 'react'; +import { memo } from 'react'; import { useLingui } from '@lingui/react/macro'; import { CustomTooltip } from '@/base/components/CustomTooltip.tsx'; import { TypographyMaxLines } from '@/base/components/texts/TypographyMaxLines.tsx'; import { makeToast } from '@/base/utils/Toast.ts'; -import { MobileHeaderProps } from '@/features/reader/overlay/ReaderOverlay.types.ts'; +import type { MobileHeaderProps } from '@/features/reader/overlay/ReaderOverlay.types.ts'; import { LoadingPlaceholder } from '@/base/components/feedback/LoadingPlaceholder.tsx'; import { AppRoutes } from '@/base/AppRoute.constants.ts'; import { ReaderLibraryButton } from '@/features/reader/overlay/navigation/components/ReaderLibraryButton.tsx'; diff --git a/src/features/reader/overlay/navigation/components/ReaderBookmarkButton.tsx b/src/features/reader/overlay/navigation/components/ReaderBookmarkButton.tsx index 5ec5d282..7cb2bfd4 100644 --- a/src/features/reader/overlay/navigation/components/ReaderBookmarkButton.tsx +++ b/src/features/reader/overlay/navigation/components/ReaderBookmarkButton.tsx @@ -13,7 +13,7 @@ import BookmarkBorderIcon from '@mui/icons-material/BookmarkBorder'; import { useLingui } from '@lingui/react/macro'; import { CustomTooltip } from '@/base/components/CustomTooltip.tsx'; import { Chapters } from '@/features/chapter/services/Chapters.ts'; -import { ChapterAction, TChapterReader } from '@/features/chapter/Chapter.types.ts'; +import type { ChapterAction, TChapterReader } from '@/features/chapter/Chapter.types.ts'; import { CHAPTER_ACTION_TO_TRANSLATION } from '@/features/chapter/Chapter.constants.ts'; const BaseReaderBookmarkButton = ({ id, isBookmarked }: Pick) => { diff --git a/src/features/reader/overlay/navigation/components/ReaderChapterList.tsx b/src/features/reader/overlay/navigation/components/ReaderChapterList.tsx index 05a6a596..41a87153 100644 --- a/src/features/reader/overlay/navigation/components/ReaderChapterList.tsx +++ b/src/features/reader/overlay/navigation/components/ReaderChapterList.tsx @@ -6,11 +6,12 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { Virtuoso, VirtuosoProps } from 'react-virtuoso'; +import type { VirtuosoProps } from 'react-virtuoso'; +import { Virtuoso } from 'react-virtuoso'; import { useMemo } from 'react'; -import { ReaderStateChapters } from '@/features/reader/Reader.types.ts'; +import type { ReaderStateChapters } from '@/features/reader/Reader.types.ts'; import { ChapterListCard } from '@/features/chapter/components/cards/ChapterListCard.tsx'; -import { ChapterIdInfo } from '@/features/chapter/Chapter.types.ts'; +import type { ChapterIdInfo } from '@/features/chapter/Chapter.types.ts'; const onSelectNoop = () => {}; diff --git a/src/features/reader/overlay/navigation/desktop/ReaderNavBarDesktop.tsx b/src/features/reader/overlay/navigation/desktop/ReaderNavBarDesktop.tsx index 825fa046..07faaef9 100644 --- a/src/features/reader/overlay/navigation/desktop/ReaderNavBarDesktop.tsx +++ b/src/features/reader/overlay/navigation/desktop/ReaderNavBarDesktop.tsx @@ -15,7 +15,7 @@ import { memo, useCallback, useLayoutEffect, useRef, useState } from 'react'; import Drawer from '@mui/material/Drawer'; import { useLingui } from '@lingui/react/macro'; import { CustomTooltip } from '@/base/components/CustomTooltip.tsx'; -import { ReaderNavBarDesktopProps } from '@/features/reader/overlay/ReaderOverlay.types.ts'; +import type { ReaderNavBarDesktopProps } from '@/features/reader/overlay/ReaderOverlay.types.ts'; import { ReaderNavContainer } from '@/features/reader/overlay/navigation/desktop/components/ReaderNavContainer.tsx'; import { ReaderNavBarDesktopMetadata } from '@/features/reader/overlay/navigation/desktop/components/ReaderNavBarDesktopMetadata.tsx'; import { ReaderNavBarDesktopPageNavigation } from '@/features/reader/overlay/navigation/desktop/components/ReaderNavBarDesktopPageNavigation.tsx'; @@ -26,7 +26,7 @@ import { useNavBarContext } from '@/features/navigation-bar/NavbarContext.tsx'; import { useResizeObserver } from '@/base/hooks/useResizeObserver.tsx'; import { ReaderService } from '@/features/reader/services/ReaderService.ts'; import { LoadingPlaceholder } from '@/base/components/feedback/LoadingPlaceholder.tsx'; -import { NavbarContextType } from '@/features/navigation-bar/NavigationBar.types.ts'; +import type { NavbarContextType } from '@/features/navigation-bar/NavigationBar.types.ts'; import { withPropsFrom } from '@/base/hoc/withPropsFrom.tsx'; import { ReaderExitButton } from '@/features/reader/overlay/navigation/components/ReaderExitButton.tsx'; import { diff --git a/src/features/reader/overlay/navigation/desktop/components/ReaderNavBarDesktopActions.tsx b/src/features/reader/overlay/navigation/desktop/components/ReaderNavBarDesktopActions.tsx index 4f732133..8f03b12c 100644 --- a/src/features/reader/overlay/navigation/desktop/components/ReaderNavBarDesktopActions.tsx +++ b/src/features/reader/overlay/navigation/desktop/components/ReaderNavBarDesktopActions.tsx @@ -27,7 +27,7 @@ import { useReaderChaptersStore, useReaderPagesStore, } from '@/features/reader/stores/ReaderStore.ts'; -import { ChapterDownloadInfo, ChapterIdInfo } from '@/features/chapter/Chapter.types.ts'; +import type { ChapterDownloadInfo, ChapterIdInfo } from '@/features/chapter/Chapter.types.ts'; const DownloadButton = ({ id = -1, isDownloaded }: ChapterIdInfo & ChapterDownloadInfo) => { const { t } = useLingui(); diff --git a/src/features/reader/overlay/navigation/desktop/components/ReaderNavBarDesktopChapterNavigation.tsx b/src/features/reader/overlay/navigation/desktop/components/ReaderNavBarDesktopChapterNavigation.tsx index bcf4c05f..85817095 100644 --- a/src/features/reader/overlay/navigation/desktop/components/ReaderNavBarDesktopChapterNavigation.tsx +++ b/src/features/reader/overlay/navigation/desktop/components/ReaderNavBarDesktopChapterNavigation.tsx @@ -22,9 +22,9 @@ import { ReaderNavBarDesktopNextPreviousButton } from '@/features/reader/overlay import { getOptionForDirection } from '@/features/theme/services/ThemeCreator.ts'; import { ReaderService } from '@/features/reader/services/ReaderService.ts'; import { ReaderControls } from '@/features/reader/services/ReaderControls.ts'; -import { ReaderStateChapters } from '@/features/reader/Reader.types.ts'; +import type { ReaderStateChapters } from '@/features/reader/Reader.types.ts'; import { withPropsFrom } from '@/base/hoc/withPropsFrom.tsx'; -import { ChapterIdInfo } from '@/features/chapter/Chapter.types.ts'; +import type { ChapterIdInfo } from '@/features/chapter/Chapter.types.ts'; const BaseReaderNavBarDesktopChapterNavigation = ({ currentChapterId, diff --git a/src/features/reader/overlay/navigation/desktop/components/ReaderNavBarDesktopNextPreviousButton.tsx b/src/features/reader/overlay/navigation/desktop/components/ReaderNavBarDesktopNextPreviousButton.tsx index ed8f015c..4d994684 100644 --- a/src/features/reader/overlay/navigation/desktop/components/ReaderNavBarDesktopNextPreviousButton.tsx +++ b/src/features/reader/overlay/navigation/desktop/components/ReaderNavBarDesktopNextPreviousButton.tsx @@ -6,7 +6,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { ComponentProps } from 'react'; +import type { ComponentProps } from 'react'; import KeyboardArrowLeftIcon from '@mui/icons-material/KeyboardArrowLeft'; import KeyboardArrowRightIcon from '@mui/icons-material/KeyboardArrowRight'; import { CustomTooltip } from '@/base/components/CustomTooltip.tsx'; diff --git a/src/features/reader/overlay/navigation/desktop/quick-settings/ReaderNavBarDesktopQuickSettings.tsx b/src/features/reader/overlay/navigation/desktop/quick-settings/ReaderNavBarDesktopQuickSettings.tsx index ecaa8f0e..52310ce9 100644 --- a/src/features/reader/overlay/navigation/desktop/quick-settings/ReaderNavBarDesktopQuickSettings.tsx +++ b/src/features/reader/overlay/navigation/desktop/quick-settings/ReaderNavBarDesktopQuickSettings.tsx @@ -15,7 +15,7 @@ import { ReaderNavBarDesktopPageScale } from '@/features/reader/overlay/navigati import { ReaderNavBarDesktopReadingMode } from '@/features/reader/overlay/navigation/desktop/quick-settings/components/ReaderNavBarDesktopReadingMode.tsx'; import { ReaderNavBarDesktopOffsetDoubleSpread } from '@/features/reader/overlay/navigation/desktop/quick-settings/components/ReaderNavBarDesktopOffsetDoubleSpread.tsx'; import { ReaderNavBarDesktopReadingDirection } from '@/features/reader/overlay/navigation/desktop/quick-settings/components/ReaderNavBarDesktopReadingDirection.tsx'; -import { ReaderNavBarDesktopProps } from '@/features/reader/overlay/ReaderOverlay.types.ts'; +import type { ReaderNavBarDesktopProps } from '@/features/reader/overlay/ReaderOverlay.types.ts'; import { ReaderService } from '@/features/reader/services/ReaderService.ts'; import { ReaderNavBarDesktopAutoScroll } from '@/features/reader/auto-scroll/settings/quick-setting/ReaderNavBarDesktopAutoScroll.tsx'; import { useReaderSettingsStore } from '@/features/reader/stores/ReaderStore.ts'; diff --git a/src/features/reader/overlay/navigation/desktop/quick-settings/components/ReaderNavBarDesktopOffsetDoubleSpread.tsx b/src/features/reader/overlay/navigation/desktop/quick-settings/components/ReaderNavBarDesktopOffsetDoubleSpread.tsx index 7997f7ab..40a4b639 100644 --- a/src/features/reader/overlay/navigation/desktop/quick-settings/components/ReaderNavBarDesktopOffsetDoubleSpread.tsx +++ b/src/features/reader/overlay/navigation/desktop/quick-settings/components/ReaderNavBarDesktopOffsetDoubleSpread.tsx @@ -9,7 +9,7 @@ import Button from '@mui/material/Button'; import { useLingui } from '@lingui/react/macro'; import { OffsetDoubleSpreadIcon } from '@/assets/icons/svg/OffsetDoubleSpreadIcon.tsx'; -import { IReaderSettings } from '@/features/reader/Reader.types.ts'; +import type { IReaderSettings } from '@/features/reader/Reader.types.ts'; import { isOffsetDoubleSpreadPagesEditable } from '@/features/reader/settings/ReaderSettings.utils.tsx'; export const ReaderNavBarDesktopOffsetDoubleSpread = ({ diff --git a/src/features/reader/overlay/navigation/desktop/quick-settings/components/ReaderNavBarDesktopPageScale.tsx b/src/features/reader/overlay/navigation/desktop/quick-settings/components/ReaderNavBarDesktopPageScale.tsx index 05eee44d..ccc5ed05 100644 --- a/src/features/reader/overlay/navigation/desktop/quick-settings/components/ReaderNavBarDesktopPageScale.tsx +++ b/src/features/reader/overlay/navigation/desktop/quick-settings/components/ReaderNavBarDesktopPageScale.tsx @@ -11,7 +11,7 @@ import FitScreenIcon from '@mui/icons-material/FitScreen'; import { useLingui } from '@lingui/react/macro'; import { CustomTooltip } from '@/base/components/CustomTooltip.tsx'; import { ValueRotationButton } from '@/base/components/buttons/ValueRotationButton.tsx'; -import { +import type { IReaderSettings, IReaderSettingsWithDefaultFlag, ReaderPageScaleMode, @@ -21,7 +21,7 @@ import { READER_PAGE_SCALE_MODE_TO_SCALING_ALLOWED, READER_PAGE_SCALE_MODE_VALUES, } from '@/features/reader/settings/ReaderSettings.constants.tsx'; -import { MultiValueButtonDefaultableProps } from '@/base/Base.types.ts'; +import type { MultiValueButtonDefaultableProps } from '@/base/Base.types.ts'; import { CustomButtonIcon } from '@/base/components/buttons/CustomButtonIcon.tsx'; export const ReaderNavBarDesktopPageScale = ({ diff --git a/src/features/reader/overlay/navigation/desktop/quick-settings/components/ReaderNavBarDesktopReadingDirection.tsx b/src/features/reader/overlay/navigation/desktop/quick-settings/components/ReaderNavBarDesktopReadingDirection.tsx index f681f186..dd960ef6 100644 --- a/src/features/reader/overlay/navigation/desktop/quick-settings/components/ReaderNavBarDesktopReadingDirection.tsx +++ b/src/features/reader/overlay/navigation/desktop/quick-settings/components/ReaderNavBarDesktopReadingDirection.tsx @@ -8,12 +8,12 @@ import { useLingui } from '@lingui/react/macro'; import { ValueRotationButton } from '@/base/components/buttons/ValueRotationButton.tsx'; -import { IReaderSettingsWithDefaultFlag, ReadingDirection } from '@/features/reader/Reader.types.ts'; +import type { IReaderSettingsWithDefaultFlag, ReadingDirection } from '@/features/reader/Reader.types.ts'; import { READING_DIRECTION_VALUES, READING_DIRECTION_VALUE_TO_DISPLAY_DATA, } from '@/features/reader/settings/ReaderSettings.constants.tsx'; -import { MultiValueButtonDefaultableProps } from '@/base/Base.types.ts'; +import type { MultiValueButtonDefaultableProps } from '@/base/Base.types.ts'; export const ReaderNavBarDesktopReadingDirection = ({ readingDirection, diff --git a/src/features/reader/overlay/navigation/desktop/quick-settings/components/ReaderNavBarDesktopReadingMode.tsx b/src/features/reader/overlay/navigation/desktop/quick-settings/components/ReaderNavBarDesktopReadingMode.tsx index 414fdaba..4cca9ab1 100644 --- a/src/features/reader/overlay/navigation/desktop/quick-settings/components/ReaderNavBarDesktopReadingMode.tsx +++ b/src/features/reader/overlay/navigation/desktop/quick-settings/components/ReaderNavBarDesktopReadingMode.tsx @@ -8,12 +8,12 @@ import { useLingui } from '@lingui/react/macro'; import { ValueRotationButton } from '@/base/components/buttons/ValueRotationButton.tsx'; -import { IReaderSettingsWithDefaultFlag, ReadingMode } from '@/features/reader/Reader.types.ts'; +import type { IReaderSettingsWithDefaultFlag, ReadingMode } from '@/features/reader/Reader.types.ts'; import { READING_MODE_VALUE_TO_DISPLAY_DATA, READING_MODE_VALUES, } from '@/features/reader/settings/ReaderSettings.constants.tsx'; -import { MultiValueButtonDefaultableProps } from '@/base/Base.types.ts'; +import type { MultiValueButtonDefaultableProps } from '@/base/Base.types.ts'; export const ReaderNavBarDesktopReadingMode = ({ readingMode, diff --git a/src/features/reader/overlay/navigation/mobile/ReaderBottomBarMobile.tsx b/src/features/reader/overlay/navigation/mobile/ReaderBottomBarMobile.tsx index 142b3b36..a003af4a 100644 --- a/src/features/reader/overlay/navigation/mobile/ReaderBottomBarMobile.tsx +++ b/src/features/reader/overlay/navigation/mobile/ReaderBottomBarMobile.tsx @@ -19,7 +19,7 @@ import Slide from '@mui/material/Slide'; import { memo, useCallback, useLayoutEffect, useRef, useState } from 'react'; import { useLingui } from '@lingui/react/macro'; import { CustomTooltip } from '@/base/components/CustomTooltip.tsx'; -import { ReaderBottomBarMobileProps } from '@/features/reader/overlay/ReaderOverlay.types.ts'; +import type { ReaderBottomBarMobileProps } from '@/features/reader/overlay/ReaderOverlay.types.ts'; import { MobileReaderProgressBar } from '@/features/reader/overlay/progress-bar/mobile/MobileReaderProgressBar.tsx'; import { ReaderChapterList } from '@/features/reader/overlay/navigation/components/ReaderChapterList.tsx'; import { ReaderBottomBarMobileQuickSettings } from '@/features/reader/overlay/navigation/mobile/quick-settings/ReaderBottomBarMobileQuickSettings.tsx'; diff --git a/src/features/reader/overlay/progress-bar/ReaderProgressBar.tsx b/src/features/reader/overlay/progress-bar/ReaderProgressBar.tsx index 37bb5c2f..3c0d517a 100644 --- a/src/features/reader/overlay/progress-bar/ReaderProgressBar.tsx +++ b/src/features/reader/overlay/progress-bar/ReaderProgressBar.tsx @@ -6,12 +6,13 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { BoxProps } from '@mui/material/Box'; -import { ComponentProps, memo, ReactNode, useCallback, useMemo, useRef, useState } from 'react'; +import type { BoxProps } from '@mui/material/Box'; +import type { ComponentProps, ReactNode } from 'react'; +import { memo, useCallback, useMemo, useRef, useState } from 'react'; import ClickAwayListener from '@mui/material/ClickAwayListener'; -import { TypographyProps } from '@mui/material/Typography'; -import { StackProps } from '@mui/material/Stack'; -import { ReaderProgressBarProps } from '@/features/reader/overlay/progress-bar/ReaderProgressBar.types.ts'; +import type { TypographyProps } from '@mui/material/Typography'; +import type { StackProps } from '@mui/material/Stack'; +import type { ReaderProgressBarProps } from '@/features/reader/overlay/progress-bar/ReaderProgressBar.types.ts'; import { ReaderProgressBarPageNumber } from '@/features/reader/overlay/progress-bar/components/ReaderProgressBarPageNumber.tsx'; import { ReaderProgressBarContainer } from '@/features/reader/overlay/progress-bar/components/ReaderProgressBarContainer.tsx'; import { ReaderProgressBarRoot } from '@/features/reader/overlay/progress-bar/components/ReaderProgressBarRoot.tsx'; @@ -26,7 +27,7 @@ import { } from '@/features/reader/overlay/progress-bar/ReaderProgressBar.utils.tsx'; import { getOptionForDirection as getOptionForDirectionImpl } from '@/features/theme/services/ThemeCreator.ts'; import { ReaderProgressBarSlotsActionArea } from '@/features/reader/overlay/progress-bar/components/ReaderProgressBarSlotsActionArea.tsx'; -import { ReaderService } from '@/features/reader/services/ReaderService.ts'; +import type { ReaderService } from '@/features/reader/services/ReaderService.ts'; import { ReaderControls } from '@/features/reader/services/ReaderControls.ts'; import { ReaderProgressBarSlotWrapper } from '@/features/reader/overlay/progress-bar/components/ReaderProgressBarSlotWrapper.tsx'; import { useResizeObserver } from '@/base/hooks/useResizeObserver.tsx'; diff --git a/src/features/reader/overlay/progress-bar/ReaderProgressBar.types.ts b/src/features/reader/overlay/progress-bar/ReaderProgressBar.types.ts index 7c949288..f96b7f48 100644 --- a/src/features/reader/overlay/progress-bar/ReaderProgressBar.types.ts +++ b/src/features/reader/overlay/progress-bar/ReaderProgressBar.types.ts @@ -6,11 +6,11 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { BoxProps } from '@mui/material/Box'; -import { TooltipProps } from '@mui/material/Tooltip'; -import { IReaderSettings, PageData } from '@/features/reader/Reader.types.ts'; +import type { BoxProps } from '@mui/material/Box'; +import type { TooltipProps } from '@mui/material/Tooltip'; +import type { IReaderSettings, PageData } from '@/features/reader/Reader.types.ts'; -export interface ReaderProgressBarProps extends Pick {} +export type ReaderProgressBarProps = Pick; export interface TReaderProgressCurrentPage extends PageData { pagesIndex: number; diff --git a/src/features/reader/overlay/progress-bar/ReaderProgressBar.utils.tsx b/src/features/reader/overlay/progress-bar/ReaderProgressBar.utils.tsx index 0e224abf..eb9f7544 100644 --- a/src/features/reader/overlay/progress-bar/ReaderProgressBar.utils.tsx +++ b/src/features/reader/overlay/progress-bar/ReaderProgressBar.utils.tsx @@ -6,9 +6,10 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { TReaderProgressCurrentPage } from '@/features/reader/overlay/progress-bar/ReaderProgressBar.types.ts'; -import { getOptionForDirection as getOptionForDirectionImpl } from '@/features/theme/services/ThemeCreator.ts'; -import { ProgressBarPosition, ReaderStatePages } from '@/features/reader/Reader.types.ts'; +import type { TReaderProgressCurrentPage } from '@/features/reader/overlay/progress-bar/ReaderProgressBar.types.ts'; +import type { getOptionForDirection as getOptionForDirectionImpl } from '@/features/theme/services/ThemeCreator.ts'; +import type { ReaderStatePages } from '@/features/reader/Reader.types.ts'; +import { ProgressBarPosition } from '@/features/reader/Reader.types.ts'; import { coerceIn } from '@/lib/HelperFunctions.ts'; import { DirectionOffset } from '@/base/Base.types.ts'; diff --git a/src/features/reader/overlay/progress-bar/ReaderProgressBarStore.tsx b/src/features/reader/overlay/progress-bar/ReaderProgressBarStore.tsx index 8552332f..836e8889 100644 --- a/src/features/reader/overlay/progress-bar/ReaderProgressBarStore.tsx +++ b/src/features/reader/overlay/progress-bar/ReaderProgressBarStore.tsx @@ -6,8 +6,8 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { SliceCreator } from '@/lib/zustand/Zustand.types.ts'; -import { TReaderProgressBarContext } from '@/features/reader/overlay/progress-bar/ReaderProgressBar.types.ts'; +import type { SliceCreator } from '@/lib/zustand/Zustand.types.ts'; +import type { TReaderProgressBarContext } from '@/features/reader/overlay/progress-bar/ReaderProgressBar.types.ts'; export interface ReaderProgressBarStoreSlice { progressBar: TReaderProgressBarContext & { diff --git a/src/features/reader/overlay/progress-bar/components/ProgressBarHighlightReadPages.tsx b/src/features/reader/overlay/progress-bar/components/ProgressBarHighlightReadPages.tsx index c372c5fa..b55fec31 100644 --- a/src/features/reader/overlay/progress-bar/components/ProgressBarHighlightReadPages.tsx +++ b/src/features/reader/overlay/progress-bar/components/ProgressBarHighlightReadPages.tsx @@ -9,7 +9,7 @@ import Box from '@mui/material/Box'; import { styled } from '@mui/material/styles'; import { shouldForwardProp } from '@/base/utils/ShouldForwardProp.ts'; -import { IReaderSettings } from '@/features/reader/Reader.types.ts'; +import type { IReaderSettings } from '@/features/reader/Reader.types.ts'; import { applyStyles } from '@/base/utils/ApplyStyles.ts'; import { getProgressBarPositionInfo } from '@/features/reader/overlay/progress-bar/ReaderProgressBar.utils.tsx'; diff --git a/src/features/reader/overlay/progress-bar/components/ReaderProgressBarContainer.tsx b/src/features/reader/overlay/progress-bar/components/ReaderProgressBarContainer.tsx index d89e3a68..f3894cdc 100644 --- a/src/features/reader/overlay/progress-bar/components/ReaderProgressBarContainer.tsx +++ b/src/features/reader/overlay/progress-bar/components/ReaderProgressBarContainer.tsx @@ -8,7 +8,7 @@ import Stack from '@mui/material/Stack'; import { styled } from '@mui/material/styles'; -import { IReaderSettings } from '@/features/reader/Reader.types.ts'; +import type { IReaderSettings } from '@/features/reader/Reader.types.ts'; import { shouldForwardProp } from '@/base/utils/ShouldForwardProp.ts'; import { applyStyles } from '@/base/utils/ApplyStyles.ts'; import { getProgressBarPositionInfo } from '@/features/reader/overlay/progress-bar/ReaderProgressBar.utils.tsx'; diff --git a/src/features/reader/overlay/progress-bar/components/ReaderProgressBarCurrentPageSlot.tsx b/src/features/reader/overlay/progress-bar/components/ReaderProgressBarCurrentPageSlot.tsx index cfd97ce9..24e18125 100644 --- a/src/features/reader/overlay/progress-bar/components/ReaderProgressBarCurrentPageSlot.tsx +++ b/src/features/reader/overlay/progress-bar/components/ReaderProgressBarCurrentPageSlot.tsx @@ -7,9 +7,9 @@ */ import Box from '@mui/material/Box'; -import { ReactNode } from 'react'; +import type { ReactNode } from 'react'; import { CustomTooltip } from '@/base/components/CustomTooltip.tsx'; -import { CurrentPageSlotProps } from '@/features/reader/overlay/progress-bar/ReaderProgressBar.types.ts'; +import type { CurrentPageSlotProps } from '@/features/reader/overlay/progress-bar/ReaderProgressBar.types.ts'; import { applyStyles } from '@/base/utils/ApplyStyles.ts'; import { getProgressBarPositionInfo } from '@/features/reader/overlay/progress-bar/ReaderProgressBar.utils.tsx'; import { READER_PROGRESS_BAR_POSITION_TO_PLACEMENT } from '@/features/reader/settings/ReaderSettings.constants.tsx'; diff --git a/src/features/reader/overlay/progress-bar/components/ReaderProgressBarDirectionWrapper.tsx b/src/features/reader/overlay/progress-bar/components/ReaderProgressBarDirectionWrapper.tsx index 62cc2505..588020fb 100644 --- a/src/features/reader/overlay/progress-bar/components/ReaderProgressBarDirectionWrapper.tsx +++ b/src/features/reader/overlay/progress-bar/components/ReaderProgressBarDirectionWrapper.tsx @@ -9,7 +9,8 @@ import { useMemo } from 'react'; import { CacheProvider } from '@emotion/react'; import { ThemeProvider } from '@mui/material/styles'; -import Box, { BoxProps } from '@mui/material/Box'; +import type { BoxProps } from '@mui/material/Box'; +import Box from '@mui/material/Box'; import { useMetadataServerSettings } from '@/features/settings/services/ServerSettingsMetadata.ts'; import { getTheme } from '@/features/theme/services/AppThemes.ts'; import { createTheme } from '@/features/theme/services/ThemeCreator.ts'; diff --git a/src/features/reader/overlay/progress-bar/components/ReaderProgressBarSlot.tsx b/src/features/reader/overlay/progress-bar/components/ReaderProgressBarSlot.tsx index 0f43b616..c761c4a0 100644 --- a/src/features/reader/overlay/progress-bar/components/ReaderProgressBarSlot.tsx +++ b/src/features/reader/overlay/progress-bar/components/ReaderProgressBarSlot.tsx @@ -7,9 +7,10 @@ */ import Box from '@mui/material/Box'; -import { memo, ReactNode } from 'react'; +import type { ReactNode } from 'react'; +import { memo } from 'react'; import { CustomTooltip } from '@/base/components/CustomTooltip.tsx'; -import { ReaderProgressBarSlotProps } from '@/features/reader/overlay/progress-bar/ReaderProgressBar.types.ts'; +import type { ReaderProgressBarSlotProps } from '@/features/reader/overlay/progress-bar/ReaderProgressBar.types.ts'; import { READER_PROGRESS_BAR_POSITION_TO_PLACEMENT } from '@/features/reader/settings/ReaderSettings.constants.tsx'; diff --git a/src/features/reader/overlay/progress-bar/components/ReaderProgressBarSlotWrapper.tsx b/src/features/reader/overlay/progress-bar/components/ReaderProgressBarSlotWrapper.tsx index 58dfd766..76f394d0 100644 --- a/src/features/reader/overlay/progress-bar/components/ReaderProgressBarSlotWrapper.tsx +++ b/src/features/reader/overlay/progress-bar/components/ReaderProgressBarSlotWrapper.tsx @@ -6,11 +6,13 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import Box, { BoxProps } from '@mui/material/Box'; -import { memo, ReactNode, useMemo } from 'react'; +import type { BoxProps } from '@mui/material/Box'; +import Box from '@mui/material/Box'; +import type { ReactNode } from 'react'; +import { memo, useMemo } from 'react'; import { styled } from '@mui/material/styles'; import { shouldForwardProp } from '@/base/utils/ShouldForwardProp.ts'; -import { ReaderStatePages } from '@/features/reader/Reader.types.ts'; +import type { ReaderStatePages } from '@/features/reader/Reader.types.ts'; type StyledWrapperProps = { isFirstPage: boolean; diff --git a/src/features/reader/overlay/progress-bar/desktop/StandardReaderProgressBar.tsx b/src/features/reader/overlay/progress-bar/desktop/StandardReaderProgressBar.tsx index 9188088a..930e3b38 100644 --- a/src/features/reader/overlay/progress-bar/desktop/StandardReaderProgressBar.tsx +++ b/src/features/reader/overlay/progress-bar/desktop/StandardReaderProgressBar.tsx @@ -14,7 +14,7 @@ import { ProgressBarType } from '@/features/reader/Reader.types.ts'; import { applyStyles } from '@/base/utils/ApplyStyles.ts'; import { getProgressBarPositionInfo } from '@/features/reader/overlay/progress-bar/ReaderProgressBar.utils.tsx'; import { ReaderProgressBarDirectionWrapper } from '@/features/reader/overlay/progress-bar/components/ReaderProgressBarDirectionWrapper.tsx'; -import { NavbarContextType } from '@/features/navigation-bar/NavigationBar.types.ts'; +import type { NavbarContextType } from '@/features/navigation-bar/NavigationBar.types.ts'; import { withPropsFrom } from '@/base/hoc/withPropsFrom.tsx'; import { useNavBarContext } from '@/features/navigation-bar/NavbarContext.tsx'; import { ReaderProgressBarSlotDesktop } from '@/features/reader/overlay/progress-bar/desktop/components/ReaderProgressBarSlotDesktop.tsx'; diff --git a/src/features/reader/overlay/progress-bar/desktop/components/ReaderProgressBarSlotDesktop.tsx b/src/features/reader/overlay/progress-bar/desktop/components/ReaderProgressBarSlotDesktop.tsx index 4b05325b..5fa5068e 100644 --- a/src/features/reader/overlay/progress-bar/desktop/components/ReaderProgressBarSlotDesktop.tsx +++ b/src/features/reader/overlay/progress-bar/desktop/components/ReaderProgressBarSlotDesktop.tsx @@ -11,7 +11,7 @@ import Box from '@mui/material/Box'; import { memo } from 'react'; import { applyStyles } from '@/base/utils/ApplyStyles.ts'; import { ReaderProgressBarSlot } from '@/features/reader/overlay/progress-bar/components/ReaderProgressBarSlot.tsx'; -import { IReaderSettings } from '@/features/reader/Reader.types.ts'; +import type { IReaderSettings } from '@/features/reader/Reader.types.ts'; export const ReaderProgressBarSlotDesktop = memo( ({ diff --git a/src/features/reader/overlay/progress-bar/mobile/MobileReaderProgressBar.tsx b/src/features/reader/overlay/progress-bar/mobile/MobileReaderProgressBar.tsx index 9b7b64c9..7e85882f 100644 --- a/src/features/reader/overlay/progress-bar/mobile/MobileReaderProgressBar.tsx +++ b/src/features/reader/overlay/progress-bar/mobile/MobileReaderProgressBar.tsx @@ -12,8 +12,10 @@ import SkipNextIcon from '@mui/icons-material/SkipNext'; import Stack from '@mui/material/Stack'; import { alpha } from '@mui/material/styles'; import Box from '@mui/material/Box'; -import { ComponentProps, memo, useCallback, useLayoutEffect, useMemo, useState } from 'react'; -import Slide, { SlideProps } from '@mui/material/Slide'; +import type { ComponentProps } from 'react'; +import { memo, useCallback, useLayoutEffect, useMemo, useState } from 'react'; +import type { SlideProps } from '@mui/material/Slide'; +import Slide from '@mui/material/Slide'; import { ReaderProgressBar } from '@/features/reader/overlay/progress-bar/ReaderProgressBar.tsx'; import { ReaderService } from '@/features/reader/services/ReaderService.ts'; import { diff --git a/src/features/reader/overlay/progress-bar/mobile/components/ReaderProgressBarSlotMobile.tsx b/src/features/reader/overlay/progress-bar/mobile/components/ReaderProgressBarSlotMobile.tsx index 959db7f4..6741fc27 100644 --- a/src/features/reader/overlay/progress-bar/mobile/components/ReaderProgressBarSlotMobile.tsx +++ b/src/features/reader/overlay/progress-bar/mobile/components/ReaderProgressBarSlotMobile.tsx @@ -7,7 +7,8 @@ */ import Box from '@mui/material/Box'; -import { ComponentProps, memo } from 'react'; +import type { ComponentProps } from 'react'; +import { memo } from 'react'; import { ProgressBarPosition } from '@/features/reader/Reader.types.ts'; import { applyStyles } from '@/base/utils/ApplyStyles.ts'; import { ReaderProgressBarSlot } from '@/features/reader/overlay/progress-bar/components/ReaderProgressBarSlot.tsx'; diff --git a/src/features/reader/overlay/progress-bar/settings/components/ReaderSettingProgressBarPosition.tsx b/src/features/reader/overlay/progress-bar/settings/components/ReaderSettingProgressBarPosition.tsx index fb850e75..2f1539a1 100644 --- a/src/features/reader/overlay/progress-bar/settings/components/ReaderSettingProgressBarPosition.tsx +++ b/src/features/reader/overlay/progress-bar/settings/components/ReaderSettingProgressBarPosition.tsx @@ -11,12 +11,9 @@ import ArrowBackIosNewIcon from '@mui/icons-material/ArrowBackIosNew'; import AutoModeIcon from '@mui/icons-material/AutoMode'; import { useLingui } from '@lingui/react/macro'; import { msg } from '@lingui/core/macro'; -import { - IReaderSettings, - ProgressBarPosition, - ProgressBarPositionAutoVertical, -} from '@/features/reader/Reader.types.ts'; -import { ValueToDisplayData } from '@/base/Base.types.ts'; +import type { IReaderSettings } from '@/features/reader/Reader.types.ts'; +import { ProgressBarPosition, ProgressBarPositionAutoVertical } from '@/features/reader/Reader.types.ts'; +import type { ValueToDisplayData } from '@/base/Base.types.ts'; import { ButtonSelectInput } from '@/base/components/inputs/ButtonSelectInput.tsx'; const VALUE_TO_DISPLAY_DATA: ValueToDisplayData = { diff --git a/src/features/reader/overlay/progress-bar/settings/components/ReaderSettingProgressBarSize.tsx b/src/features/reader/overlay/progress-bar/settings/components/ReaderSettingProgressBarSize.tsx index 96e8a24e..bf19c16b 100644 --- a/src/features/reader/overlay/progress-bar/settings/components/ReaderSettingProgressBarSize.tsx +++ b/src/features/reader/overlay/progress-bar/settings/components/ReaderSettingProgressBarSize.tsx @@ -7,7 +7,8 @@ */ import { useLingui } from '@lingui/react/macro'; -import { IReaderSettings, ProgressBarType, ReaderOverlayMode } from '@/features/reader/Reader.types.ts'; +import type { IReaderSettings } from '@/features/reader/Reader.types.ts'; +import { ProgressBarType, ReaderOverlayMode } from '@/features/reader/Reader.types.ts'; import { SliderInput } from '@/base/components/inputs/SliderInput.tsx'; import { DEFAULT_READER_SETTINGS, PROGRESS_BAR_SIZE } from '@/features/reader/settings/ReaderSettings.constants.tsx'; diff --git a/src/features/reader/overlay/progress-bar/settings/components/ReaderSettingProgressBarType.tsx b/src/features/reader/overlay/progress-bar/settings/components/ReaderSettingProgressBarType.tsx index 6d458d73..7c05eaf3 100644 --- a/src/features/reader/overlay/progress-bar/settings/components/ReaderSettingProgressBarType.tsx +++ b/src/features/reader/overlay/progress-bar/settings/components/ReaderSettingProgressBarType.tsx @@ -8,8 +8,9 @@ import { useLingui } from '@lingui/react/macro'; import { msg } from '@lingui/core/macro'; -import { IReaderSettings, ProgressBarType, ReaderOverlayMode } from '@/features/reader/Reader.types.ts'; -import { ValueToDisplayData } from '@/base/Base.types.ts'; +import type { IReaderSettings } from '@/features/reader/Reader.types.ts'; +import { ProgressBarType, ReaderOverlayMode } from '@/features/reader/Reader.types.ts'; +import type { ValueToDisplayData } from '@/base/Base.types.ts'; import { HiddenProgressBarIcon } from '@/assets/icons/svg/HiddenProgressBarIcon.tsx'; import { StandardProgressBarIcon } from '@/assets/icons/svg/StandardProgressBarIcon.tsx'; import { ButtonSelectInput } from '@/base/components/inputs/ButtonSelectInput.tsx'; diff --git a/src/features/reader/overlay/settings/ReaderSettingOverlayMode.tsx b/src/features/reader/overlay/settings/ReaderSettingOverlayMode.tsx index 9abcf432..f636f511 100644 --- a/src/features/reader/overlay/settings/ReaderSettingOverlayMode.tsx +++ b/src/features/reader/overlay/settings/ReaderSettingOverlayMode.tsx @@ -11,8 +11,9 @@ import ComputerIcon from '@mui/icons-material/Computer'; import AutoModeIcon from '@mui/icons-material/AutoMode'; import { useLingui } from '@lingui/react/macro'; import { msg } from '@lingui/core/macro'; -import { IReaderSettings, ReaderOverlayMode } from '@/features/reader/Reader.types.ts'; -import { ValueToDisplayData } from '@/base/Base.types.ts'; +import type { IReaderSettings } from '@/features/reader/Reader.types.ts'; +import { ReaderOverlayMode } from '@/features/reader/Reader.types.ts'; +import type { ValueToDisplayData } from '@/base/Base.types.ts'; import { ButtonSelectInput } from '@/base/components/inputs/ButtonSelectInput.tsx'; const VALUE_TO_DISPLAY_DATA: ValueToDisplayData = { diff --git a/src/features/reader/screens/Reader.tsx b/src/features/reader/screens/Reader.tsx index c696905b..8265dc89 100644 --- a/src/features/reader/screens/Reader.tsx +++ b/src/features/reader/screens/Reader.tsx @@ -14,7 +14,7 @@ import { useDefaultReaderSettings } from '@/features/reader/settings/ReaderSetti import { useNavBarContext } from '@/features/navigation-bar/NavbarContext.tsx'; import { ReaderOverlay } from '@/features/reader/overlay/ReaderOverlay.tsx'; import { requestManager } from '@/lib/requests/RequestManager.ts'; -import { GetChaptersReaderQuery, GetMangaReaderQuery } from '@/lib/graphql/generated/graphql.ts'; +import type { GetChaptersReaderQuery, GetMangaReaderQuery } from '@/lib/graphql/generated/graphql.ts'; import { GET_MANGA_READER } from '@/lib/graphql/manga/MangaQuery.ts'; import { LoadingPlaceholder } from '@/base/components/feedback/LoadingPlaceholder.tsx'; import { EmptyViewAbsoluteCentered } from '@/base/components/feedback/EmptyViewAbsoluteCentered.tsx'; @@ -26,7 +26,7 @@ import { ReaderViewer } from '@/features/reader/viewer/ReaderViewer.tsx'; import { READER_BACKGROUND_TO_COLOR } from '@/features/reader/settings/ReaderSettings.constants.tsx'; import { ReaderHotkeys } from '@/features/reader/hotkeys/ReaderHotkeys.tsx'; import { getErrorMessage } from '@/lib/HelperFunctions.ts'; -import { NavbarContextType } from '@/features/navigation-bar/NavigationBar.types.ts'; +import type { NavbarContextType } from '@/features/navigation-bar/NavigationBar.types.ts'; import { withPropsFrom } from '@/base/hoc/withPropsFrom.tsx'; import { useReaderResetStates } from '@/features/reader/hooks/useReaderResetStates.ts'; import { useReaderSetSettingsState } from '@/features/reader/hooks/useReaderSetSettingsState.ts'; diff --git a/src/features/reader/services/ReaderControls.ts b/src/features/reader/services/ReaderControls.ts index 4b4aeff4..8a1713ee 100644 --- a/src/features/reader/services/ReaderControls.ts +++ b/src/features/reader/services/ReaderControls.ts @@ -6,9 +6,10 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { MessageDescriptor } from '@lingui/core'; -import { MutableRefObject, RefObject, useCallback, useEffect } from 'react'; -import { Direction } from '@mui/material/styles'; +import type { MessageDescriptor } from '@lingui/core'; +import type { MutableRefObject, RefObject } from 'react'; +import { useCallback, useEffect } from 'react'; +import type { Direction } from '@mui/material/styles'; import { d } from 'koration'; import { msg, t } from '@lingui/core/macro'; import { @@ -20,15 +21,13 @@ import { } from '@/features/reader/overlay/progress-bar/ReaderProgressBar.utils.tsx'; import { getCurrentTheme, getOptionForDirection } from '@/features/theme/services/ThemeCreator.ts'; import { ReaderService } from '@/features/reader/services/ReaderService.ts'; -import { +import type { PageInViewportType, ProgressBarPosition, - ReaderScrollAmount, ReaderStatePages, - ReaderTransitionPageMode, ReadingDirection, - ReadingMode, } from '@/features/reader/Reader.types.ts'; +import { ReaderScrollAmount, ReaderTransitionPageMode, ReadingMode } from '@/features/reader/Reader.types.ts'; import { DirectionOffset, ScrollDirection, ScrollOffset } from '@/base/Base.types'; import { READING_DIRECTION_TO_THEME_DIRECTION } from '@/features/reader/settings/ReaderSettings.constants.tsx'; import { @@ -46,9 +45,9 @@ import { } from '@/features/reader/Reader.utils.ts'; import { Chapters } from '@/features/chapter/services/Chapters.ts'; import { useMetadataServerSettings } from '@/features/settings/services/ServerSettingsMetadata.ts'; -import { ChapterIdInfo, TChapterReader } from '@/features/chapter/Chapter.types.ts'; +import type { ChapterIdInfo, TChapterReader } from '@/features/chapter/Chapter.types.ts'; import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts'; -import { TReaderProgressCurrentPage } from '@/features/reader/overlay/progress-bar/ReaderProgressBar.types.ts'; +import type { TReaderProgressCurrentPage } from '@/features/reader/overlay/progress-bar/ReaderProgressBar.types.ts'; import { getReaderChaptersStore, getReaderOverlayStore, diff --git a/src/features/reader/services/ReaderService.ts b/src/features/reader/services/ReaderService.ts index 33cd4ec2..93097c32 100644 --- a/src/features/reader/services/ReaderService.ts +++ b/src/features/reader/services/ReaderService.ts @@ -8,25 +8,20 @@ import { useCallback } from 'react'; import { useNavigate } from 'react-router-dom'; -import { Direction, useTheme } from '@mui/material/styles'; +import type { Direction } from '@mui/material/styles'; +import { useTheme } from '@mui/material/styles'; import { t } from '@lingui/core/macro'; -import { ChapterIdInfo, TChapterReader } from '@/features/chapter/Chapter.types.ts'; +import type { ChapterIdInfo, TChapterReader } from '@/features/chapter/Chapter.types.ts'; import { Chapters } from '@/features/chapter/services/Chapters.ts'; -import { - IReaderSettings, - ReaderExitMode, - ReaderOpenChapterLocationState, - ReaderOverlayMode, - ReadingDirection, - ReadingMode, -} from '@/features/reader/Reader.types.ts'; +import type { IReaderSettings, ReaderOpenChapterLocationState } from '@/features/reader/Reader.types.ts'; +import { ReaderExitMode, ReaderOverlayMode, ReadingDirection, ReadingMode } from '@/features/reader/Reader.types.ts'; import { requestManager } from '@/lib/requests/RequestManager.ts'; import { MANGA_META_FIELDS } from '@/lib/graphql/manga/MangaFragments.ts'; import { makeToast } from '@/base/utils/Toast.ts'; import { MediaQuery } from '@/base/utils/MediaQuery.tsx'; import { useBackButton } from '@/base/hooks/useBackButton.ts'; import { GLOBAL_READER_SETTING_KEYS } from '@/features/reader/settings/ReaderSettings.constants.tsx'; -import { UpdateChapterPatchInput } from '@/lib/graphql/generated/graphql.ts'; +import type { UpdateChapterPatchInput } from '@/lib/graphql/generated/graphql.ts'; import { useMetadataServerSettings } from '@/features/settings/services/ServerSettingsMetadata.ts'; import { getChapterIdsForDownloadAhead, @@ -56,8 +51,13 @@ import { MetadataChunker } from '@/features/metadata/services/MetadataChunker.ts import { MetadataValueCache } from '@/features/metadata/services/MetadataValueCache.ts'; import { convertFromGqlMeta, convertToGqlMeta } from '@/features/metadata/services/MetadataConverter.ts'; import { GLOBAL_METADATA } from '@/lib/graphql/common/Fragments.ts'; -import { AppMetadataKeys, GqlMetaHolder, Metadata, MetadataHolderType } from '@/features/metadata/Metadata.types.ts'; -import { MangaIdInfo } from '@/features/manga/Manga.types.ts'; +import type { + AppMetadataKeys, + GqlMetaHolder, + Metadata, + MetadataHolderType, +} from '@/features/metadata/Metadata.types.ts'; +import type { MangaIdInfo } from '@/features/manga/Manga.types.ts'; const DIRECTION_TO_INVERTED: Record = { ltr: 'rtl', diff --git a/src/features/reader/settings/ReaderSettings.constants.tsx b/src/features/reader/settings/ReaderSettings.constants.tsx index bce86399..f82a3320 100644 --- a/src/features/reader/settings/ReaderSettings.constants.tsx +++ b/src/features/reader/settings/ReaderSettings.constants.tsx @@ -6,19 +6,19 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { MessageDescriptor } from '@lingui/core'; +import type { MessageDescriptor } from '@lingui/core'; import ArrowCircleLeftIcon from '@mui/icons-material/ArrowCircleLeft'; import ArrowCircleRightIcon from '@mui/icons-material/ArrowCircleRight'; import ZoomOutMapIcon from '@mui/icons-material/ZoomOutMap'; import ExpandIcon from '@mui/icons-material/Expand'; import CropOriginalIcon from '@mui/icons-material/CropOriginal'; -import { TooltipProps } from '@mui/material/Tooltip'; -import { Direction } from '@mui/material/styles'; +import type { TooltipProps } from '@mui/material/Tooltip'; +import type { Direction } from '@mui/material/styles'; import { msg } from '@lingui/core/macro'; -import { ScrollDirection, ValueToDisplayData } from '@/base/Base.types'; +import type { ValueToDisplayData } from '@/base/Base.types'; +import { ScrollDirection } from '@/base/Base.types'; +import type { IReaderSettings, IReaderSettingsGlobal } from '@/features/reader/Reader.types.ts'; import { - IReaderSettings, - IReaderSettingsGlobal, ProgressBarPosition, ProgressBarType, ReaderBackgroundColor, diff --git a/src/features/reader/settings/ReaderSettings.utils.tsx b/src/features/reader/settings/ReaderSettings.utils.tsx index fecbe885..8a7c1631 100644 --- a/src/features/reader/settings/ReaderSettings.utils.tsx +++ b/src/features/reader/settings/ReaderSettings.utils.tsx @@ -6,17 +6,15 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { NamedExoticComponent, RefAttributes } from 'react'; -import { +import type { NamedExoticComponent, RefAttributes } from 'react'; +import type { IReaderSettings, IReaderSettingsWithDefaultFlag, - ProgressBarPosition, ProgressBarPositionAutoVertical, ReaderPagerProps, - ReaderPageScaleMode, - ReadingMode, } from '@/features/reader/Reader.types.ts'; -import { MangaGenreInfo, MangaSourceNameInfo } from '@/features/manga/Manga.types.ts'; +import { ProgressBarPosition, ReaderPageScaleMode, ReadingMode } from '@/features/reader/Reader.types.ts'; +import type { MangaGenreInfo, MangaSourceNameInfo } from '@/features/manga/Manga.types.ts'; import { Mangas } from '@/features/manga/services/Mangas.ts'; import { ReaderPagedPager } from '@/features/reader/viewer/pager/components/ReaderPagedPager.tsx'; import { ReaderDoublePagedPager } from '@/features/reader/viewer/pager/components/ReaderDoublePagedPager.tsx'; diff --git a/src/features/reader/settings/ReaderSettingsMetadata.ts b/src/features/reader/settings/ReaderSettingsMetadata.ts index 5237ee2a..aeec221b 100644 --- a/src/features/reader/settings/ReaderSettingsMetadata.ts +++ b/src/features/reader/settings/ReaderSettingsMetadata.ts @@ -13,11 +13,11 @@ import { requestMangaMetadataUpdate, requestServerMetadataUpdate, } from '@/features/metadata/services/MetadataUpdater.ts'; -import { MangaType } from '@/lib/graphql/generated/graphql.ts'; -import { IReaderSettings, IReaderSettingsWithDefaultFlag, ReadingMode } from '@/features/reader/Reader.types.ts'; +import type { MangaType } from '@/lib/graphql/generated/graphql.ts'; +import type { IReaderSettings, IReaderSettingsWithDefaultFlag, ReadingMode } from '@/features/reader/Reader.types.ts'; import { convertFromGqlMeta } from '@/features/metadata/services/MetadataConverter.ts'; import { getMetadataFrom } from '@/features/metadata/services/MetadataReader.ts'; -import { +import type { AllowedMetadataValueTypes, GqlMetaHolder, Metadata, @@ -25,7 +25,7 @@ import { MetadataHolderType, } from '@/features/metadata/Metadata.types.ts'; import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts'; -import { MangaIdInfo } from '@/features/manga/Manga.types.ts'; +import type { MangaIdInfo } from '@/features/manga/Manga.types.ts'; import { DEFAULT_READER_SETTINGS, GLOBAL_READER_SETTING_KEYS, diff --git a/src/features/reader/settings/behaviour/ReaderBehaviourSettings.tsx b/src/features/reader/settings/behaviour/ReaderBehaviourSettings.tsx index 4f44852c..21e2e310 100644 --- a/src/features/reader/settings/behaviour/ReaderBehaviourSettings.tsx +++ b/src/features/reader/settings/behaviour/ReaderBehaviourSettings.tsx @@ -10,8 +10,8 @@ import Stack from '@mui/material/Stack'; import Box from '@mui/material/Box'; import Typography from '@mui/material/Typography'; import { useLingui } from '@lingui/react/macro'; -import { ReaderService } from '@/features/reader/services/ReaderService.ts'; -import { IReaderSettingsWithDefaultFlag, ReaderSettingsTypeProps } from '@/features/reader/Reader.types.ts'; +import type { ReaderService } from '@/features/reader/services/ReaderService.ts'; +import type { IReaderSettingsWithDefaultFlag, ReaderSettingsTypeProps } from '@/features/reader/Reader.types.ts'; import { CheckboxInput } from '@/base/components/inputs/CheckboxInput.tsx'; import { ReaderSettingExitMode } from '@/features/reader/settings/behaviour/components/ReaderSettingExitMode.tsx'; import { isOffsetDoubleSpreadPagesEditable } from '@/features/reader/settings/ReaderSettings.utils.tsx'; diff --git a/src/features/reader/settings/behaviour/components/ReaderSettingExitMode.tsx b/src/features/reader/settings/behaviour/components/ReaderSettingExitMode.tsx index 03850af1..13c0f8c2 100644 --- a/src/features/reader/settings/behaviour/components/ReaderSettingExitMode.tsx +++ b/src/features/reader/settings/behaviour/components/ReaderSettingExitMode.tsx @@ -8,8 +8,9 @@ import { useLingui } from '@lingui/react/macro'; import { msg } from '@lingui/core/macro'; -import { IReaderSettings, ReaderExitMode } from '@/features/reader/Reader.types.ts'; -import { ValueToDisplayData } from '@/base/Base.types.ts'; +import type { IReaderSettings } from '@/features/reader/Reader.types.ts'; +import { ReaderExitMode } from '@/features/reader/Reader.types.ts'; +import type { ValueToDisplayData } from '@/base/Base.types.ts'; import { ButtonSelectInput } from '@/base/components/inputs/ButtonSelectInput.tsx'; const VALUE_TO_DISPLAY_DATA: ValueToDisplayData = { diff --git a/src/features/reader/settings/behaviour/components/ReaderSettingScrollAmount.tsx b/src/features/reader/settings/behaviour/components/ReaderSettingScrollAmount.tsx index b0890006..5f3a34e5 100644 --- a/src/features/reader/settings/behaviour/components/ReaderSettingScrollAmount.tsx +++ b/src/features/reader/settings/behaviour/components/ReaderSettingScrollAmount.tsx @@ -8,8 +8,9 @@ import { useLingui } from '@lingui/react/macro'; import { msg } from '@lingui/core/macro'; -import { IReaderSettings, ReaderScrollAmount } from '@/features/reader/Reader.types.ts'; -import { ValueToDisplayData } from '@/base/Base.types.ts'; +import type { IReaderSettings } from '@/features/reader/Reader.types.ts'; +import { ReaderScrollAmount } from '@/features/reader/Reader.types.ts'; +import type { ValueToDisplayData } from '@/base/Base.types.ts'; import { ButtonSelectInput } from '@/base/components/inputs/ButtonSelectInput.tsx'; import { SliderInput } from '@/base/components/inputs/SliderInput.tsx'; import { DEFAULT_READER_SETTINGS, SCROLL_AMOUNT } from '@/features/reader/settings/ReaderSettings.constants.tsx'; diff --git a/src/features/reader/settings/components/ReaderSettingsTabs.tsx b/src/features/reader/settings/components/ReaderSettingsTabs.tsx index 59eb9418..918bc26b 100644 --- a/src/features/reader/settings/components/ReaderSettingsTabs.tsx +++ b/src/features/reader/settings/components/ReaderSettingsTabs.tsx @@ -12,7 +12,7 @@ import { useLingui } from '@lingui/react/macro'; import { TabsMenu } from '@/base/components/tabs/TabsMenu.tsx'; import { ReaderService } from '@/features/reader/services/ReaderService.ts'; import { MediaQuery } from '@/base/utils/MediaQuery.tsx'; -import { IReaderSettings, IReaderSettingsWithDefaultFlag } from '@/features/reader/Reader.types.ts'; +import type { IReaderSettings, IReaderSettingsWithDefaultFlag } from '@/features/reader/Reader.types.ts'; import { applyStyles } from '@/base/utils/ApplyStyles.ts'; import { READER_SETTING_TABS, ReaderSettingTab } from '@/features/reader/settings/ReaderSettings.constants.tsx'; import { TabPanel } from '@/base/components/tabs/TabPanel.tsx'; diff --git a/src/features/reader/settings/general/ReaderGeneralSettings.tsx b/src/features/reader/settings/general/ReaderGeneralSettings.tsx index 6cc1a0f9..e1b76698 100644 --- a/src/features/reader/settings/general/ReaderGeneralSettings.tsx +++ b/src/features/reader/settings/general/ReaderGeneralSettings.tsx @@ -11,12 +11,8 @@ import { useLingui } from '@lingui/react/macro'; import { ReaderSettingProgressBarType } from '@/features/reader/overlay/progress-bar/settings/components/ReaderSettingProgressBarType.tsx'; import { ReaderSettingProgressBarSize } from '@/features/reader/overlay/progress-bar/settings/components/ReaderSettingProgressBarSize.tsx'; import { ReaderSettingProgressBarPosition } from '@/features/reader/overlay/progress-bar/settings/components/ReaderSettingProgressBarPosition.tsx'; -import { - IReaderSettings, - ProgressBarType, - ReaderOverlayMode, - ReaderSettingsTypeProps, -} from '@/features/reader/Reader.types.ts'; +import type { IReaderSettings, ReaderSettingsTypeProps } from '@/features/reader/Reader.types.ts'; +import { ProgressBarType, ReaderOverlayMode } from '@/features/reader/Reader.types.ts'; import { ReaderSettingOverlayMode } from '@/features/reader/overlay/settings/ReaderSettingOverlayMode.tsx'; import { CheckboxInput } from '@/base/components/inputs/CheckboxInput.tsx'; import { ReaderSettingBackgroundColor } from '@/features/reader/settings/general/components/ReaderSettingBackgroundColor.tsx'; diff --git a/src/features/reader/settings/general/components/ReaderSettingBackgroundColor.tsx b/src/features/reader/settings/general/components/ReaderSettingBackgroundColor.tsx index b3d57459..04fee942 100644 --- a/src/features/reader/settings/general/components/ReaderSettingBackgroundColor.tsx +++ b/src/features/reader/settings/general/components/ReaderSettingBackgroundColor.tsx @@ -8,9 +8,10 @@ import { useLingui } from '@lingui/react/macro'; import { msg } from '@lingui/core/macro'; -import { ValueToDisplayData } from '@/base/Base.types.ts'; +import type { ValueToDisplayData } from '@/base/Base.types.ts'; import { ButtonSelectInput } from '@/base/components/inputs/ButtonSelectInput.tsx'; -import { IReaderSettingsWithDefaultFlag, ReaderBackgroundColor } from '@/features/reader/Reader.types.ts'; +import type { IReaderSettingsWithDefaultFlag } from '@/features/reader/Reader.types.ts'; +import { ReaderBackgroundColor } from '@/features/reader/Reader.types.ts'; const VALUE_TO_DISPLAY_DATA: ValueToDisplayData = { [ReaderBackgroundColor.THEME]: { diff --git a/src/features/reader/settings/layout/ReaderDefaultLayoutSettings.tsx b/src/features/reader/settings/layout/ReaderDefaultLayoutSettings.tsx index 6a935a02..b75f997f 100644 --- a/src/features/reader/settings/layout/ReaderDefaultLayoutSettings.tsx +++ b/src/features/reader/settings/layout/ReaderDefaultLayoutSettings.tsx @@ -7,16 +7,16 @@ */ import Stack from '@mui/material/Stack'; -import { ComponentProps } from 'react'; +import type { ComponentProps } from 'react'; import { useLingui } from '@lingui/react/macro'; -import { ReaderLayoutSettings } from '@/features/reader/settings/layout/ReaderLayoutSettings.tsx'; +import type { ReaderLayoutSettings } from '@/features/reader/settings/layout/ReaderLayoutSettings.tsx'; import { ReaderSettingProfileSettings } from '@/features/reader/settings/layout/components/ReaderSettingProfileSettings.tsx'; import { READING_MODE_VALUE_TO_DISPLAY_DATA, READING_MODE_VALUES, } from '@/features/reader/settings/ReaderSettings.constants.tsx'; import { ReaderSettingReadingMode } from '@/features/reader/settings/layout/components/ReaderSettingReadingMode.tsx'; -import { IReaderSettingsWithDefaultFlag, ReadingMode } from '@/features/reader/Reader.types.ts'; +import type { IReaderSettingsWithDefaultFlag, ReadingMode } from '@/features/reader/Reader.types.ts'; export const ReaderDefaultLayoutSettings = ({ profiles = READING_MODE_VALUES, diff --git a/src/features/reader/settings/layout/ReaderLayoutSettings.tsx b/src/features/reader/settings/layout/ReaderLayoutSettings.tsx index c63e7a32..f9245eb2 100644 --- a/src/features/reader/settings/layout/ReaderLayoutSettings.tsx +++ b/src/features/reader/settings/layout/ReaderLayoutSettings.tsx @@ -16,7 +16,7 @@ import { ReaderSettingTapZoneLayout } from '@/features/reader/settings/layout/co import { ReaderSettingTapZoneInvertMode } from '@/features/reader/settings/layout/components/ReaderSettingTapZoneInvertMode.tsx'; import { ReaderSettingPageScaleMode } from '@/features/reader/settings/layout/components/ReaderSettingPageScaleMode.tsx'; import { ReaderSettingStretchPage } from '@/features/reader/settings/layout/components/ReaderSettingStretchPage.tsx'; -import { ReaderSettingsTypeProps } from '@/features/reader/Reader.types.ts'; +import type { ReaderSettingsTypeProps } from '@/features/reader/Reader.types.ts'; import { ReaderSettingPageGap } from '@/features/reader/settings/layout/components/ReaderSettingPageGap.tsx'; import { ReaderSettingWidth } from '@/features/reader/settings/layout/components/ReaderSettingWidth.tsx'; import { DefaultSettingFootnote } from '@/features/reader/settings/components/DefaultSettingFootnote.tsx'; diff --git a/src/features/reader/settings/layout/components/ReaderSettingPageGap.tsx b/src/features/reader/settings/layout/components/ReaderSettingPageGap.tsx index 95ea9d15..1104eee3 100644 --- a/src/features/reader/settings/layout/components/ReaderSettingPageGap.tsx +++ b/src/features/reader/settings/layout/components/ReaderSettingPageGap.tsx @@ -7,11 +7,12 @@ */ import { useLingui } from '@lingui/react/macro'; -import { IReaderSettings, IReaderSettingsWithDefaultFlag, ReadingMode } from '@/features/reader/Reader.types.ts'; +import type { IReaderSettings, IReaderSettingsWithDefaultFlag } from '@/features/reader/Reader.types.ts'; +import { ReadingMode } from '@/features/reader/Reader.types.ts'; import { SliderInput } from '@/base/components/inputs/SliderInput.tsx'; import { DEFAULT_READER_SETTINGS, PAGE_GAP } from '@/features/reader/settings/ReaderSettings.constants.tsx'; import { isContinuousReadingMode } from '@/features/reader/settings/ReaderSettings.utils.tsx'; -import { MultiValueButtonDefaultableProps } from '@/base/Base.types.ts'; +import type { MultiValueButtonDefaultableProps } from '@/base/Base.types.ts'; export const ReaderSettingPageGap = ({ pageGap, diff --git a/src/features/reader/settings/layout/components/ReaderSettingPageScaleMode.tsx b/src/features/reader/settings/layout/components/ReaderSettingPageScaleMode.tsx index 18d465ea..ce334866 100644 --- a/src/features/reader/settings/layout/components/ReaderSettingPageScaleMode.tsx +++ b/src/features/reader/settings/layout/components/ReaderSettingPageScaleMode.tsx @@ -7,13 +7,17 @@ */ import { useLingui } from '@lingui/react/macro'; -import { IReaderSettings, IReaderSettingsWithDefaultFlag, ReadingDirection } from '@/features/reader/Reader.types.ts'; +import type { + IReaderSettings, + IReaderSettingsWithDefaultFlag, + ReadingDirection, +} from '@/features/reader/Reader.types.ts'; import { PAGE_SCALE_VALUE_TO_DISPLAY_DATA, READER_PAGE_SCALE_MODE_VALUES, } from '@/features/reader/settings/ReaderSettings.constants.tsx'; import { ButtonSelectInput } from '@/base/components/inputs/ButtonSelectInput.tsx'; -import { MultiValueButtonDefaultableProps } from '@/base/Base.types.ts'; +import type { MultiValueButtonDefaultableProps } from '@/base/Base.types.ts'; export const ReaderSettingPageScaleMode = ({ pageScaleMode, diff --git a/src/features/reader/settings/layout/components/ReaderSettingProfileSettings.tsx b/src/features/reader/settings/layout/components/ReaderSettingProfileSettings.tsx index 9d22ccb9..366cae72 100644 --- a/src/features/reader/settings/layout/components/ReaderSettingProfileSettings.tsx +++ b/src/features/reader/settings/layout/components/ReaderSettingProfileSettings.tsx @@ -8,11 +8,12 @@ import Stack from '@mui/material/Stack'; import ListSubheader from '@mui/material/ListSubheader'; -import { ComponentProps, useMemo } from 'react'; +import type { ComponentProps } from 'react'; +import { useMemo } from 'react'; import Typography from '@mui/material/Typography'; import { ReaderLayoutSettings } from '@/features/reader/settings/layout/ReaderLayoutSettings.tsx'; import { useDefaultReaderSettingsWithDefaultFlag } from '@/features/reader/settings/ReaderSettingsMetadata.ts'; -import { ReadingMode } from '@/features/reader/Reader.types.ts'; +import type { ReadingMode } from '@/features/reader/Reader.types.ts'; export const ReaderSettingProfileSettings = ({ profile, diff --git a/src/features/reader/settings/layout/components/ReaderSettingReadingDirection.tsx b/src/features/reader/settings/layout/components/ReaderSettingReadingDirection.tsx index c523c460..6722097b 100644 --- a/src/features/reader/settings/layout/components/ReaderSettingReadingDirection.tsx +++ b/src/features/reader/settings/layout/components/ReaderSettingReadingDirection.tsx @@ -10,8 +10,9 @@ import ArrowCircleLeftIcon from '@mui/icons-material/ArrowCircleLeft'; import ArrowCircleRightIcon from '@mui/icons-material/ArrowCircleRight'; import { useLingui } from '@lingui/react/macro'; import { msg } from '@lingui/core/macro'; -import { IReaderSettingsWithDefaultFlag, ReadingDirection } from '@/features/reader/Reader.types.ts'; -import { MultiValueButtonDefaultableProps, ValueToDisplayData } from '@/base/Base.types.ts'; +import type { IReaderSettingsWithDefaultFlag } from '@/features/reader/Reader.types.ts'; +import { ReadingDirection } from '@/features/reader/Reader.types.ts'; +import type { MultiValueButtonDefaultableProps, ValueToDisplayData } from '@/base/Base.types.ts'; import { ButtonSelectInput } from '@/base/components/inputs/ButtonSelectInput.tsx'; const VALUE_TO_DISPLAY_DATA: ValueToDisplayData = { diff --git a/src/features/reader/settings/layout/components/ReaderSettingReadingMode.tsx b/src/features/reader/settings/layout/components/ReaderSettingReadingMode.tsx index 7ca787e8..634fae10 100644 --- a/src/features/reader/settings/layout/components/ReaderSettingReadingMode.tsx +++ b/src/features/reader/settings/layout/components/ReaderSettingReadingMode.tsx @@ -7,13 +7,13 @@ */ import { useLingui } from '@lingui/react/macro'; -import { IReaderSettingsWithDefaultFlag, ReadingMode } from '@/features/reader/Reader.types.ts'; +import type { IReaderSettingsWithDefaultFlag, ReadingMode } from '@/features/reader/Reader.types.ts'; import { READING_MODE_VALUE_TO_DISPLAY_DATA, READING_MODE_VALUES, } from '@/features/reader/settings/ReaderSettings.constants.tsx'; import { ButtonSelectInput } from '@/base/components/inputs/ButtonSelectInput.tsx'; -import { MultiValueButtonDefaultableProps } from '@/base/Base.types.ts'; +import type { MultiValueButtonDefaultableProps } from '@/base/Base.types.ts'; export const ReaderSettingReadingMode = ({ readingMode, diff --git a/src/features/reader/settings/layout/components/ReaderSettingStretchPage.tsx b/src/features/reader/settings/layout/components/ReaderSettingStretchPage.tsx index e32d05fb..1eaebe5a 100644 --- a/src/features/reader/settings/layout/components/ReaderSettingStretchPage.tsx +++ b/src/features/reader/settings/layout/components/ReaderSettingStretchPage.tsx @@ -9,7 +9,7 @@ import Button from '@mui/material/Button'; import Box from '@mui/material/Box'; import { useLingui } from '@lingui/react/macro'; -import { IReaderSettings } from '@/features/reader/Reader.types.ts'; +import type { IReaderSettings } from '@/features/reader/Reader.types.ts'; import { READER_PAGE_SCALE_MODE_TO_SCALING_ALLOWED } from '@/features/reader/settings/ReaderSettings.constants.tsx'; export const ReaderSettingStretchPage = ({ diff --git a/src/features/reader/settings/layout/components/ReaderSettingTapZoneInvertMode.tsx b/src/features/reader/settings/layout/components/ReaderSettingTapZoneInvertMode.tsx index c19b6152..9602a3bf 100644 --- a/src/features/reader/settings/layout/components/ReaderSettingTapZoneInvertMode.tsx +++ b/src/features/reader/settings/layout/components/ReaderSettingTapZoneInvertMode.tsx @@ -8,9 +8,13 @@ import { useLingui } from '@lingui/react/macro'; import { msg } from '@lingui/core/macro'; -import { MultiValueButtonDefaultableProps, ValueToDisplayData } from '@/base/Base.types.ts'; -import { IReaderSettings, IReaderSettingsWithDefaultFlag, ReadingDirection } from '@/features/reader/Reader.types.ts'; -import { TapZoneInvertMode } from '@/features/reader/tap-zones/TapZoneLayout.types.ts'; +import type { MultiValueButtonDefaultableProps, ValueToDisplayData } from '@/base/Base.types.ts'; +import type { + IReaderSettings, + IReaderSettingsWithDefaultFlag, + ReadingDirection, +} from '@/features/reader/Reader.types.ts'; +import type { TapZoneInvertMode } from '@/features/reader/tap-zones/TapZoneLayout.types.ts'; import { ButtonSelectInput } from '@/base/components/inputs/ButtonSelectInput.tsx'; enum TapZonesInvertOption { diff --git a/src/features/reader/settings/layout/components/ReaderSettingTapZoneLayout.tsx b/src/features/reader/settings/layout/components/ReaderSettingTapZoneLayout.tsx index 8e87e0ca..b8ab99ec 100644 --- a/src/features/reader/settings/layout/components/ReaderSettingTapZoneLayout.tsx +++ b/src/features/reader/settings/layout/components/ReaderSettingTapZoneLayout.tsx @@ -9,8 +9,8 @@ import { useLingui } from '@lingui/react/macro'; import { msg } from '@lingui/core/macro'; import { TapZoneLayouts } from '@/features/reader/tap-zones/TapZoneLayout.types.ts'; -import { MultiValueButtonDefaultableProps, ValueToDisplayData } from '@/base/Base.types.ts'; -import { IReaderSettingsWithDefaultFlag, ReadingDirection } from '@/features/reader/Reader.types.ts'; +import type { MultiValueButtonDefaultableProps, ValueToDisplayData } from '@/base/Base.types.ts'; +import type { IReaderSettingsWithDefaultFlag, ReadingDirection } from '@/features/reader/Reader.types.ts'; import { ButtonSelectInput } from '@/base/components/inputs/ButtonSelectInput.tsx'; const VALUE_TO_DISPLAY_DATA: ValueToDisplayData = { diff --git a/src/features/reader/settings/layout/components/ReaderSettingWidth.tsx b/src/features/reader/settings/layout/components/ReaderSettingWidth.tsx index 8863f4b8..c2991449 100644 --- a/src/features/reader/settings/layout/components/ReaderSettingWidth.tsx +++ b/src/features/reader/settings/layout/components/ReaderSettingWidth.tsx @@ -8,13 +8,13 @@ import Stack from '@mui/material/Stack'; import { useLingui } from '@lingui/react/macro'; -import { IReaderSettings } from '@/features/reader/Reader.types.ts'; +import type { IReaderSettings } from '@/features/reader/Reader.types.ts'; import { CheckboxInput } from '@/base/components/inputs/CheckboxInput.tsx'; -import { ReaderService } from '@/features/reader/services/ReaderService.ts'; +import type { ReaderService } from '@/features/reader/services/ReaderService.ts'; import { SliderInput } from '@/base/components/inputs/SliderInput.tsx'; import { DEFAULT_READER_SETTINGS } from '@/features/reader/settings/ReaderSettings.constants.tsx'; import { isReaderWidthEditable } from '@/features/reader/settings/ReaderSettings.utils.tsx'; -import { MultiValueButtonDefaultableProps } from '@/base/Base.types.ts'; +import type { MultiValueButtonDefaultableProps } from '@/base/Base.types.ts'; import { ResetButton } from '@/base/components/buttons/ResetButton.tsx'; export const ReaderSettingWidth = ({ diff --git a/src/features/reader/settings/screens/GlobalReaderSettings.tsx b/src/features/reader/settings/screens/GlobalReaderSettings.tsx index 7d4a3071..28207efe 100644 --- a/src/features/reader/settings/screens/GlobalReaderSettings.tsx +++ b/src/features/reader/settings/screens/GlobalReaderSettings.tsx @@ -12,7 +12,7 @@ import { useDefaultReaderSettingsWithDefaultFlag } from '@/features/reader/setti import { LoadingPlaceholder } from '@/base/components/feedback/LoadingPlaceholder.tsx'; import { EmptyViewAbsoluteCentered } from '@/base/components/feedback/EmptyViewAbsoluteCentered.tsx'; import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts'; -import { IReaderSettings, ReadingMode } from '@/features/reader/Reader.types.ts'; +import type { IReaderSettings, ReadingMode } from '@/features/reader/Reader.types.ts'; import { ReaderService } from '@/features/reader/services/ReaderService.ts'; import { ReaderSettingsTabs } from '@/features/reader/settings/components/ReaderSettingsTabs.tsx'; import { getErrorMessage } from '@/lib/HelperFunctions.ts'; diff --git a/src/features/reader/stores/ReaderChaptersStore.ts b/src/features/reader/stores/ReaderChaptersStore.ts index 484d807b..d9140090 100644 --- a/src/features/reader/stores/ReaderChaptersStore.ts +++ b/src/features/reader/stores/ReaderChaptersStore.ts @@ -6,8 +6,8 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { SliceCreator } from '@/lib/zustand/Zustand.types.ts'; -import { ReaderStateChapters } from '@/features/reader/Reader.types.ts'; +import type { SliceCreator } from '@/lib/zustand/Zustand.types.ts'; +import type { ReaderStateChapters } from '@/features/reader/Reader.types.ts'; export interface ReaderChaptersStoreSlice { chapters: ReaderStateChapters & { diff --git a/src/features/reader/stores/ReaderPagesStore.ts b/src/features/reader/stores/ReaderPagesStore.ts index a8ab0269..771a22a4 100644 --- a/src/features/reader/stores/ReaderPagesStore.ts +++ b/src/features/reader/stores/ReaderPagesStore.ts @@ -6,8 +6,9 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { ReaderStatePages, ReaderTransitionPageMode } from '@/features/reader/Reader.types.ts'; -import { SliceCreator } from '@/lib/zustand/Zustand.types.ts'; +import type { ReaderStatePages } from '@/features/reader/Reader.types.ts'; +import { ReaderTransitionPageMode } from '@/features/reader/Reader.types.ts'; +import type { SliceCreator } from '@/lib/zustand/Zustand.types.ts'; import { requestManager } from '@/lib/requests/RequestManager.ts'; export interface ReaderPagesStoreSlice { diff --git a/src/features/reader/stores/ReaderStore.ts b/src/features/reader/stores/ReaderStore.ts index c9fcdd64..d8d04e31 100644 --- a/src/features/reader/stores/ReaderStore.ts +++ b/src/features/reader/stores/ReaderStore.ts @@ -10,30 +10,21 @@ import { create } from 'zustand'; import { devtools } from 'zustand/middleware'; import { immer } from 'zustand/middleware/immer'; import { useShallow } from 'zustand/react/shallow'; -import { TMangaReader } from '@/features/manga/Manga.types.ts'; -import { - createReaderOverlayStoreSlice, - ReaderOverlayStoreSlice, -} from '@/features/reader/overlay/ReaderOverlayStore.ts'; -import { - createReaderAutoScrollStoreSlice, - ReaderAutoScrollStoreSlice, -} from '@/features/reader/auto-scroll/ReaderAutoScrollStore.ts'; -import { IReaderSettingsWithDefaultFlag } from '@/features/reader/Reader.types.ts'; +import type { TMangaReader } from '@/features/manga/Manga.types.ts'; +import type { ReaderOverlayStoreSlice } from '@/features/reader/overlay/ReaderOverlayStore.ts'; +import { createReaderOverlayStoreSlice } from '@/features/reader/overlay/ReaderOverlayStore.ts'; +import type { ReaderAutoScrollStoreSlice } from '@/features/reader/auto-scroll/ReaderAutoScrollStore.ts'; +import { createReaderAutoScrollStoreSlice } from '@/features/reader/auto-scroll/ReaderAutoScrollStore.ts'; +import type { IReaderSettingsWithDefaultFlag } from '@/features/reader/Reader.types.ts'; import { DEFAULT_READER_SETTINGS_WITH_DEFAULT_FLAG } from '@/features/reader/settings/ReaderSettingsMetadata.ts'; -import { - createReaderProgressBarStoreSlice, - ReaderProgressBarStoreSlice, -} from '@/features/reader/overlay/progress-bar/ReaderProgressBarStore.tsx'; -import { - createReaderTapZoneStoreSlice, - ReaderTapZoneStoreSlice, -} from '@/features/reader/tap-zones/ReaderTapZoneStore.tsx'; -import { createReaderPagesStoreSlice, ReaderPagesStoreSlice } from '@/features/reader/stores/ReaderPagesStore.ts'; -import { - createReaderChaptersStoreSlice, - ReaderChaptersStoreSlice, -} from '@/features/reader/stores/ReaderChaptersStore.ts'; +import type { ReaderProgressBarStoreSlice } from '@/features/reader/overlay/progress-bar/ReaderProgressBarStore.tsx'; +import { createReaderProgressBarStoreSlice } from '@/features/reader/overlay/progress-bar/ReaderProgressBarStore.tsx'; +import type { ReaderTapZoneStoreSlice } from '@/features/reader/tap-zones/ReaderTapZoneStore.tsx'; +import { createReaderTapZoneStoreSlice } from '@/features/reader/tap-zones/ReaderTapZoneStore.tsx'; +import type { ReaderPagesStoreSlice } from '@/features/reader/stores/ReaderPagesStore.ts'; +import { createReaderPagesStoreSlice } from '@/features/reader/stores/ReaderPagesStore.ts'; +import type { ReaderChaptersStoreSlice } from '@/features/reader/stores/ReaderChaptersStore.ts'; +import { createReaderChaptersStoreSlice } from '@/features/reader/stores/ReaderChaptersStore.ts'; import { ZustandUtil } from '@/lib/zustand/ZustandUtil.ts'; const UNSERIALIZABLE_KEYS = ['scrollRef']; diff --git a/src/features/reader/tap-zones/ReaderTapZone.constants.ts b/src/features/reader/tap-zones/ReaderTapZone.constants.ts index d1e4df7e..8fd47814 100644 --- a/src/features/reader/tap-zones/ReaderTapZone.constants.ts +++ b/src/features/reader/tap-zones/ReaderTapZone.constants.ts @@ -6,9 +6,10 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { MessageDescriptor } from '@lingui/core'; +import type { MessageDescriptor } from '@lingui/core'; import { msg } from '@lingui/core/macro'; -import { TapZoneLayouts, TapZoneRegion, TapZoneRegionType } from '@/features/reader/tap-zones/TapZoneLayout.types.ts'; +import type { TapZoneRegion } from '@/features/reader/tap-zones/TapZoneLayout.types.ts'; +import { TapZoneLayouts, TapZoneRegionType } from '@/features/reader/tap-zones/TapZoneLayout.types.ts'; export const READER_TAP_ZONE_LAYOUTS: Record = { /** diff --git a/src/features/reader/tap-zones/ReaderTapZoneService.ts b/src/features/reader/tap-zones/ReaderTapZoneService.ts index 935818a8..7c263149 100644 --- a/src/features/reader/tap-zones/ReaderTapZoneService.ts +++ b/src/features/reader/tap-zones/ReaderTapZoneService.ts @@ -6,14 +6,14 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { CSSProperties } from 'react'; -import { +import type { CSSProperties } from 'react'; +import type { ReaderTapZoneRect, TapZoneInvertMode, TapZoneLayouts, TapZoneRegion, - TapZoneRegionType, } from '@/features/reader/tap-zones/TapZoneLayout.types.ts'; +import { TapZoneRegionType } from '@/features/reader/tap-zones/TapZoneLayout.types.ts'; import { READER_TAP_ZONE_LAYOUTS, TAP_ZONE_REGION_TYPE_DATA, @@ -25,6 +25,10 @@ interface InvertMode extends TapZoneInvertMode { isRTL: boolean; } +const calcActualValue = (value: number, size: number) => (value / 100) * size; + +const calcRectCenter = (pos1: number, pos2: number) => (pos1 + pos2) * 0.5 + pos1 * 0.5; + export class ReaderTapZoneService { private static layout: TapZoneLayouts | null = null; @@ -108,13 +112,10 @@ export class ReaderTapZoneService { const { text: translation, color } = TAP_ZONE_REGION_TYPE_DATA[type]; const text = i18n._(translation); - const calcActualValue = (value: number, size: number) => (value / 100) * size; const x = calcActualValue(rectX, canvasWidth); const y = calcActualValue(rectY, canvasHeight); const width = calcActualValue(rectWidth, canvasWidth); const height = calcActualValue(rectHeight, canvasHeight); - - const calcRectCenter = (pos1: number, pos2: number) => (pos1 + pos2) * 0.5 + pos1 * 0.5; const rectCenterX = calcRectCenter(x, width); const rectCenterY = calcRectCenter(y, height); diff --git a/src/features/reader/tap-zones/ReaderTapZoneStore.tsx b/src/features/reader/tap-zones/ReaderTapZoneStore.tsx index 6820e609..ba2fbcb2 100644 --- a/src/features/reader/tap-zones/ReaderTapZoneStore.tsx +++ b/src/features/reader/tap-zones/ReaderTapZoneStore.tsx @@ -6,8 +6,8 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { SliceCreator } from '@/lib/zustand/Zustand.types.ts'; -import { TReaderTapZoneContext } from '@/features/reader/tap-zones/TapZoneLayout.types.ts'; +import type { SliceCreator } from '@/lib/zustand/Zustand.types.ts'; +import type { TReaderTapZoneContext } from '@/features/reader/tap-zones/TapZoneLayout.types.ts'; export interface ReaderTapZoneStoreSlice { tapZone: TReaderTapZoneContext & { diff --git a/src/features/reader/tap-zones/TapZoneLayout.tsx b/src/features/reader/tap-zones/TapZoneLayout.tsx index 6e865a8b..ba0de556 100644 --- a/src/features/reader/tap-zones/TapZoneLayout.tsx +++ b/src/features/reader/tap-zones/TapZoneLayout.tsx @@ -14,7 +14,7 @@ import { useNavBarContext } from '@/features/navigation-bar/NavbarContext.tsx'; import { useResizeObserver } from '@/base/hooks/useResizeObserver.tsx'; import { ReadingDirection } from '@/features/reader/Reader.types.ts'; import { withPropsFrom } from '@/base/hoc/withPropsFrom.tsx'; -import { NavbarContextType } from '@/features/navigation-bar/NavigationBar.types.ts'; +import type { NavbarContextType } from '@/features/navigation-bar/NavigationBar.types.ts'; import { useReaderSettingsStore, useReaderTapZoneStore } from '@/features/reader/stores/ReaderStore.ts'; const CANVAS_ID = 'reader-tap-zone-layout-canvas'; diff --git a/src/features/reader/viewer/ReaderChapterViewer.tsx b/src/features/reader/viewer/ReaderChapterViewer.tsx index 498a224b..8d6ece62 100644 --- a/src/features/reader/viewer/ReaderChapterViewer.tsx +++ b/src/features/reader/viewer/ReaderChapterViewer.tsx @@ -6,23 +6,22 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { memo, MutableRefObject, useCallback, useEffect, useMemo, useRef, useState } from 'react'; +import type { MutableRefObject } from 'react'; +import { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react'; import Stack from '@mui/material/Stack'; import { useTheme } from '@mui/material/styles'; import Box from '@mui/material/Box'; import { useLingui } from '@lingui/react/macro'; -import { +import type { IReaderSettings, ReaderPagerProps, ReaderPageSpreadState, ReaderResumeMode, ReaderStatePages, - ReaderTransitionPageMode, - ReadingDirection, - ReadingMode, } from '@/features/reader/Reader.types.ts'; +import { ReaderTransitionPageMode, ReadingDirection, ReadingMode } from '@/features/reader/Reader.types.ts'; import { getDoublePageModePages } from '@/features/reader/viewer/pager/ReaderPager.utils.tsx'; -import { ReaderControls } from '@/features/reader/services/ReaderControls.ts'; +import type { ReaderControls } from '@/features/reader/services/ReaderControls.ts'; import { getPagerForReadingMode, isContinuousReadingMode, @@ -41,7 +40,7 @@ import { getErrorMessage, noOp } from '@/lib/HelperFunctions.ts'; import { LoadingPlaceholder } from '@/base/components/feedback/LoadingPlaceholder.tsx'; import { ReaderInfiniteScrollUpdateChapter } from '@/features/reader/infinite-scroll/ReaderInfiniteScrollUpdateChapter.tsx'; import { useResizeObserver } from '@/base/hooks/useResizeObserver.tsx'; -import { ChapterIdInfo } from '@/features/chapter/Chapter.types.ts'; +import type { ChapterIdInfo } from '@/features/chapter/Chapter.types.ts'; import { READER_DEFAULT_PAGES_STATE } from '@/features/reader/stores/ReaderPagesStore.ts'; import { getReaderChaptersStore, getReaderPagesStore } from '@/features/reader/stores/ReaderStore.ts'; diff --git a/src/features/reader/viewer/ReaderViewer.tsx b/src/features/reader/viewer/ReaderViewer.tsx index 6cf6ea4f..4a66c0e5 100644 --- a/src/features/reader/viewer/ReaderViewer.tsx +++ b/src/features/reader/viewer/ReaderViewer.tsx @@ -6,18 +6,14 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { ForwardedRef, memo, useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react'; +import type { ForwardedRef } from 'react'; +import { memo, useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react'; import Stack from '@mui/material/Stack'; import { useTheme } from '@mui/material/styles'; import { useLocation } from 'react-router-dom'; import { useMergedRef } from '@mantine/hooks'; -import { - PageInViewportType, - ReaderOpenChapterLocationState, - ReaderResumeMode, - ReadingDirection, - ReadingMode, -} from '@/features/reader/Reader.types.ts'; +import type { ReaderOpenChapterLocationState } from '@/features/reader/Reader.types.ts'; +import { PageInViewportType, ReaderResumeMode, ReadingDirection, ReadingMode } from '@/features/reader/Reader.types.ts'; import { MediaQuery } from '@/base/utils/MediaQuery.tsx'; import { ReaderControls } from '@/features/reader/services/ReaderControls.ts'; import { @@ -42,10 +38,10 @@ import { } from '@/features/reader/Reader.utils.ts'; import { coerceIn, noOp } from '@/lib/HelperFunctions.ts'; import { useNavBarContext } from '@/features/navigation-bar/NavbarContext.tsx'; -import { NavbarContextType } from '@/features/navigation-bar/NavigationBar.types.ts'; +import type { NavbarContextType } from '@/features/navigation-bar/NavigationBar.types.ts'; import { useReaderPreserveScrollPosition } from '@/features/reader/viewer/hooks/useReaderPreserveScrollPosition.ts'; -import { ChapterIdInfo } from '@/features/chapter/Chapter.types.ts'; +import type { ChapterIdInfo } from '@/features/chapter/Chapter.types.ts'; import { getReaderAutoScrollStore, getReaderStore, diff --git a/src/features/reader/viewer/components/ReaderPage.tsx b/src/features/reader/viewer/components/ReaderPage.tsx index d59c9dd1..460724ae 100644 --- a/src/features/reader/viewer/components/ReaderPage.tsx +++ b/src/features/reader/viewer/components/ReaderPage.tsx @@ -7,8 +7,9 @@ */ import { memo, useCallback } from 'react'; -import { SpinnerImage, SpinnerImageProps } from '@/base/components/SpinnerImage.tsx'; -import { IReaderSettings, ReaderCustomFilter, ReaderPagerProps } from '@/features/reader/Reader.types.ts'; +import type { SpinnerImageProps } from '@/base/components/SpinnerImage.tsx'; +import { SpinnerImage } from '@/base/components/SpinnerImage.tsx'; +import type { IReaderSettings, ReaderCustomFilter, ReaderPagerProps } from '@/features/reader/Reader.types.ts'; import { getImageMarginStyling, getImagePlaceholderStyling, @@ -16,7 +17,7 @@ import { } from '@/features/reader/viewer/pager/ReaderPager.utils.tsx'; import { applyStyles } from '@/base/utils/ApplyStyles.ts'; import { MediaQuery } from '@/base/utils/MediaQuery.tsx'; -import { NavbarContextType } from '@/features/navigation-bar/NavigationBar.types.ts'; +import type { NavbarContextType } from '@/features/navigation-bar/NavigationBar.types.ts'; import { useReaderScrollbarStore } from '@/features/reader/stores/ReaderStore.ts'; const getCustomFilterString = (customFilter: ReaderCustomFilter): string => diff --git a/src/features/reader/viewer/components/ReaderTransitionPage.tsx b/src/features/reader/viewer/components/ReaderTransitionPage.tsx index 4bcf3661..4db2779e 100644 --- a/src/features/reader/viewer/components/ReaderTransitionPage.tsx +++ b/src/features/reader/viewer/components/ReaderTransitionPage.tsx @@ -10,10 +10,12 @@ import Typography from '@mui/material/Typography'; import Stack from '@mui/material/Stack'; import Button from '@mui/material/Button'; import { Link } from 'react-router-dom'; -import { ComponentProps, memo, useMemo } from 'react'; +import type { ComponentProps } from 'react'; +import { memo, useMemo } from 'react'; import { alpha, useTheme } from '@mui/material/styles'; import { useLingui } from '@lingui/react/macro'; -import { IReaderSettings, ReaderTransitionPageMode, ReadingMode } from '@/features/reader/Reader.types.ts'; +import type { IReaderSettings } from '@/features/reader/Reader.types.ts'; +import { ReaderTransitionPageMode, ReadingMode } from '@/features/reader/Reader.types.ts'; import { isTransitionPageVisible } from '@/features/reader/viewer/pager/ReaderPager.utils.tsx'; import { useBackButton } from '@/base/hooks/useBackButton.ts'; import { applyStyles } from '@/base/utils/ApplyStyles.ts'; @@ -23,12 +25,12 @@ import { } from '@/features/reader/settings/ReaderSettings.utils.tsx'; import { useNavBarContext } from '@/features/navigation-bar/NavbarContext.tsx'; import { AppRoutes } from '@/base/AppRoute.constants.ts'; -import { NavbarContextType } from '@/features/navigation-bar/NavigationBar.types.ts'; +import type { NavbarContextType } from '@/features/navigation-bar/NavigationBar.types.ts'; import { withPropsFrom } from '@/base/hoc/withPropsFrom.tsx'; import { getValueFromObject, noOp } from '@/lib/HelperFunctions.ts'; import { READER_BACKGROUND_TO_COLOR } from '@/features/reader/settings/ReaderSettings.constants.tsx'; -import { ChapterType } from '@/lib/graphql/generated/graphql.ts'; -import { ChapterIdInfo } from '@/features/chapter/Chapter.types.ts'; +import type { ChapterType } from '@/lib/graphql/generated/graphql.ts'; +import type { ChapterIdInfo } from '@/features/chapter/Chapter.types.ts'; import { useReaderChaptersStore, useReaderPagesStore, diff --git a/src/features/reader/viewer/hooks/useReaderConvertPagesForReadingMode.ts b/src/features/reader/viewer/hooks/useReaderConvertPagesForReadingMode.ts index a6c38391..4fa4939f 100644 --- a/src/features/reader/viewer/hooks/useReaderConvertPagesForReadingMode.ts +++ b/src/features/reader/viewer/hooks/useReaderConvertPagesForReadingMode.ts @@ -7,10 +7,11 @@ */ import { useLayoutEffect, useState } from 'react'; -import { ReaderPageSpreadState, ReaderStatePages, ReadingMode } from '@/features/reader/Reader.types.ts'; +import type { ReaderPageSpreadState, ReaderStatePages } from '@/features/reader/Reader.types.ts'; +import { ReadingMode } from '@/features/reader/Reader.types.ts'; import { getIndexOfPage, getPage } from '@/features/reader/overlay/progress-bar/ReaderProgressBar.utils.tsx'; import { createPagesData } from '@/features/reader/viewer/pager/ReaderPager.utils.tsx'; -import { ReaderControls } from '@/features/reader/services/ReaderControls.ts'; +import type { ReaderControls } from '@/features/reader/services/ReaderControls.ts'; export const useReaderConvertPagesForReadingMode = ( currentPageIndex: number, diff --git a/src/features/reader/viewer/hooks/useReaderHandlePageSelection.ts b/src/features/reader/viewer/hooks/useReaderHandlePageSelection.ts index 8cbeb486..97fc0f06 100644 --- a/src/features/reader/viewer/hooks/useReaderHandlePageSelection.ts +++ b/src/features/reader/viewer/hooks/useReaderHandlePageSelection.ts @@ -6,12 +6,13 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { MutableRefObject, useLayoutEffect } from 'react'; -import { Direction } from '@mui/material/styles'; -import { ReaderStatePages, ReadingDirection } from '@/features/reader/Reader.types.ts'; +import type { MutableRefObject } from 'react'; +import { useLayoutEffect } from 'react'; +import type { Direction } from '@mui/material/styles'; +import type { ReaderStatePages, ReadingDirection } from '@/features/reader/Reader.types.ts'; import { getIndexOfPage, getPage } from '@/features/reader/overlay/progress-bar/ReaderProgressBar.utils.tsx'; import { getScrollIntoViewInlineOption } from '@/features/reader/viewer/pager/ReaderPager.utils.tsx'; -import { ReaderControls } from '@/features/reader/services/ReaderControls.ts'; +import type { ReaderControls } from '@/features/reader/services/ReaderControls.ts'; import { getReaderPagesStore } from '@/features/reader/stores/ReaderStore.ts'; export const useReaderHandlePageSelection = ( diff --git a/src/features/reader/viewer/hooks/useReaderHideCursorOnInactivity.ts b/src/features/reader/viewer/hooks/useReaderHideCursorOnInactivity.ts index 194181bc..a3f0ce24 100644 --- a/src/features/reader/viewer/hooks/useReaderHideCursorOnInactivity.ts +++ b/src/features/reader/viewer/hooks/useReaderHideCursorOnInactivity.ts @@ -6,7 +6,8 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { MutableRefObject, useEffect, useRef } from 'react'; +import type { MutableRefObject } from 'react'; +import { useEffect, useRef } from 'react'; import { d } from 'koration'; export const useReaderHideCursorOnInactivity = (scrollElementRef: MutableRefObject) => { diff --git a/src/features/reader/viewer/hooks/useReaderHorizontalModeRevampScrolling.ts b/src/features/reader/viewer/hooks/useReaderHorizontalModeRevampScrolling.ts index 84c29098..abbdb060 100644 --- a/src/features/reader/viewer/hooks/useReaderHorizontalModeRevampScrolling.ts +++ b/src/features/reader/viewer/hooks/useReaderHorizontalModeRevampScrolling.ts @@ -6,7 +6,8 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { MutableRefObject, useEffect } from 'react'; +import type { MutableRefObject } from 'react'; +import { useEffect } from 'react'; import { ReadingDirection, ReadingMode } from '@/features/reader/Reader.types.ts'; import { PointerDeviceUtil } from '@/lib/PointerDeviceUtil.ts'; diff --git a/src/features/reader/viewer/hooks/useReaderPreserveScrollPosition.ts b/src/features/reader/viewer/hooks/useReaderPreserveScrollPosition.ts index 533fcf7e..20493e57 100644 --- a/src/features/reader/viewer/hooks/useReaderPreserveScrollPosition.ts +++ b/src/features/reader/viewer/hooks/useReaderPreserveScrollPosition.ts @@ -6,9 +6,10 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { RefObject, useCallback, useEffect, useLayoutEffect, useRef } from 'react'; +import type { RefObject } from 'react'; +import { useCallback, useEffect, useLayoutEffect, useRef } from 'react'; import { useWindowEvent } from '@mantine/hooks'; -import { +import type { IReaderSettingsManga, ReaderPageScaleMode, ReaderStateChapters, @@ -22,7 +23,7 @@ import { isWidthPageScaleMode, } from '@/features/reader/settings/ReaderSettings.utils.tsx'; import { getPreviousNextChapterVisibility } from '@/features/reader/Reader.utils.ts'; -import { ChapterIdInfo, TChapterReader } from '@/features/chapter/Chapter.types.ts'; +import type { ChapterIdInfo, TChapterReader } from '@/features/chapter/Chapter.types.ts'; import { getReaderPagesStore } from '@/features/reader/stores/ReaderStore.ts'; const shouldPreserveOnResizeChange = ( diff --git a/src/features/reader/viewer/hooks/useReaderScrollToStartOnPageChange.ts b/src/features/reader/viewer/hooks/useReaderScrollToStartOnPageChange.ts index c048cba8..ad7cf6ce 100644 --- a/src/features/reader/viewer/hooks/useReaderScrollToStartOnPageChange.ts +++ b/src/features/reader/viewer/hooks/useReaderScrollToStartOnPageChange.ts @@ -6,9 +6,10 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { MutableRefObject, useLayoutEffect } from 'react'; -import { Direction } from '@mui/material/styles'; -import { ReaderStatePages, ReadingDirection } from '@/features/reader/Reader.types.ts'; +import type { MutableRefObject } from 'react'; +import { useLayoutEffect } from 'react'; +import type { Direction } from '@mui/material/styles'; +import type { ReaderStatePages, ReadingDirection } from '@/features/reader/Reader.types.ts'; import { getScrollToXForReadingDirection } from '@/features/reader/viewer/pager/ReaderPager.utils.tsx'; export const useReaderScrollToStartOnPageChange = ( diff --git a/src/features/reader/viewer/hooks/useReaderSetPagesState.ts b/src/features/reader/viewer/hooks/useReaderSetPagesState.ts index c7d8ef14..dd46aed9 100644 --- a/src/features/reader/viewer/hooks/useReaderSetPagesState.ts +++ b/src/features/reader/viewer/hooks/useReaderSetPagesState.ts @@ -9,15 +9,11 @@ import { useLayoutEffect, useRef } from 'react'; import { getInitialReaderPageIndex } from '@/features/reader/Reader.utils.ts'; import { createPagesData } from '@/features/reader/viewer/pager/ReaderPager.utils.tsx'; -import { - ReaderPageSpreadState, - ReaderResumeMode, - ReaderStatePages, - ReaderTransitionPageMode, -} from '@/features/reader/Reader.types.ts'; -import { requestManager } from '@/lib/requests/RequestManager.ts'; -import { TChapterReader } from '@/features/chapter/Chapter.types.ts'; -import { ReaderChaptersStoreSlice } from '@/features/reader/stores/ReaderChaptersStore.ts'; +import type { ReaderPageSpreadState, ReaderResumeMode, ReaderStatePages } from '@/features/reader/Reader.types.ts'; +import { ReaderTransitionPageMode } from '@/features/reader/Reader.types.ts'; +import type { requestManager } from '@/lib/requests/RequestManager.ts'; +import type { TChapterReader } from '@/features/chapter/Chapter.types.ts'; +import type { ReaderChaptersStoreSlice } from '@/features/reader/stores/ReaderChaptersStore.ts'; import { getReaderStore } from '@/features/reader/stores/ReaderStore.ts'; import { UrlUtil } from '@/lib/UrlUtil.ts'; diff --git a/src/features/reader/viewer/pager/ReaderPager.utils.tsx b/src/features/reader/viewer/pager/ReaderPager.utils.tsx index 41b32740..1c71b863 100644 --- a/src/features/reader/viewer/pager/ReaderPager.utils.tsx +++ b/src/features/reader/viewer/pager/ReaderPager.utils.tsx @@ -6,14 +6,12 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { Direction, Theme } from '@mui/material/styles'; -import { ComponentProps, ReactNode } from 'react'; +import type { Direction, Theme } from '@mui/material/styles'; +import type { ComponentProps, ReactNode } from 'react'; +import type { IReaderSettings, ReaderPageSpreadState, ReaderStatePages } from '@/features/reader/Reader.types.ts'; import { - IReaderSettings, PageInViewportType, ReaderPageScaleMode, - ReaderPageSpreadState, - ReaderStatePages, ReaderTransitionPageMode, ReadingDirection, ReadingMode, @@ -32,7 +30,7 @@ import { getPage } from '@/features/reader/overlay/progress-bar/ReaderProgressBa import { getOptionForDirection } from '@/features/theme/services/ThemeCreator.ts'; import { READING_DIRECTION_TO_THEME_DIRECTION } from '@/features/reader/settings/ReaderSettings.constants.tsx'; import { coerceIn } from '@/lib/HelperFunctions.ts'; -import { NavbarContextType } from '@/features/navigation-bar/NavigationBar.types.ts'; +import type { NavbarContextType } from '@/features/navigation-bar/NavigationBar.types.ts'; type CSSObject = ReturnType; diff --git a/src/features/reader/viewer/pager/components/BasePager.tsx b/src/features/reader/viewer/pager/components/BasePager.tsx index 7430e086..4e23797e 100644 --- a/src/features/reader/viewer/pager/components/BasePager.tsx +++ b/src/features/reader/viewer/pager/components/BasePager.tsx @@ -6,16 +6,13 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { memo, ReactNode, useCallback, useEffect, useMemo, useRef } from 'react'; -import Box, { BoxProps } from '@mui/material/Box'; +import type { ReactNode } from 'react'; +import { memo, useCallback, useEffect, useMemo, useRef } from 'react'; +import type { BoxProps } from '@mui/material/Box'; +import Box from '@mui/material/Box'; import { getPageIndexesToLoad, isATransitionPageVisible } from '@/features/reader/viewer/pager/ReaderPager.utils.tsx'; -import { - IReaderSettings, - ReaderPagerProps, - ReaderResumeMode, - ReaderStatePages, - ReaderTransitionPageMode, -} from '@/features/reader/Reader.types.ts'; +import type { IReaderSettings, ReaderPagerProps, ReaderStatePages } from '@/features/reader/Reader.types.ts'; +import { ReaderResumeMode, ReaderTransitionPageMode } from '@/features/reader/Reader.types.ts'; import { applyStyles } from '@/base/utils/ApplyStyles.ts'; import { isContinuousReadingMode } from '@/features/reader/settings/ReaderSettings.utils.tsx'; diff --git a/src/features/reader/viewer/pager/components/ReaderDoublePagedPager.tsx b/src/features/reader/viewer/pager/components/ReaderDoublePagedPager.tsx index 4a23a519..6312aa56 100644 --- a/src/features/reader/viewer/pager/components/ReaderDoublePagedPager.tsx +++ b/src/features/reader/viewer/pager/components/ReaderDoublePagedPager.tsx @@ -6,15 +6,12 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { Direction, useTheme } from '@mui/material/styles'; +import type { Direction } from '@mui/material/styles'; +import { useTheme } from '@mui/material/styles'; import { Fragment, memo, useMemo } from 'react'; import { BasePager } from '@/features/reader/viewer/pager/components/BasePager.tsx'; -import { - IReaderSettings, - ReaderPagerProps, - ReaderPageScaleMode, - ReadingDirection, -} from '@/features/reader/Reader.types.ts'; +import type { IReaderSettings, ReaderPagerProps } from '@/features/reader/Reader.types.ts'; +import { ReaderPageScaleMode, ReadingDirection } from '@/features/reader/Reader.types.ts'; import { applyStyles } from '@/base/utils/ApplyStyles.ts'; import { createReaderPage } from '@/features/reader/viewer/pager/ReaderPager.utils.tsx'; import { getIndexOfPage, getPage } from '@/features/reader/overlay/progress-bar/ReaderProgressBar.utils.tsx'; diff --git a/src/features/reader/viewer/pager/components/ReaderHorizontalPager.tsx b/src/features/reader/viewer/pager/components/ReaderHorizontalPager.tsx index c11f77ec..b63bd34e 100644 --- a/src/features/reader/viewer/pager/components/ReaderHorizontalPager.tsx +++ b/src/features/reader/viewer/pager/components/ReaderHorizontalPager.tsx @@ -10,7 +10,8 @@ import { useTheme } from '@mui/material/styles'; import { memo } from 'react'; import { BasePager } from '@/features/reader/viewer/pager/components/BasePager.tsx'; import { applyStyles } from '@/base/utils/ApplyStyles.ts'; -import { IReaderSettings, ReaderPagerProps, ReadingDirection } from '@/features/reader/Reader.types.ts'; +import type { IReaderSettings, ReaderPagerProps } from '@/features/reader/Reader.types.ts'; +import { ReadingDirection } from '@/features/reader/Reader.types.ts'; import { createReaderPage } from '@/features/reader/viewer/pager/ReaderPager.utils.tsx'; const BaseReaderHorizontalPager = ({ diff --git a/src/features/reader/viewer/pager/components/ReaderPagedPager.tsx b/src/features/reader/viewer/pager/components/ReaderPagedPager.tsx index 20521f5e..f72a16c5 100644 --- a/src/features/reader/viewer/pager/components/ReaderPagedPager.tsx +++ b/src/features/reader/viewer/pager/components/ReaderPagedPager.tsx @@ -8,7 +8,7 @@ import { memo } from 'react'; import { BasePager } from '@/features/reader/viewer/pager/components/BasePager.tsx'; -import { ReaderPagerProps } from '@/features/reader/Reader.types.ts'; +import type { ReaderPagerProps } from '@/features/reader/Reader.types.ts'; import { createReaderPage } from '@/features/reader/viewer/pager/ReaderPager.utils.tsx'; const BaseReaderPagedPager = ({ diff --git a/src/features/reader/viewer/pager/components/ReaderVerticalPager.tsx b/src/features/reader/viewer/pager/components/ReaderVerticalPager.tsx index 292895f2..7d863979 100644 --- a/src/features/reader/viewer/pager/components/ReaderVerticalPager.tsx +++ b/src/features/reader/viewer/pager/components/ReaderVerticalPager.tsx @@ -8,7 +8,8 @@ import { memo } from 'react'; import { BasePager } from '@/features/reader/viewer/pager/components/BasePager.tsx'; -import { ReaderPagerProps, ReadingMode } from '@/features/reader/Reader.types.ts'; +import type { ReaderPagerProps } from '@/features/reader/Reader.types.ts'; +import { ReadingMode } from '@/features/reader/Reader.types.ts'; import { createReaderPage } from '@/features/reader/viewer/pager/ReaderPager.utils.tsx'; const BaseReaderVerticalPager = ({ diff --git a/src/features/settings/ImageProcessing.utils.ts b/src/features/settings/ImageProcessing.utils.ts index 386fc4aa..f18dc199 100644 --- a/src/features/settings/ImageProcessing.utils.ts +++ b/src/features/settings/ImageProcessing.utils.ts @@ -7,11 +7,11 @@ */ import { d } from 'koration'; -import { - ImageProcessingTargetMode, +import type { TSettingsDownloadConversion, TSettingsDownloadConversionKeyValueItem, } from '@/features/settings/Settings.types.ts'; +import { ImageProcessingTargetMode } from '@/features/settings/Settings.types.ts'; import { DEFAULT_MIME_TYPE, IMAGE_PROCESSING_CALL_TIMEOUT, @@ -20,7 +20,7 @@ import { MIME_TYPE_PREFIX, TARGET_DISABLED, } from '@/features/settings/Settings.constants.ts'; -import { +import type { Maybe, SettingsDownloadConversion, SettingsDownloadConversionHeader, diff --git a/src/features/settings/Settings.constants.ts b/src/features/settings/Settings.constants.ts index 4278135c..d3ab579a 100644 --- a/src/features/settings/Settings.constants.ts +++ b/src/features/settings/Settings.constants.ts @@ -6,21 +6,20 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { MessageDescriptor } from '@lingui/core'; +import type { MessageDescriptor } from '@lingui/core'; import { msg } from '@lingui/core/macro'; import { d } from 'koration'; import { DEFAULT_DEVICE } from '@/features/device/services/Device.ts'; import { DEFAULT_SORT_SETTINGS } from '@/features/migration/Migration.constants.ts'; -import { +import type { GlobalUpdateSkipEntriesSettings, - ImageProcessingTargetMode, - ImageProcessingType, MetadataServerSettings, ServerSettings, } from '@/features/settings/Settings.types.ts'; +import { ImageProcessingTargetMode, ImageProcessingType } from '@/features/settings/Settings.types.ts'; import { GridLayout } from '@/base/Base.types'; import { getDefaultLanguages } from '@/base/utils/Languages.ts'; -import { SelectSettingValue, SelectSettingValueDisplayInfo } from '@/base/components/settings/SelectSetting.tsx'; +import type { SelectSettingValue, SelectSettingValueDisplayInfo } from '@/base/components/settings/SelectSetting.tsx'; import { AuthMode, KoreaderSyncChecksumMethod, diff --git a/src/features/settings/Settings.types.ts b/src/features/settings/Settings.types.ts index 336efb48..d511290c 100644 --- a/src/features/settings/Settings.types.ts +++ b/src/features/settings/Settings.types.ts @@ -6,21 +6,21 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { MetadataDownloadSettings } from '@/features/downloads/Downloads.types.ts'; -import { MetadataLibrarySettings } from '@/features/library/Library.types.ts'; -import { MetadataClientSettings } from '@/features/device/Device.types.ts'; -import { MetadataMigrationSettings } from '@/features/migration/Migration.types.ts'; -import { MetadataBrowseSettings } from '@/features/browse/Browse.types.ts'; -import { MetadataTrackingSettings } from '@/features/tracker/Tracker.types.ts'; -import { MetadataUpdateSettings } from '@/features/app-updates/AppUpdateChecker.types.ts'; -import { MetadataThemeSettings } from '@/features/theme/AppTheme.types.ts'; -import { +import type { MetadataDownloadSettings } from '@/features/downloads/Downloads.types.ts'; +import type { MetadataLibrarySettings } from '@/features/library/Library.types.ts'; +import type { MetadataClientSettings } from '@/features/device/Device.types.ts'; +import type { MetadataMigrationSettings } from '@/features/migration/Migration.types.ts'; +import type { MetadataBrowseSettings } from '@/features/browse/Browse.types.ts'; +import type { MetadataTrackingSettings } from '@/features/tracker/Tracker.types.ts'; +import type { MetadataUpdateSettings } from '@/features/app-updates/AppUpdateChecker.types.ts'; +import type { MetadataThemeSettings } from '@/features/theme/AppTheme.types.ts'; +import type { GetServerSettingsQuery, Maybe, SettingsDownloadConversion, SettingsDownloadConversionHeader, } from '@/lib/graphql/generated/graphql.ts'; -import { MetadataHistorySettings } from '@/features/history/History.types.ts'; +import type { MetadataHistorySettings } from '@/features/history/History.types.ts'; export type MetadataServerSettingKeys = keyof MetadataServerSettings; diff --git a/src/features/settings/components/globalUpdate/GlobalUpdateSettings.tsx b/src/features/settings/components/globalUpdate/GlobalUpdateSettings.tsx index a0b488c8..e885ab48 100644 --- a/src/features/settings/components/globalUpdate/GlobalUpdateSettings.tsx +++ b/src/features/settings/components/globalUpdate/GlobalUpdateSettings.tsx @@ -12,15 +12,13 @@ import ListItem from '@mui/material/ListItem'; import ListItemText from '@mui/material/ListItemText'; import Switch from '@mui/material/Switch'; import { useLingui } from '@lingui/react/macro'; -import { - CategoriesInclusionSetting, - CategoriesInclusionSettingProps, -} from '@/features/category/components/CategoriesInclusionSetting.tsx'; +import type { CategoriesInclusionSettingProps } from '@/features/category/components/CategoriesInclusionSetting.tsx'; +import { CategoriesInclusionSetting } from '@/features/category/components/CategoriesInclusionSetting.tsx'; import { GlobalUpdateSettingsEntries } from '@/features/settings/components/globalUpdate/GlobalUpdateSettingsEntries.tsx'; import { GlobalUpdateSettingsInterval } from '@/features/settings/components/globalUpdate/GlobalUpdateSettingsInterval.tsx'; import { requestManager } from '@/lib/requests/RequestManager.ts'; import { makeToast } from '@/base/utils/Toast.ts'; -import { LibrarySettingsType, ServerSettings } from '@/features/settings/Settings.types.ts'; +import type { LibrarySettingsType, ServerSettings } from '@/features/settings/Settings.types.ts'; import { getErrorMessage } from '@/lib/HelperFunctions.ts'; export const GlobalUpdateSettings = ({ diff --git a/src/features/settings/components/globalUpdate/GlobalUpdateSettingsEntries.tsx b/src/features/settings/components/globalUpdate/GlobalUpdateSettingsEntries.tsx index 3fe2e7db..418e394c 100644 --- a/src/features/settings/components/globalUpdate/GlobalUpdateSettingsEntries.tsx +++ b/src/features/settings/components/globalUpdate/GlobalUpdateSettingsEntries.tsx @@ -20,7 +20,7 @@ import { requestManager } from '@/lib/requests/RequestManager.ts'; import { makeToast } from '@/base/utils/Toast.ts'; import { CheckboxContainer } from '@/base/components/inputs/CheckboxContainer.ts'; import { CheckboxInput } from '@/base/components/inputs/CheckboxInput.tsx'; -import { GlobalUpdateSkipEntriesSettings, ServerSettings } from '@/features/settings/Settings.types.ts'; +import type { GlobalUpdateSkipEntriesSettings, ServerSettings } from '@/features/settings/Settings.types.ts'; import { getErrorMessage } from '@/lib/HelperFunctions.ts'; import { GLOBAL_UPDATE_SKIP_ENTRIES_TO_TRANSLATION } from '@/features/settings/Settings.constants.ts'; diff --git a/src/features/settings/components/globalUpdate/GlobalUpdateSettingsInterval.tsx b/src/features/settings/components/globalUpdate/GlobalUpdateSettingsInterval.tsx index c7da3d74..fa57da78 100644 --- a/src/features/settings/components/globalUpdate/GlobalUpdateSettingsInterval.tsx +++ b/src/features/settings/components/globalUpdate/GlobalUpdateSettingsInterval.tsx @@ -15,7 +15,7 @@ import { useLingui } from '@lingui/react/macro'; import { requestManager } from '@/lib/requests/RequestManager.ts'; import { NumberSetting } from '@/base/components/settings/NumberSetting.tsx'; import { getPersistedServerSetting, usePersistedValue } from '@/base/hooks/usePersistedValue.tsx'; -import { ServerSettings } from '@/features/settings/Settings.types.ts'; +import type { ServerSettings } from '@/features/settings/Settings.types.ts'; import { GLOBAL_UPDATE_INTERVAL } from '@/features/settings/Settings.constants.ts'; diff --git a/src/features/settings/components/images/KeyValueItem.tsx b/src/features/settings/components/images/KeyValueItem.tsx index a4b01b7b..413cadc1 100644 --- a/src/features/settings/components/images/KeyValueItem.tsx +++ b/src/features/settings/components/images/KeyValueItem.tsx @@ -14,7 +14,7 @@ import { useTheme } from '@mui/material/styles'; import { useLingui } from '@lingui/react/macro'; import { CustomTooltip } from '@/base/components/CustomTooltip.tsx'; import { IMAGE_PROCESSING_INPUT_WIDTH } from '@/features/settings/Settings.constants.ts'; -import { TSettingsDownloadConversionKeyValueItem } from '@/features/settings/Settings.types'; +import type { TSettingsDownloadConversionKeyValueItem } from '@/features/settings/Settings.types'; export const KeyValueItem = ({ id, diff --git a/src/features/settings/components/images/KeyValueItems.tsx b/src/features/settings/components/images/KeyValueItems.tsx index 655c6afe..4e3f67c1 100644 --- a/src/features/settings/components/images/KeyValueItems.tsx +++ b/src/features/settings/components/images/KeyValueItems.tsx @@ -11,10 +11,10 @@ import Typography from '@mui/material/Typography'; import Button from '@mui/material/Button'; import Collapse from '@mui/material/Collapse'; import { useLingui } from '@lingui/react/macro'; -import { Maybe } from '@/lib/graphql/generated/graphql.ts'; +import type { Maybe } from '@/lib/graphql/generated/graphql.ts'; import { addStableIdToKeyValueItems, isDuplicateKeyValueItem } from '@/features/settings/ImageProcessing.utils.ts'; import { KeyValueItem } from '@/features/settings/components/images/KeyValueItem.tsx'; -import { TSettingsDownloadConversionKeyValueItem } from '@/features/settings/Settings.types.ts'; +import type { TSettingsDownloadConversionKeyValueItem } from '@/features/settings/Settings.types.ts'; export const KeyValueItems = ({ title, diff --git a/src/features/settings/components/images/Processing.tsx b/src/features/settings/components/images/Processing.tsx index bf755f08..6db0de97 100644 --- a/src/features/settings/components/images/Processing.tsx +++ b/src/features/settings/components/images/Processing.tsx @@ -20,7 +20,7 @@ import FormControl from '@mui/material/FormControl'; import { d } from 'koration'; import { useElementSize } from '@mantine/hooks'; import { useLingui } from '@lingui/react/macro'; -import { MessageDescriptor } from '@lingui/core'; +import type { MessageDescriptor } from '@lingui/core'; import { KeyValueItems } from '@/features/settings/components/images/KeyValueItems.tsx'; import { CustomTooltip } from '@/base/components/CustomTooltip.tsx'; import { @@ -34,7 +34,8 @@ import { import { Select } from '@/base/components/inputs/Select.tsx'; import { TypographyMaxLines } from '@/base/components/texts/TypographyMaxLines.tsx'; import { MimeTypeTextField } from '@/features/settings/components/images/MimeTypeTextField.tsx'; -import { ImageProcessingTargetMode, TSettingsDownloadConversion } from '@/features/settings/Settings.types.ts'; +import type { TSettingsDownloadConversion } from '@/features/settings/Settings.types.ts'; +import { ImageProcessingTargetMode } from '@/features/settings/Settings.types.ts'; import { getUpdatedSearchParams, isDefaultMimeType, diff --git a/src/features/settings/components/koreaderSync/KoreaderSyncSettings.tsx b/src/features/settings/components/koreaderSync/KoreaderSyncSettings.tsx index c57ca05e..d91736e7 100644 --- a/src/features/settings/components/koreaderSync/KoreaderSyncSettings.tsx +++ b/src/features/settings/components/koreaderSync/KoreaderSyncSettings.tsx @@ -17,7 +17,7 @@ import { SelectSetting } from '@/base/components/settings/SelectSetting.tsx'; import { NumberSetting } from '@/base/components/settings/NumberSetting.tsx'; import { makeToast } from '@/base/utils/Toast.ts'; import { getErrorMessage, noOp } from '@/lib/HelperFunctions.ts'; -import { +import type { KoreaderSyncChecksumMethod, KoreaderSyncConflictStrategy, KoSyncStatusPayload, @@ -28,7 +28,7 @@ import { KOREADER_SYNC_PERCENTAGE_TOLERANCE, } from '@/features/settings/Settings.constants.ts'; import { CredentialsLogin } from '@/base/components/modals/LoginDialog.tsx'; -import { ServerSettings as ServerSettingsType, ServerSettings } from '@/features/settings/Settings.types.ts'; +import type { ServerSettings as ServerSettingsType, ServerSettings } from '@/features/settings/Settings.types.ts'; import { assertIsDefined } from '@/base/Asserts.ts'; export const KoreaderSyncSettings = ({ diff --git a/src/features/settings/components/webUI/WebUIUpdateIntervalSetting.tsx b/src/features/settings/components/webUI/WebUIUpdateIntervalSetting.tsx index 6d010772..dc3ff8bc 100644 --- a/src/features/settings/components/webUI/WebUIUpdateIntervalSetting.tsx +++ b/src/features/settings/components/webUI/WebUIUpdateIntervalSetting.tsx @@ -16,7 +16,7 @@ import { requestManager } from '@/lib/requests/RequestManager.ts'; import { NumberSetting } from '@/base/components/settings/NumberSetting.tsx'; import { getPersistedServerSetting, usePersistedValue } from '@/base/hooks/usePersistedValue.tsx'; import { makeToast } from '@/base/utils/Toast.ts'; -import { ServerSettings } from '@/features/settings/Settings.types.ts'; +import type { ServerSettings } from '@/features/settings/Settings.types.ts'; import { getErrorMessage } from '@/lib/HelperFunctions.ts'; import { WEB_UI_UPDATE_INTERVAL } from '@/features/settings/Settings.constants.ts'; diff --git a/src/features/settings/screens/Appearance.tsx b/src/features/settings/screens/Appearance.tsx index 85fe2410..f2e585d4 100644 --- a/src/features/settings/screens/Appearance.tsx +++ b/src/features/settings/screens/Appearance.tsx @@ -30,7 +30,8 @@ import { LoadingPlaceholder } from '@/base/components/feedback/LoadingPlaceholde import { EmptyViewAbsoluteCentered } from '@/base/components/feedback/EmptyViewAbsoluteCentered.tsx'; import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts'; import { makeToast } from '@/base/utils/Toast.ts'; -import { MetadataThemeSettings, ThemeMode } from '@/features/theme/AppTheme.types.ts'; +import type { MetadataThemeSettings } from '@/features/theme/AppTheme.types.ts'; +import { ThemeMode } from '@/features/theme/AppTheme.types.ts'; import { getErrorMessage } from '@/lib/HelperFunctions.ts'; import { AppStorage } from '@/lib/storage/AppStorage.ts'; import { useAppTitle } from '@/features/navigation-bar/hooks/useAppTitle.ts'; diff --git a/src/features/settings/screens/ImageProcessingSetting.tsx b/src/features/settings/screens/ImageProcessingSetting.tsx index 299bdaf6..50d96722 100644 --- a/src/features/settings/screens/ImageProcessingSetting.tsx +++ b/src/features/settings/screens/ImageProcessingSetting.tsx @@ -16,7 +16,7 @@ import { IMAGE_PROCESSING_TYPE_TO_TRANSLATION, } from '@/features/settings/Settings.constants.ts'; import { requestManager } from '@/lib/requests/RequestManager.ts'; -import { ImageProcessingType, ServerSettings } from '@/features/settings/Settings.types.ts'; +import type { ImageProcessingType, ServerSettings } from '@/features/settings/Settings.types.ts'; import { makeToast } from '@/base/utils/Toast.ts'; import { getErrorMessage } from '@/lib/HelperFunctions.ts'; import { LoadingPlaceholder } from '@/base/components/feedback/LoadingPlaceholder.tsx'; diff --git a/src/features/settings/screens/More.tsx b/src/features/settings/screens/More.tsx index 85d54c70..4e818a3d 100644 --- a/src/features/settings/screens/More.tsx +++ b/src/features/settings/screens/More.tsx @@ -20,7 +20,8 @@ import { NAVIGATION_BAR_ITEMS } from '@/features/navigation-bar/NavigationBar.co import { MediaQuery } from '@/base/utils/MediaQuery.tsx'; import { NavigationBarUtil } from '@/features/navigation-bar/NavigationBar.util.ts'; import { useMetadataServerSettings } from '@/features/settings/services/ServerSettingsMetadata.ts'; -import { NavbarItem, NavBarItemMoreGroup } from '@/features/navigation-bar/NavigationBar.types.ts'; +import type { NavbarItem } from '@/features/navigation-bar/NavigationBar.types.ts'; +import { NavBarItemMoreGroup } from '@/features/navigation-bar/NavigationBar.types.ts'; import { useAppTitle } from '@/features/navigation-bar/hooks/useAppTitle.ts'; export const More = () => { diff --git a/src/features/settings/screens/ServerSettings.tsx b/src/features/settings/screens/ServerSettings.tsx index 81e4bfea..36072606 100644 --- a/src/features/settings/screens/ServerSettings.tsx +++ b/src/features/settings/screens/ServerSettings.tsx @@ -28,7 +28,7 @@ import { useMetadataServerSettings, } from '@/features/settings/services/ServerSettingsMetadata.ts'; import { makeToast } from '@/base/utils/Toast.ts'; -import { MetadataUpdateSettings } from '@/features/app-updates/AppUpdateChecker.types.ts'; +import type { MetadataUpdateSettings } from '@/features/app-updates/AppUpdateChecker.types.ts'; import { getErrorMessage } from '@/lib/HelperFunctions.ts'; import { useAppTitle } from '@/features/navigation-bar/hooks/useAppTitle.ts'; import { AuthMode, CbzMediaType, DatabaseType, SortOrder } from '@/lib/graphql/generated/graphql'; @@ -39,7 +39,7 @@ import { } from '@/features/settings/Settings.constants.ts'; import { ServerAddressSetting } from '@/features/settings/components/ServerAddressSetting.tsx'; import { AuthManager } from '@/features/authentication/AuthManager.ts'; -import { ServerSettings as ServerSettingsType } from '@/features/settings/Settings.types.ts'; +import type { ServerSettings as ServerSettingsType } from '@/features/settings/Settings.types.ts'; import { KoreaderSyncSettings } from '@/features/settings/components/koreaderSync/KoreaderSyncSettings.tsx'; const getLogFilesCleanupDisplayValue = (ttl: number): string => { diff --git a/src/features/settings/screens/WebUISettings.tsx b/src/features/settings/screens/WebUISettings.tsx index c82e7fe9..90c4008f 100644 --- a/src/features/settings/screens/WebUISettings.tsx +++ b/src/features/settings/screens/WebUISettings.tsx @@ -15,7 +15,8 @@ import { requestManager } from '@/lib/requests/RequestManager.ts'; import { WebUIUpdateIntervalSetting } from '@/features/settings/components/webUI/WebUIUpdateIntervalSetting.tsx'; import { TextSetting } from '@/base/components/settings/text/TextSetting.tsx'; import { SelectSetting } from '@/base/components/settings/SelectSetting.tsx'; -import { WebUiChannel, WebUiFlavor, WebUiInterface } from '@/lib/graphql/generated/graphql.ts'; +import type { WebUiChannel, WebUiInterface } from '@/lib/graphql/generated/graphql.ts'; +import { WebUiFlavor } from '@/lib/graphql/generated/graphql.ts'; import { LoadingPlaceholder } from '@/base/components/feedback/LoadingPlaceholder.tsx'; import { EmptyViewAbsoluteCentered } from '@/base/components/feedback/EmptyViewAbsoluteCentered.tsx'; import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts'; @@ -24,8 +25,8 @@ import { useMetadataServerSettings, } from '@/features/settings/services/ServerSettingsMetadata.ts'; import { makeToast } from '@/base/utils/Toast.ts'; -import { MetadataUpdateSettings } from '@/features/app-updates/AppUpdateChecker.types.ts'; -import { WebUISettingsType } from '@/features/settings/Settings.types.ts'; +import type { MetadataUpdateSettings } from '@/features/app-updates/AppUpdateChecker.types.ts'; +import type { WebUISettingsType } from '@/features/settings/Settings.types.ts'; import { getErrorMessage } from '@/lib/HelperFunctions.ts'; import { useAppTitle } from '@/features/navigation-bar/hooks/useAppTitle.ts'; import { diff --git a/src/features/settings/services/ServerSettingsMetadata.ts b/src/features/settings/services/ServerSettingsMetadata.ts index cc3b305e..d42dfe4c 100644 --- a/src/features/settings/services/ServerSettingsMetadata.ts +++ b/src/features/settings/services/ServerSettingsMetadata.ts @@ -11,10 +11,10 @@ import { requestManager } from '@/lib/requests/RequestManager.ts'; import { requestServerMetadataUpdate } from '@/features/metadata/services/MetadataUpdater.ts'; import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts'; import { SERVER_SETTINGS_METADATA_DEFAULT } from '@/features/settings/Settings.constants.ts'; -import { MetadataServerSettingKeys, MetadataServerSettings } from '@/features/settings/Settings.types.ts'; +import type { MetadataServerSettingKeys, MetadataServerSettings } from '@/features/settings/Settings.types.ts'; import { convertFromGqlMeta } from '@/features/metadata/services/MetadataConverter.ts'; import { getMetadataFrom } from '@/features/metadata/services/MetadataReader.ts'; -import { AllowedMetadataValueTypes, Metadata } from '@/features/metadata/Metadata.types.ts'; +import type { AllowedMetadataValueTypes, Metadata } from '@/features/metadata/Metadata.types.ts'; export const convertSettingsToMetadata = ( settings: Partial, diff --git a/src/features/source/Source.types.ts b/src/features/source/Source.types.ts index a6e9e78f..38d0978a 100644 --- a/src/features/source/Source.types.ts +++ b/src/features/source/Source.types.ts @@ -6,7 +6,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { +import type { ExtensionType, GetSourceBrowseQuery, GetSourceSettingsQuery, diff --git a/src/features/source/browse/components/SourceOptions.tsx b/src/features/source/browse/components/SourceOptions.tsx index 16204801..b5c3776d 100644 --- a/src/features/source/browse/components/SourceOptions.tsx +++ b/src/features/source/browse/components/SourceOptions.tsx @@ -37,12 +37,12 @@ import { GroupFilter } from '@/features/source/browse/components/filters/GroupFi import { SeparatorFilter } from '@/features/source/browse/components/filters/SeparatorFilter.tsx'; import { StyledFab } from '@/base/components/buttons/StyledFab.tsx'; import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts'; -import { ISourceMetadata, SourceFilters } from '@/features/source/Source.types.ts'; +import type { IPos, ISourceMetadata, SourceFilters } from '@/features/source/Source.types.ts'; import { Confirmation } from '@/base/AppAwaitableComponent.ts'; interface IFilters { sourceFilter: SourceFilters[]; - updateFilterValue: Function; + updateFilterValue: (value: IPos[]) => void; group: number | undefined; update: any; } @@ -52,9 +52,9 @@ interface IFilters1 { selectSavedSearch: (savedSearch: string) => void; updateSavedSearches: (savedSearch: string, updateType: 'create' | 'delete') => void; sourceFilter: SourceFilters[]; - updateFilterValue: Function; - resetFilterValue: Function; - setTriggerUpdate: Function; + updateFilterValue: (value: IPos[]) => void; + resetFilterValue: (value: number) => void; + setTriggerUpdate: (value: number) => void; update: any; } diff --git a/src/features/source/browse/components/filters/CheckBoxFilter.tsx b/src/features/source/browse/components/filters/CheckBoxFilter.tsx index 2bf6dd4c..781c3b17 100644 --- a/src/features/source/browse/components/filters/CheckBoxFilter.tsx +++ b/src/features/source/browse/components/filters/CheckBoxFilter.tsx @@ -8,13 +8,14 @@ import React from 'react'; import { CheckboxInput } from '@/base/components/inputs/CheckboxInput.tsx'; +import type { IPos } from '@/features/source/Source.types.ts'; interface Props { state: boolean; name: string; position: number; group: number | undefined; - updateFilterValue: Function; + updateFilterValue: (value: IPos[]) => void; update: any; } diff --git a/src/features/source/browse/components/filters/GroupFilter.tsx b/src/features/source/browse/components/filters/GroupFilter.tsx index 11ec11cc..e496d3af 100644 --- a/src/features/source/browse/components/filters/GroupFilter.tsx +++ b/src/features/source/browse/components/filters/GroupFilter.tsx @@ -16,13 +16,13 @@ import Box from '@mui/material/Box'; import React from 'react'; import { Options } from '@/features/source/browse/components/SourceOptions.tsx'; -import { SourceFilters } from '@/features/source/Source.types.ts'; +import type { IPos, SourceFilters } from '@/features/source/Source.types.ts'; interface Props { state: ExtractByKeyValue['filters']; name: string; position: number; - updateFilterValue: Function; + updateFilterValue: (value: IPos[]) => void; update: any; } diff --git a/src/features/source/browse/components/filters/SelectFilter.tsx b/src/features/source/browse/components/filters/SelectFilter.tsx index 499e9639..85fc0acf 100644 --- a/src/features/source/browse/components/filters/SelectFilter.tsx +++ b/src/features/source/browse/components/filters/SelectFilter.tsx @@ -11,13 +11,14 @@ import InputLabel from '@mui/material/InputLabel'; import FormControl from '@mui/material/FormControl'; import MenuItem from '@mui/material/MenuItem'; import Select from '@mui/material/Select'; +import type { IPos } from '@/features/source/Source.types.ts'; interface Props { values: any; name: string; state: number; position: number; - updateFilterValue: Function; + updateFilterValue: (value: IPos[]) => void; group: number | undefined; update: any; } @@ -27,7 +28,7 @@ function noSelect( name: string, state: number, position: number, - updateFilterValue: Function, + updateFilterValue: (value: IPos[]) => void, update: any, group?: number, ) { diff --git a/src/features/source/browse/components/filters/SortFilter.tsx b/src/features/source/browse/components/filters/SortFilter.tsx index 38753de1..5687b3ec 100644 --- a/src/features/source/browse/components/filters/SortFilter.tsx +++ b/src/features/source/browse/components/filters/SortFilter.tsx @@ -15,7 +15,8 @@ import Stack from '@mui/material/Stack'; import Box from '@mui/material/Box'; import React from 'react'; import { SortRadioInput } from '@/base/components/inputs/SortRadioInput.tsx'; -import { SortSelectionInput } from '@/lib/graphql/generated/graphql.ts'; +import type { SortSelectionInput } from '@/lib/graphql/generated/graphql.ts'; +import type { IPos } from '@/features/source/Source.types.ts'; interface Props { values: any; @@ -23,7 +24,7 @@ interface Props { state: SortSelectionInput; position: number; group: number | undefined; - updateFilterValue: Function; + updateFilterValue: (value: IPos[]) => void; update: any; } diff --git a/src/features/source/browse/components/filters/TextFilter.tsx b/src/features/source/browse/components/filters/TextFilter.tsx index 4030eba1..987ab466 100644 --- a/src/features/source/browse/components/filters/TextFilter.tsx +++ b/src/features/source/browse/components/filters/TextFilter.tsx @@ -13,13 +13,14 @@ import InputAdornment from '@mui/material/InputAdornment'; import InputLabel from '@mui/material/InputLabel'; import React, { useEffect } from 'react'; import { useDebounce } from '@/base/hooks/useDebounce.ts'; +import type { IPos } from '@/features/source/Source.types.ts'; interface Props { state: string; name: string; position: number; group: number | undefined; - updateFilterValue: Function; + updateFilterValue: (value: IPos[]) => void; update: any; } diff --git a/src/features/source/browse/components/filters/TriStateFilter.tsx b/src/features/source/browse/components/filters/TriStateFilter.tsx index 2a1c3f92..34a91dbc 100644 --- a/src/features/source/browse/components/filters/TriStateFilter.tsx +++ b/src/features/source/browse/components/filters/TriStateFilter.tsx @@ -9,13 +9,14 @@ import React from 'react'; import { ThreeStateCheckboxInput } from '@/base/components/inputs/ThreeStateCheckboxInput.tsx'; import { TriState } from '@/lib/graphql/generated/graphql.ts'; +import type { IPos } from '@/features/source/Source.types.ts'; interface Props { state: TriState; name: string; position: number; group: number | undefined; - updateFilterValue: Function; + updateFilterValue: (value: IPos[]) => void; update: any; } diff --git a/src/features/source/browse/screens/SourceMangas.tsx b/src/features/source/browse/screens/SourceMangas.tsx index 336b5e7a..790cecba 100644 --- a/src/features/source/browse/screens/SourceMangas.tsx +++ b/src/features/source/browse/screens/SourceMangas.tsx @@ -6,7 +6,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { MessageDescriptor } from '@lingui/core'; +import type { MessageDescriptor } from '@lingui/core'; import { useCallback, useEffect, useMemo, useRef, useState } from 'react'; import { useParams, useNavigate, useLocation, useSearchParams } from 'react-router-dom'; import IconButton from '@mui/material/IconButton'; @@ -22,16 +22,13 @@ import FilterListIcon from '@mui/icons-material/FilterList'; import { useLingui } from '@lingui/react/macro'; import { msg } from '@lingui/core/macro'; import { CustomTooltip } from '@/base/components/CustomTooltip.tsx'; -import { - requestManager, - AbortableApolloUseMutationPaginatedResponse, - SPECIAL_ED_SOURCES, -} from '@/lib/requests/RequestManager.ts'; +import type { AbortableApolloUseMutationPaginatedResponse } from '@/lib/requests/RequestManager.ts'; +import { requestManager, SPECIAL_ED_SOURCES } from '@/lib/requests/RequestManager.ts'; import { SourceGridLayout } from '@/features/source/components/SourceGridLayout.tsx'; import { AppbarSearch } from '@/base/components/AppbarSearch.tsx'; import { SourceOptions } from '@/features/source/browse/components/SourceOptions.tsx'; import { BaseMangaGrid } from '@/features/manga/components/BaseMangaGrid.tsx'; -import { +import type { GetSourceBrowseQuery, GetSourceBrowseQueryVariables, GetSourceMangasFetchMutation, @@ -46,11 +43,11 @@ import { MANGA_GRID_SNAPSHOT_KEY } from '@/features/manga/components/MangaGrid.t import { createUpdateSourceMetadata, useGetSourceMetadata } from '@/features/source/services/SourceMetadata.ts'; import { makeToast } from '@/base/utils/Toast.ts'; import { GET_SOURCE_BROWSE } from '@/lib/graphql/source/SourceQuery.ts'; -import { IPos, SourceIdInfo } from '@/features/source/Source.types.ts'; +import type { IPos, SourceIdInfo } from '@/features/source/Source.types.ts'; import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts'; import { EmptyView } from '@/base/components/feedback/EmptyView.tsx'; import { EmptyViewAbsoluteCentered } from '@/base/components/feedback/EmptyViewAbsoluteCentered.tsx'; -import { MangaIdInfo } from '@/features/manga/Manga.types.ts'; +import type { MangaIdInfo } from '@/features/manga/Manga.types.ts'; import { GridLayout, SearchParam } from '@/base/Base.types'; import { AppRoutes } from '@/base/AppRoute.constants.ts'; import { getErrorMessage } from '@/lib/HelperFunctions.ts'; diff --git a/src/features/source/components/SourceLanguageSelect.tsx b/src/features/source/components/SourceLanguageSelect.tsx index 37ce8fdd..483ca673 100644 --- a/src/features/source/components/SourceLanguageSelect.tsx +++ b/src/features/source/components/SourceLanguageSelect.tsx @@ -25,7 +25,7 @@ import Box from '@mui/material/Box'; import { CustomTooltip } from '@/base/components/CustomTooltip.tsx'; import { translateExtensionLanguage } from '@/features/extension/Extensions.utils.ts'; import { languageSortComparator, toUniqueLanguageCodes } from '@/base/utils/Languages.ts'; -import { +import type { SourceDisplayNameInfo, SourceIconInfo, SourceIdInfo, @@ -78,7 +78,7 @@ export const SourceLanguageSelect = ({ ); const flattenedSourcesByLanguages = useMemo( - () => languagesSortedBySelectState.map((language) => sourcesByLanguage[language] ?? []).flat(), + () => languagesSortedBySelectState.flatMap((language) => sourcesByLanguage[language] ?? []), [languagesSortedBySelectState, sourcesByLanguage], ); diff --git a/src/features/source/configuration/components/EditTextPreference.tsx b/src/features/source/configuration/components/EditTextPreference.tsx index b3f8aeec..3aae9696 100644 --- a/src/features/source/configuration/components/EditTextPreference.tsx +++ b/src/features/source/configuration/components/EditTextPreference.tsx @@ -17,7 +17,7 @@ import TextField from '@mui/material/TextField'; import Button from '@mui/material/Button'; import ListItemButton from '@mui/material/ListItemButton'; import { useLingui } from '@lingui/react/macro'; -import { EditTextPreferenceProps } from '@/features/source/Source.types.ts'; +import type { EditTextPreferenceProps } from '@/features/source/Source.types.ts'; export function EditTextPreference(props: EditTextPreferenceProps) { const { t } = useLingui(); diff --git a/src/features/source/configuration/components/ListPreference.tsx b/src/features/source/configuration/components/ListPreference.tsx index 07fb2511..3871570e 100644 --- a/src/features/source/configuration/components/ListPreference.tsx +++ b/src/features/source/configuration/components/ListPreference.tsx @@ -18,7 +18,7 @@ import FormControlLabel from '@mui/material/FormControlLabel'; import Button from '@mui/material/Button'; import ListItemButton from '@mui/material/ListItemButton'; import { useLingui } from '@lingui/react/macro'; -import { ListPreferenceProps } from '@/features/source/Source.types.ts'; +import type { ListPreferenceProps } from '@/features/source/Source.types.ts'; interface IListDialogProps { value: string; diff --git a/src/features/source/configuration/components/MultiSelectListPreference.tsx b/src/features/source/configuration/components/MultiSelectListPreference.tsx index 641e6b45..2be6deb9 100644 --- a/src/features/source/configuration/components/MultiSelectListPreference.tsx +++ b/src/features/source/configuration/components/MultiSelectListPreference.tsx @@ -19,7 +19,7 @@ import Button from '@mui/material/Button'; import ListItemButton from '@mui/material/ListItemButton'; import { useLingui } from '@lingui/react/macro'; import { cloneObject } from '@/base/utils/cloneObject.tsx'; -import { MultiSelectListPreferenceProps } from '@/features/source/Source.types.ts'; +import type { MultiSelectListPreferenceProps } from '@/features/source/Source.types.ts'; interface IListDialogProps { selectedValues: string[]; diff --git a/src/features/source/configuration/components/TwoStatePreference.tsx b/src/features/source/configuration/components/TwoStatePreference.tsx index 4025ac59..1695e495 100644 --- a/src/features/source/configuration/components/TwoStatePreference.tsx +++ b/src/features/source/configuration/components/TwoStatePreference.tsx @@ -11,7 +11,7 @@ import ListItem from '@mui/material/ListItem'; import ListItemText from '@mui/material/ListItemText'; import Switch from '@mui/material/Switch'; import Checkbox from '@mui/material/Checkbox'; -import { +import type { CheckBoxPreferenceProps, SwitchPreferenceCompatProps, TwoStatePreferenceProps, diff --git a/src/features/source/configuration/screens/SourceConfigure.tsx b/src/features/source/configuration/screens/SourceConfigure.tsx index 435c2b07..e8b0966a 100644 --- a/src/features/source/configuration/screens/SourceConfigure.tsx +++ b/src/features/source/configuration/screens/SourceConfigure.tsx @@ -22,10 +22,10 @@ import { MultiSelectListPreference } from '@/features/source/configuration/compo import { LoadingPlaceholder } from '@/base/components/feedback/LoadingPlaceholder.tsx'; import { EmptyViewAbsoluteCentered } from '@/base/components/feedback/EmptyViewAbsoluteCentered.tsx'; import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts'; -import { GetCategoriesSettingsQueryVariables, GetSourceSettingsQuery } from '@/lib/graphql/generated/graphql.ts'; +import type { GetCategoriesSettingsQueryVariables, GetSourceSettingsQuery } from '@/lib/graphql/generated/graphql.ts'; import { GET_SOURCE_SETTINGS } from '@/lib/graphql/source/SourceQuery.ts'; import { makeToast } from '@/base/utils/Toast.ts'; -import { PreferenceProps } from '@/features/source/Source.types.ts'; +import type { PreferenceProps } from '@/features/source/Source.types.ts'; import { getErrorMessage } from '@/lib/HelperFunctions.ts'; import { useAppTitle } from '@/features/navigation-bar/hooks/useAppTitle.ts'; diff --git a/src/features/source/services/SourceMetadata.ts b/src/features/source/services/SourceMetadata.ts index fd7683ce..b3147715 100644 --- a/src/features/source/services/SourceMetadata.ts +++ b/src/features/source/services/SourceMetadata.ts @@ -12,10 +12,10 @@ import { requestBatchSourceMetadataUpdate, } from '@/features/metadata/services/MetadataUpdater.ts'; import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts'; -import { ISourceMetadata, SourceIdInfo, SourceMetadataKeys } from '@/features/source/Source.types.ts'; +import type { ISourceMetadata, SourceIdInfo, SourceMetadataKeys } from '@/features/source/Source.types.ts'; import { convertFromGqlMeta } from '@/features/metadata/services/MetadataConverter.ts'; import { getMetadataFrom } from '@/features/metadata/services/MetadataReader.ts'; -import { AllowedMetadataValueTypes, GqlMetaHolder, Metadata } from '@/features/metadata/Metadata.types.ts'; +import type { AllowedMetadataValueTypes, GqlMetaHolder, Metadata } from '@/features/metadata/Metadata.types.ts'; const DEFAULT_SOURCE_METADATA: ISourceMetadata = { savedSearches: undefined, diff --git a/src/features/source/services/Sources.ts b/src/features/source/services/Sources.ts index 19c353da..3380d215 100644 --- a/src/features/source/services/Sources.ts +++ b/src/features/source/services/Sources.ts @@ -8,7 +8,7 @@ import { useCallback } from 'react'; import { useLingui } from '@lingui/react/macro'; -import { +import type { SourceDisplayNameInfo, SourceIdInfo, SourceLanguageInfo, diff --git a/src/features/theme/AppTheme.types.ts b/src/features/theme/AppTheme.types.ts index 5b1ec984..d7eecc13 100644 --- a/src/features/theme/AppTheme.types.ts +++ b/src/features/theme/AppTheme.types.ts @@ -6,9 +6,9 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { Palette } from '@vibrant/color'; -import { FastAverageColorResult } from 'fast-average-color'; -import { AppTheme, AppThemes } from '@/features/theme/services/AppThemes.ts'; +import type { Palette } from '@vibrant/color'; +import type { FastAverageColorResult } from 'fast-average-color'; +import type { AppTheme, AppThemes } from '@/features/theme/services/AppThemes.ts'; export enum ThemeMode { SYSTEM = 'system', diff --git a/src/features/theme/AppThemeContext.tsx b/src/features/theme/AppThemeContext.tsx index 04f55b10..591996d3 100644 --- a/src/features/theme/AppThemeContext.tsx +++ b/src/features/theme/AppThemeContext.tsx @@ -6,11 +6,14 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import React, { ReactNode, useContext, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react'; -import { Direction, ThemeProvider } from '@mui/material/styles'; +import type { ReactNode } from 'react'; +import React, { useContext, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react'; +import type { Direction } from '@mui/material/styles'; +import { ThemeProvider } from '@mui/material/styles'; import { CacheProvider } from '@emotion/react'; import { useLingui } from '@lingui/react/macro'; -import { AppTheme, getTheme } from '@/features/theme/services/AppThemes.ts'; +import type { AppTheme } from '@/features/theme/services/AppThemes.ts'; +import { getTheme } from '@/features/theme/services/AppThemes.ts'; import { createUpdateMetadataServerSettings, useMetadataServerSettings, @@ -23,7 +26,8 @@ import { getErrorMessage } from '@/lib/HelperFunctions.ts'; import { createAndSetTheme } from '@/features/theme/services/ThemeCreator.ts'; import { AppStorage } from '@/lib/storage/AppStorage.ts'; import { DIRECTION_TO_CACHE } from '@/features/theme/ThemeDirectionCache.ts'; -import { TAppThemeContext, ThemeMode } from '@/features/theme/AppTheme.types.ts'; +import type { TAppThemeContext } from '@/features/theme/AppTheme.types.ts'; +import { ThemeMode } from '@/features/theme/AppTheme.types.ts'; import { getLanguageReadingDirection } from '@/lib/ISOLanguageUtil.ts'; import { loadCatalog } from '@/i18n'; import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts'; diff --git a/src/features/theme/ThemeDirectionCache.ts b/src/features/theme/ThemeDirectionCache.ts index 9acf3aee..4f8aa612 100644 --- a/src/features/theme/ThemeDirectionCache.ts +++ b/src/features/theme/ThemeDirectionCache.ts @@ -6,8 +6,8 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { Direction } from '@mui/material/styles'; -import { EmotionCache } from '@emotion/react'; +import type { Direction } from '@mui/material/styles'; +import type { EmotionCache } from '@emotion/react'; import createCache from '@emotion/cache'; import { prefixer } from 'stylis'; import rtlPlugin from 'stylis-plugin-rtl'; diff --git a/src/features/theme/Themes.ts b/src/features/theme/Themes.ts index 8e7ad486..2e1a6425 100644 --- a/src/features/theme/Themes.ts +++ b/src/features/theme/Themes.ts @@ -6,7 +6,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { CssVarsThemeOptions } from '@mui/material/styles'; +import type { CssVarsThemeOptions } from '@mui/material/styles'; import { t } from '@lingui/core/macro'; export type TBaseTheme = { diff --git a/src/features/theme/components/CreateThemeDialog.tsx b/src/features/theme/components/CreateThemeDialog.tsx index 5071dc1a..b5fdb124 100644 --- a/src/features/theme/components/CreateThemeDialog.tsx +++ b/src/features/theme/components/CreateThemeDialog.tsx @@ -6,7 +6,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { MessageDescriptor } from '@lingui/core'; +import type { MessageDescriptor } from '@lingui/core'; import { useMemo, useState } from 'react'; import Typography from '@mui/material/Typography'; import Stack from '@mui/material/Stack'; @@ -18,11 +18,12 @@ import DialogActions from '@mui/material/DialogActions'; import TextField from '@mui/material/TextField'; import Link from '@mui/material/Link'; import { jsonrepair } from 'jsonrepair'; -import { AwaitableComponentProps } from 'awaitable-component'; +import type { AwaitableComponentProps } from 'awaitable-component'; import { Trans, useLingui } from '@lingui/react/macro'; import { msg } from '@lingui/core/macro'; import { getErrorMessage, jsonSaveParse } from '@/lib/HelperFunctions.ts'; -import { AppTheme, getTheme, isThemeNameUnique } from '@/features/theme/services/AppThemes.ts'; +import type { AppTheme } from '@/features/theme/services/AppThemes.ts'; +import { getTheme, isThemeNameUnique } from '@/features/theme/services/AppThemes.ts'; import { createUpdateMetadataServerSettings, useMetadataServerSettings, @@ -31,7 +32,7 @@ import { makeToast } from '@/base/utils/Toast.ts'; import { EmptyView } from '@/base/components/feedback/EmptyView.tsx'; import { LoadingPlaceholder } from '@/base/components/feedback/LoadingPlaceholder.tsx'; import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts'; -import { MetadataThemeSettings } from '@/features/theme/AppTheme.types.ts'; +import type { MetadataThemeSettings } from '@/features/theme/AppTheme.types.ts'; import { CheckboxInput } from '@/base/components/inputs/CheckboxInput.tsx'; import { useAppThemeContext } from '@/features/theme/AppThemeContext.tsx'; import { createAppColorTheme } from '@/features/theme/services/ThemeCreator.ts'; diff --git a/src/features/theme/components/ThemeList.tsx b/src/features/theme/components/ThemeList.tsx index 5eebce4d..d02b71fe 100644 --- a/src/features/theme/components/ThemeList.tsx +++ b/src/features/theme/components/ThemeList.tsx @@ -20,7 +20,7 @@ import { LoadingPlaceholder } from '@/base/components/feedback/LoadingPlaceholde import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts'; import { CreateThemeButton } from '@/features/theme/components/CreateThemeButton.tsx'; import { ThemePreview } from '@/features/theme/components/ThemePreview.tsx'; -import { MetadataThemeSettings } from '@/features/theme/AppTheme.types.ts'; +import type { MetadataThemeSettings } from '@/features/theme/AppTheme.types.ts'; import { getErrorMessage } from '@/lib/HelperFunctions.ts'; export const ThemeList = () => { diff --git a/src/features/theme/components/ThemePreview.tsx b/src/features/theme/components/ThemePreview.tsx index 9f5611bb..8d64af34 100644 --- a/src/features/theme/components/ThemePreview.tsx +++ b/src/features/theme/components/ThemePreview.tsx @@ -21,7 +21,7 @@ import Paper from '@mui/material/Paper'; import { useLingui } from '@lingui/react/macro'; import { CustomTooltip } from '@/base/components/CustomTooltip.tsx'; import { useAppThemeContext } from '@/features/theme/AppThemeContext.tsx'; -import { AppTheme } from '@/features/theme/services/AppThemes.ts'; +import type { AppTheme } from '@/features/theme/services/AppThemes.ts'; import { createTheme } from '@/features/theme/services/ThemeCreator.ts'; import { ThemeCreationDialog } from '@/features/theme/components/CreateThemeDialog.tsx'; import { makeToast } from '@/base/utils/Toast.ts'; diff --git a/src/features/theme/services/AppThemes.ts b/src/features/theme/services/AppThemes.ts index bab2b66f..0d760cfa 100644 --- a/src/features/theme/services/AppThemes.ts +++ b/src/features/theme/services/AppThemes.ts @@ -6,7 +6,8 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { TBaseTheme, themes } from '@/features/theme/Themes.ts'; +import type { TBaseTheme } from '@/features/theme/Themes.ts'; +import { themes } from '@/features/theme/Themes.ts'; export type AppThemes = keyof typeof themes | string; diff --git a/src/features/theme/services/ThemeCreator.ts b/src/features/theme/services/ThemeCreator.ts index 91037ab2..716c89b5 100644 --- a/src/features/theme/services/ThemeCreator.ts +++ b/src/features/theme/services/ThemeCreator.ts @@ -6,24 +6,18 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { - createTheme as createMuiTheme, - Direction, - PaletteBackgroundChannel, - responsiveFontSizes, - Theme, - TypeBackground, - useTheme, -} from '@mui/material/styles'; +import type { Direction, PaletteBackgroundChannel, Theme, TypeBackground } from '@mui/material/styles'; +import { createTheme as createMuiTheme, responsiveFontSizes, useTheme } from '@mui/material/styles'; import { useCallback } from 'react'; // oxlint-disable-next-line no-restricted-imports import { deepmerge } from '@mui/utils'; import { complement, hsl, parseToHsl } from 'polished'; -import { HslaColor, HslColor } from 'polished/lib/types/color'; -import { AppTheme } from '@/features/theme/services/AppThemes.ts'; +import type { HslaColor, HslColor } from 'polished/lib/types/color'; +import type { AppTheme } from '@/features/theme/services/AppThemes.ts'; import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts'; import { applyStyles } from '@/base/utils/ApplyStyles.ts'; -import { TAppThemeContext, ThemeMode } from '@/features/theme/AppTheme.types.ts'; +import type { TAppThemeContext } from '@/features/theme/AppTheme.types.ts'; +import { ThemeMode } from '@/features/theme/AppTheme.types.ts'; import { ThemeFontLoader } from '@/features/theme/services/ThemeFontLoader.ts'; import { coerceIn } from '@/lib/HelperFunctions.ts'; import { MediaQuery } from '@/base/utils/MediaQuery.tsx'; diff --git a/src/features/theme/services/ThemeFontLoader.ts b/src/features/theme/services/ThemeFontLoader.ts index 596280d3..2e5a6f66 100644 --- a/src/features/theme/services/ThemeFontLoader.ts +++ b/src/features/theme/services/ThemeFontLoader.ts @@ -7,7 +7,7 @@ */ import WebFont from 'webfontloader'; -import { CssVarsThemeOptions } from '@mui/material/styles'; +import type { CssVarsThemeOptions } from '@mui/material/styles'; import { ControlledPromise } from '@/lib/ControlledPromise.ts'; import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts'; @@ -36,11 +36,15 @@ export class ThemeFontLoader { } private static parseWeight(value: any): number | null { - if (typeof value === 'number') return value; + if (typeof value === 'number') { + return value; + } if (typeof value === 'string') { const parsed = Number(value); - if (!Number.isNaN(parsed)) return parsed; + if (!Number.isNaN(parsed)) { + return parsed; + } // Handle CSS keywords switch (value.toLowerCase()) { @@ -79,7 +83,7 @@ export class ThemeFontLoader { const isValidFontProperty = propertyName === 'fontFamily' && propertyType === 'string'; if (isValidFontProperty) { const detectedFonts = propertyValue.split(',') as string[]; - const normalizedFonts = detectedFonts.map((detectedFont) => detectedFont.replace(/"/g, '').trim()); + const normalizedFonts = detectedFonts.map((detectedFont) => detectedFont.replaceAll('"', '').trim()); const weights = this.extractWeights(obj); diff --git a/src/features/tracker/Tracker.constants.ts b/src/features/tracker/Tracker.constants.ts index dc424ceb..259be1c9 100644 --- a/src/features/tracker/Tracker.constants.ts +++ b/src/features/tracker/Tracker.constants.ts @@ -6,9 +6,9 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { MessageDescriptor } from '@lingui/core'; +import type { MessageDescriptor } from '@lingui/core'; import { msg } from '@lingui/core/macro'; -import { SxProps, Theme } from '@mui/material/styles'; +import type { SxProps, Theme } from '@mui/material/styles'; import { PublishingStatus, PublishingType } from '@/features/tracker/Tracker.types.ts'; export const DIALOG_PADDING: number = 2; diff --git a/src/features/tracker/Tracker.types.ts b/src/features/tracker/Tracker.types.ts index 03c9d398..499a5020 100644 --- a/src/features/tracker/Tracker.types.ts +++ b/src/features/tracker/Tracker.types.ts @@ -6,7 +6,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { +import type { TrackerType, TrackRecordSearchFieldsFragment, TrackRecordType, diff --git a/src/features/tracker/components/TrackManga.tsx b/src/features/tracker/components/TrackManga.tsx index fb5305b9..6658cebb 100644 --- a/src/features/tracker/components/TrackManga.tsx +++ b/src/features/tracker/components/TrackManga.tsx @@ -17,10 +17,10 @@ import { Trackers } from '@/features/tracker/services/Trackers.ts'; import { TrackerCard, TrackerMode } from '@/features/tracker/components/cards/TrackerCard.tsx'; import { makeToast } from '@/base/utils/Toast.ts'; import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts'; -import { GetMangaTrackRecordsQuery, GetTrackersBindQuery, MangaType } from '@/lib/graphql/generated/graphql.ts'; +import type { GetMangaTrackRecordsQuery, GetTrackersBindQuery, MangaType } from '@/lib/graphql/generated/graphql.ts'; import { GET_TRACKERS_BIND } from '@/lib/graphql/tracker/TrackerQuery.ts'; import { GET_MANGA_TRACK_RECORDS } from '@/lib/graphql/manga/MangaQuery.ts'; -import { MangaIdInfo } from '@/features/manga/Manga.types.ts'; +import type { MangaIdInfo } from '@/features/manga/Manga.types.ts'; import { AppRoutes } from '@/base/AppRoute.constants.ts'; import { getErrorMessage } from '@/lib/HelperFunctions.ts'; import { EmptyView } from '@/base/components/feedback/EmptyView.tsx'; diff --git a/src/features/tracker/components/TrackerSearch.tsx b/src/features/tracker/components/TrackerSearch.tsx index 9d249950..6d80ac71 100644 --- a/src/features/tracker/components/TrackerSearch.tsx +++ b/src/features/tracker/components/TrackerSearch.tsx @@ -31,12 +31,13 @@ import { TrackerMangaCard } from '@/features/tracker/components/cards/TrackerMan import { DIALOG_PADDING } from '@/features/tracker/Tracker.constants.ts'; import { useGetOptionForDirection } from '@/features/theme/services/ThemeCreator.ts'; import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts'; -import { MangaType } from '@/lib/graphql/generated/graphql.ts'; -import { MangaIdInfo } from '@/features/manga/Manga.types.ts'; +import type { MangaType } from '@/lib/graphql/generated/graphql.ts'; +import type { MangaIdInfo } from '@/features/manga/Manga.types.ts'; import { getErrorMessage } from '@/lib/HelperFunctions.ts'; import { applyStyles } from '@/base/utils/ApplyStyles.ts'; -import { Tracker, TrackerIdInfo, TTrackerBind } from '@/features/tracker/Tracker.types.ts'; +import type { TrackerIdInfo, TTrackerBind } from '@/features/tracker/Tracker.types.ts'; +import { Tracker } from '@/features/tracker/Tracker.types.ts'; import { CustomButtonIcon } from '@/base/components/buttons/CustomButtonIcon.tsx'; import { CustomTooltip } from '@/base/components/CustomTooltip.tsx'; diff --git a/src/features/tracker/components/cards/SettingsTrackerCard.tsx b/src/features/tracker/components/cards/SettingsTrackerCard.tsx index dc54a7f9..b5b72f54 100644 --- a/src/features/tracker/components/cards/SettingsTrackerCard.tsx +++ b/src/features/tracker/components/cards/SettingsTrackerCard.tsx @@ -16,7 +16,7 @@ import { makeToast } from '@/base/utils/Toast.ts'; import { requestManager } from '@/lib/requests/RequestManager.ts'; import { Trackers } from '@/features/tracker/services/Trackers.ts'; import { getErrorMessage, noOp } from '@/lib/HelperFunctions.ts'; -import { TTrackerSearch } from '@/features/tracker/Tracker.types.ts'; +import type { TTrackerSearch } from '@/features/tracker/Tracker.types.ts'; import { AvatarSpinner } from '@/base/components/AvatarSpinner.tsx'; import { CredentialsLogin } from '@/base/components/modals/LoginDialog.tsx'; diff --git a/src/features/tracker/components/cards/TrackerActiveCard.tsx b/src/features/tracker/components/cards/TrackerActiveCard.tsx index e8f6abb9..36c9fd5b 100644 --- a/src/features/tracker/components/cards/TrackerActiveCard.tsx +++ b/src/features/tracker/components/cards/TrackerActiveCard.tsx @@ -38,11 +38,12 @@ import { makeToast } from '@/base/utils/Toast.ts'; import { Menu } from '@/base/components/menu/Menu.tsx'; import { CARD_STYLING, UNSET_DATE } from '@/features/tracker/Tracker.constants.ts'; import { TypographyMaxLines } from '@/base/components/texts/TypographyMaxLines.tsx'; -import { SelectSetting, SelectSettingValue } from '@/base/components/settings/SelectSetting.tsx'; +import type { SelectSettingValue } from '@/base/components/settings/SelectSetting.tsx'; +import { SelectSetting } from '@/base/components/settings/SelectSetting.tsx'; import { CheckboxInput } from '@/base/components/inputs/CheckboxInput.tsx'; -import { TrackRecordType } from '@/lib/graphql/generated/graphql.ts'; +import type { TrackRecordType } from '@/lib/graphql/generated/graphql.ts'; import { getErrorMessage } from '@/lib/HelperFunctions.ts'; -import { TTrackerBind, TTrackRecordBind } from '@/features/tracker/Tracker.types.ts'; +import type { TTrackerBind, TTrackRecordBind } from '@/features/tracker/Tracker.types.ts'; import { AvatarSpinner } from '@/base/components/AvatarSpinner.tsx'; const TrackerActiveLink = ({ children, url }: { children: React.ReactNode; url: string }) => ( diff --git a/src/features/tracker/components/cards/TrackerCard.tsx b/src/features/tracker/components/cards/TrackerCard.tsx index 1ca9fe84..3199e7c6 100644 --- a/src/features/tracker/components/cards/TrackerCard.tsx +++ b/src/features/tracker/components/cards/TrackerCard.tsx @@ -9,10 +9,10 @@ import { TrackerUntrackedCard } from '@/features/tracker/components/cards/TrackerUntrackedCard.tsx'; import { TrackerSearch } from '@/features/tracker/components/TrackerSearch.tsx'; import { TrackerActiveCard } from '@/features/tracker/components/cards/TrackerActiveCard.tsx'; -import { MangaType } from '@/lib/graphql/generated/graphql.ts'; +import type { MangaType } from '@/lib/graphql/generated/graphql.ts'; -import { MangaIdInfo } from '@/features/manga/Manga.types.ts'; -import { TTrackerBind, TTrackRecordBind } from '@/features/tracker/Tracker.types.ts'; +import type { MangaIdInfo } from '@/features/manga/Manga.types.ts'; +import type { TTrackerBind, TTrackRecordBind } from '@/features/tracker/Tracker.types.ts'; export enum TrackerMode { UNTRACKED, diff --git a/src/features/tracker/components/cards/TrackerMangaCard.tsx b/src/features/tracker/components/cards/TrackerMangaCard.tsx index 878d4ca3..fba7f615 100644 --- a/src/features/tracker/components/cards/TrackerMangaCard.tsx +++ b/src/features/tracker/components/cards/TrackerMangaCard.tsx @@ -31,7 +31,7 @@ import { PUBLISHING_STATUS_TO_TRANSLATION, PUBLISHING_TYPE_TO_TRANSLATION, } from '@/features/tracker/Tracker.constants.ts'; -import { TTrackerManga } from '@/features/tracker/Tracker.types.ts'; +import type { TTrackerManga } from '@/features/tracker/Tracker.types.ts'; const TrackerMangaCardTitle = ({ title, selected }: { title: string; selected: boolean }) => ( (...args: Parameters): T | null => { try { diff --git a/src/lib/ISOLanguageUtil.ts b/src/lib/ISOLanguageUtil.ts index 8ebe2959..11224bcc 100644 --- a/src/lib/ISOLanguageUtil.ts +++ b/src/lib/ISOLanguageUtil.ts @@ -6,7 +6,8 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { ISOLanguage, IsoLanguages } from '@/base/IsoLanguages.ts'; +import type { ISOLanguage } from '@/base/IsoLanguages.ts'; +import { IsoLanguages } from '@/base/IsoLanguages.ts'; import { i18nResources } from '@/i18n'; import { AppStorage } from '@/lib/storage/AppStorage.ts'; diff --git a/src/lib/Queue.ts b/src/lib/Queue.ts index f2d38a26..84af0dc4 100644 --- a/src/lib/Queue.ts +++ b/src/lib/Queue.ts @@ -6,7 +6,8 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import pLimit, { LimitFunction } from 'p-limit'; +import type { LimitFunction } from 'p-limit'; +import pLimit from 'p-limit'; import { ControlledPromise } from '@/lib/ControlledPromise.ts'; export enum Priority { diff --git a/src/lib/dayjs/LocaleImporter.ts b/src/lib/dayjs/LocaleImporter.ts index db9a045d..b4f2e1f9 100644 --- a/src/lib/dayjs/LocaleImporter.ts +++ b/src/lib/dayjs/LocaleImporter.ts @@ -6,7 +6,8 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { DAYJS_LOCALES, DayJsLocale } from '@/lib/dayjs/Locales.ts'; +import type { DayJsLocale } from '@/lib/dayjs/Locales.ts'; +import { DAYJS_LOCALES } from '@/lib/dayjs/Locales.ts'; import { DEFAULT_LANGUAGE } from '@/lib/ISOLanguageUtil.ts'; export const getDayJsLocale = (locale: string): DayJsLocale => { diff --git a/src/lib/dnd-kit/DndKitUtil.ts b/src/lib/dnd-kit/DndKitUtil.ts index f7c0e44d..6bcd848b 100644 --- a/src/lib/dnd-kit/DndKitUtil.ts +++ b/src/lib/dnd-kit/DndKitUtil.ts @@ -6,17 +6,9 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { - MouseSensor, - PointerSensorOptions, - Sensor, - SensorDescriptor, - TouchSensor, - useSensor, - SensorOptions, - useSensors, -} from '@dnd-kit/core'; -import { AbstractPointerSensorOptions, PointerActivationConstraint } from '@dnd-kit/core/dist/sensors'; +import type { PointerSensorOptions, Sensor, SensorDescriptor, SensorOptions } from '@dnd-kit/core'; +import { MouseSensor, TouchSensor, useSensor, useSensors } from '@dnd-kit/core'; +import type { AbstractPointerSensorOptions, PointerActivationConstraint } from '@dnd-kit/core/dist/sensors'; import { MediaQuery } from '@/base/utils/MediaQuery.tsx'; export class DndKitUtil { diff --git a/src/lib/dnd-kit/DndOverlayItem.tsx b/src/lib/dnd-kit/DndOverlayItem.tsx index eb1a8252..ee6cb09f 100644 --- a/src/lib/dnd-kit/DndOverlayItem.tsx +++ b/src/lib/dnd-kit/DndOverlayItem.tsx @@ -7,7 +7,7 @@ */ import { DragOverlay } from '@dnd-kit/core'; -import { ReactNode } from 'react'; +import type { ReactNode } from 'react'; export const DndOverlayItem = ({ isActive, children }: { isActive: boolean; children?: ReactNode }) => { if (!isActive) { diff --git a/src/lib/dnd-kit/DndSortableItem.tsx b/src/lib/dnd-kit/DndSortableItem.tsx index 92c078d3..a7ece737 100644 --- a/src/lib/dnd-kit/DndSortableItem.tsx +++ b/src/lib/dnd-kit/DndSortableItem.tsx @@ -8,8 +8,8 @@ import Box from '@mui/material/Box'; import { useSortable } from '@dnd-kit/sortable'; -import { ReactNode } from 'react'; -import { UniqueIdentifier } from '@dnd-kit/core'; +import type { ReactNode } from 'react'; +import type { UniqueIdentifier } from '@dnd-kit/core'; import { CSS } from '@dnd-kit/utilities'; import { applyStyles } from '@/base/utils/ApplyStyles.ts'; diff --git a/src/lib/mui/MUI.util.ts b/src/lib/mui/MUI.util.ts index 970b020d..525caafe 100644 --- a/src/lib/mui/MUI.util.ts +++ b/src/lib/mui/MUI.util.ts @@ -6,7 +6,8 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import React, { BaseSyntheticEvent } from 'react'; +import type { BaseSyntheticEvent } from 'react'; +import React from 'react'; import { chainEventHandlers } from 'material-ui-popup-state/chainEventHandlers'; export class MUIUtil { diff --git a/src/lib/react-router-dom/ReactRouterDom.types.d.ts b/src/lib/react-router-dom/ReactRouterDom.types.d.ts index ff336637..3366b846 100644 --- a/src/lib/react-router-dom/ReactRouterDom.types.d.ts +++ b/src/lib/react-router-dom/ReactRouterDom.types.d.ts @@ -6,12 +6,12 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { Location } from 'react-router-dom'; +import type { Location } from 'react-router-dom'; type GenericLocation = Omit & { state?: State }; declare module 'react-router-dom' { - export function useParams(): Params; + export function useParams>(): Params; export function useLocation(): GenericLocation; } diff --git a/src/lib/react-router/ReactRouter.ts b/src/lib/react-router/ReactRouter.ts index c8f8f3f6..9ebe8ac9 100644 --- a/src/lib/react-router/ReactRouter.ts +++ b/src/lib/react-router/ReactRouter.ts @@ -6,7 +6,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { NavigateFunction, NavigateOptions, To } from 'react-router-dom'; +import type { NavigateFunction, NavigateOptions, To } from 'react-router-dom'; import { noOp } from '@/lib/HelperFunctions.ts'; export class ReactRouter { diff --git a/src/lib/requests/RequestManager.ts b/src/lib/requests/RequestManager.ts index 113fdb97..53164ffa 100644 --- a/src/lib/requests/RequestManager.ts +++ b/src/lib/requests/RequestManager.ts @@ -6,25 +6,24 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { +import type { ApolloClient, DocumentNode, MaybeMasked, OperationVariables, TypedDocumentNode, - CombinedGraphQLErrors, } from '@apollo/client/core'; +import { CombinedGraphQLErrors } from '@apollo/client/core'; import { useMutation, useQuery, useSubscription } from '@apollo/client/react'; -import { Reference } from '@apollo/client/utilities'; +import type { Reference } from '@apollo/client/utilities'; import { useEffect, useMemo, useRef, useState } from 'react'; import { d } from 'koration'; -import { IRestClient, RestClient } from '@/lib/requests/client/RestClient.ts'; +import type { IRestClient } from '@/lib/requests/client/RestClient.ts'; +import { RestClient } from '@/lib/requests/client/RestClient.ts'; import { GraphQLClient } from '@/lib/requests/client/GraphQLClient.ts'; import { BaseClient } from '@/lib/requests/client/BaseClient.ts'; -import { - CategoryOrderBy, +import type { ChapterConditionInput, - ChapterOrderBy, CheckForServerUpdatesQuery, CheckForServerUpdatesQueryVariables, CheckForWebuiUpdateQuery, @@ -48,13 +47,11 @@ import { DequeueChapterDownloadsMutationVariables, DownloadStatusSubscription, DownloadStatusSubscriptionVariables, - DownloadUpdateType, EnqueueChapterDownloadMutation, EnqueueChapterDownloadMutationVariables, EnqueueChapterDownloadsMutation, EnqueueChapterDownloadsMutationVariables, FetchSourceMangaInput, - FetchSourceMangaType, FilterChangeInput, GetAboutQuery, GetAboutQueryVariables, @@ -119,7 +116,6 @@ import { SetGlobalMetasInput, DeleteGlobalMetasInput, SettingsType, - SortOrder, SourcePreferenceChangeInput, StartDownloaderMutation, StartDownloaderMutationVariables, @@ -184,7 +180,6 @@ import { UpdateLibraryMutationVariables, GetExtensionQuery, GetExtensionQueryVariables, - DownloaderState, UserLoginMutation, UserLoginMutationVariables, UserRefreshMutation, @@ -218,6 +213,14 @@ import { SetCategoryMetasInput, DeleteCategoryMetasInput, } from '@/lib/graphql/generated/graphql.ts'; +import { + CategoryOrderBy, + ChapterOrderBy, + DownloadUpdateType, + FetchSourceMangaType, + SortOrder, + DownloaderState, +} from '@/lib/graphql/generated/graphql.ts'; import { GET_GLOBAL_METADATAS } from '@/lib/graphql/metadata/GlobalMetadataQuery.ts'; import { UPDATE_GLOBAL_METADATA } from '@/lib/graphql/metadata/GlobalMetadataMutation.ts'; import { @@ -306,7 +309,7 @@ import { RESET_WEBUI_UPDATE_STATUS, UPDATE_WEBUI } from '@/lib/graphql/server/Se import { WEBUI_UPDATE_SUBSCRIPTION } from '@/lib/graphql/server/ServerInfoSubscription.ts'; import { GET_DOWNLOAD_STATUS } from '@/lib/graphql/download/DownloaderQuery.ts'; import { defaultPromiseErrorHandler } from '@/lib/DefaultPromiseErrorHandler.ts'; -import { QueuePriority } from '@/lib/Queue.ts'; +import type { QueuePriority } from '@/lib/Queue.ts'; import { SourceAwareQueue } from '@/lib/SourceAwareQueue.ts'; import { TRACKER_SEARCH } from '@/lib/graphql/tracker/TrackerQuery.ts'; import { @@ -326,8 +329,8 @@ import { GLOBAL_METADATA } from '@/lib/graphql/common/Fragments.ts'; import { CATEGORY_META_FIELDS } from '@/lib/graphql/category/CategoryFragments.ts'; import { SOURCE_META_FIELDS } from '@/lib/graphql/source/SourceFragments.ts'; import { CHAPTER_META_FIELDS } from '@/lib/graphql/chapter/ChapterFragments.ts'; -import { MetadataMigrationSettings } from '@/features/migration/Migration.types.ts'; -import { MangaIdInfo } from '@/features/manga/Manga.types.ts'; +import type { MetadataMigrationSettings } from '@/features/migration/Migration.types.ts'; +import type { MangaIdInfo } from '@/features/manga/Manga.types.ts'; import { updateMetadataList } from '@/features/metadata/services/MetadataApolloCacheHandler.ts'; import { USER_LOGIN, USER_REFRESH } from '@/lib/graphql/user/UserMutation.ts'; import { AuthManager } from '@/features/authentication/AuthManager.ts'; diff --git a/src/lib/requests/client/BaseClient.ts b/src/lib/requests/client/BaseClient.ts index 76a90e25..fb3b757d 100644 --- a/src/lib/requests/client/BaseClient.ts +++ b/src/lib/requests/client/BaseClient.ts @@ -7,9 +7,9 @@ */ import { AppStorage } from '@/lib/storage/AppStorage.ts'; -import { UserRefreshMutation } from '@/lib/graphql/generated/graphql.ts'; +import type { UserRefreshMutation } from '@/lib/graphql/generated/graphql.ts'; import { AuthManager } from '@/features/authentication/AuthManager.ts'; -import { AbortableApolloMutationResponse } from '@/lib/requests/RequestManager.ts'; +import type { AbortableApolloMutationResponse } from '@/lib/requests/RequestManager.ts'; import { SubpathUtil } from '@/lib/utils/SubpathUtil.ts'; import { ControlledPromise } from '@/lib/ControlledPromise.ts'; diff --git a/src/lib/requests/client/GraphQLClient.ts b/src/lib/requests/client/GraphQLClient.ts index d49e4db4..92d9ac14 100644 --- a/src/lib/requests/client/GraphQLClient.ts +++ b/src/lib/requests/client/GraphQLClient.ts @@ -12,19 +12,20 @@ import { ApolloClient, ApolloLink, CombinedGraphQLErrors, InMemoryCache } from ' import { from, filter, map, switchMap, firstValueFrom } from 'rxjs'; import UploadHttpLink from 'apollo-upload-client/UploadHttpLink.mjs'; import { GraphQLWsLink } from '@apollo/client/link/subscriptions'; -import { Client, createClient } from 'graphql-ws'; +import type { Client } from 'graphql-ws'; +import { createClient } from 'graphql-ws'; import { getMainDefinition } from '@apollo/client/utilities'; -import { TypePolicies } from '@apollo/client/cache'; +import type { TypePolicies } from '@apollo/client/cache'; import { RemoveTypenameFromVariablesLink } from '@apollo/client/link/remove-typename'; import { d } from 'koration'; import { useId } from '@mantine/hooks'; import { useEffect } from 'react'; -import { GraphQLFormattedError } from 'graphql'; +import type { GraphQLFormattedError } from 'graphql'; import { BaseClient } from '@/lib/requests/client/BaseClient.ts'; -import { StrictTypedTypePolicies } from '@/lib/graphql/generated/apollo-helpers.ts'; +import type { StrictTypedTypePolicies } from '@/lib/graphql/generated/apollo-helpers.ts'; import { AuthManager } from '@/features/authentication/AuthManager.ts'; -import { UserRefreshMutation } from '@/lib/graphql/generated/graphql.ts'; -import { AbortableApolloMutationResponse } from '@/lib/requests/RequestManager.ts'; +import type { UserRefreshMutation } from '@/lib/graphql/generated/graphql.ts'; +import type { AbortableApolloMutationResponse } from '@/lib/requests/RequestManager.ts'; const typePolicies: StrictTypedTypePolicies = { MangaType: { @@ -320,7 +321,7 @@ export class GraphQLClient extends BaseClient this.getBaseUrl().replace(/http(|s)/g, 'ws'), + url: () => this.getBaseUrl().replaceAll(/http(|s)/g, 'ws'), keepAlive: heartbeatInterval, retryAttempts: Number.MAX_SAFE_INTEGER, shouldRetry: () => true, diff --git a/src/lib/requests/client/RestClient.ts b/src/lib/requests/client/RestClient.ts index 52ae0cb2..35f1e10c 100644 --- a/src/lib/requests/client/RestClient.ts +++ b/src/lib/requests/client/RestClient.ts @@ -8,8 +8,8 @@ import { BaseClient } from '@/lib/requests/client/BaseClient.ts'; import { AuthManager } from '@/features/authentication/AuthManager.ts'; -import { UserRefreshMutation } from '@/lib/graphql/generated/graphql.ts'; -import { AbortableApolloMutationResponse } from '@/lib/requests/RequestManager.ts'; +import type { UserRefreshMutation } from '@/lib/graphql/generated/graphql.ts'; +import type { AbortableApolloMutationResponse } from '@/lib/requests/RequestManager.ts'; export enum HttpMethod { GET = 'GET', diff --git a/src/lib/virtuoso/Component/GroupedVirtuosoPersisted.tsx b/src/lib/virtuoso/Component/GroupedVirtuosoPersisted.tsx index 0778193d..bdab12cf 100644 --- a/src/lib/virtuoso/Component/GroupedVirtuosoPersisted.tsx +++ b/src/lib/virtuoso/Component/GroupedVirtuosoPersisted.tsx @@ -6,8 +6,10 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { ComponentProps, useRef } from 'react'; -import { GroupedVirtuoso, GroupedVirtuosoHandle, StateSnapshot } from 'react-virtuoso'; +import type { ComponentProps } from 'react'; +import { useRef } from 'react'; +import type { GroupedVirtuosoHandle, StateSnapshot } from 'react-virtuoso'; +import { GroupedVirtuoso } from 'react-virtuoso'; import { useMergedRef } from '@mantine/hooks'; import { VirtuosoUtil } from '@/lib/virtuoso/Virtuoso.util.tsx'; diff --git a/src/lib/virtuoso/Component/VirtuosoGridPersisted.tsx b/src/lib/virtuoso/Component/VirtuosoGridPersisted.tsx index da8db902..1c72ed12 100644 --- a/src/lib/virtuoso/Component/VirtuosoGridPersisted.tsx +++ b/src/lib/virtuoso/Component/VirtuosoGridPersisted.tsx @@ -6,8 +6,10 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { ComponentProps, useRef } from 'react'; -import { GridStateSnapshot, VirtuosoGrid, VirtuosoGridHandle } from 'react-virtuoso'; +import type { ComponentProps } from 'react'; +import { useRef } from 'react'; +import type { GridStateSnapshot, VirtuosoGridHandle } from 'react-virtuoso'; +import { VirtuosoGrid } from 'react-virtuoso'; import { useMergedRef } from '@mantine/hooks'; import { VirtuosoUtil } from '@/lib/virtuoso/Virtuoso.util.tsx'; diff --git a/src/lib/virtuoso/Component/VirtuosoPersisted.tsx b/src/lib/virtuoso/Component/VirtuosoPersisted.tsx index 9119bca1..b69cfc17 100644 --- a/src/lib/virtuoso/Component/VirtuosoPersisted.tsx +++ b/src/lib/virtuoso/Component/VirtuosoPersisted.tsx @@ -6,8 +6,10 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { ComponentProps, useRef } from 'react'; -import { StateSnapshot, Virtuoso, VirtuosoHandle } from 'react-virtuoso'; +import type { ComponentProps } from 'react'; +import { useRef } from 'react'; +import type { StateSnapshot, VirtuosoHandle } from 'react-virtuoso'; +import { Virtuoso } from 'react-virtuoso'; import { useMergedRef } from '@mantine/hooks'; import { VirtuosoUtil } from '@/lib/virtuoso/Virtuoso.util.tsx'; diff --git a/src/lib/zustand/Zustand.types.ts b/src/lib/zustand/Zustand.types.ts index 6592b6c2..b6d63ef6 100644 --- a/src/lib/zustand/Zustand.types.ts +++ b/src/lib/zustand/Zustand.types.ts @@ -6,7 +6,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { StateCreator as ZustandStateCreator } from 'zustand'; +import type { StateCreator as ZustandStateCreator } from 'zustand'; export type StateCreator = ZustandStateCreator; diff --git a/tools/scripts/dayjs/generateDayJsLocales.ts b/tools/scripts/dayjs/generateDayJsLocales.ts index 50b3958e..7f12ee29 100644 --- a/tools/scripts/dayjs/generateDayJsLocales.ts +++ b/tools/scripts/dayjs/generateDayJsLocales.ts @@ -20,7 +20,7 @@ const dayjsLocales = dayjsLocaleFileNames const outputFileContent = fs.readFileSync(outputFilePath, 'utf-8'); -const updatedFileContent = outputFileContent.replace( +const updatedFileContent = outputFileContent.replaceAll( /(export const DAYJS_LOCALES = \[)[\s\S]*?(])/g, `$1'${dayjsLocales.join("', '")}'$2`, ); diff --git a/tools/scripts/dayjs/generateDayJsLocalesImport.ts b/tools/scripts/dayjs/generateDayJsLocalesImport.ts index fcb0be53..c5a54c1c 100644 --- a/tools/scripts/dayjs/generateDayJsLocalesImport.ts +++ b/tools/scripts/dayjs/generateDayJsLocalesImport.ts @@ -23,7 +23,7 @@ const dayjsLocaleToFileName = dayjsLocaleFileNames const outputFileContent = fs.readFileSync(outputFilePath, 'utf-8'); -const updatedFileContent = outputFileContent.replace( +const updatedFileContent = outputFileContent.replaceAll( /(const localesToImport: Record<\(typeof DAYJS_LOCALES\)\[number], \(\) => Promise> = \{)[\s\S]*?(})/g, `$1${dayjsLocaleToFileName.map(([locale, fileName]) => `'${locale}': () => import('dayjs/locale/${fileName}')`).join(',')}$2`, ); diff --git a/tools/scripts/manga/generateMangaTypeTags.ts b/tools/scripts/manga/generateMangaTypeTags.ts index f6303485..db8b23b2 100644 --- a/tools/scripts/manga/generateMangaTypeTags.ts +++ b/tools/scripts/manga/generateMangaTypeTags.ts @@ -72,7 +72,7 @@ const outputContent = readFileSync(outputFilePath, 'utf-8'); const mangaTypes = Object.keys(MANGA_TYPE_TO_MSG_IDS); const entries = mangaTypes.map((type) => { - const tagList = translationsByMangaType[type].map((tag) => `'${tag.replace(/'/g, "\\'")}'`).join(','); + const tagList = translationsByMangaType[type].map((tag) => `'${tag.replaceAll("'", "\\'")}'`).join(','); return ` [MangaType.${type}]: [\n${tagList},\n ]`; }); diff --git a/tools/scripts/release/CommitChangelog.utils.ts b/tools/scripts/release/CommitChangelog.utils.ts index 2c6151bd..ba14a747 100644 --- a/tools/scripts/release/CommitChangelog.utils.ts +++ b/tools/scripts/release/CommitChangelog.utils.ts @@ -165,7 +165,7 @@ const createChangelogCommitLine = (commit: Commit): string => { return `${revision} ${commit.title} (${authorCredit})`; } - const title = commit.title.replace(/(.*) \(#[0-9]+\)$/g, '$1'); // remove the possible pr number from the title (e.g. "my commit title (#420)" => "my commit title") + const title = commit.title.replaceAll(/(.*) \(#[0-9]+\)$/g, '$1'); // remove the possible pr number from the title (e.g. "my commit title (#420)" => "my commit title") const prId = commit.pullRequest.number; const prUrl = commit.pullRequest.url; const prLink = `[#${prId}](${prUrl})`; @@ -179,11 +179,9 @@ const createChangelogCommitLine = (commit: Commit): string => { const getContributors = (commits: Commit[]): string[] => [ ...new Set( - commits - .map((commit) => - commit.authors.map((author) => author.user?.login).filter((author): author is string => !!author), - ) - .flat(), + commits.flatMap((commit) => + commit.authors.map((author) => author.user?.login).filter((author): author is string => !!author), + ), ), ]; diff --git a/tools/scripts/release/TranslationChangelog.utils.ts b/tools/scripts/release/TranslationChangelog.utils.ts index 95cd8647..4724b9ec 100644 --- a/tools/scripts/release/TranslationChangelog.utils.ts +++ b/tools/scripts/release/TranslationChangelog.utils.ts @@ -10,7 +10,7 @@ import path from 'path'; import fs from 'fs'; import readline from 'readline'; import { ControlledPromise } from '@/lib/ControlledPromise.ts'; -import { +import type { ActionByTranslationUrlByUserUrl, ContributionsByLanguage, LanguageNameByTranslationUrl, diff --git a/tools/scripts/updateDependencies.ts b/tools/scripts/updateDependencies.ts index 4dad9224..99e153ab 100644 --- a/tools/scripts/updateDependencies.ts +++ b/tools/scripts/updateDependencies.ts @@ -6,7 +6,8 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { ExecSyncOptions, execSync } from 'node:child_process'; +import type { ExecSyncOptions } from 'node:child_process'; +import { execSync } from 'node:child_process'; import { writeFileSync } from 'node:fs'; import packageJson from '../../package.json'; @@ -94,9 +95,9 @@ const getOutdatedDependencies = (): OutdatedDependency[] => { .toSorted((a, b) => a.packageType.localeCompare(b.packageType)); }; -const updateDependencies = () => { - const log = (...args: Parameters) => console.log('updateDependencies:', ...args); +const log = (...args: Parameters) => console.log('updateDependencies:', ...args); +const updateDependencies = () => { log('checking for outdated dependencies...'); const outdatedDependencies = getOutdatedDependencies(); diff --git a/tools/scripts/weblate/Weblate.utils.ts b/tools/scripts/weblate/Weblate.utils.ts index 6940ba90..83e53005 100644 --- a/tools/scripts/weblate/Weblate.utils.ts +++ b/tools/scripts/weblate/Weblate.utils.ts @@ -6,7 +6,7 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -import { +import type { WeblateChangePayload, WeblateChangeResult, WeblateLanguagePayload, @@ -52,7 +52,7 @@ export const getUsername = async (url: string): Promise => { export const getLanguageName = async (url: string): Promise => { const languagePayload = await fetchData(url); - return languagePayload.language.name.replace(/\(([a-zA-Z]+) Han script\)/g, '($1)'); + return languagePayload.language.name.replaceAll(/\(([a-zA-Z]+) Han script\)/g, '($1)'); }; export const fetchWeblateLanguageStats = async () => @@ -68,7 +68,7 @@ export const validateWeblateDates = (afterDate: string, beforeDate: string) => { } }; -export const normalizeCode = (code: string): string => code.replace(/[-_]/g, ''); +export const normalizeCode = (code: string): string => code.replaceAll(/[-_]/g, ''); export const getWeblateLanguageStatsFor = ( code: string, diff --git a/tools/scripts/weblate/generatei18nResources.ts b/tools/scripts/weblate/generatei18nResources.ts index f560986e..e4a1b04a 100644 --- a/tools/scripts/weblate/generatei18nResources.ts +++ b/tools/scripts/weblate/generatei18nResources.ts @@ -14,7 +14,7 @@ import { getWeblateLanguageStatsFor, meetsTranslatedPercentThreshold as meetsTranslatedPercentThresholdBase, } from './Weblate.utils.ts'; -import { WeblateLanguageStatistic } from './Weblate.types.ts'; +import type { WeblateLanguageStatistic } from './Weblate.types.ts'; import { TRANSLATED_PERCENT_THRESHOLD } from './Weblate.constants.ts'; const I18N_INDEX_PATH = 'src/i18n/index.ts'; @@ -50,7 +50,7 @@ const formatLocalesArray = (locales: string[]): string => locales.map((locale) = const updateI18nIndex = (locales: string[]): void => { const content = fs.readFileSync(i18nIndexFilePath, 'utf-8'); const localesArrayStr = formatLocalesArray(locales); - const updatedContent = content.replace( + const updatedContent = content.replaceAll( /(export const i18nResources = \[)[\s\S]*?(] as const)/g, `$1${localesArrayStr}$2`, ); @@ -60,7 +60,7 @@ const updateI18nIndex = (locales: string[]): void => { const updateLinguiConfig = (locales: string[]): void => { const content = fs.readFileSync(linguiConfigFilePath, 'utf-8'); const localesArrayStr = formatLocalesArray(locales); - const updatedContent = content.replace(/(locales: \[)[\s\S]*?(],)/g, `$1${localesArrayStr}$2`); + const updatedContent = content.replaceAll(/(locales: \[)[\s\S]*?(],)/g, `$1${localesArrayStr}$2`); fs.writeFileSync(linguiConfigFilePath, updatedContent); }; diff --git a/yarn.lock b/yarn.lock index d9bfb31f..d435a389 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5625,11 +5625,21 @@ eslint-plugin-lingui@0.11.0: "@typescript-eslint/utils" "^8.0.0" micromatch "^4.0.0" +eslint-plugin-no-only-tests@3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-no-only-tests/-/eslint-plugin-no-only-tests-3.3.0.tgz#d9d42ccd4b5d099b4872fb5046cf95441188cfb5" + integrity sha512-brcKcxGnISN2CcVhXJ/kEQlNa0MEfGRtwKtWA16SkqXHKitaKIMrfemJKLKX1YqDU5C/5JY3PvZXd5jEW04e0Q== + eslint-plugin-no-relative-import-paths@1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/eslint-plugin-no-relative-import-paths/-/eslint-plugin-no-relative-import-paths-1.6.1.tgz#7d1e8f34694016d6d390c28063bedfa7203e7771" integrity sha512-YZNeOnsOrJcwhFw0X29MXjIzu2P/f5X2BZDPWw1R3VUYBRFxNIh77lyoL/XrMU9ewZNQPcEvAgL/cBOT1P330A== +eslint-plugin-unused-imports@4.4.1: + version "4.4.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-4.4.1.tgz#a831f0a2937d7631eba30cb87091ab7d3a5da0e1" + integrity sha512-oZGYUz1X3sRMGUB+0cZyK2VcvRX5lm/vB56PgNNcU+7ficUCKm66oZWKUubXWnOuPjQ8PvmXtCViXBMONPe7tQ== + eslint-scope@^8.4.0: version "8.4.0" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.4.0.tgz#88e646a207fad61436ffa39eb505147200655c82"