├── src
├── App.css
├── index.css
├── main.jsx
├── components
│ ├── Footer.jsx
│ ├── NotFound.jsx
│ ├── ProductGrid.jsx
│ ├── Banner.jsx
│ ├── Header.jsx
│ ├── ProductCard.jsx
│ ├── AboutUs.jsx
│ └── ProductDetails.jsx
├── pages
│ ├── Products.jsx
│ ├── About.tsx
│ └── Home.jsx
├── App.jsx
└── data.js
├── postcss.config.js
├── vite.config.js
├── .hintrc
├── tailwind.config.js
├── .gitignore
├── index.html
├── README.md
├── package.json
├── eslint.config.js
└── public
└── vite.svg
/src/App.css:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/index.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
--------------------------------------------------------------------------------
/postcss.config.js:
--------------------------------------------------------------------------------
1 | export default {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | }
7 |
--------------------------------------------------------------------------------
/vite.config.js:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vite'
2 | import react from '@vitejs/plugin-react'
3 |
4 | // https://vitejs.dev/config/
5 | export default defineConfig({
6 | plugins: [react()],
7 | })
8 |
--------------------------------------------------------------------------------
/.hintrc:
--------------------------------------------------------------------------------
1 | {
2 | "extends": [
3 | "development"
4 | ],
5 | "hints": {
6 | "axe/language": [
7 | "default",
8 | {
9 | "html-has-lang": "off"
10 | }
11 | ]
12 | }
13 | }
--------------------------------------------------------------------------------
/tailwind.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('tailwindcss').Config} */
2 | export default {
3 | content: ["./index.html", "./src/**/*.{js,ts,jsx,tsx}"],
4 | theme: {
5 | extend: {},
6 | },
7 | plugins: [],
8 | };
9 |
--------------------------------------------------------------------------------
/src/main.jsx:
--------------------------------------------------------------------------------
1 | import { StrictMode } from "react";
2 | import { createRoot } from "react-dom/client";
3 | import App from "./App.jsx";
4 | import "./index.css";
5 |
6 | createRoot(document.getElementById("root")).render(
7 | Copyright © 2024 Xbeauty Store Powered by Xbeauty Store
8 | Sorry, the page you are looking for does not exist. 9 |
10 | 14 | Go to Home 15 | 16 |15 | We have a wide range of Heater products for you to choose from. 16 |
17 |Color :
30 |{product.Color}
31 |Price:
34 |{product.Price}
35 |17 | Our electric fireplace allows you to adjust the flame's speed and 18 | brightness to match your mood. The flame effects can function 19 | independently of the heater, giving you the perfect ambiance 20 | without additional heat. Choose from four vibrant flame colors and 21 | use the dimmer to set the ideal brightness. 22 |
23 |30 | Safety is our top priority. The built-in overheat protection 31 | system ensures the heater automatically shuts off when critical 32 | temperatures are reached. Designed with a bottom air outlet, it 33 | effectively prevents overheating and potential harm. 34 |
35 |42 | Our heater features two temperature settings: 500W and 1500W. 43 | Additionally, the built-in timer lets you control when the heater 44 | operates, helping you save energy and enjoy a warm room upon 45 | arrival. 46 |
47 |54 | Designed with elegance and portability in mind, this fireplace 55 | features a classic retro style with a sturdy build. Special 56 | lightweight materials ensure easy mobility, making it suitable for 57 | various settings such as offices, restaurants, or homes. 58 |
59 |66 | Our advanced technology creates a flame effect that surpasses the 67 | aesthetics of real fire. Enjoy the ambiance of dancing flames and 68 | glowing logs without the risks associated with an open flame. The 69 | transparent glass design provides a stunning view from all angles. 70 |
71 |78 | Using the latest infrared heating technology, our heater offers 79 | fast and efficient warmth. It covers areas between 400 to 500 80 | square feet, with a heating time of just 5 to 7 minutes. The 81 | bottom vents reduce operational noise, ensuring a peaceful 82 | environment with noise levels under 40dB. 83 |
84 |Loading ...
33 | ); 34 | 35 | const toggleZoom = () => { 36 | setIsZoomed((prev) => !prev); // Toggle zoom state 37 | }; 38 | 39 | const handleMouseMove = (e) => { 40 | if (!isZoomed) return; // Only track when zoom is active 41 | 42 | const { left, top, width, height } = 43 | zoomRef.current.getBoundingClientRect(); 44 | const x = ((e.clientX - left) / width) * 100; // Get mouse position as a percentage 45 | const y = ((e.clientY - top) / height) * 100; 46 | 47 | setZoomPosition({ x, y }); // Store the position as percentages 48 | }; 49 | 50 | const handleImageClick = (img) => setMainImage(img); // Update main image 51 | 52 | return ( 53 | <> 54 |200 | .{paragraph} 201 |
202 | ))} 203 |