VvListbox Component
The VvListbox Component provides a set of props and config module based settings to make a validation ready set of select elements for applications with an extremely DRY implementation of atomic classes.
Import
To import a VvListbox Component installed by the vueventus CLI or vv-update CLI:
// ./src/components/SomeComponent.vue
import VvListbox from './vv/selects/VvListbox.vue'
TIP
CLI installed components pass through VueVentus defaults via component props. Each prop default value can be customized globally by overriding VvConfig defaults in your app ./src/app.vv.ts
file or singularly in a component instance.
Alternatively, you can install the raw library VvListbox Component with:
import { VvListbox } from '@obewds/vueventus'
TIP
Importing raw VueVentus library components will still apply your ./src/app.vv.ts
settings automatically through the Vue provide()
and inject()
pattern. All raw VueVentus library components automatically check for a provided "vv"
keyed object with a ConfigVv type interface.
CLI or Raw?
The main difference between raw library components and CLI installed components, is that you have no control over component defaults with raw library components. This is less flexible than using CLI installed components, because control of component defaults can greatly reduce the number of props a dev has to type for component instances, which reduces app code.
Meanwhile, the control CLI installed components provide through customizable defaults, opens up to a global level (styling management system) control for default component state characteristic values (particularly powerful with color and proportional size characteristics).
Emits: update:modelValue
Emits: update:modelValue
Emit Value Type: Object
The VvListbox Component emits a standard Vue key of update:modelValue
upon input event changes of the component's currently selected data.
TIP
This means when using the VvListbox Component downstream in an end application, you can safely use Vue's v-model
binding to two-way bind a reactive value through your downstream component and into (and back from) the VvListbox Component instance.
Example
<!-- ./src/components/AppListbox.vue -->
<script setup lang="ts">
import { ref } from 'vue'
import { VvListbox } from '@obewds/vueventus'
const someValue = ref('')
</script>
<template>
<VvListbox v-model="someValue" label="Example Listbox:"/>
</template>
Prop: data
Type: Array
as PropType<Array<VvListboxData>>
Default: "[
{
"id": 0,
"display": "Select an option",
"value": "",
"disabled": false
},
{
"id": 1,
"display": "Default Option One",
"value": "one",
"disabled": false
},
{
"id": 2,
"display": "Default Option Two",
"value": "two",
"disabled": false
},
{
"id": 3,
"display": "Default Option Three",
"value": "three",
"disabled": false
},
{
"id": 4,
"display": "Disabled Option Four Example",
"value": "four",
"disabled": true
},
{
"id": 5,
"display": "Default Option Five",
"value": "five",
"disabled": false
}
]"
The VvListbox Component data
prop sets the component instance data that ultimately is displayed to the user for selection from a list of objects with a specific syntax and typing minimum requirements.
Syntax
<script setup lang="ts">
import { ref } from 'vue'
import { VvListbox } from '@obewds/vueventus'
const someValue = ref('')
</script>
<template>
<VvListbox v-model="someValue" label="Example Listbox:"/>
<div>User Selection:</div>
<div>{{ someValue }}</div>
</template>
Result
With Data Syntax
<script setup lang="ts">
import { ref } from 'vue'
import { VvListbox } from '@obewds/vueventus'
import type { VvListboxData } from '@obewds/vueventus'
const someValueTwo = ref('')
const listboxData: VvListboxData[] = [
{
"id": 0,
"display": "Select an option",
"value": "",
"disabled": false
},{
"id": 1,
"display": "Morning",
"value": "am",
"disabled": false
},{
"id": 2,
"display": "Noon",
"value": "noon",
"disabled": true
},{
"id": 3,
"display": "Evening",
"value": "pm",
"disabled": false
},
]
</script>
<template>
<VvListbox v-model="someValueTwo" :data="listboxData" label="Listbox Data Example:"/>
<div>User Selection:</div>
<div>{{ someValue }}</div>
</template>
With Data Result
Prop: debug
Type: Boolean
Default: false
The VvListbox Component debug
prop toggles the debugging state of a component instance. When in debugging mode, each component instance prop value can be viewed through data-vv-listbox-
prefixed HTML attributes.
Syntax
<VvListbox :debug="true"/>
Result
Prop: displayClasses
Type: String
Default: "w-full px-2 py-1 text-left"
More documentation coming Soon!
Prop: displayDisabledClasses
Type: String
Default: "opacity-50"
More documentation coming Soon!
Prop: iconDisabledClasses
Type: String
Default: "mr-3 opacity-25"
More documentation coming Soon!
Prop: iconSelectedClasses
Type: String
Default: "hidden ui-selected:block mr-3"
More documentation coming Soon!
Prop: iconsSizeClasses
Type: String
Default: "w-5 h-5"
More documentation coming Soon!
Prop: label
Type: String
Default: ""
More documentation coming Soon!
Prop: labelClasses
Type: String
Default: "block text-left pb-1"
More documentation coming Soon!
Prop: listboxButtonClasses
Type: String
Default: "w-full flex justify-between items-center gap-3 p-2 mx-auto"
More documentation coming Soon!
Prop: listboxButtonColor
Type: String
Default: "default"
More documentation coming Soon!
Prop: listboxButtonPalette
Type: String
Default: "default"
More documentation coming Soon!
Prop: listboxOptionClasses
Type: String
Default: "w-full flex items-center justify-start px-2 ui-active:hover:cursor-pointer ui-not-active:hover:cursor-not-allowed"
More documentation coming Soon!
Prop: listboxOptionColor
Type: String
Default: "default"
More documentation coming Soon!
Prop: listboxOptionPalette
Type: String
Default: "default"
More documentation coming Soon!
Prop: listboxOptionsClasses
Type: String
Default: "w-full shadow-md"
More documentation coming Soon!
Prop: listboxOptionsWithLabelSpacing
Type: String
Default: "pt-1"
More documentation coming Soon!
Prop: listboxOptionsWithoutLabelSpacing
Type: String
Default: "pt-1"
More documentation coming Soon!
Prop: optionIconParentClasses
Type: String
Default: "w-6"
More documentation coming Soon!
Prop: selectedDisplayClasses
Type: String
Default: "block text-left"
More documentation coming Soon!
Prop: selectedIndex
Type: Number
Default: 0
More documentation coming Soon!
Prop: size
Type: String
Default: "md"
More documentation coming Soon!
Slot: #default
More documentation coming Soon!