Configure auto-updater, Redux toolkit setup, update dependencies#426
Conversation
WalkthroughThis update introduces a major refactor and feature expansion across both backend and frontend codebases. The backend removes the multi-image upload endpoint and related tests, while the frontend undergoes a comprehensive overhaul: Redux Toolkit is integrated for state management, onboarding and update flows are added, and UI components are extensively refactored for consistency and improved theming. Tailwind CSS configuration is migrated from file-based to inline, and numerous dependencies are updated or replaced. The Tauri updater functionality is integrated for desktop updates. Changes
Sequence Diagram(s)Onboarding and Update FlowsequenceDiagram
participant User
participant App
participant ReduxStore
participant FolderService
participant Updater (Tauri plugin)
User->>App: Launches app
App->>ReduxStore: Reads onboarding state (currentStepIndex, currentStepName)
App->>OnboardingStep: Renders step based on state
alt Update step
OnboardingStep->>Updater: checkForUpdates()
Updater-->>OnboardingStep: updateAvailable?
alt Update available
OnboardingStep->>User: Show UpdateDialog
User->>OnboardingStep: Click "Download"
OnboardingStep->>Updater: downloadAndInstall()
Updater-->>OnboardingStep: Download progress/events
OnboardingStep->>ReduxStore: markCompleted(stepIndex)
else No update
OnboardingStep->>ReduxStore: markCompleted(stepIndex)
end
else Folder setup step
OnboardingStep->>FolderService: getSavedFolderPaths()
FolderService-->>OnboardingStep: folderPaths
alt No folder paths
OnboardingStep->>User: Show SetupScreen
User->>OnboardingStep: Set folder paths
OnboardingStep->>FolderService: saveFolderPaths()
OnboardingStep->>ReduxStore: markCompleted(stepIndex)
else Folder paths exist
OnboardingStep->>ReduxStore: markCompleted(stepIndex)
end
end
Global Loader IntegrationsequenceDiagram
participant App
participant ReduxStore
participant GlobalLoader
participant User
App->>ReduxStore: useSelector(loader)
App->>GlobalLoader: Pass loading, message props
alt loading=true
GlobalLoader->>User: Show overlay with message
else
GlobalLoader->>User: Render nothing
end
Poem
✨ Finishing Touches
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Actionable comments posted: 9
♻️ Duplicate comments (1)
frontend/src/routes/AppRoutes.tsx (1)
2-2: Verify React Router import consistency.The import source changed from
'react-router-dom'to'react-router'. This should be consistent with other files in the codebase.
🧹 Nitpick comments (16)
backend/requirements.txt (1)
67-67: Verify async test dependencies and pin pytest-asyncio version.You’ve removed
anyio==4.3.0and addedpytest-asyncio>=1.0.0—ensure that existing asynchronous tests still pass under the new setup. To guard against unintended breakages from future minor/patch releases, consider pinning to a known good version:- pytest-asyncio>=1.0.0 + pytest-asyncio==1.0.0frontend/src/utils/serverUtils.ts (1)
3-3: Import path standardization with minor suggestion.The change to absolute import path and case standardization is good. However, consider removing the
.tsextension from the import for consistency with other imports in the codebase.-import { BACKEND_URL } from '@/config/Backend.ts'; +import { BACKEND_URL } from '@/config/Backend';frontend/src-tauri/tauri.conf.json (1)
27-29: Consider proper code signing for production releases.The current macOS signing identity uses ad-hoc signing (
"-"), which is suitable for development but may limit distribution options for production releases. Consider obtaining a proper Developer ID certificate for App Store or notarized distribution.frontend/src/components/Loader/GlobalLoader.tsx (2)
16-18: Consider returning null instead of empty div.When
loadingis false, returningnullis more idiomatic React than an empty<div>and avoids creating unnecessary DOM nodes.- ) : ( - <div></div> - ); + ) : null;
10-15: Consider adding accessibility improvements.The overlay implementation looks good, but consider adding accessibility features for better user experience:
role="dialog"oraria-live="polite"for screen readers- Focus management to prevent interaction with background content
- Escape key handling if appropriate
- <div className="fixed inset-0 z-50 flex items-center justify-center bg-black/50 backdrop-blur-sm"> + <div + className="fixed inset-0 z-50 flex items-center justify-center bg-black/50 backdrop-blur-sm" + role="dialog" + aria-live="polite" + aria-label="Loading" + >frontend/src/components/OnboardingSteps/OnboardingStep.tsx (2)
14-16: Remove console.log statement for production code.Debug console statements should be removed from production code to avoid cluttering the console and potential performance impact.
- console.log( - `Rendering OnboardingStep: stepIndex=${stepIndex}, stepName=${stepName}`, - );
22-24: Consider a more explicit default case.While returning an empty
<div>works, consider returningnullor adding a warning for unexpected step names to aid debugging.default: - return <div></div>; + console.warn(`Unknown step name: ${stepName}`); + return null;frontend/src/features/onboardingSlice.ts (1)
34-43: Handle edge case in previousStep reducer.The
previousStepreducer should handle the case when no steps are completed more explicitly.Consider this improvement for clarity:
previousStep(state) { //Mark the last completed step as incomplete const lastCompletedIndex = state.stepStatus.lastIndexOf(true); if (lastCompletedIndex !== -1) { state.stepStatus[lastCompletedIndex] = false; + } else { + // No steps are completed, already at the beginning + return; } // Update current step index and name state.currentStepIndex = state.stepStatus.findIndex((status) => !status); state.currentStepName = STEP_NAMES[state.currentStepIndex] || ''; },frontend/src/components/OnboardingSteps/UpdateStep.tsx (1)
51-51: Consider returning a proper React element instead of null.Returning
nullis valid but consider returning an empty fragment<></>or a placeholder component for better consistency and potential future extensibility.- } else return null; + } else return <></>;frontend/src/components/Updater/UpdateDialog.tsx (1)
47-49: Consider extracting formatBytes to a utility file.The
formatBytesfunction could be useful in other components. Consider moving it to a shared utility file for reusability.// utils/formatBytes.ts export const formatBytes = (bytes: number): number => { return Math.round((bytes / 1024 / 1024) * 100) / 100; };frontend/src/components/ui/alert.tsx (1)
12-13: Consider simplifying the destructive variant selector.The selector
*:data-[slot=alert-description]:text-destructive/90is quite complex and could be brittle. Consider using a more straightforward approach or documenting this pattern if it's intentional.frontend/src/contexts/ThemeContext.tsx (3)
16-19: Clarify the no-op function in initial state.The
setThemefunction in the initial state should be a clearer no-op function for better readability.const initialState: ThemeProviderState = { theme: 'system', - setTheme: () => null, + setTheme: () => {}, };
23-28: Remove unnecessary spread operator.The spread operator
...propsis unnecessary since all expected props are already destructured.export function ThemeProvider({ children, defaultTheme = 'system', storageKey = 'vite-ui-theme', - ...props }: ThemeProviderProps) {
59-63: Remove unnecessary props spreading on Provider.The Provider component only needs the
valueprop. Spreading additional props is unnecessary.return ( - <ThemeProviderContext.Provider {...props} value={value}> + <ThemeProviderContext.Provider value={value}> {children} </ThemeProviderContext.Provider> );frontend/src/pages/SettingsPage/Settings.tsx (2)
81-92: Simplify the async function pattern.The current pattern of defining and then calling an async function can be simplified using an async arrow function or extracting the logic.
const onCheckUpdatesClick = () => { - let checkUpdates = async () => { + (async () => { dispatch(showLoader('Checking for updates...')); const hasUpdate = await checkForUpdates(); if (hasUpdate) { setUpdateDialogOpen(true); } dispatch(hideLoader()); - }; - checkUpdates(); + })(); };
260-260: Remove redundant boolean expression.The expression
false || !isDownloadingalways evaluates to!isDownloadingsincefalse ||is redundant.- showCloseButton={false || !isDownloading} + showCloseButton={!isDownloading}
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (2)
frontend/package-lock.jsonis excluded by!**/package-lock.jsonfrontend/src-tauri/Cargo.lockis excluded by!**/*.lock
📒 Files selected for processing (92)
.github/workflows/app-build.yml(1 hunks)backend/app/routes/images.py(0 hunks)backend/requirements.txt(1 hunks)backend/tests/test_images.py(0 hunks)frontend/api/apiEndpoints.ts(1 hunks)frontend/components.json(1 hunks)frontend/jest.setup.ts(1 hunks)frontend/package.json(4 hunks)frontend/postcss.config.js(0 hunks)frontend/src-tauri/Cargo.toml(3 hunks)frontend/src-tauri/capabilities/desktop.json(1 hunks)frontend/src-tauri/src/main.rs(1 hunks)frontend/src-tauri/tauri.conf.json(2 hunks)frontend/src-tauri/tests/mod_test.rs(1 hunks)frontend/src/App.css(1 hunks)frontend/src/App.tsx(1 hunks)frontend/src/app/store.ts(1 hunks)frontend/src/components/AITagging/AIgallery.tsx(2 hunks)frontend/src/components/AITagging/FilterControls.tsx(5 hunks)frontend/src/components/AITagging/WebcamCapture.tsx(2 hunks)frontend/src/components/Album/AlbumCard.tsx(3 hunks)frontend/src/components/Album/Albumpick.tsx(1 hunks)frontend/src/components/Album/Albumview.tsx(2 hunks)frontend/src/components/Album/ImageManagementDialog.tsx(1 hunks)frontend/src/components/Album/ImageSelection.tsx(2 hunks)frontend/src/components/FolderPicker/AITaggingFolderPicker.tsx(2 hunks)frontend/src/components/FolderPicker/DeleteSelectedImagePage.tsx(5 hunks)frontend/src/components/FolderPicker/FolderPicker.tsx(2 hunks)frontend/src/components/Loader/GlobalLoader.tsx(1 hunks)frontend/src/components/LoadingScreen/LoadingScreen.tsx(1 hunks)frontend/src/components/Media/MediaCard.tsx(5 hunks)frontend/src/components/Media/MediaGallery.tsx(2 hunks)frontend/src/components/Media/MediaView.tsx(12 hunks)frontend/src/components/Media/Mediagrid.tsx(2 hunks)frontend/src/components/Media/SortningControls.tsx(1 hunks)frontend/src/components/Memories/Memories.tsx(8 hunks)frontend/src/components/Navigation/Navbar/Navbar.tsx(5 hunks)frontend/src/components/Navigation/Sidebar/AvatarCropper.tsx(3 hunks)frontend/src/components/Navigation/Sidebar/CustomizationPopup.tsx(6 hunks)frontend/src/components/Navigation/Sidebar/ImageCompressor.tsx(2 hunks)frontend/src/components/Navigation/Sidebar/Sidebar.tsx(13 hunks)frontend/src/components/OnboardingSteps/FolderSetupStep.tsx(1 hunks)frontend/src/components/OnboardingSteps/OnboardingStep.tsx(1 hunks)frontend/src/components/OnboardingSteps/UpdateStep.tsx(1 hunks)frontend/src/components/SecureFolder/SecureFolder.tsx(6 hunks)frontend/src/components/SetupScreen.tsx(1 hunks)frontend/src/components/ThemeToggle.tsx(1 hunks)frontend/src/components/Updater/UpdateDialog.tsx(1 hunks)frontend/src/components/VideoPlayer/NetflixStylePlayer.tsx(2 hunks)frontend/src/components/ui/404/404.tsx(1 hunks)frontend/src/components/ui/ErrorPage/ErrorPage.tsx(2 hunks)frontend/src/components/ui/PaginationControls.tsx(1 hunks)frontend/src/components/ui/ProgressiveLoader.tsx(4 hunks)frontend/src/components/ui/Slider.tsx(1 hunks)frontend/src/components/ui/alert.tsx(1 hunks)frontend/src/components/ui/badge.tsx(1 hunks)frontend/src/components/ui/button.tsx(2 hunks)frontend/src/components/ui/card.tsx(1 hunks)frontend/src/components/ui/dialog copy.tsx(0 hunks)frontend/src/components/ui/dialog.tsx(1 hunks)frontend/src/components/ui/dropdown-menu.tsx(1 hunks)frontend/src/components/ui/input.tsx(1 hunks)frontend/src/components/ui/pagination.tsx(1 hunks)frontend/src/components/ui/progress.tsx(1 hunks)frontend/src/components/ui/scroll-area.tsx(1 hunks)frontend/src/components/ui/separator.tsx(1 hunks)frontend/src/components/ui/textarea.tsx(1 hunks)frontend/src/constants/routes.ts(1 hunks)frontend/src/constants/steps.ts(1 hunks)frontend/src/contexts/ThemeContext.tsx(1 hunks)frontend/src/controllers/InitialPageController.tsx(0 hunks)frontend/src/features/loaderSlice.ts(1 hunks)frontend/src/features/onboardingSlice.ts(1 hunks)frontend/src/hooks/folderService.ts(1 hunks)frontend/src/hooks/useFolderPath.ts(0 hunks)frontend/src/hooks/useUpdater.ts(1 hunks)frontend/src/layout/layout.tsx(2 hunks)frontend/src/lib/utils.ts(1 hunks)frontend/src/main.tsx(2 hunks)frontend/src/pages/InitialSteps/InitialSteps.tsx(1 hunks)frontend/src/pages/SettingsPage/Settings.tsx(7 hunks)frontend/src/pages/Setupscreen/Setup.tsx(0 hunks)frontend/src/pages/__tests__/allPages.test.tsx(1 hunks)frontend/src/routes/AppRoutes.tsx(1 hunks)frontend/src/routes/LayoutRoutes/LayoutRoutes.tsx(0 hunks)frontend/src/types/loading.ts(1 hunks)frontend/src/utils/isProd.ts(1 hunks)frontend/src/utils/serverUtils.ts(1 hunks)frontend/tailwind.config.cjs(0 hunks)frontend/tailwind.config.js(0 hunks)frontend/tsconfig.node.json(1 hunks)frontend/vite.config.ts(1 hunks)
💤 Files with no reviewable changes (10)
- frontend/postcss.config.js
- frontend/src/hooks/useFolderPath.ts
- backend/tests/test_images.py
- frontend/src/pages/Setupscreen/Setup.tsx
- backend/app/routes/images.py
- frontend/src/routes/LayoutRoutes/LayoutRoutes.tsx
- frontend/src/controllers/InitialPageController.tsx
- frontend/tailwind.config.js
- frontend/tailwind.config.cjs
- frontend/src/components/ui/dialog copy.tsx
🧰 Additional context used
🪛 Biome (1.9.4)
frontend/src/hooks/useUpdater.ts
[error] 72-72: Other switch clauses can erroneously access this declaration.
Wrap the declaration in a block to restrict its access to the switch clause.
The declaration is defined in this switch clause:
Unsafe fix: Wrap the declaration in a block.
(lint/correctness/noSwitchDeclarations)
⏰ Context from checks skipped due to timeout of 90000ms (4)
- GitHub Check: tauri-build-check (windows-latest)
- GitHub Check: tauri-build-check (macos-latest, --target aarch64-apple-darwin)
- GitHub Check: tauri-build-check (ubuntu-22.04)
- GitHub Check: Tauri Tests
🔇 Additional comments (121)
frontend/src/lib/utils.ts (1)
1-1: LGTM: Import ordering improvement.The reordering of imports to place
clsxbeforetype ClassValuefollows TypeScript best practices and improves code consistency.frontend/api/apiEndpoints.ts (1)
1-1: Verify directory structure and consistent import path usage.The import path was changed from
@/Config/Backendto@/config/Backend. Please ensure the directory structure matches this change and all other files importing from this path are updated consistently.#!/bin/bash # Description: Verify the config directory exists and check for consistent usage across the codebase. # Check if the config directory exists echo "Checking directory structure:" fd -t d "config" frontend/src/ fd -t d "Config" frontend/src/ # Check for any remaining references to the old path echo -e "\nChecking for inconsistent import paths:" rg "@/Config/Backend" frontend/ rg "@/config/Backend" frontend/ # Verify the Backend file exists echo -e "\nChecking if Backend file exists:" fd "Backend" frontend/src/config/frontend/src/components/Album/Albumpick.tsx (1)
2-2: LGTM: Import path standardization.The change from relative import to absolute alias (
@/components/ui/button) improves code maintainability and aligns with the project's import standardization effort.frontend/vite.config.ts (2)
5-5: LGTM: Modern Tailwind CSS integration.The addition of the
@tailwindcss/viteplugin represents a modern approach to Tailwind integration that should improve build performance.
9-9: Verify Tailwind CSS configuration migration.With the switch to Vite-native Tailwind integration, please ensure that all previous Tailwind configurations (themes, plugins, custom utilities) have been properly migrated and that existing styles continue to work as expected.
#!/bin/bash # Description: Verify Tailwind configuration and usage across the frontend. # Check for any remaining Tailwind config files echo "Checking for remaining Tailwind config files:" fd "tailwind.config" frontend/ fd "postcss.config" frontend/ # Check for Tailwind directives and custom CSS echo -e "\nChecking CSS files for Tailwind usage:" rg "@tailwind" frontend/src/ rg "@apply" frontend/src/ rg "theme(" frontend/src/ # Verify package.json includes the new Tailwind Vite plugin echo -e "\nChecking package.json for Tailwind Vite plugin:" rg "@tailwindcss/vite" frontend/package.jsonfrontend/src/components/Media/SortningControls.tsx (1)
61-61: Approve cosmetic class reorder. The Tailwind classes onDropdownMenuContenthave been reordered without affecting functionality and align with the project’s styling consistency.frontend/src-tauri/tests/mod_test.rs (1)
9-15: Ensure crate name consistency across tests. The importuse picto_py::services::{…}now matches thepackage.nameinCargo.toml, fixing the previous mismatch.frontend/src-tauri/capabilities/desktop.json (1)
1-6: Approve desktop capability configuration. The JSON schema is valid and properly defines thedesktop-capabilityidentifier, supported platforms, window context, and required permissions.frontend/src/components/ui/ErrorPage/ErrorPage.tsx (2)
2-2: Icon import updated correctly. SwappingFaRedoAltforRotateCwfromlucide-reactaligns with the project's icon library migration.
39-39: Icon usage in retry button is correct. The<RotateCw>component and its styling (mr-2 text-xl) match the surrounding UI patterns.frontend/src/components/LoadingScreen/LoadingScreen.tsx (1)
9-9: Cosmetic class reorder approved. The Tailwind class order on the<svg>has been adjusted for consistency without affecting behavior.frontend/tsconfig.node.json (1)
7-11: Support for absolute imports and default imports enabled
The new compiler options correctly enable@/*path aliasing and default import handling for Node-based tooling.frontend/src/components/ui/PaginationControls.tsx (1)
74-74: Approve CSS class reorder for consistency
Reorderinghover:bg-primary/90beforecursor-pointerdoes not affect functionality and aligns with styling conventions across the UI.frontend/src/components/FolderPicker/FolderPicker.tsx (2)
2-2: Alias import is correctly applied
Switching from a relative import to@/components/ui/buttonaligns with the new path mapping and improves module resolution clarity.
35-35: Class order update looks good
Movinghover:bg-accentup front has no side effects and keeps styling uniform with other components.frontend/src/types/loading.ts (1)
1-4: New loader props interface is straightforward
GlobalLoaderPropscleanly defines requiredloadingandmessagefields for the global loader component.frontend/src/components/SetupScreen.tsx (1)
14-14: Styling adjustment confirmed
The class list reorder on the wrapper div maintains the same layout and matches the project’s style conventions.frontend/src-tauri/src/main.rs (1)
16-16: LGTM: Updater plugin integration is correctly implemented.The Tauri updater plugin is properly registered using the builder pattern, consistent with other plugins in the application.
frontend/src/components/Album/ImageSelection.tsx (2)
100-100: CSS class reordering - no functional impact.Moving
rounded-fullto the end of the class list maintains the same styling and functionality.
112-112: CSS class reordering - no functional impact.Reordering
bg-opacity-50andabsolutemaintains the same styling and behavior.frontend/src/components/VideoPlayer/NetflixStylePlayer.tsx (2)
142-142: CSS class reordering - no functional impact.Moving
right-0beforebottom-16maintains the same positioning and styling.
157-157: CSS class reordering - no functional impact.Moving
right-0beforebottom-4maintains the same positioning and styling.frontend/jest.setup.ts (1)
2-10: LGTM: TextEncoder/TextDecoder polyfills properly implemented.The conditional polyfills ensure these Web APIs are available in Jest testing environments while avoiding conflicts with existing globals. The type casting for TextDecoder is appropriate.
frontend/src/components/Album/Albumview.tsx (1)
89-89: CSS class reordering - no functional impact.Moving
pt-1beforepb-4maintains the same padding and styling.frontend/src/utils/isProd.ts (1)
3-3: Good change to make environment detection dynamic.The change from always returning
trueto checkingimport.meta.env?.PRODmakes this utility function actually environment-aware, which aligns with the broader frontend modernization efforts.However, verify that all code depending on this function works correctly with the new dynamic behavior:
#!/bin/bash # Description: Find all usages of isProd function to verify impact of behavioral change # Expected: All usages should handle boolean return value correctly # Search for isProd function usage rg -A 3 -B 1 "isProd" # Look for specific import patterns ast-grep --pattern "import { isProd } from $_"frontend/src/components/ui/404/404.tsx (1)
21-21: CSS class reordering - no functional impact.This change only reorders CSS classes without affecting functionality, consistent with the broader styling standardization across the codebase.
frontend/src/constants/steps.ts (1)
1-4: Well-structured constants for onboarding steps.Clean implementation that follows naming conventions and provides clear identifiers for the onboarding flow components.
frontend/src/components/Navigation/Sidebar/ImageCompressor.tsx (1)
260-260: CSS class reordering - no functional impact.These changes only reorder CSS classes for consistency without affecting the component's functionality or behavior.
Also applies to: 344-344
frontend/src/components/Media/Mediagrid.tsx (1)
11-11: CSS class reordering - no functional impact.These changes only adjust the order of CSS classes for styling consistency without modifying the component's logic or behavior.
Also applies to: 57-57
.github/workflows/app-build.yml (1)
197-197: Verify updater configuration alignment.The
includeUpdaterJson: trueparameter enables Tauri updater functionality. Ensure this aligns with the updater configuration intauri.conf.jsonand that proper update endpoints are configured.Run the following script to verify updater configuration:
#!/bin/bash # Description: Verify Tauri updater configuration exists and is properly set up # Check if tauri.conf.json has updater configuration fd tauri.conf.json --exec cat {} | jq '.plugins.updater // empty' # Check for updater-related code in the frontend rg -A 3 -B 3 "updater|update.*plugin" frontend/src/frontend/src/layout/layout.tsx (2)
4-4: LGTM! Proper React Router nested routing implementation.The refactoring from children prop to
<Outlet />is the correct pattern for React Router v6 nested routing. This change aligns with modern React Router best practices.Also applies to: 15-17
3-3: ```shell
#!/bin/bashInspect nested routing configuration in AppRoutes.tsx
rg -n "<Routes" -A 20 -B 0 frontend/src/routes/AppRoutes.tsx
</details> <details> <summary>frontend/src/components/Media/MediaCard.tsx (1)</summary> `42-42`: **LGTM! CSS class reordering for consistency.** The Tailwind CSS class reorderings improve code consistency and maintainability without affecting functionality. This aligns with the broader styling standardization effort across the frontend. Also applies to: 50-50, 73-73, 86-86, 104-104, 131-131 </details> <details> <summary>frontend/src/components/Memories/Memories.tsx (1)</summary> `106-106`: **LGTM! Consistent CSS class organization.** The systematic reordering of Tailwind CSS classes across multiple elements improves code consistency and readability. These changes maintain all functionality while enhancing maintainability. Also applies to: 114-115, 118-118, 121-121, 132-132, 144-144, 159-159, 177-177, 185-186, 197-197, 219-219, 231-231 </details> <details> <summary>frontend/src/components/AITagging/AIgallery.tsx (1)</summary> `108-108`: **LGTM! CSS class standardization.** The Tailwind CSS class reorderings in both the wrapper div and Button component maintain functionality while improving consistency with the broader frontend styling standardization effort. Also applies to: 166-166 </details> <details> <summary>frontend/src/components/AITagging/WebcamCapture.tsx (2)</summary> `2-2`: **LGTM: Import path aliasing improves maintainability.** The migration from relative to absolute import paths using aliases enhances code organization and makes imports more consistent across the project. Also applies to: 5-5 --- `303-303`: **LGTM: CSS class reordering for consistency.** The CSS class reordering doesn't affect functionality and aligns with the project-wide styling consistency improvements. </details> <details> <summary>frontend/src/pages/InitialSteps/InitialSteps.tsx (1)</summary> `1-21`: **LGTM: Well-structured onboarding entry point component.** The component properly integrates Redux state management with React Router navigation. The conditional redirect logic in the useEffect is correct, and the dependency array is appropriate since `navigate` from `useNavigate` is stable. </details> <details> <summary>frontend/components.json (3)</summary> `3-3`: **LGTM: UI configuration updates support project modernization.** The style change to "new-york", cleared Tailwind config path, and base color update to "neutral" align with the broader frontend refactoring efforts. Also applies to: 7-7, 9-9 --- `15-19`: **LGTM: New path aliases improve import consistency.** The additional aliases for "ui", "lib", and "hooks" support the absolute import path migration seen throughout the codebase. --- `20-20`: **LGTM: Lucide icon library integration.** Setting "lucide" as the icon library aligns with the Lucide icons being used in the components, ensuring consistency in the icon system. </details> <details> <summary>frontend/src/components/Album/ImageManagementDialog.tsx (1)</summary> `105-105`: **LGTM: CSS class reordering for styling consistency.** The CSS class reordering aligns with the project-wide effort to standardize Tailwind CSS class organization without affecting functionality. Also applies to: 109-109 </details> <details> <summary>frontend/src/components/Album/AlbumCard.tsx (1)</summary> `19-19`: **LGTM: CSS class reordering maintains styling consistency.** The Tailwind CSS class reordering follows the project-wide standardization effort and doesn't impact the component's functionality. Also applies to: 22-22, 37-37, 46-46 </details> <details> <summary>frontend/src/components/Navigation/Navbar/Navbar.tsx (2)</summary> `66-66`: **CSS class reordering and component update look good.** The CSS class reordering improves consistency without affecting functionality, and the component update from `ThemeToggle` to `ThemeSelector` aligns with the import change. Also applies to: 77-77, 96-96, 105-105, 112-112 --- `2-2`: ```shell #!/bin/bash # Description: Re-verify all references to ThemeToggle and check ThemeSelector imports without using --type flags echo "Searching for any remaining ThemeToggle references:" rg -n "ThemeToggle" -g '*.ts' -g '*.tsx' echo -e "\nSearching for ThemeSelector imports:" rg -n "import.*ThemeSelector" -g '*.ts' -g '*.tsx'frontend/src/components/AITagging/FilterControls.tsx (2)
9-9: Good improvement: relative to absolute import path.The change from relative import
../ui/buttonto absolute alias import@/components/ui/buttonimproves maintainability and consistency.
197-197: CSS class reordering for consistency looks good.The reordering of CSS classes (particularly moving
hover:bg-accentearlier) improves styling consistency without affecting functionality.Also applies to: 207-207, 273-273, 283-283
frontend/src/App.tsx (3)
4-6: Excellent: Consistent alias imports and Redux integration.The consistent use of absolute alias imports (
@/) improves maintainability. The Redux integration withuseSelectorfor global loading state is well-implemented.Also applies to: 8-9
11-11: Verify GlobalLoader component implementation.The Redux state integration for loading management looks good. Ensure the
GlobalLoadercomponent is properly implemented and handles the loading states correctly.#!/bin/bash # Description: Verify GlobalLoader component exists and check its implementation # Expected: Component should exist and properly handle loading prop echo "Checking if GlobalLoader component exists:" fd "GlobalLoader" --type f echo -e "\nChecking GlobalLoader component implementation:" cat frontend/src/components/Loader/GlobalLoader.tsxAlso applies to: 18-18
3-3: Verify router library compatibility.The import has changed from
react-router-domtoreact-router. Ensure this change is compatible with your project's routing requirements and thatBrowserRouteris available from this import.#!/bin/bash # Description: Check package.json for router dependencies and their versions # Expected: Verify react-router version and compatibility echo "Checking router package dependencies:" cat package.json | jq '.dependencies | with_entries(select(.key | contains("router")))' echo -e "\nSearching for other router imports in the codebase:" rg "from ['\"]react-router" --type tsx --type tsfrontend/src/components/Navigation/Sidebar/AvatarCropper.tsx (1)
77-77: CSS class reordering for consistency looks good.The reordering of CSS classes maintains the same styling while improving consistency across the codebase. No functional changes detected.
Also applies to: 122-122, 134-134
frontend/src/constants/routes.ts (1)
3-11: I’ll check for any lingering references to the removedINITIALroute constant:#!/bin/bash # Verify no references remain to the removed INITIAL route echo "Searching for ROUTES.LAYOUT.INITIAL usages:" rg "ROUTES\.LAYOUT\.INITIAL" -g "*.{ts,tsx}"frontend/src/components/Media/MediaGallery.tsx (1)
76-78: LGTM! CSS class reordering improves consistency.The Tailwind CSS class reorderings maintain identical styling while improving code consistency across the codebase. These changes enhance maintainability without affecting component functionality.
Also applies to: 127-127
frontend/src/features/loaderSlice.ts (1)
1-30: Well-implemented Redux slice following best practices.The loader slice implementation is clean and follows Redux Toolkit conventions effectively:
- Proper TypeScript interfaces for type safety
- Simple, focused state management for global loading indicators
- Clear action creators with appropriate payload types
- Immutable state updates handled correctly by RTK
This provides a solid foundation for centralized loading state management.
frontend/src/components/SecureFolder/SecureFolder.tsx (1)
114-114: LGTM! Consistent CSS class ordering enhances maintainability.The Tailwind CSS class reorderings maintain identical visual styling while establishing consistent formatting patterns. These changes improve code maintainability and align with the broader frontend styling standardization effort without affecting component functionality.
Also applies to: 129-129, 131-131, 139-139, 141-141, 189-189, 204-204, 206-206, 246-246, 260-260
frontend/src/components/ui/ProgressiveLoader.tsx (1)
113-113: LGTM! CSS class reordering maintains functionality with improved consistency.The Tailwind CSS class reorderings for the positioning and styling of fixed-position UI elements preserve identical functionality while following consistent formatting patterns. The progressive loading logic and error handling remain unaffected.
Also applies to: 137-137, 150-150, 162-162
frontend/src-tauri/tauri.conf.json (3)
32-32: Version increment is appropriate for initial release.The version bump from "0.0.0" to "0.0.1" is appropriate for the initial release with updater functionality.
38-43: ```shell
#!/bin/bashFollow redirects and preview the updater JSON
curl -sL "https://github.com/rahulharpal1603/PictoPy/releases/latest/download/latest.json" | head -20
--- `10-11`: ```shell #!/bin/bash # Extract context around includeUpdaterJson and verify Tauri build invocation # Show lines around includeUpdaterJson rg -n -C5 "includeUpdaterJson" .github/workflows/app-build.yml # Search for any Tauri build commands rg -n -C2 "tauri" .github/workflows/app-build.ymlfrontend/src-tauri/Cargo.toml (3)
2-4: LGTM! Package metadata improvements are well-executed.The changes follow Rust naming conventions (snake_case for package name), provide a more descriptive description, and appropriately bump the version for the initial release.
14-14: Minor formatting improvement.Good cleanup of the extra whitespace in the features array.
40-41: Conditional dependency configuration is correct.The
tauri-plugin-updaterdependency is properly configured to exclude mobile platforms (Android and iOS) where auto-updater functionality isn't applicable. This aligns with the PR's auto-updater integration objectives.frontend/src/components/FolderPicker/AITaggingFolderPicker.tsx (2)
2-2: Import path migration to aliases is well-executed.The change from relative import to absolute alias (
@/components/ui/button) improves code organization and consistency across the project.
39-39: Good defensive programming with nullish coalescing.The use of
className ?? ''prevents potential issues with undefined or null className props, and the CSS class reordering improves consistency.frontend/src/components/Loader/GlobalLoader.tsx (1)
1-19: Well-structured GlobalLoader component.The component follows React best practices with clean conditional rendering, proper use of Tailwind classes, and good separation of concerns with the imported types interface.
frontend/src/main.tsx (2)
8-9: Redux integration imports are correct.The imports for the Redux store and Provider are properly structured and follow the new centralized state management pattern.
50-55: Clean Redux Provider integration.The Provider wrapper is correctly implemented, properly encapsulating the App component with the Redux store. This simplifies the component structure and aligns with the PR's Redux toolkit setup objectives.
frontend/src/pages/__tests__/allPages.test.tsx (4)
15-25: Good addition of matchMedia mock.The
beforeAllsetup properly mockswindow.matchMediato prevent test environment errors, which is a common issue in Jest tests.
41-49: Correct Redux Provider integration in test setup.The test wrapper properly includes the Redux Provider with the correct nesting order (Redux > Theme > QueryClient > Router), which is essential for testing components that use Redux state.
32-32: Route constant correction is accurate.The change from
ROUTES.LAYOUT.ALBUMtoROUTES.LAYOUT.ALBUMSaligns with the route constant updates mentioned in the AI summary.
11-11: To pinpoint the import source, let’s search all TS/TSX files for anyBrowserRouterimports with context:#!/bin/bash # Search for BrowserRouter import lines in TS and TSX files rg -A2 -B2 "import.*BrowserRouter" -g "*.ts" -g "*.tsx"frontend/src/app/store.ts (1)
1-15: LGTM! Clean Redux store configuration.The Redux store setup follows best practices with proper TypeScript type inference and clean reducer organization.
frontend/src/components/FolderPicker/DeleteSelectedImagePage.tsx (1)
13-18: LGTM! Import path migration aligns with UI refactoring.The change from external Radix UI imports to local UI components is consistent with the broader UI component standardization effort.
frontend/src/components/OnboardingSteps/FolderSetupStep.tsx (1)
21-26: LGTM! Proper useEffect implementation.The effect correctly manages the completion state with proper dependencies and Redux integration.
frontend/src/components/ui/progress.tsx (1)
6-27: LGTM! Well-implemented progress component.The progress calculation and Radix UI integration are correct. The transform logic properly handles progress values and includes appropriate fallbacks for undefined values.
frontend/src/components/Navigation/Sidebar/CustomizationPopup.tsx (6)
65-65: LGTM - CSS class positioning update.The class reordering maintains the same visual styling while improving consistency with the project's class ordering conventions.
73-73: LGTM - Class reordering for consistency.The reordering of Tailwind classes follows proper conventions without affecting functionality.
201-201: LGTM - Typography class reordering.The repositioning of the
uppercaseclass maintains functionality while following consistent class ordering.
237-237: LGTM - Z-index class positioning.The
z-10class repositioning maintains the same layering behavior.
326-326: LGTM - Modal styling consistency.The class reorderings in the modal overlay and container maintain the same visual appearance while following consistent ordering conventions.
Also applies to: 342-342
366-366: LGTM - Color picker styling update.The class reordering for the gradient color picker maintains functionality while improving consistency.
frontend/src/components/Navigation/Sidebar/Sidebar.tsx (4)
19-19: LGTM - Route constants import.Adding centralized route constants improves maintainability and reduces hardcoded strings.
147-147: LGTM - CSS class reorderings.The CSS class reorderings maintain the same visual styling while improving consistency across the component.
Also applies to: 158-158, 175-175, 203-203, 230-230, 248-248, 257-257, 294-294, 309-309, 343-343
124-134: Verify route path construction.The navigation items now use
ROUTES.LAYOUT.*constants with a leading slash. Ensure the route constants are defined correctly and match the expected path structure.#!/bin/bash # Description: Verify route constants definition and usage echo "Checking ROUTES constant definition:" echo "===================================" echo "ROUTES constants file:" fd routes.ts --type f | xargs cat echo -e "\nVerifying route usage in navigation:" rg "ROUTES\.LAYOUT\." --type ts --type tsx -A 2 -B 2
2-2: Let's retry the search without relying on built-in filetype filters, targeting all.tsand.tsxfiles directly:#!/bin/bash echo "Imports from 'react-router' (with context):" rg "from ['\"]react-router\b" -g '*.ts*' -A 1 || true echo echo "Imports from 'react-router-dom' (with context):" rg "from ['\"]react-router-dom\b" -g '*.ts*' -A 1 || trueThis will show every import occurrence (and a line of context) in your
.ts/.tsxfiles.frontend/src/components/ui/separator.tsx (1)
1-27: LGTM - Well-structured separator component.The component properly wraps Radix UI's separator primitive with:
- Correct TypeScript typing using
React.ComponentProps- Proper default values for
orientationanddecorative- Conditional Tailwind classes for different orientations
- Good use of the
cnutility for class merging- Helpful
data-slotattribute for testing/debuggingThe implementation follows established patterns for UI component libraries.
frontend/src/routes/AppRoutes.tsx (2)
17-29: Improved routing architecture with nested routes.The refactor from conditional rendering to nested routes is a significant improvement:
- Cleaner, more declarative routing structure
- Proper use of nested routes under the Layout component
- Index route for the initial onboarding step
- Centralized route definitions using constants
This approach is more maintainable and follows React Router best practices.
20-26: We need to inspect the actualROUTES.LAYOUTdefinitions to confirm whether they include leading slashes. Let’s locate the constants file and print theLAYOUTblock:#!/bin/bash # Locate the file defining ROUTES ROUTES_FILE=$(rg -l "export.*const *ROUTES" -n | head -n1) echo "ROUTES defined in: $ROUTES_FILE" echo "------ LAYOUT block ------" # Find the start line of LAYOUT and print 20 lines after START_LINE=$(rg -n -m1 "LAYOUT:" $ROUTES_FILE | cut -d: -f1) END_LINE=$((START_LINE + 20)) sed -n "${START_LINE},${END_LINE}p" $ROUTES_FILEfrontend/src/features/onboardingSlice.ts (1)
1-49: LGTM - Well-structured Redux slice.The onboarding slice is well-implemented with:
- Proper TypeScript interfaces
- Good separation of concerns
- Appropriate use of Redux Toolkit
- Clear state management logic
- Helpful console warnings for invalid inputs
The slice provides a solid foundation for managing onboarding flow state.
frontend/src/hooks/folderService.ts (3)
1-1: Good practice: Extract storage key as constant.Extracting the storage key as a constant improves maintainability and reduces the risk of typos.
4-23: Excellent error handling and data validation.The comprehensive error handling includes:
- JSON parsing error protection
- Data structure validation ensuring it's an array of strings
- Graceful fallback to empty array for malformed data
- Proper error logging
This significantly improves the robustness of the folder service.
26-32: Good error handling for save operation.The try-catch block properly handles potential localStorage quota exceeded errors or other storage failures with appropriate logging.
frontend/src/components/Updater/UpdateDialog.tsx (2)
1-180: Excellent comprehensive update dialog implementation.The component provides:
- Rich metadata display with version comparison
- Progress tracking with visual feedback
- Error handling with appropriate UI states
- Accessibility features with icons and descriptions
- Flexible configuration options
The implementation follows React best practices and provides a great user experience.
42-45: Add safety check for division by zero.The progress calculation should handle the edge case where
downloadProgress.totalis exactly 0 to avoid potential division by zero issues.const progressPercentage = - downloadProgress.total > 0 + downloadProgress.total > 0 ? Math.round((downloadProgress.downloaded / downloadProgress.total) * 100) : 0;The code is already correct, but consider making it more explicit:
const progressPercentage = - downloadProgress.total > 0 + downloadProgress.total && downloadProgress.total > 0 ? Math.round((downloadProgress.downloaded / downloadProgress.total) * 100) : 0;Likely an incorrect or invalid review comment.
frontend/src/components/ui/Slider.tsx (3)
14-22: Consider optimizing the useMemo dependency array.The current implementation recalculates
_valueswhenever any of the dependencies change. Consider if this is necessary, especially forminandmaxwhich are likely stable.const _values = React.useMemo( () => Array.isArray(value) ? value : Array.isArray(defaultValue) ? defaultValue : [min, max], - [value, defaultValue, min, max], + [value, defaultValue, min, max], );Actually, the current implementation is correct. The dependencies are needed to ensure the memo updates when props change.
50-56: Good implementation of dynamic multi-thumb support.The dynamic generation of thumbs based on the values array length is a solid approach that supports both single and multi-value sliders.
6-13: To ensure we don’t miss any ref usage onSlider, let’s broaden our search to all TS/TSX files without relying on file-type filters:#!/bin/bash # Search for any ref attributes on the Slider component rg -g '*.tsx' -g '*.ts' "<Slider[^>]*ref=" -n . # Search for useRef declarations explicitly typed or used with Slider rg -g '*.tsx' -g '*.ts' "useRef\(.*Slider" -n .frontend/package.json (4)
41-41: Good addition: Tauri updater plugin aligns with new functionality.The addition of
@tauri-apps/plugin-updaterproperly supports the new update functionality introduced in the UpdateStep and UpdateDialog components.
48-52: Verify React 19 compatibility with ecosystem packages.React 19 is a major version upgrade that introduces breaking changes. Ensure all React ecosystem packages are compatible, especially:
- React testing libraries
- React Router
- Redux React bindings
- Radix UI components
Check React 19 compatibility:
React 19 breaking changes and compatibility with React Router, Redux, and Radix UI
58-58: Verify Tailwind CSS v4 breaking changes.Tailwind CSS v4 introduces significant breaking changes including new configuration system, updated utilities, and modified class names.
Check Tailwind CSS v4 migration requirements:
Tailwind CSS v4 migration guide and breaking changes
94-94: ```shell
#!/bin/bash
echo "Locating Vite config files:"
rg "defineConfig" -n . || echo "No defineConfig usage found."echo
config_files=$(rg "defineConfig" -l || true)
if [[ -n "$config_files" ]]; then
echo "Found config file(s):"
echo "$config_files"
echo
echo "Inspecting 'build.target' in these files:"
rg "target" -n $config_files || echo "No 'build.target' references found."
else
echo "No Vite config files located."
fi</details> <details> <summary>frontend/src/components/ThemeToggle.tsx (1)</summary> `1-37`: **LGTM! Excellent enhancement from toggle to dropdown.** The refactor from a simple toggle to a dropdown menu with system theme support is a great UX improvement. The implementation is solid with proper accessibility, smooth animations, and clean component structure. </details> <details> <summary>frontend/src/components/ui/alert.tsx (1)</summary> `6-20`: **Review complex CSS grid configuration and custom property dependency.** The CSS grid configuration is quite complex and relies on a `--spacing` custom property that may not be defined in the CSS variables. Consider: 1. Verifying that the `--spacing` custom property is properly defined in your CSS 2. Simplifying the grid configuration if possible for better maintainability ```shell #!/bin/bash # Check if --spacing custom property is defined in CSS files rg --type css "spacing.*:" -A 2 -B 2frontend/src/components/ui/scroll-area.tsx (1)
1-57: LGTM! Well-structured scroll area component.The implementation properly wraps Radix UI primitives with enhanced styling and accessibility. The use of data-slot attributes, conditional orientation styling, and proper TypeScript typing demonstrates good component design patterns.
frontend/src/components/ui/textarea.tsx (2)
10-10: Check browser support for field-sizing-content.The
field-sizing-contentCSS property is relatively new and may not be supported in all browsers. Consider adding a fallback or verifying browser compatibility requirements.What is the browser support for CSS field-sizing-content property?
5-16: Let's broaden the search for any JSX usage ofTextareareceiving arefprop:#!/bin/bash # Search for JSX usage of Textarea with a ref prop across .tsx files rg '<Textarea\b[^>]*ref=' -g '*.tsx'frontend/src/components/Media/MediaView.tsx (2)
405-406: LGTM! CSS class reorderings improve consistency.The reordering of Tailwind CSS classes throughout the component improves consistency and readability while maintaining the same styling behavior.
Also applies to: 639-640, 645-646, 654-655, 726-726, 835-835, 900-900, 920-922, 929-929
32-32: Verify the import change from react-router-dom to react-router.The change from
react-router-domtoreact-routerforuseNavigateshould be verified. Typically,useNavigateis imported fromreact-router-domin React applications.#!/bin/bash # Check other files to see which react-router package is used rg "from ['\"]react-router" -A 1 -B 1frontend/src/components/ui/card.tsx (1)
1-93: Well-designed Card component system with excellent composability.The Card component implementation follows React best practices with:
- Proper prop spreading and TypeScript typing
- Semantic data-slot attributes for styling hooks
- Modern CSS Grid layout with container queries
- Consistent className merging pattern
The components provide good composability for building card-based UIs.
frontend/src/components/ui/badge.tsx (1)
1-47: Excellent Badge component with comprehensive variant system.The implementation demonstrates good practices:
- CVA for type-safe variant management
- Comprehensive accessibility features (focus-visible, aria-invalid)
- Flexible composition with asChild prop
- Well-organized styling with proper hover and focus states
The component provides a solid foundation for badge UI elements.
frontend/src/components/ui/input.tsx (1)
5-19: To ensure we catch any ref usage on theInputcomponent, let’s search without relying on file-type filters:#!/bin/bash # Search all .ts and .tsx files for <Input … ref=> usage rg -n "<Input[^>]*ref=" --glob "*.ts" --glob "*.tsx"frontend/src/hooks/useUpdater.ts (1)
23-126: Well-implemented updater hook with comprehensive functionality.The hook provides excellent functionality:
- Proper state management with TypeScript interfaces
- Comprehensive error handling
- Progress tracking during downloads
- Memoized functions to prevent unnecessary re-renders
- Clear logging for debugging
The implementation follows React hooks best practices.
frontend/src/App.css (1)
1-198: Excellent modernization to Tailwind CSS v4 with comprehensive theming system.This refactor demonstrates several improvements:
- Migration to Tailwind CSS v4 with inline theme configuration
- OKLCH color space for better color consistency and accessibility
- Comprehensive design token system with proper semantic naming
- Enhanced dark mode support with dedicated color variables
- Modern CSS features like calc() for computed values
- Better maintainability through explicit theme configuration
The architecture provides a solid foundation for consistent theming across the application.
frontend/src/contexts/ThemeContext.tsx (1)
51-57: Fix variable shadowing bug in setTheme function.The parameter name
themeshadows the state variable, causing the wrong value to be passed to the state setter. This will cause an infinite recursion error.const value = { theme, - setTheme: (theme: Theme) => { - localStorage.setItem(storageKey, theme); - setTheme(theme); + setTheme: (newTheme: Theme) => { + localStorage.setItem(storageKey, newTheme); + setTheme(newTheme); }, };Likely an incorrect or invalid review comment.
frontend/src/components/ui/button.tsx (1)
38-58: ```shell
#!/bin/bashSearch for ref usage on Button component across TSX and JSX files
rg -n "<Button[^>]ref=" --glob ".tsx" --glob "*.jsx"
</details> <details> <summary>frontend/src/components/ui/pagination.tsx (1)</summary> `1-128`: **LGTM! Component refactoring improves consistency.** The refactoring from arrow functions to named functions, addition of data-slot attributes, and icon naming updates align well with the broader UI component modernization effort. </details> <details> <summary>frontend/src/components/ui/dialog.tsx (1)</summary> `1-142`: **LGTM! Dialog component refactoring enhances structure and flexibility.** The refactoring from direct re-exports to explicit wrapper functions with data-slot attributes improves DOM identification and debugging. The addition of the `showCloseButton` prop provides better control over dialog behavior. </details> <details> <summary>frontend/src/components/ui/dropdown-menu.tsx (4)</summary> `3-3`: **LGTM! Good improvement for clarity.** The explicit icon naming (`CheckIcon`, `ChevronRightIcon`, `CircleIcon`) improves code clarity and prevents potential naming conflicts. --- `60-81`: **LGTM! Good addition for destructive actions.** The `variant` prop addition with `'default'` and `'destructive'` options provides clear visual distinction for destructive actions, improving UX. The implementation using data attributes and conditional styling is clean and maintainable. --- `10-10`: **LGTM! Excellent addition for testing and debugging.** The consistent addition of `data-slot` attributes across all components improves testability and makes DOM debugging easier. This is a best practice for component libraries. Also applies to: 17-17, 26-27, 40-40 --- `7-11`: **Verify the impact of removing ref forwarding.** The refactor from `React.forwardRef` to regular function components removes the ability to pass refs to these components. This could be a breaking change if any consumers rely on ref forwarding. Run the following script to check if any components are passing refs to dropdown menu components: ```shell #!/bin/bash # Description: Check for ref usage on dropdown menu components # Search for ref usage on dropdown menu components rg -A 3 "ref=|useRef.*Dropdown" --glob "*.tsx" --glob "*.jsx" --glob "*.ts" --glob "*.js" # Search for dropdown component usage with ref prop ast-grep --pattern 'DropdownMenu$_[$$$] ref={$_} [$$$]' ast-grep --pattern 'DropdownMenuTrigger[$$$] ref={$_} [$$$]' ast-grep --pattern 'DropdownMenuContent[$$$] ref={$_} [$$$]'Also applies to: 21-30
Fixes: #428
This is a really big PR. The changes are described in this doc: https://docs.google.com/document/d/1w2nTQ5nLkWb824FT27L6YKCgT6dThwRLa1gt33h7UfM/edit?tab=t.0
This pull request introduces a variety of changes across multiple files to enhance functionality, update dependencies, and improve the styling and configuration of the project. Key updates include adding support for a Tauri updater plugin, restructuring frontend configurations, updating dependencies, and refining styles for better consistency and usability.
Tauri Updater Integration:
tauri-plugin-updaterto the Tauri configuration for enabling app update capabilities. Updatedtauri.conf.jsonto include updater endpoints and signing identity. (frontend/src-tauri/tauri.conf.json- [1] [2] [3]Frontend Configuration and Styling:
components.jsonto use the "new-york" style, added aliases, and included thelucideicon library. (frontend/components.json- frontend/components.jsonL3-R20)Dependency Updates:
package.json, including React, TailwindCSS, and Radix UI components, to their latest versions for improved performance and compatibility. (frontend/package.json- [1] [2] [3]Code Refactoring:
frontend/api/apiEndpoints.ts- [1]frontend/src/App.tsx- [2]frontend/src/components/AITagging/FilterControls.tsx- [3]Summary by CodeRabbit
New Features
Enhancements
Bug Fixes
Refactor
Chores
Removed