feat: update system messages design

Signed-off-by: Infi <infi@infi.sh>
This commit is contained in:
Infi 2025-07-23 04:32:26 +02:00
parent 3cf7b84442
commit 6bfe417b92
12 changed files with 167 additions and 18 deletions

View File

@ -8,19 +8,21 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Info
import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi
import androidx.compose.material3.Icon
import androidx.compose.material3.LocalContentColor
import androidx.compose.material3.LocalTextStyle
import androidx.compose.material3.MaterialShapes
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.toShape
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.Shape
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.font.FontWeight
@ -184,7 +186,7 @@ fun SystemMessageIcon(type: SystemMessageType, modifier: Modifier = Modifier, si
when (type) {
SystemMessageType.CHANNEL_OWNERSHIP_CHANGED -> {
Icon(
painter = painterResource(R.drawable.ic_key_arrow_right_24dp),
painter = painterResource(R.drawable.icn_key_24dp),
contentDescription = stringResource(R.string.system_message_ownership_changed_alt),
tint = LocalContentColor.current,
modifier = modifier.size(size)
@ -193,7 +195,7 @@ fun SystemMessageIcon(type: SystemMessageType, modifier: Modifier = Modifier, si
SystemMessageType.CHANNEL_ICON_CHANGED -> {
Icon(
painter = painterResource(R.drawable.ic_image_multiple_24dp),
painter = painterResource(R.drawable.icn_landscape_2_edit_24dp),
contentDescription = stringResource(
R.string.system_message_channel_icon_changed_alt
),
@ -204,7 +206,7 @@ fun SystemMessageIcon(type: SystemMessageType, modifier: Modifier = Modifier, si
SystemMessageType.CHANNEL_DESCRIPTION_CHANGED -> {
Icon(
painter = painterResource(R.drawable.ic_text_box_multiple_24dp),
painter = painterResource(R.drawable.icn_contract_edit_24dp),
contentDescription = stringResource(
R.string.system_message_channel_description_changed_alt
),
@ -215,7 +217,7 @@ fun SystemMessageIcon(type: SystemMessageType, modifier: Modifier = Modifier, si
SystemMessageType.CHANNEL_RENAMED -> {
Icon(
painter = painterResource(R.drawable.ic_cursor_text_24dp),
painter = painterResource(R.drawable.icn_ink_highlighter_move_24dp),
contentDescription = stringResource(R.string.system_message_channel_renamed_alt),
tint = LocalContentColor.current,
modifier = modifier.size(size)
@ -224,7 +226,7 @@ fun SystemMessageIcon(type: SystemMessageType, modifier: Modifier = Modifier, si
SystemMessageType.USER_REMOVE -> {
Icon(
painter = painterResource(R.drawable.ic_account_cancel_24dp),
painter = painterResource(R.drawable.icn_group_remove_24dp),
contentDescription = stringResource(R.string.system_message_user_removed_alt),
tint = LocalContentColor.current,
modifier = modifier.size(size)
@ -233,7 +235,7 @@ fun SystemMessageIcon(type: SystemMessageType, modifier: Modifier = Modifier, si
SystemMessageType.USER_ADDED -> {
Icon(
painter = painterResource(R.drawable.ic_account_plus_24dp),
painter = painterResource(R.drawable.icn_group_add_24dp),
contentDescription = stringResource(R.string.system_message_user_added_alt),
tint = LocalContentColor.current,
modifier = modifier.size(size)
@ -242,7 +244,7 @@ fun SystemMessageIcon(type: SystemMessageType, modifier: Modifier = Modifier, si
SystemMessageType.USER_BANNED -> {
Icon(
painter = painterResource(R.drawable.ic_gavel_24dp),
painter = painterResource(R.drawable.icn_gavel_24dp),
contentDescription = stringResource(R.string.system_message_user_banned_alt),
tint = LocalContentColor.current,
modifier = modifier.size(size)
@ -251,7 +253,7 @@ fun SystemMessageIcon(type: SystemMessageType, modifier: Modifier = Modifier, si
SystemMessageType.USER_KICKED -> {
Icon(
painter = painterResource(R.drawable.ic_shield_24dp),
painter = painterResource(R.drawable.icn_sports_and_outdoors_24dp),
contentDescription = stringResource(R.string.system_message_user_kicked_alt),
tint = LocalContentColor.current,
modifier = modifier.size(size)
@ -260,7 +262,7 @@ fun SystemMessageIcon(type: SystemMessageType, modifier: Modifier = Modifier, si
SystemMessageType.USER_LEFT -> {
Icon(
painter = painterResource(R.drawable.ic_account_arrow_left_24dp),
painter = painterResource(R.drawable.icn_door_open_24dp),
contentDescription = stringResource(R.string.system_message_user_left_alt),
tint = LocalContentColor.current,
modifier = modifier.size(size)
@ -269,16 +271,16 @@ fun SystemMessageIcon(type: SystemMessageType, modifier: Modifier = Modifier, si
SystemMessageType.USER_JOINED -> {
Icon(
painter = painterResource(R.drawable.ic_account_arrow_right_24dp),
painter = painterResource(R.drawable.icn_waving_hand_24dp),
contentDescription = stringResource(R.string.system_message_user_joined_alt),
tint = LocalContentColor.current,
modifier = modifier.size(size)
modifier = modifier.size(size),
)
}
SystemMessageType.TEXT -> {
Icon(
imageVector = Icons.Default.Info,
painter = painterResource(R.drawable.icn_info_24dp),
contentDescription = stringResource(R.string.system_message_text_alt),
tint = LocalContentColor.current,
modifier = modifier.size(size)
@ -287,6 +289,36 @@ fun SystemMessageIcon(type: SystemMessageType, modifier: Modifier = Modifier, si
}
}
@OptIn(ExperimentalMaterial3ExpressiveApi::class)
@Composable
private fun shapeForType(type: SystemMessageType): Shape {
return when (type) {
SystemMessageType.CHANNEL_OWNERSHIP_CHANGED -> MaterialShapes.Slanted
SystemMessageType.CHANNEL_ICON_CHANGED -> MaterialShapes.Pentagon
SystemMessageType.CHANNEL_DESCRIPTION_CHANGED -> MaterialShapes.Gem
SystemMessageType.CHANNEL_RENAMED -> MaterialShapes.Pill
SystemMessageType.USER_REMOVE -> MaterialShapes.Flower
SystemMessageType.USER_ADDED -> MaterialShapes.Sunny
SystemMessageType.USER_BANNED -> MaterialShapes.Burst
SystemMessageType.USER_KICKED -> MaterialShapes.SoftBurst
SystemMessageType.USER_LEFT -> MaterialShapes.Cookie4Sided
SystemMessageType.USER_JOINED -> MaterialShapes.Cookie9Sided
SystemMessageType.TEXT -> MaterialShapes.Square
}.toShape()
}
// TODO - find the best colours for each type
@Composable
private fun backgroundColourForType(type: SystemMessageType): Color {
return MaterialTheme.colorScheme.primaryContainer
}
@Composable
private fun contentColourForType(type: SystemMessageType): Color {
return MaterialTheme.colorScheme.onPrimaryContainer
}
@OptIn(ExperimentalMaterial3ExpressiveApi::class)
@Composable
fun SystemMessageIconWithBackground(
type: SystemMessageType,
@ -296,10 +328,16 @@ fun SystemMessageIconWithBackground(
Box(
contentAlignment = Alignment.Center,
modifier = modifier
.clip(CircleShape)
.background(MaterialTheme.colorScheme.primary.copy(alpha = 0.3f))
.clip(shapeForType(type))
.background(
color = backgroundColourForType(type),
)
.size(size)
) {
SystemMessageIcon(type = type)
CompositionLocalProvider(
LocalContentColor provides contentColourForType(type),
) {
SystemMessageIcon(type = type)
}
}
}

View File

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M360,360L360,280L720,280L720,360L360,360ZM360,480L360,400L720,400L720,480L360,480ZM480,800L240,800Q223,800 211.5,800Q200,800 200,800L200,800L480,800L480,800ZM480,880L240,880Q190,880 155,845Q120,810 120,760L120,640L240,640L240,80L840,80L840,441Q820,439 799.5,442.5Q779,446 760,455L760,160L320,160L320,640L560,640L480,720L200,720L200,760Q200,777 211.5,788.5Q223,800 240,800L480,800L480,880ZM560,880L560,757L781,537Q790,528 801,524Q812,520 823,520Q835,520 846,524.5Q857,529 866,538L903,575Q911,584 915.5,595Q920,606 920,617Q920,628 916,639.5Q912,651 903,660L683,880L560,880ZM860,617L860,617L823,580L823,580L860,617ZM620,820L658,820L779,698L761,679L742,661L620,782L620,820ZM761,679L742,661L742,661L779,698L779,698L761,679Z"/>
</vector>

View File

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M440,520Q457,520 468.5,508.5Q480,497 480,480Q480,463 468.5,451.5Q457,440 440,440Q423,440 411.5,451.5Q400,463 400,480Q400,497 411.5,508.5Q423,520 440,520ZM280,840L280,760L520,720L520,275Q520,260 511,248Q502,236 488,234L280,200L280,120L500,156Q544,164 572,197Q600,230 600,274L600,786L280,840ZM120,840L120,760L200,760L200,200Q200,166 223.5,143Q247,120 280,120L680,120Q714,120 737,143Q760,166 760,200L760,760L840,760L840,840L120,840ZM280,760L680,760L680,200Q680,200 680,200Q680,200 680,200L280,200Q280,200 280,200Q280,200 280,200L280,760Z"/>
</vector>

View File

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M160,840L160,760L640,760L640,840L160,840ZM386,646L160,420L244,334L472,560L386,646ZM640,392L414,164L500,80L726,306L640,392ZM824,800L302,278L358,222L880,744L824,800Z"/>
</vector>

View File

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M500,478Q529,446 544.5,405Q560,364 560,320Q560,276 544.5,235Q529,194 500,162Q500,162 500,162Q500,162 500,162Q560,170 600,215Q640,260 640,320Q640,380 600,425Q560,470 500,478Q500,478 500,478Q500,478 500,478ZM720,800L720,680Q720,644 704,611.5Q688,579 662,554Q713,572 756.5,600.5Q800,629 800,680L800,800L720,800ZM800,520L800,440L720,440L720,360L800,360L800,280L880,280L880,360L960,360L960,440L880,440L880,520L800,520ZM320,480Q254,480 207,433Q160,386 160,320Q160,254 207,207Q254,160 320,160Q386,160 433,207Q480,254 480,320Q480,386 433,433Q386,480 320,480ZM0,800L0,688Q0,654 17.5,625.5Q35,597 64,582Q126,551 190,535.5Q254,520 320,520Q386,520 450,535.5Q514,551 576,582Q605,597 622.5,625.5Q640,654 640,688L640,800L0,800ZM320,400Q353,400 376.5,376.5Q400,353 400,320Q400,287 376.5,263.5Q353,240 320,240Q287,240 263.5,263.5Q240,287 240,320Q240,353 263.5,376.5Q287,400 320,400ZM80,720L560,720L560,688Q560,677 554.5,668Q549,659 540,654Q486,627 431,613.5Q376,600 320,600Q264,600 209,613.5Q154,627 100,654Q91,659 85.5,668Q80,677 80,688L80,720ZM320,320Q320,320 320,320Q320,320 320,320Q320,320 320,320Q320,320 320,320Q320,320 320,320Q320,320 320,320Q320,320 320,320Q320,320 320,320ZM320,720L320,720Q320,720 320,720Q320,720 320,720Q320,720 320,720Q320,720 320,720Q320,720 320,720Q320,720 320,720Q320,720 320,720Q320,720 320,720L320,720Z"/>
</vector>

View File

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M500,478Q529,446 544.5,405Q560,364 560,320Q560,276 544.5,235Q529,194 500,162Q500,162 500,162Q500,162 500,162Q560,170 600,215Q640,260 640,320Q640,380 600,425Q560,470 500,478Q500,478 500,478Q500,478 500,478ZM720,800L720,680Q720,644 704,611.5Q688,579 662,554Q713,572 756.5,600.5Q800,629 800,680L800,800L720,800ZM960,440L720,440L720,360L960,360L960,440ZM320,480Q254,480 207,433Q160,386 160,320Q160,254 207,207Q254,160 320,160Q386,160 433,207Q480,254 480,320Q480,386 433,433Q386,480 320,480ZM0,800L0,688Q0,654 17.5,625.5Q35,597 64,582Q126,551 190,535.5Q254,520 320,520Q386,520 450,535.5Q514,551 576,582Q605,597 622.5,625.5Q640,654 640,688L640,800L0,800ZM320,400Q353,400 376.5,376.5Q400,353 400,320Q400,287 376.5,263.5Q353,240 320,240Q287,240 263.5,263.5Q240,287 240,320Q240,353 263.5,376.5Q287,400 320,400ZM80,720L560,720L560,688Q560,677 554.5,668Q549,659 540,654Q486,627 431,613.5Q376,600 320,600Q264,600 209,613.5Q154,627 100,654Q91,659 85.5,668Q80,677 80,688L80,720ZM320,320Q320,320 320,320Q320,320 320,320Q320,320 320,320Q320,320 320,320Q320,320 320,320Q320,320 320,320Q320,320 320,320Q320,320 320,320ZM320,720L320,720Q320,720 320,720Q320,720 320,720Q320,720 320,720Q320,720 320,720Q320,720 320,720Q320,720 320,720Q320,720 320,720Q320,720 320,720L320,720Z"/>
</vector>

View File

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M440,680L520,680L520,440L440,440L440,680ZM480,360Q497,360 508.5,348.5Q520,337 520,320Q520,303 508.5,291.5Q497,280 480,280Q463,280 451.5,291.5Q440,303 440,320Q440,337 451.5,348.5Q463,360 480,360ZM480,880Q397,880 324,848.5Q251,817 197,763Q143,709 111.5,636Q80,563 80,480Q80,397 111.5,324Q143,251 197,197Q251,143 324,111.5Q397,80 480,80Q563,80 636,111.5Q709,143 763,197Q817,251 848.5,324Q880,397 880,480Q880,563 848.5,636Q817,709 763,763Q709,817 636,848.5Q563,880 480,880ZM480,800Q614,800 707,707Q800,614 800,480Q800,346 707,253Q614,160 480,160Q346,160 253,253Q160,346 160,480Q160,614 253,707Q346,800 480,800ZM480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Z"/>
</vector>

View File

@ -0,0 +1,11 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal"
android:autoMirrored="true">
<path
android:fillColor="@android:color/white"
android:pathData="M551,160L280,160L280,80L631,80L551,160ZM391,320L160,320L160,240L471,240L391,320ZM231,480L40,480L40,400L311,400L231,480ZM584,560L480,456L280,656Q280,656 280,656Q280,656 280,656L384,760Q384,760 384,760Q384,760 384,760L584,560ZM537,399L641,503L840,304Q840,304 840,304Q840,304 840,304L736,200Q736,200 736,200Q736,200 736,200L537,399ZM453,371L669,587L440,816Q416,840 384,840Q352,840 328,816L326,814L300,840L100,840L226,714L224,712Q200,688 200,656Q200,624 224,600L453,371ZM453,371L680,144Q704,120 736,120Q768,120 792,144L896,248Q920,272 920,304Q920,336 896,360L669,587L453,371Z"/>
</vector>

View File

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M280,560Q247,560 223.5,536.5Q200,513 200,480Q200,447 223.5,423.5Q247,400 280,400Q313,400 336.5,423.5Q360,447 360,480Q360,513 336.5,536.5Q313,560 280,560ZM280,720Q180,720 110,650Q40,580 40,480Q40,380 110,310Q180,240 280,240Q347,240 401.5,273Q456,306 488,360L840,360L960,480L780,660L700,600L620,660L535,600L488,600Q456,654 401.5,687Q347,720 280,720ZM280,640Q336,640 378.5,606Q421,572 435,520L560,520L618,561L700,500L771,555L846,480L806,440L435,440Q421,388 378.5,354Q336,320 280,320Q214,320 167,367Q120,414 120,480Q120,546 167,593Q214,640 280,640Z"/>
</vector>

View File

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M363,680L363,680L363,680Q363,680 363,680Q363,680 363,680L363,680Q363,680 363,680Q363,680 363,680Q363,680 363,680Q363,680 363,680L363,680Q363,680 363,680Q363,680 363,680Q363,680 363,680Q363,680 363,680L363,680Q363,680 363,680Q363,680 363,680L363,680ZM46,800L184,524Q194,504 212.5,492Q231,480 254,480Q278,480 298,492.5Q318,505 327,528L354,594Q356,600 363,599.5Q370,599 372,593L458,306Q472,258 511.5,229Q551,200 601,200Q650,200 688.5,228.5Q727,257 742,303L778,407Q763,412 749.5,420Q736,428 724,440L710,455L666,328Q658,305 641,292.5Q624,280 601,280Q578,280 560.5,293Q543,306 535,329L449,616Q440,644 416.5,662Q393,680 363,680Q336,680 313,665.5Q290,651 280,625L253,559Q253,559 253,559Q253,559 253,559L135,800L46,800ZM560,840L560,717L781,497Q790,488 801,484Q812,480 823,480Q835,480 846,484.5Q857,489 866,498L903,535Q911,544 915.5,555Q920,566 920,577Q920,588 916,599.5Q912,611 903,620L683,840L560,840ZM860,577L860,577L823,540L823,540L860,577ZM620,780L658,780L779,658L761,639L742,621L620,742L620,780ZM761,639L742,621L742,621L779,658L779,658L761,639ZM240,400Q190,400 155,364.5Q120,329 120,280Q120,230 155,195Q190,160 240,160Q290,160 325,195Q360,230 360,280Q360,329 325,364.5Q290,400 240,400ZM240,320Q257,320 268.5,308.5Q280,297 280,280Q280,263 268.5,251.5Q257,240 240,240Q223,240 211.5,251.5Q200,263 200,280Q200,297 211.5,308.5Q223,320 240,320ZM240,280Q240,280 240,280Q240,280 240,280Q240,280 240,280Q240,280 240,280Q240,280 240,280Q240,280 240,280Q240,280 240,280Q240,280 240,280Z"/>
</vector>

View File

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M414,792L426,736Q429,723 438.5,714.5Q448,706 462,704L586,694Q599,692 610,699Q621,706 626,718L642,756Q681,733 712,700.5Q743,668 764,628L752,622Q741,614 736,602.5Q731,591 734,578L762,456Q765,444 774.5,436Q784,428 796,426Q791,401 783.5,377.5Q776,354 764,332Q755,337 744.5,336.5Q734,336 726,330L620,266Q609,259 604,247Q599,235 602,222L610,188Q579,174 546.5,167Q514,160 480,160Q466,160 451,161.5Q436,163 422,166L452,234Q457,246 454.5,259Q452,272 442,280L348,362Q338,371 324.5,372Q311,373 300,366L208,310Q185,348 172.5,391.5Q160,435 160,480Q160,496 164,532L252,524Q266,522 277.5,528.5Q289,535 294,548L342,662Q347,674 344.5,687Q342,700 332,708L294,740Q321,760 351.5,773Q382,786 414,792ZM486,620Q473,622 462,615Q451,608 446,596L392,472Q387,460 390.5,447Q394,434 404,426L506,340Q515,331 528,330Q541,329 552,336L664,402Q675,409 681,421Q687,433 684,446L652,576Q649,589 640,597.5Q631,606 618,608L486,620ZM480,880Q397,880 324,848.5Q251,817 197,763Q143,709 111.5,636Q80,563 80,480Q80,397 111.5,324Q143,251 197,197Q251,143 324,111.5Q397,80 480,80Q563,80 636,111.5Q709,143 763,197Q817,251 848.5,324Q880,397 880,480Q880,563 848.5,636Q817,709 763,763Q709,817 636,848.5Q563,880 480,880Z"/>
</vector>

View File

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M430,460L713,177Q725,165 741,165Q757,165 769,177Q781,189 781,205Q781,221 769,233L487,516L430,460ZM529,559L783,304Q795,292 811.5,292Q828,292 840,304Q852,316 852,332.5Q852,349 840,361L586,615L529,559ZM211,749Q120,658 120,530Q120,402 211,311L331,191L390,250Q397,257 402,264.5Q407,272 412,280L560,131Q572,119 588.5,119Q605,119 617,131Q629,143 629,159.5Q629,176 617,188L444,361L444,361L359,445L378,464Q424,510 422,574Q420,638 373,685L373,685L316,629L316,629Q339,606 341.5,574.5Q344,543 321,520L274,474Q262,462 262,445.5Q262,429 274,417L331,361Q343,349 343,332.5Q343,316 331,304L331,304L267,368Q199,436 199,530.5Q199,625 267,693Q335,761 430,761Q525,761 593,693L832,453Q844,441 860.5,441Q877,441 889,453Q901,465 901,481.5Q901,498 889,510L649,749Q558,840 430,840Q302,840 211,749ZM430,530Q430,530 430,530Q430,530 430,530L430,530L430,530L430,530Q430,530 430,530Q430,530 430,530L430,530L430,530L430,530Q430,530 430,530Q430,530 430,530L430,530Q430,530 430,530Q430,530 430,530ZM680,921L680,840Q746,840 793,793Q840,746 840,680L921,680Q921,780 850.5,850.5Q780,921 680,921ZM39,280Q39,180 109.5,109.5Q180,39 280,39L280,120Q214,120 167,167Q120,214 120,280L39,280Z"/>
</vector>