@grainql/analytics-web 1.7.4 → 2.1.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 (258) hide show
  1. package/README.md +71 -718
  2. package/dist/activity.d.ts +59 -0
  3. package/dist/activity.d.ts.map +1 -0
  4. package/dist/cjs/activity.d.ts +59 -0
  5. package/dist/cjs/activity.d.ts.map +1 -0
  6. package/dist/cjs/activity.js +131 -0
  7. package/dist/cjs/activity.js.map +1 -0
  8. package/dist/cjs/consent.d.ts +68 -0
  9. package/dist/cjs/consent.d.ts.map +1 -0
  10. package/dist/cjs/consent.js +191 -0
  11. package/dist/cjs/consent.js.map +1 -0
  12. package/dist/cjs/cookies.d.ts +28 -0
  13. package/dist/cjs/cookies.d.ts.map +1 -0
  14. package/dist/cjs/cookies.js +95 -0
  15. package/dist/cjs/cookies.js.map +1 -0
  16. package/dist/cjs/heartbeat.d.ts +42 -0
  17. package/dist/cjs/heartbeat.d.ts.map +1 -0
  18. package/dist/cjs/heartbeat.js +92 -0
  19. package/dist/cjs/heartbeat.js.map +1 -0
  20. package/dist/cjs/index.d.ts +100 -3
  21. package/dist/cjs/index.d.ts.map +1 -1
  22. package/dist/cjs/index.js.map +1 -1
  23. package/dist/cjs/page-tracking.d.ts +60 -0
  24. package/dist/cjs/page-tracking.d.ts.map +1 -0
  25. package/dist/cjs/page-tracking.js +180 -0
  26. package/dist/cjs/page-tracking.js.map +1 -0
  27. package/dist/cjs/react/GrainProvider.d.ts +11 -0
  28. package/dist/cjs/react/GrainProvider.d.ts.map +1 -0
  29. package/dist/cjs/react/GrainProvider.js +79 -0
  30. package/dist/cjs/react/GrainProvider.js.map +1 -0
  31. package/dist/cjs/react/components/ConsentBanner.d.ts +16 -0
  32. package/dist/cjs/react/components/ConsentBanner.d.ts.map +1 -0
  33. package/dist/cjs/react/components/ConsentBanner.js +112 -0
  34. package/dist/cjs/react/components/ConsentBanner.js.map +1 -0
  35. package/dist/cjs/react/components/CookieNotice.d.ts +12 -0
  36. package/dist/cjs/react/components/CookieNotice.d.ts.map +1 -0
  37. package/dist/cjs/react/components/CookieNotice.js +62 -0
  38. package/dist/cjs/react/components/CookieNotice.js.map +1 -0
  39. package/dist/cjs/react/components/PrivacyPreferenceCenter.d.ts +12 -0
  40. package/dist/cjs/react/components/PrivacyPreferenceCenter.d.ts.map +1 -0
  41. package/dist/cjs/react/components/PrivacyPreferenceCenter.js +120 -0
  42. package/dist/cjs/react/components/PrivacyPreferenceCenter.js.map +1 -0
  43. package/dist/cjs/react/context.d.ts +11 -0
  44. package/dist/cjs/react/context.d.ts.map +1 -0
  45. package/dist/cjs/react/context.js +43 -0
  46. package/dist/cjs/react/context.js.map +1 -0
  47. package/dist/cjs/react/hooks/useAllConfigs.d.ts +8 -0
  48. package/dist/cjs/react/hooks/useAllConfigs.d.ts.map +1 -0
  49. package/dist/cjs/react/hooks/useAllConfigs.js +112 -0
  50. package/dist/cjs/react/hooks/useAllConfigs.js.map +1 -0
  51. package/dist/cjs/react/hooks/useConfig.d.ts +9 -0
  52. package/dist/cjs/react/hooks/useConfig.d.ts.map +1 -0
  53. package/dist/cjs/react/hooks/useConfig.js +116 -0
  54. package/dist/cjs/react/hooks/useConfig.js.map +1 -0
  55. package/dist/cjs/react/hooks/useConsent.d.ts +13 -0
  56. package/dist/cjs/react/hooks/useConsent.d.ts.map +1 -0
  57. package/dist/cjs/react/hooks/useConsent.js +84 -0
  58. package/dist/cjs/react/hooks/useConsent.js.map +1 -0
  59. package/dist/cjs/react/hooks/useDataDeletion.d.ts +17 -0
  60. package/dist/cjs/react/hooks/useDataDeletion.d.ts.map +1 -0
  61. package/dist/cjs/react/hooks/useDataDeletion.js +117 -0
  62. package/dist/cjs/react/hooks/useDataDeletion.js.map +1 -0
  63. package/dist/cjs/react/hooks/useGrainAnalytics.d.ts +6 -0
  64. package/dist/cjs/react/hooks/useGrainAnalytics.d.ts.map +1 -0
  65. package/dist/cjs/react/hooks/useGrainAnalytics.js +50 -0
  66. package/dist/cjs/react/hooks/useGrainAnalytics.js.map +1 -0
  67. package/dist/cjs/react/hooks/usePrivacyPreferences.d.ts +15 -0
  68. package/dist/cjs/react/hooks/usePrivacyPreferences.d.ts.map +1 -0
  69. package/dist/cjs/react/hooks/usePrivacyPreferences.js +82 -0
  70. package/dist/cjs/react/hooks/usePrivacyPreferences.js.map +1 -0
  71. package/dist/cjs/react/hooks/useTrack.d.ts +9 -0
  72. package/dist/cjs/react/hooks/useTrack.d.ts.map +1 -0
  73. package/dist/cjs/react/hooks/useTrack.js +53 -0
  74. package/dist/cjs/react/hooks/useTrack.js.map +1 -0
  75. package/dist/cjs/react/index.d.ts +47 -0
  76. package/dist/cjs/react/index.d.ts.map +1 -0
  77. package/dist/cjs/react/index.js +59 -0
  78. package/dist/cjs/react/index.js.map +1 -0
  79. package/dist/cjs/react/types.d.ts +33 -0
  80. package/dist/cjs/react/types.d.ts.map +1 -0
  81. package/dist/cjs/react/types.js +6 -0
  82. package/dist/cjs/react/types.js.map +1 -0
  83. package/dist/consent.d.ts +68 -0
  84. package/dist/consent.d.ts.map +1 -0
  85. package/dist/cookies.d.ts +28 -0
  86. package/dist/cookies.d.ts.map +1 -0
  87. package/dist/esm/activity.d.ts +59 -0
  88. package/dist/esm/activity.d.ts.map +1 -0
  89. package/dist/esm/activity.js +127 -0
  90. package/dist/esm/activity.js.map +1 -0
  91. package/dist/esm/consent.d.ts +68 -0
  92. package/dist/esm/consent.d.ts.map +1 -0
  93. package/dist/esm/consent.js +187 -0
  94. package/dist/esm/consent.js.map +1 -0
  95. package/dist/esm/cookies.d.ts +28 -0
  96. package/dist/esm/cookies.d.ts.map +1 -0
  97. package/dist/esm/cookies.js +89 -0
  98. package/dist/esm/cookies.js.map +1 -0
  99. package/dist/esm/heartbeat.d.ts +42 -0
  100. package/dist/esm/heartbeat.d.ts.map +1 -0
  101. package/dist/esm/heartbeat.js +88 -0
  102. package/dist/esm/heartbeat.js.map +1 -0
  103. package/dist/esm/index.d.ts +100 -3
  104. package/dist/esm/index.d.ts.map +1 -1
  105. package/dist/esm/index.js.map +1 -1
  106. package/dist/esm/page-tracking.d.ts +60 -0
  107. package/dist/esm/page-tracking.d.ts.map +1 -0
  108. package/dist/esm/page-tracking.js +176 -0
  109. package/dist/esm/page-tracking.js.map +1 -0
  110. package/dist/esm/react/GrainProvider.d.ts +11 -0
  111. package/dist/esm/react/GrainProvider.d.ts.map +1 -0
  112. package/dist/esm/react/GrainProvider.js +43 -0
  113. package/dist/esm/react/GrainProvider.js.map +1 -0
  114. package/dist/esm/react/components/ConsentBanner.d.ts +16 -0
  115. package/dist/esm/react/components/ConsentBanner.d.ts.map +1 -0
  116. package/dist/esm/react/components/ConsentBanner.js +76 -0
  117. package/dist/esm/react/components/ConsentBanner.js.map +1 -0
  118. package/dist/esm/react/components/CookieNotice.d.ts +12 -0
  119. package/dist/esm/react/components/CookieNotice.d.ts.map +1 -0
  120. package/dist/esm/react/components/CookieNotice.js +26 -0
  121. package/dist/esm/react/components/CookieNotice.js.map +1 -0
  122. package/dist/esm/react/components/PrivacyPreferenceCenter.d.ts +12 -0
  123. package/dist/esm/react/components/PrivacyPreferenceCenter.d.ts.map +1 -0
  124. package/dist/esm/react/components/PrivacyPreferenceCenter.js +84 -0
  125. package/dist/esm/react/components/PrivacyPreferenceCenter.js.map +1 -0
  126. package/dist/esm/react/context.d.ts +11 -0
  127. package/dist/esm/react/context.d.ts.map +1 -0
  128. package/dist/esm/react/context.js +7 -0
  129. package/dist/esm/react/context.js.map +1 -0
  130. package/dist/esm/react/hooks/useAllConfigs.d.ts +8 -0
  131. package/dist/esm/react/hooks/useAllConfigs.d.ts.map +1 -0
  132. package/dist/esm/react/hooks/useAllConfigs.js +76 -0
  133. package/dist/esm/react/hooks/useAllConfigs.js.map +1 -0
  134. package/dist/esm/react/hooks/useConfig.d.ts +9 -0
  135. package/dist/esm/react/hooks/useConfig.d.ts.map +1 -0
  136. package/dist/esm/react/hooks/useConfig.js +80 -0
  137. package/dist/esm/react/hooks/useConfig.js.map +1 -0
  138. package/dist/esm/react/hooks/useConsent.d.ts +13 -0
  139. package/dist/esm/react/hooks/useConsent.d.ts.map +1 -0
  140. package/dist/esm/react/hooks/useConsent.js +48 -0
  141. package/dist/esm/react/hooks/useConsent.js.map +1 -0
  142. package/dist/esm/react/hooks/useDataDeletion.d.ts +17 -0
  143. package/dist/esm/react/hooks/useDataDeletion.d.ts.map +1 -0
  144. package/dist/esm/react/hooks/useDataDeletion.js +81 -0
  145. package/dist/esm/react/hooks/useDataDeletion.js.map +1 -0
  146. package/dist/esm/react/hooks/useGrainAnalytics.d.ts +6 -0
  147. package/dist/esm/react/hooks/useGrainAnalytics.d.ts.map +1 -0
  148. package/dist/esm/react/hooks/useGrainAnalytics.js +14 -0
  149. package/dist/esm/react/hooks/useGrainAnalytics.js.map +1 -0
  150. package/dist/esm/react/hooks/usePrivacyPreferences.d.ts +15 -0
  151. package/dist/esm/react/hooks/usePrivacyPreferences.d.ts.map +1 -0
  152. package/dist/esm/react/hooks/usePrivacyPreferences.js +46 -0
  153. package/dist/esm/react/hooks/usePrivacyPreferences.js.map +1 -0
  154. package/dist/esm/react/hooks/useTrack.d.ts +9 -0
  155. package/dist/esm/react/hooks/useTrack.d.ts.map +1 -0
  156. package/dist/esm/react/hooks/useTrack.js +17 -0
  157. package/dist/esm/react/hooks/useTrack.js.map +1 -0
  158. package/dist/esm/react/index.d.ts +47 -0
  159. package/dist/esm/react/index.d.ts.map +1 -0
  160. package/dist/esm/react/index.js +45 -0
  161. package/dist/esm/react/index.js.map +1 -0
  162. package/dist/esm/react/types.d.ts +33 -0
  163. package/dist/esm/react/types.d.ts.map +1 -0
  164. package/dist/esm/react/types.js +5 -0
  165. package/dist/esm/react/types.js.map +1 -0
  166. package/dist/heartbeat.d.ts +42 -0
  167. package/dist/heartbeat.d.ts.map +1 -0
  168. package/dist/index.d.ts +100 -3
  169. package/dist/index.d.ts.map +1 -1
  170. package/dist/index.global.dev.js +903 -12
  171. package/dist/index.global.dev.js.map +3 -3
  172. package/dist/index.global.js +2 -2
  173. package/dist/index.global.js.map +4 -4
  174. package/dist/index.js +321 -11
  175. package/dist/index.mjs +321 -11
  176. package/dist/page-tracking.d.ts +60 -0
  177. package/dist/page-tracking.d.ts.map +1 -0
  178. package/dist/react/activity.d.ts +59 -0
  179. package/dist/react/activity.d.ts.map +1 -0
  180. package/dist/react/activity.js +130 -0
  181. package/dist/react/activity.mjs +126 -0
  182. package/dist/react/consent.d.ts +68 -0
  183. package/dist/react/consent.d.ts.map +1 -0
  184. package/dist/react/consent.js +190 -0
  185. package/dist/react/consent.mjs +186 -0
  186. package/dist/react/cookies.d.ts +28 -0
  187. package/dist/react/cookies.d.ts.map +1 -0
  188. package/dist/react/cookies.js +94 -0
  189. package/dist/react/cookies.mjs +88 -0
  190. package/dist/react/heartbeat.d.ts +42 -0
  191. package/dist/react/heartbeat.d.ts.map +1 -0
  192. package/dist/react/heartbeat.js +91 -0
  193. package/dist/react/heartbeat.mjs +87 -0
  194. package/dist/react/index.d.ts +502 -0
  195. package/dist/react/index.d.ts.map +1 -0
  196. package/dist/react/index.js +1491 -0
  197. package/dist/react/index.mjs +1486 -0
  198. package/dist/react/page-tracking.d.ts +60 -0
  199. package/dist/react/page-tracking.d.ts.map +1 -0
  200. package/dist/react/page-tracking.js +179 -0
  201. package/dist/react/page-tracking.mjs +175 -0
  202. package/dist/react/react/GrainProvider.d.ts +11 -0
  203. package/dist/react/react/GrainProvider.d.ts.map +1 -0
  204. package/dist/react/react/GrainProvider.js +45 -0
  205. package/dist/react/react/GrainProvider.mjs +42 -0
  206. package/dist/react/react/components/ConsentBanner.d.ts +16 -0
  207. package/dist/react/react/components/ConsentBanner.d.ts.map +1 -0
  208. package/dist/react/react/components/ConsentBanner.js +78 -0
  209. package/dist/react/react/components/ConsentBanner.mjs +75 -0
  210. package/dist/react/react/components/CookieNotice.d.ts +12 -0
  211. package/dist/react/react/components/CookieNotice.d.ts.map +1 -0
  212. package/dist/react/react/components/CookieNotice.js +28 -0
  213. package/dist/react/react/components/CookieNotice.mjs +25 -0
  214. package/dist/react/react/components/PrivacyPreferenceCenter.d.ts +12 -0
  215. package/dist/react/react/components/PrivacyPreferenceCenter.d.ts.map +1 -0
  216. package/dist/react/react/components/PrivacyPreferenceCenter.js +86 -0
  217. package/dist/react/react/components/PrivacyPreferenceCenter.mjs +83 -0
  218. package/dist/react/react/context.d.ts +11 -0
  219. package/dist/react/react/context.d.ts.map +1 -0
  220. package/dist/react/react/context.js +9 -0
  221. package/dist/react/react/context.mjs +6 -0
  222. package/dist/react/react/hooks/useAllConfigs.d.ts +8 -0
  223. package/dist/react/react/hooks/useAllConfigs.d.ts.map +1 -0
  224. package/dist/react/react/hooks/useAllConfigs.js +78 -0
  225. package/dist/react/react/hooks/useAllConfigs.mjs +75 -0
  226. package/dist/react/react/hooks/useConfig.d.ts +9 -0
  227. package/dist/react/react/hooks/useConfig.d.ts.map +1 -0
  228. package/dist/react/react/hooks/useConfig.js +82 -0
  229. package/dist/react/react/hooks/useConfig.mjs +79 -0
  230. package/dist/react/react/hooks/useConsent.d.ts +13 -0
  231. package/dist/react/react/hooks/useConsent.d.ts.map +1 -0
  232. package/dist/react/react/hooks/useConsent.js +50 -0
  233. package/dist/react/react/hooks/useConsent.mjs +47 -0
  234. package/dist/react/react/hooks/useDataDeletion.d.ts +17 -0
  235. package/dist/react/react/hooks/useDataDeletion.d.ts.map +1 -0
  236. package/dist/react/react/hooks/useDataDeletion.js +83 -0
  237. package/dist/react/react/hooks/useDataDeletion.mjs +80 -0
  238. package/dist/react/react/hooks/useGrainAnalytics.d.ts +6 -0
  239. package/dist/react/react/hooks/useGrainAnalytics.d.ts.map +1 -0
  240. package/dist/react/react/hooks/useGrainAnalytics.js +16 -0
  241. package/dist/react/react/hooks/useGrainAnalytics.mjs +13 -0
  242. package/dist/react/react/hooks/usePrivacyPreferences.d.ts +15 -0
  243. package/dist/react/react/hooks/usePrivacyPreferences.d.ts.map +1 -0
  244. package/dist/react/react/hooks/usePrivacyPreferences.js +48 -0
  245. package/dist/react/react/hooks/usePrivacyPreferences.mjs +45 -0
  246. package/dist/react/react/hooks/useTrack.d.ts +9 -0
  247. package/dist/react/react/hooks/useTrack.d.ts.map +1 -0
  248. package/dist/react/react/hooks/useTrack.js +19 -0
  249. package/dist/react/react/hooks/useTrack.mjs +16 -0
  250. package/dist/react/react/index.d.ts +47 -0
  251. package/dist/react/react/index.d.ts.map +1 -0
  252. package/dist/react/react/index.js +58 -0
  253. package/dist/react/react/index.mjs +44 -0
  254. package/dist/react/react/types.d.ts +33 -0
  255. package/dist/react/react/types.d.ts.map +1 -0
  256. package/dist/react/react/types.js +5 -0
  257. package/dist/react/react/types.mjs +4 -0
  258. package/package.json +20 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useGrainAnalytics.js","sourceRoot":"","sources":["../../../../src/react/hooks/useGrainAnalytics.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMH,8CAWC;AAfD,6CAA+B;AAC/B,wCAA0C;AAG1C,SAAgB,iBAAiB;IAC/B,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,sBAAY,CAAC,CAAC;IAE/C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,yDAAyD;YACzD,iGAAiG,CAClG,CAAC;IACJ,CAAC;IAED,OAAO,OAAO,CAAC,MAAM,CAAC;AACxB,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * usePrivacyPreferences - Hook for managing privacy preferences
3
+ */
4
+ export interface PrivacyPreferences {
5
+ necessary: boolean;
6
+ analytics: boolean;
7
+ functional: boolean;
8
+ }
9
+ export declare function usePrivacyPreferences(): {
10
+ preferences: PrivacyPreferences;
11
+ updatePreferences: (newPreferences: Partial<PrivacyPreferences>) => void;
12
+ acceptAll: () => void;
13
+ rejectAll: () => void;
14
+ };
15
+ //# sourceMappingURL=usePrivacyPreferences.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePrivacyPreferences.d.ts","sourceRoot":"","sources":["../../../../src/react/hooks/usePrivacyPreferences.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,qBAAqB;;wCAahB,OAAO,CAAC,kBAAkB,CAAC;;;EAqC/C"}
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ /**
3
+ * usePrivacyPreferences - Hook for managing privacy preferences
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.usePrivacyPreferences = usePrivacyPreferences;
40
+ const React = __importStar(require("react"));
41
+ const useConsent_1 = require("./useConsent");
42
+ function usePrivacyPreferences() {
43
+ const { consentState, grantConsent, revokeConsent } = (0, useConsent_1.useConsent)();
44
+ const preferences = React.useMemo(() => {
45
+ const categories = consentState?.categories ?? [];
46
+ return {
47
+ necessary: categories.includes('necessary'),
48
+ analytics: categories.includes('analytics'),
49
+ functional: categories.includes('functional'),
50
+ };
51
+ }, [consentState]);
52
+ const updatePreferences = React.useCallback((newPreferences) => {
53
+ const categories = [];
54
+ // Necessary is always enabled
55
+ categories.push('necessary');
56
+ if (newPreferences.analytics ?? preferences.analytics) {
57
+ categories.push('analytics');
58
+ }
59
+ if (newPreferences.functional ?? preferences.functional) {
60
+ categories.push('functional');
61
+ }
62
+ if (categories.length > 0) {
63
+ grantConsent(categories);
64
+ }
65
+ else {
66
+ revokeConsent();
67
+ }
68
+ }, [preferences, grantConsent, revokeConsent]);
69
+ const acceptAll = React.useCallback(() => {
70
+ grantConsent(['necessary', 'analytics', 'functional']);
71
+ }, [grantConsent]);
72
+ const rejectAll = React.useCallback(() => {
73
+ grantConsent(['necessary']); // Keep only necessary
74
+ }, [grantConsent]);
75
+ return {
76
+ preferences,
77
+ updatePreferences,
78
+ acceptAll,
79
+ rejectAll,
80
+ };
81
+ }
82
+ //# sourceMappingURL=usePrivacyPreferences.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePrivacyPreferences.js","sourceRoot":"","sources":["../../../../src/react/hooks/usePrivacyPreferences.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAWH,sDAkDC;AA3DD,6CAA+B;AAC/B,6CAA0C;AAQ1C,SAAgB,qBAAqB;IACnC,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,GAAG,IAAA,uBAAU,GAAE,CAAC;IAEnE,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAqB,GAAG,EAAE;QACzD,MAAM,UAAU,GAAG,YAAY,EAAE,UAAU,IAAI,EAAE,CAAC;QAClD,OAAO;YACL,SAAS,EAAE,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC;YAC3C,SAAS,EAAE,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC;YAC3C,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC;SAC9C,CAAC;IACJ,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAEnB,MAAM,iBAAiB,GAAG,KAAK,CAAC,WAAW,CACzC,CAAC,cAA2C,EAAE,EAAE;QAC9C,MAAM,UAAU,GAAa,EAAE,CAAC;QAEhC,8BAA8B;QAC9B,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAE7B,IAAI,cAAc,CAAC,SAAS,IAAI,WAAW,CAAC,SAAS,EAAE,CAAC;YACtD,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC/B,CAAC;QAED,IAAI,cAAc,CAAC,UAAU,IAAI,WAAW,CAAC,UAAU,EAAE,CAAC;YACxD,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAChC,CAAC;QAED,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,YAAY,CAAC,UAAU,CAAC,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,aAAa,EAAE,CAAC;QAClB,CAAC;IACH,CAAC,EACD,CAAC,WAAW,EAAE,YAAY,EAAE,aAAa,CAAC,CAC3C,CAAC;IAEF,MAAM,SAAS,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QACvC,YAAY,CAAC,CAAC,WAAW,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC;IACzD,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAEnB,MAAM,SAAS,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QACvC,YAAY,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,sBAAsB;IACrD,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAEnB,OAAO;QACL,WAAW;QACX,iBAAiB;QACjB,SAAS;QACT,SAAS;KACV,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * useTrack - Get a stable, memoized track function
3
+ *
4
+ * Returns a track function that doesn't cause re-renders when passed to child components.
5
+ * Prevents unnecessary re-renders compared to using useCallback.
6
+ */
7
+ import type { TrackFunction } from '../types';
8
+ export declare function useTrack(): TrackFunction;
9
+ //# sourceMappingURL=useTrack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTrack.d.ts","sourceRoot":"","sources":["../../../../src/react/hooks/useTrack.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C,wBAAgB,QAAQ,IAAI,aAAa,CAYxC"}
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ /**
3
+ * useTrack - Get a stable, memoized track function
4
+ *
5
+ * Returns a track function that doesn't cause re-renders when passed to child components.
6
+ * Prevents unnecessary re-renders compared to using useCallback.
7
+ */
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
21
+ }) : function(o, v) {
22
+ o["default"] = v;
23
+ });
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.useTrack = useTrack;
43
+ const React = __importStar(require("react"));
44
+ const useGrainAnalytics_1 = require("./useGrainAnalytics");
45
+ function useTrack() {
46
+ const client = (0, useGrainAnalytics_1.useGrainAnalytics)();
47
+ // Create stable track function that won't change across renders
48
+ const track = React.useCallback(async (eventName, properties, options) => {
49
+ await client.track(eventName, properties, options);
50
+ }, [client]);
51
+ return track;
52
+ }
53
+ //# sourceMappingURL=useTrack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTrack.js","sourceRoot":"","sources":["../../../../src/react/hooks/useTrack.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMH,4BAYC;AAhBD,6CAA+B;AAC/B,2DAAwD;AAGxD,SAAgB,QAAQ;IACtB,MAAM,MAAM,GAAG,IAAA,qCAAiB,GAAE,CAAC;IAEnC,gEAAgE;IAChE,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,CAC7B,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE;QACvC,MAAM,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC,EACD,CAAC,MAAM,CAAC,CACT,CAAC;IAEF,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Grain Analytics React Hooks
3
+ *
4
+ * React integration for @grainql/analytics-web
5
+ *
6
+ * @example
7
+ * ```tsx
8
+ * import { GrainProvider, useConfig, useTrack } from '@grainql/analytics-web/react';
9
+ *
10
+ * // Pattern 1: Provider-managed client
11
+ * <GrainProvider config={{ tenantId: 'xxx' }}>
12
+ * <App />
13
+ * </GrainProvider>
14
+ *
15
+ * // Pattern 2: External client
16
+ * const grain = new GrainAnalytics({ tenantId: 'xxx' });
17
+ * <GrainProvider client={grain}>
18
+ * <App />
19
+ * </GrainProvider>
20
+ *
21
+ * // Use hooks in components
22
+ * function MyComponent() {
23
+ * const { value } = useConfig('hero_variant');
24
+ * const track = useTrack();
25
+ *
26
+ * return <button onClick={() => track('clicked')}>Click</button>;
27
+ * }
28
+ * ```
29
+ */
30
+ export { GrainProvider } from './GrainProvider';
31
+ export { useGrainAnalytics } from './hooks/useGrainAnalytics';
32
+ export { useConfig } from './hooks/useConfig';
33
+ export { useAllConfigs } from './hooks/useAllConfigs';
34
+ export { useTrack } from './hooks/useTrack';
35
+ export { useConsent } from './hooks/useConsent';
36
+ export { usePrivacyPreferences } from './hooks/usePrivacyPreferences';
37
+ export { useDataDeletion } from './hooks/useDataDeletion';
38
+ export { ConsentBanner } from './components/ConsentBanner';
39
+ export { PrivacyPreferenceCenter } from './components/PrivacyPreferenceCenter';
40
+ export { CookieNotice } from './components/CookieNotice';
41
+ export type { GrainProviderProps, UseConfigOptions, UseConfigResult, UseAllConfigsOptions, UseAllConfigsResult, TrackFunction, } from './types';
42
+ export type { ConsentBannerProps } from './components/ConsentBanner';
43
+ export type { PrivacyPreferenceCenterProps } from './components/PrivacyPreferenceCenter';
44
+ export type { CookieNoticeProps } from './components/CookieNotice';
45
+ export type { PrivacyPreferences } from './hooks/usePrivacyPreferences';
46
+ export type { DataDeletionOptions } from './hooks/useDataDeletion';
47
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/react/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGhD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAG5C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG1D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGzD,YAAY,EACV,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,oBAAoB,EACpB,mBAAmB,EACnB,aAAa,GACd,MAAM,SAAS,CAAC;AAGjB,YAAY,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACrE,YAAY,EAAE,4BAA4B,EAAE,MAAM,sCAAsC,CAAC;AACzF,YAAY,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,YAAY,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACxE,YAAY,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ /**
3
+ * Grain Analytics React Hooks
4
+ *
5
+ * React integration for @grainql/analytics-web
6
+ *
7
+ * @example
8
+ * ```tsx
9
+ * import { GrainProvider, useConfig, useTrack } from '@grainql/analytics-web/react';
10
+ *
11
+ * // Pattern 1: Provider-managed client
12
+ * <GrainProvider config={{ tenantId: 'xxx' }}>
13
+ * <App />
14
+ * </GrainProvider>
15
+ *
16
+ * // Pattern 2: External client
17
+ * const grain = new GrainAnalytics({ tenantId: 'xxx' });
18
+ * <GrainProvider client={grain}>
19
+ * <App />
20
+ * </GrainProvider>
21
+ *
22
+ * // Use hooks in components
23
+ * function MyComponent() {
24
+ * const { value } = useConfig('hero_variant');
25
+ * const track = useTrack();
26
+ *
27
+ * return <button onClick={() => track('clicked')}>Click</button>;
28
+ * }
29
+ * ```
30
+ */
31
+ Object.defineProperty(exports, "__esModule", { value: true });
32
+ exports.CookieNotice = exports.PrivacyPreferenceCenter = exports.ConsentBanner = exports.useDataDeletion = exports.usePrivacyPreferences = exports.useConsent = exports.useTrack = exports.useAllConfigs = exports.useConfig = exports.useGrainAnalytics = exports.GrainProvider = void 0;
33
+ // Provider
34
+ var GrainProvider_1 = require("./GrainProvider");
35
+ Object.defineProperty(exports, "GrainProvider", { enumerable: true, get: function () { return GrainProvider_1.GrainProvider; } });
36
+ // Hooks
37
+ var useGrainAnalytics_1 = require("./hooks/useGrainAnalytics");
38
+ Object.defineProperty(exports, "useGrainAnalytics", { enumerable: true, get: function () { return useGrainAnalytics_1.useGrainAnalytics; } });
39
+ var useConfig_1 = require("./hooks/useConfig");
40
+ Object.defineProperty(exports, "useConfig", { enumerable: true, get: function () { return useConfig_1.useConfig; } });
41
+ var useAllConfigs_1 = require("./hooks/useAllConfigs");
42
+ Object.defineProperty(exports, "useAllConfigs", { enumerable: true, get: function () { return useAllConfigs_1.useAllConfigs; } });
43
+ var useTrack_1 = require("./hooks/useTrack");
44
+ Object.defineProperty(exports, "useTrack", { enumerable: true, get: function () { return useTrack_1.useTrack; } });
45
+ // Privacy hooks
46
+ var useConsent_1 = require("./hooks/useConsent");
47
+ Object.defineProperty(exports, "useConsent", { enumerable: true, get: function () { return useConsent_1.useConsent; } });
48
+ var usePrivacyPreferences_1 = require("./hooks/usePrivacyPreferences");
49
+ Object.defineProperty(exports, "usePrivacyPreferences", { enumerable: true, get: function () { return usePrivacyPreferences_1.usePrivacyPreferences; } });
50
+ var useDataDeletion_1 = require("./hooks/useDataDeletion");
51
+ Object.defineProperty(exports, "useDataDeletion", { enumerable: true, get: function () { return useDataDeletion_1.useDataDeletion; } });
52
+ // Privacy components
53
+ var ConsentBanner_1 = require("./components/ConsentBanner");
54
+ Object.defineProperty(exports, "ConsentBanner", { enumerable: true, get: function () { return ConsentBanner_1.ConsentBanner; } });
55
+ var PrivacyPreferenceCenter_1 = require("./components/PrivacyPreferenceCenter");
56
+ Object.defineProperty(exports, "PrivacyPreferenceCenter", { enumerable: true, get: function () { return PrivacyPreferenceCenter_1.PrivacyPreferenceCenter; } });
57
+ var CookieNotice_1 = require("./components/CookieNotice");
58
+ Object.defineProperty(exports, "CookieNotice", { enumerable: true, get: function () { return CookieNotice_1.CookieNotice; } });
59
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/react/index.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;;;AAEH,WAAW;AACX,iDAAgD;AAAvC,8GAAA,aAAa,OAAA;AAEtB,QAAQ;AACR,+DAA8D;AAArD,sHAAA,iBAAiB,OAAA;AAC1B,+CAA8C;AAArC,sGAAA,SAAS,OAAA;AAClB,uDAAsD;AAA7C,8GAAA,aAAa,OAAA;AACtB,6CAA4C;AAAnC,oGAAA,QAAQ,OAAA;AAEjB,gBAAgB;AAChB,iDAAgD;AAAvC,wGAAA,UAAU,OAAA;AACnB,uEAAsE;AAA7D,8HAAA,qBAAqB,OAAA;AAC9B,2DAA0D;AAAjD,kHAAA,eAAe,OAAA;AAExB,qBAAqB;AACrB,4DAA2D;AAAlD,8GAAA,aAAa,OAAA;AACtB,gFAA+E;AAAtE,kIAAA,uBAAuB,OAAA;AAChC,0DAAyD;AAAhD,4GAAA,YAAY,OAAA"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * React-specific types for Grain Analytics
3
+ */
4
+ import type { GrainAnalytics, GrainConfig, SendEventOptions } from '../index';
5
+ export interface GrainProviderProps {
6
+ children: React.ReactNode;
7
+ client?: GrainAnalytics;
8
+ config?: GrainConfig;
9
+ }
10
+ export interface UseConfigOptions {
11
+ forceRefresh?: boolean;
12
+ immediateKeys?: string[];
13
+ properties?: Record<string, string>;
14
+ }
15
+ export interface UseConfigResult {
16
+ value: string | undefined;
17
+ isRefreshing: boolean;
18
+ error: Error | null;
19
+ refresh: () => Promise<void>;
20
+ }
21
+ export interface UseAllConfigsOptions {
22
+ forceRefresh?: boolean;
23
+ immediateKeys?: string[];
24
+ properties?: Record<string, string>;
25
+ }
26
+ export interface UseAllConfigsResult {
27
+ configs: Record<string, string>;
28
+ isRefreshing: boolean;
29
+ error: Error | null;
30
+ refresh: () => Promise<void>;
31
+ }
32
+ export type TrackFunction = (eventName: string, properties?: Record<string, unknown>, options?: SendEventOptions) => Promise<void>;
33
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/react/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE9E,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,YAAY,EAAE,OAAO,CAAC;IACtB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,oBAAoB;IACnC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,YAAY,EAAE,OAAO,CAAC;IACtB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED,MAAM,MAAM,aAAa,GAAG,CAC1B,SAAS,EAAE,MAAM,EACjB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpC,OAAO,CAAC,EAAE,gBAAgB,KACvB,OAAO,CAAC,IAAI,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ /**
3
+ * React-specific types for Grain Analytics
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/react/types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Consent management for Grain Analytics
3
+ * Handles GDPR-compliant consent tracking and state management
4
+ */
5
+ export type ConsentMode = 'opt-in' | 'opt-out' | 'disabled';
6
+ export interface ConsentState {
7
+ granted: boolean;
8
+ categories: string[];
9
+ timestamp: Date;
10
+ version: string;
11
+ }
12
+ export declare const DEFAULT_CONSENT_CATEGORIES: string[];
13
+ export declare const CONSENT_VERSION = "1.0.0";
14
+ /**
15
+ * Consent manager for handling user consent state
16
+ */
17
+ export declare class ConsentManager {
18
+ private consentState;
19
+ private consentMode;
20
+ private storageKey;
21
+ private listeners;
22
+ constructor(tenantId: string, consentMode?: ConsentMode);
23
+ /**
24
+ * Load consent state from localStorage
25
+ */
26
+ private loadConsentState;
27
+ /**
28
+ * Save consent state to localStorage
29
+ */
30
+ private saveConsentState;
31
+ /**
32
+ * Grant consent with optional categories
33
+ */
34
+ grantConsent(categories?: string[]): void;
35
+ /**
36
+ * Revoke consent (opt-out)
37
+ */
38
+ revokeConsent(categories?: string[]): void;
39
+ /**
40
+ * Get current consent state
41
+ */
42
+ getConsentState(): ConsentState | null;
43
+ /**
44
+ * Check if user has granted consent
45
+ */
46
+ hasConsent(category?: string): boolean;
47
+ /**
48
+ * Check if we should wait for consent before tracking
49
+ */
50
+ shouldWaitForConsent(): boolean;
51
+ /**
52
+ * Add consent change listener
53
+ */
54
+ addListener(listener: (state: ConsentState) => void): void;
55
+ /**
56
+ * Remove consent change listener
57
+ */
58
+ removeListener(listener: (state: ConsentState) => void): void;
59
+ /**
60
+ * Notify all listeners of consent state change
61
+ */
62
+ private notifyListeners;
63
+ /**
64
+ * Clear all consent data
65
+ */
66
+ clearConsent(): void;
67
+ }
68
+ //# sourceMappingURL=consent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consent.d.ts","sourceRoot":"","sources":["../src/consent.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;AAE5D,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,0BAA0B,UAA2C,CAAC;AACnF,eAAO,MAAM,eAAe,UAAU,CAAC;AAEvC;;GAEG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,SAAS,CAA4C;gBAEjD,QAAQ,EAAE,MAAM,EAAE,WAAW,GAAE,WAAuB;IAMlE;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA0BxB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAUxB;;OAEG;IACH,YAAY,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI;IAczC;;OAEG;IACH,aAAa,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI;IA8B1C;;OAEG;IACH,eAAe,IAAI,YAAY,GAAG,IAAI;IAItC;;OAEG;IACH,UAAU,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO;IAwBtC;;OAEG;IACH,oBAAoB,IAAI,OAAO;IAI/B;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GAAG,IAAI;IAI1D;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GAAG,IAAI;IAO7D;;OAEG;IACH,OAAO,CAAC,eAAe;IAYvB;;OAEG;IACH,YAAY,IAAI,IAAI;CAUrB"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Cookie utilities for Grain Analytics
3
+ * Provides GDPR-compliant cookie management with configurable options
4
+ */
5
+ export interface CookieConfig {
6
+ domain?: string;
7
+ path?: string;
8
+ sameSite?: 'strict' | 'lax' | 'none';
9
+ secure?: boolean;
10
+ maxAge?: number;
11
+ }
12
+ /**
13
+ * Set a cookie with configurable options
14
+ */
15
+ export declare function setCookie(name: string, value: string, config?: CookieConfig): void;
16
+ /**
17
+ * Get a cookie value by name
18
+ */
19
+ export declare function getCookie(name: string): string | null;
20
+ /**
21
+ * Delete a cookie by name
22
+ */
23
+ export declare function deleteCookie(name: string, config?: Pick<CookieConfig, 'domain' | 'path'>): void;
24
+ /**
25
+ * Check if cookies are available and working
26
+ */
27
+ export declare function areCookiesEnabled(): boolean;
28
+ //# sourceMappingURL=cookies.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cookies.d.ts","sourceRoot":"","sources":["../src/cookies.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;IACrC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,IAAI,CA4BlF;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAiBrD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,QAAQ,GAAG,MAAM,CAAC,GAAG,IAAI,CAmB/F;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAY3C"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Activity Detection for Grain Analytics
3
+ * Tracks user activity (mouse, keyboard, touch, scroll) to determine if user is active
4
+ */
5
+ export declare class ActivityDetector {
6
+ private lastActivityTime;
7
+ private activityThreshold;
8
+ private listeners;
9
+ private boundActivityHandler;
10
+ private isDestroyed;
11
+ private readonly activityEvents;
12
+ constructor();
13
+ /**
14
+ * Setup event listeners for activity detection
15
+ */
16
+ private setupListeners;
17
+ /**
18
+ * Handle activity event
19
+ */
20
+ private handleActivity;
21
+ /**
22
+ * Debounce function to limit how often activity handler is called
23
+ */
24
+ private debounce;
25
+ /**
26
+ * Check if user is currently active
27
+ * @param threshold Time in ms to consider user inactive (default: 30s)
28
+ */
29
+ isActive(threshold?: number): boolean;
30
+ /**
31
+ * Get time since last activity in milliseconds
32
+ */
33
+ getTimeSinceLastActivity(): number;
34
+ /**
35
+ * Get last activity timestamp
36
+ */
37
+ getLastActivityTime(): number;
38
+ /**
39
+ * Set activity threshold
40
+ */
41
+ setActivityThreshold(threshold: number): void;
42
+ /**
43
+ * Add listener for activity changes
44
+ */
45
+ addListener(listener: () => void): void;
46
+ /**
47
+ * Remove listener
48
+ */
49
+ removeListener(listener: () => void): void;
50
+ /**
51
+ * Notify all listeners
52
+ */
53
+ private notifyListeners;
54
+ /**
55
+ * Cleanup and remove listeners
56
+ */
57
+ destroy(): void;
58
+ }
59
+ //# sourceMappingURL=activity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activity.d.ts","sourceRoot":"","sources":["../../src/activity.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,iBAAiB,CAAiB;IAC1C,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,oBAAoB,CAAa;IACzC,OAAO,CAAC,WAAW,CAAS;IAG5B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAOpB;;IAQX;;OAEG;IACH,OAAO,CAAC,cAAc;IAQtB;;OAEG;IACH,OAAO,CAAC,cAAc;IAMtB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAehB;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO;IAMrC;;OAEG;IACH,wBAAwB,IAAI,MAAM;IAIlC;;OAEG;IACH,mBAAmB,IAAI,MAAM;IAI7B;;OAEG;IACH,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAI7C;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAIvC;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAO1C;;OAEG;IACH,OAAO,CAAC,eAAe;IAUvB;;OAEG;IACH,OAAO,IAAI,IAAI;CAYhB"}
@@ -0,0 +1,127 @@
1
+ /**
2
+ * Activity Detection for Grain Analytics
3
+ * Tracks user activity (mouse, keyboard, touch, scroll) to determine if user is active
4
+ */
5
+ export class ActivityDetector {
6
+ constructor() {
7
+ this.activityThreshold = 30000; // 30 seconds
8
+ this.listeners = [];
9
+ this.isDestroyed = false;
10
+ // Events that indicate user activity
11
+ this.activityEvents = [
12
+ 'mousemove',
13
+ 'mousedown',
14
+ 'keydown',
15
+ 'scroll',
16
+ 'touchstart',
17
+ 'click',
18
+ ];
19
+ this.lastActivityTime = Date.now();
20
+ this.boundActivityHandler = this.debounce(this.handleActivity.bind(this), 500);
21
+ this.setupListeners();
22
+ }
23
+ /**
24
+ * Setup event listeners for activity detection
25
+ */
26
+ setupListeners() {
27
+ if (typeof window === 'undefined')
28
+ return;
29
+ for (const event of this.activityEvents) {
30
+ window.addEventListener(event, this.boundActivityHandler, { passive: true });
31
+ }
32
+ }
33
+ /**
34
+ * Handle activity event
35
+ */
36
+ handleActivity() {
37
+ if (this.isDestroyed)
38
+ return;
39
+ this.lastActivityTime = Date.now();
40
+ this.notifyListeners();
41
+ }
42
+ /**
43
+ * Debounce function to limit how often activity handler is called
44
+ */
45
+ debounce(func, wait) {
46
+ let timeout = null;
47
+ return () => {
48
+ if (timeout !== null) {
49
+ clearTimeout(timeout);
50
+ }
51
+ timeout = window.setTimeout(() => {
52
+ func();
53
+ timeout = null;
54
+ }, wait);
55
+ };
56
+ }
57
+ /**
58
+ * Check if user is currently active
59
+ * @param threshold Time in ms to consider user inactive (default: 30s)
60
+ */
61
+ isActive(threshold) {
62
+ const thresholdToUse = threshold ?? this.activityThreshold;
63
+ const now = Date.now();
64
+ return (now - this.lastActivityTime) < thresholdToUse;
65
+ }
66
+ /**
67
+ * Get time since last activity in milliseconds
68
+ */
69
+ getTimeSinceLastActivity() {
70
+ return Date.now() - this.lastActivityTime;
71
+ }
72
+ /**
73
+ * Get last activity timestamp
74
+ */
75
+ getLastActivityTime() {
76
+ return this.lastActivityTime;
77
+ }
78
+ /**
79
+ * Set activity threshold
80
+ */
81
+ setActivityThreshold(threshold) {
82
+ this.activityThreshold = threshold;
83
+ }
84
+ /**
85
+ * Add listener for activity changes
86
+ */
87
+ addListener(listener) {
88
+ this.listeners.push(listener);
89
+ }
90
+ /**
91
+ * Remove listener
92
+ */
93
+ removeListener(listener) {
94
+ const index = this.listeners.indexOf(listener);
95
+ if (index > -1) {
96
+ this.listeners.splice(index, 1);
97
+ }
98
+ }
99
+ /**
100
+ * Notify all listeners
101
+ */
102
+ notifyListeners() {
103
+ for (const listener of this.listeners) {
104
+ try {
105
+ listener();
106
+ }
107
+ catch (error) {
108
+ console.error('[Activity Detector] Listener error:', error);
109
+ }
110
+ }
111
+ }
112
+ /**
113
+ * Cleanup and remove listeners
114
+ */
115
+ destroy() {
116
+ if (this.isDestroyed)
117
+ return;
118
+ if (typeof window !== 'undefined') {
119
+ for (const event of this.activityEvents) {
120
+ window.removeEventListener(event, this.boundActivityHandler);
121
+ }
122
+ }
123
+ this.listeners = [];
124
+ this.isDestroyed = true;
125
+ }
126
+ }
127
+ //# sourceMappingURL=activity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activity.js","sourceRoot":"","sources":["../../src/activity.ts"],"names":[],"mappings":"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"}