diff --git a/dist/extension.zip b/dist/extension.zip index 81686b7..ba885cb 100644 Binary files a/dist/extension.zip and b/dist/extension.zip differ diff --git a/dist/extension/birb.js b/dist/extension/birb.js index 43ca98d..fbc4a8a 100644 --- a/dist/extension/birb.js +++ b/dist/extension/birb.js @@ -542,11 +542,7 @@ } }; - /** - * Palette color names - * @type {Record} - */ - const PALETTE = { + const PALETTE = Object.freeze(/** @type {const} */ ({ THEME_HIGHLIGHT: "theme-highlight", TRANSPARENT: "transparent", OUTLINE: "outline", @@ -578,11 +574,13 @@ HEART_BORDER: "heart-border", HEART_SHINE: "heart-shine", FEATHER_SPINE: "feather-spine", - }; + })); + + /** @typedef {typeof PALETTE[keyof typeof PALETTE]} PaletteColor */ /** * Mapping of sprite sheet colors to palette colors - * @type {Record} + * @type {Record} */ const SPRITE_SHEET_COLOR_MAP = { "transparent": PALETTE.TRANSPARENT, @@ -618,6 +616,28 @@ "#373737": PALETTE.FEATHER_SPINE, }; + + /** + * @type {Partial>} + */ + ({ + [PALETTE.HOOD]: PALETTE.FACE, + [PALETTE.EYEBROW]: PALETTE.FACE, + [PALETTE.UPPER_EYELID]: PALETTE.EYEBROW, + [PALETTE.UPPER_CORNER_EYE]: PALETTE.EYEBROW, + [PALETTE.BEHIND_EYE]: PALETTE.FACE, + [PALETTE.CORNER_EYE]: PALETTE.FACE, + [PALETTE.TEMPLE]: PALETTE.FACE, + [PALETTE.LOWER_EYELID]: PALETTE.FACE, + [PALETTE.NOSE]: PALETTE.FACE, + [PALETTE.NOSE_TIP]: PALETTE.NOSE, + [PALETTE.CHEEK]: PALETTE.FACE, + [PALETTE.SCRUFF]: PALETTE.FACE, + [PALETTE.COLLAR]: PALETTE.FACE, + [PALETTE.COLLAR_SCRUFF]: PALETTE.COLLAR, + [PALETTE.WING_SPOTS]: PALETTE.WING, + }); + const RARITY = Object.freeze(/** @type {const} */ ({ FAMILIAR: "familiar", UNCOMMON: "uncommon" diff --git a/dist/obsidian/main.js b/dist/obsidian/main.js index 96224ee..6c7935a 100644 --- a/dist/obsidian/main.js +++ b/dist/obsidian/main.js @@ -547,11 +547,7 @@ module.exports = class PocketBird extends Plugin { } }; - /** - * Palette color names - * @type {Record} - */ - const PALETTE = { + const PALETTE = Object.freeze(/** @type {const} */ ({ THEME_HIGHLIGHT: "theme-highlight", TRANSPARENT: "transparent", OUTLINE: "outline", @@ -583,11 +579,13 @@ module.exports = class PocketBird extends Plugin { HEART_BORDER: "heart-border", HEART_SHINE: "heart-shine", FEATHER_SPINE: "feather-spine", - }; + })); + + /** @typedef {typeof PALETTE[keyof typeof PALETTE]} PaletteColor */ /** * Mapping of sprite sheet colors to palette colors - * @type {Record} + * @type {Record} */ const SPRITE_SHEET_COLOR_MAP = { "transparent": PALETTE.TRANSPARENT, @@ -623,6 +621,28 @@ module.exports = class PocketBird extends Plugin { "#373737": PALETTE.FEATHER_SPINE, }; + + /** + * @type {Partial>} + */ + ({ + [PALETTE.HOOD]: PALETTE.FACE, + [PALETTE.EYEBROW]: PALETTE.FACE, + [PALETTE.UPPER_EYELID]: PALETTE.EYEBROW, + [PALETTE.UPPER_CORNER_EYE]: PALETTE.EYEBROW, + [PALETTE.BEHIND_EYE]: PALETTE.FACE, + [PALETTE.CORNER_EYE]: PALETTE.FACE, + [PALETTE.TEMPLE]: PALETTE.FACE, + [PALETTE.LOWER_EYELID]: PALETTE.FACE, + [PALETTE.NOSE]: PALETTE.FACE, + [PALETTE.NOSE_TIP]: PALETTE.NOSE, + [PALETTE.CHEEK]: PALETTE.FACE, + [PALETTE.SCRUFF]: PALETTE.FACE, + [PALETTE.COLLAR]: PALETTE.FACE, + [PALETTE.COLLAR_SCRUFF]: PALETTE.COLLAR, + [PALETTE.WING_SPOTS]: PALETTE.WING, + }); + const RARITY = Object.freeze(/** @type {const} */ ({ FAMILIAR: "familiar", UNCOMMON: "uncommon" diff --git a/dist/userscript/birb.user.js b/dist/userscript/birb.user.js index 38d3266..789d5a3 100644 --- a/dist/userscript/birb.user.js +++ b/dist/userscript/birb.user.js @@ -556,11 +556,7 @@ } }; - /** - * Palette color names - * @type {Record} - */ - const PALETTE = { + const PALETTE = Object.freeze(/** @type {const} */ ({ THEME_HIGHLIGHT: "theme-highlight", TRANSPARENT: "transparent", OUTLINE: "outline", @@ -592,11 +588,13 @@ HEART_BORDER: "heart-border", HEART_SHINE: "heart-shine", FEATHER_SPINE: "feather-spine", - }; + })); + + /** @typedef {typeof PALETTE[keyof typeof PALETTE]} PaletteColor */ /** * Mapping of sprite sheet colors to palette colors - * @type {Record} + * @type {Record} */ const SPRITE_SHEET_COLOR_MAP = { "transparent": PALETTE.TRANSPARENT, @@ -632,6 +630,28 @@ "#373737": PALETTE.FEATHER_SPINE, }; + + /** + * @type {Partial>} + */ + ({ + [PALETTE.HOOD]: PALETTE.FACE, + [PALETTE.EYEBROW]: PALETTE.FACE, + [PALETTE.UPPER_EYELID]: PALETTE.EYEBROW, + [PALETTE.UPPER_CORNER_EYE]: PALETTE.EYEBROW, + [PALETTE.BEHIND_EYE]: PALETTE.FACE, + [PALETTE.CORNER_EYE]: PALETTE.FACE, + [PALETTE.TEMPLE]: PALETTE.FACE, + [PALETTE.LOWER_EYELID]: PALETTE.FACE, + [PALETTE.NOSE]: PALETTE.FACE, + [PALETTE.NOSE_TIP]: PALETTE.NOSE, + [PALETTE.CHEEK]: PALETTE.FACE, + [PALETTE.SCRUFF]: PALETTE.FACE, + [PALETTE.COLLAR]: PALETTE.FACE, + [PALETTE.COLLAR_SCRUFF]: PALETTE.COLLAR, + [PALETTE.WING_SPOTS]: PALETTE.WING, + }); + const RARITY = Object.freeze(/** @type {const} */ ({ FAMILIAR: "familiar", UNCOMMON: "uncommon" diff --git a/dist/web/birb.embed.js b/dist/web/birb.embed.js index 08358cd..6af6dec 100644 --- a/dist/web/birb.embed.js +++ b/dist/web/birb.embed.js @@ -542,11 +542,7 @@ } }; - /** - * Palette color names - * @type {Record} - */ - const PALETTE = { + const PALETTE = Object.freeze(/** @type {const} */ ({ THEME_HIGHLIGHT: "theme-highlight", TRANSPARENT: "transparent", OUTLINE: "outline", @@ -578,11 +574,13 @@ HEART_BORDER: "heart-border", HEART_SHINE: "heart-shine", FEATHER_SPINE: "feather-spine", - }; + })); + + /** @typedef {typeof PALETTE[keyof typeof PALETTE]} PaletteColor */ /** * Mapping of sprite sheet colors to palette colors - * @type {Record} + * @type {Record} */ const SPRITE_SHEET_COLOR_MAP = { "transparent": PALETTE.TRANSPARENT, @@ -618,6 +616,28 @@ "#373737": PALETTE.FEATHER_SPINE, }; + + /** + * @type {Partial>} + */ + ({ + [PALETTE.HOOD]: PALETTE.FACE, + [PALETTE.EYEBROW]: PALETTE.FACE, + [PALETTE.UPPER_EYELID]: PALETTE.EYEBROW, + [PALETTE.UPPER_CORNER_EYE]: PALETTE.EYEBROW, + [PALETTE.BEHIND_EYE]: PALETTE.FACE, + [PALETTE.CORNER_EYE]: PALETTE.FACE, + [PALETTE.TEMPLE]: PALETTE.FACE, + [PALETTE.LOWER_EYELID]: PALETTE.FACE, + [PALETTE.NOSE]: PALETTE.FACE, + [PALETTE.NOSE_TIP]: PALETTE.NOSE, + [PALETTE.CHEEK]: PALETTE.FACE, + [PALETTE.SCRUFF]: PALETTE.FACE, + [PALETTE.COLLAR]: PALETTE.FACE, + [PALETTE.COLLAR_SCRUFF]: PALETTE.COLLAR, + [PALETTE.WING_SPOTS]: PALETTE.WING, + }); + const RARITY = Object.freeze(/** @type {const} */ ({ FAMILIAR: "familiar", UNCOMMON: "uncommon" diff --git a/dist/web/birb.js b/dist/web/birb.js index 08358cd..6af6dec 100644 --- a/dist/web/birb.js +++ b/dist/web/birb.js @@ -542,11 +542,7 @@ } }; - /** - * Palette color names - * @type {Record} - */ - const PALETTE = { + const PALETTE = Object.freeze(/** @type {const} */ ({ THEME_HIGHLIGHT: "theme-highlight", TRANSPARENT: "transparent", OUTLINE: "outline", @@ -578,11 +574,13 @@ HEART_BORDER: "heart-border", HEART_SHINE: "heart-shine", FEATHER_SPINE: "feather-spine", - }; + })); + + /** @typedef {typeof PALETTE[keyof typeof PALETTE]} PaletteColor */ /** * Mapping of sprite sheet colors to palette colors - * @type {Record} + * @type {Record} */ const SPRITE_SHEET_COLOR_MAP = { "transparent": PALETTE.TRANSPARENT, @@ -618,6 +616,28 @@ "#373737": PALETTE.FEATHER_SPINE, }; + + /** + * @type {Partial>} + */ + ({ + [PALETTE.HOOD]: PALETTE.FACE, + [PALETTE.EYEBROW]: PALETTE.FACE, + [PALETTE.UPPER_EYELID]: PALETTE.EYEBROW, + [PALETTE.UPPER_CORNER_EYE]: PALETTE.EYEBROW, + [PALETTE.BEHIND_EYE]: PALETTE.FACE, + [PALETTE.CORNER_EYE]: PALETTE.FACE, + [PALETTE.TEMPLE]: PALETTE.FACE, + [PALETTE.LOWER_EYELID]: PALETTE.FACE, + [PALETTE.NOSE]: PALETTE.FACE, + [PALETTE.NOSE_TIP]: PALETTE.NOSE, + [PALETTE.CHEEK]: PALETTE.FACE, + [PALETTE.SCRUFF]: PALETTE.FACE, + [PALETTE.COLLAR]: PALETTE.FACE, + [PALETTE.COLLAR_SCRUFF]: PALETTE.COLLAR, + [PALETTE.WING_SPOTS]: PALETTE.WING, + }); + const RARITY = Object.freeze(/** @type {const} */ ({ FAMILIAR: "familiar", UNCOMMON: "uncommon" diff --git a/editor/editor.js b/editor/editor.js index 0ef9204..54b00f7 100644 --- a/editor/editor.js +++ b/editor/editor.js @@ -152,8 +152,9 @@ function getColor(part) { if (currentSpecies.colors[part]) { return currentSpecies.colors[part]; } - if (DEFAULT_COLOR_OVERRIDES[part]) { - return getColor(DEFAULT_COLOR_OVERRIDES[part]); + const override = DEFAULT_COLOR_OVERRIDES[/** @type {keyof typeof DEFAULT_COLOR_OVERRIDES} */ (part)]; + if (override) { + return getColor(override); } for (const [color, partName] of Object.entries(COLOR_MAP)) { if (partName === part) { diff --git a/src/animation/sprites.js b/src/animation/sprites.js index 2e03648..dcaaa55 100644 --- a/src/animation/sprites.js +++ b/src/animation/sprites.js @@ -1,10 +1,6 @@ import species from "../species.js" -/** - * Palette color names - * @type {Record} - */ -export const PALETTE = { +export const PALETTE = Object.freeze(/** @type {const} */ ({ THEME_HIGHLIGHT: "theme-highlight", TRANSPARENT: "transparent", OUTLINE: "outline", @@ -36,11 +32,13 @@ export const PALETTE = { HEART_BORDER: "heart-border", HEART_SHINE: "heart-shine", FEATHER_SPINE: "feather-spine", -}; +})); + +/** @typedef {typeof PALETTE[keyof typeof PALETTE]} PaletteColor */ /** * Mapping of sprite sheet colors to palette colors - * @type {Record} + * @type {Record} */ export const SPRITE_SHEET_COLOR_MAP = { "transparent": PALETTE.TRANSPARENT, @@ -78,7 +76,7 @@ export const SPRITE_SHEET_COLOR_MAP = { /** - * @type {Record} + * @type {Partial>} */ export const DEFAULT_COLOR_OVERRIDES = { [PALETTE.HOOD]: PALETTE.FACE,