diff --git a/packages/rocketchat-theme/client/imports/components/header.css b/packages/rocketchat-theme/client/imports/components/header.css index 00be50a788b08..c0d1d8523a16e 100644 --- a/packages/rocketchat-theme/client/imports/components/header.css +++ b/packages/rocketchat-theme/client/imports/components/header.css @@ -2,17 +2,14 @@ padding: 0 0.5rem; &__wrap { - z-index: 2; display: flex; - margin: 0 -0.5rem; - - - display: flex; flex: 0 0 auto; + margin: 0 -0.5rem; + padding: var(--header-padding); white-space: nowrap; @@ -34,7 +31,6 @@ &__block { display: flex; - margin: 0 0.5rem; align-items: center; } diff --git a/packages/rocketchat-theme/client/imports/components/modal/directory.css b/packages/rocketchat-theme/client/imports/components/modal/directory.css index bb2b8b6f9ad78..7d3a2a0bf2c6c 100644 --- a/packages/rocketchat-theme/client/imports/components/modal/directory.css +++ b/packages/rocketchat-theme/client/imports/components/modal/directory.css @@ -2,114 +2,147 @@ display: flex; flex-direction: column; - &-header { - display: flex; + padding: 0 1.5rem; + + &-search { + width: 100%; + + & .rc-icon { + width: 0.875rem; + } } + & .rc-header { + padding: 1.25rem 0.5rem 0.75rem; - /* TODO: -plus and -search should be "globals" */ + &__wrap { - &-plus { - width: 36px; - min-width: 36px; - height: 36px; - min-height: 36px; - padding: 0; - } - &-search { - max-width: 260px; - } + padding: 0.75rem 0; - &-selector, - &-search, - &-plus { - margin: 0 0.5rem; - } -} + box-shadow: none; + } -.rc-directory-header .rc-input__wrapper { - padding: 0; + &__block { + font-size: 1.375rem; + } + } } .rc-directory-channel { &-wrapper { display: flex; - align-items: center; - margin: 0 -9px; overflow: hidden; + + align-items: center; } &-avatar { - width: 60px; - height: 60px; - margin: 0 9px; - flex: 0 0 auto; - background-size: contain; + width: 32px; + height: 32px; + padding: 3px; + background-repeat: no-repeat; background-position: center center; + + background-size: contain; } &-info { display: flex; + overflow: hidden; + flex-direction: column; + width: 1%; - flex-grow: 1; white-space: nowrap; - overflow: hidden; + text-overflow: ellipsis; + flex-grow: 1; + + margin: 0 3px; } - &-name { - font-size: 1rem; - font-weight: 500; - white-space: nowrap; + &-name, + &-username { overflow: hidden; + + white-space: nowrap; + text-overflow: ellipsis; + + & .rc-icon { + font-size: 1rem; + } } &-description { - margin-top: 0.625rem; - color: var(--rc-color-primary-light); + overflow: hidden; - text-overflow: ellipsis; + max-width: 200px; - } + margin-top: 0.625rem; + + text-overflow: ellipsis; - &-createdAt { - text-transform: capitalize; + color: var(--rc-color-primary-light); } } .rc-directory-content { + display: flex; overflow-x: auto; + flex-direction: column; flex: 1 1 100%; + height: 100vh; & .js-sort { cursor: pointer; + + &.is-sorting .table-fake-th .rc-icon { + opacity: 1; + } + } + + & .table-fake-th { + &:hover .rc-icon { + opacity: 1; + } + + & .rc-icon { + transition: opacity 0.3s; + + opacity: 0; + + font-size: 1rem; + } } } -.rc-table-td--createdAt, -.rc-table-td--users { +.rc-directory-td--users { + overflow: hidden; + width: 120px; + white-space: nowrap; text-overflow: ellipsis; - overflow: hidden; } -.rc-table-td--users { +.rc-directory-td--users { width: 80px; } @media (width <= 500px) { - .rc-directory-content .rc-table-head { - display: none; + .rc-directory-content { + & th:not(:first-child), + & td:not(:first-child) { + display: none; + } } .rc-directory { diff --git a/packages/rocketchat-theme/client/imports/components/table.css b/packages/rocketchat-theme/client/imports/components/table.css index 3670b60ce6138..edc65dd3f3117 100644 --- a/packages/rocketchat-theme/client/imports/components/table.css +++ b/packages/rocketchat-theme/client/imports/components/table.css @@ -1,38 +1,126 @@ .rc-table { - font-size: 0.875rem; - color: var(--rc-color-primary); width: 100%; + color: var(--rc-color-primary); + + font-size: 0.875rem; + &--fixed { - table-layout:fixed; + table-layout: fixed; } - &-head { - color: var(--rc-color-primary-light); + & tbody { + & tr { + cursor: pointer; - & .rc-icon { - fill: var(--rc-color-primary-light); + &:hover { + background-color: var(--rc-color-primary-lightest); + } } } - &-body .rc-table-tr { - cursor: pointer; + & th, + & td { + vertical-align: middle; - &:hover { - background-color: var(--rc-color-primary-lightest); + &.bold { + font-weight: 600; } } - &-tr { - box-shadow: 0 1px 2px 0 rgba(31, 35, 41, 0.08); - } + & th { + height: 0; - &-td { - padding: 1.25rem 1rem; - vertical-align: middle; + padding-top: 0; + padding-bottom: 0; - &--bold { - font-weight: 600; + white-space: nowrap; + + color: transparent; + + line-height: 0; + + & > .rc-icon { + display: none; } } + + & td { + padding: 0.25rem 0; + + font-size: 0.75rem; + line-height: 1rem; + + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + } +} + +.table-wrapper { + position: relative; + + height: 100%; +} + +.table-content-wrapper { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + + display: flex; + flex-direction: column; +} + +.table-content { + display: flex; + flex-direction: column; + + min-height: 0; + flex-grow: 1; +} + +.table-scroll { + overflow: auto; + + min-height: 0; + + margin-top: 2rem; + + border-top: 1px solid #d8d8d8; + flex-grow: 1; +} + +.table-fake-th { + position: absolute; + display: flex; + top: 0; + + padding: 0.5rem 0; + + text-align: left; + + color: var(--rc-color-primary-light); + + font-size: 0.75rem; + font-weight: 400; + line-height: 1rem; + + & .rc-icon { + fill: var(--rc-color-primary-light); + } +} + +.table-tr-dummy { + height: 1rem; +} + +.table-column-date { + overflow: hidden; + width: 120px; + white-space: nowrap; + text-overflow: ellipsis; + text-transform: capitalize; } diff --git a/packages/rocketchat-theme/client/imports/components/tabs.css b/packages/rocketchat-theme/client/imports/components/tabs.css new file mode 100644 index 0000000000000..1276b8aaae668 --- /dev/null +++ b/packages/rocketchat-theme/client/imports/components/tabs.css @@ -0,0 +1,34 @@ +.tabs { + margin-bottom: 0.5rem; + + border-bottom: 1px solid rgba(216, 216, 216, 0.2); +} + +.tabs-wrapper { + display: flex; + + width: 100%; + + margin: 0 -1rem; +} + +.tab { + margin: 0 1rem; + padding: 1rem 0; + + cursor: pointer; + + transition: all 0.3s; + + color: var(--rc-color-primary-light); + + border-bottom: 1px solid transparent; + + font-size: 0.875rem; + line-height: 1.25rem; + + &.active { + color: var(--rc-color-button-primary); + border-bottom-color: var(--rc-color-button-primary); + } +} diff --git a/packages/rocketchat-theme/client/main.css b/packages/rocketchat-theme/client/main.css index bbe16d044c530..25a3d80b4d9f4 100644 --- a/packages/rocketchat-theme/client/main.css +++ b/packages/rocketchat-theme/client/main.css @@ -49,9 +49,7 @@ @import 'imports/components/emojiPicker.css'; @import 'imports/components/table.css'; @import 'imports/components/file-list.css'; - - - +@import 'imports/components/tabs.css'; /* Modal */ @import 'imports/components/modal/full-modal.css'; diff --git a/packages/rocketchat-ui-master/public/icons.svg b/packages/rocketchat-ui-master/public/icons.svg index 368209622606a..f0299fa6c5ff5 100644 --- a/packages/rocketchat-ui-master/public/icons.svg +++ b/packages/rocketchat-ui-master/public/icons.svg @@ -448,12 +448,8 @@ - - - - - - + + diff --git a/packages/rocketchat-ui/client/components/table.html b/packages/rocketchat-ui/client/components/table.html new file mode 100644 index 0000000000000..a3a18f66acc70 --- /dev/null +++ b/packages/rocketchat-ui/client/components/table.html @@ -0,0 +1,13 @@ + diff --git a/packages/rocketchat-ui/client/components/table.js b/packages/rocketchat-ui/client/components/table.js new file mode 100644 index 0000000000000..63e4f284b83e7 --- /dev/null +++ b/packages/rocketchat-ui/client/components/table.js @@ -0,0 +1,28 @@ +import _ from 'underscore'; + +Template.table.onRendered(function() { + const dummyTr = ''; + this.$('tbody').prepend(dummyTr).append(dummyTr); + + const onResize = this.data.onResize; + if (onResize) { + onResize(); + $(window).on('resize', onResize); + } +}); + +Template.table.events({ + 'click tbody tr'(e, t) { + const onItemClick = t.data.onItemClick; + + return onItemClick && onItemClick(this); + }, + 'scroll .table-scroll': _.debounce((e, t) => { + const onScroll = t.data.onScroll; + + return onScroll && onScroll(e.currentTarget); + }, 300), + 'click .js-sort'(e, t) { + t.data.onSort(e.currentTarget.dataset.sort); + } +}); diff --git a/packages/rocketchat-ui/client/components/tabs.html b/packages/rocketchat-ui/client/components/tabs.html new file mode 100644 index 0000000000000..37ec16ef2270a --- /dev/null +++ b/packages/rocketchat-ui/client/components/tabs.html @@ -0,0 +1,9 @@ + diff --git a/packages/rocketchat-ui/client/components/tabs.js b/packages/rocketchat-ui/client/components/tabs.js new file mode 100644 index 0000000000000..2beb1dcd7312b --- /dev/null +++ b/packages/rocketchat-ui/client/components/tabs.js @@ -0,0 +1,20 @@ +Template.tabs.onCreated(function() { + this.activeTab = new ReactiveVar(this.data.tabs.tabs.find(tab => tab.active).value); +}); + +Template.tabs.events({ + 'click .tab'(e) { + const value = e.currentTarget.dataset.value; + Template.instance().activeTab.set(value); + Template.instance().data.tabs.onChange(value); + } +}); + +Template.tabs.helpers({ + tabs() { + return Template.instance().data.tabs.tabs.filter(tab => tab.condition ? tab.condition() : tab); + }, + isActive(value) { + return Template.instance().activeTab.get() === value; + } +}); diff --git a/packages/rocketchat-ui/client/views/app/directory.html b/packages/rocketchat-ui/client/views/app/directory.html index 106bb30b1f06d..aa50e46dc3b9e 100644 --- a/packages/rocketchat-ui/client/views/app/directory.html +++ b/packages/rocketchat-ui/client/views/app/directory.html @@ -1,11 +1,8 @@