Skip to content
Source
Sign inSign up

modelPickerVisibility.ts

28 lines822 Bytes

1// Keydown handlers read this on every key, so a mount count replaces a document query.
2let mountedModelPickers = 0;
3const listeners = new Set<() => void>();
4​
5function setMountedModelPickers(next: number) {
6 const wasOpen = mountedModelPickers > 0;
7 mountedModelPickers = next;
8 if (wasOpen === mountedModelPickers > 0) return;
9 for (const listener of listeners) listener();
11​
12export function registerModelPickerContent(): () => void {
13 setMountedModelPickers(mountedModelPickers + 1);
14 return () => {
15 setMountedModelPickers(mountedModelPickers - 1);
16 };
18​
19export function isModelPickerOpen(): boolean {
20 return mountedModelPickers > 0;
22​
23export function subscribeToModelPickerVisibility(listener: () => void): () => void {
24 listeners.add(listener);
25 return () => {
26 listeners.delete(listener);
27 };