@arquimedes.co/eureka-forms 3.0.52-test → 3.0.53-new-steps
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/@Types/AvailabilityFormStep.d.ts +48 -0
- package/dist/@Types/AvailabilityFormStep.js +24 -0
- package/dist/@Types/BankAccountFormStep.d.ts +67 -0
- package/dist/@Types/BankAccountFormStep.js +14 -0
- package/dist/@Types/BookingFormStep.d.ts +166 -0
- package/dist/@Types/BookingFormStep.js +44 -0
- package/dist/@Types/CalendarFormStep.d.ts +192 -0
- package/dist/@Types/CalendarFormStep.js +48 -0
- package/dist/@Types/CommunicationChannelFormStep.d.ts +51 -0
- package/dist/@Types/CommunicationChannelFormStep.js +15 -0
- package/dist/@Types/ConsentFormStep.d.ts +36 -0
- package/dist/@Types/ConsentFormStep.js +8 -0
- package/dist/@Types/EntityFormFormStep.d.ts +66 -0
- package/dist/@Types/EntityFormFormStep.js +20 -0
- package/dist/@Types/EventFormStep.d.ts +52 -0
- package/dist/@Types/EventFormStep.js +13 -0
- package/dist/@Types/ExternalReferenceFormStep.d.ts +74 -0
- package/dist/@Types/ExternalReferenceFormStep.js +20 -0
- package/dist/@Types/FormStep.d.ts +7 -2
- package/dist/@Types/FormStep.js +2 -1
- package/dist/@Types/LocationFormStep.d.ts +159 -0
- package/dist/@Types/LocationFormStep.js +46 -0
- package/dist/@Types/NumericFormSteps.d.ts +108 -0
- package/dist/@Types/NumericFormSteps.js +20 -0
- package/dist/@Types/PredefinedSelectorFormStep.d.ts +51 -0
- package/dist/@Types/PredefinedSelectorFormStep.js +39 -0
- package/dist/@Types/StepRef.d.ts +135 -0
- package/dist/@Types/StepRef.js +49 -0
- package/dist/FormSteps/BookingStep/BookingStep.d.ts +17 -0
- package/dist/FormSteps/BookingStep/BookingStep.js +14 -0
- package/dist/FormSteps/BookingStep/MaterialBookingStep/MaterialBookingStep.d.ts +7 -0
- package/dist/FormSteps/BookingStep/MaterialBookingStep/MaterialBookingStep.js +32 -0
- package/dist/FormSteps/CalendarStep/CalendarStep.d.ts +7 -0
- package/dist/FormSteps/CalendarStep/CalendarStep.js +14 -0
- package/dist/FormSteps/CalendarStep/MaterialCalendarStep/MaterialCalendarStep.d.ts +7 -0
- package/dist/FormSteps/CalendarStep/MaterialCalendarStep/MaterialCalendarStep.js +31 -0
- package/dist/FormSteps/LocationStep/LocationStep.d.ts +10 -0
- package/dist/FormSteps/LocationStep/LocationStep.js +14 -0
- package/dist/FormSteps/LocationStep/MaterialLocationStep/MaterialLocationStep.d.ts +3 -0
- package/dist/FormSteps/LocationStep/MaterialLocationStep/MaterialLocationStep.js +47 -0
- package/dist/FormSteps/LocationStep/MaterialLocationStep/MaterialLocationStep.module.css +18 -0
- package/dist/FormSteps/NumberStep/MaterialNumberStep/MaterialNumberStep.d.ts +3 -0
- package/dist/FormSteps/NumberStep/MaterialNumberStep/MaterialNumberStep.js +168 -0
- package/dist/FormSteps/NumberStep/MaterialNumberStep/MaterialNumberStep.module.css +94 -0
- package/dist/FormSteps/NumberStep/NumberStep.d.ts +10 -0
- package/dist/FormSteps/NumberStep/NumberStep.js +14 -0
- package/dist/FormSteps/Step.js +16 -0
- package/dist/FormSteps/StepFunctions.js +14 -0
- package/dist/FormSteps/StepFunctions.test.js +54 -0
- package/dist/Icons/AddIcon.d.ts +3 -0
- package/dist/Icons/AddIcon.js +7 -0
- package/dist/Icons/EditIcon.d.ts +3 -0
- package/dist/Icons/EditIcon.js +7 -0
- package/dist/Icons/RemoveIcon.d.ts +3 -0
- package/dist/Icons/RemoveIcon.js +7 -0
- package/dist/Icons/ViewDayIcon.d.ts +3 -0
- package/dist/Icons/ViewDayIcon.js +7 -0
- package/dist/Icons/ViewWeekIcon.d.ts +3 -0
- package/dist/Icons/ViewWeekIcon.js +7 -0
- package/dist/Shared/ErkAddressAutocomplete/ErkAddressAutocomplete.d.ts +19 -0
- package/dist/Shared/ErkAddressAutocomplete/ErkAddressAutocomplete.js +80 -0
- package/dist/Shared/ErkAddressAutocomplete/ErkAddressAutocomplete.module.css +82 -0
- package/dist/Shared/ErkAddressAutocomplete/googlePlaces.d.ts +29 -0
- package/dist/Shared/ErkAddressAutocomplete/googlePlaces.js +139 -0
- package/dist/Shared/ErkBookingPicker/ErkBookingPicker.d.ts +31 -0
- package/dist/Shared/ErkBookingPicker/ErkBookingPicker.js +223 -0
- package/dist/Shared/ErkBookingPicker/ErkBookingPicker.module.css +608 -0
- package/dist/Shared/ErkBookingPicker/ErkBookingPicker.stories.d.ts +28 -0
- package/dist/Shared/ErkBookingPicker/ErkBookingPicker.stories.js +117 -0
- package/dist/Shared/ErkBookingPicker/ErkBookingPicker.stories.test.d.ts +1 -0
- package/dist/Shared/ErkBookingPicker/ErkBookingPicker.stories.test.js +49 -0
- package/dist/Shared/ErkBookingPicker/ErkBookingPicker.test.d.ts +1 -0
- package/dist/Shared/ErkBookingPicker/ErkBookingPicker.test.js +107 -0
- package/dist/Shared/ErkCalendar/CalendarFunctions.d.ts +28 -0
- package/dist/Shared/ErkCalendar/CalendarFunctions.js +121 -0
- package/dist/Shared/ErkCalendar/CalendarPopovers.d.ts +45 -0
- package/dist/Shared/ErkCalendar/CalendarPopovers.js +110 -0
- package/dist/Shared/ErkCalendar/ErkCalendar.d.ts +73 -0
- package/dist/Shared/ErkCalendar/ErkCalendar.js +293 -0
- package/dist/Shared/ErkCalendar/ErkCalendar.module.css +775 -0
- package/dist/Shared/ErkCalendar/ErkCalendar.test.d.ts +1 -0
- package/dist/Shared/ErkCalendar/ErkCalendar.test.js +171 -0
- package/dist/Shared/ErkDatePicker/ErkDatePicker.js +1 -3
- package/dist/Shared/ErkDateRangePicker/ErkDateRangePicker.d.ts +2 -3
- package/dist/Shared/ErkDateRangePicker/ErkDateRangePicker.js +1 -2
- package/dist/Shared/ErkLocationField/ErkLocationField.d.ts +23 -0
- package/dist/Shared/ErkLocationField/ErkLocationField.js +73 -0
- package/dist/Shared/ErkLocationField/ErkLocationField.module.css +29 -0
- package/dist/Shared/ErkLocationField/addressFields.d.ts +12 -0
- package/dist/Shared/ErkLocationField/addressFields.js +34 -0
- package/dist/Shared/ErkLocationField/locationRestrictions.d.ts +6 -0
- package/dist/Shared/ErkLocationField/locationRestrictions.js +51 -0
- package/dist/Shared/ErkLocationInput/ErkLocationInput.d.ts +15 -0
- package/dist/Shared/ErkLocationInput/ErkLocationInput.js +502 -0
- package/dist/Shared/ErkLocationInput/ErkLocationInput.module.css +115 -0
- package/dist/Shared/ErkNumberField/ErkNumberField.d.ts +42 -0
- package/dist/Shared/ErkNumberField/ErkNumberField.js +170 -0
- package/dist/constants/FormStepTypes.d.ts +5 -1
- package/dist/constants/FormStepTypes.js +4 -0
- package/dist/index.lib.d.ts +4 -2
- package/dist/index.lib.js +3 -1
- package/package.json +2 -1
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DRAFT — ConsentFormStep types
|
|
3
|
+
*
|
|
4
|
+
* Paso de consentimiento / términos y condiciones.
|
|
5
|
+
* El usuario debe aceptar explícitamente para continuar.
|
|
6
|
+
* El contenido puede ser texto enriquecido (EurekaDraft) o un link externo.
|
|
7
|
+
*/
|
|
8
|
+
import { GBaseStep } from './GenericFormSteps';
|
|
9
|
+
import { EurekaDraft } from './Draft/Draft';
|
|
10
|
+
export interface ConsentStep extends GBaseStep {
|
|
11
|
+
type: 'CONSENT';
|
|
12
|
+
/**
|
|
13
|
+
* Texto del checkbox que el usuario marca.
|
|
14
|
+
* Ej: "Acepto los términos y condiciones de uso"
|
|
15
|
+
*/
|
|
16
|
+
label: string;
|
|
17
|
+
required: boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Contenido completo del documento de T&C / política.
|
|
20
|
+
* Se muestra en un modal o área expandible al hacer clic en el link.
|
|
21
|
+
* Si no se define, solo se muestra label + linkUrl.
|
|
22
|
+
*/
|
|
23
|
+
content?: EurekaDraft;
|
|
24
|
+
/**
|
|
25
|
+
* URL externa opcional. Si se define, el link abre esta URL en lugar
|
|
26
|
+
* de mostrar el content inline.
|
|
27
|
+
* Solo uno de content o linkUrl debería estar activo a la vez.
|
|
28
|
+
*/
|
|
29
|
+
linkUrl?: string;
|
|
30
|
+
/**
|
|
31
|
+
* Si true, el checkbox no se puede desmarcar una vez aceptado
|
|
32
|
+
* (útil en flujos donde el consentimiento es permanente en esa sesión).
|
|
33
|
+
*/
|
|
34
|
+
irreversible?: boolean;
|
|
35
|
+
}
|
|
36
|
+
export type ConsentValue = boolean;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DRAFT — EntityFormFormStep types
|
|
3
|
+
*
|
|
4
|
+
* Paso que permite al usuario buscar y/o crear un registro de entidad
|
|
5
|
+
* directamente dentro del formulario, sin salir de él.
|
|
6
|
+
*
|
|
7
|
+
* Modos:
|
|
8
|
+
* SEARCH → solo busca entidades existentes
|
|
9
|
+
* CREATE → solo crea una entidad nueva (muestra sub-campos)
|
|
10
|
+
* SEARCH_OR_CREATE → busca primero; si no encuentra, puede crear
|
|
11
|
+
*/
|
|
12
|
+
import { GBaseStep } from './GenericFormSteps';
|
|
13
|
+
import { ErkIconTypes } from '../constants/ErkIconTypes';
|
|
14
|
+
export declare enum EntityFormMode {
|
|
15
|
+
SEARCH = "SEARCH",
|
|
16
|
+
CREATE = "CREATE",
|
|
17
|
+
SEARCH_OR_CREATE = "SEARCH_OR_CREATE"
|
|
18
|
+
}
|
|
19
|
+
export interface EntityFormStep extends GBaseStep {
|
|
20
|
+
type: 'ENTITY_FORM';
|
|
21
|
+
label: string;
|
|
22
|
+
description: string | null;
|
|
23
|
+
required: boolean;
|
|
24
|
+
/** Id de la entidad de Capta que se va a buscar/crear */
|
|
25
|
+
idEntity: string;
|
|
26
|
+
mode: EntityFormMode;
|
|
27
|
+
/** Icono representativo de la entidad en la UI */
|
|
28
|
+
icon: ErkIconTypes;
|
|
29
|
+
/**
|
|
30
|
+
* Si true (solo para SEARCH y SEARCH_OR_CREATE), se muestra un campo de
|
|
31
|
+
* búsqueda con filtrado por texto.
|
|
32
|
+
*/
|
|
33
|
+
searchable?: boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Ids de los FormSteps que definen los campos del sub-formulario de creación.
|
|
36
|
+
* Solo aplica cuando mode === CREATE o SEARCH_OR_CREATE.
|
|
37
|
+
* Estos steps son "embebidos" — se renderizan inline dentro de este paso.
|
|
38
|
+
*/
|
|
39
|
+
entityFieldSteps?: string[];
|
|
40
|
+
/**
|
|
41
|
+
* Si true, el usuario puede seleccionar más de un registro.
|
|
42
|
+
* El valor pasa de ser un objeto a un array.
|
|
43
|
+
*/
|
|
44
|
+
allowMultiple?: boolean;
|
|
45
|
+
maxSize?: number;
|
|
46
|
+
size: 1 | 2 | 3 | 4;
|
|
47
|
+
}
|
|
48
|
+
/** Entidad existente seleccionada en modo SEARCH */
|
|
49
|
+
export interface ExistingEntityRef {
|
|
50
|
+
/** Id del registro de entidad en Capta */
|
|
51
|
+
idEntityValue: string;
|
|
52
|
+
/** Etiqueta display del registro (para mostrar en UI sin refetch) */
|
|
53
|
+
label?: string;
|
|
54
|
+
}
|
|
55
|
+
/** Entidad nueva creada en modo CREATE */
|
|
56
|
+
export interface NewEntityDraft {
|
|
57
|
+
/** Indica que este valor corresponde a un registro por crear */
|
|
58
|
+
isDraft: true;
|
|
59
|
+
/** Campos del sub-formulario indexados por stepId */
|
|
60
|
+
fields: Record<string, unknown>;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Si allowMultiple === false → ExistingEntityRef | NewEntityDraft
|
|
64
|
+
* Si allowMultiple === true → (ExistingEntityRef | NewEntityDraft)[]
|
|
65
|
+
*/
|
|
66
|
+
export type EntityFormStepValue = ExistingEntityRef | NewEntityDraft | (ExistingEntityRef | NewEntityDraft)[];
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DRAFT — EntityFormFormStep types
|
|
3
|
+
*
|
|
4
|
+
* Paso que permite al usuario buscar y/o crear un registro de entidad
|
|
5
|
+
* directamente dentro del formulario, sin salir de él.
|
|
6
|
+
*
|
|
7
|
+
* Modos:
|
|
8
|
+
* SEARCH → solo busca entidades existentes
|
|
9
|
+
* CREATE → solo crea una entidad nueva (muestra sub-campos)
|
|
10
|
+
* SEARCH_OR_CREATE → busca primero; si no encuentra, puede crear
|
|
11
|
+
*/
|
|
12
|
+
// ===========================================================================
|
|
13
|
+
// Enum de modos
|
|
14
|
+
// ===========================================================================
|
|
15
|
+
export var EntityFormMode;
|
|
16
|
+
(function (EntityFormMode) {
|
|
17
|
+
EntityFormMode["SEARCH"] = "SEARCH";
|
|
18
|
+
EntityFormMode["CREATE"] = "CREATE";
|
|
19
|
+
EntityFormMode["SEARCH_OR_CREATE"] = "SEARCH_OR_CREATE";
|
|
20
|
+
})(EntityFormMode || (EntityFormMode = {}));
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DRAFT — EventFormStep types
|
|
3
|
+
*
|
|
4
|
+
* Paso para capturar un evento de calendario.
|
|
5
|
+
* La semántica exacta está pendiente de revisión — este draft cubre la
|
|
6
|
+
* configuración más probable basada en la discusión inicial.
|
|
7
|
+
*
|
|
8
|
+
* TODO: Definir si "evento" corresponde a:
|
|
9
|
+
* (a) Un evento de calendario puro (integrar con Google Calendar / Outlook)
|
|
10
|
+
* (b) Un registro de tipo "evento" en la entidad de Capta
|
|
11
|
+
* (c) Ambos con integración opcional
|
|
12
|
+
*/
|
|
13
|
+
import { GBaseStep } from './GenericFormSteps';
|
|
14
|
+
export interface EventStep extends GBaseStep {
|
|
15
|
+
type: 'EVENT';
|
|
16
|
+
label: string;
|
|
17
|
+
description: string | null;
|
|
18
|
+
required: boolean;
|
|
19
|
+
/** Si true, el usuario puede especificar una fecha/hora de inicio */
|
|
20
|
+
includeStartDate: boolean;
|
|
21
|
+
/** Si true, el usuario puede especificar una fecha/hora de fin */
|
|
22
|
+
includeEndDate: boolean;
|
|
23
|
+
/** Si true, se permite marcar el evento como "todo el día" */
|
|
24
|
+
includeAllDay?: boolean;
|
|
25
|
+
/** Si true, el usuario puede agregar una ubicación al evento */
|
|
26
|
+
includeLocation: boolean;
|
|
27
|
+
/** Si true, el usuario puede escribir una descripción del evento */
|
|
28
|
+
includeDescription: boolean;
|
|
29
|
+
/** Si true, el usuario puede agregar asistentes (lista de contactos/emails) */
|
|
30
|
+
includeAttendees: boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Si true, se ofrece la opción de sincronizar con calendario externo.
|
|
33
|
+
* Pendiente: definir qué calendarios se soportan.
|
|
34
|
+
*/
|
|
35
|
+
includeCalendarSync?: boolean;
|
|
36
|
+
size: 1 | 2 | 3 | 4;
|
|
37
|
+
}
|
|
38
|
+
export interface EventStepValue {
|
|
39
|
+
/** ISO 8601 — fecha y hora de inicio */
|
|
40
|
+
startDate?: string;
|
|
41
|
+
/** ISO 8601 — fecha y hora de fin */
|
|
42
|
+
endDate?: string;
|
|
43
|
+
/** Si el evento es de día completo (sin hora específica) */
|
|
44
|
+
allDay?: boolean;
|
|
45
|
+
title?: string;
|
|
46
|
+
description?: string;
|
|
47
|
+
location?: string;
|
|
48
|
+
/** Lista de emails o ids de contactos */
|
|
49
|
+
attendees?: string[];
|
|
50
|
+
/** Si el usuario eligió sincronizar con su calendario externo */
|
|
51
|
+
calendarSync?: boolean;
|
|
52
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DRAFT — EventFormStep types
|
|
3
|
+
*
|
|
4
|
+
* Paso para capturar un evento de calendario.
|
|
5
|
+
* La semántica exacta está pendiente de revisión — este draft cubre la
|
|
6
|
+
* configuración más probable basada en la discusión inicial.
|
|
7
|
+
*
|
|
8
|
+
* TODO: Definir si "evento" corresponde a:
|
|
9
|
+
* (a) Un evento de calendario puro (integrar con Google Calendar / Outlook)
|
|
10
|
+
* (b) Un registro de tipo "evento" en la entidad de Capta
|
|
11
|
+
* (c) Ambos con integración opcional
|
|
12
|
+
*/
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DRAFT — ExternalReferenceFormStep types
|
|
3
|
+
*
|
|
4
|
+
* Paso para capturar una referencia a un registro externo, ya sea:
|
|
5
|
+
* - CBR (Customer Base Record) — entidades del modelo de datos de Capta
|
|
6
|
+
* - INTEGRATION — registros de sistemas externos vía integración
|
|
7
|
+
*
|
|
8
|
+
* El usuario busca/selecciona un registro externo y el step guarda su referencia.
|
|
9
|
+
* Opcionalmente, puede incluir validación asistida por IA para normalizar el valor.
|
|
10
|
+
*/
|
|
11
|
+
import { GBaseStep } from './GenericFormSteps';
|
|
12
|
+
export declare enum ExternalRefTargetType {
|
|
13
|
+
/** Customer Base Record — entidad interna de Capta */
|
|
14
|
+
CBR = "CBR",
|
|
15
|
+
/** Sistema externo integrado (ERP, CRM, etc.) */
|
|
16
|
+
INTEGRATION = "INTEGRATION"
|
|
17
|
+
}
|
|
18
|
+
/** Configuración de un tipo de entidad CBR que se puede referenciar */
|
|
19
|
+
export interface CBRRefTarget {
|
|
20
|
+
/** Id del tipo de entidad en Capta (ej: "CLIENT", "SUPPLIER", "PROJECT") */
|
|
21
|
+
entityType: string;
|
|
22
|
+
/** Etiqueta legible para mostrar en la UI */
|
|
23
|
+
label: string;
|
|
24
|
+
/** Icono opcional para diferenciar tipos en el selector */
|
|
25
|
+
icon?: string;
|
|
26
|
+
}
|
|
27
|
+
export interface ExternalReferenceStep extends GBaseStep {
|
|
28
|
+
type: 'EXTERNAL_REFERENCE';
|
|
29
|
+
label: string;
|
|
30
|
+
description: string | null;
|
|
31
|
+
required: boolean;
|
|
32
|
+
targetType: ExternalRefTargetType;
|
|
33
|
+
/**
|
|
34
|
+
* Tipos de entidad CBR que el usuario puede referenciar.
|
|
35
|
+
* Si tiene un solo elemento, no se muestra el selector de tipo.
|
|
36
|
+
*/
|
|
37
|
+
cbrTargets?: CBRRefTarget[];
|
|
38
|
+
/** Id de la integración configurada en Capta */
|
|
39
|
+
integrationId?: string;
|
|
40
|
+
/** Endpoint o recurso específico dentro de la integración */
|
|
41
|
+
integrationResource?: string;
|
|
42
|
+
/**
|
|
43
|
+
* Si true, se usa IA para validar / normalizar el valor ingresado.
|
|
44
|
+
* Ej: corregir nombre de empresa, resolver ambigüedades, sugerir coincidencias.
|
|
45
|
+
*/
|
|
46
|
+
aiValidation: boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Ids de otros steps cuyo valor se usa como contexto para la búsqueda.
|
|
49
|
+
* Ej: usar el valor de un step de "país" para filtrar resultados.
|
|
50
|
+
*/
|
|
51
|
+
compositeStepIds?: string[];
|
|
52
|
+
/**
|
|
53
|
+
* Si true, el usuario puede seleccionar múltiples referencias.
|
|
54
|
+
*/
|
|
55
|
+
allowMultiple?: boolean;
|
|
56
|
+
maxSize?: number;
|
|
57
|
+
size: 1 | 2 | 3 | 4;
|
|
58
|
+
}
|
|
59
|
+
export interface ExternalReferenceValue {
|
|
60
|
+
/** Identificador de la referencia en el sistema origen */
|
|
61
|
+
ref: string;
|
|
62
|
+
/** Etiqueta display del registro referenciado (para UI sin refetch) */
|
|
63
|
+
label?: string;
|
|
64
|
+
/**
|
|
65
|
+
* Datos del registro resuelto, si el backend los retorna.
|
|
66
|
+
* Estructura variable dependiendo del sistema origen.
|
|
67
|
+
*/
|
|
68
|
+
resolved?: Record<string, unknown>;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Si allowMultiple === false → ExternalReferenceValue
|
|
72
|
+
* Si allowMultiple === true → ExternalReferenceValue[]
|
|
73
|
+
*/
|
|
74
|
+
export type ExternalReferenceStepValue = ExternalReferenceValue | ExternalReferenceValue[];
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DRAFT — ExternalReferenceFormStep types
|
|
3
|
+
*
|
|
4
|
+
* Paso para capturar una referencia a un registro externo, ya sea:
|
|
5
|
+
* - CBR (Customer Base Record) — entidades del modelo de datos de Capta
|
|
6
|
+
* - INTEGRATION — registros de sistemas externos vía integración
|
|
7
|
+
*
|
|
8
|
+
* El usuario busca/selecciona un registro externo y el step guarda su referencia.
|
|
9
|
+
* Opcionalmente, puede incluir validación asistida por IA para normalizar el valor.
|
|
10
|
+
*/
|
|
11
|
+
// ===========================================================================
|
|
12
|
+
// Enums
|
|
13
|
+
// ===========================================================================
|
|
14
|
+
export var ExternalRefTargetType;
|
|
15
|
+
(function (ExternalRefTargetType) {
|
|
16
|
+
/** Customer Base Record — entidad interna de Capta */
|
|
17
|
+
ExternalRefTargetType["CBR"] = "CBR";
|
|
18
|
+
/** Sistema externo integrado (ERP, CRM, etc.) */
|
|
19
|
+
ExternalRefTargetType["INTEGRATION"] = "INTEGRATION";
|
|
20
|
+
})(ExternalRefTargetType || (ExternalRefTargetType = {}));
|
|
@@ -5,7 +5,13 @@ import { EurekaDraft } from './Draft/Draft';
|
|
|
5
5
|
import { ErkValue } from './ErkValue';
|
|
6
6
|
import * as GSteps from './GenericFormSteps';
|
|
7
7
|
import { Time } from './Time';
|
|
8
|
-
|
|
8
|
+
import { LocationStep } from './LocationFormStep';
|
|
9
|
+
import { NumberStep, NumberStepType } from './NumericFormSteps';
|
|
10
|
+
import { BookingStep } from './BookingFormStep';
|
|
11
|
+
import { CalendarStep } from './CalendarFormStep';
|
|
12
|
+
export type { LocationStep, NumberStep, BookingStep, CalendarStep };
|
|
13
|
+
export { NumberStepType };
|
|
14
|
+
export type FormStep = Title | TimePicker | Rating | CheckBox | TextArea | TextInput | DatePicker | FileUpload | Separator | FormSelector | ClassifierSelector | Collapsible | EntityValuePicker | ApiSelector | Mapper | DatePickerRange | LocationStep | NumberStep | BookingStep | CalendarStep;
|
|
9
15
|
export interface Title extends GSteps.GBaseStep {
|
|
10
16
|
type: FormStepTypes.TITLE;
|
|
11
17
|
title?: EurekaDraft;
|
|
@@ -232,4 +238,3 @@ export interface Mapper extends GSteps.GBaseStep {
|
|
|
232
238
|
deletable?: boolean;
|
|
233
239
|
max?: number;
|
|
234
240
|
}
|
|
235
|
-
export {};
|
package/dist/@Types/FormStep.js
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
import { NumberStepType } from './NumericFormSteps';
|
|
2
|
+
export { NumberStepType };
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DRAFT — LocationStep types
|
|
3
|
+
* Pendiente de revisión antes de integrar al FormStep union principal.
|
|
4
|
+
*/
|
|
5
|
+
import { GBaseStep } from './GenericFormSteps';
|
|
6
|
+
export { type DynamicRef } from './StepRef';
|
|
7
|
+
import FormStepTypes from '../constants/FormStepTypes';
|
|
8
|
+
/** Modos de entrada que el paso puede ofrecer al usuario */
|
|
9
|
+
export declare enum LocationInputMode {
|
|
10
|
+
/** Autocomplete de Google Places — retorna placeId, coordenadas y addressDetail */
|
|
11
|
+
GOOGLE_PLACES = "GOOGLE_PLACES",
|
|
12
|
+
/** Geolocalización del navegador (GPS) — retorna solo lat/lng */
|
|
13
|
+
GPS = "GPS",
|
|
14
|
+
/** Entrada manual de campos de dirección — sin coordenadas garantizadas */
|
|
15
|
+
MANUAL = "MANUAL"
|
|
16
|
+
}
|
|
17
|
+
/** Tipo de restricción geográfica */
|
|
18
|
+
export declare enum LocationRestrictionType {
|
|
19
|
+
/** Zona circular definida por un centro y un radio en metros */
|
|
20
|
+
RADIUS = "RADIUS",
|
|
21
|
+
/** Polígono arbitrario (geofence) */
|
|
22
|
+
GEOFENCE = "GEOFENCE"
|
|
23
|
+
}
|
|
24
|
+
/** Comportamiento de la restricción */
|
|
25
|
+
export declare enum LocationRestrictionBehavior {
|
|
26
|
+
/** Solo se permite una ubicación dentro de esta zona */
|
|
27
|
+
ALLOW = "ALLOW",
|
|
28
|
+
/** Se rechaza una ubicación dentro de esta zona */
|
|
29
|
+
DENY = "DENY"
|
|
30
|
+
}
|
|
31
|
+
/** Cómo se comporta cada campo de la dirección en el formulario */
|
|
32
|
+
export declare enum AddressFieldMode {
|
|
33
|
+
/** Se le pide al usuario final */
|
|
34
|
+
ASK = "ASK",
|
|
35
|
+
/** El diseñador fija el valor; el usuario no lo cambia */
|
|
36
|
+
FIXED = "FIXED",
|
|
37
|
+
/** No se pide ni se muestra */
|
|
38
|
+
OMIT = "OMIT"
|
|
39
|
+
}
|
|
40
|
+
export interface AddressFieldConfig {
|
|
41
|
+
mode: AddressFieldMode;
|
|
42
|
+
/** Valor usado solo cuando `mode === FIXED` */
|
|
43
|
+
fixedValue?: string;
|
|
44
|
+
}
|
|
45
|
+
/** Campos configurables — coinciden con las claves de LocationAddressDetail (countryCode se deriva de country) */
|
|
46
|
+
export type AddressFieldKey = 'street' | 'streetNumber' | 'unit' | 'neighborhood' | 'city' | 'state' | 'postalCode' | 'country';
|
|
47
|
+
/**
|
|
48
|
+
* Coordenadas fijas usadas como centro de una restricción de radio.
|
|
49
|
+
* Cuando el centro viene de otro step se usa StepRef con allowedStepTypes: ['LOCATION'].
|
|
50
|
+
*/
|
|
51
|
+
export interface LocationCoords {
|
|
52
|
+
latitude: number;
|
|
53
|
+
longitude: number;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Centro del radio: coordenadas fijas o referencia a otro LocationStep.
|
|
57
|
+
* El segundo parámetro de DynamicRef restringe las referencias a steps de tipo 'LOCATION'.
|
|
58
|
+
*
|
|
59
|
+
* @example
|
|
60
|
+
* // fijo
|
|
61
|
+
* center: { type: 'FIXED', value: { latitude: 6.2, longitude: -75.5 } }
|
|
62
|
+
*
|
|
63
|
+
* // dinámico — TypeScript solo acepta allowedStepTypes: ['LOCATION']
|
|
64
|
+
* center: { type: 'STEP_REF', idStep: 'step_origen', allowedStepTypes: ['LOCATION'] }
|
|
65
|
+
*/
|
|
66
|
+
/** Restricción circular */
|
|
67
|
+
export interface RadiusRestriction {
|
|
68
|
+
type: LocationRestrictionType.RADIUS;
|
|
69
|
+
behavior: LocationRestrictionBehavior;
|
|
70
|
+
center: LocationCoords;
|
|
71
|
+
/** Radio en metros */
|
|
72
|
+
radiusMeters: number;
|
|
73
|
+
/** Mensaje de error personalizado cuando la validación falla */
|
|
74
|
+
errorMessage?: string;
|
|
75
|
+
}
|
|
76
|
+
/** Vértice de un polígono */
|
|
77
|
+
export interface GeofenceVertex {
|
|
78
|
+
latitude: number;
|
|
79
|
+
longitude: number;
|
|
80
|
+
}
|
|
81
|
+
/** Restricción por polígono — mínimo 3 vértices, se cierra automáticamente */
|
|
82
|
+
export interface GeofenceRestriction {
|
|
83
|
+
type: LocationRestrictionType.GEOFENCE;
|
|
84
|
+
behavior: LocationRestrictionBehavior;
|
|
85
|
+
/** Lista ordenada de vértices que forman el polígono */
|
|
86
|
+
polygon: [GeofenceVertex, GeofenceVertex, GeofenceVertex, ...GeofenceVertex[]];
|
|
87
|
+
/** Mensaje de error personalizado cuando la validación falla */
|
|
88
|
+
errorMessage?: string;
|
|
89
|
+
}
|
|
90
|
+
/** Una restricción geográfica — pueden combinarse varias (todas deben cumplirse) */
|
|
91
|
+
export type LocationRestriction = RadiusRestriction | GeofenceRestriction;
|
|
92
|
+
export interface LocationStep extends GBaseStep {
|
|
93
|
+
type: FormStepTypes.LOCATION;
|
|
94
|
+
label: string;
|
|
95
|
+
description: string | null;
|
|
96
|
+
required: boolean;
|
|
97
|
+
/**
|
|
98
|
+
* Modos de entrada habilitados. Al menos uno debe estar presente.
|
|
99
|
+
* Si solo hay uno, la UI no muestra selector de modo.
|
|
100
|
+
*/
|
|
101
|
+
allowedModes: [LocationInputMode, ...LocationInputMode[]];
|
|
102
|
+
/**
|
|
103
|
+
* Modo que se preselecciona al abrir el paso.
|
|
104
|
+
* Debe estar incluido en allowedModes.
|
|
105
|
+
* Si no se especifica, se usa el primero de allowedModes.
|
|
106
|
+
*/
|
|
107
|
+
defaultMode?: LocationInputMode;
|
|
108
|
+
/**
|
|
109
|
+
* Restricciones geográficas. Se evalúan todas (lógica AND).
|
|
110
|
+
* Una ubicación es válida solo si pasa cada restricción.
|
|
111
|
+
*/
|
|
112
|
+
restrictions?: LocationRestriction[];
|
|
113
|
+
/**
|
|
114
|
+
* Config por campo de la dirección: pedir / fijar / omitir.
|
|
115
|
+
* Aplica al modo MANUAL (qué campos se muestran) y como override tras autocompletar
|
|
116
|
+
* con GOOGLE_PLACES (los FIXED se sobreescriben, los OMIT se descartan del value).
|
|
117
|
+
*/
|
|
118
|
+
addressFields?: Partial<Record<AddressFieldKey, AddressFieldConfig>>;
|
|
119
|
+
size: 1 | 2 | 3 | 4;
|
|
120
|
+
defaultValue?: LocationStepValue | null;
|
|
121
|
+
}
|
|
122
|
+
/** Desglose estructurado de la dirección (mismo shape que AddressModel) */
|
|
123
|
+
export interface LocationAddressDetail {
|
|
124
|
+
street?: string;
|
|
125
|
+
streetNumber?: string;
|
|
126
|
+
unit?: string;
|
|
127
|
+
neighborhood?: string;
|
|
128
|
+
city?: string;
|
|
129
|
+
state?: string;
|
|
130
|
+
country?: string;
|
|
131
|
+
/** ISO 3166-1 alpha-2 (e.g., "CO", "US", "MX") */
|
|
132
|
+
countryCode?: string;
|
|
133
|
+
postalCode?: string;
|
|
134
|
+
}
|
|
135
|
+
export interface LocationStepValue {
|
|
136
|
+
/** Indica cómo fue capturada la ubicación */
|
|
137
|
+
source: LocationInputMode;
|
|
138
|
+
/**
|
|
139
|
+
* Latitud — presente si source es GOOGLE_PLACES o GPS.
|
|
140
|
+
* Ausente en MANUAL si el usuario no activó coordenadas.
|
|
141
|
+
*/
|
|
142
|
+
latitude?: number;
|
|
143
|
+
/**
|
|
144
|
+
* Longitud — presente si source es GOOGLE_PLACES o GPS.
|
|
145
|
+
* Ausente en MANUAL si el usuario no activó coordenadas.
|
|
146
|
+
*/
|
|
147
|
+
longitude?: number;
|
|
148
|
+
/** Nombre del lugar o negocio (ej: "Torre Bancolombia") */
|
|
149
|
+
name?: string;
|
|
150
|
+
/** Dirección completa formateada (viene de Google o construida manualmente) */
|
|
151
|
+
address?: string;
|
|
152
|
+
/**
|
|
153
|
+
* Google Place ID — presente solo si source === GOOGLE_PLACES.
|
|
154
|
+
* Permite re-fetch de detalles y construcción de links a Maps.
|
|
155
|
+
*/
|
|
156
|
+
placeId?: string;
|
|
157
|
+
/** Desglose campo a campo de la dirección */
|
|
158
|
+
addressDetail?: LocationAddressDetail;
|
|
159
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DRAFT — LocationStep types
|
|
3
|
+
* Pendiente de revisión antes de integrar al FormStep union principal.
|
|
4
|
+
*/
|
|
5
|
+
// ---------------------------------------------------------------------------
|
|
6
|
+
// Enums
|
|
7
|
+
// ---------------------------------------------------------------------------
|
|
8
|
+
/** Modos de entrada que el paso puede ofrecer al usuario */
|
|
9
|
+
export var LocationInputMode;
|
|
10
|
+
(function (LocationInputMode) {
|
|
11
|
+
/** Autocomplete de Google Places — retorna placeId, coordenadas y addressDetail */
|
|
12
|
+
LocationInputMode["GOOGLE_PLACES"] = "GOOGLE_PLACES";
|
|
13
|
+
/** Geolocalización del navegador (GPS) — retorna solo lat/lng */
|
|
14
|
+
LocationInputMode["GPS"] = "GPS";
|
|
15
|
+
/** Entrada manual de campos de dirección — sin coordenadas garantizadas */
|
|
16
|
+
LocationInputMode["MANUAL"] = "MANUAL";
|
|
17
|
+
})(LocationInputMode || (LocationInputMode = {}));
|
|
18
|
+
/** Tipo de restricción geográfica */
|
|
19
|
+
export var LocationRestrictionType;
|
|
20
|
+
(function (LocationRestrictionType) {
|
|
21
|
+
/** Zona circular definida por un centro y un radio en metros */
|
|
22
|
+
LocationRestrictionType["RADIUS"] = "RADIUS";
|
|
23
|
+
/** Polígono arbitrario (geofence) */
|
|
24
|
+
LocationRestrictionType["GEOFENCE"] = "GEOFENCE";
|
|
25
|
+
})(LocationRestrictionType || (LocationRestrictionType = {}));
|
|
26
|
+
/** Comportamiento de la restricción */
|
|
27
|
+
export var LocationRestrictionBehavior;
|
|
28
|
+
(function (LocationRestrictionBehavior) {
|
|
29
|
+
/** Solo se permite una ubicación dentro de esta zona */
|
|
30
|
+
LocationRestrictionBehavior["ALLOW"] = "ALLOW";
|
|
31
|
+
/** Se rechaza una ubicación dentro de esta zona */
|
|
32
|
+
LocationRestrictionBehavior["DENY"] = "DENY";
|
|
33
|
+
})(LocationRestrictionBehavior || (LocationRestrictionBehavior = {}));
|
|
34
|
+
// ---------------------------------------------------------------------------
|
|
35
|
+
// Config por campo de la dirección (fijo / pedir / omitir)
|
|
36
|
+
// ---------------------------------------------------------------------------
|
|
37
|
+
/** Cómo se comporta cada campo de la dirección en el formulario */
|
|
38
|
+
export var AddressFieldMode;
|
|
39
|
+
(function (AddressFieldMode) {
|
|
40
|
+
/** Se le pide al usuario final */
|
|
41
|
+
AddressFieldMode["ASK"] = "ASK";
|
|
42
|
+
/** El diseñador fija el valor; el usuario no lo cambia */
|
|
43
|
+
AddressFieldMode["FIXED"] = "FIXED";
|
|
44
|
+
/** No se pide ni se muestra */
|
|
45
|
+
AddressFieldMode["OMIT"] = "OMIT";
|
|
46
|
+
})(AddressFieldMode || (AddressFieldMode = {}));
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NumericFormSteps types
|
|
3
|
+
* Cubre el paso relacionado con números y sus múltiples subtipos.
|
|
4
|
+
*/
|
|
5
|
+
import { GBaseStep } from './GenericFormSteps';
|
|
6
|
+
import FormStepTypes from '../constants/FormStepTypes';
|
|
7
|
+
/** Subtipo del paso numérico — discriminante secundario */
|
|
8
|
+
export declare enum NumberStepType {
|
|
9
|
+
INTEGER = "INTEGER",
|
|
10
|
+
DECIMAL = "DECIMAL",
|
|
11
|
+
PERCENTAGE = "PERCENTAGE",
|
|
12
|
+
/** Monto de dinero en una divisa (ej: 1500 COP). */
|
|
13
|
+
MONEY = "MONEY",
|
|
14
|
+
/** Magnitud con unidad de medida (ej: 5 kg). */
|
|
15
|
+
MEASURE = "MEASURE",
|
|
16
|
+
/** Precio por unidad: divisa sobre unidad (ej: 20 USD / hora). */
|
|
17
|
+
UNIT_PRICE = "UNIT_PRICE"
|
|
18
|
+
}
|
|
19
|
+
/** Campos base compartidos por todos los subtipos numéricos */
|
|
20
|
+
interface GNumberStep extends GBaseStep {
|
|
21
|
+
type: FormStepTypes.NUMBER;
|
|
22
|
+
numberType: NumberStepType;
|
|
23
|
+
label: string;
|
|
24
|
+
description: string | null;
|
|
25
|
+
required: boolean;
|
|
26
|
+
min?: number;
|
|
27
|
+
max?: number;
|
|
28
|
+
/** Cantidad de decimales permitidos (0 = entero). Default: 2 */
|
|
29
|
+
decimals?: number;
|
|
30
|
+
/** Sufijo de unidad estático que se muestra junto al valor (solo visual, no afecta el número guardado). */
|
|
31
|
+
suffix?: string;
|
|
32
|
+
/**
|
|
33
|
+
* Mostrar u ocultar los botones +/− de incremento/decremento.
|
|
34
|
+
* Default: true
|
|
35
|
+
*/
|
|
36
|
+
spinner?: boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Tamaño de cada incremento/decremento al usar los botones o las flechas del teclado.
|
|
39
|
+
* Útil para monedas (0.01), cantidades grandes (100) o porcentajes (5).
|
|
40
|
+
* Default: 1
|
|
41
|
+
*/
|
|
42
|
+
step?: number;
|
|
43
|
+
/** Texto de placeholder del campo numérico. */
|
|
44
|
+
placeholder?: string;
|
|
45
|
+
size: 1 | 2 | 3 | 4;
|
|
46
|
+
}
|
|
47
|
+
export interface IntegerStep extends GNumberStep {
|
|
48
|
+
numberType: NumberStepType.INTEGER;
|
|
49
|
+
/** Siempre 0 para enteros, pero puede dejarse undefined */
|
|
50
|
+
decimals?: 0;
|
|
51
|
+
defaultValue?: number;
|
|
52
|
+
}
|
|
53
|
+
export interface DecimalStep extends GNumberStep {
|
|
54
|
+
numberType: NumberStepType.DECIMAL;
|
|
55
|
+
defaultValue?: number;
|
|
56
|
+
}
|
|
57
|
+
export interface PercentageStep extends GNumberStep {
|
|
58
|
+
numberType: NumberStepType.PERCENTAGE;
|
|
59
|
+
defaultValue?: number;
|
|
60
|
+
}
|
|
61
|
+
export interface MoneyStep extends GNumberStep {
|
|
62
|
+
numberType: NumberStepType.MONEY;
|
|
63
|
+
/** Moneda fija (ej: "COP", "USD", "EUR") */
|
|
64
|
+
currency?: string;
|
|
65
|
+
allowCurrencyChange?: boolean;
|
|
66
|
+
availableCurrencies?: string[];
|
|
67
|
+
defaultValue?: MoneyValue | null;
|
|
68
|
+
}
|
|
69
|
+
export interface MeasureStep extends GNumberStep {
|
|
70
|
+
numberType: NumberStepType.MEASURE;
|
|
71
|
+
/** Unidad fija (ej: "kg", "m", "hrs") */
|
|
72
|
+
unit?: string;
|
|
73
|
+
allowUnitChange?: boolean;
|
|
74
|
+
availableUnits?: string[];
|
|
75
|
+
defaultValue?: MeasureValue | null;
|
|
76
|
+
}
|
|
77
|
+
export interface UnitPriceStep extends GNumberStep {
|
|
78
|
+
numberType: NumberStepType.UNIT_PRICE;
|
|
79
|
+
/** Moneda del precio (ej: "USD") */
|
|
80
|
+
currency?: string;
|
|
81
|
+
/** Unidad base del precio (ej: "hrs", "km", "mes") */
|
|
82
|
+
unit?: string;
|
|
83
|
+
allowCurrencyChange?: boolean;
|
|
84
|
+
allowUnitChange?: boolean;
|
|
85
|
+
availableCurrencies?: string[];
|
|
86
|
+
availableUnits?: string[];
|
|
87
|
+
defaultValue?: UnitPriceValue | null;
|
|
88
|
+
}
|
|
89
|
+
/** Unión discriminada del paso NUMBER — narrowing por numberType */
|
|
90
|
+
export type NumberStep = IntegerStep | DecimalStep | PercentageStep | MoneyStep | MeasureStep | UnitPriceStep;
|
|
91
|
+
export type IntegerValue = number;
|
|
92
|
+
export type DecimalValue = number;
|
|
93
|
+
export type PercentageValue = number;
|
|
94
|
+
export interface MoneyValue {
|
|
95
|
+
value: number;
|
|
96
|
+
currency: string;
|
|
97
|
+
}
|
|
98
|
+
export interface MeasureValue {
|
|
99
|
+
value: number;
|
|
100
|
+
unit: string;
|
|
101
|
+
}
|
|
102
|
+
export interface UnitPriceValue {
|
|
103
|
+
value: number;
|
|
104
|
+
currency: string;
|
|
105
|
+
unit: string;
|
|
106
|
+
}
|
|
107
|
+
export type NumberStepValue = number | MoneyValue | MeasureValue | UnitPriceValue;
|
|
108
|
+
export {};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NumericFormSteps types
|
|
3
|
+
* Cubre el paso relacionado con números y sus múltiples subtipos.
|
|
4
|
+
*/
|
|
5
|
+
// ===========================================================================
|
|
6
|
+
// NUMBER
|
|
7
|
+
// ===========================================================================
|
|
8
|
+
/** Subtipo del paso numérico — discriminante secundario */
|
|
9
|
+
export var NumberStepType;
|
|
10
|
+
(function (NumberStepType) {
|
|
11
|
+
NumberStepType["INTEGER"] = "INTEGER";
|
|
12
|
+
NumberStepType["DECIMAL"] = "DECIMAL";
|
|
13
|
+
NumberStepType["PERCENTAGE"] = "PERCENTAGE";
|
|
14
|
+
/** Monto de dinero en una divisa (ej: 1500 COP). */
|
|
15
|
+
NumberStepType["MONEY"] = "MONEY";
|
|
16
|
+
/** Magnitud con unidad de medida (ej: 5 kg). */
|
|
17
|
+
NumberStepType["MEASURE"] = "MEASURE";
|
|
18
|
+
/** Precio por unidad: divisa sobre unidad (ej: 20 USD / hora). */
|
|
19
|
+
NumberStepType["UNIT_PRICE"] = "UNIT_PRICE";
|
|
20
|
+
})(NumberStepType || (NumberStepType = {}));
|