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; +}