1. 24 Jul, 2025 7 commits
    • 📱 fix(ui): adjust responsive breakpoints for pricing card grid layout · b935068b
      Optimize grid column breakpoints to account for 460px sidebar width:
      - Change from sm:grid-cols-2 lg:grid-cols-3 to xl:grid-cols-2 2xl:grid-cols-3
      - Ensures adequate space for card display after subtracting sidebar width
      - Improves layout on medium-sized screens where previous breakpoints caused cramped display
      
      Breakpoint calculation:
      - 1280px screen - 460px sidebar = 820px → 2 columns
      - 1536px screen - 460px sidebar = 1076px → 3 columns
      t0ng7u committed
    • ️ refactor(utils): optimize resetPricingFilters function for better maintainability (#1365) · 4116111b
      - Extract default values to DEFAULT_PRICING_FILTERS constant for centralized configuration
      - Replace verbose type checks with optional chaining operator (?.) for cleaner code
      - Eliminate redundant function type validations and comments
      - Reduce code lines by ~50% (from 60 to 25 lines) while maintaining full functionality
      - Improve code readability and follow modern JavaScript best practices
      
      This refactoring enhances code quality without changing the function's behavior,
      making it easier to maintain and modify default filter values in the future.
      t0ng7u committed
    • ️ refactor(utils): optimize resetPricingFilters function for better maintainability (#1365) · 16b2d0f1
      - Extract default values to DEFAULT_PRICING_FILTERS constant for centralized configuration
      - Replace verbose type checks with optional chaining operator (?.) for cleaner code
      - Eliminate redundant function type validations and comments
      - Reduce code lines by ~50% (from 60 to 25 lines) while maintaining full functionality
      - Improve code readability and follow modern JavaScript best practices
      
      This refactoring enhances code quality without changing the function's behavior,
      making it easier to maintain and modify default filter values in the future.
      t0ng7u committed
    • ️ Refactor: Move token unit toggle from table header to filter settings · 0ff0027a
      - Remove K/M switch from model price column header in pricing table
      - Add "Display in K units" option to pricing display settings panel
      - Update parameter passing for tokenUnit and setTokenUnit across components:
        - PricingDisplaySettings: Add tokenUnit toggle functionality
        - PricingSidebar: Pass tokenUnit props to display settings
        - PricingFilterModal: Include tokenUnit in mobile filter modal
      - Enhance resetPricingFilters utility to reset token unit to default 'M'
      - Clean up PricingTableColumns by removing unused setTokenUnit parameter
      - Add English translation for "按K显示单位" as "Display in K units"
      
      This change improves UX by consolidating all display-related controls
      in the filter settings panel, making the interface more organized and
      the token unit setting more discoverable alongside other display options.
      
      Affected components:
      - PricingTableColumns.js
      - PricingDisplaySettings.jsx
      - PricingSidebar.jsx
      - PricingFilterModal.jsx
      - PricingTable.jsx
      - utils.js (resetPricingFilters)
      - en.json (translations)
      t0ng7u committed
    • Merge pull request #1425 from feitianbubu/pr/add-vidu-video-channel · 0e2ec053
      feat: add vidu video channel
      IcedTangerine committed
    • feat: add vidu video channel · 4378e0f9
      feitianbubu committed
  2. 23 Jul, 2025 13 commits
  3. 22 Jul, 2025 20 commits
    • feat: Add skeleton loading animation to SelectableButtonGroup component (#1365) · 3ae8c741
      Add comprehensive loading state support with skeleton animations for the SelectableButtonGroup component, improving user experience during data loading.
      
      Key Changes:
      - Add loading prop to SelectableButtonGroup with minimum 500ms display duration
      - Implement skeleton buttons with proper Semi-UI Skeleton wrapper and active animation
      - Use fixed skeleton count (6 items) to prevent visual jumping during load transitions
      - Pass loading state through all pricing filter components hierarchy:
        - PricingSidebar and PricingFilterModal as container components
        - PricingDisplaySettings, PricingCategories, PricingGroups, PricingQuotaTypes as filter components
      
      Technical Details:
      - Reference CardTable.js implementation for consistent skeleton UI patterns
      - Add useEffect hook for 500ms minimum loading duration control
      - Support both checkbox and regular button skeleton modes
      - Maintain responsive layout compatibility (mobile/desktop)
      - Add proper JSDoc parameter documentation for loading prop
      
      Fixes:
      - Prevent skeleton count sudden changes that caused visual discontinuity
      - Ensure proper skeleton animation with Semi-UI active parameter
      - Maintain consistent loading experience across all filter components
      t0ng7u committed
    • feat: enhance SelectableButtonGroup with checkbox support and refactor pricing… · 6eaaee20
       feat: enhance SelectableButtonGroup with checkbox support and refactor pricing display settings (#1365)
      
      - Add withCheckbox prop to SelectableButtonGroup component for checkbox-prefixed buttons
      - Support both single value and array activeValue for multi-selection scenarios
      - Refactor PricingDisplaySettings to use consistent SelectableButtonGroup styling
      - Replace Switch components with checkbox-enabled SelectableButtonGroup
      - Replace Select dropdown with SelectableButtonGroup for currency selection
      - Maintain unified UI/UX across all pricing filter components
      - Add proper JSDoc documentation for new withCheckbox functionality
      
      This improves visual consistency and provides a more cohesive user experience
      in the model pricing filter interface.
      t0ng7u committed
    • 💄 feat(ui): replace availability indicators with icons in PricingTableColumns (#1365) · e007b26b
      Summary
      • Swapped out the old availability UI for clearer icon-based feedback.
      • Users now see a green check icon when their group can use a model and a red × icon (with tooltip) when it cannot.
      
      Details
      1. Imports
         • Removed deprecated `IconVerify`.
         • Added `IconCheckCircleStroked`  and `IconClose`  for new states.
      
      2. Availability column
         • `renderAvailable` now
           – Shows a green `IconCheckCircleStroked` inside a popover (“Your group can use this model”).
           – Shows a red `IconClose` inside a popover (“你的分组无权使用该模型”) when the model is inaccessible.
           – Eliminates the empty cell/grey tag fallback.
      
      3. Group tag
         • Updated selected-group tag to use `IconCheckCircleStroked` for visual consistency.
      
      Result
      Improves UX by providing explicit visual cues for model availability and removes ambiguous blank cells.
      t0ng7u committed
    • ️ refactor(model-pricing): extract `resetPricingFilters` utility and eliminate duplication (#1365) · e22ef769
      Centralize filter-reset logic to improve maintainability and consistency.
      
      - Add `resetPricingFilters` helper to `web/src/helpers/utils.js`, encapsulating all reset actions (search, category, currency, ratio, group, quota type, etc.).
      - Update `PricingFilterModal.jsx` and `PricingSidebar.jsx` to import and use the new utility instead of keeping their own duplicate `handleResetFilters`.
      - Removes repeated code, ensures future changes to reset behavior require modification in only one place, and keeps components lean.
      t0ng7u committed
    • 🔧 refactor(pricing-filters): extract display settings & improve mobile layout (#1365) · 9bab77ad
      * **PricingDisplaySettings.jsx**
        • Extracted display settings (recharge price, currency, ratio toggle) from PricingSidebar
        • Maintains complete styling and functionality as standalone component
      
      * **SelectableButtonGroup.jsx**
        • Added isMobile detection with conditional Col spans
        • Mobile: `span={12}` (2 buttons per row) for better touch experience
        • Desktop: preserved responsive grid `xs={24} sm={24} md={24} lg={12} xl={8}`
      
      * **PricingSidebar.jsx**
        • Updated imports to use new PricingDisplaySettings component
        • Simplified component structure while preserving reset logic
      
      These changes enhance code modularity and provide optimized mobile UX for filter button groups across the pricing interface.
      t0ng7u committed
    • 📌 fix(pricing-search): make search bar sticky within PricingContent (#1365) · cff8c3ac
      * Added `position: sticky; top: 0; z-index: 5;` to search bar container
        – keeps the bar fixed while the table body scrolls
      * Preserves previous padding, border and background styles
      * Improves usability by ensuring quick access to search & actions during long list navigation
      
      • PricingTable
        • Added `compactMode` prop; strips fixed columns and sets `scroll={compactMode ? undefined : { x: 'max-content' }}`
        • Processes columns to remove `fixed` in compact mode
      
      • PricingPage & index.css
        • Added `.pricing-scroll-hide` utility to hide Y-axis scrollbar for `Sider` & `Content`
      
      • Responsive / style refinements
        • Sidebar width adjusted to 460px
        • Scrollbars hidden uniformly across pricing modules
      
      These changes complete the model-pricing UI refactor, ensuring clean scrolling, responsive filters, and fixed availability column for better usability.
      t0ng7u committed
    • feat(ui): enhance pricing table & filters with responsive button-group, fixed… · f845a96f
       feat(ui): enhance pricing table & filters with responsive button-group, fixed column, scroll tweaks (#1365)
      
      • SelectableButtonGroup
        • Added optional collapsible support with gradient mask & toggle
        • Dynamic tagCount badge support for groups / quota types
        • Switched to responsive Row/Col (`xs 24`, `sm 24`, `lg 12`, `xl 8`) for fluid layout
        • Shows expand button only when item count exceeds visible rows
      
      • Sidebar filters
        • PricingGroups & PricingQuotaTypes now pass tag counts to button-group
        • Counts derived from current models & quota_type
      
      • PricingTableColumns
        • Moved “Availability” column to far right; fixed via `fixed: 'right'`
        • Re-ordered columns and preserved ratio / price logic
      
      • PricingTable
        • Added `compactMode` prop; strips fixed columns and sets `scroll={compactMode ? undefined : { x: 'max-content' }}`
        • Processes columns to remove `fixed` in compact mode
      
      • PricingPage & index.css
        • Added `.pricing-scroll-hide` utility to hide Y-axis scrollbar for `Sider` & `Content`
      
      • Responsive / style refinements
        • Sidebar width adjusted to 460px
        • Scrollbars hidden uniformly across pricing modules
      
      These changes complete the model-pricing UI refactor, ensuring clean scrolling, responsive filters, and fixed availability column for better usability.
      t0ng7u committed
    • 🎨 feat(model-pricing): refactor layout and component structure (#1365) · 1c22e03a
      * Re-architected model-pricing page into modular components:
        * PricingPage / PricingSidebar / PricingContent
        * Removed obsolete `ModelPricing*` components and column defs
      * Introduced reusable `SelectableButtonGroup` in `common/ui`
        * Supports Row/Col grid (3 per row)
        * Optional collapsible mode with gradient mask & toggle
      * Rebuilt filter panels with the new button-group:
        * Model categories, token groups, and quota types
        * Added dynamic `tagCount` badges to display item totals
      * Extended `useModelPricingData` hook
        * Added `filterGroup` and `filterQuotaType` state and logic
      * Updated PricingTable columns & sidebar reset logic to respect new states
      * Ensured backward compatibility via re-export in `index.jsx`
      * Polished styling, icons and i18n keys
      t0ng7u committed
    • 🐛 fix(EditChannelModal): hide empty “API Config” card for VolcEngine Ark/Doubao (type 45) · 5bd8dd78
      The VolcEngine Ark/Doubao channel now has a hard-coded base URL inside the backend, so it no longer requires any API-address settings on the front-end side.
      Previously, the input field was hidden but the surrounding “API Config” card still rendered, leaving a blank, confusing section.
      
      Changes made
      • Added `showApiConfigCard` flag (true when `inputs.type !== 45`) right after the state declarations.
      • Wrapped the entire “API Config” card in a conditional render driven by this flag.
      • Removed the duplicate declaration of `showApiConfigCard` further down in the component to avoid shadowing and improve readability.
      
      Scope verification
      • Checked all other channel types: every remaining type either displays a dedicated API-related input/banner (3, 8, 22, 36, 37, 40, …) or falls back to the generic “custom API address” field.
      • Therefore, only type 45 requires the card to be fully hidden.
      
      Result
      The “Edit Channel” modal now shows no empty card for the VolcEngine Ark/Doubao channel, leading to a cleaner and more intuitive UI while preserving behaviour for all other channels.
      t0ng7u committed
    • Merge pull request #1416 from feitianbubu/pr/opt-video-channel · d0990034
      chore: opt video channel and platform
      IcedTangerine committed
    • 🌐 feat: implement left-right pagination layout with i18n support · 2f55960b
      - Add left-right pagination layout for desktop (total info on left, controls on right)
      - Keep mobile layout centered with pagination controls only
      - Implement proper i18n support for pagination text using react-i18next
      - Add pagination translations for Chinese and English
      - Standardize t function usage across all table components to use xxxData.t pattern
      - Update CardPro footer layout to support justify-between on desktop
      - Use CSS variable --semi-color-text-2 for consistent text styling
      - Disable built-in Pagination showTotal to avoid duplication
      
      Components updated:
      - CardPro: Enhanced footer layout with responsive design
      - createCardProPagination: Added i18n support and custom total text
      - All table components: Unified t function usage pattern
      - i18n files: Added pagination-related translations
      
      The pagination now displays "Showing X to Y of Z items" on desktop
      and maintains existing centered layout on mobile devices.
      t0ng7u committed
    • ️ refactor: restructure ModelPricing component into modular architecture · a2fc86a2
      - Break down monolithic ModelPricing.js (685 lines) into focused components:
        * ModelPricingHeader.jsx - top status card with pricing information
        * ModelPricingTabs.jsx - model category navigation tabs
        * ModelPricingFilters.jsx - search and action controls
        * ModelPricingTable.jsx - data table with pricing details
        * ModelPricingColumnDefs.js - table column definitions and renderers
      
      - Create custom hook useModelPricingData.js for centralized state management:
        * Consolidate all business logic and API calls
        * Manage pricing calculations and data transformations
        * Handle search, filtering, and UI interactions
      
      - Follow project conventions matching other table components:
        * Adopt same file structure as channels/, users/, tokens/ modules
        * Maintain consistent naming patterns and component organization
        * Preserve all original functionality including responsive design
      
      - Update import paths:
        * Remove obsolete ModelPricing.js file
        * Update Pricing page to use new ModelPricingPage component
        * Fix missing import references
      
      Benefits:
      - Improved maintainability with single-responsibility components
      - Enhanced code reusability and testability
      - Better team collaboration with modular structure
      - Consistent codebase architecture across all table components
      t0ng7u committed
    • Merge pull request #1410 from feitianbubu/pr/fix-page-param · 5c1f07ae
      fix: page query param is p
      Calcium-Ion committed
    • Merge pull request #1415 from feitianbubu/pr/fix-relayError-nil · 72afb727
      fix: avoid relayError nil panic
      Calcium-Ion committed