UNPKG

are-visual

Version:

A Component Library for React.

1,331 lines (1,138 loc) 63.5 kB
import 'focus-visible/dist/focus-visible.min.js'; import React, { useState, createContext, useEffect, useCallback, useContext, forwardRef, useReducer, useImperativeHandle, useRef } from 'react'; import classnames from 'classnames'; import ReactDOM, { createPortal } from 'react-dom'; import Animate from 'rc-animate'; import omit$1 from 'lodash.omit'; import { TransitionGroup, CSSTransition } from 'react-transition-group'; function styleInject(css, ref) { if ( ref === void 0 ) ref = {}; var insertAt = ref.insertAt; if (!css || typeof document === 'undefined') { return; } var head = document.head || document.getElementsByTagName('head')[0]; var style = document.createElement('style'); style.type = 'text/css'; if (insertAt === 'top') { if (head.firstChild) { head.insertBefore(style, head.firstChild); } else { head.appendChild(style); } } else { head.appendChild(style); } if (style.styleSheet) { style.styleSheet.cssText = css; } else { style.appendChild(document.createTextNode(css)); } } var css = ".are-fade-enter {\n opacity: 0;\n}\n.are-fade-enter-active {\n -webkit-animation: fadeIn 0.2s linear forwards;\n animation: fadeIn 0.2s linear forwards;\n}\n.are-fade-leave {\n opacity: 1;\n}\n.are-fade-leave-active {\n animation: fadeIn 0.2s linear reverse forwards;\n}\n\n.are-zoom-enter {\n opacity: 0;\n transform: none;\n}\n.are-zoom-enter-active {\n -webkit-animation: zoomIn 0.2s cubic-bezier(0.22, 0.61, 0.36, 1) forwards;\n animation: zoomIn 0.2s cubic-bezier(0.22, 0.61, 0.36, 1) forwards;\n}\n.are-zoom-leave-active, .are-zoom-exit-active {\n animation: zoomIn 0.2s cubic-bezier(0.22, 0.61, 0.36, 1) reverse forwards;\n}\n\n@-webkit-keyframes fadeIn {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}\n\n@keyframes fadeIn {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}\n@-webkit-keyframes zoomIn {\n 0% {\n opacity: 0;\n transform: scale(0.9);\n }\n 100% {\n opacity: 1;\n transform: scale(1);\n }\n}\n@keyframes zoomIn {\n 0% {\n opacity: 0;\n transform: scale(0.9);\n }\n 100% {\n opacity: 1;\n transform: scale(1);\n }\n}\n[data-focus-visible-added].focus-visible {\n outline: solid 2px rgba(7, 100, 255, 0.4);\n}\n\n[class^=are-] {\n font-family: -apple-system, BlinkMacSystemFont, \"Helvetica Neue\", \"Helvetica\", \"Arial\", \"PingFang SC\", \"Hiragino Sans GB\", \"Heiti SC\", \"Microsoft YaHei\", \"WenQuanYi Micro Hei\", sans-serif;\n}\n\n.are-font {\n font-size: 14px;\n color: #292929;\n}\n\n.are-svg {\n display: inline-block;\n width: 1em;\n height: 1em;\n overflow: hidden;\n vertical-align: -0.15em;\n fill: currentColor;\n}\n\n.are-color {\n color: #292929;\n}\n.are-color--primary {\n color: #0764ff;\n}\n.are-color--danger {\n color: #f42525;\n}\n.are-color--warn {\n color: #ffab00;\n}\n.are-color--success {\n color: #2aae67;\n}\n\n[data-js-focus-visible] :focus:not([data-focus-visible-added]) {\n outline: none;\n}\n\n.are-fixed-container {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}"; styleInject(css); function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } function _objectSpread2(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; } function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter); } function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } var _ref = /*#__PURE__*/React.createElement("path", { d: "M20.75 13.25h-2.5a1.25 1.25 0 010-2.5h2.5a1.25 1.25 0 010 2.5zm-3.447-4.785a1.25 1.25 0 11-1.768-1.768l1.768-1.769a1.253 1.253 0 011.769 0c.486.49.486 1.28 0 1.769l-1.769 1.768zM12 22a1.25 1.25 0 01-1.25-1.25v-2.5a1.25 1.25 0 012.5 0v2.5c0 .692-.56 1.25-1.25 1.25zm0-15a1.25 1.25 0 01-1.25-1.25v-2.5a1.25 1.25 0 112.5 0v2.5C13.25 6.442 12.69 7 12 7zM6.697 19.072a1.253 1.253 0 01-1.769 0 1.253 1.253 0 010-1.769l1.769-1.766a1.25 1.25 0 011.768 1.766l-1.768 1.769zm0-10.607L4.928 6.697a1.253 1.253 0 010-1.769 1.253 1.253 0 011.769 0l1.768 1.769a1.25 1.25 0 11-1.768 1.768zM7 12c0 .69-.56 1.25-1.25 1.25h-2.5a1.25 1.25 0 010-2.5h2.5c.69 0 1.25.56 1.25 1.25zm10.303 3.537l1.769 1.766c.486.49.486 1.28 0 1.769a1.253 1.253 0 01-1.769 0l-1.768-1.769a1.25 1.25 0 011.768-1.767z", fillRule: "nonzero" }); var SvgLoading = function SvgLoading(props) { return /*#__PURE__*/React.createElement("svg", _extends({ viewBox: "0 0 24 24", width: "1em", height: "1em", fillRule: "evenodd", clipRule: "evenodd", strokeLinejoin: "round", strokeMiterlimit: 2 }, props), _ref); }; var css$1 = ".are-loading {\n display: inline-block;\n width: 1em;\n height: 1em;\n overflow: hidden;\n vertical-align: -0.15em;\n -webkit-animation: loading 2.4s infinite linear;\n animation: loading 2.4s infinite linear;\n fill: currentColor;\n}\n\n@-webkit-keyframes loading {\n 100% {\n transform: rotate(1turn);\n }\n}\n\n@keyframes loading {\n 100% {\n transform: rotate(1turn);\n }\n}"; styleInject(css$1); var Loading = function Loading(_ref) { var style = _ref.style, className = _ref.className; return React.createElement(SvgLoading, { className: classnames('are-loading', className), style: style }); }; var css$2 = "@charset \"UTF-8\";\n.are-button {\n position: relative;\n display: inline-block;\n margin: 0;\n font-weight: normal;\n line-height: 1;\n color: #292929;\n vertical-align: middle;\n cursor: pointer;\n background-color: #f3f3f3;\n border: none;\n border-radius: 4px;\n box-shadow: none;\n box-sizing: border-box;\n transition: transform 0.14s;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n /* ===== 尺寸 ===== */\n /* ===== 类型 ===== */\n /* ===== 形状 ===== */\n /* ===== 独立属性 ===== */\n}\n.are-button:hover {\n opacity: 0.8;\n}\n.are-button:active {\n outline: none;\n}\n.are-button:disabled {\n cursor: no-drop;\n opacity: 0.6;\n}\n.are-button + .are-button {\n margin-left: 10px;\n}\n.are-button__loading {\n margin-right: 10px;\n}\n.are-button--readonly {\n cursor: default;\n opacity: 0.6;\n}\n.are-button--readonly:hover {\n opacity: 0.6;\n}\n.are-button--press {\n transform: scale(0.96);\n transition: transform 0.14s;\n}\n.are-button--large {\n padding: 6px 14px;\n height: 40px;\n min-width: 104px;\n}\n.are-button--middle {\n padding: 6px 14px;\n height: 36px;\n min-width: 94px;\n}\n.are-button--small {\n padding: 2px 6px;\n height: 26px;\n min-width: 60px;\n}\n.are-button--text {\n height: unset;\n min-width: unset;\n color: #0764ff;\n background: transparent;\n border: 0;\n border-color: transparent;\n transition: background 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);\n -webkit-user-select: unset;\n -moz-user-select: unset;\n -ms-user-select: unset;\n user-select: unset;\n}\n.are-button--text:focus, .are-button--text:hover {\n transition: background 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);\n}\n.are-button--text:focus {\n background-color: rgba(0, 0, 0, 0.03);\n -webkit-filter: none;\n filter: none;\n}\n.are-button--plain {\n color: #0764ff;\n background-color: #fff;\n border: 1px solid;\n}\n.are-button--primary {\n color: #fff;\n background-color: #0764ff;\n border: 0;\n}\n.are-button--round {\n border-radius: 999px;\n}\n.are-button--circle {\n padding-right: 0;\n padding-left: 0;\n border-radius: 50%;\n}\n.are-button--circle.are-button--large {\n width: 40px;\n height: 40px;\n max-width: 40px;\n max-height: 40px;\n min-width: 40px;\n min-height: 40px;\n}\n.are-button--circle.are-button--middle {\n width: 36px;\n height: 36px;\n max-width: 36px;\n max-height: 36px;\n min-width: 36px;\n min-height: 36px;\n}\n.are-button--circle.are-button--small {\n width: 26px;\n height: 26px;\n max-width: 26px;\n max-height: 26px;\n min-width: 26px;\n min-height: 26px;\n}\n.are-button--circle .are-button__loading {\n margin: 0;\n}\n.are-button--ghost {\n color: #fff;\n background: transparent;\n border: 1px solid;\n}\n.are-button--ghost.are-button--primary {\n color: #0764ff;\n border-color: #0764ff;\n}\n.are-button--block {\n width: 100%;\n}\n.are-button--block.are-button--press {\n transform: scale(0.99, 0.98);\n}\n.are-button--danger {\n color: #f42525;\n background-color: rgba(244, 37, 37, 0.06);\n border-color: #f42525;\n}\n.are-button--danger.are-button--primary {\n color: #fff;\n background-color: #f42525;\n border-color: #f42525;\n}\n.are-button--danger.are-button--text {\n color: #f42525;\n background-color: transparent;\n}\n.are-button--danger.are-button--text:focus {\n background-color: rgba(244, 37, 37, 0.06);\n}\n.are-button--danger.are-button--ghost {\n color: #f42525;\n background: transparent;\n}\n.are-button:focus:not(.focus-visible) {\n outline: none;\n}"; styleInject(css$2); var Button = function Button(props) { var className = props.className, type = props.type, block = props.block, shape = props.shape, disabled = props.disabled, danger = props.danger, nativeType = props.nativeType, size = props.size, children = props.children, style = props.style, loading = props.loading, ghost = props.ghost, emitClick = props.onClick, emitMouseDown = props.onMouseDown, emitMouseUp = props.onMouseUp, emitMouseLeave = props.onMouseLeave, otherProps = _objectWithoutProperties(props, ["className", "type", "block", "shape", "disabled", "danger", "nativeType", "size", "children", "style", "loading", "ghost", "onClick", "onMouseDown", "onMouseUp", "onMouseLeave"]); var onClick = function onClick(e) { if (!disabled && !loading && emitClick) { emitClick(e); } }; /** 按钮是否已被按下 */ var _useState = useState(false), _useState2 = _slicedToArray(_useState, 2), isPress = _useState2[0], setIsPress = _useState2[1]; var onMouseEvent = function onMouseEvent(e, pressState, emitEvent) { if (!loading) { setIsPress(pressState); } if (!loading && emitEvent) { emitEvent(e); } }; return React.createElement("button", Object.assign({ className: classnames('are-button', { 'are-button--large': size === 'large', 'are-button--middle': size === 'middle', 'are-button--small': size === 'small', 'are-button--primary': type === 'primary', 'are-button--plain': !ghost && type === 'plain', 'are-button--text': !ghost && type === 'text', 'are-button--round': shape === 'round', 'are-button--circle': shape === 'circle', 'are-button--block': block, 'are-button--danger': danger, 'are-button--readonly': loading, 'are-button--press': isPress, 'are-button--ghost': type !== 'text' && ghost }, className), style: style, type: nativeType, disabled: disabled, onClick: onClick, onMouseDown: function onMouseDown(e) { return onMouseEvent(e, true, emitMouseDown); }, onMouseUp: function onMouseUp(e) { return onMouseEvent(e, false, emitMouseUp); }, onMouseLeave: function onMouseLeave(e) { return onMouseEvent(e, false, emitMouseLeave); } }, otherProps), loading ? React.createElement(Loading, { className: "are-button__loading" }) : null, shape === 'circle' && loading ? null : children); }; Button.defaultProps = { size: 'middle', nativeType: 'button' }; function _extends$1() { _extends$1 = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$1.apply(this, arguments); } var _ref$1 = /*#__PURE__*/React.createElement("path", { d: "M6.622.34a.75.75 0 011.31.723l-.054.098-4.25 6.5a.75.75 0 01-1.105.168l-.08-.077-2.25-2.5a.75.75 0 011.034-1.08l.08.076 1.598 1.776L6.622.34z" }); var SvgCheck = function SvgCheck(props) { return /*#__PURE__*/React.createElement("svg", _extends$1({ viewBox: "0 0 8 8", width: "1em", height: "1em" }, props), _ref$1); }; function _extends$2() { _extends$2 = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$2.apply(this, arguments); } var _ref$2 = /*#__PURE__*/React.createElement("path", { d: "M7 0a1 1 0 01.117 1.993L7 2H1A1 1 0 01.883.007L1 0h6z" }); var SvgMixin = function SvgMixin(props) { return /*#__PURE__*/React.createElement("svg", _extends$2({ width: "1em", height: "1em", viewBox: "0 0 8 2" }, props), _ref$2); }; /** * @description 获取数据类型 * @param {any} param * @returns {string} * Eg: string || boolean || number || array */ /** * @description 查找对象是否包含指定属性 * @param target 目标对象 * @param attr 属性名称 */ function hasOwn(target, attr) { return Object.prototype.hasOwnProperty.call(target, attr); } /** * @description 删除[对象|数组]中指定的项(纯函数) * @param {Record<string, unknown>|any[]} obj 目标对象或数组 * @param {any[]} keyList 要删除的 key/项 的集合 * @returns {object|any[]} 返回一个新的对象 */ function omit(target, keyList) { if (Array.isArray(target)) { var _result = []; target.forEach(function (item) { if (!keyList.includes(item)) { _result.push(item); } }); return _result; } var result = {}; Object.keys(target).forEach(function (key) { if (!keyList.includes(key)) { result[key] = target[key]; } }); return result; } var CheckboxCtx = createContext({ GROUPVALUE: [], disabledGroup: false, updateGroup: function updateGroup() {// }, removeCheckbox: function removeCheckbox() {// } }); function handlerResult(target, type, payload) { var payloadList = Array.isArray(payload) ? payload : [payload]; switch (type) { case 'add': { return [].concat(_toConsumableArray(target), _toConsumableArray(payloadList)); } case 'remove': { return omit(target, payloadList); } default: throw new Error(); } } function CheckboxGroup(props) { var _props$value = props.value, value = _props$value === void 0 ? [] : _props$value, disabled = props.disabled, className = props.className, style = props.style, children = props.children, onChange = props.onChange; var _useState = useState(value), _useState2 = _slicedToArray(_useState, 2), values = _useState2[0], setValues = _useState2[1]; /** * 监听 value 值的变更,及时更新 Checkbox 勾选状态。 * 例如父组件直接修改 value 值的情况 */ useEffect(function () { setValues(function () { return value; }); }, [value]); /** * 触发 `onChange` 事件。 * `CheckboxGroup` 本身不调用,在 `Checkbox` 调用 `onChange` 时调用 * * Triggers the `onChange` event. * `CheckboxGroup` itself is not called, but is called when `Checkbox` calls `onChange`. */ var updateGroupValue = function updateGroupValue(name) { var result = values; var handlerType = values.includes(name) ? 'remove' : 'add'; result = handlerResult(values, handlerType, name); setValues(function () { return result; }); if (onChange) { onChange(result); } }; /** * [zh-CN]: DOM 被移除时更新 `value`且触发 `onChange` 函数。 * [en]: Update `value` and trigger the `onChange` function when the DOM is removed. */ var remove = function remove(name) { setValues(function (_value) { var result = handlerResult(_value, 'remove', name); if (onChange) { onChange(result); } return result; }); }; /** * 此处的依赖数组为空,它本应该有一个 `onChange` 作为依赖,把函数独立出去 * 之后,此处的依赖便省去了。我不确定这样做是否正确。但是它能够正常工作。 * * Perhaps the `onChange` in this function is a dependency on the * I'm not sure it's the right thing to do. */ var removeCheckbox = useCallback(remove, []); var Provider = CheckboxCtx.Provider; return React.createElement(Provider, { value: { GROUPVALUE: values, disabledGroup: disabled || false, updateGroup: updateGroupValue, removeCheckbox: removeCheckbox } }, React.createElement("div", { role: "group", "aria-label": "checkbox-group", className: className, style: style }, children)); } var css$3 = ".are-checkbox {\n position: relative;\n display: inline-block;\n font-size: 14px;\n line-height: 1.5715;\n color: #292929;\n cursor: pointer;\n outline: 0;\n}\n.are-checkbox + .are-checkbox {\n margin-left: 10px;\n}\n.are-checkbox__icon {\n position: relative;\n display: inline-block;\n width: 16px;\n height: 16px;\n overflow: hidden;\n color: #fff;\n vertical-align: middle;\n background-color: #fff;\n border: 1px solid #d6d6d6;\n border-radius: 4px;\n outline: 0;\n box-sizing: border-box;\n transition: border-color 0.2s ease-in, background-color 0.2s ease-in;\n}\n.are-checkbox__icon::before {\n content: \"\";\n display: block;\n width: 100%;\n height: 100%;\n background-color: #fff;\n border-radius: inherit;\n transform: scale(1);\n transition: transform 0.2s ease-in;\n}\n.are-checkbox__svg {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n margin: auto;\n transform: scale(0);\n fill: currentColor;\n}\n.are-checkbox__label {\n display: inline-block;\n padding: 0 8px;\n vertical-align: middle;\n cursor: inherit;\n}\n.are-checkbox--checked .are-checkbox__icon {\n background-color: #0764ff;\n border-color: #0764ff;\n}\n.are-checkbox--checked .are-checkbox__icon::before {\n transform: scale(0);\n}\n.are-checkbox--checked .are-checkbox__svg {\n -webkit-animation: zoomInIcon 0.2s ease-in forwards;\n animation: zoomInIcon 0.2s ease-in forwards;\n -webkit-animation-delay: 0.2s;\n animation-delay: 0.2s;\n}\n.are-checkbox--mixin .are-checkbox__icon {\n background-color: #0764ff;\n border-color: #0764ff;\n}\n.are-checkbox--mixin .are-checkbox__icon::before {\n transform: scale(0);\n}\n.are-checkbox--mixin .are-checkbox__svg {\n -webkit-animation: zoomInIcon 0.2s ease-in forwards;\n animation: zoomInIcon 0.2s ease-in forwards;\n -webkit-animation-delay: 0.2s;\n animation-delay: 0.2s;\n}\n.are-checkbox--disabled {\n cursor: not-allowed;\n opacity: 0.6;\n}\n.are-checkbox--disabled .are-checkbox__icon {\n color: rgba(0, 0, 0, 0.4);\n background-color: #ddd;\n border-color: #ccc;\n}\n.are-checkbox--disabled .are-checkbox__icon::before {\n background-color: #ddd;\n}\n.are-checkbox.focus-visible[data-focus-visible-added] {\n outline: none;\n}\n.are-checkbox.focus-visible[data-focus-visible-added] .are-checkbox__icon {\n border-color: #3a84ff;\n box-shadow: 0 0 0 2px rgba(7, 100, 255, 0.4);\n}\n\n@-webkit-keyframes zoomInIcon {\n 0% {\n transform: scale(0);\n }\n 90% {\n transform: scale(1.1);\n }\n 100% {\n transform: scale(1);\n }\n}\n\n@keyframes zoomInIcon {\n 0% {\n transform: scale(0);\n }\n 90% {\n transform: scale(1.1);\n }\n 100% {\n transform: scale(1);\n }\n}"; styleInject(css$3); function Checkbox(props) { var checked = props.checked, children = props.children, disabled = props.disabled, name = props.name, values = props.values, mixin = props.mixin, onChange = props.onChange; // 选中值,未选中值 var _values = _slicedToArray(values, 2), CHECK = _values[0], UNCHECK = _values[1]; /** * GROUPVALUE => Group 存储选中的值 * updateGroup => Checkbox 调用 onChange 时一顺便更新 group */ var _useContext = useContext(CheckboxCtx), GROUPVALUE = _useContext.GROUPVALUE, disabledGroup = _useContext.disabledGroup, updateGroup = _useContext.updateGroup, removeCheckbox = _useContext.removeCheckbox; useEffect(function () { return function () { removeCheckbox(name); }; }, [name, removeCheckbox]); /** * 勾选状态 */ var _useState = useState(false), _useState2 = _slicedToArray(_useState, 2), active = _useState2[0], setActive = _useState2[1]; useEffect(function () { // checked 等于 `CHECK` 或者 group 中含有改值,勾选状态 var state = checked === CHECK || GROUPVALUE.includes(name); setActive(state); }, [name, checked, CHECK, GROUPVALUE]); var onClick = function onClick() { if (disabled || disabledGroup) { return; } if (onChange) { onChange(checked === CHECK ? UNCHECK : CHECK); } // Checkbox 在 Group 内部,name 作为唯一标识符 updateGroup(name); }; // 键盘事件 var handleKeyPress = function handleKeyPress(event) { event.preventDefault(); if (event.charCode === 32) { onClick(); } }; return React.createElement("div", { className: classnames('are-checkbox', { 'are-checkbox--checked': active, 'are-checkbox--disabled': disabled || disabledGroup, 'are-checkbox--mixin': mixin }), role: "checkbox", "aria-checked": active, "aria-disabled": disabled || disabledGroup, tabIndex: disabled || disabledGroup ? -1 : 0, onClick: onClick, onKeyPress: handleKeyPress }, React.createElement("span", { className: "are-checkbox__icon" }, active && !mixin ? React.createElement(SvgCheck, { className: "are-checkbox__svg", height: "58%" }) : null, mixin ? React.createElement(SvgMixin, { className: "are-checkbox__svg", width: "58%" }) : null), children ? React.createElement("span", { className: "are-checkbox__label" }, children) : null); } Checkbox.Group = CheckboxGroup; Checkbox.defaultProps = { values: [true, false] }; var RadioCtx = createContext({ GROUPVALUE: undefined, disabledGroup: false, updateGroup: function updateGroup() {// } }); function RadioGroup(props) { var className = props.className, _props$disabled = props.disabled, disabled = _props$disabled === void 0 ? false : _props$disabled, _props$value = props.value, value = _props$value === void 0 ? undefined : _props$value, style = props.style, children = props.children, onChange = props.onChange; var _useState = useState(value), _useState2 = _slicedToArray(_useState, 2), state = _useState2[0], setState = _useState2[1]; useEffect(function () { setState(function () { return value; }); }, [value]); // 此处不直接修改 state,而是使其成为受控组件 var onUpdate = function onUpdate(itemValue) { if (onChange) { onChange(itemValue); } }; var dispatch = useCallback(onUpdate, []); return React.createElement(RadioCtx.Provider, { value: { GROUPVALUE: state, disabledGroup: disabled, updateGroup: dispatch } }, React.createElement("div", { className: classnames('are-radio-group', className), style: style, role: "group" }, children)); } var css$4 = ".are-radio {\n position: relative;\n display: inline-block;\n font-size: 14px;\n line-height: 1.5715;\n color: #292929;\n cursor: pointer;\n outline: 0;\n}\n.are-radio + .are-radio {\n margin-left: 10px;\n}\n.are-radio__icon {\n position: relative;\n display: inline-block;\n width: 16px;\n height: 16px;\n overflow: hidden;\n vertical-align: middle;\n border: 1px solid #d6d6d6;\n border-radius: 50%;\n transition: background-color 0.2s ease-in, border-color 0.2s ease-in;\n}\n.are-radio__icon::before {\n content: \"\";\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n display: block;\n margin: auto;\n width: 8px;\n height: 8px;\n background-color: #fff;\n border-radius: inherit;\n transform: scale(2);\n transition: transform 0.2s ease-in;\n transform-origin: center;\n}\n.are-radio__label {\n display: inline-block;\n padding: 0 8px;\n vertical-align: middle;\n cursor: inherit;\n}\n.are-radio--checked .are-radio__icon {\n background-color: #0764ff;\n border-color: #0764ff;\n}\n.are-radio--checked .are-radio__icon::before {\n transform: scale(1);\n}\n.are-radio--disabled {\n cursor: not-allowed;\n opacity: 0.6;\n}\n.are-radio--disabled .are-radio__icon {\n background-color: #ddd;\n border-color: #ccc;\n}\n.are-radio--disabled .are-radio__icon::before {\n background-color: #ddd;\n}\n.are-radio:hover .are-radio__icon {\n border-color: #0764ff;\n}\n.are-radio.are-radio--disabled .are-radio__icon {\n border-color: #ccc;\n}\n.are-radio.are-radio--checked.are-radio--disabled .are-radio__icon::before {\n background-color: rgba(0, 0, 0, 0.4);\n}\n.are-radio.focus-visible[data-focus-visible-added] {\n outline: none;\n}\n.are-radio.focus-visible[data-focus-visible-added] .are-radio__icon {\n border-color: #3a84ff;\n box-shadow: 0 0 0 2px rgba(7, 100, 255, 0.4);\n}"; styleInject(css$4); function Radio(props) { var checked = props.checked, value = props.value, disabled = props.disabled, children = props.children, onChange = props.onChange; var _useState = useState(false), _useState2 = _slicedToArray(_useState, 2), active = _useState2[0], setActive = _useState2[1]; var _useContext = useContext(RadioCtx), GROUPVALUE = _useContext.GROUPVALUE, disabledGroup = _useContext.disabledGroup, updateGroup = _useContext.updateGroup; useEffect(function () { setActive(checked === value || value === GROUPVALUE); }, [checked, value, GROUPVALUE]); var onClick = function onClick() { if (disabled || disabledGroup) { return; } if (!active && onChange) { onChange(value); } if (!active) { updateGroup(value); } }; return React.createElement("div", { className: classnames('are-radio', { 'are-radio--checked': active, 'are-radio--disabled': disabled || disabledGroup }), tabIndex: 0, role: "radio", "aria-checked": active, "aria-disabled": disabled || disabledGroup, onClick: onClick, onKeyPress: function onKeyPress() {} }, React.createElement("span", { className: "are-radio__icon" }), children ? React.createElement("span", { className: "are-radio__label" }, children) : null); } Radio.Group = RadioGroup; Radio.defaultProps = { value: true }; var css$5 = ".are-overlay {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1;\n display: none;\n width: 100%;\n height: 100%;\n background-color: rgba(0, 0, 0, 0.2);\n}\n.are-overlay[data-visible=true] {\n display: block;\n}"; styleInject(css$5); var Overlay = function Overlay(props) { var className = props.className, style = props.style, visible = props.visible, zIndex = props.zIndex, children = props.children, container = props.container, onClose = props.onClose; var _useState = useState(false), _useState2 = _slicedToArray(_useState, 2), isRender = _useState2[0], setIsRender = _useState2[1]; useEffect(function () { if (visible) { document.body.style.overflow = 'hidden'; setIsRender(true); } else { document.body.style.overflow = 'unset'; } }, [visible]); var mask = React.createElement("div", { className: classnames('are-overlay', className), style: _objectSpread2({ zIndex: zIndex }, style), key: 1, "data-visible": visible, role: "presentation", "aria-hidden": true, tabIndex: -1, onClick: function onClick() { if (onClose) { onClose(); } } }, children); var node = React.createElement(Animate, { component: "", showProp: "data-visible", transitionName: "are-fade" }, isRender ? mask : null); return container ? ReactDOM.createPortal(node, container) : node; }; Overlay.defaultProps = { visible: false }; /** 空格键盘码 */ var SPACE = 32; /** ESC 键盘码 */ var ESC = 27; /** * 键盘按下事件 */ function onKeyBoardEvent(event, keyCode, callback) { if (event.keyCode === keyCode) { callback(); } } var css$6 = ".are-element {\n display: inline-block;\n box-sizing: border-box;\n}\n.are-element--block {\n display: block;\n}\n.are-element--radius {\n border-radius: 4px;\n}\n.are-element--elevation-1 {\n box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.1);\n}\n.are-element--elevation-2 {\n box-shadow: 0 4px 16px 0 rgba(0, 0, 0, 0.1);\n}\n.are-element--elevation-3 {\n box-shadow: 0 6px 20px 0 rgba(0, 0, 0, 0.16);\n}\n.are-element--elevation-4 {\n box-shadow: 0 10px 32px 0 rgba(0, 0, 0, 0.2);\n}"; styleInject(css$6); var Element = function Element(props) { var _classnames; var className = props.className, style = props.style, _props$tag = props.tag, tag = _props$tag === void 0 ? 'div' : _props$tag, radius = props.radius, block = props.block, isShow = props.isShow, isRender = props.isRender, elevation = props.elevation, children = props.children, other = _objectWithoutProperties(props, ["className", "style", "tag", "radius", "block", "isShow", "isRender", "elevation", "children"]); var node = React.createElement(tag, _objectSpread2({ className: classnames('are-element', (_classnames = {}, _defineProperty(_classnames, "are-element--elevation-".concat(elevation), elevation !== 0), _defineProperty(_classnames, 'are-element--block', block), _defineProperty(_classnames, 'are-element--radius', radius), _classnames), className), style: _objectSpread2(_objectSpread2({}, style), {}, { display: isShow ? '' : 'none' }) }, other), children); return isRender ? node : null; }; Element.defaultProps = { elevation: 0, isShow: true, isRender: true, block: true }; var css$7 = ".are-text {\n display: inline-block;\n margin: 0;\n font-weight: normal;\n line-height: 1.5;\n vertical-align: middle;\n}\n.are-text--block {\n display: block;\n}\n.are-text--lh-1 {\n line-height: 1;\n}\n.are-text--lh-1-3 {\n line-height: 1.3;\n}\n.are-text--lv1 {\n font-size: 38px;\n}\n.are-text--lv2 {\n font-size: 30px;\n}\n.are-text--lv3 {\n font-size: 24px;\n}\n.are-text--lv4 {\n font-size: 20px;\n}\n.are-text--lv5 {\n font-size: 16px;\n}\n.are-text--lv6 {\n font-size: 14px;\n}\n.are-text--weight-2 {\n color: #5c5c5c;\n}\n.are-text--weight-3 {\n color: #767676;\n}\n.are-text--weight-4 {\n color: #8f8f8f;\n}\n.are-text--weight-5 {\n color: darkgray;\n}\n.are-text--weight-6 {\n color: #c2c2c2;\n}\n.are-text--bold {\n font-weight: bold;\n}"; styleInject(css$7); var Text = function Text(props) { var _classnames; var _props$tag = props.tag, tag = _props$tag === void 0 ? 'p' : _props$tag, style = props.style, spaceBottom = props.spaceBottom, lineHeight = props.lineHeight, level = props.level, bold = props.bold, block = props.block, weight = props.weight, children = props.children; return React.createElement(tag, { className: classnames('are-font', 'are-text', (_classnames = { 'are-text--lh-1': lineHeight === '1', 'are-text--lh-1-3': lineHeight === '1.3', 'are-text--bold': bold, 'are-text--block': block }, _defineProperty(_classnames, "are-text--weight-".concat(weight), weight), _defineProperty(_classnames, "are-text--lv".concat(level), true), _classnames)), style: _objectSpread2(_objectSpread2({}, style), {}, { marginBottom: "".concat(spaceBottom, "px") }) }, children); }; Text.defaultProps = { tag: 'p', level: 6, block: true }; function _extends$3() { _extends$3 = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$3.apply(this, arguments); } var _ref$3 = /*#__PURE__*/React.createElement("path", { d: "M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z", fillRule: "nonzero" }); var SvgClose = function SvgClose(props) { return /*#__PURE__*/React.createElement("svg", _extends$3({ viewBox: "0 0 24 24", width: "1em", height: "1em", fillRule: "evenodd", clipRule: "evenodd", strokeLinejoin: "round", strokeMiterlimit: 2 }, props), _ref$3); }; var css$8 = ".are-modal-wrapper {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 2;\n width: 100%;\n height: 100%;\n pointer-events: none;\n}\n\n.are-modal {\n position: relative;\n top: 20%;\n margin: 0 auto;\n width: 540px;\n pointer-events: auto;\n background-color: #fff;\n border-radius: 4px;\n}\n.are-modal__header, .are-modal__footer {\n position: relative;\n padding: 16px;\n line-height: 1;\n}\n.are-modal__header {\n position: relative;\n}\n.are-modal__header--line {\n border-bottom: 1px solid #f1f1f1;\n}\n.are-modal__body {\n position: relative;\n padding: 16px;\n color: #292929;\n}\n.are-modal__footer {\n padding: 10px 16px;\n text-align: right;\n}\n.are-modal__footer--line {\n border-top: 1px solid #f1f1f1;\n}\n.are-modal__close {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 1;\n display: inline-block;\n padding: 14px;\n font-size: 20px;\n line-height: 0;\n color: #8f8f8f;\n cursor: pointer;\n}"; styleInject(css$8); var Modal = function Modal(props) { var top = props.top, visible = props.visible, title = props.title, footer = props.footer, line = props.line, className = props.className, style = props.style, lazyRender = props.lazyRender, showClose = props.showClose, children = props.children, onClose = props.onClose, onClosed = props.onClosed; // lazyRender var _useState = useState(!lazyRender), _useState2 = _slicedToArray(_useState, 2), isRender = _useState2[0], setIsRender = _useState2[1]; useEffect(function () { if (visible) { setIsRender(true); } }, [visible]); var handlerClose = function handlerClose() { if (onClose) { onClose(); } }; return React.createElement(Animate, { className: "are-modal-wrapper", transitionName: "are-zoom", showProp: "isShow", component: "div", onEnd: function onEnd() { if (onClosed && !visible) { onClosed(); } } }, isRender ? React.createElement(Element, { key: "modal-node", className: classnames('are-modal', className), role: "presentation", isShow: visible, elevation: 2, onClick: function onClick(e) { e.stopPropagation(); }, style: _objectSpread2({ top: top }, style) }, React.createElement(Element, { className: "are-modal__close", role: "button", "aria-label": "close", tag: "span", tabIndex: 0, isRender: showClose, onClick: handlerClose, onKeyPress: function onKeyPress(e) { return onKeyBoardEvent(e, SPACE, handlerClose); } }, React.createElement(SvgClose, { fill: "currentColor" })), React.createElement(Element, { className: classnames('are-modal__header', { 'are-modal__header--line': line }), isRender: Boolean(title) }, typeof title === 'string' ? React.createElement(Text, { tag: "h3", lineHeight: "1", level: 5 }, title) : title), React.createElement("section", { className: "are-modal__body" }, children), footer ? React.createElement("footer", { className: classnames('are-modal__footer', { 'are-modal__footer--line': line }) }, footer) : null) : null); }; Modal.defaultProps = { visible: false, lazyRender: true, showClose: true, line: false }; var ModalWrapper = function ModalWrapper(props) { var visible = props.visible, zIndex = props.zIndex, lazyRender = props.lazyRender, children = props.children, container = props.container, maskClosable = props.maskClosable, escClosable = props.escClosable, onClose = props.onClose, other = _objectWithoutProperties(props, ["visible", "zIndex", "lazyRender", "children", "container", "maskClosable", "escClosable", "onClose"]); /** ESC 关闭 Modal */ useEffect(function () { var onKeyPressEsc = function onKeyPressEsc(e) { if (e.keyCode === ESC && onClose) { onClose(); } }; if (escClosable) { document.addEventListener('keydown', onKeyPressEsc); } return function () { document.removeEventListener('keydown', onKeyPressEsc); }; }, [escClosable, onClose]); return ReactDOM.createPortal(React.createElement("div", { style: { position: 'fixed', zIndex: typeof zIndex === 'number' ? zIndex : 1 } }, React.createElement(Modal, Object.assign({ visible: visible, lazyRender: lazyRender, onClose: onClose }, other), children), React.createElement(Overlay, { visible: visible, onClose: maskClosable ? onClose : undefined })), container || document.body); }; ModalWrapper.defaultProps = { visible: false, lazyRender: true, maskClosable: true, escClosable: true }; /** * 处理函数返回值中的 Promise */ function handlerPromise(maybePromise, beforeResolve) { if (!maybePromise || !maybePromise.then) { return Promise.reject(); } if (beforeResolve) { beforeResolve(); } return Promise.resolve(maybePromise); } var css$9 = ".are-dialog {\n width: 320px;\n min-width: 240px;\n box-sizing: border-box;\n}\n.are-dialog__icon {\n font-size: 24px;\n}\n.are-dialog__footer {\n text-align: right;\n}"; styleInject(css$9); var Dialog = function Dialog(props) { var visible = props.visible, title = props.title, content = props.content, zIndex = props.zIndex, confirmText = props.confirmText, cancelText = props.cancelText, footer = props.footer, showClose = props.showClose, maskClosable = props.maskClosable, onCancel = props.onCancel, onConfirm = props.onConfirm, onClose = props.onClose, _onClosed = props.onClosed, container = props.container, cancelButtonProps = props.cancelButtonProps, confirmButtonProps = props.confirmButtonProps; var _useState = useState(false), _useState2 = _slicedToArray(_useState, 2), loading = _useState2[0], setLoading = _useState2[1]; var close = function close() { onClose(); }; var handlerConfirm = function handlerConfirm() { if (onConfirm) { var result = onConfirm(); handlerPromise(result, function () { return setLoading(true); }).then(function () { return close(); }, function () { return close(); }); } else { close(); } }; return React.createElement(ModalWrapper, { className: "are-dialog", visible: visible, showClose: showClose, maskClosable: maskClosable, zIndex: zIndex, onClose: close, onClosed: function onClosed() { _onClosed(); setLoading(false); }, footer: footer || [cancelText ? React.createElement(Button, Object.assign({ key: "cancel" }, cancelButtonProps, { onClick: function onClick() { if (onCancel) { onCancel(); } close(); } }), cancelText) : null, confirmText ? React.createElement(Button, Object.assign({ key: "confirm", type: "primary" }, confirmButtonProps, { loading: loading, onClick: handlerConfirm }), confirmText) : null], container: container }, React.createElement(Text, { className: "are-title", tag: "h3", level: "4", spaceBottom: 20, bold: true }, title), React.createElement(Text, { tag: "div", spaceBottom: 10, weight: 4 }, content)); }; var reducer = function reducer(state, action) { switch (action.type) { case 'add': return _objectSpread2(_objectSpread2({}, state), {}, _defineProperty({}, action.payload.id, action.payload)); case 'update': return _objectSpread2(_objectSpread2({}, state), {}, _defineProperty({}, action.payload.id, action.payload)); case 'remove': return omit$1(state, [action.id]); default: return state; } }; var DialogWrapper = function DialogWrapper(_ref, ref) { var holder = _ref.holder; var _useReducer = useReducer(reducer, {}), _useReducer2 = _slicedToArray(_useReducer, 2), state = _useReducer2[0], dispatch = _useReducer2[1]; var add = useCallback(function (val) { dispatch({ type: 'add', payload: _objectSpread2(_objectSpread2({}, val), {}, { visible: true }) }); }, []); var update = useCallback(function (val) { if (!hasOwn(state, val.id)) { return; } var item = state[val.id]; dispatch({ type: 'update', payload: _objectSpread2(_objectSpread2({}, item), val) }); }, [state]); var remove = function remove(id) { if (!hasOwn(state, id)) { return; } dispatch({ type: 'remove', id: id }); }; var closeById = useCallback(function (id) { if (!hasOwn(state, id)) { return; } dispatch({ type: 'add', payload: _objectSpread2(_objectSpread2({}, state[id]), {}, { visible: false }) }); }, [state]); var clearAll = useCallback(function () { Object.keys(state).forEach(function (id) { closeById(id); }); }, [state, closeById]); useImperativeHandle(ref, function () { return { add: add, update: update, clearAll: clearAll, close: closeById }; }, [closeById, clearAll, add, update]); var render = React.createElement(React.Fragment, null, Object.keys(state).map(function (key) { var _state$key = state[key], id = _state$key.id, visible = _state$key.visible, _onCancel = _state$key.onCancel, _onClose = _state$key.onClose, _props = _objectWithoutProperties(_state$key, ["id", "visible", "onCancel", "onClose"]); return React.createElement(Dialog, Object.assign({ key: id, visible: visible }, _props, { onCancel: function onCancel() { if (_onCancel) { _onCancel(); } }, onClose: function onClose() { closeById(id); if (_onClose) { _onClose(); } }, onClosed: function onClosed() { remove(id); }, container: holder })); })); return holder ? ReactDOM.createPortal(render, holder) : render; }; var DialogWrapper$1 = forwardRef(DialogWrapper); /** Create DOM */ var createContainer = function createContainer(id) { var className = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; var callback = arguments.length > 2 ? arguments[2] : undefined; var container = document.getElementById(id); if (container) { return container; } container = document.createElement('div'); container.className = className; container.id = id; if (callback) { callback(container); } document.body.appendChild(container); return container; }; function createAlias(instance) { var aliasMethods = { open: function open(value) { instance().add(value); }, update: function update(value) { instance().update(value); }, clear: function clear() { instance().clearAll(); return aliasMethods; }, close: function close(id) { instance().close(id); return aliasMethods; } }; return aliasMethods; } var MODAL_CONTAINER_ID = 'ARE-VISUAL-MODAL'; var instance = null; function init() { var container = document.getElementById(MODAL_CONTAINER_ID); if (!instance || !container) { var holder = createContainer(MODAL_CONTAINER_ID); ReactDOM.render(React.createElement(DialogWrapper$1, { ref: function ref(func) { instance = func; }, holder: holder }), holder); } return instance; } function callInstance() { if (!instance) { return init(); } return instance; } init(); var dialog = createAlias(callInstance); function useDialog() { var instance = useRef(null); var DialogHolder = function DialogHolder() { return React.createElement(DialogWrapper$1, { ref: instance, holder: createContainer(MODAL_CONTAINER_ID) }); }; return [createAlias(function () { return instance.current; }), DialogHolder]; } function _extends$4() { _extends$4 = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$4.apply(this, arguments); } var _ref$4 = /*#__PURE__*/React.createElement("path", { d: "M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z" }); var SvgErr = function SvgErr(props) { return /*#__PURE__*/React.createElement("svg", _extends$4({ viewBox: "0 0 24 24", width: "1em", height: "1em", fillRule: "evenodd", clipRule: "evenodd", strokeLinejoin: "round", strokeMiterlimit: 2 }, props), _ref$4); }; function _extends$5() { _extends$5 = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$5.apply(this, arguments); } var _ref$5 = /*#__PURE__*/React.createElement("path", { d: "M1.176 19.72a1.302 1.302 0 001.127 1.958h19.393a1.304 1.304 0 001.128-1.958L13.13 2.972a1.309 1.309 0