An open API service indexing awesome lists of open source software.

https://github.com/kunukn/vue-collapse

Height Collapsible component for Vue 3+ using CSS transitions
https://github.com/kunukn/vue-collapse

Last synced: about 1 month ago
JSON representation

Height Collapsible component for Vue 3+ using CSS transitions

Awesome Lists containing this project

README

        

# Vue Collapse

Collapsible component with CSS transition for elements with variable and dynamic height.

[![npm version](https://img.shields.io/npm/v/@kunukn/vue-collapse.svg?style=flat-square)](https://www.npmjs.com/package/@kunukn/vue-collapse)
[![npm downloads](https://img.shields.io/npm/dm/@kunukn/vue-collapse.svg?style=flat-square)](https://www.npmjs.com/package/@kunukn/vue-collapse)
[![gzip](https://img.shields.io/bundlephobia/minzip/@kunukn/vue-collapse.svg)](https://bundlephobia.com/result?p=@kunukn/vue-collapse)
[![license](https://img.shields.io/github/license/kunukn/vue-collapse.svg)](https://github.com/kunukn/vue-collapse/blob/master/LICENSE)

vue-collapse

![logo](logo/collapsible.svg 'logo')

# Demo

Codesandbox simple Vue 3

View
Edit

# Tiny library

| name | size | gzip |
| -------------------- | ------- | ------- |
| vue-collapse.css | 0.43 kB | 0.21 kB |
| vue-collapse.js | 2.11 kB | 0.91 kB |
| vue-collapse.umd.cjs | 1.71 kB | 0.86 kB |

# CSS required

:warning: ️You need to add the CSS file.

```js
import '@kunukn/vue-collapse/style' // this imports the vue-collapse.css file.
```

or CDN

```html

```

or manually copy the content from the `vue-collapse.css` file to your app.

To alter the timing, you can use the `transition` prop. Or add custom CSS.

```HTML

[data-vue-collapse-transition] {
transition-duration: 200ms;
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
}

```

## Supported versions

Vue 3

## Install

```bash
npm install @kunukn/vue-collapse
```

## Import

```js
import '@kunukn/vue-collapse/style'
import { VueCollapse } from '@kunukn/vue-collapse'
```

## Attribute options

There are four possible states: `collapsed`, `collapsing`, `expanded`, `expanding`.

Click: to see the attributes

| Attribute | Type | Default | About |
| ------------- | -------- | ------- | --------------------------------------------------- |
| :when | boolean | falsy | should component collapse? |
| :as | string | div | element type to render |
| transition | string | falsy | apply custom CSS transition, see demo example below |
| @collapse() | function | | event emitted with component in this state |
| @collapsing() | function | | event emitted with component in this state |
| @expanded() | function | | event emitted with component in this state |
| @expanding() | function | | event emitted with component in this state |
| @event(state) | function | | event emitted with one of the 4 states |
| @init(state) | function | | component mount event emitted with current state |


## Usage examples

Click: Simple version using ARIA

```vue



{{ display }}



I know the state: {{ state }}. Lorem Ipsum is simply dummy text of the
printing and typesetting industry.



import { VueCollapse } from '@kunukn/vue-collapse'
import { ref } from 'vue'

const isCollapsed = ref(false)
const display = ref('')

const onEvent = (state) => {
display.value = 'event ' + state
}

/* Custom easing */
.vue-collapse[data-vue-collapse-transition] {
transition-duration: 200ms;
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
}

```




# CDN

https://unpkg.com/@kunukn/vue-collapse/

# Supported browsers

Modern browsers that can CSS transition on `grid-template-rows`.

# Design goals

Click: to see design goals

- Minimal in file size
- Let the browser handle the animation using CSS transition
- Minimalistic API
- Flexible - provide your own markup, styling and easing
- Interruptible - can be reversed during movement
- Inert - when collapsed you should tab over the collapsed component
- Availability - from CDN or npm install
- Collapsible on height only