mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-10-23 22:35:03 +03:00
feat(sub): redesign the subscription page around usage, tabs and app imports
The info page was a long key/value table followed by every link and two app dropdowns, and it rendered left-to-right even for Persian and Arabic. It now leads with a usage ring, the remaining quota and a stats grid, and splits the rest into Subscription / Apps / Configs tabs. - Status tells expired, data-used-up and disabled apart instead of one "Inactive", replacing the hard-coded English expiry chip. - The Apps tab keeps every Android and iOS app with its existing deep link, preselects the visitor's platform and adds Windows: Hiddify and Clash Verge Rev import directly, v2rayN copies the link. - fa-IR and ar-EG render right-to-left; URLs, IDs and sizes stay LTR. - The footer shows the support link and the client refresh interval, so subPageContext now carries subUpdates (also in ?format=info). - Status, days-left and app deep-link logic lives in subPageModel.ts, with unit tests pinning the deep links the page already shipped.
This commit is contained in:
@@ -81,9 +81,9 @@ describe('QrPanel dense AmneziaWG config', () => {
|
||||
const completeQr = qrGeometry(complete);
|
||||
const shorterQr = qrGeometry(withoutDisableCookies);
|
||||
|
||||
expect(completeQr.viewBox).toBe('0 0 105 105');
|
||||
expect(shorterQr.viewBox).toBe('0 0 101 101');
|
||||
expect(completeQr.foreground).toMatch(/^M4 4h7/);
|
||||
expect(shorterQr.foreground).toMatch(/^M4 4h7/);
|
||||
expect(completeQr.viewBox).toBe('0 0 101 101');
|
||||
expect(shorterQr.viewBox).toBe('0 0 97 97');
|
||||
expect(completeQr.foreground).toMatch(/^M2 2h7/);
|
||||
expect(shorterQr.foreground).toMatch(/^M2 2h7/);
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user