Conversation
|
@coderabbitai ignore |
|
Note Reviews pausedUse the following commands to manage reviews:
📝 WalkthroughWalkthroughThis PR removes Lingui i18n usage across the desktop app and utilities, deletes the i18n CI workflow, and drops a compile step from desktop CD. Texts are hardcoded in English, date formatting uses a local util, and App no longer wraps with I18nProvider. A settings route adds an analytics useEffect. Changes
Sequence Diagram(s)sequenceDiagram
autonumber
participant U as User
participant App as App (Renderer)
participant Ctx as Providers
participant Anal as Analytics
Note over Ctx: New provider stack (no I18nProvider)
U->>App: Open Settings
App->>Ctx: Mount Query/Theme/Tooltip/CatchBoundary
App->>App: Render Settings tabs (literal labels)
U->>App: Switch tab
App->>Anal: useEffect emits tab-change event
Anal-->>App: Ack
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes Possibly related PRs
Pre-merge checks and finishing touches❌ Failed checks (2 warnings)
✅ Passed checks (1 passed)
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. Comment |
There was a problem hiding this comment.
Actionable comments posted: 3
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
apps/desktop/src/components/settings/views/sound.tsx (1)
56-63: Fix inconsistent button text rendering.The button content is inconsistent: when pending, "Requesting..." is a plain text node, but when not pending,
buttonTextis wrapped in a<p>element. This creates different DOM structures for the same button state.Apply this diff to make the rendering consistent:
{isPending ? ( <> <Spinner className="mr-2" /> - Requesting... + <p>Requesting...</p> </> ) : <p>{buttonText}</p>}Alternatively, remove both
<p>wrappers for a cleaner implementation:{isPending ? ( <> <Spinner className="mr-2" /> Requesting... </> ) - : <p>{buttonText}</p>} + : buttonText}
🧹 Nitpick comments (8)
apps/desktop/src/components/share-and-permission/participants-selector.tsx (1)
33-34: Consider consolidating text on a single line.The text split across two lines is functional (JSX collapses whitespace), but would be clearer on one line:
- Teamspace · {participants.length} - people + Teamspace · {participants.length} peopleapps/desktop/src/components/right-panel/components/chat/empty-chat-state.tsx (1)
142-155: Consider removing the commented code block.This commented block contains obsolete i18n references that won't work if uncommented. If the beta notice is not needed, remove the block entirely. If you plan to re-enable it later, update it to use hardcoded text instead of the Trans wrapper.
As per coding guidelines.
apps/desktop/src/components/workspace-calendar/event-card.tsx (1)
64-70: Consider memoizing date objects for performance.The
getStartDate()andgetEndDate()functions are called multiple times during render (lines 95, 97, 98, 99, 100), creating new Date objects each time. Consider memoizing these values:+ const startDate = useMemo(() => new Date(event.start_date), [event.start_date]); + const endDate = useMemo(() => new Date(event.end_date), [event.end_date]); + - const getStartDate = () => { - return new Date(event.start_date); - }; - - const getEndDate = () => { - return new Date(event.end_date); - };Then update the render logic to use
startDateandendDatedirectly instead of calling the functions.apps/desktop/src/components/share-and-permission/publish.tsx (1)
6-8: Consider removing unused interface.The
PublishPropsinterface is exported but never used—thePublishcomponent accepts no props. This violates the guideline "No unused imports, variables, or functions."Apply this diff to remove the unused interface:
-export interface PublishProps { - session: Session | null; -} - export const Publish = () => {apps/desktop/src/components/settings/views/sound.tsx (2)
43-43: Consider removing unnecessary<p>wrappers.Both branches wrap content in
<p>tags, which adds extra DOM elements. You can simplify this to plain text since the parent div already handles styling.Apply this diff to simplify:
- {done ? <p>Access Granted</p> : <p>{description}</p>} + {done ? "Access Granted" : description}
134-135: LGTM! Successfully removed i18n for system audio permission.The hardcoded strings are clear and the i18n removal is properly implemented.
Minor suggestion: consider changing "other people's voice" to "other people's voices" (plural) for more natural phrasing, though the current wording is acceptable.
apps/desktop/src/routes/app.settings.tsx (1)
38-66: Eliminate duplicategetTabTitlefunction.The
getTabTitlefunction is defined twice with identical logic: once inside theTabButtoncomponent (lines 39-66) and once inside theComponentfunction (lines 111-138). This violates the DRY principle and increases maintenance burden.Extract the function to the module level (outside both components):
+function getTabTitle(tab: Tab): string { + switch (tab) { + case "general": + return "General"; + case "ai-llm": + return "Intelligence"; + case "ai-stt": + return "Transcription"; + case "calendar": + return "Calendar"; + case "notifications": + return "Notifications"; + case "templates": + return "Templates"; + case "sound": + return "Sound"; + case "integrations": + return "Integrations"; + case "billing": + return "Billing & License"; + case "mcp": + return "MCP"; + case "help-support": + return "Help & Support"; + default: + return tab; + } +} + function TabButton({ tab, isActive, onClick }: { tab: Tab; isActive: boolean; onClick: () => void }) { - const getTabTitle = (tab: Tab) => { - switch (tab) { - case "general": - return "General"; - case "ai-llm": - return "Intelligence"; - case "ai-stt": - return "Transcription"; - case "calendar": - return "Calendar"; - case "notifications": - return "Notifications"; - case "templates": - return "Templates"; - case "sound": - return "Sound"; - case "integrations": - return "Integrations"; - case "billing": - return "Billing & License"; - case "mcp": - return "MCP"; - case "help-support": - return "Help & Support"; - default: - return tab; - } - }; - return (Then remove the duplicate definition from the
Componentfunction (lines 111-138).Also applies to: 111-138
apps/desktop/src/components/settings/views/template.tsx (1)
263-267: Consider adjusting the placeholder string indentation.The multi-line placeholder string has extra leading whitespace on continuation lines that will appear in the actual placeholder text shown to users. This may not be the intended formatting.
Consider removing the extra indentation:
- placeholder={`Describe the summary you want to generate... - -• what kind of meeting is this? -• any format requirements? -• what should AI remember when summarizing?`} + placeholder={`Describe the summary you want to generate... + +• what kind of meeting is this? +• any format requirements? +• what should AI remember when summarizing?`}Or use a more explicit approach with string concatenation to control whitespace.
📜 Review details
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (2)
apps/desktop/src/locales/en/messages.pois excluded by!**/*.poapps/desktop/src/locales/ko/messages.pois excluded by!**/*.po
📒 Files selected for processing (66)
.github/workflows/desktop_cd.yaml(0 hunks).github/workflows/i18n.yaml(0 hunks)apps/desktop/src/components/editor-area/note-header/chips/event-chip.tsx(5 hunks)apps/desktop/src/components/editor-area/note-header/chips/participants-chip.tsx(2 hunks)apps/desktop/src/components/editor-area/note-header/title-input.tsx(1 hunks)apps/desktop/src/components/finder/views/calendar-view.tsx(3 hunks)apps/desktop/src/components/human-profile/past-notes.tsx(1 hunks)apps/desktop/src/components/human-profile/upcoming-events.tsx(1 hunks)apps/desktop/src/components/individualization-modal/how-heard-view.tsx(1 hunks)apps/desktop/src/components/individualization-modal/industry-view.tsx(2 hunks)apps/desktop/src/components/individualization-modal/org-size-view.tsx(2 hunks)apps/desktop/src/components/individualization-modal/role-view.tsx(2 hunks)apps/desktop/src/components/left-sidebar/events-list.tsx(4 hunks)apps/desktop/src/components/left-sidebar/notes-list.tsx(4 hunks)apps/desktop/src/components/left-sidebar/search-list.tsx(2 hunks)apps/desktop/src/components/left-sidebar/top-area/finder-button.tsx(1 hunks)apps/desktop/src/components/left-sidebar/top-area/settings-button.tsx(1 hunks)apps/desktop/src/components/organization-profile/members-list.tsx(2 hunks)apps/desktop/src/components/organization-profile/recent-notes.tsx(3 hunks)apps/desktop/src/components/organization-profile/upcoming-events.tsx(2 hunks)apps/desktop/src/components/right-panel/components/chat/empty-chat-state.tsx(3 hunks)apps/desktop/src/components/search-bar.tsx(2 hunks)apps/desktop/src/components/settings/components/ai/llm-custom-view.tsx(13 hunks)apps/desktop/src/components/settings/components/ai/stt-view-remote.tsx(4 hunks)apps/desktop/src/components/settings/components/calendar/apple-calendar-integration-details.tsx(4 hunks)apps/desktop/src/components/settings/components/calendar/calendar-selector.tsx(3 hunks)apps/desktop/src/components/settings/components/template-list.tsx(3 hunks)apps/desktop/src/components/settings/components/template-sections.tsx(2 hunks)apps/desktop/src/components/settings/components/templates-sidebar.tsx(3 hunks)apps/desktop/src/components/settings/views/ai-llm.tsx(4 hunks)apps/desktop/src/components/settings/views/ai-stt.tsx(1 hunks)apps/desktop/src/components/settings/views/general.tsx(9 hunks)apps/desktop/src/components/settings/views/help-support.tsx(5 hunks)apps/desktop/src/components/settings/views/integrations.tsx(13 hunks)apps/desktop/src/components/settings/views/lab.tsx(1 hunks)apps/desktop/src/components/settings/views/notifications.tsx(6 hunks)apps/desktop/src/components/settings/views/profile.tsx(7 hunks)apps/desktop/src/components/settings/views/sound.tsx(4 hunks)apps/desktop/src/components/settings/views/team.tsx(9 hunks)apps/desktop/src/components/settings/views/template.tsx(11 hunks)apps/desktop/src/components/settings/views/templates.tsx(7 hunks)apps/desktop/src/components/share-and-permission/invite-list.tsx(2 hunks)apps/desktop/src/components/share-and-permission/participants-selector.tsx(1 hunks)apps/desktop/src/components/share-and-permission/publish.tsx(2 hunks)apps/desktop/src/components/toolbar/buttons/chat-panel-button.tsx(1 hunks)apps/desktop/src/components/toolbar/buttons/delete-note-button.tsx(1 hunks)apps/desktop/src/components/toolbar/buttons/left-sidebar-button.tsx(1 hunks)apps/desktop/src/components/toolbar/buttons/new-note-button.tsx(1 hunks)apps/desktop/src/components/toolbar/buttons/new-window-button.tsx(1 hunks)apps/desktop/src/components/welcome-modal/audio-permissions-view.tsx(5 hunks)apps/desktop/src/components/welcome-modal/calendar-permissions-view.tsx(4 hunks)apps/desktop/src/components/welcome-modal/custom-endpoint-view.tsx(12 hunks)apps/desktop/src/components/welcome-modal/download-progress-view.tsx(4 hunks)apps/desktop/src/components/welcome-modal/index.tsx(2 hunks)apps/desktop/src/components/welcome-modal/language-selection-view.tsx(6 hunks)apps/desktop/src/components/welcome-modal/llm-selection-view.tsx(2 hunks)apps/desktop/src/components/welcome-modal/model-selection-view.tsx(2 hunks)apps/desktop/src/components/welcome-modal/welcome-view.tsx(2 hunks)apps/desktop/src/components/workspace-calendar/event-card.tsx(1 hunks)apps/desktop/src/main.tsx(1 hunks)apps/desktop/src/routes/app.human.$id.tsx(2 hunks)apps/desktop/src/routes/app.index.tsx(1 hunks)apps/desktop/src/routes/app.settings.tsx(3 hunks)packages/utils/package.json(0 hunks)packages/utils/src/datetime.test.ts(1 hunks)packages/utils/src/datetime.ts(6 hunks)
💤 Files with no reviewable changes (3)
- .github/workflows/desktop_cd.yaml
- .github/workflows/i18n.yaml
- packages/utils/package.json
🧰 Additional context used
📓 Path-based instructions (1)
**/*.{js,ts,tsx,rs}
⚙️ CodeRabbit configuration file
**/*.{js,ts,tsx,rs}: 1. Do not add any error handling. Keep the existing one.
2. No unused imports, variables, or functions.
3. For comments, keep it minimal. It should be about "Why", not "What".
Files:
apps/desktop/src/components/left-sidebar/events-list.tsxapps/desktop/src/routes/app.index.tsxapps/desktop/src/components/settings/views/general.tsxapps/desktop/src/components/welcome-modal/calendar-permissions-view.tsxapps/desktop/src/components/toolbar/buttons/left-sidebar-button.tsxapps/desktop/src/components/organization-profile/members-list.tsxapps/desktop/src/components/welcome-modal/download-progress-view.tsxapps/desktop/src/components/human-profile/upcoming-events.tsxapps/desktop/src/components/organization-profile/recent-notes.tsxapps/desktop/src/components/settings/components/template-sections.tsxapps/desktop/src/components/left-sidebar/top-area/finder-button.tsxapps/desktop/src/components/settings/views/templates.tsxapps/desktop/src/components/editor-area/note-header/chips/participants-chip.tsxapps/desktop/src/components/individualization-modal/org-size-view.tsxapps/desktop/src/components/share-and-permission/participants-selector.tsxapps/desktop/src/components/settings/components/ai/llm-custom-view.tsxapps/desktop/src/components/welcome-modal/llm-selection-view.tsxapps/desktop/src/components/welcome-modal/audio-permissions-view.tsxapps/desktop/src/components/left-sidebar/search-list.tsxapps/desktop/src/components/toolbar/buttons/new-note-button.tsxapps/desktop/src/components/welcome-modal/custom-endpoint-view.tsxapps/desktop/src/components/workspace-calendar/event-card.tsxapps/desktop/src/components/welcome-modal/model-selection-view.tsxapps/desktop/src/components/search-bar.tsxapps/desktop/src/components/settings/views/integrations.tsxapps/desktop/src/components/editor-area/note-header/chips/event-chip.tsxapps/desktop/src/components/left-sidebar/notes-list.tsxapps/desktop/src/components/individualization-modal/role-view.tsxapps/desktop/src/components/toolbar/buttons/chat-panel-button.tsxapps/desktop/src/components/settings/views/notifications.tsxapps/desktop/src/components/settings/components/templates-sidebar.tsxapps/desktop/src/components/editor-area/note-header/title-input.tsxapps/desktop/src/components/settings/views/template.tsxapps/desktop/src/components/settings/components/calendar/apple-calendar-integration-details.tsxapps/desktop/src/components/individualization-modal/how-heard-view.tsxapps/desktop/src/components/finder/views/calendar-view.tsxapps/desktop/src/routes/app.human.$id.tsxapps/desktop/src/components/right-panel/components/chat/empty-chat-state.tsxapps/desktop/src/components/individualization-modal/industry-view.tsxapps/desktop/src/components/welcome-modal/language-selection-view.tsxpackages/utils/src/datetime.tsapps/desktop/src/components/settings/views/help-support.tsxapps/desktop/src/components/left-sidebar/top-area/settings-button.tsxapps/desktop/src/components/settings/views/team.tsxapps/desktop/src/components/settings/views/profile.tsxapps/desktop/src/components/welcome-modal/index.tsxapps/desktop/src/components/organization-profile/upcoming-events.tsxapps/desktop/src/components/toolbar/buttons/new-window-button.tsxpackages/utils/src/datetime.test.tsapps/desktop/src/components/settings/views/lab.tsxapps/desktop/src/components/settings/components/ai/stt-view-remote.tsxapps/desktop/src/main.tsxapps/desktop/src/components/share-and-permission/invite-list.tsxapps/desktop/src/components/settings/components/calendar/calendar-selector.tsxapps/desktop/src/components/human-profile/past-notes.tsxapps/desktop/src/components/settings/components/template-list.tsxapps/desktop/src/components/settings/views/sound.tsxapps/desktop/src/routes/app.settings.tsxapps/desktop/src/components/toolbar/buttons/delete-note-button.tsxapps/desktop/src/components/settings/views/ai-llm.tsxapps/desktop/src/components/welcome-modal/welcome-view.tsxapps/desktop/src/components/settings/views/ai-stt.tsxapps/desktop/src/components/share-and-permission/publish.tsx
🧬 Code graph analysis (13)
apps/desktop/src/components/toolbar/buttons/left-sidebar-button.tsx (1)
apps/desktop/src/components/shortcut.tsx (1)
Shortcut(5-23)
apps/desktop/src/components/toolbar/buttons/new-note-button.tsx (1)
apps/desktop/src/components/shortcut.tsx (1)
Shortcut(5-23)
apps/desktop/src/components/settings/views/integrations.tsx (1)
packages/ui/src/components/ui/form.tsx (2)
FormLabel(158-158)FormDescription(158-158)
apps/desktop/src/components/toolbar/buttons/chat-panel-button.tsx (1)
apps/desktop/src/components/shortcut.tsx (1)
Shortcut(5-23)
apps/desktop/src/components/settings/views/notifications.tsx (1)
packages/ui/src/components/ui/form.tsx (2)
FormLabel(158-158)FormDescription(158-158)
apps/desktop/src/components/finder/views/calendar-view.tsx (1)
packages/utils/src/datetime.ts (1)
format(4-11)
apps/desktop/src/components/left-sidebar/top-area/settings-button.tsx (1)
apps/desktop/src/components/shortcut.tsx (1)
Shortcut(5-23)
apps/desktop/src/components/settings/views/team.tsx (2)
packages/ui/src/components/ui/button.tsx (1)
Button(37-89)packages/ui/src/components/ui/modal.tsx (3)
ModalTitle(130-136)ModalDescription(143-148)ModalHeader(90-92)
apps/desktop/src/components/settings/views/profile.tsx (3)
packages/ui/src/components/ui/form.tsx (3)
FormLabel(158-158)FormControl(158-158)FormDescription(158-158)packages/ui/src/components/ui/input.tsx (1)
Input(22-22)packages/ui/src/components/ui/textarea.tsx (1)
Textarea(22-22)
apps/desktop/src/components/settings/views/ai-llm.tsx (3)
packages/ui/src/components/ui/tabs.tsx (1)
TabsTrigger(53-53)packages/ui/src/components/ui/tooltip.tsx (2)
TooltipContent(28-28)Tooltip(28-28)packages/ui/src/components/ui/form.tsx (1)
FormDescription(158-158)
apps/desktop/src/components/welcome-modal/welcome-view.tsx (1)
packages/ui/src/components/ui/text-animate.tsx (1)
TextAnimate(302-386)
apps/desktop/src/components/settings/views/ai-stt.tsx (1)
packages/ui/src/components/ui/tabs.tsx (1)
TabsTrigger(53-53)
apps/desktop/src/components/share-and-permission/publish.tsx (1)
packages/ui/src/components/ui/button.tsx (1)
Button(37-89)
🔇 Additional comments (73)
apps/desktop/src/components/welcome-modal/model-selection-view.tsx (1)
39-39: Strings look goodPlain English labels align with the i18n removal and no other dependencies linger. All good here.
Also applies to: 93-93
apps/desktop/src/components/editor-area/note-header/chips/participants-chip.tsx (1)
383-383: LGTM! i18n removal implemented correctly.The hardcoded English strings appropriately replace the Lingui translation calls, aligning with the PR's goal of removing i18n integration. The placeholder text and "Create" label are clear and consistent with the surrounding UI.
Also applies to: 561-561
apps/desktop/src/components/toolbar/buttons/chat-panel-button.tsx (1)
46-46: LGTM! i18n removal implemented correctly.The hardcoded English text "Toggle chat panel" correctly replaces the previous localized version, aligning with the PR objective to remove i18n. The Shortcut component remains properly integrated.
apps/desktop/src/components/settings/views/ai-stt.tsx (1)
116-116: LGTM - i18n removal implemented correctly.The hardcoded English text aligns with the PR objective to remove i18n. No technical issues detected.
Note: The user requested to ignore this PR via comment. If you'd like to proceed without review, please confirm.
Also applies to: 119-119
apps/desktop/src/components/individualization-modal/how-heard-view.tsx (1)
32-32: LGTM! i18n removal implemented correctly.The Trans wrappers have been cleanly removed and the text is now hardcoded in English as intended. No lingui imports remain, and the component functionality is preserved.
Also applies to: 37-37
apps/desktop/src/components/share-and-permission/participants-selector.tsx (1)
30-30: LGTM: i18n removal successful.The hardcoded string correctly replaces the previous Trans wrapper, aligning with the PR objective to remove Lingui i18n.
apps/desktop/src/components/right-panel/components/chat/empty-chat-state.tsx (1)
124-124: LGTM! i18n wrapper successfully removed.The Trans wrapper has been correctly replaced with hardcoded English text, aligning with the PR's objective to remove i18n.
apps/desktop/src/components/organization-profile/recent-notes.tsx (1)
1-74: LGTM! i18n removal is clean and correct.The removal of Lingui Trans wrappers and hardcoding of English strings aligns with the PR objective. All imports remain used, and the logic is unchanged—only text rendering was simplified.
Note: Date formatting on line 53 remains locale-aware via date-fns, which provides a reasonable UX for date display even with hardcoded English UI text.
apps/desktop/src/components/workspace-calendar/event-card.tsx (1)
128-128: LGTM! Change aligns with PR objectives.The hardcoded "Create Note" string is consistent with the PR's goal to remove i18n usage. The change is straightforward and doesn't introduce any functional issues.
apps/desktop/src/components/share-and-permission/publish.tsx (2)
3-3: LGTM! Unused import correctly removed.The Lingui import has been removed since
Transis no longer used in this file, aligning with the PR objective to remove i18n support.
14-25: LGTM! i18n successfully removed.The Lingui
<Trans>wrappers have been replaced with plain English strings as intended. The text is grammatically correct and the component logic remains unchanged.apps/desktop/src/components/welcome-modal/audio-permissions-view.tsx (1)
1-196: LGTM! i18n removal executed correctly.The Lingui internationalization has been cleanly removed and all UI strings have been replaced with plain English text. The component logic and functionality remain intact, and all imports are properly used.
apps/desktop/src/components/human-profile/past-notes.tsx (1)
91-92: LGTM! i18n removed as intended.The Lingui i18n wrappers have been cleanly removed and replaced with plain English text. The functionality remains intact and the implementation aligns with the PR objective.
apps/desktop/src/components/share-and-permission/invite-list.tsx (1)
28-28: LGTM!The hardcoded button text is clear and appropriate. The i18n removal aligns with the PR objectives.
apps/desktop/src/components/settings/views/sound.tsx (1)
124-125: LGTM! Successfully removed i18n for microphone permission.The hardcoded strings are clear and the i18n removal is properly implemented.
apps/desktop/src/components/human-profile/upcoming-events.tsx (1)
80-80: LGTM!The i18n wrapper has been correctly removed and replaced with a plain paragraph element. The change is consistent with the PR's objective to remove Lingui usage.
apps/desktop/src/components/toolbar/buttons/new-note-button.tsx (1)
45-45: LGTM!The i18n wrapper has been correctly removed. The tooltip now displays plain text while preserving the keyboard shortcut component.
apps/desktop/src/components/left-sidebar/top-area/settings-button.tsx (1)
133-153: LGTM!All menu item labels have been correctly updated to use plain text strings instead of i18n wrappers. The changes are consistent across all dropdown menu items.
apps/desktop/src/components/settings/views/lab.tsx (1)
73-76: LGTM!The feature flag component has been correctly updated to render title and description as plain strings. The change maintains the existing functionality while removing i18n dependencies.
apps/desktop/src/components/settings/components/template-sections.tsx (1)
141-151: LGTM!The placeholder text has been correctly updated to use plain string literals instead of Lingui's template literals. The input and textarea placeholders remain functional with static English text.
apps/desktop/src/components/welcome-modal/index.tsx (1)
351-351: LGTM!The Back button label has been correctly updated to use plain text. The button functionality remains unchanged.
apps/desktop/src/components/toolbar/buttons/delete-note-button.tsx (1)
41-41: LGTM!The confirmation dialog message has been correctly updated to use a plain string instead of the i18n template literal. The confirm dialog functionality remains intact.
apps/desktop/src/components/settings/views/notifications.tsx (1)
222-391: LGTM!All form labels and descriptions have been consistently updated to use plain text strings instead of i18n wrappers. The notification settings functionality, including toggles, mutations, and analytics tracking, remains unchanged.
apps/desktop/src/components/individualization-modal/role-view.tsx (1)
3-30: LGTM: i18n removal is clean.The Trans wrapper removal and string hardcoding is consistent with the PR objective. Text remains clear and appropriate.
apps/desktop/src/components/left-sidebar/top-area/finder-button.tsx (1)
25-25: LGTM: Tooltip text properly hardcoded.Clean removal of i18n wrapper.
apps/desktop/src/components/settings/views/help-support.tsx (1)
32-105: LGTM: Help & Support text properly localized to English.All user-facing strings are clear and maintain the original intent. The removal of Trans wrappers is consistent throughout the component.
apps/desktop/src/components/individualization-modal/org-size-view.tsx (1)
3-30: LGTM: Consistent with role-view changes.Text hardcoding is clean and maintains clarity.
apps/desktop/src/components/settings/views/profile.tsx (1)
118-222: LGTM: Form labels and placeholders properly hardcoded.The removal of Trans wrappers and
tmacro usage is thorough. All form field labels, descriptions, and placeholders remain clear and user-friendly.apps/desktop/src/components/left-sidebar/events-list.tsx (1)
60-192: LGTM: Events list text properly hardcoded.Section headers ("Upcoming", "No upcoming events") and context menu items ("New window", "View in calendar") are clear and maintain the original functionality.
apps/desktop/src/components/organization-profile/members-list.tsx (1)
26-101: LGTM: Members list text properly hardcoded.The section header and "more members" message are clear. Dynamic count interpolation is preserved correctly.
apps/desktop/src/components/organization-profile/upcoming-events.tsx (1)
50-85: LGTM: Upcoming events text properly hardcoded.Section header and empty state message are clear and consistent with the rest of the organization profile components.
apps/desktop/src/components/search-bar.tsx (1)
41-143: LGTM! i18n removal is clean.The Lingui i18n usage has been correctly removed. The placeholder text is now a static English string, and no unused imports remain.
apps/desktop/src/components/toolbar/buttons/new-window-button.tsx (1)
34-34: LGTM! Tooltip text correctly updated.The Trans wrapper has been removed and replaced with a plain string. The tooltip functionality remains unchanged.
apps/desktop/src/components/welcome-modal/calendar-permissions-view.tsx (1)
49-156: LGTM! Calendar permissions UI text correctly updated.All i18n wrappers have been removed and replaced with static English strings. The component logic and user flow remain unchanged.
apps/desktop/src/components/settings/components/ai/llm-custom-view.tsx (1)
289-659: LGTM! LLM configuration UI text correctly updated.The i18n wrappers have been systematically removed from all labels, descriptions, and UI text across the OpenAI, Gemini, OpenRouter, and custom endpoint sections. The form logic and validation remain intact.
apps/desktop/src/components/welcome-modal/welcome-view.tsx (1)
3-34: LGTM! Welcome view text correctly updated.The i18n wrappers have been removed from the welcome message and button text. The TextAnimate component now receives a plain string, which is functionally equivalent.
apps/desktop/src/components/editor-area/note-header/title-input.tsx (1)
31-33: LGTM! Placeholder text correctly updated.The translation macros have been replaced with plain English strings in the placeholder logic. The conditional behavior remains the same.
apps/desktop/src/components/settings/views/ai-llm.tsx (1)
2-723: LGTM! AI LLM settings text correctly updated.The i18n wrappers have been removed from tab triggers, form labels, tooltips, and descriptions. The settings form logic and conditional rendering remain unchanged.
apps/desktop/src/components/welcome-modal/language-selection-view.tsx (1)
2-180: LGTM! Language selection UI text correctly updated.All i18n wrappers have been removed and replaced with static English strings throughout the language selection interface. The language management logic remains unchanged.
apps/desktop/src/components/settings/views/integrations.tsx (1)
1-277: LGTM!The i18n removal is implemented correctly. All Trans-wrapped strings have been replaced with plain English literals, and the component logic remains intact.
apps/desktop/src/components/welcome-modal/custom-endpoint-view.tsx (1)
1-603: LGTM!The i18n removal is clean and consistent across all provider forms (OpenAI, Gemini, OpenRouter, and custom endpoints). All labels, descriptions, and helper text are now hardcoded English strings.
apps/desktop/src/components/settings/views/team.tsx (1)
1-242: LGTM!The i18n removal is thorough and consistent across the team management component. All UI text—including the "Coming Soon" overlay, search placeholders, role labels, and modal content—has been properly converted to English literals.
apps/desktop/src/components/left-sidebar/search-list.tsx (1)
1-372: LGTM!The i18n removal is minimal and correct. Both context menu items ("Open in new window") have been properly converted to plain English strings.
apps/desktop/src/components/toolbar/buttons/left-sidebar-button.tsx (1)
1-38: LGTM!The i18n removal is straightforward. The tooltip text has been correctly converted to a plain English string while preserving the Shortcut component integration.
apps/desktop/src/components/settings/views/general.tsx (1)
1-452: LGTM!The i18n removal is comprehensive across all form fields. All labels, descriptions, and placeholder text have been correctly converted to English literals while preserving the form's validation and mutation logic.
apps/desktop/src/components/left-sidebar/notes-list.tsx (1)
1-377: LGTM!The i18n removal is clean. The confirmation dialog text and all context menu items have been correctly converted to English literals without affecting the component's functionality.
apps/desktop/src/components/welcome-modal/llm-selection-view.tsx (1)
1-103: LGTM!The i18n removal is complete for this welcome modal view. All UI text—including the heading, description, button label, and helper text—has been properly converted to English literals.
apps/desktop/src/components/settings/components/calendar/calendar-selector.tsx (1)
68-68: LGTM! Straightforward text replacements.The i18n wrappers have been cleanly replaced with plain English strings. The logic and functionality remain unchanged.
Also applies to: 85-85, 94-94, 100-100
apps/desktop/src/components/editor-area/note-header/chips/event-chip.tsx (3)
201-201: LGTM! Button labels updated.The button labels are now plain text instead of i18n-wrapped, consistent with the broader i18n removal.
Also applies to: 211-211
470-470: LGTM! Status messages updated.The loading and empty state messages are now plain text, maintaining clear user feedback.
Also applies to: 478-478
599-599: LGTM! Conditional rendering preserved.The save button correctly shows "Saving..." during mutation and "Save Date" otherwise.
apps/desktop/src/components/welcome-modal/download-progress-view.tsx (1)
65-65: LGTM! Download UI text updated.All user-facing text in the download progress view has been converted to plain English strings. The messaging remains clear and informative throughout the download flow.
Also applies to: 200-200, 220-220, 226-226, 254-254, 258-258
apps/desktop/src/components/settings/components/calendar/apple-calendar-integration-details.tsx (1)
66-66: LGTM! Access status text updated.The calendar and contacts access status messages and button labels have been cleanly converted to plain text while preserving all conditional rendering logic.
Also applies to: 70-71, 82-82, 108-108, 112-113, 124-124
packages/utils/src/datetime.ts (3)
13-31: LGTM! Pluralization logic correctly preserved.The function correctly handles singular/plural forms inline (e.g., "1 day" vs "2 days later"), maintaining grammatical correctness without i18n.
33-77: LGTM! Date formatting logic preserved.Both functions maintain their timezone-aware logic while replacing i18n calls with inline string formatting. Error handling with hardcoded messages is acceptable per coding guidelines.
Also applies to: 79-123
145-187: LGTM! Time calculation logic intact.The functions correctly calculate time differences and format them appropriately. All time unit thresholds and conditional logic remain unchanged from the original implementation.
Also applies to: 189-228
packages/utils/src/datetime.test.ts (1)
1-1: LGTM! Test setup updated appropriately.The removal of i18n setup from tests aligns with the changes to the datetime utility functions, which now return plain strings instead of i18n-formatted output.
apps/desktop/src/components/finder/views/calendar-view.tsx (2)
8-8: LGTM! Date formatting migrated to local utility.The format function from @hypr/utils provides timezone-aware date formatting (as shown in the relevant code snippet at packages/utils/src/datetime.ts:3-10), maintaining the same functionality without i18n.
Also applies to: 46-46
63-63: LGTM! Button label updated.The "Today" button text is now plain text, consistent with other UI changes in this PR.
apps/desktop/src/routes/app.human.$id.tsx (1)
535-535: LGTM! Button text updated.The "Create" label in the organization selector has been converted to plain text, consistent with the broader i18n removal.
apps/desktop/src/routes/app.index.tsx (1)
12-12: LGTM!The i18n wrapper has been correctly removed and replaced with a static string.
apps/desktop/src/main.tsx (1)
131-138: LGTM!The i18n provider has been correctly removed from the rendering tree. The App and Toaster components are now rendered directly without the internationalization wrapper, which aligns with the PR objective.
apps/desktop/src/components/settings/components/template-list.tsx (3)
39-39: LGTM!The placeholder text has been correctly updated to a static string.
52-52: LGTM!The section heading has been correctly updated to a static string.
87-87: LGTM!The section heading has been correctly updated to a static string.
apps/desktop/src/components/settings/components/templates-sidebar.tsx (3)
30-30: LGTM!The placeholder text has been correctly updated to a static string.
42-42: LGTM!The section heading has been correctly updated to a static string.
65-65: LGTM!The section heading has been correctly updated to a static string.
apps/desktop/src/components/settings/views/templates.tsx (2)
253-253: LGTM!The conditional button text has been correctly updated to static strings.
277-277: LGTM!All UI text strings have been correctly updated from i18n wrappers to static English strings, consistent with the PR objective.
Also applies to: 292-292, 306-306, 311-311, 343-346, 356-356
apps/desktop/src/routes/app.settings.tsx (1)
89-105: Verify that the analytics side effect aligns with PR scope.This PR adds new analytics tracking functionality beyond the stated objective of removing i18n. The useEffect emits analytics events when the tab or userId changes, which is new behavior not present in the original code.
Was this analytics functionality intentionally included in this PR, or should it be in a separate PR focused on analytics improvements?
apps/desktop/src/components/settings/views/template.tsx (1)
204-204: LGTM!All labels, placeholders, and headings have been correctly updated from i18n wrappers to static English strings.
Also applies to: 228-228, 237-237, 247-247, 257-257, 276-276, 282-282, 306-306, 310-310, 313-313, 323-323, 356-356, 414-414
apps/desktop/src/components/settings/components/ai/stt-view-remote.tsx (1)
101-101: LGTM! I18n removal aligns with PR objectives.The replacement of Lingui-wrapped strings with hardcoded English text is consistent across all UI labels and descriptions, maintaining the existing component structure and functionality.
Also applies to: 135-135, 143-143, 163-163, 171-171, 191-191, 199-199
| {/* Main Title */} | ||
| <h2 className="mb-4 text-center text-xl font-semibold text-neutral-800"> | ||
| <Trans>Help us tailor your Hyprnote experience</Trans> | ||
| Help us tailor your Hyprnote experience |
There was a problem hiding this comment.
🧩 Analysis chain
Clean removal of i18n wrappers.
The transition from Trans-wrapped strings to plain English text is correct and consistent with the PR's objective to remove i18n. The hardcoded strings are clear and the component logic remains intact.
Run the following script to verify that Lingui dependencies have been removed from package manifests:
Also applies to: 67-67, 127-127
🏁 Script executed:
#!/bin/bash
# Verify @lingui packages are removed from all package.json files
fd -e json package.json --exec sh -c 'echo "=== {} ===" && cat {} | jq -r ".dependencies, .devDependencies | select(. != null) | keys[]" | grep -i lingui || echo "No lingui deps found"'Length of output: 16634
🏁 Script executed:
#!/bin/bash
# Check for any @lingui references in all package.json files
grep -R '"@lingui' -n .Length of output: 26136
Remove leftover Lingui configuration and dependencies
Lingui is still referenced in apps/desktop:
- package.json lists
@lingui/core,@lingui/react,@lingui/cli,@lingui/babel-plugin-lingui-macro,@lingui/vite-plugin - lingui.config.js remains
- vite.config.ts imports and uses the
@linguiplugin - locale files under apps/desktop/src/locales import
@lingui/core
Delete or update these to fully remove i18n before merging.
| <span | ||
| className="text-blue-500 hover:underline" | ||
| onClick={() => openUrl("https://deepgram.com")} | ||
| > | ||
| Deepgram | ||
| </span>{" "} | ||
| directly, or use{" "} | ||
| <span | ||
| className="text-blue-500 hover:underline" | ||
| onClick={() => openUrl("https://docs.hyprnote.com/owhisper/what-is-this")} | ||
| > | ||
| OWhisper | ||
| </span>{" "} |
There was a problem hiding this comment.
Add event propagation control to clickable links.
The clickable span elements opening external URLs will also trigger the parent div's onClick handler (line 92), causing unintended provider selection. This is inconsistent with the pattern used for Input fields (e.g., line 150), which call stopPropagation() to prevent bubbling.
Apply this diff to prevent event bubbling:
<span
className="text-blue-500 hover:underline"
- onClick={() => openUrl("https://deepgram.com")}
+ onClick={(e) => {
+ e.stopPropagation();
+ openUrl("https://deepgram.com");
+ }}
>
Deepgram
</span>{" "}
directly, or use{" "}
<span
className="text-blue-500 hover:underline"
- onClick={() => openUrl("https://docs.hyprnote.com/owhisper/what-is-this")}
+ onClick={(e) => {
+ e.stopPropagation();
+ openUrl("https://docs.hyprnote.com/owhisper/what-is-this");
+ }}
>
OWhisper
</span>{" "}Additionally, consider using semantic HTML elements (button or a tag) with proper keyboard navigation support for better accessibility:
<button
type="button"
className="text-blue-500 hover:underline cursor-pointer"
onClick={(e) => {
e.stopPropagation();
openUrl("https://deepgram.com");
}}
>
Deepgram
</button>🤖 Prompt for AI Agents
In apps/desktop/src/components/settings/components/ai/stt-view-remote.tsx around
lines 109 to 121, the clickable span elements opening external URLs bubble up to
the parent div's onClick (line 92) and unintentionally trigger provider
selection; update each link handler to call event.stopPropagation() before
calling openUrl (or replace spans with semantic <button type="button"> or <a>
elements and call e.stopPropagation() in their onClick) so clicks open the
external URL without triggering the parent click handler and preserve keyboard
accessibility.
| <div className="flex gap-2"> | ||
| <Input | ||
| placeholder={t`Email separated by commas`} | ||
| placeholder={"Email separated by commas"} |
There was a problem hiding this comment.
Improve placeholder text grammar.
The placeholder text "Email separated by commas" is grammatically awkward. Consider using "Emails separated by commas" or "Email addresses separated by commas" for better clarity.
Apply this diff:
- placeholder={"Email separated by commas"}
+ placeholder={"Emails separated by commas"}📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| placeholder={"Email separated by commas"} | |
| placeholder={"Emails separated by commas"} |
🤖 Prompt for AI Agents
In apps/desktop/src/components/share-and-permission/invite-list.tsx around line
21, the placeholder text "Email separated by commas" is grammatically awkward;
update it to a clearer phrase such as "Emails separated by commas" or "Email
addresses separated by commas" by replacing the existing placeholder string
accordingly.
✅ Actions performedReviews paused. |
No description provided.