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

@luis-angel-martin-dzul/vue-input-styles

v0.0.48

Published

Vue Input Styles es una librería personal diseñada para integrar, de forma sencilla y estandarizada, los tipos de inputs más utilizados según nuestra metodología de trabajo. Su propósito es ofrecer una interfaz más consistente, limpia y reutilizable en to

Downloads

15

Readme

Vue Input Styles

Vue Input Styles es una librería personal diseñada para integrar, de forma sencilla y estandarizada, los tipos de inputs más utilizados según nuestra metodología de trabajo. Su propósito es ofrecer una interfaz más consistente, limpia y reutilizable en todos los proyectos.


📦 Instalación

La instalación se realiza mediante npm utilizando el registro privado de GitHub.


1️⃣ Instalar el paquete

npm i @luis-angel-martin-dzul/vue-input-styles@latest

🚀 Uso básico

Importa la librería en tu archivo principal main.js

import { createApp } from "vue";
import App from "./App.vue";

import "@luis-angel-martin-dzul/vue-input-styles/style.css";            //estilos
import VueInputStyles from "@luis-angel-martin-dzul/vue-input-styles";  //componentes

const app = createApp(App);

app.use(VueInputStyles);

app.mount("#app");

Ahora podrás usar los componentes globalmente en tu proyecto.

🎨 Configuración adicional para TailwindCSS

Para asegurar que las clases dinámicas funcionen correctamente, se debe agregar una safelist en tailwind.config.js Esto es temporal hasta encontrar una solución más óptima.

Ejemplo recomendado:

/** @type {import('tailwindcss').Config} */
module.exports = {
  content: ["./index.html", "./src/**/*.{vue,js,ts,jsx,tsx}"],

  theme: {
    extend: {},
  },

    safelist: [
      /* =============================
      * DISPLAY / LAYOUT
      * ============================= */
      "block",
      "inline-flex",
      "flex",
      "grid",
      "relative",
      "absolute",
      "overflow-auto",
      "overflow-hidden",
      "overflow-x-auto",
      "min-w-full",
      "w-full",
      "h-full",
      "h-min",
      "flex-1",
      "flex-col",
      "flex-row",
      "items-center",
      "items-start",
      "items-end",
      "justify-center",
      "justify-between",
      "gap-1",
      "gap-2",
      "gap-3",
      "gap-6",
      "space-y-1",

      /* =============================
      * GRID
      * ============================= */
      "grid-cols-2",
      "grid-cols-4",

      /* =============================
      * SPACING
      * ============================= */
      "px-2",
      "px-3",
      "px-4",
      "px-2.5",
      "py-1",
      "py-1.5",
      "py-2",
      "py-10",
      "pl-8",
      "pl-10",
      "pr-3",
      "mx-3",
      "mt-0.5",
      "mb-1",

      /* =============================
      * TEXT
      * ============================= */
      "text-xs",
      "text-sm",
      "text-gray-400",
      "text-gray-500",
      "text-gray-600",
      "text-gray-700",
      "text-gray-800",
      "text-white",
      "text-red-800",
      "font-medium",
      "font-semibold",
      "uppercase",
      "truncate",
      "whitespace-nowrap",
      "text-left",
      "text-center",

      /* =============================
      * BACKGROUNDS
      * ============================= */
      "bg-white",
      "bg-gray-50",
      "bg-gray-100",
      "bg-gray-200",
      "bg-gray-300",
      "bg-gray-800",

      "bg-slate-600",
      "bg-slate-700",

      "bg-emerald-600",
      "bg-emerald-700",

      "bg-sky-600",
      "bg-sky-700",

      "bg-rose-600",
      "bg-rose-700",

      "bg-amber-600",
      "bg-amber-700",

      /* =============================
      * BORDERS
      * ============================= */
      "border",
      "border-2",
      "border-gray-200",
      "border-gray-300",
      "border-gray-600",
      "border-gray-700",
      "border-slate-700",
      "border-emerald-700",
      "border-sky-700",
      "border-rose-700",
      "border-amber-700",
      "rounded",
      "rounded-l",
      "rounded-r",
      "rounded-full",

      /* =============================
      * EFFECTS
      * ============================= */
      "shadow",
      "shadow-sm",
      "shadow-md",
      "opacity-60",
      "opacity-90",
      "cursor-pointer",
      "cursor-default",
      "select-none",
      "-translate-y-1/2",

      /* =============================
      * POSITION
      * ============================= */
      "left-0",
      "right-0",
      "left-2",
      "top-1/2",
      "inset-0",
      "z-10",

      /* =============================
      * FORMS
      * ============================= */
      "accent-indigo-600",
      "focus:outline-none",
      "focus:ring-2",
      "focus:ring-indigo-200",
      "disabled:bg-gray-100",
      "disabled:text-gray-600",
      "disabled:opacity-60",
      "disabled:cursor-not-allowed",
      "disabled:pointer-events-none",

      /* =============================
      * HOVER / ENABLED
      * ============================= */
      "hover:bg-gray-50",
      "hover:bg-gray-100",

      "enabled:hover:bg-slate-700",
      "enabled:hover:bg-emerald-700",
      "enabled:hover:bg-sky-700",
      "enabled:hover:bg-rose-700",
      "enabled:hover:bg-amber-700",

      /* =============================
      * ANIMATION
      * ============================= */
      "transition-colors",
      "transition-all",
      "duration-200",
      "duration-300",
      "animate-pulse",

      /* =============================
      * MIX / UTILITIES
      * ============================= */
      "pointer-events-none",
      "mix-blend-overlay",
    ],

  plugins: [],
};

📌 Notas finales

  • La librería se encuentra en desarrollo activo, por lo que pueden añadirse nuevas funciones y mejoras constantemente.
  • Las clases en la safelist deben ajustarse de acuerdo con los estilos utilizados por cada componente dentro del proyecto.
  • Se recomienda mantener la librería actualizada para asegurar compatibilidad y obtener las últimas optimizaciones.

📘 Lista de componentes disponibles

Incluye en el README:

| Componente | Nombre en Vue | Alternativa (kebab-case) | | ----------------- | ----------------------- | ------------------------- | | ButtonStyle | <ButtonStyle /> | <button-style /> | | CheckStyle | <CheckStyle /> | <check-style /> | | ComboBoxStyle | <ComboBoxStyle /> | <combo-box-style /> | | DateTimeStyle | <DateTimeStyle /> | <date-time-style /> | | InputDecimalStyle | <InputDecimalStyle /> | <input-decimal-style /> | | InputStyle | <InputStyle /> | <input-style /> | | SelectStyle | <SelectStyle /> | <select-style /> | | TextAreaStyle | <TextAreaStyle /> | <text-area-style /> | | ToggleStyle | <ToggleStyle /> | <toggle-style /> | | StepperStyle | <StepperStyle /> | <stepper-style /> |

🔘 ButtonStyle — Funcionamiento básico

Es un botón estilizado que permite personalizar rápidamente su apariencia usando cuatro propiedades principales:

Props disponibles

| Propiedad | Tipo | Descripción | | --------- | ------- | ------------------------------------------------------------------------------------------------------------------------------ | | type | String | Define el compartamiento del boton, "button", "submit". (Por defecto: "button") | | class | String | Define el tipo de estilo del botón de forma manual. | | variant | String | Define el tipo de estilo del botón. Ejemplo: "solid" (relleno), "outline", etc. (Por defecto: "solid") | | color | String | Establece el color principal del botón. Ejemplo: "gray", "blue", "red", "green", "yellow". (Por defecto: "gray") | | disabled | Boolean | Desactiva el botón, bloqueando su interacción y aplicando un estilo visual correspondiente. (Por defecto: false) | | delay | String | Tiempo (seg) que estara desactivado el boton, despues de presionar. (Por defecto: 1.5) |

✔️ Ejemplo de uso

<button-style
    type="submit"
    color="gray"
    variant="outline"
    delay="2"
    disabled>
  Boton
</button-style>

☑️ CheckStyle — Funcionamiento básico

Este componente permite seleccionar uno o varios elementos desde una lista, mostrando las opciones en formato de checkboxes.

Props disponibles

| Propiedad | Tipo | Descripción | | ---------- | -------------- | ---------------------------------------------------------------------------------------------------------- | | title | String | Título o etiqueta que se muestra encima del grupo de checkboxes. (Opcional) | | name | String | Nombre del grupo de checkboxes, útil para identificarlo en formularios. | | list | Array | Lista de opciones a mostrar. Cada opción debe ser un objeto. | | grid | String | Clases Tailwind para definir el layout en grid. (Por defecto: "grid grid-cols-4") | | all | Boolean | Muestra una opción adicional para seleccionar/deseleccionar todos los elementos. (Por defecto: false) | | modelValue | Array / String | Puede manejar selección múltiple o simple. (Por defecto: []) | | returnAll | Boolean | Devuelve la lista completa en el v-model en lugar de los valores seleccionados. (Por defecto: false) | | returnType | String | Define qué valor se regresará al seleccionar: "id", "text", "object". (Por defecto: "id") |

✔️ Ejemplo de uso

<check-style
  title="Selecciona los permisos"
  name="permisos"
  :list="[
        { id: 1, text: 'Crear' },
        { id: 2, text: 'Editar' },
        { id: 3, text: 'Eliminar' }
    ]"
  grid="grid grid-cols-3"
  :all="true"
  v-model="selectedPermisos"
  returnType="id"
/>

🔽 ComboBoxStyle — Funcionamiento básico

Es un cuadro de selección con buscador integrado (autocomplete). Permite elegir un elemento de una lista filtrable.

Props disponibles

| Propiedad | Tipo | Descripción | | ----------- | --------------- | -------------------------------------------------------------------------------- | | modelValue | String / Number | Valor vinculado mediante v-model. | | label | String | Etiqueta que aparece sobre el campo. (Por defecto: "") | | placeholder | String | Texto mostrado cuando no hay búsqueda activa. (Por defecto: "Buscar...") | | oEmpty | String | Texto que aparece cuando no hay resultados. (Por defecto: "- Sin registros") | | disabled | Boolean | Desactiva el componente e impide su interacción. (Por defecto: false) | | list | Array | Lista de elementos a mostrar |

✔️ Ejemplo de uso

<combo-box-style
  v-model="productoSeleccionado"
  label="Productos"
  placeholder="Buscar producto..."
  oEmpty="- No hay productos disponibles -"
  :list="productos.map(p => ({ id: p.id, name: p.descripcion }))"
  disabled
  required
/>

🕒 DateTimeStyle — Funcionamiento básico

Es un componente de selección de fecha y/o hora con diferentes modos de uso. Permite configurar el tipo de entrada (solo fecha, solo hora o ambos).

Props disponibles

| Propiedad | Tipo | Descripción | | ----------- | ------- | ---------------------------------------------------------------------------------------------------------- | | modelValue | String | Valor vinculado mediante v-model. Se recibe y devuelve una cadena formateada. | | disabled | Boolean | Desactiva el componente e impide interacción. (Por defecto: false) | | required | Boolean | Marca el botón como asociado a una acción obligatoria. (Por defecto: false) | | mode | String | Define el tipo de selector: "date", "time", "datetime", "datetime2". (Por defecto: "datetime") | | label | String | Etiqueta del campo mostrada sobre el input. (Por defecto: "") | | secondsMode | String | Configura los segundos: "default" (≈01) o "max" (≈59). (Por defecto: "default") |

✔️ Ejemplo de uso

<date-time-style
  v-model="fechaEntrega"
  label="Fecha de entrega"
  mode="datetime"
  secondsMode="max"
  disabled
  required
/>

🔢 InputDecimalStyle — Funcionamiento básico

Es un campo numérico formateado que permite controlar fácilmente la cantidad de decimales, el tamaño máximo.
Ideal para montos, precios, porcentajes y cantidades numéricas.

Props disponibles

| Propiedad | Tipo | Descripción | | ----------- | ------- | ----------------------------------------------------------------------------------------------------------------------- | | modelValue | String | Valor vinculado mediante v-model. Se formatea automáticamente según los decimales configurados. (Por defecto: "") | | label | String | Etiqueta visible sobre el input. (Por defecto: "") | | placeholder | String | Texto guía mostrado dentro del input. (Por defecto: "") | | digits | String | Número de enteros permitidos. (Por defecto: 10) | | decimals | String | Número de decimales permitidos. (Por defecto: 2) | | disabled | Boolean | Desactiva el campo y evita que pueda editarse. (Por defecto: false) | | required | Boolean | Marca el botón como asociado a una acción obligatoria. (Por defecto: false) |

✔️ Ejemplo de uso

<input-decimal-style
  v-model="precio"
  label="Precio del producto"
  placeholder="Introduzca el precio del producto"
  digits="10"
  decimals="2"
  disabled
  required
/>

📝 InputStyle — Funcionamiento básico

Es un campo de texto estándar mejorado, útil para capturar valores simples como nombres, correos, números, palabras clave y más.

Props disponibles

| Propiedad | Tipo | Descripción | | ----------- | ------- | ----------------------------------------------------------------------------------------------------------- | | modelValue | String | Valor vinculado mediante v-model. (Por defecto: "") | | label | String | Texto que aparece como etiqueta del input. (Por defecto: "") | | placeholder | String | Texto guía mostrado dentro del input. (Por defecto: "") | | type | String | Tipo de input HTML. Ejemplos: "text", "number", "email", "password", etc. (Por defecto: "text") | | maxlength | String | Límite máximo de caracteres del input. _(Por defecto: null Sin limites) _ | | disabled | Boolean | Desactiva el campo e impide su edición. (Por defecto: false) | | required | Boolean | Marca el botón como asociado a una acción obligatoria. (Por defecto: false) |

✔️ Ejemplo de uso

<input-style
  v-model="nombre"
  label="Nombre completo"
  type="text"
  placeholder="Ingresa tu nombre"
  maxlength="255"
  disabled
  required
/>

🔽 SelectStyle — Funcionamiento básico

Es un componente de lista desplegable (select) estilizado, diseñado para seleccionar un valor de una lista predefinida.

Props disponibles

| Propiedad | Tipo | Descripción | | ---------- | -------------- | ------------------------------------------------------------------------------------------- | | modelValue | String, Number | Valor seleccionado mediante v-model. | | label | String | Texto mostrado como etiqueta del campo. (Por defecto: "") | | disabled | Boolean | Desactiva el select e impide interacción. (Por defecto: false) | | required | Boolean | Marca el botón como asociado a una acción obligatoria. (Por defecto: false) | | list | Array | Lista de opciones.. (Por defecto: []) | | option | String | Texto que se mostrará como primera opción (placeholder). (Por defecto: "- Seleccione…") | | oEmpty | String | Texto mostrado cuando la lista está vacía. (Por defecto: "- Sin registros") |

✔️ Ejemplo de uso

<select-style
  v-model="categoria"
  label="Categoría"
  :list="[{ id: 1, name: 'Opción A' }, { id: 2, name: 'Opción B' }]"
  option="- Seleccione una categoría -"
  disabled
  required
/>

📝 TextAreaStyle — Funcionamiento básico

Es un campo de texto multilínea estilizado, ideal para comentarios, descripciones o contenido extenso.

Props disponibles

| Propiedad | Tipo | Descripción | | ----------- | ------- | ------------------------------------------------------------------------------------ | | modelValue | String | Valor del texto, enlazado mediante v-model. | | label | String | Texto mostrado como etiqueta del campo. (Por defecto: "") | | note | String | Texto informativo o ayuda que aparece debajo del campo. (Por defecto: "") | | placeholder | String | Texto que se muestra como sugerencia dentro del área de texto. (Por defecto: "") | | disabled | Boolean | Desactiva el campo, impidiendo interacción. (Por defecto: false) | | required | Boolean | Marca el botón como asociado a una acción obligatoria. (Por defecto: false) | | rows | String | Número de filas visibles del textarea. (Por defecto: 3) | | maxlength | String | Número de caracteres para escribir del textarea. (Por defecto: null, Sin limite) |

✔️ Ejemplo de uso

<text-area-style
  v-model="comentarios"
  label="Comentarios"
  note="Máximo 500 caracteres."
  placeholder="Escribe tus comentarios aquí..."
  rows="5"
  maxlength="5"
  disabled
  required
/>

🔁 ToggleStyle — Funcionamiento básico

Es un interruptor (switch) estilizado que permite activar o desactivar una opción booleana.

Props disponibles

| Propiedad | Tipo | Descripción | | ---------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------- | | modelValue | Boolean | Valor del interruptor controlado a través de v-model. (Por defecto: false) | | label | String | Etiqueta descriptiva que acompaña al toggle. (Por defecto: "") | | color | String | Color del interruptor cuando está activado. Opciones: "gray", "green", "blue", "red", "yellow". (Por defecto: "gray") | | shape | String | Define la forma del toggle. Opciones: "round" (bordes circulares) o "square" (bordes rectos). (Por defecto: "round") | | disabled | Boolean | Deshabilita el toggle, evitando interacción y aplicando estilo visual correspondiente. (Por defecto: false) |

✔️ Ejemplo de uso

<toggle-style v-model="activo" label="Estado" color="green" shape="round" />

🚨 AlertStyle — Funcionamiento básico

Permite mostrar notificaciones rápidas y estilizadas mediante un sistema global accesible desde cualquier componente usando:

Existen diferentes tipos de alertas disponibles para mostrar | Tipo | Descripción | | ------- | ----------------------------------------------------------- | | success | Indica una operación realizada correctamente. | | error | Muestra un mensaje cuando ocurre un error o falla. | | warning | Útil para advertencias o acciones que requieren precaución. | | info | Para mostrar información relevante al usuario. | | neutral | Mensaje estándar sin énfasis especial. |

✔️ Ejemplo de uso

this.$alertstyle.success("Mensaje enviado a destinatario", "Completado");

🧭 Stepper — Funcionamiento básico

El Stepper es un componente de navegación por pasos que permite guiar al usuario a través de un proceso secuencial (formularios, flujos de configuración, registros, etc.), mostrando el progreso actual y permitiendo avanzar, retroceder o finalizar.

| Propiedad | Tipo | Descripción | | ----------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------- | | modelValue | Number | Índice del paso actual controlado mediante v-model. (Por defecto: 0) (Requerido) | | steps | Array | Lista de pasos a mostrar. Cada elemento representa un paso del proceso. (Requerido) | | type | String | Define el estilo visual del indicador del paso. Opciones: "circle" o "line". (Por defecto: "circle") | | text | String | Controla la visibilidad del texto del paso. Opciones: "all" (todos), "only" (solo activo), "none" (ninguno). (Por defecto: "all") | | color | String | Color principal del stepper. Opciones: "gray", "green", "blue", "red", "yellow". (Por defecto: "green") | | btnPrevious | String | Texto del botón para retroceder al paso anterior. (Por defecto: "Anterior") | | btnNext | String | Texto del botón para avanzar al siguiente paso. (Por defecto: "Siguiente") | | btnFinish | String | Texto del botón mostrado en el último paso. (Por defecto: "Finalizar") | | button | String | Muestra u oculta los botones de navegación. Valores: "true" o "false". (Por defecto: "true") | | selected | String | Permite cambiar directamente el paso. Valores: "true" o "false". (Por defecto: "false") |

✔️ Ejemplo de uso

<stepper-style
  v-model="currentStep"
  :steps="['Datos', 'Dirección', 'Confirmación']"
  color="green"
  type="circle"
  text="all"
/>

📌 Nota:

El método recibe dos parámetros:

  • Primer parámetro (título): Es el encabezado o título de la alerta.
  • Segundo parámetro (mensaje/descripción opcional): Es el texto secundario que explica qué está ocurriendo.

Última actualización