diff --git a/app/javascript/dashboard/assets/scss/_animations.scss b/app/javascript/dashboard/assets/scss/_animations.scss index ebb20a35e..4f5a2d43f 100644 --- a/app/javascript/dashboard/assets/scss/_animations.scss +++ b/app/javascript/dashboard/assets/scss/_animations.scss @@ -1,4 +1,3 @@ - /* Enter and leave animations can use different */ /* durations and timing functions. */ .slide-fade-enter-active { @@ -9,7 +8,8 @@ transition: all .3s $ease-out-cubic; } -.slide-fade-enter, .slide-fade-leave-to { +.slide-fade-enter, +.slide-fade-leave-to { opacity: 0; transform: translateX(10px); } @@ -22,22 +22,33 @@ transform: translateX($space-medium); } -.conversations-list-enter-active, .conversations-list-leave-active { +.conversations-list-enter-active, +.conversations-list-leave-active { transition: all .25s $ease-out-cubic; } -.conversations-list-enter, .conversations-list-leave-to /* .conversations-list-leave-active for <2.1.8 */ { +.conversations-list-enter, +.conversations-list-leave-to { opacity: 0; transform: translateX($space-medium); } -.menu-list-enter-active, .menu-list-leave-active { - transition: all .2s $ease-out-cubic; +.menu-list-enter-active, +.menu-list-leave-active { + transition: opacity .3s $ease-out-cubic, + transform .2s $ease-out-cubic; } -.menu-list-enter, .menu-list-leave-to /* .conversations-list-leave-active for <2.1.8 */ { + +.menu-list-leave-to { opacity: 0; - transform: translateX($space-medium); + position: absolute; + transform: translateX($space-small); +} + +.menu-list-enter { + opacity: 0; + transform: translateX(-$space-small); } .slide-up-enter-active { @@ -48,8 +59,8 @@ transition: all .3s $ease-out-cubic; } -.slide-up-enter, .slide-up-leave-to -/* .slide-fade-leave-active for <2.1.8 */ { +.slide-up-enter, +.slide-up-leave-to { transform: translateY(-$space-medium); opacity: 0; } @@ -60,10 +71,10 @@ transition: transform 0.25s $ease-in-cubic, opacity 0.15s $ease-in-cubic; } -.menu-slide-enter, .menu-slide-leave-to -/* .slide-fade-leave-active for <2.1.8 */ { - transform: translateY($space-small); +.menu-slide-enter, +.menu-slide-leave-to { opacity: 0; + transform: translateY($space-small); } @@ -75,10 +86,10 @@ transition: all .1s $ease-out-sine; } -.toast-fade-enter, .toast-fade-leave-to -/* .toast-fade-leave-active for <2.1.8 */ { - transform: translateY(-$space-small); +.toast-fade-enter, +.toast-fade-leave-to { opacity: 0; + transform: translateY(-$space-small); } .modal-fade-enter-active { @@ -89,8 +100,8 @@ transition: all .1s $ease-out-sine; } -.modal-fade-enter, .modal-fade-leave-to -/* .slide-fade-leave-active for <2.1.8 */ { +.modal-fade-enter, +.modal-fade-leave-to { opacity: 0; } diff --git a/app/javascript/dashboard/assets/scss/_foundation-custom.scss b/app/javascript/dashboard/assets/scss/_foundation-custom.scss index 83f5f9ea4..1cfd002cf 100644 --- a/app/javascript/dashboard/assets/scss/_foundation-custom.scss +++ b/app/javascript/dashboard/assets/scss/_foundation-custom.scss @@ -56,6 +56,10 @@ code { } +.badge { + border-radius: var(--border-radius-normal); +} + .padding-right-small { padding-right: var(--space-one); } diff --git a/app/javascript/dashboard/assets/scss/_foundation-settings.scss b/app/javascript/dashboard/assets/scss/_foundation-settings.scss index c74b9f05b..13b7dfafd 100644 --- a/app/javascript/dashboard/assets/scss/_foundation-settings.scss +++ b/app/javascript/dashboard/assets/scss/_foundation-settings.scss @@ -219,9 +219,9 @@ $badge-background: $primary-color; $badge-color: $white; $badge-color-alt: $black; $badge-palette: $foundation-palette; -$badge-padding: 0.3em; +$badge-padding: var(--space-smaller); $badge-minwidth: 2.1em; -$badge-font-size: 0.6rem; +$badge-font-size: var(--font-size-nano); // 10. Breadcrumbs // --------------- @@ -400,7 +400,7 @@ $mediaobject-image-width-stacked: 100%; $menu-margin: 0; $menu-margin-nested: $space-medium; -$menu-item-padding: $space-one; +$menu-item-padding: $space-slab; $menu-item-color-active: $white; $menu-item-background-active: $color-background; $menu-icon-spacing: 0.25rem; diff --git a/app/javascript/dashboard/assets/scss/_variables.scss b/app/javascript/dashboard/assets/scss/_variables.scss index 447e86a25..ea8334c57 100644 --- a/app/javascript/dashboard/assets/scss/_variables.scss +++ b/app/javascript/dashboard/assets/scss/_variables.scss @@ -44,11 +44,14 @@ $woot-logo-padding: $space-large $space-two; $color-woot: #1f93ff; $color-gray: #6e6f73; $color-light-gray: #999a9b; -$color-border: #e0e6ed; -$color-border-light: #f0f4f5; -$color-border-dark: #cad0d4; -$color-background: #f4f6fb; -$color-background-light: #f9fafc; + +$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; diff --git a/app/javascript/dashboard/assets/scss/plugins/_dropdown.scss b/app/javascript/dashboard/assets/scss/plugins/_dropdown.scss index e1c0c055d..8513053b8 100644 --- a/app/javascript/dashboard/assets/scss/plugins/_dropdown.scss +++ b/app/javascript/dashboard/assets/scss/plugins/_dropdown.scss @@ -2,6 +2,7 @@ @include elegant-card; @include border-light; box-sizing: content-box; + padding: var(--space-small); width: fit-content; z-index: var(--z-index-very-high); diff --git a/app/javascript/dashboard/assets/scss/views/settings/inbox.scss b/app/javascript/dashboard/assets/scss/views/settings/inbox.scss index e3b45726f..d2b145286 100644 --- a/app/javascript/dashboard/assets/scss/views/settings/inbox.scss +++ b/app/javascript/dashboard/assets/scss/views/settings/inbox.scss @@ -8,7 +8,7 @@ @include background-white; @include flex; @include flex-align($x: justify, $y: middle); - @include border-normal-bottom; + border-bottom: 1px solid var(--s-50); height: $header-height; min-height: $header-height; diff --git a/app/javascript/dashboard/assets/scss/widgets/_sidemenu.scss b/app/javascript/dashboard/assets/scss/widgets/_sidemenu.scss index 70cad65e8..e5e9276fd 100644 --- a/app/javascript/dashboard/assets/scss/widgets/_sidemenu.scss +++ b/app/javascript/dashboard/assets/scss/widgets/_sidemenu.scss @@ -6,12 +6,6 @@ } .sidebar { - @include border-normal-right; - @include background-white; - @include full-height; - @include margin(0); - @include space-between-column; - width: $nav-bar-width; z-index: 1024 - 1; //logo @@ -22,28 +16,6 @@ } } - .main-nav { - a { - border-radius: $space-smaller; - color: $color-gray; - font-size: $font-size-default; - font-weight: $font-weight-medium; - - .wrap, - .child-icon { - color: $color-gray; - - &:hover { - color: $color-woot; - } - } - } - - .active a .wrap { - color: $color-woot; - } - } - .nested { a { font-size: $font-size-small; @@ -64,7 +36,7 @@ .bottom-nav { @include flex; @include space-between-column; - @include padding($space-one); + @include padding($space-one $space-normal $space-one $space-one); @include border-normal-top; flex-direction: column; position: relative; @@ -85,32 +57,14 @@ } } -.main-nav { - @include flex-weight(1); - @include scroll-on-hover; - padding: 0 $space-medium - $space-one; +.hamburger--menu { + cursor: pointer; + display: none; + margin-right: $space-normal; - a { - &::before { - margin-right: $space-slab; - } + @media screen and (max-width: 1200px) { + display: block; } - - .menu-title { - color: $color-gray; - font-size: $font-size-medium; - margin-top: $space-medium; - - >span { - margin-left: $space-one; - } - } -} - -.menu-title+ul>li>a { - @include padding($space-micro null); - color: $medium-gray; - line-height: $global-lineheight; } .header--icon { diff --git a/app/javascript/dashboard/components/layout/AvailabilityStatus.vue b/app/javascript/dashboard/components/layout/AvailabilityStatus.vue index b7194355b..1ad4a9be3 100644 --- a/app/javascript/dashboard/components/layout/AvailabilityStatus.vue +++ b/app/javascript/dashboard/components/layout/AvailabilityStatus.vue @@ -1,66 +1,41 @@ + + diff --git a/app/javascript/dashboard/components/layout/SidebarItem.vue b/app/javascript/dashboard/components/layout/SidebarItem.vue index be04330ad..ecb5ae9a9 100644 --- a/app/javascript/dashboard/components/layout/SidebarItem.vue +++ b/app/javascript/dashboard/components/layout/SidebarItem.vue @@ -1,10 +1,5 @@ diff --git a/app/javascript/dashboard/components/layout/sidebarComponents/AgentDetails.vue b/app/javascript/dashboard/components/layout/sidebarComponents/AgentDetails.vue index a1233db7c..beeb59c4c 100644 --- a/app/javascript/dashboard/components/layout/sidebarComponents/AgentDetails.vue +++ b/app/javascript/dashboard/components/layout/sidebarComponents/AgentDetails.vue @@ -1,18 +1,18 @@ diff --git a/app/javascript/dashboard/components/layout/sidebarComponents/NotificationBell.vue b/app/javascript/dashboard/components/layout/sidebarComponents/NotificationBell.vue index cf3521a54..6227f179c 100644 --- a/app/javascript/dashboard/components/layout/sidebarComponents/NotificationBell.vue +++ b/app/javascript/dashboard/components/layout/sidebarComponents/NotificationBell.vue @@ -1,13 +1,19 @@ diff --git a/app/javascript/dashboard/components/layout/sidebarComponents/OptionsMenu.vue b/app/javascript/dashboard/components/layout/sidebarComponents/OptionsMenu.vue index 3fb66c14e..38b803308 100644 --- a/app/javascript/dashboard/components/layout/sidebarComponents/OptionsMenu.vue +++ b/app/javascript/dashboard/components/layout/sidebarComponents/OptionsMenu.vue @@ -2,15 +2,19 @@
- +
{{ decodeURI(fileName) }}
({ common: common(accountId), @@ -10,4 +13,5 @@ export const getSidebarItems = accountId => ({ reports: reports(accountId), campaigns: campaigns(accountId), settings: settings(accountId), + notifications: notifications(accountId), }); diff --git a/app/javascript/dashboard/i18n/locale/en/settings.json b/app/javascript/dashboard/i18n/locale/en/settings.json index 47ad6ec7b..7b09e40b8 100644 --- a/app/javascript/dashboard/i18n/locale/en/settings.json +++ b/app/javascript/dashboard/i18n/locale/en/settings.json @@ -103,6 +103,7 @@ "SIDEBAR_ITEMS": { "CHANGE_AVAILABILITY_STATUS": "Change", "CHANGE_ACCOUNTS": "Switch Account", + "CONTACT_SUPPORT": "Contact Support", "SELECTOR_SUBTITLE": "Select an account from the following list", "PROFILE_SETTINGS": "Profile Settings", "KEYBOARD_SHORTCUTS": "Keyboard Shortcuts", @@ -143,6 +144,7 @@ "NOTIFICATIONS": "Notifications", "CANNED_RESPONSES": "Canned Responses", "INTEGRATIONS": "Integrations", + "PROFILE_SETTINGS": "Profile Settings", "ACCOUNT_SETTINGS": "Account Settings", "APPLICATIONS": "Applications", "LABELS": "Labels", @@ -151,6 +153,9 @@ "TEAMS": "Teams", "ALL_CONTACTS": "All Contacts", "TAGGED_WITH": "Tagged with", + "NEW_LABEL": "New label", + "NEW_TEAM": "New team", + "NEW_INBOX": "New inbox", "REPORTS_OVERVIEW": "Overview", "CSAT": "CSAT", "CAMPAIGNS": "Campaigns", @@ -159,7 +164,8 @@ "REPORTS_AGENT": "Agents", "REPORTS_LABEL": "Labels", "REPORTS_INBOX": "Inbox", - "REPORTS_TEAM": "Team" + "REPORTS_TEAM": "Team", + "SET_AVAILABILITY_TITLE": "Set yourself as" }, "CREATE_ACCOUNT": { "NO_ACCOUNT_WARNING": "Uh oh! We could not find any Chatwoot accounts. Please create a new account to continue.", diff --git a/app/javascript/dashboard/i18n/sidebarItems/campaigns.js b/app/javascript/dashboard/i18n/sidebarItems/campaigns.js index 18aad271c..448b6b5d6 100644 --- a/app/javascript/dashboard/i18n/sidebarItems/campaigns.js +++ b/app/javascript/dashboard/i18n/sidebarItems/campaigns.js @@ -2,29 +2,24 @@ import { frontendURL } from '../../helper/URLHelper'; const campaigns = accountId => ({ routes: ['settings_account_campaigns', 'one_off'], - menuItems: { - back: { - icon: 'chevron-left', - label: 'HOME', - hasSubMenu: false, - toStateName: 'home', - toState: frontendURL(`accounts/${accountId}/dashboard`), - }, - ongoingCampaigns: { + menuItems: [ + { icon: 'arrow-swap', label: 'ONGOING', + key: 'ongoingCampaigns', hasSubMenu: false, toState: frontendURL(`accounts/${accountId}/campaigns/ongoing`), toStateName: 'settings_account_campaigns', }, - onOffCampaigns: { + { + key: 'oneOffCampaigns', icon: 'sound-source', label: 'ONE_OFF', hasSubMenu: false, toState: frontendURL(`accounts/${accountId}/campaigns/one_off`), toStateName: 'one_off', }, - }, + ], }); export default campaigns; diff --git a/app/javascript/dashboard/i18n/sidebarItems/common.js b/app/javascript/dashboard/i18n/sidebarItems/common.js index 6f52ed54f..03af7dab1 100644 --- a/app/javascript/dashboard/i18n/sidebarItems/common.js +++ b/app/javascript/dashboard/i18n/sidebarItems/common.js @@ -19,44 +19,41 @@ const common = accountId => ({ assignedToMe: { icon: 'chat', label: 'CONVERSATIONS', - hasSubMenu: false, - key: '', + hasSubMenu: true, + key: 'conversations', toState: frontendURL(`accounts/${accountId}/dashboard`), toolTip: 'Conversation from all subscribed inboxes', toStateName: 'home', }, contacts: { + key: 'contacts', icon: 'book-contacts', label: 'CONTACTS', - hasSubMenu: false, + hasSubMenu: true, toState: frontendURL(`accounts/${accountId}/contacts`), toStateName: 'contacts_dashboard', }, - notifications: { - icon: 'alert', - label: 'NOTIFICATIONS', - hasSubMenu: false, - toState: frontendURL(`accounts/${accountId}/notifications`), - toStateName: 'notifications_dashboard', - }, - report: { + reports: { + key: 'reports', icon: 'arrow-trending-lines', label: 'REPORTS', - hasSubMenu: false, + hasSubMenu: true, toState: frontendURL(`accounts/${accountId}/reports`), toStateName: 'settings_account_reports', }, campaigns: { + key: 'campaigns', icon: 'megaphone', label: 'CAMPAIGNS', - hasSubMenu: false, + hasSubMenu: true, toState: frontendURL(`accounts/${accountId}/campaigns`), toStateName: 'settings_account_campaigns', }, settings: { + key: 'settings', icon: 'settings', label: 'SETTINGS', - hasSubMenu: false, + hasSubMenu: true, toState: frontendURL(`accounts/${accountId}/settings`), toStateName: 'settings_home', }, diff --git a/app/javascript/dashboard/i18n/sidebarItems/notifications.js b/app/javascript/dashboard/i18n/sidebarItems/notifications.js new file mode 100644 index 000000000..a78b23f42 --- /dev/null +++ b/app/javascript/dashboard/i18n/sidebarItems/notifications.js @@ -0,0 +1,6 @@ +const notifications = () => ({ + routes: ['notifications_index'], + menuItems: {}, +}); + +export default notifications; diff --git a/app/javascript/dashboard/i18n/sidebarItems/reports.js b/app/javascript/dashboard/i18n/sidebarItems/reports.js index 3b6c94972..4286ff7ba 100644 --- a/app/javascript/dashboard/i18n/sidebarItems/reports.js +++ b/app/javascript/dashboard/i18n/sidebarItems/reports.js @@ -9,57 +9,50 @@ const reports = accountId => ({ 'inbox_reports', 'team_reports', ], - menuItems: { - back: { - icon: 'chevron-left', - label: 'HOME', - hasSubMenu: false, - toStateName: 'home', - toState: frontendURL(`accounts/${accountId}/dashboard`), - }, - reportOverview: { + menuItems: [ + { icon: 'arrow-trending-lines', label: 'REPORTS_OVERVIEW', hasSubMenu: false, toState: frontendURL(`accounts/${accountId}/reports/overview`), toStateName: 'settings_account_reports', }, - csatReports: { + { icon: 'emoji', label: 'CSAT', hasSubMenu: false, toState: frontendURL(`accounts/${accountId}/reports/csat`), toStateName: 'csat_reports', }, - agentReports: { + { icon: 'people', label: 'REPORTS_AGENT', hasSubMenu: false, toState: frontendURL(`accounts/${accountId}/reports/agent`), toStateName: 'agent_reports', }, - labelReports: { + { icon: 'tag', label: 'REPORTS_LABEL', hasSubMenu: false, toState: frontendURL(`accounts/${accountId}/reports/label`), toStateName: 'label_reports', }, - inboxReports: { + { icon: 'mail-inbox-all', label: 'REPORTS_INBOX', hasSubMenu: false, toState: frontendURL(`accounts/${accountId}/reports/inboxes`), toStateName: 'inbox_reports', }, - teamReports: { + { icon: 'people-team', label: 'REPORTS_TEAM', hasSubMenu: false, toState: frontendURL(`accounts/${accountId}/reports/teams`), toStateName: 'team_reports', }, - }, + ], }); export default reports; diff --git a/app/javascript/dashboard/modules/sidebar/components/Logo.vue b/app/javascript/dashboard/modules/sidebar/components/Logo.vue new file mode 100644 index 000000000..406157fc2 --- /dev/null +++ b/app/javascript/dashboard/modules/sidebar/components/Logo.vue @@ -0,0 +1,46 @@ + + + diff --git a/app/javascript/dashboard/modules/sidebar/components/Primary.vue b/app/javascript/dashboard/modules/sidebar/components/Primary.vue new file mode 100644 index 000000000..80b00ab26 --- /dev/null +++ b/app/javascript/dashboard/modules/sidebar/components/Primary.vue @@ -0,0 +1,120 @@ + + + diff --git a/app/javascript/dashboard/modules/sidebar/components/PrimaryNavItem.vue b/app/javascript/dashboard/modules/sidebar/components/PrimaryNavItem.vue new file mode 100644 index 000000000..67765b90e --- /dev/null +++ b/app/javascript/dashboard/modules/sidebar/components/PrimaryNavItem.vue @@ -0,0 +1,78 @@ + + + diff --git a/app/javascript/dashboard/modules/sidebar/components/Secondary.vue b/app/javascript/dashboard/modules/sidebar/components/Secondary.vue new file mode 100644 index 000000000..961c11e50 --- /dev/null +++ b/app/javascript/dashboard/modules/sidebar/components/Secondary.vue @@ -0,0 +1,215 @@ + + diff --git a/app/javascript/dashboard/modules/sidebar/components/SecondaryNavItem.vue b/app/javascript/dashboard/modules/sidebar/components/SecondaryNavItem.vue new file mode 100644 index 000000000..4cf9cb352 --- /dev/null +++ b/app/javascript/dashboard/modules/sidebar/components/SecondaryNavItem.vue @@ -0,0 +1,138 @@ + + + diff --git a/app/javascript/dashboard/modules/sidebar/mixins/routes.mixin.js b/app/javascript/dashboard/modules/sidebar/mixins/routes.mixin.js new file mode 100644 index 000000000..2834e3bbf --- /dev/null +++ b/app/javascript/dashboard/modules/sidebar/mixins/routes.mixin.js @@ -0,0 +1,35 @@ +import { getSidebarItems } from 'dashboard/i18n/default-sidebar'; + +export default { + computed: { + currentRoute() { + return this.$store.state.route.name; + }, + sideMenuItems() { + return getSidebarItems(this.accountId); + }, + shouldShowConversationsSideMenu() { + return this.sideMenuItems.common.routes.includes(this.currentRoute); + }, + shouldShowContactSideMenu() { + return this.sideMenuItems.contacts.routes.includes(this.currentRoute); + }, + shouldShowCampaignSideMenu() { + return this.sideMenuItems.campaigns.routes.includes(this.currentRoute); + }, + shouldShowSettingsSideMenu() { + return this.sideMenuItems.settings.routes.includes(this.currentRoute); + }, + shouldShowReportsSideMenu() { + return this.sideMenuItems.reports.routes.includes(this.currentRoute); + }, + shouldShowNotificationsSideMenu() { + return this.sideMenuItems.notifications.routes.includes( + this.currentRoute + ); + }, + shouldShowTeamsSideMenu() { + return this.shouldShowConversationsSideMenu && this.teams.length; + }, + }, +}; diff --git a/app/javascript/dashboard/routes/dashboard/Dashboard.vue b/app/javascript/dashboard/routes/dashboard/Dashboard.vue index 7bb0bd847..670c93d5d 100644 --- a/app/javascript/dashboard/routes/dashboard/Dashboard.vue +++ b/app/javascript/dashboard/routes/dashboard/Dashboard.vue @@ -33,9 +33,9 @@ export default { return ''; } if (this.isSidebarOpen) { - return 'off-canvas is-open '; + return 'off-canvas position-left is-transition-push is-open'; } - return 'off-canvas position-left is-transition-push is-closed'; + return 'off-canvas is-transition-push is-closed'; }, contentClassName() { if (this.isOnDesktop) { @@ -44,7 +44,7 @@ export default { if (this.isSidebarOpen) { return 'off-canvas-content is-open-left has-transition-push has-position-left'; } - return 'off-canvas-content'; + return 'off-canvas-content has-transition-push'; }, }, mounted() { @@ -71,3 +71,8 @@ export default { }, }; + diff --git a/app/javascript/shared/assets/stylesheets/colors.scss b/app/javascript/shared/assets/stylesheets/colors.scss index ba1b44045..78bfcfcb9 100644 --- a/app/javascript/shared/assets/stylesheets/colors.scss +++ b/app/javascript/shared/assets/stylesheets/colors.scss @@ -2,16 +2,17 @@ --white: #fff; --white-transparent: rgba(255, 255, 255, 0.9); - --w-50: #E3F2FF; - --w-100: #BBDDFF; - --w-200: #8FC9FF; - --w-300: #61B3FF; - --w-400: #3FA3FF; + --w-25: #F5FAFF; + --w-50: #EBF5FF; + --w-100: #C2E1FF; + --w-200: #99CEFF; + --w-300: ##70BAFF; + --w-400: #47A6FF; --w-500: #1F93FF; - --w-600: #2284F0; - --w-700: #2272DC; - --w-800: #2161CA; - --w-900: #1F41AB; + --w-600: #1976CC; + --w-700: #135899; + --w-800: #0C3B66; + --w-900: #061D33; --g-50: #E6F8E6; --g-100: #C4EEC2; @@ -35,16 +36,18 @@ --y-800: #FDAD2A; --y-900: #F9841B; - --s-50: #E7EEFB; - --s-100: #C8D6E6; - --s-200: #ABBACE; - --s-300: #8C9EB6; - --s-400: #7489A4; - --s-500: #5D7592; - --s-600: #506781; - --s-700: #40546B; - --s-800: #314155; - --s-900: #1F2D3D; + --s-25: #F8FAFC; + --s-50: #F1F5F8; + --s-75: #EBF0F5; + --s-100: #E4EBF1; + --s-200: #C9D7E3; + --s-300: #AEC3D5; + --s-400: #93AFC8; + --s-500: #779BBB; + --s-600: #446888; + --s-700: #37546D; + --s-800: #293F51; + --s-900: #1B2836; --b-50: #F8F9FE; --b-100: #F2F3F7; @@ -85,12 +88,12 @@ --color-heading: #1f2d3d; --color-body: #3c4858; - --color-border: #e0e6ed; - --color-border-light: #f0f4f5; - --color-border-dark: #cad0d4; + --color-border: var(--s-75); + --color-border-light: var(--s-50); + --color-border-dark: var(--s-100); - --color-background: #f4f6fb; - --color-background-light: #f9fafc; + --color-background: var(--s-50); + --color-background-light: var(--s-25); // Social and inboxes brand colors --color-facebook-brand: #3b5998; diff --git a/app/javascript/shared/components/FluentIcon/dashboard-icons.json b/app/javascript/shared/components/FluentIcon/dashboard-icons.json index e5e61793e..99627b188 100644 --- a/app/javascript/shared/components/FluentIcon/dashboard-icons.json +++ b/app/javascript/shared/components/FluentIcon/dashboard-icons.json @@ -41,6 +41,7 @@ "headphones-sound-wave-outline": "M3.5 12a8.5 8.5 0 0 1 17 0v2h-2.25a.75.75 0 0 0-.75.75v6.5c0 .414.336.75.75.75H19a3 3 0 0 0 3-3v-7c0-5.523-4.477-10-10-10S2 6.477 2 12v7a3 3 0 0 0 3 3h.75a.75.75 0 0 0 .75-.75v-6.5a.75.75 0 0 0-.75-.75H3.5v-2Zm17 3.5V19a1.5 1.5 0 0 1-1.5 1.5v-5h1.5ZM3.5 19v-3.5H5v5A1.5 1.5 0 0 1 3.5 19Zm9.25-7.25a.75.75 0 0 0-1.5 0v10.5a.75.75 0 0 0 1.5 0v-10.5Zm-4 2.25a.75.75 0 0 1 .75.75v4.5a.75.75 0 0 1-1.5 0v-4.5a.75.75 0 0 1 .75-.75Zm7.25.75a.75.75 0 0 0-1.5 0v4.5a.75.75 0 0 0 1.5 0v-4.5Z", "image-outline": "M17.75 3A3.25 3.25 0 0 1 21 6.25v11.5A3.25 3.25 0 0 1 17.75 21H6.25A3.25 3.25 0 0 1 3 17.75V6.25A3.25 3.25 0 0 1 6.25 3h11.5Zm.58 16.401-5.805-5.686a.75.75 0 0 0-.966-.071l-.084.07-5.807 5.687c.182.064.378.099.582.099h11.5c.203 0 .399-.035.58-.099l-5.805-5.686L18.33 19.4ZM17.75 4.5H6.25A1.75 1.75 0 0 0 4.5 6.25v11.5c0 .208.036.408.103.594l5.823-5.701a2.25 2.25 0 0 1 3.02-.116l.128.116 5.822 5.702c.067-.186.104-.386.104-.595V6.25a1.75 1.75 0 0 0-1.75-1.75Zm-2.498 2a2.252 2.252 0 1 1 0 4.504 2.252 2.252 0 0 1 0-4.504Zm0 1.5a.752.752 0 1 0 0 1.504.752.752 0 0 0 0-1.504Z", "info-outline": "M12 1.999c5.524 0 10.002 4.478 10.002 10.002 0 5.523-4.478 10.001-10.002 10.001-5.524 0-10.002-4.478-10.002-10.001C1.998 6.477 6.476 1.999 12 1.999Zm0 1.5a8.502 8.502 0 1 0 0 17.003A8.502 8.502 0 0 0 12 3.5Zm-.004 7a.75.75 0 0 1 .744.648l.007.102.003 5.502a.75.75 0 0 1-1.493.102l-.007-.101-.003-5.502a.75.75 0 0 1 .75-.75ZM12 7.003a.999.999 0 1 1 0 1.997.999.999 0 0 1 0-1.997Z", + "keyboard-outline": "M19.745 5a2.25 2.25 0 0 1 2.25 2.25v9.505a2.25 2.25 0 0 1-2.25 2.25H4.25A2.25 2.25 0 0 1 2 16.755V7.25A2.25 2.25 0 0 1 4.25 5h15.495Zm0 1.5H4.25a.75.75 0 0 0-.75.75v9.505c0 .414.336.75.75.75h15.495a.75.75 0 0 0 .75-.75V7.25a.75.75 0 0 0-.75-.75Zm-12.995 8h10.5a.75.75 0 0 1 .102 1.493L17.25 16H6.75a.75.75 0 0 1-.102-1.493l.102-.007h10.5-10.5ZM16.5 11a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm-5.995 0a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm-3 0a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm6 0a1 1 0 1 1 0 2 1 1 0 0 1 0-2ZM6 8a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm2.995 0a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm3 0a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm3 0a1 1 0 1 1 0 2 1 1 0 0 1 0-2Zm3 0a1 1 0 1 1 0 2 1 1 0 0 1 0-2Z", "link-outline": "M9.25 7a.75.75 0 0 1 .11 1.492l-.11.008H7a3.5 3.5 0 0 0-.206 6.994L7 15.5h2.25a.75.75 0 0 1 .11 1.492L9.25 17H7a5 5 0 0 1-.25-9.994L7 7h2.25ZM17 7a5 5 0 0 1 .25 9.994L17 17h-2.25a.75.75 0 0 1-.11-1.492l.11-.008H17a3.5 3.5 0 0 0 .206-6.994L17 8.5h-2.25a.75.75 0 0 1-.11-1.492L14.75 7H17ZM7 11.25h10a.75.75 0 0 1 .102 1.493L17 12.75H7a.75.75 0 0 1-.102-1.493L7 11.25h10H7Z", "list-outline": "M2.75 18h12.5a.75.75 0 0 1 .102 1.493l-.102.007H2.75a.75.75 0 0 1-.102-1.494L2.75 18h12.5-12.5Zm0-6.5h18.5a.75.75 0 0 1 .102 1.493L21.25 13H2.75a.75.75 0 0 1-.102-1.493l.102-.007h18.5-18.5Zm0-6.497h15.5a.75.75 0 0 1 .102 1.493l-.102.007H2.75a.75.75 0 0 1-.102-1.493l.102-.007h15.5-15.5Z", "location-outline": "M5.843 4.568a8.707 8.707 0 1 1 12.314 12.314l-1.187 1.174c-.875.858-2.01 1.962-3.406 3.312a2.25 2.25 0 0 1-3.128 0l-3.491-3.396c-.439-.431-.806-.794-1.102-1.09a8.707 8.707 0 0 1 0-12.314Zm11.253 1.06A7.207 7.207 0 1 0 6.904 15.822L8.39 17.29a753.98 753.98 0 0 0 3.088 3 .75.75 0 0 0 1.043 0l3.394-3.3c.47-.461.863-.85 1.18-1.168a7.207 7.207 0 0 0 0-10.192ZM12 7.999a3.002 3.002 0 1 1 0 6.004 3.002 3.002 0 0 1 0-6.003Zm0 1.5a1.501 1.501 0 1 0 0 3.004 1.501 1.501 0 0 0 0-3.003Z", @@ -57,6 +58,7 @@ "people-outline": "M4 13.999 13 14a2 2 0 0 1 1.995 1.85L15 16v1.5C14.999 21 11.284 22 8.5 22c-2.722 0-6.335-.956-6.495-4.27L2 17.5v-1.501c0-1.054.816-1.918 1.85-1.995L4 14ZM15.22 14H20c1.054 0 1.918.816 1.994 1.85L22 16v1c-.001 3.062-2.858 4-5 4a7.16 7.16 0 0 1-2.14-.322c.336-.386.607-.827.802-1.327A6.19 6.19 0 0 0 17 19.5l.267-.006c.985-.043 3.086-.363 3.226-2.289L20.5 17v-1a.501.501 0 0 0-.41-.492L20 15.5h-4.051a2.957 2.957 0 0 0-.595-1.34L15.22 14H20h-4.78ZM4 15.499l-.1.01a.51.51 0 0 0-.254.136.506.506 0 0 0-.136.253l-.01.101V17.5c0 1.009.45 1.722 1.417 2.242.826.445 2.003.714 3.266.753l.317.005.317-.005c1.263-.039 2.439-.308 3.266-.753.906-.488 1.359-1.145 1.412-2.057l.005-.186V16a.501.501 0 0 0-.41-.492L13 15.5l-9-.001ZM8.5 3a4.5 4.5 0 1 1 0 9 4.5 4.5 0 0 1 0-9Zm9 2a3.5 3.5 0 1 1 0 7 3.5 3.5 0 0 1 0-7Zm-9-.5c-1.654 0-3 1.346-3 3s1.346 3 3 3 3-1.346 3-3-1.346-3-3-3Zm9 2c-1.103 0-2 .897-2 2s.897 2 2 2 2-.897 2-2-.897-2-2-2Z", "people-team-outline": "M14.754 10c.966 0 1.75.784 1.75 1.75v4.749a4.501 4.501 0 0 1-9.002 0V11.75c0-.966.783-1.75 1.75-1.75h5.502Zm0 1.5H9.252a.25.25 0 0 0-.25.25v4.749a3.001 3.001 0 0 0 6.002 0V11.75a.25.25 0 0 0-.25-.25ZM3.75 10h3.381a2.738 2.738 0 0 0-.618 1.5H3.75a.25.25 0 0 0-.25.25v3.249a2.501 2.501 0 0 0 3.082 2.433c.085.504.24.985.453 1.432A4.001 4.001 0 0 1 2 14.999V11.75c0-.966.784-1.75 1.75-1.75Zm13.125 0h3.375c.966 0 1.75.784 1.75 1.75V15a4 4 0 0 1-5.03 3.866c.214-.448.369-.929.455-1.433A2.5 2.5 0 0 0 20.5 15v-3.25a.25.25 0 0 0-.25-.25h-2.757a2.738 2.738 0 0 0-.618-1.5ZM12 3a3 3 0 1 1 0 6 3 3 0 0 1 0-6Zm6.5 1a2.5 2.5 0 1 1 0 5 2.5 2.5 0 0 1 0-5Zm-13 0a2.5 2.5 0 1 1 0 5 2.5 2.5 0 0 1 0-5Zm6.5.5a1.5 1.5 0 1 0 0 3 1.5 1.5 0 0 0 0-3Zm6.5 1a1 1 0 1 0 0 2 1 1 0 0 0 0-2Zm-13 0a1 1 0 1 0 0 2 1 1 0 0 0 0-2Z", "person-outline": "M17.754 14a2.249 2.249 0 0 1 2.25 2.249v.575c0 .894-.32 1.76-.902 2.438-1.57 1.834-3.957 2.739-7.102 2.739-3.146 0-5.532-.905-7.098-2.74a3.75 3.75 0 0 1-.898-2.435v-.577a2.249 2.249 0 0 1 2.249-2.25h11.501Zm0 1.5H6.253a.749.749 0 0 0-.75.749v.577c0 .536.192 1.054.54 1.461 1.253 1.468 3.219 2.214 5.957 2.214s4.706-.746 5.962-2.214a2.25 2.25 0 0 0 .541-1.463v-.575a.749.749 0 0 0-.749-.75ZM12 2.004a5 5 0 1 1 0 10 5 5 0 0 1 0-10Zm0 1.5a3.5 3.5 0 1 0 0 7 3.5 3.5 0 0 0 0-7Z", + "power-outline": "M8.204 4.82a.75.75 0 0 1 .634 1.36A7.51 7.51 0 0 0 4.5 12.991c0 4.148 3.358 7.51 7.499 7.51s7.499-3.362 7.499-7.51a7.51 7.51 0 0 0-4.323-6.804.75.75 0 1 1 .637-1.358 9.01 9.01 0 0 1 5.186 8.162c0 4.976-4.029 9.01-9 9.01C7.029 22 3 17.966 3 12.99a9.01 9.01 0 0 1 5.204-8.17ZM12 2.496a.75.75 0 0 1 .743.648l.007.102v7.5a.75.75 0 0 1-1.493.102l-.007-.102v-7.5a.75.75 0 0 1 .75-.75Z", "quote-outline": "M7.5 6a2.5 2.5 0 0 1 2.495 2.336l.005.206c-.01 3.555-1.24 6.614-3.705 9.223a.75.75 0 1 1-1.09-1.03c1.64-1.737 2.66-3.674 3.077-5.859A2.5 2.5 0 1 1 7.5 6Zm9 0a2.5 2.5 0 0 1 2.495 2.336l.005.206c-.01 3.56-1.238 6.614-3.705 9.223a.75.75 0 1 1-1.09-1.03c1.643-1.738 2.662-3.672 3.078-5.859A2.5 2.5 0 1 1 16.5 6Zm-9 1.5a1 1 0 1 0 .993 1.117l.007-.124a1 1 0 0 0-1-.993Zm9 0a1 1 0 1 0 .993 1.117l.007-.124a1 1 0 0 0-1-.993Z", "resize-large-outline": "M6.25 4.5A1.75 1.75 0 0 0 4.5 6.25v1.5a.75.75 0 0 1-1.5 0v-1.5A3.25 3.25 0 0 1 6.25 3h1.5a.75.75 0 0 1 0 1.5h-1.5ZM19.5 6.25a1.75 1.75 0 0 0-1.75-1.75h-1.5a.75.75 0 0 1 0-1.5h1.5A3.25 3.25 0 0 1 21 6.25v1.5a.75.75 0 0 1-1.5 0v-1.5ZM19.5 17.75a1.75 1.75 0 0 1-1.75 1.75h-1.5a.75.75 0 0 0 0 1.5h1.5A3.25 3.25 0 0 0 21 17.75v-1.5a.75.75 0 0 0-1.5 0v1.5ZM4.5 17.75c0 .966.784 1.75 1.75 1.75h1.5a.75.75 0 0 1 0 1.5h-1.5A3.25 3.25 0 0 1 3 17.75v-1.5a.75.75 0 0 1 1.5 0v1.5ZM8.25 6A2.25 2.25 0 0 0 6 8.25v7.5A2.25 2.25 0 0 0 8.25 18h7.5A2.25 2.25 0 0 0 18 15.75v-7.5A2.25 2.25 0 0 0 15.75 6h-7.5ZM7.5 8.25a.75.75 0 0 1 .75-.75h7.5a.75.75 0 0 1 .75.75v7.5a.75.75 0 0 1-.75.75h-7.5a.75.75 0 0 1-.75-.75v-7.5Z", "search-outline": "M10 2.75a7.25 7.25 0 0 1 5.63 11.819l4.9 4.9a.75.75 0 0 1-.976 1.134l-.084-.073-4.901-4.9A7.25 7.25 0 1 1 10 2.75Zm0 1.5a5.75 5.75 0 1 0 0 11.5 5.75 5.75 0 0 0 0-11.5Z", diff --git a/app/javascript/shared/components/ui/dropdown/DropdownDivider.vue b/app/javascript/shared/components/ui/dropdown/DropdownDivider.vue new file mode 100644 index 000000000..3240275d9 --- /dev/null +++ b/app/javascript/shared/components/ui/dropdown/DropdownDivider.vue @@ -0,0 +1,17 @@ + + + diff --git a/app/javascript/shared/components/ui/dropdown/DropdownHeader.vue b/app/javascript/shared/components/ui/dropdown/DropdownHeader.vue new file mode 100644 index 000000000..d96865abd --- /dev/null +++ b/app/javascript/shared/components/ui/dropdown/DropdownHeader.vue @@ -0,0 +1,34 @@ + + + diff --git a/app/javascript/shared/components/ui/dropdown/DropdownItem.vue b/app/javascript/shared/components/ui/dropdown/DropdownItem.vue index 44e1fdfe8..225b67b1d 100644 --- a/app/javascript/shared/components/ui/dropdown/DropdownItem.vue +++ b/app/javascript/shared/components/ui/dropdown/DropdownItem.vue @@ -35,8 +35,12 @@ export default { .button { width: 100%; text-align: left; + color: var(--s-700); white-space: nowrap; display: inline-flex; + padding: var(--space-small); + padding-top: var(--space-small); + padding-bottom: var(--space-small); border-radius: var(--border-radius-normal); &:hover {