diff --git a/src/app.css b/src/app.css
index c6bf1341..a60d7710 100644
--- a/src/app.css
+++ b/src/app.css
@@ -129,35 +129,35 @@ img.friends-list-avatar {
width: 9px;
height: 9px;
content: '';
- background: #909399;
+ background: var(--status-offline);
border-radius: 50%;
}
.x-friend-item .status-icon.active::after {
- background: #f4e05e;
+ background: var(--status-active);
}
.x-friend-item .status-icon.online::after {
- background: #67c23a;
+ background: var(--status-online);
}
.x-friend-item .status-icon.joinme::after {
- background: #00b8ff;
+ background: var(--status-joinme);
mask-image: url(/images/masks/joinme.svg);
}
.x-friend-item .status-icon.askme::after {
- background: #ff9500;
+ background: var(--status-askme);
mask-image: url(/images/masks/askme.svg);
}
.x-friend-item .status-icon.busy::after {
- background: #ff2c2c;
+ background: var(--status-busy);
mask-image: url(/images/masks/busy.svg);
}
.x-friend-item .status-icon.offline::after {
- background: #909399;
+ background: var(--status-offline);
}
.x-friend-item > .detail {
@@ -211,57 +211,57 @@ i.x-status-icon {
display: inline-block;
width: 10px;
height: 10px;
- background: #808080;
+ background: var(--status-offline-alt);
border-radius: 50%;
}
i.x-user-status.active {
- background: #f4e05e;
+ background: var(--status-active);
}
i.x-user-status.online {
- background: #67c23a;
+ background: var(--status-online);
}
i.x-user-status.joinme {
- background: #00b8ff;
+ background: var(--status-joinme);
mask-image: url(/images/masks/joinme.svg);
}
i.x-user-status.askme {
- background: #ff9500;
+ background: var(--status-askme);
mask-image: url(/images/masks/askme.svg);
}
i.x-user-status.busy {
- background: #ff2c2c;
+ background: var(--status-busy);
mask-image: url(/images/masks/busy.svg);
}
i.x-status-icon.green {
- background: #67c23a;
+ background: var(--status-online);
}
i.x-status-icon.blue {
- background: #00b8ff;
+ background: var(--status-joinme);
}
i.x-status-icon.orange {
- background: #ff9500;
+ background: var(--status-askme);
}
i.x-status-icon.red {
- background: #ff2c2c;
+ background: var(--status-busy);
}
.x-tag-platform-pc {
- color: #0078d4;
- border-color: #0078d4 !important;
+ color: var(--platform-pc);
+ border-color: var(--platform-pc) !important;
}
.x-tag-platform-quest {
- color: #3ddc84;
- border-color: #3ddc84 !important;
+ color: var(--platform-quest);
+ border-color: var(--platform-quest) !important;
}
.x-tag-friend {
diff --git a/src/components/StatusBar.vue b/src/components/StatusBar.vue
index de22cc79..f06c30da 100644
--- a/src/components/StatusBar.vue
+++ b/src/components/StatusBar.vue
@@ -593,11 +593,11 @@
}
.dot-green {
- background: #67c23a;
+ background: var(--status-online);
}
.dot-gray {
- background: #808080;
+ background: var(--status-offline-alt);
}
.status-label {
diff --git a/src/components/dialogs/AvatarDialog/AvatarDialog.vue b/src/components/dialogs/AvatarDialog/AvatarDialog.vue
index d1c7e5c4..207994bd 100644
--- a/src/components/dialogs/AvatarDialog/AvatarDialog.vue
+++ b/src/components/dialogs/AvatarDialog/AvatarDialog.vue
@@ -80,18 +80,28 @@
+ >
{{ avatarDialog.platformInfo.ios.performanceRating }}
{{ avatarDialog.fileAnalysis.ios._fileSize }}
@@ -738,6 +748,10 @@
}
);
+ /**
+ *
+ * @param tabName
+ */
function handleAvatarDialogTab(tabName) {
avatarDialog.value.lastActiveTab = tabName;
if (tabName === 'JSON') {
@@ -745,10 +759,17 @@
}
}
+ /**
+ *
+ */
function loadLastActiveTab() {
handleAvatarDialogTab(avatarDialog.value.lastActiveTab);
}
+ /**
+ *
+ * @param tabName
+ */
function avatarDialogTabClick(tabName) {
if (tabName === avatarDialog.value.lastActiveTab) {
if (tabName === 'JSON') {
@@ -759,10 +780,17 @@
handleAvatarDialogTab(tabName);
}
+ /**
+ *
+ * @param imageId
+ */
function getImageUrlFromImageId(imageId) {
return `${AppDebug.endpointDomain}/file/${imageId}/1/`;
}
+ /**
+ *
+ */
function handleDialogOpen() {
setAvatarTagsDialog.value.visible = false;
avatarDialog.value.timeSpent = 0;
@@ -772,6 +800,9 @@
getAvatarMemo();
}
+ /**
+ *
+ */
function getAvatarTimeSpent() {
const D = avatarDialog.value;
avatarDialog.value.timeSpent = 0;
@@ -785,6 +816,9 @@
});
}
+ /**
+ *
+ */
function getAvatarMemo() {
const D = avatarDialog.value;
database.getAvatarMemoDB(D.id).then((res) => {
@@ -794,6 +828,10 @@
});
}
+ /**
+ *
+ * @param command
+ */
function avatarDialogCommand(command) {
const D = avatarDialog.value;
switch (command) {
@@ -988,10 +1026,17 @@
}
}
+ /**
+ *
+ */
function showChangeAvatarImageDialog() {
document.getElementById('AvatarImageUploadButton').click();
}
+ /**
+ *
+ * @param e
+ */
function onFileChangeAvatarImage(e) {
const { file, clearInput } = handleImageUploadInput(e, {
inputSelector: '#AvatarImageUploadButton',
@@ -1010,6 +1055,10 @@
cropDialogOpen.value = true;
}
+ /**
+ *
+ * @param blob
+ */
async function onCropConfirmAvatar(blob) {
changeAvatarImageLoading.value = true;
try {
@@ -1047,6 +1096,10 @@
}
}
+ /**
+ *
+ * @param avatar
+ */
function promptChangeAvatarDescription(avatar) {
modalStore
.prompt({
@@ -1075,6 +1128,10 @@
.catch(() => {});
}
+ /**
+ *
+ * @param avatar
+ */
function promptRenameAvatar(avatar) {
modalStore
.prompt({
@@ -1103,6 +1160,9 @@
.catch(() => {});
}
+ /**
+ *
+ */
function onAvatarMemoChange() {
if (memo.value) {
database.setAvatarMemo({
@@ -1115,18 +1175,33 @@
}
}
+ /**
+ *
+ * @param id
+ */
function copyAvatarId(id) {
copyToClipboard(id);
}
+ /**
+ *
+ * @param id
+ */
function copyAvatarUrl(id) {
copyToClipboard(`https://vrchat.com/home/avatar/${id}`);
}
+ /**
+ *
+ */
function refreshAvatarDialogTreeData() {
treeData.value = formatJsonVars(avatarDialog.value.ref);
}
+ /**
+ *
+ * @param avatarId
+ */
function showSetAvatarTagsDialog(avatarId) {
const D = setAvatarTagsDialog.value;
D.selectedAvatarIds = [avatarId];
@@ -1175,6 +1250,9 @@
});
}
+ /**
+ *
+ */
function showSetAvatarStylesDialog() {
const D = setAvatarStylesDialog.value;
D.visible = true;
@@ -1199,10 +1277,17 @@
});
}
+ /**
+ *
+ */
function displayAvatarGalleryUpload() {
document.getElementById('AvatarGalleryUploadButton').click();
}
+ /**
+ *
+ * @param e
+ */
function onFileChangeAvatarGallery(e) {
const { file, clearInput } = handleImageUploadInput(e, {
inputSelector: '#AvatarGalleryUploadButton',
diff --git a/src/components/dialogs/UserDialog/UserSummaryHeader.vue b/src/components/dialogs/UserDialog/UserSummaryHeader.vue
index ab0e2327..35dd0035 100644
--- a/src/components/dialogs/UserDialog/UserSummaryHeader.vue
+++ b/src/components/dialogs/UserDialog/UserSummaryHeader.vue
@@ -144,8 +144,8 @@
-
-
+
+
diff --git a/src/components/dialogs/WorldDialog/WorldDialog.vue b/src/components/dialogs/WorldDialog/WorldDialog.vue
index 00269587..9436cf77 100644
--- a/src/components/dialogs/WorldDialog/WorldDialog.vue
+++ b/src/components/dialogs/WorldDialog/WorldDialog.vue
@@ -83,13 +83,18 @@
-
+
+ :class="[
+ 'x-grey',
+ 'x-tag-border-left',
+ 'text-platform-ios',
+ 'border-platform-ios'
+ ]">
{{ worldDialog.fileAnalysis.ios._fileSize }}
diff --git a/src/styles/globals.css b/src/styles/globals.css
index 9b444c92..703b2f85 100644
--- a/src/styles/globals.css
+++ b/src/styles/globals.css
@@ -48,6 +48,27 @@
--sidebar-accent-foreground: oklch(0.205 0 0);
--sidebar-border: oklch(0.922 0 0);
--sidebar-ring: oklch(0.708 0 0);
+
+ /* VRChat Status Colors */
+ --status-online: #67c23a;
+ --status-joinme: #00b8ff;
+ --status-askme: #ff9500;
+ --status-busy: #ff2c2c;
+ --status-active: #f4e05e;
+ --status-offline: #909399;
+ --status-offline-alt: #808080;
+ --status-offline-card: #737f8d;
+
+ /* Platform Colors */
+ --platform-pc: #0078d4;
+ --platform-quest: #3ddc84;
+ --platform-ios: #8e8e93;
+
+ /* Favorite Group Visibility Colors */
+ --visibility-public: #22c55e;
+ --visibility-friends: #0ea5e9;
+ --visibility-private: #ef4444;
+
--font-western-primary: 'Inter Variable';
--font-western:
'ellipsis-font', -apple-system, var(--font-western-primary), 'Segoe UI',
@@ -158,6 +179,26 @@
--color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
--color-sidebar-border: var(--sidebar-border);
--color-sidebar-ring: var(--sidebar-ring);
+
+ /* VRChat Status Colors */
+ --color-status-online: var(--status-online);
+ --color-status-joinme: var(--status-joinme);
+ --color-status-askme: var(--status-askme);
+ --color-status-busy: var(--status-busy);
+ --color-status-active: var(--status-active);
+ --color-status-offline: var(--status-offline);
+ --color-status-offline-alt: var(--status-offline-alt);
+ --color-status-offline-card: var(--status-offline-card);
+
+ /* Platform Colors */
+ --color-platform-pc: var(--platform-pc);
+ --color-platform-quest: var(--platform-quest);
+ --color-platform-ios: var(--platform-ios);
+
+ /* Favorite Group Visibility Colors */
+ --color-visibility-public: var(--visibility-public);
+ --color-visibility-friends: var(--visibility-friends);
+ --color-visibility-private: var(--visibility-private);
}
@layer base {
diff --git a/src/views/Favorites/FavoritesAvatar.vue b/src/views/Favorites/FavoritesAvatar.vue
index 12328693..ee3ea95f 100644
--- a/src/views/Favorites/FavoritesAvatar.vue
+++ b/src/views/Favorites/FavoritesAvatar.vue
@@ -1767,15 +1767,15 @@
}
.group-item--public {
- border-left: 3px solid #22c55e;
+ border-left: 3px solid var(--visibility-public);
}
.group-item--friends {
- border-left: 3px solid #0ea5e9;
+ border-left: 3px solid var(--visibility-friends);
}
.group-item--private {
- border-left: 3px solid #ef4444;
+ border-left: 3px solid var(--visibility-private);
}
.group-item--placeholder {
diff --git a/src/views/Favorites/FavoritesFriend.vue b/src/views/Favorites/FavoritesFriend.vue
index 65d73b98..9edf14c7 100644
--- a/src/views/Favorites/FavoritesFriend.vue
+++ b/src/views/Favorites/FavoritesFriend.vue
@@ -1407,15 +1407,15 @@
}
.group-item--public {
- border-left: 3px solid #22c55e;
+ border-left: 3px solid var(--visibility-public);
}
.group-item--friends {
- border-left: 3px solid #0ea5e9;
+ border-left: 3px solid var(--visibility-friends);
}
.group-item--private {
- border-left: 3px solid #ef4444;
+ border-left: 3px solid var(--visibility-private);
}
.group-item.is-active {
diff --git a/src/views/Favorites/FavoritesWorld.vue b/src/views/Favorites/FavoritesWorld.vue
index 58ee3c92..aa691c6a 100644
--- a/src/views/Favorites/FavoritesWorld.vue
+++ b/src/views/Favorites/FavoritesWorld.vue
@@ -1638,15 +1638,15 @@
}
.group-item--public {
- border-left: 3px solid #22c55e;
+ border-left: 3px solid var(--visibility-public);
}
.group-item--friends {
- border-left: 3px solid #0ea5e9;
+ border-left: 3px solid var(--visibility-friends);
}
.group-item--private {
- border-left: 3px solid #ef4444;
+ border-left: 3px solid var(--visibility-private);
}
.group-item.is-active {
diff --git a/src/views/Favorites/dialogs/avatarImportColumns.jsx b/src/views/Favorites/dialogs/avatarImportColumns.jsx
index d3f2834e..2d7aaa56 100644
--- a/src/views/Favorites/dialogs/avatarImportColumns.jsx
+++ b/src/views/Favorites/dialogs/avatarImportColumns.jsx
@@ -5,7 +5,12 @@ import { i18n } from '../../../plugin';
const { t } = i18n.global;
-export const createColumns = ({ onShowAvatar, onShowUser, onDelete, onShowFullscreenImage }) => [
+export const createColumns = ({
+ onShowAvatar,
+ onShowUser,
+ onDelete,
+ onShowFullscreenImage
+}) => [
{
id: 'image',
header: () => t('table.import.image'),
@@ -85,13 +90,13 @@ export const createColumns = ({ onShowAvatar, onShowUser, onDelete, onShowFullsc
const label = status
? status.charAt(0).toUpperCase() + status.slice(1)
: '';
- const color =
+ const colorClass =
status === 'public'
- ? '#67c23a'
+ ? 'text-status-online'
: status === 'private'
- ? '#f56c6c'
- : undefined;
- return {label};
+ ? 'text-destructive'
+ : '';
+ return {label};
}
},
{
diff --git a/src/views/Favorites/dialogs/worldImportColumns.jsx b/src/views/Favorites/dialogs/worldImportColumns.jsx
index 183f1485..0313578d 100644
--- a/src/views/Favorites/dialogs/worldImportColumns.jsx
+++ b/src/views/Favorites/dialogs/worldImportColumns.jsx
@@ -5,7 +5,12 @@ import { i18n } from '../../../plugin';
const { t } = i18n.global;
-export const createColumns = ({ onShowWorld, onShowUser, onDelete, onShowFullscreenImage }) => [
+export const createColumns = ({
+ onShowWorld,
+ onShowUser,
+ onDelete,
+ onShowFullscreenImage
+}) => [
{
id: 'image',
header: () => t('table.import.image'),
@@ -85,13 +90,13 @@ export const createColumns = ({ onShowWorld, onShowUser, onDelete, onShowFullscr
const label = status
? status.charAt(0).toUpperCase() + status.slice(1)
: '';
- const color =
+ const colorClass =
status === 'public'
- ? '#67c23a'
+ ? 'text-status-online'
: status === 'private'
- ? '#f56c6c'
- : undefined;
- return {label};
+ ? 'text-destructive'
+ : '';
+ return {label};
}
},
{
diff --git a/src/views/FriendsLocations/components/FriendsLocationsCard.vue b/src/views/FriendsLocations/components/FriendsLocationsCard.vue
index 3c9a9017..aa80f2f3 100644
--- a/src/views/FriendsLocations/components/FriendsLocationsCard.vue
+++ b/src/views/FriendsLocations/components/FriendsLocationsCard.vue
@@ -277,51 +277,51 @@
}
.friend-card__status-dot--online {
- background: #67c23a;
- box-shadow: 0 0 calc(8px * var(--card-scale)) color-mix(in oklch, #67c23a 40%, transparent);
+ background: var(--status-online);
+ box-shadow: 0 0 calc(8px * var(--card-scale)) color-mix(in oklch, var(--status-online) 40%, transparent);
}
.friend-card__status-dot--active {
background: transparent;
- border: calc(2px * var(--card-scale)) solid #67c23a;
- box-shadow: 0 0 calc(8px * var(--card-scale)) color-mix(in oklch, #67c23a 40%, transparent);
+ border: calc(2px * var(--card-scale)) solid var(--status-online);
+ box-shadow: 0 0 calc(8px * var(--card-scale)) color-mix(in oklch, var(--status-online) 40%, transparent);
}
.friend-card__status-dot--active-join {
background: transparent;
- border: calc(2px * var(--card-scale)) solid #00b8ff;
- box-shadow: 0 0 calc(8px * var(--card-scale)) color-mix(in oklch, #00b8ff 40%, transparent);
+ border: calc(2px * var(--card-scale)) solid var(--status-joinme);
+ box-shadow: 0 0 calc(8px * var(--card-scale)) color-mix(in oklch, var(--status-joinme) 40%, transparent);
}
.friend-card__status-dot--active-ask {
background: transparent;
- border: calc(2px * var(--card-scale)) solid #ff9500;
- box-shadow: 0 0 calc(8px * var(--card-scale)) color-mix(in oklch, #ff9500 40%, transparent);
+ border: calc(2px * var(--card-scale)) solid var(--status-askme);
+ box-shadow: 0 0 calc(8px * var(--card-scale)) color-mix(in oklch, var(--status-askme) 40%, transparent);
}
.friend-card__status-dot--active-busy {
background: transparent;
- border: calc(2px * var(--card-scale)) solid #ff2c2c;
- box-shadow: 0 0 calc(8px * var(--card-scale)) color-mix(in oklch, #ff2c2c 40%, transparent);
+ border: calc(2px * var(--card-scale)) solid var(--status-busy);
+ box-shadow: 0 0 calc(8px * var(--card-scale)) color-mix(in oklch, var(--status-busy) 40%, transparent);
}
.friend-card__status-dot--join {
- background: #00b8ff;
- box-shadow: 0 0 calc(8px * var(--card-scale)) color-mix(in oklch, #00b8ff 40%, transparent);
+ background: var(--status-joinme);
+ box-shadow: 0 0 calc(8px * var(--card-scale)) color-mix(in oklch, var(--status-joinme) 40%, transparent);
}
.friend-card__status-dot--busy {
- background: #ff2c2c;
- box-shadow: 0 0 calc(8px * var(--card-scale)) color-mix(in oklch, #ff2c2c 40%, transparent);
+ background: var(--status-busy);
+ box-shadow: 0 0 calc(8px * var(--card-scale)) color-mix(in oklch, var(--status-busy) 40%, transparent);
}
.friend-card__status-dot--ask {
- background: #ff9500;
- box-shadow: 0 0 calc(8px * var(--card-scale)) color-mix(in oklch, #ff9500 40%, transparent);
+ background: var(--status-askme);
+ box-shadow: 0 0 calc(8px * var(--card-scale)) color-mix(in oklch, var(--status-askme) 40%, transparent);
}
.friend-card__status-dot--offline {
- background: #737f8d;
+ background: var(--status-offline-card);
}
.friend-card__body {
diff --git a/src/views/MyAvatars/columns.jsx b/src/views/MyAvatars/columns.jsx
index 6b817c41..43d55bdd 100644
--- a/src/views/MyAvatars/columns.jsx
+++ b/src/views/MyAvatars/columns.jsx
@@ -193,7 +193,7 @@ export function getColumns({
)}
{platforms.isIos && (
diff --git a/src/views/MyAvatars/components/MyAvatarCard.vue b/src/views/MyAvatars/components/MyAvatarCard.vue
index 897e5cd6..e6eaae1b 100644
--- a/src/views/MyAvatars/components/MyAvatarCard.vue
+++ b/src/views/MyAvatars/components/MyAvatarCard.vue
@@ -25,16 +25,13 @@
class="absolute top-1 right-1 flex -space-x-1">
+ class="size-2.5 rounded-full border opacity-70 bg-platform-pc" />
+ class="size-2.5 rounded-full border opacity-70 bg-platform-quest" />
+ class="size-2.5 rounded-full border opacity-70 bg-platform-ios" />
diff --git a/src/views/PlayerList/PlayerList.vue b/src/views/PlayerList/PlayerList.vue
index a5e4253b..1b6df228 100644
--- a/src/views/PlayerList/PlayerList.vue
+++ b/src/views/PlayerList/PlayerList.vue
@@ -78,11 +78,14 @@
-
+
{{ currentInstanceWorld.fileAnalysis.ios._fileSize }}
diff --git a/src/vr/Vr.vue b/src/vr/Vr.vue
index e05ba380..e4daafdf 100644
--- a/src/vr/Vr.vue
+++ b/src/vr/Vr.vue
@@ -1305,7 +1305,7 @@
(Public)
has joined
- Desktop
- VR
- VR
+ Android