diff --git a/src/pages/editor/components/LayersList.tsx b/src/pages/editor/components/LayersList.tsx
new file mode 100644
index 0000000..23ecc55
--- /dev/null
+++ b/src/pages/editor/components/LayersList.tsx
@@ -0,0 +1,102 @@
+import { Text, Shapes, Eye, Copy, Trash } from 'iconsax-react'
+import { useEditorStore } from '../store/editorStore'
+import { clx } from '@/helpers/utils'
+
+const LayersList = () => {
+ const {
+ objects,
+ selectedObjectId,
+ setSelectedObjectId,
+ deleteObject,
+ duplicateObject,
+ } = useEditorStore()
+
+ const getLayerIcon = (type: string) => {
+ switch (type) {
+ case 'text':
+ return
+ case 'rectangle':
+ case 'image':
+ case 'grid':
+ return
+ default:
+ return
+ }
+ }
+
+ const getLayerLabel = (type: string) => {
+ switch (type) {
+ case 'text':
+ return 'متن'
+ case 'rectangle':
+ case 'image':
+ case 'grid':
+ return 'اشکال هندسی'
+ default:
+ return 'لایه'
+ }
+ }
+
+ return (
+
+
+ {objects.length === 0 ? (
+
+ لایهای وجود ندارد
+
+ ) : (
+ objects.map((obj) => {
+ const isSelected = selectedObjectId === obj.id
+ return (
+
setSelectedObjectId(obj.id)}
+ className={clx(
+ 'flex items-center gap-3 p-3 rounded-lg cursor-pointer transition-colors',
+ isSelected
+ ? 'bg-blue-50 border border-blue-200'
+ : 'bg-gray-50 hover:bg-gray-100'
+ )}
+ >
+
{getLayerIcon(obj.type)}
+
{getLayerLabel(obj.type)}
+
+
+
+
+
+
+ )
+ })
+ )}
+
+
+ )
+}
+
+export default LayersList
+
diff --git a/src/pages/editor/components/LayersPanel.tsx b/src/pages/editor/components/LayersPanel.tsx
index 70c3a58..7078a37 100644
--- a/src/pages/editor/components/LayersPanel.tsx
+++ b/src/pages/editor/components/LayersPanel.tsx
@@ -1,7 +1,8 @@
-import { DocumentText, Layer, Eye, Trash, ArrowRight2, Text, Shapes, Add, Copy } from 'iconsax-react'
-import { useEditorStore } from '../store/editorStore'
+import { DocumentText, Layer, ArrowRight2 } from 'iconsax-react'
import { clx } from '@/helpers/utils'
import { useState } from 'react'
+import PagesPanel from './PagesPanel'
+import LayersList from './LayersList'
type TabType = 'pages' | 'layers'
@@ -12,55 +13,6 @@ type LayersPanelProps = {
const LayersPanel = ({ isOpen, setIsOpen }: LayersPanelProps) => {
const [activeTab, setActiveTab] = useState('pages')
- const { objects, selectedObjectId, setSelectedObjectId, deleteObject, duplicateObject } = useEditorStore()
- const {
- pages,
- currentPageId,
- setCurrentPage,
- addPage,
- duplicatePage,
- deletePage,
- } = useEditorStore()
-
- const getLayerIcon = (type: string) => {
- switch (type) {
- case 'text':
- return
- case 'rectangle':
- case 'image':
- case 'grid':
- return
- default:
- return
- }
- }
-
- const getLayerLabel = (type: string) => {
- switch (type) {
- case 'text':
- return 'متن'
- case 'rectangle':
- case 'image':
- case 'grid':
- return 'اشکال هندسی'
- default:
- return 'لایه'
- }
- }
-
- const handleAddPage = () => {
- addPage()
- }
-
- const handleDuplicatePage = (pageId: string) => {
- duplicatePage(pageId)
- }
-
- const handleDeletePage = (pageId: string) => {
- if (pages.length > 1) {
- deletePage(pageId)
- }
- }
if (!isOpen) {
return (
@@ -135,131 +87,7 @@ const LayersPanel = ({ isOpen, setIsOpen }: LayersPanelProps) => {
- {activeTab === 'pages' ? (
- <>
-
-
- {pages.length === 0 ? (
-
- صفحهای وجود ندارد
-
- ) : (
- pages.map((page) => {
- const isSelected = currentPageId === page.id
- return (
-
setCurrentPage(page.id)}
- className={clx(
- 'flex flex-col gap-2 cursor-pointer transition-colors',
- isSelected && ' rounded-lg p-0.5'
- )}
- >
-
-
-
-
- {page.name}
-
-
- )
- })
- )}
-
-
-
-
-
-
- {currentPageId && (
- <>
-
-
- >
- )}
-
-
- >
- ) : (
-
-
- {objects.length === 0 ? (
-
- لایهای وجود ندارد
-
- ) : (
- objects.map((obj) => {
- const isSelected = selectedObjectId === obj.id
- return (
-
setSelectedObjectId(obj.id)}
- className={clx(
- 'flex items-center gap-3 p-3 rounded-lg cursor-pointer transition-colors',
- isSelected ? 'bg-blue-50 border border-blue-200' : 'bg-gray-50 hover:bg-gray-100'
- )}
- >
-
- {getLayerIcon(obj.type)}
-
-
- {getLayerLabel(obj.type)}
-
-
-
-
-
-
-
- )
- })
- )}
-
-
- )}
+ {activeTab === 'pages' ? : }
diff --git a/src/pages/editor/components/PagesPanel.tsx b/src/pages/editor/components/PagesPanel.tsx
new file mode 100644
index 0000000..41e9844
--- /dev/null
+++ b/src/pages/editor/components/PagesPanel.tsx
@@ -0,0 +1,99 @@
+import { DocumentText, Copy, Trash, AddSquare } from 'iconsax-react'
+import { useEditorStore } from '../store/editorStore'
+import { clx } from '@/helpers/utils'
+
+const PagesPanel = () => {
+ const {
+ pages,
+ currentPageId,
+ setCurrentPage,
+ addPage,
+ duplicatePage,
+ deletePage,
+ } = useEditorStore()
+
+ const handleAddPage = () => {
+ addPage()
+ }
+
+ const handleDuplicatePage = (pageId: string) => {
+ duplicatePage(pageId)
+ }
+
+ const handleDeletePage = (pageId: string) => {
+ if (pages.length > 1) {
+ deletePage(pageId)
+ }
+ }
+
+ return (
+ <>
+
+
+ {pages.length === 0 ? (
+
+ صفحهای وجود ندارد
+
+ ) : (
+ pages.map((page) => {
+ const isSelected = currentPageId === page.id
+ return (
+
setCurrentPage(page.id)}
+ className={clx(
+ 'flex flex-col gap-2 cursor-pointer transition-colors',
+ isSelected && ' rounded-lg p-0.5'
+ )}
+ >
+
+
+
+
+ {page.name}
+
+
+ )
+ })
+ )}
+
+
+
+
+
+
+ {currentPageId && (
+ <>
+
+
+ >
+ )}
+
+
+ >
+ )
+}
+
+export default PagesPanel
+