Skip to content

Commit b5972d8

Browse files
dxllivcursoragent
andcommitted
feat(theme-nova): integrate kit-theme window snap and work area
Wire shell stage work area, snap drag handlers, snap hints overlay, and maximize layout via useToggleWindowMaximize from kit-theme. Co-authored-by: Cursor <cursoragent@cursor.com>
1 parent 8a1844d commit b5972d8

5 files changed

Lines changed: 24 additions & 5 deletions

File tree

src/runtime/components/Desktop.client.vue

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,13 @@ import NovaConfirmDialogs from "./NovaConfirmDialogs.vue";
1010
import NovaLauncherOverlay from "./NovaLauncherOverlay.vue";
1111
import NovaTopBar from "./NovaTopBar.vue";
1212
import NovaWorkspaceEdgeHints from "./NovaWorkspaceEdgeHints.vue";
13+
import NovaWindowSnapHints from "./NovaWindowSnapHints.vue";
1314
import NovaWorkspaceStack from "./NovaWorkspaceStack.vue";
15+
import { useDesktopWorkArea } from "@owdproject/kit-theme/runtime/composables/useDesktopWorkArea";
16+
import {
17+
provideDesktopShellStage,
18+
provideDesktopWorkArea,
19+
} from "@owdproject/kit-theme/runtime/composables/provideDesktopShellStage";
1420
import { useNovaStartMenu } from "../composables/useNovaStartMenu";
1521
import { useNovaAccentTheme } from "../composables/useNovaAccentTheme";
1622
import { useNovaWorkspaces } from "../composables/useNovaWorkspaces";
@@ -31,6 +37,9 @@ const { overview: workspaceOverview } = storeToRefs(desktopWorkspaceStore);
3137
const isOverviewEnabled = computed(() => workspaceOverview.value === true);
3238
const shellStageRef = ref(null);
3339
provide("novaShellStage", shellStageRef);
40+
const { workArea } = useDesktopWorkArea(shellStageRef);
41+
provideDesktopShellStage(shellStageRef);
42+
provideDesktopWorkArea(workArea);
3443
3544
const BODY_SHELL_CLASS = "owd-has-nova-desktop";
3645
@@ -73,6 +82,7 @@ onUnmounted(() => {
7382
<NovaTopBar />
7483

7584
<NovaWorkspaceEdgeHints v-if="workspacesEnabled" />
85+
<NovaWindowSnapHints />
7686

7787
<div ref="shellStageRef" class="nova-shell__stage">
7888
<Background />
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<script setup>
2+
import WindowSnapHintsBase from "@owdproject/kit-theme/runtime/components/WindowSnapHintsBase.vue";
3+
</script>
4+
5+
<template>
6+
<WindowSnapHintsBase />
7+
</template>

src/runtime/components/Window/Window.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
<script setup>
2-
import { useWorkspaceEdgeDropWindowHandlers } from "@owdproject/kit-theme/runtime/composables/useWorkspaceEdgeDrop";
2+
import { useDesktopWindowDragHandlersInjected } from "@owdproject/kit-theme/runtime/composables/useDesktopWindowDragHandlers";
33
const props = defineProps({
44
config: { type: null, required: false },
55
window: { type: null, required: false },
66
content: { type: null, required: false }
77
});
8-
const { onDragStart, onDragEnd } = useWorkspaceEdgeDropWindowHandlers(
8+
const { onDragStart, onDragEnd } = useDesktopWindowDragHandlersInjected(
99
() => props.window
1010
);
1111
</script>

src/runtime/components/Window/WindowNav.vue

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@ import ButtonWindowNavMinimize from "../Button/ButtonWindowNavMinimize.vue";
55
import ButtonWindowNavMaximize from "../Button/ButtonWindowNavMaximize.vue";
66
import ButtonWindowNavClose from "../Button/ButtonWindowNavClose.vue";
77
import { useWindowNavContextMenu } from "../../composables/useWindowNavContextMenu";
8+
import { useToggleWindowMaximize } from "@owdproject/kit-theme/runtime/composables/useToggleWindowMaximize";
89
const windowController = inject("windowController");
10+
const toggleWindowMaximize = useToggleWindowMaximize();
911
const { menu, items, onNavContextMenu } = useWindowNavContextMenu(windowController);
1012
const windowNavContextMenuPt = {
1113
root: { class: "nova-window-nav-context-menu" }
@@ -15,8 +17,7 @@ function onWindowMinimize() {
1517
windowController.actions.minimize();
1618
}
1719
function onWindowMaximize() {
18-
if (!windowController?.instanced) return;
19-
windowController.actions.toggleMaximize();
20+
toggleWindowMaximize(windowController);
2021
}
2122
function onWindowNavDestroy() {
2223
if (!windowController?.instanced) return;

src/runtime/composables/useWindowNavContextMenu.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { useI18n } from 'vue-i18n'
33
import ContextMenu from 'primevue/contextmenu'
44
import type { IWindowController } from '@owdproject/core'
55
import type { MenuItem } from 'primevue/menuitem'
6+
import { useToggleWindowMaximize } from '@owdproject/kit-theme/runtime/composables/useToggleWindowMaximize'
67

78
export function useWindowNavContextMenu(
89
windowController: IWindowController | undefined,
@@ -30,7 +31,7 @@ export function useWindowNavContextMenu(
3031
? t('window.contextMenu.restore')
3132
: t('window.contextMenu.maximize'),
3233
icon: wc.isMaximized ? 'pi pi-window-minimize' : 'pi pi-window-maximize',
33-
command: () => wc.actions.toggleMaximize(),
34+
command: () => toggleWindowMaximize(wc),
3435
})
3536
}
3637

0 commit comments

Comments
 (0)