diff --git a/src/features/export-image/index.ts b/src/features/export-image/index.ts
new file mode 100644
index 0000000..ae23bac
--- /dev/null
+++ b/src/features/export-image/index.ts
@@ -0,0 +1 @@
+export { default as ExportImageDropdown } from './ui/export-image-dropdown.svelte';
diff --git a/src/pages/main/model/export-image.ts b/src/features/export-image/model/export-image.ts
similarity index 74%
rename from src/pages/main/model/export-image.ts
rename to src/features/export-image/model/export-image.ts
index 2f1e4da..4ab9aef 100644
--- a/src/pages/main/model/export-image.ts
+++ b/src/features/export-image/model/export-image.ts
@@ -1,17 +1,20 @@
-import { get } from 'svelte/store';
+import type { Viewport } from '@rastrr-editor/core';
import { downloadBlob } from '~/shared/lib/url';
-import { viewport as viewportStore } from './store';
const IMAGE_MIME_TYPE = {
png: 'image/png',
jpg: 'image/jpeg',
};
-export default function exportImage(name: string, ext: 'png' | 'jpg'): void {
- const viewport = get(viewportStore);
+export default function exportImage(
+ viewport: Viewport | null,
+ name: string,
+ ext: 'png' | 'jpg',
+): void {
if (viewport == null) {
return;
}
+
viewport
.toBlob(IMAGE_MIME_TYPE[ext], ext === 'jpg' ? 0.85 : undefined)
.then((blob) => {
diff --git a/src/features/export-image/ui/export-image-dropdown.svelte b/src/features/export-image/ui/export-image-dropdown.svelte
new file mode 100644
index 0000000..6152407
--- /dev/null
+++ b/src/features/export-image/ui/export-image-dropdown.svelte
@@ -0,0 +1,25 @@
+
+
+
+ exportImage(viewport, $activeProject?.name ?? '', 'jpg')}>
+ JPEG
+
+ exportImage(viewport, $activeProject?.name ?? '', 'png')}>
+ PNG
+
+
diff --git a/src/features/save-project/index.ts b/src/features/save-project/index.ts
new file mode 100644
index 0000000..d71f587
--- /dev/null
+++ b/src/features/save-project/index.ts
@@ -0,0 +1,2 @@
+export * from './model';
+export { default as SaveProjectDropdownItem } from './ui/save-project-dropdown-item.svelte';
diff --git a/src/features/save-project/model/index.ts b/src/features/save-project/model/index.ts
new file mode 100644
index 0000000..50e9131
--- /dev/null
+++ b/src/features/save-project/model/index.ts
@@ -0,0 +1 @@
+export { default as saveProject } from './save-project';
diff --git a/src/pages/main/model/save-project.ts b/src/features/save-project/model/save-project.ts
similarity index 84%
rename from src/pages/main/model/save-project.ts
rename to src/features/save-project/model/save-project.ts
index cedbd66..2bf0b1d 100644
--- a/src/pages/main/model/save-project.ts
+++ b/src/features/save-project/model/save-project.ts
@@ -1,14 +1,13 @@
import { get } from 'svelte/store';
+import type { Viewport } from '@rastrr-editor/core';
import { projectStore, createProjectRepository } from '~/entities/project';
-import { viewport as viewportStore } from './store';
-
const projectRepository = createProjectRepository();
-export default async function saveProject(): Promise {
+export default async function saveProject(
+ viewport: Viewport | null,
+): Promise {
const project = get(projectStore.activeProject);
- const viewport = get(viewportStore);
-
const isNewProject = project?.id == null;
if (project && viewport) {
diff --git a/src/features/save-project/ui/save-project-dropdown-item.svelte b/src/features/save-project/ui/save-project-dropdown-item.svelte
new file mode 100644
index 0000000..372b33f
--- /dev/null
+++ b/src/features/save-project/ui/save-project-dropdown-item.svelte
@@ -0,0 +1,12 @@
+
+
+Сохранить проект
diff --git a/src/pages/main/model/hotkeys/register-hotkeys.ts b/src/pages/main/model/hotkeys/register-hotkeys.ts
index 0d46734..0f3e698 100644
--- a/src/pages/main/model/hotkeys/register-hotkeys.ts
+++ b/src/pages/main/model/hotkeys/register-hotkeys.ts
@@ -1,17 +1,20 @@
+import { get } from 'svelte/store';
import { hotkeys } from '~/features/hotkeys-manager';
+import { saveProject } from '~/features/save-project';
+
import { brushConstants, BrushTool } from '~/features/tools/brush';
import { eraserConstants, EraserTool } from '~/features/tools/eraser';
+import { toolStore, type Tool } from '~/entities/tool';
+
import {
ellipseConstants,
EllipseTool,
rectConstants,
RectTool,
} from '~/features/tools/shape';
-import { toolStore, type Tool } from '~/entities/tool';
import { handleHistoryHotkeys, HistoryEvents } from './handle-history-hotkeys';
-import saveProject from '../save-project';
import { viewport } from '../store';
export default function registerHotkeys(): () => void {
@@ -30,7 +33,7 @@ export default function registerHotkeys(): () => void {
hotkeys.emitter.on('activated:save', (_alias, _ctx, e) => {
e.preventDefault();
- saveProject().then(() => console.log('Saved'));
+ saveProject(get(viewport)).then(() => console.log('Saved'));
});
subscriptions.push(() =>
diff --git a/src/pages/main/types.ts b/src/pages/main/types.ts
deleted file mode 100644
index 2427b00..0000000
--- a/src/pages/main/types.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-export type MainPageRouterParams = {
- projectId?: string;
-};
diff --git a/src/pages/main/ui/main-page-header.svelte b/src/pages/main/ui/main-page-header.svelte
index f12fc9c..5137332 100644
--- a/src/pages/main/ui/main-page-header.svelte
+++ b/src/pages/main/ui/main-page-header.svelte
@@ -1,14 +1,11 @@
@@ -44,28 +39,13 @@
Создать проект
-
- Сохранить проект
-
+
Сохранить как
{#snippet menu()}
-
-
- exportImage($activeProject?.name ?? '', 'jpg')}>
- JPEG
-
-
- exportImage($activeProject?.name ?? '', 'png')}>
- PNG
-
-
+
{/snippet}
@@ -84,15 +64,7 @@
-
- toolPanelStore.position.set(
- $toolPanelPosition === 'bottom' ? 'left' : 'bottom',
- )}>
- Панель инструметов {$toolPanelPosition === 'bottom'
- ? 'слева'
- : 'снизу'}
-
+
{/snippet}
diff --git a/src/widgets/tool-panel/index.ts b/src/widgets/tool-panel/index.ts
index 486d65d..960cead 100644
--- a/src/widgets/tool-panel/index.ts
+++ b/src/widgets/tool-panel/index.ts
@@ -1,2 +1,2 @@
+export { default as ToolPanelDropdownItem } from './ui/tool-panel-dropdown-item.svelte';
export { default as ToolPanel } from './ui/tool-panel.svelte';
-export * from './model';
diff --git a/src/widgets/tool-panel/model/index.ts b/src/widgets/tool-panel/model/index.ts
deleted file mode 100644
index 16f6e64..0000000
--- a/src/widgets/tool-panel/model/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export * as toolPanelStore from './store';
diff --git a/src/widgets/tool-panel/ui/tool-panel-dropdown-item.svelte b/src/widgets/tool-panel/ui/tool-panel-dropdown-item.svelte
new file mode 100644
index 0000000..9bd860a
--- /dev/null
+++ b/src/widgets/tool-panel/ui/tool-panel-dropdown-item.svelte
@@ -0,0 +1,14 @@
+
+
+
+ Панель инструментов {positionText}
+