npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

dracoder-vue-library

v0.15.0

Published

Input tag component

Readme

Vue 3 library components

Available form components

1. BaseInput

Input tag component

Props:

| Prop | Type | Required | Default | Description | |------------------------|------------------|--------------|-------------|--------------------------------------------------------------------------------------------------------------------------------------------------| | id | String | Yes | - | The unique identifier for the input field. | | type | String | No | 'text' | El tipo de input (ex.: text, password, email). | | modelValue | String\|Number | No | '' | Variable value, use as v-model="variable". | | label | String\|null | No | null | Input label. | | display | String\|null | No | null | If the value is null, the label and input are displayed as block. If the value is inline, the label is displayed to the left of the input. | | placeholder | String | No | '' | Input placeholder. | | disabled | Boolean | No | false | Disable input. | | prependIcon | String\|null | No | null | Font awesome icon class to show icon on input's left. | | appendIcon | String\|null | No | null | Font awesome icon class to show icon on input's right. | | validation | Object\|null | No | null | Vuelidate object if needed: (ex.: :validation="v$.name"). | | wrapperClass | String | No | 'col-12' | CSS class for the wrapper element around the input field. | | inputClass | String | No | null | CSS class for the input field itself. | | labelClass | String | No | null | CSS class for the label element. | | validationErrorClass | String | No | null | CSS class for displaying validation errors. |

import {BaseInput} from 'dracoder-vue-library';

<BaseInput
    id="example-text"
    v-model="inputValue"
    label="Example input"
    :validation="v$.inputValue"
    placeholder="Example input"
/>

2. BaseTextarea

Textarea component.

Props:

| Prop | Type | Required | Default | Description | |------------------------|------------------|--------------|-------------|--------------------------------------------------------------------------------------------------------------------------------------------------------| | id | String | Yes | - | The unique identifier for the textarea field. | | modelValue | String\|Number | No | '' | Variable value, use as v-model="variable". | | label | String\|null | No | null | Textarea label. | | display | String\|null | No | null | If the value is null, the label and textarea are displayed as block. If the value is inline, the label is displayed to the left of the textarea. | | placeholder | String | No | '' | Textarea placeholder. | | disabled | Boolean | No | false | Disable textarea. | | icon | String\|null | No | null | Font awesome icon class to show icon on textarea's left. | | internalIcon | String\|null | No | null | Font awesome icon class to show icon on textarea's right. | | validation | Object\|null | No | null | Vuelidate object if needed: (ex.: :validation="v$.name"). | | wrapperClass | String | No | 'col-12' | CSS class for the wrapper element around the textarea field. | | inputClass | String | No | null | CSS class for the textarea field itself. | | labelClass | String | No | null | CSS class for the label element. | | validationErrorClass | String | No | null | CSS class for displaying validation errors. |

import {BaseTextarea} from 'dracoder-vue-library';

<BaseTextarea
    id="example-text-area"
    v-model="baseTextAreaValue"
    label="Textarea example"
    placeholder="Text area content example"
    wrapper-class="col-12"
    :validation="v$.baseTextAreaValue"
    rows="5"
/>

3. BaseWysiwygEditor

Rich text component (WYSIWYG).

Props:

| Prop | Type | Required | Default | Description | |------------------------|------------------|--------------|-------------|--------------------------------------------------------------| | id | String | Yes | - | The unique identifier for the textarea field. | | html | String\|Number | No | '' | Variable value, used as v-model="inputValue" | | label | String\|null | No | null | Textarea label. | | placeholder | String | No | '' | Textarea placeholder. | | validation | Object\|null | No | null | Vuelidate object if needed: (ex.: :validation="v$.name"). | | validationErrorClass | String | No | null | CSS class for displaying validation errors. | | disabled | Boolean | No | false | Disable textarea. | | wrapperClass | String | No | 'col-12' | CSS class for the wrapper element around the textarea field. | | labelClass | String | No | null | CSS class for the label element. |

import {BaseWysiwygEditor} from 'dracoder-vue-library';

<BaseWysiwygEditor
    id="description"
    v-model:html="baseWysiwygEditorValue"
    :label="$t('Example wysiwyg editor')"
    :validation="v$.baseWysiwygEditorValue"
/>

4. BaseMultiselect

Select multiple options component.

Props:

| Prop | Type | Required | Default | Description | |------------------------|----------------|--------------|--------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------| | id | String | Yes | - | The unique identifier for the input field. | | modelValue | Array | Yes | '' | Variable value, used as v-model="inputValue" | | label | String\|null | No | null | Input label. | | display | String\|null | No | null | If the value is null, the label and input are displayed as block. If the value is inline, the label is displayed to the left of the input. | | placeholder | String | No | '' | Input placeholder. | | disabled | Boolean | No | false | Disable input. | | icon | String\|null | No | null | Font awesome icon class to show icon on input's left. | | internalIcon | String\|null | No | null | Font awesome icon class to show icon on input's right. | | appendIcon | String\|null | No | null | Font awesome icon class to show icon on input's right. | | validation | Object\|null | No | null | Vuelidate object if needed: (ex.: :validation="v$.name"). | | options | Array | Yes | | Available options array. | | `trackBy` | `String` | Yes | | Key element for search in options. | | optionLabel | String | Yes | `` | Key element for show selected object. | | customFunctionLabel | Function | No | null | Custom function that returns key element for show selected object. | | readonly | Boolean | No | false | Show input as readonly . | | emptyListMessage | String | No | 'No options available' | Message shown if search returns no results. | | validationErrorClass | String | No | null | CSS class for displaying validation errors. | | multiselectClass | String | No | null' | CSS class for input. | | wrapperClass | String | No | 'col-12' | CSS class for the wrapper element around the input field. | | labelClass | String | No | null | CSS class for the label element. |

import {BaseMultiselect} from 'dracoder-vue-library';

const multiselectValue = ref()
const multiselectOptions = [
    {id: 1, fullName: 'John Doe'},
    {id: 2, fullName: 'Jane Doe'},
    {id: 3, fullName: 'John Smith'},
    {id: 4, fullName: 'Jane Smith'},
]

<BaseMultiselect
    id="example-multiselect"
    v-model="multiselectValue"
    label="Example multiselect"
    placeholder="Multiselect option"
    option-label="fullName"
    track-by="id"
    :options="multiselectOptions"
    :validation="v$.multiselectValue"
/>

5. BaseSelector

Single value selector component

Props:

| Prop | Type | Required | Default | Description | |------------------------|------------------------|--------------|--------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------| | id | String | Yes | - | The unique identifier for the input field. | | modelValue | String\|Number\|null | Yes | '' | Variable value, used as v-model="inputValue". | | label | String\|null | No | null | Input label. | | display | String\|null | No | null | If the value is null, the label and input are displayed as block. If the value is inline, the label is displayed to the left of the input. | | placeholder | String | No | '' | Input placeholder. | | disabled | Boolean | No | false | Disable input. | | internalIcon | String\|null | No | null | Font awesome icon class to show icon on input's right. | | appendIcon | String\|null | No | null | Font awesome icon class to show icon on input's right. | | validation | Object\|null | No | null | Vuelidate object if needed: (ex.: :validation="v$.name"). | | options | Array | Yes | | Available options array. | | `trackBy` | `String` | Yes | | Key element for search in options. | | optionLabel | String | Yes | `` | Key element for show selected object. | | customFunctionLabel | Function | No | null | Custom function that returns key element for show selected object. | | readonly | Boolean | No | false | Show input as readonly. | | emptyListMessage | String | No | 'No options available' | Message shown if search returns no results. | | validationErrorClass | String | No | null | CSS class for displaying validation errors. | | multiselectClass | String | No | null' | CSS class for input. | | wrapperClass | String | No | 'col-12' | CSS class for the wrapper element around the input field. | | labelClass | String | No | null | CSS class for the label element. |

import {BaseSelector} from 'dracoder-vue-library';

const selectValue = ref()
const selectOptions = [
    {id: 1, fullName: 'John Doe'},
    {id: 2, fullName: 'Jane Doe'},
    {id: 3, fullName: 'John Smith'},
    {id: 4, fullName: 'Jane Smith'},
]

<BaseSelector
    id="base-selector-example"
    v-model="selectValue"
    label="Base selector example"
    placeholder="Select example"
    option-label="fullName"
    track-by="id"
    :options="selectOptions"
    :validation="v$.selectValue"
    class="w-1/3"
/>

6. BaseSwitch

Checkbox component as switch

Props:

| Prop | Type | Required | Default | Description | |------------------|----------------|--------------|-------------|--------------------------------------------------------------------------------------------------------------------------------------------------| | id | String | Yes | - | The unique identifier for the input field. | | modelValue | Boolean | Yes | '' | Variable value, used as v-model="inputValue". | | label | String\|null | No | null | Input label. | | display | String\|null | No | null | If the value is null, the label and input are displayed as block. If the value is inline, the label is displayed to the left of the input. | | disabled | Boolean | No | false | Disable input. | | enableStatus | Boolean | No | true | Show status label. | | labelChecked | String\|null | No | null | Text label for checked status. | | labelUnchecked | String\|null | No | null | Text label for unchecked status. | | readonly | Boolean | No | false | Show input as readonly. | | labelClass | String | No | null | CSS class for the label element. |

import {BaseSwitch} from 'dracoder-vue-library';

<BaseSwitch
    id="autoSelected"
    v-model="baseSwitchValue"
    :enable-status="true"
    label-checked="Select automatically"
    label-unchecked="Select automatically"
/>

7. BaseInputFile

Upload file component.

Props:

| Prop | Type | Required | Default | Description | |--------------|-------------------------------|--------------|---------------------|-----------------------------------------------------------| | id | String | No | 'base-input-file' | The unique identifier for the input field. | | attachment | Object\|Array\|String\|null | Yes | '' | File variable, used as v-model:attachment="fileValue". | | multiple | Boolean | No | false | Allow multiple files. | | onlyImage | Boolean | No | false | Allow to upload only image. | | validation | Object\|null | No | null | Vuelidate object if needed: (ex.: :validation="v$.name"). |

import {BaseInputFile} from 'dracoder-vue-library';
<label class="font-bold mb-1 text-secondary">{{ $t('Example input file') }}</label>
<base-input-file
    id="sitemap"
    v-model:attachment="baseInputFileValue"
    accept-types=".svg"
    wrapper-class="mt-4 col-12"
    :validation="v$.baseInputFileValue"
>
  <template #label>
    <label class="mb-1 select-none font-bold text-secondary" for="sitemap">
      Example input file
    </label>
    <button type="button" class="ms-2 text-sm underline">
      <i class="fa fa-circle-question me-1"></i>¿Cual debe ser el formato de mi mapa de sitio?
    </button>
  </template>
</base-input-file>

8. BaseImageUploader

Image files uploader components

Props:

| Prop | Type | Required | Default | Description | |---------------------------|------------------------------------|--------------|-----------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------| | id | String | No | 'base-image-uploader' | The unique identifier for the input field. | | newImages | File[]\|File\|ProductImage\|null | Yes | null | Variable value, used as v-model:newImages="inputValue". | | label | String\|null | No | null | Input label. | | readonly | Boolean | No | false | Show input as readonly. | | display | String\|null | No | null | If the value is null, the label and input are displayed as block. If the value is inline, the label is displayed to the left of the input. | | validation | Object\|null | No | null | Vuelidate object if needed: (ex.: :validation="v$.name"). | | multiple | Boolean | No | false | Allow multiple files. | | previewImageParentClass | String | No | 'h-44 w-44 rounded-lg relative' | CSS class for the wrapper of selected images. | | wrapperClass | String | No | 'col-12' | CSS class for the wrapper element around the input field. | | labelClass | String | No | null | CSS class for the label element. | | previewOnly | Boolean | No | false | Allow preview of selected images. |

import {BaseImageUploader} from 'dracoder-vue-library';

<BaseImageUploader
    id="example-image-uploader"
    v-model:image="baseImageUploaderValue"
    :label="$t('Example multiple image uploader')"
    :validation="v$.baseImageUploaderValue"
    :multiple="true"
    wrapper-class="col-12 py-3"
    content-class="min-height-400"
/>

9. BaseAccordion

Accordion component.

Child components: BaseAccordionHeader BaseAccordionContent

import {BaseAccordion, BaseAccordionHeader, BaseAccordionContent} from "dracoder-vue-library";
<label class="font-bold mb-1 text-secondary">{{ $t('Example accordion') }}</label>
<base-accordion id="example-accordion">
  <base-accordion-header
      role="button"
      data-parent="#example-accordion"
  >
    <i class="fa fa-circle text-xs"></i>
    <span class="">{{ $t('Example title accordion') }}</span>
  </base-accordion-header>
  <base-accordion-content>
    <div v-for="a in 3" :key="a">
      <div class="ps-5">
        {{ a }} {{ $t('Example content') }}
      </div>
    </div>
  </base-accordion-content>
</base-accordion>

10. BaseButton

Generic button with loader.

Props:

| Prop | Type | Required | Default | Description | |---------------|----------------|--------------|-------------|---------------------------------------------------------| | type | String | No | 'submit' | Button type value. | | text | String | No | '' | Button text. | | iconClass | String\|null | No | '' | Font awesome icon class for button. | | loading | Boolean | No | false | Show spinner and disable button when boolean is true. | | fullSpinner | Boolean | No | false | Show only spinner and hide text when loading. |

Emits:

  • @click: Trigger when button is clicked.
import {BaseButton} from 'dracoder-vue-library';

<BaseButton
    class="button btn btn-primary "
    text="Execute"
    @click="executeValidation()"
/>

Componentes Tablas


BaseDataTable

Table with paginator and sort functionalities.

Props Table

| Prop Name | Type | Required | Default | Description | |----------------------------|------------------------|--------------|-------------------------|------------------------------------------------------------------------------------------| | header | Array | No | [] | The table headers, including titles and optional classes or sorting properties. | | fields | DatatableFieldItem[] | No | [] | Fields defining how each row of data is displayed, including type, formatter, and props. | | dataItemClass | String | No | '' | CSS class applied to each data row. | | emptyDataMessage | String | No | '' | Message displayed when no data is available. | | endpoint | Function\|null | No | null | Function called to fetch data from an API endpoint. | | showDefaultSearch | Boolean | No | true | Whether to show the default search input. | | customFilters | Object\|null | No | null | Custom filters to apply to the data. For example: {date: '2000-01-01'} | | selectQtyOfResults | Boolean | No | false | Whether to show the dropdown to select the number of results per page. | | disableRouterReplacement| Boolean | No | false | Whether to disable router replacement for query parameters. | | paginated | Boolean | No | true | Indicates if the table data should be paginated. | | showInvalidBody | Boolean | No | false | Whether to show invalid body styling. | | sortOrder | String | No | 'ASC' | The default sort order (ASC or DESC). | | searchPlaceholder | String | No | 'Buscar' | Placeholder text for the search input. | | searchContainerClass | String | No | 'flex flex-grow' | CSS class for the search container. | | defaultOrderBy | String\|null | No | null | The default field to sort by. |

Table interfaces

    type DatatableFieldItem =
    | DatatableFieldItemText
    | DataTableFieldItemDots
    | DatatableFieldItemComponent
    | DatatableFieldItemButton
    | DatatableFieldItemArray
    | DatatableFieldItemCheckbox
    | DatatableFieldItemLink
    
    
    type DatatableFieldItemTypeText = 'text'
    
    interface DatatableFieldItemText {
        type: DatatableFieldItemTypeText
        value: string
        formatter?: Function
        translatable?: boolean
        class?: string
    }
    
    /** DOTS **/
    type DatatableFieldItemTypeDots = 'dots'
    
    interface DatatableFieldItemDotsPropsField {
        label: string
        icon: string
        class?: string
        action: Function
    }
    
    interface DatatableFieldItemDotsProps {
    fields: DatatableFieldItemDotsPropsField[]
    }
    
    interface DataTableFieldItemDots {
        type: DatatableFieldItemTypeDots
        component: Component
        props: DatatableFieldItemDotsProps
        class?: string
    }
    
    /** COMPONENT **/
    type DatatableFieldItemTypeComponent = 'component'
    
    interface DatatableFieldItemComponent {
        type: DatatableFieldItemTypeComponent
        component: Component
        props?: any
        staticProps?: any
        class?: string
    }
    
    /** BUTTON **/
    type DatatableFieldItemTypeButton = 'button'
    
    interface DatatableFieldItemButtonData {
        class?: string
        icon: string
        action: Function
        disabled?: Function
        title?: string
        text?: string
    }
    
    interface DatatableFieldItemButton {
        type: DatatableFieldItemTypeButton
        class?: string
        text?: string
        value: DatatableFieldItemButtonData[]
    }
    
    /** CHECKBOX **/
    type DatatableFieldItemTypeCheckbox = 'checkbox'
    
    interface DatatableFieldItemCheckbox {
        type: DatatableFieldItemTypeCheckbox
        class?: string
        title?: string
        formatter?: Function
        disabled?: Function
        value: string
        action: Function
    }
    
    /** LINK **/
    type DatatableFieldItemTypeLink = 'link'
    
    interface DatatableFieldItemLink {
        type: DatatableFieldItemTypeLink
        class?: string
        title?: string
        path: Function
        value: string
        formatter?: Function
        disabled?: Function
        translatable?: boolean
    }
    
    /** ARRAY **/
    type DatatableFieldItemTypeArray = 'array'
    
    interface DatatableFieldItemArray {
        type: DatatableFieldItemTypeArray
        class?: string
        text?: string
        value: string
        formatter?: Function
    }

Emitted Events

| Event Name | Payload | Description | |---------------------|---------------------|------------------------------------------------------------------------------------| | onEndpointCalled | None | Emitted when the API endpoint is successfully called. | | changeCurrentPage | Number (page) | Emitted when the current page changes in the paginator. |


Slots Documentation

| Slot Name | Description | |----------------------|----------------------------------------------------------------------------------------------------------| | leftActions | Custom content or actions to display on the left side above the table. | | filterActions | Custom filter actions to be displayed next to the default search bar. | | rightActions | Custom content or actions to display on the right side above the table. | | table-row | Slot to customize how each table row is rendered. Props provided: data (array of rows) and search. |

import {BaseDataTable} from 'dracoder-vue-library';

<BaseDataTable
    :endpoint="getMockedData"
    :fields="fields"
    :header="header"
    :show-default-search="false"
    empty-data-message="No se encontraron resultados"
/>

Toasts

useCatchToast(error: Object|string): Show error toast, with message obtained from object or string useSuccessToast(message: string): Show green toast, with message