diff --git a/packages/nc-gui/components/general/ProjectIcon.vue b/packages/nc-gui/components/general/ProjectIcon.vue
index 7a52b9858f..db5c29f22c 100644
--- a/packages/nc-gui/components/general/ProjectIcon.vue
+++ b/packages/nc-gui/components/general/ProjectIcon.vue
@@ -17,24 +17,34 @@ const props = withDefaults(
)
const { color, managedApp } = toRefs(props)
-const iconColor = computed(() => {
- return color.value && tinycolor(color.value).isValid()
- ? {
- tint: baseIconColors.includes(color.value) ? color.value : tinycolor(color.value).lighten(10).toHexString(),
- shade: tinycolor(color.value).darken(40).toHexString(),
- }
- : {
- tint: baseIconColors[0],
- shade: tinycolor(baseIconColors[0]).darken(40).toHexString(),
- }
-})
-
const managedAppInfo = computed(() => {
return {
isManagedApp: isEeUI && !!managedApp.value?.managed_app_id,
isMaster: !!managedApp.value?.managed_app_master && !!managedApp.value?.managed_app_id,
}
})
+
+const iconColor = computed(() => {
+ return color.value && tinycolor(color.value).isValid()
+ ? {
+ tint: baseIconColors.includes(color.value) ? color.value : tinycolor(color.value).lighten(10).toHexString(),
+ shade: tinycolor(color.value)
+ .darken(managedAppInfo.value.isManagedApp ? 30 : 40)
+ .toHexString(),
+ }
+ : {
+ tint: baseIconColors[0],
+ shade: tinycolor(baseIconColors[0])
+ .darken(managedAppInfo.value.isManagedApp ? 30 : 40)
+ .toHexString(),
+ }
+})
+
+// Unique gradient ID based on app ID and color to avoid SVG gradient conflicts
+const gradientId = computed(() => {
+ const colorHash = color.value?.replace('#', '') || 'default'
+ return `sphere-${managedApp.value?.managed_app_id || 'default'}-${colorHash}`
+})
@@ -59,15 +69,38 @@ const managedAppInfo = computed(() => {
:fill="iconColor.tint"
/>
+
+
+