pixelon 0.9.3 → 0.9.5
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/dist/components/atoms/lumi/PhoneInput/PhoneInput.d.ts +29 -0
- package/dist/components/atoms/lumi/PhoneInput/index.d.ts +3 -0
- package/dist/components/atoms/lumi/PhoneInput/phone-countries.d.ts +19 -0
- package/dist/components/atoms/lumi/SheetSelect/SheetSelect.d.ts +32 -0
- package/dist/components/atoms/lumi/SheetSelect/index.d.ts +2 -0
- package/dist/components/molecules/chat/StructuredContent/components/LocationField/types.d.ts +2 -0
- package/dist/components/molecules/chat/StructuredContent/components/MapView/types.d.ts +7 -0
- package/dist/components/molecules/chat/StructuredContent/components/ReactiveCrud/types.d.ts +30 -3
- package/dist/components/organisms/lumi/DynamicForm/helpers/sanitizers.d.ts +28 -0
- package/dist/components/organisms/lumi/DynamicForm/types.d.ts +4 -0
- package/dist/components/templates/lumi/Crud/types.d.ts +6 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.esm.js +723 -268
- package/dist/index.js +730 -267
- package/dist/styles.css +1 -1
- package/dist/styles.css.map +1 -1
- package/package.json +1 -1
- package/src/styles/index.scss +2 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { type PhoneCountry } from './phone-countries';
|
|
3
|
+
import './PhoneInput.scss';
|
|
4
|
+
export interface PhoneInputProps {
|
|
5
|
+
/** En internacional: «+573001234567». Vacío si no hay dígitos. */
|
|
6
|
+
value?: string;
|
|
7
|
+
onChange?: (value: string) => void;
|
|
8
|
+
onBlur?: () => void;
|
|
9
|
+
label?: string;
|
|
10
|
+
placeholder?: string;
|
|
11
|
+
disabled?: boolean;
|
|
12
|
+
readOnly?: boolean;
|
|
13
|
+
error?: string;
|
|
14
|
+
/** Lista de países a ofrecer. Por defecto, el catálogo de pixelon. */
|
|
15
|
+
countries?: PhoneCountry[];
|
|
16
|
+
/** ISO2 del país preseleccionado. Por defecto «CO». */
|
|
17
|
+
defaultCountry?: string;
|
|
18
|
+
name?: string;
|
|
19
|
+
id?: string;
|
|
20
|
+
className?: string;
|
|
21
|
+
labels?: {
|
|
22
|
+
/** Título de la hoja. */
|
|
23
|
+
pickCountry?: string;
|
|
24
|
+
searchPlaceholder?: string;
|
|
25
|
+
noResults?: string;
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
export declare const PhoneInput: React.ForwardRefExoticComponent<PhoneInputProps & React.RefAttributes<HTMLInputElement>>;
|
|
29
|
+
export default PhoneInput;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface PhoneCountry {
|
|
2
|
+
/** ISO 3166-1 alfa-2, en mayúsculas: «CO». */
|
|
3
|
+
code: string;
|
|
4
|
+
name: string;
|
|
5
|
+
/** Con el «+»: «+57». */
|
|
6
|
+
dialCode: string;
|
|
7
|
+
/** Cuántos dígitos tiene un celular ahí (sin indicativo). Si no se sabe, hasta 15. */
|
|
8
|
+
digits?: number;
|
|
9
|
+
}
|
|
10
|
+
export declare const PHONE_COUNTRIES: PhoneCountry[];
|
|
11
|
+
export declare const DEFAULT_PHONE_COUNTRY = "CO";
|
|
12
|
+
/** «CO» → 🇨🇴. Dos letras ISO → dos indicadores regionales; cualquier otra cosa, vacío. */
|
|
13
|
+
export declare function flagOf(code: string): string;
|
|
14
|
+
/** Separa un valor en internacional («+573001234567») en su país y sus dígitos locales. Sin «+»,
|
|
15
|
+
* los dígitos son del país por defecto. El indicativo más largo gana («+1» no se come «+507»). */
|
|
16
|
+
export declare function splitPhone(value: string | undefined, countries: PhoneCountry[], defaultCountry: string): {
|
|
17
|
+
country: PhoneCountry;
|
|
18
|
+
digits: string;
|
|
19
|
+
};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import './SheetSelect.scss';
|
|
3
|
+
export interface SheetSelectOption {
|
|
4
|
+
value: string;
|
|
5
|
+
label: string;
|
|
6
|
+
/** Una línea secundaria bajo la etiqueta (p. ej. «Sótanos y parqueaderos de altura limitada»). */
|
|
7
|
+
hint?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface SheetSelectProps {
|
|
10
|
+
value?: string | null;
|
|
11
|
+
onChange?: (value: string) => void;
|
|
12
|
+
onBlur?: () => void;
|
|
13
|
+
options: SheetSelectOption[];
|
|
14
|
+
label?: string;
|
|
15
|
+
placeholder?: string;
|
|
16
|
+
disabled?: boolean;
|
|
17
|
+
readOnly?: boolean;
|
|
18
|
+
error?: string;
|
|
19
|
+
/** Buscador en la hoja. Siempre, salvo que se apague: aunque la lista sea corta, quien sabe lo
|
|
20
|
+
* que busca llega antes escribiendo dos letras que leyendo. */
|
|
21
|
+
searchable?: boolean;
|
|
22
|
+
/** Qué decir cuando no hay opciones (p. ej. no se pudieron cargar). */
|
|
23
|
+
notFoundContent?: string;
|
|
24
|
+
/** Título de la hoja. Por defecto, la etiqueta del campo. */
|
|
25
|
+
sheetTitle?: string;
|
|
26
|
+
searchPlaceholder?: string;
|
|
27
|
+
name?: string;
|
|
28
|
+
id?: string;
|
|
29
|
+
className?: string;
|
|
30
|
+
}
|
|
31
|
+
export declare const SheetSelect: React.ForwardRefExoticComponent<SheetSelectProps & React.RefAttributes<HTMLInputElement>>;
|
|
32
|
+
export default SheetSelect;
|
package/dist/components/molecules/chat/StructuredContent/components/LocationField/types.d.ts
CHANGED
|
@@ -14,6 +14,8 @@ export interface LocationFieldLabels {
|
|
|
14
14
|
unavailable?: string;
|
|
15
15
|
noResults?: string;
|
|
16
16
|
confirmHint?: string;
|
|
17
|
+
/** SPEC-182 — accesibilidad del lápiz que abre el mapa grande para ajustar el punto. */
|
|
18
|
+
editAria?: string;
|
|
17
19
|
}
|
|
18
20
|
export interface LocationFieldProps {
|
|
19
21
|
value?: LocationValue;
|
|
@@ -82,6 +82,13 @@ export interface MapViewProps {
|
|
|
82
82
|
/** Uso INTERNO: la instancia que vive dentro de la capa a pantalla completa. Llena el
|
|
83
83
|
* contenedor, sin bordes ni radio, y no vuelve a ofrecer expandir. */
|
|
84
84
|
fullBleed?: boolean;
|
|
85
|
+
/** SPEC-182 — `false`: el mapa es solo para mirar. No captura el dedo ni la rueda (el gesto
|
|
86
|
+
* pasa a la página), no tiene controles de zoom, el pin no se arrastra y tocarlo no mueve el
|
|
87
|
+
* punto. La instancia a pantalla completa NO hereda esto: ahí se ajusta. Default `true`. */
|
|
88
|
+
interactive?: boolean;
|
|
89
|
+
/** SPEC-182 — qué icono lleva el botón flotante de arriba a la derecha. `edit` (un lápiz)
|
|
90
|
+
* para cuando el mapa pequeño es solo para mirar y el ajuste se hace en grande. */
|
|
91
|
+
expandIcon?: 'expand' | 'edit';
|
|
85
92
|
/** SPEC-025 R7 — milisegundos que tarda un marcador en DESPLAZARSE hasta su nueva posición.
|
|
86
93
|
* Sin esto, salta. Con posiciones que llegan cada pocos segundos, saltar se lee como un
|
|
87
94
|
* punto que parpadea en sitios distintos; desplazarse, como un vehículo que avanza. */
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import type { FieldValidation } from '../ReactiveForm/types';
|
|
2
2
|
import type { FilterFieldConfig, FilterManager } from '../../../../lumi/Filter/types';
|
|
3
|
-
|
|
3
|
+
import type { SanitizeSpec } from '../../../../../organisms/lumi/DynamicForm/helpers/sanitizers';
|
|
4
|
+
export type CrudMolecule = 'INPUT' | 'INPUT_NUMBER' | 'INPUT_CURRENCY' | 'TEXTAREA'
|
|
5
|
+
/** SPEC-184 — celular con su país: selector de bandera + indicativo y los dígitos. El valor es
|
|
6
|
+
* UN string en formato internacional («+573001234567»). `uiProps.defaultCountry` (ISO2, «CO»
|
|
7
|
+
* por defecto) y `uiProps.countries` para acotar o cambiar la lista. */
|
|
8
|
+
| 'INPUT_PHONE' | 'SELECT' | 'DATE_INPUT' | 'TIME_INPUT' | 'CHECKBOX' | 'BADGE' | 'FILE'
|
|
4
9
|
/** SPEC-023 — ubicación: un campo con dos vías (mi ubicación / buscar dirección) que produce
|
|
5
10
|
* dirección + coordenadas. Requiere `bind` para saber a qué claves van los tres valores. */
|
|
6
11
|
| 'LOCATION'
|
|
@@ -65,6 +70,21 @@ export interface ReactiveCrudField {
|
|
|
65
70
|
optionsEndpoint?: CrudFieldOptionsEndpoint;
|
|
66
71
|
/** SPEC-174 (solo SELECT): deja escribir para filtrar. Para listas largas (municipios). */
|
|
67
72
|
searchable?: boolean;
|
|
73
|
+
/** SPEC-185 (solo SELECT): `sheet` elige en una hoja desde abajo (buscador con listas largas,
|
|
74
|
+
* filas cómodas de tocar), en vez del desplegable pegado al campo. Lo que conviene en el
|
|
75
|
+
* teléfono; en escritorio la hoja sale centrada. */
|
|
76
|
+
picker?: 'sheet' | 'dropdown';
|
|
77
|
+
/** SPEC-181 — el campo se pinta solo cuando OTRO campo del formulario vale lo que se dice:
|
|
78
|
+
* la planta del parqueadero solo tiene sentido si la situación es «en un parqueadero». Misma
|
|
79
|
+
* forma que en las acciones (una condición o varias unidas por «y»), y como todo en esta
|
|
80
|
+
* firma, dato y no función: viaja en JSON desde el chat. Un campo obligatorio que no se pinta
|
|
81
|
+
* no bloquea el envío. */
|
|
82
|
+
visibleWhen?: RowActionVisibleWhen | RowActionVisibleWhen[];
|
|
83
|
+
/** SPEC-183 — limpieza declarativa del texto, por nombre: `{ preset: 'plate' }` deja la placa
|
|
84
|
+
* en mayúsculas y sin separadores mientras se escribe; `{ preset: 'phone' }` y `{ preset: 'id' }`
|
|
85
|
+
* dejan solo dígitos; o reglas sueltas (`['digits', { maxLength: 10 }]`). La validación (pattern)
|
|
86
|
+
* se evalúa sobre el texto ya limpio, así que puede ser estricta. */
|
|
87
|
+
sanitize?: SanitizeSpec;
|
|
68
88
|
validation?: FieldValidation;
|
|
69
89
|
/** Clave del registro de formatters (§8) — NO función inline. */
|
|
70
90
|
format?: string;
|
|
@@ -252,9 +272,16 @@ export interface ReactiveCrudConfig {
|
|
|
252
272
|
layout?: 'auto' | 'table' | 'cards';
|
|
253
273
|
/** SPEC-093 — ancho (px) por debajo del cual `auto` pinta tarjetas. 768 por defecto. */
|
|
254
274
|
cardsBelow?: number;
|
|
255
|
-
/** SPEC-087 — cuenta atrás en el panel de un registro. Ver `DeadlineConfig`.
|
|
256
|
-
|
|
275
|
+
/** SPEC-087 — cuenta atrás en el panel de un registro. Ver `DeadlineConfig`.
|
|
276
|
+
* SPEC-187 — o VARIAS: se pinta la primera cuyo campo trae valor. Un módulo puede tener más
|
|
277
|
+
* de un plazo (el de la solicitud, el del comprobante) y nunca corren a la vez. */
|
|
278
|
+
deadline?: DeadlineConfig | DeadlineConfig[];
|
|
257
279
|
}
|
|
280
|
+
/** SPEC-187 — de los plazos configurados, el que corre en esta fila (el primero con valor). */
|
|
281
|
+
export declare function plazoVigente(deadline: DeadlineConfig | DeadlineConfig[] | undefined, row: Record<string, unknown> | null | undefined): {
|
|
282
|
+
config: DeadlineConfig;
|
|
283
|
+
at: string;
|
|
284
|
+
} | null;
|
|
258
285
|
/** SPEC-087 — fecha límite de un registro, pintada como cuenta atrás junto a sus acciones.
|
|
259
286
|
*
|
|
260
287
|
* Es deliberadamente genérico: dice «esta tarjeta tiene una fecha límite», no de qué es el plazo.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export type SanitizeRule =
|
|
2
|
+
/** Quita espacios de los extremos. Solo al enviar. */
|
|
3
|
+
'trim' | 'upper' | 'lower'
|
|
4
|
+
/** Deja solo dígitos. */
|
|
5
|
+
| 'digits'
|
|
6
|
+
/** Deja solo letras y dígitos (sin tildes ni símbolos): placas, códigos. */
|
|
7
|
+
| 'alnum'
|
|
8
|
+
/** Quita caracteres de control (los que llegan de un pegado raro). */
|
|
9
|
+
| 'noControl'
|
|
10
|
+
/** Varios espacios seguidos → uno. */
|
|
11
|
+
| 'collapseSpaces' | {
|
|
12
|
+
maxLength: number;
|
|
13
|
+
}
|
|
14
|
+
/** Quita todo lo que case con esta expresión regular (sin banderas; se aplica global). */
|
|
15
|
+
| {
|
|
16
|
+
strip: string;
|
|
17
|
+
}
|
|
18
|
+
/** Una forma conocida: equivale a la lista de reglas de `SANITIZE_PRESETS`. */
|
|
19
|
+
| {
|
|
20
|
+
preset: SanitizePreset;
|
|
21
|
+
};
|
|
22
|
+
export type SanitizePreset = 'plate' | 'phone' | 'id' | 'name' | 'note';
|
|
23
|
+
export type SanitizeSpec = SanitizeRule | SanitizeRule[];
|
|
24
|
+
export declare const SANITIZE_PRESETS: Record<SanitizePreset, SanitizeRule[]>;
|
|
25
|
+
/** Aplica la limpieza. `live: true` es mientras se escribe (no recorta extremos). */
|
|
26
|
+
export declare function sanitize(value: unknown, spec: SanitizeSpec | undefined, options?: {
|
|
27
|
+
live?: boolean;
|
|
28
|
+
}): unknown;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { SanitizeSpec } from './helpers/sanitizers';
|
|
1
2
|
import type { UseFormReturn, Control, FieldValues } from 'react-hook-form';
|
|
2
3
|
/**
|
|
3
4
|
* Tipos de moléculas soportadas por DynamicForm
|
|
@@ -45,6 +46,9 @@ export interface FormFieldConfig {
|
|
|
45
46
|
transformOnReceive?: (value: unknown) => unknown;
|
|
46
47
|
/** Condición para mostrar el campo (dependencia de otros campos) */
|
|
47
48
|
showIf?: (formValues: Record<string, unknown>) => boolean;
|
|
49
|
+
/** SPEC-183 — limpieza declarativa del texto (ver helpers/sanitizers.ts): se aplica mientras se
|
|
50
|
+
* escribe y al enviar. Ej.: `{ preset: 'plate' }`, `['digits', { maxLength: 10 }]`. */
|
|
51
|
+
sanitize?: SanitizeSpec;
|
|
48
52
|
/** Opciones para SELECT, SELECT_MULTI */
|
|
49
53
|
options?: SelectOption[];
|
|
50
54
|
/** Orden de renderizado */
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { FilterFieldConfig, FilterManager } from '../../../molecules/lumi/Filter/types';
|
|
2
|
+
import type { SanitizeSpec } from '../../../organisms/lumi/DynamicForm/helpers/sanitizers';
|
|
2
3
|
/**
|
|
3
4
|
* Configuración de un campo renderizable en tabla y formulario
|
|
4
5
|
*/
|
|
@@ -51,6 +52,11 @@ export interface RenderFieldConfig {
|
|
|
51
52
|
formatValue?: (value: unknown, row: unknown) => React.ReactNode;
|
|
52
53
|
/** Función para parsear el valor antes de submit */
|
|
53
54
|
parseValue?: (value: unknown) => unknown;
|
|
55
|
+
/** SPEC-181 — el campo se pinta solo si la condición se cumple con los valores actuales del
|
|
56
|
+
* formulario. Llega a DynamicForm como su `showIf` de siempre. */
|
|
57
|
+
showIf?: (formValues: Record<string, unknown>) => boolean;
|
|
58
|
+
/** SPEC-183 — limpieza declarativa del texto (DynamicForm `sanitize`). */
|
|
59
|
+
sanitize?: SanitizeSpec;
|
|
54
60
|
/** SPEC-131 T7 — cuántas columnas ocupa el campo en el formulario.
|
|
55
61
|
*
|
|
56
62
|
* En un grid las celdas de una fila comparten altura, así que un campo que se despliega —el de
|
package/dist/index.d.ts
CHANGED
|
@@ -108,3 +108,6 @@ export { setLastFleetSnapshot, getLastFleetSnapshot } from './core/eventBus';
|
|
|
108
108
|
export type { ChatEvents, ChatEventBus, FleetPosition } from './core/eventBus';
|
|
109
109
|
export { ChatConfigProvider, useChatConfig, CHAT_CONFIG_DEFAULTS } from './core/chat';
|
|
110
110
|
export type { ChatConfig } from './core/chat';
|
|
111
|
+
export { sanitize, SANITIZE_PRESETS, type SanitizeRule, type SanitizeSpec, type SanitizePreset, } from './components/organisms/lumi/DynamicForm/helpers/sanitizers';
|
|
112
|
+
export { PhoneInput as LumiPhoneInput, type PhoneInputProps as LumiPhoneInputProps, PHONE_COUNTRIES, DEFAULT_PHONE_COUNTRY, flagOf, splitPhone, type PhoneCountry, } from './components/atoms/lumi/PhoneInput';
|
|
113
|
+
export { SheetSelect as LumiSheetSelect, type SheetSelectProps as LumiSheetSelectProps, type SheetSelectOption as LumiSheetSelectOption, } from './components/atoms/lumi/SheetSelect';
|