diff options
| author | Terry Truong <terry06890@gmail.com> | 2022-07-03 20:37:46 +1000 |
|---|---|---|
| committer | Terry Truong <terry06890@gmail.com> | 2022-07-03 23:25:28 +1000 |
| commit | 567a21a8d0498f467f558d9ec1a6db8f1b52c0e6 (patch) | |
| tree | e08d687d05acf648c2a0d877455556dfdef632d8 /src/components/SCollapsible.vue | |
| parent | 89fc34f82956f2410ee7f1d90e03945e10805dda (diff) | |
Add SCollapsible component
Also update info-modal source-info styling
Diffstat (limited to 'src/components/SCollapsible.vue')
| -rw-r--r-- | src/components/SCollapsible.vue | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/src/components/SCollapsible.vue b/src/components/SCollapsible.vue new file mode 100644 index 0000000..4b414fc --- /dev/null +++ b/src/components/SCollapsible.vue @@ -0,0 +1,39 @@ +<template> +<div :style="styles"> + <div class="hover:cursor-pointer" @click="collapsed = !collapsed"> + <slot name="summary" :collapsed="collapsed">(Summary)</slot> + </div> + <div :style="contentStyles" ref="content"> + <slot name="content">(Content)</slot> + </div> +</div> +</template> + +<script lang="ts"> +import {defineComponent, PropType} from 'vue'; + +export default defineComponent({ + data(){ + return { + collapsed: true, + }; + }, + computed: { + styles(): Record<string,string> { + return { + overflow: this.collapsed ? 'hidden' : 'visible', + }; + }, + contentStyles(): Record<string,string> { + return { + overflow: 'hidden', + maxHeight: this.collapsed ? '0' : (this.$refs.content as HTMLDivElement).scrollHeight + 'px', + opacity: this.collapsed ? '0' : '1', + transitionProperty: 'max-height, opacity', + transitionDuration: '300ms', + transitionTimingFunction: 'ease-in-out', + }; + }, + }, +}); +</script> |
