@thangk/easythemer
Version:
Easily generate shades from a colour palette for use in your app
63 lines (62 loc) • 2.31 kB
JavaScript
;
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;