0.1.3 • Published 3 years ago

vimport v0.1.3

Weekly downloads
6
License
MIT
Repository
github
Last release
3 years ago

vimport

About the Project

vimport is a set of accessible, unstyled and WAI-ARIA spec-compliant components for Vue 3. You may style your components by writing your own CSS classes or using a framework like Tailwind CSS.

Roadmap

Currently, vimport contains only one component, the tab. However, new components will be added gradually.

The next component we will publish is the tree .

Prerequisites

Before installing our package, you need to complete Vue 3 installation.

Installation

The package can be installed via npm or yarn.

npm

npm i vimport

yarn

yarn add vimport

Usage

Global Registration

The plugin can be used to register all components globally. Your code may look like as follows:

import { createApp } from 'vue';
import Vimport from 'vimport';
import App from './App.vue';

createApp(App).use(Vimport).mount('#app');

Also, you may register the components you will use one by one.

import { createApp } from 'vue';
import { VpTabs, VpTablist, VpTab, VpTabpanels, VpTabpanel } from 'vimport';
import App from './App.vue';

createApp(App)
  .component('VpTabs', VpTabs)
  .component('VpTablist', VpTablist)
  .component('VpTab', VpTab)
  .component('VpTabpanels', VpTabpanels)
  .component('VpTabpanel', VpTabpanel)
  .mount('#app');

Local Registration

Another option is registering the components locally,

import { VpTabs, VpTablist, VpTab, VpTabpanels, VpTabpanel } from 'vimport';

export default {
  components: {
    VpTabs,
    VpTablist,
    VpTab,
    VpTabpanels,
    VpTabpanel,
  },
  // ...
};

Components

Currently, the only component we have implemented is the tab.

Tab

The tab is implemented according to here. All aria-* attributes are managed automatically. We handle following keyboard interactions:

In addition, you can use Vue's keep-alive.

You may construct your tab view using the following 5 "sub-component". Nested tabs are supported.

VpTabs

It is the root of the other 4 tab components. Nested VpTabs components are supported.

Props
PropTypeDefaultDescription
asStringdivThe name of the HTML tag or Vue component the element is rendered as.
modelValueStringrequiredThe name of the selected tab. v-model uses it.
Emits
EmitTypeDescription
update:modelValueStringTriggered when a tab is selected. v-model uses it. The name of the newly selected tab is passed to the listener.
deleteStringTriggered when the user tries to delete a deletable tab. The name of the tab is passed to the listener.

VpTablist

It is the container for VpTab components.

Props
PropTypeDefaultDescription
asStringdivThe name of the HTML tag or Vue component the element is rendered as.
labelStringrequiredThe label which is used by screen readers.
verticalBooleanfalseWhether the orientation of the tablist is vertical or not.
manualBooleanfalseWhether the newly focused tabs should be activated manually (pressing space or enter key) or not.

VpTab

All VpTab components must be inside VpTablist component.

Props
PropTypeDefaultDescription
asStringbuttonThe name of the HTML tag or Vue component the element is rendered as
nameStringrequiredUnique name for the tab.
disabledBooleanfalseWhether the tab is disabled or not.
deletableBooleanfalseWhether the tab is deletable or not. If it is deletable and delete key is pressed, the root VpTabs emits delete event.
Slot props
PropTypeDescription
selectedBooleanWhether the tab is selected or not.
disabledBooleanWhether the tab is disabled or not.
focusedBooleanWhether the tab is focused or not.

VpTabpanels

This must be inside VpTabs component. You may also use Vue's keep-alive.

Props
PropTypeDefaultDescription
keepAliveBooleanfalseWhether the Vue's keep-alive should be used or not.
keepAliveIncludeString, Regex, Arrayinclude parameter of the Vue's keep-alive.
keepAliveExcludeString, Regex, Arrayexclude parameter of the Vue's keep-alive.
keepAliveMaxNumbermax parameter of the Vue's keep-alive.

VpTabpanel

All VpTabpanel components must be inside VpTabpanels component.

Props
PropTypeDefaultDescription
asStringdivThe name of the HTML tag or Vue component the element is rendered as.
nameStringrequiredUnique name for the tabpanel. If the modelValue of the root VpTabs matches with the name, the VpTabpanel is rendered.