@snacky/ui 0.9.1 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -92,141 +92,6 @@ var IconButton = forwardRef2(function IconButton2({ variant = "primary", size =
92
92
 
93
93
  // src/components/IconButton/UploadButton.tsx
94
94
  import { forwardRef as forwardRef3 } from "react";
95
- import { jsx as jsx3 } from "react/jsx-runtime";
96
- var UploadButton = forwardRef3(function UploadButton2({ icon: icon3, ariaLabel = "Upload image", className, ...rest }, ref) {
97
- return /* @__PURE__ */ jsx3("button", { ref, type: "button", "aria-label": ariaLabel, className: cx("snacky-upload", className), ...rest, children: icon3 });
98
- });
99
-
100
- // src/components/Input/TextField.tsx
101
- import { forwardRef as forwardRef4, useId } from "react";
102
- import { jsx as jsx4, jsxs as jsxs2 } from "react/jsx-runtime";
103
- var TextField = forwardRef4(function TextField2({
104
- value,
105
- onChange,
106
- label,
107
- leadingIcon,
108
- trailingIcon,
109
- trailingIconRotated = false,
110
- error,
111
- disabled,
112
- className,
113
- id,
114
- ...rest
115
- }, ref) {
116
- const autoId = useId();
117
- const fieldId = id ?? autoId;
118
- const errorMessage = typeof error === "string" ? error : void 0;
119
- return /* @__PURE__ */ jsxs2("div", { className, children: [
120
- label && /* @__PURE__ */ jsx4("label", { className: "snacky-field-label", htmlFor: fieldId, children: label }),
121
- /* @__PURE__ */ jsxs2(
122
- "div",
123
- {
124
- className: cx("snacky-field", !!error && "snacky-field--error", disabled && "snacky-field--disabled"),
125
- children: [
126
- leadingIcon && /* @__PURE__ */ jsx4("span", { className: "snacky-field__icon", children: leadingIcon }),
127
- /* @__PURE__ */ jsx4(
128
- "input",
129
- {
130
- ref,
131
- id: fieldId,
132
- className: "snacky-field__input",
133
- value,
134
- onChange: (e) => onChange(e.target.value),
135
- disabled,
136
- ...rest
137
- }
138
- ),
139
- trailingIcon && /* @__PURE__ */ jsx4(
140
- "span",
141
- {
142
- className: "snacky-field__icon",
143
- style: trailingIconRotated ? { transform: "rotate(180deg)" } : void 0,
144
- children: trailingIcon
145
- }
146
- )
147
- ]
148
- }
149
- ),
150
- errorMessage && /* @__PURE__ */ jsx4("span", { className: "snacky-field-error", children: errorMessage })
151
- ] });
152
- });
153
-
154
- // src/components/Input/SearchField.tsx
155
- import { forwardRef as forwardRef5 } from "react";
156
- import { jsx as jsx5, jsxs as jsxs3 } from "react/jsx-runtime";
157
- var SearchField = forwardRef5(function SearchField2({ value, onChange, searchIcon, onClear, className, placeholder = "Search products...", ...rest }, ref) {
158
- return /* @__PURE__ */ jsxs3("div", { className: cx("snacky-search", className), children: [
159
- searchIcon && /* @__PURE__ */ jsx5("span", { className: "snacky-search__icon", children: searchIcon }),
160
- /* @__PURE__ */ jsx5(
161
- "input",
162
- {
163
- ref,
164
- className: "snacky-search__input",
165
- value,
166
- placeholder,
167
- onChange: (e) => onChange(e.target.value),
168
- ...rest
169
- }
170
- ),
171
- value && onClear && /* @__PURE__ */ jsx5("button", { type: "button", className: "snacky-search__clear", onClick: onClear, "aria-label": "Clear search", children: "\u2715" })
172
- ] });
173
- });
174
-
175
- // src/components/Input/OtpField.tsx
176
- import { useRef } from "react";
177
- import { jsx as jsx6 } from "react/jsx-runtime";
178
- function OtpField({ value, onChange, length = 6, disabled }) {
179
- const cellRefs = useRef([]);
180
- const digits = Array.from({ length }, (_, i) => value[i] ?? "");
181
- function setDigit(index, digit) {
182
- const next = digits.slice();
183
- next[index] = digit;
184
- onChange(next.join(""));
185
- if (digit && index < length - 1) cellRefs.current[index + 1]?.focus();
186
- }
187
- function handleKeyDown(index, e) {
188
- if (e.key === "Backspace" && !digits[index] && index > 0) {
189
- cellRefs.current[index - 1]?.focus();
190
- }
191
- }
192
- return /* @__PURE__ */ jsx6("div", { className: "snacky-otp", children: digits.map((digit, i) => /* @__PURE__ */ jsx6(
193
- "input",
194
- {
195
- ref: (el) => {
196
- cellRefs.current[i] = el;
197
- },
198
- className: "snacky-otp__cell",
199
- inputMode: "numeric",
200
- maxLength: 1,
201
- value: digit,
202
- disabled,
203
- onChange: (e) => setDigit(i, e.target.value.replace(/\D/g, "").slice(-1)),
204
- onKeyDown: (e) => handleKeyDown(i, e),
205
- "aria-label": `Digit ${i + 1}`
206
- },
207
- i
208
- )) });
209
- }
210
-
211
- // src/components/Input/CopyField.tsx
212
- import { useState } from "react";
213
- import { jsx as jsx7, jsxs as jsxs4 } from "react/jsx-runtime";
214
- function CopyField({ value, onCopy, className }) {
215
- const [copied, setCopied] = useState(false);
216
- async function handleCopy() {
217
- try {
218
- await navigator.clipboard.writeText(value);
219
- } catch {
220
- }
221
- onCopy?.(value);
222
- setCopied(true);
223
- setTimeout(() => setCopied(false), 2e3);
224
- }
225
- return /* @__PURE__ */ jsxs4("div", { className: cx("snacky-copy", className), children: [
226
- /* @__PURE__ */ jsx7("span", { className: "snacky-copy__value", children: value }),
227
- /* @__PURE__ */ jsx7("button", { type: "button", className: cx("snacky-copy__action", copied && "snacky-copy__action--copied"), onClick: handleCopy, children: copied ? "Copied" : "Copy" })
228
- ] });
229
- }
230
95
 
231
96
  // src/icons/outline.tsx
232
97
  var outline_exports = {};
@@ -274,10 +139,10 @@ __export(outline_exports, {
274
139
  truck: () => truck,
275
140
  unsent: () => unsent
276
141
  });
277
- import { jsx as jsx8 } from "react/jsx-runtime";
142
+ import { jsx as jsx3 } from "react/jsx-runtime";
278
143
  function icon(viewBox, paths) {
279
144
  return function SnackyIcon({ width = viewBox, height = viewBox, color = "currentColor", ...rest }) {
280
- return /* @__PURE__ */ jsx8("svg", { width, height, viewBox: `0 0 ${viewBox} ${viewBox}`, fill: "none", xmlns: "http://www.w3.org/2000/svg", ...rest, children: paths.map(([d, fillRule], i) => /* @__PURE__ */ jsx8(
145
+ return /* @__PURE__ */ jsx3("svg", { width, height, viewBox: `0 0 ${viewBox} ${viewBox}`, fill: "none", xmlns: "http://www.w3.org/2000/svg", ...rest, children: paths.map(([d, fillRule], i) => /* @__PURE__ */ jsx3(
281
146
  "path",
282
147
  {
283
148
  d,
@@ -451,6 +316,143 @@ var unsent = icon(24, [
451
316
  ["M11.9999 7C11.7788 7 11.5669 7.0878 11.4106 7.24408C11.2543 7.40036 11.1665 7.61232 11.1665 7.83333V11.4375L8.35735 13.1975C8.16949 13.3148 8.03594 13.502 7.98609 13.7179C7.93624 13.9337 7.97416 14.1605 8.09152 14.3483C8.20888 14.5362 8.39606 14.6697 8.61188 14.7196C8.8277 14.7694 9.05449 14.7315 9.24235 14.6142L12.4424 12.6142C12.5633 12.5384 12.6627 12.4329 12.7311 12.3077C12.7996 12.1825 12.8347 12.0418 12.8332 11.8992V7.83333C12.8332 7.61232 12.7454 7.40036 12.5891 7.24408C12.4328 7.0878 12.2209 7 11.9999 7Z", "nonzero"]
452
317
  ]);
453
318
 
319
+ // src/components/IconButton/UploadButton.tsx
320
+ import { jsx as jsx4 } from "react/jsx-runtime";
321
+ var UploadButton = forwardRef3(function UploadButton2({ icon: icon3 = /* @__PURE__ */ jsx4(camera, {}), ariaLabel = "Upload image", className, ...rest }, ref) {
322
+ return /* @__PURE__ */ jsx4("button", { ref, type: "button", "aria-label": ariaLabel, className: cx("snacky-upload", className), ...rest, children: icon3 });
323
+ });
324
+
325
+ // src/components/Input/TextField.tsx
326
+ import { forwardRef as forwardRef4, useId } from "react";
327
+ import { jsx as jsx5, jsxs as jsxs2 } from "react/jsx-runtime";
328
+ var TextField = forwardRef4(function TextField2({
329
+ value,
330
+ onChange,
331
+ label,
332
+ leadingIcon,
333
+ trailingIcon,
334
+ trailingIconRotated = false,
335
+ error,
336
+ disabled,
337
+ className,
338
+ id,
339
+ ...rest
340
+ }, ref) {
341
+ const autoId = useId();
342
+ const fieldId = id ?? autoId;
343
+ const errorMessage = typeof error === "string" ? error : void 0;
344
+ return /* @__PURE__ */ jsxs2("div", { className, children: [
345
+ label && /* @__PURE__ */ jsx5("label", { className: "snacky-field-label", htmlFor: fieldId, children: label }),
346
+ /* @__PURE__ */ jsxs2(
347
+ "div",
348
+ {
349
+ className: cx("snacky-field", !!error && "snacky-field--error", disabled && "snacky-field--disabled"),
350
+ children: [
351
+ leadingIcon && /* @__PURE__ */ jsx5("span", { className: "snacky-field__icon", children: leadingIcon }),
352
+ /* @__PURE__ */ jsx5(
353
+ "input",
354
+ {
355
+ ref,
356
+ id: fieldId,
357
+ className: "snacky-field__input",
358
+ value,
359
+ onChange: (e) => onChange(e.target.value),
360
+ disabled,
361
+ ...rest
362
+ }
363
+ ),
364
+ trailingIcon && /* @__PURE__ */ jsx5(
365
+ "span",
366
+ {
367
+ className: "snacky-field__icon",
368
+ style: trailingIconRotated ? { transform: "rotate(180deg)" } : void 0,
369
+ children: trailingIcon
370
+ }
371
+ )
372
+ ]
373
+ }
374
+ ),
375
+ errorMessage && /* @__PURE__ */ jsx5("span", { className: "snacky-field-error", children: errorMessage })
376
+ ] });
377
+ });
378
+
379
+ // src/components/Input/SearchField.tsx
380
+ import { forwardRef as forwardRef5 } from "react";
381
+ import { jsx as jsx6, jsxs as jsxs3 } from "react/jsx-runtime";
382
+ var SearchField = forwardRef5(function SearchField2({ value, onChange, searchIcon, onClear, className, placeholder = "Search products...", ...rest }, ref) {
383
+ return /* @__PURE__ */ jsxs3("div", { className: cx("snacky-search", className), children: [
384
+ searchIcon && /* @__PURE__ */ jsx6("span", { className: "snacky-search__icon", children: searchIcon }),
385
+ /* @__PURE__ */ jsx6(
386
+ "input",
387
+ {
388
+ ref,
389
+ className: "snacky-search__input",
390
+ value,
391
+ placeholder,
392
+ onChange: (e) => onChange(e.target.value),
393
+ ...rest
394
+ }
395
+ ),
396
+ value && onClear && /* @__PURE__ */ jsx6("button", { type: "button", className: "snacky-search__clear", onClick: onClear, "aria-label": "Clear search", children: "\u2715" })
397
+ ] });
398
+ });
399
+
400
+ // src/components/Input/OtpField.tsx
401
+ import { useRef } from "react";
402
+ import { jsx as jsx7 } from "react/jsx-runtime";
403
+ function OtpField({ value, onChange, length = 6, disabled }) {
404
+ const cellRefs = useRef([]);
405
+ const digits = Array.from({ length }, (_, i) => value[i] ?? "");
406
+ function setDigit(index, digit) {
407
+ const next = digits.slice();
408
+ next[index] = digit;
409
+ onChange(next.join(""));
410
+ if (digit && index < length - 1) cellRefs.current[index + 1]?.focus();
411
+ }
412
+ function handleKeyDown(index, e) {
413
+ if (e.key === "Backspace" && !digits[index] && index > 0) {
414
+ cellRefs.current[index - 1]?.focus();
415
+ }
416
+ }
417
+ return /* @__PURE__ */ jsx7("div", { className: "snacky-otp", children: digits.map((digit, i) => /* @__PURE__ */ jsx7(
418
+ "input",
419
+ {
420
+ ref: (el) => {
421
+ cellRefs.current[i] = el;
422
+ },
423
+ className: "snacky-otp__cell",
424
+ inputMode: "numeric",
425
+ maxLength: 1,
426
+ value: digit,
427
+ disabled,
428
+ onChange: (e) => setDigit(i, e.target.value.replace(/\D/g, "").slice(-1)),
429
+ onKeyDown: (e) => handleKeyDown(i, e),
430
+ "aria-label": `Digit ${i + 1}`
431
+ },
432
+ i
433
+ )) });
434
+ }
435
+
436
+ // src/components/Input/CopyField.tsx
437
+ import { useState } from "react";
438
+ import { jsx as jsx8, jsxs as jsxs4 } from "react/jsx-runtime";
439
+ function CopyField({ value, onCopy, className }) {
440
+ const [copied, setCopied] = useState(false);
441
+ async function handleCopy() {
442
+ try {
443
+ await navigator.clipboard.writeText(value);
444
+ } catch {
445
+ }
446
+ onCopy?.(value);
447
+ setCopied(true);
448
+ setTimeout(() => setCopied(false), 2e3);
449
+ }
450
+ return /* @__PURE__ */ jsxs4("div", { className: cx("snacky-copy", className), children: [
451
+ /* @__PURE__ */ jsx8("span", { className: "snacky-copy__value", children: value }),
452
+ /* @__PURE__ */ jsx8("button", { type: "button", className: cx("snacky-copy__action", copied && "snacky-copy__action--copied"), onClick: handleCopy, children: copied ? "Copied" : "Copy" })
453
+ ] });
454
+ }
455
+
454
456
  // src/components/Input/ChatInput.tsx
455
457
  import { jsx as jsx9, jsxs as jsxs5 } from "react/jsx-runtime";
456
458
  function ChatInput({ value, onChange, onSend, sendIcon, className, placeholder = "Write your message here", ...rest }) {
@@ -641,6 +643,7 @@ function TabRow({ tabs, selected, onSelect, className }) {
641
643
  var solid_exports = {};
642
644
  __export(solid_exports, {
643
645
  account: () => account2,
646
+ angleSmallRight: () => angleSmallRight,
644
647
  balance: () => balance2,
645
648
  bell: () => bell2,
646
649
  cart: () => cart2,
@@ -671,6 +674,9 @@ var account2 = icon2(20, [
671
674
  ["M10 10C12.7614 10 15 7.76142 15 5C15 2.23858 12.7614 0 10 0C7.23858 0 5 2.23858 5 5C5 7.76142 7.23858 10 10 10Z", "nonzero"],
672
675
  ["M10 11.6659C5.85977 11.6705 2.50461 15.0257 2.5 19.1659C2.5 19.6261 2.87309 19.9992 3.33332 19.9992H16.6666C17.1269 19.9992 17.5 19.6261 17.5 19.1659C17.4954 15.0257 14.1402 11.6705 10 11.6659Z", "nonzero"]
673
676
  ]);
677
+ var angleSmallRight = icon2(24, [
678
+ ["M15.75 9.525L11.164 4.939C10.8827 4.65774 10.5011 4.49978 10.1032 4.49988C9.70534 4.49997 9.32381 4.65811 9.04255 4.9395C8.76129 5.2209 8.60333 5.6025 8.60342 6.00036C8.60352 6.39822 8.76166 6.77974 9.04305 7.061L13.629 11.646C13.6756 11.6925 13.7125 11.7476 13.7378 11.8084C13.763 11.8691 13.7759 11.9342 13.7759 12C13.7759 12.0658 13.763 12.1309 13.7378 12.1916C13.7125 12.2524 13.6756 12.3076 13.629 12.354L9.04305 16.939C8.76166 17.2203 8.60352 17.6018 8.60342 17.9997C8.60333 18.3975 8.76129 18.7791 9.04255 19.0605C9.32381 19.3419 9.70534 19.5 10.1032 19.5001C10.5011 19.5002 10.8827 19.3423 11.164 19.061L15.75 14.475C16.4053 13.818 16.7732 12.9279 16.7732 12C16.7732 11.0721 16.4053 10.182 15.75 9.525Z", "nonzero"]
679
+ ]);
674
680
  var balance2 = icon2(24, [
675
681
  ["M19 4.00031H5C3.67441 4.00189 2.40356 4.52919 1.46622 5.46653C0.528882 6.40386 0.00158786 7.67471 0 9.00031L0 15.0003C0.00158786 16.3259 0.528882 17.5967 1.46622 18.5341C2.40356 19.4714 3.67441 19.9987 5 20.0003H19C20.3256 19.9987 21.5964 19.4714 22.5338 18.5341C23.4711 17.5967 23.9984 16.3259 24 15.0003V9.00031C23.9984 7.67471 23.4711 6.40386 22.5338 5.46653C21.5964 4.52919 20.3256 4.00189 19 4.00031ZM4 17.0003C3.80222 17.0003 3.60888 16.9417 3.44443 16.8318C3.27998 16.7219 3.15181 16.5657 3.07612 16.383C3.00043 16.2003 2.98063 15.9992 3.01921 15.8052C3.0578 15.6112 3.15304 15.4331 3.29289 15.2932C3.43275 15.1533 3.61093 15.0581 3.80491 15.0195C3.99889 14.9809 4.19996 15.0007 4.38268 15.0764C4.56541 15.1521 4.72159 15.2803 4.83147 15.4447C4.94135 15.6092 5 15.8025 5 16.0003C5 16.2655 4.89464 16.5199 4.70711 16.7074C4.51957 16.8949 4.26522 17.0003 4 17.0003ZM4 9.00031C3.80222 9.00031 3.60888 8.94166 3.44443 8.83177C3.27998 8.72189 3.15181 8.56571 3.07612 8.38299C3.00043 8.20026 2.98063 7.9992 3.01921 7.80521C3.0578 7.61123 3.15304 7.43305 3.29289 7.2932C3.43275 7.15335 3.61093 7.0581 3.80491 7.01952C3.99889 6.98093 4.19996 7.00074 4.38268 7.07643C4.56541 7.15211 4.72159 7.28029 4.83147 7.44474C4.94135 7.60918 5 7.80252 5 8.00031C5 8.26552 4.89464 8.51988 4.70711 8.70741C4.51957 8.89495 4.26522 9.00031 4 9.00031ZM12 16.0003C11.2089 16.0003 10.4355 15.7657 9.77772 15.3262C9.11992 14.8867 8.60723 14.2619 8.30448 13.531C8.00173 12.8001 7.92252 11.9959 8.07686 11.2199C8.2312 10.444 8.61216 9.73129 9.17157 9.17188C9.73098 8.61247 10.4437 8.2315 11.2196 8.07716C11.9956 7.92282 12.7998 8.00204 13.5307 8.30479C14.2616 8.60754 14.8864 9.12023 15.3259 9.77802C15.7654 10.4358 16 11.2092 16 12.0003C16 13.0612 15.5786 14.0786 14.8284 14.8287C14.0783 15.5789 13.0609 16.0003 12 16.0003ZM20 17.0003C19.8022 17.0003 19.6089 16.9417 19.4444 16.8318C19.28 16.7219 19.1518 16.5657 19.0761 16.383C19.0004 16.2003 18.9806 15.9992 19.0192 15.8052C19.0578 15.6112 19.153 15.4331 19.2929 15.2932C19.4327 15.1533 19.6109 15.0581 19.8049 15.0195C19.9989 14.9809 20.2 15.0007 20.3827 15.0764C20.5654 15.1521 20.7216 15.2803 20.8315 15.4447C20.9414 15.6092 21 15.8025 21 16.0003C21 16.2655 20.8946 16.5199 20.7071 16.7074C20.5196 16.8949 20.2652 17.0003 20 17.0003ZM20 9.00031C19.8022 9.00031 19.6089 8.94166 19.4444 8.83177C19.28 8.72189 19.1518 8.56571 19.0761 8.38299C19.0004 8.20026 18.9806 7.9992 19.0192 7.80521C19.0578 7.61123 19.153 7.43305 19.2929 7.2932C19.4327 7.15335 19.6109 7.0581 19.8049 7.01952C19.9989 6.98093 20.2 7.00074 20.3827 7.07643C20.5654 7.15211 20.7216 7.28029 20.8315 7.44474C20.9414 7.60918 21 7.80252 21 8.00031C21 8.26552 20.8946 8.51988 20.7071 8.70741C20.5196 8.89495 20.2652 9.00031 20 9.00031ZM14 12.0003C14 12.3959 13.8827 12.7825 13.6629 13.1114C13.4432 13.4403 13.1308 13.6967 12.7654 13.8481C12.3999 13.9994 11.9978 14.039 11.6098 13.9619C11.2219 13.8847 10.8655 13.6942 10.5858 13.4145C10.3061 13.1348 10.1156 12.7784 10.0384 12.3905C9.96126 12.0025 10.0009 11.6004 10.1522 11.2349C10.3036 10.8695 10.56 10.5571 10.8889 10.3374C11.2178 10.1176 11.6044 10.0003 12 10.0003C12.5304 10.0003 13.0391 10.211 13.4142 10.5861C13.7893 10.9612 14 11.4699 14 12.0003Z", "nonzero"]
676
682
  ]);
@@ -770,43 +776,64 @@ function AlertBanner({ message, countdown, className }) {
770
776
  ] });
771
777
  }
772
778
 
779
+ // src/components/PageIndicator/PageIndicator.tsx
780
+ import { jsx as jsx21 } from "react/jsx-runtime";
781
+ function PageIndicator({ count, activeIndex, ariaLabel, className }) {
782
+ return /* @__PURE__ */ jsx21(
783
+ "div",
784
+ {
785
+ className: cx("snacky-page-indicator", className),
786
+ role: "status",
787
+ "aria-label": ariaLabel ?? `Page ${activeIndex + 1} of ${count}`,
788
+ children: Array.from({ length: count }, (_, i) => /* @__PURE__ */ jsx21(
789
+ "span",
790
+ {
791
+ "aria-hidden": "true",
792
+ className: cx("snacky-page-indicator__dot", i === activeIndex && "snacky-page-indicator__dot--active")
793
+ },
794
+ i
795
+ ))
796
+ }
797
+ );
798
+ }
799
+
773
800
  // src/components/Badge/Badge.tsx
774
- import { Fragment, jsx as jsx21, jsxs as jsxs14 } from "react/jsx-runtime";
801
+ import { Fragment, jsx as jsx22, jsxs as jsxs14 } from "react/jsx-runtime";
775
802
  function NotificationBadge({ count, max = 99, children, className }) {
776
- if (count <= 0) return /* @__PURE__ */ jsx21(Fragment, { children });
803
+ if (count <= 0) return /* @__PURE__ */ jsx22(Fragment, { children });
777
804
  return /* @__PURE__ */ jsxs14("span", { className: cx("snacky-badge-wrap", className), children: [
778
805
  children,
779
- /* @__PURE__ */ jsx21("span", { className: "snacky-badge-notification", children: count > max ? `${max}+` : count })
806
+ /* @__PURE__ */ jsx22("span", { className: "snacky-badge-notification", children: count > max ? `${max}+` : count })
780
807
  ] });
781
808
  }
782
809
  function DiscountTag({ label, className }) {
783
- return /* @__PURE__ */ jsx21("span", { className: cx("snacky-discount-tag", className), children: label });
810
+ return /* @__PURE__ */ jsx22("span", { className: cx("snacky-discount-tag", className), children: label });
784
811
  }
785
812
  function SoldOutBadge({ className }) {
786
- return /* @__PURE__ */ jsx21("span", { className: cx("snacky-soldout-badge", className), children: "Sold Out" });
813
+ return /* @__PURE__ */ jsx22("span", { className: cx("snacky-soldout-badge", className), children: "Sold Out" });
787
814
  }
788
815
  function InfoBadge({ label, icon: icon3, className }) {
789
816
  return /* @__PURE__ */ jsxs14("span", { className: cx("snacky-info-badge", className), children: [
790
- icon3 && /* @__PURE__ */ jsx21("span", { className: "snacky-info-badge__icon", children: icon3 }),
817
+ icon3 && /* @__PURE__ */ jsx22("span", { className: "snacky-info-badge__icon", children: icon3 }),
791
818
  label
792
819
  ] });
793
820
  }
794
821
  var VariantBadge = InfoBadge;
795
822
 
796
823
  // src/components/Callout/Callout.tsx
797
- import { jsx as jsx22, jsxs as jsxs15 } from "react/jsx-runtime";
824
+ import { jsx as jsx23, jsxs as jsxs15 } from "react/jsx-runtime";
798
825
  function Callout({ message, timestamp, variant, statusIcon, className }) {
799
826
  return /* @__PURE__ */ jsxs15("div", { className: cx("snacky-callout", `snacky-callout--${variant}`, className), children: [
800
- /* @__PURE__ */ jsx22("p", { className: "snacky-callout__message", children: message }),
827
+ /* @__PURE__ */ jsx23("p", { className: "snacky-callout__message", children: message }),
801
828
  /* @__PURE__ */ jsxs15("span", { className: "snacky-callout__meta", children: [
802
829
  timestamp,
803
- statusIcon && variant !== "received" && /* @__PURE__ */ jsx22("span", { className: "snacky-callout__meta-icon", children: statusIcon })
830
+ statusIcon && variant !== "received" && /* @__PURE__ */ jsx23("span", { className: "snacky-callout__meta-icon", children: statusIcon })
804
831
  ] })
805
832
  ] });
806
833
  }
807
834
 
808
835
  // src/components/List/List.tsx
809
- import { jsx as jsx23, jsxs as jsxs16 } from "react/jsx-runtime";
836
+ import { jsx as jsx24, jsxs as jsxs16 } from "react/jsx-runtime";
810
837
  var STATUS_LABEL = {
811
838
  waiting: "Waiting for Payment",
812
839
  process: "Order Processing",
@@ -844,31 +871,31 @@ function OrderListItem({
844
871
  onKeyDown: onClick ? (e) => (e.key === "Enter" || e.key === " ") && onClick() : void 0,
845
872
  children: [
846
873
  /* @__PURE__ */ jsxs16("div", { className: "snacky-order-item__top", children: [
847
- /* @__PURE__ */ jsx23("div", { className: "snacky-order-item__thumb-box", children: /* @__PURE__ */ jsx23("img", { className: "snacky-order-item__thumb", src: productImage, alt: "" }) }),
874
+ /* @__PURE__ */ jsx24("div", { className: "snacky-order-item__thumb-box", children: /* @__PURE__ */ jsx24("img", { className: "snacky-order-item__thumb", src: productImage, alt: "" }) }),
848
875
  /* @__PURE__ */ jsxs16("div", { className: "snacky-order-item__info", children: [
849
- /* @__PURE__ */ jsx23(
876
+ /* @__PURE__ */ jsx24(
850
877
  "span",
851
878
  {
852
879
  className: cx("snacky-order-item__status", status === "cancelled" && "snacky-order-item__status--cancelled"),
853
880
  children: STATUS_LABEL[status]
854
881
  }
855
882
  ),
856
- /* @__PURE__ */ jsx23("span", { className: "snacky-order-item__name", children: productName })
883
+ /* @__PURE__ */ jsx24("span", { className: "snacky-order-item__name", children: productName })
857
884
  ] })
858
885
  ] }),
859
886
  /* @__PURE__ */ jsxs16("div", { className: "snacky-order-item__details", children: [
860
- /* @__PURE__ */ jsx23("span", { className: "snacky-order-item__count", children: itemsSummary }),
887
+ /* @__PURE__ */ jsx24("span", { className: "snacky-order-item__count", children: itemsSummary }),
861
888
  /* @__PURE__ */ jsxs16("span", { className: cx("snacky-order-item__total", isCod && "snacky-order-item__total--cod"), children: [
862
889
  "Order Total: ",
863
- /* @__PURE__ */ jsx23("b", { children: total })
890
+ /* @__PURE__ */ jsx24("b", { children: total })
864
891
  ] }),
865
- isCod && /* @__PURE__ */ jsx23("span", { className: "snacky-order-item__cod", children: "COD" })
892
+ isCod && /* @__PURE__ */ jsx24("span", { className: "snacky-order-item__cod", children: "COD" })
866
893
  ] }),
867
894
  status === "waiting" && paymentDeadline && /* @__PURE__ */ jsxs16("div", { className: "snacky-order-item__deadline", children: [
868
895
  "Pay before ",
869
896
  paymentDeadline
870
897
  ] }),
871
- action && /* @__PURE__ */ jsx23("div", { className: "snacky-order-item__action-row", children: /* @__PURE__ */ jsx23(
898
+ action && /* @__PURE__ */ jsx24("div", { className: "snacky-order-item__action-row", children: /* @__PURE__ */ jsx24(
872
899
  Button,
873
900
  {
874
901
  variant: "primary",
@@ -893,8 +920,8 @@ function NotificationListItem({ title, message, unread = false, onClick, classNa
893
920
  onClick,
894
921
  onKeyDown: onClick ? (e) => (e.key === "Enter" || e.key === " ") && onClick() : void 0,
895
922
  children: [
896
- /* @__PURE__ */ jsx23("span", { className: "snacky-notif-item__title", children: title }),
897
- /* @__PURE__ */ jsx23("span", { className: "snacky-notif-item__message", children: message })
923
+ /* @__PURE__ */ jsx24("span", { className: "snacky-notif-item__title", children: title }),
924
+ /* @__PURE__ */ jsx24("span", { className: "snacky-notif-item__message", children: message })
898
925
  ]
899
926
  }
900
927
  );
@@ -902,7 +929,7 @@ function NotificationListItem({ title, message, unread = false, onClick, classNa
902
929
 
903
930
  // src/components/Accordion/Accordion.tsx
904
931
  import { useId as useId4, useState as useState2 } from "react";
905
- import { jsx as jsx24, jsxs as jsxs17 } from "react/jsx-runtime";
932
+ import { jsx as jsx25, jsxs as jsxs17 } from "react/jsx-runtime";
906
933
  function Accordion({ title, leadingIcon, children, defaultOpen = false, className }) {
907
934
  const [open, setOpen] = useState2(defaultOpen);
908
935
  const panelId = useId4();
@@ -916,27 +943,27 @@ function Accordion({ title, leadingIcon, children, defaultOpen = false, classNam
916
943
  "aria-controls": panelId,
917
944
  onClick: () => setOpen((v) => !v),
918
945
  children: [
919
- leadingIcon && /* @__PURE__ */ jsx24("span", { className: "snacky-accordion__icon", children: leadingIcon }),
920
- /* @__PURE__ */ jsx24("span", { className: "snacky-accordion__title", children: title }),
921
- /* @__PURE__ */ jsx24(
946
+ leadingIcon && /* @__PURE__ */ jsx25("span", { className: "snacky-accordion__icon", children: leadingIcon }),
947
+ /* @__PURE__ */ jsx25("span", { className: "snacky-accordion__title", children: title }),
948
+ /* @__PURE__ */ jsx25(
922
949
  "svg",
923
950
  {
924
951
  className: cx("snacky-accordion__chevron", open && "snacky-accordion__chevron--open"),
925
952
  viewBox: "0 0 20 20",
926
953
  fill: "none",
927
- children: /* @__PURE__ */ jsx24("path", { d: "M5 7.5L10 12.5L15 7.5", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" })
954
+ children: /* @__PURE__ */ jsx25("path", { d: "M5 7.5L10 12.5L15 7.5", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" })
928
955
  }
929
956
  )
930
957
  ]
931
958
  }
932
959
  ),
933
- open && /* @__PURE__ */ jsx24("div", { id: panelId, className: "snacky-accordion__panel", children })
960
+ open && /* @__PURE__ */ jsx25("div", { id: panelId, className: "snacky-accordion__panel", children })
934
961
  ] });
935
962
  }
936
963
 
937
964
  // src/components/Modal/BottomSheet.tsx
938
965
  import { useEffect } from "react";
939
- import { jsx as jsx25, jsxs as jsxs18 } from "react/jsx-runtime";
966
+ import { jsx as jsx26, jsxs as jsxs18 } from "react/jsx-runtime";
940
967
  function BottomSheet({ open, onDismiss, children, showHandle = false, className }) {
941
968
  useEffect(() => {
942
969
  if (!open) return;
@@ -947,7 +974,7 @@ function BottomSheet({ open, onDismiss, children, showHandle = false, className
947
974
  return () => window.removeEventListener("keydown", onKeyDown);
948
975
  }, [open, onDismiss]);
949
976
  if (!open) return null;
950
- return /* @__PURE__ */ jsx25("div", { className: "snacky-sheet-overlay", onClick: onDismiss, children: /* @__PURE__ */ jsxs18(
977
+ return /* @__PURE__ */ jsx26("div", { className: "snacky-sheet-overlay", onClick: onDismiss, children: /* @__PURE__ */ jsxs18(
951
978
  "div",
952
979
  {
953
980
  className: cx("snacky-sheet", className),
@@ -955,7 +982,7 @@ function BottomSheet({ open, onDismiss, children, showHandle = false, className
955
982
  "aria-modal": "true",
956
983
  onClick: (e) => e.stopPropagation(),
957
984
  children: [
958
- showHandle && /* @__PURE__ */ jsx25("div", { className: "snacky-sheet__handle" }),
985
+ showHandle && /* @__PURE__ */ jsx26("div", { className: "snacky-sheet__handle" }),
959
986
  children
960
987
  ]
961
988
  }
@@ -963,29 +990,29 @@ function BottomSheet({ open, onDismiss, children, showHandle = false, className
963
990
  }
964
991
 
965
992
  // src/components/Section/Section.tsx
966
- import { jsx as jsx26, jsxs as jsxs19 } from "react/jsx-runtime";
993
+ import { jsx as jsx27, jsxs as jsxs19 } from "react/jsx-runtime";
967
994
  function Section({ title, onAction, children, className }) {
968
995
  return /* @__PURE__ */ jsxs19("section", { className: cx("snacky-section", className), children: [
969
996
  /* @__PURE__ */ jsxs19("div", { className: "snacky-section__header", children: [
970
- /* @__PURE__ */ jsx26("h3", { className: "snacky-section__title", children: title }),
971
- onAction && /* @__PURE__ */ jsx26("button", { type: "button", className: "snacky-section__action", onClick: onAction, "aria-label": `See more: ${title}`, children: /* @__PURE__ */ jsx26("svg", { viewBox: "0 0 16 16", fill: "none", width: "16", height: "16", children: /* @__PURE__ */ jsx26("path", { d: "M6 3.5L10.5 8L6 12.5", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) }) })
997
+ /* @__PURE__ */ jsx27("h3", { className: "snacky-section__title", children: title }),
998
+ onAction && /* @__PURE__ */ jsx27(IconButton, { size: "small", icon: /* @__PURE__ */ jsx27(angleSmallRight, {}), onClick: onAction, ariaLabel: `See more: ${title}` })
972
999
  ] }),
973
1000
  children
974
1001
  ] });
975
1002
  }
976
1003
 
977
1004
  // src/components/Stepper/Stepper.tsx
978
- import { jsx as jsx27, jsxs as jsxs20 } from "react/jsx-runtime";
1005
+ import { jsx as jsx28, jsxs as jsxs20 } from "react/jsx-runtime";
979
1006
  function Stepper({ steps, className }) {
980
- return /* @__PURE__ */ jsx27("ol", { className: cx("snacky-stepper", className), children: steps.map((step, i) => /* @__PURE__ */ jsxs20(
1007
+ return /* @__PURE__ */ jsx28("ol", { className: cx("snacky-stepper", className), children: steps.map((step, i) => /* @__PURE__ */ jsxs20(
981
1008
  "li",
982
1009
  {
983
1010
  className: cx("snacky-stepper__step", i === steps.length - 1 && "snacky-stepper__step--last"),
984
1011
  children: [
985
- /* @__PURE__ */ jsx27("span", { className: cx("snacky-stepper__dot", `snacky-stepper__dot--${step.state}`), children: step.state === "cancelled" && /* @__PURE__ */ jsx27(close, { width: 12, height: 12 }) }),
1012
+ /* @__PURE__ */ jsx28("span", { className: cx("snacky-stepper__dot", `snacky-stepper__dot--${step.state}`), children: step.state === "cancelled" && /* @__PURE__ */ jsx28(close, { width: 12, height: 12 }) }),
986
1013
  /* @__PURE__ */ jsxs20("span", { className: "snacky-stepper__body", children: [
987
- /* @__PURE__ */ jsx27("span", { className: cx("snacky-stepper__label", `snacky-stepper__label--${step.state}`), children: step.label }),
988
- step.timestamp && /* @__PURE__ */ jsx27("span", { className: "snacky-stepper__time", children: step.timestamp })
1014
+ /* @__PURE__ */ jsx28("span", { className: cx("snacky-stepper__label", `snacky-stepper__label--${step.state}`), children: step.label }),
1015
+ step.timestamp && /* @__PURE__ */ jsx28("span", { className: "snacky-stepper__time", children: step.timestamp })
989
1016
  ] })
990
1017
  ]
991
1018
  },
@@ -994,7 +1021,7 @@ function Stepper({ steps, className }) {
994
1021
  }
995
1022
 
996
1023
  // src/components/Calendar/Calendar.tsx
997
- import { jsx as jsx28, jsxs as jsxs21 } from "react/jsx-runtime";
1024
+ import { jsx as jsx29, jsxs as jsxs21 } from "react/jsx-runtime";
998
1025
  var WEEKDAYS = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
999
1026
  var MONTHS = [
1000
1027
  "January",
@@ -1043,14 +1070,14 @@ function Calendar({
1043
1070
  const isInRange = (d) => lo && hi && d > lo && d < hi;
1044
1071
  return /* @__PURE__ */ jsxs21("div", { className: cx("snacky-calendar", className), children: [
1045
1072
  /* @__PURE__ */ jsxs21("div", { className: "snacky-calendar__header", children: [
1046
- /* @__PURE__ */ jsx28(
1073
+ /* @__PURE__ */ jsx29(
1047
1074
  "button",
1048
1075
  {
1049
1076
  type: "button",
1050
1077
  className: "snacky-calendar__nav",
1051
1078
  onClick: onPrevMonth,
1052
1079
  "aria-label": "Previous month",
1053
- children: /* @__PURE__ */ jsx28(back, { width: 24, height: 24 })
1080
+ children: /* @__PURE__ */ jsx29(back, { width: 24, height: 24 })
1054
1081
  }
1055
1082
  ),
1056
1083
  /* @__PURE__ */ jsxs21("span", { className: "snacky-calendar__label", children: [
@@ -1058,19 +1085,19 @@ function Calendar({
1058
1085
  " ",
1059
1086
  month.getFullYear()
1060
1087
  ] }),
1061
- /* @__PURE__ */ jsx28(
1088
+ /* @__PURE__ */ jsx29(
1062
1089
  "button",
1063
1090
  {
1064
1091
  type: "button",
1065
1092
  className: "snacky-calendar__nav snacky-calendar__nav--next",
1066
1093
  onClick: onNextMonth,
1067
1094
  "aria-label": "Next month",
1068
- children: /* @__PURE__ */ jsx28(back, { width: 24, height: 24 })
1095
+ children: /* @__PURE__ */ jsx29(back, { width: 24, height: 24 })
1069
1096
  }
1070
1097
  )
1071
1098
  ] }),
1072
1099
  /* @__PURE__ */ jsxs21("div", { className: "snacky-calendar__grid", children: [
1073
- WEEKDAYS.map((d) => /* @__PURE__ */ jsx28("span", { className: "snacky-calendar__weekday", children: d }, d)),
1100
+ WEEKDAYS.map((d) => /* @__PURE__ */ jsx29("span", { className: "snacky-calendar__weekday", children: d }, d)),
1074
1101
  days.map((d, i) => {
1075
1102
  const outside = d.getMonth() !== month.getMonth();
1076
1103
  return /* @__PURE__ */ jsxs21(
@@ -1087,26 +1114,26 @@ function Calendar({
1087
1114
  disabled: outside,
1088
1115
  "aria-current": isEnd(d) ? "date" : void 0,
1089
1116
  children: [
1090
- /* @__PURE__ */ jsx28("span", { className: "snacky-calendar__day-number", children: d.getDate() }),
1091
- marked.some((m) => sameDay(m, d)) && /* @__PURE__ */ jsx28("span", { className: "snacky-calendar__marker" })
1117
+ /* @__PURE__ */ jsx29("span", { className: "snacky-calendar__day-number", children: d.getDate() }),
1118
+ marked.some((m) => sameDay(m, d)) && /* @__PURE__ */ jsx29("span", { className: "snacky-calendar__marker" })
1092
1119
  ]
1093
1120
  },
1094
1121
  i
1095
1122
  );
1096
1123
  })
1097
1124
  ] }),
1098
- onAction && /* @__PURE__ */ jsx28(Button, { onClick: onAction, style: { width: "100%" }, children: actionLabel })
1125
+ onAction && /* @__PURE__ */ jsx29(Button, { onClick: onAction, style: { width: "100%" }, children: actionLabel })
1099
1126
  ] });
1100
1127
  }
1101
1128
 
1102
1129
  // src/components/Avatar/Avatar.tsx
1103
- import { jsx as jsx29 } from "react/jsx-runtime";
1130
+ import { jsx as jsx30 } from "react/jsx-runtime";
1104
1131
  function Avatar({ src, alt, size = "md", className }) {
1105
- return /* @__PURE__ */ jsx29("img", { src, alt, className: cx("snacky-avatar", `snacky-avatar--${size}`, className) });
1132
+ return /* @__PURE__ */ jsx30("img", { src, alt, className: cx("snacky-avatar", `snacky-avatar--${size}`, className) });
1106
1133
  }
1107
1134
 
1108
1135
  // src/components/Illustration/Illustration.tsx
1109
- import { jsx as jsx30 } from "react/jsx-runtime";
1136
+ import { jsx as jsx31 } from "react/jsx-runtime";
1110
1137
  var SIZE = {
1111
1138
  empty: { width: 268, height: 200 },
1112
1139
  createAccount: { width: 360, height: 240 },
@@ -1116,47 +1143,47 @@ var SIZE = {
1116
1143
  };
1117
1144
  function Illustration({ variant, src, alt, className }) {
1118
1145
  const { width, height } = SIZE[variant];
1119
- return /* @__PURE__ */ jsx30("img", { src, alt, width, height, className: cx("snacky-illustration", className) });
1146
+ return /* @__PURE__ */ jsx31("img", { src, alt, width, height, className: cx("snacky-illustration", className) });
1120
1147
  }
1121
1148
 
1122
1149
  // src/components/ProductImage/ProductImage.tsx
1123
- import { jsx as jsx31, jsxs as jsxs22 } from "react/jsx-runtime";
1150
+ import { jsx as jsx32, jsxs as jsxs22 } from "react/jsx-runtime";
1124
1151
  function ProductImage({ src, alt, usage, sold = false, className }) {
1125
1152
  return /* @__PURE__ */ jsxs22("span", { className: cx("snacky-product-image-wrap", `snacky-product-image-wrap--${usage}`, className), children: [
1126
- /* @__PURE__ */ jsx31("img", { src, alt, className: cx("snacky-product-image", `snacky-product-image--${usage}`) }),
1127
- sold && /* @__PURE__ */ jsx31("span", { className: "snacky-product-image-sold-overlay", children: /* @__PURE__ */ jsx31("span", { className: "snacky-product-image-sold-label", children: "Sold Out" }) })
1153
+ /* @__PURE__ */ jsx32("img", { src, alt, className: cx("snacky-product-image", `snacky-product-image--${usage}`) }),
1154
+ sold && /* @__PURE__ */ jsx32("span", { className: "snacky-product-image-sold-overlay", children: /* @__PURE__ */ jsx32("span", { className: "snacky-product-image-sold-label", children: "Sold Out" }) })
1128
1155
  ] });
1129
1156
  }
1130
1157
 
1131
1158
  // src/components/ProductCard/ProductCard.tsx
1132
- import { jsx as jsx32, jsxs as jsxs23 } from "react/jsx-runtime";
1159
+ import { jsx as jsx33, jsxs as jsxs23 } from "react/jsx-runtime";
1133
1160
  function ProductCard(props) {
1134
1161
  if (props.variant === "details") {
1135
1162
  const { productName: productName2, imageUrl: imageUrl2, price: price2, rating: rating2, originalPrice: originalPrice2, discountLabel: discountLabel2, ratingCount, favorited, onFavoriteClick, onShareClick, onChatClick, sold, ratingIcon: ratingIcon2, favoriteIcon, shareIcon, chatIcon, onClick: onClick2, className: className2 } = props;
1136
1163
  return /* @__PURE__ */ jsxs23("div", { className: cx("snacky-product-card", "snacky-product-card--details", className2), children: [
1137
- /* @__PURE__ */ jsx32("div", { className: "snacky-product-card__image-block", children: /* @__PURE__ */ jsxs23("div", { className: "snacky-product-card__image-wrap", onClick: onClick2, children: [
1138
- /* @__PURE__ */ jsx32("img", { className: "snacky-product-card__image", src: imageUrl2, alt: productName2 }),
1139
- sold && /* @__PURE__ */ jsx32("span", { className: "snacky-product-card__sold-overlay", children: /* @__PURE__ */ jsx32(SoldOutBadge, {}) })
1164
+ /* @__PURE__ */ jsx33("div", { className: "snacky-product-card__image-block", children: /* @__PURE__ */ jsxs23("div", { className: "snacky-product-card__image-wrap", onClick: onClick2, children: [
1165
+ /* @__PURE__ */ jsx33("img", { className: "snacky-product-card__image", src: imageUrl2, alt: productName2 }),
1166
+ sold && /* @__PURE__ */ jsx33("span", { className: "snacky-product-card__sold-overlay", children: /* @__PURE__ */ jsx33(SoldOutBadge, {}) })
1140
1167
  ] }) }),
1141
1168
  /* @__PURE__ */ jsxs23("div", { className: "snacky-product-card__details-body", children: [
1142
- /* @__PURE__ */ jsx32("p", { className: "snacky-product-card__name", children: productName2 }),
1169
+ /* @__PURE__ */ jsx33("p", { className: "snacky-product-card__name", children: productName2 }),
1143
1170
  /* @__PURE__ */ jsxs23("div", { className: "snacky-product-card__price-row", children: [
1144
- /* @__PURE__ */ jsx32("span", { className: "snacky-product-card__price", children: price2 }),
1145
- originalPrice2 && /* @__PURE__ */ jsx32("span", { className: "snacky-product-card__original-price", children: originalPrice2 }),
1146
- discountLabel2 && /* @__PURE__ */ jsx32(DiscountTag, { label: discountLabel2 })
1171
+ /* @__PURE__ */ jsx33("span", { className: "snacky-product-card__price", children: price2 }),
1172
+ originalPrice2 && /* @__PURE__ */ jsx33("span", { className: "snacky-product-card__original-price", children: originalPrice2 }),
1173
+ discountLabel2 && /* @__PURE__ */ jsx33(DiscountTag, { label: discountLabel2 })
1147
1174
  ] }),
1148
1175
  /* @__PURE__ */ jsxs23("div", { className: "snacky-product-card__footer-row", children: [
1149
1176
  /* @__PURE__ */ jsxs23("span", { className: "snacky-product-card__rating", children: [
1150
- /* @__PURE__ */ jsx32("span", { className: "snacky-product-card__rating-icon", children: ratingIcon2 ?? /* @__PURE__ */ jsx32(star, { width: 16, height: 16 }) }),
1177
+ /* @__PURE__ */ jsx33("span", { className: "snacky-product-card__rating-icon", children: ratingIcon2 ?? /* @__PURE__ */ jsx33(star, { width: 16, height: 16 }) }),
1151
1178
  rating2,
1152
1179
  " (",
1153
1180
  ratingCount,
1154
1181
  ")"
1155
1182
  ] }),
1156
1183
  /* @__PURE__ */ jsxs23("div", { className: "snacky-product-card__actions snacky-product-card__actions--details", children: [
1157
- /* @__PURE__ */ jsx32(IconButton, { variant: "secondary", icon: favoriteIcon ?? (favorited ? /* @__PURE__ */ jsx32(heart2, { width: 20, height: 20 }) : /* @__PURE__ */ jsx32(heart, { width: 20, height: 20 })), selected: favorited, onClick: onFavoriteClick, ariaLabel: "Favorite" }),
1158
- /* @__PURE__ */ jsx32(IconButton, { variant: "secondary", icon: shareIcon ?? /* @__PURE__ */ jsx32(share, { width: 20, height: 20 }), onClick: onShareClick, ariaLabel: "Share" }),
1159
- /* @__PURE__ */ jsx32(IconButton, { variant: "secondary", icon: chatIcon ?? /* @__PURE__ */ jsx32(chat, { width: 20, height: 20 }), onClick: onChatClick, ariaLabel: "Chat with seller" })
1184
+ /* @__PURE__ */ jsx33(IconButton, { variant: "secondary", icon: favoriteIcon ?? (favorited ? /* @__PURE__ */ jsx33(heart2, { width: 20, height: 20 }) : /* @__PURE__ */ jsx33(heart, { width: 20, height: 20 })), selected: favorited, onClick: onFavoriteClick, ariaLabel: "Favorite" }),
1185
+ /* @__PURE__ */ jsx33(IconButton, { variant: "secondary", icon: shareIcon ?? /* @__PURE__ */ jsx33(share, { width: 20, height: 20 }), onClick: onShareClick, ariaLabel: "Share" }),
1186
+ /* @__PURE__ */ jsx33(IconButton, { variant: "secondary", icon: chatIcon ?? /* @__PURE__ */ jsx33(chat, { width: 20, height: 20 }), onClick: onChatClick, ariaLabel: "Chat with seller" })
1160
1187
  ] })
1161
1188
  ] })
1162
1189
  ] })
@@ -1173,24 +1200,24 @@ function ProductCard(props) {
1173
1200
  onKeyDown: (e) => (e.key === "Enter" || e.key === " ") && onClick?.(),
1174
1201
  children: [
1175
1202
  /* @__PURE__ */ jsxs23("div", { className: "snacky-product-card__image-wrap", children: [
1176
- /* @__PURE__ */ jsx32("img", { className: "snacky-product-card__image", src: imageUrl, alt: productName }),
1177
- discountLabel && /* @__PURE__ */ jsx32("span", { className: "snacky-product-card__discount", children: /* @__PURE__ */ jsx32(DiscountTag, { label: discountLabel }) })
1203
+ /* @__PURE__ */ jsx33("img", { className: "snacky-product-card__image", src: imageUrl, alt: productName }),
1204
+ discountLabel && /* @__PURE__ */ jsx33("span", { className: "snacky-product-card__discount", children: /* @__PURE__ */ jsx33(DiscountTag, { label: discountLabel }) })
1178
1205
  ] }),
1179
- /* @__PURE__ */ jsx32("p", { className: "snacky-product-card__name", children: productName }),
1206
+ /* @__PURE__ */ jsx33("p", { className: "snacky-product-card__name", children: productName }),
1180
1207
  /* @__PURE__ */ jsxs23("div", { className: "snacky-product-card__price-row", children: [
1181
- /* @__PURE__ */ jsx32("span", { className: "snacky-product-card__price", children: price }),
1182
- originalPrice && /* @__PURE__ */ jsx32("span", { className: "snacky-product-card__original-price", children: originalPrice })
1208
+ /* @__PURE__ */ jsx33("span", { className: "snacky-product-card__price", children: price }),
1209
+ originalPrice && /* @__PURE__ */ jsx33("span", { className: "snacky-product-card__original-price", children: originalPrice })
1183
1210
  ] }),
1184
1211
  /* @__PURE__ */ jsxs23("div", { className: "snacky-product-card__footer-row", children: [
1185
1212
  /* @__PURE__ */ jsxs23("span", { className: "snacky-product-card__rating", children: [
1186
- /* @__PURE__ */ jsx32("span", { className: "snacky-product-card__rating-icon", children: ratingIcon ?? /* @__PURE__ */ jsx32(star, { width: 16, height: 16 }) }),
1213
+ /* @__PURE__ */ jsx33("span", { className: "snacky-product-card__rating-icon", children: ratingIcon ?? /* @__PURE__ */ jsx33(star, { width: 16, height: 16 }) }),
1187
1214
  rating
1188
1215
  ] }),
1189
- /* @__PURE__ */ jsx32(
1216
+ /* @__PURE__ */ jsx33(
1190
1217
  IconButton,
1191
1218
  {
1192
1219
  variant: "primary",
1193
- icon: cartIcon ?? /* @__PURE__ */ jsx32(cartAdd, { width: 16, height: 16 }),
1220
+ icon: cartIcon ?? /* @__PURE__ */ jsx33(cartAdd, { width: 16, height: 16 }),
1194
1221
  onClick: (e) => {
1195
1222
  e.stopPropagation();
1196
1223
  onAddToCart();
@@ -1205,10 +1232,10 @@ function ProductCard(props) {
1205
1232
  }
1206
1233
 
1207
1234
  // src/components/ImagePlaceholder/ImagePlaceholder.tsx
1208
- import { jsx as jsx33, jsxs as jsxs24 } from "react/jsx-runtime";
1235
+ import { jsx as jsx34, jsxs as jsxs24 } from "react/jsx-runtime";
1209
1236
  function ImagePlaceholder({ width, height, className }) {
1210
1237
  const iconSize = Math.round(Math.min(width, height) * 0.32);
1211
- return /* @__PURE__ */ jsx33(
1238
+ return /* @__PURE__ */ jsx34(
1212
1239
  "div",
1213
1240
  {
1214
1241
  className: cx("snacky-image-placeholder", className),
@@ -1227,9 +1254,9 @@ function ImagePlaceholder({ width, height, className }) {
1227
1254
  strokeLinecap: "round",
1228
1255
  strokeLinejoin: "round",
1229
1256
  children: [
1230
- /* @__PURE__ */ jsx33("rect", { x: "3", y: "3", width: "18", height: "18", rx: "2" }),
1231
- /* @__PURE__ */ jsx33("circle", { cx: "8.5", cy: "8.5", r: "1.5", fill: "currentColor", stroke: "none" }),
1232
- /* @__PURE__ */ jsx33("polyline", { points: "21 15 16 10 5 21" })
1257
+ /* @__PURE__ */ jsx34("rect", { x: "3", y: "3", width: "18", height: "18", rx: "2" }),
1258
+ /* @__PURE__ */ jsx34("circle", { cx: "8.5", cy: "8.5", r: "1.5", fill: "currentColor", stroke: "none" }),
1259
+ /* @__PURE__ */ jsx34("polyline", { points: "21 15 16 10 5 21" })
1233
1260
  ]
1234
1261
  }
1235
1262
  )
@@ -1262,6 +1289,7 @@ export {
1262
1289
  NotificationListItem,
1263
1290
  OrderListItem,
1264
1291
  OtpField,
1292
+ PageIndicator,
1265
1293
  PointBalanceBanner,
1266
1294
  ProductCard,
1267
1295
  ProductChip,