@aranova/tracking-react 0.10.0 → 0.12.0

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/index.d.ts CHANGED
@@ -1,6 +1,11 @@
1
- import { ReactNode, CSSProperties } from 'react';
1
+ import * as react from 'react';
2
+ import { ReactNode, CSSProperties, InputHTMLAttributes, ChangeEvent, FocusEvent } from 'react';
3
+ import { C as ConsentState, T as TrackingInstallSurface, a as TrackingEnvironment, b as TrackingClientContext, c as TrackingParams, d as TrackingEventCreatePayload, e as TrackingSessionUpsertPayload, F as FormSubmitConfig, f as FormSubmitMetadata, G as GtagEnvironmentMap, P as PhoneConfig, g as ParsedPhone, h as PhoneDisplayFormat } from './phone-utils-CVX7JmqB.js';
4
+ export { D as DEFAULT_PHONE_COUNTRY, J as JsonValue, i as TrackedField, j as TrackingInitConfig, k as formatPhone, l as formatPhoneAsTyped, p as parsePhone, m as phoneField, t as toE164 } from './phone-utils-CVX7JmqB.js';
2
5
  import * as src from 'src';
3
6
  import { z } from 'zod';
7
+ import { CountryCode } from 'libphonenumber-js';
8
+ export { CountryCode } from 'libphonenumber-js';
4
9
 
5
10
  /**
6
11
  * Default non-blocking consent banner.
@@ -67,166 +72,6 @@ interface ConsentBannerProps {
67
72
  }
68
73
  declare function ConsentBanner({ message, title, acceptLabel, declineLabel, policyHref, policyLabel, onAccept, onDecline, position, theme, className, style, }?: ConsentBannerProps): ReactNode;
69
74
 
70
- /**
71
- * Visitor consent state stored by the SDK.
72
- *
73
- * - `pending`: the visitor has not accepted or declined yet.
74
- * - `granted`: consent was accepted and Google Consent Mode is updated to granted.
75
- * - `denied`: consent was declined and Google Consent Mode is updated to denied.
76
- */
77
- type ConsentState = 'granted' | 'denied' | 'pending';
78
- /**
79
- * Attribution parameters captured from the landing URL and persisted in cookies.
80
- *
81
- * Missing params are represented as `null` so payloads can be serialized
82
- * directly without checking for `undefined`.
83
- */
84
- interface TrackingParams {
85
- /** Google Ads click id. */
86
- gclid: string | null;
87
- /** Meta/Facebook click id. */
88
- fbclid: string | null;
89
- /** UTM source, for example `google` or `newsletter`. */
90
- utm_source: string | null;
91
- /** UTM medium, for example `cpc` or `email`. */
92
- utm_medium: string | null;
93
- /** UTM campaign name. */
94
- utm_campaign: string | null;
95
- /** UTM paid-search term. */
96
- utm_term: string | null;
97
- /** UTM content/ad creative label. */
98
- utm_content: string | null;
99
- }
100
- /**
101
- * Runtime surface that installed the tracking SDK.
102
- *
103
- * Included in ingest payloads and heartbeat events so the dashboard can tell
104
- * whether a site uses the Next, React, or script-tag integration.
105
- */
106
- type TrackingInstallSurface = 'next' | 'react' | 'script';
107
- /**
108
- * Deployment environment label for event tagging.
109
- *
110
- * Used to stamp tracking events with the deployment context so the dashboard
111
- * can distinguish production traffic from dev test traffic. The backend
112
- * enforces this via a Postgres enum, so values are strictly one of
113
- * `'production'` or `'development'`.
114
- */
115
- type TrackingEnvironment = 'production' | 'development';
116
- /**
117
- * Labelled map of Google Ads tag IDs.
118
- *
119
- * ALL entries are loaded simultaneously via `gtag('config', ...)` — the keys
120
- * are human-readable labels (e.g. `production`, `test`) and the values are
121
- * Google Ads tag IDs (e.g. `AW-123456789`).
122
- */
123
- type GtagEnvironmentMap = Record<string, string>;
124
- /**
125
- * Runtime context attached to tracking sessions and events.
126
- */
127
- interface TrackingClientContext {
128
- /** Install surface that created the client. */
129
- surface: TrackingInstallSurface;
130
- /** Package version, when available. */
131
- sdk_version: string | null;
132
- /** Package name, for example `@aranova/tracking-react`. */
133
- package_name: string | null;
134
- /** Browser origin of the tracked site. */
135
- site_origin: string | null;
136
- /** Current document title at client creation time. */
137
- page_title: string | null;
138
- /** Browser document referrer at client creation time. */
139
- referrer: string | null;
140
- /**
141
- * Deployment environment label, e.g. `'production'`, `'development'`.
142
- *
143
- * Always set — defaults to `'production'` when the consumer doesn't
144
- * pass `environment` to the factory. Sending `null` would fail the
145
- * backend's strict enum validation.
146
- */
147
- environment: TrackingEnvironment;
148
- /** All active gtag IDs loaded on this page, keyed by label. */
149
- active_gtag_ids: Record<string, string> | null;
150
- }
151
- /**
152
- * Session payload sent to `POST /tracking/events`.
153
- *
154
- * The backend upserts this by `(business_id, session_id)` before inserting
155
- * individual events.
156
- */
157
- interface TrackingSessionUpsertPayload {
158
- /** Rolling 30-minute client-side session id. */
159
- session_id: string;
160
- /** Persistent client-side visitor id. */
161
- visitor_id: string | null;
162
- gclid: string | null;
163
- fbclid: string | null;
164
- utm_source: string | null;
165
- utm_medium: string | null;
166
- utm_campaign: string | null;
167
- utm_term: string | null;
168
- utm_content: string | null;
169
- first_page: string | null;
170
- consent_state: Record<string, unknown> | null;
171
- context: TrackingClientContext;
172
- }
173
- /**
174
- * Event payload shape before batching into the ingest request.
175
- */
176
- interface TrackingEventCreatePayload {
177
- /** Session id that logically owns the event. */
178
- session_id: string;
179
- /** Registered event name, for example `page_view` or `form_submit`. */
180
- event_type: string;
181
- gclid: string | null;
182
- fbclid: string | null;
183
- /** Full page URL associated with the event, if known. */
184
- page_url: string | null;
185
- /** Event-specific metadata. Runtime shape depends on `event_type`. */
186
- metadata: Record<string, unknown> | null;
187
- context: TrackingClientContext;
188
- }
189
- /**
190
- * Browser-script initialization config passed to `window.AranovaTracking.init()`.
191
- */
192
- interface TrackingInitConfig {
193
- /** Public tracking API key issued from the Aranova dashboard. */
194
- apiKey?: string;
195
- /** Tracking endpoint base URL, usually ending in `/tracking`. */
196
- endpoint?: string;
197
- /** Optional Google Ads tag id, for example `AW-123456789`. */
198
- gtagId?: string;
199
- /**
200
- * Labelled map of Google Ads tag IDs. ALL are loaded simultaneously.
201
- * When provided, `gtagId` is ignored.
202
- */
203
- gtagIds?: GtagEnvironmentMap;
204
- /** Deployment environment label reported in session context. */
205
- environment?: TrackingEnvironment;
206
- /** Whether to capture attribution params from `window.location`. Defaults to true. */
207
- autoCaptureTrackingParams?: boolean;
208
- /** Whether the browser script should inject the default consent banner. */
209
- renderConsentBanner?: boolean;
210
- /** Attribution cookie max age in seconds. Defaults to 90 days. */
211
- cookieMaxAgeSeconds?: number;
212
- /** Override the install surface reported in payload context. */
213
- surface?: TrackingInstallSurface;
214
- }
215
- declare global {
216
- interface Window {
217
- gtag?: (...args: unknown[]) => void;
218
- dataLayer?: unknown[];
219
- AranovaTracking?: {
220
- init: (config: TrackingInitConfig) => void;
221
- captureTrackingParams: () => TrackingParams;
222
- getTrackingParams: () => TrackingParams;
223
- getConsentState: () => ConsentState;
224
- setConsentState: (state: 'granted' | 'denied') => void;
225
- trackEvent: (eventType: string, metadata: Record<string, unknown>) => void;
226
- };
227
- }
228
- }
229
-
230
75
  /**
231
76
  * Google Consent Mode value sent to `gtag('consent', 'update', ...)`.
232
77
  */
@@ -456,131 +301,6 @@ declare const formStartConfigSchema: z.ZodObject<{
456
301
  }>;
457
302
  type FormStartConfig = z.infer<typeof formStartConfigSchema>;
458
303
 
459
- /**
460
- * JSON-serializable value accepted by `form_submit.fields[].value`.
461
- *
462
- * This intentionally excludes `undefined`, functions, symbols, `Date`
463
- * instances, and non-finite numbers. Values are stored in PostgreSQL JSONB, so
464
- * consumers should send only data that has a stable JSON representation.
465
- */
466
- type JsonValue = string | number | boolean | null | JsonValue[] | {
467
- [key: string]: JsonValue;
468
- };
469
- /**
470
- * Metadata for a manually fired `form_submit` event.
471
- *
472
- * Register the event with `manual: { form_submit: {} }`, then call
473
- * `trackEvent('form_submit', metadata)` from the host site's submit handler.
474
- *
475
- * `fields` is optional. If present, each field value must be JSON-serializable
476
- * and should be explicitly allowlisted by the integration. Do not send names,
477
- * emails, visitor phone numbers, addresses, payment data, medical details,
478
- * passwords, file contents, or free-text messages.
479
- *
480
- * @example
481
- * ```ts
482
- * tracking.trackEvent('form_submit', {
483
- * form: {
484
- * id: 'lead-form',
485
- * action: '/api/lead',
486
- * fields: [
487
- * {
488
- * name: 'service_interest',
489
- * type: 'select',
490
- * label: 'Service interest',
491
- * value: 'teeth_whitening',
492
- * },
493
- * ],
494
- * },
495
- * page: { path: window.location.pathname },
496
- * });
497
- * ```
498
- */
499
- declare const formSubmitMetadataSchema: z.ZodObject<{
500
- form: z.ZodObject<{
501
- id: z.ZodString;
502
- action: z.ZodNullable<z.ZodString>;
503
- fields: z.ZodOptional<z.ZodArray<z.ZodObject<{
504
- name: z.ZodString;
505
- type: z.ZodString;
506
- label: z.ZodNullable<z.ZodString>;
507
- value: z.ZodType<JsonValue, z.ZodTypeDef, JsonValue>;
508
- }, "strict", z.ZodTypeAny, {
509
- label: string | null;
510
- value: JsonValue;
511
- type: string;
512
- name: string;
513
- }, {
514
- label: string | null;
515
- value: JsonValue;
516
- type: string;
517
- name: string;
518
- }>, "many">>;
519
- }, "strict", z.ZodTypeAny, {
520
- id: string;
521
- action: string | null;
522
- fields?: {
523
- label: string | null;
524
- value: JsonValue;
525
- type: string;
526
- name: string;
527
- }[] | undefined;
528
- }, {
529
- id: string;
530
- action: string | null;
531
- fields?: {
532
- label: string | null;
533
- value: JsonValue;
534
- type: string;
535
- name: string;
536
- }[] | undefined;
537
- }>;
538
- page: z.ZodObject<{
539
- path: z.ZodString;
540
- }, "strict", z.ZodTypeAny, {
541
- path: string;
542
- }, {
543
- path: string;
544
- }>;
545
- }, "strict", z.ZodTypeAny, {
546
- form: {
547
- id: string;
548
- action: string | null;
549
- fields?: {
550
- label: string | null;
551
- value: JsonValue;
552
- type: string;
553
- name: string;
554
- }[] | undefined;
555
- };
556
- page: {
557
- path: string;
558
- };
559
- }, {
560
- form: {
561
- id: string;
562
- action: string | null;
563
- fields?: {
564
- label: string | null;
565
- value: JsonValue;
566
- type: string;
567
- name: string;
568
- }[] | undefined;
569
- };
570
- page: {
571
- path: string;
572
- };
573
- }>;
574
- type FormSubmitMetadata = z.infer<typeof formSubmitMetadataSchema>;
575
- /**
576
- * Registration config for `form_submit`.
577
- *
578
- * This event is manual-only and currently has no registration options. The
579
- * empty object enables typed `trackEvent('form_submit', ...)` calls.
580
- */
581
- declare const formSubmitConfigSchema: z.ZodObject<{}, "strict", z.ZodTypeAny, {}, {}>;
582
- type FormSubmitConfig = z.infer<typeof formSubmitConfigSchema>;
583
-
584
304
  /**
585
305
  * Metadata for the automatic `multi_page_session` event.
586
306
  *
@@ -634,14 +354,14 @@ declare const pageViewMetadataSchema: z.ZodObject<{
634
354
  search: z.ZodString;
635
355
  hash: z.ZodString;
636
356
  }, "strict", z.ZodTypeAny, {
357
+ path: string;
637
358
  search: string;
638
359
  title: string | null;
639
- path: string;
640
360
  hash: string;
641
361
  }, {
362
+ path: string;
642
363
  search: string;
643
364
  title: string | null;
644
- path: string;
645
365
  hash: string;
646
366
  }>;
647
367
  referrer: z.ZodNullable<z.ZodString>;
@@ -657,9 +377,9 @@ declare const pageViewMetadataSchema: z.ZodObject<{
657
377
  }>>>;
658
378
  }, "strict", z.ZodTypeAny, {
659
379
  page: {
380
+ path: string;
660
381
  search: string;
661
382
  title: string | null;
662
- path: string;
663
383
  hash: string;
664
384
  };
665
385
  referrer: string | null;
@@ -669,9 +389,9 @@ declare const pageViewMetadataSchema: z.ZodObject<{
669
389
  } | null | undefined;
670
390
  }, {
671
391
  page: {
392
+ path: string;
672
393
  search: string;
673
394
  title: string | null;
674
- path: string;
675
395
  hash: string;
676
396
  };
677
397
  referrer: string | null;
@@ -880,14 +600,14 @@ declare const EVENT_REGISTRY: {
880
600
  search: z.ZodString;
881
601
  hash: z.ZodString;
882
602
  }, "strict", z.ZodTypeAny, {
603
+ path: string;
883
604
  search: string;
884
605
  title: string | null;
885
- path: string;
886
606
  hash: string;
887
607
  }, {
608
+ path: string;
888
609
  search: string;
889
610
  title: string | null;
890
- path: string;
891
611
  hash: string;
892
612
  }>;
893
613
  referrer: z.ZodNullable<z.ZodString>;
@@ -903,9 +623,9 @@ declare const EVENT_REGISTRY: {
903
623
  }>>>;
904
624
  }, "strict", z.ZodTypeAny, {
905
625
  page: {
626
+ path: string;
906
627
  search: string;
907
628
  title: string | null;
908
- path: string;
909
629
  hash: string;
910
630
  };
911
631
  referrer: string | null;
@@ -915,9 +635,9 @@ declare const EVENT_REGISTRY: {
915
635
  } | null | undefined;
916
636
  }, {
917
637
  page: {
638
+ path: string;
918
639
  search: string;
919
640
  title: string | null;
920
- path: string;
921
641
  hash: string;
922
642
  };
923
643
  referrer: string | null;
@@ -1161,33 +881,33 @@ declare const EVENT_REGISTRY: {
1161
881
  label: z.ZodNullable<z.ZodString>;
1162
882
  value: z.ZodType<src.JsonValue, z.ZodTypeDef, src.JsonValue>;
1163
883
  }, "strict", z.ZodTypeAny, {
1164
- label: string | null;
1165
884
  value: src.JsonValue;
1166
885
  type: string;
1167
886
  name: string;
1168
- }, {
1169
887
  label: string | null;
888
+ }, {
1170
889
  value: src.JsonValue;
1171
890
  type: string;
1172
891
  name: string;
892
+ label: string | null;
1173
893
  }>, "many">>;
1174
894
  }, "strict", z.ZodTypeAny, {
1175
895
  id: string;
1176
896
  action: string | null;
1177
897
  fields?: {
1178
- label: string | null;
1179
898
  value: src.JsonValue;
1180
899
  type: string;
1181
900
  name: string;
901
+ label: string | null;
1182
902
  }[] | undefined;
1183
903
  }, {
1184
904
  id: string;
1185
905
  action: string | null;
1186
906
  fields?: {
1187
- label: string | null;
1188
907
  value: src.JsonValue;
1189
908
  type: string;
1190
909
  name: string;
910
+ label: string | null;
1191
911
  }[] | undefined;
1192
912
  }>;
1193
913
  page: z.ZodObject<{
@@ -1202,10 +922,10 @@ declare const EVENT_REGISTRY: {
1202
922
  id: string;
1203
923
  action: string | null;
1204
924
  fields?: {
1205
- label: string | null;
1206
925
  value: src.JsonValue;
1207
926
  type: string;
1208
927
  name: string;
928
+ label: string | null;
1209
929
  }[] | undefined;
1210
930
  };
1211
931
  page: {
@@ -1216,10 +936,10 @@ declare const EVENT_REGISTRY: {
1216
936
  id: string;
1217
937
  action: string | null;
1218
938
  fields?: {
1219
- label: string | null;
1220
939
  value: src.JsonValue;
1221
940
  type: string;
1222
941
  name: string;
942
+ label: string | null;
1223
943
  }[] | undefined;
1224
944
  };
1225
945
  page: {
@@ -1505,12 +1225,32 @@ declare const saleItemSchema: z.ZodObject<{
1505
1225
  category?: string | null | undefined;
1506
1226
  unit_cost_cents?: number | null | undefined;
1507
1227
  }>;
1508
- declare const saleCreateSchema: z.ZodObject<{
1228
+ declare const saleServiceSchema: z.ZodObject<{
1229
+ service: z.ZodString;
1230
+ amount_cents: z.ZodNumber;
1231
+ }, "strict", z.ZodTypeAny, {
1232
+ service: string;
1233
+ amount_cents: number;
1234
+ }, {
1235
+ service: string;
1236
+ amount_cents: number;
1237
+ }>;
1238
+ declare const saleCreateSchema: z.ZodEffects<z.ZodObject<{
1509
1239
  external_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
1510
1240
  description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
1511
1241
  service: z.ZodOptional<z.ZodNullable<z.ZodString>>;
1242
+ services: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodObject<{
1243
+ service: z.ZodString;
1244
+ amount_cents: z.ZodNumber;
1245
+ }, "strict", z.ZodTypeAny, {
1246
+ service: string;
1247
+ amount_cents: number;
1248
+ }, {
1249
+ service: string;
1250
+ amount_cents: number;
1251
+ }>, "many">>>;
1512
1252
  currency: z.ZodEnum<["USD", "CAD"]>;
1513
- amount_total_cents: z.ZodNumber;
1253
+ amount_total_cents: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
1514
1254
  occurred_at: z.ZodString;
1515
1255
  environment: z.ZodDefault<z.ZodEnum<["production", "development"]>>;
1516
1256
  items: z.ZodDefault<z.ZodArray<z.ZodObject<{
@@ -1541,7 +1281,6 @@ declare const saleCreateSchema: z.ZodObject<{
1541
1281
  customer_email: z.ZodOptional<z.ZodNullable<z.ZodString>>;
1542
1282
  }, "strict", z.ZodTypeAny, {
1543
1283
  currency: "USD" | "CAD";
1544
- amount_total_cents: number;
1545
1284
  occurred_at: string;
1546
1285
  environment: "production" | "development";
1547
1286
  items: {
@@ -1553,20 +1292,77 @@ declare const saleCreateSchema: z.ZodObject<{
1553
1292
  unit_cost_cents?: number | null | undefined;
1554
1293
  }[];
1555
1294
  metadata?: Record<string, unknown> | null | undefined;
1295
+ service?: string | null | undefined;
1296
+ services?: {
1297
+ service: string;
1298
+ amount_cents: number;
1299
+ }[] | null | undefined;
1300
+ amount_total_cents?: number | null | undefined;
1556
1301
  external_id?: string | null | undefined;
1557
1302
  description?: string | null | undefined;
1558
- service?: string | null | undefined;
1559
1303
  customer_name?: string | null | undefined;
1560
1304
  customer_phone?: string | null | undefined;
1561
1305
  customer_email?: string | null | undefined;
1562
1306
  }, {
1563
1307
  currency: "USD" | "CAD";
1564
- amount_total_cents: number;
1565
1308
  occurred_at: string;
1566
1309
  metadata?: Record<string, unknown> | null | undefined;
1310
+ service?: string | null | undefined;
1311
+ services?: {
1312
+ service: string;
1313
+ amount_cents: number;
1314
+ }[] | null | undefined;
1315
+ amount_total_cents?: number | null | undefined;
1316
+ external_id?: string | null | undefined;
1317
+ description?: string | null | undefined;
1318
+ environment?: "production" | "development" | undefined;
1319
+ items?: {
1320
+ quantity: string;
1321
+ unit_price_cents: number;
1322
+ name?: string | null | undefined;
1323
+ external_item_id?: string | null | undefined;
1324
+ category?: string | null | undefined;
1325
+ unit_cost_cents?: number | null | undefined;
1326
+ }[] | undefined;
1327
+ customer_name?: string | null | undefined;
1328
+ customer_phone?: string | null | undefined;
1329
+ customer_email?: string | null | undefined;
1330
+ }>, {
1331
+ currency: "USD" | "CAD";
1332
+ occurred_at: string;
1333
+ environment: "production" | "development";
1334
+ items: {
1335
+ quantity: string;
1336
+ unit_price_cents: number;
1337
+ name?: string | null | undefined;
1338
+ external_item_id?: string | null | undefined;
1339
+ category?: string | null | undefined;
1340
+ unit_cost_cents?: number | null | undefined;
1341
+ }[];
1342
+ metadata?: Record<string, unknown> | null | undefined;
1343
+ service?: string | null | undefined;
1344
+ services?: {
1345
+ service: string;
1346
+ amount_cents: number;
1347
+ }[] | null | undefined;
1348
+ amount_total_cents?: number | null | undefined;
1567
1349
  external_id?: string | null | undefined;
1568
1350
  description?: string | null | undefined;
1351
+ customer_name?: string | null | undefined;
1352
+ customer_phone?: string | null | undefined;
1353
+ customer_email?: string | null | undefined;
1354
+ }, {
1355
+ currency: "USD" | "CAD";
1356
+ occurred_at: string;
1357
+ metadata?: Record<string, unknown> | null | undefined;
1569
1358
  service?: string | null | undefined;
1359
+ services?: {
1360
+ service: string;
1361
+ amount_cents: number;
1362
+ }[] | null | undefined;
1363
+ amount_total_cents?: number | null | undefined;
1364
+ external_id?: string | null | undefined;
1365
+ description?: string | null | undefined;
1570
1366
  environment?: "production" | "development" | undefined;
1571
1367
  items?: {
1572
1368
  quantity: string;
@@ -1580,9 +1376,19 @@ declare const saleCreateSchema: z.ZodObject<{
1580
1376
  customer_phone?: string | null | undefined;
1581
1377
  customer_email?: string | null | undefined;
1582
1378
  }>;
1583
- declare const saleUpdateSchema: z.ZodObject<{
1379
+ declare const saleUpdateSchema: z.ZodEffects<z.ZodObject<{
1584
1380
  description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
1585
1381
  service: z.ZodOptional<z.ZodNullable<z.ZodString>>;
1382
+ services: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodObject<{
1383
+ service: z.ZodString;
1384
+ amount_cents: z.ZodNumber;
1385
+ }, "strict", z.ZodTypeAny, {
1386
+ service: string;
1387
+ amount_cents: number;
1388
+ }, {
1389
+ service: string;
1390
+ amount_cents: number;
1391
+ }>, "many">>>;
1586
1392
  currency: z.ZodOptional<z.ZodEnum<["USD", "CAD"]>>;
1587
1393
  amount_total_cents: z.ZodOptional<z.ZodNumber>;
1588
1394
  occurred_at: z.ZodOptional<z.ZodString>;
@@ -1614,10 +1420,14 @@ declare const saleUpdateSchema: z.ZodObject<{
1614
1420
  customer_email: z.ZodOptional<z.ZodNullable<z.ZodString>>;
1615
1421
  }, "strict", z.ZodTypeAny, {
1616
1422
  metadata?: Record<string, unknown> | null | undefined;
1617
- description?: string | null | undefined;
1618
1423
  service?: string | null | undefined;
1619
- currency?: "USD" | "CAD" | undefined;
1424
+ services?: {
1425
+ service: string;
1426
+ amount_cents: number;
1427
+ }[] | null | undefined;
1620
1428
  amount_total_cents?: number | undefined;
1429
+ description?: string | null | undefined;
1430
+ currency?: "USD" | "CAD" | undefined;
1621
1431
  occurred_at?: string | undefined;
1622
1432
  items?: {
1623
1433
  quantity: string;
@@ -1632,10 +1442,58 @@ declare const saleUpdateSchema: z.ZodObject<{
1632
1442
  customer_email?: string | null | undefined;
1633
1443
  }, {
1634
1444
  metadata?: Record<string, unknown> | null | undefined;
1445
+ service?: string | null | undefined;
1446
+ services?: {
1447
+ service: string;
1448
+ amount_cents: number;
1449
+ }[] | null | undefined;
1450
+ amount_total_cents?: number | undefined;
1635
1451
  description?: string | null | undefined;
1452
+ currency?: "USD" | "CAD" | undefined;
1453
+ occurred_at?: string | undefined;
1454
+ items?: {
1455
+ quantity: string;
1456
+ unit_price_cents: number;
1457
+ name?: string | null | undefined;
1458
+ external_item_id?: string | null | undefined;
1459
+ category?: string | null | undefined;
1460
+ unit_cost_cents?: number | null | undefined;
1461
+ }[] | undefined;
1462
+ customer_name?: string | null | undefined;
1463
+ customer_phone?: string | null | undefined;
1464
+ customer_email?: string | null | undefined;
1465
+ }>, {
1466
+ metadata?: Record<string, unknown> | null | undefined;
1636
1467
  service?: string | null | undefined;
1468
+ services?: {
1469
+ service: string;
1470
+ amount_cents: number;
1471
+ }[] | null | undefined;
1472
+ amount_total_cents?: number | undefined;
1473
+ description?: string | null | undefined;
1637
1474
  currency?: "USD" | "CAD" | undefined;
1475
+ occurred_at?: string | undefined;
1476
+ items?: {
1477
+ quantity: string;
1478
+ unit_price_cents: number;
1479
+ name?: string | null | undefined;
1480
+ external_item_id?: string | null | undefined;
1481
+ category?: string | null | undefined;
1482
+ unit_cost_cents?: number | null | undefined;
1483
+ }[] | undefined;
1484
+ customer_name?: string | null | undefined;
1485
+ customer_phone?: string | null | undefined;
1486
+ customer_email?: string | null | undefined;
1487
+ }, {
1488
+ metadata?: Record<string, unknown> | null | undefined;
1489
+ service?: string | null | undefined;
1490
+ services?: {
1491
+ service: string;
1492
+ amount_cents: number;
1493
+ }[] | null | undefined;
1638
1494
  amount_total_cents?: number | undefined;
1495
+ description?: string | null | undefined;
1496
+ currency?: "USD" | "CAD" | undefined;
1639
1497
  occurred_at?: string | undefined;
1640
1498
  items?: {
1641
1499
  quantity: string;
@@ -1650,6 +1508,7 @@ declare const saleUpdateSchema: z.ZodObject<{
1650
1508
  customer_email?: string | null | undefined;
1651
1509
  }>;
1652
1510
  type SaleItemInput = z.input<typeof saleItemSchema>;
1511
+ type SaleServiceInput = z.input<typeof saleServiceSchema>;
1653
1512
  type SaleInput = z.input<typeof saleCreateSchema>;
1654
1513
  type SaleUpdateInput = z.input<typeof saleUpdateSchema>;
1655
1514
  interface SaleItem {
@@ -1661,6 +1520,13 @@ interface SaleItem {
1661
1520
  unit_price_cents: number;
1662
1521
  unit_cost_cents: number | null;
1663
1522
  }
1523
+ interface SaleService {
1524
+ id: string;
1525
+ service_id: string;
1526
+ service_key: string;
1527
+ service_label: string;
1528
+ amount_cents: number;
1529
+ }
1664
1530
  interface Sale {
1665
1531
  id: string;
1666
1532
  business_id: string;
@@ -1672,6 +1538,7 @@ interface Sale {
1672
1538
  service_id: string | null;
1673
1539
  service_key?: string | null;
1674
1540
  service_label?: string | null;
1541
+ services: SaleService[];
1675
1542
  occurred_at: string;
1676
1543
  environment: (typeof TRACKING_ENVIRONMENTS)[number];
1677
1544
  metadata: Record<string, unknown> | null;
@@ -1689,7 +1556,11 @@ interface SaleListPage {
1689
1556
  interface SaleCursorPage {
1690
1557
  items: Sale[];
1691
1558
  next_cursor: string | null;
1559
+ /** Populated only when `want_total` was requested (a single indexed COUNT). */
1560
+ total_count?: number;
1561
+ has_more?: boolean;
1692
1562
  }
1563
+ type SaleSortOrder = 'asc' | 'desc';
1693
1564
  /**
1694
1565
  * Comprehensive filter shape mirrored from the backend's `SaleQueryFilters`.
1695
1566
  *
@@ -1702,6 +1573,8 @@ interface SaleFilters {
1702
1573
  business_id?: string;
1703
1574
  external_id?: string;
1704
1575
  service_id?: string;
1576
+ /** E.164 phone — the canonical customer key; filters sales for one customer. */
1577
+ customer_phone?: string;
1705
1578
  currency?: SupportedCurrency;
1706
1579
  environment?: (typeof TRACKING_ENVIRONMENTS)[number];
1707
1580
  since?: string;
@@ -1725,6 +1598,15 @@ interface SaleListQuery extends SaleFilters {
1725
1598
  limit?: number;
1726
1599
  cursor?: string | null;
1727
1600
  }
1601
+ /** Keyset-safe sort columns (NOT-NULL, indexed). */
1602
+ type SaleKeysetSortField = 'occurred_at' | 'created_at' | 'amount_total_cents';
1603
+ /** v2 list query — adds server sort + opt-in total. */
1604
+ interface SaleListQueryV2 extends SaleListQuery {
1605
+ sort?: SaleKeysetSortField;
1606
+ order?: SaleSortOrder;
1607
+ /** Opt-in: a single indexed COUNT over the filtered set. */
1608
+ want_total?: boolean;
1609
+ }
1728
1610
  declare const TRACKING_RANGES: readonly ["24h", "7d", "30d"];
1729
1611
  type TrackingOverviewRange = (typeof TRACKING_RANGES)[number];
1730
1612
  /** Query input for `SalesClient.summary()` — filters + range + options. */
@@ -1780,6 +1662,175 @@ interface SaleSummary {
1780
1662
  by_category: SalesCategoryBreakdown[];
1781
1663
  series: SalesTrendPoint[];
1782
1664
  }
1665
+ declare const NAMED_RANGES: readonly ["today", "yesterday", "wtd", "mtd", "qtd", "ytd", "24h", "7d", "30d", "90d", "custom"];
1666
+ /** Superset of `TrackingOverviewRange` (`24h`/`7d`/`30d` stay valid). */
1667
+ type NamedRange = (typeof NAMED_RANGES)[number];
1668
+ type Granularity = 'hour' | 'day' | 'week' | 'month' | 'auto';
1669
+ type CompareTo = 'previous_period' | 'previous_year' | 'none';
1670
+ interface DistinctCustomersByCurrency {
1671
+ currency: SupportedCurrency;
1672
+ distinct_customers: number;
1673
+ }
1674
+ interface SummaryWindow {
1675
+ since: string;
1676
+ until: string;
1677
+ }
1678
+ interface SummaryCurrencyDelta {
1679
+ currency: SupportedCurrency;
1680
+ revenue_cents_delta: number;
1681
+ /** Ratio (0.12 = +12%); null when previous revenue was 0. */
1682
+ revenue_pct_delta: number | null;
1683
+ sale_count_delta: number;
1684
+ }
1685
+ interface SummaryDeltas {
1686
+ by_currency: SummaryCurrencyDelta[];
1687
+ sale_count_delta: number;
1688
+ distinct_customers_delta: number;
1689
+ }
1690
+ interface SaleSummaryPrevious {
1691
+ window: SummaryWindow;
1692
+ metrics: SaleSummaryV2['metrics'];
1693
+ by_currency: CurrencyRevenue[];
1694
+ series: SalesTrendPoint[];
1695
+ }
1696
+ /** Query input for `SalesClient.summary()` v2 — widened range + tz/compare options. */
1697
+ interface SaleSummaryQueryV2 extends SaleFilters {
1698
+ range?: NamedRange;
1699
+ /** Required when `range === 'custom'`. */
1700
+ since?: string;
1701
+ until?: string;
1702
+ /** IANA tz, e.g. `America/Toronto`. Default = business tz. */
1703
+ timezone?: string;
1704
+ granularity?: Granularity;
1705
+ compare_to?: CompareTo;
1706
+ include_categories?: boolean;
1707
+ include_deleted_services?: boolean;
1708
+ top_n?: number;
1709
+ }
1710
+ /** Superset of `SaleSummary` (assignable to it). */
1711
+ interface SaleSummaryV2 extends Omit<SaleSummary, 'range' | 'metrics'> {
1712
+ range: NamedRange;
1713
+ metrics: SaleSummary['metrics'] & {
1714
+ distinct_customers_by_currency: DistinctCustomersByCurrency[];
1715
+ };
1716
+ timezone: string | null;
1717
+ window: SummaryWindow | null;
1718
+ granularity: string | null;
1719
+ previous: SaleSummaryPrevious | null;
1720
+ deltas: SummaryDeltas | null;
1721
+ }
1722
+ type CustomerSegment = 'new' | 'returning' | 'repeat' | 'lapsed';
1723
+ type CustomerSortField = 'total_spent' | 'last_purchase' | 'purchases' | 'first_purchase';
1724
+ interface CustomerCurrencyTotal {
1725
+ currency: SupportedCurrency;
1726
+ revenue_cents: number;
1727
+ sale_count: number;
1728
+ average_order_value_cents: number;
1729
+ }
1730
+ interface CustomerSummary {
1731
+ /** The E.164 phone — the canonical customer id. */
1732
+ customer_id: string;
1733
+ display_name: string | null;
1734
+ email: string | null;
1735
+ phone: string;
1736
+ first_purchase_at: string;
1737
+ last_purchase_at: string;
1738
+ purchase_count: number;
1739
+ segment: CustomerSegment;
1740
+ totals: CustomerCurrencyTotal[];
1741
+ }
1742
+ type CustomerProfile = CustomerSummary;
1743
+ interface CustomerListQuery extends Omit<SaleFilters, 'external_id'> {
1744
+ segment?: CustomerSegment;
1745
+ sort?: CustomerSortField;
1746
+ order?: SaleSortOrder;
1747
+ cursor?: string | null;
1748
+ limit?: number;
1749
+ want_total?: boolean;
1750
+ }
1751
+ interface CustomerListPage {
1752
+ items: CustomerSummary[];
1753
+ next_cursor: string | null;
1754
+ total_count: number | null;
1755
+ }
1756
+ interface CustomerGetOptions {
1757
+ include_sales?: boolean;
1758
+ limit?: number;
1759
+ cursor?: string | null;
1760
+ }
1761
+ interface CustomerGetResult {
1762
+ customer: CustomerProfile;
1763
+ /** Present only when `include_sales: true` (and a business-scoped key). */
1764
+ sales?: SaleCursorPage | null;
1765
+ }
1766
+ interface CustomerSummaryQuery extends SaleFilters {
1767
+ range?: NamedRange;
1768
+ since?: string;
1769
+ until?: string;
1770
+ timezone?: string;
1771
+ compare_to?: CompareTo;
1772
+ }
1773
+ interface CustomerSegmentCount {
1774
+ segment: CustomerSegment;
1775
+ count: number;
1776
+ }
1777
+ interface CustomerCurrencyDelta {
1778
+ currency: SupportedCurrency;
1779
+ revenue_cents_delta: number;
1780
+ /** Ratio (0.12 = +12%); null when previous revenue was 0. */
1781
+ revenue_pct_delta: number | null;
1782
+ }
1783
+ interface CustomerKpisDeltas {
1784
+ total_customers_delta: number;
1785
+ new_customers_delta: number;
1786
+ returning_customers_delta: number;
1787
+ repeat_rate_delta: number;
1788
+ ltv_by_currency: CustomerCurrencyDelta[];
1789
+ }
1790
+ interface CustomerKpisPrevious {
1791
+ window_since: string;
1792
+ window_until: string;
1793
+ total_customers: number;
1794
+ new_customers: number;
1795
+ returning_customers: number;
1796
+ repeat_rate: number;
1797
+ ltv_by_currency: CustomerCurrencyTotal[];
1798
+ }
1799
+ interface CustomerKpis {
1800
+ range: NamedRange;
1801
+ timezone: string;
1802
+ window_since: string;
1803
+ window_until: string;
1804
+ total_customers: number;
1805
+ new_customers: number;
1806
+ returning_customers: number;
1807
+ repeat_rate: number;
1808
+ by_segment: CustomerSegmentCount[];
1809
+ ltv_by_currency: CustomerCurrencyTotal[];
1810
+ /** Present only when `compare_to` is set. */
1811
+ previous?: CustomerKpisPrevious | null;
1812
+ deltas?: CustomerKpisDeltas | null;
1813
+ }
1814
+ interface BusinessConfigService {
1815
+ key: string;
1816
+ label: string;
1817
+ archived: boolean;
1818
+ }
1819
+ interface BusinessConfigFeatures {
1820
+ customers: boolean;
1821
+ comparisons: boolean;
1822
+ retention: boolean;
1823
+ }
1824
+ interface BusinessConfig {
1825
+ business_id: string;
1826
+ display_name: string;
1827
+ timezone: string;
1828
+ primary_currency: SupportedCurrency;
1829
+ currencies: SupportedCurrency[];
1830
+ default_phone_country: string | null;
1831
+ services: BusinessConfigService[];
1832
+ features: BusinessConfigFeatures;
1833
+ }
1783
1834
 
1784
1835
  /** Shared config for every sales HTTP helper. */
1785
1836
  interface SalesTransportConfig {
@@ -1802,6 +1853,17 @@ interface SalesClientConfig extends SalesTransportConfig {
1802
1853
  /** Applied when an individual `record()` call omits `currency`. */
1803
1854
  defaultCurrency?: SupportedCurrency;
1804
1855
  }
1856
+ /** Phone-keyed customer rollups (sk-only; a public key gets a `403`). */
1857
+ interface SalesCustomersClient {
1858
+ list(query?: CustomerListQuery): Promise<CustomerListPage>;
1859
+ /** `id` is the customer's E.164 phone. */
1860
+ get(id: string, options?: CustomerGetOptions): Promise<CustomerGetResult>;
1861
+ summary(query?: CustomerSummaryQuery): Promise<CustomerKpis>;
1862
+ }
1863
+ /** Business config (low-sensitivity — accepts a public or secret key). */
1864
+ interface SalesBusinessClient {
1865
+ config(): Promise<BusinessConfig>;
1866
+ }
1805
1867
  /**
1806
1868
  * One isomorphic sales client — what a key may *do* is enforced by the backend,
1807
1869
  * not by hiding methods. A **public** key (`aranv_pk_…`) may `record` (the
@@ -1813,23 +1875,36 @@ interface SalesClientConfig extends SalesTransportConfig {
1813
1875
  * `@aranova/tracking-cli gen` for compile-time-checked `service` values.
1814
1876
  */
1815
1877
  interface SalesClient<TService extends string = string> {
1816
- record(input: Omit<SaleInput, 'currency' | 'occurred_at' | 'service'> & {
1878
+ record(input: Omit<SaleInput, 'currency' | 'occurred_at' | 'service' | 'services'> & {
1817
1879
  service?: TService | null;
1880
+ services?: Array<{
1881
+ service: TService;
1882
+ amount_cents: number;
1883
+ }>;
1818
1884
  currency?: SupportedCurrency;
1819
1885
  occurred_at?: string;
1820
1886
  }): Promise<Sale>;
1821
- list(query?: SaleListQuery): Promise<SaleCursorPage>;
1887
+ /** Keyset list with optional server sort + opt-in `total_count`. */
1888
+ list(query?: SaleListQueryV2): Promise<SaleCursorPage>;
1822
1889
  /**
1823
- * Currency-grouped aggregations for the key's business (revenue per currency,
1824
- * AOV, distinct customers, by-service / by-currency / by-category breakdowns,
1825
- * and a revenue/count trend). Secret key only a public key gets a `403`.
1890
+ * Currency-grouped aggregations for the key's business. Additive v2 options:
1891
+ * calendar/custom ranges, IANA `timezone`, `granularity`, and `compare_to`.
1892
+ * Legacy `24h/7d/30d` keep their exact prior numbers. Secret key only.
1826
1893
  */
1827
- summary(query: SaleSummaryQuery): Promise<SaleSummary>;
1894
+ summary(query: SaleSummaryQueryV2): Promise<SaleSummaryV2>;
1828
1895
  get(id: string): Promise<Sale>;
1829
- update(id: string, patch: Omit<SaleUpdateInput, 'service'> & {
1896
+ update(id: string, patch: Omit<SaleUpdateInput, 'service' | 'services'> & {
1830
1897
  service?: TService | null;
1898
+ services?: Array<{
1899
+ service: TService;
1900
+ amount_cents: number;
1901
+ }>;
1831
1902
  }): Promise<Sale>;
1832
1903
  delete(id: string): Promise<void>;
1904
+ /** Phone-keyed customer rollups (sk-only). */
1905
+ customers: SalesCustomersClient;
1906
+ /** Business config (pk or sk). */
1907
+ business: SalesBusinessClient;
1833
1908
  }
1834
1909
  declare function createSalesClient<TService extends string = string>(config: SalesClientConfig): SalesClient<TService>;
1835
1910
 
@@ -1861,6 +1936,12 @@ declare function fromMinor(cents: number, currency: SupportedCurrency): number;
1861
1936
  * Uses the built-in `Intl.NumberFormat` — no extra dependency.
1862
1937
  */
1863
1938
  declare function formatMoney(cents: number, currency: SupportedCurrency, locale?: string): string;
1939
+ /**
1940
+ * Format an ISO timestamp in a specific IANA time zone (e.g. `America/Toronto`),
1941
+ * so dashboards stop hand-rolling `Intl`. Defaults to a short date-time; pass
1942
+ * `opts` to override fields. The `timeZone` is always forced to the argument.
1943
+ */
1944
+ declare function formatDateInTz(iso: string, timeZone: string, opts?: Intl.DateTimeFormatOptions, locale?: string): string;
1864
1945
 
1865
1946
  /**
1866
1947
  * Error thrown by the sales client (`createSalesClient`) on a
@@ -1989,6 +2070,11 @@ interface CreateTrackingOptions<TRegistry extends TriggerRegistryConfig> {
1989
2070
  * loudly. Leave off in prod; turn on in dev to catch shape bugs early.
1990
2071
  */
1991
2072
  debug?: boolean;
2073
+ /**
2074
+ * Phone-field display + default-country config, read by `usePhoneField` /
2075
+ * `<PhoneField>`. Display is customizable; the transmitted value is always E.164.
2076
+ */
2077
+ phone?: PhoneConfig;
1992
2078
  }
1993
2079
  interface TrackingProviderProps {
1994
2080
  /**
@@ -2024,4 +2110,71 @@ interface CreateTrackingResult<TRegistry extends TriggerRegistryConfig> {
2024
2110
  }
2025
2111
  declare function createTracking<TRegistry extends TriggerRegistryConfig>(options: CreateTrackingOptions<TRegistry>): CreateTrackingResult<TRegistry>;
2026
2112
 
2027
- export { AranovaApiError, type AutomaticEventName, ConsentBanner, type ConsentBannerProps, type ConsentState, type CreateTrackingOptions, type CreateTrackingResult, type CtaClickConfig, type CtaClickMetadata, type CurrencyRevenue, type EventConfig, type EventMetadata, type EventName, type FormStartConfig, type FormStartMetadata, type FormSubmitConfig, type FormSubmitMetadata, GoogleAdsTracking, type GoogleAdsTrackingProps, type JsonValue, type ManualEventName, type MultiPageSessionConfig, type MultiPageSessionMetadata, type PageViewConfig, type PageViewMetadata, type PhoneClickConfig, type PhoneClickMetadata, type PublicServiceItem, type RegisteredAutomaticEvents, type RegisteredManualEvents, type Sale, type SaleCursorPage, type SaleInput, type SaleItem, type SaleItemInput, type SaleListPage, type SaleListQuery, type SaleSummary, type SaleSummaryQuery, type SaleUpdateInput, type SalesCategoryBreakdown, type SalesClient, type SalesClientConfig, type SalesServiceBreakdown, type SalesTransportConfig, type SalesTrendPoint, type ScrollDepthConfig, type ScrollDepthMetadata, type SpecificPageName, type SpecificPageVisitConfig, type SpecificPageVisitMetadata, type SupportedCurrency, TRACKING_PARAM_KEYS, type TimeOnSiteConfig, type TimeOnSiteMetadata, type TrackingClient, type TrackingClientContext, type TrackingEventCreatePayload, type TrackingInitConfig, type TrackingInstallSurface, type TrackingOverviewRange, type TrackingParams, type TrackingProviderProps, type TrackingSessionUpsertPayload, type TriggerRegistryConfig, type TypedTrackEventOptions, type TypedTrackingClient, type UseConsentResult, captureTrackingParamsFromLocation, createSalesClient, createTracking, createTrackingClientContext, createTrackingEventCreatePayload, createTrackingSessionUpsertPayload, fetchServices, formatMoney, fromMinor, getConsentState, resetConsent, setConsentState, toMinor, useConsent, useConsentState, useGclid, useTrackingParams };
2113
+ /** Carries `createTracking({ phone })` config to `usePhoneField`. Separate from the
2114
+ * tracking client context so `useTracking()`'s type is untouched.
2115
+ *
2116
+ * Caveat: this module is bundled into BOTH `@aranova/tracking-react` and
2117
+ * `@aranova/tracking-next`, so each package has its own context instance at
2118
+ * runtime. Within one installed package the provider + hook share it (correct);
2119
+ * mixing `createTracking` from one package with `usePhoneField` from the other
2120
+ * won't share config (the hook falls back to the `CA`/`national` defaults). Use a
2121
+ * single tracking package per app. */
2122
+ declare const PhoneConfigContext: react.Context<PhoneConfig | null>;
2123
+ /** Resolve the effective phone config (provider value or built-in defaults). */
2124
+ declare function usePhoneConfig(): {
2125
+ defaultCountry: CountryCode;
2126
+ display: PhoneDisplayFormat;
2127
+ };
2128
+ interface UsePhoneFieldOptions {
2129
+ defaultValue?: string;
2130
+ /** Overrides the provider's `defaultCountry`. */
2131
+ country?: CountryCode;
2132
+ /** Overrides the provider's `display` (applied to the settled value on blur). */
2133
+ display?: PhoneDisplayFormat;
2134
+ /** Notified with the canonical E.164 (or `null`) on every change. */
2135
+ onValueChange?: (e164: string | null) => void;
2136
+ }
2137
+ interface PhoneInputProps {
2138
+ value: string;
2139
+ onChange: (event: ChangeEvent<HTMLInputElement>) => void;
2140
+ onBlur: (event: FocusEvent<HTMLInputElement>) => void;
2141
+ type: 'tel';
2142
+ inputMode: 'tel';
2143
+ autoComplete: 'tel';
2144
+ }
2145
+ interface PhoneFieldApi {
2146
+ /** Display value for the `<input>` (live `AsYouType` while typing). */
2147
+ value: string;
2148
+ /** Canonical E.164 — what gets transmitted. `null` while invalid/incomplete. */
2149
+ e164: string | null;
2150
+ isValid: boolean;
2151
+ /** Validation message, surfaced only after blur with non-empty invalid input. */
2152
+ error: string | null;
2153
+ parsed: ParsedPhone;
2154
+ /** Spread onto an `<input>`: pre-wires value/onChange/onBlur/type/inputMode/autoComplete. */
2155
+ inputProps: PhoneInputProps;
2156
+ }
2157
+ /** Headless phone field — the client owns the markup. */
2158
+ declare function usePhoneField(opts?: UsePhoneFieldOptions): PhoneFieldApi;
2159
+ interface PhoneFieldProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'value' | 'onChange'> {
2160
+ country?: CountryCode;
2161
+ /** Controlled display value. */
2162
+ value?: string;
2163
+ /** Uncontrolled initial value. */
2164
+ defaultValue?: string;
2165
+ /** Receives the native change event (RHF `register().onChange` or your own); the
2166
+ * event's `target.value` is already `AsYouType`-formatted. */
2167
+ onChange?: (event: ChangeEvent<HTMLInputElement>) => void;
2168
+ /** Receives the canonical E.164 (or `null`) on every change. */
2169
+ onE164Change?: (e164: string | null) => void;
2170
+ }
2171
+ /**
2172
+ * Batteries-included phone input. Composes identically with react-hook-form
2173
+ * `{...register('phone')}` and with controlled state — the `AsYouType` +
2174
+ * mutate-`e.target.value`-before-`onChange` technique lives inside, so RHF and
2175
+ * controlled parents both receive the formatted value, and the wire value stays
2176
+ * E.164.
2177
+ */
2178
+ declare const PhoneField: react.ForwardRefExoticComponent<PhoneFieldProps & react.RefAttributes<HTMLInputElement>>;
2179
+
2180
+ export { AranovaApiError, type AutomaticEventName, type BusinessConfig, type BusinessConfigFeatures, type BusinessConfigService, type CompareTo, ConsentBanner, type ConsentBannerProps, ConsentState, type CreateTrackingOptions, type CreateTrackingResult, type CtaClickConfig, type CtaClickMetadata, type CurrencyRevenue, type CustomerCurrencyDelta, type CustomerCurrencyTotal, type CustomerGetOptions, type CustomerGetResult, type CustomerKpis, type CustomerKpisDeltas, type CustomerKpisPrevious, type CustomerListPage, type CustomerListQuery, type CustomerProfile, type CustomerSegment, type CustomerSegmentCount, type CustomerSortField, type CustomerSummary, type CustomerSummaryQuery, type DistinctCustomersByCurrency, type EventConfig, type EventMetadata, type EventName, type FormStartConfig, type FormStartMetadata, FormSubmitConfig, FormSubmitMetadata, GoogleAdsTracking, type GoogleAdsTrackingProps, type Granularity, type ManualEventName, type MultiPageSessionConfig, type MultiPageSessionMetadata, type NamedRange, type PageViewConfig, type PageViewMetadata, ParsedPhone, type PhoneClickConfig, type PhoneClickMetadata, PhoneConfig, PhoneConfigContext, PhoneDisplayFormat, PhoneField, type PhoneFieldApi, type PhoneFieldProps, type PhoneInputProps, type PublicServiceItem, type RegisteredAutomaticEvents, type RegisteredManualEvents, type Sale, type SaleCursorPage, type SaleInput, type SaleItem, type SaleItemInput, type SaleKeysetSortField, type SaleListPage, type SaleListQuery, type SaleListQueryV2, type SaleService, type SaleServiceInput, type SaleSortOrder, type SaleSummary, type SaleSummaryPrevious, type SaleSummaryQuery, type SaleSummaryQueryV2, type SaleSummaryV2, type SaleUpdateInput, type SalesBusinessClient, type SalesCategoryBreakdown, type SalesClient, type SalesClientConfig, type SalesCustomersClient, type SalesServiceBreakdown, type SalesTransportConfig, type SalesTrendPoint, type ScrollDepthConfig, type ScrollDepthMetadata, type SpecificPageName, type SpecificPageVisitConfig, type SpecificPageVisitMetadata, type SummaryCurrencyDelta, type SummaryDeltas, type SummaryWindow, type SupportedCurrency, TRACKING_PARAM_KEYS, type TimeOnSiteConfig, type TimeOnSiteMetadata, type TrackingClient, TrackingClientContext, TrackingEventCreatePayload, TrackingInstallSurface, type TrackingOverviewRange, TrackingParams, type TrackingProviderProps, TrackingSessionUpsertPayload, type TriggerRegistryConfig, type TypedTrackEventOptions, type TypedTrackingClient, type UseConsentResult, type UsePhoneFieldOptions, captureTrackingParamsFromLocation, createSalesClient, createTracking, createTrackingClientContext, createTrackingEventCreatePayload, createTrackingSessionUpsertPayload, fetchServices, formatDateInTz, formatMoney, fromMinor, getConsentState, resetConsent, setConsentState, toMinor, useConsent, useConsentState, useGclid, usePhoneConfig, usePhoneField, useTrackingParams };