diff options
| author | syuilo <Syuilotan@yahoo.co.jp> | 2022-01-04 21:16:41 +0900 |
|---|---|---|
| committer | syuilo <Syuilotan@yahoo.co.jp> | 2022-01-04 21:16:41 +0900 |
| commit | 89053d5747075bc6cc4ba5276167a826887fae08 (patch) | |
| tree | 800d0060ff70c795d2a7613809631867047ec5c6 /packages/client/src/components/form/folder.vue | |
| parent | tweak ui (diff) | |
| download | misskey-89053d5747075bc6cc4ba5276167a826887fae08.tar.gz misskey-89053d5747075bc6cc4ba5276167a826887fae08.tar.bz2 misskey-89053d5747075bc6cc4ba5276167a826887fae08.zip | |
tweak ui
Diffstat (limited to 'packages/client/src/components/form/folder.vue')
| -rw-r--r-- | packages/client/src/components/form/folder.vue | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/packages/client/src/components/form/folder.vue b/packages/client/src/components/form/folder.vue new file mode 100644 index 0000000000..fe12202014 --- /dev/null +++ b/packages/client/src/components/form/folder.vue @@ -0,0 +1,101 @@ +<template> +<div class="dwzlatin" :class="{ opened }"> + <div class="header _button" @click="toggle"> + <span class="icon"><slot name="icon"></slot></span> + <span class="text"><slot name="label"></slot></span> + <span class="right"> + <span class="text"><slot name="suffix"></slot></span> + <i v-if="opened" class="fas fa-angle-up icon"></i> + <i v-else class="fas fa-angle-down icon"></i> + </span> + </div> + <keep-alive> + <div v-if="openedAtLeastOnce" v-show="opened" class="body"> + <MkSpacer :margin-min="14" :margin-max="22"> + <slot></slot> + </MkSpacer> + </div> + </keep-alive> +</div> +</template> + +<script lang="ts" setup> +let opened = $ref(false); +let openedAtLeastOnce = $ref(false); + +const toggle = () => { + opened = !opened; + if (opened) { + openedAtLeastOnce = true; + } +}; +</script> + +<style lang="scss" scoped> +.dwzlatin { + display: block; + + > .header { + display: flex; + align-items: center; + width: 100%; + box-sizing: border-box; + padding: 12px 14px 12px 14px; + background: var(--buttonBg); + border-radius: 6px; + + &:hover { + text-decoration: none; + background: var(--buttonHoverBg); + } + + &.active { + color: var(--accent); + background: var(--buttonHoverBg); + } + + > .icon { + margin-right: 0.75em; + flex-shrink: 0; + text-align: center; + opacity: 0.8; + + &:empty { + display: none; + + & + .text { + padding-left: 4px; + } + } + } + + > .text { + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + padding-right: 12px; + } + + > .right { + margin-left: auto; + opacity: 0.7; + white-space: nowrap; + + > .text:not(:empty) { + margin-right: 0.75em; + } + } + } + + > .body { + background: var(--panel); + border-radius: 0 0 6px 6px; + } + + &.opened { + > .header { + border-radius: 6px 6px 0 0; + } + } +} +</style> |