Update: user changes

This commit is contained in:
Andres Santana
2026-09-30 12:37:06 -04:00
commit 6915f75298
96 changed files with 23603 additions and 0 deletions
@@ -0,0 +1,65 @@
/** @enum {string} Unique identifier for each action panel. */
export const PanelId = Object.freeze({
COLOR: 'color',
FONT: 'font',
SIZE: 'size',
LINK: 'link',
});
/**
* Tracks whether each panel is currently open.
* @type {Map<string, boolean>}
*/
const visibility = new Map();
/**
* The hide function supplied by each panel at registration time.
* @type {Map<string, () => void>}
*/
const hideFunctions = new Map();
/**
* Register an action panel so it participates in bulk show/hide operations.
* Called once at module load time by each panel.
* @param {{ id: string, hide: () => void }} panel
*/
export function registerPanel({ id, hide }) {
hideFunctions.set(id, hide);
visibility.set(id, false);
}
/**
* Update the visibility state for a panel.
* Called by the panel's own show/hide functions.
* @param {string} id - A {@link PanelId} value.
* @param {boolean} visible
*/
export function setPanelVisible(id, visible) {
visibility.set(id, visible);
}
/**
* @param {string} id - A {@link PanelId} value.
* @returns {boolean}
*/
export function isPanelVisible(id) {
return visibility.get(id) ?? false;
}
/**
* Hide a single panel by ID.
* @param {string} id - A {@link PanelId} value.
*/
export function hidePanelById(id) {
hideFunctions.get(id)?.();
}
/** Hide every registered panel. */
export function hideAllPanels() {
for (const id of hideFunctions.keys()) hidePanelById(id);
}
/** @returns {boolean} True if at least one panel is currently visible. */
export function anyPanelVisible() {
return [...visibility.values()].some(Boolean);
}