@instockng/storefront-ui 1.0.107 → 1.0.108

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 (250) hide show
  1. package/dist/components/AssistantDrawer.d.ts +1 -3
  2. package/dist/components/AssistantDrawer.d.ts.map +1 -1
  3. package/dist/contexts/AssistantContext.d.ts +19 -0
  4. package/dist/contexts/AssistantContext.d.ts.map +1 -0
  5. package/dist/index.d.ts +1 -2
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.mjs +56 -56
  8. package/dist/index10.mjs +103 -73
  9. package/dist/index100.mjs +52 -7
  10. package/dist/index101.mjs +5 -74
  11. package/dist/index102.mjs +4 -3
  12. package/dist/index103.mjs +179 -2
  13. package/dist/index104.mjs +49 -79
  14. package/dist/index105.mjs +68 -53
  15. package/dist/index106.mjs +2 -6
  16. package/dist/index107.mjs +5 -4
  17. package/dist/index108.mjs +1123 -168
  18. package/dist/index109.mjs +20 -53
  19. package/dist/index11.mjs +73 -189
  20. package/dist/index110.mjs +55 -69
  21. package/dist/index111.mjs +33 -2
  22. package/dist/index112.mjs +2 -37
  23. package/dist/index113.mjs +2 -43
  24. package/dist/index115.mjs +1 -1
  25. package/dist/index116.mjs +1 -1
  26. package/dist/index117.mjs +8 -8
  27. package/dist/index118.mjs +6 -6
  28. package/dist/index119.mjs +3 -3
  29. package/dist/index12.mjs +171 -106
  30. package/dist/index120.mjs +1 -1
  31. package/dist/index121.mjs +1 -1
  32. package/dist/index122.mjs +1 -1
  33. package/dist/index123.mjs +2 -2
  34. package/dist/index124.mjs +2 -2
  35. package/dist/index125.mjs +3 -3
  36. package/dist/index126.mjs +1 -1
  37. package/dist/index127.mjs +3 -3
  38. package/dist/index128.mjs +2 -2
  39. package/dist/index129.mjs +2 -2
  40. package/dist/index13.mjs +127 -98
  41. package/dist/index130.mjs +1 -1
  42. package/dist/index131.mjs +3 -3
  43. package/dist/index132.mjs +1 -1
  44. package/dist/index133.mjs +1 -1
  45. package/dist/index134.mjs +3 -3
  46. package/dist/index135.mjs +2 -2
  47. package/dist/index136.mjs +4 -4
  48. package/dist/index137.mjs +1 -1
  49. package/dist/index138.mjs +3 -3
  50. package/dist/index139.mjs +4 -4
  51. package/dist/index14.mjs +94 -90
  52. package/dist/index140.mjs +1 -1
  53. package/dist/index141.mjs +1 -1
  54. package/dist/index142.mjs +1 -1
  55. package/dist/index143.mjs +1 -1
  56. package/dist/index144.mjs +1 -1
  57. package/dist/index145.mjs +1 -1
  58. package/dist/index146.mjs +1 -1
  59. package/dist/index147.mjs +2 -2
  60. package/dist/index148.mjs +3 -3
  61. package/dist/index15.mjs +84 -149
  62. package/dist/index151.mjs +1 -1
  63. package/dist/index153.mjs +2 -2
  64. package/dist/index154.mjs +1 -1
  65. package/dist/index155.mjs +6 -6
  66. package/dist/index156.mjs +2 -2
  67. package/dist/index157.mjs +2 -2
  68. package/dist/index159.mjs +2 -2
  69. package/dist/index16.mjs +157 -203
  70. package/dist/index160.mjs +2 -2
  71. package/dist/index161.mjs +1 -1
  72. package/dist/index163.mjs +8 -8
  73. package/dist/index164.mjs +8 -8
  74. package/dist/index165.mjs +2 -2
  75. package/dist/index167.mjs +2 -2
  76. package/dist/index168.mjs +2 -18
  77. package/dist/index169.mjs +11 -25
  78. package/dist/index17.mjs +197 -106
  79. package/dist/index170.mjs +26 -32
  80. package/dist/index171.mjs +32 -12
  81. package/dist/index172.mjs +9 -9
  82. package/dist/index173.mjs +18 -2
  83. package/dist/index174.mjs +2 -20
  84. package/dist/index175.mjs +13 -39
  85. package/dist/index176.mjs +46 -2
  86. package/dist/index177.mjs +2 -30
  87. package/dist/index178.mjs +24 -12
  88. package/dist/index179.mjs +18 -2
  89. package/dist/index18.mjs +96 -129
  90. package/dist/index180.mjs +2 -2
  91. package/dist/index181.mjs +2 -2
  92. package/dist/index182.mjs +2 -2
  93. package/dist/index183.mjs +2 -72
  94. package/dist/index184.mjs +72 -2
  95. package/dist/index185.mjs +2 -53
  96. package/dist/index186.mjs +53 -2
  97. package/dist/index187.mjs +2 -36
  98. package/dist/index188.mjs +30 -146
  99. package/dist/index189.mjs +152 -2
  100. package/dist/index19.mjs +140 -87
  101. package/dist/index190.mjs +2 -2
  102. package/dist/index191.mjs +2 -19
  103. package/dist/index192.mjs +19 -2
  104. package/dist/index193.mjs +2 -2
  105. package/dist/index194.mjs +2 -26
  106. package/dist/index195.mjs +26 -2
  107. package/dist/index196.mjs +2 -2
  108. package/dist/index197.mjs +2 -24
  109. package/dist/index198.mjs +17 -16
  110. package/dist/index199.mjs +23 -2
  111. package/dist/index2.mjs +29 -15
  112. package/dist/index20.mjs +82 -708
  113. package/dist/index201.mjs +2 -2
  114. package/dist/index202.mjs +2 -23
  115. package/dist/index203.mjs +23 -2
  116. package/dist/index204.mjs +2 -23
  117. package/dist/index205.mjs +23 -2
  118. package/dist/index206.mjs +2 -2
  119. package/dist/index208.mjs +2 -23
  120. package/dist/index209.mjs +23 -2
  121. package/dist/index21.mjs +688 -229
  122. package/dist/index210.mjs +2 -23
  123. package/dist/index211.mjs +23 -2
  124. package/dist/index212.mjs +2 -2
  125. package/dist/index213.mjs +2 -2
  126. package/dist/index215.mjs +2 -2
  127. package/dist/index216.mjs +2 -2
  128. package/dist/index217.mjs +2 -2
  129. package/dist/index218.mjs +2 -2
  130. package/dist/index219.mjs +2 -127
  131. package/dist/index22.mjs +260 -42
  132. package/dist/index220.mjs +127 -2
  133. package/dist/index221.mjs +2 -74
  134. package/dist/index222.mjs +59 -59
  135. package/dist/index223.mjs +74 -2
  136. package/dist/index224.mjs +30 -12
  137. package/dist/index225.mjs +11 -7
  138. package/dist/index226.mjs +3 -11
  139. package/dist/index227.mjs +3 -4
  140. package/dist/index228.mjs +13 -33
  141. package/dist/index229.mjs +7 -31
  142. package/dist/index23.mjs +42 -21
  143. package/dist/index230.mjs +11 -27
  144. package/dist/index231.mjs +5 -61
  145. package/dist/index232.mjs +33 -31
  146. package/dist/index233.mjs +31 -11
  147. package/dist/index234.mjs +28 -4
  148. package/dist/index235.mjs +61 -4
  149. package/dist/index236.mjs +2 -2
  150. package/dist/index237.mjs +108 -2
  151. package/dist/index238.mjs +2 -2
  152. package/dist/index239.mjs +2 -2
  153. package/dist/index240.mjs +2 -2
  154. package/dist/index241.mjs +2 -2
  155. package/dist/index242.mjs +2 -2
  156. package/dist/index243.mjs +2 -2
  157. package/dist/index244.mjs +2 -108
  158. package/dist/index245.mjs +2 -2
  159. package/dist/index247.mjs +3 -3
  160. package/dist/index250.mjs +1 -1
  161. package/dist/index252.mjs +2 -2
  162. package/dist/index253.mjs +1 -1
  163. package/dist/index254.mjs +2 -2
  164. package/dist/index262.mjs +2 -2
  165. package/dist/index263.mjs +2 -4
  166. package/dist/index264.mjs +4 -2
  167. package/dist/index265.mjs +2 -2
  168. package/dist/index266.mjs +2 -2
  169. package/dist/index267.mjs +3 -2
  170. package/dist/index268.mjs +2 -2
  171. package/dist/index269.mjs +2 -18
  172. package/dist/index270.mjs +16 -46
  173. package/dist/index271.mjs +13 -2
  174. package/dist/index272.mjs +6 -2
  175. package/dist/index273.mjs +30 -2
  176. package/dist/index275.mjs +2 -91
  177. package/dist/index276.mjs +18 -2
  178. package/dist/index277.mjs +47 -3
  179. package/dist/index278.mjs +2 -2
  180. package/dist/index279.mjs +2 -2
  181. package/dist/index280.mjs +2 -17
  182. package/dist/index281.mjs +2 -13
  183. package/dist/index282.mjs +91 -6
  184. package/dist/index283.mjs +2 -30
  185. package/dist/index3.mjs +3 -3
  186. package/dist/index4.mjs +34 -101
  187. package/dist/index43.mjs +1 -1
  188. package/dist/index44.mjs +1 -1
  189. package/dist/index45.mjs +1 -1
  190. package/dist/index46.mjs +1 -1
  191. package/dist/index47.mjs +1 -1
  192. package/dist/index48.mjs +2 -2
  193. package/dist/index5.mjs +92 -102
  194. package/dist/index50.mjs +2 -2
  195. package/dist/index54.mjs +3 -3
  196. package/dist/index58.mjs +1 -1
  197. package/dist/index6.mjs +111 -15
  198. package/dist/index63.mjs +17 -17
  199. package/dist/index64.mjs +2 -2
  200. package/dist/index65.mjs +1 -1
  201. package/dist/index66.mjs +1 -1
  202. package/dist/index67.mjs +1 -1
  203. package/dist/index68.mjs +1 -1
  204. package/dist/index69.mjs +1 -1
  205. package/dist/index7.mjs +15 -195
  206. package/dist/index70.mjs +1 -1
  207. package/dist/index71.mjs +1 -1
  208. package/dist/index72.mjs +1 -1
  209. package/dist/index73.mjs +1 -1
  210. package/dist/index74.mjs +1 -1
  211. package/dist/index75.mjs +1 -1
  212. package/dist/index76.mjs +1 -1
  213. package/dist/index77.mjs +1 -1
  214. package/dist/index78.mjs +1 -1
  215. package/dist/index79.mjs +4 -23
  216. package/dist/index8.mjs +135 -189
  217. package/dist/index80.mjs +24 -2
  218. package/dist/index81.mjs +2 -153
  219. package/dist/index82.mjs +149 -19
  220. package/dist/index83.mjs +21 -73
  221. package/dist/index84.mjs +74 -14
  222. package/dist/index85.mjs +14 -62
  223. package/dist/index86.mjs +62 -4
  224. package/dist/index87.mjs +37 -2
  225. package/dist/index88.mjs +42 -5
  226. package/dist/index89.mjs +230 -1129
  227. package/dist/index9.mjs +240 -99
  228. package/dist/index90.mjs +5 -19
  229. package/dist/index91.mjs +127 -48
  230. package/dist/index92.mjs +67 -32
  231. package/dist/index93.mjs +87 -2
  232. package/dist/index94.mjs +23 -229
  233. package/dist/index95.mjs +8 -5
  234. package/dist/index96.mjs +66 -125
  235. package/dist/index97.mjs +3 -67
  236. package/dist/index98.mjs +2 -87
  237. package/dist/index99.mjs +78 -24
  238. package/dist/providers/StorefrontProvider.d.ts +3 -1
  239. package/dist/providers/StorefrontProvider.d.ts.map +1 -1
  240. package/dist/styles.css +1 -1
  241. package/package.json +1 -1
  242. package/src/components/AssistantDrawer.stories.tsx +0 -50
  243. package/src/components/AssistantDrawer.tsx +4 -8
  244. package/src/contexts/AssistantContext.tsx +62 -0
  245. package/src/index.ts +3 -2
  246. package/src/providers/StorefrontProvider.tsx +17 -2
  247. package/dist/components/SearchAssistantTrigger.d.ts +0 -12
  248. package/dist/components/SearchAssistantTrigger.d.ts.map +0 -1
  249. package/src/components/SearchAssistantTrigger.stories.tsx +0 -35
  250. package/src/components/SearchAssistantTrigger.tsx +0 -41
package/dist/index210.mjs CHANGED
@@ -1,26 +1,5 @@
1
1
  'use client';
2
- import { __exports as r } from "./index266.mjs";
3
- import { __require as s } from "./index130.mjs";
4
- var a;
5
- function _() {
6
- return a ? r : (a = 1, function(t) {
7
- Object.defineProperty(t, "__esModule", {
8
- value: !0
9
- }), Object.defineProperty(t, "addPathSuffix", {
10
- enumerable: !0,
11
- get: function() {
12
- return n;
13
- }
14
- });
15
- const i = s();
16
- function n(e, u) {
17
- if (!e.startsWith("/") || !u)
18
- return e;
19
- const { pathname: f, query: d, hash: o } = (0, i.parsePath)(e);
20
- return "" + f + u + d + o;
21
- }
22
- }(r), r);
23
- }
2
+ var a = {};
24
3
  export {
25
- _ as __require
4
+ a as __exports
26
5
  };
package/dist/index211.mjs CHANGED
@@ -1,5 +1,26 @@
1
1
  'use client';
2
- var a = {};
2
+ import { __exports as r } from "./index262.mjs";
3
+ import { __require as s } from "./index130.mjs";
4
+ var a;
5
+ function _() {
6
+ return a ? r : (a = 1, function(t) {
7
+ Object.defineProperty(t, "__esModule", {
8
+ value: !0
9
+ }), Object.defineProperty(t, "addPathSuffix", {
10
+ enumerable: !0,
11
+ get: function() {
12
+ return n;
13
+ }
14
+ });
15
+ const i = s();
16
+ function n(e, u) {
17
+ if (!e.startsWith("/") || !u)
18
+ return e;
19
+ const { pathname: f, query: d, hash: o } = (0, i.parsePath)(e);
20
+ return "" + f + u + d + o;
21
+ }
22
+ }(r), r);
23
+ }
3
24
  export {
4
- a as __exports
25
+ _ as __require
5
26
  };
package/dist/index212.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  'use client';
2
- var r = {};
2
+ var a = {};
3
3
  export {
4
- r as __exports
4
+ a as __exports
5
5
  };
package/dist/index213.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  'use client';
2
- var o = {};
2
+ var r = {};
3
3
  export {
4
- o as __exports
4
+ r as __exports
5
5
  };
package/dist/index215.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  'use client';
2
- var e = {};
2
+ var o = {};
3
3
  export {
4
- e as __exports
4
+ o as __exports
5
5
  };
package/dist/index216.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  'use client';
2
- var o = {};
2
+ var e = {};
3
3
  export {
4
- o as __exports
4
+ e as __exports
5
5
  };
package/dist/index217.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  'use client';
2
- var s = {};
2
+ var o = {};
3
3
  export {
4
- s as __exports
4
+ o as __exports
5
5
  };
package/dist/index218.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  'use client';
2
- var o = {};
2
+ var s = {};
3
3
  export {
4
- o as __exports
4
+ s as __exports
5
5
  };
package/dist/index219.mjs CHANGED
@@ -1,130 +1,5 @@
1
1
  'use client';
2
- import { __module as b } from "./index262.mjs";
3
- import S from "./index263.mjs";
4
- var _;
5
- function $() {
6
- return _ ? b.exports : (_ = 1, (() => {
7
- var O = { 154: (t, m, n) => {
8
- var i = n(781), u = ["write", "end", "destroy"], f = ["resume", "pause"], l = ["data", "close"], c = Array.prototype.slice;
9
- t.exports = s;
10
- function r(o, a) {
11
- if (o.forEach)
12
- return o.forEach(a);
13
- for (var e = 0; e < o.length; e++)
14
- a(o[e], e);
15
- }
16
- function s(o, a) {
17
- var e = new i(), d = !1;
18
- return r(u, x), r(f, z), r(l, E), a.on("end", F), o.on("drain", function() {
19
- e.emit("drain");
20
- }), o.on("error", w), a.on("error", w), e.writable = o.writable, e.readable = a.readable, e;
21
- function x(p) {
22
- e[p] = h;
23
- function h() {
24
- return o[p].apply(o, arguments);
25
- }
26
- }
27
- function z(p) {
28
- e[p] = h;
29
- function h() {
30
- e.emit(p);
31
- var y = a[p];
32
- if (y)
33
- return y.apply(a, arguments);
34
- a.emit(p);
35
- }
36
- }
37
- function E(p) {
38
- a.on(p, h);
39
- function h() {
40
- var y = c.call(arguments);
41
- y.unshift(p), e.emit.apply(e, y);
42
- }
43
- }
44
- function F() {
45
- if (!d) {
46
- d = !0;
47
- var p = c.call(arguments);
48
- p.unshift("end"), e.emit.apply(e, p);
49
- }
50
- }
51
- function w(p) {
52
- e.emit("error", p);
53
- }
54
- }
55
- }, 349: (t, m, n) => {
56
- const i = n(147), u = n(781), f = n(796), l = n(154), c = n(530), r = (s) => Object.assign({ level: 9 }, s);
57
- t.exports = (s, o) => s ? c(f.gzip)(s, r(o)).then((a) => a.length).catch((a) => 0) : Promise.resolve(0), t.exports.sync = (s, o) => f.gzipSync(s, r(o)).length, t.exports.stream = (s) => {
58
- const o = new u.PassThrough(), a = new u.PassThrough(), e = l(o, a);
59
- let d = 0;
60
- const x = f.createGzip(r(s)).on("data", (z) => {
61
- d += z.length;
62
- }).on("error", () => {
63
- e.gzipSize = 0;
64
- }).on("end", () => {
65
- e.gzipSize = d, e.emit("gzip-size", d), a.end();
66
- });
67
- return o.pipe(x), o.pipe(a, { end: !1 }), e;
68
- }, t.exports.file = (s, o) => new Promise((a, e) => {
69
- const d = i.createReadStream(s);
70
- d.on("error", e);
71
- const x = d.pipe(t.exports.stream(o));
72
- x.on("error", e), x.on("gzip-size", a);
73
- }), t.exports.fileSync = (s, o) => t.exports.sync(i.readFileSync(s), o);
74
- }, 530: (t) => {
75
- const m = (n, i) => function(...u) {
76
- const f = i.promiseModule;
77
- return new f((l, c) => {
78
- i.multiArgs ? u.push((...r) => {
79
- i.errorFirst ? r[0] ? c(r) : (r.shift(), l(r)) : l(r);
80
- }) : i.errorFirst ? u.push((r, s) => {
81
- r ? c(r) : l(s);
82
- }) : u.push(l), n.apply(this, u);
83
- });
84
- };
85
- t.exports = (n, i) => {
86
- i = Object.assign({ exclude: [/.+(Sync|Stream)$/], errorFirst: !0, promiseModule: Promise }, i);
87
- const u = typeof n;
88
- if (!(n !== null && (u === "object" || u === "function")))
89
- throw new TypeError(`Expected \`input\` to be a \`Function\` or \`Object\`, got \`${n === null ? "null" : u}\``);
90
- const f = (c) => {
91
- const r = (s) => typeof s == "string" ? c === s : s.test(c);
92
- return i.include ? i.include.some(r) : !i.exclude.some(r);
93
- };
94
- let l;
95
- u === "function" ? l = function(...c) {
96
- return i.excludeMain ? n(...c) : m(n, i).apply(this, c);
97
- } : l = Object.create(Object.getPrototypeOf(n));
98
- for (const c in n) {
99
- const r = n[c];
100
- l[c] = typeof r == "function" && f(c) ? m(r, i) : r;
101
- }
102
- return l;
103
- };
104
- }, 147: (t) => {
105
- t.exports = S;
106
- }, 781: (t) => {
107
- t.exports = S;
108
- }, 796: (t) => {
109
- t.exports = S;
110
- } }, v = {};
111
- function g(t) {
112
- var m = v[t];
113
- if (m !== void 0)
114
- return m.exports;
115
- var n = v[t] = { exports: {} }, i = !0;
116
- try {
117
- O[t](n, n.exports, g), i = !1;
118
- } finally {
119
- i && delete v[t];
120
- }
121
- return n.exports;
122
- }
123
- typeof g < "u" && (g.ab = __dirname + "/");
124
- var j = g(349);
125
- b.exports = j;
126
- })(), b.exports);
127
- }
2
+ var o = {};
128
3
  export {
129
- $ as __require
4
+ o as __exports
130
5
  };
package/dist/index22.mjs CHANGED
@@ -1,48 +1,266 @@
1
1
  'use client';
2
- import { jsxs as e, jsx as t } from "react/jsx-runtime";
3
- import { Sparkles as i } from "lucide-react";
4
- import { cn as r } from "./index30.mjs";
5
- function u({
6
- faqs: o = [],
7
- onAsk: s,
8
- className: n
2
+ import { jsxs as l, jsx as r } from "react/jsx-runtime";
3
+ import { useState as m, useRef as b, useCallback as V, useEffect as N } from "react";
4
+ import { createPortal as O } from "react-dom";
5
+ import { Sparkles as Q, X as ee, Loader2 as te, Send as re } from "lucide-react";
6
+ import { cn as k, formatCurrency as se } from "./index30.mjs";
7
+ import { useHideBodyOverflow as ne } from "./index53.mjs";
8
+ function me({
9
+ isOpen: c,
10
+ onClose: y,
11
+ apiUrl: T,
12
+ brandSlug: C,
13
+ productSlug: I,
14
+ initialQuestion: x,
15
+ assistantName: $ = "AI Assistant",
16
+ className: X,
17
+ disablePortal: G = !1
9
18
  }) {
10
- return o.length === 0 ? null : /* @__PURE__ */ e("div", { className: r("space-y-2", n), children: [
11
- /* @__PURE__ */ e("div", { className: "flex items-center gap-1.5 text-sm font-medium text-gray-700", children: [
12
- /* @__PURE__ */ t(i, { className: "h-4 w-4 text-orange-500" }),
13
- "Ask AI"
14
- ] }),
15
- /* @__PURE__ */ e("div", { className: "flex flex-wrap gap-2", children: [
16
- o.map((l, a) => /* @__PURE__ */ t(
17
- "button",
18
- {
19
- type: "button",
20
- onClick: () => s(l.question),
21
- className: r(
22
- "rounded-full border border-gray-200 bg-blue-50/60 px-3 py-1.5 text-sm text-gray-700",
23
- "hover:bg-blue-100 hover:border-blue-200 transition-colors",
24
- "active:scale-95"
25
- ),
26
- children: l.question
27
- },
28
- a
29
- )),
30
- /* @__PURE__ */ t(
31
- "button",
32
- {
33
- type: "button",
34
- onClick: () => s(""),
35
- className: r(
36
- "rounded-full border border-gray-300 bg-gray-800 px-3 py-1.5 text-sm text-white font-medium",
37
- "hover:bg-gray-700 transition-colors",
38
- "active:scale-95"
39
- ),
40
- children: "Ask something else"
19
+ const [u, d] = m([]), [w, S] = m(""), [f, D] = m(!1), [J, h] = m(null), [L, P] = m(!1), [K, W] = m(!1), q = b(null), F = b(null), E = b(!1), M = b([]);
20
+ M.current = u, ne(c);
21
+ const z = V((e, a) => {
22
+ if (e === "token")
23
+ d((s) => {
24
+ const o = [...s], t = o[o.length - 1];
25
+ return (t == null ? void 0 : t.role) === "assistant" && (o[o.length - 1] = { ...t, content: t.content + a }), o;
26
+ });
27
+ else if (e === "done")
28
+ try {
29
+ const s = JSON.parse(a);
30
+ d((o) => {
31
+ var i;
32
+ const t = [...o], n = t[t.length - 1];
33
+ return (n == null ? void 0 : n.role) === "assistant" && (t[t.length - 1] = {
34
+ ...n,
35
+ content: s.answer || n.content,
36
+ products: ((i = s.products) == null ? void 0 : i.length) > 0 ? s.products : void 0
37
+ }), t;
38
+ });
39
+ } catch {
40
+ }
41
+ else if (e === "error")
42
+ try {
43
+ const s = JSON.parse(a);
44
+ h(s.message || "An error occurred");
45
+ } catch {
46
+ h("An error occurred");
47
+ }
48
+ }, []), v = b(), B = V(
49
+ async (e) => {
50
+ var o;
51
+ if (!e.trim()) return;
52
+ h(null);
53
+ const a = { role: "user", content: e }, s = M.current.map((t) => ({
54
+ role: t.role,
55
+ content: t.content
56
+ }));
57
+ d((t) => [...t, a]), S(""), D(!0), d((t) => [...t, { role: "assistant", content: "" }]);
58
+ try {
59
+ const t = await fetch(`${T}/v1/assistant/ask`, {
60
+ method: "POST",
61
+ headers: { "Content-Type": "application/json" },
62
+ body: JSON.stringify({
63
+ question: e,
64
+ brandSlug: C,
65
+ productSlug: I,
66
+ history: s
67
+ })
68
+ });
69
+ if (!t.ok) {
70
+ const g = await t.json().catch(() => ({}));
71
+ throw new Error(
72
+ ((o = g == null ? void 0 : g.error) == null ? void 0 : o.message) || `Request failed (${t.status})`
73
+ );
41
74
  }
42
- )
43
- ] })
44
- ] });
75
+ if (!t.body) throw new Error("No response body");
76
+ const n = t.body.getReader(), i = new TextDecoder();
77
+ let A = "", j = "";
78
+ for (; ; ) {
79
+ const { done: g, value: Z } = await n.read();
80
+ if (g) break;
81
+ A += i.decode(Z, { stream: !0 });
82
+ const U = A.split(`
83
+ `);
84
+ A = U.pop() || "";
85
+ for (const p of U) {
86
+ if (p.trim() === "") {
87
+ j = "";
88
+ continue;
89
+ }
90
+ if (p.trimStart().startsWith("event:"))
91
+ j = p.trimStart().slice(6).trim();
92
+ else if (p.trimStart().startsWith("data:")) {
93
+ const R = p.trimStart().slice(5), _ = R.startsWith(" ") ? R.slice(1) : R;
94
+ z(j || "token", _);
95
+ }
96
+ }
97
+ }
98
+ } catch (t) {
99
+ h(t.message || "Something went wrong"), d((n) => {
100
+ const i = n[n.length - 1];
101
+ return (i == null ? void 0 : i.role) === "assistant" && !i.content ? n.slice(0, -1) : n;
102
+ });
103
+ } finally {
104
+ D(!1);
105
+ }
106
+ },
107
+ [T, C, I, z]
108
+ );
109
+ v.current = B, N(() => {
110
+ if (c)
111
+ W(!0), requestAnimationFrame(() => {
112
+ requestAnimationFrame(() => {
113
+ P(!0);
114
+ });
115
+ });
116
+ else {
117
+ P(!1);
118
+ const e = setTimeout(() => {
119
+ W(!1), d([]), S(""), h(null), E.current = !1;
120
+ }, 300);
121
+ return () => clearTimeout(e);
122
+ }
123
+ }, [c]), N(() => {
124
+ c && x && !E.current && (E.current = !0, x.trim() ? setTimeout(() => {
125
+ var e;
126
+ return (e = v.current) == null ? void 0 : e.call(v, x);
127
+ }, 100) : setTimeout(() => {
128
+ var e;
129
+ return (e = F.current) == null ? void 0 : e.focus();
130
+ }, 350));
131
+ }, [c, x]), N(() => {
132
+ var e;
133
+ (e = q.current) == null || e.scrollIntoView({ behavior: "smooth" });
134
+ }, [u]), N(() => {
135
+ const e = (a) => {
136
+ a.key === "Escape" && c && y();
137
+ };
138
+ if (c)
139
+ return document.addEventListener("keydown", e), () => document.removeEventListener("keydown", e);
140
+ }, [c, y]);
141
+ const Y = (e) => {
142
+ e.preventDefault(), w.trim() && B(w.trim());
143
+ };
144
+ if (!K) return null;
145
+ const H = /* @__PURE__ */ l(
146
+ "div",
147
+ {
148
+ className: k(
149
+ "fixed inset-0 z-50 transition-opacity duration-300",
150
+ L ? "opacity-100" : "opacity-0"
151
+ ),
152
+ children: [
153
+ /* @__PURE__ */ r(
154
+ "div",
155
+ {
156
+ className: "absolute inset-0 bg-black/40 backdrop-blur-sm",
157
+ onClick: y
158
+ }
159
+ ),
160
+ /* @__PURE__ */ l(
161
+ "div",
162
+ {
163
+ className: k(
164
+ "absolute bg-white flex flex-col transition-transform duration-300 ease-out",
165
+ // Mobile: bottom sheet
166
+ "inset-x-0 bottom-0 top-[10vh] rounded-t-2xl",
167
+ // Desktop: right side drawer
168
+ "sm:inset-y-0 sm:right-0 sm:left-auto sm:w-[420px] sm:max-w-full sm:rounded-t-none sm:rounded-l-2xl",
169
+ // Animation
170
+ L ? "translate-y-0 sm:translate-x-0" : "translate-y-full sm:translate-y-0 sm:translate-x-full",
171
+ X
172
+ ),
173
+ children: [
174
+ /* @__PURE__ */ l("div", { className: "flex items-center justify-between border-b border-gray-200 px-4 py-3 flex-shrink-0", children: [
175
+ /* @__PURE__ */ l("div", { className: "flex items-center gap-2", children: [
176
+ /* @__PURE__ */ r(Q, { className: "h-5 w-5 text-orange-500" }),
177
+ /* @__PURE__ */ r("span", { className: "font-semibold text-gray-900", children: $ }),
178
+ /* @__PURE__ */ r("span", { className: "text-xs text-gray-400 bg-gray-100 rounded px-1.5 py-0.5", children: "beta" })
179
+ ] }),
180
+ /* @__PURE__ */ r(
181
+ "button",
182
+ {
183
+ type: "button",
184
+ onClick: y,
185
+ className: "p-2 text-gray-400 hover:text-gray-600 hover:bg-gray-100 rounded-lg transition-colors",
186
+ "aria-label": "Close",
187
+ children: /* @__PURE__ */ r(ee, { className: "h-5 w-5" })
188
+ }
189
+ )
190
+ ] }),
191
+ /* @__PURE__ */ l("div", { className: "flex-1 overflow-y-auto p-4 space-y-4 min-h-0", children: [
192
+ u.length === 0 && !f && /* @__PURE__ */ r("div", { className: "text-center text-gray-400 text-sm py-8", children: "Ask me anything about our products!" }),
193
+ u.map((e, a) => /* @__PURE__ */ r("div", { children: e.role === "user" ? /* @__PURE__ */ r("div", { className: "flex justify-end", children: /* @__PURE__ */ r("div", { className: "bg-gray-800 text-white rounded-2xl rounded-br-sm px-4 py-2 max-w-[80%] text-sm", children: e.content }) }) : /* @__PURE__ */ l("div", { className: "space-y-3", children: [
194
+ /* @__PURE__ */ l("div", { className: "text-sm text-gray-800 leading-relaxed whitespace-pre-wrap", children: [
195
+ e.content,
196
+ f && a === u.length - 1 && /* @__PURE__ */ r("span", { className: "inline-block w-1.5 h-4 bg-gray-400 animate-pulse ml-0.5 align-text-bottom" })
197
+ ] }),
198
+ e.products && e.products.length > 0 && /* @__PURE__ */ r("div", { className: "space-y-2", children: e.products.map((s) => /* @__PURE__ */ l(
199
+ "a",
200
+ {
201
+ href: `/product/${s.slug}`,
202
+ className: "flex items-center gap-3 w-full rounded-xl border border-gray-200 p-2 hover:bg-gray-50 transition-colors text-left no-underline",
203
+ children: [
204
+ s.thumbnailUrl ? /* @__PURE__ */ r(
205
+ "img",
206
+ {
207
+ src: s.thumbnailUrl,
208
+ alt: s.name,
209
+ className: "h-16 w-16 rounded-lg object-cover flex-shrink-0"
210
+ }
211
+ ) : /* @__PURE__ */ r("div", { className: "h-16 w-16 rounded-lg bg-gray-100 flex-shrink-0" }),
212
+ /* @__PURE__ */ l("div", { className: "min-w-0", children: [
213
+ /* @__PURE__ */ r("p", { className: "text-sm font-medium text-gray-900 line-clamp-2", children: s.name }),
214
+ /* @__PURE__ */ r("p", { className: "text-sm font-semibold text-blue-600", children: se(s.price) })
215
+ ] })
216
+ ]
217
+ },
218
+ s.slug
219
+ )) })
220
+ ] }) }, a)),
221
+ J && /* @__PURE__ */ r("div", { className: "rounded-lg bg-red-50 border border-red-200 p-3 text-sm text-red-700", children: J }),
222
+ /* @__PURE__ */ r("div", { ref: q })
223
+ ] }),
224
+ /* @__PURE__ */ r("div", { className: "border-t border-gray-200 p-3 flex-shrink-0", children: /* @__PURE__ */ l("form", { onSubmit: Y, className: "flex items-center gap-2", children: [
225
+ /* @__PURE__ */ r(
226
+ "input",
227
+ {
228
+ ref: F,
229
+ type: "text",
230
+ value: w,
231
+ onChange: (e) => S(e.target.value),
232
+ placeholder: `Ask ${$} a question`,
233
+ disabled: f,
234
+ className: k(
235
+ "flex-1 rounded-full border border-gray-300 px-4 py-2.5 text-sm",
236
+ "focus:border-blue-400 focus:outline-none focus:ring-2 focus:ring-blue-400/30",
237
+ "disabled:opacity-50"
238
+ )
239
+ }
240
+ ),
241
+ /* @__PURE__ */ r(
242
+ "button",
243
+ {
244
+ type: "submit",
245
+ disabled: !w.trim() || f,
246
+ className: k(
247
+ "flex h-10 w-10 items-center justify-center rounded-full",
248
+ "bg-gray-800 text-white",
249
+ "hover:bg-gray-700 transition-colors",
250
+ "disabled:opacity-40 disabled:cursor-not-allowed"
251
+ ),
252
+ children: f ? /* @__PURE__ */ r(te, { className: "h-4 w-4 animate-spin" }) : /* @__PURE__ */ r(re, { className: "h-4 w-4" })
253
+ }
254
+ )
255
+ ] }) })
256
+ ]
257
+ }
258
+ )
259
+ ]
260
+ }
261
+ );
262
+ return G ? H : O(H, document.body);
45
263
  }
46
264
  export {
47
- u as ProductAssistantChips
265
+ me as AssistantDrawer
48
266
  };