'use strict'; const utils = require('./utils'); const colors = require('ansi-colors'); const styles = { default: colors.noop, noop: colors.noop, /** * Modifiers */ set inverse(custom) { this._inverse = custom; }, get inverse() { return this._inverse || utils.inverse(this.primary); }, set complement(custom) { this._complement = custom; }, get complement() { return this._complement || utils.complement(this.primary); }, /** * Main color */ primary: colors.cyan, /** * Main palette */ success: colors.green, danger: colors.magenta, strong: colors.bold, warning: colors.yellow, muted: colors.dim, disabled: colors.gray, dark: colors.dim.gray, underline: colors.underline, set info(custom) { this._info = custom; }, get info() { return this._info || this.primary; }, set em(custom) { this._em = custom; }, get em() { return this._em || this.primary.underline; }, set heading(custom) { this._heading = custom; }, get heading() { return this._heading || this.muted.underline; }, /** * Statuses */ set pending(custom) { this._pending = custom; }, get pending() { return this._pending || this.primary; }, set submitted(custom) { this._submitted = custom; }, get submitted() { return this._submitted || this.success; }, set cancelled(custom) { this._cancelled = custom; }, get cancelled() { return this._cancelled || this.danger; }, /** * Special styling */ set typing(custom) { this._typing = custom; }, get typing() { return this._typing || this.dim; }, set placeholder(custom) { this._placeholder = custom; }, get placeholder() { return this._placeholder || this.primary.dim; }, set highlight(custom) { this._highlight = custom; }, get highlight() { return this._highlight || this.inverse; } }; styles.merge = (options = {}) => { if (options.styles && typeof options.styles.enabled === 'boolean') { colors.enabled = options.styles.enabled; } if (options.styles && typeof options.styles.visible === 'boolean') { colors.visible = options.styles.visible; } let result = utils.merge({}, styles, options.styles); delete result.merge; for (let key of Object.keys(colors)) { if (!result.hasOwnProperty(key)) { Reflect.defineProperty(result, key, { get: () => colors[key] }); } } for (let key of Object.keys(colors.styles)) { if (!result.hasOwnProperty(key)) { Reflect.defineProperty(result, key, { get: () => colors[key] }); } } return result; }; module.exports = styles;