diff --git a/src/components/layout/AppHeader.svelte b/src/components/layout/AppHeader.svelte
index 39f62a5..187bb23 100644
--- a/src/components/layout/AppHeader.svelte
+++ b/src/components/layout/AppHeader.svelte
@@ -1,4 +1,7 @@
+
+
+{#snippet emptySnippet()}{/snippet}
+
+
+
+
+ {@render children()}
+
+
+
+
diff --git a/src/components/layout/PanelBar.svelte b/src/components/layout/PanelBar.svelte
new file mode 100644
index 0000000..87d1d74
--- /dev/null
+++ b/src/components/layout/PanelBar.svelte
@@ -0,0 +1,28 @@
+
+
+
-
-
-
-
-
- {#if errorMessage}
-
- {errorMessage}
-
- {/if}
-
-
- {#if texts.length > 0}
-
-
Созданные тексты ({texts.length})
-
- {#each texts as textItem (textItem.id)}
-
- handleUpdateText(textItem.id, e.currentTarget.value)}
- class="text-edit-input"
- maxlength={TYPOGRAPHY.MAX_TEXT_LENGTH}
- />
-
-
- {/each}
-
-
- {/if}
-
-
-
Общие настройки текста
-
Настройки применятся ко всем создаваемым панелям
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
-
-
diff --git a/src/components/text/TextManager_old.svelte b/src/components/text/TextManager_old.svelte
new file mode 100644
index 0000000..84a7d1f
--- /dev/null
+++ b/src/components/text/TextManager_old.svelte
@@ -0,0 +1,414 @@
+
+
+
+
+
+
+
+
+ {#if errorMessage}
+
+ {errorMessage}
+
+ {/if}
+
+
+ {#if texts.length > 0}
+
+
Созданные тексты ({texts.length})
+
+ {#each texts as textItem (textItem.id)}
+
+ handleUpdateText(textItem.id, e.currentTarget.value)}
+ class="text-edit-input"
+ maxlength={TYPOGRAPHY.MAX_TEXT_LENGTH}
+ />
+
+
+ {/each}
+
+
+ {/if}
+
+
+
Общие настройки текста
+
Настройки применятся ко всем создаваемым панелям
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte
index ebfb687..7f808b9 100644
--- a/src/routes/+page.svelte
+++ b/src/routes/+page.svelte
@@ -7,7 +7,8 @@
import { panelService } from "../services/panelService";
import { textSettingsStore } from "../stores/panelStore";
- import AppContainer from "../components/layout/AppContainer.svelte";
+ import PanelBar from "$components/layout/PanelBar.svelte";
+ import TextBar from "$components/layout/TextBar.svelte";
let uploadedImage = $state
(undefined);
let panels = $state([]);
@@ -103,7 +104,12 @@
}
-
+
+
+
+
+
+
+
diff --git a/src/states/texts.state.svelte.ts b/src/states/texts.state.svelte.ts
new file mode 100644
index 0000000..f126835
--- /dev/null
+++ b/src/states/texts.state.svelte.ts
@@ -0,0 +1,25 @@
+export interface TextsState {
+ texts: string[];
+ addText(text: string): void;
+ removeText(text: string): void;
+}
+
+const defaultTexts: string[] = ["About me", "Links", "Projects"];
+
+function createTextsState(): TextsState {
+ let texts: string[] = $state(defaultTexts);
+
+ return {
+ get texts() {
+ return texts;
+ },
+ addText(text: string) {
+ texts = [...texts, text];
+ },
+ removeText(text: string) {
+ texts = texts.filter((t) => t !== text);
+ },
+ };
+}
+
+export const textsState = createTextsState();
diff --git a/svelte.config.js b/svelte.config.js
index a9e4c85..20342dd 100644
--- a/svelte.config.js
+++ b/svelte.config.js
@@ -15,6 +15,7 @@ const config = {
alias: {
$components: "src/components",
$stores: "src/stores",
+ $states: "src/states",
$services: "src/services",
},
},
diff --git a/tsconfig.json b/tsconfig.json
index 8cb2497..d168008 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -12,6 +12,7 @@
"strict": true,
"strictNullChecks": true,
"exactOptionalPropertyTypes": true,
- "moduleResolution": "bundler"
+ "moduleResolution": "bundler",
+ "allowArbitraryExtensions": true
}
}