From 00745b54f1d958c2aede388ed71b1229fe363cf8 Mon Sep 17 00:00:00 2001 From: pa Date: Fri, 2 Jan 2026 22:24:28 +0900 Subject: [PATCH] UI Refresh --- package-lock.json | 88 +- package.json | 4 +- src/App.vue | 6 +- src/app.css | 1091 +++++++++++++---- src/assets/scss/flags.css | 2 +- src/assets/scss/noty.css | 53 + src/assets/scss/themes/app_legacy.scss | 1052 ++++++++++++++++ src/components/AvatarInfo.vue | 12 +- src/components/DataTable.vue | 2 +- src/components/FullscreenImagePreview.vue | 2 +- src/components/InstanceInfo.vue | 12 +- src/components/Location.vue | 85 +- src/components/LocationWorld.vue | 33 +- src/components/NativeTooltip.vue | 537 -------- src/components/NavMenu.vue | 627 +++++----- .../dialogs/AvatarDialog/AvatarDialog.vue | 9 +- .../AvatarDialog/ChangeAvatarImageDialog.vue | 2 +- .../AvatarDialog/SetAvatarTagsDialog.vue | 4 +- src/components/dialogs/CustomNavDialog.vue | 5 +- .../dialogs/GroupDialog/GroupDialog.vue | 15 +- .../GroupMemberModerationDialog.vue | 2 +- src/components/dialogs/NewInstanceDialog.vue | 2 +- src/components/dialogs/SendBoopDialog.vue | 12 +- .../dialogs/UserDialog/UserActionDropdown.vue | 16 +- .../dialogs/UserDialog/UserDialog.vue | 72 +- .../WorldDialog/ChangeWorldImageDialog.vue | 2 +- .../dialogs/WorldDialog/WorldDialog.vue | 14 +- src/composables/useElementTheme.js | 141 +++ src/composables/useTableHeight.js | 44 + src/index.html | 2 - src/localization/cs.json | 2 + src/localization/en.json | 19 +- src/localization/es.json | 2 + src/localization/fr.json | 2 + src/localization/hu.json | 2 + src/localization/ja.json | 2 + src/localization/ko.json | 2 + src/localization/pl.json | 2 + src/localization/pt.json | 2 + src/localization/ru.json | 2 + src/localization/th.json | 2 + src/localization/vi.json | 2 + src/localization/zh-CN.json | 2 + src/localization/zh-TW.json | 2 + src/plugin/components.js | 2 - src/plugin/noty.js | 2 +- src/plugin/router.js | 7 + src/{assets => public}/images/blank.png | Bin src/{assets => public}/images/flags.png | Bin src/{assets => public}/images/masks/askme.svg | 0 src/{assets => public}/images/masks/busy.svg | 0 .../images/masks/joinme.svg | 0 src/{assets => public}/images/masks/phone.svg | 0 .../images/masks/usercutout.svg | 0 .../images/masks/usercutoutmobile.svg | 0 .../images/vr}/base_status_off.png | Bin .../images/vr}/base_status_ready.png | Bin .../images/vr}/controller_status_off.png | Bin .../images/vr}/controller_status_ready.png | Bin .../vr}/controller_status_ready_charging.png | Bin .../vr}/controller_status_ready_low.png | Bin .../images/vr}/headset_quest_status_off.png | Bin .../images/vr}/headset_quest_status_ready.png | Bin .../headset_quest_status_ready_charging.png | Bin .../vr}/headset_quest_status_ready_low.png | Bin .../images/vr}/left_controller_status_off.png | Bin .../vr}/left_controller_status_ready.png | Bin .../left_controller_status_ready_charging.png | Bin .../vr}/left_controller_status_ready_low.png | Bin .../images/vr}/other_status_off.png | Bin .../images/vr}/other_status_ready.png | Bin .../vr}/other_status_ready_charging.png | Bin .../images/vr}/other_status_ready_low.png | Bin .../vr}/right_controller_status_off.png | Bin .../vr}/right_controller_status_ready.png | Bin ...right_controller_status_ready_charging.png | Bin .../vr}/right_controller_status_ready_low.png | Bin .../images/vr}/tracker_status_off.png | Bin .../images/vr}/tracker_status_ready.png | Bin .../vr}/tracker_status_ready_charging.png | Bin .../images/vr}/tracker_status_ready_low.png | Bin src/shared/constants/accessType.js | 13 + src/shared/constants/index.js | 1 + src/shared/constants/themes.js | 75 +- src/shared/constants/ui.js | 7 + src/shared/utils/base/ui.js | 69 +- src/stores/gallery.js | 14 +- src/stores/settings/appearance.js | 121 +- src/views/Charts/Charts.vue | 7 +- .../Charts/components/InstanceActivity.vue | 31 +- src/views/Charts/components/MutualFriends.vue | 25 +- src/views/Favorites/FavoritesAvatar.vue | 1 + src/views/Favorites/FavoritesFriend.vue | 1 + src/views/Favorites/FavoritesWorld.vue | 1 + src/views/Feed/Feed.vue | 64 +- src/views/FriendList/FriendList.vue | 289 +++-- src/views/FriendLog/FriendLog.vue | 44 +- .../FriendsLocations/FriendsLocations.vue | 34 +- .../components/FriendsLocationsCard.vue | 57 +- src/views/GameLog/GameLog.vue | 95 +- src/views/Layout/AuthenticatedLayout.vue | 17 +- src/views/Moderation/Moderation.vue | 18 +- src/views/Notifications/Notification.vue | 182 ++- src/views/PlayerList/PlayerList.vue | 239 ++-- .../components/PhotonEventTable.vue | 15 +- src/views/Search/Search.vue | 6 +- src/views/Settings/Settings.vue | 2 +- .../Settings/components/SimpleSwitch.vue | 2 +- .../components/Tabs/AppearanceTab.vue | 14 +- src/views/Settings/components/ThemePicker.vue | 207 ++++ src/views/Sidebar/Sidebar.vue | 24 +- src/views/Sidebar/components/FriendItem.vue | 12 +- .../GalleryDialog.vue => Gallery.vue} | 114 +- src/views/Tools/Tools.vue | 20 +- .../components/GroupCalendarEventCard.vue | 10 +- .../Tools/dialogs/ExportFriendsListDialog.vue | 2 +- .../Tools/dialogs/GroupCalendarDialog.vue | 17 +- .../dialogs/ScreenshotMetadataDialog.vue | 6 +- src/vr/Vr.vue | 44 +- src/vr/vr.css | 42 +- 120 files changed, 3931 insertions(+), 2015 deletions(-) create mode 100644 src/assets/scss/noty.css create mode 100644 src/assets/scss/themes/app_legacy.scss delete mode 100644 src/components/NativeTooltip.vue create mode 100644 src/composables/useElementTheme.js create mode 100644 src/composables/useTableHeight.js rename src/{assets => public}/images/blank.png (100%) rename src/{assets => public}/images/flags.png (100%) rename src/{assets => public}/images/masks/askme.svg (100%) rename src/{assets => public}/images/masks/busy.svg (100%) rename src/{assets => public}/images/masks/joinme.svg (100%) rename src/{assets => public}/images/masks/phone.svg (100%) rename src/{assets => public}/images/masks/usercutout.svg (100%) rename src/{assets => public}/images/masks/usercutoutmobile.svg (100%) rename src/{vr/images => public/images/vr}/base_status_off.png (100%) rename src/{vr/images => public/images/vr}/base_status_ready.png (100%) rename src/{vr/images => public/images/vr}/controller_status_off.png (100%) rename src/{vr/images => public/images/vr}/controller_status_ready.png (100%) rename src/{vr/images => public/images/vr}/controller_status_ready_charging.png (100%) rename src/{vr/images => public/images/vr}/controller_status_ready_low.png (100%) rename src/{vr/images => public/images/vr}/headset_quest_status_off.png (100%) rename src/{vr/images => public/images/vr}/headset_quest_status_ready.png (100%) rename src/{vr/images => public/images/vr}/headset_quest_status_ready_charging.png (100%) rename src/{vr/images => public/images/vr}/headset_quest_status_ready_low.png (100%) rename src/{vr/images => public/images/vr}/left_controller_status_off.png (100%) rename src/{vr/images => public/images/vr}/left_controller_status_ready.png (100%) rename src/{vr/images => public/images/vr}/left_controller_status_ready_charging.png (100%) rename src/{vr/images => public/images/vr}/left_controller_status_ready_low.png (100%) rename src/{vr/images => public/images/vr}/other_status_off.png (100%) rename src/{vr/images => public/images/vr}/other_status_ready.png (100%) rename src/{vr/images => public/images/vr}/other_status_ready_charging.png (100%) rename src/{vr/images => public/images/vr}/other_status_ready_low.png (100%) rename src/{vr/images => public/images/vr}/right_controller_status_off.png (100%) rename src/{vr/images => public/images/vr}/right_controller_status_ready.png (100%) rename src/{vr/images => public/images/vr}/right_controller_status_ready_charging.png (100%) rename src/{vr/images => public/images/vr}/right_controller_status_ready_low.png (100%) rename src/{vr/images => public/images/vr}/tracker_status_off.png (100%) rename src/{vr/images => public/images/vr}/tracker_status_ready.png (100%) rename src/{vr/images => public/images/vr}/tracker_status_ready_charging.png (100%) rename src/{vr/images => public/images/vr}/tracker_status_ready_low.png (100%) create mode 100644 src/shared/constants/accessType.js create mode 100644 src/views/Settings/components/ThemePicker.vue rename src/views/Tools/{dialogs/GalleryDialog.vue => Gallery.vue} (94%) diff --git a/package-lock.json b/package-lock.json index 2de06cfa..96d34d58 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,10 +15,6 @@ "@element-plus/icons-vue": "^2.3.2", "@eslint/js": "^9.39.2", "@fontsource-variable/inter": "^5.2.8", - "@fontsource-variable/noto-sans-jp": "^5.2.9", - "@fontsource-variable/noto-sans-kr": "^5.2.9", - "@fontsource-variable/noto-sans-sc": "^5.2.9", - "@fontsource-variable/noto-sans-tc": "^5.2.9", "@kamiya4047/eslint-plugin-pretty-import": "^0.1.6", "@sentry/vite-plugin": "^4.6.1", "@sentry/vue": "^10.32.1", @@ -47,12 +43,12 @@ "noty": "^3.2.0-beta-deprecated", "pinia": "^3.0.4", "prettier": "^3.7.4", - "remixicon": "^4.7.0", + "remixicon": "^4.8.0", "sass-embedded": "^1.97.1", "tailwindcss": "^4.1.18", "vite": "^7.3.0", "vue": "^3.5.26", - "vue-i18n": "^11.2.2", + "vue-i18n": "^11.2.8", "vue-marquee-text-component": "^2.0.1", "vue-router": "^4.6.4", "vue-showdown": "^4.2.0", @@ -2351,46 +2347,6 @@ "url": "https://github.com/sponsors/ayuhito" } }, - "node_modules/@fontsource-variable/noto-sans-jp": { - "version": "5.2.9", - "resolved": "https://registry.npmjs.org/@fontsource-variable/noto-sans-jp/-/noto-sans-jp-5.2.9.tgz", - "integrity": "sha512-osPL5f7dvGDjuMuFwDTGPLG37030D8X5zk+3BWea6txAVDFeE/ZIrKW0DY0uSDfRn9+NiKbiFn/2QvZveKXTog==", - "dev": true, - "license": "OFL-1.1", - "funding": { - "url": "https://github.com/sponsors/ayuhito" - } - }, - "node_modules/@fontsource-variable/noto-sans-kr": { - "version": "5.2.9", - "resolved": "https://registry.npmjs.org/@fontsource-variable/noto-sans-kr/-/noto-sans-kr-5.2.9.tgz", - "integrity": "sha512-g1BnJdJbnAgRUP8YxyPIm8npZVUbtt6VgtLnkGR7poa/RVbVGd27i+9138DmwRvtbKhJG1fPLQ/V3BonvFykRQ==", - "dev": true, - "license": "OFL-1.1", - "funding": { - "url": "https://github.com/sponsors/ayuhito" - } - }, - "node_modules/@fontsource-variable/noto-sans-sc": { - "version": "5.2.9", - "resolved": "https://registry.npmjs.org/@fontsource-variable/noto-sans-sc/-/noto-sans-sc-5.2.9.tgz", - "integrity": "sha512-ZEEpZlxjYEIVdg85K38mqaoeBcorrN3Z6MaIkwK5w5Dqn/e9v5uVIYr0ukoLsFxaVyEXSi/c3caOeMHjbOMtfA==", - "dev": true, - "license": "OFL-1.1", - "funding": { - "url": "https://github.com/sponsors/ayuhito" - } - }, - "node_modules/@fontsource-variable/noto-sans-tc": { - "version": "5.2.9", - "resolved": "https://registry.npmjs.org/@fontsource-variable/noto-sans-tc/-/noto-sans-tc-5.2.9.tgz", - "integrity": "sha512-GhtbSE8IZTP3vZj7Fu1G/PERxguMe3jryAbHovSd22Rs7aYdbXQD8vBqkTT/tkHIUn6t2IFReTfgKUoQBPCe+w==", - "dev": true, - "license": "OFL-1.1", - "funding": { - "url": "https://github.com/sponsors/ayuhito" - } - }, "node_modules/@gar/promisify": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", @@ -2451,14 +2407,14 @@ } }, "node_modules/@intlify/core-base": { - "version": "11.2.2", - "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-11.2.2.tgz", - "integrity": "sha512-0mCTBOLKIqFUP3BzwuFW23hYEl9g/wby6uY//AC5hTgQfTsM2srCYF2/hYGp+a5DZ/HIFIgKkLJMzXTt30r0JQ==", + "version": "11.2.8", + "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-11.2.8.tgz", + "integrity": "sha512-nBq6Y1tVkjIUsLsdOjDSJj4AsjvD0UG3zsg9Fyc+OivwlA/oMHSKooUy9tpKj0HqZ+NWFifweHavdljlBLTwdA==", "dev": true, "license": "MIT", "dependencies": { - "@intlify/message-compiler": "11.2.2", - "@intlify/shared": "11.2.2" + "@intlify/message-compiler": "11.2.8", + "@intlify/shared": "11.2.8" }, "engines": { "node": ">= 16" @@ -2468,13 +2424,13 @@ } }, "node_modules/@intlify/message-compiler": { - "version": "11.2.2", - "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-11.2.2.tgz", - "integrity": "sha512-XS2p8Ff5JxWsKhgfld4/MRQzZRQ85drMMPhb7Co6Be4ZOgqJX1DzcZt0IFgGTycgqL8rkYNwgnD443Q+TapOoA==", + "version": "11.2.8", + "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-11.2.8.tgz", + "integrity": "sha512-A5n33doOjmHsBtCN421386cG1tWp5rpOjOYPNsnpjIJbQ4POF0QY2ezhZR9kr0boKwaHjbOifvyQvHj2UTrDFQ==", "dev": true, "license": "MIT", "dependencies": { - "@intlify/shared": "11.2.2", + "@intlify/shared": "11.2.8", "source-map-js": "^1.0.2" }, "engines": { @@ -2485,9 +2441,9 @@ } }, "node_modules/@intlify/shared": { - "version": "11.2.2", - "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-11.2.2.tgz", - "integrity": "sha512-OtCmyFpSXxNu/oET/aN6HtPCbZ01btXVd0f3w00YsHOb13Kverk1jzA2k47pAekM55qbUw421fvPF1yxZ+gicw==", + "version": "11.2.8", + "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-11.2.8.tgz", + "integrity": "sha512-l6e4NZyUgv8VyXXH4DbuucFOBmxLF56C/mqh2tvApbzl2Hrhi1aTDcuv5TKdxzfHYmpO3UB0Cz04fgDT9vszfw==", "dev": true, "license": "MIT", "engines": { @@ -15566,9 +15522,9 @@ } }, "node_modules/remixicon": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/remixicon/-/remixicon-4.7.0.tgz", - "integrity": "sha512-g2pHOofQWARWpxdbrQu5+K3C8ZbqguQFzE54HIMWFCpFa63pumaAltIgZmFMRQpKKBScRWQASQfWxS9asNCcHQ==", + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/remixicon/-/remixicon-4.8.0.tgz", + "integrity": "sha512-8qTM/bWkmsAWitvcL9XrVPVdqHRrdmnNp4zCFBdmIHBygxfHWwoK6NzitbiMyRzjcXKBMlS/ab5M65/ZlxJTVA==", "dev": true, "license": "Apache-2.0" }, @@ -18493,14 +18449,14 @@ } }, "node_modules/vue-i18n": { - "version": "11.2.2", - "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-11.2.2.tgz", - "integrity": "sha512-ULIKZyRluUPRCZmihVgUvpq8hJTtOqnbGZuv4Lz+byEKZq4mU0g92og414l6f/4ju+L5mORsiUuEPYrAuX2NJg==", + "version": "11.2.8", + "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-11.2.8.tgz", + "integrity": "sha512-vJ123v/PXCZntd6Qj5Jumy7UBmIuE92VrtdX+AXr+1WzdBHojiBxnAxdfctUFL+/JIN+VQH4BhsfTtiGsvVObg==", "dev": true, "license": "MIT", "dependencies": { - "@intlify/core-base": "11.2.2", - "@intlify/shared": "11.2.2", + "@intlify/core-base": "11.2.8", + "@intlify/shared": "11.2.8", "@vue/devtools-api": "^6.5.0" }, "engines": { diff --git a/package.json b/package.json index 6de730fb..b81ed436 100644 --- a/package.json +++ b/package.json @@ -68,12 +68,12 @@ "noty": "^3.2.0-beta-deprecated", "pinia": "^3.0.4", "prettier": "^3.7.4", - "remixicon": "^4.7.0", + "remixicon": "^4.8.0", "sass-embedded": "^1.97.1", "tailwindcss": "^4.1.18", "vite": "^7.3.0", "vue": "^3.5.26", - "vue-i18n": "^11.2.2", + "vue-i18n": "^11.2.8", "vue-marquee-text-component": "^2.0.1", "vue-router": "^4.6.4", "vue-showdown": "^4.2.0", diff --git a/src/App.vue b/src/App.vue index f8769e53..928d8732 100644 --- a/src/App.vue +++ b/src/App.vue @@ -56,11 +56,7 @@ }); - diff --git a/src/components/LocationWorld.vue b/src/components/LocationWorld.vue index 9acb4eec..86af7413 100644 --- a/src/components/LocationWorld.vue +++ b/src/components/LocationWorld.vue @@ -1,14 +1,14 @@ @@ -21,6 +21,7 @@ import { useGroupStore, useInstanceStore, useLaunchStore } from '../stores'; import { getGroupName, parseLocation } from '../shared/utils'; + import { accessTypeLocaleKeyMap } from '../shared/constants'; const { t } = useI18n(); const { cachedInstances } = useInstanceStore(); @@ -52,7 +53,7 @@ function parse() { const locObj = props.locationobject; location.value = locObj.tag; - accessTypeName.value = locObj.accessTypeName; + accessTypeName.value = translateAccessType(locObj.accessTypeName); strict.value = locObj.strict; shortName.value = locObj.shortName; @@ -97,6 +98,14 @@ } } + function translateAccessType(accessTypeNameRaw) { + const key = accessTypeLocaleKeyMap[accessTypeNameRaw]; + if (!key) { + return accessTypeNameRaw; + } + return t(key); + } + watch(() => props.locationobject, parse, { immediate: true }); watch( @@ -126,11 +135,9 @@ display: inline-block; } - .ml-5 { - margin-left: 5px; - } - - .mr-5 { - margin-right: 5px; + :global(html.dark .x-location-world), + :global(:root.dark .x-location-world), + :global(:root[data-theme='dark'] .x-location-world) { + color: var(--color-zinc-100); } diff --git a/src/components/NativeTooltip.vue b/src/components/NativeTooltip.vue deleted file mode 100644 index 9fdeee09..00000000 --- a/src/components/NativeTooltip.vue +++ /dev/null @@ -1,537 +0,0 @@ - - - - - diff --git a/src/components/NavMenu.vue b/src/components/NavMenu.vue index 8950b70a..a1fa3d18 100644 --- a/src/components/NavMenu.vue +++ b/src/components/NavMenu.vue @@ -1,7 +1,7 @@