diff --git a/app/javascript/dashboard/assets/scss/_helper-classes.scss b/app/javascript/dashboard/assets/scss/_helper-classes.scss index 48ee1918b..229606254 100644 --- a/app/javascript/dashboard/assets/scss/_helper-classes.scss +++ b/app/javascript/dashboard/assets/scss/_helper-classes.scss @@ -4,7 +4,6 @@ @apply inline-block h-6 py-0 px-6 relative align-middle w-6; &.message { - @include normal-shadow; @apply bg-white dark:bg-slate-800 rounded-full left-0 my-3 mx-auto p-4 top-0; &::before { diff --git a/app/javascript/dashboard/assets/scss/_mixins.scss b/app/javascript/dashboard/assets/scss/_mixins.scss index 9ca87c859..fc742d24f 100644 --- a/app/javascript/dashboard/assets/scss/_mixins.scss +++ b/app/javascript/dashboard/assets/scss/_mixins.scss @@ -1,79 +1,7 @@ @import 'dashboard/assets/scss/variables'; -@import 'widget/assets/scss/mixins'; $spinner-before-border-color: rgba(255, 255, 255, 0.7); -//borders -@mixin border-nil() { - border-color: transparent; - border: 0; -} - -@mixin thin-border($color) { - border: 1px solid $color; -} - -@mixin custom-border-bottom($size, $color) { - border-bottom: $size solid $color; -} - -@mixin custom-border-top($size, $color) { - border-top: $size solid $color; -} - -@mixin border-normal() { - @apply border border-slate-50 dark:border-slate-700; -} - -@mixin border-normal-left() { - @apply border-l border-slate-50 dark:border-slate-700; -} - -@mixin border-normal-top() { - @apply border-t border-slate-50 dark:border-slate-700; -} - -@mixin border-normal-right() { - @apply border-r border-slate-50 dark:border-slate-700; -} - -@mixin border-normal-bottom() { - @apply border-b border-slate-50 dark:border-slate-700; -} - -@mixin border-light() { - @apply border border-slate-25 dark:border-slate-700; -} - -@mixin border-light-left() { - @apply border-l border-slate-25 dark:border-slate-700; -} - -@mixin border-light-top() { - @apply border-t border-slate-25 dark:border-slate-700; -} - -@mixin border-light-right() { - @apply border-r border-slate-25 dark:border-slate-700; -} - -@mixin border-light-bottom() { - @apply border-b border-slate-25 dark:border-slate-700; -} - -// background -@mixin background-gray() { - background: $color-background; -} - -@mixin background-light() { - @apply bg-slate-50 dark:bg-slate-800; -} - -@mixin background-white() { - @apply bg-white dark:bg-slate-900; -} - // input form @mixin ghost-input() { box-shadow: none; @@ -87,65 +15,6 @@ $spinner-before-border-color: rgba(255, 255, 255, 0.7); } } -// flex-layout -@mixin space-between() { - display: flex; - justify-content: space-between; -} - -@mixin space-between-column() { - @include space-between; - flex-direction: column; -} - -@mixin space-between-row() { - @include space-between; - flex-direction: row; -} - -@mixin flex-shrink() { - flex: 0 0 auto; - max-width: 100%; -} - -@mixin flex-weight($value) { - // Grab flex-grow for older browsers. - $flex-grow: nth($value, 1); - - // 2009 - @include prefixer(box-flex, $flex-grow, webkit moz spec); - - // 2011 (IE 10), 2012 - @include prefixer(flex, $value, webkit moz ms spec); -} - -// full height -@mixin full-height() { - height: 100%; -} - -@mixin round-corner() { - border-radius: 1000px; -} - -@mixin scroll-on-hover() { - overflow: hidden; - - &:hover { - overflow-y: auto; - } -} - - -@mixin horizontal-scroll() { - overflow-y: auto; -} - -@mixin elegant-card() { - @include normal-shadow; - border-radius: $space-small; -} - @mixin color-spinner() { @keyframes spinner { to { @@ -230,17 +99,3 @@ $spinner-before-border-color: rgba(255, 255, 255, 0.7); border-left: $size solid transparent; } } - -@mixin text-ellipsis { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -@mixin three-column-grid($column-one-width: 16rem, - $column-three-width: 16rem) { - width: 100%; - height: 100%; - display: grid; - grid-template-columns: minmax($column-one-width, 6fr) 10fr minmax($column-three-width, 6fr); -} diff --git a/app/javascript/dashboard/components/widgets/conversation/Message.vue b/app/javascript/dashboard/components/widgets/conversation/Message.vue index 6a98fe42f..253eaeaa7 100644 --- a/app/javascript/dashboard/components/widgets/conversation/Message.vue +++ b/app/javascript/dashboard/components/widgets/conversation/Message.vue @@ -663,10 +663,10 @@ export default { } &.is-failed { - @apply bg-red-200 dark:bg-red-200; + @apply bg-n-ruby-4 dark:bg-n-ruby-4 text-n-slate-12; .message-text--metadata .time { - @apply text-red-50 dark:text-red-50; + @apply text-n-ruby-12 dark:text-n-ruby-12; } } } @@ -727,7 +727,7 @@ li.right { } .wrap.is-failed { - @apply flex items-end ml-auto; + @apply flex items-end ltr:ml-auto rtl:mr-auto; } } diff --git a/app/javascript/portal/application.scss b/app/javascript/portal/application.scss index 01246578e..bdb7bd1d4 100644 --- a/app/javascript/portal/application.scss +++ b/app/javascript/portal/application.scss @@ -3,10 +3,6 @@ @import 'tailwindcss/utilities'; @import 'widget/assets/scss/reset'; -@import 'widget/assets/scss/variables'; -@import 'widget/assets/scss/buttons'; -@import 'widget/assets/scss/mixins'; -@import 'widget/assets/scss/forms'; @import 'shared/assets/fonts/InterDisplay/inter-display'; html, @@ -18,7 +14,6 @@ body { letter-spacing: 0.2px; } - // Taking these utils from tailwind 3.x.x, need to remove once we upgrade .scroll-mt-24 { scroll-margin-top: 6rem; diff --git a/app/javascript/shared/assets/fonts/widget_fonts.scss b/app/javascript/shared/assets/fonts/widget_fonts.scss index a8145900e..f7fe95c17 100644 --- a/app/javascript/shared/assets/fonts/widget_fonts.scss +++ b/app/javascript/shared/assets/fonts/widget_fonts.scss @@ -1,3 +1,19 @@ +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 100; + font-display: swap; + src: url('shared/assets/fonts/Inter/Inter-Thin.woff2') format('woff2'); +} + +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 300; + font-display: swap; + src: url('shared/assets/fonts/Inter/Inter-Light.woff2') format('woff2'); +} + @font-face { font-family: 'Inter'; font-style: normal; @@ -6,6 +22,14 @@ src: url('shared/assets/fonts/Inter/Inter-Regular.woff2') format('woff2'); } +@font-face { + font-family: 'Inter'; + font-style: italic; + font-weight: 400; + font-display: swap; + src: url('shared/assets/fonts/Inter/Inter-Italic.woff2') format('woff2'); +} + @font-face { font-family: 'Inter'; font-style: normal; @@ -13,3 +37,19 @@ font-display: swap; src: url('shared/assets/fonts/Inter/Inter-Medium.woff2') format('woff2'); } + +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 600; + font-display: swap; + src: url('shared/assets/fonts/Inter/Inter-SemiBold.woff2') format('woff2'); +} + +@font-face { + font-family: 'Inter'; + font-style: normal; + font-weight: 700; + font-display: swap; + src: url('shared/assets/fonts/Inter/Inter-Bold.woff2') format('woff2'); +} diff --git a/app/javascript/shared/components/Branding.vue b/app/javascript/shared/components/Branding.vue index 3d3e5ff57..cc1ae385d 100644 --- a/app/javascript/shared/components/Branding.vue +++ b/app/javascript/shared/components/Branding.vue @@ -53,10 +53,10 @@ export default { :href="brandRedirectURL" rel="noreferrer noopener nofollow" target="_blank" - class="branding--link justify-center items-center leading-3" + class="branding--link text-n-slate-11 hover:text-n-slate-12 cursor-pointer text-xs inline-flex grayscale-[1] hover:grayscale-0 hover:opacity-100 opacity-90 no-underline justify-center items-center leading-3" > @@ -67,29 +67,3 @@ export default {
- - diff --git a/app/javascript/shared/components/Button.vue b/app/javascript/shared/components/Button.vue index 5d4213d0b..b6275a3a3 100644 --- a/app/javascript/shared/components/Button.vue +++ b/app/javascript/shared/components/Button.vue @@ -25,7 +25,7 @@ export default { computed: { buttonClassName() { let className = - 'text-white py-3 px-4 rounded shadow-sm leading-4 cursor-pointer disabled:opacity-50'; + 'text-white py-3 px-4 rounded-lg shadow-sm leading-4 cursor-pointer disabled:opacity-50'; if (this.type === 'clear') { className = 'flex mx-auto mt-4 text-xs leading-3 w-auto text-black-600'; } diff --git a/app/javascript/shared/components/CardButton.vue b/app/javascript/shared/components/CardButton.vue index d05eb5f01..a5e0577d0 100644 --- a/app/javascript/shared/components/CardButton.vue +++ b/app/javascript/shared/components/CardButton.vue @@ -57,7 +57,7 @@ export default { diff --git a/app/javascript/widget/components/ChatFooter.vue b/app/javascript/widget/components/ChatFooter.vue index 112ca028a..841b37216 100755 --- a/app/javascript/widget/components/ChatFooter.vue +++ b/app/javascript/widget/components/ChatFooter.vue @@ -156,23 +156,3 @@ export default {
- - diff --git a/app/javascript/widget/components/ChatHeader.vue b/app/javascript/widget/components/ChatHeader.vue index 3f644fa60..462cddcfe 100644 --- a/app/javascript/widget/components/ChatHeader.vue +++ b/app/javascript/widget/components/ChatHeader.vue @@ -4,7 +4,6 @@ import nextAvailabilityTime from 'widget/mixins/nextAvailabilityTime'; import FluentIcon from 'shared/components/FluentIcon/Index.vue'; import HeaderActions from './HeaderActions.vue'; import routerMixin from 'widget/mixins/routerMixin'; -import { useDarkMode } from 'widget/composables/useDarkMode'; export default { name: 'ChatHeader', @@ -35,10 +34,6 @@ export default { default: () => {}, }, }, - setup() { - const { getThemeClass } = useDarkMode(); - return { getThemeClass }; - }, computed: { isOnline() { const { workingHoursEnabled } = this.channelConfig; @@ -59,43 +54,32 @@ export default { diff --git a/app/javascript/widget/composables/specs/useDarkMode.spec.js b/app/javascript/widget/composables/specs/useDarkMode.spec.js index 0ed6b43bb..7ed87f06d 100644 --- a/app/javascript/widget/composables/specs/useDarkMode.spec.js +++ b/app/javascript/widget/composables/specs/useDarkMode.spec.js @@ -14,11 +14,10 @@ describe('useDarkMode', () => { vi.mocked(useMapGetter).mockReturnValue(mockDarkMode); }); - it('returns darkMode, prefersDarkMode, and getThemeClass', () => { + it('returns darkMode, prefersDarkMode', () => { const result = useDarkMode(); expect(result).toHaveProperty('darkMode'); expect(result).toHaveProperty('prefersDarkMode'); - expect(result).toHaveProperty('getThemeClass'); }); describe('prefersDarkMode', () => { @@ -47,25 +46,4 @@ describe('useDarkMode', () => { expect(prefersDarkMode.value).toBe(false); }); }); - - describe('getThemeClass', () => { - it('returns light class when darkMode is light', () => { - const { getThemeClass } = useDarkMode(); - expect(getThemeClass('light-class', 'dark-class')).toBe('light-class'); - }); - - it('returns dark class when darkMode is dark', () => { - mockDarkMode.value = 'dark'; - const { getThemeClass } = useDarkMode(); - expect(getThemeClass('light-class', 'dark-class')).toBe('dark-class'); - }); - - it('returns both classes when darkMode is auto', () => { - mockDarkMode.value = 'auto'; - const { getThemeClass } = useDarkMode(); - expect(getThemeClass('light-class', 'dark-class')).toBe( - 'light-class dark-class' - ); - }); - }); }); diff --git a/app/javascript/widget/composables/useDarkMode.js b/app/javascript/widget/composables/useDarkMode.js index 118d07161..bc19c456b 100644 --- a/app/javascript/widget/composables/useDarkMode.js +++ b/app/javascript/widget/composables/useDarkMode.js @@ -10,11 +10,6 @@ const getSystemPreference = () => const calculatePrefersDarkMode = (mode, systemPreference) => isDarkModeAuto(mode) ? systemPreference : isDarkMode(mode); -const calculateThemeClass = (mode, light, dark) => { - if (isDarkModeAuto(mode)) return `${light} ${dark}`; - return isDarkMode(mode) ? dark : light; -}; - /** * Composable for handling dark mode. * @returns {Object} An object containing computed properties and methods for dark mode. @@ -28,12 +23,8 @@ export function useDarkMode() { calculatePrefersDarkMode(darkMode.value, systemPreference.value) ); - const getThemeClass = (light, dark) => - calculateThemeClass(darkMode.value, light, dark); - return { darkMode, prefersDarkMode, - getThemeClass, }; } diff --git a/app/javascript/widget/router.js b/app/javascript/widget/router.js index e8230c2d9..71f82f7d1 100755 --- a/app/javascript/widget/router.js +++ b/app/javascript/widget/router.js @@ -1,5 +1,11 @@ import { createRouter, createWebHashHistory } from 'vue-router'; import ViewWithHeader from './components/layouts/ViewWithHeader.vue'; +import UnreadMessages from './views/UnreadMessages.vue'; +import Campaigns from './views/Campaigns.vue'; +import Home from './views/Home.vue'; +import PreChatForm from './views/PreChatForm.vue'; +import Messages from './views/Messages.vue'; +import ArticleViewer from './views/ArticleViewer.vue'; import store from './store'; const router = createRouter({ @@ -8,12 +14,12 @@ const router = createRouter({ { path: '/unread-messages', name: 'unread-messages', - component: () => import('./views/UnreadMessages.vue'), + component: UnreadMessages, }, { path: '/campaigns', name: 'campaigns', - component: () => import('./views/Campaigns.vue'), + component: Campaigns, }, { path: '/', @@ -22,22 +28,22 @@ const router = createRouter({ { path: '', name: 'home', - component: () => import('./views/Home.vue'), + component: Home, }, { path: '/prechat-form', name: 'prechat-form', - component: () => import('./views/PreChatForm.vue'), + component: PreChatForm, }, { path: '/messages', name: 'messages', - component: () => import('./views/Messages.vue'), + component: Messages, }, { path: '/article', name: 'article-viewer', - component: () => import('./views/ArticleViewer.vue'), + component: ArticleViewer, }, ], }, diff --git a/app/javascript/widget/views/ArticleViewer.vue b/app/javascript/widget/views/ArticleViewer.vue index 9289d0546..d3e1f9437 100644 --- a/app/javascript/widget/views/ArticleViewer.vue +++ b/app/javascript/widget/views/ArticleViewer.vue @@ -1,16 +1,24 @@ diff --git a/app/javascript/widget/views/Home.vue b/app/javascript/widget/views/Home.vue index 2f73059dc..123153c65 100755 --- a/app/javascript/widget/views/Home.vue +++ b/app/javascript/widget/views/Home.vue @@ -1,68 +1,22 @@ diff --git a/app/javascript/widget/views/Messages.vue b/app/javascript/widget/views/Messages.vue index bbfb24129..adb23ed50 100644 --- a/app/javascript/widget/views/Messages.vue +++ b/app/javascript/widget/views/Messages.vue @@ -19,7 +19,7 @@ export default {