flowgrid-sdk 1.2.0 → 1.3.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 (314) hide show
  1. package/README.md +224 -250
  2. package/dist/237.flowgrid.min.js +2 -0
  3. package/dist/237.flowgrid.min.js.map +1 -0
  4. package/dist/546.flowgrid.min.js +3 -0
  5. package/dist/546.flowgrid.min.js.LICENSE.txt +14 -0
  6. package/dist/546.flowgrid.min.js.map +1 -0
  7. package/dist/EXAMPLE.d.ts +1 -0
  8. package/dist/EXAMPLE.js +55 -0
  9. package/dist/EXAMPLE.js.map +1 -0
  10. package/dist/browser.d.ts +46 -103
  11. package/dist/browser.js +102 -0
  12. package/dist/browser.js.map +1 -0
  13. package/dist/flowgrid.min.js +1 -1
  14. package/dist/flowgrid.min.js.map +1 -1
  15. package/dist/index.d.ts +7 -8
  16. package/dist/index.js +64 -1
  17. package/dist/index.js.map +1 -1
  18. package/dist/lib/client/transport.d.ts +14 -4
  19. package/dist/lib/client/transport.js +432 -0
  20. package/dist/lib/client/transport.js.map +1 -0
  21. package/dist/lib/consent/index.d.ts +0 -5
  22. package/dist/lib/consent/index.js +32 -0
  23. package/dist/lib/consent/index.js.map +1 -0
  24. package/dist/lib/consent/manager.js +336 -0
  25. package/dist/lib/consent/manager.js.map +1 -0
  26. package/dist/lib/consent/types.d.ts +3 -20
  27. package/dist/lib/consent/types.js +10 -0
  28. package/dist/lib/consent/types.js.map +1 -0
  29. package/dist/lib/features/analytics/attribution.d.ts +6 -47
  30. package/dist/lib/features/analytics/attribution.js +181 -0
  31. package/dist/lib/features/analytics/attribution.js.map +1 -0
  32. package/dist/lib/features/analytics/events.d.ts +1 -28
  33. package/dist/lib/features/analytics/events.js +256 -0
  34. package/dist/lib/features/analytics/events.js.map +1 -0
  35. package/dist/lib/features/analytics/funnels.js +260 -0
  36. package/dist/lib/features/analytics/funnels.js.map +1 -0
  37. package/dist/lib/features/analytics/heatmaps.d.ts +12 -19
  38. package/dist/lib/features/analytics/heatmaps.js +258 -0
  39. package/dist/lib/features/analytics/heatmaps.js.map +1 -0
  40. package/dist/lib/features/analytics/identify.d.ts +1 -21
  41. package/dist/lib/features/analytics/identify.js +213 -0
  42. package/dist/lib/features/analytics/identify.js.map +1 -0
  43. package/dist/lib/features/analytics/index.d.ts +2 -0
  44. package/dist/lib/features/analytics/index.js +15 -0
  45. package/dist/lib/features/analytics/index.js.map +1 -0
  46. package/dist/lib/features/analytics/page-views.d.ts +13 -30
  47. package/dist/lib/features/analytics/page-views.js +268 -0
  48. package/dist/lib/features/analytics/page-views.js.map +1 -0
  49. package/dist/lib/features/analytics/performance.d.ts +18 -24
  50. package/dist/lib/features/analytics/performance.js +232 -0
  51. package/dist/lib/features/analytics/performance.js.map +1 -0
  52. package/dist/lib/features/analytics/replay.d.ts +170 -0
  53. package/dist/lib/features/analytics/replay.js +381 -0
  54. package/dist/lib/features/analytics/replay.js.map +1 -0
  55. package/dist/lib/features/analytics/retention.d.ts +1 -76
  56. package/dist/lib/features/analytics/retention.js +135 -0
  57. package/dist/lib/features/analytics/retention.js.map +1 -0
  58. package/dist/lib/features/analytics/sessions.d.ts +12 -37
  59. package/dist/lib/features/analytics/sessions.js +213 -0
  60. package/dist/lib/features/analytics/sessions.js.map +1 -0
  61. package/dist/lib/features/core/activation.d.ts +1 -24
  62. package/dist/lib/features/core/activation.js +175 -0
  63. package/dist/lib/features/core/activation.js.map +1 -0
  64. package/dist/lib/features/core/experiment.d.ts +53 -21
  65. package/dist/lib/features/core/experiment.js +554 -0
  66. package/dist/lib/features/core/experiment.js.map +1 -0
  67. package/dist/lib/features/core/index.js +9 -0
  68. package/dist/lib/features/core/index.js.map +1 -0
  69. package/dist/lib/features/core/track-feature.d.ts +1 -8
  70. package/dist/lib/features/core/track-feature.js +119 -0
  71. package/dist/lib/features/core/track-feature.js.map +1 -0
  72. package/dist/lib/features/core/track-prompt.d.ts +5 -8
  73. package/dist/lib/features/core/track-prompt.js +181 -0
  74. package/dist/lib/features/core/track-prompt.js.map +1 -0
  75. package/dist/lib/features/ecommerce/cart.d.ts +1 -24
  76. package/dist/lib/features/ecommerce/cart.js +244 -0
  77. package/dist/lib/features/ecommerce/cart.js.map +1 -0
  78. package/dist/lib/features/ecommerce/checkout.d.ts +1 -28
  79. package/dist/lib/features/ecommerce/checkout.js +254 -0
  80. package/dist/lib/features/ecommerce/checkout.js.map +1 -0
  81. package/dist/lib/features/ecommerce/index.d.ts +0 -2
  82. package/dist/lib/features/ecommerce/index.js +15 -0
  83. package/dist/lib/features/ecommerce/index.js.map +1 -0
  84. package/dist/lib/features/ecommerce/ltv.d.ts +1 -69
  85. package/dist/lib/features/ecommerce/ltv.js +114 -0
  86. package/dist/lib/features/ecommerce/ltv.js.map +1 -0
  87. package/dist/lib/features/ecommerce/products.d.ts +1 -33
  88. package/dist/lib/features/ecommerce/products.js +223 -0
  89. package/dist/lib/features/ecommerce/products.js.map +1 -0
  90. package/dist/lib/features/ecommerce/promotions.d.ts +1 -30
  91. package/dist/lib/features/ecommerce/promotions.js +197 -0
  92. package/dist/lib/features/ecommerce/promotions.js.map +1 -0
  93. package/dist/lib/features/ecommerce/purchases.d.ts +1 -48
  94. package/dist/lib/features/ecommerce/purchases.js +193 -0
  95. package/dist/lib/features/ecommerce/purchases.js.map +1 -0
  96. package/dist/lib/features/ecommerce/refunds.d.ts +1 -27
  97. package/dist/lib/features/ecommerce/refunds.js +195 -0
  98. package/dist/lib/features/ecommerce/refunds.js.map +1 -0
  99. package/dist/lib/features/ecommerce/search.d.ts +1 -24
  100. package/dist/lib/features/ecommerce/search.js +156 -0
  101. package/dist/lib/features/ecommerce/search.js.map +1 -0
  102. package/dist/lib/features/ecommerce/subscriptions.d.ts +1 -28
  103. package/dist/lib/features/ecommerce/subscriptions.js +207 -0
  104. package/dist/lib/features/ecommerce/subscriptions.js.map +1 -0
  105. package/dist/lib/features/ecommerce/wishlist.d.ts +1 -28
  106. package/dist/lib/features/ecommerce/wishlist.js +186 -0
  107. package/dist/lib/features/ecommerce/wishlist.js.map +1 -0
  108. package/dist/lib/features/enterprise/acquisition.d.ts +2 -57
  109. package/dist/lib/features/enterprise/acquisition.js +166 -0
  110. package/dist/lib/features/enterprise/acquisition.js.map +1 -0
  111. package/dist/lib/features/enterprise/alerts.d.ts +1 -37
  112. package/dist/lib/features/enterprise/alerts.js +246 -0
  113. package/dist/lib/features/enterprise/alerts.js.map +1 -0
  114. package/dist/lib/features/enterprise/churn.d.ts +1 -42
  115. package/dist/lib/features/enterprise/churn.js +175 -0
  116. package/dist/lib/features/enterprise/churn.js.map +1 -0
  117. package/dist/lib/features/enterprise/cohorts.d.ts +1 -37
  118. package/dist/lib/features/enterprise/cohorts.js +201 -0
  119. package/dist/lib/features/enterprise/cohorts.js.map +1 -0
  120. package/dist/lib/features/enterprise/engagement.d.ts +40 -46
  121. package/dist/lib/features/enterprise/engagement.js +335 -0
  122. package/dist/lib/features/enterprise/engagement.js.map +1 -0
  123. package/dist/lib/features/enterprise/forecasting.d.ts +0 -50
  124. package/dist/lib/features/enterprise/forecasting.js +232 -0
  125. package/dist/lib/features/enterprise/forecasting.js.map +1 -0
  126. package/dist/lib/features/enterprise/index.d.ts +1 -1
  127. package/dist/lib/features/enterprise/index.js +76 -0
  128. package/dist/lib/features/enterprise/index.js.map +1 -0
  129. package/dist/lib/features/enterprise/monetization.d.ts +1 -60
  130. package/dist/lib/features/enterprise/monetization.js +146 -0
  131. package/dist/lib/features/enterprise/monetization.js.map +1 -0
  132. package/dist/lib/features/enterprise/multi-path-funnels.d.ts +1 -17
  133. package/dist/lib/features/enterprise/multi-path-funnels.js +205 -0
  134. package/dist/lib/features/enterprise/multi-path-funnels.js.map +1 -0
  135. package/dist/lib/features/enterprise/paths.d.ts +1 -56
  136. package/dist/lib/features/enterprise/paths.js +149 -0
  137. package/dist/lib/features/enterprise/paths.js.map +1 -0
  138. package/dist/lib/features/enterprise/security.d.ts +8 -57
  139. package/dist/lib/features/enterprise/security.js +202 -0
  140. package/dist/lib/features/enterprise/security.js.map +1 -0
  141. package/dist/lib/features/enterprise/support.d.ts +3 -42
  142. package/dist/lib/features/enterprise/support.js +162 -0
  143. package/dist/lib/features/enterprise/support.js.map +1 -0
  144. package/dist/lib/flowgrid.d.ts +278 -0
  145. package/dist/lib/flowgrid.js +323 -0
  146. package/dist/lib/flowgrid.js.map +1 -0
  147. package/dist/lib/frameworks/index.d.ts +13 -6
  148. package/dist/lib/frameworks/index.js +18 -0
  149. package/dist/lib/frameworks/index.js.map +1 -0
  150. package/dist/lib/frameworks/nextjs/client.js +355 -0
  151. package/dist/lib/frameworks/nextjs/client.js.map +1 -0
  152. package/dist/lib/frameworks/nextjs/index.js +31 -0
  153. package/dist/lib/frameworks/nextjs/index.js.map +1 -0
  154. package/dist/lib/frameworks/nextjs/server.js +259 -0
  155. package/dist/lib/frameworks/nextjs/server.js.map +1 -0
  156. package/dist/lib/frameworks/node/index.js +391 -0
  157. package/dist/lib/frameworks/node/index.js.map +1 -0
  158. package/dist/lib/frameworks/nuxt/index.js +288 -0
  159. package/dist/lib/frameworks/nuxt/index.js.map +1 -0
  160. package/dist/lib/frameworks/react/CookieBanner.js +166 -0
  161. package/dist/lib/frameworks/react/CookieBanner.js.map +1 -0
  162. package/dist/lib/frameworks/react/index.d.ts +2 -2
  163. package/dist/lib/frameworks/react/index.js +271 -0
  164. package/dist/lib/frameworks/react/index.js.map +1 -0
  165. package/dist/lib/frameworks/vue/CookieBanner.js +165 -0
  166. package/dist/lib/frameworks/vue/CookieBanner.js.map +1 -0
  167. package/dist/lib/frameworks/vue/index.d.ts +2 -2
  168. package/dist/lib/frameworks/vue/index.js +390 -0
  169. package/dist/lib/frameworks/vue/index.js.map +1 -0
  170. package/dist/lib/tracking/analytics/attribution.d.ts +14 -0
  171. package/dist/lib/tracking/analytics/attribution.js +18 -0
  172. package/dist/lib/tracking/analytics/attribution.js.map +1 -0
  173. package/dist/lib/tracking/analytics/events.d.ts +26 -0
  174. package/dist/lib/tracking/analytics/events.js +30 -0
  175. package/dist/lib/tracking/analytics/events.js.map +1 -0
  176. package/dist/lib/tracking/analytics/funnels.d.ts +16 -0
  177. package/dist/lib/tracking/analytics/funnels.js +22 -0
  178. package/dist/lib/tracking/analytics/funnels.js.map +1 -0
  179. package/dist/lib/tracking/analytics/heatmaps.d.ts +27 -0
  180. package/dist/lib/tracking/analytics/heatmaps.js +22 -0
  181. package/dist/lib/tracking/analytics/heatmaps.js.map +1 -0
  182. package/dist/lib/tracking/analytics/identify.d.ts +16 -0
  183. package/dist/lib/tracking/analytics/identify.js +22 -0
  184. package/dist/lib/tracking/analytics/identify.js.map +1 -0
  185. package/dist/lib/tracking/analytics/index.d.ts +10 -0
  186. package/dist/lib/tracking/analytics/index.js +11 -0
  187. package/dist/lib/tracking/analytics/index.js.map +1 -0
  188. package/dist/lib/tracking/analytics/page-views.d.ts +29 -0
  189. package/dist/lib/tracking/analytics/page-views.js +50 -0
  190. package/dist/lib/tracking/analytics/page-views.js.map +1 -0
  191. package/dist/lib/tracking/analytics/performance.d.ts +22 -0
  192. package/dist/lib/tracking/analytics/performance.js +22 -0
  193. package/dist/lib/tracking/analytics/performance.js.map +1 -0
  194. package/dist/lib/tracking/analytics/replay.d.ts +34 -0
  195. package/dist/lib/tracking/analytics/replay.js +46 -0
  196. package/dist/lib/tracking/analytics/replay.js.map +1 -0
  197. package/dist/lib/tracking/analytics/retention.d.ts +10 -0
  198. package/dist/lib/tracking/analytics/retention.js +10 -0
  199. package/dist/lib/tracking/analytics/retention.js.map +1 -0
  200. package/dist/lib/tracking/analytics/sessions.d.ts +20 -0
  201. package/dist/lib/tracking/analytics/sessions.js +26 -0
  202. package/dist/lib/tracking/analytics/sessions.js.map +1 -0
  203. package/dist/lib/tracking/core/activation.d.ts +23 -0
  204. package/dist/lib/tracking/core/activation.js +33 -0
  205. package/dist/lib/tracking/core/activation.js.map +1 -0
  206. package/dist/lib/tracking/core/experiment.d.ts +122 -0
  207. package/dist/lib/tracking/core/experiment.js +150 -0
  208. package/dist/lib/tracking/core/experiment.js.map +1 -0
  209. package/dist/lib/tracking/core/feature.d.ts +13 -0
  210. package/dist/lib/tracking/core/feature.js +14 -0
  211. package/dist/lib/tracking/core/feature.js.map +1 -0
  212. package/dist/lib/tracking/core/index.d.ts +4 -0
  213. package/dist/lib/tracking/core/index.js +5 -0
  214. package/dist/lib/tracking/core/index.js.map +1 -0
  215. package/dist/lib/tracking/core/prompt.d.ts +18 -0
  216. package/dist/lib/tracking/core/prompt.js +26 -0
  217. package/dist/lib/tracking/core/prompt.js.map +1 -0
  218. package/dist/lib/tracking/ecommerce/cart.d.ts +17 -0
  219. package/dist/lib/tracking/ecommerce/cart.js +22 -0
  220. package/dist/lib/tracking/ecommerce/cart.js.map +1 -0
  221. package/dist/lib/tracking/ecommerce/checkout.d.ts +17 -0
  222. package/dist/lib/tracking/ecommerce/checkout.js +22 -0
  223. package/dist/lib/tracking/ecommerce/checkout.js.map +1 -0
  224. package/dist/lib/tracking/ecommerce/index.d.ts +10 -0
  225. package/dist/lib/tracking/ecommerce/index.js +11 -0
  226. package/dist/lib/tracking/ecommerce/index.js.map +1 -0
  227. package/dist/lib/tracking/ecommerce/ltv.d.ts +15 -0
  228. package/dist/lib/tracking/ecommerce/ltv.js +14 -0
  229. package/dist/lib/tracking/ecommerce/ltv.js.map +1 -0
  230. package/dist/lib/tracking/ecommerce/products.d.ts +15 -0
  231. package/dist/lib/tracking/ecommerce/products.js +18 -0
  232. package/dist/lib/tracking/ecommerce/products.js.map +1 -0
  233. package/dist/lib/tracking/ecommerce/promotions.d.ts +14 -0
  234. package/dist/lib/tracking/ecommerce/promotions.js +25 -0
  235. package/dist/lib/tracking/ecommerce/promotions.js.map +1 -0
  236. package/dist/lib/tracking/ecommerce/purchases.d.ts +11 -0
  237. package/dist/lib/tracking/ecommerce/purchases.js +10 -0
  238. package/dist/lib/tracking/ecommerce/purchases.js.map +1 -0
  239. package/dist/lib/tracking/ecommerce/refunds.d.ts +17 -0
  240. package/dist/lib/tracking/ecommerce/refunds.js +22 -0
  241. package/dist/lib/tracking/ecommerce/refunds.js.map +1 -0
  242. package/dist/lib/tracking/ecommerce/search.d.ts +24 -0
  243. package/dist/lib/tracking/ecommerce/search.js +22 -0
  244. package/dist/lib/tracking/ecommerce/search.js.map +1 -0
  245. package/dist/lib/tracking/ecommerce/subscriptions.d.ts +21 -0
  246. package/dist/lib/tracking/ecommerce/subscriptions.js +38 -0
  247. package/dist/lib/tracking/ecommerce/subscriptions.js.map +1 -0
  248. package/dist/lib/tracking/ecommerce/wishlist.d.ts +19 -0
  249. package/dist/lib/tracking/ecommerce/wishlist.js +26 -0
  250. package/dist/lib/tracking/ecommerce/wishlist.js.map +1 -0
  251. package/dist/lib/tracking/enterprise/acquisition.d.ts +25 -0
  252. package/dist/lib/tracking/enterprise/acquisition.js +22 -0
  253. package/dist/lib/tracking/enterprise/acquisition.js.map +1 -0
  254. package/dist/lib/tracking/enterprise/alerts.d.ts +32 -0
  255. package/dist/lib/tracking/enterprise/alerts.js +30 -0
  256. package/dist/lib/tracking/enterprise/alerts.js.map +1 -0
  257. package/dist/lib/tracking/enterprise/churn.d.ts +23 -0
  258. package/dist/lib/tracking/enterprise/churn.js +22 -0
  259. package/dist/lib/tracking/enterprise/churn.js.map +1 -0
  260. package/dist/lib/tracking/enterprise/cohorts.d.ts +18 -0
  261. package/dist/lib/tracking/enterprise/cohorts.js +18 -0
  262. package/dist/lib/tracking/enterprise/cohorts.js.map +1 -0
  263. package/dist/lib/tracking/enterprise/engagement.d.ts +31 -0
  264. package/dist/lib/tracking/enterprise/engagement.js +44 -0
  265. package/dist/lib/tracking/enterprise/engagement.js.map +1 -0
  266. package/dist/lib/tracking/enterprise/forecasting.d.ts +18 -0
  267. package/dist/lib/tracking/enterprise/forecasting.js +22 -0
  268. package/dist/lib/tracking/enterprise/forecasting.js.map +1 -0
  269. package/dist/lib/tracking/enterprise/index.d.ts +11 -0
  270. package/dist/lib/tracking/enterprise/index.js +12 -0
  271. package/dist/lib/tracking/enterprise/index.js.map +1 -0
  272. package/dist/lib/tracking/enterprise/monetization.d.ts +14 -0
  273. package/dist/lib/tracking/enterprise/monetization.js +10 -0
  274. package/dist/lib/tracking/enterprise/monetization.js.map +1 -0
  275. package/dist/lib/tracking/enterprise/multi-path-funnels.d.ts +20 -0
  276. package/dist/lib/tracking/enterprise/multi-path-funnels.js +18 -0
  277. package/dist/lib/tracking/enterprise/multi-path-funnels.js.map +1 -0
  278. package/dist/lib/tracking/enterprise/paths.d.ts +20 -0
  279. package/dist/lib/tracking/enterprise/paths.js +18 -0
  280. package/dist/lib/tracking/enterprise/paths.js.map +1 -0
  281. package/dist/lib/tracking/enterprise/security.d.ts +28 -0
  282. package/dist/lib/tracking/enterprise/security.js +26 -0
  283. package/dist/lib/tracking/enterprise/security.js.map +1 -0
  284. package/dist/lib/tracking/enterprise/support.d.ts +25 -0
  285. package/dist/lib/tracking/enterprise/support.js +22 -0
  286. package/dist/lib/tracking/enterprise/support.js.map +1 -0
  287. package/dist/lib/tracking/index.d.ts +4 -0
  288. package/dist/lib/tracking/index.js +5 -0
  289. package/dist/lib/tracking/index.js.map +1 -0
  290. package/dist/lib/types/analytics.d.ts +10 -2
  291. package/dist/lib/types/analytics.js +6 -0
  292. package/dist/lib/types/analytics.js.map +1 -0
  293. package/dist/lib/types/common.js +6 -0
  294. package/dist/lib/types/common.js.map +1 -0
  295. package/dist/lib/types/ecommerce.js +6 -0
  296. package/dist/lib/types/ecommerce.js.map +1 -0
  297. package/dist/lib/types/index.js +8 -0
  298. package/dist/lib/types/index.js.map +1 -0
  299. package/dist/lib/utils/browser.d.ts +16 -0
  300. package/dist/lib/utils/browser.js +32 -0
  301. package/dist/lib/utils/browser.js.map +1 -0
  302. package/dist/lib/utils/identity.js +346 -0
  303. package/dist/lib/utils/identity.js.map +1 -0
  304. package/dist/lib/utils/storage.js +105 -0
  305. package/dist/lib/utils/storage.js.map +1 -0
  306. package/dist/umd/237.index.js +2 -0
  307. package/dist/umd/237.index.js.map +1 -0
  308. package/dist/umd/546.index.js +3 -0
  309. package/dist/umd/546.index.js.LICENSE.txt +14 -0
  310. package/dist/umd/546.index.js.map +1 -0
  311. package/dist/umd/index.js +2 -0
  312. package/dist/umd/index.js.map +1 -0
  313. package/package.json +27 -80
  314. package/dist/lib/features/ecommerce/inventory.d.ts +0 -219
@@ -0,0 +1,165 @@
1
+ /**
2
+ * @fileoverview FlowGrid Cookie Banner — Vue 3 Component
3
+ * @module frameworks/vue/CookieBanner
4
+ *
5
+ * @description
6
+ * A customisable cookie consent banner for Vue 3 applications.
7
+ * Works with the FlowGrid {@link ConsentManager}.
8
+ *
9
+ * @example
10
+ * ```vue
11
+ * <script setup>
12
+ * import { CookieBanner } from 'flowgrid-sdk/vue';
13
+ * import { ConsentManager, FlowGridTransport } from 'flowgrid-sdk';
14
+ *
15
+ * const consent = new ConsentManager({
16
+ * onChange: (prefs) => {
17
+ * FlowGridTransport.setConsent({
18
+ * analytics: prefs.analytics,
19
+ * marketing: prefs.marketing,
20
+ * });
21
+ * },
22
+ * });
23
+ * </script>
24
+ *
25
+ * <template>
26
+ * <CookieBanner
27
+ * :consent="consent"
28
+ * :config="{
29
+ * title: 'We use cookies',
30
+ * description: 'We use cookies to improve your experience.',
31
+ * privacyPolicyUrl: '/privacy',
32
+ * theme: { position: 'bottom', primaryColor: '#4F46E5' },
33
+ * }"
34
+ * />
35
+ * </template>
36
+ * ```
37
+ */
38
+ import { defineComponent, ref, onMounted, h } from 'vue';
39
+ /**
40
+ * Vue 3 Cookie Banner component.
41
+ *
42
+ * Renders a GDPR-compliant cookie consent banner with accept, reject,
43
+ * and customise options. Uses the {@link ConsentManager} to persist choices.
44
+ *
45
+ * @example
46
+ * ```vue
47
+ * <template>
48
+ * <CookieBanner
49
+ * :consent="consentManager"
50
+ * :config="{ title: 'Cookies', theme: { position: 'bottom-right' } }"
51
+ * @close="onBannerClosed"
52
+ * />
53
+ * </template>
54
+ * ```
55
+ */
56
+ export const CookieBanner = defineComponent({
57
+ name: 'FlowGridCookieBanner',
58
+ props: {
59
+ consent: {
60
+ type: Object,
61
+ required: true,
62
+ },
63
+ config: {
64
+ type: Object,
65
+ default: () => ({}),
66
+ },
67
+ },
68
+ emits: ['close'],
69
+ setup(props, { emit }) {
70
+ const visible = ref(false);
71
+ const showDetails = ref(false);
72
+ const prefs = ref(props.consent.getPreferences());
73
+ onMounted(() => {
74
+ if (props.config?.forceShow || !props.consent.hasConsented()) {
75
+ visible.value = true;
76
+ }
77
+ });
78
+ const close = () => {
79
+ visible.value = false;
80
+ emit('close');
81
+ };
82
+ const acceptAll = () => {
83
+ props.consent.acceptAll();
84
+ close();
85
+ };
86
+ const rejectAll = () => {
87
+ props.consent.rejectNonEssential();
88
+ close();
89
+ };
90
+ const save = () => {
91
+ props.consent.update(prefs.value);
92
+ close();
93
+ };
94
+ const toggle = (cat) => {
95
+ prefs.value = { ...prefs.value, [cat]: !prefs.value[cat] };
96
+ };
97
+ return () => {
98
+ if (!visible.value)
99
+ return null;
100
+ const theme = props.config?.theme ?? {};
101
+ const position = theme.position ?? 'bottom';
102
+ const accent = theme.primaryColor ?? '#4F46E5';
103
+ const descriptions = props.config?.categoryDescriptions ?? {};
104
+ const containerStyle = {
105
+ position: 'fixed',
106
+ zIndex: theme.zIndex ?? 9999,
107
+ left: 0,
108
+ right: 0,
109
+ padding: '20px',
110
+ boxSizing: 'border-box',
111
+ fontFamily: theme.fontFamily ?? 'system-ui, -apple-system, sans-serif',
112
+ backgroundColor: theme.backgroundColor ?? '#FFFFFF',
113
+ color: theme.textColor ?? '#1F2937',
114
+ boxShadow: '0 -2px 16px rgba(0,0,0,0.1)',
115
+ ...(position === 'top' ? { top: 0 } : {}),
116
+ ...(position === 'bottom' ? { bottom: 0 } : {}),
117
+ ...(position === 'bottom-left' ? { bottom: '20px', left: '20px', right: 'auto', maxWidth: '420px', borderRadius: theme.borderRadius ?? '12px' } : {}),
118
+ ...(position === 'bottom-right' ? { bottom: '20px', right: '20px', left: 'auto', maxWidth: '420px', borderRadius: theme.borderRadius ?? '12px' } : {}),
119
+ ...(position === 'center' ? { top: '50%', left: '50%', right: 'auto', transform: 'translate(-50%, -50%)', maxWidth: '540px', borderRadius: theme.borderRadius ?? '12px' } : {}),
120
+ };
121
+ const btnPrimary = {
122
+ padding: '10px 20px', border: 'none', borderRadius: '6px', cursor: 'pointer',
123
+ fontSize: '14px', fontWeight: 600, backgroundColor: accent, color: '#FFFFFF',
124
+ };
125
+ const btnSecondary = {
126
+ ...btnPrimary, backgroundColor: 'transparent', color: accent, border: `1px solid ${accent}`,
127
+ };
128
+ const title = props.config?.title ?? 'Cookie Preferences';
129
+ const desc = props.config?.description ?? 'We use cookies to improve your experience and analyse site traffic.';
130
+ const categories = showDetails.value
131
+ ? [
132
+ h('label', { style: { display: 'flex', alignItems: 'center', marginBottom: '10px', fontSize: '14px' } }, [
133
+ h('input', { type: 'checkbox', checked: true, disabled: true, style: { marginRight: '8px' } }),
134
+ h('span', {}, [h('strong', {}, 'Necessary'), h('span', { style: { opacity: 0.7, marginLeft: '8px' } }, descriptions.necessary ?? 'Required for the site to function.')]),
135
+ ]),
136
+ ...['analytics', 'marketing', 'preferences'].map((cat) => h('label', { style: { display: 'flex', alignItems: 'center', marginBottom: '10px', fontSize: '14px', cursor: 'pointer' } }, [
137
+ h('input', { type: 'checkbox', checked: prefs.value[cat], onChange: () => toggle(cat), style: { marginRight: '8px' } }),
138
+ h('span', {}, [
139
+ h('strong', {}, cat.charAt(0).toUpperCase() + cat.slice(1)),
140
+ h('span', { style: { opacity: 0.7, marginLeft: '8px' } }, descriptions[cat] ?? ''),
141
+ ]),
142
+ ])),
143
+ ]
144
+ : [];
145
+ return h('div', { style: containerStyle, role: 'dialog', 'aria-label': title }, [
146
+ h('div', { style: { maxWidth: '960px', margin: '0 auto' } }, [
147
+ h('h3', { style: { margin: '0 0 8px', fontSize: '18px', fontWeight: 700 } }, title),
148
+ h('p', { style: { margin: '0 0 16px', fontSize: '14px', lineHeight: 1.5, opacity: 0.8 } }, desc),
149
+ ...(showDetails.value ? [h('div', { style: { marginBottom: '16px' } }, categories)] : []),
150
+ h('div', { style: { display: 'flex', gap: '10px', flexWrap: 'wrap', alignItems: 'center' } }, [
151
+ h('button', { style: btnPrimary, onClick: acceptAll }, props.config?.acceptAllLabel ?? 'Accept All'),
152
+ h('button', { style: btnSecondary, onClick: rejectAll }, props.config?.rejectAllLabel ?? 'Reject All'),
153
+ !showDetails.value
154
+ ? h('button', { style: { ...btnSecondary, border: 'none', textDecoration: 'underline' }, onClick: () => { showDetails.value = true; } }, props.config?.customizeLabel ?? 'Customize')
155
+ : h('button', { style: btnPrimary, onClick: save }, props.config?.saveLabel ?? 'Save Preferences'),
156
+ props.config?.privacyPolicyUrl
157
+ ? h('a', { href: props.config.privacyPolicyUrl, style: { fontSize: '13px', opacity: 0.7, marginLeft: 'auto' }, target: '_blank', rel: 'noopener noreferrer' }, 'Privacy Policy')
158
+ : null,
159
+ ]),
160
+ ]),
161
+ ]);
162
+ };
163
+ },
164
+ });
165
+ //# sourceMappingURL=CookieBanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CookieBanner.js","sourceRoot":"","sources":["../../../../src/lib/frameworks/vue/CookieBanner.ts"],"names":[],"mappings":"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"}
@@ -15,7 +15,7 @@
15
15
  * const app = createApp(App);
16
16
  * app.use(FlowGridPlugin, {
17
17
  * webId: 'your-web-id',
18
- * endpoint: 'https://api.flowgrid.io',
18
+ * endpoint: 'https://api.flow-grid.xyz',
19
19
  * apiKey: 'your-api-key'
20
20
  * });
21
21
  * app.mount('#app');
@@ -60,7 +60,7 @@ export interface FlowGridInstance {
60
60
  * createApp(App)
61
61
  * .use(FlowGridPlugin, {
62
62
  * webId: 'web_123',
63
- * endpoint: 'https://api.flowgrid.io',
63
+ * endpoint: 'https://api.flow-grid.xyz',
64
64
  * apiKey: 'key_abc',
65
65
  * autoTrackPageViews: true
66
66
  * })
@@ -0,0 +1,390 @@
1
+ /**
2
+ * @fileoverview FlowGrid SDK - Vue 3 Integration
3
+ * @module frameworks/vue
4
+ *
5
+ * @description
6
+ * Vue 3 composables and plugin for FlowGrid SDK.
7
+ * Uses Composition API for reactive state management.
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * // main.ts
12
+ * import { createApp } from 'vue';
13
+ * import { FlowGridPlugin } from 'flowgrid-sdk/vue';
14
+ *
15
+ * const app = createApp(App);
16
+ * app.use(FlowGridPlugin, {
17
+ * webId: 'your-web-id',
18
+ * endpoint: 'https://api.flow-grid.xyz',
19
+ * apiKey: 'your-api-key'
20
+ * });
21
+ * app.mount('#app');
22
+ * ```
23
+ */
24
+ import { inject, ref, onMounted, watch } from 'vue';
25
+ // Import core SDK
26
+ import { Activation, TrackFeature, TrackPrompt, Experiment, PageViews, Sessions, Events, Identify, Funnels, Products, CartTracking, Checkout, Purchases } from '../../../index';
27
+ import { getVisitorId } from '../../utils/storage';
28
+ import { IdentityManager } from '../../utils/identity';
29
+ // ============================================================================
30
+ // INJECTION KEY
31
+ // ============================================================================
32
+ const FlowGridKey = Symbol('FlowGrid');
33
+ // ============================================================================
34
+ // PLUGIN
35
+ // ============================================================================
36
+ /**
37
+ * Vue plugin for FlowGrid SDK.
38
+ *
39
+ * @example
40
+ * ```ts
41
+ * import { createApp } from 'vue';
42
+ * import { FlowGridPlugin } from 'flowgrid-sdk/vue';
43
+ *
44
+ * createApp(App)
45
+ * .use(FlowGridPlugin, {
46
+ * webId: 'web_123',
47
+ * endpoint: 'https://api.flow-grid.xyz',
48
+ * apiKey: 'key_abc',
49
+ * autoTrackPageViews: true
50
+ * })
51
+ * .mount('#app');
52
+ * ```
53
+ */
54
+ export const FlowGridPlugin = {
55
+ install(app, options) {
56
+ const { webId, endpoint, apiKey, debug = false } = options;
57
+ const isReady = ref(false);
58
+ const sessionId = ref(null);
59
+ // Create identity manager for visitor/session lifecycle
60
+ const identity = new IdentityManager({
61
+ visitorId: options.visitorId || getVisitorId() || undefined,
62
+ });
63
+ const resolvedVisitorId = identity.getVisitorId() || undefined;
64
+ // Initialize SDK instances
65
+ const instance = {
66
+ activation: new Activation(webId, endpoint, apiKey, resolvedVisitorId, identity),
67
+ trackFeature: new TrackFeature(webId, endpoint, apiKey, resolvedVisitorId, identity),
68
+ trackPrompt: new TrackPrompt(webId, endpoint, apiKey, resolvedVisitorId, identity),
69
+ experiment: new Experiment(webId, endpoint, apiKey, resolvedVisitorId, identity),
70
+ pageViews: new PageViews(webId, endpoint, apiKey, resolvedVisitorId, identity),
71
+ sessions: new Sessions(webId, endpoint, apiKey, resolvedVisitorId, identity),
72
+ events: new Events(webId, endpoint, apiKey, resolvedVisitorId, identity),
73
+ identify: new Identify(webId, endpoint, apiKey, resolvedVisitorId, identity),
74
+ funnels: new Funnels(webId, endpoint, apiKey, resolvedVisitorId, identity),
75
+ products: new Products(webId, endpoint, apiKey, resolvedVisitorId, identity),
76
+ cart: new CartTracking(webId, endpoint, apiKey, resolvedVisitorId, identity),
77
+ checkout: new Checkout(webId, endpoint, apiKey, resolvedVisitorId, identity),
78
+ purchases: new Purchases(webId, endpoint, apiKey, resolvedVisitorId, identity),
79
+ isReady,
80
+ sessionId,
81
+ };
82
+ // Auto-start session
83
+ if (options.autoTrackSessions !== false && typeof window !== 'undefined') {
84
+ instance.sessions.start({
85
+ referrer: document.referrer,
86
+ landingPage: window.location.pathname,
87
+ }).then((result) => {
88
+ sessionId.value = result.response?.sessionId || null;
89
+ isReady.value = true;
90
+ if (debug)
91
+ console.log('[FlowGrid] Session started:', sessionId.value);
92
+ });
93
+ // End session on unload
94
+ window.addEventListener('beforeunload', () => {
95
+ if (sessionId.value) {
96
+ instance.sessions.end(sessionId.value);
97
+ }
98
+ });
99
+ }
100
+ else {
101
+ isReady.value = true;
102
+ }
103
+ // Provide globally
104
+ app.provide(FlowGridKey, instance);
105
+ // Also add to globalProperties for Options API
106
+ app.config.globalProperties.$flowgrid = instance;
107
+ }
108
+ };
109
+ // ============================================================================
110
+ // COMPOSABLES
111
+ // ============================================================================
112
+ /**
113
+ * Access the FlowGrid SDK instance.
114
+ *
115
+ * @example
116
+ * ```vue
117
+ * <script setup>
118
+ * import { useFlowGrid } from 'flowgrid-sdk/vue';
119
+ *
120
+ * const { events, trackEvent } = useFlowGrid();
121
+ *
122
+ * const handleClick = () => {
123
+ * trackEvent('button_clicked', { id: 'cta' });
124
+ * };
125
+ * </script>
126
+ * ```
127
+ */
128
+ export function useFlowGrid() {
129
+ const instance = inject(FlowGridKey);
130
+ if (!instance) {
131
+ throw new Error('FlowGrid plugin not installed. Call app.use(FlowGridPlugin, config) first.');
132
+ }
133
+ const trackEvent = async (name, properties) => {
134
+ await instance.events.track({ eventName: name, properties: properties || {} });
135
+ };
136
+ const identifyUser = async (userId, traits) => {
137
+ await instance.identify.user({ userId, traits: traits || {} });
138
+ };
139
+ return {
140
+ ...instance,
141
+ trackEvent,
142
+ identifyUser,
143
+ };
144
+ }
145
+ /**
146
+ * Track page views with Vue Router integration.
147
+ *
148
+ * @example
149
+ * ```vue
150
+ * <script setup>
151
+ * import { usePageView } from 'flowgrid-sdk/vue';
152
+ * import { useRoute } from 'vue-router';
153
+ *
154
+ * const route = useRoute();
155
+ * usePageView(() => route.path);
156
+ * </script>
157
+ * ```
158
+ */
159
+ export function usePageView(pathGetter) {
160
+ const { pageViews, isReady } = useFlowGrid();
161
+ const trackPage = () => {
162
+ if (typeof window === 'undefined')
163
+ return;
164
+ pageViews.track({
165
+ url: window.location.href,
166
+ path: pathGetter ? pathGetter() : window.location.pathname,
167
+ title: document.title,
168
+ referrer: document.referrer,
169
+ });
170
+ };
171
+ onMounted(() => {
172
+ if (isReady.value) {
173
+ trackPage();
174
+ }
175
+ });
176
+ // Watch for path changes if getter provided
177
+ if (pathGetter) {
178
+ watch(pathGetter, () => {
179
+ if (isReady.value) {
180
+ trackPage();
181
+ }
182
+ });
183
+ }
184
+ }
185
+ /**
186
+ * Track an event on component mount.
187
+ *
188
+ * @example
189
+ * ```vue
190
+ * <script setup>
191
+ * import { useTrackEvent } from 'flowgrid-sdk/vue';
192
+ *
193
+ * useTrackEvent('pricing_page_viewed', { source: 'navbar' });
194
+ * </script>
195
+ * ```
196
+ */
197
+ export function useTrackEvent(eventName, properties) {
198
+ const { trackEvent, isReady } = useFlowGrid();
199
+ onMounted(() => {
200
+ if (isReady.value) {
201
+ trackEvent(eventName, properties);
202
+ }
203
+ });
204
+ }
205
+ /**
206
+ * Use an experiment variant.
207
+ *
208
+ * @example
209
+ * ```vue
210
+ * <script setup>
211
+ * import { useExperiment } from 'flowgrid-sdk/vue';
212
+ *
213
+ * const { variant, isLoading } = useExperiment('checkout_v2', 'user_123');
214
+ * </script>
215
+ *
216
+ * <template>
217
+ * <NewCheckout v-if="variant === 'treatment'" />
218
+ * <OldCheckout v-else />
219
+ * </template>
220
+ * ```
221
+ */
222
+ export function useExperiment(experimentId, userId) {
223
+ const { experiment } = useFlowGrid();
224
+ const variant = ref(null);
225
+ const isLoading = ref(true);
226
+ onMounted(async () => {
227
+ try {
228
+ await experiment.trackExposure(experimentId, userId, 'control');
229
+ variant.value = 'control'; // Would come from API
230
+ }
231
+ finally {
232
+ isLoading.value = false;
233
+ }
234
+ });
235
+ return { variant, isLoading };
236
+ }
237
+ /**
238
+ * Identify a user.
239
+ *
240
+ * @example
241
+ * ```vue
242
+ * <script setup>
243
+ * import { useIdentify } from 'flowgrid-sdk/vue';
244
+ *
245
+ * const props = defineProps<{ userId: string; email: string }>();
246
+ *
247
+ * useIdentify(() => props.userId, () => ({ email: props.email }));
248
+ * </script>
249
+ * ```
250
+ */
251
+ export function useIdentify(userIdGetter, traitsGetter) {
252
+ const { identifyUser, isReady } = useFlowGrid();
253
+ watch([userIdGetter, isReady], ([userId, ready]) => {
254
+ if (ready && userId) {
255
+ identifyUser(userId, traitsGetter?.() || {});
256
+ }
257
+ }, { immediate: true });
258
+ }
259
+ /**
260
+ * Ecommerce composable.
261
+ *
262
+ * @example
263
+ * ```vue
264
+ * <script setup>
265
+ * import { useEcommerce } from 'flowgrid-sdk/vue';
266
+ *
267
+ * const { trackProductView, trackAddToCart } = useEcommerce();
268
+ *
269
+ * onMounted(() => {
270
+ * trackProductView(product);
271
+ * });
272
+ * </script>
273
+ * ```
274
+ */
275
+ export function useEcommerce() {
276
+ const { products, cart, checkout, purchases } = useFlowGrid();
277
+ const trackProductView = async (product) => {
278
+ await products.view({
279
+ productId: product.id,
280
+ name: product.name,
281
+ price: product.price,
282
+ currency: (product.currency || 'USD'),
283
+ });
284
+ };
285
+ const trackAddToCart = async (product, quantity = 1) => {
286
+ await cart.addItem({
287
+ product: {
288
+ productId: product.id,
289
+ name: product.name,
290
+ price: product.price,
291
+ currency: (product.currency || 'USD'),
292
+ },
293
+ quantity,
294
+ cartId: 'current',
295
+ });
296
+ };
297
+ const trackCheckoutStart = async (cartItems) => {
298
+ await checkout.begin({
299
+ cart: {
300
+ cartId: 'current',
301
+ items: cartItems.map(i => ({
302
+ productId: i.productId,
303
+ name: i.name,
304
+ price: i.price,
305
+ quantity: i.quantity,
306
+ lineTotal: i.price * i.quantity,
307
+ currency: 'USD',
308
+ })),
309
+ subtotal: cartItems.reduce((sum, i) => sum + i.price * i.quantity, 0),
310
+ discountTotal: 0,
311
+ total: cartItems.reduce((sum, i) => sum + i.price * i.quantity, 0),
312
+ currency: 'USD',
313
+ itemCount: cartItems.length,
314
+ },
315
+ });
316
+ };
317
+ const trackPurchase = async (orderData) => {
318
+ await purchases.track({
319
+ order: {
320
+ orderId: orderData.orderId,
321
+ items: orderData.items.map(i => ({
322
+ productId: i.id,
323
+ name: i.name,
324
+ price: i.price,
325
+ quantity: i.quantity,
326
+ lineTotal: i.price * i.quantity,
327
+ currency: 'USD',
328
+ })),
329
+ subtotal: orderData.revenue,
330
+ discountTotal: 0,
331
+ shippingTotal: 0,
332
+ taxTotal: 0,
333
+ total: orderData.revenue,
334
+ currency: 'USD',
335
+ },
336
+ });
337
+ };
338
+ return {
339
+ trackProductView,
340
+ trackAddToCart,
341
+ trackCheckoutStart,
342
+ trackPurchase,
343
+ products,
344
+ cart,
345
+ checkout,
346
+ purchases,
347
+ };
348
+ }
349
+ // ============================================================================
350
+ // VUE ROUTER PLUGIN
351
+ // ============================================================================
352
+ /**
353
+ * Vue Router plugin for automatic page view tracking.
354
+ *
355
+ * @example
356
+ * ```ts
357
+ * import { createRouter } from 'vue-router';
358
+ * import { createRouterPlugin } from 'flowgrid-sdk/vue';
359
+ *
360
+ * const router = createRouter({ ... });
361
+ * router.afterEach(createRouterPlugin());
362
+ * ```
363
+ */
364
+ export function createRouterPlugin() {
365
+ return (to, from) => {
366
+ // This would be called from the consuming app after router is set up
367
+ if (typeof window === 'undefined')
368
+ return;
369
+ // The app should call usePageView or manually track
370
+ console.log('[FlowGrid] Route change:', from.path, '->', to.path);
371
+ };
372
+ }
373
+ // ============================================================================
374
+ // EXPORTS
375
+ // ============================================================================
376
+ // Cookie Banner
377
+ import { CookieBanner as _CookieBanner } from './CookieBanner';
378
+ export { CookieBanner } from './CookieBanner';
379
+ export default {
380
+ FlowGridPlugin,
381
+ useFlowGrid,
382
+ usePageView,
383
+ useTrackEvent,
384
+ useExperiment,
385
+ useIdentify,
386
+ useEcommerce,
387
+ createRouterPlugin,
388
+ CookieBanner: _CookieBanner,
389
+ };
390
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/frameworks/vue/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Multi-touch attribution shortcuts.
3
+ */
4
+ import { Attribution, ConversionEvent } from "../../features/analytics/attribution";
5
+ export declare class AttributionTracker {
6
+ readonly client: Attribution;
7
+ constructor(client: Attribution);
8
+ /** Record a marketing touchpoint. */
9
+ touchpoint(userId: string, channel: string, properties?: Record<string, unknown>): Promise<import("../../features/analytics/attribution").TouchpointResponse>;
10
+ /** Record a conversion that should be attributed. */
11
+ conversion(userId: string, conversionType: ConversionEvent["conversionType"], properties?: Record<string, unknown>): Promise<import("../../features/analytics/attribution").TouchpointResponse>;
12
+ /** Auto-capture a touchpoint from `utm_*` params + `document.referrer`. */
13
+ captureFromUrl(userId: string): import("../../features/analytics/attribution").TouchpointConfig | null;
14
+ }
@@ -0,0 +1,18 @@
1
+ export class AttributionTracker {
2
+ constructor(client) {
3
+ this.client = client;
4
+ }
5
+ /** Record a marketing touchpoint. */
6
+ touchpoint(userId, channel, properties) {
7
+ return this.client.trackTouchpoint({ userId, channel, properties });
8
+ }
9
+ /** Record a conversion that should be attributed. */
10
+ conversion(userId, conversionType, properties) {
11
+ return this.client.recordConversion({ userId, conversionType, properties });
12
+ }
13
+ /** Auto-capture a touchpoint from `utm_*` params + `document.referrer`. */
14
+ captureFromUrl(userId) {
15
+ return this.client.captureFromUrl(userId);
16
+ }
17
+ }
18
+ //# sourceMappingURL=attribution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attribution.js","sourceRoot":"","sources":["../../../../src/lib/tracking/analytics/attribution.ts"],"names":[],"mappings":"AAKA,MAAM,OAAO,kBAAkB;IAC7B,YAA4B,MAAmB;QAAnB,WAAM,GAAN,MAAM,CAAa;IAAG,CAAC;IAEnD,qCAAqC;IACrC,UAAU,CAAC,MAAc,EAAE,OAAe,EAAE,UAAoC;QAC9E,OAAO,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,qDAAqD;IACrD,UAAU,CAAC,MAAc,EAAE,cAAiD,EAAE,UAAoC;QAChH,OAAO,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,2EAA2E;IAC3E,cAAc,CAAC,MAAc;QAC3B,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IAC5C,CAAC;CACF"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Custom event shortcuts.
3
+ */
4
+ import { Events } from "../../features/analytics/events";
5
+ export declare class EventTracker {
6
+ readonly client: Events;
7
+ constructor(client: Events);
8
+ /** Track a custom event. */
9
+ track(eventName: string, properties?: Record<string, unknown>, opts?: {
10
+ userId?: string;
11
+ sessionId?: string;
12
+ }): Promise<import("../../features/analytics/events").EventResponse>;
13
+ /** Track many events in one request. */
14
+ batch(events: Array<{
15
+ eventName: string;
16
+ properties?: Record<string, unknown>;
17
+ }>): Promise<import("../../features/analytics/events").BatchEventResponse>;
18
+ /** Track a click on a tagged element. */
19
+ click(elementId: string, elementText: string, properties?: Record<string, unknown>): Promise<import("../../features/analytics/events").EventResponse>;
20
+ /** Track a form interaction. */
21
+ form(formId: string, formName: string, properties?: Record<string, unknown>): Promise<import("../../features/analytics/events").EventResponse>;
22
+ /** Track a search query. */
23
+ search(query: string, category: string, properties?: Record<string, unknown>): Promise<import("../../features/analytics/events").EventResponse>;
24
+ /** Track a runtime error. */
25
+ error(message: string, type: string, properties?: Record<string, unknown>): Promise<import("../../features/analytics/events").EventResponse>;
26
+ }