mirror of
				https://github.com/lingble/chatwoot.git
				synced 2025-10-30 18:47:51 +00:00 
			
		
		
		
	chore: Remove older UI (#11720)
This commit is contained in:
		| @@ -1,6 +1,6 @@ | |||||||
| <script> | <script> | ||||||
| import { mapGetters } from 'vuex'; | import { mapGetters } from 'vuex'; | ||||||
| import AddAccountModal from '../dashboard/components/layout/sidebarComponents/AddAccountModal.vue'; | import AddAccountModal from './components/app/AddAccountModal.vue'; | ||||||
| import LoadingState from './components/widgets/LoadingState.vue'; | import LoadingState from './components/widgets/LoadingState.vue'; | ||||||
| import NetworkNotification from './components/NetworkNotification.vue'; | import NetworkNotification from './components/NetworkNotification.vue'; | ||||||
| import UpdateBanner from './components/app/UpdateBanner.vue'; | import UpdateBanner from './components/app/UpdateBanner.vue'; | ||||||
|   | |||||||
| @@ -1,101 +0,0 @@ | |||||||
| .slide-fade-enter-active { |  | ||||||
|   transition: all 0.3s var(--ease-in-cubic); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .slide-fade-leave-active { |  | ||||||
|   transition: all 0.3s var(--ease-out-cubic); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .slide-fade-enter, |  | ||||||
| .slide-fade-leave-to { |  | ||||||
|   opacity: 0; |  | ||||||
|   transform: translateX(10px); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .slide-fade-enter { |  | ||||||
|   transform: translateX($space-micro); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .slide-fade-leave-to { |  | ||||||
|   transform: translateX($space-medium); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .conversations-list-enter-active, |  | ||||||
| .conversations-list-leave-active { |  | ||||||
|   transition: all 0.25s var(--ease-out-cubic); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .conversations-list-enter, |  | ||||||
| .conversations-list-leave-to { |  | ||||||
|   opacity: 0; |  | ||||||
|   transform: translateX($space-medium); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .slide-up-enter-active { |  | ||||||
|   transition: all 0.3s var(--ease-in-cubic); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .slide-up-leave-active { |  | ||||||
|   transition: all 0.3s var(--ease-out-cubic); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .slide-up-enter, |  | ||||||
| .slide-up-leave-to { |  | ||||||
|   opacity: 0; |  | ||||||
|   transform: translateY(-$space-medium); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .menu-slide-enter-active, |  | ||||||
| .menu-slide-leave-active { |  | ||||||
|   transform: translateY(0); |  | ||||||
|   transition: |  | ||||||
|     transform 0.25s var(--ease-in-cubic), |  | ||||||
|     opacity 0.15s var(--ease-in-cubic); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .menu-slide-enter, |  | ||||||
| .menu-slide-leave-to { |  | ||||||
|   opacity: 0; |  | ||||||
|   transform: translateY($space-small); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .toast-fade-enter-active { |  | ||||||
|   transition: all 0.3s var(--ease-in-sine); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .toast-fade-leave-active { |  | ||||||
|   transition: all 0.1s var(--ease-out-sine); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .toast-fade-enter, |  | ||||||
| .toast-fade-leave-to { |  | ||||||
|   opacity: 0; |  | ||||||
|   transform: translateY(-$space-small); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .modal-fade-enter-active { |  | ||||||
|   transition: all 0.3s var(--ease-in-sine); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .modal-fade-leave-active { |  | ||||||
|   transition: all 0.1s var(--ease-out-sine); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .modal-fade-enter, |  | ||||||
| .modal-fade-leave-to { |  | ||||||
|   opacity: 0; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .network-notification-fade-enter-active { |  | ||||||
|   transition: all 0.1s var(--ease-in-sine); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .network-notification-fade-leave-active { |  | ||||||
|   transition: all 0.1s var(--ease-out-sine); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .network-notification-fade-enter, |  | ||||||
| .network-notification-fade-leave-to { |  | ||||||
|   opacity: 0; |  | ||||||
|   transform: translateY(-$space-small); |  | ||||||
| } |  | ||||||
| @@ -201,3 +201,8 @@ code { | |||||||
|     } |     } | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | // Table | ||||||
|  | table { | ||||||
|  |   @apply border-spacing-0 text-sm w-full; | ||||||
|  | } | ||||||
| @@ -1,38 +0,0 @@ | |||||||
| @import 'dashboard/assets/scss/variables'; |  | ||||||
|  |  | ||||||
| .formulate-input { |  | ||||||
|   .formulate-input-errors { |  | ||||||
|     list-style-type: none; |  | ||||||
|     margin: 0; |  | ||||||
|     padding: 0; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   .formulate-input-error { |  | ||||||
|     color: var(--r-400); |  | ||||||
|     display: block; |  | ||||||
|     font-size: var(--font-size-small); |  | ||||||
|     font-weight: $font-weight-normal; |  | ||||||
|     margin-bottom: $space-one; |  | ||||||
|     width: 100%; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .integration-hooks { |  | ||||||
|   .formulate-input[data-type='checkbox'] { |  | ||||||
|     .formulate-input-wrapper { |  | ||||||
|       @apply flex; |  | ||||||
|  |  | ||||||
|       .formulate-input-element { |  | ||||||
|         @apply pr-2; |  | ||||||
|  |  | ||||||
|         input { |  | ||||||
|           @apply mb-0; |  | ||||||
|         } |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     .formulate-input-element-decorator { |  | ||||||
|       @apply hidden; |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| @@ -1,21 +0,0 @@ | |||||||
| // loader class |  | ||||||
| .spinner { |  | ||||||
|   @include color-spinner(); |  | ||||||
|   @apply inline-block h-6 py-0 px-6 relative align-middle w-6; |  | ||||||
|  |  | ||||||
|   &.message { |  | ||||||
|     @apply bg-white dark:bg-slate-800 rounded-full left-0 my-3 mx-auto p-4 top-0; |  | ||||||
|  |  | ||||||
|     &::before { |  | ||||||
|       @apply -ml-3 -mt-3; |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   &.small { |  | ||||||
|     @apply h-4 w-4; |  | ||||||
|  |  | ||||||
|     &::before { |  | ||||||
|       @apply h-4 -mt-2 w-4; |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| @@ -1,48 +0,0 @@ | |||||||
| // scss-lint:disable SpaceAfterPropertyColon |  | ||||||
| @import 'shared/assets/fonts/inter'; |  | ||||||
|  |  | ||||||
| // Inter, |  | ||||||
| html, |  | ||||||
| body { |  | ||||||
|   font-family: |  | ||||||
|     'Inter', |  | ||||||
|     -apple-system, |  | ||||||
|     system-ui, |  | ||||||
|     BlinkMacSystemFont, |  | ||||||
|     'Segoe UI', |  | ||||||
|     Roboto, |  | ||||||
|     'Helvetica Neue', |  | ||||||
|     Tahoma, |  | ||||||
|     Arial, |  | ||||||
|     sans-serif !important; |  | ||||||
|   -moz-osx-font-smoothing: grayscale; |  | ||||||
|   -webkit-font-smoothing: antialiased; |  | ||||||
|   height: 100%; |  | ||||||
|   margin: 0; |  | ||||||
|   padding: 0; |  | ||||||
|   width: 100%; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .app-wrapper { |  | ||||||
|   @apply h-screen flex-grow-0 min-h-0 w-full; |  | ||||||
|  |  | ||||||
|   .button--fixed-top { |  | ||||||
|     @apply fixed ltr:right-2 rtl:left-2 top-2 flex flex-row; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .banner + .app-wrapper { |  | ||||||
|   // Reduce the height of the dashboard to make room for the banner. |  | ||||||
|   // And causing the top right green-action button to be pushed down when scrolling. |  | ||||||
|   @apply h-[calc(100%-48px)]; |  | ||||||
|  |  | ||||||
|   .button--fixed-top { |  | ||||||
|     @apply top-14; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   .off-canvas-content { |  | ||||||
|     .button--fixed-top { |  | ||||||
|       @apply top-2; |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| @@ -1,101 +0,0 @@ | |||||||
| @import 'dashboard/assets/scss/variables'; |  | ||||||
|  |  | ||||||
| $spinner-before-border-color: rgba(255, 255, 255, 0.7); |  | ||||||
|  |  | ||||||
| // input form |  | ||||||
| @mixin ghost-input() { |  | ||||||
|   box-shadow: none; |  | ||||||
|   border-color: transparent; |  | ||||||
|  |  | ||||||
|   &:active, |  | ||||||
|   &:hover, |  | ||||||
|   &:focus { |  | ||||||
|     border-color: transparent; |  | ||||||
|     box-shadow: none; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| @mixin color-spinner() { |  | ||||||
|   @keyframes spinner { |  | ||||||
|     to { |  | ||||||
|       transform: rotate(360deg); |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   &::before { |  | ||||||
|     animation: spinner .9s linear infinite; |  | ||||||
|     border: 2px solid $spinner-before-border-color; |  | ||||||
|     border-radius: 50%; |  | ||||||
|     border-top-color: lighten($color-woot, 10%); |  | ||||||
|     box-sizing: border-box; |  | ||||||
|     content: ''; |  | ||||||
|     height: $space-medium; |  | ||||||
|     left: 50%; |  | ||||||
|     margin-left: -$space-one; |  | ||||||
|     margin-top: -$space-one; |  | ||||||
|     position: absolute; |  | ||||||
|     top: 50%; |  | ||||||
|     width: $space-medium; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // -------------------------------------------------------- |  | ||||||
| // arrows |  | ||||||
| // -------------------------------------------------------- |  | ||||||
| // $direction: top, left, right, bottom, top-left, top-right, bottom-left, bottom-right |  | ||||||
| // $color: hex, rgb or rbga |  | ||||||
| // $size: px or em |  | ||||||
| // @example |  | ||||||
| // .element{ |  | ||||||
| //     @include arrow(top, #000, 50px); |  | ||||||
| // } |  | ||||||
| @mixin arrow($direction, $color, $size) { |  | ||||||
|   display: block; |  | ||||||
|   height: 0; |  | ||||||
|   width: 0; |  | ||||||
|   content: ''; |  | ||||||
|  |  | ||||||
|   @if $direction == 'top' { |  | ||||||
|     border-bottom: $size solid $color; |  | ||||||
|     border-left: $size solid transparent; |  | ||||||
|     border-right: $size solid transparent; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   @else if $direction == 'right' { |  | ||||||
|     border-bottom: $size solid transparent; |  | ||||||
|     border-left: $size solid $color; |  | ||||||
|     border-top: $size solid transparent; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   @else if $direction == 'bottom' { |  | ||||||
|     border-left: $size solid transparent; |  | ||||||
|     border-right: $size solid transparent; |  | ||||||
|     border-top: $size solid $color; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   @else if $direction == 'left' { |  | ||||||
|     border-bottom: $size solid transparent; |  | ||||||
|     border-right: $size solid $color; |  | ||||||
|     border-top: $size solid transparent; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   @else if $direction == 'top-left' { |  | ||||||
|     border-right: $size solid transparent; |  | ||||||
|     border-top: $size solid $color; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   @else if $direction == 'top-right' { |  | ||||||
|     border-left: $size solid transparent; |  | ||||||
|     border-top: $size solid $color; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   @else if $direction == 'bottom-left' { |  | ||||||
|     border-bottom: $size solid $color; |  | ||||||
|     border-right: $size solid transparent; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   @else if $direction == 'bottom-right' { |  | ||||||
|     border-bottom: $size solid $color; |  | ||||||
|     border-left: $size solid transparent; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| @@ -1,204 +0,0 @@ | |||||||
| .app-rtl--wrapper { |  | ||||||
|   direction: rtl; |  | ||||||
|  |  | ||||||
|   // Woot Tabs |  | ||||||
|   .tabs-title { |  | ||||||
|     &:first-child { |  | ||||||
|       margin-left: var(--space-small); |  | ||||||
|       margin-right: unset; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     &:last-child { |  | ||||||
|       margin-left: unset; |  | ||||||
|       margin-right: var(--space-small); |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   // woot tables |  | ||||||
|   table, |  | ||||||
|   thead, |  | ||||||
|   th { |  | ||||||
|     text-align: right; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   // Table footer |  | ||||||
|   .footer { |  | ||||||
|     .page-meta { |  | ||||||
|       direction: initial; |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   // Wizard box |  | ||||||
|   .wizard-box { |  | ||||||
|     direction: initial; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   // Conversation details |  | ||||||
|   .conversation-details-wrap { |  | ||||||
|     .conversation-panel { |  | ||||||
|       // Message text |  | ||||||
|       .text-content { |  | ||||||
|         p { |  | ||||||
|           unicode-bidi: plaintext; |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         ul { |  | ||||||
|           padding-left: unset; |  | ||||||
|           padding-right: var(--space-two); |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         li { |  | ||||||
|           text-align: right; |  | ||||||
|         } |  | ||||||
|       } |  | ||||||
|  |  | ||||||
|       // Message items and actions |  | ||||||
|       li { |  | ||||||
|         &.right { |  | ||||||
|           .sender--info { |  | ||||||
|             padding: var(--space-small) var(--space-smaller) |  | ||||||
|               var(--space-smaller) 0; |  | ||||||
|           } |  | ||||||
|  |  | ||||||
|           .context-menu-wrap { |  | ||||||
|             margin-left: 0; |  | ||||||
|             margin-right: auto; |  | ||||||
|           } |  | ||||||
|         } |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     // Conversation footer |  | ||||||
|     .conversation-footer { |  | ||||||
|       .preview-item { |  | ||||||
|         direction: initial; |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     // Custom attributes section in conversation sidebar |  | ||||||
|     .conversation-sidebar-wrap .checkbox-wrap { |  | ||||||
|       .checkbox { |  | ||||||
|         margin-left: var(--space-small); |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   // Conversation list |  | ||||||
|   .conversations-list-wrap { |  | ||||||
|     border-right: 0; |  | ||||||
|  |  | ||||||
|     .conversation { |  | ||||||
|       .conversation--meta { |  | ||||||
|         left: $space-normal; |  | ||||||
|         right: unset; |  | ||||||
|  |  | ||||||
|         .unread { |  | ||||||
|           margin-left: unset; |  | ||||||
|           margin-right: auto; |  | ||||||
|         } |  | ||||||
|       } |  | ||||||
|  |  | ||||||
|       .assignee-label { |  | ||||||
|         margin-left: 0; |  | ||||||
|         margin-right: var(--space-one); |  | ||||||
|       } |  | ||||||
|  |  | ||||||
|       .show-more--button { |  | ||||||
|         margin: unset; |  | ||||||
|         transform: rotate(180deg); |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     // Basic filter dropdown |  | ||||||
|     .basic-filter { |  | ||||||
|       left: 0; |  | ||||||
|       right: unset; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     // Bulk actions |  | ||||||
|     .bulk-action__container { |  | ||||||
|       .triangle { |  | ||||||
|         left: var(--triangle-position); |  | ||||||
|         right: unset; |  | ||||||
|       } |  | ||||||
|  |  | ||||||
|       .bulk-action__agents { |  | ||||||
|         left: var(--space-small); |  | ||||||
|         right: unset; |  | ||||||
|       } |  | ||||||
|  |  | ||||||
|       .labels-container { |  | ||||||
|         left: var(--space-small); |  | ||||||
|         right: unset; |  | ||||||
|  |  | ||||||
|         .label-checkbox { |  | ||||||
|           margin: 0 0 0 var(--space-one); |  | ||||||
|         } |  | ||||||
|       } |  | ||||||
|  |  | ||||||
|       .actions-container { |  | ||||||
|         left: var(--space-small); |  | ||||||
|         right: unset; |  | ||||||
|       } |  | ||||||
|  |  | ||||||
|       .bulk-action__teams { |  | ||||||
|         left: var(--space-small); |  | ||||||
|         right: unset; |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   // Contact notes |  | ||||||
|   .card.note-wrap { |  | ||||||
|     .time-stamp { |  | ||||||
|       unicode-bidi: plaintext; |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   // Toggle switch |  | ||||||
|   .toggle-button { |  | ||||||
|     &.small { |  | ||||||
|       span { |  | ||||||
|         &.active { |  | ||||||
|           transform: translate(var(--space-minus-small), var(--space-zero)); |  | ||||||
|         } |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     span { |  | ||||||
|       --minus-space-one-point-five: -0.9375rem; |  | ||||||
|  |  | ||||||
|       &.active { |  | ||||||
|         transform: translate( |  | ||||||
|           var(--minus-space-one-point-five), |  | ||||||
|           var(--space-zero) |  | ||||||
|         ); |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   // Modal |  | ||||||
|   .modal-container { |  | ||||||
|     text-align: right; |  | ||||||
|  |  | ||||||
|     .modal-footer { |  | ||||||
|       button { |  | ||||||
|         margin-left: 0; |  | ||||||
|         margin-right: var(--space-small); |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   // Other changes |  | ||||||
|   .colorpicker--chrome { |  | ||||||
|     direction: initial; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   .mention--box { |  | ||||||
|     direction: initial; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   .contact--form .input-group { |  | ||||||
|     direction: initial; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| @@ -1,97 +0,0 @@ | |||||||
| // Font sizes |  | ||||||
| $font-size-nano: 0.5rem; |  | ||||||
| $font-size-micro: 0.675rem; |  | ||||||
| $font-size-mini: 0.75rem; |  | ||||||
| $font-size-small: 0.875rem; |  | ||||||
| $font-size-default: 1rem; |  | ||||||
| $font-size-medium: 1.125rem; |  | ||||||
| $font-size-large: 1.375rem; |  | ||||||
| $font-size-big: 1.5rem; |  | ||||||
| $font-size-bigger: 1.75rem; |  | ||||||
| $font-size-mega: 2.125rem; |  | ||||||
| $font-size-giga: 2.5rem; |  | ||||||
|  |  | ||||||
| // spaces |  | ||||||
| $zero: 0; |  | ||||||
| $space-micro: 0.125rem; |  | ||||||
| $space-smaller: 0.25rem; |  | ||||||
| $space-small: 0.5rem; |  | ||||||
| $space-one: 0.675rem; |  | ||||||
| $space-slab: 0.75rem; |  | ||||||
| $space-normal: 1rem; |  | ||||||
| $space-two: 1.25rem; |  | ||||||
| $space-medium: 1.5rem; |  | ||||||
| $space-large: 2rem; |  | ||||||
| $space-larger: 3rem; |  | ||||||
| $space-jumbo: 4rem; |  | ||||||
| $space-mega: 6.25rem; |  | ||||||
|  |  | ||||||
| // font-weight |  | ||||||
| $font-weight-feather: 100; |  | ||||||
| $font-weight-light: 300; |  | ||||||
| $font-weight-normal: 400; |  | ||||||
| $font-weight-medium: 500; |  | ||||||
| $font-weight-bold: 600; |  | ||||||
| $font-weight-black: 700; |  | ||||||
|  |  | ||||||
| //Navbar |  | ||||||
| $nav-bar-width: 14.375rem; |  | ||||||
| $header-height: 3.5rem; |  | ||||||
|  |  | ||||||
| $woot-logo-padding: $space-large $space-two; |  | ||||||
|  |  | ||||||
| // Colors |  | ||||||
| $color-woot: #1f93ff; |  | ||||||
| $color-gray: #6e6f73; |  | ||||||
| $color-light-gray: #999a9b; |  | ||||||
|  |  | ||||||
| $color-border: var(--s-75); |  | ||||||
| $color-border-light: var(--s-50); |  | ||||||
| $color-border-dark: var(--s-100); |  | ||||||
|  |  | ||||||
| $color-background: var(--s-50); |  | ||||||
| $color-background-light: var(--s-25); |  | ||||||
|  |  | ||||||
| $color-white: #fff; |  | ||||||
| $color-body: #3c4858; |  | ||||||
| $color-heading: #1f2d3d; |  | ||||||
| $color-extra-light-blue: #f5f7f9; |  | ||||||
|  |  | ||||||
| $primary-color: $color-woot; |  | ||||||
| $secondary-color: #5d7592; |  | ||||||
| $success-color: #44ce4b; |  | ||||||
| $warning-color: #ffc532; |  | ||||||
| $alert-color: #ff382d; |  | ||||||
|  |  | ||||||
| $masked-bg: rgba(0, 0, 0, .4); |  | ||||||
|  |  | ||||||
| // Color-palettes |  | ||||||
|  |  | ||||||
| $color-primary-light: #c7e3ff; |  | ||||||
| $color-primary-dark: darken($color-woot, 20%); |  | ||||||
|  |  | ||||||
| // Thumbnail |  | ||||||
| $thumbnail-radius: 2.5rem; |  | ||||||
|  |  | ||||||
| // chat-header |  | ||||||
| $conv-header-height: 2.5rem; |  | ||||||
|  |  | ||||||
| // Inbox List |  | ||||||
|  |  | ||||||
| $inbox-thumb-size: 3rem; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| // Snackbar default |  | ||||||
| $woot-snackbar-bg: #323232; |  | ||||||
| $woot-snackbar-button: #ffeb3b; |  | ||||||
|  |  | ||||||
| $swift-ease-out-duration: .4s !default; |  | ||||||
| $swift-ease-out-function: cubic-bezier(0.37, 0, 0.63, 1) !default; |  | ||||||
| $swift-ease-out: all $swift-ease-out-duration $swift-ease-out-function !default; |  | ||||||
|  |  | ||||||
| // Transitions |  | ||||||
| $transition-ease-in: all 0.250s ease-in; |  | ||||||
|  |  | ||||||
| :root { |  | ||||||
|   --dashboard-app-tabs-height: 2.4375rem; |  | ||||||
| } |  | ||||||
| @@ -1,3 +1,4 @@ | |||||||
|  | // scss-lint:disable SpaceAfterPropertyColon | ||||||
| @import 'tailwindcss/base'; | @import 'tailwindcss/base'; | ||||||
| @import 'tailwindcss/components'; | @import 'tailwindcss/components'; | ||||||
| @import 'tailwindcss/utilities'; | @import 'tailwindcss/utilities'; | ||||||
| @@ -8,54 +9,66 @@ | |||||||
| // Next Colors | // Next Colors | ||||||
| @import 'next-colors'; | @import 'next-colors'; | ||||||
|  |  | ||||||
| @import 'shared/assets/stylesheets/animations'; | // Base styles for elements | ||||||
| @import 'shared/assets/stylesheets/colors'; | @import 'base'; | ||||||
| @import 'shared/assets/stylesheets/spacing'; |  | ||||||
| @import 'shared/assets/stylesheets/font-size'; |  | ||||||
| @import 'shared/assets/stylesheets/font-weights'; |  | ||||||
| @import 'shared/assets/stylesheets/shadows'; |  | ||||||
| @import 'shared/assets/stylesheets/border-radius'; |  | ||||||
| @import 'shared/assets/stylesheets/z-index'; |  | ||||||
|  |  | ||||||
| @import 'variables'; |  | ||||||
|  |  | ||||||
| @import 'mixins'; |  | ||||||
| @import 'helper-classes'; |  | ||||||
| @import 'formulate'; |  | ||||||
| @import 'date-picker'; |  | ||||||
|  |  | ||||||
| @import 'layout'; |  | ||||||
| @import 'animations'; |  | ||||||
| @import 'rtl'; |  | ||||||
|  |  | ||||||
| @import 'widgets/base'; |  | ||||||
| @import 'widgets/conversation-view'; |  | ||||||
| @import 'widgets/tabs'; |  | ||||||
| @import 'widgets/woot-tables'; |  | ||||||
|  |  | ||||||
|  | // Plugins | ||||||
| @import 'plugins/multiselect'; | @import 'plugins/multiselect'; | ||||||
| @import 'plugins/dropdown'; | @import 'plugins/date-picker'; | ||||||
|  |  | ||||||
|  | html, | ||||||
|  | body { | ||||||
|  |   font-family: | ||||||
|  |     'Inter', | ||||||
|  |     -apple-system, | ||||||
|  |     system-ui, | ||||||
|  |     BlinkMacSystemFont, | ||||||
|  |     'Segoe UI', | ||||||
|  |     Roboto, | ||||||
|  |     'Helvetica Neue', | ||||||
|  |     Tahoma, | ||||||
|  |     Arial, | ||||||
|  |     sans-serif !important; | ||||||
|  |   -moz-osx-font-smoothing: grayscale; | ||||||
|  |   -webkit-font-smoothing: antialiased; | ||||||
|  |   height: 100%; | ||||||
|  |   margin: 0; | ||||||
|  |   padding: 0; | ||||||
|  |   width: 100%; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .app-wrapper { | ||||||
|  |   @apply h-screen flex-grow-0 min-h-0 w-full; | ||||||
|  |  | ||||||
|  |   .button--fixed-top { | ||||||
|  |     @apply fixed ltr:right-2 rtl:left-2 top-2 flex flex-row; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .banner + .app-wrapper { | ||||||
|  |   // Reduce the height of the dashboard to make room for the banner. | ||||||
|  |   // And causing the top right green-action button to be pushed down when scrolling. | ||||||
|  |   @apply h-[calc(100%-48px)]; | ||||||
|  |  | ||||||
|  |   .button--fixed-top { | ||||||
|  |     @apply top-14; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   .off-canvas-content { | ||||||
|  |     .button--fixed-top { | ||||||
|  |       @apply top-2; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
| .tooltip { | .tooltip { | ||||||
|   @apply bg-slate-900 text-white py-1 px-2 z-40 text-xs rounded-md dark:bg-slate-200 dark:text-slate-900 max-w-96; |   @apply bg-n-solid-2 text-n-slate-12 py-1 px-2 z-40 text-xs rounded-md max-w-96; | ||||||
| } | } | ||||||
|  |  | ||||||
| #app { | #app { | ||||||
|   @apply h-full w-full; |   @apply h-full w-full; | ||||||
| } | } | ||||||
|  |  | ||||||
| .hide { |  | ||||||
|   @apply hidden; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .n-blue-border { |  | ||||||
|   @apply border-n-blue-border; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .n-blue-text { |  | ||||||
|   @apply text-n-blue-text; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .custom-dashed-border { | .custom-dashed-border { | ||||||
|   background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='100%25' height='100%25'%3E%3Crect x='0' y='0' width='100%25' height='100%25' fill='none' rx='16' ry='16' stroke='%23E2E3E7' stroke-width='2' stroke-dasharray='6, 8' stroke-dashoffset='0' stroke-linecap='round'/%3E%3C/svg%3E"); |   background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='100%25' height='100%25'%3E%3Crect x='0' y='0' width='100%25' height='100%25' fill='none' rx='16' ry='16' stroke='%23E2E3E7' stroke-width='2' stroke-dasharray='6, 8' stroke-dashoffset='0' stroke-linecap='round'/%3E%3C/svg%3E"); | ||||||
|   background-position: center; |   background-position: center; | ||||||
| @@ -67,351 +80,6 @@ | |||||||
|   background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='100%25' height='100%25'%3E%3Crect x='0' y='0' width='100%25' height='100%25' fill='none' rx='16' ry='16' stroke='%23343434' stroke-width='2' stroke-dasharray='6, 8' stroke-dashoffset='0' stroke-linecap='round'/%3E%3C/svg%3E"); |   background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='100%25' height='100%25'%3E%3Crect x='0' y='0' width='100%25' height='100%25' fill='none' rx='16' ry='16' stroke='%23343434' stroke-width='2' stroke-dasharray='6, 8' stroke-dashoffset='0' stroke-linecap='round'/%3E%3C/svg%3E"); | ||||||
| } | } | ||||||
|  |  | ||||||
| // scss-lint:disable PropertySortOrder |  | ||||||
| @layer base { |  | ||||||
|   :root { |  | ||||||
|     --color-amber-25: 254 253 251; |  | ||||||
|     --color-amber-50: 255 249 237; |  | ||||||
|     --color-amber-75: 255 243 208; |  | ||||||
|     --color-amber-100: 255 236 183; |  | ||||||
|     --color-amber-200: 255 224 161; |  | ||||||
|     --color-amber-300: 245 208 140; |  | ||||||
|     --color-amber-400: 228 187 120; |  | ||||||
|     --color-amber-500: 214 163 92; |  | ||||||
|     --color-amber-600: 214 163 92; |  | ||||||
|     --color-amber-700: 255 186 26; |  | ||||||
|     --color-amber-800: 145 89 48; |  | ||||||
|     --color-amber-900: 79 52 34; |  | ||||||
|  |  | ||||||
|     --color-ash-100: 235 235 239; |  | ||||||
|     --color-ash-200: 228 228 233; |  | ||||||
|     --color-ash-25: 252 252 253; |  | ||||||
|     --color-ash-300: 221 221 227; |  | ||||||
|     --color-ash-400: 211 212 219; |  | ||||||
|     --color-ash-50: 249 249 251; |  | ||||||
|     --color-ash-500: 185 187 198; |  | ||||||
|     --color-ash-600: 139 141 152; |  | ||||||
|     --color-ash-700: 126 128 138; |  | ||||||
|     --color-ash-75: 242 242 245; |  | ||||||
|     --color-ash-800: 96 100 108; |  | ||||||
|     --color-ash-900: 28 32 36; |  | ||||||
|  |  | ||||||
|     --color-primary-25: 251 253 255; |  | ||||||
|     --color-primary-50: 245 249 255; |  | ||||||
|     --color-primary-75: 233 243 255; |  | ||||||
|     --color-primary-100: 218 236 255; |  | ||||||
|     --color-primary-200: 201 226 255; |  | ||||||
|     --color-primary-300: 181 213 255; |  | ||||||
|     --color-primary-400: 155 195 252; |  | ||||||
|     --color-primary-500: 117 171 247; |  | ||||||
|     --color-primary-600: 39 129 246; |  | ||||||
|     --color-primary-700: 16 115 233; |  | ||||||
|     --color-primary-800: 8 109 224; |  | ||||||
|     --color-primary-900: 11 50 101; |  | ||||||
|  |  | ||||||
|     --color-ruby-100: 255 220 225; |  | ||||||
|     --color-ruby-200: 255 206 214; |  | ||||||
|     --color-ruby-25: 255 252 253; |  | ||||||
|     --color-ruby-300: 248 191 200; |  | ||||||
|     --color-ruby-400: 239 172 184; |  | ||||||
|     --color-ruby-50: 255 247 248; |  | ||||||
|     --color-ruby-500: 229 146 163; |  | ||||||
|     --color-ruby-600: 229 70 102; |  | ||||||
|     --color-ruby-700: 220 59 93; |  | ||||||
|     --color-ruby-75: 254 234 237; |  | ||||||
|     --color-ruby-800: 202 36 77; |  | ||||||
|     --color-ruby-900: 100 23 43; |  | ||||||
|  |  | ||||||
|     --color-teal-100: 224 248 243; |  | ||||||
|     --color-teal-200: 204 243 234; |  | ||||||
|     --color-teal-25: 250 254 253; |  | ||||||
|     --color-teal-300: 184 234 224; |  | ||||||
|     --color-teal-400: 161 222 210; |  | ||||||
|     --color-teal-50: 243 251 249; |  | ||||||
|     --color-teal-500: 83 185 171; |  | ||||||
|     --color-teal-600: 18 165 148; |  | ||||||
|     --color-teal-700: 13 155 138; |  | ||||||
|     --color-teal-75: 236 249 255; |  | ||||||
|     --color-teal-800: 0 133 115; |  | ||||||
|     --color-teal-900: 13 61 56; |  | ||||||
|  |  | ||||||
|     --color-green-25: 251 254 252; |  | ||||||
|     --color-green-50: 244 251 246; |  | ||||||
|     --color-green-75: 230 246 235; |  | ||||||
|     --color-green-100: 214 241 223; |  | ||||||
|     --color-green-200: 196 232 209; |  | ||||||
|     --color-green-300: 173 221 192; |  | ||||||
|     --color-green-400: 142 206 170; |  | ||||||
|     --color-green-500: 91 185 139; |  | ||||||
|     --color-green-600: 48 164 108; |  | ||||||
|     --color-green-700: 43 154 102; |  | ||||||
|     --color-green-800: 33 131 88; |  | ||||||
|     --color-green-900: 25 59 45; |  | ||||||
|  |  | ||||||
|     --color-mint-25: 249 254 253; |  | ||||||
|     --color-mint-50: 242 251 249; |  | ||||||
|     --color-mint-75: 221 249 242; |  | ||||||
|     --color-mint-100: 200 244 233; |  | ||||||
|     --color-mint-200: 179 236 222; |  | ||||||
|     --color-mint-300: 156 224 208; |  | ||||||
|     --color-mint-400: 126 207 189; |  | ||||||
|     --color-mint-500: 76 187 165; |  | ||||||
|     --color-mint-600: 134 234 212; |  | ||||||
|     --color-mint-700: 125 224 203; |  | ||||||
|     --color-mint-800: 2 120 100; |  | ||||||
|     --color-mint-900: 22 67 60; |  | ||||||
|  |  | ||||||
|     --color-sky-25: 249 254 255; |  | ||||||
|     --color-sky-50: 241 250 253; |  | ||||||
|     --color-sky-75: 225 246 253; |  | ||||||
|     --color-sky-100: 209 240 250; |  | ||||||
|     --color-sky-200: 190 231 245; |  | ||||||
|     --color-sky-300: 169 218 237; |  | ||||||
|     --color-sky-400: 141 202 227; |  | ||||||
|     --color-sky-500: 96 179 215; |  | ||||||
|     --color-sky-600: 124 226 254; |  | ||||||
|     --color-sky-700: 116 218 248; |  | ||||||
|     --color-sky-800: 0 116 158; |  | ||||||
|     --color-sky-900: 29 62 86; |  | ||||||
|  |  | ||||||
|     --color-indigo-25: 253 253 254; |  | ||||||
|     --color-indigo-50: 247 249 255; |  | ||||||
|     --color-indigo-75: 237 242 254; |  | ||||||
|     --color-indigo-100: 225 233 255; |  | ||||||
|     --color-indigo-200: 210 222 255; |  | ||||||
|     --color-indigo-300: 193 208 255; |  | ||||||
|     --color-indigo-400: 171 189 249; |  | ||||||
|     --color-indigo-500: 141 164 239; |  | ||||||
|     --color-indigo-600: 62 99 221; |  | ||||||
|     --color-indigo-700: 51 88 212; |  | ||||||
|     --color-indigo-800: 58 91 199; |  | ||||||
|     --color-indigo-900: 31 45 92; |  | ||||||
|  |  | ||||||
|     --color-iris-25: 253 253 255; |  | ||||||
|     --color-iris-50: 248 248 255; |  | ||||||
|     --color-iris-75: 240 241 254; |  | ||||||
|     --color-iris-100: 230 231 255; |  | ||||||
|     --color-iris-200: 218 220 255; |  | ||||||
|     --color-iris-300: 203 205 255; |  | ||||||
|     --color-iris-400: 184 186 248; |  | ||||||
|     --color-iris-500: 155 158 240; |  | ||||||
|     --color-iris-600: 91 91 214; |  | ||||||
|     --color-iris-700: 81 81 205; |  | ||||||
|     --color-iris-800: 87 83 198; |  | ||||||
|     --color-iris-900: 39 41 98; |  | ||||||
|  |  | ||||||
|     --color-violet-25: 253 252 254; |  | ||||||
|     --color-violet-50: 250 248 255; |  | ||||||
|     --color-violet-75: 244 240 254; |  | ||||||
|     --color-violet-100: 235 228 255; |  | ||||||
|     --color-violet-200: 225 217 255; |  | ||||||
|     --color-violet-300: 212 202 254; |  | ||||||
|     --color-violet-400: 194 181 245; |  | ||||||
|     --color-violet-500: 170 153 236; |  | ||||||
|     --color-violet-600: 110 86 207; |  | ||||||
|     --color-violet-700: 101 77 196; |  | ||||||
|     --color-violet-800: 101 80 185; |  | ||||||
|     --color-violet-900: 47 38 95; |  | ||||||
|  |  | ||||||
|     --color-pink-25: 255 252 254; |  | ||||||
|     --color-pink-50: 254 247 251; |  | ||||||
|     --color-pink-75: 254 233 245; |  | ||||||
|     --color-pink-100: 251 220 239; |  | ||||||
|     --color-pink-200: 246 206 231; |  | ||||||
|     --color-pink-300: 239 191 221; |  | ||||||
|     --color-pink-400: 231 172 208; |  | ||||||
|     --color-pink-500: 221 147 194; |  | ||||||
|     --color-pink-600: 214 64 159; |  | ||||||
|     --color-pink-700: 207 56 151; |  | ||||||
|     --color-pink-800: 194 41 138; |  | ||||||
|     --color-pink-900: 101 18 73; |  | ||||||
|  |  | ||||||
|     --color-orange-25: 254 252 251; |  | ||||||
|     --color-orange-50: 255 247 237; |  | ||||||
|     --color-orange-75: 255 239 214; |  | ||||||
|     --color-orange-100: 255 223 181; |  | ||||||
|     --color-orange-200: 255 209 154; |  | ||||||
|     --color-orange-300: 255 193 130; |  | ||||||
|     --color-orange-400: 245 174 115; |  | ||||||
|     --color-orange-500: 236 148 85; |  | ||||||
|     --color-orange-600: 247 107 21; |  | ||||||
|     --color-orange-700: 239 95 0; |  | ||||||
|     --color-orange-800: 204 78 0; |  | ||||||
|     --color-orange-900: 88 45 29; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   // scss-lint:disable QualifyingElement |  | ||||||
|   body.dark { |  | ||||||
|     --color-amber-25: 31 19 0; |  | ||||||
|     --color-amber-50: 37 24 4; |  | ||||||
|     --color-amber-75: 48 32 11; |  | ||||||
|     --color-amber-100: 57 39 15; |  | ||||||
|     --color-amber-200: 67 46 18; |  | ||||||
|     --color-amber-300: 83 57 22; |  | ||||||
|     --color-amber-400: 111 77 29; |  | ||||||
|     --color-amber-500: 169 118 42; |  | ||||||
|     --color-amber-600: 169 118 42; |  | ||||||
|     --color-amber-700: 255 203 71; |  | ||||||
|     --color-amber-800: 255 204 77; |  | ||||||
|     --color-amber-900: 255 231 179; |  | ||||||
|  |  | ||||||
|     --color-ash-100: 46 48 53; |  | ||||||
|     --color-ash-200: 53 55 60; |  | ||||||
|     --color-ash-25: 24 24 26; |  | ||||||
|     --color-ash-300: 60 63 68; |  | ||||||
|     --color-ash-400: 70 75 80; |  | ||||||
|     --color-ash-50: 27 27 31; |  | ||||||
|     --color-ash-500: 90 97 101; |  | ||||||
|     --color-ash-600: 105 110 119; |  | ||||||
|     --color-ash-700: 120 127 133; |  | ||||||
|     --color-ash-75: 39 40 45; |  | ||||||
|     --color-ash-800: 173 177 184; |  | ||||||
|     --color-ash-900: 237 238 240; |  | ||||||
|  |  | ||||||
|     --color-primary-25: 10 17 28; |  | ||||||
|     --color-primary-50: 15 24 38; |  | ||||||
|     --color-primary-75: 15 39 72; |  | ||||||
|     --color-primary-100: 10 49 99; |  | ||||||
|     --color-primary-200: 18 61 117; |  | ||||||
|     --color-primary-300: 29 74 134; |  | ||||||
|     --color-primary-400: 40 89 156; |  | ||||||
|     --color-primary-500: 48 106 186; |  | ||||||
|     --color-primary-600: 39 129 246; |  | ||||||
|     --color-primary-700: 21 116 231; |  | ||||||
|     --color-primary-800: 126 182 255; |  | ||||||
|     --color-primary-900: 205 227 255; |  | ||||||
|  |  | ||||||
|     --color-ruby-100: 78 19 37; |  | ||||||
|     --color-ruby-200: 94 26 46; |  | ||||||
|     --color-ruby-25: 25 17 19; |  | ||||||
|     --color-ruby-300: 111 37 57; |  | ||||||
|     --color-ruby-400: 136 52 71; |  | ||||||
|     --color-ruby-50: 30 21 23; |  | ||||||
|     --color-ruby-500: 179 68 90; |  | ||||||
|     --color-ruby-600: 229 70 102; |  | ||||||
|     --color-ruby-700: 236 90 114; |  | ||||||
|     --color-ruby-75: 58 20 30; |  | ||||||
|     --color-ruby-800: 255 148 157; |  | ||||||
|     --color-ruby-900: 254 210 225; |  | ||||||
|  |  | ||||||
|     --color-teal-100: 2 59 55; |  | ||||||
|     --color-teal-200: 8 72 67; |  | ||||||
|     --color-teal-25: 13 21 20; |  | ||||||
|     --color-teal-300: 28 105 97; |  | ||||||
|     --color-teal-400: 28 105 97; |  | ||||||
|     --color-teal-50: 17 28 27; |  | ||||||
|     --color-teal-500: 32 126 115; |  | ||||||
|     --color-teal-600: 41 163 131; |  | ||||||
|     --color-teal-700: 14 179 158; |  | ||||||
|     --color-teal-75: 13 45 42; |  | ||||||
|     --color-teal-800: 11 216 182; |  | ||||||
|     --color-teal-900: 173 240 221; |  | ||||||
|  |  | ||||||
|     --color-green-25: 14 21 18; |  | ||||||
|     --color-green-50: 18 27 23; |  | ||||||
|     --color-green-75: 19 45 33; |  | ||||||
|     --color-green-100: 17 59 41; |  | ||||||
|     --color-green-200: 23 73 51; |  | ||||||
|     --color-green-300: 32 87 62; |  | ||||||
|     --color-green-400: 40 104 74; |  | ||||||
|     --color-green-500: 47 124 87; |  | ||||||
|     --color-green-600: 48 164 108; |  | ||||||
|     --color-green-700: 51 176 116; |  | ||||||
|     --color-green-800: 61 214 140; |  | ||||||
|     --color-green-900: 177 241 203; |  | ||||||
|  |  | ||||||
|     --color-mint-25: 14 21 21; |  | ||||||
|     --color-mint-50: 15 27 27; |  | ||||||
|     --color-mint-75: 9 44 43; |  | ||||||
|     --color-mint-100: 0 58 56; |  | ||||||
|     --color-mint-200: 0 71 68; |  | ||||||
|     --color-mint-300: 16 86 80; |  | ||||||
|     --color-mint-400: 30 104 95; |  | ||||||
|     --color-mint-500: 39 127 112; |  | ||||||
|     --color-mint-600: 134 234 212; |  | ||||||
|     --color-mint-700: 168 245 229; |  | ||||||
|     --color-mint-800: 88 213 186; |  | ||||||
|     --color-mint-900: 196 245 225; |  | ||||||
|  |  | ||||||
|     --color-sky-25: 14 21 21; |  | ||||||
|     --color-sky-50: 15 27 27; |  | ||||||
|     --color-sky-75: 9 44 43; |  | ||||||
|     --color-sky-100: 0 58 56; |  | ||||||
|     --color-sky-200: 0 71 68; |  | ||||||
|     --color-sky-300: 16 86 80; |  | ||||||
|     --color-sky-400: 30 104 95; |  | ||||||
|     --color-sky-500: 39 127 112; |  | ||||||
|     --color-sky-600: 134 234 212; |  | ||||||
|     --color-sky-700: 168 245 229; |  | ||||||
|     --color-sky-800: 88 213 186; |  | ||||||
|     --color-sky-900: 196 245 225; |  | ||||||
|  |  | ||||||
|     --color-indigo-25: 17 19 31; |  | ||||||
|     --color-indigo-50: 20 23 38; |  | ||||||
|     --color-indigo-75: 24 36 73; |  | ||||||
|     --color-indigo-100: 29 46 98; |  | ||||||
|     --color-indigo-200: 37 57 116; |  | ||||||
|     --color-indigo-300: 48 67 132; |  | ||||||
|     --color-indigo-400: 58 79 151; |  | ||||||
|     --color-indigo-500: 67 93 177; |  | ||||||
|     --color-indigo-600: 62 99 221; |  | ||||||
|     --color-indigo-700: 84 114 228; |  | ||||||
|     --color-indigo-800: 158 177 255; |  | ||||||
|     --color-indigo-900: 214 225 255; |  | ||||||
|  |  | ||||||
|     --color-iris-25: 19 19 30; |  | ||||||
|     --color-iris-50: 23 22 37; |  | ||||||
|     --color-iris-75: 32 34 72; |  | ||||||
|     --color-iris-100: 38 42 101; |  | ||||||
|     --color-iris-200: 48 51 116; |  | ||||||
|     --color-iris-300: 61 62 130; |  | ||||||
|     --color-iris-400: 74 74 149; |  | ||||||
|     --color-iris-500: 89 88 177; |  | ||||||
|     --color-iris-600: 91 91 214; |  | ||||||
|     --color-iris-700: 110 106 222; |  | ||||||
|     --color-iris-800: 177 169 255; |  | ||||||
|     --color-iris-900: 224 223 254; |  | ||||||
|  |  | ||||||
|     --color-violet-25: 20 18 31; |  | ||||||
|     --color-violet-50: 27 21 37; |  | ||||||
|     --color-violet-75: 41 31 67; |  | ||||||
|     --color-violet-100: 51 37 91; |  | ||||||
|     --color-violet-200: 60 46 105; |  | ||||||
|     --color-violet-300: 71 56 118; |  | ||||||
|     --color-violet-400: 86 70 139; |  | ||||||
|     --color-violet-500: 105 88 173; |  | ||||||
|     --color-violet-600: 110 86 207; |  | ||||||
|     --color-violet-700: 125 102 217; |  | ||||||
|     --color-violet-800: 186 167 255; |  | ||||||
|     --color-violet-900: 226 221 254; |  | ||||||
|  |  | ||||||
|     --color-pink-25: 25 17 23; |  | ||||||
|     --color-pink-50: 33 18 29; |  | ||||||
|     --color-pink-75: 55 23 47; |  | ||||||
|     --color-pink-100: 75 20 61; |  | ||||||
|     --color-pink-200: 89 28 71; |  | ||||||
|     --color-pink-300: 105 41 85; |  | ||||||
|     --color-pink-400: 131 56 105; |  | ||||||
|     --color-pink-500: 168 72 133; |  | ||||||
|     --color-pink-600: 214 64 159; |  | ||||||
|     --color-pink-700: 222 81 168; |  | ||||||
|     --color-pink-800: 255 141 204; |  | ||||||
|     --color-pink-900: 253 209 234; |  | ||||||
|     --color-orange-25: 23 18 14; |  | ||||||
|     --color-orange-50: 30 22 15; |  | ||||||
|     --color-orange-75: 51 30 11; |  | ||||||
|     --color-orange-100: 70 33 0; |  | ||||||
|     --color-orange-200: 86 40 0; |  | ||||||
|     --color-orange-300: 102 53 12; |  | ||||||
|     --color-orange-400: 126 69 29; |  | ||||||
|     --color-orange-500: 163 88 41; |  | ||||||
|     --color-orange-600: 247 107 21; |  | ||||||
|     --color-orange-700: 255 128 31; |  | ||||||
|     --color-orange-800: 255 160 87; |  | ||||||
|     --color-orange-900: 255 224 194; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| @layer utilities { | @layer utilities { | ||||||
|   /* Hide scrollbar for Chrome, Safari and Opera */ |   /* Hide scrollbar for Chrome, Safari and Opera */ | ||||||
|   .no-scrollbar::-webkit-scrollbar { |   .no-scrollbar::-webkit-scrollbar { | ||||||
|   | |||||||
| @@ -30,11 +30,11 @@ | |||||||
| 
 | 
 | ||||||
|   .mx-input:disabled, |   .mx-input:disabled, | ||||||
|   .mx-input[readonly] { |   .mx-input[readonly] { | ||||||
|     @apply bg-white dark:bg-slate-900 cursor-pointer; |     @apply bg-n-background cursor-pointer; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   .mx-icon-calendar { |   .mx-icon-calendar { | ||||||
|     @apply dark:text-slate-500; |     @apply text-n-slate-10; | ||||||
|   } |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @@ -43,17 +43,17 @@ | |||||||
| 
 | 
 | ||||||
|   .cell { |   .cell { | ||||||
|     &.disabled { |     &.disabled { | ||||||
|       @apply bg-slate-25 dark:bg-slate-900 text-slate-200 dark:text-slate-300; |       @apply bg-n-slate-2 dark:bg-n-background text-n-slate-10; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     &:hover, |     &:hover, | ||||||
|     &.hover-in-range, |     &.hover-in-range, | ||||||
|     &.in-range { |     &.in-range { | ||||||
|       @apply bg-slate-75 dark:bg-slate-700 text-slate-900 dark:text-slate-100; |       @apply bg-n-slate-3 dark:bg-n-solid-3 text-n-slate-12; | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   .mx-calendar+.mx-calendar { |   .mx-calendar + .mx-calendar { | ||||||
|     @apply border-l border-n-weak; |     @apply border-l border-n-weak; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
| @@ -62,7 +62,7 @@ | |||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   .mx-time { |   .mx-time { | ||||||
|     @apply border-0 bg-white dark:bg-slate-800; |     @apply border-0 bg-n-background dark:bg-n-solid-2; | ||||||
| 
 | 
 | ||||||
|     .mx-time-header { |     .mx-time-header { | ||||||
|       @apply border-0; |       @apply border-0; | ||||||
| @@ -70,11 +70,11 @@ | |||||||
| 
 | 
 | ||||||
|     .mx-time-item { |     .mx-time-item { | ||||||
|       &.disabled { |       &.disabled { | ||||||
|         @apply bg-slate-25 dark:bg-slate-900; |         @apply bg-n-slate-2 dark:bg-n-background; | ||||||
|       } |       } | ||||||
| 
 | 
 | ||||||
|       &:hover { |       &:hover { | ||||||
|         @apply bg-slate-75 dark:bg-slate-700; |         @apply bg-n-slate-3 dark:bg-n-solid-3; | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| @@ -1,7 +0,0 @@ | |||||||
| .dropdown-pane { |  | ||||||
|   @apply border rounded-lg hidden relative invisible shadow-lg border-n-strong dark:border-n-strong box-content p-2 w-fit z-[9999]; |  | ||||||
|  |  | ||||||
|   &.dropdown-pane--open { |  | ||||||
|     @apply bg-n-alpha-3 backdrop-blur-[100px] absolute  block visible; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| @@ -17,6 +17,10 @@ | |||||||
|     @apply mb-4; |     @apply mb-4; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   &.invalid .multiselect__tags { | ||||||
|  |     @apply border-0 outline outline-1 outline-n-ruby-8 dark:outline-n-ruby-8 hover:outline-n-ruby-9 dark:hover:outline-n-ruby-9 disabled:outline-n-ruby-8 dark:disabled:outline-n-ruby-8; | ||||||
|  |   } | ||||||
|  |  | ||||||
|   &.multiselect--disabled { |   &.multiselect--disabled { | ||||||
|     @apply opacity-50  rounded-lg cursor-not-allowed pointer-events-auto; |     @apply opacity-50  rounded-lg cursor-not-allowed pointer-events-auto; | ||||||
|  |  | ||||||
| @@ -124,8 +128,7 @@ | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   .multiselect__input { |   .multiselect__input { | ||||||
|     @include ghost-input; |     @apply text-sm h-[2.875rem] mb-0 p-0 shadow-none border-transparent hover:border-transparent hover:shadow-none focus:border-transparent focus:shadow-none active:border-transparent active:shadow-none; | ||||||
|     @apply text-sm h-[2.875rem] mb-0 p-0; |  | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   .multiselect__single { |   .multiselect__single { | ||||||
|   | |||||||
| @@ -1 +0,0 @@ | |||||||
| // to be removed |  | ||||||
| @@ -1 +0,0 @@ | |||||||
| // to be removed |  | ||||||
| @@ -1,261 +0,0 @@ | |||||||
| // scss-lint:disable MergeableSelector |  | ||||||
|  |  | ||||||
| @tailwind utilities; |  | ||||||
| @layer utilities { |  | ||||||
|   .custom-gradient { |  | ||||||
|     background-image: linear-gradient( |  | ||||||
|       -180deg, |  | ||||||
|       transparent 3%, |  | ||||||
|       rgb(76 81 85) 130% |  | ||||||
|     ); |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   .bubble-with-types { |  | ||||||
|     @apply py-2 text-sm font-normal bg-woot-500 dark:bg-woot-500 relative px-4 m-0 text-white dark:text-white; |  | ||||||
|  |  | ||||||
|     .message-text__wrap { |  | ||||||
|       @apply relative; |  | ||||||
|  |  | ||||||
|       .link { |  | ||||||
|         @apply text-white dark:text-white underline; |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     .image, |  | ||||||
|     .video { |  | ||||||
|       @apply cursor-pointer relative; |  | ||||||
|  |  | ||||||
|       .modal-container { |  | ||||||
|         @apply text-center; |  | ||||||
|       } |  | ||||||
|  |  | ||||||
|       .modal-image { |  | ||||||
|         @apply max-h-[76vh] max-w-[76vw]; |  | ||||||
|       } |  | ||||||
|  |  | ||||||
|       .modal-video { |  | ||||||
|         @apply max-h-[76vh] max-w-[76vw]; |  | ||||||
|       } |  | ||||||
|  |  | ||||||
|       &::before { |  | ||||||
|         @apply custom-gradient bottom-0 h-[20%] content-[''] left-0 absolute w-full opacity-80; |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .conversation-panel { |  | ||||||
|   @apply flex-shrink flex-grow basis-px flex flex-col overflow-y-auto relative h-full m-0 pb-4; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .conversation-panel > li { |  | ||||||
|   @apply flex flex-shrink-0 flex-grow-0 flex-auto max-w-full mt-0 mr-0 mb-1 ml-0 relative first:mt-auto last:mb-0; |  | ||||||
|  |  | ||||||
|   &.unread--toast { |  | ||||||
|     + .right { |  | ||||||
|       @apply mb-1; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     + .left { |  | ||||||
|       @apply mb-0; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     span { |  | ||||||
|       @apply shadow-lg rounded-full bg-woot-500 dark:bg-woot-500 text-white dark:text-white text-xs font-medium my-2.5 mx-auto px-2.5 py-1.5; |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   .bubble { |  | ||||||
|     @apply bubble-with-types text-left break-words; |  | ||||||
|  |  | ||||||
|     .aplayer { |  | ||||||
|       @apply shadow-none; |  | ||||||
|       font-family: inherit; |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   &.left { |  | ||||||
|     .bubble { |  | ||||||
|       @apply rounded-r-lg rounded-l mr-auto break-words; |  | ||||||
|  |  | ||||||
|       &:not(.is-unsupported) { |  | ||||||
|         @apply border border-slate-50 dark:border-slate-700 bg-white dark:bg-slate-700 text-black-900 dark:text-slate-50; |  | ||||||
|       } |  | ||||||
|  |  | ||||||
|       &.is-image { |  | ||||||
|         @apply rounded-lg; |  | ||||||
|       } |  | ||||||
|  |  | ||||||
|       .link { |  | ||||||
|         @apply text-woot-600 dark:text-woot-600; |  | ||||||
|       } |  | ||||||
|  |  | ||||||
|       .file { |  | ||||||
|         .attachment-name { |  | ||||||
|           @apply text-slate-700 dark:text-woot-300; |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         .icon-wrap { |  | ||||||
|           @apply text-woot-600 dark:text-woot-600; |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         .download { |  | ||||||
|           @apply text-woot-600 dark:text-woot-600; |  | ||||||
|         } |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     + .right { |  | ||||||
|       @apply mt-2.5; |  | ||||||
|  |  | ||||||
|       .bubble { |  | ||||||
|         @apply rounded-tr-lg; |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     + .unread--toast { |  | ||||||
|       + .right { |  | ||||||
|         @apply mt-2.5; |  | ||||||
|  |  | ||||||
|         .bubble { |  | ||||||
|           @apply rounded-tr-lg; |  | ||||||
|         } |  | ||||||
|       } |  | ||||||
|  |  | ||||||
|       + .left { |  | ||||||
|         @apply mt-0; |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   &.right { |  | ||||||
|     @apply justify-end; |  | ||||||
|  |  | ||||||
|     .wrap { |  | ||||||
|       @apply flex items-end mr-4 text-right; |  | ||||||
|  |  | ||||||
|       .sender--info { |  | ||||||
|         @apply pt-2 pb-1 pr-0 pl-2; |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     .bubble { |  | ||||||
|       @apply ml-auto break-words rounded-l-lg rounded-r; |  | ||||||
|  |  | ||||||
|       &.is-private { |  | ||||||
|         @apply text-black-900 dark:text-white relative border border-solid bg-yellow-100 dark:bg-yellow-700 border-yellow-200 dark:border-yellow-600/25; |  | ||||||
|  |  | ||||||
|         blockquote { |  | ||||||
|           @apply border-slate-400 dark:border-slate-400 text-slate-800 dark:text-slate-300; |  | ||||||
|  |  | ||||||
|           p { |  | ||||||
|             @apply text-slate-600 dark:text-slate-300; |  | ||||||
|           } |  | ||||||
|         } |  | ||||||
|       } |  | ||||||
|  |  | ||||||
|       &.is-image { |  | ||||||
|         @apply rounded-lg; |  | ||||||
|  |  | ||||||
|         .message__mail-head { |  | ||||||
|           @apply px-4 py-2; |  | ||||||
|         } |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     + .left { |  | ||||||
|       @apply mt-2.5; |  | ||||||
|  |  | ||||||
|       .bubble { |  | ||||||
|         @apply rounded-tl-lg; |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     + .unread--toast { |  | ||||||
|       + .left { |  | ||||||
|         @apply rounded-lg; |  | ||||||
|  |  | ||||||
|         .bubble { |  | ||||||
|           @apply rounded-tl-lg; |  | ||||||
|         } |  | ||||||
|       } |  | ||||||
|  |  | ||||||
|       + .right { |  | ||||||
|         @apply mt-0; |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   &.center { |  | ||||||
|     @apply items-center justify-center; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   .wrap { |  | ||||||
|     max-width: Min(31rem, 84%); |  | ||||||
|     @apply my-0 mx-4; |  | ||||||
|  |  | ||||||
|     .sender--name { |  | ||||||
|       @apply text-xs mb-1; |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   .sender--thumbnail { |  | ||||||
|     @apply h-3 mr-3 mt-0.5 w-3 rounded-full; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   .activity-wrap { |  | ||||||
|     @apply flex justify-center text-sm my-1 mx-0 py-1 pr-0.5 pl-2.5 bg-slate-50 dark:bg-slate-600 text-slate-800 dark:text-slate-100 rounded-md border border-slate-100 dark:border-slate-600 border-solid; |  | ||||||
|  |  | ||||||
|     .is-text { |  | ||||||
|       @apply inline-flex items-center text-start 2xl:flex; |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .activity-wrap .message-text__wrap { |  | ||||||
|   .text-content p { |  | ||||||
|     @apply mb-0; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .conversation-footer { |  | ||||||
|   @apply flex relative flex-col; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .left .bubble .text-content { |  | ||||||
|   h1, |  | ||||||
|   h2, |  | ||||||
|   h3, |  | ||||||
|   h4, |  | ||||||
|   h5, |  | ||||||
|   h6 { |  | ||||||
|     @apply text-slate-800 dark:text-slate-100; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   a { |  | ||||||
|     @apply text-woot-500 dark:text-woot-500 underline; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   p:last-child { |  | ||||||
|     @apply mb-0; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .right .bubble .text-content { |  | ||||||
|   h1, |  | ||||||
|   h2, |  | ||||||
|   h3, |  | ||||||
|   h4, |  | ||||||
|   h5, |  | ||||||
|   h6 { |  | ||||||
|     @apply text-white dark:text-white; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   a { |  | ||||||
|     @apply text-white dark:text-white underline; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   p:last-child { |  | ||||||
|     @apply mb-0; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| @@ -1,77 +0,0 @@ | |||||||
| .tabs--container { |  | ||||||
|   @apply flex; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .tabs--container--with-border { |  | ||||||
|   @apply border-b border-b-n-weak; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .tabs--container--compact.tab--chat-type { |  | ||||||
|   .tabs-title { |  | ||||||
|     a { |  | ||||||
|       @apply py-2 text-sm; |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .tabs { |  | ||||||
|   @apply border-r-0 border-l-0 border-t-0 flex min-w-[6.25rem] py-0 px-4 list-none mb-0; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .tabs--with-scroll { |  | ||||||
|   @apply overflow-hidden py-0 px-1; |  | ||||||
|   max-width: calc(100% - 64px); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .tabs--scroll-button { |  | ||||||
|   @apply items-center rounded-none cursor-pointer flex h-auto justify-center min-w-[2rem]; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // Tab chat type |  | ||||||
| .tab--chat-type { |  | ||||||
|   @apply flex; |  | ||||||
|  |  | ||||||
|   .tabs-title { |  | ||||||
|     a { |  | ||||||
|       @apply text-base font-medium py-3; |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .tabs-title { |  | ||||||
|   @apply flex-shrink-0 my-0 mx-2; |  | ||||||
|  |  | ||||||
|   .badge { |  | ||||||
|     @apply bg-n-alpha-black2 dark:bg-n-solid-3 rounded-md text-n-slate-11 h-5 flex items-center justify-center text-xxs font-semibold my-0 mx-1 px-1 py-0; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   &:first-child { |  | ||||||
|     @apply ml-0; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   &:last-child { |  | ||||||
|     @apply mr-0; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   &:hover, |  | ||||||
|   &:focus { |  | ||||||
|     a { |  | ||||||
|       @apply text-n-slate-12; |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   a { |  | ||||||
|     @apply flex items-center flex-row border-b py-2.5 select-none cursor-pointer border-transparent text-n-slate-11 text-sm top-[1px] relative; |  | ||||||
|     transition: border-color 0.15s $swift-ease-out-function; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   &.is-active { |  | ||||||
|     a { |  | ||||||
|       @apply border-b border-n-brand text-n-blue-text; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     .badge { |  | ||||||
|       @apply bg-n-brand/10 dark:bg-n-brand/20 text-n-blue-text; |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| @@ -1,90 +0,0 @@ | |||||||
| table { |  | ||||||
|   @apply border-spacing-0 text-sm w-full; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .woot-table { |  | ||||||
|   thead { |  | ||||||
|     th { |  | ||||||
|       @apply font-semibold tracking-[1px] text-left px-2.5 uppercase text-slate-900 dark:text-slate-200; |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   tbody { |  | ||||||
|     tr { |  | ||||||
|       @apply border-b border-slate-50 dark:border-slate-800/30; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     td { |  | ||||||
|       @apply p-2.5 text-slate-700 dark:text-slate-100; |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   tr { |  | ||||||
|     .show-if-hover { |  | ||||||
|       transition: opacity 0.2s $swift-ease-out-function; |  | ||||||
|       @apply opacity-0; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     &:hover { |  | ||||||
|       .show-if-hover { |  | ||||||
|         @apply opacity-100; |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   .agent-name { |  | ||||||
|     @apply block font-medium capitalize; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   .woot-thumbnail { |  | ||||||
|     @apply rounded-full h-[3.125rem] w-[3.125rem]; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   .button-wrapper { |  | ||||||
|     @apply flex justify-start flex-row min-w-[12.5rem] gap-1; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   .button { |  | ||||||
|     margin: 0; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .ve-table { |  | ||||||
|   .ve-table-container.ve-table-border-around { |  | ||||||
|     @apply border-slate-200 dark:border-slate-700; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   .ve-table-content { |  | ||||||
|     .ve-table-header .ve-table-header-tr .ve-table-header-th { |  | ||||||
|       @apply bg-slate-50 dark:bg-slate-800 text-slate-800 dark:text-slate-100 border-slate-100 dark:border-slate-700/50; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     .ve-table-body .ve-table-body-tr .ve-table-body-td { |  | ||||||
|       @apply bg-white dark:bg-slate-900 text-slate-900 dark:text-slate-100 border-slate-75 dark:border-slate-800; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     .ve-table-body.ve-table-row-hover .ve-table-body-tr:hover td { |  | ||||||
|       @apply bg-slate-50 dark:bg-slate-700 text-slate-800 dark:text-slate-100; |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .table-pagination { |  | ||||||
|   .ve-pagination-total { |  | ||||||
|     @apply text-slate-600 dark:text-slate-200; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   .ve-pagination-goto { |  | ||||||
|     @apply text-slate-600 dark:text-slate-200; |  | ||||||
|  |  | ||||||
|     .ve-pagination-goto-input { |  | ||||||
|       @apply bg-white dark:bg-slate-900 text-slate-600 dark:text-slate-200; |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   .ve-pagination-li { |  | ||||||
|     @apply bg-white dark:bg-slate-900 text-slate-600 dark:text-slate-200 border-slate-75 dark:border-slate-700; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| @@ -40,9 +40,9 @@ const handleSubmit = campaignDetails => { | |||||||
|  |  | ||||||
| <template> | <template> | ||||||
|   <div |   <div | ||||||
|     class="w-[25rem] z-50 min-w-0 absolute top-10 ltr:right-0 rtl:left-0 bg-n-alpha-3 backdrop-blur-[100px] p-6 rounded-xl border border-slate-50 dark:border-slate-900 shadow-md flex flex-col gap-6 max-h-[85vh] overflow-y-auto" |     class="w-[25rem] z-50 min-w-0 absolute top-10 ltr:right-0 rtl:left-0 bg-n-alpha-3 backdrop-blur-[100px] p-6 rounded-xl border border-n-weak shadow-md flex flex-col gap-6 max-h-[85vh] overflow-y-auto" | ||||||
|   > |   > | ||||||
|     <h3 class="text-base font-medium text-slate-900 dark:text-slate-50"> |     <h3 class="text-base font-medium text-n-slate-12"> | ||||||
|       {{ t(`CAMPAIGN.LIVE_CHAT.CREATE.TITLE`) }} |       {{ t(`CAMPAIGN.LIVE_CHAT.CREATE.TITLE`) }} | ||||||
|     </h3> |     </h3> | ||||||
|     <LiveChatCampaignForm |     <LiveChatCampaignForm | ||||||
|   | |||||||
| @@ -306,7 +306,7 @@ defineExpose({ prepareCampaignDetails, isSubmitDisabled }); | |||||||
|         variant="faded" |         variant="faded" | ||||||
|         color="slate" |         color="slate" | ||||||
|         :label="t('CAMPAIGN.LIVE_CHAT.CREATE.FORM.BUTTONS.CANCEL')" |         :label="t('CAMPAIGN.LIVE_CHAT.CREATE.FORM.BUTTONS.CANCEL')" | ||||||
|         class="w-full bg-n-alpha-2 n-blue-text hover:bg-n-alpha-3" |         class="w-full bg-n-alpha-2 text-n-blue-text hover:bg-n-alpha-3" | ||||||
|         @click="handleCancel" |         @click="handleCancel" | ||||||
|       /> |       /> | ||||||
|       <Button |       <Button | ||||||
|   | |||||||
| @@ -39,9 +39,9 @@ const handleClose = () => emit('close'); | |||||||
|  |  | ||||||
| <template> | <template> | ||||||
|   <div |   <div | ||||||
|     class="w-[25rem] z-50 min-w-0 absolute top-10 ltr:right-0 rtl:left-0 bg-n-alpha-3 backdrop-blur-[100px] p-6 rounded-xl border border-slate-50 dark:border-slate-900 shadow-md flex flex-col gap-6" |     class="w-[25rem] z-50 min-w-0 absolute top-10 ltr:right-0 rtl:left-0 bg-n-alpha-3 backdrop-blur-[100px] p-6 rounded-xl border border-n-weak shadow-md flex flex-col gap-6" | ||||||
|   > |   > | ||||||
|     <h3 class="text-base font-medium text-slate-900 dark:text-slate-50"> |     <h3 class="text-base font-medium text-n-slate-12"> | ||||||
|       {{ t(`CAMPAIGN.SMS.CREATE.TITLE`) }} |       {{ t(`CAMPAIGN.SMS.CREATE.TITLE`) }} | ||||||
|     </h3> |     </h3> | ||||||
|     <SMSCampaignForm @submit="handleSubmit" @cancel="handleClose" /> |     <SMSCampaignForm @submit="handleSubmit" @cancel="handleClose" /> | ||||||
|   | |||||||
| @@ -174,7 +174,7 @@ const handleSubmit = async () => { | |||||||
|         color="slate" |         color="slate" | ||||||
|         type="button" |         type="button" | ||||||
|         :label="t('CAMPAIGN.SMS.CREATE.FORM.BUTTONS.CANCEL')" |         :label="t('CAMPAIGN.SMS.CREATE.FORM.BUTTONS.CANCEL')" | ||||||
|         class="w-full bg-n-alpha-2 n-blue-text hover:bg-n-alpha-3" |         class="w-full bg-n-alpha-2 text-n-blue-text hover:bg-n-alpha-3" | ||||||
|         @click="handleCancel" |         @click="handleCancel" | ||||||
|       /> |       /> | ||||||
|       <Button |       <Button | ||||||
|   | |||||||
| @@ -130,7 +130,7 @@ const onMergeContacts = async () => { | |||||||
|         variant="faded" |         variant="faded" | ||||||
|         color="slate" |         color="slate" | ||||||
|         :label="t('CONTACTS_LAYOUT.SIDEBAR.MERGE.BUTTONS.CANCEL')" |         :label="t('CONTACTS_LAYOUT.SIDEBAR.MERGE.BUTTONS.CANCEL')" | ||||||
|         class="w-full bg-n-alpha-2 n-blue-text hover:bg-n-alpha-3" |         class="w-full bg-n-alpha-2 text-n-blue-text hover:bg-n-alpha-3" | ||||||
|         @click="resetState" |         @click="resetState" | ||||||
|       /> |       /> | ||||||
|       <Button |       <Button | ||||||
|   | |||||||
| @@ -35,7 +35,7 @@ const messageClass = computed(() => { | |||||||
|     case 'error': |     case 'error': | ||||||
|       return 'text-n-ruby-9 dark:text-n-ruby-9'; |       return 'text-n-ruby-9 dark:text-n-ruby-9'; | ||||||
|     case 'success': |     case 'success': | ||||||
|       return 'text-green-500 dark:text-green-400'; |       return 'text-n-teal-10 dark:text-n-teal-10'; | ||||||
|     default: |     default: | ||||||
|       return 'text-n-slate-11 dark:text-n-slate-11'; |       return 'text-n-slate-11 dark:text-n-slate-11'; | ||||||
|   } |   } | ||||||
|   | |||||||
| @@ -35,12 +35,12 @@ defineProps({ | |||||||
|         <div class="flex flex-col items-center justify-center gap-6"> |         <div class="flex flex-col items-center justify-center gap-6"> | ||||||
|           <div class="flex flex-col items-center justify-center gap-3"> |           <div class="flex flex-col items-center justify-center gap-3"> | ||||||
|             <h2 |             <h2 | ||||||
|               class="text-3xl font-medium text-center text-slate-900 dark:text-white font-interDisplay" |               class="text-3xl font-medium text-center text-n-slate-12 font-interDisplay" | ||||||
|             > |             > | ||||||
|               {{ title }} |               {{ title }} | ||||||
|             </h2> |             </h2> | ||||||
|             <p |             <p | ||||||
|               class="max-w-xl text-base text-center text-slate-600 dark:text-slate-300 font-interDisplay tracking-[0.3px]" |               class="max-w-xl text-base text-center text-n-slate-11 font-interDisplay tracking-[0.3px]" | ||||||
|             > |             > | ||||||
|               {{ subtitle }} |               {{ subtitle }} | ||||||
|             </p> |             </p> | ||||||
|   | |||||||
| @@ -70,7 +70,7 @@ const category = { | |||||||
|       <div |       <div | ||||||
|         v-for="(article, index) in articles" |         v-for="(article, index) in articles" | ||||||
|         :key="index" |         :key="index" | ||||||
|         class="px-20 py-4 bg-white dark:bg-slate-900" |         class="px-20 py-4 bg-n-background" | ||||||
|       > |       > | ||||||
|         <ArticleCard |         <ArticleCard | ||||||
|           :id="article.id" |           :id="article.id" | ||||||
|   | |||||||
| @@ -32,7 +32,7 @@ const categories = [ | |||||||
|       <div |       <div | ||||||
|         v-for="(category, index) in categories" |         v-for="(category, index) in categories" | ||||||
|         :key="index" |         :key="index" | ||||||
|         class="px-20 py-4 bg-white dark:bg-slate-900" |         class="px-20 py-4 bg-n-background" | ||||||
|       > |       > | ||||||
|         <CategoryCard |         <CategoryCard | ||||||
|           :id="category.id" |           :id="category.id" | ||||||
|   | |||||||
| @@ -121,11 +121,7 @@ const handleAction = ({ action, value }) => { | |||||||
|     </div> |     </div> | ||||||
|     <span |     <span | ||||||
|       class="text-sm line-clamp-3" |       class="text-sm line-clamp-3" | ||||||
|       :class=" |       :class="hasDescription ? 'text-n-slate-11' : 'text-n-slate-9'" | ||||||
|         hasDescription |  | ||||||
|           ? 'text-slate-500 dark:text-slate-400' |  | ||||||
|           : 'text-slate-400 dark:text-slate-700' |  | ||||||
|       " |  | ||||||
|     > |     > | ||||||
|       {{ description }} |       {{ description }} | ||||||
|     </span> |     </span> | ||||||
|   | |||||||
| @@ -8,7 +8,7 @@ import ArticleEmptyState from './ArticleEmptyState.vue'; | |||||||
|     :layout="{ type: 'single', width: '1100px' }" |     :layout="{ type: 'single', width: '1100px' }" | ||||||
|   > |   > | ||||||
|     <Variant title="Article Empty State"> |     <Variant title="Article Empty State"> | ||||||
|       <div class="w-full h-full px-20 mx-auto bg-white dark:bg-slate-900"> |       <div class="w-full h-full px-20 mx-auto bg-n-background"> | ||||||
|         <ArticleEmptyState /> |         <ArticleEmptyState /> | ||||||
|       </div> |       </div> | ||||||
|     </Variant> |     </Variant> | ||||||
|   | |||||||
| @@ -8,7 +8,7 @@ import PortalEmptyState from './PortalEmptyState.vue'; | |||||||
|     :layout="{ type: 'single', width: '1100px' }" |     :layout="{ type: 'single', width: '1100px' }" | ||||||
|   > |   > | ||||||
|     <Variant title="Portal Empty State"> |     <Variant title="Portal Empty State"> | ||||||
|       <div class="w-full h-full px-20 mx-auto bg-white dark:bg-slate-900"> |       <div class="w-full h-full px-20 mx-auto bg-n-background"> | ||||||
|         <PortalEmptyState /> |         <PortalEmptyState /> | ||||||
|       </div> |       </div> | ||||||
|     </Variant> |     </Variant> | ||||||
|   | |||||||
| @@ -14,7 +14,7 @@ const locales = [ | |||||||
|     :layout="{ type: 'grid', width: '800px' }" |     :layout="{ type: 'grid', width: '800px' }" | ||||||
|   > |   > | ||||||
|     <Variant title="Locale Card"> |     <Variant title="Locale Card"> | ||||||
|       <div class="px-10 py-4 bg-white dark:bg-slate-900"> |       <div class="px-10 py-4 bg-n-background"> | ||||||
|         <div v-for="(locale, index) in locales" :key="index" class="px-20 py-2"> |         <div v-for="(locale, index) in locales" :key="index" class="px-20 py-2"> | ||||||
|           <LocaleCard |           <LocaleCard | ||||||
|             :locale="locale.name" |             :locale="locale.name" | ||||||
|   | |||||||
| @@ -55,9 +55,7 @@ const handleAction = ({ action, value }) => { | |||||||
|   <CardLayout> |   <CardLayout> | ||||||
|     <div class="flex justify-between gap-2"> |     <div class="flex justify-between gap-2"> | ||||||
|       <div class="flex items-center justify-start gap-2"> |       <div class="flex items-center justify-start gap-2"> | ||||||
|         <span |         <span class="text-sm font-medium text-n-slate-12 line-clamp-1"> | ||||||
|           class="text-sm font-medium text-slate-900 dark:text-slate-50 line-clamp-1" |  | ||||||
|         > |  | ||||||
|           {{ locale }} ({{ localeCode }}) |           {{ locale }} ({{ localeCode }}) | ||||||
|         </span> |         </span> | ||||||
|         <span |         <span | ||||||
| @@ -69,9 +67,7 @@ const handleAction = ({ action, value }) => { | |||||||
|       </div> |       </div> | ||||||
|       <div class="flex items-center justify-end gap-4"> |       <div class="flex items-center justify-end gap-4"> | ||||||
|         <div class="flex items-center gap-4"> |         <div class="flex items-center gap-4"> | ||||||
|           <span |           <span class="text-sm text-n-slate-11 whitespace-nowrap"> | ||||||
|             class="text-sm text-slate-500 dark:text-slate-400 whitespace-nowrap" |  | ||||||
|           > |  | ||||||
|             {{ |             {{ | ||||||
|               $t( |               $t( | ||||||
|                 'HELP_CENTER.LOCALES_PAGE.LOCALE_CARD.ARTICLES_COUNT', |                 'HELP_CENTER.LOCALES_PAGE.LOCALE_CARD.ARTICLES_COUNT', | ||||||
| @@ -79,10 +75,8 @@ const handleAction = ({ action, value }) => { | |||||||
|               ) |               ) | ||||||
|             }} |             }} | ||||||
|           </span> |           </span> | ||||||
|           <div class="w-px h-3 bg-slate-75 dark:bg-slate-800" /> |           <div class="w-px h-3 bg-n-weak" /> | ||||||
|           <span |           <span class="text-sm text-n-slate-11 whitespace-nowrap"> | ||||||
|             class="text-sm text-slate-500 dark:text-slate-400 whitespace-nowrap" |  | ||||||
|           > |  | ||||||
|             {{ |             {{ | ||||||
|               $t( |               $t( | ||||||
|                 'HELP_CENTER.LOCALES_PAGE.LOCALE_CARD.CATEGORIES_COUNT', |                 'HELP_CENTER.LOCALES_PAGE.LOCALE_CARD.CATEGORIES_COUNT', | ||||||
|   | |||||||
| @@ -146,7 +146,7 @@ const previewArticle = () => { | |||||||
| <style lang="scss" scoped> | <style lang="scss" scoped> | ||||||
| ::v-deep { | ::v-deep { | ||||||
|   .ProseMirror .empty-node::before { |   .ProseMirror .empty-node::before { | ||||||
|     @apply text-slate-200 dark:text-slate-500 text-base; |     @apply text-n-slate-10 text-base; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   .ProseMirror-menubar-wrapper { |   .ProseMirror-menubar-wrapper { | ||||||
| @@ -161,7 +161,7 @@ const previewArticle = () => { | |||||||
|  |  | ||||||
|   .editor-root .has-selection { |   .editor-root .has-selection { | ||||||
|     .ProseMirror-menubar { |     .ProseMirror-menubar { | ||||||
|       @apply h-8 rounded-lg !px-2 z-50 bg-slate-50 dark:bg-slate-800 items-center gap-4 ml-0 mb-0 shadow-md border border-slate-75 dark:border-slate-700/50; |       @apply h-8 rounded-lg !px-2 z-50 bg-n-solid-3 items-center gap-4 ml-0 mb-0 shadow-md outline outline-1 outline-n-weak; | ||||||
|       display: flex; |       display: flex; | ||||||
|       top: var(--selection-top, auto) !important; |       top: var(--selection-top, auto) !important; | ||||||
|       left: var(--selection-left, 0) !important; |       left: var(--selection-left, 0) !important; | ||||||
| @@ -180,6 +180,10 @@ const previewArticle = () => { | |||||||
|           } |           } | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
|  |  | ||||||
|  |       .ProseMirror-menu-active { | ||||||
|  |         @apply bg-n-slate-3; | ||||||
|  |       } | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -206,7 +206,7 @@ onMounted(() => { | |||||||
|         /> |         /> | ||||||
|       </OnClickOutside> |       </OnClickOutside> | ||||||
|     </div> |     </div> | ||||||
|     <div class="w-px h-3 bg-slate-50 dark:bg-slate-800" /> |     <div class="w-px h-3 bg-n-weak" /> | ||||||
|     <div class="relative"> |     <div class="relative"> | ||||||
|       <OnClickOutside @trigger="openCategoryList = false"> |       <OnClickOutside @trigger="openCategoryList = false"> | ||||||
|         <Button |         <Button | ||||||
| @@ -239,7 +239,7 @@ onMounted(() => { | |||||||
|       </OnClickOutside> |       </OnClickOutside> | ||||||
|     </div> |     </div> | ||||||
|  |  | ||||||
|     <div class="w-px h-3 bg-slate-50 dark:bg-slate-800" /> |     <div class="w-px h-3 bg-n-weak" /> | ||||||
|     <div class="relative"> |     <div class="relative"> | ||||||
|       <OnClickOutside @trigger="openProperties = false"> |       <OnClickOutside @trigger="openProperties = false"> | ||||||
|         <Button |         <Button | ||||||
|   | |||||||
| @@ -128,7 +128,7 @@ const updateArticleStatus = async ({ value }) => { | |||||||
|     <div class="flex items-center gap-4"> |     <div class="flex items-center gap-4"> | ||||||
|       <span |       <span | ||||||
|         v-if="isUpdating || isSaved" |         v-if="isUpdating || isSaved" | ||||||
|         class="text-xs font-medium transition-all duration-300 text-slate-500 dark:text-slate-400" |         class="text-xs font-medium transition-all duration-300 text-n-slate-11" | ||||||
|       > |       > | ||||||
|         {{ statusText }} |         {{ statusText }} | ||||||
|       </span> |       </span> | ||||||
|   | |||||||
| @@ -64,7 +64,7 @@ const articles = [ | |||||||
| <template> | <template> | ||||||
|   <Story title="Pages/HelpCenter/ArticlesPage" :layout="{ type: 'single' }"> |   <Story title="Pages/HelpCenter/ArticlesPage" :layout="{ type: 'single' }"> | ||||||
|     <Variant title="All Articles"> |     <Variant title="All Articles"> | ||||||
|       <div class="w-full min-h-screen bg-white dark:bg-slate-900"> |       <div class="w-full min-h-screen bg-n-background"> | ||||||
|         <ArticlesPage :articles="articles" /> |         <ArticlesPage :articles="articles" /> | ||||||
|       </div> |       </div> | ||||||
|     </Variant> |     </Variant> | ||||||
|   | |||||||
| @@ -201,7 +201,7 @@ const categories = [ | |||||||
| <template> | <template> | ||||||
|   <Story title="Pages/HelpCenter/CategoryPage" :layout="{ type: 'single' }"> |   <Story title="Pages/HelpCenter/CategoryPage" :layout="{ type: 'single' }"> | ||||||
|     <Variant title="All Categories"> |     <Variant title="All Categories"> | ||||||
|       <div class="w-full min-h-screen bg-white dark:bg-slate-900"> |       <div class="w-full min-h-screen bg-n-background"> | ||||||
|         <CategoriesPage :categories="categories" /> |         <CategoriesPage :categories="categories" /> | ||||||
|       </div> |       </div> | ||||||
|     </Variant> |     </Variant> | ||||||
|   | |||||||
| @@ -90,9 +90,9 @@ const handleCategory = async formData => { | |||||||
|  |  | ||||||
| <template> | <template> | ||||||
|   <div |   <div | ||||||
|     class="w-[25rem] absolute top-10 ltr:right-0 rtl:left-0 bg-n-alpha-3 backdrop-blur-[100px] p-6 rounded-xl border border-slate-50 dark:border-slate-900 shadow-md flex flex-col gap-6" |     class="w-[25rem] absolute top-10 ltr:right-0 rtl:left-0 bg-n-alpha-3 backdrop-blur-[100px] p-6 rounded-xl border border-n-weak shadow-md flex flex-col gap-6" | ||||||
|   > |   > | ||||||
|     <h3 class="text-base font-medium text-slate-900 dark:text-slate-50"> |     <h3 class="text-base font-medium text-n-slate-12"> | ||||||
|       {{ |       {{ | ||||||
|         t( |         t( | ||||||
|           `HELP_CENTER.CATEGORY_PAGE.CATEGORY_DIALOG.HEADER.${mode.toUpperCase()}` |           `HELP_CENTER.CATEGORY_PAGE.CATEGORY_DIALOG.HEADER.${mode.toUpperCase()}` | ||||||
|   | |||||||
| @@ -246,7 +246,7 @@ defineExpose({ state, isSubmitDisabled }); | |||||||
|           variant="faded" |           variant="faded" | ||||||
|           color="slate" |           color="slate" | ||||||
|           :label="t('HELP_CENTER.CATEGORY_PAGE.CATEGORY_DIALOG.BUTTONS.CANCEL')" |           :label="t('HELP_CENTER.CATEGORY_PAGE.CATEGORY_DIALOG.BUTTONS.CANCEL')" | ||||||
|           class="w-full bg-n-alpha-2 n-blue-text hover:bg-n-alpha-3" |           class="w-full bg-n-alpha-2 text-n-blue-text hover:bg-n-alpha-3" | ||||||
|           @click="handleCancel" |           @click="handleCancel" | ||||||
|         /> |         /> | ||||||
|         <Button |         <Button | ||||||
|   | |||||||
| @@ -147,10 +147,8 @@ const handleBreadcrumbClick = () => { | |||||||
|           /> |           /> | ||||||
|         </OnClickOutside> |         </OnClickOutside> | ||||||
|       </div> |       </div> | ||||||
|       <div class="w-px h-3.5 rounded my-auto bg-slate-75 dark:bg-slate-800" /> |       <div class="w-px h-3.5 rounded my-auto bg-n-weak" /> | ||||||
|       <span |       <span class="min-w-0 text-sm font-medium truncate text-n-slate-12"> | ||||||
|         class="min-w-0 text-sm font-medium truncate text-slate-800 dark:text-slate-100" |  | ||||||
|       > |  | ||||||
|         {{ |         {{ | ||||||
|           t('HELP_CENTER.CATEGORY_PAGE.CATEGORY_HEADER.CATEGORIES_COUNT', { |           t('HELP_CENTER.CATEGORY_PAGE.CATEGORY_HEADER.CATEGORIES_COUNT', { | ||||||
|             n: categoriesCount, |             n: categoriesCount, | ||||||
|   | |||||||
| @@ -44,7 +44,7 @@ const locales = [ | |||||||
| <template> | <template> | ||||||
|   <Story title="Pages/HelpCenter/LocalePage" :layout="{ type: 'single' }"> |   <Story title="Pages/HelpCenter/LocalePage" :layout="{ type: 'single' }"> | ||||||
|     <Variant title="All Locales"> |     <Variant title="All Locales"> | ||||||
|       <div class="w-full min-h-screen bg-white dark:bg-slate-900"> |       <div class="w-full min-h-screen bg-n-background"> | ||||||
|         <LocalesPage :locales="locales" /> |         <LocalesPage :locales="locales" /> | ||||||
|       </div> |       </div> | ||||||
|     </Variant> |     </Variant> | ||||||
|   | |||||||
| @@ -35,7 +35,7 @@ const localeCount = computed(() => props.locales?.length); | |||||||
|     <template #header-actions> |     <template #header-actions> | ||||||
|       <div class="flex items-center justify-between"> |       <div class="flex items-center justify-between"> | ||||||
|         <div class="flex items-center gap-4"> |         <div class="flex items-center gap-4"> | ||||||
|           <span class="text-sm font-medium text-slate-800 dark:text-slate-100"> |           <span class="text-sm font-medium text-n-slate-12"> | ||||||
|             {{ $t('HELP_CENTER.LOCALES_PAGE.LOCALES_COUNT', localeCount) }} |             {{ $t('HELP_CENTER.LOCALES_PAGE.LOCALES_COUNT', localeCount) }} | ||||||
|           </span> |           </span> | ||||||
|         </div> |         </div> | ||||||
|   | |||||||
| @@ -211,7 +211,7 @@ const handleAvatarDelete = () => { | |||||||
|         class="grid items-start justify-between w-full gap-2 grid-cols-[200px,1fr]" |         class="grid items-start justify-between w-full gap-2 grid-cols-[200px,1fr]" | ||||||
|       > |       > | ||||||
|         <label |         <label | ||||||
|           class="text-sm font-medium whitespace-nowrap py-2.5 text-slate-900 dark:text-slate-50" |           class="text-sm font-medium whitespace-nowrap py-2.5 text-n-slate-12" | ||||||
|         > |         > | ||||||
|           {{ t('HELP_CENTER.PORTAL_SETTINGS.FORM.NAME.LABEL') }} |           {{ t('HELP_CENTER.PORTAL_SETTINGS.FORM.NAME.LABEL') }} | ||||||
|         </label> |         </label> | ||||||
| @@ -229,7 +229,7 @@ const handleAvatarDelete = () => { | |||||||
|         class="grid items-start justify-between w-full gap-2 grid-cols-[200px,1fr]" |         class="grid items-start justify-between w-full gap-2 grid-cols-[200px,1fr]" | ||||||
|       > |       > | ||||||
|         <label |         <label | ||||||
|           class="text-sm font-medium whitespace-nowrap py-2.5 text-slate-900 dark:text-slate-50" |           class="text-sm font-medium whitespace-nowrap py-2.5 text-n-slate-12" | ||||||
|         > |         > | ||||||
|           {{ t('HELP_CENTER.PORTAL_SETTINGS.FORM.HEADER_TEXT.LABEL') }} |           {{ t('HELP_CENTER.PORTAL_SETTINGS.FORM.HEADER_TEXT.LABEL') }} | ||||||
|         </label> |         </label> | ||||||
| @@ -245,7 +245,7 @@ const handleAvatarDelete = () => { | |||||||
|         class="grid items-start justify-between w-full gap-2 grid-cols-[200px,1fr]" |         class="grid items-start justify-between w-full gap-2 grid-cols-[200px,1fr]" | ||||||
|       > |       > | ||||||
|         <label |         <label | ||||||
|           class="text-sm font-medium whitespace-nowrap text-slate-900 py-2.5 dark:text-slate-50" |           class="text-sm font-medium whitespace-nowrap text-n-slate-12 py-2.5" | ||||||
|         > |         > | ||||||
|           {{ t('HELP_CENTER.PORTAL_SETTINGS.FORM.PAGE_TITLE.LABEL') }} |           {{ t('HELP_CENTER.PORTAL_SETTINGS.FORM.PAGE_TITLE.LABEL') }} | ||||||
|         </label> |         </label> | ||||||
| @@ -261,7 +261,7 @@ const handleAvatarDelete = () => { | |||||||
|         class="grid items-start justify-between w-full gap-2 grid-cols-[200px,1fr]" |         class="grid items-start justify-between w-full gap-2 grid-cols-[200px,1fr]" | ||||||
|       > |       > | ||||||
|         <label |         <label | ||||||
|           class="text-sm font-medium whitespace-nowrap text-slate-900 py-2.5 dark:text-slate-50" |           class="text-sm font-medium whitespace-nowrap text-n-slate-12 py-2.5" | ||||||
|         > |         > | ||||||
|           {{ t('HELP_CENTER.PORTAL_SETTINGS.FORM.HOME_PAGE_LINK.LABEL') }} |           {{ t('HELP_CENTER.PORTAL_SETTINGS.FORM.HOME_PAGE_LINK.LABEL') }} | ||||||
|         </label> |         </label> | ||||||
| @@ -281,7 +281,7 @@ const handleAvatarDelete = () => { | |||||||
|         class="grid items-start justify-between w-full gap-2 grid-cols-[200px,1fr]" |         class="grid items-start justify-between w-full gap-2 grid-cols-[200px,1fr]" | ||||||
|       > |       > | ||||||
|         <label |         <label | ||||||
|           class="text-sm font-medium whitespace-nowrap py-2.5 text-slate-900 dark:text-slate-50" |           class="text-sm font-medium whitespace-nowrap py-2.5 text-n-slate-12" | ||||||
|         > |         > | ||||||
|           {{ t('HELP_CENTER.PORTAL_SETTINGS.FORM.SLUG.LABEL') }} |           {{ t('HELP_CENTER.PORTAL_SETTINGS.FORM.SLUG.LABEL') }} | ||||||
|         </label> |         </label> | ||||||
| @@ -299,7 +299,7 @@ const handleAvatarDelete = () => { | |||||||
|         class="grid items-start justify-between w-full gap-2 grid-cols-[200px,1fr]" |         class="grid items-start justify-between w-full gap-2 grid-cols-[200px,1fr]" | ||||||
|       > |       > | ||||||
|         <label |         <label | ||||||
|           class="text-sm font-medium whitespace-nowrap py-2.5 text-slate-900 dark:text-slate-50" |           class="text-sm font-medium whitespace-nowrap py-2.5 text-n-slate-12" | ||||||
|         > |         > | ||||||
|           {{ t('HELP_CENTER.PORTAL_SETTINGS.FORM.LIVE_CHAT_WIDGET.LABEL') }} |           {{ t('HELP_CENTER.PORTAL_SETTINGS.FORM.LIVE_CHAT_WIDGET.LABEL') }} | ||||||
|         </label> |         </label> | ||||||
| @@ -317,7 +317,7 @@ const handleAvatarDelete = () => { | |||||||
|       </div> |       </div> | ||||||
|       <div class="flex items-start justify-between w-full gap-2"> |       <div class="flex items-start justify-between w-full gap-2"> | ||||||
|         <label |         <label | ||||||
|           class="text-sm font-medium whitespace-nowrap py-2.5 text-slate-900 dark:text-slate-50" |           class="text-sm font-medium whitespace-nowrap py-2.5 text-n-slate-12" | ||||||
|         > |         > | ||||||
|           {{ t('HELP_CENTER.PORTAL_SETTINGS.FORM.BRAND_COLOR.LABEL') }} |           {{ t('HELP_CENTER.PORTAL_SETTINGS.FORM.BRAND_COLOR.LABEL') }} | ||||||
|         </label> |         </label> | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ import PortalSettings from './PortalSettings.vue'; | |||||||
| <template> | <template> | ||||||
|   <Story title="Pages/HelpCenter/PortalSettings" :layout="{ type: 'single' }"> |   <Story title="Pages/HelpCenter/PortalSettings" :layout="{ type: 'single' }"> | ||||||
|     <Variant title="Default"> |     <Variant title="Default"> | ||||||
|       <div class="w-[1000px] min-h-screen bg-white dark:bg-slate-900"> |       <div class="w-[1000px] min-h-screen bg-n-background"> | ||||||
|         <PortalSettings /> |         <PortalSettings /> | ||||||
|       </div> |       </div> | ||||||
|     </Variant> |     </Variant> | ||||||
|   | |||||||
| @@ -81,13 +81,13 @@ const handleDeletePortal = () => { | |||||||
|           :is-fetching="isFetching" |           :is-fetching="isFetching" | ||||||
|           @update-portal="handleUpdatePortal" |           @update-portal="handleUpdatePortal" | ||||||
|         /> |         /> | ||||||
|         <div class="w-full h-px bg-slate-50 dark:bg-slate-800/50" /> |         <div class="w-full h-px bg-n-weak" /> | ||||||
|         <PortalConfigurationSettings |         <PortalConfigurationSettings | ||||||
|           :active-portal="activePortal" |           :active-portal="activePortal" | ||||||
|           :is-fetching="isFetching" |           :is-fetching="isFetching" | ||||||
|           @update-portal-configuration="handleUpdatePortalConfiguration" |           @update-portal-configuration="handleUpdatePortalConfiguration" | ||||||
|         /> |         /> | ||||||
|         <div class="w-full h-px bg-slate-50 dark:bg-slate-800/50" /> |         <div class="w-full h-px bg-n-weak" /> | ||||||
|         <div class="flex items-end justify-between w-full gap-4"> |         <div class="flex items-end justify-between w-full gap-4"> | ||||||
|           <div class="flex flex-col gap-2"> |           <div class="flex flex-col gap-2"> | ||||||
|             <h6 class="text-base font-medium text-n-slate-12"> |             <h6 class="text-base font-medium text-n-slate-12"> | ||||||
|   | |||||||
| @@ -32,7 +32,7 @@ const portals = [ | |||||||
|     :layout="{ type: 'grid', width: '510px' }" |     :layout="{ type: 'grid', width: '510px' }" | ||||||
|   > |   > | ||||||
|     <Variant title="Portal Switcher"> |     <Variant title="Portal Switcher"> | ||||||
|       <div class="h-[500px] p-4 bg-slate-100 dark:bg-slate-900"> |       <div class="h-[500px] p-4 bg-n-slate-2 dark:bg-n-background"> | ||||||
|         <PortalSwitcher |         <PortalSwitcher | ||||||
|           :portals="portals" |           :portals="portals" | ||||||
|           header="Choose a Portal" |           header="Choose a Portal" | ||||||
|   | |||||||
| @@ -100,7 +100,7 @@ const redirectToPortalHomePage = () => { | |||||||
|       <div class="flex flex-col gap-1"> |       <div class="flex flex-col gap-1"> | ||||||
|         <div class="flex items-center gap-2"> |         <div class="flex items-center gap-2"> | ||||||
|           <h2 |           <h2 | ||||||
|             class="text-base font-medium cursor-pointer text-slate-900 dark:text-slate-50 w-fit hover:underline" |             class="text-base font-medium cursor-pointer text-n-slate-12 w-fit hover:underline" | ||||||
|             @click="redirectToPortalHomePage" |             @click="redirectToPortalHomePage" | ||||||
|           > |           > | ||||||
|             {{ t('HELP_CENTER.PORTAL_SWITCHER.PORTALS') }} |             {{ t('HELP_CENTER.PORTAL_SWITCHER.PORTALS') }} | ||||||
| @@ -115,7 +115,7 @@ const redirectToPortalHomePage = () => { | |||||||
|             @click="onClickPreviewPortal" |             @click="onClickPreviewPortal" | ||||||
|           /> |           /> | ||||||
|         </div> |         </div> | ||||||
|         <p class="text-sm text-slate-600 dark:text-slate-300"> |         <p class="text-sm text-n-slate-11"> | ||||||
|           {{ t('HELP_CENTER.PORTAL_SWITCHER.CREATE_PORTAL') }} |           {{ t('HELP_CENTER.PORTAL_SWITCHER.CREATE_PORTAL') }} | ||||||
|         </p> |         </p> | ||||||
|       </div> |       </div> | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ import Avatar from './Avatar.vue'; | |||||||
| <template> | <template> | ||||||
|   <Story title="Components/Avatar" :layout="{ type: 'grid', width: '400' }"> |   <Story title="Components/Avatar" :layout="{ type: 'grid', width: '400' }"> | ||||||
|     <Variant title="Default"> |     <Variant title="Default"> | ||||||
|       <div class="flex p-4 space-x-4 bg-white dark:bg-slate-900"> |       <div class="flex p-4 space-x-4 bg-n-background"> | ||||||
|         <Avatar |         <Avatar | ||||||
|           name="" |           name="" | ||||||
|           src="https://api.dicebear.com/9.x/thumbs/svg?seed=Amaya" |           src="https://api.dicebear.com/9.x/thumbs/svg?seed=Amaya" | ||||||
| @@ -16,7 +16,7 @@ import Avatar from './Avatar.vue'; | |||||||
|     </Variant> |     </Variant> | ||||||
|  |  | ||||||
|     <Variant title="Different Shapes"> |     <Variant title="Different Shapes"> | ||||||
|       <div class="gap-4 p-4 bg-white dark:bg-slate-900"> |       <div class="gap-4 p-4 bg-n-background"> | ||||||
|         <Avatar |         <Avatar | ||||||
|           src="https://api.dicebear.com/9.x/thumbs/svg?seed=Amaya" |           src="https://api.dicebear.com/9.x/thumbs/svg?seed=Amaya" | ||||||
|           name="" |           name="" | ||||||
| @@ -34,7 +34,7 @@ import Avatar from './Avatar.vue'; | |||||||
|     </Variant> |     </Variant> | ||||||
|  |  | ||||||
|     <Variant title="Different Sizes"> |     <Variant title="Different Sizes"> | ||||||
|       <div class="flex flex-wrap gap-4 p-4 bg-white dark:bg-slate-900"> |       <div class="flex flex-wrap gap-4 p-4 bg-n-background"> | ||||||
|         <Avatar |         <Avatar | ||||||
|           src="https://api.dicebear.com/9.x/avataaars/svg?seed=Felix" |           src="https://api.dicebear.com/9.x/avataaars/svg?seed=Felix" | ||||||
|           :size="48" |           :size="48" | ||||||
| @@ -57,7 +57,7 @@ import Avatar from './Avatar.vue'; | |||||||
|     </Variant> |     </Variant> | ||||||
|  |  | ||||||
|     <Variant title="With Status"> |     <Variant title="With Status"> | ||||||
|       <div class="flex flex-wrap gap-4 p-4 bg-white dark:bg-slate-900"> |       <div class="flex flex-wrap gap-4 p-4 bg-n-background"> | ||||||
|         <Avatar |         <Avatar | ||||||
|           src="https://api.dicebear.com/9.x/thumbs/svg?seed=Felix" |           src="https://api.dicebear.com/9.x/thumbs/svg?seed=Felix" | ||||||
|           status="online" |           status="online" | ||||||
| @@ -77,7 +77,7 @@ import Avatar from './Avatar.vue'; | |||||||
|     </Variant> |     </Variant> | ||||||
|  |  | ||||||
|     <Variant title="With Custom Icon"> |     <Variant title="With Custom Icon"> | ||||||
|       <div class="flex flex-wrap gap-4 p-4 bg-white dark:bg-slate-900"> |       <div class="flex flex-wrap gap-4 p-4 bg-n-background"> | ||||||
|         <Avatar name="Custom Icon" icon-name="i-lucide-user" :size="48" /> |         <Avatar name="Custom Icon" icon-name="i-lucide-user" :size="48" /> | ||||||
|         <Avatar |         <Avatar | ||||||
|           name="Custom Industry" |           name="Custom Industry" | ||||||
| @@ -88,7 +88,7 @@ import Avatar from './Avatar.vue'; | |||||||
|     </Variant> |     </Variant> | ||||||
|  |  | ||||||
|     <Variant title="Upload States"> |     <Variant title="Upload States"> | ||||||
|       <div class="flex flex-wrap gap-4 p-4 bg-white dark:bg-slate-900"> |       <div class="flex flex-wrap gap-4 p-4 bg-n-background"> | ||||||
|         <!-- Empty state with upload --> |         <!-- Empty state with upload --> | ||||||
|         <Avatar name="Upload New" allow-upload :size="48" /> |         <Avatar name="Upload New" allow-upload :size="48" /> | ||||||
|  |  | ||||||
| @@ -103,7 +103,7 @@ import Avatar from './Avatar.vue'; | |||||||
|     </Variant> |     </Variant> | ||||||
|  |  | ||||||
|     <Variant title="Name Initials"> |     <Variant title="Name Initials"> | ||||||
|       <div class="flex flex-wrap gap-4 p-4 bg-white dark:bg-slate-900"> |       <div class="flex flex-wrap gap-4 p-4 bg-n-background"> | ||||||
|         <Avatar name="Catherine" :size="48" /> |         <Avatar name="Catherine" :size="48" /> | ||||||
|         <Avatar name="John Doe" :size="48" /> |         <Avatar name="John Doe" :size="48" /> | ||||||
|         <Avatar name="Rose Doe John" :size="48" /> |         <Avatar name="Rose Doe John" :size="48" /> | ||||||
|   | |||||||
| @@ -29,32 +29,32 @@ const longBreadcrumb = ref([ | |||||||
|     :layout="{ type: 'grid', width: '800px' }" |     :layout="{ type: 'grid', width: '800px' }" | ||||||
|   > |   > | ||||||
|     <Variant title="Single Item"> |     <Variant title="Single Item"> | ||||||
|       <div class="w-full p-4 bg-white dark:bg-slate-900"> |       <div class="w-full p-4 bg-n-background"> | ||||||
|         <Breadcrumb :items="singleItem" /> |         <Breadcrumb :items="singleItem" /> | ||||||
|       </div> |       </div> | ||||||
|     </Variant> |     </Variant> | ||||||
|  |  | ||||||
|     <Variant title="Two Items"> |     <Variant title="Two Items"> | ||||||
|       <div class="w-full p-4 bg-white dark:bg-slate-900"> |       <div class="w-full p-4 bg-n-background"> | ||||||
|         <Breadcrumb :items="twoItems" /> |         <Breadcrumb :items="twoItems" /> | ||||||
|       </div> |       </div> | ||||||
|     </Variant> |     </Variant> | ||||||
|  |  | ||||||
|     <Variant title="Three Items with Count"> |     <Variant title="Three Items with Count"> | ||||||
|       <div class="w-full p-4 bg-white dark:bg-slate-900"> |       <div class="w-full p-4 bg-n-background"> | ||||||
|         <Breadcrumb :items="threeItems" count-label="articles" /> |         <Breadcrumb :items="threeItems" count-label="articles" /> | ||||||
|       </div> |       </div> | ||||||
|     </Variant> |     </Variant> | ||||||
|  |  | ||||||
|     <Variant title="Long Breadcrumb"> |     <Variant title="Long Breadcrumb"> | ||||||
|       <div class="w-full p-4 bg-white dark:bg-slate-900"> |       <div class="w-full p-4 bg-n-background"> | ||||||
|         <Breadcrumb :items="longBreadcrumb" count-label="articles" /> |         <Breadcrumb :items="longBreadcrumb" count-label="articles" /> | ||||||
|       </div> |       </div> | ||||||
|     </Variant> |     </Variant> | ||||||
|  |  | ||||||
|     <Variant title="RTL Support"> |     <Variant title="RTL Support"> | ||||||
|       <div dir="rtl"> |       <div dir="rtl"> | ||||||
|         <div class="w-full p-4 bg-white dark:bg-slate-900"> |         <div class="w-full p-4 bg-n-background"> | ||||||
|           <Breadcrumb :items="threeItems" count-label="articles" /> |           <Breadcrumb :items="threeItems" count-label="articles" /> | ||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
|   | |||||||
| @@ -36,9 +36,7 @@ const onClick = event => { | |||||||
|             icon="i-lucide-chevron-right" |             icon="i-lucide-chevron-right" | ||||||
|             class="flex-shrink-0 mx-2 size-4 text-n-slate-11 dark:text-n-slate-11" |             class="flex-shrink-0 mx-2 size-4 text-n-slate-11 dark:text-n-slate-11" | ||||||
|           /> |           /> | ||||||
|           <span |           <span class="text-sm truncate text-n-slate-12 max-w-56"> | ||||||
|             class="text-sm truncate text-slate-900 dark:text-slate-50 max-w-56" |  | ||||||
|           > |  | ||||||
|             {{ item.emoji ? item.emoji : '' }} {{ item.label }} |             {{ item.emoji ? item.emoji : '' }} {{ item.label }} | ||||||
|           </span> |           </span> | ||||||
|         </template> |         </template> | ||||||
|   | |||||||
| @@ -11,7 +11,7 @@ const SIZES = ['default', 'sm', 'lg']; | |||||||
|   <Story title="Components/Button" :layout="{ type: 'grid', width: '800px' }"> |   <Story title="Components/Button" :layout="{ type: 'grid', width: '800px' }"> | ||||||
|     <!-- Basic Variants --> |     <!-- Basic Variants --> | ||||||
|     <Variant title="Basic Variants"> |     <Variant title="Basic Variants"> | ||||||
|       <div class="flex flex-wrap gap-2 p-4 bg-white dark:bg-slate-900"> |       <div class="flex flex-wrap gap-2 p-4 bg-n-background"> | ||||||
|         <Button |         <Button | ||||||
|           v-for="variant in VARIANTS" |           v-for="variant in VARIANTS" | ||||||
|           :key="variant" |           :key="variant" | ||||||
| @@ -23,7 +23,7 @@ const SIZES = ['default', 'sm', 'lg']; | |||||||
|  |  | ||||||
|     <!-- Colors --> |     <!-- Colors --> | ||||||
|     <Variant title="Color Variants"> |     <Variant title="Color Variants"> | ||||||
|       <div class="flex flex-wrap gap-2 p-4 bg-white dark:bg-slate-900"> |       <div class="flex flex-wrap gap-2 p-4 bg-n-background"> | ||||||
|         <Button |         <Button | ||||||
|           v-for="color in COLORS" |           v-for="color in COLORS" | ||||||
|           :key="color" |           :key="color" | ||||||
| @@ -35,16 +35,14 @@ const SIZES = ['default', 'sm', 'lg']; | |||||||
|  |  | ||||||
|     <!-- Sizes --> |     <!-- Sizes --> | ||||||
|     <Variant title="Size Variants"> |     <Variant title="Size Variants"> | ||||||
|       <div |       <div class="flex flex-wrap items-center gap-2 p-4 bg-n-background"> | ||||||
|         class="flex flex-wrap items-center gap-2 p-4 bg-white dark:bg-slate-900" |  | ||||||
|       > |  | ||||||
|         <Button v-for="size in SIZES" :key="size" :label="size" :size="size" /> |         <Button v-for="size in SIZES" :key="size" :label="size" :size="size" /> | ||||||
|       </div> |       </div> | ||||||
|     </Variant> |     </Variant> | ||||||
|  |  | ||||||
|     <!-- Icons --> |     <!-- Icons --> | ||||||
|     <Variant title="Icons"> |     <Variant title="Icons"> | ||||||
|       <div class="flex flex-wrap gap-2 p-4 bg-white dark:bg-slate-900"> |       <div class="flex flex-wrap gap-2 p-4 bg-n-background"> | ||||||
|         <Button label="Leading Icon" icon="i-lucide-plus" /> |         <Button label="Leading Icon" icon="i-lucide-plus" /> | ||||||
|         <Button label="Trailing Icon" icon="i-lucide-plus" trailing-icon /> |         <Button label="Trailing Icon" icon="i-lucide-plus" trailing-icon /> | ||||||
|         <Button icon="i-lucide-plus" /> |         <Button icon="i-lucide-plus" /> | ||||||
| @@ -53,7 +51,7 @@ const SIZES = ['default', 'sm', 'lg']; | |||||||
|  |  | ||||||
|     <!-- Loading State --> |     <!-- Loading State --> | ||||||
|     <Variant title="Loading State"> |     <Variant title="Loading State"> | ||||||
|       <div class="flex flex-wrap gap-2 p-4 bg-white dark:bg-slate-900"> |       <div class="flex flex-wrap gap-2 p-4 bg-n-background"> | ||||||
|         <Button label="Loading" is-loading /> |         <Button label="Loading" is-loading /> | ||||||
|         <Button label="Loading" variant="outline" is-loading /> |         <Button label="Loading" variant="outline" is-loading /> | ||||||
|         <Button is-loading icon="i-lucide-plus" /> |         <Button is-loading icon="i-lucide-plus" /> | ||||||
| @@ -62,7 +60,7 @@ const SIZES = ['default', 'sm', 'lg']; | |||||||
|  |  | ||||||
|     <!-- Disabled State --> |     <!-- Disabled State --> | ||||||
|     <Variant title="Disabled State"> |     <Variant title="Disabled State"> | ||||||
|       <div class="flex flex-wrap gap-2 p-4 bg-white dark:bg-slate-900"> |       <div class="flex flex-wrap gap-2 p-4 bg-n-background"> | ||||||
|         <Button label="Disabled" disabled /> |         <Button label="Disabled" disabled /> | ||||||
|         <Button label="Disabled Outline" variant="outline" disabled /> |         <Button label="Disabled Outline" variant="outline" disabled /> | ||||||
|         <Button label="Disabled Icon" icon="delete" disabled /> |         <Button label="Disabled Icon" icon="delete" disabled /> | ||||||
| @@ -78,7 +76,7 @@ const SIZES = ['default', 'sm', 'lg']; | |||||||
|  |  | ||||||
|     <!-- Color Combinations --> |     <!-- Color Combinations --> | ||||||
|     <Variant title="Color & Variant Combinations"> |     <Variant title="Color & Variant Combinations"> | ||||||
|       <div class="flex flex-wrap gap-2 p-4 bg-white dark:bg-slate-900"> |       <div class="flex flex-wrap gap-2 p-4 bg-n-background"> | ||||||
|         <template v-for="color in COLORS" :key="color"> |         <template v-for="color in COLORS" :key="color"> | ||||||
|           <Button |           <Button | ||||||
|             v-for="variant in VARIANTS" |             v-for="variant in VARIANTS" | ||||||
| @@ -93,7 +91,7 @@ const SIZES = ['default', 'sm', 'lg']; | |||||||
|  |  | ||||||
|     <!-- Icon Positions --> |     <!-- Icon Positions --> | ||||||
|     <Variant title="Icon Positions & Sizes"> |     <Variant title="Icon Positions & Sizes"> | ||||||
|       <div class="flex flex-wrap gap-2 p-4 bg-white dark:bg-slate-900"> |       <div class="flex flex-wrap gap-2 p-4 bg-n-background"> | ||||||
|         <template v-for="size in SIZES" :key="size"> |         <template v-for="size in SIZES" :key="size"> | ||||||
|           <Button |           <Button | ||||||
|             :label="`${size} Leading`" |             :label="`${size} Leading`" | ||||||
| @@ -113,7 +111,7 @@ const SIZES = ['default', 'sm', 'lg']; | |||||||
|  |  | ||||||
|     <!-- Ghost & Link Variants --> |     <!-- Ghost & Link Variants --> | ||||||
|     <Variant title="Ghost & Link Variants"> |     <Variant title="Ghost & Link Variants"> | ||||||
|       <div class="flex flex-wrap gap-2 p-4 bg-white dark:bg-slate-900"> |       <div class="flex flex-wrap gap-2 p-4 bg-n-background"> | ||||||
|         <Button label="Ghost Button" variant="ghost" color="slate" /> |         <Button label="Ghost Button" variant="ghost" color="slate" /> | ||||||
|         <Button |         <Button | ||||||
|           label="Ghost with Icon" |           label="Ghost with Icon" | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ const incrementCount = () => { | |||||||
|     :layout="{ type: 'grid', width: '400px' }" |     :layout="{ type: 'grid', width: '400px' }" | ||||||
|   > |   > | ||||||
|     <Variant title="Basic"> |     <Variant title="Basic"> | ||||||
|       <div class="grid gap-2 p-4 bg-white dark:bg-slate-900"> |       <div class="grid gap-2 p-4 bg-n-background"> | ||||||
|         <p>{{ count }}</p> |         <p>{{ count }}</p> | ||||||
|         <ConfirmButton |         <ConfirmButton | ||||||
|           label="Delete" |           label="Delete" | ||||||
| @@ -26,7 +26,7 @@ const incrementCount = () => { | |||||||
|     </Variant> |     </Variant> | ||||||
|  |  | ||||||
|     <Variant title="Color Change"> |     <Variant title="Color Change"> | ||||||
|       <div class="grid gap-2 p-4 bg-white dark:bg-slate-900"> |       <div class="grid gap-2 p-4 bg-n-background"> | ||||||
|         <p>{{ count }}</p> |         <p>{{ count }}</p> | ||||||
|         <ConfirmButton |         <ConfirmButton | ||||||
|           label="Archive" |           label="Archive" | ||||||
|   | |||||||
| @@ -12,7 +12,7 @@ import { assistantsList } from 'dashboard/components-next/captain/pageComponents | |||||||
|       <div |       <div | ||||||
|         v-for="(assistant, index) in assistantsList" |         v-for="(assistant, index) in assistantsList" | ||||||
|         :key="index" |         :key="index" | ||||||
|         class="px-20 py-4 bg-white dark:bg-slate-900" |         class="px-20 py-4 bg-n-background" | ||||||
|       > |       > | ||||||
|         <AssistantCard |         <AssistantCard | ||||||
|           :id="assistant.id" |           :id="assistant.id" | ||||||
|   | |||||||
| @@ -12,7 +12,7 @@ import { documentsList } from 'dashboard/components-next/captain/pageComponents/ | |||||||
|       <div |       <div | ||||||
|         v-for="(doc, index) in documentsList" |         v-for="(doc, index) in documentsList" | ||||||
|         :key="index" |         :key="index" | ||||||
|         class="px-20 py-4 bg-white dark:bg-slate-900" |         class="px-20 py-4 bg-n-background" | ||||||
|       > |       > | ||||||
|         <DocumentCard |         <DocumentCard | ||||||
|           :id="doc.id" |           :id="doc.id" | ||||||
|   | |||||||
| @@ -12,7 +12,7 @@ import { inboxes } from 'dashboard/components-next/captain/pageComponents/emptyS | |||||||
|       <div |       <div | ||||||
|         v-for="inbox in inboxes" |         v-for="inbox in inboxes" | ||||||
|         :key="inbox.id" |         :key="inbox.id" | ||||||
|         class="px-20 py-4 bg-white dark:bg-slate-900" |         class="px-20 py-4 bg-n-background" | ||||||
|       > |       > | ||||||
|         <InboxCard :id="inbox.id" :inbox="inbox" /> |         <InboxCard :id="inbox.id" :inbox="inbox" /> | ||||||
|       </div> |       </div> | ||||||
|   | |||||||
| @@ -12,7 +12,7 @@ import { responsesList } from 'dashboard/components-next/captain/pageComponents/ | |||||||
|       <div |       <div | ||||||
|         v-for="(response, index) in responsesList" |         v-for="(response, index) in responsesList" | ||||||
|         :key="index" |         :key="index" | ||||||
|         class="px-20 py-4 bg-white dark:bg-slate-900" |         class="px-20 py-4 bg-n-background" | ||||||
|       > |       > | ||||||
|         <ResponseCard |         <ResponseCard | ||||||
|           :id="response.id" |           :id="response.id" | ||||||
|   | |||||||
| @@ -159,7 +159,7 @@ watch( | |||||||
|         variant="faded" |         variant="faded" | ||||||
|         color="slate" |         color="slate" | ||||||
|         :label="t('CAPTAIN.FORM.CANCEL')" |         :label="t('CAPTAIN.FORM.CANCEL')" | ||||||
|         class="w-full bg-n-alpha-2 n-blue-text hover:bg-n-alpha-3" |         class="w-full bg-n-alpha-2 text-n-blue-text hover:bg-n-alpha-3" | ||||||
|         @click="handleCancel" |         @click="handleCancel" | ||||||
|       /> |       /> | ||||||
|       <Button |       <Button | ||||||
|   | |||||||
| @@ -99,7 +99,7 @@ const handleSubmit = async () => { | |||||||
|         variant="faded" |         variant="faded" | ||||||
|         color="slate" |         color="slate" | ||||||
|         :label="t('CAPTAIN.FORM.CANCEL')" |         :label="t('CAPTAIN.FORM.CANCEL')" | ||||||
|         class="w-full bg-n-alpha-2 n-blue-text hover:bg-n-alpha-3" |         class="w-full bg-n-alpha-2 text-n-blue-text hover:bg-n-alpha-3" | ||||||
|         @click="handleCancel" |         @click="handleCancel" | ||||||
|       /> |       /> | ||||||
|       <Button |       <Button | ||||||
|   | |||||||
| @@ -100,7 +100,7 @@ const handleSubmit = async () => { | |||||||
|         variant="faded" |         variant="faded" | ||||||
|         color="slate" |         color="slate" | ||||||
|         :label="t('CAPTAIN.FORM.CANCEL')" |         :label="t('CAPTAIN.FORM.CANCEL')" | ||||||
|         class="w-full bg-n-alpha-2 n-blue-text hover:bg-n-alpha-3" |         class="w-full bg-n-alpha-2 text-n-blue-text hover:bg-n-alpha-3" | ||||||
|         @click="handleCancel" |         @click="handleCancel" | ||||||
|       /> |       /> | ||||||
|       <Button |       <Button | ||||||
|   | |||||||
| @@ -146,7 +146,7 @@ watch( | |||||||
|         variant="faded" |         variant="faded" | ||||||
|         color="slate" |         color="slate" | ||||||
|         :label="t('CAPTAIN.FORM.CANCEL')" |         :label="t('CAPTAIN.FORM.CANCEL')" | ||||||
|         class="w-full bg-n-alpha-2 n-blue-text hover:bg-n-alpha-3" |         class="w-full bg-n-alpha-2 text-n-blue-text hover:bg-n-alpha-3" | ||||||
|         @click="handleCancel" |         @click="handleCancel" | ||||||
|       /> |       /> | ||||||
|       <Button |       <Button | ||||||
|   | |||||||
| @@ -90,7 +90,7 @@ const pickerRef = ref(null); | |||||||
|  |  | ||||||
|     input, |     input, | ||||||
|     .vc-input__input { |     .vc-input__input { | ||||||
|       @apply bg-n-background text-slate-900 dark:text-slate-50 rounded-md shadow-none; |       @apply bg-n-background text-n-slate-12 rounded-md shadow-none; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     .vc-input__label { |     .vc-input__label { | ||||||
|   | |||||||
| @@ -15,14 +15,14 @@ const selectedValue = ref(''); | |||||||
| <template> | <template> | ||||||
|   <Story title="Components/ComboBox" :layout="{ type: 'grid', width: '300px' }"> |   <Story title="Components/ComboBox" :layout="{ type: 'grid', width: '300px' }"> | ||||||
|     <Variant title="Default"> |     <Variant title="Default"> | ||||||
|       <div class="w-full p-4 bg-white h-80 dark:bg-slate-900"> |       <div class="w-full p-4 bg-n-background h-80"> | ||||||
|         <ComboBox v-model="selectedValue" :options="options" /> |         <ComboBox v-model="selectedValue" :options="options" /> | ||||||
|         <p class="mt-2">Selected value: {{ selectedValue }}</p> |         <p class="mt-2">Selected value: {{ selectedValue }}</p> | ||||||
|       </div> |       </div> | ||||||
|     </Variant> |     </Variant> | ||||||
|  |  | ||||||
|     <Variant title="Disabled"> |     <Variant title="Disabled"> | ||||||
|       <div class="w-full p-4 bg-white h-80 dark:bg-slate-900"> |       <div class="w-full p-4 bg-n-background h-80"> | ||||||
|         <ComboBox :options="options" disabled /> |         <ComboBox :options="options" disabled /> | ||||||
|       </div> |       </div> | ||||||
|     </Variant> |     </Variant> | ||||||
|   | |||||||
| @@ -69,7 +69,7 @@ defineExpose({ | |||||||
|         :value="searchValue" |         :value="searchValue" | ||||||
|         type="search" |         type="search" | ||||||
|         :placeholder="searchPlaceholder || t('COMBOBOX.SEARCH_PLACEHOLDER')" |         :placeholder="searchPlaceholder || t('COMBOBOX.SEARCH_PLACEHOLDER')" | ||||||
|         class="reset-base w-full py-2 pl-10 pr-2 text-sm focus:outline-none border-none rounded-t-md bg-n-solid-1 text-slate-900 dark:text-slate-50" |         class="reset-base w-full py-2 pl-10 pr-2 text-sm focus:outline-none border-none rounded-t-md bg-n-solid-1 text-n-slate-12" | ||||||
|         @input="onInputSearch" |         @input="onInputSearch" | ||||||
|       /> |       /> | ||||||
|     </div> |     </div> | ||||||
| @@ -102,10 +102,7 @@ defineExpose({ | |||||||
|           class="flex-shrink-0 i-lucide-check size-4 text-n-slate-11" |           class="flex-shrink-0 i-lucide-check size-4 text-n-slate-11" | ||||||
|         /> |         /> | ||||||
|       </li> |       </li> | ||||||
|       <li |       <li v-if="options.length === 0" class="px-3 py-2 text-sm text-n-slate-11"> | ||||||
|         v-if="options.length === 0" |  | ||||||
|         class="px-3 py-2 text-sm text-slate-600 dark:text-slate-300" |  | ||||||
|       > |  | ||||||
|         {{ emptyState || t('COMBOBOX.EMPTY_STATE') }} |         {{ emptyState || t('COMBOBOX.EMPTY_STATE') }} | ||||||
|       </li> |       </li> | ||||||
|     </ul> |     </ul> | ||||||
|   | |||||||
| @@ -20,14 +20,14 @@ const preselectedValues = ref([1, 2]); | |||||||
|     :layout="{ type: 'grid', width: '300px' }" |     :layout="{ type: 'grid', width: '300px' }" | ||||||
|   > |   > | ||||||
|     <Variant title="Default"> |     <Variant title="Default"> | ||||||
|       <div class="w-full p-4 bg-white h-80 dark:bg-slate-900"> |       <div class="w-full p-4 bg-n-background h-80"> | ||||||
|         <TagMultiSelectComboBox v-model="selectedValues" :options="options" /> |         <TagMultiSelectComboBox v-model="selectedValues" :options="options" /> | ||||||
|         <p class="mt-2">Selected values: {{ selectedValues }}</p> |         <p class="mt-2">Selected values: {{ selectedValues }}</p> | ||||||
|       </div> |       </div> | ||||||
|     </Variant> |     </Variant> | ||||||
|  |  | ||||||
|     <Variant title="With Preselected Values"> |     <Variant title="With Preselected Values"> | ||||||
|       <div class="w-full p-4 bg-white h-80 dark:bg-slate-900"> |       <div class="w-full p-4 bg-n-background h-80"> | ||||||
|         <TagMultiSelectComboBox |         <TagMultiSelectComboBox | ||||||
|           v-model="preselectedValues" |           v-model="preselectedValues" | ||||||
|           :options="options" |           :options="options" | ||||||
| @@ -37,13 +37,13 @@ const preselectedValues = ref([1, 2]); | |||||||
|     </Variant> |     </Variant> | ||||||
|  |  | ||||||
|     <Variant title="Disabled"> |     <Variant title="Disabled"> | ||||||
|       <div class="w-full p-4 bg-white h-80 dark:bg-slate-900"> |       <div class="w-full p-4 bg-n-background h-80"> | ||||||
|         <TagMultiSelectComboBox :options="options" disabled /> |         <TagMultiSelectComboBox :options="options" disabled /> | ||||||
|       </div> |       </div> | ||||||
|     </Variant> |     </Variant> | ||||||
|  |  | ||||||
|     <Variant title="With Error"> |     <Variant title="With Error"> | ||||||
|       <div class="w-full p-4 bg-white h-80 dark:bg-slate-900"> |       <div class="w-full p-4 bg-n-background h-80"> | ||||||
|         <TagMultiSelectComboBox |         <TagMultiSelectComboBox | ||||||
|           :options="options" |           :options="options" | ||||||
|           has-error |           has-error | ||||||
|   | |||||||
| @@ -49,7 +49,10 @@ const toggleSidebar = () => { | |||||||
| </script> | </script> | ||||||
|  |  | ||||||
| <template> | <template> | ||||||
|   <div v-if="showCopilotLauncher" class="fixed bottom-4 right-4 z-50"> |   <div | ||||||
|  |     v-if="showCopilotLauncher" | ||||||
|  |     class="fixed bottom-4 ltr:right-4 rtl:left-4 z-50" | ||||||
|  |   > | ||||||
|     <div class="rounded-full bg-n-alpha-2 p-1"> |     <div class="rounded-full bg-n-alpha-2 p-1"> | ||||||
|       <Button |       <Button | ||||||
|         icon="i-woot-captain" |         icon="i-woot-captain" | ||||||
|   | |||||||
| @@ -20,7 +20,7 @@ const handleAction = () => { | |||||||
| <template> | <template> | ||||||
|   <Story title="Components/DropdownMenu" :layout="{ type: 'grid', width: 300 }"> |   <Story title="Components/DropdownMenu" :layout="{ type: 'grid', width: 300 }"> | ||||||
|     <Variant title="Default"> |     <Variant title="Default"> | ||||||
|       <div class="p-4 bg-white h-72 dark:bg-slate-900"> |       <div class="p-4 bg-n-background h-72"> | ||||||
|         <div class="relative"> |         <div class="relative"> | ||||||
|           <Button label="Open Menu" size="sm" @click="toggleDropdown" /> |           <Button label="Open Menu" size="sm" @click="toggleDropdown" /> | ||||||
|           <DropdownMenu |           <DropdownMenu | ||||||
| @@ -34,13 +34,13 @@ const handleAction = () => { | |||||||
|     </Variant> |     </Variant> | ||||||
|  |  | ||||||
|     <Variant title="Always Open"> |     <Variant title="Always Open"> | ||||||
|       <div class="p-4 bg-white h-72 dark:bg-slate-900"> |       <div class="p-4 bg-n-background h-72"> | ||||||
|         <DropdownMenu :menu-items="menuItems" @action="handleAction" /> |         <DropdownMenu :menu-items="menuItems" @action="handleAction" /> | ||||||
|       </div> |       </div> | ||||||
|     </Variant> |     </Variant> | ||||||
|  |  | ||||||
|     <Variant title="Custom Items"> |     <Variant title="Custom Items"> | ||||||
|       <div class="p-4 bg-white h-72 dark:bg-slate-900"> |       <div class="p-4 bg-n-background h-72"> | ||||||
|         <DropdownMenu |         <DropdownMenu | ||||||
|           :menu-items="[ |           :menu-items="[ | ||||||
|             { label: 'Custom 1', action: 'custom1', icon: 'file-upload' }, |             { label: 'Custom 1', action: 'custom1', icon: 'file-upload' }, | ||||||
| @@ -53,7 +53,7 @@ const handleAction = () => { | |||||||
|     </Variant> |     </Variant> | ||||||
|  |  | ||||||
|     <Variant title="With search"> |     <Variant title="With search"> | ||||||
|       <div class="p-4 bg-white h-72 dark:bg-slate-900"> |       <div class="p-4 bg-n-background h-72"> | ||||||
|         <DropdownMenu |         <DropdownMenu | ||||||
|           :menu-items="[ |           :menu-items="[ | ||||||
|             { label: 'Custom 1', action: 'custom1', icon: 'file-upload' }, |             { label: 'Custom 1', action: 'custom1', icon: 'file-upload' }, | ||||||
|   | |||||||
| @@ -51,7 +51,7 @@ const menuItems = ref([ | |||||||
|     :layout="{ type: 'grid', width: 400, height: 800 }" |     :layout="{ type: 'grid', width: 400, height: 800 }" | ||||||
|   > |   > | ||||||
|     <Variant title="Profile Menu"> |     <Variant title="Profile Menu"> | ||||||
|       <div class="p-4 bg-white h-[500px] dark:bg-slate-900"> |       <div class="p-4 bg-n-background h-[500px]"> | ||||||
|         <DropdownContainer> |         <DropdownContainer> | ||||||
|           <template #trigger="{ toggle }"> |           <template #trigger="{ toggle }"> | ||||||
|             <Button label="Open Menu" size="sm" @click="toggle" /> |             <Button label="Open Menu" size="sm" @click="toggle" /> | ||||||
|   | |||||||
| @@ -8,13 +8,13 @@ import InlineInput from './InlineInput.vue'; | |||||||
|     :layout="{ type: 'grid', width: '400' }" |     :layout="{ type: 'grid', width: '400' }" | ||||||
|   > |   > | ||||||
|     <Variant title="Default"> |     <Variant title="Default"> | ||||||
|       <div class="p-4 bg-white dark:bg-slate-800"> |       <div class="p-4 bg-n-background"> | ||||||
|         <InlineInput id="inline-input-1" placeholder="Default InlineInput" /> |         <InlineInput id="inline-input-1" placeholder="Default InlineInput" /> | ||||||
|       </div> |       </div> | ||||||
|     </Variant> |     </Variant> | ||||||
|  |  | ||||||
|     <Variant title="With Label"> |     <Variant title="With Label"> | ||||||
|       <div class="p-4 bg-white dark:bg-slate-800"> |       <div class="p-4 bg-n-background"> | ||||||
|         <InlineInput |         <InlineInput | ||||||
|           id="inline-input-2" |           id="inline-input-2" | ||||||
|           label="Username" |           label="Username" | ||||||
| @@ -24,7 +24,7 @@ import InlineInput from './InlineInput.vue'; | |||||||
|     </Variant> |     </Variant> | ||||||
|  |  | ||||||
|     <Variant title="Disabled"> |     <Variant title="Disabled"> | ||||||
|       <div class="p-4 bg-white dark:bg-slate-800"> |       <div class="p-4 bg-n-background"> | ||||||
|         <InlineInput |         <InlineInput | ||||||
|           id="inline-input-3" |           id="inline-input-3" | ||||||
|           label="Disabled InlineInput" |           label="Disabled InlineInput" | ||||||
| @@ -35,24 +35,24 @@ import InlineInput from './InlineInput.vue'; | |||||||
|     </Variant> |     </Variant> | ||||||
|  |  | ||||||
|     <Variant title="With Custom Classes"> |     <Variant title="With Custom Classes"> | ||||||
|       <div class="flex flex-col gap-4 p-4 bg-white dark:bg-slate-800"> |       <div class="flex flex-col gap-4 p-4 bg-n-background"> | ||||||
|         <InlineInput |         <InlineInput | ||||||
|           id="inline-input-4" |           id="inline-input-4" | ||||||
|           label="Custom Input Class" |           label="Custom Input Class" | ||||||
|           placeholder="Custom input style" |           placeholder="Custom input style" | ||||||
|           custom-input-class="placeholder:text-green-200 dark:placeholder:text-green-800" |           custom-input-class="placeholder:text-n-teal-6 dark:placeholder:text-n-teal-6" | ||||||
|         /> |         /> | ||||||
|         <InlineInput |         <InlineInput | ||||||
|           id="inline-input-5" |           id="inline-input-5" | ||||||
|           label="Custom Label Class" |           label="Custom Label Class" | ||||||
|           placeholder="Custom label style" |           placeholder="Custom label style" | ||||||
|           custom-label-class="text-green-600 dark:text-green-400" |           custom-label-class="text-n-teal-6 dark:text-n-teal-6" | ||||||
|         /> |         /> | ||||||
|       </div> |       </div> | ||||||
|     </Variant> |     </Variant> | ||||||
|  |  | ||||||
|     <Variant title="Different Types"> |     <Variant title="Different Types"> | ||||||
|       <div class="flex flex-col gap-4 p-4 bg-white dark:bg-slate-800"> |       <div class="flex flex-col gap-4 p-4 bg-n-background"> | ||||||
|         <InlineInput |         <InlineInput | ||||||
|           id="inline-input-6" |           id="inline-input-6" | ||||||
|           label="Text" |           label="Text" | ||||||
|   | |||||||
| @@ -5,25 +5,25 @@ import Input from './Input.vue'; | |||||||
| <template> | <template> | ||||||
|   <Story title="Components/Input" :layout="{ type: 'grid', width: '400' }"> |   <Story title="Components/Input" :layout="{ type: 'grid', width: '400' }"> | ||||||
|     <Variant title="Default"> |     <Variant title="Default"> | ||||||
|       <div class="p-4 bg-white dark:bg-slate-800"> |       <div class="p-4 bg-n-background"> | ||||||
|         <Input placeholder="Default Input" /> |         <Input placeholder="Default Input" /> | ||||||
|       </div> |       </div> | ||||||
|     </Variant> |     </Variant> | ||||||
|  |  | ||||||
|     <Variant title="With Label"> |     <Variant title="With Label"> | ||||||
|       <div class="p-4 bg-white dark:bg-slate-800"> |       <div class="p-4 bg-n-background"> | ||||||
|         <Input label="Username" placeholder="Enter your username" /> |         <Input label="Username" placeholder="Enter your username" /> | ||||||
|       </div> |       </div> | ||||||
|     </Variant> |     </Variant> | ||||||
|  |  | ||||||
|     <Variant title="Disabled"> |     <Variant title="Disabled"> | ||||||
|       <div class="p-4 bg-white dark:bg-slate-800"> |       <div class="p-4 bg-n-background"> | ||||||
|         <Input label="Disabled Input" placeholder="Can't type here" disabled /> |         <Input label="Disabled Input" placeholder="Can't type here" disabled /> | ||||||
|       </div> |       </div> | ||||||
|     </Variant> |     </Variant> | ||||||
|  |  | ||||||
|     <Variant title="With Message"> |     <Variant title="With Message"> | ||||||
|       <div class="flex flex-col gap-4 p-4 bg-white dark:bg-slate-800"> |       <div class="flex flex-col gap-4 p-4 bg-n-background"> | ||||||
|         <Input |         <Input | ||||||
|           label="Email" |           label="Email" | ||||||
|           placeholder="Enter your email" |           placeholder="Enter your email" | ||||||
| @@ -46,7 +46,7 @@ import Input from './Input.vue'; | |||||||
|     </Variant> |     </Variant> | ||||||
|  |  | ||||||
|     <Variant title="Different Types"> |     <Variant title="Different Types"> | ||||||
|       <div class="flex flex-col gap-4 p-4 bg-white dark:bg-slate-800"> |       <div class="flex flex-col gap-4 p-4 bg-n-background"> | ||||||
|         <Input label="Text" type="text" placeholder="Text input" /> |         <Input label="Text" type="text" placeholder="Text input" /> | ||||||
|         <Input label="Number" type="number" placeholder="Number input" /> |         <Input label="Number" type="number" placeholder="Number input" /> | ||||||
|         <Input label="Password" type="password" placeholder="Password input" /> |         <Input label="Password" type="password" placeholder="Password input" /> | ||||||
| @@ -56,11 +56,11 @@ import Input from './Input.vue'; | |||||||
|     </Variant> |     </Variant> | ||||||
|  |  | ||||||
|     <Variant title="Custom Input Class"> |     <Variant title="Custom Input Class"> | ||||||
|       <div class="p-4 bg-white dark:bg-slate-800"> |       <div class="p-4 bg-n-background"> | ||||||
|         <Input |         <Input | ||||||
|           label="Custom Style" |           label="Custom Style" | ||||||
|           placeholder="Custom input class" |           placeholder="Custom input class" | ||||||
|           custom-input-class="border-yellow-500 dark:border-yellow-700" |           custom-input-class="border-n-amber-5 dark:border-n-amber-5" | ||||||
|         /> |         /> | ||||||
|       </div> |       </div> | ||||||
|     </Variant> |     </Variant> | ||||||
|   | |||||||
| @@ -38,7 +38,7 @@ const messageClass = computed(() => { | |||||||
|     case 'error': |     case 'error': | ||||||
|       return 'text-n-ruby-9 dark:text-n-ruby-9'; |       return 'text-n-ruby-9 dark:text-n-ruby-9'; | ||||||
|     case 'success': |     case 'success': | ||||||
|       return 'text-green-500 dark:text-green-400'; |       return 'text-n-teal-10 dark:text-n-teal-10'; | ||||||
|     default: |     default: | ||||||
|       return 'text-n-slate-11 dark:text-n-slate-11'; |       return 'text-n-slate-11 dark:text-n-slate-11'; | ||||||
|   } |   } | ||||||
|   | |||||||
| @@ -74,7 +74,7 @@ const action = computed(() => ({ | |||||||
|  |  | ||||||
| <style lang="scss"> | <style lang="scss"> | ||||||
| .join-call-button { | .join-call-button { | ||||||
|   margin: var(--space-small) 0; |   margin: 0.5rem 0; | ||||||
| } | } | ||||||
|  |  | ||||||
| .video-call--container { | .video-call--container { | ||||||
| @@ -83,9 +83,9 @@ const action = computed(() => ({ | |||||||
|   right: 0; |   right: 0; | ||||||
|   width: 100%; |   width: 100%; | ||||||
|   height: 100%; |   height: 100%; | ||||||
|   z-index: var(--z-index-high); |   z-index: 1000; | ||||||
|   padding: var(--space-smaller); |   padding: 0.25rem; | ||||||
|   background: var(--b-800); |   @apply bg-n-background; | ||||||
|  |  | ||||||
|   iframe { |   iframe { | ||||||
|     width: 100%; |     width: 100%; | ||||||
| @@ -95,7 +95,7 @@ const action = computed(() => ({ | |||||||
|  |  | ||||||
|   button { |   button { | ||||||
|     position: absolute; |     position: absolute; | ||||||
|     top: var(--space-smaller); |     top: 0.25rem; | ||||||
|     right: 10rem; |     right: 10rem; | ||||||
|   } |   } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -34,7 +34,7 @@ const displayFileName = computed(() => { | |||||||
| const textColorClass = computed(() => { | const textColorClass = computed(() => { | ||||||
|   const colorMap = { |   const colorMap = { | ||||||
|     '7z': 'dark:text-[#EDEEF0] text-[#2F265F]', |     '7z': 'dark:text-[#EDEEF0] text-[#2F265F]', | ||||||
|     csv: 'text-amber-12', |     csv: 'text-n-amber-12', | ||||||
|     doc: 'dark:text-[#D6E1FF] text-[#1F2D5C]', // indigo-12 |     doc: 'dark:text-[#D6E1FF] text-[#1F2D5C]', // indigo-12 | ||||||
|     docx: 'dark:text-[#D6E1FF] text-[#1F2D5C]', // indigo-12 |     docx: 'dark:text-[#D6E1FF] text-[#1F2D5C]', // indigo-12 | ||||||
|     json: 'text-n-slate-12', |     json: 'text-n-slate-12', | ||||||
|   | |||||||
| @@ -23,7 +23,7 @@ const singlePageState = createPaginationState(1, 10, 16); | |||||||
|     :layout="{ type: 'grid', width: '957' }" |     :layout="{ type: 'grid', width: '957' }" | ||||||
|   > |   > | ||||||
|     <Variant title="Default"> |     <Variant title="Default"> | ||||||
|       <div class="p-4 bg-white dark:bg-slate-900"> |       <div class="p-4 bg-n-background"> | ||||||
|         <PaginationFooter |         <PaginationFooter | ||||||
|           :current-page="defaultState.currentPage.value" |           :current-page="defaultState.currentPage.value" | ||||||
|           :total-items="defaultState.totalItems" |           :total-items="defaultState.totalItems" | ||||||
| @@ -34,7 +34,7 @@ const singlePageState = createPaginationState(1, 10, 16); | |||||||
|     </Variant> |     </Variant> | ||||||
|  |  | ||||||
|     <Variant title="Middle Page"> |     <Variant title="Middle Page"> | ||||||
|       <div class="p-4 bg-white dark:bg-slate-900"> |       <div class="p-4 bg-n-background"> | ||||||
|         <PaginationFooter |         <PaginationFooter | ||||||
|           :current-page="middlePageState.currentPage.value" |           :current-page="middlePageState.currentPage.value" | ||||||
|           :total-items="middlePageState.totalItems" |           :total-items="middlePageState.totalItems" | ||||||
| @@ -45,7 +45,7 @@ const singlePageState = createPaginationState(1, 10, 16); | |||||||
|     </Variant> |     </Variant> | ||||||
|  |  | ||||||
|     <Variant title="Last Page"> |     <Variant title="Last Page"> | ||||||
|       <div class="p-4 bg-white dark:bg-slate-900"> |       <div class="p-4 bg-n-background"> | ||||||
|         <PaginationFooter |         <PaginationFooter | ||||||
|           :current-page="lastPageState.currentPage.value" |           :current-page="lastPageState.currentPage.value" | ||||||
|           :total-items="lastPageState.totalItems" |           :total-items="lastPageState.totalItems" | ||||||
| @@ -56,7 +56,7 @@ const singlePageState = createPaginationState(1, 10, 16); | |||||||
|     </Variant> |     </Variant> | ||||||
|  |  | ||||||
|     <Variant title="Custom Items Per Page"> |     <Variant title="Custom Items Per Page"> | ||||||
|       <div class="p-4 bg-white dark:bg-slate-900"> |       <div class="p-4 bg-n-background"> | ||||||
|         <PaginationFooter |         <PaginationFooter | ||||||
|           :current-page="customItemsState.currentPage.value" |           :current-page="customItemsState.currentPage.value" | ||||||
|           :total-items="customItemsState.totalItems" |           :total-items="customItemsState.totalItems" | ||||||
| @@ -67,7 +67,7 @@ const singlePageState = createPaginationState(1, 10, 16); | |||||||
|     </Variant> |     </Variant> | ||||||
|  |  | ||||||
|     <Variant title="Single Page"> |     <Variant title="Single Page"> | ||||||
|       <div class="p-4 bg-white dark:bg-slate-900"> |       <div class="p-4 bg-n-background"> | ||||||
|         <PaginationFooter |         <PaginationFooter | ||||||
|           :current-page="singlePageState.currentPage.value" |           :current-page="singlePageState.currentPage.value" | ||||||
|           :total-items="singlePageState.totalItems" |           :total-items="singlePageState.totalItems" | ||||||
|   | |||||||
| @@ -23,10 +23,11 @@ const showBadge = useMapGetter(props.getterKeys.badge); | |||||||
|     :is="to ? 'router-link' : 'div'" |     :is="to ? 'router-link' : 'div'" | ||||||
|     class="flex items-center gap-2 px-2 py-1.5 rounded-lg h-8" |     class="flex items-center gap-2 px-2 py-1.5 rounded-lg h-8" | ||||||
|     role="button" |     role="button" | ||||||
|  |     draggable="false" | ||||||
|     :to="to" |     :to="to" | ||||||
|     :title="label" |     :title="label" | ||||||
|     :class="{ |     :class="{ | ||||||
|       'n-blue-text bg-n-alpha-2 font-medium': isActive && !hasActiveChild, |       'text-n-blue-text bg-n-alpha-2 font-medium': isActive && !hasActiveChild, | ||||||
|       'text-n-slate-12 font-medium': hasActiveChild, |       'text-n-slate-12 font-medium': hasActiveChild, | ||||||
|       'text-n-slate-11 hover:bg-n-alpha-2': !isActive && !hasActiveChild, |       'text-n-slate-11 hover:bg-n-alpha-2': !isActive && !hasActiveChild, | ||||||
|     }" |     }" | ||||||
|   | |||||||
| @@ -33,7 +33,7 @@ const shouldRenderComponent = computed(() => { | |||||||
|       :title="label" |       :title="label" | ||||||
|       class="flex h-8 items-center gap-2 px-2 py-1 rounded-lg max-w-[9.438rem] hover:bg-gradient-to-r from-transparent via-n-slate-3/70 to-n-slate-3/70 group" |       class="flex h-8 items-center gap-2 px-2 py-1 rounded-lg max-w-[9.438rem] hover:bg-gradient-to-r from-transparent via-n-slate-3/70 to-n-slate-3/70 group" | ||||||
|       :class="{ |       :class="{ | ||||||
|         'n-blue-text bg-n-alpha-2 active': active, |         'text-n-blue-text bg-n-alpha-2 active': active, | ||||||
|       }" |       }" | ||||||
|     > |     > | ||||||
|       <component |       <component | ||||||
|   | |||||||
| @@ -111,11 +111,7 @@ const allowedMenuItems = computed(() => { | |||||||
| </script> | </script> | ||||||
|  |  | ||||||
| <template> | <template> | ||||||
|   <DropdownContainer |   <DropdownContainer class="relative w-full min-w-0" @close="emit('close')"> | ||||||
|     class="relative w-full min-w-0" |  | ||||||
|     :class="{ 'z-20': isOpen }" |  | ||||||
|     @close="emit('close')" |  | ||||||
|   > |  | ||||||
|     <template #trigger="{ toggle, isOpen }"> |     <template #trigger="{ toggle, isOpen }"> | ||||||
|       <button |       <button | ||||||
|         class="flex gap-2 items-center rounded-lg cursor-pointer text-left w-full hover:bg-n-alpha-1 p-1" |         class="flex gap-2 items-center rounded-lg cursor-pointer text-left w-full hover:bg-n-alpha-1 p-1" | ||||||
|   | |||||||
| @@ -19,7 +19,7 @@ const updateValue = () => { | |||||||
| <template> | <template> | ||||||
|   <button |   <button | ||||||
|     type="button" |     type="button" | ||||||
|     class="relative h-4 transition-colors duration-200 ease-in-out rounded-full w-7 focus:outline-none focus:ring-1 focus:ring-primary-500 focus:ring-offset-n-slate-2 focus:ring-offset-2" |     class="relative h-4 transition-colors duration-200 ease-in-out rounded-full w-7 focus:outline-none focus:ring-1 focus:ring-n-brand focus:ring-offset-n-slate-2 focus:ring-offset-2" | ||||||
|     :class="modelValue ? 'bg-n-brand' : 'bg-n-alpha-1 dark:bg-n-alpha-2'" |     :class="modelValue ? 'bg-n-brand' : 'bg-n-alpha-1 dark:bg-n-alpha-2'" | ||||||
|     role="switch" |     role="switch" | ||||||
|     :aria-checked="modelValue" |     :aria-checked="modelValue" | ||||||
| @@ -30,8 +30,8 @@ const updateValue = () => { | |||||||
|       class="absolute top-0.5 left-0.5 h-3 w-3 transform rounded-full shadow-sm transition-transform duration-200 ease-in-out" |       class="absolute top-0.5 left-0.5 h-3 w-3 transform rounded-full shadow-sm transition-transform duration-200 ease-in-out" | ||||||
|       :class=" |       :class=" | ||||||
|         modelValue |         modelValue | ||||||
|           ? 'translate-x-3 bg-white' |           ? 'translate-x-3 bg-n-background' | ||||||
|           : 'translate-x-0 bg-white dark:bg-n-black' |           : 'translate-x-0 bg-n-background' | ||||||
|       " |       " | ||||||
|     /> |     /> | ||||||
|   </button> |   </button> | ||||||
|   | |||||||
| @@ -25,13 +25,13 @@ const handleTabChanged = tab => { | |||||||
| <template> | <template> | ||||||
|   <Story title="Components/TabBar" :layout="{ type: 'grid', width: '920px' }"> |   <Story title="Components/TabBar" :layout="{ type: 'grid', width: '920px' }"> | ||||||
|     <Variant title="Default"> |     <Variant title="Default"> | ||||||
|       <div class="p-4 bg-white dark:bg-slate-900"> |       <div class="p-4 bg-n-background"> | ||||||
|         <TabBar :tabs="defaultTabs" @tab-changed="handleTabChanged" /> |         <TabBar :tabs="defaultTabs" @tab-changed="handleTabChanged" /> | ||||||
|       </div> |       </div> | ||||||
|     </Variant> |     </Variant> | ||||||
|  |  | ||||||
|     <Variant title="Custom Tabs with Initial Tab"> |     <Variant title="Custom Tabs with Initial Tab"> | ||||||
|       <div class="p-4 bg-white dark:bg-slate-900"> |       <div class="p-4 bg-n-background"> | ||||||
|         <TabBar |         <TabBar | ||||||
|           :tabs="customTabs" |           :tabs="customTabs" | ||||||
|           :initial-active-tab="1" |           :initial-active-tab="1" | ||||||
| @@ -41,7 +41,7 @@ const handleTabChanged = tab => { | |||||||
|     </Variant> |     </Variant> | ||||||
|  |  | ||||||
|     <Variant title="No Counts"> |     <Variant title="No Counts"> | ||||||
|       <div class="p-4 bg-white dark:bg-slate-900"> |       <div class="p-4 bg-n-background"> | ||||||
|         <TabBar |         <TabBar | ||||||
|           :tabs="[{ label: 'Tab 1' }, { label: 'Tab 2' }, { label: 'Tab 3' }]" |           :tabs="[{ label: 'Tab 1' }, { label: 'Tab 2' }, { label: 'Tab 3' }]" | ||||||
|           @tab-changed="handleTabChanged" |           @tab-changed="handleTabChanged" | ||||||
| @@ -50,7 +50,7 @@ const handleTabChanged = tab => { | |||||||
|     </Variant> |     </Variant> | ||||||
|  |  | ||||||
|     <Variant title="Single Tab"> |     <Variant title="Single Tab"> | ||||||
|       <div class="p-4 bg-white dark:bg-slate-900"> |       <div class="p-4 bg-n-background"> | ||||||
|         <TabBar |         <TabBar | ||||||
|           :tabs="[{ label: 'Single Tab', count: 42 }]" |           :tabs="[{ label: 'Single Tab', count: 42 }]" | ||||||
|           @tab-changed="handleTabChanged" |           @tab-changed="handleTabChanged" | ||||||
|   | |||||||
| @@ -9,19 +9,19 @@ const description = ref(''); | |||||||
| <template> | <template> | ||||||
|   <Story title="Components/TextArea" :layout="{ type: 'grid', width: '400' }"> |   <Story title="Components/TextArea" :layout="{ type: 'grid', width: '400' }"> | ||||||
|     <Variant title="Default"> |     <Variant title="Default"> | ||||||
|       <div class="p-4 bg-white dark:bg-slate-800"> |       <div class="p-4 bg-n-background"> | ||||||
|         <TextArea placeholder="Default TextArea" /> |         <TextArea placeholder="Default TextArea" /> | ||||||
|       </div> |       </div> | ||||||
|     </Variant> |     </Variant> | ||||||
|  |  | ||||||
|     <Variant title="With Label"> |     <Variant title="With Label"> | ||||||
|       <div class="p-4 bg-white dark:bg-slate-800"> |       <div class="p-4 bg-n-background"> | ||||||
|         <TextArea label="Description" placeholder="Enter your description" /> |         <TextArea label="Description" placeholder="Enter your description" /> | ||||||
|       </div> |       </div> | ||||||
|     </Variant> |     </Variant> | ||||||
|  |  | ||||||
|     <Variant title="Disabled"> |     <Variant title="Disabled"> | ||||||
|       <div class="p-4 bg-white dark:bg-slate-800"> |       <div class="p-4 bg-n-background"> | ||||||
|         <TextArea |         <TextArea | ||||||
|           label="Disabled TextArea" |           label="Disabled TextArea" | ||||||
|           placeholder="Can't type here" |           placeholder="Can't type here" | ||||||
| @@ -31,7 +31,7 @@ const description = ref(''); | |||||||
|     </Variant> |     </Variant> | ||||||
|  |  | ||||||
|     <Variant title="With Character Count"> |     <Variant title="With Character Count"> | ||||||
|       <div class="p-4 bg-white dark:bg-slate-800"> |       <div class="p-4 bg-n-background"> | ||||||
|         <TextArea |         <TextArea | ||||||
|           v-model="bio" |           v-model="bio" | ||||||
|           label="Bio" |           label="Bio" | ||||||
| @@ -43,7 +43,7 @@ const description = ref(''); | |||||||
|     </Variant> |     </Variant> | ||||||
|  |  | ||||||
|     <Variant title="Custom Max Length"> |     <Variant title="Custom Max Length"> | ||||||
|       <div class="p-4 bg-white dark:bg-slate-800"> |       <div class="p-4 bg-n-background"> | ||||||
|         <TextArea |         <TextArea | ||||||
|           v-model="description" |           v-model="description" | ||||||
|           label="Long Description" |           label="Long Description" | ||||||
| @@ -55,11 +55,11 @@ const description = ref(''); | |||||||
|     </Variant> |     </Variant> | ||||||
|  |  | ||||||
|     <Variant title="Custom TextArea Class"> |     <Variant title="Custom TextArea Class"> | ||||||
|       <div class="p-4 bg-white dark:bg-slate-800"> |       <div class="p-4 bg-n-background"> | ||||||
|         <TextArea |         <TextArea | ||||||
|           label="Custom Style" |           label="Custom Style" | ||||||
|           placeholder="Custom textarea class" |           placeholder="Custom textarea class" | ||||||
|           custom-text-area-class="border-yellow-500 dark:border-yellow-700" |           custom-text-area-class="border-n-amber-5 dark:border-n-amber-5" | ||||||
|         /> |         /> | ||||||
|       </div> |       </div> | ||||||
|     </Variant> |     </Variant> | ||||||
|   | |||||||
| @@ -47,7 +47,7 @@ const messageClass = computed(() => { | |||||||
|     case 'error': |     case 'error': | ||||||
|       return 'text-n-ruby-9 dark:text-n-ruby-9'; |       return 'text-n-ruby-9 dark:text-n-ruby-9'; | ||||||
|     case 'success': |     case 'success': | ||||||
|       return 'text-green-500 dark:text-green-400'; |       return 'text-n-teal-10 dark:text-n-teal-10'; | ||||||
|     default: |     default: | ||||||
|       return 'text-n-slate-11 dark:text-n-slate-11'; |       return 'text-n-slate-11 dark:text-n-slate-11'; | ||||||
|   } |   } | ||||||
| @@ -179,7 +179,7 @@ onMounted(() => { | |||||||
|         }" |         }" | ||||||
|         :disabled="disabled" |         :disabled="disabled" | ||||||
|         rows="1" |         rows="1" | ||||||
|         class="flex w-full reset-base text-sm p-0 !rounded-none !bg-transparent dark:!bg-transparent !border-0 !outline-0 !mb-0 placeholder:text-n-slate-10 dark:placeholder:text-n-slate-10 text-n-slate-12 dark:text-n-slate-12 disabled:cursor-not-allowed disabled:opacity-50 disabled:bg-slate-25 dark:disabled:bg-slate-900" |         class="flex w-full reset-base text-sm p-0 !rounded-none !bg-transparent dark:!bg-transparent !border-0 !outline-0 !mb-0 placeholder:text-n-slate-10 dark:placeholder:text-n-slate-10 text-n-slate-12 dark:text-n-slate-12 disabled:cursor-not-allowed disabled:opacity-50" | ||||||
|         @input="handleInput" |         @input="handleInput" | ||||||
|         @focus="handleFocus" |         @focus="handleFocus" | ||||||
|         @blur="handleBlur" |         @blur="handleBlur" | ||||||
|   | |||||||
| @@ -31,6 +31,7 @@ import DeleteCustomViews from 'dashboard/routes/dashboard/customviews/DeleteCust | |||||||
| import ConversationBulkActions from './widgets/conversation/conversationBulkActions/Index.vue'; | import ConversationBulkActions from './widgets/conversation/conversationBulkActions/Index.vue'; | ||||||
| import IntersectionObserver from './IntersectionObserver.vue'; | import IntersectionObserver from './IntersectionObserver.vue'; | ||||||
| import TeleportWithDirection from 'dashboard/components-next/TeleportWithDirection.vue'; | import TeleportWithDirection from 'dashboard/components-next/TeleportWithDirection.vue'; | ||||||
|  | import Spinner from 'dashboard/components-next/spinner/Spinner.vue'; | ||||||
|  |  | ||||||
| import { useUISettings } from 'dashboard/composables/useUISettings'; | import { useUISettings } from 'dashboard/composables/useUISettings'; | ||||||
| import { useAlert } from 'dashboard/composables'; | import { useAlert } from 'dashboard/composables'; | ||||||
| @@ -953,12 +954,12 @@ watch(conversationFilters, (newVal, oldVal) => { | |||||||
|           </DynamicScrollerItem> |           </DynamicScrollerItem> | ||||||
|         </template> |         </template> | ||||||
|         <template #after> |         <template #after> | ||||||
|           <div v-if="chatListLoading" class="text-center"> |           <div v-if="chatListLoading" class="flex justify-center my-4"> | ||||||
|             <span class="mt-4 mb-4 spinner" /> |             <Spinner class="text-n-brand" /> | ||||||
|           </div> |           </div> | ||||||
|           <p |           <p | ||||||
|             v-else-if="showEndOfListMessage" |             v-else-if="showEndOfListMessage" | ||||||
|             class="p-4 text-center text-slate-400 dark:text-slate-300" |             class="p-4 text-center text-n-slate-11" | ||||||
|           > |           > | ||||||
|             {{ $t('CHAT_LIST.EOF') }} |             {{ $t('CHAT_LIST.EOF') }} | ||||||
|           </p> |           </p> | ||||||
|   | |||||||
| @@ -1,10 +1,8 @@ | |||||||
| <script setup> | <script setup> | ||||||
| import { computed } from 'vue'; | import { computed } from 'vue'; | ||||||
| import { useUISettings } from 'dashboard/composables/useUISettings'; | import { useUISettings } from 'dashboard/composables/useUISettings'; | ||||||
| import { useMapGetter } from 'dashboard/composables/store.js'; |  | ||||||
| import { formatNumber } from '@chatwoot/utils'; | import { formatNumber } from '@chatwoot/utils'; | ||||||
| import wootConstants from 'dashboard/constants/globals'; | import wootConstants from 'dashboard/constants/globals'; | ||||||
| import { FEATURE_FLAGS } from 'dashboard/featureFlags'; |  | ||||||
|  |  | ||||||
| import ConversationBasicFilter from './widgets/conversation/ConversationBasicFilter.vue'; | import ConversationBasicFilter from './widgets/conversation/ConversationBasicFilter.vue'; | ||||||
| import SwitchLayout from 'dashboard/routes/dashboard/conversation/search/SwitchLayout.vue'; | import SwitchLayout from 'dashboard/routes/dashboard/conversation/search/SwitchLayout.vue'; | ||||||
| @@ -30,11 +28,6 @@ const emit = defineEmits([ | |||||||
|  |  | ||||||
| const { uiSettings, updateUISettings } = useUISettings(); | const { uiSettings, updateUISettings } = useUISettings(); | ||||||
|  |  | ||||||
| const currentAccountId = useMapGetter('getCurrentAccountId'); |  | ||||||
| const isFeatureEnabledonAccount = useMapGetter( |  | ||||||
|   'accounts/isFeatureEnabledonAccount' |  | ||||||
| ); |  | ||||||
|  |  | ||||||
| const onBasicFilterChange = (value, type) => { | const onBasicFilterChange = (value, type) => { | ||||||
|   emit('basicFilterChange', value, type); |   emit('basicFilterChange', value, type); | ||||||
| }; | }; | ||||||
| @@ -43,13 +36,6 @@ const hasAppliedFiltersOrActiveFolders = computed(() => { | |||||||
|   return props.hasAppliedFilters || props.hasActiveFolders; |   return props.hasAppliedFilters || props.hasActiveFolders; | ||||||
| }); | }); | ||||||
|  |  | ||||||
| const showV4View = computed(() => { |  | ||||||
|   return isFeatureEnabledonAccount.value( |  | ||||||
|     currentAccountId.value, |  | ||||||
|     FEATURE_FLAGS.CHATWOOT_V4 |  | ||||||
|   ); |  | ||||||
| }); |  | ||||||
|  |  | ||||||
| const allCount = computed(() => props.conversationStats?.allCount || 0); | const allCount = computed(() => props.conversationStats?.allCount || 0); | ||||||
| const formattedAllCount = computed(() => formatNumber(allCount.value)); | const formattedAllCount = computed(() => formatNumber(allCount.value)); | ||||||
|  |  | ||||||
| @@ -174,7 +160,6 @@ const toggleConversationLayout = () => { | |||||||
|         @change-filter="onBasicFilterChange" |         @change-filter="onBasicFilterChange" | ||||||
|       /> |       /> | ||||||
|       <SwitchLayout |       <SwitchLayout | ||||||
|         v-if="showV4View" |  | ||||||
|         :is-on-expanded-layout="isOnExpandedLayout" |         :is-on-expanded-layout="isOnExpandedLayout" | ||||||
|         @toggle="toggleConversationLayout" |         @toggle="toggleConversationLayout" | ||||||
|       /> |       /> | ||||||
|   | |||||||
| @@ -14,13 +14,13 @@ defineProps({ | |||||||
| <template> | <template> | ||||||
|   <div class="flex flex-col items-start w-full gap-6"> |   <div class="flex flex-col items-start w-full gap-6"> | ||||||
|     <div class="flex flex-col w-full gap-4"> |     <div class="flex flex-col w-full gap-4"> | ||||||
|       <h4 v-if="title" class="text-lg font-medium text-ash-900"> |       <h4 v-if="title" class="text-lg font-medium text-n-slate-12"> | ||||||
|         {{ title }} |         {{ title }} | ||||||
|       </h4> |       </h4> | ||||||
|       <div class="flex flex-row items-center justify-between"> |       <div class="flex flex-row items-center justify-between"> | ||||||
|         <div class="flex-grow h-px bg-ash-200" /> |         <div class="flex-grow h-px bg-n-weak" /> | ||||||
|       </div> |       </div> | ||||||
|       <p v-if="description" class="mb-0 text-sm font-normal text-ash-900"> |       <p v-if="description" class="mb-0 text-sm font-normal text-n-slate-12"> | ||||||
|         {{ description }} |         {{ description }} | ||||||
|       </p> |       </p> | ||||||
|     </div> |     </div> | ||||||
|   | |||||||
| @@ -28,19 +28,19 @@ export default { | |||||||
|     <img v-if="headerImage" :src="headerImage" alt="No image" /> |     <img v-if="headerImage" :src="headerImage" alt="No image" /> | ||||||
|     <h2 |     <h2 | ||||||
|       data-test-id="modal-header-title" |       data-test-id="modal-header-title" | ||||||
|       class="text-base font-semibold leading-6 text-slate-800 dark:text-slate-50" |       class="text-base font-semibold leading-6 text-n-slate-12" | ||||||
|     > |     > | ||||||
|       {{ headerTitle }} |       {{ headerTitle }} | ||||||
|     </h2> |     </h2> | ||||||
|     <p |     <p | ||||||
|       v-if="headerContent" |       v-if="headerContent" | ||||||
|       data-test-id="modal-header-content" |       data-test-id="modal-header-content" | ||||||
|       class="w-full mt-2 text-sm leading-5 break-words text-slate-600 dark:text-slate-300" |       class="w-full mt-2 text-sm leading-5 break-words text-n-slate-11" | ||||||
|     > |     > | ||||||
|       {{ headerContent }} |       {{ headerContent }} | ||||||
|       <span |       <span | ||||||
|         v-if="headerContentValue" |         v-if="headerContentValue" | ||||||
|         class="text-sm font-semibold text-slate-600 dark:text-slate-300" |         class="text-sm font-semibold text-n-slate-11" | ||||||
|       > |       > | ||||||
|         {{ headerContentValue }} |         {{ headerContentValue }} | ||||||
|       </span> |       </span> | ||||||
|   | |||||||
| @@ -30,15 +30,10 @@ export default { | |||||||
|   > |   > | ||||||
|     <div class="grid grid-cols-1 lg:grid-cols-8 gap-6"> |     <div class="grid grid-cols-1 lg:grid-cols-8 gap-6"> | ||||||
|       <div class="col-span-2"> |       <div class="col-span-2"> | ||||||
|         <p |         <p v-if="title" class="text-base text-n-brand mb-0 font-medium"> | ||||||
|           v-if="title" |  | ||||||
|           class="text-base text-woot-500 dark:text-woot-500 mb-0 font-medium" |  | ||||||
|         > |  | ||||||
|           {{ title }} |           {{ title }} | ||||||
|         </p> |         </p> | ||||||
|         <p |         <p class="text-sm mb-2 text-n-slate-11 leading-5 tracking-normal mt-2"> | ||||||
|           class="text-sm mb-2 text-slate-700 dark:text-slate-300 leading-5 tracking-normal mt-2" |  | ||||||
|         > |  | ||||||
|           <slot v-if="subTitle" name="subTitle"> |           <slot v-if="subTitle" name="subTitle"> | ||||||
|             {{ subTitle }} |             {{ subTitle }} | ||||||
|           </slot> |           </slot> | ||||||
|   | |||||||
| @@ -1,49 +0,0 @@ | |||||||
| <script> |  | ||||||
| import { FEATURE_FLAGS } from 'dashboard/featureFlags'; |  | ||||||
| import { BUS_EVENTS } from 'shared/constants/busEvents'; |  | ||||||
| import { mapGetters } from 'vuex'; |  | ||||||
| import { emitter } from 'shared/helpers/mitt'; |  | ||||||
| import NextButton from 'dashboard/components-next/button/Button.vue'; |  | ||||||
|  |  | ||||||
| export default { |  | ||||||
|   components: { |  | ||||||
|     NextButton, |  | ||||||
|   }, |  | ||||||
|   props: { |  | ||||||
|     size: { |  | ||||||
|       type: String, |  | ||||||
|       default: 'sm', |  | ||||||
|     }, |  | ||||||
|   }, |  | ||||||
|   computed: { |  | ||||||
|     ...mapGetters({ |  | ||||||
|       accountId: 'getCurrentAccountId', |  | ||||||
|       isFeatureEnabledonAccount: 'accounts/isFeatureEnabledonAccount', |  | ||||||
|     }), |  | ||||||
|     hasNextSidebar() { |  | ||||||
|       return this.isFeatureEnabledonAccount( |  | ||||||
|         this.accountId, |  | ||||||
|         FEATURE_FLAGS.CHATWOOT_V4 |  | ||||||
|       ); |  | ||||||
|     }, |  | ||||||
|   }, |  | ||||||
|   methods: { |  | ||||||
|     onMenuItemClick() { |  | ||||||
|       emitter.emit(BUS_EVENTS.TOGGLE_SIDEMENU); |  | ||||||
|     }, |  | ||||||
|   }, |  | ||||||
| }; |  | ||||||
| </script> |  | ||||||
|  |  | ||||||
| <!-- eslint-disable-next-line vue/no-root-v-if --> |  | ||||||
| <template> |  | ||||||
|   <NextButton |  | ||||||
|     v-if="!hasNextSidebar" |  | ||||||
|     ghost |  | ||||||
|     slate |  | ||||||
|     :size="size" |  | ||||||
|     icon="i-lucide-menu" |  | ||||||
|     class="-ml-3" |  | ||||||
|     @click="onMenuItemClick" |  | ||||||
|   /> |  | ||||||
| </template> |  | ||||||
| @@ -178,7 +178,7 @@ useEmitter(CMD_RESOLVE_CONVERSATION, onCmdResolveConversation); | |||||||
|     <div |     <div | ||||||
|       v-if="showActionsDropdown" |       v-if="showActionsDropdown" | ||||||
|       v-on-clickaway="closeDropdown" |       v-on-clickaway="closeDropdown" | ||||||
|       class="dropdown-pane dropdown-pane--open left-auto top-full mt-0.5 start-0 xl:start-auto xl:end-0 max-w-[12.5rem] min-w-[9.75rem]" |       class="border rounded-lg shadow-lg border-n-strong dark:border-n-strong box-content p-2 w-fit z-10 bg-n-alpha-3 backdrop-blur-[100px] absolute block left-auto top-full mt-0.5 start-0 xl:start-auto xl:end-0 max-w-[12.5rem] min-w-[9.75rem] [&_ul>li]:mb-0" | ||||||
|     > |     > | ||||||
|       <WootDropdownMenu class="mb-0"> |       <WootDropdownMenu class="mb-0"> | ||||||
|         <WootDropdownItem v-if="!isPending"> |         <WootDropdownItem v-if="!isPending"> | ||||||
| @@ -209,11 +209,3 @@ useEmitter(CMD_RESOLVE_CONVERSATION, onCmdResolveConversation); | |||||||
|     </div> |     </div> | ||||||
|   </div> |   </div> | ||||||
| </template> | </template> | ||||||
|  |  | ||||||
| <style lang="scss" scoped> |  | ||||||
| .dropdown-pane { |  | ||||||
|   .dropdown-menu__item { |  | ||||||
|     @apply mb-0; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| </style> |  | ||||||
|   | |||||||
| @@ -8,7 +8,7 @@ import { FEATURE_FLAGS } from 'dashboard/featureFlags'; | |||||||
| defineProps({ | defineProps({ | ||||||
|   conversationInboxType: { |   conversationInboxType: { | ||||||
|     type: String, |     type: String, | ||||||
|     required: true, |     default: '', | ||||||
|   }, |   }, | ||||||
| }); | }); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -15,7 +15,6 @@ import Label from './ui/Label.vue'; | |||||||
| import LoadingState from './widgets/LoadingState.vue'; | import LoadingState from './widgets/LoadingState.vue'; | ||||||
| import ModalHeader from './ModalHeader.vue'; | import ModalHeader from './ModalHeader.vue'; | ||||||
| import Modal from './Modal.vue'; | import Modal from './Modal.vue'; | ||||||
| import SidemenuIcon from './SidemenuIcon.vue'; |  | ||||||
| import Spinner from 'shared/components/Spinner.vue'; | import Spinner from 'shared/components/Spinner.vue'; | ||||||
| import Tabs from './ui/Tabs/Tabs.vue'; | import Tabs from './ui/Tabs/Tabs.vue'; | ||||||
| import TabsItem from './ui/Tabs/TabsItem.vue'; | import TabsItem from './ui/Tabs/TabsItem.vue'; | ||||||
| @@ -38,7 +37,6 @@ const WootUIKit = { | |||||||
|   LoadingState, |   LoadingState, | ||||||
|   Modal, |   Modal, | ||||||
|   ModalHeader, |   ModalHeader, | ||||||
|   SidemenuIcon, |  | ||||||
|   Spinner, |   Spinner, | ||||||
|   Tabs, |   Tabs, | ||||||
|   TabsItem, |   TabsItem, | ||||||
|   | |||||||
| @@ -1,157 +0,0 @@ | |||||||
| <script> |  | ||||||
| import { mapGetters } from 'vuex'; |  | ||||||
| import { useAlert } from 'dashboard/composables'; |  | ||||||
| import { useImpersonation } from 'dashboard/composables/useImpersonation'; |  | ||||||
| import WootDropdownItem from 'shared/components/ui/dropdown/DropdownItem.vue'; |  | ||||||
| import WootDropdownMenu from 'shared/components/ui/dropdown/DropdownMenu.vue'; |  | ||||||
| import WootDropdownHeader from 'shared/components/ui/dropdown/DropdownHeader.vue'; |  | ||||||
| import WootDropdownDivider from 'shared/components/ui/dropdown/DropdownDivider.vue'; |  | ||||||
| import AvailabilityStatusBadge from '../widgets/conversation/AvailabilityStatusBadge.vue'; |  | ||||||
| import wootConstants from 'dashboard/constants/globals'; |  | ||||||
| import NextButton from 'dashboard/components-next/button/Button.vue'; |  | ||||||
|  |  | ||||||
| const { AVAILABILITY_STATUS_KEYS } = wootConstants; |  | ||||||
|  |  | ||||||
| export default { |  | ||||||
|   components: { |  | ||||||
|     WootDropdownHeader, |  | ||||||
|     WootDropdownDivider, |  | ||||||
|     WootDropdownMenu, |  | ||||||
|     WootDropdownItem, |  | ||||||
|     AvailabilityStatusBadge, |  | ||||||
|     NextButton, |  | ||||||
|   }, |  | ||||||
|   setup() { |  | ||||||
|     const { isImpersonating } = useImpersonation(); |  | ||||||
|     return { isImpersonating }; |  | ||||||
|   }, |  | ||||||
|   data() { |  | ||||||
|     return { |  | ||||||
|       isStatusMenuOpened: false, |  | ||||||
|       isUpdating: false, |  | ||||||
|     }; |  | ||||||
|   }, |  | ||||||
|  |  | ||||||
|   computed: { |  | ||||||
|     ...mapGetters({ |  | ||||||
|       getCurrentUserAvailability: 'getCurrentUserAvailability', |  | ||||||
|       currentAccountId: 'getCurrentAccountId', |  | ||||||
|       currentUserAutoOffline: 'getCurrentUserAutoOffline', |  | ||||||
|     }), |  | ||||||
|     statusList() { |  | ||||||
|       return [ |  | ||||||
|         this.$t('PROFILE_SETTINGS.FORM.AVAILABILITY.STATUS.ONLINE'), |  | ||||||
|         this.$t('PROFILE_SETTINGS.FORM.AVAILABILITY.STATUS.BUSY'), |  | ||||||
|         this.$t('PROFILE_SETTINGS.FORM.AVAILABILITY.STATUS.OFFLINE'), |  | ||||||
|       ]; |  | ||||||
|     }, |  | ||||||
|     availabilityDisplayLabel() { |  | ||||||
|       const availabilityIndex = AVAILABILITY_STATUS_KEYS.findIndex( |  | ||||||
|         key => key === this.currentUserAvailability |  | ||||||
|       ); |  | ||||||
|       return this.statusList[availabilityIndex]; |  | ||||||
|     }, |  | ||||||
|     currentUserAvailability() { |  | ||||||
|       return this.getCurrentUserAvailability; |  | ||||||
|     }, |  | ||||||
|     availabilityStatuses() { |  | ||||||
|       return this.statusList.map((statusLabel, index) => ({ |  | ||||||
|         label: statusLabel, |  | ||||||
|         value: AVAILABILITY_STATUS_KEYS[index], |  | ||||||
|         disabled: |  | ||||||
|           this.currentUserAvailability === AVAILABILITY_STATUS_KEYS[index], |  | ||||||
|       })); |  | ||||||
|     }, |  | ||||||
|   }, |  | ||||||
|  |  | ||||||
|   methods: { |  | ||||||
|     openStatusMenu() { |  | ||||||
|       this.isStatusMenuOpened = true; |  | ||||||
|     }, |  | ||||||
|     closeStatusMenu() { |  | ||||||
|       this.isStatusMenuOpened = false; |  | ||||||
|     }, |  | ||||||
|     updateAutoOffline(autoOffline) { |  | ||||||
|       this.$store.dispatch('updateAutoOffline', { |  | ||||||
|         accountId: this.currentAccountId, |  | ||||||
|         autoOffline, |  | ||||||
|       }); |  | ||||||
|     }, |  | ||||||
|     changeAvailabilityStatus(availability) { |  | ||||||
|       if (this.isImpersonating) { |  | ||||||
|         useAlert( |  | ||||||
|           this.$t('PROFILE_SETTINGS.FORM.AVAILABILITY.IMPERSONATING_ERROR') |  | ||||||
|         ); |  | ||||||
|         return; |  | ||||||
|       } |  | ||||||
|  |  | ||||||
|       if (this.isUpdating) { |  | ||||||
|         return; |  | ||||||
|       } |  | ||||||
|  |  | ||||||
|       this.isUpdating = true; |  | ||||||
|       try { |  | ||||||
|         this.$store.dispatch('updateAvailability', { |  | ||||||
|           availability, |  | ||||||
|           account_id: this.currentAccountId, |  | ||||||
|         }); |  | ||||||
|       } catch (error) { |  | ||||||
|         useAlert( |  | ||||||
|           this.$t('PROFILE_SETTINGS.FORM.AVAILABILITY.SET_AVAILABILITY_ERROR') |  | ||||||
|         ); |  | ||||||
|       } finally { |  | ||||||
|         this.isUpdating = false; |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|   }, |  | ||||||
| }; |  | ||||||
| </script> |  | ||||||
|  |  | ||||||
| <template> |  | ||||||
|   <WootDropdownMenu> |  | ||||||
|     <WootDropdownHeader :title="$t('SIDEBAR.SET_AVAILABILITY_TITLE')" /> |  | ||||||
|     <WootDropdownItem |  | ||||||
|       v-for="status in availabilityStatuses" |  | ||||||
|       :key="status.value" |  | ||||||
|       class="flex items-baseline" |  | ||||||
|     > |  | ||||||
|       <NextButton |  | ||||||
|         sm |  | ||||||
|         :color="status.disabled ? 'blue' : 'slate'" |  | ||||||
|         :variant="status.disabled ? 'faded' : 'ghost'" |  | ||||||
|         class="status-change--dropdown-button !w-full !justify-start" |  | ||||||
|         @click="changeAvailabilityStatus(status.value)" |  | ||||||
|       > |  | ||||||
|         <AvailabilityStatusBadge :status="status.value" /> |  | ||||||
|         <span class="min-w-0 truncate font-medium text-xs"> |  | ||||||
|           {{ status.label }} |  | ||||||
|         </span> |  | ||||||
|       </NextButton> |  | ||||||
|     </WootDropdownItem> |  | ||||||
|     <WootDropdownDivider /> |  | ||||||
|     <WootDropdownItem class="flex items-center justify-between px-3 py-2 m-0"> |  | ||||||
|       <div class="flex items-center"> |  | ||||||
|         <fluent-icon |  | ||||||
|           v-tooltip.right-start="$t('SIDEBAR.SET_AUTO_OFFLINE.INFO_TEXT')" |  | ||||||
|           icon="info" |  | ||||||
|           size="14" |  | ||||||
|           class="mt-px" |  | ||||||
|         /> |  | ||||||
|  |  | ||||||
|         <span |  | ||||||
|           class="mx-2 my-0 text-xs font-medium text-slate-600 dark:text-slate-100" |  | ||||||
|         > |  | ||||||
|           {{ $t('SIDEBAR.SET_AUTO_OFFLINE.TEXT') }} |  | ||||||
|         </span> |  | ||||||
|       </div> |  | ||||||
|  |  | ||||||
|       <woot-switch |  | ||||||
|         size="small" |  | ||||||
|         class="mx-1 mt-px mb-0" |  | ||||||
|         :model-value="currentUserAutoOffline" |  | ||||||
|         @input="updateAutoOffline" |  | ||||||
|       /> |  | ||||||
|     </WootDropdownItem> |  | ||||||
|     <WootDropdownDivider /> |  | ||||||
|   </WootDropdownMenu> |  | ||||||
| </template> |  | ||||||
| @@ -1,246 +0,0 @@ | |||||||
| <script> |  | ||||||
| import { mapGetters } from 'vuex'; |  | ||||||
| import { getSidebarItems } from './config/default-sidebar'; |  | ||||||
| import { useKeyboardEvents } from 'dashboard/composables/useKeyboardEvents'; |  | ||||||
| import { useAccount } from 'dashboard/composables/useAccount'; |  | ||||||
| import { useRoute, useRouter } from 'vue-router'; |  | ||||||
|  |  | ||||||
| import PrimarySidebar from './sidebarComponents/Primary.vue'; |  | ||||||
| import SecondarySidebar from './sidebarComponents/Secondary.vue'; |  | ||||||
| import { routesWithPermissions } from '../../routes'; |  | ||||||
| import { |  | ||||||
|   getUserPermissions, |  | ||||||
|   hasPermissions, |  | ||||||
| } from '../../helper/permissionsHelper'; |  | ||||||
|  |  | ||||||
| export default { |  | ||||||
|   components: { |  | ||||||
|     PrimarySidebar, |  | ||||||
|     SecondarySidebar, |  | ||||||
|   }, |  | ||||||
|   props: { |  | ||||||
|     showSecondarySidebar: { |  | ||||||
|       type: Boolean, |  | ||||||
|       default: true, |  | ||||||
|     }, |  | ||||||
|   }, |  | ||||||
|   emits: [ |  | ||||||
|     'toggleAccountModal', |  | ||||||
|     'showAddLabelPopup', |  | ||||||
|     'openNotificationPanel', |  | ||||||
|     'closeKeyShortcutModal', |  | ||||||
|     'openKeyShortcutModal', |  | ||||||
|   ], |  | ||||||
|   setup(props, { emit }) { |  | ||||||
|     const route = useRoute(); |  | ||||||
|     const router = useRouter(); |  | ||||||
|     const { accountId } = useAccount(); |  | ||||||
|  |  | ||||||
|     const toggleKeyShortcutModal = () => { |  | ||||||
|       emit('openKeyShortcutModal'); |  | ||||||
|     }; |  | ||||||
|     const closeKeyShortcutModal = () => { |  | ||||||
|       emit('closeKeyShortcutModal'); |  | ||||||
|     }; |  | ||||||
|     const isCurrentRouteSameAsNavigation = routeName => { |  | ||||||
|       return route.name === routeName; |  | ||||||
|     }; |  | ||||||
|     const navigateToRoute = routeName => { |  | ||||||
|       if (!isCurrentRouteSameAsNavigation(routeName)) { |  | ||||||
|         router.push({ name: routeName }); |  | ||||||
|       } |  | ||||||
|     }; |  | ||||||
|     const keyboardEvents = { |  | ||||||
|       '$mod+Slash': { |  | ||||||
|         action: toggleKeyShortcutModal, |  | ||||||
|       }, |  | ||||||
|       '$mod+Escape': { |  | ||||||
|         action: closeKeyShortcutModal, |  | ||||||
|       }, |  | ||||||
|       'Alt+KeyC': { |  | ||||||
|         action: () => navigateToRoute('home'), |  | ||||||
|       }, |  | ||||||
|       'Alt+KeyV': { |  | ||||||
|         action: () => navigateToRoute('contacts_dashboard'), |  | ||||||
|       }, |  | ||||||
|       'Alt+KeyR': { |  | ||||||
|         action: () => navigateToRoute('account_overview_reports'), |  | ||||||
|       }, |  | ||||||
|       'Alt+KeyS': { |  | ||||||
|         action: () => navigateToRoute('agent_list'), |  | ||||||
|       }, |  | ||||||
|     }; |  | ||||||
|     useKeyboardEvents(keyboardEvents); |  | ||||||
|  |  | ||||||
|     return { |  | ||||||
|       toggleKeyShortcutModal, |  | ||||||
|       accountId, |  | ||||||
|     }; |  | ||||||
|   }, |  | ||||||
|   data() { |  | ||||||
|     return { |  | ||||||
|       showOptionsMenu: false, |  | ||||||
|     }; |  | ||||||
|   }, |  | ||||||
|  |  | ||||||
|   computed: { |  | ||||||
|     ...mapGetters({ |  | ||||||
|       currentUser: 'getCurrentUser', |  | ||||||
|       globalConfig: 'globalConfig/get', |  | ||||||
|       inboxes: 'inboxes/getInboxes', |  | ||||||
|       isACustomBrandedInstance: 'globalConfig/isACustomBrandedInstance', |  | ||||||
|       isFeatureEnabledonAccount: 'accounts/isFeatureEnabledonAccount', |  | ||||||
|       isOnChatwootCloud: 'globalConfig/isOnChatwootCloud', |  | ||||||
|       labels: 'labels/getLabelsOnSidebar', |  | ||||||
|       teams: 'teams/getMyTeams', |  | ||||||
|     }), |  | ||||||
|     activeCustomView() { |  | ||||||
|       if (this.activePrimaryMenu.key === 'contacts') { |  | ||||||
|         return 'contact'; |  | ||||||
|       } |  | ||||||
|       if (this.activePrimaryMenu.key === 'conversations') { |  | ||||||
|         return 'conversation'; |  | ||||||
|       } |  | ||||||
|       return ''; |  | ||||||
|     }, |  | ||||||
|     customViews() { |  | ||||||
|       if (!this.activeCustomView) { |  | ||||||
|         return []; |  | ||||||
|       } |  | ||||||
|       return this.$store.getters['customViews/getCustomViewsByFilterType']( |  | ||||||
|         this.activeCustomView |  | ||||||
|       ); |  | ||||||
|     }, |  | ||||||
|     isConversationOrContactActive() { |  | ||||||
|       return ( |  | ||||||
|         this.activePrimaryMenu.key === 'contacts' || |  | ||||||
|         this.activePrimaryMenu.key === 'conversations' |  | ||||||
|       ); |  | ||||||
|     }, |  | ||||||
|     sideMenuConfig() { |  | ||||||
|       return getSidebarItems(this.accountId); |  | ||||||
|     }, |  | ||||||
|     primaryMenuItems() { |  | ||||||
|       const userPermissions = getUserPermissions( |  | ||||||
|         this.currentUser, |  | ||||||
|         this.accountId |  | ||||||
|       ); |  | ||||||
|       const menuItems = this.sideMenuConfig.primaryMenu; |  | ||||||
|       return menuItems.filter(menuItem => { |  | ||||||
|         const isAvailableForTheUser = hasPermissions( |  | ||||||
|           routesWithPermissions[menuItem.toStateName], |  | ||||||
|           userPermissions |  | ||||||
|         ); |  | ||||||
|  |  | ||||||
|         if (!isAvailableForTheUser) { |  | ||||||
|           return false; |  | ||||||
|         } |  | ||||||
|         if ( |  | ||||||
|           menuItem.alwaysVisibleOnChatwootInstances && |  | ||||||
|           !this.isACustomBrandedInstance |  | ||||||
|         ) { |  | ||||||
|           return true; |  | ||||||
|         } |  | ||||||
|         if (menuItem.featureFlag) { |  | ||||||
|           return this.isFeatureEnabledonAccount( |  | ||||||
|             this.accountId, |  | ||||||
|             menuItem.featureFlag |  | ||||||
|           ); |  | ||||||
|         } |  | ||||||
|         return true; |  | ||||||
|       }); |  | ||||||
|     }, |  | ||||||
|     activeSecondaryMenu() { |  | ||||||
|       const { secondaryMenu } = this.sideMenuConfig; |  | ||||||
|       const { name: currentRoute } = this.$route; |  | ||||||
|  |  | ||||||
|       const activeSecondaryMenu = |  | ||||||
|         secondaryMenu.find(menuItem => |  | ||||||
|           menuItem.routes.includes(currentRoute) |  | ||||||
|         ) || {}; |  | ||||||
|       return activeSecondaryMenu; |  | ||||||
|     }, |  | ||||||
|     activePrimaryMenu() { |  | ||||||
|       const activePrimaryMenu = |  | ||||||
|         this.primaryMenuItems.find( |  | ||||||
|           menuItem => menuItem.key === this.activeSecondaryMenu.parentNav |  | ||||||
|         ) || {}; |  | ||||||
|       return activePrimaryMenu; |  | ||||||
|     }, |  | ||||||
|     hasSecondaryMenu() { |  | ||||||
|       return ( |  | ||||||
|         this.activeSecondaryMenu.menuItems && |  | ||||||
|         this.activeSecondaryMenu.menuItems.length |  | ||||||
|       ); |  | ||||||
|     }, |  | ||||||
|     hasSecondarySidebar() { |  | ||||||
|       // if it is explicitly stated to show and it has secondary menu items to show |  | ||||||
|       // showSecondarySidebar corresponds to the UI settings, indicating if the user has toggled it |  | ||||||
|       return this.showSecondarySidebar && this.hasSecondaryMenu; |  | ||||||
|     }, |  | ||||||
|   }, |  | ||||||
|  |  | ||||||
|   watch: { |  | ||||||
|     activeCustomView() { |  | ||||||
|       this.fetchCustomViews(); |  | ||||||
|     }, |  | ||||||
|   }, |  | ||||||
|   mounted() { |  | ||||||
|     this.$store.dispatch('labels/get'); |  | ||||||
|     this.$store.dispatch('inboxes/get'); |  | ||||||
|     this.$store.dispatch('notifications/unReadCount'); |  | ||||||
|     this.$store.dispatch('teams/get'); |  | ||||||
|     this.$store.dispatch('attributes/get'); |  | ||||||
|     this.fetchCustomViews(); |  | ||||||
|   }, |  | ||||||
|  |  | ||||||
|   methods: { |  | ||||||
|     fetchCustomViews() { |  | ||||||
|       if (this.isConversationOrContactActive) { |  | ||||||
|         this.$store.dispatch('customViews/get', this.activeCustomView); |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     toggleSupportChatWindow() { |  | ||||||
|       window.$chatwoot.toggle(); |  | ||||||
|     }, |  | ||||||
|     toggleAccountModal() { |  | ||||||
|       this.$emit('toggleAccountModal'); |  | ||||||
|     }, |  | ||||||
|     showAddLabelPopup() { |  | ||||||
|       this.$emit('showAddLabelPopup'); |  | ||||||
|     }, |  | ||||||
|     openNotificationPanel() { |  | ||||||
|       this.$emit('openNotificationPanel'); |  | ||||||
|     }, |  | ||||||
|   }, |  | ||||||
| }; |  | ||||||
| </script> |  | ||||||
|  |  | ||||||
| <template> |  | ||||||
|   <aside class="flex h-full"> |  | ||||||
|     <PrimarySidebar |  | ||||||
|       :logo-source="globalConfig.logoThumbnail" |  | ||||||
|       :installation-name="globalConfig.installationName" |  | ||||||
|       :is-a-custom-branded-instance="isACustomBrandedInstance" |  | ||||||
|       :account-id="accountId" |  | ||||||
|       :menu-items="primaryMenuItems" |  | ||||||
|       :active-menu-item="activePrimaryMenu.key" |  | ||||||
|       @toggle-accounts="toggleAccountModal" |  | ||||||
|       @open-key-shortcut-modal="toggleKeyShortcutModal" |  | ||||||
|       @open-notification-panel="openNotificationPanel" |  | ||||||
|     /> |  | ||||||
|     <SecondarySidebar |  | ||||||
|       v-if="hasSecondarySidebar" |  | ||||||
|       :account-id="accountId" |  | ||||||
|       :inboxes="inboxes" |  | ||||||
|       :labels="labels" |  | ||||||
|       :teams="teams" |  | ||||||
|       :custom-views="customViews" |  | ||||||
|       :menu-config="activeSecondaryMenu" |  | ||||||
|       :current-user="currentUser" |  | ||||||
|       :is-on-chatwoot-cloud="isOnChatwootCloud" |  | ||||||
|       @add-label="showAddLabelPopup" |  | ||||||
|       @toggle-accounts="toggleAccountModal" |  | ||||||
|     /> |  | ||||||
|   </aside> |  | ||||||
| </template> |  | ||||||
| @@ -1,19 +0,0 @@ | |||||||
| import conversations from './sidebarItems/conversations'; |  | ||||||
| import contacts from './sidebarItems/contacts'; |  | ||||||
| import reports from './sidebarItems/reports'; |  | ||||||
| import campaigns from './sidebarItems/campaigns'; |  | ||||||
| import settings from './sidebarItems/settings'; |  | ||||||
| import notifications from './sidebarItems/notifications'; |  | ||||||
| import primaryMenu from './sidebarItems/primaryMenu'; |  | ||||||
|  |  | ||||||
| export const getSidebarItems = accountId => ({ |  | ||||||
|   primaryMenu: primaryMenu(accountId), |  | ||||||
|   secondaryMenu: [ |  | ||||||
|     conversations(accountId), |  | ||||||
|     contacts(accountId), |  | ||||||
|     reports(accountId), |  | ||||||
|     campaigns(accountId), |  | ||||||
|     settings(accountId), |  | ||||||
|     notifications(accountId), |  | ||||||
|   ], |  | ||||||
| }); |  | ||||||
| @@ -1,26 +0,0 @@ | |||||||
| import { frontendURL } from '../../../../helper/URLHelper'; |  | ||||||
|  |  | ||||||
| const campaigns = accountId => ({ |  | ||||||
|   parentNav: 'campaigns', |  | ||||||
|   routes: ['campaigns_sms_index', 'campaigns_livechat_index'], |  | ||||||
|   menuItems: [ |  | ||||||
|     { |  | ||||||
|       icon: 'arrow-swap', |  | ||||||
|       label: 'LIVE_CHAT', |  | ||||||
|       key: 'ongoingCampaigns', |  | ||||||
|       hasSubMenu: false, |  | ||||||
|       toState: frontendURL(`accounts/${accountId}/campaigns/live_chat`), |  | ||||||
|       toStateName: 'campaigns_livechat_index', |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|       key: 'oneOffCampaigns', |  | ||||||
|       icon: 'sound-source', |  | ||||||
|       label: 'SMS', |  | ||||||
|       hasSubMenu: false, |  | ||||||
|       toState: frontendURL(`accounts/${accountId}/campaigns/sms`), |  | ||||||
|       toStateName: 'campaigns_sms_index', |  | ||||||
|     }, |  | ||||||
|   ], |  | ||||||
| }); |  | ||||||
|  |  | ||||||
| export default campaigns; |  | ||||||
| @@ -1,32 +0,0 @@ | |||||||
| import { frontendURL } from '../../../../helper/URLHelper'; |  | ||||||
|  |  | ||||||
| const contacts = accountId => ({ |  | ||||||
|   parentNav: 'contacts', |  | ||||||
|   routes: [ |  | ||||||
|     'contacts_dashboard_index', |  | ||||||
|     'contacts_dashboard_segments_index', |  | ||||||
|     'contacts_dashboard_labels_index', |  | ||||||
|     'contacts_edit', |  | ||||||
|     'contacts_edit_segment', |  | ||||||
|     'contacts_edit_label', |  | ||||||
|     'contacts_dashboard_active', |  | ||||||
|   ], |  | ||||||
|   menuItems: [ |  | ||||||
|     { |  | ||||||
|       icon: 'contact-card-group', |  | ||||||
|       label: 'ALL_CONTACTS', |  | ||||||
|       hasSubMenu: false, |  | ||||||
|       toState: frontendURL(`accounts/${accountId}/contacts?page=1`), |  | ||||||
|       toStateName: 'contacts_dashboard_index', |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|       icon: 'visitor-contacts', |  | ||||||
|       label: 'ACTIVE', |  | ||||||
|       hasSubMenu: false, |  | ||||||
|       toState: frontendURL(`accounts/${accountId}/contacts/active`), |  | ||||||
|       toStateName: 'contacts_dashboard_active', |  | ||||||
|     }, |  | ||||||
|   ], |  | ||||||
| }); |  | ||||||
|  |  | ||||||
| export default contacts; |  | ||||||
| @@ -1,50 +0,0 @@ | |||||||
| import { frontendURL } from '../../../../helper/URLHelper'; |  | ||||||
|  |  | ||||||
| const conversations = accountId => ({ |  | ||||||
|   parentNav: 'conversations', |  | ||||||
|   routes: [ |  | ||||||
|     'home', |  | ||||||
|     'inbox_dashboard', |  | ||||||
|     'inbox_conversation', |  | ||||||
|     'conversation_through_inbox', |  | ||||||
|     'notifications_dashboard', |  | ||||||
|     'label_conversations', |  | ||||||
|     'conversations_through_label', |  | ||||||
|     'team_conversations', |  | ||||||
|     'conversations_through_team', |  | ||||||
|     'conversation_mentions', |  | ||||||
|     'conversation_through_mentions', |  | ||||||
|     'conversation_participating', |  | ||||||
|     'conversation_through_participating', |  | ||||||
|     'folder_conversations', |  | ||||||
|     'conversations_through_folders', |  | ||||||
|     'conversation_unattended', |  | ||||||
|     'conversation_through_unattended', |  | ||||||
|   ], |  | ||||||
|   menuItems: [ |  | ||||||
|     { |  | ||||||
|       icon: 'chat', |  | ||||||
|       label: 'ALL_CONVERSATIONS', |  | ||||||
|       key: 'conversations', |  | ||||||
|       toState: frontendURL(`accounts/${accountId}/dashboard`), |  | ||||||
|       toolTip: 'Conversation from all subscribed inboxes', |  | ||||||
|       toStateName: 'home', |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|       icon: 'mention', |  | ||||||
|       label: 'MENTIONED_CONVERSATIONS', |  | ||||||
|       key: 'conversation_mentions', |  | ||||||
|       toState: frontendURL(`accounts/${accountId}/mentions/conversations`), |  | ||||||
|       toStateName: 'conversation_mentions', |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|       icon: 'mail-unread', |  | ||||||
|       label: 'UNATTENDED_CONVERSATIONS', |  | ||||||
|       key: 'conversation_unattended', |  | ||||||
|       toState: frontendURL(`accounts/${accountId}/unattended/conversations`), |  | ||||||
|       toStateName: 'conversation_unattended', |  | ||||||
|     }, |  | ||||||
|   ], |  | ||||||
| }); |  | ||||||
|  |  | ||||||
| export default conversations; |  | ||||||
| @@ -1,7 +0,0 @@ | |||||||
| const notifications = () => ({ |  | ||||||
|   parentNav: 'notifications', |  | ||||||
|   routes: ['notifications_index'], |  | ||||||
|   menuItems: [], |  | ||||||
| }); |  | ||||||
|  |  | ||||||
| export default notifications; |  | ||||||
| @@ -1,70 +0,0 @@ | |||||||
| import { FEATURE_FLAGS } from '../../../../featureFlags'; |  | ||||||
| import { frontendURL } from '../../../../helper/URLHelper'; |  | ||||||
|  |  | ||||||
| const primaryMenuItems = accountId => [ |  | ||||||
|   { |  | ||||||
|     icon: 'mail-inbox', |  | ||||||
|     key: 'inboxView', |  | ||||||
|     label: 'INBOX_VIEW', |  | ||||||
|     featureFlag: FEATURE_FLAGS.INBOX_VIEW, |  | ||||||
|     toState: frontendURL(`accounts/${accountId}/inbox-view`), |  | ||||||
|     toStateName: 'inbox_view', |  | ||||||
|   }, |  | ||||||
|   { |  | ||||||
|     icon: 'chat', |  | ||||||
|     key: 'conversations', |  | ||||||
|     label: 'CONVERSATIONS', |  | ||||||
|     toState: frontendURL(`accounts/${accountId}/dashboard`), |  | ||||||
|     toStateName: 'home', |  | ||||||
|   }, |  | ||||||
|   { |  | ||||||
|     icon: 'captain', |  | ||||||
|     key: 'captain', |  | ||||||
|     label: 'CAPTAIN', |  | ||||||
|     featureFlag: FEATURE_FLAGS.CAPTAIN, |  | ||||||
|     toState: frontendURL(`accounts/${accountId}/captain/documents`), |  | ||||||
|     toStateName: 'captain', |  | ||||||
|   }, |  | ||||||
|   { |  | ||||||
|     icon: 'book-contacts', |  | ||||||
|     key: 'contacts', |  | ||||||
|     label: 'CONTACTS', |  | ||||||
|     featureFlag: FEATURE_FLAGS.CRM, |  | ||||||
|     toState: frontendURL(`accounts/${accountId}/contacts`), |  | ||||||
|     toStateName: 'contacts_dashboard_index', |  | ||||||
|   }, |  | ||||||
|   { |  | ||||||
|     icon: 'arrow-trending-lines', |  | ||||||
|     key: 'reports', |  | ||||||
|     label: 'REPORTS', |  | ||||||
|     featureFlag: FEATURE_FLAGS.REPORTS, |  | ||||||
|     toState: frontendURL(`accounts/${accountId}/reports`), |  | ||||||
|     toStateName: 'account_overview_reports', |  | ||||||
|   }, |  | ||||||
|   { |  | ||||||
|     icon: 'megaphone', |  | ||||||
|     key: 'campaigns', |  | ||||||
|     label: 'CAMPAIGNS', |  | ||||||
|     featureFlag: FEATURE_FLAGS.CAMPAIGNS, |  | ||||||
|     toState: frontendURL(`accounts/${accountId}/campaigns`), |  | ||||||
|     toStateName: 'campaigns_ongoing_index', |  | ||||||
|   }, |  | ||||||
|   { |  | ||||||
|     icon: 'library', |  | ||||||
|     key: 'helpcenter', |  | ||||||
|     label: 'HELP_CENTER.TITLE', |  | ||||||
|     featureFlag: FEATURE_FLAGS.HELP_CENTER, |  | ||||||
|     alwaysVisibleOnChatwootInstances: true, |  | ||||||
|     toState: frontendURL(`accounts/${accountId}/portals/portal_articles_index`), |  | ||||||
|     toStateName: 'portals_index', |  | ||||||
|   }, |  | ||||||
|   { |  | ||||||
|     icon: 'settings', |  | ||||||
|     key: 'settings', |  | ||||||
|     label: 'SETTINGS', |  | ||||||
|     toState: frontendURL(`accounts/${accountId}/settings`), |  | ||||||
|     toStateName: 'settings_home', |  | ||||||
|   }, |  | ||||||
| ]; |  | ||||||
|  |  | ||||||
| export default primaryMenuItems; |  | ||||||
| @@ -1,7 +0,0 @@ | |||||||
| const profileSettings = () => ({ |  | ||||||
|   parentNav: 'profileSettings', |  | ||||||
|   routes: ['profile_settings_index'], |  | ||||||
|   menuItems: [], |  | ||||||
| }); |  | ||||||
|  |  | ||||||
| export default profileSettings; |  | ||||||
| @@ -1,87 +0,0 @@ | |||||||
| import { FEATURE_FLAGS } from '../../../../featureFlags'; |  | ||||||
| import { frontendURL } from '../../../../helper/URLHelper'; |  | ||||||
|  |  | ||||||
| const reports = accountId => ({ |  | ||||||
|   parentNav: 'reports', |  | ||||||
|   routes: [ |  | ||||||
|     'account_overview_reports', |  | ||||||
|     'conversation_reports', |  | ||||||
|     'csat_reports', |  | ||||||
|     'bot_reports', |  | ||||||
|     'agent_reports', |  | ||||||
|     'label_reports', |  | ||||||
|     'inbox_reports', |  | ||||||
|     'inbox_reports_show', |  | ||||||
|     'team_reports', |  | ||||||
|     'sla_reports', |  | ||||||
|   ], |  | ||||||
|   menuItems: [ |  | ||||||
|     { |  | ||||||
|       icon: 'arrow-trending-lines', |  | ||||||
|       label: 'REPORTS_OVERVIEW', |  | ||||||
|       hasSubMenu: false, |  | ||||||
|       toState: frontendURL(`accounts/${accountId}/reports/overview`), |  | ||||||
|       toStateName: 'account_overview_reports', |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|       icon: 'chat', |  | ||||||
|       label: 'REPORTS_CONVERSATION', |  | ||||||
|       hasSubMenu: false, |  | ||||||
|       toState: frontendURL(`accounts/${accountId}/reports/conversation`), |  | ||||||
|       toStateName: 'conversation_reports', |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|       icon: 'emoji', |  | ||||||
|       label: 'CSAT', |  | ||||||
|       hasSubMenu: false, |  | ||||||
|       toState: frontendURL(`accounts/${accountId}/reports/csat`), |  | ||||||
|       toStateName: 'csat_reports', |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|       icon: 'bot', |  | ||||||
|       label: 'REPORTS_BOT', |  | ||||||
|       hasSubMenu: false, |  | ||||||
|       featureFlag: FEATURE_FLAGS.RESPONSE_BOT, |  | ||||||
|       toState: frontendURL(`accounts/${accountId}/reports/bot`), |  | ||||||
|       toStateName: 'bot_reports', |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|       icon: 'people', |  | ||||||
|       label: 'REPORTS_AGENT', |  | ||||||
|       hasSubMenu: false, |  | ||||||
|       toState: frontendURL(`accounts/${accountId}/reports/agent`), |  | ||||||
|       toStateName: 'agent_reports', |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|       icon: 'tag', |  | ||||||
|       label: 'REPORTS_LABEL', |  | ||||||
|       hasSubMenu: false, |  | ||||||
|       toState: frontendURL(`accounts/${accountId}/reports/label`), |  | ||||||
|       toStateName: 'label_reports', |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|       icon: 'mail-inbox-all', |  | ||||||
|       label: 'REPORTS_INBOX', |  | ||||||
|       hasSubMenu: false, |  | ||||||
|       toState: frontendURL(`accounts/${accountId}/reports/inboxes`), |  | ||||||
|       toStateName: 'inbox_reports', |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|       icon: 'people-team', |  | ||||||
|       label: 'REPORTS_TEAM', |  | ||||||
|       hasSubMenu: false, |  | ||||||
|       toState: frontendURL(`accounts/${accountId}/reports/teams`), |  | ||||||
|       toStateName: 'team_reports', |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|       icon: 'document-list-clock', |  | ||||||
|       label: 'REPORTS_SLA', |  | ||||||
|       hasSubMenu: false, |  | ||||||
|       featureFlag: FEATURE_FLAGS.SLA, |  | ||||||
|       toState: frontendURL(`accounts/${accountId}/reports/sla`), |  | ||||||
|       toStateName: 'sla_reports', |  | ||||||
|     }, |  | ||||||
|   ], |  | ||||||
| }); |  | ||||||
|  |  | ||||||
| export default reports; |  | ||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user
	 Sivin Varghese
					Sivin Varghese