diff options
| author | Hazelnoot <acomputerdog@gmail.com> | 2025-05-28 02:04:18 -0400 |
|---|---|---|
| committer | Hazelnoot <acomputerdog@gmail.com> | 2025-06-04 10:46:50 -0400 |
| commit | 4da3f2972830b3de3a1a034f358fa25e24cd97f8 (patch) | |
| tree | e846c4e92eaecbebf2e71c887f01f59aa867b621 /packages/frontend/src/components | |
| parent | implement de-duplication for MkUrlPreview (diff) | |
| download | sharkey-4da3f2972830b3de3a1a034f358fa25e24cd97f8.tar.gz sharkey-4da3f2972830b3de3a1a034f358fa25e24cd97f8.tar.bz2 sharkey-4da3f2972830b3de3a1a034f358fa25e24cd97f8.zip | |
implement SkDateSeparatedList
Diffstat (limited to 'packages/frontend/src/components')
| -rw-r--r-- | packages/frontend/src/components/SkDateSeparatedList.vue | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/packages/frontend/src/components/SkDateSeparatedList.vue b/packages/frontend/src/components/SkDateSeparatedList.vue new file mode 100644 index 0000000000..8c62347c0c --- /dev/null +++ b/packages/frontend/src/components/SkDateSeparatedList.vue @@ -0,0 +1,55 @@ +<!-- +SPDX-FileCopyrightText: hazelnoot and other Sharkey contributors +SPDX-License-Identifier: AGPL-3.0-only +--> + +<template> +<div class="_gaps"> + <template v-for="item in timeline" :key="item.id"> + <slot v-if="item.type === 'item'" :id="item.id" :item="item.data"></slot> + <slot v-else-if="item.type === 'date'" :id="item.id" :prev="item.prev" :prevText="item.prevText" :next="item.next" :nextText="item.nextText" name="date"> + <div :class="$style.dateDivider"> + <span><i class="ti ti-chevron-up"></i> {{ item.nextText }}</span> + <span :class="$style.dateSeparator"></span> + <span>{{ item.prevText }} <i class="ti ti-chevron-down"></i></span> + </div> + </slot> + </template> +</div> +</template> + +<script setup lang="ts" generic="T extends { id: string; createdAt: string; }"> +import { computed } from 'vue'; +import { makeDateSeparatedTimelineComputedRef } from '@/utility/timeline-date-separate'; + +const props = defineProps<{ + items: T[], +}>(); + +const itemsRef = computed(() => props.items); +const timeline = makeDateSeparatedTimelineComputedRef(itemsRef); +</script> + +<style module lang="scss"> +// From room.vue +.dateDivider { + display: flex; + font-size: 85%; + align-items: center; + justify-content: center; + gap: 0.5em; + opacity: 0.75; + border: solid 0.5px var(--MI_THEME-divider); + border-radius: 999px; + width: fit-content; + padding: 0.5em 1em; + margin: 0 auto; +} + +// From room.vue +.dateSeparator { + height: 1em; + width: 1px; + background: var(--MI_THEME-divider); +} +</style> |