2026-05-09 11:35:07 +08:00
|
|
|
/*
|
|
|
|
|
Copyright (C) 2023-2026 QuantumNous
|
|
|
|
|
|
|
|
|
|
This program is free software: you can redistribute it and/or modify
|
|
|
|
|
it under the terms of the GNU Affero General Public License as
|
|
|
|
|
published by the Free Software Foundation, either version 3 of the
|
|
|
|
|
License, or (at your option) any later version.
|
|
|
|
|
|
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
GNU Affero General Public License for more details.
|
|
|
|
|
|
|
|
|
|
You should have received a copy of the GNU Affero General Public License
|
|
|
|
|
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
|
|
|
|
|
|
|
|
For commercial licensing, please contact support@quantumnous.com
|
|
|
|
|
*/
|
feat(web/default): unified UI overhaul — Base UI migration, theme presets, rankings dashboard, and table toolbar refactor (#4633)
* 🎨 feat(web/default): add shadcn-style theme presets, radius prefs, and fix selection badges
Integrate the qn-platform–style OKLCH color system into the default frontend while keeping the existing blue-tinted dark tokens for the default theme. Add [data-theme-preset] palettes for seven named presets plus the default zinc-like scale, define [data-theme-radius] overrides so user radius beats preset --radius, and align the Tailwind @custom-variant dark helper with .dark usage.
Introduce ThemeCustomizationProvider to own preset and radius state, persist choices in cookies (theme-preset, theme-radius), and sync data-theme-preset / data-theme-radius on <html>. Wrap the tree in main.tsx.
Extend ConfigDrawer with theme preset swatches (scoped data-theme-preset) and radius previews wired to context; refactor swatch/card markup so selected CircleCheck badges sit outside clipped rows (remove outer overflow-hidden that hid the centered checkmark).
Add i18n keys for preset names, radius, and accessibility labels across en, zh, fr, ja, ru, vi.
* 🎨 fix(web): align segmented controls with theme radius tokens
- Replace hard-coded inner pill radii (rounded-[5px]) on dashboard chart
toolbars with radius-md so the active state follows --radius when users
change Radius in Theme Settings.
- Use nested radii consistent with TabsList/TabsTrigger: outer
rounded-lg (var(--radius)) and inner rounded-md (calc(var(--radius) - 2px))
so the track and active thumb stay concentric at small scales (e.g.
0.3rem) instead of a squared “focus” block inside a rounded shell.
- Apply the same pattern to pricing SegmentedControl and the segmented
groups in consumption-distribution-chart, model-charts, and user-charts.
Verified: bun run typecheck (web/default)
* ✨ feat(pricing): enrich model details with uptime sparkline and API documentation
Add a compact 30-day uptime sparkline (OpenRouter-style bars + aggregate %) with
per-day tooltips, surface it in a status row under quick stats and in the
per-group performance table, and extend mock data so uptime series are stable
and optionally scoped by group.
Introduce an API tab with Shiki-highlighted code samples (cURL, Python,
TypeScript, JavaScript), endpoint-type switching, authentication guidance, a
supported-parameters table, and mock per-group RPM/TPM/RPD limits. Infer
vendor, tokenizer, license, and data-retention hints for a provider & data
privacy card on the Overview tab (capabilities/modalities stay with model
identity; rate limits stay with the API tab).
Update i18n for all new user-facing strings across en, zh, fr, ja, ru, and vi.
* 🏆 feat(rankings): add comprehensive rankings dashboard
Add a mock-data powered rankings experience with period tabs, model, app, and vendor leaderboards, market share and history charts, movers, new releases, and per-category sections while backend analytics are pending.
Link ranked models to pricing details and ranked vendors to filtered pricing results, and include localized copy for all supported frontend locales.
* fix(theme): correct theme preset selection state
- update Base UI Radio selectors to use data-checked/data-unchecked states.
- fix unchecked theme options still showing selected indicators.
- isolate the default theme preview tokens to prevent preset changes from leaking into it.
* fix(setup): correct usage mode radio state
- use Base UI data-checked/data-unchecked states for RadioGroup styling.
- hide radio indicators when options are unchecked to avoid setup page display issues.
- drive usage mode card and icon selection styles from Base UI state.
* fix(auth): submit sign-in and sign-up forms
* 🎨 refactor: Align default theme with shadcn Base Nova and prune legacy customization
Migrate shadcn UI to Base UI primitives via CLI (`base-nova` / `components.json`)
and reinstall full component registry with `--overwrite`, including Hugeicons-backed
widgets and newly added registry components.
- Remove custom multi-preset/theme-radius system (`ThemeCustomizationProvider`, cookies,
preset UI from config drawer); rely on official semantic CSS tokens + light/dark only.
- Replace `theme.css` with shadcn’s documented neutral `:root`/`.dark` palette and
`@theme inline` mappings (plus skeleton token vars for existing shimmer usage).
- Update global styles for Base UI: collapsible animation uses `--collapsible-panel-height`;
clarify scroll-lock override comment.
Application compatibility:
- Keep minimal shims where app code diverged from official APIs (popover collision props,
combobox legacy `options` callers, Spinner prop typing).
- Switch interactive styling from Radix-era `data-state` / `--radix-*` selectors to Base UI
semantics (`data-open`, `data-popup-open`, `data-panel-open`, `--anchor-width`, etc.)
Tooling / docs / build:
- Rename Rsbuild vendor chunk grouping to `@base-ui` + transitive `@radix-ui`.
- Refresh AGENTS.md / CLAUDE.md / classic→default sync skill for Base UI stack.
- Bump `package.json` / lockfile for shadcn-postinstall deps (Hugeicons, chart stack, themes, etc.)
Verified: `bun run typecheck` passes.
Note: `bun run lint` still reports pre-existing hooks rule violations elsewhere;
not addressed in this change.
* 🎨 chore(web/default): unify table toolbar, relocate usage stats, refine filters
- Refactor DataTableToolbar to a single wrapping flex row with a
right-aligned action cluster (Reset / Search / View / Expand) for a
cleaner Ant Design Pro–style filter bar; remove the dedicated stats row
and the toolbar `stats` prop.
- Move Common Logs summary badges (Usage / RPM / TPM) and the sensitive-
data visibility toggle into the page header via CommonLogsHeaderActions
and SectionPageLayout.Actions so the toolbar stays focused on filters.
- Slim CommonLogsFilterBar props (no stats / preActions eye control).
- Improve CompactDateTimeRangePicker: show minute-precision labels on the
trigger (seconds omitted; aligns with datetime-local inputs); widen the
trigger on sm+ breakpoints so the full range is visible without truncation;
apply the same width in task logs filters.
- Simplify DataTableViewOptions: text-only “View” trigger, no sliders icon.
- Earlier layout tweak: extra top padding on SectionPageLayout scroll
content so control focus rings are not clipped by overflow.
* feat(web/default): Base UI migration and component foundation
Migrate from Radix UI to Base UI, rewrite core UI primitives,
update dependencies (recharts, date-fns, next-themes), add
shadcn agent skill documentation, and refresh AI element components.
This is the foundational work from the v2/localmain lineage that
was not covered by the individual feature commits above.
---------
Co-authored-by: t0ng7u <dev@aiass.cc>
Co-authored-by: QuentinHsu <xuquentinyang@gmail.com>
2026-05-06 12:39:36 +08:00
|
|
|
/**
|
|
|
|
|
* Theme customization constants and types.
|
|
|
|
|
*
|
|
|
|
|
* Lives in `lib/` (not `context/`) so it can be imported alongside the
|
|
|
|
|
* provider without breaking React Fast Refresh boundaries.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
export const THEME_PRESETS = [
|
|
|
|
|
{
|
|
|
|
|
value: 'default',
|
|
|
|
|
name: 'Default',
|
|
|
|
|
swatches: ['oklch(0.13 0 0)', 'oklch(0.95 0 0)'],
|
|
|
|
|
},
|
🎨 feat(web/default): add Anthropic theme preset and configurable serif typography
Introduce a switchable Anthropic-inspired color preset and a new Font customization axis so users can adopt the editorial serif look across the entire UI, including sidebar navigation, tabs, form controls, buttons, and table headers.
Theme preset
Add anthropic to the theme preset registry with warm cream canvas, slate foreground, and clay/coral accent tokens for light and dark modes
Define explicit surface colors for the Anthropic preset instead of relying on the semantic surface bridge
Exclude anthropic from the primary-color surface bridge so bespoke warm neutrals are not overridden by accent-tinted mixes
Typography system
Add @fontsource-variable/lora and a global --font-serif token with CJK serif fallbacks (Noto Serif SC, Source Han Serif, Songti SC, etc.)
Introduce a --font-body token and drive <body> font-family from it
Add a Font axis (default | sans | serif) parallel to radius/scale
Resolve font: 'default' against preset defaults (anthropic → serif)
Persist font preference via cookie and apply data-theme-font on <body>
Apply serif OpenType features (kern, liga, calt, tnum) and heading display tuning when serif is active
Remove per-component sans opt-outs so serif inherits through sidebar, tabs, inputs, buttons, badges, and table headers via natural CSS cascade
Keep monospace contexts unchanged via Tailwind preflight and .font-mono
UI and i18n
Add Font selector to the theme config drawer (Auto / Sans / Serif)
Add "Font" and "Select body font" translations for en, zh, fr, ja, ru, vi
Misc
Tighten group and status badge sizing for better balance with serif text
2026-05-26 04:31:13 +08:00
|
|
|
{
|
|
|
|
|
// Inspired by Anthropic's official brand language: warm cream canvas
|
|
|
|
|
// (#faf9f5) paired with clay/coral (#d97757) as the single accent.
|
|
|
|
|
// Swatches preview the canvas → accent gradient that defines the system.
|
|
|
|
|
value: 'anthropic',
|
|
|
|
|
name: 'Anthropic',
|
|
|
|
|
swatches: ['oklch(0.984 0.005 95)', 'oklch(0.685 0.142 38)'],
|
|
|
|
|
},
|
feat(web/default): unified UI overhaul — Base UI migration, theme presets, rankings dashboard, and table toolbar refactor (#4633)
* 🎨 feat(web/default): add shadcn-style theme presets, radius prefs, and fix selection badges
Integrate the qn-platform–style OKLCH color system into the default frontend while keeping the existing blue-tinted dark tokens for the default theme. Add [data-theme-preset] palettes for seven named presets plus the default zinc-like scale, define [data-theme-radius] overrides so user radius beats preset --radius, and align the Tailwind @custom-variant dark helper with .dark usage.
Introduce ThemeCustomizationProvider to own preset and radius state, persist choices in cookies (theme-preset, theme-radius), and sync data-theme-preset / data-theme-radius on <html>. Wrap the tree in main.tsx.
Extend ConfigDrawer with theme preset swatches (scoped data-theme-preset) and radius previews wired to context; refactor swatch/card markup so selected CircleCheck badges sit outside clipped rows (remove outer overflow-hidden that hid the centered checkmark).
Add i18n keys for preset names, radius, and accessibility labels across en, zh, fr, ja, ru, vi.
* 🎨 fix(web): align segmented controls with theme radius tokens
- Replace hard-coded inner pill radii (rounded-[5px]) on dashboard chart
toolbars with radius-md so the active state follows --radius when users
change Radius in Theme Settings.
- Use nested radii consistent with TabsList/TabsTrigger: outer
rounded-lg (var(--radius)) and inner rounded-md (calc(var(--radius) - 2px))
so the track and active thumb stay concentric at small scales (e.g.
0.3rem) instead of a squared “focus” block inside a rounded shell.
- Apply the same pattern to pricing SegmentedControl and the segmented
groups in consumption-distribution-chart, model-charts, and user-charts.
Verified: bun run typecheck (web/default)
* ✨ feat(pricing): enrich model details with uptime sparkline and API documentation
Add a compact 30-day uptime sparkline (OpenRouter-style bars + aggregate %) with
per-day tooltips, surface it in a status row under quick stats and in the
per-group performance table, and extend mock data so uptime series are stable
and optionally scoped by group.
Introduce an API tab with Shiki-highlighted code samples (cURL, Python,
TypeScript, JavaScript), endpoint-type switching, authentication guidance, a
supported-parameters table, and mock per-group RPM/TPM/RPD limits. Infer
vendor, tokenizer, license, and data-retention hints for a provider & data
privacy card on the Overview tab (capabilities/modalities stay with model
identity; rate limits stay with the API tab).
Update i18n for all new user-facing strings across en, zh, fr, ja, ru, and vi.
* 🏆 feat(rankings): add comprehensive rankings dashboard
Add a mock-data powered rankings experience with period tabs, model, app, and vendor leaderboards, market share and history charts, movers, new releases, and per-category sections while backend analytics are pending.
Link ranked models to pricing details and ranked vendors to filtered pricing results, and include localized copy for all supported frontend locales.
* fix(theme): correct theme preset selection state
- update Base UI Radio selectors to use data-checked/data-unchecked states.
- fix unchecked theme options still showing selected indicators.
- isolate the default theme preview tokens to prevent preset changes from leaking into it.
* fix(setup): correct usage mode radio state
- use Base UI data-checked/data-unchecked states for RadioGroup styling.
- hide radio indicators when options are unchecked to avoid setup page display issues.
- drive usage mode card and icon selection styles from Base UI state.
* fix(auth): submit sign-in and sign-up forms
* 🎨 refactor: Align default theme with shadcn Base Nova and prune legacy customization
Migrate shadcn UI to Base UI primitives via CLI (`base-nova` / `components.json`)
and reinstall full component registry with `--overwrite`, including Hugeicons-backed
widgets and newly added registry components.
- Remove custom multi-preset/theme-radius system (`ThemeCustomizationProvider`, cookies,
preset UI from config drawer); rely on official semantic CSS tokens + light/dark only.
- Replace `theme.css` with shadcn’s documented neutral `:root`/`.dark` palette and
`@theme inline` mappings (plus skeleton token vars for existing shimmer usage).
- Update global styles for Base UI: collapsible animation uses `--collapsible-panel-height`;
clarify scroll-lock override comment.
Application compatibility:
- Keep minimal shims where app code diverged from official APIs (popover collision props,
combobox legacy `options` callers, Spinner prop typing).
- Switch interactive styling from Radix-era `data-state` / `--radix-*` selectors to Base UI
semantics (`data-open`, `data-popup-open`, `data-panel-open`, `--anchor-width`, etc.)
Tooling / docs / build:
- Rename Rsbuild vendor chunk grouping to `@base-ui` + transitive `@radix-ui`.
- Refresh AGENTS.md / CLAUDE.md / classic→default sync skill for Base UI stack.
- Bump `package.json` / lockfile for shadcn-postinstall deps (Hugeicons, chart stack, themes, etc.)
Verified: `bun run typecheck` passes.
Note: `bun run lint` still reports pre-existing hooks rule violations elsewhere;
not addressed in this change.
* 🎨 chore(web/default): unify table toolbar, relocate usage stats, refine filters
- Refactor DataTableToolbar to a single wrapping flex row with a
right-aligned action cluster (Reset / Search / View / Expand) for a
cleaner Ant Design Pro–style filter bar; remove the dedicated stats row
and the toolbar `stats` prop.
- Move Common Logs summary badges (Usage / RPM / TPM) and the sensitive-
data visibility toggle into the page header via CommonLogsHeaderActions
and SectionPageLayout.Actions so the toolbar stays focused on filters.
- Slim CommonLogsFilterBar props (no stats / preActions eye control).
- Improve CompactDateTimeRangePicker: show minute-precision labels on the
trigger (seconds omitted; aligns with datetime-local inputs); widen the
trigger on sm+ breakpoints so the full range is visible without truncation;
apply the same width in task logs filters.
- Simplify DataTableViewOptions: text-only “View” trigger, no sliders icon.
- Earlier layout tweak: extra top padding on SectionPageLayout scroll
content so control focus rings are not clipped by overflow.
* feat(web/default): Base UI migration and component foundation
Migrate from Radix UI to Base UI, rewrite core UI primitives,
update dependencies (recharts, date-fns, next-themes), add
shadcn agent skill documentation, and refresh AI element components.
This is the foundational work from the v2/localmain lineage that
was not covered by the individual feature commits above.
---------
Co-authored-by: t0ng7u <dev@aiass.cc>
Co-authored-by: QuentinHsu <xuquentinyang@gmail.com>
2026-05-06 12:39:36 +08:00
|
|
|
{
|
|
|
|
|
value: 'underground',
|
|
|
|
|
name: 'Underground',
|
|
|
|
|
swatches: ['oklch(0.5315 0.0694 156.19)', 'oklch(0.5748 0.0862 336.52)'],
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
value: 'rose-garden',
|
|
|
|
|
name: 'Rose Garden',
|
|
|
|
|
swatches: ['oklch(0.5827 0.2418 12.23)', 'oklch(0.8131 0.1129 5.67)'],
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
value: 'lake-view',
|
|
|
|
|
name: 'Lake View',
|
|
|
|
|
swatches: ['oklch(0.765 0.177 163.22)', 'oklch(0.551 0.0899 200.52)'],
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
value: 'sunset-glow',
|
|
|
|
|
name: 'Sunset Glow',
|
|
|
|
|
swatches: ['oklch(0.5591 0.1882 25.33)', 'oklch(0.7938 0.1248 42.42)'],
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
value: 'forest-whisper',
|
|
|
|
|
name: 'Forest Whisper',
|
|
|
|
|
swatches: ['oklch(0.5276 0.1072 182.22)', 'oklch(0.5236 0.0505 250.18)'],
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
value: 'ocean-breeze',
|
|
|
|
|
name: 'Ocean Breeze',
|
|
|
|
|
swatches: ['oklch(0.5461 0.2152 262.88)', 'oklch(0.5854 0.2041 277.12)'],
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
value: 'lavender-dream',
|
|
|
|
|
name: 'Lavender Dream',
|
|
|
|
|
swatches: ['oklch(0.5709 0.1808 306.89)', 'oklch(0.811 0.0589 201.14)'],
|
|
|
|
|
},
|
|
|
|
|
] as const
|
|
|
|
|
|
|
|
|
|
export type ThemePreset = (typeof THEME_PRESETS)[number]['value']
|
|
|
|
|
export type ThemeRadius = 'default' | 'none' | 'sm' | 'md' | 'lg' | 'xl'
|
|
|
|
|
export type ThemeScale = 'default' | 'sm' | 'lg'
|
|
|
|
|
export type ContentLayout = 'full' | 'centered'
|
|
|
|
|
|
🎨 feat(web/default): add Anthropic theme preset and configurable serif typography
Introduce a switchable Anthropic-inspired color preset and a new Font customization axis so users can adopt the editorial serif look across the entire UI, including sidebar navigation, tabs, form controls, buttons, and table headers.
Theme preset
Add anthropic to the theme preset registry with warm cream canvas, slate foreground, and clay/coral accent tokens for light and dark modes
Define explicit surface colors for the Anthropic preset instead of relying on the semantic surface bridge
Exclude anthropic from the primary-color surface bridge so bespoke warm neutrals are not overridden by accent-tinted mixes
Typography system
Add @fontsource-variable/lora and a global --font-serif token with CJK serif fallbacks (Noto Serif SC, Source Han Serif, Songti SC, etc.)
Introduce a --font-body token and drive <body> font-family from it
Add a Font axis (default | sans | serif) parallel to radius/scale
Resolve font: 'default' against preset defaults (anthropic → serif)
Persist font preference via cookie and apply data-theme-font on <body>
Apply serif OpenType features (kern, liga, calt, tnum) and heading display tuning when serif is active
Remove per-component sans opt-outs so serif inherits through sidebar, tabs, inputs, buttons, badges, and table headers via natural CSS cascade
Keep monospace contexts unchanged via Tailwind preflight and .font-mono
UI and i18n
Add Font selector to the theme config drawer (Auto / Sans / Serif)
Add "Font" and "Select body font" translations for en, zh, fr, ja, ru, vi
Misc
Tighten group and status badge sizing for better balance with serif text
2026-05-26 04:31:13 +08:00
|
|
|
/**
|
|
|
|
|
* Font axis for the theme.
|
|
|
|
|
*
|
|
|
|
|
* - `default` — resolve at runtime from the active preset
|
|
|
|
|
* (see `PRESET_DEFAULT_FONT`). The shipped `default` and `anthropic`
|
|
|
|
|
* presets resolve to serif; other named color presets fall back to
|
|
|
|
|
* sans unless they list a different choice. Mirrors how
|
|
|
|
|
* `radius: 'default'` defers to a per-preset hint.
|
|
|
|
|
* - `sans` — humanist sans (Public Sans), the project's UI fallback.
|
|
|
|
|
* - `serif` — editorial serif (Lora + CJK fallbacks), the project's
|
|
|
|
|
* "soul" typography. Inherits across the whole UI; monospace contexts
|
|
|
|
|
* keep their own family via Tailwind preflight and `.font-mono`.
|
|
|
|
|
*/
|
|
|
|
|
export type ThemeFont = 'default' | 'sans' | 'serif'
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* The resolved (non-`default`) font value applied to the DOM. The provider
|
|
|
|
|
* always sets `data-theme-font` to one of these concrete values so CSS only
|
|
|
|
|
* needs simple attribute selectors (no `:not()` gymnastics, no per-preset
|
|
|
|
|
* font branches).
|
|
|
|
|
*/
|
|
|
|
|
export type ResolvedThemeFont = Exclude<ThemeFont, 'default'>
|
|
|
|
|
|
feat(web/default): unified UI overhaul — Base UI migration, theme presets, rankings dashboard, and table toolbar refactor (#4633)
* 🎨 feat(web/default): add shadcn-style theme presets, radius prefs, and fix selection badges
Integrate the qn-platform–style OKLCH color system into the default frontend while keeping the existing blue-tinted dark tokens for the default theme. Add [data-theme-preset] palettes for seven named presets plus the default zinc-like scale, define [data-theme-radius] overrides so user radius beats preset --radius, and align the Tailwind @custom-variant dark helper with .dark usage.
Introduce ThemeCustomizationProvider to own preset and radius state, persist choices in cookies (theme-preset, theme-radius), and sync data-theme-preset / data-theme-radius on <html>. Wrap the tree in main.tsx.
Extend ConfigDrawer with theme preset swatches (scoped data-theme-preset) and radius previews wired to context; refactor swatch/card markup so selected CircleCheck badges sit outside clipped rows (remove outer overflow-hidden that hid the centered checkmark).
Add i18n keys for preset names, radius, and accessibility labels across en, zh, fr, ja, ru, vi.
* 🎨 fix(web): align segmented controls with theme radius tokens
- Replace hard-coded inner pill radii (rounded-[5px]) on dashboard chart
toolbars with radius-md so the active state follows --radius when users
change Radius in Theme Settings.
- Use nested radii consistent with TabsList/TabsTrigger: outer
rounded-lg (var(--radius)) and inner rounded-md (calc(var(--radius) - 2px))
so the track and active thumb stay concentric at small scales (e.g.
0.3rem) instead of a squared “focus” block inside a rounded shell.
- Apply the same pattern to pricing SegmentedControl and the segmented
groups in consumption-distribution-chart, model-charts, and user-charts.
Verified: bun run typecheck (web/default)
* ✨ feat(pricing): enrich model details with uptime sparkline and API documentation
Add a compact 30-day uptime sparkline (OpenRouter-style bars + aggregate %) with
per-day tooltips, surface it in a status row under quick stats and in the
per-group performance table, and extend mock data so uptime series are stable
and optionally scoped by group.
Introduce an API tab with Shiki-highlighted code samples (cURL, Python,
TypeScript, JavaScript), endpoint-type switching, authentication guidance, a
supported-parameters table, and mock per-group RPM/TPM/RPD limits. Infer
vendor, tokenizer, license, and data-retention hints for a provider & data
privacy card on the Overview tab (capabilities/modalities stay with model
identity; rate limits stay with the API tab).
Update i18n for all new user-facing strings across en, zh, fr, ja, ru, and vi.
* 🏆 feat(rankings): add comprehensive rankings dashboard
Add a mock-data powered rankings experience with period tabs, model, app, and vendor leaderboards, market share and history charts, movers, new releases, and per-category sections while backend analytics are pending.
Link ranked models to pricing details and ranked vendors to filtered pricing results, and include localized copy for all supported frontend locales.
* fix(theme): correct theme preset selection state
- update Base UI Radio selectors to use data-checked/data-unchecked states.
- fix unchecked theme options still showing selected indicators.
- isolate the default theme preview tokens to prevent preset changes from leaking into it.
* fix(setup): correct usage mode radio state
- use Base UI data-checked/data-unchecked states for RadioGroup styling.
- hide radio indicators when options are unchecked to avoid setup page display issues.
- drive usage mode card and icon selection styles from Base UI state.
* fix(auth): submit sign-in and sign-up forms
* 🎨 refactor: Align default theme with shadcn Base Nova and prune legacy customization
Migrate shadcn UI to Base UI primitives via CLI (`base-nova` / `components.json`)
and reinstall full component registry with `--overwrite`, including Hugeicons-backed
widgets and newly added registry components.
- Remove custom multi-preset/theme-radius system (`ThemeCustomizationProvider`, cookies,
preset UI from config drawer); rely on official semantic CSS tokens + light/dark only.
- Replace `theme.css` with shadcn’s documented neutral `:root`/`.dark` palette and
`@theme inline` mappings (plus skeleton token vars for existing shimmer usage).
- Update global styles for Base UI: collapsible animation uses `--collapsible-panel-height`;
clarify scroll-lock override comment.
Application compatibility:
- Keep minimal shims where app code diverged from official APIs (popover collision props,
combobox legacy `options` callers, Spinner prop typing).
- Switch interactive styling from Radix-era `data-state` / `--radix-*` selectors to Base UI
semantics (`data-open`, `data-popup-open`, `data-panel-open`, `--anchor-width`, etc.)
Tooling / docs / build:
- Rename Rsbuild vendor chunk grouping to `@base-ui` + transitive `@radix-ui`.
- Refresh AGENTS.md / CLAUDE.md / classic→default sync skill for Base UI stack.
- Bump `package.json` / lockfile for shadcn-postinstall deps (Hugeicons, chart stack, themes, etc.)
Verified: `bun run typecheck` passes.
Note: `bun run lint` still reports pre-existing hooks rule violations elsewhere;
not addressed in this change.
* 🎨 chore(web/default): unify table toolbar, relocate usage stats, refine filters
- Refactor DataTableToolbar to a single wrapping flex row with a
right-aligned action cluster (Reset / Search / View / Expand) for a
cleaner Ant Design Pro–style filter bar; remove the dedicated stats row
and the toolbar `stats` prop.
- Move Common Logs summary badges (Usage / RPM / TPM) and the sensitive-
data visibility toggle into the page header via CommonLogsHeaderActions
and SectionPageLayout.Actions so the toolbar stays focused on filters.
- Slim CommonLogsFilterBar props (no stats / preActions eye control).
- Improve CompactDateTimeRangePicker: show minute-precision labels on the
trigger (seconds omitted; aligns with datetime-local inputs); widen the
trigger on sm+ breakpoints so the full range is visible without truncation;
apply the same width in task logs filters.
- Simplify DataTableViewOptions: text-only “View” trigger, no sliders icon.
- Earlier layout tweak: extra top padding on SectionPageLayout scroll
content so control focus rings are not clipped by overflow.
* feat(web/default): Base UI migration and component foundation
Migrate from Radix UI to Base UI, rewrite core UI primitives,
update dependencies (recharts, date-fns, next-themes), add
shadcn agent skill documentation, and refresh AI element components.
This is the foundational work from the v2/localmain lineage that
was not covered by the individual feature commits above.
---------
Co-authored-by: t0ng7u <dev@aiass.cc>
Co-authored-by: QuentinHsu <xuquentinyang@gmail.com>
2026-05-06 12:39:36 +08:00
|
|
|
export type ThemeCustomization = {
|
|
|
|
|
preset: ThemePreset
|
🎨 feat(web/default): add Anthropic theme preset and configurable serif typography
Introduce a switchable Anthropic-inspired color preset and a new Font customization axis so users can adopt the editorial serif look across the entire UI, including sidebar navigation, tabs, form controls, buttons, and table headers.
Theme preset
Add anthropic to the theme preset registry with warm cream canvas, slate foreground, and clay/coral accent tokens for light and dark modes
Define explicit surface colors for the Anthropic preset instead of relying on the semantic surface bridge
Exclude anthropic from the primary-color surface bridge so bespoke warm neutrals are not overridden by accent-tinted mixes
Typography system
Add @fontsource-variable/lora and a global --font-serif token with CJK serif fallbacks (Noto Serif SC, Source Han Serif, Songti SC, etc.)
Introduce a --font-body token and drive <body> font-family from it
Add a Font axis (default | sans | serif) parallel to radius/scale
Resolve font: 'default' against preset defaults (anthropic → serif)
Persist font preference via cookie and apply data-theme-font on <body>
Apply serif OpenType features (kern, liga, calt, tnum) and heading display tuning when serif is active
Remove per-component sans opt-outs so serif inherits through sidebar, tabs, inputs, buttons, badges, and table headers via natural CSS cascade
Keep monospace contexts unchanged via Tailwind preflight and .font-mono
UI and i18n
Add Font selector to the theme config drawer (Auto / Sans / Serif)
Add "Font" and "Select body font" translations for en, zh, fr, ja, ru, vi
Misc
Tighten group and status badge sizing for better balance with serif text
2026-05-26 04:31:13 +08:00
|
|
|
font: ThemeFont
|
feat(web/default): unified UI overhaul — Base UI migration, theme presets, rankings dashboard, and table toolbar refactor (#4633)
* 🎨 feat(web/default): add shadcn-style theme presets, radius prefs, and fix selection badges
Integrate the qn-platform–style OKLCH color system into the default frontend while keeping the existing blue-tinted dark tokens for the default theme. Add [data-theme-preset] palettes for seven named presets plus the default zinc-like scale, define [data-theme-radius] overrides so user radius beats preset --radius, and align the Tailwind @custom-variant dark helper with .dark usage.
Introduce ThemeCustomizationProvider to own preset and radius state, persist choices in cookies (theme-preset, theme-radius), and sync data-theme-preset / data-theme-radius on <html>. Wrap the tree in main.tsx.
Extend ConfigDrawer with theme preset swatches (scoped data-theme-preset) and radius previews wired to context; refactor swatch/card markup so selected CircleCheck badges sit outside clipped rows (remove outer overflow-hidden that hid the centered checkmark).
Add i18n keys for preset names, radius, and accessibility labels across en, zh, fr, ja, ru, vi.
* 🎨 fix(web): align segmented controls with theme radius tokens
- Replace hard-coded inner pill radii (rounded-[5px]) on dashboard chart
toolbars with radius-md so the active state follows --radius when users
change Radius in Theme Settings.
- Use nested radii consistent with TabsList/TabsTrigger: outer
rounded-lg (var(--radius)) and inner rounded-md (calc(var(--radius) - 2px))
so the track and active thumb stay concentric at small scales (e.g.
0.3rem) instead of a squared “focus” block inside a rounded shell.
- Apply the same pattern to pricing SegmentedControl and the segmented
groups in consumption-distribution-chart, model-charts, and user-charts.
Verified: bun run typecheck (web/default)
* ✨ feat(pricing): enrich model details with uptime sparkline and API documentation
Add a compact 30-day uptime sparkline (OpenRouter-style bars + aggregate %) with
per-day tooltips, surface it in a status row under quick stats and in the
per-group performance table, and extend mock data so uptime series are stable
and optionally scoped by group.
Introduce an API tab with Shiki-highlighted code samples (cURL, Python,
TypeScript, JavaScript), endpoint-type switching, authentication guidance, a
supported-parameters table, and mock per-group RPM/TPM/RPD limits. Infer
vendor, tokenizer, license, and data-retention hints for a provider & data
privacy card on the Overview tab (capabilities/modalities stay with model
identity; rate limits stay with the API tab).
Update i18n for all new user-facing strings across en, zh, fr, ja, ru, and vi.
* 🏆 feat(rankings): add comprehensive rankings dashboard
Add a mock-data powered rankings experience with period tabs, model, app, and vendor leaderboards, market share and history charts, movers, new releases, and per-category sections while backend analytics are pending.
Link ranked models to pricing details and ranked vendors to filtered pricing results, and include localized copy for all supported frontend locales.
* fix(theme): correct theme preset selection state
- update Base UI Radio selectors to use data-checked/data-unchecked states.
- fix unchecked theme options still showing selected indicators.
- isolate the default theme preview tokens to prevent preset changes from leaking into it.
* fix(setup): correct usage mode radio state
- use Base UI data-checked/data-unchecked states for RadioGroup styling.
- hide radio indicators when options are unchecked to avoid setup page display issues.
- drive usage mode card and icon selection styles from Base UI state.
* fix(auth): submit sign-in and sign-up forms
* 🎨 refactor: Align default theme with shadcn Base Nova and prune legacy customization
Migrate shadcn UI to Base UI primitives via CLI (`base-nova` / `components.json`)
and reinstall full component registry with `--overwrite`, including Hugeicons-backed
widgets and newly added registry components.
- Remove custom multi-preset/theme-radius system (`ThemeCustomizationProvider`, cookies,
preset UI from config drawer); rely on official semantic CSS tokens + light/dark only.
- Replace `theme.css` with shadcn’s documented neutral `:root`/`.dark` palette and
`@theme inline` mappings (plus skeleton token vars for existing shimmer usage).
- Update global styles for Base UI: collapsible animation uses `--collapsible-panel-height`;
clarify scroll-lock override comment.
Application compatibility:
- Keep minimal shims where app code diverged from official APIs (popover collision props,
combobox legacy `options` callers, Spinner prop typing).
- Switch interactive styling from Radix-era `data-state` / `--radix-*` selectors to Base UI
semantics (`data-open`, `data-popup-open`, `data-panel-open`, `--anchor-width`, etc.)
Tooling / docs / build:
- Rename Rsbuild vendor chunk grouping to `@base-ui` + transitive `@radix-ui`.
- Refresh AGENTS.md / CLAUDE.md / classic→default sync skill for Base UI stack.
- Bump `package.json` / lockfile for shadcn-postinstall deps (Hugeicons, chart stack, themes, etc.)
Verified: `bun run typecheck` passes.
Note: `bun run lint` still reports pre-existing hooks rule violations elsewhere;
not addressed in this change.
* 🎨 chore(web/default): unify table toolbar, relocate usage stats, refine filters
- Refactor DataTableToolbar to a single wrapping flex row with a
right-aligned action cluster (Reset / Search / View / Expand) for a
cleaner Ant Design Pro–style filter bar; remove the dedicated stats row
and the toolbar `stats` prop.
- Move Common Logs summary badges (Usage / RPM / TPM) and the sensitive-
data visibility toggle into the page header via CommonLogsHeaderActions
and SectionPageLayout.Actions so the toolbar stays focused on filters.
- Slim CommonLogsFilterBar props (no stats / preActions eye control).
- Improve CompactDateTimeRangePicker: show minute-precision labels on the
trigger (seconds omitted; aligns with datetime-local inputs); widen the
trigger on sm+ breakpoints so the full range is visible without truncation;
apply the same width in task logs filters.
- Simplify DataTableViewOptions: text-only “View” trigger, no sliders icon.
- Earlier layout tweak: extra top padding on SectionPageLayout scroll
content so control focus rings are not clipped by overflow.
* feat(web/default): Base UI migration and component foundation
Migrate from Radix UI to Base UI, rewrite core UI primitives,
update dependencies (recharts, date-fns, next-themes), add
shadcn agent skill documentation, and refresh AI element components.
This is the foundational work from the v2/localmain lineage that
was not covered by the individual feature commits above.
---------
Co-authored-by: t0ng7u <dev@aiass.cc>
Co-authored-by: QuentinHsu <xuquentinyang@gmail.com>
2026-05-06 12:39:36 +08:00
|
|
|
radius: ThemeRadius
|
|
|
|
|
scale: ThemeScale
|
|
|
|
|
contentLayout: ContentLayout
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export const DEFAULT_THEME_CUSTOMIZATION: ThemeCustomization = {
|
|
|
|
|
preset: 'default',
|
🎨 feat(web/default): add Anthropic theme preset and configurable serif typography
Introduce a switchable Anthropic-inspired color preset and a new Font customization axis so users can adopt the editorial serif look across the entire UI, including sidebar navigation, tabs, form controls, buttons, and table headers.
Theme preset
Add anthropic to the theme preset registry with warm cream canvas, slate foreground, and clay/coral accent tokens for light and dark modes
Define explicit surface colors for the Anthropic preset instead of relying on the semantic surface bridge
Exclude anthropic from the primary-color surface bridge so bespoke warm neutrals are not overridden by accent-tinted mixes
Typography system
Add @fontsource-variable/lora and a global --font-serif token with CJK serif fallbacks (Noto Serif SC, Source Han Serif, Songti SC, etc.)
Introduce a --font-body token and drive <body> font-family from it
Add a Font axis (default | sans | serif) parallel to radius/scale
Resolve font: 'default' against preset defaults (anthropic → serif)
Persist font preference via cookie and apply data-theme-font on <body>
Apply serif OpenType features (kern, liga, calt, tnum) and heading display tuning when serif is active
Remove per-component sans opt-outs so serif inherits through sidebar, tabs, inputs, buttons, badges, and table headers via natural CSS cascade
Keep monospace contexts unchanged via Tailwind preflight and .font-mono
UI and i18n
Add Font selector to the theme config drawer (Auto / Sans / Serif)
Add "Font" and "Select body font" translations for en, zh, fr, ja, ru, vi
Misc
Tighten group and status badge sizing for better balance with serif text
2026-05-26 04:31:13 +08:00
|
|
|
font: 'default',
|
feat(web/default): unified UI overhaul — Base UI migration, theme presets, rankings dashboard, and table toolbar refactor (#4633)
* 🎨 feat(web/default): add shadcn-style theme presets, radius prefs, and fix selection badges
Integrate the qn-platform–style OKLCH color system into the default frontend while keeping the existing blue-tinted dark tokens for the default theme. Add [data-theme-preset] palettes for seven named presets plus the default zinc-like scale, define [data-theme-radius] overrides so user radius beats preset --radius, and align the Tailwind @custom-variant dark helper with .dark usage.
Introduce ThemeCustomizationProvider to own preset and radius state, persist choices in cookies (theme-preset, theme-radius), and sync data-theme-preset / data-theme-radius on <html>. Wrap the tree in main.tsx.
Extend ConfigDrawer with theme preset swatches (scoped data-theme-preset) and radius previews wired to context; refactor swatch/card markup so selected CircleCheck badges sit outside clipped rows (remove outer overflow-hidden that hid the centered checkmark).
Add i18n keys for preset names, radius, and accessibility labels across en, zh, fr, ja, ru, vi.
* 🎨 fix(web): align segmented controls with theme radius tokens
- Replace hard-coded inner pill radii (rounded-[5px]) on dashboard chart
toolbars with radius-md so the active state follows --radius when users
change Radius in Theme Settings.
- Use nested radii consistent with TabsList/TabsTrigger: outer
rounded-lg (var(--radius)) and inner rounded-md (calc(var(--radius) - 2px))
so the track and active thumb stay concentric at small scales (e.g.
0.3rem) instead of a squared “focus” block inside a rounded shell.
- Apply the same pattern to pricing SegmentedControl and the segmented
groups in consumption-distribution-chart, model-charts, and user-charts.
Verified: bun run typecheck (web/default)
* ✨ feat(pricing): enrich model details with uptime sparkline and API documentation
Add a compact 30-day uptime sparkline (OpenRouter-style bars + aggregate %) with
per-day tooltips, surface it in a status row under quick stats and in the
per-group performance table, and extend mock data so uptime series are stable
and optionally scoped by group.
Introduce an API tab with Shiki-highlighted code samples (cURL, Python,
TypeScript, JavaScript), endpoint-type switching, authentication guidance, a
supported-parameters table, and mock per-group RPM/TPM/RPD limits. Infer
vendor, tokenizer, license, and data-retention hints for a provider & data
privacy card on the Overview tab (capabilities/modalities stay with model
identity; rate limits stay with the API tab).
Update i18n for all new user-facing strings across en, zh, fr, ja, ru, and vi.
* 🏆 feat(rankings): add comprehensive rankings dashboard
Add a mock-data powered rankings experience with period tabs, model, app, and vendor leaderboards, market share and history charts, movers, new releases, and per-category sections while backend analytics are pending.
Link ranked models to pricing details and ranked vendors to filtered pricing results, and include localized copy for all supported frontend locales.
* fix(theme): correct theme preset selection state
- update Base UI Radio selectors to use data-checked/data-unchecked states.
- fix unchecked theme options still showing selected indicators.
- isolate the default theme preview tokens to prevent preset changes from leaking into it.
* fix(setup): correct usage mode radio state
- use Base UI data-checked/data-unchecked states for RadioGroup styling.
- hide radio indicators when options are unchecked to avoid setup page display issues.
- drive usage mode card and icon selection styles from Base UI state.
* fix(auth): submit sign-in and sign-up forms
* 🎨 refactor: Align default theme with shadcn Base Nova and prune legacy customization
Migrate shadcn UI to Base UI primitives via CLI (`base-nova` / `components.json`)
and reinstall full component registry with `--overwrite`, including Hugeicons-backed
widgets and newly added registry components.
- Remove custom multi-preset/theme-radius system (`ThemeCustomizationProvider`, cookies,
preset UI from config drawer); rely on official semantic CSS tokens + light/dark only.
- Replace `theme.css` with shadcn’s documented neutral `:root`/`.dark` palette and
`@theme inline` mappings (plus skeleton token vars for existing shimmer usage).
- Update global styles for Base UI: collapsible animation uses `--collapsible-panel-height`;
clarify scroll-lock override comment.
Application compatibility:
- Keep minimal shims where app code diverged from official APIs (popover collision props,
combobox legacy `options` callers, Spinner prop typing).
- Switch interactive styling from Radix-era `data-state` / `--radix-*` selectors to Base UI
semantics (`data-open`, `data-popup-open`, `data-panel-open`, `--anchor-width`, etc.)
Tooling / docs / build:
- Rename Rsbuild vendor chunk grouping to `@base-ui` + transitive `@radix-ui`.
- Refresh AGENTS.md / CLAUDE.md / classic→default sync skill for Base UI stack.
- Bump `package.json` / lockfile for shadcn-postinstall deps (Hugeicons, chart stack, themes, etc.)
Verified: `bun run typecheck` passes.
Note: `bun run lint` still reports pre-existing hooks rule violations elsewhere;
not addressed in this change.
* 🎨 chore(web/default): unify table toolbar, relocate usage stats, refine filters
- Refactor DataTableToolbar to a single wrapping flex row with a
right-aligned action cluster (Reset / Search / View / Expand) for a
cleaner Ant Design Pro–style filter bar; remove the dedicated stats row
and the toolbar `stats` prop.
- Move Common Logs summary badges (Usage / RPM / TPM) and the sensitive-
data visibility toggle into the page header via CommonLogsHeaderActions
and SectionPageLayout.Actions so the toolbar stays focused on filters.
- Slim CommonLogsFilterBar props (no stats / preActions eye control).
- Improve CompactDateTimeRangePicker: show minute-precision labels on the
trigger (seconds omitted; aligns with datetime-local inputs); widen the
trigger on sm+ breakpoints so the full range is visible without truncation;
apply the same width in task logs filters.
- Simplify DataTableViewOptions: text-only “View” trigger, no sliders icon.
- Earlier layout tweak: extra top padding on SectionPageLayout scroll
content so control focus rings are not clipped by overflow.
* feat(web/default): Base UI migration and component foundation
Migrate from Radix UI to Base UI, rewrite core UI primitives,
update dependencies (recharts, date-fns, next-themes), add
shadcn agent skill documentation, and refresh AI element components.
This is the foundational work from the v2/localmain lineage that
was not covered by the individual feature commits above.
---------
Co-authored-by: t0ng7u <dev@aiass.cc>
Co-authored-by: QuentinHsu <xuquentinyang@gmail.com>
2026-05-06 12:39:36 +08:00
|
|
|
radius: 'default',
|
|
|
|
|
scale: 'default',
|
|
|
|
|
contentLayout: 'full',
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export const THEME_PRESET_VALUES = new Set(
|
|
|
|
|
THEME_PRESETS.map((p) => p.value)
|
|
|
|
|
) as ReadonlySet<ThemePreset>
|
|
|
|
|
|
🎨 feat(web/default): add Anthropic theme preset and configurable serif typography
Introduce a switchable Anthropic-inspired color preset and a new Font customization axis so users can adopt the editorial serif look across the entire UI, including sidebar navigation, tabs, form controls, buttons, and table headers.
Theme preset
Add anthropic to the theme preset registry with warm cream canvas, slate foreground, and clay/coral accent tokens for light and dark modes
Define explicit surface colors for the Anthropic preset instead of relying on the semantic surface bridge
Exclude anthropic from the primary-color surface bridge so bespoke warm neutrals are not overridden by accent-tinted mixes
Typography system
Add @fontsource-variable/lora and a global --font-serif token with CJK serif fallbacks (Noto Serif SC, Source Han Serif, Songti SC, etc.)
Introduce a --font-body token and drive <body> font-family from it
Add a Font axis (default | sans | serif) parallel to radius/scale
Resolve font: 'default' against preset defaults (anthropic → serif)
Persist font preference via cookie and apply data-theme-font on <body>
Apply serif OpenType features (kern, liga, calt, tnum) and heading display tuning when serif is active
Remove per-component sans opt-outs so serif inherits through sidebar, tabs, inputs, buttons, badges, and table headers via natural CSS cascade
Keep monospace contexts unchanged via Tailwind preflight and .font-mono
UI and i18n
Add Font selector to the theme config drawer (Auto / Sans / Serif)
Add "Font" and "Select body font" translations for en, zh, fr, ja, ru, vi
Misc
Tighten group and status badge sizing for better balance with serif text
2026-05-26 04:31:13 +08:00
|
|
|
export const THEME_FONT_VALUES: ReadonlySet<ThemeFont> = new Set([
|
|
|
|
|
'default',
|
|
|
|
|
'sans',
|
|
|
|
|
'serif',
|
|
|
|
|
])
|
|
|
|
|
|
feat(web/default): unified UI overhaul — Base UI migration, theme presets, rankings dashboard, and table toolbar refactor (#4633)
* 🎨 feat(web/default): add shadcn-style theme presets, radius prefs, and fix selection badges
Integrate the qn-platform–style OKLCH color system into the default frontend while keeping the existing blue-tinted dark tokens for the default theme. Add [data-theme-preset] palettes for seven named presets plus the default zinc-like scale, define [data-theme-radius] overrides so user radius beats preset --radius, and align the Tailwind @custom-variant dark helper with .dark usage.
Introduce ThemeCustomizationProvider to own preset and radius state, persist choices in cookies (theme-preset, theme-radius), and sync data-theme-preset / data-theme-radius on <html>. Wrap the tree in main.tsx.
Extend ConfigDrawer with theme preset swatches (scoped data-theme-preset) and radius previews wired to context; refactor swatch/card markup so selected CircleCheck badges sit outside clipped rows (remove outer overflow-hidden that hid the centered checkmark).
Add i18n keys for preset names, radius, and accessibility labels across en, zh, fr, ja, ru, vi.
* 🎨 fix(web): align segmented controls with theme radius tokens
- Replace hard-coded inner pill radii (rounded-[5px]) on dashboard chart
toolbars with radius-md so the active state follows --radius when users
change Radius in Theme Settings.
- Use nested radii consistent with TabsList/TabsTrigger: outer
rounded-lg (var(--radius)) and inner rounded-md (calc(var(--radius) - 2px))
so the track and active thumb stay concentric at small scales (e.g.
0.3rem) instead of a squared “focus” block inside a rounded shell.
- Apply the same pattern to pricing SegmentedControl and the segmented
groups in consumption-distribution-chart, model-charts, and user-charts.
Verified: bun run typecheck (web/default)
* ✨ feat(pricing): enrich model details with uptime sparkline and API documentation
Add a compact 30-day uptime sparkline (OpenRouter-style bars + aggregate %) with
per-day tooltips, surface it in a status row under quick stats and in the
per-group performance table, and extend mock data so uptime series are stable
and optionally scoped by group.
Introduce an API tab with Shiki-highlighted code samples (cURL, Python,
TypeScript, JavaScript), endpoint-type switching, authentication guidance, a
supported-parameters table, and mock per-group RPM/TPM/RPD limits. Infer
vendor, tokenizer, license, and data-retention hints for a provider & data
privacy card on the Overview tab (capabilities/modalities stay with model
identity; rate limits stay with the API tab).
Update i18n for all new user-facing strings across en, zh, fr, ja, ru, and vi.
* 🏆 feat(rankings): add comprehensive rankings dashboard
Add a mock-data powered rankings experience with period tabs, model, app, and vendor leaderboards, market share and history charts, movers, new releases, and per-category sections while backend analytics are pending.
Link ranked models to pricing details and ranked vendors to filtered pricing results, and include localized copy for all supported frontend locales.
* fix(theme): correct theme preset selection state
- update Base UI Radio selectors to use data-checked/data-unchecked states.
- fix unchecked theme options still showing selected indicators.
- isolate the default theme preview tokens to prevent preset changes from leaking into it.
* fix(setup): correct usage mode radio state
- use Base UI data-checked/data-unchecked states for RadioGroup styling.
- hide radio indicators when options are unchecked to avoid setup page display issues.
- drive usage mode card and icon selection styles from Base UI state.
* fix(auth): submit sign-in and sign-up forms
* 🎨 refactor: Align default theme with shadcn Base Nova and prune legacy customization
Migrate shadcn UI to Base UI primitives via CLI (`base-nova` / `components.json`)
and reinstall full component registry with `--overwrite`, including Hugeicons-backed
widgets and newly added registry components.
- Remove custom multi-preset/theme-radius system (`ThemeCustomizationProvider`, cookies,
preset UI from config drawer); rely on official semantic CSS tokens + light/dark only.
- Replace `theme.css` with shadcn’s documented neutral `:root`/`.dark` palette and
`@theme inline` mappings (plus skeleton token vars for existing shimmer usage).
- Update global styles for Base UI: collapsible animation uses `--collapsible-panel-height`;
clarify scroll-lock override comment.
Application compatibility:
- Keep minimal shims where app code diverged from official APIs (popover collision props,
combobox legacy `options` callers, Spinner prop typing).
- Switch interactive styling from Radix-era `data-state` / `--radix-*` selectors to Base UI
semantics (`data-open`, `data-popup-open`, `data-panel-open`, `--anchor-width`, etc.)
Tooling / docs / build:
- Rename Rsbuild vendor chunk grouping to `@base-ui` + transitive `@radix-ui`.
- Refresh AGENTS.md / CLAUDE.md / classic→default sync skill for Base UI stack.
- Bump `package.json` / lockfile for shadcn-postinstall deps (Hugeicons, chart stack, themes, etc.)
Verified: `bun run typecheck` passes.
Note: `bun run lint` still reports pre-existing hooks rule violations elsewhere;
not addressed in this change.
* 🎨 chore(web/default): unify table toolbar, relocate usage stats, refine filters
- Refactor DataTableToolbar to a single wrapping flex row with a
right-aligned action cluster (Reset / Search / View / Expand) for a
cleaner Ant Design Pro–style filter bar; remove the dedicated stats row
and the toolbar `stats` prop.
- Move Common Logs summary badges (Usage / RPM / TPM) and the sensitive-
data visibility toggle into the page header via CommonLogsHeaderActions
and SectionPageLayout.Actions so the toolbar stays focused on filters.
- Slim CommonLogsFilterBar props (no stats / preActions eye control).
- Improve CompactDateTimeRangePicker: show minute-precision labels on the
trigger (seconds omitted; aligns with datetime-local inputs); widen the
trigger on sm+ breakpoints so the full range is visible without truncation;
apply the same width in task logs filters.
- Simplify DataTableViewOptions: text-only “View” trigger, no sliders icon.
- Earlier layout tweak: extra top padding on SectionPageLayout scroll
content so control focus rings are not clipped by overflow.
* feat(web/default): Base UI migration and component foundation
Migrate from Radix UI to Base UI, rewrite core UI primitives,
update dependencies (recharts, date-fns, next-themes), add
shadcn agent skill documentation, and refresh AI element components.
This is the foundational work from the v2/localmain lineage that
was not covered by the individual feature commits above.
---------
Co-authored-by: t0ng7u <dev@aiass.cc>
Co-authored-by: QuentinHsu <xuquentinyang@gmail.com>
2026-05-06 12:39:36 +08:00
|
|
|
export const THEME_RADIUS_VALUES: ReadonlySet<ThemeRadius> = new Set([
|
|
|
|
|
'default',
|
|
|
|
|
'none',
|
|
|
|
|
'sm',
|
|
|
|
|
'md',
|
|
|
|
|
'lg',
|
|
|
|
|
'xl',
|
|
|
|
|
])
|
|
|
|
|
|
|
|
|
|
export const THEME_SCALE_VALUES: ReadonlySet<ThemeScale> = new Set([
|
|
|
|
|
'default',
|
|
|
|
|
'sm',
|
|
|
|
|
'lg',
|
|
|
|
|
])
|
|
|
|
|
|
|
|
|
|
export const CONTENT_LAYOUT_VALUES: ReadonlySet<ContentLayout> = new Set([
|
|
|
|
|
'full',
|
|
|
|
|
'centered',
|
|
|
|
|
])
|
|
|
|
|
|
|
|
|
|
export const THEME_COOKIE_KEYS = {
|
|
|
|
|
preset: 'theme_preset',
|
🎨 feat(web/default): add Anthropic theme preset and configurable serif typography
Introduce a switchable Anthropic-inspired color preset and a new Font customization axis so users can adopt the editorial serif look across the entire UI, including sidebar navigation, tabs, form controls, buttons, and table headers.
Theme preset
Add anthropic to the theme preset registry with warm cream canvas, slate foreground, and clay/coral accent tokens for light and dark modes
Define explicit surface colors for the Anthropic preset instead of relying on the semantic surface bridge
Exclude anthropic from the primary-color surface bridge so bespoke warm neutrals are not overridden by accent-tinted mixes
Typography system
Add @fontsource-variable/lora and a global --font-serif token with CJK serif fallbacks (Noto Serif SC, Source Han Serif, Songti SC, etc.)
Introduce a --font-body token and drive <body> font-family from it
Add a Font axis (default | sans | serif) parallel to radius/scale
Resolve font: 'default' against preset defaults (anthropic → serif)
Persist font preference via cookie and apply data-theme-font on <body>
Apply serif OpenType features (kern, liga, calt, tnum) and heading display tuning when serif is active
Remove per-component sans opt-outs so serif inherits through sidebar, tabs, inputs, buttons, badges, and table headers via natural CSS cascade
Keep monospace contexts unchanged via Tailwind preflight and .font-mono
UI and i18n
Add Font selector to the theme config drawer (Auto / Sans / Serif)
Add "Font" and "Select body font" translations for en, zh, fr, ja, ru, vi
Misc
Tighten group and status badge sizing for better balance with serif text
2026-05-26 04:31:13 +08:00
|
|
|
font: 'theme_font',
|
feat(web/default): unified UI overhaul — Base UI migration, theme presets, rankings dashboard, and table toolbar refactor (#4633)
* 🎨 feat(web/default): add shadcn-style theme presets, radius prefs, and fix selection badges
Integrate the qn-platform–style OKLCH color system into the default frontend while keeping the existing blue-tinted dark tokens for the default theme. Add [data-theme-preset] palettes for seven named presets plus the default zinc-like scale, define [data-theme-radius] overrides so user radius beats preset --radius, and align the Tailwind @custom-variant dark helper with .dark usage.
Introduce ThemeCustomizationProvider to own preset and radius state, persist choices in cookies (theme-preset, theme-radius), and sync data-theme-preset / data-theme-radius on <html>. Wrap the tree in main.tsx.
Extend ConfigDrawer with theme preset swatches (scoped data-theme-preset) and radius previews wired to context; refactor swatch/card markup so selected CircleCheck badges sit outside clipped rows (remove outer overflow-hidden that hid the centered checkmark).
Add i18n keys for preset names, radius, and accessibility labels across en, zh, fr, ja, ru, vi.
* 🎨 fix(web): align segmented controls with theme radius tokens
- Replace hard-coded inner pill radii (rounded-[5px]) on dashboard chart
toolbars with radius-md so the active state follows --radius when users
change Radius in Theme Settings.
- Use nested radii consistent with TabsList/TabsTrigger: outer
rounded-lg (var(--radius)) and inner rounded-md (calc(var(--radius) - 2px))
so the track and active thumb stay concentric at small scales (e.g.
0.3rem) instead of a squared “focus” block inside a rounded shell.
- Apply the same pattern to pricing SegmentedControl and the segmented
groups in consumption-distribution-chart, model-charts, and user-charts.
Verified: bun run typecheck (web/default)
* ✨ feat(pricing): enrich model details with uptime sparkline and API documentation
Add a compact 30-day uptime sparkline (OpenRouter-style bars + aggregate %) with
per-day tooltips, surface it in a status row under quick stats and in the
per-group performance table, and extend mock data so uptime series are stable
and optionally scoped by group.
Introduce an API tab with Shiki-highlighted code samples (cURL, Python,
TypeScript, JavaScript), endpoint-type switching, authentication guidance, a
supported-parameters table, and mock per-group RPM/TPM/RPD limits. Infer
vendor, tokenizer, license, and data-retention hints for a provider & data
privacy card on the Overview tab (capabilities/modalities stay with model
identity; rate limits stay with the API tab).
Update i18n for all new user-facing strings across en, zh, fr, ja, ru, and vi.
* 🏆 feat(rankings): add comprehensive rankings dashboard
Add a mock-data powered rankings experience with period tabs, model, app, and vendor leaderboards, market share and history charts, movers, new releases, and per-category sections while backend analytics are pending.
Link ranked models to pricing details and ranked vendors to filtered pricing results, and include localized copy for all supported frontend locales.
* fix(theme): correct theme preset selection state
- update Base UI Radio selectors to use data-checked/data-unchecked states.
- fix unchecked theme options still showing selected indicators.
- isolate the default theme preview tokens to prevent preset changes from leaking into it.
* fix(setup): correct usage mode radio state
- use Base UI data-checked/data-unchecked states for RadioGroup styling.
- hide radio indicators when options are unchecked to avoid setup page display issues.
- drive usage mode card and icon selection styles from Base UI state.
* fix(auth): submit sign-in and sign-up forms
* 🎨 refactor: Align default theme with shadcn Base Nova and prune legacy customization
Migrate shadcn UI to Base UI primitives via CLI (`base-nova` / `components.json`)
and reinstall full component registry with `--overwrite`, including Hugeicons-backed
widgets and newly added registry components.
- Remove custom multi-preset/theme-radius system (`ThemeCustomizationProvider`, cookies,
preset UI from config drawer); rely on official semantic CSS tokens + light/dark only.
- Replace `theme.css` with shadcn’s documented neutral `:root`/`.dark` palette and
`@theme inline` mappings (plus skeleton token vars for existing shimmer usage).
- Update global styles for Base UI: collapsible animation uses `--collapsible-panel-height`;
clarify scroll-lock override comment.
Application compatibility:
- Keep minimal shims where app code diverged from official APIs (popover collision props,
combobox legacy `options` callers, Spinner prop typing).
- Switch interactive styling from Radix-era `data-state` / `--radix-*` selectors to Base UI
semantics (`data-open`, `data-popup-open`, `data-panel-open`, `--anchor-width`, etc.)
Tooling / docs / build:
- Rename Rsbuild vendor chunk grouping to `@base-ui` + transitive `@radix-ui`.
- Refresh AGENTS.md / CLAUDE.md / classic→default sync skill for Base UI stack.
- Bump `package.json` / lockfile for shadcn-postinstall deps (Hugeicons, chart stack, themes, etc.)
Verified: `bun run typecheck` passes.
Note: `bun run lint` still reports pre-existing hooks rule violations elsewhere;
not addressed in this change.
* 🎨 chore(web/default): unify table toolbar, relocate usage stats, refine filters
- Refactor DataTableToolbar to a single wrapping flex row with a
right-aligned action cluster (Reset / Search / View / Expand) for a
cleaner Ant Design Pro–style filter bar; remove the dedicated stats row
and the toolbar `stats` prop.
- Move Common Logs summary badges (Usage / RPM / TPM) and the sensitive-
data visibility toggle into the page header via CommonLogsHeaderActions
and SectionPageLayout.Actions so the toolbar stays focused on filters.
- Slim CommonLogsFilterBar props (no stats / preActions eye control).
- Improve CompactDateTimeRangePicker: show minute-precision labels on the
trigger (seconds omitted; aligns with datetime-local inputs); widen the
trigger on sm+ breakpoints so the full range is visible without truncation;
apply the same width in task logs filters.
- Simplify DataTableViewOptions: text-only “View” trigger, no sliders icon.
- Earlier layout tweak: extra top padding on SectionPageLayout scroll
content so control focus rings are not clipped by overflow.
* feat(web/default): Base UI migration and component foundation
Migrate from Radix UI to Base UI, rewrite core UI primitives,
update dependencies (recharts, date-fns, next-themes), add
shadcn agent skill documentation, and refresh AI element components.
This is the foundational work from the v2/localmain lineage that
was not covered by the individual feature commits above.
---------
Co-authored-by: t0ng7u <dev@aiass.cc>
Co-authored-by: QuentinHsu <xuquentinyang@gmail.com>
2026-05-06 12:39:36 +08:00
|
|
|
radius: 'theme_radius',
|
|
|
|
|
scale: 'theme_scale',
|
|
|
|
|
contentLayout: 'theme_content_layout',
|
|
|
|
|
} as const
|
🎨 feat(web/default): add Anthropic theme preset and configurable serif typography
Introduce a switchable Anthropic-inspired color preset and a new Font customization axis so users can adopt the editorial serif look across the entire UI, including sidebar navigation, tabs, form controls, buttons, and table headers.
Theme preset
Add anthropic to the theme preset registry with warm cream canvas, slate foreground, and clay/coral accent tokens for light and dark modes
Define explicit surface colors for the Anthropic preset instead of relying on the semantic surface bridge
Exclude anthropic from the primary-color surface bridge so bespoke warm neutrals are not overridden by accent-tinted mixes
Typography system
Add @fontsource-variable/lora and a global --font-serif token with CJK serif fallbacks (Noto Serif SC, Source Han Serif, Songti SC, etc.)
Introduce a --font-body token and drive <body> font-family from it
Add a Font axis (default | sans | serif) parallel to radius/scale
Resolve font: 'default' against preset defaults (anthropic → serif)
Persist font preference via cookie and apply data-theme-font on <body>
Apply serif OpenType features (kern, liga, calt, tnum) and heading display tuning when serif is active
Remove per-component sans opt-outs so serif inherits through sidebar, tabs, inputs, buttons, badges, and table headers via natural CSS cascade
Keep monospace contexts unchanged via Tailwind preflight and .font-mono
UI and i18n
Add Font selector to the theme config drawer (Auto / Sans / Serif)
Add "Font" and "Select body font" translations for en, zh, fr, ja, ru, vi
Misc
Tighten group and status badge sizing for better balance with serif text
2026-05-26 04:31:13 +08:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Preset → default font mapping. Used by the provider to resolve the user's
|
|
|
|
|
* `font: 'default'` preference against the active preset.
|
|
|
|
|
*
|
|
|
|
|
* Co-located with the preset registry so a preset's signature typography
|
|
|
|
|
* is declared in one place. Presets not listed here fall back to the
|
|
|
|
|
* `resolveThemeFont` default of `sans`. The shipped `default` preset
|
|
|
|
|
* opts into serif so the editorial Lora voice is the out-of-the-box
|
|
|
|
|
* experience; vivid color presets stay on the humanist sans so their
|
|
|
|
|
* accents read clearly without competing with the body type.
|
|
|
|
|
*/
|
|
|
|
|
export const PRESET_DEFAULT_FONT: Partial<
|
|
|
|
|
Record<ThemePreset, ResolvedThemeFont>
|
|
|
|
|
> = {
|
|
|
|
|
default: 'serif',
|
|
|
|
|
anthropic: 'serif',
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Resolve a user font preference + active preset into the concrete font that
|
|
|
|
|
* should drive the DOM. Pure function so it's safe to call inside both the
|
|
|
|
|
* effect that applies the attribute and the UI preview that hints at what
|
|
|
|
|
* `default` will render as.
|
|
|
|
|
*/
|
|
|
|
|
export function resolveThemeFont(
|
|
|
|
|
font: ThemeFont,
|
|
|
|
|
preset: ThemePreset
|
|
|
|
|
): ResolvedThemeFont {
|
|
|
|
|
if (font === 'default') {
|
|
|
|
|
return PRESET_DEFAULT_FONT[preset] ?? 'sans'
|
|
|
|
|
}
|
|
|
|
|
return font
|
|
|
|
|
}
|