Keep provider settings above the model selector (#2476)
* fix(app): keep provider settings above model selector Desktop web comboboxes used the browser top layer, so ordinary modal portals could not cover them. Keep web overlays in one relative layer stack while preserving native bottom-sheet stacking. * fix(app): route overlay keyboard ownership * fix(app): preserve nested overlay ownership * fix(app): route command center overlay input * fix(app): preserve global overlay ancestry * fix(app): register global dialog hosts
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
import { afterEach, describe, expect, it } from "vitest";
|
||||
import { useProviderSettingsStore } from "./provider-settings-store";
|
||||
|
||||
describe("provider settings store", () => {
|
||||
afterEach(() => {
|
||||
useProviderSettingsStore.setState({
|
||||
serverId: null,
|
||||
provider: null,
|
||||
overlayParentLayer: 0,
|
||||
visible: false,
|
||||
});
|
||||
});
|
||||
|
||||
it("carries the opener layer without leaking it into later base-level opens", () => {
|
||||
useProviderSettingsStore.getState().open({
|
||||
serverId: "server-1",
|
||||
provider: "codex",
|
||||
overlayParentLayer: 30,
|
||||
});
|
||||
expect(useProviderSettingsStore.getState().overlayParentLayer).toBe(30);
|
||||
|
||||
useProviderSettingsStore.getState().open({
|
||||
serverId: "server-1",
|
||||
provider: "claude",
|
||||
});
|
||||
expect(useProviderSettingsStore.getState().overlayParentLayer).toBe(0);
|
||||
});
|
||||
});
|
||||
@@ -3,11 +3,13 @@ import { create } from "zustand";
|
||||
interface ProviderSettingsTarget {
|
||||
serverId: string;
|
||||
provider: string;
|
||||
overlayParentLayer?: number;
|
||||
}
|
||||
|
||||
interface ProviderSettingsStoreState {
|
||||
serverId: string | null;
|
||||
provider: string | null;
|
||||
overlayParentLayer: number;
|
||||
visible: boolean;
|
||||
open: (target: ProviderSettingsTarget) => void;
|
||||
close: () => void;
|
||||
@@ -16,9 +18,10 @@ interface ProviderSettingsStoreState {
|
||||
export const useProviderSettingsStore = create<ProviderSettingsStoreState>()((set) => ({
|
||||
serverId: null,
|
||||
provider: null,
|
||||
overlayParentLayer: 0,
|
||||
visible: false,
|
||||
open: ({ serverId, provider }) => {
|
||||
set({ serverId, provider, visible: true });
|
||||
open: ({ serverId, provider, overlayParentLayer = 0 }) => {
|
||||
set({ serverId, provider, overlayParentLayer, visible: true });
|
||||
},
|
||||
close: () => {
|
||||
set({ visible: false });
|
||||
|
||||
Reference in New Issue
Block a user