--- /dev/null
+'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;