Skip to content

Commit ba66d3f

Browse files
authored
chore: release v2.1.15
Merge pull request #162 from remnawave/dev
2 parents 5abfa43 + b6f6633 commit ba66d3f

File tree

20 files changed

+538
-269
lines changed

20 files changed

+538
-269
lines changed

index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@
148148

149149
<meta
150150
name="viewport"
151-
content="minimum-scale=1, initial-scale=1, width=device-width, user-scalable=no"
151+
content="minimum-scale=1, initial-scale=1, width=device-width, user-scalable=no, viewport-fit=cover"
152152
/>
153153
<meta name="description" content="Remnawave Dashboard" />
154154
<title>Remnawave</title>

package-lock.json

Lines changed: 140 additions & 140 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "@remnawave/frontend",
33
"private": false,
44
"type": "module",
5-
"version": "2.1.14",
5+
"version": "2.1.15",
66
"license": "AGPL-3.0-only",
77
"author": "REMNAWAVE <github.com/remnawave>",
88
"homepage": "https://github.com/remnawave",
@@ -38,35 +38,35 @@
3838
"@dnd-kit/modifiers": "^9.0.0",
3939
"@dnd-kit/sortable": "^10.0.0",
4040
"@dnd-kit/utilities": "^3.2.2",
41-
"@formkit/auto-animate": "^0.8.4",
41+
"@formkit/auto-animate": "^0.9.0",
4242
"@gfazioli/mantine-list-view-table": "1.1.0",
4343
"@gfazioli/mantine-split-pane": "^2.4.0",
44-
"@gfazioli/mantine-text-animate": "^2.2.5",
44+
"@gfazioli/mantine-text-animate": "^2.3.0",
4545
"@highcharts/react": "^4.0.0-beta.5",
4646
"@lukemorales/query-key-factory": "^1.3.4",
47-
"@mantine/carousel": "^8.3.1",
48-
"@mantine/charts": "^8.3.1",
49-
"@mantine/code-highlight": "^8.3.1",
50-
"@mantine/core": "^8.3.1",
51-
"@mantine/dates": "^8.3.1",
52-
"@mantine/dropzone": "^8.3.1",
53-
"@mantine/form": "^8.3.1",
54-
"@mantine/hooks": "^8.3.1",
55-
"@mantine/modals": "^8.3.1",
56-
"@mantine/notifications": "^8.3.1",
57-
"@mantine/nprogress": "^8.3.1",
58-
"@mantine/spotlight": "^8.3.1",
47+
"@mantine/carousel": "^8.3.2",
48+
"@mantine/charts": "^8.3.2",
49+
"@mantine/code-highlight": "^8.3.2",
50+
"@mantine/core": "^8.3.2",
51+
"@mantine/dates": "^8.3.2",
52+
"@mantine/dropzone": "^8.3.2",
53+
"@mantine/form": "^8.3.2",
54+
"@mantine/hooks": "^8.3.2",
55+
"@mantine/modals": "^8.3.2",
56+
"@mantine/notifications": "^8.3.2",
57+
"@mantine/nprogress": "^8.3.2",
58+
"@mantine/spotlight": "^8.3.2",
5959
"@monaco-editor/react": "^4.7.0",
6060
"@paralleldrive/cuid2": "2.2.2",
61-
"@remnawave/backend-contract": "2.1.57",
61+
"@remnawave/backend-contract": "2.1.62",
6262
"@stablelib/base64": "^2.0.1",
6363
"@stablelib/x25519": "^2.0.1",
64-
"@tabler/icons-react": "^3.34.1",
65-
"@tanstack/react-query": "^5.85.6",
66-
"@tanstack/react-query-devtools": "^5.85.6",
64+
"@tabler/icons-react": "^3.35.0",
65+
"@tanstack/react-query": "^5.90.2",
66+
"@tanstack/react-query-devtools": "^5.90.2",
6767
"@tanstack/react-virtual": "^3.13.12",
6868
"@virtuoso.dev/masonry": "^1.3.5",
69-
"axios": "^1.11.0",
69+
"axios": "^1.12.2",
7070
"buffer": "^6.0.3",
7171
"clsx": "^2.1.1",
7272
"color-hash": "^2.0.2",
@@ -77,9 +77,9 @@
7777
"dayjs": "^1.11.18",
7878
"dotenv": "^16.5.0",
7979
"generate-password-ts": "^1.6.5",
80-
"highcharts": "^12.3.0",
80+
"highcharts": "^12.4.0",
8181
"highcharts-react-official": "^3.2.2",
82-
"i18next": "^25.4.2",
82+
"i18next": "^25.5.2",
8383
"i18next-browser-languagedetector": "^8.2.0",
8484
"i18next-http-backend": "^3.0.2",
8585
"json-edit-react": "^1.28.2",
@@ -89,8 +89,8 @@
8989
"mantine-react-table": "^2.0.0-beta.9",
9090
"monaco-editor": "^0.52.2",
9191
"monaco-yaml": "^5.4.0",
92-
"motion": "12.23.11",
93-
"nanoid": "^5.1.5",
92+
"motion": "12.23.21",
93+
"nanoid": "^5.1.6",
9494
"react": "^19.1.1",
9595
"react-country-flag": "^3.1.0",
9696
"react-dom": "^19.1.1",

public/locales/en/remnawave.json

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -424,7 +424,13 @@
424424
"override-sni-from-address": "Override SNI from Address",
425425
"override-sni-from-address-description": "This option replaces the SNI value with the specified Address field value. This is particularly useful for multi-domain configurations or wildcard domains configuration.",
426426
"legacy-options": "Legacy options",
427-
"allow-insecure": "Allow Insecure"
427+
"allow-insecure": "Allow Insecure",
428+
"shuffled-hosts-hover-card": "Shuffled hosts will be placed at the top of the list and sorted randomly.",
429+
"vless-route-description": "From 0 to 65535, empty to disable",
430+
"misc-settings": "Misc settings",
431+
"shuffle-host": "Shuffle Host",
432+
"mihomo-specific": "Mihomo Specific",
433+
"enable-x25519mlkem768": "Enable x25519mlkem768"
428434
},
429435
"base-node-form": {
430436
"country": "Country",
@@ -1600,7 +1606,8 @@
16001606
"nothing-to-show": "Nothing to show...",
16011607
"request-at": "Request At",
16021608
"ip-address": "IP Address",
1603-
"user-agent": "User Agent"
1609+
"user-agent": "User Agent",
1610+
"request-history": "Request History"
16041611
}
16051612
},
16061613
"use-hwid-inspector-table-columns": {

public/locales/fa/remnawave.json

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -424,7 +424,13 @@
424424
"override-sni-from-address": "بازنویسی SNI از آدرس دامنه",
425425
"override-sni-from-address-description": "این گزینه مقدار SNI را با آدرس مشخص شده جایگزین خواهد کرد که برای کانفیگ‌های چند دامنه‌ای و wildcard قابل استفاده می‌باشد",
426426
"legacy-options": "تنظیمات قدیمی",
427-
"allow-insecure": "اجازه اتصال ناامن"
427+
"allow-insecure": "اجازه اتصال ناامن",
428+
"shuffled-hosts-hover-card": "هاست‌های به هم زده شده در بالای لیست قرار گرفته و به صورت تصادفی مرتب خواهند شد.",
429+
"vless-route-description": "از 0 تا 65535، برای غیرفعالسازی خالی بگذارید",
430+
"misc-settings": "تنظیمات متفرقه",
431+
"shuffle-host": "به هم زدن هاست‌ها",
432+
"mihomo-specific": "مخصوص Mihomo",
433+
"enable-x25519mlkem768": "فعالسازی x25519mlkem768"
428434
},
429435
"base-node-form": {
430436
"country": "کشور",
@@ -1600,7 +1606,8 @@
16001606
"nothing-to-show": "چیزی برای نشان دادن موجود نیست...",
16011607
"request-at": "درخواست شده در",
16021608
"ip-address": "آدرس IP",
1603-
"user-agent": "عامل کاربر"
1609+
"user-agent": "عامل کاربر",
1610+
"request-history": "تاریخچه درخواست"
16041611
}
16051612
},
16061613
"use-hwid-inspector-table-columns": {

public/locales/ru/remnawave.json

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -424,7 +424,13 @@
424424
"override-sni-from-address": "Переопределить SNI из адреса",
425425
"override-sni-from-address-description": "Эта опция заменяет значение SNI на указанное значение поля Адрес. Это особенно полезно для опций: мульти-домен или Wildcard-домен.",
426426
"legacy-options": "Устаревшие настройки",
427-
"allow-insecure": "Разрешить небезопасные"
427+
"allow-insecure": "Разрешить небезопасные",
428+
"shuffled-hosts-hover-card": "Перемешиваемые узлы будут помещены в верхней части списка и отсортированы случайным образом.",
429+
"vless-route-description": "От 0 до 65535, оставьте пустым для отключения",
430+
"misc-settings": "Прочие настройки",
431+
"shuffle-host": "Перемешать хост",
432+
"mihomo-specific": "Настройки для Mihomo",
433+
"enable-x25519mlkem768": "Включение x25519mlkem768"
428434
},
429435
"base-node-form": {
430436
"country": "Страна",
@@ -1600,7 +1606,8 @@
16001606
"nothing-to-show": "Нечего показывать...",
16011607
"request-at": "Запрос в",
16021608
"ip-address": "IP-адрес",
1603-
"user-agent": "User Agent"
1609+
"user-agent": "User Agent",
1610+
"request-history": "История запросов"
16041611
}
16051612
},
16061613
"use-hwid-inspector-table-columns": {

public/locales/zh/remnawave.json

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -424,7 +424,13 @@
424424
"override-sni-from-address": "从地址覆盖SNI地址",
425425
"override-sni-from-address-description": "此选项用指定的地址字段值替换SNI值。这对于多域配置或通配符域配置特别有用。",
426426
"legacy-options": "传统选项",
427-
"allow-insecure": "允许不安全的连接"
427+
"allow-insecure": "允许不安全的连接",
428+
"shuffled-hosts-hover-card": "Shuffled hosts will be placed at the top of the list and sorted randomly.",
429+
"vless-route-description": "From 0 to 65535, empty to disable",
430+
"misc-settings": "Misc settings",
431+
"shuffle-host": "Shuffle Host",
432+
"mihomo-specific": "Mihomo Specific",
433+
"enable-x25519mlkem768": "Enable x25519mlkem768"
428434
},
429435
"base-node-form": {
430436
"country": "国家",
@@ -1600,7 +1606,8 @@
16001606
"nothing-to-show": "没有要显示的内容...",
16011607
"request-at": "请求时间",
16021608
"ip-address": "IP 地址",
1603-
"user-agent": "User Agent"
1609+
"user-agent": "User Agent",
1610+
"request-history": "Request History"
16041611
}
16051612
},
16061613
"use-hwid-inspector-table-columns": {

src/app/layouts/dashboard/main-layout/main.layout.tsx

Lines changed: 58 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {
66
Button,
77
Container,
88
Group,
9+
Image,
910
Indicator,
1011
ScrollArea,
1112
Text
@@ -21,17 +22,21 @@ import axios from 'axios'
2122
import { getBuildInfo } from '@shared/utils/get-build-info/get-build-info.util'
2223
import { ScrollToTopWrapper } from '@shared/hocs/scroll-to-top/scroll-to-top'
2324
import { BuildInfoModal } from '@shared/ui/build-info-modal/build-info-modal'
25+
import { useGetAuthStatus } from '@shared/api/hooks/auth/auth.query.hooks'
2426
import { useEasterEggStore } from '@entities/dashboard/easter-egg-store'
2527
import { HeaderControls } from '@shared/ui/header-buttons'
2628
import { sToMs } from '@shared/utils/time-utils'
2729
import { ROUTES } from '@shared/constants'
30+
import { LoadingScreen } from '@shared/ui'
2831
import { Logo } from '@shared/ui/logo'
2932

3033
import { Navigation } from './navbar/navigation.layout'
3134
import packageJson from '../../../../../package.json'
3235
import classes from './Main.module.css'
3336

3437
export function MainLayout() {
38+
const { data: authStatus, isFetching } = useGetAuthStatus()
39+
3540
const [mobileOpened, { toggle: toggleMobile }] = useDisclosure()
3641
const [desktopOpened, { toggle: toggleDesktop }] = useDisclosure(true)
3742
const [buildInfoModalOpened, setBuildInfoModalOpened] = useState(false)
@@ -107,7 +112,16 @@ export function MainLayout() {
107112
setIsNewVersionAvailable(semver.gt(versions.latestVersion, versions.currentVersion))
108113
}, [versions])
109114

115+
if (isFetching) {
116+
return <LoadingScreen height="100vh" />
117+
}
118+
110119
const handleClick = () => {
120+
if (isEasterEggUnlocked) {
121+
navigate(ROUTES.DASHBOARD.EASTER_EGG.PROXY_DEFENSE)
122+
return
123+
}
124+
111125
incrementClick()
112126

113127
setIsLogoAnimating(true)
@@ -195,6 +209,48 @@ export function MainLayout() {
195209
</Indicator>
196210
)
197211

212+
const customLogo = () => {
213+
if (!authStatus?.branding.logoUrl) {
214+
return logoElement
215+
}
216+
217+
return (
218+
<Image
219+
alt="logo"
220+
fallbackSrc="/favicons/logo.svg"
221+
fit="contain"
222+
onClick={handleClick}
223+
src={authStatus.branding.logoUrl}
224+
style={{
225+
maxWidth: '30px',
226+
maxHeight: '30px',
227+
width: '30px',
228+
height: '30px',
229+
cursor: 'pointer'
230+
}}
231+
/>
232+
)
233+
}
234+
235+
const customTitle = () => {
236+
if (!authStatus?.branding.title) {
237+
return titleElement
238+
}
239+
240+
return (
241+
<Text
242+
fw={700}
243+
size="lg"
244+
style={{
245+
userSelect: 'none',
246+
WebkitUserSelect: 'none'
247+
}}
248+
>
249+
{authStatus.branding.title}
250+
</Text>
251+
)
252+
}
253+
198254
return isMediaQueryReady ? (
199255
<AppShell
200256
header={{ height: 64 }}
@@ -251,8 +307,8 @@ export function MainLayout() {
251307
</Box>
252308

253309
<Group gap="xs" justify="center" w="100%">
254-
{logoElement}
255-
{titleElement}
310+
{customLogo()}
311+
{customTitle()}
256312
{!isMobile && versionBadge}
257313
</Group>
258314

src/entities/dashboard/users/ui/table-columns/connected-node/connected-node.column.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ export function ConnectedNodeColumnEntity(props: IProps) {
1414
flex: 1,
1515
minWidth: 0
1616
}}
17+
wrap="nowrap"
1718
>
1819
{lastConnectedNode?.countryCode && lastConnectedNode.countryCode !== 'XX' && (
1920
<ReactCountryFlag

src/entities/dashboard/users/ui/table-columns/data-usage/data-usage.column.tsx

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,25 +29,32 @@ export function DataUsageColumnEntity(props: IProps) {
2929
<Group justify="space-between">
3030
<Text c="red.5" fw={700} fz="xs">
3131
{usedTrafficPercentage.toFixed(2)}%
32+
<Text c="dimmed" component="span" fz="xs">
33+
{' '}
34+
{strategy}
35+
</Text>
3236
</Text>
3337
<Text c="teal.5" fw={700} fz="xs">
38+
<Text c="dimmed" component="span" fw={550} fz="xs" size="xs">
39+
Σ {lifetimeUsedTraffic}
40+
</Text>{' '}
3441
{(100 - usedTrafficPercentage).toFixed(2)}%
3542
</Text>
3643
</Group>
3744
<Progress
3845
color={usedTrafficPercentage > 100 ? 'orange.7' : 'teal.9'}
3946
radius="xs"
4047
size="md"
41-
striped
4248
value={usedTrafficPercentage}
4349
/>
4450

4551
<Group gap="xs" justify="space-between" mt={2}>
46-
<Text c="dimmed" fw={'550'} size="xs">
47-
{totalUsedTraffic} {limitBytes === '0' ? '' : `/ ${limitBytes}`} {strategy}
52+
<Text c="dimmed" fw={550} size="xs">
53+
{totalUsedTraffic === '0' ? '0 GiB' : totalUsedTraffic}
4854
</Text>
49-
<Text c="dimmed" fw={'550'} size="xs">
50-
Σ {lifetimeUsedTraffic}
55+
56+
<Text c="dimmed" fw={550} size="xs">
57+
{limitBytes === '0' ? '∞' : `${limitBytes}`}
5158
</Text>
5259
</Group>
5360
</Box>

0 commit comments

Comments
 (0)