@instockng/storefront-ui 1.0.106 → 1.0.107

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 (296) hide show
  1. package/dist/components/AssistantDrawer.d.ts +24 -0
  2. package/dist/components/AssistantDrawer.d.ts.map +1 -0
  3. package/dist/components/ProductAssistantChips.d.ts +13 -0
  4. package/dist/components/ProductAssistantChips.d.ts.map +1 -0
  5. package/dist/components/SearchAssistantTrigger.d.ts +12 -0
  6. package/dist/components/SearchAssistantTrigger.d.ts.map +1 -0
  7. package/dist/index.d.ts +6 -0
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.mjs +127 -121
  10. package/dist/index10.mjs +3 -3
  11. package/dist/index100.mjs +8 -68
  12. package/dist/index101.mjs +71 -33
  13. package/dist/index102.mjs +3 -42
  14. package/dist/index103.mjs +2 -2
  15. package/dist/index104.mjs +82 -5
  16. package/dist/index105.mjs +53 -1133
  17. package/dist/index106.mjs +5 -19
  18. package/dist/index107.mjs +4 -54
  19. package/dist/index108.mjs +174 -28
  20. package/dist/index109.mjs +53 -2
  21. package/dist/index11.mjs +5 -5
  22. package/dist/index110.mjs +69 -2
  23. package/dist/index111.mjs +2 -2
  24. package/dist/index112.mjs +35 -26
  25. package/dist/index113.mjs +42 -17
  26. package/dist/index114.mjs +2 -215
  27. package/dist/index115.mjs +26 -178
  28. package/dist/index116.mjs +10 -14
  29. package/dist/index117.mjs +209 -17
  30. package/dist/index118.mjs +173 -26
  31. package/dist/index119.mjs +17 -151
  32. package/dist/index12.mjs +4 -4
  33. package/dist/index120.mjs +13 -10
  34. package/dist/index121.mjs +24 -22
  35. package/dist/index122.mjs +148 -76
  36. package/dist/index123.mjs +13 -31
  37. package/dist/index124.mjs +24 -138
  38. package/dist/index125.mjs +78 -49
  39. package/dist/index126.mjs +32 -17
  40. package/dist/index127.mjs +139 -21
  41. package/dist/index128.mjs +51 -19
  42. package/dist/index129.mjs +16 -18
  43. package/dist/index13.mjs +3 -3
  44. package/dist/index130.mjs +18 -12
  45. package/dist/index131.mjs +15 -14
  46. package/dist/index132.mjs +17 -13
  47. package/dist/index133.mjs +14 -58
  48. package/dist/index134.mjs +15 -11
  49. package/dist/index135.mjs +14 -32
  50. package/dist/index136.mjs +57 -16
  51. package/dist/index137.mjs +11 -27
  52. package/dist/index138.mjs +31 -19
  53. package/dist/index139.mjs +17 -12
  54. package/dist/index14.mjs +1 -1
  55. package/dist/index140.mjs +27 -14
  56. package/dist/index141.mjs +20 -40
  57. package/dist/index142.mjs +11 -15
  58. package/dist/index143.mjs +17 -264
  59. package/dist/index144.mjs +40 -63
  60. package/dist/index145.mjs +22 -7
  61. package/dist/index146.mjs +268 -2
  62. package/dist/index147.mjs +70 -2
  63. package/dist/index148.mjs +7 -32
  64. package/dist/index149.mjs +2 -2
  65. package/dist/index15.mjs +1 -1
  66. package/dist/index150.mjs +2 -21
  67. package/dist/index151.mjs +31 -54
  68. package/dist/index152.mjs +2 -29
  69. package/dist/index153.mjs +20 -6
  70. package/dist/index154.mjs +53 -49
  71. package/dist/index155.mjs +29 -6
  72. package/dist/index156.mjs +6 -11
  73. package/dist/index157.mjs +49 -4
  74. package/dist/index158.mjs +5 -27
  75. package/dist/index159.mjs +12 -2
  76. package/dist/index16.mjs +6 -6
  77. package/dist/index160.mjs +6 -69
  78. package/dist/index161.mjs +27 -166
  79. package/dist/index162.mjs +2 -2
  80. package/dist/index163.mjs +70 -2
  81. package/dist/index164.mjs +167 -2
  82. package/dist/index165.mjs +2 -2
  83. package/dist/index166.mjs +2 -18
  84. package/dist/index167.mjs +2 -32
  85. package/dist/index168.mjs +14 -34
  86. package/dist/index169.mjs +25 -11
  87. package/dist/index17.mjs +4 -4
  88. package/dist/index170.mjs +34 -14
  89. package/dist/index171.mjs +18 -2
  90. package/dist/index172.mjs +11 -13
  91. package/dist/index173.mjs +2 -46
  92. package/dist/index174.mjs +20 -2
  93. package/dist/index175.mjs +41 -25
  94. package/dist/index176.mjs +2 -18
  95. package/dist/index177.mjs +30 -2
  96. package/dist/index178.mjs +18 -2
  97. package/dist/index179.mjs +2 -2
  98. package/dist/index18.mjs +5 -5
  99. package/dist/index180.mjs +2 -2
  100. package/dist/index181.mjs +2 -72
  101. package/dist/index182.mjs +2 -2
  102. package/dist/index183.mjs +59 -40
  103. package/dist/index185.mjs +48 -31
  104. package/dist/index186.mjs +2 -152
  105. package/dist/index187.mjs +36 -2
  106. package/dist/index188.mjs +152 -2
  107. package/dist/index189.mjs +2 -19
  108. package/dist/index19.mjs +3 -3
  109. package/dist/index190.mjs +2 -2
  110. package/dist/index191.mjs +19 -2
  111. package/dist/index192.mjs +2 -26
  112. package/dist/index193.mjs +2 -2
  113. package/dist/index194.mjs +26 -2
  114. package/dist/index195.mjs +2 -24
  115. package/dist/index196.mjs +2 -23
  116. package/dist/index197.mjs +24 -2
  117. package/dist/index198.mjs +23 -2
  118. package/dist/index199.mjs +2 -2
  119. package/dist/index2.mjs +2 -2
  120. package/dist/index20.mjs +11 -11
  121. package/dist/index200.mjs +2 -23
  122. package/dist/index202.mjs +16 -16
  123. package/dist/index203.mjs +2 -2
  124. package/dist/index204.mjs +23 -2
  125. package/dist/index205.mjs +2 -2
  126. package/dist/index206.mjs +2 -23
  127. package/dist/index207.mjs +2 -2
  128. package/dist/index208.mjs +15 -15
  129. package/dist/index21.mjs +256 -51
  130. package/dist/index210.mjs +23 -2
  131. package/dist/index211.mjs +2 -2
  132. package/dist/index212.mjs +2 -2
  133. package/dist/index213.mjs +2 -2
  134. package/dist/index215.mjs +2 -2
  135. package/dist/index217.mjs +2 -127
  136. package/dist/index218.mjs +2 -2
  137. package/dist/index219.mjs +123 -70
  138. package/dist/index22.mjs +45 -62
  139. package/dist/index220.mjs +2 -74
  140. package/dist/index221.mjs +74 -13
  141. package/dist/index222.mjs +74 -7
  142. package/dist/index223.mjs +2 -31
  143. package/dist/index224.mjs +13 -11
  144. package/dist/index225.mjs +7 -4
  145. package/dist/index226.mjs +11 -3
  146. package/dist/index227.mjs +4 -11
  147. package/dist/index228.mjs +33 -5
  148. package/dist/index229.mjs +31 -33
  149. package/dist/index23.mjs +22 -22
  150. package/dist/index230.mjs +26 -29
  151. package/dist/index231.mjs +59 -26
  152. package/dist/index232.mjs +28 -58
  153. package/dist/index233.mjs +11 -2
  154. package/dist/index234.mjs +4 -2
  155. package/dist/index235.mjs +4 -2
  156. package/dist/index236.mjs +2 -2
  157. package/dist/index237.mjs +2 -2
  158. package/dist/index238.mjs +2 -2
  159. package/dist/index239.mjs +2 -2
  160. package/dist/index24.mjs +55 -104
  161. package/dist/index240.mjs +2 -2
  162. package/dist/index241.mjs +2 -108
  163. package/dist/index242.mjs +2 -2
  164. package/dist/index243.mjs +2 -2
  165. package/dist/index244.mjs +96 -25
  166. package/dist/index246.mjs +2 -244
  167. package/dist/index247.mjs +37 -2
  168. package/dist/index248.mjs +2 -33
  169. package/dist/index249.mjs +2 -65
  170. package/dist/index25.mjs +62 -42
  171. package/dist/index250.mjs +243 -24
  172. package/dist/index251.mjs +2 -2
  173. package/dist/index252.mjs +33 -2
  174. package/dist/index253.mjs +65 -2
  175. package/dist/index254.mjs +25 -2
  176. package/dist/index255.mjs +2 -2
  177. package/dist/index256.mjs +2 -2
  178. package/dist/index257.mjs +2 -2
  179. package/dist/index259.mjs +2 -2
  180. package/dist/index26.mjs +22 -40
  181. package/dist/index260.mjs +2 -2
  182. package/dist/index261.mjs +2 -4
  183. package/dist/index262.mjs +2 -2
  184. package/dist/index263.mjs +4 -2
  185. package/dist/index264.mjs +2 -3
  186. package/dist/index265.mjs +2 -2
  187. package/dist/index266.mjs +2 -2
  188. package/dist/index267.mjs +2 -17
  189. package/dist/index268.mjs +2 -13
  190. package/dist/index269.mjs +18 -6
  191. package/dist/index27.mjs +107 -87
  192. package/dist/index270.mjs +45 -28
  193. package/dist/index271.mjs +2 -2
  194. package/dist/index272.mjs +2 -2
  195. package/dist/index273.mjs +2 -18
  196. package/dist/index274.mjs +2 -47
  197. package/dist/index275.mjs +91 -2
  198. package/dist/index276.mjs +2 -2
  199. package/dist/index277.mjs +3 -2
  200. package/dist/index278.mjs +2 -2
  201. package/dist/index279.mjs +2 -91
  202. package/dist/index28.mjs +42 -32
  203. package/dist/index280.mjs +17 -2
  204. package/dist/index281.mjs +13 -2
  205. package/dist/index282.mjs +6 -2
  206. package/dist/index283.mjs +30 -2
  207. package/dist/index284.mjs +5 -0
  208. package/dist/index285.mjs +5 -0
  209. package/dist/index286.mjs +5 -0
  210. package/dist/index29.mjs +42 -9
  211. package/dist/index3.mjs +4 -4
  212. package/dist/index30.mjs +84 -17
  213. package/dist/index31.mjs +29 -35
  214. package/dist/index32.mjs +8 -39
  215. package/dist/index33.mjs +21 -125
  216. package/dist/index34.mjs +35 -46
  217. package/dist/index35.mjs +38 -9
  218. package/dist/index36.mjs +121 -6
  219. package/dist/index37.mjs +49 -123
  220. package/dist/index38.mjs +11 -28
  221. package/dist/index39.mjs +11 -91
  222. package/dist/index4.mjs +1 -1
  223. package/dist/index40.mjs +121 -123
  224. package/dist/index41.mjs +28 -11
  225. package/dist/index42.mjs +91 -35
  226. package/dist/index43.mjs +116 -37
  227. package/dist/index44.mjs +9 -9
  228. package/dist/index45.mjs +33 -121
  229. package/dist/index46.mjs +42 -385
  230. package/dist/index47.mjs +10 -24
  231. package/dist/index48.mjs +122 -31
  232. package/dist/index49.mjs +388 -27
  233. package/dist/index5.mjs +1 -1
  234. package/dist/index50.mjs +24 -6
  235. package/dist/index51.mjs +30 -1431
  236. package/dist/index52.mjs +26 -68
  237. package/dist/index53.mjs +7 -2
  238. package/dist/index54.mjs +1425 -52
  239. package/dist/index55.mjs +69 -50
  240. package/dist/index56.mjs +2 -33
  241. package/dist/index57.mjs +59 -14
  242. package/dist/index58.mjs +47 -2259
  243. package/dist/index59.mjs +33 -36
  244. package/dist/index6.mjs +1 -1
  245. package/dist/index60.mjs +14 -43
  246. package/dist/index61.mjs +2256 -96
  247. package/dist/index62.mjs +36 -81
  248. package/dist/index63.mjs +43 -18
  249. package/dist/index64.mjs +102 -128
  250. package/dist/index65.mjs +45 -89
  251. package/dist/index66.mjs +15 -75
  252. package/dist/index67.mjs +84 -130
  253. package/dist/index68.mjs +84 -66
  254. package/dist/index69.mjs +69 -26
  255. package/dist/index7.mjs +6 -6
  256. package/dist/index70.mjs +138 -58
  257. package/dist/index71.mjs +82 -56
  258. package/dist/index72.mjs +28 -55
  259. package/dist/index73.mjs +79 -46
  260. package/dist/index74.mjs +58 -112
  261. package/dist/index75.mjs +47 -54
  262. package/dist/index76.mjs +60 -22
  263. package/dist/index77.mjs +135 -2
  264. package/dist/index78.mjs +68 -21
  265. package/dist/index79.mjs +21 -150
  266. package/dist/index8.mjs +6 -6
  267. package/dist/index80.mjs +2 -5
  268. package/dist/index81.mjs +149 -71
  269. package/dist/index82.mjs +23 -15
  270. package/dist/index83.mjs +68 -56
  271. package/dist/index84.mjs +14 -234
  272. package/dist/index85.mjs +62 -5
  273. package/dist/index86.mjs +4 -133
  274. package/dist/index87.mjs +2 -68
  275. package/dist/index88.mjs +5 -86
  276. package/dist/index89.mjs +1133 -28
  277. package/dist/index9.mjs +4 -4
  278. package/dist/index90.mjs +19 -8
  279. package/dist/index91.mjs +51 -71
  280. package/dist/index92.mjs +32 -3
  281. package/dist/index93.mjs +2 -2
  282. package/dist/index94.mjs +227 -75
  283. package/dist/index95.mjs +5 -53
  284. package/dist/index96.mjs +133 -5
  285. package/dist/index97.mjs +67 -4
  286. package/dist/index98.mjs +79 -171
  287. package/dist/index99.mjs +27 -51
  288. package/dist/styles.css +1 -1
  289. package/package.json +1 -1
  290. package/src/components/AssistantDrawer.stories.tsx +140 -0
  291. package/src/components/AssistantDrawer.tsx +430 -0
  292. package/src/components/ProductAssistantChips.stories.tsx +42 -0
  293. package/src/components/ProductAssistantChips.tsx +64 -0
  294. package/src/components/SearchAssistantTrigger.stories.tsx +35 -0
  295. package/src/components/SearchAssistantTrigger.tsx +41 -0
  296. package/src/index.ts +10 -0
package/dist/index206.mjs CHANGED
@@ -1,26 +1,5 @@
1
1
  'use client';
2
- import { __exports as t } from "./index259.mjs";
3
- import { __require as a } from "./index202.mjs";
4
- var n;
5
- function h() {
6
- return n ? t : (n = 1, function(i) {
7
- Object.defineProperty(i, "__esModule", {
8
- value: !0
9
- }), Object.defineProperty(i, "removePathPrefix", {
10
- enumerable: !0,
11
- get: function() {
12
- return f;
13
- }
14
- });
15
- const o = a();
16
- function f(e, u) {
17
- if (!(0, o.pathHasPrefix)(e, u))
18
- return e;
19
- const r = e.slice(u.length);
20
- return r.startsWith("/") ? r : "/" + r;
21
- }
22
- }(t), t);
23
- }
2
+ var e = {};
24
3
  export {
25
- h as __require
4
+ e as __exports
26
5
  };
package/dist/index207.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  'use client';
2
- var a = {};
2
+ var e = {};
3
3
  export {
4
- a as __exports
4
+ e as __exports
5
5
  };
package/dist/index208.mjs CHANGED
@@ -1,26 +1,26 @@
1
1
  'use client';
2
- import { __exports as r } from "./index258.mjs";
3
- import { __require as s } from "./index127.mjs";
4
- var a;
5
- function _() {
6
- return a ? r : (a = 1, function(t) {
7
- Object.defineProperty(t, "__esModule", {
2
+ import { __exports as t } from "./index261.mjs";
3
+ import { __require as a } from "./index204.mjs";
4
+ var n;
5
+ function h() {
6
+ return n ? t : (n = 1, function(i) {
7
+ Object.defineProperty(i, "__esModule", {
8
8
  value: !0
9
- }), Object.defineProperty(t, "addPathSuffix", {
9
+ }), Object.defineProperty(i, "removePathPrefix", {
10
10
  enumerable: !0,
11
11
  get: function() {
12
- return n;
12
+ return f;
13
13
  }
14
14
  });
15
- const i = s();
16
- function n(e, u) {
17
- if (!e.startsWith("/") || !u)
15
+ const o = a();
16
+ function f(e, u) {
17
+ if (!(0, o.pathHasPrefix)(e, u))
18
18
  return e;
19
- const { pathname: f, query: d, hash: o } = (0, i.parsePath)(e);
20
- return "" + f + u + d + o;
19
+ const r = e.slice(u.length);
20
+ return r.startsWith("/") ? r : "/" + r;
21
21
  }
22
- }(r), r);
22
+ }(t), t);
23
23
  }
24
24
  export {
25
- _ as __require
25
+ h as __require
26
26
  };
package/dist/index21.mjs CHANGED
@@ -1,63 +1,268 @@
1
1
  'use client';
2
- import { jsxs as c, jsx as u } from "react/jsx-runtime";
3
- import { Root as v } from "./index55.mjs";
4
- import { cva as g } from "./index56.mjs";
5
- import { Loader2 as l } from "lucide-react";
6
- import { cn as p } from "./index27.mjs";
7
- const b = g(
8
- "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
9
- {
10
- variants: {
11
- variant: {
12
- default: "bg-primary text-primary-foreground hover:bg-primary/90",
13
- destructive: "bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",
14
- outline: "border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",
15
- secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80",
16
- ghost: "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",
17
- link: "text-primary underline-offset-4 hover:underline"
18
- },
19
- size: {
20
- default: "h-9 px-4 py-2 has-[>svg]:px-3",
21
- sm: "h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",
22
- lg: "h-10 rounded-md px-6 has-[>svg]:px-4",
23
- icon: "size-9",
24
- "icon-sm": "size-8",
25
- "icon-lg": "size-10"
2
+ import { jsxs as l, jsx as r } from "react/jsx-runtime";
3
+ import { useState as m, useRef as p, useCallback as G, useEffect as N } from "react";
4
+ import { createPortal as Q } from "react-dom";
5
+ import { Sparkles as ee, X as te, Loader2 as re, Send as se } from "lucide-react";
6
+ import { cn as k, formatCurrency as ne } from "./index30.mjs";
7
+ import { useHideBodyOverflow as ae } from "./index53.mjs";
8
+ function ue({
9
+ isOpen: c,
10
+ onClose: y,
11
+ apiUrl: I,
12
+ brandSlug: D,
13
+ productSlug: J,
14
+ initialQuestion: x,
15
+ assistantName: L = "AI Assistant",
16
+ onProductClick: S,
17
+ className: K,
18
+ disablePortal: Y = !1
19
+ }) {
20
+ const [u, d] = m([]), [w, E] = m(""), [f, W] = m(!1), [$, h] = m(null), [q, C] = m(!1), [Z, F] = m(!1), M = p(null), z = p(null), A = p(!1), B = p([]);
21
+ B.current = u, ae(c);
22
+ const H = G((e, a) => {
23
+ if (e === "token")
24
+ d((s) => {
25
+ const o = [...s], t = o[o.length - 1];
26
+ return (t == null ? void 0 : t.role) === "assistant" && (o[o.length - 1] = { ...t, content: t.content + a }), o;
27
+ });
28
+ else if (e === "done")
29
+ try {
30
+ const s = JSON.parse(a);
31
+ d((o) => {
32
+ var i;
33
+ const t = [...o], n = t[t.length - 1];
34
+ return (n == null ? void 0 : n.role) === "assistant" && (t[t.length - 1] = {
35
+ ...n,
36
+ content: s.answer || n.content,
37
+ products: ((i = s.products) == null ? void 0 : i.length) > 0 ? s.products : void 0
38
+ }), t;
39
+ });
40
+ } catch {
41
+ }
42
+ else if (e === "error")
43
+ try {
44
+ const s = JSON.parse(a);
45
+ h(s.message || "An error occurred");
46
+ } catch {
47
+ h("An error occurred");
48
+ }
49
+ }, []), v = p(), U = G(
50
+ async (e) => {
51
+ var o;
52
+ if (!e.trim()) return;
53
+ h(null);
54
+ const a = { role: "user", content: e }, s = B.current.map((t) => ({
55
+ role: t.role,
56
+ content: t.content
57
+ }));
58
+ d((t) => [...t, a]), E(""), W(!0), d((t) => [...t, { role: "assistant", content: "" }]);
59
+ try {
60
+ const t = await fetch(`${I}/v1/assistant/ask`, {
61
+ method: "POST",
62
+ headers: { "Content-Type": "application/json" },
63
+ body: JSON.stringify({
64
+ question: e,
65
+ brandSlug: D,
66
+ productSlug: J,
67
+ history: s
68
+ })
69
+ });
70
+ if (!t.ok) {
71
+ const g = await t.json().catch(() => ({}));
72
+ throw new Error(
73
+ ((o = g == null ? void 0 : g.error) == null ? void 0 : o.message) || `Request failed (${t.status})`
74
+ );
75
+ }
76
+ if (!t.body) throw new Error("No response body");
77
+ const n = t.body.getReader(), i = new TextDecoder();
78
+ let j = "", R = "";
79
+ for (; ; ) {
80
+ const { done: g, value: P } = await n.read();
81
+ if (g) break;
82
+ j += i.decode(P, { stream: !0 });
83
+ const X = j.split(`
84
+ `);
85
+ j = X.pop() || "";
86
+ for (const b of X) {
87
+ if (b.trim() === "") {
88
+ R = "";
89
+ continue;
90
+ }
91
+ if (b.trimStart().startsWith("event:"))
92
+ R = b.trimStart().slice(6).trim();
93
+ else if (b.trimStart().startsWith("data:")) {
94
+ const T = b.trimStart().slice(5), O = T.startsWith(" ") ? T.slice(1) : T;
95
+ H(R || "token", O);
96
+ }
97
+ }
98
+ }
99
+ } catch (t) {
100
+ h(t.message || "Something went wrong"), d((n) => {
101
+ const i = n[n.length - 1];
102
+ return (i == null ? void 0 : i.role) === "assistant" && !i.content ? n.slice(0, -1) : n;
103
+ });
104
+ } finally {
105
+ W(!1);
26
106
  }
27
107
  },
28
- defaultVariants: {
29
- variant: "default",
30
- size: "default"
108
+ [I, D, J, H]
109
+ );
110
+ v.current = U, N(() => {
111
+ if (c)
112
+ F(!0), requestAnimationFrame(() => {
113
+ requestAnimationFrame(() => {
114
+ C(!0);
115
+ });
116
+ });
117
+ else {
118
+ C(!1);
119
+ const e = setTimeout(() => {
120
+ F(!1), d([]), E(""), h(null), A.current = !1;
121
+ }, 300);
122
+ return () => clearTimeout(e);
31
123
  }
32
- }
33
- );
34
- function z({
35
- className: r,
36
- variant: t,
37
- size: i,
38
- asChild: n = !1,
39
- loading: e = !1,
40
- children: o,
41
- disabled: s,
42
- type: a,
43
- ...d
44
- }) {
45
- return /* @__PURE__ */ c(
46
- n ? v : "button",
124
+ }, [c]), N(() => {
125
+ c && x && !A.current && (A.current = !0, x.trim() ? setTimeout(() => {
126
+ var e;
127
+ return (e = v.current) == null ? void 0 : e.call(v, x);
128
+ }, 100) : setTimeout(() => {
129
+ var e;
130
+ return (e = z.current) == null ? void 0 : e.focus();
131
+ }, 350));
132
+ }, [c, x]), N(() => {
133
+ var e;
134
+ (e = M.current) == null || e.scrollIntoView({ behavior: "smooth" });
135
+ }, [u]), N(() => {
136
+ const e = (a) => {
137
+ a.key === "Escape" && c && y();
138
+ };
139
+ if (c)
140
+ return document.addEventListener("keydown", e), () => document.removeEventListener("keydown", e);
141
+ }, [c, y]);
142
+ const _ = (e) => {
143
+ e.preventDefault(), w.trim() && U(w.trim());
144
+ };
145
+ if (!Z) return null;
146
+ const V = /* @__PURE__ */ l(
147
+ "div",
47
148
  {
48
- "data-slot": "button",
49
- className: p(b({ variant: t, size: i, className: r })),
50
- disabled: s || e,
51
- type: a ?? "button",
52
- ...d,
149
+ className: k(
150
+ "fixed inset-0 z-50 transition-opacity duration-300",
151
+ q ? "opacity-100" : "opacity-0"
152
+ ),
53
153
  children: [
54
- e && /* @__PURE__ */ u(l, { className: "size-4 animate-spin" }),
55
- o
154
+ /* @__PURE__ */ r(
155
+ "div",
156
+ {
157
+ className: "absolute inset-0 bg-black/40 backdrop-blur-sm",
158
+ onClick: y
159
+ }
160
+ ),
161
+ /* @__PURE__ */ l(
162
+ "div",
163
+ {
164
+ className: k(
165
+ "absolute bg-white flex flex-col transition-transform duration-300 ease-out",
166
+ // Mobile: bottom sheet
167
+ "inset-x-0 bottom-0 top-[10vh] rounded-t-2xl",
168
+ // Desktop: right side drawer
169
+ "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",
170
+ // Animation
171
+ q ? "translate-y-0 sm:translate-x-0" : "translate-y-full sm:translate-y-0 sm:translate-x-full",
172
+ K
173
+ ),
174
+ children: [
175
+ /* @__PURE__ */ l("div", { className: "flex items-center justify-between border-b border-gray-200 px-4 py-3 flex-shrink-0", children: [
176
+ /* @__PURE__ */ l("div", { className: "flex items-center gap-2", children: [
177
+ /* @__PURE__ */ r(ee, { className: "h-5 w-5 text-orange-500" }),
178
+ /* @__PURE__ */ r("span", { className: "font-semibold text-gray-900", children: L }),
179
+ /* @__PURE__ */ r("span", { className: "text-xs text-gray-400 bg-gray-100 rounded px-1.5 py-0.5", children: "beta" })
180
+ ] }),
181
+ /* @__PURE__ */ r(
182
+ "button",
183
+ {
184
+ type: "button",
185
+ onClick: y,
186
+ className: "p-2 text-gray-400 hover:text-gray-600 hover:bg-gray-100 rounded-lg transition-colors",
187
+ "aria-label": "Close",
188
+ children: /* @__PURE__ */ r(te, { className: "h-5 w-5" })
189
+ }
190
+ )
191
+ ] }),
192
+ /* @__PURE__ */ l("div", { className: "flex-1 overflow-y-auto p-4 space-y-4 min-h-0", children: [
193
+ u.length === 0 && !f && /* @__PURE__ */ r("div", { className: "text-center text-gray-400 text-sm py-8", children: "Ask me anything about our products!" }),
194
+ 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: [
195
+ /* @__PURE__ */ l("div", { className: "text-sm text-gray-800 leading-relaxed whitespace-pre-wrap", children: [
196
+ e.content,
197
+ 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" })
198
+ ] }),
199
+ e.products && e.products.length > 0 && /* @__PURE__ */ r("div", { className: "space-y-2", children: e.products.map((s) => /* @__PURE__ */ l(
200
+ "button",
201
+ {
202
+ type: "button",
203
+ onClick: () => S == null ? void 0 : S(s.slug),
204
+ className: "flex items-center gap-3 w-full rounded-xl border border-gray-200 p-2 hover:bg-gray-50 transition-colors text-left",
205
+ children: [
206
+ s.thumbnailUrl ? /* @__PURE__ */ r(
207
+ "img",
208
+ {
209
+ src: s.thumbnailUrl,
210
+ alt: s.name,
211
+ className: "h-16 w-16 rounded-lg object-cover flex-shrink-0"
212
+ }
213
+ ) : /* @__PURE__ */ r("div", { className: "h-16 w-16 rounded-lg bg-gray-100 flex-shrink-0" }),
214
+ /* @__PURE__ */ l("div", { className: "min-w-0", children: [
215
+ /* @__PURE__ */ r("p", { className: "text-sm font-medium text-gray-900 line-clamp-2", children: s.name }),
216
+ /* @__PURE__ */ r("p", { className: "text-sm font-semibold text-blue-600", children: ne(s.price) })
217
+ ] })
218
+ ]
219
+ },
220
+ s.slug
221
+ )) })
222
+ ] }) }, a)),
223
+ $ && /* @__PURE__ */ r("div", { className: "rounded-lg bg-red-50 border border-red-200 p-3 text-sm text-red-700", children: $ }),
224
+ /* @__PURE__ */ r("div", { ref: M })
225
+ ] }),
226
+ /* @__PURE__ */ r("div", { className: "border-t border-gray-200 p-3 flex-shrink-0", children: /* @__PURE__ */ l("form", { onSubmit: _, className: "flex items-center gap-2", children: [
227
+ /* @__PURE__ */ r(
228
+ "input",
229
+ {
230
+ ref: z,
231
+ type: "text",
232
+ value: w,
233
+ onChange: (e) => E(e.target.value),
234
+ placeholder: `Ask ${L} a question`,
235
+ disabled: f,
236
+ className: k(
237
+ "flex-1 rounded-full border border-gray-300 px-4 py-2.5 text-sm",
238
+ "focus:border-blue-400 focus:outline-none focus:ring-2 focus:ring-blue-400/30",
239
+ "disabled:opacity-50"
240
+ )
241
+ }
242
+ ),
243
+ /* @__PURE__ */ r(
244
+ "button",
245
+ {
246
+ type: "submit",
247
+ disabled: !w.trim() || f,
248
+ className: k(
249
+ "flex h-10 w-10 items-center justify-center rounded-full",
250
+ "bg-gray-800 text-white",
251
+ "hover:bg-gray-700 transition-colors",
252
+ "disabled:opacity-40 disabled:cursor-not-allowed"
253
+ ),
254
+ children: f ? /* @__PURE__ */ r(re, { className: "h-4 w-4 animate-spin" }) : /* @__PURE__ */ r(se, { className: "h-4 w-4" })
255
+ }
256
+ )
257
+ ] }) })
258
+ ]
259
+ }
260
+ )
56
261
  ]
57
262
  }
58
263
  );
264
+ return Y ? V : Q(V, document.body);
59
265
  }
60
266
  export {
61
- z as Button,
62
- b as buttonVariants
267
+ ue as AssistantDrawer
63
268
  };
package/dist/index210.mjs CHANGED
@@ -1,5 +1,26 @@
1
1
  'use client';
2
- var r = {};
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
+ }
3
24
  export {
4
- r as __exports
25
+ _ as __require
5
26
  };
package/dist/index211.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  'use client';
2
- var o = {};
2
+ var a = {};
3
3
  export {
4
- o as __exports
4
+ a as __exports
5
5
  };
package/dist/index212.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/index213.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/index215.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  'use client';
2
- var s = {};
2
+ var e = {};
3
3
  export {
4
- s as __exports
4
+ e as __exports
5
5
  };
package/dist/index217.mjs CHANGED
@@ -1,130 +1,5 @@
1
1
  'use client';
2
- import { __module as b } from "./index260.mjs";
3
- import S from "./index261.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 s = {};
128
3
  export {
129
- $ as __require
4
+ s as __exports
130
5
  };
package/dist/index218.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  'use client';
2
- var e = { exports: {} };
2
+ var o = {};
3
3
  export {
4
- e as __module
4
+ o as __exports
5
5
  };