diff --git a/app.go b/app.go
index 13baa8a..72c6752 100644
--- a/app.go
+++ b/app.go
@@ -47,7 +47,7 @@ func NewApp() *App {
// startup вызывается при запуске приложения
func (a *App) startup(ctx context.Context) {
a.ctx = ctx
- runtime.WindowSetTitle(ctx, "v1.0.2")
+ runtime.WindowSetTitle(ctx, "v1.0.3")
runtime.WindowSetPosition(ctx, 1500, 80)
}
diff --git a/frontend/src/App.svelte b/frontend/src/App.svelte
index 52b876c..863bb93 100644
--- a/frontend/src/App.svelte
+++ b/frontend/src/App.svelte
@@ -9,6 +9,8 @@
import Servers from "./Servers.svelte";
import Utility from "./Utility.svelte";
import Projects from "./Projects.svelte";
+ import Popover from "./components/Popover.svelte";
+ import { popovers } from "./stores/popover.js";
// import {BrowserOpenURL} from '../wailsjs/runtime/runtime.js'
// Определение интерфейса для типа Disk
@@ -100,6 +102,11 @@
+
+{#each $popovers as { content, triggerRect, options }}
+
+{/each}
+
\ No newline at end of file
diff --git a/frontend/src/components/Popover.svelte b/frontend/src/components/Popover.svelte
new file mode 100644
index 0000000..23f52c4
--- /dev/null
+++ b/frontend/src/components/Popover.svelte
@@ -0,0 +1,48 @@
+
+
+
+ {@html content}
+
+
+
\ No newline at end of file
diff --git a/frontend/src/components/PopoverTrigger.svelte b/frontend/src/components/PopoverTrigger.svelte
new file mode 100644
index 0000000..15fc165
--- /dev/null
+++ b/frontend/src/components/PopoverTrigger.svelte
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/frontend/src/stores/popover.js b/frontend/src/stores/popover.js
new file mode 100644
index 0000000..f383aec
--- /dev/null
+++ b/frontend/src/stores/popover.js
@@ -0,0 +1,15 @@
+import { writable } from 'svelte/store';
+
+export const popovers = writable([]);
+
+let popoverId = 0;
+
+export function showPopover(content, triggerRect, options = {}) {
+ const id = popoverId++;
+ popovers.update(items => [...items, { id, content, triggerRect, options }]);
+ return id;
+}
+
+export function hidePopover(id) {
+ popovers.update(items => items.filter(item => item.id !== id));
+}
\ No newline at end of file
diff --git a/frontend/src/style.css b/frontend/src/style.css
index 3e3ea4a..4e53929 100644
--- a/frontend/src/style.css
+++ b/frontend/src/style.css
@@ -23,4 +23,31 @@ body {
#app {
height: 100vh;
text-align: center;
-}
\ No newline at end of file
+}
+
+/* Стили popover */
+.popover {
+ position: absolute;
+ top: calc(100% + 4px); /* Отступ вниз */
+ right: 0; /* Выравнивание по правой границе */
+ padding: 10px;
+ background: #f8f9fa;
+ border: 1px solid #ccc;
+ box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
+ border-radius: 5px;
+
+ /* Подготовка для анимации */
+ opacity: 0;
+ transform: translateY(-10px);
+ pointer-events: none;
+
+ /* Длительность анимации 300ms */
+ transition: opacity 300ms ease, transform 300ms ease;
+}
+
+/* Анимация при открытии popover */
+.popover:popover-open {
+ opacity: 1;
+ transform: translateY(0);
+ pointer-events: auto;
+}