From 85ade65a573eebaedda68f9e13f709c1018a7bb4 Mon Sep 17 00:00:00 2001 From: Idrees Hassan Date: Fri, 3 Apr 2026 19:06:28 -0700 Subject: [PATCH] Update colors and add icons --- dist/extension.zip | Bin 160542 -> 161133 bytes dist/extension/birb.js | 131 ++++++++++++++++++++++++++++------ dist/extension/manifest.json | 2 +- dist/obsidian/main.js | 133 ++++++++++++++++++++++++++++------- dist/obsidian/manifest.json | 2 +- dist/userscript/birb.user.js | 133 ++++++++++++++++++++++++++++------- dist/web/birb.embed.js | 131 ++++++++++++++++++++++++++++------ dist/web/birb.js | 131 ++++++++++++++++++++++++++++------ src/application.js | 62 +++++++++++++--- src/menu.js | 35 +++++++-- src/species.js | 11 +-- src/stylesheet.css | 23 +++++- 12 files changed, 652 insertions(+), 142 deletions(-) diff --git a/dist/extension.zip b/dist/extension.zip index cd5a50a305205e56b1759a93ea3c872267c82e0b..840aaa75ea0ce04bc815332374076dbdb2e05c59 100644 GIT binary patch delta 35237 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 diff --git a/dist/extension/birb.js b/dist/extension/birb.js index 0f6b1bc..3b77b68 100644 --- a/dist/extension/birb.js +++ b/dist/extension/birb.js @@ -622,8 +622,8 @@ "url": "https://en.wikipedia.org/wiki/Cuban_tody", "colors": { "beak": "#f16f54", - "face": "#5fdf44", - "chin": "#f12d3e", + "face": "#5ad63e", + "chin": "#e8273b", "collar": "#f12d3e", "belly": "#f6f5e4", "collar-scruff": "#a3ebff", @@ -644,11 +644,14 @@ "colors": { "face": "#9c3af2", "wing": "#8f37ed", - "wing-edge": "#7029b8", + "wing-edge": "#5b20c2", "belly": "#ffffff", "underbelly": "#f2f2f2", "foot": "#736a66", - "collar": "#aa60e6" + "collar": "#b760e6", + "nose": "#7a2ec7", + "cheek": "#7a2ec7", + "nose-tip": "#7a2ec7" }, "rarity": "uncommon" } @@ -1945,11 +1948,13 @@ /** * @param {string|(() => string)} text * @param {() => void} action + * @param {number[][]} [icon] * @param {boolean} [removeMenu] */ - constructor(text, action, removeMenu = true) { + constructor(text, action, icon, removeMenu = true) { this.text = text; this.action = action; + this.icon = icon; this.removeMenu = removeMenu; } } @@ -1959,10 +1964,11 @@ * @param {string} text * @param {() => void} action * @param {() => boolean} condition + * @param {number[][]} [icon] * @param {boolean} [removeMenu] */ - constructor(text, action, condition, removeMenu = true) { - super(text, action, removeMenu); + constructor(text, action, condition, icon, removeMenu = true) { + super(text, action, icon, removeMenu); this.condition = condition; } } @@ -1973,7 +1979,7 @@ * @param {() => void} action */ constructor(text, action, removeMenu = true) { - super(text, action, () => isDebug(), removeMenu); + super(text, action, () => isDebug(), undefined, removeMenu); } } @@ -1988,11 +1994,29 @@ * @param {() => void} removeMenuCallback * @returns {HTMLElement} */ - function makeMenuItem(item, removeMenuCallback) { + function createMenuItem(item, removeMenuCallback) { if (item instanceof Separator) { return makeElement("birb-window-separator"); } let menuItem = makeElement("birb-menu-item", typeof item.text === "function" ? item.text() : item.text); + if (item.icon) { + const iconCanvas = document.createElement("canvas"); + iconCanvas.width = 7; + iconCanvas.height = 6; + iconCanvas.classList.add("birb-menu-item-icon"); + const ctx = iconCanvas.getContext("2d"); + if (ctx) { + for (let row = 0; row < item.icon.length; row++) { + for (let col = 0; col < item.icon[row].length; col++) { + if (item.icon[row][col]) { + ctx.fillStyle = "black"; + ctx.fillRect(col, row, 1, 1); + } + } + } + } + menuItem.prepend(iconCanvas); + } onClick(menuItem, () => { if (item.removeMenu) { removeMenuCallback(); @@ -2020,7 +2044,7 @@ const removeCallback = () => removeMenu(); for (const item of menuItems) { if (!(item instanceof ConditionalMenuItem) || item.condition()) { - content.appendChild(makeMenuItem(item, removeCallback)); + content.appendChild(createMenuItem(item, removeCallback)); } } menu.appendChild(header); @@ -2077,7 +2101,7 @@ const removeCallback = () => removeMenu(); for (const item of menuItems) { if (!(item instanceof ConditionalMenuItem) || item.condition()) { - content.appendChild(makeMenuItem(item, removeCallback)); + content.appendChild(createMenuItem(item, removeCallback)); } } updateLocationCallback(menu); @@ -2328,15 +2352,17 @@ font-size: 14px; padding-top: 4px; padding-bottom: 4px; - padding-left: 10px; + padding-left: 2px; padding-right: 10px; box-sizing: border-box; opacity: 0.7 !important; user-select: none; display: flex; - justify-content: space-between; + justify-content: left; + align-items: center; cursor: pointer; color: black !important; + transition: background 0.1s, color 0.1s; } .birb-menu-item:hover { @@ -2348,6 +2374,21 @@ var(--birb-neg-border-size) 0 var(--birb-highlight), 0 var(--birb-neg-border-size) var(--birb-highlight), 0 var(--birb-border-size) var(--birb-highlight); + transition: none; +} + +.birb-menu-item-icon { + width: calc(7 * var(--birb-border-size)); + height: calc(6 * var(--birb-border-size)); + padding-right: calc(5 * var(--birb-border-size)); + flex-shrink: 0; + image-rendering: pixelated; + color: var(--birb-highlight); + opacity: 0.9; +} + +.birb-menu-item:hover > .birb-menu-item-icon { + filter: invert(1); } .birb-menu-item-arrow { @@ -2398,10 +2439,12 @@ justify-content: center; align-items: center; cursor: pointer; + transition: border-color 0.1s; } .birb-grid-item:hover { border-color: var(--birb-highlight); + transition: none; } .birb-grid-item canvas { @@ -2608,12 +2651,47 @@ }; const menuItems = [ - new MenuItem(`Pet ${birdBirb()}`, pet), - new MenuItem("Field Guide", insertFieldGuide), - new MenuItem("Wardrobe", insertWardrobe), - new ConditionalMenuItem("Sticky Note", () => createNewStickyNote(stickyNotes, save, deleteStickyNote), () => getContext().areStickyNotesEnabled()), - new MenuItem(`Hide ${birdBirb()}`, () => birb.setVisible(false)), - new DebugMenuItem("Freeze/Unfreeze", () => { + new MenuItem(`Pet ${birdBirb()}`, pet, [ + [0, 1, 1, 0, 1, 1, 0], + [1, 0, 0, 1, 0, 0, 1], + [1, 0, 0, 0, 0, 0, 1], + [0, 1, 0, 0, 0, 1, 0], + [0, 0, 1, 0, 1, 0, 0], + [0, 0, 0, 1, 0, 0, 0], + ]), + new MenuItem("Field Guide", insertFieldGuide, [ + [0, 1, 1, 0, 1, 1, 0], + [1, 0, 0, 1, 0, 0, 1], + [1, 0, 0, 1, 0, 0, 1], + [1, 0, 0, 1, 0, 0, 1], + [1, 0, 0, 1, 0, 0, 1], + [1, 1, 1, 0, 1, 1, 1], + ]), + new MenuItem("Wardrobe", insertWardrobe, [ + [0, 1, 1, 0, 1, 1, 0], + [1, 0, 0, 1, 0, 0, 1], + [1, 1, 0, 0, 0, 1, 1], + [0, 1, 0, 0, 0, 1, 0], + [0, 1, 0, 0, 0, 1, 0], + [0, 1, 1, 1, 1, 1, 0], + ]), + new ConditionalMenuItem("Sticky Note", () => createNewStickyNote(stickyNotes, save, deleteStickyNote), () => getContext().areStickyNotesEnabled(), [ + [0, 0, 1, 1, 1, 1, 0], + [0, 1, 0, 0, 0, 1, 0], + [1, 0, 0, 1, 0, 1, 0], + [1, 0, 1, 0, 0, 1, 0], + [1, 0, 0, 0, 0, 1, 0], + [1, 1, 1, 1, 1, 1, 0], + ]), + new MenuItem(`Hide ${birdBirb()}`, () => birb.setVisible(false), [ + [0, 1, 0, 1, 0, 1, 0], + [1, 0, 0, 1, 0, 0, 1], + [1, 0, 0, 1, 0, 0, 1], + [1, 0, 0, 0, 0, 0, 1], + [0, 1, 0, 0, 0, 1, 0], + [0, 0, 1, 1, 1, 0, 0], + ]), + new DebugMenuItem("Freeze", () => { frozen = !frozen; }), new DebugMenuItem("Reset Data", resetSaveData), @@ -2632,11 +2710,18 @@ setDebug(false); }), new Separator(), - new MenuItem("Settings", () => switchMenuItems(settingsItems, updateMenuLocation), false), + new MenuItem("Settings", () => switchMenuItems(settingsItems, updateMenuLocation), [ + [0, 0, 0, 0, 1, 1, 1], + [1, 1, 1, 1, 1, 0, 1], + [0, 0, 0, 0, 1, 1, 1], + [1, 1, 1, 0, 0, 0, 0], + [1, 0, 1, 1, 1, 1, 1], + [1, 1, 1, 0, 0, 0, 0], + ], false), ]; const settingsItems = [ - new MenuItem("Go Back", () => switchMenuItems(menuItems, updateMenuLocation), false), + new MenuItem("Go Back", () => switchMenuItems(menuItems, updateMenuLocation), undefined, false), new Separator(), new MenuItem(() => `${settings().soundEnabled ? "Disable" : "Enable"} Sound`, () => { userSettings.soundEnabled = !settings().soundEnabled; @@ -2656,7 +2741,7 @@ }), new Separator(), new MenuItem(() => `Source Code ${isPetBoostActive() ? " ❤" : ""}`, () => { window.open("https://github.com/IdreesInc/Pocket-Bird"); }), - new MenuItem("2026.3.30", () => { alert("Thank you for using Pocket Bird! You are on version: 2026.3.30"); }, false), + new MenuItem("Build 2026.4.3", () => { alert("Thank you for using Pocket Bird! You are on version: 2026.4.3"); }, undefined, false), ]; /** @type {Birb} */ @@ -3236,7 +3321,7 @@ latinName.textContent = type.latinName; latinName.href = type.url; latinName.target = "_blank"; - + const spacerTwo = document.createElement("div"); spacerTwo.style.height = "0.4em"; diff --git a/dist/extension/manifest.json b/dist/extension/manifest.json index 247dbb8..d79f6e0 100644 --- a/dist/extension/manifest.json +++ b/dist/extension/manifest.json @@ -2,7 +2,7 @@ "manifest_version": 3, "name": "Pocket Bird", "description": "It's a pet bird in your browser, what more could you want?", - "version": "2026.3.30", + "version": "2026.4.3", "homepage_url": "https://idreesinc.com", "icons": { "48": "images/icons/transparent/48x48x1.png", diff --git a/dist/obsidian/main.js b/dist/obsidian/main.js index 82a25f0..74ea4c1 100644 --- a/dist/obsidian/main.js +++ b/dist/obsidian/main.js @@ -1,7 +1,7 @@ const { Plugin, Notice } = require('obsidian'); module.exports = class PocketBird extends Plugin { onload() { - console.log("Loading Pocket Bird version 2026.3.30..."); + console.log("Loading Pocket Bird version 2026.4.3..."); const OBSIDIAN_PLUGIN = this; (function () { 'use strict'; @@ -627,8 +627,8 @@ module.exports = class PocketBird extends Plugin { "url": "https://en.wikipedia.org/wiki/Cuban_tody", "colors": { "beak": "#f16f54", - "face": "#5fdf44", - "chin": "#f12d3e", + "face": "#5ad63e", + "chin": "#e8273b", "collar": "#f12d3e", "belly": "#f6f5e4", "collar-scruff": "#a3ebff", @@ -649,11 +649,14 @@ module.exports = class PocketBird extends Plugin { "colors": { "face": "#9c3af2", "wing": "#8f37ed", - "wing-edge": "#7029b8", + "wing-edge": "#5b20c2", "belly": "#ffffff", "underbelly": "#f2f2f2", "foot": "#736a66", - "collar": "#aa60e6" + "collar": "#b760e6", + "nose": "#7a2ec7", + "cheek": "#7a2ec7", + "nose-tip": "#7a2ec7" }, "rarity": "uncommon" } @@ -1978,11 +1981,13 @@ module.exports = class PocketBird extends Plugin { /** * @param {string|(() => string)} text * @param {() => void} action + * @param {number[][]} [icon] * @param {boolean} [removeMenu] */ - constructor(text, action, removeMenu = true) { + constructor(text, action, icon, removeMenu = true) { this.text = text; this.action = action; + this.icon = icon; this.removeMenu = removeMenu; } } @@ -1992,10 +1997,11 @@ module.exports = class PocketBird extends Plugin { * @param {string} text * @param {() => void} action * @param {() => boolean} condition + * @param {number[][]} [icon] * @param {boolean} [removeMenu] */ - constructor(text, action, condition, removeMenu = true) { - super(text, action, removeMenu); + constructor(text, action, condition, icon, removeMenu = true) { + super(text, action, icon, removeMenu); this.condition = condition; } } @@ -2006,7 +2012,7 @@ module.exports = class PocketBird extends Plugin { * @param {() => void} action */ constructor(text, action, removeMenu = true) { - super(text, action, () => isDebug(), removeMenu); + super(text, action, () => isDebug(), undefined, removeMenu); } } @@ -2021,11 +2027,29 @@ module.exports = class PocketBird extends Plugin { * @param {() => void} removeMenuCallback * @returns {HTMLElement} */ - function makeMenuItem(item, removeMenuCallback) { + function createMenuItem(item, removeMenuCallback) { if (item instanceof Separator) { return makeElement("birb-window-separator"); } let menuItem = makeElement("birb-menu-item", typeof item.text === "function" ? item.text() : item.text); + if (item.icon) { + const iconCanvas = document.createElement("canvas"); + iconCanvas.width = 7; + iconCanvas.height = 6; + iconCanvas.classList.add("birb-menu-item-icon"); + const ctx = iconCanvas.getContext("2d"); + if (ctx) { + for (let row = 0; row < item.icon.length; row++) { + for (let col = 0; col < item.icon[row].length; col++) { + if (item.icon[row][col]) { + ctx.fillStyle = "black"; + ctx.fillRect(col, row, 1, 1); + } + } + } + } + menuItem.prepend(iconCanvas); + } onClick(menuItem, () => { if (item.removeMenu) { removeMenuCallback(); @@ -2053,7 +2077,7 @@ module.exports = class PocketBird extends Plugin { const removeCallback = () => removeMenu(); for (const item of menuItems) { if (!(item instanceof ConditionalMenuItem) || item.condition()) { - content.appendChild(makeMenuItem(item, removeCallback)); + content.appendChild(createMenuItem(item, removeCallback)); } } menu.appendChild(header); @@ -2110,7 +2134,7 @@ module.exports = class PocketBird extends Plugin { const removeCallback = () => removeMenu(); for (const item of menuItems) { if (!(item instanceof ConditionalMenuItem) || item.condition()) { - content.appendChild(makeMenuItem(item, removeCallback)); + content.appendChild(createMenuItem(item, removeCallback)); } } updateLocationCallback(menu); @@ -2361,15 +2385,17 @@ module.exports = class PocketBird extends Plugin { font-size: 14px; padding-top: 4px; padding-bottom: 4px; - padding-left: 10px; + padding-left: 2px; padding-right: 10px; box-sizing: border-box; opacity: 0.7 !important; user-select: none; display: flex; - justify-content: space-between; + justify-content: left; + align-items: center; cursor: pointer; color: black !important; + transition: background 0.1s, color 0.1s; } .birb-menu-item:hover { @@ -2381,6 +2407,21 @@ module.exports = class PocketBird extends Plugin { var(--birb-neg-border-size) 0 var(--birb-highlight), 0 var(--birb-neg-border-size) var(--birb-highlight), 0 var(--birb-border-size) var(--birb-highlight); + transition: none; +} + +.birb-menu-item-icon { + width: calc(7 * var(--birb-border-size)); + height: calc(6 * var(--birb-border-size)); + padding-right: calc(5 * var(--birb-border-size)); + flex-shrink: 0; + image-rendering: pixelated; + color: var(--birb-highlight); + opacity: 0.9; +} + +.birb-menu-item:hover > .birb-menu-item-icon { + filter: invert(1); } .birb-menu-item-arrow { @@ -2431,10 +2472,12 @@ module.exports = class PocketBird extends Plugin { justify-content: center; align-items: center; cursor: pointer; + transition: border-color 0.1s; } .birb-grid-item:hover { border-color: var(--birb-highlight); + transition: none; } .birb-grid-item canvas { @@ -2641,12 +2684,47 @@ module.exports = class PocketBird extends Plugin { }; const menuItems = [ - new MenuItem(`Pet ${birdBirb()}`, pet), - new MenuItem("Field Guide", insertFieldGuide), - new MenuItem("Wardrobe", insertWardrobe), - new ConditionalMenuItem("Sticky Note", () => createNewStickyNote(stickyNotes, save, deleteStickyNote), () => getContext().areStickyNotesEnabled()), - new MenuItem(`Hide ${birdBirb()}`, () => birb.setVisible(false)), - new DebugMenuItem("Freeze/Unfreeze", () => { + new MenuItem(`Pet ${birdBirb()}`, pet, [ + [0, 1, 1, 0, 1, 1, 0], + [1, 0, 0, 1, 0, 0, 1], + [1, 0, 0, 0, 0, 0, 1], + [0, 1, 0, 0, 0, 1, 0], + [0, 0, 1, 0, 1, 0, 0], + [0, 0, 0, 1, 0, 0, 0], + ]), + new MenuItem("Field Guide", insertFieldGuide, [ + [0, 1, 1, 0, 1, 1, 0], + [1, 0, 0, 1, 0, 0, 1], + [1, 0, 0, 1, 0, 0, 1], + [1, 0, 0, 1, 0, 0, 1], + [1, 0, 0, 1, 0, 0, 1], + [1, 1, 1, 0, 1, 1, 1], + ]), + new MenuItem("Wardrobe", insertWardrobe, [ + [0, 1, 1, 0, 1, 1, 0], + [1, 0, 0, 1, 0, 0, 1], + [1, 1, 0, 0, 0, 1, 1], + [0, 1, 0, 0, 0, 1, 0], + [0, 1, 0, 0, 0, 1, 0], + [0, 1, 1, 1, 1, 1, 0], + ]), + new ConditionalMenuItem("Sticky Note", () => createNewStickyNote(stickyNotes, save, deleteStickyNote), () => getContext().areStickyNotesEnabled(), [ + [0, 0, 1, 1, 1, 1, 0], + [0, 1, 0, 0, 0, 1, 0], + [1, 0, 0, 1, 0, 1, 0], + [1, 0, 1, 0, 0, 1, 0], + [1, 0, 0, 0, 0, 1, 0], + [1, 1, 1, 1, 1, 1, 0], + ]), + new MenuItem(`Hide ${birdBirb()}`, () => birb.setVisible(false), [ + [0, 1, 0, 1, 0, 1, 0], + [1, 0, 0, 1, 0, 0, 1], + [1, 0, 0, 1, 0, 0, 1], + [1, 0, 0, 0, 0, 0, 1], + [0, 1, 0, 0, 0, 1, 0], + [0, 0, 1, 1, 1, 0, 0], + ]), + new DebugMenuItem("Freeze", () => { frozen = !frozen; }), new DebugMenuItem("Reset Data", resetSaveData), @@ -2665,11 +2743,18 @@ module.exports = class PocketBird extends Plugin { setDebug(false); }), new Separator(), - new MenuItem("Settings", () => switchMenuItems(settingsItems, updateMenuLocation), false), + new MenuItem("Settings", () => switchMenuItems(settingsItems, updateMenuLocation), [ + [0, 0, 0, 0, 1, 1, 1], + [1, 1, 1, 1, 1, 0, 1], + [0, 0, 0, 0, 1, 1, 1], + [1, 1, 1, 0, 0, 0, 0], + [1, 0, 1, 1, 1, 1, 1], + [1, 1, 1, 0, 0, 0, 0], + ], false), ]; const settingsItems = [ - new MenuItem("Go Back", () => switchMenuItems(menuItems, updateMenuLocation), false), + new MenuItem("Go Back", () => switchMenuItems(menuItems, updateMenuLocation), undefined, false), new Separator(), new MenuItem(() => `${settings().soundEnabled ? "Disable" : "Enable"} Sound`, () => { userSettings.soundEnabled = !settings().soundEnabled; @@ -2689,7 +2774,7 @@ module.exports = class PocketBird extends Plugin { }), new Separator(), new MenuItem(() => `Source Code ${isPetBoostActive() ? " ❤" : ""}`, () => { window.open("https://github.com/IdreesInc/Pocket-Bird"); }), - new MenuItem("2026.3.30", () => { alert("Thank you for using Pocket Bird! You are on version: 2026.3.30"); }, false), + new MenuItem("Build 2026.4.3", () => { alert("Thank you for using Pocket Bird! You are on version: 2026.4.3"); }, undefined, false), ]; /** @type {Birb} */ @@ -3269,7 +3354,7 @@ module.exports = class PocketBird extends Plugin { latinName.textContent = type.latinName; latinName.href = type.url; latinName.target = "_blank"; - + const spacerTwo = document.createElement("div"); spacerTwo.style.height = "0.4em"; diff --git a/dist/obsidian/manifest.json b/dist/obsidian/manifest.json index 23df7f5..38c0638 100644 --- a/dist/obsidian/manifest.json +++ b/dist/obsidian/manifest.json @@ -1,7 +1,7 @@ { "id": "pocket-bird", "name": "Pocket Bird", - "version": "2026.3.30", + "version": "2026.4.3", "minAppVersion": "0.15.0", "description": "Add a pet bird to fly around your notes and keep you company!", "author": "Idrees Hassan", diff --git a/dist/userscript/birb.user.js b/dist/userscript/birb.user.js index e33d655..9cba60e 100644 --- a/dist/userscript/birb.user.js +++ b/dist/userscript/birb.user.js @@ -1,7 +1,7 @@ // ==UserScript== // @name Pocket Bird // @namespace https://idreesinc.com -// @version 2026.3.30 +// @version 2026.4.3 // @description It's a pet bird in your browser, what more could you want? // @author Idrees // @downloadURL https://github.com/IdreesInc/Pocket-Bird/raw/refs/heads/main/dist/userscript/birb.user.js @@ -636,8 +636,8 @@ "url": "https://en.wikipedia.org/wiki/Cuban_tody", "colors": { "beak": "#f16f54", - "face": "#5fdf44", - "chin": "#f12d3e", + "face": "#5ad63e", + "chin": "#e8273b", "collar": "#f12d3e", "belly": "#f6f5e4", "collar-scruff": "#a3ebff", @@ -658,11 +658,14 @@ "colors": { "face": "#9c3af2", "wing": "#8f37ed", - "wing-edge": "#7029b8", + "wing-edge": "#5b20c2", "belly": "#ffffff", "underbelly": "#f2f2f2", "foot": "#736a66", - "collar": "#aa60e6" + "collar": "#b760e6", + "nose": "#7a2ec7", + "cheek": "#7a2ec7", + "nose-tip": "#7a2ec7" }, "rarity": "uncommon" } @@ -1940,11 +1943,13 @@ /** * @param {string|(() => string)} text * @param {() => void} action + * @param {number[][]} [icon] * @param {boolean} [removeMenu] */ - constructor(text, action, removeMenu = true) { + constructor(text, action, icon, removeMenu = true) { this.text = text; this.action = action; + this.icon = icon; this.removeMenu = removeMenu; } } @@ -1954,10 +1959,11 @@ * @param {string} text * @param {() => void} action * @param {() => boolean} condition + * @param {number[][]} [icon] * @param {boolean} [removeMenu] */ - constructor(text, action, condition, removeMenu = true) { - super(text, action, removeMenu); + constructor(text, action, condition, icon, removeMenu = true) { + super(text, action, icon, removeMenu); this.condition = condition; } } @@ -1968,7 +1974,7 @@ * @param {() => void} action */ constructor(text, action, removeMenu = true) { - super(text, action, () => isDebug(), removeMenu); + super(text, action, () => isDebug(), undefined, removeMenu); } } @@ -1983,11 +1989,29 @@ * @param {() => void} removeMenuCallback * @returns {HTMLElement} */ - function makeMenuItem(item, removeMenuCallback) { + function createMenuItem(item, removeMenuCallback) { if (item instanceof Separator) { return makeElement("birb-window-separator"); } let menuItem = makeElement("birb-menu-item", typeof item.text === "function" ? item.text() : item.text); + if (item.icon) { + const iconCanvas = document.createElement("canvas"); + iconCanvas.width = 7; + iconCanvas.height = 6; + iconCanvas.classList.add("birb-menu-item-icon"); + const ctx = iconCanvas.getContext("2d"); + if (ctx) { + for (let row = 0; row < item.icon.length; row++) { + for (let col = 0; col < item.icon[row].length; col++) { + if (item.icon[row][col]) { + ctx.fillStyle = "black"; + ctx.fillRect(col, row, 1, 1); + } + } + } + } + menuItem.prepend(iconCanvas); + } onClick(menuItem, () => { if (item.removeMenu) { removeMenuCallback(); @@ -2015,7 +2039,7 @@ const removeCallback = () => removeMenu(); for (const item of menuItems) { if (!(item instanceof ConditionalMenuItem) || item.condition()) { - content.appendChild(makeMenuItem(item, removeCallback)); + content.appendChild(createMenuItem(item, removeCallback)); } } menu.appendChild(header); @@ -2072,7 +2096,7 @@ const removeCallback = () => removeMenu(); for (const item of menuItems) { if (!(item instanceof ConditionalMenuItem) || item.condition()) { - content.appendChild(makeMenuItem(item, removeCallback)); + content.appendChild(createMenuItem(item, removeCallback)); } } updateLocationCallback(menu); @@ -2323,15 +2347,17 @@ font-size: 14px; padding-top: 4px; padding-bottom: 4px; - padding-left: 10px; + padding-left: 2px; padding-right: 10px; box-sizing: border-box; opacity: 0.7 !important; user-select: none; display: flex; - justify-content: space-between; + justify-content: left; + align-items: center; cursor: pointer; color: black !important; + transition: background 0.1s, color 0.1s; } .birb-menu-item:hover { @@ -2343,6 +2369,21 @@ var(--birb-neg-border-size) 0 var(--birb-highlight), 0 var(--birb-neg-border-size) var(--birb-highlight), 0 var(--birb-border-size) var(--birb-highlight); + transition: none; +} + +.birb-menu-item-icon { + width: calc(7 * var(--birb-border-size)); + height: calc(6 * var(--birb-border-size)); + padding-right: calc(5 * var(--birb-border-size)); + flex-shrink: 0; + image-rendering: pixelated; + color: var(--birb-highlight); + opacity: 0.9; +} + +.birb-menu-item:hover > .birb-menu-item-icon { + filter: invert(1); } .birb-menu-item-arrow { @@ -2393,10 +2434,12 @@ justify-content: center; align-items: center; cursor: pointer; + transition: border-color 0.1s; } .birb-grid-item:hover { border-color: var(--birb-highlight); + transition: none; } .birb-grid-item canvas { @@ -2603,12 +2646,47 @@ }; const menuItems = [ - new MenuItem(`Pet ${birdBirb()}`, pet), - new MenuItem("Field Guide", insertFieldGuide), - new MenuItem("Wardrobe", insertWardrobe), - new ConditionalMenuItem("Sticky Note", () => createNewStickyNote(stickyNotes, save, deleteStickyNote), () => getContext().areStickyNotesEnabled()), - new MenuItem(`Hide ${birdBirb()}`, () => birb.setVisible(false)), - new DebugMenuItem("Freeze/Unfreeze", () => { + new MenuItem(`Pet ${birdBirb()}`, pet, [ + [0, 1, 1, 0, 1, 1, 0], + [1, 0, 0, 1, 0, 0, 1], + [1, 0, 0, 0, 0, 0, 1], + [0, 1, 0, 0, 0, 1, 0], + [0, 0, 1, 0, 1, 0, 0], + [0, 0, 0, 1, 0, 0, 0], + ]), + new MenuItem("Field Guide", insertFieldGuide, [ + [0, 1, 1, 0, 1, 1, 0], + [1, 0, 0, 1, 0, 0, 1], + [1, 0, 0, 1, 0, 0, 1], + [1, 0, 0, 1, 0, 0, 1], + [1, 0, 0, 1, 0, 0, 1], + [1, 1, 1, 0, 1, 1, 1], + ]), + new MenuItem("Wardrobe", insertWardrobe, [ + [0, 1, 1, 0, 1, 1, 0], + [1, 0, 0, 1, 0, 0, 1], + [1, 1, 0, 0, 0, 1, 1], + [0, 1, 0, 0, 0, 1, 0], + [0, 1, 0, 0, 0, 1, 0], + [0, 1, 1, 1, 1, 1, 0], + ]), + new ConditionalMenuItem("Sticky Note", () => createNewStickyNote(stickyNotes, save, deleteStickyNote), () => getContext().areStickyNotesEnabled(), [ + [0, 0, 1, 1, 1, 1, 0], + [0, 1, 0, 0, 0, 1, 0], + [1, 0, 0, 1, 0, 1, 0], + [1, 0, 1, 0, 0, 1, 0], + [1, 0, 0, 0, 0, 1, 0], + [1, 1, 1, 1, 1, 1, 0], + ]), + new MenuItem(`Hide ${birdBirb()}`, () => birb.setVisible(false), [ + [0, 1, 0, 1, 0, 1, 0], + [1, 0, 0, 1, 0, 0, 1], + [1, 0, 0, 1, 0, 0, 1], + [1, 0, 0, 0, 0, 0, 1], + [0, 1, 0, 0, 0, 1, 0], + [0, 0, 1, 1, 1, 0, 0], + ]), + new DebugMenuItem("Freeze", () => { frozen = !frozen; }), new DebugMenuItem("Reset Data", resetSaveData), @@ -2627,11 +2705,18 @@ setDebug(false); }), new Separator(), - new MenuItem("Settings", () => switchMenuItems(settingsItems, updateMenuLocation), false), + new MenuItem("Settings", () => switchMenuItems(settingsItems, updateMenuLocation), [ + [0, 0, 0, 0, 1, 1, 1], + [1, 1, 1, 1, 1, 0, 1], + [0, 0, 0, 0, 1, 1, 1], + [1, 1, 1, 0, 0, 0, 0], + [1, 0, 1, 1, 1, 1, 1], + [1, 1, 1, 0, 0, 0, 0], + ], false), ]; const settingsItems = [ - new MenuItem("Go Back", () => switchMenuItems(menuItems, updateMenuLocation), false), + new MenuItem("Go Back", () => switchMenuItems(menuItems, updateMenuLocation), undefined, false), new Separator(), new MenuItem(() => `${settings().soundEnabled ? "Disable" : "Enable"} Sound`, () => { userSettings.soundEnabled = !settings().soundEnabled; @@ -2651,7 +2736,7 @@ }), new Separator(), new MenuItem(() => `Source Code ${isPetBoostActive() ? " ❤" : ""}`, () => { window.open("https://github.com/IdreesInc/Pocket-Bird"); }), - new MenuItem("2026.3.30", () => { alert("Thank you for using Pocket Bird! You are on version: 2026.3.30"); }, false), + new MenuItem("Build 2026.4.3", () => { alert("Thank you for using Pocket Bird! You are on version: 2026.4.3"); }, undefined, false), ]; /** @type {Birb} */ @@ -3231,7 +3316,7 @@ latinName.textContent = type.latinName; latinName.href = type.url; latinName.target = "_blank"; - + const spacerTwo = document.createElement("div"); spacerTwo.style.height = "0.4em"; diff --git a/dist/web/birb.embed.js b/dist/web/birb.embed.js index 978f444..829a758 100644 --- a/dist/web/birb.embed.js +++ b/dist/web/birb.embed.js @@ -622,8 +622,8 @@ "url": "https://en.wikipedia.org/wiki/Cuban_tody", "colors": { "beak": "#f16f54", - "face": "#5fdf44", - "chin": "#f12d3e", + "face": "#5ad63e", + "chin": "#e8273b", "collar": "#f12d3e", "belly": "#f6f5e4", "collar-scruff": "#a3ebff", @@ -644,11 +644,14 @@ "colors": { "face": "#9c3af2", "wing": "#8f37ed", - "wing-edge": "#7029b8", + "wing-edge": "#5b20c2", "belly": "#ffffff", "underbelly": "#f2f2f2", "foot": "#736a66", - "collar": "#aa60e6" + "collar": "#b760e6", + "nose": "#7a2ec7", + "cheek": "#7a2ec7", + "nose-tip": "#7a2ec7" }, "rarity": "uncommon" } @@ -1920,11 +1923,13 @@ /** * @param {string|(() => string)} text * @param {() => void} action + * @param {number[][]} [icon] * @param {boolean} [removeMenu] */ - constructor(text, action, removeMenu = true) { + constructor(text, action, icon, removeMenu = true) { this.text = text; this.action = action; + this.icon = icon; this.removeMenu = removeMenu; } } @@ -1934,10 +1939,11 @@ * @param {string} text * @param {() => void} action * @param {() => boolean} condition + * @param {number[][]} [icon] * @param {boolean} [removeMenu] */ - constructor(text, action, condition, removeMenu = true) { - super(text, action, removeMenu); + constructor(text, action, condition, icon, removeMenu = true) { + super(text, action, icon, removeMenu); this.condition = condition; } } @@ -1948,7 +1954,7 @@ * @param {() => void} action */ constructor(text, action, removeMenu = true) { - super(text, action, () => isDebug(), removeMenu); + super(text, action, () => isDebug(), undefined, removeMenu); } } @@ -1963,11 +1969,29 @@ * @param {() => void} removeMenuCallback * @returns {HTMLElement} */ - function makeMenuItem(item, removeMenuCallback) { + function createMenuItem(item, removeMenuCallback) { if (item instanceof Separator) { return makeElement("birb-window-separator"); } let menuItem = makeElement("birb-menu-item", typeof item.text === "function" ? item.text() : item.text); + if (item.icon) { + const iconCanvas = document.createElement("canvas"); + iconCanvas.width = 7; + iconCanvas.height = 6; + iconCanvas.classList.add("birb-menu-item-icon"); + const ctx = iconCanvas.getContext("2d"); + if (ctx) { + for (let row = 0; row < item.icon.length; row++) { + for (let col = 0; col < item.icon[row].length; col++) { + if (item.icon[row][col]) { + ctx.fillStyle = "black"; + ctx.fillRect(col, row, 1, 1); + } + } + } + } + menuItem.prepend(iconCanvas); + } onClick(menuItem, () => { if (item.removeMenu) { removeMenuCallback(); @@ -1995,7 +2019,7 @@ const removeCallback = () => removeMenu(); for (const item of menuItems) { if (!(item instanceof ConditionalMenuItem) || item.condition()) { - content.appendChild(makeMenuItem(item, removeCallback)); + content.appendChild(createMenuItem(item, removeCallback)); } } menu.appendChild(header); @@ -2052,7 +2076,7 @@ const removeCallback = () => removeMenu(); for (const item of menuItems) { if (!(item instanceof ConditionalMenuItem) || item.condition()) { - content.appendChild(makeMenuItem(item, removeCallback)); + content.appendChild(createMenuItem(item, removeCallback)); } } updateLocationCallback(menu); @@ -2303,15 +2327,17 @@ font-size: 14px; padding-top: 4px; padding-bottom: 4px; - padding-left: 10px; + padding-left: 2px; padding-right: 10px; box-sizing: border-box; opacity: 0.7 !important; user-select: none; display: flex; - justify-content: space-between; + justify-content: left; + align-items: center; cursor: pointer; color: black !important; + transition: background 0.1s, color 0.1s; } .birb-menu-item:hover { @@ -2323,6 +2349,21 @@ var(--birb-neg-border-size) 0 var(--birb-highlight), 0 var(--birb-neg-border-size) var(--birb-highlight), 0 var(--birb-border-size) var(--birb-highlight); + transition: none; +} + +.birb-menu-item-icon { + width: calc(7 * var(--birb-border-size)); + height: calc(6 * var(--birb-border-size)); + padding-right: calc(5 * var(--birb-border-size)); + flex-shrink: 0; + image-rendering: pixelated; + color: var(--birb-highlight); + opacity: 0.9; +} + +.birb-menu-item:hover > .birb-menu-item-icon { + filter: invert(1); } .birb-menu-item-arrow { @@ -2373,10 +2414,12 @@ justify-content: center; align-items: center; cursor: pointer; + transition: border-color 0.1s; } .birb-grid-item:hover { border-color: var(--birb-highlight); + transition: none; } .birb-grid-item canvas { @@ -2583,12 +2626,47 @@ }; const menuItems = [ - new MenuItem(`Pet ${birdBirb()}`, pet), - new MenuItem("Field Guide", insertFieldGuide), - new MenuItem("Wardrobe", insertWardrobe), - new ConditionalMenuItem("Sticky Note", () => createNewStickyNote(stickyNotes, save, deleteStickyNote), () => getContext().areStickyNotesEnabled()), - new MenuItem(`Hide ${birdBirb()}`, () => birb.setVisible(false)), - new DebugMenuItem("Freeze/Unfreeze", () => { + new MenuItem(`Pet ${birdBirb()}`, pet, [ + [0, 1, 1, 0, 1, 1, 0], + [1, 0, 0, 1, 0, 0, 1], + [1, 0, 0, 0, 0, 0, 1], + [0, 1, 0, 0, 0, 1, 0], + [0, 0, 1, 0, 1, 0, 0], + [0, 0, 0, 1, 0, 0, 0], + ]), + new MenuItem("Field Guide", insertFieldGuide, [ + [0, 1, 1, 0, 1, 1, 0], + [1, 0, 0, 1, 0, 0, 1], + [1, 0, 0, 1, 0, 0, 1], + [1, 0, 0, 1, 0, 0, 1], + [1, 0, 0, 1, 0, 0, 1], + [1, 1, 1, 0, 1, 1, 1], + ]), + new MenuItem("Wardrobe", insertWardrobe, [ + [0, 1, 1, 0, 1, 1, 0], + [1, 0, 0, 1, 0, 0, 1], + [1, 1, 0, 0, 0, 1, 1], + [0, 1, 0, 0, 0, 1, 0], + [0, 1, 0, 0, 0, 1, 0], + [0, 1, 1, 1, 1, 1, 0], + ]), + new ConditionalMenuItem("Sticky Note", () => createNewStickyNote(stickyNotes, save, deleteStickyNote), () => getContext().areStickyNotesEnabled(), [ + [0, 0, 1, 1, 1, 1, 0], + [0, 1, 0, 0, 0, 1, 0], + [1, 0, 0, 1, 0, 1, 0], + [1, 0, 1, 0, 0, 1, 0], + [1, 0, 0, 0, 0, 1, 0], + [1, 1, 1, 1, 1, 1, 0], + ]), + new MenuItem(`Hide ${birdBirb()}`, () => birb.setVisible(false), [ + [0, 1, 0, 1, 0, 1, 0], + [1, 0, 0, 1, 0, 0, 1], + [1, 0, 0, 1, 0, 0, 1], + [1, 0, 0, 0, 0, 0, 1], + [0, 1, 0, 0, 0, 1, 0], + [0, 0, 1, 1, 1, 0, 0], + ]), + new DebugMenuItem("Freeze", () => { frozen = !frozen; }), new DebugMenuItem("Reset Data", resetSaveData), @@ -2607,11 +2685,18 @@ setDebug(false); }), new Separator(), - new MenuItem("Settings", () => switchMenuItems(settingsItems, updateMenuLocation), false), + new MenuItem("Settings", () => switchMenuItems(settingsItems, updateMenuLocation), [ + [0, 0, 0, 0, 1, 1, 1], + [1, 1, 1, 1, 1, 0, 1], + [0, 0, 0, 0, 1, 1, 1], + [1, 1, 1, 0, 0, 0, 0], + [1, 0, 1, 1, 1, 1, 1], + [1, 1, 1, 0, 0, 0, 0], + ], false), ]; const settingsItems = [ - new MenuItem("Go Back", () => switchMenuItems(menuItems, updateMenuLocation), false), + new MenuItem("Go Back", () => switchMenuItems(menuItems, updateMenuLocation), undefined, false), new Separator(), new MenuItem(() => `${settings().soundEnabled ? "Disable" : "Enable"} Sound`, () => { userSettings.soundEnabled = !settings().soundEnabled; @@ -2631,7 +2716,7 @@ }), new Separator(), new MenuItem(() => `Source Code ${isPetBoostActive() ? " ❤" : ""}`, () => { window.open("https://github.com/IdreesInc/Pocket-Bird"); }), - new MenuItem("2026.3.30", () => { alert("Thank you for using Pocket Bird! You are on version: 2026.3.30"); }, false), + new MenuItem("Build 2026.4.3", () => { alert("Thank you for using Pocket Bird! You are on version: 2026.4.3"); }, undefined, false), ]; /** @type {Birb} */ @@ -3211,7 +3296,7 @@ latinName.textContent = type.latinName; latinName.href = type.url; latinName.target = "_blank"; - + const spacerTwo = document.createElement("div"); spacerTwo.style.height = "0.4em"; diff --git a/dist/web/birb.js b/dist/web/birb.js index 978f444..829a758 100644 --- a/dist/web/birb.js +++ b/dist/web/birb.js @@ -622,8 +622,8 @@ "url": "https://en.wikipedia.org/wiki/Cuban_tody", "colors": { "beak": "#f16f54", - "face": "#5fdf44", - "chin": "#f12d3e", + "face": "#5ad63e", + "chin": "#e8273b", "collar": "#f12d3e", "belly": "#f6f5e4", "collar-scruff": "#a3ebff", @@ -644,11 +644,14 @@ "colors": { "face": "#9c3af2", "wing": "#8f37ed", - "wing-edge": "#7029b8", + "wing-edge": "#5b20c2", "belly": "#ffffff", "underbelly": "#f2f2f2", "foot": "#736a66", - "collar": "#aa60e6" + "collar": "#b760e6", + "nose": "#7a2ec7", + "cheek": "#7a2ec7", + "nose-tip": "#7a2ec7" }, "rarity": "uncommon" } @@ -1920,11 +1923,13 @@ /** * @param {string|(() => string)} text * @param {() => void} action + * @param {number[][]} [icon] * @param {boolean} [removeMenu] */ - constructor(text, action, removeMenu = true) { + constructor(text, action, icon, removeMenu = true) { this.text = text; this.action = action; + this.icon = icon; this.removeMenu = removeMenu; } } @@ -1934,10 +1939,11 @@ * @param {string} text * @param {() => void} action * @param {() => boolean} condition + * @param {number[][]} [icon] * @param {boolean} [removeMenu] */ - constructor(text, action, condition, removeMenu = true) { - super(text, action, removeMenu); + constructor(text, action, condition, icon, removeMenu = true) { + super(text, action, icon, removeMenu); this.condition = condition; } } @@ -1948,7 +1954,7 @@ * @param {() => void} action */ constructor(text, action, removeMenu = true) { - super(text, action, () => isDebug(), removeMenu); + super(text, action, () => isDebug(), undefined, removeMenu); } } @@ -1963,11 +1969,29 @@ * @param {() => void} removeMenuCallback * @returns {HTMLElement} */ - function makeMenuItem(item, removeMenuCallback) { + function createMenuItem(item, removeMenuCallback) { if (item instanceof Separator) { return makeElement("birb-window-separator"); } let menuItem = makeElement("birb-menu-item", typeof item.text === "function" ? item.text() : item.text); + if (item.icon) { + const iconCanvas = document.createElement("canvas"); + iconCanvas.width = 7; + iconCanvas.height = 6; + iconCanvas.classList.add("birb-menu-item-icon"); + const ctx = iconCanvas.getContext("2d"); + if (ctx) { + for (let row = 0; row < item.icon.length; row++) { + for (let col = 0; col < item.icon[row].length; col++) { + if (item.icon[row][col]) { + ctx.fillStyle = "black"; + ctx.fillRect(col, row, 1, 1); + } + } + } + } + menuItem.prepend(iconCanvas); + } onClick(menuItem, () => { if (item.removeMenu) { removeMenuCallback(); @@ -1995,7 +2019,7 @@ const removeCallback = () => removeMenu(); for (const item of menuItems) { if (!(item instanceof ConditionalMenuItem) || item.condition()) { - content.appendChild(makeMenuItem(item, removeCallback)); + content.appendChild(createMenuItem(item, removeCallback)); } } menu.appendChild(header); @@ -2052,7 +2076,7 @@ const removeCallback = () => removeMenu(); for (const item of menuItems) { if (!(item instanceof ConditionalMenuItem) || item.condition()) { - content.appendChild(makeMenuItem(item, removeCallback)); + content.appendChild(createMenuItem(item, removeCallback)); } } updateLocationCallback(menu); @@ -2303,15 +2327,17 @@ font-size: 14px; padding-top: 4px; padding-bottom: 4px; - padding-left: 10px; + padding-left: 2px; padding-right: 10px; box-sizing: border-box; opacity: 0.7 !important; user-select: none; display: flex; - justify-content: space-between; + justify-content: left; + align-items: center; cursor: pointer; color: black !important; + transition: background 0.1s, color 0.1s; } .birb-menu-item:hover { @@ -2323,6 +2349,21 @@ var(--birb-neg-border-size) 0 var(--birb-highlight), 0 var(--birb-neg-border-size) var(--birb-highlight), 0 var(--birb-border-size) var(--birb-highlight); + transition: none; +} + +.birb-menu-item-icon { + width: calc(7 * var(--birb-border-size)); + height: calc(6 * var(--birb-border-size)); + padding-right: calc(5 * var(--birb-border-size)); + flex-shrink: 0; + image-rendering: pixelated; + color: var(--birb-highlight); + opacity: 0.9; +} + +.birb-menu-item:hover > .birb-menu-item-icon { + filter: invert(1); } .birb-menu-item-arrow { @@ -2373,10 +2414,12 @@ justify-content: center; align-items: center; cursor: pointer; + transition: border-color 0.1s; } .birb-grid-item:hover { border-color: var(--birb-highlight); + transition: none; } .birb-grid-item canvas { @@ -2583,12 +2626,47 @@ }; const menuItems = [ - new MenuItem(`Pet ${birdBirb()}`, pet), - new MenuItem("Field Guide", insertFieldGuide), - new MenuItem("Wardrobe", insertWardrobe), - new ConditionalMenuItem("Sticky Note", () => createNewStickyNote(stickyNotes, save, deleteStickyNote), () => getContext().areStickyNotesEnabled()), - new MenuItem(`Hide ${birdBirb()}`, () => birb.setVisible(false)), - new DebugMenuItem("Freeze/Unfreeze", () => { + new MenuItem(`Pet ${birdBirb()}`, pet, [ + [0, 1, 1, 0, 1, 1, 0], + [1, 0, 0, 1, 0, 0, 1], + [1, 0, 0, 0, 0, 0, 1], + [0, 1, 0, 0, 0, 1, 0], + [0, 0, 1, 0, 1, 0, 0], + [0, 0, 0, 1, 0, 0, 0], + ]), + new MenuItem("Field Guide", insertFieldGuide, [ + [0, 1, 1, 0, 1, 1, 0], + [1, 0, 0, 1, 0, 0, 1], + [1, 0, 0, 1, 0, 0, 1], + [1, 0, 0, 1, 0, 0, 1], + [1, 0, 0, 1, 0, 0, 1], + [1, 1, 1, 0, 1, 1, 1], + ]), + new MenuItem("Wardrobe", insertWardrobe, [ + [0, 1, 1, 0, 1, 1, 0], + [1, 0, 0, 1, 0, 0, 1], + [1, 1, 0, 0, 0, 1, 1], + [0, 1, 0, 0, 0, 1, 0], + [0, 1, 0, 0, 0, 1, 0], + [0, 1, 1, 1, 1, 1, 0], + ]), + new ConditionalMenuItem("Sticky Note", () => createNewStickyNote(stickyNotes, save, deleteStickyNote), () => getContext().areStickyNotesEnabled(), [ + [0, 0, 1, 1, 1, 1, 0], + [0, 1, 0, 0, 0, 1, 0], + [1, 0, 0, 1, 0, 1, 0], + [1, 0, 1, 0, 0, 1, 0], + [1, 0, 0, 0, 0, 1, 0], + [1, 1, 1, 1, 1, 1, 0], + ]), + new MenuItem(`Hide ${birdBirb()}`, () => birb.setVisible(false), [ + [0, 1, 0, 1, 0, 1, 0], + [1, 0, 0, 1, 0, 0, 1], + [1, 0, 0, 1, 0, 0, 1], + [1, 0, 0, 0, 0, 0, 1], + [0, 1, 0, 0, 0, 1, 0], + [0, 0, 1, 1, 1, 0, 0], + ]), + new DebugMenuItem("Freeze", () => { frozen = !frozen; }), new DebugMenuItem("Reset Data", resetSaveData), @@ -2607,11 +2685,18 @@ setDebug(false); }), new Separator(), - new MenuItem("Settings", () => switchMenuItems(settingsItems, updateMenuLocation), false), + new MenuItem("Settings", () => switchMenuItems(settingsItems, updateMenuLocation), [ + [0, 0, 0, 0, 1, 1, 1], + [1, 1, 1, 1, 1, 0, 1], + [0, 0, 0, 0, 1, 1, 1], + [1, 1, 1, 0, 0, 0, 0], + [1, 0, 1, 1, 1, 1, 1], + [1, 1, 1, 0, 0, 0, 0], + ], false), ]; const settingsItems = [ - new MenuItem("Go Back", () => switchMenuItems(menuItems, updateMenuLocation), false), + new MenuItem("Go Back", () => switchMenuItems(menuItems, updateMenuLocation), undefined, false), new Separator(), new MenuItem(() => `${settings().soundEnabled ? "Disable" : "Enable"} Sound`, () => { userSettings.soundEnabled = !settings().soundEnabled; @@ -2631,7 +2716,7 @@ }), new Separator(), new MenuItem(() => `Source Code ${isPetBoostActive() ? " ❤" : ""}`, () => { window.open("https://github.com/IdreesInc/Pocket-Bird"); }), - new MenuItem("2026.3.30", () => { alert("Thank you for using Pocket Bird! You are on version: 2026.3.30"); }, false), + new MenuItem("Build 2026.4.3", () => { alert("Thank you for using Pocket Bird! You are on version: 2026.4.3"); }, undefined, false), ]; /** @type {Birb} */ @@ -3211,7 +3296,7 @@ latinName.textContent = type.latinName; latinName.href = type.url; latinName.target = "_blank"; - + const spacerTwo = document.createElement("div"); spacerTwo.style.height = "0.4em"; diff --git a/src/application.js b/src/application.js index ed63e93..e1123aa 100644 --- a/src/application.js +++ b/src/application.js @@ -169,12 +169,47 @@ function startApplication(birbPixels, featherPixels, hatsPixels) { }; const menuItems = [ - new MenuItem(`Pet ${birdBirb()}`, pet), - new MenuItem("Field Guide", insertFieldGuide), - new MenuItem("Wardrobe", insertWardrobe), - new ConditionalMenuItem("Sticky Note", () => createNewStickyNote(stickyNotes, save, deleteStickyNote), () => getContext().areStickyNotesEnabled()), - new MenuItem(`Hide ${birdBirb()}`, () => birb.setVisible(false)), - new DebugMenuItem("Freeze/Unfreeze", () => { + new MenuItem(`Pet ${birdBirb()}`, pet, [ + [0, 1, 1, 0, 1, 1, 0], + [1, 0, 0, 1, 0, 0, 1], + [1, 0, 0, 0, 0, 0, 1], + [0, 1, 0, 0, 0, 1, 0], + [0, 0, 1, 0, 1, 0, 0], + [0, 0, 0, 1, 0, 0, 0], + ]), + new MenuItem("Field Guide", insertFieldGuide, [ + [0, 1, 1, 0, 1, 1, 0], + [1, 0, 0, 1, 0, 0, 1], + [1, 0, 0, 1, 0, 0, 1], + [1, 0, 0, 1, 0, 0, 1], + [1, 0, 0, 1, 0, 0, 1], + [1, 1, 1, 0, 1, 1, 1], + ]), + new MenuItem("Wardrobe", insertWardrobe, [ + [0, 1, 1, 0, 1, 1, 0], + [1, 0, 0, 1, 0, 0, 1], + [1, 1, 0, 0, 0, 1, 1], + [0, 1, 0, 0, 0, 1, 0], + [0, 1, 0, 0, 0, 1, 0], + [0, 1, 1, 1, 1, 1, 0], + ]), + new ConditionalMenuItem("Sticky Note", () => createNewStickyNote(stickyNotes, save, deleteStickyNote), () => getContext().areStickyNotesEnabled(), [ + [0, 0, 1, 1, 1, 1, 0], + [0, 1, 0, 0, 0, 1, 0], + [1, 0, 0, 1, 0, 1, 0], + [1, 0, 1, 0, 0, 1, 0], + [1, 0, 0, 0, 0, 1, 0], + [1, 1, 1, 1, 1, 1, 0], + ]), + new MenuItem(`Hide ${birdBirb()}`, () => birb.setVisible(false), [ + [0, 1, 0, 1, 0, 1, 0], + [1, 0, 0, 1, 0, 0, 1], + [1, 0, 0, 1, 0, 0, 1], + [1, 0, 0, 0, 0, 0, 1], + [0, 1, 0, 0, 0, 1, 0], + [0, 0, 1, 1, 1, 0, 0], + ]), + new DebugMenuItem("Freeze", () => { frozen = !frozen; }), new DebugMenuItem("Reset Data", resetSaveData), @@ -193,11 +228,18 @@ function startApplication(birbPixels, featherPixels, hatsPixels) { setDebug(false); }), new Separator(), - new MenuItem("Settings", () => switchMenuItems(settingsItems, updateMenuLocation), false), + new MenuItem("Settings", () => switchMenuItems(settingsItems, updateMenuLocation), [ + [0, 0, 0, 0, 1, 1, 1], + [1, 1, 1, 1, 1, 0, 1], + [0, 0, 0, 0, 1, 1, 1], + [1, 1, 1, 0, 0, 0, 0], + [1, 0, 1, 1, 1, 1, 1], + [1, 1, 1, 0, 0, 0, 0], + ], false), ]; const settingsItems = [ - new MenuItem("Go Back", () => switchMenuItems(menuItems, updateMenuLocation), false), + new MenuItem("Go Back", () => switchMenuItems(menuItems, updateMenuLocation), undefined, false), new Separator(), new MenuItem(() => `${settings().soundEnabled ? "Disable" : "Enable"} Sound`, () => { userSettings.soundEnabled = !settings().soundEnabled; @@ -217,7 +259,7 @@ function startApplication(birbPixels, featherPixels, hatsPixels) { }), new Separator(), new MenuItem(() => `Source Code ${isPetBoostActive() ? " ❤" : ""}`, () => { window.open("https://github.com/IdreesInc/Pocket-Bird"); }), - new MenuItem("__VERSION__", () => { alert("Thank you for using Pocket Bird! You are on version: __VERSION__") }, false), + new MenuItem("Build __VERSION__", () => { alert("Thank you for using Pocket Bird! You are on version: __VERSION__") }, undefined, false), ]; /** @type {Birb} */ @@ -801,7 +843,7 @@ function startApplication(birbPixels, featherPixels, hatsPixels) { latinName.textContent = type.latinName; latinName.href = type.url; latinName.target = "_blank"; - + const spacerTwo = document.createElement("div"); spacerTwo.style.height = "0.4em"; diff --git a/src/menu.js b/src/menu.js index 09b7878..fc41098 100644 --- a/src/menu.js +++ b/src/menu.js @@ -14,11 +14,13 @@ export class MenuItem { /** * @param {string|(() => string)} text * @param {() => void} action + * @param {number[][]} [icon] * @param {boolean} [removeMenu] */ - constructor(text, action, removeMenu = true) { + constructor(text, action, icon, removeMenu = true) { this.text = text; this.action = action; + this.icon = icon; this.removeMenu = removeMenu; } } @@ -28,10 +30,11 @@ export class ConditionalMenuItem extends MenuItem { * @param {string} text * @param {() => void} action * @param {() => boolean} condition + * @param {number[][]} [icon] * @param {boolean} [removeMenu] */ - constructor(text, action, condition, removeMenu = true) { - super(text, action, removeMenu); + constructor(text, action, condition, icon, removeMenu = true) { + super(text, action, icon, removeMenu); this.condition = condition; } } @@ -42,7 +45,7 @@ export class DebugMenuItem extends ConditionalMenuItem { * @param {() => void} action */ constructor(text, action, removeMenu = true) { - super(text, action, () => isDebug(), removeMenu); + super(text, action, () => isDebug(), undefined, removeMenu); } } @@ -57,11 +60,29 @@ export class Separator extends MenuItem { * @param {() => void} removeMenuCallback * @returns {HTMLElement} */ -function makeMenuItem(item, removeMenuCallback) { +function createMenuItem(item, removeMenuCallback) { if (item instanceof Separator) { return makeElement("birb-window-separator"); } let menuItem = makeElement("birb-menu-item", typeof item.text === "function" ? item.text() : item.text); + if (item.icon) { + const iconCanvas = document.createElement("canvas"); + iconCanvas.width = 7; + iconCanvas.height = 6; + iconCanvas.classList.add("birb-menu-item-icon"); + const ctx = iconCanvas.getContext("2d"); + if (ctx) { + for (let row = 0; row < item.icon.length; row++) { + for (let col = 0; col < item.icon[row].length; col++) { + if (item.icon[row][col]) { + ctx.fillStyle = "black"; + ctx.fillRect(col, row, 1, 1); + } + } + } + } + menuItem.prepend(iconCanvas); + } onClick(menuItem, () => { if (item.removeMenu) { removeMenuCallback(); @@ -89,7 +110,7 @@ export function insertMenu(menuItems, title, updateLocationCallback) { const removeCallback = () => removeMenu(); for (const item of menuItems) { if (!(item instanceof ConditionalMenuItem) || item.condition()) { - content.appendChild(makeMenuItem(item, removeCallback)); + content.appendChild(createMenuItem(item, removeCallback)); } } menu.appendChild(header); @@ -146,7 +167,7 @@ export function switchMenuItems(menuItems, updateLocationCallback) { const removeCallback = () => removeMenu(); for (const item of menuItems) { if (!(item instanceof ConditionalMenuItem) || item.condition()) { - content.appendChild(makeMenuItem(item, removeCallback)); + content.appendChild(createMenuItem(item, removeCallback)); } } updateLocationCallback(menu); diff --git a/src/species.js b/src/species.js index d92a7e9..885e45c 100644 --- a/src/species.js +++ b/src/species.js @@ -394,8 +394,8 @@ export default { "url": "https://en.wikipedia.org/wiki/Cuban_tody", "colors": { "beak": "#f16f54", - "face": "#5fdf44", - "chin": "#f12d3e", + "face": "#5ad63e", + "chin": "#e8273b", "collar": "#f12d3e", "belly": "#f6f5e4", "collar-scruff": "#a3ebff", @@ -416,11 +416,14 @@ export default { "colors": { "face": "#9c3af2", "wing": "#8f37ed", - "wing-edge": "#7029b8", + "wing-edge": "#5b20c2", "belly": "#ffffff", "underbelly": "#f2f2f2", "foot": "#736a66", - "collar": "#aa60e6" + "collar": "#b760e6", + "nose": "#7a2ec7", + "cheek": "#7a2ec7", + "nose-tip": "#7a2ec7" }, "rarity": "uncommon" } diff --git a/src/stylesheet.css b/src/stylesheet.css index 37a7ab6..15dad68 100644 --- a/src/stylesheet.css +++ b/src/stylesheet.css @@ -211,15 +211,17 @@ font-size: 14px; padding-top: 4px; padding-bottom: 4px; - padding-left: 10px; + padding-left: 2px; padding-right: 10px; box-sizing: border-box; opacity: 0.7 !important; user-select: none; display: flex; - justify-content: space-between; + justify-content: left; + align-items: center; cursor: pointer; color: black !important; + transition: background 0.1s, color 0.1s; } .birb-menu-item:hover { @@ -231,6 +233,21 @@ var(--birb-neg-border-size) 0 var(--birb-highlight), 0 var(--birb-neg-border-size) var(--birb-highlight), 0 var(--birb-border-size) var(--birb-highlight); + transition: none; +} + +.birb-menu-item-icon { + width: calc(7 * var(--birb-border-size)); + height: calc(6 * var(--birb-border-size)); + padding-right: calc(5 * var(--birb-border-size)); + flex-shrink: 0; + image-rendering: pixelated; + color: var(--birb-highlight); + opacity: 0.9; +} + +.birb-menu-item:hover > .birb-menu-item-icon { + filter: invert(1); } .birb-menu-item-arrow { @@ -281,10 +298,12 @@ justify-content: center; align-items: center; cursor: pointer; + transition: border-color 0.1s; } .birb-grid-item:hover { border-color: var(--birb-highlight); + transition: none; } .birb-grid-item canvas {