@rovela-ai/sdk 0.1.18 → 0.1.20
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/admin/api/auth.js +5 -11
- package/dist/admin/api/auth.js.map +1 -1
- package/dist/admin/api/categories.js +43 -50
- package/dist/admin/api/categories.js.map +1 -1
- package/dist/admin/api/check.js +6 -9
- package/dist/admin/api/check.js.map +1 -1
- package/dist/admin/api/customers.js +17 -21
- package/dist/admin/api/customers.js.map +1 -1
- package/dist/admin/api/index.js +10 -38
- package/dist/admin/api/index.js.map +1 -1
- package/dist/admin/api/orders.js +30 -35
- package/dist/admin/api/orders.js.map +1 -1
- package/dist/admin/api/products.js +56 -66
- package/dist/admin/api/products.js.map +1 -1
- package/dist/admin/api/refund.js +26 -29
- package/dist/admin/api/refund.js.map +1 -1
- package/dist/admin/api/settings.js +17 -21
- package/dist/admin/api/settings.js.map +1 -1
- package/dist/admin/api/setup.js +17 -20
- package/dist/admin/api/setup.js.map +1 -1
- package/dist/admin/api/stats.js +14 -17
- package/dist/admin/api/stats.js.map +1 -1
- package/dist/admin/components/AdminGuard.js +13 -17
- package/dist/admin/components/AdminGuard.js.map +1 -1
- package/dist/admin/components/AdminHeader.js +8 -11
- package/dist/admin/components/AdminHeader.js.map +1 -1
- package/dist/admin/components/AdminLayout.js +5 -8
- package/dist/admin/components/AdminLayout.js.map +1 -1
- package/dist/admin/components/AdminLoginForm.js +11 -14
- package/dist/admin/components/AdminLoginForm.js.map +1 -1
- package/dist/admin/components/AdminNav.d.ts.map +1 -1
- package/dist/admin/components/AdminNav.js +16 -14
- package/dist/admin/components/AdminNav.js.map +1 -1
- package/dist/admin/components/AdminSetupForm.js +11 -14
- package/dist/admin/components/AdminSetupForm.js.map +1 -1
- package/dist/admin/components/CategoryForm.d.ts +30 -0
- package/dist/admin/components/CategoryForm.d.ts.map +1 -0
- package/dist/admin/components/CategoryForm.js +153 -0
- package/dist/admin/components/CategoryForm.js.map +1 -0
- package/dist/admin/components/CategorySelect.d.ts +32 -0
- package/dist/admin/components/CategorySelect.d.ts.map +1 -0
- package/dist/admin/components/CategorySelect.js +148 -0
- package/dist/admin/components/CategorySelect.js.map +1 -0
- package/dist/admin/components/InventoryEditor.js +16 -19
- package/dist/admin/components/InventoryEditor.js.map +1 -1
- package/dist/admin/components/LowStockAlert.js +6 -9
- package/dist/admin/components/LowStockAlert.js.map +1 -1
- package/dist/admin/components/OrderDetails.js +15 -18
- package/dist/admin/components/OrderDetails.js.map +1 -1
- package/dist/admin/components/OrderTable.js +13 -16
- package/dist/admin/components/OrderTable.js.map +1 -1
- package/dist/admin/components/ProductForm.d.ts +2 -2
- package/dist/admin/components/ProductForm.d.ts.map +1 -1
- package/dist/admin/components/ProductForm.js +140 -27
- package/dist/admin/components/ProductForm.js.map +1 -1
- package/dist/admin/components/ProductTable.js +15 -18
- package/dist/admin/components/ProductTable.js.map +1 -1
- package/dist/admin/components/RecentOrders.js +6 -9
- package/dist/admin/components/RecentOrders.js.map +1 -1
- package/dist/admin/components/RefundDialog.js +12 -15
- package/dist/admin/components/RefundDialog.js.map +1 -1
- package/dist/admin/components/SEOPreview.d.ts +32 -0
- package/dist/admin/components/SEOPreview.d.ts.map +1 -0
- package/dist/admin/components/SEOPreview.js +30 -0
- package/dist/admin/components/SEOPreview.js.map +1 -0
- package/dist/admin/components/StatsCards.js +7 -10
- package/dist/admin/components/StatsCards.js.map +1 -1
- package/dist/admin/components/StoreSettings.js +10 -13
- package/dist/admin/components/StoreSettings.js.map +1 -1
- package/dist/admin/components/TagInput.d.ts +29 -0
- package/dist/admin/components/TagInput.d.ts.map +1 -0
- package/dist/admin/components/TagInput.js +73 -0
- package/dist/admin/components/TagInput.js.map +1 -0
- package/dist/admin/components/VariantManager.d.ts +42 -0
- package/dist/admin/components/VariantManager.d.ts.map +1 -0
- package/dist/admin/components/VariantManager.js +175 -0
- package/dist/admin/components/VariantManager.js.map +1 -0
- package/dist/admin/components/index.d.ts +5 -0
- package/dist/admin/components/index.d.ts.map +1 -1
- package/dist/admin/components/index.js +27 -35
- package/dist/admin/components/index.js.map +1 -1
- package/dist/admin/config.js +12 -54
- package/dist/admin/config.js.map +1 -1
- package/dist/admin/hooks/index.d.ts +2 -0
- package/dist/admin/hooks/index.d.ts.map +1 -1
- package/dist/admin/hooks/index.js +5 -11
- package/dist/admin/hooks/index.js.map +1 -1
- package/dist/admin/hooks/useAdminAuth.js +9 -12
- package/dist/admin/hooks/useAdminAuth.js.map +1 -1
- package/dist/admin/hooks/useAdminCategories.d.ts +36 -0
- package/dist/admin/hooks/useAdminCategories.d.ts.map +1 -0
- package/dist/admin/hooks/useAdminCategories.js +217 -0
- package/dist/admin/hooks/useAdminCategories.js.map +1 -0
- package/dist/admin/hooks/useAdminOrders.js +11 -14
- package/dist/admin/hooks/useAdminOrders.js.map +1 -1
- package/dist/admin/hooks/useAdminProducts.js +13 -16
- package/dist/admin/hooks/useAdminProducts.js.map +1 -1
- package/dist/admin/hooks/useAdminStats.js +11 -14
- package/dist/admin/hooks/useAdminStats.js.map +1 -1
- package/dist/admin/index.d.ts +3 -2
- package/dist/admin/index.d.ts.map +1 -1
- package/dist/admin/index.js +17 -66
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/server/admin-service.js +39 -83
- package/dist/admin/server/admin-service.js.map +1 -1
- package/dist/admin/server/index.js +3 -13
- package/dist/admin/server/index.js.map +1 -1
- package/dist/admin/types.js +1 -2
- package/dist/admin/types.js.map +1 -1
- package/dist/auth/api/auth.js +6 -14
- package/dist/auth/api/auth.js.map +1 -1
- package/dist/auth/api/forgot-password.js +8 -11
- package/dist/auth/api/forgot-password.js.map +1 -1
- package/dist/auth/api/index.js +6 -18
- package/dist/auth/api/index.js.map +1 -1
- package/dist/auth/api/register.js +17 -20
- package/dist/auth/api/register.js.map +1 -1
- package/dist/auth/api/resend-verification.js +9 -12
- package/dist/auth/api/resend-verification.js.map +1 -1
- package/dist/auth/api/reset-password.js +18 -22
- package/dist/auth/api/reset-password.js.map +1 -1
- package/dist/auth/api/verify-email.js +14 -18
- package/dist/auth/api/verify-email.js.map +1 -1
- package/dist/auth/components/AuthGuard.js +13 -17
- package/dist/auth/components/AuthGuard.js.map +1 -1
- package/dist/auth/components/ForgotPasswordForm.js +11 -14
- package/dist/auth/components/ForgotPasswordForm.js.map +1 -1
- package/dist/auth/components/ResetPasswordForm.js +18 -21
- package/dist/auth/components/ResetPasswordForm.js.map +1 -1
- package/dist/auth/components/SignInForm.js +13 -16
- package/dist/auth/components/SignInForm.js.map +1 -1
- package/dist/auth/components/SignUpForm.js +15 -18
- package/dist/auth/components/SignUpForm.js.map +1 -1
- package/dist/auth/components/UserMenu.js +13 -16
- package/dist/auth/components/UserMenu.js.map +1 -1
- package/dist/auth/components/VerifyEmailNotice.js +10 -13
- package/dist/auth/components/VerifyEmailNotice.js.map +1 -1
- package/dist/auth/components/index.js +7 -18
- package/dist/auth/components/index.js.map +1 -1
- package/dist/auth/config.js +9 -49
- package/dist/auth/config.js.map +1 -1
- package/dist/auth/hooks/index.js +1 -5
- package/dist/auth/hooks/index.js.map +1 -1
- package/dist/auth/hooks/useAuth.js +14 -17
- package/dist/auth/hooks/useAuth.js.map +1 -1
- package/dist/auth/index.js +15 -37
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/server/customer-service.js +39 -83
- package/dist/auth/server/customer-service.js.map +1 -1
- package/dist/auth/server/email-sender.js +11 -17
- package/dist/auth/server/email-sender.js.map +1 -1
- package/dist/auth/server/index.js +5 -36
- package/dist/auth/server/index.js.map +1 -1
- package/dist/auth/server/password-reset-service.js +30 -70
- package/dist/auth/server/password-reset-service.js.map +1 -1
- package/dist/auth/server/password.js +9 -18
- package/dist/auth/server/password.js.map +1 -1
- package/dist/auth/server/verification-service.js +35 -76
- package/dist/auth/server/verification-service.js.map +1 -1
- package/dist/auth/types.js +1 -2
- package/dist/auth/types.js.map +1 -1
- package/dist/cart/CartProvider.js +13 -17
- package/dist/cart/CartProvider.js.map +1 -1
- package/dist/cart/components/AddToCartButton.js +16 -19
- package/dist/cart/components/AddToCartButton.js.map +1 -1
- package/dist/cart/components/CartDrawer.js +17 -23
- package/dist/cart/components/CartDrawer.js.map +1 -1
- package/dist/cart/components/CartIcon.js +9 -12
- package/dist/cart/components/CartIcon.js.map +1 -1
- package/dist/cart/components/CartItem.js +7 -13
- package/dist/cart/components/CartItem.js.map +1 -1
- package/dist/cart/components/CartSummary.js +12 -15
- package/dist/cart/components/CartSummary.js.map +1 -1
- package/dist/cart/components/QuantitySelector.js +9 -12
- package/dist/cart/components/QuantitySelector.js.map +1 -1
- package/dist/cart/components/index.js +6 -15
- package/dist/cart/components/index.js.map +1 -1
- package/dist/cart/index.js +3 -17
- package/dist/cart/index.js.map +1 -1
- package/dist/cart/store.js +8 -13
- package/dist/cart/store.js.map +1 -1
- package/dist/checkout/api/checkout.js +12 -15
- package/dist/checkout/api/checkout.js.map +1 -1
- package/dist/checkout/api/index.js +2 -7
- package/dist/checkout/api/index.js.map +1 -1
- package/dist/checkout/api/webhook.js +8 -11
- package/dist/checkout/api/webhook.js.map +1 -1
- package/dist/checkout/components/CheckoutButton.js +8 -11
- package/dist/checkout/components/CheckoutButton.js.map +1 -1
- package/dist/checkout/components/CheckoutSuccess.js +11 -14
- package/dist/checkout/components/CheckoutSuccess.js.map +1 -1
- package/dist/checkout/components/OrderSummary.js +8 -11
- package/dist/checkout/components/OrderSummary.js.map +1 -1
- package/dist/checkout/components/ShippingForm.js +14 -17
- package/dist/checkout/components/ShippingForm.js.map +1 -1
- package/dist/checkout/components/index.js +4 -11
- package/dist/checkout/components/index.js.map +1 -1
- package/dist/checkout/hooks/index.js +1 -6
- package/dist/checkout/hooks/index.js.map +1 -1
- package/dist/checkout/hooks/useCheckout.js +10 -19
- package/dist/checkout/hooks/useCheckout.js.map +1 -1
- package/dist/checkout/index.js +7 -28
- package/dist/checkout/index.js.map +1 -1
- package/dist/checkout/server/create-checkout-session.js +11 -16
- package/dist/checkout/server/create-checkout-session.js.map +1 -1
- package/dist/checkout/server/handle-webhook.js +21 -24
- package/dist/checkout/server/handle-webhook.js.map +1 -1
- package/dist/checkout/server/index.js +3 -13
- package/dist/checkout/server/index.js.map +1 -1
- package/dist/checkout/server/order-service.js +11 -16
- package/dist/checkout/server/order-service.js.map +1 -1
- package/dist/checkout/stripe/client.js +13 -29
- package/dist/checkout/stripe/client.js.map +1 -1
- package/dist/checkout/stripe/index.js +1 -15
- package/dist/checkout/stripe/index.js.map +1 -1
- package/dist/checkout/types.js +1 -2
- package/dist/checkout/types.js.map +1 -1
- package/dist/core/StoreSettingsProvider.d.ts +104 -0
- package/dist/core/StoreSettingsProvider.d.ts.map +1 -0
- package/dist/core/StoreSettingsProvider.js +195 -0
- package/dist/core/StoreSettingsProvider.js.map +1 -0
- package/dist/core/api/index.d.ts +7 -0
- package/dist/core/api/index.d.ts.map +1 -0
- package/dist/core/api/index.js +7 -0
- package/dist/core/api/index.js.map +1 -0
- package/dist/core/api/settings.d.ts +42 -0
- package/dist/core/api/settings.d.ts.map +1 -0
- package/dist/core/api/settings.js +74 -0
- package/dist/core/api/settings.js.map +1 -0
- package/dist/core/config.js +12 -57
- package/dist/core/config.js.map +1 -1
- package/dist/core/db/client.js +16 -62
- package/dist/core/db/client.js.map +1 -1
- package/dist/core/db/index.js +14 -93
- package/dist/core/db/index.js.map +1 -1
- package/dist/core/db/queries.d.ts +6 -6
- package/dist/core/db/queries.js +207 -284
- package/dist/core/db/queries.js.map +1 -1
- package/dist/core/db/schema.js +179 -182
- package/dist/core/db/schema.js.map +1 -1
- package/dist/core/index.d.ts +2 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +14 -42
- package/dist/core/index.js.map +1 -1
- package/dist/core/server/index.js +16 -68
- package/dist/core/server/index.js.map +1 -1
- package/dist/core/types.js +1 -2
- package/dist/core/types.js.map +1 -1
- package/dist/core/utils.js +26 -51
- package/dist/core/utils.js.map +1 -1
- package/dist/emails/config.js +13 -21
- package/dist/emails/config.js.map +1 -1
- package/dist/emails/index.js +10 -72
- package/dist/emails/index.js.map +1 -1
- package/dist/emails/send/auth.js +26 -34
- package/dist/emails/send/auth.js.map +1 -1
- package/dist/emails/send/index.js +2 -21
- package/dist/emails/send/index.js.map +1 -1
- package/dist/emails/send/orders.js +38 -50
- package/dist/emails/send/orders.js.map +1 -1
- package/dist/emails/sender.js +7 -12
- package/dist/emails/sender.js.map +1 -1
- package/dist/emails/templates/base.js +37 -53
- package/dist/emails/templates/base.js.map +1 -1
- package/dist/emails/templates/email-verification.js +12 -16
- package/dist/emails/templates/email-verification.js.map +1 -1
- package/dist/emails/templates/index.js +9 -43
- package/dist/emails/templates/index.js.map +1 -1
- package/dist/emails/templates/order-cancelled.js +18 -22
- package/dist/emails/templates/order-cancelled.js.map +1 -1
- package/dist/emails/templates/order-confirmation.js +30 -34
- package/dist/emails/templates/order-confirmation.js.map +1 -1
- package/dist/emails/templates/order-delivered.js +20 -24
- package/dist/emails/templates/order-delivered.js.map +1 -1
- package/dist/emails/templates/order-shipped.js +19 -23
- package/dist/emails/templates/order-shipped.js.map +1 -1
- package/dist/emails/templates/password-reset.js +12 -16
- package/dist/emails/templates/password-reset.js.map +1 -1
- package/dist/emails/templates/refund-processed.js +17 -21
- package/dist/emails/templates/refund-processed.js.map +1 -1
- package/dist/emails/templates/welcome.js +11 -15
- package/dist/emails/templates/welcome.js.map +1 -1
- package/dist/emails/types.js +1 -2
- package/dist/emails/types.js.map +1 -1
- package/dist/emails/utils.js +9 -20
- package/dist/emails/utils.js.map +1 -1
- package/dist/index.js +24 -176
- package/dist/index.js.map +1 -1
- package/dist/products/api/categories.js +7 -10
- package/dist/products/api/categories.js.map +1 -1
- package/dist/products/api/index.js +3 -9
- package/dist/products/api/index.js.map +1 -1
- package/dist/products/api/product.js +10 -13
- package/dist/products/api/product.js.map +1 -1
- package/dist/products/api/products.js +8 -11
- package/dist/products/api/products.js.map +1 -1
- package/dist/products/components/CategoryNav.js +20 -26
- package/dist/products/components/CategoryNav.js.map +1 -1
- package/dist/products/components/ProductBreadcrumb.js +7 -13
- package/dist/products/components/ProductBreadcrumb.js.map +1 -1
- package/dist/products/components/ProductCard.js +6 -12
- package/dist/products/components/ProductCard.js.map +1 -1
- package/dist/products/components/ProductDetails.js +14 -17
- package/dist/products/components/ProductDetails.js.map +1 -1
- package/dist/products/components/ProductFilters.js +15 -18
- package/dist/products/components/ProductFilters.js.map +1 -1
- package/dist/products/components/ProductGallery.js +17 -23
- package/dist/products/components/ProductGallery.js.map +1 -1
- package/dist/products/components/ProductGrid.js +10 -13
- package/dist/products/components/ProductGrid.js.map +1 -1
- package/dist/products/components/ProductSearch.js +14 -17
- package/dist/products/components/ProductSearch.js.map +1 -1
- package/dist/products/components/ProductSort.js +8 -11
- package/dist/products/components/ProductSort.js.map +1 -1
- package/dist/products/components/VariantSelector.js +16 -19
- package/dist/products/components/VariantSelector.js.map +1 -1
- package/dist/products/components/index.js +10 -23
- package/dist/products/components/index.js.map +1 -1
- package/dist/products/hooks/index.js +4 -11
- package/dist/products/hooks/index.js.map +1 -1
- package/dist/products/hooks/useCategories.js +12 -15
- package/dist/products/hooks/useCategories.js.map +1 -1
- package/dist/products/hooks/useProduct.js +9 -12
- package/dist/products/hooks/useProduct.js.map +1 -1
- package/dist/products/hooks/useProductAttributes.js +10 -13
- package/dist/products/hooks/useProductAttributes.js.map +1 -1
- package/dist/products/hooks/useProducts.js +15 -18
- package/dist/products/hooks/useProducts.js.map +1 -1
- package/dist/products/index.js +6 -23
- package/dist/products/index.js.map +1 -1
- package/dist/theme/ThemeProvider.js +12 -14
- package/dist/theme/ThemeProvider.js.map +1 -1
- package/dist/theme/colors.js +3 -8
- package/dist/theme/colors.js.map +1 -1
- package/dist/theme/defaults.js +27 -30
- package/dist/theme/defaults.js.map +1 -1
- package/dist/theme/fonts.js +12 -18
- package/dist/theme/fonts.js.map +1 -1
- package/dist/theme/generator.js +63 -69
- package/dist/theme/generator.js.map +1 -1
- package/dist/theme/hooks.js +11 -16
- package/dist/theme/hooks.js.map +1 -1
- package/dist/theme/index.js +6 -42
- package/dist/theme/index.js.map +1 -1
- package/package.json +35 -30
|
@@ -1,15 +1,12 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
'use client';
|
|
3
|
-
|
|
4
|
-
exports.ProductTable = ProductTable;
|
|
5
|
-
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
6
3
|
/**
|
|
7
4
|
* @rovela/sdk/admin/components/ProductTable
|
|
8
5
|
*
|
|
9
6
|
* Products data table with filtering, sorting, and pagination.
|
|
10
7
|
*/
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
import { useState, useEffect, useCallback } from 'react';
|
|
9
|
+
import { useAdminProducts } from '../hooks/useAdminProducts';
|
|
13
10
|
// =============================================================================
|
|
14
11
|
// Status Badge
|
|
15
12
|
// =============================================================================
|
|
@@ -19,7 +16,7 @@ function StatusBadge({ status }) {
|
|
|
19
16
|
active: 'bg-green-100 text-green-800',
|
|
20
17
|
archived: 'bg-red-100 text-red-800',
|
|
21
18
|
};
|
|
22
|
-
return ((
|
|
19
|
+
return (_jsx("span", { className: `inline-flex rounded-full px-2 py-1 text-xs font-medium ${statusStyles[status] || 'bg-gray-100 text-gray-800'}`, children: status.charAt(0).toUpperCase() + status.slice(1) }));
|
|
23
20
|
}
|
|
24
21
|
// =============================================================================
|
|
25
22
|
// Component
|
|
@@ -34,13 +31,13 @@ function StatusBadge({ status }) {
|
|
|
34
31
|
* />
|
|
35
32
|
* ```
|
|
36
33
|
*/
|
|
37
|
-
function ProductTable({ initialSearch, initialCategory, initialStatus, pageSize = 20, onProductClick, className = '', }) {
|
|
38
|
-
const { products, total, page, isLoading, fetchProducts, deleteProduct } =
|
|
39
|
-
const [search, setSearch] =
|
|
40
|
-
const [status, setStatus] =
|
|
41
|
-
const [sort, setSort] =
|
|
34
|
+
export function ProductTable({ initialSearch, initialCategory, initialStatus, pageSize = 20, onProductClick, className = '', }) {
|
|
35
|
+
const { products, total, page, isLoading, fetchProducts, deleteProduct } = useAdminProducts();
|
|
36
|
+
const [search, setSearch] = useState(initialSearch || '');
|
|
37
|
+
const [status, setStatus] = useState(initialStatus || '');
|
|
38
|
+
const [sort, setSort] = useState('newest');
|
|
42
39
|
// Fetch products on filter change
|
|
43
|
-
|
|
40
|
+
useEffect(() => {
|
|
44
41
|
fetchProducts({
|
|
45
42
|
search: search || undefined,
|
|
46
43
|
status: status || undefined,
|
|
@@ -49,7 +46,7 @@ function ProductTable({ initialSearch, initialCategory, initialStatus, pageSize
|
|
|
49
46
|
limit: pageSize,
|
|
50
47
|
});
|
|
51
48
|
}, [search, status, sort, pageSize, fetchProducts]);
|
|
52
|
-
const handlePageChange =
|
|
49
|
+
const handlePageChange = useCallback((newPage) => {
|
|
53
50
|
fetchProducts({
|
|
54
51
|
search: search || undefined,
|
|
55
52
|
status: status || undefined,
|
|
@@ -58,7 +55,7 @@ function ProductTable({ initialSearch, initialCategory, initialStatus, pageSize
|
|
|
58
55
|
limit: pageSize,
|
|
59
56
|
});
|
|
60
57
|
}, [search, status, sort, pageSize, fetchProducts]);
|
|
61
|
-
const handleDelete =
|
|
58
|
+
const handleDelete = useCallback(async (id, name) => {
|
|
62
59
|
if (!confirm(`Are you sure you want to delete "${name}"?`))
|
|
63
60
|
return;
|
|
64
61
|
const success = await deleteProduct(id);
|
|
@@ -73,9 +70,9 @@ function ProductTable({ initialSearch, initialCategory, initialStatus, pageSize
|
|
|
73
70
|
}).format(parseFloat(value));
|
|
74
71
|
};
|
|
75
72
|
const totalPages = Math.ceil(total / pageSize);
|
|
76
|
-
return ((
|
|
73
|
+
return (_jsxs("div", { className: `space-y-4 ${className}`, children: [_jsxs("div", { className: "flex flex-wrap gap-4", children: [_jsx("div", { className: "flex-1", children: _jsx("input", { type: "text", value: search, onChange: (e) => setSearch(e.target.value), placeholder: "Search products...", className: "w-full max-w-xs rounded-md border border-input bg-background px-3 py-2 text-sm placeholder:text-muted-foreground focus:border-primary focus:outline-none focus:ring-1 focus:ring-primary" }) }), _jsxs("select", { value: status, onChange: (e) => setStatus(e.target.value), className: "rounded-md border border-input bg-background px-3 py-2 text-sm focus:border-primary focus:outline-none focus:ring-1 focus:ring-primary", children: [_jsx("option", { value: "", children: "All Status" }), _jsx("option", { value: "active", children: "Active" }), _jsx("option", { value: "draft", children: "Draft" }), _jsx("option", { value: "archived", children: "Archived" })] }), _jsxs("select", { value: sort, onChange: (e) => setSort(e.target.value), className: "rounded-md border border-input bg-background px-3 py-2 text-sm focus:border-primary focus:outline-none focus:ring-1 focus:ring-primary", children: [_jsx("option", { value: "newest", children: "Newest" }), _jsx("option", { value: "name", children: "Name" }), _jsx("option", { value: "price-asc", children: "Price: Low to High" }), _jsx("option", { value: "price-desc", children: "Price: High to Low" })] }), _jsx("a", { href: "/admin/products/new", className: "rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground hover:bg-primary/90", children: "Add Product" })] }), _jsxs("div", { className: "rounded-lg border border-border bg-card overflow-hidden", children: [_jsx("div", { className: "overflow-x-auto", children: _jsxs("table", { className: "w-full", children: [_jsx("thead", { children: _jsxs("tr", { className: "border-b border-border bg-muted/50 text-left text-xs font-medium uppercase text-muted-foreground", children: [_jsx("th", { className: "px-6 py-3", children: "Product" }), _jsx("th", { className: "px-6 py-3", children: "Status" }), _jsx("th", { className: "px-6 py-3", children: "Price" }), _jsx("th", { className: "px-6 py-3", children: "Inventory" }), _jsx("th", { className: "px-6 py-3", children: "Actions" })] }) }), _jsx("tbody", { className: "divide-y divide-border", children: isLoading ? ([...Array(5)].map((_, i) => (_jsxs("tr", { children: [_jsx("td", { className: "px-6 py-4", children: _jsxs("div", { className: "flex items-center gap-3", children: [_jsx("div", { className: "h-10 w-10 animate-pulse rounded bg-muted" }), _jsx("div", { className: "h-4 w-32 animate-pulse rounded bg-muted" })] }) }), _jsx("td", { className: "px-6 py-4", children: _jsx("div", { className: "h-6 w-16 animate-pulse rounded bg-muted" }) }), _jsx("td", { className: "px-6 py-4", children: _jsx("div", { className: "h-4 w-16 animate-pulse rounded bg-muted" }) }), _jsx("td", { className: "px-6 py-4", children: _jsx("div", { className: "h-4 w-12 animate-pulse rounded bg-muted" }) }), _jsx("td", { className: "px-6 py-4", children: _jsx("div", { className: "h-4 w-20 animate-pulse rounded bg-muted" }) })] }, i)))) : products.length === 0 ? (_jsx("tr", { children: _jsx("td", { colSpan: 5, className: "px-6 py-12 text-center text-muted-foreground", children: "No products found" }) })) : (products.map((product) => {
|
|
77
74
|
const p = product;
|
|
78
|
-
return ((
|
|
79
|
-
})) })] }) }), totalPages > 1 && ((
|
|
75
|
+
return (_jsxs("tr", { className: "hover:bg-muted/50", children: [_jsx("td", { className: "px-6 py-4", children: _jsxs("div", { className: "flex items-center gap-3", children: [p.images?.[0] ? (_jsx("img", { src: p.images[0], alt: p.name, className: "h-10 w-10 rounded object-cover" })) : (_jsx("div", { className: "flex h-10 w-10 items-center justify-center rounded bg-muted text-muted-foreground", children: _jsx("svg", { className: "h-5 w-5", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 1.5, d: "M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z" }) }) })), _jsx("button", { onClick: () => onProductClick?.(p.id), className: "font-medium text-foreground hover:text-primary", children: p.name })] }) }), _jsx("td", { className: "px-6 py-4", children: _jsx(StatusBadge, { status: p.status }) }), _jsx("td", { className: "px-6 py-4 text-sm text-foreground", children: formatCurrency(p.price) }), _jsx("td", { className: "px-6 py-4 text-sm text-muted-foreground", children: "\u2014" }), _jsx("td", { className: "px-6 py-4", children: _jsxs("div", { className: "flex items-center gap-2", children: [_jsx("a", { href: `/admin/products/${p.id}`, className: "text-sm text-primary hover:underline", children: "Edit" }), _jsx("button", { onClick: () => handleDelete(p.id, p.name), className: "text-sm text-destructive hover:underline", children: "Delete" })] }) })] }, p.id));
|
|
76
|
+
})) })] }) }), totalPages > 1 && (_jsxs("div", { className: "flex items-center justify-between border-t border-border px-6 py-3", children: [_jsxs("p", { className: "text-sm text-muted-foreground", children: ["Showing ", (page - 1) * pageSize + 1, " to ", Math.min(page * pageSize, total), " of ", total] }), _jsxs("div", { className: "flex gap-2", children: [_jsx("button", { onClick: () => handlePageChange(page - 1), disabled: page === 1, className: "rounded-md border border-border px-3 py-1 text-sm disabled:opacity-50", children: "Previous" }), _jsx("button", { onClick: () => handlePageChange(page + 1), disabled: page >= totalPages, className: "rounded-md border border-border px-3 py-1 text-sm disabled:opacity-50", children: "Next" })] })] }))] })] }));
|
|
80
77
|
}
|
|
81
78
|
//# sourceMappingURL=ProductTable.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProductTable.js","sourceRoot":"","sources":["../../../src/admin/components/ProductTable.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ProductTable.js","sourceRoot":"","sources":["../../../src/admin/components/ProductTable.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,11 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
'use client';
|
|
3
|
-
|
|
4
|
-
exports.RecentOrders = RecentOrders;
|
|
5
|
-
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
6
3
|
/**
|
|
7
4
|
* @rovela/sdk/admin/components/RecentOrders
|
|
8
5
|
*
|
|
9
6
|
* Recent orders table for dashboard.
|
|
10
7
|
*/
|
|
11
|
-
|
|
8
|
+
import { useAdminStats } from '../hooks/useAdminStats';
|
|
12
9
|
// =============================================================================
|
|
13
10
|
// Status Badge
|
|
14
11
|
// =============================================================================
|
|
@@ -21,7 +18,7 @@ function StatusBadge({ status }) {
|
|
|
21
18
|
cancelled: 'bg-red-100 text-red-800',
|
|
22
19
|
refunded: 'bg-gray-100 text-gray-800',
|
|
23
20
|
};
|
|
24
|
-
return ((
|
|
21
|
+
return (_jsx("span", { className: `inline-flex rounded-full px-2 py-1 text-xs font-medium ${statusStyles[status] || 'bg-gray-100 text-gray-800'}`, children: status.charAt(0).toUpperCase() + status.slice(1) }));
|
|
25
22
|
}
|
|
26
23
|
// =============================================================================
|
|
27
24
|
// Component
|
|
@@ -34,8 +31,8 @@ function StatusBadge({ status }) {
|
|
|
34
31
|
* <RecentOrders limit={5} viewAllHref="/admin/orders" />
|
|
35
32
|
* ```
|
|
36
33
|
*/
|
|
37
|
-
function RecentOrders({ limit = 5, viewAllHref = '/admin/orders', className = '', }) {
|
|
38
|
-
const { recentOrders, isLoading } =
|
|
34
|
+
export function RecentOrders({ limit = 5, viewAllHref = '/admin/orders', className = '', }) {
|
|
35
|
+
const { recentOrders, isLoading } = useAdminStats({
|
|
39
36
|
recentOrdersLimit: limit,
|
|
40
37
|
});
|
|
41
38
|
const formatDate = (dateString) => {
|
|
@@ -53,6 +50,6 @@ function RecentOrders({ limit = 5, viewAllHref = '/admin/orders', className = ''
|
|
|
53
50
|
currency: 'USD',
|
|
54
51
|
}).format(parseFloat(value));
|
|
55
52
|
};
|
|
56
|
-
return ((
|
|
53
|
+
return (_jsxs("div", { className: `rounded-lg border border-border bg-card ${className}`, children: [_jsxs("div", { className: "flex items-center justify-between border-b border-border px-6 py-4", children: [_jsx("h3", { className: "text-lg font-medium text-foreground", children: "Recent Orders" }), _jsx("a", { href: viewAllHref, className: "text-sm text-primary hover:underline", children: "View all" })] }), _jsx("div", { className: "overflow-x-auto", children: isLoading ? (_jsx("div", { className: "p-6", children: _jsx("div", { className: "space-y-4", children: [...Array(limit)].map((_, i) => (_jsxs("div", { className: "flex items-center gap-4", children: [_jsx("div", { className: "h-4 w-24 animate-pulse rounded bg-muted" }), _jsx("div", { className: "h-4 w-32 animate-pulse rounded bg-muted" }), _jsx("div", { className: "h-4 w-16 animate-pulse rounded bg-muted" }), _jsx("div", { className: "h-4 w-20 animate-pulse rounded bg-muted" })] }, i))) }) })) : recentOrders.length === 0 ? (_jsx("div", { className: "py-12 text-center", children: _jsx("p", { className: "text-muted-foreground", children: "No orders yet" }) })) : (_jsxs("table", { className: "w-full", children: [_jsx("thead", { children: _jsxs("tr", { className: "border-b border-border bg-muted/50 text-left text-xs font-medium uppercase text-muted-foreground", children: [_jsx("th", { className: "px-6 py-3", children: "Order" }), _jsx("th", { className: "px-6 py-3", children: "Customer" }), _jsx("th", { className: "px-6 py-3", children: "Status" }), _jsx("th", { className: "px-6 py-3", children: "Total" }), _jsx("th", { className: "px-6 py-3", children: "Date" })] }) }), _jsx("tbody", { className: "divide-y divide-border", children: recentOrders.map((order) => (_jsxs("tr", { className: "hover:bg-muted/50", children: [_jsx("td", { className: "whitespace-nowrap px-6 py-4", children: _jsxs("a", { href: `/admin/orders/${order.id}`, className: "font-medium text-primary hover:underline", children: ["#", order.id.slice(-8).toUpperCase()] }) }), _jsx("td", { className: "whitespace-nowrap px-6 py-4 text-sm text-foreground", children: order.email }), _jsx("td", { className: "whitespace-nowrap px-6 py-4", children: _jsx(StatusBadge, { status: order.status }) }), _jsx("td", { className: "whitespace-nowrap px-6 py-4 text-sm font-medium text-foreground", children: formatCurrency(order.total) }), _jsx("td", { className: "whitespace-nowrap px-6 py-4 text-sm text-muted-foreground", children: formatDate(order.createdAt) })] }, order.id))) })] })) })] }));
|
|
57
54
|
}
|
|
58
55
|
//# sourceMappingURL=RecentOrders.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RecentOrders.js","sourceRoot":"","sources":["../../../src/admin/components/RecentOrders.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"RecentOrders.js","sourceRoot":"","sources":["../../../src/admin/components/RecentOrders.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,12 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
'use client';
|
|
3
|
-
|
|
4
|
-
exports.RefundDialog = RefundDialog;
|
|
5
|
-
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
6
3
|
/**
|
|
7
4
|
* @rovela/sdk/admin/components/RefundDialog
|
|
8
5
|
*
|
|
9
6
|
* Refund dialog with reason and confirmation.
|
|
10
7
|
*/
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
import { useState, useCallback, useEffect } from 'react';
|
|
9
|
+
import { useAdminOrders } from '../hooks/useAdminOrders';
|
|
13
10
|
// =============================================================================
|
|
14
11
|
// Component
|
|
15
12
|
// =============================================================================
|
|
@@ -27,20 +24,20 @@ const useAdminOrders_1 = require("../hooks/useAdminOrders");
|
|
|
27
24
|
* />
|
|
28
25
|
* ```
|
|
29
26
|
*/
|
|
30
|
-
function RefundDialog({ orderId, orderTotal, isOpen, onClose, onSuccess, }) {
|
|
31
|
-
const { processRefund } =
|
|
32
|
-
const [reason, setReason] =
|
|
33
|
-
const [error, setError] =
|
|
34
|
-
const [isProcessing, setIsProcessing] =
|
|
27
|
+
export function RefundDialog({ orderId, orderTotal, isOpen, onClose, onSuccess, }) {
|
|
28
|
+
const { processRefund } = useAdminOrders();
|
|
29
|
+
const [reason, setReason] = useState('');
|
|
30
|
+
const [error, setError] = useState(null);
|
|
31
|
+
const [isProcessing, setIsProcessing] = useState(false);
|
|
35
32
|
// Reset state when dialog opens/closes
|
|
36
|
-
|
|
33
|
+
useEffect(() => {
|
|
37
34
|
if (isOpen) {
|
|
38
35
|
setReason('');
|
|
39
36
|
setError(null);
|
|
40
37
|
}
|
|
41
38
|
}, [isOpen]);
|
|
42
39
|
// Handle escape key
|
|
43
|
-
|
|
40
|
+
useEffect(() => {
|
|
44
41
|
const handleEscape = (e) => {
|
|
45
42
|
if (e.key === 'Escape' && isOpen && !isProcessing) {
|
|
46
43
|
onClose();
|
|
@@ -49,7 +46,7 @@ function RefundDialog({ orderId, orderTotal, isOpen, onClose, onSuccess, }) {
|
|
|
49
46
|
window.addEventListener('keydown', handleEscape);
|
|
50
47
|
return () => window.removeEventListener('keydown', handleEscape);
|
|
51
48
|
}, [isOpen, isProcessing, onClose]);
|
|
52
|
-
const handleSubmit =
|
|
49
|
+
const handleSubmit = useCallback(async (e) => {
|
|
53
50
|
e.preventDefault();
|
|
54
51
|
setError(null);
|
|
55
52
|
if (!reason.trim()) {
|
|
@@ -81,6 +78,6 @@ function RefundDialog({ orderId, orderTotal, isOpen, onClose, onSuccess, }) {
|
|
|
81
78
|
style: 'currency',
|
|
82
79
|
currency: 'USD',
|
|
83
80
|
}).format(total);
|
|
84
|
-
return ((
|
|
81
|
+
return (_jsxs("div", { className: "fixed inset-0 z-50 flex items-center justify-center", children: [_jsx("div", { className: "absolute inset-0 bg-black/50", onClick: () => !isProcessing && onClose() }), _jsxs("div", { className: "relative w-full max-w-md rounded-lg border border-border bg-card p-6 shadow-lg", children: [_jsx("div", { className: "mb-6", children: _jsxs("div", { className: "flex items-center gap-3", children: [_jsx("div", { className: "flex h-10 w-10 items-center justify-center rounded-full bg-destructive/10", children: _jsx("svg", { className: "h-5 w-5 text-destructive", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z" }) }) }), _jsxs("div", { children: [_jsx("h2", { className: "text-lg font-semibold text-foreground", children: "Process Refund" }), _jsxs("p", { className: "text-sm text-muted-foreground", children: ["Order #", orderId.slice(-8).toUpperCase()] })] })] }) }), _jsxs("form", { onSubmit: handleSubmit, children: [error && (_jsx("div", { className: "mb-4 rounded-md bg-destructive/10 px-4 py-3 text-sm text-destructive", children: error })), _jsxs("div", { className: "mb-6 rounded-md bg-muted/50 p-4", children: [_jsx("p", { className: "text-sm text-muted-foreground", children: "Refund Amount" }), _jsx("p", { className: "text-2xl font-semibold text-foreground", children: formattedTotal }), _jsx("p", { className: "mt-1 text-xs text-muted-foreground", children: "Full refund will be processed via Stripe" })] }), _jsxs("div", { className: "mb-6", children: [_jsx("label", { htmlFor: "reason", className: "mb-2 block text-sm font-medium text-foreground", children: "Reason for refund *" }), _jsx("textarea", { id: "reason", value: reason, onChange: (e) => setReason(e.target.value), placeholder: "Enter the reason for this refund...", rows: 3, required: true, disabled: isProcessing, className: "w-full rounded-md border border-input bg-background px-3 py-2 text-sm placeholder:text-muted-foreground focus:border-primary focus:outline-none focus:ring-1 focus:ring-primary disabled:opacity-50" })] }), _jsxs("div", { className: "flex items-center gap-3", children: [_jsx("button", { type: "button", onClick: onClose, disabled: isProcessing, className: "flex-1 rounded-md border border-border px-4 py-2 text-sm font-medium text-foreground hover:bg-accent disabled:opacity-50", children: "Cancel" }), _jsx("button", { type: "submit", disabled: isProcessing || !reason.trim(), className: "flex-1 rounded-md bg-destructive px-4 py-2 text-sm font-medium text-destructive-foreground hover:bg-destructive/90 disabled:opacity-50", children: isProcessing ? 'Processing...' : 'Process Refund' })] })] }), _jsx("button", { onClick: onClose, disabled: isProcessing, className: "absolute right-4 top-4 rounded-md p-1 text-muted-foreground hover:bg-accent hover:text-foreground disabled:opacity-50", children: _jsx("svg", { className: "h-5 w-5", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) }) })] })] }));
|
|
85
82
|
}
|
|
86
83
|
//# sourceMappingURL=RefundDialog.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RefundDialog.js","sourceRoot":"","sources":["../../../src/admin/components/RefundDialog.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"RefundDialog.js","sourceRoot":"","sources":["../../../src/admin/components/RefundDialog.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @rovela/sdk/admin/components/SEOPreview
|
|
3
|
+
*
|
|
4
|
+
* Google search result preview for SEO fields.
|
|
5
|
+
*/
|
|
6
|
+
export interface SEOPreviewProps {
|
|
7
|
+
/** Page title */
|
|
8
|
+
title: string;
|
|
9
|
+
/** Meta description */
|
|
10
|
+
description: string;
|
|
11
|
+
/** URL slug */
|
|
12
|
+
slug: string;
|
|
13
|
+
/** Base URL for preview */
|
|
14
|
+
baseUrl?: string;
|
|
15
|
+
/** Additional CSS classes */
|
|
16
|
+
className?: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Preview of how the page will appear in Google search results.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```tsx
|
|
23
|
+
* <SEOPreview
|
|
24
|
+
* title={metaTitle || productName}
|
|
25
|
+
* description={metaDescription || productDescription}
|
|
26
|
+
* slug={productSlug}
|
|
27
|
+
* baseUrl="https://mystore.com/products"
|
|
28
|
+
* />
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export declare function SEOPreview({ title, description, slug, baseUrl, className, }: SEOPreviewProps): import("react/jsx-runtime").JSX.Element;
|
|
32
|
+
//# sourceMappingURL=SEOPreview.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SEOPreview.d.ts","sourceRoot":"","sources":["../../../src/admin/components/SEOPreview.tsx"],"names":[],"mappings":"AAEA;;;;GAIG;AAMH,MAAM,WAAW,eAAe;IAC9B,iBAAiB;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,uBAAuB;IACvB,WAAW,EAAE,MAAM,CAAA;IACnB,eAAe;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,2BAA2B;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAMD;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,WAAW,EACX,IAAI,EACJ,OAA0C,EAC1C,SAAc,GACf,EAAE,eAAe,2CA6DjB"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
// =============================================================================
|
|
4
|
+
// Component
|
|
5
|
+
// =============================================================================
|
|
6
|
+
/**
|
|
7
|
+
* Preview of how the page will appear in Google search results.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```tsx
|
|
11
|
+
* <SEOPreview
|
|
12
|
+
* title={metaTitle || productName}
|
|
13
|
+
* description={metaDescription || productDescription}
|
|
14
|
+
* slug={productSlug}
|
|
15
|
+
* baseUrl="https://mystore.com/products"
|
|
16
|
+
* />
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export function SEOPreview({ title, description, slug, baseUrl = 'https://yourstore.com/products', className = '', }) {
|
|
20
|
+
// Truncate title to ~60 characters (Google displays ~50-60)
|
|
21
|
+
const displayTitle = title.length > 60 ? `${title.slice(0, 57)}...` : title;
|
|
22
|
+
// Truncate description to ~155 characters (Google displays ~150-160)
|
|
23
|
+
const displayDescription = description.length > 155
|
|
24
|
+
? `${description.slice(0, 152)}...`
|
|
25
|
+
: description;
|
|
26
|
+
// Build URL
|
|
27
|
+
const displayUrl = `${baseUrl}/${slug || 'product-name'}`;
|
|
28
|
+
return (_jsxs("div", { className: `rounded-lg border border-border bg-card p-4 ${className}`, children: [_jsx("p", { className: "mb-3 text-xs font-medium uppercase tracking-wider text-muted-foreground", children: "Search Engine Preview" }), _jsxs("div", { className: "space-y-1", children: [_jsxs("div", { className: "flex items-center gap-2 text-sm", children: [_jsx("div", { className: "flex h-6 w-6 items-center justify-center rounded-full bg-muted", children: _jsx("span", { className: "text-xs font-medium text-muted-foreground", children: "S" }) }), _jsxs("div", { className: "flex flex-col", children: [_jsx("span", { className: "text-xs text-muted-foreground", children: "Your Store" }), _jsx("span", { className: "text-xs text-muted-foreground truncate max-w-[300px]", children: displayUrl })] })] }), _jsx("h3", { className: "text-lg font-normal text-[#1a0dab] hover:underline cursor-pointer leading-snug", children: displayTitle || 'Product Title' }), _jsx("p", { className: "text-sm text-[#545454] leading-relaxed", children: displayDescription || 'Add a meta description to help search engines understand what this product is about and to entice users to click.' })] }), _jsxs("div", { className: "mt-4 flex gap-6 border-t border-border pt-3", children: [_jsxs("div", { className: "text-xs", children: [_jsx("span", { className: "text-muted-foreground", children: "Title: " }), _jsxs("span", { className: title.length > 60 ? 'text-destructive' : 'text-foreground', children: [title.length, "/60"] })] }), _jsxs("div", { className: "text-xs", children: [_jsx("span", { className: "text-muted-foreground", children: "Description: " }), _jsxs("span", { className: description.length > 160 ? 'text-destructive' : 'text-foreground', children: [description.length, "/160"] })] })] })] }));
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=SEOPreview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SEOPreview.js","sourceRoot":"","sources":["../../../src/admin/components/SEOPreview.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAyBZ,gFAAgF;AAChF,YAAY;AACZ,gFAAgF;AAEhF;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,UAAU,CAAC,EACzB,KAAK,EACL,WAAW,EACX,IAAI,EACJ,OAAO,GAAG,gCAAgC,EAC1C,SAAS,GAAG,EAAE,GACE;IAChB,4DAA4D;IAC5D,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAA;IAE3E,qEAAqE;IACrE,MAAM,kBAAkB,GAAG,WAAW,CAAC,MAAM,GAAG,GAAG;QACjD,CAAC,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK;QACnC,CAAC,CAAC,WAAW,CAAA;IAEf,YAAY;IACZ,MAAM,UAAU,GAAG,GAAG,OAAO,IAAI,IAAI,IAAI,cAAc,EAAE,CAAA;IAEzD,OAAO,CACL,eAAK,SAAS,EAAE,+CAA+C,SAAS,EAAE,aACxE,YAAG,SAAS,EAAC,yEAAyE,sCAElF,EAGJ,eAAK,SAAS,EAAC,WAAW,aAExB,eAAK,SAAS,EAAC,iCAAiC,aAC9C,cAAK,SAAS,EAAC,gEAAgE,YAC7E,eAAM,SAAS,EAAC,2CAA2C,kBAAS,GAChE,EACN,eAAK,SAAS,EAAC,eAAe,aAC5B,eAAM,SAAS,EAAC,+BAA+B,2BAAkB,EACjE,eAAM,SAAS,EAAC,sDAAsD,YACnE,UAAU,GACN,IACH,IACF,EAGN,aAAI,SAAS,EAAC,gFAAgF,YAC3F,YAAY,IAAI,eAAe,GAC7B,EAGL,YAAG,SAAS,EAAC,wCAAwC,YAClD,kBAAkB,IAAI,mHAAmH,GACxI,IACA,EAGN,eAAK,SAAS,EAAC,6CAA6C,aAC1D,eAAK,SAAS,EAAC,SAAS,aACtB,eAAM,SAAS,EAAC,uBAAuB,wBAAe,EACtD,gBAAM,SAAS,EAAE,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,iBAAiB,aACxE,KAAK,CAAC,MAAM,WACR,IACH,EACN,eAAK,SAAS,EAAC,SAAS,aACtB,eAAM,SAAS,EAAC,uBAAuB,8BAAqB,EAC5D,gBAAM,SAAS,EAAE,WAAW,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,iBAAiB,aAC/E,WAAW,CAAC,MAAM,YACd,IACH,IACF,IACF,CACP,CAAA;AACH,CAAC"}
|
|
@@ -1,22 +1,19 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
'use client';
|
|
3
|
-
|
|
4
|
-
exports.StatsCards = StatsCards;
|
|
5
|
-
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
6
3
|
// =============================================================================
|
|
7
4
|
// Icons
|
|
8
5
|
// =============================================================================
|
|
9
6
|
function RevenueIcon() {
|
|
10
|
-
return ((
|
|
7
|
+
return (_jsx("svg", { className: "h-6 w-6", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 1.5, d: "M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1M21 12a9 9 0 11-18 0 9 9 0 0118 0z" }) }));
|
|
11
8
|
}
|
|
12
9
|
function OrdersIcon() {
|
|
13
|
-
return ((
|
|
10
|
+
return (_jsx("svg", { className: "h-6 w-6", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 1.5, d: "M16 11V7a4 4 0 00-8 0v4M5 9h14l1 12H4L5 9z" }) }));
|
|
14
11
|
}
|
|
15
12
|
function CustomersIcon() {
|
|
16
|
-
return ((
|
|
13
|
+
return (_jsx("svg", { className: "h-6 w-6", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 1.5, d: "M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0zm6 3a2 2 0 11-4 0 2 2 0 014 0zM7 10a2 2 0 11-4 0 2 2 0 014 0z" }) }));
|
|
17
14
|
}
|
|
18
15
|
function ProductsIcon() {
|
|
19
|
-
return ((
|
|
16
|
+
return (_jsx("svg", { className: "h-6 w-6", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 1.5, d: "M20 7l-8-4-8 4m16 0l-8 4m8-4v10l-8 4m0-10L4 7m8 4v10M4 7v10l8 4" }) }));
|
|
20
17
|
}
|
|
21
18
|
// =============================================================================
|
|
22
19
|
// Component
|
|
@@ -36,7 +33,7 @@ function ProductsIcon() {
|
|
|
36
33
|
* />
|
|
37
34
|
* ```
|
|
38
35
|
*/
|
|
39
|
-
function StatsCards({ stats, isLoading = false, currency = 'USD', className = '', }) {
|
|
36
|
+
export function StatsCards({ stats, isLoading = false, currency = 'USD', className = '', }) {
|
|
40
37
|
const formatCurrency = (value) => {
|
|
41
38
|
return new Intl.NumberFormat('en-US', {
|
|
42
39
|
style: 'currency',
|
|
@@ -77,6 +74,6 @@ function StatsCards({ stats, isLoading = false, currency = 'USD', className = ''
|
|
|
77
74
|
bgColor: 'bg-orange-100',
|
|
78
75
|
},
|
|
79
76
|
];
|
|
80
|
-
return ((
|
|
77
|
+
return (_jsx("div", { className: `grid gap-4 sm:grid-cols-2 lg:grid-cols-4 ${className}`, children: cards.map((card) => (_jsx("div", { className: "rounded-lg border border-border bg-card p-6", children: _jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { children: [_jsx("p", { className: "text-sm font-medium text-muted-foreground", children: card.label }), isLoading ? (_jsx("div", { className: "mt-2 h-8 w-24 animate-pulse rounded bg-muted" })) : (_jsx("p", { className: "mt-2 text-2xl font-semibold text-foreground", children: card.format(card.value) }))] }), _jsx("div", { className: `rounded-full p-3 ${card.bgColor}`, children: _jsx(card.icon, {}) })] }) }, card.label))) }));
|
|
81
78
|
}
|
|
82
79
|
//# sourceMappingURL=StatsCards.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatsCards.js","sourceRoot":"","sources":["../../../src/admin/components/StatsCards.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"StatsCards.js","sourceRoot":"","sources":["../../../src/admin/components/StatsCards.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAUZ,gFAAgF;AAChF,QAAQ;AACR,gFAAgF;AAEhF,SAAS,WAAW;IAClB,OAAO,CACL,cAAK,SAAS,EAAC,SAAS,EAAC,IAAI,EAAC,MAAM,EAAC,OAAO,EAAC,WAAW,EAAC,MAAM,EAAC,cAAc,YAC5E,eAAM,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,EAAC,WAAW,EAAE,GAAG,EAAE,CAAC,EAAC,6KAA6K,GAAG,GACnP,CACP,CAAA;AACH,CAAC;AAED,SAAS,UAAU;IACjB,OAAO,CACL,cAAK,SAAS,EAAC,SAAS,EAAC,IAAI,EAAC,MAAM,EAAC,OAAO,EAAC,WAAW,EAAC,MAAM,EAAC,cAAc,YAC5E,eAAM,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,EAAC,WAAW,EAAE,GAAG,EAAE,CAAC,EAAC,4CAA4C,GAAG,GAClH,CACP,CAAA;AACH,CAAC;AAED,SAAS,aAAa;IACpB,OAAO,CACL,cAAK,SAAS,EAAC,SAAS,EAAC,IAAI,EAAC,MAAM,EAAC,OAAO,EAAC,WAAW,EAAC,MAAM,EAAC,cAAc,YAC5E,eAAM,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,EAAC,WAAW,EAAE,GAAG,EAAE,CAAC,EAAC,wQAAwQ,GAAG,GAC9U,CACP,CAAA;AACH,CAAC;AAED,SAAS,YAAY;IACnB,OAAO,CACL,cAAK,SAAS,EAAC,SAAS,EAAC,IAAI,EAAC,MAAM,EAAC,OAAO,EAAC,WAAW,EAAC,MAAM,EAAC,cAAc,YAC5E,eAAM,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,EAAC,WAAW,EAAE,GAAG,EAAE,CAAC,EAAC,iEAAiE,GAAG,GACvI,CACP,CAAA;AACH,CAAC;AAED,gFAAgF;AAChF,YAAY;AACZ,gFAAgF;AAEhF;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,UAAU,CAAC,EACzB,KAAK,EACL,SAAS,GAAG,KAAK,EACjB,QAAQ,GAAG,KAAK,EAChB,SAAS,GAAG,EAAE,GACE;IAChB,MAAM,cAAc,GAAG,CAAC,KAAa,EAAE,EAAE;QACvC,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;YACpC,KAAK,EAAE,UAAU;YACjB,QAAQ;SACT,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAClB,CAAC,CAAA;IAED,MAAM,KAAK,GAAG;QACZ;YACE,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,KAAK,EAAE,OAAO,IAAI,CAAC;YAC1B,MAAM,EAAE,cAAc;YACtB,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,gBAAgB;YACvB,OAAO,EAAE,cAAc;SACxB;QACD;YACE,KAAK,EAAE,QAAQ;YACf,KAAK,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC;YACzB,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,EAAE;YACzC,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,eAAe;YACtB,OAAO,EAAE,aAAa;SACvB;QACD;YACE,KAAK,EAAE,WAAW;YAClB,KAAK,EAAE,KAAK,EAAE,SAAS,IAAI,CAAC;YAC5B,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,EAAE;YACzC,IAAI,EAAE,aAAa;YACnB,KAAK,EAAE,iBAAiB;YACxB,OAAO,EAAE,eAAe;SACzB;QACD;YACE,KAAK,EAAE,UAAU;YACjB,KAAK,EAAE,KAAK,EAAE,QAAQ,IAAI,CAAC;YAC3B,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,EAAE;YACzC,IAAI,EAAE,YAAY;YAClB,KAAK,EAAE,iBAAiB;YACxB,OAAO,EAAE,eAAe;SACzB;KACF,CAAA;IAED,OAAO,CACL,cAAK,SAAS,EAAE,4CAA4C,SAAS,EAAE,YACpE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACnB,cAEE,SAAS,EAAC,6CAA6C,YAEvD,eAAK,SAAS,EAAC,mCAAmC,aAChD,0BACE,YAAG,SAAS,EAAC,2CAA2C,YACrD,IAAI,CAAC,KAAK,GACT,EACH,SAAS,CAAC,CAAC,CAAC,CACX,cAAK,SAAS,EAAC,8CAA8C,GAAG,CACjE,CAAC,CAAC,CAAC,CACF,YAAG,SAAS,EAAC,6CAA6C,YACvD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GACtB,CACL,IACG,EACN,cAAK,SAAS,EAAE,oBAAoB,IAAI,CAAC,OAAO,EAAE,YAChD,KAAC,IAAI,CAAC,IAAI,KAAG,GACT,IACF,IAnBD,IAAI,CAAC,KAAK,CAoBX,CACP,CAAC,GACE,CACP,CAAA;AACH,CAAC"}
|
|
@@ -1,14 +1,11 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
'use client';
|
|
3
|
-
|
|
4
|
-
exports.StoreSettings = StoreSettings;
|
|
5
|
-
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
6
3
|
/**
|
|
7
4
|
* @rovela/sdk/admin/components/StoreSettings
|
|
8
5
|
*
|
|
9
6
|
* Store settings management component.
|
|
10
7
|
*/
|
|
11
|
-
|
|
8
|
+
import { useState, useCallback } from 'react';
|
|
12
9
|
// =============================================================================
|
|
13
10
|
// Component
|
|
14
11
|
// =============================================================================
|
|
@@ -23,8 +20,8 @@ const react_1 = require("react");
|
|
|
23
20
|
* />
|
|
24
21
|
* ```
|
|
25
22
|
*/
|
|
26
|
-
function StoreSettings({ initialSettings, onSave, className = '', }) {
|
|
27
|
-
const [settings, setSettings] =
|
|
23
|
+
export function StoreSettings({ initialSettings, onSave, className = '', }) {
|
|
24
|
+
const [settings, setSettings] = useState({
|
|
28
25
|
storeName: initialSettings?.storeName || '',
|
|
29
26
|
storeEmail: initialSettings?.storeEmail || '',
|
|
30
27
|
storeCurrency: initialSettings?.storeCurrency || 'USD',
|
|
@@ -34,10 +31,10 @@ function StoreSettings({ initialSettings, onSave, className = '', }) {
|
|
|
34
31
|
shippingEnabled: initialSettings?.shippingEnabled ?? true,
|
|
35
32
|
freeShippingThreshold: initialSettings?.freeShippingThreshold || 0,
|
|
36
33
|
});
|
|
37
|
-
const [isLoading, setIsLoading] =
|
|
38
|
-
const [success, setSuccess] =
|
|
39
|
-
const [error, setError] =
|
|
40
|
-
const handleChange =
|
|
34
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
35
|
+
const [success, setSuccess] = useState(false);
|
|
36
|
+
const [error, setError] = useState(null);
|
|
37
|
+
const handleChange = useCallback((e) => {
|
|
41
38
|
const { name, value, type } = e.target;
|
|
42
39
|
const checked = e.target.checked;
|
|
43
40
|
setSettings((prev) => ({
|
|
@@ -49,7 +46,7 @@ function StoreSettings({ initialSettings, onSave, className = '', }) {
|
|
|
49
46
|
: value,
|
|
50
47
|
}));
|
|
51
48
|
}, []);
|
|
52
|
-
const handleSubmit =
|
|
49
|
+
const handleSubmit = useCallback(async (e) => {
|
|
53
50
|
e.preventDefault();
|
|
54
51
|
setError(null);
|
|
55
52
|
setSuccess(false);
|
|
@@ -83,6 +80,6 @@ function StoreSettings({ initialSettings, onSave, className = '', }) {
|
|
|
83
80
|
'Asia/Tokyo',
|
|
84
81
|
'Australia/Sydney',
|
|
85
82
|
];
|
|
86
|
-
return ((
|
|
83
|
+
return (_jsxs("form", { onSubmit: handleSubmit, className: `space-y-6 ${className}`, children: [error && (_jsx("div", { className: "rounded-md bg-destructive/10 px-4 py-3 text-sm text-destructive", children: error })), success && (_jsx("div", { className: "rounded-md bg-green-100 px-4 py-3 text-sm text-green-800", children: "Settings saved successfully!" })), _jsxs("div", { className: "rounded-lg border border-border bg-card p-6", children: [_jsx("h3", { className: "mb-4 text-lg font-medium text-foreground", children: "General Settings" }), _jsxs("div", { className: "space-y-4", children: [_jsxs("div", { children: [_jsx("label", { htmlFor: "storeName", className: "block text-sm font-medium text-foreground", children: "Store Name" }), _jsx("input", { id: "storeName", name: "storeName", type: "text", value: settings.storeName, onChange: handleChange, className: "mt-1 block w-full rounded-md border border-input bg-background px-3 py-2 text-sm focus:border-primary focus:outline-none focus:ring-1 focus:ring-primary" })] }), _jsxs("div", { children: [_jsx("label", { htmlFor: "storeEmail", className: "block text-sm font-medium text-foreground", children: "Store Email" }), _jsx("input", { id: "storeEmail", name: "storeEmail", type: "email", value: settings.storeEmail, onChange: handleChange, className: "mt-1 block w-full rounded-md border border-input bg-background px-3 py-2 text-sm focus:border-primary focus:outline-none focus:ring-1 focus:ring-primary" })] }), _jsxs("div", { className: "grid gap-4 sm:grid-cols-2", children: [_jsxs("div", { children: [_jsx("label", { htmlFor: "storeCurrency", className: "block text-sm font-medium text-foreground", children: "Currency" }), _jsx("select", { id: "storeCurrency", name: "storeCurrency", value: settings.storeCurrency, onChange: handleChange, className: "mt-1 block w-full rounded-md border border-input bg-background px-3 py-2 text-sm focus:border-primary focus:outline-none focus:ring-1 focus:ring-primary", children: currencies.map((c) => (_jsxs("option", { value: c.code, children: [c.code, " - ", c.name] }, c.code))) })] }), _jsxs("div", { children: [_jsx("label", { htmlFor: "storeTimezone", className: "block text-sm font-medium text-foreground", children: "Timezone" }), _jsx("select", { id: "storeTimezone", name: "storeTimezone", value: settings.storeTimezone, onChange: handleChange, className: "mt-1 block w-full rounded-md border border-input bg-background px-3 py-2 text-sm focus:border-primary focus:outline-none focus:ring-1 focus:ring-primary", children: timezones.map((tz) => (_jsx("option", { value: tz, children: tz }, tz))) })] })] })] })] }), _jsxs("div", { className: "rounded-lg border border-border bg-card p-6", children: [_jsx("h3", { className: "mb-4 text-lg font-medium text-foreground", children: "Tax Settings" }), _jsxs("div", { className: "space-y-4", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { children: [_jsx("p", { className: "font-medium text-foreground", children: "Enable Tax" }), _jsx("p", { className: "text-sm text-muted-foreground", children: "Charge tax on orders" })] }), _jsxs("label", { className: "relative inline-flex cursor-pointer items-center", children: [_jsx("input", { type: "checkbox", name: "taxEnabled", checked: settings.taxEnabled, onChange: handleChange, className: "peer sr-only" }), _jsx("div", { className: "peer h-6 w-11 rounded-full bg-muted after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-muted after:bg-background after:transition-all after:content-[''] peer-checked:bg-primary peer-checked:after:translate-x-full peer-focus:outline-none peer-focus:ring-2 peer-focus:ring-primary/20" })] })] }), settings.taxEnabled && (_jsxs("div", { children: [_jsx("label", { htmlFor: "taxRate", className: "block text-sm font-medium text-foreground", children: "Default Tax Rate (%)" }), _jsx("input", { id: "taxRate", name: "taxRate", type: "number", step: "0.01", min: "0", max: "100", value: settings.taxRate, onChange: handleChange, className: "mt-1 block w-32 rounded-md border border-input bg-background px-3 py-2 text-sm focus:border-primary focus:outline-none focus:ring-1 focus:ring-primary" })] }))] })] }), _jsxs("div", { className: "rounded-lg border border-border bg-card p-6", children: [_jsx("h3", { className: "mb-4 text-lg font-medium text-foreground", children: "Shipping Settings" }), _jsxs("div", { className: "space-y-4", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { children: [_jsx("p", { className: "font-medium text-foreground", children: "Enable Shipping" }), _jsx("p", { className: "text-sm text-muted-foreground", children: "Charge shipping on orders" })] }), _jsxs("label", { className: "relative inline-flex cursor-pointer items-center", children: [_jsx("input", { type: "checkbox", name: "shippingEnabled", checked: settings.shippingEnabled, onChange: handleChange, className: "peer sr-only" }), _jsx("div", { className: "peer h-6 w-11 rounded-full bg-muted after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:border after:border-muted after:bg-background after:transition-all after:content-[''] peer-checked:bg-primary peer-checked:after:translate-x-full peer-focus:outline-none peer-focus:ring-2 peer-focus:ring-primary/20" })] })] }), settings.shippingEnabled && (_jsxs("div", { children: [_jsx("label", { htmlFor: "freeShippingThreshold", className: "block text-sm font-medium text-foreground", children: "Free Shipping Threshold ($)" }), _jsx("p", { className: "text-sm text-muted-foreground mb-1", children: "Orders above this amount qualify for free shipping (0 = disabled)" }), _jsx("input", { id: "freeShippingThreshold", name: "freeShippingThreshold", type: "number", step: "0.01", min: "0", value: settings.freeShippingThreshold, onChange: handleChange, className: "mt-1 block w-32 rounded-md border border-input bg-background px-3 py-2 text-sm focus:border-primary focus:outline-none focus:ring-1 focus:ring-primary" })] }))] })] }), _jsx("div", { className: "flex justify-end", children: _jsx("button", { type: "submit", disabled: isLoading, className: "rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground hover:bg-primary/90 disabled:opacity-50", children: isLoading ? 'Saving...' : 'Save Settings' }) })] }));
|
|
87
84
|
}
|
|
88
85
|
//# sourceMappingURL=StoreSettings.js.map
|