@dropi/ui 0.1.44 → 0.1.45

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dropi/ui",
3
- "version": "0.1.44",
3
+ "version": "0.1.45",
4
4
  "description": "Dropi Design System — Web Components for Angular, React and Vue",
5
5
  "main": "dist/index.cjs.js",
6
6
  "module": "dist/index.js",
package/readme.md CHANGED
@@ -1,22 +1,25 @@
1
- # @dropi/ui
1
+ # @dropi/ui 🚀
2
2
 
3
3
  Librería de Web Components del Design System de Dropi, construida con **Stencil.js v4**.
4
- Genera componentes reutilizables para Angular, React y Vue desde una única base de código.
4
+ Genera componentes de alto rendimiento para **Angular**, **React** y **Next.js** desde una única base de código.
5
5
 
6
- - **Paquete npm:** `@dropi/ui` (v0.1.24)
7
- - **React wrappers:** `@dropi/ui-react` (v0.1.9)
6
+ - **Paquete npm:** [@dropi/ui](https://www.npmjs.com/package/@dropi/ui) (v0.1.44)
7
+ - **React wrappers:** [@dropi/ui-react](https://www.npmjs.com/package/@dropi/ui-react) (v0.1.18)
8
+
9
+ > [!NOTE]
10
+ > Esta es una librería de uso interno y para partners autorizados. La documentación detallada del código fuente reside en nuestro repositorio privado de Bitbucket.
8
11
 
9
12
  ---
10
13
 
11
14
  ## ⚡ Quick Start (Recomendado)
12
15
 
13
- Ejecuta este comando en la raíz de tu proyecto:
16
+ Si estás en un proyecto de React o Angular, la forma más rápida de configurar todo es:
14
17
 
15
18
  ```bash
16
19
  npx @dropi/ui setup
17
20
  ```
18
21
 
19
- Detecta tu framework (Angular, React, Next.js), instala las dependencias correctas e inyecta la configuración automáticamente.
22
+ Este comando detectará tu framework e instalará automáticamente las dependencias y configuraciones necesarias.
20
23
 
21
24
  ---
22
25
 
@@ -141,36 +144,36 @@ onOnInput={(e) => console.log(e.detail)}
141
144
 
142
145
  ## 📋 Soporte para Formularios Nativos
143
146
 
144
- Todos los componentes de entrada (`DropiInput`, `DropiSelect`, `DropiCheckbox`, `DropiSwitch`, `DropiPhoneInput`, `DropiCountrySelector`, `DropiOtpSendCode`) soportan asociación nativa a formularios. Esto permite capturar sus valores usando `new FormData(event.currentTarget)` o a través de la propiedad `elements` del formulario.
147
+ Todos los componentes de entrada (`DropiInput`, `DropiSelect`, `DropiCheckbox`, `DropiSwitch`, `DropiPhoneInput`, `DropiCountrySelector`, `DropiOtpSendCode`) soportan la **asociación nativa a formularios**.
145
148
 
146
- ### Requisitos
147
- 1. El componente debe estar dentro de un tag `<form>`.
148
- 2. Se **debe** proporcionar la prop `name` al componente.
149
+ Esto permite capturar sus valores de forma instantánea usando el estándar del navegador:
149
150
 
150
- ### Ejemplo en React
151
+ ### Ejemplo en React (Estilo FormData)
151
152
  ```tsx
152
153
  const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {
153
154
  e.preventDefault();
154
155
 
155
- // Obtener todos los datos como un objeto
156
+ // Extrae todos los valores automáticamente
156
157
  const formData = new FormData(e.currentTarget);
157
158
  const data = Object.fromEntries(formData.entries());
158
- console.log(data); // { email: "...", country: "CO", ... }
159
-
160
- // Acceso directo por nombre
161
- const { email } = e.currentTarget.elements as any;
162
- console.log(email.value);
159
+
160
+ console.log(data); // { email: "...", country: "CO", phone: "+57..." }
163
161
  };
164
162
 
165
163
  return (
166
164
  <form onSubmit={handleSubmit}>
167
165
  <DropiInput name="email" label="Email" required />
168
166
  <DropiCountrySelector name="country" label="País" />
169
- <DropiButton nativeType="submit" text="Enviar" />
167
+ <DropiPhoneInput name="phone" label="Celular" />
168
+
169
+ <DropiButton nativeType="submit" text="Enviar Registro" />
170
170
  </form>
171
171
  );
172
172
  ```
173
173
 
174
+ > [!IMPORTANT]
175
+ > Para que un componente sea capturado por el formulario, **debe tener la prop `name`** definida.
176
+
174
177
  ---
175
178
 
176
179
  ## Uso en React (Métodos Imperativos)
@@ -807,6 +810,89 @@ const [open, setOpen] = useState(false);
807
810
 
808
811
  ---
809
812
 
813
+ ---
814
+
815
+ ### `<dropi-phone-input>`
816
+
817
+ Input de teléfono con selector de país y sincronización nativa con `dropi-core_front`.
818
+
819
+ **Props**
820
+
821
+ | Prop | Tipo | Default | Descripción |
822
+ |---|---|---|---|
823
+ | `name` | `string` | `''` | Nombre para formularios nativos |
824
+ | `codArea` | `string` | `'57'` | Código de área inicial (sin +) |
825
+ | `ngModelPhone` | `string` | `''` | Valor del teléfono |
826
+ | `phoneNumberPlaceholder` | `string` | `null` | Placeholder del campo numérico |
827
+ | `disabledInput` | `boolean` | `false` | Deshabilita el input |
828
+ | `isValidPhone` | `boolean` | `undefined` | Estado de validación manual |
829
+
830
+ **Eventos**
831
+
832
+ | Evento React | `e.detail` | Cuándo |
833
+ |---|---|---|
834
+ | `onDropiCodChange` | `string` | Cambia el código de área |
835
+ | `onDropiPhoneChange` | `string` | Cambia el número de teléfono |
836
+
837
+ ---
838
+
839
+ ### `<dropi-country-selector>`
840
+
841
+ Selector de países con buscador y flags.
842
+
843
+ **Props**
844
+
845
+ | Prop | Tipo | Default | Descripción |
846
+ |---|---|---|---|
847
+ | `name` | `string` | `''` | Nombre para formularios nativos |
848
+ | `label` | `string` | `''` | Label superior |
849
+ | `placeholder` | `string` | `'Seleccionar'` | Texto por defecto |
850
+ | `currentSelection` | `string` | `''` | Código ISO del país seleccionado (ej. 'CO') |
851
+
852
+ **Eventos**
853
+
854
+ | Evento React | `e.detail` | Cuándo |
855
+ |---|---|---|
856
+ | `onDropiChangeSelect` | `CountryItem` | Se selecciona un país |
857
+
858
+ ---
859
+
860
+ ### `<dropi-otp-send-code>`
861
+
862
+ Campo de validación OTP (Código de seguridad).
863
+
864
+ **Props**
865
+
866
+ | Prop | Tipo | Default | Descripción |
867
+ |---|---|---|---|
868
+ | `name` | `string` | `''` | Nombre para formularios nativos |
869
+ | `digitsCount` | `number` | `6` | Cantidad de dígitos |
870
+ | `engine` | `'email' \| 'phone'` | `'email'` | Ícono y texto descriptivo |
871
+ | `labelContact` | `string` | `''` | Correo o Teléfono al que se envió |
872
+
873
+ **Eventos**
874
+
875
+ | Evento React | `e.detail` | Cuándo |
876
+ |---|---|---|
877
+ | `onCodeAccepted` | `string` | El código se ha completado |
878
+
879
+ ---
880
+
881
+ ### `<dropi-date-picker>`
882
+
883
+ Selector de fechas individual o por rangos.
884
+
885
+ **Props**
886
+
887
+ | Prop | Tipo | Default | Descripción |
888
+ |---|---|---|---|
889
+ | `name` | `string` | `''` | Nombre para formularios nativos |
890
+ | `label` | `string` | `''` | Label |
891
+ | `isRange` | `boolean` | `false` | Habilita selección de rango |
892
+ | `placeholder` | `string` | `''` | Placeholder |
893
+
894
+ ---
895
+
810
896
  ### `<dropi-toast>`
811
897
 
812
898
  Notificaciones tipo push con animaciones Lottie.
@@ -835,6 +921,103 @@ const Toast = DropiToast as any;
835
921
 
836
922
  ---
837
923
 
924
+ ## 🏛️ Catálogo Completo de Componentes (65)
925
+
926
+ A continuación se listan todos los componentes disponibles en la librería, organizados por su función principal.
927
+
928
+ ### ⌨️ Entradas y Formularios
929
+ | Componente | Función |
930
+ |---|---|
931
+ | `<dropi-input>` | Campo de texto versátil con validación |
932
+ | `<dropi-select>` | Selector avanzado (búsqueda, flags, multiselect) |
933
+ | `<dropi-text-area>` | Área de texto con contador |
934
+ | `<dropi-phone-input>` | Input de celular con selector de país |
935
+ | `<dropi-country-selector>` | Selector global de países |
936
+ | `<dropi-checkbox>` | Checkbox estilizado |
937
+ | `<dropi-switch>` | Interruptor On/Off |
938
+ | `<dropi-radio-button>` | Opción de selección única |
939
+ | `<dropi-otp-send-code>` | Campo de validación de código OTP |
940
+ | `<dropi-date-picker>` | Selector de fecha individual |
941
+ | `<dropi-date-picker-range>` | Selector de rangos de fecha |
942
+ | `<dropi-color-picker>` | Selector de colores |
943
+ | `<dropi-city-selector>` | Selector de ciudades por departamentos |
944
+ | `<dropi-file-upload>` | Zona de carga de archivos |
945
+ | `<dropi-checkbox-selection-list>` | Lista larga de checkboxes con buscador |
946
+ | `<dropi-radio-selection-list>` | Lista larga de radio buttons con buscador |
947
+ | `<dropi-search>` | Barra de búsqueda especializada |
948
+
949
+ ### 📊 Visualización de Datos y Status
950
+ | Componente | Función |
951
+ |---|---|
952
+ | `<dropi-table>` | Tabla de datos profesional (sort, filter, paginador) |
953
+ | `<dropi-badge>` | Estado de cuenta/usuario |
954
+ | `<dropi-badge-legacy>` | Badges de contador y estados legacy |
955
+ | `<dropi-tag>` | Etiquetas de colores y semánticas |
956
+ | `<dropi-tag-type-product>` | Tags específicos para tipos de producto |
957
+ | `<dropi-progress-bar>` | Barra de progreso visual |
958
+ | `<dropi-skeleton>` | Placeholder de carga (text, circle, rect) |
959
+ | `<dropi-avatars>` | Foto de perfil o iniciales |
960
+ | `<dropi-icon>` | Renderizador de íconos del sistema |
961
+ | `<dropi-ilustration-icon>` | Ilustraciones de estado White Label |
962
+ | `<dropi-logo>` | Logotipos oficiales de Dropi |
963
+ | `<dropi-chips>` | Etiquetas con opción de cierre |
964
+ | `<dropi-image-miniature>` | Galería de miniaturas de imágenes |
965
+ | `<dropi-country-flags>` | Renderizador de banderas por código |
966
+
967
+ ### 🔔 Feedback y Overlays
968
+ | Componente | Función |
969
+ |---|---|
970
+ | `<dropi-modal>` | Ventana de diálogo base |
971
+ | `<dropi-alert-modal>` | Modal de confirmación con Lottie |
972
+ | `<dropi-toast>` | Notificaciones push flotantes |
973
+ | `<dropi-alert>` | Banner de alerta (inline/flag) |
974
+ | `<dropi-alert-legacy>` | Alerta simple para compatibilidad Angular |
975
+ | `<dropi-drawer>` | Panel lateral deslizable |
976
+ | `<dropi-tooltip>` | Burbuja de información (hover) |
977
+ | `<dropi-tooltip-v2>` | Tooltip mejorado con posiciones avanzadas |
978
+ | `<dropi-empty-state>` | Pantalla "Sin resultados" con acciones |
979
+ | `<dropi-banner-external>` | Banner publicitario/informativo externo |
980
+ | `<dropi-lottie-loader>` | Cargador animado Lottie genérico |
981
+
982
+ ### 🗺️ Navegación y Estructura
983
+ | Componente | Función |
984
+ |---|---|
985
+ | `<dropi-navbar>` | Barra de navegación superior |
986
+ | `<dropi-sidebar>` | Menú lateral de navegación |
987
+ | `<dropi-tabs>` | Sistema de pestañas con contadores |
988
+ | `<dropi-breadcrumb>` | Migas de pan para navegación |
989
+ | `<dropi-paginator>` | Control de páginas para listas |
990
+ | `<dropi-steps>` | Indicador de pasos horizontal |
991
+ | `<dropi-vertical-steps>` | Indicador de pasos vertical |
992
+ | `<dropi-simple-stepper>` | Stepper simplificado para flujos rápidos |
993
+ | `<dropi-accordion>` | Acordeón simple |
994
+ | `<dropi-accordion-item>` | Item individual de acordeón |
995
+
996
+ ### 🎥 Multimedia y Otros
997
+ | Componente | Función |
998
+ |---|---|
999
+ | `<dropi-media-player>` | Reproductor de Audio/Video personalizado |
1000
+ | `<dropi-youtube-lazy-video>` | Carga diferida de videos de YT |
1001
+ | `<dropi-image-overlay>` | Visualizador de imagen a pantalla completa |
1002
+ | `<dropi-read-more>` | Truncado de texto con "Ver más" |
1003
+ | `<dropi-time-line>` | Línea de tiempo de eventos/tracking |
1004
+ | `<dropi-file-upload-progress-bar>` | Barra de progreso individual por archivo |
1005
+ | `<dropi-carousel>` | Carrusel de imágenes/contenido |
1006
+
1007
+ ---
1008
+
1009
+ ## 🤖 AI Skills & Automation
1010
+
1011
+ Esta librería está diseñada para ser mantenida por IAs (Claude Code, Cursor, Windsurf).
1012
+
1013
+ ## Skills Universales (Compatibles con Claude, Cursor, Windsurf)
1014
+
1015
+ Todos los skills han sido estandarizados en la carpeta `/skills`.
1016
+ - `/install-dropi-ui` — `skills/install-dropi-ui/skill.md`
1017
+ - `/update-context` — `skills/update-context/skill.md`
1018
+
1019
+ ---
1020
+
838
1021
  ## Build (desarrollo)
839
1022
 
840
1023
  ```bash
@@ -0,0 +1,37 @@
1
+ ---
2
+ name: update-context
3
+ description: Instrucciones universales para actualizar el contexto del proyecto (api.md, resumen.md, arquitectura.md)
4
+ ---
5
+
6
+ # Universal Skill: /update-context
7
+
8
+ Este archivo es la fuente de verdad para que cualquier IA (Claude, Cursor, Windsurf, Copilot) mantenga la documentación del proyecto al día.
9
+
10
+ ## 📜 Objetivo
11
+ Mantener los archivos en la carpeta `context/` sincronizados con el código real, especialmente tras cambios masivos o nuevas funcionalidades (como la de 65 componentes y Formularios Nativos).
12
+
13
+ ## 🛠️ Procedimiento Obligatorio
14
+
15
+ 1. **Analizar cambios recientes**:
16
+ - `git log -n 10 --oneline` (Ver qué se hizo)
17
+ - `git diff HEAD~5 --name-only` (Ver qué archivos cambiaron)
18
+
19
+ 2. **Verificar Archivos de Contexto**:
20
+ - `context/resumen.md`: Debe contener el historial de hoy.
21
+ - `context/api.md`: Debe listar los componentes actuales (65+).
22
+ - `context/arquitectura.md`: Debe reflejar patrones como "Form Associated".
23
+
24
+ 3. **Actualización Absoluta**:
25
+ - Si se detecta un componente nuevo, se DEBE agregar a `api.md`.
26
+ - Si se detecta un patrón nuevo (ej. `ElementInternals`), se DEBE documentar en `arquitectura.md`.
27
+ - La fecha de actualización debe ser `YYYY-MM-DD`.
28
+
29
+ ## 🤖 Guía para IAs (Prompt Injection)
30
+ Cuando el usuario pida "actualiza el contexto" o use el comando `/update-context`, la IA DEBE:
31
+ - Leer este archivo.
32
+ - Realizar los pasos de análisis.
33
+ - Aplicar los `replace_file_content` necesarios.
34
+ - Reportar un resumen de qué archivos de contexto fueron "sincronizados".
35
+
36
+ ---
37
+ *Dropi UI Documentation System — 2026*