import { settings } from "../settings.js"; import { isValidPlacement, placements } from "../ui-library/window.js"; import { closeOnOutsideClick, createWindowElement, synchronizePlacementOnUpdate } from "./utils/window.js"; const settingsRows = [ { name: "Disable notifications", description: "Hide notification badges in the toolbar.", input: "checkbox", settingKey: "disableAppNotification", changeEvent: (evt) => { if (evt.currentTarget instanceof HTMLInputElement) { const devToolbar = document.querySelector("astro-dev-toolbar"); if (devToolbar) { devToolbar.setNotificationVisible(!evt.currentTarget.checked); } settings.updateSetting("disableAppNotification", evt.currentTarget.checked); const action = evt.currentTarget.checked ? "disabled" : "enabled"; settings.logger.verboseLog(`App notification badges ${action}`); } } }, { name: "Verbose logging", description: "Logs dev toolbar events in the browser console.", input: "checkbox", settingKey: "verbose", changeEvent: (evt) => { if (evt.currentTarget instanceof HTMLInputElement) { settings.updateSetting("verbose", evt.currentTarget.checked); const action = evt.currentTarget.checked ? "enabled" : "disabled"; settings.logger.verboseLog(`Verbose logging ${action}`); } } }, { name: "Placement", description: "Adjust the placement of the dev toolbar.", input: "select", settingKey: "placement", changeEvent: (evt) => { if (evt.currentTarget instanceof HTMLSelectElement) { const placement = evt.currentTarget.value; if (isValidPlacement(placement)) { document.querySelector("astro-dev-toolbar")?.setToolbarPlacement(placement); settings.updateSetting("placement", placement); settings.logger.verboseLog(`Placement set to ${placement}`); } } } } ]; var settings_default = { id: "astro:settings", name: "Settings", icon: "gear", init(canvas, eventTarget) { createSettingsWindow(); document.addEventListener("astro:after-swap", createSettingsWindow); closeOnOutsideClick(eventTarget); synchronizePlacementOnUpdate(eventTarget, canvas); function createSettingsWindow() { const windowElement = createWindowElement( `

Settings


` ); const general = windowElement.querySelector("#general"); for (const settingsRow of settingsRows) { general.after(document.createElement("hr")); general.after(getElementForSettingAsString(settingsRow)); } canvas.append(windowElement); function getElementForSettingAsString(setting) { const label = document.createElement("label"); label.classList.add("setting-row"); const section = document.createElement("section"); section.innerHTML = `

${setting.name}

${setting.description}`; label.append(section); switch (setting.input) { case "checkbox": { const astroToggle = document.createElement("astro-dev-toolbar-toggle"); astroToggle.input.addEventListener("change", setting.changeEvent); astroToggle.input.checked = settings.config[setting.settingKey]; label.append(astroToggle); break; } case "select": { const astroSelect = document.createElement("astro-dev-toolbar-select"); placements.forEach((placement) => { const option = document.createElement("option"); option.setAttribute("value", placement); if (placement === settings.config[setting.settingKey]) { option.selected = true; } option.textContent = `${placement.slice(0, 1).toUpperCase()}${placement.slice( 1 )}`.replace("-", " "); astroSelect.append(option); }); astroSelect.element.addEventListener("change", setting.changeEvent); label.append(astroSelect); break; } case "number": case "text": default: break; } return label; } } } }; export { settings_default as default };