style(Account UX): resilient binding layout, copyable popovers, pastel header, and custom pay colors

- AccountManagement.js
  - Prevent action button from shifting when account IDs are long by adding gap, min-w-0, and flex-shrink-0; keep buttons in a fixed position.
  - Add copyable Popover for account identifiers (email/GitHub/OIDC/Telegram/LinuxDO) using Typography.Paragraph with copyable; reveal full text on hover.
  - Ensure ellipsis works by rendering the popover trigger as `block max-w-full truncate`.
  - Import Popover and wire up `renderAccountInfo` across all binding rows.

- UserInfoHeader.js
  - Apply unified `with-pastel-balls` background to match PricingVendorIntro.
  - Remove legacy absolute-positioned circles and top gradient bar to avoid visual overlap.

- RechargeCard.jsx
  - Colorize non-Alipay/WeChat/Stripe payment icons using backend `pay_methods[].color`; fallback to `var(--semi-color-text-2)`.
  - Add `showClear` to the redemption code input for quicker clearing.

Notes:
- No linter errors introduced.
- i18n strings and behavior remain unchanged except for improved UX and visual consistency.
This commit is contained in:
t0ng7u
2025-08-17 11:45:55 +08:00
parent a6ad49dba0
commit c123ea3179
8 changed files with 208 additions and 157 deletions

View File

@@ -106,7 +106,7 @@ const NotificationSettings = ({
onSubmit={handleSubmit}
>
{() => (
<Tabs type="line" defaultActiveKey="notification">
<Tabs type="card" defaultActiveKey="notification">
{/* 通知配置 Tab */}
<TabPane
tab={
@@ -223,11 +223,11 @@ const NotificationSettings = ({
/>
</div>
<div className="text-xs text-gray-500 leading-relaxed">
<div><strong>type:</strong> (quota_exceed: )</div>
<div><strong>title:</strong> </div>
<div><strong>content:</strong> {`{{value}}`} </div>
<div><strong>values:</strong> content</div>
<div><strong>timestamp:</strong> Unix</div>
<div><strong>type:</strong> {t(' (quota_exceed: )')} </div>
<div><strong>title:</strong> {t('')}</div>
<div><strong>content:</strong> {t(' {{value}} ')}</div>
<div><strong>values:</strong> {t('content')}</div>
<div><strong>timestamp:</strong> {t('Unix')}</div>
</div>
</div>
</Form.Slot>