UNPKG

@thangk/easythemer

Version:

Easily generate shades from a colour palette for use in your app

63 lines (62 loc) 2.31 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const constants_1 = require("../constants"); const utils_1 = require("../utils"); const useValidate_1 = __importDefault(require("./useValidate")); /** * **customOptions** * - colour input from user to generate theme * - user's input is validated first, if errors, return error and stop * - if no errors, merge with default options * - apply options to generate theme * * **customShades** * - if user provides custom shades, validate first * - if no errors, merge with default shades * - apply shades to generate theme * * @param InputObject * @returns */ function useThemer({ customOptions, customShades, }) { let output = { themeOptions: null, themeShades: null, theme: null, errors: {}, }; const { result: validatedOptions, errors: optionsErrors } = (0, useValidate_1.default)("options", customOptions); if (optionsErrors) { output = { ...output, errors: optionsErrors }; } // if no custom options, use default options const mergedThemeOptions = validatedOptions ? (0, utils_1.mergeObjects)(constants_1.defaultThemeOption, validatedOptions) : constants_1.defaultThemeOption; // if no custom shades, use default shades const mergedShades = customShades ? (0, utils_1.mergeObjects)(constants_1.defaultShadeMultipliers, customShades) : constants_1.defaultShadeMultipliers; // begin theme generation const theme = {}; for (const [key, value] of Object.entries(mergedThemeOptions)) { // if generateShades is false, use the hex code as the colour if (!value.generateShades) { theme[key] = { normal: value.hex }; continue; } // if generateShades is true, generate shades if (value.generateShades) theme[key] = (0, utils_1.generateShades)(value, mergedShades); } return { ...output, themeOptions: mergedThemeOptions, themeShades: mergedShades, theme, }; } exports.default = useThemer;