@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 +1 -1
- package/readme.md +201 -18
- package/skills/update-context/skill.md +37 -0
package/package.json
CHANGED
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
|
|
4
|
+
Genera componentes de alto rendimiento para **Angular**, **React** y **Next.js** desde una única base de código.
|
|
5
5
|
|
|
6
|
-
- **Paquete npm:**
|
|
7
|
-
- **React wrappers:**
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
147
|
+
Todos los componentes de entrada (`DropiInput`, `DropiSelect`, `DropiCheckbox`, `DropiSwitch`, `DropiPhoneInput`, `DropiCountrySelector`, `DropiOtpSendCode`) soportan la **asociación nativa a formularios**.
|
|
145
148
|
|
|
146
|
-
|
|
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
|
-
//
|
|
156
|
+
// Extrae todos los valores automáticamente
|
|
156
157
|
const formData = new FormData(e.currentTarget);
|
|
157
158
|
const data = Object.fromEntries(formData.entries());
|
|
158
|
-
|
|
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
|
-
<
|
|
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*
|