From 4a966d0d3db9a61fcb049529cd81b5e384e19ee4 Mon Sep 17 00:00:00 2001 From: hotellidev <291052888+hotellidev@users.noreply.github.com> Date: Mon, 8 Jun 2026 00:21:11 +0300 Subject: [PATCH 1/5] Add description to items --- .../avatar-info/infostand/InfoStandWidgetFurniView.tsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/components/room/widgets/avatar-info/infostand/InfoStandWidgetFurniView.tsx b/src/components/room/widgets/avatar-info/infostand/InfoStandWidgetFurniView.tsx index 76f9900..8343bd0 100644 --- a/src/components/room/widgets/avatar-info/infostand/InfoStandWidgetFurniView.tsx +++ b/src/components/room/widgets/avatar-info/infostand/InfoStandWidgetFurniView.tsx @@ -522,8 +522,12 @@ export const InfoStandWidgetFurniView: FC = props { avatarInfo.name } -
+ { avatarInfo.description && + + { avatarInfo.description } +
+
} { !isBranded &&
From 9e21cf5be42fe9d117d5836f12c0ce817f3965b8 Mon Sep 17 00:00:00 2001 From: hotellidev <291052888+hotellidev@users.noreply.github.com> Date: Mon, 8 Jun 2026 00:21:11 +0300 Subject: [PATCH 2/5] Fix position --- .../avatar-info/infostand/InfoStandWidgetFurniView.tsx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/components/room/widgets/avatar-info/infostand/InfoStandWidgetFurniView.tsx b/src/components/room/widgets/avatar-info/infostand/InfoStandWidgetFurniView.tsx index 8343bd0..2dd2bf6 100644 --- a/src/components/room/widgets/avatar-info/infostand/InfoStandWidgetFurniView.tsx +++ b/src/components/room/widgets/avatar-info/infostand/InfoStandWidgetFurniView.tsx @@ -523,11 +523,6 @@ export const InfoStandWidgetFurniView: FC = props
- { avatarInfo.description && - - { avatarInfo.description } -
-
} { !isBranded &&
@@ -556,6 +551,11 @@ export const InfoStandWidgetFurniView: FC = props
} + { avatarInfo.description && + + { avatarInfo.description } +
+
}
{ showOwnerProfileIcon && } From 0daa2aea66bdcb5908e3c24a33e9ffc65aa9d96f Mon Sep 17 00:00:00 2001 From: hotellidev <291052888+hotellidev@users.noreply.github.com> Date: Mon, 8 Jun 2026 00:21:11 +0300 Subject: [PATCH 3/5] Config options for description and location --- public/configuration/ui-config.example | 2 ++ .../avatar-info/infostand/InfoStandWidgetFurniView.tsx | 9 +++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/public/configuration/ui-config.example b/public/configuration/ui-config.example index 9db01e2..3d617bc 100644 --- a/public/configuration/ui-config.example +++ b/public/configuration/ui-config.example @@ -15,6 +15,8 @@ "camera.publish.disabled": false, "hc.disabled": false, "badge.descriptions.enabled": true, + "furni.descriptions.enabled": false, + "furni.location.enabled": true, "motto.max.length": 38, "bot.name.max.length": 15, "pet.package.name.max.length": 15, diff --git a/src/components/room/widgets/avatar-info/infostand/InfoStandWidgetFurniView.tsx b/src/components/room/widgets/avatar-info/infostand/InfoStandWidgetFurniView.tsx index 2dd2bf6..4054a6b 100644 --- a/src/components/room/widgets/avatar-info/infostand/InfoStandWidgetFurniView.tsx +++ b/src/components/room/widgets/avatar-info/infostand/InfoStandWidgetFurniView.tsx @@ -2,7 +2,7 @@ import { CrackableDataType, CreateLinkEvent, FurnitureFloorUpdateEvent, GetRoomE import { FC, useCallback, useEffect, useMemo, useState } from 'react'; import { FaCrosshairs, FaTimes } from 'react-icons/fa'; import { GrFormNextLink, GrRotateLeft, GrRotateRight } from 'react-icons/gr'; -import { AvatarInfoFurni, GetGroupInformation, LocalizeText, SendMessageComposer } from '../../../../../api'; +import { AvatarInfoFurni, GetGroupInformation, LocalizeText, SendMessageComposer, GetConfigurationValue } from '../../../../../api'; import { Button, Column, Flex, LayoutBadgeImageView, LayoutCurrencyIcon, LayoutLimitedEditionCompactPlateView, LayoutRarityLevelView, LayoutRoomObjectImageView, Text, UserProfileIconView } from '../../../../../common'; import { useHasPermission, useMessageEvent, useNitroEvent, useRareValues, useRoom, useWiredTools } from '../../../../../hooks'; import { NitroInput } from '../../../../../layout'; @@ -76,7 +76,8 @@ export const InfoStandWidgetFurniView: FC = props const isModerator = useHasPermission('acc_anyroomowner'); const { getValue: getRareValue } = useRareValues(); const rareValue = useMemo(() => (avatarInfo ? getRareValue(avatarInfo.spriteId) : null), [ avatarInfo, getRareValue ]); - + const descriptionsEnabled = GetConfigurationValue('furni.descriptions.enabled', true); + const itemLocationEnabled = GetConfigurationValue('furni.location.enabled', true); const [ pickupMode, setPickupMode ] = useState(0); const [ canMove, setCanMove ] = useState(false); const [ canRotate, setCanRotate ] = useState(false); @@ -551,7 +552,7 @@ export const InfoStandWidgetFurniView: FC = props
} - { avatarInfo.description && + { (avatarInfo.description && descriptionsEnabled) && { avatarInfo.description }
@@ -606,7 +607,7 @@ export const InfoStandWidgetFurniView: FC = props { groupName } } - { (itemLocation.x > -1) && + { ((itemLocation.x > -1) && itemLocationEnabled) && <>
From 8e834261d0941b8941c8396bbedf49d476f27e3b Mon Sep 17 00:00:00 2001 From: hotellidev <291052888+hotellidev@users.noreply.github.com> Date: Mon, 8 Jun 2026 00:21:11 +0300 Subject: [PATCH 4/5] Add configuration to limit itemLocation to people with access. --- public/configuration/ui-config.example | 3 ++- .../avatar-info/infostand/InfoStandWidgetFurniView.tsx | 10 +++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/public/configuration/ui-config.example b/public/configuration/ui-config.example index 3d617bc..8523223 100644 --- a/public/configuration/ui-config.example +++ b/public/configuration/ui-config.example @@ -15,8 +15,9 @@ "camera.publish.disabled": false, "hc.disabled": false, "badge.descriptions.enabled": true, - "furni.descriptions.enabled": false, + "furni.descriptions.enabled": true, "furni.location.enabled": true, + "furni.location.require.access": true, "motto.max.length": 38, "bot.name.max.length": 15, "pet.package.name.max.length": 15, diff --git a/src/components/room/widgets/avatar-info/infostand/InfoStandWidgetFurniView.tsx b/src/components/room/widgets/avatar-info/infostand/InfoStandWidgetFurniView.tsx index 4054a6b..b39228c 100644 --- a/src/components/room/widgets/avatar-info/infostand/InfoStandWidgetFurniView.tsx +++ b/src/components/room/widgets/avatar-info/infostand/InfoStandWidgetFurniView.tsx @@ -78,6 +78,9 @@ export const InfoStandWidgetFurniView: FC = props const rareValue = useMemo(() => (avatarInfo ? getRareValue(avatarInfo.spriteId) : null), [ avatarInfo, getRareValue ]); const descriptionsEnabled = GetConfigurationValue('furni.descriptions.enabled', true); const itemLocationEnabled = GetConfigurationValue('furni.location.enabled', true); + const itemLocationRequireAccess = GetConfigurationValue('furni.location.require.access', true); + const isValidController = (avatarInfo.roomControllerLevel >= RoomControllerLevel.GUEST); + const hasAccess = (isValidController || avatarInfo.isOwner || avatarInfo.isRoomOwner || avatarInfo.isAnyRoomController) const [ pickupMode, setPickupMode ] = useState(0); const [ canMove, setCanMove ] = useState(false); const [ canRotate, setCanRotate ] = useState(false); @@ -209,13 +212,10 @@ export const InfoStandWidgetFurniView: FC = props setFurniLocationZ(location.z); } - const isValidController = (avatarInfo.roomControllerLevel >= RoomControllerLevel.GUEST); - - if(isValidController || avatarInfo.isOwner || avatarInfo.isRoomOwner || avatarInfo.isAnyRoomController) + if(hasAccess) { canMove = true; canRotate = !avatarInfo.isWallItem; - if(avatarInfo.roomControllerLevel >= RoomControllerLevel.MODERATOR) godMode = true; } @@ -607,7 +607,7 @@ export const InfoStandWidgetFurniView: FC = props { groupName } } - { ((itemLocation.x > -1) && itemLocationEnabled) && + { ((itemLocation.x > -1) && itemLocationEnabled && (!itemLocationRequireAccess || hasAccess)) && <>
From e5097b824e2ce92dd3788dadea91d35e97e30255 Mon Sep 17 00:00:00 2001 From: hotellidev <291052888+hotellidev@users.noreply.github.com> Date: Mon, 8 Jun 2026 00:21:11 +0300 Subject: [PATCH 5/5] Add back missing
separator. Cleaned previous commits. --- .../avatar-info/infostand/InfoStandWidgetFurniView.tsx | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/components/room/widgets/avatar-info/infostand/InfoStandWidgetFurniView.tsx b/src/components/room/widgets/avatar-info/infostand/InfoStandWidgetFurniView.tsx index b39228c..aa9edff 100644 --- a/src/components/room/widgets/avatar-info/infostand/InfoStandWidgetFurniView.tsx +++ b/src/components/room/widgets/avatar-info/infostand/InfoStandWidgetFurniView.tsx @@ -79,8 +79,6 @@ export const InfoStandWidgetFurniView: FC = props const descriptionsEnabled = GetConfigurationValue('furni.descriptions.enabled', true); const itemLocationEnabled = GetConfigurationValue('furni.location.enabled', true); const itemLocationRequireAccess = GetConfigurationValue('furni.location.require.access', true); - const isValidController = (avatarInfo.roomControllerLevel >= RoomControllerLevel.GUEST); - const hasAccess = (isValidController || avatarInfo.isOwner || avatarInfo.isRoomOwner || avatarInfo.isAnyRoomController) const [ pickupMode, setPickupMode ] = useState(0); const [ canMove, setCanMove ] = useState(false); const [ canRotate, setCanRotate ] = useState(false); @@ -212,7 +210,9 @@ export const InfoStandWidgetFurniView: FC = props setFurniLocationZ(location.z); } - if(hasAccess) + const isValidController = (avatarInfo.roomControllerLevel >= RoomControllerLevel.GUEST); + + if(isValidController || avatarInfo.isOwner || avatarInfo.isRoomOwner || avatarInfo.isAnyRoomController) { canMove = true; canRotate = !avatarInfo.isWallItem; @@ -523,6 +523,7 @@ export const InfoStandWidgetFurniView: FC = props { avatarInfo.name } +
{ !isBranded &&
@@ -607,7 +608,7 @@ export const InfoStandWidgetFurniView: FC = props { groupName } } - { ((itemLocation.x > -1) && itemLocationEnabled && (!itemLocationRequireAccess || hasAccess)) && + { ((itemLocation.x > -1) && itemLocationEnabled && (!itemLocationRequireAccess || canMove)) && <>