diff options
| author | syuilo <Syuilotan@yahoo.co.jp> | 2022-07-03 23:13:41 +0900 |
|---|---|---|
| committer | syuilo <Syuilotan@yahoo.co.jp> | 2022-07-03 23:13:41 +0900 |
| commit | 1cb847aa8051cef2173ddcc2f642499855457056 (patch) | |
| tree | 8e30ba78e16f44c8572aaf92153de42b642253bb /packages/client/src/ui | |
| parent | fix: streamingテストおそい (#8912) (diff) | |
| download | misskey-1cb847aa8051cef2173ddcc2f642499855457056.tar.gz misskey-1cb847aa8051cef2173ddcc2f642499855457056.tar.bz2 misskey-1cb847aa8051cef2173ddcc2f642499855457056.zip | |
enhance(client): tweak deck
Diffstat (limited to 'packages/client/src/ui')
| -rw-r--r-- | packages/client/src/ui/deck.vue | 110 |
1 files changed, 61 insertions, 49 deletions
diff --git a/packages/client/src/ui/deck.vue b/packages/client/src/ui/deck.vue index 88fc390614..53e76ea14b 100644 --- a/packages/client/src/ui/deck.vue +++ b/packages/client/src/ui/deck.vue @@ -6,31 +6,34 @@ <div class="main"> <XStatusBars class="statusbars"/> - <div class="columnsWrapper"> - <div ref="columnsEl" class="columns" :class="deckStore.reactiveState.columnAlign.value" @contextmenu.self.prevent="onContextmenu"> - <template v-for="ids in layout"> - <!-- sectionを利用しているのは、deck.vue側でcolumnに対してfirst-of-typeを効かせるため --> - <section - v-if="ids.length > 1" - class="folder column" - :style="columns.filter(c => ids.includes(c.id)).some(c => c.flexible) ? { flex: 1, minWidth: '350px' } : { width: Math.max(...columns.filter(c => ids.includes(c.id)).map(c => c.width)) + 'px' }" - > - <DeckColumnCore v-for="id in ids" :ref="id" :key="id" :column="columns.find(c => c.id === id)" :is-stacked="true" @parent-focus="moveFocus(id, $event)"/> - </section> - <DeckColumnCore - v-else - :ref="ids[0]" - :key="ids[0]" - class="column" - :column="columns.find(c => c.id === ids[0])" - :is-stacked="false" - :style="columns.find(c => c.id === ids[0])!.flexible ? { flex: 1, minWidth: '350px' } : { width: columns.find(c => c.id === ids[0])!.width + 'px' }" - @parent-focus="moveFocus(ids[0], $event)" - /> - </template> + <div ref="columnsEl" class="columns" :class="deckStore.reactiveState.columnAlign.value" @contextmenu.self.prevent="onContextmenu"> + <template v-for="ids in layout"> + <!-- sectionを利用しているのは、deck.vue側でcolumnに対してfirst-of-typeを効かせるため --> + <section + v-if="ids.length > 1" + class="folder column" + :style="columns.filter(c => ids.includes(c.id)).some(c => c.flexible) ? { flex: 1, minWidth: '350px' } : { width: Math.max(...columns.filter(c => ids.includes(c.id)).map(c => c.width)) + 'px' }" + > + <DeckColumnCore v-for="id in ids" :ref="id" :key="id" :column="columns.find(c => c.id === id)" :is-stacked="true" @parent-focus="moveFocus(id, $event)"/> + </section> + <DeckColumnCore + v-else + :ref="ids[0]" + :key="ids[0]" + class="column" + :column="columns.find(c => c.id === ids[0])" + :is-stacked="false" + :style="columns.find(c => c.id === ids[0])!.flexible ? { flex: 1, minWidth: '350px' } : { width: columns.find(c => c.id === ids[0])!.width + 'px' }" + @parent-focus="moveFocus(ids[0], $event)" + /> + </template> + <div v-if="layout.length === 0" class="intro _panel"> + <div>{{ i18n.ts._deck.introduction }}</div> + <MkButton primary class="add" @click="addColumn">{{ i18n.ts._deck.addColumn }}</MkButton> + <div>{{ i18n.ts._deck.introduction2 }}</div> </div> <div class="sideMenu"> - <button class="_button button" @click="addColumn"><i class="fas fa-plus"></i></button> + <button v-tooltip="i18n.ts._deck.addColumn" class="_button button" @click="addColumn"><i class="fas fa-plus"></i></button> </div> </div> </div> @@ -67,6 +70,7 @@ import { deckStore, addColumn as addColumnToStore, loadDeck } from './deck/deck- import DeckColumnCore from '@/ui/deck/column-core.vue'; import XSidebar from '@/ui/_common_/sidebar.vue'; import XDrawerMenu from '@/ui/_common_/sidebar-for-mobile.vue'; +import MkButton from '@/components/ui/button.vue'; import { getScrollContainer } from '@/scripts/scroll'; import * as os from '@/os'; import { menuDef } from '@/menu'; @@ -206,47 +210,55 @@ function moveFocus(id: string, direction: 'up' | 'down' | 'left' | 'right') { display: flex; flex-direction: column; - > .columnsWrapper { + > .columns { flex: 1; display: flex; - flex-direction: row; + overflow-x: auto; + overflow-y: clip; - > .columns { - flex: 1; - display: flex; - overflow-x: auto; - overflow-y: clip; + &.center { + > .column:first-of-type { + margin-left: auto; + } - &.center { - > .column:first-of-type { - margin-left: auto; - } + > .column:last-of-type { + margin-right: auto; + } + } - > .column:last-of-type { - margin-right: auto; - } + > .column { + flex-shrink: 0; + border-right: solid var(--deckDividerThickness) var(--deckDivider); + + &:first-of-type { + border-left: solid var(--deckDividerThickness) var(--deckDivider); } - > .column { - flex-shrink: 0; - border-right: solid var(--deckDividerThickness) var(--deckDivider); + &.folder { + display: flex; + flex-direction: column; - &:first-child { - border-left: solid var(--deckDividerThickness) var(--deckDivider); + > *:not(:last-of-type) { + border-bottom: solid var(--deckDividerThickness) var(--deckDivider); } + } + } - &.folder { - display: flex; - flex-direction: column; + > .intro { + padding: 32px; + height: min-content; + text-align: center; + margin: auto; - > *:not(:last-child) { - border-bottom: solid var(--deckDividerThickness) var(--deckDivider); - } - } + > .add { + margin: 1em auto; } } > .sideMenu { + flex-shrink: 0; + margin-right: 0; + margin-left: auto; display: flex; flex-direction: column; justify-content: center; |