@arquimedes.co/eureka-forms 3.0.46-new-steps → 3.0.48-test

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.
Files changed (85) hide show
  1. package/dist/@Types/Condition.d.ts +6 -4
  2. package/dist/@Types/ErkValue.d.ts +16 -0
  3. package/dist/@Types/ErkValue.js +1 -0
  4. package/dist/@Types/Form.d.ts +1 -0
  5. package/dist/@Types/FormStep.d.ts +8 -1
  6. package/dist/@Types/User.d.ts +13 -0
  7. package/dist/@Types/User.js +1 -0
  8. package/dist/App/App.js +1 -1
  9. package/dist/App/AppFunctions.js +8 -3
  10. package/dist/App/AppHooks.js +20 -1
  11. package/dist/Form/Form.js +6 -2
  12. package/dist/Form/Form.module.css +48 -39
  13. package/dist/FormSteps/ApiSelectorStep/MaterialApiSelectorStep/MaterialApiSelectorStep.js +8 -4
  14. package/dist/FormSteps/CBRStepMapper.js +1 -1
  15. package/dist/FormSteps/ClassifierSelectorStep/MaterialClassifierSelectorStep/MaterialClassifierSelectorStep.js +2 -2
  16. package/dist/FormSteps/EntityValueStep/MaterialEntityValuePickerStep/MaterialEntityValuePickerStep.js +52 -4
  17. package/dist/FormSteps/StepFunctions.js +6 -9
  18. package/dist/FormSteps/StepFunctions.test.js +3 -3
  19. package/dist/FormSteps/TitleStep/MaterialTitleStep/MaterialTitleStep.js +2 -1
  20. package/dist/Icons/@ErkIcon.d.ts +2 -2
  21. package/dist/Icons/@ErkIcon.js +2 -2
  22. package/dist/Icons/EmailIcon.d.ts +3 -0
  23. package/dist/Icons/EmailIcon.js +7 -0
  24. package/dist/Icons/Entities/SchoolIcon.d.ts +3 -0
  25. package/dist/Icons/Entities/SchoolIcon.js +7 -0
  26. package/dist/Icons/GroupIcon.d.ts +3 -0
  27. package/dist/Icons/GroupIcon.js +7 -0
  28. package/dist/Icons/LockedIcon.d.ts +3 -0
  29. package/dist/Icons/LockedIcon.js +7 -0
  30. package/dist/Login/Login.module.css +135 -0
  31. package/dist/Login/LoginLayout.module.css +68 -0
  32. package/dist/Login/LoginPage.d.ts +10 -0
  33. package/dist/Login/LoginPage.js +101 -0
  34. package/dist/Login/LoginTextField.d.ts +14 -0
  35. package/dist/Login/LoginTextField.js +29 -0
  36. package/dist/Services/ApiSelectorService.d.ts +366 -0
  37. package/dist/Services/ApiSelectorService.js +173 -0
  38. package/dist/Services/ApiSelectorService.test.d.ts +1 -0
  39. package/dist/Services/ApiSelectorService.test.js +87 -0
  40. package/dist/Services/DraftService.js +4 -1
  41. package/dist/Services/IntegrationService.d.ts +21 -0
  42. package/dist/Services/IntegrationService.js +22 -0
  43. package/dist/Services/UserService.d.ts +10 -0
  44. package/dist/Services/UserService.js +21 -0
  45. package/dist/Shared/ErkSelect/ErkSelect.d.ts +2 -2
  46. package/dist/Shared/InputIcon/InputIcon.js +6 -0
  47. package/dist/Shared/Navbar/Navbar.d.ts +2 -1
  48. package/dist/Shared/Navbar/Navbar.js +22 -3
  49. package/dist/Shared/Navbar/Navbar.module.css +22 -8
  50. package/dist/Shared/SmartDraftRenderer/LinkDecorator.d.ts +14 -0
  51. package/dist/Shared/SmartDraftRenderer/LinkDecorator.js +48 -0
  52. package/dist/Shared/SmartDraftRenderer/SmartDraftRenderer.js +8 -2
  53. package/dist/States/GlobalSlice.d.ts +4 -1
  54. package/dist/States/GlobalSlice.js +8 -1
  55. package/dist/constants/ErkIconTypes.d.ts +3 -1
  56. package/dist/constants/ErkIconTypes.js +2 -0
  57. package/dist/constants/ErkValueTypes.d.ts +6 -0
  58. package/dist/constants/ErkValueTypes.js +7 -0
  59. package/dist/constants/FormStepTypes.d.ts +2 -1
  60. package/dist/constants/FormStepTypes.js +1 -0
  61. package/dist/hooks.d.ts +3 -0
  62. package/dist/hooks.js +17 -1
  63. package/package.json +10 -3
  64. package/dist/@Types/AvailabilityFormStep.d.ts +0 -65
  65. package/dist/@Types/AvailabilityFormStep.js +0 -27
  66. package/dist/@Types/BankAccountFormStep.d.ts +0 -67
  67. package/dist/@Types/BankAccountFormStep.js +0 -14
  68. package/dist/@Types/CommunicationChannelFormStep.d.ts +0 -51
  69. package/dist/@Types/CommunicationChannelFormStep.js +0 -15
  70. package/dist/@Types/ConsentFormStep.d.ts +0 -36
  71. package/dist/@Types/ConsentFormStep.js +0 -8
  72. package/dist/@Types/EntityFormFormStep.d.ts +0 -66
  73. package/dist/@Types/EntityFormFormStep.js +0 -20
  74. package/dist/@Types/EventFormStep.d.ts +0 -52
  75. package/dist/@Types/EventFormStep.js +0 -13
  76. package/dist/@Types/ExternalReferenceFormStep.d.ts +0 -74
  77. package/dist/@Types/ExternalReferenceFormStep.js +0 -20
  78. package/dist/@Types/LocationFormStep.d.ts +0 -136
  79. package/dist/@Types/LocationFormStep.js +0 -33
  80. package/dist/@Types/NumericFormSteps.d.ts +0 -171
  81. package/dist/@Types/NumericFormSteps.js +0 -32
  82. package/dist/@Types/PredefinedSelectorFormStep.d.ts +0 -51
  83. package/dist/@Types/PredefinedSelectorFormStep.js +0 -39
  84. package/dist/@Types/StepRef.d.ts +0 -79
  85. package/dist/@Types/StepRef.js +0 -27
@@ -1,51 +0,0 @@
1
- /**
2
- * DRAFT — CommunicationChannelFormStep types
3
- *
4
- * Paso para capturar uno o más canales de comunicación (WhatsApp / Email / Teléfono).
5
- * Cada canal es un objeto con tipo + valor + estado de verificación opcional.
6
- */
7
- import { GBaseStep } from './GenericFormSteps';
8
- export declare enum CommunicationChannelType {
9
- WHATSAPP = "WHATSAPP",
10
- EMAIL = "EMAIL",
11
- PHONE = "PHONE"
12
- }
13
- export interface CommunicationChannelStep extends GBaseStep {
14
- type: 'COMMUNICATION_CHANNEL';
15
- label: string;
16
- description: string | null;
17
- required: boolean;
18
- /**
19
- * Canales que el usuario puede seleccionar.
20
- * Si solo hay uno, no se muestra el selector de tipo.
21
- */
22
- allowedChannels: [CommunicationChannelType, ...CommunicationChannelType[]];
23
- /**
24
- * Si true, se muestra un campo/estado "verificado" junto al valor.
25
- * Útil para marcar si el canal fue confirmado (doble opt-in, OTP, etc.).
26
- */
27
- includeVerification: boolean;
28
- /**
29
- * Si true, el usuario puede agregar más de un canal.
30
- * El valor guardado pasa de ser un objeto a un array.
31
- */
32
- allowMultiple: boolean;
33
- /** Solo aplica si allowMultiple === true */
34
- maxChannels?: number;
35
- size: 1 | 2 | 3 | 4;
36
- }
37
- export interface CommunicationChannelValue {
38
- channelType: CommunicationChannelType;
39
- /** Número de teléfono (con código de país) o dirección de email */
40
- value: string;
41
- /**
42
- * Presente solo si el paso tiene includeVerification === true.
43
- * true = verificado, false = pendiente de verificación.
44
- */
45
- verified?: boolean;
46
- }
47
- /**
48
- * Si allowMultiple === false → CommunicationChannelValue
49
- * Si allowMultiple === true → CommunicationChannelValue[]
50
- */
51
- export type CommunicationChannelStepValue = CommunicationChannelValue | CommunicationChannelValue[];
@@ -1,15 +0,0 @@
1
- /**
2
- * DRAFT — CommunicationChannelFormStep types
3
- *
4
- * Paso para capturar uno o más canales de comunicación (WhatsApp / Email / Teléfono).
5
- * Cada canal es un objeto con tipo + valor + estado de verificación opcional.
6
- */
7
- // ===========================================================================
8
- // Enum de canales (refleja ChannelTypes de Eureka-Types)
9
- // ===========================================================================
10
- export var CommunicationChannelType;
11
- (function (CommunicationChannelType) {
12
- CommunicationChannelType["WHATSAPP"] = "WHATSAPP";
13
- CommunicationChannelType["EMAIL"] = "EMAIL";
14
- CommunicationChannelType["PHONE"] = "PHONE";
15
- })(CommunicationChannelType || (CommunicationChannelType = {}));
@@ -1,36 +0,0 @@
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;
@@ -1,8 +0,0 @@
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
- export {};
@@ -1,66 +0,0 @@
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)[];
@@ -1,20 +0,0 @@
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 = {}));
@@ -1,52 +0,0 @@
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
- }
@@ -1,13 +0,0 @@
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 {};
@@ -1,74 +0,0 @@
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[];
@@ -1,20 +0,0 @@
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 = {}));
@@ -1,136 +0,0 @@
1
- /**
2
- * DRAFT — LocationStep types
3
- * Pendiente de revisión antes de integrar al FormStep union principal.
4
- */
5
- import { GBaseStep } from './GenericFormSteps';
6
- import { DynamicRef } from './StepRef';
7
- /** Modos de entrada que el paso puede ofrecer al usuario */
8
- export declare enum LocationInputMode {
9
- /** Autocomplete de Google Places — retorna placeId, coordenadas y addressDetail */
10
- GOOGLE_PLACES = "GOOGLE_PLACES",
11
- /** Geolocalización del navegador (GPS) — retorna solo lat/lng */
12
- GPS = "GPS",
13
- /** Entrada manual de campos de dirección — sin coordenadas garantizadas */
14
- MANUAL = "MANUAL"
15
- }
16
- /** Tipo de restricción geográfica */
17
- export declare enum LocationRestrictionType {
18
- /** Zona circular definida por un centro y un radio en metros */
19
- RADIUS = "RADIUS",
20
- /** Polígono arbitrario (geofence) */
21
- GEOFENCE = "GEOFENCE"
22
- }
23
- /** Comportamiento de la restricción */
24
- export declare enum LocationRestrictionBehavior {
25
- /** Solo se permite una ubicación dentro de esta zona */
26
- ALLOW = "ALLOW",
27
- /** Se rechaza una ubicación dentro de esta zona */
28
- DENY = "DENY"
29
- }
30
- /**
31
- * Coordenadas fijas usadas como centro de una restricción de radio.
32
- * Cuando el centro viene de otro step se usa StepRef con allowedStepTypes: ['LOCATION'].
33
- */
34
- export interface LocationCoords {
35
- latitude: number;
36
- longitude: number;
37
- }
38
- /**
39
- * Centro del radio: coordenadas fijas o referencia a otro LocationStep.
40
- * El segundo parámetro de DynamicRef restringe las referencias a steps de tipo 'LOCATION'.
41
- *
42
- * @example
43
- * // fijo
44
- * center: { type: 'FIXED', value: { latitude: 6.2, longitude: -75.5 } }
45
- *
46
- * // dinámico — TypeScript solo acepta allowedStepTypes: ['LOCATION']
47
- * center: { type: 'STEP_REF', idStep: 'step_origen', allowedStepTypes: ['LOCATION'] }
48
- */
49
- export type LocationCenterRef = DynamicRef<LocationCoords, 'LOCATION'>;
50
- /** Restricción circular */
51
- export interface RadiusRestriction {
52
- type: LocationRestrictionType.RADIUS;
53
- behavior: LocationRestrictionBehavior;
54
- center: LocationCenterRef;
55
- /** Radio en metros */
56
- radiusMeters: number;
57
- /** Mensaje de error personalizado cuando la validación falla */
58
- errorMessage?: string;
59
- }
60
- /** Vértice de un polígono */
61
- export interface GeofenceVertex {
62
- latitude: number;
63
- longitude: number;
64
- }
65
- /** Restricción por polígono — mínimo 3 vértices, se cierra automáticamente */
66
- export interface GeofenceRestriction {
67
- type: LocationRestrictionType.GEOFENCE;
68
- behavior: LocationRestrictionBehavior;
69
- /** Lista ordenada de vértices que forman el polígono */
70
- polygon: [GeofenceVertex, GeofenceVertex, GeofenceVertex, ...GeofenceVertex[]];
71
- /** Mensaje de error personalizado cuando la validación falla */
72
- errorMessage?: string;
73
- }
74
- /** Una restricción geográfica — pueden combinarse varias (todas deben cumplirse) */
75
- export type LocationRestriction = RadiusRestriction | GeofenceRestriction;
76
- export interface LocationStep extends GBaseStep {
77
- type: 'LOCATION';
78
- label: string;
79
- description: string | null;
80
- required: boolean;
81
- /**
82
- * Modos de entrada habilitados. Al menos uno debe estar presente.
83
- * Si solo hay uno, la UI no muestra selector de modo.
84
- */
85
- allowedModes: [LocationInputMode, ...LocationInputMode[]];
86
- /**
87
- * Modo que se preselecciona al abrir el paso.
88
- * Debe estar incluido en allowedModes.
89
- * Si no se especifica, se usa el primero de allowedModes.
90
- */
91
- defaultMode?: LocationInputMode;
92
- /**
93
- * Restricciones geográficas. Se evalúan todas (lógica AND).
94
- * Una ubicación es válida solo si pasa cada restricción.
95
- */
96
- restrictions?: LocationRestriction[];
97
- size: 1 | 2 | 3 | 4;
98
- }
99
- /** Desglose estructurado de la dirección (mismo shape que AddressModel) */
100
- export interface LocationAddressDetail {
101
- street?: string;
102
- streetNumber?: string;
103
- unit?: string;
104
- neighborhood?: string;
105
- city?: string;
106
- state?: string;
107
- country?: string;
108
- /** ISO 3166-1 alpha-2 (e.g., "CO", "US", "MX") */
109
- countryCode?: string;
110
- postalCode?: string;
111
- }
112
- export interface LocationStepValue {
113
- /** Indica cómo fue capturada la ubicación */
114
- source: LocationInputMode;
115
- /**
116
- * Latitud — presente si source es GOOGLE_PLACES o GPS.
117
- * Ausente en MANUAL si el usuario no activó coordenadas.
118
- */
119
- latitude?: number;
120
- /**
121
- * Longitud — presente si source es GOOGLE_PLACES o GPS.
122
- * Ausente en MANUAL si el usuario no activó coordenadas.
123
- */
124
- longitude?: number;
125
- /** Nombre del lugar o negocio (ej: "Torre Bancolombia") */
126
- name?: string;
127
- /** Dirección completa formateada (viene de Google o construida manualmente) */
128
- address?: string;
129
- /**
130
- * Google Place ID — presente solo si source === GOOGLE_PLACES.
131
- * Permite re-fetch de detalles y construcción de links a Maps.
132
- */
133
- placeId?: string;
134
- /** Desglose campo a campo de la dirección */
135
- addressDetail?: LocationAddressDetail;
136
- }
@@ -1,33 +0,0 @@
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 = {}));