diff --git a/app/javascript/dashboard/assets/scss/_woot.scss b/app/javascript/dashboard/assets/scss/_woot.scss index 29e3c7c60..d736d7b5a 100644 --- a/app/javascript/dashboard/assets/scss/_woot.scss +++ b/app/javascript/dashboard/assets/scss/_woot.scss @@ -146,19 +146,17 @@ --solid-2: 255 255 255; --solid-3: 255 255 255; --solid-active: 255 255 255; - --solid-amber: 255 228 181; - --solid-blue: 182 216 255; + --solid-amber: 252 232 193; + --solid-blue: 218 236 255; --solid-iris: 230 231 255; - --solid-purple: 202 202 255; - --solid-red: 255 212 219; --alpha-1: 67, 67, 67, 0.06; - --alpha-2: 196, 197, 198, 0.22; + --alpha-2: 201, 202, 207, 0.15; --alpha-3: 255, 255, 255, 0.96; - --black-alpha-1: 0, 0, 0, 0.08; + --black-alpha-1: 0, 0, 0, 0.12; --black-alpha-2: 0, 0, 0, 0.04; --border-blue: 39, 129, 246, 0.5; - --white-alpha: 255, 255, 255, 0.84; + --white-alpha: 255, 255, 255, 0.8; } .dark { @@ -242,18 +240,16 @@ --gray-12: 238 238 238; --background-color: 18 18 19; - --text-blue: 126 182 255; --border-strong: 52 52 52; --border-weak: 38 38 42; --solid-1: 23 23 26; --solid-2: 29 30 36; --solid-3: 44 45 54; --solid-active: 53 57 66; - --solid-amber: 56 50 41; - --solid-blue: 4 51 101; + --solid-amber: 42 37 30; + --solid-blue: 16 49 91; --solid-iris: 38 42 101; - --solid-purple: 51 51 107; - --solid-red: 78 46 55; + --text-blue: 126 182 255; --alpha-1: 36, 36, 36, 0.8; --alpha-2: 139, 147, 182, 0.15; diff --git a/app/javascript/dashboard/components-next/avatar/Avatar.vue b/app/javascript/dashboard/components-next/avatar/Avatar.vue index 3cf6d3c88..65859b1c7 100644 --- a/app/javascript/dashboard/components-next/avatar/Avatar.vue +++ b/app/javascript/dashboard/components-next/avatar/Avatar.vue @@ -50,16 +50,16 @@ const AVATAR_COLORS = { dark: [ ['#4B143D', '#FF8DCC'], ['#3F220D', '#FFA366'], - ['#023B37', '#0BD8B6'], ['#2A2A2A', '#ADB1B8'], + ['#023B37', '#0BD8B6'], ['#27264D', '#A19EFF'], ['#1D2E62', '#9EB1FF'], ], light: [ ['#FBDCEF', '#C2298A'], ['#FFE0BB', '#99543A'], - ['#CCF3EA', '#008573'], ['#E8E8E8', '#60646C'], + ['#CCF3EA', '#008573'], ['#EBEBFE', '#4747C2'], ['#E1E9FF', '#3A5BC7'], ], diff --git a/app/javascript/dashboard/components-next/message/Message.vue b/app/javascript/dashboard/components-next/message/Message.vue index 150c57f85..df0602a49 100644 --- a/app/javascript/dashboard/components-next/message/Message.vue +++ b/app/javascript/dashboard/components-next/message/Message.vue @@ -117,7 +117,7 @@ const props = defineProps({ }, conversationId: { type: Number, required: true }, createdAt: { type: Number, required: true }, // eslint-disable-line vue/no-unused-properties - currentUserId: { type: Number, required: true }, // eslint-disable-line vue/no-unused-properties + currentUserId: { type: Number, required: true }, groupWithNext: { type: Boolean, default: false }, inboxId: { type: Number, default: null }, // eslint-disable-line vue/no-unused-properties inboxSupportsReplyTo: { type: Object, default: () => ({}) }, @@ -173,11 +173,7 @@ const variant = computed(() => { return variants[props.messageType] || MESSAGE_VARIANTS.USER; }); -const isBotOrAgentMessage = computed(() => { - if (props.messageType === MESSAGE_TYPES.ACTIVITY) { - return false; - } - +const isMyMessage = computed(() => { // if an outgoing message is still processing, then it's definitely a // message sent by the current user if ( @@ -186,15 +182,17 @@ const isBotOrAgentMessage = computed(() => { ) { return true; } - const senderId = props.senderId ?? props.sender?.id; const senderType = props.senderType ?? props.sender?.type; if (!senderType || !senderId) { - return true; + return false; } - return senderType.toLowerCase() === SENDER_TYPES.USER.toLowerCase(); + return ( + senderType.toLowerCase() === SENDER_TYPES.USER.toLowerCase() && + props.currentUserId === senderId + ); }); /** @@ -202,7 +200,7 @@ const isBotOrAgentMessage = computed(() => { * @returns {import('vue').ComputedRef<'left'|'right'|'center'>} The computed orientation */ const orientation = computed(() => { - if (isBotOrAgentMessage.value) { + if (isMyMessage.value) { return ORIENTATION.RIGHT; } @@ -223,8 +221,8 @@ const flexOrientationClass = computed(() => { const gridClass = computed(() => { const map = { - [ORIENTATION.LEFT]: 'grid grid-cols-1fr', - [ORIENTATION.RIGHT]: 'grid grid-cols-[1fr_24px]', + [ORIENTATION.LEFT]: 'grid grid-cols-[24px_1fr]', + [ORIENTATION.RIGHT]: 'grid grid-cols-1fr', }; return map[orientation.value]; @@ -233,12 +231,12 @@ const gridClass = computed(() => { const gridTemplate = computed(() => { const map = { [ORIENTATION.LEFT]: ` - "bubble" - "meta" + "avatar bubble" + "spacer meta" `, [ORIENTATION.RIGHT]: ` - "bubble avatar" - "meta spacer" + "bubble" + "meta" `, }; @@ -253,7 +251,7 @@ const shouldGroupWithNext = computed(() => { const shouldShowAvatar = computed(() => { if (props.messageType === MESSAGE_TYPES.ACTIVITY) return false; - if (orientation.value === ORIENTATION.LEFT) return false; + if (orientation.value === ORIENTATION.RIGHT) return false; return true; }); @@ -416,11 +414,6 @@ const avatarInfo = computed(() => { }; }); -const avatarTooltip = computed(() => { - if (avatarInfo.value.name === '') return ''; - return `${t('CONVERSATION.SENT_BY')} ${avatarInfo.value.name}`; -}); - const setupHighlightTimer = () => { if (Number(route.query.messageId) !== Number(props.id)) { return; @@ -440,7 +433,7 @@ provideMessageContext({ isPrivate: computed(() => props.private), variant, orientation, - isBotOrAgentMessage, + isMyMessage, shouldGroupWithNext, }); @@ -450,7 +443,7 @@ provideMessageContext({
@@ -487,13 +479,7 @@ provideMessageContext({
{ nextMessageType === MESSAGE_TYPES.TEMPLATE && currentMessageType === MESSAGE_TYPES.TEMPLATE; - const areBothActivity = - nextMessageType === MESSAGE_TYPES.ACTIVITY && - currentMessageType === MESSAGE_TYPES.ACTIVITY; - - if (!hasSameSender || areBothTemplates || areBothActivity) return false; + if (!hasSameSender || areBothTemplates) return false; if (currentMessageType !== nextMessageType) return false; @@ -107,17 +103,6 @@ const getInReplyToMessage = parentMessage => { return replyMessage ? useCamelCase(replyMessage) : null; }; - -const getMessageSpacingClass = (message, messages, index) => { - // For non-activity messages, use groupWithNext logic - if (message.messageType !== MESSAGE_TYPES.ACTIVITY) { - return shouldGroupWithNext(index, messages) ? 'mb-1' : 'mb-6'; - } - - // For activity messages, check next message exists and is also an activity - const nextMessage = messages[index + 1]; - return nextMessage?.messageType === MESSAGE_TYPES.ACTIVITY ? 'mb-2' : 'mb-6'; -}; @@ -144,7 +128,6 @@ const getMessageSpacingClass = (message, messages, index) => { :inbox-supports-reply-to="inboxSupportsReplyTo" :current-user-id="currentUserId" :is-email-inbox="isAnEmailChannel" - :class="getMessageSpacingClass(message, unread, index)" data-clarity-mask="True" /> diff --git a/app/javascript/dashboard/components-next/message/bubbles/Activity.vue b/app/javascript/dashboard/components-next/message/bubbles/Activity.vue index 4e9300711..d52286543 100644 --- a/app/javascript/dashboard/components-next/message/bubbles/Activity.vue +++ b/app/javascript/dashboard/components-next/message/bubbles/Activity.vue @@ -14,7 +14,7 @@ const readableTime = computed(() => diff --git a/app/javascript/dashboard/components-next/message/bubbles/Text/Index.vue b/app/javascript/dashboard/components-next/message/bubbles/Text/Index.vue index 439c892dc..1a7997f50 100644 --- a/app/javascript/dashboard/components-next/message/bubbles/Text/Index.vue +++ b/app/javascript/dashboard/components-next/message/bubbles/Text/Index.vue @@ -20,15 +20,12 @@ const isEmpty = computed(() => {