Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
77 commits
Select commit Hold shift + click to select a range
cf71834
feat(console): port template-dashboard styling to /console pages
dingyi Apr 25, 2026
dc4321f
refactor(sidebar): port template-dashboard Sidebar styling to console…
dingyi Apr 25, 2026
0d99560
refactor(console): port template-dashboard chrome to header + sidebar
dingyi Apr 25, 2026
6e45741
refactor(sidebar): move trigger to navbar, avatar to footer, drop mis…
dingyi Apr 25, 2026
2743282
fix(sidebar): import heroui-pro stylesheet so <Sidebar> actually has CSS
dingyi Apr 25, 2026
3b3ac62
fix(console): scroll, trigger placement, and active icon color
dingyi Apr 25, 2026
9e926d4
fix(sidebar): show user footer, fix trigger position, drop strokeWidt…
dingyi Apr 25, 2026
7ca4121
fix(sidebar): trigger relocates to sidebar top when collapsed
dingyi Apr 25, 2026
75acdf5
refactor(tokens): rewrite TokensColumnDefs without HeroCompat
dingyi Apr 25, 2026
5805062
refactor(usage-logs): rewrite UsageLogsColumnDefs without HeroCompat
dingyi Apr 25, 2026
ba35951
refactor(tokens): rewrite tokens/index FluentRead notice without Hero…
dingyi Apr 25, 2026
e27b853
refactor(headerbar): adopt heroui-pro Navbar with native mobile menu
dingyi Apr 26, 2026
083200b
refactor(console): swap literal slate/gray tones for semantic tokens
dingyi Apr 26, 2026
9781494
refactor(console): swap literal slate/gray tones for semantic tokens …
dingyi Apr 26, 2026
c233c19
refactor(console): swap literal slate/gray tones for semantic tokens …
dingyi Apr 26, 2026
0ce83f7
refactor(console): swap literal slate/gray tones for semantic tokens …
dingyi Apr 26, 2026
26ffb23
docs(todo): log /console literal-color → semantic-token audit
dingyi Apr 26, 2026
c919dcf
refactor(visitor-chrome): swap literal slate/gray tones for semantic …
dingyi Apr 26, 2026
a628d89
refactor(playground+setup+chrome): swap literal slate/gray tones for …
dingyi Apr 26, 2026
5aef451
fix(headerbar): restore Navbar.Item hover, lock dropdown text to 14px…
dingyi Apr 26, 2026
0f7bccd
fix(headerbar): move dropdown font-size to wrapper so HeroUI button r…
dingyi Apr 26, 2026
733fefc
refactor(final-sweep): swap last literal slate/gray tones for semanti…
dingyi Apr 26, 2026
8eaa62c
fix(headerbar): apply same dropdown font-size hoist to ThemeToggle
dingyi Apr 26, 2026
c190781
fix(headerbar): add cursor-pointer to navbar trigger + dropdown buttons
dingyi Apr 26, 2026
35cc1e7
refactor(pricing): rewrite PricingTable to native HTML table without …
dingyi Apr 25, 2026
203a6a6
chore(pricing): align cherry-picked PricingTable with semantic-token …
dingyi Apr 26, 2026
3d733c5
refactor(deployments): rewrite ViewDetailsModal without HeroCompat
dingyi Apr 26, 2026
d4c55c3
refactor(deployments): rewrite ViewLogsModal without HeroCompat
dingyi Apr 26, 2026
dd5d486
refactor(deployments): rewrite DeploymentsColumnDefs without HeroCompat
dingyi Apr 26, 2026
d5109db
refactor(deployments): rewrite ExtendDurationModal + UpdateConfigModa…
dingyi Apr 26, 2026
5447126
refactor(channels): rewrite ModelTestModal without HeroCompat
dingyi Apr 26, 2026
0616bdb
refactor(channels): rewrite ChannelsColumnDefs without HeroCompat
dingyi Apr 26, 2026
7dc18a5
refactor(channels): rewrite ModelSelectModal without HeroCompat
dingyi Apr 26, 2026
a0cab42
refactor(settings): rewrite OtherSetting without HeroCompat
dingyi Apr 26, 2026
427748f
refactor(tokens): rewrite EditTokenModal without HeroCompat + fix nul…
dingyi Apr 26, 2026
846147f
refactor(subscriptions): rewrite AddEditSubscriptionModal without Her…
dingyi Apr 26, 2026
79e3bdc
refactor(users): rewrite EditUserModal without HeroCompat
dingyi Apr 26, 2026
670d075
refactor(models): rewrite EditModelModal without HeroCompat
dingyi Apr 26, 2026
3611c1a
refactor(channels): rewrite OllamaModelModal without HeroCompat
dingyi Apr 26, 2026
4e963c4
refactor(channels): rewrite CodexUsageModal without HeroCompat
dingyi Apr 26, 2026
d8c4fe9
refactor(setting): rewrite SettingsChats without HeroCompat
dingyi Apr 26, 2026
c200957
refactor(channels): rewrite EditTagModal without HeroCompat
dingyi Apr 26, 2026
66f6662
refactor(topup): rewrite RechargeCard without HeroCompat
dingyi Apr 26, 2026
5501c18
refactor(settings): rewrite TwoFASetting without HeroCompat
dingyi Apr 26, 2026
cb2602f
refactor(setting): rewrite SettingsPaymentGatewayWaffo without HeroCo…
dingyi Apr 26, 2026
6f9d42f
refactor(channels): rewrite MultiKeyManageModal without HeroCompat
dingyi Apr 26, 2026
3b1530d
refactor(settings): rewrite AccountManagement without HeroCompat
dingyi Apr 26, 2026
cd062d5
refactor(setting): rewrite SettingsPerformance without HeroCompat
dingyi Apr 26, 2026
3a747e7
refactor(setting): rewrite GroupRatioSettings without HeroCompat
dingyi Apr 26, 2026
7a0699e
refactor(setting): rewrite ModelPricingEditor without HeroCompat
dingyi Apr 26, 2026
1930465
refactor(setting): rewrite UpstreamRatioSync without HeroCompat
dingyi Apr 26, 2026
cc1dce3
refactor(settings): rewrite NotificationSettings without HeroCompat
dingyi Apr 26, 2026
6cbe16c
refactor(settings): rewrite CustomOAuthSetting without HeroCompat
dingyi Apr 26, 2026
705be82
refactor(setting): rewrite SettingsChannelAffinity without HeroCompat
dingyi Apr 26, 2026
aa55ed9
feat(token): polish token page actions area and empty state
dingyi Apr 26, 2026
e01ca42
fix(css): wrap form-element font reset in @layer base
dingyi Apr 26, 2026
a58f028
refactor(deployments): rewrite CreateDeploymentModal without HeroCompat
dingyi Apr 26, 2026
910a3c5
style(token): drop key icon and use foreground color for card title
dingyi Apr 26, 2026
0eff24b
refactor(settings): rewrite SystemSetting without HeroCompat
dingyi Apr 26, 2026
3cb4116
refactor(channels): rewrite ParamOverrideEditorModal without HeroCompat
dingyi Apr 26, 2026
0ded524
refactor(channels): rewrite EditChannelModal without HeroCompat
dingyi Apr 26, 2026
57d5e66
chore(web): remove HeroCompat / Semi shim packages
dingyi Apr 26, 2026
ec88016
style(task-logs): align card title with theme and let card fill width
dingyi Apr 26, 2026
0b0c3a0
style(mj-logs): align card title with theme and let card fill width
dingyi Apr 26, 2026
d9be515
style(table): unify card titles to icon-less foreground style
dingyi Apr 26, 2026
020c5d0
fix(web/personal): replace broken Semi-style Badge in UserInfoHeader
dingyi Apr 26, 2026
14fa967
refactor(web/personal): use HeroUI Tabs and proper Button variants in…
dingyi Apr 26, 2026
bab3fb5
refactor(web/personal): adopt HeroUI Tabs and Avatar in notification …
dingyi Apr 26, 2026
73c8821
refactor(web/personal): replace Tabs with HeroUI Pro Segment for swit…
dingyi Apr 26, 2026
4faa004
refactor(web/personal): swap native <select> for HeroUI Pro CellSelect
dingyi Apr 26, 2026
9f663a7
fix(web/personal): keep balance and stats from truncating in UserInfo…
dingyi Apr 26, 2026
f54cb30
refactor(console/dashboard): replace Card with HeroUI Pro Widget
dingyi Apr 26, 2026
e6d9072
refactor(console/dashboard): polish Widget header, empty state, and grid
dingyi Apr 26, 2026
c41b67c
style(console/dashboard): use primary 充值 CTA and bare-icon header but…
dingyi Apr 26, 2026
3721de7
style(uptime-panel): shrink the refresh action to read as inline glyph
dingyi Apr 26, 2026
f8b73ea
style(charts-panel): drop chart tab label font from text-sm to text-xs
dingyi Apr 26, 2026
b7eabc6
fix(api-info-panel): center empty state vertically inside the panel
dingyi Apr 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .cursor/rules/project.mdc
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ This is an AI API gateway/proxy built with Go. It aggregates 40+ upstream AI pro
## Tech Stack

- **Backend**: Go 1.22+, Gin web framework, GORM v2 ORM
- **Frontend**: React 18, Vite, Semi Design UI (@douyinfe/semi-ui)
- **Frontend**: React 18, Vite, Hero UI (@heroui/react) with compatibility wrappers
- **Databases**: SQLite, MySQL, PostgreSQL (all three must be supported)
- **Cache**: Redis (go-redis) + in-memory cache
- **Auth**: JWT, WebAuthn/Passkeys, OAuth (GitHub, Discord, OIDC, etc.)
Expand Down
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,12 @@ tiktoken_cache
web/bun.lock
plans
.claude
.playwright-mcp
*.png
*.jpg
*.jpeg
!web/public/**/*.png
!web/public/**/*.jpg

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing .jpeg exception in .gitignore for web/public

Medium Severity

The .gitignore adds *.jpeg to the global ignore list but only creates exceptions for !web/public/**/*.png and !web/public/**/*.jpg — there's no matching !web/public/**/*.jpeg exception. Any .jpeg file added to web/public/ in the future would be silently ignored by git, inconsistent with the treatment of the other two image extensions.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit f54cb30. Configure here.


electron/node_modules
electron/dist
Expand Down
2 changes: 1 addition & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ This is an AI API gateway/proxy built with Go. It aggregates 40+ upstream AI pro
## Tech Stack

- **Backend**: Go 1.22+, Gin web framework, GORM v2 ORM
- **Frontend**: React 18, Vite, Semi Design UI (@douyinfe/semi-ui)
- **Frontend**: React 18, Vite, Hero UI (@heroui/react) with compatibility wrappers
- **Databases**: SQLite, MySQL, PostgreSQL (all three must be supported)
- **Cache**: Redis (go-redis) + in-memory cache
- **Auth**: JWT, WebAuthn/Passkeys, OAuth (GitHub, Discord, OIDC, etc.)
Expand Down
2 changes: 1 addition & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ This is an AI API gateway/proxy built with Go. It aggregates 40+ upstream AI pro
## Tech Stack

- **Backend**: Go 1.22+, Gin web framework, GORM v2 ORM
- **Frontend**: React 18, Vite, Semi Design UI (@douyinfe/semi-ui)
- **Frontend**: React 18, Vite, Hero UI (@heroui/react) with compatibility wrappers
- **Databases**: SQLite, MySQL, PostgreSQL (all three must be supported)
- **Cache**: Redis (go-redis) + in-memory cache
- **Auth**: JWT, WebAuthn/Passkeys, OAuth (GitHub, Discord, OIDC, etc.)
Expand Down
337 changes: 337 additions & 0 deletions TODO.md

Large diffs are not rendered by default.

1,597 changes: 1,452 additions & 145 deletions web/bun.lock

Large diffs are not rendered by default.

146 changes: 146 additions & 0 deletions web/hero-ui-migration-inventory.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,146 @@
{
"compatShimFiles": {
"description": "These compatibility files re-export Semi-style components backed by HeroUI v3. They allow incremental migration without breaking pages that still use the legacy props (`checked`, `onChange`, `xs/sm/md/lg/xl`, render-prop Form, `Spin spinning`, etc.).",
"files": [
"web/src/components/common/ui/HeroCompat.jsx",
"web/src/components/common/ui/HeroIconsCompat.jsx",
"web/src/components/common/ui/HeroIllustrationsCompat.jsx",
"web/src/components/ui/semi.js",
"web/src/components/ui/semi-icons.js",
"web/src/components/common/ui/TableFilterForm.jsx"
]
},
"sharedV3Components": [
"web/src/components/common/ui/ConfirmDialog.jsx — HeroUI v3 Modal-based confirm dialog (replaces Semi Popconfirm and Modal.confirm).",
"web/src/components/common/ui/HoverPanel.jsx — Hover-triggered popover (replaces Semi Popover trigger='hover').",
"web/src/components/common/ui/ClickMenu.jsx — Click-triggered dropdown menu (replaces Semi Dropdown trigger='click')."
],
"compatBugsFixed": [
"Spin: now wraps children with overlay; previously returned null when spinning=false hiding everything inside.",
"Switch: now renders Switch.Control + Switch.Thumb anatomy; previously rendered a bare role=\"switch\" input with no visible toggle.",
"Col: now honors xs/sm/md/lg/xl/xxl breakpoint props via Tailwind responsive classes; previously fell back to span=24 (full width) ignoring all breakpoints.",
"Form: stable api ref, no more infinite update loop when controlled `values` is provided.",
"Form: supports render-prop children `({ values, formApi, formState }) => ...` used by SystemSetting.",
"useFormField: only backfills `initValue` once per field and skips it entirely in controlled mode (was the source of the infinite re-render).",
"Radio: added `Radio.Group` alias for legacy callers.",
"useTableFilterForm: stabilized `api` ref so freshly-allocated `initValues` literals from parents no longer trigger an infinite re-render loop on /console/token (and any other table using the hook).",
"Banner: now honors `description`, `title`, `closeIcon`, `fullMode`, `bordered` props from Semi UI; previously only rendered `children`, dropping the actual message text on every page that used the description prop.",
"withIcon (semi-icons): maps Semi-style string sizes (`small`, `default`, `large`, `extra-large`) to numeric pixel values; previously the literal string was forwarded to lucide-react which serialized it as a width/height attribute, blowing up the icon to e.g. 600+ pixels (caused the giant warning triangle on /console/models)."
],
"filesStillImportingHeroCompat": 37,
"rewrittenToHeroUIv3": [
"web/src/pages/Setting/Operation/SettingsHeaderNavModules.jsx",
"web/src/pages/Setting/Operation/SettingsSidebarModulesAdmin.jsx",
"web/src/pages/Setting/Operation/SettingsCheckin.jsx",
"web/src/pages/Setting/Operation/SettingsCreditLimit.jsx",
"web/src/pages/Setting/Operation/SettingsLog.jsx",
"web/src/pages/Setting/Operation/SettingsSensitiveWords.jsx",
"web/src/pages/Setting/Operation/SettingsMonitoring.jsx",
"web/src/pages/Setting/Operation/SettingsGeneral.jsx",
"web/src/components/settings/HttpStatusCodeRulesInput.jsx",
"web/src/pages/Setting/Dashboard/SettingsDataDashboard.jsx",
"web/src/pages/Setting/Drawing/SettingsDrawing.jsx",
"web/src/pages/Setting/RateLimit/SettingsRequestRateLimit.jsx",
"web/src/pages/Setting/Payment/SettingsGeneralPayment.jsx",
"web/src/pages/Setting/Payment/SettingsPaymentGateway.jsx",
"web/src/pages/Setting/Payment/SettingsPaymentGatewayStripe.jsx",
"web/src/pages/Setting/Model/SettingGlobalModel.jsx",
"web/src/pages/Setting/Model/SettingGeminiModel.jsx",
"web/src/pages/Setting/Model/SettingClaudeModel.jsx",
"web/src/pages/Setting/Model/SettingGrokModel.jsx",
"web/src/pages/Setting/Model/SettingModelDeployment.jsx",
"web/src/components/table/model-pricing/modal/components/ModelHeader.jsx",
"web/src/components/table/model-pricing/modal/components/ModelEndpoints.jsx",
"web/src/components/table/model-pricing/modal/components/ModelBasicInfo.jsx",
"web/src/components/table/channels/modals/BatchTagModal.jsx",
"web/src/components/table/channels/ChannelsTabs.jsx",
"web/src/components/table/channels/index.jsx",
"web/src/components/table/models/ModelsTabs.jsx",
"web/src/components/table/models/components/SelectionNotification.jsx",
"web/src/components/table/models/index.jsx",
"web/src/components/table/models/modals/SyncWizardModal.jsx",
"web/src/components/table/models/modals/MissingModelsModal.jsx",
"web/src/components/table/models/modals/EditVendorModal.jsx",
"web/src/components/table/model-deployments/modals/ConfirmationDialog.jsx",
"web/src/components/table/model-pricing/modal/PricingFilterModal.jsx",
"web/src/components/table/subscriptions/index.jsx",
"web/src/pages/Setting/Ratio/components/AutoGroupList.jsx",
"web/src/pages/Setting/Ratio/components/GroupTable.jsx",
"web/src/components/table/model-pricing/modal/ModelDetailSideSheet.jsx",
"web/src/components/table/model-pricing/view/table/PricingTable.jsx",
"web/src/components/table/channels/modals/CodexOAuthModal.jsx",
"web/src/components/table/channels/modals/SingleModelSelectModal.jsx",
"web/src/components/table/model-deployments/modals/EditDeploymentModal.jsx",
"web/src/components/table/models/modals/PrefillGroupManagement.jsx",
"web/src/pages/Setting/Ratio/components/GroupGroupRatioRules.jsx",
"web/src/pages/Setting/Ratio/components/GroupSpecialUsableRules.jsx",
"web/src/components/table/users/modals/AddUserModal.jsx",
"web/src/components/table/models/ModelsActions.jsx",
"web/src/helpers/utils.jsx",
"web/src/helpers/render.jsx",
"web/src/components/table/model-pricing/modal/components/ModelPricingTable.jsx",
"web/src/components/table/channels/ChannelsActions.jsx",
"web/src/components/table/users/UsersColumnDefs.jsx",
"web/src/components/table/subscriptions/SubscriptionsColumnDefs.jsx",
"web/src/components/table/models/ModelsColumnDefs.jsx",
"web/src/pages/Setting/Ratio/ModelRatioSettings.jsx",
"web/src/components/table/model-pricing/view/table/PricingTableColumns.jsx",
"web/src/components/table/channels/modals/ChannelUpstreamUpdateModal.jsx",
"web/src/components/table/models/modals/UpstreamConflictModal.jsx",
"web/src/components/table/models/modals/EditPrefillGroupModal.jsx",
"web/src/components/table/users/modals/UserBindingManagementModal.jsx",
"web/src/components/table/users/modals/UserSubscriptionsModal.jsx",
"web/src/components/settings/personal/cards/CheckinCalendar.jsx",
"web/src/components/table/redemptions/modals/EditRedemptionModal.jsx",
"web/src/components/settings/ChannelSelectorModal.jsx",
"web/src/pages/Setting/Payment/SettingsPaymentGatewayCreem.jsx",
"web/src/pages/Setting/Dashboard/SettingsFAQ.jsx",
"web/src/pages/Setting/Payment/SettingsPaymentGatewayWaffoPancake.jsx",
"web/src/pages/Setting/Dashboard/SettingsUptimeKuma.jsx",
"web/src/pages/Setting/Dashboard/SettingsAPIInfo.jsx",
"web/src/pages/Setting/Dashboard/SettingsAnnouncements.jsx",
"web/src/components/table/task-logs/TaskLogsColumnDefs.jsx",
"web/src/components/table/mj-logs/MjLogsColumnDefs.jsx"
],
"v3ApiNotes": {
"Switch": "Compound component — needs <Switch.Control><Switch.Thumb /></Switch.Control>; uses isSelected + onChange(value) (NOT onValueChange).",
"Input": "Thin wrapper over react-aria-components Input — accepts standard HTML props (value, onChange={(e) => ...}, disabled). Does NOT support onValueChange or isDisabled.",
"TextArea": "Same as Input — wrapper over react-aria-components TextArea. Use rows attr instead of minRows/maxRows. For complex layouts use a plain <textarea> with Tailwind classes.",
"Button": "Wrapper over react-aria-components Button. Loading prop is isPending (NOT isLoading). Uses onPress (not onClick), color, variant, size, isDisabled, isIconOnly, fullWidth.",
"Modal": "Uses compound Modal/ModalBackdrop/ModalContainer/ModalDialog/ModalHeader/ModalBody/ModalFooter + useOverlayState({ isOpen, onOpenChange }) — see ConfirmDialog.jsx for the canonical example."
},
"verifiedRendering": [
"/console (Dashboard)",
"/console/personal",
"/console/topup",
"/console/channel",
"/console/token",
"/console/log",
"/console/midjourney",
"/console/task",
"/console/redemption",
"/console/user",
"/console/playground",
"/console/models",
"/console/deployment",
"/console/subscription",
"/console/setting?tab=operation",
"/console/setting?tab=dashboard",
"/console/setting?tab=chats",
"/console/setting?tab=drawing",
"/console/setting?tab=payment",
"/console/setting?tab=ratio",
"/console/setting?tab=ratelimit",
"/console/setting?tab=models",
"/console/setting?tab=model-deployment",
"/console/setting?tab=performance",
"/console/setting?tab=system",
"/console/setting?tab=other",
"/pricing"
],
"summary": {
"remainingHeroCompatImporters": 37,
"compatShimFunctional": true,
"criticalRenderBugsFixed": true
}
}
36 changes: 27 additions & 9 deletions web/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,40 +4,52 @@
"private": true,
"type": "module",
"dependencies": {
"@douyinfe/semi-icons": "^2.63.1",
"@douyinfe/semi-ui": "^2.69.1",
"@gravity-ui/icons": "^2.18.0",
"@heroui-pro/react": "^1.0.0-beta.1",
"@heroui/react": ">=3.0.0",
"@heroui/styles": ">=3.0.0",
"@lobehub/icons": "^2.0.0",
"@number-flow/react": ">=0.5.0",
"@visactor/react-vchart": "~1.8.8",
"@visactor/vchart": "~1.8.8",
"@visactor/vchart-semi-theme": "~1.8.8",
"axios": "1.15.0",
"clsx": "^2.1.1",
"dayjs": "^1.11.11",
"embla-carousel": ">=8.6.0",
"embla-carousel-react": ">=8.6.0",
"geist": "^1.7.0",
"heroui-native": "^1.0.2",
"heroui-native-pro": "^1.0.0-beta.1",
"history": "^5.3.0",
"i18next": "^23.16.8",
"i18next-browser-languagedetector": "^7.2.0",
"katex": "^0.16.22",
"lucide-react": "^0.511.0",
"marked": "^4.1.1",
"mermaid": "^11.6.0",
"motion": ">=12.12.0",
"qrcode.react": "^4.2.0",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react": "^19.1.0",
"react-aria-components": ">=1.17.0",
"react-dom": "^19.1.0",
"react-dropzone": "^14.2.3",
"react-fireworks": "^1.0.4",
"react-i18next": "^13.0.0",
"react-icons": "^5.5.0",
"react-markdown": "^10.1.0",
"react-resizable-panels": ">=4.10.0",
"react-router-dom": "^6.3.0",
"react-telegram-login": "^1.1.2",
"react-toastify": "^9.0.8",
"react-turnstile": "^1.0.5",
"recharts": ">=2.0.0",
"rehype-highlight": "^7.0.2",
"rehype-katex": "^7.0.1",
"remark-breaks": "^4.0.0",
"remark-gfm": "^4.0.1",
"remark-math": "^6.0.0",
"sse.js": "^2.6.0",
"tailwind-merge": ">=3.4.0",
"tailwind-variants": ">=3.2.0",
"unist-util-visit": "^5.0.0",
"use-debounce": "^10.0.4"
},
Expand Down Expand Up @@ -73,24 +85,30 @@
]
},
"devDependencies": {
"@douyinfe/vite-plugin-semi": "^2.74.0-alpha.6",
"@so1ve/prettier-config": "^3.1.0",
"@tailwindcss/postcss": "^4.1.5",
"@vitejs/plugin-react": "^4.2.1",
"autoprefixer": "^10.4.21",
"bcryptjs": "^3.0.3",
"code-inspector-plugin": "^1.3.3",
"eslint": "8.57.0",
"eslint-plugin-header": "^3.1.1",
"eslint-plugin-react-hooks": "^5.2.0",
"i18next-cli": "^1.10.3",
"postcss": "^8.5.3",
"prettier": "^3.0.0",
"tailwindcss": "^3",
"tailwindcss": "^4.1.5",
"typescript": "4.4.2",
"vite": "^5.2.0"
},
"prettier": {
"singleQuote": true,
"jsxSingleQuote": true
},
"proxy": "http://localhost:3000"
"proxy": "http://localhost:3000",
"trustedDependencies": [
"heroui-pro",
"@heroui-pro/react",
"heroui-native-pro"
]
}
2 changes: 1 addition & 1 deletion web/postcss.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ For commercial licensing, please contact support@quantumnous.com

export default {
plugins: {
tailwindcss: {},
'@tailwindcss/postcss': {},
autoprefixer: {},
},
};
5 changes: 4 additions & 1 deletion web/src/App.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,9 @@ function DynamicOAuth2Callback() {
function App() {
const location = useLocation();
const [statusState] = useContext(StatusContext);
const routesKey = location.pathname.startsWith('/console')
? `${location.pathname}${location.search}`
: 'public-routes';

// 获取模型广场权限配置
const pricingRequireAuth = useMemo(() => {
Expand All @@ -89,7 +92,7 @@ function App() {

return (
<SetupCheck>
<Routes>
<Routes key={routesKey}>
<Route
path='/'
element={
Expand Down
Loading