diff --git a/aluxpay-payment-gateway/includes/class-aluxpay-payment-gateway.php b/aluxpay-payment-gateway/includes/class-aluxpay-payment-gateway.php
index 6f9ee97..81fa70b 100644
--- a/aluxpay-payment-gateway/includes/class-aluxpay-payment-gateway.php
+++ b/aluxpay-payment-gateway/includes/class-aluxpay-payment-gateway.php
@@ -137,14 +137,22 @@ class WC_Aluxpay_Payment_Gateway extends WC_Payment_Gateway {
*/
private function get_payment_redirect_url($order) {
+ // Build description without special characters OR encode it
+ $description = sprintf(
+ __('Order %s from %s', 'aluxpay-payment-gateway'),
+ $order->get_id(),
+ get_bloginfo('name')
+ );
+
$params = array(
'wc_order_id' => $order->get_id(),
'total' => $order->get_total(),
'currency' => $order->get_currency(),
- 'description' => sprintf(__('Order #%s from %s', 'aluxpay-payment-gateway'), $order->get_id(), get_bloginfo('name')),
+ 'description' => $description,
'customer_email' => $order->get_billing_email(),
'return_url' => $this->get_return_url($order),
'cancel_url' => wc_get_checkout_url(),
+ '_wpnonce' => wp_create_nonce('cpg_payment_' . $order->get_id()),
);
// Add nonce for security
diff --git a/backend/routes/payment.js b/backend/routes/payment.js
index 8b08bca..8e30b5a 100644
--- a/backend/routes/payment.js
+++ b/backend/routes/payment.js
@@ -254,7 +254,23 @@ router.get('/order-status/:wc_order_id', async (req, res) => {
total: wcOrder.order.total,
currency: wcOrder.order.currency,
payment_method: wcOrder.order.payment_method,
- payment_method_title: wcOrder.order.payment_method_title
+ payment_method_title: wcOrder.order.payment_method_title,
+ line_items: wcOrder.order.line_items.map(item => ({
+ name: item.name,
+ quantity: item.quantity,
+ price: item.price,
+ total: item.total,
+ image: item.image?.src || null
+ })),
+ shipping: {
+ total: wcOrder.order.shipping_total,
+ method: wcOrder.order.shipping_lines[0]?.method_title
+ },
+ billing: {
+ first_name: wcOrder.order.billing.first_name,
+ last_name: wcOrder.order.billing.last_name,
+ email: wcOrder.order.billing.email
+ }
});
} catch (error) {
diff --git a/backend/services/woocommerce.js b/backend/services/woocommerce.js
index 826e966..a55b6be 100644
--- a/backend/services/woocommerce.js
+++ b/backend/services/woocommerce.js
@@ -35,7 +35,6 @@ class WooCommerceService {
async getOrder(orderId) {
try {
const response = await this.client.get(`/orders/${orderId}`);
-
console.log('WooCommerce Order Retrieved:', {
id: response.data.id,
status: response.data.status,
diff --git a/frontend/eslint.config.js b/frontend/eslint.config.js
index cee1e2c..d3da143 100644
--- a/frontend/eslint.config.js
+++ b/frontend/eslint.config.js
@@ -1,29 +1,9 @@
-import js from '@eslint/js'
-import globals from 'globals'
-import reactHooks from 'eslint-plugin-react-hooks'
-import reactRefresh from 'eslint-plugin-react-refresh'
-import { defineConfig, globalIgnores } from 'eslint/config'
+import js from "@eslint/js";
+import globals from "globals";
+import pluginReact from "eslint-plugin-react";
+import { defineConfig } from "eslint/config";
export default defineConfig([
- globalIgnores(['dist']),
- {
- files: ['**/*.{js,jsx}'],
- extends: [
- js.configs.recommended,
- reactHooks.configs['recommended-latest'],
- reactRefresh.configs.vite,
- ],
- languageOptions: {
- ecmaVersion: 2020,
- globals: globals.browser,
- parserOptions: {
- ecmaVersion: 'latest',
- ecmaFeatures: { jsx: true },
- sourceType: 'module',
- },
- },
- rules: {
- 'no-unused-vars': ['error', { varsIgnorePattern: '^[A-Z_]' }],
- },
- },
-])
+ { files: ["**/*.{js,mjs,cjs,jsx}"], plugins: { js }, extends: ["js/recommended"], languageOptions: { globals: globals.browser } },
+ pluginReact.configs.flat.recommended,
+]);
diff --git a/frontend/index.html b/frontend/index.html
index d625ef0..3b28a0a 100644
--- a/frontend/index.html
+++ b/frontend/index.html
@@ -4,7 +4,7 @@
-
my-app
+ ALUXPAY - Payment Gateway
diff --git a/frontend/jsconfig.json b/frontend/jsconfig.json
new file mode 100644
index 0000000..c205775
--- /dev/null
+++ b/frontend/jsconfig.json
@@ -0,0 +1,11 @@
+{
+ "compilerOptions": {
+ "target": "ESNext",
+ "module": "ESNext",
+ "moduleResolution": "Bundler",
+ "skipLibCheck": true,
+ "paths": {
+ "@/*": ["./src/*"]
+ }
+ }
+}
\ No newline at end of file
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index f3c9045..b3840b1 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -8,10 +8,14 @@
"name": "my-app",
"version": "0.0.0",
"dependencies": {
+ "@chakra-ui/react": "^3.27.0",
+ "@emotion/react": "^11.14.0",
"@paypal/react-paypal-js": "^8.9.1",
"axios": "^1.12.2",
+ "next-themes": "^0.4.6",
"react": "^19.1.1",
"react-dom": "^19.1.1",
+ "react-icons": "^5.5.0",
"react-router-dom": "^7.9.2",
"react-scripts": "^5.0.1"
},
@@ -21,10 +25,12 @@
"@types/react-dom": "^19.1.9",
"@vitejs/plugin-react": "^5.0.3",
"eslint": "^9.36.0",
+ "eslint-plugin-react": "^7.37.5",
"eslint-plugin-react-hooks": "^5.2.0",
"eslint-plugin-react-refresh": "^0.4.20",
"globals": "^16.4.0",
- "vite": "^7.1.7"
+ "vite": "^7.1.7",
+ "vite-tsconfig-paths": "^5.1.4"
}
},
"node_modules/@alloc/quick-lru": {
@@ -39,6 +45,78 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/@ark-ui/react": {
+ "version": "5.25.0",
+ "resolved": "https://registry.npmjs.org/@ark-ui/react/-/react-5.25.0.tgz",
+ "integrity": "sha512-+r91hfLQNmGbM37rvwu6Ppy7Xaa1Dww80spn49xHhiS8ZCYQbZyPNzgOEVoSjURiroLkLdQdh869OscfczkAyA==",
+ "license": "MIT",
+ "dependencies": {
+ "@internationalized/date": "3.9.0",
+ "@zag-js/accordion": "1.24.1",
+ "@zag-js/anatomy": "1.24.1",
+ "@zag-js/angle-slider": "1.24.1",
+ "@zag-js/async-list": "1.24.1",
+ "@zag-js/auto-resize": "1.24.1",
+ "@zag-js/avatar": "1.24.1",
+ "@zag-js/carousel": "1.24.1",
+ "@zag-js/checkbox": "1.24.1",
+ "@zag-js/clipboard": "1.24.1",
+ "@zag-js/collapsible": "1.24.1",
+ "@zag-js/collection": "1.24.1",
+ "@zag-js/color-picker": "1.24.1",
+ "@zag-js/color-utils": "1.24.1",
+ "@zag-js/combobox": "1.24.1",
+ "@zag-js/core": "1.24.1",
+ "@zag-js/date-picker": "1.24.1",
+ "@zag-js/date-utils": "1.24.1",
+ "@zag-js/dialog": "1.24.1",
+ "@zag-js/dom-query": "1.24.1",
+ "@zag-js/editable": "1.24.1",
+ "@zag-js/file-upload": "1.24.1",
+ "@zag-js/file-utils": "1.24.1",
+ "@zag-js/floating-panel": "1.24.1",
+ "@zag-js/focus-trap": "1.24.1",
+ "@zag-js/highlight-word": "1.24.1",
+ "@zag-js/hover-card": "1.24.1",
+ "@zag-js/i18n-utils": "1.24.1",
+ "@zag-js/json-tree-utils": "1.24.1",
+ "@zag-js/listbox": "1.24.1",
+ "@zag-js/menu": "1.24.1",
+ "@zag-js/number-input": "1.24.1",
+ "@zag-js/pagination": "1.24.1",
+ "@zag-js/password-input": "1.24.1",
+ "@zag-js/pin-input": "1.24.1",
+ "@zag-js/popover": "1.24.1",
+ "@zag-js/presence": "1.24.1",
+ "@zag-js/progress": "1.24.1",
+ "@zag-js/qr-code": "1.24.1",
+ "@zag-js/radio-group": "1.24.1",
+ "@zag-js/rating-group": "1.24.1",
+ "@zag-js/react": "1.24.1",
+ "@zag-js/scroll-area": "1.24.1",
+ "@zag-js/select": "1.24.1",
+ "@zag-js/signature-pad": "1.24.1",
+ "@zag-js/slider": "1.24.1",
+ "@zag-js/splitter": "1.24.1",
+ "@zag-js/steps": "1.24.1",
+ "@zag-js/switch": "1.24.1",
+ "@zag-js/tabs": "1.24.1",
+ "@zag-js/tags-input": "1.24.1",
+ "@zag-js/timer": "1.24.1",
+ "@zag-js/toast": "1.24.1",
+ "@zag-js/toggle": "1.24.1",
+ "@zag-js/toggle-group": "1.24.1",
+ "@zag-js/tooltip": "1.24.1",
+ "@zag-js/tour": "1.24.1",
+ "@zag-js/tree-view": "1.24.1",
+ "@zag-js/types": "1.24.1",
+ "@zag-js/utils": "1.24.1"
+ },
+ "peerDependencies": {
+ "react": ">=18.0.0",
+ "react-dom": ">=18.0.0"
+ }
+ },
"node_modules/@babel/code-frame": {
"version": "7.27.1",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz",
@@ -92,6 +170,12 @@
"url": "https://opencollective.com/babel"
}
},
+ "node_modules/@babel/core/node_modules/convert-source-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+ "license": "MIT"
+ },
"node_modules/@babel/eslint-parser": {
"version": "7.28.4",
"resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.28.4.tgz",
@@ -2052,6 +2136,27 @@
"integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
"license": "MIT"
},
+ "node_modules/@chakra-ui/react": {
+ "version": "3.27.0",
+ "resolved": "https://registry.npmjs.org/@chakra-ui/react/-/react-3.27.0.tgz",
+ "integrity": "sha512-M1WTAErI2cYM/PB4h5Kf5CCAg70g3HCzVvTEhcf5ty8QrG6QybPf3RdWSpBlIy7qpjuEnQYpHLxM0jnFLArBgA==",
+ "license": "MIT",
+ "dependencies": {
+ "@ark-ui/react": "^5.24.1",
+ "@emotion/is-prop-valid": "^1.3.1",
+ "@emotion/serialize": "^1.3.3",
+ "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0",
+ "@emotion/utils": "^1.4.2",
+ "@pandacss/is-valid-prop": "^0.54.0",
+ "csstype": "^3.1.3",
+ "fast-safe-stringify": "^2.1.1"
+ },
+ "peerDependencies": {
+ "@emotion/react": ">=11",
+ "react": ">=18",
+ "react-dom": ">=18"
+ }
+ },
"node_modules/@csstools/normalize.css": {
"version": "12.1.1",
"resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.1.1.tgz",
@@ -2338,6 +2443,129 @@
"postcss-selector-parser": "^6.0.10"
}
},
+ "node_modules/@emotion/babel-plugin": {
+ "version": "11.13.5",
+ "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz",
+ "integrity": "sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-module-imports": "^7.16.7",
+ "@babel/runtime": "^7.18.3",
+ "@emotion/hash": "^0.9.2",
+ "@emotion/memoize": "^0.9.0",
+ "@emotion/serialize": "^1.3.3",
+ "babel-plugin-macros": "^3.1.0",
+ "convert-source-map": "^1.5.0",
+ "escape-string-regexp": "^4.0.0",
+ "find-root": "^1.1.0",
+ "source-map": "^0.5.7",
+ "stylis": "4.2.0"
+ }
+ },
+ "node_modules/@emotion/cache": {
+ "version": "11.14.0",
+ "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.14.0.tgz",
+ "integrity": "sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==",
+ "license": "MIT",
+ "dependencies": {
+ "@emotion/memoize": "^0.9.0",
+ "@emotion/sheet": "^1.4.0",
+ "@emotion/utils": "^1.4.2",
+ "@emotion/weak-memoize": "^0.4.0",
+ "stylis": "4.2.0"
+ }
+ },
+ "node_modules/@emotion/hash": {
+ "version": "0.9.2",
+ "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz",
+ "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==",
+ "license": "MIT"
+ },
+ "node_modules/@emotion/is-prop-valid": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.4.0.tgz",
+ "integrity": "sha512-QgD4fyscGcbbKwJmqNvUMSE02OsHUa+lAWKdEUIJKgqe5IwRSKd7+KhibEWdaKwgjLj0DRSHA9biAIqGBk05lw==",
+ "license": "MIT",
+ "dependencies": {
+ "@emotion/memoize": "^0.9.0"
+ }
+ },
+ "node_modules/@emotion/memoize": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz",
+ "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==",
+ "license": "MIT"
+ },
+ "node_modules/@emotion/react": {
+ "version": "11.14.0",
+ "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.14.0.tgz",
+ "integrity": "sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.18.3",
+ "@emotion/babel-plugin": "^11.13.5",
+ "@emotion/cache": "^11.14.0",
+ "@emotion/serialize": "^1.3.3",
+ "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0",
+ "@emotion/utils": "^1.4.2",
+ "@emotion/weak-memoize": "^0.4.0",
+ "hoist-non-react-statics": "^3.3.1"
+ },
+ "peerDependencies": {
+ "react": ">=16.8.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@emotion/serialize": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.3.tgz",
+ "integrity": "sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==",
+ "license": "MIT",
+ "dependencies": {
+ "@emotion/hash": "^0.9.2",
+ "@emotion/memoize": "^0.9.0",
+ "@emotion/unitless": "^0.10.0",
+ "@emotion/utils": "^1.4.2",
+ "csstype": "^3.0.2"
+ }
+ },
+ "node_modules/@emotion/sheet": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz",
+ "integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==",
+ "license": "MIT"
+ },
+ "node_modules/@emotion/unitless": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz",
+ "integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==",
+ "license": "MIT"
+ },
+ "node_modules/@emotion/use-insertion-effect-with-fallbacks": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.2.0.tgz",
+ "integrity": "sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": ">=16.8.0"
+ }
+ },
+ "node_modules/@emotion/utils": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.2.tgz",
+ "integrity": "sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==",
+ "license": "MIT"
+ },
+ "node_modules/@emotion/weak-memoize": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz",
+ "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==",
+ "license": "MIT"
+ },
"node_modules/@esbuild/aix-ppc64": {
"version": "0.25.10",
"resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.10.tgz",
@@ -2923,6 +3151,31 @@
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
+ "node_modules/@floating-ui/core": {
+ "version": "1.7.3",
+ "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz",
+ "integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==",
+ "license": "MIT",
+ "dependencies": {
+ "@floating-ui/utils": "^0.2.10"
+ }
+ },
+ "node_modules/@floating-ui/dom": {
+ "version": "1.7.4",
+ "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.4.tgz",
+ "integrity": "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==",
+ "license": "MIT",
+ "dependencies": {
+ "@floating-ui/core": "^1.7.3",
+ "@floating-ui/utils": "^0.2.10"
+ }
+ },
+ "node_modules/@floating-ui/utils": {
+ "version": "0.2.10",
+ "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz",
+ "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==",
+ "license": "MIT"
+ },
"node_modules/@humanfs/core": {
"version": "0.19.1",
"resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz",
@@ -2993,6 +3246,24 @@
"url": "https://github.com/sponsors/nzakas"
}
},
+ "node_modules/@internationalized/date": {
+ "version": "3.9.0",
+ "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.9.0.tgz",
+ "integrity": "sha512-yaN3brAnHRD+4KyyOsJyk49XUvj2wtbNACSqg0bz3u8t2VuzhC8Q5dfRnrSxjnnbDb+ienBnkn1TzQfE154vyg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@swc/helpers": "^0.5.0"
+ }
+ },
+ "node_modules/@internationalized/number": {
+ "version": "3.6.5",
+ "resolved": "https://registry.npmjs.org/@internationalized/number/-/number-3.6.5.tgz",
+ "integrity": "sha512-6hY4Kl4HPBvtfS62asS/R22JzNNy8vi/Ssev7x6EobfCp+9QIB2hKvI2EtbdJ0VSQacxVNtqhE/NmF/NZ0gm6g==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@swc/helpers": "^0.5.0"
+ }
+ },
"node_modules/@isaacs/cliui": {
"version": "8.0.2",
"resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
@@ -3460,12 +3731,6 @@
"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
}
},
- "node_modules/@jest/transform/node_modules/convert-source-map": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
- "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
- "license": "MIT"
- },
"node_modules/@jest/transform/node_modules/source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -3618,6 +3883,11 @@
"node": ">= 8"
}
},
+ "node_modules/@pandacss/is-valid-prop": {
+ "version": "0.54.0",
+ "resolved": "https://registry.npmjs.org/@pandacss/is-valid-prop/-/is-valid-prop-0.54.0.tgz",
+ "integrity": "sha512-UhRgg1k9VKRCBAHl+XUK3lvN0k9bYifzYGZOqajDid4L1DyU813A1L0ZwN4iV9WX5TX3PfUugqtgG9LnIeFGBQ=="
+ },
"node_modules/@paypal/paypal-js": {
"version": "8.4.2",
"resolved": "https://registry.npmjs.org/@paypal/paypal-js/-/paypal-js-8.4.2.tgz",
@@ -3708,6 +3978,15 @@
}
}
},
+ "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/source-map": {
+ "version": "0.7.6",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz",
+ "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">= 12"
+ }
+ },
"node_modules/@rolldown/pluginutils": {
"version": "1.0.0-beta.35",
"resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.35.tgz",
@@ -4292,6 +4571,15 @@
"url": "https://github.com/sponsors/gregberge"
}
},
+ "node_modules/@swc/helpers": {
+ "version": "0.5.17",
+ "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.17.tgz",
+ "integrity": "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.8.0"
+ }
+ },
"node_modules/@tootallnate/once": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
@@ -4572,9 +4860,9 @@
"license": "MIT"
},
"node_modules/@types/react": {
- "version": "19.1.13",
- "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.13.tgz",
- "integrity": "sha512-hHkbU/eoO3EG5/MZkuFSKmYqPbSVk5byPFa3e7y/8TybHiLMACgI8seVYlicwk7H5K/rI2px9xrQp/C+AUDTiQ==",
+ "version": "19.1.14",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.14.tgz",
+ "integrity": "sha512-ukd93VGzaNPMAUPy0gRDSC57UuQbnH9Kussp7HBjM06YFi9uZTFhOvMSO2OKqXm1rSgzOE+pVx1k1PYHGwlc8Q==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5057,6 +5345,849 @@
"integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
"license": "Apache-2.0"
},
+ "node_modules/@zag-js/accordion": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/accordion/-/accordion-1.24.1.tgz",
+ "integrity": "sha512-JOlmXjO+1tTlyeZ93S+chIlV8uDr8fodj3/XCjLFHc/G116O8cN18KG0Ug9pImy1vT2Kkwb9Ag9QOTyUAXM3PA==",
+ "license": "MIT",
+ "dependencies": {
+ "@zag-js/anatomy": "1.24.1",
+ "@zag-js/core": "1.24.1",
+ "@zag-js/dom-query": "1.24.1",
+ "@zag-js/types": "1.24.1",
+ "@zag-js/utils": "1.24.1"
+ }
+ },
+ "node_modules/@zag-js/anatomy": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/anatomy/-/anatomy-1.24.1.tgz",
+ "integrity": "sha512-mRkpetNjnjgvdyEX880AOjhMhcgdRMLjOM+aEgoDRnhultC4im+nriNoCShJLeVpwsRrEQCU7YVXO4mZaqWUMg==",
+ "license": "MIT"
+ },
+ "node_modules/@zag-js/angle-slider": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/angle-slider/-/angle-slider-1.24.1.tgz",
+ "integrity": "sha512-pcWIpVZDMbujMK0nFaKa0wd7uGkP4E5D7x8cmvoiKMT4E1vZpg2kZeN9qmdnhum9ye7nb80IPKhcDl9C0JuSLw==",
+ "license": "MIT",
+ "dependencies": {
+ "@zag-js/anatomy": "1.24.1",
+ "@zag-js/core": "1.24.1",
+ "@zag-js/dom-query": "1.24.1",
+ "@zag-js/rect-utils": "1.24.1",
+ "@zag-js/types": "1.24.1",
+ "@zag-js/utils": "1.24.1"
+ }
+ },
+ "node_modules/@zag-js/aria-hidden": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/aria-hidden/-/aria-hidden-1.24.1.tgz",
+ "integrity": "sha512-R/a80ZjITZi4rotN7Q9+RTCYCdmJZf3rZi9bObczbR7h5j5GSsjikByUjksWAYzPvFxQxBWTs4GqlCI9dU2f9A==",
+ "license": "MIT"
+ },
+ "node_modules/@zag-js/async-list": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/async-list/-/async-list-1.24.1.tgz",
+ "integrity": "sha512-EZE3wORLOhMtT1tiDA0kTHrtY7XNkOoNyn5jCs8Ec1GfqIHSRzQB+2jt+wPIBwUhDcgQksXgOy91s/i9XfQe1g==",
+ "license": "MIT",
+ "dependencies": {
+ "@zag-js/core": "1.24.1",
+ "@zag-js/utils": "1.24.1"
+ }
+ },
+ "node_modules/@zag-js/auto-resize": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/auto-resize/-/auto-resize-1.24.1.tgz",
+ "integrity": "sha512-OH1VTeObddMiN2PUK+7SpkPV8Znlkdq+10odmbbe9K2MZPh352RNcPYytIZTWT0X4/4czhn2MTU6IhZ2lZp2hw==",
+ "license": "MIT",
+ "dependencies": {
+ "@zag-js/dom-query": "1.24.1"
+ }
+ },
+ "node_modules/@zag-js/avatar": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/avatar/-/avatar-1.24.1.tgz",
+ "integrity": "sha512-zYGUdkxsMoN8OAFYYCZBrsQx++kjWEBdYZew4en9g8vw7yonNjzywtfF/Vd3Dv6mUZ2r5JtaltbK/qp4aBdZvg==",
+ "license": "MIT",
+ "dependencies": {
+ "@zag-js/anatomy": "1.24.1",
+ "@zag-js/core": "1.24.1",
+ "@zag-js/dom-query": "1.24.1",
+ "@zag-js/types": "1.24.1",
+ "@zag-js/utils": "1.24.1"
+ }
+ },
+ "node_modules/@zag-js/carousel": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/carousel/-/carousel-1.24.1.tgz",
+ "integrity": "sha512-7WGlFtF4JoIK4kduiFgucdTe9eD+884d9BF9Sh308MlpiL0KZnO3l3Pyq58yi4R0KUTy7zILLGSsUesifVAuEA==",
+ "license": "MIT",
+ "dependencies": {
+ "@zag-js/anatomy": "1.24.1",
+ "@zag-js/core": "1.24.1",
+ "@zag-js/dom-query": "1.24.1",
+ "@zag-js/scroll-snap": "1.24.1",
+ "@zag-js/types": "1.24.1",
+ "@zag-js/utils": "1.24.1"
+ }
+ },
+ "node_modules/@zag-js/checkbox": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/checkbox/-/checkbox-1.24.1.tgz",
+ "integrity": "sha512-eU/RKaO44Tgt1iTGg26M2nUd12p+gTuq2rNjqVuPfN3dvRzYNi5rGKk6yTQI2T4DH4D+fDMz6gUneiBuGcVoJA==",
+ "license": "MIT",
+ "dependencies": {
+ "@zag-js/anatomy": "1.24.1",
+ "@zag-js/core": "1.24.1",
+ "@zag-js/dom-query": "1.24.1",
+ "@zag-js/focus-visible": "1.24.1",
+ "@zag-js/types": "1.24.1",
+ "@zag-js/utils": "1.24.1"
+ }
+ },
+ "node_modules/@zag-js/clipboard": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/clipboard/-/clipboard-1.24.1.tgz",
+ "integrity": "sha512-GfmjjiEDS9NB6Wo/ThbbzO10BgOYzTSeG00a/pJ5QpvSgvOCz+oLV5NBQHOd8XjOw0e0GQEyfsif0i6wQExSIQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@zag-js/anatomy": "1.24.1",
+ "@zag-js/core": "1.24.1",
+ "@zag-js/dom-query": "1.24.1",
+ "@zag-js/types": "1.24.1",
+ "@zag-js/utils": "1.24.1"
+ }
+ },
+ "node_modules/@zag-js/collapsible": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/collapsible/-/collapsible-1.24.1.tgz",
+ "integrity": "sha512-U6AP4nE6jwMC3kirFQmOL9i3CSfp8mJqb+Gv3opbClpjqCa8hn9v4PNiimKmd0Qr3kynuVRpAshaUaLeg33YiA==",
+ "license": "MIT",
+ "dependencies": {
+ "@zag-js/anatomy": "1.24.1",
+ "@zag-js/core": "1.24.1",
+ "@zag-js/dom-query": "1.24.1",
+ "@zag-js/types": "1.24.1",
+ "@zag-js/utils": "1.24.1"
+ }
+ },
+ "node_modules/@zag-js/collection": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/collection/-/collection-1.24.1.tgz",
+ "integrity": "sha512-aWNDI0iZ5Wb8vCZLJWPjRQOK5/B2wvhhR1+pYaScxZfWy2das2DVKam8tnR0p1GrRfBi/kZNaCXtvM1ZNPjlOQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@zag-js/utils": "1.24.1"
+ }
+ },
+ "node_modules/@zag-js/color-picker": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/color-picker/-/color-picker-1.24.1.tgz",
+ "integrity": "sha512-vLW11JrySJR5fGeXXdmlCJuNm7yE0Tsx/SjkX0WBnrPC4PYaGfiwF7LT59bs5XsQp65kEaIca6mw/J0Bouc8Sw==",
+ "license": "MIT",
+ "dependencies": {
+ "@zag-js/anatomy": "1.24.1",
+ "@zag-js/color-utils": "1.24.1",
+ "@zag-js/core": "1.24.1",
+ "@zag-js/dismissable": "1.24.1",
+ "@zag-js/dom-query": "1.24.1",
+ "@zag-js/popper": "1.24.1",
+ "@zag-js/types": "1.24.1",
+ "@zag-js/utils": "1.24.1"
+ }
+ },
+ "node_modules/@zag-js/color-utils": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/color-utils/-/color-utils-1.24.1.tgz",
+ "integrity": "sha512-8KPTa3I9+WbDLrYPH5knEYMW3CjAC20ikosdrgYshGTFIPuqinAnsxD7H0fZO4I+jSjuhtIyNQuvgwJar9A2rg==",
+ "license": "MIT",
+ "dependencies": {
+ "@zag-js/utils": "1.24.1"
+ }
+ },
+ "node_modules/@zag-js/combobox": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/combobox/-/combobox-1.24.1.tgz",
+ "integrity": "sha512-BhjQOL/Ssr5lQLPCyEersCqOqllFlNuR8nvQOgl1u8Y0EaZR+ZPQbgXum6kE5AuH3SlcY9+1kDK1ZLswOagL1Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@zag-js/anatomy": "1.24.1",
+ "@zag-js/aria-hidden": "1.24.1",
+ "@zag-js/collection": "1.24.1",
+ "@zag-js/core": "1.24.1",
+ "@zag-js/dismissable": "1.24.1",
+ "@zag-js/dom-query": "1.24.1",
+ "@zag-js/popper": "1.24.1",
+ "@zag-js/types": "1.24.1",
+ "@zag-js/utils": "1.24.1"
+ }
+ },
+ "node_modules/@zag-js/core": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/core/-/core-1.24.1.tgz",
+ "integrity": "sha512-0e7QdxBaY9PMHQfDY/Xu/7MKyRxNsriNscpkZI7L4MHMGPmxdfedGBpteI3gFfqWsdJ5NvvpqxdLUwkbYk5Q5A==",
+ "license": "MIT",
+ "dependencies": {
+ "@zag-js/dom-query": "1.24.1",
+ "@zag-js/utils": "1.24.1"
+ }
+ },
+ "node_modules/@zag-js/date-picker": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/date-picker/-/date-picker-1.24.1.tgz",
+ "integrity": "sha512-8jLv074sGJQw4L+5YTDv7l2bwb1x9E7YhvklCffhf/7OzW7RB/ELkljFhmjueuJp7W/sD4xhJyigjp/mDEg1XA==",
+ "license": "MIT",
+ "dependencies": {
+ "@zag-js/anatomy": "1.24.1",
+ "@zag-js/core": "1.24.1",
+ "@zag-js/date-utils": "1.24.1",
+ "@zag-js/dismissable": "1.24.1",
+ "@zag-js/dom-query": "1.24.1",
+ "@zag-js/live-region": "1.24.1",
+ "@zag-js/popper": "1.24.1",
+ "@zag-js/types": "1.24.1",
+ "@zag-js/utils": "1.24.1"
+ },
+ "peerDependencies": {
+ "@internationalized/date": ">=3.0.0"
+ }
+ },
+ "node_modules/@zag-js/date-utils": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/date-utils/-/date-utils-1.24.1.tgz",
+ "integrity": "sha512-Rgll6P4Imq479WxH3uMvwQri4o4lF2cxWX2Hka/W7Nhv1DhPBnmfBw30INyWPXzx5agEVzKdGX/br8MU5DV33Q==",
+ "license": "MIT",
+ "peerDependencies": {
+ "@internationalized/date": ">=3.0.0"
+ }
+ },
+ "node_modules/@zag-js/dialog": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/dialog/-/dialog-1.24.1.tgz",
+ "integrity": "sha512-ITzOoXBC92vIkhNvxM0GMMKwboLLk7hSU9dsplk/X9bpX+fQywgc6d5O4I7WHCMmgUWI5y3/aWjqsWATWwufWg==",
+ "license": "MIT",
+ "dependencies": {
+ "@zag-js/anatomy": "1.24.1",
+ "@zag-js/aria-hidden": "1.24.1",
+ "@zag-js/core": "1.24.1",
+ "@zag-js/dismissable": "1.24.1",
+ "@zag-js/dom-query": "1.24.1",
+ "@zag-js/focus-trap": "1.24.1",
+ "@zag-js/remove-scroll": "1.24.1",
+ "@zag-js/types": "1.24.1",
+ "@zag-js/utils": "1.24.1"
+ }
+ },
+ "node_modules/@zag-js/dismissable": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/dismissable/-/dismissable-1.24.1.tgz",
+ "integrity": "sha512-Oca+nbwaqHGt0rmkKfmpExwL+kVYLbVi6fxhzHP1WBrip//IUThoTrPH/gqB51o1DT1z/VNE+8BhWhsHSgkQfw==",
+ "license": "MIT",
+ "dependencies": {
+ "@zag-js/dom-query": "1.24.1",
+ "@zag-js/interact-outside": "1.24.1",
+ "@zag-js/utils": "1.24.1"
+ }
+ },
+ "node_modules/@zag-js/dom-query": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/dom-query/-/dom-query-1.24.1.tgz",
+ "integrity": "sha512-ww3tS5hrB2s6ywGtjMjSOajP19CnQOH0IAGgzjE+lbvDD+ZroXWn9O3Z/v2kTfKNwZFQ4TOb8oSymuSRQsFOYg==",
+ "license": "MIT",
+ "dependencies": {
+ "@zag-js/types": "1.24.1"
+ }
+ },
+ "node_modules/@zag-js/editable": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/editable/-/editable-1.24.1.tgz",
+ "integrity": "sha512-SV8X7jd95ZAx4VnlhoEcbAiW8jhoGkPf7L0JFB2KWX+NFacEVCKGQpDjZpdzD6j7C10750v3blbkjr6iyzeIqw==",
+ "license": "MIT",
+ "dependencies": {
+ "@zag-js/anatomy": "1.24.1",
+ "@zag-js/core": "1.24.1",
+ "@zag-js/dom-query": "1.24.1",
+ "@zag-js/interact-outside": "1.24.1",
+ "@zag-js/types": "1.24.1",
+ "@zag-js/utils": "1.24.1"
+ }
+ },
+ "node_modules/@zag-js/file-upload": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/file-upload/-/file-upload-1.24.1.tgz",
+ "integrity": "sha512-Un0+qDlkoC93pf7/Nvq9DBVKR6PBKybbNE/En/PC4XLJybK448bY85UuEdBPgXEoR6hIGA3t8NdeHZ+PUoZXIw==",
+ "license": "MIT",
+ "dependencies": {
+ "@zag-js/anatomy": "1.24.1",
+ "@zag-js/core": "1.24.1",
+ "@zag-js/dom-query": "1.24.1",
+ "@zag-js/file-utils": "1.24.1",
+ "@zag-js/i18n-utils": "1.24.1",
+ "@zag-js/types": "1.24.1",
+ "@zag-js/utils": "1.24.1"
+ }
+ },
+ "node_modules/@zag-js/file-utils": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/file-utils/-/file-utils-1.24.1.tgz",
+ "integrity": "sha512-ydMct0iyd4uPxf+NP4gfyPq1gJlvW29WWIm5ez9El9L+z5tDBhXYNc73s2kSdDBKXkO4fp6Mwoqbz/wZOw99/Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@zag-js/i18n-utils": "1.24.1"
+ }
+ },
+ "node_modules/@zag-js/floating-panel": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/floating-panel/-/floating-panel-1.24.1.tgz",
+ "integrity": "sha512-qVVtnKCQE2C//0q7utRvpfRKsZedL8gnSqwHDX4ie8nKmLLSLn6jDGuAzxrscsGPHEjCOru9NlTHlAAMtB3ybQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@zag-js/anatomy": "1.24.1",
+ "@zag-js/core": "1.24.1",
+ "@zag-js/dom-query": "1.24.1",
+ "@zag-js/popper": "1.24.1",
+ "@zag-js/rect-utils": "1.24.1",
+ "@zag-js/store": "1.24.1",
+ "@zag-js/types": "1.24.1",
+ "@zag-js/utils": "1.24.1"
+ }
+ },
+ "node_modules/@zag-js/focus-trap": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/focus-trap/-/focus-trap-1.24.1.tgz",
+ "integrity": "sha512-cpgYWWaiKx9eycm4Mahv6Dng5+CbDiTtyz/gnbZUv6sqcM4b9N+UqdmBdWYPLHV4gZYrzuO+X4P1C/Ew/rA+xg==",
+ "license": "MIT",
+ "dependencies": {
+ "@zag-js/dom-query": "1.24.1"
+ }
+ },
+ "node_modules/@zag-js/focus-visible": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/focus-visible/-/focus-visible-1.24.1.tgz",
+ "integrity": "sha512-HzUf8cRl5tbIil6rVe24CxC3s1pdFGpfYSt5NyaFoFd0HuWhobp+De1kVUvlLU0DDUU6Kgw6DB1w8APEPzb8gg==",
+ "license": "MIT",
+ "dependencies": {
+ "@zag-js/dom-query": "1.24.1"
+ }
+ },
+ "node_modules/@zag-js/highlight-word": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/highlight-word/-/highlight-word-1.24.1.tgz",
+ "integrity": "sha512-paDF/sWKDMMclpCzrG60vD4/AFQ3EOu2lzQxl7S21uD/B8Rir4w1CkxK/9+cm1Bu7mj4mkR4t+VJxycEZ7YuIw==",
+ "license": "MIT"
+ },
+ "node_modules/@zag-js/hover-card": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/hover-card/-/hover-card-1.24.1.tgz",
+ "integrity": "sha512-zXTcLEb8YOFoEjDMsMcxqidRDN2fY0C94j+XdZYj5eZtKBIgbyCyAjvZrEu9yyPqqrXCNwYU0fTFjac3t9IV4g==",
+ "license": "MIT",
+ "dependencies": {
+ "@zag-js/anatomy": "1.24.1",
+ "@zag-js/core": "1.24.1",
+ "@zag-js/dismissable": "1.24.1",
+ "@zag-js/dom-query": "1.24.1",
+ "@zag-js/popper": "1.24.1",
+ "@zag-js/types": "1.24.1",
+ "@zag-js/utils": "1.24.1"
+ }
+ },
+ "node_modules/@zag-js/i18n-utils": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/i18n-utils/-/i18n-utils-1.24.1.tgz",
+ "integrity": "sha512-dI9M73FTJcE40s/TPBLLKsypmBoMNe5NoRSBW64PWdmn0fCq65qcAUMgwQ0MVenh4oofoDYyffl8pIStr8T1tA==",
+ "license": "MIT",
+ "dependencies": {
+ "@zag-js/dom-query": "1.24.1"
+ }
+ },
+ "node_modules/@zag-js/interact-outside": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/interact-outside/-/interact-outside-1.24.1.tgz",
+ "integrity": "sha512-xKyGT295WVrlJaOPCVBrundlXqL4YEvl36SHNSi7EZs/AYpzxR/aBtnFCRN1/7nWvdqvfGs7ya0kl/ly0H7VBg==",
+ "license": "MIT",
+ "dependencies": {
+ "@zag-js/dom-query": "1.24.1",
+ "@zag-js/utils": "1.24.1"
+ }
+ },
+ "node_modules/@zag-js/json-tree-utils": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/json-tree-utils/-/json-tree-utils-1.24.1.tgz",
+ "integrity": "sha512-TWVg+Y4fLr9o0YaB3OnX4xmV91Te/vzRwnNKntsz3GIWJ5fLNngg4hm3E+eaYnJIlKMHrvJv4T/UB4IGYUF+EQ==",
+ "license": "MIT"
+ },
+ "node_modules/@zag-js/listbox": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/listbox/-/listbox-1.24.1.tgz",
+ "integrity": "sha512-fTJ125SWVZ+NxgkT6s8LWpdJQMeADk9Lm+Ur1pi0mZnRCmuHI3nwPkg1dfqynjVyrKs6P8wBmUxt3hlr2cc6TQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@zag-js/anatomy": "1.24.1",
+ "@zag-js/collection": "1.24.1",
+ "@zag-js/core": "1.24.1",
+ "@zag-js/dom-query": "1.24.1",
+ "@zag-js/focus-visible": "1.24.1",
+ "@zag-js/types": "1.24.1",
+ "@zag-js/utils": "1.24.1"
+ }
+ },
+ "node_modules/@zag-js/live-region": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/live-region/-/live-region-1.24.1.tgz",
+ "integrity": "sha512-A/55dOyRhfdgVtCBP05Uf2UGz/58H0TMWP69GdVYM4uADtfCLNPy6yxHAt9p334qJsWicg/YWSzBdEAVTThNag==",
+ "license": "MIT"
+ },
+ "node_modules/@zag-js/menu": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/menu/-/menu-1.24.1.tgz",
+ "integrity": "sha512-XPNQbkIxSbNuYNLLQZlgXbj6Ptn2XHT5BXkUSw2hSbIg35S7Lq8gckiZVtxmUiX8zbv7krTBSD7zThSnwx1TOA==",
+ "license": "MIT",
+ "dependencies": {
+ "@zag-js/anatomy": "1.24.1",
+ "@zag-js/core": "1.24.1",
+ "@zag-js/dismissable": "1.24.1",
+ "@zag-js/dom-query": "1.24.1",
+ "@zag-js/popper": "1.24.1",
+ "@zag-js/rect-utils": "1.24.1",
+ "@zag-js/types": "1.24.1",
+ "@zag-js/utils": "1.24.1"
+ }
+ },
+ "node_modules/@zag-js/number-input": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/number-input/-/number-input-1.24.1.tgz",
+ "integrity": "sha512-F5nX0VvuRmSxddJ8byHYp4OSHLU1C5Fv1rT4L1AnSXud8q6C+zCy4Vy8772pUKNobZf0q8Ru4SgnOe5TQcvRpg==",
+ "license": "MIT",
+ "dependencies": {
+ "@internationalized/number": "3.6.5",
+ "@zag-js/anatomy": "1.24.1",
+ "@zag-js/core": "1.24.1",
+ "@zag-js/dom-query": "1.24.1",
+ "@zag-js/types": "1.24.1",
+ "@zag-js/utils": "1.24.1"
+ }
+ },
+ "node_modules/@zag-js/pagination": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/pagination/-/pagination-1.24.1.tgz",
+ "integrity": "sha512-IO9Q5SiYmk00pjJAD18qFjOkpN1qb9iSeuX6A9Bdo8sMBFSigI6c7tGo1MPYGENma3b+aX7LbUpt8hYFufqUow==",
+ "license": "MIT",
+ "dependencies": {
+ "@zag-js/anatomy": "1.24.1",
+ "@zag-js/core": "1.24.1",
+ "@zag-js/dom-query": "1.24.1",
+ "@zag-js/types": "1.24.1",
+ "@zag-js/utils": "1.24.1"
+ }
+ },
+ "node_modules/@zag-js/password-input": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/password-input/-/password-input-1.24.1.tgz",
+ "integrity": "sha512-TWgTRNsaAZ6IE1QmCQKhPY6uSRPDGjgdxGSpG7wOuYsbxHw/hD3v5sUAhAo9teIL0wV8COZIh6hyG2UAAgT2kg==",
+ "license": "MIT",
+ "dependencies": {
+ "@zag-js/anatomy": "1.24.1",
+ "@zag-js/core": "1.24.1",
+ "@zag-js/dom-query": "1.24.1",
+ "@zag-js/types": "1.24.1",
+ "@zag-js/utils": "1.24.1"
+ }
+ },
+ "node_modules/@zag-js/pin-input": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/pin-input/-/pin-input-1.24.1.tgz",
+ "integrity": "sha512-ytJK/1ekU06VmOpe7KdSkIQ3If+fffrA/EpbktZBuRepsz80QHB64+X6QQ6H1lEMbLWPNZ0TuFPaYhFfqH7cTQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@zag-js/anatomy": "1.24.1",
+ "@zag-js/core": "1.24.1",
+ "@zag-js/dom-query": "1.24.1",
+ "@zag-js/types": "1.24.1",
+ "@zag-js/utils": "1.24.1"
+ }
+ },
+ "node_modules/@zag-js/popover": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/popover/-/popover-1.24.1.tgz",
+ "integrity": "sha512-auNy7/5/VMeNUYbKfcvSz7OHkbrUWdODtA6gB/d/weAxvEHyMSk0+Ms4c5lmN8KDChrBAPJs4CfKSPv1U4I4zw==",
+ "license": "MIT",
+ "dependencies": {
+ "@zag-js/anatomy": "1.24.1",
+ "@zag-js/aria-hidden": "1.24.1",
+ "@zag-js/core": "1.24.1",
+ "@zag-js/dismissable": "1.24.1",
+ "@zag-js/dom-query": "1.24.1",
+ "@zag-js/focus-trap": "1.24.1",
+ "@zag-js/popper": "1.24.1",
+ "@zag-js/remove-scroll": "1.24.1",
+ "@zag-js/types": "1.24.1",
+ "@zag-js/utils": "1.24.1"
+ }
+ },
+ "node_modules/@zag-js/popper": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/popper/-/popper-1.24.1.tgz",
+ "integrity": "sha512-VWbOjBy/haIDmXhwfyMT1rRcQhSfYmPX67YzQwLA7863kXkoTH1r9fR+1f9uq3VuXQLhw2Cg/lkSzlkg9TIp+g==",
+ "license": "MIT",
+ "dependencies": {
+ "@floating-ui/dom": "1.7.4",
+ "@zag-js/dom-query": "1.24.1",
+ "@zag-js/utils": "1.24.1"
+ }
+ },
+ "node_modules/@zag-js/presence": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/presence/-/presence-1.24.1.tgz",
+ "integrity": "sha512-MMcw4iOsGdSGM3hmvd0gcMuk1X9rE/xE3Ndm113vc+lkhk93COiuJPz1ZpyBb8l1CIJwlZ5nnRpx4Lx8Do6aNQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@zag-js/core": "1.24.1",
+ "@zag-js/dom-query": "1.24.1",
+ "@zag-js/types": "1.24.1"
+ }
+ },
+ "node_modules/@zag-js/progress": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/progress/-/progress-1.24.1.tgz",
+ "integrity": "sha512-ocp6zkl5Y3sVMzPVIRLZtqtDfMkc365JYIrOUsdUqwJMvZJhSP1IbsbtIJS1ycOaHfLdK27E//GVyjxA7SHGhw==",
+ "license": "MIT",
+ "dependencies": {
+ "@zag-js/anatomy": "1.24.1",
+ "@zag-js/core": "1.24.1",
+ "@zag-js/dom-query": "1.24.1",
+ "@zag-js/types": "1.24.1",
+ "@zag-js/utils": "1.24.1"
+ }
+ },
+ "node_modules/@zag-js/qr-code": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/qr-code/-/qr-code-1.24.1.tgz",
+ "integrity": "sha512-Hy722PNwLs1tnXFQkTqtrEILypZcUDiC8YdvGn57mmmvPGtZdAzhs4G8ghoP9ahJ02ztREjIt8Qnmct344fALA==",
+ "license": "MIT",
+ "dependencies": {
+ "@zag-js/anatomy": "1.24.1",
+ "@zag-js/core": "1.24.1",
+ "@zag-js/dom-query": "1.24.1",
+ "@zag-js/types": "1.24.1",
+ "@zag-js/utils": "1.24.1",
+ "proxy-memoize": "3.0.1",
+ "uqr": "0.1.2"
+ }
+ },
+ "node_modules/@zag-js/radio-group": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/radio-group/-/radio-group-1.24.1.tgz",
+ "integrity": "sha512-49S+nmaZzjf98206VeevmfTNTf+WjLveKCOGz5SVWPX3R8maZJgka1ZlIDuWlnRK1JfL+4Ls10/ZxAk3HrI7sg==",
+ "license": "MIT",
+ "dependencies": {
+ "@zag-js/anatomy": "1.24.1",
+ "@zag-js/core": "1.24.1",
+ "@zag-js/dom-query": "1.24.1",
+ "@zag-js/focus-visible": "1.24.1",
+ "@zag-js/types": "1.24.1",
+ "@zag-js/utils": "1.24.1"
+ }
+ },
+ "node_modules/@zag-js/rating-group": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/rating-group/-/rating-group-1.24.1.tgz",
+ "integrity": "sha512-EGGObQDmulon5N9s5ElGZv9yQmky10s7ps7wyVgW1+vJTsWr8gaoFMJwf6nbXOsUjqW8iDuzsF68Rel9CgjxIQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@zag-js/anatomy": "1.24.1",
+ "@zag-js/core": "1.24.1",
+ "@zag-js/dom-query": "1.24.1",
+ "@zag-js/types": "1.24.1",
+ "@zag-js/utils": "1.24.1"
+ }
+ },
+ "node_modules/@zag-js/react": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/react/-/react-1.24.1.tgz",
+ "integrity": "sha512-oiaiuR7FKVHOEJtzoYZ2QBQ5+J/j086eebhLCIWkh2ie6QBJM73LHsMUxfZp2D2G1is8EoyUhrH3v2MPMlYMXg==",
+ "license": "MIT",
+ "dependencies": {
+ "@zag-js/core": "1.24.1",
+ "@zag-js/store": "1.24.1",
+ "@zag-js/types": "1.24.1",
+ "@zag-js/utils": "1.24.1"
+ },
+ "peerDependencies": {
+ "react": ">=18.0.0",
+ "react-dom": ">=18.0.0"
+ }
+ },
+ "node_modules/@zag-js/rect-utils": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/rect-utils/-/rect-utils-1.24.1.tgz",
+ "integrity": "sha512-6JkVq71feW9Yyt7Pynyf199ugDFVgRT+jPpg2ECRHgY2oHvn5atBP3PA1uM2cx7ZydiajnBgk4n1ePnGYD2xNw==",
+ "license": "MIT"
+ },
+ "node_modules/@zag-js/remove-scroll": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/remove-scroll/-/remove-scroll-1.24.1.tgz",
+ "integrity": "sha512-SAK3ZsnDUcJve5q3OHsMjrl0JOW9sv1fGbBFXyyid9Uu8s79LMh7EZw2na5jXDNzdMWmk1Euu82OaZSlLl9Kew==",
+ "license": "MIT",
+ "dependencies": {
+ "@zag-js/dom-query": "1.24.1"
+ }
+ },
+ "node_modules/@zag-js/scroll-area": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/scroll-area/-/scroll-area-1.24.1.tgz",
+ "integrity": "sha512-eRZKs6Yyl8Zp+YkIxzr1QsgRDDsNMxXshwpIzt/L5xK+EV34mv760FOkX/unG/WxQ1Z0gBogPm9ZY53/m4bhJA==",
+ "license": "MIT",
+ "dependencies": {
+ "@zag-js/anatomy": "1.24.1",
+ "@zag-js/core": "1.24.1",
+ "@zag-js/dom-query": "1.24.1",
+ "@zag-js/types": "1.24.1",
+ "@zag-js/utils": "1.24.1"
+ }
+ },
+ "node_modules/@zag-js/scroll-snap": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/scroll-snap/-/scroll-snap-1.24.1.tgz",
+ "integrity": "sha512-Co/NlccX4XDg6OzQeRgv8bANbsCkMog1FZ0BveN8+2Mso/svOLVkB6UGswWZk/DyqY8DlxvfZAdPltmQpu5h8w==",
+ "license": "MIT",
+ "dependencies": {
+ "@zag-js/dom-query": "1.24.1"
+ }
+ },
+ "node_modules/@zag-js/select": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/select/-/select-1.24.1.tgz",
+ "integrity": "sha512-boU5m3Qd//EGe1M2i4a2SbCXQpcPP9Ewe6DvjEpOhxP+dwdbZzDrtRBdZ4ByhMJ+1bT5B6TqsfvsQHhAI0LunA==",
+ "license": "MIT",
+ "dependencies": {
+ "@zag-js/anatomy": "1.24.1",
+ "@zag-js/collection": "1.24.1",
+ "@zag-js/core": "1.24.1",
+ "@zag-js/dismissable": "1.24.1",
+ "@zag-js/dom-query": "1.24.1",
+ "@zag-js/popper": "1.24.1",
+ "@zag-js/types": "1.24.1",
+ "@zag-js/utils": "1.24.1"
+ }
+ },
+ "node_modules/@zag-js/signature-pad": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/signature-pad/-/signature-pad-1.24.1.tgz",
+ "integrity": "sha512-CRTcefUGMwdhxqmB8yGkHU3gweMfXw0CCoMc0LhMmla12hMJOBi+mpMVaBJnQHYGSG8uFUh2IKdPbe2Vtp4T3Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@zag-js/anatomy": "1.24.1",
+ "@zag-js/core": "1.24.1",
+ "@zag-js/dom-query": "1.24.1",
+ "@zag-js/types": "1.24.1",
+ "@zag-js/utils": "1.24.1",
+ "perfect-freehand": "^1.2.2"
+ }
+ },
+ "node_modules/@zag-js/slider": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/slider/-/slider-1.24.1.tgz",
+ "integrity": "sha512-HClZBKcT+9tihZArRNRj35YOIUbztCcyYzggYYIrK4+OFD0RLYihA+yBO4hxs7xZVenzma9i0pc6q/Vo4z2tvA==",
+ "license": "MIT",
+ "dependencies": {
+ "@zag-js/anatomy": "1.24.1",
+ "@zag-js/core": "1.24.1",
+ "@zag-js/dom-query": "1.24.1",
+ "@zag-js/types": "1.24.1",
+ "@zag-js/utils": "1.24.1"
+ }
+ },
+ "node_modules/@zag-js/splitter": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/splitter/-/splitter-1.24.1.tgz",
+ "integrity": "sha512-UUqiCD0T8kfgm/vRTY1QrPlrpxbzxqZ+8QvysUchnibmStetkHnuzAXC4ZD9jlJbToqzE4p1eLOiWGaVXRdB/Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@zag-js/anatomy": "1.24.1",
+ "@zag-js/core": "1.24.1",
+ "@zag-js/dom-query": "1.24.1",
+ "@zag-js/types": "1.24.1",
+ "@zag-js/utils": "1.24.1"
+ }
+ },
+ "node_modules/@zag-js/steps": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/steps/-/steps-1.24.1.tgz",
+ "integrity": "sha512-njL1SMKef0JfYzw5KUhpeVuzOtgBjSxVUwDrPR9s095WUCUiOYlxzqummg3VBY8IDuT/pS/K6LDSY11YCRzeNw==",
+ "license": "MIT",
+ "dependencies": {
+ "@zag-js/anatomy": "1.24.1",
+ "@zag-js/core": "1.24.1",
+ "@zag-js/dom-query": "1.24.1",
+ "@zag-js/types": "1.24.1",
+ "@zag-js/utils": "1.24.1"
+ }
+ },
+ "node_modules/@zag-js/store": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/store/-/store-1.24.1.tgz",
+ "integrity": "sha512-iVl+NX2CcxEDLL3hrj31mqSqBZYBqHEBqa/Z7FwKVoTImMQ1AabMF5XPreTtB8KFbaVJlNlM6D5qngDPpVj/xw==",
+ "license": "MIT",
+ "dependencies": {
+ "proxy-compare": "3.0.1"
+ }
+ },
+ "node_modules/@zag-js/switch": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/switch/-/switch-1.24.1.tgz",
+ "integrity": "sha512-RI2bG2AtsQ4ci8T7RA3XVSjd9urpNQXIwEatpa8cw9GCWFI421rt4Xcab5jy/IOu6VzXl6pwh11/cWAC/PBYCw==",
+ "license": "MIT",
+ "dependencies": {
+ "@zag-js/anatomy": "1.24.1",
+ "@zag-js/core": "1.24.1",
+ "@zag-js/dom-query": "1.24.1",
+ "@zag-js/focus-visible": "1.24.1",
+ "@zag-js/types": "1.24.1",
+ "@zag-js/utils": "1.24.1"
+ }
+ },
+ "node_modules/@zag-js/tabs": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/tabs/-/tabs-1.24.1.tgz",
+ "integrity": "sha512-RjdW4opxhvCWTwHoCqq+lfNCthiyPu376hto6j4Ybl/UN3UFTV4zfTbwbMbAH7dyqj8m1nkKxidLaO0Yhx3zZA==",
+ "license": "MIT",
+ "dependencies": {
+ "@zag-js/anatomy": "1.24.1",
+ "@zag-js/core": "1.24.1",
+ "@zag-js/dom-query": "1.24.1",
+ "@zag-js/types": "1.24.1",
+ "@zag-js/utils": "1.24.1"
+ }
+ },
+ "node_modules/@zag-js/tags-input": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/tags-input/-/tags-input-1.24.1.tgz",
+ "integrity": "sha512-HY1ebBZE2j3/fuzfKw4z/44S9WWe50auMWLlFg47j6zVBcyNdXEeMO1OvvfyfQFJOcvOKXGxW8Hi4MXGxLWqmA==",
+ "license": "MIT",
+ "dependencies": {
+ "@zag-js/anatomy": "1.24.1",
+ "@zag-js/auto-resize": "1.24.1",
+ "@zag-js/core": "1.24.1",
+ "@zag-js/dom-query": "1.24.1",
+ "@zag-js/interact-outside": "1.24.1",
+ "@zag-js/live-region": "1.24.1",
+ "@zag-js/types": "1.24.1",
+ "@zag-js/utils": "1.24.1"
+ }
+ },
+ "node_modules/@zag-js/timer": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/timer/-/timer-1.24.1.tgz",
+ "integrity": "sha512-cjD8+I8CgSugsj5DI+kqzgvuQ2vYeArRdjO3iSjB4AjR+j08W8NKZvr7aawhYq636vrE9LeJGbxxZ3DBV12ELw==",
+ "license": "MIT",
+ "dependencies": {
+ "@zag-js/anatomy": "1.24.1",
+ "@zag-js/core": "1.24.1",
+ "@zag-js/dom-query": "1.24.1",
+ "@zag-js/types": "1.24.1",
+ "@zag-js/utils": "1.24.1"
+ }
+ },
+ "node_modules/@zag-js/toast": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/toast/-/toast-1.24.1.tgz",
+ "integrity": "sha512-gmHv65EYdypfMoF9WYIp7Y8z6XN5tebXEdjIWF8bJBaqW5zPn2VLdUYpfXv7wrHW2YtSTnF/xtgIhJ7MIX7HxA==",
+ "license": "MIT",
+ "dependencies": {
+ "@zag-js/anatomy": "1.24.1",
+ "@zag-js/core": "1.24.1",
+ "@zag-js/dismissable": "1.24.1",
+ "@zag-js/dom-query": "1.24.1",
+ "@zag-js/types": "1.24.1",
+ "@zag-js/utils": "1.24.1"
+ }
+ },
+ "node_modules/@zag-js/toggle": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/toggle/-/toggle-1.24.1.tgz",
+ "integrity": "sha512-dMN9Q4XFqr7jPlUZsLCFdUc1rtW88FzUaXcFVaeNCy8y8XGc+MG9AJJqjBiBL9EUeeR+LIp8yUIhJQEEDBm0kw==",
+ "license": "MIT",
+ "dependencies": {
+ "@zag-js/anatomy": "1.24.1",
+ "@zag-js/core": "1.24.1",
+ "@zag-js/dom-query": "1.24.1",
+ "@zag-js/types": "1.24.1",
+ "@zag-js/utils": "1.24.1"
+ }
+ },
+ "node_modules/@zag-js/toggle-group": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/toggle-group/-/toggle-group-1.24.1.tgz",
+ "integrity": "sha512-GVBay9XzmXjp1GgAmHUMpeYq3iMMevH+n0TyC0NcRe00prAEL9S4/q9pVy0P33PIOa20dxcvQ/Q3Tf+n5PFQcg==",
+ "license": "MIT",
+ "dependencies": {
+ "@zag-js/anatomy": "1.24.1",
+ "@zag-js/core": "1.24.1",
+ "@zag-js/dom-query": "1.24.1",
+ "@zag-js/types": "1.24.1",
+ "@zag-js/utils": "1.24.1"
+ }
+ },
+ "node_modules/@zag-js/tooltip": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/tooltip/-/tooltip-1.24.1.tgz",
+ "integrity": "sha512-gdD5C9AF6JD8LC6mxXzUGWjnHqY3MS7ZvtNx/nuNGJAqKCD32dPT73fuv0up1UVh1yJhX4IrXg3H6q52Pm+jPw==",
+ "license": "MIT",
+ "dependencies": {
+ "@zag-js/anatomy": "1.24.1",
+ "@zag-js/core": "1.24.1",
+ "@zag-js/dom-query": "1.24.1",
+ "@zag-js/focus-visible": "1.24.1",
+ "@zag-js/popper": "1.24.1",
+ "@zag-js/types": "1.24.1",
+ "@zag-js/utils": "1.24.1"
+ }
+ },
+ "node_modules/@zag-js/tour": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/tour/-/tour-1.24.1.tgz",
+ "integrity": "sha512-e+UR8xauKyRhE6tA8gRsR1GuOn1QGjj2YAmtRC8lIb5tD+QrGCPy0jX2xBeR7M7eY1IPSSyi0gCUGE2CbaRK8Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@zag-js/anatomy": "1.24.1",
+ "@zag-js/core": "1.24.1",
+ "@zag-js/dismissable": "1.24.1",
+ "@zag-js/dom-query": "1.24.1",
+ "@zag-js/focus-trap": "1.24.1",
+ "@zag-js/interact-outside": "1.24.1",
+ "@zag-js/popper": "1.24.1",
+ "@zag-js/types": "1.24.1",
+ "@zag-js/utils": "1.24.1"
+ }
+ },
+ "node_modules/@zag-js/tree-view": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/tree-view/-/tree-view-1.24.1.tgz",
+ "integrity": "sha512-HXCoqW6j2RunFxaIVRevgRTrRUEP05lpdOvc1Smzne7sC2mczwIqN68Vei6e83gRhXSF80v6Fc4TcHdPiW6wJA==",
+ "license": "MIT",
+ "dependencies": {
+ "@zag-js/anatomy": "1.24.1",
+ "@zag-js/collection": "1.24.1",
+ "@zag-js/core": "1.24.1",
+ "@zag-js/dom-query": "1.24.1",
+ "@zag-js/types": "1.24.1",
+ "@zag-js/utils": "1.24.1"
+ }
+ },
+ "node_modules/@zag-js/types": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/types/-/types-1.24.1.tgz",
+ "integrity": "sha512-XyINtxe5JK7A+RtTmBdCQElNoElDiTw6NSWpjKZGRAXXGU9HIZ9JIFeaS77uq1aVs0JhAOFwqJiPs2NJzaYHLA==",
+ "license": "MIT",
+ "dependencies": {
+ "csstype": "3.1.3"
+ }
+ },
+ "node_modules/@zag-js/utils": {
+ "version": "1.24.1",
+ "resolved": "https://registry.npmjs.org/@zag-js/utils/-/utils-1.24.1.tgz",
+ "integrity": "sha512-4nU9lfFlLLW/4T+/HaP+HdHYFeWvacxSVcccv0JSf+ZTC110IldV48kZELP+wFg9xDL/jCPPjlRtO1K64EIwgA==",
+ "license": "MIT"
+ },
"node_modules/abab": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz",
@@ -5330,18 +6461,6 @@
"node": ">= 8"
}
},
- "node_modules/anymatch/node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "license": "MIT",
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
"node_modules/arg": {
"version": "5.0.2",
"resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
@@ -6660,9 +7779,9 @@
}
},
"node_modules/convert-source-map": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
- "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
+ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
"license": "MIT"
},
"node_modules/cookie": {
@@ -7163,7 +8282,6 @@
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
- "dev": true,
"license": "MIT"
},
"node_modules/damerau-levenshtein": {
@@ -7457,15 +8575,15 @@
}
},
"node_modules/doctrine": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
- "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
"license": "Apache-2.0",
"dependencies": {
"esutils": "^2.0.2"
},
"engines": {
- "node": ">=6.0.0"
+ "node": ">=0.10.0"
}
},
"node_modules/dom-converter": {
@@ -8137,18 +9255,6 @@
"ms": "^2.1.1"
}
},
- "node_modules/eslint-plugin-import/node_modules/doctrine": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
- "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
- "license": "Apache-2.0",
- "dependencies": {
- "esutils": "^2.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/eslint-plugin-jsx-a11y": {
"version": "6.10.2",
"resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz",
@@ -8239,18 +9345,6 @@
"eslint": ">=8.40"
}
},
- "node_modules/eslint-plugin-react/node_modules/doctrine": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
- "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
- "license": "Apache-2.0",
- "dependencies": {
- "esutils": "^2.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/eslint-plugin-react/node_modules/resolve": {
"version": "2.0.0-next.5",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz",
@@ -8560,6 +9654,12 @@
"integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
"license": "MIT"
},
+ "node_modules/fast-safe-stringify": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz",
+ "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==",
+ "license": "MIT"
+ },
"node_modules/fast-uri": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz",
@@ -8606,24 +9706,6 @@
"bser": "2.1.1"
}
},
- "node_modules/fdir": {
- "version": "6.5.0",
- "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
- "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12.0.0"
- },
- "peerDependencies": {
- "picomatch": "^3 || ^4"
- },
- "peerDependenciesMeta": {
- "picomatch": {
- "optional": true
- }
- }
- },
"node_modules/file-entry-cache": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
@@ -8775,6 +9857,12 @@
"url": "https://github.com/avajs/find-cache-dir?sponsor=1"
}
},
+ "node_modules/find-root": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",
+ "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==",
+ "license": "MIT"
+ },
"node_modules/find-up": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
@@ -9341,6 +10429,13 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/globrex": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz",
+ "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/gopd": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
@@ -9494,6 +10589,15 @@
"integrity": "sha512-EmBBpvdYh/4XxsnUybsPag6VikPYnN30td+vQk+GI3qpahVEG9+gTkG0aXVxTjBqQ5T6ijbWIu77O+C5WFWsnA==",
"license": "MIT"
},
+ "node_modules/hoist-non-react-statics": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
+ "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "react-is": "^16.7.0"
+ }
+ },
"node_modules/hoopy": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz",
@@ -11129,18 +12233,6 @@
"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
}
},
- "node_modules/jest-util/node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "license": "MIT",
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
"node_modules/jest-validate": {
"version": "27.5.1",
"resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz",
@@ -11369,18 +12461,6 @@
"node": ">=8"
}
},
- "node_modules/jest-watch-typeahead/node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "license": "MIT",
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
"node_modules/jest-watch-typeahead/node_modules/pretty-format": {
"version": "28.1.3",
"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz",
@@ -12035,18 +13115,6 @@
"node": ">=8.6"
}
},
- "node_modules/micromatch/node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "license": "MIT",
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
"node_modules/mime": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
@@ -12232,6 +13300,16 @@
"integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
"license": "MIT"
},
+ "node_modules/next-themes": {
+ "version": "0.4.6",
+ "resolved": "https://registry.npmjs.org/next-themes/-/next-themes-0.4.6.tgz",
+ "integrity": "sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc",
+ "react-dom": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc"
+ }
+ },
"node_modules/no-case": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz",
@@ -12763,6 +13841,12 @@
"node": ">=8"
}
},
+ "node_modules/perfect-freehand": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/perfect-freehand/-/perfect-freehand-1.2.2.tgz",
+ "integrity": "sha512-eh31l019WICQ03pkF3FSzHxB8n07ItqIQ++G5UV8JX0zVOXzgTGCqnRR0jJ2h9U8/2uW4W4mtGJELt9kEV0CFQ==",
+ "license": "MIT"
+ },
"node_modules/performance-now": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
@@ -12776,13 +13860,12 @@
"license": "ISC"
},
"node_modules/picomatch": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
- "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
- "dev": true,
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
"license": "MIT",
"engines": {
- "node": ">=12"
+ "node": ">=8.6"
},
"funding": {
"url": "https://github.com/sponsors/jonschlinkert"
@@ -14324,6 +15407,12 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
+ "node_modules/pretty-format/node_modules/react-is": {
+ "version": "17.0.2",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
+ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==",
+ "license": "MIT"
+ },
"node_modules/process-nextick-args": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
@@ -14369,12 +15458,6 @@
"react-is": "^16.13.1"
}
},
- "node_modules/prop-types/node_modules/react-is": {
- "version": "16.13.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
- "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
- "license": "MIT"
- },
"node_modules/proxy-addr": {
"version": "2.0.7",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
@@ -14397,12 +15480,27 @@
"node": ">= 0.10"
}
},
+ "node_modules/proxy-compare": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/proxy-compare/-/proxy-compare-3.0.1.tgz",
+ "integrity": "sha512-V9plBAt3qjMlS1+nC8771KNf6oJ12gExvaxnNzN/9yVRLdTv/lc+oJlnSzrdYDAvBfTStPCoiaCOTmTs0adv7Q==",
+ "license": "MIT"
+ },
"node_modules/proxy-from-env": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
"integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
"license": "MIT"
},
+ "node_modules/proxy-memoize": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/proxy-memoize/-/proxy-memoize-3.0.1.tgz",
+ "integrity": "sha512-VDdG/VYtOgdGkWJx7y0o7p+zArSf2383Isci8C+BP3YXgMYDoPd3cCBjw0JdWb6YBb9sFiOPbAADDVTPJnh+9g==",
+ "license": "MIT",
+ "dependencies": {
+ "proxy-compare": "^3.0.0"
+ }
+ },
"node_modules/psl": {
"version": "1.15.0",
"resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz",
@@ -14618,10 +15716,19 @@
"integrity": "sha512-SN/U6Ytxf1QGkw/9ve5Y+NxBbZM6Ht95tuXNMKs8EJyFa/Vy/+Co3stop3KBHARfn/giv+Lj1uUnTfOJ3moFEQ==",
"license": "MIT"
},
+ "node_modules/react-icons": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.5.0.tgz",
+ "integrity": "sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": "*"
+ }
+ },
"node_modules/react-is": {
- "version": "17.0.2",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
- "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==",
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
"license": "MIT"
},
"node_modules/react-refresh": {
@@ -14634,9 +15741,9 @@
}
},
"node_modules/react-router": {
- "version": "7.9.2",
- "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.9.2.tgz",
- "integrity": "sha512-i2TPp4dgaqrOqiRGLZmqh2WXmbdFknUyiCRmSKs0hf6fWXkTKg5h56b+9F22NbGRAMxjYfqQnpi63egzD2SuZA==",
+ "version": "7.9.3",
+ "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.9.3.tgz",
+ "integrity": "sha512-4o2iWCFIwhI/eYAIL43+cjORXYn/aRQPgtFRRZb3VzoyQ5Uej0Bmqj7437L97N9NJW4wnicSwLOLS+yCXfAPgg==",
"license": "MIT",
"dependencies": {
"cookie": "^1.0.1",
@@ -14656,12 +15763,12 @@
}
},
"node_modules/react-router-dom": {
- "version": "7.9.2",
- "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.9.2.tgz",
- "integrity": "sha512-pagqpVJnjZOfb+vIM23eTp7Sp/AAJjOgaowhP1f1TWOdk5/W8Uk8d/M/0wfleqx7SgjitjNPPsKeCZE1hTSp3w==",
+ "version": "7.9.3",
+ "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.9.3.tgz",
+ "integrity": "sha512-1QSbA0TGGFKTAc/aWjpfW/zoEukYfU4dc1dLkT/vvf54JoGMkW+fNA+3oyo2gWVW1GM7BxjJVHz5GnPJv40rvg==",
"license": "MIT",
"dependencies": {
- "react-router": "7.9.2"
+ "react-router": "7.9.3"
},
"engines": {
"node": ">=20.0.0"
@@ -14914,6 +16021,18 @@
"node": ">=4.0"
}
},
+ "node_modules/react-scripts/node_modules/doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
"node_modules/react-scripts/node_modules/eslint": {
"version": "8.57.1",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz",
@@ -15275,18 +16394,6 @@
"node": ">=8.10.0"
}
},
- "node_modules/readdirp/node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "license": "MIT",
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
"node_modules/recursive-readdir": {
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz",
@@ -15530,12 +16637,6 @@
}
}
},
- "node_modules/resolve-url-loader/node_modules/convert-source-map": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
- "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
- "license": "MIT"
- },
"node_modules/resolve-url-loader/node_modules/picocolors": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz",
@@ -16256,12 +17357,12 @@
"license": "MIT"
},
"node_modules/source-map": {
- "version": "0.7.6",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz",
- "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==",
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
"license": "BSD-3-Clause",
"engines": {
- "node": ">= 12"
+ "node": ">=0.10.0"
}
},
"node_modules/source-map-js": {
@@ -16786,6 +17887,12 @@
"postcss": "^8.2.15"
}
},
+ "node_modules/stylis": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz",
+ "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==",
+ "license": "MIT"
+ },
"node_modules/sucrase": {
"version": "3.35.0",
"resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz",
@@ -17335,6 +18442,37 @@
"url": "https://github.com/sponsors/SuperchupuDev"
}
},
+ "node_modules/tinyglobby/node_modules/fdir": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
+ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/tinyglobby/node_modules/picomatch": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
+ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
"node_modules/tmpl": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
@@ -17410,6 +18548,27 @@
"integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
"license": "Apache-2.0"
},
+ "node_modules/tsconfck": {
+ "version": "3.1.6",
+ "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.6.tgz",
+ "integrity": "sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "tsconfck": "bin/tsconfck.js"
+ },
+ "engines": {
+ "node": "^18 || >=20"
+ },
+ "peerDependencies": {
+ "typescript": "^5.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
"node_modules/tsconfig-paths": {
"version": "3.15.0",
"resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz",
@@ -17759,6 +18918,12 @@
"browserslist": ">= 4.21.0"
}
},
+ "node_modules/uqr": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/uqr/-/uqr-0.1.2.tgz",
+ "integrity": "sha512-MJu7ypHq6QasgF5YRTjqscSzQp/W11zoUk6kvmlH+fmWEs63Y0Eib13hYFwAzagRJcVY8WVnlV+eBDUGMJ5IbA==",
+ "license": "MIT"
+ },
"node_modules/uri-js": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
@@ -17837,11 +19002,14 @@
"node": ">=10.12.0"
}
},
- "node_modules/v8-to-istanbul/node_modules/convert-source-map": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
- "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
- "license": "MIT"
+ "node_modules/v8-to-istanbul/node_modules/source-map": {
+ "version": "0.7.6",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz",
+ "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">= 12"
+ }
},
"node_modules/vary": {
"version": "1.1.2",
@@ -17927,6 +19095,57 @@
}
}
},
+ "node_modules/vite-tsconfig-paths": {
+ "version": "5.1.4",
+ "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-5.1.4.tgz",
+ "integrity": "sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^4.1.1",
+ "globrex": "^0.1.2",
+ "tsconfck": "^3.0.3"
+ },
+ "peerDependencies": {
+ "vite": "*"
+ },
+ "peerDependenciesMeta": {
+ "vite": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vite/node_modules/fdir": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
+ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vite/node_modules/picomatch": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
+ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
"node_modules/w3c-hr-time": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
@@ -18602,18 +19821,6 @@
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
"license": "MIT"
},
- "node_modules/workbox-build/node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "license": "MIT",
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
"node_modules/workbox-build/node_modules/rollup": {
"version": "2.79.2",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.2.tgz",
diff --git a/frontend/package.json b/frontend/package.json
index 53799aa..989adab 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -10,10 +10,14 @@
"preview": "vite preview"
},
"dependencies": {
+ "@chakra-ui/react": "^3.27.0",
+ "@emotion/react": "^11.14.0",
"@paypal/react-paypal-js": "^8.9.1",
"axios": "^1.12.2",
+ "next-themes": "^0.4.6",
"react": "^19.1.1",
"react-dom": "^19.1.1",
+ "react-icons": "^5.5.0",
"react-router-dom": "^7.9.2",
"react-scripts": "^5.0.1"
},
@@ -23,10 +27,12 @@
"@types/react-dom": "^19.1.9",
"@vitejs/plugin-react": "^5.0.3",
"eslint": "^9.36.0",
+ "eslint-plugin-react": "^7.37.5",
"eslint-plugin-react-hooks": "^5.2.0",
"eslint-plugin-react-refresh": "^0.4.20",
"globals": "^16.4.0",
- "vite": "^7.1.7"
+ "vite": "^7.1.7",
+ "vite-tsconfig-paths": "^5.1.4"
},
"proxy": "http://localhost:5001"
}
diff --git a/frontend/public/affordableluxurywatches-logo.svg b/frontend/public/affordableluxurywatches-logo.svg
new file mode 100644
index 0000000..ac4103a
--- /dev/null
+++ b/frontend/public/affordableluxurywatches-logo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/frontend/src/App.css b/frontend/src/App.css
index 4be7695..e69de29 100644
--- a/frontend/src/App.css
+++ b/frontend/src/App.css
@@ -1,62 +0,0 @@
-.App {
- text-align: center;
-}
-
-.App-logo {
- height: 40vmin;
- pointer-events: none;
-}
-
-@media (prefers-reduced-motion: no-preference) {
- .App-logo {
- animation: App-logo-spin infinite 20s linear;
- }
-}
-
-.App-header {
- background-color: #282c34;
- padding: 20px;
- color: white;
-}
-
-.App-link {
- color: #61dafb;
-}
-
-@keyframes App-logo-spin {
- from {
- transform: rotate(0deg);
- }
- to {
- transform: rotate(360deg);
- }
-}
-
-/* Custom PayPal button styling */
-.paypal-buttons {
- margin-top: 20px;
-}
-
-/* Loading states */
-.btn-loading {
- position: relative;
- color: transparent;
-}
-
-.btn-loading::before {
- content: '';
- position: absolute;
- top: 50%;
- left: 50%;
- transform: translate(-50%, -50%);
- width: 20px;
- height: 20px;
- border: 2px solid #ffffff;
- border-radius: 50%;
- border-top-color: transparent;
- animation: spin 1s ease-in-out infinite;
-}
-
-@keyframes spin {
- to { transform: translate(-50%, -50%) rotate(360deg); }
-}
\ No newline at end of file
diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx
index e745cdb..e510f66 100644
--- a/frontend/src/App.jsx
+++ b/frontend/src/App.jsx
@@ -1,10 +1,15 @@
+"use client"
import React from 'react';
+import {Grid, GridItem, Button, Box, Container, Image, Flex, Center, SimpleGrid, Text} from "@chakra-ui/react"
+import { LuMoon, LuSun } from "react-icons/lu";
+import { useColorMode } from "@/components/ui/color-mode"
import { BrowserRouter as Router, Routes, Route } from 'react-router-dom';
import { PayPalScriptProvider } from '@paypal/react-paypal-js';
import Payment from './pages/Payment.jsx';
import Success from './pages/Success.jsx';
import Cancel from './pages/Cancel.jsx';
import './App.css';
+import logo from '/affordableluxurywatches-logo.svg';
// PayPal configuration
const paypalOptions = {
@@ -14,23 +19,55 @@ const paypalOptions = {
};
function App() {
+ const { toggleColorMode, colorMode } = useColorMode()
return (
-
- } />
- } />
- } />
- } />
-
- Page Not Found
- The requested page could not be found.
- Go to Payment
-
- } />
-
+
+
+
+
+
+
+
+
+ {colorMode === "light" ? <> Toggle Light mode> : <> Toogle Dark mode>}
+
+
+
+
+
+
+
+ } />
+ } />
+ } />
+ } />
+
+ Page Not Found
+ The requested page could not be found.
+ Go to Payment
+
+ } />
+
+
+ {import.meta.env.VITE_REACT_APP_STORE_NAME}
+
+
+
+
diff --git a/frontend/src/components/OrderSummary.jsx b/frontend/src/components/OrderSummary.jsx
index 8e477af..111055f 100644
--- a/frontend/src/components/OrderSummary.jsx
+++ b/frontend/src/components/OrderSummary.jsx
@@ -1,6 +1,7 @@
import React from 'react';
+import {Heading, Separator, DataList, Stack, Center, Box, Image, Badge, Text} from "@chakra-ui/react"
-const OrderSummary = ({ orderData, loading }) => {
+const OrderSummary = ({ orderData, loading, order }) => {
const formatCurrency = (amount, currency = 'USD') => {
return new Intl.NumberFormat('en-US', {
style: 'currency',
@@ -21,48 +22,83 @@ const OrderSummary = ({ orderData, loading }) => {
}
return (
+
-
-
- Order Summary
-
+
+
+ Order Summary
+
+
+
+ Order #
+ {orderData.wc_order_id}
+
+ { order.billing !== undefined && <>
+
+ First Name
+ {order.billing.first_name}
+
+
+ Last Name
+ {order.billing.last_name}
+
+
+ E-mail
+ {order.billing.email}
+
-
- Order #
- {orderData.wc_order_id}
-
+ {/*{orderData.customer_email && (
+
+ E-mail
+ {orderData.customer_email}
+
+ )}*/}
+
+
+
+ {order.shipping.method}
+
+
+ {formatCurrency(order.shipping.total, orderData.currency)}
+
+ > }
+
+ Total Amount:
+ {formatCurrency(orderData.total, orderData.currency)}
+
+
+
+
+
+
+
+ Ordered Items
+
+ {order.line_items !== undefined && order.line_items.map((item, index) => (
+
+
+ {item.image && }
+
+ {item.name}
+
+
+
+ Qty: {item.quantity}
+ ${item.total}
+
+
+
+ ))}
-
- Description
- {orderData.description}
-
-
- {orderData.customer_email && (
-
- Customer Email
- {orderData.customer_email}
-
- )}
-
-
- Currency
- {orderData.currency}
-
-
-
- Total Amount
-
- {formatCurrency(orderData.total, orderData.currency)}
-
-
-
-
-
-
- You will be redirected to PayPal to complete this payment securely
-
-
+
+
+
+
);
};
diff --git a/frontend/src/components/PayPalButton.jsx b/frontend/src/components/PayPalButton.jsx
index a78f275..c475752 100644
--- a/frontend/src/components/PayPalButton.jsx
+++ b/frontend/src/components/PayPalButton.jsx
@@ -1,5 +1,7 @@
import React, { useState } from 'react';
import { PayPalButtons, usePayPalScriptReducer } from '@paypal/react-paypal-js';
+import {Button, HStack, Spinner, Text, VStack, Center, Alert} from "@chakra-ui/react";
+import {LuRepeat} from "react-icons/lu";
const PayPalButton = ({ orderData, onCreateOrder, onCaptureOrder, loading }) => {
const [{ isPending }] = usePayPalScriptReducer();
@@ -42,22 +44,20 @@ const PayPalButton = ({ orderData, onCreateOrder, onCaptureOrder, loading }) =>
if (isPending) {
return (
-
-
- Loading PayPal...
-
-
Loading PayPal...
-
+
+
+ Loading PayPal...
+
);
}
return (
{paypalError && (
-
-
- {paypalError}
-
+
+
+ {paypalError}
+
)}
forceReRender={[orderData.total, orderData.currency]}
/>
-
-
+
+
Don't have a PayPal account? You can still pay with your credit or debit card.
-
-
+
+
{/* Fallback button for when PayPal doesn't load */}
{!isPending && (
-
- window.location.reload()}
- disabled={loading}
- >
-
- Refresh PayPal
-
-
+
+
+ window.location.reload()}
+ disabled={loading}
+ >
+ Reload PayPal
+
+
+
)}
);
diff --git a/frontend/src/components/ui/color-mode.jsx b/frontend/src/components/ui/color-mode.jsx
new file mode 100644
index 0000000..a3029df
--- /dev/null
+++ b/frontend/src/components/ui/color-mode.jsx
@@ -0,0 +1,90 @@
+'use client'
+
+import { ClientOnly, IconButton, Skeleton, Span } from '@chakra-ui/react'
+import { ThemeProvider, useTheme } from 'next-themes'
+
+import * as React from 'react'
+import { LuMoon, LuSun } from 'react-icons/lu'
+
+export function ColorModeProvider(props) {
+ return (
+
+ )
+}
+
+export function useColorMode() {
+ const { resolvedTheme, setTheme, forcedTheme } = useTheme()
+ const colorMode = forcedTheme || resolvedTheme
+ const toggleColorMode = () => {
+ setTheme(resolvedTheme === 'dark' ? 'light' : 'dark')
+ }
+ return {
+ colorMode: colorMode,
+ setColorMode: setTheme,
+ toggleColorMode,
+ }
+}
+
+export function useColorModeValue(light, dark) {
+ const { colorMode } = useColorMode()
+ return colorMode === 'dark' ? dark : light
+}
+
+export function ColorModeIcon() {
+ const { colorMode } = useColorMode()
+ return colorMode === 'dark' ? :
+}
+
+export const ColorModeButton = React.forwardRef(
+ function ColorModeButton(props, ref) {
+ const { toggleColorMode } = useColorMode()
+ return (
+ }>
+
+
+
+
+ )
+ },
+)
+
+export const LightMode = React.forwardRef(function LightMode(props, ref) {
+ return (
+
+ )
+})
+
+export const DarkMode = React.forwardRef(function DarkMode(props, ref) {
+ return (
+
+ )
+})
diff --git a/frontend/src/components/ui/provider.jsx b/frontend/src/components/ui/provider.jsx
new file mode 100644
index 0000000..80e3e01
--- /dev/null
+++ b/frontend/src/components/ui/provider.jsx
@@ -0,0 +1,12 @@
+'use client'
+
+import { ChakraProvider, defaultSystem } from '@chakra-ui/react'
+import { ColorModeProvider } from './color-mode'
+
+export function Provider(props) {
+ return (
+
+
+
+ )
+}
diff --git a/frontend/src/components/ui/toaster.jsx b/frontend/src/components/ui/toaster.jsx
new file mode 100644
index 0000000..6af2b70
--- /dev/null
+++ b/frontend/src/components/ui/toaster.jsx
@@ -0,0 +1,43 @@
+'use client'
+
+import {
+ Toaster as ChakraToaster,
+ Portal,
+ Spinner,
+ Stack,
+ Toast,
+ createToaster,
+} from '@chakra-ui/react'
+
+export const toaster = createToaster({
+ placement: 'bottom-end',
+ pauseOnPageIdle: true,
+})
+
+export const Toaster = () => {
+ return (
+
+
+ {(toast) => (
+
+ {toast.type === 'loading' ? (
+
+ ) : (
+
+ )}
+
+ {toast.title && {toast.title} }
+ {toast.description && (
+ {toast.description}
+ )}
+
+ {toast.action && (
+ {toast.action.label}
+ )}
+ {toast.closable && }
+
+ )}
+
+
+ )
+}
diff --git a/frontend/src/components/ui/tooltip.jsx b/frontend/src/components/ui/tooltip.jsx
new file mode 100644
index 0000000..ab225cc
--- /dev/null
+++ b/frontend/src/components/ui/tooltip.jsx
@@ -0,0 +1,35 @@
+import { Tooltip as ChakraTooltip, Portal } from '@chakra-ui/react'
+import * as React from 'react'
+
+export const Tooltip = React.forwardRef(function Tooltip(props, ref) {
+ const {
+ showArrow,
+ children,
+ disabled,
+ portalled = true,
+ content,
+ contentProps,
+ portalRef,
+ ...rest
+ } = props
+
+ if (disabled) return children
+
+ return (
+
+ {children}
+
+
+
+ {showArrow && (
+
+
+
+ )}
+ {content}
+
+
+
+
+ )
+})
diff --git a/frontend/src/main.jsx b/frontend/src/main.jsx
index b9a1a6d..ab13ea0 100644
--- a/frontend/src/main.jsx
+++ b/frontend/src/main.jsx
@@ -1,3 +1,4 @@
+import { Provider } from "@/components/ui/provider"
import { StrictMode } from 'react'
import { createRoot } from 'react-dom/client'
import './index.css'
@@ -5,6 +6,8 @@ import App from './App.jsx'
createRoot(document.getElementById('root')).render(
-
+
+
+
,
)
diff --git a/frontend/src/pages/Cancel.jsx b/frontend/src/pages/Cancel.jsx
index 26a28b9..006e323 100644
--- a/frontend/src/pages/Cancel.jsx
+++ b/frontend/src/pages/Cancel.jsx
@@ -1,5 +1,18 @@
import React from 'react';
import { useSearchParams } from 'react-router-dom';
+import {
+ Alert,
+ Text,
+ Spinner,
+ Center,
+ VStack,
+ HStack,
+ Button,
+ Accordion,
+ Box,
+ Span
+} from "@chakra-ui/react"
+import { LuRepeat, LuMoveLeft } from "react-icons/lu";
const Cancel = () => {
const [searchParams] = useSearchParams();
@@ -8,6 +21,8 @@ const Cancel = () => {
const orderId = searchParams.get('order_id');
const paypalToken = searchParams.get('token');
+ const cancelUrl = searchParams.get('cancel_url');
+
const handleRetryPayment = () => {
// Build the payment URL with original parameters
const paymentUrl = new URL('/payment', window.location.origin);
@@ -21,44 +36,27 @@ const Cancel = () => {
window.location.href = paymentUrl.toString();
};
- const getErrorMessage = () => {
- if (error) {
- return decodeURIComponent(error);
- }
- return 'Your payment was cancelled. You can try again or choose a different payment method.';
- };
-
- const getIconClass = () => {
- return error ? 'status-error' : 'status-warning';
- };
-
- const getIconName = () => {
- return error ? 'fas fa-times-circle' : 'fas fa-exclamation-triangle';
- };
-
- const getTitle = () => {
- return error ? 'Payment Failed' : 'Payment Cancelled';
- };
-
- const getTitleClass = () => {
- return error ? 'text-danger' : 'text-warning';
- };
-
return (
-
-
-
-
-
+
+
+ Payment Cancelled
+
+ Your payment was cancelled. You can try again or choose a different payment method.
+
+
-
- {getTitle()}
-
+ {/*
*/}
+ {/* */}
+ {/*
*/}
-
- {getErrorMessage()}
-
+ {/*
*/}
+ {/* {getTitle()}*/}
+ {/* */}
+
+ {/*
*/}
+ {/* {getErrorMessage()}*/}
+ {/*
*/}
{orderId && (
@@ -79,45 +77,58 @@ const Cancel = () => {
)}
-
+
+
+
+
+ If you're experiencing issues with payment:
+
+
+
+
+
+ Check your internet connection
+ Ensure your PayPal account has sufficient funds
+ Try using a different payment method
+ Contact our support team if the problem persists
+
+
+
+
+
+
+ Need Help?
+
+
+
+ Text
+
+
+
-
-
-
Need Help?
-
If you're experiencing issues with payment:
-
- Check your internet connection
- Ensure your PayPal account has sufficient funds
- Try using a different payment method
- Contact our support team if the problem persists
-
-
-
-
-
-
-
- Contact support: support@yourstore.com | 1-800-XXX-XXXX
-
-
-
-
+
+ Contact Support: {import.meta.env.VITE_REACT_APP_SUPPORT_EMAIL}
+
);
};
diff --git a/frontend/src/pages/Payment.jsx b/frontend/src/pages/Payment.jsx
index a70f391..4161304 100644
--- a/frontend/src/pages/Payment.jsx
+++ b/frontend/src/pages/Payment.jsx
@@ -1,4 +1,18 @@
import React, { useState, useEffect } from 'react';
+import {
+ Alert,
+ Heading,
+ DataList,
+ Timeline,
+ Text,
+ Spinner,
+ Grid,
+ GridItem,
+ Center,
+ EmptyState,
+ VStack, HStack
+} from "@chakra-ui/react"
+import { LuShoppingBasket, LuPackageCheck, LuLoaderCircle, LuMail } from "react-icons/lu";
import { useSearchParams, useNavigate } from 'react-router-dom';
import OrderSummary from '../components/OrderSummary.jsx';
import PayPalButton from '../components/PayPalButton.jsx';
@@ -13,9 +27,14 @@ const Payment = () => {
total: searchParams.get('total') || '25.99',
currency: searchParams.get('currency') || 'USD',
description: searchParams.get('description') || 'Test Order',
- customer_email: searchParams.get('customer_email') || 'customer@example.com'
+ customer_email: searchParams.get('customer_email') || 'customer@example.com',
+ return_url: searchParams.get('return_url'),
+ cancel_url: searchParams.get('cancel_url')
});
+ const [orderItems, setOrderItems] = useState([]);
+ const [order, setOrder] = useState([]);
+
const [loading, setLoading] = useState(false);
const [error, setError] = useState('');
const [paypalOrderId, setPaypalOrderId] = useState('');
@@ -49,6 +68,25 @@ const Payment = () => {
}
}, [orderData]);
+ // Fetch Order
+ useEffect(() => {
+ const fetchOrderDetails = async () => {
+ if (orderData.wc_order_id) {
+ try {
+ const data = await paymentAPI.getOrderStatus(orderData.wc_order_id);
+ if (data.success && data.line_items) {
+ setOrderItems(data.line_items);
+ setOrder(data);
+ }
+ } catch (error) {
+ console.error('Failed to fetch order items:', error);
+ }
+ }
+ };
+
+ fetchOrderDetails();
+ }, [orderData.wc_order_id]);
+
// Create PayPal order
const createPayPalOrder = async () => {
try {
@@ -96,27 +134,141 @@ const Payment = () => {
console.log('Payment captured:', data.transaction_id);
// Redirect to success page with transaction details
- navigate(`/success?transaction_id=${data.transaction_id}&order_id=${orderData.wc_order_id}`);
+ navigate(`/success?transaction_id=${data.transaction_id}&order_id=${orderData.wc_order_id}&return_url=${encodeURIComponent(orderData.return_url)}`);
} catch (error) {
console.error('Capture payment error:', error);
setError(error.message);
- navigate(`/cancel?error=${encodeURIComponent(error.message)}&order_id=${orderData.wc_order_id}`);
+ navigate(`/cancel?error=${encodeURIComponent(error.message)}&order_id=${orderData.wc_order_id}&cancel_url=${encodeURIComponent(orderData.cancel_url)}`);
} finally {
setLoading(false);
}
};
+ function getOrdinalSuffix(day) {
+ if (day > 3 && day < 21) return "th"; // 11th–19th
+ switch (day % 10) {
+ case 1: return "st";
+ case 2: return "nd";
+ case 3: return "rd";
+ default: return "th";
+ }
+ }
+
+ function formatDate(date) {
+ const day = date.getDate();
+ const month = date.toLocaleString('default', { month: 'long' });
+ const year = date.getFullYear();
+
+ return `${day}${getOrdinalSuffix(day)} ${month} ${year}`;
+ }
+
+ function getDateAfterDays(days) {
+ const date = new Date();
+ date.setDate(date.getDate() + days);
+ return formatDate(date);
+ }
+
return (
+
Secure Payment with PayPal
+ {order.length === 0 ?
+
+
+
+
+
+
+
+ Your cart is empty
+
+ Explore our products and add items to your cart
+
+
+
+
+ :
+
+
+
+
+
+
+ {!error && backendStatus && (
+
+
+
+ )}
+
+
+
+
+
+
+
+
+
+
+
+
+ Order Confirmed
+ {formatDate(new Date())}
+
+
+
+
+
+
+
+
+
+
+
+ Payment in progress
+
+
+
+
+
+
+
+
+
+
+
+
+ Estimated Delivery Date
+ {getDateAfterDays(10)}
+
+ We will shipp your product via FedEx and it should
+ arrive within 7-10 business days.
+
+
+
+
+
+
+
+
+
+
+ }
+
+
-
-
-
- Secure Payment
-
-
Complete your order securely with PayPal
-
{error && (
@@ -127,47 +279,38 @@ const Payment = () => {
)}
{backendStatus && (
-
-
- Payment system connected
-
-
+
+
+
+ Payment system connected
+
+ We're available via email and usually respond within a few hours. So don't hesitate to reach out if you need assistance - we're here to help.
+
+
+ {import.meta.env.VITE_REACT_APP_SUPPORT_EMAIL}
+
+
+
+
+
)}
-
-
- {!error && backendStatus && (
-
- )}
-
-
-
-
- Your payment is secured by PayPal's advanced encryption
-
-
-
{/* Debug info for development */}
- {process.env.NODE_ENV === 'development' && (
-
-
Debug Info:
-
- Order ID: {orderData.wc_order_id}
- Total: ${orderData.total}
- PayPal Order: {paypalOrderId || 'Not created yet'}
- Backend: {backendStatus ? '✅ Connected' : '❌ Disconnected'}
-
-
+ {import.meta.env.VITE_NODE_ENV === 'development' && (
+
+
+
+ Debug Info
+
+
+ Order ID: {orderData.wc_order_id}
+ Total: ${orderData.total}
+ PayPal Order: {paypalOrderId || 'Not created yet'}
+ Backend: {backendStatus ? '✅ Connected' : '❌ Disconnected'}
+
+
+
+
)}
diff --git a/frontend/src/pages/Success.jsx b/frontend/src/pages/Success.jsx
index 0cbb368..4a1eb02 100644
--- a/frontend/src/pages/Success.jsx
+++ b/frontend/src/pages/Success.jsx
@@ -1,14 +1,44 @@
import React, { useEffect, useState } from 'react';
import { useSearchParams } from 'react-router-dom';
+import {
+ Alert,
+ Text,
+ Spinner,
+ Center,
+ VStack,
+ HStack,
+ Button,
+ DataList
+} from "@chakra-ui/react"
+import { LuMoveLeft } from "react-icons/lu";
const Success = () => {
const [searchParams] = useSearchParams();
const [orderStatus, setOrderStatus] = useState(null);
const [loading, setLoading] = useState(true);
+ const [countdown, setCountdown] = useState(10);
const transactionId = searchParams.get('transaction_id');
const orderId = searchParams.get('order_id');
const paypalOrderId = searchParams.get('token'); // PayPal adds this
+ const returnUrl = searchParams.get('return_url');
+
+ useEffect(() => {
+ if (!returnUrl) return;
+
+ // Auto-redirect after X seconds
+ const timer = setInterval(() => {
+ setCountdown(prev => {
+ if (prev <= 1) {
+ window.location.href = decodeURIComponent(returnUrl);
+ return 0;
+ }
+ return prev - 1;
+ });
+ }, 1000);
+
+ return () => clearInterval(timer);
+ }, [returnUrl]);
useEffect(() => {
// Simulate checking order status
@@ -38,112 +68,84 @@ const Success = () => {
if (loading) {
return (
-
-
-
-
-
- Processing...
-
-
Confirming your payment...
-
-
-
-
+
+
+ Processing and confirming your payment...
+
);
}
return (
+
+
+ Payment Successful!
+
+ Thank you for your payment. Your transaction has been completed successfully.
+ A confirmation email has been sent to your email address with all the transaction details.
+ Redirecting you back to checkout in {countdown} seconds...
+
+
+
+
+ {transactionId && (
+
+ Transaction ID:
+ {transactionId}
+
+ )}
+ {orderId && (
+
+ Order ID:
+ {orderId}
+
+ )}
+ {paypalOrderId && (
+
+ PayPal Order ID:
+ {paypalOrderId}
+
+ )}
+ {orderStatus && orderStatus.success && (
+ <>
+
+ PayPal Order ID:
+ {paypalOrderId}
+
+
+ Total:
+ {formatCurrency(orderStatus.total, orderStatus.currency)}
+
+ {/**/}
+ {/* Order Status: */}
+ {/* */}
+ {/* {orderStatus.status}*/}
+ {/* */}
+ {/* */}
+ >
+ )}
+
+
+
+
-
-
-
-
-
Payment Successful!
-
Thank you for your payment. Your transaction has been completed successfully.
-
-
-
- {transactionId && (
-
- Transaction ID:
-
- {transactionId}
-
- )}
- {orderId && (
-
- Order ID:
-
- {orderId}
-
- )}
- {paypalOrderId && (
-
-
- PayPal Order ID: {paypalOrderId}
-
-
- )}
-
-
-
- {orderStatus && orderStatus.success && (
-
-
Order Details
-
-
-
- Status:
-
- {orderStatus.status}
-
-
-
-
-
- Total: {formatCurrency(orderStatus.total, orderStatus.currency)}
-
-
-
-
- )}
-
-
-
-
- A confirmation email has been sent to your email address with all the transaction details.
-
-
-
-
-
-
-
-
- This transaction was processed securely by PayPal
-
-
+
diff --git a/frontend/vite.config.js b/frontend/vite.config.js
index 9531aba..3bc4c70 100644
--- a/frontend/vite.config.js
+++ b/frontend/vite.config.js
@@ -1,9 +1,10 @@
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
+import tsconfigPaths from "vite-tsconfig-paths"
// https://vitejs.dev/config/
export default defineConfig({
- plugins: [react()],
+ plugins: [react(), tsconfigPaths()],
server: {
port: 5173,
proxy: {