1. 18 Aug, 2025 13 commits
  2. 17 Aug, 2025 17 commits
    • ️ refactor(web): migrate React modules from .js to .jsx and align entrypoint · ba6ed31a
      - Rename React components/pages/utilities that contain JSX to `.jsx` across `web/src`
      - Update import paths and re-exports to match new `.jsx` extensions
      - Fix Vite entry by switching `web/index.html` from `/src/index.js` to `/src/index.jsx`
      - Verified remaining `.js` files are plain JS (hooks/helpers/constants) and do not require JSX
      - No runtime behavior changes; extension and reference alignment only
      
      Context: Resolves the Vite pre-transform error caused by the stale `/src/index.js` entry after migrating to `.jsx`.
      t0ng7u committed
    • feat(ui): add hover scale animation to header logo · 4f22ab64
      Add smooth scale-up animation effect when hovering over the header logo to enhance user interaction experience.
      
      Changes:
      - Add `group` class to Link element to enable Tailwind group hover functionality
      - Update transition from `transition-opacity` to `transition-all` for smooth scaling
      - Increase hover scale from `scale-105` to `scale-110` (10% enlargement)
      - Maintain 200ms transition duration for optimal user experience
      
      The logo now smoothly scales to 110% size on hover and returns to original size when mouse leaves, providing better visual feedback for user interactions.
      t0ng7u committed
    • 🎛️ refactor: HeaderBar into modular components, add shared skeletons, and primary-colored nav hover · 24fbd0bf
      Summary
      - Split HeaderBar into maintainable components and hooks
      - Centralized skeleton loading UI via a reusable SkeletonWrapper
      - Improved navigation UX with primary-colored hover indication
      - Preserved API surface and passed linters
      
      Why
      - Improve readability, reusability, and testability of the header
      - Remove duplicated skeleton logic across files
      - Provide clearer hover feedback consistent with the theme
      
      What’s changed
      - Components (web/src/components/layout/HeaderBar/)
        - New container: index.js
        - New UI components: HeaderLogo.js, Navigation.js, ActionButtons.js, UserArea.js, MobileMenuButton.js, NewYearButton.js, NotificationButton.js, ThemeToggle.js, LanguageSelector.js
        - New shared skeleton: SkeletonWrapper.js
        - Updated entry: HeaderBar.js now re-exports ./HeaderBar/index.js
      - Hooks (web/src/hooks/common/)
        - New: useHeaderBar.js (state and actions for header)
        - New: useNotifications.js (announcements state, unread calc, open/close)
        - New: useNavigation.js (main nav link config)
      - Skeleton refactor
        - Navigation.js: replaced inline skeletons with <SkeletonWrapper type="navigation" .../>
        - UserArea.js: replaced inline skeletons with <SkeletonWrapper type="userArea" .../>
        - HeaderLogo.js: replaced image/title skeletons with <SkeletonWrapper type="image"/>, <SkeletonWrapper type="title"/>
      - Navigation hover UX
        - Added primary-colored hover to nav items for clearer pointer feedback
        - Final hover style: hover:text-semi-color-primary (kept rounded + transition classes)
      
      Non-functional
      - No breaking API changes; HeaderBar usage stays the same
      - All modified files pass lint checks
      
      Notes for future work
      - SkeletonWrapper is extensible: add new cases (e.g., card) in one place
      - Components are small and test-friendly; unit tests can be added per component
      
      Affected files (key)
      - web/src/components/layout/HeaderBar.js
      - web/src/components/layout/HeaderBar/index.js
      - web/src/components/layout/HeaderBar/Navigation.js
      - web/src/components/layout/HeaderBar/UserArea.js
      - web/src/components/layout/HeaderBar/HeaderLogo.js
      - web/src/components/layout/HeaderBar/ActionButtons.js
      - web/src/components/layout/HeaderBar/MobileMenuButton.js
      - web/src/components/layout/HeaderBar/NewYearButton.js
      - web/src/components/layout/HeaderBar/NotificationButton.js
      - web/src/components/layout/HeaderBar/ThemeToggle.js
      - web/src/components/layout/HeaderBar/LanguageSelector.js
      - web/src/components/layout/HeaderBar/SkeletonWrapper.js
      - web/src/hooks/common/useHeaderBar.js
      - web/src/hooks/common/useNotifications.js
      - web/src/hooks/common/useNavigation.js
      t0ng7u committed
    • 🎨 refactor: UserInfoHeader layout and styling · 4da43710
      - Restructure avatar-name-tags layout to left-right alignment
        - Avatar positioned on the left
        - Name aligned to avatar top, tags aligned to avatar bottom
        - Remove margin-top usage in favor of flexbox justify-between
      - Simplify desktop statistics cards to single-line layout
        - Format as "icon + label: value" without stacked layout
        - Remove custom color classes for cleaner styling
      - Update UI component styling
        - Increase tag size from small to large
        - Reduce cover height from responsive to fixed 32
        - Add Badge import for future enhancements
        - Clean up icon and text color classes
      - Maintain responsive behavior and accessibility
      t0ng7u committed
    • feat: 完善gemini格式转换 · 61601d38
      CaIon committed
    • ️ refactor: HeaderBar into modular, maintainable components & polish responsive UI · 13fcb8fd
      Summary
      • Extracted `LogoSection`, `NavLinks`, `UserArea`, and `ActionButtons` from `HeaderBar.js`, reducing complexity and improving readability.
      • Removed unused state, handlers, and redundant imports from `HeaderBar.js`.
      • Simplified mobile/desktop logic:
        – Menu icon now shows only on mobile `/console` routes.
        – Logo, system name, and mode tags appear on all desktop screens and on mobile non-console pages.
      • Reworked skeleton loaders:
        – Narrower width on mobile (`40 px`) and clearer spacing (`p-1`).
      • Added global `.scrollbar-hide` utility in `index.css` to enable scrollable areas without visible scrollbars.
      • Ensured nav bar is horizontally scrollable across all breakpoints.
      • Cleaned up language-switch, New Year, and notice handlers; consolidated side effects.
      • Updated imports and internal calls after component extraction.
      • Passed required props to new sub-components and removed obsolete ones.
      • Confirmed zero linter warnings after refactor.
      
      Why
      Breaking the monolithic header into focused components makes future updates simpler, facilitates isolation testing, and aligns with the existing component architecture under `components/`. The UI tweaks provide a better mobile experience and consistent styling across devices.
      
      Notes
      No backend changes required. All routes and contexts remain untouched.
      t0ng7u committed
    • feat: unify skeleton loading behavior for Midjourney logs actions · 519c26d5
      • Introduced `useMinimumLoadingTime` to `MjLogsActions.jsx`, guaranteeing a minimum skeleton display duration for smoother UX
      • Refactored loading state UI to use wrapped `Skeleton` with placeholder, matching the implementation in `UsageLogsActions.jsx`
      • Kept existing banner, admin checks, and compact-mode toggle intact while streamlining the code
      • Ensures consistent loading indicators across usage- and MJ-log tables
      t0ng7u committed
    • 🎨 refactor: Setup Wizard UI & Clean Up Redundant Code · ed3b11a3
      Summary of changes
      1. SetupWizard.jsx
         • Center card (`min-h-screen flex items-center justify-center`) and remove top margin.
         • Merge step indicator/content into single card; added `Divider` separator.
         • Added sweep-shine animation to current step title via existing `shine-text` class.
         • Simplified imports (removed Avatar / Typography) and deleted unused modal state.
      
      2. Step components
         • Stripped outer `Card` and header sections from `DatabaseStep.jsx`, `AdminStep.jsx`, `UsageModeStep.jsx`, `CompleteStep.jsx` to fit single-card layout.
         • Removed unused imports and props.
      
      3. Components cleanup
         • Deleted obsolete files:
           - `components/setup/components/SetupSteps.jsx`
           - `components/setup/components/modals/UsageModeInfoModal.jsx`
         • Updated `setup/index.jsx` exports accordingly.
      
      4. Styling
         • Ensured global sweep-shine effect already present in `index.css` is reused for step titles.
      
      5. i18n
         • Pruned unused translation keys related to removed components from `i18n/locales/en.json`.
      
      6. Miscellaneous
         • Removed redundant Avatar/Icon imports from multiple files.
         • All linter checks pass with no new warnings.
      
      This commit consolidates the initialization flow into a cleaner, centered single-card wizard, adds visual polish, and reduces dead code for easier maintenance.
      t0ng7u committed
    • style(Account UX): resilient binding layout, copyable popovers, pastel header,… · 7411c249
       style(Account UX): resilient binding layout, copyable popovers, pastel header, and custom pay colors
      
      - AccountManagement.js
        - Prevent action button from shifting when account IDs are long by adding gap, min-w-0, and flex-shrink-0; keep buttons in a fixed position.
        - Add copyable Popover for account identifiers (email/GitHub/OIDC/Telegram/LinuxDO) using Typography.Paragraph with copyable; reveal full text on hover.
        - Ensure ellipsis works by rendering the popover trigger as `block max-w-full truncate`.
        - Import Popover and wire up `renderAccountInfo` across all binding rows.
      
      - UserInfoHeader.js
        - Apply unified `with-pastel-balls` background to match PricingVendorIntro.
        - Remove legacy absolute-positioned circles and top gradient bar to avoid visual overlap.
      
      - RechargeCard.jsx
        - Colorize non-Alipay/WeChat/Stripe payment icons using backend `pay_methods[].color`; fallback to `var(--semi-color-text-2)`.
        - Add `showClear` to the redemption code input for quicker clearing.
      
      Notes:
      - No linter errors introduced.
      - i18n strings and behavior remain unchanged except for improved UX and visual consistency.
      t0ng7u committed
  3. 16 Aug, 2025 10 commits
    • 💳 feat(TopUp): unify payment cards, add header stats, brand icons, and mobile… · b5051217
      💳 feat(TopUp): unify payment cards, add header stats, brand icons, and mobile refinements [[memory:5659506]]
      
      - Add RightStatsCard and place it in RechargeCard header
        - Shows current balance, historical spend, and request count
        - Mobile: stacks under title; three metrics split equally (flex-1); vertical dividers hidden on small screens
        - Remove extra margins; small card styling
      
      - RechargeCard
        - Replace redeem code Input icon with Semi UI IconGift
        - Style “Payable amount” number in red and bold; keep same style in confirm modal
        - Always render payment methods as Cards (remove Button variant) with adaptive grid
        - Use brand color icons: SiAlipay (#1677FF), SiWechat (#07C160), SiStripe (#635BFF)
        - Replace Stripe icon with SiStripe
        - Integrate RightStatsCard props; adjust header to flex-col on mobile and flex-row on desktop
        - Hide Banner close button when online top-up is disabled (closeIcon={null})
      
      - InvitationCard
        - Simplify to match RechargeCard’s minimalist slate style
        - Use Card title for “Rewards” and place content directly in body
        - Improve link input and copy button; use Badge dots for bullet points
      
      - TopUp index
        - Remove separate right-column stats card; pass userState and renderQuota to RechargeCard
      
      - Cleanup
        - Lint passes; no functional changes to APIs or business logic
      t0ng7u committed
    • ️ perf: Defer Visactor chart libs to dashboard; minimize home bundle · 45368dea
      Home started loading `/assets/visactor-*.js` due to static imports of `@visactor/react-vchart` and the Semi theme in dashboard components/hooks. This change moves chart dependencies to lazy/dynamic imports so they load only on dashboard routes.
      
      Changes
      - StatsCards.jsx: replace static `VChart` import with `React.lazy` + `Suspense` (fallback: null)
      - ChartsPanel.jsx: replace static `VChart` import with `React.lazy` + `Suspense` (fallback: null)
      - useDashboardCharts.js: remove static `initVChartSemiTheme` import; dynamically import and initialize the theme inside `useEffect` with a cancel guard
      
      Behavior
      - Home page no longer downloads `visactor` chunks on first load
      - Chart libraries are fetched only when visiting `/console` (dashboard)
      - No functional changes to chart rendering
      
      Files
      - web/src/components/dashboard/StatsCards.jsx
      - web/src/components/dashboard/ChartsPanel.jsx
      - web/src/hooks/dashboard/useDashboardCharts.js
      
      Verification
      - Build the app (`npm run build`) and open `/`: no `/assets/visactor-*.js` requests
      - Navigate to `/console`: `visactor` chunks load and charts render as expected
      
      Breaking Changes
      - None
      
      Follow-ups
      - If needed, further trim homepage bundle by reducing heavy icon sets on the hero section
      t0ng7u committed
    • ️ refactor(personal-settings): Break down PersonalSetting.js into modular components · 66289f79
      - Split the 1554-line PersonalSetting.js file into smaller, maintainable components
      - Created organized folder structure under personal/:
        - components/: UserInfoHeader for shared user info display
        - tabs/: ModelsList, AccountBinding, SecuritySettings, NotificationSettings
        - modals/: EmailBindModal, WeChatBindModal, AccountDeleteModal, ChangePasswordModal
      - Refactored main PersonalSetting component to use composition pattern
      - Improved code maintainability and separation of concerns
      - Added collapsible prop to ModelsList tabs for better UX
      - Fixed import path for TwoFASetting component in SecuritySettings
      - Preserved all existing functionality and user interactions
      
      This refactoring reduces the main file from 1554 to 484 lines and makes
      the codebase more modular, testable, and easier to maintain.
      t0ng7u committed
    • 🌐 feat(i18n): add internationalization support for TwoFASetting component · 3004ede0
      - Add comprehensive i18n support to TwoFASetting.js component
      - Add all required English translations to en.json for 2FA settings
      - Update component to accept t function as prop and use translation keys
      - Fix prop passing in PersonalSetting.js to provide t function
      - Maintain all existing UI improvements and functionality
      - Support both Chinese and English interfaces for:
        * Main 2FA settings card with status indicators
        * Setup modal with guided steps (QR scan, backup codes, verification)
        * Disable 2FA modal with impact warnings and confirmation
        * Regenerate backup codes modal with success states
        * All buttons, placeholders, messages, and notifications
      - Follow project i18n conventions using t('key') pattern
      - Ensure seamless language switching for enhanced user experience
      
      This enables the 2FA settings to be fully localized while preserving
      the modern UI design and improved user workflow from previous updates.
      t0ng7u committed
    • fix: update token usage calculation · 4e3f008a
      CaIon committed
    • 💄 refactor(settings): redesign 2FA settings UI with unified Semi UI components · d094df09
      - Replace lucide-react icons with Semi UI icons for consistency
      - Implement Steps component for guided 2FA setup modal flow
      - Redesign disable and regenerate backup codes modals to match setup modal style
      - Extract duplicate backup codes display logic into reusable BackupCodesDisplay component
      - Move modal navigation buttons to proper footer parameter following Semi UI standards
      - Replace custom styled dots with Badge components (warning/danger/success types)
      - Use Banner and Divider components for better visual hierarchy
      - Remove redundant modal step titles and download functionality
      - Apply consistent rounded corners, spacing, and color scheme across all modals
      - Improve responsive design with maxWidth constraints
      
      This unifies the 2FA settings visual design with other settings pages and
      enhances user experience through better component usage and layout structure.
      t0ng7u committed
    • Merge pull request #1605 from nekohy/feats-the-flexable-params-override · 14ea2704
      Feats: use the types of gjson,the error expection,the invert and the key missing process  of the condition
      Calcium-Ion committed