From 148687bf29632bb5214e1473dcb8ca95a048987e Mon Sep 17 00:00:00 2001 From: Yujong Lee Date: Sat, 4 Oct 2025 15:25:51 +0900 Subject: [PATCH 1/4] wip --- .github/workflows/desktop_cd.yaml | 1 - .github/workflows/i18n.yaml | 33 - .../note-header/chips/event-chip.tsx | 12 +- .../note-header/chips/participants-chip.tsx | 4 +- .../components/finder/views/calendar-view.tsx | 4 +- .../components/human-profile/past-notes.tsx | 9 +- .../human-profile/upcoming-events.tsx | 3 +- .../how-heard-view.tsx | 5 +- .../individualization-modal/industry-view.tsx | 7 +- .../individualization-modal/org-size-view.tsx | 6 +- .../individualization-modal/role-view.tsx | 6 +- .../components/left-sidebar/events-list.tsx | 9 +- .../components/left-sidebar/notes-list.tsx | 7 +- .../components/left-sidebar/search-list.tsx | 5 +- .../left-sidebar/top-area/finder-button.tsx | 3 +- .../left-sidebar/top-area/settings-button.tsx | 9 +- .../organization-profile/members-list.tsx | 5 +- .../organization-profile/recent-notes.tsx | 7 +- .../organization-profile/upcoming-events.tsx | 5 +- .../components/chat/empty-chat-state.tsx | 8 +- .../components/ai/llm-custom-view.tsx | 47 +- .../components/ai/stt-view-remote.tsx | 47 +- .../apple-calendar-integration-details.tsx | 17 +- .../components/calendar/calendar-selector.tsx | 9 +- .../settings/components/template-list.tsx | 6 +- .../settings/components/templates-sidebar.tsx | 6 +- .../src/components/settings/views/ai-llm.tsx | 14 +- .../src/components/settings/views/ai-stt.tsx | 5 +- .../src/components/settings/views/general.tsx | 32 +- .../settings/views/help-support.tsx | 19 +- .../settings/views/integrations.tsx | 44 +- .../src/components/settings/views/lab.tsx | 5 +- .../settings/views/notifications.tsx | 26 +- .../src/components/settings/views/profile.tsx | 20 +- .../src/components/settings/views/sound.tsx | 8 +- .../src/components/settings/views/team.tsx | 42 +- .../components/settings/views/template.tsx | 24 +- .../components/settings/views/templates.tsx | 18 +- .../share-and-permission/invite-list.tsx | 4 +- .../participants-selector.tsx | 7 +- .../share-and-permission/publish.tsx | 8 +- .../toolbar/buttons/chat-panel-button.tsx | 3 +- .../toolbar/buttons/left-sidebar-button.tsx | 3 +- .../toolbar/buttons/new-note-button.tsx | 3 +- .../toolbar/buttons/new-window-button.tsx | 3 +- .../welcome-modal/audio-permissions-view.tsx | 16 +- .../calendar-permissions-view.tsx | 13 +- .../welcome-modal/custom-endpoint-view.tsx | 31 +- .../welcome-modal/download-progress-view.tsx | 13 +- .../src/components/welcome-modal/index.tsx | 4 +- .../welcome-modal/language-selection-view.tsx | 14 +- .../welcome-modal/llm-selection-view.tsx | 9 +- .../welcome-modal/model-selection-view.tsx | 5 +- .../components/welcome-modal/welcome-view.tsx | 4 +- .../workspace-calendar/event-card.tsx | 3 +- apps/desktop/src/locales/en/messages.po | 831 +++++++++--------- apps/desktop/src/locales/ko/messages.po | 831 +++++++++--------- apps/desktop/src/routes/app.human.$id.tsx | 4 +- apps/desktop/src/routes/app.index.tsx | 3 +- apps/desktop/src/routes/app.settings.tsx | 50 +- packages/utils/package.json | 1 - packages/utils/src/datetime.test.ts | 7 +- packages/utils/src/datetime.ts | 101 +-- 63 files changed, 1189 insertions(+), 1319 deletions(-) delete mode 100644 .github/workflows/i18n.yaml diff --git a/.github/workflows/desktop_cd.yaml b/.github/workflows/desktop_cd.yaml index 16c8fc1b85..c684765b6a 100644 --- a/.github/workflows/desktop_cd.yaml +++ b/.github/workflows/desktop_cd.yaml @@ -73,7 +73,6 @@ jobs: - uses: ./.github/actions/pnpm_install - uses: ./.github/actions/poetry_install - run: poetry run python scripts/pre_build.py - - run: pnpm -F desktop lingui:compile - run: pnpm -F ui build - uses: ./.github/actions/apple_cert id: apple-cert diff --git a/.github/workflows/i18n.yaml b/.github/workflows/i18n.yaml deleted file mode 100644 index 83d85e1da4..0000000000 --- a/.github/workflows/i18n.yaml +++ /dev/null @@ -1,33 +0,0 @@ -on: - workflow_dispatch: - push: - branches: - - main - paths: - - apps/desktop/** - - Taskfile.yaml - pull_request: - branches: - - main - paths: - - apps/desktop/** - - Taskfile.yaml - -jobs: - i18n: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: ./.github/actions/pnpm_install - - uses: arduino/setup-task@v1 - with: - version: 3.x - repo-token: ${{ secrets.GITHUB_TOKEN }} - - run: task i18n - - run: | - if [[ -n $(git status --porcelain) ]]; then - echo "::error::i18n data is not up-to-date. Please run 'task i18n' locally and commit the changes." - echo "Changes detected:" - git --no-pager diff - exit 1 - fi diff --git a/apps/desktop/src/components/editor-area/note-header/chips/event-chip.tsx b/apps/desktop/src/components/editor-area/note-header/chips/event-chip.tsx index 0622e5c36c..3dcf9e42e2 100644 --- a/apps/desktop/src/components/editor-area/note-header/chips/event-chip.tsx +++ b/apps/desktop/src/components/editor-area/note-header/chips/event-chip.tsx @@ -1,5 +1,5 @@ import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@hypr/ui/components/ui/tooltip"; -import { Trans } from "@lingui/react/macro"; + import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; import { openUrl } from "@tauri-apps/plugin-opener"; import { clsx } from "clsx"; @@ -198,7 +198,7 @@ export function EventChip({ sessionId, isVeryNarrow = false, isNarrow = false }: className="flex-1 focus:outline-none" > - Join meeting + Join meeting )} @@ -208,7 +208,7 @@ export function EventChip({ sessionId, isVeryNarrow = false, isNarrow = false }: disabled={!calendar.data} className="flex-1 focus:outline-none" > - View in calendar + View in calendar @@ -467,7 +467,7 @@ function EventTab({ if (eventsInPastWithoutAssignedSession.isLoading) { return (
- Loading events... + Loading events...
); } @@ -475,7 +475,7 @@ function EventTab({ if (filteredEvents.length === 0) { return (
- No past events found. + No past events found.
); } @@ -596,7 +596,7 @@ function DateTab({ disabled={updateSessionDate.isPending} className="flex-1 focus:outline-none" > - {updateSessionDate.isPending ? Saving... : Save Date} + {updateSessionDate.isPending ?

Saving...

:

Save Date

} diff --git a/apps/desktop/src/components/editor-area/note-header/chips/participants-chip.tsx b/apps/desktop/src/components/editor-area/note-header/chips/participants-chip.tsx index c3c3f555b7..62fe1d3251 100644 --- a/apps/desktop/src/components/editor-area/note-header/chips/participants-chip.tsx +++ b/apps/desktop/src/components/editor-area/note-header/chips/participants-chip.tsx @@ -1,4 +1,4 @@ -import { Trans, useLingui } from "@lingui/react/macro"; +import { useLingui } from "@lingui/react/macro"; import { RiCornerDownLeftLine, RiLinkedinBoxFill } from "@remixicon/react"; import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; import { clsx } from "clsx"; @@ -560,7 +560,7 @@ function ParticipantCandidates({ + - Create + Create "{query.trim()}" diff --git a/apps/desktop/src/components/finder/views/calendar-view.tsx b/apps/desktop/src/components/finder/views/calendar-view.tsx index 785bc35c8d..b83199c4fd 100644 --- a/apps/desktop/src/components/finder/views/calendar-view.tsx +++ b/apps/desktop/src/components/finder/views/calendar-view.tsx @@ -1,4 +1,4 @@ -import { Trans, useLingui } from "@lingui/react/macro"; +import { useLingui } from "@lingui/react/macro"; import { addMonths, subMonths } from "date-fns"; import { ChevronLeftIcon, ChevronRightIcon } from "lucide-react"; import { useState } from "react"; @@ -61,7 +61,7 @@ export function CalendarView({ date, sessions, events, onNavigate }: CalendarVie className="text-sm px-1 py-0.5 rounded-none border-none" onClick={handleToday} > - Today + Today diff --git a/apps/desktop/src/components/individualization-modal/org-size-view.tsx b/apps/desktop/src/components/individualization-modal/org-size-view.tsx index c25752c477..147fe03273 100644 --- a/apps/desktop/src/components/individualization-modal/org-size-view.tsx +++ b/apps/desktop/src/components/individualization-modal/org-size-view.tsx @@ -1,6 +1,6 @@ import { Button } from "@hypr/ui/components/ui/button"; import { cn } from "@hypr/ui/lib/utils"; -import { Trans } from "@lingui/react/macro"; + import { Building, Building2, Factory, Users } from "lucide-react"; interface OrgSizeViewProps { @@ -21,12 +21,12 @@ export const OrgSizeView: React.FC = ({ onSelect, onSkip, sele
{/* Main Title */}

- Help us tailor your Hyprnote experience + Help us tailor your Hyprnote experience

{/* Specific Question */}

- What's your organization size? + What's your organization size?

diff --git a/apps/desktop/src/components/individualization-modal/role-view.tsx b/apps/desktop/src/components/individualization-modal/role-view.tsx index ff6f450863..5f97ae63ff 100644 --- a/apps/desktop/src/components/individualization-modal/role-view.tsx +++ b/apps/desktop/src/components/individualization-modal/role-view.tsx @@ -1,6 +1,6 @@ import { Button } from "@hypr/ui/components/ui/button"; import { cn } from "@hypr/ui/lib/utils"; -import { Trans } from "@lingui/react/macro"; + import { Crown, GraduationCap, TrendingUp, Users } from "lucide-react"; interface RoleViewProps { @@ -21,12 +21,12 @@ export const RoleView: React.FC = ({ onSelect, onSkip, selectedRo
{/* Main Title */}

- Help us tailor your Hyprnote experience + Help us tailor your Hyprnote experience

{/* Specific Question */}

- What's your role? + What's your role?

diff --git a/apps/desktop/src/components/left-sidebar/events-list.tsx b/apps/desktop/src/components/left-sidebar/events-list.tsx index 4fb85febe6..95c06c050a 100644 --- a/apps/desktop/src/components/left-sidebar/events-list.tsx +++ b/apps/desktop/src/components/left-sidebar/events-list.tsx @@ -1,4 +1,3 @@ -import { Trans } from "@lingui/react/macro"; import { useMutation, useQueryClient } from "@tanstack/react-query"; import { type LinkProps, useNavigate } from "@tanstack/react-router"; import { clsx } from "clsx"; @@ -58,7 +57,7 @@ export default function EventsList({

- Upcoming + Upcoming

)} @@ -178,7 +177,7 @@ function EventItem({ >
- New window + New window
@@ -190,7 +189,7 @@ function EventItem({ >
- View in calendar + View in calendar
diff --git a/apps/desktop/src/components/left-sidebar/notes-list.tsx b/apps/desktop/src/components/left-sidebar/notes-list.tsx index f2d217a974..3b26ff4cee 100644 --- a/apps/desktop/src/components/left-sidebar/notes-list.tsx +++ b/apps/desktop/src/components/left-sidebar/notes-list.tsx @@ -1,4 +1,3 @@ -import { Trans } from "@lingui/react/macro"; import { useLingui } from "@lingui/react/macro"; import { useInfiniteQuery, useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; import { type LinkProps, useMatch, useNavigate } from "@tanstack/react-router"; @@ -310,7 +309,7 @@ function NoteItem({ >
- New window + New window
@@ -321,7 +320,7 @@ function NoteItem({ >
- View calendar + View calendar
@@ -333,7 +332,7 @@ function NoteItem({ onClick={handleClickDelete} > - Delete + Delete diff --git a/apps/desktop/src/components/left-sidebar/search-list.tsx b/apps/desktop/src/components/left-sidebar/search-list.tsx index 51a87f3126..3b5adb348d 100644 --- a/apps/desktop/src/components/left-sidebar/search-list.tsx +++ b/apps/desktop/src/components/left-sidebar/search-list.tsx @@ -1,4 +1,3 @@ -import { Trans } from "@lingui/react/macro"; import { useQuery } from "@tanstack/react-query"; import { useMatch, useNavigate } from "@tanstack/react-router"; import { BuildingIcon, CalendarIcon, FileTextIcon, UserIcon } from "lucide-react"; @@ -295,7 +294,7 @@ function HumanMatch({ match: { item }, isSelected, query }: { onClick={handleOpenWindow} > - Open in new window + Open in new window @@ -365,7 +364,7 @@ function OrganizationMatch({ match: { item: organization }, isSelected, query }: onClick={handleOpenWindow} > - Open in new window + Open in new window diff --git a/apps/desktop/src/components/left-sidebar/top-area/finder-button.tsx b/apps/desktop/src/components/left-sidebar/top-area/finder-button.tsx index e57dc62925..72f0472122 100644 --- a/apps/desktop/src/components/left-sidebar/top-area/finder-button.tsx +++ b/apps/desktop/src/components/left-sidebar/top-area/finder-button.tsx @@ -1,4 +1,3 @@ -import { Trans } from "@lingui/react/macro"; import { FolderSearch } from "lucide-react"; import { commands as windowsCommands } from "@hypr/plugin-windows"; @@ -23,7 +22,7 @@ export function FinderButton() { - Open finder view + Open finder view ); diff --git a/apps/desktop/src/components/left-sidebar/top-area/settings-button.tsx b/apps/desktop/src/components/left-sidebar/top-area/settings-button.tsx index e3dd7bd7d0..cfb58c9b63 100644 --- a/apps/desktop/src/components/left-sidebar/top-area/settings-button.tsx +++ b/apps/desktop/src/components/left-sidebar/top-area/settings-button.tsx @@ -1,4 +1,3 @@ -import { Trans } from "@lingui/react/macro"; import { useQuery } from "@tanstack/react-query"; import type { LinkProps } from "@tanstack/react-router"; import { getName, getVersion } from "@tauri-apps/api/app"; @@ -131,26 +130,26 @@ export function SettingsButton() { onClick={handleClickSettings} className="cursor-pointer" > - Settings + Settings - My Profile + My Profile - Check Updates + Check Updates - Talk to Founders + Talk to Founders

- Members + Members {members.length} @@ -99,7 +98,7 @@ export function MembersList({ organizationId }: MembersListProps) { {members.length > 5 && (

- and {members.length - 5} more members + and {members.length - 5} more members

)}

diff --git a/apps/desktop/src/components/organization-profile/recent-notes.tsx b/apps/desktop/src/components/organization-profile/recent-notes.tsx index c72165e18c..b8b6f69355 100644 --- a/apps/desktop/src/components/organization-profile/recent-notes.tsx +++ b/apps/desktop/src/components/organization-profile/recent-notes.tsx @@ -1,4 +1,3 @@ -import { Trans } from "@lingui/react/macro"; import { useQuery } from "@tanstack/react-query"; import { Link } from "@tanstack/react-router"; import { format } from "date-fns"; @@ -39,7 +38,7 @@ export function RecentNotes({ organizationId, members }: RecentNotesProps) {

- Recent Notes + Recent Notes

{sessions.length > 0 ? ( @@ -56,7 +55,7 @@ export function RecentNotes({ organizationId, members }: RecentNotesProps) {
@@ -67,7 +66,7 @@ export function RecentNotes({ organizationId, members }: RecentNotesProps) { ) : (

- No recent notes with this organization + No recent notes with this organization

)}
diff --git a/apps/desktop/src/components/organization-profile/upcoming-events.tsx b/apps/desktop/src/components/organization-profile/upcoming-events.tsx index 650141f5d1..54588afdfb 100644 --- a/apps/desktop/src/components/organization-profile/upcoming-events.tsx +++ b/apps/desktop/src/components/organization-profile/upcoming-events.tsx @@ -1,4 +1,3 @@ -import { Trans } from "@lingui/react/macro"; import { useQuery } from "@tanstack/react-query"; import { format } from "date-fns"; import { Calendar, ExternalLink } from "lucide-react"; @@ -48,7 +47,7 @@ export function UpcomingEvents({

- Upcoming Events + Upcoming Events

{upcomingEvents.length > 0 ? ( @@ -83,7 +82,7 @@ export function UpcomingEvents({ ) : (

- No upcoming events for this organization + No upcoming events for this organization

)}
diff --git a/apps/desktop/src/components/right-panel/components/chat/empty-chat-state.tsx b/apps/desktop/src/components/right-panel/components/chat/empty-chat-state.tsx index 292c7e97c9..d424c2151f 100644 --- a/apps/desktop/src/components/right-panel/components/chat/empty-chat-state.tsx +++ b/apps/desktop/src/components/right-panel/components/chat/empty-chat-state.tsx @@ -1,5 +1,5 @@ import { commands as analyticsCommands } from "@hypr/plugin-analytics"; -import { Trans } from "@lingui/react/macro"; + import { memo, useCallback, useEffect, useRef, useState } from "react"; import { useHypr } from "@/contexts"; @@ -121,7 +121,7 @@ export const EmptyChatState = memo(({ onQuickAction, onFocusInput, sessionId }: {/* Main heading */}

- Ask Hyprnote to... + Ask Hyprnote to...

@@ -142,8 +142,7 @@ export const EmptyChatState = memo(({ onQuickAction, onFocusInput, sessionId }: { /*

- - Chat feature is in beta. For best results, we recommend you to use{" "} + Chat feature is in beta. For best results, we recommend you to use{" "} . -

*/ } diff --git a/apps/desktop/src/components/settings/components/ai/llm-custom-view.tsx b/apps/desktop/src/components/settings/components/ai/llm-custom-view.tsx index c012b1c64f..83134049ea 100644 --- a/apps/desktop/src/components/settings/components/ai/llm-custom-view.tsx +++ b/apps/desktop/src/components/settings/components/ai/llm-custom-view.tsx @@ -1,4 +1,3 @@ -import { Trans } from "@lingui/react/macro"; import { useQuery } from "@tanstack/react-query"; import { fetch as tauriFetch } from "@tauri-apps/plugin-http"; import useDebouncedCallback from "beautiful-react-hooks/useDebouncedCallback"; @@ -287,11 +286,11 @@ export function LLMCustomView({ - OpenAI + OpenAI

- Use OpenAI's GPT models with your API key + Use OpenAI's GPT models with your API key

@@ -311,7 +310,7 @@ export function LLMCustomView({ render={({ field }) => ( - API Key + API Key ( - Model + Model ( - Model + Model ( - Model + Model ( - API Key + API Key {customForm.watch("api_base") && isLocalEndpoint() && ( - (Optional for localhost) + (Optional for localhost) )} @@ -647,19 +646,17 @@ export function LLMCustomView({ render={({ field }) => ( - Model Name + Model Name - - Select a model from the dropdown (if available) or manually enter the model name required - by your endpoint. - + Select a model from the dropdown (if available) or manually enter the model name required by + your endpoint. {othersModels.isLoading && !field.value ? (
- Loading available models... + Loading available models...
) : othersModels.data && othersModels.data.length > 0 diff --git a/apps/desktop/src/components/settings/components/ai/stt-view-remote.tsx b/apps/desktop/src/components/settings/components/ai/stt-view-remote.tsx index 82eea0cbd9..78750b26c9 100644 --- a/apps/desktop/src/components/settings/components/ai/stt-view-remote.tsx +++ b/apps/desktop/src/components/settings/components/ai/stt-view-remote.tsx @@ -1,4 +1,3 @@ -import { Trans } from "@lingui/react/macro"; import { useMutation, useQuery } from "@tanstack/react-query"; import { openUrl } from "@tauri-apps/plugin-opener"; import { useEffect } from "react"; @@ -99,30 +98,28 @@ export function STTViewRemote({
- Custom Speech-to-Text endpoint + Custom Speech-to-Text endpoint Preview

- - Connect to{" "} - openUrl("https://deepgram.com")} - > - Deepgram - {" "} - directly, or use{" "} - openUrl("https://docs.hyprnote.com/owhisper/what-is-this")} - > - OWhisper - {" "} - for other provider support. - + Connect to{" "} + openUrl("https://deepgram.com")} + > + Deepgram + {" "} + directly, or use{" "} + openUrl("https://docs.hyprnote.com/owhisper/what-is-this")} + > + OWhisper + {" "} + for other provider support.

@@ -135,7 +132,7 @@ export function STTViewRemote({ {/* Base URL Section */}

- Base URL + Base URL

( - Enter the base URL for your custom STT endpoint + Enter the base URL for your custom STT endpoint

- API Key + API Key

( - Your authentication key for accessing the STT service + Your authentication key for accessing the STT service

- Model + Model

( - Enter the model name required by your STT endpoint + Enter the model name required by your STT endpoint
- Calendar Access + Calendar Access
{calendarAccess.data - ? Access granted - : Connect your calendar and track events} + ?

Access granted

+ :

Connect your calendar and track events

}
@@ -80,7 +79,7 @@ export function AppleCalendarIntegrationDetails() { onClick={handleRequestCalendarAccess} className="min-w-12 text-center" > - Grant Access + Grant Access )} @@ -106,12 +105,12 @@ export function AppleCalendarIntegrationDetails() { />
- Contacts Access + Contacts Access
{contactsAccess.data - ? Access granted - : Optional for participant suggestions} + ?

Access granted

+ :

Optional for participant suggestions

}
@@ -122,7 +121,7 @@ export function AppleCalendarIntegrationDetails() { onClick={handleRequestContactsAccess} className="min-w-12 text-center" > - Grant Access + Grant Access )} diff --git a/apps/desktop/src/components/settings/components/calendar/calendar-selector.tsx b/apps/desktop/src/components/settings/components/calendar/calendar-selector.tsx index 8fa9924fba..8535ecfca6 100644 --- a/apps/desktop/src/components/settings/components/calendar/calendar-selector.tsx +++ b/apps/desktop/src/components/settings/components/calendar/calendar-selector.tsx @@ -1,4 +1,3 @@ -import { Trans } from "@lingui/react/macro"; import { useMutation, useQuery } from "@tanstack/react-query"; import { CalendarCogIcon, RefreshCwIcon } from "lucide-react"; @@ -66,7 +65,7 @@ export function CalendarSelector() {
- Select Calendars + Select Calendars
- {calendarsQuery.data?.selectedCount ?? 0} calendars selected + {calendarsQuery.data?.selectedCount ?? 0} calendars selected
@@ -92,13 +91,13 @@ export function CalendarSelector() { {calendarsQuery.isLoading ? (
- Loading... + Loading...
) : calendarsQuery.data?.totalCount === 0 ? (
- No calendars found + No calendars found
) : ( diff --git a/apps/desktop/src/components/settings/components/template-list.tsx b/apps/desktop/src/components/settings/components/template-list.tsx index 98b8c871fd..72eec354bf 100644 --- a/apps/desktop/src/components/settings/components/template-list.tsx +++ b/apps/desktop/src/components/settings/components/template-list.tsx @@ -1,5 +1,5 @@ import { useLingui } from "@lingui/react/macro"; -import { Trans } from "@lingui/react/macro"; + import { HeartIcon, SearchIcon, TagIcon, ZapIcon } from "lucide-react"; import { type ReactNode } from "react"; @@ -53,7 +53,7 @@ export function TemplateList({

- My Templates + My Templates