diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 2b4660a..700781f 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -5,9 +5,17 @@
-
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -91,43 +99,49 @@
"associatedIndex": 2
}
+
+
+
- {
- "keyToString": {
- "ASKED_MARK_IGNORED_FILES_AS_EXCLUDED": "true",
- "ModuleVcsDetector.initialDetectionPerformed": "true",
- "RunOnceActivity.ShowReadmeOnStart": "true",
- "RunOnceActivity.TerminalTabsStorage.copyFrom.TerminalArrangementManager.252": "true",
- "RunOnceActivity.git.unshallow": "true",
- "RunOnceActivity.typescript.service.memoryLimit.init": "true",
- "codeWithMe.voiceChat.enabledByDefault": "false",
- "com.intellij.ml.llm.matterhorn.ej.ui.settings.DefaultModelSelectionForGA.v1": "true",
- "git-widget-placeholder": "develop",
- "javascript.nodejs.core.library.configured.version": "24.20.0",
- "javascript.nodejs.core.library.typings.version": "24.13.3",
- "javascript.preferred.runtime.type.id": "node",
- "js.debugger.nextJs.config.created.client": "true",
- "js.debugger.nextJs.config.created.server": "true",
- "junie.onboarding.icon.badge.shown": "true",
- "kronk.content.tree.expanded.paths": "",
- "last_opened_file_path": "/home/hamed/Documents/Projects/GItLabRepo/device_web",
- "node.js.detected.package.eslint": "true",
- "node.js.detected.package.tslint": "true",
- "node.js.selected.package.eslint": "(autodetect)",
- "node.js.selected.package.tslint": "(autodetect)",
- "nodejs_package_manager_path": "npm",
- "prettierjs.PrettierConfiguration.Package": "/home/hamed/Documents/Projects/GIthubRepo/robot-market-landing/node_modules/prettier",
- "settings.editor.selected.configurable": "settings.javascript.prettier",
- "to.speed.mode.migration.done": "true",
- "ts.external.directory.path": "/home/hamed/Documents/Projects/GIthubRepo/robot-market-landing/node_modules/typescript/lib",
- "vue.rearranger.settings.migration": "true"
+
+}]]>
+
@@ -220,6 +234,7 @@
+
@@ -565,7 +580,15 @@
1790492715355
-
+
+
+ 1790661145102
+
+
+
+ 1790661145102
+
+
diff --git a/app/page.tsx b/app/page.tsx
index c59ad0b..d43d41f 100644
--- a/app/page.tsx
+++ b/app/page.tsx
@@ -1,5 +1,5 @@
import LocationsSection from '@/components/LocationsSection';
-import ShowcaseSection from '@/components/ShowcaseSection';
+import {ShowcaseSection} from '@/features/products';
import FeaturesSection from '@/components/FeaturesSection';
import AboutSection from '@/components/AboutSection';
import HeroSection from '@/components/HeroSection';
diff --git a/app/products/[id]/page.tsx b/app/products/[id]/page.tsx
index 91eb3a5..b89027a 100644
--- a/app/products/[id]/page.tsx
+++ b/app/products/[id]/page.tsx
@@ -1,7 +1,7 @@
import type {Metadata} from 'next';
import {notFound} from 'next/navigation';
import {content} from '@/data/content';
-import ProductDetails from '@/components/ProductDetails';
+import {ProductDetails} from '@/features/products';
import ProtectedPage from '@/components/auth/ProtectedPage';
type Props = {params: {id: string}};
diff --git a/app/products/page.tsx b/app/products/page.tsx
index 2cec87e..9c07894 100644
--- a/app/products/page.tsx
+++ b/app/products/page.tsx
@@ -1,6 +1,6 @@
import {Suspense} from 'react';
import type {Metadata} from 'next';
-import ProductsPage from '@/components/ProductsPage';
+import {ProductsPage} from '@/features/products';
export const metadata: Metadata = {title: 'همه محصولات | روبات مارکت'};
diff --git a/components/FloatingItems.tsx b/features/products/components/FloatingItems.tsx
similarity index 100%
rename from components/FloatingItems.tsx
rename to features/products/components/FloatingItems.tsx
diff --git a/components/HorizontalShowcase.tsx b/features/products/components/HorizontalShowcase.tsx
similarity index 98%
rename from components/HorizontalShowcase.tsx
rename to features/products/components/HorizontalShowcase.tsx
index 045f563..10ed1c6 100644
--- a/components/HorizontalShowcase.tsx
+++ b/features/products/components/HorizontalShowcase.tsx
@@ -4,7 +4,7 @@ import {useEffect, useRef} from 'react';
import {gsap} from 'gsap';
import {ScrollTrigger} from 'gsap/ScrollTrigger';
import VendingCard from './VendingCard';
-import {featuredMachines} from '@/data/products';
+import {featuredMachines} from '@/features/products/data/catalog';
import {useLanguage} from '@/app/context/LanguageContext';
gsap.registerPlugin(ScrollTrigger);
diff --git a/components/MobileShowcase.tsx b/features/products/components/MobileShowcase.tsx
similarity index 97%
rename from components/MobileShowcase.tsx
rename to features/products/components/MobileShowcase.tsx
index e221a49..b0fd03c 100644
--- a/components/MobileShowcase.tsx
+++ b/features/products/components/MobileShowcase.tsx
@@ -1,7 +1,7 @@
'use client';
import {PhoneOutlined} from '@ant-design/icons';
-import {featuredMachines} from '@/data/products';
+import {featuredMachines} from '@/features/products/data/catalog';
import {useLanguage} from '@/app/context/LanguageContext';
import {commerceCopy} from '@/data/commerce';
diff --git a/components/ProductDetails.tsx b/features/products/components/ProductDetails.tsx
similarity index 98%
rename from components/ProductDetails.tsx
rename to features/products/components/ProductDetails.tsx
index b56bc45..fd464a4 100644
--- a/components/ProductDetails.tsx
+++ b/features/products/components/ProductDetails.tsx
@@ -5,7 +5,7 @@ import Link from 'next/link';
import {CheckCircleOutlined} from '@ant-design/icons';
import {useLanguage} from '@/app/context/LanguageContext';
import {commerceCopy} from '@/data/commerce';
-import QuantityControl from './QuantityControl';
+import QuantityControl from '@/components/QuantityControl';
export default function ProductDetails({id}: {id: string}) {
const {t, locale} = useLanguage();
diff --git a/components/ProductsPage.tsx b/features/products/components/ProductsPage.tsx
similarity index 97%
rename from components/ProductsPage.tsx
rename to features/products/components/ProductsPage.tsx
index 6ad189a..d112f88 100644
--- a/components/ProductsPage.tsx
+++ b/features/products/components/ProductsPage.tsx
@@ -4,8 +4,8 @@ import Link from 'next/link';
import {usePathname, useRouter, useSearchParams} from 'next/navigation';
import {useLanguage} from '@/app/context/LanguageContext';
import {commerceCopy} from '@/data/commerce';
-import {filterMachines, productCategories} from '@/data/products';
-import QuantityControl from './QuantityControl';
+import {filterMachines, productCategories} from '@/features/products/data/catalog';
+import QuantityControl from '@/components/QuantityControl';
export default function ProductsPage() {
const {t, locale} = useLanguage();
diff --git a/components/ShowcaseSection.tsx b/features/products/components/ShowcaseSection.tsx
similarity index 100%
rename from components/ShowcaseSection.tsx
rename to features/products/components/ShowcaseSection.tsx
diff --git a/components/VendingCard.tsx b/features/products/components/VendingCard.tsx
similarity index 96%
rename from components/VendingCard.tsx
rename to features/products/components/VendingCard.tsx
index dfaa2c9..0f0392c 100644
--- a/components/VendingCard.tsx
+++ b/features/products/components/VendingCard.tsx
@@ -3,9 +3,6 @@
import type {Machine} from '@/types/domain';
import type {MouseEvent} from 'react';
import {useRef} from 'react';
-import QuantityControl from './QuantityControl';
-import ProtectedLink from './auth/ProtectedLink';
-import {commerceCopy} from '@/data/commerce';
import {useLanguage} from '@/app/context/LanguageContext';
import FloatingItems from './FloatingItems';
import {floatingSnacks} from '@/data/content';
diff --git a/data/products.ts b/features/products/data/catalog.ts
similarity index 100%
rename from data/products.ts
rename to features/products/data/catalog.ts
diff --git a/features/products/index.ts b/features/products/index.ts
new file mode 100644
index 0000000..545bc71
--- /dev/null
+++ b/features/products/index.ts
@@ -0,0 +1,3 @@
+export {default as ProductDetails} from './components/ProductDetails';
+export {default as ProductsPage} from './components/ProductsPage';
+export {default as ShowcaseSection} from './components/ShowcaseSection';