flowgrid-sdk 1.2.1 → 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 (312) 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.js +271 -0
  163. package/dist/lib/frameworks/react/index.js.map +1 -0
  164. package/dist/lib/frameworks/vue/CookieBanner.js +165 -0
  165. package/dist/lib/frameworks/vue/CookieBanner.js.map +1 -0
  166. package/dist/lib/frameworks/vue/index.js +390 -0
  167. package/dist/lib/frameworks/vue/index.js.map +1 -0
  168. package/dist/lib/tracking/analytics/attribution.d.ts +14 -0
  169. package/dist/lib/tracking/analytics/attribution.js +18 -0
  170. package/dist/lib/tracking/analytics/attribution.js.map +1 -0
  171. package/dist/lib/tracking/analytics/events.d.ts +26 -0
  172. package/dist/lib/tracking/analytics/events.js +30 -0
  173. package/dist/lib/tracking/analytics/events.js.map +1 -0
  174. package/dist/lib/tracking/analytics/funnels.d.ts +16 -0
  175. package/dist/lib/tracking/analytics/funnels.js +22 -0
  176. package/dist/lib/tracking/analytics/funnels.js.map +1 -0
  177. package/dist/lib/tracking/analytics/heatmaps.d.ts +27 -0
  178. package/dist/lib/tracking/analytics/heatmaps.js +22 -0
  179. package/dist/lib/tracking/analytics/heatmaps.js.map +1 -0
  180. package/dist/lib/tracking/analytics/identify.d.ts +16 -0
  181. package/dist/lib/tracking/analytics/identify.js +22 -0
  182. package/dist/lib/tracking/analytics/identify.js.map +1 -0
  183. package/dist/lib/tracking/analytics/index.d.ts +10 -0
  184. package/dist/lib/tracking/analytics/index.js +11 -0
  185. package/dist/lib/tracking/analytics/index.js.map +1 -0
  186. package/dist/lib/tracking/analytics/page-views.d.ts +29 -0
  187. package/dist/lib/tracking/analytics/page-views.js +50 -0
  188. package/dist/lib/tracking/analytics/page-views.js.map +1 -0
  189. package/dist/lib/tracking/analytics/performance.d.ts +22 -0
  190. package/dist/lib/tracking/analytics/performance.js +22 -0
  191. package/dist/lib/tracking/analytics/performance.js.map +1 -0
  192. package/dist/lib/tracking/analytics/replay.d.ts +34 -0
  193. package/dist/lib/tracking/analytics/replay.js +46 -0
  194. package/dist/lib/tracking/analytics/replay.js.map +1 -0
  195. package/dist/lib/tracking/analytics/retention.d.ts +10 -0
  196. package/dist/lib/tracking/analytics/retention.js +10 -0
  197. package/dist/lib/tracking/analytics/retention.js.map +1 -0
  198. package/dist/lib/tracking/analytics/sessions.d.ts +20 -0
  199. package/dist/lib/tracking/analytics/sessions.js +26 -0
  200. package/dist/lib/tracking/analytics/sessions.js.map +1 -0
  201. package/dist/lib/tracking/core/activation.d.ts +23 -0
  202. package/dist/lib/tracking/core/activation.js +33 -0
  203. package/dist/lib/tracking/core/activation.js.map +1 -0
  204. package/dist/lib/tracking/core/experiment.d.ts +122 -0
  205. package/dist/lib/tracking/core/experiment.js +150 -0
  206. package/dist/lib/tracking/core/experiment.js.map +1 -0
  207. package/dist/lib/tracking/core/feature.d.ts +13 -0
  208. package/dist/lib/tracking/core/feature.js +14 -0
  209. package/dist/lib/tracking/core/feature.js.map +1 -0
  210. package/dist/lib/tracking/core/index.d.ts +4 -0
  211. package/dist/lib/tracking/core/index.js +5 -0
  212. package/dist/lib/tracking/core/index.js.map +1 -0
  213. package/dist/lib/tracking/core/prompt.d.ts +18 -0
  214. package/dist/lib/tracking/core/prompt.js +26 -0
  215. package/dist/lib/tracking/core/prompt.js.map +1 -0
  216. package/dist/lib/tracking/ecommerce/cart.d.ts +17 -0
  217. package/dist/lib/tracking/ecommerce/cart.js +22 -0
  218. package/dist/lib/tracking/ecommerce/cart.js.map +1 -0
  219. package/dist/lib/tracking/ecommerce/checkout.d.ts +17 -0
  220. package/dist/lib/tracking/ecommerce/checkout.js +22 -0
  221. package/dist/lib/tracking/ecommerce/checkout.js.map +1 -0
  222. package/dist/lib/tracking/ecommerce/index.d.ts +10 -0
  223. package/dist/lib/tracking/ecommerce/index.js +11 -0
  224. package/dist/lib/tracking/ecommerce/index.js.map +1 -0
  225. package/dist/lib/tracking/ecommerce/ltv.d.ts +15 -0
  226. package/dist/lib/tracking/ecommerce/ltv.js +14 -0
  227. package/dist/lib/tracking/ecommerce/ltv.js.map +1 -0
  228. package/dist/lib/tracking/ecommerce/products.d.ts +15 -0
  229. package/dist/lib/tracking/ecommerce/products.js +18 -0
  230. package/dist/lib/tracking/ecommerce/products.js.map +1 -0
  231. package/dist/lib/tracking/ecommerce/promotions.d.ts +14 -0
  232. package/dist/lib/tracking/ecommerce/promotions.js +25 -0
  233. package/dist/lib/tracking/ecommerce/promotions.js.map +1 -0
  234. package/dist/lib/tracking/ecommerce/purchases.d.ts +11 -0
  235. package/dist/lib/tracking/ecommerce/purchases.js +10 -0
  236. package/dist/lib/tracking/ecommerce/purchases.js.map +1 -0
  237. package/dist/lib/tracking/ecommerce/refunds.d.ts +17 -0
  238. package/dist/lib/tracking/ecommerce/refunds.js +22 -0
  239. package/dist/lib/tracking/ecommerce/refunds.js.map +1 -0
  240. package/dist/lib/tracking/ecommerce/search.d.ts +24 -0
  241. package/dist/lib/tracking/ecommerce/search.js +22 -0
  242. package/dist/lib/tracking/ecommerce/search.js.map +1 -0
  243. package/dist/lib/tracking/ecommerce/subscriptions.d.ts +21 -0
  244. package/dist/lib/tracking/ecommerce/subscriptions.js +38 -0
  245. package/dist/lib/tracking/ecommerce/subscriptions.js.map +1 -0
  246. package/dist/lib/tracking/ecommerce/wishlist.d.ts +19 -0
  247. package/dist/lib/tracking/ecommerce/wishlist.js +26 -0
  248. package/dist/lib/tracking/ecommerce/wishlist.js.map +1 -0
  249. package/dist/lib/tracking/enterprise/acquisition.d.ts +25 -0
  250. package/dist/lib/tracking/enterprise/acquisition.js +22 -0
  251. package/dist/lib/tracking/enterprise/acquisition.js.map +1 -0
  252. package/dist/lib/tracking/enterprise/alerts.d.ts +32 -0
  253. package/dist/lib/tracking/enterprise/alerts.js +30 -0
  254. package/dist/lib/tracking/enterprise/alerts.js.map +1 -0
  255. package/dist/lib/tracking/enterprise/churn.d.ts +23 -0
  256. package/dist/lib/tracking/enterprise/churn.js +22 -0
  257. package/dist/lib/tracking/enterprise/churn.js.map +1 -0
  258. package/dist/lib/tracking/enterprise/cohorts.d.ts +18 -0
  259. package/dist/lib/tracking/enterprise/cohorts.js +18 -0
  260. package/dist/lib/tracking/enterprise/cohorts.js.map +1 -0
  261. package/dist/lib/tracking/enterprise/engagement.d.ts +31 -0
  262. package/dist/lib/tracking/enterprise/engagement.js +44 -0
  263. package/dist/lib/tracking/enterprise/engagement.js.map +1 -0
  264. package/dist/lib/tracking/enterprise/forecasting.d.ts +18 -0
  265. package/dist/lib/tracking/enterprise/forecasting.js +22 -0
  266. package/dist/lib/tracking/enterprise/forecasting.js.map +1 -0
  267. package/dist/lib/tracking/enterprise/index.d.ts +11 -0
  268. package/dist/lib/tracking/enterprise/index.js +12 -0
  269. package/dist/lib/tracking/enterprise/index.js.map +1 -0
  270. package/dist/lib/tracking/enterprise/monetization.d.ts +14 -0
  271. package/dist/lib/tracking/enterprise/monetization.js +10 -0
  272. package/dist/lib/tracking/enterprise/monetization.js.map +1 -0
  273. package/dist/lib/tracking/enterprise/multi-path-funnels.d.ts +20 -0
  274. package/dist/lib/tracking/enterprise/multi-path-funnels.js +18 -0
  275. package/dist/lib/tracking/enterprise/multi-path-funnels.js.map +1 -0
  276. package/dist/lib/tracking/enterprise/paths.d.ts +20 -0
  277. package/dist/lib/tracking/enterprise/paths.js +18 -0
  278. package/dist/lib/tracking/enterprise/paths.js.map +1 -0
  279. package/dist/lib/tracking/enterprise/security.d.ts +28 -0
  280. package/dist/lib/tracking/enterprise/security.js +26 -0
  281. package/dist/lib/tracking/enterprise/security.js.map +1 -0
  282. package/dist/lib/tracking/enterprise/support.d.ts +25 -0
  283. package/dist/lib/tracking/enterprise/support.js +22 -0
  284. package/dist/lib/tracking/enterprise/support.js.map +1 -0
  285. package/dist/lib/tracking/index.d.ts +4 -0
  286. package/dist/lib/tracking/index.js +5 -0
  287. package/dist/lib/tracking/index.js.map +1 -0
  288. package/dist/lib/types/analytics.d.ts +10 -2
  289. package/dist/lib/types/analytics.js +6 -0
  290. package/dist/lib/types/analytics.js.map +1 -0
  291. package/dist/lib/types/common.js +6 -0
  292. package/dist/lib/types/common.js.map +1 -0
  293. package/dist/lib/types/ecommerce.js +6 -0
  294. package/dist/lib/types/ecommerce.js.map +1 -0
  295. package/dist/lib/types/index.js +8 -0
  296. package/dist/lib/types/index.js.map +1 -0
  297. package/dist/lib/utils/browser.d.ts +16 -0
  298. package/dist/lib/utils/browser.js +32 -0
  299. package/dist/lib/utils/browser.js.map +1 -0
  300. package/dist/lib/utils/identity.js +346 -0
  301. package/dist/lib/utils/identity.js.map +1 -0
  302. package/dist/lib/utils/storage.js +105 -0
  303. package/dist/lib/utils/storage.js.map +1 -0
  304. package/dist/umd/237.index.js +2 -0
  305. package/dist/umd/237.index.js.map +1 -0
  306. package/dist/umd/546.index.js +3 -0
  307. package/dist/umd/546.index.js.LICENSE.txt +14 -0
  308. package/dist/umd/546.index.js.map +1 -0
  309. package/dist/umd/index.js +2 -0
  310. package/dist/umd/index.js.map +1 -0
  311. package/package.json +27 -80
  312. package/dist/lib/features/ecommerce/inventory.d.ts +0 -219
@@ -0,0 +1,355 @@
1
+ /**
2
+ * @fileoverview FlowGrid SDK - Next.js Client Components
3
+ * @module frameworks/nextjs/client
4
+ *
5
+ * @description
6
+ * Client-side components and hooks for Next.js.
7
+ * All exports require 'use client' directive.
8
+ *
9
+ * @example
10
+ * ```tsx
11
+ * // app/providers.tsx
12
+ * 'use client';
13
+ * import { FlowGridProvider } from 'flowgrid-sdk/nextjs/client';
14
+ *
15
+ * export function Providers({ children }) {
16
+ * return (
17
+ * <FlowGridProvider
18
+ * webId={process.env.NEXT_PUBLIC_FLOWGRID_WEB_ID!}
19
+ * endpoint={process.env.NEXT_PUBLIC_FLOWGRID_ENDPOINT!}
20
+ * apiKey={process.env.NEXT_PUBLIC_FLOWGRID_API_KEY!}
21
+ * >
22
+ * {children}
23
+ * </FlowGridProvider>
24
+ * );
25
+ * }
26
+ * ```
27
+ */
28
+ 'use client';
29
+ import { jsx as _jsx } from "react/jsx-runtime";
30
+ import { createContext, useContext, useEffect, useRef, useCallback, useMemo, useState } from 'react';
31
+ // Next.js navigation hooks - imported dynamically to avoid type errors when Next.js isn't installed
32
+ // These will be properly typed when used in a Next.js project
33
+ let usePathname;
34
+ let useSearchParams;
35
+ try {
36
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
37
+ const nav = require('next/navigation');
38
+ usePathname = nav.usePathname;
39
+ useSearchParams = nav.useSearchParams;
40
+ }
41
+ catch {
42
+ // Fallback for non-Next.js environments or when types aren't available
43
+ usePathname = () => typeof window !== 'undefined' ? window.location.pathname : '/';
44
+ useSearchParams = () => typeof window !== 'undefined' ? new URLSearchParams(window.location.search) : new URLSearchParams();
45
+ }
46
+ // Import core SDK
47
+ import { Activation, TrackFeature, TrackPrompt, Experiment, PageViews, Sessions, Events, Identify, Funnels, Products, CartTracking, Checkout, Purchases } from '../../../index';
48
+ import { getVisitorId } from '../../utils/storage';
49
+ import { IdentityManager } from '../../utils/identity';
50
+ // ============================================================================
51
+ // CONTEXT
52
+ // ============================================================================
53
+ const FlowGridContext = createContext(null);
54
+ /**
55
+ * FlowGrid Provider for Next.js App Router.
56
+ * Use in a Client Component wrapper.
57
+ *
58
+ * @example
59
+ * ```tsx
60
+ * // app/providers.tsx
61
+ * 'use client';
62
+ *
63
+ * import { FlowGridProvider } from 'flowgrid-sdk/nextjs/client';
64
+ *
65
+ * export function Providers({ children }: { children: React.ReactNode }) {
66
+ * return (
67
+ * <FlowGridProvider
68
+ * webId={process.env.NEXT_PUBLIC_FLOWGRID_WEB_ID!}
69
+ * endpoint={process.env.NEXT_PUBLIC_FLOWGRID_ENDPOINT!}
70
+ * apiKey={process.env.NEXT_PUBLIC_FLOWGRID_API_KEY!}
71
+ * >
72
+ * {children}
73
+ * </FlowGridProvider>
74
+ * );
75
+ * }
76
+ *
77
+ * // app/layout.tsx
78
+ * import { Providers } from './providers';
79
+ *
80
+ * export default function RootLayout({ children }) {
81
+ * return (
82
+ * <html>
83
+ * <body>
84
+ * <Providers>{children}</Providers>
85
+ * </body>
86
+ * </html>
87
+ * );
88
+ * }
89
+ * ```
90
+ */
91
+ export function FlowGridProvider({ children, webId, endpoint, apiKey, visitorId, autoTrackPageViews = true, autoTrackSessions = true, debug = false }) {
92
+ const [isReady, setIsReady] = useState(false);
93
+ const sessionIdRef = useRef(null);
94
+ const pathname = usePathname();
95
+ const searchParams = useSearchParams();
96
+ // Create identity manager for visitor/session lifecycle
97
+ const identity = useMemo(() => new IdentityManager({
98
+ visitorId: visitorId || getVisitorId() || undefined,
99
+ }), [visitorId]);
100
+ const resolvedVisitorId = identity.getVisitorId() || undefined;
101
+ const sdk = useMemo(() => ({
102
+ activation: new Activation(webId, endpoint, apiKey, resolvedVisitorId, identity),
103
+ trackFeature: new TrackFeature(webId, endpoint, apiKey, resolvedVisitorId, identity),
104
+ trackPrompt: new TrackPrompt(webId, endpoint, apiKey, resolvedVisitorId, identity),
105
+ experiment: new Experiment(webId, endpoint, apiKey, resolvedVisitorId, identity),
106
+ pageViews: new PageViews(webId, endpoint, apiKey, resolvedVisitorId, identity),
107
+ sessions: new Sessions(webId, endpoint, apiKey, resolvedVisitorId, identity),
108
+ events: new Events(webId, endpoint, apiKey, resolvedVisitorId, identity),
109
+ identify: new Identify(webId, endpoint, apiKey, resolvedVisitorId, identity),
110
+ funnels: new Funnels(webId, endpoint, apiKey, resolvedVisitorId, identity),
111
+ products: new Products(webId, endpoint, apiKey, resolvedVisitorId, identity),
112
+ cart: new CartTracking(webId, endpoint, apiKey, resolvedVisitorId, identity),
113
+ checkout: new Checkout(webId, endpoint, apiKey, resolvedVisitorId, identity),
114
+ purchases: new Purchases(webId, endpoint, apiKey, resolvedVisitorId, identity),
115
+ }), [webId, endpoint, apiKey, resolvedVisitorId, identity]);
116
+ // Helper functions
117
+ const trackEvent = useCallback(async (name, properties) => {
118
+ if (debug)
119
+ console.log('[FlowGrid] Event:', name, properties);
120
+ await sdk.events.track({ eventName: name, properties: properties || {} });
121
+ }, [sdk.events, debug]);
122
+ const identifyUser = useCallback(async (userId, traits) => {
123
+ if (debug)
124
+ console.log('[FlowGrid] Identify:', userId, traits);
125
+ await sdk.identify.user({ userId, traits: traits || {} });
126
+ }, [sdk.identify, debug]);
127
+ // Auto-track sessions
128
+ useEffect(() => {
129
+ if (!autoTrackSessions)
130
+ return;
131
+ const startSession = async () => {
132
+ try {
133
+ const result = await sdk.sessions.start({
134
+ referrer: document.referrer,
135
+ landingPage: pathname,
136
+ });
137
+ sessionIdRef.current = result.response?.sessionId || null;
138
+ setIsReady(true);
139
+ if (debug)
140
+ console.log('[FlowGrid] Session started:', sessionIdRef.current);
141
+ }
142
+ catch (err) {
143
+ if (debug)
144
+ console.error('[FlowGrid] Session start failed:', err);
145
+ setIsReady(true);
146
+ }
147
+ };
148
+ startSession();
149
+ // Use pagehide + sendBeacon for reliable session end on tab close
150
+ const handleUnload = () => {
151
+ if (sessionIdRef.current) {
152
+ const resolvedVisitorId = identity.getVisitorId() || '';
153
+ const payload = JSON.stringify({
154
+ web_id: webId,
155
+ visitor_id: resolvedVisitorId,
156
+ event_name: 'session_end',
157
+ properties: { session_id: sessionIdRef.current, timestamp: new Date().toISOString() }
158
+ });
159
+ navigator.sendBeacon(`${endpoint.replace(/\/+$/, '')}/api/v1/sdk/functions?call=session_end`, new Blob([payload], { type: 'application/json' }));
160
+ }
161
+ };
162
+ window.addEventListener('pagehide', handleUnload);
163
+ return () => {
164
+ window.removeEventListener('pagehide', handleUnload);
165
+ };
166
+ }, [autoTrackSessions, sdk.sessions, pathname, debug, webId, endpoint, identity]);
167
+ // Auto-track page views on route change
168
+ useEffect(() => {
169
+ if (!autoTrackPageViews || !isReady)
170
+ return;
171
+ const url = searchParams.toString()
172
+ ? `${pathname}?${searchParams.toString()}`
173
+ : pathname;
174
+ sdk.pageViews.track({
175
+ url: window.location.href,
176
+ path: url,
177
+ title: document.title,
178
+ referrer: document.referrer,
179
+ });
180
+ if (debug)
181
+ console.log('[FlowGrid] Page view:', url);
182
+ }, [pathname, searchParams, autoTrackPageViews, isReady, sdk.pageViews, debug]);
183
+ const value = {
184
+ ...sdk,
185
+ trackEvent,
186
+ identifyUser,
187
+ isReady,
188
+ };
189
+ return (_jsx(FlowGridContext.Provider, { value: value, children: children }));
190
+ }
191
+ // ============================================================================
192
+ // HOOKS
193
+ // ============================================================================
194
+ /**
195
+ * Access the FlowGrid SDK instance.
196
+ */
197
+ export function useFlowGrid() {
198
+ const context = useContext(FlowGridContext);
199
+ if (!context) {
200
+ throw new Error('useFlowGrid must be used within a FlowGridProvider');
201
+ }
202
+ return context;
203
+ }
204
+ /**
205
+ * Track an event.
206
+ *
207
+ * @example
208
+ * ```tsx
209
+ * 'use client';
210
+ *
211
+ * import { useTrackEvent } from 'flowgrid-sdk/nextjs/client';
212
+ *
213
+ * export function FeatureButton() {
214
+ * const trackEvent = useTrackEvent();
215
+ *
216
+ * return (
217
+ * <button onClick={() => trackEvent('feature_clicked', { id: 'cta' })}>
218
+ * Click me
219
+ * </button>
220
+ * );
221
+ * }
222
+ * ```
223
+ */
224
+ export function useTrackEvent() {
225
+ const { trackEvent } = useFlowGrid();
226
+ return trackEvent;
227
+ }
228
+ /**
229
+ * Get experiment variant.
230
+ */
231
+ export function useExperiment(experimentId, userId) {
232
+ const { experiment } = useFlowGrid();
233
+ const [variant, setVariant] = useState(null);
234
+ const [isLoading, setIsLoading] = useState(true);
235
+ useEffect(() => {
236
+ experiment.trackExposure(experimentId, userId, 'control');
237
+ setVariant('control');
238
+ setIsLoading(false);
239
+ }, [experiment, experimentId, userId]);
240
+ return { variant, isLoading };
241
+ }
242
+ /**
243
+ * Identify user.
244
+ */
245
+ export function useIdentify(userId, traits) {
246
+ const { identifyUser, isReady } = useFlowGrid();
247
+ useEffect(() => {
248
+ if (isReady && userId) {
249
+ identifyUser(userId, traits);
250
+ }
251
+ }, [isReady, userId, traits, identifyUser]);
252
+ }
253
+ /**
254
+ * Ecommerce hooks.
255
+ */
256
+ export function useEcommerce() {
257
+ const { products, cart, checkout, purchases } = useFlowGrid();
258
+ const trackProductView = useCallback(async (product) => {
259
+ await products.view({
260
+ productId: product.id,
261
+ name: product.name,
262
+ price: product.price,
263
+ currency: (product.currency || 'USD'),
264
+ });
265
+ }, [products]);
266
+ const trackAddToCart = useCallback(async (product, quantity = 1) => {
267
+ await cart.addItem({
268
+ product: {
269
+ productId: product.id,
270
+ name: product.name,
271
+ price: product.price,
272
+ currency: (product.currency || 'USD'),
273
+ },
274
+ quantity,
275
+ cartId: 'current',
276
+ });
277
+ }, [cart]);
278
+ const trackPurchase = useCallback(async (orderData) => {
279
+ await purchases.track({
280
+ order: {
281
+ orderId: orderData.orderId,
282
+ items: orderData.items.map(i => ({
283
+ productId: i.id,
284
+ name: i.name,
285
+ price: i.price,
286
+ quantity: i.quantity,
287
+ lineTotal: i.price * i.quantity,
288
+ currency: 'USD',
289
+ })),
290
+ subtotal: orderData.revenue,
291
+ discountTotal: 0,
292
+ shippingTotal: 0,
293
+ taxTotal: 0,
294
+ total: orderData.revenue,
295
+ currency: 'USD',
296
+ },
297
+ });
298
+ }, [purchases]);
299
+ return { trackProductView, trackAddToCart, trackPurchase, products, cart, checkout, purchases };
300
+ }
301
+ // ============================================================================
302
+ // PAGE VIEW COMPONENT
303
+ // ============================================================================
304
+ /**
305
+ * Component to track page views in App Router.
306
+ * Add to your root layout.
307
+ *
308
+ * @example
309
+ * ```tsx
310
+ * // app/layout.tsx
311
+ * import { PageViewTracker } from 'flowgrid-sdk/nextjs/client';
312
+ *
313
+ * export default function RootLayout({ children }) {
314
+ * return (
315
+ * <html>
316
+ * <body>
317
+ * <Providers>
318
+ * <PageViewTracker />
319
+ * {children}
320
+ * </Providers>
321
+ * </body>
322
+ * </html>
323
+ * );
324
+ * }
325
+ * ```
326
+ */
327
+ export function PageViewTracker() {
328
+ const pathname = usePathname();
329
+ const { pageViews, isReady } = useFlowGrid();
330
+ useEffect(() => {
331
+ if (!isReady)
332
+ return;
333
+ pageViews.track({
334
+ url: window.location.href,
335
+ path: pathname,
336
+ title: document.title,
337
+ referrer: document.referrer,
338
+ });
339
+ }, [pathname, isReady, pageViews]);
340
+ return null;
341
+ }
342
+ // Re-export CookieBanner from React
343
+ import { CookieBanner as _CookieBanner } from '../react/CookieBanner';
344
+ export { CookieBanner } from '../react/CookieBanner';
345
+ export default {
346
+ FlowGridProvider,
347
+ useFlowGrid,
348
+ useTrackEvent,
349
+ useExperiment,
350
+ useIdentify,
351
+ useEcommerce,
352
+ PageViewTracker,
353
+ CookieBanner: _CookieBanner,
354
+ };
355
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../../src/lib/frameworks/nextjs/client.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * @fileoverview FlowGrid SDK - Next.js Integration
3
+ * @module frameworks/nextjs
4
+ *
5
+ * @description
6
+ * Next.js integration with proper App Router and Pages Router support.
7
+ * Includes Server Components, Client Components, and API Route helpers.
8
+ *
9
+ * ## File Organization
10
+ *
11
+ * ```
12
+ * flowgrid-sdk/nextjs
13
+ * ├── client.tsx - Client components (use 'use client')
14
+ * ├── server.ts - Server-side utilities (API routes, Server Components)
15
+ * └── index.ts - Main exports
16
+ * ```
17
+ *
18
+ * @example
19
+ * ```tsx
20
+ * // Client Component
21
+ * 'use client';
22
+ * import { FlowGridProvider, useFlowGrid } from 'flowgrid-sdk/nextjs/client';
23
+ *
24
+ * // Server-side (API Route or Server Action)
25
+ * import { flowgrid } from 'flowgrid-sdk/nextjs/server';
26
+ * ```
27
+ */
28
+ // Re-export everything
29
+ export * from './client';
30
+ export * from './server';
31
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/frameworks/nextjs/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,uBAAuB;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC"}
@@ -0,0 +1,259 @@
1
+ /**
2
+ * @fileoverview FlowGrid SDK - Next.js Server Utilities
3
+ * @module frameworks/nextjs/server
4
+ *
5
+ * @description
6
+ * Server-side utilities for Next.js API Routes, Server Actions,
7
+ * and Server Components.
8
+ *
9
+ * ⚠️ IMPORTANT: Never expose your API key on the client.
10
+ * Use environment variables without NEXT_PUBLIC_ prefix for server-only keys.
11
+ *
12
+ * @example
13
+ * ```ts
14
+ * // app/api/track/route.ts
15
+ * import { flowgrid } from 'flowgrid-sdk/nextjs/server';
16
+ *
17
+ * export async function POST(request: Request) {
18
+ * const { event, properties } = await request.json();
19
+ * await flowgrid.events.track({ name: event, properties });
20
+ * return Response.json({ success: true });
21
+ * }
22
+ * ```
23
+ */
24
+ import { Activation, TrackFeature, TrackPrompt, Experiment, PageViews, Sessions, Events, Identify, Funnels, Purchases, Subscriptions, CustomerLTV } from '../../../index';
25
+ import { IdentityManager } from '../../utils/identity';
26
+ // ============================================================================
27
+ // FACTORY
28
+ // ============================================================================
29
+ let serverInstance = null;
30
+ /**
31
+ * Creates a server-side FlowGrid instance.
32
+ * Uses environment variables by default.
33
+ *
34
+ * @example
35
+ * ```ts
36
+ * // lib/flowgrid.ts
37
+ * import { createServerFlowGrid } from 'flowgrid-sdk/nextjs/server';
38
+ *
39
+ * export const flowgrid = createServerFlowGrid({
40
+ * webId: process.env.FLOWGRID_WEB_ID!,
41
+ * endpoint: process.env.FLOWGRID_ENDPOINT!,
42
+ * apiKey: process.env.FLOWGRID_API_KEY!, // Server-only!
43
+ * });
44
+ * ```
45
+ */
46
+ export function createServerFlowGrid(config) {
47
+ const { webId, endpoint, apiKey, visitorId } = config;
48
+ const identity = new IdentityManager({
49
+ visitorId,
50
+ storage: 'memory',
51
+ serverCookies: config.cookies,
52
+ });
53
+ const resolvedVisitorId = identity.getVisitorId();
54
+ return {
55
+ activation: new Activation(webId, endpoint, apiKey, resolvedVisitorId, identity),
56
+ trackFeature: new TrackFeature(webId, endpoint, apiKey, resolvedVisitorId, identity),
57
+ trackPrompt: new TrackPrompt(webId, endpoint, apiKey, resolvedVisitorId, identity),
58
+ experiment: new Experiment(webId, endpoint, apiKey, resolvedVisitorId, identity),
59
+ pageViews: new PageViews(webId, endpoint, apiKey, resolvedVisitorId, identity),
60
+ sessions: new Sessions(webId, endpoint, apiKey, resolvedVisitorId, identity),
61
+ events: new Events(webId, endpoint, apiKey, resolvedVisitorId, identity),
62
+ identify: new Identify(webId, endpoint, apiKey, resolvedVisitorId, identity),
63
+ funnels: new Funnels(webId, endpoint, apiKey, resolvedVisitorId, identity),
64
+ purchases: new Purchases(webId, endpoint, apiKey, resolvedVisitorId, identity),
65
+ subscriptions: new Subscriptions(webId, endpoint, apiKey, resolvedVisitorId, identity),
66
+ customerLTV: new CustomerLTV(webId, endpoint, apiKey, resolvedVisitorId, identity),
67
+ };
68
+ }
69
+ /**
70
+ * Get or create a singleton server instance.
71
+ * Uses environment variables.
72
+ */
73
+ export function getServerFlowGrid() {
74
+ if (!serverInstance) {
75
+ const webId = process.env.FLOWGRID_WEB_ID;
76
+ const endpoint = process.env.FLOWGRID_ENDPOINT;
77
+ const apiKey = process.env.FLOWGRID_API_KEY;
78
+ if (!webId || !endpoint || !apiKey) {
79
+ throw new Error('FlowGrid server config missing. Set FLOWGRID_WEB_ID, FLOWGRID_ENDPOINT, and FLOWGRID_API_KEY environment variables.');
80
+ }
81
+ serverInstance = createServerFlowGrid({ webId, endpoint, apiKey });
82
+ }
83
+ return serverInstance;
84
+ }
85
+ // Convenience export
86
+ export const flowgrid = {
87
+ get events() { return getServerFlowGrid().events; },
88
+ get identify() { return getServerFlowGrid().identify; },
89
+ get purchases() { return getServerFlowGrid().purchases; },
90
+ get subscriptions() { return getServerFlowGrid().subscriptions; },
91
+ get experiment() { return getServerFlowGrid().experiment; },
92
+ get activation() { return getServerFlowGrid().activation; },
93
+ get trackFeature() { return getServerFlowGrid().trackFeature; },
94
+ get trackPrompt() { return getServerFlowGrid().trackPrompt; },
95
+ get funnels() { return getServerFlowGrid().funnels; },
96
+ get customerLTV() { return getServerFlowGrid().customerLTV; },
97
+ };
98
+ // ============================================================================
99
+ // API ROUTE HELPERS
100
+ // ============================================================================
101
+ /**
102
+ * Track an event from an API route.
103
+ *
104
+ * @example
105
+ * ```ts
106
+ * // app/api/track/route.ts
107
+ * import { trackServerEvent } from 'flowgrid-sdk/nextjs/server';
108
+ *
109
+ * export async function POST(request: Request) {
110
+ * const { event, properties, userId } = await request.json();
111
+ *
112
+ * await trackServerEvent(event, properties, userId);
113
+ *
114
+ * return Response.json({ success: true });
115
+ * }
116
+ * ```
117
+ */
118
+ export async function trackServerEvent(eventName, properties, userId) {
119
+ const fg = getServerFlowGrid();
120
+ await fg.events.track({
121
+ eventName: eventName,
122
+ properties: {
123
+ ...properties,
124
+ userId,
125
+ _server: true,
126
+ },
127
+ });
128
+ }
129
+ /**
130
+ * Identify a user from server-side.
131
+ *
132
+ * @example
133
+ * ```ts
134
+ * // After user signs up
135
+ * await identifyServerUser(user.id, {
136
+ * email: user.email,
137
+ * plan: user.plan,
138
+ * signupDate: new Date().toISOString()
139
+ * });
140
+ * ```
141
+ */
142
+ export async function identifyServerUser(userId, traits) {
143
+ const fg = getServerFlowGrid();
144
+ await fg.identify.user({ userId, traits: traits || {} });
145
+ }
146
+ /**
147
+ * Track a server-side purchase.
148
+ *
149
+ * @example
150
+ * ```ts
151
+ * // In your payment webhook handler
152
+ * await trackServerPurchase({
153
+ * orderId: 'ORD-123',
154
+ * userId: 'user_456',
155
+ * revenue: 9999,
156
+ * currency: 'USD',
157
+ * items: [{ id: 'prod_1', name: 'Widget', price: 4999, quantity: 2 }]
158
+ * });
159
+ * ```
160
+ */
161
+ export async function trackServerPurchase(order) {
162
+ const fg = getServerFlowGrid();
163
+ const currency = order.currency || 'USD';
164
+ // Calculate totals
165
+ const itemsTotal = order.items.reduce((sum, i) => sum + (i.price * i.quantity), 0);
166
+ await fg.purchases.track({
167
+ order: {
168
+ orderId: order.orderId,
169
+ items: order.items.map(i => ({
170
+ productId: i.id,
171
+ name: i.name,
172
+ price: i.price,
173
+ currency,
174
+ quantity: i.quantity,
175
+ lineTotal: i.price * i.quantity,
176
+ })),
177
+ subtotal: itemsTotal,
178
+ discountTotal: 0,
179
+ shippingTotal: 0,
180
+ taxTotal: 0,
181
+ total: order.revenue,
182
+ currency,
183
+ },
184
+ userId: order.userId,
185
+ });
186
+ }
187
+ /**
188
+ * Get experiment variant server-side.
189
+ *
190
+ * @example
191
+ * ```ts
192
+ * // In a Server Component
193
+ * const variant = await getServerExperimentVariant('checkout_v2', userId);
194
+ * ```
195
+ */
196
+ export async function getServerExperimentVariant(experimentId, userId) {
197
+ const fg = getServerFlowGrid();
198
+ // In real implementation, this would call the experiment API
199
+ await fg.experiment.trackExposure(experimentId, userId, 'control');
200
+ return 'control'; // Would return actual variant from API
201
+ }
202
+ // ============================================================================
203
+ // SERVER ACTION HELPERS
204
+ // ============================================================================
205
+ /**
206
+ * Create a tracked server action.
207
+ *
208
+ * @example
209
+ * ```ts
210
+ * // app/actions.ts
211
+ * 'use server';
212
+ * import { createTrackedAction } from 'flowgrid-sdk/nextjs/server';
213
+ *
214
+ * export const submitForm = createTrackedAction(
215
+ * 'form_submitted',
216
+ * async (formData: FormData) => {
217
+ * // Your action logic
218
+ * return { success: true };
219
+ * }
220
+ * );
221
+ * ```
222
+ */
223
+ export function createTrackedAction(eventName, action, getProperties) {
224
+ return (async (...args) => {
225
+ const startTime = Date.now();
226
+ try {
227
+ const result = await action(...args);
228
+ await trackServerEvent(eventName, {
229
+ ...getProperties?.(...args),
230
+ success: true,
231
+ duration: Date.now() - startTime,
232
+ });
233
+ return result;
234
+ }
235
+ catch (error) {
236
+ await trackServerEvent(eventName, {
237
+ ...getProperties?.(...args),
238
+ success: false,
239
+ error: error instanceof Error ? error.message : 'Unknown error',
240
+ duration: Date.now() - startTime,
241
+ });
242
+ throw error;
243
+ }
244
+ });
245
+ }
246
+ // ============================================================================
247
+ // EXPORTS
248
+ // ============================================================================
249
+ export default {
250
+ createServerFlowGrid,
251
+ getServerFlowGrid,
252
+ flowgrid,
253
+ trackServerEvent,
254
+ identifyServerUser,
255
+ trackServerPurchase,
256
+ getServerExperimentVariant,
257
+ createTrackedAction,
258
+ };
259
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../../src/lib/frameworks/nextjs/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EACL,UAAU,EACV,YAAY,EACZ,WAAW,EACX,UAAU,EACV,SAAS,EACT,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,OAAO,EACP,SAAS,EACT,aAAa,EACb,WAAW,EACZ,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,eAAe,EAA2B,MAAM,sBAAsB,CAAC;AA8BhF,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E,IAAI,cAAc,GAAkC,IAAI,CAAC;AAEzD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAA4B;IAC/D,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;IAEtD,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAC;QACnC,SAAS;QACT,OAAO,EAAE,QAAQ;QACjB,aAAa,EAAE,MAAM,CAAC,OAAO;KAC9B,CAAC,CAAC;IAEH,MAAM,iBAAiB,GAAG,QAAQ,CAAC,YAAY,EAAE,CAAC;IAElD,OAAO;QACL,UAAU,EAAE,IAAI,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,iBAAiB,EAAE,QAAQ,CAAC;QAChF,YAAY,EAAE,IAAI,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,iBAAiB,EAAE,QAAQ,CAAC;QACpF,WAAW,EAAE,IAAI,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,iBAAiB,EAAE,QAAQ,CAAC;QAClF,UAAU,EAAE,IAAI,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,iBAAiB,EAAE,QAAQ,CAAC;QAChF,SAAS,EAAE,IAAI,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,iBAAiB,EAAE,QAAQ,CAAC;QAC9E,QAAQ,EAAE,IAAI,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,iBAAiB,EAAE,QAAQ,CAAC;QAC5E,MAAM,EAAE,IAAI,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,iBAAiB,EAAE,QAAQ,CAAC;QACxE,QAAQ,EAAE,IAAI,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,iBAAiB,EAAE,QAAQ,CAAC;QAC5E,OAAO,EAAE,IAAI,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,iBAAiB,EAAE,QAAQ,CAAC;QAC1E,SAAS,EAAE,IAAI,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,iBAAiB,EAAE,QAAQ,CAAC;QAC9E,aAAa,EAAE,IAAI,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,iBAAiB,EAAE,QAAQ,CAAC;QACtF,WAAW,EAAE,IAAI,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,iBAAiB,EAAE,QAAQ,CAAC;KACnF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB;IAC/B,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;QAC1C,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;QAC/C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;QAE5C,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CACb,qHAAqH,CACtH,CAAC;QACJ,CAAC;QAED,cAAc,GAAG,oBAAoB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,qBAAqB;AACrB,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,IAAI,MAAM,KAAK,OAAO,iBAAiB,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IACnD,IAAI,QAAQ,KAAK,OAAO,iBAAiB,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IACvD,IAAI,SAAS,KAAK,OAAO,iBAAiB,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IACzD,IAAI,aAAa,KAAK,OAAO,iBAAiB,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IACjE,IAAI,UAAU,KAAK,OAAO,iBAAiB,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAC3D,IAAI,UAAU,KAAK,OAAO,iBAAiB,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAC3D,IAAI,YAAY,KAAK,OAAO,iBAAiB,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAC/D,IAAI,WAAW,KAAK,OAAO,iBAAiB,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAC7D,IAAI,OAAO,KAAK,OAAO,iBAAiB,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IACrD,IAAI,WAAW,KAAK,OAAO,iBAAiB,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;CAC9D,CAAC;AAEF,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E;AAE/E;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,SAAiB,EACjB,UAAoC,EACpC,MAAe;IAEf,MAAM,EAAE,GAAG,iBAAiB,EAAE,CAAC;IAC/B,MAAM,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC;QACpB,SAAS,EAAE,SAAS;QACpB,UAAU,EAAE;YACV,GAAG,UAAU;YACb,MAAM;YACN,OAAO,EAAE,IAAI;SACd;KACF,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,MAAc,EACd,MAAgC;IAEhC,MAAM,EAAE,GAAG,iBAAiB,EAAE,CAAC;IAC/B,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,IAAI,EAAE,EAAE,CAAC,CAAC;AAC3D,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,KAMzC;IACC,MAAM,EAAE,GAAG,iBAAiB,EAAE,CAAC;IAC/B,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC;IAEzC,mBAAmB;IACnB,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IAEnF,MAAM,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC;QACvB,KAAK,EAAE;YACL,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC3B,SAAS,EAAE,CAAC,CAAC,EAAE;gBACf,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,QAAQ;gBACR,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,SAAS,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,QAAQ;aAChC,CAAC,CAAC;YACH,QAAQ,EAAE,UAAU;YACpB,aAAa,EAAE,CAAC;YAChB,aAAa,EAAE,CAAC;YAChB,QAAQ,EAAE,CAAC;YACX,KAAK,EAAE,KAAK,CAAC,OAAO;YACpB,QAAQ;SACT;QACD,MAAM,EAAE,KAAK,CAAC,MAAM;KACrB,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,YAAoB,EACpB,MAAc;IAEd,MAAM,EAAE,GAAG,iBAAiB,EAAE,CAAC;IAE/B,6DAA6D;IAC7D,MAAM,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IAEnE,OAAO,SAAS,CAAC,CAAC,uCAAuC;AAC3D,CAAC;AAED,+EAA+E;AAC/E,wBAAwB;AACxB,+EAA+E;AAE/E;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,mBAAmB,CACjC,SAAiB,EACjB,MAAS,EACT,aAAmE;IAEnE,OAAO,CAAC,KAAK,EAAE,GAAG,IAAmB,EAAE,EAAE;QACvC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;YAErC,MAAM,gBAAgB,CAAC,SAAS,EAAE;gBAChC,GAAG,aAAa,EAAE,CAAC,GAAG,IAAI,CAAC;gBAC3B,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;aACjC,CAAC,CAAC;YAEH,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,gBAAgB,CAAC,SAAS,EAAE;gBAChC,GAAG,aAAa,EAAE,CAAC,GAAG,IAAI,CAAC;gBAC3B,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;gBAC/D,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;aACjC,CAAC,CAAC;YAEH,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,CAAM,CAAC;AACV,CAAC;AAED,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E,eAAe;IACb,oBAAoB;IACpB,iBAAiB;IACjB,QAAQ;IACR,gBAAgB;IAChB,kBAAkB;IAClB,mBAAmB;IACnB,0BAA0B;IAC1B,mBAAmB;CACpB,CAAC"}