@instockng/storefront-ui 1.0.32 → 1.0.34

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 (270) hide show
  1. package/dist/contexts/CartContext.d.ts.map +1 -1
  2. package/dist/index.d.ts +1 -0
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.mjs +99 -96
  5. package/dist/index10.mjs +85 -162
  6. package/dist/index100.mjs +210 -17
  7. package/dist/index101.mjs +174 -17
  8. package/dist/index102.mjs +14 -25
  9. package/dist/index103.mjs +17 -150
  10. package/dist/index104.mjs +26 -13
  11. package/dist/index105.mjs +149 -24
  12. package/dist/index106.mjs +13 -77
  13. package/dist/index107.mjs +20 -27
  14. package/dist/index108.mjs +76 -137
  15. package/dist/index109.mjs +33 -50
  16. package/dist/index11.mjs +171 -94
  17. package/dist/index110.mjs +141 -19
  18. package/dist/index111.mjs +50 -22
  19. package/dist/index112.mjs +14 -14
  20. package/dist/index113.mjs +20 -18
  21. package/dist/index114.mjs +16 -14
  22. package/dist/index115.mjs +17 -14
  23. package/dist/index116.mjs +12 -12
  24. package/dist/index117.mjs +15 -58
  25. package/dist/index118.mjs +14 -11
  26. package/dist/index119.mjs +56 -30
  27. package/dist/index12.mjs +82 -659
  28. package/dist/index120.mjs +8 -14
  29. package/dist/index121.mjs +31 -26
  30. package/dist/index122.mjs +12 -15
  31. package/dist/index123.mjs +26 -11
  32. package/dist/index124.mjs +18 -12
  33. package/dist/index125.mjs +12 -40
  34. package/dist/index126.mjs +14 -16
  35. package/dist/index127.mjs +42 -263
  36. package/dist/index128.mjs +15 -62
  37. package/dist/index129.mjs +267 -7
  38. package/dist/index13.mjs +668 -53
  39. package/dist/index130.mjs +70 -2
  40. package/dist/index131.mjs +8 -2
  41. package/dist/index132.mjs +2 -33
  42. package/dist/index133.mjs +2 -2
  43. package/dist/index134.mjs +32 -20
  44. package/dist/index135.mjs +2 -56
  45. package/dist/index136.mjs +18 -26
  46. package/dist/index137.mjs +55 -6
  47. package/dist/index138.mjs +28 -51
  48. package/dist/index139.mjs +7 -6
  49. package/dist/index14.mjs +58 -60
  50. package/dist/index140.mjs +51 -11
  51. package/dist/index141.mjs +5 -6
  52. package/dist/index142.mjs +12 -28
  53. package/dist/index143.mjs +7 -2
  54. package/dist/index144.mjs +27 -69
  55. package/dist/index145.mjs +2 -167
  56. package/dist/index146.mjs +70 -2
  57. package/dist/index147.mjs +167 -2
  58. package/dist/index148.mjs +2 -2
  59. package/dist/index149.mjs +2 -18
  60. package/dist/index15.mjs +60 -22
  61. package/dist/index150.mjs +2 -32
  62. package/dist/index151.mjs +2 -38
  63. package/dist/index152.mjs +11 -11
  64. package/dist/index153.mjs +25 -11
  65. package/dist/index154.mjs +38 -2
  66. package/dist/index155.mjs +11 -13
  67. package/dist/index156.mjs +11 -39
  68. package/dist/index157.mjs +2 -2
  69. package/dist/index158.mjs +15 -25
  70. package/dist/index159.mjs +39 -11
  71. package/dist/index16.mjs +22 -113
  72. package/dist/index161.mjs +30 -2
  73. package/dist/index162.mjs +18 -2
  74. package/dist/index164.mjs +2 -72
  75. package/dist/index165.mjs +2 -2
  76. package/dist/index166.mjs +2 -53
  77. package/dist/index167.mjs +72 -2
  78. package/dist/index168.mjs +2 -36
  79. package/dist/index169.mjs +38 -137
  80. package/dist/index17.mjs +111 -38
  81. package/dist/index170.mjs +2 -2
  82. package/dist/index171.mjs +36 -2
  83. package/dist/index172.mjs +147 -14
  84. package/dist/index174.mjs +2 -2
  85. package/dist/index175.mjs +10 -17
  86. package/dist/index176.mjs +2 -2
  87. package/dist/index177.mjs +2 -2
  88. package/dist/index178.mjs +18 -16
  89. package/dist/index179.mjs +2 -23
  90. package/dist/index18.mjs +37 -37
  91. package/dist/index180.mjs +2 -2
  92. package/dist/index181.mjs +24 -2
  93. package/dist/index182.mjs +23 -2
  94. package/dist/index183.mjs +2 -23
  95. package/dist/index184.mjs +2 -2
  96. package/dist/index185.mjs +2 -23
  97. package/dist/index186.mjs +23 -2
  98. package/dist/index187.mjs +2 -2
  99. package/dist/index188.mjs +23 -2
  100. package/dist/index189.mjs +2 -23
  101. package/dist/index19.mjs +42 -55
  102. package/dist/index190.mjs +2 -2
  103. package/dist/index191.mjs +2 -23
  104. package/dist/index192.mjs +23 -2
  105. package/dist/index193.mjs +2 -2
  106. package/dist/index194.mjs +23 -2
  107. package/dist/index195.mjs +2 -2
  108. package/dist/index196.mjs +2 -2
  109. package/dist/index198.mjs +2 -2
  110. package/dist/index199.mjs +2 -2
  111. package/dist/index2.mjs +14 -13
  112. package/dist/index20.mjs +53 -30
  113. package/dist/index200.mjs +2 -127
  114. package/dist/index201.mjs +2 -2
  115. package/dist/index202.mjs +2 -74
  116. package/dist/index203.mjs +123 -70
  117. package/dist/index204.mjs +2 -2
  118. package/dist/index205.mjs +73 -30
  119. package/dist/index206.mjs +73 -10
  120. package/dist/index207.mjs +30 -3
  121. package/dist/index208.mjs +10 -3
  122. package/dist/index209.mjs +4 -13
  123. package/dist/index21.mjs +29 -6
  124. package/dist/index210.mjs +4 -7
  125. package/dist/index211.mjs +13 -12
  126. package/dist/index212.mjs +7 -5
  127. package/dist/index213.mjs +12 -33
  128. package/dist/index214.mjs +5 -31
  129. package/dist/index215.mjs +32 -27
  130. package/dist/index216.mjs +28 -58
  131. package/dist/index217.mjs +28 -2
  132. package/dist/index218.mjs +55 -102
  133. package/dist/index219.mjs +2 -2
  134. package/dist/index22.mjs +8 -21
  135. package/dist/index220.mjs +2 -2
  136. package/dist/index222.mjs +2 -2
  137. package/dist/index223.mjs +108 -2
  138. package/dist/index224.mjs +2 -2
  139. package/dist/index225.mjs +2 -2
  140. package/dist/index226.mjs +2 -2
  141. package/dist/index228.mjs +2 -37
  142. package/dist/index229.mjs +2 -2
  143. package/dist/index23.mjs +19 -30
  144. package/dist/index230.mjs +37 -2
  145. package/dist/index231.mjs +2 -2
  146. package/dist/index232.mjs +2 -244
  147. package/dist/index233.mjs +244 -2
  148. package/dist/index234.mjs +2 -33
  149. package/dist/index235.mjs +28 -60
  150. package/dist/index236.mjs +60 -20
  151. package/dist/index237.mjs +25 -2
  152. package/dist/index238.mjs +2 -2
  153. package/dist/index239.mjs +2 -2
  154. package/dist/index24.mjs +31 -18
  155. package/dist/index240.mjs +2 -2
  156. package/dist/index241.mjs +2 -2
  157. package/dist/index244.mjs +2 -2
  158. package/dist/index245.mjs +2 -4
  159. package/dist/index246.mjs +2 -2
  160. package/dist/index247.mjs +4 -2
  161. package/dist/index248.mjs +2 -2
  162. package/dist/index249.mjs +2 -2
  163. package/dist/index25.mjs +12 -85
  164. package/dist/index250.mjs +3 -18
  165. package/dist/index251.mjs +2 -47
  166. package/dist/index252.mjs +2 -2
  167. package/dist/index253.mjs +17 -2
  168. package/dist/index254.mjs +13 -2
  169. package/dist/index255.mjs +6 -2
  170. package/dist/index256.mjs +30 -91
  171. package/dist/index257.mjs +2 -3
  172. package/dist/index258.mjs +2 -2
  173. package/dist/index259.mjs +18 -2
  174. package/dist/index26.mjs +85 -12
  175. package/dist/index260.mjs +46 -16
  176. package/dist/index261.mjs +2 -13
  177. package/dist/index262.mjs +2 -6
  178. package/dist/index263.mjs +2 -30
  179. package/dist/index264.mjs +2 -2
  180. package/dist/index265.mjs +91 -2
  181. package/dist/index266.mjs +2 -2
  182. package/dist/index267.mjs +2 -2
  183. package/dist/index268.mjs +5 -0
  184. package/dist/index269.mjs +5 -0
  185. package/dist/index27.mjs +18 -9
  186. package/dist/index28.mjs +9 -9
  187. package/dist/index29.mjs +11 -101
  188. package/dist/index3.mjs +108 -103
  189. package/dist/index30.mjs +101 -20
  190. package/dist/index31.mjs +20 -65
  191. package/dist/index32.mjs +66 -96
  192. package/dist/index33.mjs +93 -16
  193. package/dist/index34.mjs +12 -12
  194. package/dist/index35.mjs +17 -9
  195. package/dist/index36.mjs +9 -9
  196. package/dist/index37.mjs +10 -122
  197. package/dist/index38.mjs +116 -18
  198. package/dist/index39.mjs +342 -1386
  199. package/dist/index4.mjs +1 -1
  200. package/dist/index40.mjs +25 -2
  201. package/dist/index41.mjs +1425 -52
  202. package/dist/index42.mjs +2 -51
  203. package/dist/index43.mjs +60 -33
  204. package/dist/index44.mjs +49 -13
  205. package/dist/index45.mjs +32 -2262
  206. package/dist/index46.mjs +15 -36
  207. package/dist/index47.mjs +2261 -42
  208. package/dist/index48.mjs +36 -99
  209. package/dist/index49.mjs +43 -96
  210. package/dist/index5.mjs +111 -15
  211. package/dist/index50.mjs +99 -81
  212. package/dist/index51.mjs +93 -57
  213. package/dist/index52.mjs +54 -68
  214. package/dist/index53.mjs +58 -62
  215. package/dist/index54.mjs +74 -58
  216. package/dist/index55.mjs +77 -15
  217. package/dist/index56.mjs +75 -14
  218. package/dist/index57.mjs +15 -59
  219. package/dist/index58.mjs +11 -118
  220. package/dist/index59.mjs +46 -112
  221. package/dist/index6.mjs +15 -195
  222. package/dist/index60.mjs +124 -23
  223. package/dist/index61.mjs +128 -152
  224. package/dist/index63.mjs +21 -20
  225. package/dist/index65.mjs +21 -73
  226. package/dist/index66.mjs +153 -15
  227. package/dist/index67.mjs +68 -56
  228. package/dist/index68.mjs +15 -2
  229. package/dist/index69.mjs +62 -5
  230. package/dist/index7.mjs +188 -101
  231. package/dist/index70.mjs +230 -1129
  232. package/dist/index71.mjs +5 -19
  233. package/dist/index72.mjs +127 -48
  234. package/dist/index73.mjs +67 -32
  235. package/dist/index74.mjs +87 -2
  236. package/dist/index75.mjs +23 -229
  237. package/dist/index76.mjs +8 -5
  238. package/dist/index77.mjs +66 -125
  239. package/dist/index78.mjs +3 -67
  240. package/dist/index79.mjs +2 -87
  241. package/dist/index8.mjs +103 -73
  242. package/dist/index80.mjs +78 -24
  243. package/dist/index81.mjs +52 -7
  244. package/dist/index82.mjs +5 -74
  245. package/dist/index83.mjs +4 -3
  246. package/dist/index84.mjs +179 -2
  247. package/dist/index85.mjs +49 -79
  248. package/dist/index86.mjs +68 -53
  249. package/dist/index87.mjs +34 -6
  250. package/dist/index88.mjs +42 -4
  251. package/dist/index89.mjs +2 -179
  252. package/dist/index9.mjs +72 -90
  253. package/dist/index90.mjs +6 -53
  254. package/dist/index91.mjs +1134 -69
  255. package/dist/index92.mjs +20 -34
  256. package/dist/index93.mjs +54 -42
  257. package/dist/index94.mjs +33 -2
  258. package/dist/index95.mjs +2 -2
  259. package/dist/index96.mjs +2 -28
  260. package/dist/index97.mjs +2 -18
  261. package/dist/index98.mjs +26 -213
  262. package/dist/index99.mjs +13 -175
  263. package/dist/providers/StorefrontProvider.d.ts.map +1 -1
  264. package/dist/providers/TikTokPixelProvider.d.ts +26 -0
  265. package/dist/providers/TikTokPixelProvider.d.ts.map +1 -0
  266. package/package.json +3 -2
  267. package/src/contexts/CartContext.tsx +24 -6
  268. package/src/index.ts +5 -0
  269. package/src/providers/StorefrontProvider.tsx +11 -8
  270. package/src/providers/TikTokPixelProvider.tsx +233 -0
package/dist/index99.mjs CHANGED
@@ -1,183 +1,21 @@
1
1
  'use client';
2
- import { __module as L } from "./index154.mjs";
3
- import "./index69.mjs";
4
- import { __require as K } from "./index96.mjs";
5
- import F from "react/jsx-runtime";
6
- import J from "react-dom";
7
- import N from "react";
8
- import { __require as B } from "./index155.mjs";
9
- import { __require as D } from "./index156.mjs";
10
- import { __require as G } from "./index151.mjs";
11
- import { __exports as Q } from "./index74.mjs";
12
- var w;
13
- function ie() {
14
- return w ? L.exports : (w = 1, function(x, o) {
15
- "use client";
16
- Object.defineProperty(o, "__esModule", {
2
+ import { __exports as e } from "./index150.mjs";
3
+ var i;
4
+ function u() {
5
+ return i ? e : (i = 1, function(r) {
6
+ Object.defineProperty(r, "__esModule", {
17
7
  value: !0
18
- });
19
- function M(t, e) {
20
- for (var n in e) Object.defineProperty(t, n, {
21
- enumerable: !0,
22
- get: e[n]
23
- });
24
- }
25
- M(o, {
26
- default: function() {
27
- return z;
28
- },
29
- handleClientScriptLoad: function() {
30
- return C;
31
- },
32
- initScriptLoader: function() {
33
- return $;
8
+ }), Object.defineProperty(r, "removeTrailingSlash", {
9
+ enumerable: !0,
10
+ get: function() {
11
+ return n;
34
12
  }
35
13
  });
36
- const j = Q, P = K(), O = F, h = /* @__PURE__ */ j._(J), g = /* @__PURE__ */ P._(N), R = B(), k = D(), I = G(), v = /* @__PURE__ */ new Map(), p = /* @__PURE__ */ new Set(), A = (t) => {
37
- if (h.default.preinit) {
38
- t.forEach((e) => {
39
- h.default.preinit(e, {
40
- as: "style"
41
- });
42
- });
43
- return;
44
- }
45
- if (typeof window < "u") {
46
- let e = document.head;
47
- t.forEach((n) => {
48
- let s = document.createElement("link");
49
- s.type = "text/css", s.rel = "stylesheet", s.href = n, e.appendChild(s);
50
- });
51
- }
52
- }, y = (t) => {
53
- const { src: e, id: n, onLoad: s = () => {
54
- }, onReady: l = null, dangerouslySetInnerHTML: i, children: _ = "", strategy: S = "afterInteractive", onError: r, stylesheets: q } = t, c = n || e;
55
- if (c && p.has(c))
56
- return;
57
- if (v.has(e)) {
58
- p.add(c), v.get(e).then(s, r);
59
- return;
60
- }
61
- const d = () => {
62
- l && l(), p.add(c);
63
- }, a = document.createElement("script"), u = new Promise((m, b) => {
64
- a.addEventListener("load", function(f) {
65
- m(), s && s.call(this, f), d();
66
- }), a.addEventListener("error", function(f) {
67
- b(f);
68
- });
69
- }).catch(function(m) {
70
- r && r(m);
71
- });
72
- i ? (a.innerHTML = i.__html || "", d()) : _ ? (a.textContent = typeof _ == "string" ? _ : Array.isArray(_) ? _.join("") : "", d()) : e && (a.src = e, v.set(e, u)), (0, k.setAttributesFromProps)(a, t), S === "worker" && a.setAttribute("type", "text/partytown"), a.setAttribute("data-nscript", S), q && A(q), document.body.appendChild(a);
73
- };
74
- function C(t) {
75
- const { strategy: e = "afterInteractive" } = t;
76
- e === "lazyOnload" ? window.addEventListener("load", () => {
77
- (0, I.requestIdleCallback)(() => y(t));
78
- }) : y(t);
79
- }
80
- function H(t) {
81
- document.readyState === "complete" ? (0, I.requestIdleCallback)(() => y(t)) : window.addEventListener("load", () => {
82
- (0, I.requestIdleCallback)(() => y(t));
83
- });
14
+ function n(a) {
15
+ return a.replace(/\/$/, "") || "/";
84
16
  }
85
- function T() {
86
- [
87
- ...document.querySelectorAll('[data-nscript="beforeInteractive"]'),
88
- ...document.querySelectorAll('[data-nscript="beforePageRender"]')
89
- ].forEach((e) => {
90
- const n = e.id || e.getAttribute("src");
91
- p.add(n);
92
- });
93
- }
94
- function $(t) {
95
- t.forEach(C), T();
96
- }
97
- function E(t) {
98
- const { id: e, src: n = "", onLoad: s = () => {
99
- }, onReady: l = null, strategy: i = "afterInteractive", onError: _, stylesheets: S, ...r } = t, { updateScripts: q, scripts: c, getIsSsr: d, appDir: a, nonce: u } = (0, g.useContext)(R.HeadManagerContext), m = (0, g.useRef)(!1);
100
- (0, g.useEffect)(() => {
101
- const f = e || n;
102
- m.current || (l && f && p.has(f) && l(), m.current = !0);
103
- }, [
104
- l,
105
- e,
106
- n
107
- ]);
108
- const b = (0, g.useRef)(!1);
109
- if ((0, g.useEffect)(() => {
110
- b.current || (i === "afterInteractive" ? y(t) : i === "lazyOnload" && H(t), b.current = !0);
111
- }, [
112
- t,
113
- i
114
- ]), (i === "beforeInteractive" || i === "worker") && (q ? (c[i] = (c[i] || []).concat([
115
- {
116
- id: e,
117
- src: n,
118
- onLoad: s,
119
- onReady: l,
120
- onError: _,
121
- ...r
122
- }
123
- ]), q(c)) : d && d() ? p.add(e || n) : d && !d() && y(t)), a) {
124
- if (S && S.forEach((f) => {
125
- h.default.preinit(f, {
126
- as: "style"
127
- });
128
- }), i === "beforeInteractive")
129
- return n ? (h.default.preload(n, r.integrity ? {
130
- as: "script",
131
- integrity: r.integrity,
132
- nonce: u,
133
- crossOrigin: r.crossOrigin
134
- } : {
135
- as: "script",
136
- nonce: u,
137
- crossOrigin: r.crossOrigin
138
- }), /* @__PURE__ */ (0, O.jsx)("script", {
139
- nonce: u,
140
- dangerouslySetInnerHTML: {
141
- __html: "(self.__next_s=self.__next_s||[]).push(" + JSON.stringify([
142
- n,
143
- {
144
- ...r,
145
- id: e
146
- }
147
- ]) + ")"
148
- }
149
- })) : (r.dangerouslySetInnerHTML && (r.children = r.dangerouslySetInnerHTML.__html, delete r.dangerouslySetInnerHTML), /* @__PURE__ */ (0, O.jsx)("script", {
150
- nonce: u,
151
- dangerouslySetInnerHTML: {
152
- __html: "(self.__next_s=self.__next_s||[]).push(" + JSON.stringify([
153
- 0,
154
- {
155
- ...r,
156
- id: e
157
- }
158
- ]) + ")"
159
- }
160
- }));
161
- i === "afterInteractive" && n && h.default.preload(n, r.integrity ? {
162
- as: "script",
163
- integrity: r.integrity,
164
- nonce: u,
165
- crossOrigin: r.crossOrigin
166
- } : {
167
- as: "script",
168
- nonce: u,
169
- crossOrigin: r.crossOrigin
170
- });
171
- }
172
- return null;
173
- }
174
- Object.defineProperty(E, "__nextScript", {
175
- value: !0
176
- });
177
- const z = E;
178
- (typeof o.default == "function" || typeof o.default == "object" && o.default !== null) && typeof o.default.__esModule > "u" && (Object.defineProperty(o.default, "__esModule", { value: !0 }), Object.assign(o.default, o), x.exports = o.default);
179
- }(L, L.exports), L.exports);
17
+ }(e), e);
180
18
  }
181
19
  export {
182
- ie as __require
20
+ u as __require
183
21
  };
@@ -1 +1 @@
1
- {"version":3,"file":"StorefrontProvider.d.ts","sourceRoot":"","sources":["../../src/providers/StorefrontProvider.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC,OAAO,EAAgB,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAG1E,MAAM,WAAW,uBAAuB;IACtC,+BAA+B;IAC/B,QAAQ,EAAE,SAAS,CAAC;IACpB,qCAAqC;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,sFAAsF;IACtF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,4DAA4D;IAC5D,iBAAiB,CAAC,EAAE,iBAAiB,CAAC,mBAAmB,CAAC,CAAC;CAC5D;AA0BD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,QAAQ,EACR,SAAS,EACT,MAAM,EACN,aAAa,EACb,iBAAiB,GAClB,EAAE,uBAAuB,2CAezB"}
1
+ {"version":3,"file":"StorefrontProvider.d.ts","sourceRoot":"","sources":["../../src/providers/StorefrontProvider.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC,OAAO,EAAgB,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAI1E,MAAM,WAAW,uBAAuB;IACtC,+BAA+B;IAC/B,QAAQ,EAAE,SAAS,CAAC;IACpB,qCAAqC;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,sFAAsF;IACtF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,4DAA4D;IAC5D,iBAAiB,CAAC,EAAE,iBAAiB,CAAC,mBAAmB,CAAC,CAAC;CAC5D;AA4BD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,QAAQ,EACR,SAAS,EACT,MAAM,EACN,aAAa,EACb,iBAAiB,GAClB,EAAE,uBAAuB,2CAezB"}
@@ -0,0 +1,26 @@
1
+ import { type ReactNode } from 'react';
2
+ interface TikTokPixelContextType {
3
+ track: (event: string, data?: Record<string, unknown>, eventID?: string) => void;
4
+ trackPageView: () => void;
5
+ trackProductView: (productId: string, productName: string, price: number, eventID?: string) => void;
6
+ trackAddToCart: (productId: string, productName: string, price: number, quantity: number, eventID?: string) => void;
7
+ trackInitiateCheckout: (cartTotal: number, itemCount: number, eventID?: string, contents?: Array<{
8
+ content_id: string;
9
+ quantity: number;
10
+ price: number;
11
+ }>) => void;
12
+ trackPurchase: (orderTotal: number, currency: string, orderId: string, items: Array<{
13
+ id: string;
14
+ quantity: number;
15
+ item_price: number;
16
+ }>, eventID?: string) => void;
17
+ }
18
+ interface TikTokPixelProviderProps {
19
+ children: ReactNode;
20
+ pixelId?: string;
21
+ debug?: boolean;
22
+ }
23
+ export declare function TikTokPixelProvider({ children, pixelId, debug, }: TikTokPixelProviderProps): import("react/jsx-runtime").JSX.Element;
24
+ export declare function useTikTokPixel(): TikTokPixelContextType;
25
+ export {};
26
+ //# sourceMappingURL=TikTokPixelProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TikTokPixelProvider.d.ts","sourceRoot":"","sources":["../../src/providers/TikTokPixelProvider.tsx"],"names":[],"mappings":"AAEA,OAAc,EAKZ,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAEf,UAAU,sBAAsB;IAC9B,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACjF,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,gBAAgB,EAAE,CAChB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,MAAM,KACb,IAAI,CAAC;IACV,cAAc,EAAE,CACd,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,MAAM,KACb,IAAI,CAAC;IACV,qBAAqB,EAAE,CACrB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,KACtE,IAAI,CAAC;IACV,aAAa,EAAE,CACb,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,EAClE,OAAO,CAAC,EAAE,MAAM,KACb,IAAI,CAAC;CACX;AAID,UAAU,wBAAwB;IAChC,QAAQ,EAAE,SAAS,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAID,wBAAgB,mBAAmB,CAAC,EAClC,QAAQ,EACR,OAAO,EACP,KAAa,GACd,EAAE,wBAAwB,2CAyK1B;AAED,wBAAgB,cAAc,IAAI,sBAAsB,CAMvD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@instockng/storefront-ui",
3
- "version": "1.0.32",
3
+ "version": "1.0.34",
4
4
  "description": "Pre-built UI components for OMS e-commerce sites",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -45,11 +45,12 @@
45
45
  "author": "Ola Wale",
46
46
  "license": "MIT",
47
47
  "dependencies": {
48
- "@instockng/api-client": "^1.0.12",
48
+ "@instockng/api-client": "^1.0.16",
49
49
  "class-variance-authority": "^0.7.1",
50
50
  "clsx": "^2.1.0",
51
51
  "react-facebook-pixel": "^1.0.4",
52
52
  "tailwind-merge": "^2.2.0",
53
+ "tiktok-pixel": "^2.0.3",
53
54
  "yup": "^1.7.1"
54
55
  },
55
56
  "peerDependencies": {
@@ -23,6 +23,7 @@ import {
23
23
  } from '@instockng/api-client';
24
24
  import { ShoppingCart } from '../components/ShoppingCart';
25
25
  import { useMetaPixel } from '../providers/MetaPixelProvider';
26
+ import { useTikTokPixel } from '../providers/TikTokPixelProvider';
26
27
  import { getFbCookies } from '../lib/utils';
27
28
 
28
29
  const CART_ID_KEY = 'oms_cart_id';
@@ -95,7 +96,10 @@ export function CartProvider({ children, brandSlug, initialCartId, shoppingCartP
95
96
  const isHandlingErrorRef = useRef(false);
96
97
 
97
98
  // Get Meta Pixel tracking methods
98
- const { trackAddToCart, trackInitiateCheckout } = useMetaPixel();
99
+ const { trackAddToCart: trackMetaAddToCart, trackInitiateCheckout: trackMetaInitiateCheckout } = useMetaPixel();
100
+
101
+ // Get TikTok Pixel tracking methods
102
+ const { trackAddToCart: trackTikTokAddToCart, trackInitiateCheckout: trackTikTokInitiateCheckout } = useTikTokPixel();
99
103
 
100
104
  // Set mounted flag on client
101
105
  useEffect(() => {
@@ -256,14 +260,18 @@ export function CartProvider({ children, brandSlug, initialCartId, shoppingCartP
256
260
  const eventID = `cart_${cartId}_item_${addedItem.id}`;
257
261
 
258
262
  // Track AddToCart event with Meta Pixel and matching event ID
259
- trackAddToCart(productSlug, productName, price, quantity, eventID);
263
+ trackMetaAddToCart(productSlug, productName, price, quantity, eventID);
264
+
265
+ // Track AddToCart event with TikTok Pixel and matching event ID
266
+ trackTikTokAddToCart(productSlug, productName, price, quantity, eventID);
260
267
  } else {
261
268
  // Fallback without event ID if item not found
262
- trackAddToCart(productSlug, productName, price, quantity);
269
+ trackMetaAddToCart(productSlug, productName, price, quantity);
270
+ trackTikTokAddToCart(productSlug, productName, price, quantity);
263
271
  }
264
272
  },
265
273
  // eslint-disable-next-line react-hooks/exhaustive-deps
266
- [cartId, trackAddToCart]
274
+ [cartId, trackMetaAddToCart, trackTikTokAddToCart]
267
275
  );
268
276
 
269
277
  const updateItem = useCallback(
@@ -334,9 +342,19 @@ export function CartProvider({ children, brandSlug, initialCartId, shoppingCartP
334
342
  // Generate event ID matching backend format: cart_{cartId}_checkout
335
343
  const eventID = `cart_${cartId}_checkout`;
336
344
 
345
+ // Prepare contents array for TikTok Pixel
346
+ const contents = cart.items?.map((item) => ({
347
+ content_id: item.variant.sku,
348
+ quantity: item.quantity,
349
+ price: Number(item.variant.price),
350
+ })) || [];
351
+
337
352
  // Track InitiateCheckout event with Meta Pixel
338
- trackInitiateCheckout(cartTotal, itemCount, eventID);
339
- }, [cart, cartId, trackInitiateCheckout]);
353
+ trackMetaInitiateCheckout(cartTotal, itemCount, eventID);
354
+
355
+ // Track InitiateCheckout event with TikTok Pixel
356
+ trackTikTokInitiateCheckout(cartTotal, itemCount, eventID, contents);
357
+ }, [cart, cartId, trackMetaInitiateCheckout, trackTikTokInitiateCheckout]);
340
358
 
341
359
  const value: CartContextValue = {
342
360
  cart: cart || null,
package/src/index.ts CHANGED
@@ -14,6 +14,11 @@ export { CartProvider, useCart } from './contexts/CartContext';
14
14
  // Export Meta Pixel tracking
15
15
  export { useMetaPixel, MetaPixelProvider } from './providers/MetaPixelProvider';
16
16
  export type { MetaPixelProviderProps, PurchaseItem } from './providers/MetaPixelProvider';
17
+
18
+ // Export TikTok Pixel tracking
19
+ export { useTikTokPixel, TikTokPixelProvider } from './providers/TikTokPixelProvider';
20
+
21
+ // Export page tracking hook
17
22
  export { usePageTracking } from './hooks/usePageTracking';
18
23
 
19
24
  // Export main components
@@ -29,6 +29,7 @@ import { ReactNode } from 'react';
29
29
  import { ApiClientProvider, useGetBrand } from '@instockng/api-client';
30
30
  import { CartProvider, CartProviderProps } from '../contexts/CartContext';
31
31
  import { MetaPixelProvider } from './MetaPixelProvider';
32
+ import { TikTokPixelProvider } from './TikTokPixelProvider';
32
33
 
33
34
  export interface StorefrontProviderProps {
34
35
  /** Your children components */
@@ -44,7 +45,7 @@ export interface StorefrontProviderProps {
44
45
  }
45
46
 
46
47
  /**
47
- * Internal component that fetches brand config and wraps children with MetaPixelProvider
48
+ * Internal component that fetches brand config and wraps children with MetaPixelProvider and TikTokPixelProvider
48
49
  */
49
50
  function StorefrontProviderInner({
50
51
  children,
@@ -56,13 +57,15 @@ function StorefrontProviderInner({
56
57
 
57
58
  return (
58
59
  <MetaPixelProvider pixelId={brand?.metaPixelId}>
59
- <CartProvider
60
- brandSlug={brandSlug}
61
- initialCartId={initialCartId}
62
- shoppingCartProps={shoppingCartProps}
63
- >
64
- {children}
65
- </CartProvider>
60
+ <TikTokPixelProvider pixelId={brand?.tiktokPixelId}>
61
+ <CartProvider
62
+ brandSlug={brandSlug}
63
+ initialCartId={initialCartId}
64
+ shoppingCartProps={shoppingCartProps}
65
+ >
66
+ {children}
67
+ </CartProvider>
68
+ </TikTokPixelProvider>
66
69
  </MetaPixelProvider>
67
70
  );
68
71
  }
@@ -0,0 +1,233 @@
1
+ 'use client';
2
+
3
+ import React, {
4
+ createContext,
5
+ useContext,
6
+ useEffect,
7
+ useState,
8
+ type ReactNode,
9
+ } from 'react';
10
+
11
+ interface TikTokPixelContextType {
12
+ track: (event: string, data?: Record<string, unknown>, eventID?: string) => void;
13
+ trackPageView: () => void;
14
+ trackProductView: (
15
+ productId: string,
16
+ productName: string,
17
+ price: number,
18
+ eventID?: string
19
+ ) => void;
20
+ trackAddToCart: (
21
+ productId: string,
22
+ productName: string,
23
+ price: number,
24
+ quantity: number,
25
+ eventID?: string
26
+ ) => void;
27
+ trackInitiateCheckout: (
28
+ cartTotal: number,
29
+ itemCount: number,
30
+ eventID?: string,
31
+ contents?: Array<{ content_id: string; quantity: number; price: number }>
32
+ ) => void;
33
+ trackPurchase: (
34
+ orderTotal: number,
35
+ currency: string,
36
+ orderId: string,
37
+ items: Array<{ id: string; quantity: number; item_price: number }>,
38
+ eventID?: string
39
+ ) => void;
40
+ }
41
+
42
+ const TikTokPixelContext = createContext<TikTokPixelContextType | undefined>(undefined);
43
+
44
+ interface TikTokPixelProviderProps {
45
+ children: ReactNode;
46
+ pixelId?: string;
47
+ debug?: boolean;
48
+ }
49
+
50
+ let ttqInstance: any = null;
51
+
52
+ export function TikTokPixelProvider({
53
+ children,
54
+ pixelId,
55
+ debug = false,
56
+ }: TikTokPixelProviderProps) {
57
+ const [isInitialized, setIsInitialized] = useState(false);
58
+
59
+ useEffect(() => {
60
+ // Only run on client side
61
+ if (typeof window === 'undefined') return;
62
+ if (!pixelId) {
63
+ if (debug) {
64
+ console.log('TikTok Pixel ID not provided. Tracking disabled.');
65
+ }
66
+ return;
67
+ }
68
+
69
+ // Initialize TikTok Pixel
70
+ const initTikTokPixel = async () => {
71
+ try {
72
+ // Dynamically import tiktok-pixel to avoid SSR issues
73
+ const TikTokPixel = (await import('tiktok-pixel')).default;
74
+
75
+ // Initialize pixel
76
+ TikTokPixel.init(pixelId, {}, { debug });
77
+
78
+ // Track initial page view
79
+ TikTokPixel.pageView();
80
+
81
+ ttqInstance = TikTokPixel;
82
+ setIsInitialized(true);
83
+
84
+ if (debug) {
85
+ console.log('TikTok Pixel initialized:', pixelId);
86
+ }
87
+ } catch (error) {
88
+ console.error('Failed to initialize TikTok Pixel:', error);
89
+ }
90
+ };
91
+
92
+ initTikTokPixel();
93
+ }, [pixelId, debug]);
94
+
95
+ const track = (event: string, data?: Record<string, unknown>, eventID?: string) => {
96
+ if (!isInitialized || !ttqInstance) {
97
+ if (debug) {
98
+ console.log('TikTok Pixel not initialized. Event not tracked:', event);
99
+ }
100
+ return;
101
+ }
102
+
103
+ try {
104
+ const eventData = eventID ? { ...data, event_id: eventID } : data;
105
+ ttqInstance.track(event, eventData);
106
+
107
+ if (debug) {
108
+ console.log('TikTok Pixel tracked event:', event, eventData);
109
+ }
110
+ } catch (error) {
111
+ console.error('Failed to track TikTok Pixel event:', error);
112
+ }
113
+ };
114
+
115
+ const trackPageView = () => {
116
+ if (!isInitialized || !ttqInstance) return;
117
+
118
+ try {
119
+ ttqInstance.pageView();
120
+
121
+ if (debug) {
122
+ console.log('TikTok Pixel tracked page view');
123
+ }
124
+ } catch (error) {
125
+ console.error('Failed to track TikTok Pixel page view:', error);
126
+ }
127
+ };
128
+
129
+ const trackProductView = (
130
+ productId: string,
131
+ productName: string,
132
+ price: number,
133
+ eventID?: string
134
+ ) => {
135
+ track(
136
+ 'ViewContent',
137
+ {
138
+ content_type: 'product',
139
+ content_id: productId,
140
+ content_name: productName,
141
+ price: price,
142
+ currency: 'NGN',
143
+ },
144
+ eventID
145
+ );
146
+ };
147
+
148
+ const trackAddToCart = (
149
+ productId: string,
150
+ productName: string,
151
+ price: number,
152
+ quantity: number,
153
+ eventID?: string
154
+ ) => {
155
+ track(
156
+ 'AddToCart',
157
+ {
158
+ content_type: 'product',
159
+ content_id: productId,
160
+ content_name: productName,
161
+ value: price * quantity,
162
+ quantity: quantity,
163
+ currency: 'NGN',
164
+ },
165
+ eventID
166
+ );
167
+ };
168
+
169
+ const trackInitiateCheckout = (
170
+ cartTotal: number,
171
+ itemCount: number,
172
+ eventID?: string,
173
+ contents?: Array<{ content_id: string; quantity: number; price: number }>
174
+ ) => {
175
+ track(
176
+ 'InitiateCheckout',
177
+ {
178
+ content_type: 'product',
179
+ value: cartTotal,
180
+ currency: 'NGN',
181
+ num_items: itemCount,
182
+ ...(contents && contents.length > 0 ? { contents } : {}),
183
+ },
184
+ eventID
185
+ );
186
+ };
187
+
188
+ const trackPurchase = (
189
+ orderTotal: number,
190
+ currency: string,
191
+ orderId: string,
192
+ items: Array<{ id: string; quantity: number; item_price: number }>,
193
+ eventID?: string
194
+ ) => {
195
+ track(
196
+ 'CompletePayment',
197
+ {
198
+ content_type: 'product',
199
+ value: orderTotal,
200
+ currency: currency,
201
+ contents: items.map((item) => ({
202
+ content_id: item.id,
203
+ quantity: item.quantity,
204
+ price: item.item_price,
205
+ })),
206
+ },
207
+ eventID
208
+ );
209
+ };
210
+
211
+ const contextValue: TikTokPixelContextType = {
212
+ track,
213
+ trackPageView,
214
+ trackProductView,
215
+ trackAddToCart,
216
+ trackInitiateCheckout,
217
+ trackPurchase,
218
+ };
219
+
220
+ return (
221
+ <TikTokPixelContext.Provider value={contextValue}>
222
+ {children}
223
+ </TikTokPixelContext.Provider>
224
+ );
225
+ }
226
+
227
+ export function useTikTokPixel(): TikTokPixelContextType {
228
+ const context = useContext(TikTokPixelContext);
229
+ if (context === undefined) {
230
+ throw new Error('useTikTokPixel must be used within a TikTokPixelProvider');
231
+ }
232
+ return context;
233
+ }