@betterstore/react 0.3.88 → 0.5.3
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/components/cart/useCart.d.ts +1 -0
- package/dist/components/cart/useCart.d.ts.map +1 -0
- package/dist/components/checkout-embed/appearance.d.ts +2 -1
- package/dist/components/checkout-embed/appearance.d.ts.map +1 -0
- package/dist/components/checkout-embed/checkout-form-loading.d.ts +2 -2
- package/dist/components/checkout-embed/checkout-form-loading.d.ts.map +1 -0
- package/dist/components/checkout-embed/checkout-form.d.ts +2 -2
- package/dist/components/checkout-embed/checkout-form.d.ts.map +1 -0
- package/dist/components/checkout-embed/checkout-schema.d.ts +1 -0
- package/dist/components/checkout-embed/checkout-schema.d.ts.map +1 -0
- package/dist/components/checkout-embed/index.d.ts +3 -2
- package/dist/components/checkout-embed/index.d.ts.map +1 -0
- package/dist/components/checkout-embed/steps/customer/address-input.d.ts +2 -2
- package/dist/components/checkout-embed/steps/customer/address-input.d.ts.map +1 -0
- package/dist/components/checkout-embed/steps/customer/address-utils.d.ts +1 -0
- package/dist/components/checkout-embed/steps/customer/address-utils.d.ts.map +1 -0
- package/dist/components/checkout-embed/steps/customer/form.d.ts +2 -2
- package/dist/components/checkout-embed/steps/customer/form.d.ts.map +1 -0
- package/dist/components/checkout-embed/steps/payment/form.d.ts +2 -2
- package/dist/components/checkout-embed/steps/payment/form.d.ts.map +1 -0
- package/dist/components/checkout-embed/steps/shipping/form.d.ts +2 -2
- package/dist/components/checkout-embed/steps/shipping/form.d.ts.map +1 -0
- package/dist/components/checkout-embed/steps/shipping/providers/zasilkovna.d.ts +2 -1
- package/dist/components/checkout-embed/steps/shipping/providers/zasilkovna.d.ts.map +1 -0
- package/dist/components/checkout-embed/steps/shipping/shipping-option-wrapper.d.ts +2 -1
- package/dist/components/checkout-embed/steps/shipping/shipping-option-wrapper.d.ts.map +1 -0
- package/dist/components/checkout-embed/steps/summary/discount-code.d.ts +2 -2
- package/dist/components/checkout-embed/steps/summary/discount-code.d.ts.map +1 -0
- package/dist/components/checkout-embed/steps/summary/index.d.ts +2 -2
- package/dist/components/checkout-embed/steps/summary/index.d.ts.map +1 -0
- package/dist/components/checkout-embed/steps/summary/loading.d.ts +2 -2
- package/dist/components/checkout-embed/steps/summary/loading.d.ts.map +1 -0
- package/dist/components/checkout-embed/useFormStore.d.ts +1 -0
- package/dist/components/checkout-embed/useFormStore.d.ts.map +1 -0
- package/dist/components/compounds/form/country-dropdown.d.ts +1 -0
- package/dist/components/compounds/form/country-dropdown.d.ts.map +1 -0
- package/dist/components/compounds/form/form-messages.d.ts +2 -1
- package/dist/components/compounds/form/form-messages.d.ts.map +1 -0
- package/dist/components/compounds/form/input-group.d.ts +3 -2
- package/dist/components/compounds/form/input-group.d.ts.map +1 -0
- package/dist/components/compounds/form/submit-button.d.ts +3 -3
- package/dist/components/compounds/form/submit-button.d.ts.map +1 -0
- package/dist/components/iframe-wrapper.d.ts +2 -1
- package/dist/components/iframe-wrapper.d.ts.map +1 -0
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/payment-element/appearance.d.ts +1 -0
- package/dist/components/payment-element/appearance.d.ts.map +1 -0
- package/dist/components/payment-element/checkout-form.d.ts +2 -1
- package/dist/components/payment-element/checkout-form.d.ts.map +1 -0
- package/dist/components/payment-element/index.d.ts +2 -1
- package/dist/components/payment-element/index.d.ts.map +1 -0
- package/dist/components/payment-element/useCheckout.d.ts +1 -0
- package/dist/components/payment-element/useCheckout.d.ts.map +1 -0
- package/dist/components/ui/button.d.ts +2 -1
- package/dist/components/ui/button.d.ts.map +1 -0
- package/dist/components/ui/checkbox.d.ts +2 -1
- package/dist/components/ui/checkbox.d.ts.map +1 -0
- package/dist/components/ui/command.d.ts +13 -12
- package/dist/components/ui/command.d.ts.map +1 -0
- package/dist/components/ui/dialog.d.ts +11 -10
- package/dist/components/ui/dialog.d.ts.map +1 -0
- package/dist/components/ui/dropdown-menu.d.ts +18 -17
- package/dist/components/ui/dropdown-menu.d.ts.map +1 -0
- package/dist/components/ui/form.d.ts +7 -6
- package/dist/components/ui/form.d.ts.map +1 -0
- package/dist/components/ui/input.d.ts +2 -1
- package/dist/components/ui/input.d.ts.map +1 -0
- package/dist/components/ui/label.d.ts +2 -1
- package/dist/components/ui/label.d.ts.map +1 -0
- package/dist/components/ui/popover.d.ts +7 -6
- package/dist/components/ui/popover.d.ts.map +1 -0
- package/dist/components/ui/radio-group.d.ts +4 -3
- package/dist/components/ui/radio-group.d.ts.map +1 -0
- package/dist/components/ui/select.d.ts +11 -10
- package/dist/components/ui/select.d.ts.map +1 -0
- package/dist/components/ui/skeleton.d.ts +2 -1
- package/dist/components/ui/skeleton.d.ts.map +1 -0
- package/dist/components/ui/sonner.d.ts +2 -2
- package/dist/components/ui/sonner.d.ts.map +1 -0
- package/dist/dev/dev.d.ts +2 -0
- package/dist/dev/dev.d.ts.map +1 -0
- package/dist/i18n/index.d.ts +1 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/index.cjs.js +425 -614
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.mjs +425 -614
- package/dist/lib/betterstore.d.ts +9 -0
- package/dist/lib/betterstore.d.ts.map +1 -0
- package/dist/lib/error-message-utils.d.ts +1 -0
- package/dist/lib/error-message-utils.d.ts.map +1 -0
- package/dist/lib/utils.d.ts +1 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/types.d.ts +2 -1
- package/dist/types.d.ts.map +1 -0
- package/package.json +33 -35
- package/.prettierignore +0 -3
- package/.prettierrc +0 -8
- package/CHANGELOG.md +0 -908
- package/CONTRIBUTING.md +0 -52
- package/LICENSE +0 -21
- package/README.md +0 -34
- package/components.json +0 -21
- package/postcss.config.cjs +0 -6
- package/rollup.config.mjs +0 -103
- package/tailwind.config.js +0 -12
package/dist/index.mjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import React__default, { createContext, useContext, useCallback, useState, useRef, useEffect, useLayoutEffect, forwardRef, createElement, useMemo, Children, isValidElement, cloneElement, Fragment, useReducer, memo } from 'react';
|
|
3
|
+
import { jsxs, jsx, Fragment as Fragment$1 } from 'react/jsx-runtime';
|
|
3
4
|
import * as ReactDOM from 'react-dom';
|
|
4
5
|
import ReactDOM__default, { flushSync } from 'react-dom';
|
|
5
|
-
import { jsx, jsxs, Fragment as Fragment$1 } from 'react/jsx-runtime';
|
|
6
6
|
|
|
7
7
|
const createStoreImpl = (createState) => {
|
|
8
8
|
let state;
|
|
@@ -2664,7 +2664,7 @@ const cookie = {
|
|
|
2664
2664
|
cookieOptions.expires.setTime(cookieOptions.expires.getTime() + minutes * 60 * 1000);
|
|
2665
2665
|
}
|
|
2666
2666
|
if (domain) cookieOptions.domain = domain;
|
|
2667
|
-
document.cookie = serializeCookie(name,
|
|
2667
|
+
document.cookie = serializeCookie(name, value, cookieOptions);
|
|
2668
2668
|
},
|
|
2669
2669
|
read(name) {
|
|
2670
2670
|
const nameEQ = `${name}=`;
|
|
@@ -2676,8 +2676,8 @@ const cookie = {
|
|
|
2676
2676
|
}
|
|
2677
2677
|
return null;
|
|
2678
2678
|
},
|
|
2679
|
-
remove(name) {
|
|
2680
|
-
this.create(name, '', -1);
|
|
2679
|
+
remove(name, domain) {
|
|
2680
|
+
this.create(name, '', -1, domain);
|
|
2681
2681
|
}
|
|
2682
2682
|
};
|
|
2683
2683
|
var cookie$1 = {
|
|
@@ -2737,6 +2737,46 @@ var querystring = {
|
|
|
2737
2737
|
}
|
|
2738
2738
|
};
|
|
2739
2739
|
|
|
2740
|
+
var hash = {
|
|
2741
|
+
name: 'hash',
|
|
2742
|
+
// Deconstruct the options object and extract the lookupHash property and the lookupFromHashIndex property
|
|
2743
|
+
lookup(_ref) {
|
|
2744
|
+
let {
|
|
2745
|
+
lookupHash,
|
|
2746
|
+
lookupFromHashIndex
|
|
2747
|
+
} = _ref;
|
|
2748
|
+
let found;
|
|
2749
|
+
if (typeof window !== 'undefined') {
|
|
2750
|
+
const {
|
|
2751
|
+
hash
|
|
2752
|
+
} = window.location;
|
|
2753
|
+
if (hash && hash.length > 2) {
|
|
2754
|
+
const query = hash.substring(1);
|
|
2755
|
+
if (lookupHash) {
|
|
2756
|
+
const params = query.split('&');
|
|
2757
|
+
for (let i = 0; i < params.length; i++) {
|
|
2758
|
+
const pos = params[i].indexOf('=');
|
|
2759
|
+
if (pos > 0) {
|
|
2760
|
+
const key = params[i].substring(0, pos);
|
|
2761
|
+
if (key === lookupHash) {
|
|
2762
|
+
found = params[i].substring(pos + 1);
|
|
2763
|
+
}
|
|
2764
|
+
}
|
|
2765
|
+
}
|
|
2766
|
+
}
|
|
2767
|
+
if (found) return found;
|
|
2768
|
+
if (!found && lookupFromHashIndex > -1) {
|
|
2769
|
+
const language = hash.match(/\/([a-zA-Z-]*)/g);
|
|
2770
|
+
if (!Array.isArray(language)) return undefined;
|
|
2771
|
+
const index = typeof lookupFromHashIndex === 'number' ? lookupFromHashIndex : 0;
|
|
2772
|
+
return language[index]?.replace('/', '');
|
|
2773
|
+
}
|
|
2774
|
+
}
|
|
2775
|
+
}
|
|
2776
|
+
return found;
|
|
2777
|
+
}
|
|
2778
|
+
};
|
|
2779
|
+
|
|
2740
2780
|
let hasLocalStorageSupport = null;
|
|
2741
2781
|
const localStorageAvailable = () => {
|
|
2742
2782
|
if (hasLocalStorageSupport !== null) return hasLocalStorageSupport;
|
|
@@ -2945,6 +2985,7 @@ class Browser {
|
|
|
2945
2985
|
this.addDetector(htmlTag);
|
|
2946
2986
|
this.addDetector(path);
|
|
2947
2987
|
this.addDetector(subdomain);
|
|
2988
|
+
this.addDetector(hash);
|
|
2948
2989
|
}
|
|
2949
2990
|
addDetector(detector) {
|
|
2950
2991
|
this.detectors[detector.name] = detector;
|
|
@@ -4365,6 +4406,10 @@ function toFormData$1(obj, formData, options) {
|
|
|
4365
4406
|
return value.toISOString();
|
|
4366
4407
|
}
|
|
4367
4408
|
|
|
4409
|
+
if (utils$1.isBoolean(value)) {
|
|
4410
|
+
return value.toString();
|
|
4411
|
+
}
|
|
4412
|
+
|
|
4368
4413
|
if (!useBlob && utils$1.isBlob(value)) {
|
|
4369
4414
|
throw new AxiosError$1('Blob is not supported. Use a Buffer instead.');
|
|
4370
4415
|
}
|
|
@@ -6273,7 +6318,7 @@ var fetchAdapter = isFetchSupported && (async (config) => {
|
|
|
6273
6318
|
credentials: isCredentialsSupported ? withCredentials : undefined
|
|
6274
6319
|
});
|
|
6275
6320
|
|
|
6276
|
-
let response = await fetch(request);
|
|
6321
|
+
let response = await fetch(request, fetchOptions);
|
|
6277
6322
|
|
|
6278
6323
|
const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');
|
|
6279
6324
|
|
|
@@ -6479,7 +6524,7 @@ function dispatchRequest(config) {
|
|
|
6479
6524
|
});
|
|
6480
6525
|
}
|
|
6481
6526
|
|
|
6482
|
-
const VERSION$1 = "1.
|
|
6527
|
+
const VERSION$1 = "1.10.0";
|
|
6483
6528
|
|
|
6484
6529
|
const validators$1 = {};
|
|
6485
6530
|
|
|
@@ -7131,30 +7176,11 @@ const {
|
|
|
7131
7176
|
mergeConfig
|
|
7132
7177
|
} = axios;
|
|
7133
7178
|
|
|
7134
|
-
|
|
7135
|
-
return new Promise((resolve, reject) => {
|
|
7136
|
-
var fulfilled = (value) => {
|
|
7137
|
-
try {
|
|
7138
|
-
step(generator.next(value));
|
|
7139
|
-
} catch (e) {
|
|
7140
|
-
reject(e);
|
|
7141
|
-
}
|
|
7142
|
-
};
|
|
7143
|
-
var rejected = (value) => {
|
|
7144
|
-
try {
|
|
7145
|
-
step(generator.throw(value));
|
|
7146
|
-
} catch (e) {
|
|
7147
|
-
reject(e);
|
|
7148
|
-
}
|
|
7149
|
-
};
|
|
7150
|
-
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
7151
|
-
step((generator = generator.apply(__this, __arguments)).next());
|
|
7152
|
-
});
|
|
7153
|
-
};
|
|
7179
|
+
// src/utils/axios.ts
|
|
7154
7180
|
var API_BASE_URL = "https://api.betterstore.io/v1";
|
|
7155
7181
|
var createApiClient = (apiKey, proxy) => {
|
|
7156
7182
|
const client = axios.create({
|
|
7157
|
-
baseURL: proxy
|
|
7183
|
+
baseURL: proxy ?? API_BASE_URL,
|
|
7158
7184
|
headers: {
|
|
7159
7185
|
"Content-Type": "application/json",
|
|
7160
7186
|
Authorization: `Bearer ${apiKey}`,
|
|
@@ -7166,7 +7192,6 @@ var createApiClient = (apiKey, proxy) => {
|
|
|
7166
7192
|
client.interceptors.response.use(
|
|
7167
7193
|
(response) => response.data,
|
|
7168
7194
|
(error) => {
|
|
7169
|
-
var _a, _b;
|
|
7170
7195
|
const apiError = {
|
|
7171
7196
|
isError: true,
|
|
7172
7197
|
status: 500,
|
|
@@ -7174,8 +7199,8 @@ var createApiClient = (apiKey, proxy) => {
|
|
|
7174
7199
|
};
|
|
7175
7200
|
if (error.response) {
|
|
7176
7201
|
apiError.status = error.response.status;
|
|
7177
|
-
apiError.message =
|
|
7178
|
-
apiError.code =
|
|
7202
|
+
apiError.message = error.response.data?.error || "Server error occurred";
|
|
7203
|
+
apiError.code = error.response.data?.code;
|
|
7179
7204
|
apiError.details = error.response.data;
|
|
7180
7205
|
} else if (error.request) {
|
|
7181
7206
|
apiError.status = 503;
|
|
@@ -7200,169 +7225,150 @@ var createApiClient = (apiKey, proxy) => {
|
|
|
7200
7225
|
|
|
7201
7226
|
// src/client/index.ts
|
|
7202
7227
|
var Client = class {
|
|
7228
|
+
proxy;
|
|
7203
7229
|
constructor(proxy) {
|
|
7204
7230
|
this.proxy = proxy;
|
|
7205
7231
|
}
|
|
7206
7232
|
/**
|
|
7207
7233
|
* Retrieve a checkout session by ID
|
|
7208
7234
|
*/
|
|
7209
|
-
retrieveCheckout(clientSecret, checkoutId) {
|
|
7210
|
-
|
|
7211
|
-
|
|
7212
|
-
|
|
7213
|
-
|
|
7214
|
-
|
|
7215
|
-
|
|
7216
|
-
|
|
7217
|
-
|
|
7218
|
-
|
|
7219
|
-
return data;
|
|
7220
|
-
});
|
|
7235
|
+
async retrieveCheckout(clientSecret, checkoutId) {
|
|
7236
|
+
const apiClient = createApiClient(clientSecret, this.proxy);
|
|
7237
|
+
const data = await apiClient.get(
|
|
7238
|
+
`/checkout/${checkoutId}`
|
|
7239
|
+
);
|
|
7240
|
+
if ("isError" in data && data.isError || !data || !("id" in data)) {
|
|
7241
|
+
console.error(`Checkout session with id ${checkoutId} not found`);
|
|
7242
|
+
return null;
|
|
7243
|
+
}
|
|
7244
|
+
return data;
|
|
7221
7245
|
}
|
|
7222
7246
|
/**
|
|
7223
7247
|
* Update a checkout session
|
|
7224
7248
|
*/
|
|
7225
|
-
updateCheckout(clientSecret, checkoutId, params) {
|
|
7226
|
-
|
|
7227
|
-
|
|
7228
|
-
|
|
7229
|
-
|
|
7230
|
-
|
|
7231
|
-
|
|
7232
|
-
|
|
7233
|
-
|
|
7234
|
-
|
|
7235
|
-
|
|
7236
|
-
return data;
|
|
7237
|
-
});
|
|
7249
|
+
async updateCheckout(clientSecret, checkoutId, params) {
|
|
7250
|
+
const apiClient = createApiClient(clientSecret, this.proxy);
|
|
7251
|
+
const data = await apiClient.put(
|
|
7252
|
+
`/checkout/${checkoutId}`,
|
|
7253
|
+
params
|
|
7254
|
+
);
|
|
7255
|
+
if ("isError" in data && data.isError || !data || !("id" in data)) {
|
|
7256
|
+
console.error(`Checkout session with id ${checkoutId} not found`);
|
|
7257
|
+
return null;
|
|
7258
|
+
}
|
|
7259
|
+
return data;
|
|
7238
7260
|
}
|
|
7239
7261
|
/**
|
|
7240
7262
|
* Apply a discount code to a checkout session
|
|
7241
7263
|
*/
|
|
7242
|
-
applyDiscountCode(clientSecret, checkoutId, discountCode) {
|
|
7243
|
-
|
|
7244
|
-
|
|
7245
|
-
|
|
7246
|
-
|
|
7247
|
-
|
|
7248
|
-
|
|
7249
|
-
|
|
7250
|
-
|
|
7251
|
-
|
|
7252
|
-
return data;
|
|
7253
|
-
});
|
|
7264
|
+
async applyDiscountCode(clientSecret, checkoutId, discountCode) {
|
|
7265
|
+
const apiClient = createApiClient(clientSecret, this.proxy);
|
|
7266
|
+
const data = await apiClient.post(
|
|
7267
|
+
`/checkout/${checkoutId}/discounts/apply`,
|
|
7268
|
+
{ code: discountCode }
|
|
7269
|
+
);
|
|
7270
|
+
if ("isError" in data && data.isError || !data || !("id" in data)) {
|
|
7271
|
+
throw new Error("Failed to apply discount code");
|
|
7272
|
+
}
|
|
7273
|
+
return data;
|
|
7254
7274
|
}
|
|
7255
7275
|
/**
|
|
7256
7276
|
* Remove a discount code from a checkout session
|
|
7257
7277
|
*/
|
|
7258
|
-
removeDiscount(clientSecret, checkoutId, discountId) {
|
|
7259
|
-
|
|
7260
|
-
|
|
7261
|
-
|
|
7262
|
-
|
|
7263
|
-
|
|
7264
|
-
|
|
7265
|
-
|
|
7266
|
-
|
|
7267
|
-
return data;
|
|
7268
|
-
});
|
|
7278
|
+
async removeDiscount(clientSecret, checkoutId, discountId) {
|
|
7279
|
+
const apiClient = createApiClient(clientSecret, this.proxy);
|
|
7280
|
+
const data = await apiClient.delete(
|
|
7281
|
+
`/checkout/${checkoutId}/discounts/${discountId}`
|
|
7282
|
+
);
|
|
7283
|
+
if ("isError" in data && data.isError || !data || !("id" in data)) {
|
|
7284
|
+
throw new Error("Failed to remove discount code");
|
|
7285
|
+
}
|
|
7286
|
+
return data;
|
|
7269
7287
|
}
|
|
7270
7288
|
/**
|
|
7271
7289
|
* Revalidate a checkout session
|
|
7272
7290
|
*/
|
|
7273
|
-
revalidateDiscounts(clientSecret, checkoutId) {
|
|
7274
|
-
|
|
7275
|
-
|
|
7276
|
-
|
|
7277
|
-
|
|
7278
|
-
|
|
7279
|
-
|
|
7280
|
-
|
|
7281
|
-
|
|
7282
|
-
|
|
7283
|
-
return data;
|
|
7284
|
-
});
|
|
7291
|
+
async revalidateDiscounts(clientSecret, checkoutId) {
|
|
7292
|
+
const apiClient = createApiClient(clientSecret, this.proxy);
|
|
7293
|
+
const data = await apiClient.get(
|
|
7294
|
+
`/checkout/${checkoutId}/discounts/revalidate`
|
|
7295
|
+
);
|
|
7296
|
+
if ("isError" in data && data.isError || !data || !("id" in data)) {
|
|
7297
|
+
console.error(`Checkout session with id ${checkoutId} not found`);
|
|
7298
|
+
return null;
|
|
7299
|
+
}
|
|
7300
|
+
return data;
|
|
7285
7301
|
}
|
|
7286
7302
|
/**
|
|
7287
7303
|
* Get shipping rates for a checkout session
|
|
7288
7304
|
*/
|
|
7289
|
-
getCheckoutShippingRates(clientSecret, checkoutId) {
|
|
7290
|
-
|
|
7291
|
-
|
|
7292
|
-
|
|
7293
|
-
|
|
7294
|
-
|
|
7295
|
-
|
|
7296
|
-
|
|
7297
|
-
|
|
7298
|
-
return data;
|
|
7299
|
-
});
|
|
7305
|
+
async getCheckoutShippingRates(clientSecret, checkoutId) {
|
|
7306
|
+
const apiClient = createApiClient(clientSecret, this.proxy);
|
|
7307
|
+
const data = await apiClient.get(
|
|
7308
|
+
`/checkout/shipping/${checkoutId}`
|
|
7309
|
+
);
|
|
7310
|
+
if ("isError" in data && data.isError || !data || !Array.isArray(data)) {
|
|
7311
|
+
return [];
|
|
7312
|
+
}
|
|
7313
|
+
return data;
|
|
7300
7314
|
}
|
|
7301
7315
|
/**
|
|
7302
7316
|
* Generate payment secret for a checkout session
|
|
7303
7317
|
*/
|
|
7304
|
-
generateCheckoutPaymentSecret(clientSecret, checkoutId) {
|
|
7305
|
-
|
|
7306
|
-
|
|
7307
|
-
|
|
7308
|
-
|
|
7309
|
-
|
|
7310
|
-
|
|
7311
|
-
|
|
7312
|
-
|
|
7313
|
-
|
|
7314
|
-
|
|
7315
|
-
};
|
|
7316
|
-
});
|
|
7318
|
+
async generateCheckoutPaymentSecret(clientSecret, checkoutId) {
|
|
7319
|
+
const apiClient = createApiClient(clientSecret, this.proxy);
|
|
7320
|
+
const data = await apiClient.post(`/checkout/payment/${checkoutId}`);
|
|
7321
|
+
if ("isError" in data && data.isError || !data || !("paymentSecret" in data)) {
|
|
7322
|
+
throw new Error("Failed to generate payment secret");
|
|
7323
|
+
}
|
|
7324
|
+
return {
|
|
7325
|
+
paymentSecret: data.paymentSecret,
|
|
7326
|
+
publicKey: data.publicKey,
|
|
7327
|
+
checkoutSession: data.checkoutSession
|
|
7328
|
+
};
|
|
7317
7329
|
}
|
|
7318
7330
|
/**
|
|
7319
7331
|
* Create a new customer
|
|
7320
7332
|
*/
|
|
7321
|
-
createCustomer(clientSecret, params) {
|
|
7322
|
-
|
|
7323
|
-
|
|
7324
|
-
|
|
7325
|
-
|
|
7326
|
-
|
|
7327
|
-
|
|
7328
|
-
|
|
7329
|
-
|
|
7330
|
-
|
|
7331
|
-
return data;
|
|
7332
|
-
});
|
|
7333
|
+
async createCustomer(clientSecret, params) {
|
|
7334
|
+
const apiClient = createApiClient(clientSecret, this.proxy);
|
|
7335
|
+
const data = await apiClient.post(
|
|
7336
|
+
"/customer",
|
|
7337
|
+
params
|
|
7338
|
+
);
|
|
7339
|
+
if ("isError" in data && data.isError || !data || !("id" in data)) {
|
|
7340
|
+
throw new Error("Failed to create customer");
|
|
7341
|
+
}
|
|
7342
|
+
return data;
|
|
7333
7343
|
}
|
|
7334
7344
|
/**
|
|
7335
7345
|
* Retrieve a customer by ID or email
|
|
7336
7346
|
*/
|
|
7337
|
-
retrieveCustomer(clientSecret, idOrEmail) {
|
|
7338
|
-
|
|
7339
|
-
|
|
7340
|
-
|
|
7341
|
-
|
|
7342
|
-
|
|
7343
|
-
|
|
7344
|
-
|
|
7345
|
-
|
|
7346
|
-
|
|
7347
|
-
return data;
|
|
7348
|
-
});
|
|
7347
|
+
async retrieveCustomer(clientSecret, idOrEmail) {
|
|
7348
|
+
const apiClient = createApiClient(clientSecret, this.proxy);
|
|
7349
|
+
const data = await apiClient.get(
|
|
7350
|
+
`/customer/${idOrEmail}`
|
|
7351
|
+
);
|
|
7352
|
+
if ("isError" in data && data.isError || !data || !("id" in data)) {
|
|
7353
|
+
console.error(`Customer with id or email ${idOrEmail} not found`);
|
|
7354
|
+
return null;
|
|
7355
|
+
}
|
|
7356
|
+
return data;
|
|
7349
7357
|
}
|
|
7350
7358
|
/**
|
|
7351
7359
|
* Update a customer
|
|
7352
7360
|
*/
|
|
7353
|
-
updateCustomer(clientSecret, customerId, params) {
|
|
7354
|
-
|
|
7355
|
-
|
|
7356
|
-
|
|
7357
|
-
|
|
7358
|
-
|
|
7359
|
-
|
|
7360
|
-
|
|
7361
|
-
|
|
7362
|
-
|
|
7363
|
-
|
|
7364
|
-
return data;
|
|
7365
|
-
});
|
|
7361
|
+
async updateCustomer(clientSecret, customerId, params) {
|
|
7362
|
+
const apiClient = createApiClient(clientSecret, this.proxy);
|
|
7363
|
+
const data = await apiClient.put(
|
|
7364
|
+
`/customer/${customerId}`,
|
|
7365
|
+
params
|
|
7366
|
+
);
|
|
7367
|
+
if ("isError" in data && data.isError || !data || !("id" in data)) {
|
|
7368
|
+
console.error(`Customer with id ${customerId} not found`);
|
|
7369
|
+
return null;
|
|
7370
|
+
}
|
|
7371
|
+
return data;
|
|
7366
7372
|
}
|
|
7367
7373
|
};
|
|
7368
7374
|
var client_default = Client;
|
|
@@ -7433,12 +7439,12 @@ var currencyLocales = {
|
|
|
7433
7439
|
// Turkish Lira
|
|
7434
7440
|
};
|
|
7435
7441
|
var Helpers = class {
|
|
7442
|
+
proxy;
|
|
7436
7443
|
constructor(proxy) {
|
|
7437
7444
|
this.proxy = proxy;
|
|
7438
7445
|
}
|
|
7439
7446
|
formatCurrency(currency) {
|
|
7440
|
-
|
|
7441
|
-
const locale = (_a = currencyLocales[currency.toUpperCase()]) != null ? _a : void 0;
|
|
7447
|
+
const locale = currencyLocales[currency.toUpperCase()] ?? void 0;
|
|
7442
7448
|
const formattedCurrency = new Intl.NumberFormat(locale, {
|
|
7443
7449
|
style: "currency",
|
|
7444
7450
|
currency,
|
|
@@ -7447,10 +7453,9 @@ var Helpers = class {
|
|
|
7447
7453
|
return formattedCurrency.format(0).replace(/[\d.,\s]/g, "").trim();
|
|
7448
7454
|
}
|
|
7449
7455
|
formatPrice(priceInCents, currency, exchangeRate) {
|
|
7450
|
-
|
|
7451
|
-
const amount = priceInCents / 100 * (exchangeRate != null ? exchangeRate : 1);
|
|
7456
|
+
const amount = priceInCents / 100 * (exchangeRate ?? 1);
|
|
7452
7457
|
const isWhole = amount % 1 === 0;
|
|
7453
|
-
const locale =
|
|
7458
|
+
const locale = currencyLocales[currency.toUpperCase()] ?? void 0;
|
|
7454
7459
|
const formattedPrice = new Intl.NumberFormat(locale, {
|
|
7455
7460
|
style: "currency",
|
|
7456
7461
|
currency,
|
|
@@ -7460,32 +7465,42 @@ var Helpers = class {
|
|
|
7460
7465
|
}).format(amount);
|
|
7461
7466
|
return formattedPrice;
|
|
7462
7467
|
}
|
|
7463
|
-
getExchangeRate(baseCurrency, targetCurrency) {
|
|
7464
|
-
|
|
7465
|
-
|
|
7466
|
-
|
|
7467
|
-
|
|
7468
|
-
|
|
7469
|
-
|
|
7468
|
+
async getExchangeRate(baseCurrency, targetCurrency) {
|
|
7469
|
+
const apiClient = createApiClient("", this.proxy);
|
|
7470
|
+
const { data } = await apiClient.get(`/helpers/rates/${baseCurrency}`);
|
|
7471
|
+
const rate = data.rates[targetCurrency];
|
|
7472
|
+
if (!rate) {
|
|
7473
|
+
throw new Error("Could not get exchange rate for target currency");
|
|
7474
|
+
}
|
|
7475
|
+
return rate;
|
|
7476
|
+
}
|
|
7477
|
+
async getAutocompleteAddressResults(query, locale) {
|
|
7478
|
+
const apiClient = createApiClient("", this.proxy);
|
|
7479
|
+
const { data } = await apiClient.get(
|
|
7480
|
+
`/helpers/autocomplete-address/${query}`,
|
|
7481
|
+
{
|
|
7482
|
+
params: {
|
|
7483
|
+
locale
|
|
7484
|
+
}
|
|
7470
7485
|
}
|
|
7471
|
-
|
|
7472
|
-
|
|
7486
|
+
);
|
|
7487
|
+
return data;
|
|
7473
7488
|
}
|
|
7474
7489
|
};
|
|
7475
7490
|
var helpers_default = Helpers;
|
|
7476
7491
|
function createStoreClient(config) {
|
|
7477
|
-
return new client_default(config
|
|
7492
|
+
return new client_default(config?.proxy);
|
|
7478
7493
|
}
|
|
7479
7494
|
function createStoreHelpers(config) {
|
|
7480
|
-
return new helpers_default(
|
|
7495
|
+
return new helpers_default(config?.proxy);
|
|
7481
7496
|
}
|
|
7482
7497
|
|
|
7483
|
-
var css_248z = "/*! tailwindcss v4.1.8 | MIT License | https://tailwindcss.com */\n@layer properties;\n@layer theme, base, components, utilities;\n@layer theme {\n :root, :host {\n --font-sans: var(--font-sans), Helvetica, Arial, apple-system, sans-serif;\n --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\",\n \"Courier New\", monospace;\n --color-red-500: oklch(63.7% 0.237 25.331);\n --color-black: #000;\n --color-white: #fff;\n --spacing: 0.25rem;\n --container-lg: 32rem;\n --text-xs: 0.75rem;\n --text-xs--line-height: calc(1 / 0.75);\n --text-sm: 0.875rem;\n --text-sm--line-height: calc(1.25 / 0.875);\n --text-base: 1rem;\n --text-base--line-height: calc(1.5 / 1);\n --text-lg: 1.125rem;\n --text-lg--line-height: calc(1.75 / 1.125);\n --text-2xl: 1.5rem;\n --text-2xl--line-height: calc(2 / 1.5);\n --font-weight-medium: 500;\n --font-weight-semibold: 600;\n --font-weight-bold: 700;\n --tracking-tight: -0.025em;\n --tracking-widest: 0.1em;\n --radius-xs: 0.125rem;\n --animate-spin: spin 1s linear infinite;\n --animate-pulse: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n --default-transition-duration: 150ms;\n --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n --default-font-family: var(--font-sans), Helvetica, Arial, apple-system, sans-serif;\n --default-mono-font-family: var(--font-mono);\n }\n}\n@layer base {\n *, ::after, ::before, ::backdrop, ::file-selector-button {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n border: 0 solid;\n }\n html, :host {\n line-height: 1.5;\n -webkit-text-size-adjust: 100%;\n -moz-tab-size: 4;\n -o-tab-size: 4;\n tab-size: 4;\n 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\");\n font-feature-settings: var(--default-font-feature-settings, normal);\n font-variation-settings: var(--default-font-variation-settings, normal);\n -webkit-tap-highlight-color: transparent;\n }\n hr {\n height: 0;\n color: inherit;\n border-top-width: 1px;\n }\n abbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n }\n h1, h2, h3, h4, h5, h6 {\n font-size: inherit;\n font-weight: inherit;\n }\n a {\n color: inherit;\n -webkit-text-decoration: inherit;\n text-decoration: inherit;\n }\n b, strong {\n font-weight: bolder;\n }\n code, kbd, samp, pre {\n font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace);\n font-feature-settings: var(--default-mono-font-feature-settings, normal);\n font-variation-settings: var(--default-mono-font-variation-settings, normal);\n font-size: 1em;\n }\n small {\n font-size: 80%;\n }\n sub, sup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n }\n sub {\n bottom: -0.25em;\n }\n sup {\n top: -0.5em;\n }\n table {\n text-indent: 0;\n border-color: inherit;\n border-collapse: collapse;\n }\n :-moz-focusring {\n outline: auto;\n }\n progress {\n vertical-align: baseline;\n }\n summary {\n display: list-item;\n }\n ol, ul, menu {\n list-style: none;\n }\n img, svg, video, canvas, audio, iframe, embed, object {\n display: block;\n vertical-align: middle;\n }\n img, video {\n max-width: 100%;\n height: auto;\n }\n button, input, select, optgroup, textarea, ::file-selector-button {\n font: inherit;\n font-feature-settings: inherit;\n font-variation-settings: inherit;\n letter-spacing: inherit;\n color: inherit;\n border-radius: 0;\n background-color: transparent;\n opacity: 1;\n }\n :where(select:is([multiple], [size])) optgroup {\n font-weight: bolder;\n }\n :where(select:is([multiple], [size])) optgroup option {\n padding-inline-start: 20px;\n }\n ::file-selector-button {\n margin-inline-end: 4px;\n }\n ::-moz-placeholder {\n opacity: 1;\n }\n ::placeholder {\n opacity: 1;\n }\n @supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) {\n ::-moz-placeholder {\n color: currentcolor;\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, currentcolor 50%, transparent);\n }\n }\n ::placeholder {\n color: currentcolor;\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, currentcolor 50%, transparent);\n }\n }\n }\n textarea {\n resize: vertical;\n }\n ::-webkit-search-decoration {\n -webkit-appearance: none;\n }\n ::-webkit-date-and-time-value {\n min-height: 1lh;\n text-align: inherit;\n }\n ::-webkit-datetime-edit {\n display: inline-flex;\n }\n ::-webkit-datetime-edit-fields-wrapper {\n padding: 0;\n }\n ::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field {\n padding-block: 0;\n }\n :-moz-ui-invalid {\n box-shadow: none;\n }\n button, input:where([type=\"button\"], [type=\"reset\"], [type=\"submit\"]), ::file-selector-button {\n -webkit-appearance: button;\n -moz-appearance: button;\n appearance: button;\n }\n ::-webkit-inner-spin-button, ::-webkit-outer-spin-button {\n height: auto;\n }\n [hidden]:where(:not([hidden=\"until-found\"])) {\n display: none !important;\n }\n}\n@layer utilities {\n .pointer-events-none {\n pointer-events: none;\n }\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n }\n .absolute {\n position: absolute;\n }\n .fixed {\n position: fixed;\n }\n .relative {\n position: relative;\n }\n .sticky {\n position: sticky;\n }\n .inset-0 {\n inset: calc(var(--spacing) * 0);\n }\n .-top-2 {\n top: calc(var(--spacing) * -2);\n }\n .top-0 {\n top: calc(var(--spacing) * 0);\n }\n .top-0\\.5 {\n top: calc(var(--spacing) * 0.5);\n }\n .top-1\\/2 {\n top: calc(1/2 * 100%);\n }\n .top-4 {\n top: calc(var(--spacing) * 4);\n }\n .top-\\[50\\%\\] {\n top: 50%;\n }\n .-right-2 {\n right: calc(var(--spacing) * -2);\n }\n .right-2 {\n right: calc(var(--spacing) * 2);\n }\n .right-4 {\n right: calc(var(--spacing) * 4);\n }\n .left-1\\/2 {\n left: calc(1/2 * 100%);\n }\n .left-2 {\n left: calc(var(--spacing) * 2);\n }\n .left-\\[50\\%\\] {\n left: 50%;\n }\n .z-10 {\n z-index: 10;\n }\n .z-50 {\n z-index: 50;\n }\n .order-3 {\n order: 3;\n }\n .order-4 {\n order: 4;\n }\n .order-5 {\n order: 5;\n }\n .order-6 {\n order: 6;\n }\n .order-7 {\n order: 7;\n }\n .order-first {\n order: -9999;\n }\n .col-span-2 {\n grid-column: span 2 / span 2;\n }\n .-m-0\\.5 {\n margin: calc(var(--spacing) * -0.5);\n }\n .-mx-1 {\n margin-inline: calc(var(--spacing) * -1);\n }\n .mx-auto {\n margin-inline: auto;\n }\n .my-1 {\n margin-block: calc(var(--spacing) * 1);\n }\n .my-2 {\n margin-block: calc(var(--spacing) * 2);\n }\n .mt-2 {\n margin-top: calc(var(--spacing) * 2);\n }\n .mt-8 {\n margin-top: calc(var(--spacing) * 8);\n }\n .-mb-0\\.5 {\n margin-bottom: calc(var(--spacing) * -0.5);\n }\n .mb-1 {\n margin-bottom: calc(var(--spacing) * 1);\n }\n .mb-2 {\n margin-bottom: calc(var(--spacing) * 2);\n }\n .ml-4 {\n margin-left: calc(var(--spacing) * 4);\n }\n .ml-auto {\n margin-left: auto;\n }\n .line-clamp-1 {\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 1;\n }\n .block {\n display: block;\n }\n .flex {\n display: flex;\n }\n .grid {\n display: grid;\n }\n .hidden {\n display: none;\n }\n .inline-flex {\n display: inline-flex;\n }\n .aspect-square {\n aspect-ratio: 1 / 1;\n }\n .size-2 {\n width: calc(var(--spacing) * 2);\n height: calc(var(--spacing) * 2);\n }\n .size-3 {\n width: calc(var(--spacing) * 3);\n height: calc(var(--spacing) * 3);\n }\n .size-3\\.5 {\n width: calc(var(--spacing) * 3.5);\n height: calc(var(--spacing) * 3.5);\n }\n .size-4 {\n width: calc(var(--spacing) * 4);\n height: calc(var(--spacing) * 4);\n }\n .size-5 {\n width: calc(var(--spacing) * 5);\n height: calc(var(--spacing) * 5);\n }\n .size-9 {\n width: calc(var(--spacing) * 9);\n height: calc(var(--spacing) * 9);\n }\n .size-16 {\n width: calc(var(--spacing) * 16);\n height: calc(var(--spacing) * 16);\n }\n .h-3 {\n height: calc(var(--spacing) * 3);\n }\n .h-3\\.5 {\n height: calc(var(--spacing) * 3.5);\n }\n .h-4 {\n height: calc(var(--spacing) * 4);\n }\n .h-5 {\n height: calc(var(--spacing) * 5);\n }\n .h-6 {\n height: calc(var(--spacing) * 6);\n }\n .h-8 {\n height: calc(var(--spacing) * 8);\n }\n .h-9 {\n height: calc(var(--spacing) * 9);\n }\n .h-10 {\n height: calc(var(--spacing) * 10);\n }\n .h-12 {\n height: calc(var(--spacing) * 12);\n }\n .h-16 {\n height: calc(var(--spacing) * 16);\n }\n .h-\\[18px\\] {\n height: 18px;\n }\n .h-\\[20px\\] {\n height: 20px;\n }\n .h-\\[450px\\] {\n height: 450px;\n }\n .h-\\[var\\(--radix-select-trigger-height\\)\\] {\n height: var(--radix-select-trigger-height);\n }\n .h-auto {\n height: auto;\n }\n .h-auto\\! {\n height: auto !important;\n }\n .h-full {\n height: 100%;\n }\n .h-max {\n height: -moz-max-content;\n height: max-content;\n }\n .h-px {\n height: 1px;\n }\n .max-h-\\(--radix-dropdown-menu-content-available-height\\) {\n max-height: var(--radix-dropdown-menu-content-available-height);\n }\n .max-h-96 {\n max-height: calc(var(--spacing) * 96);\n }\n .max-h-\\[200px\\] {\n max-height: 200px;\n }\n .max-h-\\[300px\\] {\n max-height: 300px;\n }\n .min-h-full {\n min-height: 100%;\n }\n .min-h-screen {\n min-height: 100vh;\n }\n .w-0 {\n width: calc(var(--spacing) * 0);\n }\n .w-4 {\n width: calc(var(--spacing) * 4);\n }\n .w-5 {\n width: calc(var(--spacing) * 5);\n }\n .w-6 {\n width: calc(var(--spacing) * 6);\n }\n .w-10 {\n width: calc(var(--spacing) * 10);\n }\n .w-12 {\n width: calc(var(--spacing) * 12);\n }\n .w-16 {\n width: calc(var(--spacing) * 16);\n }\n .w-20 {\n width: calc(var(--spacing) * 20);\n }\n .w-24 {\n width: calc(var(--spacing) * 24);\n }\n .w-28 {\n width: calc(var(--spacing) * 28);\n }\n .w-32 {\n width: calc(var(--spacing) * 32);\n }\n .w-40 {\n width: calc(var(--spacing) * 40);\n }\n .w-72 {\n width: calc(var(--spacing) * 72);\n }\n .w-fit {\n width: -moz-fit-content;\n width: fit-content;\n }\n .w-full {\n width: 100%;\n }\n .max-w-\\[1200px\\] {\n max-width: 1200px;\n }\n .max-w-\\[calc\\(100\\%-2rem\\)\\] {\n max-width: calc(100% - 2rem);\n }\n .min-w-0 {\n min-width: calc(var(--spacing) * 0);\n }\n .min-w-\\[--radix-popper-anchor-width\\] {\n min-width: --radix-popper-anchor-width;\n }\n .min-w-\\[8rem\\] {\n min-width: 8rem;\n }\n .min-w-\\[var\\(--radix-select-trigger-width\\)\\] {\n min-width: var(--radix-select-trigger-width);\n }\n .flex-1 {\n flex: 1;\n }\n .shrink-0 {\n flex-shrink: 0;\n }\n .flex-grow {\n flex-grow: 1;\n }\n .origin-\\(--radix-dropdown-menu-content-transform-origin\\) {\n transform-origin: var(--radix-dropdown-menu-content-transform-origin);\n }\n .origin-\\(--radix-popover-content-transform-origin\\) {\n transform-origin: var(--radix-popover-content-transform-origin);\n }\n .-translate-x-1\\/2 {\n --tw-translate-x: calc(calc(1/2 * 100%) * -1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .translate-x-\\[-50\\%\\] {\n --tw-translate-x: -50%;\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .-translate-y-1\\/2 {\n --tw-translate-y: calc(calc(1/2 * 100%) * -1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .translate-y-\\[-50\\%\\] {\n --tw-translate-y: -50%;\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .rotate-180 {\n rotate: 180deg;\n }\n .transform-none\\! {\n transform: none !important;\n }\n .animate-pulse {\n animation: var(--animate-pulse);\n }\n .animate-spin {\n animation: var(--animate-spin);\n }\n .cursor-default {\n cursor: default;\n }\n .cursor-pointer {\n cursor: pointer;\n }\n .resize {\n resize: both;\n }\n .scroll-my-1 {\n scroll-margin-block: calc(var(--spacing) * 1);\n }\n .scroll-py-1 {\n scroll-padding-block: calc(var(--spacing) * 1);\n }\n .grid-cols-2 {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n .flex-col {\n flex-direction: column;\n }\n .flex-col-reverse {\n flex-direction: column-reverse;\n }\n .items-center {\n align-items: center;\n }\n .justify-between {\n justify-content: space-between;\n }\n .justify-center {\n justify-content: center;\n }\n .justify-end {\n justify-content: flex-end;\n }\n .gap-0 {\n gap: calc(var(--spacing) * 0);\n }\n .gap-0\\.5 {\n gap: calc(var(--spacing) * 0.5);\n }\n .gap-1\\.5 {\n gap: calc(var(--spacing) * 1.5);\n }\n .gap-2 {\n gap: calc(var(--spacing) * 2);\n }\n .gap-3 {\n gap: calc(var(--spacing) * 3);\n }\n .gap-4 {\n gap: calc(var(--spacing) * 4);\n }\n .gap-5 {\n gap: calc(var(--spacing) * 5);\n }\n .gap-6 {\n gap: calc(var(--spacing) * 6);\n }\n .gap-\\[10px\\] {\n gap: 10px;\n }\n .space-y-2 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .space-y-4 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .space-y-6 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .space-x-2 {\n :where(& > :not(:last-child)) {\n --tw-space-x-reverse: 0;\n margin-inline-start: calc(calc(var(--spacing) * 2) * var(--tw-space-x-reverse));\n margin-inline-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-x-reverse)));\n }\n }\n .overflow-hidden {\n overflow: hidden;\n }\n .overflow-x-hidden {\n overflow-x: hidden;\n }\n .overflow-y-auto {\n overflow-y: auto;\n }\n .rounded-\\[4px\\] {\n border-radius: 4px;\n }\n .rounded-full {\n border-radius: calc(infinity * 1px);\n }\n .rounded-lg {\n border-radius: var(--radius);\n }\n .rounded-md {\n border-radius: calc(var(--radius) - 2px);\n }\n .rounded-sm {\n border-radius: calc(var(--radius) - 4px);\n }\n .rounded-xs {\n border-radius: var(--radius-xs);\n }\n .border {\n border-style: var(--tw-border-style);\n border-width: 1px;\n }\n .border-0 {\n border-style: var(--tw-border-style);\n border-width: 0px;\n }\n .border-b {\n border-bottom-style: var(--tw-border-style);\n border-bottom-width: 1px;\n }\n .border-input {\n border-color: var(--input);\n }\n .border-primary {\n border-color: var(--primary);\n }\n .bg-accent {\n background-color: var(--accent);\n }\n .bg-background {\n background-color: var(--background);\n }\n .bg-black\\/50 {\n background-color: color-mix(in srgb, #000 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 50%, transparent);\n }\n }\n .bg-border {\n background-color: var(--border);\n }\n .bg-destructive {\n background-color: var(--destructive);\n }\n .bg-muted {\n background-color: var(--muted);\n }\n .bg-popover {\n background-color: var(--popover);\n }\n .bg-primary {\n background-color: var(--primary);\n }\n .bg-secondary {\n background-color: var(--secondary);\n }\n .bg-transparent {\n background-color: transparent;\n }\n .fill-current {\n fill: currentcolor;\n }\n .fill-primary {\n fill: var(--primary);\n }\n .object-cover {\n -o-object-fit: cover;\n object-fit: cover;\n }\n .p-0 {\n padding: calc(var(--spacing) * 0);\n }\n .p-1 {\n padding: calc(var(--spacing) * 1);\n }\n .p-4 {\n padding: calc(var(--spacing) * 4);\n }\n .p-6 {\n padding: calc(var(--spacing) * 6);\n }\n .px-2 {\n padding-inline: calc(var(--spacing) * 2);\n }\n .px-3 {\n padding-inline: calc(var(--spacing) * 3);\n }\n .px-4 {\n padding-inline: calc(var(--spacing) * 4);\n }\n .px-6 {\n padding-inline: calc(var(--spacing) * 6);\n }\n .py-1 {\n padding-block: calc(var(--spacing) * 1);\n }\n .py-1\\.5 {\n padding-block: calc(var(--spacing) * 1.5);\n }\n .py-2 {\n padding-block: calc(var(--spacing) * 2);\n }\n .py-3 {\n padding-block: calc(var(--spacing) * 3);\n }\n .py-4 {\n padding-block: calc(var(--spacing) * 4);\n }\n .py-6 {\n padding-block: calc(var(--spacing) * 6);\n }\n .pt-2 {\n padding-top: calc(var(--spacing) * 2);\n }\n .pt-4 {\n padding-top: calc(var(--spacing) * 4);\n }\n .pr-2 {\n padding-right: calc(var(--spacing) * 2);\n }\n .pr-8 {\n padding-right: calc(var(--spacing) * 8);\n }\n .pb-1 {\n padding-bottom: calc(var(--spacing) * 1);\n }\n .pb-2 {\n padding-bottom: calc(var(--spacing) * 2);\n }\n .pl-2 {\n padding-left: calc(var(--spacing) * 2);\n }\n .pl-8 {\n padding-left: calc(var(--spacing) * 8);\n }\n .text-center {\n text-align: center;\n }\n .text-right {\n text-align: right;\n }\n .text-base {\n font-size: var(--text-base);\n line-height: var(--tw-leading, var(--text-base--line-height));\n }\n .text-lg {\n font-size: var(--text-lg);\n line-height: var(--tw-leading, var(--text-lg--line-height));\n }\n .text-sm {\n font-size: var(--text-sm);\n line-height: var(--tw-leading, var(--text-sm--line-height));\n }\n .text-xs {\n font-size: var(--text-xs);\n line-height: var(--tw-leading, var(--text-xs--line-height));\n }\n .leading-none {\n --tw-leading: 1;\n line-height: 1;\n }\n .font-bold {\n --tw-font-weight: var(--font-weight-bold);\n font-weight: var(--font-weight-bold);\n }\n .font-medium {\n --tw-font-weight: var(--font-weight-medium);\n font-weight: var(--font-weight-medium);\n }\n .font-semibold {\n --tw-font-weight: var(--font-weight-semibold);\n font-weight: var(--font-weight-semibold);\n }\n .tracking-tight {\n --tw-tracking: var(--tracking-tight);\n letter-spacing: var(--tracking-tight);\n }\n .tracking-widest {\n --tw-tracking: var(--tracking-widest);\n letter-spacing: var(--tracking-widest);\n }\n .text-ellipsis {\n text-overflow: ellipsis;\n }\n .whitespace-nowrap {\n white-space: nowrap;\n }\n .text-background {\n color: var(--background);\n }\n .text-current {\n color: currentcolor;\n }\n .text-destructive {\n color: var(--destructive);\n }\n .text-destructive-foreground {\n color: var(--destructive-foreground);\n }\n .text-foreground {\n color: var(--foreground);\n }\n .text-muted-foreground {\n color: var(--muted-foreground);\n }\n .text-popover-foreground {\n color: var(--popover-foreground);\n }\n .text-primary {\n color: var(--primary);\n }\n .text-primary-foreground {\n color: var(--primary-foreground);\n }\n .text-red-500 {\n color: var(--color-red-500);\n }\n .text-secondary-foreground {\n color: var(--secondary-foreground);\n }\n .text-white {\n color: var(--color-white);\n }\n .line-through {\n text-decoration-line: line-through;\n }\n .underline-offset-4 {\n text-underline-offset: 4px;\n }\n .opacity-0 {\n opacity: 0%;\n }\n .opacity-50 {\n opacity: 50%;\n }\n .opacity-70 {\n opacity: 70%;\n }\n .opacity-100 {\n opacity: 100%;\n }\n .shadow-lg {\n --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-md {\n --tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 2px 4px -2px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-sm {\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-xs {\n --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .ring {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .ring-offset-background {\n --tw-ring-offset-color: var(--background);\n }\n .outline-hidden {\n --tw-outline-style: none;\n outline-style: none;\n @media (forced-colors: active) {\n outline: 2px solid transparent;\n outline-offset: 2px;\n }\n }\n .outline {\n outline-style: var(--tw-outline-style);\n outline-width: 1px;\n }\n .transition-\\[color\\,box-shadow\\] {\n transition-property: color,box-shadow;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-opacity {\n transition-property: opacity;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-shadow {\n transition-property: box-shadow;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-transform {\n transition-property: transform, translate, scale, rotate;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-none {\n transition-property: none;\n }\n .duration-200 {\n --tw-duration: 200ms;\n transition-duration: 200ms;\n }\n .outline-none {\n --tw-outline-style: none;\n outline-style: none;\n }\n .select-none {\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n }\n .duration-200 {\n animation-duration: 200ms;\n }\n .group-data-\\[disabled\\=true\\]\\:pointer-events-none {\n &:is(:where(.group)[data-disabled=\"true\"] *) {\n pointer-events: none;\n }\n }\n .group-data-\\[disabled\\=true\\]\\:opacity-50 {\n &:is(:where(.group)[data-disabled=\"true\"] *) {\n opacity: 50%;\n }\n }\n .peer-disabled\\:cursor-not-allowed {\n &:is(:where(.peer):disabled ~ *) {\n cursor: not-allowed;\n }\n }\n .peer-disabled\\:opacity-50 {\n &:is(:where(.peer):disabled ~ *) {\n opacity: 50%;\n }\n }\n .selection\\:bg-primary {\n & *::-moz-selection {\n background-color: var(--primary);\n }\n & *::selection {\n background-color: var(--primary);\n }\n &::-moz-selection {\n background-color: var(--primary);\n }\n &::selection {\n background-color: var(--primary);\n }\n }\n .selection\\:text-primary-foreground {\n & *::-moz-selection {\n color: var(--primary-foreground);\n }\n & *::selection {\n color: var(--primary-foreground);\n }\n &::-moz-selection {\n color: var(--primary-foreground);\n }\n &::selection {\n color: var(--primary-foreground);\n }\n }\n .file\\:inline-flex {\n &::file-selector-button {\n display: inline-flex;\n }\n }\n .file\\:h-7 {\n &::file-selector-button {\n height: calc(var(--spacing) * 7);\n }\n }\n .file\\:border-0 {\n &::file-selector-button {\n border-style: var(--tw-border-style);\n border-width: 0px;\n }\n }\n .file\\:bg-transparent {\n &::file-selector-button {\n background-color: transparent;\n }\n }\n .file\\:text-sm {\n &::file-selector-button {\n font-size: var(--text-sm);\n line-height: var(--tw-leading, var(--text-sm--line-height));\n }\n }\n .file\\:font-medium {\n &::file-selector-button {\n --tw-font-weight: var(--font-weight-medium);\n font-weight: var(--font-weight-medium);\n }\n }\n .file\\:text-foreground {\n &::file-selector-button {\n color: var(--foreground);\n }\n }\n .placeholder\\:text-muted-foreground {\n &::-moz-placeholder {\n color: var(--muted-foreground);\n }\n &::placeholder {\n color: var(--muted-foreground);\n }\n }\n .hover\\:bg-accent {\n &:hover {\n @media (hover: hover) {\n background-color: var(--accent);\n }\n }\n }\n .hover\\:bg-destructive\\/90 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--destructive) 90%, transparent);\n }\n }\n }\n }\n .hover\\:bg-muted {\n &:hover {\n @media (hover: hover) {\n background-color: var(--muted);\n }\n }\n }\n .hover\\:bg-primary\\/90 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--primary);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--primary) 90%, transparent);\n }\n }\n }\n }\n .hover\\:bg-secondary\\/80 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--secondary);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--secondary) 80%, transparent);\n }\n }\n }\n }\n .hover\\:text-accent-foreground {\n &:hover {\n @media (hover: hover) {\n color: var(--accent-foreground);\n }\n }\n }\n .hover\\:text-foreground {\n &:hover {\n @media (hover: hover) {\n color: var(--foreground);\n }\n }\n }\n .hover\\:underline {\n &:hover {\n @media (hover: hover) {\n text-decoration-line: underline;\n }\n }\n }\n .hover\\:opacity-100 {\n &:hover {\n @media (hover: hover) {\n opacity: 100%;\n }\n }\n }\n .focus\\:bg-accent {\n &:focus {\n background-color: var(--accent);\n }\n }\n .focus\\:text-accent-foreground {\n &:focus {\n color: var(--accent-foreground);\n }\n }\n .focus\\:ring-1 {\n &:focus {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n .focus\\:ring-2 {\n &:focus {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n .focus\\:ring-ring {\n &:focus {\n --tw-ring-color: var(--ring);\n }\n }\n .focus\\:ring-offset-2 {\n &:focus {\n --tw-ring-offset-width: 2px;\n --tw-ring-offset-shadow: var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n }\n }\n .focus\\:outline-hidden {\n &:focus {\n --tw-outline-style: none;\n outline-style: none;\n @media (forced-colors: active) {\n outline: 2px solid transparent;\n outline-offset: 2px;\n }\n }\n }\n .focus\\:outline-none {\n &:focus {\n --tw-outline-style: none;\n outline-style: none;\n }\n }\n .focus-visible\\:border-ring {\n &:focus-visible {\n border-color: var(--ring);\n }\n }\n .focus-visible\\:ring-\\[3px\\] {\n &:focus-visible {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n .focus-visible\\:ring-destructive\\/20 {\n &:focus-visible {\n --tw-ring-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--destructive) 20%, transparent);\n }\n }\n }\n .focus-visible\\:ring-ring\\/50 {\n &:focus-visible {\n --tw-ring-color: var(--ring);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--ring) 50%, transparent);\n }\n }\n }\n .disabled\\:pointer-events-none {\n &:disabled {\n pointer-events: none;\n }\n }\n .disabled\\:cursor-not-allowed {\n &:disabled {\n cursor: not-allowed;\n }\n }\n .disabled\\:opacity-50 {\n &:disabled {\n opacity: 50%;\n }\n }\n .has-\\[\\>svg\\]\\:px-2\\.5 {\n &:has(>svg) {\n padding-inline: calc(var(--spacing) * 2.5);\n }\n }\n .has-\\[\\>svg\\]\\:px-3 {\n &:has(>svg) {\n padding-inline: calc(var(--spacing) * 3);\n }\n }\n .has-\\[\\>svg\\]\\:px-4 {\n &:has(>svg) {\n padding-inline: calc(var(--spacing) * 4);\n }\n }\n .aria-invalid\\:border-destructive {\n &[aria-invalid=\"true\"] {\n border-color: var(--destructive);\n }\n }\n .aria-invalid\\:ring-destructive\\/20 {\n &[aria-invalid=\"true\"] {\n --tw-ring-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--destructive) 20%, transparent);\n }\n }\n }\n .data-\\[disabled\\]\\:pointer-events-none {\n &[data-disabled] {\n pointer-events: none;\n }\n }\n .data-\\[disabled\\]\\:opacity-50 {\n &[data-disabled] {\n opacity: 50%;\n }\n }\n .data-\\[disabled\\=true\\]\\:pointer-events-none {\n &[data-disabled=\"true\"] {\n pointer-events: none;\n }\n }\n .data-\\[disabled\\=true\\]\\:opacity-50 {\n &[data-disabled=\"true\"] {\n opacity: 50%;\n }\n }\n .data-\\[error\\=true\\]\\:text-destructive-foreground {\n &[data-error=\"true\"] {\n color: var(--destructive-foreground);\n }\n }\n .data-\\[inset\\]\\:pl-8 {\n &[data-inset] {\n padding-left: calc(var(--spacing) * 8);\n }\n }\n .data-\\[placeholder\\]\\:text-muted-foreground {\n &[data-placeholder] {\n color: var(--muted-foreground);\n }\n }\n .data-\\[selected\\=true\\]\\:bg-accent {\n &[data-selected=\"true\"] {\n background-color: var(--accent);\n }\n }\n .data-\\[selected\\=true\\]\\:text-accent-foreground {\n &[data-selected=\"true\"] {\n color: var(--accent-foreground);\n }\n }\n .data-\\[side\\=bottom\\]\\:translate-y-1 {\n &[data-side=\"bottom\"] {\n --tw-translate-y: calc(var(--spacing) * 1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n }\n .data-\\[side\\=bottom\\]\\:slide-in-from-top-2 {\n &[data-side=\"bottom\"] {\n --tw-enter-translate-y: -0.5rem;\n }\n }\n .data-\\[side\\=left\\]\\:-translate-x-1 {\n &[data-side=\"left\"] {\n --tw-translate-x: calc(var(--spacing) * -1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n }\n .data-\\[side\\=left\\]\\:slide-in-from-right-2 {\n &[data-side=\"left\"] {\n --tw-enter-translate-x: 0.5rem;\n }\n }\n .data-\\[side\\=right\\]\\:translate-x-1 {\n &[data-side=\"right\"] {\n --tw-translate-x: calc(var(--spacing) * 1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n }\n .data-\\[side\\=right\\]\\:slide-in-from-left-2 {\n &[data-side=\"right\"] {\n --tw-enter-translate-x: -0.5rem;\n }\n }\n .data-\\[side\\=top\\]\\:-translate-y-1 {\n &[data-side=\"top\"] {\n --tw-translate-y: calc(var(--spacing) * -1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n }\n .data-\\[side\\=top\\]\\:slide-in-from-bottom-2 {\n &[data-side=\"top\"] {\n --tw-enter-translate-y: 0.5rem;\n }\n }\n .\\*\\*\\:data-\\[slot\\=command-input-wrapper\\]\\:h-12 {\n :is(& *) {\n &[data-slot=\"command-input-wrapper\"] {\n height: calc(var(--spacing) * 12);\n }\n }\n }\n .\\*\\:data-\\[slot\\=select-value\\]\\:line-clamp-1 {\n :is(& > *) {\n &[data-slot=\"select-value\"] {\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 1;\n }\n }\n }\n .\\*\\:data-\\[slot\\=select-value\\]\\:flex {\n :is(& > *) {\n &[data-slot=\"select-value\"] {\n display: flex;\n }\n }\n }\n .\\*\\:data-\\[slot\\=select-value\\]\\:items-center {\n :is(& > *) {\n &[data-slot=\"select-value\"] {\n align-items: center;\n }\n }\n }\n .\\*\\:data-\\[slot\\=select-value\\]\\:gap-2 {\n :is(& > *) {\n &[data-slot=\"select-value\"] {\n gap: calc(var(--spacing) * 2);\n }\n }\n }\n .data-\\[state\\=checked\\]\\:border-primary {\n &[data-state=\"checked\"] {\n border-color: var(--primary);\n }\n }\n .data-\\[state\\=checked\\]\\:bg-primary {\n &[data-state=\"checked\"] {\n background-color: var(--primary);\n }\n }\n .data-\\[state\\=checked\\]\\:text-primary-foreground {\n &[data-state=\"checked\"] {\n color: var(--primary-foreground);\n }\n }\n .data-\\[state\\=closed\\]\\:animate-out {\n &[data-state=\"closed\"] {\n animation-name: exit;\n animation-duration: 150ms;\n --tw-exit-opacity: initial;\n --tw-exit-scale: initial;\n --tw-exit-rotate: initial;\n --tw-exit-translate-x: initial;\n --tw-exit-translate-y: initial;\n }\n }\n .data-\\[state\\=closed\\]\\:fade-out-0 {\n &[data-state=\"closed\"] {\n --tw-exit-opacity: 0;\n }\n }\n .data-\\[state\\=closed\\]\\:zoom-out-95 {\n &[data-state=\"closed\"] {\n --tw-exit-scale: .95;\n }\n }\n .data-\\[state\\=open\\]\\:bg-accent {\n &[data-state=\"open\"] {\n background-color: var(--accent);\n }\n }\n .data-\\[state\\=open\\]\\:text-accent-foreground {\n &[data-state=\"open\"] {\n color: var(--accent-foreground);\n }\n }\n .data-\\[state\\=open\\]\\:text-muted-foreground {\n &[data-state=\"open\"] {\n color: var(--muted-foreground);\n }\n }\n .data-\\[state\\=open\\]\\:animate-in {\n &[data-state=\"open\"] {\n animation-name: enter;\n animation-duration: 150ms;\n --tw-enter-opacity: initial;\n --tw-enter-scale: initial;\n --tw-enter-rotate: initial;\n --tw-enter-translate-x: initial;\n --tw-enter-translate-y: initial;\n }\n }\n .data-\\[state\\=open\\]\\:fade-in-0 {\n &[data-state=\"open\"] {\n --tw-enter-opacity: 0;\n }\n }\n .data-\\[state\\=open\\]\\:zoom-in-95 {\n &[data-state=\"open\"] {\n --tw-enter-scale: .95;\n }\n }\n .data-\\[variant\\=destructive\\]\\:text-destructive {\n &[data-variant=\"destructive\"] {\n color: var(--destructive);\n }\n }\n .data-\\[variant\\=destructive\\]\\:focus\\:bg-destructive\\/10 {\n &[data-variant=\"destructive\"] {\n &:focus {\n background-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--destructive) 10%, transparent);\n }\n }\n }\n }\n .data-\\[variant\\=destructive\\]\\:focus\\:text-destructive {\n &[data-variant=\"destructive\"] {\n &:focus {\n color: var(--destructive);\n }\n }\n }\n .max-md\\:cursor-pointer {\n @media (width < 48rem) {\n cursor: pointer;\n }\n }\n .max-sm\\:hidden {\n @media (width < 40rem) {\n display: none;\n }\n }\n .sm\\:max-h-\\[270px\\] {\n @media (width >= 40rem) {\n max-height: 270px;\n }\n }\n .sm\\:max-w-\\[500px\\] {\n @media (width >= 40rem) {\n max-width: 500px;\n }\n }\n .sm\\:max-w-lg {\n @media (width >= 40rem) {\n max-width: var(--container-lg);\n }\n }\n .sm\\:flex-row {\n @media (width >= 40rem) {\n flex-direction: row;\n }\n }\n .sm\\:justify-end {\n @media (width >= 40rem) {\n justify-content: flex-end;\n }\n }\n .sm\\:text-left {\n @media (width >= 40rem) {\n text-align: left;\n }\n }\n .md\\:order-last {\n @media (width >= 48rem) {\n order: 9999;\n }\n }\n .md\\:order-none {\n @media (width >= 48rem) {\n order: 0;\n }\n }\n .md\\:col-span-2 {\n @media (width >= 48rem) {\n grid-column: span 2 / span 2;\n }\n }\n .md\\:col-span-3 {\n @media (width >= 48rem) {\n grid-column: span 3 / span 3;\n }\n }\n .md\\:col-span-4 {\n @media (width >= 48rem) {\n grid-column: span 4 / span 4;\n }\n }\n .md\\:block {\n @media (width >= 48rem) {\n display: block;\n }\n }\n .md\\:flex {\n @media (width >= 48rem) {\n display: flex;\n }\n }\n .md\\:grid {\n @media (width >= 48rem) {\n display: grid;\n }\n }\n .md\\:hidden {\n @media (width >= 48rem) {\n display: none;\n }\n }\n .md\\:max-w-\\[75\\%\\] {\n @media (width >= 48rem) {\n max-width: 75%;\n }\n }\n .md\\:grid-cols-2 {\n @media (width >= 48rem) {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n }\n .md\\:grid-cols-7 {\n @media (width >= 48rem) {\n grid-template-columns: repeat(7, minmax(0, 1fr));\n }\n }\n .md\\:gap-0 {\n @media (width >= 48rem) {\n gap: calc(var(--spacing) * 0);\n }\n }\n .md\\:px-8 {\n @media (width >= 48rem) {\n padding-inline: calc(var(--spacing) * 8);\n }\n }\n .md\\:py-12 {\n @media (width >= 48rem) {\n padding-block: calc(var(--spacing) * 12);\n }\n }\n .md\\:text-sm {\n @media (width >= 48rem) {\n font-size: var(--text-sm);\n line-height: var(--tw-leading, var(--text-sm--line-height));\n }\n }\n .dark\\:focus-visible\\:ring-destructive\\/40 {\n @media (prefers-color-scheme: dark) {\n &:focus-visible {\n --tw-ring-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--destructive) 40%, transparent);\n }\n }\n }\n }\n .dark\\:aria-invalid\\:ring-destructive\\/40 {\n @media (prefers-color-scheme: dark) {\n &[aria-invalid=\"true\"] {\n --tw-ring-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--destructive) 40%, transparent);\n }\n }\n }\n }\n .dark\\:data-\\[variant\\=destructive\\]\\:focus\\:bg-destructive\\/20 {\n @media (prefers-color-scheme: dark) {\n &[data-variant=\"destructive\"] {\n &:focus {\n background-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--destructive) 20%, transparent);\n }\n }\n }\n }\n }\n .\\[\\&_\\[cmdk-group-heading\\]\\]\\:px-2 {\n & [cmdk-group-heading] {\n padding-inline: calc(var(--spacing) * 2);\n }\n }\n .\\[\\&_\\[cmdk-group-heading\\]\\]\\:py-1\\.5 {\n & [cmdk-group-heading] {\n padding-block: calc(var(--spacing) * 1.5);\n }\n }\n .\\[\\&_\\[cmdk-group-heading\\]\\]\\:text-xs {\n & [cmdk-group-heading] {\n font-size: var(--text-xs);\n line-height: var(--tw-leading, var(--text-xs--line-height));\n }\n }\n .\\[\\&_\\[cmdk-group-heading\\]\\]\\:font-medium {\n & [cmdk-group-heading] {\n --tw-font-weight: var(--font-weight-medium);\n font-weight: var(--font-weight-medium);\n }\n }\n .\\[\\&_\\[cmdk-group-heading\\]\\]\\:text-muted-foreground {\n & [cmdk-group-heading] {\n color: var(--muted-foreground);\n }\n }\n .\\[\\&_\\[cmdk-group\\]\\]\\:px-2 {\n & [cmdk-group] {\n padding-inline: calc(var(--spacing) * 2);\n }\n }\n .\\[\\&_\\[cmdk-group\\]\\:not\\(\\[hidden\\]\\)_\\~\\[cmdk-group\\]\\]\\:pt-0 {\n & [cmdk-group]:not([hidden]) ~[cmdk-group] {\n padding-top: calc(var(--spacing) * 0);\n }\n }\n .\\[\\&_\\[cmdk-input-wrapper\\]_svg\\]\\:h-5 {\n & [cmdk-input-wrapper] svg {\n height: calc(var(--spacing) * 5);\n }\n }\n .\\[\\&_\\[cmdk-input-wrapper\\]_svg\\]\\:w-5 {\n & [cmdk-input-wrapper] svg {\n width: calc(var(--spacing) * 5);\n }\n }\n .\\[\\&_\\[cmdk-input\\]\\]\\:h-12 {\n & [cmdk-input] {\n height: calc(var(--spacing) * 12);\n }\n }\n .\\[\\&_\\[cmdk-item\\]\\]\\:px-2 {\n & [cmdk-item] {\n padding-inline: calc(var(--spacing) * 2);\n }\n }\n .\\[\\&_\\[cmdk-item\\]\\]\\:py-3 {\n & [cmdk-item] {\n padding-block: calc(var(--spacing) * 3);\n }\n }\n .\\[\\&_\\[cmdk-item\\]_svg\\]\\:h-5 {\n & [cmdk-item] svg {\n height: calc(var(--spacing) * 5);\n }\n }\n .\\[\\&_\\[cmdk-item\\]_svg\\]\\:w-5 {\n & [cmdk-item] svg {\n width: calc(var(--spacing) * 5);\n }\n }\n .\\[\\&_svg\\]\\:pointer-events-none {\n & svg {\n pointer-events: none;\n }\n }\n .\\[\\&_svg\\]\\:shrink-0 {\n & svg {\n flex-shrink: 0;\n }\n }\n .\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-4 {\n & svg:not([class*='size-']) {\n width: calc(var(--spacing) * 4);\n height: calc(var(--spacing) * 4);\n }\n }\n .\\[\\&_svg\\:not\\(\\[class\\*\\=\\'text-\\'\\]\\)\\]\\:text-muted-foreground {\n & svg:not([class*='text-']) {\n color: var(--muted-foreground);\n }\n }\n .\\*\\:\\[span\\]\\:last\\:flex {\n :is(& > *) {\n &:is(span) {\n &:last-child {\n display: flex;\n }\n }\n }\n }\n .\\*\\:\\[span\\]\\:last\\:items-center {\n :is(& > *) {\n &:is(span) {\n &:last-child {\n align-items: center;\n }\n }\n }\n }\n .\\*\\:\\[span\\]\\:last\\:gap-2 {\n :is(& > *) {\n &:is(span) {\n &:last-child {\n gap: calc(var(--spacing) * 2);\n }\n }\n }\n }\n .data-\\[variant\\=destructive\\]\\:\\*\\:\\[svg\\]\\:\\!text-destructive {\n &[data-variant=\"destructive\"] {\n :is(& > *) {\n &:is(svg) {\n color: var(--destructive) !important;\n }\n }\n }\n }\n .\\[\\&\\>span\\]\\:line-clamp-1 {\n &>span {\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 1;\n }\n }\n}\n:root {\n --background: oklch(1 0 0);\n --foreground: oklch(0.145 0 0);\n --card: oklch(1 0 0);\n --card-foreground: oklch(0.145 0 0);\n --popover: oklch(1 0 0);\n --popover-foreground: oklch(0.145 0 0);\n --primary: oklch(0.205 0 0);\n --primary-foreground: oklch(0.985 0 0);\n --secondary: oklch(0.97 0 0);\n --secondary-foreground: oklch(0.205 0 0);\n --muted: oklch(0.97 0 0);\n --muted-foreground: oklch(0.556 0 0);\n --accent: oklch(0.97 0 0);\n --accent-foreground: oklch(0.205 0 0);\n --destructive: oklch(0.577 0.245 27.325);\n --destructive-foreground: oklch(0.577 0.245 27.325);\n --border: oklch(0.922 0 0);\n --input: oklch(0.922 0 0);\n --ring: oklch(0.708 0 0);\n --chart-1: oklch(0.646 0.222 41.116);\n --chart-2: oklch(0.6 0.118 184.704);\n --chart-3: oklch(0.398 0.07 227.392);\n --chart-4: oklch(0.828 0.189 84.429);\n --chart-5: oklch(0.769 0.188 70.08);\n --radius: 0.625rem;\n --sidebar: oklch(0.985 0 0);\n --sidebar-foreground: oklch(0.145 0 0);\n --sidebar-primary: oklch(0.205 0 0);\n --sidebar-primary-foreground: oklch(0.985 0 0);\n --sidebar-accent: oklch(0.97 0 0);\n --sidebar-accent-foreground: oklch(0.205 0 0);\n --sidebar-border: oklch(0.922 0 0);\n --sidebar-ring: oklch(0.708 0 0);\n}\n@layer base {\n * {\n border-color: var(--border);\n outline-color: var(--ring);\n @supports (color: color-mix(in lab, red, red)) {\n outline-color: color-mix(in oklab, var(--ring) 50%, transparent);\n }\n }\n .checkout-embed {\n background-color: var(--background);\n font-family: var(--font-sans), Helvetica, Arial, apple-system, sans-serif;\n color: var(--foreground);\n }\n h2 {\n font-size: var(--text-2xl);\n line-height: var(--tw-leading, var(--text-2xl--line-height));\n --tw-font-weight: var(--font-weight-bold);\n font-weight: var(--font-weight-bold);\n --tw-tracking: var(--tracking-tight);\n letter-spacing: var(--tracking-tight);\n }\n p {\n --tw-tracking: var(--tracking-tight) !important;\n letter-spacing: var(--tracking-tight) !important;\n }\n}\n@layer utilities {\n .scrollbar-hidden {\n scrollbar-width: none;\n }\n .scrollbar-hidden::-webkit-scrollbar {\n display: none;\n }\n}\n@keyframes enter {\n from {\n opacity: var(--tw-enter-opacity, 1);\n 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));\n }\n}\n@keyframes exit {\n to {\n opacity: var(--tw-exit-opacity, 1);\n 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));\n }\n}\n@property --tw-translate-x {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-translate-y {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-translate-z {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-space-y-reverse {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-space-x-reverse {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-border-style {\n syntax: \"*\";\n inherits: false;\n initial-value: solid;\n}\n@property --tw-leading {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-font-weight {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-tracking {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-shadow-alpha {\n syntax: \"<percentage>\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-inset-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-inset-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-inset-shadow-alpha {\n syntax: \"<percentage>\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-ring-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ring-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-inset-ring-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-inset-ring-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-ring-inset {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ring-offset-width {\n syntax: \"<length>\";\n inherits: false;\n initial-value: 0px;\n}\n@property --tw-ring-offset-color {\n syntax: \"*\";\n inherits: false;\n initial-value: #fff;\n}\n@property --tw-ring-offset-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-outline-style {\n syntax: \"*\";\n inherits: false;\n initial-value: solid;\n}\n@property --tw-duration {\n syntax: \"*\";\n inherits: false;\n}\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n@keyframes pulse {\n 50% {\n opacity: 0.5;\n }\n}\n@layer properties {\n @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {\n *, ::before, ::after, ::backdrop {\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-translate-z: 0;\n --tw-space-y-reverse: 0;\n --tw-space-x-reverse: 0;\n --tw-border-style: solid;\n --tw-leading: initial;\n --tw-font-weight: initial;\n --tw-tracking: initial;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-color: initial;\n --tw-shadow-alpha: 100%;\n --tw-inset-shadow: 0 0 #0000;\n --tw-inset-shadow-color: initial;\n --tw-inset-shadow-alpha: 100%;\n --tw-ring-color: initial;\n --tw-ring-shadow: 0 0 #0000;\n --tw-inset-ring-color: initial;\n --tw-inset-ring-shadow: 0 0 #0000;\n --tw-ring-inset: initial;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-outline-style: solid;\n --tw-duration: initial;\n }\n }\n}\n";
|
|
7498
|
+
var css_248z = "/*! tailwindcss v4.1.11 | MIT License | https://tailwindcss.com */\n@layer properties;\n@layer theme, base, components, utilities;\n@layer theme {\n :root, :host {\n --font-sans: var(--font-sans), Helvetica, Arial, apple-system, sans-serif;\n --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\",\n \"Courier New\", monospace;\n --color-red-500: oklch(63.7% 0.237 25.331);\n --color-black: #000;\n --color-white: #fff;\n --spacing: 0.25rem;\n --container-lg: 32rem;\n --text-xs: 0.75rem;\n --text-xs--line-height: calc(1 / 0.75);\n --text-sm: 0.875rem;\n --text-sm--line-height: calc(1.25 / 0.875);\n --text-base: 1rem;\n --text-base--line-height: calc(1.5 / 1);\n --text-lg: 1.125rem;\n --text-lg--line-height: calc(1.75 / 1.125);\n --text-2xl: 1.5rem;\n --text-2xl--line-height: calc(2 / 1.5);\n --font-weight-medium: 500;\n --font-weight-semibold: 600;\n --font-weight-bold: 700;\n --tracking-tight: -0.025em;\n --tracking-widest: 0.1em;\n --radius-xs: 0.125rem;\n --animate-spin: spin 1s linear infinite;\n --animate-pulse: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;\n --default-transition-duration: 150ms;\n --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n --default-font-family: var(--font-sans), Helvetica, Arial, apple-system, sans-serif;\n --default-mono-font-family: var(--font-mono);\n }\n}\n@layer base {\n *, ::after, ::before, ::backdrop, ::file-selector-button {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n border: 0 solid;\n }\n html, :host {\n line-height: 1.5;\n -webkit-text-size-adjust: 100%;\n -moz-tab-size: 4;\n -o-tab-size: 4;\n tab-size: 4;\n 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\");\n font-feature-settings: var(--default-font-feature-settings, normal);\n font-variation-settings: var(--default-font-variation-settings, normal);\n -webkit-tap-highlight-color: transparent;\n }\n hr {\n height: 0;\n color: inherit;\n border-top-width: 1px;\n }\n abbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n }\n h1, h2, h3, h4, h5, h6 {\n font-size: inherit;\n font-weight: inherit;\n }\n a {\n color: inherit;\n -webkit-text-decoration: inherit;\n text-decoration: inherit;\n }\n b, strong {\n font-weight: bolder;\n }\n code, kbd, samp, pre {\n font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace);\n font-feature-settings: var(--default-mono-font-feature-settings, normal);\n font-variation-settings: var(--default-mono-font-variation-settings, normal);\n font-size: 1em;\n }\n small {\n font-size: 80%;\n }\n sub, sup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n }\n sub {\n bottom: -0.25em;\n }\n sup {\n top: -0.5em;\n }\n table {\n text-indent: 0;\n border-color: inherit;\n border-collapse: collapse;\n }\n :-moz-focusring {\n outline: auto;\n }\n progress {\n vertical-align: baseline;\n }\n summary {\n display: list-item;\n }\n ol, ul, menu {\n list-style: none;\n }\n img, svg, video, canvas, audio, iframe, embed, object {\n display: block;\n vertical-align: middle;\n }\n img, video {\n max-width: 100%;\n height: auto;\n }\n button, input, select, optgroup, textarea, ::file-selector-button {\n font: inherit;\n font-feature-settings: inherit;\n font-variation-settings: inherit;\n letter-spacing: inherit;\n color: inherit;\n border-radius: 0;\n background-color: transparent;\n opacity: 1;\n }\n :where(select:is([multiple], [size])) optgroup {\n font-weight: bolder;\n }\n :where(select:is([multiple], [size])) optgroup option {\n padding-inline-start: 20px;\n }\n ::file-selector-button {\n margin-inline-end: 4px;\n }\n ::-moz-placeholder {\n opacity: 1;\n }\n ::placeholder {\n opacity: 1;\n }\n @supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) {\n ::-moz-placeholder {\n color: currentcolor;\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, currentcolor 50%, transparent);\n }\n }\n ::placeholder {\n color: currentcolor;\n @supports (color: color-mix(in lab, red, red)) {\n color: color-mix(in oklab, currentcolor 50%, transparent);\n }\n }\n }\n textarea {\n resize: vertical;\n }\n ::-webkit-search-decoration {\n -webkit-appearance: none;\n }\n ::-webkit-date-and-time-value {\n min-height: 1lh;\n text-align: inherit;\n }\n ::-webkit-datetime-edit {\n display: inline-flex;\n }\n ::-webkit-datetime-edit-fields-wrapper {\n padding: 0;\n }\n ::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field {\n padding-block: 0;\n }\n :-moz-ui-invalid {\n box-shadow: none;\n }\n button, input:where([type=\"button\"], [type=\"reset\"], [type=\"submit\"]), ::file-selector-button {\n -webkit-appearance: button;\n -moz-appearance: button;\n appearance: button;\n }\n ::-webkit-inner-spin-button, ::-webkit-outer-spin-button {\n height: auto;\n }\n [hidden]:where(:not([hidden=\"until-found\"])) {\n display: none !important;\n }\n}\n@layer utilities {\n .pointer-events-none {\n pointer-events: none;\n }\n .sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n }\n .absolute {\n position: absolute;\n }\n .fixed {\n position: fixed;\n }\n .relative {\n position: relative;\n }\n .sticky {\n position: sticky;\n }\n .inset-0 {\n inset: calc(var(--spacing) * 0);\n }\n .-top-2 {\n top: calc(var(--spacing) * -2);\n }\n .top-0 {\n top: calc(var(--spacing) * 0);\n }\n .top-0\\.5 {\n top: calc(var(--spacing) * 0.5);\n }\n .top-1\\/2 {\n top: calc(1/2 * 100%);\n }\n .top-4 {\n top: calc(var(--spacing) * 4);\n }\n .top-\\[50\\%\\] {\n top: 50%;\n }\n .-right-2 {\n right: calc(var(--spacing) * -2);\n }\n .right-2 {\n right: calc(var(--spacing) * 2);\n }\n .right-4 {\n right: calc(var(--spacing) * 4);\n }\n .left-1\\/2 {\n left: calc(1/2 * 100%);\n }\n .left-2 {\n left: calc(var(--spacing) * 2);\n }\n .left-\\[50\\%\\] {\n left: 50%;\n }\n .z-10 {\n z-index: 10;\n }\n .z-50 {\n z-index: 50;\n }\n .order-3 {\n order: 3;\n }\n .order-4 {\n order: 4;\n }\n .order-5 {\n order: 5;\n }\n .order-6 {\n order: 6;\n }\n .order-7 {\n order: 7;\n }\n .order-first {\n order: -9999;\n }\n .col-span-2 {\n grid-column: span 2 / span 2;\n }\n .-m-0\\.5 {\n margin: calc(var(--spacing) * -0.5);\n }\n .-mx-1 {\n margin-inline: calc(var(--spacing) * -1);\n }\n .mx-auto {\n margin-inline: auto;\n }\n .my-1 {\n margin-block: calc(var(--spacing) * 1);\n }\n .my-2 {\n margin-block: calc(var(--spacing) * 2);\n }\n .mt-2 {\n margin-top: calc(var(--spacing) * 2);\n }\n .mt-8 {\n margin-top: calc(var(--spacing) * 8);\n }\n .-mb-0\\.5 {\n margin-bottom: calc(var(--spacing) * -0.5);\n }\n .mb-1 {\n margin-bottom: calc(var(--spacing) * 1);\n }\n .mb-2 {\n margin-bottom: calc(var(--spacing) * 2);\n }\n .ml-4 {\n margin-left: calc(var(--spacing) * 4);\n }\n .ml-auto {\n margin-left: auto;\n }\n .line-clamp-1 {\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 1;\n }\n .block {\n display: block;\n }\n .flex {\n display: flex;\n }\n .grid {\n display: grid;\n }\n .hidden {\n display: none;\n }\n .inline-flex {\n display: inline-flex;\n }\n .aspect-square {\n aspect-ratio: 1 / 1;\n }\n .size-2 {\n width: calc(var(--spacing) * 2);\n height: calc(var(--spacing) * 2);\n }\n .size-3 {\n width: calc(var(--spacing) * 3);\n height: calc(var(--spacing) * 3);\n }\n .size-3\\.5 {\n width: calc(var(--spacing) * 3.5);\n height: calc(var(--spacing) * 3.5);\n }\n .size-4 {\n width: calc(var(--spacing) * 4);\n height: calc(var(--spacing) * 4);\n }\n .size-5 {\n width: calc(var(--spacing) * 5);\n height: calc(var(--spacing) * 5);\n }\n .size-9 {\n width: calc(var(--spacing) * 9);\n height: calc(var(--spacing) * 9);\n }\n .size-16 {\n width: calc(var(--spacing) * 16);\n height: calc(var(--spacing) * 16);\n }\n .h-3 {\n height: calc(var(--spacing) * 3);\n }\n .h-3\\.5 {\n height: calc(var(--spacing) * 3.5);\n }\n .h-4 {\n height: calc(var(--spacing) * 4);\n }\n .h-5 {\n height: calc(var(--spacing) * 5);\n }\n .h-6 {\n height: calc(var(--spacing) * 6);\n }\n .h-8 {\n height: calc(var(--spacing) * 8);\n }\n .h-9 {\n height: calc(var(--spacing) * 9);\n }\n .h-10 {\n height: calc(var(--spacing) * 10);\n }\n .h-12 {\n height: calc(var(--spacing) * 12);\n }\n .h-16 {\n height: calc(var(--spacing) * 16);\n }\n .h-\\[18px\\] {\n height: 18px;\n }\n .h-\\[20px\\] {\n height: 20px;\n }\n .h-\\[450px\\] {\n height: 450px;\n }\n .h-\\[var\\(--radix-select-trigger-height\\)\\] {\n height: var(--radix-select-trigger-height);\n }\n .h-auto {\n height: auto;\n }\n .h-auto\\! {\n height: auto !important;\n }\n .h-full {\n height: 100%;\n }\n .h-max {\n height: -moz-max-content;\n height: max-content;\n }\n .h-px {\n height: 1px;\n }\n .max-h-\\(--radix-dropdown-menu-content-available-height\\) {\n max-height: var(--radix-dropdown-menu-content-available-height);\n }\n .max-h-96 {\n max-height: calc(var(--spacing) * 96);\n }\n .max-h-\\[200px\\] {\n max-height: 200px;\n }\n .max-h-\\[300px\\] {\n max-height: 300px;\n }\n .min-h-full {\n min-height: 100%;\n }\n .min-h-screen {\n min-height: 100vh;\n }\n .w-0 {\n width: calc(var(--spacing) * 0);\n }\n .w-4 {\n width: calc(var(--spacing) * 4);\n }\n .w-5 {\n width: calc(var(--spacing) * 5);\n }\n .w-6 {\n width: calc(var(--spacing) * 6);\n }\n .w-10 {\n width: calc(var(--spacing) * 10);\n }\n .w-12 {\n width: calc(var(--spacing) * 12);\n }\n .w-16 {\n width: calc(var(--spacing) * 16);\n }\n .w-20 {\n width: calc(var(--spacing) * 20);\n }\n .w-24 {\n width: calc(var(--spacing) * 24);\n }\n .w-28 {\n width: calc(var(--spacing) * 28);\n }\n .w-32 {\n width: calc(var(--spacing) * 32);\n }\n .w-40 {\n width: calc(var(--spacing) * 40);\n }\n .w-72 {\n width: calc(var(--spacing) * 72);\n }\n .w-fit {\n width: -moz-fit-content;\n width: fit-content;\n }\n .w-full {\n width: 100%;\n }\n .max-w-\\[1200px\\] {\n max-width: 1200px;\n }\n .max-w-\\[calc\\(100\\%-2rem\\)\\] {\n max-width: calc(100% - 2rem);\n }\n .min-w-0 {\n min-width: calc(var(--spacing) * 0);\n }\n .min-w-\\[--radix-popper-anchor-width\\] {\n min-width: --radix-popper-anchor-width;\n }\n .min-w-\\[8rem\\] {\n min-width: 8rem;\n }\n .min-w-\\[var\\(--radix-select-trigger-width\\)\\] {\n min-width: var(--radix-select-trigger-width);\n }\n .flex-1 {\n flex: 1;\n }\n .shrink-0 {\n flex-shrink: 0;\n }\n .flex-grow {\n flex-grow: 1;\n }\n .origin-\\(--radix-dropdown-menu-content-transform-origin\\) {\n transform-origin: var(--radix-dropdown-menu-content-transform-origin);\n }\n .origin-\\(--radix-popover-content-transform-origin\\) {\n transform-origin: var(--radix-popover-content-transform-origin);\n }\n .-translate-x-1\\/2 {\n --tw-translate-x: calc(calc(1/2 * 100%) * -1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .translate-x-\\[-50\\%\\] {\n --tw-translate-x: -50%;\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .-translate-y-1\\/2 {\n --tw-translate-y: calc(calc(1/2 * 100%) * -1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .translate-y-\\[-50\\%\\] {\n --tw-translate-y: -50%;\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n .rotate-180 {\n rotate: 180deg;\n }\n .transform-none\\! {\n transform: none !important;\n }\n .animate-pulse {\n animation: var(--animate-pulse);\n }\n .animate-spin {\n animation: var(--animate-spin);\n }\n .cursor-default {\n cursor: default;\n }\n .cursor-pointer {\n cursor: pointer;\n }\n .resize {\n resize: both;\n }\n .scroll-my-1 {\n scroll-margin-block: calc(var(--spacing) * 1);\n }\n .scroll-py-1 {\n scroll-padding-block: calc(var(--spacing) * 1);\n }\n .grid-cols-2 {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n .flex-col {\n flex-direction: column;\n }\n .flex-col-reverse {\n flex-direction: column-reverse;\n }\n .items-center {\n align-items: center;\n }\n .justify-between {\n justify-content: space-between;\n }\n .justify-center {\n justify-content: center;\n }\n .justify-end {\n justify-content: flex-end;\n }\n .gap-0 {\n gap: calc(var(--spacing) * 0);\n }\n .gap-0\\.5 {\n gap: calc(var(--spacing) * 0.5);\n }\n .gap-1\\.5 {\n gap: calc(var(--spacing) * 1.5);\n }\n .gap-2 {\n gap: calc(var(--spacing) * 2);\n }\n .gap-3 {\n gap: calc(var(--spacing) * 3);\n }\n .gap-4 {\n gap: calc(var(--spacing) * 4);\n }\n .gap-5 {\n gap: calc(var(--spacing) * 5);\n }\n .gap-6 {\n gap: calc(var(--spacing) * 6);\n }\n .gap-\\[10px\\] {\n gap: 10px;\n }\n .space-y-2 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .space-y-4 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .space-y-6 {\n :where(& > :not(:last-child)) {\n --tw-space-y-reverse: 0;\n margin-block-start: calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));\n margin-block-end: calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)));\n }\n }\n .space-x-2 {\n :where(& > :not(:last-child)) {\n --tw-space-x-reverse: 0;\n margin-inline-start: calc(calc(var(--spacing) * 2) * var(--tw-space-x-reverse));\n margin-inline-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-x-reverse)));\n }\n }\n .overflow-hidden {\n overflow: hidden;\n }\n .overflow-x-hidden {\n overflow-x: hidden;\n }\n .overflow-y-auto {\n overflow-y: auto;\n }\n .rounded-\\[4px\\] {\n border-radius: 4px;\n }\n .rounded-full {\n border-radius: calc(infinity * 1px);\n }\n .rounded-lg {\n border-radius: var(--radius);\n }\n .rounded-md {\n border-radius: calc(var(--radius) - 2px);\n }\n .rounded-sm {\n border-radius: calc(var(--radius) - 4px);\n }\n .rounded-xs {\n border-radius: var(--radius-xs);\n }\n .border {\n border-style: var(--tw-border-style);\n border-width: 1px;\n }\n .border-0 {\n border-style: var(--tw-border-style);\n border-width: 0px;\n }\n .border-b {\n border-bottom-style: var(--tw-border-style);\n border-bottom-width: 1px;\n }\n .border-input {\n border-color: var(--input);\n }\n .border-primary {\n border-color: var(--primary);\n }\n .bg-accent {\n background-color: var(--accent);\n }\n .bg-background {\n background-color: var(--background);\n }\n .bg-black\\/50 {\n background-color: color-mix(in srgb, #000 50%, transparent);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--color-black) 50%, transparent);\n }\n }\n .bg-border {\n background-color: var(--border);\n }\n .bg-destructive {\n background-color: var(--destructive);\n }\n .bg-muted {\n background-color: var(--muted);\n }\n .bg-popover {\n background-color: var(--popover);\n }\n .bg-primary {\n background-color: var(--primary);\n }\n .bg-secondary {\n background-color: var(--secondary);\n }\n .bg-transparent {\n background-color: transparent;\n }\n .fill-current {\n fill: currentcolor;\n }\n .fill-primary {\n fill: var(--primary);\n }\n .object-cover {\n -o-object-fit: cover;\n object-fit: cover;\n }\n .p-0 {\n padding: calc(var(--spacing) * 0);\n }\n .p-1 {\n padding: calc(var(--spacing) * 1);\n }\n .p-4 {\n padding: calc(var(--spacing) * 4);\n }\n .p-6 {\n padding: calc(var(--spacing) * 6);\n }\n .px-2 {\n padding-inline: calc(var(--spacing) * 2);\n }\n .px-3 {\n padding-inline: calc(var(--spacing) * 3);\n }\n .px-4 {\n padding-inline: calc(var(--spacing) * 4);\n }\n .px-6 {\n padding-inline: calc(var(--spacing) * 6);\n }\n .py-1 {\n padding-block: calc(var(--spacing) * 1);\n }\n .py-1\\.5 {\n padding-block: calc(var(--spacing) * 1.5);\n }\n .py-2 {\n padding-block: calc(var(--spacing) * 2);\n }\n .py-3 {\n padding-block: calc(var(--spacing) * 3);\n }\n .py-4 {\n padding-block: calc(var(--spacing) * 4);\n }\n .py-6 {\n padding-block: calc(var(--spacing) * 6);\n }\n .pt-2 {\n padding-top: calc(var(--spacing) * 2);\n }\n .pt-4 {\n padding-top: calc(var(--spacing) * 4);\n }\n .pr-2 {\n padding-right: calc(var(--spacing) * 2);\n }\n .pr-8 {\n padding-right: calc(var(--spacing) * 8);\n }\n .pb-1 {\n padding-bottom: calc(var(--spacing) * 1);\n }\n .pb-2 {\n padding-bottom: calc(var(--spacing) * 2);\n }\n .pl-2 {\n padding-left: calc(var(--spacing) * 2);\n }\n .pl-8 {\n padding-left: calc(var(--spacing) * 8);\n }\n .text-center {\n text-align: center;\n }\n .text-right {\n text-align: right;\n }\n .text-base {\n font-size: var(--text-base);\n line-height: var(--tw-leading, var(--text-base--line-height));\n }\n .text-lg {\n font-size: var(--text-lg);\n line-height: var(--tw-leading, var(--text-lg--line-height));\n }\n .text-sm {\n font-size: var(--text-sm);\n line-height: var(--tw-leading, var(--text-sm--line-height));\n }\n .text-xs {\n font-size: var(--text-xs);\n line-height: var(--tw-leading, var(--text-xs--line-height));\n }\n .leading-none {\n --tw-leading: 1;\n line-height: 1;\n }\n .font-bold {\n --tw-font-weight: var(--font-weight-bold);\n font-weight: var(--font-weight-bold);\n }\n .font-medium {\n --tw-font-weight: var(--font-weight-medium);\n font-weight: var(--font-weight-medium);\n }\n .font-semibold {\n --tw-font-weight: var(--font-weight-semibold);\n font-weight: var(--font-weight-semibold);\n }\n .tracking-tight {\n --tw-tracking: var(--tracking-tight);\n letter-spacing: var(--tracking-tight);\n }\n .tracking-widest {\n --tw-tracking: var(--tracking-widest);\n letter-spacing: var(--tracking-widest);\n }\n .text-ellipsis {\n text-overflow: ellipsis;\n }\n .whitespace-nowrap {\n white-space: nowrap;\n }\n .text-background {\n color: var(--background);\n }\n .text-current {\n color: currentcolor;\n }\n .text-destructive {\n color: var(--destructive);\n }\n .text-destructive-foreground {\n color: var(--destructive-foreground);\n }\n .text-foreground {\n color: var(--foreground);\n }\n .text-muted-foreground {\n color: var(--muted-foreground);\n }\n .text-popover-foreground {\n color: var(--popover-foreground);\n }\n .text-primary {\n color: var(--primary);\n }\n .text-primary-foreground {\n color: var(--primary-foreground);\n }\n .text-red-500 {\n color: var(--color-red-500);\n }\n .text-secondary-foreground {\n color: var(--secondary-foreground);\n }\n .text-white {\n color: var(--color-white);\n }\n .line-through {\n text-decoration-line: line-through;\n }\n .underline-offset-4 {\n text-underline-offset: 4px;\n }\n .opacity-0 {\n opacity: 0%;\n }\n .opacity-50 {\n opacity: 50%;\n }\n .opacity-70 {\n opacity: 70%;\n }\n .opacity-100 {\n opacity: 100%;\n }\n .shadow-lg {\n --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-md {\n --tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 2px 4px -2px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-sm {\n --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .shadow-xs {\n --tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05));\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .ring {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .ring-offset-background {\n --tw-ring-offset-color: var(--background);\n }\n .outline-hidden {\n --tw-outline-style: none;\n outline-style: none;\n @media (forced-colors: active) {\n outline: 2px solid transparent;\n outline-offset: 2px;\n }\n }\n .outline {\n outline-style: var(--tw-outline-style);\n outline-width: 1px;\n }\n .transition {\n transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter, display, visibility, content-visibility, overlay, pointer-events;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-\\[color\\,box-shadow\\] {\n transition-property: color,box-shadow;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-opacity {\n transition-property: opacity;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-shadow {\n transition-property: box-shadow;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-transform {\n transition-property: transform, translate, scale, rotate;\n transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));\n transition-duration: var(--tw-duration, var(--default-transition-duration));\n }\n .transition-none {\n transition-property: none;\n }\n .duration-200 {\n --tw-duration: 200ms;\n transition-duration: 200ms;\n }\n .outline-none {\n --tw-outline-style: none;\n outline-style: none;\n }\n .select-none {\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n }\n .duration-200 {\n animation-duration: 200ms;\n }\n .group-data-\\[disabled\\=true\\]\\:pointer-events-none {\n &:is(:where(.group)[data-disabled=\"true\"] *) {\n pointer-events: none;\n }\n }\n .group-data-\\[disabled\\=true\\]\\:opacity-50 {\n &:is(:where(.group)[data-disabled=\"true\"] *) {\n opacity: 50%;\n }\n }\n .peer-disabled\\:cursor-not-allowed {\n &:is(:where(.peer):disabled ~ *) {\n cursor: not-allowed;\n }\n }\n .peer-disabled\\:opacity-50 {\n &:is(:where(.peer):disabled ~ *) {\n opacity: 50%;\n }\n }\n .selection\\:bg-primary {\n & *::-moz-selection {\n background-color: var(--primary);\n }\n & *::selection {\n background-color: var(--primary);\n }\n &::-moz-selection {\n background-color: var(--primary);\n }\n &::selection {\n background-color: var(--primary);\n }\n }\n .selection\\:text-primary-foreground {\n & *::-moz-selection {\n color: var(--primary-foreground);\n }\n & *::selection {\n color: var(--primary-foreground);\n }\n &::-moz-selection {\n color: var(--primary-foreground);\n }\n &::selection {\n color: var(--primary-foreground);\n }\n }\n .file\\:inline-flex {\n &::file-selector-button {\n display: inline-flex;\n }\n }\n .file\\:h-7 {\n &::file-selector-button {\n height: calc(var(--spacing) * 7);\n }\n }\n .file\\:border-0 {\n &::file-selector-button {\n border-style: var(--tw-border-style);\n border-width: 0px;\n }\n }\n .file\\:bg-transparent {\n &::file-selector-button {\n background-color: transparent;\n }\n }\n .file\\:text-sm {\n &::file-selector-button {\n font-size: var(--text-sm);\n line-height: var(--tw-leading, var(--text-sm--line-height));\n }\n }\n .file\\:font-medium {\n &::file-selector-button {\n --tw-font-weight: var(--font-weight-medium);\n font-weight: var(--font-weight-medium);\n }\n }\n .file\\:text-foreground {\n &::file-selector-button {\n color: var(--foreground);\n }\n }\n .placeholder\\:text-muted-foreground {\n &::-moz-placeholder {\n color: var(--muted-foreground);\n }\n &::placeholder {\n color: var(--muted-foreground);\n }\n }\n .hover\\:bg-accent {\n &:hover {\n @media (hover: hover) {\n background-color: var(--accent);\n }\n }\n }\n .hover\\:bg-destructive\\/90 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--destructive) 90%, transparent);\n }\n }\n }\n }\n .hover\\:bg-muted {\n &:hover {\n @media (hover: hover) {\n background-color: var(--muted);\n }\n }\n }\n .hover\\:bg-primary\\/90 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--primary);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--primary) 90%, transparent);\n }\n }\n }\n }\n .hover\\:bg-secondary\\/80 {\n &:hover {\n @media (hover: hover) {\n background-color: var(--secondary);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--secondary) 80%, transparent);\n }\n }\n }\n }\n .hover\\:text-accent-foreground {\n &:hover {\n @media (hover: hover) {\n color: var(--accent-foreground);\n }\n }\n }\n .hover\\:text-foreground {\n &:hover {\n @media (hover: hover) {\n color: var(--foreground);\n }\n }\n }\n .hover\\:underline {\n &:hover {\n @media (hover: hover) {\n text-decoration-line: underline;\n }\n }\n }\n .hover\\:opacity-100 {\n &:hover {\n @media (hover: hover) {\n opacity: 100%;\n }\n }\n }\n .focus\\:bg-accent {\n &:focus {\n background-color: var(--accent);\n }\n }\n .focus\\:text-accent-foreground {\n &:focus {\n color: var(--accent-foreground);\n }\n }\n .focus\\:ring-1 {\n &:focus {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n .focus\\:ring-2 {\n &:focus {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n .focus\\:ring-ring {\n &:focus {\n --tw-ring-color: var(--ring);\n }\n }\n .focus\\:ring-offset-2 {\n &:focus {\n --tw-ring-offset-width: 2px;\n --tw-ring-offset-shadow: var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n }\n }\n .focus\\:outline-hidden {\n &:focus {\n --tw-outline-style: none;\n outline-style: none;\n @media (forced-colors: active) {\n outline: 2px solid transparent;\n outline-offset: 2px;\n }\n }\n }\n .focus\\:outline-none {\n &:focus {\n --tw-outline-style: none;\n outline-style: none;\n }\n }\n .focus-visible\\:border-ring {\n &:focus-visible {\n border-color: var(--ring);\n }\n }\n .focus-visible\\:ring-\\[3px\\] {\n &:focus-visible {\n --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);\n box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n }\n .focus-visible\\:ring-destructive\\/20 {\n &:focus-visible {\n --tw-ring-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--destructive) 20%, transparent);\n }\n }\n }\n .focus-visible\\:ring-ring\\/50 {\n &:focus-visible {\n --tw-ring-color: var(--ring);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--ring) 50%, transparent);\n }\n }\n }\n .disabled\\:pointer-events-none {\n &:disabled {\n pointer-events: none;\n }\n }\n .disabled\\:cursor-not-allowed {\n &:disabled {\n cursor: not-allowed;\n }\n }\n .disabled\\:opacity-50 {\n &:disabled {\n opacity: 50%;\n }\n }\n .has-\\[\\>svg\\]\\:px-2\\.5 {\n &:has(>svg) {\n padding-inline: calc(var(--spacing) * 2.5);\n }\n }\n .has-\\[\\>svg\\]\\:px-3 {\n &:has(>svg) {\n padding-inline: calc(var(--spacing) * 3);\n }\n }\n .has-\\[\\>svg\\]\\:px-4 {\n &:has(>svg) {\n padding-inline: calc(var(--spacing) * 4);\n }\n }\n .aria-invalid\\:border-destructive {\n &[aria-invalid=\"true\"] {\n border-color: var(--destructive);\n }\n }\n .aria-invalid\\:ring-destructive\\/20 {\n &[aria-invalid=\"true\"] {\n --tw-ring-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--destructive) 20%, transparent);\n }\n }\n }\n .data-\\[disabled\\]\\:pointer-events-none {\n &[data-disabled] {\n pointer-events: none;\n }\n }\n .data-\\[disabled\\]\\:opacity-50 {\n &[data-disabled] {\n opacity: 50%;\n }\n }\n .data-\\[disabled\\=true\\]\\:pointer-events-none {\n &[data-disabled=\"true\"] {\n pointer-events: none;\n }\n }\n .data-\\[disabled\\=true\\]\\:opacity-50 {\n &[data-disabled=\"true\"] {\n opacity: 50%;\n }\n }\n .data-\\[error\\=true\\]\\:text-destructive-foreground {\n &[data-error=\"true\"] {\n color: var(--destructive-foreground);\n }\n }\n .data-\\[inset\\]\\:pl-8 {\n &[data-inset] {\n padding-left: calc(var(--spacing) * 8);\n }\n }\n .data-\\[placeholder\\]\\:text-muted-foreground {\n &[data-placeholder] {\n color: var(--muted-foreground);\n }\n }\n .data-\\[selected\\=true\\]\\:bg-accent {\n &[data-selected=\"true\"] {\n background-color: var(--accent);\n }\n }\n .data-\\[selected\\=true\\]\\:text-accent-foreground {\n &[data-selected=\"true\"] {\n color: var(--accent-foreground);\n }\n }\n .data-\\[side\\=bottom\\]\\:translate-y-1 {\n &[data-side=\"bottom\"] {\n --tw-translate-y: calc(var(--spacing) * 1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n }\n .data-\\[side\\=bottom\\]\\:slide-in-from-top-2 {\n &[data-side=\"bottom\"] {\n --tw-enter-translate-y: -0.5rem;\n }\n }\n .data-\\[side\\=left\\]\\:-translate-x-1 {\n &[data-side=\"left\"] {\n --tw-translate-x: calc(var(--spacing) * -1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n }\n .data-\\[side\\=left\\]\\:slide-in-from-right-2 {\n &[data-side=\"left\"] {\n --tw-enter-translate-x: 0.5rem;\n }\n }\n .data-\\[side\\=right\\]\\:translate-x-1 {\n &[data-side=\"right\"] {\n --tw-translate-x: calc(var(--spacing) * 1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n }\n .data-\\[side\\=right\\]\\:slide-in-from-left-2 {\n &[data-side=\"right\"] {\n --tw-enter-translate-x: -0.5rem;\n }\n }\n .data-\\[side\\=top\\]\\:-translate-y-1 {\n &[data-side=\"top\"] {\n --tw-translate-y: calc(var(--spacing) * -1);\n translate: var(--tw-translate-x) var(--tw-translate-y);\n }\n }\n .data-\\[side\\=top\\]\\:slide-in-from-bottom-2 {\n &[data-side=\"top\"] {\n --tw-enter-translate-y: 0.5rem;\n }\n }\n .\\*\\*\\:data-\\[slot\\=command-input-wrapper\\]\\:h-12 {\n :is(& *) {\n &[data-slot=\"command-input-wrapper\"] {\n height: calc(var(--spacing) * 12);\n }\n }\n }\n .\\*\\:data-\\[slot\\=select-value\\]\\:line-clamp-1 {\n :is(& > *) {\n &[data-slot=\"select-value\"] {\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 1;\n }\n }\n }\n .\\*\\:data-\\[slot\\=select-value\\]\\:flex {\n :is(& > *) {\n &[data-slot=\"select-value\"] {\n display: flex;\n }\n }\n }\n .\\*\\:data-\\[slot\\=select-value\\]\\:items-center {\n :is(& > *) {\n &[data-slot=\"select-value\"] {\n align-items: center;\n }\n }\n }\n .\\*\\:data-\\[slot\\=select-value\\]\\:gap-2 {\n :is(& > *) {\n &[data-slot=\"select-value\"] {\n gap: calc(var(--spacing) * 2);\n }\n }\n }\n .data-\\[state\\=checked\\]\\:border-primary {\n &[data-state=\"checked\"] {\n border-color: var(--primary);\n }\n }\n .data-\\[state\\=checked\\]\\:bg-primary {\n &[data-state=\"checked\"] {\n background-color: var(--primary);\n }\n }\n .data-\\[state\\=checked\\]\\:text-primary-foreground {\n &[data-state=\"checked\"] {\n color: var(--primary-foreground);\n }\n }\n .data-\\[state\\=closed\\]\\:animate-out {\n &[data-state=\"closed\"] {\n animation-name: exit;\n animation-duration: 150ms;\n --tw-exit-opacity: initial;\n --tw-exit-scale: initial;\n --tw-exit-rotate: initial;\n --tw-exit-translate-x: initial;\n --tw-exit-translate-y: initial;\n }\n }\n .data-\\[state\\=closed\\]\\:fade-out-0 {\n &[data-state=\"closed\"] {\n --tw-exit-opacity: 0;\n }\n }\n .data-\\[state\\=closed\\]\\:zoom-out-95 {\n &[data-state=\"closed\"] {\n --tw-exit-scale: .95;\n }\n }\n .data-\\[state\\=open\\]\\:bg-accent {\n &[data-state=\"open\"] {\n background-color: var(--accent);\n }\n }\n .data-\\[state\\=open\\]\\:text-accent-foreground {\n &[data-state=\"open\"] {\n color: var(--accent-foreground);\n }\n }\n .data-\\[state\\=open\\]\\:text-muted-foreground {\n &[data-state=\"open\"] {\n color: var(--muted-foreground);\n }\n }\n .data-\\[state\\=open\\]\\:animate-in {\n &[data-state=\"open\"] {\n animation-name: enter;\n animation-duration: 150ms;\n --tw-enter-opacity: initial;\n --tw-enter-scale: initial;\n --tw-enter-rotate: initial;\n --tw-enter-translate-x: initial;\n --tw-enter-translate-y: initial;\n }\n }\n .data-\\[state\\=open\\]\\:fade-in-0 {\n &[data-state=\"open\"] {\n --tw-enter-opacity: 0;\n }\n }\n .data-\\[state\\=open\\]\\:zoom-in-95 {\n &[data-state=\"open\"] {\n --tw-enter-scale: .95;\n }\n }\n .data-\\[variant\\=destructive\\]\\:text-destructive {\n &[data-variant=\"destructive\"] {\n color: var(--destructive);\n }\n }\n .data-\\[variant\\=destructive\\]\\:focus\\:bg-destructive\\/10 {\n &[data-variant=\"destructive\"] {\n &:focus {\n background-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--destructive) 10%, transparent);\n }\n }\n }\n }\n .data-\\[variant\\=destructive\\]\\:focus\\:text-destructive {\n &[data-variant=\"destructive\"] {\n &:focus {\n color: var(--destructive);\n }\n }\n }\n .max-md\\:cursor-pointer {\n @media (width < 48rem) {\n cursor: pointer;\n }\n }\n .max-sm\\:hidden {\n @media (width < 40rem) {\n display: none;\n }\n }\n .sm\\:max-h-\\[270px\\] {\n @media (width >= 40rem) {\n max-height: 270px;\n }\n }\n .sm\\:max-w-\\[500px\\] {\n @media (width >= 40rem) {\n max-width: 500px;\n }\n }\n .sm\\:max-w-lg {\n @media (width >= 40rem) {\n max-width: var(--container-lg);\n }\n }\n .sm\\:flex-row {\n @media (width >= 40rem) {\n flex-direction: row;\n }\n }\n .sm\\:justify-end {\n @media (width >= 40rem) {\n justify-content: flex-end;\n }\n }\n .sm\\:text-left {\n @media (width >= 40rem) {\n text-align: left;\n }\n }\n .md\\:order-last {\n @media (width >= 48rem) {\n order: 9999;\n }\n }\n .md\\:order-none {\n @media (width >= 48rem) {\n order: 0;\n }\n }\n .md\\:col-span-2 {\n @media (width >= 48rem) {\n grid-column: span 2 / span 2;\n }\n }\n .md\\:col-span-3 {\n @media (width >= 48rem) {\n grid-column: span 3 / span 3;\n }\n }\n .md\\:col-span-4 {\n @media (width >= 48rem) {\n grid-column: span 4 / span 4;\n }\n }\n .md\\:block {\n @media (width >= 48rem) {\n display: block;\n }\n }\n .md\\:flex {\n @media (width >= 48rem) {\n display: flex;\n }\n }\n .md\\:grid {\n @media (width >= 48rem) {\n display: grid;\n }\n }\n .md\\:hidden {\n @media (width >= 48rem) {\n display: none;\n }\n }\n .md\\:max-w-\\[75\\%\\] {\n @media (width >= 48rem) {\n max-width: 75%;\n }\n }\n .md\\:grid-cols-2 {\n @media (width >= 48rem) {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n }\n .md\\:grid-cols-7 {\n @media (width >= 48rem) {\n grid-template-columns: repeat(7, minmax(0, 1fr));\n }\n }\n .md\\:gap-0 {\n @media (width >= 48rem) {\n gap: calc(var(--spacing) * 0);\n }\n }\n .md\\:px-8 {\n @media (width >= 48rem) {\n padding-inline: calc(var(--spacing) * 8);\n }\n }\n .md\\:py-12 {\n @media (width >= 48rem) {\n padding-block: calc(var(--spacing) * 12);\n }\n }\n .md\\:text-sm {\n @media (width >= 48rem) {\n font-size: var(--text-sm);\n line-height: var(--tw-leading, var(--text-sm--line-height));\n }\n }\n .dark\\:focus-visible\\:ring-destructive\\/40 {\n @media (prefers-color-scheme: dark) {\n &:focus-visible {\n --tw-ring-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--destructive) 40%, transparent);\n }\n }\n }\n }\n .dark\\:aria-invalid\\:ring-destructive\\/40 {\n @media (prefers-color-scheme: dark) {\n &[aria-invalid=\"true\"] {\n --tw-ring-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n --tw-ring-color: color-mix(in oklab, var(--destructive) 40%, transparent);\n }\n }\n }\n }\n .dark\\:data-\\[variant\\=destructive\\]\\:focus\\:bg-destructive\\/20 {\n @media (prefers-color-scheme: dark) {\n &[data-variant=\"destructive\"] {\n &:focus {\n background-color: var(--destructive);\n @supports (color: color-mix(in lab, red, red)) {\n background-color: color-mix(in oklab, var(--destructive) 20%, transparent);\n }\n }\n }\n }\n }\n .\\[\\&_\\[cmdk-group-heading\\]\\]\\:px-2 {\n & [cmdk-group-heading] {\n padding-inline: calc(var(--spacing) * 2);\n }\n }\n .\\[\\&_\\[cmdk-group-heading\\]\\]\\:py-1\\.5 {\n & [cmdk-group-heading] {\n padding-block: calc(var(--spacing) * 1.5);\n }\n }\n .\\[\\&_\\[cmdk-group-heading\\]\\]\\:text-xs {\n & [cmdk-group-heading] {\n font-size: var(--text-xs);\n line-height: var(--tw-leading, var(--text-xs--line-height));\n }\n }\n .\\[\\&_\\[cmdk-group-heading\\]\\]\\:font-medium {\n & [cmdk-group-heading] {\n --tw-font-weight: var(--font-weight-medium);\n font-weight: var(--font-weight-medium);\n }\n }\n .\\[\\&_\\[cmdk-group-heading\\]\\]\\:text-muted-foreground {\n & [cmdk-group-heading] {\n color: var(--muted-foreground);\n }\n }\n .\\[\\&_\\[cmdk-group\\]\\]\\:px-2 {\n & [cmdk-group] {\n padding-inline: calc(var(--spacing) * 2);\n }\n }\n .\\[\\&_\\[cmdk-group\\]\\:not\\(\\[hidden\\]\\)_\\~\\[cmdk-group\\]\\]\\:pt-0 {\n & [cmdk-group]:not([hidden]) ~[cmdk-group] {\n padding-top: calc(var(--spacing) * 0);\n }\n }\n .\\[\\&_\\[cmdk-input-wrapper\\]_svg\\]\\:h-5 {\n & [cmdk-input-wrapper] svg {\n height: calc(var(--spacing) * 5);\n }\n }\n .\\[\\&_\\[cmdk-input-wrapper\\]_svg\\]\\:w-5 {\n & [cmdk-input-wrapper] svg {\n width: calc(var(--spacing) * 5);\n }\n }\n .\\[\\&_\\[cmdk-input\\]\\]\\:h-12 {\n & [cmdk-input] {\n height: calc(var(--spacing) * 12);\n }\n }\n .\\[\\&_\\[cmdk-item\\]\\]\\:px-2 {\n & [cmdk-item] {\n padding-inline: calc(var(--spacing) * 2);\n }\n }\n .\\[\\&_\\[cmdk-item\\]\\]\\:py-3 {\n & [cmdk-item] {\n padding-block: calc(var(--spacing) * 3);\n }\n }\n .\\[\\&_\\[cmdk-item\\]_svg\\]\\:h-5 {\n & [cmdk-item] svg {\n height: calc(var(--spacing) * 5);\n }\n }\n .\\[\\&_\\[cmdk-item\\]_svg\\]\\:w-5 {\n & [cmdk-item] svg {\n width: calc(var(--spacing) * 5);\n }\n }\n .\\[\\&_svg\\]\\:pointer-events-none {\n & svg {\n pointer-events: none;\n }\n }\n .\\[\\&_svg\\]\\:shrink-0 {\n & svg {\n flex-shrink: 0;\n }\n }\n .\\[\\&_svg\\:not\\(\\[class\\*\\=\\'size-\\'\\]\\)\\]\\:size-4 {\n & svg:not([class*='size-']) {\n width: calc(var(--spacing) * 4);\n height: calc(var(--spacing) * 4);\n }\n }\n .\\[\\&_svg\\:not\\(\\[class\\*\\=\\'text-\\'\\]\\)\\]\\:text-muted-foreground {\n & svg:not([class*='text-']) {\n color: var(--muted-foreground);\n }\n }\n .\\*\\:\\[span\\]\\:last\\:flex {\n :is(& > *) {\n &:is(span) {\n &:last-child {\n display: flex;\n }\n }\n }\n }\n .\\*\\:\\[span\\]\\:last\\:items-center {\n :is(& > *) {\n &:is(span) {\n &:last-child {\n align-items: center;\n }\n }\n }\n }\n .\\*\\:\\[span\\]\\:last\\:gap-2 {\n :is(& > *) {\n &:is(span) {\n &:last-child {\n gap: calc(var(--spacing) * 2);\n }\n }\n }\n }\n .data-\\[variant\\=destructive\\]\\:\\*\\:\\[svg\\]\\:\\!text-destructive {\n &[data-variant=\"destructive\"] {\n :is(& > *) {\n &:is(svg) {\n color: var(--destructive) !important;\n }\n }\n }\n }\n .\\[\\&\\>span\\]\\:line-clamp-1 {\n &>span {\n overflow: hidden;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 1;\n }\n }\n}\n:root {\n --background: oklch(1 0 0);\n --foreground: oklch(0.145 0 0);\n --card: oklch(1 0 0);\n --card-foreground: oklch(0.145 0 0);\n --popover: oklch(1 0 0);\n --popover-foreground: oklch(0.145 0 0);\n --primary: oklch(0.205 0 0);\n --primary-foreground: oklch(0.985 0 0);\n --secondary: oklch(0.97 0 0);\n --secondary-foreground: oklch(0.205 0 0);\n --muted: oklch(0.97 0 0);\n --muted-foreground: oklch(0.556 0 0);\n --accent: oklch(0.97 0 0);\n --accent-foreground: oklch(0.205 0 0);\n --destructive: oklch(0.577 0.245 27.325);\n --destructive-foreground: oklch(0.577 0.245 27.325);\n --border: oklch(0.922 0 0);\n --input: oklch(0.922 0 0);\n --ring: oklch(0.708 0 0);\n --chart-1: oklch(0.646 0.222 41.116);\n --chart-2: oklch(0.6 0.118 184.704);\n --chart-3: oklch(0.398 0.07 227.392);\n --chart-4: oklch(0.828 0.189 84.429);\n --chart-5: oklch(0.769 0.188 70.08);\n --radius: 0.625rem;\n --sidebar: oklch(0.985 0 0);\n --sidebar-foreground: oklch(0.145 0 0);\n --sidebar-primary: oklch(0.205 0 0);\n --sidebar-primary-foreground: oklch(0.985 0 0);\n --sidebar-accent: oklch(0.97 0 0);\n --sidebar-accent-foreground: oklch(0.205 0 0);\n --sidebar-border: oklch(0.922 0 0);\n --sidebar-ring: oklch(0.708 0 0);\n}\n@layer base {\n * {\n border-color: var(--border);\n outline-color: var(--ring);\n @supports (color: color-mix(in lab, red, red)) {\n outline-color: color-mix(in oklab, var(--ring) 50%, transparent);\n }\n }\n .checkout-embed {\n background-color: var(--background);\n font-family: var(--font-sans), Helvetica, Arial, apple-system, sans-serif;\n color: var(--foreground);\n }\n h2 {\n font-size: var(--text-2xl);\n line-height: var(--tw-leading, var(--text-2xl--line-height));\n --tw-font-weight: var(--font-weight-bold);\n font-weight: var(--font-weight-bold);\n --tw-tracking: var(--tracking-tight);\n letter-spacing: var(--tracking-tight);\n }\n p {\n --tw-tracking: var(--tracking-tight) !important;\n letter-spacing: var(--tracking-tight) !important;\n }\n}\n@layer utilities {\n .scrollbar-hidden {\n scrollbar-width: none;\n }\n .scrollbar-hidden::-webkit-scrollbar {\n display: none;\n }\n}\n@keyframes enter {\n from {\n opacity: var(--tw-enter-opacity, 1);\n 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));\n }\n}\n@keyframes exit {\n to {\n opacity: var(--tw-exit-opacity, 1);\n 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));\n }\n}\n@property --tw-translate-x {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-translate-y {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-translate-z {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-space-y-reverse {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-space-x-reverse {\n syntax: \"*\";\n inherits: false;\n initial-value: 0;\n}\n@property --tw-border-style {\n syntax: \"*\";\n inherits: false;\n initial-value: solid;\n}\n@property --tw-leading {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-font-weight {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-tracking {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-shadow-alpha {\n syntax: \"<percentage>\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-inset-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-inset-shadow-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-inset-shadow-alpha {\n syntax: \"<percentage>\";\n inherits: false;\n initial-value: 100%;\n}\n@property --tw-ring-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ring-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-inset-ring-color {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-inset-ring-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-ring-inset {\n syntax: \"*\";\n inherits: false;\n}\n@property --tw-ring-offset-width {\n syntax: \"<length>\";\n inherits: false;\n initial-value: 0px;\n}\n@property --tw-ring-offset-color {\n syntax: \"*\";\n inherits: false;\n initial-value: #fff;\n}\n@property --tw-ring-offset-shadow {\n syntax: \"*\";\n inherits: false;\n initial-value: 0 0 #0000;\n}\n@property --tw-outline-style {\n syntax: \"*\";\n inherits: false;\n initial-value: solid;\n}\n@property --tw-duration {\n syntax: \"*\";\n inherits: false;\n}\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n@keyframes pulse {\n 50% {\n opacity: 0.5;\n }\n}\n@layer properties {\n @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) {\n *, ::before, ::after, ::backdrop {\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-translate-z: 0;\n --tw-space-y-reverse: 0;\n --tw-space-x-reverse: 0;\n --tw-border-style: solid;\n --tw-leading: initial;\n --tw-font-weight: initial;\n --tw-tracking: initial;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-color: initial;\n --tw-shadow-alpha: 100%;\n --tw-inset-shadow: 0 0 #0000;\n --tw-inset-shadow-color: initial;\n --tw-inset-shadow-alpha: 100%;\n --tw-ring-color: initial;\n --tw-ring-shadow: 0 0 #0000;\n --tw-inset-ring-color: initial;\n --tw-inset-ring-shadow: 0 0 #0000;\n --tw-ring-inset: initial;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-outline-style: solid;\n --tw-duration: initial;\n }\n }\n}\n";
|
|
7484
7499
|
|
|
7485
7500
|
const IframeWrapper = React__default.memo(({ children, iframeRef }) => {
|
|
7486
7501
|
const [iframeBody, setIframeBody] = useState(null);
|
|
7487
7502
|
const styleRef = useRef(null);
|
|
7488
|
-
const resizeObserver = useRef();
|
|
7503
|
+
const resizeObserver = useRef(null);
|
|
7489
7504
|
const injectStyles = useCallback((doc) => {
|
|
7490
7505
|
var _a;
|
|
7491
7506
|
// Clean up previous style
|
|
@@ -7546,9 +7561,7 @@ const IframeWrapper = React__default.memo(({ children, iframeRef }) => {
|
|
|
7546
7561
|
window.removeEventListener("resize", updateHeight);
|
|
7547
7562
|
};
|
|
7548
7563
|
}, [updateHeight]);
|
|
7549
|
-
return (
|
|
7550
|
-
React__default.createElement("iframe", { ref: iframeRef, className: "w-full min-h-screen border-0", sandbox: "allow-same-origin allow-scripts allow-forms allow-popups allow-popups-to-escape-sandbox allow-top-navigation" }),
|
|
7551
|
-
iframeBody && ReactDOM__default.createPortal(children, iframeBody)));
|
|
7564
|
+
return (jsxs("div", { id: "bs-wrapper", className: "relative mx-auto min-h-screen w-full max-w-[1200px] overflow-y-auto overflow-x-hidden", children: [jsx("iframe", { ref: iframeRef, className: "min-h-screen w-full border-0", sandbox: "allow-same-origin allow-scripts allow-forms allow-popups allow-popups-to-escape-sandbox allow-top-navigation" }), iframeBody && ReactDOM__default.createPortal(children, iframeBody)] }));
|
|
7552
7565
|
});
|
|
7553
7566
|
IframeWrapper.displayName = "IframeWrapper";
|
|
7554
7567
|
|
|
@@ -8231,6 +8244,7 @@ const Toast = (props)=>{
|
|
|
8231
8244
|
pointerStartRef.current = null;
|
|
8232
8245
|
},
|
|
8233
8246
|
onPointerDown: (event)=>{
|
|
8247
|
+
if (event.button === 2) return; // Return early on right click
|
|
8234
8248
|
if (disabled || !dismissible) return;
|
|
8235
8249
|
dragStartTime.current = new Date();
|
|
8236
8250
|
setOffsetBeforeRemove(offset.current);
|
|
@@ -8678,7 +8692,7 @@ const Toaster$1 = /*#__PURE__*/ React__default.forwardRef(function Toaster(props
|
|
|
8678
8692
|
const Toaster = (_a) => {
|
|
8679
8693
|
var props = __rest(_a, []);
|
|
8680
8694
|
const { theme = "system" } = z();
|
|
8681
|
-
return (
|
|
8695
|
+
return (jsx(Toaster$1, Object.assign({ theme: theme, className: "toaster group", style: {
|
|
8682
8696
|
"--normal-bg": "var(--popover)",
|
|
8683
8697
|
"--normal-text": "var(--popover-foreground)",
|
|
8684
8698
|
"--normal-border": "var(--border)",
|
|
@@ -9151,8 +9165,9 @@ class ZodError extends Error {
|
|
|
9151
9165
|
const formErrors = [];
|
|
9152
9166
|
for (const sub of this.issues) {
|
|
9153
9167
|
if (sub.path.length > 0) {
|
|
9154
|
-
|
|
9155
|
-
fieldErrors[
|
|
9168
|
+
const firstEl = sub.path[0];
|
|
9169
|
+
fieldErrors[firstEl] = fieldErrors[firstEl] || [];
|
|
9170
|
+
fieldErrors[firstEl].push(mapper(sub));
|
|
9156
9171
|
}
|
|
9157
9172
|
else {
|
|
9158
9173
|
formErrors.push(mapper(sub));
|
|
@@ -9236,6 +9251,8 @@ const errorMap = (issue, _ctx) => {
|
|
|
9236
9251
|
message = `String must contain ${issue.exact ? "exactly" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;
|
|
9237
9252
|
else if (issue.type === "number")
|
|
9238
9253
|
message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;
|
|
9254
|
+
else if (issue.type === "bigint")
|
|
9255
|
+
message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;
|
|
9239
9256
|
else if (issue.type === "date")
|
|
9240
9257
|
message = `Date must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${new Date(Number(issue.minimum))}`;
|
|
9241
9258
|
else
|
|
@@ -9833,6 +9850,8 @@ function isValidJWT(jwt, alg) {
|
|
|
9833
9850
|
return false;
|
|
9834
9851
|
try {
|
|
9835
9852
|
const [header] = jwt.split(".");
|
|
9853
|
+
if (!header)
|
|
9854
|
+
return false;
|
|
9836
9855
|
// Convert base64url to base64
|
|
9837
9856
|
const base64 = header
|
|
9838
9857
|
.replace(/-/g, "+")
|
|
@@ -12914,15 +12933,19 @@ function cloneObject(data) {
|
|
|
12914
12933
|
return copy;
|
|
12915
12934
|
}
|
|
12916
12935
|
|
|
12917
|
-
var
|
|
12936
|
+
var isKey = (value) => /^\w*$/.test(value);
|
|
12918
12937
|
|
|
12919
12938
|
var isUndefined = (val) => val === undefined;
|
|
12920
12939
|
|
|
12940
|
+
var compact = (value) => Array.isArray(value) ? value.filter(Boolean) : [];
|
|
12941
|
+
|
|
12942
|
+
var stringToPath = (input) => compact(input.replace(/["|']|\]/g, '').split(/\.|\[/));
|
|
12943
|
+
|
|
12921
12944
|
var get = (object, path, defaultValue) => {
|
|
12922
12945
|
if (!path || !isObject(object)) {
|
|
12923
12946
|
return defaultValue;
|
|
12924
12947
|
}
|
|
12925
|
-
const result =
|
|
12948
|
+
const result = (isKey(path) ? [path] : stringToPath(path)).reduce((result, key) => isNullOrUndefined(result) ? result : result[key], object);
|
|
12926
12949
|
return isUndefined(result) || result === object
|
|
12927
12950
|
? isUndefined(object[path])
|
|
12928
12951
|
? defaultValue
|
|
@@ -12932,10 +12955,6 @@ var get = (object, path, defaultValue) => {
|
|
|
12932
12955
|
|
|
12933
12956
|
var isBoolean = (value) => typeof value === 'boolean';
|
|
12934
12957
|
|
|
12935
|
-
var isKey = (value) => /^\w*$/.test(value);
|
|
12936
|
-
|
|
12937
|
-
var stringToPath = (input) => compact(input.replace(/["|']|\]/g, '').split(/\.|\[/));
|
|
12938
|
-
|
|
12939
12958
|
var set = (object, path, value) => {
|
|
12940
12959
|
let index = -1;
|
|
12941
12960
|
const tempPath = isKey(path) ? [path] : stringToPath(path);
|
|
@@ -12984,6 +13003,7 @@ const INPUT_VALIDATION_RULES = {
|
|
|
12984
13003
|
};
|
|
12985
13004
|
|
|
12986
13005
|
const HookFormContext = React__default.createContext(null);
|
|
13006
|
+
HookFormContext.displayName = 'HookFormContext';
|
|
12987
13007
|
/**
|
|
12988
13008
|
* This custom hook allows you to access the form context. useFormContext is intended to be used in deeply nested structures, where it would become inconvenient to pass the context as a prop. To be used with {@link FormProvider}.
|
|
12989
13009
|
*
|
|
@@ -13413,7 +13433,7 @@ var createSubject = () => {
|
|
|
13413
13433
|
|
|
13414
13434
|
var isPrimitive = (value) => isNullOrUndefined(value) || !isObjectType(value);
|
|
13415
13435
|
|
|
13416
|
-
function deepEqual$1(object1, object2) {
|
|
13436
|
+
function deepEqual$1(object1, object2, _internal_visited = new WeakSet()) {
|
|
13417
13437
|
if (isPrimitive(object1) || isPrimitive(object2)) {
|
|
13418
13438
|
return object1 === object2;
|
|
13419
13439
|
}
|
|
@@ -13425,6 +13445,11 @@ function deepEqual$1(object1, object2) {
|
|
|
13425
13445
|
if (keys1.length !== keys2.length) {
|
|
13426
13446
|
return false;
|
|
13427
13447
|
}
|
|
13448
|
+
if (_internal_visited.has(object1) || _internal_visited.has(object2)) {
|
|
13449
|
+
return true;
|
|
13450
|
+
}
|
|
13451
|
+
_internal_visited.add(object1);
|
|
13452
|
+
_internal_visited.add(object2);
|
|
13428
13453
|
for (const key of keys1) {
|
|
13429
13454
|
const val1 = object1[key];
|
|
13430
13455
|
if (!keys2.includes(key)) {
|
|
@@ -13435,7 +13460,7 @@ function deepEqual$1(object1, object2) {
|
|
|
13435
13460
|
if ((isDateObject(val1) && isDateObject(val2)) ||
|
|
13436
13461
|
(isObject(val1) && isObject(val2)) ||
|
|
13437
13462
|
(Array.isArray(val1) && Array.isArray(val2))
|
|
13438
|
-
? !deepEqual$1(val1, val2)
|
|
13463
|
+
? !deepEqual$1(val1, val2, _internal_visited)
|
|
13439
13464
|
: val1 !== val2) {
|
|
13440
13465
|
return false;
|
|
13441
13466
|
}
|
|
@@ -14754,14 +14779,14 @@ function createFormControl(props = {}) {
|
|
|
14754
14779
|
if (_options.resolver) {
|
|
14755
14780
|
const { errors, values } = await _runSchema();
|
|
14756
14781
|
_formState.errors = errors;
|
|
14757
|
-
fieldValues = values;
|
|
14782
|
+
fieldValues = cloneObject(values);
|
|
14758
14783
|
}
|
|
14759
14784
|
else {
|
|
14760
14785
|
await executeBuiltInValidation(_fields);
|
|
14761
14786
|
}
|
|
14762
14787
|
if (_names.disabled.size) {
|
|
14763
14788
|
for (const name of _names.disabled) {
|
|
14764
|
-
|
|
14789
|
+
unset(fieldValues, name);
|
|
14765
14790
|
}
|
|
14766
14791
|
}
|
|
14767
14792
|
unset(_formState.errors, 'root');
|
|
@@ -14858,7 +14883,11 @@ function createFormControl(props = {}) {
|
|
|
14858
14883
|
}
|
|
14859
14884
|
}
|
|
14860
14885
|
for (const fieldName of _names.mount) {
|
|
14861
|
-
|
|
14886
|
+
const value = get(values, fieldName, get(_defaultValues, fieldName));
|
|
14887
|
+
if (!isUndefined(value)) {
|
|
14888
|
+
set(values, fieldName, value);
|
|
14889
|
+
setValue(fieldName, get(values, fieldName));
|
|
14890
|
+
}
|
|
14862
14891
|
}
|
|
14863
14892
|
}
|
|
14864
14893
|
_formValues = cloneObject(values);
|
|
@@ -15078,14 +15107,21 @@ function useForm(props = {}) {
|
|
|
15078
15107
|
: props.defaultValues,
|
|
15079
15108
|
});
|
|
15080
15109
|
if (!_formControl.current) {
|
|
15081
|
-
|
|
15082
|
-
|
|
15083
|
-
|
|
15084
|
-
|
|
15085
|
-
|
|
15086
|
-
props.defaultValues &&
|
|
15087
|
-
|
|
15088
|
-
|
|
15110
|
+
if (props.formControl) {
|
|
15111
|
+
_formControl.current = {
|
|
15112
|
+
...props.formControl,
|
|
15113
|
+
formState,
|
|
15114
|
+
};
|
|
15115
|
+
if (props.defaultValues && !isFunction$1(props.defaultValues)) {
|
|
15116
|
+
props.formControl.reset(props.defaultValues, props.resetOptions);
|
|
15117
|
+
}
|
|
15118
|
+
}
|
|
15119
|
+
else {
|
|
15120
|
+
const { formControl, ...rest } = createFormControl(props);
|
|
15121
|
+
_formControl.current = {
|
|
15122
|
+
...rest,
|
|
15123
|
+
formState,
|
|
15124
|
+
};
|
|
15089
15125
|
}
|
|
15090
15126
|
}
|
|
15091
15127
|
const control = _formControl.current.control;
|
|
@@ -15631,7 +15667,7 @@ const arbitraryVariableRegex = /^\((?:(\w[\w-]*):)?(.+)\)$/i;
|
|
|
15631
15667
|
const fractionRegex = /^\d+\/\d+$/;
|
|
15632
15668
|
const tshirtUnitRegex = /^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/;
|
|
15633
15669
|
const lengthUnitRegex = /\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/;
|
|
15634
|
-
const colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch))\(.+\)$/;
|
|
15670
|
+
const colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/;
|
|
15635
15671
|
// Shadow always begins with x and y offset separated by underscore optionally prepended by inset
|
|
15636
15672
|
const shadowRegex = /^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/;
|
|
15637
15673
|
const imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/;
|
|
@@ -18178,7 +18214,7 @@ function cn(...inputs) {
|
|
|
18178
18214
|
|
|
18179
18215
|
function Label(_a) {
|
|
18180
18216
|
var { className } = _a, props = __rest(_a, ["className"]);
|
|
18181
|
-
return (
|
|
18217
|
+
return (jsx(Root$2, Object.assign({ "data-slot": "label", className: cn("flex select-none items-center gap-2 text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-50 group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50", className) }, props)));
|
|
18182
18218
|
}
|
|
18183
18219
|
|
|
18184
18220
|
const validErrorMessageKeys = Object.keys(en.Errors);
|
|
@@ -18194,8 +18230,7 @@ const Form = FormProvider;
|
|
|
18194
18230
|
const FormFieldContext = React.createContext({});
|
|
18195
18231
|
const FormField = (_a) => {
|
|
18196
18232
|
var props = __rest(_a, []);
|
|
18197
|
-
return (
|
|
18198
|
-
React.createElement(Controller, Object.assign({}, props))));
|
|
18233
|
+
return (jsx(FormFieldContext.Provider, { value: { name: props.name }, children: jsx(Controller, Object.assign({}, props)) }));
|
|
18199
18234
|
};
|
|
18200
18235
|
const useFormField = () => {
|
|
18201
18236
|
const fieldContext = React.useContext(FormFieldContext);
|
|
@@ -18213,18 +18248,17 @@ const FormItemContext = React.createContext({});
|
|
|
18213
18248
|
function FormItem(_a) {
|
|
18214
18249
|
var { className } = _a, props = __rest(_a, ["className"]);
|
|
18215
18250
|
const id = React.useId();
|
|
18216
|
-
return (
|
|
18217
|
-
React.createElement("div", Object.assign({ "data-slot": "form-item", className: cn("grid gap-2", className) }, props))));
|
|
18251
|
+
return (jsx(FormItemContext.Provider, { value: { id }, children: jsx("div", Object.assign({ "data-slot": "form-item", className: cn("grid gap-2", className) }, props)) }));
|
|
18218
18252
|
}
|
|
18219
18253
|
function FormLabel(_a) {
|
|
18220
18254
|
var { className } = _a, props = __rest(_a, ["className"]);
|
|
18221
18255
|
const { error, formItemId } = useFormField();
|
|
18222
|
-
return (
|
|
18256
|
+
return (jsx(Label, Object.assign({ "data-slot": "form-label", "data-error": !!error, className: cn("data-[error=true]:text-destructive-foreground", className), htmlFor: formItemId }, props)));
|
|
18223
18257
|
}
|
|
18224
18258
|
function FormControl(_a) {
|
|
18225
18259
|
var props = __rest(_a, []);
|
|
18226
18260
|
const { error, formItemId, formDescriptionId, formMessageId } = useFormField();
|
|
18227
|
-
return (
|
|
18261
|
+
return (jsx(Slot$2, Object.assign({ "data-slot": "form-control", id: formItemId, "aria-describedby": !error
|
|
18228
18262
|
? `${formDescriptionId}`
|
|
18229
18263
|
: `${formDescriptionId} ${formMessageId}`, "aria-invalid": !!error }, props)));
|
|
18230
18264
|
}
|
|
@@ -18239,22 +18273,18 @@ function FormMessage(_a) {
|
|
|
18239
18273
|
}
|
|
18240
18274
|
const key = validateErrorMessageKey(String(body));
|
|
18241
18275
|
const message = t(`Errors.${key}`);
|
|
18242
|
-
return (
|
|
18276
|
+
return (jsx("p", Object.assign({ "data-slot": "form-message", id: formMessageId, className: cn("text-destructive-foreground text-sm", className) }, props, { children: message })));
|
|
18243
18277
|
}
|
|
18244
18278
|
|
|
18245
18279
|
function Input(_a) {
|
|
18246
18280
|
var { className, type } = _a, props = __rest(_a, ["className", "type"]);
|
|
18247
|
-
return (
|
|
18281
|
+
return (jsx("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 shadow-xs flex h-10 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base outline-none transition-[color,box-shadow] 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)));
|
|
18248
18282
|
}
|
|
18249
18283
|
|
|
18250
18284
|
function InputGroup(_a) {
|
|
18251
18285
|
var { name, label, className } = _a, props = __rest(_a, ["name", "label", "className"]);
|
|
18252
18286
|
const { control } = useFormContext();
|
|
18253
|
-
return (
|
|
18254
|
-
React__default.createElement(FormLabel, null, label),
|
|
18255
|
-
React__default.createElement(FormControl, null,
|
|
18256
|
-
React__default.createElement(Input, Object.assign({}, field, props))),
|
|
18257
|
-
React__default.createElement(FormMessage, null))) }));
|
|
18287
|
+
return (jsx(FormField, { control: control, name: name, render: ({ field }) => (jsxs(FormItem, { className: className, children: [jsx(FormLabel, { children: label }), jsx(FormControl, { children: jsx(Input, Object.assign({}, field, props)) }), jsx(FormMessage, {})] })) }));
|
|
18258
18288
|
}
|
|
18259
18289
|
|
|
18260
18290
|
const falsyToString = (value)=>typeof value === "boolean" ? `${value}` : value === 0 ? "0" : value;
|
|
@@ -18324,7 +18354,7 @@ const buttonVariants = cva("inline-flex cursor-pointer items-center justify-cent
|
|
|
18324
18354
|
function Button(_a) {
|
|
18325
18355
|
var { className, variant, size, asChild = false } = _a, props = __rest(_a, ["className", "variant", "size", "asChild"]);
|
|
18326
18356
|
const Comp = asChild ? Slot$2 : "button";
|
|
18327
|
-
return (
|
|
18357
|
+
return (jsx(Comp, Object.assign({ "data-slot": "button", className: cn(buttonVariants({ variant, size, className })) }, props)));
|
|
18328
18358
|
}
|
|
18329
18359
|
|
|
18330
18360
|
/**
|
|
@@ -18517,9 +18547,7 @@ const X$2 = createLucideIcon("X", __iconNode);
|
|
|
18517
18547
|
function SubmitButton(_a) {
|
|
18518
18548
|
var { isSubmitting, isValid = true, className, variant, children, size } = _a, props = __rest(_a, ["isSubmitting", "isValid", "className", "variant", "children", "size"]);
|
|
18519
18549
|
const { t } = useTranslation();
|
|
18520
|
-
return (
|
|
18521
|
-
isSubmitting && React__default.createElement(Loader, { className: "animate-spin" }),
|
|
18522
|
-
isSubmitting ? t("CheckoutEmbed.loading") : children));
|
|
18550
|
+
return (jsxs(Button, Object.assign({ type: "submit", size: size, className: className, variant: variant, disabled: isSubmitting || !isValid }, props, { children: [isSubmitting && jsx(Loader, { className: "animate-spin" }), isSubmitting ? t("CheckoutEmbed.loading") : children] })));
|
|
18523
18551
|
}
|
|
18524
18552
|
|
|
18525
18553
|
const r=(t,r,o)=>{if(t&&"reportValidity"in t){const s=get(o,r);t.setCustomValidity(s&&s.message||""),t.reportValidity();}},o=(e,t)=>{for(const o in t.fields){const s=t.fields[o];s&&s.ref&&"reportValidity"in s.ref?r(s.ref,o,e):s&&s.refs&&s.refs.forEach(t=>r(t,o,e));}},s$2=(r,s)=>{s.shouldUseNativeValidation&&o(r,s);const n={};for(const o in r){const f=get(s.fields,o),c=Object.assign(r[o]||{},{ref:f&&f.ref});if(i(s.names||Object.keys(r),o)){const r=Object.assign({},get(n,o));set(r,"root",c),set(n,o,r);}else set(n,o,c);}return n},i=(e,t)=>{const r=n$2(t);return e.some(e=>n$2(e).match(`^${r}\\.\\d+`))};function n$2(e){return e.replace(/\]|\[/g,"")}
|
|
@@ -22044,72 +22072,64 @@ var Close = DialogClose;
|
|
|
22044
22072
|
|
|
22045
22073
|
function Dialog(_a) {
|
|
22046
22074
|
var props = __rest(_a, []);
|
|
22047
|
-
return
|
|
22075
|
+
return jsx(Root$1, Object.assign({ "data-slot": "dialog" }, props));
|
|
22048
22076
|
}
|
|
22049
22077
|
function DialogTrigger(_a) {
|
|
22050
22078
|
var props = __rest(_a, []);
|
|
22051
|
-
return
|
|
22079
|
+
return jsx(Trigger$1, Object.assign({ "data-slot": "dialog-trigger" }, props));
|
|
22052
22080
|
}
|
|
22053
22081
|
function DialogPortal(_a) {
|
|
22054
22082
|
var props = __rest(_a, []);
|
|
22055
|
-
return
|
|
22083
|
+
return jsx(Portal$1, Object.assign({ "data-slot": "dialog-portal" }, props));
|
|
22056
22084
|
}
|
|
22057
22085
|
function DialogOverlay(_a) {
|
|
22058
22086
|
var { className } = _a, props = __rest(_a, ["className"]);
|
|
22059
|
-
return (
|
|
22087
|
+
return (jsx(Overlay, Object.assign({ "data-slot": "dialog-overlay", className: cn("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50", className) }, props)));
|
|
22060
22088
|
}
|
|
22061
22089
|
function DialogContent(_a) {
|
|
22062
22090
|
var { className, children } = _a, props = __rest(_a, ["className", "children"]);
|
|
22063
|
-
return (
|
|
22064
|
-
React.createElement(DialogOverlay, null),
|
|
22065
|
-
React.createElement(Content$1, Object.assign({ "data-slot": "dialog-content", className: cn("bg-background 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 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg", className) }, props),
|
|
22066
|
-
children,
|
|
22067
|
-
React.createElement(Close, { className: "ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4" },
|
|
22068
|
-
React.createElement(X$2, null),
|
|
22069
|
-
React.createElement("span", { className: "sr-only" }, "Close")))));
|
|
22091
|
+
return (jsxs(DialogPortal, { "data-slot": "dialog-portal", children: [jsx(DialogOverlay, {}), jsxs(Content$1, Object.assign({ "data-slot": "dialog-content", className: cn("bg-background 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 fixed left-[50%] top-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg", className) }, props, { children: [children, jsxs(Close, { className: "ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground rounded-xs focus:outline-hidden absolute right-4 top-4 opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 disabled:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0", children: [jsx(X$2, {}), jsx("span", { className: "sr-only", children: "Close" })] })] }))] }));
|
|
22070
22092
|
}
|
|
22071
22093
|
function DialogHeader(_a) {
|
|
22072
22094
|
var { className } = _a, props = __rest(_a, ["className"]);
|
|
22073
|
-
return (
|
|
22095
|
+
return (jsx("div", Object.assign({ "data-slot": "dialog-header", className: cn("flex flex-col gap-2 text-center sm:text-left", className) }, props)));
|
|
22074
22096
|
}
|
|
22075
22097
|
function DialogFooter(_a) {
|
|
22076
22098
|
var { className } = _a, props = __rest(_a, ["className"]);
|
|
22077
|
-
return (
|
|
22099
|
+
return (jsx("div", Object.assign({ "data-slot": "dialog-footer", className: cn("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end", className) }, props)));
|
|
22078
22100
|
}
|
|
22079
22101
|
function DialogTitle(_a) {
|
|
22080
22102
|
var { className } = _a, props = __rest(_a, ["className"]);
|
|
22081
|
-
return (
|
|
22103
|
+
return (jsx(Title, Object.assign({ "data-slot": "dialog-title", className: cn("text-lg font-semibold leading-none", className) }, props)));
|
|
22082
22104
|
}
|
|
22083
22105
|
function DialogDescription(_a) {
|
|
22084
22106
|
var { className } = _a, props = __rest(_a, ["className"]);
|
|
22085
|
-
return (
|
|
22107
|
+
return (jsx(Description, Object.assign({ "data-slot": "dialog-description", className: cn("text-muted-foreground text-sm", className) }, props)));
|
|
22086
22108
|
}
|
|
22087
22109
|
|
|
22088
22110
|
function Command(_a) {
|
|
22089
22111
|
var { className } = _a, props = __rest(_a, ["className"]);
|
|
22090
|
-
return (
|
|
22112
|
+
return (jsx(He, Object.assign({ "data-slot": "command", className: cn("bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-md", className) }, props)));
|
|
22091
22113
|
}
|
|
22092
22114
|
function CommandInput(_a) {
|
|
22093
22115
|
var { className } = _a, props = __rest(_a, ["className"]);
|
|
22094
|
-
return (
|
|
22095
|
-
React.createElement(Search, { className: "size-4 shrink-0 opacity-50" }),
|
|
22096
|
-
React.createElement(He.Input, Object.assign({ "data-slot": "command-input", className: cn("placeholder:text-muted-foreground flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50", className) }, props))));
|
|
22116
|
+
return (jsxs("div", { "data-slot": "command-input-wrapper", className: "flex h-9 items-center gap-2 border-b px-3", children: [jsx(Search, { className: "size-4 shrink-0 opacity-50" }), jsx(He.Input, Object.assign({ "data-slot": "command-input", className: cn("placeholder:text-muted-foreground outline-hidden flex h-10 w-full rounded-md bg-transparent py-3 text-sm disabled:cursor-not-allowed disabled:opacity-50", className) }, props))] }));
|
|
22097
22117
|
}
|
|
22098
22118
|
function CommandList(_a) {
|
|
22099
22119
|
var { className } = _a, props = __rest(_a, ["className"]);
|
|
22100
|
-
return (
|
|
22120
|
+
return (jsx(He.List, Object.assign({ "data-slot": "command-list", className: cn("max-h-[300px] scroll-py-1 overflow-y-auto overflow-x-hidden", className) }, props)));
|
|
22101
22121
|
}
|
|
22102
22122
|
function CommandEmpty(_a) {
|
|
22103
22123
|
var props = __rest(_a, []);
|
|
22104
|
-
return (
|
|
22124
|
+
return (jsx(He.Empty, Object.assign({ "data-slot": "command-empty", className: "py-6 text-center text-sm" }, props)));
|
|
22105
22125
|
}
|
|
22106
22126
|
function CommandGroup(_a) {
|
|
22107
22127
|
var { className } = _a, props = __rest(_a, ["className"]);
|
|
22108
|
-
return (
|
|
22128
|
+
return (jsx(He.Group, Object.assign({ "data-slot": "command-group", className: cn("text-foreground [&_[cmdk-group-heading]]:text-muted-foreground overflow-hidden p-1 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium", className) }, props)));
|
|
22109
22129
|
}
|
|
22110
22130
|
function CommandItem(_a) {
|
|
22111
22131
|
var { className } = _a, props = __rest(_a, ["className"]);
|
|
22112
|
-
return (
|
|
22132
|
+
return (jsx(He.Item, Object.assign({ "data-slot": "command-item", className: cn("data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground outline-hidden relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0", className) }, props)));
|
|
22113
22133
|
}
|
|
22114
22134
|
|
|
22115
22135
|
/**
|
|
@@ -22154,8 +22174,9 @@ function getOppositeAxis(axis) {
|
|
|
22154
22174
|
function getAxisLength(axis) {
|
|
22155
22175
|
return axis === 'y' ? 'height' : 'width';
|
|
22156
22176
|
}
|
|
22177
|
+
const yAxisSides = /*#__PURE__*/new Set(['top', 'bottom']);
|
|
22157
22178
|
function getSideAxis(placement) {
|
|
22158
|
-
return
|
|
22179
|
+
return yAxisSides.has(getSide(placement)) ? 'y' : 'x';
|
|
22159
22180
|
}
|
|
22160
22181
|
function getAlignmentAxis(placement) {
|
|
22161
22182
|
return getOppositeAxis(getSideAxis(placement));
|
|
@@ -22180,19 +22201,19 @@ function getExpandedPlacements(placement) {
|
|
|
22180
22201
|
function getOppositeAlignmentPlacement(placement) {
|
|
22181
22202
|
return placement.replace(/start|end/g, alignment => oppositeAlignmentMap[alignment]);
|
|
22182
22203
|
}
|
|
22204
|
+
const lrPlacement = ['left', 'right'];
|
|
22205
|
+
const rlPlacement = ['right', 'left'];
|
|
22206
|
+
const tbPlacement = ['top', 'bottom'];
|
|
22207
|
+
const btPlacement = ['bottom', 'top'];
|
|
22183
22208
|
function getSideList(side, isStart, rtl) {
|
|
22184
|
-
const lr = ['left', 'right'];
|
|
22185
|
-
const rl = ['right', 'left'];
|
|
22186
|
-
const tb = ['top', 'bottom'];
|
|
22187
|
-
const bt = ['bottom', 'top'];
|
|
22188
22209
|
switch (side) {
|
|
22189
22210
|
case 'top':
|
|
22190
22211
|
case 'bottom':
|
|
22191
|
-
if (rtl) return isStart ?
|
|
22192
|
-
return isStart ?
|
|
22212
|
+
if (rtl) return isStart ? rlPlacement : lrPlacement;
|
|
22213
|
+
return isStart ? lrPlacement : rlPlacement;
|
|
22193
22214
|
case 'left':
|
|
22194
22215
|
case 'right':
|
|
22195
|
-
return isStart ?
|
|
22216
|
+
return isStart ? tbPlacement : btPlacement;
|
|
22196
22217
|
default:
|
|
22197
22218
|
return [];
|
|
22198
22219
|
}
|
|
@@ -22742,6 +22763,8 @@ const hide$2 = function (options) {
|
|
|
22742
22763
|
};
|
|
22743
22764
|
};
|
|
22744
22765
|
|
|
22766
|
+
const originSides = /*#__PURE__*/new Set(['left', 'top']);
|
|
22767
|
+
|
|
22745
22768
|
// For type backwards-compatibility, the `OffsetOptions` type was also
|
|
22746
22769
|
// Derivable.
|
|
22747
22770
|
|
|
@@ -22755,7 +22778,7 @@ async function convertValueToCoords(state, options) {
|
|
|
22755
22778
|
const side = getSide(placement);
|
|
22756
22779
|
const alignment = getAlignment(placement);
|
|
22757
22780
|
const isVertical = getSideAxis(placement) === 'y';
|
|
22758
|
-
const mainAxisMulti =
|
|
22781
|
+
const mainAxisMulti = originSides.has(side) ? -1 : 1;
|
|
22759
22782
|
const crossAxisMulti = rtl && isVertical ? -1 : 1;
|
|
22760
22783
|
const rawValue = evaluate(options, state);
|
|
22761
22784
|
|
|
@@ -22955,7 +22978,7 @@ const limitShift$2 = function (options) {
|
|
|
22955
22978
|
if (checkCrossAxis) {
|
|
22956
22979
|
var _middlewareData$offse, _middlewareData$offse2;
|
|
22957
22980
|
const len = mainAxis === 'y' ? 'width' : 'height';
|
|
22958
|
-
const isOriginSide =
|
|
22981
|
+
const isOriginSide = originSides.has(getSide(placement));
|
|
22959
22982
|
const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);
|
|
22960
22983
|
const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);
|
|
22961
22984
|
if (crossAxisCoord < limitMin) {
|
|
@@ -23100,6 +23123,7 @@ function isShadowRoot(value) {
|
|
|
23100
23123
|
}
|
|
23101
23124
|
return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;
|
|
23102
23125
|
}
|
|
23126
|
+
const invalidOverflowDisplayValues = /*#__PURE__*/new Set(['inline', 'contents']);
|
|
23103
23127
|
function isOverflowElement(element) {
|
|
23104
23128
|
const {
|
|
23105
23129
|
overflow,
|
|
@@ -23107,27 +23131,32 @@ function isOverflowElement(element) {
|
|
|
23107
23131
|
overflowY,
|
|
23108
23132
|
display
|
|
23109
23133
|
} = getComputedStyle$1(element);
|
|
23110
|
-
return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !
|
|
23134
|
+
return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !invalidOverflowDisplayValues.has(display);
|
|
23111
23135
|
}
|
|
23136
|
+
const tableElements = /*#__PURE__*/new Set(['table', 'td', 'th']);
|
|
23112
23137
|
function isTableElement(element) {
|
|
23113
|
-
return
|
|
23138
|
+
return tableElements.has(getNodeName(element));
|
|
23114
23139
|
}
|
|
23140
|
+
const topLayerSelectors = [':popover-open', ':modal'];
|
|
23115
23141
|
function isTopLayer(element) {
|
|
23116
|
-
return
|
|
23142
|
+
return topLayerSelectors.some(selector => {
|
|
23117
23143
|
try {
|
|
23118
23144
|
return element.matches(selector);
|
|
23119
|
-
} catch (
|
|
23145
|
+
} catch (_e) {
|
|
23120
23146
|
return false;
|
|
23121
23147
|
}
|
|
23122
23148
|
});
|
|
23123
23149
|
}
|
|
23150
|
+
const transformProperties = ['transform', 'translate', 'scale', 'rotate', 'perspective'];
|
|
23151
|
+
const willChangeValues = ['transform', 'translate', 'scale', 'rotate', 'perspective', 'filter'];
|
|
23152
|
+
const containValues = ['paint', 'layout', 'strict', 'content'];
|
|
23124
23153
|
function isContainingBlock(elementOrCss) {
|
|
23125
23154
|
const webkit = isWebKit();
|
|
23126
23155
|
const css = isElement(elementOrCss) ? getComputedStyle$1(elementOrCss) : elementOrCss;
|
|
23127
23156
|
|
|
23128
23157
|
// https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block
|
|
23129
23158
|
// https://drafts.csswg.org/css-transforms-2/#individual-transforms
|
|
23130
|
-
return
|
|
23159
|
+
return transformProperties.some(value => css[value] ? css[value] !== 'none' : false) || (css.containerType ? css.containerType !== 'normal' : false) || !webkit && (css.backdropFilter ? css.backdropFilter !== 'none' : false) || !webkit && (css.filter ? css.filter !== 'none' : false) || willChangeValues.some(value => (css.willChange || '').includes(value)) || containValues.some(value => (css.contain || '').includes(value));
|
|
23131
23160
|
}
|
|
23132
23161
|
function getContainingBlock(element) {
|
|
23133
23162
|
let currentNode = getParentNode(element);
|
|
@@ -23145,8 +23174,9 @@ function isWebKit() {
|
|
|
23145
23174
|
if (typeof CSS === 'undefined' || !CSS.supports) return false;
|
|
23146
23175
|
return CSS.supports('-webkit-backdrop-filter', 'none');
|
|
23147
23176
|
}
|
|
23177
|
+
const lastTraversableNodeNames = /*#__PURE__*/new Set(['html', 'body', '#document']);
|
|
23148
23178
|
function isLastTraversableNode(node) {
|
|
23149
|
-
return
|
|
23179
|
+
return lastTraversableNodeNames.has(getNodeName(node));
|
|
23150
23180
|
}
|
|
23151
23181
|
function getComputedStyle$1(element) {
|
|
23152
23182
|
return getWindow(element).getComputedStyle(element);
|
|
@@ -23451,6 +23481,7 @@ function getViewportRect(element, strategy) {
|
|
|
23451
23481
|
};
|
|
23452
23482
|
}
|
|
23453
23483
|
|
|
23484
|
+
const absoluteOrFixed = /*#__PURE__*/new Set(['absolute', 'fixed']);
|
|
23454
23485
|
// Returns the inner client rect, subtracting scrollbars if present.
|
|
23455
23486
|
function getInnerBoundingClientRect(element, strategy) {
|
|
23456
23487
|
const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');
|
|
@@ -23515,7 +23546,7 @@ function getClippingElementAncestors(element, cache) {
|
|
|
23515
23546
|
if (!currentNodeIsContaining && computedStyle.position === 'fixed') {
|
|
23516
23547
|
currentContainingBlockComputedStyle = null;
|
|
23517
23548
|
}
|
|
23518
|
-
const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle &&
|
|
23549
|
+
const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && absoluteOrFixed.has(currentContainingBlockComputedStyle.position) || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);
|
|
23519
23550
|
if (shouldDropCurrentNode) {
|
|
23520
23551
|
// Drop non-containing blocks.
|
|
23521
23552
|
result = result.filter(ancestor => ancestor !== currentNode);
|
|
@@ -24882,16 +24913,15 @@ var Content2 = PopoverContent$1;
|
|
|
24882
24913
|
|
|
24883
24914
|
function Popover(_a) {
|
|
24884
24915
|
var props = __rest(_a, []);
|
|
24885
|
-
return
|
|
24916
|
+
return jsx(Root2, Object.assign({ "data-slot": "popover" }, props));
|
|
24886
24917
|
}
|
|
24887
24918
|
function PopoverTrigger(_a) {
|
|
24888
24919
|
var props = __rest(_a, []);
|
|
24889
|
-
return
|
|
24920
|
+
return jsx(Trigger, Object.assign({ "data-slot": "popover-trigger" }, props));
|
|
24890
24921
|
}
|
|
24891
24922
|
function PopoverContent(_a) {
|
|
24892
24923
|
var { className, align = "center", sideOffset = 4 } = _a, props = __rest(_a, ["className", "align", "sideOffset"]);
|
|
24893
|
-
return (
|
|
24894
|
-
React.createElement(Content2, Object.assign({ "data-slot": "popover-content", align: align, sideOffset: sideOffset, 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 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden", className) }, props))));
|
|
24924
|
+
return (jsx(Portal, { children: jsx(Content2, Object.assign({ "data-slot": "popover-content", align: align, sideOffset: sideOffset, 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 origin-(--radix-popover-content-transform-origin) outline-hidden z-50 w-72 rounded-md border p-4 shadow-md", className) }, props)) }));
|
|
24895
24925
|
}
|
|
24896
24926
|
|
|
24897
24927
|
function n(){return (n=Object.assign?Object.assign.bind():function(a){for(var n=1;n<arguments.length;n++){var e=arguments[n];for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&(a[t]=e[t]);}return a}).apply(this,arguments)}function e(a,n){if(null==a)return {};var e,t,r={},s=Object.keys(a);for(t=0;t<s.length;t++)n.indexOf(e=s[t])>=0||(r[e]=a[e]);return r}var t={ac:true,ad:true,ae:true,af:true,afar:true,ag:true,ai:true,al:true,am:true,ao:true,aq:true,ar:true,as:true,at:true,au:true,"au-aboriginal":true,"au-act":true,"au-nsw":true,"au-nt":true,"au-qld":true,"au-tas":true,"au-vic":true,"au-wa":true,aw:true,ax:true,az:true,ba:true,bb:true,bd:true,be:true,bf:true,bg:true,bh:true,bi:true,bj:true,bl:true,bm:true,bn:true,bo:true,"bq-bo":true,"bq-sa":true,"bq-se":true,bq:true,br:true,bs:true,bt:true,bv:true,bw:true,by:true,bz:true,"ca-bc":true,ca:true,cc:true,cd:true,cf:true,cg:true,"ch-gr":true,ch:true,ci:true,ck:true,cl:true,cm:true,"cn-xj":true,cn:true,co:true,cp:true,cq:true,cr:true,cu:true,cv:true,cw:true,cx:true,cy:true,cz:true,de:true,dg:true,dj:true,dk:true,dm:true,do:true,dz:true,ea:true,earth:true,east_african_federation:true,easter_island:true,"ec-w":true,ec:true,ee:true,eg:true,eh:true,er:true,"es-ar":true,"es-ce":true,"es-cn":true,"es-ct":true,"es-ga":true,"es-ib":true,"es-ml":true,"es-pv":true,"es-variant":true,es:true,"et-or":true,"et-ti":true,et:true,eu:true,european_union:true,ewe:true,fi:true,fj:true,fk:true,fm:true,fo:true,"fr-20r":true,"fr-bre":true,"fr-cp":true,fr:true,fx:true,ga:true,"gb-con":true,"gb-eng":true,"gb-nir":true,"gb-ork":true,"gb-sct":true,"gb-wls":true,gb:true,gd:true,"ge-ab":true,ge:true,gf:true,gg:true,gh:true,gi:true,gl:true,gm:true,gn:true,gp:true,gq:true,gr:true,gs:true,gt:true,gu:true,guarani:true,gw:true,gy:true,hausa:true,hk:true,hm:true,hmong:true,hn:true,hr:true,ht:true,hu:true,ic:true,id:true,"id-jb":true,"id-jt":true,ie:true,il:true,im:true,"in-as":true,"in-gj":true,"in-ka":true,"in-or":true,"in-tn":true,in:true,io:true,iq:true,ir:true,is:true,"it-23":true,"it-82":true,"it-88":true,it:true,je:true,jm:true,jo:true,jp:true,kanuri:true,ke:true,kg:true,kh:true,ki:true,kikuyu:true,km:true,kn:true,kongo:true,kp:true,kr:true,kurdistan:true,kw:true,ky:true,kz:true,la:true,lb:true,lc:true,li:true,lk:true,lr:true,ls:true,lt:true,lu:true,lv:true,ly:true,ma:true,malayali:true,manipur:true,maori:true,mc:true,md:true,me:true,mf:true,mg:true,mh:true,mizoram:true,mk:true,ml:true,mm:true,mn:true,mo:true,mp:true,mq:true,mr:true,ms:true,mt:true,mu:true,mv:true,mw:true,mx:true,my:true,mz:true,na:true,nato:true,nc:true,ne:true,nf:true,ng:true,ni:true,"nl-fr":true,nl:true,no:true,northern_cyprus:true,np:true,nr:true,nu:true,nz:true,occitania:true,olympics:true,om:true,otomi:true,pa:true,pe:true,pf:true,pg:true,ph:true,"pk-jk":true,"pk-sd":true,pk:true,pl:true,pm:true,pn:true,pr:true,ps:true,"pt-20":true,"pt-30":true,pt:true,pw:true,py:true,qa:true,quechua:true,re:true,ro:true,rs:true,ru:true,"ru-ba":true,"ru-ce":true,"ru-cu":true,"ru-da":true,"ru-ko":true,"ru-ta":true,"ru-ud":true,rw:true,sa:true,sami:true,sb:true,sc:true,sd:true,se:true,sg:true,"sh-ac":true,"sh-hl":true,"sh-ta":true,sh:true,si:true,sj:true,sk:true,sl:true,sm:true,sn:true,so:true,somaliland:true,south_ossetia:true,soviet_union:true,sr:true,ss:true,st:true,su:true,sv:true,sx:true,sy:true,sz:true,ta:true,tc:true,td:true,tf:true,tg:true,th:true,tibet:true,tj:true,tk:true,tl:true,tm:true,tn:true,to:true,torres_strait_islands:true,tr:true,transnistria:true,tt:true,tv:true,tw:true,tz:true,ua:true,ug:true,uk:true,um:true,un:true,united_nations:true,"us-hi":true,us:true,uy:true,uz:true,va:true,vc:true,ve:true,vg:true,vi:true,vn:true,vu:true,wf:true,wiphala:true,ws:true,xk:true,xx:true,ye:true,yorubaland:true,yt:true,za:true,zm:true,zw:true},s=["countryCode","cdnUrl"],c=function(a,e,t,r){return void 0===r&&(r=""),n({},t,{title:t.title||a,height:t.height||100,src:""+(e||"https://react-circle-flags.pages.dev/")+r+a+".svg"})},u=function(r){var i=r.countryCode,u=r.cdnUrl,o=e(r,s);return React__default.createElement("img",n({"data-testid":"circle-country-flag"},c(function(a){return t[a]?a:"xx"}(i).toLowerCase(),u,o)))};
|
|
@@ -33427,30 +33457,12 @@ const CountryDropdownComponent = (_a, ref) => {
|
|
|
33427
33457
|
onChange === null || onChange === void 0 ? void 0 : onChange(country);
|
|
33428
33458
|
setOpen(false);
|
|
33429
33459
|
}, [onChange]);
|
|
33430
|
-
const triggerClasses = cn("flex h-9 w-full items-center justify-between whitespace-nowrap rounded-md border
|
|
33431
|
-
return (
|
|
33432
|
-
|
|
33433
|
-
|
|
33434
|
-
|
|
33435
|
-
|
|
33436
|
-
slim === false && (React__default.createElement("span", { className: "overflow-hidden text-ellipsis whitespace-nowrap" }, selectedCountry.name)))) : (React__default.createElement("span", null, slim === false ? (placeholder || setSelectedCountry.name) : (React__default.createElement(Globe, { size: 20 })))),
|
|
33437
|
-
React__default.createElement(ChevronDown, { size: 16 })),
|
|
33438
|
-
React__default.createElement(PopoverContent, { collisionPadding: 10, side: "bottom", className: "min-w-[--radix-popper-anchor-width] p-0" },
|
|
33439
|
-
React__default.createElement(Command, { className: "w-full max-h-[200px] sm:max-h-[270px]" },
|
|
33440
|
-
React__default.createElement(CommandList, null,
|
|
33441
|
-
React__default.createElement("div", { className: "sticky top-0 z-10 bg-popover" },
|
|
33442
|
-
React__default.createElement(CommandInput, { placeholder: "Search country..." })),
|
|
33443
|
-
React__default.createElement(CommandEmpty, null, "No country found."),
|
|
33444
|
-
React__default.createElement(CommandGroup, null, options
|
|
33445
|
-
.filter((x) => x.name)
|
|
33446
|
-
.map((option, key) => (React__default.createElement(CommandItem, { className: "flex items-center w-full gap-2", key: key, onSelect: () => handleSelect(option) },
|
|
33447
|
-
React__default.createElement("div", { className: "flex flex-grow w-0 space-x-2 overflow-hidden" },
|
|
33448
|
-
React__default.createElement("div", { className: "inline-flex items-center justify-center w-5 h-5 shrink-0 overflow-hidden rounded-full" },
|
|
33449
|
-
React__default.createElement(u, { countryCode: option.alpha2.toLowerCase(), height: 20 })),
|
|
33450
|
-
React__default.createElement("span", { className: "overflow-hidden text-ellipsis whitespace-nowrap" }, option.name)),
|
|
33451
|
-
React__default.createElement(Check, { className: cn("ml-auto h-4 w-4 shrink-0", option.name === (selectedCountry === null || selectedCountry === void 0 ? void 0 : selectedCountry.name)
|
|
33452
|
-
? "opacity-100"
|
|
33453
|
-
: "opacity-0") }))))))))));
|
|
33460
|
+
const triggerClasses = cn("border-input ring-offset-background placeholder:text-muted-foreground focus:ring-ring flex h-9 w-full items-center justify-between whitespace-nowrap rounded-md border bg-transparent px-3 py-2 text-sm shadow-sm focus:outline-none focus:ring-1 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1", slim === true && "w-20");
|
|
33461
|
+
return (jsxs(Popover, { open: open, onOpenChange: setOpen, children: [jsxs(PopoverTrigger, Object.assign({ ref: ref, className: triggerClasses, disabled: disabled }, props, { children: [selectedCountry ? (jsxs("div", { className: "flex w-0 flex-grow items-center gap-2 overflow-hidden", children: [jsx("div", { className: "inline-flex h-5 w-5 shrink-0 items-center justify-center overflow-hidden rounded-full", children: jsx(u, { countryCode: selectedCountry.alpha2.toLowerCase(), height: 20 }) }), slim === false && (jsx("span", { className: "overflow-hidden text-ellipsis whitespace-nowrap", children: selectedCountry.name }))] })) : (jsx("span", { children: slim === false ? (placeholder || setSelectedCountry.name) : (jsx(Globe, { size: 20 })) })), jsx(ChevronDown, { size: 16 })] })), jsx(PopoverContent, { collisionPadding: 10, side: "bottom", className: "min-w-[--radix-popper-anchor-width] p-0", children: jsx(Command, { className: "max-h-[200px] w-full sm:max-h-[270px]", children: jsxs(CommandList, { children: [jsx("div", { className: "bg-popover sticky top-0 z-10", children: jsx(CommandInput, { placeholder: "Search country..." }) }), jsx(CommandEmpty, { children: "No country found." }), jsx(CommandGroup, { children: options
|
|
33462
|
+
.filter((x) => x.name)
|
|
33463
|
+
.map((option, key) => (jsxs(CommandItem, { className: "flex w-full items-center gap-2", onSelect: () => handleSelect(option), children: [jsxs("div", { className: "flex w-0 flex-grow space-x-2 overflow-hidden", children: [jsx("div", { className: "inline-flex h-5 w-5 shrink-0 items-center justify-center overflow-hidden rounded-full", children: jsx(u, { countryCode: option.alpha2.toLowerCase(), height: 20 }) }), jsx("span", { className: "overflow-hidden text-ellipsis whitespace-nowrap", children: option.name })] }), jsx(Check, { className: cn("ml-auto h-4 w-4 shrink-0", option.name === (selectedCountry === null || selectedCountry === void 0 ? void 0 : selectedCountry.name)
|
|
33464
|
+
? "opacity-100"
|
|
33465
|
+
: "opacity-0") })] }, key))) })] }) }) })] }));
|
|
33454
33466
|
};
|
|
33455
33467
|
CountryDropdownComponent.displayName = "CountryDropdownComponent";
|
|
33456
33468
|
const CountryDropdown = forwardRef(CountryDropdownComponent);
|
|
@@ -33495,35 +33507,12 @@ function AddressInput() {
|
|
|
33495
33507
|
else {
|
|
33496
33508
|
form.clearErrors("address");
|
|
33497
33509
|
}
|
|
33510
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
33498
33511
|
}, [open]);
|
|
33499
|
-
return (
|
|
33500
|
-
|
|
33501
|
-
|
|
33502
|
-
|
|
33503
|
-
React__default.createElement(FormField, { control: form.control, name: "address", render: () => (React__default.createElement(FormItem, null,
|
|
33504
|
-
React__default.createElement(FormLabel, null, t("CheckoutEmbed.CustomerForm.address.address")),
|
|
33505
|
-
React__default.createElement(FormControl, null,
|
|
33506
|
-
React__default.createElement(Input, { placeholder: t("CheckoutEmbed.CustomerForm.address.addressPlaceholder"), value: (currentValue === null || currentValue === void 0 ? void 0 : currentValue.line1) ? formatAddress(currentValue) : "", readOnly: true, className: "cursor-pointer" })),
|
|
33507
|
-
React__default.createElement(FormMessage, null))) }))),
|
|
33508
|
-
React__default.createElement(DialogContent, { className: "sm:max-w-[500px] transform-none!" },
|
|
33509
|
-
React__default.createElement(DialogHeader, null,
|
|
33510
|
-
React__default.createElement(DialogTitle, null, t("CheckoutEmbed.CustomerForm.address.title")),
|
|
33511
|
-
React__default.createElement(DialogDescription, null, t("CheckoutEmbed.CustomerForm.address.description"))),
|
|
33512
|
-
React__default.createElement("div", { className: "grid grid-cols-2 gap-4" },
|
|
33513
|
-
React__default.createElement(InputGroup, { className: "col-span-2", name: "address.line1", label: t("CheckoutEmbed.CustomerForm.address.line1"), placeholder: t("CheckoutEmbed.CustomerForm.address.line1Placeholder"), autoComplete: "address-line1" }),
|
|
33514
|
-
React__default.createElement(InputGroup, { className: "col-span-2", name: "address.line2", label: t("CheckoutEmbed.CustomerForm.address.line2"), placeholder: t("CheckoutEmbed.CustomerForm.address.line2Placeholder"), autoComplete: "address-line2" }),
|
|
33515
|
-
React__default.createElement(InputGroup, { name: "address.city", label: t("CheckoutEmbed.CustomerForm.address.city"), placeholder: t("CheckoutEmbed.CustomerForm.address.cityPlaceholder"), autoComplete: "address-level2" }),
|
|
33516
|
-
React__default.createElement(InputGroup, { name: "address.state", label: t("CheckoutEmbed.CustomerForm.address.state"), placeholder: t("CheckoutEmbed.CustomerForm.address.statePlaceholder"), autoComplete: "address-level1" }),
|
|
33517
|
-
React__default.createElement(InputGroup, { name: "address.zipCode", label: t("CheckoutEmbed.CustomerForm.address.zipCode"), placeholder: t("CheckoutEmbed.CustomerForm.address.zipCodePlaceholder"), autoComplete: "postal-code" }),
|
|
33518
|
-
React__default.createElement(FormField, { control: form.control, name: "address.country", render: ({ field }) => (React__default.createElement(FormItem, null,
|
|
33519
|
-
React__default.createElement(FormLabel, null, t("CheckoutEmbed.CustomerForm.address.country")),
|
|
33520
|
-
React__default.createElement(CountryDropdown, { placeholder: t("CheckoutEmbed.CustomerForm.address.countryPlaceholder"), defaultValue: field.value, onChange: (country) => {
|
|
33521
|
-
field.onChange(country.name);
|
|
33522
|
-
form.setValue("address.countryCode", country.alpha2);
|
|
33523
|
-
} }),
|
|
33524
|
-
React__default.createElement(FormMessage, null))) })),
|
|
33525
|
-
React__default.createElement(DialogFooter, null,
|
|
33526
|
-
React__default.createElement(Button, { onClick: handleSave, type: "button", disabled: isValidating }, t("CheckoutEmbed.CustomerForm.address.button")))))));
|
|
33512
|
+
return (jsx("div", { className: "w-full md:col-span-2", children: jsxs(Dialog, { open: open, onOpenChange: setOpen, children: [jsx(DialogTrigger, { asChild: true, children: jsx("div", { className: "relative grid gap-2", children: jsx(FormField, { control: form.control, name: "address", render: () => (jsxs(FormItem, { children: [jsx(FormLabel, { children: t("CheckoutEmbed.CustomerForm.address.address") }), jsx(FormControl, { children: jsx(Input, { placeholder: t("CheckoutEmbed.CustomerForm.address.addressPlaceholder"), value: (currentValue === null || currentValue === void 0 ? void 0 : currentValue.line1) ? formatAddress(currentValue) : "", readOnly: true, className: "cursor-pointer" }) }), jsx(FormMessage, {})] })) }) }) }), jsxs(DialogContent, { className: "transform-none! sm:max-w-[500px]", children: [jsxs(DialogHeader, { children: [jsx(DialogTitle, { children: t("CheckoutEmbed.CustomerForm.address.title") }), jsx(DialogDescription, { children: t("CheckoutEmbed.CustomerForm.address.description") })] }), jsxs("div", { className: "grid grid-cols-2 gap-4", children: [jsx(InputGroup, { className: "col-span-2", name: "address.line1", label: t("CheckoutEmbed.CustomerForm.address.line1"), placeholder: t("CheckoutEmbed.CustomerForm.address.line1Placeholder"), autoComplete: "address-line1" }), jsx(InputGroup, { className: "col-span-2", name: "address.line2", label: t("CheckoutEmbed.CustomerForm.address.line2"), placeholder: t("CheckoutEmbed.CustomerForm.address.line2Placeholder"), autoComplete: "address-line2" }), jsx(InputGroup, { name: "address.city", label: t("CheckoutEmbed.CustomerForm.address.city"), placeholder: t("CheckoutEmbed.CustomerForm.address.cityPlaceholder"), autoComplete: "address-level2" }), jsx(InputGroup, { name: "address.state", label: t("CheckoutEmbed.CustomerForm.address.state"), placeholder: t("CheckoutEmbed.CustomerForm.address.statePlaceholder"), autoComplete: "address-level1" }), jsx(InputGroup, { name: "address.zipCode", label: t("CheckoutEmbed.CustomerForm.address.zipCode"), placeholder: t("CheckoutEmbed.CustomerForm.address.zipCodePlaceholder"), autoComplete: "postal-code" }), jsx(FormField, { control: form.control, name: "address.country", render: ({ field }) => (jsxs(FormItem, { children: [jsx(FormLabel, { children: t("CheckoutEmbed.CustomerForm.address.country") }), jsx(CountryDropdown, { placeholder: t("CheckoutEmbed.CustomerForm.address.countryPlaceholder"), defaultValue: field.value, onChange: (country) => {
|
|
33513
|
+
field.onChange(country.name);
|
|
33514
|
+
form.setValue("address.countryCode", country.alpha2);
|
|
33515
|
+
} }), jsx(FormMessage, {})] })) })] }), jsx(DialogFooter, { children: jsx(Button, { onClick: handleSave, type: "button", disabled: isValidating, children: t("CheckoutEmbed.CustomerForm.address.button") }) })] })] }) }));
|
|
33527
33516
|
}
|
|
33528
33517
|
|
|
33529
33518
|
function CustomerForm({ initialData, onSubmit, }) {
|
|
@@ -33546,17 +33535,7 @@ function CustomerForm({ initialData, onSubmit, }) {
|
|
|
33546
33535
|
},
|
|
33547
33536
|
mode: "onBlur",
|
|
33548
33537
|
});
|
|
33549
|
-
return (
|
|
33550
|
-
React__default.createElement("form", { onSubmit: form.handleSubmit(onSubmit), className: "md:grid-cols-2 gap-6 grid" },
|
|
33551
|
-
React__default.createElement("div", { className: "md:col-span-2" },
|
|
33552
|
-
React__default.createElement("h2", null, t("CheckoutEmbed.CustomerForm.title"))),
|
|
33553
|
-
React__default.createElement(InputGroup, { className: "md:col-span-2", name: "email", label: t("CheckoutEmbed.CustomerForm.email"), placeholder: t("CheckoutEmbed.CustomerForm.emailPlaceholder"), type: "email", autoComplete: "email" }),
|
|
33554
|
-
React__default.createElement(InputGroup, { name: "firstName", label: t("CheckoutEmbed.CustomerForm.firstName"), placeholder: t("CheckoutEmbed.CustomerForm.firstNamePlaceholder"), autoComplete: "given-name" }),
|
|
33555
|
-
React__default.createElement(InputGroup, { name: "lastName", label: t("CheckoutEmbed.CustomerForm.lastName"), placeholder: t("CheckoutEmbed.CustomerForm.lastNamePlaceholder"), autoComplete: "family-name" }),
|
|
33556
|
-
React__default.createElement(AddressInput, null),
|
|
33557
|
-
React__default.createElement(InputGroup, { name: "phone", label: t("CheckoutEmbed.CustomerForm.phone"), placeholder: t("CheckoutEmbed.CustomerForm.phonePlaceholder"), type: "tel", autoComplete: "tel" }),
|
|
33558
|
-
React__default.createElement("div", { className: "flex md:col-span-2 justify-end pt-2" },
|
|
33559
|
-
React__default.createElement(SubmitButton, { isValid: form.formState.isValid, isSubmitting: form.formState.isSubmitting }, t("CheckoutEmbed.CustomerForm.button"))))));
|
|
33538
|
+
return (jsx(Form, Object.assign({}, form, { children: jsxs("form", { onSubmit: form.handleSubmit(onSubmit), className: "grid gap-6 md:grid-cols-2", children: [jsx("div", { className: "md:col-span-2", children: jsx("h2", { children: t("CheckoutEmbed.CustomerForm.title") }) }), jsx(InputGroup, { className: "md:col-span-2", name: "email", label: t("CheckoutEmbed.CustomerForm.email"), placeholder: t("CheckoutEmbed.CustomerForm.emailPlaceholder"), type: "email", autoComplete: "email" }), jsx(InputGroup, { name: "firstName", label: t("CheckoutEmbed.CustomerForm.firstName"), placeholder: t("CheckoutEmbed.CustomerForm.firstNamePlaceholder"), autoComplete: "given-name" }), jsx(InputGroup, { name: "lastName", label: t("CheckoutEmbed.CustomerForm.lastName"), placeholder: t("CheckoutEmbed.CustomerForm.lastNamePlaceholder"), autoComplete: "family-name" }), jsx(AddressInput, {}), jsx(InputGroup, { name: "phone", label: t("CheckoutEmbed.CustomerForm.phone"), placeholder: t("CheckoutEmbed.CustomerForm.phonePlaceholder"), type: "tel", autoComplete: "tel" }), jsx("div", { className: "flex justify-end pt-2 md:col-span-2", children: jsx(SubmitButton, { isValid: form.formState.isValid, isSubmitting: form.formState.isSubmitting, children: t("CheckoutEmbed.CustomerForm.button") }) })] }) })));
|
|
33560
33539
|
}
|
|
33561
33540
|
|
|
33562
33541
|
var reactStripe_umd$1 = {exports: {}};
|
|
@@ -35090,22 +35069,15 @@ const CheckoutForm$1 = ({ onSuccess, onError, children, setSubmitting, }) => {
|
|
|
35090
35069
|
const wrapper = document.getElementById("bs-wrapper");
|
|
35091
35070
|
if (!wrapper)
|
|
35092
35071
|
return null;
|
|
35093
|
-
return (
|
|
35094
|
-
|
|
35095
|
-
|
|
35096
|
-
|
|
35097
|
-
|
|
35098
|
-
|
|
35099
|
-
|
|
35100
|
-
|
|
35101
|
-
|
|
35102
|
-
height: rect === null || rect === void 0 ? void 0 : rect.height,
|
|
35103
|
-
} },
|
|
35104
|
-
React__default.createElement("form", { onSubmit: handleSubmit },
|
|
35105
|
-
React__default.createElement("div", null,
|
|
35106
|
-
React__default.createElement(reactStripe_umdExports.PaymentElement, null),
|
|
35107
|
-
React__default.createElement("p", { style: { color: "#fb2c36" } }, errorMessage)),
|
|
35108
|
-
children)), wrapper)));
|
|
35072
|
+
return (jsxs(Fragment$1, { children: [jsx("div", { ref: containerRef, className: "h-[450px] w-full" }), ReactDOM__default.createPortal(jsx("div", { style: {
|
|
35073
|
+
display: "block",
|
|
35074
|
+
zIndex: 20,
|
|
35075
|
+
position: "absolute",
|
|
35076
|
+
top: rect === null || rect === void 0 ? void 0 : rect.top,
|
|
35077
|
+
left: rect === null || rect === void 0 ? void 0 : rect.left,
|
|
35078
|
+
width: rect === null || rect === void 0 ? void 0 : rect.width,
|
|
35079
|
+
height: rect === null || rect === void 0 ? void 0 : rect.height,
|
|
35080
|
+
}, children: jsxs("form", { onSubmit: handleSubmit, children: [jsxs("div", { children: [jsx(reactStripe_umdExports.PaymentElement, {}), jsx("p", { style: { color: "#fb2c36" }, children: errorMessage })] }), children] }) }), wrapper)] }));
|
|
35109
35081
|
};
|
|
35110
35082
|
var CheckoutForm$2 = memo(CheckoutForm$1);
|
|
35111
35083
|
|
|
@@ -35117,56 +35089,24 @@ function PaymentElement({ paymentSecret, publicKey, checkoutAppearance, locale,
|
|
|
35117
35089
|
clientSecret: paymentSecret,
|
|
35118
35090
|
fonts: fonts,
|
|
35119
35091
|
};
|
|
35120
|
-
return (
|
|
35121
|
-
React__default.createElement(CheckoutForm$2, { onSuccess: onSuccess, onError: onError, children: children, setSubmitting: setSubmitting })));
|
|
35092
|
+
return (jsx(reactStripe_umdExports.Elements, { stripe: stripePromise, options: options, children: jsx(CheckoutForm$2, { onSuccess: onSuccess, onError: onError, setSubmitting: setSubmitting, children: children }) }));
|
|
35122
35093
|
}
|
|
35123
35094
|
var PaymentElement$1 = memo(PaymentElement);
|
|
35124
35095
|
|
|
35125
35096
|
function PaymentForm({ paymentSecret, onSuccess, onError, onBack, onDoubleBack, contactEmail, shippingAddress, shippingName, shippingPrice, checkoutAppearance, fonts, locale, publicKey, paymentComponentKey, }) {
|
|
35126
35097
|
const [isSubmitting, setIsSubmitting] = useState(false);
|
|
35127
35098
|
const { t } = useTranslation();
|
|
35128
|
-
return (
|
|
35129
|
-
|
|
35130
|
-
|
|
35131
|
-
|
|
35132
|
-
|
|
35133
|
-
|
|
35134
|
-
React__default.createElement("p", null,
|
|
35135
|
-
React__default.createElement("span", { className: "font-medium" }, t("CheckoutEmbed.Shipping.contact")),
|
|
35136
|
-
" ",
|
|
35137
|
-
React__default.createElement("span", { className: "text-muted-foreground" }, contactEmail)),
|
|
35138
|
-
React__default.createElement(Button, { variant: "link", size: "link", onClick: onDoubleBack }, t("CheckoutEmbed.Shipping.change"))),
|
|
35139
|
-
React__default.createElement("div", { className: "flex items-center justify-between text-sm" },
|
|
35140
|
-
React__default.createElement("p", null,
|
|
35141
|
-
React__default.createElement("span", { className: "font-medium" }, t("CheckoutEmbed.Shipping.address")),
|
|
35142
|
-
" ",
|
|
35143
|
-
React__default.createElement("span", { className: "text-muted-foreground" }, shippingAddress)),
|
|
35144
|
-
React__default.createElement(Button, { variant: "link", size: "link", onClick: onDoubleBack }, t("CheckoutEmbed.Shipping.change"))),
|
|
35145
|
-
React__default.createElement("div", { className: "flex items-center justify-between text-sm" },
|
|
35146
|
-
React__default.createElement("p", null,
|
|
35147
|
-
React__default.createElement("span", { className: "font-medium" }, t("CheckoutEmbed.Shipping.shipping")),
|
|
35148
|
-
" ",
|
|
35149
|
-
React__default.createElement("span", { className: "text-muted-foreground" },
|
|
35150
|
-
shippingName,
|
|
35151
|
-
" \u00B7 ",
|
|
35152
|
-
shippingPrice)),
|
|
35153
|
-
React__default.createElement(Button, { variant: "link", size: "link", onClick: onBack }, t("CheckoutEmbed.Shipping.change")))),
|
|
35154
|
-
React__default.createElement("div", { className: "mt-8" }, paymentSecret && (React__default.createElement(PaymentElement$1, { key: paymentComponentKey, fonts: fonts, checkoutAppearance: convertCheckoutAppearanceToStripeAppearance(checkoutAppearance, fonts), locale: locale, paymentSecret: paymentSecret, onSuccess: onSuccess, onError: onError, setSubmitting: setIsSubmitting, publicKey: publicKey },
|
|
35155
|
-
React__default.createElement("div", { style: {
|
|
35156
|
-
display: "flex",
|
|
35157
|
-
justifyContent: "space-between",
|
|
35158
|
-
alignItems: "center",
|
|
35159
|
-
paddingTop: "2rem",
|
|
35160
|
-
} },
|
|
35161
|
-
React__default.createElement(Button, { type: "button", variant: "ghost", onClick: onBack },
|
|
35162
|
-
React__default.createElement(ChevronLeft, null),
|
|
35163
|
-
t("CheckoutEmbed.Payment.back")),
|
|
35164
|
-
React__default.createElement(SubmitButton, { isValid: true, isSubmitting: isSubmitting }, t("CheckoutEmbed.Payment.button"))))))));
|
|
35099
|
+
return (jsxs("div", { className: "space-y-6", children: [jsxs("div", { children: [jsx("h2", { className: "mb-2", children: t("CheckoutEmbed.Payment.title") }), jsx("p", { className: "text-muted-foreground text-sm", children: t("CheckoutEmbed.Payment.description") })] }), jsxs("div", { className: "space-y-2", children: [jsxs("div", { className: "flex items-center justify-between text-sm", children: [jsxs("p", { children: [jsx("span", { className: "font-medium", children: t("CheckoutEmbed.Shipping.contact") }), " ", jsx("span", { className: "text-muted-foreground", children: contactEmail })] }), jsx(Button, { variant: "link", size: "link", onClick: onDoubleBack, children: t("CheckoutEmbed.Shipping.change") })] }), jsxs("div", { className: "flex items-center justify-between text-sm", children: [jsxs("p", { children: [jsx("span", { className: "font-medium", children: t("CheckoutEmbed.Shipping.address") }), " ", jsx("span", { className: "text-muted-foreground", children: shippingAddress })] }), jsx(Button, { variant: "link", size: "link", onClick: onDoubleBack, children: t("CheckoutEmbed.Shipping.change") })] }), jsxs("div", { className: "flex items-center justify-between text-sm", children: [jsxs("p", { children: [jsx("span", { className: "font-medium", children: t("CheckoutEmbed.Shipping.shipping") }), " ", jsxs("span", { className: "text-muted-foreground", children: [shippingName, " \u00B7 ", shippingPrice] })] }), jsx(Button, { variant: "link", size: "link", onClick: onBack, children: t("CheckoutEmbed.Shipping.change") })] })] }), jsx("div", { className: "mt-8", children: paymentSecret && (jsx(PaymentElement$1, { fonts: fonts, checkoutAppearance: convertCheckoutAppearanceToStripeAppearance(checkoutAppearance, fonts), locale: locale, paymentSecret: paymentSecret, onSuccess: onSuccess, onError: onError, setSubmitting: setIsSubmitting, publicKey: publicKey, children: jsxs("div", { style: {
|
|
35100
|
+
display: "flex",
|
|
35101
|
+
justifyContent: "space-between",
|
|
35102
|
+
alignItems: "center",
|
|
35103
|
+
paddingTop: "2rem",
|
|
35104
|
+
}, children: [jsxs(Button, { type: "button", variant: "ghost", onClick: onBack, children: [jsx(ChevronLeft, {}), t("CheckoutEmbed.Payment.back")] }), jsx(SubmitButton, { isValid: true, isSubmitting: isSubmitting, children: t("CheckoutEmbed.Payment.button") })] }) }, paymentComponentKey)) })] }));
|
|
35165
35105
|
}
|
|
35166
35106
|
|
|
35167
35107
|
function Skeleton(_a) {
|
|
35168
35108
|
var { className } = _a, props = __rest(_a, ["className"]);
|
|
35169
|
-
return (
|
|
35109
|
+
return (jsx("div", Object.assign({ "data-slot": "skeleton", className: cn("bg-accent animate-pulse rounded-md", className) }, props)));
|
|
35170
35110
|
}
|
|
35171
35111
|
|
|
35172
35112
|
function ZasilkovnaShippingOption({ children, onPickupPointSelected, locale, countryCode, apiKey, }) {
|
|
@@ -35205,15 +35145,14 @@ function ZasilkovnaShippingOption({ children, onPickupPointSelected, locale, cou
|
|
|
35205
35145
|
console.error("Packeta widget not found", window);
|
|
35206
35146
|
}
|
|
35207
35147
|
};
|
|
35208
|
-
return (
|
|
35209
|
-
React__default.createElement("div", { onClick: () => handleClick() }, children)));
|
|
35148
|
+
return (jsx(Fragment$1, { children: jsx("div", { onClick: () => handleClick(), children: children }) }));
|
|
35210
35149
|
}
|
|
35211
35150
|
|
|
35212
35151
|
function ShippingOptionWrapper({ rate, children, onPickupPointSelected, locale, countryCode, }) {
|
|
35213
35152
|
if (rate.provider === "zasilkovna") {
|
|
35214
|
-
return (
|
|
35153
|
+
return (jsx(ZasilkovnaShippingOption, { onPickupPointSelected: onPickupPointSelected, locale: locale, countryCode: countryCode, apiKey: rate.clientSecret, children: children }));
|
|
35215
35154
|
}
|
|
35216
|
-
return
|
|
35155
|
+
return jsx(Fragment$1, { children: children });
|
|
35217
35156
|
}
|
|
35218
35157
|
|
|
35219
35158
|
function ShippingMethodForm({ shippingRates, initialData, onSubmit, onBack, contactEmail, shippingAddress, currency, exchangeRate, locale, countryCode, setFormData, formData, }) {
|
|
@@ -35230,77 +35169,38 @@ function ShippingMethodForm({ shippingRates, initialData, onSubmit, onBack, cont
|
|
|
35230
35169
|
},
|
|
35231
35170
|
});
|
|
35232
35171
|
const currentRateId = form.watch("rateId");
|
|
35233
|
-
return (
|
|
35234
|
-
|
|
35235
|
-
|
|
35236
|
-
|
|
35237
|
-
|
|
35238
|
-
|
|
35239
|
-
|
|
35240
|
-
|
|
35241
|
-
|
|
35242
|
-
|
|
35243
|
-
|
|
35244
|
-
|
|
35245
|
-
|
|
35246
|
-
|
|
35247
|
-
|
|
35248
|
-
|
|
35249
|
-
|
|
35250
|
-
|
|
35251
|
-
|
|
35252
|
-
|
|
35253
|
-
|
|
35254
|
-
|
|
35255
|
-
|
|
35256
|
-
|
|
35257
|
-
|
|
35258
|
-
|
|
35259
|
-
|
|
35260
|
-
|
|
35261
|
-
|
|
35262
|
-
rateId,
|
|
35263
|
-
provider: rate.provider,
|
|
35264
|
-
price: intPrice,
|
|
35265
|
-
name: rate.name,
|
|
35266
|
-
pickupPointId: rate.provider === "zasilkovna" ? pickupPointId : "",
|
|
35267
|
-
pickupPointDisplayName: rate.provider === "zasilkovna" ? pickupPointName : "",
|
|
35268
|
-
};
|
|
35269
|
-
form.setValue("rateId", newFormData.rateId);
|
|
35270
|
-
form.setValue("provider", newFormData.provider);
|
|
35271
|
-
form.setValue("name", newFormData.name);
|
|
35272
|
-
form.setValue("price", newFormData.price);
|
|
35273
|
-
form.setValue("pickupPointId", newFormData.pickupPointId);
|
|
35274
|
-
form.setValue("pickupPointDisplayName", newFormData.pickupPointDisplayName);
|
|
35275
|
-
setFormData(Object.assign(Object.assign({}, formData), { shipping: Object.assign({}, newFormData) }));
|
|
35276
|
-
}, locale: locale, countryCode: countryCode },
|
|
35277
|
-
React__default.createElement("div", { className: clsx("p-4 cursor-pointer rounded-md border bg-background", {
|
|
35278
|
-
"bg-muted border-primary": currentRateId === rateId,
|
|
35279
|
-
}) },
|
|
35280
|
-
React__default.createElement("div", { className: "flex items-center justify-between w-full" },
|
|
35281
|
-
React__default.createElement("p", null, rate.name),
|
|
35282
|
-
React__default.createElement("p", null, displayPrice)),
|
|
35283
|
-
React__default.createElement("p", { className: "text-sm text-muted-foreground" }, description),
|
|
35284
|
-
pickupPointDisplayName && (React__default.createElement(React__default.Fragment, null,
|
|
35285
|
-
React__default.createElement("hr", { className: "my-2" }),
|
|
35286
|
-
React__default.createElement("p", { className: "text-sm text-muted-foreground" },
|
|
35287
|
-
t("CheckoutEmbed.Shipping.description.shippedTo"),
|
|
35288
|
-
" ",
|
|
35289
|
-
React__default.createElement("span", { className: "text-foreground" }, pickupPointDisplayName)))))));
|
|
35290
|
-
}),
|
|
35291
|
-
React__default.createElement(FormMessage, null, (_a = form.formState.errors.rateId) === null || _a === void 0 ? void 0 : _a.message),
|
|
35292
|
-
React__default.createElement("div", { className: "flex justify-between items-center pt-4" },
|
|
35293
|
-
React__default.createElement(Button, { type: "button", variant: "ghost", onClick: onBack },
|
|
35294
|
-
React__default.createElement(ChevronLeft, null),
|
|
35295
|
-
t("CheckoutEmbed.Shipping.back")),
|
|
35296
|
-
React__default.createElement(SubmitButton, { isSubmitting: form.formState.isSubmitting, isValid: !!currentRateId }, t("CheckoutEmbed.Shipping.button")))))));
|
|
35172
|
+
return (jsxs("div", { className: "space-y-6", children: [jsx("h2", { children: t("CheckoutEmbed.Shipping.title") }), jsxs("div", { className: "space-y-2 pb-2", children: [jsxs("div", { className: "flex items-center justify-between text-sm", children: [jsxs("p", { children: [jsx("span", { className: "font-medium", children: t("CheckoutEmbed.Shipping.contact") }), " ", jsx("span", { className: "text-muted-foreground", children: contactEmail })] }), jsx(Button, { variant: "link", size: "link", onClick: onBack, children: t("CheckoutEmbed.Shipping.change") })] }), jsxs("div", { className: "flex items-center justify-between text-sm", children: [jsxs("p", { children: [jsx("span", { className: "font-medium", children: t("CheckoutEmbed.Shipping.address") }), " ", jsx("span", { className: "text-muted-foreground", children: shippingAddress })] }), jsx(Button, { variant: "link", size: "link", onClick: onBack, children: t("CheckoutEmbed.Shipping.change") })] })] }), jsx(Form, Object.assign({}, form, { children: jsxs("form", { onSubmit: form.handleSubmit(onSubmit), className: "space-y-4", children: [shippingRates.length === 0 &&
|
|
35173
|
+
Array.from({ length: 3 }).map((_, index) => (jsx(ShippingRateLoading, {}, index))), shippingRates.map((rate) => {
|
|
35174
|
+
const pickupPointDisplayName = form.watch("pickupPointDisplayName");
|
|
35175
|
+
const rateId = rate.provider + rate.name;
|
|
35176
|
+
const intPrice = Math.ceil(Number(rate.price));
|
|
35177
|
+
const displayPrice = storeHelpers.formatPrice(intPrice, currency, exchangeRate);
|
|
35178
|
+
const description = rate.provider === "zasilkovna"
|
|
35179
|
+
? t("CheckoutEmbed.Shipping.description.zasilkovna")
|
|
35180
|
+
: t("CheckoutEmbed.Shipping.description.other");
|
|
35181
|
+
return (jsx(ShippingOptionWrapper, { rate: rate, onPickupPointSelected: (pickupPointId, pickupPointName) => {
|
|
35182
|
+
const newFormData = {
|
|
35183
|
+
rateId,
|
|
35184
|
+
provider: rate.provider,
|
|
35185
|
+
price: intPrice,
|
|
35186
|
+
name: rate.name,
|
|
35187
|
+
pickupPointId: rate.provider === "zasilkovna" ? pickupPointId : "",
|
|
35188
|
+
pickupPointDisplayName: rate.provider === "zasilkovna" ? pickupPointName : "",
|
|
35189
|
+
};
|
|
35190
|
+
form.setValue("rateId", newFormData.rateId);
|
|
35191
|
+
form.setValue("provider", newFormData.provider);
|
|
35192
|
+
form.setValue("name", newFormData.name);
|
|
35193
|
+
form.setValue("price", newFormData.price);
|
|
35194
|
+
form.setValue("pickupPointId", newFormData.pickupPointId);
|
|
35195
|
+
form.setValue("pickupPointDisplayName", newFormData.pickupPointDisplayName);
|
|
35196
|
+
setFormData(Object.assign(Object.assign({}, formData), { shipping: Object.assign({}, newFormData) }));
|
|
35197
|
+
}, locale: locale, countryCode: countryCode, children: jsxs("div", { className: clsx("bg-background cursor-pointer rounded-md border p-4", {
|
|
35198
|
+
"bg-muted border-primary": currentRateId === rateId,
|
|
35199
|
+
}), children: [jsxs("div", { className: "flex w-full items-center justify-between", children: [jsx("p", { children: rate.name }), jsx("p", { children: displayPrice })] }), jsx("p", { className: "text-muted-foreground text-sm", children: description }), pickupPointDisplayName && (jsxs(Fragment$1, { children: [jsx("hr", { className: "my-2" }), jsxs("p", { className: "text-muted-foreground text-sm", children: [t("CheckoutEmbed.Shipping.description.shippedTo"), " ", jsx("span", { className: "text-foreground", children: pickupPointDisplayName })] })] }))] }) }, rateId));
|
|
35200
|
+
}), jsx(FormMessage, { children: (_a = form.formState.errors.rateId) === null || _a === void 0 ? void 0 : _a.message }), jsxs("div", { className: "flex items-center justify-between pt-4", children: [jsxs(Button, { type: "button", variant: "ghost", onClick: onBack, children: [jsx(ChevronLeft, {}), t("CheckoutEmbed.Shipping.back")] }), jsx(SubmitButton, { isSubmitting: form.formState.isSubmitting, isValid: !!currentRateId, children: t("CheckoutEmbed.Shipping.button") })] })] }) }))] }));
|
|
35297
35201
|
}
|
|
35298
35202
|
function ShippingRateLoading() {
|
|
35299
|
-
return (
|
|
35300
|
-
React__default.createElement("div", { className: "flex items-center justify-between w-full" },
|
|
35301
|
-
React__default.createElement(Skeleton, { className: "w-12 h-5" }),
|
|
35302
|
-
React__default.createElement(Skeleton, { className: "w-16 h-5" })),
|
|
35303
|
-
React__default.createElement(Skeleton, { className: "w-40 h-3.5" })));
|
|
35203
|
+
return (jsxs("div", { className: clsx("bg-background grid cursor-pointer gap-[10px] rounded-md border p-4"), children: [jsxs("div", { className: "flex w-full items-center justify-between", children: [jsx(Skeleton, { className: "h-5 w-12" }), jsx(Skeleton, { className: "h-5 w-16" })] }), jsx(Skeleton, { className: "h-3.5 w-40" })] }));
|
|
35304
35204
|
}
|
|
35305
35205
|
|
|
35306
35206
|
const useFormStore = create()(persist((set) => ({
|
|
@@ -35334,9 +35234,11 @@ function CheckoutForm({ storeClient, checkoutId, onSuccess, onError, cancelUrl,
|
|
|
35334
35234
|
if (!isCustomerValid)
|
|
35335
35235
|
setStep("customer");
|
|
35336
35236
|
}
|
|
35237
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
35337
35238
|
}, [step, formData]);
|
|
35338
35239
|
useEffect(() => {
|
|
35339
35240
|
validateStep();
|
|
35241
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
35340
35242
|
}, [step]);
|
|
35341
35243
|
useEffect(() => {
|
|
35342
35244
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21;
|
|
@@ -35396,6 +35298,7 @@ function CheckoutForm({ storeClient, checkoutId, onSuccess, onError, cancelUrl,
|
|
|
35396
35298
|
},
|
|
35397
35299
|
} }));
|
|
35398
35300
|
}
|
|
35301
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
35399
35302
|
}, [customer]);
|
|
35400
35303
|
useEffect(() => {
|
|
35401
35304
|
if (step !== "shipping")
|
|
@@ -35413,6 +35316,7 @@ function CheckoutForm({ storeClient, checkoutId, onSuccess, onError, cancelUrl,
|
|
|
35413
35316
|
}
|
|
35414
35317
|
});
|
|
35415
35318
|
getShippingRates();
|
|
35319
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
35416
35320
|
}, [step, clientSecret, checkoutId]);
|
|
35417
35321
|
// Handle address form submission
|
|
35418
35322
|
const handleCustomerSubmit = (data) => __awaiter(this, void 0, void 0, function* () {
|
|
@@ -35474,33 +35378,22 @@ function CheckoutForm({ storeClient, checkoutId, onSuccess, onError, cancelUrl,
|
|
|
35474
35378
|
};
|
|
35475
35379
|
const renderStep = () => {
|
|
35476
35380
|
if (step === "payment" && formData.customer && formData.shipping) {
|
|
35477
|
-
return (
|
|
35381
|
+
return (jsx(PaymentForm, { paymentComponentKey: paymentComponentKey, locale: locale, fonts: fonts, checkoutAppearance: checkoutAppearance, paymentSecret: paymentSecret, onSuccess: onSuccess, onError: onError, onBack: handleBack, onDoubleBack: handleDoubleBack, contactEmail: formData.customer.email, shippingAddress: formatAddress(formData.customer.address), shippingName: formData.shipping.name, shippingPrice: storeHelpers.formatPrice(formData.shipping.price, currency, exchangeRate), publicKey: publicKey }));
|
|
35478
35382
|
}
|
|
35479
35383
|
if (step === "shipping" && formData.customer) {
|
|
35480
|
-
return (
|
|
35384
|
+
return (jsx(ShippingMethodForm, { setFormData: setFormData, formData: formData, shippingRates: shippingRates, initialData: formData.shipping, onSubmit: handleShippingSubmit, onBack: handleBack, contactEmail: formData.customer.email, shippingAddress: formatAddress(formData.customer.address), currency: currency, exchangeRate: exchangeRate, locale: locale, countryCode: formData.customer.address.countryCode }));
|
|
35481
35385
|
}
|
|
35482
|
-
return (
|
|
35386
|
+
return (jsx(CustomerForm, { initialData: formData.customer, onSubmit: handleCustomerSubmit }));
|
|
35483
35387
|
};
|
|
35484
|
-
return
|
|
35388
|
+
return jsx("div", { className: "relative h-max min-h-full w-full", children: renderStep() });
|
|
35485
35389
|
}
|
|
35486
35390
|
|
|
35487
35391
|
function CheckoutFormLoading() {
|
|
35488
35392
|
const { t } = useTranslation();
|
|
35489
|
-
return (
|
|
35490
|
-
React__default.createElement("div", { className: "md:col-span-2" },
|
|
35491
|
-
React__default.createElement("h2", null, t("CheckoutEmbed.CustomerForm.title"))),
|
|
35492
|
-
React__default.createElement(InputGroupLoading, { className: "md:col-span-2" }),
|
|
35493
|
-
React__default.createElement(InputGroupLoading, null),
|
|
35494
|
-
React__default.createElement(InputGroupLoading, null),
|
|
35495
|
-
React__default.createElement(InputGroupLoading, { className: "md:col-span-2" }),
|
|
35496
|
-
React__default.createElement(InputGroupLoading, null),
|
|
35497
|
-
React__default.createElement("div", { className: "flex md:col-span-2 justify-end pt-2" },
|
|
35498
|
-
React__default.createElement(Skeleton, { className: "w-32 h-10" }))));
|
|
35393
|
+
return (jsxs("div", { className: "grid gap-6 md:grid-cols-2", children: [jsx("div", { className: "md:col-span-2", children: jsx("h2", { children: t("CheckoutEmbed.CustomerForm.title") }) }), jsx(InputGroupLoading, { className: "md:col-span-2" }), jsx(InputGroupLoading, {}), jsx(InputGroupLoading, {}), jsx(InputGroupLoading, { className: "md:col-span-2" }), jsx(InputGroupLoading, {}), jsx("div", { className: "flex justify-end pt-2 md:col-span-2", children: jsx(Skeleton, { className: "h-10 w-32" }) })] }));
|
|
35499
35394
|
}
|
|
35500
35395
|
function InputGroupLoading({ className }) {
|
|
35501
|
-
return (
|
|
35502
|
-
React__default.createElement(Skeleton, { className: "w-10 h-3" }),
|
|
35503
|
-
React__default.createElement(Skeleton, { className: "w-full h-10" })));
|
|
35396
|
+
return (jsxs("div", { className: clsx("flex flex-col gap-2", className), children: [jsx(Skeleton, { className: "h-3 w-10" }), jsx(Skeleton, { className: "h-10 w-full" })] }));
|
|
35504
35397
|
}
|
|
35505
35398
|
|
|
35506
35399
|
function DiscountCode({ applyDiscountCode, }) {
|
|
@@ -35525,15 +35418,10 @@ function DiscountCode({ applyDiscountCode, }) {
|
|
|
35525
35418
|
setIsLoading(false);
|
|
35526
35419
|
}
|
|
35527
35420
|
});
|
|
35528
|
-
return (
|
|
35529
|
-
|
|
35530
|
-
|
|
35531
|
-
|
|
35532
|
-
setError("");
|
|
35533
|
-
setDiscountCode(e.target.value);
|
|
35534
|
-
}, name: "discountCode", placeholder: t("CheckoutEmbed.Summary.discountCodePlaceholder") }),
|
|
35535
|
-
React__default.createElement(SubmitButton, { isSubmitting: isLoading, isValid: isValid, type: "submit" }, t("CheckoutEmbed.Summary.discountCodeApply"))),
|
|
35536
|
-
error && React__default.createElement("p", { className: "text-red-500 mt-2 text-sm" }, error)));
|
|
35421
|
+
return (jsxs("form", { className: "pb-1", onSubmit: handleSubmit, children: [jsx(Label, { className: "mb-2 text-sm font-medium", children: t("CheckoutEmbed.Summary.discountCodeLabel") }), jsxs("div", { className: "flex items-center gap-2", children: [jsx(Input, { "aria-invalid": !!error, value: discountCode, onChange: (e) => {
|
|
35422
|
+
setError("");
|
|
35423
|
+
setDiscountCode(e.target.value);
|
|
35424
|
+
}, name: "discountCode", placeholder: t("CheckoutEmbed.Summary.discountCodePlaceholder") }), jsx(SubmitButton, { isSubmitting: isLoading, isValid: isValid, type: "submit", children: t("CheckoutEmbed.Summary.discountCodeApply") })] }), error && jsx("p", { className: "mt-2 text-sm text-red-500", children: error })] }));
|
|
35537
35425
|
}
|
|
35538
35426
|
|
|
35539
35427
|
function CheckoutSummary({ appliedDiscounts, lineItems, shipping, tax, currency, onCancel, exchangeRate, applyDiscountCode, removeDiscount, }) {
|
|
@@ -35562,105 +35450,65 @@ function CheckoutSummary({ appliedDiscounts, lineItems, shipping, tax, currency,
|
|
|
35562
35450
|
return intersection.filter((combination) => currentCombinations.some((currentCombination) => JSON.stringify(currentCombination) === JSON.stringify(combination)));
|
|
35563
35451
|
}, []);
|
|
35564
35452
|
const canCombine = appliedDiscounts.length === 0 || sharedCombinations.length > 0;
|
|
35565
|
-
return (
|
|
35566
|
-
|
|
35567
|
-
|
|
35568
|
-
|
|
35569
|
-
|
|
35570
|
-
|
|
35571
|
-
|
|
35572
|
-
|
|
35573
|
-
|
|
35574
|
-
|
|
35575
|
-
|
|
35576
|
-
|
|
35577
|
-
|
|
35578
|
-
|
|
35579
|
-
|
|
35580
|
-
|
|
35581
|
-
|
|
35582
|
-
|
|
35583
|
-
|
|
35584
|
-
React__default.createElement("p", null, isShippingFree
|
|
35585
|
-
? t("CheckoutEmbed.Summary.free")
|
|
35586
|
-
: !!shippingPrice
|
|
35587
|
-
? storeHelpers.formatPrice(shippingPrice, currency, exchangeRate)
|
|
35588
|
-
: t("CheckoutEmbed.Summary.calculatedAtNextStep"))),
|
|
35589
|
-
!!tax && (React__default.createElement("div", { className: "flex justify-between" },
|
|
35590
|
-
React__default.createElement("p", null, t("CheckoutEmbed.Summary.tax")),
|
|
35591
|
-
React__default.createElement("p", null, storeHelpers.formatPrice(tax, currency, exchangeRate)))),
|
|
35592
|
-
filteredDiscounts.map(({ discount, amount, id }) => {
|
|
35593
|
-
var _a;
|
|
35594
|
-
return (React__default.createElement("div", { key: discount.id, className: "flex justify-between text-muted-foreground" },
|
|
35595
|
-
React__default.createElement(DiscountItem, { id: id, removeDiscount: removeDiscount, label: (_a = ((discount === null || discount === void 0 ? void 0 : discount.code) || (discount === null || discount === void 0 ? void 0 : discount.title))) !== null && _a !== void 0 ? _a : "", canRemove: discount.method === "CODE" }),
|
|
35596
|
-
React__default.createElement("p", null,
|
|
35597
|
-
"- ",
|
|
35598
|
-
storeHelpers.formatPrice(amount, currency, exchangeRate))));
|
|
35599
|
-
}),
|
|
35600
|
-
React__default.createElement("div", { className: "flex font-bold justify-between items-center" },
|
|
35601
|
-
React__default.createElement("p", null, t("CheckoutEmbed.Summary.total")),
|
|
35602
|
-
React__default.createElement("p", null, storeHelpers.formatPrice(totalWithDiscounts, currency, exchangeRate)))),
|
|
35603
|
-
canCombine && (React__default.createElement(React__default.Fragment, null,
|
|
35604
|
-
React__default.createElement("hr", { className: clsx("order-7 md:order-none", {
|
|
35453
|
+
return (jsxs("div", { className: "grid gap-5", children: [jsxs("div", { className: "flex items-center justify-between", children: [jsxs("div", { onClick: () => setIsOpen(!isOpen), className: "flex items-center gap-2 max-md:cursor-pointer", children: [jsx("h2", { children: t("CheckoutEmbed.Summary.title") }), jsx(ChevronDown, { className: clsx("size-5 transition-transform md:hidden", {
|
|
35454
|
+
"rotate-180": isOpen,
|
|
35455
|
+
}) })] }), jsx("p", { className: "text-lg font-bold tracking-tight md:hidden", children: storeHelpers.formatPrice(total, currency, exchangeRate) }), jsx(Button, { className: "max-sm:hidden", variant: "link", size: "link", onClick: onCancel, children: t("CheckoutEmbed.Summary.edit") })] }), jsx("hr", {}), jsxs("div", { className: clsx("order-4 gap-2 md:order-none", {
|
|
35456
|
+
"hidden md:grid": !isOpen,
|
|
35457
|
+
grid: isOpen,
|
|
35458
|
+
}), children: [jsxs("div", { className: "flex justify-between", children: [jsx("p", { children: t("CheckoutEmbed.Summary.subtotal") }), jsx("p", { children: storeHelpers.formatPrice(subtotal, currency, exchangeRate) })] }), jsxs("div", { className: "flex justify-between", children: [jsx("p", { children: t("CheckoutEmbed.Summary.shipping") }), jsx("p", { children: isShippingFree
|
|
35459
|
+
? t("CheckoutEmbed.Summary.free")
|
|
35460
|
+
: shippingPrice
|
|
35461
|
+
? storeHelpers.formatPrice(shippingPrice, currency, exchangeRate)
|
|
35462
|
+
: t("CheckoutEmbed.Summary.calculatedAtNextStep") })] }), !!tax && (jsxs("div", { className: "flex justify-between", children: [jsx("p", { children: t("CheckoutEmbed.Summary.tax") }), jsx("p", { children: storeHelpers.formatPrice(tax, currency, exchangeRate) })] })), filteredDiscounts.map(({ discount, amount, id }) => {
|
|
35463
|
+
var _a;
|
|
35464
|
+
return (jsxs("div", { className: "text-muted-foreground flex justify-between", children: [jsx(DiscountItem, { id: id, removeDiscount: removeDiscount, label: (_a = ((discount === null || discount === void 0 ? void 0 : discount.code) || (discount === null || discount === void 0 ? void 0 : discount.title))) !== null && _a !== void 0 ? _a : "", canRemove: discount.method === "CODE" }), jsxs("p", { children: ["- ", storeHelpers.formatPrice(amount, currency, exchangeRate)] })] }, discount.id));
|
|
35465
|
+
}), jsxs("div", { className: "flex items-center justify-between font-bold", children: [jsx("p", { children: t("CheckoutEmbed.Summary.total") }), jsx("p", { children: storeHelpers.formatPrice(totalWithDiscounts, currency, exchangeRate) })] })] }), canCombine && (jsxs(Fragment$1, { children: [jsx("hr", { className: clsx("order-7 md:order-none", {
|
|
35466
|
+
"hidden md:block": !isOpen,
|
|
35467
|
+
block: isOpen,
|
|
35468
|
+
}) }), jsx("div", { className: clsx("order-6 gap-0 md:order-none", {
|
|
35469
|
+
"hidden md:grid": !isOpen,
|
|
35470
|
+
grid: isOpen,
|
|
35471
|
+
}), children: jsx(DiscountCode, { applyDiscountCode: applyDiscountCode }) })] })), jsx("hr", { className: clsx("order-5 md:order-none", {
|
|
35605
35472
|
"hidden md:block": !isOpen,
|
|
35606
35473
|
block: isOpen,
|
|
35607
|
-
}) }),
|
|
35608
|
-
React__default.createElement("div", { className: clsx("gap-0 order-6 md:order-none", {
|
|
35474
|
+
}) }), jsx("div", { className: clsx("order-3 gap-5 md:order-none", {
|
|
35609
35475
|
"hidden md:grid": !isOpen,
|
|
35610
35476
|
grid: isOpen,
|
|
35611
|
-
})
|
|
35612
|
-
|
|
35613
|
-
|
|
35614
|
-
|
|
35615
|
-
|
|
35616
|
-
|
|
35617
|
-
|
|
35618
|
-
|
|
35619
|
-
|
|
35620
|
-
|
|
35621
|
-
|
|
35622
|
-
|
|
35623
|
-
|
|
35624
|
-
|
|
35625
|
-
|
|
35626
|
-
|
|
35627
|
-
|
|
35628
|
-
|
|
35629
|
-
|
|
35630
|
-
|
|
35631
|
-
|
|
35632
|
-
|
|
35633
|
-
|
|
35634
|
-
|
|
35635
|
-
|
|
35636
|
-
|
|
35637
|
-
|
|
35638
|
-
|
|
35639
|
-
|
|
35640
|
-
|
|
35641
|
-
|
|
35642
|
-
|
|
35643
|
-
|
|
35644
|
-
|
|
35645
|
-
|
|
35646
|
-
const discountedPrice = finalItem.priceInCents - (totalDiscountAmount !== null && totalDiscountAmount !== void 0 ? totalDiscountAmount : 0);
|
|
35647
|
-
return (React__default.createElement("div", { key: index, className: "flex items-center" },
|
|
35648
|
-
React__default.createElement("div", { className: "relative" },
|
|
35649
|
-
React__default.createElement("div", { className: "w-16 h-16 bg-secondary rounded-lg overflow-hidden relative" }, (finalItem === null || finalItem === void 0 ? void 0 : finalItem.images[0]) && (React__default.createElement("img", { src: finalItem.images[0] ||
|
|
35650
|
-
((_b = item === null || item === void 0 ? void 0 : item.productData) === null || _b === void 0 ? void 0 : _b.images[0]) ||
|
|
35651
|
-
"/placeholder.svg", alt: ((_c = item.productData) === null || _c === void 0 ? void 0 : _c.title) || "", className: "object-cover w-full h-full", sizes: "64px" }))),
|
|
35652
|
-
React__default.createElement("div", { className: "absolute -top-2 -right-2 w-6 h-6 bg-primary rounded-full flex items-center text-background justify-center text-sm" }, item.quantity)),
|
|
35653
|
-
React__default.createElement("div", { className: "ml-4 flex-1" },
|
|
35654
|
-
React__default.createElement("h3", { className: "text-base font-medium" }, (_d = item.productData) === null || _d === void 0 ? void 0 : _d.title),
|
|
35655
|
-
React__default.createElement("p", { className: "text-muted-foreground text-ellipsis line-clamp-1 md:max-w-[75%] text-sm" }, item.variantOptions
|
|
35656
|
-
.map((option) => `${option.name}: ${option.value}`)
|
|
35657
|
-
.join(", "))),
|
|
35658
|
-
React__default.createElement("div", { className: "text-right" }, isDiscounted ? (React__default.createElement("div", { className: "flex flex-col" },
|
|
35659
|
-
React__default.createElement("p", { className: "text-sm font-medium -mb-0.5 line-through text-muted-foreground" }, storeHelpers.formatPrice((_e = finalItem === null || finalItem === void 0 ? void 0 : finalItem.priceInCents) !== null && _e !== void 0 ? _e : 0, currency, exchangeRate)),
|
|
35660
|
-
React__default.createElement("p", { className: "text-base font-medium" }, discountedPrice <= 0
|
|
35661
|
-
? t("CheckoutEmbed.Summary.free")
|
|
35662
|
-
: storeHelpers.formatPrice(discountedPrice, currency, exchangeRate)))) : (React__default.createElement("p", { className: "text-base font-medium" }, storeHelpers.formatPrice((_f = finalItem === null || finalItem === void 0 ? void 0 : finalItem.priceInCents) !== null && _f !== void 0 ? _f : 0, currency, exchangeRate))))));
|
|
35663
|
-
}))));
|
|
35477
|
+
}), children: lineItems.map((item, index) => {
|
|
35478
|
+
var _a, _b, _c, _d, _e, _f;
|
|
35479
|
+
const finalItem = ((_a = item.productData) === null || _a === void 0 ? void 0 : _a.selectedVariant) || item.productData;
|
|
35480
|
+
const productAppliedDiscounts = appliedDiscounts.filter((discount) => discount.allowedLineItems.some((allowedLineItem) => allowedLineItem.productId === item.productData.productId));
|
|
35481
|
+
const formattedProductAppliedDiscounts = productAppliedDiscounts.map((discount) => {
|
|
35482
|
+
var _a;
|
|
35483
|
+
const elegibleLineItems = discount.allowedLineItems.find((allowedLineItem) => allowedLineItem.productId === item.productData.productId);
|
|
35484
|
+
if (!elegibleLineItems)
|
|
35485
|
+
return 0;
|
|
35486
|
+
const elegibleQuantity = elegibleLineItems.quantity;
|
|
35487
|
+
const elegibleTotalAmount = ((_a = finalItem === null || finalItem === void 0 ? void 0 : finalItem.priceInCents) !== null && _a !== void 0 ? _a : 0) * elegibleQuantity;
|
|
35488
|
+
if (discount.discount.valueType === "PERCENTAGE") {
|
|
35489
|
+
const percentage = discount.discount.value / 100;
|
|
35490
|
+
return elegibleTotalAmount * percentage;
|
|
35491
|
+
}
|
|
35492
|
+
else if (discount.discount.valueType === "FREE") {
|
|
35493
|
+
return elegibleTotalAmount;
|
|
35494
|
+
}
|
|
35495
|
+
return elegibleQuantity * discount.discount.value;
|
|
35496
|
+
});
|
|
35497
|
+
const totalDiscountAmount = formattedProductAppliedDiscounts.length > 0
|
|
35498
|
+
? formattedProductAppliedDiscounts.reduce((acc, curr) => {
|
|
35499
|
+
return acc + curr;
|
|
35500
|
+
}, 0)
|
|
35501
|
+
: null;
|
|
35502
|
+
const isDiscounted = !!totalDiscountAmount;
|
|
35503
|
+
const discountedPrice = finalItem.priceInCents - (totalDiscountAmount !== null && totalDiscountAmount !== void 0 ? totalDiscountAmount : 0);
|
|
35504
|
+
return (jsxs("div", { className: "flex items-center", children: [jsxs("div", { className: "relative", children: [jsx("div", { className: "bg-secondary relative h-16 w-16 overflow-hidden rounded-lg", children: (finalItem === null || finalItem === void 0 ? void 0 : finalItem.images[0]) && (jsx("img", { src: finalItem.images[0] ||
|
|
35505
|
+
((_b = item === null || item === void 0 ? void 0 : item.productData) === null || _b === void 0 ? void 0 : _b.images[0]) ||
|
|
35506
|
+
"/placeholder.svg", alt: ((_c = item.productData) === null || _c === void 0 ? void 0 : _c.title) || "", className: "h-full w-full object-cover", sizes: "64px" })) }), jsx("div", { className: "bg-primary text-background absolute -right-2 -top-2 flex h-6 w-6 items-center justify-center rounded-full text-sm", children: item.quantity })] }), jsxs("div", { className: "ml-4 flex-1", children: [jsx("h3", { className: "text-base font-medium", children: (_d = item.productData) === null || _d === void 0 ? void 0 : _d.title }), jsx("p", { className: "text-muted-foreground line-clamp-1 text-ellipsis text-sm md:max-w-[75%]", children: item.variantOptions
|
|
35507
|
+
.map((option) => `${option.name}: ${option.value}`)
|
|
35508
|
+
.join(", ") })] }), jsx("div", { className: "text-right", children: isDiscounted ? (jsxs("div", { className: "flex flex-col", children: [jsx("p", { className: "text-muted-foreground -mb-0.5 text-sm font-medium line-through", children: storeHelpers.formatPrice((_e = finalItem === null || finalItem === void 0 ? void 0 : finalItem.priceInCents) !== null && _e !== void 0 ? _e : 0, currency, exchangeRate) }), jsx("p", { className: "text-base font-medium", children: discountedPrice <= 0
|
|
35509
|
+
? t("CheckoutEmbed.Summary.free")
|
|
35510
|
+
: storeHelpers.formatPrice(discountedPrice, currency, exchangeRate) })] })) : (jsx("p", { className: "text-base font-medium", children: storeHelpers.formatPrice((_f = finalItem === null || finalItem === void 0 ? void 0 : finalItem.priceInCents) !== null && _f !== void 0 ? _f : 0, currency, exchangeRate) })) })] }, index));
|
|
35511
|
+
}) })] }));
|
|
35664
35512
|
}
|
|
35665
35513
|
function DiscountItem({ id, removeDiscount, label, canRemove, }) {
|
|
35666
35514
|
const [isLoading, setIsLoading] = useState(false);
|
|
@@ -35676,46 +35524,12 @@ function DiscountItem({ id, removeDiscount, label, canRemove, }) {
|
|
|
35676
35524
|
setIsLoading(false);
|
|
35677
35525
|
}
|
|
35678
35526
|
});
|
|
35679
|
-
return (
|
|
35680
|
-
React__default.createElement("p", null, isLoading ? "Removing..." : label),
|
|
35681
|
-
!isLoading && canRemove && (React__default.createElement("div", { onClick: handleRemove, className: "flex items-center z-10 relative -m-0.5 hover:bg-muted p-1 rounded-full justify-center hover:text-foreground cursor-pointer" },
|
|
35682
|
-
React__default.createElement(X$2, { className: "size-3" }),
|
|
35683
|
-
React__default.createElement("p", { className: "sr-only" }, "Remove")))));
|
|
35527
|
+
return (jsxs("div", { className: "flex items-center gap-0.5", children: [jsx("p", { children: isLoading ? "Removing..." : label }), !isLoading && canRemove && (jsxs("div", { onClick: handleRemove, className: "hover:bg-muted hover:text-foreground relative z-10 -m-0.5 flex cursor-pointer items-center justify-center rounded-full p-1", children: [jsx(X$2, { className: "size-3" }), jsx("p", { className: "sr-only", children: "Remove" })] }))] }));
|
|
35684
35528
|
}
|
|
35685
35529
|
|
|
35686
35530
|
function CheckoutSummaryLoading() {
|
|
35687
35531
|
const { t } = useTranslation();
|
|
35688
|
-
return (
|
|
35689
|
-
React__default.createElement("div", { className: "flex justify-between items-center" },
|
|
35690
|
-
React__default.createElement("div", { className: "flex items-center gap-2 cursor-pointer" },
|
|
35691
|
-
React__default.createElement("h2", null, t("CheckoutEmbed.Summary.title")),
|
|
35692
|
-
React__default.createElement(ChevronDown, { className: "md:hidden size-5 transition-transform" })),
|
|
35693
|
-
React__default.createElement(Skeleton, { className: "w-20 h-[20px] md:hidden" }),
|
|
35694
|
-
React__default.createElement(Button, { className: "max-sm:hidden", variant: "link", size: "link", asChild: true },
|
|
35695
|
-
React__default.createElement("a", null, t("CheckoutEmbed.Summary.edit")))),
|
|
35696
|
-
React__default.createElement("hr", null),
|
|
35697
|
-
React__default.createElement("div", { className: "hidden md:grid gap-2" },
|
|
35698
|
-
React__default.createElement("div", { className: "flex justify-between" },
|
|
35699
|
-
React__default.createElement("p", null, t("CheckoutEmbed.Summary.subtotal")),
|
|
35700
|
-
React__default.createElement(Skeleton, { className: "w-20 h-[18px]" })),
|
|
35701
|
-
React__default.createElement("div", { className: "flex justify-between" },
|
|
35702
|
-
React__default.createElement("p", null, t("CheckoutEmbed.Summary.shipping")),
|
|
35703
|
-
React__default.createElement(Skeleton, { className: "w-20 h-[18px]" })),
|
|
35704
|
-
React__default.createElement("div", { className: "flex font-bold justify-between items-center" },
|
|
35705
|
-
React__default.createElement("p", null, t("CheckoutEmbed.Summary.total")),
|
|
35706
|
-
React__default.createElement(Skeleton, { className: "w-24 h-[18px]" }))),
|
|
35707
|
-
React__default.createElement("hr", { className: "hidden md:block" }),
|
|
35708
|
-
React__default.createElement("div", null,
|
|
35709
|
-
React__default.createElement(Skeleton, { className: "w-24 h-5 mb-2" }),
|
|
35710
|
-
React__default.createElement(Skeleton, { className: "h-10 w-full mb-1" })),
|
|
35711
|
-
React__default.createElement("hr", { className: "hidden md:block" }),
|
|
35712
|
-
Array.from({ length: 2 }).map((_, index) => (React__default.createElement("div", { key: index, className: "hidden md:flex items-center" },
|
|
35713
|
-
React__default.createElement(Skeleton, { className: "rounded-lg size-16" }),
|
|
35714
|
-
React__default.createElement("div", { className: "ml-4 grid gap-2 flex-1" },
|
|
35715
|
-
React__default.createElement(Skeleton, { className: "w-28 h-5" }),
|
|
35716
|
-
React__default.createElement(Skeleton, { className: "w-20 h-3.5" })),
|
|
35717
|
-
React__default.createElement("div", { className: "text-right" },
|
|
35718
|
-
React__default.createElement(Skeleton, { className: "w-20 h-5" })))))));
|
|
35532
|
+
return (jsxs("div", { className: "grid gap-5", children: [jsxs("div", { className: "flex items-center justify-between", children: [jsxs("div", { className: "flex cursor-pointer items-center gap-2", children: [jsx("h2", { children: t("CheckoutEmbed.Summary.title") }), jsx(ChevronDown, { className: "size-5 transition-transform md:hidden" })] }), jsx(Skeleton, { className: "h-[20px] w-20 md:hidden" }), jsx(Button, { className: "max-sm:hidden", variant: "link", size: "link", asChild: true, children: jsx("a", { children: t("CheckoutEmbed.Summary.edit") }) })] }), jsx("hr", {}), jsxs("div", { className: "hidden gap-2 md:grid", children: [jsxs("div", { className: "flex justify-between", children: [jsx("p", { children: t("CheckoutEmbed.Summary.subtotal") }), jsx(Skeleton, { className: "h-[18px] w-20" })] }), jsxs("div", { className: "flex justify-between", children: [jsx("p", { children: t("CheckoutEmbed.Summary.shipping") }), jsx(Skeleton, { className: "h-[18px] w-20" })] }), jsxs("div", { className: "flex items-center justify-between font-bold", children: [jsx("p", { children: t("CheckoutEmbed.Summary.total") }), jsx(Skeleton, { className: "h-[18px] w-24" })] })] }), jsx("hr", { className: "hidden md:block" }), jsxs("div", { children: [jsx(Skeleton, { className: "mb-2 h-5 w-24" }), jsx(Skeleton, { className: "mb-1 h-10 w-full" })] }), jsx("hr", { className: "hidden md:block" }), Array.from({ length: 2 }).map((_, index) => (jsxs("div", { className: "hidden items-center md:flex", children: [jsx(Skeleton, { className: "size-16 rounded-lg" }), jsxs("div", { className: "ml-4 grid flex-1 gap-2", children: [jsx(Skeleton, { className: "h-5 w-28" }), jsx(Skeleton, { className: "h-3.5 w-20" })] }), jsx("div", { className: "text-right", children: jsx(Skeleton, { className: "h-5 w-20" }) })] }, index)))] }));
|
|
35719
35533
|
}
|
|
35720
35534
|
|
|
35721
35535
|
function CheckoutEmbedComponent({ checkoutId, config }) {
|
|
@@ -35723,7 +35537,7 @@ function CheckoutEmbedComponent({ checkoutId, config }) {
|
|
|
35723
35537
|
const { cancelUrl, successUrl, appearance, locale, clientSecret, clientProxy, } = config;
|
|
35724
35538
|
const storeClient = React__default.useMemo(() => createStoreClient({ proxy: clientProxy }), [clientProxy]);
|
|
35725
35539
|
const iframeRef = React__default.useRef(null);
|
|
35726
|
-
React__default.useMemo(() => createI18nInstance(locale), []);
|
|
35540
|
+
React__default.useMemo(() => createI18nInstance(locale), [locale]);
|
|
35727
35541
|
const { formData, step } = useFormStore();
|
|
35728
35542
|
const paymentSecretPromiseRef = useRef(null);
|
|
35729
35543
|
const [paymentSecret, setPaymentSecret] = useState(null);
|
|
@@ -35755,6 +35569,7 @@ function CheckoutEmbedComponent({ checkoutId, config }) {
|
|
|
35755
35569
|
return () => {
|
|
35756
35570
|
mounted = false; // Cleanup
|
|
35757
35571
|
};
|
|
35572
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
35758
35573
|
}, [checkoutId]); // Only re-run if checkoutId changes
|
|
35759
35574
|
const onSuccess = () => {
|
|
35760
35575
|
resetFormStore(formData);
|
|
@@ -35796,6 +35611,7 @@ function CheckoutEmbedComponent({ checkoutId, config }) {
|
|
|
35796
35611
|
paymentSecretPromiseRef.current = null;
|
|
35797
35612
|
});
|
|
35798
35613
|
}
|
|
35614
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
35799
35615
|
}, [paymentSecret, step]);
|
|
35800
35616
|
const applyDiscountCode = (code) => __awaiter(this, void 0, void 0, function* () {
|
|
35801
35617
|
console.log("[Payment Debug] Applying discount code:", code);
|
|
@@ -35894,14 +35710,9 @@ function CheckoutEmbedComponent({ checkoutId, config }) {
|
|
|
35894
35710
|
console.log("[Payment Debug] Clearing revalidation interval");
|
|
35895
35711
|
clearInterval(interval);
|
|
35896
35712
|
};
|
|
35713
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
35897
35714
|
}, []);
|
|
35898
|
-
return (
|
|
35899
|
-
React__default.createElement("div", { className: "checkout-embed h-max gap-6 md:gap-0 py-4 md:py-12 flex flex-col md:grid md:grid-cols-7 " },
|
|
35900
|
-
React__default.createElement(Appearance, { appearance: appearance, fonts: config.fonts, iframeRef: iframeRef }),
|
|
35901
|
-
React__default.createElement("div", { className: "md:col-span-4 px-4 h-max md:px-8" }, loading ? (React__default.createElement(CheckoutFormLoading, null)) : (React__default.createElement(CheckoutForm, { locale: locale, setShippingCost: setShippingCost, storeClient: storeClient, fonts: config.fonts, checkoutAppearance: appearance, currency: (_a = checkout === null || checkout === void 0 ? void 0 : checkout.currency) !== null && _a !== void 0 ? _a : "", customer: checkout === null || checkout === void 0 ? void 0 : checkout.customer, cancelUrl: cancelUrl, checkoutId: checkoutId, clientSecret: clientSecret, onSuccess: onSuccess, onError: onError, exchangeRate: (_b = checkout === null || checkout === void 0 ? void 0 : checkout.exchangeRate) !== null && _b !== void 0 ? _b : 1, publicKey: publicKey, paymentSecret: paymentSecret, paymentComponentKey: paymentComponentKey }))),
|
|
35902
|
-
React__default.createElement("div", { className: "md:col-span-3 px-4 md:px-8 h-max order-first md:order-last" },
|
|
35903
|
-
React__default.createElement(Toaster, null),
|
|
35904
|
-
loading ? (React__default.createElement(CheckoutSummaryLoading, null)) : (React__default.createElement(CheckoutSummary, { currency: (_c = checkout === null || checkout === void 0 ? void 0 : checkout.currency) !== null && _c !== void 0 ? _c : "", lineItems: (_d = checkout === null || checkout === void 0 ? void 0 : checkout.lineItems) !== null && _d !== void 0 ? _d : [], shipping: checkout === null || checkout === void 0 ? void 0 : checkout.shipping, tax: checkout === null || checkout === void 0 ? void 0 : checkout.tax, onCancel: onCancel, exchangeRate: (_e = checkout === null || checkout === void 0 ? void 0 : checkout.exchangeRate) !== null && _e !== void 0 ? _e : 1, applyDiscountCode: applyDiscountCode, appliedDiscounts: (_f = checkout === null || checkout === void 0 ? void 0 : checkout.appliedDiscounts) !== null && _f !== void 0 ? _f : [], removeDiscount: removeDiscount }))))));
|
|
35715
|
+
return (jsx(IframeWrapper, { iframeRef: iframeRef, children: jsxs("div", { className: "checkout-embed flex h-max flex-col gap-6 py-4 md:grid md:grid-cols-7 md:gap-0 md:py-12", children: [jsx(Appearance, { appearance: appearance, fonts: config.fonts, iframeRef: iframeRef }), jsx("div", { className: "h-max px-4 md:col-span-4 md:px-8", children: loading ? (jsx(CheckoutFormLoading, {})) : (jsx(CheckoutForm, { locale: locale, setShippingCost: setShippingCost, storeClient: storeClient, fonts: config.fonts, checkoutAppearance: appearance, currency: (_a = checkout === null || checkout === void 0 ? void 0 : checkout.currency) !== null && _a !== void 0 ? _a : "", customer: checkout === null || checkout === void 0 ? void 0 : checkout.customer, cancelUrl: cancelUrl, checkoutId: checkoutId, clientSecret: clientSecret, onSuccess: onSuccess, onError: onError, exchangeRate: (_b = checkout === null || checkout === void 0 ? void 0 : checkout.exchangeRate) !== null && _b !== void 0 ? _b : 1, publicKey: publicKey, paymentSecret: paymentSecret, paymentComponentKey: paymentComponentKey })) }), jsxs("div", { className: "order-first h-max px-4 md:order-last md:col-span-3 md:px-8", children: [jsx(Toaster, {}), loading ? (jsx(CheckoutSummaryLoading, {})) : (jsx(CheckoutSummary, { currency: (_c = checkout === null || checkout === void 0 ? void 0 : checkout.currency) !== null && _c !== void 0 ? _c : "", lineItems: (_d = checkout === null || checkout === void 0 ? void 0 : checkout.lineItems) !== null && _d !== void 0 ? _d : [], shipping: checkout === null || checkout === void 0 ? void 0 : checkout.shipping, tax: checkout === null || checkout === void 0 ? void 0 : checkout.tax, onCancel: onCancel, exchangeRate: (_e = checkout === null || checkout === void 0 ? void 0 : checkout.exchangeRate) !== null && _e !== void 0 ? _e : 1, applyDiscountCode: applyDiscountCode, appliedDiscounts: (_f = checkout === null || checkout === void 0 ? void 0 : checkout.appliedDiscounts) !== null && _f !== void 0 ? _f : [], removeDiscount: removeDiscount }))] })] }) }));
|
|
35905
35716
|
}
|
|
35906
35717
|
const CheckoutEmbed = memo(CheckoutEmbedComponent);
|
|
35907
35718
|
|