@betterstore/react 0.2.3 → 0.2.5

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.mjs CHANGED
@@ -1,5 +1,18 @@
1
1
  import { create } from 'zustand';
2
- import React, { memo, useState, useEffect } from 'react';
2
+ import * as React from 'react';
3
+ import React__default, { useState, useEffect, memo } from 'react';
4
+ import { jsx, Fragment } from 'react/jsx-runtime';
5
+ import { cva } from 'class-variance-authority';
6
+ import { clsx } from 'clsx';
7
+ import { twMerge } from 'tailwind-merge';
8
+ import * as CheckboxPrimitive from '@radix-ui/react-checkbox';
9
+ import { CheckIcon, ChevronDownIcon, ChevronUpIcon, ChevronLeft, CircleIcon } from 'lucide-react';
10
+ import { FormProvider, Controller, useFormContext, useFormState, appendErrors, useForm } from 'react-hook-form';
11
+ import * as LabelPrimitive from '@radix-ui/react-label';
12
+ import * as SelectPrimitive from '@radix-ui/react-select';
13
+ import { validateFieldsNatively, toNestErrors } from '@hookform/resolvers';
14
+ import { z } from 'zod';
15
+ import * as RadioGroupPrimitive from '@radix-ui/react-radio-group';
3
16
  import { useStripe, useElements, PaymentElement as PaymentElement$1, Elements } from '@stripe/react-stripe-js';
4
17
  import { loadStripe } from '@stripe/stripe-js';
5
18
 
@@ -256,6 +269,18 @@ PERFORMANCE OF THIS SOFTWARE.
256
269
  /* global Reflect, Promise, SuppressedError, Symbol, Iterator */
257
270
 
258
271
 
272
+ function __rest(s, e) {
273
+ var t = {};
274
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
275
+ t[p] = s[p];
276
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
277
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
278
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
279
+ t[p[i]] = s[p[i]];
280
+ }
281
+ return t;
282
+ }
283
+
259
284
  function __awaiter(thisArg, _arguments, P, generator) {
260
285
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
261
286
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -271,6 +296,608 @@ typeof SuppressedError === "function" ? SuppressedError : function (error, suppr
271
296
  return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
272
297
  };
273
298
 
299
+ // packages/react/compose-refs/src/composeRefs.tsx
300
+ function setRef(ref, value) {
301
+ if (typeof ref === "function") {
302
+ return ref(value);
303
+ } else if (ref !== null && ref !== void 0) {
304
+ ref.current = value;
305
+ }
306
+ }
307
+ function composeRefs(...refs) {
308
+ return (node) => {
309
+ let hasCleanup = false;
310
+ const cleanups = refs.map((ref) => {
311
+ const cleanup = setRef(ref, node);
312
+ if (!hasCleanup && typeof cleanup == "function") {
313
+ hasCleanup = true;
314
+ }
315
+ return cleanup;
316
+ });
317
+ if (hasCleanup) {
318
+ return () => {
319
+ for (let i = 0; i < cleanups.length; i++) {
320
+ const cleanup = cleanups[i];
321
+ if (typeof cleanup == "function") {
322
+ cleanup();
323
+ } else {
324
+ setRef(refs[i], null);
325
+ }
326
+ }
327
+ };
328
+ }
329
+ };
330
+ }
331
+
332
+ // packages/react/slot/src/slot.tsx
333
+ var Slot = React.forwardRef((props, forwardedRef) => {
334
+ const { children, ...slotProps } = props;
335
+ const childrenArray = React.Children.toArray(children);
336
+ const slottable = childrenArray.find(isSlottable);
337
+ if (slottable) {
338
+ const newElement = slottable.props.children;
339
+ const newChildren = childrenArray.map((child) => {
340
+ if (child === slottable) {
341
+ if (React.Children.count(newElement) > 1) return React.Children.only(null);
342
+ return React.isValidElement(newElement) ? newElement.props.children : null;
343
+ } else {
344
+ return child;
345
+ }
346
+ });
347
+ return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children: React.isValidElement(newElement) ? React.cloneElement(newElement, void 0, newChildren) : null });
348
+ }
349
+ return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children });
350
+ });
351
+ Slot.displayName = "Slot";
352
+ var SlotClone = React.forwardRef((props, forwardedRef) => {
353
+ const { children, ...slotProps } = props;
354
+ if (React.isValidElement(children)) {
355
+ const childrenRef = getElementRef(children);
356
+ const props2 = mergeProps(slotProps, children.props);
357
+ if (children.type !== React.Fragment) {
358
+ props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;
359
+ }
360
+ return React.cloneElement(children, props2);
361
+ }
362
+ return React.Children.count(children) > 1 ? React.Children.only(null) : null;
363
+ });
364
+ SlotClone.displayName = "SlotClone";
365
+ var Slottable = ({ children }) => {
366
+ return /* @__PURE__ */ jsx(Fragment, { children });
367
+ };
368
+ function isSlottable(child) {
369
+ return React.isValidElement(child) && child.type === Slottable;
370
+ }
371
+ function mergeProps(slotProps, childProps) {
372
+ const overrideProps = { ...childProps };
373
+ for (const propName in childProps) {
374
+ const slotPropValue = slotProps[propName];
375
+ const childPropValue = childProps[propName];
376
+ const isHandler = /^on[A-Z]/.test(propName);
377
+ if (isHandler) {
378
+ if (slotPropValue && childPropValue) {
379
+ overrideProps[propName] = (...args) => {
380
+ childPropValue(...args);
381
+ slotPropValue(...args);
382
+ };
383
+ } else if (slotPropValue) {
384
+ overrideProps[propName] = slotPropValue;
385
+ }
386
+ } else if (propName === "style") {
387
+ overrideProps[propName] = { ...slotPropValue, ...childPropValue };
388
+ } else if (propName === "className") {
389
+ overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(" ");
390
+ }
391
+ }
392
+ return { ...slotProps, ...overrideProps };
393
+ }
394
+ function getElementRef(element) {
395
+ let getter = Object.getOwnPropertyDescriptor(element.props, "ref")?.get;
396
+ let mayWarn = getter && "isReactWarning" in getter && getter.isReactWarning;
397
+ if (mayWarn) {
398
+ return element.ref;
399
+ }
400
+ getter = Object.getOwnPropertyDescriptor(element, "ref")?.get;
401
+ mayWarn = getter && "isReactWarning" in getter && getter.isReactWarning;
402
+ if (mayWarn) {
403
+ return element.props.ref;
404
+ }
405
+ return element.props.ref || element.ref;
406
+ }
407
+
408
+ function cn(...inputs) {
409
+ return twMerge(clsx(inputs));
410
+ }
411
+
412
+ const buttonVariants = cva("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-[color,box-shadow] 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", {
413
+ variants: {
414
+ variant: {
415
+ default: "bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",
416
+ destructive: "bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40",
417
+ outline: "border border-input bg-background shadow-xs hover:bg-accent hover:text-accent-foreground",
418
+ secondary: "bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80",
419
+ ghost: "hover:bg-accent hover:text-accent-foreground",
420
+ link: "text-primary underline-offset-4 hover:underline",
421
+ },
422
+ size: {
423
+ default: "h-9 px-4 py-2 has-[>svg]:px-3",
424
+ sm: "h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",
425
+ lg: "h-10 rounded-md px-6 has-[>svg]:px-4",
426
+ icon: "size-9",
427
+ },
428
+ },
429
+ defaultVariants: {
430
+ variant: "default",
431
+ size: "default",
432
+ },
433
+ });
434
+ function Button(_a) {
435
+ var { className, variant, size, asChild = false } = _a, props = __rest(_a, ["className", "variant", "size", "asChild"]);
436
+ const Comp = asChild ? Slot : "button";
437
+ return (React.createElement(Comp, Object.assign({ "data-slot": "button", className: cn(buttonVariants({ variant, size, className })) }, props)));
438
+ }
439
+
440
+ function Checkbox(_a) {
441
+ var { className } = _a, props = __rest(_a, ["className"]);
442
+ return (React.createElement(CheckboxPrimitive.Root, Object.assign({ "data-slot": "checkbox", className: cn("peer border-input data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground data-[state=checked]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50", className) }, props),
443
+ React.createElement(CheckboxPrimitive.Indicator, { "data-slot": "checkbox-indicator", className: "flex items-center justify-center text-current transition-none" },
444
+ React.createElement(CheckIcon, { className: "size-3.5" }))));
445
+ }
446
+
447
+ function Label(_a) {
448
+ var { className } = _a, props = __rest(_a, ["className"]);
449
+ return (React.createElement(LabelPrimitive.Root, Object.assign({ "data-slot": "label", className: cn("flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50", className) }, props)));
450
+ }
451
+
452
+ const Form = FormProvider;
453
+ const FormFieldContext = React.createContext({});
454
+ const FormField = (_a) => {
455
+ var props = __rest(_a, []);
456
+ return (React.createElement(FormFieldContext.Provider, { value: { name: props.name } },
457
+ React.createElement(Controller, Object.assign({}, props))));
458
+ };
459
+ const useFormField = () => {
460
+ const fieldContext = React.useContext(FormFieldContext);
461
+ const itemContext = React.useContext(FormItemContext);
462
+ const { getFieldState } = useFormContext();
463
+ const formState = useFormState({ name: fieldContext.name });
464
+ const fieldState = getFieldState(fieldContext.name, formState);
465
+ if (!fieldContext) {
466
+ throw new Error("useFormField should be used within <FormField>");
467
+ }
468
+ const { id } = itemContext;
469
+ return Object.assign({ id, name: fieldContext.name, formItemId: `${id}-form-item`, formDescriptionId: `${id}-form-item-description`, formMessageId: `${id}-form-item-message` }, fieldState);
470
+ };
471
+ const FormItemContext = React.createContext({});
472
+ function FormItem(_a) {
473
+ var { className } = _a, props = __rest(_a, ["className"]);
474
+ const id = React.useId();
475
+ return (React.createElement(FormItemContext.Provider, { value: { id } },
476
+ React.createElement("div", Object.assign({ "data-slot": "form-item", className: cn("grid gap-2", className) }, props))));
477
+ }
478
+ function FormLabel(_a) {
479
+ var { className } = _a, props = __rest(_a, ["className"]);
480
+ const { error, formItemId } = useFormField();
481
+ return (React.createElement(Label, Object.assign({ "data-slot": "form-label", "data-error": !!error, className: cn("data-[error=true]:text-destructive-foreground", className), htmlFor: formItemId }, props)));
482
+ }
483
+ function FormControl(_a) {
484
+ var props = __rest(_a, []);
485
+ const { error, formItemId, formDescriptionId, formMessageId } = useFormField();
486
+ return (React.createElement(Slot, Object.assign({ "data-slot": "form-control", id: formItemId, "aria-describedby": !error
487
+ ? `${formDescriptionId}`
488
+ : `${formDescriptionId} ${formMessageId}`, "aria-invalid": !!error }, props)));
489
+ }
490
+ function FormMessage(_a) {
491
+ var _b;
492
+ var { className } = _a, props = __rest(_a, ["className"]);
493
+ const { error, formMessageId } = useFormField();
494
+ const body = error ? String((_b = error === null || error === void 0 ? void 0 : error.message) !== null && _b !== void 0 ? _b : "") : props.children;
495
+ if (!body) {
496
+ return null;
497
+ }
498
+ return (React.createElement("p", Object.assign({ "data-slot": "form-message", id: formMessageId, className: cn("text-destructive-foreground text-sm", className) }, props), body));
499
+ }
500
+
501
+ function Input(_a) {
502
+ var { className, type } = _a, props = __rest(_a, ["className", "type"]);
503
+ return (React.createElement("input", Object.assign({ type: type, "data-slot": "input", className: cn("border-input file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground flex h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm", "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", className) }, props)));
504
+ }
505
+
506
+ function Select(_a) {
507
+ var props = __rest(_a, []);
508
+ return React.createElement(SelectPrimitive.Root, Object.assign({ "data-slot": "select" }, props));
509
+ }
510
+ function SelectValue(_a) {
511
+ var props = __rest(_a, []);
512
+ return React.createElement(SelectPrimitive.Value, Object.assign({ "data-slot": "select-value" }, props));
513
+ }
514
+ function SelectTrigger(_a) {
515
+ var { className, children } = _a, props = __rest(_a, ["className", "children"]);
516
+ return (React.createElement(SelectPrimitive.Trigger, Object.assign({ "data-slot": "select-trigger", className: cn("border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive flex h-9 w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className) }, props),
517
+ children,
518
+ React.createElement(SelectPrimitive.Icon, { asChild: true },
519
+ React.createElement(ChevronDownIcon, { className: "size-4 opacity-50" }))));
520
+ }
521
+ function SelectContent(_a) {
522
+ var { className, children, position = "popper" } = _a, props = __rest(_a, ["className", "children", "position"]);
523
+ return (React.createElement(SelectPrimitive.Portal, null,
524
+ React.createElement(SelectPrimitive.Content, Object.assign({ "data-slot": "select-content", className: cn("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border shadow-md", position === "popper" &&
525
+ "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1", className), position: position }, props),
526
+ React.createElement(SelectScrollUpButton, null),
527
+ React.createElement(SelectPrimitive.Viewport, { className: cn("p-1", position === "popper" &&
528
+ "h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1") }, children),
529
+ React.createElement(SelectScrollDownButton, null))));
530
+ }
531
+ function SelectItem(_a) {
532
+ var { className, children } = _a, props = __rest(_a, ["className", "children"]);
533
+ return (React.createElement(SelectPrimitive.Item, Object.assign({ "data-slot": "select-item", className: cn("focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2", className) }, props),
534
+ React.createElement("span", { className: "absolute right-2 flex size-3.5 items-center justify-center" },
535
+ React.createElement(SelectPrimitive.ItemIndicator, null,
536
+ React.createElement(CheckIcon, { className: "size-4" }))),
537
+ React.createElement(SelectPrimitive.ItemText, null, children)));
538
+ }
539
+ function SelectScrollUpButton(_a) {
540
+ var { className } = _a, props = __rest(_a, ["className"]);
541
+ return (React.createElement(SelectPrimitive.ScrollUpButton, Object.assign({ "data-slot": "select-scroll-up-button", className: cn("flex cursor-default items-center justify-center py-1", className) }, props),
542
+ React.createElement(ChevronUpIcon, { className: "size-4" })));
543
+ }
544
+ function SelectScrollDownButton(_a) {
545
+ var { className } = _a, props = __rest(_a, ["className"]);
546
+ return (React.createElement(SelectPrimitive.ScrollDownButton, Object.assign({ "data-slot": "select-scroll-down-button", className: cn("flex cursor-default items-center justify-center py-1", className) }, props),
547
+ React.createElement(ChevronDownIcon, { className: "size-4" })));
548
+ }
549
+
550
+ function n(r,e){for(var n={};r.length;){var s=r[0],t=s.code,i=s.message,a=s.path.join(".");if(!n[a])if("unionErrors"in s){var u=s.unionErrors[0].errors[0];n[a]={message:u.message,type:u.code};}else n[a]={message:i,type:t};if("unionErrors"in s&&s.unionErrors.forEach(function(e){return e.errors.forEach(function(e){return r.push(e)})}),e){var c=n[a].types,f=c&&c[s.code];n[a]=appendErrors(a,e,n,t,f?[].concat(f,s.message):s.message);}r.shift();}return n}function s(o,s,t){return void 0===t&&(t={}),function(i,a,u){try{return Promise.resolve(function(e,n){try{var a=Promise.resolve(o["sync"===t.mode?"parse":"parseAsync"](i,s)).then(function(e){return u.shouldUseNativeValidation&&validateFieldsNatively({},u),{errors:{},values:t.raw?Object.assign({},i):e}});}catch(r){return n(r)}return a&&a.then?a.then(void 0,n):a}(0,function(r){if(function(r){return Array.isArray(null==r?void 0:r.errors)}(r))return {values:{},errors:toNestErrors(n(r.errors,!u.shouldUseNativeValidation&&"all"===u.criteriaMode),u)};throw r}))}catch(r){return Promise.reject(r)}}}
551
+
552
+ // Shipping address schema
553
+ const customerSchema = z.object({
554
+ email: z.string().email("Please enter a valid email address"),
555
+ marketingConsent: z.boolean().optional(),
556
+ firstName: z.string().optional(),
557
+ lastName: z.string().min(1, "Last name is required"),
558
+ address: z.string().min(1, "Address is required"),
559
+ apartment: z.string().optional(),
560
+ city: z.string().min(1, "City is required"),
561
+ state: z.string().min(1, "State is required"),
562
+ zipCode: z.string().min(5, "ZIP code is required"),
563
+ country: z.string().min(1, "Country is required"),
564
+ saveInfo: z.boolean().optional(),
565
+ });
566
+ // Shipping method schema
567
+ const shippingMethodSchema = z.object({
568
+ method: z.enum(["economy", "standard"]),
569
+ });
570
+ // Payment method schema
571
+ const paymentMethodSchema = z.object({
572
+ cardNumber: z.string().min(1, "Card number is required"),
573
+ expiryDate: z.string().min(1, "Expiry date is required"),
574
+ cvv: z.string().min(1, "CVV is required"),
575
+ nameOnCard: z.string().min(1, "Name is required"),
576
+ });
577
+ // Combined checkout schema
578
+ z.object({
579
+ customer: customerSchema,
580
+ shipping: shippingMethodSchema,
581
+ payment: paymentMethodSchema,
582
+ });
583
+
584
+ function CustomerForm({ initialData, onSubmit, onBack, }) {
585
+ const form = useForm({
586
+ resolver: s(customerSchema),
587
+ defaultValues: initialData || {
588
+ email: "",
589
+ marketingConsent: false,
590
+ firstName: "",
591
+ lastName: "",
592
+ apartment: "",
593
+ city: "",
594
+ state: "",
595
+ zipCode: "",
596
+ country: "United States",
597
+ saveInfo: false,
598
+ },
599
+ });
600
+ return (React__default.createElement("div", { className: "space-y-6" },
601
+ React__default.createElement("div", { className: "space-y-2" },
602
+ React__default.createElement("div", { className: "flex items-center justify-between" },
603
+ React__default.createElement("h2", { className: "text-2xl font-bold text-white" }, "Contact")),
604
+ React__default.createElement(FormField, { control: form.control, name: "email", render: ({ field }) => (React__default.createElement(FormItem, null,
605
+ React__default.createElement(FormLabel, { className: "text-white" }, "Email or mobile phone number"),
606
+ React__default.createElement(FormControl, null,
607
+ React__default.createElement(Input, Object.assign({ placeholder: "email@example.com", className: "bg-black border-gray-700 text-white" }, field))),
608
+ React__default.createElement(FormMessage, null))) }),
609
+ React__default.createElement(FormField, { control: form.control, name: "marketingConsent", render: ({ field }) => (React__default.createElement(FormItem, { className: "flex flex-row items-start space-x-2 space-y-0" },
610
+ React__default.createElement(FormControl, null,
611
+ React__default.createElement(Checkbox, { checked: field.value, onCheckedChange: field.onChange, className: "data-[state=checked]:bg-blue-600" })),
612
+ React__default.createElement(FormLabel, { className: "text-sm font-normal text-gray-400" }, "Email me with news and offers"))) }),
613
+ React__default.createElement("div", { className: "flex items-center justify-between" },
614
+ React__default.createElement("h2", { className: "text-2xl font-bold text-white" }, "Shipping customer")),
615
+ React__default.createElement("div", { className: "flex items-center justify-between text-sm" },
616
+ React__default.createElement("div", { className: "text-white" },
617
+ React__default.createElement("span", null, "Contact"),
618
+ React__default.createElement("span", { className: "ml-2 text-gray-400" }, "contactemail")),
619
+ React__default.createElement(Button, { variant: "link", className: "text-blue-500 p-0 h-auto", onClick: onBack }, "Change"))),
620
+ React__default.createElement(Form, Object.assign({}, form),
621
+ React__default.createElement("form", { onSubmit: form.handleSubmit(onSubmit), className: "space-y-4" },
622
+ React__default.createElement(FormField, { control: form.control, name: "country", render: ({ field }) => (React__default.createElement(FormItem, null,
623
+ React__default.createElement(FormLabel, { className: "text-white" }, "Country/Region"),
624
+ React__default.createElement(Select, { onValueChange: field.onChange, defaultValue: field.value },
625
+ React__default.createElement(FormControl, null,
626
+ React__default.createElement(SelectTrigger, { className: "bg-black border-gray-700 text-white" },
627
+ React__default.createElement(SelectValue, { placeholder: "Select a country" }))),
628
+ React__default.createElement(SelectContent, { className: "bg-gray-900 text-white border-gray-700" },
629
+ React__default.createElement(SelectItem, { value: "United States" }, "United States"),
630
+ React__default.createElement(SelectItem, { value: "Canada" }, "Canada"),
631
+ React__default.createElement(SelectItem, { value: "United Kingdom" }, "United Kingdom"))),
632
+ React__default.createElement(FormMessage, null))) }),
633
+ React__default.createElement("div", { className: "grid grid-cols-2 gap-4" },
634
+ React__default.createElement(FormField, { control: form.control, name: "firstName", render: ({ field }) => (React__default.createElement(FormItem, null,
635
+ React__default.createElement(FormLabel, { className: "text-white" }, "First name (optional)"),
636
+ React__default.createElement(FormControl, null,
637
+ React__default.createElement(Input, Object.assign({ className: "bg-black border-gray-700 text-white" }, field))),
638
+ React__default.createElement(FormMessage, null))) }),
639
+ React__default.createElement(FormField, { control: form.control, name: "lastName", render: ({ field }) => (React__default.createElement(FormItem, null,
640
+ React__default.createElement(FormLabel, { className: "text-white" }, "Last name"),
641
+ React__default.createElement(FormControl, null,
642
+ React__default.createElement(Input, Object.assign({ className: "bg-black border-gray-700 text-white" }, field))),
643
+ React__default.createElement(FormMessage, null))) })),
644
+ React__default.createElement(FormField, { control: form.control, name: "apartment", render: ({ field }) => (React__default.createElement(FormItem, null,
645
+ React__default.createElement(FormLabel, { className: "text-white" }, "Apartment, suite, etc. (optional)"),
646
+ React__default.createElement(FormControl, null,
647
+ React__default.createElement(Input, Object.assign({ className: "bg-black border-gray-700 text-white" }, field))),
648
+ React__default.createElement(FormMessage, null))) }),
649
+ React__default.createElement("div", { className: "grid grid-cols-3 gap-4" },
650
+ React__default.createElement(FormField, { control: form.control, name: "city", render: ({ field }) => (React__default.createElement(FormItem, null,
651
+ React__default.createElement(FormLabel, { className: "text-white" }, "City"),
652
+ React__default.createElement(FormControl, null,
653
+ React__default.createElement(Input, Object.assign({ className: "bg-black border-gray-700 text-white" }, field))),
654
+ React__default.createElement(FormMessage, null))) }),
655
+ React__default.createElement(FormField, { control: form.control, name: "state", render: ({ field }) => (React__default.createElement(FormItem, null,
656
+ React__default.createElement(FormLabel, { className: "text-white" }, "State"),
657
+ React__default.createElement(Select, { onValueChange: field.onChange, defaultValue: field.value },
658
+ React__default.createElement(FormControl, null,
659
+ React__default.createElement(SelectTrigger, { className: "bg-black border-gray-700 text-white" },
660
+ React__default.createElement(SelectValue, { placeholder: "State" }))),
661
+ React__default.createElement(SelectContent, { className: "bg-gray-900 text-white border-gray-700" },
662
+ React__default.createElement(SelectItem, { value: "Illinois" }, "Illinois"),
663
+ React__default.createElement(SelectItem, { value: "California" }, "California"),
664
+ React__default.createElement(SelectItem, { value: "New York" }, "New York"),
665
+ React__default.createElement(SelectItem, { value: "Texas" }, "Texas"))),
666
+ React__default.createElement(FormMessage, null))) }),
667
+ React__default.createElement(FormField, { control: form.control, name: "zipCode", render: ({ field }) => (React__default.createElement(FormItem, null,
668
+ React__default.createElement(FormLabel, { className: "text-white" }, "ZIP code"),
669
+ React__default.createElement(FormControl, null,
670
+ React__default.createElement(Input, Object.assign({ className: "bg-black border-gray-700 text-white" }, field))),
671
+ React__default.createElement(FormMessage, null))) })),
672
+ React__default.createElement(FormField, { control: form.control, name: "saveInfo", render: ({ field }) => (React__default.createElement(FormItem, { className: "flex flex-row items-start space-x-2 space-y-0" },
673
+ React__default.createElement(FormControl, null,
674
+ React__default.createElement(Checkbox, { checked: field.value, onCheckedChange: field.onChange, className: "data-[state=checked]:bg-blue-600" })),
675
+ React__default.createElement(FormLabel, { className: "text-sm font-normal text-gray-400" }, "Save this information for next time"))) }),
676
+ React__default.createElement("div", { className: "flex justify-between items-center pt-4" },
677
+ React__default.createElement(Button, { type: "button", variant: "link", className: "text-blue-500 p-0 h-auto flex items-center gap-1", onClick: onBack },
678
+ React__default.createElement(ChevronLeft, { className: "h-4 w-4" }),
679
+ "Return to information"),
680
+ React__default.createElement(Button, { type: "submit", className: "bg-blue-600 hover:bg-blue-700 text-white" }, "Continue to shipping"))))));
681
+ }
682
+
683
+ function PaymentForm({ initialData, onSubmit, onBack, contactEmail, shippingAddress, shippingMethod, shippingPrice, }) {
684
+ const form = useForm({
685
+ resolver: s(paymentMethodSchema),
686
+ defaultValues: initialData || {
687
+ cardNumber: "",
688
+ expiryDate: "",
689
+ cvv: "",
690
+ nameOnCard: "",
691
+ },
692
+ });
693
+ return (React__default.createElement("div", { className: "space-y-6" },
694
+ React__default.createElement("div", { className: "space-y-2" },
695
+ React__default.createElement("div", { className: "flex items-center justify-between" },
696
+ React__default.createElement("h2", { className: "text-2xl font-bold text-white" }, "Payment"),
697
+ React__default.createElement("p", { className: "text-sm text-gray-400" }, "All transactions are secure and encrypted.")),
698
+ React__default.createElement("div", { className: "flex items-center justify-between text-sm" },
699
+ React__default.createElement("div", { className: "text-white" },
700
+ React__default.createElement("span", null, "Contact"),
701
+ React__default.createElement("span", { className: "ml-2 text-gray-400" }, contactEmail)),
702
+ React__default.createElement(Button, { variant: "link", className: "text-blue-500 p-0 h-auto", onClick: onBack }, "Change")),
703
+ React__default.createElement("div", { className: "flex items-center justify-between text-sm" },
704
+ React__default.createElement("div", { className: "text-white" },
705
+ React__default.createElement("span", null, "Ship to"),
706
+ React__default.createElement("span", { className: "ml-2 text-gray-400" }, shippingAddress)),
707
+ React__default.createElement(Button, { variant: "link", className: "text-blue-500 p-0 h-auto", onClick: onBack }, "Change")),
708
+ React__default.createElement("div", { className: "flex items-center justify-between text-sm" },
709
+ React__default.createElement("div", { className: "text-white" },
710
+ React__default.createElement("span", null, "Shipping method"),
711
+ React__default.createElement("span", { className: "ml-2 text-gray-400" },
712
+ shippingMethod,
713
+ " \u00B7 ",
714
+ shippingPrice)),
715
+ React__default.createElement(Button, { variant: "link", className: "text-blue-500 p-0 h-auto", onClick: onBack }, "Change"))),
716
+ React__default.createElement("div", { className: "space-y-4 bg-gray-900 p-4 rounded-md" },
717
+ React__default.createElement("div", { className: "text-white font-medium" }, "Payment method"),
718
+ React__default.createElement(Form, Object.assign({}, form),
719
+ React__default.createElement("form", { onSubmit: form.handleSubmit(onSubmit), className: "space-y-4" },
720
+ React__default.createElement(FormField, { control: form.control, name: "cardNumber", render: ({ field }) => (React__default.createElement(FormItem, null,
721
+ React__default.createElement(FormLabel, { className: "text-white" }, "Card number"),
722
+ React__default.createElement(FormControl, null,
723
+ React__default.createElement(Input, Object.assign({ placeholder: "1234 5678 9012 3456", className: "bg-black border-gray-700 text-white" }, field))),
724
+ React__default.createElement(FormMessage, null))) }),
725
+ React__default.createElement("div", { className: "grid grid-cols-2 gap-4" },
726
+ React__default.createElement(FormField, { control: form.control, name: "expiryDate", render: ({ field }) => (React__default.createElement(FormItem, null,
727
+ React__default.createElement(FormLabel, { className: "text-white" }, "Expiration date (MM/YY)"),
728
+ React__default.createElement(FormControl, null,
729
+ React__default.createElement(Input, Object.assign({ placeholder: "MM/YY", className: "bg-black border-gray-700 text-white" }, field))),
730
+ React__default.createElement(FormMessage, null))) }),
731
+ React__default.createElement(FormField, { control: form.control, name: "cvv", render: ({ field }) => (React__default.createElement(FormItem, null,
732
+ React__default.createElement(FormLabel, { className: "text-white" }, "Security code"),
733
+ React__default.createElement(FormControl, null,
734
+ React__default.createElement(Input, Object.assign({ placeholder: "CVV", className: "bg-black border-gray-700 text-white" }, field))),
735
+ React__default.createElement(FormMessage, null))) })),
736
+ React__default.createElement(FormField, { control: form.control, name: "nameOnCard", render: ({ field }) => (React__default.createElement(FormItem, null,
737
+ React__default.createElement(FormLabel, { className: "text-white" }, "Name on card"),
738
+ React__default.createElement(FormControl, null,
739
+ React__default.createElement(Input, Object.assign({ placeholder: "Name as it appears on card", className: "bg-black border-gray-700 text-white" }, field))),
740
+ React__default.createElement(FormMessage, null))) }),
741
+ React__default.createElement("div", { className: "flex justify-between items-center pt-4" },
742
+ React__default.createElement(Button, { type: "button", variant: "link", className: "text-blue-500 p-0 h-auto flex items-center gap-1", onClick: onBack },
743
+ React__default.createElement(ChevronLeft, { className: "h-4 w-4" }),
744
+ "Return to shipping"),
745
+ React__default.createElement(Button, { type: "submit", className: "bg-blue-600 hover:bg-blue-700 text-white" }, "Pay now")))))));
746
+ }
747
+
748
+ function RadioGroup(_a) {
749
+ var { className } = _a, props = __rest(_a, ["className"]);
750
+ return (React.createElement(RadioGroupPrimitive.Root, Object.assign({ "data-slot": "radio-group", className: cn("grid gap-3", className) }, props)));
751
+ }
752
+ function RadioGroupItem(_a) {
753
+ var { className } = _a, props = __rest(_a, ["className"]);
754
+ return (React.createElement(RadioGroupPrimitive.Item, Object.assign({ "data-slot": "radio-group-item", className: cn("border-input text-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive aspect-square size-4 shrink-0 rounded-full border shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50", className) }, props),
755
+ React.createElement(RadioGroupPrimitive.Indicator, { "data-slot": "radio-group-indicator", className: "relative flex items-center justify-center" },
756
+ React.createElement(CircleIcon, { className: "fill-primary absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2" }))));
757
+ }
758
+
759
+ function ShippingMethodForm({ initialData, onSubmit, onBack, contactEmail, shippingAddress, }) {
760
+ const form = useForm({
761
+ resolver: s(shippingMethodSchema),
762
+ defaultValues: initialData || {
763
+ method: "economy",
764
+ },
765
+ });
766
+ return (React__default.createElement("div", { className: "space-y-6" },
767
+ React__default.createElement("div", { className: "space-y-2" },
768
+ React__default.createElement("div", { className: "flex items-center justify-between" },
769
+ React__default.createElement("h2", { className: "text-2xl font-bold text-white" }, "Shipping method")),
770
+ React__default.createElement("div", { className: "flex items-center justify-between text-sm" },
771
+ React__default.createElement("div", { className: "text-white" },
772
+ React__default.createElement("span", null, "Contact"),
773
+ React__default.createElement("span", { className: "ml-2 text-gray-400" }, contactEmail)),
774
+ React__default.createElement(Button, { variant: "link", className: "text-blue-500 p-0 h-auto", onClick: onBack }, "Change")),
775
+ React__default.createElement("div", { className: "flex items-center justify-between text-sm" },
776
+ React__default.createElement("div", { className: "text-white" },
777
+ React__default.createElement("span", null, "Ship to"),
778
+ React__default.createElement("span", { className: "ml-2 text-gray-400" }, shippingAddress)),
779
+ React__default.createElement(Button, { variant: "link", className: "text-blue-500 p-0 h-auto", onClick: onBack }, "Change"))),
780
+ React__default.createElement(Form, Object.assign({}, form),
781
+ React__default.createElement("form", { onSubmit: form.handleSubmit(onSubmit), className: "space-y-4" },
782
+ React__default.createElement(FormField, { control: form.control, name: "method", render: ({ field }) => (React__default.createElement(FormItem, null,
783
+ React__default.createElement(FormControl, null,
784
+ React__default.createElement(RadioGroup, { onValueChange: field.onChange, defaultValue: field.value, className: "space-y-3" },
785
+ React__default.createElement(FormItem, { className: "flex items-center justify-between space-x-3 space-y-0 rounded-md border border-gray-700 p-4 cursor-pointer data-[state=checked]:border-blue-600" },
786
+ React__default.createElement("div", { className: "flex items-center space-x-3" },
787
+ React__default.createElement(FormControl, null,
788
+ React__default.createElement(RadioGroupItem, { value: "economy", className: "data-[state=checked]:border-blue-600 data-[state=checked]:text-blue-600" })),
789
+ React__default.createElement("div", { className: "space-y-1" },
790
+ React__default.createElement(FormLabel, { className: "text-white" }, "Economy"),
791
+ React__default.createElement("div", { className: "text-sm text-gray-400" }, "5 to 8 business days"))),
792
+ React__default.createElement("div", { className: "text-white font-medium" }, "$4.90")),
793
+ React__default.createElement(FormItem, { className: "flex items-center justify-between space-x-3 space-y-0 rounded-md border border-gray-700 p-4 cursor-pointer data-[state=checked]:border-blue-600" },
794
+ React__default.createElement("div", { className: "flex items-center space-x-3" },
795
+ React__default.createElement(FormControl, null,
796
+ React__default.createElement(RadioGroupItem, { value: "standard", className: "data-[state=checked]:border-blue-600 data-[state=checked]:text-blue-600" })),
797
+ React__default.createElement("div", { className: "space-y-1" },
798
+ React__default.createElement(FormLabel, { className: "text-white" }, "Standard"),
799
+ React__default.createElement("div", { className: "text-sm text-gray-400" }, "3 to 4 business days"))),
800
+ React__default.createElement("div", { className: "text-white font-medium" }, "$6.90")))),
801
+ React__default.createElement(FormMessage, null))) }),
802
+ React__default.createElement("div", { className: "flex justify-between items-center pt-4" },
803
+ React__default.createElement(Button, { type: "button", variant: "link", className: "text-blue-500 p-0 h-auto flex items-center gap-1", onClick: onBack },
804
+ React__default.createElement(ChevronLeft, { className: "h-4 w-4" }),
805
+ "Return to information"),
806
+ React__default.createElement(Button, { type: "submit", className: "bg-blue-600 hover:bg-blue-700 text-white" }, "Continue to payment"))))));
807
+ }
808
+
809
+ function useLocalStorage(key, initialValue) {
810
+ // Create state to store our value
811
+ const [storedValue, setStoredValue] = useState(initialValue);
812
+ // Initialize state on client-side only
813
+ useEffect(() => {
814
+ try {
815
+ // Get from local storage by key
816
+ const item = window.localStorage.getItem(key);
817
+ // Parse stored json or if none return initialValue
818
+ setStoredValue(item ? JSON.parse(item) : initialValue);
819
+ }
820
+ catch (error) {
821
+ // If error, just use the initialValue
822
+ console.error(error);
823
+ setStoredValue(initialValue);
824
+ }
825
+ }, [initialValue, key]);
826
+ // Return a wrapped version of useState's setter function that
827
+ // persists the new value to localStorage.
828
+ const setValue = (value) => {
829
+ try {
830
+ // Allow value to be a function so we have the same API as useState
831
+ const valueToStore = value instanceof Function ? value(storedValue) : value;
832
+ // Save state
833
+ setStoredValue(valueToStore);
834
+ // Save to local storage
835
+ if (typeof window !== "undefined") {
836
+ window.localStorage.setItem(key, JSON.stringify(valueToStore));
837
+ }
838
+ }
839
+ catch (error) {
840
+ // A more advanced implementation would handle the error case
841
+ console.error(error);
842
+ }
843
+ };
844
+ return [storedValue, setValue];
845
+ }
846
+
847
+ function CheckoutForm$2({ checkoutId, onComplete, }) {
848
+ const [step, setStep] = useState("contact");
849
+ const [formData, setFormData] = useLocalStorage(`checkout-${checkoutId}`, {});
850
+ // Helper function to format address for display
851
+ const formatAddress = (address) => {
852
+ return `${address.address}, ${address.city} ${address.state} ${address.zipCode}, ${address.country}`;
853
+ };
854
+ // Format shipping method for display
855
+ const formatShippingMethod = (method) => {
856
+ switch (method) {
857
+ case "economy":
858
+ return { name: "Economy", price: "$4.90" };
859
+ case "standard":
860
+ return { name: "Standard", price: "$6.90" };
861
+ default:
862
+ return { name: "Economy", price: "$4.90" };
863
+ }
864
+ };
865
+ // Handle address form submission
866
+ const handleCustomerSubmit = (data) => {
867
+ setFormData(Object.assign(Object.assign({}, formData), { customer: data }));
868
+ setStep("shipping");
869
+ };
870
+ // Handle shipping method form submission
871
+ const handleShippingSubmit = (data) => {
872
+ setFormData(Object.assign(Object.assign({}, formData), { shipping: data }));
873
+ setStep("payment");
874
+ };
875
+ // Handle payment form submission
876
+ const handlePaymentSubmit = (data) => {
877
+ const completeFormData = Object.assign(Object.assign({}, formData), { payment: data });
878
+ setFormData(completeFormData);
879
+ if (onComplete) {
880
+ onComplete(completeFormData);
881
+ }
882
+ };
883
+ // Navigate back to previous step
884
+ const handleBack = () => {
885
+ if (step === "customer")
886
+ setStep("customer");
887
+ if (step === "shipping")
888
+ setStep("customer");
889
+ if (step === "payment")
890
+ setStep("shipping");
891
+ };
892
+ return (React__default.createElement("div", { className: "space-y-6" },
893
+ step === "customer" && (React__default.createElement(CustomerForm, { initialData: formData.customer, onSubmit: handleCustomerSubmit, onBack: handleBack })),
894
+ step === "shipping" && formData.customer && (React__default.createElement(ShippingMethodForm, { initialData: formData.shipping, onSubmit: handleShippingSubmit, onBack: handleBack, contactEmail: formData.customer.email, shippingAddress: formatAddress(formData.customer) })),
895
+ step === "payment" &&
896
+ formData.customer &&
897
+ formData.customer &&
898
+ formData.shipping && (React__default.createElement(PaymentForm, { initialData: formData.payment, onSubmit: handlePaymentSubmit, onBack: handleBack, contactEmail: formData.customer.email, shippingAddress: formatAddress(formData.customer), shippingMethod: formatShippingMethod(formData.shipping.method).name, shippingPrice: formatShippingMethod(formData.shipping.method).price }))));
899
+ }
900
+
274
901
  function CheckoutSummary({ lineItems, shipping, tax, currency, }) {
275
902
  const subtotal = lineItems.reduce((acc, item) => {
276
903
  var _a, _b;
@@ -280,37 +907,36 @@ function CheckoutSummary({ lineItems, shipping, tax, currency, }) {
280
907
  const formatPrice = (cents) => {
281
908
  return `${(cents / 100).toFixed(2)} ${currency}`;
282
909
  };
283
- return (React.createElement("div", { className: "bg-black text-white p-6 rounded-lg" },
910
+ return (React__default.createElement("div", { className: "bg-black text-white p-6 rounded-lg" },
284
911
  lineItems.map((item, index) => {
285
912
  var _a, _b, _c, _d, _e;
286
- return (React.createElement("div", { key: index, className: "flex items-center mb-6" },
287
- React.createElement("div", { className: "relative" },
288
- React.createElement("div", { className: "w-16 h-16 bg-zinc-900 rounded-lg overflow-hidden relative" }, ((_a = item.product) === null || _a === void 0 ? void 0 : _a.images[0]) ? (React.createElement("img", { src: item.product.images[0] || "/placeholder.svg", alt: ((_b = item.product) === null || _b === void 0 ? void 0 : _b.title) || "Product image", className: "object-cover" })) : (React.createElement("div", { className: "w-full h-full flex items-center justify-center bg-zinc-800" },
289
- React.createElement("span", { className: "text-zinc-500" }, "No image")))),
290
- React.createElement("div", { className: "absolute -top-2 -right-2 w-6 h-6 bg-zinc-700 rounded-full flex items-center justify-center text-sm" }, item.quantity)),
291
- React.createElement("div", { className: "ml-4 flex-1" },
292
- React.createElement("h3", { className: "text-lg font-medium" }, ((_c = item.product) === null || _c === void 0 ? void 0 : _c.title) || "Product"),
293
- React.createElement("p", { className: "text-zinc-400 text-sm" }, item.variantOptions.map((option) => option.name).join(" / "))),
294
- React.createElement("div", { className: "text-right" },
295
- React.createElement("p", { className: "text-lg font-medium" }, formatPrice((_e = (_d = item.product) === null || _d === void 0 ? void 0 : _d.priceInCents) !== null && _e !== void 0 ? _e : 0)))));
913
+ return (React__default.createElement("div", { key: index, className: "flex items-center mb-6" },
914
+ React__default.createElement("div", { className: "relative" },
915
+ React__default.createElement("div", { className: "w-16 h-16 bg-zinc-900 rounded-lg overflow-hidden relative" }, ((_a = item.product) === null || _a === void 0 ? void 0 : _a.images[0]) && (React__default.createElement("img", { src: item.product.images[0] || "/placeholder.svg", alt: ((_b = item.product) === null || _b === void 0 ? void 0 : _b.title) || "Product image", className: "object-cover" }))),
916
+ React__default.createElement("div", { className: "absolute -top-2 -right-2 w-6 h-6 bg-zinc-700 rounded-full flex items-center justify-center text-sm" }, item.quantity)),
917
+ React__default.createElement("div", { className: "ml-4 flex-1" },
918
+ React__default.createElement("h3", { className: "text-lg font-medium" }, ((_c = item.product) === null || _c === void 0 ? void 0 : _c.title) || "Product"),
919
+ React__default.createElement("p", { className: "text-zinc-400 text-sm" }, item.variantOptions.map((option) => option.name).join(" / "))),
920
+ React__default.createElement("div", { className: "text-right" },
921
+ React__default.createElement("p", { className: "text-lg font-medium" }, formatPrice((_e = (_d = item.product) === null || _d === void 0 ? void 0 : _d.priceInCents) !== null && _e !== void 0 ? _e : 0)))));
296
922
  }),
297
- React.createElement("div", { className: "border-t border-zinc-800 pt-4 mt-2" },
298
- React.createElement("div", { className: "flex justify-between py-2" },
299
- React.createElement("span", { className: "text-lg" }, "Subtotal"),
300
- React.createElement("span", { className: "text-lg" }, formatPrice(subtotal))),
301
- React.createElement("div", { className: "flex justify-between py-2" },
302
- React.createElement("span", { className: "text-lg" }, "Shipping"),
303
- React.createElement("span", { className: "text-zinc-400" }, shipping !== undefined
923
+ React__default.createElement("div", { className: "border-t border-zinc-800 pt-4 mt-2" },
924
+ React__default.createElement("div", { className: "flex justify-between py-2" },
925
+ React__default.createElement("span", { className: "text-lg" }, "Subtotal"),
926
+ React__default.createElement("span", { className: "text-lg" }, formatPrice(subtotal))),
927
+ React__default.createElement("div", { className: "flex justify-between py-2" },
928
+ React__default.createElement("span", { className: "text-lg" }, "Shipping"),
929
+ React__default.createElement("span", { className: "text-zinc-400" }, shipping !== undefined
304
930
  ? formatPrice(shipping)
305
931
  : "Calculated at next step")),
306
- tax !== undefined && (React.createElement("div", { className: "flex justify-between py-2" },
307
- React.createElement("span", { className: "text-lg" }, "Tax"),
308
- React.createElement("span", { className: "text-lg" }, formatPrice(tax)))),
309
- React.createElement("div", { className: "flex justify-between py-4 mt-2 border-t border-zinc-800 items-center" },
310
- React.createElement("span", { className: "text-2xl font-bold" }, "Total"),
311
- React.createElement("div", { className: "text-right" },
312
- React.createElement("span", { className: "text-zinc-400 text-sm mr-2" }, currency),
313
- React.createElement("span", { className: "text-2xl font-bold" }, formatPrice(total)))))));
932
+ tax !== undefined && (React__default.createElement("div", { className: "flex justify-between py-2" },
933
+ React__default.createElement("span", { className: "text-lg" }, "Tax"),
934
+ React__default.createElement("span", { className: "text-lg" }, formatPrice(tax)))),
935
+ React__default.createElement("div", { className: "flex justify-between py-4 mt-2 border-t border-zinc-800 items-center" },
936
+ React__default.createElement("span", { className: "text-2xl font-bold" }, "Total"),
937
+ React__default.createElement("div", { className: "text-right" },
938
+ React__default.createElement("span", { className: "text-zinc-400 text-sm mr-2" }, currency),
939
+ React__default.createElement("span", { className: "text-2xl font-bold" }, formatPrice(total)))))));
314
940
  }
315
941
 
316
942
  function CheckoutEmbed({ checkoutId }) {
@@ -334,16 +960,16 @@ function CheckoutEmbed({ checkoutId }) {
334
960
  }
335
961
  fetchCheckout();
336
962
  }, [checkoutId]);
337
- if (loading) {
338
- return React.createElement("div", null, "Loading...");
339
- }
340
- if (!checkout) {
341
- return React.createElement("div", null, "Checkout not found");
963
+ const handleComplete = (formData) => {
964
+ console.log("Checkout complete:", formData);
965
+ // Here you would typically send the completed form data to your API
966
+ };
967
+ if (!checkout && !loading) {
968
+ return React__default.createElement("div", null, "Checkout not found");
342
969
  }
343
- return (React.createElement("div", { className: "grid md:grid-cols-2 gap-4" },
344
- React.createElement("div", null, "forms here"),
345
- React.createElement("div", null,
346
- React.createElement(CheckoutSummary, { currency: checkout.currency, lineItems: checkout.lineItems, shipping: checkout === null || checkout === void 0 ? void 0 : checkout.shipping, tax: checkout === null || checkout === void 0 ? void 0 : checkout.tax }))));
970
+ return (React__default.createElement("div", { className: "grid md:grid-cols-2 gap-4" },
971
+ React__default.createElement("div", null, loading ? (React__default.createElement("div", { className: "text-white" }, "Loading...")) : (React__default.createElement(CheckoutForm$2, { checkoutId: checkoutId, onComplete: handleComplete }))),
972
+ React__default.createElement("div", null, loading ? (React__default.createElement("div", null, "Loading...")) : (React__default.createElement(CheckoutSummary, { currency: checkout.currency, lineItems: checkout.lineItems, shipping: checkout === null || checkout === void 0 ? void 0 : checkout.shipping, tax: checkout === null || checkout === void 0 ? void 0 : checkout.tax })))));
347
973
  }
348
974
  var index$1 = memo(CheckoutEmbed);
349
975
 
@@ -380,10 +1006,10 @@ const CheckoutForm = ({ onSuccess, onError, children, }) => {
380
1006
  setErrorMessage(undefined);
381
1007
  setIsSubmitting(false);
382
1008
  });
383
- return (React.createElement("form", { onSubmit: handleSubmit },
384
- React.createElement("div", null,
385
- React.createElement(PaymentElement$1, null),
386
- React.createElement("p", { className: "text-red-500" }, errorMessage)),
1009
+ return (React__default.createElement("form", { onSubmit: handleSubmit },
1010
+ React__default.createElement("div", null,
1011
+ React__default.createElement(PaymentElement$1, null),
1012
+ React__default.createElement("p", { className: "text-red-500" }, errorMessage)),
387
1013
  children));
388
1014
  };
389
1015
  var CheckoutForm$1 = memo(CheckoutForm);
@@ -392,9 +1018,39 @@ const publicStripeKey = "pk_test_51OjSZ2JoDmiuDQz4Vub296KIgTCy4y8NJos59h93bq3sLe
392
1018
  const stripePromise = loadStripe(publicStripeKey);
393
1019
  function PaymentElement({ paymentSecret, checkoutAppearance, onSuccess, onError, children, }) {
394
1020
  const options = Object.assign(Object.assign({ locale: "en" }, (checkoutAppearance ? checkoutAppearance : {})), { clientSecret: paymentSecret });
395
- return (React.createElement(Elements, { stripe: stripePromise, options: options },
396
- React.createElement(CheckoutForm$1, { onSuccess: onSuccess, onError: onError, children: children })));
1021
+ return (React__default.createElement(Elements, { stripe: stripePromise, options: options },
1022
+ React__default.createElement(CheckoutForm$1, { onSuccess: onSuccess, onError: onError, children: children })));
397
1023
  }
398
1024
  var index = memo(PaymentElement);
399
1025
 
1026
+ function styleInject(css, ref) {
1027
+ if ( ref === void 0 ) ref = {};
1028
+ var insertAt = ref.insertAt;
1029
+
1030
+ if (typeof document === 'undefined') { return; }
1031
+
1032
+ var head = document.head || document.getElementsByTagName('head')[0];
1033
+ var style = document.createElement('style');
1034
+ style.type = 'text/css';
1035
+
1036
+ if (insertAt === 'top') {
1037
+ if (head.firstChild) {
1038
+ head.insertBefore(style, head.firstChild);
1039
+ } else {
1040
+ head.appendChild(style);
1041
+ }
1042
+ } else {
1043
+ head.appendChild(style);
1044
+ }
1045
+
1046
+ if (style.styleSheet) {
1047
+ style.styleSheet.cssText = css;
1048
+ } else {
1049
+ style.appendChild(document.createTextNode(css));
1050
+ }
1051
+ }
1052
+
1053
+ var css_248z = "/*! tailwindcss v4.0.12 | MIT License | https://tailwindcss.com */@layer theme, base, components, utilities;@layer theme{:host,:root{--font-sans:ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace;--color-red-500:oklch(0.637 0.237 25.331);--color-blue-500:oklch(0.623 0.214 259.815);--color-blue-600:oklch(0.546 0.245 262.881);--color-blue-700:oklch(0.488 0.243 264.376);--color-gray-400:oklch(0.707 0.022 261.325);--color-gray-700:oklch(0.373 0.034 259.733);--color-gray-900:oklch(0.21 0.034 264.665);--color-zinc-400:oklch(0.705 0.015 286.067);--color-zinc-700:oklch(0.37 0.013 285.805);--color-zinc-800:oklch(0.274 0.006 286.033);--color-zinc-900:oklch(0.21 0.006 285.885);--color-black:#000;--color-white:#fff;--spacing:0.25rem;--text-sm:0.875rem;--text-sm--line-height:1.42857;--text-base:1rem;--text-base--line-height:1.5;--text-lg:1.125rem;--text-lg--line-height:1.55556;--text-2xl:1.5rem;--text-2xl--line-height:1.33333;--font-weight-normal:400;--font-weight-medium:500;--font-weight-bold:700;--default-transition-duration:150ms;--default-transition-timing-function:cubic-bezier(0.4,0,0.2,1);--default-font-family:var(--font-sans);--default-font-feature-settings:var(--font-sans--font-feature-settings);--default-font-variation-settings:var(\n --font-sans--font-variation-settings\n );--default-mono-font-family:var(--font-mono);--default-mono-font-feature-settings:var(\n --font-mono--font-feature-settings\n );--default-mono-font-variation-settings:var(\n --font-mono--font-variation-settings\n )}}@layer base{*,::backdrop,::file-selector-button,:after,:before{border:0 solid;box-sizing:border-box;margin:0;padding:0}:host,html{-webkit-text-size-adjust:100%;font-feature-settings:var(--default-font-feature-settings,normal);-webkit-tap-highlight-color:transparent;font-family:var( --default-font-family,ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\" );font-variation-settings:var( --default-font-variation-settings,normal );line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4}body{line-height:inherit}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-feature-settings:var( --default-mono-font-feature-settings,normal );font-family:var( --default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace );font-size:1em;font-variation-settings:var( --default-mono-font-variation-settings,normal )}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}menu,ol,ul{list-style:none}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}::file-selector-button,button,input,optgroup,select,textarea{font-feature-settings:inherit;background-color:transparent;border-radius:0;color:inherit;font:inherit;font-variation-settings:inherit;letter-spacing:inherit;opacity:1}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::-moz-placeholder{color:color-mix(in oklab,currentColor 50%,transparent);opacity:1}::placeholder{color:color-mix(in oklab,currentColor 50%,transparent);opacity:1}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-meridiem-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-year-field{padding-block:0}:-moz-ui-invalid{box-shadow:none}::file-selector-button,button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer utilities{.pointer-events-none{pointer-events:none}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.-top-2{top:calc(var(--spacing)*-2)}.top-1\\/2{top:50%}.-right-2{right:calc(var(--spacing)*-2)}.right-2{right:calc(var(--spacing)*2)}.left-1\\/2{left:50%}.z-50{z-index:50}.-mx-1{margin-inline:calc(var(--spacing)*-1)}.my-1{margin-block:calc(var(--spacing)*1)}.mt-2{margin-top:calc(var(--spacing)*2)}.mr-2{margin-right:calc(var(--spacing)*2)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.ml-2{margin-left:calc(var(--spacing)*2)}.ml-4{margin-left:calc(var(--spacing)*4)}.flex{display:flex}.grid{display:grid}.inline-flex{display:inline-flex}.aspect-square{aspect-ratio:1/1}.size-2{height:calc(var(--spacing)*2);width:calc(var(--spacing)*2)}.size-3\\.5{height:calc(var(--spacing)*3.5);width:calc(var(--spacing)*3.5)}.size-4{height:calc(var(--spacing)*4);width:calc(var(--spacing)*4)}.size-9{height:calc(var(--spacing)*9);width:calc(var(--spacing)*9)}.h-4{height:calc(var(--spacing)*4)}.h-6{height:calc(var(--spacing)*6)}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-10{height:calc(var(--spacing)*10)}.h-16{height:calc(var(--spacing)*16)}.h-\\[var\\(--radix-select-trigger-height\\)\\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-px{height:1px}.max-h-96{max-height:calc(var(--spacing)*96)}.w-4{width:calc(var(--spacing)*4)}.w-6{width:calc(var(--spacing)*6)}.w-16{width:calc(var(--spacing)*16)}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-\\[8rem\\]{min-width:8rem}.min-w-\\[var\\(--radix-select-trigger-width\\)\\]{min-width:var(--radix-select-trigger-width)}.flex-1{flex:1}.shrink-0{flex-shrink:0}.-translate-x-1\\/2{--tw-translate-x:-50%}.-translate-x-1\\/2,.-translate-y-1\\/2{translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\\/2{--tw-translate-y:-50%}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.scroll-my-1{scroll-margin-block:calc(var(--spacing)*1)}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.flex-row{flex-direction:row}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.space-y-0{:where(&>:not(:last-child)){--tw-space-y-reverse:0;margin-block-end:calc(var(--spacing)*0*(1 - var(--tw-space-y-reverse)));margin-block-start:calc(var(--spacing)*0*var(--tw-space-y-reverse))}}.space-y-1{:where(&>:not(:last-child)){--tw-space-y-reverse:0;margin-block-end:calc(var(--spacing)*1*(1 - var(--tw-space-y-reverse)));margin-block-start:calc(var(--spacing)*1*var(--tw-space-y-reverse))}}.space-y-2{:where(&>:not(:last-child)){--tw-space-y-reverse:0;margin-block-end:calc(var(--spacing)*2*(1 - var(--tw-space-y-reverse)));margin-block-start:calc(var(--spacing)*2*var(--tw-space-y-reverse))}}.space-y-3{:where(&>:not(:last-child)){--tw-space-y-reverse:0;margin-block-end:calc(var(--spacing)*3*(1 - var(--tw-space-y-reverse)));margin-block-start:calc(var(--spacing)*3*var(--tw-space-y-reverse))}}.space-y-4{:where(&>:not(:last-child)){--tw-space-y-reverse:0;margin-block-end:calc(var(--spacing)*4*(1 - var(--tw-space-y-reverse)));margin-block-start:calc(var(--spacing)*4*var(--tw-space-y-reverse))}}.space-y-6{:where(&>:not(:last-child)){--tw-space-y-reverse:0;margin-block-end:calc(var(--spacing)*6*(1 - var(--tw-space-y-reverse)));margin-block-start:calc(var(--spacing)*6*var(--tw-space-y-reverse))}}.space-x-2{:where(&>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-end:calc(var(--spacing)*2*(1 - var(--tw-space-x-reverse)));margin-inline-start:calc(var(--spacing)*2*var(--tw-space-x-reverse))}}.space-x-3{:where(&>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-end:calc(var(--spacing)*3*(1 - var(--tw-space-x-reverse)));margin-inline-start:calc(var(--spacing)*3*var(--tw-space-x-reverse))}}.overflow-hidden{overflow:hidden}.rounded-\\[4px\\]{border-radius:4px}.rounded-full{border-radius:calc(infinity * 1px)}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-gray-700{border-color:var(--color-gray-700)}.border-input{border-color:var(--input)}.border-zinc-800{border-color:var(--color-zinc-800)}.bg-background{background-color:var(--background)}.bg-black{background-color:var(--color-black)}.bg-blue-600{background-color:var(--color-blue-600)}.bg-border{background-color:var(--border)}.bg-destructive{background-color:var(--destructive)}.bg-gray-900{background-color:var(--color-gray-900)}.bg-popover{background-color:var(--popover)}.bg-primary{background-color:var(--primary)}.bg-secondary{background-color:var(--secondary)}.bg-transparent{background-color:transparent}.bg-zinc-700{background-color:var(--color-zinc-700)}.bg-zinc-900{background-color:var(--color-zinc-900)}.fill-primary{fill:var(--primary)}.object-cover{-o-object-fit:cover;object-fit:cover}.p-0{padding:calc(var(--spacing)*0)}.p-1{padding:calc(var(--spacing)*1)}.p-4{padding:calc(var(--spacing)*4)}.p-6{padding:calc(var(--spacing)*6)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-6{padding-inline:calc(var(--spacing)*6)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-4{padding-block:calc(var(--spacing)*4)}.pt-4{padding-top:calc(var(--spacing)*4)}.pr-8{padding-right:calc(var(--spacing)*8)}.pl-2{padding-left:calc(var(--spacing)*2)}.text-right{text-align:right}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.leading-none{--tw-leading:1;line-height:1}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.whitespace-nowrap{white-space:nowrap}.text-blue-500{color:var(--color-blue-500)}.text-current{color:currentColor}.text-destructive-foreground{color:var(--destructive-foreground)}.text-gray-400{color:var(--color-gray-400)}.text-muted-foreground{color:var(--muted-foreground)}.text-popover-foreground{color:var(--popover-foreground)}.text-primary{color:var(--primary)}.text-primary-foreground{color:var(--primary-foreground)}.text-red-500{color:var(--color-red-500)}.text-secondary-foreground{color:var(--secondary-foreground)}.text-white{color:var(--color-white)}.text-zinc-400{color:var(--color-zinc-400)}.underline-offset-4{text-underline-offset:4px}.opacity-50{opacity:50%}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,rgba(0,0,0,.1)),0 2px 4px -2px var(--tw-shadow-color,rgba(0,0,0,.1))}.shadow-md,.shadow-xs{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,rgba(0,0,0,.05))}.outline-hidden{--tw-outline-style:none;outline-style:none;@media (forced-colors:active){outline:2px solid transparent;outline-offset:2px}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.transition-\\[color\\,box-shadow\\]{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-shadow{transition-duration:var(--tw-duration,var(--default-transition-duration));transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function))}.transition-none{transition-property:none}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.group-data-\\[disabled\\=true\\]\\:pointer-events-none{&:is(:where(.group)[data-disabled=true] *){pointer-events:none}}.group-data-\\[disabled\\=true\\]\\:opacity-50{&:is(:where(.group)[data-disabled=true] *){opacity:50%}}.peer-disabled\\:cursor-not-allowed{&:is(:where(.peer):disabled~*){cursor:not-allowed}}.peer-disabled\\:opacity-50{&:is(:where(.peer):disabled~*){opacity:50%}}.selection\\:bg-primary{& ::-moz-selection{background-color:var(--primary)}& ::selection{background-color:var(--primary)}&::-moz-selection{background-color:var(--primary)}&::selection{background-color:var(--primary)}}.selection\\:text-primary-foreground{& ::-moz-selection{color:var(--primary-foreground)}& ::selection{color:var(--primary-foreground)}&::-moz-selection{color:var(--primary-foreground)}&::selection{color:var(--primary-foreground)}}.file\\:inline-flex{&::file-selector-button{display:inline-flex}}.file\\:h-7{&::file-selector-button{height:calc(var(--spacing)*7)}}.file\\:border-0{&::file-selector-button{border-style:var(--tw-border-style);border-width:0}}.file\\:bg-transparent{&::file-selector-button{background-color:transparent}}.file\\:text-sm{&::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}.file\\:font-medium{&::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}}.file\\:text-foreground{&::file-selector-button{color:var(--foreground)}}.placeholder\\:text-muted-foreground{&::-moz-placeholder{color:var(--muted-foreground)}&::placeholder{color:var(--muted-foreground)}}.hover\\:bg-accent{&:hover{@media (hover:hover){background-color:var(--accent)}}}.hover\\:bg-blue-700{&:hover{@media (hover:hover){background-color:var(--color-blue-700)}}}.hover\\:bg-destructive\\/90{&:hover{@media (hover:hover){background-color:color-mix(in oklab,var(--destructive) 90%,transparent)}}}.hover\\:bg-primary\\/90{&:hover{@media (hover:hover){background-color:color-mix(in oklab,var(--primary) 90%,transparent)}}}.hover\\:bg-secondary\\/80{&:hover{@media (hover:hover){background-color:color-mix(in oklab,var(--secondary) 80%,transparent)}}}.hover\\:text-accent-foreground{&:hover{@media (hover:hover){color:var(--accent-foreground)}}}.hover\\:underline{&:hover{@media (hover:hover){text-decoration-line:underline}}}.focus\\:bg-accent{&:focus{background-color:var(--accent)}}.focus\\:text-accent-foreground{&:focus{color:var(--accent-foreground)}}.focus-visible\\:border-ring{&:focus-visible{border-color:var(--ring)}}.focus-visible\\:ring-\\[3px\\]{&:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentColor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}.focus-visible\\:ring-destructive\\/20{&:focus-visible{--tw-ring-color:color-mix(in oklab,var(--destructive) 20%,transparent)}}.focus-visible\\:ring-ring\\/50{&:focus-visible{--tw-ring-color:color-mix(in oklab,var(--ring) 50%,transparent)}}.disabled\\:pointer-events-none{&:disabled{pointer-events:none}}.disabled\\:cursor-not-allowed{&:disabled{cursor:not-allowed}}.disabled\\:opacity-50{&:disabled{opacity:50%}}.has-\\[\\>svg\\]\\:px-2\\.5{&:has(>svg){padding-inline:calc(var(--spacing)*2.5)}}.has-\\[\\>svg\\]\\:px-3{&:has(>svg){padding-inline:calc(var(--spacing)*3)}}.has-\\[\\>svg\\]\\:px-4{&:has(>svg){padding-inline:calc(var(--spacing)*4)}}.aria-invalid\\:border-destructive{&[aria-invalid=true]{border-color:var(--destructive)}}.aria-invalid\\:ring-destructive\\/20{&[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--destructive) 20%,transparent)}}.data-\\[disabled\\]\\:pointer-events-none{&[data-disabled]{pointer-events:none}}.data-\\[disabled\\]\\:opacity-50{&[data-disabled]{opacity:50%}}.data-\\[error\\=true\\]\\:text-destructive-foreground{&[data-error=true]{color:var(--destructive-foreground)}}.data-\\[placeholder\\]\\:text-muted-foreground{&[data-placeholder]{color:var(--muted-foreground)}}.data-\\[side\\=bottom\\]\\:translate-y-1{&[data-side=bottom]{--tw-translate-y:calc(var(--spacing)*1);translate:var(--tw-translate-x) var(--tw-translate-y)}}.data-\\[side\\=bottom\\]\\:slide-in-from-top-2{&[data-side=bottom]{--tw-enter-translate-y:-0.5rem}}.data-\\[side\\=left\\]\\:-translate-x-1{&[data-side=left]{--tw-translate-x:calc(var(--spacing)*-1);translate:var(--tw-translate-x) var(--tw-translate-y)}}.data-\\[side\\=left\\]\\:slide-in-from-right-2{&[data-side=left]{--tw-enter-translate-x:0.5rem}}.data-\\[side\\=right\\]\\:translate-x-1{&[data-side=right]{--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x) var(--tw-translate-y)}}.data-\\[side\\=right\\]\\:slide-in-from-left-2{&[data-side=right]{--tw-enter-translate-x:-0.5rem}}.data-\\[side\\=top\\]\\:-translate-y-1{&[data-side=top]{--tw-translate-y:calc(var(--spacing)*-1);translate:var(--tw-translate-x) var(--tw-translate-y)}}.data-\\[side\\=top\\]\\:slide-in-from-bottom-2{&[data-side=top]{--tw-enter-translate-y:0.5rem}}.\\*\\:data-\\[slot\\=select-value\\]\\:line-clamp-1{:is(&>*){&[data-slot=select-value]{-webkit-box-orient:vertical;-webkit-line-clamp:1;display:-webkit-box;overflow:hidden}}}.\\*\\:data-\\[slot\\=select-value\\]\\:flex{:is(&>*){&[data-slot=select-value]{display:flex}}}.\\*\\:data-\\[slot\\=select-value\\]\\:items-center{:is(&>*){&[data-slot=select-value]{align-items:center}}}.\\*\\:data-\\[slot\\=select-value\\]\\:gap-2{:is(&>*){&[data-slot=select-value]{gap:calc(var(--spacing)*2)}}}.data-\\[state\\=checked\\]\\:border-blue-600{&[data-state=checked]{border-color:var(--color-blue-600)}}.data-\\[state\\=checked\\]\\:border-primary{&[data-state=checked]{border-color:var(--primary)}}.data-\\[state\\=checked\\]\\:bg-blue-600{&[data-state=checked]{background-color:var(--color-blue-600)}}.data-\\[state\\=checked\\]\\:bg-primary{&[data-state=checked]{background-color:var(--primary)}}.data-\\[state\\=checked\\]\\:text-blue-600{&[data-state=checked]{color:var(--color-blue-600)}}.data-\\[state\\=checked\\]\\:text-primary-foreground{&[data-state=checked]{color:var(--primary-foreground)}}.data-\\[state\\=closed\\]\\:animate-out{&[data-state=closed]{--tw-exit-opacity:initial;--tw-exit-scale:initial;--tw-exit-rotate:initial;--tw-exit-translate-x:initial;--tw-exit-translate-y:initial;animation-duration:.15s;animation-name:exit}}.data-\\[state\\=closed\\]\\:fade-out-0{&[data-state=closed]{--tw-exit-opacity:0}}.data-\\[state\\=closed\\]\\:zoom-out-95{&[data-state=closed]{--tw-exit-scale:.95}}.data-\\[state\\=open\\]\\:animate-in{&[data-state=open]{--tw-enter-opacity:initial;--tw-enter-scale:initial;--tw-enter-rotate:initial;--tw-enter-translate-x:initial;--tw-enter-translate-y:initial;animation-duration:.15s;animation-name:enter}}.data-\\[state\\=open\\]\\:fade-in-0{&[data-state=open]{--tw-enter-opacity:0}}.data-\\[state\\=open\\]\\:zoom-in-95{&[data-state=open]{--tw-enter-scale:.95}}.dark\\:focus-visible\\:ring-destructive\\/40,.md\\:grid-cols-2,.md\\:text-sm{&:is(.dark *){&:focus-visible{--tw-ring-color:color-mix(in oklab,var(--destructive) 40%,transparent)}}}.dark\\:aria-invalid\\:ring-destructive\\/40{&:is(.dark *){&[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--destructive) 40%,transparent)}}}.\\[\\&_svg\\]\\:pointer-events-none{& svg{pointer-events:none}}.\\[\\&_svg\\]\\:shrink-0{& svg{flex-shrink:0}}.\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-4{& svg:not([class*=size-]){height:calc(var(--spacing)*4);width:calc(var(--spacing)*4)}}.\\[\\&_svg\\:not\\(\\[class\\*\\=\\'text-\\'\\]\\)\\]\\:text-muted-foreground{& svg:not([class*=text-]){color:var(--muted-foreground)}}.\\*\\:\\[span\\]\\:last\\:flex{:is(&>*){&:is(span){&:last-child{display:flex}}}}.\\*\\:\\[span\\]\\:last\\:items-center{:is(&>*){&:is(span){&:last-child{align-items:center}}}}.\\*\\:\\[span\\]\\:last\\:gap-2{:is(&>*){&:is(span){&:last-child{gap:calc(var(--spacing)*2)}}}}}:root{--background:oklch(1 0 0);--foreground:oklch(0.145 0 0);--card:oklch(1 0 0);--card-foreground:oklch(0.145 0 0);--popover:oklch(1 0 0);--popover-foreground:oklch(0.145 0 0);--primary:oklch(0.205 0 0);--primary-foreground:oklch(0.985 0 0);--secondary:oklch(0.97 0 0);--secondary-foreground:oklch(0.205 0 0);--muted:oklch(0.97 0 0);--muted-foreground:oklch(0.556 0 0);--accent:oklch(0.97 0 0);--accent-foreground:oklch(0.205 0 0);--destructive:oklch(0.577 0.245 27.325);--destructive-foreground:oklch(0.577 0.245 27.325);--border:oklch(0.922 0 0);--input:oklch(0.922 0 0);--ring:oklch(0.708 0 0);--chart-1:oklch(0.646 0.222 41.116);--chart-2:oklch(0.6 0.118 184.704);--chart-3:oklch(0.398 0.07 227.392);--chart-4:oklch(0.828 0.189 84.429);--chart-5:oklch(0.769 0.188 70.08);--radius:0.625rem;--sidebar:oklch(0.985 0 0);--sidebar-foreground:oklch(0.145 0 0);--sidebar-primary:oklch(0.205 0 0);--sidebar-primary-foreground:oklch(0.985 0 0);--sidebar-accent:oklch(0.97 0 0);--sidebar-accent-foreground:oklch(0.205 0 0);--sidebar-border:oklch(0.922 0 0);--sidebar-ring:oklch(0.708 0 0)}.dark{--background:oklch(0.145 0 0);--foreground:oklch(0.985 0 0);--card:oklch(0.145 0 0);--card-foreground:oklch(0.985 0 0);--popover:oklch(0.145 0 0);--popover-foreground:oklch(0.985 0 0);--primary:oklch(0.985 0 0);--primary-foreground:oklch(0.205 0 0);--secondary:oklch(0.269 0 0);--secondary-foreground:oklch(0.985 0 0);--muted:oklch(0.269 0 0);--muted-foreground:oklch(0.708 0 0);--accent:oklch(0.269 0 0);--accent-foreground:oklch(0.985 0 0);--destructive:oklch(0.396 0.141 25.723);--destructive-foreground:oklch(0.637 0.237 25.331);--border:oklch(0.269 0 0);--input:oklch(0.269 0 0);--ring:oklch(0.439 0 0);--chart-1:oklch(0.488 0.243 264.376);--chart-2:oklch(0.696 0.17 162.48);--chart-3:oklch(0.769 0.188 70.08);--chart-4:oklch(0.627 0.265 303.9);--chart-5:oklch(0.645 0.246 16.439);--sidebar:oklch(0.205 0 0);--sidebar-foreground:oklch(0.985 0 0);--sidebar-primary:oklch(0.488 0.243 264.376);--sidebar-primary-foreground:oklch(0.985 0 0);--sidebar-accent:oklch(0.269 0 0);--sidebar-accent-foreground:oklch(0.985 0 0);--sidebar-border:oklch(0.269 0 0);--sidebar-ring:oklch(0.439 0 0)}@layer base{*{border-color:var(--border);outline-color:color-mix(in oklab,var(--ring) 50%,transparent)}body{background-color:var(--background);color:var(--foreground)}}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0) scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1)) rotate(var(--tw-enter-rotate,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0) scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1)) rotate(var(--tw-exit-rotate,0))}}@property --tw-translate-x{syntax:\"*\";inherits:false;initial-value:0}@property --tw-translate-y{syntax:\"*\";inherits:false;initial-value:0}@property --tw-translate-z{syntax:\"*\";inherits:false;initial-value:0}@property --tw-space-y-reverse{syntax:\"*\";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:\"*\";inherits:false;initial-value:0}@property --tw-border-style{syntax:\"*\";inherits:false;initial-value:solid}@property --tw-leading{syntax:\"*\";inherits:false}@property --tw-font-weight{syntax:\"*\";inherits:false}@property --tw-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:\"*\";inherits:false}@property --tw-inset-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:\"*\";inherits:false}@property --tw-ring-color{syntax:\"*\";inherits:false}@property --tw-ring-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:\"*\";inherits:false}@property --tw-inset-ring-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:\"*\";inherits:false}@property --tw-ring-offset-width{syntax:\"<length>\";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:\"*\";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:\"*\";inherits:false;initial-value:solid}";
1054
+ styleInject(css_248z);
1055
+
400
1056
  export { index$1 as CheckoutEmbed, index as PaymentElement, useCart, useCheckout };