aboutsummaryrefslogtreecommitdiff
path: root/src/components/SCollapsible.vue
diff options
context:
space:
mode:
authorTerry Truong <terry06890@gmail.com>2022-07-03 20:37:46 +1000
committerTerry Truong <terry06890@gmail.com>2022-07-03 23:25:28 +1000
commit567a21a8d0498f467f558d9ec1a6db8f1b52c0e6 (patch)
treee08d687d05acf648c2a0d877455556dfdef632d8 /src/components/SCollapsible.vue
parent89fc34f82956f2410ee7f1d90e03945e10805dda (diff)
Add SCollapsible component
Also update info-modal source-info styling
Diffstat (limited to 'src/components/SCollapsible.vue')
-rw-r--r--src/components/SCollapsible.vue39
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>