onSetActivePage(page.id)}
+ onContextMenu={handleShowContextMenu}
+ style={{
+ opacity: dragging ? 0.4 : 1,
+ background: isDraggedOver ? 'lightblue' : 'white',
+ }}
+ key={key}
+ >
+
+
+
+ {shapes.map(shape => {
+ if (!fakeShapeRefs.current[shape.id]) {
+ fakeShapeRefs.current[shape.id] = createRef();
+ }
+ return renderShapeComponent(shape, {
+ handleSelected: () => {},
+ shapeRefs: fakeShapeRefs,
+ handleDragEnd:
+ (_: string) => (_: KonvaEventObject) => {},
+ handleTransform: () => {},
+ });
+ })}
+
+
+
+
+
+
+
+ {showContextMenu && (
+
+ )}
+
+ >
+ );
+};
diff --git a/src/pods/thumb-pages/index.ts b/src/pods/thumb-pages/index.ts
new file mode 100644
index 00000000..864664f5
--- /dev/null
+++ b/src/pods/thumb-pages/index.ts
@@ -0,0 +1 @@
+export * from './thumb-pages.pod';
diff --git a/src/pods/thumb-pages/monitor-drop-thumb.hook.ts b/src/pods/thumb-pages/monitor-drop-thumb.hook.ts
new file mode 100644
index 00000000..c2d8e151
--- /dev/null
+++ b/src/pods/thumb-pages/monitor-drop-thumb.hook.ts
@@ -0,0 +1,25 @@
+import { useEffect } from 'react';
+import { monitorForElements } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';
+import { useCanvasContext } from '@/core/providers';
+
+export const useMonitorDropThumb = () => {
+ const { fullDocument, swapPages } = useCanvasContext();
+
+ // Monitor
+ useEffect(() => {
+ return monitorForElements({
+ onDrop({ source, location }) {
+ const destination = location.current.dropTargets[0];
+ if (!destination || source.data.pageId === destination.data.pageId) {
+ return;
+ }
+ if (destination.data.type === 'thumbPage') {
+ swapPages(
+ String(source.data.pageId),
+ String(destination.data.pageId)
+ );
+ }
+ },
+ });
+ }, [fullDocument.pages]);
+};
diff --git a/src/pods/thumb-pages/thumb-pages.module.css b/src/pods/thumb-pages/thumb-pages.module.css
new file mode 100644
index 00000000..832abe0c
--- /dev/null
+++ b/src/pods/thumb-pages/thumb-pages.module.css
@@ -0,0 +1,68 @@
+.container {
+ display: flex;
+ padding: var(--space-s);
+ gap: var(--space-s);
+ align-items: center;
+ justify-content: center;
+ flex-direction: column;
+}
+
+.thumb {
+ width: 100%;
+ height: 240px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ animation: cubic-bezier(1, 0, 0, 1) 0.3s 1 normal thumb;
+}
+.activeThumb {
+ width: 100%;
+ height: 240px;
+ background-color: var(--primary-100);
+ border-radius: 5px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ animation: ease 0.3s 1 normal thumb;
+}
+
+/* .activeText {
+ color: white;
+} */
+
+.addButton {
+ margin-top: var(--space-md);
+ margin-bottom: var(--space-md);
+ border: 1px solid var(--primary-700);
+ background-color: transparent;
+ width: 35px;
+ height: 35px;
+ border-radius: 100%;
+ font-size: var(--fs-lg);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ transition: background-color 0.3s;
+ cursor: pointer;
+}
+
+.addButton:hover {
+ background-color: var(--primary-700);
+ color: white;
+}
+
+@keyframes thumb {
+ 0% {
+ height: 0;
+ width: 0;
+ opacity: 0;
+ }
+ 15% {
+ opacity: 0;
+ }
+ 100% {
+ opacity: 1;
+ width: 100%;
+ height: 240px;
+ }
+}
diff --git a/src/pods/thumb-pages/thumb-pages.pod.tsx b/src/pods/thumb-pages/thumb-pages.pod.tsx
new file mode 100644
index 00000000..30de47c4
--- /dev/null
+++ b/src/pods/thumb-pages/thumb-pages.pod.tsx
@@ -0,0 +1,75 @@
+import React from 'react';
+import classes from './thumb-pages.module.css';
+import { useCanvasContext } from '@/core/providers';
+import { PageTitleInlineEdit, ThumbPage } from './components';
+import { PlusIcon } from '@/common/components/icons';
+import { useMonitorDropThumb } from './monitor-drop-thumb.hook';
+
+interface Props {
+ isVisible: boolean;
+}
+
+export const ThumbPagesPod: React.FC