1 min read

CollapseWidth

CollapseWidth

Renders a transition wrapping the element passed in the default slot and animating it with a width animation.

Props

Name Description Type Default
appear Indicates if the transition must be applied on the initial render of the node. boolean true

Slots

Name Description Bindings
(name - type - description)
default (Required) to add content to the transition None

Examples

The CollapseWidth component is intended to be used as animation to wrap an element with v-if or v-show and animate its width. The animation scales its width from 0 to auto. This transition does not work with components that have horizontal margin, padding, or border. It also depends on the width of the child elements and not the root element.

Basic example using v-if

<template>
  <CollapseWidth>
    <ComponentOrElement v-if="open" />
  </CollapseWidth>
</template>
<script setup>
import { ref } from 'vue'
import CollapseWidth from '@empathyco/x-components/js/components/animations/collapse-width.vue'
const open = ref(false)
</script>

Usage with v-show

<template>
  <CollapseWidth>
    <ComponentOrElement v-show="open" />
  </CollapseWidth>
</template>
<script setup>
import { ref } from 'vue'
import CollapseWidth from '@empathyco/x-components/js/components/animations/collapse-width.vue'
const open = ref(true)
</script>

Example with dynamic content

<template>
  <div>
    <button @click="open = !open">Toggle</button>
    <CollapseWidth>
      <div v-if="open" style="width: 200px; background: #eee;">Expanded content</div>
      <div v-else style="width: 50px; background: #ccc;">Collapsed content</div>
    </CollapseWidth>
  </div>
</template>
<script setup>
import { ref } from 'vue'
import CollapseWidth from '@empathyco/x-components/js/components/animations/collapse-width.vue'
const open = ref(false)
</script>