@atlaskit/editor-plugin-text-color
Version:
Text color plugin for @atlaskit/editor-core
145 lines (144 loc) • 6.99 kB
JavaScript
/* ColorAccessibilityMenuItem.tsx generated by @compiled/babel-plugin v0.39.1 */
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.ColorAccessibilityMenuItem = void 0;
require("./ColorAccessibilityMenuItem.compiled.css");
var _runtime = require("@compiled/react/runtime");
var _react = _interopRequireDefault(require("react"));
var _reactIntl = require("react-intl");
var _new = require("@atlaskit/button/new");
var _hooks = require("@atlaskit/editor-common/hooks");
var _messages = require("@atlaskit/editor-common/messages");
var _uiColor = require("@atlaskit/editor-common/ui-color");
var _editorPalette = require("@atlaskit/editor-palette");
var _accessibility = _interopRequireDefault(require("@atlaskit/icon/core/accessibility"));
var _questionCircle = _interopRequireDefault(require("@atlaskit/icon/core/question-circle"));
var _compiled = require("@atlaskit/primitives/compiled");
var _tokens = require("@atlaskit/tokens");
var _colorContrast = require("../pm-plugins/utils/color-contrast");
var _constants = require("../pm-plugins/utils/constants");
var resolveColorValue = function resolveColorValue(color, fallback) {
return (0, _uiColor.getTokenCSSVariableValue)(color) || (color.startsWith('var(') ? fallback : color);
};
var getForegroundColor = function getForegroundColor(textColor, defaultColor) {
if (!textColor || defaultColor && textColor === defaultColor) {
return (0, _tokens.getTokenValue)('color.text', defaultColor || _constants.DEFAULT_COLOR.color);
}
var colorValue = (0, _editorPalette.hexToEditorTextPaletteColor)(textColor) || textColor;
return resolveColorValue(colorValue, textColor);
};
var getBackgroundColor = function getBackgroundColor(highlightColor) {
if (!highlightColor || highlightColor === _constants.TRANSPARENT_HIGHLIGHT_COLOR) {
return (0, _tokens.getTokenValue)('elevation.surface', _constants.DEFAULT_BACKGROUND_COLOR);
}
var colorValue = (0, _editorPalette.hexToEditorTextBackgroundPaletteColor)(highlightColor) || highlightColor;
return resolveColorValue(colorValue, highlightColor);
};
var useColorAccessibilityState = function useColorAccessibilityState(api) {
return (0, _hooks.useSharedPluginStateWithSelector)(api, ['textColor', 'highlight'], function (states) {
var _states$textColorStat, _states$highlightStat, _states$textColorStat2;
return {
defaultColor: (_states$textColorStat = states.textColorState) === null || _states$textColorStat === void 0 ? void 0 : _states$textColorStat.defaultColor,
highlightColor: (_states$highlightStat = states.highlightState) === null || _states$highlightStat === void 0 ? void 0 : _states$highlightStat.activeColor,
textColor: (_states$textColorStat2 = states.textColorState) === null || _states$textColorStat2 === void 0 ? void 0 : _states$textColorStat2.color
};
});
};
var getContrastRatio = function getContrastRatio(defaultColor, highlightColor, textColor) {
try {
var contrastRatio = (0, _colorContrast.getContrastRatio)(getForegroundColor(textColor, defaultColor), getBackgroundColor(highlightColor));
return contrastRatio;
} catch (_unused) {
// if we failed to calculate the contrast ratio, return null
return null;
}
};
var getAccessibilityStatus = function getAccessibilityStatus(contrastRatio) {
if (contrastRatio >= _constants.ACCESSIBLE_CONTRAST_RATIO) {
return 'accessible';
} else if (contrastRatio >= _constants.DIFFICULT_CONTRAST_RATIO) {
return 'difficultToRead';
} else {
return 'inaccessible';
}
};
var AccessibilityStatus = function AccessibilityStatus(_ref) {
var accessibilityStatus = _ref.accessibilityStatus,
formatMessage = _ref.formatMessage;
if (accessibilityStatus === 'accessible') {
return /*#__PURE__*/_react.default.createElement(_compiled.Text, {
as: "span",
size: "small",
color: "color.text.success"
}, formatMessage(_messages.colorAccessibilityMessages.accessibleLabel));
} else if (accessibilityStatus === 'difficultToRead') {
return /*#__PURE__*/_react.default.createElement(_compiled.Text, {
as: "span",
size: "small",
color: "color.text.warning"
}, formatMessage(_messages.colorAccessibilityMessages.difficultToReadLabel));
} else {
return /*#__PURE__*/_react.default.createElement(_compiled.Text, {
as: "span",
size: "small",
color: "color.text.danger"
}, formatMessage(_messages.colorAccessibilityMessages.inaccessibleLabel));
}
};
var styles = {
container: "_19itglyw _19pku2gc _ca0q1b66 _n3td1b66 _19bvu2gc _u5f31b66 _1e0c1txw _4cvr1h6o _1bah1yb4"
};
var ColorAccessibilityMenuItem = exports.ColorAccessibilityMenuItem = function ColorAccessibilityMenuItem(_ref2) {
var api = _ref2.api;
var _useIntl = (0, _reactIntl.useIntl)(),
formatMessage = _useIntl.formatMessage;
var _useColorAccessibilit = useColorAccessibilityState(api),
defaultColor = _useColorAccessibilit.defaultColor,
highlightColor = _useColorAccessibilit.highlightColor,
textColor = _useColorAccessibilit.textColor;
var contrastRatio = getContrastRatio(defaultColor, highlightColor, textColor);
if (contrastRatio === null) {
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null);
}
var accessibilityStatus = getAccessibilityStatus(contrastRatio);
var tooltipContent = function tooltipContent(accessibilityStatus) {
if (accessibilityStatus === 'accessible') {
return formatMessage(_messages.colorAccessibilityMessages.accessibleTooltip);
} else if (accessibilityStatus === 'difficultToRead') {
return formatMessage(_messages.colorAccessibilityMessages.difficultToReadTooltip);
} else {
return formatMessage(_messages.colorAccessibilityMessages.inaccessibleTooltip);
}
};
return /*#__PURE__*/_react.default.createElement(_compiled.Box, {
xcss: styles.container
}, /*#__PURE__*/_react.default.createElement(_compiled.Inline, {
alignBlock: "center",
space: "space.050"
}, /*#__PURE__*/_react.default.createElement(_accessibility.default, {
label: "",
size: "medium"
}), /*#__PURE__*/_react.default.createElement(_compiled.Text, {
as: "span",
size: "small",
color: "color.text.subtle"
}, formatMessage(_messages.colorAccessibilityMessages.accessibility)), /*#__PURE__*/_react.default.createElement(_compiled.Text, {
as: "span",
size: "small",
color: "color.text.subtle",
"aria-hidden": "true"
}, "\u2022"), /*#__PURE__*/_react.default.createElement(AccessibilityStatus, {
accessibilityStatus: accessibilityStatus,
formatMessage: formatMessage
})), /*#__PURE__*/_react.default.createElement(_new.IconButton, {
icon: _questionCircle.default,
shape: "circle",
label: tooltipContent(accessibilityStatus),
isTooltipDisabled: false,
spacing: "compact",
appearance: "subtle"
}));
};