@grainql/analytics-web 2.3.0 → 2.5.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.
Files changed (66) hide show
  1. package/dist/cjs/countries.d.ts +13 -0
  2. package/dist/cjs/countries.d.ts.map +1 -0
  3. package/dist/cjs/countries.js +2907 -0
  4. package/dist/cjs/countries.js.map +1 -0
  5. package/dist/cjs/index.d.ts +29 -1
  6. package/dist/cjs/index.d.ts.map +1 -1
  7. package/dist/cjs/index.js.map +1 -1
  8. package/dist/cjs/interaction-tracking.d.ts +71 -0
  9. package/dist/cjs/interaction-tracking.d.ts.map +1 -0
  10. package/dist/cjs/interaction-tracking.js +270 -0
  11. package/dist/cjs/interaction-tracking.js.map +1 -0
  12. package/dist/cjs/page-tracking.d.ts.map +1 -1
  13. package/dist/cjs/page-tracking.js +5 -1
  14. package/dist/cjs/page-tracking.js.map +1 -1
  15. package/dist/cjs/section-tracking.d.ts +91 -0
  16. package/dist/cjs/section-tracking.d.ts.map +1 -0
  17. package/dist/cjs/section-tracking.js +373 -0
  18. package/dist/cjs/section-tracking.js.map +1 -0
  19. package/dist/cjs/types/auto-tracking.d.ts +55 -0
  20. package/dist/cjs/types/auto-tracking.d.ts.map +1 -0
  21. package/dist/cjs/types/auto-tracking.js +6 -0
  22. package/dist/cjs/types/auto-tracking.js.map +1 -0
  23. package/dist/countries.d.ts +13 -0
  24. package/dist/countries.d.ts.map +1 -0
  25. package/dist/countries.js +2907 -0
  26. package/dist/esm/countries.d.ts +13 -0
  27. package/dist/esm/countries.d.ts.map +1 -0
  28. package/dist/esm/countries.js +2902 -0
  29. package/dist/esm/countries.js.map +1 -0
  30. package/dist/esm/index.d.ts +29 -1
  31. package/dist/esm/index.d.ts.map +1 -1
  32. package/dist/esm/index.js.map +1 -1
  33. package/dist/esm/interaction-tracking.d.ts +71 -0
  34. package/dist/esm/interaction-tracking.d.ts.map +1 -0
  35. package/dist/esm/interaction-tracking.js +266 -0
  36. package/dist/esm/interaction-tracking.js.map +1 -0
  37. package/dist/esm/page-tracking.d.ts.map +1 -1
  38. package/dist/esm/page-tracking.js +5 -1
  39. package/dist/esm/page-tracking.js.map +1 -1
  40. package/dist/esm/section-tracking.d.ts +91 -0
  41. package/dist/esm/section-tracking.d.ts.map +1 -0
  42. package/dist/esm/section-tracking.js +369 -0
  43. package/dist/esm/section-tracking.js.map +1 -0
  44. package/dist/esm/types/auto-tracking.d.ts +55 -0
  45. package/dist/esm/types/auto-tracking.d.ts.map +1 -0
  46. package/dist/esm/types/auto-tracking.js +5 -0
  47. package/dist/esm/types/auto-tracking.js.map +1 -0
  48. package/dist/index.d.ts +29 -1
  49. package/dist/index.d.ts.map +1 -1
  50. package/dist/index.global.dev.js +3609 -2
  51. package/dist/index.global.dev.js.map +4 -4
  52. package/dist/index.global.js +2 -2
  53. package/dist/index.global.js.map +4 -4
  54. package/dist/index.js +130 -1
  55. package/dist/index.mjs +93 -0
  56. package/dist/interaction-tracking.d.ts +71 -0
  57. package/dist/interaction-tracking.d.ts.map +1 -0
  58. package/dist/interaction-tracking.js +270 -0
  59. package/dist/page-tracking.d.ts.map +1 -1
  60. package/dist/page-tracking.js +5 -1
  61. package/dist/section-tracking.d.ts +91 -0
  62. package/dist/section-tracking.d.ts.map +1 -0
  63. package/dist/section-tracking.js +373 -0
  64. package/dist/types/auto-tracking.d.ts +55 -0
  65. package/dist/types/auto-tracking.d.ts.map +1 -0
  66. package/package.json +1 -1
@@ -0,0 +1,373 @@
1
+ "use strict";
2
+ /**
3
+ * Section Tracking Manager for Grain Analytics
4
+ * Intelligent scroll tracking with viewport metrics, visible sections, and engagement analysis
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.SectionTrackingManager = void 0;
8
+ const DEFAULT_OPTIONS = {
9
+ minDwellTime: 1000, // 1 second minimum
10
+ scrollVelocityThreshold: 500, // 500px/s
11
+ intersectionThreshold: 0.1, // 10% visible
12
+ debounceDelay: 100,
13
+ batchDelay: 2000, // 2 seconds
14
+ debug: false,
15
+ };
16
+ class SectionTrackingManager {
17
+ constructor(tracker, sections, options = {}) {
18
+ this.isDestroyed = false;
19
+ // Tracking state
20
+ this.sectionStates = new Map();
21
+ this.intersectionObserver = null;
22
+ this.xpathCache = new Map();
23
+ // Scroll tracking
24
+ this.lastScrollPosition = 0;
25
+ this.lastScrollTime = Date.now();
26
+ this.scrollVelocity = 0;
27
+ this.scrollDebounceTimer = null;
28
+ // Event batching
29
+ this.pendingEvents = [];
30
+ this.batchTimer = null;
31
+ this.tracker = tracker;
32
+ this.sections = sections;
33
+ this.options = { ...DEFAULT_OPTIONS, ...options };
34
+ if (typeof window !== 'undefined' && typeof document !== 'undefined') {
35
+ // Initialize after DOM is ready
36
+ if (document.readyState === 'loading') {
37
+ document.addEventListener('DOMContentLoaded', () => this.initialize());
38
+ }
39
+ else {
40
+ setTimeout(() => this.initialize(), 0);
41
+ }
42
+ }
43
+ }
44
+ /**
45
+ * Initialize section tracking
46
+ */
47
+ initialize() {
48
+ if (this.isDestroyed)
49
+ return;
50
+ this.log('Initializing section tracking for', this.sections.length, 'sections');
51
+ // Setup intersection observer
52
+ this.setupIntersectionObserver();
53
+ // Setup scroll listener for velocity tracking
54
+ this.setupScrollListener();
55
+ // Initialize sections
56
+ this.initializeSections();
57
+ }
58
+ /**
59
+ * Setup IntersectionObserver for section visibility
60
+ */
61
+ setupIntersectionObserver() {
62
+ if (typeof IntersectionObserver === 'undefined') {
63
+ this.log('IntersectionObserver not supported');
64
+ return;
65
+ }
66
+ this.intersectionObserver = new IntersectionObserver((entries) => {
67
+ entries.forEach((entry) => {
68
+ this.handleIntersection(entry);
69
+ });
70
+ }, {
71
+ threshold: [0, 0.1, 0.25, 0.5, 0.75, 1.0],
72
+ rootMargin: '0px',
73
+ });
74
+ this.log('IntersectionObserver created');
75
+ }
76
+ /**
77
+ * Setup scroll listener for velocity calculation
78
+ */
79
+ setupScrollListener() {
80
+ if (typeof window === 'undefined')
81
+ return;
82
+ const scrollHandler = () => {
83
+ if (this.scrollDebounceTimer !== null) {
84
+ clearTimeout(this.scrollDebounceTimer);
85
+ }
86
+ this.scrollDebounceTimer = window.setTimeout(() => {
87
+ this.updateScrollVelocity();
88
+ this.scrollDebounceTimer = null;
89
+ }, this.options.debounceDelay);
90
+ };
91
+ window.addEventListener('scroll', scrollHandler, { passive: true });
92
+ this.log('Scroll listener attached');
93
+ }
94
+ /**
95
+ * Initialize sections and start observing
96
+ */
97
+ initializeSections() {
98
+ for (const section of this.sections) {
99
+ const element = this.findElementByXPath(section.selector);
100
+ if (!element) {
101
+ this.log('Section element not found:', section.sectionName, 'selector:', section.selector);
102
+ continue;
103
+ }
104
+ // Initialize state
105
+ const state = {
106
+ element,
107
+ config: section,
108
+ entryTime: null,
109
+ exitTime: null,
110
+ isVisible: false,
111
+ lastScrollPosition: window.scrollY,
112
+ lastScrollTime: Date.now(),
113
+ entryScrollSpeed: 0,
114
+ exitScrollSpeed: 0,
115
+ maxVisibleArea: 0,
116
+ };
117
+ this.sectionStates.set(section.sectionName, state);
118
+ // Start observing
119
+ if (this.intersectionObserver) {
120
+ this.intersectionObserver.observe(element);
121
+ }
122
+ this.log('Section initialized and observed:', section.sectionName);
123
+ }
124
+ }
125
+ /**
126
+ * Handle intersection observer entry
127
+ */
128
+ handleIntersection(entry) {
129
+ if (this.isDestroyed)
130
+ return;
131
+ // Find which section this element belongs to
132
+ const state = Array.from(this.sectionStates.values()).find((s) => s.element === entry.target);
133
+ if (!state)
134
+ return;
135
+ const isVisible = entry.isIntersecting && entry.intersectionRatio >= this.options.intersectionThreshold;
136
+ const visibleArea = entry.intersectionRatio;
137
+ // Update max visible area
138
+ if (visibleArea > state.maxVisibleArea) {
139
+ state.maxVisibleArea = visibleArea;
140
+ }
141
+ // Handle visibility change
142
+ if (isVisible && !state.isVisible) {
143
+ // Section became visible
144
+ this.handleSectionEntry(state);
145
+ }
146
+ else if (!isVisible && state.isVisible) {
147
+ // Section became invisible
148
+ this.handleSectionExit(state);
149
+ }
150
+ state.isVisible = isVisible;
151
+ }
152
+ /**
153
+ * Handle section entry (became visible)
154
+ */
155
+ handleSectionEntry(state) {
156
+ this.log('Section entered view:', state.config.sectionName);
157
+ state.entryTime = Date.now();
158
+ state.entryScrollSpeed = this.scrollVelocity;
159
+ state.lastScrollPosition = window.scrollY;
160
+ state.lastScrollTime = Date.now();
161
+ state.maxVisibleArea = 0;
162
+ }
163
+ /**
164
+ * Handle section exit (became invisible)
165
+ */
166
+ handleSectionExit(state) {
167
+ this.log('Section exited view:', state.config.sectionName);
168
+ if (state.entryTime === null)
169
+ return;
170
+ state.exitTime = Date.now();
171
+ state.exitScrollSpeed = this.scrollVelocity;
172
+ const duration = state.exitTime - state.entryTime;
173
+ // Create section view data
174
+ const viewData = {
175
+ sectionName: state.config.sectionName,
176
+ sectionType: state.config.sectionType,
177
+ entryTime: state.entryTime,
178
+ exitTime: state.exitTime,
179
+ duration,
180
+ viewportWidth: window.innerWidth,
181
+ viewportHeight: window.innerHeight,
182
+ scrollDepth: this.calculateScrollDepth(),
183
+ visibleAreaPercentage: Math.round(state.maxVisibleArea * 100),
184
+ scrollSpeedAtEntry: state.entryScrollSpeed,
185
+ scrollSpeedAtExit: state.exitScrollSpeed,
186
+ };
187
+ // Apply sanitization and track if valid
188
+ if (this.shouldTrackSection(viewData)) {
189
+ this.queueSectionView(viewData);
190
+ }
191
+ else {
192
+ this.log('Section view filtered out:', state.config.sectionName, 'duration:', duration);
193
+ }
194
+ // Reset entry time
195
+ state.entryTime = null;
196
+ }
197
+ /**
198
+ * Update scroll velocity
199
+ */
200
+ updateScrollVelocity() {
201
+ const now = Date.now();
202
+ const currentPosition = window.scrollY;
203
+ const timeDelta = now - this.lastScrollTime;
204
+ const positionDelta = Math.abs(currentPosition - this.lastScrollPosition);
205
+ if (timeDelta > 0) {
206
+ this.scrollVelocity = (positionDelta / timeDelta) * 1000; // pixels per second
207
+ }
208
+ this.lastScrollPosition = currentPosition;
209
+ this.lastScrollTime = now;
210
+ }
211
+ /**
212
+ * Calculate current scroll depth as percentage
213
+ */
214
+ calculateScrollDepth() {
215
+ if (typeof window === 'undefined' || typeof document === 'undefined')
216
+ return 0;
217
+ const windowHeight = window.innerHeight;
218
+ const documentHeight = Math.max(document.body.scrollHeight, document.body.offsetHeight, document.documentElement.clientHeight, document.documentElement.scrollHeight, document.documentElement.offsetHeight);
219
+ const scrollTop = window.scrollY;
220
+ const scrollableHeight = documentHeight - windowHeight;
221
+ if (scrollableHeight <= 0)
222
+ return 100;
223
+ return Math.round((scrollTop / scrollableHeight) * 100);
224
+ }
225
+ /**
226
+ * Determine if section view should be tracked (sanitization)
227
+ */
228
+ shouldTrackSection(viewData) {
229
+ // Minimum dwell time check
230
+ if (viewData.duration < this.options.minDwellTime) {
231
+ return false;
232
+ }
233
+ // Check if user was rapidly scrolling through
234
+ const avgScrollSpeed = (viewData.scrollSpeedAtEntry + viewData.scrollSpeedAtExit) / 2;
235
+ if (avgScrollSpeed > this.options.scrollVelocityThreshold * 2) {
236
+ // Very fast scroll - likely not engaged
237
+ return false;
238
+ }
239
+ // Must have had some meaningful visible area
240
+ if (viewData.visibleAreaPercentage < 10) {
241
+ return false;
242
+ }
243
+ return true;
244
+ }
245
+ /**
246
+ * Queue section view for batching
247
+ */
248
+ queueSectionView(viewData) {
249
+ this.pendingEvents.push(viewData);
250
+ this.log('Queued section view:', viewData.sectionName, 'duration:', viewData.duration);
251
+ // Setup batch timer if not already set
252
+ if (this.batchTimer === null) {
253
+ this.batchTimer = window.setTimeout(() => {
254
+ this.flushPendingEvents();
255
+ }, this.options.batchDelay);
256
+ }
257
+ }
258
+ /**
259
+ * Flush pending section view events
260
+ */
261
+ flushPendingEvents() {
262
+ if (this.isDestroyed || this.pendingEvents.length === 0)
263
+ return;
264
+ if (!this.tracker.hasConsent('analytics')) {
265
+ this.pendingEvents = [];
266
+ return;
267
+ }
268
+ this.log('Flushing', this.pendingEvents.length, 'section view events');
269
+ // Track each section view
270
+ for (const viewData of this.pendingEvents) {
271
+ this.tracker.trackSystemEvent('_grain_section_view', {
272
+ section_name: viewData.sectionName,
273
+ section_type: viewData.sectionType,
274
+ duration_ms: viewData.duration,
275
+ viewport_width: viewData.viewportWidth,
276
+ viewport_height: viewData.viewportHeight,
277
+ scroll_depth_percent: viewData.scrollDepth,
278
+ visible_area_percent: viewData.visibleAreaPercentage,
279
+ scroll_speed_entry: Math.round(viewData.scrollSpeedAtEntry || 0),
280
+ scroll_speed_exit: Math.round(viewData.scrollSpeedAtExit || 0),
281
+ entry_timestamp: viewData.entryTime,
282
+ exit_timestamp: viewData.exitTime,
283
+ });
284
+ }
285
+ // Clear pending events
286
+ this.pendingEvents = [];
287
+ this.batchTimer = null;
288
+ }
289
+ /**
290
+ * Find element by XPath selector
291
+ */
292
+ findElementByXPath(xpath) {
293
+ // Check cache first
294
+ if (this.xpathCache.has(xpath)) {
295
+ const cached = this.xpathCache.get(xpath);
296
+ if (cached && document.contains(cached)) {
297
+ return cached;
298
+ }
299
+ this.xpathCache.delete(xpath);
300
+ }
301
+ try {
302
+ const result = document.evaluate(xpath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
303
+ const element = result.singleNodeValue;
304
+ if (element) {
305
+ this.xpathCache.set(xpath, element);
306
+ }
307
+ return element;
308
+ }
309
+ catch (error) {
310
+ this.log('Error evaluating XPath:', xpath, error);
311
+ return null;
312
+ }
313
+ }
314
+ /**
315
+ * Log debug messages
316
+ */
317
+ log(...args) {
318
+ if (this.options.debug) {
319
+ console.log('[SectionTracking]', ...args);
320
+ }
321
+ }
322
+ /**
323
+ * Update sections configuration
324
+ */
325
+ updateSections(sections) {
326
+ if (this.isDestroyed)
327
+ return;
328
+ this.log('Updating sections configuration');
329
+ // Disconnect observer
330
+ if (this.intersectionObserver) {
331
+ this.intersectionObserver.disconnect();
332
+ }
333
+ // Clear state
334
+ this.sectionStates.clear();
335
+ this.xpathCache.clear();
336
+ // Update configuration
337
+ this.sections = sections;
338
+ // Reinitialize
339
+ this.setupIntersectionObserver();
340
+ this.initializeSections();
341
+ }
342
+ /**
343
+ * Cleanup and destroy
344
+ */
345
+ destroy() {
346
+ if (this.isDestroyed)
347
+ return;
348
+ this.log('Destroying section tracking manager');
349
+ this.isDestroyed = true;
350
+ // Flush any pending events
351
+ this.flushPendingEvents();
352
+ // Clear timers
353
+ if (this.scrollDebounceTimer !== null) {
354
+ clearTimeout(this.scrollDebounceTimer);
355
+ this.scrollDebounceTimer = null;
356
+ }
357
+ if (this.batchTimer !== null) {
358
+ clearTimeout(this.batchTimer);
359
+ this.batchTimer = null;
360
+ }
361
+ // Disconnect intersection observer
362
+ if (this.intersectionObserver) {
363
+ this.intersectionObserver.disconnect();
364
+ this.intersectionObserver = null;
365
+ }
366
+ // Clear state
367
+ this.sectionStates.clear();
368
+ this.xpathCache.clear();
369
+ this.pendingEvents = [];
370
+ }
371
+ }
372
+ exports.SectionTrackingManager = SectionTrackingManager;
373
+ //# sourceMappingURL=section-tracking.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"section-tracking.js","sourceRoot":"","sources":["../../src/section-tracking.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Auto-tracking types for Grain Analytics SDK
3
+ */
4
+ export interface InteractionConfig {
5
+ eventName: string;
6
+ description: string;
7
+ selector: string;
8
+ priority: number;
9
+ label: string;
10
+ }
11
+ export interface SectionConfig {
12
+ sectionName: string;
13
+ description: string;
14
+ sectionType: string;
15
+ selector: string;
16
+ importance: number;
17
+ }
18
+ export interface AutoTrackingConfig {
19
+ interactions: InteractionConfig[];
20
+ sections: SectionConfig[];
21
+ }
22
+ export interface SectionViewData {
23
+ sectionName: string;
24
+ sectionType: string;
25
+ entryTime: number;
26
+ exitTime: number;
27
+ duration: number;
28
+ viewportWidth: number;
29
+ viewportHeight: number;
30
+ scrollDepth: number;
31
+ visibleAreaPercentage: number;
32
+ scrollSpeedAtEntry?: number;
33
+ scrollSpeedAtExit?: number;
34
+ }
35
+ export interface SectionTrackingOptions {
36
+ minDwellTime: number;
37
+ scrollVelocityThreshold: number;
38
+ intersectionThreshold: number;
39
+ debounceDelay: number;
40
+ batchDelay: number;
41
+ debug?: boolean;
42
+ }
43
+ export interface SectionTrackingState {
44
+ element: Element;
45
+ config: SectionConfig;
46
+ entryTime: number | null;
47
+ exitTime: number | null;
48
+ isVisible: boolean;
49
+ lastScrollPosition: number;
50
+ lastScrollTime: number;
51
+ entryScrollSpeed: number;
52
+ exitScrollSpeed: number;
53
+ maxVisibleArea: number;
54
+ }
55
+ //# sourceMappingURL=auto-tracking.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-tracking.d.ts","sourceRoot":"","sources":["../../../src/types/auto-tracking.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,iBAAiB,EAAE,CAAC;IAClC,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,sBAAsB;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,uBAAuB,EAAE,MAAM,CAAC;IAChC,qBAAqB,EAAE,MAAM,CAAC;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;CACxB"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ /**
3
+ * Auto-tracking types for Grain Analytics SDK
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ //# sourceMappingURL=auto-tracking.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-tracking.js","sourceRoot":"","sources":["../../../src/types/auto-tracking.ts"],"names":[],"mappings":";AAAA;;GAEG"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Get full country name from user's timezone
3
+ * @returns Full country name or null if timezone is unavailable
4
+ */
5
+ export declare function getCountry(): string | null;
6
+ /**
7
+ * Get country code (ISO 3166-1 alpha-2) from user's timezone
8
+ * Privacy-friendly alternative to IP geolocation
9
+ * @returns ISO 3166-1 alpha-2 country code (e.g., "US", "GB") or "Unknown"
10
+ */
11
+ export declare function getCountryCodeFromTimezone(): string;
12
+ export declare function getState(): string | null;
13
+ //# sourceMappingURL=countries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"countries.d.ts","sourceRoot":"","sources":["../src/countries.ts"],"names":[],"mappings":"AAyyFA;;;GAGG;AACH,wBAAgB,UAAU,IAAI,MAAM,GAAG,IAAI,CAe1C;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,IAAI,MAAM,CAanD;AAED,wBAAgB,QAAQ,IAAI,MAAM,GAAG,IAAI,CAUxC"}