|
|
/******/ (() => { // webpackBootstrap
|
|
|
/******/ var __webpack_modules__ = ({
|
|
|
|
|
|
/***/ "./node_modules/@ant-design/colors/dist/index.esm.js":
|
|
|
/*!***********************************************************!*\
|
|
|
!*** ./node_modules/@ant-design/colors/dist/index.esm.js ***!
|
|
|
\***********************************************************/
|
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "blue": () => (/* binding */ blue),
|
|
|
/* harmony export */ "cyan": () => (/* binding */ cyan),
|
|
|
/* harmony export */ "geekblue": () => (/* binding */ geekblue),
|
|
|
/* harmony export */ "generate": () => (/* binding */ generate),
|
|
|
/* harmony export */ "gold": () => (/* binding */ gold),
|
|
|
/* harmony export */ "green": () => (/* binding */ green),
|
|
|
/* harmony export */ "grey": () => (/* binding */ grey),
|
|
|
/* harmony export */ "lime": () => (/* binding */ lime),
|
|
|
/* harmony export */ "magenta": () => (/* binding */ magenta),
|
|
|
/* harmony export */ "orange": () => (/* binding */ orange),
|
|
|
/* harmony export */ "presetDarkPalettes": () => (/* binding */ presetDarkPalettes),
|
|
|
/* harmony export */ "presetPalettes": () => (/* binding */ presetPalettes),
|
|
|
/* harmony export */ "presetPrimaryColors": () => (/* binding */ presetPrimaryColors),
|
|
|
/* harmony export */ "purple": () => (/* binding */ purple),
|
|
|
/* harmony export */ "red": () => (/* binding */ red),
|
|
|
/* harmony export */ "volcano": () => (/* binding */ volcano),
|
|
|
/* harmony export */ "yellow": () => (/* binding */ yellow)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var _ctrl_tinycolor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @ctrl/tinycolor */ "./node_modules/@ctrl/tinycolor/dist/module/conversion.js");
|
|
|
/* harmony import */ var _ctrl_tinycolor__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @ctrl/tinycolor */ "./node_modules/@ctrl/tinycolor/dist/module/format-input.js");
|
|
|
|
|
|
|
|
|
var hueStep = 2; // 色相阶梯
|
|
|
|
|
|
var saturationStep = 0.16; // 饱和度阶梯,浅色部分
|
|
|
|
|
|
var saturationStep2 = 0.05; // 饱和度阶梯,深色部分
|
|
|
|
|
|
var brightnessStep1 = 0.05; // 亮度阶梯,浅色部分
|
|
|
|
|
|
var brightnessStep2 = 0.15; // 亮度阶梯,深色部分
|
|
|
|
|
|
var lightColorCount = 5; // 浅色数量,主色上
|
|
|
|
|
|
var darkColorCount = 4; // 深色数量,主色下
|
|
|
// 暗色主题颜色映射关系表
|
|
|
|
|
|
var darkColorMap = [{
|
|
|
index: 7,
|
|
|
opacity: 0.15
|
|
|
}, {
|
|
|
index: 6,
|
|
|
opacity: 0.25
|
|
|
}, {
|
|
|
index: 5,
|
|
|
opacity: 0.3
|
|
|
}, {
|
|
|
index: 5,
|
|
|
opacity: 0.45
|
|
|
}, {
|
|
|
index: 5,
|
|
|
opacity: 0.65
|
|
|
}, {
|
|
|
index: 5,
|
|
|
opacity: 0.85
|
|
|
}, {
|
|
|
index: 4,
|
|
|
opacity: 0.9
|
|
|
}, {
|
|
|
index: 3,
|
|
|
opacity: 0.95
|
|
|
}, {
|
|
|
index: 2,
|
|
|
opacity: 0.97
|
|
|
}, {
|
|
|
index: 1,
|
|
|
opacity: 0.98
|
|
|
}]; // Wrapper function ported from TinyColor.prototype.toHsv
|
|
|
// Keep it here because of `hsv.h * 360`
|
|
|
|
|
|
function toHsv(_ref) {
|
|
|
var r = _ref.r,
|
|
|
g = _ref.g,
|
|
|
b = _ref.b;
|
|
|
var hsv = (0,_ctrl_tinycolor__WEBPACK_IMPORTED_MODULE_0__.rgbToHsv)(r, g, b);
|
|
|
return {
|
|
|
h: hsv.h * 360,
|
|
|
s: hsv.s,
|
|
|
v: hsv.v
|
|
|
};
|
|
|
} // Wrapper function ported from TinyColor.prototype.toHexString
|
|
|
// Keep it here because of the prefix `#`
|
|
|
|
|
|
|
|
|
function toHex(_ref2) {
|
|
|
var r = _ref2.r,
|
|
|
g = _ref2.g,
|
|
|
b = _ref2.b;
|
|
|
return "#".concat((0,_ctrl_tinycolor__WEBPACK_IMPORTED_MODULE_0__.rgbToHex)(r, g, b, false));
|
|
|
} // Wrapper function ported from TinyColor.prototype.mix, not treeshakable.
|
|
|
// Amount in range [0, 1]
|
|
|
// Assume color1 & color2 has no alpha, since the following src code did so.
|
|
|
|
|
|
|
|
|
function mix(rgb1, rgb2, amount) {
|
|
|
var p = amount / 100;
|
|
|
var rgb = {
|
|
|
r: (rgb2.r - rgb1.r) * p + rgb1.r,
|
|
|
g: (rgb2.g - rgb1.g) * p + rgb1.g,
|
|
|
b: (rgb2.b - rgb1.b) * p + rgb1.b
|
|
|
};
|
|
|
return rgb;
|
|
|
}
|
|
|
|
|
|
function getHue(hsv, i, light) {
|
|
|
var hue; // 根据色相不同,色相转向不同
|
|
|
|
|
|
if (Math.round(hsv.h) >= 60 && Math.round(hsv.h) <= 240) {
|
|
|
hue = light ? Math.round(hsv.h) - hueStep * i : Math.round(hsv.h) + hueStep * i;
|
|
|
} else {
|
|
|
hue = light ? Math.round(hsv.h) + hueStep * i : Math.round(hsv.h) - hueStep * i;
|
|
|
}
|
|
|
|
|
|
if (hue < 0) {
|
|
|
hue += 360;
|
|
|
} else if (hue >= 360) {
|
|
|
hue -= 360;
|
|
|
}
|
|
|
|
|
|
return hue;
|
|
|
}
|
|
|
|
|
|
function getSaturation(hsv, i, light) {
|
|
|
// grey color don't change saturation
|
|
|
if (hsv.h === 0 && hsv.s === 0) {
|
|
|
return hsv.s;
|
|
|
}
|
|
|
|
|
|
var saturation;
|
|
|
|
|
|
if (light) {
|
|
|
saturation = hsv.s - saturationStep * i;
|
|
|
} else if (i === darkColorCount) {
|
|
|
saturation = hsv.s + saturationStep;
|
|
|
} else {
|
|
|
saturation = hsv.s + saturationStep2 * i;
|
|
|
} // 边界值修正
|
|
|
|
|
|
|
|
|
if (saturation > 1) {
|
|
|
saturation = 1;
|
|
|
} // 第一格的 s 限制在 0.06-0.1 之间
|
|
|
|
|
|
|
|
|
if (light && i === lightColorCount && saturation > 0.1) {
|
|
|
saturation = 0.1;
|
|
|
}
|
|
|
|
|
|
if (saturation < 0.06) {
|
|
|
saturation = 0.06;
|
|
|
}
|
|
|
|
|
|
return Number(saturation.toFixed(2));
|
|
|
}
|
|
|
|
|
|
function getValue(hsv, i, light) {
|
|
|
var value;
|
|
|
|
|
|
if (light) {
|
|
|
value = hsv.v + brightnessStep1 * i;
|
|
|
} else {
|
|
|
value = hsv.v - brightnessStep2 * i;
|
|
|
}
|
|
|
|
|
|
if (value > 1) {
|
|
|
value = 1;
|
|
|
}
|
|
|
|
|
|
return Number(value.toFixed(2));
|
|
|
}
|
|
|
|
|
|
function generate(color) {
|
|
|
var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
|
var patterns = [];
|
|
|
var pColor = (0,_ctrl_tinycolor__WEBPACK_IMPORTED_MODULE_1__.inputToRGB)(color);
|
|
|
|
|
|
for (var i = lightColorCount; i > 0; i -= 1) {
|
|
|
var hsv = toHsv(pColor);
|
|
|
var colorString = toHex((0,_ctrl_tinycolor__WEBPACK_IMPORTED_MODULE_1__.inputToRGB)({
|
|
|
h: getHue(hsv, i, true),
|
|
|
s: getSaturation(hsv, i, true),
|
|
|
v: getValue(hsv, i, true)
|
|
|
}));
|
|
|
patterns.push(colorString);
|
|
|
}
|
|
|
|
|
|
patterns.push(toHex(pColor));
|
|
|
|
|
|
for (var _i = 1; _i <= darkColorCount; _i += 1) {
|
|
|
var _hsv = toHsv(pColor);
|
|
|
|
|
|
var _colorString = toHex((0,_ctrl_tinycolor__WEBPACK_IMPORTED_MODULE_1__.inputToRGB)({
|
|
|
h: getHue(_hsv, _i),
|
|
|
s: getSaturation(_hsv, _i),
|
|
|
v: getValue(_hsv, _i)
|
|
|
}));
|
|
|
|
|
|
patterns.push(_colorString);
|
|
|
} // dark theme patterns
|
|
|
|
|
|
|
|
|
if (opts.theme === 'dark') {
|
|
|
return darkColorMap.map(function (_ref3) {
|
|
|
var index = _ref3.index,
|
|
|
opacity = _ref3.opacity;
|
|
|
var darkColorString = toHex(mix((0,_ctrl_tinycolor__WEBPACK_IMPORTED_MODULE_1__.inputToRGB)(opts.backgroundColor || '#141414'), (0,_ctrl_tinycolor__WEBPACK_IMPORTED_MODULE_1__.inputToRGB)(patterns[index]), opacity * 100));
|
|
|
return darkColorString;
|
|
|
});
|
|
|
}
|
|
|
|
|
|
return patterns;
|
|
|
}
|
|
|
|
|
|
var presetPrimaryColors = {
|
|
|
red: '#F5222D',
|
|
|
volcano: '#FA541C',
|
|
|
orange: '#FA8C16',
|
|
|
gold: '#FAAD14',
|
|
|
yellow: '#FADB14',
|
|
|
lime: '#A0D911',
|
|
|
green: '#52C41A',
|
|
|
cyan: '#13C2C2',
|
|
|
blue: '#1890FF',
|
|
|
geekblue: '#2F54EB',
|
|
|
purple: '#722ED1',
|
|
|
magenta: '#EB2F96',
|
|
|
grey: '#666666'
|
|
|
};
|
|
|
var presetPalettes = {};
|
|
|
var presetDarkPalettes = {};
|
|
|
Object.keys(presetPrimaryColors).forEach(function (key) {
|
|
|
presetPalettes[key] = generate(presetPrimaryColors[key]);
|
|
|
presetPalettes[key].primary = presetPalettes[key][5]; // dark presetPalettes
|
|
|
|
|
|
presetDarkPalettes[key] = generate(presetPrimaryColors[key], {
|
|
|
theme: 'dark',
|
|
|
backgroundColor: '#141414'
|
|
|
});
|
|
|
presetDarkPalettes[key].primary = presetDarkPalettes[key][5];
|
|
|
});
|
|
|
var red = presetPalettes.red;
|
|
|
var volcano = presetPalettes.volcano;
|
|
|
var gold = presetPalettes.gold;
|
|
|
var orange = presetPalettes.orange;
|
|
|
var yellow = presetPalettes.yellow;
|
|
|
var lime = presetPalettes.lime;
|
|
|
var green = presetPalettes.green;
|
|
|
var cyan = presetPalettes.cyan;
|
|
|
var blue = presetPalettes.blue;
|
|
|
var geekblue = presetPalettes.geekblue;
|
|
|
var purple = presetPalettes.purple;
|
|
|
var magenta = presetPalettes.magenta;
|
|
|
var grey = presetPalettes.grey;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@ant-design/icons-svg/lib/asn/CheckCircleFilled.js":
|
|
|
/*!*************************************************************************!*\
|
|
|
!*** ./node_modules/@ant-design/icons-svg/lib/asn/CheckCircleFilled.js ***!
|
|
|
\*************************************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
// This icon file is generated automatically.
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
|
var CheckCircleFilled = { "icon": { "tag": "svg", "attrs": { "viewBox": "64 64 896 896", "focusable": "false" }, "children": [{ "tag": "path", "attrs": { "d": "M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm193.5 301.7l-210.6 292a31.8 31.8 0 01-51.7 0L318.5 484.9c-3.8-5.3 0-12.7 6.5-12.7h46.9c10.2 0 19.9 4.9 25.9 13.3l71.2 98.8 157.2-218c6-8.3 15.6-13.3 25.9-13.3H699c6.5 0 10.3 7.4 6.5 12.7z" } }] }, "name": "check-circle", "theme": "filled" };
|
|
|
exports["default"] = CheckCircleFilled;
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@ant-design/icons-svg/lib/asn/CheckCircleOutlined.js":
|
|
|
/*!***************************************************************************!*\
|
|
|
!*** ./node_modules/@ant-design/icons-svg/lib/asn/CheckCircleOutlined.js ***!
|
|
|
\***************************************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
// This icon file is generated automatically.
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
|
var CheckCircleOutlined = { "icon": { "tag": "svg", "attrs": { "viewBox": "64 64 896 896", "focusable": "false" }, "children": [{ "tag": "path", "attrs": { "d": "M699 353h-46.9c-10.2 0-19.9 4.9-25.9 13.3L469 584.3l-71.2-98.8c-6-8.3-15.6-13.3-25.9-13.3H325c-6.5 0-10.3 7.4-6.5 12.7l124.6 172.8a31.8 31.8 0 0051.7 0l210.6-292c3.9-5.3.1-12.7-6.4-12.7z" } }, { "tag": "path", "attrs": { "d": "M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z" } }] }, "name": "check-circle", "theme": "outlined" };
|
|
|
exports["default"] = CheckCircleOutlined;
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@ant-design/icons-svg/lib/asn/CloseCircleFilled.js":
|
|
|
/*!*************************************************************************!*\
|
|
|
!*** ./node_modules/@ant-design/icons-svg/lib/asn/CloseCircleFilled.js ***!
|
|
|
\*************************************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
// This icon file is generated automatically.
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
|
var CloseCircleFilled = { "icon": { "tag": "svg", "attrs": { "viewBox": "64 64 896 896", "focusable": "false" }, "children": [{ "tag": "path", "attrs": { "d": "M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm165.4 618.2l-66-.3L512 563.4l-99.3 118.4-66.1.3c-4.4 0-8-3.5-8-8 0-1.9.7-3.7 1.9-5.2l130.1-155L340.5 359a8.32 8.32 0 01-1.9-5.2c0-4.4 3.6-8 8-8l66.1.3L512 464.6l99.3-118.4 66-.3c4.4 0 8 3.5 8 8 0 1.9-.7 3.7-1.9 5.2L553.5 514l130 155c1.2 1.5 1.9 3.3 1.9 5.2 0 4.4-3.6 8-8 8z" } }] }, "name": "close-circle", "theme": "filled" };
|
|
|
exports["default"] = CloseCircleFilled;
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@ant-design/icons-svg/lib/asn/CloseCircleOutlined.js":
|
|
|
/*!***************************************************************************!*\
|
|
|
!*** ./node_modules/@ant-design/icons-svg/lib/asn/CloseCircleOutlined.js ***!
|
|
|
\***************************************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
// This icon file is generated automatically.
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
|
var CloseCircleOutlined = { "icon": { "tag": "svg", "attrs": { "viewBox": "64 64 896 896", "focusable": "false" }, "children": [{ "tag": "path", "attrs": { "d": "M685.4 354.8c0-4.4-3.6-8-8-8l-66 .3L512 465.6l-99.3-118.4-66.1-.3c-4.4 0-8 3.5-8 8 0 1.9.7 3.7 1.9 5.2l130.1 155L340.5 670a8.32 8.32 0 00-1.9 5.2c0 4.4 3.6 8 8 8l66.1-.3L512 564.4l99.3 118.4 66 .3c4.4 0 8-3.5 8-8 0-1.9-.7-3.7-1.9-5.2L553.5 515l130.1-155c1.2-1.4 1.8-3.3 1.8-5.2z" } }, { "tag": "path", "attrs": { "d": "M512 65C264.6 65 64 265.6 64 513s200.6 448 448 448 448-200.6 448-448S759.4 65 512 65zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z" } }] }, "name": "close-circle", "theme": "outlined" };
|
|
|
exports["default"] = CloseCircleOutlined;
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@ant-design/icons-svg/lib/asn/CloseOutlined.js":
|
|
|
/*!*********************************************************************!*\
|
|
|
!*** ./node_modules/@ant-design/icons-svg/lib/asn/CloseOutlined.js ***!
|
|
|
\*********************************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
// This icon file is generated automatically.
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
|
var CloseOutlined = { "icon": { "tag": "svg", "attrs": { "viewBox": "64 64 896 896", "focusable": "false" }, "children": [{ "tag": "path", "attrs": { "d": "M563.8 512l262.5-312.9c4.4-5.2.7-13.1-6.1-13.1h-79.8c-4.7 0-9.2 2.1-12.3 5.7L511.6 449.8 295.1 191.7c-3-3.6-7.5-5.7-12.3-5.7H203c-6.8 0-10.5 7.9-6.1 13.1L459.4 512 196.9 824.9A7.95 7.95 0 00203 838h79.8c4.7 0 9.2-2.1 12.3-5.7l216.5-258.1 216.5 258.1c3 3.6 7.5 5.7 12.3 5.7h79.8c6.8 0 10.5-7.9 6.1-13.1L563.8 512z" } }] }, "name": "close", "theme": "outlined" };
|
|
|
exports["default"] = CloseOutlined;
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@ant-design/icons-svg/lib/asn/ExclamationCircleFilled.js":
|
|
|
/*!*******************************************************************************!*\
|
|
|
!*** ./node_modules/@ant-design/icons-svg/lib/asn/ExclamationCircleFilled.js ***!
|
|
|
\*******************************************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
// This icon file is generated automatically.
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
|
var ExclamationCircleFilled = { "icon": { "tag": "svg", "attrs": { "viewBox": "64 64 896 896", "focusable": "false" }, "children": [{ "tag": "path", "attrs": { "d": "M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm-32 232c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v272c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V296zm32 440a48.01 48.01 0 010-96 48.01 48.01 0 010 96z" } }] }, "name": "exclamation-circle", "theme": "filled" };
|
|
|
exports["default"] = ExclamationCircleFilled;
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@ant-design/icons-svg/lib/asn/ExclamationCircleOutlined.js":
|
|
|
/*!*********************************************************************************!*\
|
|
|
!*** ./node_modules/@ant-design/icons-svg/lib/asn/ExclamationCircleOutlined.js ***!
|
|
|
\*********************************************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
// This icon file is generated automatically.
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
|
var ExclamationCircleOutlined = { "icon": { "tag": "svg", "attrs": { "viewBox": "64 64 896 896", "focusable": "false" }, "children": [{ "tag": "path", "attrs": { "d": "M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z" } }, { "tag": "path", "attrs": { "d": "M464 688a48 48 0 1096 0 48 48 0 10-96 0zm24-112h48c4.4 0 8-3.6 8-8V296c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v272c0 4.4 3.6 8 8 8z" } }] }, "name": "exclamation-circle", "theme": "outlined" };
|
|
|
exports["default"] = ExclamationCircleOutlined;
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@ant-design/icons-svg/lib/asn/InfoCircleFilled.js":
|
|
|
/*!************************************************************************!*\
|
|
|
!*** ./node_modules/@ant-design/icons-svg/lib/asn/InfoCircleFilled.js ***!
|
|
|
\************************************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
// This icon file is generated automatically.
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
|
var InfoCircleFilled = { "icon": { "tag": "svg", "attrs": { "viewBox": "64 64 896 896", "focusable": "false" }, "children": [{ "tag": "path", "attrs": { "d": "M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm32 664c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V456c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v272zm-32-344a48.01 48.01 0 010-96 48.01 48.01 0 010 96z" } }] }, "name": "info-circle", "theme": "filled" };
|
|
|
exports["default"] = InfoCircleFilled;
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@ant-design/icons-svg/lib/asn/InfoCircleOutlined.js":
|
|
|
/*!**************************************************************************!*\
|
|
|
!*** ./node_modules/@ant-design/icons-svg/lib/asn/InfoCircleOutlined.js ***!
|
|
|
\**************************************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
// This icon file is generated automatically.
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
|
var InfoCircleOutlined = { "icon": { "tag": "svg", "attrs": { "viewBox": "64 64 896 896", "focusable": "false" }, "children": [{ "tag": "path", "attrs": { "d": "M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z" } }, { "tag": "path", "attrs": { "d": "M464 336a48 48 0 1096 0 48 48 0 10-96 0zm72 112h-48c-4.4 0-8 3.6-8 8v272c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V456c0-4.4-3.6-8-8-8z" } }] }, "name": "info-circle", "theme": "outlined" };
|
|
|
exports["default"] = InfoCircleOutlined;
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@ant-design/icons-svg/lib/asn/LoadingOutlined.js":
|
|
|
/*!***********************************************************************!*\
|
|
|
!*** ./node_modules/@ant-design/icons-svg/lib/asn/LoadingOutlined.js ***!
|
|
|
\***********************************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
// This icon file is generated automatically.
|
|
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
|
|
var LoadingOutlined = { "icon": { "tag": "svg", "attrs": { "viewBox": "0 0 1024 1024", "focusable": "false" }, "children": [{ "tag": "path", "attrs": { "d": "M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z" } }] }, "name": "loading", "theme": "outlined" };
|
|
|
exports["default"] = LoadingOutlined;
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@ant-design/icons/CheckCircleFilled.js":
|
|
|
/*!*************************************************************!*\
|
|
|
!*** ./node_modules/@ant-design/icons/CheckCircleFilled.js ***!
|
|
|
\*************************************************************/
|
|
|
/***/ ((module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports["default"] = void 0;
|
|
|
|
|
|
var _CheckCircleFilled = _interopRequireDefault(__webpack_require__(/*! ./lib/icons/CheckCircleFilled */ "./node_modules/@ant-design/icons/lib/icons/CheckCircleFilled.js"));
|
|
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
|
|
|
|
|
|
var _default = _CheckCircleFilled;
|
|
|
exports["default"] = _default;
|
|
|
module.exports = _default;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@ant-design/icons/CheckCircleOutlined.js":
|
|
|
/*!***************************************************************!*\
|
|
|
!*** ./node_modules/@ant-design/icons/CheckCircleOutlined.js ***!
|
|
|
\***************************************************************/
|
|
|
/***/ ((module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports["default"] = void 0;
|
|
|
|
|
|
var _CheckCircleOutlined = _interopRequireDefault(__webpack_require__(/*! ./lib/icons/CheckCircleOutlined */ "./node_modules/@ant-design/icons/lib/icons/CheckCircleOutlined.js"));
|
|
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
|
|
|
|
|
|
var _default = _CheckCircleOutlined;
|
|
|
exports["default"] = _default;
|
|
|
module.exports = _default;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@ant-design/icons/CloseCircleFilled.js":
|
|
|
/*!*************************************************************!*\
|
|
|
!*** ./node_modules/@ant-design/icons/CloseCircleFilled.js ***!
|
|
|
\*************************************************************/
|
|
|
/***/ ((module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports["default"] = void 0;
|
|
|
|
|
|
var _CloseCircleFilled = _interopRequireDefault(__webpack_require__(/*! ./lib/icons/CloseCircleFilled */ "./node_modules/@ant-design/icons/lib/icons/CloseCircleFilled.js"));
|
|
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
|
|
|
|
|
|
var _default = _CloseCircleFilled;
|
|
|
exports["default"] = _default;
|
|
|
module.exports = _default;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@ant-design/icons/CloseCircleOutlined.js":
|
|
|
/*!***************************************************************!*\
|
|
|
!*** ./node_modules/@ant-design/icons/CloseCircleOutlined.js ***!
|
|
|
\***************************************************************/
|
|
|
/***/ ((module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports["default"] = void 0;
|
|
|
|
|
|
var _CloseCircleOutlined = _interopRequireDefault(__webpack_require__(/*! ./lib/icons/CloseCircleOutlined */ "./node_modules/@ant-design/icons/lib/icons/CloseCircleOutlined.js"));
|
|
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
|
|
|
|
|
|
var _default = _CloseCircleOutlined;
|
|
|
exports["default"] = _default;
|
|
|
module.exports = _default;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@ant-design/icons/CloseOutlined.js":
|
|
|
/*!*********************************************************!*\
|
|
|
!*** ./node_modules/@ant-design/icons/CloseOutlined.js ***!
|
|
|
\*********************************************************/
|
|
|
/***/ ((module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports["default"] = void 0;
|
|
|
|
|
|
var _CloseOutlined = _interopRequireDefault(__webpack_require__(/*! ./lib/icons/CloseOutlined */ "./node_modules/@ant-design/icons/lib/icons/CloseOutlined.js"));
|
|
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
|
|
|
|
|
|
var _default = _CloseOutlined;
|
|
|
exports["default"] = _default;
|
|
|
module.exports = _default;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@ant-design/icons/ExclamationCircleFilled.js":
|
|
|
/*!*******************************************************************!*\
|
|
|
!*** ./node_modules/@ant-design/icons/ExclamationCircleFilled.js ***!
|
|
|
\*******************************************************************/
|
|
|
/***/ ((module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports["default"] = void 0;
|
|
|
|
|
|
var _ExclamationCircleFilled = _interopRequireDefault(__webpack_require__(/*! ./lib/icons/ExclamationCircleFilled */ "./node_modules/@ant-design/icons/lib/icons/ExclamationCircleFilled.js"));
|
|
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
|
|
|
|
|
|
var _default = _ExclamationCircleFilled;
|
|
|
exports["default"] = _default;
|
|
|
module.exports = _default;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@ant-design/icons/ExclamationCircleOutlined.js":
|
|
|
/*!*********************************************************************!*\
|
|
|
!*** ./node_modules/@ant-design/icons/ExclamationCircleOutlined.js ***!
|
|
|
\*********************************************************************/
|
|
|
/***/ ((module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports["default"] = void 0;
|
|
|
|
|
|
var _ExclamationCircleOutlined = _interopRequireDefault(__webpack_require__(/*! ./lib/icons/ExclamationCircleOutlined */ "./node_modules/@ant-design/icons/lib/icons/ExclamationCircleOutlined.js"));
|
|
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
|
|
|
|
|
|
var _default = _ExclamationCircleOutlined;
|
|
|
exports["default"] = _default;
|
|
|
module.exports = _default;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@ant-design/icons/InfoCircleFilled.js":
|
|
|
/*!************************************************************!*\
|
|
|
!*** ./node_modules/@ant-design/icons/InfoCircleFilled.js ***!
|
|
|
\************************************************************/
|
|
|
/***/ ((module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports["default"] = void 0;
|
|
|
|
|
|
var _InfoCircleFilled = _interopRequireDefault(__webpack_require__(/*! ./lib/icons/InfoCircleFilled */ "./node_modules/@ant-design/icons/lib/icons/InfoCircleFilled.js"));
|
|
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
|
|
|
|
|
|
var _default = _InfoCircleFilled;
|
|
|
exports["default"] = _default;
|
|
|
module.exports = _default;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@ant-design/icons/InfoCircleOutlined.js":
|
|
|
/*!**************************************************************!*\
|
|
|
!*** ./node_modules/@ant-design/icons/InfoCircleOutlined.js ***!
|
|
|
\**************************************************************/
|
|
|
/***/ ((module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports["default"] = void 0;
|
|
|
|
|
|
var _InfoCircleOutlined = _interopRequireDefault(__webpack_require__(/*! ./lib/icons/InfoCircleOutlined */ "./node_modules/@ant-design/icons/lib/icons/InfoCircleOutlined.js"));
|
|
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
|
|
|
|
|
|
var _default = _InfoCircleOutlined;
|
|
|
exports["default"] = _default;
|
|
|
module.exports = _default;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@ant-design/icons/LoadingOutlined.js":
|
|
|
/*!***********************************************************!*\
|
|
|
!*** ./node_modules/@ant-design/icons/LoadingOutlined.js ***!
|
|
|
\***********************************************************/
|
|
|
/***/ ((module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports["default"] = void 0;
|
|
|
|
|
|
var _LoadingOutlined = _interopRequireDefault(__webpack_require__(/*! ./lib/icons/LoadingOutlined */ "./node_modules/@ant-design/icons/lib/icons/LoadingOutlined.js"));
|
|
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
|
|
|
|
|
|
var _default = _LoadingOutlined;
|
|
|
exports["default"] = _default;
|
|
|
module.exports = _default;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@ant-design/icons/lib/components/AntdIcon.js":
|
|
|
/*!*******************************************************************!*\
|
|
|
!*** ./node_modules/@ant-design/icons/lib/components/AntdIcon.js ***!
|
|
|
\*******************************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js");
|
|
|
|
|
|
var _interopRequireWildcard = __webpack_require__(/*! @babel/runtime/helpers/interopRequireWildcard */ "./node_modules/@babel/runtime/helpers/interopRequireWildcard.js");
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports["default"] = void 0;
|
|
|
|
|
|
var _objectSpread2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectSpread2 */ "./node_modules/@babel/runtime/helpers/objectSpread2.js"));
|
|
|
|
|
|
var _slicedToArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ "./node_modules/@babel/runtime/helpers/slicedToArray.js"));
|
|
|
|
|
|
var _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "./node_modules/@babel/runtime/helpers/defineProperty.js"));
|
|
|
|
|
|
var _objectWithoutProperties2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ "./node_modules/@babel/runtime/helpers/objectWithoutProperties.js"));
|
|
|
|
|
|
var React = _interopRequireWildcard(__webpack_require__(/*! react */ "./node_modules/react/index.js"));
|
|
|
|
|
|
var _classnames = _interopRequireDefault(__webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"));
|
|
|
|
|
|
var _Context = _interopRequireDefault(__webpack_require__(/*! ./Context */ "./node_modules/@ant-design/icons/lib/components/Context.js"));
|
|
|
|
|
|
var _IconBase = _interopRequireDefault(__webpack_require__(/*! ./IconBase */ "./node_modules/@ant-design/icons/lib/components/IconBase.js"));
|
|
|
|
|
|
var _twoTonePrimaryColor = __webpack_require__(/*! ./twoTonePrimaryColor */ "./node_modules/@ant-design/icons/lib/components/twoTonePrimaryColor.js");
|
|
|
|
|
|
var _utils = __webpack_require__(/*! ../utils */ "./node_modules/@ant-design/icons/lib/utils.js");
|
|
|
|
|
|
var _excluded = ["className", "icon", "spin", "rotate", "tabIndex", "onClick", "twoToneColor"];
|
|
|
// Initial setting
|
|
|
// should move it to antd main repo?
|
|
|
(0, _twoTonePrimaryColor.setTwoToneColor)('#1890ff');
|
|
|
var Icon = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
var _classNames;
|
|
|
|
|
|
var className = props.className,
|
|
|
icon = props.icon,
|
|
|
spin = props.spin,
|
|
|
rotate = props.rotate,
|
|
|
tabIndex = props.tabIndex,
|
|
|
onClick = props.onClick,
|
|
|
twoToneColor = props.twoToneColor,
|
|
|
restProps = (0, _objectWithoutProperties2.default)(props, _excluded);
|
|
|
|
|
|
var _React$useContext = React.useContext(_Context.default),
|
|
|
_React$useContext$pre = _React$useContext.prefixCls,
|
|
|
prefixCls = _React$useContext$pre === void 0 ? 'anticon' : _React$useContext$pre;
|
|
|
|
|
|
var classString = (0, _classnames.default)(prefixCls, (_classNames = {}, (0, _defineProperty2.default)(_classNames, "".concat(prefixCls, "-").concat(icon.name), !!icon.name), (0, _defineProperty2.default)(_classNames, "".concat(prefixCls, "-spin"), !!spin || icon.name === 'loading'), _classNames), className);
|
|
|
var iconTabIndex = tabIndex;
|
|
|
|
|
|
if (iconTabIndex === undefined && onClick) {
|
|
|
iconTabIndex = -1;
|
|
|
}
|
|
|
|
|
|
var svgStyle = rotate ? {
|
|
|
msTransform: "rotate(".concat(rotate, "deg)"),
|
|
|
transform: "rotate(".concat(rotate, "deg)")
|
|
|
} : undefined;
|
|
|
|
|
|
var _normalizeTwoToneColo = (0, _utils.normalizeTwoToneColors)(twoToneColor),
|
|
|
_normalizeTwoToneColo2 = (0, _slicedToArray2.default)(_normalizeTwoToneColo, 2),
|
|
|
primaryColor = _normalizeTwoToneColo2[0],
|
|
|
secondaryColor = _normalizeTwoToneColo2[1];
|
|
|
|
|
|
return /*#__PURE__*/React.createElement("span", (0, _objectSpread2.default)((0, _objectSpread2.default)({
|
|
|
role: "img",
|
|
|
"aria-label": icon.name
|
|
|
}, restProps), {}, {
|
|
|
ref: ref,
|
|
|
tabIndex: iconTabIndex,
|
|
|
onClick: onClick,
|
|
|
className: classString
|
|
|
}), /*#__PURE__*/React.createElement(_IconBase.default, {
|
|
|
icon: icon,
|
|
|
primaryColor: primaryColor,
|
|
|
secondaryColor: secondaryColor,
|
|
|
style: svgStyle
|
|
|
}));
|
|
|
});
|
|
|
Icon.displayName = 'AntdIcon';
|
|
|
Icon.getTwoToneColor = _twoTonePrimaryColor.getTwoToneColor;
|
|
|
Icon.setTwoToneColor = _twoTonePrimaryColor.setTwoToneColor;
|
|
|
var _default = Icon;
|
|
|
exports["default"] = _default;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@ant-design/icons/lib/components/Context.js":
|
|
|
/*!******************************************************************!*\
|
|
|
!*** ./node_modules/@ant-design/icons/lib/components/Context.js ***!
|
|
|
\******************************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports["default"] = void 0;
|
|
|
|
|
|
var _react = __webpack_require__(/*! react */ "./node_modules/react/index.js");
|
|
|
|
|
|
var IconContext = /*#__PURE__*/(0, _react.createContext)({});
|
|
|
var _default = IconContext;
|
|
|
exports["default"] = _default;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@ant-design/icons/lib/components/IconBase.js":
|
|
|
/*!*******************************************************************!*\
|
|
|
!*** ./node_modules/@ant-design/icons/lib/components/IconBase.js ***!
|
|
|
\*******************************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js");
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports["default"] = void 0;
|
|
|
|
|
|
var _objectWithoutProperties2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ "./node_modules/@babel/runtime/helpers/objectWithoutProperties.js"));
|
|
|
|
|
|
var _objectSpread2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectSpread2 */ "./node_modules/@babel/runtime/helpers/objectSpread2.js"));
|
|
|
|
|
|
var _utils = __webpack_require__(/*! ../utils */ "./node_modules/@ant-design/icons/lib/utils.js");
|
|
|
|
|
|
var _excluded = ["icon", "className", "onClick", "style", "primaryColor", "secondaryColor"];
|
|
|
var twoToneColorPalette = {
|
|
|
primaryColor: '#333',
|
|
|
secondaryColor: '#E6E6E6',
|
|
|
calculated: false
|
|
|
};
|
|
|
|
|
|
function setTwoToneColors(_ref) {
|
|
|
var primaryColor = _ref.primaryColor,
|
|
|
secondaryColor = _ref.secondaryColor;
|
|
|
twoToneColorPalette.primaryColor = primaryColor;
|
|
|
twoToneColorPalette.secondaryColor = secondaryColor || (0, _utils.getSecondaryColor)(primaryColor);
|
|
|
twoToneColorPalette.calculated = !!secondaryColor;
|
|
|
}
|
|
|
|
|
|
function getTwoToneColors() {
|
|
|
return (0, _objectSpread2.default)({}, twoToneColorPalette);
|
|
|
}
|
|
|
|
|
|
var IconBase = function IconBase(props) {
|
|
|
var icon = props.icon,
|
|
|
className = props.className,
|
|
|
onClick = props.onClick,
|
|
|
style = props.style,
|
|
|
primaryColor = props.primaryColor,
|
|
|
secondaryColor = props.secondaryColor,
|
|
|
restProps = (0, _objectWithoutProperties2.default)(props, _excluded);
|
|
|
var colors = twoToneColorPalette;
|
|
|
|
|
|
if (primaryColor) {
|
|
|
colors = {
|
|
|
primaryColor: primaryColor,
|
|
|
secondaryColor: secondaryColor || (0, _utils.getSecondaryColor)(primaryColor)
|
|
|
};
|
|
|
}
|
|
|
|
|
|
(0, _utils.useInsertStyles)();
|
|
|
(0, _utils.warning)((0, _utils.isIconDefinition)(icon), "icon should be icon definiton, but got ".concat(icon));
|
|
|
|
|
|
if (!(0, _utils.isIconDefinition)(icon)) {
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
var target = icon;
|
|
|
|
|
|
if (target && typeof target.icon === 'function') {
|
|
|
target = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, target), {}, {
|
|
|
icon: target.icon(colors.primaryColor, colors.secondaryColor)
|
|
|
});
|
|
|
}
|
|
|
|
|
|
return (0, _utils.generate)(target.icon, "svg-".concat(target.name), (0, _objectSpread2.default)({
|
|
|
className: className,
|
|
|
onClick: onClick,
|
|
|
style: style,
|
|
|
'data-icon': target.name,
|
|
|
width: '1em',
|
|
|
height: '1em',
|
|
|
fill: 'currentColor',
|
|
|
'aria-hidden': 'true'
|
|
|
}, restProps));
|
|
|
};
|
|
|
|
|
|
IconBase.displayName = 'IconReact';
|
|
|
IconBase.getTwoToneColors = getTwoToneColors;
|
|
|
IconBase.setTwoToneColors = setTwoToneColors;
|
|
|
var _default = IconBase;
|
|
|
exports["default"] = _default;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@ant-design/icons/lib/components/twoTonePrimaryColor.js":
|
|
|
/*!******************************************************************************!*\
|
|
|
!*** ./node_modules/@ant-design/icons/lib/components/twoTonePrimaryColor.js ***!
|
|
|
\******************************************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js");
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports.setTwoToneColor = setTwoToneColor;
|
|
|
exports.getTwoToneColor = getTwoToneColor;
|
|
|
|
|
|
var _slicedToArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ "./node_modules/@babel/runtime/helpers/slicedToArray.js"));
|
|
|
|
|
|
var _IconBase = _interopRequireDefault(__webpack_require__(/*! ./IconBase */ "./node_modules/@ant-design/icons/lib/components/IconBase.js"));
|
|
|
|
|
|
var _utils = __webpack_require__(/*! ../utils */ "./node_modules/@ant-design/icons/lib/utils.js");
|
|
|
|
|
|
function setTwoToneColor(twoToneColor) {
|
|
|
var _normalizeTwoToneColo = (0, _utils.normalizeTwoToneColors)(twoToneColor),
|
|
|
_normalizeTwoToneColo2 = (0, _slicedToArray2.default)(_normalizeTwoToneColo, 2),
|
|
|
primaryColor = _normalizeTwoToneColo2[0],
|
|
|
secondaryColor = _normalizeTwoToneColo2[1];
|
|
|
|
|
|
return _IconBase.default.setTwoToneColors({
|
|
|
primaryColor: primaryColor,
|
|
|
secondaryColor: secondaryColor
|
|
|
});
|
|
|
}
|
|
|
|
|
|
function getTwoToneColor() {
|
|
|
var colors = _IconBase.default.getTwoToneColors();
|
|
|
|
|
|
if (!colors.calculated) {
|
|
|
return colors.primaryColor;
|
|
|
}
|
|
|
|
|
|
return [colors.primaryColor, colors.secondaryColor];
|
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@ant-design/icons/lib/icons/CheckCircleFilled.js":
|
|
|
/*!***********************************************************************!*\
|
|
|
!*** ./node_modules/@ant-design/icons/lib/icons/CheckCircleFilled.js ***!
|
|
|
\***********************************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
var _interopRequireWildcard = __webpack_require__(/*! @babel/runtime/helpers/interopRequireWildcard */ "./node_modules/@babel/runtime/helpers/interopRequireWildcard.js");
|
|
|
|
|
|
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js");
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports["default"] = void 0;
|
|
|
|
|
|
var _objectSpread2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectSpread2 */ "./node_modules/@babel/runtime/helpers/objectSpread2.js"));
|
|
|
|
|
|
var React = _interopRequireWildcard(__webpack_require__(/*! react */ "./node_modules/react/index.js"));
|
|
|
|
|
|
var _CheckCircleFilled = _interopRequireDefault(__webpack_require__(/*! @ant-design/icons-svg/lib/asn/CheckCircleFilled */ "./node_modules/@ant-design/icons-svg/lib/asn/CheckCircleFilled.js"));
|
|
|
|
|
|
var _AntdIcon = _interopRequireDefault(__webpack_require__(/*! ../components/AntdIcon */ "./node_modules/@ant-design/icons/lib/components/AntdIcon.js"));
|
|
|
|
|
|
// GENERATE BY ./scripts/generate.ts
|
|
|
// DON NOT EDIT IT MANUALLY
|
|
|
var CheckCircleFilled = function CheckCircleFilled(props, ref) {
|
|
|
return /*#__PURE__*/React.createElement(_AntdIcon.default, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, props), {}, {
|
|
|
ref: ref,
|
|
|
icon: _CheckCircleFilled.default
|
|
|
}));
|
|
|
};
|
|
|
|
|
|
CheckCircleFilled.displayName = 'CheckCircleFilled';
|
|
|
|
|
|
var _default = /*#__PURE__*/React.forwardRef(CheckCircleFilled);
|
|
|
|
|
|
exports["default"] = _default;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@ant-design/icons/lib/icons/CheckCircleOutlined.js":
|
|
|
/*!*************************************************************************!*\
|
|
|
!*** ./node_modules/@ant-design/icons/lib/icons/CheckCircleOutlined.js ***!
|
|
|
\*************************************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
var _interopRequireWildcard = __webpack_require__(/*! @babel/runtime/helpers/interopRequireWildcard */ "./node_modules/@babel/runtime/helpers/interopRequireWildcard.js");
|
|
|
|
|
|
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js");
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports["default"] = void 0;
|
|
|
|
|
|
var _objectSpread2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectSpread2 */ "./node_modules/@babel/runtime/helpers/objectSpread2.js"));
|
|
|
|
|
|
var React = _interopRequireWildcard(__webpack_require__(/*! react */ "./node_modules/react/index.js"));
|
|
|
|
|
|
var _CheckCircleOutlined = _interopRequireDefault(__webpack_require__(/*! @ant-design/icons-svg/lib/asn/CheckCircleOutlined */ "./node_modules/@ant-design/icons-svg/lib/asn/CheckCircleOutlined.js"));
|
|
|
|
|
|
var _AntdIcon = _interopRequireDefault(__webpack_require__(/*! ../components/AntdIcon */ "./node_modules/@ant-design/icons/lib/components/AntdIcon.js"));
|
|
|
|
|
|
// GENERATE BY ./scripts/generate.ts
|
|
|
// DON NOT EDIT IT MANUALLY
|
|
|
var CheckCircleOutlined = function CheckCircleOutlined(props, ref) {
|
|
|
return /*#__PURE__*/React.createElement(_AntdIcon.default, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, props), {}, {
|
|
|
ref: ref,
|
|
|
icon: _CheckCircleOutlined.default
|
|
|
}));
|
|
|
};
|
|
|
|
|
|
CheckCircleOutlined.displayName = 'CheckCircleOutlined';
|
|
|
|
|
|
var _default = /*#__PURE__*/React.forwardRef(CheckCircleOutlined);
|
|
|
|
|
|
exports["default"] = _default;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@ant-design/icons/lib/icons/CloseCircleFilled.js":
|
|
|
/*!***********************************************************************!*\
|
|
|
!*** ./node_modules/@ant-design/icons/lib/icons/CloseCircleFilled.js ***!
|
|
|
\***********************************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
var _interopRequireWildcard = __webpack_require__(/*! @babel/runtime/helpers/interopRequireWildcard */ "./node_modules/@babel/runtime/helpers/interopRequireWildcard.js");
|
|
|
|
|
|
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js");
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports["default"] = void 0;
|
|
|
|
|
|
var _objectSpread2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectSpread2 */ "./node_modules/@babel/runtime/helpers/objectSpread2.js"));
|
|
|
|
|
|
var React = _interopRequireWildcard(__webpack_require__(/*! react */ "./node_modules/react/index.js"));
|
|
|
|
|
|
var _CloseCircleFilled = _interopRequireDefault(__webpack_require__(/*! @ant-design/icons-svg/lib/asn/CloseCircleFilled */ "./node_modules/@ant-design/icons-svg/lib/asn/CloseCircleFilled.js"));
|
|
|
|
|
|
var _AntdIcon = _interopRequireDefault(__webpack_require__(/*! ../components/AntdIcon */ "./node_modules/@ant-design/icons/lib/components/AntdIcon.js"));
|
|
|
|
|
|
// GENERATE BY ./scripts/generate.ts
|
|
|
// DON NOT EDIT IT MANUALLY
|
|
|
var CloseCircleFilled = function CloseCircleFilled(props, ref) {
|
|
|
return /*#__PURE__*/React.createElement(_AntdIcon.default, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, props), {}, {
|
|
|
ref: ref,
|
|
|
icon: _CloseCircleFilled.default
|
|
|
}));
|
|
|
};
|
|
|
|
|
|
CloseCircleFilled.displayName = 'CloseCircleFilled';
|
|
|
|
|
|
var _default = /*#__PURE__*/React.forwardRef(CloseCircleFilled);
|
|
|
|
|
|
exports["default"] = _default;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@ant-design/icons/lib/icons/CloseCircleOutlined.js":
|
|
|
/*!*************************************************************************!*\
|
|
|
!*** ./node_modules/@ant-design/icons/lib/icons/CloseCircleOutlined.js ***!
|
|
|
\*************************************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
var _interopRequireWildcard = __webpack_require__(/*! @babel/runtime/helpers/interopRequireWildcard */ "./node_modules/@babel/runtime/helpers/interopRequireWildcard.js");
|
|
|
|
|
|
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js");
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports["default"] = void 0;
|
|
|
|
|
|
var _objectSpread2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectSpread2 */ "./node_modules/@babel/runtime/helpers/objectSpread2.js"));
|
|
|
|
|
|
var React = _interopRequireWildcard(__webpack_require__(/*! react */ "./node_modules/react/index.js"));
|
|
|
|
|
|
var _CloseCircleOutlined = _interopRequireDefault(__webpack_require__(/*! @ant-design/icons-svg/lib/asn/CloseCircleOutlined */ "./node_modules/@ant-design/icons-svg/lib/asn/CloseCircleOutlined.js"));
|
|
|
|
|
|
var _AntdIcon = _interopRequireDefault(__webpack_require__(/*! ../components/AntdIcon */ "./node_modules/@ant-design/icons/lib/components/AntdIcon.js"));
|
|
|
|
|
|
// GENERATE BY ./scripts/generate.ts
|
|
|
// DON NOT EDIT IT MANUALLY
|
|
|
var CloseCircleOutlined = function CloseCircleOutlined(props, ref) {
|
|
|
return /*#__PURE__*/React.createElement(_AntdIcon.default, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, props), {}, {
|
|
|
ref: ref,
|
|
|
icon: _CloseCircleOutlined.default
|
|
|
}));
|
|
|
};
|
|
|
|
|
|
CloseCircleOutlined.displayName = 'CloseCircleOutlined';
|
|
|
|
|
|
var _default = /*#__PURE__*/React.forwardRef(CloseCircleOutlined);
|
|
|
|
|
|
exports["default"] = _default;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@ant-design/icons/lib/icons/CloseOutlined.js":
|
|
|
/*!*******************************************************************!*\
|
|
|
!*** ./node_modules/@ant-design/icons/lib/icons/CloseOutlined.js ***!
|
|
|
\*******************************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
var _interopRequireWildcard = __webpack_require__(/*! @babel/runtime/helpers/interopRequireWildcard */ "./node_modules/@babel/runtime/helpers/interopRequireWildcard.js");
|
|
|
|
|
|
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js");
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports["default"] = void 0;
|
|
|
|
|
|
var _objectSpread2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectSpread2 */ "./node_modules/@babel/runtime/helpers/objectSpread2.js"));
|
|
|
|
|
|
var React = _interopRequireWildcard(__webpack_require__(/*! react */ "./node_modules/react/index.js"));
|
|
|
|
|
|
var _CloseOutlined = _interopRequireDefault(__webpack_require__(/*! @ant-design/icons-svg/lib/asn/CloseOutlined */ "./node_modules/@ant-design/icons-svg/lib/asn/CloseOutlined.js"));
|
|
|
|
|
|
var _AntdIcon = _interopRequireDefault(__webpack_require__(/*! ../components/AntdIcon */ "./node_modules/@ant-design/icons/lib/components/AntdIcon.js"));
|
|
|
|
|
|
// GENERATE BY ./scripts/generate.ts
|
|
|
// DON NOT EDIT IT MANUALLY
|
|
|
var CloseOutlined = function CloseOutlined(props, ref) {
|
|
|
return /*#__PURE__*/React.createElement(_AntdIcon.default, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, props), {}, {
|
|
|
ref: ref,
|
|
|
icon: _CloseOutlined.default
|
|
|
}));
|
|
|
};
|
|
|
|
|
|
CloseOutlined.displayName = 'CloseOutlined';
|
|
|
|
|
|
var _default = /*#__PURE__*/React.forwardRef(CloseOutlined);
|
|
|
|
|
|
exports["default"] = _default;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@ant-design/icons/lib/icons/ExclamationCircleFilled.js":
|
|
|
/*!*****************************************************************************!*\
|
|
|
!*** ./node_modules/@ant-design/icons/lib/icons/ExclamationCircleFilled.js ***!
|
|
|
\*****************************************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
var _interopRequireWildcard = __webpack_require__(/*! @babel/runtime/helpers/interopRequireWildcard */ "./node_modules/@babel/runtime/helpers/interopRequireWildcard.js");
|
|
|
|
|
|
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js");
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports["default"] = void 0;
|
|
|
|
|
|
var _objectSpread2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectSpread2 */ "./node_modules/@babel/runtime/helpers/objectSpread2.js"));
|
|
|
|
|
|
var React = _interopRequireWildcard(__webpack_require__(/*! react */ "./node_modules/react/index.js"));
|
|
|
|
|
|
var _ExclamationCircleFilled = _interopRequireDefault(__webpack_require__(/*! @ant-design/icons-svg/lib/asn/ExclamationCircleFilled */ "./node_modules/@ant-design/icons-svg/lib/asn/ExclamationCircleFilled.js"));
|
|
|
|
|
|
var _AntdIcon = _interopRequireDefault(__webpack_require__(/*! ../components/AntdIcon */ "./node_modules/@ant-design/icons/lib/components/AntdIcon.js"));
|
|
|
|
|
|
// GENERATE BY ./scripts/generate.ts
|
|
|
// DON NOT EDIT IT MANUALLY
|
|
|
var ExclamationCircleFilled = function ExclamationCircleFilled(props, ref) {
|
|
|
return /*#__PURE__*/React.createElement(_AntdIcon.default, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, props), {}, {
|
|
|
ref: ref,
|
|
|
icon: _ExclamationCircleFilled.default
|
|
|
}));
|
|
|
};
|
|
|
|
|
|
ExclamationCircleFilled.displayName = 'ExclamationCircleFilled';
|
|
|
|
|
|
var _default = /*#__PURE__*/React.forwardRef(ExclamationCircleFilled);
|
|
|
|
|
|
exports["default"] = _default;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@ant-design/icons/lib/icons/ExclamationCircleOutlined.js":
|
|
|
/*!*******************************************************************************!*\
|
|
|
!*** ./node_modules/@ant-design/icons/lib/icons/ExclamationCircleOutlined.js ***!
|
|
|
\*******************************************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
var _interopRequireWildcard = __webpack_require__(/*! @babel/runtime/helpers/interopRequireWildcard */ "./node_modules/@babel/runtime/helpers/interopRequireWildcard.js");
|
|
|
|
|
|
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js");
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports["default"] = void 0;
|
|
|
|
|
|
var _objectSpread2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectSpread2 */ "./node_modules/@babel/runtime/helpers/objectSpread2.js"));
|
|
|
|
|
|
var React = _interopRequireWildcard(__webpack_require__(/*! react */ "./node_modules/react/index.js"));
|
|
|
|
|
|
var _ExclamationCircleOutlined = _interopRequireDefault(__webpack_require__(/*! @ant-design/icons-svg/lib/asn/ExclamationCircleOutlined */ "./node_modules/@ant-design/icons-svg/lib/asn/ExclamationCircleOutlined.js"));
|
|
|
|
|
|
var _AntdIcon = _interopRequireDefault(__webpack_require__(/*! ../components/AntdIcon */ "./node_modules/@ant-design/icons/lib/components/AntdIcon.js"));
|
|
|
|
|
|
// GENERATE BY ./scripts/generate.ts
|
|
|
// DON NOT EDIT IT MANUALLY
|
|
|
var ExclamationCircleOutlined = function ExclamationCircleOutlined(props, ref) {
|
|
|
return /*#__PURE__*/React.createElement(_AntdIcon.default, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, props), {}, {
|
|
|
ref: ref,
|
|
|
icon: _ExclamationCircleOutlined.default
|
|
|
}));
|
|
|
};
|
|
|
|
|
|
ExclamationCircleOutlined.displayName = 'ExclamationCircleOutlined';
|
|
|
|
|
|
var _default = /*#__PURE__*/React.forwardRef(ExclamationCircleOutlined);
|
|
|
|
|
|
exports["default"] = _default;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@ant-design/icons/lib/icons/InfoCircleFilled.js":
|
|
|
/*!**********************************************************************!*\
|
|
|
!*** ./node_modules/@ant-design/icons/lib/icons/InfoCircleFilled.js ***!
|
|
|
\**********************************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
var _interopRequireWildcard = __webpack_require__(/*! @babel/runtime/helpers/interopRequireWildcard */ "./node_modules/@babel/runtime/helpers/interopRequireWildcard.js");
|
|
|
|
|
|
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js");
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports["default"] = void 0;
|
|
|
|
|
|
var _objectSpread2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectSpread2 */ "./node_modules/@babel/runtime/helpers/objectSpread2.js"));
|
|
|
|
|
|
var React = _interopRequireWildcard(__webpack_require__(/*! react */ "./node_modules/react/index.js"));
|
|
|
|
|
|
var _InfoCircleFilled = _interopRequireDefault(__webpack_require__(/*! @ant-design/icons-svg/lib/asn/InfoCircleFilled */ "./node_modules/@ant-design/icons-svg/lib/asn/InfoCircleFilled.js"));
|
|
|
|
|
|
var _AntdIcon = _interopRequireDefault(__webpack_require__(/*! ../components/AntdIcon */ "./node_modules/@ant-design/icons/lib/components/AntdIcon.js"));
|
|
|
|
|
|
// GENERATE BY ./scripts/generate.ts
|
|
|
// DON NOT EDIT IT MANUALLY
|
|
|
var InfoCircleFilled = function InfoCircleFilled(props, ref) {
|
|
|
return /*#__PURE__*/React.createElement(_AntdIcon.default, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, props), {}, {
|
|
|
ref: ref,
|
|
|
icon: _InfoCircleFilled.default
|
|
|
}));
|
|
|
};
|
|
|
|
|
|
InfoCircleFilled.displayName = 'InfoCircleFilled';
|
|
|
|
|
|
var _default = /*#__PURE__*/React.forwardRef(InfoCircleFilled);
|
|
|
|
|
|
exports["default"] = _default;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@ant-design/icons/lib/icons/InfoCircleOutlined.js":
|
|
|
/*!************************************************************************!*\
|
|
|
!*** ./node_modules/@ant-design/icons/lib/icons/InfoCircleOutlined.js ***!
|
|
|
\************************************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
var _interopRequireWildcard = __webpack_require__(/*! @babel/runtime/helpers/interopRequireWildcard */ "./node_modules/@babel/runtime/helpers/interopRequireWildcard.js");
|
|
|
|
|
|
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js");
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports["default"] = void 0;
|
|
|
|
|
|
var _objectSpread2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectSpread2 */ "./node_modules/@babel/runtime/helpers/objectSpread2.js"));
|
|
|
|
|
|
var React = _interopRequireWildcard(__webpack_require__(/*! react */ "./node_modules/react/index.js"));
|
|
|
|
|
|
var _InfoCircleOutlined = _interopRequireDefault(__webpack_require__(/*! @ant-design/icons-svg/lib/asn/InfoCircleOutlined */ "./node_modules/@ant-design/icons-svg/lib/asn/InfoCircleOutlined.js"));
|
|
|
|
|
|
var _AntdIcon = _interopRequireDefault(__webpack_require__(/*! ../components/AntdIcon */ "./node_modules/@ant-design/icons/lib/components/AntdIcon.js"));
|
|
|
|
|
|
// GENERATE BY ./scripts/generate.ts
|
|
|
// DON NOT EDIT IT MANUALLY
|
|
|
var InfoCircleOutlined = function InfoCircleOutlined(props, ref) {
|
|
|
return /*#__PURE__*/React.createElement(_AntdIcon.default, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, props), {}, {
|
|
|
ref: ref,
|
|
|
icon: _InfoCircleOutlined.default
|
|
|
}));
|
|
|
};
|
|
|
|
|
|
InfoCircleOutlined.displayName = 'InfoCircleOutlined';
|
|
|
|
|
|
var _default = /*#__PURE__*/React.forwardRef(InfoCircleOutlined);
|
|
|
|
|
|
exports["default"] = _default;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@ant-design/icons/lib/icons/LoadingOutlined.js":
|
|
|
/*!*********************************************************************!*\
|
|
|
!*** ./node_modules/@ant-design/icons/lib/icons/LoadingOutlined.js ***!
|
|
|
\*********************************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
var _interopRequireWildcard = __webpack_require__(/*! @babel/runtime/helpers/interopRequireWildcard */ "./node_modules/@babel/runtime/helpers/interopRequireWildcard.js");
|
|
|
|
|
|
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js");
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports["default"] = void 0;
|
|
|
|
|
|
var _objectSpread2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectSpread2 */ "./node_modules/@babel/runtime/helpers/objectSpread2.js"));
|
|
|
|
|
|
var React = _interopRequireWildcard(__webpack_require__(/*! react */ "./node_modules/react/index.js"));
|
|
|
|
|
|
var _LoadingOutlined = _interopRequireDefault(__webpack_require__(/*! @ant-design/icons-svg/lib/asn/LoadingOutlined */ "./node_modules/@ant-design/icons-svg/lib/asn/LoadingOutlined.js"));
|
|
|
|
|
|
var _AntdIcon = _interopRequireDefault(__webpack_require__(/*! ../components/AntdIcon */ "./node_modules/@ant-design/icons/lib/components/AntdIcon.js"));
|
|
|
|
|
|
// GENERATE BY ./scripts/generate.ts
|
|
|
// DON NOT EDIT IT MANUALLY
|
|
|
var LoadingOutlined = function LoadingOutlined(props, ref) {
|
|
|
return /*#__PURE__*/React.createElement(_AntdIcon.default, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, props), {}, {
|
|
|
ref: ref,
|
|
|
icon: _LoadingOutlined.default
|
|
|
}));
|
|
|
};
|
|
|
|
|
|
LoadingOutlined.displayName = 'LoadingOutlined';
|
|
|
|
|
|
var _default = /*#__PURE__*/React.forwardRef(LoadingOutlined);
|
|
|
|
|
|
exports["default"] = _default;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@ant-design/icons/lib/utils.js":
|
|
|
/*!*****************************************************!*\
|
|
|
!*** ./node_modules/@ant-design/icons/lib/utils.js ***!
|
|
|
\*****************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
var _interopRequireWildcard = __webpack_require__(/*! @babel/runtime/helpers/interopRequireWildcard */ "./node_modules/@babel/runtime/helpers/interopRequireWildcard.js");
|
|
|
|
|
|
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js");
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports.warning = warning;
|
|
|
exports.isIconDefinition = isIconDefinition;
|
|
|
exports.normalizeAttrs = normalizeAttrs;
|
|
|
exports.generate = generate;
|
|
|
exports.getSecondaryColor = getSecondaryColor;
|
|
|
exports.normalizeTwoToneColors = normalizeTwoToneColors;
|
|
|
exports.useInsertStyles = exports.iconStyles = exports.svgBaseProps = void 0;
|
|
|
|
|
|
var _objectSpread2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectSpread2 */ "./node_modules/@babel/runtime/helpers/objectSpread2.js"));
|
|
|
|
|
|
var _typeof2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js"));
|
|
|
|
|
|
var _colors = __webpack_require__(/*! @ant-design/colors */ "./node_modules/@ant-design/colors/dist/index.esm.js");
|
|
|
|
|
|
var _react = _interopRequireWildcard(__webpack_require__(/*! react */ "./node_modules/react/index.js"));
|
|
|
|
|
|
var _warning = _interopRequireDefault(__webpack_require__(/*! rc-util/lib/warning */ "./node_modules/rc-util/lib/warning.js"));
|
|
|
|
|
|
var _dynamicCSS = __webpack_require__(/*! rc-util/lib/Dom/dynamicCSS */ "./node_modules/rc-util/lib/Dom/dynamicCSS.js");
|
|
|
|
|
|
var _Context = _interopRequireDefault(__webpack_require__(/*! ./components/Context */ "./node_modules/@ant-design/icons/lib/components/Context.js"));
|
|
|
|
|
|
function warning(valid, message) {
|
|
|
(0, _warning.default)(valid, "[@ant-design/icons] ".concat(message));
|
|
|
}
|
|
|
|
|
|
function isIconDefinition(target) {
|
|
|
return (0, _typeof2.default)(target) === 'object' && typeof target.name === 'string' && typeof target.theme === 'string' && ((0, _typeof2.default)(target.icon) === 'object' || typeof target.icon === 'function');
|
|
|
}
|
|
|
|
|
|
function normalizeAttrs() {
|
|
|
var attrs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
|
return Object.keys(attrs).reduce(function (acc, key) {
|
|
|
var val = attrs[key];
|
|
|
|
|
|
switch (key) {
|
|
|
case 'class':
|
|
|
acc.className = val;
|
|
|
delete acc.class;
|
|
|
break;
|
|
|
|
|
|
default:
|
|
|
acc[key] = val;
|
|
|
}
|
|
|
|
|
|
return acc;
|
|
|
}, {});
|
|
|
}
|
|
|
|
|
|
function generate(node, key, rootProps) {
|
|
|
if (!rootProps) {
|
|
|
return /*#__PURE__*/_react.default.createElement(node.tag, (0, _objectSpread2.default)({
|
|
|
key: key
|
|
|
}, normalizeAttrs(node.attrs)), (node.children || []).map(function (child, index) {
|
|
|
return generate(child, "".concat(key, "-").concat(node.tag, "-").concat(index));
|
|
|
}));
|
|
|
}
|
|
|
|
|
|
return /*#__PURE__*/_react.default.createElement(node.tag, (0, _objectSpread2.default)((0, _objectSpread2.default)({
|
|
|
key: key
|
|
|
}, normalizeAttrs(node.attrs)), rootProps), (node.children || []).map(function (child, index) {
|
|
|
return generate(child, "".concat(key, "-").concat(node.tag, "-").concat(index));
|
|
|
}));
|
|
|
}
|
|
|
|
|
|
function getSecondaryColor(primaryColor) {
|
|
|
// choose the second color
|
|
|
return (0, _colors.generate)(primaryColor)[0];
|
|
|
}
|
|
|
|
|
|
function normalizeTwoToneColors(twoToneColor) {
|
|
|
if (!twoToneColor) {
|
|
|
return [];
|
|
|
}
|
|
|
|
|
|
return Array.isArray(twoToneColor) ? twoToneColor : [twoToneColor];
|
|
|
} // These props make sure that the SVG behaviours like general text.
|
|
|
// Reference: https://blog.prototypr.io/align-svg-icons-to-text-and-say-goodbye-to-font-icons-d44b3d7b26b4
|
|
|
|
|
|
|
|
|
var svgBaseProps = {
|
|
|
width: '1em',
|
|
|
height: '1em',
|
|
|
fill: 'currentColor',
|
|
|
'aria-hidden': 'true',
|
|
|
focusable: 'false'
|
|
|
};
|
|
|
exports.svgBaseProps = svgBaseProps;
|
|
|
var iconStyles = "\n.anticon {\n display: inline-block;\n color: inherit;\n font-style: normal;\n line-height: 0;\n text-align: center;\n text-transform: none;\n vertical-align: -0.125em;\n text-rendering: optimizeLegibility;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n.anticon > * {\n line-height: 1;\n}\n\n.anticon svg {\n display: inline-block;\n}\n\n.anticon::before {\n display: none;\n}\n\n.anticon .anticon-icon {\n display: block;\n}\n\n.anticon[tabindex] {\n cursor: pointer;\n}\n\n.anticon-spin::before,\n.anticon-spin {\n display: inline-block;\n -webkit-animation: loadingCircle 1s infinite linear;\n animation: loadingCircle 1s infinite linear;\n}\n\n@-webkit-keyframes loadingCircle {\n 100% {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n\n@keyframes loadingCircle {\n 100% {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n";
|
|
|
exports.iconStyles = iconStyles;
|
|
|
|
|
|
var useInsertStyles = function useInsertStyles() {
|
|
|
var styleStr = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : iconStyles;
|
|
|
|
|
|
var _useContext = (0, _react.useContext)(_Context.default),
|
|
|
csp = _useContext.csp;
|
|
|
|
|
|
(0, _react.useEffect)(function () {
|
|
|
(0, _dynamicCSS.updateCSS)(styleStr, '@ant-design-icons', {
|
|
|
prepend: true,
|
|
|
csp: csp
|
|
|
});
|
|
|
}, []);
|
|
|
};
|
|
|
|
|
|
exports.useInsertStyles = useInsertStyles;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@ctrl/tinycolor/dist/module/conversion.js":
|
|
|
/*!****************************************************************!*\
|
|
|
!*** ./node_modules/@ctrl/tinycolor/dist/module/conversion.js ***!
|
|
|
\****************************************************************/
|
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "convertDecimalToHex": () => (/* binding */ convertDecimalToHex),
|
|
|
/* harmony export */ "convertHexToDecimal": () => (/* binding */ convertHexToDecimal),
|
|
|
/* harmony export */ "hslToRgb": () => (/* binding */ hslToRgb),
|
|
|
/* harmony export */ "hsvToRgb": () => (/* binding */ hsvToRgb),
|
|
|
/* harmony export */ "numberInputToObject": () => (/* binding */ numberInputToObject),
|
|
|
/* harmony export */ "parseIntFromHex": () => (/* binding */ parseIntFromHex),
|
|
|
/* harmony export */ "rgbToHex": () => (/* binding */ rgbToHex),
|
|
|
/* harmony export */ "rgbToHsl": () => (/* binding */ rgbToHsl),
|
|
|
/* harmony export */ "rgbToHsv": () => (/* binding */ rgbToHsv),
|
|
|
/* harmony export */ "rgbToRgb": () => (/* binding */ rgbToRgb),
|
|
|
/* harmony export */ "rgbaToArgbHex": () => (/* binding */ rgbaToArgbHex),
|
|
|
/* harmony export */ "rgbaToHex": () => (/* binding */ rgbaToHex)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ "./node_modules/@ctrl/tinycolor/dist/module/util.js");
|
|
|
|
|
|
// `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from:
|
|
|
// <http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript>
|
|
|
/**
|
|
|
* Handle bounds / percentage checking to conform to CSS color spec
|
|
|
* <http://www.w3.org/TR/css3-color/>
|
|
|
* *Assumes:* r, g, b in [0, 255] or [0, 1]
|
|
|
* *Returns:* { r, g, b } in [0, 255]
|
|
|
*/
|
|
|
function rgbToRgb(r, g, b) {
|
|
|
return {
|
|
|
r: (0,_util__WEBPACK_IMPORTED_MODULE_0__.bound01)(r, 255) * 255,
|
|
|
g: (0,_util__WEBPACK_IMPORTED_MODULE_0__.bound01)(g, 255) * 255,
|
|
|
b: (0,_util__WEBPACK_IMPORTED_MODULE_0__.bound01)(b, 255) * 255,
|
|
|
};
|
|
|
}
|
|
|
/**
|
|
|
* Converts an RGB color value to HSL.
|
|
|
* *Assumes:* r, g, and b are contained in [0, 255] or [0, 1]
|
|
|
* *Returns:* { h, s, l } in [0,1]
|
|
|
*/
|
|
|
function rgbToHsl(r, g, b) {
|
|
|
r = (0,_util__WEBPACK_IMPORTED_MODULE_0__.bound01)(r, 255);
|
|
|
g = (0,_util__WEBPACK_IMPORTED_MODULE_0__.bound01)(g, 255);
|
|
|
b = (0,_util__WEBPACK_IMPORTED_MODULE_0__.bound01)(b, 255);
|
|
|
var max = Math.max(r, g, b);
|
|
|
var min = Math.min(r, g, b);
|
|
|
var h = 0;
|
|
|
var s = 0;
|
|
|
var l = (max + min) / 2;
|
|
|
if (max === min) {
|
|
|
s = 0;
|
|
|
h = 0; // achromatic
|
|
|
}
|
|
|
else {
|
|
|
var d = max - min;
|
|
|
s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
|
|
|
switch (max) {
|
|
|
case r:
|
|
|
h = (g - b) / d + (g < b ? 6 : 0);
|
|
|
break;
|
|
|
case g:
|
|
|
h = (b - r) / d + 2;
|
|
|
break;
|
|
|
case b:
|
|
|
h = (r - g) / d + 4;
|
|
|
break;
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
|
h /= 6;
|
|
|
}
|
|
|
return { h: h, s: s, l: l };
|
|
|
}
|
|
|
function hue2rgb(p, q, t) {
|
|
|
if (t < 0) {
|
|
|
t += 1;
|
|
|
}
|
|
|
if (t > 1) {
|
|
|
t -= 1;
|
|
|
}
|
|
|
if (t < 1 / 6) {
|
|
|
return p + (q - p) * (6 * t);
|
|
|
}
|
|
|
if (t < 1 / 2) {
|
|
|
return q;
|
|
|
}
|
|
|
if (t < 2 / 3) {
|
|
|
return p + (q - p) * (2 / 3 - t) * 6;
|
|
|
}
|
|
|
return p;
|
|
|
}
|
|
|
/**
|
|
|
* Converts an HSL color value to RGB.
|
|
|
*
|
|
|
* *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100]
|
|
|
* *Returns:* { r, g, b } in the set [0, 255]
|
|
|
*/
|
|
|
function hslToRgb(h, s, l) {
|
|
|
var r;
|
|
|
var g;
|
|
|
var b;
|
|
|
h = (0,_util__WEBPACK_IMPORTED_MODULE_0__.bound01)(h, 360);
|
|
|
s = (0,_util__WEBPACK_IMPORTED_MODULE_0__.bound01)(s, 100);
|
|
|
l = (0,_util__WEBPACK_IMPORTED_MODULE_0__.bound01)(l, 100);
|
|
|
if (s === 0) {
|
|
|
// achromatic
|
|
|
g = l;
|
|
|
b = l;
|
|
|
r = l;
|
|
|
}
|
|
|
else {
|
|
|
var q = l < 0.5 ? l * (1 + s) : l + s - l * s;
|
|
|
var p = 2 * l - q;
|
|
|
r = hue2rgb(p, q, h + 1 / 3);
|
|
|
g = hue2rgb(p, q, h);
|
|
|
b = hue2rgb(p, q, h - 1 / 3);
|
|
|
}
|
|
|
return { r: r * 255, g: g * 255, b: b * 255 };
|
|
|
}
|
|
|
/**
|
|
|
* Converts an RGB color value to HSV
|
|
|
*
|
|
|
* *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1]
|
|
|
* *Returns:* { h, s, v } in [0,1]
|
|
|
*/
|
|
|
function rgbToHsv(r, g, b) {
|
|
|
r = (0,_util__WEBPACK_IMPORTED_MODULE_0__.bound01)(r, 255);
|
|
|
g = (0,_util__WEBPACK_IMPORTED_MODULE_0__.bound01)(g, 255);
|
|
|
b = (0,_util__WEBPACK_IMPORTED_MODULE_0__.bound01)(b, 255);
|
|
|
var max = Math.max(r, g, b);
|
|
|
var min = Math.min(r, g, b);
|
|
|
var h = 0;
|
|
|
var v = max;
|
|
|
var d = max - min;
|
|
|
var s = max === 0 ? 0 : d / max;
|
|
|
if (max === min) {
|
|
|
h = 0; // achromatic
|
|
|
}
|
|
|
else {
|
|
|
switch (max) {
|
|
|
case r:
|
|
|
h = (g - b) / d + (g < b ? 6 : 0);
|
|
|
break;
|
|
|
case g:
|
|
|
h = (b - r) / d + 2;
|
|
|
break;
|
|
|
case b:
|
|
|
h = (r - g) / d + 4;
|
|
|
break;
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
|
h /= 6;
|
|
|
}
|
|
|
return { h: h, s: s, v: v };
|
|
|
}
|
|
|
/**
|
|
|
* Converts an HSV color value to RGB.
|
|
|
*
|
|
|
* *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100]
|
|
|
* *Returns:* { r, g, b } in the set [0, 255]
|
|
|
*/
|
|
|
function hsvToRgb(h, s, v) {
|
|
|
h = (0,_util__WEBPACK_IMPORTED_MODULE_0__.bound01)(h, 360) * 6;
|
|
|
s = (0,_util__WEBPACK_IMPORTED_MODULE_0__.bound01)(s, 100);
|
|
|
v = (0,_util__WEBPACK_IMPORTED_MODULE_0__.bound01)(v, 100);
|
|
|
var i = Math.floor(h);
|
|
|
var f = h - i;
|
|
|
var p = v * (1 - s);
|
|
|
var q = v * (1 - f * s);
|
|
|
var t = v * (1 - (1 - f) * s);
|
|
|
var mod = i % 6;
|
|
|
var r = [v, q, p, p, t, v][mod];
|
|
|
var g = [t, v, v, q, p, p][mod];
|
|
|
var b = [p, p, t, v, v, q][mod];
|
|
|
return { r: r * 255, g: g * 255, b: b * 255 };
|
|
|
}
|
|
|
/**
|
|
|
* Converts an RGB color to hex
|
|
|
*
|
|
|
* Assumes r, g, and b are contained in the set [0, 255]
|
|
|
* Returns a 3 or 6 character hex
|
|
|
*/
|
|
|
function rgbToHex(r, g, b, allow3Char) {
|
|
|
var hex = [
|
|
|
(0,_util__WEBPACK_IMPORTED_MODULE_0__.pad2)(Math.round(r).toString(16)),
|
|
|
(0,_util__WEBPACK_IMPORTED_MODULE_0__.pad2)(Math.round(g).toString(16)),
|
|
|
(0,_util__WEBPACK_IMPORTED_MODULE_0__.pad2)(Math.round(b).toString(16)),
|
|
|
];
|
|
|
// Return a 3 character hex if possible
|
|
|
if (allow3Char &&
|
|
|
hex[0].startsWith(hex[0].charAt(1)) &&
|
|
|
hex[1].startsWith(hex[1].charAt(1)) &&
|
|
|
hex[2].startsWith(hex[2].charAt(1))) {
|
|
|
return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0);
|
|
|
}
|
|
|
return hex.join('');
|
|
|
}
|
|
|
/**
|
|
|
* Converts an RGBA color plus alpha transparency to hex
|
|
|
*
|
|
|
* Assumes r, g, b are contained in the set [0, 255] and
|
|
|
* a in [0, 1]. Returns a 4 or 8 character rgba hex
|
|
|
*/
|
|
|
// eslint-disable-next-line max-params
|
|
|
function rgbaToHex(r, g, b, a, allow4Char) {
|
|
|
var hex = [
|
|
|
(0,_util__WEBPACK_IMPORTED_MODULE_0__.pad2)(Math.round(r).toString(16)),
|
|
|
(0,_util__WEBPACK_IMPORTED_MODULE_0__.pad2)(Math.round(g).toString(16)),
|
|
|
(0,_util__WEBPACK_IMPORTED_MODULE_0__.pad2)(Math.round(b).toString(16)),
|
|
|
(0,_util__WEBPACK_IMPORTED_MODULE_0__.pad2)(convertDecimalToHex(a)),
|
|
|
];
|
|
|
// Return a 4 character hex if possible
|
|
|
if (allow4Char &&
|
|
|
hex[0].startsWith(hex[0].charAt(1)) &&
|
|
|
hex[1].startsWith(hex[1].charAt(1)) &&
|
|
|
hex[2].startsWith(hex[2].charAt(1)) &&
|
|
|
hex[3].startsWith(hex[3].charAt(1))) {
|
|
|
return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0) + hex[3].charAt(0);
|
|
|
}
|
|
|
return hex.join('');
|
|
|
}
|
|
|
/**
|
|
|
* Converts an RGBA color to an ARGB Hex8 string
|
|
|
* Rarely used, but required for "toFilter()"
|
|
|
*/
|
|
|
function rgbaToArgbHex(r, g, b, a) {
|
|
|
var hex = [
|
|
|
(0,_util__WEBPACK_IMPORTED_MODULE_0__.pad2)(convertDecimalToHex(a)),
|
|
|
(0,_util__WEBPACK_IMPORTED_MODULE_0__.pad2)(Math.round(r).toString(16)),
|
|
|
(0,_util__WEBPACK_IMPORTED_MODULE_0__.pad2)(Math.round(g).toString(16)),
|
|
|
(0,_util__WEBPACK_IMPORTED_MODULE_0__.pad2)(Math.round(b).toString(16)),
|
|
|
];
|
|
|
return hex.join('');
|
|
|
}
|
|
|
/** Converts a decimal to a hex value */
|
|
|
function convertDecimalToHex(d) {
|
|
|
return Math.round(parseFloat(d) * 255).toString(16);
|
|
|
}
|
|
|
/** Converts a hex value to a decimal */
|
|
|
function convertHexToDecimal(h) {
|
|
|
return parseIntFromHex(h) / 255;
|
|
|
}
|
|
|
/** Parse a base-16 hex value into a base-10 integer */
|
|
|
function parseIntFromHex(val) {
|
|
|
return parseInt(val, 16);
|
|
|
}
|
|
|
function numberInputToObject(color) {
|
|
|
return {
|
|
|
r: color >> 16,
|
|
|
g: (color & 0xff00) >> 8,
|
|
|
b: color & 0xff,
|
|
|
};
|
|
|
}
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@ctrl/tinycolor/dist/module/css-color-names.js":
|
|
|
/*!*********************************************************************!*\
|
|
|
!*** ./node_modules/@ctrl/tinycolor/dist/module/css-color-names.js ***!
|
|
|
\*********************************************************************/
|
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "names": () => (/* binding */ names)
|
|
|
/* harmony export */ });
|
|
|
// https://github.com/bahamas10/css-color-names/blob/master/css-color-names.json
|
|
|
/**
|
|
|
* @hidden
|
|
|
*/
|
|
|
var names = {
|
|
|
aliceblue: '#f0f8ff',
|
|
|
antiquewhite: '#faebd7',
|
|
|
aqua: '#00ffff',
|
|
|
aquamarine: '#7fffd4',
|
|
|
azure: '#f0ffff',
|
|
|
beige: '#f5f5dc',
|
|
|
bisque: '#ffe4c4',
|
|
|
black: '#000000',
|
|
|
blanchedalmond: '#ffebcd',
|
|
|
blue: '#0000ff',
|
|
|
blueviolet: '#8a2be2',
|
|
|
brown: '#a52a2a',
|
|
|
burlywood: '#deb887',
|
|
|
cadetblue: '#5f9ea0',
|
|
|
chartreuse: '#7fff00',
|
|
|
chocolate: '#d2691e',
|
|
|
coral: '#ff7f50',
|
|
|
cornflowerblue: '#6495ed',
|
|
|
cornsilk: '#fff8dc',
|
|
|
crimson: '#dc143c',
|
|
|
cyan: '#00ffff',
|
|
|
darkblue: '#00008b',
|
|
|
darkcyan: '#008b8b',
|
|
|
darkgoldenrod: '#b8860b',
|
|
|
darkgray: '#a9a9a9',
|
|
|
darkgreen: '#006400',
|
|
|
darkgrey: '#a9a9a9',
|
|
|
darkkhaki: '#bdb76b',
|
|
|
darkmagenta: '#8b008b',
|
|
|
darkolivegreen: '#556b2f',
|
|
|
darkorange: '#ff8c00',
|
|
|
darkorchid: '#9932cc',
|
|
|
darkred: '#8b0000',
|
|
|
darksalmon: '#e9967a',
|
|
|
darkseagreen: '#8fbc8f',
|
|
|
darkslateblue: '#483d8b',
|
|
|
darkslategray: '#2f4f4f',
|
|
|
darkslategrey: '#2f4f4f',
|
|
|
darkturquoise: '#00ced1',
|
|
|
darkviolet: '#9400d3',
|
|
|
deeppink: '#ff1493',
|
|
|
deepskyblue: '#00bfff',
|
|
|
dimgray: '#696969',
|
|
|
dimgrey: '#696969',
|
|
|
dodgerblue: '#1e90ff',
|
|
|
firebrick: '#b22222',
|
|
|
floralwhite: '#fffaf0',
|
|
|
forestgreen: '#228b22',
|
|
|
fuchsia: '#ff00ff',
|
|
|
gainsboro: '#dcdcdc',
|
|
|
ghostwhite: '#f8f8ff',
|
|
|
goldenrod: '#daa520',
|
|
|
gold: '#ffd700',
|
|
|
gray: '#808080',
|
|
|
green: '#008000',
|
|
|
greenyellow: '#adff2f',
|
|
|
grey: '#808080',
|
|
|
honeydew: '#f0fff0',
|
|
|
hotpink: '#ff69b4',
|
|
|
indianred: '#cd5c5c',
|
|
|
indigo: '#4b0082',
|
|
|
ivory: '#fffff0',
|
|
|
khaki: '#f0e68c',
|
|
|
lavenderblush: '#fff0f5',
|
|
|
lavender: '#e6e6fa',
|
|
|
lawngreen: '#7cfc00',
|
|
|
lemonchiffon: '#fffacd',
|
|
|
lightblue: '#add8e6',
|
|
|
lightcoral: '#f08080',
|
|
|
lightcyan: '#e0ffff',
|
|
|
lightgoldenrodyellow: '#fafad2',
|
|
|
lightgray: '#d3d3d3',
|
|
|
lightgreen: '#90ee90',
|
|
|
lightgrey: '#d3d3d3',
|
|
|
lightpink: '#ffb6c1',
|
|
|
lightsalmon: '#ffa07a',
|
|
|
lightseagreen: '#20b2aa',
|
|
|
lightskyblue: '#87cefa',
|
|
|
lightslategray: '#778899',
|
|
|
lightslategrey: '#778899',
|
|
|
lightsteelblue: '#b0c4de',
|
|
|
lightyellow: '#ffffe0',
|
|
|
lime: '#00ff00',
|
|
|
limegreen: '#32cd32',
|
|
|
linen: '#faf0e6',
|
|
|
magenta: '#ff00ff',
|
|
|
maroon: '#800000',
|
|
|
mediumaquamarine: '#66cdaa',
|
|
|
mediumblue: '#0000cd',
|
|
|
mediumorchid: '#ba55d3',
|
|
|
mediumpurple: '#9370db',
|
|
|
mediumseagreen: '#3cb371',
|
|
|
mediumslateblue: '#7b68ee',
|
|
|
mediumspringgreen: '#00fa9a',
|
|
|
mediumturquoise: '#48d1cc',
|
|
|
mediumvioletred: '#c71585',
|
|
|
midnightblue: '#191970',
|
|
|
mintcream: '#f5fffa',
|
|
|
mistyrose: '#ffe4e1',
|
|
|
moccasin: '#ffe4b5',
|
|
|
navajowhite: '#ffdead',
|
|
|
navy: '#000080',
|
|
|
oldlace: '#fdf5e6',
|
|
|
olive: '#808000',
|
|
|
olivedrab: '#6b8e23',
|
|
|
orange: '#ffa500',
|
|
|
orangered: '#ff4500',
|
|
|
orchid: '#da70d6',
|
|
|
palegoldenrod: '#eee8aa',
|
|
|
palegreen: '#98fb98',
|
|
|
paleturquoise: '#afeeee',
|
|
|
palevioletred: '#db7093',
|
|
|
papayawhip: '#ffefd5',
|
|
|
peachpuff: '#ffdab9',
|
|
|
peru: '#cd853f',
|
|
|
pink: '#ffc0cb',
|
|
|
plum: '#dda0dd',
|
|
|
powderblue: '#b0e0e6',
|
|
|
purple: '#800080',
|
|
|
rebeccapurple: '#663399',
|
|
|
red: '#ff0000',
|
|
|
rosybrown: '#bc8f8f',
|
|
|
royalblue: '#4169e1',
|
|
|
saddlebrown: '#8b4513',
|
|
|
salmon: '#fa8072',
|
|
|
sandybrown: '#f4a460',
|
|
|
seagreen: '#2e8b57',
|
|
|
seashell: '#fff5ee',
|
|
|
sienna: '#a0522d',
|
|
|
silver: '#c0c0c0',
|
|
|
skyblue: '#87ceeb',
|
|
|
slateblue: '#6a5acd',
|
|
|
slategray: '#708090',
|
|
|
slategrey: '#708090',
|
|
|
snow: '#fffafa',
|
|
|
springgreen: '#00ff7f',
|
|
|
steelblue: '#4682b4',
|
|
|
tan: '#d2b48c',
|
|
|
teal: '#008080',
|
|
|
thistle: '#d8bfd8',
|
|
|
tomato: '#ff6347',
|
|
|
turquoise: '#40e0d0',
|
|
|
violet: '#ee82ee',
|
|
|
wheat: '#f5deb3',
|
|
|
white: '#ffffff',
|
|
|
whitesmoke: '#f5f5f5',
|
|
|
yellow: '#ffff00',
|
|
|
yellowgreen: '#9acd32',
|
|
|
};
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@ctrl/tinycolor/dist/module/format-input.js":
|
|
|
/*!******************************************************************!*\
|
|
|
!*** ./node_modules/@ctrl/tinycolor/dist/module/format-input.js ***!
|
|
|
\******************************************************************/
|
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "inputToRGB": () => (/* binding */ inputToRGB),
|
|
|
/* harmony export */ "isValidCSSUnit": () => (/* binding */ isValidCSSUnit),
|
|
|
/* harmony export */ "stringInputToObject": () => (/* binding */ stringInputToObject)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var _conversion__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./conversion */ "./node_modules/@ctrl/tinycolor/dist/module/conversion.js");
|
|
|
/* harmony import */ var _css_color_names__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./css-color-names */ "./node_modules/@ctrl/tinycolor/dist/module/css-color-names.js");
|
|
|
/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ "./node_modules/@ctrl/tinycolor/dist/module/util.js");
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
* Given a string or object, convert that input to RGB
|
|
|
*
|
|
|
* Possible string inputs:
|
|
|
* ```
|
|
|
* "red"
|
|
|
* "#f00" or "f00"
|
|
|
* "#ff0000" or "ff0000"
|
|
|
* "#ff000000" or "ff000000"
|
|
|
* "rgb 255 0 0" or "rgb (255, 0, 0)"
|
|
|
* "rgb 1.0 0 0" or "rgb (1, 0, 0)"
|
|
|
* "rgba (255, 0, 0, 1)" or "rgba 255, 0, 0, 1"
|
|
|
* "rgba (1.0, 0, 0, 1)" or "rgba 1.0, 0, 0, 1"
|
|
|
* "hsl(0, 100%, 50%)" or "hsl 0 100% 50%"
|
|
|
* "hsla(0, 100%, 50%, 1)" or "hsla 0 100% 50%, 1"
|
|
|
* "hsv(0, 100%, 100%)" or "hsv 0 100% 100%"
|
|
|
* ```
|
|
|
*/
|
|
|
function inputToRGB(color) {
|
|
|
var rgb = { r: 0, g: 0, b: 0 };
|
|
|
var a = 1;
|
|
|
var s = null;
|
|
|
var v = null;
|
|
|
var l = null;
|
|
|
var ok = false;
|
|
|
var format = false;
|
|
|
if (typeof color === 'string') {
|
|
|
color = stringInputToObject(color);
|
|
|
}
|
|
|
if (typeof color === 'object') {
|
|
|
if (isValidCSSUnit(color.r) && isValidCSSUnit(color.g) && isValidCSSUnit(color.b)) {
|
|
|
rgb = (0,_conversion__WEBPACK_IMPORTED_MODULE_0__.rgbToRgb)(color.r, color.g, color.b);
|
|
|
ok = true;
|
|
|
format = String(color.r).substr(-1) === '%' ? 'prgb' : 'rgb';
|
|
|
}
|
|
|
else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.v)) {
|
|
|
s = (0,_util__WEBPACK_IMPORTED_MODULE_1__.convertToPercentage)(color.s);
|
|
|
v = (0,_util__WEBPACK_IMPORTED_MODULE_1__.convertToPercentage)(color.v);
|
|
|
rgb = (0,_conversion__WEBPACK_IMPORTED_MODULE_0__.hsvToRgb)(color.h, s, v);
|
|
|
ok = true;
|
|
|
format = 'hsv';
|
|
|
}
|
|
|
else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.l)) {
|
|
|
s = (0,_util__WEBPACK_IMPORTED_MODULE_1__.convertToPercentage)(color.s);
|
|
|
l = (0,_util__WEBPACK_IMPORTED_MODULE_1__.convertToPercentage)(color.l);
|
|
|
rgb = (0,_conversion__WEBPACK_IMPORTED_MODULE_0__.hslToRgb)(color.h, s, l);
|
|
|
ok = true;
|
|
|
format = 'hsl';
|
|
|
}
|
|
|
if (Object.prototype.hasOwnProperty.call(color, 'a')) {
|
|
|
a = color.a;
|
|
|
}
|
|
|
}
|
|
|
a = (0,_util__WEBPACK_IMPORTED_MODULE_1__.boundAlpha)(a);
|
|
|
return {
|
|
|
ok: ok,
|
|
|
format: color.format || format,
|
|
|
r: Math.min(255, Math.max(rgb.r, 0)),
|
|
|
g: Math.min(255, Math.max(rgb.g, 0)),
|
|
|
b: Math.min(255, Math.max(rgb.b, 0)),
|
|
|
a: a,
|
|
|
};
|
|
|
}
|
|
|
// <http://www.w3.org/TR/css3-values/#integers>
|
|
|
var CSS_INTEGER = '[-\\+]?\\d+%?';
|
|
|
// <http://www.w3.org/TR/css3-values/#number-value>
|
|
|
var CSS_NUMBER = '[-\\+]?\\d*\\.\\d+%?';
|
|
|
// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome.
|
|
|
var CSS_UNIT = "(?:".concat(CSS_NUMBER, ")|(?:").concat(CSS_INTEGER, ")");
|
|
|
// Actual matching.
|
|
|
// Parentheses and commas are optional, but not required.
|
|
|
// Whitespace can take the place of commas or opening paren
|
|
|
var PERMISSIVE_MATCH3 = "[\\s|\\(]+(".concat(CSS_UNIT, ")[,|\\s]+(").concat(CSS_UNIT, ")[,|\\s]+(").concat(CSS_UNIT, ")\\s*\\)?");
|
|
|
var PERMISSIVE_MATCH4 = "[\\s|\\(]+(".concat(CSS_UNIT, ")[,|\\s]+(").concat(CSS_UNIT, ")[,|\\s]+(").concat(CSS_UNIT, ")[,|\\s]+(").concat(CSS_UNIT, ")\\s*\\)?");
|
|
|
var matchers = {
|
|
|
CSS_UNIT: new RegExp(CSS_UNIT),
|
|
|
rgb: new RegExp('rgb' + PERMISSIVE_MATCH3),
|
|
|
rgba: new RegExp('rgba' + PERMISSIVE_MATCH4),
|
|
|
hsl: new RegExp('hsl' + PERMISSIVE_MATCH3),
|
|
|
hsla: new RegExp('hsla' + PERMISSIVE_MATCH4),
|
|
|
hsv: new RegExp('hsv' + PERMISSIVE_MATCH3),
|
|
|
hsva: new RegExp('hsva' + PERMISSIVE_MATCH4),
|
|
|
hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,
|
|
|
hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,
|
|
|
hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,
|
|
|
hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,
|
|
|
};
|
|
|
/**
|
|
|
* Permissive string parsing. Take in a number of formats, and output an object
|
|
|
* based on detected format. Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}`
|
|
|
*/
|
|
|
function stringInputToObject(color) {
|
|
|
color = color.trim().toLowerCase();
|
|
|
if (color.length === 0) {
|
|
|
return false;
|
|
|
}
|
|
|
var named = false;
|
|
|
if (_css_color_names__WEBPACK_IMPORTED_MODULE_2__.names[color]) {
|
|
|
color = _css_color_names__WEBPACK_IMPORTED_MODULE_2__.names[color];
|
|
|
named = true;
|
|
|
}
|
|
|
else if (color === 'transparent') {
|
|
|
return { r: 0, g: 0, b: 0, a: 0, format: 'name' };
|
|
|
}
|
|
|
// Try to match string input using regular expressions.
|
|
|
// Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360]
|
|
|
// Just return an object and let the conversion functions handle that.
|
|
|
// This way the result will be the same whether the tinycolor is initialized with string or object.
|
|
|
var match = matchers.rgb.exec(color);
|
|
|
if (match) {
|
|
|
return { r: match[1], g: match[2], b: match[3] };
|
|
|
}
|
|
|
match = matchers.rgba.exec(color);
|
|
|
if (match) {
|
|
|
return { r: match[1], g: match[2], b: match[3], a: match[4] };
|
|
|
}
|
|
|
match = matchers.hsl.exec(color);
|
|
|
if (match) {
|
|
|
return { h: match[1], s: match[2], l: match[3] };
|
|
|
}
|
|
|
match = matchers.hsla.exec(color);
|
|
|
if (match) {
|
|
|
return { h: match[1], s: match[2], l: match[3], a: match[4] };
|
|
|
}
|
|
|
match = matchers.hsv.exec(color);
|
|
|
if (match) {
|
|
|
return { h: match[1], s: match[2], v: match[3] };
|
|
|
}
|
|
|
match = matchers.hsva.exec(color);
|
|
|
if (match) {
|
|
|
return { h: match[1], s: match[2], v: match[3], a: match[4] };
|
|
|
}
|
|
|
match = matchers.hex8.exec(color);
|
|
|
if (match) {
|
|
|
return {
|
|
|
r: (0,_conversion__WEBPACK_IMPORTED_MODULE_0__.parseIntFromHex)(match[1]),
|
|
|
g: (0,_conversion__WEBPACK_IMPORTED_MODULE_0__.parseIntFromHex)(match[2]),
|
|
|
b: (0,_conversion__WEBPACK_IMPORTED_MODULE_0__.parseIntFromHex)(match[3]),
|
|
|
a: (0,_conversion__WEBPACK_IMPORTED_MODULE_0__.convertHexToDecimal)(match[4]),
|
|
|
format: named ? 'name' : 'hex8',
|
|
|
};
|
|
|
}
|
|
|
match = matchers.hex6.exec(color);
|
|
|
if (match) {
|
|
|
return {
|
|
|
r: (0,_conversion__WEBPACK_IMPORTED_MODULE_0__.parseIntFromHex)(match[1]),
|
|
|
g: (0,_conversion__WEBPACK_IMPORTED_MODULE_0__.parseIntFromHex)(match[2]),
|
|
|
b: (0,_conversion__WEBPACK_IMPORTED_MODULE_0__.parseIntFromHex)(match[3]),
|
|
|
format: named ? 'name' : 'hex',
|
|
|
};
|
|
|
}
|
|
|
match = matchers.hex4.exec(color);
|
|
|
if (match) {
|
|
|
return {
|
|
|
r: (0,_conversion__WEBPACK_IMPORTED_MODULE_0__.parseIntFromHex)(match[1] + match[1]),
|
|
|
g: (0,_conversion__WEBPACK_IMPORTED_MODULE_0__.parseIntFromHex)(match[2] + match[2]),
|
|
|
b: (0,_conversion__WEBPACK_IMPORTED_MODULE_0__.parseIntFromHex)(match[3] + match[3]),
|
|
|
a: (0,_conversion__WEBPACK_IMPORTED_MODULE_0__.convertHexToDecimal)(match[4] + match[4]),
|
|
|
format: named ? 'name' : 'hex8',
|
|
|
};
|
|
|
}
|
|
|
match = matchers.hex3.exec(color);
|
|
|
if (match) {
|
|
|
return {
|
|
|
r: (0,_conversion__WEBPACK_IMPORTED_MODULE_0__.parseIntFromHex)(match[1] + match[1]),
|
|
|
g: (0,_conversion__WEBPACK_IMPORTED_MODULE_0__.parseIntFromHex)(match[2] + match[2]),
|
|
|
b: (0,_conversion__WEBPACK_IMPORTED_MODULE_0__.parseIntFromHex)(match[3] + match[3]),
|
|
|
format: named ? 'name' : 'hex',
|
|
|
};
|
|
|
}
|
|
|
return false;
|
|
|
}
|
|
|
/**
|
|
|
* Check to see if it looks like a CSS unit
|
|
|
* (see `matchers` above for definition).
|
|
|
*/
|
|
|
function isValidCSSUnit(color) {
|
|
|
return Boolean(matchers.CSS_UNIT.exec(String(color)));
|
|
|
}
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@ctrl/tinycolor/dist/module/from-ratio.js":
|
|
|
/*!****************************************************************!*\
|
|
|
!*** ./node_modules/@ctrl/tinycolor/dist/module/from-ratio.js ***!
|
|
|
\****************************************************************/
|
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "fromRatio": () => (/* binding */ fromRatio),
|
|
|
/* harmony export */ "legacyRandom": () => (/* binding */ legacyRandom)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index */ "./node_modules/@ctrl/tinycolor/dist/module/index.js");
|
|
|
/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ "./node_modules/@ctrl/tinycolor/dist/module/util.js");
|
|
|
|
|
|
|
|
|
/**
|
|
|
* If input is an object, force 1 into "1.0" to handle ratios properly
|
|
|
* String input requires "1.0" as input, so 1 will be treated as 1
|
|
|
*/
|
|
|
function fromRatio(ratio, opts) {
|
|
|
var newColor = {
|
|
|
r: (0,_util__WEBPACK_IMPORTED_MODULE_0__.convertToPercentage)(ratio.r),
|
|
|
g: (0,_util__WEBPACK_IMPORTED_MODULE_0__.convertToPercentage)(ratio.g),
|
|
|
b: (0,_util__WEBPACK_IMPORTED_MODULE_0__.convertToPercentage)(ratio.b),
|
|
|
};
|
|
|
if (ratio.a !== undefined) {
|
|
|
newColor.a = Number(ratio.a);
|
|
|
}
|
|
|
return new _index__WEBPACK_IMPORTED_MODULE_1__.TinyColor(newColor, opts);
|
|
|
}
|
|
|
/** old random function */
|
|
|
function legacyRandom() {
|
|
|
return new _index__WEBPACK_IMPORTED_MODULE_1__.TinyColor({
|
|
|
r: Math.random(),
|
|
|
g: Math.random(),
|
|
|
b: Math.random(),
|
|
|
});
|
|
|
}
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@ctrl/tinycolor/dist/module/index.js":
|
|
|
/*!***********************************************************!*\
|
|
|
!*** ./node_modules/@ctrl/tinycolor/dist/module/index.js ***!
|
|
|
\***********************************************************/
|
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "TinyColor": () => (/* binding */ TinyColor),
|
|
|
/* harmony export */ "tinycolor": () => (/* binding */ tinycolor)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var _conversion__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./conversion */ "./node_modules/@ctrl/tinycolor/dist/module/conversion.js");
|
|
|
/* harmony import */ var _css_color_names__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./css-color-names */ "./node_modules/@ctrl/tinycolor/dist/module/css-color-names.js");
|
|
|
/* harmony import */ var _format_input__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./format-input */ "./node_modules/@ctrl/tinycolor/dist/module/format-input.js");
|
|
|
/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./node_modules/@ctrl/tinycolor/dist/module/util.js");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var TinyColor = /** @class */ (function () {
|
|
|
function TinyColor(color, opts) {
|
|
|
if (color === void 0) { color = ''; }
|
|
|
if (opts === void 0) { opts = {}; }
|
|
|
var _a;
|
|
|
// If input is already a tinycolor, return itself
|
|
|
if (color instanceof TinyColor) {
|
|
|
// eslint-disable-next-line no-constructor-return
|
|
|
return color;
|
|
|
}
|
|
|
if (typeof color === 'number') {
|
|
|
color = (0,_conversion__WEBPACK_IMPORTED_MODULE_0__.numberInputToObject)(color);
|
|
|
}
|
|
|
this.originalInput = color;
|
|
|
var rgb = (0,_format_input__WEBPACK_IMPORTED_MODULE_1__.inputToRGB)(color);
|
|
|
this.originalInput = color;
|
|
|
this.r = rgb.r;
|
|
|
this.g = rgb.g;
|
|
|
this.b = rgb.b;
|
|
|
this.a = rgb.a;
|
|
|
this.roundA = Math.round(100 * this.a) / 100;
|
|
|
this.format = (_a = opts.format) !== null && _a !== void 0 ? _a : rgb.format;
|
|
|
this.gradientType = opts.gradientType;
|
|
|
// Don't let the range of [0,255] come back in [0,1].
|
|
|
// Potentially lose a little bit of precision here, but will fix issues where
|
|
|
// .5 gets interpreted as half of the total, instead of half of 1
|
|
|
// If it was supposed to be 128, this was already taken care of by `inputToRgb`
|
|
|
if (this.r < 1) {
|
|
|
this.r = Math.round(this.r);
|
|
|
}
|
|
|
if (this.g < 1) {
|
|
|
this.g = Math.round(this.g);
|
|
|
}
|
|
|
if (this.b < 1) {
|
|
|
this.b = Math.round(this.b);
|
|
|
}
|
|
|
this.isValid = rgb.ok;
|
|
|
}
|
|
|
TinyColor.prototype.isDark = function () {
|
|
|
return this.getBrightness() < 128;
|
|
|
};
|
|
|
TinyColor.prototype.isLight = function () {
|
|
|
return !this.isDark();
|
|
|
};
|
|
|
/**
|
|
|
* Returns the perceived brightness of the color, from 0-255.
|
|
|
*/
|
|
|
TinyColor.prototype.getBrightness = function () {
|
|
|
// http://www.w3.org/TR/AERT#color-contrast
|
|
|
var rgb = this.toRgb();
|
|
|
return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000;
|
|
|
};
|
|
|
/**
|
|
|
* Returns the perceived luminance of a color, from 0-1.
|
|
|
*/
|
|
|
TinyColor.prototype.getLuminance = function () {
|
|
|
// http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef
|
|
|
var rgb = this.toRgb();
|
|
|
var R;
|
|
|
var G;
|
|
|
var B;
|
|
|
var RsRGB = rgb.r / 255;
|
|
|
var GsRGB = rgb.g / 255;
|
|
|
var BsRGB = rgb.b / 255;
|
|
|
if (RsRGB <= 0.03928) {
|
|
|
R = RsRGB / 12.92;
|
|
|
}
|
|
|
else {
|
|
|
// eslint-disable-next-line prefer-exponentiation-operator
|
|
|
R = Math.pow((RsRGB + 0.055) / 1.055, 2.4);
|
|
|
}
|
|
|
if (GsRGB <= 0.03928) {
|
|
|
G = GsRGB / 12.92;
|
|
|
}
|
|
|
else {
|
|
|
// eslint-disable-next-line prefer-exponentiation-operator
|
|
|
G = Math.pow((GsRGB + 0.055) / 1.055, 2.4);
|
|
|
}
|
|
|
if (BsRGB <= 0.03928) {
|
|
|
B = BsRGB / 12.92;
|
|
|
}
|
|
|
else {
|
|
|
// eslint-disable-next-line prefer-exponentiation-operator
|
|
|
B = Math.pow((BsRGB + 0.055) / 1.055, 2.4);
|
|
|
}
|
|
|
return 0.2126 * R + 0.7152 * G + 0.0722 * B;
|
|
|
};
|
|
|
/**
|
|
|
* Returns the alpha value of a color, from 0-1.
|
|
|
*/
|
|
|
TinyColor.prototype.getAlpha = function () {
|
|
|
return this.a;
|
|
|
};
|
|
|
/**
|
|
|
* Sets the alpha value on the current color.
|
|
|
*
|
|
|
* @param alpha - The new alpha value. The accepted range is 0-1.
|
|
|
*/
|
|
|
TinyColor.prototype.setAlpha = function (alpha) {
|
|
|
this.a = (0,_util__WEBPACK_IMPORTED_MODULE_2__.boundAlpha)(alpha);
|
|
|
this.roundA = Math.round(100 * this.a) / 100;
|
|
|
return this;
|
|
|
};
|
|
|
/**
|
|
|
* Returns the object as a HSVA object.
|
|
|
*/
|
|
|
TinyColor.prototype.toHsv = function () {
|
|
|
var hsv = (0,_conversion__WEBPACK_IMPORTED_MODULE_0__.rgbToHsv)(this.r, this.g, this.b);
|
|
|
return { h: hsv.h * 360, s: hsv.s, v: hsv.v, a: this.a };
|
|
|
};
|
|
|
/**
|
|
|
* Returns the hsva values interpolated into a string with the following format:
|
|
|
* "hsva(xxx, xxx, xxx, xx)".
|
|
|
*/
|
|
|
TinyColor.prototype.toHsvString = function () {
|
|
|
var hsv = (0,_conversion__WEBPACK_IMPORTED_MODULE_0__.rgbToHsv)(this.r, this.g, this.b);
|
|
|
var h = Math.round(hsv.h * 360);
|
|
|
var s = Math.round(hsv.s * 100);
|
|
|
var v = Math.round(hsv.v * 100);
|
|
|
return this.a === 1 ? "hsv(".concat(h, ", ").concat(s, "%, ").concat(v, "%)") : "hsva(".concat(h, ", ").concat(s, "%, ").concat(v, "%, ").concat(this.roundA, ")");
|
|
|
};
|
|
|
/**
|
|
|
* Returns the object as a HSLA object.
|
|
|
*/
|
|
|
TinyColor.prototype.toHsl = function () {
|
|
|
var hsl = (0,_conversion__WEBPACK_IMPORTED_MODULE_0__.rgbToHsl)(this.r, this.g, this.b);
|
|
|
return { h: hsl.h * 360, s: hsl.s, l: hsl.l, a: this.a };
|
|
|
};
|
|
|
/**
|
|
|
* Returns the hsla values interpolated into a string with the following format:
|
|
|
* "hsla(xxx, xxx, xxx, xx)".
|
|
|
*/
|
|
|
TinyColor.prototype.toHslString = function () {
|
|
|
var hsl = (0,_conversion__WEBPACK_IMPORTED_MODULE_0__.rgbToHsl)(this.r, this.g, this.b);
|
|
|
var h = Math.round(hsl.h * 360);
|
|
|
var s = Math.round(hsl.s * 100);
|
|
|
var l = Math.round(hsl.l * 100);
|
|
|
return this.a === 1 ? "hsl(".concat(h, ", ").concat(s, "%, ").concat(l, "%)") : "hsla(".concat(h, ", ").concat(s, "%, ").concat(l, "%, ").concat(this.roundA, ")");
|
|
|
};
|
|
|
/**
|
|
|
* Returns the hex value of the color.
|
|
|
* @param allow3Char will shorten hex value to 3 char if possible
|
|
|
*/
|
|
|
TinyColor.prototype.toHex = function (allow3Char) {
|
|
|
if (allow3Char === void 0) { allow3Char = false; }
|
|
|
return (0,_conversion__WEBPACK_IMPORTED_MODULE_0__.rgbToHex)(this.r, this.g, this.b, allow3Char);
|
|
|
};
|
|
|
/**
|
|
|
* Returns the hex value of the color -with a # appened.
|
|
|
* @param allow3Char will shorten hex value to 3 char if possible
|
|
|
*/
|
|
|
TinyColor.prototype.toHexString = function (allow3Char) {
|
|
|
if (allow3Char === void 0) { allow3Char = false; }
|
|
|
return '#' + this.toHex(allow3Char);
|
|
|
};
|
|
|
/**
|
|
|
* Returns the hex 8 value of the color.
|
|
|
* @param allow4Char will shorten hex value to 4 char if possible
|
|
|
*/
|
|
|
TinyColor.prototype.toHex8 = function (allow4Char) {
|
|
|
if (allow4Char === void 0) { allow4Char = false; }
|
|
|
return (0,_conversion__WEBPACK_IMPORTED_MODULE_0__.rgbaToHex)(this.r, this.g, this.b, this.a, allow4Char);
|
|
|
};
|
|
|
/**
|
|
|
* Returns the hex 8 value of the color -with a # appened.
|
|
|
* @param allow4Char will shorten hex value to 4 char if possible
|
|
|
*/
|
|
|
TinyColor.prototype.toHex8String = function (allow4Char) {
|
|
|
if (allow4Char === void 0) { allow4Char = false; }
|
|
|
return '#' + this.toHex8(allow4Char);
|
|
|
};
|
|
|
/**
|
|
|
* Returns the object as a RGBA object.
|
|
|
*/
|
|
|
TinyColor.prototype.toRgb = function () {
|
|
|
return {
|
|
|
r: Math.round(this.r),
|
|
|
g: Math.round(this.g),
|
|
|
b: Math.round(this.b),
|
|
|
a: this.a,
|
|
|
};
|
|
|
};
|
|
|
/**
|
|
|
* Returns the RGBA values interpolated into a string with the following format:
|
|
|
* "RGBA(xxx, xxx, xxx, xx)".
|
|
|
*/
|
|
|
TinyColor.prototype.toRgbString = function () {
|
|
|
var r = Math.round(this.r);
|
|
|
var g = Math.round(this.g);
|
|
|
var b = Math.round(this.b);
|
|
|
return this.a === 1 ? "rgb(".concat(r, ", ").concat(g, ", ").concat(b, ")") : "rgba(".concat(r, ", ").concat(g, ", ").concat(b, ", ").concat(this.roundA, ")");
|
|
|
};
|
|
|
/**
|
|
|
* Returns the object as a RGBA object.
|
|
|
*/
|
|
|
TinyColor.prototype.toPercentageRgb = function () {
|
|
|
var fmt = function (x) { return "".concat(Math.round((0,_util__WEBPACK_IMPORTED_MODULE_2__.bound01)(x, 255) * 100), "%"); };
|
|
|
return {
|
|
|
r: fmt(this.r),
|
|
|
g: fmt(this.g),
|
|
|
b: fmt(this.b),
|
|
|
a: this.a,
|
|
|
};
|
|
|
};
|
|
|
/**
|
|
|
* Returns the RGBA relative values interpolated into a string
|
|
|
*/
|
|
|
TinyColor.prototype.toPercentageRgbString = function () {
|
|
|
var rnd = function (x) { return Math.round((0,_util__WEBPACK_IMPORTED_MODULE_2__.bound01)(x, 255) * 100); };
|
|
|
return this.a === 1
|
|
|
? "rgb(".concat(rnd(this.r), "%, ").concat(rnd(this.g), "%, ").concat(rnd(this.b), "%)")
|
|
|
: "rgba(".concat(rnd(this.r), "%, ").concat(rnd(this.g), "%, ").concat(rnd(this.b), "%, ").concat(this.roundA, ")");
|
|
|
};
|
|
|
/**
|
|
|
* The 'real' name of the color -if there is one.
|
|
|
*/
|
|
|
TinyColor.prototype.toName = function () {
|
|
|
if (this.a === 0) {
|
|
|
return 'transparent';
|
|
|
}
|
|
|
if (this.a < 1) {
|
|
|
return false;
|
|
|
}
|
|
|
var hex = '#' + (0,_conversion__WEBPACK_IMPORTED_MODULE_0__.rgbToHex)(this.r, this.g, this.b, false);
|
|
|
for (var _i = 0, _a = Object.entries(_css_color_names__WEBPACK_IMPORTED_MODULE_3__.names); _i < _a.length; _i++) {
|
|
|
var _b = _a[_i], key = _b[0], value = _b[1];
|
|
|
if (hex === value) {
|
|
|
return key;
|
|
|
}
|
|
|
}
|
|
|
return false;
|
|
|
};
|
|
|
TinyColor.prototype.toString = function (format) {
|
|
|
var formatSet = Boolean(format);
|
|
|
format = format !== null && format !== void 0 ? format : this.format;
|
|
|
var formattedString = false;
|
|
|
var hasAlpha = this.a < 1 && this.a >= 0;
|
|
|
var needsAlphaFormat = !formatSet && hasAlpha && (format.startsWith('hex') || format === 'name');
|
|
|
if (needsAlphaFormat) {
|
|
|
// Special case for "transparent", all other non-alpha formats
|
|
|
// will return rgba when there is transparency.
|
|
|
if (format === 'name' && this.a === 0) {
|
|
|
return this.toName();
|
|
|
}
|
|
|
return this.toRgbString();
|
|
|
}
|
|
|
if (format === 'rgb') {
|
|
|
formattedString = this.toRgbString();
|
|
|
}
|
|
|
if (format === 'prgb') {
|
|
|
formattedString = this.toPercentageRgbString();
|
|
|
}
|
|
|
if (format === 'hex' || format === 'hex6') {
|
|
|
formattedString = this.toHexString();
|
|
|
}
|
|
|
if (format === 'hex3') {
|
|
|
formattedString = this.toHexString(true);
|
|
|
}
|
|
|
if (format === 'hex4') {
|
|
|
formattedString = this.toHex8String(true);
|
|
|
}
|
|
|
if (format === 'hex8') {
|
|
|
formattedString = this.toHex8String();
|
|
|
}
|
|
|
if (format === 'name') {
|
|
|
formattedString = this.toName();
|
|
|
}
|
|
|
if (format === 'hsl') {
|
|
|
formattedString = this.toHslString();
|
|
|
}
|
|
|
if (format === 'hsv') {
|
|
|
formattedString = this.toHsvString();
|
|
|
}
|
|
|
return formattedString || this.toHexString();
|
|
|
};
|
|
|
TinyColor.prototype.toNumber = function () {
|
|
|
return (Math.round(this.r) << 16) + (Math.round(this.g) << 8) + Math.round(this.b);
|
|
|
};
|
|
|
TinyColor.prototype.clone = function () {
|
|
|
return new TinyColor(this.toString());
|
|
|
};
|
|
|
/**
|
|
|
* Lighten the color a given amount. Providing 100 will always return white.
|
|
|
* @param amount - valid between 1-100
|
|
|
*/
|
|
|
TinyColor.prototype.lighten = function (amount) {
|
|
|
if (amount === void 0) { amount = 10; }
|
|
|
var hsl = this.toHsl();
|
|
|
hsl.l += amount / 100;
|
|
|
hsl.l = (0,_util__WEBPACK_IMPORTED_MODULE_2__.clamp01)(hsl.l);
|
|
|
return new TinyColor(hsl);
|
|
|
};
|
|
|
/**
|
|
|
* Brighten the color a given amount, from 0 to 100.
|
|
|
* @param amount - valid between 1-100
|
|
|
*/
|
|
|
TinyColor.prototype.brighten = function (amount) {
|
|
|
if (amount === void 0) { amount = 10; }
|
|
|
var rgb = this.toRgb();
|
|
|
rgb.r = Math.max(0, Math.min(255, rgb.r - Math.round(255 * -(amount / 100))));
|
|
|
rgb.g = Math.max(0, Math.min(255, rgb.g - Math.round(255 * -(amount / 100))));
|
|
|
rgb.b = Math.max(0, Math.min(255, rgb.b - Math.round(255 * -(amount / 100))));
|
|
|
return new TinyColor(rgb);
|
|
|
};
|
|
|
/**
|
|
|
* Darken the color a given amount, from 0 to 100.
|
|
|
* Providing 100 will always return black.
|
|
|
* @param amount - valid between 1-100
|
|
|
*/
|
|
|
TinyColor.prototype.darken = function (amount) {
|
|
|
if (amount === void 0) { amount = 10; }
|
|
|
var hsl = this.toHsl();
|
|
|
hsl.l -= amount / 100;
|
|
|
hsl.l = (0,_util__WEBPACK_IMPORTED_MODULE_2__.clamp01)(hsl.l);
|
|
|
return new TinyColor(hsl);
|
|
|
};
|
|
|
/**
|
|
|
* Mix the color with pure white, from 0 to 100.
|
|
|
* Providing 0 will do nothing, providing 100 will always return white.
|
|
|
* @param amount - valid between 1-100
|
|
|
*/
|
|
|
TinyColor.prototype.tint = function (amount) {
|
|
|
if (amount === void 0) { amount = 10; }
|
|
|
return this.mix('white', amount);
|
|
|
};
|
|
|
/**
|
|
|
* Mix the color with pure black, from 0 to 100.
|
|
|
* Providing 0 will do nothing, providing 100 will always return black.
|
|
|
* @param amount - valid between 1-100
|
|
|
*/
|
|
|
TinyColor.prototype.shade = function (amount) {
|
|
|
if (amount === void 0) { amount = 10; }
|
|
|
return this.mix('black', amount);
|
|
|
};
|
|
|
/**
|
|
|
* Desaturate the color a given amount, from 0 to 100.
|
|
|
* Providing 100 will is the same as calling greyscale
|
|
|
* @param amount - valid between 1-100
|
|
|
*/
|
|
|
TinyColor.prototype.desaturate = function (amount) {
|
|
|
if (amount === void 0) { amount = 10; }
|
|
|
var hsl = this.toHsl();
|
|
|
hsl.s -= amount / 100;
|
|
|
hsl.s = (0,_util__WEBPACK_IMPORTED_MODULE_2__.clamp01)(hsl.s);
|
|
|
return new TinyColor(hsl);
|
|
|
};
|
|
|
/**
|
|
|
* Saturate the color a given amount, from 0 to 100.
|
|
|
* @param amount - valid between 1-100
|
|
|
*/
|
|
|
TinyColor.prototype.saturate = function (amount) {
|
|
|
if (amount === void 0) { amount = 10; }
|
|
|
var hsl = this.toHsl();
|
|
|
hsl.s += amount / 100;
|
|
|
hsl.s = (0,_util__WEBPACK_IMPORTED_MODULE_2__.clamp01)(hsl.s);
|
|
|
return new TinyColor(hsl);
|
|
|
};
|
|
|
/**
|
|
|
* Completely desaturates a color into greyscale.
|
|
|
* Same as calling `desaturate(100)`
|
|
|
*/
|
|
|
TinyColor.prototype.greyscale = function () {
|
|
|
return this.desaturate(100);
|
|
|
};
|
|
|
/**
|
|
|
* Spin takes a positive or negative amount within [-360, 360] indicating the change of hue.
|
|
|
* Values outside of this range will be wrapped into this range.
|
|
|
*/
|
|
|
TinyColor.prototype.spin = function (amount) {
|
|
|
var hsl = this.toHsl();
|
|
|
var hue = (hsl.h + amount) % 360;
|
|
|
hsl.h = hue < 0 ? 360 + hue : hue;
|
|
|
return new TinyColor(hsl);
|
|
|
};
|
|
|
/**
|
|
|
* Mix the current color a given amount with another color, from 0 to 100.
|
|
|
* 0 means no mixing (return current color).
|
|
|
*/
|
|
|
TinyColor.prototype.mix = function (color, amount) {
|
|
|
if (amount === void 0) { amount = 50; }
|
|
|
var rgb1 = this.toRgb();
|
|
|
var rgb2 = new TinyColor(color).toRgb();
|
|
|
var p = amount / 100;
|
|
|
var rgba = {
|
|
|
r: (rgb2.r - rgb1.r) * p + rgb1.r,
|
|
|
g: (rgb2.g - rgb1.g) * p + rgb1.g,
|
|
|
b: (rgb2.b - rgb1.b) * p + rgb1.b,
|
|
|
a: (rgb2.a - rgb1.a) * p + rgb1.a,
|
|
|
};
|
|
|
return new TinyColor(rgba);
|
|
|
};
|
|
|
TinyColor.prototype.analogous = function (results, slices) {
|
|
|
if (results === void 0) { results = 6; }
|
|
|
if (slices === void 0) { slices = 30; }
|
|
|
var hsl = this.toHsl();
|
|
|
var part = 360 / slices;
|
|
|
var ret = [this];
|
|
|
for (hsl.h = (hsl.h - ((part * results) >> 1) + 720) % 360; --results;) {
|
|
|
hsl.h = (hsl.h + part) % 360;
|
|
|
ret.push(new TinyColor(hsl));
|
|
|
}
|
|
|
return ret;
|
|
|
};
|
|
|
/**
|
|
|
* taken from https://github.com/infusion/jQuery-xcolor/blob/master/jquery.xcolor.js
|
|
|
*/
|
|
|
TinyColor.prototype.complement = function () {
|
|
|
var hsl = this.toHsl();
|
|
|
hsl.h = (hsl.h + 180) % 360;
|
|
|
return new TinyColor(hsl);
|
|
|
};
|
|
|
TinyColor.prototype.monochromatic = function (results) {
|
|
|
if (results === void 0) { results = 6; }
|
|
|
var hsv = this.toHsv();
|
|
|
var h = hsv.h;
|
|
|
var s = hsv.s;
|
|
|
var v = hsv.v;
|
|
|
var res = [];
|
|
|
var modification = 1 / results;
|
|
|
while (results--) {
|
|
|
res.push(new TinyColor({ h: h, s: s, v: v }));
|
|
|
v = (v + modification) % 1;
|
|
|
}
|
|
|
return res;
|
|
|
};
|
|
|
TinyColor.prototype.splitcomplement = function () {
|
|
|
var hsl = this.toHsl();
|
|
|
var h = hsl.h;
|
|
|
return [
|
|
|
this,
|
|
|
new TinyColor({ h: (h + 72) % 360, s: hsl.s, l: hsl.l }),
|
|
|
new TinyColor({ h: (h + 216) % 360, s: hsl.s, l: hsl.l }),
|
|
|
];
|
|
|
};
|
|
|
/**
|
|
|
* Compute how the color would appear on a background
|
|
|
*/
|
|
|
TinyColor.prototype.onBackground = function (background) {
|
|
|
var fg = this.toRgb();
|
|
|
var bg = new TinyColor(background).toRgb();
|
|
|
return new TinyColor({
|
|
|
r: bg.r + (fg.r - bg.r) * fg.a,
|
|
|
g: bg.g + (fg.g - bg.g) * fg.a,
|
|
|
b: bg.b + (fg.b - bg.b) * fg.a,
|
|
|
});
|
|
|
};
|
|
|
/**
|
|
|
* Alias for `polyad(3)`
|
|
|
*/
|
|
|
TinyColor.prototype.triad = function () {
|
|
|
return this.polyad(3);
|
|
|
};
|
|
|
/**
|
|
|
* Alias for `polyad(4)`
|
|
|
*/
|
|
|
TinyColor.prototype.tetrad = function () {
|
|
|
return this.polyad(4);
|
|
|
};
|
|
|
/**
|
|
|
* Get polyad colors, like (for 1, 2, 3, 4, 5, 6, 7, 8, etc...)
|
|
|
* monad, dyad, triad, tetrad, pentad, hexad, heptad, octad, etc...
|
|
|
*/
|
|
|
TinyColor.prototype.polyad = function (n) {
|
|
|
var hsl = this.toHsl();
|
|
|
var h = hsl.h;
|
|
|
var result = [this];
|
|
|
var increment = 360 / n;
|
|
|
for (var i = 1; i < n; i++) {
|
|
|
result.push(new TinyColor({ h: (h + i * increment) % 360, s: hsl.s, l: hsl.l }));
|
|
|
}
|
|
|
return result;
|
|
|
};
|
|
|
/**
|
|
|
* compare color vs current color
|
|
|
*/
|
|
|
TinyColor.prototype.equals = function (color) {
|
|
|
return this.toRgbString() === new TinyColor(color).toRgbString();
|
|
|
};
|
|
|
return TinyColor;
|
|
|
}());
|
|
|
|
|
|
// kept for backwards compatability with v1
|
|
|
function tinycolor(color, opts) {
|
|
|
if (color === void 0) { color = ''; }
|
|
|
if (opts === void 0) { opts = {}; }
|
|
|
return new TinyColor(color, opts);
|
|
|
}
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@ctrl/tinycolor/dist/module/public_api.js":
|
|
|
/*!****************************************************************!*\
|
|
|
!*** ./node_modules/@ctrl/tinycolor/dist/module/public_api.js ***!
|
|
|
\****************************************************************/
|
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "TinyColor": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_0__.TinyColor),
|
|
|
/* harmony export */ "bounds": () => (/* reexport safe */ _random__WEBPACK_IMPORTED_MODULE_6__.bounds),
|
|
|
/* harmony export */ "convertDecimalToHex": () => (/* reexport safe */ _conversion__WEBPACK_IMPORTED_MODULE_7__.convertDecimalToHex),
|
|
|
/* harmony export */ "convertHexToDecimal": () => (/* reexport safe */ _conversion__WEBPACK_IMPORTED_MODULE_7__.convertHexToDecimal),
|
|
|
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__),
|
|
|
/* harmony export */ "fromRatio": () => (/* reexport safe */ _from_ratio__WEBPACK_IMPORTED_MODULE_4__.fromRatio),
|
|
|
/* harmony export */ "hslToRgb": () => (/* reexport safe */ _conversion__WEBPACK_IMPORTED_MODULE_7__.hslToRgb),
|
|
|
/* harmony export */ "hsvToRgb": () => (/* reexport safe */ _conversion__WEBPACK_IMPORTED_MODULE_7__.hsvToRgb),
|
|
|
/* harmony export */ "inputToRGB": () => (/* reexport safe */ _format_input__WEBPACK_IMPORTED_MODULE_5__.inputToRGB),
|
|
|
/* harmony export */ "isReadable": () => (/* reexport safe */ _readability__WEBPACK_IMPORTED_MODULE_2__.isReadable),
|
|
|
/* harmony export */ "isValidCSSUnit": () => (/* reexport safe */ _format_input__WEBPACK_IMPORTED_MODULE_5__.isValidCSSUnit),
|
|
|
/* harmony export */ "legacyRandom": () => (/* reexport safe */ _from_ratio__WEBPACK_IMPORTED_MODULE_4__.legacyRandom),
|
|
|
/* harmony export */ "mostReadable": () => (/* reexport safe */ _readability__WEBPACK_IMPORTED_MODULE_2__.mostReadable),
|
|
|
/* harmony export */ "names": () => (/* reexport safe */ _css_color_names__WEBPACK_IMPORTED_MODULE_1__.names),
|
|
|
/* harmony export */ "numberInputToObject": () => (/* reexport safe */ _conversion__WEBPACK_IMPORTED_MODULE_7__.numberInputToObject),
|
|
|
/* harmony export */ "parseIntFromHex": () => (/* reexport safe */ _conversion__WEBPACK_IMPORTED_MODULE_7__.parseIntFromHex),
|
|
|
/* harmony export */ "random": () => (/* reexport safe */ _random__WEBPACK_IMPORTED_MODULE_6__.random),
|
|
|
/* harmony export */ "readability": () => (/* reexport safe */ _readability__WEBPACK_IMPORTED_MODULE_2__.readability),
|
|
|
/* harmony export */ "rgbToHex": () => (/* reexport safe */ _conversion__WEBPACK_IMPORTED_MODULE_7__.rgbToHex),
|
|
|
/* harmony export */ "rgbToHsl": () => (/* reexport safe */ _conversion__WEBPACK_IMPORTED_MODULE_7__.rgbToHsl),
|
|
|
/* harmony export */ "rgbToHsv": () => (/* reexport safe */ _conversion__WEBPACK_IMPORTED_MODULE_7__.rgbToHsv),
|
|
|
/* harmony export */ "rgbToRgb": () => (/* reexport safe */ _conversion__WEBPACK_IMPORTED_MODULE_7__.rgbToRgb),
|
|
|
/* harmony export */ "rgbaToArgbHex": () => (/* reexport safe */ _conversion__WEBPACK_IMPORTED_MODULE_7__.rgbaToArgbHex),
|
|
|
/* harmony export */ "rgbaToHex": () => (/* reexport safe */ _conversion__WEBPACK_IMPORTED_MODULE_7__.rgbaToHex),
|
|
|
/* harmony export */ "stringInputToObject": () => (/* reexport safe */ _format_input__WEBPACK_IMPORTED_MODULE_5__.stringInputToObject),
|
|
|
/* harmony export */ "tinycolor": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_0__.tinycolor),
|
|
|
/* harmony export */ "toMsFilter": () => (/* reexport safe */ _to_ms_filter__WEBPACK_IMPORTED_MODULE_3__.toMsFilter)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index */ "./node_modules/@ctrl/tinycolor/dist/module/index.js");
|
|
|
/* harmony import */ var _css_color_names__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./css-color-names */ "./node_modules/@ctrl/tinycolor/dist/module/css-color-names.js");
|
|
|
/* harmony import */ var _readability__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./readability */ "./node_modules/@ctrl/tinycolor/dist/module/readability.js");
|
|
|
/* harmony import */ var _to_ms_filter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./to-ms-filter */ "./node_modules/@ctrl/tinycolor/dist/module/to-ms-filter.js");
|
|
|
/* harmony import */ var _from_ratio__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./from-ratio */ "./node_modules/@ctrl/tinycolor/dist/module/from-ratio.js");
|
|
|
/* harmony import */ var _format_input__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./format-input */ "./node_modules/@ctrl/tinycolor/dist/module/format-input.js");
|
|
|
/* harmony import */ var _random__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./random */ "./node_modules/@ctrl/tinycolor/dist/module/random.js");
|
|
|
/* harmony import */ var _conversion__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./conversion */ "./node_modules/@ctrl/tinycolor/dist/module/conversion.js");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// kept for backwards compatability with v1
|
|
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_index__WEBPACK_IMPORTED_MODULE_0__.tinycolor);
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@ctrl/tinycolor/dist/module/random.js":
|
|
|
/*!************************************************************!*\
|
|
|
!*** ./node_modules/@ctrl/tinycolor/dist/module/random.js ***!
|
|
|
\************************************************************/
|
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "bounds": () => (/* binding */ bounds),
|
|
|
/* harmony export */ "random": () => (/* binding */ random)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index */ "./node_modules/@ctrl/tinycolor/dist/module/index.js");
|
|
|
// randomColor by David Merfield under the CC0 license
|
|
|
// https://github.com/davidmerfield/randomColor/
|
|
|
|
|
|
function random(options) {
|
|
|
if (options === void 0) { options = {}; }
|
|
|
// Check if we need to generate multiple colors
|
|
|
if (options.count !== undefined &&
|
|
|
options.count !== null) {
|
|
|
var totalColors = options.count;
|
|
|
var colors = [];
|
|
|
options.count = undefined;
|
|
|
while (totalColors > colors.length) {
|
|
|
// Since we're generating multiple colors,
|
|
|
// incremement the seed. Otherwise we'd just
|
|
|
// generate the same color each time...
|
|
|
options.count = null;
|
|
|
if (options.seed) {
|
|
|
options.seed += 1;
|
|
|
}
|
|
|
colors.push(random(options));
|
|
|
}
|
|
|
options.count = totalColors;
|
|
|
return colors;
|
|
|
}
|
|
|
// First we pick a hue (H)
|
|
|
var h = pickHue(options.hue, options.seed);
|
|
|
// Then use H to determine saturation (S)
|
|
|
var s = pickSaturation(h, options);
|
|
|
// Then use S and H to determine brightness (B).
|
|
|
var v = pickBrightness(h, s, options);
|
|
|
var res = { h: h, s: s, v: v };
|
|
|
if (options.alpha !== undefined) {
|
|
|
res.a = options.alpha;
|
|
|
}
|
|
|
// Then we return the HSB color in the desired format
|
|
|
return new _index__WEBPACK_IMPORTED_MODULE_0__.TinyColor(res);
|
|
|
}
|
|
|
function pickHue(hue, seed) {
|
|
|
var hueRange = getHueRange(hue);
|
|
|
var res = randomWithin(hueRange, seed);
|
|
|
// Instead of storing red as two seperate ranges,
|
|
|
// we group them, using negative numbers
|
|
|
if (res < 0) {
|
|
|
res = 360 + res;
|
|
|
}
|
|
|
return res;
|
|
|
}
|
|
|
function pickSaturation(hue, options) {
|
|
|
if (options.hue === 'monochrome') {
|
|
|
return 0;
|
|
|
}
|
|
|
if (options.luminosity === 'random') {
|
|
|
return randomWithin([0, 100], options.seed);
|
|
|
}
|
|
|
var saturationRange = getColorInfo(hue).saturationRange;
|
|
|
var sMin = saturationRange[0];
|
|
|
var sMax = saturationRange[1];
|
|
|
switch (options.luminosity) {
|
|
|
case 'bright':
|
|
|
sMin = 55;
|
|
|
break;
|
|
|
case 'dark':
|
|
|
sMin = sMax - 10;
|
|
|
break;
|
|
|
case 'light':
|
|
|
sMax = 55;
|
|
|
break;
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
|
return randomWithin([sMin, sMax], options.seed);
|
|
|
}
|
|
|
function pickBrightness(H, S, options) {
|
|
|
var bMin = getMinimumBrightness(H, S);
|
|
|
var bMax = 100;
|
|
|
switch (options.luminosity) {
|
|
|
case 'dark':
|
|
|
bMax = bMin + 20;
|
|
|
break;
|
|
|
case 'light':
|
|
|
bMin = (bMax + bMin) / 2;
|
|
|
break;
|
|
|
case 'random':
|
|
|
bMin = 0;
|
|
|
bMax = 100;
|
|
|
break;
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
|
return randomWithin([bMin, bMax], options.seed);
|
|
|
}
|
|
|
function getMinimumBrightness(H, S) {
|
|
|
var lowerBounds = getColorInfo(H).lowerBounds;
|
|
|
for (var i = 0; i < lowerBounds.length - 1; i++) {
|
|
|
var s1 = lowerBounds[i][0];
|
|
|
var v1 = lowerBounds[i][1];
|
|
|
var s2 = lowerBounds[i + 1][0];
|
|
|
var v2 = lowerBounds[i + 1][1];
|
|
|
if (S >= s1 && S <= s2) {
|
|
|
var m = (v2 - v1) / (s2 - s1);
|
|
|
var b = v1 - m * s1;
|
|
|
return m * S + b;
|
|
|
}
|
|
|
}
|
|
|
return 0;
|
|
|
}
|
|
|
function getHueRange(colorInput) {
|
|
|
var num = parseInt(colorInput, 10);
|
|
|
if (!Number.isNaN(num) && num < 360 && num > 0) {
|
|
|
return [num, num];
|
|
|
}
|
|
|
if (typeof colorInput === 'string') {
|
|
|
var namedColor = bounds.find(function (n) { return n.name === colorInput; });
|
|
|
if (namedColor) {
|
|
|
var color = defineColor(namedColor);
|
|
|
if (color.hueRange) {
|
|
|
return color.hueRange;
|
|
|
}
|
|
|
}
|
|
|
var parsed = new _index__WEBPACK_IMPORTED_MODULE_0__.TinyColor(colorInput);
|
|
|
if (parsed.isValid) {
|
|
|
var hue = parsed.toHsv().h;
|
|
|
return [hue, hue];
|
|
|
}
|
|
|
}
|
|
|
return [0, 360];
|
|
|
}
|
|
|
function getColorInfo(hue) {
|
|
|
// Maps red colors to make picking hue easier
|
|
|
if (hue >= 334 && hue <= 360) {
|
|
|
hue -= 360;
|
|
|
}
|
|
|
for (var _i = 0, bounds_1 = bounds; _i < bounds_1.length; _i++) {
|
|
|
var bound = bounds_1[_i];
|
|
|
var color = defineColor(bound);
|
|
|
if (color.hueRange && hue >= color.hueRange[0] && hue <= color.hueRange[1]) {
|
|
|
return color;
|
|
|
}
|
|
|
}
|
|
|
throw Error('Color not found');
|
|
|
}
|
|
|
function randomWithin(range, seed) {
|
|
|
if (seed === undefined) {
|
|
|
return Math.floor(range[0] + Math.random() * (range[1] + 1 - range[0]));
|
|
|
}
|
|
|
// Seeded random algorithm from http://indiegamr.com/generate-repeatable-random-numbers-in-js/
|
|
|
var max = range[1] || 1;
|
|
|
var min = range[0] || 0;
|
|
|
seed = (seed * 9301 + 49297) % 233280;
|
|
|
var rnd = seed / 233280.0;
|
|
|
return Math.floor(min + rnd * (max - min));
|
|
|
}
|
|
|
function defineColor(bound) {
|
|
|
var sMin = bound.lowerBounds[0][0];
|
|
|
var sMax = bound.lowerBounds[bound.lowerBounds.length - 1][0];
|
|
|
var bMin = bound.lowerBounds[bound.lowerBounds.length - 1][1];
|
|
|
var bMax = bound.lowerBounds[0][1];
|
|
|
return {
|
|
|
name: bound.name,
|
|
|
hueRange: bound.hueRange,
|
|
|
lowerBounds: bound.lowerBounds,
|
|
|
saturationRange: [sMin, sMax],
|
|
|
brightnessRange: [bMin, bMax],
|
|
|
};
|
|
|
}
|
|
|
/**
|
|
|
* @hidden
|
|
|
*/
|
|
|
var bounds = [
|
|
|
{
|
|
|
name: 'monochrome',
|
|
|
hueRange: null,
|
|
|
lowerBounds: [
|
|
|
[0, 0],
|
|
|
[100, 0],
|
|
|
],
|
|
|
},
|
|
|
{
|
|
|
name: 'red',
|
|
|
hueRange: [-26, 18],
|
|
|
lowerBounds: [
|
|
|
[20, 100],
|
|
|
[30, 92],
|
|
|
[40, 89],
|
|
|
[50, 85],
|
|
|
[60, 78],
|
|
|
[70, 70],
|
|
|
[80, 60],
|
|
|
[90, 55],
|
|
|
[100, 50],
|
|
|
],
|
|
|
},
|
|
|
{
|
|
|
name: 'orange',
|
|
|
hueRange: [19, 46],
|
|
|
lowerBounds: [
|
|
|
[20, 100],
|
|
|
[30, 93],
|
|
|
[40, 88],
|
|
|
[50, 86],
|
|
|
[60, 85],
|
|
|
[70, 70],
|
|
|
[100, 70],
|
|
|
],
|
|
|
},
|
|
|
{
|
|
|
name: 'yellow',
|
|
|
hueRange: [47, 62],
|
|
|
lowerBounds: [
|
|
|
[25, 100],
|
|
|
[40, 94],
|
|
|
[50, 89],
|
|
|
[60, 86],
|
|
|
[70, 84],
|
|
|
[80, 82],
|
|
|
[90, 80],
|
|
|
[100, 75],
|
|
|
],
|
|
|
},
|
|
|
{
|
|
|
name: 'green',
|
|
|
hueRange: [63, 178],
|
|
|
lowerBounds: [
|
|
|
[30, 100],
|
|
|
[40, 90],
|
|
|
[50, 85],
|
|
|
[60, 81],
|
|
|
[70, 74],
|
|
|
[80, 64],
|
|
|
[90, 50],
|
|
|
[100, 40],
|
|
|
],
|
|
|
},
|
|
|
{
|
|
|
name: 'blue',
|
|
|
hueRange: [179, 257],
|
|
|
lowerBounds: [
|
|
|
[20, 100],
|
|
|
[30, 86],
|
|
|
[40, 80],
|
|
|
[50, 74],
|
|
|
[60, 60],
|
|
|
[70, 52],
|
|
|
[80, 44],
|
|
|
[90, 39],
|
|
|
[100, 35],
|
|
|
],
|
|
|
},
|
|
|
{
|
|
|
name: 'purple',
|
|
|
hueRange: [258, 282],
|
|
|
lowerBounds: [
|
|
|
[20, 100],
|
|
|
[30, 87],
|
|
|
[40, 79],
|
|
|
[50, 70],
|
|
|
[60, 65],
|
|
|
[70, 59],
|
|
|
[80, 52],
|
|
|
[90, 45],
|
|
|
[100, 42],
|
|
|
],
|
|
|
},
|
|
|
{
|
|
|
name: 'pink',
|
|
|
hueRange: [283, 334],
|
|
|
lowerBounds: [
|
|
|
[20, 100],
|
|
|
[30, 90],
|
|
|
[40, 86],
|
|
|
[60, 84],
|
|
|
[80, 80],
|
|
|
[90, 75],
|
|
|
[100, 73],
|
|
|
],
|
|
|
},
|
|
|
];
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@ctrl/tinycolor/dist/module/readability.js":
|
|
|
/*!*****************************************************************!*\
|
|
|
!*** ./node_modules/@ctrl/tinycolor/dist/module/readability.js ***!
|
|
|
\*****************************************************************/
|
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "isReadable": () => (/* binding */ isReadable),
|
|
|
/* harmony export */ "mostReadable": () => (/* binding */ mostReadable),
|
|
|
/* harmony export */ "readability": () => (/* binding */ readability)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index */ "./node_modules/@ctrl/tinycolor/dist/module/index.js");
|
|
|
|
|
|
// Readability Functions
|
|
|
// ---------------------
|
|
|
// <http://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef (WCAG Version 2)
|
|
|
/**
|
|
|
* AKA `contrast`
|
|
|
*
|
|
|
* Analyze the 2 colors and returns the color contrast defined by (WCAG Version 2)
|
|
|
*/
|
|
|
function readability(color1, color2) {
|
|
|
var c1 = new _index__WEBPACK_IMPORTED_MODULE_0__.TinyColor(color1);
|
|
|
var c2 = new _index__WEBPACK_IMPORTED_MODULE_0__.TinyColor(color2);
|
|
|
return ((Math.max(c1.getLuminance(), c2.getLuminance()) + 0.05) /
|
|
|
(Math.min(c1.getLuminance(), c2.getLuminance()) + 0.05));
|
|
|
}
|
|
|
/**
|
|
|
* Ensure that foreground and background color combinations meet WCAG2 guidelines.
|
|
|
* The third argument is an object.
|
|
|
* the 'level' property states 'AA' or 'AAA' - if missing or invalid, it defaults to 'AA';
|
|
|
* the 'size' property states 'large' or 'small' - if missing or invalid, it defaults to 'small'.
|
|
|
* If the entire object is absent, isReadable defaults to {level:"AA",size:"small"}.
|
|
|
*
|
|
|
* Example
|
|
|
* ```ts
|
|
|
* new TinyColor().isReadable('#000', '#111') => false
|
|
|
* new TinyColor().isReadable('#000', '#111', { level: 'AA', size: 'large' }) => false
|
|
|
* ```
|
|
|
*/
|
|
|
function isReadable(color1, color2, wcag2) {
|
|
|
var _a, _b;
|
|
|
if (wcag2 === void 0) { wcag2 = { level: 'AA', size: 'small' }; }
|
|
|
var readabilityLevel = readability(color1, color2);
|
|
|
switch (((_a = wcag2.level) !== null && _a !== void 0 ? _a : 'AA') + ((_b = wcag2.size) !== null && _b !== void 0 ? _b : 'small')) {
|
|
|
case 'AAsmall':
|
|
|
case 'AAAlarge':
|
|
|
return readabilityLevel >= 4.5;
|
|
|
case 'AAlarge':
|
|
|
return readabilityLevel >= 3;
|
|
|
case 'AAAsmall':
|
|
|
return readabilityLevel >= 7;
|
|
|
default:
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
/**
|
|
|
* Given a base color and a list of possible foreground or background
|
|
|
* colors for that base, returns the most readable color.
|
|
|
* Optionally returns Black or White if the most readable color is unreadable.
|
|
|
*
|
|
|
* @param baseColor - the base color.
|
|
|
* @param colorList - array of colors to pick the most readable one from.
|
|
|
* @param args - and object with extra arguments
|
|
|
*
|
|
|
* Example
|
|
|
* ```ts
|
|
|
* new TinyColor().mostReadable('#123', ['#124", "#125'], { includeFallbackColors: false }).toHexString(); // "#112255"
|
|
|
* new TinyColor().mostReadable('#123', ['#124", "#125'],{ includeFallbackColors: true }).toHexString(); // "#ffffff"
|
|
|
* new TinyColor().mostReadable('#a8015a', ["#faf3f3"], { includeFallbackColors:true, level: 'AAA', size: 'large' }).toHexString(); // "#faf3f3"
|
|
|
* new TinyColor().mostReadable('#a8015a', ["#faf3f3"], { includeFallbackColors:true, level: 'AAA', size: 'small' }).toHexString(); // "#ffffff"
|
|
|
* ```
|
|
|
*/
|
|
|
function mostReadable(baseColor, colorList, args) {
|
|
|
if (args === void 0) { args = { includeFallbackColors: false, level: 'AA', size: 'small' }; }
|
|
|
var bestColor = null;
|
|
|
var bestScore = 0;
|
|
|
var includeFallbackColors = args.includeFallbackColors, level = args.level, size = args.size;
|
|
|
for (var _i = 0, colorList_1 = colorList; _i < colorList_1.length; _i++) {
|
|
|
var color = colorList_1[_i];
|
|
|
var score = readability(baseColor, color);
|
|
|
if (score > bestScore) {
|
|
|
bestScore = score;
|
|
|
bestColor = new _index__WEBPACK_IMPORTED_MODULE_0__.TinyColor(color);
|
|
|
}
|
|
|
}
|
|
|
if (isReadable(baseColor, bestColor, { level: level, size: size }) || !includeFallbackColors) {
|
|
|
return bestColor;
|
|
|
}
|
|
|
args.includeFallbackColors = false;
|
|
|
return mostReadable(baseColor, ['#fff', '#000'], args);
|
|
|
}
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@ctrl/tinycolor/dist/module/to-ms-filter.js":
|
|
|
/*!******************************************************************!*\
|
|
|
!*** ./node_modules/@ctrl/tinycolor/dist/module/to-ms-filter.js ***!
|
|
|
\******************************************************************/
|
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "toMsFilter": () => (/* binding */ toMsFilter)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var _conversion__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./conversion */ "./node_modules/@ctrl/tinycolor/dist/module/conversion.js");
|
|
|
/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index */ "./node_modules/@ctrl/tinycolor/dist/module/index.js");
|
|
|
|
|
|
|
|
|
/**
|
|
|
* Returns the color represented as a Microsoft filter for use in old versions of IE.
|
|
|
*/
|
|
|
function toMsFilter(firstColor, secondColor) {
|
|
|
var color = new _index__WEBPACK_IMPORTED_MODULE_0__.TinyColor(firstColor);
|
|
|
var hex8String = '#' + (0,_conversion__WEBPACK_IMPORTED_MODULE_1__.rgbaToArgbHex)(color.r, color.g, color.b, color.a);
|
|
|
var secondHex8String = hex8String;
|
|
|
var gradientType = color.gradientType ? 'GradientType = 1, ' : '';
|
|
|
if (secondColor) {
|
|
|
var s = new _index__WEBPACK_IMPORTED_MODULE_0__.TinyColor(secondColor);
|
|
|
secondHex8String = '#' + (0,_conversion__WEBPACK_IMPORTED_MODULE_1__.rgbaToArgbHex)(s.r, s.g, s.b, s.a);
|
|
|
}
|
|
|
return "progid:DXImageTransform.Microsoft.gradient(".concat(gradientType, "startColorstr=").concat(hex8String, ",endColorstr=").concat(secondHex8String, ")");
|
|
|
}
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@ctrl/tinycolor/dist/module/util.js":
|
|
|
/*!**********************************************************!*\
|
|
|
!*** ./node_modules/@ctrl/tinycolor/dist/module/util.js ***!
|
|
|
\**********************************************************/
|
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "bound01": () => (/* binding */ bound01),
|
|
|
/* harmony export */ "boundAlpha": () => (/* binding */ boundAlpha),
|
|
|
/* harmony export */ "clamp01": () => (/* binding */ clamp01),
|
|
|
/* harmony export */ "convertToPercentage": () => (/* binding */ convertToPercentage),
|
|
|
/* harmony export */ "isOnePointZero": () => (/* binding */ isOnePointZero),
|
|
|
/* harmony export */ "isPercentage": () => (/* binding */ isPercentage),
|
|
|
/* harmony export */ "pad2": () => (/* binding */ pad2)
|
|
|
/* harmony export */ });
|
|
|
/**
|
|
|
* Take input from [0, n] and return it as [0, 1]
|
|
|
* @hidden
|
|
|
*/
|
|
|
function bound01(n, max) {
|
|
|
if (isOnePointZero(n)) {
|
|
|
n = '100%';
|
|
|
}
|
|
|
var isPercent = isPercentage(n);
|
|
|
n = max === 360 ? n : Math.min(max, Math.max(0, parseFloat(n)));
|
|
|
// Automatically convert percentage into number
|
|
|
if (isPercent) {
|
|
|
n = parseInt(String(n * max), 10) / 100;
|
|
|
}
|
|
|
// Handle floating point rounding errors
|
|
|
if (Math.abs(n - max) < 0.000001) {
|
|
|
return 1;
|
|
|
}
|
|
|
// Convert into [0, 1] range if it isn't already
|
|
|
if (max === 360) {
|
|
|
// If n is a hue given in degrees,
|
|
|
// wrap around out-of-range values into [0, 360] range
|
|
|
// then convert into [0, 1].
|
|
|
n = (n < 0 ? (n % max) + max : n % max) / parseFloat(String(max));
|
|
|
}
|
|
|
else {
|
|
|
// If n not a hue given in degrees
|
|
|
// Convert into [0, 1] range if it isn't already.
|
|
|
n = (n % max) / parseFloat(String(max));
|
|
|
}
|
|
|
return n;
|
|
|
}
|
|
|
/**
|
|
|
* Force a number between 0 and 1
|
|
|
* @hidden
|
|
|
*/
|
|
|
function clamp01(val) {
|
|
|
return Math.min(1, Math.max(0, val));
|
|
|
}
|
|
|
/**
|
|
|
* Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1
|
|
|
* <http://stackoverflow.com/questions/7422072/javascript-how-to-detect-number-as-a-decimal-including-1-0>
|
|
|
* @hidden
|
|
|
*/
|
|
|
function isOnePointZero(n) {
|
|
|
return typeof n === 'string' && n.indexOf('.') !== -1 && parseFloat(n) === 1;
|
|
|
}
|
|
|
/**
|
|
|
* Check to see if string passed in is a percentage
|
|
|
* @hidden
|
|
|
*/
|
|
|
function isPercentage(n) {
|
|
|
return typeof n === 'string' && n.indexOf('%') !== -1;
|
|
|
}
|
|
|
/**
|
|
|
* Return a valid alpha value [0,1] with all invalid values being set to 1
|
|
|
* @hidden
|
|
|
*/
|
|
|
function boundAlpha(a) {
|
|
|
a = parseFloat(a);
|
|
|
if (isNaN(a) || a < 0 || a > 1) {
|
|
|
a = 1;
|
|
|
}
|
|
|
return a;
|
|
|
}
|
|
|
/**
|
|
|
* Replace a decimal with it's percentage value
|
|
|
* @hidden
|
|
|
*/
|
|
|
function convertToPercentage(n) {
|
|
|
if (n <= 1) {
|
|
|
return "".concat(Number(n) * 100, "%");
|
|
|
}
|
|
|
return n;
|
|
|
}
|
|
|
/**
|
|
|
* Force a hex value to have 2 characters
|
|
|
* @hidden
|
|
|
*/
|
|
|
function pad2(c) {
|
|
|
return c.length === 1 ? '0' + c : String(c);
|
|
|
}
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@netuno/service-client/index.js":
|
|
|
/*!******************************************************!*\
|
|
|
!*** ./node_modules/@netuno/service-client/index.js ***!
|
|
|
\******************************************************/
|
|
|
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
|
|
|
|
|
const isNode = typeof window === 'undefined';
|
|
|
|
|
|
const extend = __webpack_require__(/*! just-extend */ "./node_modules/just-extend/index.js");
|
|
|
|
|
|
let nodeHTTP, nodeHTTPS = null;
|
|
|
|
|
|
const config = {
|
|
|
prefix: '',
|
|
|
url: '',
|
|
|
method: 'GET',
|
|
|
credentials: 'include',
|
|
|
headers: {
|
|
|
'Content-Type': 'application/json',
|
|
|
'Accept': 'application/json'
|
|
|
},
|
|
|
success: (data) => { },
|
|
|
fail: (data) => {}
|
|
|
}
|
|
|
|
|
|
if (isNode) {
|
|
|
nodeHTTP = eval(`require('http')`);
|
|
|
nodeHTTPS = eval(`require('https')`);
|
|
|
}
|
|
|
|
|
|
const _service = (args) => {
|
|
|
const settings = {};
|
|
|
extend(true, settings, config);
|
|
|
extend(true, settings, args);
|
|
|
if (!settings.url.toLowerCase().startsWith('http://')
|
|
|
&& !settings.url.toLowerCase().startsWith('https://')
|
|
|
&& settings.prefix && settings.prefix != ''
|
|
|
&& !settings.url.toLowerCase().startsWith(settings.prefix.toLowerCase())) {
|
|
|
if (settings.prefix.endsWith('/') && settings.url.startsWith('/')) {
|
|
|
settings.url = settings.url.substring(1);
|
|
|
} else if (!settings.prefix.endsWith('/') && !settings.url.startsWith('/')) {
|
|
|
settings.url = '/'+ settings.url;
|
|
|
}
|
|
|
let prefix = settings.prefix;
|
|
|
if (prefix.indexOf('/') == 0) {
|
|
|
let frontendServer = false;
|
|
|
let hostname = '';
|
|
|
let port = '';
|
|
|
if (window.location.host.indexOf(':')) {
|
|
|
hostname = window.location.host.substring(0, window.location.host.indexOf(':'));
|
|
|
port = window.location.host.substring(window.location.host.indexOf(':') + 1);
|
|
|
}
|
|
|
if (port === '3000') {
|
|
|
frontendServer = true;
|
|
|
port = '9000';
|
|
|
}
|
|
|
if (port.length > 2 && port.substring(port.length - 2, port.length) == '30') {
|
|
|
frontendServer = true;
|
|
|
port = port.substring(0, port.length - 2) + '90';
|
|
|
}
|
|
|
if (frontendServer) {
|
|
|
prefix = window.location.protocol +'//'+ hostname +':'+ port + prefix;
|
|
|
}
|
|
|
}
|
|
|
settings.url = prefix + settings.url;
|
|
|
}
|
|
|
if (settings.data) {
|
|
|
if (settings.method.toUpperCase() == 'GET') {
|
|
|
if (typeof settings.data == "object") {
|
|
|
settings.url = _service.urlWithEncodedParameters(settings.url, settings.data);
|
|
|
} else {
|
|
|
settings.url += `?${settings.data}`;
|
|
|
}
|
|
|
} else if (!isNode && (settings.data instanceof FormData || settings.multipart || (typeof settings.data === 'object' && Object.keys(settings.data).some((key) => settings.data[key] instanceof File)))) {
|
|
|
delete settings.headers['Content-Type'];
|
|
|
if (settings.data instanceof FormData) {
|
|
|
settings.body = settings.data;
|
|
|
} else if (settings.data === 'object') {
|
|
|
settings.body = new FormData();
|
|
|
Object.keys(settings.data).forEach((key) => {
|
|
|
if (settings.data[key] instanceof File) {
|
|
|
settings.body.append(key, settings.data[key]);
|
|
|
} else if (typeof settings.data[key] == 'object') {
|
|
|
settings.body.append(key, JSON.stringify(settings.data[key]));
|
|
|
} else {
|
|
|
settings.body.append(key, settings.data[key]);
|
|
|
}
|
|
|
});
|
|
|
} else {
|
|
|
settings.body = settings.data;
|
|
|
}
|
|
|
} else if (isNode && (settings.multipart || (typeof settings.data === 'object' && Object.keys(settings.data).some((key) => Buffer.isBuffer(settings.data[key]))))) {
|
|
|
const boundary = '---'+ _service.randomString(34);
|
|
|
settings.headers['Content-Type'] = `multipart/form-data; boundary=${boundary}`;
|
|
|
settings.body = Buffer.from('');
|
|
|
const bodyBufferAppend = (content) => {
|
|
|
if (Buffer.isBuffer(content)) {
|
|
|
settings.body = Buffer.concat([settings.body, content]);
|
|
|
} else {
|
|
|
settings.body = Buffer.concat([settings.body, Buffer.from(content)]);
|
|
|
}
|
|
|
};
|
|
|
Object.keys(settings.data).forEach((key) => {
|
|
|
if (Buffer.isBuffer(settings.data[key])) {
|
|
|
const bufferValue = settings.data[key];
|
|
|
const fileName = bufferValue.fileName;
|
|
|
const fileType = bufferValue.contentType || 'application/octet-stream';
|
|
|
bodyBufferAppend(`--${boundary}\r\n`);
|
|
|
bodyBufferAppend(`Content-Disposition: form-data; name="${key}"; filename="${fileName}";\r\n`);
|
|
|
bodyBufferAppend(`Content-Type: ${fileType}\r\n`);
|
|
|
bodyBufferAppend(`Content-Transfer-Encoding: binary\r\n\r\n`);
|
|
|
bodyBufferAppend(bufferValue);
|
|
|
} else {
|
|
|
let value = settings.data[key];
|
|
|
if (typeof value == 'object') {
|
|
|
value = JSON.stringify(value);
|
|
|
}
|
|
|
bodyBufferAppend(`--${boundary}\r\n`);
|
|
|
bodyBufferAppend(`Content-Disposition: form-data; name="${key}"; \r\n\r\n`);
|
|
|
bodyBufferAppend(`${value}\r\n`);
|
|
|
}
|
|
|
});
|
|
|
bodyBufferAppend(`\r\n--${boundary}--\r\n`);
|
|
|
} else if (settings.headers['Content-Type'] == 'application/json') {
|
|
|
if (typeof settings.data == "object") {
|
|
|
settings.body = JSON.stringify(settings.data);
|
|
|
} else {
|
|
|
settings.body = settings.data;
|
|
|
}
|
|
|
if (isNode) {
|
|
|
settings.headers['Content-Length'] = Buffer.byteLength(settings.body);
|
|
|
}
|
|
|
} else {
|
|
|
if (typeof settings.data == "object") {
|
|
|
settings.body = _service.urlWithEncodedParameters(settings.url, settings.data)
|
|
|
} else {
|
|
|
settings.body = settings.data;
|
|
|
}
|
|
|
if (isNode) {
|
|
|
settings.headers['Content-Length'] = Buffer.byteLength(postData);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
if (isNode) {
|
|
|
let nodeClient = null;
|
|
|
if (settings.url.toLowerCase().startsWith('http://')) {
|
|
|
nodeClient = nodeHTTP;
|
|
|
} else if (settings.url.toLowerCase().startsWith('https://')) {
|
|
|
nodeClient = nodeHTTPS;
|
|
|
} else {
|
|
|
throw new Error('URL with an invalid protocol. Only is supported HTTP or HTTPS.');
|
|
|
}
|
|
|
const nodeClientResponse = (response) => {
|
|
|
if (settings.encoding) {
|
|
|
response.setEncoding(settings.encoding);
|
|
|
}
|
|
|
const contentType = response.headers['content-type'];
|
|
|
const info = {
|
|
|
ok: response.statusCode >= 200 && response.statusCode < 300,
|
|
|
status: response.statusCode,
|
|
|
isJSON: contentType && contentType.toLowerCase().indexOf("application/json") == 0,
|
|
|
contentType: contentType,
|
|
|
response: response
|
|
|
};
|
|
|
if (response.statusCode == 204) {
|
|
|
return settings.success({...info});
|
|
|
} else {
|
|
|
let textData = '';
|
|
|
let blobData = [];
|
|
|
response.on('data', (chunk) => {
|
|
|
if (settings.blob && info.ok) {
|
|
|
blobData = blobData.concat([...chunk]);
|
|
|
} else {
|
|
|
textData += chunk;
|
|
|
}
|
|
|
});
|
|
|
response.on('end', () => {
|
|
|
if (info.ok) {
|
|
|
if (settings.blob) {
|
|
|
return settings.success({
|
|
|
...info,
|
|
|
blob: blobData
|
|
|
});
|
|
|
}
|
|
|
if (info.isJSON) {
|
|
|
try {
|
|
|
return settings.success({
|
|
|
...info,
|
|
|
json: JSON.parse(textData)
|
|
|
});
|
|
|
} catch (e) { }
|
|
|
}
|
|
|
return settings.success({
|
|
|
...info,
|
|
|
text: textData
|
|
|
});
|
|
|
}
|
|
|
if (info.isJSON) {
|
|
|
try {
|
|
|
return settings.fail({
|
|
|
...info,
|
|
|
error: new Error(`Service failed responding status ${info.status}.`),
|
|
|
json: JSON.parse(textData)
|
|
|
});
|
|
|
} catch (e) { }
|
|
|
}
|
|
|
return settings.fail({
|
|
|
...info,
|
|
|
error: new Error(`Service failed responding status ${info.status}.`),
|
|
|
text: textData
|
|
|
});
|
|
|
});
|
|
|
}
|
|
|
};
|
|
|
let nodeClientRequest = null;
|
|
|
if (settings.method.toUpperCase() === 'GET') {
|
|
|
nodeClientRequest = nodeClient.get(settings.url, settings, nodeClientResponse);
|
|
|
} else {
|
|
|
nodeClientRequest = nodeClient.request(settings.url, settings, nodeClientResponse);
|
|
|
}
|
|
|
nodeClientRequest.on("error", (e) => {
|
|
|
settings.fail({
|
|
|
error: e
|
|
|
});
|
|
|
});
|
|
|
if (settings.timeout && settings.timeout > 0) {
|
|
|
nodeClientRequest.setTimeout(settings.timeout, () => {
|
|
|
nodeClientRequest.abort();
|
|
|
});
|
|
|
}
|
|
|
if (settings.method.toUpperCase() !== 'GET') {
|
|
|
nodeClientRequest.write(settings.body);
|
|
|
nodeClientRequest.end();
|
|
|
}
|
|
|
} else {
|
|
|
fetch(settings.url, settings).then(
|
|
|
(response) => {
|
|
|
const contentType = response.headers.get("Content-Type");
|
|
|
const info = {
|
|
|
ok: response.ok,
|
|
|
status: response.status,
|
|
|
isJSON: contentType && contentType.toLowerCase().indexOf("application/json") == 0,
|
|
|
contentType: contentType,
|
|
|
response: response
|
|
|
};
|
|
|
if (info.ok) {
|
|
|
if (response.status == 204) {
|
|
|
return settings.success({...info});
|
|
|
}
|
|
|
if (settings.blob) {
|
|
|
return response.blob().then((blob) => {
|
|
|
return settings.success({
|
|
|
...info,
|
|
|
blob: blob
|
|
|
});
|
|
|
});
|
|
|
}
|
|
|
if (info.isJSON) {
|
|
|
return response.json().then((data) => {
|
|
|
return settings.success({
|
|
|
...info,
|
|
|
json: data
|
|
|
});
|
|
|
});
|
|
|
}
|
|
|
return response.text().then((text) => {
|
|
|
return settings.success({
|
|
|
...info,
|
|
|
text: text
|
|
|
});
|
|
|
});
|
|
|
}
|
|
|
if (info.isJSON) {
|
|
|
return response.json().then((data) => {
|
|
|
return settings.fail({
|
|
|
...info,
|
|
|
error: new Error(`Service failed responding status ${info.status}.`),
|
|
|
json: data
|
|
|
});
|
|
|
});
|
|
|
}
|
|
|
return response.text().then((text) => {
|
|
|
return settings.fail({
|
|
|
...info,
|
|
|
error: new Error(`Service failed responding status ${info.status}.`),
|
|
|
text: text
|
|
|
});
|
|
|
});
|
|
|
}
|
|
|
).catch(
|
|
|
(e) => {
|
|
|
return settings.fail({
|
|
|
error: e
|
|
|
});
|
|
|
}
|
|
|
)
|
|
|
}
|
|
|
};
|
|
|
|
|
|
_service.urlWithEncodedParameters = (url, obj) => {
|
|
|
const params = _service.encodedParameters(obj);
|
|
|
if (params != "") {
|
|
|
return `${url}?${params}`;
|
|
|
}
|
|
|
return url;
|
|
|
};
|
|
|
|
|
|
_service.encodedParameters = (obj) => {
|
|
|
const params = Object.keys(obj).reduce((a, k) => {
|
|
|
const v = encodeURIComponent(obj[k])
|
|
|
a.push(`${k}=${v}`)
|
|
|
return a
|
|
|
}, []).join('&');
|
|
|
return params;
|
|
|
};
|
|
|
|
|
|
_service.randomString = (length) => {
|
|
|
let result = '';
|
|
|
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
|
|
|
for (let i = 0; i < length; i++) {
|
|
|
result += chars.charAt(Math.floor(Math.random() * chars.length));
|
|
|
}
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
_service.config = (settings) => {
|
|
|
if (!!settings) {
|
|
|
extend(true, config, settings);
|
|
|
}
|
|
|
const newConfig = {};
|
|
|
extend(true, newConfig, config);
|
|
|
return newConfig;
|
|
|
};
|
|
|
|
|
|
module.exports = _service;
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/antd/lib/_util/raf.js":
|
|
|
/*!********************************************!*\
|
|
|
!*** ./node_modules/antd/lib/_util/raf.js ***!
|
|
|
\********************************************/
|
|
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
var _interopRequireDefault = (__webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js")["default"]);
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports["default"] = wrapperRaf;
|
|
|
var _raf = _interopRequireDefault(__webpack_require__(/*! rc-util/lib/raf */ "./node_modules/rc-util/lib/raf.js"));
|
|
|
var id = 0;
|
|
|
var ids = {};
|
|
|
// Support call raf with delay specified frame
|
|
|
function wrapperRaf(callback) {
|
|
|
var delayFrames = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
|
|
|
var myId = id++;
|
|
|
var restFrames = delayFrames;
|
|
|
function internalCallback() {
|
|
|
restFrames -= 1;
|
|
|
if (restFrames <= 0) {
|
|
|
callback();
|
|
|
delete ids[myId];
|
|
|
} else {
|
|
|
ids[myId] = (0, _raf["default"])(internalCallback);
|
|
|
}
|
|
|
}
|
|
|
ids[myId] = (0, _raf["default"])(internalCallback);
|
|
|
return myId;
|
|
|
}
|
|
|
wrapperRaf.cancel = function cancel(pid) {
|
|
|
if (pid === undefined) return;
|
|
|
_raf["default"].cancel(ids[pid]);
|
|
|
delete ids[pid];
|
|
|
};
|
|
|
wrapperRaf.ids = ids; // export this for test usage
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/antd/lib/_util/reactNode.js":
|
|
|
/*!**************************************************!*\
|
|
|
!*** ./node_modules/antd/lib/_util/reactNode.js ***!
|
|
|
\**************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
var _interopRequireWildcard = (__webpack_require__(/*! @babel/runtime/helpers/interopRequireWildcard */ "./node_modules/@babel/runtime/helpers/interopRequireWildcard.js")["default"]);
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports.cloneElement = cloneElement;
|
|
|
exports.isFragment = isFragment;
|
|
|
exports.isValidElement = void 0;
|
|
|
exports.replaceElement = replaceElement;
|
|
|
var React = _interopRequireWildcard(__webpack_require__(/*! react */ "./node_modules/react/index.js"));
|
|
|
var isValidElement = React.isValidElement;
|
|
|
exports.isValidElement = isValidElement;
|
|
|
function isFragment(child) {
|
|
|
return child && isValidElement(child) && child.type === React.Fragment;
|
|
|
}
|
|
|
function replaceElement(element, replacement, props) {
|
|
|
if (!isValidElement(element)) {
|
|
|
return replacement;
|
|
|
}
|
|
|
return /*#__PURE__*/React.cloneElement(element, typeof props === 'function' ? props(element.props || {}) : props);
|
|
|
}
|
|
|
function cloneElement(element, props) {
|
|
|
return replaceElement(element, element, props);
|
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/antd/lib/_util/type.js":
|
|
|
/*!*********************************************!*\
|
|
|
!*** ./node_modules/antd/lib/_util/type.js ***!
|
|
|
\*********************************************/
|
|
|
/***/ ((__unused_webpack_module, exports) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports.tupleNum = exports.tuple = void 0;
|
|
|
// https://stackoverflow.com/questions/46176165/ways-to-get-string-literal-type-of-array-values-without-enum-overhead
|
|
|
var tuple = function tuple() {
|
|
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
|
args[_key] = arguments[_key];
|
|
|
}
|
|
|
return args;
|
|
|
};
|
|
|
exports.tuple = tuple;
|
|
|
var tupleNum = function tupleNum() {
|
|
|
for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
|
args[_key2] = arguments[_key2];
|
|
|
}
|
|
|
return args;
|
|
|
};
|
|
|
exports.tupleNum = tupleNum;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/antd/lib/_util/warning.js":
|
|
|
/*!************************************************!*\
|
|
|
!*** ./node_modules/antd/lib/_util/warning.js ***!
|
|
|
\************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
var _interopRequireWildcard = (__webpack_require__(/*! @babel/runtime/helpers/interopRequireWildcard */ "./node_modules/@babel/runtime/helpers/interopRequireWildcard.js")["default"]);
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports["default"] = void 0;
|
|
|
exports.noop = noop;
|
|
|
Object.defineProperty(exports, "resetWarned", ({
|
|
|
enumerable: true,
|
|
|
get: function get() {
|
|
|
return _warning.resetWarned;
|
|
|
}
|
|
|
}));
|
|
|
var _warning = _interopRequireWildcard(__webpack_require__(/*! rc-util/lib/warning */ "./node_modules/rc-util/lib/warning.js"));
|
|
|
function noop() {}
|
|
|
// eslint-disable-next-line import/no-mutable-exports
|
|
|
var warning = noop;
|
|
|
if (true) {
|
|
|
warning = function warning(valid, component, message) {
|
|
|
(0, _warning["default"])(valid, "[antd: ".concat(component, "] ").concat(message));
|
|
|
// StrictMode will inject console which will not throw warning in React 17.
|
|
|
if (false) {}
|
|
|
};
|
|
|
}
|
|
|
var _default = warning;
|
|
|
exports["default"] = _default;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/antd/lib/_util/wave.js":
|
|
|
/*!*********************************************!*\
|
|
|
!*** ./node_modules/antd/lib/_util/wave.js ***!
|
|
|
\*********************************************/
|
|
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
var _interopRequireWildcard = (__webpack_require__(/*! @babel/runtime/helpers/interopRequireWildcard */ "./node_modules/@babel/runtime/helpers/interopRequireWildcard.js")["default"]);
|
|
|
var _interopRequireDefault = (__webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js")["default"]);
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports["default"] = void 0;
|
|
|
var _classCallCheck2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/classCallCheck.js"));
|
|
|
var _createClass2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/createClass.js"));
|
|
|
var _assertThisInitialized2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/assertThisInitialized */ "./node_modules/@babel/runtime/helpers/assertThisInitialized.js"));
|
|
|
var _inherits2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/inherits */ "./node_modules/@babel/runtime/helpers/inherits.js"));
|
|
|
var _createSuper2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/createSuper */ "./node_modules/@babel/runtime/helpers/createSuper.js"));
|
|
|
var _dynamicCSS = __webpack_require__(/*! rc-util/lib/Dom/dynamicCSS */ "./node_modules/rc-util/lib/Dom/dynamicCSS.js");
|
|
|
var _ref2 = __webpack_require__(/*! rc-util/lib/ref */ "./node_modules/rc-util/lib/ref.js");
|
|
|
var React = _interopRequireWildcard(__webpack_require__(/*! react */ "./node_modules/react/index.js"));
|
|
|
var _configProvider = __webpack_require__(/*! ../config-provider */ "./node_modules/antd/lib/config-provider/index.js");
|
|
|
var _raf = _interopRequireDefault(__webpack_require__(/*! ./raf */ "./node_modules/antd/lib/_util/raf.js"));
|
|
|
var _reactNode = __webpack_require__(/*! ./reactNode */ "./node_modules/antd/lib/_util/reactNode.js");
|
|
|
var styleForPseudo;
|
|
|
// Where el is the DOM element you'd like to test for visibility
|
|
|
function isHidden(element) {
|
|
|
if (false) {}
|
|
|
return !element || element.offsetParent === null || element.hidden;
|
|
|
}
|
|
|
function getValidateContainer(nodeRoot) {
|
|
|
if (nodeRoot instanceof Document) {
|
|
|
return nodeRoot.body;
|
|
|
}
|
|
|
return Array.from(nodeRoot.childNodes).find(function (ele) {
|
|
|
return (ele === null || ele === void 0 ? void 0 : ele.nodeType) === Node.ELEMENT_NODE;
|
|
|
});
|
|
|
}
|
|
|
function isNotGrey(color) {
|
|
|
// eslint-disable-next-line no-useless-escape
|
|
|
var match = (color || '').match(/rgba?\((\d*), (\d*), (\d*)(, [\d.]*)?\)/);
|
|
|
if (match && match[1] && match[2] && match[3]) {
|
|
|
return !(match[1] === match[2] && match[2] === match[3]);
|
|
|
}
|
|
|
return true;
|
|
|
}
|
|
|
var Wave = /*#__PURE__*/function (_React$Component) {
|
|
|
(0, _inherits2["default"])(Wave, _React$Component);
|
|
|
var _super = (0, _createSuper2["default"])(Wave);
|
|
|
function Wave() {
|
|
|
var _this;
|
|
|
(0, _classCallCheck2["default"])(this, Wave);
|
|
|
_this = _super.apply(this, arguments);
|
|
|
_this.containerRef = /*#__PURE__*/React.createRef();
|
|
|
_this.animationStart = false;
|
|
|
_this.destroyed = false;
|
|
|
_this.onClick = function (node, waveColor) {
|
|
|
var _a, _b;
|
|
|
var _this$props = _this.props,
|
|
|
insertExtraNode = _this$props.insertExtraNode,
|
|
|
disabled = _this$props.disabled;
|
|
|
if (disabled || !node || isHidden(node) || node.className.includes('-leave')) {
|
|
|
return;
|
|
|
}
|
|
|
_this.extraNode = document.createElement('div');
|
|
|
var _assertThisInitialize = (0, _assertThisInitialized2["default"])(_this),
|
|
|
extraNode = _assertThisInitialize.extraNode;
|
|
|
var getPrefixCls = _this.context.getPrefixCls;
|
|
|
extraNode.className = "".concat(getPrefixCls(''), "-click-animating-node");
|
|
|
var attributeName = _this.getAttributeName();
|
|
|
node.setAttribute(attributeName, 'true');
|
|
|
// Not white or transparent or grey
|
|
|
if (waveColor && waveColor !== '#fff' && waveColor !== '#ffffff' && waveColor !== 'rgb(255, 255, 255)' && waveColor !== 'rgba(255, 255, 255, 1)' && isNotGrey(waveColor) && !/rgba\((?:\d*, ){3}0\)/.test(waveColor) &&
|
|
|
// any transparent rgba color
|
|
|
waveColor !== 'transparent') {
|
|
|
extraNode.style.borderColor = waveColor;
|
|
|
var nodeRoot = ((_a = node.getRootNode) === null || _a === void 0 ? void 0 : _a.call(node)) || node.ownerDocument;
|
|
|
var nodeBody = (_b = getValidateContainer(nodeRoot)) !== null && _b !== void 0 ? _b : nodeRoot;
|
|
|
styleForPseudo = (0, _dynamicCSS.updateCSS)("\n [".concat(getPrefixCls(''), "-click-animating-without-extra-node='true']::after, .").concat(getPrefixCls(''), "-click-animating-node {\n --antd-wave-shadow-color: ").concat(waveColor, ";\n }"), 'antd-wave', {
|
|
|
csp: _this.csp,
|
|
|
attachTo: nodeBody
|
|
|
});
|
|
|
}
|
|
|
if (insertExtraNode) {
|
|
|
node.appendChild(extraNode);
|
|
|
}
|
|
|
['transition', 'animation'].forEach(function (name) {
|
|
|
node.addEventListener("".concat(name, "start"), _this.onTransitionStart);
|
|
|
node.addEventListener("".concat(name, "end"), _this.onTransitionEnd);
|
|
|
});
|
|
|
};
|
|
|
_this.onTransitionStart = function (e) {
|
|
|
if (_this.destroyed) {
|
|
|
return;
|
|
|
}
|
|
|
var node = _this.containerRef.current;
|
|
|
if (!e || e.target !== node || _this.animationStart) {
|
|
|
return;
|
|
|
}
|
|
|
_this.resetEffect(node);
|
|
|
};
|
|
|
_this.onTransitionEnd = function (e) {
|
|
|
if (!e || e.animationName !== 'fadeEffect') {
|
|
|
return;
|
|
|
}
|
|
|
_this.resetEffect(e.target);
|
|
|
};
|
|
|
_this.bindAnimationEvent = function (node) {
|
|
|
if (!node || !node.getAttribute || node.getAttribute('disabled') || node.className.includes('disabled')) {
|
|
|
return;
|
|
|
}
|
|
|
var onClick = function onClick(e) {
|
|
|
// Fix radio button click twice
|
|
|
if (e.target.tagName === 'INPUT' || isHidden(e.target)) {
|
|
|
return;
|
|
|
}
|
|
|
_this.resetEffect(node);
|
|
|
// Get wave color from target
|
|
|
var waveColor = getComputedStyle(node).getPropertyValue('border-top-color') ||
|
|
|
// Firefox Compatible
|
|
|
getComputedStyle(node).getPropertyValue('border-color') || getComputedStyle(node).getPropertyValue('background-color');
|
|
|
_this.clickWaveTimeoutId = window.setTimeout(function () {
|
|
|
return _this.onClick(node, waveColor);
|
|
|
}, 0);
|
|
|
_raf["default"].cancel(_this.animationStartId);
|
|
|
_this.animationStart = true;
|
|
|
// Render to trigger transition event cost 3 frames. Let's delay 10 frames to reset this.
|
|
|
_this.animationStartId = (0, _raf["default"])(function () {
|
|
|
_this.animationStart = false;
|
|
|
}, 10);
|
|
|
};
|
|
|
node.addEventListener('click', onClick, true);
|
|
|
return {
|
|
|
cancel: function cancel() {
|
|
|
node.removeEventListener('click', onClick, true);
|
|
|
}
|
|
|
};
|
|
|
};
|
|
|
_this.renderWave = function (_ref) {
|
|
|
var csp = _ref.csp;
|
|
|
var children = _this.props.children;
|
|
|
_this.csp = csp;
|
|
|
if (! /*#__PURE__*/React.isValidElement(children)) return children;
|
|
|
var ref = _this.containerRef;
|
|
|
if ((0, _ref2.supportRef)(children)) {
|
|
|
ref = (0, _ref2.composeRef)(children.ref, _this.containerRef);
|
|
|
}
|
|
|
return (0, _reactNode.cloneElement)(children, {
|
|
|
ref: ref
|
|
|
});
|
|
|
};
|
|
|
return _this;
|
|
|
}
|
|
|
(0, _createClass2["default"])(Wave, [{
|
|
|
key: "componentDidMount",
|
|
|
value: function componentDidMount() {
|
|
|
this.destroyed = false;
|
|
|
var node = this.containerRef.current;
|
|
|
if (!node || node.nodeType !== 1) {
|
|
|
return;
|
|
|
}
|
|
|
this.instance = this.bindAnimationEvent(node);
|
|
|
}
|
|
|
}, {
|
|
|
key: "componentWillUnmount",
|
|
|
value: function componentWillUnmount() {
|
|
|
if (this.instance) {
|
|
|
this.instance.cancel();
|
|
|
}
|
|
|
if (this.clickWaveTimeoutId) {
|
|
|
clearTimeout(this.clickWaveTimeoutId);
|
|
|
}
|
|
|
this.destroyed = true;
|
|
|
}
|
|
|
}, {
|
|
|
key: "getAttributeName",
|
|
|
value: function getAttributeName() {
|
|
|
var getPrefixCls = this.context.getPrefixCls;
|
|
|
var insertExtraNode = this.props.insertExtraNode;
|
|
|
return insertExtraNode ? "".concat(getPrefixCls(''), "-click-animating") : "".concat(getPrefixCls(''), "-click-animating-without-extra-node");
|
|
|
}
|
|
|
}, {
|
|
|
key: "resetEffect",
|
|
|
value: function resetEffect(node) {
|
|
|
var _this2 = this;
|
|
|
if (!node || node === this.extraNode || !(node instanceof Element)) {
|
|
|
return;
|
|
|
}
|
|
|
var insertExtraNode = this.props.insertExtraNode;
|
|
|
var attributeName = this.getAttributeName();
|
|
|
node.setAttribute(attributeName, 'false'); // edge has bug on `removeAttribute` #14466
|
|
|
if (styleForPseudo) {
|
|
|
styleForPseudo.innerHTML = '';
|
|
|
}
|
|
|
if (insertExtraNode && this.extraNode && node.contains(this.extraNode)) {
|
|
|
node.removeChild(this.extraNode);
|
|
|
}
|
|
|
['transition', 'animation'].forEach(function (name) {
|
|
|
node.removeEventListener("".concat(name, "start"), _this2.onTransitionStart);
|
|
|
node.removeEventListener("".concat(name, "end"), _this2.onTransitionEnd);
|
|
|
});
|
|
|
}
|
|
|
}, {
|
|
|
key: "render",
|
|
|
value: function render() {
|
|
|
return /*#__PURE__*/React.createElement(_configProvider.ConfigConsumer, null, this.renderWave);
|
|
|
}
|
|
|
}]);
|
|
|
return Wave;
|
|
|
}(React.Component);
|
|
|
Wave.contextType = _configProvider.ConfigContext;
|
|
|
var _default = Wave;
|
|
|
exports["default"] = _default;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/antd/lib/button/LoadingIcon.js":
|
|
|
/*!*****************************************************!*\
|
|
|
!*** ./node_modules/antd/lib/button/LoadingIcon.js ***!
|
|
|
\*****************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
var _interopRequireDefault = (__webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js")["default"]);
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports["default"] = void 0;
|
|
|
var _LoadingOutlined = _interopRequireDefault(__webpack_require__(/*! @ant-design/icons/LoadingOutlined */ "./node_modules/@ant-design/icons/LoadingOutlined.js"));
|
|
|
var _rcMotion = _interopRequireDefault(__webpack_require__(/*! rc-motion */ "./node_modules/rc-motion/es/index.js"));
|
|
|
var _react = _interopRequireDefault(__webpack_require__(/*! react */ "./node_modules/react/index.js"));
|
|
|
var getCollapsedWidth = function getCollapsedWidth() {
|
|
|
return {
|
|
|
width: 0,
|
|
|
opacity: 0,
|
|
|
transform: 'scale(0)'
|
|
|
};
|
|
|
};
|
|
|
var getRealWidth = function getRealWidth(node) {
|
|
|
return {
|
|
|
width: node.scrollWidth,
|
|
|
opacity: 1,
|
|
|
transform: 'scale(1)'
|
|
|
};
|
|
|
};
|
|
|
var LoadingIcon = function LoadingIcon(_ref) {
|
|
|
var prefixCls = _ref.prefixCls,
|
|
|
loading = _ref.loading,
|
|
|
existIcon = _ref.existIcon;
|
|
|
var visible = !!loading;
|
|
|
if (existIcon) {
|
|
|
return /*#__PURE__*/_react["default"].createElement("span", {
|
|
|
className: "".concat(prefixCls, "-loading-icon")
|
|
|
}, /*#__PURE__*/_react["default"].createElement(_LoadingOutlined["default"], null));
|
|
|
}
|
|
|
return /*#__PURE__*/_react["default"].createElement(_rcMotion["default"], {
|
|
|
visible: visible,
|
|
|
// We do not really use this motionName
|
|
|
motionName: "".concat(prefixCls, "-loading-icon-motion"),
|
|
|
removeOnLeave: true,
|
|
|
onAppearStart: getCollapsedWidth,
|
|
|
onAppearActive: getRealWidth,
|
|
|
onEnterStart: getCollapsedWidth,
|
|
|
onEnterActive: getRealWidth,
|
|
|
onLeaveStart: getRealWidth,
|
|
|
onLeaveActive: getCollapsedWidth
|
|
|
}, function (_ref2, ref) {
|
|
|
var className = _ref2.className,
|
|
|
style = _ref2.style;
|
|
|
return /*#__PURE__*/_react["default"].createElement("span", {
|
|
|
className: "".concat(prefixCls, "-loading-icon"),
|
|
|
style: style,
|
|
|
ref: ref
|
|
|
}, /*#__PURE__*/_react["default"].createElement(_LoadingOutlined["default"], {
|
|
|
className: className
|
|
|
}));
|
|
|
});
|
|
|
};
|
|
|
var _default = LoadingIcon;
|
|
|
exports["default"] = _default;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/antd/lib/button/button-group.js":
|
|
|
/*!******************************************************!*\
|
|
|
!*** ./node_modules/antd/lib/button/button-group.js ***!
|
|
|
\******************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
var _interopRequireWildcard = (__webpack_require__(/*! @babel/runtime/helpers/interopRequireWildcard */ "./node_modules/@babel/runtime/helpers/interopRequireWildcard.js")["default"]);
|
|
|
var _interopRequireDefault = (__webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js")["default"]);
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports["default"] = exports.GroupSizeContext = void 0;
|
|
|
var _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ "./node_modules/@babel/runtime/helpers/extends.js"));
|
|
|
var _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "./node_modules/@babel/runtime/helpers/defineProperty.js"));
|
|
|
var _classnames = _interopRequireDefault(__webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"));
|
|
|
var React = _interopRequireWildcard(__webpack_require__(/*! react */ "./node_modules/react/index.js"));
|
|
|
var _configProvider = __webpack_require__(/*! ../config-provider */ "./node_modules/antd/lib/config-provider/index.js");
|
|
|
var _warning = _interopRequireDefault(__webpack_require__(/*! ../_util/warning */ "./node_modules/antd/lib/_util/warning.js"));
|
|
|
var __rest = void 0 && (void 0).__rest || function (s, e) {
|
|
|
var t = {};
|
|
|
for (var p in s) {
|
|
|
if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
|
|
|
}
|
|
|
if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
|
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
|
|
|
}
|
|
|
return t;
|
|
|
};
|
|
|
var GroupSizeContext = /*#__PURE__*/React.createContext(undefined);
|
|
|
exports.GroupSizeContext = GroupSizeContext;
|
|
|
var ButtonGroup = function ButtonGroup(props) {
|
|
|
var _classNames;
|
|
|
var _React$useContext = React.useContext(_configProvider.ConfigContext),
|
|
|
getPrefixCls = _React$useContext.getPrefixCls,
|
|
|
direction = _React$useContext.direction;
|
|
|
var customizePrefixCls = props.prefixCls,
|
|
|
size = props.size,
|
|
|
className = props.className,
|
|
|
others = __rest(props, ["prefixCls", "size", "className"]);
|
|
|
var prefixCls = getPrefixCls('btn-group', customizePrefixCls);
|
|
|
// large => lg
|
|
|
// small => sm
|
|
|
var sizeCls = '';
|
|
|
switch (size) {
|
|
|
case 'large':
|
|
|
sizeCls = 'lg';
|
|
|
break;
|
|
|
case 'small':
|
|
|
sizeCls = 'sm';
|
|
|
break;
|
|
|
case 'middle':
|
|
|
case undefined:
|
|
|
break;
|
|
|
default:
|
|
|
true ? (0, _warning["default"])(!size, 'Button.Group', 'Invalid prop `size`.') : 0;
|
|
|
}
|
|
|
var classes = (0, _classnames["default"])(prefixCls, (_classNames = {}, (0, _defineProperty2["default"])(_classNames, "".concat(prefixCls, "-").concat(sizeCls), sizeCls), (0, _defineProperty2["default"])(_classNames, "".concat(prefixCls, "-rtl"), direction === 'rtl'), _classNames), className);
|
|
|
return /*#__PURE__*/React.createElement(GroupSizeContext.Provider, {
|
|
|
value: size
|
|
|
}, /*#__PURE__*/React.createElement("div", (0, _extends2["default"])({}, others, {
|
|
|
className: classes
|
|
|
})));
|
|
|
};
|
|
|
var _default = ButtonGroup;
|
|
|
exports["default"] = _default;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/antd/lib/button/button.js":
|
|
|
/*!************************************************!*\
|
|
|
!*** ./node_modules/antd/lib/button/button.js ***!
|
|
|
\************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
var _interopRequireWildcard = (__webpack_require__(/*! @babel/runtime/helpers/interopRequireWildcard */ "./node_modules/@babel/runtime/helpers/interopRequireWildcard.js")["default"]);
|
|
|
var _interopRequireDefault = (__webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js")["default"]);
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports.convertLegacyProps = convertLegacyProps;
|
|
|
exports["default"] = void 0;
|
|
|
var _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ "./node_modules/@babel/runtime/helpers/extends.js"));
|
|
|
var _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "./node_modules/@babel/runtime/helpers/defineProperty.js"));
|
|
|
var _slicedToArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ "./node_modules/@babel/runtime/helpers/slicedToArray.js"));
|
|
|
var _typeof2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js"));
|
|
|
var _classnames = _interopRequireDefault(__webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"));
|
|
|
var _omit = _interopRequireDefault(__webpack_require__(/*! rc-util/lib/omit */ "./node_modules/rc-util/lib/omit.js"));
|
|
|
var React = _interopRequireWildcard(__webpack_require__(/*! react */ "./node_modules/react/index.js"));
|
|
|
var _configProvider = __webpack_require__(/*! ../config-provider */ "./node_modules/antd/lib/config-provider/index.js");
|
|
|
var _DisabledContext = _interopRequireDefault(__webpack_require__(/*! ../config-provider/DisabledContext */ "./node_modules/antd/lib/config-provider/DisabledContext.js"));
|
|
|
var _SizeContext = _interopRequireDefault(__webpack_require__(/*! ../config-provider/SizeContext */ "./node_modules/antd/lib/config-provider/SizeContext.js"));
|
|
|
var _Compact = __webpack_require__(/*! ../space/Compact */ "./node_modules/antd/lib/space/Compact.js");
|
|
|
var _reactNode = __webpack_require__(/*! ../_util/reactNode */ "./node_modules/antd/lib/_util/reactNode.js");
|
|
|
var _type = __webpack_require__(/*! ../_util/type */ "./node_modules/antd/lib/_util/type.js");
|
|
|
var _warning = _interopRequireDefault(__webpack_require__(/*! ../_util/warning */ "./node_modules/antd/lib/_util/warning.js"));
|
|
|
var _wave = _interopRequireDefault(__webpack_require__(/*! ../_util/wave */ "./node_modules/antd/lib/_util/wave.js"));
|
|
|
var _buttonGroup = _interopRequireWildcard(__webpack_require__(/*! ./button-group */ "./node_modules/antd/lib/button/button-group.js"));
|
|
|
var _LoadingIcon = _interopRequireDefault(__webpack_require__(/*! ./LoadingIcon */ "./node_modules/antd/lib/button/LoadingIcon.js"));
|
|
|
var __rest = void 0 && (void 0).__rest || function (s, e) {
|
|
|
var t = {};
|
|
|
for (var p in s) {
|
|
|
if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
|
|
|
}
|
|
|
if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
|
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
|
|
|
}
|
|
|
return t;
|
|
|
};
|
|
|
/* eslint-disable react/button-has-type */
|
|
|
|
|
|
var rxTwoCNChar = /^[\u4e00-\u9fa5]{2}$/;
|
|
|
var isTwoCNChar = rxTwoCNChar.test.bind(rxTwoCNChar);
|
|
|
function isString(str) {
|
|
|
return typeof str === 'string';
|
|
|
}
|
|
|
function isUnBorderedButtonType(type) {
|
|
|
return type === 'text' || type === 'link';
|
|
|
}
|
|
|
// Insert one space between two chinese characters automatically.
|
|
|
function insertSpace(child, needInserted) {
|
|
|
// Check the child if is undefined or null.
|
|
|
if (child === null || child === undefined) {
|
|
|
return;
|
|
|
}
|
|
|
var SPACE = needInserted ? ' ' : '';
|
|
|
// strictNullChecks oops.
|
|
|
if (typeof child !== 'string' && typeof child !== 'number' && isString(child.type) && isTwoCNChar(child.props.children)) {
|
|
|
return (0, _reactNode.cloneElement)(child, {
|
|
|
children: child.props.children.split('').join(SPACE)
|
|
|
});
|
|
|
}
|
|
|
if (typeof child === 'string') {
|
|
|
return isTwoCNChar(child) ? /*#__PURE__*/React.createElement("span", null, child.split('').join(SPACE)) : /*#__PURE__*/React.createElement("span", null, child);
|
|
|
}
|
|
|
if ((0, _reactNode.isFragment)(child)) {
|
|
|
return /*#__PURE__*/React.createElement("span", null, child);
|
|
|
}
|
|
|
return child;
|
|
|
}
|
|
|
function spaceChildren(children, needInserted) {
|
|
|
var isPrevChildPure = false;
|
|
|
var childList = [];
|
|
|
React.Children.forEach(children, function (child) {
|
|
|
var type = (0, _typeof2["default"])(child);
|
|
|
var isCurrentChildPure = type === 'string' || type === 'number';
|
|
|
if (isPrevChildPure && isCurrentChildPure) {
|
|
|
var lastIndex = childList.length - 1;
|
|
|
var lastChild = childList[lastIndex];
|
|
|
childList[lastIndex] = "".concat(lastChild).concat(child);
|
|
|
} else {
|
|
|
childList.push(child);
|
|
|
}
|
|
|
isPrevChildPure = isCurrentChildPure;
|
|
|
});
|
|
|
// Pass to React.Children.map to auto fill key
|
|
|
return React.Children.map(childList, function (child) {
|
|
|
return insertSpace(child, needInserted);
|
|
|
});
|
|
|
}
|
|
|
var ButtonTypes = (0, _type.tuple)('default', 'primary', 'ghost', 'dashed', 'link', 'text');
|
|
|
var ButtonShapes = (0, _type.tuple)('default', 'circle', 'round');
|
|
|
var ButtonHTMLTypes = (0, _type.tuple)('submit', 'button', 'reset');
|
|
|
function convertLegacyProps(type) {
|
|
|
if (type === 'danger') {
|
|
|
return {
|
|
|
danger: true
|
|
|
};
|
|
|
}
|
|
|
return {
|
|
|
type: type
|
|
|
};
|
|
|
}
|
|
|
var InternalButton = function InternalButton(props, ref) {
|
|
|
var _classNames;
|
|
|
var _props$loading = props.loading,
|
|
|
loading = _props$loading === void 0 ? false : _props$loading,
|
|
|
customizePrefixCls = props.prefixCls,
|
|
|
_props$type = props.type,
|
|
|
type = _props$type === void 0 ? 'default' : _props$type,
|
|
|
danger = props.danger,
|
|
|
_props$shape = props.shape,
|
|
|
shape = _props$shape === void 0 ? 'default' : _props$shape,
|
|
|
customizeSize = props.size,
|
|
|
customDisabled = props.disabled,
|
|
|
className = props.className,
|
|
|
children = props.children,
|
|
|
icon = props.icon,
|
|
|
_props$ghost = props.ghost,
|
|
|
ghost = _props$ghost === void 0 ? false : _props$ghost,
|
|
|
_props$block = props.block,
|
|
|
block = _props$block === void 0 ? false : _props$block,
|
|
|
_props$htmlType = props.htmlType,
|
|
|
htmlType = _props$htmlType === void 0 ? 'button' : _props$htmlType,
|
|
|
rest = __rest(props, ["loading", "prefixCls", "type", "danger", "shape", "size", "disabled", "className", "children", "icon", "ghost", "block", "htmlType"]);
|
|
|
var size = React.useContext(_SizeContext["default"]);
|
|
|
// ===================== Disabled =====================
|
|
|
var disabled = React.useContext(_DisabledContext["default"]);
|
|
|
var mergedDisabled = customDisabled !== null && customDisabled !== void 0 ? customDisabled : disabled;
|
|
|
var groupSize = React.useContext(_buttonGroup.GroupSizeContext);
|
|
|
var _React$useState = React.useState(!!loading),
|
|
|
_React$useState2 = (0, _slicedToArray2["default"])(_React$useState, 2),
|
|
|
innerLoading = _React$useState2[0],
|
|
|
setLoading = _React$useState2[1];
|
|
|
var _React$useState3 = React.useState(false),
|
|
|
_React$useState4 = (0, _slicedToArray2["default"])(_React$useState3, 2),
|
|
|
hasTwoCNChar = _React$useState4[0],
|
|
|
setHasTwoCNChar = _React$useState4[1];
|
|
|
var _React$useContext = React.useContext(_configProvider.ConfigContext),
|
|
|
getPrefixCls = _React$useContext.getPrefixCls,
|
|
|
autoInsertSpaceInButton = _React$useContext.autoInsertSpaceInButton,
|
|
|
direction = _React$useContext.direction;
|
|
|
var buttonRef = ref || /*#__PURE__*/React.createRef();
|
|
|
var isNeedInserted = function isNeedInserted() {
|
|
|
return React.Children.count(children) === 1 && !icon && !isUnBorderedButtonType(type);
|
|
|
};
|
|
|
var fixTwoCNChar = function fixTwoCNChar() {
|
|
|
// Fix for HOC usage like <FormatMessage />
|
|
|
if (!buttonRef || !buttonRef.current || autoInsertSpaceInButton === false) {
|
|
|
return;
|
|
|
}
|
|
|
var buttonText = buttonRef.current.textContent;
|
|
|
if (isNeedInserted() && isTwoCNChar(buttonText)) {
|
|
|
if (!hasTwoCNChar) {
|
|
|
setHasTwoCNChar(true);
|
|
|
}
|
|
|
} else if (hasTwoCNChar) {
|
|
|
setHasTwoCNChar(false);
|
|
|
}
|
|
|
};
|
|
|
// =============== Update Loading ===============
|
|
|
var loadingOrDelay = typeof loading === 'boolean' ? loading : (loading === null || loading === void 0 ? void 0 : loading.delay) || true;
|
|
|
React.useEffect(function () {
|
|
|
var delayTimer = null;
|
|
|
if (typeof loadingOrDelay === 'number') {
|
|
|
delayTimer = window.setTimeout(function () {
|
|
|
delayTimer = null;
|
|
|
setLoading(loadingOrDelay);
|
|
|
}, loadingOrDelay);
|
|
|
} else {
|
|
|
setLoading(loadingOrDelay);
|
|
|
}
|
|
|
return function () {
|
|
|
if (delayTimer) {
|
|
|
// in order to not perform a React state update on an unmounted component
|
|
|
// and clear timer after 'loadingOrDelay' updated.
|
|
|
window.clearTimeout(delayTimer);
|
|
|
delayTimer = null;
|
|
|
}
|
|
|
};
|
|
|
}, [loadingOrDelay]);
|
|
|
React.useEffect(fixTwoCNChar, [buttonRef]);
|
|
|
var handleClick = function handleClick(e) {
|
|
|
var onClick = props.onClick;
|
|
|
// https://github.com/ant-design/ant-design/issues/30207
|
|
|
if (innerLoading || mergedDisabled) {
|
|
|
e.preventDefault();
|
|
|
return;
|
|
|
}
|
|
|
onClick === null || onClick === void 0 ? void 0 : onClick(e);
|
|
|
};
|
|
|
true ? (0, _warning["default"])(!(typeof icon === 'string' && icon.length > 2), 'Button', "`icon` is using ReactNode instead of string naming in v4. Please check `".concat(icon, "` at https://ant.design/components/icon")) : 0;
|
|
|
true ? (0, _warning["default"])(!(ghost && isUnBorderedButtonType(type)), 'Button', "`link` or `text` button can't be a `ghost` button.") : 0;
|
|
|
var prefixCls = getPrefixCls('btn', customizePrefixCls);
|
|
|
var autoInsertSpace = autoInsertSpaceInButton !== false;
|
|
|
var _useCompactItemContex = (0, _Compact.useCompactItemContext)(prefixCls, direction),
|
|
|
compactSize = _useCompactItemContex.compactSize,
|
|
|
compactItemClassnames = _useCompactItemContex.compactItemClassnames;
|
|
|
var sizeClassNameMap = {
|
|
|
large: 'lg',
|
|
|
small: 'sm',
|
|
|
middle: undefined
|
|
|
};
|
|
|
var sizeFullname = compactSize || groupSize || customizeSize || size;
|
|
|
var sizeCls = sizeFullname ? sizeClassNameMap[sizeFullname] || '' : '';
|
|
|
var iconType = innerLoading ? 'loading' : icon;
|
|
|
var linkButtonRestProps = (0, _omit["default"])(rest, ['navigate']);
|
|
|
var classes = (0, _classnames["default"])(prefixCls, (_classNames = {}, (0, _defineProperty2["default"])(_classNames, "".concat(prefixCls, "-").concat(shape), shape !== 'default' && shape), (0, _defineProperty2["default"])(_classNames, "".concat(prefixCls, "-").concat(type), type), (0, _defineProperty2["default"])(_classNames, "".concat(prefixCls, "-").concat(sizeCls), sizeCls), (0, _defineProperty2["default"])(_classNames, "".concat(prefixCls, "-icon-only"), !children && children !== 0 && !!iconType), (0, _defineProperty2["default"])(_classNames, "".concat(prefixCls, "-background-ghost"), ghost && !isUnBorderedButtonType(type)), (0, _defineProperty2["default"])(_classNames, "".concat(prefixCls, "-loading"), innerLoading), (0, _defineProperty2["default"])(_classNames, "".concat(prefixCls, "-two-chinese-chars"), hasTwoCNChar && autoInsertSpace && !innerLoading), (0, _defineProperty2["default"])(_classNames, "".concat(prefixCls, "-block"), block), (0, _defineProperty2["default"])(_classNames, "".concat(prefixCls, "-dangerous"), !!danger), (0, _defineProperty2["default"])(_classNames, "".concat(prefixCls, "-rtl"), direction === 'rtl'), (0, _defineProperty2["default"])(_classNames, "".concat(prefixCls, "-disabled"), linkButtonRestProps.href !== undefined && mergedDisabled), _classNames), compactItemClassnames, className);
|
|
|
var iconNode = icon && !innerLoading ? icon : /*#__PURE__*/React.createElement(_LoadingIcon["default"], {
|
|
|
existIcon: !!icon,
|
|
|
prefixCls: prefixCls,
|
|
|
loading: !!innerLoading
|
|
|
});
|
|
|
var kids = children || children === 0 ? spaceChildren(children, isNeedInserted() && autoInsertSpace) : null;
|
|
|
if (linkButtonRestProps.href !== undefined) {
|
|
|
return /*#__PURE__*/React.createElement("a", (0, _extends2["default"])({}, linkButtonRestProps, {
|
|
|
className: classes,
|
|
|
onClick: handleClick,
|
|
|
ref: buttonRef
|
|
|
}), iconNode, kids);
|
|
|
}
|
|
|
var buttonNode = /*#__PURE__*/React.createElement("button", (0, _extends2["default"])({}, rest, {
|
|
|
type: htmlType,
|
|
|
className: classes,
|
|
|
onClick: handleClick,
|
|
|
disabled: mergedDisabled,
|
|
|
ref: buttonRef
|
|
|
}), iconNode, kids);
|
|
|
if (isUnBorderedButtonType(type)) {
|
|
|
return buttonNode;
|
|
|
}
|
|
|
return /*#__PURE__*/React.createElement(_wave["default"], {
|
|
|
disabled: !!innerLoading
|
|
|
}, buttonNode);
|
|
|
};
|
|
|
var Button = /*#__PURE__*/React.forwardRef(InternalButton);
|
|
|
if (true) {
|
|
|
Button.displayName = 'Button';
|
|
|
}
|
|
|
Button.Group = _buttonGroup["default"];
|
|
|
Button.__ANT_BUTTON = true;
|
|
|
var _default = Button;
|
|
|
exports["default"] = _default;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/antd/lib/button/index.js":
|
|
|
/*!***********************************************!*\
|
|
|
!*** ./node_modules/antd/lib/button/index.js ***!
|
|
|
\***********************************************/
|
|
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
var _interopRequireDefault = (__webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js")["default"]);
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports["default"] = void 0;
|
|
|
var _button = _interopRequireDefault(__webpack_require__(/*! ./button */ "./node_modules/antd/lib/button/button.js"));
|
|
|
var _default = _button["default"];
|
|
|
exports["default"] = _default;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/antd/lib/calendar/locale/en_US.js":
|
|
|
/*!********************************************************!*\
|
|
|
!*** ./node_modules/antd/lib/calendar/locale/en_US.js ***!
|
|
|
\********************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
var _interopRequireDefault = (__webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js")["default"]);
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports["default"] = void 0;
|
|
|
var _en_US = _interopRequireDefault(__webpack_require__(/*! ../../date-picker/locale/en_US */ "./node_modules/antd/lib/date-picker/locale/en_US.js"));
|
|
|
var _default = _en_US["default"];
|
|
|
exports["default"] = _default;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/antd/lib/config-provider/DisabledContext.js":
|
|
|
/*!******************************************************************!*\
|
|
|
!*** ./node_modules/antd/lib/config-provider/DisabledContext.js ***!
|
|
|
\******************************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
var _interopRequireWildcard = (__webpack_require__(/*! @babel/runtime/helpers/interopRequireWildcard */ "./node_modules/@babel/runtime/helpers/interopRequireWildcard.js")["default"]);
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports["default"] = exports.DisabledContextProvider = void 0;
|
|
|
var React = _interopRequireWildcard(__webpack_require__(/*! react */ "./node_modules/react/index.js"));
|
|
|
var DisabledContext = /*#__PURE__*/React.createContext(false);
|
|
|
var DisabledContextProvider = function DisabledContextProvider(_ref) {
|
|
|
var children = _ref.children,
|
|
|
disabled = _ref.disabled;
|
|
|
var originDisabled = React.useContext(DisabledContext);
|
|
|
return /*#__PURE__*/React.createElement(DisabledContext.Provider, {
|
|
|
value: disabled || originDisabled
|
|
|
}, children);
|
|
|
};
|
|
|
exports.DisabledContextProvider = DisabledContextProvider;
|
|
|
var _default = DisabledContext;
|
|
|
exports["default"] = _default;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/antd/lib/config-provider/SizeContext.js":
|
|
|
/*!**************************************************************!*\
|
|
|
!*** ./node_modules/antd/lib/config-provider/SizeContext.js ***!
|
|
|
\**************************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
var _interopRequireWildcard = (__webpack_require__(/*! @babel/runtime/helpers/interopRequireWildcard */ "./node_modules/@babel/runtime/helpers/interopRequireWildcard.js")["default"]);
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports["default"] = exports.SizeContextProvider = void 0;
|
|
|
var React = _interopRequireWildcard(__webpack_require__(/*! react */ "./node_modules/react/index.js"));
|
|
|
var SizeContext = /*#__PURE__*/React.createContext(undefined);
|
|
|
var SizeContextProvider = function SizeContextProvider(_ref) {
|
|
|
var children = _ref.children,
|
|
|
size = _ref.size;
|
|
|
return /*#__PURE__*/React.createElement(SizeContext.Consumer, null, function (originSize) {
|
|
|
return /*#__PURE__*/React.createElement(SizeContext.Provider, {
|
|
|
value: size || originSize
|
|
|
}, children);
|
|
|
});
|
|
|
};
|
|
|
exports.SizeContextProvider = SizeContextProvider;
|
|
|
var _default = SizeContext;
|
|
|
exports["default"] = _default;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/antd/lib/config-provider/context.js":
|
|
|
/*!**********************************************************!*\
|
|
|
!*** ./node_modules/antd/lib/config-provider/context.js ***!
|
|
|
\**********************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
var _interopRequireWildcard = (__webpack_require__(/*! @babel/runtime/helpers/interopRequireWildcard */ "./node_modules/@babel/runtime/helpers/interopRequireWildcard.js")["default"]);
|
|
|
var _interopRequireDefault = (__webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js")["default"]);
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports.ConfigContext = exports.ConfigConsumer = void 0;
|
|
|
exports.withConfigConsumer = withConfigConsumer;
|
|
|
var _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ "./node_modules/@babel/runtime/helpers/extends.js"));
|
|
|
var React = _interopRequireWildcard(__webpack_require__(/*! react */ "./node_modules/react/index.js"));
|
|
|
var defaultGetPrefixCls = function defaultGetPrefixCls(suffixCls, customizePrefixCls) {
|
|
|
if (customizePrefixCls) return customizePrefixCls;
|
|
|
return suffixCls ? "ant-".concat(suffixCls) : 'ant';
|
|
|
};
|
|
|
// zombieJ: 🚨 Do not pass `defaultRenderEmpty` here since it will case circular dependency.
|
|
|
var ConfigContext = /*#__PURE__*/React.createContext({
|
|
|
// We provide a default function for Context without provider
|
|
|
getPrefixCls: defaultGetPrefixCls
|
|
|
});
|
|
|
exports.ConfigContext = ConfigContext;
|
|
|
var ConfigConsumer = ConfigContext.Consumer;
|
|
|
/** @deprecated Use hooks instead. This is a legacy function */
|
|
|
exports.ConfigConsumer = ConfigConsumer;
|
|
|
function withConfigConsumer(config) {
|
|
|
return function withConfigConsumerFunc(Component) {
|
|
|
// Wrap with ConfigConsumer. Since we need compatible with react 15, be care when using ref methods
|
|
|
var SFC = function SFC(props) {
|
|
|
return /*#__PURE__*/React.createElement(ConfigConsumer, null, function (configProps) {
|
|
|
var basicPrefixCls = config.prefixCls;
|
|
|
var getPrefixCls = configProps.getPrefixCls;
|
|
|
var customizePrefixCls = props.prefixCls;
|
|
|
var prefixCls = getPrefixCls(basicPrefixCls, customizePrefixCls);
|
|
|
return /*#__PURE__*/React.createElement(Component, (0, _extends2["default"])({}, configProps, props, {
|
|
|
prefixCls: prefixCls
|
|
|
}));
|
|
|
});
|
|
|
};
|
|
|
var cons = Component.constructor;
|
|
|
var name = cons && cons.displayName || Component.name || 'Component';
|
|
|
if (true) {
|
|
|
SFC.displayName = "withConfigConsumer(".concat(name, ")");
|
|
|
}
|
|
|
return SFC;
|
|
|
};
|
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/antd/lib/config-provider/cssVariables.js":
|
|
|
/*!***************************************************************!*\
|
|
|
!*** ./node_modules/antd/lib/config-provider/cssVariables.js ***!
|
|
|
\***************************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
var _interopRequireDefault = (__webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js")["default"]);
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports.getStyle = getStyle;
|
|
|
exports.registerTheme = registerTheme;
|
|
|
var _colors = __webpack_require__(/*! @ant-design/colors */ "./node_modules/@ant-design/colors/dist/index.esm.js");
|
|
|
var _tinycolor = __webpack_require__(/*! @ctrl/tinycolor */ "./node_modules/@ctrl/tinycolor/dist/module/public_api.js");
|
|
|
var _canUseDom = _interopRequireDefault(__webpack_require__(/*! rc-util/lib/Dom/canUseDom */ "./node_modules/rc-util/lib/Dom/canUseDom.js"));
|
|
|
var _dynamicCSS = __webpack_require__(/*! rc-util/lib/Dom/dynamicCSS */ "./node_modules/rc-util/lib/Dom/dynamicCSS.js");
|
|
|
var _warning = _interopRequireDefault(__webpack_require__(/*! ../_util/warning */ "./node_modules/antd/lib/_util/warning.js"));
|
|
|
/* eslint-disable import/prefer-default-export, prefer-destructuring */
|
|
|
|
|
|
var dynamicStyleMark = "-ant-".concat(Date.now(), "-").concat(Math.random());
|
|
|
function getStyle(globalPrefixCls, theme) {
|
|
|
var variables = {};
|
|
|
var formatColor = function formatColor(color, updater) {
|
|
|
var clone = color.clone();
|
|
|
clone = (updater === null || updater === void 0 ? void 0 : updater(clone)) || clone;
|
|
|
return clone.toRgbString();
|
|
|
};
|
|
|
var fillColor = function fillColor(colorVal, type) {
|
|
|
var baseColor = new _tinycolor.TinyColor(colorVal);
|
|
|
var colorPalettes = (0, _colors.generate)(baseColor.toRgbString());
|
|
|
variables["".concat(type, "-color")] = formatColor(baseColor);
|
|
|
variables["".concat(type, "-color-disabled")] = colorPalettes[1];
|
|
|
variables["".concat(type, "-color-hover")] = colorPalettes[4];
|
|
|
variables["".concat(type, "-color-active")] = colorPalettes[6];
|
|
|
variables["".concat(type, "-color-outline")] = baseColor.clone().setAlpha(0.2).toRgbString();
|
|
|
variables["".concat(type, "-color-deprecated-bg")] = colorPalettes[0];
|
|
|
variables["".concat(type, "-color-deprecated-border")] = colorPalettes[2];
|
|
|
};
|
|
|
// ================ Primary Color ================
|
|
|
if (theme.primaryColor) {
|
|
|
fillColor(theme.primaryColor, 'primary');
|
|
|
var primaryColor = new _tinycolor.TinyColor(theme.primaryColor);
|
|
|
var primaryColors = (0, _colors.generate)(primaryColor.toRgbString());
|
|
|
// Legacy - We should use semantic naming standard
|
|
|
primaryColors.forEach(function (color, index) {
|
|
|
variables["primary-".concat(index + 1)] = color;
|
|
|
});
|
|
|
// Deprecated
|
|
|
variables['primary-color-deprecated-l-35'] = formatColor(primaryColor, function (c) {
|
|
|
return c.lighten(35);
|
|
|
});
|
|
|
variables['primary-color-deprecated-l-20'] = formatColor(primaryColor, function (c) {
|
|
|
return c.lighten(20);
|
|
|
});
|
|
|
variables['primary-color-deprecated-t-20'] = formatColor(primaryColor, function (c) {
|
|
|
return c.tint(20);
|
|
|
});
|
|
|
variables['primary-color-deprecated-t-50'] = formatColor(primaryColor, function (c) {
|
|
|
return c.tint(50);
|
|
|
});
|
|
|
variables['primary-color-deprecated-f-12'] = formatColor(primaryColor, function (c) {
|
|
|
return c.setAlpha(c.getAlpha() * 0.12);
|
|
|
});
|
|
|
var primaryActiveColor = new _tinycolor.TinyColor(primaryColors[0]);
|
|
|
variables['primary-color-active-deprecated-f-30'] = formatColor(primaryActiveColor, function (c) {
|
|
|
return c.setAlpha(c.getAlpha() * 0.3);
|
|
|
});
|
|
|
variables['primary-color-active-deprecated-d-02'] = formatColor(primaryActiveColor, function (c) {
|
|
|
return c.darken(2);
|
|
|
});
|
|
|
}
|
|
|
// ================ Success Color ================
|
|
|
if (theme.successColor) {
|
|
|
fillColor(theme.successColor, 'success');
|
|
|
}
|
|
|
// ================ Warning Color ================
|
|
|
if (theme.warningColor) {
|
|
|
fillColor(theme.warningColor, 'warning');
|
|
|
}
|
|
|
// ================= Error Color =================
|
|
|
if (theme.errorColor) {
|
|
|
fillColor(theme.errorColor, 'error');
|
|
|
}
|
|
|
// ================= Info Color ==================
|
|
|
if (theme.infoColor) {
|
|
|
fillColor(theme.infoColor, 'info');
|
|
|
}
|
|
|
// Convert to css variables
|
|
|
var cssList = Object.keys(variables).map(function (key) {
|
|
|
return "--".concat(globalPrefixCls, "-").concat(key, ": ").concat(variables[key], ";");
|
|
|
});
|
|
|
return "\n :root {\n ".concat(cssList.join('\n'), "\n }\n ").trim();
|
|
|
}
|
|
|
function registerTheme(globalPrefixCls, theme) {
|
|
|
var style = getStyle(globalPrefixCls, theme);
|
|
|
if ((0, _canUseDom["default"])()) {
|
|
|
(0, _dynamicCSS.updateCSS)(style, "".concat(dynamicStyleMark, "-dynamic-theme"));
|
|
|
} else {
|
|
|
true ? (0, _warning["default"])(false, 'ConfigProvider', 'SSR do not support dynamic theme with css variables.') : 0;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/antd/lib/config-provider/index.js":
|
|
|
/*!********************************************************!*\
|
|
|
!*** ./node_modules/antd/lib/config-provider/index.js ***!
|
|
|
\********************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
var _interopRequireWildcard = (__webpack_require__(/*! @babel/runtime/helpers/interopRequireWildcard */ "./node_modules/@babel/runtime/helpers/interopRequireWildcard.js")["default"]);
|
|
|
var _interopRequireDefault = (__webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js")["default"]);
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
Object.defineProperty(exports, "ConfigConsumer", ({
|
|
|
enumerable: true,
|
|
|
get: function get() {
|
|
|
return _context.ConfigConsumer;
|
|
|
}
|
|
|
}));
|
|
|
Object.defineProperty(exports, "ConfigContext", ({
|
|
|
enumerable: true,
|
|
|
get: function get() {
|
|
|
return _context.ConfigContext;
|
|
|
}
|
|
|
}));
|
|
|
exports.globalConfig = exports.defaultPrefixCls = exports.defaultIconPrefixCls = exports["default"] = exports.configConsumerProps = void 0;
|
|
|
var _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ "./node_modules/@babel/runtime/helpers/extends.js"));
|
|
|
var _Context = _interopRequireDefault(__webpack_require__(/*! @ant-design/icons/lib/components/Context */ "./node_modules/@ant-design/icons/lib/components/Context.js"));
|
|
|
var _rcFieldForm = __webpack_require__(/*! rc-field-form */ "./node_modules/rc-field-form/es/index.js");
|
|
|
var _useMemo = _interopRequireDefault(__webpack_require__(/*! rc-util/lib/hooks/useMemo */ "./node_modules/rc-util/lib/hooks/useMemo.js"));
|
|
|
var React = _interopRequireWildcard(__webpack_require__(/*! react */ "./node_modules/react/index.js"));
|
|
|
var _localeProvider = _interopRequireWildcard(__webpack_require__(/*! ../locale-provider */ "./node_modules/antd/lib/locale-provider/index.js"));
|
|
|
var _LocaleReceiver = _interopRequireDefault(__webpack_require__(/*! ../locale-provider/LocaleReceiver */ "./node_modules/antd/lib/locale-provider/LocaleReceiver.js"));
|
|
|
var _default2 = _interopRequireDefault(__webpack_require__(/*! ../locale/default */ "./node_modules/antd/lib/locale/default.js"));
|
|
|
var _message = _interopRequireDefault(__webpack_require__(/*! ../message */ "./node_modules/antd/lib/message/index.js"));
|
|
|
var _notification = _interopRequireDefault(__webpack_require__(/*! ../notification */ "./node_modules/antd/lib/notification/index.js"));
|
|
|
var _context = __webpack_require__(/*! ./context */ "./node_modules/antd/lib/config-provider/context.js");
|
|
|
var _cssVariables = __webpack_require__(/*! ./cssVariables */ "./node_modules/antd/lib/config-provider/cssVariables.js");
|
|
|
var _DisabledContext = __webpack_require__(/*! ./DisabledContext */ "./node_modules/antd/lib/config-provider/DisabledContext.js");
|
|
|
var _SizeContext = _interopRequireWildcard(__webpack_require__(/*! ./SizeContext */ "./node_modules/antd/lib/config-provider/SizeContext.js"));
|
|
|
var configConsumerProps = ['getTargetContainer', 'getPopupContainer', 'rootPrefixCls', 'getPrefixCls', 'renderEmpty', 'csp', 'autoInsertSpaceInButton', 'locale', 'pageHeader'];
|
|
|
// These props is used by `useContext` directly in sub component
|
|
|
exports.configConsumerProps = configConsumerProps;
|
|
|
var PASSED_PROPS = ['getTargetContainer', 'getPopupContainer', 'renderEmpty', 'pageHeader', 'input', 'pagination', 'form'];
|
|
|
var defaultPrefixCls = 'ant';
|
|
|
exports.defaultPrefixCls = defaultPrefixCls;
|
|
|
var defaultIconPrefixCls = 'anticon';
|
|
|
exports.defaultIconPrefixCls = defaultIconPrefixCls;
|
|
|
var globalPrefixCls;
|
|
|
var globalIconPrefixCls;
|
|
|
function getGlobalPrefixCls() {
|
|
|
return globalPrefixCls || defaultPrefixCls;
|
|
|
}
|
|
|
function getGlobalIconPrefixCls() {
|
|
|
return globalIconPrefixCls || defaultIconPrefixCls;
|
|
|
}
|
|
|
var setGlobalConfig = function setGlobalConfig(_ref) {
|
|
|
var prefixCls = _ref.prefixCls,
|
|
|
iconPrefixCls = _ref.iconPrefixCls,
|
|
|
theme = _ref.theme;
|
|
|
if (prefixCls !== undefined) {
|
|
|
globalPrefixCls = prefixCls;
|
|
|
}
|
|
|
if (iconPrefixCls !== undefined) {
|
|
|
globalIconPrefixCls = iconPrefixCls;
|
|
|
}
|
|
|
if (theme) {
|
|
|
(0, _cssVariables.registerTheme)(getGlobalPrefixCls(), theme);
|
|
|
}
|
|
|
};
|
|
|
var globalConfig = function globalConfig() {
|
|
|
return {
|
|
|
getPrefixCls: function getPrefixCls(suffixCls, customizePrefixCls) {
|
|
|
if (customizePrefixCls) return customizePrefixCls;
|
|
|
return suffixCls ? "".concat(getGlobalPrefixCls(), "-").concat(suffixCls) : getGlobalPrefixCls();
|
|
|
},
|
|
|
getIconPrefixCls: getGlobalIconPrefixCls,
|
|
|
getRootPrefixCls: function getRootPrefixCls(rootPrefixCls, customizePrefixCls) {
|
|
|
// Customize rootPrefixCls is first priority
|
|
|
if (rootPrefixCls) {
|
|
|
return rootPrefixCls;
|
|
|
}
|
|
|
// If Global prefixCls provided, use this
|
|
|
if (globalPrefixCls) {
|
|
|
return globalPrefixCls;
|
|
|
}
|
|
|
// [Legacy] If customize prefixCls provided, we cut it to get the prefixCls
|
|
|
if (customizePrefixCls && customizePrefixCls.includes('-')) {
|
|
|
return customizePrefixCls.replace(/^(.*)-[^-]*$/, '$1');
|
|
|
}
|
|
|
// Fallback to default prefixCls
|
|
|
return getGlobalPrefixCls();
|
|
|
}
|
|
|
};
|
|
|
};
|
|
|
exports.globalConfig = globalConfig;
|
|
|
var ProviderChildren = function ProviderChildren(props) {
|
|
|
var _a, _b;
|
|
|
var children = props.children,
|
|
|
csp = props.csp,
|
|
|
autoInsertSpaceInButton = props.autoInsertSpaceInButton,
|
|
|
form = props.form,
|
|
|
locale = props.locale,
|
|
|
componentSize = props.componentSize,
|
|
|
direction = props.direction,
|
|
|
space = props.space,
|
|
|
virtual = props.virtual,
|
|
|
dropdownMatchSelectWidth = props.dropdownMatchSelectWidth,
|
|
|
legacyLocale = props.legacyLocale,
|
|
|
parentContext = props.parentContext,
|
|
|
iconPrefixCls = props.iconPrefixCls,
|
|
|
componentDisabled = props.componentDisabled;
|
|
|
var getPrefixCls = React.useCallback(function (suffixCls, customizePrefixCls) {
|
|
|
var prefixCls = props.prefixCls;
|
|
|
if (customizePrefixCls) return customizePrefixCls;
|
|
|
var mergedPrefixCls = prefixCls || parentContext.getPrefixCls('');
|
|
|
return suffixCls ? "".concat(mergedPrefixCls, "-").concat(suffixCls) : mergedPrefixCls;
|
|
|
}, [parentContext.getPrefixCls, props.prefixCls]);
|
|
|
var config = (0, _extends2["default"])((0, _extends2["default"])({}, parentContext), {
|
|
|
csp: csp,
|
|
|
autoInsertSpaceInButton: autoInsertSpaceInButton,
|
|
|
locale: locale || legacyLocale,
|
|
|
direction: direction,
|
|
|
space: space,
|
|
|
virtual: virtual,
|
|
|
dropdownMatchSelectWidth: dropdownMatchSelectWidth,
|
|
|
getPrefixCls: getPrefixCls
|
|
|
});
|
|
|
// Pass the props used by `useContext` directly with child component.
|
|
|
// These props should merged into `config`.
|
|
|
PASSED_PROPS.forEach(function (propName) {
|
|
|
var propValue = props[propName];
|
|
|
if (propValue) {
|
|
|
config[propName] = propValue;
|
|
|
}
|
|
|
});
|
|
|
// https://github.com/ant-design/ant-design/issues/27617
|
|
|
var memoedConfig = (0, _useMemo["default"])(function () {
|
|
|
return config;
|
|
|
}, config, function (prevConfig, currentConfig) {
|
|
|
var prevKeys = Object.keys(prevConfig);
|
|
|
var currentKeys = Object.keys(currentConfig);
|
|
|
return prevKeys.length !== currentKeys.length || prevKeys.some(function (key) {
|
|
|
return prevConfig[key] !== currentConfig[key];
|
|
|
});
|
|
|
});
|
|
|
var memoIconContextValue = React.useMemo(function () {
|
|
|
return {
|
|
|
prefixCls: iconPrefixCls,
|
|
|
csp: csp
|
|
|
};
|
|
|
}, [iconPrefixCls, csp]);
|
|
|
var childNode = children;
|
|
|
// Additional Form provider
|
|
|
var validateMessages = {};
|
|
|
if (locale) {
|
|
|
validateMessages = ((_a = locale.Form) === null || _a === void 0 ? void 0 : _a.defaultValidateMessages) || ((_b = _default2["default"].Form) === null || _b === void 0 ? void 0 : _b.defaultValidateMessages) || {};
|
|
|
}
|
|
|
if (form && form.validateMessages) {
|
|
|
validateMessages = (0, _extends2["default"])((0, _extends2["default"])({}, validateMessages), form.validateMessages);
|
|
|
}
|
|
|
if (Object.keys(validateMessages).length > 0) {
|
|
|
childNode = /*#__PURE__*/React.createElement(_rcFieldForm.FormProvider, {
|
|
|
validateMessages: validateMessages
|
|
|
}, children);
|
|
|
}
|
|
|
if (locale) {
|
|
|
childNode = /*#__PURE__*/React.createElement(_localeProvider["default"], {
|
|
|
locale: locale,
|
|
|
_ANT_MARK__: _localeProvider.ANT_MARK
|
|
|
}, childNode);
|
|
|
}
|
|
|
if (iconPrefixCls || csp) {
|
|
|
childNode = /*#__PURE__*/React.createElement(_Context["default"].Provider, {
|
|
|
value: memoIconContextValue
|
|
|
}, childNode);
|
|
|
}
|
|
|
if (componentSize) {
|
|
|
childNode = /*#__PURE__*/React.createElement(_SizeContext.SizeContextProvider, {
|
|
|
size: componentSize
|
|
|
}, childNode);
|
|
|
}
|
|
|
if (componentDisabled !== undefined) {
|
|
|
childNode = /*#__PURE__*/React.createElement(_DisabledContext.DisabledContextProvider, {
|
|
|
disabled: componentDisabled
|
|
|
}, childNode);
|
|
|
}
|
|
|
return /*#__PURE__*/React.createElement(_context.ConfigContext.Provider, {
|
|
|
value: memoedConfig
|
|
|
}, childNode);
|
|
|
};
|
|
|
var ConfigProvider = function ConfigProvider(props) {
|
|
|
React.useEffect(function () {
|
|
|
if (props.direction) {
|
|
|
_message["default"].config({
|
|
|
rtl: props.direction === 'rtl'
|
|
|
});
|
|
|
_notification["default"].config({
|
|
|
rtl: props.direction === 'rtl'
|
|
|
});
|
|
|
}
|
|
|
}, [props.direction]);
|
|
|
return /*#__PURE__*/React.createElement(_LocaleReceiver["default"], null, function (_, __, legacyLocale) {
|
|
|
return /*#__PURE__*/React.createElement(_context.ConfigConsumer, null, function (context) {
|
|
|
return /*#__PURE__*/React.createElement(ProviderChildren, (0, _extends2["default"])({
|
|
|
parentContext: context,
|
|
|
legacyLocale: legacyLocale
|
|
|
}, props));
|
|
|
});
|
|
|
});
|
|
|
};
|
|
|
/** @private internal Usage. do not use in your production */
|
|
|
ConfigProvider.ConfigContext = _context.ConfigContext;
|
|
|
ConfigProvider.SizeContext = _SizeContext["default"];
|
|
|
ConfigProvider.config = setGlobalConfig;
|
|
|
var _default = ConfigProvider;
|
|
|
exports["default"] = _default;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/antd/lib/date-picker/locale/en_US.js":
|
|
|
/*!***********************************************************!*\
|
|
|
!*** ./node_modules/antd/lib/date-picker/locale/en_US.js ***!
|
|
|
\***********************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
var _interopRequireDefault = (__webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js")["default"]);
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports["default"] = void 0;
|
|
|
var _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ "./node_modules/@babel/runtime/helpers/extends.js"));
|
|
|
var _en_US = _interopRequireDefault(__webpack_require__(/*! rc-picker/lib/locale/en_US */ "./node_modules/rc-picker/lib/locale/en_US.js"));
|
|
|
var _en_US2 = _interopRequireDefault(__webpack_require__(/*! ../../time-picker/locale/en_US */ "./node_modules/antd/lib/time-picker/locale/en_US.js"));
|
|
|
// Merge into a locale object
|
|
|
var locale = {
|
|
|
lang: (0, _extends2["default"])({
|
|
|
placeholder: 'Select date',
|
|
|
yearPlaceholder: 'Select year',
|
|
|
quarterPlaceholder: 'Select quarter',
|
|
|
monthPlaceholder: 'Select month',
|
|
|
weekPlaceholder: 'Select week',
|
|
|
rangePlaceholder: ['Start date', 'End date'],
|
|
|
rangeYearPlaceholder: ['Start year', 'End year'],
|
|
|
rangeQuarterPlaceholder: ['Start quarter', 'End quarter'],
|
|
|
rangeMonthPlaceholder: ['Start month', 'End month'],
|
|
|
rangeWeekPlaceholder: ['Start week', 'End week']
|
|
|
}, _en_US["default"]),
|
|
|
timePickerLocale: (0, _extends2["default"])({}, _en_US2["default"])
|
|
|
};
|
|
|
// All settings at:
|
|
|
// https://github.com/ant-design/ant-design/blob/master/components/date-picker/locale/example.json
|
|
|
var _default = locale;
|
|
|
exports["default"] = _default;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/antd/lib/locale-provider/LocaleReceiver.js":
|
|
|
/*!*****************************************************************!*\
|
|
|
!*** ./node_modules/antd/lib/locale-provider/LocaleReceiver.js ***!
|
|
|
\*****************************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
var _interopRequireWildcard = (__webpack_require__(/*! @babel/runtime/helpers/interopRequireWildcard */ "./node_modules/@babel/runtime/helpers/interopRequireWildcard.js")["default"]);
|
|
|
var _interopRequireDefault = (__webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js")["default"]);
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports.useLocaleReceiver = exports["default"] = void 0;
|
|
|
var _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ "./node_modules/@babel/runtime/helpers/extends.js"));
|
|
|
var React = _interopRequireWildcard(__webpack_require__(/*! react */ "./node_modules/react/index.js"));
|
|
|
var _context = _interopRequireDefault(__webpack_require__(/*! ./context */ "./node_modules/antd/lib/locale-provider/context.js"));
|
|
|
var _default2 = _interopRequireDefault(__webpack_require__(/*! ./default */ "./node_modules/antd/lib/locale-provider/default.js"));
|
|
|
var LocaleReceiver = function LocaleReceiver(props) {
|
|
|
var _props$componentName = props.componentName,
|
|
|
componentName = _props$componentName === void 0 ? 'global' : _props$componentName,
|
|
|
defaultLocale = props.defaultLocale,
|
|
|
children = props.children;
|
|
|
var antLocale = React.useContext(_context["default"]);
|
|
|
var getLocale = React.useMemo(function () {
|
|
|
var _a;
|
|
|
var locale = defaultLocale || _default2["default"][componentName];
|
|
|
var localeFromContext = (_a = antLocale === null || antLocale === void 0 ? void 0 : antLocale[componentName]) !== null && _a !== void 0 ? _a : {};
|
|
|
return (0, _extends2["default"])((0, _extends2["default"])({}, locale instanceof Function ? locale() : locale), localeFromContext || {});
|
|
|
}, [componentName, defaultLocale, antLocale]);
|
|
|
var getLocaleCode = React.useMemo(function () {
|
|
|
var localeCode = antLocale && antLocale.locale;
|
|
|
// Had use LocaleProvide but didn't set locale
|
|
|
if (antLocale && antLocale.exist && !localeCode) {
|
|
|
return _default2["default"].locale;
|
|
|
}
|
|
|
return localeCode;
|
|
|
}, [antLocale]);
|
|
|
return children(getLocale, getLocaleCode, antLocale);
|
|
|
};
|
|
|
var _default = LocaleReceiver;
|
|
|
exports["default"] = _default;
|
|
|
var useLocaleReceiver = function useLocaleReceiver(componentName, defaultLocale) {
|
|
|
var antLocale = React.useContext(_context["default"]);
|
|
|
var getLocale = React.useMemo(function () {
|
|
|
var _a;
|
|
|
var locale = defaultLocale || _default2["default"][componentName];
|
|
|
var localeFromContext = (_a = antLocale === null || antLocale === void 0 ? void 0 : antLocale[componentName]) !== null && _a !== void 0 ? _a : {};
|
|
|
return (0, _extends2["default"])((0, _extends2["default"])({}, typeof locale === 'function' ? locale() : locale), localeFromContext || {});
|
|
|
}, [componentName, defaultLocale, antLocale]);
|
|
|
return [getLocale];
|
|
|
};
|
|
|
exports.useLocaleReceiver = useLocaleReceiver;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/antd/lib/locale-provider/context.js":
|
|
|
/*!**********************************************************!*\
|
|
|
!*** ./node_modules/antd/lib/locale-provider/context.js ***!
|
|
|
\**********************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports["default"] = void 0;
|
|
|
var _react = __webpack_require__(/*! react */ "./node_modules/react/index.js");
|
|
|
var LocaleContext = /*#__PURE__*/(0, _react.createContext)(undefined);
|
|
|
var _default = LocaleContext;
|
|
|
exports["default"] = _default;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/antd/lib/locale-provider/default.js":
|
|
|
/*!**********************************************************!*\
|
|
|
!*** ./node_modules/antd/lib/locale-provider/default.js ***!
|
|
|
\**********************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
var _interopRequireDefault = (__webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js")["default"]);
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports["default"] = void 0;
|
|
|
var _default2 = _interopRequireDefault(__webpack_require__(/*! ../locale/default */ "./node_modules/antd/lib/locale/default.js"));
|
|
|
var _default = _default2["default"];
|
|
|
exports["default"] = _default;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/antd/lib/locale-provider/index.js":
|
|
|
/*!********************************************************!*\
|
|
|
!*** ./node_modules/antd/lib/locale-provider/index.js ***!
|
|
|
\********************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
var _interopRequireWildcard = (__webpack_require__(/*! @babel/runtime/helpers/interopRequireWildcard */ "./node_modules/@babel/runtime/helpers/interopRequireWildcard.js")["default"]);
|
|
|
var _interopRequireDefault = (__webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js")["default"]);
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports["default"] = exports.ANT_MARK = void 0;
|
|
|
var _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ "./node_modules/@babel/runtime/helpers/extends.js"));
|
|
|
var React = _interopRequireWildcard(__webpack_require__(/*! react */ "./node_modules/react/index.js"));
|
|
|
var _warning = _interopRequireDefault(__webpack_require__(/*! ../_util/warning */ "./node_modules/antd/lib/_util/warning.js"));
|
|
|
var _locale = __webpack_require__(/*! ../modal/locale */ "./node_modules/antd/lib/modal/locale.js");
|
|
|
var _context = _interopRequireDefault(__webpack_require__(/*! ./context */ "./node_modules/antd/lib/locale-provider/context.js"));
|
|
|
var ANT_MARK = 'internalMark';
|
|
|
exports.ANT_MARK = ANT_MARK;
|
|
|
var LocaleProvider = function LocaleProvider(props) {
|
|
|
var _props$locale = props.locale,
|
|
|
locale = _props$locale === void 0 ? {} : _props$locale,
|
|
|
children = props.children,
|
|
|
_ANT_MARK__ = props._ANT_MARK__;
|
|
|
if (true) {
|
|
|
true ? (0, _warning["default"])(_ANT_MARK__ === ANT_MARK, 'LocaleProvider', '`LocaleProvider` is deprecated. Please use `locale` with `ConfigProvider` instead: http://u.ant.design/locale') : 0;
|
|
|
}
|
|
|
React.useEffect(function () {
|
|
|
(0, _locale.changeConfirmLocale)(locale && locale.Modal);
|
|
|
return function () {
|
|
|
(0, _locale.changeConfirmLocale)();
|
|
|
};
|
|
|
}, [locale]);
|
|
|
var getMemoizedContextValue = React.useMemo(function () {
|
|
|
return (0, _extends2["default"])((0, _extends2["default"])({}, locale), {
|
|
|
exist: true
|
|
|
});
|
|
|
}, [locale]);
|
|
|
return /*#__PURE__*/React.createElement(_context["default"].Provider, {
|
|
|
value: getMemoizedContextValue
|
|
|
}, children);
|
|
|
};
|
|
|
var _default = LocaleProvider;
|
|
|
exports["default"] = _default;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/antd/lib/locale/default.js":
|
|
|
/*!*************************************************!*\
|
|
|
!*** ./node_modules/antd/lib/locale/default.js ***!
|
|
|
\*************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
var _interopRequireDefault = (__webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js")["default"]);
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports["default"] = void 0;
|
|
|
var _en_US = _interopRequireDefault(__webpack_require__(/*! rc-pagination/lib/locale/en_US */ "./node_modules/rc-pagination/lib/locale/en_US.js"));
|
|
|
var _en_US2 = _interopRequireDefault(__webpack_require__(/*! ../calendar/locale/en_US */ "./node_modules/antd/lib/calendar/locale/en_US.js"));
|
|
|
var _en_US3 = _interopRequireDefault(__webpack_require__(/*! ../date-picker/locale/en_US */ "./node_modules/antd/lib/date-picker/locale/en_US.js"));
|
|
|
var _en_US4 = _interopRequireDefault(__webpack_require__(/*! ../time-picker/locale/en_US */ "./node_modules/antd/lib/time-picker/locale/en_US.js"));
|
|
|
/* eslint-disable no-template-curly-in-string */
|
|
|
|
|
|
var typeTemplate = '${label} is not a valid ${type}';
|
|
|
var localeValues = {
|
|
|
locale: 'en',
|
|
|
Pagination: _en_US["default"],
|
|
|
DatePicker: _en_US3["default"],
|
|
|
TimePicker: _en_US4["default"],
|
|
|
Calendar: _en_US2["default"],
|
|
|
global: {
|
|
|
placeholder: 'Please select'
|
|
|
},
|
|
|
Table: {
|
|
|
filterTitle: 'Filter menu',
|
|
|
filterConfirm: 'OK',
|
|
|
filterReset: 'Reset',
|
|
|
filterEmptyText: 'No filters',
|
|
|
filterCheckall: 'Select all items',
|
|
|
filterSearchPlaceholder: 'Search in filters',
|
|
|
emptyText: 'No data',
|
|
|
selectAll: 'Select current page',
|
|
|
selectInvert: 'Invert current page',
|
|
|
selectNone: 'Clear all data',
|
|
|
selectionAll: 'Select all data',
|
|
|
sortTitle: 'Sort',
|
|
|
expand: 'Expand row',
|
|
|
collapse: 'Collapse row',
|
|
|
triggerDesc: 'Click to sort descending',
|
|
|
triggerAsc: 'Click to sort ascending',
|
|
|
cancelSort: 'Click to cancel sorting'
|
|
|
},
|
|
|
Modal: {
|
|
|
okText: 'OK',
|
|
|
cancelText: 'Cancel',
|
|
|
justOkText: 'OK'
|
|
|
},
|
|
|
Popconfirm: {
|
|
|
okText: 'OK',
|
|
|
cancelText: 'Cancel'
|
|
|
},
|
|
|
Transfer: {
|
|
|
titles: ['', ''],
|
|
|
searchPlaceholder: 'Search here',
|
|
|
itemUnit: 'item',
|
|
|
itemsUnit: 'items',
|
|
|
remove: 'Remove',
|
|
|
selectCurrent: 'Select current page',
|
|
|
removeCurrent: 'Remove current page',
|
|
|
selectAll: 'Select all data',
|
|
|
removeAll: 'Remove all data',
|
|
|
selectInvert: 'Invert current page'
|
|
|
},
|
|
|
Upload: {
|
|
|
uploading: 'Uploading...',
|
|
|
removeFile: 'Remove file',
|
|
|
uploadError: 'Upload error',
|
|
|
previewFile: 'Preview file',
|
|
|
downloadFile: 'Download file'
|
|
|
},
|
|
|
Empty: {
|
|
|
description: 'No data'
|
|
|
},
|
|
|
Icon: {
|
|
|
icon: 'icon'
|
|
|
},
|
|
|
Text: {
|
|
|
edit: 'Edit',
|
|
|
copy: 'Copy',
|
|
|
copied: 'Copied',
|
|
|
expand: 'Expand'
|
|
|
},
|
|
|
PageHeader: {
|
|
|
back: 'Back'
|
|
|
},
|
|
|
Form: {
|
|
|
optional: '(optional)',
|
|
|
defaultValidateMessages: {
|
|
|
"default": 'Field validation error for ${label}',
|
|
|
required: 'Please enter ${label}',
|
|
|
"enum": '${label} must be one of [${enum}]',
|
|
|
whitespace: '${label} cannot be a blank character',
|
|
|
date: {
|
|
|
format: '${label} date format is invalid',
|
|
|
parse: '${label} cannot be converted to a date',
|
|
|
invalid: '${label} is an invalid date'
|
|
|
},
|
|
|
types: {
|
|
|
string: typeTemplate,
|
|
|
method: typeTemplate,
|
|
|
array: typeTemplate,
|
|
|
object: typeTemplate,
|
|
|
number: typeTemplate,
|
|
|
date: typeTemplate,
|
|
|
"boolean": typeTemplate,
|
|
|
integer: typeTemplate,
|
|
|
"float": typeTemplate,
|
|
|
regexp: typeTemplate,
|
|
|
email: typeTemplate,
|
|
|
url: typeTemplate,
|
|
|
hex: typeTemplate
|
|
|
},
|
|
|
string: {
|
|
|
len: '${label} must be ${len} characters',
|
|
|
min: '${label} must be at least ${min} characters',
|
|
|
max: '${label} must be up to ${max} characters',
|
|
|
range: '${label} must be between ${min}-${max} characters'
|
|
|
},
|
|
|
number: {
|
|
|
len: '${label} must be equal to ${len}',
|
|
|
min: '${label} must be minimum ${min}',
|
|
|
max: '${label} must be maximum ${max}',
|
|
|
range: '${label} must be between ${min}-${max}'
|
|
|
},
|
|
|
array: {
|
|
|
len: 'Must be ${len} ${label}',
|
|
|
min: 'At least ${min} ${label}',
|
|
|
max: 'At most ${max} ${label}',
|
|
|
range: 'The amount of ${label} must be between ${min}-${max}'
|
|
|
},
|
|
|
pattern: {
|
|
|
mismatch: '${label} does not match the pattern ${pattern}'
|
|
|
}
|
|
|
}
|
|
|
},
|
|
|
Image: {
|
|
|
preview: 'Preview'
|
|
|
}
|
|
|
};
|
|
|
var _default = localeValues;
|
|
|
exports["default"] = _default;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/antd/lib/message/hooks/useMessage.js":
|
|
|
/*!***********************************************************!*\
|
|
|
!*** ./node_modules/antd/lib/message/hooks/useMessage.js ***!
|
|
|
\***********************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
var _interopRequireWildcard = (__webpack_require__(/*! @babel/runtime/helpers/interopRequireWildcard */ "./node_modules/@babel/runtime/helpers/interopRequireWildcard.js")["default"]);
|
|
|
var _interopRequireDefault = (__webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js")["default"]);
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports["default"] = createUseMessage;
|
|
|
var _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ "./node_modules/@babel/runtime/helpers/extends.js"));
|
|
|
var _slicedToArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ "./node_modules/@babel/runtime/helpers/slicedToArray.js"));
|
|
|
var _useNotification = _interopRequireDefault(__webpack_require__(/*! rc-notification/lib/useNotification */ "./node_modules/rc-notification/lib/useNotification.js"));
|
|
|
var React = _interopRequireWildcard(__webpack_require__(/*! react */ "./node_modules/react/index.js"));
|
|
|
var _ = __webpack_require__(/*! .. */ "./node_modules/antd/lib/message/index.js");
|
|
|
var _configProvider = __webpack_require__(/*! ../../config-provider */ "./node_modules/antd/lib/config-provider/index.js");
|
|
|
function createUseMessage(getRcNotificationInstance, getRCNoticeProps) {
|
|
|
var useMessage = function useMessage() {
|
|
|
// We can only get content by render
|
|
|
var getPrefixCls;
|
|
|
var getPopupContainer;
|
|
|
// We create a proxy to handle delay created instance
|
|
|
var innerInstance = null;
|
|
|
var proxy = {
|
|
|
add: function add(noticeProps, holderCallback) {
|
|
|
innerInstance === null || innerInstance === void 0 ? void 0 : innerInstance.component.add(noticeProps, holderCallback);
|
|
|
}
|
|
|
};
|
|
|
var _useRCNotification = (0, _useNotification["default"])(proxy),
|
|
|
_useRCNotification2 = (0, _slicedToArray2["default"])(_useRCNotification, 2),
|
|
|
hookNotify = _useRCNotification2[0],
|
|
|
holder = _useRCNotification2[1];
|
|
|
function notify(args) {
|
|
|
var customizePrefixCls = args.prefixCls;
|
|
|
var mergedPrefixCls = getPrefixCls('message', customizePrefixCls);
|
|
|
var rootPrefixCls = getPrefixCls();
|
|
|
var target = args.key || (0, _.getKeyThenIncreaseKey)();
|
|
|
var closePromise = new Promise(function (resolve) {
|
|
|
var callback = function callback() {
|
|
|
if (typeof args.onClose === 'function') {
|
|
|
args.onClose();
|
|
|
}
|
|
|
return resolve(true);
|
|
|
};
|
|
|
getRcNotificationInstance((0, _extends2["default"])((0, _extends2["default"])({}, args), {
|
|
|
prefixCls: mergedPrefixCls,
|
|
|
rootPrefixCls: rootPrefixCls,
|
|
|
getPopupContainer: getPopupContainer
|
|
|
}), function (_ref) {
|
|
|
var prefixCls = _ref.prefixCls,
|
|
|
instance = _ref.instance;
|
|
|
innerInstance = instance;
|
|
|
hookNotify(getRCNoticeProps((0, _extends2["default"])((0, _extends2["default"])({}, args), {
|
|
|
key: target,
|
|
|
onClose: callback
|
|
|
}), prefixCls));
|
|
|
});
|
|
|
});
|
|
|
var result = function result() {
|
|
|
if (innerInstance) {
|
|
|
innerInstance.removeNotice(target);
|
|
|
}
|
|
|
};
|
|
|
result.then = function (filled, rejected) {
|
|
|
return closePromise.then(filled, rejected);
|
|
|
};
|
|
|
result.promise = closePromise;
|
|
|
return result;
|
|
|
}
|
|
|
// Fill functions
|
|
|
var hookApiRef = React.useRef({});
|
|
|
hookApiRef.current.open = notify;
|
|
|
_.typeList.forEach(function (type) {
|
|
|
return (0, _.attachTypeApi)(hookApiRef.current, type);
|
|
|
});
|
|
|
return [hookApiRef.current, /*#__PURE__*/React.createElement(_configProvider.ConfigConsumer, {
|
|
|
key: "holder"
|
|
|
}, function (context) {
|
|
|
getPrefixCls = context.getPrefixCls;
|
|
|
getPopupContainer = context.getPopupContainer;
|
|
|
return holder;
|
|
|
})];
|
|
|
};
|
|
|
return useMessage;
|
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/antd/lib/message/index.js":
|
|
|
/*!************************************************!*\
|
|
|
!*** ./node_modules/antd/lib/message/index.js ***!
|
|
|
\************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
var _interopRequireWildcard = (__webpack_require__(/*! @babel/runtime/helpers/interopRequireWildcard */ "./node_modules/@babel/runtime/helpers/interopRequireWildcard.js")["default"]);
|
|
|
var _interopRequireDefault = (__webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js")["default"]);
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports.attachTypeApi = attachTypeApi;
|
|
|
exports.getInstance = exports["default"] = void 0;
|
|
|
exports.getKeyThenIncreaseKey = getKeyThenIncreaseKey;
|
|
|
exports.typeList = void 0;
|
|
|
var _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ "./node_modules/@babel/runtime/helpers/extends.js"));
|
|
|
var _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "./node_modules/@babel/runtime/helpers/defineProperty.js"));
|
|
|
var _CheckCircleFilled = _interopRequireDefault(__webpack_require__(/*! @ant-design/icons/CheckCircleFilled */ "./node_modules/@ant-design/icons/CheckCircleFilled.js"));
|
|
|
var _CloseCircleFilled = _interopRequireDefault(__webpack_require__(/*! @ant-design/icons/CloseCircleFilled */ "./node_modules/@ant-design/icons/CloseCircleFilled.js"));
|
|
|
var _ExclamationCircleFilled = _interopRequireDefault(__webpack_require__(/*! @ant-design/icons/ExclamationCircleFilled */ "./node_modules/@ant-design/icons/ExclamationCircleFilled.js"));
|
|
|
var _InfoCircleFilled = _interopRequireDefault(__webpack_require__(/*! @ant-design/icons/InfoCircleFilled */ "./node_modules/@ant-design/icons/InfoCircleFilled.js"));
|
|
|
var _LoadingOutlined = _interopRequireDefault(__webpack_require__(/*! @ant-design/icons/LoadingOutlined */ "./node_modules/@ant-design/icons/LoadingOutlined.js"));
|
|
|
var _classnames = _interopRequireDefault(__webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"));
|
|
|
var _rcNotification = _interopRequireDefault(__webpack_require__(/*! rc-notification */ "./node_modules/rc-notification/es/index.js"));
|
|
|
var React = _interopRequireWildcard(__webpack_require__(/*! react */ "./node_modules/react/index.js"));
|
|
|
var _configProvider = _interopRequireWildcard(__webpack_require__(/*! ../config-provider */ "./node_modules/antd/lib/config-provider/index.js"));
|
|
|
var _useMessage = _interopRequireDefault(__webpack_require__(/*! ./hooks/useMessage */ "./node_modules/antd/lib/message/hooks/useMessage.js"));
|
|
|
var messageInstance;
|
|
|
var defaultDuration = 3;
|
|
|
var defaultTop;
|
|
|
var key = 1;
|
|
|
var localPrefixCls = '';
|
|
|
var transitionName = 'move-up';
|
|
|
var hasTransitionName = false;
|
|
|
var getContainer;
|
|
|
var maxCount;
|
|
|
var rtl = false;
|
|
|
function getKeyThenIncreaseKey() {
|
|
|
return key++;
|
|
|
}
|
|
|
function setMessageConfig(options) {
|
|
|
if (options.top !== undefined) {
|
|
|
defaultTop = options.top;
|
|
|
messageInstance = null; // delete messageInstance for new defaultTop
|
|
|
}
|
|
|
|
|
|
if (options.duration !== undefined) {
|
|
|
defaultDuration = options.duration;
|
|
|
}
|
|
|
if (options.prefixCls !== undefined) {
|
|
|
localPrefixCls = options.prefixCls;
|
|
|
}
|
|
|
if (options.getContainer !== undefined) {
|
|
|
getContainer = options.getContainer;
|
|
|
messageInstance = null; // delete messageInstance for new getContainer
|
|
|
}
|
|
|
|
|
|
if (options.transitionName !== undefined) {
|
|
|
transitionName = options.transitionName;
|
|
|
messageInstance = null; // delete messageInstance for new transitionName
|
|
|
hasTransitionName = true;
|
|
|
}
|
|
|
if (options.maxCount !== undefined) {
|
|
|
maxCount = options.maxCount;
|
|
|
messageInstance = null;
|
|
|
}
|
|
|
if (options.rtl !== undefined) {
|
|
|
rtl = options.rtl;
|
|
|
}
|
|
|
}
|
|
|
function getRCNotificationInstance(args, callback) {
|
|
|
var customizePrefixCls = args.prefixCls,
|
|
|
getContextPopupContainer = args.getPopupContainer;
|
|
|
var _globalConfig = (0, _configProvider.globalConfig)(),
|
|
|
getPrefixCls = _globalConfig.getPrefixCls,
|
|
|
getRootPrefixCls = _globalConfig.getRootPrefixCls,
|
|
|
getIconPrefixCls = _globalConfig.getIconPrefixCls;
|
|
|
var prefixCls = getPrefixCls('message', customizePrefixCls || localPrefixCls);
|
|
|
var rootPrefixCls = getRootPrefixCls(args.rootPrefixCls, prefixCls);
|
|
|
var iconPrefixCls = getIconPrefixCls();
|
|
|
if (messageInstance) {
|
|
|
callback({
|
|
|
prefixCls: prefixCls,
|
|
|
rootPrefixCls: rootPrefixCls,
|
|
|
iconPrefixCls: iconPrefixCls,
|
|
|
instance: messageInstance
|
|
|
});
|
|
|
return;
|
|
|
}
|
|
|
var instanceConfig = {
|
|
|
prefixCls: prefixCls,
|
|
|
transitionName: hasTransitionName ? transitionName : "".concat(rootPrefixCls, "-").concat(transitionName),
|
|
|
style: {
|
|
|
top: defaultTop
|
|
|
},
|
|
|
getContainer: getContainer || getContextPopupContainer,
|
|
|
maxCount: maxCount
|
|
|
};
|
|
|
_rcNotification["default"].newInstance(instanceConfig, function (instance) {
|
|
|
if (messageInstance) {
|
|
|
callback({
|
|
|
prefixCls: prefixCls,
|
|
|
rootPrefixCls: rootPrefixCls,
|
|
|
iconPrefixCls: iconPrefixCls,
|
|
|
instance: messageInstance
|
|
|
});
|
|
|
return;
|
|
|
}
|
|
|
messageInstance = instance;
|
|
|
if (false) {}
|
|
|
callback({
|
|
|
prefixCls: prefixCls,
|
|
|
rootPrefixCls: rootPrefixCls,
|
|
|
iconPrefixCls: iconPrefixCls,
|
|
|
instance: instance
|
|
|
});
|
|
|
});
|
|
|
}
|
|
|
var typeToIcon = {
|
|
|
info: _InfoCircleFilled["default"],
|
|
|
success: _CheckCircleFilled["default"],
|
|
|
error: _CloseCircleFilled["default"],
|
|
|
warning: _ExclamationCircleFilled["default"],
|
|
|
loading: _LoadingOutlined["default"]
|
|
|
};
|
|
|
var typeList = Object.keys(typeToIcon);
|
|
|
exports.typeList = typeList;
|
|
|
function getRCNoticeProps(args, prefixCls, iconPrefixCls) {
|
|
|
var _classNames;
|
|
|
var duration = args.duration !== undefined ? args.duration : defaultDuration;
|
|
|
var IconComponent = typeToIcon[args.type];
|
|
|
var messageClass = (0, _classnames["default"])("".concat(prefixCls, "-custom-content"), (_classNames = {}, (0, _defineProperty2["default"])(_classNames, "".concat(prefixCls, "-").concat(args.type), args.type), (0, _defineProperty2["default"])(_classNames, "".concat(prefixCls, "-rtl"), rtl === true), _classNames));
|
|
|
return {
|
|
|
key: args.key,
|
|
|
duration: duration,
|
|
|
style: args.style || {},
|
|
|
className: args.className,
|
|
|
content: /*#__PURE__*/React.createElement(_configProvider["default"], {
|
|
|
iconPrefixCls: iconPrefixCls
|
|
|
}, /*#__PURE__*/React.createElement("div", {
|
|
|
className: messageClass
|
|
|
}, args.icon || IconComponent && /*#__PURE__*/React.createElement(IconComponent, null), /*#__PURE__*/React.createElement("span", null, args.content))),
|
|
|
onClose: args.onClose,
|
|
|
onClick: args.onClick
|
|
|
};
|
|
|
}
|
|
|
function notice(args) {
|
|
|
var target = args.key || getKeyThenIncreaseKey();
|
|
|
var closePromise = new Promise(function (resolve) {
|
|
|
var callback = function callback() {
|
|
|
if (typeof args.onClose === 'function') {
|
|
|
args.onClose();
|
|
|
}
|
|
|
return resolve(true);
|
|
|
};
|
|
|
getRCNotificationInstance(args, function (_ref) {
|
|
|
var prefixCls = _ref.prefixCls,
|
|
|
iconPrefixCls = _ref.iconPrefixCls,
|
|
|
instance = _ref.instance;
|
|
|
instance.notice(getRCNoticeProps((0, _extends2["default"])((0, _extends2["default"])({}, args), {
|
|
|
key: target,
|
|
|
onClose: callback
|
|
|
}), prefixCls, iconPrefixCls));
|
|
|
});
|
|
|
});
|
|
|
var result = function result() {
|
|
|
if (messageInstance) {
|
|
|
messageInstance.removeNotice(target);
|
|
|
}
|
|
|
};
|
|
|
result.then = function (filled, rejected) {
|
|
|
return closePromise.then(filled, rejected);
|
|
|
};
|
|
|
result.promise = closePromise;
|
|
|
return result;
|
|
|
}
|
|
|
function isArgsProps(content) {
|
|
|
return Object.prototype.toString.call(content) === '[object Object]' && !!content.content;
|
|
|
}
|
|
|
var api = {
|
|
|
open: notice,
|
|
|
config: setMessageConfig,
|
|
|
destroy: function destroy(messageKey) {
|
|
|
if (messageInstance) {
|
|
|
if (messageKey) {
|
|
|
var _messageInstance = messageInstance,
|
|
|
removeNotice = _messageInstance.removeNotice;
|
|
|
removeNotice(messageKey);
|
|
|
} else {
|
|
|
var _messageInstance2 = messageInstance,
|
|
|
destroy = _messageInstance2.destroy;
|
|
|
destroy();
|
|
|
messageInstance = null;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
};
|
|
|
function attachTypeApi(originalApi, type) {
|
|
|
originalApi[type] = function (content, duration, onClose) {
|
|
|
if (isArgsProps(content)) {
|
|
|
return originalApi.open((0, _extends2["default"])((0, _extends2["default"])({}, content), {
|
|
|
type: type
|
|
|
}));
|
|
|
}
|
|
|
if (typeof duration === 'function') {
|
|
|
onClose = duration;
|
|
|
duration = undefined;
|
|
|
}
|
|
|
return originalApi.open({
|
|
|
content: content,
|
|
|
duration: duration,
|
|
|
type: type,
|
|
|
onClose: onClose
|
|
|
});
|
|
|
};
|
|
|
}
|
|
|
typeList.forEach(function (type) {
|
|
|
return attachTypeApi(api, type);
|
|
|
});
|
|
|
api.warn = api.warning;
|
|
|
api.useMessage = (0, _useMessage["default"])(getRCNotificationInstance, getRCNoticeProps);
|
|
|
/** @internal test Only function. Not work on production */
|
|
|
var getInstance = function getInstance() {
|
|
|
return false ? 0 : null;
|
|
|
};
|
|
|
exports.getInstance = getInstance;
|
|
|
var _default = api;
|
|
|
exports["default"] = _default;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/antd/lib/modal/locale.js":
|
|
|
/*!***********************************************!*\
|
|
|
!*** ./node_modules/antd/lib/modal/locale.js ***!
|
|
|
\***********************************************/
|
|
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
var _interopRequireDefault = (__webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js")["default"]);
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports.changeConfirmLocale = changeConfirmLocale;
|
|
|
exports.getConfirmLocale = getConfirmLocale;
|
|
|
var _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ "./node_modules/@babel/runtime/helpers/extends.js"));
|
|
|
var _default = _interopRequireDefault(__webpack_require__(/*! ../locale/default */ "./node_modules/antd/lib/locale/default.js"));
|
|
|
var runtimeLocale = (0, _extends2["default"])({}, _default["default"].Modal);
|
|
|
function changeConfirmLocale(newLocale) {
|
|
|
if (newLocale) {
|
|
|
runtimeLocale = (0, _extends2["default"])((0, _extends2["default"])({}, runtimeLocale), newLocale);
|
|
|
} else {
|
|
|
runtimeLocale = (0, _extends2["default"])({}, _default["default"].Modal);
|
|
|
}
|
|
|
}
|
|
|
function getConfirmLocale() {
|
|
|
return runtimeLocale;
|
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/antd/lib/notification/hooks/useNotification.js":
|
|
|
/*!*********************************************************************!*\
|
|
|
!*** ./node_modules/antd/lib/notification/hooks/useNotification.js ***!
|
|
|
\*********************************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
var _interopRequireWildcard = (__webpack_require__(/*! @babel/runtime/helpers/interopRequireWildcard */ "./node_modules/@babel/runtime/helpers/interopRequireWildcard.js")["default"]);
|
|
|
var _interopRequireDefault = (__webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js")["default"]);
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports["default"] = createUseNotification;
|
|
|
var _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ "./node_modules/@babel/runtime/helpers/extends.js"));
|
|
|
var _slicedToArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ "./node_modules/@babel/runtime/helpers/slicedToArray.js"));
|
|
|
var _useNotification = _interopRequireDefault(__webpack_require__(/*! rc-notification/lib/useNotification */ "./node_modules/rc-notification/lib/useNotification.js"));
|
|
|
var React = _interopRequireWildcard(__webpack_require__(/*! react */ "./node_modules/react/index.js"));
|
|
|
var _configProvider = __webpack_require__(/*! ../../config-provider */ "./node_modules/antd/lib/config-provider/index.js");
|
|
|
function createUseNotification(getNotificationInstance, getRCNoticeProps) {
|
|
|
var useNotification = function useNotification() {
|
|
|
// We can only get content by render
|
|
|
var getPrefixCls;
|
|
|
// We create a proxy to handle delay created instance
|
|
|
var innerInstance = null;
|
|
|
var proxy = {
|
|
|
add: function add(noticeProps, holderCallback) {
|
|
|
innerInstance === null || innerInstance === void 0 ? void 0 : innerInstance.component.add(noticeProps, holderCallback);
|
|
|
}
|
|
|
};
|
|
|
var _useRCNotification = (0, _useNotification["default"])(proxy),
|
|
|
_useRCNotification2 = (0, _slicedToArray2["default"])(_useRCNotification, 2),
|
|
|
hookNotify = _useRCNotification2[0],
|
|
|
holder = _useRCNotification2[1];
|
|
|
function notify(args) {
|
|
|
var customizePrefixCls = args.prefixCls;
|
|
|
var mergedPrefixCls = getPrefixCls('notification', customizePrefixCls);
|
|
|
getNotificationInstance((0, _extends2["default"])((0, _extends2["default"])({}, args), {
|
|
|
prefixCls: mergedPrefixCls
|
|
|
}), function (_ref) {
|
|
|
var prefixCls = _ref.prefixCls,
|
|
|
instance = _ref.instance;
|
|
|
innerInstance = instance;
|
|
|
hookNotify(getRCNoticeProps(args, prefixCls));
|
|
|
});
|
|
|
}
|
|
|
// Fill functions
|
|
|
var hookApiRef = React.useRef({});
|
|
|
hookApiRef.current.open = notify;
|
|
|
['success', 'info', 'warning', 'error'].forEach(function (type) {
|
|
|
hookApiRef.current[type] = function (args) {
|
|
|
return hookApiRef.current.open((0, _extends2["default"])((0, _extends2["default"])({}, args), {
|
|
|
type: type
|
|
|
}));
|
|
|
};
|
|
|
});
|
|
|
return [hookApiRef.current, /*#__PURE__*/React.createElement(_configProvider.ConfigConsumer, {
|
|
|
key: "holder"
|
|
|
}, function (context) {
|
|
|
getPrefixCls = context.getPrefixCls;
|
|
|
return holder;
|
|
|
})];
|
|
|
};
|
|
|
return useNotification;
|
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/antd/lib/notification/index.js":
|
|
|
/*!*****************************************************!*\
|
|
|
!*** ./node_modules/antd/lib/notification/index.js ***!
|
|
|
\*****************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
var _interopRequireWildcard = (__webpack_require__(/*! @babel/runtime/helpers/interopRequireWildcard */ "./node_modules/@babel/runtime/helpers/interopRequireWildcard.js")["default"]);
|
|
|
var _interopRequireDefault = (__webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js")["default"]);
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports.getInstance = exports["default"] = void 0;
|
|
|
var _regeneratorRuntime2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/regeneratorRuntime */ "./node_modules/@babel/runtime/helpers/regeneratorRuntime.js"));
|
|
|
var _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ "./node_modules/@babel/runtime/helpers/extends.js"));
|
|
|
var _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "./node_modules/@babel/runtime/helpers/defineProperty.js"));
|
|
|
var _CheckCircleOutlined = _interopRequireDefault(__webpack_require__(/*! @ant-design/icons/CheckCircleOutlined */ "./node_modules/@ant-design/icons/CheckCircleOutlined.js"));
|
|
|
var _CloseCircleOutlined = _interopRequireDefault(__webpack_require__(/*! @ant-design/icons/CloseCircleOutlined */ "./node_modules/@ant-design/icons/CloseCircleOutlined.js"));
|
|
|
var _CloseOutlined = _interopRequireDefault(__webpack_require__(/*! @ant-design/icons/CloseOutlined */ "./node_modules/@ant-design/icons/CloseOutlined.js"));
|
|
|
var _ExclamationCircleOutlined = _interopRequireDefault(__webpack_require__(/*! @ant-design/icons/ExclamationCircleOutlined */ "./node_modules/@ant-design/icons/ExclamationCircleOutlined.js"));
|
|
|
var _InfoCircleOutlined = _interopRequireDefault(__webpack_require__(/*! @ant-design/icons/InfoCircleOutlined */ "./node_modules/@ant-design/icons/InfoCircleOutlined.js"));
|
|
|
var _classnames = _interopRequireDefault(__webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"));
|
|
|
var _rcNotification = _interopRequireDefault(__webpack_require__(/*! rc-notification */ "./node_modules/rc-notification/es/index.js"));
|
|
|
var React = _interopRequireWildcard(__webpack_require__(/*! react */ "./node_modules/react/index.js"));
|
|
|
var _configProvider = _interopRequireWildcard(__webpack_require__(/*! ../config-provider */ "./node_modules/antd/lib/config-provider/index.js"));
|
|
|
var _useNotification = _interopRequireDefault(__webpack_require__(/*! ./hooks/useNotification */ "./node_modules/antd/lib/notification/hooks/useNotification.js"));
|
|
|
var __awaiter = void 0 && (void 0).__awaiter || function (thisArg, _arguments, P, generator) {
|
|
|
function adopt(value) {
|
|
|
return value instanceof P ? value : new P(function (resolve) {
|
|
|
resolve(value);
|
|
|
});
|
|
|
}
|
|
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
|
function fulfilled(value) {
|
|
|
try {
|
|
|
step(generator.next(value));
|
|
|
} catch (e) {
|
|
|
reject(e);
|
|
|
}
|
|
|
}
|
|
|
function rejected(value) {
|
|
|
try {
|
|
|
step(generator["throw"](value));
|
|
|
} catch (e) {
|
|
|
reject(e);
|
|
|
}
|
|
|
}
|
|
|
function step(result) {
|
|
|
result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
|
|
|
}
|
|
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
|
});
|
|
|
};
|
|
|
var notificationInstance = {};
|
|
|
var defaultDuration = 4.5;
|
|
|
var defaultTop = 24;
|
|
|
var defaultBottom = 24;
|
|
|
var defaultPrefixCls = '';
|
|
|
var defaultPlacement = 'topRight';
|
|
|
var defaultGetContainer;
|
|
|
var defaultCloseIcon;
|
|
|
var rtl = false;
|
|
|
var maxCount;
|
|
|
function setNotificationConfig(options) {
|
|
|
var duration = options.duration,
|
|
|
placement = options.placement,
|
|
|
bottom = options.bottom,
|
|
|
top = options.top,
|
|
|
getContainer = options.getContainer,
|
|
|
closeIcon = options.closeIcon,
|
|
|
prefixCls = options.prefixCls;
|
|
|
if (prefixCls !== undefined) {
|
|
|
defaultPrefixCls = prefixCls;
|
|
|
}
|
|
|
if (duration !== undefined) {
|
|
|
defaultDuration = duration;
|
|
|
}
|
|
|
if (placement !== undefined) {
|
|
|
defaultPlacement = placement;
|
|
|
} else if (options.rtl) {
|
|
|
defaultPlacement = 'topLeft';
|
|
|
}
|
|
|
if (bottom !== undefined) {
|
|
|
defaultBottom = bottom;
|
|
|
}
|
|
|
if (top !== undefined) {
|
|
|
defaultTop = top;
|
|
|
}
|
|
|
if (getContainer !== undefined) {
|
|
|
defaultGetContainer = getContainer;
|
|
|
}
|
|
|
if (closeIcon !== undefined) {
|
|
|
defaultCloseIcon = closeIcon;
|
|
|
}
|
|
|
if (options.rtl !== undefined) {
|
|
|
rtl = options.rtl;
|
|
|
}
|
|
|
if (options.maxCount !== undefined) {
|
|
|
maxCount = options.maxCount;
|
|
|
}
|
|
|
}
|
|
|
function getPlacementStyle(placement) {
|
|
|
var top = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultTop;
|
|
|
var bottom = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : defaultBottom;
|
|
|
var style;
|
|
|
switch (placement) {
|
|
|
case 'top':
|
|
|
style = {
|
|
|
left: '50%',
|
|
|
transform: 'translateX(-50%)',
|
|
|
right: 'auto',
|
|
|
top: top,
|
|
|
bottom: 'auto'
|
|
|
};
|
|
|
break;
|
|
|
case 'topLeft':
|
|
|
style = {
|
|
|
left: 0,
|
|
|
top: top,
|
|
|
bottom: 'auto'
|
|
|
};
|
|
|
break;
|
|
|
case 'topRight':
|
|
|
style = {
|
|
|
right: 0,
|
|
|
top: top,
|
|
|
bottom: 'auto'
|
|
|
};
|
|
|
break;
|
|
|
case 'bottom':
|
|
|
style = {
|
|
|
left: '50%',
|
|
|
transform: 'translateX(-50%)',
|
|
|
right: 'auto',
|
|
|
top: 'auto',
|
|
|
bottom: bottom
|
|
|
};
|
|
|
break;
|
|
|
case 'bottomLeft':
|
|
|
style = {
|
|
|
left: 0,
|
|
|
top: 'auto',
|
|
|
bottom: bottom
|
|
|
};
|
|
|
break;
|
|
|
default:
|
|
|
style = {
|
|
|
right: 0,
|
|
|
top: 'auto',
|
|
|
bottom: bottom
|
|
|
};
|
|
|
break;
|
|
|
}
|
|
|
return style;
|
|
|
}
|
|
|
function getNotificationInstance(args, callback) {
|
|
|
var _args$placement = args.placement,
|
|
|
placement = _args$placement === void 0 ? defaultPlacement : _args$placement,
|
|
|
top = args.top,
|
|
|
bottom = args.bottom,
|
|
|
_args$getContainer = args.getContainer,
|
|
|
getContainer = _args$getContainer === void 0 ? defaultGetContainer : _args$getContainer,
|
|
|
customizePrefixCls = args.prefixCls;
|
|
|
var _globalConfig = (0, _configProvider.globalConfig)(),
|
|
|
getPrefixCls = _globalConfig.getPrefixCls,
|
|
|
getIconPrefixCls = _globalConfig.getIconPrefixCls;
|
|
|
var prefixCls = getPrefixCls('notification', customizePrefixCls || defaultPrefixCls);
|
|
|
var iconPrefixCls = getIconPrefixCls();
|
|
|
var cacheKey = "".concat(prefixCls, "-").concat(placement);
|
|
|
var cacheInstance = notificationInstance[cacheKey];
|
|
|
if (cacheInstance) {
|
|
|
Promise.resolve(cacheInstance).then(function (instance) {
|
|
|
callback({
|
|
|
prefixCls: "".concat(prefixCls, "-notice"),
|
|
|
iconPrefixCls: iconPrefixCls,
|
|
|
instance: instance
|
|
|
});
|
|
|
});
|
|
|
return;
|
|
|
}
|
|
|
var notificationClass = (0, _classnames["default"])("".concat(prefixCls, "-").concat(placement), (0, _defineProperty2["default"])({}, "".concat(prefixCls, "-rtl"), rtl === true));
|
|
|
notificationInstance[cacheKey] = new Promise(function (resolve) {
|
|
|
_rcNotification["default"].newInstance({
|
|
|
prefixCls: prefixCls,
|
|
|
className: notificationClass,
|
|
|
style: getPlacementStyle(placement, top, bottom),
|
|
|
getContainer: getContainer,
|
|
|
maxCount: maxCount
|
|
|
}, function (notification) {
|
|
|
resolve(notification);
|
|
|
callback({
|
|
|
prefixCls: "".concat(prefixCls, "-notice"),
|
|
|
iconPrefixCls: iconPrefixCls,
|
|
|
instance: notification
|
|
|
});
|
|
|
});
|
|
|
});
|
|
|
}
|
|
|
var typeToIcon = {
|
|
|
success: _CheckCircleOutlined["default"],
|
|
|
info: _InfoCircleOutlined["default"],
|
|
|
error: _CloseCircleOutlined["default"],
|
|
|
warning: _ExclamationCircleOutlined["default"]
|
|
|
};
|
|
|
function getRCNoticeProps(args, prefixCls, iconPrefixCls) {
|
|
|
var durationArg = args.duration,
|
|
|
icon = args.icon,
|
|
|
type = args.type,
|
|
|
description = args.description,
|
|
|
message = args.message,
|
|
|
btn = args.btn,
|
|
|
onClose = args.onClose,
|
|
|
onClick = args.onClick,
|
|
|
key = args.key,
|
|
|
style = args.style,
|
|
|
className = args.className,
|
|
|
_args$closeIcon = args.closeIcon,
|
|
|
closeIcon = _args$closeIcon === void 0 ? defaultCloseIcon : _args$closeIcon,
|
|
|
props = args.props;
|
|
|
var duration = durationArg === undefined ? defaultDuration : durationArg;
|
|
|
var iconNode = null;
|
|
|
if (icon) {
|
|
|
iconNode = /*#__PURE__*/React.createElement("span", {
|
|
|
className: "".concat(prefixCls, "-icon")
|
|
|
}, args.icon);
|
|
|
} else if (type) {
|
|
|
iconNode = /*#__PURE__*/React.createElement(typeToIcon[type] || null, {
|
|
|
className: "".concat(prefixCls, "-icon ").concat(prefixCls, "-icon-").concat(type)
|
|
|
});
|
|
|
}
|
|
|
var closeIconToRender = /*#__PURE__*/React.createElement("span", {
|
|
|
className: "".concat(prefixCls, "-close-x")
|
|
|
}, closeIcon || /*#__PURE__*/React.createElement(_CloseOutlined["default"], {
|
|
|
className: "".concat(prefixCls, "-close-icon")
|
|
|
}));
|
|
|
var autoMarginTag = !description && iconNode ? /*#__PURE__*/React.createElement("span", {
|
|
|
className: "".concat(prefixCls, "-message-single-line-auto-margin")
|
|
|
}) : null;
|
|
|
return {
|
|
|
content: /*#__PURE__*/React.createElement(_configProvider["default"], {
|
|
|
iconPrefixCls: iconPrefixCls
|
|
|
}, /*#__PURE__*/React.createElement("div", {
|
|
|
className: iconNode ? "".concat(prefixCls, "-with-icon") : '',
|
|
|
role: "alert"
|
|
|
}, iconNode, /*#__PURE__*/React.createElement("div", {
|
|
|
className: "".concat(prefixCls, "-message")
|
|
|
}, autoMarginTag, message), /*#__PURE__*/React.createElement("div", {
|
|
|
className: "".concat(prefixCls, "-description")
|
|
|
}, description), btn ? /*#__PURE__*/React.createElement("span", {
|
|
|
className: "".concat(prefixCls, "-btn")
|
|
|
}, btn) : null)),
|
|
|
duration: duration,
|
|
|
closable: true,
|
|
|
closeIcon: closeIconToRender,
|
|
|
onClose: onClose,
|
|
|
onClick: onClick,
|
|
|
key: key,
|
|
|
style: style || {},
|
|
|
className: (0, _classnames["default"])(className, (0, _defineProperty2["default"])({}, "".concat(prefixCls, "-").concat(type), !!type)),
|
|
|
props: props
|
|
|
};
|
|
|
}
|
|
|
function notice(args) {
|
|
|
getNotificationInstance(args, function (_ref) {
|
|
|
var prefixCls = _ref.prefixCls,
|
|
|
iconPrefixCls = _ref.iconPrefixCls,
|
|
|
instance = _ref.instance;
|
|
|
instance.notice(getRCNoticeProps(args, prefixCls, iconPrefixCls));
|
|
|
});
|
|
|
}
|
|
|
var api = {
|
|
|
open: notice,
|
|
|
close: function close(key) {
|
|
|
Object.keys(notificationInstance).forEach(function (cacheKey) {
|
|
|
return Promise.resolve(notificationInstance[cacheKey]).then(function (instance) {
|
|
|
instance.removeNotice(key);
|
|
|
});
|
|
|
});
|
|
|
},
|
|
|
config: setNotificationConfig,
|
|
|
destroy: function destroy() {
|
|
|
Object.keys(notificationInstance).forEach(function (cacheKey) {
|
|
|
Promise.resolve(notificationInstance[cacheKey]).then(function (instance) {
|
|
|
instance.destroy();
|
|
|
});
|
|
|
delete notificationInstance[cacheKey]; // lgtm[js/missing-await]
|
|
|
});
|
|
|
}
|
|
|
};
|
|
|
|
|
|
['success', 'info', 'warning', 'error'].forEach(function (type) {
|
|
|
api[type] = function (args) {
|
|
|
return api.open((0, _extends2["default"])((0, _extends2["default"])({}, args), {
|
|
|
type: type
|
|
|
}));
|
|
|
};
|
|
|
});
|
|
|
api.warn = api.warning;
|
|
|
api.useNotification = (0, _useNotification["default"])(getNotificationInstance, getRCNoticeProps);
|
|
|
/** @internal test Only function. Not work on production */
|
|
|
var getInstance = function getInstance(cacheKey) {
|
|
|
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/(0, _regeneratorRuntime2["default"])().mark(function _callee() {
|
|
|
return (0, _regeneratorRuntime2["default"])().wrap(function _callee$(_context) {
|
|
|
while (1) {
|
|
|
switch (_context.prev = _context.next) {
|
|
|
case 0:
|
|
|
return _context.abrupt("return", false ? 0 : null);
|
|
|
case 1:
|
|
|
case "end":
|
|
|
return _context.stop();
|
|
|
}
|
|
|
}
|
|
|
}, _callee);
|
|
|
}));
|
|
|
};
|
|
|
exports.getInstance = getInstance;
|
|
|
var _default = api;
|
|
|
exports["default"] = _default;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/antd/lib/space/Compact.js":
|
|
|
/*!************************************************!*\
|
|
|
!*** ./node_modules/antd/lib/space/Compact.js ***!
|
|
|
\************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
var _interopRequireWildcard = (__webpack_require__(/*! @babel/runtime/helpers/interopRequireWildcard */ "./node_modules/@babel/runtime/helpers/interopRequireWildcard.js")["default"]);
|
|
|
var _interopRequireDefault = (__webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js")["default"]);
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports.useCompactItemContext = exports["default"] = exports.SpaceCompactItemContext = exports.NoCompactStyle = void 0;
|
|
|
var _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ "./node_modules/@babel/runtime/helpers/extends.js"));
|
|
|
var _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "./node_modules/@babel/runtime/helpers/defineProperty.js"));
|
|
|
var _classnames = _interopRequireDefault(__webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"));
|
|
|
var _toArray = _interopRequireDefault(__webpack_require__(/*! rc-util/lib/Children/toArray */ "./node_modules/rc-util/lib/Children/toArray.js"));
|
|
|
var React = _interopRequireWildcard(__webpack_require__(/*! react */ "./node_modules/react/index.js"));
|
|
|
var _configProvider = __webpack_require__(/*! ../config-provider */ "./node_modules/antd/lib/config-provider/index.js");
|
|
|
var __rest = void 0 && (void 0).__rest || function (s, e) {
|
|
|
var t = {};
|
|
|
for (var p in s) {
|
|
|
if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
|
|
|
}
|
|
|
if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
|
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
|
|
|
}
|
|
|
return t;
|
|
|
};
|
|
|
var SpaceCompactItemContext = /*#__PURE__*/React.createContext(null);
|
|
|
exports.SpaceCompactItemContext = SpaceCompactItemContext;
|
|
|
var useCompactItemContext = function useCompactItemContext(prefixCls, direction) {
|
|
|
var compactItemContext = React.useContext(SpaceCompactItemContext);
|
|
|
var compactItemClassnames = React.useMemo(function () {
|
|
|
var _classNames;
|
|
|
if (!compactItemContext) return '';
|
|
|
var compactDirection = compactItemContext.compactDirection,
|
|
|
isFirstItem = compactItemContext.isFirstItem,
|
|
|
isLastItem = compactItemContext.isLastItem;
|
|
|
var separator = compactDirection === 'vertical' ? '-vertical-' : '-';
|
|
|
return (0, _classnames["default"])((_classNames = {}, (0, _defineProperty2["default"])(_classNames, "".concat(prefixCls, "-compact").concat(separator, "item"), true), (0, _defineProperty2["default"])(_classNames, "".concat(prefixCls, "-compact").concat(separator, "first-item"), isFirstItem), (0, _defineProperty2["default"])(_classNames, "".concat(prefixCls, "-compact").concat(separator, "last-item"), isLastItem), (0, _defineProperty2["default"])(_classNames, "".concat(prefixCls, "-compact").concat(separator, "item-rtl"), direction === 'rtl'), _classNames));
|
|
|
}, [prefixCls, direction, compactItemContext]);
|
|
|
return {
|
|
|
compactSize: compactItemContext === null || compactItemContext === void 0 ? void 0 : compactItemContext.compactSize,
|
|
|
compactDirection: compactItemContext === null || compactItemContext === void 0 ? void 0 : compactItemContext.compactDirection,
|
|
|
compactItemClassnames: compactItemClassnames
|
|
|
};
|
|
|
};
|
|
|
exports.useCompactItemContext = useCompactItemContext;
|
|
|
var NoCompactStyle = function NoCompactStyle(_ref) {
|
|
|
var children = _ref.children;
|
|
|
return /*#__PURE__*/React.createElement(SpaceCompactItemContext.Provider, {
|
|
|
value: null
|
|
|
}, children);
|
|
|
};
|
|
|
exports.NoCompactStyle = NoCompactStyle;
|
|
|
var CompactItem = function CompactItem(_a) {
|
|
|
var children = _a.children,
|
|
|
otherProps = __rest(_a, ["children"]);
|
|
|
return /*#__PURE__*/React.createElement(SpaceCompactItemContext.Provider, {
|
|
|
value: otherProps
|
|
|
}, children);
|
|
|
};
|
|
|
var Compact = function Compact(props) {
|
|
|
var _classNames2;
|
|
|
var _React$useContext = React.useContext(_configProvider.ConfigContext),
|
|
|
getPrefixCls = _React$useContext.getPrefixCls,
|
|
|
directionConfig = _React$useContext.direction;
|
|
|
var _props$size = props.size,
|
|
|
size = _props$size === void 0 ? 'middle' : _props$size,
|
|
|
direction = props.direction,
|
|
|
block = props.block,
|
|
|
customizePrefixCls = props.prefixCls,
|
|
|
className = props.className,
|
|
|
children = props.children,
|
|
|
restProps = __rest(props, ["size", "direction", "block", "prefixCls", "className", "children"]);
|
|
|
var prefixCls = getPrefixCls('space-compact', customizePrefixCls);
|
|
|
var clx = (0, _classnames["default"])(prefixCls, (_classNames2 = {}, (0, _defineProperty2["default"])(_classNames2, "".concat(prefixCls, "-rtl"), directionConfig === 'rtl'), (0, _defineProperty2["default"])(_classNames2, "".concat(prefixCls, "-block"), block), (0, _defineProperty2["default"])(_classNames2, "".concat(prefixCls, "-vertical"), direction === 'vertical'), _classNames2), className);
|
|
|
var compactItemContext = React.useContext(SpaceCompactItemContext);
|
|
|
var childNodes = (0, _toArray["default"])(children);
|
|
|
var nodes = React.useMemo(function () {
|
|
|
return childNodes.map(function (child, i) {
|
|
|
var key = child && child.key || "".concat(prefixCls, "-item-").concat(i);
|
|
|
return /*#__PURE__*/React.createElement(CompactItem, {
|
|
|
key: key,
|
|
|
compactSize: size,
|
|
|
compactDirection: direction,
|
|
|
isFirstItem: i === 0 && (!compactItemContext || (compactItemContext === null || compactItemContext === void 0 ? void 0 : compactItemContext.isFirstItem)),
|
|
|
isLastItem: i === childNodes.length - 1 && (!compactItemContext || (compactItemContext === null || compactItemContext === void 0 ? void 0 : compactItemContext.isLastItem))
|
|
|
}, child);
|
|
|
});
|
|
|
}, [size, childNodes, compactItemContext]);
|
|
|
// =========================== Render ===========================
|
|
|
if (childNodes.length === 0) {
|
|
|
return null;
|
|
|
}
|
|
|
return /*#__PURE__*/React.createElement("div", (0, _extends2["default"])({
|
|
|
className: clx
|
|
|
}, restProps), nodes);
|
|
|
};
|
|
|
var _default = Compact;
|
|
|
exports["default"] = _default;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/antd/lib/time-picker/locale/en_US.js":
|
|
|
/*!***********************************************************!*\
|
|
|
!*** ./node_modules/antd/lib/time-picker/locale/en_US.js ***!
|
|
|
\***********************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports["default"] = void 0;
|
|
|
var locale = {
|
|
|
placeholder: 'Select time',
|
|
|
rangePlaceholder: ['Start time', 'End time']
|
|
|
};
|
|
|
var _default = locale;
|
|
|
exports["default"] = _default;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/async-validator/dist-web/index.js":
|
|
|
/*!********************************************************!*\
|
|
|
!*** ./node_modules/async-validator/dist-web/index.js ***!
|
|
|
\********************************************************/
|
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (/* binding */ Schema)
|
|
|
/* harmony export */ });
|
|
|
function _extends() {
|
|
|
_extends = Object.assign ? Object.assign.bind() : 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);
|
|
|
}
|
|
|
|
|
|
function _inheritsLoose(subClass, superClass) {
|
|
|
subClass.prototype = Object.create(superClass.prototype);
|
|
|
subClass.prototype.constructor = subClass;
|
|
|
|
|
|
_setPrototypeOf(subClass, superClass);
|
|
|
}
|
|
|
|
|
|
function _getPrototypeOf(o) {
|
|
|
_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) {
|
|
|
return o.__proto__ || Object.getPrototypeOf(o);
|
|
|
};
|
|
|
return _getPrototypeOf(o);
|
|
|
}
|
|
|
|
|
|
function _setPrototypeOf(o, p) {
|
|
|
_setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {
|
|
|
o.__proto__ = p;
|
|
|
return o;
|
|
|
};
|
|
|
return _setPrototypeOf(o, p);
|
|
|
}
|
|
|
|
|
|
function _isNativeReflectConstruct() {
|
|
|
if (typeof Reflect === "undefined" || !Reflect.construct) return false;
|
|
|
if (Reflect.construct.sham) return false;
|
|
|
if (typeof Proxy === "function") return true;
|
|
|
|
|
|
try {
|
|
|
Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
|
|
|
return true;
|
|
|
} catch (e) {
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function _construct(Parent, args, Class) {
|
|
|
if (_isNativeReflectConstruct()) {
|
|
|
_construct = Reflect.construct.bind();
|
|
|
} else {
|
|
|
_construct = function _construct(Parent, args, Class) {
|
|
|
var a = [null];
|
|
|
a.push.apply(a, args);
|
|
|
var Constructor = Function.bind.apply(Parent, a);
|
|
|
var instance = new Constructor();
|
|
|
if (Class) _setPrototypeOf(instance, Class.prototype);
|
|
|
return instance;
|
|
|
};
|
|
|
}
|
|
|
|
|
|
return _construct.apply(null, arguments);
|
|
|
}
|
|
|
|
|
|
function _isNativeFunction(fn) {
|
|
|
return Function.toString.call(fn).indexOf("[native code]") !== -1;
|
|
|
}
|
|
|
|
|
|
function _wrapNativeSuper(Class) {
|
|
|
var _cache = typeof Map === "function" ? new Map() : undefined;
|
|
|
|
|
|
_wrapNativeSuper = function _wrapNativeSuper(Class) {
|
|
|
if (Class === null || !_isNativeFunction(Class)) return Class;
|
|
|
|
|
|
if (typeof Class !== "function") {
|
|
|
throw new TypeError("Super expression must either be null or a function");
|
|
|
}
|
|
|
|
|
|
if (typeof _cache !== "undefined") {
|
|
|
if (_cache.has(Class)) return _cache.get(Class);
|
|
|
|
|
|
_cache.set(Class, Wrapper);
|
|
|
}
|
|
|
|
|
|
function Wrapper() {
|
|
|
return _construct(Class, arguments, _getPrototypeOf(this).constructor);
|
|
|
}
|
|
|
|
|
|
Wrapper.prototype = Object.create(Class.prototype, {
|
|
|
constructor: {
|
|
|
value: Wrapper,
|
|
|
enumerable: false,
|
|
|
writable: true,
|
|
|
configurable: true
|
|
|
}
|
|
|
});
|
|
|
return _setPrototypeOf(Wrapper, Class);
|
|
|
};
|
|
|
|
|
|
return _wrapNativeSuper(Class);
|
|
|
}
|
|
|
|
|
|
/* eslint no-console:0 */
|
|
|
var formatRegExp = /%[sdj%]/g;
|
|
|
var warning = function warning() {}; // don't print warning message when in production env or node runtime
|
|
|
|
|
|
if (typeof process !== 'undefined' && process.env && "development" !== 'production' && typeof window !== 'undefined' && typeof document !== 'undefined') {
|
|
|
warning = function warning(type, errors) {
|
|
|
if (typeof console !== 'undefined' && console.warn && typeof ASYNC_VALIDATOR_NO_WARNING === 'undefined') {
|
|
|
if (errors.every(function (e) {
|
|
|
return typeof e === 'string';
|
|
|
})) {
|
|
|
console.warn(type, errors);
|
|
|
}
|
|
|
}
|
|
|
};
|
|
|
}
|
|
|
|
|
|
function convertFieldsError(errors) {
|
|
|
if (!errors || !errors.length) return null;
|
|
|
var fields = {};
|
|
|
errors.forEach(function (error) {
|
|
|
var field = error.field;
|
|
|
fields[field] = fields[field] || [];
|
|
|
fields[field].push(error);
|
|
|
});
|
|
|
return fields;
|
|
|
}
|
|
|
function format(template) {
|
|
|
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
|
|
args[_key - 1] = arguments[_key];
|
|
|
}
|
|
|
|
|
|
var i = 0;
|
|
|
var len = args.length;
|
|
|
|
|
|
if (typeof template === 'function') {
|
|
|
return template.apply(null, args);
|
|
|
}
|
|
|
|
|
|
if (typeof template === 'string') {
|
|
|
var str = template.replace(formatRegExp, function (x) {
|
|
|
if (x === '%%') {
|
|
|
return '%';
|
|
|
}
|
|
|
|
|
|
if (i >= len) {
|
|
|
return x;
|
|
|
}
|
|
|
|
|
|
switch (x) {
|
|
|
case '%s':
|
|
|
return String(args[i++]);
|
|
|
|
|
|
case '%d':
|
|
|
return Number(args[i++]);
|
|
|
|
|
|
case '%j':
|
|
|
try {
|
|
|
return JSON.stringify(args[i++]);
|
|
|
} catch (_) {
|
|
|
return '[Circular]';
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
default:
|
|
|
return x;
|
|
|
}
|
|
|
});
|
|
|
return str;
|
|
|
}
|
|
|
|
|
|
return template;
|
|
|
}
|
|
|
|
|
|
function isNativeStringType(type) {
|
|
|
return type === 'string' || type === 'url' || type === 'hex' || type === 'email' || type === 'date' || type === 'pattern';
|
|
|
}
|
|
|
|
|
|
function isEmptyValue(value, type) {
|
|
|
if (value === undefined || value === null) {
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
if (type === 'array' && Array.isArray(value) && !value.length) {
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
if (isNativeStringType(type) && typeof value === 'string' && !value) {
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
function asyncParallelArray(arr, func, callback) {
|
|
|
var results = [];
|
|
|
var total = 0;
|
|
|
var arrLength = arr.length;
|
|
|
|
|
|
function count(errors) {
|
|
|
results.push.apply(results, errors || []);
|
|
|
total++;
|
|
|
|
|
|
if (total === arrLength) {
|
|
|
callback(results);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
arr.forEach(function (a) {
|
|
|
func(a, count);
|
|
|
});
|
|
|
}
|
|
|
|
|
|
function asyncSerialArray(arr, func, callback) {
|
|
|
var index = 0;
|
|
|
var arrLength = arr.length;
|
|
|
|
|
|
function next(errors) {
|
|
|
if (errors && errors.length) {
|
|
|
callback(errors);
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
var original = index;
|
|
|
index = index + 1;
|
|
|
|
|
|
if (original < arrLength) {
|
|
|
func(arr[original], next);
|
|
|
} else {
|
|
|
callback([]);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
next([]);
|
|
|
}
|
|
|
|
|
|
function flattenObjArr(objArr) {
|
|
|
var ret = [];
|
|
|
Object.keys(objArr).forEach(function (k) {
|
|
|
ret.push.apply(ret, objArr[k] || []);
|
|
|
});
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
var AsyncValidationError = /*#__PURE__*/function (_Error) {
|
|
|
_inheritsLoose(AsyncValidationError, _Error);
|
|
|
|
|
|
function AsyncValidationError(errors, fields) {
|
|
|
var _this;
|
|
|
|
|
|
_this = _Error.call(this, 'Async Validation Error') || this;
|
|
|
_this.errors = errors;
|
|
|
_this.fields = fields;
|
|
|
return _this;
|
|
|
}
|
|
|
|
|
|
return AsyncValidationError;
|
|
|
}( /*#__PURE__*/_wrapNativeSuper(Error));
|
|
|
function asyncMap(objArr, option, func, callback, source) {
|
|
|
if (option.first) {
|
|
|
var _pending = new Promise(function (resolve, reject) {
|
|
|
var next = function next(errors) {
|
|
|
callback(errors);
|
|
|
return errors.length ? reject(new AsyncValidationError(errors, convertFieldsError(errors))) : resolve(source);
|
|
|
};
|
|
|
|
|
|
var flattenArr = flattenObjArr(objArr);
|
|
|
asyncSerialArray(flattenArr, func, next);
|
|
|
});
|
|
|
|
|
|
_pending["catch"](function (e) {
|
|
|
return e;
|
|
|
});
|
|
|
|
|
|
return _pending;
|
|
|
}
|
|
|
|
|
|
var firstFields = option.firstFields === true ? Object.keys(objArr) : option.firstFields || [];
|
|
|
var objArrKeys = Object.keys(objArr);
|
|
|
var objArrLength = objArrKeys.length;
|
|
|
var total = 0;
|
|
|
var results = [];
|
|
|
var pending = new Promise(function (resolve, reject) {
|
|
|
var next = function next(errors) {
|
|
|
results.push.apply(results, errors);
|
|
|
total++;
|
|
|
|
|
|
if (total === objArrLength) {
|
|
|
callback(results);
|
|
|
return results.length ? reject(new AsyncValidationError(results, convertFieldsError(results))) : resolve(source);
|
|
|
}
|
|
|
};
|
|
|
|
|
|
if (!objArrKeys.length) {
|
|
|
callback(results);
|
|
|
resolve(source);
|
|
|
}
|
|
|
|
|
|
objArrKeys.forEach(function (key) {
|
|
|
var arr = objArr[key];
|
|
|
|
|
|
if (firstFields.indexOf(key) !== -1) {
|
|
|
asyncSerialArray(arr, func, next);
|
|
|
} else {
|
|
|
asyncParallelArray(arr, func, next);
|
|
|
}
|
|
|
});
|
|
|
});
|
|
|
pending["catch"](function (e) {
|
|
|
return e;
|
|
|
});
|
|
|
return pending;
|
|
|
}
|
|
|
|
|
|
function isErrorObj(obj) {
|
|
|
return !!(obj && obj.message !== undefined);
|
|
|
}
|
|
|
|
|
|
function getValue(value, path) {
|
|
|
var v = value;
|
|
|
|
|
|
for (var i = 0; i < path.length; i++) {
|
|
|
if (v == undefined) {
|
|
|
return v;
|
|
|
}
|
|
|
|
|
|
v = v[path[i]];
|
|
|
}
|
|
|
|
|
|
return v;
|
|
|
}
|
|
|
|
|
|
function complementError(rule, source) {
|
|
|
return function (oe) {
|
|
|
var fieldValue;
|
|
|
|
|
|
if (rule.fullFields) {
|
|
|
fieldValue = getValue(source, rule.fullFields);
|
|
|
} else {
|
|
|
fieldValue = source[oe.field || rule.fullField];
|
|
|
}
|
|
|
|
|
|
if (isErrorObj(oe)) {
|
|
|
oe.field = oe.field || rule.fullField;
|
|
|
oe.fieldValue = fieldValue;
|
|
|
return oe;
|
|
|
}
|
|
|
|
|
|
return {
|
|
|
message: typeof oe === 'function' ? oe() : oe,
|
|
|
fieldValue: fieldValue,
|
|
|
field: oe.field || rule.fullField
|
|
|
};
|
|
|
};
|
|
|
}
|
|
|
function deepMerge(target, source) {
|
|
|
if (source) {
|
|
|
for (var s in source) {
|
|
|
if (source.hasOwnProperty(s)) {
|
|
|
var value = source[s];
|
|
|
|
|
|
if (typeof value === 'object' && typeof target[s] === 'object') {
|
|
|
target[s] = _extends({}, target[s], value);
|
|
|
} else {
|
|
|
target[s] = value;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return target;
|
|
|
}
|
|
|
|
|
|
var required$1 = function required(rule, value, source, errors, options, type) {
|
|
|
if (rule.required && (!source.hasOwnProperty(rule.field) || isEmptyValue(value, type || rule.type))) {
|
|
|
errors.push(format(options.messages.required, rule.fullField));
|
|
|
}
|
|
|
};
|
|
|
|
|
|
/**
|
|
|
* Rule for validating whitespace.
|
|
|
*
|
|
|
* @param rule The validation rule.
|
|
|
* @param value The value of the field on the source object.
|
|
|
* @param source The source object being validated.
|
|
|
* @param errors An array of errors that this rule may add
|
|
|
* validation errors to.
|
|
|
* @param options The validation options.
|
|
|
* @param options.messages The validation messages.
|
|
|
*/
|
|
|
|
|
|
var whitespace = function whitespace(rule, value, source, errors, options) {
|
|
|
if (/^\s+$/.test(value) || value === '') {
|
|
|
errors.push(format(options.messages.whitespace, rule.fullField));
|
|
|
}
|
|
|
};
|
|
|
|
|
|
// https://github.com/kevva/url-regex/blob/master/index.js
|
|
|
var urlReg;
|
|
|
var getUrlRegex = (function () {
|
|
|
if (urlReg) {
|
|
|
return urlReg;
|
|
|
}
|
|
|
|
|
|
var word = '[a-fA-F\\d:]';
|
|
|
|
|
|
var b = function b(options) {
|
|
|
return options && options.includeBoundaries ? "(?:(?<=\\s|^)(?=" + word + ")|(?<=" + word + ")(?=\\s|$))" : '';
|
|
|
};
|
|
|
|
|
|
var v4 = '(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}';
|
|
|
var v6seg = '[a-fA-F\\d]{1,4}';
|
|
|
var v6 = ("\n(?:\n(?:" + v6seg + ":){7}(?:" + v6seg + "|:)| // 1:2:3:4:5:6:7:: 1:2:3:4:5:6:7:8\n(?:" + v6seg + ":){6}(?:" + v4 + "|:" + v6seg + "|:)| // 1:2:3:4:5:6:: 1:2:3:4:5:6::8 1:2:3:4:5:6::8 1:2:3:4:5:6::1.2.3.4\n(?:" + v6seg + ":){5}(?::" + v4 + "|(?::" + v6seg + "){1,2}|:)| // 1:2:3:4:5:: 1:2:3:4:5::7:8 1:2:3:4:5::8 1:2:3:4:5::7:1.2.3.4\n(?:" + v6seg + ":){4}(?:(?::" + v6seg + "){0,1}:" + v4 + "|(?::" + v6seg + "){1,3}|:)| // 1:2:3:4:: 1:2:3:4::6:7:8 1:2:3:4::8 1:2:3:4::6:7:1.2.3.4\n(?:" + v6seg + ":){3}(?:(?::" + v6seg + "){0,2}:" + v4 + "|(?::" + v6seg + "){1,4}|:)| // 1:2:3:: 1:2:3::5:6:7:8 1:2:3::8 1:2:3::5:6:7:1.2.3.4\n(?:" + v6seg + ":){2}(?:(?::" + v6seg + "){0,3}:" + v4 + "|(?::" + v6seg + "){1,5}|:)| // 1:2:: 1:2::4:5:6:7:8 1:2::8 1:2::4:5:6:7:1.2.3.4\n(?:" + v6seg + ":){1}(?:(?::" + v6seg + "){0,4}:" + v4 + "|(?::" + v6seg + "){1,6}|:)| // 1:: 1::3:4:5:6:7:8 1::8 1::3:4:5:6:7:1.2.3.4\n(?::(?:(?::" + v6seg + "){0,5}:" + v4 + "|(?::" + v6seg + "){1,7}|:)) // ::2:3:4:5:6:7:8 ::2:3:4:5:6:7:8 ::8 ::1.2.3.4\n)(?:%[0-9a-zA-Z]{1,})? // %eth0 %1\n").replace(/\s*\/\/.*$/gm, '').replace(/\n/g, '').trim(); // Pre-compile only the exact regexes because adding a global flag make regexes stateful
|
|
|
|
|
|
var v46Exact = new RegExp("(?:^" + v4 + "$)|(?:^" + v6 + "$)");
|
|
|
var v4exact = new RegExp("^" + v4 + "$");
|
|
|
var v6exact = new RegExp("^" + v6 + "$");
|
|
|
|
|
|
var ip = function ip(options) {
|
|
|
return options && options.exact ? v46Exact : new RegExp("(?:" + b(options) + v4 + b(options) + ")|(?:" + b(options) + v6 + b(options) + ")", 'g');
|
|
|
};
|
|
|
|
|
|
ip.v4 = function (options) {
|
|
|
return options && options.exact ? v4exact : new RegExp("" + b(options) + v4 + b(options), 'g');
|
|
|
};
|
|
|
|
|
|
ip.v6 = function (options) {
|
|
|
return options && options.exact ? v6exact : new RegExp("" + b(options) + v6 + b(options), 'g');
|
|
|
};
|
|
|
|
|
|
var protocol = "(?:(?:[a-z]+:)?//)";
|
|
|
var auth = '(?:\\S+(?::\\S*)?@)?';
|
|
|
var ipv4 = ip.v4().source;
|
|
|
var ipv6 = ip.v6().source;
|
|
|
var host = "(?:(?:[a-z\\u00a1-\\uffff0-9][-_]*)*[a-z\\u00a1-\\uffff0-9]+)";
|
|
|
var domain = "(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*";
|
|
|
var tld = "(?:\\.(?:[a-z\\u00a1-\\uffff]{2,}))";
|
|
|
var port = '(?::\\d{2,5})?';
|
|
|
var path = '(?:[/?#][^\\s"]*)?';
|
|
|
var regex = "(?:" + protocol + "|www\\.)" + auth + "(?:localhost|" + ipv4 + "|" + ipv6 + "|" + host + domain + tld + ")" + port + path;
|
|
|
urlReg = new RegExp("(?:^" + regex + "$)", 'i');
|
|
|
return urlReg;
|
|
|
});
|
|
|
|
|
|
/* eslint max-len:0 */
|
|
|
|
|
|
var pattern$2 = {
|
|
|
// http://emailregex.com/
|
|
|
email: /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+\.)+[a-zA-Z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]{2,}))$/,
|
|
|
// url: new RegExp(
|
|
|
// '^(?!mailto:)(?:(?:http|https|ftp)://|//)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?$',
|
|
|
// 'i',
|
|
|
// ),
|
|
|
hex: /^#?([a-f0-9]{6}|[a-f0-9]{3})$/i
|
|
|
};
|
|
|
var types = {
|
|
|
integer: function integer(value) {
|
|
|
return types.number(value) && parseInt(value, 10) === value;
|
|
|
},
|
|
|
"float": function float(value) {
|
|
|
return types.number(value) && !types.integer(value);
|
|
|
},
|
|
|
array: function array(value) {
|
|
|
return Array.isArray(value);
|
|
|
},
|
|
|
regexp: function regexp(value) {
|
|
|
if (value instanceof RegExp) {
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
try {
|
|
|
return !!new RegExp(value);
|
|
|
} catch (e) {
|
|
|
return false;
|
|
|
}
|
|
|
},
|
|
|
date: function date(value) {
|
|
|
return typeof value.getTime === 'function' && typeof value.getMonth === 'function' && typeof value.getYear === 'function' && !isNaN(value.getTime());
|
|
|
},
|
|
|
number: function number(value) {
|
|
|
if (isNaN(value)) {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
return typeof value === 'number';
|
|
|
},
|
|
|
object: function object(value) {
|
|
|
return typeof value === 'object' && !types.array(value);
|
|
|
},
|
|
|
method: function method(value) {
|
|
|
return typeof value === 'function';
|
|
|
},
|
|
|
email: function email(value) {
|
|
|
return typeof value === 'string' && value.length <= 320 && !!value.match(pattern$2.email);
|
|
|
},
|
|
|
url: function url(value) {
|
|
|
return typeof value === 'string' && value.length <= 2048 && !!value.match(getUrlRegex());
|
|
|
},
|
|
|
hex: function hex(value) {
|
|
|
return typeof value === 'string' && !!value.match(pattern$2.hex);
|
|
|
}
|
|
|
};
|
|
|
|
|
|
var type$1 = function type(rule, value, source, errors, options) {
|
|
|
if (rule.required && value === undefined) {
|
|
|
required$1(rule, value, source, errors, options);
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
var custom = ['integer', 'float', 'array', 'regexp', 'object', 'method', 'email', 'number', 'date', 'url', 'hex'];
|
|
|
var ruleType = rule.type;
|
|
|
|
|
|
if (custom.indexOf(ruleType) > -1) {
|
|
|
if (!types[ruleType](value)) {
|
|
|
errors.push(format(options.messages.types[ruleType], rule.fullField, rule.type));
|
|
|
} // straight typeof check
|
|
|
|
|
|
} else if (ruleType && typeof value !== rule.type) {
|
|
|
errors.push(format(options.messages.types[ruleType], rule.fullField, rule.type));
|
|
|
}
|
|
|
};
|
|
|
|
|
|
var range = function range(rule, value, source, errors, options) {
|
|
|
var len = typeof rule.len === 'number';
|
|
|
var min = typeof rule.min === 'number';
|
|
|
var max = typeof rule.max === 'number'; // 正则匹配码点范围从U+010000一直到U+10FFFF的文字(补充平面Supplementary Plane)
|
|
|
|
|
|
var spRegexp = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g;
|
|
|
var val = value;
|
|
|
var key = null;
|
|
|
var num = typeof value === 'number';
|
|
|
var str = typeof value === 'string';
|
|
|
var arr = Array.isArray(value);
|
|
|
|
|
|
if (num) {
|
|
|
key = 'number';
|
|
|
} else if (str) {
|
|
|
key = 'string';
|
|
|
} else if (arr) {
|
|
|
key = 'array';
|
|
|
} // if the value is not of a supported type for range validation
|
|
|
// the validation rule rule should use the
|
|
|
// type property to also test for a particular type
|
|
|
|
|
|
|
|
|
if (!key) {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
if (arr) {
|
|
|
val = value.length;
|
|
|
}
|
|
|
|
|
|
if (str) {
|
|
|
// 处理码点大于U+010000的文字length属性不准确的bug,如"𠮷𠮷𠮷".lenght !== 3
|
|
|
val = value.replace(spRegexp, '_').length;
|
|
|
}
|
|
|
|
|
|
if (len) {
|
|
|
if (val !== rule.len) {
|
|
|
errors.push(format(options.messages[key].len, rule.fullField, rule.len));
|
|
|
}
|
|
|
} else if (min && !max && val < rule.min) {
|
|
|
errors.push(format(options.messages[key].min, rule.fullField, rule.min));
|
|
|
} else if (max && !min && val > rule.max) {
|
|
|
errors.push(format(options.messages[key].max, rule.fullField, rule.max));
|
|
|
} else if (min && max && (val < rule.min || val > rule.max)) {
|
|
|
errors.push(format(options.messages[key].range, rule.fullField, rule.min, rule.max));
|
|
|
}
|
|
|
};
|
|
|
|
|
|
var ENUM$1 = 'enum';
|
|
|
|
|
|
var enumerable$1 = function enumerable(rule, value, source, errors, options) {
|
|
|
rule[ENUM$1] = Array.isArray(rule[ENUM$1]) ? rule[ENUM$1] : [];
|
|
|
|
|
|
if (rule[ENUM$1].indexOf(value) === -1) {
|
|
|
errors.push(format(options.messages[ENUM$1], rule.fullField, rule[ENUM$1].join(', ')));
|
|
|
}
|
|
|
};
|
|
|
|
|
|
var pattern$1 = function pattern(rule, value, source, errors, options) {
|
|
|
if (rule.pattern) {
|
|
|
if (rule.pattern instanceof RegExp) {
|
|
|
// if a RegExp instance is passed, reset `lastIndex` in case its `global`
|
|
|
// flag is accidentally set to `true`, which in a validation scenario
|
|
|
// is not necessary and the result might be misleading
|
|
|
rule.pattern.lastIndex = 0;
|
|
|
|
|
|
if (!rule.pattern.test(value)) {
|
|
|
errors.push(format(options.messages.pattern.mismatch, rule.fullField, value, rule.pattern));
|
|
|
}
|
|
|
} else if (typeof rule.pattern === 'string') {
|
|
|
var _pattern = new RegExp(rule.pattern);
|
|
|
|
|
|
if (!_pattern.test(value)) {
|
|
|
errors.push(format(options.messages.pattern.mismatch, rule.fullField, value, rule.pattern));
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
};
|
|
|
|
|
|
var rules = {
|
|
|
required: required$1,
|
|
|
whitespace: whitespace,
|
|
|
type: type$1,
|
|
|
range: range,
|
|
|
"enum": enumerable$1,
|
|
|
pattern: pattern$1
|
|
|
};
|
|
|
|
|
|
var string = function string(rule, value, callback, source, options) {
|
|
|
var errors = [];
|
|
|
var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
|
|
|
|
|
|
if (validate) {
|
|
|
if (isEmptyValue(value, 'string') && !rule.required) {
|
|
|
return callback();
|
|
|
}
|
|
|
|
|
|
rules.required(rule, value, source, errors, options, 'string');
|
|
|
|
|
|
if (!isEmptyValue(value, 'string')) {
|
|
|
rules.type(rule, value, source, errors, options);
|
|
|
rules.range(rule, value, source, errors, options);
|
|
|
rules.pattern(rule, value, source, errors, options);
|
|
|
|
|
|
if (rule.whitespace === true) {
|
|
|
rules.whitespace(rule, value, source, errors, options);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
callback(errors);
|
|
|
};
|
|
|
|
|
|
var method = function method(rule, value, callback, source, options) {
|
|
|
var errors = [];
|
|
|
var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
|
|
|
|
|
|
if (validate) {
|
|
|
if (isEmptyValue(value) && !rule.required) {
|
|
|
return callback();
|
|
|
}
|
|
|
|
|
|
rules.required(rule, value, source, errors, options);
|
|
|
|
|
|
if (value !== undefined) {
|
|
|
rules.type(rule, value, source, errors, options);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
callback(errors);
|
|
|
};
|
|
|
|
|
|
var number = function number(rule, value, callback, source, options) {
|
|
|
var errors = [];
|
|
|
var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
|
|
|
|
|
|
if (validate) {
|
|
|
if (value === '') {
|
|
|
value = undefined;
|
|
|
}
|
|
|
|
|
|
if (isEmptyValue(value) && !rule.required) {
|
|
|
return callback();
|
|
|
}
|
|
|
|
|
|
rules.required(rule, value, source, errors, options);
|
|
|
|
|
|
if (value !== undefined) {
|
|
|
rules.type(rule, value, source, errors, options);
|
|
|
rules.range(rule, value, source, errors, options);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
callback(errors);
|
|
|
};
|
|
|
|
|
|
var _boolean = function _boolean(rule, value, callback, source, options) {
|
|
|
var errors = [];
|
|
|
var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
|
|
|
|
|
|
if (validate) {
|
|
|
if (isEmptyValue(value) && !rule.required) {
|
|
|
return callback();
|
|
|
}
|
|
|
|
|
|
rules.required(rule, value, source, errors, options);
|
|
|
|
|
|
if (value !== undefined) {
|
|
|
rules.type(rule, value, source, errors, options);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
callback(errors);
|
|
|
};
|
|
|
|
|
|
var regexp = function regexp(rule, value, callback, source, options) {
|
|
|
var errors = [];
|
|
|
var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
|
|
|
|
|
|
if (validate) {
|
|
|
if (isEmptyValue(value) && !rule.required) {
|
|
|
return callback();
|
|
|
}
|
|
|
|
|
|
rules.required(rule, value, source, errors, options);
|
|
|
|
|
|
if (!isEmptyValue(value)) {
|
|
|
rules.type(rule, value, source, errors, options);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
callback(errors);
|
|
|
};
|
|
|
|
|
|
var integer = function integer(rule, value, callback, source, options) {
|
|
|
var errors = [];
|
|
|
var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
|
|
|
|
|
|
if (validate) {
|
|
|
if (isEmptyValue(value) && !rule.required) {
|
|
|
return callback();
|
|
|
}
|
|
|
|
|
|
rules.required(rule, value, source, errors, options);
|
|
|
|
|
|
if (value !== undefined) {
|
|
|
rules.type(rule, value, source, errors, options);
|
|
|
rules.range(rule, value, source, errors, options);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
callback(errors);
|
|
|
};
|
|
|
|
|
|
var floatFn = function floatFn(rule, value, callback, source, options) {
|
|
|
var errors = [];
|
|
|
var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
|
|
|
|
|
|
if (validate) {
|
|
|
if (isEmptyValue(value) && !rule.required) {
|
|
|
return callback();
|
|
|
}
|
|
|
|
|
|
rules.required(rule, value, source, errors, options);
|
|
|
|
|
|
if (value !== undefined) {
|
|
|
rules.type(rule, value, source, errors, options);
|
|
|
rules.range(rule, value, source, errors, options);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
callback(errors);
|
|
|
};
|
|
|
|
|
|
var array = function array(rule, value, callback, source, options) {
|
|
|
var errors = [];
|
|
|
var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
|
|
|
|
|
|
if (validate) {
|
|
|
if ((value === undefined || value === null) && !rule.required) {
|
|
|
return callback();
|
|
|
}
|
|
|
|
|
|
rules.required(rule, value, source, errors, options, 'array');
|
|
|
|
|
|
if (value !== undefined && value !== null) {
|
|
|
rules.type(rule, value, source, errors, options);
|
|
|
rules.range(rule, value, source, errors, options);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
callback(errors);
|
|
|
};
|
|
|
|
|
|
var object = function object(rule, value, callback, source, options) {
|
|
|
var errors = [];
|
|
|
var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
|
|
|
|
|
|
if (validate) {
|
|
|
if (isEmptyValue(value) && !rule.required) {
|
|
|
return callback();
|
|
|
}
|
|
|
|
|
|
rules.required(rule, value, source, errors, options);
|
|
|
|
|
|
if (value !== undefined) {
|
|
|
rules.type(rule, value, source, errors, options);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
callback(errors);
|
|
|
};
|
|
|
|
|
|
var ENUM = 'enum';
|
|
|
|
|
|
var enumerable = function enumerable(rule, value, callback, source, options) {
|
|
|
var errors = [];
|
|
|
var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
|
|
|
|
|
|
if (validate) {
|
|
|
if (isEmptyValue(value) && !rule.required) {
|
|
|
return callback();
|
|
|
}
|
|
|
|
|
|
rules.required(rule, value, source, errors, options);
|
|
|
|
|
|
if (value !== undefined) {
|
|
|
rules[ENUM](rule, value, source, errors, options);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
callback(errors);
|
|
|
};
|
|
|
|
|
|
var pattern = function pattern(rule, value, callback, source, options) {
|
|
|
var errors = [];
|
|
|
var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
|
|
|
|
|
|
if (validate) {
|
|
|
if (isEmptyValue(value, 'string') && !rule.required) {
|
|
|
return callback();
|
|
|
}
|
|
|
|
|
|
rules.required(rule, value, source, errors, options);
|
|
|
|
|
|
if (!isEmptyValue(value, 'string')) {
|
|
|
rules.pattern(rule, value, source, errors, options);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
callback(errors);
|
|
|
};
|
|
|
|
|
|
var date = function date(rule, value, callback, source, options) {
|
|
|
// console.log('integer rule called %j', rule);
|
|
|
var errors = [];
|
|
|
var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); // console.log('validate on %s value', value);
|
|
|
|
|
|
if (validate) {
|
|
|
if (isEmptyValue(value, 'date') && !rule.required) {
|
|
|
return callback();
|
|
|
}
|
|
|
|
|
|
rules.required(rule, value, source, errors, options);
|
|
|
|
|
|
if (!isEmptyValue(value, 'date')) {
|
|
|
var dateObject;
|
|
|
|
|
|
if (value instanceof Date) {
|
|
|
dateObject = value;
|
|
|
} else {
|
|
|
dateObject = new Date(value);
|
|
|
}
|
|
|
|
|
|
rules.type(rule, dateObject, source, errors, options);
|
|
|
|
|
|
if (dateObject) {
|
|
|
rules.range(rule, dateObject.getTime(), source, errors, options);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
callback(errors);
|
|
|
};
|
|
|
|
|
|
var required = function required(rule, value, callback, source, options) {
|
|
|
var errors = [];
|
|
|
var type = Array.isArray(value) ? 'array' : typeof value;
|
|
|
rules.required(rule, value, source, errors, options, type);
|
|
|
callback(errors);
|
|
|
};
|
|
|
|
|
|
var type = function type(rule, value, callback, source, options) {
|
|
|
var ruleType = rule.type;
|
|
|
var errors = [];
|
|
|
var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
|
|
|
|
|
|
if (validate) {
|
|
|
if (isEmptyValue(value, ruleType) && !rule.required) {
|
|
|
return callback();
|
|
|
}
|
|
|
|
|
|
rules.required(rule, value, source, errors, options, ruleType);
|
|
|
|
|
|
if (!isEmptyValue(value, ruleType)) {
|
|
|
rules.type(rule, value, source, errors, options);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
callback(errors);
|
|
|
};
|
|
|
|
|
|
var any = function any(rule, value, callback, source, options) {
|
|
|
var errors = [];
|
|
|
var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
|
|
|
|
|
|
if (validate) {
|
|
|
if (isEmptyValue(value) && !rule.required) {
|
|
|
return callback();
|
|
|
}
|
|
|
|
|
|
rules.required(rule, value, source, errors, options);
|
|
|
}
|
|
|
|
|
|
callback(errors);
|
|
|
};
|
|
|
|
|
|
var validators = {
|
|
|
string: string,
|
|
|
method: method,
|
|
|
number: number,
|
|
|
"boolean": _boolean,
|
|
|
regexp: regexp,
|
|
|
integer: integer,
|
|
|
"float": floatFn,
|
|
|
array: array,
|
|
|
object: object,
|
|
|
"enum": enumerable,
|
|
|
pattern: pattern,
|
|
|
date: date,
|
|
|
url: type,
|
|
|
hex: type,
|
|
|
email: type,
|
|
|
required: required,
|
|
|
any: any
|
|
|
};
|
|
|
|
|
|
function newMessages() {
|
|
|
return {
|
|
|
"default": 'Validation error on field %s',
|
|
|
required: '%s is required',
|
|
|
"enum": '%s must be one of %s',
|
|
|
whitespace: '%s cannot be empty',
|
|
|
date: {
|
|
|
format: '%s date %s is invalid for format %s',
|
|
|
parse: '%s date could not be parsed, %s is invalid ',
|
|
|
invalid: '%s date %s is invalid'
|
|
|
},
|
|
|
types: {
|
|
|
string: '%s is not a %s',
|
|
|
method: '%s is not a %s (function)',
|
|
|
array: '%s is not an %s',
|
|
|
object: '%s is not an %s',
|
|
|
number: '%s is not a %s',
|
|
|
date: '%s is not a %s',
|
|
|
"boolean": '%s is not a %s',
|
|
|
integer: '%s is not an %s',
|
|
|
"float": '%s is not a %s',
|
|
|
regexp: '%s is not a valid %s',
|
|
|
email: '%s is not a valid %s',
|
|
|
url: '%s is not a valid %s',
|
|
|
hex: '%s is not a valid %s'
|
|
|
},
|
|
|
string: {
|
|
|
len: '%s must be exactly %s characters',
|
|
|
min: '%s must be at least %s characters',
|
|
|
max: '%s cannot be longer than %s characters',
|
|
|
range: '%s must be between %s and %s characters'
|
|
|
},
|
|
|
number: {
|
|
|
len: '%s must equal %s',
|
|
|
min: '%s cannot be less than %s',
|
|
|
max: '%s cannot be greater than %s',
|
|
|
range: '%s must be between %s and %s'
|
|
|
},
|
|
|
array: {
|
|
|
len: '%s must be exactly %s in length',
|
|
|
min: '%s cannot be less than %s in length',
|
|
|
max: '%s cannot be greater than %s in length',
|
|
|
range: '%s must be between %s and %s in length'
|
|
|
},
|
|
|
pattern: {
|
|
|
mismatch: '%s value %s does not match pattern %s'
|
|
|
},
|
|
|
clone: function clone() {
|
|
|
var cloned = JSON.parse(JSON.stringify(this));
|
|
|
cloned.clone = this.clone;
|
|
|
return cloned;
|
|
|
}
|
|
|
};
|
|
|
}
|
|
|
var messages = newMessages();
|
|
|
|
|
|
/**
|
|
|
* Encapsulates a validation schema.
|
|
|
*
|
|
|
* @param descriptor An object declaring validation rules
|
|
|
* for this schema.
|
|
|
*/
|
|
|
|
|
|
var Schema = /*#__PURE__*/function () {
|
|
|
// ========================= Static =========================
|
|
|
// ======================== Instance ========================
|
|
|
function Schema(descriptor) {
|
|
|
this.rules = null;
|
|
|
this._messages = messages;
|
|
|
this.define(descriptor);
|
|
|
}
|
|
|
|
|
|
var _proto = Schema.prototype;
|
|
|
|
|
|
_proto.define = function define(rules) {
|
|
|
var _this = this;
|
|
|
|
|
|
if (!rules) {
|
|
|
throw new Error('Cannot configure a schema with no rules');
|
|
|
}
|
|
|
|
|
|
if (typeof rules !== 'object' || Array.isArray(rules)) {
|
|
|
throw new Error('Rules must be an object');
|
|
|
}
|
|
|
|
|
|
this.rules = {};
|
|
|
Object.keys(rules).forEach(function (name) {
|
|
|
var item = rules[name];
|
|
|
_this.rules[name] = Array.isArray(item) ? item : [item];
|
|
|
});
|
|
|
};
|
|
|
|
|
|
_proto.messages = function messages(_messages) {
|
|
|
if (_messages) {
|
|
|
this._messages = deepMerge(newMessages(), _messages);
|
|
|
}
|
|
|
|
|
|
return this._messages;
|
|
|
};
|
|
|
|
|
|
_proto.validate = function validate(source_, o, oc) {
|
|
|
var _this2 = this;
|
|
|
|
|
|
if (o === void 0) {
|
|
|
o = {};
|
|
|
}
|
|
|
|
|
|
if (oc === void 0) {
|
|
|
oc = function oc() {};
|
|
|
}
|
|
|
|
|
|
var source = source_;
|
|
|
var options = o;
|
|
|
var callback = oc;
|
|
|
|
|
|
if (typeof options === 'function') {
|
|
|
callback = options;
|
|
|
options = {};
|
|
|
}
|
|
|
|
|
|
if (!this.rules || Object.keys(this.rules).length === 0) {
|
|
|
if (callback) {
|
|
|
callback(null, source);
|
|
|
}
|
|
|
|
|
|
return Promise.resolve(source);
|
|
|
}
|
|
|
|
|
|
function complete(results) {
|
|
|
var errors = [];
|
|
|
var fields = {};
|
|
|
|
|
|
function add(e) {
|
|
|
if (Array.isArray(e)) {
|
|
|
var _errors;
|
|
|
|
|
|
errors = (_errors = errors).concat.apply(_errors, e);
|
|
|
} else {
|
|
|
errors.push(e);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
for (var i = 0; i < results.length; i++) {
|
|
|
add(results[i]);
|
|
|
}
|
|
|
|
|
|
if (!errors.length) {
|
|
|
callback(null, source);
|
|
|
} else {
|
|
|
fields = convertFieldsError(errors);
|
|
|
callback(errors, fields);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (options.messages) {
|
|
|
var messages$1 = this.messages();
|
|
|
|
|
|
if (messages$1 === messages) {
|
|
|
messages$1 = newMessages();
|
|
|
}
|
|
|
|
|
|
deepMerge(messages$1, options.messages);
|
|
|
options.messages = messages$1;
|
|
|
} else {
|
|
|
options.messages = this.messages();
|
|
|
}
|
|
|
|
|
|
var series = {};
|
|
|
var keys = options.keys || Object.keys(this.rules);
|
|
|
keys.forEach(function (z) {
|
|
|
var arr = _this2.rules[z];
|
|
|
var value = source[z];
|
|
|
arr.forEach(function (r) {
|
|
|
var rule = r;
|
|
|
|
|
|
if (typeof rule.transform === 'function') {
|
|
|
if (source === source_) {
|
|
|
source = _extends({}, source);
|
|
|
}
|
|
|
|
|
|
value = source[z] = rule.transform(value);
|
|
|
}
|
|
|
|
|
|
if (typeof rule === 'function') {
|
|
|
rule = {
|
|
|
validator: rule
|
|
|
};
|
|
|
} else {
|
|
|
rule = _extends({}, rule);
|
|
|
} // Fill validator. Skip if nothing need to validate
|
|
|
|
|
|
|
|
|
rule.validator = _this2.getValidationMethod(rule);
|
|
|
|
|
|
if (!rule.validator) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
rule.field = z;
|
|
|
rule.fullField = rule.fullField || z;
|
|
|
rule.type = _this2.getType(rule);
|
|
|
series[z] = series[z] || [];
|
|
|
series[z].push({
|
|
|
rule: rule,
|
|
|
value: value,
|
|
|
source: source,
|
|
|
field: z
|
|
|
});
|
|
|
});
|
|
|
});
|
|
|
var errorFields = {};
|
|
|
return asyncMap(series, options, function (data, doIt) {
|
|
|
var rule = data.rule;
|
|
|
var deep = (rule.type === 'object' || rule.type === 'array') && (typeof rule.fields === 'object' || typeof rule.defaultField === 'object');
|
|
|
deep = deep && (rule.required || !rule.required && data.value);
|
|
|
rule.field = data.field;
|
|
|
|
|
|
function addFullField(key, schema) {
|
|
|
return _extends({}, schema, {
|
|
|
fullField: rule.fullField + "." + key,
|
|
|
fullFields: rule.fullFields ? [].concat(rule.fullFields, [key]) : [key]
|
|
|
});
|
|
|
}
|
|
|
|
|
|
function cb(e) {
|
|
|
if (e === void 0) {
|
|
|
e = [];
|
|
|
}
|
|
|
|
|
|
var errorList = Array.isArray(e) ? e : [e];
|
|
|
|
|
|
if (!options.suppressWarning && errorList.length) {
|
|
|
Schema.warning('async-validator:', errorList);
|
|
|
}
|
|
|
|
|
|
if (errorList.length && rule.message !== undefined) {
|
|
|
errorList = [].concat(rule.message);
|
|
|
} // Fill error info
|
|
|
|
|
|
|
|
|
var filledErrors = errorList.map(complementError(rule, source));
|
|
|
|
|
|
if (options.first && filledErrors.length) {
|
|
|
errorFields[rule.field] = 1;
|
|
|
return doIt(filledErrors);
|
|
|
}
|
|
|
|
|
|
if (!deep) {
|
|
|
doIt(filledErrors);
|
|
|
} else {
|
|
|
// if rule is required but the target object
|
|
|
// does not exist fail at the rule level and don't
|
|
|
// go deeper
|
|
|
if (rule.required && !data.value) {
|
|
|
if (rule.message !== undefined) {
|
|
|
filledErrors = [].concat(rule.message).map(complementError(rule, source));
|
|
|
} else if (options.error) {
|
|
|
filledErrors = [options.error(rule, format(options.messages.required, rule.field))];
|
|
|
}
|
|
|
|
|
|
return doIt(filledErrors);
|
|
|
}
|
|
|
|
|
|
var fieldsSchema = {};
|
|
|
|
|
|
if (rule.defaultField) {
|
|
|
Object.keys(data.value).map(function (key) {
|
|
|
fieldsSchema[key] = rule.defaultField;
|
|
|
});
|
|
|
}
|
|
|
|
|
|
fieldsSchema = _extends({}, fieldsSchema, data.rule.fields);
|
|
|
var paredFieldsSchema = {};
|
|
|
Object.keys(fieldsSchema).forEach(function (field) {
|
|
|
var fieldSchema = fieldsSchema[field];
|
|
|
var fieldSchemaList = Array.isArray(fieldSchema) ? fieldSchema : [fieldSchema];
|
|
|
paredFieldsSchema[field] = fieldSchemaList.map(addFullField.bind(null, field));
|
|
|
});
|
|
|
var schema = new Schema(paredFieldsSchema);
|
|
|
schema.messages(options.messages);
|
|
|
|
|
|
if (data.rule.options) {
|
|
|
data.rule.options.messages = options.messages;
|
|
|
data.rule.options.error = options.error;
|
|
|
}
|
|
|
|
|
|
schema.validate(data.value, data.rule.options || options, function (errs) {
|
|
|
var finalErrors = [];
|
|
|
|
|
|
if (filledErrors && filledErrors.length) {
|
|
|
finalErrors.push.apply(finalErrors, filledErrors);
|
|
|
}
|
|
|
|
|
|
if (errs && errs.length) {
|
|
|
finalErrors.push.apply(finalErrors, errs);
|
|
|
}
|
|
|
|
|
|
doIt(finalErrors.length ? finalErrors : null);
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var res;
|
|
|
|
|
|
if (rule.asyncValidator) {
|
|
|
res = rule.asyncValidator(rule, data.value, cb, data.source, options);
|
|
|
} else if (rule.validator) {
|
|
|
try {
|
|
|
res = rule.validator(rule, data.value, cb, data.source, options);
|
|
|
} catch (error) {
|
|
|
console.error == null ? void 0 : console.error(error); // rethrow to report error
|
|
|
|
|
|
if (!options.suppressValidatorError) {
|
|
|
setTimeout(function () {
|
|
|
throw error;
|
|
|
}, 0);
|
|
|
}
|
|
|
|
|
|
cb(error.message);
|
|
|
}
|
|
|
|
|
|
if (res === true) {
|
|
|
cb();
|
|
|
} else if (res === false) {
|
|
|
cb(typeof rule.message === 'function' ? rule.message(rule.fullField || rule.field) : rule.message || (rule.fullField || rule.field) + " fails");
|
|
|
} else if (res instanceof Array) {
|
|
|
cb(res);
|
|
|
} else if (res instanceof Error) {
|
|
|
cb(res.message);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (res && res.then) {
|
|
|
res.then(function () {
|
|
|
return cb();
|
|
|
}, function (e) {
|
|
|
return cb(e);
|
|
|
});
|
|
|
}
|
|
|
}, function (results) {
|
|
|
complete(results);
|
|
|
}, source);
|
|
|
};
|
|
|
|
|
|
_proto.getType = function getType(rule) {
|
|
|
if (rule.type === undefined && rule.pattern instanceof RegExp) {
|
|
|
rule.type = 'pattern';
|
|
|
}
|
|
|
|
|
|
if (typeof rule.validator !== 'function' && rule.type && !validators.hasOwnProperty(rule.type)) {
|
|
|
throw new Error(format('Unknown rule type %s', rule.type));
|
|
|
}
|
|
|
|
|
|
return rule.type || 'string';
|
|
|
};
|
|
|
|
|
|
_proto.getValidationMethod = function getValidationMethod(rule) {
|
|
|
if (typeof rule.validator === 'function') {
|
|
|
return rule.validator;
|
|
|
}
|
|
|
|
|
|
var keys = Object.keys(rule);
|
|
|
var messageIndex = keys.indexOf('message');
|
|
|
|
|
|
if (messageIndex !== -1) {
|
|
|
keys.splice(messageIndex, 1);
|
|
|
}
|
|
|
|
|
|
if (keys.length === 1 && keys[0] === 'required') {
|
|
|
return validators.required;
|
|
|
}
|
|
|
|
|
|
return validators[this.getType(rule)] || undefined;
|
|
|
};
|
|
|
|
|
|
return Schema;
|
|
|
}();
|
|
|
|
|
|
Schema.register = function register(type, validator) {
|
|
|
if (typeof validator !== 'function') {
|
|
|
throw new Error('Cannot register a validator by type, validator is not a function');
|
|
|
}
|
|
|
|
|
|
validators[type] = validator;
|
|
|
};
|
|
|
|
|
|
Schema.warning = warning;
|
|
|
Schema.messages = messages;
|
|
|
Schema.validators = validators;
|
|
|
|
|
|
|
|
|
//# sourceMappingURL=index.js.map
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./src/components/MyButton/index.js":
|
|
|
/*!******************************************!*\
|
|
|
!*** ./src/components/MyButton/index.js ***!
|
|
|
\******************************************/
|
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var antd_lib_button__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! antd/lib/button */ "./node_modules/antd/lib/button/index.js");
|
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
|
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
|
/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ "./node_modules/prop-types/index.js");
|
|
|
/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__);
|
|
|
|
|
|
|
|
|
|
|
|
function MyButton(_ref) {
|
|
|
var text = _ref.text,
|
|
|
onClick = _ref.onClick;
|
|
|
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(antd_lib_button__WEBPACK_IMPORTED_MODULE_1__["default"], {
|
|
|
type: "primary",
|
|
|
onClick: onClick
|
|
|
}, text));
|
|
|
}
|
|
|
;
|
|
|
MyButton.propTypes = {
|
|
|
text: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string.isRequired),
|
|
|
onClick: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().func.isRequired)
|
|
|
};
|
|
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (MyButton);
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./src/containers/DashboardContainer/index.js":
|
|
|
/*!****************************************************!*\
|
|
|
!*** ./src/containers/DashboardContainer/index.js ***!
|
|
|
\****************************************************/
|
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
|
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
|
/* harmony import */ var _components_MyButton__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../components/MyButton */ "./src/components/MyButton/index.js");
|
|
|
/* harmony import */ var _index_less__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./index.less */ "./src/containers/DashboardContainer/index.less");
|
|
|
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
|
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 _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 _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_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 _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
|
|
|
|
|
|
|
|
|
|
function DashboardContainer() {
|
|
|
var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(0),
|
|
|
_useState2 = _slicedToArray(_useState, 2),
|
|
|
counter = _useState2[0],
|
|
|
setCounter = _useState2[1];
|
|
|
var refButton = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)();
|
|
|
(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {
|
|
|
$(refButton.current).fadeOut(250).fadeIn(250);
|
|
|
}, [counter]);
|
|
|
var onClick = function onClick() {
|
|
|
setCounter(counter + 1);
|
|
|
};
|
|
|
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
|
|
|
className: "my-dashboard"
|
|
|
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
|
|
|
ref: refButton,
|
|
|
className: "my-dashboard__button"
|
|
|
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_MyButton__WEBPACK_IMPORTED_MODULE_1__["default"], {
|
|
|
text: "ReactJS \u26A1 Ant.Design \uD83D\uDC49 Click me! ".concat(counter),
|
|
|
onClick: onClick
|
|
|
})));
|
|
|
}
|
|
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (DashboardContainer);
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/classnames/index.js":
|
|
|
/*!******************************************!*\
|
|
|
!*** ./node_modules/classnames/index.js ***!
|
|
|
\******************************************/
|
|
|
/***/ ((module, exports) => {
|
|
|
|
|
|
var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
|
|
|
Copyright (c) 2018 Jed Watson.
|
|
|
Licensed under the MIT License (MIT), see
|
|
|
http://jedwatson.github.io/classnames
|
|
|
*/
|
|
|
/* global define */
|
|
|
|
|
|
(function () {
|
|
|
'use strict';
|
|
|
|
|
|
var hasOwn = {}.hasOwnProperty;
|
|
|
var nativeCodeString = '[native code]';
|
|
|
|
|
|
function classNames() {
|
|
|
var classes = [];
|
|
|
|
|
|
for (var i = 0; i < arguments.length; i++) {
|
|
|
var arg = arguments[i];
|
|
|
if (!arg) continue;
|
|
|
|
|
|
var argType = typeof arg;
|
|
|
|
|
|
if (argType === 'string' || argType === 'number') {
|
|
|
classes.push(arg);
|
|
|
} else if (Array.isArray(arg)) {
|
|
|
if (arg.length) {
|
|
|
var inner = classNames.apply(null, arg);
|
|
|
if (inner) {
|
|
|
classes.push(inner);
|
|
|
}
|
|
|
}
|
|
|
} else if (argType === 'object') {
|
|
|
if (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {
|
|
|
classes.push(arg.toString());
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
for (var key in arg) {
|
|
|
if (hasOwn.call(arg, key) && arg[key]) {
|
|
|
classes.push(key);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return classes.join(' ');
|
|
|
}
|
|
|
|
|
|
if ( true && module.exports) {
|
|
|
classNames.default = classNames;
|
|
|
module.exports = classNames;
|
|
|
} else if (true) {
|
|
|
// register as 'classnames', consistent with npm package name
|
|
|
!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function () {
|
|
|
return classNames;
|
|
|
}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),
|
|
|
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
|
|
|
} else {}
|
|
|
}());
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./src/containers/DashboardContainer/index.less":
|
|
|
/*!*******************************************************************************************************************************************************************************************!*\
|
|
|
!*** ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./src/containers/DashboardContainer/index.less ***!
|
|
|
\*******************************************************************************************************************************************************************************************/
|
|
|
/***/ ((module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js");
|
|
|
/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
|
|
|
/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js");
|
|
|
/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
|
|
|
// Imports
|
|
|
|
|
|
|
|
|
var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
|
|
|
// Module
|
|
|
___CSS_LOADER_EXPORT___.push([module.id, ".my-dashboard {\n width: 100%;\n}\n.my-dashboard__button {\n padding: 80px;\n text-align: center;\n}\n", "",{"version":3,"sources":["webpack://./src/containers/DashboardContainer/index.less"],"names":[],"mappings":"AACA;EACE,WAAA;AAAF;AACE;EACE,aAAA;EACA,kBAAA;AACJ","sourcesContent":["\n.my-dashboard {\n width: 100%;\n &__button {\n padding: 80px;\n text-align: center;\n }\n}\n\n@primary-color: #5b5ce1;@link-color: #5b5ce1;@border-radius-base: 5px;"],"sourceRoot":""}]);
|
|
|
// Exports
|
|
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./src/styles/main.less":
|
|
|
/*!*******************************************************************************************************************************************************************!*\
|
|
|
!*** ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./src/styles/main.less ***!
|
|
|
\*******************************************************************************************************************************************************************/
|
|
|
/***/ ((module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js");
|
|
|
/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
|
|
|
/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js");
|
|
|
/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
|
|
|
/* harmony import */ var _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/getUrl.js */ "./node_modules/css-loader/dist/runtime/getUrl.js");
|
|
|
/* harmony import */ var _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__);
|
|
|
// Imports
|
|
|
|
|
|
|
|
|
|
|
|
var ___CSS_LOADER_URL_IMPORT_0___ = new URL(/* asset import */ __webpack_require__(/*! data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTQuNSAyLjVoLTEzQS41LjUgMCAwIDAgMSAzdjEwYS41LjUgMCAwIDAgLjUuNWgxM2EuNS41IDAgMCAwIC41LS41VjNhLjUuNSAwIDAgMC0uNS0uNXpNNS4yODEgNC43NWExIDEgMCAwIDEgMCAyIDEgMSAwIDAgMSAwLTJ6bTguMDMgNi44M2EuMTI3LjEyNyAwIDAgMS0uMDgxLjAzSDIuNzY5YS4xMjUuMTI1IDAgMCAxLS4wOTYtLjIwN2wyLjY2MS0zLjE1NmEuMTI2LjEyNiAwIDAgMSAuMTc3LS4wMTZsLjAxNi4wMTZMNy4wOCAxMC4wOWwyLjQ3LTIuOTNhLjEyNi4xMjYgMCAwIDEgLjE3Ny0uMDE2bC4wMTUuMDE2IDMuNTg4IDQuMjQ0YS4xMjcuMTI3IDAgMCAxLS4wMi4xNzV6IiBmaWxsPSIjOEM4QzhDIiBmaWxsLXJ1bGU9Im5vbnplcm8iLz48L3N2Zz4= */ "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTQuNSAyLjVoLTEzQS41LjUgMCAwIDAgMSAzdjEwYS41LjUgMCAwIDAgLjUuNWgxM2EuNS41IDAgMCAwIC41LS41VjNhLjUuNSAwIDAgMC0uNS0uNXpNNS4yODEgNC43NWExIDEgMCAwIDEgMCAyIDEgMSAwIDAgMSAwLTJ6bTguMDMgNi44M2EuMTI3LjEyNyAwIDAgMS0uMDgxLjAzSDIuNzY5YS4xMjUuMTI1IDAgMCAxLS4wOTYtLjIwN2wyLjY2MS0zLjE1NmEuMTI2LjEyNiAwIDAgMSAuMTc3LS4wMTZsLjAxNi4wMTZMNy4wOCAxMC4wOWwyLjQ3LTIuOTNhLjEyNi4xMjYgMCAwIDEgLjE3Ny0uMDE2bC4wMTUuMDE2IDMuNTg4IDQuMjQ0YS4xMjcuMTI3IDAgMCAxLS4wMi4xNzV6IiBmaWxsPSIjOEM4QzhDIiBmaWxsLXJ1bGU9Im5vbnplcm8iLz48L3N2Zz4="), __webpack_require__.b);
|
|
|
var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
|
|
|
var ___CSS_LOADER_URL_REPLACEMENT_0___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_0___);
|
|
|
// Module
|
|
|
___CSS_LOADER_EXPORT___.push([module.id, "/*** GLOBAL CSS ***/\n[class^=ant-]::-ms-clear,\n[class*= ant-]::-ms-clear,\n[class^=ant-] input::-ms-clear,\n[class*= ant-] input::-ms-clear,\n[class^=ant-] input::-ms-reveal,\n[class*= ant-] input::-ms-reveal {\n display: none;\n}\n/* stylelint-disable property-no-vendor-prefix, at-rule-no-vendor-prefix */\nhtml,\nbody {\n width: 100%;\n height: 100%;\n}\ninput::-ms-clear,\ninput::-ms-reveal {\n display: none;\n}\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\nhtml {\n font-family: sans-serif;\n line-height: 1.15;\n -webkit-text-size-adjust: 100%;\n -ms-text-size-adjust: 100%;\n -ms-overflow-style: scrollbar;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n@-ms-viewport {\n width: device-width;\n}\nbody {\n margin: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';\n font-variant: tabular-nums;\n line-height: 1.5715;\n background-color: #fff;\n font-feature-settings: 'tnum';\n}\n[tabindex='-1']:focus {\n outline: none !important;\n}\nhr {\n box-sizing: content-box;\n height: 0;\n overflow: visible;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n margin-top: 0;\n margin-bottom: 0.5em;\n color: rgba(0, 0, 0, 0.85);\n font-weight: 500;\n}\np {\n margin-top: 0;\n margin-bottom: 1em;\n}\nabbr[title],\nabbr[data-original-title] {\n text-decoration: underline;\n text-decoration: underline dotted;\n border-bottom: 0;\n cursor: help;\n}\naddress {\n margin-bottom: 1em;\n font-style: normal;\n line-height: inherit;\n}\ninput[type='text'],\ninput[type='password'],\ninput[type='number'],\ntextarea {\n -webkit-appearance: none;\n}\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1em;\n}\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\ndt {\n font-weight: 500;\n}\ndd {\n margin-bottom: 0.5em;\n margin-left: 0;\n}\nblockquote {\n margin: 0 0 1em;\n}\ndfn {\n font-style: italic;\n}\nb,\nstrong {\n font-weight: bolder;\n}\nsmall {\n font-size: 80%;\n}\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\nsub {\n bottom: -0.25em;\n}\nsup {\n top: -0.5em;\n}\na {\n color: #5b5ce1;\n text-decoration: none;\n background-color: transparent;\n outline: none;\n cursor: pointer;\n transition: color 0.3s;\n -webkit-text-decoration-skip: objects;\n}\na:hover {\n color: #8588ed;\n}\na:active {\n color: #4541ba;\n}\na:active,\na:hover {\n text-decoration: none;\n outline: 0;\n}\na:focus {\n text-decoration: none;\n outline: 0;\n}\na[disabled] {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n}\npre,\ncode,\nkbd,\nsamp {\n font-size: 1em;\n font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;\n}\npre {\n margin-top: 0;\n margin-bottom: 1em;\n overflow: auto;\n}\nfigure {\n margin: 0 0 1em;\n}\nimg {\n vertical-align: middle;\n border-style: none;\n}\na,\narea,\nbutton,\n[role='button'],\ninput:not([type='range']),\nlabel,\nselect,\nsummary,\ntextarea {\n touch-action: manipulation;\n}\ntable {\n border-collapse: collapse;\n}\ncaption {\n padding-top: 0.75em;\n padding-bottom: 0.3em;\n color: rgba(0, 0, 0, 0.45);\n text-align: left;\n caption-side: bottom;\n}\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n color: inherit;\n font-size: inherit;\n font-family: inherit;\n line-height: inherit;\n}\nbutton,\ninput {\n overflow: visible;\n}\nbutton,\nselect {\n text-transform: none;\n}\nbutton,\nhtml [type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\nbutton::-moz-focus-inner,\n[type='button']::-moz-focus-inner,\n[type='reset']::-moz-focus-inner,\n[type='submit']::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\ninput[type='radio'],\ninput[type='checkbox'] {\n box-sizing: border-box;\n padding: 0;\n}\ninput[type='date'],\ninput[type='time'],\ninput[type='datetime-local'],\ninput[type='month'] {\n -webkit-appearance: listbox;\n}\ntextarea {\n overflow: auto;\n resize: vertical;\n}\nfieldset {\n min-width: 0;\n margin: 0;\n padding: 0;\n border: 0;\n}\nlegend {\n display: block;\n width: 100%;\n max-width: 100%;\n margin-bottom: 0.5em;\n padding: 0;\n color: inherit;\n font-size: 1.5em;\n line-height: inherit;\n white-space: normal;\n}\nprogress {\n vertical-align: baseline;\n}\n[type='number']::-webkit-inner-spin-button,\n[type='number']::-webkit-outer-spin-button {\n height: auto;\n}\n[type='search'] {\n outline-offset: -2px;\n -webkit-appearance: none;\n}\n[type='search']::-webkit-search-cancel-button,\n[type='search']::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\noutput {\n display: inline-block;\n}\nsummary {\n display: list-item;\n}\ntemplate {\n display: none;\n}\n[hidden] {\n display: none !important;\n}\nmark {\n padding: 0.2em;\n background-color: #feffe6;\n}\n::selection {\n color: #fff;\n background: #5b5ce1;\n}\n.clearfix::before {\n display: table;\n content: '';\n}\n.clearfix::after {\n display: table;\n clear: both;\n content: '';\n}\n.anticon {\n display: inline-block;\n color: inherit;\n font-style: normal;\n line-height: 0;\n text-align: center;\n text-transform: none;\n vertical-align: -0.125em;\n text-rendering: optimizelegibility;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n.anticon > * {\n line-height: 1;\n}\n.anticon svg {\n display: inline-block;\n}\n.anticon::before {\n display: none;\n}\n.anticon .anticon-icon {\n display: block;\n}\n.anticon > .anticon {\n line-height: 0;\n vertical-align: 0;\n}\n.anticon[tabindex] {\n cursor: pointer;\n}\n.anticon-spin,\n.anticon-spin::before {\n display: inline-block;\n animation: loadingCircle 1s infinite linear;\n}\n.ant-fade-enter,\n.ant-fade-appear {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-fade-leave {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-fade-enter.ant-fade-enter-active,\n.ant-fade-appear.ant-fade-appear-active {\n animation-name: antFadeIn;\n animation-play-state: running;\n}\n.ant-fade-leave.ant-fade-leave-active {\n animation-name: antFadeOut;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-fade-enter,\n.ant-fade-appear {\n opacity: 0;\n animation-timing-function: linear;\n}\n.ant-fade-leave {\n animation-timing-function: linear;\n}\n@keyframes antFadeIn {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}\n@keyframes antFadeOut {\n 0% {\n opacity: 1;\n }\n 100% {\n opacity: 0;\n }\n}\n.ant-move-up-enter,\n.ant-move-up-appear {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-move-up-leave {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-move-up-enter.ant-move-up-enter-active,\n.ant-move-up-appear.ant-move-up-appear-active {\n animation-name: antMoveUpIn;\n animation-play-state: running;\n}\n.ant-move-up-leave.ant-move-up-leave-active {\n animation-name: antMoveUpOut;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-move-up-enter,\n.ant-move-up-appear {\n opacity: 0;\n animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);\n}\n.ant-move-up-leave {\n animation-timing-function: cubic-bezier(0.6, 0.04, 0.98, 0.34);\n}\n.ant-move-down-enter,\n.ant-move-down-appear {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-move-down-leave {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-move-down-enter.ant-move-down-enter-active,\n.ant-move-down-appear.ant-move-down-appear-active {\n animation-name: antMoveDownIn;\n animation-play-state: running;\n}\n.ant-move-down-leave.ant-move-down-leave-active {\n animation-name: antMoveDownOut;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-move-down-enter,\n.ant-move-down-appear {\n opacity: 0;\n animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);\n}\n.ant-move-down-leave {\n animation-timing-function: cubic-bezier(0.6, 0.04, 0.98, 0.34);\n}\n.ant-move-left-enter,\n.ant-move-left-appear {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-move-left-leave {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-move-left-enter.ant-move-left-enter-active,\n.ant-move-left-appear.ant-move-left-appear-active {\n animation-name: antMoveLeftIn;\n animation-play-state: running;\n}\n.ant-move-left-leave.ant-move-left-leave-active {\n animation-name: antMoveLeftOut;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-move-left-enter,\n.ant-move-left-appear {\n opacity: 0;\n animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);\n}\n.ant-move-left-leave {\n animation-timing-function: cubic-bezier(0.6, 0.04, 0.98, 0.34);\n}\n.ant-move-right-enter,\n.ant-move-right-appear {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-move-right-leave {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-move-right-enter.ant-move-right-enter-active,\n.ant-move-right-appear.ant-move-right-appear-active {\n animation-name: antMoveRightIn;\n animation-play-state: running;\n}\n.ant-move-right-leave.ant-move-right-leave-active {\n animation-name: antMoveRightOut;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-move-right-enter,\n.ant-move-right-appear {\n opacity: 0;\n animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);\n}\n.ant-move-right-leave {\n animation-timing-function: cubic-bezier(0.6, 0.04, 0.98, 0.34);\n}\n@keyframes antMoveDownIn {\n 0% {\n transform: translateY(100%);\n transform-origin: 0 0;\n opacity: 0;\n }\n 100% {\n transform: translateY(0%);\n transform-origin: 0 0;\n opacity: 1;\n }\n}\n@keyframes antMoveDownOut {\n 0% {\n transform: translateY(0%);\n transform-origin: 0 0;\n opacity: 1;\n }\n 100% {\n transform: translateY(100%);\n transform-origin: 0 0;\n opacity: 0;\n }\n}\n@keyframes antMoveLeftIn {\n 0% {\n transform: translateX(-100%);\n transform-origin: 0 0;\n opacity: 0;\n }\n 100% {\n transform: translateX(0%);\n transform-origin: 0 0;\n opacity: 1;\n }\n}\n@keyframes antMoveLeftOut {\n 0% {\n transform: translateX(0%);\n transform-origin: 0 0;\n opacity: 1;\n }\n 100% {\n transform: translateX(-100%);\n transform-origin: 0 0;\n opacity: 0;\n }\n}\n@keyframes antMoveRightIn {\n 0% {\n transform: translateX(100%);\n transform-origin: 0 0;\n opacity: 0;\n }\n 100% {\n transform: translateX(0%);\n transform-origin: 0 0;\n opacity: 1;\n }\n}\n@keyframes antMoveRightOut {\n 0% {\n transform: translateX(0%);\n transform-origin: 0 0;\n opacity: 1;\n }\n 100% {\n transform: translateX(100%);\n transform-origin: 0 0;\n opacity: 0;\n }\n}\n@keyframes antMoveUpIn {\n 0% {\n transform: translateY(-100%);\n transform-origin: 0 0;\n opacity: 0;\n }\n 100% {\n transform: translateY(0%);\n transform-origin: 0 0;\n opacity: 1;\n }\n}\n@keyframes antMoveUpOut {\n 0% {\n transform: translateY(0%);\n transform-origin: 0 0;\n opacity: 1;\n }\n 100% {\n transform: translateY(-100%);\n transform-origin: 0 0;\n opacity: 0;\n }\n}\n@keyframes loadingCircle {\n 100% {\n transform: rotate(360deg);\n }\n}\n[ant-click-animating='true'],\n[ant-click-animating-without-extra-node='true'] {\n position: relative;\n}\nhtml {\n --antd-wave-shadow-color: #5b5ce1;\n --scroll-bar: 0;\n}\n[ant-click-animating-without-extra-node='true']::after,\n.ant-click-animating-node {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n display: block;\n border-radius: inherit;\n box-shadow: 0 0 0 0 #5b5ce1;\n box-shadow: 0 0 0 0 var(--antd-wave-shadow-color);\n opacity: 0.2;\n animation: fadeEffect 2s cubic-bezier(0.08, 0.82, 0.17, 1), waveEffect 0.4s cubic-bezier(0.08, 0.82, 0.17, 1);\n animation-fill-mode: forwards;\n content: '';\n pointer-events: none;\n}\n@keyframes waveEffect {\n 100% {\n box-shadow: 0 0 0 #5b5ce1;\n box-shadow: 0 0 0 6px var(--antd-wave-shadow-color);\n }\n}\n@keyframes fadeEffect {\n 100% {\n opacity: 0;\n }\n}\n.ant-slide-up-enter,\n.ant-slide-up-appear {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-slide-up-leave {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-slide-up-enter.ant-slide-up-enter-active,\n.ant-slide-up-appear.ant-slide-up-appear-active {\n animation-name: antSlideUpIn;\n animation-play-state: running;\n}\n.ant-slide-up-leave.ant-slide-up-leave-active {\n animation-name: antSlideUpOut;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-slide-up-enter,\n.ant-slide-up-appear {\n opacity: 0;\n animation-timing-function: cubic-bezier(0.23, 1, 0.32, 1);\n}\n.ant-slide-up-leave {\n animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n}\n.ant-slide-down-enter,\n.ant-slide-down-appear {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-slide-down-leave {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-slide-down-enter.ant-slide-down-enter-active,\n.ant-slide-down-appear.ant-slide-down-appear-active {\n animation-name: antSlideDownIn;\n animation-play-state: running;\n}\n.ant-slide-down-leave.ant-slide-down-leave-active {\n animation-name: antSlideDownOut;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-slide-down-enter,\n.ant-slide-down-appear {\n opacity: 0;\n animation-timing-function: cubic-bezier(0.23, 1, 0.32, 1);\n}\n.ant-slide-down-leave {\n animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n}\n.ant-slide-left-enter,\n.ant-slide-left-appear {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-slide-left-leave {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-slide-left-enter.ant-slide-left-enter-active,\n.ant-slide-left-appear.ant-slide-left-appear-active {\n animation-name: antSlideLeftIn;\n animation-play-state: running;\n}\n.ant-slide-left-leave.ant-slide-left-leave-active {\n animation-name: antSlideLeftOut;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-slide-left-enter,\n.ant-slide-left-appear {\n opacity: 0;\n animation-timing-function: cubic-bezier(0.23, 1, 0.32, 1);\n}\n.ant-slide-left-leave {\n animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n}\n.ant-slide-right-enter,\n.ant-slide-right-appear {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-slide-right-leave {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-slide-right-enter.ant-slide-right-enter-active,\n.ant-slide-right-appear.ant-slide-right-appear-active {\n animation-name: antSlideRightIn;\n animation-play-state: running;\n}\n.ant-slide-right-leave.ant-slide-right-leave-active {\n animation-name: antSlideRightOut;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-slide-right-enter,\n.ant-slide-right-appear {\n opacity: 0;\n animation-timing-function: cubic-bezier(0.23, 1, 0.32, 1);\n}\n.ant-slide-right-leave {\n animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n}\n@keyframes antSlideUpIn {\n 0% {\n transform: scaleY(0.8);\n transform-origin: 0% 0%;\n opacity: 0;\n }\n 100% {\n transform: scaleY(1);\n transform-origin: 0% 0%;\n opacity: 1;\n }\n}\n@keyframes antSlideUpOut {\n 0% {\n transform: scaleY(1);\n transform-origin: 0% 0%;\n opacity: 1;\n }\n 100% {\n transform: scaleY(0.8);\n transform-origin: 0% 0%;\n opacity: 0;\n }\n}\n@keyframes antSlideDownIn {\n 0% {\n transform: scaleY(0.8);\n transform-origin: 100% 100%;\n opacity: 0;\n }\n 100% {\n transform: scaleY(1);\n transform-origin: 100% 100%;\n opacity: 1;\n }\n}\n@keyframes antSlideDownOut {\n 0% {\n transform: scaleY(1);\n transform-origin: 100% 100%;\n opacity: 1;\n }\n 100% {\n transform: scaleY(0.8);\n transform-origin: 100% 100%;\n opacity: 0;\n }\n}\n@keyframes antSlideLeftIn {\n 0% {\n transform: scaleX(0.8);\n transform-origin: 0% 0%;\n opacity: 0;\n }\n 100% {\n transform: scaleX(1);\n transform-origin: 0% 0%;\n opacity: 1;\n }\n}\n@keyframes antSlideLeftOut {\n 0% {\n transform: scaleX(1);\n transform-origin: 0% 0%;\n opacity: 1;\n }\n 100% {\n transform: scaleX(0.8);\n transform-origin: 0% 0%;\n opacity: 0;\n }\n}\n@keyframes antSlideRightIn {\n 0% {\n transform: scaleX(0.8);\n transform-origin: 100% 0%;\n opacity: 0;\n }\n 100% {\n transform: scaleX(1);\n transform-origin: 100% 0%;\n opacity: 1;\n }\n}\n@keyframes antSlideRightOut {\n 0% {\n transform: scaleX(1);\n transform-origin: 100% 0%;\n opacity: 1;\n }\n 100% {\n transform: scaleX(0.8);\n transform-origin: 100% 0%;\n opacity: 0;\n }\n}\n.ant-zoom-enter,\n.ant-zoom-appear {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-zoom-leave {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-zoom-enter.ant-zoom-enter-active,\n.ant-zoom-appear.ant-zoom-appear-active {\n animation-name: antZoomIn;\n animation-play-state: running;\n}\n.ant-zoom-leave.ant-zoom-leave-active {\n animation-name: antZoomOut;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-zoom-enter,\n.ant-zoom-appear {\n transform: scale(0);\n opacity: 0;\n animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);\n}\n.ant-zoom-enter-prepare,\n.ant-zoom-appear-prepare {\n transform: none;\n}\n.ant-zoom-leave {\n animation-timing-function: cubic-bezier(0.78, 0.14, 0.15, 0.86);\n}\n.ant-zoom-big-enter,\n.ant-zoom-big-appear {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-zoom-big-leave {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-zoom-big-enter.ant-zoom-big-enter-active,\n.ant-zoom-big-appear.ant-zoom-big-appear-active {\n animation-name: antZoomBigIn;\n animation-play-state: running;\n}\n.ant-zoom-big-leave.ant-zoom-big-leave-active {\n animation-name: antZoomBigOut;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-zoom-big-enter,\n.ant-zoom-big-appear {\n transform: scale(0);\n opacity: 0;\n animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);\n}\n.ant-zoom-big-enter-prepare,\n.ant-zoom-big-appear-prepare {\n transform: none;\n}\n.ant-zoom-big-leave {\n animation-timing-function: cubic-bezier(0.78, 0.14, 0.15, 0.86);\n}\n.ant-zoom-big-fast-enter,\n.ant-zoom-big-fast-appear {\n animation-duration: 0.1s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-zoom-big-fast-leave {\n animation-duration: 0.1s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-zoom-big-fast-enter.ant-zoom-big-fast-enter-active,\n.ant-zoom-big-fast-appear.ant-zoom-big-fast-appear-active {\n animation-name: antZoomBigIn;\n animation-play-state: running;\n}\n.ant-zoom-big-fast-leave.ant-zoom-big-fast-leave-active {\n animation-name: antZoomBigOut;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-zoom-big-fast-enter,\n.ant-zoom-big-fast-appear {\n transform: scale(0);\n opacity: 0;\n animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);\n}\n.ant-zoom-big-fast-enter-prepare,\n.ant-zoom-big-fast-appear-prepare {\n transform: none;\n}\n.ant-zoom-big-fast-leave {\n animation-timing-function: cubic-bezier(0.78, 0.14, 0.15, 0.86);\n}\n.ant-zoom-up-enter,\n.ant-zoom-up-appear {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-zoom-up-leave {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-zoom-up-enter.ant-zoom-up-enter-active,\n.ant-zoom-up-appear.ant-zoom-up-appear-active {\n animation-name: antZoomUpIn;\n animation-play-state: running;\n}\n.ant-zoom-up-leave.ant-zoom-up-leave-active {\n animation-name: antZoomUpOut;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-zoom-up-enter,\n.ant-zoom-up-appear {\n transform: scale(0);\n opacity: 0;\n animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);\n}\n.ant-zoom-up-enter-prepare,\n.ant-zoom-up-appear-prepare {\n transform: none;\n}\n.ant-zoom-up-leave {\n animation-timing-function: cubic-bezier(0.78, 0.14, 0.15, 0.86);\n}\n.ant-zoom-down-enter,\n.ant-zoom-down-appear {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-zoom-down-leave {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-zoom-down-enter.ant-zoom-down-enter-active,\n.ant-zoom-down-appear.ant-zoom-down-appear-active {\n animation-name: antZoomDownIn;\n animation-play-state: running;\n}\n.ant-zoom-down-leave.ant-zoom-down-leave-active {\n animation-name: antZoomDownOut;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-zoom-down-enter,\n.ant-zoom-down-appear {\n transform: scale(0);\n opacity: 0;\n animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);\n}\n.ant-zoom-down-enter-prepare,\n.ant-zoom-down-appear-prepare {\n transform: none;\n}\n.ant-zoom-down-leave {\n animation-timing-function: cubic-bezier(0.78, 0.14, 0.15, 0.86);\n}\n.ant-zoom-left-enter,\n.ant-zoom-left-appear {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-zoom-left-leave {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-zoom-left-enter.ant-zoom-left-enter-active,\n.ant-zoom-left-appear.ant-zoom-left-appear-active {\n animation-name: antZoomLeftIn;\n animation-play-state: running;\n}\n.ant-zoom-left-leave.ant-zoom-left-leave-active {\n animation-name: antZoomLeftOut;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-zoom-left-enter,\n.ant-zoom-left-appear {\n transform: scale(0);\n opacity: 0;\n animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);\n}\n.ant-zoom-left-enter-prepare,\n.ant-zoom-left-appear-prepare {\n transform: none;\n}\n.ant-zoom-left-leave {\n animation-timing-function: cubic-bezier(0.78, 0.14, 0.15, 0.86);\n}\n.ant-zoom-right-enter,\n.ant-zoom-right-appear {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-zoom-right-leave {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-zoom-right-enter.ant-zoom-right-enter-active,\n.ant-zoom-right-appear.ant-zoom-right-appear-active {\n animation-name: antZoomRightIn;\n animation-play-state: running;\n}\n.ant-zoom-right-leave.ant-zoom-right-leave-active {\n animation-name: antZoomRightOut;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-zoom-right-enter,\n.ant-zoom-right-appear {\n transform: scale(0);\n opacity: 0;\n animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);\n}\n.ant-zoom-right-enter-prepare,\n.ant-zoom-right-appear-prepare {\n transform: none;\n}\n.ant-zoom-right-leave {\n animation-timing-function: cubic-bezier(0.78, 0.14, 0.15, 0.86);\n}\n@keyframes antZoomIn {\n 0% {\n transform: scale(0.2);\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n}\n@keyframes antZoomOut {\n 0% {\n transform: scale(1);\n }\n 100% {\n transform: scale(0.2);\n opacity: 0;\n }\n}\n@keyframes antZoomBigIn {\n 0% {\n transform: scale(0.8);\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n}\n@keyframes antZoomBigOut {\n 0% {\n transform: scale(1);\n }\n 100% {\n transform: scale(0.8);\n opacity: 0;\n }\n}\n@keyframes antZoomUpIn {\n 0% {\n transform: scale(0.8);\n transform-origin: 50% 0%;\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n transform-origin: 50% 0%;\n }\n}\n@keyframes antZoomUpOut {\n 0% {\n transform: scale(1);\n transform-origin: 50% 0%;\n }\n 100% {\n transform: scale(0.8);\n transform-origin: 50% 0%;\n opacity: 0;\n }\n}\n@keyframes antZoomLeftIn {\n 0% {\n transform: scale(0.8);\n transform-origin: 0% 50%;\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n transform-origin: 0% 50%;\n }\n}\n@keyframes antZoomLeftOut {\n 0% {\n transform: scale(1);\n transform-origin: 0% 50%;\n }\n 100% {\n transform: scale(0.8);\n transform-origin: 0% 50%;\n opacity: 0;\n }\n}\n@keyframes antZoomRightIn {\n 0% {\n transform: scale(0.8);\n transform-origin: 100% 50%;\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n transform-origin: 100% 50%;\n }\n}\n@keyframes antZoomRightOut {\n 0% {\n transform: scale(1);\n transform-origin: 100% 50%;\n }\n 100% {\n transform: scale(0.8);\n transform-origin: 100% 50%;\n opacity: 0;\n }\n}\n@keyframes antZoomDownIn {\n 0% {\n transform: scale(0.8);\n transform-origin: 50% 100%;\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n transform-origin: 50% 100%;\n }\n}\n@keyframes antZoomDownOut {\n 0% {\n transform: scale(1);\n transform-origin: 50% 100%;\n }\n 100% {\n transform: scale(0.8);\n transform-origin: 50% 100%;\n opacity: 0;\n }\n}\n.ant-motion-collapse-legacy {\n overflow: hidden;\n}\n.ant-motion-collapse-legacy-active {\n transition: height 0.2s cubic-bezier(0.645, 0.045, 0.355, 1), opacity 0.2s cubic-bezier(0.645, 0.045, 0.355, 1) !important;\n}\n.ant-motion-collapse {\n overflow: hidden;\n transition: height 0.2s cubic-bezier(0.645, 0.045, 0.355, 1), opacity 0.2s cubic-bezier(0.645, 0.045, 0.355, 1) !important;\n}\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-affix {\n position: fixed;\n z-index: 10;\n}\n.ant-alert {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n display: flex;\n align-items: center;\n padding: 8px 15px;\n word-wrap: break-word;\n border-radius: 5px;\n}\n.ant-alert-content {\n flex: 1;\n min-width: 0;\n}\n.ant-alert-icon {\n margin-right: 8px;\n}\n.ant-alert-description {\n display: none;\n font-size: 14px;\n line-height: 22px;\n}\n.ant-alert-success {\n background-color: #f6ffed;\n border: 1px solid #b7eb8f;\n}\n.ant-alert-success .ant-alert-icon {\n color: #52c41a;\n}\n.ant-alert-info {\n background-color: #f0f2ff;\n border: 1px solid #e0e3ff;\n}\n.ant-alert-info .ant-alert-icon {\n color: #5b5ce1;\n}\n.ant-alert-warning {\n background-color: #fffbe6;\n border: 1px solid #ffe58f;\n}\n.ant-alert-warning .ant-alert-icon {\n color: #faad14;\n}\n.ant-alert-error {\n background-color: #fff2f0;\n border: 1px solid #ffccc7;\n}\n.ant-alert-error .ant-alert-icon {\n color: #ff4d4f;\n}\n.ant-alert-error .ant-alert-description > pre {\n margin: 0;\n padding: 0;\n}\n.ant-alert-action {\n margin-left: 8px;\n}\n.ant-alert-close-icon {\n margin-left: 8px;\n padding: 0;\n overflow: hidden;\n font-size: 12px;\n line-height: 12px;\n background-color: transparent;\n border: none;\n outline: none;\n cursor: pointer;\n}\n.ant-alert-close-icon .anticon-close {\n color: rgba(0, 0, 0, 0.45);\n transition: color 0.3s;\n}\n.ant-alert-close-icon .anticon-close:hover {\n color: rgba(0, 0, 0, 0.75);\n}\n.ant-alert-close-text {\n color: rgba(0, 0, 0, 0.45);\n transition: color 0.3s;\n}\n.ant-alert-close-text:hover {\n color: rgba(0, 0, 0, 0.75);\n}\n.ant-alert-with-description {\n align-items: flex-start;\n padding: 15px 15px 15px 24px;\n}\n.ant-alert-with-description.ant-alert-no-icon {\n padding: 15px 15px;\n}\n.ant-alert-with-description .ant-alert-icon {\n margin-right: 15px;\n font-size: 24px;\n}\n.ant-alert-with-description .ant-alert-message {\n display: block;\n margin-bottom: 4px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 16px;\n}\n.ant-alert-message {\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-alert-with-description .ant-alert-description {\n display: block;\n}\n.ant-alert.ant-alert-motion-leave {\n overflow: hidden;\n opacity: 1;\n transition: max-height 0.3s cubic-bezier(0.78, 0.14, 0.15, 0.86), opacity 0.3s cubic-bezier(0.78, 0.14, 0.15, 0.86), padding-top 0.3s cubic-bezier(0.78, 0.14, 0.15, 0.86), padding-bottom 0.3s cubic-bezier(0.78, 0.14, 0.15, 0.86), margin-bottom 0.3s cubic-bezier(0.78, 0.14, 0.15, 0.86);\n}\n.ant-alert.ant-alert-motion-leave-active {\n max-height: 0;\n margin-bottom: 0 !important;\n padding-top: 0;\n padding-bottom: 0;\n opacity: 0;\n}\n.ant-alert-banner {\n margin-bottom: 0;\n border: 0;\n border-radius: 0;\n}\n.ant-alert.ant-alert-rtl {\n direction: rtl;\n}\n.ant-alert-rtl .ant-alert-icon {\n margin-right: auto;\n margin-left: 8px;\n}\n.ant-alert-rtl .ant-alert-action {\n margin-right: 8px;\n margin-left: auto;\n}\n.ant-alert-rtl .ant-alert-close-icon {\n margin-right: 8px;\n margin-left: auto;\n}\n.ant-alert-rtl.ant-alert-with-description {\n padding-right: 24px;\n padding-left: 15px;\n}\n.ant-alert-rtl.ant-alert-with-description .ant-alert-icon {\n margin-right: auto;\n margin-left: 15px;\n}\n.ant-anchor {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n padding-left: 2px;\n}\n.ant-anchor-wrapper {\n margin-left: -4px;\n padding-left: 4px;\n overflow: auto;\n background-color: transparent;\n}\n.ant-anchor-ink {\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n}\n.ant-anchor-ink::before {\n position: relative;\n display: block;\n width: 2px;\n height: 100%;\n margin: 0 auto;\n background-color: #f0f0f0;\n content: ' ';\n}\n.ant-anchor-ink-ball {\n position: absolute;\n left: 50%;\n display: none;\n width: 8px;\n height: 8px;\n background-color: #fff;\n border: 2px solid #5b5ce1;\n border-radius: 8px;\n transform: translateX(-50%);\n transition: top 0.3s ease-in-out;\n}\n.ant-anchor-ink-ball.ant-ink-ball-visible {\n display: inline-block;\n}\n.ant-anchor-fixed .ant-anchor-ink .ant-anchor-ink-ball {\n display: none;\n}\n.ant-anchor-link {\n padding: 4px 0 4px 16px;\n}\n.ant-anchor-link-title {\n position: relative;\n display: block;\n margin-bottom: 3px;\n overflow: hidden;\n color: rgba(0, 0, 0, 0.85);\n white-space: nowrap;\n text-overflow: ellipsis;\n transition: all 0.3s;\n}\n.ant-anchor-link-title:only-child {\n margin-bottom: 0;\n}\n.ant-anchor-link-active > .ant-anchor-link-title {\n color: #5b5ce1;\n}\n.ant-anchor-link .ant-anchor-link {\n padding-top: 2px;\n padding-bottom: 2px;\n}\n.ant-anchor-rtl {\n direction: rtl;\n}\n.ant-anchor-rtl.ant-anchor-wrapper {\n margin-right: -4px;\n margin-left: 0;\n padding-right: 4px;\n padding-left: 0;\n}\n.ant-anchor-rtl .ant-anchor-ink {\n right: 0;\n left: auto;\n}\n.ant-anchor-rtl .ant-anchor-ink-ball {\n right: 50%;\n left: 0;\n transform: translateX(50%);\n}\n.ant-anchor-rtl .ant-anchor-link {\n padding: 4px 16px 4px 0;\n}\n.ant-select-auto-complete {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n}\n.ant-select-auto-complete .ant-select-clear {\n right: 13px;\n}\n.ant-avatar {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n display: inline-block;\n overflow: hidden;\n color: #fff;\n white-space: nowrap;\n text-align: center;\n vertical-align: middle;\n background: #ccc;\n width: 32px;\n height: 32px;\n line-height: 32px;\n border-radius: 50%;\n}\n.ant-avatar-image {\n background: transparent;\n}\n.ant-avatar .ant-image-img {\n display: block;\n}\n.ant-avatar-string {\n position: absolute;\n left: 50%;\n transform-origin: 0 center;\n}\n.ant-avatar.ant-avatar-icon {\n font-size: 18px;\n}\n.ant-avatar.ant-avatar-icon > .anticon {\n margin: 0;\n}\n.ant-avatar-lg {\n width: 40px;\n height: 40px;\n line-height: 40px;\n border-radius: 50%;\n}\n.ant-avatar-lg-string {\n position: absolute;\n left: 50%;\n transform-origin: 0 center;\n}\n.ant-avatar-lg.ant-avatar-icon {\n font-size: 24px;\n}\n.ant-avatar-lg.ant-avatar-icon > .anticon {\n margin: 0;\n}\n.ant-avatar-sm {\n width: 24px;\n height: 24px;\n line-height: 24px;\n border-radius: 50%;\n}\n.ant-avatar-sm-string {\n position: absolute;\n left: 50%;\n transform-origin: 0 center;\n}\n.ant-avatar-sm.ant-avatar-icon {\n font-size: 14px;\n}\n.ant-avatar-sm.ant-avatar-icon > .anticon {\n margin: 0;\n}\n.ant-avatar-square {\n border-radius: 5px;\n}\n.ant-avatar > img {\n display: block;\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n.ant-avatar-group {\n display: inline-flex;\n}\n.ant-avatar-group .ant-avatar {\n border: 1px solid #fff;\n}\n.ant-avatar-group .ant-avatar:not(:first-child) {\n margin-left: -8px;\n}\n.ant-avatar-group-popover .ant-avatar + .ant-avatar {\n margin-left: 3px;\n}\n.ant-avatar-group-rtl .ant-avatar:not(:first-child) {\n margin-right: -8px;\n margin-left: 0;\n}\n.ant-avatar-group-popover.ant-popover-rtl .ant-avatar + .ant-avatar {\n margin-right: 3px;\n margin-left: 0;\n}\n.ant-back-top {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: fixed;\n right: 100px;\n bottom: 50px;\n z-index: 10;\n width: 40px;\n height: 40px;\n cursor: pointer;\n}\n.ant-back-top:empty {\n display: none;\n}\n.ant-back-top-rtl {\n right: auto;\n left: 100px;\n direction: rtl;\n}\n.ant-back-top-content {\n width: 40px;\n height: 40px;\n overflow: hidden;\n color: #fff;\n text-align: center;\n background-color: rgba(0, 0, 0, 0.45);\n border-radius: 20px;\n transition: all 0.3s;\n}\n.ant-back-top-content:hover {\n background-color: rgba(0, 0, 0, 0.85);\n transition: all 0.3s;\n}\n.ant-back-top-icon {\n font-size: 24px;\n line-height: 40px;\n}\n@media screen and (max-width: 768px) {\n .ant-back-top {\n right: 60px;\n }\n .ant-back-top-rtl {\n right: auto;\n left: 60px;\n }\n}\n@media screen and (max-width: 480px) {\n .ant-back-top {\n right: 20px;\n }\n .ant-back-top-rtl {\n right: auto;\n left: 20px;\n }\n}\n.ant-badge {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n display: inline-block;\n line-height: 1;\n}\n.ant-badge-count {\n z-index: auto;\n min-width: 20px;\n height: 20px;\n padding: 0 6px;\n color: #fff;\n font-weight: normal;\n font-size: 12px;\n line-height: 20px;\n white-space: nowrap;\n text-align: center;\n background: #ff4d4f;\n border-radius: 10px;\n box-shadow: 0 0 0 1px #fff;\n}\n.ant-badge-count a,\n.ant-badge-count a:hover {\n color: #fff;\n}\n.ant-badge-count-sm {\n min-width: 14px;\n height: 14px;\n padding: 0;\n font-size: 12px;\n line-height: 14px;\n border-radius: 7px;\n}\n.ant-badge-multiple-words {\n padding: 0 8px;\n}\n.ant-badge-dot {\n z-index: auto;\n width: 6px;\n min-width: 6px;\n height: 6px;\n background: #ff4d4f;\n border-radius: 100%;\n box-shadow: 0 0 0 1px #fff;\n}\n.ant-badge-dot.ant-scroll-number {\n transition: background 1.5s;\n}\n.ant-badge-count,\n.ant-badge-dot,\n.ant-badge .ant-scroll-number-custom-component {\n position: absolute;\n top: 0;\n right: 0;\n transform: translate(50%, -50%);\n transform-origin: 100% 0%;\n}\n.ant-badge-count.anticon-spin,\n.ant-badge-dot.anticon-spin,\n.ant-badge .ant-scroll-number-custom-component.anticon-spin {\n animation: antBadgeLoadingCircle 1s infinite linear;\n}\n.ant-badge-status {\n line-height: inherit;\n vertical-align: baseline;\n}\n.ant-badge-status-dot {\n position: relative;\n top: -1px;\n display: inline-block;\n width: 6px;\n height: 6px;\n vertical-align: middle;\n border-radius: 50%;\n}\n.ant-badge-status-success {\n background-color: #52c41a;\n}\n.ant-badge-status-processing {\n position: relative;\n background-color: #1890ff;\n}\n.ant-badge-status-processing::after {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 1px solid #1890ff;\n border-radius: 50%;\n animation: antStatusProcessing 1.2s infinite ease-in-out;\n content: '';\n}\n.ant-badge-status-default {\n background-color: #d9d9d9;\n}\n.ant-badge-status-error {\n background-color: #ff4d4f;\n}\n.ant-badge-status-warning {\n background-color: #faad14;\n}\n.ant-badge-status-pink {\n background: #eb2f96;\n}\n.ant-badge-status-magenta {\n background: #eb2f96;\n}\n.ant-badge-status-red {\n background: #f5222d;\n}\n.ant-badge-status-volcano {\n background: #fa541c;\n}\n.ant-badge-status-orange {\n background: #fa8c16;\n}\n.ant-badge-status-yellow {\n background: #fadb14;\n}\n.ant-badge-status-gold {\n background: #faad14;\n}\n.ant-badge-status-cyan {\n background: #13c2c2;\n}\n.ant-badge-status-lime {\n background: #a0d911;\n}\n.ant-badge-status-green {\n background: #52c41a;\n}\n.ant-badge-status-blue {\n background: #1890ff;\n}\n.ant-badge-status-geekblue {\n background: #2f54eb;\n}\n.ant-badge-status-purple {\n background: #722ed1;\n}\n.ant-badge-status-text {\n margin-left: 8px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n}\n.ant-badge-zoom-appear,\n.ant-badge-zoom-enter {\n animation: antZoomBadgeIn 0.3s cubic-bezier(0.12, 0.4, 0.29, 1.46);\n animation-fill-mode: both;\n}\n.ant-badge-zoom-leave {\n animation: antZoomBadgeOut 0.3s cubic-bezier(0.71, -0.46, 0.88, 0.6);\n animation-fill-mode: both;\n}\n.ant-badge-not-a-wrapper .ant-badge-zoom-appear,\n.ant-badge-not-a-wrapper .ant-badge-zoom-enter {\n animation: antNoWrapperZoomBadgeIn 0.3s cubic-bezier(0.12, 0.4, 0.29, 1.46);\n}\n.ant-badge-not-a-wrapper .ant-badge-zoom-leave {\n animation: antNoWrapperZoomBadgeOut 0.3s cubic-bezier(0.71, -0.46, 0.88, 0.6);\n}\n.ant-badge-not-a-wrapper:not(.ant-badge-status) {\n vertical-align: middle;\n}\n.ant-badge-not-a-wrapper .ant-scroll-number-custom-component,\n.ant-badge-not-a-wrapper .ant-badge-count {\n transform: none;\n}\n.ant-badge-not-a-wrapper .ant-scroll-number-custom-component,\n.ant-badge-not-a-wrapper .ant-scroll-number {\n position: relative;\n top: auto;\n display: block;\n transform-origin: 50% 50%;\n}\n@keyframes antStatusProcessing {\n 0% {\n transform: scale(0.8);\n opacity: 0.5;\n }\n 100% {\n transform: scale(2.4);\n opacity: 0;\n }\n}\n.ant-scroll-number {\n overflow: hidden;\n direction: ltr;\n}\n.ant-scroll-number-only {\n position: relative;\n display: inline-block;\n height: 20px;\n transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\n /* stylelint-disable property-no-vendor-prefix */\n -webkit-transform-style: preserve-3d;\n -webkit-backface-visibility: hidden;\n /* stylelint-enable property-no-vendor-prefix */\n}\n.ant-scroll-number-only > p.ant-scroll-number-only-unit {\n height: 20px;\n margin: 0;\n /* stylelint-disable property-no-vendor-prefix */\n -webkit-transform-style: preserve-3d;\n -webkit-backface-visibility: hidden;\n /* stylelint-enable property-no-vendor-prefix */\n}\n.ant-scroll-number-symbol {\n vertical-align: top;\n}\n@keyframes antZoomBadgeIn {\n 0% {\n transform: scale(0) translate(50%, -50%);\n opacity: 0;\n }\n 100% {\n transform: scale(1) translate(50%, -50%);\n }\n}\n@keyframes antZoomBadgeOut {\n 0% {\n transform: scale(1) translate(50%, -50%);\n }\n 100% {\n transform: scale(0) translate(50%, -50%);\n opacity: 0;\n }\n}\n@keyframes antNoWrapperZoomBadgeIn {\n 0% {\n transform: scale(0);\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n }\n}\n@keyframes antNoWrapperZoomBadgeOut {\n 0% {\n transform: scale(1);\n }\n 100% {\n transform: scale(0);\n opacity: 0;\n }\n}\n@keyframes antBadgeLoadingCircle {\n 0% {\n transform-origin: 50%;\n }\n 100% {\n transform: translate(50%, -50%) rotate(360deg);\n transform-origin: 50%;\n }\n}\n.ant-ribbon-wrapper {\n position: relative;\n}\n.ant-ribbon {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: absolute;\n top: 8px;\n height: 22px;\n padding: 0 8px;\n color: #fff;\n line-height: 22px;\n white-space: nowrap;\n background-color: #5b5ce1;\n border-radius: 2px;\n}\n.ant-ribbon-text {\n color: #fff;\n}\n.ant-ribbon-corner {\n position: absolute;\n top: 100%;\n width: 8px;\n height: 8px;\n color: currentcolor;\n border: 4px solid;\n transform: scaleY(0.75);\n transform-origin: top;\n}\n.ant-ribbon-corner::after {\n position: absolute;\n top: -4px;\n left: -4px;\n width: inherit;\n height: inherit;\n color: rgba(0, 0, 0, 0.25);\n border: inherit;\n content: '';\n}\n.ant-ribbon-color-pink {\n color: #eb2f96;\n background: #eb2f96;\n}\n.ant-ribbon-color-magenta {\n color: #eb2f96;\n background: #eb2f96;\n}\n.ant-ribbon-color-red {\n color: #f5222d;\n background: #f5222d;\n}\n.ant-ribbon-color-volcano {\n color: #fa541c;\n background: #fa541c;\n}\n.ant-ribbon-color-orange {\n color: #fa8c16;\n background: #fa8c16;\n}\n.ant-ribbon-color-yellow {\n color: #fadb14;\n background: #fadb14;\n}\n.ant-ribbon-color-gold {\n color: #faad14;\n background: #faad14;\n}\n.ant-ribbon-color-cyan {\n color: #13c2c2;\n background: #13c2c2;\n}\n.ant-ribbon-color-lime {\n color: #a0d911;\n background: #a0d911;\n}\n.ant-ribbon-color-green {\n color: #52c41a;\n background: #52c41a;\n}\n.ant-ribbon-color-blue {\n color: #1890ff;\n background: #1890ff;\n}\n.ant-ribbon-color-geekblue {\n color: #2f54eb;\n background: #2f54eb;\n}\n.ant-ribbon-color-purple {\n color: #722ed1;\n background: #722ed1;\n}\n.ant-ribbon.ant-ribbon-placement-end {\n right: -8px;\n border-bottom-right-radius: 0;\n}\n.ant-ribbon.ant-ribbon-placement-end .ant-ribbon-corner {\n right: 0;\n border-color: currentcolor transparent transparent currentcolor;\n}\n.ant-ribbon.ant-ribbon-placement-start {\n left: -8px;\n border-bottom-left-radius: 0;\n}\n.ant-ribbon.ant-ribbon-placement-start .ant-ribbon-corner {\n left: 0;\n border-color: currentcolor currentcolor transparent transparent;\n}\n.ant-badge-rtl {\n direction: rtl;\n}\n.ant-badge-rtl.ant-badge:not(.ant-badge-not-a-wrapper) .ant-badge-count,\n.ant-badge-rtl.ant-badge:not(.ant-badge-not-a-wrapper) .ant-badge-dot,\n.ant-badge-rtl.ant-badge:not(.ant-badge-not-a-wrapper) .ant-scroll-number-custom-component {\n right: auto;\n left: 0;\n direction: ltr;\n transform: translate(-50%, -50%);\n transform-origin: 0% 0%;\n}\n.ant-badge-rtl.ant-badge:not(.ant-badge-not-a-wrapper) .ant-scroll-number-custom-component {\n right: auto;\n left: 0;\n transform: translate(-50%, -50%);\n transform-origin: 0% 0%;\n}\n.ant-badge-rtl .ant-badge-status-text {\n margin-right: 8px;\n margin-left: 0;\n}\n.ant-badge:not(.ant-badge-not-a-wrapper).ant-badge-rtl .ant-badge-zoom-appear,\n.ant-badge:not(.ant-badge-not-a-wrapper).ant-badge-rtl .ant-badge-zoom-enter {\n animation-name: antZoomBadgeInRtl;\n}\n.ant-badge:not(.ant-badge-not-a-wrapper).ant-badge-rtl .ant-badge-zoom-leave {\n animation-name: antZoomBadgeOutRtl;\n}\n.ant-ribbon-rtl {\n direction: rtl;\n}\n.ant-ribbon-rtl.ant-ribbon-placement-end {\n right: unset;\n left: -8px;\n border-bottom-right-radius: 2px;\n border-bottom-left-radius: 0;\n}\n.ant-ribbon-rtl.ant-ribbon-placement-end .ant-ribbon-corner {\n right: unset;\n left: 0;\n border-color: currentcolor currentcolor transparent transparent;\n}\n.ant-ribbon-rtl.ant-ribbon-placement-end .ant-ribbon-corner::after {\n border-color: currentcolor currentcolor transparent transparent;\n}\n.ant-ribbon-rtl.ant-ribbon-placement-start {\n right: -8px;\n left: unset;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 2px;\n}\n.ant-ribbon-rtl.ant-ribbon-placement-start .ant-ribbon-corner {\n right: 0;\n left: unset;\n border-color: currentcolor transparent transparent currentcolor;\n}\n.ant-ribbon-rtl.ant-ribbon-placement-start .ant-ribbon-corner::after {\n border-color: currentcolor transparent transparent currentcolor;\n}\n@keyframes antZoomBadgeInRtl {\n 0% {\n transform: scale(0) translate(-50%, -50%);\n opacity: 0;\n }\n 100% {\n transform: scale(1) translate(-50%, -50%);\n }\n}\n@keyframes antZoomBadgeOutRtl {\n 0% {\n transform: scale(1) translate(-50%, -50%);\n }\n 100% {\n transform: scale(0) translate(-50%, -50%);\n opacity: 0;\n }\n}\n.ant-breadcrumb {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n color: rgba(0, 0, 0, 0.45);\n font-size: 14px;\n}\n.ant-breadcrumb .anticon {\n font-size: 14px;\n}\n.ant-breadcrumb ol {\n display: flex;\n flex-wrap: wrap;\n margin: 0;\n padding: 0;\n list-style: none;\n}\n.ant-breadcrumb a {\n color: rgba(0, 0, 0, 0.45);\n transition: color 0.3s;\n}\n.ant-breadcrumb a:hover {\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-breadcrumb li:last-child {\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-breadcrumb li:last-child a {\n color: rgba(0, 0, 0, 0.85);\n}\nli:last-child > .ant-breadcrumb-separator {\n display: none;\n}\n.ant-breadcrumb-separator {\n margin: 0 8px;\n color: rgba(0, 0, 0, 0.45);\n}\n.ant-breadcrumb-link > .anticon + span,\n.ant-breadcrumb-link > .anticon + a {\n margin-left: 4px;\n}\n.ant-breadcrumb-overlay-link > .anticon {\n margin-left: 4px;\n}\n.ant-breadcrumb-rtl {\n direction: rtl;\n}\n.ant-breadcrumb-rtl::before {\n display: table;\n content: '';\n}\n.ant-breadcrumb-rtl::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-breadcrumb-rtl::before {\n display: table;\n content: '';\n}\n.ant-breadcrumb-rtl::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-breadcrumb-rtl > span {\n float: right;\n}\n.ant-breadcrumb-rtl .ant-breadcrumb-link > .anticon + span,\n.ant-breadcrumb-rtl .ant-breadcrumb-link > .anticon + a {\n margin-right: 4px;\n margin-left: 0;\n}\n.ant-breadcrumb-rtl .ant-breadcrumb-overlay-link > .anticon {\n margin-right: 4px;\n margin-left: 0;\n}\n.ant-btn {\n line-height: 1.5715;\n position: relative;\n display: inline-block;\n font-weight: 400;\n white-space: nowrap;\n text-align: center;\n background-image: none;\n border: 1px solid transparent;\n box-shadow: 0 2px 0 rgba(0, 0, 0, 0.015);\n cursor: pointer;\n transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\n user-select: none;\n touch-action: manipulation;\n height: 32px;\n padding: 4px 15px;\n font-size: 14px;\n border-radius: 5px;\n color: rgba(0, 0, 0, 0.85);\n border-color: #d9d9d9;\n background: #fff;\n}\n.ant-btn > .anticon {\n line-height: 1;\n}\n.ant-btn,\n.ant-btn:active,\n.ant-btn:focus {\n outline: 0;\n}\n.ant-btn:not([disabled]):hover {\n text-decoration: none;\n}\n.ant-btn:not([disabled]):active {\n outline: 0;\n box-shadow: none;\n}\n.ant-btn[disabled] {\n cursor: not-allowed;\n}\n.ant-btn[disabled] > * {\n pointer-events: none;\n}\n.ant-btn-lg {\n height: 40px;\n padding: 6.4px 15px;\n font-size: 16px;\n border-radius: 5px;\n}\n.ant-btn-sm {\n height: 24px;\n padding: 0px 7px;\n font-size: 14px;\n border-radius: 5px;\n}\n.ant-btn > a:only-child {\n color: currentcolor;\n}\n.ant-btn > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn:hover,\n.ant-btn:focus {\n color: #8588ed;\n border-color: #8588ed;\n background: #fff;\n}\n.ant-btn:hover > a:only-child,\n.ant-btn:focus > a:only-child {\n color: currentcolor;\n}\n.ant-btn:hover > a:only-child::after,\n.ant-btn:focus > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn:active {\n color: #4541ba;\n border-color: #4541ba;\n background: #fff;\n}\n.ant-btn:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn[disabled],\n.ant-btn[disabled]:hover,\n.ant-btn[disabled]:focus,\n.ant-btn[disabled]:active {\n color: rgba(0, 0, 0, 0.25);\n border-color: #d9d9d9;\n background: #f5f5f5;\n text-shadow: none;\n box-shadow: none;\n}\n.ant-btn[disabled] > a:only-child,\n.ant-btn[disabled]:hover > a:only-child,\n.ant-btn[disabled]:focus > a:only-child,\n.ant-btn[disabled]:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn[disabled] > a:only-child::after,\n.ant-btn[disabled]:hover > a:only-child::after,\n.ant-btn[disabled]:focus > a:only-child::after,\n.ant-btn[disabled]:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn:hover,\n.ant-btn:focus,\n.ant-btn:active {\n text-decoration: none;\n background: #fff;\n}\n.ant-btn > span {\n display: inline-block;\n}\n.ant-btn-primary {\n color: #fff;\n border-color: #5b5ce1;\n background: #5b5ce1;\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.12);\n box-shadow: 0 2px 0 rgba(0, 0, 0, 0.045);\n}\n.ant-btn-primary > a:only-child {\n color: currentcolor;\n}\n.ant-btn-primary > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-primary:hover,\n.ant-btn-primary:focus {\n color: #fff;\n border-color: #8588ed;\n background: #8588ed;\n}\n.ant-btn-primary:hover > a:only-child,\n.ant-btn-primary:focus > a:only-child {\n color: currentcolor;\n}\n.ant-btn-primary:hover > a:only-child::after,\n.ant-btn-primary:focus > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-primary:active {\n color: #fff;\n border-color: #4541ba;\n background: #4541ba;\n}\n.ant-btn-primary:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-primary:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-primary[disabled],\n.ant-btn-primary[disabled]:hover,\n.ant-btn-primary[disabled]:focus,\n.ant-btn-primary[disabled]:active {\n color: rgba(0, 0, 0, 0.25);\n border-color: #d9d9d9;\n background: #f5f5f5;\n text-shadow: none;\n box-shadow: none;\n}\n.ant-btn-primary[disabled] > a:only-child,\n.ant-btn-primary[disabled]:hover > a:only-child,\n.ant-btn-primary[disabled]:focus > a:only-child,\n.ant-btn-primary[disabled]:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-primary[disabled] > a:only-child::after,\n.ant-btn-primary[disabled]:hover > a:only-child::after,\n.ant-btn-primary[disabled]:focus > a:only-child::after,\n.ant-btn-primary[disabled]:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-group .ant-btn-primary:not(:first-child):not(:last-child) {\n border-right-color: #8588ed;\n border-left-color: #8588ed;\n}\n.ant-btn-group .ant-btn-primary:not(:first-child):not(:last-child):disabled {\n border-color: #d9d9d9;\n}\n.ant-btn-group .ant-btn-primary:first-child:not(:last-child) {\n border-right-color: #8588ed;\n}\n.ant-btn-group .ant-btn-primary:first-child:not(:last-child)[disabled] {\n border-right-color: #d9d9d9;\n}\n.ant-btn-group .ant-btn-primary:last-child:not(:first-child),\n.ant-btn-group .ant-btn-primary + .ant-btn-primary {\n border-left-color: #8588ed;\n}\n.ant-btn-group .ant-btn-primary:last-child:not(:first-child)[disabled],\n.ant-btn-group .ant-btn-primary + .ant-btn-primary[disabled] {\n border-left-color: #d9d9d9;\n}\n.ant-btn-ghost {\n color: rgba(0, 0, 0, 0.85);\n border-color: #d9d9d9;\n background: transparent;\n}\n.ant-btn-ghost > a:only-child {\n color: currentcolor;\n}\n.ant-btn-ghost > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-ghost:hover,\n.ant-btn-ghost:focus {\n color: #8588ed;\n border-color: #8588ed;\n background: transparent;\n}\n.ant-btn-ghost:hover > a:only-child,\n.ant-btn-ghost:focus > a:only-child {\n color: currentcolor;\n}\n.ant-btn-ghost:hover > a:only-child::after,\n.ant-btn-ghost:focus > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-ghost:active {\n color: #4541ba;\n border-color: #4541ba;\n background: transparent;\n}\n.ant-btn-ghost:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-ghost:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-ghost[disabled],\n.ant-btn-ghost[disabled]:hover,\n.ant-btn-ghost[disabled]:focus,\n.ant-btn-ghost[disabled]:active {\n color: rgba(0, 0, 0, 0.25);\n border-color: #d9d9d9;\n background: #f5f5f5;\n text-shadow: none;\n box-shadow: none;\n}\n.ant-btn-ghost[disabled] > a:only-child,\n.ant-btn-ghost[disabled]:hover > a:only-child,\n.ant-btn-ghost[disabled]:focus > a:only-child,\n.ant-btn-ghost[disabled]:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-ghost[disabled] > a:only-child::after,\n.ant-btn-ghost[disabled]:hover > a:only-child::after,\n.ant-btn-ghost[disabled]:focus > a:only-child::after,\n.ant-btn-ghost[disabled]:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dashed {\n color: rgba(0, 0, 0, 0.85);\n border-color: #d9d9d9;\n background: #fff;\n border-style: dashed;\n}\n.ant-btn-dashed > a:only-child {\n color: currentcolor;\n}\n.ant-btn-dashed > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dashed:hover,\n.ant-btn-dashed:focus {\n color: #8588ed;\n border-color: #8588ed;\n background: #fff;\n}\n.ant-btn-dashed:hover > a:only-child,\n.ant-btn-dashed:focus > a:only-child {\n color: currentcolor;\n}\n.ant-btn-dashed:hover > a:only-child::after,\n.ant-btn-dashed:focus > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dashed:active {\n color: #4541ba;\n border-color: #4541ba;\n background: #fff;\n}\n.ant-btn-dashed:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-dashed:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dashed[disabled],\n.ant-btn-dashed[disabled]:hover,\n.ant-btn-dashed[disabled]:focus,\n.ant-btn-dashed[disabled]:active {\n color: rgba(0, 0, 0, 0.25);\n border-color: #d9d9d9;\n background: #f5f5f5;\n text-shadow: none;\n box-shadow: none;\n}\n.ant-btn-dashed[disabled] > a:only-child,\n.ant-btn-dashed[disabled]:hover > a:only-child,\n.ant-btn-dashed[disabled]:focus > a:only-child,\n.ant-btn-dashed[disabled]:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-dashed[disabled] > a:only-child::after,\n.ant-btn-dashed[disabled]:hover > a:only-child::after,\n.ant-btn-dashed[disabled]:focus > a:only-child::after,\n.ant-btn-dashed[disabled]:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-danger {\n color: #fff;\n border-color: #ff4d4f;\n background: #ff4d4f;\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.12);\n box-shadow: 0 2px 0 rgba(0, 0, 0, 0.045);\n}\n.ant-btn-danger > a:only-child {\n color: currentcolor;\n}\n.ant-btn-danger > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-danger:hover,\n.ant-btn-danger:focus {\n color: #fff;\n border-color: #ff7875;\n background: #ff7875;\n}\n.ant-btn-danger:hover > a:only-child,\n.ant-btn-danger:focus > a:only-child {\n color: currentcolor;\n}\n.ant-btn-danger:hover > a:only-child::after,\n.ant-btn-danger:focus > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-danger:active {\n color: #fff;\n border-color: #d9363e;\n background: #d9363e;\n}\n.ant-btn-danger:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-danger:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-danger[disabled],\n.ant-btn-danger[disabled]:hover,\n.ant-btn-danger[disabled]:focus,\n.ant-btn-danger[disabled]:active {\n color: rgba(0, 0, 0, 0.25);\n border-color: #d9d9d9;\n background: #f5f5f5;\n text-shadow: none;\n box-shadow: none;\n}\n.ant-btn-danger[disabled] > a:only-child,\n.ant-btn-danger[disabled]:hover > a:only-child,\n.ant-btn-danger[disabled]:focus > a:only-child,\n.ant-btn-danger[disabled]:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-danger[disabled] > a:only-child::after,\n.ant-btn-danger[disabled]:hover > a:only-child::after,\n.ant-btn-danger[disabled]:focus > a:only-child::after,\n.ant-btn-danger[disabled]:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-link {\n color: #5b5ce1;\n border-color: transparent;\n background: transparent;\n box-shadow: none;\n}\n.ant-btn-link > a:only-child {\n color: currentcolor;\n}\n.ant-btn-link > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-link:hover,\n.ant-btn-link:focus {\n color: #8588ed;\n border-color: #8588ed;\n background: transparent;\n}\n.ant-btn-link:hover > a:only-child,\n.ant-btn-link:focus > a:only-child {\n color: currentcolor;\n}\n.ant-btn-link:hover > a:only-child::after,\n.ant-btn-link:focus > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-link:active {\n color: #4541ba;\n border-color: #4541ba;\n background: transparent;\n}\n.ant-btn-link:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-link:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-link[disabled],\n.ant-btn-link[disabled]:hover,\n.ant-btn-link[disabled]:focus,\n.ant-btn-link[disabled]:active {\n color: rgba(0, 0, 0, 0.25);\n border-color: #d9d9d9;\n background: #f5f5f5;\n text-shadow: none;\n box-shadow: none;\n}\n.ant-btn-link[disabled] > a:only-child,\n.ant-btn-link[disabled]:hover > a:only-child,\n.ant-btn-link[disabled]:focus > a:only-child,\n.ant-btn-link[disabled]:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-link[disabled] > a:only-child::after,\n.ant-btn-link[disabled]:hover > a:only-child::after,\n.ant-btn-link[disabled]:focus > a:only-child::after,\n.ant-btn-link[disabled]:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-link:hover {\n background: transparent;\n}\n.ant-btn-link:hover,\n.ant-btn-link:focus,\n.ant-btn-link:active {\n border-color: transparent;\n}\n.ant-btn-link[disabled],\n.ant-btn-link[disabled]:hover,\n.ant-btn-link[disabled]:focus,\n.ant-btn-link[disabled]:active {\n color: rgba(0, 0, 0, 0.25);\n border-color: transparent;\n background: transparent;\n text-shadow: none;\n box-shadow: none;\n}\n.ant-btn-link[disabled] > a:only-child,\n.ant-btn-link[disabled]:hover > a:only-child,\n.ant-btn-link[disabled]:focus > a:only-child,\n.ant-btn-link[disabled]:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-link[disabled] > a:only-child::after,\n.ant-btn-link[disabled]:hover > a:only-child::after,\n.ant-btn-link[disabled]:focus > a:only-child::after,\n.ant-btn-link[disabled]:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-text {\n color: rgba(0, 0, 0, 0.85);\n border-color: transparent;\n background: transparent;\n box-shadow: none;\n}\n.ant-btn-text > a:only-child {\n color: currentcolor;\n}\n.ant-btn-text > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-text:hover,\n.ant-btn-text:focus {\n color: #8588ed;\n border-color: #8588ed;\n background: transparent;\n}\n.ant-btn-text:hover > a:only-child,\n.ant-btn-text:focus > a:only-child {\n color: currentcolor;\n}\n.ant-btn-text:hover > a:only-child::after,\n.ant-btn-text:focus > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-text:active {\n color: #4541ba;\n border-color: #4541ba;\n background: transparent;\n}\n.ant-btn-text:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-text:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-text[disabled],\n.ant-btn-text[disabled]:hover,\n.ant-btn-text[disabled]:focus,\n.ant-btn-text[disabled]:active {\n color: rgba(0, 0, 0, 0.25);\n border-color: #d9d9d9;\n background: #f5f5f5;\n text-shadow: none;\n box-shadow: none;\n}\n.ant-btn-text[disabled] > a:only-child,\n.ant-btn-text[disabled]:hover > a:only-child,\n.ant-btn-text[disabled]:focus > a:only-child,\n.ant-btn-text[disabled]:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-text[disabled] > a:only-child::after,\n.ant-btn-text[disabled]:hover > a:only-child::after,\n.ant-btn-text[disabled]:focus > a:only-child::after,\n.ant-btn-text[disabled]:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-text:hover,\n.ant-btn-text:focus {\n color: rgba(0, 0, 0, 0.85);\n background: rgba(0, 0, 0, 0.018);\n border-color: transparent;\n}\n.ant-btn-text:active {\n color: rgba(0, 0, 0, 0.85);\n background: rgba(0, 0, 0, 0.028);\n border-color: transparent;\n}\n.ant-btn-text[disabled],\n.ant-btn-text[disabled]:hover,\n.ant-btn-text[disabled]:focus,\n.ant-btn-text[disabled]:active {\n color: rgba(0, 0, 0, 0.25);\n border-color: transparent;\n background: transparent;\n text-shadow: none;\n box-shadow: none;\n}\n.ant-btn-text[disabled] > a:only-child,\n.ant-btn-text[disabled]:hover > a:only-child,\n.ant-btn-text[disabled]:focus > a:only-child,\n.ant-btn-text[disabled]:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-text[disabled] > a:only-child::after,\n.ant-btn-text[disabled]:hover > a:only-child::after,\n.ant-btn-text[disabled]:focus > a:only-child::after,\n.ant-btn-text[disabled]:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous {\n color: #ff4d4f;\n border-color: #ff4d4f;\n background: #fff;\n}\n.ant-btn-dangerous > a:only-child {\n color: currentcolor;\n}\n.ant-btn-dangerous > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous:hover,\n.ant-btn-dangerous:focus {\n color: #ff7875;\n border-color: #ff7875;\n background: #fff;\n}\n.ant-btn-dangerous:hover > a:only-child,\n.ant-btn-dangerous:focus > a:only-child {\n color: currentcolor;\n}\n.ant-btn-dangerous:hover > a:only-child::after,\n.ant-btn-dangerous:focus > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous:active {\n color: #d9363e;\n border-color: #d9363e;\n background: #fff;\n}\n.ant-btn-dangerous:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-dangerous:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous[disabled],\n.ant-btn-dangerous[disabled]:hover,\n.ant-btn-dangerous[disabled]:focus,\n.ant-btn-dangerous[disabled]:active {\n color: rgba(0, 0, 0, 0.25);\n border-color: #d9d9d9;\n background: #f5f5f5;\n text-shadow: none;\n box-shadow: none;\n}\n.ant-btn-dangerous[disabled] > a:only-child,\n.ant-btn-dangerous[disabled]:hover > a:only-child,\n.ant-btn-dangerous[disabled]:focus > a:only-child,\n.ant-btn-dangerous[disabled]:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-dangerous[disabled] > a:only-child::after,\n.ant-btn-dangerous[disabled]:hover > a:only-child::after,\n.ant-btn-dangerous[disabled]:focus > a:only-child::after,\n.ant-btn-dangerous[disabled]:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous.ant-btn-primary {\n color: #fff;\n border-color: #ff4d4f;\n background: #ff4d4f;\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.12);\n box-shadow: 0 2px 0 rgba(0, 0, 0, 0.045);\n}\n.ant-btn-dangerous.ant-btn-primary > a:only-child {\n color: currentcolor;\n}\n.ant-btn-dangerous.ant-btn-primary > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous.ant-btn-primary:hover,\n.ant-btn-dangerous.ant-btn-primary:focus {\n color: #fff;\n border-color: #ff7875;\n background: #ff7875;\n}\n.ant-btn-dangerous.ant-btn-primary:hover > a:only-child,\n.ant-btn-dangerous.ant-btn-primary:focus > a:only-child {\n color: currentcolor;\n}\n.ant-btn-dangerous.ant-btn-primary:hover > a:only-child::after,\n.ant-btn-dangerous.ant-btn-primary:focus > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous.ant-btn-primary:active {\n color: #fff;\n border-color: #d9363e;\n background: #d9363e;\n}\n.ant-btn-dangerous.ant-btn-primary:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-dangerous.ant-btn-primary:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous.ant-btn-primary[disabled],\n.ant-btn-dangerous.ant-btn-primary[disabled]:hover,\n.ant-btn-dangerous.ant-btn-primary[disabled]:focus,\n.ant-btn-dangerous.ant-btn-primary[disabled]:active {\n color: rgba(0, 0, 0, 0.25);\n border-color: #d9d9d9;\n background: #f5f5f5;\n text-shadow: none;\n box-shadow: none;\n}\n.ant-btn-dangerous.ant-btn-primary[disabled] > a:only-child,\n.ant-btn-dangerous.ant-btn-primary[disabled]:hover > a:only-child,\n.ant-btn-dangerous.ant-btn-primary[disabled]:focus > a:only-child,\n.ant-btn-dangerous.ant-btn-primary[disabled]:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-dangerous.ant-btn-primary[disabled] > a:only-child::after,\n.ant-btn-dangerous.ant-btn-primary[disabled]:hover > a:only-child::after,\n.ant-btn-dangerous.ant-btn-primary[disabled]:focus > a:only-child::after,\n.ant-btn-dangerous.ant-btn-primary[disabled]:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous.ant-btn-link {\n color: #ff4d4f;\n border-color: transparent;\n background: transparent;\n box-shadow: none;\n}\n.ant-btn-dangerous.ant-btn-link > a:only-child {\n color: currentcolor;\n}\n.ant-btn-dangerous.ant-btn-link > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous.ant-btn-link:hover,\n.ant-btn-dangerous.ant-btn-link:focus {\n color: #8588ed;\n border-color: #8588ed;\n background: transparent;\n}\n.ant-btn-dangerous.ant-btn-link:hover > a:only-child,\n.ant-btn-dangerous.ant-btn-link:focus > a:only-child {\n color: currentcolor;\n}\n.ant-btn-dangerous.ant-btn-link:hover > a:only-child::after,\n.ant-btn-dangerous.ant-btn-link:focus > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous.ant-btn-link:active {\n color: #4541ba;\n border-color: #4541ba;\n background: transparent;\n}\n.ant-btn-dangerous.ant-btn-link:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-dangerous.ant-btn-link:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous.ant-btn-link[disabled],\n.ant-btn-dangerous.ant-btn-link[disabled]:hover,\n.ant-btn-dangerous.ant-btn-link[disabled]:focus,\n.ant-btn-dangerous.ant-btn-link[disabled]:active {\n color: rgba(0, 0, 0, 0.25);\n border-color: #d9d9d9;\n background: #f5f5f5;\n text-shadow: none;\n box-shadow: none;\n}\n.ant-btn-dangerous.ant-btn-link[disabled] > a:only-child,\n.ant-btn-dangerous.ant-btn-link[disabled]:hover > a:only-child,\n.ant-btn-dangerous.ant-btn-link[disabled]:focus > a:only-child,\n.ant-btn-dangerous.ant-btn-link[disabled]:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-dangerous.ant-btn-link[disabled] > a:only-child::after,\n.ant-btn-dangerous.ant-btn-link[disabled]:hover > a:only-child::after,\n.ant-btn-dangerous.ant-btn-link[disabled]:focus > a:only-child::after,\n.ant-btn-dangerous.ant-btn-link[disabled]:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous.ant-btn-link:hover,\n.ant-btn-dangerous.ant-btn-link:focus {\n color: #ff7875;\n border-color: transparent;\n background: transparent;\n}\n.ant-btn-dangerous.ant-btn-link:hover > a:only-child,\n.ant-btn-dangerous.ant-btn-link:focus > a:only-child {\n color: currentcolor;\n}\n.ant-btn-dangerous.ant-btn-link:hover > a:only-child::after,\n.ant-btn-dangerous.ant-btn-link:focus > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous.ant-btn-link:active {\n color: #d9363e;\n border-color: transparent;\n background: transparent;\n}\n.ant-btn-dangerous.ant-btn-link:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-dangerous.ant-btn-link:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous.ant-btn-link[disabled],\n.ant-btn-dangerous.ant-btn-link[disabled]:hover,\n.ant-btn-dangerous.ant-btn-link[disabled]:focus,\n.ant-btn-dangerous.ant-btn-link[disabled]:active {\n color: rgba(0, 0, 0, 0.25);\n border-color: transparent;\n background: transparent;\n text-shadow: none;\n box-shadow: none;\n}\n.ant-btn-dangerous.ant-btn-link[disabled] > a:only-child,\n.ant-btn-dangerous.ant-btn-link[disabled]:hover > a:only-child,\n.ant-btn-dangerous.ant-btn-link[disabled]:focus > a:only-child,\n.ant-btn-dangerous.ant-btn-link[disabled]:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-dangerous.ant-btn-link[disabled] > a:only-child::after,\n.ant-btn-dangerous.ant-btn-link[disabled]:hover > a:only-child::after,\n.ant-btn-dangerous.ant-btn-link[disabled]:focus > a:only-child::after,\n.ant-btn-dangerous.ant-btn-link[disabled]:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous.ant-btn-text {\n color: #ff4d4f;\n border-color: transparent;\n background: transparent;\n box-shadow: none;\n}\n.ant-btn-dangerous.ant-btn-text > a:only-child {\n color: currentcolor;\n}\n.ant-btn-dangerous.ant-btn-text > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous.ant-btn-text:hover,\n.ant-btn-dangerous.ant-btn-text:focus {\n color: #8588ed;\n border-color: #8588ed;\n background: transparent;\n}\n.ant-btn-dangerous.ant-btn-text:hover > a:only-child,\n.ant-btn-dangerous.ant-btn-text:focus > a:only-child {\n color: currentcolor;\n}\n.ant-btn-dangerous.ant-btn-text:hover > a:only-child::after,\n.ant-btn-dangerous.ant-btn-text:focus > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous.ant-btn-text:active {\n color: #4541ba;\n border-color: #4541ba;\n background: transparent;\n}\n.ant-btn-dangerous.ant-btn-text:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-dangerous.ant-btn-text:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous.ant-btn-text[disabled],\n.ant-btn-dangerous.ant-btn-text[disabled]:hover,\n.ant-btn-dangerous.ant-btn-text[disabled]:focus,\n.ant-btn-dangerous.ant-btn-text[disabled]:active {\n color: rgba(0, 0, 0, 0.25);\n border-color: #d9d9d9;\n background: #f5f5f5;\n text-shadow: none;\n box-shadow: none;\n}\n.ant-btn-dangerous.ant-btn-text[disabled] > a:only-child,\n.ant-btn-dangerous.ant-btn-text[disabled]:hover > a:only-child,\n.ant-btn-dangerous.ant-btn-text[disabled]:focus > a:only-child,\n.ant-btn-dangerous.ant-btn-text[disabled]:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-dangerous.ant-btn-text[disabled] > a:only-child::after,\n.ant-btn-dangerous.ant-btn-text[disabled]:hover > a:only-child::after,\n.ant-btn-dangerous.ant-btn-text[disabled]:focus > a:only-child::after,\n.ant-btn-dangerous.ant-btn-text[disabled]:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous.ant-btn-text:hover,\n.ant-btn-dangerous.ant-btn-text:focus {\n color: #ff7875;\n border-color: transparent;\n background: rgba(0, 0, 0, 0.018);\n}\n.ant-btn-dangerous.ant-btn-text:hover > a:only-child,\n.ant-btn-dangerous.ant-btn-text:focus > a:only-child {\n color: currentcolor;\n}\n.ant-btn-dangerous.ant-btn-text:hover > a:only-child::after,\n.ant-btn-dangerous.ant-btn-text:focus > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous.ant-btn-text:active {\n color: #d9363e;\n border-color: transparent;\n background: rgba(0, 0, 0, 0.028);\n}\n.ant-btn-dangerous.ant-btn-text:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-dangerous.ant-btn-text:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous.ant-btn-text[disabled],\n.ant-btn-dangerous.ant-btn-text[disabled]:hover,\n.ant-btn-dangerous.ant-btn-text[disabled]:focus,\n.ant-btn-dangerous.ant-btn-text[disabled]:active {\n color: rgba(0, 0, 0, 0.25);\n border-color: transparent;\n background: transparent;\n text-shadow: none;\n box-shadow: none;\n}\n.ant-btn-dangerous.ant-btn-text[disabled] > a:only-child,\n.ant-btn-dangerous.ant-btn-text[disabled]:hover > a:only-child,\n.ant-btn-dangerous.ant-btn-text[disabled]:focus > a:only-child,\n.ant-btn-dangerous.ant-btn-text[disabled]:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-dangerous.ant-btn-text[disabled] > a:only-child::after,\n.ant-btn-dangerous.ant-btn-text[disabled]:hover > a:only-child::after,\n.ant-btn-dangerous.ant-btn-text[disabled]:focus > a:only-child::after,\n.ant-btn-dangerous.ant-btn-text[disabled]:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-icon-only {\n width: 32px;\n height: 32px;\n padding: 2.4px 0;\n font-size: 16px;\n border-radius: 5px;\n vertical-align: -3px;\n}\n.ant-btn-icon-only > * {\n font-size: 16px;\n}\n.ant-btn-icon-only.ant-btn-lg {\n width: 40px;\n height: 40px;\n padding: 4.9px 0;\n font-size: 18px;\n border-radius: 5px;\n}\n.ant-btn-icon-only.ant-btn-lg > * {\n font-size: 18px;\n}\n.ant-btn-icon-only.ant-btn-sm {\n width: 24px;\n height: 24px;\n padding: 0px 0;\n font-size: 14px;\n border-radius: 5px;\n}\n.ant-btn-icon-only.ant-btn-sm > * {\n font-size: 14px;\n}\n.ant-btn-icon-only > .anticon {\n display: flex;\n justify-content: center;\n}\n.ant-btn-icon-only .anticon-loading {\n padding: 0 !important;\n}\na.ant-btn-icon-only {\n vertical-align: -1px;\n}\na.ant-btn-icon-only > .anticon {\n display: inline;\n}\n.ant-btn-round {\n height: 32px;\n padding: 4px 16px;\n font-size: 14px;\n border-radius: 32px;\n}\n.ant-btn-round.ant-btn-lg {\n height: 40px;\n padding: 6.4px 20px;\n font-size: 16px;\n border-radius: 40px;\n}\n.ant-btn-round.ant-btn-sm {\n height: 24px;\n padding: 0px 12px;\n font-size: 14px;\n border-radius: 24px;\n}\n.ant-btn-round.ant-btn-icon-only {\n width: auto;\n}\n.ant-btn-circle {\n min-width: 32px;\n padding-right: 0;\n padding-left: 0;\n text-align: center;\n border-radius: 50%;\n}\n.ant-btn-circle.ant-btn-lg {\n min-width: 40px;\n border-radius: 50%;\n}\n.ant-btn-circle.ant-btn-sm {\n min-width: 24px;\n border-radius: 50%;\n}\n.ant-btn::before {\n position: absolute;\n top: -1px;\n right: -1px;\n bottom: -1px;\n left: -1px;\n z-index: 1;\n display: none;\n background: #fff;\n border-radius: inherit;\n opacity: 0.35;\n transition: opacity 0.2s;\n content: '';\n pointer-events: none;\n}\n.ant-btn .anticon {\n transition: margin-left 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\n}\n.ant-btn .anticon.anticon-plus > svg,\n.ant-btn .anticon.anticon-minus > svg {\n shape-rendering: optimizespeed;\n}\n.ant-btn.ant-btn-loading {\n position: relative;\n cursor: default;\n}\n.ant-btn.ant-btn-loading::before {\n display: block;\n}\n.ant-btn > .ant-btn-loading-icon {\n transition: width 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), opacity 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\n}\n.ant-btn > .ant-btn-loading-icon .anticon {\n padding-right: 8px;\n animation: none;\n}\n.ant-btn > .ant-btn-loading-icon .anticon svg {\n animation: loadingCircle 1s infinite linear;\n}\n.ant-btn-group {\n position: relative;\n display: inline-flex;\n}\n.ant-btn-group > .ant-btn,\n.ant-btn-group > span > .ant-btn {\n position: relative;\n}\n.ant-btn-group > .ant-btn:hover,\n.ant-btn-group > span > .ant-btn:hover,\n.ant-btn-group > .ant-btn:focus,\n.ant-btn-group > span > .ant-btn:focus,\n.ant-btn-group > .ant-btn:active,\n.ant-btn-group > span > .ant-btn:active {\n z-index: 2;\n}\n.ant-btn-group > .ant-btn[disabled],\n.ant-btn-group > span > .ant-btn[disabled] {\n z-index: 0;\n}\n.ant-btn-group .ant-btn-icon-only {\n font-size: 14px;\n}\n.ant-btn-group .ant-btn + .ant-btn,\n.ant-btn + .ant-btn-group,\n.ant-btn-group span + .ant-btn,\n.ant-btn-group .ant-btn + span,\n.ant-btn-group > span + span,\n.ant-btn-group + .ant-btn,\n.ant-btn-group + .ant-btn-group {\n margin-left: -1px;\n}\n.ant-btn-group .ant-btn-primary + .ant-btn:not(.ant-btn-primary):not([disabled]) {\n border-left-color: transparent;\n}\n.ant-btn-group .ant-btn {\n border-radius: 0;\n}\n.ant-btn-group > .ant-btn:first-child,\n.ant-btn-group > span:first-child > .ant-btn {\n margin-left: 0;\n}\n.ant-btn-group > .ant-btn:only-child {\n border-radius: 5px;\n}\n.ant-btn-group > span:only-child > .ant-btn {\n border-radius: 5px;\n}\n.ant-btn-group > .ant-btn:first-child:not(:last-child),\n.ant-btn-group > span:first-child:not(:last-child) > .ant-btn {\n border-top-left-radius: 5px;\n border-bottom-left-radius: 5px;\n}\n.ant-btn-group > .ant-btn:last-child:not(:first-child),\n.ant-btn-group > span:last-child:not(:first-child) > .ant-btn {\n border-top-right-radius: 5px;\n border-bottom-right-radius: 5px;\n}\n.ant-btn-group-sm > .ant-btn:only-child {\n border-radius: 5px;\n}\n.ant-btn-group-sm > span:only-child > .ant-btn {\n border-radius: 5px;\n}\n.ant-btn-group-sm > .ant-btn:first-child:not(:last-child),\n.ant-btn-group-sm > span:first-child:not(:last-child) > .ant-btn {\n border-top-left-radius: 5px;\n border-bottom-left-radius: 5px;\n}\n.ant-btn-group-sm > .ant-btn:last-child:not(:first-child),\n.ant-btn-group-sm > span:last-child:not(:first-child) > .ant-btn {\n border-top-right-radius: 5px;\n border-bottom-right-radius: 5px;\n}\n.ant-btn-group > .ant-btn-group {\n float: left;\n}\n.ant-btn-group > .ant-btn-group:not(:first-child):not(:last-child) > .ant-btn {\n border-radius: 0;\n}\n.ant-btn-group > .ant-btn-group:first-child:not(:last-child) > .ant-btn:last-child {\n padding-right: 8px;\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.ant-btn-group > .ant-btn-group:last-child:not(:first-child) > .ant-btn:first-child {\n padding-left: 8px;\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.ant-btn-rtl.ant-btn-group .ant-btn + .ant-btn,\n.ant-btn-rtl.ant-btn + .ant-btn-group,\n.ant-btn-rtl.ant-btn-group span + .ant-btn,\n.ant-btn-rtl.ant-btn-group .ant-btn + span,\n.ant-btn-rtl.ant-btn-group > span + span,\n.ant-btn-rtl.ant-btn-group + .ant-btn,\n.ant-btn-rtl.ant-btn-group + .ant-btn-group,\n.ant-btn-group-rtl.ant-btn-group .ant-btn + .ant-btn,\n.ant-btn-group-rtl.ant-btn + .ant-btn-group,\n.ant-btn-group-rtl.ant-btn-group span + .ant-btn,\n.ant-btn-group-rtl.ant-btn-group .ant-btn + span,\n.ant-btn-group-rtl.ant-btn-group > span + span,\n.ant-btn-group-rtl.ant-btn-group + .ant-btn,\n.ant-btn-group-rtl.ant-btn-group + .ant-btn-group {\n margin-right: -1px;\n margin-left: auto;\n}\n.ant-btn-group.ant-btn-group-rtl {\n direction: rtl;\n}\n.ant-btn-group-rtl.ant-btn-group > .ant-btn:first-child:not(:last-child),\n.ant-btn-group-rtl.ant-btn-group > span:first-child:not(:last-child) > .ant-btn {\n border-radius: 0 5px 5px 0;\n}\n.ant-btn-group-rtl.ant-btn-group > .ant-btn:last-child:not(:first-child),\n.ant-btn-group-rtl.ant-btn-group > span:last-child:not(:first-child) > .ant-btn {\n border-radius: 5px 0 0 5px;\n}\n.ant-btn-group-rtl.ant-btn-group-sm > .ant-btn:first-child:not(:last-child),\n.ant-btn-group-rtl.ant-btn-group-sm > span:first-child:not(:last-child) > .ant-btn {\n border-radius: 0 5px 5px 0;\n}\n.ant-btn-group-rtl.ant-btn-group-sm > .ant-btn:last-child:not(:first-child),\n.ant-btn-group-rtl.ant-btn-group-sm > span:last-child:not(:first-child) > .ant-btn {\n border-radius: 5px 0 0 5px;\n}\n.ant-btn:focus > span,\n.ant-btn:active > span {\n position: relative;\n}\n.ant-btn > .anticon + span,\n.ant-btn > span + .anticon {\n margin-left: 8px;\n}\n.ant-btn.ant-btn-background-ghost {\n color: #fff;\n border-color: #fff;\n}\n.ant-btn.ant-btn-background-ghost,\n.ant-btn.ant-btn-background-ghost:hover,\n.ant-btn.ant-btn-background-ghost:active,\n.ant-btn.ant-btn-background-ghost:focus {\n background: transparent;\n}\n.ant-btn.ant-btn-background-ghost:hover,\n.ant-btn.ant-btn-background-ghost:focus {\n color: #8588ed;\n border-color: #8588ed;\n}\n.ant-btn.ant-btn-background-ghost:active {\n color: #4541ba;\n border-color: #4541ba;\n}\n.ant-btn.ant-btn-background-ghost[disabled] {\n color: rgba(0, 0, 0, 0.25);\n background: transparent;\n border-color: #d9d9d9;\n}\n.ant-btn-background-ghost.ant-btn-primary {\n color: #5b5ce1;\n border-color: #5b5ce1;\n text-shadow: none;\n}\n.ant-btn-background-ghost.ant-btn-primary > a:only-child {\n color: currentcolor;\n}\n.ant-btn-background-ghost.ant-btn-primary > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-background-ghost.ant-btn-primary:hover,\n.ant-btn-background-ghost.ant-btn-primary:focus {\n color: #8588ed;\n border-color: #8588ed;\n}\n.ant-btn-background-ghost.ant-btn-primary:hover > a:only-child,\n.ant-btn-background-ghost.ant-btn-primary:focus > a:only-child {\n color: currentcolor;\n}\n.ant-btn-background-ghost.ant-btn-primary:hover > a:only-child::after,\n.ant-btn-background-ghost.ant-btn-primary:focus > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-background-ghost.ant-btn-primary:active {\n color: #4541ba;\n border-color: #4541ba;\n}\n.ant-btn-background-ghost.ant-btn-primary:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-background-ghost.ant-btn-primary:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-background-ghost.ant-btn-primary[disabled],\n.ant-btn-background-ghost.ant-btn-primary[disabled]:hover,\n.ant-btn-background-ghost.ant-btn-primary[disabled]:focus,\n.ant-btn-background-ghost.ant-btn-primary[disabled]:active {\n color: rgba(0, 0, 0, 0.25);\n border-color: #d9d9d9;\n background: #f5f5f5;\n text-shadow: none;\n box-shadow: none;\n}\n.ant-btn-background-ghost.ant-btn-primary[disabled] > a:only-child,\n.ant-btn-background-ghost.ant-btn-primary[disabled]:hover > a:only-child,\n.ant-btn-background-ghost.ant-btn-primary[disabled]:focus > a:only-child,\n.ant-btn-background-ghost.ant-btn-primary[disabled]:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-background-ghost.ant-btn-primary[disabled] > a:only-child::after,\n.ant-btn-background-ghost.ant-btn-primary[disabled]:hover > a:only-child::after,\n.ant-btn-background-ghost.ant-btn-primary[disabled]:focus > a:only-child::after,\n.ant-btn-background-ghost.ant-btn-primary[disabled]:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-background-ghost.ant-btn-danger {\n color: #ff4d4f;\n border-color: #ff4d4f;\n text-shadow: none;\n}\n.ant-btn-background-ghost.ant-btn-danger > a:only-child {\n color: currentcolor;\n}\n.ant-btn-background-ghost.ant-btn-danger > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-background-ghost.ant-btn-danger:hover,\n.ant-btn-background-ghost.ant-btn-danger:focus {\n color: #ff7875;\n border-color: #ff7875;\n}\n.ant-btn-background-ghost.ant-btn-danger:hover > a:only-child,\n.ant-btn-background-ghost.ant-btn-danger:focus > a:only-child {\n color: currentcolor;\n}\n.ant-btn-background-ghost.ant-btn-danger:hover > a:only-child::after,\n.ant-btn-background-ghost.ant-btn-danger:focus > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-background-ghost.ant-btn-danger:active {\n color: #d9363e;\n border-color: #d9363e;\n}\n.ant-btn-background-ghost.ant-btn-danger:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-background-ghost.ant-btn-danger:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-background-ghost.ant-btn-danger[disabled],\n.ant-btn-background-ghost.ant-btn-danger[disabled]:hover,\n.ant-btn-background-ghost.ant-btn-danger[disabled]:focus,\n.ant-btn-background-ghost.ant-btn-danger[disabled]:active {\n color: rgba(0, 0, 0, 0.25);\n border-color: #d9d9d9;\n background: #f5f5f5;\n text-shadow: none;\n box-shadow: none;\n}\n.ant-btn-background-ghost.ant-btn-danger[disabled] > a:only-child,\n.ant-btn-background-ghost.ant-btn-danger[disabled]:hover > a:only-child,\n.ant-btn-background-ghost.ant-btn-danger[disabled]:focus > a:only-child,\n.ant-btn-background-ghost.ant-btn-danger[disabled]:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-background-ghost.ant-btn-danger[disabled] > a:only-child::after,\n.ant-btn-background-ghost.ant-btn-danger[disabled]:hover > a:only-child::after,\n.ant-btn-background-ghost.ant-btn-danger[disabled]:focus > a:only-child::after,\n.ant-btn-background-ghost.ant-btn-danger[disabled]:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-background-ghost.ant-btn-dangerous {\n color: #ff4d4f;\n border-color: #ff4d4f;\n text-shadow: none;\n}\n.ant-btn-background-ghost.ant-btn-dangerous > a:only-child {\n color: currentcolor;\n}\n.ant-btn-background-ghost.ant-btn-dangerous > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-background-ghost.ant-btn-dangerous:hover,\n.ant-btn-background-ghost.ant-btn-dangerous:focus {\n color: #ff7875;\n border-color: #ff7875;\n}\n.ant-btn-background-ghost.ant-btn-dangerous:hover > a:only-child,\n.ant-btn-background-ghost.ant-btn-dangerous:focus > a:only-child {\n color: currentcolor;\n}\n.ant-btn-background-ghost.ant-btn-dangerous:hover > a:only-child::after,\n.ant-btn-background-ghost.ant-btn-dangerous:focus > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-background-ghost.ant-btn-dangerous:active {\n color: #d9363e;\n border-color: #d9363e;\n}\n.ant-btn-background-ghost.ant-btn-dangerous:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-background-ghost.ant-btn-dangerous:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-background-ghost.ant-btn-dangerous[disabled],\n.ant-btn-background-ghost.ant-btn-dangerous[disabled]:hover,\n.ant-btn-background-ghost.ant-btn-dangerous[disabled]:focus,\n.ant-btn-background-ghost.ant-btn-dangerous[disabled]:active {\n color: rgba(0, 0, 0, 0.25);\n border-color: #d9d9d9;\n background: #f5f5f5;\n text-shadow: none;\n box-shadow: none;\n}\n.ant-btn-background-ghost.ant-btn-dangerous[disabled] > a:only-child,\n.ant-btn-background-ghost.ant-btn-dangerous[disabled]:hover > a:only-child,\n.ant-btn-background-ghost.ant-btn-dangerous[disabled]:focus > a:only-child,\n.ant-btn-background-ghost.ant-btn-dangerous[disabled]:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-background-ghost.ant-btn-dangerous[disabled] > a:only-child::after,\n.ant-btn-background-ghost.ant-btn-dangerous[disabled]:hover > a:only-child::after,\n.ant-btn-background-ghost.ant-btn-dangerous[disabled]:focus > a:only-child::after,\n.ant-btn-background-ghost.ant-btn-dangerous[disabled]:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link {\n color: #ff4d4f;\n border-color: transparent;\n text-shadow: none;\n}\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link > a:only-child {\n color: currentcolor;\n}\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:hover,\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:focus {\n color: #ff7875;\n border-color: transparent;\n}\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:hover > a:only-child,\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:focus > a:only-child {\n color: currentcolor;\n}\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:hover > a:only-child::after,\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:focus > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:active {\n color: #d9363e;\n border-color: transparent;\n}\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled],\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:hover,\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:focus,\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:active {\n color: rgba(0, 0, 0, 0.25);\n border-color: #d9d9d9;\n background: #f5f5f5;\n text-shadow: none;\n box-shadow: none;\n}\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled] > a:only-child,\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:hover > a:only-child,\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:focus > a:only-child,\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled] > a:only-child::after,\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:hover > a:only-child::after,\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:focus > a:only-child::after,\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-two-chinese-chars::first-letter {\n letter-spacing: 0.34em;\n}\n.ant-btn-two-chinese-chars > *:not(.anticon) {\n margin-right: -0.34em;\n letter-spacing: 0.34em;\n}\n.ant-btn.ant-btn-block {\n width: 100%;\n}\n.ant-btn:empty {\n display: inline-block;\n width: 0;\n visibility: hidden;\n content: '\\a0';\n}\na.ant-btn {\n padding-top: 0.01px !important;\n line-height: 30px;\n}\na.ant-btn-disabled {\n cursor: not-allowed;\n}\na.ant-btn-disabled > * {\n pointer-events: none;\n}\na.ant-btn-disabled,\na.ant-btn-disabled:hover,\na.ant-btn-disabled:focus,\na.ant-btn-disabled:active {\n color: rgba(0, 0, 0, 0.25);\n border-color: transparent;\n background: transparent;\n text-shadow: none;\n box-shadow: none;\n}\na.ant-btn-disabled > a:only-child,\na.ant-btn-disabled:hover > a:only-child,\na.ant-btn-disabled:focus > a:only-child,\na.ant-btn-disabled:active > a:only-child {\n color: currentcolor;\n}\na.ant-btn-disabled > a:only-child::after,\na.ant-btn-disabled:hover > a:only-child::after,\na.ant-btn-disabled:focus > a:only-child::after,\na.ant-btn-disabled:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\na.ant-btn-lg {\n line-height: 38px;\n}\na.ant-btn-sm {\n line-height: 22px;\n}\n.ant-btn-compact-item:not(.ant-btn-compact-last-item):not(.ant-btn-compact-item-rtl) {\n margin-right: -1px;\n}\n.ant-btn-compact-item:not(.ant-btn-compact-last-item).ant-btn-compact-item-rtl {\n margin-left: -1px;\n}\n.ant-btn-compact-item:hover,\n.ant-btn-compact-item:focus,\n.ant-btn-compact-item:active {\n z-index: 2;\n}\n.ant-btn-compact-item[disabled] {\n z-index: 0;\n}\n.ant-btn-compact-item:not(.ant-btn-compact-first-item):not(.ant-btn-compact-last-item).ant-btn {\n border-radius: 0;\n}\n.ant-btn-compact-item.ant-btn.ant-btn-compact-first-item:not(.ant-btn-compact-item-rtl) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.ant-btn-compact-item.ant-btn.ant-btn-compact-last-item:not(.ant-btn-compact-item-rtl) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.ant-btn-compact-item.ant-btn.ant-btn-compact-item-rtl.ant-btn-compact-first-item {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.ant-btn-compact-item.ant-btn.ant-btn-compact-item-rtl.ant-btn-compact-last-item {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.ant-btn-icon-only.ant-btn-compact-item {\n flex: none;\n}\n.ant-btn-compact-item.ant-btn-primary:not([disabled]) + .ant-btn-compact-item.ant-btn-primary:not([disabled]) {\n position: relative;\n}\n.ant-btn-compact-item.ant-btn-primary:not([disabled]) + .ant-btn-compact-item.ant-btn-primary:not([disabled])::after {\n position: absolute;\n top: -1px;\n left: -1px;\n display: inline-block;\n width: 1px;\n height: calc(100% + 1px * 2);\n background-color: #8588ed;\n content: ' ';\n}\n.ant-btn-compact-item-rtl.ant-btn-compact-first-item.ant-btn-compact-item-rtl:not(.ant-btn-compact-last-item) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.ant-btn-compact-item-rtl.ant-btn-compact-last-item.ant-btn-compact-item-rtl:not(.ant-btn-compact-first-item) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.ant-btn-compact-item-rtl.ant-btn-sm.ant-btn-compact-first-item.ant-btn-compact-item-rtl.ant-btn-sm:not(.ant-btn-compact-last-item) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.ant-btn-compact-item-rtl.ant-btn-sm.ant-btn-compact-last-item.ant-btn-compact-item-rtl.ant-btn-sm:not(.ant-btn-compact-first-item) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.ant-btn-compact-item-rtl.ant-btn-primary:not([disabled]) + .ant-btn-compact-item-rtl.ant-btn-primary:not([disabled])::after {\n right: -1px;\n}\n.ant-btn-compact-vertical-item:not(.ant-btn-compact-vertical-last-item) {\n margin-bottom: -1px;\n}\n.ant-btn-compact-vertical-item:hover,\n.ant-btn-compact-vertical-item:focus,\n.ant-btn-compact-vertical-item:active {\n z-index: 2;\n}\n.ant-btn-compact-vertical-item[disabled] {\n z-index: 0;\n}\n.ant-btn-compact-vertical-item:not(.ant-btn-compact-vertical-first-item):not(.ant-btn-compact-vertical-last-item) {\n border-radius: 0;\n}\n.ant-btn-compact-vertical-item.ant-btn-compact-vertical-first-item {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.ant-btn-compact-vertical-item.ant-btn-compact-vertical-last-item {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n.ant-btn-compact-vertical-item.ant-btn-primary:not([disabled]) + .ant-btn-compact-vertical-item.ant-btn-primary:not([disabled]) {\n position: relative;\n}\n.ant-btn-compact-vertical-item.ant-btn-primary:not([disabled]) + .ant-btn-compact-vertical-item.ant-btn-primary:not([disabled])::after {\n position: absolute;\n top: -1px;\n left: -1px;\n display: inline-block;\n width: calc(100% + 1px * 2);\n height: 1px;\n background-color: #8588ed;\n content: ' ';\n}\n.ant-btn-rtl {\n direction: rtl;\n}\n.ant-btn-group-rtl.ant-btn-group .ant-btn-primary:last-child:not(:first-child),\n.ant-btn-group-rtl.ant-btn-group .ant-btn-primary + .ant-btn-primary {\n border-right-color: #8588ed;\n border-left-color: #d9d9d9;\n}\n.ant-btn-group-rtl.ant-btn-group .ant-btn-primary:last-child:not(:first-child)[disabled],\n.ant-btn-group-rtl.ant-btn-group .ant-btn-primary + .ant-btn-primary[disabled] {\n border-right-color: #d9d9d9;\n border-left-color: #8588ed;\n}\n.ant-btn-rtl.ant-btn > .ant-btn-loading-icon .anticon {\n padding-right: 0;\n padding-left: 8px;\n}\n.ant-btn-rtl.ant-btn > .anticon + span,\n.ant-btn-rtl.ant-btn > span + .anticon {\n margin-right: 8px;\n margin-left: 0;\n}\n.ant-picker-calendar {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n background: #fff;\n}\n.ant-picker-calendar-header {\n display: flex;\n justify-content: flex-end;\n padding: 12px 0;\n}\n.ant-picker-calendar-header .ant-picker-calendar-year-select {\n min-width: 80px;\n}\n.ant-picker-calendar-header .ant-picker-calendar-month-select {\n min-width: 70px;\n margin-left: 8px;\n}\n.ant-picker-calendar-header .ant-picker-calendar-mode-switch {\n margin-left: 8px;\n}\n.ant-picker-calendar .ant-picker-panel {\n background: #fff;\n border: 0;\n border-top: 1px solid #f0f0f0;\n border-radius: 0;\n}\n.ant-picker-calendar .ant-picker-panel .ant-picker-month-panel,\n.ant-picker-calendar .ant-picker-panel .ant-picker-date-panel {\n width: auto;\n}\n.ant-picker-calendar .ant-picker-panel .ant-picker-body {\n padding: 8px 0;\n}\n.ant-picker-calendar .ant-picker-panel .ant-picker-content {\n width: 100%;\n}\n.ant-picker-calendar-mini {\n border-radius: 5px;\n}\n.ant-picker-calendar-mini .ant-picker-calendar-header {\n padding-right: 8px;\n padding-left: 8px;\n}\n.ant-picker-calendar-mini .ant-picker-panel {\n border-radius: 0 0 5px 5px;\n}\n.ant-picker-calendar-mini .ant-picker-content {\n height: 256px;\n}\n.ant-picker-calendar-mini .ant-picker-content th {\n height: auto;\n padding: 0;\n line-height: 18px;\n}\n.ant-picker-calendar-mini .ant-picker-cell::before {\n pointer-events: none;\n}\n.ant-picker-calendar-full .ant-picker-panel {\n display: block;\n width: 100%;\n text-align: right;\n background: #fff;\n border: 0;\n}\n.ant-picker-calendar-full .ant-picker-panel .ant-picker-body th,\n.ant-picker-calendar-full .ant-picker-panel .ant-picker-body td {\n padding: 0;\n}\n.ant-picker-calendar-full .ant-picker-panel .ant-picker-body th {\n height: auto;\n padding: 0 12px 5px 0;\n line-height: 18px;\n}\n.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell::before {\n display: none;\n}\n.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell:hover .ant-picker-calendar-date {\n background: #f5f5f5;\n}\n.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell .ant-picker-calendar-date-today::before {\n display: none;\n}\n.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected .ant-picker-calendar-date,\n.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected:hover .ant-picker-calendar-date,\n.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected .ant-picker-calendar-date-today,\n.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected:hover .ant-picker-calendar-date-today {\n background: #f0f2ff;\n}\n.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected .ant-picker-calendar-date .ant-picker-calendar-date-value,\n.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected:hover .ant-picker-calendar-date .ant-picker-calendar-date-value,\n.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected .ant-picker-calendar-date-today .ant-picker-calendar-date-value,\n.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected:hover .ant-picker-calendar-date-today .ant-picker-calendar-date-value {\n color: #5b5ce1;\n}\n.ant-picker-calendar-full .ant-picker-panel .ant-picker-calendar-date {\n display: block;\n width: auto;\n height: auto;\n margin: 0 4px;\n padding: 4px 8px 0;\n border: 0;\n border-top: 2px solid #f0f0f0;\n border-radius: 0;\n transition: background 0.3s;\n}\n.ant-picker-calendar-full .ant-picker-panel .ant-picker-calendar-date-value {\n line-height: 24px;\n transition: color 0.3s;\n}\n.ant-picker-calendar-full .ant-picker-panel .ant-picker-calendar-date-content {\n position: static;\n width: auto;\n height: 86px;\n overflow-y: auto;\n color: rgba(0, 0, 0, 0.85);\n line-height: 1.5715;\n text-align: left;\n}\n.ant-picker-calendar-full .ant-picker-panel .ant-picker-calendar-date-today {\n border-color: #5b5ce1;\n}\n.ant-picker-calendar-full .ant-picker-panel .ant-picker-calendar-date-today .ant-picker-calendar-date-value {\n color: rgba(0, 0, 0, 0.85);\n}\n@media only screen and (max-width: 480px) {\n .ant-picker-calendar-header {\n display: block;\n }\n .ant-picker-calendar-header .ant-picker-calendar-year-select {\n width: 50%;\n }\n .ant-picker-calendar-header .ant-picker-calendar-month-select {\n width: calc(50% - 8px);\n }\n .ant-picker-calendar-header .ant-picker-calendar-mode-switch {\n width: 100%;\n margin-top: 8px;\n margin-left: 0;\n }\n .ant-picker-calendar-header .ant-picker-calendar-mode-switch > label {\n width: 50%;\n text-align: center;\n }\n}\n.ant-picker-calendar-rtl {\n direction: rtl;\n}\n.ant-picker-calendar-rtl .ant-picker-calendar-header .ant-picker-calendar-month-select {\n margin-right: 8px;\n margin-left: 0;\n}\n.ant-picker-calendar-rtl .ant-picker-calendar-header .ant-picker-calendar-mode-switch {\n margin-right: 8px;\n margin-left: 0;\n}\n.ant-picker-calendar-rtl.ant-picker-calendar-full .ant-picker-panel {\n text-align: left;\n}\n.ant-picker-calendar-rtl.ant-picker-calendar-full .ant-picker-panel .ant-picker-body th {\n padding: 0 0 5px 12px;\n}\n.ant-picker-calendar-rtl.ant-picker-calendar-full .ant-picker-panel .ant-picker-calendar-date-content {\n text-align: right;\n}\n.ant-card {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n background: #fff;\n border-radius: 5px;\n}\n.ant-card-rtl {\n direction: rtl;\n}\n.ant-card-hoverable {\n cursor: pointer;\n transition: box-shadow 0.3s, border-color 0.3s;\n}\n.ant-card-hoverable:hover {\n border-color: transparent;\n box-shadow: 0 1px 2px -2px rgba(0, 0, 0, 0.16), 0 3px 6px 0 rgba(0, 0, 0, 0.12), 0 5px 12px 4px rgba(0, 0, 0, 0.09);\n}\n.ant-card-bordered {\n border: 1px solid #f0f0f0;\n}\n.ant-card-head {\n min-height: 48px;\n margin-bottom: -1px;\n padding: 0 24px;\n color: rgba(0, 0, 0, 0.85);\n font-weight: 500;\n font-size: 16px;\n background: transparent;\n border-bottom: 1px solid #f0f0f0;\n border-radius: 5px 5px 0 0;\n}\n.ant-card-head::before {\n display: table;\n content: '';\n}\n.ant-card-head::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-card-head::before {\n display: table;\n content: '';\n}\n.ant-card-head::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-card-head-wrapper {\n display: flex;\n align-items: center;\n}\n.ant-card-head-title {\n display: inline-block;\n flex: 1;\n padding: 16px 0;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.ant-card-head-title > .ant-typography,\n.ant-card-head-title > .ant-typography-edit-content {\n left: 0;\n margin-top: 0;\n margin-bottom: 0;\n}\n.ant-card-head .ant-tabs-top {\n clear: both;\n margin-bottom: -17px;\n color: rgba(0, 0, 0, 0.85);\n font-weight: normal;\n font-size: 14px;\n}\n.ant-card-head .ant-tabs-top-bar {\n border-bottom: 1px solid #f0f0f0;\n}\n.ant-card-extra {\n margin-left: auto;\n padding: 16px 0;\n color: rgba(0, 0, 0, 0.85);\n font-weight: normal;\n font-size: 14px;\n}\n.ant-card-rtl .ant-card-extra {\n margin-right: auto;\n margin-left: 0;\n}\n.ant-card-body {\n padding: 24px;\n}\n.ant-card-body::before {\n display: table;\n content: '';\n}\n.ant-card-body::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-card-body::before {\n display: table;\n content: '';\n}\n.ant-card-body::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-card-contain-grid .ant-card-body {\n display: flex;\n flex-wrap: wrap;\n}\n.ant-card-contain-grid:not(.ant-card-loading) .ant-card-body {\n margin: -1px 0 0 -1px;\n padding: 0;\n}\n.ant-card-grid {\n width: 33.33%;\n padding: 24px;\n border: 0;\n border-radius: 0;\n box-shadow: 1px 0 0 0 #f0f0f0, 0 1px 0 0 #f0f0f0, 1px 1px 0 0 #f0f0f0, 1px 0 0 0 #f0f0f0 inset, 0 1px 0 0 #f0f0f0 inset;\n transition: all 0.3s;\n}\n.ant-card-grid-hoverable:hover {\n position: relative;\n z-index: 1;\n box-shadow: 0 1px 2px -2px rgba(0, 0, 0, 0.16), 0 3px 6px 0 rgba(0, 0, 0, 0.12), 0 5px 12px 4px rgba(0, 0, 0, 0.09);\n}\n.ant-card-contain-tabs > .ant-card-head .ant-card-head-title {\n min-height: 32px;\n padding-bottom: 0;\n}\n.ant-card-contain-tabs > .ant-card-head .ant-card-extra {\n padding-bottom: 0;\n}\n.ant-card-bordered .ant-card-cover {\n margin-top: -1px;\n margin-right: -1px;\n margin-left: -1px;\n}\n.ant-card-cover > * {\n display: block;\n width: 100%;\n}\n.ant-card-cover img {\n border-radius: 5px 5px 0 0;\n}\n.ant-card-actions {\n display: flex;\n margin: 0;\n padding: 0;\n list-style: none;\n background: #fff;\n border-top: 1px solid #f0f0f0;\n}\n.ant-card-actions::before {\n display: table;\n content: '';\n}\n.ant-card-actions::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-card-actions::before {\n display: table;\n content: '';\n}\n.ant-card-actions::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-card-actions > li {\n margin: 12px 0;\n color: rgba(0, 0, 0, 0.45);\n text-align: center;\n}\n.ant-card-actions > li > span {\n position: relative;\n display: block;\n min-width: 32px;\n font-size: 14px;\n line-height: 1.5715;\n cursor: pointer;\n}\n.ant-card-actions > li > span:hover {\n color: #5b5ce1;\n transition: color 0.3s;\n}\n.ant-card-actions > li > span a:not(.ant-btn),\n.ant-card-actions > li > span > .anticon {\n display: inline-block;\n width: 100%;\n color: rgba(0, 0, 0, 0.45);\n line-height: 22px;\n transition: color 0.3s;\n}\n.ant-card-actions > li > span a:not(.ant-btn):hover,\n.ant-card-actions > li > span > .anticon:hover {\n color: #5b5ce1;\n}\n.ant-card-actions > li > span > .anticon {\n font-size: 16px;\n line-height: 22px;\n}\n.ant-card-actions > li:not(:last-child) {\n border-right: 1px solid #f0f0f0;\n}\n.ant-card-rtl .ant-card-actions > li:not(:last-child) {\n border-right: none;\n border-left: 1px solid #f0f0f0;\n}\n.ant-card-type-inner .ant-card-head {\n padding: 0 24px;\n background: #fafafa;\n}\n.ant-card-type-inner .ant-card-head-title {\n padding: 12px 0;\n font-size: 14px;\n}\n.ant-card-type-inner .ant-card-body {\n padding: 16px 24px;\n}\n.ant-card-type-inner .ant-card-extra {\n padding: 13.5px 0;\n}\n.ant-card-meta {\n display: flex;\n margin: -4px 0;\n}\n.ant-card-meta::before {\n display: table;\n content: '';\n}\n.ant-card-meta::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-card-meta::before {\n display: table;\n content: '';\n}\n.ant-card-meta::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-card-meta-avatar {\n padding-right: 16px;\n}\n.ant-card-rtl .ant-card-meta-avatar {\n padding-right: 0;\n padding-left: 16px;\n}\n.ant-card-meta-detail {\n overflow: hidden;\n}\n.ant-card-meta-detail > div:not(:last-child) {\n margin-bottom: 8px;\n}\n.ant-card-meta-title {\n overflow: hidden;\n color: rgba(0, 0, 0, 0.85);\n font-weight: 500;\n font-size: 16px;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.ant-card-meta-description {\n color: rgba(0, 0, 0, 0.45);\n}\n.ant-card-loading {\n overflow: hidden;\n}\n.ant-card-loading .ant-card-body {\n user-select: none;\n}\n.ant-card-small > .ant-card-head {\n min-height: 36px;\n padding: 0 12px;\n font-size: 14px;\n}\n.ant-card-small > .ant-card-head > .ant-card-head-wrapper > .ant-card-head-title {\n padding: 8px 0;\n}\n.ant-card-small > .ant-card-head > .ant-card-head-wrapper > .ant-card-extra {\n padding: 8px 0;\n font-size: 14px;\n}\n.ant-card-small > .ant-card-body {\n padding: 12px;\n}\n.ant-carousel {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n}\n.ant-carousel .slick-slider {\n position: relative;\n display: block;\n box-sizing: border-box;\n touch-action: pan-y;\n -webkit-touch-callout: none;\n -webkit-tap-highlight-color: transparent;\n}\n.ant-carousel .slick-list {\n position: relative;\n display: block;\n margin: 0;\n padding: 0;\n overflow: hidden;\n}\n.ant-carousel .slick-list:focus {\n outline: none;\n}\n.ant-carousel .slick-list.dragging {\n cursor: pointer;\n}\n.ant-carousel .slick-list .slick-slide {\n pointer-events: none;\n}\n.ant-carousel .slick-list .slick-slide input.ant-radio-input,\n.ant-carousel .slick-list .slick-slide input.ant-checkbox-input {\n visibility: hidden;\n}\n.ant-carousel .slick-list .slick-slide.slick-active {\n pointer-events: auto;\n}\n.ant-carousel .slick-list .slick-slide.slick-active input.ant-radio-input,\n.ant-carousel .slick-list .slick-slide.slick-active input.ant-checkbox-input {\n visibility: visible;\n}\n.ant-carousel .slick-list .slick-slide > div > div {\n vertical-align: bottom;\n}\n.ant-carousel .slick-slider .slick-track,\n.ant-carousel .slick-slider .slick-list {\n transform: translate3d(0, 0, 0);\n touch-action: pan-y;\n}\n.ant-carousel .slick-track {\n position: relative;\n top: 0;\n left: 0;\n display: block;\n}\n.ant-carousel .slick-track::before,\n.ant-carousel .slick-track::after {\n display: table;\n content: '';\n}\n.ant-carousel .slick-track::after {\n clear: both;\n}\n.slick-loading .ant-carousel .slick-track {\n visibility: hidden;\n}\n.ant-carousel .slick-slide {\n display: none;\n float: left;\n height: 100%;\n min-height: 1px;\n}\n.ant-carousel .slick-slide img {\n display: block;\n}\n.ant-carousel .slick-slide.slick-loading img {\n display: none;\n}\n.ant-carousel .slick-slide.dragging img {\n pointer-events: none;\n}\n.ant-carousel .slick-initialized .slick-slide {\n display: block;\n}\n.ant-carousel .slick-loading .slick-slide {\n visibility: hidden;\n}\n.ant-carousel .slick-vertical .slick-slide {\n display: block;\n height: auto;\n}\n.ant-carousel .slick-arrow.slick-hidden {\n display: none;\n}\n.ant-carousel .slick-prev,\n.ant-carousel .slick-next {\n position: absolute;\n top: 50%;\n display: block;\n width: 20px;\n height: 20px;\n margin-top: -10px;\n padding: 0;\n color: transparent;\n font-size: 0;\n line-height: 0;\n background: transparent;\n border: 0;\n outline: none;\n cursor: pointer;\n}\n.ant-carousel .slick-prev:hover,\n.ant-carousel .slick-next:hover,\n.ant-carousel .slick-prev:focus,\n.ant-carousel .slick-next:focus {\n color: transparent;\n background: transparent;\n outline: none;\n}\n.ant-carousel .slick-prev:hover::before,\n.ant-carousel .slick-next:hover::before,\n.ant-carousel .slick-prev:focus::before,\n.ant-carousel .slick-next:focus::before {\n opacity: 1;\n}\n.ant-carousel .slick-prev.slick-disabled::before,\n.ant-carousel .slick-next.slick-disabled::before {\n opacity: 0.25;\n}\n.ant-carousel .slick-prev {\n left: -25px;\n}\n.ant-carousel .slick-prev::before {\n content: '←';\n}\n.ant-carousel .slick-next {\n right: -25px;\n}\n.ant-carousel .slick-next::before {\n content: '→';\n}\n.ant-carousel .slick-dots {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 15;\n display: flex !important;\n justify-content: center;\n margin-right: 15%;\n margin-bottom: 0;\n margin-left: 15%;\n padding-left: 0;\n list-style: none;\n}\n.ant-carousel .slick-dots-bottom {\n bottom: 12px;\n}\n.ant-carousel .slick-dots-top {\n top: 12px;\n bottom: auto;\n}\n.ant-carousel .slick-dots li {\n position: relative;\n display: inline-block;\n flex: 0 1 auto;\n box-sizing: content-box;\n width: 16px;\n height: 3px;\n margin: 0 4px;\n padding: 0;\n text-align: center;\n text-indent: -999px;\n vertical-align: top;\n transition: all 0.5s;\n}\n.ant-carousel .slick-dots li button {\n position: relative;\n display: block;\n width: 100%;\n height: 3px;\n padding: 0;\n color: transparent;\n font-size: 0;\n background: #fff;\n border: 0;\n border-radius: 1px;\n outline: none;\n cursor: pointer;\n opacity: 0.3;\n transition: all 0.5s;\n}\n.ant-carousel .slick-dots li button:hover,\n.ant-carousel .slick-dots li button:focus {\n opacity: 0.75;\n}\n.ant-carousel .slick-dots li button::after {\n position: absolute;\n top: -4px;\n right: -4px;\n bottom: -4px;\n left: -4px;\n content: '';\n}\n.ant-carousel .slick-dots li.slick-active {\n width: 24px;\n}\n.ant-carousel .slick-dots li.slick-active button {\n background: #fff;\n opacity: 1;\n}\n.ant-carousel .slick-dots li.slick-active:hover,\n.ant-carousel .slick-dots li.slick-active:focus {\n opacity: 1;\n}\n.ant-carousel-vertical .slick-dots {\n top: 50%;\n bottom: auto;\n flex-direction: column;\n width: 3px;\n height: auto;\n margin: 0;\n transform: translateY(-50%);\n}\n.ant-carousel-vertical .slick-dots-left {\n right: auto;\n left: 12px;\n}\n.ant-carousel-vertical .slick-dots-right {\n right: 12px;\n left: auto;\n}\n.ant-carousel-vertical .slick-dots li {\n width: 3px;\n height: 16px;\n margin: 4px 0;\n vertical-align: baseline;\n}\n.ant-carousel-vertical .slick-dots li button {\n width: 3px;\n height: 16px;\n}\n.ant-carousel-vertical .slick-dots li.slick-active {\n width: 3px;\n height: 24px;\n}\n.ant-carousel-vertical .slick-dots li.slick-active button {\n width: 3px;\n height: 24px;\n}\n.ant-carousel-rtl {\n direction: rtl;\n}\n.ant-carousel-rtl .ant-carousel .slick-track {\n right: 0;\n left: auto;\n}\n.ant-carousel-rtl .ant-carousel .slick-prev {\n right: -25px;\n left: auto;\n}\n.ant-carousel-rtl .ant-carousel .slick-prev::before {\n content: '→';\n}\n.ant-carousel-rtl .ant-carousel .slick-next {\n right: auto;\n left: -25px;\n}\n.ant-carousel-rtl .ant-carousel .slick-next::before {\n content: '←';\n}\n.ant-carousel-rtl.ant-carousel .slick-dots {\n flex-direction: row-reverse;\n}\n.ant-carousel-rtl.ant-carousel-vertical .slick-dots {\n flex-direction: column;\n}\n@keyframes antCheckboxEffect {\n 0% {\n transform: scale(1);\n opacity: 0.5;\n }\n 100% {\n transform: scale(1.6);\n opacity: 0;\n }\n}\n.ant-cascader-checkbox {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n top: 0.2em;\n line-height: 1;\n white-space: nowrap;\n outline: none;\n cursor: pointer;\n}\n.ant-cascader-checkbox-wrapper:hover .ant-cascader-checkbox-inner,\n.ant-cascader-checkbox:hover .ant-cascader-checkbox-inner,\n.ant-cascader-checkbox-input:focus + .ant-cascader-checkbox-inner {\n border-color: #5b5ce1;\n}\n.ant-cascader-checkbox-checked::after {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 1px solid #5b5ce1;\n border-radius: 5px;\n visibility: hidden;\n animation: antCheckboxEffect 0.36s ease-in-out;\n animation-fill-mode: backwards;\n content: '';\n}\n.ant-cascader-checkbox:hover::after,\n.ant-cascader-checkbox-wrapper:hover .ant-cascader-checkbox::after {\n visibility: visible;\n}\n.ant-cascader-checkbox-inner {\n position: relative;\n top: 0;\n left: 0;\n display: block;\n width: 16px;\n height: 16px;\n direction: ltr;\n background-color: #fff;\n border: 1px solid #d9d9d9;\n border-radius: 5px;\n border-collapse: separate;\n transition: all 0.3s;\n}\n.ant-cascader-checkbox-inner::after {\n position: absolute;\n top: 50%;\n left: 21.5%;\n display: table;\n width: 5.71428571px;\n height: 9.14285714px;\n border: 2px solid #fff;\n border-top: 0;\n border-left: 0;\n transform: rotate(45deg) scale(0) translate(-50%, -50%);\n opacity: 0;\n transition: all 0.1s cubic-bezier(0.71, -0.46, 0.88, 0.6), opacity 0.1s;\n content: ' ';\n}\n.ant-cascader-checkbox-input {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n width: 100%;\n height: 100%;\n cursor: pointer;\n opacity: 0;\n}\n.ant-cascader-checkbox-checked .ant-cascader-checkbox-inner::after {\n position: absolute;\n display: table;\n border: 2px solid #fff;\n border-top: 0;\n border-left: 0;\n transform: rotate(45deg) scale(1) translate(-50%, -50%);\n opacity: 1;\n transition: all 0.2s cubic-bezier(0.12, 0.4, 0.29, 1.46) 0.1s;\n content: ' ';\n}\n.ant-cascader-checkbox-checked .ant-cascader-checkbox-inner {\n background-color: #5b5ce1;\n border-color: #5b5ce1;\n}\n.ant-cascader-checkbox-disabled {\n cursor: not-allowed;\n}\n.ant-cascader-checkbox-disabled.ant-cascader-checkbox-checked .ant-cascader-checkbox-inner::after {\n border-color: rgba(0, 0, 0, 0.25);\n animation-name: none;\n}\n.ant-cascader-checkbox-disabled .ant-cascader-checkbox-input {\n cursor: not-allowed;\n pointer-events: none;\n}\n.ant-cascader-checkbox-disabled .ant-cascader-checkbox-inner {\n background-color: #f5f5f5;\n border-color: #d9d9d9 !important;\n}\n.ant-cascader-checkbox-disabled .ant-cascader-checkbox-inner::after {\n border-color: #f5f5f5;\n border-collapse: separate;\n animation-name: none;\n}\n.ant-cascader-checkbox-disabled + span {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n}\n.ant-cascader-checkbox-disabled:hover::after,\n.ant-cascader-checkbox-wrapper:hover .ant-cascader-checkbox-disabled::after {\n visibility: hidden;\n}\n.ant-cascader-checkbox-wrapper {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n display: inline-flex;\n align-items: baseline;\n line-height: unset;\n cursor: pointer;\n}\n.ant-cascader-checkbox-wrapper::after {\n display: inline-block;\n width: 0;\n overflow: hidden;\n content: '\\a0';\n}\n.ant-cascader-checkbox-wrapper.ant-cascader-checkbox-wrapper-disabled {\n cursor: not-allowed;\n}\n.ant-cascader-checkbox-wrapper + .ant-cascader-checkbox-wrapper {\n margin-left: 8px;\n}\n.ant-cascader-checkbox-wrapper.ant-cascader-checkbox-wrapper-in-form-item input[type='checkbox'] {\n width: 14px;\n height: 14px;\n}\n.ant-cascader-checkbox + span {\n padding-right: 8px;\n padding-left: 8px;\n}\n.ant-cascader-checkbox-group {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n display: inline-block;\n}\n.ant-cascader-checkbox-group-item {\n margin-right: 8px;\n}\n.ant-cascader-checkbox-group-item:last-child {\n margin-right: 0;\n}\n.ant-cascader-checkbox-group-item + .ant-cascader-checkbox-group-item {\n margin-left: 0;\n}\n.ant-cascader-checkbox-indeterminate .ant-cascader-checkbox-inner {\n background-color: #fff;\n border-color: #d9d9d9;\n}\n.ant-cascader-checkbox-indeterminate .ant-cascader-checkbox-inner::after {\n top: 50%;\n left: 50%;\n width: 8px;\n height: 8px;\n background-color: #5b5ce1;\n border: 0;\n transform: translate(-50%, -50%) scale(1);\n opacity: 1;\n content: ' ';\n}\n.ant-cascader-checkbox-indeterminate.ant-cascader-checkbox-disabled .ant-cascader-checkbox-inner::after {\n background-color: rgba(0, 0, 0, 0.25);\n border-color: rgba(0, 0, 0, 0.25);\n}\n.ant-cascader-checkbox-rtl {\n direction: rtl;\n}\n.ant-cascader-checkbox-group-rtl .ant-cascader-checkbox-group-item {\n margin-right: 0;\n margin-left: 8px;\n}\n.ant-cascader-checkbox-group-rtl .ant-cascader-checkbox-group-item:last-child {\n margin-left: 0 !important;\n}\n.ant-cascader-checkbox-group-rtl .ant-cascader-checkbox-group-item + .ant-cascader-checkbox-group-item {\n margin-left: 8px;\n}\n.ant-cascader {\n width: 184px;\n}\n.ant-cascader-checkbox {\n top: 0;\n margin-right: 8px;\n}\n.ant-cascader-menus {\n display: flex;\n flex-wrap: nowrap;\n align-items: flex-start;\n}\n.ant-cascader-menus.ant-cascader-menu-empty .ant-cascader-menu {\n width: 100%;\n height: auto;\n}\n.ant-cascader-menu {\n flex-grow: 1;\n min-width: 111px;\n height: 180px;\n margin: 0;\n margin: -4px 0;\n padding: 4px 0;\n overflow: auto;\n vertical-align: top;\n list-style: none;\n border-right: 1px solid #f0f0f0;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n}\n.ant-cascader-menu-item {\n display: flex;\n flex-wrap: nowrap;\n align-items: center;\n padding: 5px 12px;\n overflow: hidden;\n line-height: 22px;\n white-space: nowrap;\n text-overflow: ellipsis;\n cursor: pointer;\n transition: all 0.3s;\n}\n.ant-cascader-menu-item:hover {\n background: #f5f5f5;\n}\n.ant-cascader-menu-item-disabled {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n}\n.ant-cascader-menu-item-disabled:hover {\n background: transparent;\n}\n.ant-cascader-menu-empty .ant-cascader-menu-item {\n color: rgba(0, 0, 0, 0.25);\n cursor: default;\n pointer-events: none;\n}\n.ant-cascader-menu-item-active:not(.ant-cascader-menu-item-disabled),\n.ant-cascader-menu-item-active:not(.ant-cascader-menu-item-disabled):hover {\n font-weight: 600;\n background-color: #f0f2ff;\n}\n.ant-cascader-menu-item-content {\n flex: auto;\n}\n.ant-cascader-menu-item-expand .ant-cascader-menu-item-expand-icon,\n.ant-cascader-menu-item-loading-icon {\n margin-left: 4px;\n color: rgba(0, 0, 0, 0.45);\n font-size: 10px;\n}\n.ant-cascader-menu-item-disabled.ant-cascader-menu-item-expand .ant-cascader-menu-item-expand-icon,\n.ant-cascader-menu-item-disabled.ant-cascader-menu-item-loading-icon {\n color: rgba(0, 0, 0, 0.25);\n}\n.ant-cascader-menu-item-keyword {\n color: #ff4d4f;\n}\n.ant-cascader-compact-item:not(.ant-cascader-compact-last-item):not(.ant-cascader-compact-item-rtl) {\n margin-right: -1px;\n}\n.ant-cascader-compact-item:not(.ant-cascader-compact-last-item).ant-cascader-compact-item-rtl {\n margin-left: -1px;\n}\n.ant-cascader-compact-item:hover,\n.ant-cascader-compact-item:focus,\n.ant-cascader-compact-item:active {\n z-index: 2;\n}\n.ant-cascader-compact-item[disabled] {\n z-index: 0;\n}\n.ant-cascader-compact-item:not(.ant-cascader-compact-first-item):not(.ant-cascader-compact-last-item).ant-cascader {\n border-radius: 0;\n}\n.ant-cascader-compact-item.ant-cascader.ant-cascader-compact-first-item:not(.ant-cascader-compact-item-rtl) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.ant-cascader-compact-item.ant-cascader.ant-cascader-compact-last-item:not(.ant-cascader-compact-item-rtl) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.ant-cascader-compact-item.ant-cascader.ant-cascader-compact-item-rtl.ant-cascader-compact-first-item {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.ant-cascader-compact-item.ant-cascader.ant-cascader-compact-item-rtl.ant-cascader-compact-last-item {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.ant-cascader-rtl .ant-cascader-menu-item-expand-icon,\n.ant-cascader-rtl .ant-cascader-menu-item-loading-icon {\n margin-right: 4px;\n margin-left: 0;\n}\n.ant-cascader-rtl .ant-cascader-checkbox {\n top: 0;\n margin-right: 0;\n margin-left: 8px;\n}\n.ant-checkbox {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n top: 0.2em;\n line-height: 1;\n white-space: nowrap;\n outline: none;\n cursor: pointer;\n}\n.ant-checkbox-wrapper:hover .ant-checkbox-inner,\n.ant-checkbox:hover .ant-checkbox-inner,\n.ant-checkbox-input:focus + .ant-checkbox-inner {\n border-color: #5b5ce1;\n}\n.ant-checkbox-checked::after {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 1px solid #5b5ce1;\n border-radius: 5px;\n visibility: hidden;\n animation: antCheckboxEffect 0.36s ease-in-out;\n animation-fill-mode: backwards;\n content: '';\n}\n.ant-checkbox:hover::after,\n.ant-checkbox-wrapper:hover .ant-checkbox::after {\n visibility: visible;\n}\n.ant-checkbox-inner {\n position: relative;\n top: 0;\n left: 0;\n display: block;\n width: 16px;\n height: 16px;\n direction: ltr;\n background-color: #fff;\n border: 1px solid #d9d9d9;\n border-radius: 5px;\n border-collapse: separate;\n transition: all 0.3s;\n}\n.ant-checkbox-inner::after {\n position: absolute;\n top: 50%;\n left: 21.5%;\n display: table;\n width: 5.71428571px;\n height: 9.14285714px;\n border: 2px solid #fff;\n border-top: 0;\n border-left: 0;\n transform: rotate(45deg) scale(0) translate(-50%, -50%);\n opacity: 0;\n transition: all 0.1s cubic-bezier(0.71, -0.46, 0.88, 0.6), opacity 0.1s;\n content: ' ';\n}\n.ant-checkbox-input {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n width: 100%;\n height: 100%;\n cursor: pointer;\n opacity: 0;\n}\n.ant-checkbox-checked .ant-checkbox-inner::after {\n position: absolute;\n display: table;\n border: 2px solid #fff;\n border-top: 0;\n border-left: 0;\n transform: rotate(45deg) scale(1) translate(-50%, -50%);\n opacity: 1;\n transition: all 0.2s cubic-bezier(0.12, 0.4, 0.29, 1.46) 0.1s;\n content: ' ';\n}\n.ant-checkbox-checked .ant-checkbox-inner {\n background-color: #5b5ce1;\n border-color: #5b5ce1;\n}\n.ant-checkbox-disabled {\n cursor: not-allowed;\n}\n.ant-checkbox-disabled.ant-checkbox-checked .ant-checkbox-inner::after {\n border-color: rgba(0, 0, 0, 0.25);\n animation-name: none;\n}\n.ant-checkbox-disabled .ant-checkbox-input {\n cursor: not-allowed;\n pointer-events: none;\n}\n.ant-checkbox-disabled .ant-checkbox-inner {\n background-color: #f5f5f5;\n border-color: #d9d9d9 !important;\n}\n.ant-checkbox-disabled .ant-checkbox-inner::after {\n border-color: #f5f5f5;\n border-collapse: separate;\n animation-name: none;\n}\n.ant-checkbox-disabled + span {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n}\n.ant-checkbox-disabled:hover::after,\n.ant-checkbox-wrapper:hover .ant-checkbox-disabled::after {\n visibility: hidden;\n}\n.ant-checkbox-wrapper {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n display: inline-flex;\n align-items: baseline;\n line-height: unset;\n cursor: pointer;\n}\n.ant-checkbox-wrapper::after {\n display: inline-block;\n width: 0;\n overflow: hidden;\n content: '\\a0';\n}\n.ant-checkbox-wrapper.ant-checkbox-wrapper-disabled {\n cursor: not-allowed;\n}\n.ant-checkbox-wrapper + .ant-checkbox-wrapper {\n margin-left: 8px;\n}\n.ant-checkbox-wrapper.ant-checkbox-wrapper-in-form-item input[type='checkbox'] {\n width: 14px;\n height: 14px;\n}\n.ant-checkbox + span {\n padding-right: 8px;\n padding-left: 8px;\n}\n.ant-checkbox-group {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n display: inline-block;\n}\n.ant-checkbox-group-item {\n margin-right: 8px;\n}\n.ant-checkbox-group-item:last-child {\n margin-right: 0;\n}\n.ant-checkbox-group-item + .ant-checkbox-group-item {\n margin-left: 0;\n}\n.ant-checkbox-indeterminate .ant-checkbox-inner {\n background-color: #fff;\n border-color: #d9d9d9;\n}\n.ant-checkbox-indeterminate .ant-checkbox-inner::after {\n top: 50%;\n left: 50%;\n width: 8px;\n height: 8px;\n background-color: #5b5ce1;\n border: 0;\n transform: translate(-50%, -50%) scale(1);\n opacity: 1;\n content: ' ';\n}\n.ant-checkbox-indeterminate.ant-checkbox-disabled .ant-checkbox-inner::after {\n background-color: rgba(0, 0, 0, 0.25);\n border-color: rgba(0, 0, 0, 0.25);\n}\n.ant-checkbox-rtl {\n direction: rtl;\n}\n.ant-checkbox-group-rtl .ant-checkbox-group-item {\n margin-right: 0;\n margin-left: 8px;\n}\n.ant-checkbox-group-rtl .ant-checkbox-group-item:last-child {\n margin-left: 0 !important;\n}\n.ant-checkbox-group-rtl .ant-checkbox-group-item + .ant-checkbox-group-item {\n margin-left: 8px;\n}\n.ant-collapse {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n background-color: #fafafa;\n border: 1px solid #d9d9d9;\n border-bottom: 0;\n border-radius: 5px;\n}\n.ant-collapse > .ant-collapse-item {\n border-bottom: 1px solid #d9d9d9;\n}\n.ant-collapse > .ant-collapse-item:last-child,\n.ant-collapse > .ant-collapse-item:last-child > .ant-collapse-header {\n border-radius: 0 0 5px 5px;\n}\n.ant-collapse > .ant-collapse-item > .ant-collapse-header {\n position: relative;\n display: flex;\n flex-wrap: nowrap;\n align-items: flex-start;\n padding: 12px 16px;\n color: rgba(0, 0, 0, 0.85);\n line-height: 1.5715;\n cursor: pointer;\n transition: all 0.3s, visibility 0s;\n}\n.ant-collapse > .ant-collapse-item > .ant-collapse-header .ant-collapse-arrow {\n display: inline-block;\n margin-right: 12px;\n font-size: 12px;\n vertical-align: -1px;\n}\n.ant-collapse > .ant-collapse-item > .ant-collapse-header .ant-collapse-arrow svg {\n transition: transform 0.24s;\n}\n.ant-collapse > .ant-collapse-item > .ant-collapse-header .ant-collapse-header-text {\n flex: auto;\n}\n.ant-collapse > .ant-collapse-item > .ant-collapse-header .ant-collapse-extra {\n margin-left: auto;\n}\n.ant-collapse > .ant-collapse-item > .ant-collapse-header:focus {\n outline: none;\n}\n.ant-collapse > .ant-collapse-item .ant-collapse-header-collapsible-only {\n cursor: default;\n}\n.ant-collapse > .ant-collapse-item .ant-collapse-header-collapsible-only .ant-collapse-header-text {\n flex: none;\n cursor: pointer;\n}\n.ant-collapse > .ant-collapse-item .ant-collapse-icon-collapsible-only {\n cursor: default;\n}\n.ant-collapse > .ant-collapse-item .ant-collapse-icon-collapsible-only .ant-collapse-expand-icon {\n cursor: pointer;\n}\n.ant-collapse > .ant-collapse-item.ant-collapse-no-arrow > .ant-collapse-header {\n padding-left: 12px;\n}\n.ant-collapse-icon-position-end > .ant-collapse-item > .ant-collapse-header {\n position: relative;\n padding: 12px 16px;\n padding-right: 40px;\n}\n.ant-collapse-icon-position-end > .ant-collapse-item > .ant-collapse-header .ant-collapse-arrow {\n position: absolute;\n top: 50%;\n right: 16px;\n left: auto;\n margin: 0;\n transform: translateY(-50%);\n}\n.ant-collapse-content {\n color: rgba(0, 0, 0, 0.85);\n background-color: #fff;\n border-top: 1px solid #d9d9d9;\n}\n.ant-collapse-content > .ant-collapse-content-box {\n padding: 16px;\n}\n.ant-collapse-content-hidden {\n display: none;\n}\n.ant-collapse-item:last-child > .ant-collapse-content {\n border-radius: 0 0 5px 5px;\n}\n.ant-collapse-borderless {\n background-color: #fafafa;\n border: 0;\n}\n.ant-collapse-borderless > .ant-collapse-item {\n border-bottom: 1px solid #d9d9d9;\n}\n.ant-collapse-borderless > .ant-collapse-item:last-child,\n.ant-collapse-borderless > .ant-collapse-item:last-child .ant-collapse-header {\n border-radius: 0;\n}\n.ant-collapse-borderless > .ant-collapse-item:last-child {\n border-bottom: 0;\n}\n.ant-collapse-borderless > .ant-collapse-item > .ant-collapse-content {\n background-color: transparent;\n border-top: 0;\n}\n.ant-collapse-borderless > .ant-collapse-item > .ant-collapse-content > .ant-collapse-content-box {\n padding-top: 4px;\n}\n.ant-collapse-ghost {\n background-color: transparent;\n border: 0;\n}\n.ant-collapse-ghost > .ant-collapse-item {\n border-bottom: 0;\n}\n.ant-collapse-ghost > .ant-collapse-item > .ant-collapse-content {\n background-color: transparent;\n border-top: 0;\n}\n.ant-collapse-ghost > .ant-collapse-item > .ant-collapse-content > .ant-collapse-content-box {\n padding-top: 12px;\n padding-bottom: 12px;\n}\n.ant-collapse .ant-collapse-item-disabled > .ant-collapse-header,\n.ant-collapse .ant-collapse-item-disabled > .ant-collapse-header > .arrow {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n}\n.ant-collapse-rtl {\n direction: rtl;\n}\n.ant-collapse-rtl.ant-collapse.ant-collapse-icon-position-end > .ant-collapse-item > .ant-collapse-header {\n position: relative;\n padding: 12px 16px;\n padding-left: 40px;\n}\n.ant-collapse-rtl.ant-collapse.ant-collapse-icon-position-end > .ant-collapse-item > .ant-collapse-header .ant-collapse-arrow {\n position: absolute;\n top: 50%;\n right: auto;\n left: 16px;\n margin: 0;\n transform: translateY(-50%);\n}\n.ant-collapse-rtl .ant-collapse > .ant-collapse-item > .ant-collapse-header {\n padding: 12px 16px;\n padding-right: 40px;\n}\n.ant-collapse-rtl.ant-collapse > .ant-collapse-item > .ant-collapse-header .ant-collapse-arrow {\n margin-right: 0;\n margin-left: 12px;\n}\n.ant-collapse-rtl.ant-collapse > .ant-collapse-item > .ant-collapse-header .ant-collapse-arrow svg {\n transform: rotate(180deg);\n}\n.ant-collapse-rtl.ant-collapse > .ant-collapse-item > .ant-collapse-header .ant-collapse-extra {\n margin-right: auto;\n margin-left: 0;\n}\n.ant-collapse-rtl.ant-collapse > .ant-collapse-item.ant-collapse-no-arrow > .ant-collapse-header {\n padding-right: 12px;\n padding-left: 0;\n}\n.ant-comment {\n position: relative;\n background-color: inherit;\n}\n.ant-comment-inner {\n display: flex;\n padding: 16px 0;\n}\n.ant-comment-avatar {\n position: relative;\n flex-shrink: 0;\n margin-right: 12px;\n cursor: pointer;\n}\n.ant-comment-avatar img {\n width: 32px;\n height: 32px;\n border-radius: 50%;\n}\n.ant-comment-content {\n position: relative;\n flex: 1 1 auto;\n min-width: 1px;\n font-size: 14px;\n word-wrap: break-word;\n}\n.ant-comment-content-author {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n margin-bottom: 4px;\n font-size: 14px;\n}\n.ant-comment-content-author > a,\n.ant-comment-content-author > span {\n padding-right: 8px;\n font-size: 12px;\n line-height: 18px;\n}\n.ant-comment-content-author-name {\n color: rgba(0, 0, 0, 0.45);\n font-size: 14px;\n transition: color 0.3s;\n}\n.ant-comment-content-author-name > * {\n color: rgba(0, 0, 0, 0.45);\n}\n.ant-comment-content-author-name > *:hover {\n color: rgba(0, 0, 0, 0.45);\n}\n.ant-comment-content-author-time {\n color: #ccc;\n white-space: nowrap;\n cursor: auto;\n}\n.ant-comment-content-detail p {\n margin-bottom: inherit;\n white-space: pre-wrap;\n}\n.ant-comment-actions {\n margin-top: 12px;\n margin-bottom: inherit;\n padding-left: 0;\n}\n.ant-comment-actions > li {\n display: inline-block;\n color: rgba(0, 0, 0, 0.45);\n}\n.ant-comment-actions > li > span {\n margin-right: 10px;\n color: rgba(0, 0, 0, 0.45);\n font-size: 12px;\n cursor: pointer;\n transition: color 0.3s;\n user-select: none;\n}\n.ant-comment-actions > li > span:hover {\n color: #595959;\n}\n.ant-comment-nested {\n margin-left: 44px;\n}\n.ant-comment-rtl {\n direction: rtl;\n}\n.ant-comment-rtl .ant-comment-avatar {\n margin-right: 0;\n margin-left: 12px;\n}\n.ant-comment-rtl .ant-comment-content-author > a,\n.ant-comment-rtl .ant-comment-content-author > span {\n padding-right: 0;\n padding-left: 8px;\n}\n.ant-comment-rtl .ant-comment-actions {\n padding-right: 0;\n}\n.ant-comment-rtl .ant-comment-actions > li > span {\n margin-right: 0;\n margin-left: 10px;\n}\n.ant-comment-rtl .ant-comment-nested {\n margin-right: 44px;\n margin-left: 0;\n}\n.ant-picker-status-error.ant-picker,\n.ant-picker-status-error.ant-picker:not([disabled]):hover {\n background-color: #fff;\n border-color: #ff4d4f;\n}\n.ant-picker-status-error.ant-picker-focused,\n.ant-picker-status-error.ant-picker:focus {\n border-color: #ff7875;\n box-shadow: 0 0 0 2px rgba(255, 77, 79, 0.2);\n border-right-width: 1px;\n outline: 0;\n}\n.ant-picker-status-error.ant-picker .ant-picker-active-bar {\n background: #ff7875;\n}\n.ant-picker-status-warning.ant-picker,\n.ant-picker-status-warning.ant-picker:not([disabled]):hover {\n background-color: #fff;\n border-color: #faad14;\n}\n.ant-picker-status-warning.ant-picker-focused,\n.ant-picker-status-warning.ant-picker:focus {\n border-color: #ffc53d;\n box-shadow: 0 0 0 2px rgba(250, 173, 20, 0.2);\n border-right-width: 1px;\n outline: 0;\n}\n.ant-picker-status-warning.ant-picker .ant-picker-active-bar {\n background: #ffc53d;\n}\n.ant-picker {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n padding: 4px 11px 4px;\n position: relative;\n display: inline-flex;\n align-items: center;\n background: #fff;\n border: 1px solid #d9d9d9;\n border-radius: 5px;\n transition: border 0.3s, box-shadow 0.3s;\n}\n.ant-picker:hover,\n.ant-picker-focused {\n border-color: #8588ed;\n border-right-width: 1px;\n}\n.ant-input-rtl .ant-picker:hover,\n.ant-input-rtl .ant-picker-focused {\n border-right-width: 0;\n border-left-width: 1px !important;\n}\n.ant-picker-focused {\n border-color: #8588ed;\n box-shadow: 0 0 0 2px rgba(91, 92, 225, 0.2);\n border-right-width: 1px;\n outline: 0;\n}\n.ant-input-rtl .ant-picker-focused {\n border-right-width: 0;\n border-left-width: 1px !important;\n}\n.ant-picker.ant-picker-disabled {\n background: #f5f5f5;\n border-color: #d9d9d9;\n cursor: not-allowed;\n}\n.ant-picker.ant-picker-disabled .ant-picker-suffix {\n color: rgba(0, 0, 0, 0.25);\n}\n.ant-picker.ant-picker-borderless {\n background-color: transparent !important;\n border-color: transparent !important;\n box-shadow: none !important;\n}\n.ant-picker-input {\n position: relative;\n display: inline-flex;\n align-items: center;\n width: 100%;\n}\n.ant-picker-input > input {\n position: relative;\n display: inline-block;\n width: 100%;\n min-width: 0;\n padding: 4px 11px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n line-height: 1.5715;\n background-color: #fff;\n background-image: none;\n border: 1px solid #d9d9d9;\n border-radius: 5px;\n transition: all 0.3s;\n flex: auto;\n min-width: 1px;\n height: auto;\n padding: 0;\n background: transparent;\n border: 0;\n}\n.ant-picker-input > input::placeholder {\n color: #bfbfbf;\n user-select: none;\n}\n.ant-picker-input > input:placeholder-shown {\n text-overflow: ellipsis;\n}\n.ant-picker-input > input:hover {\n border-color: #8588ed;\n border-right-width: 1px;\n}\n.ant-input-rtl .ant-picker-input > input:hover {\n border-right-width: 0;\n border-left-width: 1px !important;\n}\n.ant-picker-input > input:focus,\n.ant-picker-input > input-focused {\n border-color: #8588ed;\n box-shadow: 0 0 0 2px rgba(91, 92, 225, 0.2);\n border-right-width: 1px;\n outline: 0;\n}\n.ant-input-rtl .ant-picker-input > input:focus,\n.ant-input-rtl .ant-picker-input > input-focused {\n border-right-width: 0;\n border-left-width: 1px !important;\n}\n.ant-picker-input > input-disabled {\n color: rgba(0, 0, 0, 0.25);\n background-color: #f5f5f5;\n border-color: #d9d9d9;\n box-shadow: none;\n cursor: not-allowed;\n opacity: 1;\n}\n.ant-picker-input > input-disabled:hover {\n border-color: #d9d9d9;\n border-right-width: 1px;\n}\n.ant-picker-input > input[disabled] {\n color: rgba(0, 0, 0, 0.25);\n background-color: #f5f5f5;\n border-color: #d9d9d9;\n box-shadow: none;\n cursor: not-allowed;\n opacity: 1;\n}\n.ant-picker-input > input[disabled]:hover {\n border-color: #d9d9d9;\n border-right-width: 1px;\n}\n.ant-picker-input > input-borderless,\n.ant-picker-input > input-borderless:hover,\n.ant-picker-input > input-borderless:focus,\n.ant-picker-input > input-borderless-focused,\n.ant-picker-input > input-borderless-disabled,\n.ant-picker-input > input-borderless[disabled] {\n background-color: transparent;\n border: none;\n box-shadow: none;\n}\ntextarea.ant-picker-input > input {\n max-width: 100%;\n height: auto;\n min-height: 32px;\n line-height: 1.5715;\n vertical-align: bottom;\n transition: all 0.3s, height 0s;\n}\n.ant-picker-input > input-lg {\n padding: 6.5px 11px;\n font-size: 16px;\n}\n.ant-picker-input > input-sm {\n padding: 0px 7px;\n}\n.ant-picker-input > input-rtl {\n direction: rtl;\n}\n.ant-picker-input > input:focus {\n box-shadow: none;\n}\n.ant-picker-input > input[disabled] {\n background: transparent;\n}\n.ant-picker-input:hover .ant-picker-clear {\n opacity: 1;\n}\n.ant-picker-input-placeholder > input {\n color: #bfbfbf;\n}\n.ant-picker-large {\n padding: 6.5px 11px 6.5px;\n}\n.ant-picker-large .ant-picker-input > input {\n font-size: 16px;\n}\n.ant-picker-small {\n padding: 0px 7px 0px;\n}\n.ant-picker-suffix {\n display: flex;\n flex: none;\n align-self: center;\n margin-left: 4px;\n color: rgba(0, 0, 0, 0.25);\n line-height: 1;\n pointer-events: none;\n}\n.ant-picker-suffix > * {\n vertical-align: top;\n}\n.ant-picker-suffix > *:not(:last-child) {\n margin-right: 8px;\n}\n.ant-picker-clear {\n position: absolute;\n top: 50%;\n right: 0;\n color: rgba(0, 0, 0, 0.25);\n line-height: 1;\n background: #fff;\n transform: translateY(-50%);\n cursor: pointer;\n opacity: 0;\n transition: opacity 0.3s, color 0.3s;\n}\n.ant-picker-clear > * {\n vertical-align: top;\n}\n.ant-picker-clear:hover {\n color: rgba(0, 0, 0, 0.45);\n}\n.ant-picker-separator {\n position: relative;\n display: inline-block;\n width: 1em;\n height: 16px;\n color: rgba(0, 0, 0, 0.25);\n font-size: 16px;\n vertical-align: top;\n cursor: default;\n}\n.ant-picker-focused .ant-picker-separator {\n color: rgba(0, 0, 0, 0.45);\n}\n.ant-picker-disabled .ant-picker-range-separator .ant-picker-separator {\n cursor: not-allowed;\n}\n.ant-picker-range {\n position: relative;\n display: inline-flex;\n}\n.ant-picker-range .ant-picker-clear {\n right: 11px;\n}\n.ant-picker-range:hover .ant-picker-clear {\n opacity: 1;\n}\n.ant-picker-range .ant-picker-active-bar {\n bottom: -1px;\n height: 2px;\n margin-left: 11px;\n background: #5b5ce1;\n opacity: 0;\n transition: all 0.3s ease-out;\n pointer-events: none;\n}\n.ant-picker-range.ant-picker-focused .ant-picker-active-bar {\n opacity: 1;\n}\n.ant-picker-range-separator {\n align-items: center;\n padding: 0 8px;\n line-height: 1;\n}\n.ant-picker-range.ant-picker-small .ant-picker-clear {\n right: 7px;\n}\n.ant-picker-range.ant-picker-small .ant-picker-active-bar {\n margin-left: 7px;\n}\n.ant-picker-dropdown {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: absolute;\n top: -9999px;\n left: -9999px;\n z-index: 1050;\n}\n.ant-picker-dropdown-hidden {\n display: none;\n}\n.ant-picker-dropdown-placement-bottomLeft .ant-picker-range-arrow {\n top: 2.58561808px;\n display: block;\n transform: rotate(-135deg) translateY(1px);\n}\n.ant-picker-dropdown-placement-topLeft .ant-picker-range-arrow {\n bottom: 2.58561808px;\n display: block;\n transform: rotate(45deg);\n}\n.ant-picker-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-picker-dropdown-placement-topLeft,\n.ant-picker-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-picker-dropdown-placement-topRight,\n.ant-picker-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-picker-dropdown-placement-topLeft,\n.ant-picker-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-picker-dropdown-placement-topRight {\n animation-name: antSlideDownIn;\n}\n.ant-picker-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-picker-dropdown-placement-bottomLeft,\n.ant-picker-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-picker-dropdown-placement-bottomRight,\n.ant-picker-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-picker-dropdown-placement-bottomLeft,\n.ant-picker-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-picker-dropdown-placement-bottomRight {\n animation-name: antSlideUpIn;\n}\n.ant-picker-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-picker-dropdown-placement-topLeft,\n.ant-picker-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-picker-dropdown-placement-topRight {\n animation-name: antSlideDownOut;\n}\n.ant-picker-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-picker-dropdown-placement-bottomLeft,\n.ant-picker-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-picker-dropdown-placement-bottomRight {\n animation-name: antSlideUpOut;\n}\n.ant-picker-dropdown-range {\n padding: 7.54247233px 0;\n}\n.ant-picker-dropdown-range-hidden {\n display: none;\n}\n.ant-picker-dropdown .ant-picker-panel > .ant-picker-time-panel {\n padding-top: 4px;\n}\n.ant-picker-ranges {\n margin-bottom: 0;\n padding: 4px 12px;\n overflow: hidden;\n line-height: 34px;\n text-align: left;\n list-style: none;\n}\n.ant-picker-ranges > li {\n display: inline-block;\n}\n.ant-picker-ranges .ant-picker-preset > .ant-tag-blue {\n color: #5b5ce1;\n background: #f0f2ff;\n border-color: #e0e3ff;\n cursor: pointer;\n}\n.ant-picker-ranges .ant-picker-ok {\n float: right;\n margin-left: 8px;\n}\n.ant-picker-range-wrapper {\n display: flex;\n}\n.ant-picker-range-arrow {\n position: absolute;\n z-index: 1;\n display: none;\n width: 11.3137085px;\n height: 11.3137085px;\n margin-left: 16.5px;\n box-shadow: 2px 2px 6px -2px rgba(0, 0, 0, 0.1);\n transition: left 0.3s ease-out;\n border-radius: 0 0 2px;\n pointer-events: none;\n}\n.ant-picker-range-arrow::before {\n position: absolute;\n top: -11.3137085px;\n left: -11.3137085px;\n width: 33.9411255px;\n height: 33.9411255px;\n background: #fff;\n background-repeat: no-repeat;\n background-position: -10px -10px;\n content: '';\n clip-path: inset(33% 33%);\n clip-path: path('M 9.849242404917499 24.091883092036785 A 5 5 0 0 1 13.384776310850237 22.627416997969522 L 20.627416997969522 22.627416997969522 A 2 2 0 0 0 22.627416997969522 20.627416997969522 L 22.627416997969522 13.384776310850237 A 5 5 0 0 1 24.091883092036785 9.849242404917499 L 23.091883092036785 9.849242404917499 L 9.849242404917499 23.091883092036785 Z');\n}\n.ant-picker-panel-container {\n overflow: hidden;\n vertical-align: top;\n background: #fff;\n border-radius: 5px;\n box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05);\n transition: margin 0.3s;\n}\n.ant-picker-panel-container .ant-picker-panels {\n display: inline-flex;\n flex-wrap: nowrap;\n direction: ltr;\n}\n.ant-picker-panel-container .ant-picker-panel {\n vertical-align: top;\n background: transparent;\n border-width: 0 0 1px 0;\n border-radius: 0;\n}\n.ant-picker-panel-container .ant-picker-panel .ant-picker-content,\n.ant-picker-panel-container .ant-picker-panel table {\n text-align: center;\n}\n.ant-picker-panel-container .ant-picker-panel-focused {\n border-color: #f0f0f0;\n}\n.ant-picker-compact-item:not(.ant-picker-compact-last-item):not(.ant-picker-compact-item-rtl) {\n margin-right: -1px;\n}\n.ant-picker-compact-item:not(.ant-picker-compact-last-item).ant-picker-compact-item-rtl {\n margin-left: -1px;\n}\n.ant-picker-compact-item:hover,\n.ant-picker-compact-item:focus,\n.ant-picker-compact-item:active {\n z-index: 2;\n}\n.ant-picker-compact-item.ant-picker-focused {\n z-index: 2;\n}\n.ant-picker-compact-item[disabled] {\n z-index: 0;\n}\n.ant-picker-compact-item:not(.ant-picker-compact-first-item):not(.ant-picker-compact-last-item).ant-picker {\n border-radius: 0;\n}\n.ant-picker-compact-item.ant-picker.ant-picker-compact-first-item:not(.ant-picker-compact-item-rtl) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.ant-picker-compact-item.ant-picker.ant-picker-compact-last-item:not(.ant-picker-compact-item-rtl) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.ant-picker-compact-item.ant-picker.ant-picker-compact-item-rtl.ant-picker-compact-first-item {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.ant-picker-compact-item.ant-picker.ant-picker-compact-item-rtl.ant-picker-compact-last-item {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.ant-picker-panel {\n display: inline-flex;\n flex-direction: column;\n text-align: center;\n background: #fff;\n border: 1px solid #f0f0f0;\n border-radius: 5px;\n outline: none;\n}\n.ant-picker-panel-focused {\n border-color: #5b5ce1;\n}\n.ant-picker-decade-panel,\n.ant-picker-year-panel,\n.ant-picker-quarter-panel,\n.ant-picker-month-panel,\n.ant-picker-week-panel,\n.ant-picker-date-panel,\n.ant-picker-time-panel {\n display: flex;\n flex-direction: column;\n width: 280px;\n}\n.ant-picker-header {\n display: flex;\n padding: 0 8px;\n color: rgba(0, 0, 0, 0.85);\n border-bottom: 1px solid #f0f0f0;\n}\n.ant-picker-header > * {\n flex: none;\n}\n.ant-picker-header button {\n padding: 0;\n color: rgba(0, 0, 0, 0.25);\n line-height: 40px;\n background: transparent;\n border: 0;\n cursor: pointer;\n transition: color 0.3s;\n}\n.ant-picker-header > button {\n min-width: 1.6em;\n font-size: 14px;\n}\n.ant-picker-header > button:hover {\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-picker-header-view {\n flex: auto;\n font-weight: 500;\n line-height: 40px;\n}\n.ant-picker-header-view button {\n color: inherit;\n font-weight: inherit;\n}\n.ant-picker-header-view button:not(:first-child) {\n margin-left: 8px;\n}\n.ant-picker-header-view button:hover {\n color: #5b5ce1;\n}\n.ant-picker-prev-icon,\n.ant-picker-next-icon,\n.ant-picker-super-prev-icon,\n.ant-picker-super-next-icon {\n position: relative;\n display: inline-block;\n width: 7px;\n height: 7px;\n}\n.ant-picker-prev-icon::before,\n.ant-picker-next-icon::before,\n.ant-picker-super-prev-icon::before,\n.ant-picker-super-next-icon::before {\n position: absolute;\n top: 0;\n left: 0;\n display: inline-block;\n width: 7px;\n height: 7px;\n border: 0 solid currentcolor;\n border-width: 1.5px 0 0 1.5px;\n content: '';\n}\n.ant-picker-super-prev-icon::after,\n.ant-picker-super-next-icon::after {\n position: absolute;\n top: 4px;\n left: 4px;\n display: inline-block;\n width: 7px;\n height: 7px;\n border: 0 solid currentcolor;\n border-width: 1.5px 0 0 1.5px;\n content: '';\n}\n.ant-picker-prev-icon,\n.ant-picker-super-prev-icon {\n transform: rotate(-45deg);\n}\n.ant-picker-next-icon,\n.ant-picker-super-next-icon {\n transform: rotate(135deg);\n}\n.ant-picker-content {\n width: 100%;\n table-layout: fixed;\n border-collapse: collapse;\n}\n.ant-picker-content th,\n.ant-picker-content td {\n position: relative;\n min-width: 24px;\n font-weight: 400;\n}\n.ant-picker-content th {\n height: 30px;\n color: rgba(0, 0, 0, 0.85);\n line-height: 30px;\n}\n.ant-picker-cell {\n padding: 3px 0;\n color: rgba(0, 0, 0, 0.25);\n cursor: pointer;\n}\n.ant-picker-cell-in-view {\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-picker-cell::before {\n position: absolute;\n top: 50%;\n right: 0;\n left: 0;\n z-index: 1;\n height: 24px;\n transform: translateY(-50%);\n transition: all 0.3s;\n content: '';\n}\n.ant-picker-cell .ant-picker-cell-inner {\n position: relative;\n z-index: 2;\n display: inline-block;\n min-width: 24px;\n height: 24px;\n line-height: 24px;\n border-radius: 5px;\n transition: background 0.3s, border 0.3s;\n}\n.ant-picker-cell:hover:not(.ant-picker-cell-in-view) .ant-picker-cell-inner,\n.ant-picker-cell:hover:not(.ant-picker-cell-selected):not(.ant-picker-cell-range-start):not(.ant-picker-cell-range-end):not(.ant-picker-cell-range-hover-start):not(.ant-picker-cell-range-hover-end) .ant-picker-cell-inner {\n background: #f5f5f5;\n}\n.ant-picker-cell-in-view.ant-picker-cell-today .ant-picker-cell-inner::before {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n border: 1px solid #5b5ce1;\n border-radius: 5px;\n content: '';\n}\n.ant-picker-cell-in-view.ant-picker-cell-in-range {\n position: relative;\n}\n.ant-picker-cell-in-view.ant-picker-cell-in-range::before {\n background: #f0f2ff;\n}\n.ant-picker-cell-in-view.ant-picker-cell-selected .ant-picker-cell-inner,\n.ant-picker-cell-in-view.ant-picker-cell-range-start .ant-picker-cell-inner,\n.ant-picker-cell-in-view.ant-picker-cell-range-end .ant-picker-cell-inner {\n color: #fff;\n background: #5b5ce1;\n}\n.ant-picker-cell-in-view.ant-picker-cell-range-start:not(.ant-picker-cell-range-start-single)::before,\n.ant-picker-cell-in-view.ant-picker-cell-range-end:not(.ant-picker-cell-range-end-single)::before {\n background: #f0f2ff;\n}\n.ant-picker-cell-in-view.ant-picker-cell-range-start::before {\n left: 50%;\n}\n.ant-picker-cell-in-view.ant-picker-cell-range-end::before {\n right: 50%;\n}\n.ant-picker-cell-in-view.ant-picker-cell-range-hover-start:not(.ant-picker-cell-in-range):not(.ant-picker-cell-range-start):not(.ant-picker-cell-range-end)::after,\n.ant-picker-cell-in-view.ant-picker-cell-range-hover-end:not(.ant-picker-cell-in-range):not(.ant-picker-cell-range-start):not(.ant-picker-cell-range-end)::after,\n.ant-picker-cell-in-view.ant-picker-cell-range-hover-start.ant-picker-cell-range-start-single::after,\n.ant-picker-cell-in-view.ant-picker-cell-range-hover-start.ant-picker-cell-range-start.ant-picker-cell-range-end.ant-picker-cell-range-end-near-hover::after,\n.ant-picker-cell-in-view.ant-picker-cell-range-hover-end.ant-picker-cell-range-start.ant-picker-cell-range-end.ant-picker-cell-range-start-near-hover::after,\n.ant-picker-cell-in-view.ant-picker-cell-range-hover-end.ant-picker-cell-range-end-single::after,\n.ant-picker-cell-in-view.ant-picker-cell-range-hover:not(.ant-picker-cell-in-range)::after {\n position: absolute;\n top: 50%;\n z-index: 0;\n height: 24px;\n border-top: 1px dashed #b1b2f1;\n border-bottom: 1px dashed #b1b2f1;\n transform: translateY(-50%);\n transition: all 0.3s;\n content: '';\n}\n.ant-picker-cell-range-hover-start::after,\n.ant-picker-cell-range-hover-end::after,\n.ant-picker-cell-range-hover::after {\n right: 0;\n left: 2px;\n}\n.ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover::before,\n.ant-picker-cell-in-view.ant-picker-cell-range-start.ant-picker-cell-range-hover::before,\n.ant-picker-cell-in-view.ant-picker-cell-range-end.ant-picker-cell-range-hover::before,\n.ant-picker-cell-in-view.ant-picker-cell-range-start:not(.ant-picker-cell-range-start-single).ant-picker-cell-range-hover-start::before,\n.ant-picker-cell-in-view.ant-picker-cell-range-end:not(.ant-picker-cell-range-end-single).ant-picker-cell-range-hover-end::before,\n.ant-picker-panel > :not(.ant-picker-date-panel) .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-start::before,\n.ant-picker-panel > :not(.ant-picker-date-panel) .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-end::before {\n background: #f2f2fd;\n}\n.ant-picker-cell-in-view.ant-picker-cell-range-start:not(.ant-picker-cell-range-start-single):not(.ant-picker-cell-range-end) .ant-picker-cell-inner {\n border-radius: 5px 0 0 5px;\n}\n.ant-picker-cell-in-view.ant-picker-cell-range-end:not(.ant-picker-cell-range-end-single):not(.ant-picker-cell-range-start) .ant-picker-cell-inner {\n border-radius: 0 5px 5px 0;\n}\n.ant-picker-date-panel .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-start .ant-picker-cell-inner::after,\n.ant-picker-date-panel .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-end .ant-picker-cell-inner::after {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: -1;\n background: #f2f2fd;\n transition: all 0.3s;\n content: '';\n}\n.ant-picker-date-panel .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-start .ant-picker-cell-inner::after {\n right: -6px;\n left: 0;\n}\n.ant-picker-date-panel .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-end .ant-picker-cell-inner::after {\n right: 0;\n left: -6px;\n}\n.ant-picker-cell-range-hover.ant-picker-cell-range-start::after {\n right: 50%;\n}\n.ant-picker-cell-range-hover.ant-picker-cell-range-end::after {\n left: 50%;\n}\ntr > .ant-picker-cell-in-view.ant-picker-cell-range-hover:first-child::after,\ntr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-end:first-child::after,\n.ant-picker-cell-in-view.ant-picker-cell-start.ant-picker-cell-range-hover-edge-start.ant-picker-cell-range-hover-edge-start-near-range::after,\n.ant-picker-cell-in-view.ant-picker-cell-range-hover-edge-start:not(.ant-picker-cell-range-hover-edge-start-near-range)::after,\n.ant-picker-cell-in-view.ant-picker-cell-range-hover-start::after {\n left: 6px;\n border-left: 1px dashed #b1b2f1;\n border-top-left-radius: 5px;\n border-bottom-left-radius: 5px;\n}\ntr > .ant-picker-cell-in-view.ant-picker-cell-range-hover:last-child::after,\ntr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::after,\n.ant-picker-cell-in-view.ant-picker-cell-end.ant-picker-cell-range-hover-edge-end.ant-picker-cell-range-hover-edge-end-near-range::after,\n.ant-picker-cell-in-view.ant-picker-cell-range-hover-edge-end:not(.ant-picker-cell-range-hover-edge-end-near-range)::after,\n.ant-picker-cell-in-view.ant-picker-cell-range-hover-end::after {\n right: 6px;\n border-right: 1px dashed #b1b2f1;\n border-top-right-radius: 5px;\n border-bottom-right-radius: 5px;\n}\n.ant-picker-cell-disabled {\n color: rgba(0, 0, 0, 0.25);\n pointer-events: none;\n}\n.ant-picker-cell-disabled .ant-picker-cell-inner {\n background: transparent;\n}\n.ant-picker-cell-disabled::before {\n background: rgba(0, 0, 0, 0.04);\n}\n.ant-picker-cell-disabled.ant-picker-cell-today .ant-picker-cell-inner::before {\n border-color: rgba(0, 0, 0, 0.25);\n}\n.ant-picker-decade-panel .ant-picker-content,\n.ant-picker-year-panel .ant-picker-content,\n.ant-picker-quarter-panel .ant-picker-content,\n.ant-picker-month-panel .ant-picker-content {\n height: 264px;\n}\n.ant-picker-decade-panel .ant-picker-cell-inner,\n.ant-picker-year-panel .ant-picker-cell-inner,\n.ant-picker-quarter-panel .ant-picker-cell-inner,\n.ant-picker-month-panel .ant-picker-cell-inner {\n padding: 0 8px;\n}\n.ant-picker-quarter-panel .ant-picker-content {\n height: 56px;\n}\n.ant-picker-footer {\n width: min-content;\n min-width: 100%;\n line-height: 38px;\n text-align: center;\n border-bottom: 1px solid transparent;\n}\n.ant-picker-panel .ant-picker-footer {\n border-top: 1px solid #f0f0f0;\n}\n.ant-picker-footer-extra {\n padding: 0 12px;\n line-height: 38px;\n text-align: left;\n}\n.ant-picker-footer-extra:not(:last-child) {\n border-bottom: 1px solid #f0f0f0;\n}\n.ant-picker-now {\n text-align: left;\n}\n.ant-picker-today-btn {\n color: #5b5ce1;\n}\n.ant-picker-today-btn:hover {\n color: #8588ed;\n}\n.ant-picker-today-btn:active {\n color: #4541ba;\n}\n.ant-picker-today-btn.ant-picker-today-btn-disabled {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n}\n.ant-picker-decade-panel .ant-picker-cell-inner {\n padding: 0 4px;\n}\n.ant-picker-decade-panel .ant-picker-cell::before {\n display: none;\n}\n.ant-picker-year-panel .ant-picker-body,\n.ant-picker-quarter-panel .ant-picker-body,\n.ant-picker-month-panel .ant-picker-body {\n padding: 0 8px;\n}\n.ant-picker-year-panel .ant-picker-cell-inner,\n.ant-picker-quarter-panel .ant-picker-cell-inner,\n.ant-picker-month-panel .ant-picker-cell-inner {\n width: 60px;\n}\n.ant-picker-year-panel .ant-picker-cell-range-hover-start::after,\n.ant-picker-quarter-panel .ant-picker-cell-range-hover-start::after,\n.ant-picker-month-panel .ant-picker-cell-range-hover-start::after {\n left: 14px;\n border-left: 1px dashed #b1b2f1;\n border-radius: 5px 0 0 5px;\n}\n.ant-picker-panel-rtl .ant-picker-year-panel .ant-picker-cell-range-hover-start::after,\n.ant-picker-panel-rtl .ant-picker-quarter-panel .ant-picker-cell-range-hover-start::after,\n.ant-picker-panel-rtl .ant-picker-month-panel .ant-picker-cell-range-hover-start::after {\n right: 14px;\n border-right: 1px dashed #b1b2f1;\n border-radius: 0 5px 5px 0;\n}\n.ant-picker-year-panel .ant-picker-cell-range-hover-end::after,\n.ant-picker-quarter-panel .ant-picker-cell-range-hover-end::after,\n.ant-picker-month-panel .ant-picker-cell-range-hover-end::after {\n right: 14px;\n border-right: 1px dashed #b1b2f1;\n border-radius: 0 5px 5px 0;\n}\n.ant-picker-panel-rtl .ant-picker-year-panel .ant-picker-cell-range-hover-end::after,\n.ant-picker-panel-rtl .ant-picker-quarter-panel .ant-picker-cell-range-hover-end::after,\n.ant-picker-panel-rtl .ant-picker-month-panel .ant-picker-cell-range-hover-end::after {\n left: 14px;\n border-left: 1px dashed #b1b2f1;\n border-radius: 5px 0 0 5px;\n}\n.ant-picker-week-panel .ant-picker-body {\n padding: 8px 12px;\n}\n.ant-picker-week-panel .ant-picker-cell:hover .ant-picker-cell-inner,\n.ant-picker-week-panel .ant-picker-cell-selected .ant-picker-cell-inner,\n.ant-picker-week-panel .ant-picker-cell .ant-picker-cell-inner {\n background: transparent !important;\n}\n.ant-picker-week-panel-row td {\n transition: background 0.3s;\n}\n.ant-picker-week-panel-row:hover td {\n background: #f5f5f5;\n}\n.ant-picker-week-panel-row-selected td,\n.ant-picker-week-panel-row-selected:hover td {\n background: #5b5ce1;\n}\n.ant-picker-week-panel-row-selected td.ant-picker-cell-week,\n.ant-picker-week-panel-row-selected:hover td.ant-picker-cell-week {\n color: rgba(255, 255, 255, 0.5);\n}\n.ant-picker-week-panel-row-selected td.ant-picker-cell-today .ant-picker-cell-inner::before,\n.ant-picker-week-panel-row-selected:hover td.ant-picker-cell-today .ant-picker-cell-inner::before {\n border-color: #fff;\n}\n.ant-picker-week-panel-row-selected td .ant-picker-cell-inner,\n.ant-picker-week-panel-row-selected:hover td .ant-picker-cell-inner {\n color: #fff;\n}\n.ant-picker-date-panel .ant-picker-body {\n padding: 8px 12px;\n}\n.ant-picker-date-panel .ant-picker-content {\n width: 252px;\n}\n.ant-picker-date-panel .ant-picker-content th {\n width: 36px;\n}\n.ant-picker-datetime-panel {\n display: flex;\n}\n.ant-picker-datetime-panel .ant-picker-time-panel {\n border-left: 1px solid #f0f0f0;\n}\n.ant-picker-datetime-panel .ant-picker-date-panel,\n.ant-picker-datetime-panel .ant-picker-time-panel {\n transition: opacity 0.3s;\n}\n.ant-picker-datetime-panel-active .ant-picker-date-panel,\n.ant-picker-datetime-panel-active .ant-picker-time-panel {\n opacity: 0.3;\n}\n.ant-picker-datetime-panel-active .ant-picker-date-panel-active,\n.ant-picker-datetime-panel-active .ant-picker-time-panel-active {\n opacity: 1;\n}\n.ant-picker-time-panel {\n width: auto;\n min-width: auto;\n}\n.ant-picker-time-panel .ant-picker-content {\n display: flex;\n flex: auto;\n height: 224px;\n}\n.ant-picker-time-panel-column {\n flex: 1 0 auto;\n width: 56px;\n margin: 0;\n padding: 0;\n overflow-y: hidden;\n text-align: left;\n list-style: none;\n transition: background 0.3s;\n}\n.ant-picker-time-panel-column::after {\n display: block;\n height: 196px;\n content: '';\n}\n.ant-picker-datetime-panel .ant-picker-time-panel-column::after {\n height: 198px;\n}\n.ant-picker-time-panel-column:not(:first-child) {\n border-left: 1px solid #f0f0f0;\n}\n.ant-picker-time-panel-column-active {\n background: rgba(240, 242, 255, 0.2);\n}\n.ant-picker-time-panel-column:hover {\n overflow-y: auto;\n}\n.ant-picker-time-panel-column > li {\n margin: 0;\n padding: 0;\n}\n.ant-picker-time-panel-column > li.ant-picker-time-panel-cell .ant-picker-time-panel-cell-inner {\n display: block;\n width: 100%;\n height: 28px;\n margin: 0;\n padding: 0 0 0 14px;\n color: rgba(0, 0, 0, 0.85);\n line-height: 28px;\n border-radius: 0;\n cursor: pointer;\n transition: background 0.3s;\n}\n.ant-picker-time-panel-column > li.ant-picker-time-panel-cell .ant-picker-time-panel-cell-inner:hover {\n background: #f5f5f5;\n}\n.ant-picker-time-panel-column > li.ant-picker-time-panel-cell-selected .ant-picker-time-panel-cell-inner {\n background: #f0f2ff;\n}\n.ant-picker-time-panel-column > li.ant-picker-time-panel-cell-disabled .ant-picker-time-panel-cell-inner {\n color: rgba(0, 0, 0, 0.25);\n background: transparent;\n cursor: not-allowed;\n}\n/* stylelint-disable selector-type-no-unknown,selector-no-vendor-prefix */\n_:-ms-fullscreen .ant-picker-range-wrapper .ant-picker-month-panel .ant-picker-cell,\n:root .ant-picker-range-wrapper .ant-picker-month-panel .ant-picker-cell,\n_:-ms-fullscreen .ant-picker-range-wrapper .ant-picker-year-panel .ant-picker-cell,\n:root .ant-picker-range-wrapper .ant-picker-year-panel .ant-picker-cell {\n padding: 21px 0;\n}\n.ant-picker-rtl {\n direction: rtl;\n}\n.ant-picker-rtl .ant-picker-suffix {\n margin-right: 4px;\n margin-left: 0;\n}\n.ant-picker-rtl .ant-picker-clear {\n right: auto;\n left: 0;\n}\n.ant-picker-rtl .ant-picker-separator {\n transform: rotate(180deg);\n}\n.ant-picker-panel-rtl .ant-picker-header-view button:not(:first-child) {\n margin-right: 8px;\n margin-left: 0;\n}\n.ant-picker-rtl.ant-picker-range .ant-picker-clear {\n right: auto;\n left: 11px;\n}\n.ant-picker-rtl.ant-picker-range .ant-picker-active-bar {\n margin-right: 11px;\n margin-left: 0;\n}\n.ant-picker-rtl.ant-picker-range.ant-picker-small .ant-picker-active-bar {\n margin-right: 7px;\n}\n.ant-picker-dropdown-rtl .ant-picker-ranges {\n text-align: right;\n}\n.ant-picker-dropdown-rtl .ant-picker-ranges .ant-picker-ok {\n float: left;\n margin-right: 8px;\n margin-left: 0;\n}\n.ant-picker-panel-rtl {\n direction: rtl;\n}\n.ant-picker-panel-rtl .ant-picker-prev-icon,\n.ant-picker-panel-rtl .ant-picker-super-prev-icon {\n transform: rotate(135deg);\n}\n.ant-picker-panel-rtl .ant-picker-next-icon,\n.ant-picker-panel-rtl .ant-picker-super-next-icon {\n transform: rotate(-45deg);\n}\n.ant-picker-cell .ant-picker-cell-inner {\n position: relative;\n z-index: 2;\n display: inline-block;\n min-width: 24px;\n height: 24px;\n line-height: 24px;\n border-radius: 5px;\n transition: background 0.3s, border 0.3s;\n}\n.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-start::before {\n right: 50%;\n left: 0;\n}\n.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-end::before {\n right: 0;\n left: 50%;\n}\n.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-start.ant-picker-cell-range-end::before {\n right: 50%;\n left: 50%;\n}\n.ant-picker-panel-rtl .ant-picker-date-panel .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-start .ant-picker-cell-inner::after {\n right: 0;\n left: -6px;\n}\n.ant-picker-panel-rtl .ant-picker-date-panel .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-end .ant-picker-cell-inner::after {\n right: -6px;\n left: 0;\n}\n.ant-picker-panel-rtl .ant-picker-cell-range-hover.ant-picker-cell-range-start::after {\n right: 0;\n left: 50%;\n}\n.ant-picker-panel-rtl .ant-picker-cell-range-hover.ant-picker-cell-range-end::after {\n right: 50%;\n left: 0;\n}\n.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-start:not(.ant-picker-cell-range-start-single):not(.ant-picker-cell-range-end) .ant-picker-cell-inner {\n border-radius: 0 5px 5px 0;\n}\n.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-end:not(.ant-picker-cell-range-end-single):not(.ant-picker-cell-range-start) .ant-picker-cell-inner {\n border-radius: 5px 0 0 5px;\n}\n.ant-picker-panel-rtl tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover:not(.ant-picker-cell-selected):first-child::after,\n.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-start.ant-picker-cell-range-hover-edge-start.ant-picker-cell-range-hover-edge-start-near-range::after,\n.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-hover-edge-start:not(.ant-picker-cell-range-hover-edge-start-near-range)::after,\n.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-hover-start::after {\n right: 6px;\n left: 0;\n border-right: 1px dashed #b1b2f1;\n border-left: none;\n border-radius: 0 5px 5px 0;\n}\n.ant-picker-panel-rtl tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover:not(.ant-picker-cell-selected):last-child::after,\n.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-end.ant-picker-cell-range-hover-edge-end.ant-picker-cell-range-hover-edge-end-near-range::after,\n.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-hover-edge-end:not(.ant-picker-cell-range-hover-edge-end-near-range)::after,\n.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-hover-end::after {\n right: 0;\n left: 6px;\n border-right: none;\n border-left: 1px dashed #b1b2f1;\n border-radius: 5px 0 0 5px;\n}\n.ant-picker-panel-rtl tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::after,\n.ant-picker-panel-rtl tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-end:first-child::after,\n.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-start.ant-picker-cell-range-hover-edge-start:not(.ant-picker-cell-range-hover)::after,\n.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-start.ant-picker-cell-range-hover-end.ant-picker-cell-range-hover-edge-start:not(.ant-picker-cell-range-hover)::after,\n.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-end.ant-picker-cell-range-hover-start.ant-picker-cell-range-hover-edge-end:not(.ant-picker-cell-range-hover)::after,\n.ant-picker-panel-rtl tr > .ant-picker-cell-in-view.ant-picker-cell-start.ant-picker-cell-range-hover.ant-picker-cell-range-hover-edge-start:last-child::after,\n.ant-picker-panel-rtl tr > .ant-picker-cell-in-view.ant-picker-cell-end.ant-picker-cell-range-hover.ant-picker-cell-range-hover-edge-end:first-child::after {\n right: 6px;\n left: 6px;\n border-right: 1px dashed #b1b2f1;\n border-left: 1px dashed #b1b2f1;\n border-radius: 5px;\n}\n.ant-picker-dropdown-rtl .ant-picker-footer-extra {\n direction: rtl;\n text-align: right;\n}\n.ant-picker-panel-rtl .ant-picker-time-panel {\n direction: ltr;\n}\n.ant-descriptions-header {\n display: flex;\n align-items: center;\n margin-bottom: 20px;\n}\n.ant-descriptions-title {\n flex: auto;\n overflow: hidden;\n color: rgba(0, 0, 0, 0.85);\n font-weight: bold;\n font-size: 16px;\n line-height: 1.5715;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.ant-descriptions-extra {\n margin-left: auto;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n}\n.ant-descriptions-view {\n width: 100%;\n border-radius: 5px;\n}\n.ant-descriptions-view table {\n width: 100%;\n table-layout: fixed;\n}\n.ant-descriptions-row > th,\n.ant-descriptions-row > td {\n padding-bottom: 16px;\n}\n.ant-descriptions-row:last-child {\n border-bottom: none;\n}\n.ant-descriptions-item-label {\n color: rgba(0, 0, 0, 0.85);\n font-weight: normal;\n font-size: 14px;\n line-height: 1.5715;\n text-align: start;\n}\n.ant-descriptions-item-label::after {\n content: ':';\n position: relative;\n top: -0.5px;\n margin: 0 8px 0 2px;\n}\n.ant-descriptions-item-label.ant-descriptions-item-no-colon::after {\n content: ' ';\n}\n.ant-descriptions-item-no-label::after {\n margin: 0;\n content: '';\n}\n.ant-descriptions-item-content {\n display: table-cell;\n flex: 1;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n line-height: 1.5715;\n word-break: break-word;\n overflow-wrap: break-word;\n}\n.ant-descriptions-item {\n padding-bottom: 0;\n vertical-align: top;\n}\n.ant-descriptions-item-container {\n display: flex;\n}\n.ant-descriptions-item-container .ant-descriptions-item-label,\n.ant-descriptions-item-container .ant-descriptions-item-content {\n display: inline-flex;\n align-items: baseline;\n}\n.ant-descriptions-middle .ant-descriptions-row > th,\n.ant-descriptions-middle .ant-descriptions-row > td {\n padding-bottom: 12px;\n}\n.ant-descriptions-small .ant-descriptions-row > th,\n.ant-descriptions-small .ant-descriptions-row > td {\n padding-bottom: 8px;\n}\n.ant-descriptions-bordered .ant-descriptions-view {\n border: 1px solid #f0f0f0;\n}\n.ant-descriptions-bordered .ant-descriptions-view > table {\n table-layout: auto;\n border-collapse: collapse;\n}\n.ant-descriptions-bordered .ant-descriptions-item-label,\n.ant-descriptions-bordered .ant-descriptions-item-content {\n padding: 16px 24px;\n border-right: 1px solid #f0f0f0;\n}\n.ant-descriptions-bordered .ant-descriptions-item-label:last-child,\n.ant-descriptions-bordered .ant-descriptions-item-content:last-child {\n border-right: none;\n}\n.ant-descriptions-bordered .ant-descriptions-item-label {\n background-color: #fafafa;\n}\n.ant-descriptions-bordered .ant-descriptions-item-label::after {\n display: none;\n}\n.ant-descriptions-bordered .ant-descriptions-row {\n border-bottom: 1px solid #f0f0f0;\n}\n.ant-descriptions-bordered .ant-descriptions-row:last-child {\n border-bottom: none;\n}\n.ant-descriptions-bordered.ant-descriptions-middle .ant-descriptions-item-label,\n.ant-descriptions-bordered.ant-descriptions-middle .ant-descriptions-item-content {\n padding: 12px 24px;\n}\n.ant-descriptions-bordered.ant-descriptions-small .ant-descriptions-item-label,\n.ant-descriptions-bordered.ant-descriptions-small .ant-descriptions-item-content {\n padding: 8px 16px;\n}\n.ant-descriptions-rtl {\n direction: rtl;\n}\n.ant-descriptions-rtl .ant-descriptions-item-label::after {\n margin: 0 2px 0 8px;\n}\n.ant-descriptions-rtl.ant-descriptions-bordered .ant-descriptions-item-label,\n.ant-descriptions-rtl.ant-descriptions-bordered .ant-descriptions-item-content {\n border-right: none;\n border-left: 1px solid #f0f0f0;\n}\n.ant-descriptions-rtl.ant-descriptions-bordered .ant-descriptions-item-label:last-child,\n.ant-descriptions-rtl.ant-descriptions-bordered .ant-descriptions-item-content:last-child {\n border-left: none;\n}\n.ant-divider {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n border-top: 1px solid rgba(0, 0, 0, 0.06);\n}\n.ant-divider-vertical {\n position: relative;\n top: -0.06em;\n display: inline-block;\n height: 0.9em;\n margin: 0 8px;\n vertical-align: middle;\n border-top: 0;\n border-left: 1px solid rgba(0, 0, 0, 0.06);\n}\n.ant-divider-horizontal {\n display: flex;\n clear: both;\n width: 100%;\n min-width: 100%;\n margin: 24px 0;\n}\n.ant-divider-horizontal.ant-divider-with-text {\n display: flex;\n margin: 16px 0;\n color: rgba(0, 0, 0, 0.85);\n font-weight: 500;\n font-size: 16px;\n white-space: nowrap;\n text-align: center;\n border-top: 0;\n border-top-color: rgba(0, 0, 0, 0.06);\n}\n.ant-divider-horizontal.ant-divider-with-text::before,\n.ant-divider-horizontal.ant-divider-with-text::after {\n position: relative;\n top: 50%;\n width: 50%;\n border-top: 1px solid transparent;\n border-top-color: inherit;\n border-bottom: 0;\n transform: translateY(50%);\n content: '';\n}\n.ant-divider-horizontal.ant-divider-with-text-left::before {\n top: 50%;\n width: 5%;\n}\n.ant-divider-horizontal.ant-divider-with-text-left::after {\n top: 50%;\n width: 95%;\n}\n.ant-divider-horizontal.ant-divider-with-text-right::before {\n top: 50%;\n width: 95%;\n}\n.ant-divider-horizontal.ant-divider-with-text-right::after {\n top: 50%;\n width: 5%;\n}\n.ant-divider-inner-text {\n display: inline-block;\n padding: 0 1em;\n}\n.ant-divider-dashed {\n background: none;\n border-color: rgba(0, 0, 0, 0.06);\n border-style: dashed;\n border-width: 1px 0 0;\n}\n.ant-divider-horizontal.ant-divider-with-text.ant-divider-dashed::before,\n.ant-divider-horizontal.ant-divider-with-text.ant-divider-dashed::after {\n border-style: dashed none none;\n}\n.ant-divider-vertical.ant-divider-dashed {\n border-width: 0 0 0 1px;\n}\n.ant-divider-plain.ant-divider-with-text {\n color: rgba(0, 0, 0, 0.85);\n font-weight: normal;\n font-size: 14px;\n}\n.ant-divider-horizontal.ant-divider-with-text-left.ant-divider-no-default-orientation-margin-left::before {\n width: 0;\n}\n.ant-divider-horizontal.ant-divider-with-text-left.ant-divider-no-default-orientation-margin-left::after {\n width: 100%;\n}\n.ant-divider-horizontal.ant-divider-with-text-left.ant-divider-no-default-orientation-margin-left .ant-divider-inner-text {\n padding-left: 0;\n}\n.ant-divider-horizontal.ant-divider-with-text-right.ant-divider-no-default-orientation-margin-right::before {\n width: 100%;\n}\n.ant-divider-horizontal.ant-divider-with-text-right.ant-divider-no-default-orientation-margin-right::after {\n width: 0;\n}\n.ant-divider-horizontal.ant-divider-with-text-right.ant-divider-no-default-orientation-margin-right .ant-divider-inner-text {\n padding-right: 0;\n}\n.ant-divider-rtl {\n direction: rtl;\n}\n.ant-divider-rtl.ant-divider-horizontal.ant-divider-with-text-left::before {\n width: 95%;\n}\n.ant-divider-rtl.ant-divider-horizontal.ant-divider-with-text-left::after {\n width: 5%;\n}\n.ant-divider-rtl.ant-divider-horizontal.ant-divider-with-text-right::before {\n width: 5%;\n}\n.ant-divider-rtl.ant-divider-horizontal.ant-divider-with-text-right::after {\n width: 95%;\n}\n.ant-drawer {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1000;\n pointer-events: none;\n}\n.ant-drawer-inline {\n position: absolute;\n}\n.ant-drawer-mask {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1000;\n background: rgba(0, 0, 0, 0.45);\n pointer-events: auto;\n}\n.ant-drawer-content-wrapper {\n position: absolute;\n z-index: 1000;\n transition: all 0.3s;\n}\n.ant-drawer-content-wrapper-hidden {\n display: none;\n}\n.ant-drawer-left > .ant-drawer-content-wrapper {\n top: 0;\n bottom: 0;\n left: 0;\n box-shadow: 6px 0 16px -8px rgba(0, 0, 0, 0.08), 9px 0 28px 0 rgba(0, 0, 0, 0.05), 12px 0 48px 16px rgba(0, 0, 0, 0.03);\n}\n.ant-drawer-right > .ant-drawer-content-wrapper {\n top: 0;\n right: 0;\n bottom: 0;\n box-shadow: -6px 0 16px -8px rgba(0, 0, 0, 0.08), -9px 0 28px 0 rgba(0, 0, 0, 0.05), -12px 0 48px 16px rgba(0, 0, 0, 0.03);\n}\n.ant-drawer-top > .ant-drawer-content-wrapper {\n top: 0;\n right: 0;\n left: 0;\n box-shadow: 0 6px 16px -8px rgba(0, 0, 0, 0.08), 0 9px 28px 0 rgba(0, 0, 0, 0.05), 0 12px 48px 16px rgba(0, 0, 0, 0.03);\n}\n.ant-drawer-bottom > .ant-drawer-content-wrapper {\n right: 0;\n bottom: 0;\n left: 0;\n box-shadow: 0 -6px 16px -8px rgba(0, 0, 0, 0.08), 0 -9px 28px 0 rgba(0, 0, 0, 0.05), 0 -12px 48px 16px rgba(0, 0, 0, 0.03);\n}\n.ant-drawer-content {\n width: 100%;\n height: 100%;\n overflow: auto;\n background: #fff;\n pointer-events: auto;\n}\n.ant-drawer-wrapper-body {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n}\n.ant-drawer-header {\n display: flex;\n flex: 0;\n align-items: center;\n padding: 16px 24px;\n font-size: 16px;\n line-height: 22px;\n border-bottom: 1px solid #f0f0f0;\n}\n.ant-drawer-header-title {\n display: flex;\n flex: 1;\n align-items: center;\n min-width: 0;\n min-height: 0;\n}\n.ant-drawer-extra {\n flex: 0;\n}\n.ant-drawer-close {\n display: inline-block;\n margin-right: 12px;\n color: rgba(0, 0, 0, 0.45);\n font-weight: 700;\n font-size: 16px;\n font-style: normal;\n line-height: 1;\n text-align: center;\n text-transform: none;\n text-decoration: none;\n background: transparent;\n border: 0;\n outline: 0;\n cursor: pointer;\n transition: color 0.3s;\n text-rendering: auto;\n}\n.ant-drawer-close:focus,\n.ant-drawer-close:hover {\n color: rgba(0, 0, 0, 0.75);\n text-decoration: none;\n}\n.ant-drawer-title {\n flex: 1;\n margin: 0;\n color: rgba(0, 0, 0, 0.85);\n font-weight: 500;\n font-size: 16px;\n line-height: 22px;\n}\n.ant-drawer-body {\n flex: 1;\n min-width: 0;\n min-height: 0;\n padding: 24px;\n overflow: auto;\n}\n.ant-drawer-footer {\n flex-shrink: 0;\n padding: 10px 16px;\n border-top: 1px solid #f0f0f0;\n}\n.panel-motion-enter-start,\n.panel-motion-appear-start,\n.panel-motion-leave-start {\n transition: none;\n}\n.panel-motion-enter-active,\n.panel-motion-appear-active,\n.panel-motion-leave-active {\n transition: all 0.3s;\n}\n.ant-drawer-mask-motion-enter-active,\n.ant-drawer-mask-motion-appear-active,\n.ant-drawer-mask-motion-leave-active {\n transition: all 0.3s;\n}\n.ant-drawer-mask-motion-enter,\n.ant-drawer-mask-motion-appear {\n opacity: 0;\n}\n.ant-drawer-mask-motion-enter-active,\n.ant-drawer-mask-motion-appear-active {\n opacity: 1;\n}\n.ant-drawer-mask-motion-leave {\n opacity: 1;\n}\n.ant-drawer-mask-motion-leave-active {\n opacity: 0;\n}\n.ant-drawer-panel-motion-left-enter-start,\n.ant-drawer-panel-motion-left-appear-start,\n.ant-drawer-panel-motion-left-leave-start {\n transition: none;\n}\n.ant-drawer-panel-motion-left-enter-active,\n.ant-drawer-panel-motion-left-appear-active,\n.ant-drawer-panel-motion-left-leave-active {\n transition: all 0.3s;\n}\n.ant-drawer-panel-motion-left-enter-start,\n.ant-drawer-panel-motion-left-appear-start {\n transform: translateX(-100%) !important;\n}\n.ant-drawer-panel-motion-left-enter-active,\n.ant-drawer-panel-motion-left-appear-active {\n transform: translateX(0);\n}\n.ant-drawer-panel-motion-left-leave {\n transform: translateX(0);\n}\n.ant-drawer-panel-motion-left-leave-active {\n transform: translateX(-100%);\n}\n.ant-drawer-panel-motion-right-enter-start,\n.ant-drawer-panel-motion-right-appear-start,\n.ant-drawer-panel-motion-right-leave-start {\n transition: none;\n}\n.ant-drawer-panel-motion-right-enter-active,\n.ant-drawer-panel-motion-right-appear-active,\n.ant-drawer-panel-motion-right-leave-active {\n transition: all 0.3s;\n}\n.ant-drawer-panel-motion-right-enter-start,\n.ant-drawer-panel-motion-right-appear-start {\n transform: translateX(100%) !important;\n}\n.ant-drawer-panel-motion-right-enter-active,\n.ant-drawer-panel-motion-right-appear-active {\n transform: translateX(0);\n}\n.ant-drawer-panel-motion-right-leave {\n transform: translateX(0);\n}\n.ant-drawer-panel-motion-right-leave-active {\n transform: translateX(100%);\n}\n.ant-drawer-panel-motion-top-enter-start,\n.ant-drawer-panel-motion-top-appear-start,\n.ant-drawer-panel-motion-top-leave-start {\n transition: none;\n}\n.ant-drawer-panel-motion-top-enter-active,\n.ant-drawer-panel-motion-top-appear-active,\n.ant-drawer-panel-motion-top-leave-active {\n transition: all 0.3s;\n}\n.ant-drawer-panel-motion-top-enter-start,\n.ant-drawer-panel-motion-top-appear-start {\n transform: translateY(-100%) !important;\n}\n.ant-drawer-panel-motion-top-enter-active,\n.ant-drawer-panel-motion-top-appear-active {\n transform: translateY(0);\n}\n.ant-drawer-panel-motion-top-leave {\n transform: translateY(0);\n}\n.ant-drawer-panel-motion-top-leave-active {\n transform: translateY(-100%);\n}\n.ant-drawer-panel-motion-bottom-enter-start,\n.ant-drawer-panel-motion-bottom-appear-start,\n.ant-drawer-panel-motion-bottom-leave-start {\n transition: none;\n}\n.ant-drawer-panel-motion-bottom-enter-active,\n.ant-drawer-panel-motion-bottom-appear-active,\n.ant-drawer-panel-motion-bottom-leave-active {\n transition: all 0.3s;\n}\n.ant-drawer-panel-motion-bottom-enter-start,\n.ant-drawer-panel-motion-bottom-appear-start {\n transform: translateY(100%) !important;\n}\n.ant-drawer-panel-motion-bottom-enter-active,\n.ant-drawer-panel-motion-bottom-appear-active {\n transform: translateY(0);\n}\n.ant-drawer-panel-motion-bottom-leave {\n transform: translateY(0);\n}\n.ant-drawer-panel-motion-bottom-leave-active {\n transform: translateY(100%);\n}\n.ant-drawer-rtl {\n direction: rtl;\n}\n.ant-drawer-rtl .ant-drawer-close {\n margin-right: 0;\n margin-left: 12px;\n}\n.ant-dropdown-menu-item.ant-dropdown-menu-item-danger {\n color: #ff4d4f;\n}\n.ant-dropdown-menu-item.ant-dropdown-menu-item-danger:hover {\n color: #fff;\n background-color: #ff4d4f;\n}\n.ant-dropdown {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: absolute;\n top: -9999px;\n left: -9999px;\n z-index: 1050;\n display: block;\n}\n.ant-dropdown::before {\n position: absolute;\n top: -4px;\n right: 0;\n bottom: -4px;\n left: -7px;\n z-index: -9999;\n opacity: 0.0001;\n content: ' ';\n}\n.ant-dropdown-wrap {\n position: relative;\n}\n.ant-dropdown-wrap .ant-btn > .anticon-down {\n font-size: 10px;\n}\n.ant-dropdown-wrap .anticon-down::before {\n transition: transform 0.2s;\n}\n.ant-dropdown-wrap-open .anticon-down::before {\n transform: rotate(180deg);\n}\n.ant-dropdown-hidden,\n.ant-dropdown-menu-hidden,\n.ant-dropdown-menu-submenu-hidden {\n display: none;\n}\n.ant-dropdown-show-arrow.ant-dropdown-placement-topLeft,\n.ant-dropdown-show-arrow.ant-dropdown-placement-top,\n.ant-dropdown-show-arrow.ant-dropdown-placement-topRight {\n padding-bottom: 15.3137085px;\n}\n.ant-dropdown-show-arrow.ant-dropdown-placement-bottomLeft,\n.ant-dropdown-show-arrow.ant-dropdown-placement-bottom,\n.ant-dropdown-show-arrow.ant-dropdown-placement-bottomRight {\n padding-top: 15.3137085px;\n}\n.ant-dropdown-arrow {\n position: absolute;\n z-index: 1;\n display: block;\n width: 11.3137085px;\n height: 11.3137085px;\n border-radius: 0 0 2px;\n pointer-events: none;\n}\n.ant-dropdown-arrow::before {\n position: absolute;\n top: -11.3137085px;\n left: -11.3137085px;\n width: 33.9411255px;\n height: 33.9411255px;\n background: #fff;\n background-repeat: no-repeat;\n background-position: -10px -10px;\n content: '';\n clip-path: inset(33% 33%);\n clip-path: path('M 9.849242404917499 24.091883092036785 A 5 5 0 0 1 13.384776310850237 22.627416997969522 L 20.627416997969522 22.627416997969522 A 2 2 0 0 0 22.627416997969522 20.627416997969522 L 22.627416997969522 13.384776310850237 A 5 5 0 0 1 24.091883092036785 9.849242404917499 L 23.091883092036785 9.849242404917499 L 9.849242404917499 23.091883092036785 Z');\n}\n.ant-dropdown-placement-top > .ant-dropdown-arrow,\n.ant-dropdown-placement-topLeft > .ant-dropdown-arrow,\n.ant-dropdown-placement-topRight > .ant-dropdown-arrow {\n bottom: 10px;\n box-shadow: 3px 3px 7px -3px rgba(0, 0, 0, 0.1);\n transform: rotate(45deg);\n}\n.ant-dropdown-placement-top > .ant-dropdown-arrow {\n left: 50%;\n transform: translateX(-50%) rotate(45deg);\n}\n.ant-dropdown-placement-topLeft > .ant-dropdown-arrow {\n left: 16px;\n}\n.ant-dropdown-placement-topRight > .ant-dropdown-arrow {\n right: 16px;\n}\n.ant-dropdown-placement-bottom > .ant-dropdown-arrow,\n.ant-dropdown-placement-bottomLeft > .ant-dropdown-arrow,\n.ant-dropdown-placement-bottomRight > .ant-dropdown-arrow {\n top: 9.41421356px;\n box-shadow: 2px 2px 5px -2px rgba(0, 0, 0, 0.1);\n transform: rotate(-135deg) translateY(-0.5px);\n}\n.ant-dropdown-placement-bottom > .ant-dropdown-arrow {\n left: 50%;\n transform: translateX(-50%) rotate(-135deg) translateY(-0.5px);\n}\n.ant-dropdown-placement-bottomLeft > .ant-dropdown-arrow {\n left: 16px;\n}\n.ant-dropdown-placement-bottomRight > .ant-dropdown-arrow {\n right: 16px;\n}\n.ant-dropdown-menu {\n position: relative;\n margin: 0;\n padding: 4px 0;\n text-align: left;\n list-style-type: none;\n background-color: #fff;\n background-clip: padding-box;\n border-radius: 5px;\n outline: none;\n box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05);\n}\n.ant-dropdown-menu-item-group-title {\n padding: 5px 12px;\n color: rgba(0, 0, 0, 0.45);\n transition: all 0.3s;\n}\n.ant-dropdown-menu-submenu-popup {\n position: absolute;\n z-index: 1050;\n background: transparent;\n box-shadow: none;\n transform-origin: 0 0;\n}\n.ant-dropdown-menu-submenu-popup ul,\n.ant-dropdown-menu-submenu-popup li {\n list-style: none;\n}\n.ant-dropdown-menu-submenu-popup ul {\n margin-right: 0.3em;\n margin-left: 0.3em;\n}\n.ant-dropdown-menu-item {\n position: relative;\n display: flex;\n align-items: center;\n}\n.ant-dropdown-menu-item-icon {\n min-width: 12px;\n margin-right: 8px;\n font-size: 12px;\n}\n.ant-dropdown-menu-title-content {\n flex: auto;\n}\n.ant-dropdown-menu-title-content > a {\n color: inherit;\n transition: all 0.3s;\n}\n.ant-dropdown-menu-title-content > a:hover {\n color: inherit;\n}\n.ant-dropdown-menu-title-content > a::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n content: '';\n}\n.ant-dropdown-menu-item,\n.ant-dropdown-menu-submenu-title {\n clear: both;\n margin: 0;\n padding: 5px 12px;\n color: rgba(0, 0, 0, 0.85);\n font-weight: normal;\n font-size: 14px;\n line-height: 22px;\n cursor: pointer;\n transition: all 0.3s;\n}\n.ant-dropdown-menu-item-selected,\n.ant-dropdown-menu-submenu-title-selected {\n color: #5b5ce1;\n background-color: #f0f2ff;\n}\n.ant-dropdown-menu-item:hover,\n.ant-dropdown-menu-submenu-title:hover,\n.ant-dropdown-menu-item.ant-dropdown-menu-item-active,\n.ant-dropdown-menu-item.ant-dropdown-menu-submenu-title-active,\n.ant-dropdown-menu-submenu-title.ant-dropdown-menu-item-active,\n.ant-dropdown-menu-submenu-title.ant-dropdown-menu-submenu-title-active {\n background-color: #f5f5f5;\n}\n.ant-dropdown-menu-item-disabled,\n.ant-dropdown-menu-submenu-title-disabled {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n}\n.ant-dropdown-menu-item-disabled:hover,\n.ant-dropdown-menu-submenu-title-disabled:hover {\n color: rgba(0, 0, 0, 0.25);\n background-color: #fff;\n cursor: not-allowed;\n}\n.ant-dropdown-menu-item-disabled a,\n.ant-dropdown-menu-submenu-title-disabled a {\n pointer-events: none;\n}\n.ant-dropdown-menu-item-divider,\n.ant-dropdown-menu-submenu-title-divider {\n height: 1px;\n margin: 4px 0;\n overflow: hidden;\n line-height: 0;\n background-color: #f0f0f0;\n}\n.ant-dropdown-menu-item .ant-dropdown-menu-submenu-expand-icon,\n.ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-expand-icon {\n position: absolute;\n right: 8px;\n}\n.ant-dropdown-menu-item .ant-dropdown-menu-submenu-expand-icon .ant-dropdown-menu-submenu-arrow-icon,\n.ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-expand-icon .ant-dropdown-menu-submenu-arrow-icon {\n margin-right: 0 !important;\n color: rgba(0, 0, 0, 0.45);\n font-size: 10px;\n font-style: normal;\n}\n.ant-dropdown-menu-item-group-list {\n margin: 0 8px;\n padding: 0;\n list-style: none;\n}\n.ant-dropdown-menu-submenu-title {\n padding-right: 24px;\n}\n.ant-dropdown-menu-submenu-vertical {\n position: relative;\n}\n.ant-dropdown-menu-submenu-vertical > .ant-dropdown-menu {\n position: absolute;\n top: 0;\n left: 100%;\n min-width: 100%;\n margin-left: 4px;\n transform-origin: 0 0;\n}\n.ant-dropdown-menu-submenu.ant-dropdown-menu-submenu-disabled .ant-dropdown-menu-submenu-title,\n.ant-dropdown-menu-submenu.ant-dropdown-menu-submenu-disabled .ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-arrow-icon {\n color: rgba(0, 0, 0, 0.25);\n background-color: #fff;\n cursor: not-allowed;\n}\n.ant-dropdown-menu-submenu-selected .ant-dropdown-menu-submenu-title {\n color: #5b5ce1;\n}\n.ant-dropdown.ant-slide-down-enter.ant-slide-down-enter-active.ant-dropdown-placement-bottomLeft,\n.ant-dropdown.ant-slide-down-appear.ant-slide-down-appear-active.ant-dropdown-placement-bottomLeft,\n.ant-dropdown.ant-slide-down-enter.ant-slide-down-enter-active.ant-dropdown-placement-bottom,\n.ant-dropdown.ant-slide-down-appear.ant-slide-down-appear-active.ant-dropdown-placement-bottom,\n.ant-dropdown.ant-slide-down-enter.ant-slide-down-enter-active.ant-dropdown-placement-bottomRight,\n.ant-dropdown.ant-slide-down-appear.ant-slide-down-appear-active.ant-dropdown-placement-bottomRight {\n animation-name: antSlideUpIn;\n}\n.ant-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-dropdown-placement-topLeft,\n.ant-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-dropdown-placement-topLeft,\n.ant-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-dropdown-placement-top,\n.ant-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-dropdown-placement-top,\n.ant-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-dropdown-placement-topRight,\n.ant-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-dropdown-placement-topRight {\n animation-name: antSlideDownIn;\n}\n.ant-dropdown.ant-slide-down-leave.ant-slide-down-leave-active.ant-dropdown-placement-bottomLeft,\n.ant-dropdown.ant-slide-down-leave.ant-slide-down-leave-active.ant-dropdown-placement-bottom,\n.ant-dropdown.ant-slide-down-leave.ant-slide-down-leave-active.ant-dropdown-placement-bottomRight {\n animation-name: antSlideUpOut;\n}\n.ant-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-dropdown-placement-topLeft,\n.ant-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-dropdown-placement-top,\n.ant-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-dropdown-placement-topRight {\n animation-name: antSlideDownOut;\n}\n.ant-dropdown-trigger > .anticon.anticon-down,\n.ant-dropdown-link > .anticon.anticon-down,\n.ant-dropdown-button > .anticon.anticon-down {\n font-size: 10px;\n vertical-align: baseline;\n}\n.ant-dropdown-button {\n white-space: nowrap;\n}\n.ant-dropdown-button.ant-btn-group > .ant-btn-loading,\n.ant-dropdown-button.ant-btn-group > .ant-btn-loading + .ant-btn {\n cursor: default;\n pointer-events: none;\n}\n.ant-dropdown-button.ant-btn-group > .ant-btn-loading + .ant-btn::before {\n display: block;\n}\n.ant-dropdown-button.ant-btn-group > .ant-btn:last-child:not(:first-child):not(.ant-btn-icon-only) {\n padding-right: 8px;\n padding-left: 8px;\n}\n.ant-dropdown-menu-dark,\n.ant-dropdown-menu-dark .ant-dropdown-menu {\n background: #001529;\n}\n.ant-dropdown-menu-dark .ant-dropdown-menu-item,\n.ant-dropdown-menu-dark .ant-dropdown-menu-submenu-title,\n.ant-dropdown-menu-dark .ant-dropdown-menu-item > a,\n.ant-dropdown-menu-dark .ant-dropdown-menu-item > .anticon + span > a {\n color: rgba(255, 255, 255, 0.65);\n}\n.ant-dropdown-menu-dark .ant-dropdown-menu-item .ant-dropdown-menu-submenu-arrow::after,\n.ant-dropdown-menu-dark .ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-arrow::after,\n.ant-dropdown-menu-dark .ant-dropdown-menu-item > a .ant-dropdown-menu-submenu-arrow::after,\n.ant-dropdown-menu-dark .ant-dropdown-menu-item > .anticon + span > a .ant-dropdown-menu-submenu-arrow::after {\n color: rgba(255, 255, 255, 0.65);\n}\n.ant-dropdown-menu-dark .ant-dropdown-menu-item:hover,\n.ant-dropdown-menu-dark .ant-dropdown-menu-submenu-title:hover,\n.ant-dropdown-menu-dark .ant-dropdown-menu-item > a:hover,\n.ant-dropdown-menu-dark .ant-dropdown-menu-item > .anticon + span > a:hover {\n color: #fff;\n background: transparent;\n}\n.ant-dropdown-menu-dark .ant-dropdown-menu-item-selected,\n.ant-dropdown-menu-dark .ant-dropdown-menu-item-selected:hover,\n.ant-dropdown-menu-dark .ant-dropdown-menu-item-selected > a {\n color: #fff;\n background: #5b5ce1;\n}\n.ant-dropdown-rtl {\n direction: rtl;\n}\n.ant-dropdown-rtl.ant-dropdown::before {\n right: -7px;\n left: 0;\n}\n.ant-dropdown-menu.ant-dropdown-menu-rtl {\n direction: rtl;\n text-align: right;\n}\n.ant-dropdown-rtl .ant-dropdown-menu-item-group-title,\n.ant-dropdown-menu-submenu-rtl .ant-dropdown-menu-item-group-title {\n direction: rtl;\n text-align: right;\n}\n.ant-dropdown-menu-submenu-popup.ant-dropdown-menu-submenu-rtl {\n transform-origin: 100% 0;\n}\n.ant-dropdown-rtl .ant-dropdown-menu-submenu-popup ul,\n.ant-dropdown-rtl .ant-dropdown-menu-submenu-popup li {\n text-align: right;\n}\n.ant-dropdown-rtl .ant-dropdown-menu-item,\n.ant-dropdown-rtl .ant-dropdown-menu-submenu-title {\n text-align: right;\n}\n.ant-dropdown-rtl .ant-dropdown-menu-item > .anticon:first-child,\n.ant-dropdown-rtl .ant-dropdown-menu-submenu-title > .anticon:first-child,\n.ant-dropdown-rtl .ant-dropdown-menu-item > span > .anticon:first-child,\n.ant-dropdown-rtl .ant-dropdown-menu-submenu-title > span > .anticon:first-child {\n margin-right: 0;\n margin-left: 8px;\n}\n.ant-dropdown-rtl .ant-dropdown-menu-item .ant-dropdown-menu-submenu-expand-icon,\n.ant-dropdown-rtl .ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-expand-icon {\n right: auto;\n left: 8px;\n}\n.ant-dropdown-rtl .ant-dropdown-menu-item .ant-dropdown-menu-submenu-expand-icon .ant-dropdown-menu-submenu-arrow-icon,\n.ant-dropdown-rtl .ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-expand-icon .ant-dropdown-menu-submenu-arrow-icon {\n margin-left: 0 !important;\n transform: scaleX(-1);\n}\n.ant-dropdown-rtl .ant-dropdown-menu-submenu-title {\n padding-right: 12px;\n padding-left: 24px;\n}\n.ant-dropdown-rtl .ant-dropdown-menu-submenu-vertical > .ant-dropdown-menu {\n right: 100%;\n left: 0;\n margin-right: 4px;\n margin-left: 0;\n}\n.ant-empty {\n margin: 0 8px;\n font-size: 14px;\n line-height: 1.5715;\n text-align: center;\n}\n.ant-empty-image {\n height: 100px;\n margin-bottom: 8px;\n}\n.ant-empty-image img {\n height: 100%;\n}\n.ant-empty-image svg {\n height: 100%;\n margin: auto;\n}\n.ant-empty-footer {\n margin-top: 16px;\n}\n.ant-empty-normal {\n margin: 32px 0;\n color: rgba(0, 0, 0, 0.25);\n}\n.ant-empty-normal .ant-empty-image {\n height: 40px;\n}\n.ant-empty-small {\n margin: 8px 0;\n color: rgba(0, 0, 0, 0.25);\n}\n.ant-empty-small .ant-empty-image {\n height: 35px;\n}\n.ant-empty-img-default-ellipse {\n fill: #f5f5f5;\n fill-opacity: 0.8;\n}\n.ant-empty-img-default-path-1 {\n fill: #aeb8c2;\n}\n.ant-empty-img-default-path-2 {\n fill: url('#linearGradient-1');\n}\n.ant-empty-img-default-path-3 {\n fill: #f5f5f7;\n}\n.ant-empty-img-default-path-4 {\n fill: #dce0e6;\n}\n.ant-empty-img-default-path-5 {\n fill: #dce0e6;\n}\n.ant-empty-img-default-g {\n fill: #fff;\n}\n.ant-empty-img-simple-ellipse {\n fill: #f5f5f5;\n}\n.ant-empty-img-simple-g {\n stroke: #d9d9d9;\n}\n.ant-empty-img-simple-path {\n fill: #fafafa;\n}\n.ant-empty-rtl {\n direction: rtl;\n}\n.ant-form-item .ant-input-number + .ant-form-text {\n margin-left: 8px;\n}\n.ant-form-inline {\n display: flex;\n flex-wrap: wrap;\n}\n.ant-form-inline .ant-form-item {\n flex: none;\n flex-wrap: nowrap;\n margin-right: 16px;\n margin-bottom: 0;\n}\n.ant-form-inline .ant-form-item-with-help {\n margin-bottom: 24px;\n}\n.ant-form-inline .ant-form-item > .ant-form-item-label,\n.ant-form-inline .ant-form-item > .ant-form-item-control {\n display: inline-block;\n vertical-align: top;\n}\n.ant-form-inline .ant-form-item > .ant-form-item-label {\n flex: none;\n}\n.ant-form-inline .ant-form-item .ant-form-text {\n display: inline-block;\n}\n.ant-form-inline .ant-form-item .ant-form-item-has-feedback {\n display: inline-block;\n}\n.ant-form-horizontal .ant-form-item-label {\n flex-grow: 0;\n}\n.ant-form-horizontal .ant-form-item-control {\n flex: 1 1 0;\n min-width: 0;\n}\n.ant-form-horizontal .ant-form-item-label[class$='-24'] + .ant-form-item-control,\n.ant-form-horizontal .ant-form-item-label[class*='-24 '] + .ant-form-item-control {\n min-width: unset;\n}\n.ant-form-vertical .ant-form-item-row {\n flex-direction: column;\n}\n.ant-form-vertical .ant-form-item-label > label {\n height: auto;\n}\n.ant-form-vertical .ant-form-item .ant-form-item-control {\n width: 100%;\n}\n.ant-form-vertical .ant-form-item-label,\n.ant-col-24.ant-form-item-label,\n.ant-col-xl-24.ant-form-item-label {\n padding: 0 0 8px;\n line-height: 1.5715;\n white-space: initial;\n text-align: left;\n}\n.ant-form-vertical .ant-form-item-label > label,\n.ant-col-24.ant-form-item-label > label,\n.ant-col-xl-24.ant-form-item-label > label {\n margin: 0;\n}\n.ant-form-vertical .ant-form-item-label > label::after,\n.ant-col-24.ant-form-item-label > label::after,\n.ant-col-xl-24.ant-form-item-label > label::after {\n display: none;\n}\n.ant-form-rtl.ant-form-vertical .ant-form-item-label,\n.ant-form-rtl.ant-col-24.ant-form-item-label,\n.ant-form-rtl.ant-col-xl-24.ant-form-item-label {\n text-align: right;\n}\n@media (max-width: 575px) {\n .ant-form-item .ant-form-item-label {\n padding: 0 0 8px;\n line-height: 1.5715;\n white-space: initial;\n text-align: left;\n }\n .ant-form-item .ant-form-item-label > label {\n margin: 0;\n }\n .ant-form-item .ant-form-item-label > label::after {\n display: none;\n }\n .ant-form-rtl.ant-form-item .ant-form-item-label {\n text-align: right;\n }\n .ant-form .ant-form-item {\n flex-wrap: wrap;\n }\n .ant-form .ant-form-item .ant-form-item-label,\n .ant-form .ant-form-item .ant-form-item-control {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .ant-col-xs-24.ant-form-item-label {\n padding: 0 0 8px;\n line-height: 1.5715;\n white-space: initial;\n text-align: left;\n }\n .ant-col-xs-24.ant-form-item-label > label {\n margin: 0;\n }\n .ant-col-xs-24.ant-form-item-label > label::after {\n display: none;\n }\n .ant-form-rtl.ant-col-xs-24.ant-form-item-label {\n text-align: right;\n }\n}\n@media (max-width: 767px) {\n .ant-col-sm-24.ant-form-item-label {\n padding: 0 0 8px;\n line-height: 1.5715;\n white-space: initial;\n text-align: left;\n }\n .ant-col-sm-24.ant-form-item-label > label {\n margin: 0;\n }\n .ant-col-sm-24.ant-form-item-label > label::after {\n display: none;\n }\n .ant-form-rtl.ant-col-sm-24.ant-form-item-label {\n text-align: right;\n }\n}\n@media (max-width: 991px) {\n .ant-col-md-24.ant-form-item-label {\n padding: 0 0 8px;\n line-height: 1.5715;\n white-space: initial;\n text-align: left;\n }\n .ant-col-md-24.ant-form-item-label > label {\n margin: 0;\n }\n .ant-col-md-24.ant-form-item-label > label::after {\n display: none;\n }\n .ant-form-rtl.ant-col-md-24.ant-form-item-label {\n text-align: right;\n }\n}\n@media (max-width: 1199px) {\n .ant-col-lg-24.ant-form-item-label {\n padding: 0 0 8px;\n line-height: 1.5715;\n white-space: initial;\n text-align: left;\n }\n .ant-col-lg-24.ant-form-item-label > label {\n margin: 0;\n }\n .ant-col-lg-24.ant-form-item-label > label::after {\n display: none;\n }\n .ant-form-rtl.ant-col-lg-24.ant-form-item-label {\n text-align: right;\n }\n}\n@media (max-width: 1599px) {\n .ant-col-xl-24.ant-form-item-label {\n padding: 0 0 8px;\n line-height: 1.5715;\n white-space: initial;\n text-align: left;\n }\n .ant-col-xl-24.ant-form-item-label > label {\n margin: 0;\n }\n .ant-col-xl-24.ant-form-item-label > label::after {\n display: none;\n }\n .ant-form-rtl.ant-col-xl-24.ant-form-item-label {\n text-align: right;\n }\n}\n.ant-form-item {\n /* Some non-status related component style is in `components.less` */\n /* To support leave along ErrorList. We add additional className to handle explain style */\n}\n.ant-form-item-explain-error {\n color: #ff4d4f;\n}\n.ant-form-item-explain-warning {\n color: #faad14;\n}\n.ant-form-item-has-feedback .ant-switch {\n margin: 2px 0 4px;\n}\n.ant-form-item-has-warning .ant-form-item-split {\n color: #faad14;\n}\n.ant-form-item-has-error .ant-form-item-split {\n color: #ff4d4f;\n}\n.ant-form {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n}\n.ant-form legend {\n display: block;\n width: 100%;\n margin-bottom: 20px;\n padding: 0;\n color: rgba(0, 0, 0, 0.45);\n font-size: 16px;\n line-height: inherit;\n border: 0;\n border-bottom: 1px solid #d9d9d9;\n}\n.ant-form label {\n font-size: 14px;\n}\n.ant-form input[type='search'] {\n box-sizing: border-box;\n}\n.ant-form input[type='radio'],\n.ant-form input[type='checkbox'] {\n line-height: normal;\n}\n.ant-form input[type='file'] {\n display: block;\n}\n.ant-form input[type='range'] {\n display: block;\n width: 100%;\n}\n.ant-form select[multiple],\n.ant-form select[size] {\n height: auto;\n}\n.ant-form input[type='file']:focus,\n.ant-form input[type='radio']:focus,\n.ant-form input[type='checkbox']:focus {\n outline: thin dotted;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n.ant-form output {\n display: block;\n padding-top: 15px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n line-height: 1.5715;\n}\n.ant-form .ant-form-text {\n display: inline-block;\n padding-right: 8px;\n}\n.ant-form-small .ant-form-item-label > label {\n height: 24px;\n}\n.ant-form-small .ant-form-item-control-input {\n min-height: 24px;\n}\n.ant-form-large .ant-form-item-label > label {\n height: 40px;\n}\n.ant-form-large .ant-form-item-control-input {\n min-height: 40px;\n}\n.ant-form-item {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n margin-bottom: 24px;\n vertical-align: top;\n}\n.ant-form-item-with-help {\n transition: none;\n}\n.ant-form-item-hidden,\n.ant-form-item-hidden.ant-row {\n display: none;\n}\n.ant-form-item-label {\n display: inline-block;\n flex-grow: 0;\n overflow: hidden;\n white-space: nowrap;\n text-align: right;\n vertical-align: middle;\n}\n.ant-form-item-label-left {\n text-align: left;\n}\n.ant-form-item-label-wrap {\n overflow: unset;\n line-height: 1.3215em;\n white-space: unset;\n}\n.ant-form-item-label > label {\n position: relative;\n display: inline-flex;\n align-items: center;\n max-width: 100%;\n height: 32px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n}\n.ant-form-item-label > label > .anticon {\n font-size: 14px;\n vertical-align: top;\n}\n.ant-form-item-label > label.ant-form-item-required:not(.ant-form-item-required-mark-optional)::before {\n display: inline-block;\n margin-right: 4px;\n color: #ff4d4f;\n font-size: 14px;\n font-family: SimSun, sans-serif;\n line-height: 1;\n content: '*';\n}\n.ant-form-hide-required-mark .ant-form-item-label > label.ant-form-item-required:not(.ant-form-item-required-mark-optional)::before {\n display: none;\n}\n.ant-form-item-label > label .ant-form-item-optional {\n display: inline-block;\n margin-left: 4px;\n color: rgba(0, 0, 0, 0.45);\n}\n.ant-form-hide-required-mark .ant-form-item-label > label .ant-form-item-optional {\n display: none;\n}\n.ant-form-item-label > label .ant-form-item-tooltip {\n color: rgba(0, 0, 0, 0.45);\n cursor: help;\n writing-mode: horizontal-tb;\n margin-inline-start: 4px;\n}\n.ant-form-item-label > label::after {\n content: ':';\n position: relative;\n top: -0.5px;\n margin: 0 8px 0 2px;\n}\n.ant-form-item-label > label.ant-form-item-no-colon::after {\n content: ' ';\n}\n.ant-form-item-control {\n display: flex;\n flex-direction: column;\n flex-grow: 1;\n}\n.ant-form-item-control:first-child:not([class^='ant-col-']):not([class*=' ant-col-']) {\n width: 100%;\n}\n.ant-form-item-control-input {\n position: relative;\n display: flex;\n align-items: center;\n min-height: 32px;\n}\n.ant-form-item-control-input-content {\n flex: auto;\n max-width: 100%;\n}\n.ant-form-item-explain,\n.ant-form-item-extra {\n clear: both;\n color: rgba(0, 0, 0, 0.45);\n font-size: 14px;\n line-height: 1.5715;\n transition: color 0.3s cubic-bezier(0.215, 0.61, 0.355, 1);\n}\n.ant-form-item-explain-connected {\n width: 100%;\n}\n.ant-form-item-extra {\n min-height: 24px;\n}\n.ant-form-item-with-help .ant-form-item-explain {\n height: auto;\n opacity: 1;\n}\n.ant-form-item-feedback-icon {\n font-size: 14px;\n text-align: center;\n visibility: visible;\n animation: zoomIn 0.3s cubic-bezier(0.12, 0.4, 0.29, 1.46);\n pointer-events: none;\n}\n.ant-form-item-feedback-icon-success {\n color: #52c41a;\n}\n.ant-form-item-feedback-icon-error {\n color: #ff4d4f;\n}\n.ant-form-item-feedback-icon-warning {\n color: #faad14;\n}\n.ant-form-item-feedback-icon-validating {\n color: #5b5ce1;\n}\n.ant-show-help {\n transition: opacity 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\n}\n.ant-show-help-appear,\n.ant-show-help-enter {\n opacity: 0;\n}\n.ant-show-help-appear-active,\n.ant-show-help-enter-active {\n opacity: 1;\n}\n.ant-show-help-leave {\n opacity: 1;\n}\n.ant-show-help-leave-active {\n opacity: 0;\n}\n.ant-show-help-item {\n overflow: hidden;\n transition: height 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), opacity 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1) !important;\n}\n.ant-show-help-item-appear,\n.ant-show-help-item-enter {\n transform: translateY(-5px);\n opacity: 0;\n}\n.ant-show-help-item-appear-active,\n.ant-show-help-item-enter-active {\n transform: translateY(0);\n opacity: 1;\n}\n.ant-show-help-item-leave {\n transition: height 0.2s cubic-bezier(0.645, 0.045, 0.355, 1), opacity 0.2s cubic-bezier(0.645, 0.045, 0.355, 1), transform 0.2s cubic-bezier(0.645, 0.045, 0.355, 1) !important;\n}\n.ant-show-help-item-leave-active {\n transform: translateY(-5px);\n}\n@keyframes diffZoomIn1 {\n 0% {\n transform: scale(0);\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n}\n@keyframes diffZoomIn2 {\n 0% {\n transform: scale(0);\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n}\n@keyframes diffZoomIn3 {\n 0% {\n transform: scale(0);\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n}\n.ant-form-rtl {\n direction: rtl;\n}\n.ant-form-rtl .ant-form-item-label {\n text-align: left;\n}\n.ant-form-rtl .ant-form-item-label > label.ant-form-item-required::before {\n margin-right: 0;\n margin-left: 4px;\n}\n.ant-form-rtl .ant-form-item-label > label::after {\n margin: 0 2px 0 8px;\n}\n.ant-form-rtl .ant-form-item-label > label .ant-form-item-optional {\n margin-right: 4px;\n margin-left: 0;\n}\n.ant-col-rtl .ant-form-item-control:first-child {\n width: 100%;\n}\n.ant-form-rtl .ant-form-item-has-feedback .ant-input {\n padding-right: 11px;\n padding-left: 24px;\n}\n.ant-form-rtl .ant-form-item-has-feedback .ant-input-affix-wrapper .ant-input-suffix {\n padding-right: 11px;\n padding-left: 18px;\n}\n.ant-form-rtl .ant-form-item-has-feedback .ant-input-affix-wrapper .ant-input {\n padding: 0;\n}\n.ant-form-rtl .ant-form-item-has-feedback .ant-input-number-affix-wrapper .ant-input-number {\n padding: 0;\n}\n.ant-form-rtl .ant-form-item-has-feedback .ant-input-search:not(.ant-input-search-enter-button) .ant-input-suffix {\n right: auto;\n left: 28px;\n}\n.ant-form-rtl .ant-form-item-has-feedback .ant-input-number {\n padding-left: 18px;\n}\n.ant-form-rtl .ant-form-item-has-feedback > .ant-select .ant-select-arrow,\n.ant-form-rtl .ant-form-item-has-feedback > .ant-select .ant-select-clear,\n.ant-form-rtl .ant-form-item-has-feedback :not(.ant-input-group-addon) > .ant-select .ant-select-arrow,\n.ant-form-rtl .ant-form-item-has-feedback :not(.ant-input-group-addon) > .ant-select .ant-select-clear,\n.ant-form-rtl .ant-form-item-has-feedback :not(.ant-input-number-group-addon) > .ant-select .ant-select-arrow,\n.ant-form-rtl .ant-form-item-has-feedback :not(.ant-input-number-group-addon) > .ant-select .ant-select-clear {\n right: auto;\n left: 32px;\n}\n.ant-form-rtl .ant-form-item-has-feedback > .ant-select .ant-select-selection-selected-value,\n.ant-form-rtl .ant-form-item-has-feedback :not(.ant-input-group-addon) > .ant-select .ant-select-selection-selected-value,\n.ant-form-rtl .ant-form-item-has-feedback :not(.ant-input-number-group-addon) > .ant-select .ant-select-selection-selected-value {\n padding-right: 0;\n padding-left: 42px;\n}\n.ant-form-rtl .ant-form-item-has-feedback .ant-cascader-picker-arrow {\n margin-right: 0;\n margin-left: 19px;\n}\n.ant-form-rtl .ant-form-item-has-feedback .ant-cascader-picker-clear {\n right: auto;\n left: 32px;\n}\n.ant-form-rtl .ant-form-item-has-feedback .ant-picker {\n padding-right: 11px;\n padding-left: 29.2px;\n}\n.ant-form-rtl .ant-form-item-has-feedback .ant-picker-large {\n padding-right: 11px;\n padding-left: 29.2px;\n}\n.ant-form-rtl .ant-form-item-has-feedback .ant-picker-small {\n padding-right: 7px;\n padding-left: 25.2px;\n}\n.ant-form-rtl .ant-form-item-has-feedback.ant-form-item-has-success .ant-form-item-children-icon,\n.ant-form-rtl .ant-form-item-has-feedback.ant-form-item-has-warning .ant-form-item-children-icon,\n.ant-form-rtl .ant-form-item-has-feedback.ant-form-item-has-error .ant-form-item-children-icon,\n.ant-form-rtl .ant-form-item-has-feedback.ant-form-item-is-validating .ant-form-item-children-icon {\n right: auto;\n left: 0;\n}\n.ant-form-rtl.ant-form-inline .ant-form-item {\n margin-right: 0;\n margin-left: 16px;\n}\n.ant-row {\n display: flex;\n flex-flow: row wrap;\n min-width: 0;\n}\n.ant-row::before,\n.ant-row::after {\n display: flex;\n}\n.ant-row-no-wrap {\n flex-wrap: nowrap;\n}\n.ant-row-start {\n justify-content: flex-start;\n}\n.ant-row-center {\n justify-content: center;\n}\n.ant-row-end {\n justify-content: flex-end;\n}\n.ant-row-space-between {\n justify-content: space-between;\n}\n.ant-row-space-around {\n justify-content: space-around;\n}\n.ant-row-space-evenly {\n justify-content: space-evenly;\n}\n.ant-row-top {\n align-items: flex-start;\n}\n.ant-row-middle {\n align-items: center;\n}\n.ant-row-bottom {\n align-items: flex-end;\n}\n.ant-col {\n position: relative;\n max-width: 100%;\n min-height: 1px;\n}\n.ant-col-24 {\n display: block;\n flex: 0 0 100%;\n max-width: 100%;\n}\n.ant-col-push-24 {\n left: 100%;\n}\n.ant-col-pull-24 {\n right: 100%;\n}\n.ant-col-offset-24 {\n margin-left: 100%;\n}\n.ant-col-order-24 {\n order: 24;\n}\n.ant-col-23 {\n display: block;\n flex: 0 0 95.83333333%;\n max-width: 95.83333333%;\n}\n.ant-col-push-23 {\n left: 95.83333333%;\n}\n.ant-col-pull-23 {\n right: 95.83333333%;\n}\n.ant-col-offset-23 {\n margin-left: 95.83333333%;\n}\n.ant-col-order-23 {\n order: 23;\n}\n.ant-col-22 {\n display: block;\n flex: 0 0 91.66666667%;\n max-width: 91.66666667%;\n}\n.ant-col-push-22 {\n left: 91.66666667%;\n}\n.ant-col-pull-22 {\n right: 91.66666667%;\n}\n.ant-col-offset-22 {\n margin-left: 91.66666667%;\n}\n.ant-col-order-22 {\n order: 22;\n}\n.ant-col-21 {\n display: block;\n flex: 0 0 87.5%;\n max-width: 87.5%;\n}\n.ant-col-push-21 {\n left: 87.5%;\n}\n.ant-col-pull-21 {\n right: 87.5%;\n}\n.ant-col-offset-21 {\n margin-left: 87.5%;\n}\n.ant-col-order-21 {\n order: 21;\n}\n.ant-col-20 {\n display: block;\n flex: 0 0 83.33333333%;\n max-width: 83.33333333%;\n}\n.ant-col-push-20 {\n left: 83.33333333%;\n}\n.ant-col-pull-20 {\n right: 83.33333333%;\n}\n.ant-col-offset-20 {\n margin-left: 83.33333333%;\n}\n.ant-col-order-20 {\n order: 20;\n}\n.ant-col-19 {\n display: block;\n flex: 0 0 79.16666667%;\n max-width: 79.16666667%;\n}\n.ant-col-push-19 {\n left: 79.16666667%;\n}\n.ant-col-pull-19 {\n right: 79.16666667%;\n}\n.ant-col-offset-19 {\n margin-left: 79.16666667%;\n}\n.ant-col-order-19 {\n order: 19;\n}\n.ant-col-18 {\n display: block;\n flex: 0 0 75%;\n max-width: 75%;\n}\n.ant-col-push-18 {\n left: 75%;\n}\n.ant-col-pull-18 {\n right: 75%;\n}\n.ant-col-offset-18 {\n margin-left: 75%;\n}\n.ant-col-order-18 {\n order: 18;\n}\n.ant-col-17 {\n display: block;\n flex: 0 0 70.83333333%;\n max-width: 70.83333333%;\n}\n.ant-col-push-17 {\n left: 70.83333333%;\n}\n.ant-col-pull-17 {\n right: 70.83333333%;\n}\n.ant-col-offset-17 {\n margin-left: 70.83333333%;\n}\n.ant-col-order-17 {\n order: 17;\n}\n.ant-col-16 {\n display: block;\n flex: 0 0 66.66666667%;\n max-width: 66.66666667%;\n}\n.ant-col-push-16 {\n left: 66.66666667%;\n}\n.ant-col-pull-16 {\n right: 66.66666667%;\n}\n.ant-col-offset-16 {\n margin-left: 66.66666667%;\n}\n.ant-col-order-16 {\n order: 16;\n}\n.ant-col-15 {\n display: block;\n flex: 0 0 62.5%;\n max-width: 62.5%;\n}\n.ant-col-push-15 {\n left: 62.5%;\n}\n.ant-col-pull-15 {\n right: 62.5%;\n}\n.ant-col-offset-15 {\n margin-left: 62.5%;\n}\n.ant-col-order-15 {\n order: 15;\n}\n.ant-col-14 {\n display: block;\n flex: 0 0 58.33333333%;\n max-width: 58.33333333%;\n}\n.ant-col-push-14 {\n left: 58.33333333%;\n}\n.ant-col-pull-14 {\n right: 58.33333333%;\n}\n.ant-col-offset-14 {\n margin-left: 58.33333333%;\n}\n.ant-col-order-14 {\n order: 14;\n}\n.ant-col-13 {\n display: block;\n flex: 0 0 54.16666667%;\n max-width: 54.16666667%;\n}\n.ant-col-push-13 {\n left: 54.16666667%;\n}\n.ant-col-pull-13 {\n right: 54.16666667%;\n}\n.ant-col-offset-13 {\n margin-left: 54.16666667%;\n}\n.ant-col-order-13 {\n order: 13;\n}\n.ant-col-12 {\n display: block;\n flex: 0 0 50%;\n max-width: 50%;\n}\n.ant-col-push-12 {\n left: 50%;\n}\n.ant-col-pull-12 {\n right: 50%;\n}\n.ant-col-offset-12 {\n margin-left: 50%;\n}\n.ant-col-order-12 {\n order: 12;\n}\n.ant-col-11 {\n display: block;\n flex: 0 0 45.83333333%;\n max-width: 45.83333333%;\n}\n.ant-col-push-11 {\n left: 45.83333333%;\n}\n.ant-col-pull-11 {\n right: 45.83333333%;\n}\n.ant-col-offset-11 {\n margin-left: 45.83333333%;\n}\n.ant-col-order-11 {\n order: 11;\n}\n.ant-col-10 {\n display: block;\n flex: 0 0 41.66666667%;\n max-width: 41.66666667%;\n}\n.ant-col-push-10 {\n left: 41.66666667%;\n}\n.ant-col-pull-10 {\n right: 41.66666667%;\n}\n.ant-col-offset-10 {\n margin-left: 41.66666667%;\n}\n.ant-col-order-10 {\n order: 10;\n}\n.ant-col-9 {\n display: block;\n flex: 0 0 37.5%;\n max-width: 37.5%;\n}\n.ant-col-push-9 {\n left: 37.5%;\n}\n.ant-col-pull-9 {\n right: 37.5%;\n}\n.ant-col-offset-9 {\n margin-left: 37.5%;\n}\n.ant-col-order-9 {\n order: 9;\n}\n.ant-col-8 {\n display: block;\n flex: 0 0 33.33333333%;\n max-width: 33.33333333%;\n}\n.ant-col-push-8 {\n left: 33.33333333%;\n}\n.ant-col-pull-8 {\n right: 33.33333333%;\n}\n.ant-col-offset-8 {\n margin-left: 33.33333333%;\n}\n.ant-col-order-8 {\n order: 8;\n}\n.ant-col-7 {\n display: block;\n flex: 0 0 29.16666667%;\n max-width: 29.16666667%;\n}\n.ant-col-push-7 {\n left: 29.16666667%;\n}\n.ant-col-pull-7 {\n right: 29.16666667%;\n}\n.ant-col-offset-7 {\n margin-left: 29.16666667%;\n}\n.ant-col-order-7 {\n order: 7;\n}\n.ant-col-6 {\n display: block;\n flex: 0 0 25%;\n max-width: 25%;\n}\n.ant-col-push-6 {\n left: 25%;\n}\n.ant-col-pull-6 {\n right: 25%;\n}\n.ant-col-offset-6 {\n margin-left: 25%;\n}\n.ant-col-order-6 {\n order: 6;\n}\n.ant-col-5 {\n display: block;\n flex: 0 0 20.83333333%;\n max-width: 20.83333333%;\n}\n.ant-col-push-5 {\n left: 20.83333333%;\n}\n.ant-col-pull-5 {\n right: 20.83333333%;\n}\n.ant-col-offset-5 {\n margin-left: 20.83333333%;\n}\n.ant-col-order-5 {\n order: 5;\n}\n.ant-col-4 {\n display: block;\n flex: 0 0 16.66666667%;\n max-width: 16.66666667%;\n}\n.ant-col-push-4 {\n left: 16.66666667%;\n}\n.ant-col-pull-4 {\n right: 16.66666667%;\n}\n.ant-col-offset-4 {\n margin-left: 16.66666667%;\n}\n.ant-col-order-4 {\n order: 4;\n}\n.ant-col-3 {\n display: block;\n flex: 0 0 12.5%;\n max-width: 12.5%;\n}\n.ant-col-push-3 {\n left: 12.5%;\n}\n.ant-col-pull-3 {\n right: 12.5%;\n}\n.ant-col-offset-3 {\n margin-left: 12.5%;\n}\n.ant-col-order-3 {\n order: 3;\n}\n.ant-col-2 {\n display: block;\n flex: 0 0 8.33333333%;\n max-width: 8.33333333%;\n}\n.ant-col-push-2 {\n left: 8.33333333%;\n}\n.ant-col-pull-2 {\n right: 8.33333333%;\n}\n.ant-col-offset-2 {\n margin-left: 8.33333333%;\n}\n.ant-col-order-2 {\n order: 2;\n}\n.ant-col-1 {\n display: block;\n flex: 0 0 4.16666667%;\n max-width: 4.16666667%;\n}\n.ant-col-push-1 {\n left: 4.16666667%;\n}\n.ant-col-pull-1 {\n right: 4.16666667%;\n}\n.ant-col-offset-1 {\n margin-left: 4.16666667%;\n}\n.ant-col-order-1 {\n order: 1;\n}\n.ant-col-0 {\n display: none;\n}\n.ant-col-push-0 {\n left: auto;\n}\n.ant-col-pull-0 {\n right: auto;\n}\n.ant-col-push-0 {\n left: auto;\n}\n.ant-col-pull-0 {\n right: auto;\n}\n.ant-col-offset-0 {\n margin-left: 0;\n}\n.ant-col-order-0 {\n order: 0;\n}\n.ant-col-push-0.ant-col-rtl {\n right: auto;\n}\n.ant-col-pull-0.ant-col-rtl {\n left: auto;\n}\n.ant-col-push-0.ant-col-rtl {\n right: auto;\n}\n.ant-col-pull-0.ant-col-rtl {\n left: auto;\n}\n.ant-col-offset-0.ant-col-rtl {\n margin-right: 0;\n}\n.ant-col-push-1.ant-col-rtl {\n right: 4.16666667%;\n left: auto;\n}\n.ant-col-pull-1.ant-col-rtl {\n right: auto;\n left: 4.16666667%;\n}\n.ant-col-offset-1.ant-col-rtl {\n margin-right: 4.16666667%;\n margin-left: 0;\n}\n.ant-col-push-2.ant-col-rtl {\n right: 8.33333333%;\n left: auto;\n}\n.ant-col-pull-2.ant-col-rtl {\n right: auto;\n left: 8.33333333%;\n}\n.ant-col-offset-2.ant-col-rtl {\n margin-right: 8.33333333%;\n margin-left: 0;\n}\n.ant-col-push-3.ant-col-rtl {\n right: 12.5%;\n left: auto;\n}\n.ant-col-pull-3.ant-col-rtl {\n right: auto;\n left: 12.5%;\n}\n.ant-col-offset-3.ant-col-rtl {\n margin-right: 12.5%;\n margin-left: 0;\n}\n.ant-col-push-4.ant-col-rtl {\n right: 16.66666667%;\n left: auto;\n}\n.ant-col-pull-4.ant-col-rtl {\n right: auto;\n left: 16.66666667%;\n}\n.ant-col-offset-4.ant-col-rtl {\n margin-right: 16.66666667%;\n margin-left: 0;\n}\n.ant-col-push-5.ant-col-rtl {\n right: 20.83333333%;\n left: auto;\n}\n.ant-col-pull-5.ant-col-rtl {\n right: auto;\n left: 20.83333333%;\n}\n.ant-col-offset-5.ant-col-rtl {\n margin-right: 20.83333333%;\n margin-left: 0;\n}\n.ant-col-push-6.ant-col-rtl {\n right: 25%;\n left: auto;\n}\n.ant-col-pull-6.ant-col-rtl {\n right: auto;\n left: 25%;\n}\n.ant-col-offset-6.ant-col-rtl {\n margin-right: 25%;\n margin-left: 0;\n}\n.ant-col-push-7.ant-col-rtl {\n right: 29.16666667%;\n left: auto;\n}\n.ant-col-pull-7.ant-col-rtl {\n right: auto;\n left: 29.16666667%;\n}\n.ant-col-offset-7.ant-col-rtl {\n margin-right: 29.16666667%;\n margin-left: 0;\n}\n.ant-col-push-8.ant-col-rtl {\n right: 33.33333333%;\n left: auto;\n}\n.ant-col-pull-8.ant-col-rtl {\n right: auto;\n left: 33.33333333%;\n}\n.ant-col-offset-8.ant-col-rtl {\n margin-right: 33.33333333%;\n margin-left: 0;\n}\n.ant-col-push-9.ant-col-rtl {\n right: 37.5%;\n left: auto;\n}\n.ant-col-pull-9.ant-col-rtl {\n right: auto;\n left: 37.5%;\n}\n.ant-col-offset-9.ant-col-rtl {\n margin-right: 37.5%;\n margin-left: 0;\n}\n.ant-col-push-10.ant-col-rtl {\n right: 41.66666667%;\n left: auto;\n}\n.ant-col-pull-10.ant-col-rtl {\n right: auto;\n left: 41.66666667%;\n}\n.ant-col-offset-10.ant-col-rtl {\n margin-right: 41.66666667%;\n margin-left: 0;\n}\n.ant-col-push-11.ant-col-rtl {\n right: 45.83333333%;\n left: auto;\n}\n.ant-col-pull-11.ant-col-rtl {\n right: auto;\n left: 45.83333333%;\n}\n.ant-col-offset-11.ant-col-rtl {\n margin-right: 45.83333333%;\n margin-left: 0;\n}\n.ant-col-push-12.ant-col-rtl {\n right: 50%;\n left: auto;\n}\n.ant-col-pull-12.ant-col-rtl {\n right: auto;\n left: 50%;\n}\n.ant-col-offset-12.ant-col-rtl {\n margin-right: 50%;\n margin-left: 0;\n}\n.ant-col-push-13.ant-col-rtl {\n right: 54.16666667%;\n left: auto;\n}\n.ant-col-pull-13.ant-col-rtl {\n right: auto;\n left: 54.16666667%;\n}\n.ant-col-offset-13.ant-col-rtl {\n margin-right: 54.16666667%;\n margin-left: 0;\n}\n.ant-col-push-14.ant-col-rtl {\n right: 58.33333333%;\n left: auto;\n}\n.ant-col-pull-14.ant-col-rtl {\n right: auto;\n left: 58.33333333%;\n}\n.ant-col-offset-14.ant-col-rtl {\n margin-right: 58.33333333%;\n margin-left: 0;\n}\n.ant-col-push-15.ant-col-rtl {\n right: 62.5%;\n left: auto;\n}\n.ant-col-pull-15.ant-col-rtl {\n right: auto;\n left: 62.5%;\n}\n.ant-col-offset-15.ant-col-rtl {\n margin-right: 62.5%;\n margin-left: 0;\n}\n.ant-col-push-16.ant-col-rtl {\n right: 66.66666667%;\n left: auto;\n}\n.ant-col-pull-16.ant-col-rtl {\n right: auto;\n left: 66.66666667%;\n}\n.ant-col-offset-16.ant-col-rtl {\n margin-right: 66.66666667%;\n margin-left: 0;\n}\n.ant-col-push-17.ant-col-rtl {\n right: 70.83333333%;\n left: auto;\n}\n.ant-col-pull-17.ant-col-rtl {\n right: auto;\n left: 70.83333333%;\n}\n.ant-col-offset-17.ant-col-rtl {\n margin-right: 70.83333333%;\n margin-left: 0;\n}\n.ant-col-push-18.ant-col-rtl {\n right: 75%;\n left: auto;\n}\n.ant-col-pull-18.ant-col-rtl {\n right: auto;\n left: 75%;\n}\n.ant-col-offset-18.ant-col-rtl {\n margin-right: 75%;\n margin-left: 0;\n}\n.ant-col-push-19.ant-col-rtl {\n right: 79.16666667%;\n left: auto;\n}\n.ant-col-pull-19.ant-col-rtl {\n right: auto;\n left: 79.16666667%;\n}\n.ant-col-offset-19.ant-col-rtl {\n margin-right: 79.16666667%;\n margin-left: 0;\n}\n.ant-col-push-20.ant-col-rtl {\n right: 83.33333333%;\n left: auto;\n}\n.ant-col-pull-20.ant-col-rtl {\n right: auto;\n left: 83.33333333%;\n}\n.ant-col-offset-20.ant-col-rtl {\n margin-right: 83.33333333%;\n margin-left: 0;\n}\n.ant-col-push-21.ant-col-rtl {\n right: 87.5%;\n left: auto;\n}\n.ant-col-pull-21.ant-col-rtl {\n right: auto;\n left: 87.5%;\n}\n.ant-col-offset-21.ant-col-rtl {\n margin-right: 87.5%;\n margin-left: 0;\n}\n.ant-col-push-22.ant-col-rtl {\n right: 91.66666667%;\n left: auto;\n}\n.ant-col-pull-22.ant-col-rtl {\n right: auto;\n left: 91.66666667%;\n}\n.ant-col-offset-22.ant-col-rtl {\n margin-right: 91.66666667%;\n margin-left: 0;\n}\n.ant-col-push-23.ant-col-rtl {\n right: 95.83333333%;\n left: auto;\n}\n.ant-col-pull-23.ant-col-rtl {\n right: auto;\n left: 95.83333333%;\n}\n.ant-col-offset-23.ant-col-rtl {\n margin-right: 95.83333333%;\n margin-left: 0;\n}\n.ant-col-push-24.ant-col-rtl {\n right: 100%;\n left: auto;\n}\n.ant-col-pull-24.ant-col-rtl {\n right: auto;\n left: 100%;\n}\n.ant-col-offset-24.ant-col-rtl {\n margin-right: 100%;\n margin-left: 0;\n}\n.ant-col-xs-24 {\n display: block;\n flex: 0 0 100%;\n max-width: 100%;\n}\n.ant-col-xs-push-24 {\n left: 100%;\n}\n.ant-col-xs-pull-24 {\n right: 100%;\n}\n.ant-col-xs-offset-24 {\n margin-left: 100%;\n}\n.ant-col-xs-order-24 {\n order: 24;\n}\n.ant-col-xs-23 {\n display: block;\n flex: 0 0 95.83333333%;\n max-width: 95.83333333%;\n}\n.ant-col-xs-push-23 {\n left: 95.83333333%;\n}\n.ant-col-xs-pull-23 {\n right: 95.83333333%;\n}\n.ant-col-xs-offset-23 {\n margin-left: 95.83333333%;\n}\n.ant-col-xs-order-23 {\n order: 23;\n}\n.ant-col-xs-22 {\n display: block;\n flex: 0 0 91.66666667%;\n max-width: 91.66666667%;\n}\n.ant-col-xs-push-22 {\n left: 91.66666667%;\n}\n.ant-col-xs-pull-22 {\n right: 91.66666667%;\n}\n.ant-col-xs-offset-22 {\n margin-left: 91.66666667%;\n}\n.ant-col-xs-order-22 {\n order: 22;\n}\n.ant-col-xs-21 {\n display: block;\n flex: 0 0 87.5%;\n max-width: 87.5%;\n}\n.ant-col-xs-push-21 {\n left: 87.5%;\n}\n.ant-col-xs-pull-21 {\n right: 87.5%;\n}\n.ant-col-xs-offset-21 {\n margin-left: 87.5%;\n}\n.ant-col-xs-order-21 {\n order: 21;\n}\n.ant-col-xs-20 {\n display: block;\n flex: 0 0 83.33333333%;\n max-width: 83.33333333%;\n}\n.ant-col-xs-push-20 {\n left: 83.33333333%;\n}\n.ant-col-xs-pull-20 {\n right: 83.33333333%;\n}\n.ant-col-xs-offset-20 {\n margin-left: 83.33333333%;\n}\n.ant-col-xs-order-20 {\n order: 20;\n}\n.ant-col-xs-19 {\n display: block;\n flex: 0 0 79.16666667%;\n max-width: 79.16666667%;\n}\n.ant-col-xs-push-19 {\n left: 79.16666667%;\n}\n.ant-col-xs-pull-19 {\n right: 79.16666667%;\n}\n.ant-col-xs-offset-19 {\n margin-left: 79.16666667%;\n}\n.ant-col-xs-order-19 {\n order: 19;\n}\n.ant-col-xs-18 {\n display: block;\n flex: 0 0 75%;\n max-width: 75%;\n}\n.ant-col-xs-push-18 {\n left: 75%;\n}\n.ant-col-xs-pull-18 {\n right: 75%;\n}\n.ant-col-xs-offset-18 {\n margin-left: 75%;\n}\n.ant-col-xs-order-18 {\n order: 18;\n}\n.ant-col-xs-17 {\n display: block;\n flex: 0 0 70.83333333%;\n max-width: 70.83333333%;\n}\n.ant-col-xs-push-17 {\n left: 70.83333333%;\n}\n.ant-col-xs-pull-17 {\n right: 70.83333333%;\n}\n.ant-col-xs-offset-17 {\n margin-left: 70.83333333%;\n}\n.ant-col-xs-order-17 {\n order: 17;\n}\n.ant-col-xs-16 {\n display: block;\n flex: 0 0 66.66666667%;\n max-width: 66.66666667%;\n}\n.ant-col-xs-push-16 {\n left: 66.66666667%;\n}\n.ant-col-xs-pull-16 {\n right: 66.66666667%;\n}\n.ant-col-xs-offset-16 {\n margin-left: 66.66666667%;\n}\n.ant-col-xs-order-16 {\n order: 16;\n}\n.ant-col-xs-15 {\n display: block;\n flex: 0 0 62.5%;\n max-width: 62.5%;\n}\n.ant-col-xs-push-15 {\n left: 62.5%;\n}\n.ant-col-xs-pull-15 {\n right: 62.5%;\n}\n.ant-col-xs-offset-15 {\n margin-left: 62.5%;\n}\n.ant-col-xs-order-15 {\n order: 15;\n}\n.ant-col-xs-14 {\n display: block;\n flex: 0 0 58.33333333%;\n max-width: 58.33333333%;\n}\n.ant-col-xs-push-14 {\n left: 58.33333333%;\n}\n.ant-col-xs-pull-14 {\n right: 58.33333333%;\n}\n.ant-col-xs-offset-14 {\n margin-left: 58.33333333%;\n}\n.ant-col-xs-order-14 {\n order: 14;\n}\n.ant-col-xs-13 {\n display: block;\n flex: 0 0 54.16666667%;\n max-width: 54.16666667%;\n}\n.ant-col-xs-push-13 {\n left: 54.16666667%;\n}\n.ant-col-xs-pull-13 {\n right: 54.16666667%;\n}\n.ant-col-xs-offset-13 {\n margin-left: 54.16666667%;\n}\n.ant-col-xs-order-13 {\n order: 13;\n}\n.ant-col-xs-12 {\n display: block;\n flex: 0 0 50%;\n max-width: 50%;\n}\n.ant-col-xs-push-12 {\n left: 50%;\n}\n.ant-col-xs-pull-12 {\n right: 50%;\n}\n.ant-col-xs-offset-12 {\n margin-left: 50%;\n}\n.ant-col-xs-order-12 {\n order: 12;\n}\n.ant-col-xs-11 {\n display: block;\n flex: 0 0 45.83333333%;\n max-width: 45.83333333%;\n}\n.ant-col-xs-push-11 {\n left: 45.83333333%;\n}\n.ant-col-xs-pull-11 {\n right: 45.83333333%;\n}\n.ant-col-xs-offset-11 {\n margin-left: 45.83333333%;\n}\n.ant-col-xs-order-11 {\n order: 11;\n}\n.ant-col-xs-10 {\n display: block;\n flex: 0 0 41.66666667%;\n max-width: 41.66666667%;\n}\n.ant-col-xs-push-10 {\n left: 41.66666667%;\n}\n.ant-col-xs-pull-10 {\n right: 41.66666667%;\n}\n.ant-col-xs-offset-10 {\n margin-left: 41.66666667%;\n}\n.ant-col-xs-order-10 {\n order: 10;\n}\n.ant-col-xs-9 {\n display: block;\n flex: 0 0 37.5%;\n max-width: 37.5%;\n}\n.ant-col-xs-push-9 {\n left: 37.5%;\n}\n.ant-col-xs-pull-9 {\n right: 37.5%;\n}\n.ant-col-xs-offset-9 {\n margin-left: 37.5%;\n}\n.ant-col-xs-order-9 {\n order: 9;\n}\n.ant-col-xs-8 {\n display: block;\n flex: 0 0 33.33333333%;\n max-width: 33.33333333%;\n}\n.ant-col-xs-push-8 {\n left: 33.33333333%;\n}\n.ant-col-xs-pull-8 {\n right: 33.33333333%;\n}\n.ant-col-xs-offset-8 {\n margin-left: 33.33333333%;\n}\n.ant-col-xs-order-8 {\n order: 8;\n}\n.ant-col-xs-7 {\n display: block;\n flex: 0 0 29.16666667%;\n max-width: 29.16666667%;\n}\n.ant-col-xs-push-7 {\n left: 29.16666667%;\n}\n.ant-col-xs-pull-7 {\n right: 29.16666667%;\n}\n.ant-col-xs-offset-7 {\n margin-left: 29.16666667%;\n}\n.ant-col-xs-order-7 {\n order: 7;\n}\n.ant-col-xs-6 {\n display: block;\n flex: 0 0 25%;\n max-width: 25%;\n}\n.ant-col-xs-push-6 {\n left: 25%;\n}\n.ant-col-xs-pull-6 {\n right: 25%;\n}\n.ant-col-xs-offset-6 {\n margin-left: 25%;\n}\n.ant-col-xs-order-6 {\n order: 6;\n}\n.ant-col-xs-5 {\n display: block;\n flex: 0 0 20.83333333%;\n max-width: 20.83333333%;\n}\n.ant-col-xs-push-5 {\n left: 20.83333333%;\n}\n.ant-col-xs-pull-5 {\n right: 20.83333333%;\n}\n.ant-col-xs-offset-5 {\n margin-left: 20.83333333%;\n}\n.ant-col-xs-order-5 {\n order: 5;\n}\n.ant-col-xs-4 {\n display: block;\n flex: 0 0 16.66666667%;\n max-width: 16.66666667%;\n}\n.ant-col-xs-push-4 {\n left: 16.66666667%;\n}\n.ant-col-xs-pull-4 {\n right: 16.66666667%;\n}\n.ant-col-xs-offset-4 {\n margin-left: 16.66666667%;\n}\n.ant-col-xs-order-4 {\n order: 4;\n}\n.ant-col-xs-3 {\n display: block;\n flex: 0 0 12.5%;\n max-width: 12.5%;\n}\n.ant-col-xs-push-3 {\n left: 12.5%;\n}\n.ant-col-xs-pull-3 {\n right: 12.5%;\n}\n.ant-col-xs-offset-3 {\n margin-left: 12.5%;\n}\n.ant-col-xs-order-3 {\n order: 3;\n}\n.ant-col-xs-2 {\n display: block;\n flex: 0 0 8.33333333%;\n max-width: 8.33333333%;\n}\n.ant-col-xs-push-2 {\n left: 8.33333333%;\n}\n.ant-col-xs-pull-2 {\n right: 8.33333333%;\n}\n.ant-col-xs-offset-2 {\n margin-left: 8.33333333%;\n}\n.ant-col-xs-order-2 {\n order: 2;\n}\n.ant-col-xs-1 {\n display: block;\n flex: 0 0 4.16666667%;\n max-width: 4.16666667%;\n}\n.ant-col-xs-push-1 {\n left: 4.16666667%;\n}\n.ant-col-xs-pull-1 {\n right: 4.16666667%;\n}\n.ant-col-xs-offset-1 {\n margin-left: 4.16666667%;\n}\n.ant-col-xs-order-1 {\n order: 1;\n}\n.ant-col-xs-0 {\n display: none;\n}\n.ant-col-push-0 {\n left: auto;\n}\n.ant-col-pull-0 {\n right: auto;\n}\n.ant-col-xs-push-0 {\n left: auto;\n}\n.ant-col-xs-pull-0 {\n right: auto;\n}\n.ant-col-xs-offset-0 {\n margin-left: 0;\n}\n.ant-col-xs-order-0 {\n order: 0;\n}\n.ant-col-push-0.ant-col-rtl {\n right: auto;\n}\n.ant-col-pull-0.ant-col-rtl {\n left: auto;\n}\n.ant-col-xs-push-0.ant-col-rtl {\n right: auto;\n}\n.ant-col-xs-pull-0.ant-col-rtl {\n left: auto;\n}\n.ant-col-xs-offset-0.ant-col-rtl {\n margin-right: 0;\n}\n.ant-col-xs-push-1.ant-col-rtl {\n right: 4.16666667%;\n left: auto;\n}\n.ant-col-xs-pull-1.ant-col-rtl {\n right: auto;\n left: 4.16666667%;\n}\n.ant-col-xs-offset-1.ant-col-rtl {\n margin-right: 4.16666667%;\n margin-left: 0;\n}\n.ant-col-xs-push-2.ant-col-rtl {\n right: 8.33333333%;\n left: auto;\n}\n.ant-col-xs-pull-2.ant-col-rtl {\n right: auto;\n left: 8.33333333%;\n}\n.ant-col-xs-offset-2.ant-col-rtl {\n margin-right: 8.33333333%;\n margin-left: 0;\n}\n.ant-col-xs-push-3.ant-col-rtl {\n right: 12.5%;\n left: auto;\n}\n.ant-col-xs-pull-3.ant-col-rtl {\n right: auto;\n left: 12.5%;\n}\n.ant-col-xs-offset-3.ant-col-rtl {\n margin-right: 12.5%;\n margin-left: 0;\n}\n.ant-col-xs-push-4.ant-col-rtl {\n right: 16.66666667%;\n left: auto;\n}\n.ant-col-xs-pull-4.ant-col-rtl {\n right: auto;\n left: 16.66666667%;\n}\n.ant-col-xs-offset-4.ant-col-rtl {\n margin-right: 16.66666667%;\n margin-left: 0;\n}\n.ant-col-xs-push-5.ant-col-rtl {\n right: 20.83333333%;\n left: auto;\n}\n.ant-col-xs-pull-5.ant-col-rtl {\n right: auto;\n left: 20.83333333%;\n}\n.ant-col-xs-offset-5.ant-col-rtl {\n margin-right: 20.83333333%;\n margin-left: 0;\n}\n.ant-col-xs-push-6.ant-col-rtl {\n right: 25%;\n left: auto;\n}\n.ant-col-xs-pull-6.ant-col-rtl {\n right: auto;\n left: 25%;\n}\n.ant-col-xs-offset-6.ant-col-rtl {\n margin-right: 25%;\n margin-left: 0;\n}\n.ant-col-xs-push-7.ant-col-rtl {\n right: 29.16666667%;\n left: auto;\n}\n.ant-col-xs-pull-7.ant-col-rtl {\n right: auto;\n left: 29.16666667%;\n}\n.ant-col-xs-offset-7.ant-col-rtl {\n margin-right: 29.16666667%;\n margin-left: 0;\n}\n.ant-col-xs-push-8.ant-col-rtl {\n right: 33.33333333%;\n left: auto;\n}\n.ant-col-xs-pull-8.ant-col-rtl {\n right: auto;\n left: 33.33333333%;\n}\n.ant-col-xs-offset-8.ant-col-rtl {\n margin-right: 33.33333333%;\n margin-left: 0;\n}\n.ant-col-xs-push-9.ant-col-rtl {\n right: 37.5%;\n left: auto;\n}\n.ant-col-xs-pull-9.ant-col-rtl {\n right: auto;\n left: 37.5%;\n}\n.ant-col-xs-offset-9.ant-col-rtl {\n margin-right: 37.5%;\n margin-left: 0;\n}\n.ant-col-xs-push-10.ant-col-rtl {\n right: 41.66666667%;\n left: auto;\n}\n.ant-col-xs-pull-10.ant-col-rtl {\n right: auto;\n left: 41.66666667%;\n}\n.ant-col-xs-offset-10.ant-col-rtl {\n margin-right: 41.66666667%;\n margin-left: 0;\n}\n.ant-col-xs-push-11.ant-col-rtl {\n right: 45.83333333%;\n left: auto;\n}\n.ant-col-xs-pull-11.ant-col-rtl {\n right: auto;\n left: 45.83333333%;\n}\n.ant-col-xs-offset-11.ant-col-rtl {\n margin-right: 45.83333333%;\n margin-left: 0;\n}\n.ant-col-xs-push-12.ant-col-rtl {\n right: 50%;\n left: auto;\n}\n.ant-col-xs-pull-12.ant-col-rtl {\n right: auto;\n left: 50%;\n}\n.ant-col-xs-offset-12.ant-col-rtl {\n margin-right: 50%;\n margin-left: 0;\n}\n.ant-col-xs-push-13.ant-col-rtl {\n right: 54.16666667%;\n left: auto;\n}\n.ant-col-xs-pull-13.ant-col-rtl {\n right: auto;\n left: 54.16666667%;\n}\n.ant-col-xs-offset-13.ant-col-rtl {\n margin-right: 54.16666667%;\n margin-left: 0;\n}\n.ant-col-xs-push-14.ant-col-rtl {\n right: 58.33333333%;\n left: auto;\n}\n.ant-col-xs-pull-14.ant-col-rtl {\n right: auto;\n left: 58.33333333%;\n}\n.ant-col-xs-offset-14.ant-col-rtl {\n margin-right: 58.33333333%;\n margin-left: 0;\n}\n.ant-col-xs-push-15.ant-col-rtl {\n right: 62.5%;\n left: auto;\n}\n.ant-col-xs-pull-15.ant-col-rtl {\n right: auto;\n left: 62.5%;\n}\n.ant-col-xs-offset-15.ant-col-rtl {\n margin-right: 62.5%;\n margin-left: 0;\n}\n.ant-col-xs-push-16.ant-col-rtl {\n right: 66.66666667%;\n left: auto;\n}\n.ant-col-xs-pull-16.ant-col-rtl {\n right: auto;\n left: 66.66666667%;\n}\n.ant-col-xs-offset-16.ant-col-rtl {\n margin-right: 66.66666667%;\n margin-left: 0;\n}\n.ant-col-xs-push-17.ant-col-rtl {\n right: 70.83333333%;\n left: auto;\n}\n.ant-col-xs-pull-17.ant-col-rtl {\n right: auto;\n left: 70.83333333%;\n}\n.ant-col-xs-offset-17.ant-col-rtl {\n margin-right: 70.83333333%;\n margin-left: 0;\n}\n.ant-col-xs-push-18.ant-col-rtl {\n right: 75%;\n left: auto;\n}\n.ant-col-xs-pull-18.ant-col-rtl {\n right: auto;\n left: 75%;\n}\n.ant-col-xs-offset-18.ant-col-rtl {\n margin-right: 75%;\n margin-left: 0;\n}\n.ant-col-xs-push-19.ant-col-rtl {\n right: 79.16666667%;\n left: auto;\n}\n.ant-col-xs-pull-19.ant-col-rtl {\n right: auto;\n left: 79.16666667%;\n}\n.ant-col-xs-offset-19.ant-col-rtl {\n margin-right: 79.16666667%;\n margin-left: 0;\n}\n.ant-col-xs-push-20.ant-col-rtl {\n right: 83.33333333%;\n left: auto;\n}\n.ant-col-xs-pull-20.ant-col-rtl {\n right: auto;\n left: 83.33333333%;\n}\n.ant-col-xs-offset-20.ant-col-rtl {\n margin-right: 83.33333333%;\n margin-left: 0;\n}\n.ant-col-xs-push-21.ant-col-rtl {\n right: 87.5%;\n left: auto;\n}\n.ant-col-xs-pull-21.ant-col-rtl {\n right: auto;\n left: 87.5%;\n}\n.ant-col-xs-offset-21.ant-col-rtl {\n margin-right: 87.5%;\n margin-left: 0;\n}\n.ant-col-xs-push-22.ant-col-rtl {\n right: 91.66666667%;\n left: auto;\n}\n.ant-col-xs-pull-22.ant-col-rtl {\n right: auto;\n left: 91.66666667%;\n}\n.ant-col-xs-offset-22.ant-col-rtl {\n margin-right: 91.66666667%;\n margin-left: 0;\n}\n.ant-col-xs-push-23.ant-col-rtl {\n right: 95.83333333%;\n left: auto;\n}\n.ant-col-xs-pull-23.ant-col-rtl {\n right: auto;\n left: 95.83333333%;\n}\n.ant-col-xs-offset-23.ant-col-rtl {\n margin-right: 95.83333333%;\n margin-left: 0;\n}\n.ant-col-xs-push-24.ant-col-rtl {\n right: 100%;\n left: auto;\n}\n.ant-col-xs-pull-24.ant-col-rtl {\n right: auto;\n left: 100%;\n}\n.ant-col-xs-offset-24.ant-col-rtl {\n margin-right: 100%;\n margin-left: 0;\n}\n@media (min-width: 576px) {\n .ant-col-sm-24 {\n display: block;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .ant-col-sm-push-24 {\n left: 100%;\n }\n .ant-col-sm-pull-24 {\n right: 100%;\n }\n .ant-col-sm-offset-24 {\n margin-left: 100%;\n }\n .ant-col-sm-order-24 {\n order: 24;\n }\n .ant-col-sm-23 {\n display: block;\n flex: 0 0 95.83333333%;\n max-width: 95.83333333%;\n }\n .ant-col-sm-push-23 {\n left: 95.83333333%;\n }\n .ant-col-sm-pull-23 {\n right: 95.83333333%;\n }\n .ant-col-sm-offset-23 {\n margin-left: 95.83333333%;\n }\n .ant-col-sm-order-23 {\n order: 23;\n }\n .ant-col-sm-22 {\n display: block;\n flex: 0 0 91.66666667%;\n max-width: 91.66666667%;\n }\n .ant-col-sm-push-22 {\n left: 91.66666667%;\n }\n .ant-col-sm-pull-22 {\n right: 91.66666667%;\n }\n .ant-col-sm-offset-22 {\n margin-left: 91.66666667%;\n }\n .ant-col-sm-order-22 {\n order: 22;\n }\n .ant-col-sm-21 {\n display: block;\n flex: 0 0 87.5%;\n max-width: 87.5%;\n }\n .ant-col-sm-push-21 {\n left: 87.5%;\n }\n .ant-col-sm-pull-21 {\n right: 87.5%;\n }\n .ant-col-sm-offset-21 {\n margin-left: 87.5%;\n }\n .ant-col-sm-order-21 {\n order: 21;\n }\n .ant-col-sm-20 {\n display: block;\n flex: 0 0 83.33333333%;\n max-width: 83.33333333%;\n }\n .ant-col-sm-push-20 {\n left: 83.33333333%;\n }\n .ant-col-sm-pull-20 {\n right: 83.33333333%;\n }\n .ant-col-sm-offset-20 {\n margin-left: 83.33333333%;\n }\n .ant-col-sm-order-20 {\n order: 20;\n }\n .ant-col-sm-19 {\n display: block;\n flex: 0 0 79.16666667%;\n max-width: 79.16666667%;\n }\n .ant-col-sm-push-19 {\n left: 79.16666667%;\n }\n .ant-col-sm-pull-19 {\n right: 79.16666667%;\n }\n .ant-col-sm-offset-19 {\n margin-left: 79.16666667%;\n }\n .ant-col-sm-order-19 {\n order: 19;\n }\n .ant-col-sm-18 {\n display: block;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .ant-col-sm-push-18 {\n left: 75%;\n }\n .ant-col-sm-pull-18 {\n right: 75%;\n }\n .ant-col-sm-offset-18 {\n margin-left: 75%;\n }\n .ant-col-sm-order-18 {\n order: 18;\n }\n .ant-col-sm-17 {\n display: block;\n flex: 0 0 70.83333333%;\n max-width: 70.83333333%;\n }\n .ant-col-sm-push-17 {\n left: 70.83333333%;\n }\n .ant-col-sm-pull-17 {\n right: 70.83333333%;\n }\n .ant-col-sm-offset-17 {\n margin-left: 70.83333333%;\n }\n .ant-col-sm-order-17 {\n order: 17;\n }\n .ant-col-sm-16 {\n display: block;\n flex: 0 0 66.66666667%;\n max-width: 66.66666667%;\n }\n .ant-col-sm-push-16 {\n left: 66.66666667%;\n }\n .ant-col-sm-pull-16 {\n right: 66.66666667%;\n }\n .ant-col-sm-offset-16 {\n margin-left: 66.66666667%;\n }\n .ant-col-sm-order-16 {\n order: 16;\n }\n .ant-col-sm-15 {\n display: block;\n flex: 0 0 62.5%;\n max-width: 62.5%;\n }\n .ant-col-sm-push-15 {\n left: 62.5%;\n }\n .ant-col-sm-pull-15 {\n right: 62.5%;\n }\n .ant-col-sm-offset-15 {\n margin-left: 62.5%;\n }\n .ant-col-sm-order-15 {\n order: 15;\n }\n .ant-col-sm-14 {\n display: block;\n flex: 0 0 58.33333333%;\n max-width: 58.33333333%;\n }\n .ant-col-sm-push-14 {\n left: 58.33333333%;\n }\n .ant-col-sm-pull-14 {\n right: 58.33333333%;\n }\n .ant-col-sm-offset-14 {\n margin-left: 58.33333333%;\n }\n .ant-col-sm-order-14 {\n order: 14;\n }\n .ant-col-sm-13 {\n display: block;\n flex: 0 0 54.16666667%;\n max-width: 54.16666667%;\n }\n .ant-col-sm-push-13 {\n left: 54.16666667%;\n }\n .ant-col-sm-pull-13 {\n right: 54.16666667%;\n }\n .ant-col-sm-offset-13 {\n margin-left: 54.16666667%;\n }\n .ant-col-sm-order-13 {\n order: 13;\n }\n .ant-col-sm-12 {\n display: block;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .ant-col-sm-push-12 {\n left: 50%;\n }\n .ant-col-sm-pull-12 {\n right: 50%;\n }\n .ant-col-sm-offset-12 {\n margin-left: 50%;\n }\n .ant-col-sm-order-12 {\n order: 12;\n }\n .ant-col-sm-11 {\n display: block;\n flex: 0 0 45.83333333%;\n max-width: 45.83333333%;\n }\n .ant-col-sm-push-11 {\n left: 45.83333333%;\n }\n .ant-col-sm-pull-11 {\n right: 45.83333333%;\n }\n .ant-col-sm-offset-11 {\n margin-left: 45.83333333%;\n }\n .ant-col-sm-order-11 {\n order: 11;\n }\n .ant-col-sm-10 {\n display: block;\n flex: 0 0 41.66666667%;\n max-width: 41.66666667%;\n }\n .ant-col-sm-push-10 {\n left: 41.66666667%;\n }\n .ant-col-sm-pull-10 {\n right: 41.66666667%;\n }\n .ant-col-sm-offset-10 {\n margin-left: 41.66666667%;\n }\n .ant-col-sm-order-10 {\n order: 10;\n }\n .ant-col-sm-9 {\n display: block;\n flex: 0 0 37.5%;\n max-width: 37.5%;\n }\n .ant-col-sm-push-9 {\n left: 37.5%;\n }\n .ant-col-sm-pull-9 {\n right: 37.5%;\n }\n .ant-col-sm-offset-9 {\n margin-left: 37.5%;\n }\n .ant-col-sm-order-9 {\n order: 9;\n }\n .ant-col-sm-8 {\n display: block;\n flex: 0 0 33.33333333%;\n max-width: 33.33333333%;\n }\n .ant-col-sm-push-8 {\n left: 33.33333333%;\n }\n .ant-col-sm-pull-8 {\n right: 33.33333333%;\n }\n .ant-col-sm-offset-8 {\n margin-left: 33.33333333%;\n }\n .ant-col-sm-order-8 {\n order: 8;\n }\n .ant-col-sm-7 {\n display: block;\n flex: 0 0 29.16666667%;\n max-width: 29.16666667%;\n }\n .ant-col-sm-push-7 {\n left: 29.16666667%;\n }\n .ant-col-sm-pull-7 {\n right: 29.16666667%;\n }\n .ant-col-sm-offset-7 {\n margin-left: 29.16666667%;\n }\n .ant-col-sm-order-7 {\n order: 7;\n }\n .ant-col-sm-6 {\n display: block;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .ant-col-sm-push-6 {\n left: 25%;\n }\n .ant-col-sm-pull-6 {\n right: 25%;\n }\n .ant-col-sm-offset-6 {\n margin-left: 25%;\n }\n .ant-col-sm-order-6 {\n order: 6;\n }\n .ant-col-sm-5 {\n display: block;\n flex: 0 0 20.83333333%;\n max-width: 20.83333333%;\n }\n .ant-col-sm-push-5 {\n left: 20.83333333%;\n }\n .ant-col-sm-pull-5 {\n right: 20.83333333%;\n }\n .ant-col-sm-offset-5 {\n margin-left: 20.83333333%;\n }\n .ant-col-sm-order-5 {\n order: 5;\n }\n .ant-col-sm-4 {\n display: block;\n flex: 0 0 16.66666667%;\n max-width: 16.66666667%;\n }\n .ant-col-sm-push-4 {\n left: 16.66666667%;\n }\n .ant-col-sm-pull-4 {\n right: 16.66666667%;\n }\n .ant-col-sm-offset-4 {\n margin-left: 16.66666667%;\n }\n .ant-col-sm-order-4 {\n order: 4;\n }\n .ant-col-sm-3 {\n display: block;\n flex: 0 0 12.5%;\n max-width: 12.5%;\n }\n .ant-col-sm-push-3 {\n left: 12.5%;\n }\n .ant-col-sm-pull-3 {\n right: 12.5%;\n }\n .ant-col-sm-offset-3 {\n margin-left: 12.5%;\n }\n .ant-col-sm-order-3 {\n order: 3;\n }\n .ant-col-sm-2 {\n display: block;\n flex: 0 0 8.33333333%;\n max-width: 8.33333333%;\n }\n .ant-col-sm-push-2 {\n left: 8.33333333%;\n }\n .ant-col-sm-pull-2 {\n right: 8.33333333%;\n }\n .ant-col-sm-offset-2 {\n margin-left: 8.33333333%;\n }\n .ant-col-sm-order-2 {\n order: 2;\n }\n .ant-col-sm-1 {\n display: block;\n flex: 0 0 4.16666667%;\n max-width: 4.16666667%;\n }\n .ant-col-sm-push-1 {\n left: 4.16666667%;\n }\n .ant-col-sm-pull-1 {\n right: 4.16666667%;\n }\n .ant-col-sm-offset-1 {\n margin-left: 4.16666667%;\n }\n .ant-col-sm-order-1 {\n order: 1;\n }\n .ant-col-sm-0 {\n display: none;\n }\n .ant-col-push-0 {\n left: auto;\n }\n .ant-col-pull-0 {\n right: auto;\n }\n .ant-col-sm-push-0 {\n left: auto;\n }\n .ant-col-sm-pull-0 {\n right: auto;\n }\n .ant-col-sm-offset-0 {\n margin-left: 0;\n }\n .ant-col-sm-order-0 {\n order: 0;\n }\n .ant-col-push-0.ant-col-rtl {\n right: auto;\n }\n .ant-col-pull-0.ant-col-rtl {\n left: auto;\n }\n .ant-col-sm-push-0.ant-col-rtl {\n right: auto;\n }\n .ant-col-sm-pull-0.ant-col-rtl {\n left: auto;\n }\n .ant-col-sm-offset-0.ant-col-rtl {\n margin-right: 0;\n }\n .ant-col-sm-push-1.ant-col-rtl {\n right: 4.16666667%;\n left: auto;\n }\n .ant-col-sm-pull-1.ant-col-rtl {\n right: auto;\n left: 4.16666667%;\n }\n .ant-col-sm-offset-1.ant-col-rtl {\n margin-right: 4.16666667%;\n margin-left: 0;\n }\n .ant-col-sm-push-2.ant-col-rtl {\n right: 8.33333333%;\n left: auto;\n }\n .ant-col-sm-pull-2.ant-col-rtl {\n right: auto;\n left: 8.33333333%;\n }\n .ant-col-sm-offset-2.ant-col-rtl {\n margin-right: 8.33333333%;\n margin-left: 0;\n }\n .ant-col-sm-push-3.ant-col-rtl {\n right: 12.5%;\n left: auto;\n }\n .ant-col-sm-pull-3.ant-col-rtl {\n right: auto;\n left: 12.5%;\n }\n .ant-col-sm-offset-3.ant-col-rtl {\n margin-right: 12.5%;\n margin-left: 0;\n }\n .ant-col-sm-push-4.ant-col-rtl {\n right: 16.66666667%;\n left: auto;\n }\n .ant-col-sm-pull-4.ant-col-rtl {\n right: auto;\n left: 16.66666667%;\n }\n .ant-col-sm-offset-4.ant-col-rtl {\n margin-right: 16.66666667%;\n margin-left: 0;\n }\n .ant-col-sm-push-5.ant-col-rtl {\n right: 20.83333333%;\n left: auto;\n }\n .ant-col-sm-pull-5.ant-col-rtl {\n right: auto;\n left: 20.83333333%;\n }\n .ant-col-sm-offset-5.ant-col-rtl {\n margin-right: 20.83333333%;\n margin-left: 0;\n }\n .ant-col-sm-push-6.ant-col-rtl {\n right: 25%;\n left: auto;\n }\n .ant-col-sm-pull-6.ant-col-rtl {\n right: auto;\n left: 25%;\n }\n .ant-col-sm-offset-6.ant-col-rtl {\n margin-right: 25%;\n margin-left: 0;\n }\n .ant-col-sm-push-7.ant-col-rtl {\n right: 29.16666667%;\n left: auto;\n }\n .ant-col-sm-pull-7.ant-col-rtl {\n right: auto;\n left: 29.16666667%;\n }\n .ant-col-sm-offset-7.ant-col-rtl {\n margin-right: 29.16666667%;\n margin-left: 0;\n }\n .ant-col-sm-push-8.ant-col-rtl {\n right: 33.33333333%;\n left: auto;\n }\n .ant-col-sm-pull-8.ant-col-rtl {\n right: auto;\n left: 33.33333333%;\n }\n .ant-col-sm-offset-8.ant-col-rtl {\n margin-right: 33.33333333%;\n margin-left: 0;\n }\n .ant-col-sm-push-9.ant-col-rtl {\n right: 37.5%;\n left: auto;\n }\n .ant-col-sm-pull-9.ant-col-rtl {\n right: auto;\n left: 37.5%;\n }\n .ant-col-sm-offset-9.ant-col-rtl {\n margin-right: 37.5%;\n margin-left: 0;\n }\n .ant-col-sm-push-10.ant-col-rtl {\n right: 41.66666667%;\n left: auto;\n }\n .ant-col-sm-pull-10.ant-col-rtl {\n right: auto;\n left: 41.66666667%;\n }\n .ant-col-sm-offset-10.ant-col-rtl {\n margin-right: 41.66666667%;\n margin-left: 0;\n }\n .ant-col-sm-push-11.ant-col-rtl {\n right: 45.83333333%;\n left: auto;\n }\n .ant-col-sm-pull-11.ant-col-rtl {\n right: auto;\n left: 45.83333333%;\n }\n .ant-col-sm-offset-11.ant-col-rtl {\n margin-right: 45.83333333%;\n margin-left: 0;\n }\n .ant-col-sm-push-12.ant-col-rtl {\n right: 50%;\n left: auto;\n }\n .ant-col-sm-pull-12.ant-col-rtl {\n right: auto;\n left: 50%;\n }\n .ant-col-sm-offset-12.ant-col-rtl {\n margin-right: 50%;\n margin-left: 0;\n }\n .ant-col-sm-push-13.ant-col-rtl {\n right: 54.16666667%;\n left: auto;\n }\n .ant-col-sm-pull-13.ant-col-rtl {\n right: auto;\n left: 54.16666667%;\n }\n .ant-col-sm-offset-13.ant-col-rtl {\n margin-right: 54.16666667%;\n margin-left: 0;\n }\n .ant-col-sm-push-14.ant-col-rtl {\n right: 58.33333333%;\n left: auto;\n }\n .ant-col-sm-pull-14.ant-col-rtl {\n right: auto;\n left: 58.33333333%;\n }\n .ant-col-sm-offset-14.ant-col-rtl {\n margin-right: 58.33333333%;\n margin-left: 0;\n }\n .ant-col-sm-push-15.ant-col-rtl {\n right: 62.5%;\n left: auto;\n }\n .ant-col-sm-pull-15.ant-col-rtl {\n right: auto;\n left: 62.5%;\n }\n .ant-col-sm-offset-15.ant-col-rtl {\n margin-right: 62.5%;\n margin-left: 0;\n }\n .ant-col-sm-push-16.ant-col-rtl {\n right: 66.66666667%;\n left: auto;\n }\n .ant-col-sm-pull-16.ant-col-rtl {\n right: auto;\n left: 66.66666667%;\n }\n .ant-col-sm-offset-16.ant-col-rtl {\n margin-right: 66.66666667%;\n margin-left: 0;\n }\n .ant-col-sm-push-17.ant-col-rtl {\n right: 70.83333333%;\n left: auto;\n }\n .ant-col-sm-pull-17.ant-col-rtl {\n right: auto;\n left: 70.83333333%;\n }\n .ant-col-sm-offset-17.ant-col-rtl {\n margin-right: 70.83333333%;\n margin-left: 0;\n }\n .ant-col-sm-push-18.ant-col-rtl {\n right: 75%;\n left: auto;\n }\n .ant-col-sm-pull-18.ant-col-rtl {\n right: auto;\n left: 75%;\n }\n .ant-col-sm-offset-18.ant-col-rtl {\n margin-right: 75%;\n margin-left: 0;\n }\n .ant-col-sm-push-19.ant-col-rtl {\n right: 79.16666667%;\n left: auto;\n }\n .ant-col-sm-pull-19.ant-col-rtl {\n right: auto;\n left: 79.16666667%;\n }\n .ant-col-sm-offset-19.ant-col-rtl {\n margin-right: 79.16666667%;\n margin-left: 0;\n }\n .ant-col-sm-push-20.ant-col-rtl {\n right: 83.33333333%;\n left: auto;\n }\n .ant-col-sm-pull-20.ant-col-rtl {\n right: auto;\n left: 83.33333333%;\n }\n .ant-col-sm-offset-20.ant-col-rtl {\n margin-right: 83.33333333%;\n margin-left: 0;\n }\n .ant-col-sm-push-21.ant-col-rtl {\n right: 87.5%;\n left: auto;\n }\n .ant-col-sm-pull-21.ant-col-rtl {\n right: auto;\n left: 87.5%;\n }\n .ant-col-sm-offset-21.ant-col-rtl {\n margin-right: 87.5%;\n margin-left: 0;\n }\n .ant-col-sm-push-22.ant-col-rtl {\n right: 91.66666667%;\n left: auto;\n }\n .ant-col-sm-pull-22.ant-col-rtl {\n right: auto;\n left: 91.66666667%;\n }\n .ant-col-sm-offset-22.ant-col-rtl {\n margin-right: 91.66666667%;\n margin-left: 0;\n }\n .ant-col-sm-push-23.ant-col-rtl {\n right: 95.83333333%;\n left: auto;\n }\n .ant-col-sm-pull-23.ant-col-rtl {\n right: auto;\n left: 95.83333333%;\n }\n .ant-col-sm-offset-23.ant-col-rtl {\n margin-right: 95.83333333%;\n margin-left: 0;\n }\n .ant-col-sm-push-24.ant-col-rtl {\n right: 100%;\n left: auto;\n }\n .ant-col-sm-pull-24.ant-col-rtl {\n right: auto;\n left: 100%;\n }\n .ant-col-sm-offset-24.ant-col-rtl {\n margin-right: 100%;\n margin-left: 0;\n }\n}\n@media (min-width: 768px) {\n .ant-col-md-24 {\n display: block;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .ant-col-md-push-24 {\n left: 100%;\n }\n .ant-col-md-pull-24 {\n right: 100%;\n }\n .ant-col-md-offset-24 {\n margin-left: 100%;\n }\n .ant-col-md-order-24 {\n order: 24;\n }\n .ant-col-md-23 {\n display: block;\n flex: 0 0 95.83333333%;\n max-width: 95.83333333%;\n }\n .ant-col-md-push-23 {\n left: 95.83333333%;\n }\n .ant-col-md-pull-23 {\n right: 95.83333333%;\n }\n .ant-col-md-offset-23 {\n margin-left: 95.83333333%;\n }\n .ant-col-md-order-23 {\n order: 23;\n }\n .ant-col-md-22 {\n display: block;\n flex: 0 0 91.66666667%;\n max-width: 91.66666667%;\n }\n .ant-col-md-push-22 {\n left: 91.66666667%;\n }\n .ant-col-md-pull-22 {\n right: 91.66666667%;\n }\n .ant-col-md-offset-22 {\n margin-left: 91.66666667%;\n }\n .ant-col-md-order-22 {\n order: 22;\n }\n .ant-col-md-21 {\n display: block;\n flex: 0 0 87.5%;\n max-width: 87.5%;\n }\n .ant-col-md-push-21 {\n left: 87.5%;\n }\n .ant-col-md-pull-21 {\n right: 87.5%;\n }\n .ant-col-md-offset-21 {\n margin-left: 87.5%;\n }\n .ant-col-md-order-21 {\n order: 21;\n }\n .ant-col-md-20 {\n display: block;\n flex: 0 0 83.33333333%;\n max-width: 83.33333333%;\n }\n .ant-col-md-push-20 {\n left: 83.33333333%;\n }\n .ant-col-md-pull-20 {\n right: 83.33333333%;\n }\n .ant-col-md-offset-20 {\n margin-left: 83.33333333%;\n }\n .ant-col-md-order-20 {\n order: 20;\n }\n .ant-col-md-19 {\n display: block;\n flex: 0 0 79.16666667%;\n max-width: 79.16666667%;\n }\n .ant-col-md-push-19 {\n left: 79.16666667%;\n }\n .ant-col-md-pull-19 {\n right: 79.16666667%;\n }\n .ant-col-md-offset-19 {\n margin-left: 79.16666667%;\n }\n .ant-col-md-order-19 {\n order: 19;\n }\n .ant-col-md-18 {\n display: block;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .ant-col-md-push-18 {\n left: 75%;\n }\n .ant-col-md-pull-18 {\n right: 75%;\n }\n .ant-col-md-offset-18 {\n margin-left: 75%;\n }\n .ant-col-md-order-18 {\n order: 18;\n }\n .ant-col-md-17 {\n display: block;\n flex: 0 0 70.83333333%;\n max-width: 70.83333333%;\n }\n .ant-col-md-push-17 {\n left: 70.83333333%;\n }\n .ant-col-md-pull-17 {\n right: 70.83333333%;\n }\n .ant-col-md-offset-17 {\n margin-left: 70.83333333%;\n }\n .ant-col-md-order-17 {\n order: 17;\n }\n .ant-col-md-16 {\n display: block;\n flex: 0 0 66.66666667%;\n max-width: 66.66666667%;\n }\n .ant-col-md-push-16 {\n left: 66.66666667%;\n }\n .ant-col-md-pull-16 {\n right: 66.66666667%;\n }\n .ant-col-md-offset-16 {\n margin-left: 66.66666667%;\n }\n .ant-col-md-order-16 {\n order: 16;\n }\n .ant-col-md-15 {\n display: block;\n flex: 0 0 62.5%;\n max-width: 62.5%;\n }\n .ant-col-md-push-15 {\n left: 62.5%;\n }\n .ant-col-md-pull-15 {\n right: 62.5%;\n }\n .ant-col-md-offset-15 {\n margin-left: 62.5%;\n }\n .ant-col-md-order-15 {\n order: 15;\n }\n .ant-col-md-14 {\n display: block;\n flex: 0 0 58.33333333%;\n max-width: 58.33333333%;\n }\n .ant-col-md-push-14 {\n left: 58.33333333%;\n }\n .ant-col-md-pull-14 {\n right: 58.33333333%;\n }\n .ant-col-md-offset-14 {\n margin-left: 58.33333333%;\n }\n .ant-col-md-order-14 {\n order: 14;\n }\n .ant-col-md-13 {\n display: block;\n flex: 0 0 54.16666667%;\n max-width: 54.16666667%;\n }\n .ant-col-md-push-13 {\n left: 54.16666667%;\n }\n .ant-col-md-pull-13 {\n right: 54.16666667%;\n }\n .ant-col-md-offset-13 {\n margin-left: 54.16666667%;\n }\n .ant-col-md-order-13 {\n order: 13;\n }\n .ant-col-md-12 {\n display: block;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .ant-col-md-push-12 {\n left: 50%;\n }\n .ant-col-md-pull-12 {\n right: 50%;\n }\n .ant-col-md-offset-12 {\n margin-left: 50%;\n }\n .ant-col-md-order-12 {\n order: 12;\n }\n .ant-col-md-11 {\n display: block;\n flex: 0 0 45.83333333%;\n max-width: 45.83333333%;\n }\n .ant-col-md-push-11 {\n left: 45.83333333%;\n }\n .ant-col-md-pull-11 {\n right: 45.83333333%;\n }\n .ant-col-md-offset-11 {\n margin-left: 45.83333333%;\n }\n .ant-col-md-order-11 {\n order: 11;\n }\n .ant-col-md-10 {\n display: block;\n flex: 0 0 41.66666667%;\n max-width: 41.66666667%;\n }\n .ant-col-md-push-10 {\n left: 41.66666667%;\n }\n .ant-col-md-pull-10 {\n right: 41.66666667%;\n }\n .ant-col-md-offset-10 {\n margin-left: 41.66666667%;\n }\n .ant-col-md-order-10 {\n order: 10;\n }\n .ant-col-md-9 {\n display: block;\n flex: 0 0 37.5%;\n max-width: 37.5%;\n }\n .ant-col-md-push-9 {\n left: 37.5%;\n }\n .ant-col-md-pull-9 {\n right: 37.5%;\n }\n .ant-col-md-offset-9 {\n margin-left: 37.5%;\n }\n .ant-col-md-order-9 {\n order: 9;\n }\n .ant-col-md-8 {\n display: block;\n flex: 0 0 33.33333333%;\n max-width: 33.33333333%;\n }\n .ant-col-md-push-8 {\n left: 33.33333333%;\n }\n .ant-col-md-pull-8 {\n right: 33.33333333%;\n }\n .ant-col-md-offset-8 {\n margin-left: 33.33333333%;\n }\n .ant-col-md-order-8 {\n order: 8;\n }\n .ant-col-md-7 {\n display: block;\n flex: 0 0 29.16666667%;\n max-width: 29.16666667%;\n }\n .ant-col-md-push-7 {\n left: 29.16666667%;\n }\n .ant-col-md-pull-7 {\n right: 29.16666667%;\n }\n .ant-col-md-offset-7 {\n margin-left: 29.16666667%;\n }\n .ant-col-md-order-7 {\n order: 7;\n }\n .ant-col-md-6 {\n display: block;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .ant-col-md-push-6 {\n left: 25%;\n }\n .ant-col-md-pull-6 {\n right: 25%;\n }\n .ant-col-md-offset-6 {\n margin-left: 25%;\n }\n .ant-col-md-order-6 {\n order: 6;\n }\n .ant-col-md-5 {\n display: block;\n flex: 0 0 20.83333333%;\n max-width: 20.83333333%;\n }\n .ant-col-md-push-5 {\n left: 20.83333333%;\n }\n .ant-col-md-pull-5 {\n right: 20.83333333%;\n }\n .ant-col-md-offset-5 {\n margin-left: 20.83333333%;\n }\n .ant-col-md-order-5 {\n order: 5;\n }\n .ant-col-md-4 {\n display: block;\n flex: 0 0 16.66666667%;\n max-width: 16.66666667%;\n }\n .ant-col-md-push-4 {\n left: 16.66666667%;\n }\n .ant-col-md-pull-4 {\n right: 16.66666667%;\n }\n .ant-col-md-offset-4 {\n margin-left: 16.66666667%;\n }\n .ant-col-md-order-4 {\n order: 4;\n }\n .ant-col-md-3 {\n display: block;\n flex: 0 0 12.5%;\n max-width: 12.5%;\n }\n .ant-col-md-push-3 {\n left: 12.5%;\n }\n .ant-col-md-pull-3 {\n right: 12.5%;\n }\n .ant-col-md-offset-3 {\n margin-left: 12.5%;\n }\n .ant-col-md-order-3 {\n order: 3;\n }\n .ant-col-md-2 {\n display: block;\n flex: 0 0 8.33333333%;\n max-width: 8.33333333%;\n }\n .ant-col-md-push-2 {\n left: 8.33333333%;\n }\n .ant-col-md-pull-2 {\n right: 8.33333333%;\n }\n .ant-col-md-offset-2 {\n margin-left: 8.33333333%;\n }\n .ant-col-md-order-2 {\n order: 2;\n }\n .ant-col-md-1 {\n display: block;\n flex: 0 0 4.16666667%;\n max-width: 4.16666667%;\n }\n .ant-col-md-push-1 {\n left: 4.16666667%;\n }\n .ant-col-md-pull-1 {\n right: 4.16666667%;\n }\n .ant-col-md-offset-1 {\n margin-left: 4.16666667%;\n }\n .ant-col-md-order-1 {\n order: 1;\n }\n .ant-col-md-0 {\n display: none;\n }\n .ant-col-push-0 {\n left: auto;\n }\n .ant-col-pull-0 {\n right: auto;\n }\n .ant-col-md-push-0 {\n left: auto;\n }\n .ant-col-md-pull-0 {\n right: auto;\n }\n .ant-col-md-offset-0 {\n margin-left: 0;\n }\n .ant-col-md-order-0 {\n order: 0;\n }\n .ant-col-push-0.ant-col-rtl {\n right: auto;\n }\n .ant-col-pull-0.ant-col-rtl {\n left: auto;\n }\n .ant-col-md-push-0.ant-col-rtl {\n right: auto;\n }\n .ant-col-md-pull-0.ant-col-rtl {\n left: auto;\n }\n .ant-col-md-offset-0.ant-col-rtl {\n margin-right: 0;\n }\n .ant-col-md-push-1.ant-col-rtl {\n right: 4.16666667%;\n left: auto;\n }\n .ant-col-md-pull-1.ant-col-rtl {\n right: auto;\n left: 4.16666667%;\n }\n .ant-col-md-offset-1.ant-col-rtl {\n margin-right: 4.16666667%;\n margin-left: 0;\n }\n .ant-col-md-push-2.ant-col-rtl {\n right: 8.33333333%;\n left: auto;\n }\n .ant-col-md-pull-2.ant-col-rtl {\n right: auto;\n left: 8.33333333%;\n }\n .ant-col-md-offset-2.ant-col-rtl {\n margin-right: 8.33333333%;\n margin-left: 0;\n }\n .ant-col-md-push-3.ant-col-rtl {\n right: 12.5%;\n left: auto;\n }\n .ant-col-md-pull-3.ant-col-rtl {\n right: auto;\n left: 12.5%;\n }\n .ant-col-md-offset-3.ant-col-rtl {\n margin-right: 12.5%;\n margin-left: 0;\n }\n .ant-col-md-push-4.ant-col-rtl {\n right: 16.66666667%;\n left: auto;\n }\n .ant-col-md-pull-4.ant-col-rtl {\n right: auto;\n left: 16.66666667%;\n }\n .ant-col-md-offset-4.ant-col-rtl {\n margin-right: 16.66666667%;\n margin-left: 0;\n }\n .ant-col-md-push-5.ant-col-rtl {\n right: 20.83333333%;\n left: auto;\n }\n .ant-col-md-pull-5.ant-col-rtl {\n right: auto;\n left: 20.83333333%;\n }\n .ant-col-md-offset-5.ant-col-rtl {\n margin-right: 20.83333333%;\n margin-left: 0;\n }\n .ant-col-md-push-6.ant-col-rtl {\n right: 25%;\n left: auto;\n }\n .ant-col-md-pull-6.ant-col-rtl {\n right: auto;\n left: 25%;\n }\n .ant-col-md-offset-6.ant-col-rtl {\n margin-right: 25%;\n margin-left: 0;\n }\n .ant-col-md-push-7.ant-col-rtl {\n right: 29.16666667%;\n left: auto;\n }\n .ant-col-md-pull-7.ant-col-rtl {\n right: auto;\n left: 29.16666667%;\n }\n .ant-col-md-offset-7.ant-col-rtl {\n margin-right: 29.16666667%;\n margin-left: 0;\n }\n .ant-col-md-push-8.ant-col-rtl {\n right: 33.33333333%;\n left: auto;\n }\n .ant-col-md-pull-8.ant-col-rtl {\n right: auto;\n left: 33.33333333%;\n }\n .ant-col-md-offset-8.ant-col-rtl {\n margin-right: 33.33333333%;\n margin-left: 0;\n }\n .ant-col-md-push-9.ant-col-rtl {\n right: 37.5%;\n left: auto;\n }\n .ant-col-md-pull-9.ant-col-rtl {\n right: auto;\n left: 37.5%;\n }\n .ant-col-md-offset-9.ant-col-rtl {\n margin-right: 37.5%;\n margin-left: 0;\n }\n .ant-col-md-push-10.ant-col-rtl {\n right: 41.66666667%;\n left: auto;\n }\n .ant-col-md-pull-10.ant-col-rtl {\n right: auto;\n left: 41.66666667%;\n }\n .ant-col-md-offset-10.ant-col-rtl {\n margin-right: 41.66666667%;\n margin-left: 0;\n }\n .ant-col-md-push-11.ant-col-rtl {\n right: 45.83333333%;\n left: auto;\n }\n .ant-col-md-pull-11.ant-col-rtl {\n right: auto;\n left: 45.83333333%;\n }\n .ant-col-md-offset-11.ant-col-rtl {\n margin-right: 45.83333333%;\n margin-left: 0;\n }\n .ant-col-md-push-12.ant-col-rtl {\n right: 50%;\n left: auto;\n }\n .ant-col-md-pull-12.ant-col-rtl {\n right: auto;\n left: 50%;\n }\n .ant-col-md-offset-12.ant-col-rtl {\n margin-right: 50%;\n margin-left: 0;\n }\n .ant-col-md-push-13.ant-col-rtl {\n right: 54.16666667%;\n left: auto;\n }\n .ant-col-md-pull-13.ant-col-rtl {\n right: auto;\n left: 54.16666667%;\n }\n .ant-col-md-offset-13.ant-col-rtl {\n margin-right: 54.16666667%;\n margin-left: 0;\n }\n .ant-col-md-push-14.ant-col-rtl {\n right: 58.33333333%;\n left: auto;\n }\n .ant-col-md-pull-14.ant-col-rtl {\n right: auto;\n left: 58.33333333%;\n }\n .ant-col-md-offset-14.ant-col-rtl {\n margin-right: 58.33333333%;\n margin-left: 0;\n }\n .ant-col-md-push-15.ant-col-rtl {\n right: 62.5%;\n left: auto;\n }\n .ant-col-md-pull-15.ant-col-rtl {\n right: auto;\n left: 62.5%;\n }\n .ant-col-md-offset-15.ant-col-rtl {\n margin-right: 62.5%;\n margin-left: 0;\n }\n .ant-col-md-push-16.ant-col-rtl {\n right: 66.66666667%;\n left: auto;\n }\n .ant-col-md-pull-16.ant-col-rtl {\n right: auto;\n left: 66.66666667%;\n }\n .ant-col-md-offset-16.ant-col-rtl {\n margin-right: 66.66666667%;\n margin-left: 0;\n }\n .ant-col-md-push-17.ant-col-rtl {\n right: 70.83333333%;\n left: auto;\n }\n .ant-col-md-pull-17.ant-col-rtl {\n right: auto;\n left: 70.83333333%;\n }\n .ant-col-md-offset-17.ant-col-rtl {\n margin-right: 70.83333333%;\n margin-left: 0;\n }\n .ant-col-md-push-18.ant-col-rtl {\n right: 75%;\n left: auto;\n }\n .ant-col-md-pull-18.ant-col-rtl {\n right: auto;\n left: 75%;\n }\n .ant-col-md-offset-18.ant-col-rtl {\n margin-right: 75%;\n margin-left: 0;\n }\n .ant-col-md-push-19.ant-col-rtl {\n right: 79.16666667%;\n left: auto;\n }\n .ant-col-md-pull-19.ant-col-rtl {\n right: auto;\n left: 79.16666667%;\n }\n .ant-col-md-offset-19.ant-col-rtl {\n margin-right: 79.16666667%;\n margin-left: 0;\n }\n .ant-col-md-push-20.ant-col-rtl {\n right: 83.33333333%;\n left: auto;\n }\n .ant-col-md-pull-20.ant-col-rtl {\n right: auto;\n left: 83.33333333%;\n }\n .ant-col-md-offset-20.ant-col-rtl {\n margin-right: 83.33333333%;\n margin-left: 0;\n }\n .ant-col-md-push-21.ant-col-rtl {\n right: 87.5%;\n left: auto;\n }\n .ant-col-md-pull-21.ant-col-rtl {\n right: auto;\n left: 87.5%;\n }\n .ant-col-md-offset-21.ant-col-rtl {\n margin-right: 87.5%;\n margin-left: 0;\n }\n .ant-col-md-push-22.ant-col-rtl {\n right: 91.66666667%;\n left: auto;\n }\n .ant-col-md-pull-22.ant-col-rtl {\n right: auto;\n left: 91.66666667%;\n }\n .ant-col-md-offset-22.ant-col-rtl {\n margin-right: 91.66666667%;\n margin-left: 0;\n }\n .ant-col-md-push-23.ant-col-rtl {\n right: 95.83333333%;\n left: auto;\n }\n .ant-col-md-pull-23.ant-col-rtl {\n right: auto;\n left: 95.83333333%;\n }\n .ant-col-md-offset-23.ant-col-rtl {\n margin-right: 95.83333333%;\n margin-left: 0;\n }\n .ant-col-md-push-24.ant-col-rtl {\n right: 100%;\n left: auto;\n }\n .ant-col-md-pull-24.ant-col-rtl {\n right: auto;\n left: 100%;\n }\n .ant-col-md-offset-24.ant-col-rtl {\n margin-right: 100%;\n margin-left: 0;\n }\n}\n@media (min-width: 992px) {\n .ant-col-lg-24 {\n display: block;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .ant-col-lg-push-24 {\n left: 100%;\n }\n .ant-col-lg-pull-24 {\n right: 100%;\n }\n .ant-col-lg-offset-24 {\n margin-left: 100%;\n }\n .ant-col-lg-order-24 {\n order: 24;\n }\n .ant-col-lg-23 {\n display: block;\n flex: 0 0 95.83333333%;\n max-width: 95.83333333%;\n }\n .ant-col-lg-push-23 {\n left: 95.83333333%;\n }\n .ant-col-lg-pull-23 {\n right: 95.83333333%;\n }\n .ant-col-lg-offset-23 {\n margin-left: 95.83333333%;\n }\n .ant-col-lg-order-23 {\n order: 23;\n }\n .ant-col-lg-22 {\n display: block;\n flex: 0 0 91.66666667%;\n max-width: 91.66666667%;\n }\n .ant-col-lg-push-22 {\n left: 91.66666667%;\n }\n .ant-col-lg-pull-22 {\n right: 91.66666667%;\n }\n .ant-col-lg-offset-22 {\n margin-left: 91.66666667%;\n }\n .ant-col-lg-order-22 {\n order: 22;\n }\n .ant-col-lg-21 {\n display: block;\n flex: 0 0 87.5%;\n max-width: 87.5%;\n }\n .ant-col-lg-push-21 {\n left: 87.5%;\n }\n .ant-col-lg-pull-21 {\n right: 87.5%;\n }\n .ant-col-lg-offset-21 {\n margin-left: 87.5%;\n }\n .ant-col-lg-order-21 {\n order: 21;\n }\n .ant-col-lg-20 {\n display: block;\n flex: 0 0 83.33333333%;\n max-width: 83.33333333%;\n }\n .ant-col-lg-push-20 {\n left: 83.33333333%;\n }\n .ant-col-lg-pull-20 {\n right: 83.33333333%;\n }\n .ant-col-lg-offset-20 {\n margin-left: 83.33333333%;\n }\n .ant-col-lg-order-20 {\n order: 20;\n }\n .ant-col-lg-19 {\n display: block;\n flex: 0 0 79.16666667%;\n max-width: 79.16666667%;\n }\n .ant-col-lg-push-19 {\n left: 79.16666667%;\n }\n .ant-col-lg-pull-19 {\n right: 79.16666667%;\n }\n .ant-col-lg-offset-19 {\n margin-left: 79.16666667%;\n }\n .ant-col-lg-order-19 {\n order: 19;\n }\n .ant-col-lg-18 {\n display: block;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .ant-col-lg-push-18 {\n left: 75%;\n }\n .ant-col-lg-pull-18 {\n right: 75%;\n }\n .ant-col-lg-offset-18 {\n margin-left: 75%;\n }\n .ant-col-lg-order-18 {\n order: 18;\n }\n .ant-col-lg-17 {\n display: block;\n flex: 0 0 70.83333333%;\n max-width: 70.83333333%;\n }\n .ant-col-lg-push-17 {\n left: 70.83333333%;\n }\n .ant-col-lg-pull-17 {\n right: 70.83333333%;\n }\n .ant-col-lg-offset-17 {\n margin-left: 70.83333333%;\n }\n .ant-col-lg-order-17 {\n order: 17;\n }\n .ant-col-lg-16 {\n display: block;\n flex: 0 0 66.66666667%;\n max-width: 66.66666667%;\n }\n .ant-col-lg-push-16 {\n left: 66.66666667%;\n }\n .ant-col-lg-pull-16 {\n right: 66.66666667%;\n }\n .ant-col-lg-offset-16 {\n margin-left: 66.66666667%;\n }\n .ant-col-lg-order-16 {\n order: 16;\n }\n .ant-col-lg-15 {\n display: block;\n flex: 0 0 62.5%;\n max-width: 62.5%;\n }\n .ant-col-lg-push-15 {\n left: 62.5%;\n }\n .ant-col-lg-pull-15 {\n right: 62.5%;\n }\n .ant-col-lg-offset-15 {\n margin-left: 62.5%;\n }\n .ant-col-lg-order-15 {\n order: 15;\n }\n .ant-col-lg-14 {\n display: block;\n flex: 0 0 58.33333333%;\n max-width: 58.33333333%;\n }\n .ant-col-lg-push-14 {\n left: 58.33333333%;\n }\n .ant-col-lg-pull-14 {\n right: 58.33333333%;\n }\n .ant-col-lg-offset-14 {\n margin-left: 58.33333333%;\n }\n .ant-col-lg-order-14 {\n order: 14;\n }\n .ant-col-lg-13 {\n display: block;\n flex: 0 0 54.16666667%;\n max-width: 54.16666667%;\n }\n .ant-col-lg-push-13 {\n left: 54.16666667%;\n }\n .ant-col-lg-pull-13 {\n right: 54.16666667%;\n }\n .ant-col-lg-offset-13 {\n margin-left: 54.16666667%;\n }\n .ant-col-lg-order-13 {\n order: 13;\n }\n .ant-col-lg-12 {\n display: block;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .ant-col-lg-push-12 {\n left: 50%;\n }\n .ant-col-lg-pull-12 {\n right: 50%;\n }\n .ant-col-lg-offset-12 {\n margin-left: 50%;\n }\n .ant-col-lg-order-12 {\n order: 12;\n }\n .ant-col-lg-11 {\n display: block;\n flex: 0 0 45.83333333%;\n max-width: 45.83333333%;\n }\n .ant-col-lg-push-11 {\n left: 45.83333333%;\n }\n .ant-col-lg-pull-11 {\n right: 45.83333333%;\n }\n .ant-col-lg-offset-11 {\n margin-left: 45.83333333%;\n }\n .ant-col-lg-order-11 {\n order: 11;\n }\n .ant-col-lg-10 {\n display: block;\n flex: 0 0 41.66666667%;\n max-width: 41.66666667%;\n }\n .ant-col-lg-push-10 {\n left: 41.66666667%;\n }\n .ant-col-lg-pull-10 {\n right: 41.66666667%;\n }\n .ant-col-lg-offset-10 {\n margin-left: 41.66666667%;\n }\n .ant-col-lg-order-10 {\n order: 10;\n }\n .ant-col-lg-9 {\n display: block;\n flex: 0 0 37.5%;\n max-width: 37.5%;\n }\n .ant-col-lg-push-9 {\n left: 37.5%;\n }\n .ant-col-lg-pull-9 {\n right: 37.5%;\n }\n .ant-col-lg-offset-9 {\n margin-left: 37.5%;\n }\n .ant-col-lg-order-9 {\n order: 9;\n }\n .ant-col-lg-8 {\n display: block;\n flex: 0 0 33.33333333%;\n max-width: 33.33333333%;\n }\n .ant-col-lg-push-8 {\n left: 33.33333333%;\n }\n .ant-col-lg-pull-8 {\n right: 33.33333333%;\n }\n .ant-col-lg-offset-8 {\n margin-left: 33.33333333%;\n }\n .ant-col-lg-order-8 {\n order: 8;\n }\n .ant-col-lg-7 {\n display: block;\n flex: 0 0 29.16666667%;\n max-width: 29.16666667%;\n }\n .ant-col-lg-push-7 {\n left: 29.16666667%;\n }\n .ant-col-lg-pull-7 {\n right: 29.16666667%;\n }\n .ant-col-lg-offset-7 {\n margin-left: 29.16666667%;\n }\n .ant-col-lg-order-7 {\n order: 7;\n }\n .ant-col-lg-6 {\n display: block;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .ant-col-lg-push-6 {\n left: 25%;\n }\n .ant-col-lg-pull-6 {\n right: 25%;\n }\n .ant-col-lg-offset-6 {\n margin-left: 25%;\n }\n .ant-col-lg-order-6 {\n order: 6;\n }\n .ant-col-lg-5 {\n display: block;\n flex: 0 0 20.83333333%;\n max-width: 20.83333333%;\n }\n .ant-col-lg-push-5 {\n left: 20.83333333%;\n }\n .ant-col-lg-pull-5 {\n right: 20.83333333%;\n }\n .ant-col-lg-offset-5 {\n margin-left: 20.83333333%;\n }\n .ant-col-lg-order-5 {\n order: 5;\n }\n .ant-col-lg-4 {\n display: block;\n flex: 0 0 16.66666667%;\n max-width: 16.66666667%;\n }\n .ant-col-lg-push-4 {\n left: 16.66666667%;\n }\n .ant-col-lg-pull-4 {\n right: 16.66666667%;\n }\n .ant-col-lg-offset-4 {\n margin-left: 16.66666667%;\n }\n .ant-col-lg-order-4 {\n order: 4;\n }\n .ant-col-lg-3 {\n display: block;\n flex: 0 0 12.5%;\n max-width: 12.5%;\n }\n .ant-col-lg-push-3 {\n left: 12.5%;\n }\n .ant-col-lg-pull-3 {\n right: 12.5%;\n }\n .ant-col-lg-offset-3 {\n margin-left: 12.5%;\n }\n .ant-col-lg-order-3 {\n order: 3;\n }\n .ant-col-lg-2 {\n display: block;\n flex: 0 0 8.33333333%;\n max-width: 8.33333333%;\n }\n .ant-col-lg-push-2 {\n left: 8.33333333%;\n }\n .ant-col-lg-pull-2 {\n right: 8.33333333%;\n }\n .ant-col-lg-offset-2 {\n margin-left: 8.33333333%;\n }\n .ant-col-lg-order-2 {\n order: 2;\n }\n .ant-col-lg-1 {\n display: block;\n flex: 0 0 4.16666667%;\n max-width: 4.16666667%;\n }\n .ant-col-lg-push-1 {\n left: 4.16666667%;\n }\n .ant-col-lg-pull-1 {\n right: 4.16666667%;\n }\n .ant-col-lg-offset-1 {\n margin-left: 4.16666667%;\n }\n .ant-col-lg-order-1 {\n order: 1;\n }\n .ant-col-lg-0 {\n display: none;\n }\n .ant-col-push-0 {\n left: auto;\n }\n .ant-col-pull-0 {\n right: auto;\n }\n .ant-col-lg-push-0 {\n left: auto;\n }\n .ant-col-lg-pull-0 {\n right: auto;\n }\n .ant-col-lg-offset-0 {\n margin-left: 0;\n }\n .ant-col-lg-order-0 {\n order: 0;\n }\n .ant-col-push-0.ant-col-rtl {\n right: auto;\n }\n .ant-col-pull-0.ant-col-rtl {\n left: auto;\n }\n .ant-col-lg-push-0.ant-col-rtl {\n right: auto;\n }\n .ant-col-lg-pull-0.ant-col-rtl {\n left: auto;\n }\n .ant-col-lg-offset-0.ant-col-rtl {\n margin-right: 0;\n }\n .ant-col-lg-push-1.ant-col-rtl {\n right: 4.16666667%;\n left: auto;\n }\n .ant-col-lg-pull-1.ant-col-rtl {\n right: auto;\n left: 4.16666667%;\n }\n .ant-col-lg-offset-1.ant-col-rtl {\n margin-right: 4.16666667%;\n margin-left: 0;\n }\n .ant-col-lg-push-2.ant-col-rtl {\n right: 8.33333333%;\n left: auto;\n }\n .ant-col-lg-pull-2.ant-col-rtl {\n right: auto;\n left: 8.33333333%;\n }\n .ant-col-lg-offset-2.ant-col-rtl {\n margin-right: 8.33333333%;\n margin-left: 0;\n }\n .ant-col-lg-push-3.ant-col-rtl {\n right: 12.5%;\n left: auto;\n }\n .ant-col-lg-pull-3.ant-col-rtl {\n right: auto;\n left: 12.5%;\n }\n .ant-col-lg-offset-3.ant-col-rtl {\n margin-right: 12.5%;\n margin-left: 0;\n }\n .ant-col-lg-push-4.ant-col-rtl {\n right: 16.66666667%;\n left: auto;\n }\n .ant-col-lg-pull-4.ant-col-rtl {\n right: auto;\n left: 16.66666667%;\n }\n .ant-col-lg-offset-4.ant-col-rtl {\n margin-right: 16.66666667%;\n margin-left: 0;\n }\n .ant-col-lg-push-5.ant-col-rtl {\n right: 20.83333333%;\n left: auto;\n }\n .ant-col-lg-pull-5.ant-col-rtl {\n right: auto;\n left: 20.83333333%;\n }\n .ant-col-lg-offset-5.ant-col-rtl {\n margin-right: 20.83333333%;\n margin-left: 0;\n }\n .ant-col-lg-push-6.ant-col-rtl {\n right: 25%;\n left: auto;\n }\n .ant-col-lg-pull-6.ant-col-rtl {\n right: auto;\n left: 25%;\n }\n .ant-col-lg-offset-6.ant-col-rtl {\n margin-right: 25%;\n margin-left: 0;\n }\n .ant-col-lg-push-7.ant-col-rtl {\n right: 29.16666667%;\n left: auto;\n }\n .ant-col-lg-pull-7.ant-col-rtl {\n right: auto;\n left: 29.16666667%;\n }\n .ant-col-lg-offset-7.ant-col-rtl {\n margin-right: 29.16666667%;\n margin-left: 0;\n }\n .ant-col-lg-push-8.ant-col-rtl {\n right: 33.33333333%;\n left: auto;\n }\n .ant-col-lg-pull-8.ant-col-rtl {\n right: auto;\n left: 33.33333333%;\n }\n .ant-col-lg-offset-8.ant-col-rtl {\n margin-right: 33.33333333%;\n margin-left: 0;\n }\n .ant-col-lg-push-9.ant-col-rtl {\n right: 37.5%;\n left: auto;\n }\n .ant-col-lg-pull-9.ant-col-rtl {\n right: auto;\n left: 37.5%;\n }\n .ant-col-lg-offset-9.ant-col-rtl {\n margin-right: 37.5%;\n margin-left: 0;\n }\n .ant-col-lg-push-10.ant-col-rtl {\n right: 41.66666667%;\n left: auto;\n }\n .ant-col-lg-pull-10.ant-col-rtl {\n right: auto;\n left: 41.66666667%;\n }\n .ant-col-lg-offset-10.ant-col-rtl {\n margin-right: 41.66666667%;\n margin-left: 0;\n }\n .ant-col-lg-push-11.ant-col-rtl {\n right: 45.83333333%;\n left: auto;\n }\n .ant-col-lg-pull-11.ant-col-rtl {\n right: auto;\n left: 45.83333333%;\n }\n .ant-col-lg-offset-11.ant-col-rtl {\n margin-right: 45.83333333%;\n margin-left: 0;\n }\n .ant-col-lg-push-12.ant-col-rtl {\n right: 50%;\n left: auto;\n }\n .ant-col-lg-pull-12.ant-col-rtl {\n right: auto;\n left: 50%;\n }\n .ant-col-lg-offset-12.ant-col-rtl {\n margin-right: 50%;\n margin-left: 0;\n }\n .ant-col-lg-push-13.ant-col-rtl {\n right: 54.16666667%;\n left: auto;\n }\n .ant-col-lg-pull-13.ant-col-rtl {\n right: auto;\n left: 54.16666667%;\n }\n .ant-col-lg-offset-13.ant-col-rtl {\n margin-right: 54.16666667%;\n margin-left: 0;\n }\n .ant-col-lg-push-14.ant-col-rtl {\n right: 58.33333333%;\n left: auto;\n }\n .ant-col-lg-pull-14.ant-col-rtl {\n right: auto;\n left: 58.33333333%;\n }\n .ant-col-lg-offset-14.ant-col-rtl {\n margin-right: 58.33333333%;\n margin-left: 0;\n }\n .ant-col-lg-push-15.ant-col-rtl {\n right: 62.5%;\n left: auto;\n }\n .ant-col-lg-pull-15.ant-col-rtl {\n right: auto;\n left: 62.5%;\n }\n .ant-col-lg-offset-15.ant-col-rtl {\n margin-right: 62.5%;\n margin-left: 0;\n }\n .ant-col-lg-push-16.ant-col-rtl {\n right: 66.66666667%;\n left: auto;\n }\n .ant-col-lg-pull-16.ant-col-rtl {\n right: auto;\n left: 66.66666667%;\n }\n .ant-col-lg-offset-16.ant-col-rtl {\n margin-right: 66.66666667%;\n margin-left: 0;\n }\n .ant-col-lg-push-17.ant-col-rtl {\n right: 70.83333333%;\n left: auto;\n }\n .ant-col-lg-pull-17.ant-col-rtl {\n right: auto;\n left: 70.83333333%;\n }\n .ant-col-lg-offset-17.ant-col-rtl {\n margin-right: 70.83333333%;\n margin-left: 0;\n }\n .ant-col-lg-push-18.ant-col-rtl {\n right: 75%;\n left: auto;\n }\n .ant-col-lg-pull-18.ant-col-rtl {\n right: auto;\n left: 75%;\n }\n .ant-col-lg-offset-18.ant-col-rtl {\n margin-right: 75%;\n margin-left: 0;\n }\n .ant-col-lg-push-19.ant-col-rtl {\n right: 79.16666667%;\n left: auto;\n }\n .ant-col-lg-pull-19.ant-col-rtl {\n right: auto;\n left: 79.16666667%;\n }\n .ant-col-lg-offset-19.ant-col-rtl {\n margin-right: 79.16666667%;\n margin-left: 0;\n }\n .ant-col-lg-push-20.ant-col-rtl {\n right: 83.33333333%;\n left: auto;\n }\n .ant-col-lg-pull-20.ant-col-rtl {\n right: auto;\n left: 83.33333333%;\n }\n .ant-col-lg-offset-20.ant-col-rtl {\n margin-right: 83.33333333%;\n margin-left: 0;\n }\n .ant-col-lg-push-21.ant-col-rtl {\n right: 87.5%;\n left: auto;\n }\n .ant-col-lg-pull-21.ant-col-rtl {\n right: auto;\n left: 87.5%;\n }\n .ant-col-lg-offset-21.ant-col-rtl {\n margin-right: 87.5%;\n margin-left: 0;\n }\n .ant-col-lg-push-22.ant-col-rtl {\n right: 91.66666667%;\n left: auto;\n }\n .ant-col-lg-pull-22.ant-col-rtl {\n right: auto;\n left: 91.66666667%;\n }\n .ant-col-lg-offset-22.ant-col-rtl {\n margin-right: 91.66666667%;\n margin-left: 0;\n }\n .ant-col-lg-push-23.ant-col-rtl {\n right: 95.83333333%;\n left: auto;\n }\n .ant-col-lg-pull-23.ant-col-rtl {\n right: auto;\n left: 95.83333333%;\n }\n .ant-col-lg-offset-23.ant-col-rtl {\n margin-right: 95.83333333%;\n margin-left: 0;\n }\n .ant-col-lg-push-24.ant-col-rtl {\n right: 100%;\n left: auto;\n }\n .ant-col-lg-pull-24.ant-col-rtl {\n right: auto;\n left: 100%;\n }\n .ant-col-lg-offset-24.ant-col-rtl {\n margin-right: 100%;\n margin-left: 0;\n }\n}\n@media (min-width: 1200px) {\n .ant-col-xl-24 {\n display: block;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .ant-col-xl-push-24 {\n left: 100%;\n }\n .ant-col-xl-pull-24 {\n right: 100%;\n }\n .ant-col-xl-offset-24 {\n margin-left: 100%;\n }\n .ant-col-xl-order-24 {\n order: 24;\n }\n .ant-col-xl-23 {\n display: block;\n flex: 0 0 95.83333333%;\n max-width: 95.83333333%;\n }\n .ant-col-xl-push-23 {\n left: 95.83333333%;\n }\n .ant-col-xl-pull-23 {\n right: 95.83333333%;\n }\n .ant-col-xl-offset-23 {\n margin-left: 95.83333333%;\n }\n .ant-col-xl-order-23 {\n order: 23;\n }\n .ant-col-xl-22 {\n display: block;\n flex: 0 0 91.66666667%;\n max-width: 91.66666667%;\n }\n .ant-col-xl-push-22 {\n left: 91.66666667%;\n }\n .ant-col-xl-pull-22 {\n right: 91.66666667%;\n }\n .ant-col-xl-offset-22 {\n margin-left: 91.66666667%;\n }\n .ant-col-xl-order-22 {\n order: 22;\n }\n .ant-col-xl-21 {\n display: block;\n flex: 0 0 87.5%;\n max-width: 87.5%;\n }\n .ant-col-xl-push-21 {\n left: 87.5%;\n }\n .ant-col-xl-pull-21 {\n right: 87.5%;\n }\n .ant-col-xl-offset-21 {\n margin-left: 87.5%;\n }\n .ant-col-xl-order-21 {\n order: 21;\n }\n .ant-col-xl-20 {\n display: block;\n flex: 0 0 83.33333333%;\n max-width: 83.33333333%;\n }\n .ant-col-xl-push-20 {\n left: 83.33333333%;\n }\n .ant-col-xl-pull-20 {\n right: 83.33333333%;\n }\n .ant-col-xl-offset-20 {\n margin-left: 83.33333333%;\n }\n .ant-col-xl-order-20 {\n order: 20;\n }\n .ant-col-xl-19 {\n display: block;\n flex: 0 0 79.16666667%;\n max-width: 79.16666667%;\n }\n .ant-col-xl-push-19 {\n left: 79.16666667%;\n }\n .ant-col-xl-pull-19 {\n right: 79.16666667%;\n }\n .ant-col-xl-offset-19 {\n margin-left: 79.16666667%;\n }\n .ant-col-xl-order-19 {\n order: 19;\n }\n .ant-col-xl-18 {\n display: block;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .ant-col-xl-push-18 {\n left: 75%;\n }\n .ant-col-xl-pull-18 {\n right: 75%;\n }\n .ant-col-xl-offset-18 {\n margin-left: 75%;\n }\n .ant-col-xl-order-18 {\n order: 18;\n }\n .ant-col-xl-17 {\n display: block;\n flex: 0 0 70.83333333%;\n max-width: 70.83333333%;\n }\n .ant-col-xl-push-17 {\n left: 70.83333333%;\n }\n .ant-col-xl-pull-17 {\n right: 70.83333333%;\n }\n .ant-col-xl-offset-17 {\n margin-left: 70.83333333%;\n }\n .ant-col-xl-order-17 {\n order: 17;\n }\n .ant-col-xl-16 {\n display: block;\n flex: 0 0 66.66666667%;\n max-width: 66.66666667%;\n }\n .ant-col-xl-push-16 {\n left: 66.66666667%;\n }\n .ant-col-xl-pull-16 {\n right: 66.66666667%;\n }\n .ant-col-xl-offset-16 {\n margin-left: 66.66666667%;\n }\n .ant-col-xl-order-16 {\n order: 16;\n }\n .ant-col-xl-15 {\n display: block;\n flex: 0 0 62.5%;\n max-width: 62.5%;\n }\n .ant-col-xl-push-15 {\n left: 62.5%;\n }\n .ant-col-xl-pull-15 {\n right: 62.5%;\n }\n .ant-col-xl-offset-15 {\n margin-left: 62.5%;\n }\n .ant-col-xl-order-15 {\n order: 15;\n }\n .ant-col-xl-14 {\n display: block;\n flex: 0 0 58.33333333%;\n max-width: 58.33333333%;\n }\n .ant-col-xl-push-14 {\n left: 58.33333333%;\n }\n .ant-col-xl-pull-14 {\n right: 58.33333333%;\n }\n .ant-col-xl-offset-14 {\n margin-left: 58.33333333%;\n }\n .ant-col-xl-order-14 {\n order: 14;\n }\n .ant-col-xl-13 {\n display: block;\n flex: 0 0 54.16666667%;\n max-width: 54.16666667%;\n }\n .ant-col-xl-push-13 {\n left: 54.16666667%;\n }\n .ant-col-xl-pull-13 {\n right: 54.16666667%;\n }\n .ant-col-xl-offset-13 {\n margin-left: 54.16666667%;\n }\n .ant-col-xl-order-13 {\n order: 13;\n }\n .ant-col-xl-12 {\n display: block;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .ant-col-xl-push-12 {\n left: 50%;\n }\n .ant-col-xl-pull-12 {\n right: 50%;\n }\n .ant-col-xl-offset-12 {\n margin-left: 50%;\n }\n .ant-col-xl-order-12 {\n order: 12;\n }\n .ant-col-xl-11 {\n display: block;\n flex: 0 0 45.83333333%;\n max-width: 45.83333333%;\n }\n .ant-col-xl-push-11 {\n left: 45.83333333%;\n }\n .ant-col-xl-pull-11 {\n right: 45.83333333%;\n }\n .ant-col-xl-offset-11 {\n margin-left: 45.83333333%;\n }\n .ant-col-xl-order-11 {\n order: 11;\n }\n .ant-col-xl-10 {\n display: block;\n flex: 0 0 41.66666667%;\n max-width: 41.66666667%;\n }\n .ant-col-xl-push-10 {\n left: 41.66666667%;\n }\n .ant-col-xl-pull-10 {\n right: 41.66666667%;\n }\n .ant-col-xl-offset-10 {\n margin-left: 41.66666667%;\n }\n .ant-col-xl-order-10 {\n order: 10;\n }\n .ant-col-xl-9 {\n display: block;\n flex: 0 0 37.5%;\n max-width: 37.5%;\n }\n .ant-col-xl-push-9 {\n left: 37.5%;\n }\n .ant-col-xl-pull-9 {\n right: 37.5%;\n }\n .ant-col-xl-offset-9 {\n margin-left: 37.5%;\n }\n .ant-col-xl-order-9 {\n order: 9;\n }\n .ant-col-xl-8 {\n display: block;\n flex: 0 0 33.33333333%;\n max-width: 33.33333333%;\n }\n .ant-col-xl-push-8 {\n left: 33.33333333%;\n }\n .ant-col-xl-pull-8 {\n right: 33.33333333%;\n }\n .ant-col-xl-offset-8 {\n margin-left: 33.33333333%;\n }\n .ant-col-xl-order-8 {\n order: 8;\n }\n .ant-col-xl-7 {\n display: block;\n flex: 0 0 29.16666667%;\n max-width: 29.16666667%;\n }\n .ant-col-xl-push-7 {\n left: 29.16666667%;\n }\n .ant-col-xl-pull-7 {\n right: 29.16666667%;\n }\n .ant-col-xl-offset-7 {\n margin-left: 29.16666667%;\n }\n .ant-col-xl-order-7 {\n order: 7;\n }\n .ant-col-xl-6 {\n display: block;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .ant-col-xl-push-6 {\n left: 25%;\n }\n .ant-col-xl-pull-6 {\n right: 25%;\n }\n .ant-col-xl-offset-6 {\n margin-left: 25%;\n }\n .ant-col-xl-order-6 {\n order: 6;\n }\n .ant-col-xl-5 {\n display: block;\n flex: 0 0 20.83333333%;\n max-width: 20.83333333%;\n }\n .ant-col-xl-push-5 {\n left: 20.83333333%;\n }\n .ant-col-xl-pull-5 {\n right: 20.83333333%;\n }\n .ant-col-xl-offset-5 {\n margin-left: 20.83333333%;\n }\n .ant-col-xl-order-5 {\n order: 5;\n }\n .ant-col-xl-4 {\n display: block;\n flex: 0 0 16.66666667%;\n max-width: 16.66666667%;\n }\n .ant-col-xl-push-4 {\n left: 16.66666667%;\n }\n .ant-col-xl-pull-4 {\n right: 16.66666667%;\n }\n .ant-col-xl-offset-4 {\n margin-left: 16.66666667%;\n }\n .ant-col-xl-order-4 {\n order: 4;\n }\n .ant-col-xl-3 {\n display: block;\n flex: 0 0 12.5%;\n max-width: 12.5%;\n }\n .ant-col-xl-push-3 {\n left: 12.5%;\n }\n .ant-col-xl-pull-3 {\n right: 12.5%;\n }\n .ant-col-xl-offset-3 {\n margin-left: 12.5%;\n }\n .ant-col-xl-order-3 {\n order: 3;\n }\n .ant-col-xl-2 {\n display: block;\n flex: 0 0 8.33333333%;\n max-width: 8.33333333%;\n }\n .ant-col-xl-push-2 {\n left: 8.33333333%;\n }\n .ant-col-xl-pull-2 {\n right: 8.33333333%;\n }\n .ant-col-xl-offset-2 {\n margin-left: 8.33333333%;\n }\n .ant-col-xl-order-2 {\n order: 2;\n }\n .ant-col-xl-1 {\n display: block;\n flex: 0 0 4.16666667%;\n max-width: 4.16666667%;\n }\n .ant-col-xl-push-1 {\n left: 4.16666667%;\n }\n .ant-col-xl-pull-1 {\n right: 4.16666667%;\n }\n .ant-col-xl-offset-1 {\n margin-left: 4.16666667%;\n }\n .ant-col-xl-order-1 {\n order: 1;\n }\n .ant-col-xl-0 {\n display: none;\n }\n .ant-col-push-0 {\n left: auto;\n }\n .ant-col-pull-0 {\n right: auto;\n }\n .ant-col-xl-push-0 {\n left: auto;\n }\n .ant-col-xl-pull-0 {\n right: auto;\n }\n .ant-col-xl-offset-0 {\n margin-left: 0;\n }\n .ant-col-xl-order-0 {\n order: 0;\n }\n .ant-col-push-0.ant-col-rtl {\n right: auto;\n }\n .ant-col-pull-0.ant-col-rtl {\n left: auto;\n }\n .ant-col-xl-push-0.ant-col-rtl {\n right: auto;\n }\n .ant-col-xl-pull-0.ant-col-rtl {\n left: auto;\n }\n .ant-col-xl-offset-0.ant-col-rtl {\n margin-right: 0;\n }\n .ant-col-xl-push-1.ant-col-rtl {\n right: 4.16666667%;\n left: auto;\n }\n .ant-col-xl-pull-1.ant-col-rtl {\n right: auto;\n left: 4.16666667%;\n }\n .ant-col-xl-offset-1.ant-col-rtl {\n margin-right: 4.16666667%;\n margin-left: 0;\n }\n .ant-col-xl-push-2.ant-col-rtl {\n right: 8.33333333%;\n left: auto;\n }\n .ant-col-xl-pull-2.ant-col-rtl {\n right: auto;\n left: 8.33333333%;\n }\n .ant-col-xl-offset-2.ant-col-rtl {\n margin-right: 8.33333333%;\n margin-left: 0;\n }\n .ant-col-xl-push-3.ant-col-rtl {\n right: 12.5%;\n left: auto;\n }\n .ant-col-xl-pull-3.ant-col-rtl {\n right: auto;\n left: 12.5%;\n }\n .ant-col-xl-offset-3.ant-col-rtl {\n margin-right: 12.5%;\n margin-left: 0;\n }\n .ant-col-xl-push-4.ant-col-rtl {\n right: 16.66666667%;\n left: auto;\n }\n .ant-col-xl-pull-4.ant-col-rtl {\n right: auto;\n left: 16.66666667%;\n }\n .ant-col-xl-offset-4.ant-col-rtl {\n margin-right: 16.66666667%;\n margin-left: 0;\n }\n .ant-col-xl-push-5.ant-col-rtl {\n right: 20.83333333%;\n left: auto;\n }\n .ant-col-xl-pull-5.ant-col-rtl {\n right: auto;\n left: 20.83333333%;\n }\n .ant-col-xl-offset-5.ant-col-rtl {\n margin-right: 20.83333333%;\n margin-left: 0;\n }\n .ant-col-xl-push-6.ant-col-rtl {\n right: 25%;\n left: auto;\n }\n .ant-col-xl-pull-6.ant-col-rtl {\n right: auto;\n left: 25%;\n }\n .ant-col-xl-offset-6.ant-col-rtl {\n margin-right: 25%;\n margin-left: 0;\n }\n .ant-col-xl-push-7.ant-col-rtl {\n right: 29.16666667%;\n left: auto;\n }\n .ant-col-xl-pull-7.ant-col-rtl {\n right: auto;\n left: 29.16666667%;\n }\n .ant-col-xl-offset-7.ant-col-rtl {\n margin-right: 29.16666667%;\n margin-left: 0;\n }\n .ant-col-xl-push-8.ant-col-rtl {\n right: 33.33333333%;\n left: auto;\n }\n .ant-col-xl-pull-8.ant-col-rtl {\n right: auto;\n left: 33.33333333%;\n }\n .ant-col-xl-offset-8.ant-col-rtl {\n margin-right: 33.33333333%;\n margin-left: 0;\n }\n .ant-col-xl-push-9.ant-col-rtl {\n right: 37.5%;\n left: auto;\n }\n .ant-col-xl-pull-9.ant-col-rtl {\n right: auto;\n left: 37.5%;\n }\n .ant-col-xl-offset-9.ant-col-rtl {\n margin-right: 37.5%;\n margin-left: 0;\n }\n .ant-col-xl-push-10.ant-col-rtl {\n right: 41.66666667%;\n left: auto;\n }\n .ant-col-xl-pull-10.ant-col-rtl {\n right: auto;\n left: 41.66666667%;\n }\n .ant-col-xl-offset-10.ant-col-rtl {\n margin-right: 41.66666667%;\n margin-left: 0;\n }\n .ant-col-xl-push-11.ant-col-rtl {\n right: 45.83333333%;\n left: auto;\n }\n .ant-col-xl-pull-11.ant-col-rtl {\n right: auto;\n left: 45.83333333%;\n }\n .ant-col-xl-offset-11.ant-col-rtl {\n margin-right: 45.83333333%;\n margin-left: 0;\n }\n .ant-col-xl-push-12.ant-col-rtl {\n right: 50%;\n left: auto;\n }\n .ant-col-xl-pull-12.ant-col-rtl {\n right: auto;\n left: 50%;\n }\n .ant-col-xl-offset-12.ant-col-rtl {\n margin-right: 50%;\n margin-left: 0;\n }\n .ant-col-xl-push-13.ant-col-rtl {\n right: 54.16666667%;\n left: auto;\n }\n .ant-col-xl-pull-13.ant-col-rtl {\n right: auto;\n left: 54.16666667%;\n }\n .ant-col-xl-offset-13.ant-col-rtl {\n margin-right: 54.16666667%;\n margin-left: 0;\n }\n .ant-col-xl-push-14.ant-col-rtl {\n right: 58.33333333%;\n left: auto;\n }\n .ant-col-xl-pull-14.ant-col-rtl {\n right: auto;\n left: 58.33333333%;\n }\n .ant-col-xl-offset-14.ant-col-rtl {\n margin-right: 58.33333333%;\n margin-left: 0;\n }\n .ant-col-xl-push-15.ant-col-rtl {\n right: 62.5%;\n left: auto;\n }\n .ant-col-xl-pull-15.ant-col-rtl {\n right: auto;\n left: 62.5%;\n }\n .ant-col-xl-offset-15.ant-col-rtl {\n margin-right: 62.5%;\n margin-left: 0;\n }\n .ant-col-xl-push-16.ant-col-rtl {\n right: 66.66666667%;\n left: auto;\n }\n .ant-col-xl-pull-16.ant-col-rtl {\n right: auto;\n left: 66.66666667%;\n }\n .ant-col-xl-offset-16.ant-col-rtl {\n margin-right: 66.66666667%;\n margin-left: 0;\n }\n .ant-col-xl-push-17.ant-col-rtl {\n right: 70.83333333%;\n left: auto;\n }\n .ant-col-xl-pull-17.ant-col-rtl {\n right: auto;\n left: 70.83333333%;\n }\n .ant-col-xl-offset-17.ant-col-rtl {\n margin-right: 70.83333333%;\n margin-left: 0;\n }\n .ant-col-xl-push-18.ant-col-rtl {\n right: 75%;\n left: auto;\n }\n .ant-col-xl-pull-18.ant-col-rtl {\n right: auto;\n left: 75%;\n }\n .ant-col-xl-offset-18.ant-col-rtl {\n margin-right: 75%;\n margin-left: 0;\n }\n .ant-col-xl-push-19.ant-col-rtl {\n right: 79.16666667%;\n left: auto;\n }\n .ant-col-xl-pull-19.ant-col-rtl {\n right: auto;\n left: 79.16666667%;\n }\n .ant-col-xl-offset-19.ant-col-rtl {\n margin-right: 79.16666667%;\n margin-left: 0;\n }\n .ant-col-xl-push-20.ant-col-rtl {\n right: 83.33333333%;\n left: auto;\n }\n .ant-col-xl-pull-20.ant-col-rtl {\n right: auto;\n left: 83.33333333%;\n }\n .ant-col-xl-offset-20.ant-col-rtl {\n margin-right: 83.33333333%;\n margin-left: 0;\n }\n .ant-col-xl-push-21.ant-col-rtl {\n right: 87.5%;\n left: auto;\n }\n .ant-col-xl-pull-21.ant-col-rtl {\n right: auto;\n left: 87.5%;\n }\n .ant-col-xl-offset-21.ant-col-rtl {\n margin-right: 87.5%;\n margin-left: 0;\n }\n .ant-col-xl-push-22.ant-col-rtl {\n right: 91.66666667%;\n left: auto;\n }\n .ant-col-xl-pull-22.ant-col-rtl {\n right: auto;\n left: 91.66666667%;\n }\n .ant-col-xl-offset-22.ant-col-rtl {\n margin-right: 91.66666667%;\n margin-left: 0;\n }\n .ant-col-xl-push-23.ant-col-rtl {\n right: 95.83333333%;\n left: auto;\n }\n .ant-col-xl-pull-23.ant-col-rtl {\n right: auto;\n left: 95.83333333%;\n }\n .ant-col-xl-offset-23.ant-col-rtl {\n margin-right: 95.83333333%;\n margin-left: 0;\n }\n .ant-col-xl-push-24.ant-col-rtl {\n right: 100%;\n left: auto;\n }\n .ant-col-xl-pull-24.ant-col-rtl {\n right: auto;\n left: 100%;\n }\n .ant-col-xl-offset-24.ant-col-rtl {\n margin-right: 100%;\n margin-left: 0;\n }\n}\n@media (min-width: 1600px) {\n .ant-col-xxl-24 {\n display: block;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .ant-col-xxl-push-24 {\n left: 100%;\n }\n .ant-col-xxl-pull-24 {\n right: 100%;\n }\n .ant-col-xxl-offset-24 {\n margin-left: 100%;\n }\n .ant-col-xxl-order-24 {\n order: 24;\n }\n .ant-col-xxl-23 {\n display: block;\n flex: 0 0 95.83333333%;\n max-width: 95.83333333%;\n }\n .ant-col-xxl-push-23 {\n left: 95.83333333%;\n }\n .ant-col-xxl-pull-23 {\n right: 95.83333333%;\n }\n .ant-col-xxl-offset-23 {\n margin-left: 95.83333333%;\n }\n .ant-col-xxl-order-23 {\n order: 23;\n }\n .ant-col-xxl-22 {\n display: block;\n flex: 0 0 91.66666667%;\n max-width: 91.66666667%;\n }\n .ant-col-xxl-push-22 {\n left: 91.66666667%;\n }\n .ant-col-xxl-pull-22 {\n right: 91.66666667%;\n }\n .ant-col-xxl-offset-22 {\n margin-left: 91.66666667%;\n }\n .ant-col-xxl-order-22 {\n order: 22;\n }\n .ant-col-xxl-21 {\n display: block;\n flex: 0 0 87.5%;\n max-width: 87.5%;\n }\n .ant-col-xxl-push-21 {\n left: 87.5%;\n }\n .ant-col-xxl-pull-21 {\n right: 87.5%;\n }\n .ant-col-xxl-offset-21 {\n margin-left: 87.5%;\n }\n .ant-col-xxl-order-21 {\n order: 21;\n }\n .ant-col-xxl-20 {\n display: block;\n flex: 0 0 83.33333333%;\n max-width: 83.33333333%;\n }\n .ant-col-xxl-push-20 {\n left: 83.33333333%;\n }\n .ant-col-xxl-pull-20 {\n right: 83.33333333%;\n }\n .ant-col-xxl-offset-20 {\n margin-left: 83.33333333%;\n }\n .ant-col-xxl-order-20 {\n order: 20;\n }\n .ant-col-xxl-19 {\n display: block;\n flex: 0 0 79.16666667%;\n max-width: 79.16666667%;\n }\n .ant-col-xxl-push-19 {\n left: 79.16666667%;\n }\n .ant-col-xxl-pull-19 {\n right: 79.16666667%;\n }\n .ant-col-xxl-offset-19 {\n margin-left: 79.16666667%;\n }\n .ant-col-xxl-order-19 {\n order: 19;\n }\n .ant-col-xxl-18 {\n display: block;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .ant-col-xxl-push-18 {\n left: 75%;\n }\n .ant-col-xxl-pull-18 {\n right: 75%;\n }\n .ant-col-xxl-offset-18 {\n margin-left: 75%;\n }\n .ant-col-xxl-order-18 {\n order: 18;\n }\n .ant-col-xxl-17 {\n display: block;\n flex: 0 0 70.83333333%;\n max-width: 70.83333333%;\n }\n .ant-col-xxl-push-17 {\n left: 70.83333333%;\n }\n .ant-col-xxl-pull-17 {\n right: 70.83333333%;\n }\n .ant-col-xxl-offset-17 {\n margin-left: 70.83333333%;\n }\n .ant-col-xxl-order-17 {\n order: 17;\n }\n .ant-col-xxl-16 {\n display: block;\n flex: 0 0 66.66666667%;\n max-width: 66.66666667%;\n }\n .ant-col-xxl-push-16 {\n left: 66.66666667%;\n }\n .ant-col-xxl-pull-16 {\n right: 66.66666667%;\n }\n .ant-col-xxl-offset-16 {\n margin-left: 66.66666667%;\n }\n .ant-col-xxl-order-16 {\n order: 16;\n }\n .ant-col-xxl-15 {\n display: block;\n flex: 0 0 62.5%;\n max-width: 62.5%;\n }\n .ant-col-xxl-push-15 {\n left: 62.5%;\n }\n .ant-col-xxl-pull-15 {\n right: 62.5%;\n }\n .ant-col-xxl-offset-15 {\n margin-left: 62.5%;\n }\n .ant-col-xxl-order-15 {\n order: 15;\n }\n .ant-col-xxl-14 {\n display: block;\n flex: 0 0 58.33333333%;\n max-width: 58.33333333%;\n }\n .ant-col-xxl-push-14 {\n left: 58.33333333%;\n }\n .ant-col-xxl-pull-14 {\n right: 58.33333333%;\n }\n .ant-col-xxl-offset-14 {\n margin-left: 58.33333333%;\n }\n .ant-col-xxl-order-14 {\n order: 14;\n }\n .ant-col-xxl-13 {\n display: block;\n flex: 0 0 54.16666667%;\n max-width: 54.16666667%;\n }\n .ant-col-xxl-push-13 {\n left: 54.16666667%;\n }\n .ant-col-xxl-pull-13 {\n right: 54.16666667%;\n }\n .ant-col-xxl-offset-13 {\n margin-left: 54.16666667%;\n }\n .ant-col-xxl-order-13 {\n order: 13;\n }\n .ant-col-xxl-12 {\n display: block;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .ant-col-xxl-push-12 {\n left: 50%;\n }\n .ant-col-xxl-pull-12 {\n right: 50%;\n }\n .ant-col-xxl-offset-12 {\n margin-left: 50%;\n }\n .ant-col-xxl-order-12 {\n order: 12;\n }\n .ant-col-xxl-11 {\n display: block;\n flex: 0 0 45.83333333%;\n max-width: 45.83333333%;\n }\n .ant-col-xxl-push-11 {\n left: 45.83333333%;\n }\n .ant-col-xxl-pull-11 {\n right: 45.83333333%;\n }\n .ant-col-xxl-offset-11 {\n margin-left: 45.83333333%;\n }\n .ant-col-xxl-order-11 {\n order: 11;\n }\n .ant-col-xxl-10 {\n display: block;\n flex: 0 0 41.66666667%;\n max-width: 41.66666667%;\n }\n .ant-col-xxl-push-10 {\n left: 41.66666667%;\n }\n .ant-col-xxl-pull-10 {\n right: 41.66666667%;\n }\n .ant-col-xxl-offset-10 {\n margin-left: 41.66666667%;\n }\n .ant-col-xxl-order-10 {\n order: 10;\n }\n .ant-col-xxl-9 {\n display: block;\n flex: 0 0 37.5%;\n max-width: 37.5%;\n }\n .ant-col-xxl-push-9 {\n left: 37.5%;\n }\n .ant-col-xxl-pull-9 {\n right: 37.5%;\n }\n .ant-col-xxl-offset-9 {\n margin-left: 37.5%;\n }\n .ant-col-xxl-order-9 {\n order: 9;\n }\n .ant-col-xxl-8 {\n display: block;\n flex: 0 0 33.33333333%;\n max-width: 33.33333333%;\n }\n .ant-col-xxl-push-8 {\n left: 33.33333333%;\n }\n .ant-col-xxl-pull-8 {\n right: 33.33333333%;\n }\n .ant-col-xxl-offset-8 {\n margin-left: 33.33333333%;\n }\n .ant-col-xxl-order-8 {\n order: 8;\n }\n .ant-col-xxl-7 {\n display: block;\n flex: 0 0 29.16666667%;\n max-width: 29.16666667%;\n }\n .ant-col-xxl-push-7 {\n left: 29.16666667%;\n }\n .ant-col-xxl-pull-7 {\n right: 29.16666667%;\n }\n .ant-col-xxl-offset-7 {\n margin-left: 29.16666667%;\n }\n .ant-col-xxl-order-7 {\n order: 7;\n }\n .ant-col-xxl-6 {\n display: block;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .ant-col-xxl-push-6 {\n left: 25%;\n }\n .ant-col-xxl-pull-6 {\n right: 25%;\n }\n .ant-col-xxl-offset-6 {\n margin-left: 25%;\n }\n .ant-col-xxl-order-6 {\n order: 6;\n }\n .ant-col-xxl-5 {\n display: block;\n flex: 0 0 20.83333333%;\n max-width: 20.83333333%;\n }\n .ant-col-xxl-push-5 {\n left: 20.83333333%;\n }\n .ant-col-xxl-pull-5 {\n right: 20.83333333%;\n }\n .ant-col-xxl-offset-5 {\n margin-left: 20.83333333%;\n }\n .ant-col-xxl-order-5 {\n order: 5;\n }\n .ant-col-xxl-4 {\n display: block;\n flex: 0 0 16.66666667%;\n max-width: 16.66666667%;\n }\n .ant-col-xxl-push-4 {\n left: 16.66666667%;\n }\n .ant-col-xxl-pull-4 {\n right: 16.66666667%;\n }\n .ant-col-xxl-offset-4 {\n margin-left: 16.66666667%;\n }\n .ant-col-xxl-order-4 {\n order: 4;\n }\n .ant-col-xxl-3 {\n display: block;\n flex: 0 0 12.5%;\n max-width: 12.5%;\n }\n .ant-col-xxl-push-3 {\n left: 12.5%;\n }\n .ant-col-xxl-pull-3 {\n right: 12.5%;\n }\n .ant-col-xxl-offset-3 {\n margin-left: 12.5%;\n }\n .ant-col-xxl-order-3 {\n order: 3;\n }\n .ant-col-xxl-2 {\n display: block;\n flex: 0 0 8.33333333%;\n max-width: 8.33333333%;\n }\n .ant-col-xxl-push-2 {\n left: 8.33333333%;\n }\n .ant-col-xxl-pull-2 {\n right: 8.33333333%;\n }\n .ant-col-xxl-offset-2 {\n margin-left: 8.33333333%;\n }\n .ant-col-xxl-order-2 {\n order: 2;\n }\n .ant-col-xxl-1 {\n display: block;\n flex: 0 0 4.16666667%;\n max-width: 4.16666667%;\n }\n .ant-col-xxl-push-1 {\n left: 4.16666667%;\n }\n .ant-col-xxl-pull-1 {\n right: 4.16666667%;\n }\n .ant-col-xxl-offset-1 {\n margin-left: 4.16666667%;\n }\n .ant-col-xxl-order-1 {\n order: 1;\n }\n .ant-col-xxl-0 {\n display: none;\n }\n .ant-col-push-0 {\n left: auto;\n }\n .ant-col-pull-0 {\n right: auto;\n }\n .ant-col-xxl-push-0 {\n left: auto;\n }\n .ant-col-xxl-pull-0 {\n right: auto;\n }\n .ant-col-xxl-offset-0 {\n margin-left: 0;\n }\n .ant-col-xxl-order-0 {\n order: 0;\n }\n .ant-col-push-0.ant-col-rtl {\n right: auto;\n }\n .ant-col-pull-0.ant-col-rtl {\n left: auto;\n }\n .ant-col-xxl-push-0.ant-col-rtl {\n right: auto;\n }\n .ant-col-xxl-pull-0.ant-col-rtl {\n left: auto;\n }\n .ant-col-xxl-offset-0.ant-col-rtl {\n margin-right: 0;\n }\n .ant-col-xxl-push-1.ant-col-rtl {\n right: 4.16666667%;\n left: auto;\n }\n .ant-col-xxl-pull-1.ant-col-rtl {\n right: auto;\n left: 4.16666667%;\n }\n .ant-col-xxl-offset-1.ant-col-rtl {\n margin-right: 4.16666667%;\n margin-left: 0;\n }\n .ant-col-xxl-push-2.ant-col-rtl {\n right: 8.33333333%;\n left: auto;\n }\n .ant-col-xxl-pull-2.ant-col-rtl {\n right: auto;\n left: 8.33333333%;\n }\n .ant-col-xxl-offset-2.ant-col-rtl {\n margin-right: 8.33333333%;\n margin-left: 0;\n }\n .ant-col-xxl-push-3.ant-col-rtl {\n right: 12.5%;\n left: auto;\n }\n .ant-col-xxl-pull-3.ant-col-rtl {\n right: auto;\n left: 12.5%;\n }\n .ant-col-xxl-offset-3.ant-col-rtl {\n margin-right: 12.5%;\n margin-left: 0;\n }\n .ant-col-xxl-push-4.ant-col-rtl {\n right: 16.66666667%;\n left: auto;\n }\n .ant-col-xxl-pull-4.ant-col-rtl {\n right: auto;\n left: 16.66666667%;\n }\n .ant-col-xxl-offset-4.ant-col-rtl {\n margin-right: 16.66666667%;\n margin-left: 0;\n }\n .ant-col-xxl-push-5.ant-col-rtl {\n right: 20.83333333%;\n left: auto;\n }\n .ant-col-xxl-pull-5.ant-col-rtl {\n right: auto;\n left: 20.83333333%;\n }\n .ant-col-xxl-offset-5.ant-col-rtl {\n margin-right: 20.83333333%;\n margin-left: 0;\n }\n .ant-col-xxl-push-6.ant-col-rtl {\n right: 25%;\n left: auto;\n }\n .ant-col-xxl-pull-6.ant-col-rtl {\n right: auto;\n left: 25%;\n }\n .ant-col-xxl-offset-6.ant-col-rtl {\n margin-right: 25%;\n margin-left: 0;\n }\n .ant-col-xxl-push-7.ant-col-rtl {\n right: 29.16666667%;\n left: auto;\n }\n .ant-col-xxl-pull-7.ant-col-rtl {\n right: auto;\n left: 29.16666667%;\n }\n .ant-col-xxl-offset-7.ant-col-rtl {\n margin-right: 29.16666667%;\n margin-left: 0;\n }\n .ant-col-xxl-push-8.ant-col-rtl {\n right: 33.33333333%;\n left: auto;\n }\n .ant-col-xxl-pull-8.ant-col-rtl {\n right: auto;\n left: 33.33333333%;\n }\n .ant-col-xxl-offset-8.ant-col-rtl {\n margin-right: 33.33333333%;\n margin-left: 0;\n }\n .ant-col-xxl-push-9.ant-col-rtl {\n right: 37.5%;\n left: auto;\n }\n .ant-col-xxl-pull-9.ant-col-rtl {\n right: auto;\n left: 37.5%;\n }\n .ant-col-xxl-offset-9.ant-col-rtl {\n margin-right: 37.5%;\n margin-left: 0;\n }\n .ant-col-xxl-push-10.ant-col-rtl {\n right: 41.66666667%;\n left: auto;\n }\n .ant-col-xxl-pull-10.ant-col-rtl {\n right: auto;\n left: 41.66666667%;\n }\n .ant-col-xxl-offset-10.ant-col-rtl {\n margin-right: 41.66666667%;\n margin-left: 0;\n }\n .ant-col-xxl-push-11.ant-col-rtl {\n right: 45.83333333%;\n left: auto;\n }\n .ant-col-xxl-pull-11.ant-col-rtl {\n right: auto;\n left: 45.83333333%;\n }\n .ant-col-xxl-offset-11.ant-col-rtl {\n margin-right: 45.83333333%;\n margin-left: 0;\n }\n .ant-col-xxl-push-12.ant-col-rtl {\n right: 50%;\n left: auto;\n }\n .ant-col-xxl-pull-12.ant-col-rtl {\n right: auto;\n left: 50%;\n }\n .ant-col-xxl-offset-12.ant-col-rtl {\n margin-right: 50%;\n margin-left: 0;\n }\n .ant-col-xxl-push-13.ant-col-rtl {\n right: 54.16666667%;\n left: auto;\n }\n .ant-col-xxl-pull-13.ant-col-rtl {\n right: auto;\n left: 54.16666667%;\n }\n .ant-col-xxl-offset-13.ant-col-rtl {\n margin-right: 54.16666667%;\n margin-left: 0;\n }\n .ant-col-xxl-push-14.ant-col-rtl {\n right: 58.33333333%;\n left: auto;\n }\n .ant-col-xxl-pull-14.ant-col-rtl {\n right: auto;\n left: 58.33333333%;\n }\n .ant-col-xxl-offset-14.ant-col-rtl {\n margin-right: 58.33333333%;\n margin-left: 0;\n }\n .ant-col-xxl-push-15.ant-col-rtl {\n right: 62.5%;\n left: auto;\n }\n .ant-col-xxl-pull-15.ant-col-rtl {\n right: auto;\n left: 62.5%;\n }\n .ant-col-xxl-offset-15.ant-col-rtl {\n margin-right: 62.5%;\n margin-left: 0;\n }\n .ant-col-xxl-push-16.ant-col-rtl {\n right: 66.66666667%;\n left: auto;\n }\n .ant-col-xxl-pull-16.ant-col-rtl {\n right: auto;\n left: 66.66666667%;\n }\n .ant-col-xxl-offset-16.ant-col-rtl {\n margin-right: 66.66666667%;\n margin-left: 0;\n }\n .ant-col-xxl-push-17.ant-col-rtl {\n right: 70.83333333%;\n left: auto;\n }\n .ant-col-xxl-pull-17.ant-col-rtl {\n right: auto;\n left: 70.83333333%;\n }\n .ant-col-xxl-offset-17.ant-col-rtl {\n margin-right: 70.83333333%;\n margin-left: 0;\n }\n .ant-col-xxl-push-18.ant-col-rtl {\n right: 75%;\n left: auto;\n }\n .ant-col-xxl-pull-18.ant-col-rtl {\n right: auto;\n left: 75%;\n }\n .ant-col-xxl-offset-18.ant-col-rtl {\n margin-right: 75%;\n margin-left: 0;\n }\n .ant-col-xxl-push-19.ant-col-rtl {\n right: 79.16666667%;\n left: auto;\n }\n .ant-col-xxl-pull-19.ant-col-rtl {\n right: auto;\n left: 79.16666667%;\n }\n .ant-col-xxl-offset-19.ant-col-rtl {\n margin-right: 79.16666667%;\n margin-left: 0;\n }\n .ant-col-xxl-push-20.ant-col-rtl {\n right: 83.33333333%;\n left: auto;\n }\n .ant-col-xxl-pull-20.ant-col-rtl {\n right: auto;\n left: 83.33333333%;\n }\n .ant-col-xxl-offset-20.ant-col-rtl {\n margin-right: 83.33333333%;\n margin-left: 0;\n }\n .ant-col-xxl-push-21.ant-col-rtl {\n right: 87.5%;\n left: auto;\n }\n .ant-col-xxl-pull-21.ant-col-rtl {\n right: auto;\n left: 87.5%;\n }\n .ant-col-xxl-offset-21.ant-col-rtl {\n margin-right: 87.5%;\n margin-left: 0;\n }\n .ant-col-xxl-push-22.ant-col-rtl {\n right: 91.66666667%;\n left: auto;\n }\n .ant-col-xxl-pull-22.ant-col-rtl {\n right: auto;\n left: 91.66666667%;\n }\n .ant-col-xxl-offset-22.ant-col-rtl {\n margin-right: 91.66666667%;\n margin-left: 0;\n }\n .ant-col-xxl-push-23.ant-col-rtl {\n right: 95.83333333%;\n left: auto;\n }\n .ant-col-xxl-pull-23.ant-col-rtl {\n right: auto;\n left: 95.83333333%;\n }\n .ant-col-xxl-offset-23.ant-col-rtl {\n margin-right: 95.83333333%;\n margin-left: 0;\n }\n .ant-col-xxl-push-24.ant-col-rtl {\n right: 100%;\n left: auto;\n }\n .ant-col-xxl-pull-24.ant-col-rtl {\n right: auto;\n left: 100%;\n }\n .ant-col-xxl-offset-24.ant-col-rtl {\n margin-right: 100%;\n margin-left: 0;\n }\n}\n.ant-row-rtl {\n direction: rtl;\n}\n.ant-image {\n position: relative;\n display: inline-block;\n}\n.ant-image-img {\n width: 100%;\n height: auto;\n vertical-align: middle;\n}\n.ant-image-img-placeholder {\n background-color: #f5f5f5;\n background-image: url(" + ___CSS_LOADER_URL_REPLACEMENT_0___ + ");\n background-repeat: no-repeat;\n background-position: center center;\n background-size: 30%;\n}\n.ant-image-mask {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n color: #fff;\n background: rgba(0, 0, 0, 0.5);\n cursor: pointer;\n opacity: 0;\n transition: opacity 0.3s;\n}\n.ant-image-mask-info {\n padding: 0 4px;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.ant-image-mask-info .anticon {\n margin-inline-end: 4px;\n}\n.ant-image-mask:hover {\n opacity: 1;\n}\n.ant-image-placeholder {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n}\n.ant-image-preview {\n pointer-events: none;\n height: 100%;\n text-align: center;\n}\n.ant-image-preview.ant-zoom-enter,\n.ant-image-preview.ant-zoom-appear {\n transform: none;\n opacity: 0;\n animation-duration: 0.3s;\n user-select: none;\n}\n.ant-image-preview-mask {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1000;\n height: 100%;\n background-color: rgba(0, 0, 0, 0.45);\n}\n.ant-image-preview-mask-hidden {\n display: none;\n}\n.ant-image-preview-wrap {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n overflow: auto;\n outline: 0;\n}\n.ant-image-preview-body {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n overflow: hidden;\n}\n.ant-image-preview-img {\n max-width: 100%;\n max-height: 100%;\n vertical-align: middle;\n transform: scale3d(1, 1, 1);\n cursor: grab;\n transition: transform 0.3s cubic-bezier(0.215, 0.61, 0.355, 1) 0s;\n user-select: none;\n pointer-events: auto;\n}\n.ant-image-preview-img-wrapper {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n transition: transform 0.3s cubic-bezier(0.215, 0.61, 0.355, 1) 0s;\n}\n.ant-image-preview-img-wrapper::before {\n display: inline-block;\n width: 1px;\n height: 50%;\n margin-right: -1px;\n content: '';\n}\n.ant-image-preview-moving .ant-image-preview-img {\n cursor: grabbing;\n}\n.ant-image-preview-moving .ant-image-preview-img-wrapper {\n transition-duration: 0s;\n}\n.ant-image-preview-wrap {\n z-index: 1080;\n}\n.ant-image-preview-operations {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n font-feature-settings: 'tnum';\n position: absolute;\n top: 0;\n right: 0;\n z-index: 1;\n display: flex;\n flex-direction: row-reverse;\n align-items: center;\n width: 100%;\n color: rgba(255, 255, 255, 0.85);\n list-style: none;\n background: rgba(0, 0, 0, 0.1);\n pointer-events: auto;\n}\n.ant-image-preview-operations-operation {\n margin-left: 12px;\n padding: 12px;\n cursor: pointer;\n}\n.ant-image-preview-operations-operation-disabled {\n color: rgba(255, 255, 255, 0.25);\n pointer-events: none;\n}\n.ant-image-preview-operations-operation:last-of-type {\n margin-left: 0;\n}\n.ant-image-preview-operations-progress {\n position: absolute;\n left: 50%;\n transform: translateX(-50%);\n}\n.ant-image-preview-operations-icon {\n font-size: 18px;\n}\n.ant-image-preview-switch-left,\n.ant-image-preview-switch-right {\n position: absolute;\n top: 50%;\n right: 10px;\n z-index: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 44px;\n height: 44px;\n margin-top: -22px;\n color: rgba(255, 255, 255, 0.85);\n background: rgba(0, 0, 0, 0.1);\n border-radius: 50%;\n cursor: pointer;\n pointer-events: auto;\n}\n.ant-image-preview-switch-left-disabled,\n.ant-image-preview-switch-right-disabled {\n color: rgba(255, 255, 255, 0.25);\n cursor: not-allowed;\n}\n.ant-image-preview-switch-left-disabled > .anticon,\n.ant-image-preview-switch-right-disabled > .anticon {\n cursor: not-allowed;\n}\n.ant-image-preview-switch-left > .anticon,\n.ant-image-preview-switch-right > .anticon {\n font-size: 18px;\n}\n.ant-image-preview-switch-left {\n left: 10px;\n}\n.ant-image-preview-switch-right {\n right: 10px;\n}\n.ant-input-affix-wrapper {\n position: relative;\n display: inline-block;\n width: 100%;\n min-width: 0;\n padding: 4px 11px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n line-height: 1.5715;\n background-color: #fff;\n background-image: none;\n border: 1px solid #d9d9d9;\n border-radius: 5px;\n transition: all 0.3s;\n display: inline-flex;\n}\n.ant-input-affix-wrapper::placeholder {\n color: #bfbfbf;\n user-select: none;\n}\n.ant-input-affix-wrapper:placeholder-shown {\n text-overflow: ellipsis;\n}\n.ant-input-affix-wrapper:hover {\n border-color: #8588ed;\n border-right-width: 1px;\n}\n.ant-input-rtl .ant-input-affix-wrapper:hover {\n border-right-width: 0;\n border-left-width: 1px !important;\n}\n.ant-input-affix-wrapper:focus,\n.ant-input-affix-wrapper-focused {\n border-color: #8588ed;\n box-shadow: 0 0 0 2px rgba(91, 92, 225, 0.2);\n border-right-width: 1px;\n outline: 0;\n}\n.ant-input-rtl .ant-input-affix-wrapper:focus,\n.ant-input-rtl .ant-input-affix-wrapper-focused {\n border-right-width: 0;\n border-left-width: 1px !important;\n}\n.ant-input-affix-wrapper-disabled {\n color: rgba(0, 0, 0, 0.25);\n background-color: #f5f5f5;\n border-color: #d9d9d9;\n box-shadow: none;\n cursor: not-allowed;\n opacity: 1;\n}\n.ant-input-affix-wrapper-disabled:hover {\n border-color: #d9d9d9;\n border-right-width: 1px;\n}\n.ant-input-affix-wrapper[disabled] {\n color: rgba(0, 0, 0, 0.25);\n background-color: #f5f5f5;\n border-color: #d9d9d9;\n box-shadow: none;\n cursor: not-allowed;\n opacity: 1;\n}\n.ant-input-affix-wrapper[disabled]:hover {\n border-color: #d9d9d9;\n border-right-width: 1px;\n}\n.ant-input-affix-wrapper-borderless,\n.ant-input-affix-wrapper-borderless:hover,\n.ant-input-affix-wrapper-borderless:focus,\n.ant-input-affix-wrapper-borderless-focused,\n.ant-input-affix-wrapper-borderless-disabled,\n.ant-input-affix-wrapper-borderless[disabled] {\n background-color: transparent;\n border: none;\n box-shadow: none;\n}\ntextarea.ant-input-affix-wrapper {\n max-width: 100%;\n height: auto;\n min-height: 32px;\n line-height: 1.5715;\n vertical-align: bottom;\n transition: all 0.3s, height 0s;\n}\n.ant-input-affix-wrapper-lg {\n padding: 6.5px 11px;\n font-size: 16px;\n}\n.ant-input-affix-wrapper-sm {\n padding: 0px 7px;\n}\n.ant-input-affix-wrapper-rtl {\n direction: rtl;\n}\n.ant-input-affix-wrapper:not(.ant-input-affix-wrapper-disabled):hover {\n border-color: #8588ed;\n border-right-width: 1px;\n z-index: 1;\n}\n.ant-input-rtl .ant-input-affix-wrapper:not(.ant-input-affix-wrapper-disabled):hover {\n border-right-width: 0;\n border-left-width: 1px !important;\n}\n.ant-input-search-with-button .ant-input-affix-wrapper:not(.ant-input-affix-wrapper-disabled):hover {\n z-index: 0;\n}\n.ant-input-affix-wrapper-focused,\n.ant-input-affix-wrapper:focus {\n z-index: 1;\n}\n.ant-input-affix-wrapper-disabled .ant-input[disabled] {\n background: transparent;\n}\n.ant-input-affix-wrapper > .ant-input {\n font-size: inherit;\n border: none;\n outline: none;\n}\n.ant-input-affix-wrapper > .ant-input:focus {\n box-shadow: none !important;\n}\n.ant-input-affix-wrapper > .ant-input:not(textarea) {\n padding: 0;\n}\n.ant-input-affix-wrapper::before {\n width: 0;\n visibility: hidden;\n content: '\\a0';\n}\n.ant-input-prefix,\n.ant-input-suffix {\n display: flex;\n flex: none;\n align-items: center;\n}\n.ant-input-prefix > *:not(:last-child),\n.ant-input-suffix > *:not(:last-child) {\n margin-right: 8px;\n}\n.ant-input-show-count-suffix {\n color: rgba(0, 0, 0, 0.45);\n}\n.ant-input-show-count-has-suffix {\n margin-right: 2px;\n}\n.ant-input-prefix {\n margin-right: 4px;\n}\n.ant-input-suffix {\n margin-left: 4px;\n}\n.anticon.ant-input-clear-icon,\n.ant-input-clear-icon {\n margin: 0;\n color: rgba(0, 0, 0, 0.25);\n font-size: 12px;\n vertical-align: -1px;\n cursor: pointer;\n transition: color 0.3s;\n}\n.anticon.ant-input-clear-icon:hover,\n.ant-input-clear-icon:hover {\n color: rgba(0, 0, 0, 0.45);\n}\n.anticon.ant-input-clear-icon:active,\n.ant-input-clear-icon:active {\n color: rgba(0, 0, 0, 0.85);\n}\n.anticon.ant-input-clear-icon-hidden,\n.ant-input-clear-icon-hidden {\n visibility: hidden;\n}\n.anticon.ant-input-clear-icon-has-suffix,\n.ant-input-clear-icon-has-suffix {\n margin: 0 4px;\n}\n.ant-input-affix-wrapper.ant-input-affix-wrapper-textarea-with-clear-btn {\n padding: 0;\n}\n.ant-input-affix-wrapper.ant-input-affix-wrapper-textarea-with-clear-btn .ant-input-clear-icon {\n position: absolute;\n top: 8px;\n right: 8px;\n z-index: 1;\n}\n.ant-input-status-error:not(.ant-input-disabled):not(.ant-input-borderless).ant-input,\n.ant-input-status-error:not(.ant-input-disabled):not(.ant-input-borderless).ant-input:hover {\n background: #fff;\n border-color: #ff4d4f;\n}\n.ant-input-status-error:not(.ant-input-disabled):not(.ant-input-borderless).ant-input:focus,\n.ant-input-status-error:not(.ant-input-disabled):not(.ant-input-borderless).ant-input-focused {\n border-color: #ff7875;\n box-shadow: 0 0 0 2px rgba(255, 77, 79, 0.2);\n border-right-width: 1px;\n outline: 0;\n}\n.ant-input-status-error .ant-input-prefix {\n color: #ff4d4f;\n}\n.ant-input-status-warning:not(.ant-input-disabled):not(.ant-input-borderless).ant-input,\n.ant-input-status-warning:not(.ant-input-disabled):not(.ant-input-borderless).ant-input:hover {\n background: #fff;\n border-color: #faad14;\n}\n.ant-input-status-warning:not(.ant-input-disabled):not(.ant-input-borderless).ant-input:focus,\n.ant-input-status-warning:not(.ant-input-disabled):not(.ant-input-borderless).ant-input-focused {\n border-color: #ffc53d;\n box-shadow: 0 0 0 2px rgba(250, 173, 20, 0.2);\n border-right-width: 1px;\n outline: 0;\n}\n.ant-input-status-warning .ant-input-prefix {\n color: #faad14;\n}\n.ant-input-affix-wrapper-status-error:not(.ant-input-affix-wrapper-disabled):not(.ant-input-affix-wrapper-borderless).ant-input-affix-wrapper,\n.ant-input-affix-wrapper-status-error:not(.ant-input-affix-wrapper-disabled):not(.ant-input-affix-wrapper-borderless).ant-input-affix-wrapper:hover {\n background: #fff;\n border-color: #ff4d4f;\n}\n.ant-input-affix-wrapper-status-error:not(.ant-input-affix-wrapper-disabled):not(.ant-input-affix-wrapper-borderless).ant-input-affix-wrapper:focus,\n.ant-input-affix-wrapper-status-error:not(.ant-input-affix-wrapper-disabled):not(.ant-input-affix-wrapper-borderless).ant-input-affix-wrapper-focused {\n border-color: #ff7875;\n box-shadow: 0 0 0 2px rgba(255, 77, 79, 0.2);\n border-right-width: 1px;\n outline: 0;\n}\n.ant-input-affix-wrapper-status-error .ant-input-prefix {\n color: #ff4d4f;\n}\n.ant-input-affix-wrapper-status-warning:not(.ant-input-affix-wrapper-disabled):not(.ant-input-affix-wrapper-borderless).ant-input-affix-wrapper,\n.ant-input-affix-wrapper-status-warning:not(.ant-input-affix-wrapper-disabled):not(.ant-input-affix-wrapper-borderless).ant-input-affix-wrapper:hover {\n background: #fff;\n border-color: #faad14;\n}\n.ant-input-affix-wrapper-status-warning:not(.ant-input-affix-wrapper-disabled):not(.ant-input-affix-wrapper-borderless).ant-input-affix-wrapper:focus,\n.ant-input-affix-wrapper-status-warning:not(.ant-input-affix-wrapper-disabled):not(.ant-input-affix-wrapper-borderless).ant-input-affix-wrapper-focused {\n border-color: #ffc53d;\n box-shadow: 0 0 0 2px rgba(250, 173, 20, 0.2);\n border-right-width: 1px;\n outline: 0;\n}\n.ant-input-affix-wrapper-status-warning .ant-input-prefix {\n color: #faad14;\n}\n.ant-input-textarea-status-error.ant-input-textarea-has-feedback .ant-input,\n.ant-input-textarea-status-warning.ant-input-textarea-has-feedback .ant-input,\n.ant-input-textarea-status-success.ant-input-textarea-has-feedback .ant-input,\n.ant-input-textarea-status-validating.ant-input-textarea-has-feedback .ant-input {\n padding-right: 24px;\n}\n.ant-input-group-wrapper-status-error .ant-input-group-addon {\n color: #ff4d4f;\n border-color: #ff4d4f;\n}\n.ant-input-group-wrapper-status-warning .ant-input-group-addon {\n color: #faad14;\n border-color: #faad14;\n}\n.ant-input {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n font-variant: tabular-nums;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n display: inline-block;\n width: 100%;\n min-width: 0;\n padding: 4px 11px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n line-height: 1.5715;\n background-color: #fff;\n background-image: none;\n border: 1px solid #d9d9d9;\n border-radius: 5px;\n transition: all 0.3s;\n}\n.ant-input::placeholder {\n color: #bfbfbf;\n user-select: none;\n}\n.ant-input:placeholder-shown {\n text-overflow: ellipsis;\n}\n.ant-input:hover {\n border-color: #8588ed;\n border-right-width: 1px;\n}\n.ant-input-rtl .ant-input:hover {\n border-right-width: 0;\n border-left-width: 1px !important;\n}\n.ant-input:focus,\n.ant-input-focused {\n border-color: #8588ed;\n box-shadow: 0 0 0 2px rgba(91, 92, 225, 0.2);\n border-right-width: 1px;\n outline: 0;\n}\n.ant-input-rtl .ant-input:focus,\n.ant-input-rtl .ant-input-focused {\n border-right-width: 0;\n border-left-width: 1px !important;\n}\n.ant-input-disabled {\n color: rgba(0, 0, 0, 0.25);\n background-color: #f5f5f5;\n border-color: #d9d9d9;\n box-shadow: none;\n cursor: not-allowed;\n opacity: 1;\n}\n.ant-input-disabled:hover {\n border-color: #d9d9d9;\n border-right-width: 1px;\n}\n.ant-input[disabled] {\n color: rgba(0, 0, 0, 0.25);\n background-color: #f5f5f5;\n border-color: #d9d9d9;\n box-shadow: none;\n cursor: not-allowed;\n opacity: 1;\n}\n.ant-input[disabled]:hover {\n border-color: #d9d9d9;\n border-right-width: 1px;\n}\n.ant-input-borderless,\n.ant-input-borderless:hover,\n.ant-input-borderless:focus,\n.ant-input-borderless-focused,\n.ant-input-borderless-disabled,\n.ant-input-borderless[disabled] {\n background-color: transparent;\n border: none;\n box-shadow: none;\n}\ntextarea.ant-input {\n max-width: 100%;\n height: auto;\n min-height: 32px;\n line-height: 1.5715;\n vertical-align: bottom;\n transition: all 0.3s, height 0s;\n}\n.ant-input-lg {\n padding: 6.5px 11px;\n font-size: 16px;\n}\n.ant-input-sm {\n padding: 0px 7px;\n}\n.ant-input-rtl {\n direction: rtl;\n}\n.ant-input-group {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n display: table;\n width: 100%;\n border-collapse: separate;\n border-spacing: 0;\n}\n.ant-input-group[class*='col-'] {\n float: none;\n padding-right: 0;\n padding-left: 0;\n}\n.ant-input-group > [class*='col-'] {\n padding-right: 8px;\n}\n.ant-input-group > [class*='col-']:last-child {\n padding-right: 0;\n}\n.ant-input-group-addon,\n.ant-input-group-wrap,\n.ant-input-group > .ant-input {\n display: table-cell;\n}\n.ant-input-group-addon:not(:first-child):not(:last-child),\n.ant-input-group-wrap:not(:first-child):not(:last-child),\n.ant-input-group > .ant-input:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.ant-input-group-addon,\n.ant-input-group-wrap {\n width: 1px;\n white-space: nowrap;\n vertical-align: middle;\n}\n.ant-input-group-wrap > * {\n display: block !important;\n}\n.ant-input-group .ant-input {\n float: left;\n width: 100%;\n margin-bottom: 0;\n text-align: inherit;\n}\n.ant-input-group .ant-input:focus {\n z-index: 1;\n border-right-width: 1px;\n}\n.ant-input-group .ant-input:hover {\n z-index: 1;\n border-right-width: 1px;\n}\n.ant-input-search-with-button .ant-input-group .ant-input:hover {\n z-index: 0;\n}\n.ant-input-group-addon {\n position: relative;\n padding: 0 11px;\n color: rgba(0, 0, 0, 0.85);\n font-weight: normal;\n font-size: 14px;\n text-align: center;\n background-color: #fafafa;\n border: 1px solid #d9d9d9;\n border-radius: 5px;\n transition: all 0.3s;\n}\n.ant-input-group-addon .ant-select {\n margin: -5px -11px;\n}\n.ant-input-group-addon .ant-select.ant-select-single:not(.ant-select-customize-input) .ant-select-selector {\n background-color: inherit;\n border: 1px solid transparent;\n box-shadow: none;\n}\n.ant-input-group-addon .ant-select-open .ant-select-selector,\n.ant-input-group-addon .ant-select-focused .ant-select-selector {\n color: #5b5ce1;\n}\n.ant-input-group-addon .ant-cascader-picker {\n margin: -9px -12px;\n background-color: transparent;\n}\n.ant-input-group-addon .ant-cascader-picker .ant-cascader-input {\n text-align: left;\n border: 0;\n box-shadow: none;\n}\n.ant-input-group > .ant-input:first-child,\n.ant-input-group-addon:first-child {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.ant-input-group > .ant-input:first-child .ant-select .ant-select-selector,\n.ant-input-group-addon:first-child .ant-select .ant-select-selector {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.ant-input-group > .ant-input-affix-wrapper:not(:first-child) .ant-input {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.ant-input-group > .ant-input-affix-wrapper:not(:last-child) .ant-input {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.ant-input-group-addon:first-child {\n border-right: 0;\n}\n.ant-input-group-addon:last-child {\n border-left: 0;\n}\n.ant-input-group > .ant-input:last-child,\n.ant-input-group-addon:last-child {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.ant-input-group > .ant-input:last-child .ant-select .ant-select-selector,\n.ant-input-group-addon:last-child .ant-select .ant-select-selector {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.ant-input-group-lg .ant-input,\n.ant-input-group-lg > .ant-input-group-addon {\n padding: 6.5px 11px;\n font-size: 16px;\n}\n.ant-input-group-sm .ant-input,\n.ant-input-group-sm > .ant-input-group-addon {\n padding: 0px 7px;\n}\n.ant-input-group-lg .ant-select-single .ant-select-selector {\n height: 40px;\n}\n.ant-input-group-sm .ant-select-single .ant-select-selector {\n height: 24px;\n}\n.ant-input-group .ant-input-affix-wrapper:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.ant-input-search .ant-input-group .ant-input-affix-wrapper:not(:last-child) {\n border-top-left-radius: 5px;\n border-bottom-left-radius: 5px;\n}\n.ant-input-group .ant-input-affix-wrapper:not(:first-child),\n.ant-input-search .ant-input-group .ant-input-affix-wrapper:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.ant-input-group.ant-input-group-compact {\n display: block;\n}\n.ant-input-group.ant-input-group-compact::before {\n display: table;\n content: '';\n}\n.ant-input-group.ant-input-group-compact::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-input-group.ant-input-group-compact::before {\n display: table;\n content: '';\n}\n.ant-input-group.ant-input-group-compact::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-input-group.ant-input-group-compact-addon:not(:first-child):not(:last-child),\n.ant-input-group.ant-input-group-compact-wrap:not(:first-child):not(:last-child),\n.ant-input-group.ant-input-group-compact > .ant-input:not(:first-child):not(:last-child) {\n border-right-width: 1px;\n}\n.ant-input-group.ant-input-group-compact-addon:not(:first-child):not(:last-child):hover,\n.ant-input-group.ant-input-group-compact-wrap:not(:first-child):not(:last-child):hover,\n.ant-input-group.ant-input-group-compact > .ant-input:not(:first-child):not(:last-child):hover {\n z-index: 1;\n}\n.ant-input-group.ant-input-group-compact-addon:not(:first-child):not(:last-child):focus,\n.ant-input-group.ant-input-group-compact-wrap:not(:first-child):not(:last-child):focus,\n.ant-input-group.ant-input-group-compact > .ant-input:not(:first-child):not(:last-child):focus {\n z-index: 1;\n}\n.ant-input-group.ant-input-group-compact > * {\n display: inline-block;\n float: none;\n vertical-align: top;\n border-radius: 0;\n}\n.ant-input-group.ant-input-group-compact > .ant-input-affix-wrapper {\n display: inline-flex;\n}\n.ant-input-group.ant-input-group-compact > .ant-picker-range {\n display: inline-flex;\n}\n.ant-input-group.ant-input-group-compact > *:not(:last-child) {\n margin-right: -1px;\n border-right-width: 1px;\n}\n.ant-input-group.ant-input-group-compact .ant-input {\n float: none;\n}\n.ant-input-group.ant-input-group-compact > .ant-select > .ant-select-selector,\n.ant-input-group.ant-input-group-compact > .ant-select-auto-complete .ant-input,\n.ant-input-group.ant-input-group-compact > .ant-cascader-picker .ant-input,\n.ant-input-group.ant-input-group-compact > .ant-input-group-wrapper .ant-input {\n border-right-width: 1px;\n border-radius: 0;\n}\n.ant-input-group.ant-input-group-compact > .ant-select > .ant-select-selector:hover,\n.ant-input-group.ant-input-group-compact > .ant-select-auto-complete .ant-input:hover,\n.ant-input-group.ant-input-group-compact > .ant-cascader-picker .ant-input:hover,\n.ant-input-group.ant-input-group-compact > .ant-input-group-wrapper .ant-input:hover {\n z-index: 1;\n}\n.ant-input-group.ant-input-group-compact > .ant-select > .ant-select-selector:focus,\n.ant-input-group.ant-input-group-compact > .ant-select-auto-complete .ant-input:focus,\n.ant-input-group.ant-input-group-compact > .ant-cascader-picker .ant-input:focus,\n.ant-input-group.ant-input-group-compact > .ant-input-group-wrapper .ant-input:focus {\n z-index: 1;\n}\n.ant-input-group.ant-input-group-compact > .ant-select-focused {\n z-index: 1;\n}\n.ant-input-group.ant-input-group-compact > .ant-select > .ant-select-arrow {\n z-index: 1;\n}\n.ant-input-group.ant-input-group-compact > *:first-child,\n.ant-input-group.ant-input-group-compact > .ant-select:first-child > .ant-select-selector,\n.ant-input-group.ant-input-group-compact > .ant-select-auto-complete:first-child .ant-input,\n.ant-input-group.ant-input-group-compact > .ant-cascader-picker:first-child .ant-input {\n border-top-left-radius: 5px;\n border-bottom-left-radius: 5px;\n}\n.ant-input-group.ant-input-group-compact > *:last-child,\n.ant-input-group.ant-input-group-compact > .ant-select:last-child > .ant-select-selector,\n.ant-input-group.ant-input-group-compact > .ant-cascader-picker:last-child .ant-input,\n.ant-input-group.ant-input-group-compact > .ant-cascader-picker-focused:last-child .ant-input {\n border-right-width: 1px;\n border-top-right-radius: 5px;\n border-bottom-right-radius: 5px;\n}\n.ant-input-group.ant-input-group-compact > .ant-select-auto-complete .ant-input {\n vertical-align: top;\n}\n.ant-input-group.ant-input-group-compact .ant-input-group-wrapper + .ant-input-group-wrapper {\n margin-left: -1px;\n}\n.ant-input-group.ant-input-group-compact .ant-input-group-wrapper + .ant-input-group-wrapper .ant-input-affix-wrapper {\n border-radius: 0;\n}\n.ant-input-group.ant-input-group-compact .ant-input-group-wrapper:not(:last-child).ant-input-search > .ant-input-group > .ant-input-group-addon > .ant-input-search-button {\n border-radius: 0;\n}\n.ant-input-group.ant-input-group-compact .ant-input-group-wrapper:not(:last-child).ant-input-search > .ant-input-group > .ant-input {\n border-radius: 5px 0 0 5px;\n}\n.ant-input-group > .ant-input-rtl:first-child,\n.ant-input-group-rtl .ant-input-group-addon:first-child {\n border-radius: 0 5px 5px 0;\n}\n.ant-input-group-rtl .ant-input-group-addon:first-child {\n border-right: 1px solid #d9d9d9;\n border-left: 0;\n}\n.ant-input-group-rtl .ant-input-group-addon:last-child {\n border-right: 0;\n border-left: 1px solid #d9d9d9;\n border-radius: 5px 0 0 5px;\n}\n.ant-input-group-rtl.ant-input-group > .ant-input:last-child,\n.ant-input-group-rtl.ant-input-group-addon:last-child {\n border-radius: 5px 0 0 5px;\n}\n.ant-input-group-rtl.ant-input-group .ant-input-affix-wrapper:not(:first-child) {\n border-radius: 5px 0 0 5px;\n}\n.ant-input-group-rtl.ant-input-group .ant-input-affix-wrapper:not(:last-child) {\n border-radius: 0 5px 5px 0;\n}\n.ant-input-group-rtl.ant-input-group.ant-input-group-compact > *:not(:last-child) {\n margin-right: 0;\n margin-left: -1px;\n border-left-width: 1px;\n}\n.ant-input-group-rtl.ant-input-group.ant-input-group-compact > *:first-child,\n.ant-input-group-rtl.ant-input-group.ant-input-group-compact > .ant-select:first-child > .ant-select-selector,\n.ant-input-group-rtl.ant-input-group.ant-input-group-compact > .ant-select-auto-complete:first-child .ant-input,\n.ant-input-group-rtl.ant-input-group.ant-input-group-compact > .ant-cascader-picker:first-child .ant-input {\n border-radius: 0 5px 5px 0;\n}\n.ant-input-group-rtl.ant-input-group.ant-input-group-compact > *:last-child,\n.ant-input-group-rtl.ant-input-group.ant-input-group-compact > .ant-select:last-child > .ant-select-selector,\n.ant-input-group-rtl.ant-input-group.ant-input-group-compact > .ant-select-auto-complete:last-child .ant-input,\n.ant-input-group-rtl.ant-input-group.ant-input-group-compact > .ant-cascader-picker:last-child .ant-input,\n.ant-input-group-rtl.ant-input-group.ant-input-group-compact > .ant-cascader-picker-focused:last-child .ant-input {\n border-left-width: 1px;\n border-radius: 5px 0 0 5px;\n}\n.ant-input-group.ant-input-group-compact .ant-input-group-wrapper-rtl + .ant-input-group-wrapper-rtl {\n margin-right: -1px;\n margin-left: 0;\n}\n.ant-input-group.ant-input-group-compact .ant-input-group-wrapper-rtl:not(:last-child).ant-input-search > .ant-input-group > .ant-input {\n border-radius: 0 5px 5px 0;\n}\n.ant-input-group > .ant-input-rtl:first-child {\n border-radius: 0 5px 5px 0;\n}\n.ant-input-group > .ant-input-rtl:last-child {\n border-radius: 5px 0 0 5px;\n}\n.ant-input-group-rtl .ant-input-group-addon:first-child {\n border-right: 1px solid #d9d9d9;\n border-left: 0;\n border-radius: 0 5px 5px 0;\n}\n.ant-input-group-rtl .ant-input-group-addon:last-child {\n border-right: 0;\n border-left: 1px solid #d9d9d9;\n border-radius: 5px 0 0 5px;\n}\n.ant-input-group-wrapper {\n display: inline-block;\n width: 100%;\n text-align: start;\n vertical-align: top;\n}\n.ant-input-password-icon.anticon {\n color: rgba(0, 0, 0, 0.45);\n cursor: pointer;\n transition: all 0.3s;\n}\n.ant-input-password-icon.anticon:hover {\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-input[type='color'] {\n height: 32px;\n}\n.ant-input[type='color'].ant-input-lg {\n height: 40px;\n}\n.ant-input[type='color'].ant-input-sm {\n height: 24px;\n padding-top: 3px;\n padding-bottom: 3px;\n}\n.ant-input-textarea-show-count > .ant-input {\n height: 100%;\n}\n.ant-input-textarea-show-count::after {\n float: right;\n color: rgba(0, 0, 0, 0.45);\n white-space: nowrap;\n content: attr(data-count);\n pointer-events: none;\n}\n.ant-input-textarea-show-count.ant-input-textarea-in-form-item::after {\n margin-bottom: -22px;\n}\n.ant-input-textarea-suffix {\n position: absolute;\n top: 0;\n right: 11px;\n bottom: 0;\n z-index: 1;\n display: inline-flex;\n align-items: center;\n margin: auto;\n}\n.ant-input-compact-item:not(.ant-input-compact-last-item):not(.ant-input-compact-item-rtl) {\n margin-right: -1px;\n}\n.ant-input-compact-item:not(.ant-input-compact-last-item).ant-input-compact-item-rtl {\n margin-left: -1px;\n}\n.ant-input-compact-item:hover,\n.ant-input-compact-item:focus,\n.ant-input-compact-item:active {\n z-index: 2;\n}\n.ant-input-compact-item[disabled] {\n z-index: 0;\n}\n.ant-input-compact-item:not(.ant-input-compact-first-item):not(.ant-input-compact-last-item).ant-input {\n border-radius: 0;\n}\n.ant-input-compact-item.ant-input.ant-input-compact-first-item:not(.ant-input-compact-item-rtl) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.ant-input-compact-item.ant-input.ant-input-compact-last-item:not(.ant-input-compact-item-rtl) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.ant-input-compact-item.ant-input.ant-input-compact-item-rtl.ant-input-compact-first-item {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.ant-input-compact-item.ant-input.ant-input-compact-item-rtl.ant-input-compact-last-item {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.ant-input-search .ant-input:hover,\n.ant-input-search .ant-input:focus {\n border-color: #8588ed;\n}\n.ant-input-search .ant-input:hover + .ant-input-group-addon .ant-input-search-button:not(.ant-btn-primary),\n.ant-input-search .ant-input:focus + .ant-input-group-addon .ant-input-search-button:not(.ant-btn-primary) {\n border-left-color: #8588ed;\n}\n.ant-input-search .ant-input-affix-wrapper {\n border-radius: 0;\n}\n.ant-input-search .ant-input-lg {\n line-height: 1.5713;\n}\n.ant-input-search > .ant-input-group > .ant-input-group-addon:last-child {\n left: -1px;\n padding: 0;\n border: 0;\n}\n.ant-input-search > .ant-input-group > .ant-input-group-addon:last-child .ant-input-search-button {\n padding-top: 0;\n padding-bottom: 0;\n border-radius: 0 5px 5px 0;\n}\n.ant-input-search > .ant-input-group > .ant-input-group-addon:last-child .ant-input-search-button:not(.ant-btn-primary) {\n color: rgba(0, 0, 0, 0.45);\n}\n.ant-input-search > .ant-input-group > .ant-input-group-addon:last-child .ant-input-search-button:not(.ant-btn-primary).ant-btn-loading::before {\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n}\n.ant-input-search-button {\n height: 32px;\n}\n.ant-input-search-button:hover,\n.ant-input-search-button:focus {\n z-index: 1;\n}\n.ant-input-search-large .ant-input-search-button {\n height: 40px;\n}\n.ant-input-search-small .ant-input-search-button {\n height: 24px;\n}\n.ant-input-search.ant-input-compact-item:not(.ant-input-compact-item-rtl):not(.ant-input-compact-last-item) .ant-input-group-addon .ant-input-search-button {\n margin-right: -1px;\n border-radius: 0;\n}\n.ant-input-search.ant-input-compact-item:not(.ant-input-compact-first-item) .ant-input,\n.ant-input-search.ant-input-compact-item:not(.ant-input-compact-first-item) .ant-input-affix-wrapper {\n border-radius: 0;\n}\n.ant-input-search.ant-input-compact-item > .ant-input-group-addon .ant-input-search-button:hover,\n.ant-input-search.ant-input-compact-item > .ant-input:hover,\n.ant-input-search.ant-input-compact-item .ant-input-affix-wrapper:hover,\n.ant-input-search.ant-input-compact-item > .ant-input-group-addon .ant-input-search-button:focus,\n.ant-input-search.ant-input-compact-item > .ant-input:focus,\n.ant-input-search.ant-input-compact-item .ant-input-affix-wrapper:focus,\n.ant-input-search.ant-input-compact-item > .ant-input-group-addon .ant-input-search-button:active,\n.ant-input-search.ant-input-compact-item > .ant-input:active,\n.ant-input-search.ant-input-compact-item .ant-input-affix-wrapper:active {\n z-index: 2;\n}\n.ant-input-search.ant-input-compact-item > .ant-input-affix-wrapper-focused {\n z-index: 2;\n}\n.ant-input-search.ant-input-compact-item-rtl:not(.ant-input-compact-last-item) .ant-input-group-addon:last-child .ant-input-search-button {\n margin-left: -1px;\n border-radius: 0;\n}\n.ant-input-group-wrapper-rtl {\n direction: rtl;\n}\n.ant-input-group-rtl {\n direction: rtl;\n}\n.ant-input-affix-wrapper.ant-input-affix-wrapper-rtl > input.ant-input {\n border: none;\n outline: none;\n}\n.ant-input-affix-wrapper-rtl .ant-input-prefix {\n margin: 0 0 0 4px;\n}\n.ant-input-affix-wrapper-rtl .ant-input-suffix {\n margin: 0 4px 0 0;\n}\n.ant-input-textarea-rtl {\n direction: rtl;\n}\n.ant-input-textarea-rtl.ant-input-textarea-show-count::after {\n text-align: left;\n}\n.ant-input-affix-wrapper-rtl .ant-input-clear-icon-has-suffix {\n margin-right: 0;\n margin-left: 4px;\n}\n.ant-input-affix-wrapper-rtl .ant-input-clear-icon {\n right: auto;\n left: 8px;\n}\n.ant-input-search-rtl {\n direction: rtl;\n}\n.ant-input-search-rtl .ant-input:hover + .ant-input-group-addon .ant-input-search-button:not(.ant-btn-primary),\n.ant-input-search-rtl .ant-input:focus + .ant-input-group-addon .ant-input-search-button:not(.ant-btn-primary) {\n border-left-color: #d9d9d9;\n}\n.ant-input-search-rtl .ant-input:hover + .ant-input-group-addon .ant-input-search-button:not(.ant-btn-primary):hover,\n.ant-input-search-rtl .ant-input:focus + .ant-input-group-addon .ant-input-search-button:not(.ant-btn-primary):hover {\n border-left-color: #8588ed;\n}\n.ant-input-search-rtl > .ant-input-group > .ant-input-affix-wrapper:hover,\n.ant-input-search-rtl > .ant-input-group > .ant-input-affix-wrapper-focused {\n border-right-color: #8588ed;\n}\n.ant-input-search-rtl > .ant-input-group > .ant-input-group-addon:last-child {\n right: -1px;\n left: auto;\n}\n.ant-input-search-rtl > .ant-input-group > .ant-input-group-addon:last-child .ant-input-search-button {\n border-radius: 5px 0 0 5px;\n}\n@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {\n .ant-input {\n height: 32px;\n }\n .ant-input-lg {\n height: 40px;\n }\n .ant-input-sm {\n height: 24px;\n }\n .ant-input-affix-wrapper > input.ant-input {\n height: auto;\n }\n}\n.ant-input-number-affix-wrapper {\n display: inline-block;\n width: 100%;\n min-width: 0;\n padding: 4px 11px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n line-height: 1.5715;\n background-color: #fff;\n background-image: none;\n border: 1px solid #d9d9d9;\n border-radius: 5px;\n transition: all 0.3s;\n position: relative;\n display: inline-flex;\n width: 90px;\n padding: 0;\n padding-inline-start: 11px;\n}\n.ant-input-number-affix-wrapper::placeholder {\n color: #bfbfbf;\n user-select: none;\n}\n.ant-input-number-affix-wrapper:placeholder-shown {\n text-overflow: ellipsis;\n}\n.ant-input-number-affix-wrapper:hover {\n border-color: #8588ed;\n border-right-width: 1px;\n}\n.ant-input-rtl .ant-input-number-affix-wrapper:hover {\n border-right-width: 0;\n border-left-width: 1px !important;\n}\n.ant-input-number-affix-wrapper:focus,\n.ant-input-number-affix-wrapper-focused {\n border-color: #8588ed;\n box-shadow: 0 0 0 2px rgba(91, 92, 225, 0.2);\n border-right-width: 1px;\n outline: 0;\n}\n.ant-input-rtl .ant-input-number-affix-wrapper:focus,\n.ant-input-rtl .ant-input-number-affix-wrapper-focused {\n border-right-width: 0;\n border-left-width: 1px !important;\n}\n.ant-input-number-affix-wrapper-disabled {\n color: rgba(0, 0, 0, 0.25);\n background-color: #f5f5f5;\n border-color: #d9d9d9;\n box-shadow: none;\n cursor: not-allowed;\n opacity: 1;\n}\n.ant-input-number-affix-wrapper-disabled:hover {\n border-color: #d9d9d9;\n border-right-width: 1px;\n}\n.ant-input-number-affix-wrapper[disabled] {\n color: rgba(0, 0, 0, 0.25);\n background-color: #f5f5f5;\n border-color: #d9d9d9;\n box-shadow: none;\n cursor: not-allowed;\n opacity: 1;\n}\n.ant-input-number-affix-wrapper[disabled]:hover {\n border-color: #d9d9d9;\n border-right-width: 1px;\n}\n.ant-input-number-affix-wrapper-borderless,\n.ant-input-number-affix-wrapper-borderless:hover,\n.ant-input-number-affix-wrapper-borderless:focus,\n.ant-input-number-affix-wrapper-borderless-focused,\n.ant-input-number-affix-wrapper-borderless-disabled,\n.ant-input-number-affix-wrapper-borderless[disabled] {\n background-color: transparent;\n border: none;\n box-shadow: none;\n}\ntextarea.ant-input-number-affix-wrapper {\n max-width: 100%;\n height: auto;\n min-height: 32px;\n line-height: 1.5715;\n vertical-align: bottom;\n transition: all 0.3s, height 0s;\n}\n.ant-input-number-affix-wrapper-lg {\n padding: 6.5px 11px;\n font-size: 16px;\n}\n.ant-input-number-affix-wrapper-sm {\n padding: 0px 7px;\n}\n.ant-input-number-affix-wrapper-rtl {\n direction: rtl;\n}\n.ant-input-number-affix-wrapper:not(.ant-input-number-affix-wrapper-disabled):hover {\n border-color: #8588ed;\n border-right-width: 1px;\n z-index: 1;\n}\n.ant-input-rtl .ant-input-number-affix-wrapper:not(.ant-input-number-affix-wrapper-disabled):hover {\n border-right-width: 0;\n border-left-width: 1px !important;\n}\n.ant-input-number-affix-wrapper-focused,\n.ant-input-number-affix-wrapper:focus {\n z-index: 1;\n}\n.ant-input-number-affix-wrapper-disabled .ant-input-number[disabled] {\n background: transparent;\n}\n.ant-input-number-affix-wrapper > div.ant-input-number {\n width: 100%;\n border: none;\n outline: none;\n}\n.ant-input-number-affix-wrapper > div.ant-input-number.ant-input-number-focused {\n box-shadow: none !important;\n}\n.ant-input-number-affix-wrapper input.ant-input-number-input {\n padding: 0;\n}\n.ant-input-number-affix-wrapper::before {\n width: 0;\n visibility: hidden;\n content: '\\a0';\n}\n.ant-input-number-affix-wrapper .ant-input-number-handler-wrap {\n z-index: 2;\n}\n.ant-input-number-prefix,\n.ant-input-number-suffix {\n display: flex;\n flex: none;\n align-items: center;\n pointer-events: none;\n}\n.ant-input-number-prefix {\n margin-inline-end: 4px;\n}\n.ant-input-number-suffix {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 1;\n height: 100%;\n margin-right: 11px;\n margin-left: 4px;\n}\n.ant-input-number-group-wrapper .ant-input-number-affix-wrapper {\n width: 100%;\n}\n.ant-input-number-status-error:not(.ant-input-number-disabled):not(.ant-input-number-borderless).ant-input-number,\n.ant-input-number-status-error:not(.ant-input-number-disabled):not(.ant-input-number-borderless).ant-input-number:hover {\n background: #fff;\n border-color: #ff4d4f;\n}\n.ant-input-number-status-error:not(.ant-input-number-disabled):not(.ant-input-number-borderless).ant-input-number:focus,\n.ant-input-number-status-error:not(.ant-input-number-disabled):not(.ant-input-number-borderless).ant-input-number-focused {\n border-color: #ff7875;\n box-shadow: 0 0 0 2px rgba(255, 77, 79, 0.2);\n border-right-width: 1px;\n outline: 0;\n}\n.ant-input-number-status-error .ant-input-number-prefix {\n color: #ff4d4f;\n}\n.ant-input-number-status-warning:not(.ant-input-number-disabled):not(.ant-input-number-borderless).ant-input-number,\n.ant-input-number-status-warning:not(.ant-input-number-disabled):not(.ant-input-number-borderless).ant-input-number:hover {\n background: #fff;\n border-color: #faad14;\n}\n.ant-input-number-status-warning:not(.ant-input-number-disabled):not(.ant-input-number-borderless).ant-input-number:focus,\n.ant-input-number-status-warning:not(.ant-input-number-disabled):not(.ant-input-number-borderless).ant-input-number-focused {\n border-color: #ffc53d;\n box-shadow: 0 0 0 2px rgba(250, 173, 20, 0.2);\n border-right-width: 1px;\n outline: 0;\n}\n.ant-input-number-status-warning .ant-input-number-prefix {\n color: #faad14;\n}\n.ant-input-number-affix-wrapper-status-error:not(.ant-input-number-affix-wrapper-disabled):not(.ant-input-number-affix-wrapper-borderless).ant-input-number-affix-wrapper,\n.ant-input-number-affix-wrapper-status-error:not(.ant-input-number-affix-wrapper-disabled):not(.ant-input-number-affix-wrapper-borderless).ant-input-number-affix-wrapper:hover {\n background: #fff;\n border-color: #ff4d4f;\n}\n.ant-input-number-affix-wrapper-status-error:not(.ant-input-number-affix-wrapper-disabled):not(.ant-input-number-affix-wrapper-borderless).ant-input-number-affix-wrapper:focus,\n.ant-input-number-affix-wrapper-status-error:not(.ant-input-number-affix-wrapper-disabled):not(.ant-input-number-affix-wrapper-borderless).ant-input-number-affix-wrapper-focused {\n border-color: #ff7875;\n box-shadow: 0 0 0 2px rgba(255, 77, 79, 0.2);\n border-right-width: 1px;\n outline: 0;\n}\n.ant-input-number-affix-wrapper-status-error .ant-input-number-prefix {\n color: #ff4d4f;\n}\n.ant-input-number-affix-wrapper-status-warning:not(.ant-input-number-affix-wrapper-disabled):not(.ant-input-number-affix-wrapper-borderless).ant-input-number-affix-wrapper,\n.ant-input-number-affix-wrapper-status-warning:not(.ant-input-number-affix-wrapper-disabled):not(.ant-input-number-affix-wrapper-borderless).ant-input-number-affix-wrapper:hover {\n background: #fff;\n border-color: #faad14;\n}\n.ant-input-number-affix-wrapper-status-warning:not(.ant-input-number-affix-wrapper-disabled):not(.ant-input-number-affix-wrapper-borderless).ant-input-number-affix-wrapper:focus,\n.ant-input-number-affix-wrapper-status-warning:not(.ant-input-number-affix-wrapper-disabled):not(.ant-input-number-affix-wrapper-borderless).ant-input-number-affix-wrapper-focused {\n border-color: #ffc53d;\n box-shadow: 0 0 0 2px rgba(250, 173, 20, 0.2);\n border-right-width: 1px;\n outline: 0;\n}\n.ant-input-number-affix-wrapper-status-warning .ant-input-number-prefix {\n color: #faad14;\n}\n.ant-input-number-group-wrapper-status-error .ant-input-number-group-addon {\n color: #ff4d4f;\n border-color: #ff4d4f;\n}\n.ant-input-number-group-wrapper-status-warning .ant-input-number-group-addon {\n color: #faad14;\n border-color: #faad14;\n}\n.ant-input-number {\n box-sizing: border-box;\n font-variant: tabular-nums;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n width: 100%;\n min-width: 0;\n padding: 4px 11px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n line-height: 1.5715;\n background-color: #fff;\n background-image: none;\n transition: all 0.3s;\n display: inline-block;\n width: 90px;\n margin: 0;\n padding: 0;\n border: 1px solid #d9d9d9;\n border-radius: 5px;\n}\n.ant-input-number::placeholder {\n color: #bfbfbf;\n user-select: none;\n}\n.ant-input-number:placeholder-shown {\n text-overflow: ellipsis;\n}\n.ant-input-number:hover {\n border-color: #8588ed;\n border-right-width: 1px;\n}\n.ant-input-rtl .ant-input-number:hover {\n border-right-width: 0;\n border-left-width: 1px !important;\n}\n.ant-input-number:focus,\n.ant-input-number-focused {\n border-color: #8588ed;\n box-shadow: 0 0 0 2px rgba(91, 92, 225, 0.2);\n border-right-width: 1px;\n outline: 0;\n}\n.ant-input-rtl .ant-input-number:focus,\n.ant-input-rtl .ant-input-number-focused {\n border-right-width: 0;\n border-left-width: 1px !important;\n}\n.ant-input-number-disabled {\n color: rgba(0, 0, 0, 0.25);\n background-color: #f5f5f5;\n border-color: #d9d9d9;\n box-shadow: none;\n cursor: not-allowed;\n opacity: 1;\n}\n.ant-input-number-disabled:hover {\n border-color: #d9d9d9;\n border-right-width: 1px;\n}\n.ant-input-number[disabled] {\n color: rgba(0, 0, 0, 0.25);\n background-color: #f5f5f5;\n border-color: #d9d9d9;\n box-shadow: none;\n cursor: not-allowed;\n opacity: 1;\n}\n.ant-input-number[disabled]:hover {\n border-color: #d9d9d9;\n border-right-width: 1px;\n}\n.ant-input-number-borderless,\n.ant-input-number-borderless:hover,\n.ant-input-number-borderless:focus,\n.ant-input-number-borderless-focused,\n.ant-input-number-borderless-disabled,\n.ant-input-number-borderless[disabled] {\n background-color: transparent;\n border: none;\n box-shadow: none;\n}\ntextarea.ant-input-number {\n max-width: 100%;\n height: auto;\n min-height: 32px;\n line-height: 1.5715;\n vertical-align: bottom;\n transition: all 0.3s, height 0s;\n}\n.ant-input-number-lg {\n padding: 6.5px 11px;\n font-size: 16px;\n}\n.ant-input-number-sm {\n padding: 0px 7px;\n}\n.ant-input-number-rtl {\n direction: rtl;\n}\n.ant-input-number-group {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n display: table;\n width: 100%;\n border-collapse: separate;\n border-spacing: 0;\n}\n.ant-input-number-group[class*='col-'] {\n float: none;\n padding-right: 0;\n padding-left: 0;\n}\n.ant-input-number-group > [class*='col-'] {\n padding-right: 8px;\n}\n.ant-input-number-group > [class*='col-']:last-child {\n padding-right: 0;\n}\n.ant-input-number-group-addon,\n.ant-input-number-group-wrap,\n.ant-input-number-group > .ant-input-number {\n display: table-cell;\n}\n.ant-input-number-group-addon:not(:first-child):not(:last-child),\n.ant-input-number-group-wrap:not(:first-child):not(:last-child),\n.ant-input-number-group > .ant-input-number:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.ant-input-number-group-addon,\n.ant-input-number-group-wrap {\n width: 1px;\n white-space: nowrap;\n vertical-align: middle;\n}\n.ant-input-number-group-wrap > * {\n display: block !important;\n}\n.ant-input-number-group .ant-input-number {\n float: left;\n width: 100%;\n margin-bottom: 0;\n text-align: inherit;\n}\n.ant-input-number-group .ant-input-number:focus {\n z-index: 1;\n border-right-width: 1px;\n}\n.ant-input-number-group .ant-input-number:hover {\n z-index: 1;\n border-right-width: 1px;\n}\n.ant-input-search-with-button .ant-input-number-group .ant-input-number:hover {\n z-index: 0;\n}\n.ant-input-number-group-addon {\n position: relative;\n padding: 0 11px;\n color: rgba(0, 0, 0, 0.85);\n font-weight: normal;\n font-size: 14px;\n text-align: center;\n background-color: #fafafa;\n border: 1px solid #d9d9d9;\n border-radius: 5px;\n transition: all 0.3s;\n}\n.ant-input-number-group-addon .ant-select {\n margin: -5px -11px;\n}\n.ant-input-number-group-addon .ant-select.ant-select-single:not(.ant-select-customize-input) .ant-select-selector {\n background-color: inherit;\n border: 1px solid transparent;\n box-shadow: none;\n}\n.ant-input-number-group-addon .ant-select-open .ant-select-selector,\n.ant-input-number-group-addon .ant-select-focused .ant-select-selector {\n color: #5b5ce1;\n}\n.ant-input-number-group-addon .ant-cascader-picker {\n margin: -9px -12px;\n background-color: transparent;\n}\n.ant-input-number-group-addon .ant-cascader-picker .ant-cascader-input {\n text-align: left;\n border: 0;\n box-shadow: none;\n}\n.ant-input-number-group > .ant-input-number:first-child,\n.ant-input-number-group-addon:first-child {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.ant-input-number-group > .ant-input-number:first-child .ant-select .ant-select-selector,\n.ant-input-number-group-addon:first-child .ant-select .ant-select-selector {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.ant-input-number-group > .ant-input-number-affix-wrapper:not(:first-child) .ant-input-number {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.ant-input-number-group > .ant-input-number-affix-wrapper:not(:last-child) .ant-input-number {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.ant-input-number-group-addon:first-child {\n border-right: 0;\n}\n.ant-input-number-group-addon:last-child {\n border-left: 0;\n}\n.ant-input-number-group > .ant-input-number:last-child,\n.ant-input-number-group-addon:last-child {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.ant-input-number-group > .ant-input-number:last-child .ant-select .ant-select-selector,\n.ant-input-number-group-addon:last-child .ant-select .ant-select-selector {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.ant-input-number-group-lg .ant-input-number,\n.ant-input-number-group-lg > .ant-input-number-group-addon {\n padding: 6.5px 11px;\n font-size: 16px;\n}\n.ant-input-number-group-sm .ant-input-number,\n.ant-input-number-group-sm > .ant-input-number-group-addon {\n padding: 0px 7px;\n}\n.ant-input-number-group-lg .ant-select-single .ant-select-selector {\n height: 40px;\n}\n.ant-input-number-group-sm .ant-select-single .ant-select-selector {\n height: 24px;\n}\n.ant-input-number-group .ant-input-number-affix-wrapper:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.ant-input-search .ant-input-number-group .ant-input-number-affix-wrapper:not(:last-child) {\n border-top-left-radius: 5px;\n border-bottom-left-radius: 5px;\n}\n.ant-input-number-group .ant-input-number-affix-wrapper:not(:first-child),\n.ant-input-search .ant-input-number-group .ant-input-number-affix-wrapper:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.ant-input-number-group.ant-input-number-group-compact {\n display: block;\n}\n.ant-input-number-group.ant-input-number-group-compact::before {\n display: table;\n content: '';\n}\n.ant-input-number-group.ant-input-number-group-compact::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-input-number-group.ant-input-number-group-compact::before {\n display: table;\n content: '';\n}\n.ant-input-number-group.ant-input-number-group-compact::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-input-number-group.ant-input-number-group-compact-addon:not(:first-child):not(:last-child),\n.ant-input-number-group.ant-input-number-group-compact-wrap:not(:first-child):not(:last-child),\n.ant-input-number-group.ant-input-number-group-compact > .ant-input-number:not(:first-child):not(:last-child) {\n border-right-width: 1px;\n}\n.ant-input-number-group.ant-input-number-group-compact-addon:not(:first-child):not(:last-child):hover,\n.ant-input-number-group.ant-input-number-group-compact-wrap:not(:first-child):not(:last-child):hover,\n.ant-input-number-group.ant-input-number-group-compact > .ant-input-number:not(:first-child):not(:last-child):hover {\n z-index: 1;\n}\n.ant-input-number-group.ant-input-number-group-compact-addon:not(:first-child):not(:last-child):focus,\n.ant-input-number-group.ant-input-number-group-compact-wrap:not(:first-child):not(:last-child):focus,\n.ant-input-number-group.ant-input-number-group-compact > .ant-input-number:not(:first-child):not(:last-child):focus {\n z-index: 1;\n}\n.ant-input-number-group.ant-input-number-group-compact > * {\n display: inline-block;\n float: none;\n vertical-align: top;\n border-radius: 0;\n}\n.ant-input-number-group.ant-input-number-group-compact > .ant-input-number-affix-wrapper {\n display: inline-flex;\n}\n.ant-input-number-group.ant-input-number-group-compact > .ant-picker-range {\n display: inline-flex;\n}\n.ant-input-number-group.ant-input-number-group-compact > *:not(:last-child) {\n margin-right: -1px;\n border-right-width: 1px;\n}\n.ant-input-number-group.ant-input-number-group-compact .ant-input-number {\n float: none;\n}\n.ant-input-number-group.ant-input-number-group-compact > .ant-select > .ant-select-selector,\n.ant-input-number-group.ant-input-number-group-compact > .ant-select-auto-complete .ant-input,\n.ant-input-number-group.ant-input-number-group-compact > .ant-cascader-picker .ant-input,\n.ant-input-number-group.ant-input-number-group-compact > .ant-input-group-wrapper .ant-input {\n border-right-width: 1px;\n border-radius: 0;\n}\n.ant-input-number-group.ant-input-number-group-compact > .ant-select > .ant-select-selector:hover,\n.ant-input-number-group.ant-input-number-group-compact > .ant-select-auto-complete .ant-input:hover,\n.ant-input-number-group.ant-input-number-group-compact > .ant-cascader-picker .ant-input:hover,\n.ant-input-number-group.ant-input-number-group-compact > .ant-input-group-wrapper .ant-input:hover {\n z-index: 1;\n}\n.ant-input-number-group.ant-input-number-group-compact > .ant-select > .ant-select-selector:focus,\n.ant-input-number-group.ant-input-number-group-compact > .ant-select-auto-complete .ant-input:focus,\n.ant-input-number-group.ant-input-number-group-compact > .ant-cascader-picker .ant-input:focus,\n.ant-input-number-group.ant-input-number-group-compact > .ant-input-group-wrapper .ant-input:focus {\n z-index: 1;\n}\n.ant-input-number-group.ant-input-number-group-compact > .ant-select-focused {\n z-index: 1;\n}\n.ant-input-number-group.ant-input-number-group-compact > .ant-select > .ant-select-arrow {\n z-index: 1;\n}\n.ant-input-number-group.ant-input-number-group-compact > *:first-child,\n.ant-input-number-group.ant-input-number-group-compact > .ant-select:first-child > .ant-select-selector,\n.ant-input-number-group.ant-input-number-group-compact > .ant-select-auto-complete:first-child .ant-input,\n.ant-input-number-group.ant-input-number-group-compact > .ant-cascader-picker:first-child .ant-input {\n border-top-left-radius: 5px;\n border-bottom-left-radius: 5px;\n}\n.ant-input-number-group.ant-input-number-group-compact > *:last-child,\n.ant-input-number-group.ant-input-number-group-compact > .ant-select:last-child > .ant-select-selector,\n.ant-input-number-group.ant-input-number-group-compact > .ant-cascader-picker:last-child .ant-input,\n.ant-input-number-group.ant-input-number-group-compact > .ant-cascader-picker-focused:last-child .ant-input {\n border-right-width: 1px;\n border-top-right-radius: 5px;\n border-bottom-right-radius: 5px;\n}\n.ant-input-number-group.ant-input-number-group-compact > .ant-select-auto-complete .ant-input {\n vertical-align: top;\n}\n.ant-input-number-group.ant-input-number-group-compact .ant-input-group-wrapper + .ant-input-group-wrapper {\n margin-left: -1px;\n}\n.ant-input-number-group.ant-input-number-group-compact .ant-input-group-wrapper + .ant-input-group-wrapper .ant-input-affix-wrapper {\n border-radius: 0;\n}\n.ant-input-number-group.ant-input-number-group-compact .ant-input-group-wrapper:not(:last-child).ant-input-search > .ant-input-group > .ant-input-group-addon > .ant-input-search-button {\n border-radius: 0;\n}\n.ant-input-number-group.ant-input-number-group-compact .ant-input-group-wrapper:not(:last-child).ant-input-search > .ant-input-group > .ant-input {\n border-radius: 5px 0 0 5px;\n}\n.ant-input-number-group > .ant-input-number-rtl:first-child,\n.ant-input-number-group-rtl .ant-input-number-group-addon:first-child {\n border-radius: 0 5px 5px 0;\n}\n.ant-input-number-group-rtl .ant-input-number-group-addon:first-child {\n border-right: 1px solid #d9d9d9;\n border-left: 0;\n}\n.ant-input-number-group-rtl .ant-input-number-group-addon:last-child {\n border-right: 0;\n border-left: 1px solid #d9d9d9;\n border-radius: 5px 0 0 5px;\n}\n.ant-input-number-group-rtl.ant-input-number-group > .ant-input-number:last-child,\n.ant-input-number-group-rtl.ant-input-number-group-addon:last-child {\n border-radius: 5px 0 0 5px;\n}\n.ant-input-number-group-rtl.ant-input-number-group .ant-input-number-affix-wrapper:not(:first-child) {\n border-radius: 5px 0 0 5px;\n}\n.ant-input-number-group-rtl.ant-input-number-group .ant-input-number-affix-wrapper:not(:last-child) {\n border-radius: 0 5px 5px 0;\n}\n.ant-input-number-group-rtl.ant-input-number-group.ant-input-number-group-compact > *:not(:last-child) {\n margin-right: 0;\n margin-left: -1px;\n border-left-width: 1px;\n}\n.ant-input-number-group-rtl.ant-input-number-group.ant-input-number-group-compact > *:first-child,\n.ant-input-number-group-rtl.ant-input-number-group.ant-input-number-group-compact > .ant-select:first-child > .ant-select-selector,\n.ant-input-number-group-rtl.ant-input-number-group.ant-input-number-group-compact > .ant-select-auto-complete:first-child .ant-input,\n.ant-input-number-group-rtl.ant-input-number-group.ant-input-number-group-compact > .ant-cascader-picker:first-child .ant-input {\n border-radius: 0 5px 5px 0;\n}\n.ant-input-number-group-rtl.ant-input-number-group.ant-input-number-group-compact > *:last-child,\n.ant-input-number-group-rtl.ant-input-number-group.ant-input-number-group-compact > .ant-select:last-child > .ant-select-selector,\n.ant-input-number-group-rtl.ant-input-number-group.ant-input-number-group-compact > .ant-select-auto-complete:last-child .ant-input,\n.ant-input-number-group-rtl.ant-input-number-group.ant-input-number-group-compact > .ant-cascader-picker:last-child .ant-input,\n.ant-input-number-group-rtl.ant-input-number-group.ant-input-number-group-compact > .ant-cascader-picker-focused:last-child .ant-input {\n border-left-width: 1px;\n border-radius: 5px 0 0 5px;\n}\n.ant-input-number-group.ant-input-number-group-compact .ant-input-group-wrapper-rtl + .ant-input-group-wrapper-rtl {\n margin-right: -1px;\n margin-left: 0;\n}\n.ant-input-number-group.ant-input-number-group-compact .ant-input-group-wrapper-rtl:not(:last-child).ant-input-search > .ant-input-group > .ant-input {\n border-radius: 0 5px 5px 0;\n}\n.ant-input-number-group > .ant-input-number-rtl:first-child {\n border-radius: 0 5px 5px 0;\n}\n.ant-input-number-group > .ant-input-number-rtl:last-child {\n border-radius: 5px 0 0 5px;\n}\n.ant-input-number-group-rtl .ant-input-number-group-addon:first-child {\n border-right: 1px solid #d9d9d9;\n border-left: 0;\n border-radius: 0 5px 5px 0;\n}\n.ant-input-number-group-rtl .ant-input-number-group-addon:last-child {\n border-right: 0;\n border-left: 1px solid #d9d9d9;\n border-radius: 5px 0 0 5px;\n}\n.ant-input-number-group-wrapper {\n display: inline-block;\n text-align: start;\n vertical-align: top;\n}\n.ant-input-number-handler {\n position: relative;\n display: block;\n width: 100%;\n height: 50%;\n overflow: hidden;\n color: rgba(0, 0, 0, 0.45);\n font-weight: bold;\n line-height: 0;\n text-align: center;\n border-left: 1px solid #d9d9d9;\n transition: all 0.1s linear;\n}\n.ant-input-number-handler:active {\n background: #f4f4f4;\n}\n.ant-input-number-handler:hover .ant-input-number-handler-up-inner,\n.ant-input-number-handler:hover .ant-input-number-handler-down-inner {\n color: #8588ed;\n}\n.ant-input-number-handler-up-inner,\n.ant-input-number-handler-down-inner {\n display: inline-block;\n color: inherit;\n font-style: normal;\n line-height: 0;\n text-align: center;\n text-transform: none;\n vertical-align: -0.125em;\n text-rendering: optimizelegibility;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n position: absolute;\n right: 4px;\n width: 12px;\n height: 12px;\n color: rgba(0, 0, 0, 0.45);\n line-height: 12px;\n transition: all 0.1s linear;\n user-select: none;\n}\n.ant-input-number-handler-up-inner > *,\n.ant-input-number-handler-down-inner > * {\n line-height: 1;\n}\n.ant-input-number-handler-up-inner svg,\n.ant-input-number-handler-down-inner svg {\n display: inline-block;\n}\n.ant-input-number-handler-up-inner::before,\n.ant-input-number-handler-down-inner::before {\n display: none;\n}\n.ant-input-number-handler-up-inner .ant-input-number-handler-up-inner-icon,\n.ant-input-number-handler-up-inner .ant-input-number-handler-down-inner-icon,\n.ant-input-number-handler-down-inner .ant-input-number-handler-up-inner-icon,\n.ant-input-number-handler-down-inner .ant-input-number-handler-down-inner-icon {\n display: block;\n}\n.ant-input-number:hover {\n border-color: #8588ed;\n border-right-width: 1px;\n}\n.ant-input-number:hover + .ant-form-item-children-icon {\n opacity: 0;\n transition: opacity 0.24s linear 0.24s;\n}\n.ant-input-number-focused {\n border-color: #8588ed;\n box-shadow: 0 0 0 2px rgba(91, 92, 225, 0.2);\n border-right-width: 1px;\n outline: 0;\n}\n.ant-input-rtl .ant-input-number-focused {\n border-right-width: 0;\n border-left-width: 1px !important;\n}\n.ant-input-number-disabled {\n color: rgba(0, 0, 0, 0.25);\n background-color: #f5f5f5;\n border-color: #d9d9d9;\n box-shadow: none;\n cursor: not-allowed;\n opacity: 1;\n}\n.ant-input-number-disabled:hover {\n border-color: #d9d9d9;\n border-right-width: 1px;\n}\n.ant-input-number-disabled .ant-input-number-input {\n cursor: not-allowed;\n}\n.ant-input-number-disabled .ant-input-number-handler-wrap {\n display: none;\n}\n.ant-input-number-readonly .ant-input-number-handler-wrap {\n display: none;\n}\n.ant-input-number-input {\n width: 100%;\n height: 30px;\n padding: 0 11px;\n text-align: left;\n background-color: transparent;\n border: 0;\n border-radius: 5px;\n outline: 0;\n transition: all 0.3s linear;\n appearance: textfield !important;\n}\n.ant-input-number-input::placeholder {\n color: #bfbfbf;\n user-select: none;\n}\n.ant-input-number-input:placeholder-shown {\n text-overflow: ellipsis;\n}\n.ant-input-number-input[type='number']::-webkit-inner-spin-button,\n.ant-input-number-input[type='number']::-webkit-outer-spin-button {\n margin: 0;\n /* stylelint-disable-next-line property-no-vendor-prefix */\n -webkit-appearance: none;\n appearance: none;\n}\n.ant-input-number-lg {\n padding: 0;\n font-size: 16px;\n}\n.ant-input-number-lg input {\n height: 38px;\n}\n.ant-input-number-sm {\n padding: 0;\n}\n.ant-input-number-sm input {\n height: 22px;\n padding: 0 7px;\n}\n.ant-input-number-handler-wrap {\n position: absolute;\n top: 0;\n right: 0;\n width: 22px;\n height: 100%;\n background: #fff;\n border-radius: 0 5px 5px 0;\n opacity: 0;\n transition: opacity 0.24s linear 0.1s;\n}\n.ant-input-number-handler-wrap .ant-input-number-handler .ant-input-number-handler-up-inner,\n.ant-input-number-handler-wrap .ant-input-number-handler .ant-input-number-handler-down-inner {\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: auto;\n margin-right: 0;\n font-size: 7px;\n}\n.ant-input-number-borderless .ant-input-number-handler-wrap {\n border-left-width: 0;\n}\n.ant-input-number-handler-wrap:hover .ant-input-number-handler {\n height: 40%;\n}\n.ant-input-number:hover .ant-input-number-handler-wrap,\n.ant-input-number-focused .ant-input-number-handler-wrap {\n opacity: 1;\n}\n.ant-input-number-handler-up {\n border-top-right-radius: 5px;\n cursor: pointer;\n}\n.ant-input-number-handler-up-inner {\n top: 50%;\n margin-top: -5px;\n text-align: center;\n}\n.ant-input-number-handler-up:hover {\n height: 60% !important;\n}\n.ant-input-number-handler-down {\n top: 0;\n border-top: 1px solid #d9d9d9;\n border-bottom-right-radius: 5px;\n cursor: pointer;\n}\n.ant-input-number-handler-down-inner {\n top: 50%;\n text-align: center;\n transform: translateY(-50%);\n}\n.ant-input-number-handler-down:hover {\n height: 60% !important;\n}\n.ant-input-number-borderless .ant-input-number-handler-down {\n border-top-width: 0;\n}\n.ant-input-number:hover:not(.ant-input-number-borderless) .ant-input-number-handler-down,\n.ant-input-number-focused:not(.ant-input-number-borderless) .ant-input-number-handler-down {\n border-top: 1px solid #d9d9d9;\n}\n.ant-input-number-handler-up-disabled,\n.ant-input-number-handler-down-disabled {\n cursor: not-allowed;\n}\n.ant-input-number-handler-up-disabled:hover .ant-input-number-handler-up-inner,\n.ant-input-number-handler-down-disabled:hover .ant-input-number-handler-down-inner {\n color: rgba(0, 0, 0, 0.25);\n}\n.ant-input-number-borderless {\n box-shadow: none;\n}\n.ant-input-number-out-of-range input {\n color: #ff4d4f;\n}\n.ant-input-number-compact-item:not(.ant-input-number-compact-last-item):not(.ant-input-number-compact-item-rtl) {\n margin-right: -1px;\n}\n.ant-input-number-compact-item:not(.ant-input-number-compact-last-item).ant-input-number-compact-item-rtl {\n margin-left: -1px;\n}\n.ant-input-number-compact-item:hover,\n.ant-input-number-compact-item:focus,\n.ant-input-number-compact-item:active {\n z-index: 2;\n}\n.ant-input-number-compact-item.ant-input-number-focused {\n z-index: 2;\n}\n.ant-input-number-compact-item[disabled] {\n z-index: 0;\n}\n.ant-input-number-compact-item:not(.ant-input-number-compact-first-item):not(.ant-input-number-compact-last-item).ant-input-number {\n border-radius: 0;\n}\n.ant-input-number-compact-item.ant-input-number.ant-input-number-compact-first-item:not(.ant-input-number-compact-item-rtl) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.ant-input-number-compact-item.ant-input-number.ant-input-number-compact-last-item:not(.ant-input-number-compact-item-rtl) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.ant-input-number-compact-item.ant-input-number.ant-input-number-compact-item-rtl.ant-input-number-compact-first-item {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.ant-input-number-compact-item.ant-input-number.ant-input-number-compact-item-rtl.ant-input-number-compact-last-item {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.ant-input-number-rtl {\n direction: rtl;\n}\n.ant-input-number-rtl .ant-input-number-handler {\n border-right: 1px solid #d9d9d9;\n border-left: 0;\n}\n.ant-input-number-rtl .ant-input-number-handler-wrap {\n right: auto;\n left: 0;\n}\n.ant-input-number-rtl.ant-input-number-borderless .ant-input-number-handler-wrap {\n border-right-width: 0;\n}\n.ant-input-number-rtl .ant-input-number-handler-up {\n border-top-right-radius: 0;\n}\n.ant-input-number-rtl .ant-input-number-handler-down {\n border-bottom-right-radius: 0;\n}\n.ant-input-number-rtl .ant-input-number-input {\n direction: ltr;\n text-align: right;\n}\n.ant-layout {\n display: flex;\n flex: auto;\n flex-direction: column;\n /* fix firefox can't set height smaller than content on flex item */\n min-height: 0;\n background: #f0f2f5;\n}\n.ant-layout,\n.ant-layout * {\n box-sizing: border-box;\n}\n.ant-layout.ant-layout-has-sider {\n flex-direction: row;\n}\n.ant-layout.ant-layout-has-sider > .ant-layout,\n.ant-layout.ant-layout-has-sider > .ant-layout-content {\n width: 0;\n}\n.ant-layout-header,\n.ant-layout-footer {\n flex: 0 0 auto;\n}\n.ant-layout-header {\n height: 64px;\n padding: 0 50px;\n color: rgba(0, 0, 0, 0.85);\n line-height: 64px;\n background: #001529;\n}\n.ant-layout-footer {\n padding: 24px 50px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n background: #f0f2f5;\n}\n.ant-layout-content {\n flex: auto;\n /* fix firefox can't set height smaller than content on flex item */\n min-height: 0;\n}\n.ant-layout-sider {\n position: relative;\n /* fix firefox can't set width smaller than content on flex item */\n min-width: 0;\n background: #001529;\n transition: all 0.2s;\n}\n.ant-layout-sider-children {\n height: 100%;\n margin-top: -0.1px;\n padding-top: 0.1px;\n}\n.ant-layout-sider-children .ant-menu.ant-menu-inline-collapsed {\n width: auto;\n}\n.ant-layout-sider-has-trigger {\n padding-bottom: 48px;\n}\n.ant-layout-sider-right {\n order: 1;\n}\n.ant-layout-sider-trigger {\n position: fixed;\n bottom: 0;\n z-index: 1;\n height: 48px;\n color: #fff;\n line-height: 48px;\n text-align: center;\n background: #002140;\n cursor: pointer;\n transition: all 0.2s;\n}\n.ant-layout-sider-zero-width > * {\n overflow: hidden;\n}\n.ant-layout-sider-zero-width-trigger {\n position: absolute;\n top: 64px;\n right: -36px;\n z-index: 1;\n width: 36px;\n height: 42px;\n color: #fff;\n font-size: 18px;\n line-height: 42px;\n text-align: center;\n background: #001529;\n border-radius: 0 5px 5px 0;\n cursor: pointer;\n transition: background 0.3s ease;\n}\n.ant-layout-sider-zero-width-trigger::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n transition: all 0.3s;\n content: '';\n}\n.ant-layout-sider-zero-width-trigger:hover::after {\n background: rgba(255, 255, 255, 0.1);\n}\n.ant-layout-sider-zero-width-trigger-right {\n left: -36px;\n border-radius: 5px 0 0 5px;\n}\n.ant-layout-sider-light {\n background: #fff;\n}\n.ant-layout-sider-light .ant-layout-sider-trigger {\n color: rgba(0, 0, 0, 0.85);\n background: #fff;\n}\n.ant-layout-sider-light .ant-layout-sider-zero-width-trigger {\n color: rgba(0, 0, 0, 0.85);\n background: #fff;\n}\n.ant-layout-rtl {\n direction: rtl;\n}\n.ant-list {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n}\n.ant-list * {\n outline: none;\n}\n.ant-list-pagination {\n margin-top: 24px;\n text-align: right;\n}\n.ant-list-pagination .ant-pagination-options {\n text-align: left;\n}\n.ant-list-more {\n margin-top: 12px;\n text-align: center;\n}\n.ant-list-more button {\n padding-right: 32px;\n padding-left: 32px;\n}\n.ant-list-spin {\n min-height: 40px;\n text-align: center;\n}\n.ant-list-empty-text {\n padding: 16px;\n color: rgba(0, 0, 0, 0.25);\n font-size: 14px;\n text-align: center;\n}\n.ant-list-items {\n margin: 0;\n padding: 0;\n list-style: none;\n}\n.ant-list-item {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 0;\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-list-item-meta {\n display: flex;\n flex: 1;\n align-items: flex-start;\n max-width: 100%;\n}\n.ant-list-item-meta-avatar {\n margin-right: 16px;\n}\n.ant-list-item-meta-content {\n flex: 1 0;\n width: 0;\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-list-item-meta-title {\n margin-bottom: 4px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n line-height: 1.5715;\n}\n.ant-list-item-meta-title > a {\n color: rgba(0, 0, 0, 0.85);\n transition: all 0.3s;\n}\n.ant-list-item-meta-title > a:hover {\n color: #5b5ce1;\n}\n.ant-list-item-meta-description {\n color: rgba(0, 0, 0, 0.45);\n font-size: 14px;\n line-height: 1.5715;\n}\n.ant-list-item-action {\n flex: 0 0 auto;\n margin-left: 48px;\n padding: 0;\n font-size: 0;\n list-style: none;\n}\n.ant-list-item-action > li {\n position: relative;\n display: inline-block;\n padding: 0 8px;\n color: rgba(0, 0, 0, 0.45);\n font-size: 14px;\n line-height: 1.5715;\n text-align: center;\n}\n.ant-list-item-action > li:first-child {\n padding-left: 0;\n}\n.ant-list-item-action-split {\n position: absolute;\n top: 50%;\n right: 0;\n width: 1px;\n height: 14px;\n margin-top: -7px;\n background-color: #f0f0f0;\n}\n.ant-list-header {\n background: transparent;\n}\n.ant-list-footer {\n background: transparent;\n}\n.ant-list-header,\n.ant-list-footer {\n padding-top: 12px;\n padding-bottom: 12px;\n}\n.ant-list-empty {\n padding: 16px 0;\n color: rgba(0, 0, 0, 0.45);\n font-size: 12px;\n text-align: center;\n}\n.ant-list-split .ant-list-item {\n border-bottom: 1px solid #f0f0f0;\n}\n.ant-list-split .ant-list-item:last-child {\n border-bottom: none;\n}\n.ant-list-split .ant-list-header {\n border-bottom: 1px solid #f0f0f0;\n}\n.ant-list-split.ant-list-empty .ant-list-footer {\n border-top: 1px solid #f0f0f0;\n}\n.ant-list-loading .ant-list-spin-nested-loading {\n min-height: 32px;\n}\n.ant-list-split.ant-list-something-after-last-item .ant-spin-container > .ant-list-items > .ant-list-item:last-child {\n border-bottom: 1px solid #f0f0f0;\n}\n.ant-list-lg .ant-list-item {\n padding: 16px 24px;\n}\n.ant-list-sm .ant-list-item {\n padding: 8px 16px;\n}\n.ant-list-vertical .ant-list-item {\n align-items: initial;\n}\n.ant-list-vertical .ant-list-item-main {\n display: block;\n flex: 1;\n}\n.ant-list-vertical .ant-list-item-extra {\n margin-left: 40px;\n}\n.ant-list-vertical .ant-list-item-meta {\n margin-bottom: 16px;\n}\n.ant-list-vertical .ant-list-item-meta-title {\n margin-bottom: 12px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 16px;\n line-height: 24px;\n}\n.ant-list-vertical .ant-list-item-action {\n margin-top: 16px;\n margin-left: auto;\n}\n.ant-list-vertical .ant-list-item-action > li {\n padding: 0 16px;\n}\n.ant-list-vertical .ant-list-item-action > li:first-child {\n padding-left: 0;\n}\n.ant-list-grid .ant-col > .ant-list-item {\n display: block;\n max-width: 100%;\n margin-bottom: 16px;\n padding-top: 0;\n padding-bottom: 0;\n border-bottom: none;\n}\n.ant-list-item-no-flex {\n display: block;\n}\n.ant-list:not(.ant-list-vertical) .ant-list-item-no-flex .ant-list-item-action {\n float: right;\n}\n.ant-list-bordered {\n border: 1px solid #d9d9d9;\n border-radius: 5px;\n}\n.ant-list-bordered .ant-list-header {\n padding-right: 24px;\n padding-left: 24px;\n}\n.ant-list-bordered .ant-list-footer {\n padding-right: 24px;\n padding-left: 24px;\n}\n.ant-list-bordered .ant-list-item {\n padding-right: 24px;\n padding-left: 24px;\n}\n.ant-list-bordered .ant-list-pagination {\n margin: 16px 24px;\n}\n.ant-list-bordered.ant-list-sm .ant-list-item {\n padding: 8px 16px;\n}\n.ant-list-bordered.ant-list-sm .ant-list-header,\n.ant-list-bordered.ant-list-sm .ant-list-footer {\n padding: 8px 16px;\n}\n.ant-list-bordered.ant-list-lg .ant-list-item {\n padding: 16px 24px;\n}\n.ant-list-bordered.ant-list-lg .ant-list-header,\n.ant-list-bordered.ant-list-lg .ant-list-footer {\n padding: 16px 24px;\n}\n@media screen and (max-width: 768px) {\n .ant-list-item-action {\n margin-left: 24px;\n }\n .ant-list-vertical .ant-list-item-extra {\n margin-left: 24px;\n }\n}\n@media screen and (max-width: 576px) {\n .ant-list-item {\n flex-wrap: wrap;\n }\n .ant-list-item-action {\n margin-left: 12px;\n }\n .ant-list-vertical .ant-list-item {\n flex-wrap: wrap-reverse;\n }\n .ant-list-vertical .ant-list-item-main {\n min-width: 220px;\n }\n .ant-list-vertical .ant-list-item-extra {\n margin: auto auto 16px;\n }\n}\n.ant-list-rtl {\n direction: rtl;\n text-align: right;\n}\n.ant-list-rtl .ReactVirtualized__List .ant-list-item {\n direction: rtl;\n}\n.ant-list-rtl .ant-list-pagination {\n text-align: left;\n}\n.ant-list-rtl .ant-list-item-meta-avatar {\n margin-right: 0;\n margin-left: 16px;\n}\n.ant-list-rtl .ant-list-item-action {\n margin-right: 48px;\n margin-left: 0;\n}\n.ant-list.ant-list-rtl .ant-list-item-action > li:first-child {\n padding-right: 0;\n padding-left: 16px;\n}\n.ant-list-rtl .ant-list-item-action-split {\n right: auto;\n left: 0;\n}\n.ant-list-rtl.ant-list-vertical .ant-list-item-extra {\n margin-right: 40px;\n margin-left: 0;\n}\n.ant-list-rtl.ant-list-vertical .ant-list-item-action {\n margin-right: auto;\n}\n.ant-list-rtl .ant-list-vertical .ant-list-item-action > li:first-child {\n padding-right: 0;\n padding-left: 16px;\n}\n.ant-list-rtl .ant-list:not(.ant-list-vertical) .ant-list-item-no-flex .ant-list-item-action {\n float: left;\n}\n@media screen and (max-width: 768px) {\n .ant-list-rtl .ant-list-item-action {\n margin-right: 24px;\n margin-left: 0;\n }\n .ant-list-rtl .ant-list-vertical .ant-list-item-extra {\n margin-right: 24px;\n margin-left: 0;\n }\n}\n@media screen and (max-width: 576px) {\n .ant-list-rtl .ant-list-item-action {\n margin-right: 22px;\n margin-left: 0;\n }\n .ant-list-rtl.ant-list-vertical .ant-list-item-extra {\n margin: auto auto 16px;\n }\n}\n.ant-mentions-status-error:not(.ant-mentions-disabled):not(.ant-mentions-borderless).ant-mentions,\n.ant-mentions-status-error:not(.ant-mentions-disabled):not(.ant-mentions-borderless).ant-mentions:hover {\n background: #fff;\n border-color: #ff4d4f;\n}\n.ant-mentions-status-error:not(.ant-mentions-disabled):not(.ant-mentions-borderless).ant-mentions:focus,\n.ant-mentions-status-error:not(.ant-mentions-disabled):not(.ant-mentions-borderless).ant-mentions-focused {\n border-color: #ff7875;\n box-shadow: 0 0 0 2px rgba(255, 77, 79, 0.2);\n border-right-width: 1px;\n outline: 0;\n}\n.ant-mentions-status-error .ant-input-prefix {\n color: #ff4d4f;\n}\n.ant-mentions-status-warning:not(.ant-mentions-disabled):not(.ant-mentions-borderless).ant-mentions,\n.ant-mentions-status-warning:not(.ant-mentions-disabled):not(.ant-mentions-borderless).ant-mentions:hover {\n background: #fff;\n border-color: #faad14;\n}\n.ant-mentions-status-warning:not(.ant-mentions-disabled):not(.ant-mentions-borderless).ant-mentions:focus,\n.ant-mentions-status-warning:not(.ant-mentions-disabled):not(.ant-mentions-borderless).ant-mentions-focused {\n border-color: #ffc53d;\n box-shadow: 0 0 0 2px rgba(250, 173, 20, 0.2);\n border-right-width: 1px;\n outline: 0;\n}\n.ant-mentions-status-warning .ant-input-prefix {\n color: #faad14;\n}\n.ant-mentions {\n box-sizing: border-box;\n margin: 0;\n font-variant: tabular-nums;\n list-style: none;\n font-feature-settings: 'tnum';\n width: 100%;\n min-width: 0;\n padding: 4px 11px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n background-color: #fff;\n background-image: none;\n border: 1px solid #d9d9d9;\n border-radius: 5px;\n transition: all 0.3s;\n position: relative;\n display: inline-block;\n height: auto;\n padding: 0;\n overflow: hidden;\n line-height: 1.5715;\n white-space: pre-wrap;\n vertical-align: bottom;\n}\n.ant-mentions::placeholder {\n color: #bfbfbf;\n user-select: none;\n}\n.ant-mentions:placeholder-shown {\n text-overflow: ellipsis;\n}\n.ant-mentions:hover {\n border-color: #8588ed;\n border-right-width: 1px;\n}\n.ant-input-rtl .ant-mentions:hover {\n border-right-width: 0;\n border-left-width: 1px !important;\n}\n.ant-mentions:focus,\n.ant-mentions-focused {\n border-color: #8588ed;\n box-shadow: 0 0 0 2px rgba(91, 92, 225, 0.2);\n border-right-width: 1px;\n outline: 0;\n}\n.ant-input-rtl .ant-mentions:focus,\n.ant-input-rtl .ant-mentions-focused {\n border-right-width: 0;\n border-left-width: 1px !important;\n}\n.ant-mentions-disabled {\n color: rgba(0, 0, 0, 0.25);\n background-color: #f5f5f5;\n border-color: #d9d9d9;\n box-shadow: none;\n cursor: not-allowed;\n opacity: 1;\n}\n.ant-mentions-disabled:hover {\n border-color: #d9d9d9;\n border-right-width: 1px;\n}\n.ant-mentions[disabled] {\n color: rgba(0, 0, 0, 0.25);\n background-color: #f5f5f5;\n border-color: #d9d9d9;\n box-shadow: none;\n cursor: not-allowed;\n opacity: 1;\n}\n.ant-mentions[disabled]:hover {\n border-color: #d9d9d9;\n border-right-width: 1px;\n}\n.ant-mentions-borderless,\n.ant-mentions-borderless:hover,\n.ant-mentions-borderless:focus,\n.ant-mentions-borderless-focused,\n.ant-mentions-borderless-disabled,\n.ant-mentions-borderless[disabled] {\n background-color: transparent;\n border: none;\n box-shadow: none;\n}\ntextarea.ant-mentions {\n max-width: 100%;\n height: auto;\n min-height: 32px;\n line-height: 1.5715;\n vertical-align: bottom;\n transition: all 0.3s, height 0s;\n}\n.ant-mentions-lg {\n padding: 6.5px 11px;\n font-size: 16px;\n}\n.ant-mentions-sm {\n padding: 0px 7px;\n}\n.ant-mentions-rtl {\n direction: rtl;\n}\n.ant-mentions-disabled > textarea {\n color: rgba(0, 0, 0, 0.25);\n background-color: #f5f5f5;\n border-color: #d9d9d9;\n box-shadow: none;\n cursor: not-allowed;\n opacity: 1;\n}\n.ant-mentions-disabled > textarea:hover {\n border-color: #d9d9d9;\n border-right-width: 1px;\n}\n.ant-mentions-focused {\n border-color: #8588ed;\n box-shadow: 0 0 0 2px rgba(91, 92, 225, 0.2);\n border-right-width: 1px;\n outline: 0;\n}\n.ant-input-rtl .ant-mentions-focused {\n border-right-width: 0;\n border-left-width: 1px !important;\n}\n.ant-mentions > textarea,\n.ant-mentions-measure {\n min-height: 30px;\n margin: 0;\n padding: 4px 11px;\n overflow: inherit;\n overflow-x: hidden;\n overflow-y: auto;\n /* stylelint-disable declaration-block-no-redundant-longhand-properties */\n font-weight: inherit;\n font-size: inherit;\n font-family: inherit;\n font-style: inherit;\n font-variant: inherit;\n font-size-adjust: inherit;\n font-stretch: inherit;\n line-height: inherit;\n /* stylelint-enable declaration-block-no-redundant-longhand-properties */\n direction: inherit;\n letter-spacing: inherit;\n white-space: inherit;\n text-align: inherit;\n vertical-align: top;\n word-wrap: break-word;\n word-break: inherit;\n tab-size: inherit;\n}\n.ant-mentions > textarea {\n width: 100%;\n border: none;\n outline: none;\n resize: none;\n}\n.ant-mentions > textarea::placeholder {\n color: #bfbfbf;\n user-select: none;\n}\n.ant-mentions > textarea:placeholder-shown {\n text-overflow: ellipsis;\n}\n.ant-mentions-measure {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: -1;\n color: transparent;\n pointer-events: none;\n}\n.ant-mentions-measure > span {\n display: inline-block;\n min-height: 1em;\n}\n.ant-mentions-dropdown {\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: absolute;\n top: -9999px;\n left: -9999px;\n z-index: 1050;\n box-sizing: border-box;\n font-size: 14px;\n font-variant: initial;\n background-color: #fff;\n border-radius: 5px;\n outline: none;\n box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05);\n}\n.ant-mentions-dropdown-hidden {\n display: none;\n}\n.ant-mentions-dropdown-menu {\n max-height: 250px;\n margin-bottom: 0;\n padding-left: 0;\n overflow: auto;\n list-style: none;\n outline: none;\n}\n.ant-mentions-dropdown-menu-item {\n position: relative;\n display: block;\n min-width: 100px;\n padding: 5px 12px;\n overflow: hidden;\n color: rgba(0, 0, 0, 0.85);\n font-weight: normal;\n line-height: 1.5715;\n white-space: nowrap;\n text-overflow: ellipsis;\n cursor: pointer;\n transition: background 0.3s ease;\n}\n.ant-mentions-dropdown-menu-item:hover {\n background-color: #f5f5f5;\n}\n.ant-mentions-dropdown-menu-item:first-child {\n border-radius: 5px 5px 0 0;\n}\n.ant-mentions-dropdown-menu-item:last-child {\n border-radius: 0 0 5px 5px;\n}\n.ant-mentions-dropdown-menu-item-disabled {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n}\n.ant-mentions-dropdown-menu-item-disabled:hover {\n color: rgba(0, 0, 0, 0.25);\n background-color: #fff;\n cursor: not-allowed;\n}\n.ant-mentions-dropdown-menu-item-selected {\n color: rgba(0, 0, 0, 0.85);\n font-weight: 600;\n background-color: #fafafa;\n}\n.ant-mentions-dropdown-menu-item-active {\n background-color: #f5f5f5;\n}\n.ant-mentions-suffix {\n position: absolute;\n top: 0;\n right: 11px;\n bottom: 0;\n z-index: 1;\n display: inline-flex;\n align-items: center;\n margin: auto;\n}\n.ant-mentions-rtl {\n direction: rtl;\n}\n.ant-menu-item-danger.ant-menu-item {\n color: #ff4d4f;\n}\n.ant-menu-item-danger.ant-menu-item:hover,\n.ant-menu-item-danger.ant-menu-item-active {\n color: #ff4d4f;\n}\n.ant-menu-item-danger.ant-menu-item:active {\n background: #fff1f0;\n}\n.ant-menu-item-danger.ant-menu-item-selected {\n color: #ff4d4f;\n}\n.ant-menu-item-danger.ant-menu-item-selected > a,\n.ant-menu-item-danger.ant-menu-item-selected > a:hover {\n color: #ff4d4f;\n}\n.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-danger.ant-menu-item-selected {\n background-color: #fff1f0;\n}\n.ant-menu-inline .ant-menu-item-danger.ant-menu-item::after {\n border-right-color: #ff4d4f;\n}\n.ant-menu-dark .ant-menu-item-danger.ant-menu-item,\n.ant-menu-dark .ant-menu-item-danger.ant-menu-item:hover,\n.ant-menu-dark .ant-menu-item-danger.ant-menu-item > a {\n color: #ff4d4f;\n}\n.ant-menu-dark.ant-menu-dark:not(.ant-menu-horizontal) .ant-menu-item-danger.ant-menu-item-selected {\n color: #fff;\n background-color: #ff4d4f;\n}\n.ant-menu {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n font-variant: tabular-nums;\n line-height: 1.5715;\n font-feature-settings: 'tnum';\n margin-bottom: 0;\n padding-left: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n line-height: 0;\n text-align: left;\n list-style: none;\n background: #fff;\n outline: none;\n box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05);\n transition: background 0.3s, width 0.3s cubic-bezier(0.2, 0, 0, 1) 0s;\n}\n.ant-menu::before {\n display: table;\n content: '';\n}\n.ant-menu::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-menu::before {\n display: table;\n content: '';\n}\n.ant-menu::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-menu.ant-menu-root:focus-visible {\n box-shadow: 0 0 0 2px #f0f2ff;\n}\n.ant-menu ul,\n.ant-menu ol {\n margin: 0;\n padding: 0;\n list-style: none;\n}\n.ant-menu-overflow {\n display: flex;\n}\n.ant-menu-overflow-item {\n flex: none;\n}\n.ant-menu-hidden,\n.ant-menu-submenu-hidden {\n display: none;\n}\n.ant-menu-item-group-title {\n height: 1.5715;\n padding: 8px 16px;\n color: rgba(0, 0, 0, 0.45);\n font-size: 14px;\n line-height: 1.5715;\n transition: all 0.3s;\n}\n.ant-menu-horizontal .ant-menu-submenu {\n transition: border-color 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), background 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\n}\n.ant-menu-submenu,\n.ant-menu-submenu-inline {\n transition: border-color 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), background 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), padding 0.15s cubic-bezier(0.645, 0.045, 0.355, 1);\n}\n.ant-menu-submenu-selected {\n color: #5b5ce1;\n}\n.ant-menu-item:active,\n.ant-menu-submenu-title:active {\n background: #f0f2ff;\n}\n.ant-menu-submenu .ant-menu-sub {\n cursor: initial;\n transition: background 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), padding 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\n}\n.ant-menu-title-content {\n transition: color 0.3s;\n}\n.ant-menu-item a {\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-menu-item a:hover {\n color: #5b5ce1;\n}\n.ant-menu-item a::before {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background-color: transparent;\n content: '';\n}\n.ant-menu-item > .ant-badge a {\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-menu-item > .ant-badge a:hover {\n color: #5b5ce1;\n}\n.ant-menu-item-divider {\n overflow: hidden;\n line-height: 0;\n border-color: #f0f0f0;\n border-style: solid;\n border-width: 1px 0 0;\n}\n.ant-menu-item-divider-dashed {\n border-style: dashed;\n}\n.ant-menu-horizontal .ant-menu-item,\n.ant-menu-horizontal .ant-menu-submenu {\n margin-top: -1px;\n}\n.ant-menu-horizontal > .ant-menu-item:hover,\n.ant-menu-horizontal > .ant-menu-item-active,\n.ant-menu-horizontal > .ant-menu-submenu .ant-menu-submenu-title:hover {\n background-color: transparent;\n}\n.ant-menu-item-selected {\n color: #5b5ce1;\n}\n.ant-menu-item-selected a,\n.ant-menu-item-selected a:hover {\n color: #5b5ce1;\n}\n.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-selected {\n background-color: #f0f2ff;\n}\n.ant-menu-inline,\n.ant-menu-vertical,\n.ant-menu-vertical-left {\n border-right: 1px solid #f0f0f0;\n}\n.ant-menu-vertical-right {\n border-left: 1px solid #f0f0f0;\n}\n.ant-menu-vertical.ant-menu-sub,\n.ant-menu-vertical-left.ant-menu-sub,\n.ant-menu-vertical-right.ant-menu-sub {\n min-width: 160px;\n max-height: calc(100vh - 100px);\n padding: 0;\n overflow: hidden;\n border-right: 0;\n}\n.ant-menu-vertical.ant-menu-sub:not([class*='-active']),\n.ant-menu-vertical-left.ant-menu-sub:not([class*='-active']),\n.ant-menu-vertical-right.ant-menu-sub:not([class*='-active']) {\n overflow-x: hidden;\n overflow-y: auto;\n}\n.ant-menu-vertical.ant-menu-sub .ant-menu-item,\n.ant-menu-vertical-left.ant-menu-sub .ant-menu-item,\n.ant-menu-vertical-right.ant-menu-sub .ant-menu-item {\n left: 0;\n margin-left: 0;\n border-right: 0;\n}\n.ant-menu-vertical.ant-menu-sub .ant-menu-item::after,\n.ant-menu-vertical-left.ant-menu-sub .ant-menu-item::after,\n.ant-menu-vertical-right.ant-menu-sub .ant-menu-item::after {\n border-right: 0;\n}\n.ant-menu-vertical.ant-menu-sub > .ant-menu-item,\n.ant-menu-vertical-left.ant-menu-sub > .ant-menu-item,\n.ant-menu-vertical-right.ant-menu-sub > .ant-menu-item,\n.ant-menu-vertical.ant-menu-sub > .ant-menu-submenu,\n.ant-menu-vertical-left.ant-menu-sub > .ant-menu-submenu,\n.ant-menu-vertical-right.ant-menu-sub > .ant-menu-submenu {\n transform-origin: 0 0;\n}\n.ant-menu-horizontal.ant-menu-sub {\n min-width: 114px;\n}\n.ant-menu-horizontal .ant-menu-item,\n.ant-menu-horizontal .ant-menu-submenu-title {\n transition: border-color 0.3s, background 0.3s;\n}\n.ant-menu-item,\n.ant-menu-submenu-title {\n position: relative;\n display: block;\n margin: 0;\n padding: 0 20px;\n white-space: nowrap;\n cursor: pointer;\n transition: border-color 0.3s, background 0.3s, padding 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\n}\n.ant-menu-item .ant-menu-item-icon,\n.ant-menu-submenu-title .ant-menu-item-icon,\n.ant-menu-item .anticon,\n.ant-menu-submenu-title .anticon {\n min-width: 14px;\n font-size: 14px;\n transition: font-size 0.15s cubic-bezier(0.215, 0.61, 0.355, 1), margin 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), color 0.3s;\n}\n.ant-menu-item .ant-menu-item-icon + span,\n.ant-menu-submenu-title .ant-menu-item-icon + span,\n.ant-menu-item .anticon + span,\n.ant-menu-submenu-title .anticon + span {\n margin-left: 10px;\n opacity: 1;\n transition: opacity 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), margin 0.3s, color 0.3s;\n}\n.ant-menu-item .ant-menu-item-icon.svg,\n.ant-menu-submenu-title .ant-menu-item-icon.svg {\n vertical-align: -0.125em;\n}\n.ant-menu-item.ant-menu-item-only-child > .anticon,\n.ant-menu-submenu-title.ant-menu-item-only-child > .anticon,\n.ant-menu-item.ant-menu-item-only-child > .ant-menu-item-icon,\n.ant-menu-submenu-title.ant-menu-item-only-child > .ant-menu-item-icon {\n margin-right: 0;\n}\n.ant-menu-item:not(.ant-menu-item-disabled):focus-visible,\n.ant-menu-submenu-title:not(.ant-menu-item-disabled):focus-visible {\n box-shadow: 0 0 0 2px #f0f2ff;\n}\n.ant-menu > .ant-menu-item-divider {\n margin: 1px 0;\n padding: 0;\n}\n.ant-menu-submenu-popup {\n position: absolute;\n z-index: 1050;\n background: transparent;\n border-radius: 5px;\n box-shadow: none;\n transform-origin: 0 0;\n}\n.ant-menu-submenu-popup::before {\n position: absolute;\n top: -7px;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: -1;\n width: 100%;\n height: 100%;\n opacity: 0.0001;\n content: ' ';\n}\n.ant-menu-submenu-placement-rightTop::before {\n top: 0;\n left: -7px;\n}\n.ant-menu-submenu > .ant-menu {\n background-color: #fff;\n border-radius: 5px;\n}\n.ant-menu-submenu > .ant-menu-submenu-title::after {\n transition: transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\n}\n.ant-menu-submenu-popup > .ant-menu {\n background-color: #fff;\n}\n.ant-menu-submenu-expand-icon,\n.ant-menu-submenu-arrow {\n position: absolute;\n top: 50%;\n right: 16px;\n width: 10px;\n color: rgba(0, 0, 0, 0.85);\n transform: translateY(-50%);\n transition: transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\n}\n.ant-menu-submenu-arrow::before,\n.ant-menu-submenu-arrow::after {\n position: absolute;\n width: 6px;\n height: 1.5px;\n background-color: currentcolor;\n border-radius: 2px;\n transition: background 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), top 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), color 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\n content: '';\n}\n.ant-menu-submenu-arrow::before {\n transform: rotate(45deg) translateY(-2.5px);\n}\n.ant-menu-submenu-arrow::after {\n transform: rotate(-45deg) translateY(2.5px);\n}\n.ant-menu-submenu:hover > .ant-menu-submenu-title > .ant-menu-submenu-expand-icon,\n.ant-menu-submenu:hover > .ant-menu-submenu-title > .ant-menu-submenu-arrow {\n color: #5b5ce1;\n}\n.ant-menu-inline-collapsed .ant-menu-submenu-arrow::before,\n.ant-menu-submenu-inline .ant-menu-submenu-arrow::before {\n transform: rotate(-45deg) translateX(2.5px);\n}\n.ant-menu-inline-collapsed .ant-menu-submenu-arrow::after,\n.ant-menu-submenu-inline .ant-menu-submenu-arrow::after {\n transform: rotate(45deg) translateX(-2.5px);\n}\n.ant-menu-submenu-horizontal .ant-menu-submenu-arrow {\n display: none;\n}\n.ant-menu-submenu-open.ant-menu-submenu-inline > .ant-menu-submenu-title > .ant-menu-submenu-arrow {\n transform: translateY(-2px);\n}\n.ant-menu-submenu-open.ant-menu-submenu-inline > .ant-menu-submenu-title > .ant-menu-submenu-arrow::after {\n transform: rotate(-45deg) translateX(-2.5px);\n}\n.ant-menu-submenu-open.ant-menu-submenu-inline > .ant-menu-submenu-title > .ant-menu-submenu-arrow::before {\n transform: rotate(45deg) translateX(2.5px);\n}\n.ant-menu-vertical .ant-menu-submenu-selected,\n.ant-menu-vertical-left .ant-menu-submenu-selected,\n.ant-menu-vertical-right .ant-menu-submenu-selected {\n color: #5b5ce1;\n}\n.ant-menu-horizontal {\n line-height: 46px;\n border: 0;\n border-bottom: 1px solid #f0f0f0;\n box-shadow: none;\n}\n.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-item,\n.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-submenu {\n margin-top: -1px;\n margin-bottom: 0;\n padding: 0 20px;\n}\n.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-item:hover,\n.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-submenu:hover,\n.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-item-active,\n.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-submenu-active,\n.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-item-open,\n.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-submenu-open,\n.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-item-selected,\n.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-submenu-selected {\n color: #5b5ce1;\n}\n.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-item:hover::after,\n.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-submenu:hover::after,\n.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-item-active::after,\n.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-submenu-active::after,\n.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-item-open::after,\n.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-submenu-open::after,\n.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-item-selected::after,\n.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-submenu-selected::after {\n border-bottom: 2px solid #5b5ce1;\n}\n.ant-menu-horizontal > .ant-menu-item,\n.ant-menu-horizontal > .ant-menu-submenu {\n position: relative;\n top: 1px;\n display: inline-block;\n vertical-align: bottom;\n}\n.ant-menu-horizontal > .ant-menu-item::after,\n.ant-menu-horizontal > .ant-menu-submenu::after {\n position: absolute;\n right: 20px;\n bottom: 0;\n left: 20px;\n border-bottom: 2px solid transparent;\n transition: border-color 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\n content: '';\n}\n.ant-menu-horizontal > .ant-menu-submenu > .ant-menu-submenu-title {\n padding: 0;\n}\n.ant-menu-horizontal > .ant-menu-item a {\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-menu-horizontal > .ant-menu-item a:hover {\n color: #5b5ce1;\n}\n.ant-menu-horizontal > .ant-menu-item a::before {\n bottom: -2px;\n}\n.ant-menu-horizontal > .ant-menu-item-selected a {\n color: #5b5ce1;\n}\n.ant-menu-horizontal::after {\n display: block;\n clear: both;\n height: 0;\n content: '\\20';\n}\n.ant-menu-vertical .ant-menu-item,\n.ant-menu-vertical-left .ant-menu-item,\n.ant-menu-vertical-right .ant-menu-item,\n.ant-menu-inline .ant-menu-item {\n position: relative;\n}\n.ant-menu-vertical .ant-menu-item::after,\n.ant-menu-vertical-left .ant-menu-item::after,\n.ant-menu-vertical-right .ant-menu-item::after,\n.ant-menu-inline .ant-menu-item::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n border-right: 3px solid #5b5ce1;\n transform: scaleY(0.0001);\n opacity: 0;\n transition: transform 0.15s cubic-bezier(0.215, 0.61, 0.355, 1), opacity 0.15s cubic-bezier(0.215, 0.61, 0.355, 1);\n content: '';\n}\n.ant-menu-vertical .ant-menu-item,\n.ant-menu-vertical-left .ant-menu-item,\n.ant-menu-vertical-right .ant-menu-item,\n.ant-menu-inline .ant-menu-item,\n.ant-menu-vertical .ant-menu-submenu-title,\n.ant-menu-vertical-left .ant-menu-submenu-title,\n.ant-menu-vertical-right .ant-menu-submenu-title,\n.ant-menu-inline .ant-menu-submenu-title {\n height: 40px;\n margin-top: 4px;\n margin-bottom: 4px;\n padding: 0 16px;\n overflow: hidden;\n line-height: 40px;\n text-overflow: ellipsis;\n}\n.ant-menu-vertical .ant-menu-submenu,\n.ant-menu-vertical-left .ant-menu-submenu,\n.ant-menu-vertical-right .ant-menu-submenu,\n.ant-menu-inline .ant-menu-submenu {\n padding-bottom: 0.02px;\n}\n.ant-menu-vertical .ant-menu-item:not(:last-child),\n.ant-menu-vertical-left .ant-menu-item:not(:last-child),\n.ant-menu-vertical-right .ant-menu-item:not(:last-child),\n.ant-menu-inline .ant-menu-item:not(:last-child) {\n margin-bottom: 8px;\n}\n.ant-menu-vertical > .ant-menu-item,\n.ant-menu-vertical-left > .ant-menu-item,\n.ant-menu-vertical-right > .ant-menu-item,\n.ant-menu-inline > .ant-menu-item,\n.ant-menu-vertical > .ant-menu-submenu > .ant-menu-submenu-title,\n.ant-menu-vertical-left > .ant-menu-submenu > .ant-menu-submenu-title,\n.ant-menu-vertical-right > .ant-menu-submenu > .ant-menu-submenu-title,\n.ant-menu-inline > .ant-menu-submenu > .ant-menu-submenu-title {\n height: 40px;\n line-height: 40px;\n}\n.ant-menu-vertical .ant-menu-item-group-list .ant-menu-submenu-title,\n.ant-menu-vertical .ant-menu-submenu-title {\n padding-right: 34px;\n}\n.ant-menu-inline {\n width: 100%;\n}\n.ant-menu-inline .ant-menu-selected::after,\n.ant-menu-inline .ant-menu-item-selected::after {\n transform: scaleY(1);\n opacity: 1;\n transition: transform 0.15s cubic-bezier(0.645, 0.045, 0.355, 1), opacity 0.15s cubic-bezier(0.645, 0.045, 0.355, 1);\n}\n.ant-menu-inline .ant-menu-item,\n.ant-menu-inline .ant-menu-submenu-title {\n width: calc(100% + 1px);\n}\n.ant-menu-inline .ant-menu-item-group-list .ant-menu-submenu-title,\n.ant-menu-inline .ant-menu-submenu-title {\n padding-right: 34px;\n}\n.ant-menu-inline.ant-menu-root .ant-menu-item,\n.ant-menu-inline.ant-menu-root .ant-menu-submenu-title {\n display: flex;\n align-items: center;\n transition: border-color 0.3s, background 0.3s, padding 0.1s cubic-bezier(0.215, 0.61, 0.355, 1);\n}\n.ant-menu-inline.ant-menu-root .ant-menu-item > .ant-menu-title-content,\n.ant-menu-inline.ant-menu-root .ant-menu-submenu-title > .ant-menu-title-content {\n flex: auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.ant-menu-inline.ant-menu-root .ant-menu-item > *,\n.ant-menu-inline.ant-menu-root .ant-menu-submenu-title > * {\n flex: none;\n}\n.ant-menu.ant-menu-inline-collapsed {\n width: 80px;\n}\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-item,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-item-group > .ant-menu-item-group-list > .ant-menu-item,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-item-group > .ant-menu-item-group-list > .ant-menu-submenu > .ant-menu-submenu-title,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-submenu > .ant-menu-submenu-title {\n left: 0;\n padding: 0 calc(50% - 16px / 2);\n text-overflow: clip;\n}\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-item .ant-menu-submenu-arrow,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-item-group > .ant-menu-item-group-list > .ant-menu-item .ant-menu-submenu-arrow,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-item-group > .ant-menu-item-group-list > .ant-menu-submenu > .ant-menu-submenu-title .ant-menu-submenu-arrow,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-submenu > .ant-menu-submenu-title .ant-menu-submenu-arrow {\n opacity: 0;\n}\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-item .ant-menu-item-icon,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-item-group > .ant-menu-item-group-list > .ant-menu-item .ant-menu-item-icon,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-item-group > .ant-menu-item-group-list > .ant-menu-submenu > .ant-menu-submenu-title .ant-menu-item-icon,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-submenu > .ant-menu-submenu-title .ant-menu-item-icon,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-item .anticon,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-item-group > .ant-menu-item-group-list > .ant-menu-item .anticon,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-item-group > .ant-menu-item-group-list > .ant-menu-submenu > .ant-menu-submenu-title .anticon,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-submenu > .ant-menu-submenu-title .anticon {\n margin: 0;\n font-size: 16px;\n line-height: 40px;\n}\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-item .ant-menu-item-icon + span,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-item-group > .ant-menu-item-group-list > .ant-menu-item .ant-menu-item-icon + span,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-item-group > .ant-menu-item-group-list > .ant-menu-submenu > .ant-menu-submenu-title .ant-menu-item-icon + span,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-submenu > .ant-menu-submenu-title .ant-menu-item-icon + span,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-item .anticon + span,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-item-group > .ant-menu-item-group-list > .ant-menu-item .anticon + span,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-item-group > .ant-menu-item-group-list > .ant-menu-submenu > .ant-menu-submenu-title .anticon + span,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-submenu > .ant-menu-submenu-title .anticon + span {\n display: inline-block;\n opacity: 0;\n}\n.ant-menu.ant-menu-inline-collapsed .ant-menu-item-icon,\n.ant-menu.ant-menu-inline-collapsed .anticon {\n display: inline-block;\n}\n.ant-menu.ant-menu-inline-collapsed-tooltip {\n pointer-events: none;\n}\n.ant-menu.ant-menu-inline-collapsed-tooltip .ant-menu-item-icon,\n.ant-menu.ant-menu-inline-collapsed-tooltip .anticon {\n display: none;\n}\n.ant-menu.ant-menu-inline-collapsed-tooltip a {\n color: rgba(255, 255, 255, 0.85);\n}\n.ant-menu.ant-menu-inline-collapsed .ant-menu-item-group-title {\n padding-right: 4px;\n padding-left: 4px;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.ant-menu-item-group-list {\n margin: 0;\n padding: 0;\n}\n.ant-menu-item-group-list .ant-menu-item,\n.ant-menu-item-group-list .ant-menu-submenu-title {\n padding: 0 16px 0 28px;\n}\n.ant-menu-root.ant-menu-vertical,\n.ant-menu-root.ant-menu-vertical-left,\n.ant-menu-root.ant-menu-vertical-right,\n.ant-menu-root.ant-menu-inline {\n box-shadow: none;\n}\n.ant-menu-root.ant-menu-inline-collapsed .ant-menu-item > .ant-menu-inline-collapsed-noicon,\n.ant-menu-root.ant-menu-inline-collapsed .ant-menu-submenu .ant-menu-submenu-title > .ant-menu-inline-collapsed-noicon {\n font-size: 16px;\n text-align: center;\n}\n.ant-menu-sub.ant-menu-inline {\n padding: 0;\n background: #fafafa;\n border: 0;\n border-radius: 0;\n box-shadow: none;\n}\n.ant-menu-sub.ant-menu-inline > .ant-menu-item,\n.ant-menu-sub.ant-menu-inline > .ant-menu-submenu > .ant-menu-submenu-title {\n height: 40px;\n line-height: 40px;\n list-style-position: inside;\n list-style-type: disc;\n}\n.ant-menu-sub.ant-menu-inline .ant-menu-item-group-title {\n padding-left: 32px;\n}\n.ant-menu-item-disabled,\n.ant-menu-submenu-disabled {\n color: rgba(0, 0, 0, 0.25) !important;\n background: none;\n cursor: not-allowed;\n}\n.ant-menu-item-disabled::after,\n.ant-menu-submenu-disabled::after {\n border-color: transparent !important;\n}\n.ant-menu-item-disabled a,\n.ant-menu-submenu-disabled a {\n color: rgba(0, 0, 0, 0.25) !important;\n}\n.ant-menu-item-disabled > .ant-menu-submenu-title,\n.ant-menu-submenu-disabled > .ant-menu-submenu-title {\n color: rgba(0, 0, 0, 0.25) !important;\n cursor: not-allowed;\n}\n.ant-menu-item-disabled > .ant-menu-submenu-title > .ant-menu-submenu-arrow::before,\n.ant-menu-submenu-disabled > .ant-menu-submenu-title > .ant-menu-submenu-arrow::before,\n.ant-menu-item-disabled > .ant-menu-submenu-title > .ant-menu-submenu-arrow::after,\n.ant-menu-submenu-disabled > .ant-menu-submenu-title > .ant-menu-submenu-arrow::after {\n background: rgba(0, 0, 0, 0.25) !important;\n}\n.ant-layout-header .ant-menu {\n line-height: inherit;\n}\n.ant-menu-inline-collapsed-tooltip a,\n.ant-menu-inline-collapsed-tooltip a:hover {\n color: #fff;\n}\n.ant-menu-light .ant-menu-item:hover,\n.ant-menu-light .ant-menu-item-active,\n.ant-menu-light .ant-menu:not(.ant-menu-inline) .ant-menu-submenu-open,\n.ant-menu-light .ant-menu-submenu-active,\n.ant-menu-light .ant-menu-submenu-title:hover {\n color: #5b5ce1;\n}\n.ant-menu.ant-menu-root:focus-visible {\n box-shadow: 0 0 0 2px #4541ba;\n}\n.ant-menu-dark .ant-menu-item:focus-visible,\n.ant-menu-dark .ant-menu-submenu-title:focus-visible {\n box-shadow: 0 0 0 2px #4541ba;\n}\n.ant-menu.ant-menu-dark,\n.ant-menu-dark .ant-menu-sub,\n.ant-menu.ant-menu-dark .ant-menu-sub {\n color: rgba(255, 255, 255, 0.65);\n background: #001529;\n}\n.ant-menu.ant-menu-dark .ant-menu-submenu-title .ant-menu-submenu-arrow,\n.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow,\n.ant-menu.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow {\n opacity: 0.45;\n transition: all 0.3s;\n}\n.ant-menu.ant-menu-dark .ant-menu-submenu-title .ant-menu-submenu-arrow::after,\n.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow::after,\n.ant-menu.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow::after,\n.ant-menu.ant-menu-dark .ant-menu-submenu-title .ant-menu-submenu-arrow::before,\n.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow::before,\n.ant-menu.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow::before {\n background: #fff;\n}\n.ant-menu-dark.ant-menu-submenu-popup {\n background: transparent;\n}\n.ant-menu-dark .ant-menu-inline.ant-menu-sub {\n background: #000c17;\n}\n.ant-menu-dark.ant-menu-horizontal {\n border-bottom: 0;\n}\n.ant-menu-dark.ant-menu-horizontal > .ant-menu-item,\n.ant-menu-dark.ant-menu-horizontal > .ant-menu-submenu {\n top: 0;\n margin-top: 0;\n padding: 0 20px;\n border-color: #001529;\n border-bottom: 0;\n}\n.ant-menu-dark.ant-menu-horizontal > .ant-menu-item:hover {\n background-color: #5b5ce1;\n}\n.ant-menu-dark.ant-menu-horizontal > .ant-menu-item > a::before {\n bottom: 0;\n}\n.ant-menu-dark .ant-menu-item,\n.ant-menu-dark .ant-menu-item-group-title,\n.ant-menu-dark .ant-menu-item > a,\n.ant-menu-dark .ant-menu-item > span > a {\n color: rgba(255, 255, 255, 0.65);\n}\n.ant-menu-dark.ant-menu-inline,\n.ant-menu-dark.ant-menu-vertical,\n.ant-menu-dark.ant-menu-vertical-left,\n.ant-menu-dark.ant-menu-vertical-right {\n border-right: 0;\n}\n.ant-menu-dark.ant-menu-inline .ant-menu-item,\n.ant-menu-dark.ant-menu-vertical .ant-menu-item,\n.ant-menu-dark.ant-menu-vertical-left .ant-menu-item,\n.ant-menu-dark.ant-menu-vertical-right .ant-menu-item {\n left: 0;\n margin-left: 0;\n border-right: 0;\n}\n.ant-menu-dark.ant-menu-inline .ant-menu-item::after,\n.ant-menu-dark.ant-menu-vertical .ant-menu-item::after,\n.ant-menu-dark.ant-menu-vertical-left .ant-menu-item::after,\n.ant-menu-dark.ant-menu-vertical-right .ant-menu-item::after {\n border-right: 0;\n}\n.ant-menu-dark.ant-menu-inline .ant-menu-item,\n.ant-menu-dark.ant-menu-inline .ant-menu-submenu-title {\n width: 100%;\n}\n.ant-menu-dark .ant-menu-item:hover,\n.ant-menu-dark .ant-menu-item-active,\n.ant-menu-dark .ant-menu-submenu-active,\n.ant-menu-dark .ant-menu-submenu-open,\n.ant-menu-dark .ant-menu-submenu-selected,\n.ant-menu-dark .ant-menu-submenu-title:hover {\n color: #fff;\n background-color: transparent;\n}\n.ant-menu-dark .ant-menu-item:hover > a,\n.ant-menu-dark .ant-menu-item-active > a,\n.ant-menu-dark .ant-menu-submenu-active > a,\n.ant-menu-dark .ant-menu-submenu-open > a,\n.ant-menu-dark .ant-menu-submenu-selected > a,\n.ant-menu-dark .ant-menu-submenu-title:hover > a,\n.ant-menu-dark .ant-menu-item:hover > span > a,\n.ant-menu-dark .ant-menu-item-active > span > a,\n.ant-menu-dark .ant-menu-submenu-active > span > a,\n.ant-menu-dark .ant-menu-submenu-open > span > a,\n.ant-menu-dark .ant-menu-submenu-selected > span > a,\n.ant-menu-dark .ant-menu-submenu-title:hover > span > a {\n color: #fff;\n}\n.ant-menu-dark .ant-menu-item:hover > .ant-menu-submenu-title > .ant-menu-submenu-arrow,\n.ant-menu-dark .ant-menu-item-active > .ant-menu-submenu-title > .ant-menu-submenu-arrow,\n.ant-menu-dark .ant-menu-submenu-active > .ant-menu-submenu-title > .ant-menu-submenu-arrow,\n.ant-menu-dark .ant-menu-submenu-open > .ant-menu-submenu-title > .ant-menu-submenu-arrow,\n.ant-menu-dark .ant-menu-submenu-selected > .ant-menu-submenu-title > .ant-menu-submenu-arrow,\n.ant-menu-dark .ant-menu-submenu-title:hover > .ant-menu-submenu-title > .ant-menu-submenu-arrow {\n opacity: 1;\n}\n.ant-menu-dark .ant-menu-item:hover > .ant-menu-submenu-title > .ant-menu-submenu-arrow::after,\n.ant-menu-dark .ant-menu-item-active > .ant-menu-submenu-title > .ant-menu-submenu-arrow::after,\n.ant-menu-dark .ant-menu-submenu-active > .ant-menu-submenu-title > .ant-menu-submenu-arrow::after,\n.ant-menu-dark .ant-menu-submenu-open > .ant-menu-submenu-title > .ant-menu-submenu-arrow::after,\n.ant-menu-dark .ant-menu-submenu-selected > .ant-menu-submenu-title > .ant-menu-submenu-arrow::after,\n.ant-menu-dark .ant-menu-submenu-title:hover > .ant-menu-submenu-title > .ant-menu-submenu-arrow::after,\n.ant-menu-dark .ant-menu-item:hover > .ant-menu-submenu-title > .ant-menu-submenu-arrow::before,\n.ant-menu-dark .ant-menu-item-active > .ant-menu-submenu-title > .ant-menu-submenu-arrow::before,\n.ant-menu-dark .ant-menu-submenu-active > .ant-menu-submenu-title > .ant-menu-submenu-arrow::before,\n.ant-menu-dark .ant-menu-submenu-open > .ant-menu-submenu-title > .ant-menu-submenu-arrow::before,\n.ant-menu-dark .ant-menu-submenu-selected > .ant-menu-submenu-title > .ant-menu-submenu-arrow::before,\n.ant-menu-dark .ant-menu-submenu-title:hover > .ant-menu-submenu-title > .ant-menu-submenu-arrow::before {\n background: #fff;\n}\n.ant-menu-dark .ant-menu-item:hover {\n background-color: transparent;\n}\n.ant-menu-dark.ant-menu-dark:not(.ant-menu-horizontal) .ant-menu-item-selected {\n background-color: #5b5ce1;\n}\n.ant-menu-dark .ant-menu-item-selected {\n color: #fff;\n border-right: 0;\n}\n.ant-menu-dark .ant-menu-item-selected::after {\n border-right: 0;\n}\n.ant-menu-dark .ant-menu-item-selected > a,\n.ant-menu-dark .ant-menu-item-selected > span > a,\n.ant-menu-dark .ant-menu-item-selected > a:hover,\n.ant-menu-dark .ant-menu-item-selected > span > a:hover {\n color: #fff;\n}\n.ant-menu-dark .ant-menu-item-selected .ant-menu-item-icon,\n.ant-menu-dark .ant-menu-item-selected .anticon {\n color: #fff;\n}\n.ant-menu-dark .ant-menu-item-selected .ant-menu-item-icon + span,\n.ant-menu-dark .ant-menu-item-selected .anticon + span {\n color: #fff;\n}\n.ant-menu.ant-menu-dark .ant-menu-item-selected,\n.ant-menu-submenu-popup.ant-menu-dark .ant-menu-item-selected {\n background-color: #5b5ce1;\n}\n.ant-menu-dark .ant-menu-item-disabled,\n.ant-menu-dark .ant-menu-submenu-disabled,\n.ant-menu-dark .ant-menu-item-disabled > a,\n.ant-menu-dark .ant-menu-submenu-disabled > a,\n.ant-menu-dark .ant-menu-item-disabled > span > a,\n.ant-menu-dark .ant-menu-submenu-disabled > span > a {\n color: rgba(255, 255, 255, 0.35) !important;\n opacity: 0.8;\n}\n.ant-menu-dark .ant-menu-item-disabled > .ant-menu-submenu-title,\n.ant-menu-dark .ant-menu-submenu-disabled > .ant-menu-submenu-title {\n color: rgba(255, 255, 255, 0.35) !important;\n}\n.ant-menu-dark .ant-menu-item-disabled > .ant-menu-submenu-title > .ant-menu-submenu-arrow::before,\n.ant-menu-dark .ant-menu-submenu-disabled > .ant-menu-submenu-title > .ant-menu-submenu-arrow::before,\n.ant-menu-dark .ant-menu-item-disabled > .ant-menu-submenu-title > .ant-menu-submenu-arrow::after,\n.ant-menu-dark .ant-menu-submenu-disabled > .ant-menu-submenu-title > .ant-menu-submenu-arrow::after {\n background: rgba(255, 255, 255, 0.35) !important;\n}\n.ant-menu.ant-menu-rtl {\n direction: rtl;\n text-align: right;\n}\n.ant-menu-rtl .ant-menu-item-group-title {\n text-align: right;\n}\n.ant-menu-rtl.ant-menu-inline,\n.ant-menu-rtl.ant-menu-vertical {\n border-right: none;\n border-left: 1px solid #f0f0f0;\n}\n.ant-menu-rtl.ant-menu-dark.ant-menu-inline,\n.ant-menu-rtl.ant-menu-dark.ant-menu-vertical {\n border-left: none;\n}\n.ant-menu-rtl.ant-menu-vertical.ant-menu-sub > .ant-menu-item,\n.ant-menu-rtl.ant-menu-vertical-left.ant-menu-sub > .ant-menu-item,\n.ant-menu-rtl.ant-menu-vertical-right.ant-menu-sub > .ant-menu-item,\n.ant-menu-rtl.ant-menu-vertical.ant-menu-sub > .ant-menu-submenu,\n.ant-menu-rtl.ant-menu-vertical-left.ant-menu-sub > .ant-menu-submenu,\n.ant-menu-rtl.ant-menu-vertical-right.ant-menu-sub > .ant-menu-submenu {\n transform-origin: top right;\n}\n.ant-menu-rtl .ant-menu-item .ant-menu-item-icon,\n.ant-menu-rtl .ant-menu-submenu-title .ant-menu-item-icon,\n.ant-menu-rtl .ant-menu-item .anticon,\n.ant-menu-rtl .ant-menu-submenu-title .anticon {\n margin-right: auto;\n margin-left: 10px;\n}\n.ant-menu-rtl .ant-menu-item.ant-menu-item-only-child > .ant-menu-item-icon,\n.ant-menu-rtl .ant-menu-submenu-title.ant-menu-item-only-child > .ant-menu-item-icon,\n.ant-menu-rtl .ant-menu-item.ant-menu-item-only-child > .anticon,\n.ant-menu-rtl .ant-menu-submenu-title.ant-menu-item-only-child > .anticon {\n margin-left: 0;\n}\n.ant-menu-submenu-rtl.ant-menu-submenu-popup {\n transform-origin: 100% 0;\n}\n.ant-menu-rtl .ant-menu-submenu-vertical > .ant-menu-submenu-title .ant-menu-submenu-arrow,\n.ant-menu-rtl .ant-menu-submenu-vertical-left > .ant-menu-submenu-title .ant-menu-submenu-arrow,\n.ant-menu-rtl .ant-menu-submenu-vertical-right > .ant-menu-submenu-title .ant-menu-submenu-arrow,\n.ant-menu-rtl .ant-menu-submenu-inline > .ant-menu-submenu-title .ant-menu-submenu-arrow {\n right: auto;\n left: 16px;\n}\n.ant-menu-rtl .ant-menu-submenu-vertical > .ant-menu-submenu-title .ant-menu-submenu-arrow::before,\n.ant-menu-rtl .ant-menu-submenu-vertical-left > .ant-menu-submenu-title .ant-menu-submenu-arrow::before,\n.ant-menu-rtl .ant-menu-submenu-vertical-right > .ant-menu-submenu-title .ant-menu-submenu-arrow::before {\n transform: rotate(-45deg) translateY(-2px);\n}\n.ant-menu-rtl .ant-menu-submenu-vertical > .ant-menu-submenu-title .ant-menu-submenu-arrow::after,\n.ant-menu-rtl .ant-menu-submenu-vertical-left > .ant-menu-submenu-title .ant-menu-submenu-arrow::after,\n.ant-menu-rtl .ant-menu-submenu-vertical-right > .ant-menu-submenu-title .ant-menu-submenu-arrow::after {\n transform: rotate(45deg) translateY(2px);\n}\n.ant-menu-rtl.ant-menu-vertical .ant-menu-item::after,\n.ant-menu-rtl.ant-menu-vertical-left .ant-menu-item::after,\n.ant-menu-rtl.ant-menu-vertical-right .ant-menu-item::after,\n.ant-menu-rtl.ant-menu-inline .ant-menu-item::after {\n right: auto;\n left: 0;\n}\n.ant-menu-rtl.ant-menu-vertical .ant-menu-item,\n.ant-menu-rtl.ant-menu-vertical-left .ant-menu-item,\n.ant-menu-rtl.ant-menu-vertical-right .ant-menu-item,\n.ant-menu-rtl.ant-menu-inline .ant-menu-item,\n.ant-menu-rtl.ant-menu-vertical .ant-menu-submenu-title,\n.ant-menu-rtl.ant-menu-vertical-left .ant-menu-submenu-title,\n.ant-menu-rtl.ant-menu-vertical-right .ant-menu-submenu-title,\n.ant-menu-rtl.ant-menu-inline .ant-menu-submenu-title {\n text-align: right;\n}\n.ant-menu-rtl.ant-menu-inline .ant-menu-submenu-title {\n padding-right: 0;\n padding-left: 34px;\n}\n.ant-menu-rtl.ant-menu-vertical .ant-menu-submenu-title {\n padding-right: 16px;\n padding-left: 34px;\n}\n.ant-menu-rtl.ant-menu-inline-collapsed.ant-menu-vertical .ant-menu-submenu-title {\n padding: 0 calc(50% - 16px / 2);\n}\n.ant-menu-rtl .ant-menu-item-group-list .ant-menu-item,\n.ant-menu-rtl .ant-menu-item-group-list .ant-menu-submenu-title {\n padding: 0 28px 0 16px;\n}\n.ant-menu-sub.ant-menu-inline {\n border: 0;\n}\n.ant-menu-rtl.ant-menu-sub.ant-menu-inline .ant-menu-item-group-title {\n padding-right: 32px;\n padding-left: 0;\n}\n.ant-message {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: fixed;\n top: 8px;\n left: 0;\n z-index: 1010;\n width: 100%;\n pointer-events: none;\n}\n.ant-message-notice {\n padding: 8px;\n text-align: center;\n}\n.ant-message-notice-content {\n display: inline-block;\n padding: 10px 16px;\n background: #fff;\n border-radius: 5px;\n box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05);\n pointer-events: all;\n}\n.ant-message-success .anticon {\n color: #52c41a;\n}\n.ant-message-error .anticon {\n color: #ff4d4f;\n}\n.ant-message-warning .anticon {\n color: #faad14;\n}\n.ant-message-info .anticon,\n.ant-message-loading .anticon {\n color: #5b5ce1;\n}\n.ant-message .anticon {\n position: relative;\n top: 1px;\n margin-right: 8px;\n font-size: 16px;\n}\n.ant-message-notice.ant-move-up-leave.ant-move-up-leave-active {\n animation-name: MessageMoveOut;\n animation-duration: 0.3s;\n}\n@keyframes MessageMoveOut {\n 0% {\n max-height: 150px;\n padding: 8px;\n opacity: 1;\n }\n 100% {\n max-height: 0;\n padding: 0;\n opacity: 0;\n }\n}\n.ant-message-rtl {\n direction: rtl;\n}\n.ant-message-rtl span {\n direction: rtl;\n}\n.ant-message-rtl .anticon {\n margin-right: 0;\n margin-left: 8px;\n}\n.ant-modal {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n pointer-events: none;\n position: relative;\n top: 100px;\n width: auto;\n max-width: calc(100vw - 32px);\n margin: 0 auto;\n padding-bottom: 24px;\n}\n.ant-modal.ant-zoom-enter,\n.ant-modal.ant-zoom-appear {\n transform: none;\n opacity: 0;\n animation-duration: 0.3s;\n user-select: none;\n}\n.ant-modal-mask {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1000;\n height: 100%;\n background-color: rgba(0, 0, 0, 0.45);\n}\n.ant-modal-mask-hidden {\n display: none;\n}\n.ant-modal-wrap {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n overflow: auto;\n outline: 0;\n}\n.ant-modal-wrap {\n z-index: 1000;\n}\n.ant-modal-title {\n margin: 0;\n color: rgba(0, 0, 0, 0.85);\n font-weight: 500;\n font-size: 16px;\n line-height: 22px;\n word-wrap: break-word;\n}\n.ant-modal-content {\n position: relative;\n background-color: #fff;\n background-clip: padding-box;\n border: 0;\n border-radius: 5px;\n box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05);\n pointer-events: auto;\n}\n.ant-modal-close {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 10;\n padding: 0;\n color: rgba(0, 0, 0, 0.45);\n font-weight: 700;\n line-height: 1;\n text-decoration: none;\n background: transparent;\n border: 0;\n outline: 0;\n cursor: pointer;\n transition: color 0.3s;\n}\n.ant-modal-close-x {\n display: block;\n width: 54px;\n height: 54px;\n font-size: 16px;\n font-style: normal;\n line-height: 54px;\n text-align: center;\n text-transform: none;\n text-rendering: auto;\n}\n.ant-modal-close:focus,\n.ant-modal-close:hover {\n color: rgba(0, 0, 0, 0.75);\n text-decoration: none;\n}\n.ant-modal-header {\n padding: 16px 24px;\n color: rgba(0, 0, 0, 0.85);\n background: #fff;\n border-bottom: 1px solid #f0f0f0;\n border-radius: 5px 5px 0 0;\n}\n.ant-modal-body {\n padding: 24px;\n font-size: 14px;\n line-height: 1.5715;\n word-wrap: break-word;\n}\n.ant-modal-footer {\n padding: 10px 16px;\n text-align: right;\n background: transparent;\n border-top: 1px solid #f0f0f0;\n border-radius: 0 0 5px 5px;\n}\n.ant-modal-footer .ant-btn + .ant-btn:not(.ant-dropdown-trigger) {\n margin-bottom: 0;\n margin-left: 8px;\n}\n.ant-modal-open {\n overflow: hidden;\n}\n.ant-modal-centered {\n text-align: center;\n}\n.ant-modal-centered::before {\n display: inline-block;\n width: 0;\n height: 100%;\n vertical-align: middle;\n content: '';\n}\n.ant-modal-centered .ant-modal {\n top: 0;\n display: inline-block;\n padding-bottom: 0;\n text-align: left;\n vertical-align: middle;\n}\n@media (max-width: 767px) {\n .ant-modal {\n max-width: calc(100vw - 16px);\n margin: 8px auto;\n }\n .ant-modal-centered .ant-modal {\n flex: 1;\n }\n}\n.ant-modal-confirm .ant-modal-header {\n display: none;\n}\n.ant-modal-confirm .ant-modal-body {\n padding: 32px 32px 24px;\n}\n.ant-modal-confirm-body-wrapper::before {\n display: table;\n content: '';\n}\n.ant-modal-confirm-body-wrapper::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-modal-confirm-body-wrapper::before {\n display: table;\n content: '';\n}\n.ant-modal-confirm-body-wrapper::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-modal-confirm-body .ant-modal-confirm-title {\n display: block;\n overflow: hidden;\n color: rgba(0, 0, 0, 0.85);\n font-weight: 500;\n font-size: 16px;\n line-height: 1.4;\n}\n.ant-modal-confirm-body .ant-modal-confirm-content {\n margin-top: 8px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n}\n.ant-modal-confirm-body > .anticon {\n float: left;\n margin-right: 16px;\n font-size: 22px;\n}\n.ant-modal-confirm-body > .anticon + .ant-modal-confirm-title + .ant-modal-confirm-content {\n margin-left: 38px;\n}\n.ant-modal-confirm .ant-modal-confirm-btns {\n margin-top: 24px;\n text-align: right;\n}\n.ant-modal-confirm .ant-modal-confirm-btns .ant-btn + .ant-btn {\n margin-bottom: 0;\n margin-left: 8px;\n}\n.ant-modal-confirm-error .ant-modal-confirm-body > .anticon {\n color: #ff4d4f;\n}\n.ant-modal-confirm-warning .ant-modal-confirm-body > .anticon,\n.ant-modal-confirm-confirm .ant-modal-confirm-body > .anticon {\n color: #faad14;\n}\n.ant-modal-confirm-info .ant-modal-confirm-body > .anticon {\n color: #5b5ce1;\n}\n.ant-modal-confirm-success .ant-modal-confirm-body > .anticon {\n color: #52c41a;\n}\n.ant-modal-wrap-rtl {\n direction: rtl;\n}\n.ant-modal-wrap-rtl .ant-modal-close {\n right: initial;\n left: 0;\n}\n.ant-modal-wrap-rtl .ant-modal-footer {\n text-align: left;\n}\n.ant-modal-wrap-rtl .ant-modal-footer .ant-btn + .ant-btn {\n margin-right: 8px;\n margin-left: 0;\n}\n.ant-modal-wrap-rtl .ant-modal-confirm-body {\n direction: rtl;\n}\n.ant-modal-wrap-rtl .ant-modal-confirm-body > .anticon {\n float: right;\n margin-right: 0;\n margin-left: 16px;\n}\n.ant-modal-wrap-rtl .ant-modal-confirm-body > .anticon + .ant-modal-confirm-title + .ant-modal-confirm-content {\n margin-right: 38px;\n margin-left: 0;\n}\n.ant-modal-wrap-rtl .ant-modal-confirm-btns {\n text-align: left;\n}\n.ant-modal-wrap-rtl .ant-modal-confirm-btns .ant-btn + .ant-btn {\n margin-right: 8px;\n margin-left: 0;\n}\n.ant-modal-wrap-rtl.ant-modal-centered .ant-modal {\n text-align: right;\n}\n.ant-notification {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: fixed;\n z-index: 1010;\n margin-right: 24px;\n}\n.ant-notification-close-icon {\n font-size: 14px;\n cursor: pointer;\n}\n.ant-notification-hook-holder {\n position: relative;\n}\n.ant-notification-notice {\n position: relative;\n width: 384px;\n max-width: calc(100vw - 24px * 2);\n margin-bottom: 16px;\n margin-left: auto;\n padding: 16px 24px;\n overflow: hidden;\n line-height: 1.5715;\n word-wrap: break-word;\n background: #fff;\n border-radius: 5px;\n box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05);\n}\n.ant-notification-top .ant-notification-notice,\n.ant-notification-bottom .ant-notification-notice {\n margin-right: auto;\n margin-left: auto;\n}\n.ant-notification-topLeft .ant-notification-notice,\n.ant-notification-bottomLeft .ant-notification-notice {\n margin-right: auto;\n margin-left: 0;\n}\n.ant-notification-notice-message {\n margin-bottom: 8px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 16px;\n line-height: 24px;\n}\n.ant-notification-notice-message-single-line-auto-margin {\n display: block;\n width: calc(384px - 24px * 2 - 24px - 48px - 100%);\n max-width: 4px;\n background-color: transparent;\n pointer-events: none;\n}\n.ant-notification-notice-message-single-line-auto-margin::before {\n display: block;\n content: '';\n}\n.ant-notification-notice-description {\n font-size: 14px;\n}\n.ant-notification-notice-closable .ant-notification-notice-message {\n padding-right: 24px;\n}\n.ant-notification-notice-with-icon .ant-notification-notice-message {\n margin-bottom: 4px;\n margin-left: 48px;\n font-size: 16px;\n}\n.ant-notification-notice-with-icon .ant-notification-notice-description {\n margin-left: 48px;\n font-size: 14px;\n}\n.ant-notification-notice-icon {\n position: absolute;\n margin-left: 4px;\n font-size: 24px;\n line-height: 24px;\n}\n.anticon.ant-notification-notice-icon-success {\n color: #52c41a;\n}\n.anticon.ant-notification-notice-icon-info {\n color: #5b5ce1;\n}\n.anticon.ant-notification-notice-icon-warning {\n color: #faad14;\n}\n.anticon.ant-notification-notice-icon-error {\n color: #ff4d4f;\n}\n.ant-notification-notice-close {\n position: absolute;\n top: 16px;\n right: 22px;\n color: rgba(0, 0, 0, 0.45);\n outline: none;\n}\n.ant-notification-notice-close:hover {\n color: rgba(0, 0, 0, 0.67);\n}\n.ant-notification-notice-btn {\n float: right;\n margin-top: 16px;\n}\n.ant-notification .notification-fade-effect {\n animation-duration: 0.24s;\n animation-timing-function: cubic-bezier(0.645, 0.045, 0.355, 1);\n animation-fill-mode: both;\n}\n.ant-notification-fade-enter,\n.ant-notification-fade-appear {\n animation-duration: 0.24s;\n animation-timing-function: cubic-bezier(0.645, 0.045, 0.355, 1);\n animation-fill-mode: both;\n opacity: 0;\n animation-play-state: paused;\n}\n.ant-notification-fade-leave {\n animation-duration: 0.24s;\n animation-timing-function: cubic-bezier(0.645, 0.045, 0.355, 1);\n animation-fill-mode: both;\n animation-duration: 0.2s;\n animation-play-state: paused;\n}\n.ant-notification-fade-enter.ant-notification-fade-enter-active,\n.ant-notification-fade-appear.ant-notification-fade-appear-active {\n animation-name: NotificationFadeIn;\n animation-play-state: running;\n}\n.ant-notification-fade-leave.ant-notification-fade-leave-active {\n animation-name: NotificationFadeOut;\n animation-play-state: running;\n}\n@keyframes NotificationFadeIn {\n 0% {\n left: 384px;\n opacity: 0;\n }\n 100% {\n left: 0;\n opacity: 1;\n }\n}\n@keyframes NotificationFadeOut {\n 0% {\n max-height: 150px;\n margin-bottom: 16px;\n opacity: 1;\n }\n 100% {\n max-height: 0;\n margin-bottom: 0;\n padding-top: 0;\n padding-bottom: 0;\n opacity: 0;\n }\n}\n.ant-notification-rtl {\n direction: rtl;\n}\n.ant-notification-rtl .ant-notification-notice-closable .ant-notification-notice-message {\n padding-right: 0;\n padding-left: 24px;\n}\n.ant-notification-rtl .ant-notification-notice-with-icon .ant-notification-notice-message {\n margin-right: 48px;\n margin-left: 0;\n}\n.ant-notification-rtl .ant-notification-notice-with-icon .ant-notification-notice-description {\n margin-right: 48px;\n margin-left: 0;\n}\n.ant-notification-rtl .ant-notification-notice-icon {\n margin-right: 4px;\n margin-left: 0;\n}\n.ant-notification-rtl .ant-notification-notice-close {\n right: auto;\n left: 22px;\n}\n.ant-notification-rtl .ant-notification-notice-btn {\n float: left;\n}\n.ant-notification-top,\n.ant-notification-bottom {\n margin-right: 0;\n margin-left: 0;\n}\n.ant-notification-top .ant-notification-fade-enter.ant-notification-fade-enter-active,\n.ant-notification-top .ant-notification-fade-appear.ant-notification-fade-appear-active {\n animation-name: NotificationTopFadeIn;\n}\n.ant-notification-bottom .ant-notification-fade-enter.ant-notification-fade-enter-active,\n.ant-notification-bottom .ant-notification-fade-appear.ant-notification-fade-appear-active {\n animation-name: NotificationBottomFadeIn;\n}\n.ant-notification-topLeft,\n.ant-notification-bottomLeft {\n margin-right: 0;\n margin-left: 24px;\n}\n.ant-notification-topLeft .ant-notification-fade-enter.ant-notification-fade-enter-active,\n.ant-notification-bottomLeft .ant-notification-fade-enter.ant-notification-fade-enter-active,\n.ant-notification-topLeft .ant-notification-fade-appear.ant-notification-fade-appear-active,\n.ant-notification-bottomLeft .ant-notification-fade-appear.ant-notification-fade-appear-active {\n animation-name: NotificationLeftFadeIn;\n}\n@keyframes NotificationTopFadeIn {\n 0% {\n margin-top: -100%;\n opacity: 0;\n }\n 100% {\n margin-top: 0;\n opacity: 1;\n }\n}\n@keyframes NotificationBottomFadeIn {\n 0% {\n margin-bottom: -100%;\n opacity: 0;\n }\n 100% {\n margin-bottom: 0;\n opacity: 1;\n }\n}\n@keyframes NotificationLeftFadeIn {\n 0% {\n right: 384px;\n opacity: 0;\n }\n 100% {\n right: 0;\n opacity: 1;\n }\n}\n.ant-page-header {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n padding: 16px 24px;\n background-color: #fff;\n}\n.ant-page-header-ghost {\n background-color: inherit;\n}\n.ant-page-header.has-breadcrumb {\n padding-top: 12px;\n}\n.ant-page-header.has-footer {\n padding-bottom: 0;\n}\n.ant-page-header-back {\n margin-right: 16px;\n font-size: 16px;\n line-height: 1;\n}\n.ant-page-header-back-button {\n color: #5b5ce1;\n outline: none;\n cursor: pointer;\n transition: color 0.3s;\n color: #000;\n}\n.ant-page-header-back-button:focus-visible,\n.ant-page-header-back-button:hover {\n color: #8588ed;\n}\n.ant-page-header-back-button:active {\n color: #4541ba;\n}\n.ant-page-header .ant-divider-vertical {\n height: 14px;\n margin: 0 12px;\n vertical-align: middle;\n}\n.ant-breadcrumb + .ant-page-header-heading {\n margin-top: 8px;\n}\n.ant-page-header-heading {\n display: flex;\n justify-content: space-between;\n}\n.ant-page-header-heading-left {\n display: flex;\n align-items: center;\n margin: 4px 0;\n overflow: hidden;\n}\n.ant-page-header-heading-title {\n margin-right: 12px;\n margin-bottom: 0;\n color: rgba(0, 0, 0, 0.85);\n font-weight: 600;\n font-size: 20px;\n line-height: 32px;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.ant-page-header-heading .ant-avatar {\n margin-right: 12px;\n}\n.ant-page-header-heading-sub-title {\n margin-right: 12px;\n color: rgba(0, 0, 0, 0.45);\n font-size: 14px;\n line-height: 1.5715;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.ant-page-header-heading-extra {\n margin: 4px 0;\n white-space: nowrap;\n}\n.ant-page-header-heading-extra > * {\n white-space: unset;\n}\n.ant-page-header-content {\n padding-top: 12px;\n}\n.ant-page-header-footer {\n margin-top: 16px;\n}\n.ant-page-header-footer .ant-tabs > .ant-tabs-nav {\n margin: 0;\n}\n.ant-page-header-footer .ant-tabs > .ant-tabs-nav::before {\n border: none;\n}\n.ant-page-header-footer .ant-tabs .ant-tabs-tab {\n padding-top: 8px;\n padding-bottom: 8px;\n font-size: 16px;\n}\n.ant-page-header-compact .ant-page-header-heading {\n flex-wrap: wrap;\n}\n.ant-page-header-rtl {\n direction: rtl;\n}\n.ant-page-header-rtl .ant-page-header-back {\n float: right;\n margin-right: 0;\n margin-left: 16px;\n}\n.ant-page-header-rtl .ant-page-header-heading-title {\n margin-right: 0;\n margin-left: 12px;\n}\n.ant-page-header-rtl .ant-page-header-heading .ant-avatar {\n margin-right: 0;\n margin-left: 12px;\n}\n.ant-page-header-rtl .ant-page-header-heading-sub-title {\n float: right;\n margin-right: 0;\n margin-left: 12px;\n}\n.ant-page-header-rtl .ant-page-header-heading-tags {\n float: right;\n}\n.ant-page-header-rtl .ant-page-header-heading-extra {\n float: left;\n}\n.ant-page-header-rtl .ant-page-header-heading-extra > * {\n margin-right: 12px;\n margin-left: 0;\n}\n.ant-page-header-rtl .ant-page-header-heading-extra > *:first-child {\n margin-right: 0;\n}\n.ant-page-header-rtl .ant-page-header-footer .ant-tabs-bar .ant-tabs-nav {\n float: right;\n}\n.ant-pagination {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n}\n.ant-pagination ul,\n.ant-pagination ol {\n margin: 0;\n padding: 0;\n list-style: none;\n}\n.ant-pagination::after {\n display: block;\n clear: both;\n height: 0;\n overflow: hidden;\n visibility: hidden;\n content: ' ';\n}\n.ant-pagination-total-text {\n display: inline-block;\n height: 32px;\n margin-right: 8px;\n line-height: 30px;\n vertical-align: middle;\n}\n.ant-pagination-item {\n display: inline-block;\n min-width: 32px;\n height: 32px;\n margin-right: 8px;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';\n line-height: 30px;\n text-align: center;\n vertical-align: middle;\n list-style: none;\n background-color: #fff;\n border: 1px solid #d9d9d9;\n border-radius: 5px;\n outline: 0;\n cursor: pointer;\n user-select: none;\n}\n.ant-pagination-item a {\n display: block;\n padding: 0 6px;\n color: rgba(0, 0, 0, 0.85);\n transition: none;\n}\n.ant-pagination-item a:hover {\n text-decoration: none;\n}\n.ant-pagination-item:hover {\n border-color: #5b5ce1;\n transition: all 0.3s;\n}\n.ant-pagination-item:hover a {\n color: #5b5ce1;\n}\n.ant-pagination-item:focus-visible {\n border-color: #5b5ce1;\n transition: all 0.3s;\n}\n.ant-pagination-item:focus-visible a {\n color: #5b5ce1;\n}\n.ant-pagination-item-active {\n font-weight: 500;\n background: #fff;\n border-color: #5b5ce1;\n}\n.ant-pagination-item-active a {\n color: #5b5ce1;\n}\n.ant-pagination-item-active:hover {\n border-color: #8588ed;\n}\n.ant-pagination-item-active:focus-visible {\n border-color: #8588ed;\n}\n.ant-pagination-item-active:hover a {\n color: #8588ed;\n}\n.ant-pagination-item-active:focus-visible a {\n color: #8588ed;\n}\n.ant-pagination-jump-prev,\n.ant-pagination-jump-next {\n outline: 0;\n}\n.ant-pagination-jump-prev .ant-pagination-item-container,\n.ant-pagination-jump-next .ant-pagination-item-container {\n position: relative;\n}\n.ant-pagination-jump-prev .ant-pagination-item-container .ant-pagination-item-link-icon,\n.ant-pagination-jump-next .ant-pagination-item-container .ant-pagination-item-link-icon {\n color: #5b5ce1;\n font-size: 12px;\n letter-spacing: -1px;\n opacity: 0;\n transition: all 0.2s;\n}\n.ant-pagination-jump-prev .ant-pagination-item-container .ant-pagination-item-link-icon-svg,\n.ant-pagination-jump-next .ant-pagination-item-container .ant-pagination-item-link-icon-svg {\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n margin: auto;\n}\n.ant-pagination-jump-prev .ant-pagination-item-container .ant-pagination-item-ellipsis,\n.ant-pagination-jump-next .ant-pagination-item-container .ant-pagination-item-ellipsis {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n display: block;\n margin: auto;\n color: rgba(0, 0, 0, 0.25);\n font-family: Arial, Helvetica, sans-serif;\n letter-spacing: 2px;\n text-align: center;\n text-indent: 0.13em;\n opacity: 1;\n transition: all 0.2s;\n}\n.ant-pagination-jump-prev:hover .ant-pagination-item-link-icon,\n.ant-pagination-jump-next:hover .ant-pagination-item-link-icon {\n opacity: 1;\n}\n.ant-pagination-jump-prev:hover .ant-pagination-item-ellipsis,\n.ant-pagination-jump-next:hover .ant-pagination-item-ellipsis {\n opacity: 0;\n}\n.ant-pagination-jump-prev:focus-visible .ant-pagination-item-link-icon,\n.ant-pagination-jump-next:focus-visible .ant-pagination-item-link-icon {\n opacity: 1;\n}\n.ant-pagination-jump-prev:focus-visible .ant-pagination-item-ellipsis,\n.ant-pagination-jump-next:focus-visible .ant-pagination-item-ellipsis {\n opacity: 0;\n}\n.ant-pagination-prev,\n.ant-pagination-jump-prev,\n.ant-pagination-jump-next {\n margin-right: 8px;\n}\n.ant-pagination-prev,\n.ant-pagination-next,\n.ant-pagination-jump-prev,\n.ant-pagination-jump-next {\n display: inline-block;\n min-width: 32px;\n height: 32px;\n color: rgba(0, 0, 0, 0.85);\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';\n line-height: 32px;\n text-align: center;\n vertical-align: middle;\n list-style: none;\n border-radius: 5px;\n cursor: pointer;\n transition: all 0.3s;\n}\n.ant-pagination-prev,\n.ant-pagination-next {\n font-family: Arial, Helvetica, sans-serif;\n outline: 0;\n}\n.ant-pagination-prev button,\n.ant-pagination-next button {\n color: rgba(0, 0, 0, 0.85);\n cursor: pointer;\n user-select: none;\n}\n.ant-pagination-prev:hover button,\n.ant-pagination-next:hover button {\n border-color: #8588ed;\n}\n.ant-pagination-prev .ant-pagination-item-link,\n.ant-pagination-next .ant-pagination-item-link {\n display: block;\n width: 100%;\n height: 100%;\n padding: 0;\n font-size: 12px;\n text-align: center;\n background-color: #fff;\n border: 1px solid #d9d9d9;\n border-radius: 5px;\n outline: none;\n transition: all 0.3s;\n}\n.ant-pagination-prev:focus-visible .ant-pagination-item-link,\n.ant-pagination-next:focus-visible .ant-pagination-item-link {\n color: #5b5ce1;\n border-color: #5b5ce1;\n}\n.ant-pagination-prev:hover .ant-pagination-item-link,\n.ant-pagination-next:hover .ant-pagination-item-link {\n color: #5b5ce1;\n border-color: #5b5ce1;\n}\n.ant-pagination-disabled,\n.ant-pagination-disabled:hover {\n cursor: not-allowed;\n}\n.ant-pagination-disabled .ant-pagination-item-link,\n.ant-pagination-disabled:hover .ant-pagination-item-link {\n color: rgba(0, 0, 0, 0.25);\n border-color: #d9d9d9;\n cursor: not-allowed;\n}\n.ant-pagination-disabled:focus-visible {\n cursor: not-allowed;\n}\n.ant-pagination-disabled:focus-visible .ant-pagination-item-link {\n color: rgba(0, 0, 0, 0.25);\n border-color: #d9d9d9;\n cursor: not-allowed;\n}\n.ant-pagination-slash {\n margin: 0 10px 0 5px;\n}\n.ant-pagination-options {\n display: inline-block;\n margin-left: 16px;\n vertical-align: middle;\n}\n@media all and (-ms-high-contrast: none) {\n .ant-pagination-options *::-ms-backdrop,\n .ant-pagination-options {\n vertical-align: top;\n }\n}\n.ant-pagination-options-size-changer.ant-select {\n display: inline-block;\n width: auto;\n}\n.ant-pagination-options-quick-jumper {\n display: inline-block;\n height: 32px;\n margin-left: 8px;\n line-height: 32px;\n vertical-align: top;\n}\n.ant-pagination-options-quick-jumper input {\n position: relative;\n display: inline-block;\n width: 100%;\n min-width: 0;\n padding: 4px 11px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n line-height: 1.5715;\n background-color: #fff;\n background-image: none;\n border: 1px solid #d9d9d9;\n border-radius: 5px;\n transition: all 0.3s;\n width: 50px;\n height: 32px;\n margin: 0 8px;\n}\n.ant-pagination-options-quick-jumper input::placeholder {\n color: #bfbfbf;\n user-select: none;\n}\n.ant-pagination-options-quick-jumper input:placeholder-shown {\n text-overflow: ellipsis;\n}\n.ant-pagination-options-quick-jumper input:hover {\n border-color: #8588ed;\n border-right-width: 1px;\n}\n.ant-input-rtl .ant-pagination-options-quick-jumper input:hover {\n border-right-width: 0;\n border-left-width: 1px !important;\n}\n.ant-pagination-options-quick-jumper input:focus,\n.ant-pagination-options-quick-jumper input-focused {\n border-color: #8588ed;\n box-shadow: 0 0 0 2px rgba(91, 92, 225, 0.2);\n border-right-width: 1px;\n outline: 0;\n}\n.ant-input-rtl .ant-pagination-options-quick-jumper input:focus,\n.ant-input-rtl .ant-pagination-options-quick-jumper input-focused {\n border-right-width: 0;\n border-left-width: 1px !important;\n}\n.ant-pagination-options-quick-jumper input-disabled {\n color: rgba(0, 0, 0, 0.25);\n background-color: #f5f5f5;\n border-color: #d9d9d9;\n box-shadow: none;\n cursor: not-allowed;\n opacity: 1;\n}\n.ant-pagination-options-quick-jumper input-disabled:hover {\n border-color: #d9d9d9;\n border-right-width: 1px;\n}\n.ant-pagination-options-quick-jumper input[disabled] {\n color: rgba(0, 0, 0, 0.25);\n background-color: #f5f5f5;\n border-color: #d9d9d9;\n box-shadow: none;\n cursor: not-allowed;\n opacity: 1;\n}\n.ant-pagination-options-quick-jumper input[disabled]:hover {\n border-color: #d9d9d9;\n border-right-width: 1px;\n}\n.ant-pagination-options-quick-jumper input-borderless,\n.ant-pagination-options-quick-jumper input-borderless:hover,\n.ant-pagination-options-quick-jumper input-borderless:focus,\n.ant-pagination-options-quick-jumper input-borderless-focused,\n.ant-pagination-options-quick-jumper input-borderless-disabled,\n.ant-pagination-options-quick-jumper input-borderless[disabled] {\n background-color: transparent;\n border: none;\n box-shadow: none;\n}\ntextarea.ant-pagination-options-quick-jumper input {\n max-width: 100%;\n height: auto;\n min-height: 32px;\n line-height: 1.5715;\n vertical-align: bottom;\n transition: all 0.3s, height 0s;\n}\n.ant-pagination-options-quick-jumper input-lg {\n padding: 6.5px 11px;\n font-size: 16px;\n}\n.ant-pagination-options-quick-jumper input-sm {\n padding: 0px 7px;\n}\n.ant-pagination-options-quick-jumper input-rtl {\n direction: rtl;\n}\n.ant-pagination-simple .ant-pagination-prev,\n.ant-pagination-simple .ant-pagination-next {\n height: 24px;\n line-height: 24px;\n vertical-align: top;\n}\n.ant-pagination-simple .ant-pagination-prev .ant-pagination-item-link,\n.ant-pagination-simple .ant-pagination-next .ant-pagination-item-link {\n height: 24px;\n background-color: transparent;\n border: 0;\n}\n.ant-pagination-simple .ant-pagination-prev .ant-pagination-item-link::after,\n.ant-pagination-simple .ant-pagination-next .ant-pagination-item-link::after {\n height: 24px;\n line-height: 24px;\n}\n.ant-pagination-simple .ant-pagination-simple-pager {\n display: inline-block;\n height: 24px;\n margin-right: 8px;\n}\n.ant-pagination-simple .ant-pagination-simple-pager input {\n box-sizing: border-box;\n height: 100%;\n margin-right: 8px;\n padding: 0 6px;\n text-align: center;\n background-color: #fff;\n border: 1px solid #d9d9d9;\n border-radius: 5px;\n outline: none;\n transition: border-color 0.3s;\n}\n.ant-pagination-simple .ant-pagination-simple-pager input:hover {\n border-color: #5b5ce1;\n}\n.ant-pagination-simple .ant-pagination-simple-pager input:focus {\n border-color: #8588ed;\n box-shadow: 0 0 0 2px rgba(91, 92, 225, 0.2);\n}\n.ant-pagination-simple .ant-pagination-simple-pager input[disabled] {\n color: rgba(0, 0, 0, 0.25);\n background: #f5f5f5;\n border-color: #d9d9d9;\n cursor: not-allowed;\n}\n.ant-pagination.ant-pagination-mini .ant-pagination-total-text,\n.ant-pagination.ant-pagination-mini .ant-pagination-simple-pager {\n height: 24px;\n line-height: 24px;\n}\n.ant-pagination.ant-pagination-mini .ant-pagination-item {\n min-width: 24px;\n height: 24px;\n margin: 0;\n line-height: 22px;\n}\n.ant-pagination.ant-pagination-mini .ant-pagination-item:not(.ant-pagination-item-active) {\n background: transparent;\n border-color: transparent;\n}\n.ant-pagination.ant-pagination-mini .ant-pagination-prev,\n.ant-pagination.ant-pagination-mini .ant-pagination-next {\n min-width: 24px;\n height: 24px;\n margin: 0;\n line-height: 24px;\n}\n.ant-pagination.ant-pagination-mini .ant-pagination-prev .ant-pagination-item-link,\n.ant-pagination.ant-pagination-mini .ant-pagination-next .ant-pagination-item-link {\n background: transparent;\n border-color: transparent;\n}\n.ant-pagination.ant-pagination-mini .ant-pagination-prev .ant-pagination-item-link::after,\n.ant-pagination.ant-pagination-mini .ant-pagination-next .ant-pagination-item-link::after {\n height: 24px;\n line-height: 24px;\n}\n.ant-pagination.ant-pagination-mini .ant-pagination-jump-prev,\n.ant-pagination.ant-pagination-mini .ant-pagination-jump-next {\n height: 24px;\n margin-right: 0;\n line-height: 24px;\n}\n.ant-pagination.ant-pagination-mini .ant-pagination-options {\n margin-left: 2px;\n}\n.ant-pagination.ant-pagination-mini .ant-pagination-options-size-changer {\n top: 0px;\n}\n.ant-pagination.ant-pagination-mini .ant-pagination-options-quick-jumper {\n height: 24px;\n line-height: 24px;\n}\n.ant-pagination.ant-pagination-mini .ant-pagination-options-quick-jumper input {\n padding: 0px 7px;\n width: 44px;\n height: 24px;\n}\n.ant-pagination.ant-pagination-disabled {\n cursor: not-allowed;\n}\n.ant-pagination.ant-pagination-disabled .ant-pagination-item {\n background: #f5f5f5;\n border-color: #d9d9d9;\n cursor: not-allowed;\n}\n.ant-pagination.ant-pagination-disabled .ant-pagination-item a {\n color: rgba(0, 0, 0, 0.25);\n background: transparent;\n border: none;\n cursor: not-allowed;\n}\n.ant-pagination.ant-pagination-disabled .ant-pagination-item-active {\n background: #e6e6e6;\n}\n.ant-pagination.ant-pagination-disabled .ant-pagination-item-active a {\n color: rgba(0, 0, 0, 0.25);\n}\n.ant-pagination.ant-pagination-disabled .ant-pagination-item-link {\n color: rgba(0, 0, 0, 0.25);\n background: #f5f5f5;\n border-color: #d9d9d9;\n cursor: not-allowed;\n}\n.ant-pagination-simple.ant-pagination.ant-pagination-disabled .ant-pagination-item-link {\n background: transparent;\n}\n.ant-pagination.ant-pagination-disabled .ant-pagination-item-link-icon {\n opacity: 0;\n}\n.ant-pagination.ant-pagination-disabled .ant-pagination-item-ellipsis {\n opacity: 1;\n}\n.ant-pagination.ant-pagination-disabled .ant-pagination-simple-pager {\n color: rgba(0, 0, 0, 0.25);\n}\n@media only screen and (max-width: 992px) {\n .ant-pagination-item-after-jump-prev,\n .ant-pagination-item-before-jump-next {\n display: none;\n }\n}\n@media only screen and (max-width: 576px) {\n .ant-pagination-options {\n display: none;\n }\n}\n.ant-pagination-rtl .ant-pagination-total-text {\n margin-right: 0;\n margin-left: 8px;\n}\n.ant-pagination-rtl .ant-pagination-item,\n.ant-pagination-rtl .ant-pagination-prev,\n.ant-pagination-rtl .ant-pagination-jump-prev,\n.ant-pagination-rtl .ant-pagination-jump-next {\n margin-right: 0;\n margin-left: 8px;\n}\n.ant-pagination-rtl .ant-pagination-slash {\n margin: 0 5px 0 10px;\n}\n.ant-pagination-rtl .ant-pagination-options {\n margin-right: 16px;\n margin-left: 0;\n}\n.ant-pagination-rtl .ant-pagination-options .ant-pagination-options-size-changer.ant-select {\n margin-right: 0;\n margin-left: 8px;\n}\n.ant-pagination-rtl .ant-pagination-options .ant-pagination-options-quick-jumper {\n margin-left: 0;\n}\n.ant-pagination-rtl.ant-pagination-simple .ant-pagination-simple-pager {\n margin-right: 0;\n margin-left: 8px;\n}\n.ant-pagination-rtl.ant-pagination-simple .ant-pagination-simple-pager input {\n margin-right: 0;\n margin-left: 8px;\n}\n.ant-pagination-rtl.ant-pagination.mini .ant-pagination-options {\n margin-right: 2px;\n margin-left: 0;\n}\n.ant-popconfirm {\n z-index: 1060;\n}\n.ant-popover {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1030;\n font-weight: normal;\n white-space: normal;\n text-align: left;\n cursor: auto;\n user-select: text;\n}\n.ant-popover-content {\n position: relative;\n}\n.ant-popover::after {\n position: absolute;\n background: rgba(255, 255, 255, 0.01);\n content: '';\n}\n.ant-popover-hidden {\n display: none;\n}\n.ant-popover-placement-top,\n.ant-popover-placement-topLeft,\n.ant-popover-placement-topRight {\n padding-bottom: 15.3137085px;\n}\n.ant-popover-placement-right,\n.ant-popover-placement-rightTop,\n.ant-popover-placement-rightBottom {\n padding-left: 15.3137085px;\n}\n.ant-popover-placement-bottom,\n.ant-popover-placement-bottomLeft,\n.ant-popover-placement-bottomRight {\n padding-top: 15.3137085px;\n}\n.ant-popover-placement-left,\n.ant-popover-placement-leftTop,\n.ant-popover-placement-leftBottom {\n padding-right: 15.3137085px;\n}\n.ant-popover-inner {\n background-color: #fff;\n background-clip: padding-box;\n border-radius: 5px;\n box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05);\n}\n@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {\n .ant-popover {\n /* IE10+ */\n }\n .ant-popover-inner {\n box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05);\n }\n}\n.ant-popover-title {\n min-width: 177px;\n min-height: 32px;\n margin: 0;\n padding: 5px 16px 4px;\n color: rgba(0, 0, 0, 0.85);\n font-weight: 500;\n border-bottom: 1px solid #f0f0f0;\n}\n.ant-popover-inner-content {\n padding: 12px 16px;\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-popover-message {\n display: flex;\n align-items: center;\n padding: 4px 0 12px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n}\n.ant-popover-message .anticon {\n color: #faad14;\n font-size: 14px;\n}\n.ant-popover-message-icon {\n display: inline-block;\n margin-right: 8px;\n}\n.ant-popover-buttons {\n margin-bottom: 4px;\n text-align: right;\n}\n.ant-popover-buttons button:not(:first-child) {\n margin-left: 8px;\n}\n.ant-popover-arrow {\n position: absolute;\n display: block;\n width: 22px;\n height: 22px;\n overflow: hidden;\n background: transparent;\n pointer-events: none;\n}\n.ant-popover-arrow-content {\n --antd-arrow-background-color: #fff;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n display: block;\n width: 11.3137085px;\n height: 11.3137085px;\n margin: auto;\n content: '';\n pointer-events: auto;\n border-radius: 0 0 2px;\n pointer-events: none;\n}\n.ant-popover-arrow-content::before {\n position: absolute;\n top: -11.3137085px;\n left: -11.3137085px;\n width: 33.9411255px;\n height: 33.9411255px;\n background: var(--antd-arrow-background-color);\n background-repeat: no-repeat;\n background-position: -10px -10px;\n content: '';\n clip-path: inset(33% 33%);\n clip-path: path('M 9.849242404917499 24.091883092036785 A 5 5 0 0 1 13.384776310850237 22.627416997969522 L 20.627416997969522 22.627416997969522 A 2 2 0 0 0 22.627416997969522 20.627416997969522 L 22.627416997969522 13.384776310850237 A 5 5 0 0 1 24.091883092036785 9.849242404917499 L 23.091883092036785 9.849242404917499 L 9.849242404917499 23.091883092036785 Z');\n}\n.ant-popover-placement-top .ant-popover-arrow,\n.ant-popover-placement-topLeft .ant-popover-arrow,\n.ant-popover-placement-topRight .ant-popover-arrow {\n bottom: 0;\n transform: translateY(100%);\n}\n.ant-popover-placement-top .ant-popover-arrow-content,\n.ant-popover-placement-topLeft .ant-popover-arrow-content,\n.ant-popover-placement-topRight .ant-popover-arrow-content {\n box-shadow: 3px 3px 7px rgba(0, 0, 0, 0.07);\n transform: translateY(-11px) rotate(45deg);\n}\n.ant-popover-placement-top .ant-popover-arrow {\n left: 50%;\n transform: translateY(100%) translateX(-50%);\n}\n.ant-popover-placement-topLeft .ant-popover-arrow {\n left: 16px;\n}\n.ant-popover-placement-topRight .ant-popover-arrow {\n right: 16px;\n}\n.ant-popover-placement-right .ant-popover-arrow,\n.ant-popover-placement-rightTop .ant-popover-arrow,\n.ant-popover-placement-rightBottom .ant-popover-arrow {\n left: 0;\n transform: translateX(-100%);\n}\n.ant-popover-placement-right .ant-popover-arrow-content,\n.ant-popover-placement-rightTop .ant-popover-arrow-content,\n.ant-popover-placement-rightBottom .ant-popover-arrow-content {\n box-shadow: 3px 3px 7px rgba(0, 0, 0, 0.07);\n transform: translateX(11px) rotate(135deg);\n}\n.ant-popover-placement-right .ant-popover-arrow {\n top: 50%;\n transform: translateX(-100%) translateY(-50%);\n}\n.ant-popover-placement-rightTop .ant-popover-arrow {\n top: 12px;\n}\n.ant-popover-placement-rightBottom .ant-popover-arrow {\n bottom: 12px;\n}\n.ant-popover-placement-bottom .ant-popover-arrow,\n.ant-popover-placement-bottomLeft .ant-popover-arrow,\n.ant-popover-placement-bottomRight .ant-popover-arrow {\n top: 0;\n transform: translateY(-100%);\n}\n.ant-popover-placement-bottom .ant-popover-arrow-content,\n.ant-popover-placement-bottomLeft .ant-popover-arrow-content,\n.ant-popover-placement-bottomRight .ant-popover-arrow-content {\n box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.06);\n transform: translateY(11px) rotate(-135deg);\n}\n.ant-popover-placement-bottom .ant-popover-arrow {\n left: 50%;\n transform: translateY(-100%) translateX(-50%);\n}\n.ant-popover-placement-bottomLeft .ant-popover-arrow {\n left: 16px;\n}\n.ant-popover-placement-bottomRight .ant-popover-arrow {\n right: 16px;\n}\n.ant-popover-placement-left .ant-popover-arrow,\n.ant-popover-placement-leftTop .ant-popover-arrow,\n.ant-popover-placement-leftBottom .ant-popover-arrow {\n right: 0;\n transform: translateX(100%);\n}\n.ant-popover-placement-left .ant-popover-arrow-content,\n.ant-popover-placement-leftTop .ant-popover-arrow-content,\n.ant-popover-placement-leftBottom .ant-popover-arrow-content {\n box-shadow: 3px 3px 7px rgba(0, 0, 0, 0.07);\n transform: translateX(-11px) rotate(-45deg);\n}\n.ant-popover-placement-left .ant-popover-arrow {\n top: 50%;\n transform: translateX(100%) translateY(-50%);\n}\n.ant-popover-placement-leftTop .ant-popover-arrow {\n top: 12px;\n}\n.ant-popover-placement-leftBottom .ant-popover-arrow {\n bottom: 12px;\n}\n.ant-popover-pink .ant-popover-inner {\n background-color: #eb2f96;\n}\n.ant-popover-pink .ant-popover-arrow-content {\n background-color: #eb2f96;\n}\n.ant-popover-magenta .ant-popover-inner {\n background-color: #eb2f96;\n}\n.ant-popover-magenta .ant-popover-arrow-content {\n background-color: #eb2f96;\n}\n.ant-popover-red .ant-popover-inner {\n background-color: #f5222d;\n}\n.ant-popover-red .ant-popover-arrow-content {\n background-color: #f5222d;\n}\n.ant-popover-volcano .ant-popover-inner {\n background-color: #fa541c;\n}\n.ant-popover-volcano .ant-popover-arrow-content {\n background-color: #fa541c;\n}\n.ant-popover-orange .ant-popover-inner {\n background-color: #fa8c16;\n}\n.ant-popover-orange .ant-popover-arrow-content {\n background-color: #fa8c16;\n}\n.ant-popover-yellow .ant-popover-inner {\n background-color: #fadb14;\n}\n.ant-popover-yellow .ant-popover-arrow-content {\n background-color: #fadb14;\n}\n.ant-popover-gold .ant-popover-inner {\n background-color: #faad14;\n}\n.ant-popover-gold .ant-popover-arrow-content {\n background-color: #faad14;\n}\n.ant-popover-cyan .ant-popover-inner {\n background-color: #13c2c2;\n}\n.ant-popover-cyan .ant-popover-arrow-content {\n background-color: #13c2c2;\n}\n.ant-popover-lime .ant-popover-inner {\n background-color: #a0d911;\n}\n.ant-popover-lime .ant-popover-arrow-content {\n background-color: #a0d911;\n}\n.ant-popover-green .ant-popover-inner {\n background-color: #52c41a;\n}\n.ant-popover-green .ant-popover-arrow-content {\n background-color: #52c41a;\n}\n.ant-popover-blue .ant-popover-inner {\n background-color: #1890ff;\n}\n.ant-popover-blue .ant-popover-arrow-content {\n background-color: #1890ff;\n}\n.ant-popover-geekblue .ant-popover-inner {\n background-color: #2f54eb;\n}\n.ant-popover-geekblue .ant-popover-arrow-content {\n background-color: #2f54eb;\n}\n.ant-popover-purple .ant-popover-inner {\n background-color: #722ed1;\n}\n.ant-popover-purple .ant-popover-arrow-content {\n background-color: #722ed1;\n}\n.ant-popover-rtl {\n direction: rtl;\n text-align: right;\n}\n.ant-popover-rtl .ant-popover-message-icon {\n margin-right: 0;\n margin-left: 8px;\n}\n.ant-popover-rtl .ant-popover-message-title {\n padding-left: 16px;\n}\n.ant-popover-rtl .ant-popover-buttons {\n text-align: left;\n}\n.ant-popover-rtl .ant-popover-buttons button {\n margin-right: 8px;\n margin-left: 0;\n}\n.ant-progress {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n display: inline-block;\n}\n.ant-progress-line {\n position: relative;\n width: 100%;\n font-size: 14px;\n}\n.ant-progress-steps {\n display: inline-block;\n}\n.ant-progress-steps-outer {\n display: flex;\n flex-direction: row;\n align-items: center;\n}\n.ant-progress-steps-item {\n flex-shrink: 0;\n min-width: 2px;\n margin-right: 2px;\n background: #f3f3f3;\n transition: all 0.3s;\n}\n.ant-progress-steps-item-active {\n background: #1890ff;\n}\n.ant-progress-small.ant-progress-line,\n.ant-progress-small.ant-progress-line .ant-progress-text .anticon {\n font-size: 12px;\n}\n.ant-progress-outer {\n display: inline-block;\n width: 100%;\n margin-right: 0;\n padding-right: 0;\n}\n.ant-progress-show-info .ant-progress-outer {\n margin-right: calc(-2em - 8px);\n padding-right: calc(2em + 8px);\n}\n.ant-progress-inner {\n position: relative;\n display: inline-block;\n width: 100%;\n overflow: hidden;\n vertical-align: middle;\n background-color: #f5f5f5;\n border-radius: 100px;\n}\n.ant-progress-circle-trail {\n stroke: #f5f5f5;\n}\n.ant-progress-circle-path {\n animation: ant-progress-appear 0.3s;\n}\n.ant-progress-inner:not(.ant-progress-circle-gradient) .ant-progress-circle-path {\n stroke: #1890ff;\n}\n.ant-progress-success-bg,\n.ant-progress-bg {\n position: relative;\n background-color: #1890ff;\n border-radius: 100px;\n transition: all 0.4s cubic-bezier(0.08, 0.82, 0.17, 1) 0s;\n}\n.ant-progress-success-bg {\n position: absolute;\n top: 0;\n left: 0;\n background-color: #52c41a;\n}\n.ant-progress-text {\n display: inline-block;\n width: 2em;\n margin-left: 8px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 1em;\n line-height: 1;\n white-space: nowrap;\n text-align: left;\n vertical-align: middle;\n word-break: normal;\n}\n.ant-progress-text .anticon {\n font-size: 14px;\n}\n.ant-progress-status-active .ant-progress-bg::before {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: #fff;\n border-radius: 10px;\n opacity: 0;\n animation: ant-progress-active 2.4s cubic-bezier(0.23, 1, 0.32, 1) infinite;\n content: '';\n}\n.ant-progress-status-exception .ant-progress-bg {\n background-color: #ff4d4f;\n}\n.ant-progress-status-exception .ant-progress-text {\n color: #ff4d4f;\n}\n.ant-progress-status-exception .ant-progress-inner:not(.ant-progress-circle-gradient) .ant-progress-circle-path {\n stroke: #ff4d4f;\n}\n.ant-progress-status-success .ant-progress-bg {\n background-color: #52c41a;\n}\n.ant-progress-status-success .ant-progress-text {\n color: #52c41a;\n}\n.ant-progress-status-success .ant-progress-inner:not(.ant-progress-circle-gradient) .ant-progress-circle-path {\n stroke: #52c41a;\n}\n.ant-progress-circle .ant-progress-inner {\n position: relative;\n line-height: 1;\n background-color: transparent;\n}\n.ant-progress-circle .ant-progress-text {\n position: absolute;\n top: 50%;\n left: 50%;\n width: 100%;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 1em;\n line-height: 1;\n white-space: normal;\n text-align: center;\n transform: translate(-50%, -50%);\n}\n.ant-progress-circle .ant-progress-text .anticon {\n font-size: 1.16666667em;\n}\n.ant-progress-circle.ant-progress-status-exception .ant-progress-text {\n color: #ff4d4f;\n}\n.ant-progress-circle.ant-progress-status-success .ant-progress-text {\n color: #52c41a;\n}\n@keyframes ant-progress-active {\n 0% {\n transform: translateX(-100%) scaleX(0);\n opacity: 0.1;\n }\n 20% {\n transform: translateX(-100%) scaleX(0);\n opacity: 0.5;\n }\n 100% {\n transform: translateX(0) scaleX(1);\n opacity: 0;\n }\n}\n.ant-progress-rtl {\n direction: rtl;\n}\n.ant-progress-rtl.ant-progress-show-info .ant-progress-outer {\n margin-right: 0;\n margin-left: calc(-2em - 8px);\n padding-right: 0;\n padding-left: calc(2em + 8px);\n}\n.ant-progress-rtl .ant-progress-success-bg {\n right: 0;\n left: auto;\n}\n.ant-progress-rtl.ant-progress-line .ant-progress-text,\n.ant-progress-rtl.ant-progress-steps .ant-progress-text {\n margin-right: 8px;\n margin-left: 0;\n text-align: right;\n}\n.ant-radio-group {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n display: inline-block;\n font-size: 0;\n}\n.ant-radio-group .ant-badge-count {\n z-index: 1;\n}\n.ant-radio-group > .ant-badge:not(:first-child) > .ant-radio-button-wrapper {\n border-left: none;\n}\n.ant-radio-wrapper {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n display: inline-flex;\n align-items: baseline;\n margin-right: 8px;\n cursor: pointer;\n}\n.ant-radio-wrapper-disabled {\n cursor: not-allowed;\n}\n.ant-radio-wrapper::after {\n display: inline-block;\n width: 0;\n overflow: hidden;\n content: '\\a0';\n}\n.ant-radio-wrapper.ant-radio-wrapper-in-form-item input[type='radio'] {\n width: 14px;\n height: 14px;\n}\n.ant-radio {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n top: 0.2em;\n display: inline-block;\n outline: none;\n cursor: pointer;\n}\n.ant-radio-wrapper:hover .ant-radio,\n.ant-radio:hover .ant-radio-inner,\n.ant-radio-input:focus + .ant-radio-inner {\n border-color: #5b5ce1;\n}\n.ant-radio-input:focus + .ant-radio-inner {\n box-shadow: 0 0 0 3px rgba(91, 92, 225, 0.12);\n}\n.ant-radio-checked::after {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 1px solid #5b5ce1;\n border-radius: 50%;\n visibility: hidden;\n animation: antRadioEffect 0.36s ease-in-out;\n animation-fill-mode: both;\n content: '';\n}\n.ant-radio:hover::after,\n.ant-radio-wrapper:hover .ant-radio::after {\n visibility: visible;\n}\n.ant-radio-inner {\n position: relative;\n top: 0;\n left: 0;\n display: block;\n width: 16px;\n height: 16px;\n background-color: #fff;\n border-color: #d9d9d9;\n border-style: solid;\n border-width: 1px;\n border-radius: 50%;\n transition: all 0.3s;\n}\n.ant-radio-inner::after {\n position: absolute;\n top: 50%;\n left: 50%;\n display: block;\n width: 16px;\n height: 16px;\n margin-top: -8px;\n margin-left: -8px;\n background-color: #5b5ce1;\n border-top: 0;\n border-left: 0;\n border-radius: 16px;\n transform: scale(0);\n opacity: 0;\n transition: all 0.3s cubic-bezier(0.78, 0.14, 0.15, 0.86);\n content: ' ';\n}\n.ant-radio-input {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n cursor: pointer;\n opacity: 0;\n}\n.ant-radio.ant-radio-disabled .ant-radio-inner {\n border-color: #d9d9d9;\n}\n.ant-radio-checked .ant-radio-inner {\n border-color: #5b5ce1;\n}\n.ant-radio-checked .ant-radio-inner::after {\n transform: scale(0.5);\n opacity: 1;\n transition: all 0.3s cubic-bezier(0.78, 0.14, 0.15, 0.86);\n}\n.ant-radio-disabled {\n cursor: not-allowed;\n}\n.ant-radio-disabled .ant-radio-inner {\n background-color: #f5f5f5;\n cursor: not-allowed;\n}\n.ant-radio-disabled .ant-radio-inner::after {\n background-color: rgba(0, 0, 0, 0.2);\n}\n.ant-radio-disabled .ant-radio-input {\n cursor: not-allowed;\n}\n.ant-radio-disabled + span {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n}\nspan.ant-radio + * {\n padding-right: 8px;\n padding-left: 8px;\n}\n.ant-radio-button-wrapper {\n position: relative;\n display: inline-block;\n height: 32px;\n margin: 0;\n padding: 0 15px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n line-height: 30px;\n background: #fff;\n border: 1px solid #d9d9d9;\n border-top-width: 1.02px;\n border-left-width: 0;\n cursor: pointer;\n transition: color 0.3s, background 0.3s, border-color 0.3s, box-shadow 0.3s;\n}\n.ant-radio-button-wrapper a {\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-radio-button-wrapper > .ant-radio-button {\n position: absolute;\n top: 0;\n left: 0;\n z-index: -1;\n width: 100%;\n height: 100%;\n}\n.ant-radio-group-large .ant-radio-button-wrapper {\n height: 40px;\n font-size: 16px;\n line-height: 38px;\n}\n.ant-radio-group-small .ant-radio-button-wrapper {\n height: 24px;\n padding: 0 7px;\n line-height: 22px;\n}\n.ant-radio-button-wrapper:not(:first-child)::before {\n position: absolute;\n top: -1px;\n left: -1px;\n display: block;\n box-sizing: content-box;\n width: 1px;\n height: 100%;\n padding: 1px 0;\n background-color: #d9d9d9;\n transition: background-color 0.3s;\n content: '';\n}\n.ant-radio-button-wrapper:first-child {\n border-left: 1px solid #d9d9d9;\n border-radius: 5px 0 0 5px;\n}\n.ant-radio-button-wrapper:last-child {\n border-radius: 0 5px 5px 0;\n}\n.ant-radio-button-wrapper:first-child:last-child {\n border-radius: 5px;\n}\n.ant-radio-button-wrapper:hover {\n position: relative;\n color: #5b5ce1;\n}\n.ant-radio-button-wrapper:focus-within {\n box-shadow: 0 0 0 3px rgba(91, 92, 225, 0.12);\n}\n.ant-radio-button-wrapper .ant-radio-inner,\n.ant-radio-button-wrapper input[type='checkbox'],\n.ant-radio-button-wrapper input[type='radio'] {\n width: 0;\n height: 0;\n opacity: 0;\n pointer-events: none;\n}\n.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled) {\n z-index: 1;\n color: #5b5ce1;\n background: #fff;\n border-color: #5b5ce1;\n}\n.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled)::before {\n background-color: #5b5ce1;\n}\n.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):first-child {\n border-color: #5b5ce1;\n}\n.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):hover {\n color: #8588ed;\n border-color: #8588ed;\n}\n.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):hover::before {\n background-color: #8588ed;\n}\n.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):active {\n color: #4541ba;\n border-color: #4541ba;\n}\n.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):active::before {\n background-color: #4541ba;\n}\n.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):focus-within {\n box-shadow: 0 0 0 3px rgba(91, 92, 225, 0.12);\n}\n.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled) {\n color: #fff;\n background: #5b5ce1;\n border-color: #5b5ce1;\n}\n.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):hover {\n color: #fff;\n background: #8588ed;\n border-color: #8588ed;\n}\n.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):active {\n color: #fff;\n background: #4541ba;\n border-color: #4541ba;\n}\n.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):focus-within {\n box-shadow: 0 0 0 3px rgba(91, 92, 225, 0.12);\n}\n.ant-radio-button-wrapper-disabled {\n color: rgba(0, 0, 0, 0.25);\n background-color: #f5f5f5;\n border-color: #d9d9d9;\n cursor: not-allowed;\n}\n.ant-radio-button-wrapper-disabled:first-child,\n.ant-radio-button-wrapper-disabled:hover {\n color: rgba(0, 0, 0, 0.25);\n background-color: #f5f5f5;\n border-color: #d9d9d9;\n}\n.ant-radio-button-wrapper-disabled:first-child {\n border-left-color: #d9d9d9;\n}\n.ant-radio-button-wrapper-disabled.ant-radio-button-wrapper-checked {\n color: rgba(0, 0, 0, 0.25);\n background-color: #e6e6e6;\n border-color: #d9d9d9;\n box-shadow: none;\n}\n@keyframes antRadioEffect {\n 0% {\n transform: scale(1);\n opacity: 0.5;\n }\n 100% {\n transform: scale(1.6);\n opacity: 0;\n }\n}\n.ant-radio-group.ant-radio-group-rtl {\n direction: rtl;\n}\n.ant-radio-wrapper.ant-radio-wrapper-rtl {\n margin-right: 0;\n margin-left: 8px;\n direction: rtl;\n}\n.ant-radio-button-wrapper.ant-radio-button-wrapper-rtl {\n border-right-width: 0;\n border-left-width: 1px;\n}\n.ant-radio-button-wrapper.ant-radio-button-wrapper-rtl.ant-radio-button-wrapper:not(:first-child)::before {\n right: -1px;\n left: 0;\n}\n.ant-radio-button-wrapper.ant-radio-button-wrapper-rtl.ant-radio-button-wrapper:first-child {\n border-right: 1px solid #d9d9d9;\n border-radius: 0 5px 5px 0;\n}\n.ant-radio-button-wrapper-checked:not([class*=' ant-radio-button-wrapper-disabled']).ant-radio-button-wrapper:first-child {\n border-right-color: #8588ed;\n}\n.ant-radio-button-wrapper.ant-radio-button-wrapper-rtl.ant-radio-button-wrapper:last-child {\n border-radius: 5px 0 0 5px;\n}\n.ant-radio-button-wrapper.ant-radio-button-wrapper-rtl.ant-radio-button-wrapper-disabled:first-child {\n border-right-color: #d9d9d9;\n}\n.ant-rate {\n box-sizing: border-box;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n font-feature-settings: 'tnum';\n display: inline-block;\n margin: 0;\n padding: 0;\n color: #fadb14;\n font-size: 20px;\n line-height: unset;\n list-style: none;\n outline: none;\n}\n.ant-rate-disabled .ant-rate-star {\n cursor: default;\n}\n.ant-rate-disabled .ant-rate-star > div:hover {\n transform: scale(1);\n}\n.ant-rate-star {\n position: relative;\n display: inline-block;\n color: inherit;\n cursor: pointer;\n}\n.ant-rate-star:not(:last-child) {\n margin-right: 8px;\n}\n.ant-rate-star > div {\n transition: all 0.3s, outline 0s;\n}\n.ant-rate-star > div:hover {\n transform: scale(1.1);\n}\n.ant-rate-star > div:focus {\n outline: 0;\n}\n.ant-rate-star > div:focus-visible {\n outline: 1px dashed #fadb14;\n transform: scale(1.1);\n}\n.ant-rate-star-first,\n.ant-rate-star-second {\n color: #f0f0f0;\n transition: all 0.3s;\n user-select: none;\n}\n.ant-rate-star-first .anticon,\n.ant-rate-star-second .anticon {\n vertical-align: middle;\n}\n.ant-rate-star-first {\n position: absolute;\n top: 0;\n left: 0;\n width: 50%;\n height: 100%;\n overflow: hidden;\n opacity: 0;\n}\n.ant-rate-star-half .ant-rate-star-first,\n.ant-rate-star-half .ant-rate-star-second {\n opacity: 1;\n}\n.ant-rate-star-half .ant-rate-star-first,\n.ant-rate-star-full .ant-rate-star-second {\n color: inherit;\n}\n.ant-rate-text {\n display: inline-block;\n margin: 0 8px;\n font-size: 14px;\n}\n.ant-rate-rtl {\n direction: rtl;\n}\n.ant-rate-rtl .ant-rate-star:not(:last-child) {\n margin-right: 0;\n margin-left: 8px;\n}\n.ant-rate-rtl .ant-rate-star-first {\n right: 0;\n left: auto;\n}\n.ant-result {\n padding: 48px 32px;\n}\n.ant-result-success .ant-result-icon > .anticon {\n color: #52c41a;\n}\n.ant-result-error .ant-result-icon > .anticon {\n color: #ff4d4f;\n}\n.ant-result-info .ant-result-icon > .anticon {\n color: #5b5ce1;\n}\n.ant-result-warning .ant-result-icon > .anticon {\n color: #faad14;\n}\n.ant-result-image {\n width: 250px;\n height: 295px;\n margin: auto;\n}\n.ant-result-icon {\n margin-bottom: 24px;\n text-align: center;\n}\n.ant-result-icon > .anticon {\n font-size: 72px;\n}\n.ant-result-title {\n color: rgba(0, 0, 0, 0.85);\n font-size: 24px;\n line-height: 1.8;\n text-align: center;\n}\n.ant-result-subtitle {\n color: rgba(0, 0, 0, 0.45);\n font-size: 14px;\n line-height: 1.6;\n text-align: center;\n}\n.ant-result-extra {\n margin: 24px 0 0 0;\n text-align: center;\n}\n.ant-result-extra > * {\n margin-right: 8px;\n}\n.ant-result-extra > *:last-child {\n margin-right: 0;\n}\n.ant-result-content {\n margin-top: 24px;\n padding: 24px 40px;\n background-color: #fafafa;\n}\n.ant-result-rtl {\n direction: rtl;\n}\n.ant-result-rtl .ant-result-extra > * {\n margin-right: 0;\n margin-left: 8px;\n}\n.ant-result-rtl .ant-result-extra > *:last-child {\n margin-left: 0;\n}\n.segmented-disabled-item,\n.segmented-disabled-item:hover,\n.segmented-disabled-item:focus {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n}\n.segmented-item-selected {\n background-color: #fff;\n border-radius: 5px;\n box-shadow: 0 2px 8px -2px rgba(0, 0, 0, 0.05), 0 1px 4px -1px rgba(0, 0, 0, 0.07), 0 0 1px 0 rgba(0, 0, 0, 0.08);\n}\n.segmented-text-ellipsis {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n word-break: keep-all;\n}\n.ant-segmented {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n display: inline-block;\n padding: 2px;\n color: rgba(0, 0, 0, 0.65);\n background-color: rgba(0, 0, 0, 0.04);\n border-radius: 5px;\n transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\n}\n.ant-segmented-group {\n position: relative;\n display: flex;\n align-items: stretch;\n justify-items: flex-start;\n width: 100%;\n}\n.ant-segmented.ant-segmented-block {\n display: flex;\n}\n.ant-segmented.ant-segmented-block .ant-segmented-item {\n flex: 1;\n min-width: 0;\n}\n.ant-segmented:not(.ant-segmented-disabled):hover,\n.ant-segmented:not(.ant-segmented-disabled):focus {\n background-color: rgba(0, 0, 0, 0.06);\n}\n.ant-segmented-item {\n position: relative;\n text-align: center;\n cursor: pointer;\n transition: color 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\n}\n.ant-segmented-item-selected {\n background-color: #fff;\n border-radius: 5px;\n box-shadow: 0 2px 8px -2px rgba(0, 0, 0, 0.05), 0 1px 4px -1px rgba(0, 0, 0, 0.07), 0 0 1px 0 rgba(0, 0, 0, 0.08);\n color: #262626;\n}\n.ant-segmented-item:hover,\n.ant-segmented-item:focus {\n color: #262626;\n}\n.ant-segmented-item-label {\n min-height: 28px;\n padding: 0 11px;\n line-height: 28px;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n word-break: keep-all;\n}\n.ant-segmented-item-icon + * {\n margin-left: 6px;\n}\n.ant-segmented-item-input {\n position: absolute;\n top: 0;\n left: 0;\n width: 0;\n height: 0;\n opacity: 0;\n pointer-events: none;\n}\n.ant-segmented.ant-segmented-lg .ant-segmented-item-label {\n min-height: 36px;\n padding: 0 11px;\n font-size: 16px;\n line-height: 36px;\n}\n.ant-segmented.ant-segmented-sm .ant-segmented-item-label {\n min-height: 20px;\n padding: 0 7px;\n line-height: 20px;\n}\n.ant-segmented-item-disabled,\n.ant-segmented-item-disabled:hover,\n.ant-segmented-item-disabled:focus {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n}\n.ant-segmented-thumb {\n background-color: #fff;\n border-radius: 5px;\n box-shadow: 0 2px 8px -2px rgba(0, 0, 0, 0.05), 0 1px 4px -1px rgba(0, 0, 0, 0.07), 0 0 1px 0 rgba(0, 0, 0, 0.08);\n position: absolute;\n top: 0;\n left: 0;\n width: 0;\n height: 100%;\n padding: 4px 0;\n}\n.ant-segmented-thumb-motion-appear-active {\n transition: transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), width 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\n will-change: transform, width;\n}\n.ant-segmented.ant-segmented-rtl {\n direction: rtl;\n}\n.ant-segmented.ant-segmented-rtl .ant-segmented-item-icon {\n margin-right: 0;\n margin-left: 6px;\n}\n.ant-select-single .ant-select-selector {\n display: flex;\n}\n.ant-select-single .ant-select-selector .ant-select-selection-search {\n position: absolute;\n top: 0;\n right: 11px;\n bottom: 0;\n left: 11px;\n}\n.ant-select-single .ant-select-selector .ant-select-selection-search-input {\n width: 100%;\n}\n.ant-select-single .ant-select-selector .ant-select-selection-item,\n.ant-select-single .ant-select-selector .ant-select-selection-placeholder {\n padding: 0;\n line-height: 30px;\n transition: all 0.3s;\n}\n.ant-select-single .ant-select-selector .ant-select-selection-item {\n position: relative;\n user-select: none;\n}\n.ant-select-single .ant-select-selector .ant-select-selection-placeholder {\n transition: none;\n pointer-events: none;\n}\n.ant-select-single .ant-select-selector::after,\n.ant-select-single .ant-select-selector .ant-select-selection-item::after,\n.ant-select-single .ant-select-selector .ant-select-selection-placeholder::after {\n display: inline-block;\n width: 0;\n visibility: hidden;\n content: '\\a0';\n}\n.ant-select-single.ant-select-show-arrow .ant-select-selection-search {\n right: 25px;\n}\n.ant-select-single.ant-select-show-arrow .ant-select-selection-item,\n.ant-select-single.ant-select-show-arrow .ant-select-selection-placeholder {\n padding-right: 18px;\n}\n.ant-select-single.ant-select-open .ant-select-selection-item {\n color: #bfbfbf;\n}\n.ant-select-single:not(.ant-select-customize-input) .ant-select-selector {\n width: 100%;\n height: 32px;\n padding: 0 11px;\n}\n.ant-select-single:not(.ant-select-customize-input) .ant-select-selector .ant-select-selection-search-input {\n height: 30px;\n}\n.ant-select-single:not(.ant-select-customize-input) .ant-select-selector::after {\n line-height: 30px;\n}\n.ant-select-single.ant-select-customize-input .ant-select-selector::after {\n display: none;\n}\n.ant-select-single.ant-select-customize-input .ant-select-selector .ant-select-selection-search {\n position: static;\n width: 100%;\n}\n.ant-select-single.ant-select-customize-input .ant-select-selector .ant-select-selection-placeholder {\n position: absolute;\n right: 0;\n left: 0;\n padding: 0 11px;\n}\n.ant-select-single.ant-select-customize-input .ant-select-selector .ant-select-selection-placeholder::after {\n display: none;\n}\n.ant-select-single.ant-select-lg:not(.ant-select-customize-input) .ant-select-selector {\n height: 40px;\n}\n.ant-select-single.ant-select-lg:not(.ant-select-customize-input) .ant-select-selector::after,\n.ant-select-single.ant-select-lg:not(.ant-select-customize-input) .ant-select-selector .ant-select-selection-item,\n.ant-select-single.ant-select-lg:not(.ant-select-customize-input) .ant-select-selector .ant-select-selection-placeholder {\n line-height: 38px;\n}\n.ant-select-single.ant-select-lg:not(.ant-select-customize-input):not(.ant-select-customize-input) .ant-select-selection-search-input {\n height: 38px;\n}\n.ant-select-single.ant-select-sm:not(.ant-select-customize-input) .ant-select-selector {\n height: 24px;\n}\n.ant-select-single.ant-select-sm:not(.ant-select-customize-input) .ant-select-selector::after,\n.ant-select-single.ant-select-sm:not(.ant-select-customize-input) .ant-select-selector .ant-select-selection-item,\n.ant-select-single.ant-select-sm:not(.ant-select-customize-input) .ant-select-selector .ant-select-selection-placeholder {\n line-height: 22px;\n}\n.ant-select-single.ant-select-sm:not(.ant-select-customize-input):not(.ant-select-customize-input) .ant-select-selection-search-input {\n height: 22px;\n}\n.ant-select-single.ant-select-sm:not(.ant-select-customize-input) .ant-select-selection-search {\n right: 7px;\n left: 7px;\n}\n.ant-select-single.ant-select-sm:not(.ant-select-customize-input) .ant-select-selector {\n padding: 0 7px;\n}\n.ant-select-single.ant-select-sm:not(.ant-select-customize-input).ant-select-show-arrow .ant-select-selection-search {\n right: 28px;\n}\n.ant-select-single.ant-select-sm:not(.ant-select-customize-input).ant-select-show-arrow .ant-select-selection-item,\n.ant-select-single.ant-select-sm:not(.ant-select-customize-input).ant-select-show-arrow .ant-select-selection-placeholder {\n padding-right: 21px;\n}\n.ant-select-single.ant-select-lg:not(.ant-select-customize-input) .ant-select-selector {\n padding: 0 11px;\n}\n/**\n * Do not merge `height` & `line-height` under style with `selection` & `search`,\n * since chrome may update to redesign with its align logic.\n */\n.ant-select-selection-overflow {\n position: relative;\n display: flex;\n flex: auto;\n flex-wrap: wrap;\n max-width: 100%;\n}\n.ant-select-selection-overflow-item {\n flex: none;\n align-self: center;\n max-width: 100%;\n}\n.ant-select-multiple .ant-select-selector {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n padding: 1px 4px;\n}\n.ant-select-show-search.ant-select-multiple .ant-select-selector {\n cursor: text;\n}\n.ant-select-disabled.ant-select-multiple .ant-select-selector {\n background: #f5f5f5;\n cursor: not-allowed;\n}\n.ant-select-multiple .ant-select-selector::after {\n display: inline-block;\n width: 0;\n margin: 2px 0;\n line-height: 24px;\n content: '\\a0';\n}\n.ant-select-multiple.ant-select-show-arrow .ant-select-selector,\n.ant-select-multiple.ant-select-allow-clear .ant-select-selector {\n padding-right: 24px;\n}\n.ant-select-multiple .ant-select-selection-item {\n position: relative;\n display: flex;\n flex: none;\n box-sizing: border-box;\n max-width: 100%;\n height: 24px;\n margin-top: 2px;\n margin-bottom: 2px;\n line-height: 22px;\n background: #f5f5f5;\n border: 1px solid #f0f0f0;\n border-radius: 5px;\n cursor: default;\n transition: font-size 0.3s, line-height 0.3s, height 0.3s;\n user-select: none;\n margin-inline-end: 4px;\n padding-inline-start: 8px;\n padding-inline-end: 4px;\n}\n.ant-select-disabled.ant-select-multiple .ant-select-selection-item {\n color: #bfbfbf;\n border-color: #d9d9d9;\n cursor: not-allowed;\n}\n.ant-select-multiple .ant-select-selection-item-content {\n display: inline-block;\n margin-right: 4px;\n overflow: hidden;\n white-space: pre;\n text-overflow: ellipsis;\n}\n.ant-select-multiple .ant-select-selection-item-remove {\n color: inherit;\n font-style: normal;\n line-height: 0;\n text-align: center;\n text-transform: none;\n vertical-align: -0.125em;\n text-rendering: optimizelegibility;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n display: inline-block;\n color: rgba(0, 0, 0, 0.45);\n font-weight: bold;\n font-size: 10px;\n line-height: inherit;\n cursor: pointer;\n}\n.ant-select-multiple .ant-select-selection-item-remove > * {\n line-height: 1;\n}\n.ant-select-multiple .ant-select-selection-item-remove svg {\n display: inline-block;\n}\n.ant-select-multiple .ant-select-selection-item-remove::before {\n display: none;\n}\n.ant-select-multiple .ant-select-selection-item-remove .ant-select-multiple .ant-select-selection-item-remove-icon {\n display: block;\n}\n.ant-select-multiple .ant-select-selection-item-remove > .anticon {\n vertical-align: middle;\n}\n.ant-select-multiple .ant-select-selection-item-remove:hover {\n color: rgba(0, 0, 0, 0.75);\n}\n.ant-select-multiple .ant-select-selection-overflow-item + .ant-select-selection-overflow-item .ant-select-selection-search {\n margin-inline-start: 0;\n}\n.ant-select-multiple .ant-select-selection-search {\n position: relative;\n max-width: 100%;\n margin-inline-start: 7px;\n}\n.ant-select-multiple .ant-select-selection-search-input,\n.ant-select-multiple .ant-select-selection-search-mirror {\n height: 24px;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';\n line-height: 24px;\n transition: all 0.3s;\n}\n.ant-select-multiple .ant-select-selection-search-input {\n width: 100%;\n min-width: 4.1px;\n}\n.ant-select-multiple .ant-select-selection-search-mirror {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 999;\n white-space: pre;\n visibility: hidden;\n}\n.ant-select-multiple .ant-select-selection-placeholder {\n position: absolute;\n top: 50%;\n right: 11px;\n left: 11px;\n transform: translateY(-50%);\n transition: all 0.3s;\n}\n.ant-select-multiple.ant-select-lg .ant-select-selector::after {\n line-height: 32px;\n}\n.ant-select-multiple.ant-select-lg .ant-select-selection-item {\n height: 32px;\n line-height: 30px;\n}\n.ant-select-multiple.ant-select-lg .ant-select-selection-search {\n height: 32px;\n line-height: 32px;\n}\n.ant-select-multiple.ant-select-lg .ant-select-selection-search-input,\n.ant-select-multiple.ant-select-lg .ant-select-selection-search-mirror {\n height: 32px;\n line-height: 30px;\n}\n.ant-select-multiple.ant-select-sm .ant-select-selector::after {\n line-height: 16px;\n}\n.ant-select-multiple.ant-select-sm .ant-select-selection-item {\n height: 16px;\n line-height: 14px;\n}\n.ant-select-multiple.ant-select-sm .ant-select-selection-search {\n height: 16px;\n line-height: 16px;\n}\n.ant-select-multiple.ant-select-sm .ant-select-selection-search-input,\n.ant-select-multiple.ant-select-sm .ant-select-selection-search-mirror {\n height: 16px;\n line-height: 14px;\n}\n.ant-select-multiple.ant-select-sm .ant-select-selection-placeholder {\n left: 7px;\n}\n.ant-select-multiple.ant-select-sm .ant-select-selection-search {\n margin-inline-start: 3px;\n}\n.ant-select-multiple.ant-select-lg .ant-select-selection-item {\n height: 32px;\n line-height: 32px;\n}\n.ant-select-disabled .ant-select-selection-item-remove {\n display: none;\n}\n.ant-select-status-error.ant-select:not(.ant-select-disabled):not(.ant-select-customize-input):not(.ant-pagination-size-changer) .ant-select-selector {\n background-color: #fff;\n border-color: #ff4d4f !important;\n}\n.ant-select-status-error.ant-select:not(.ant-select-disabled):not(.ant-select-customize-input):not(.ant-pagination-size-changer).ant-select-open .ant-select-selector,\n.ant-select-status-error.ant-select:not(.ant-select-disabled):not(.ant-select-customize-input):not(.ant-pagination-size-changer).ant-select-focused .ant-select-selector {\n border-color: #ff7875;\n box-shadow: 0 0 0 2px rgba(255, 77, 79, 0.2);\n border-right-width: 1px;\n outline: 0;\n}\n.ant-select-status-warning.ant-select:not(.ant-select-disabled):not(.ant-select-customize-input):not(.ant-pagination-size-changer) .ant-select-selector {\n background-color: #fff;\n border-color: #faad14 !important;\n}\n.ant-select-status-warning.ant-select:not(.ant-select-disabled):not(.ant-select-customize-input):not(.ant-pagination-size-changer).ant-select-open .ant-select-selector,\n.ant-select-status-warning.ant-select:not(.ant-select-disabled):not(.ant-select-customize-input):not(.ant-pagination-size-changer).ant-select-focused .ant-select-selector {\n border-color: #ffc53d;\n box-shadow: 0 0 0 2px rgba(250, 173, 20, 0.2);\n border-right-width: 1px;\n outline: 0;\n}\n.ant-select-status-error.ant-select-has-feedback .ant-select-clear,\n.ant-select-status-warning.ant-select-has-feedback .ant-select-clear,\n.ant-select-status-success.ant-select-has-feedback .ant-select-clear,\n.ant-select-status-validating.ant-select-has-feedback .ant-select-clear {\n right: 32px;\n}\n.ant-select-status-error.ant-select-has-feedback .ant-select-selection-selected-value,\n.ant-select-status-warning.ant-select-has-feedback .ant-select-selection-selected-value,\n.ant-select-status-success.ant-select-has-feedback .ant-select-selection-selected-value,\n.ant-select-status-validating.ant-select-has-feedback .ant-select-selection-selected-value {\n padding-right: 42px;\n}\n/* Reset search input style */\n.ant-select {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n display: inline-block;\n cursor: pointer;\n}\n.ant-select:not(.ant-select-customize-input) .ant-select-selector {\n position: relative;\n background-color: #fff;\n border: 1px solid #d9d9d9;\n border-radius: 5px;\n transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\n}\n.ant-select:not(.ant-select-customize-input) .ant-select-selector input {\n cursor: pointer;\n}\n.ant-select-show-search.ant-select:not(.ant-select-customize-input) .ant-select-selector {\n cursor: text;\n}\n.ant-select-show-search.ant-select:not(.ant-select-customize-input) .ant-select-selector input {\n cursor: auto;\n}\n.ant-select-focused:not(.ant-select-disabled).ant-select:not(.ant-select-customize-input) .ant-select-selector {\n border-color: #8588ed;\n box-shadow: 0 0 0 2px rgba(91, 92, 225, 0.2);\n border-right-width: 1px;\n outline: 0;\n}\n.ant-input-rtl .ant-select-focused:not(.ant-select-disabled).ant-select:not(.ant-select-customize-input) .ant-select-selector {\n border-right-width: 0;\n border-left-width: 1px !important;\n}\n.ant-select-disabled.ant-select:not(.ant-select-customize-input) .ant-select-selector {\n color: rgba(0, 0, 0, 0.25);\n background: #f5f5f5;\n cursor: not-allowed;\n}\n.ant-select-multiple.ant-select-disabled.ant-select:not(.ant-select-customize-input) .ant-select-selector {\n background: #f5f5f5;\n}\n.ant-select-disabled.ant-select:not(.ant-select-customize-input) .ant-select-selector input {\n cursor: not-allowed;\n}\n.ant-select:not(.ant-select-customize-input) .ant-select-selector .ant-select-selection-search-input {\n margin: 0;\n padding: 0;\n background: transparent;\n border: none;\n outline: none;\n appearance: none;\n}\n.ant-select:not(.ant-select-customize-input) .ant-select-selector .ant-select-selection-search-input::-webkit-search-cancel-button {\n display: none;\n /* stylelint-disable-next-line property-no-vendor-prefix */\n -webkit-appearance: none;\n}\n.ant-select:not(.ant-select-disabled):hover .ant-select-selector {\n border-color: #8588ed;\n border-right-width: 1px;\n}\n.ant-input-rtl .ant-select:not(.ant-select-disabled):hover .ant-select-selector {\n border-right-width: 0;\n border-left-width: 1px !important;\n}\n.ant-select-selection-item {\n flex: 1;\n overflow: hidden;\n font-weight: normal;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n@media all and (-ms-high-contrast: none) {\n .ant-select-selection-item *::-ms-backdrop,\n .ant-select-selection-item {\n flex: auto;\n }\n}\n.ant-select-selection-placeholder {\n flex: 1;\n overflow: hidden;\n color: #bfbfbf;\n white-space: nowrap;\n text-overflow: ellipsis;\n pointer-events: none;\n}\n@media all and (-ms-high-contrast: none) {\n .ant-select-selection-placeholder *::-ms-backdrop,\n .ant-select-selection-placeholder {\n flex: auto;\n }\n}\n.ant-select-arrow {\n display: inline-block;\n color: inherit;\n font-style: normal;\n line-height: 0;\n text-transform: none;\n vertical-align: -0.125em;\n text-rendering: optimizelegibility;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n position: absolute;\n top: 50%;\n right: 11px;\n display: flex;\n align-items: center;\n height: 12px;\n margin-top: -6px;\n color: rgba(0, 0, 0, 0.25);\n font-size: 12px;\n line-height: 1;\n text-align: center;\n pointer-events: none;\n}\n.ant-select-arrow > * {\n line-height: 1;\n}\n.ant-select-arrow svg {\n display: inline-block;\n}\n.ant-select-arrow::before {\n display: none;\n}\n.ant-select-arrow .ant-select-arrow-icon {\n display: block;\n}\n.ant-select-arrow .anticon {\n vertical-align: top;\n transition: transform 0.3s;\n}\n.ant-select-arrow .anticon > svg {\n vertical-align: top;\n}\n.ant-select-arrow .anticon:not(.ant-select-suffix) {\n pointer-events: auto;\n}\n.ant-select-disabled .ant-select-arrow {\n cursor: not-allowed;\n}\n.ant-select-arrow > *:not(:last-child) {\n margin-inline-end: 8px;\n}\n.ant-select-clear {\n position: absolute;\n top: 50%;\n right: 11px;\n z-index: 1;\n display: inline-block;\n width: 12px;\n height: 12px;\n margin-top: -6px;\n color: rgba(0, 0, 0, 0.25);\n font-size: 12px;\n font-style: normal;\n line-height: 1;\n text-align: center;\n text-transform: none;\n background: #fff;\n cursor: pointer;\n opacity: 0;\n transition: color 0.3s ease, opacity 0.15s ease;\n text-rendering: auto;\n}\n.ant-select-clear::before {\n display: block;\n}\n.ant-select-clear:hover {\n color: rgba(0, 0, 0, 0.45);\n}\n.ant-select:hover .ant-select-clear {\n opacity: 1;\n}\n.ant-select-dropdown {\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: absolute;\n top: -9999px;\n left: -9999px;\n z-index: 1050;\n box-sizing: border-box;\n padding: 4px 0;\n overflow: hidden;\n font-size: 14px;\n font-variant: initial;\n background-color: #fff;\n border-radius: 5px;\n outline: none;\n box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05);\n}\n.ant-select-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-select-dropdown-placement-bottomLeft,\n.ant-select-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-select-dropdown-placement-bottomLeft {\n animation-name: antSlideUpIn;\n}\n.ant-select-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-select-dropdown-placement-topLeft,\n.ant-select-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-select-dropdown-placement-topLeft {\n animation-name: antSlideDownIn;\n}\n.ant-select-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-select-dropdown-placement-bottomLeft {\n animation-name: antSlideUpOut;\n}\n.ant-select-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-select-dropdown-placement-topLeft {\n animation-name: antSlideDownOut;\n}\n.ant-select-dropdown-hidden {\n display: none;\n}\n.ant-select-dropdown-empty {\n color: rgba(0, 0, 0, 0.25);\n}\n.ant-select-item-empty {\n position: relative;\n display: block;\n min-height: 32px;\n padding: 5px 12px;\n color: rgba(0, 0, 0, 0.85);\n font-weight: normal;\n font-size: 14px;\n line-height: 22px;\n color: rgba(0, 0, 0, 0.25);\n}\n.ant-select-item {\n position: relative;\n display: block;\n min-height: 32px;\n padding: 5px 12px;\n color: rgba(0, 0, 0, 0.85);\n font-weight: normal;\n font-size: 14px;\n line-height: 22px;\n cursor: pointer;\n transition: background 0.3s ease;\n}\n.ant-select-item-group {\n color: rgba(0, 0, 0, 0.45);\n font-size: 12px;\n cursor: default;\n}\n.ant-select-item-option {\n display: flex;\n}\n.ant-select-item-option-content {\n flex: auto;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.ant-select-item-option-state {\n flex: none;\n}\n.ant-select-item-option-active:not(.ant-select-item-option-disabled) {\n background-color: #f5f5f5;\n}\n.ant-select-item-option-selected:not(.ant-select-item-option-disabled) {\n color: rgba(0, 0, 0, 0.85);\n font-weight: 600;\n background-color: #f0f2ff;\n}\n.ant-select-item-option-selected:not(.ant-select-item-option-disabled) .ant-select-item-option-state {\n color: #5b5ce1;\n}\n.ant-select-item-option-disabled {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n}\n.ant-select-item-option-disabled.ant-select-item-option-selected {\n background-color: #f5f5f5;\n}\n.ant-select-item-option-grouped {\n padding-left: 24px;\n}\n.ant-select-lg {\n font-size: 16px;\n}\n.ant-select-borderless .ant-select-selector {\n background-color: transparent !important;\n border-color: transparent !important;\n box-shadow: none !important;\n}\n.ant-select.ant-select-in-form-item {\n width: 100%;\n}\n.ant-select-compact-item:not(.ant-select-compact-last-item) {\n margin-right: -1px;\n}\n.ant-select-compact-item:not(.ant-select-compact-last-item).ant-select-compact-item-rtl {\n margin-right: 0;\n margin-left: -1px;\n}\n.ant-select-compact-item:hover > *,\n.ant-select-compact-item:focus > *,\n.ant-select-compact-item:active > * {\n z-index: 2;\n}\n.ant-select-compact-item.ant-select-focused > * {\n z-index: 2;\n}\n.ant-select-compact-item[disabled] > * {\n z-index: 0;\n}\n.ant-select-compact-item:not(.ant-select-compact-first-item):not(.ant-select-compact-last-item).ant-select > .ant-select-selector {\n border-radius: 0;\n}\n.ant-select-compact-item.ant-select-compact-first-item.ant-select:not(.ant-select-compact-item-rtl) > .ant-select-selector {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.ant-select-compact-item.ant-select-compact-last-item.ant-select:not(.ant-select-compact-item-rtl) > .ant-select-selector {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.ant-select-compact-item.ant-select.ant-select-compact-first-item.ant-select-compact-item-rtl > .ant-select-selector {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.ant-select-compact-item.ant-select.ant-select-compact-last-item.ant-select-compact-item-rtl > .ant-select-selector {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.ant-select-rtl {\n direction: rtl;\n}\n.ant-select-rtl .ant-select-arrow {\n right: initial;\n left: 11px;\n}\n.ant-select-rtl .ant-select-clear {\n right: initial;\n left: 11px;\n}\n.ant-select-dropdown-rtl {\n direction: rtl;\n}\n.ant-select-dropdown-rtl .ant-select-item-option-grouped {\n padding-right: 24px;\n padding-left: 12px;\n}\n.ant-select-rtl.ant-select-multiple.ant-select-show-arrow .ant-select-selector,\n.ant-select-rtl.ant-select-multiple.ant-select-allow-clear .ant-select-selector {\n padding-right: 4px;\n padding-left: 24px;\n}\n.ant-select-rtl.ant-select-multiple .ant-select-selection-item {\n text-align: right;\n}\n.ant-select-rtl.ant-select-multiple .ant-select-selection-item-content {\n margin-right: 0;\n margin-left: 4px;\n text-align: right;\n}\n.ant-select-rtl.ant-select-multiple .ant-select-selection-search-mirror {\n right: 0;\n left: auto;\n}\n.ant-select-rtl.ant-select-multiple .ant-select-selection-placeholder {\n right: 11px;\n left: auto;\n}\n.ant-select-rtl.ant-select-multiple.ant-select-sm .ant-select-selection-placeholder {\n right: 7px;\n}\n.ant-select-rtl.ant-select-single .ant-select-selector .ant-select-selection-item,\n.ant-select-rtl.ant-select-single .ant-select-selector .ant-select-selection-placeholder {\n right: 0;\n left: 9px;\n text-align: right;\n}\n.ant-select-rtl.ant-select-single.ant-select-show-arrow .ant-select-selection-search {\n right: 11px;\n left: 25px;\n}\n.ant-select-rtl.ant-select-single.ant-select-show-arrow .ant-select-selection-item,\n.ant-select-rtl.ant-select-single.ant-select-show-arrow .ant-select-selection-placeholder {\n padding-right: 0;\n padding-left: 18px;\n}\n.ant-select-rtl.ant-select-single.ant-select-sm:not(.ant-select-customize-input).ant-select-show-arrow .ant-select-selection-search {\n right: 6px;\n}\n.ant-select-rtl.ant-select-single.ant-select-sm:not(.ant-select-customize-input).ant-select-show-arrow .ant-select-selection-item,\n.ant-select-rtl.ant-select-single.ant-select-sm:not(.ant-select-customize-input).ant-select-show-arrow .ant-select-selection-placeholder {\n padding-right: 0;\n padding-left: 21px;\n}\n.ant-skeleton {\n display: table;\n width: 100%;\n}\n.ant-skeleton-header {\n display: table-cell;\n padding-right: 16px;\n vertical-align: top;\n}\n.ant-skeleton-header .ant-skeleton-avatar {\n display: inline-block;\n vertical-align: top;\n background: rgba(190, 190, 190, 0.2);\n width: 32px;\n height: 32px;\n line-height: 32px;\n}\n.ant-skeleton-header .ant-skeleton-avatar.ant-skeleton-avatar-circle {\n border-radius: 50%;\n}\n.ant-skeleton-header .ant-skeleton-avatar-lg {\n width: 40px;\n height: 40px;\n line-height: 40px;\n}\n.ant-skeleton-header .ant-skeleton-avatar-lg.ant-skeleton-avatar-circle {\n border-radius: 50%;\n}\n.ant-skeleton-header .ant-skeleton-avatar-sm {\n width: 24px;\n height: 24px;\n line-height: 24px;\n}\n.ant-skeleton-header .ant-skeleton-avatar-sm.ant-skeleton-avatar-circle {\n border-radius: 50%;\n}\n.ant-skeleton-content {\n display: table-cell;\n width: 100%;\n vertical-align: top;\n}\n.ant-skeleton-content .ant-skeleton-title {\n width: 100%;\n height: 16px;\n background: rgba(190, 190, 190, 0.2);\n border-radius: 5px;\n}\n.ant-skeleton-content .ant-skeleton-title + .ant-skeleton-paragraph {\n margin-top: 24px;\n}\n.ant-skeleton-content .ant-skeleton-paragraph {\n padding: 0;\n}\n.ant-skeleton-content .ant-skeleton-paragraph > li {\n width: 100%;\n height: 16px;\n list-style: none;\n background: rgba(190, 190, 190, 0.2);\n border-radius: 5px;\n}\n.ant-skeleton-content .ant-skeleton-paragraph > li:last-child:not(:first-child):not(:nth-child(2)) {\n width: 61%;\n}\n.ant-skeleton-content .ant-skeleton-paragraph > li + li {\n margin-top: 16px;\n}\n.ant-skeleton-with-avatar .ant-skeleton-content .ant-skeleton-title {\n margin-top: 12px;\n}\n.ant-skeleton-with-avatar .ant-skeleton-content .ant-skeleton-title + .ant-skeleton-paragraph {\n margin-top: 28px;\n}\n.ant-skeleton-round .ant-skeleton-content .ant-skeleton-title,\n.ant-skeleton-round .ant-skeleton-content .ant-skeleton-paragraph > li {\n border-radius: 100px;\n}\n.ant-skeleton-active .ant-skeleton-title,\n.ant-skeleton-active .ant-skeleton-paragraph > li,\n.ant-skeleton-active .ant-skeleton-avatar,\n.ant-skeleton-active .ant-skeleton-button,\n.ant-skeleton-active .ant-skeleton-input,\n.ant-skeleton-active .ant-skeleton-image {\n position: relative;\n /* stylelint-disable-next-line property-no-vendor-prefix,value-no-vendor-prefix */\n z-index: 0;\n overflow: hidden;\n background: transparent;\n}\n.ant-skeleton-active .ant-skeleton-title::after,\n.ant-skeleton-active .ant-skeleton-paragraph > li::after,\n.ant-skeleton-active .ant-skeleton-avatar::after,\n.ant-skeleton-active .ant-skeleton-button::after,\n.ant-skeleton-active .ant-skeleton-input::after,\n.ant-skeleton-active .ant-skeleton-image::after {\n position: absolute;\n top: 0;\n right: -150%;\n bottom: 0;\n left: -150%;\n background: linear-gradient(90deg, rgba(190, 190, 190, 0.2) 25%, rgba(129, 129, 129, 0.24) 37%, rgba(190, 190, 190, 0.2) 63%);\n animation: ant-skeleton-loading 1.4s ease infinite;\n content: '';\n}\n.ant-skeleton.ant-skeleton-block {\n width: 100%;\n}\n.ant-skeleton.ant-skeleton-block .ant-skeleton-button {\n width: 100%;\n}\n.ant-skeleton.ant-skeleton-block .ant-skeleton-input {\n width: 100%;\n}\n.ant-skeleton-element {\n display: inline-block;\n width: auto;\n}\n.ant-skeleton-element .ant-skeleton-button {\n display: inline-block;\n vertical-align: top;\n background: rgba(190, 190, 190, 0.2);\n border-radius: 5px;\n width: 64px;\n min-width: 64px;\n height: 32px;\n line-height: 32px;\n}\n.ant-skeleton-element .ant-skeleton-button.ant-skeleton-button-square {\n width: 32px;\n min-width: 32px;\n}\n.ant-skeleton-element .ant-skeleton-button.ant-skeleton-button-circle {\n width: 32px;\n min-width: 32px;\n border-radius: 50%;\n}\n.ant-skeleton-element .ant-skeleton-button.ant-skeleton-button-round {\n border-radius: 32px;\n}\n.ant-skeleton-element .ant-skeleton-button-lg {\n width: 80px;\n min-width: 80px;\n height: 40px;\n line-height: 40px;\n}\n.ant-skeleton-element .ant-skeleton-button-lg.ant-skeleton-button-square {\n width: 40px;\n min-width: 40px;\n}\n.ant-skeleton-element .ant-skeleton-button-lg.ant-skeleton-button-circle {\n width: 40px;\n min-width: 40px;\n border-radius: 50%;\n}\n.ant-skeleton-element .ant-skeleton-button-lg.ant-skeleton-button-round {\n border-radius: 40px;\n}\n.ant-skeleton-element .ant-skeleton-button-sm {\n width: 48px;\n min-width: 48px;\n height: 24px;\n line-height: 24px;\n}\n.ant-skeleton-element .ant-skeleton-button-sm.ant-skeleton-button-square {\n width: 24px;\n min-width: 24px;\n}\n.ant-skeleton-element .ant-skeleton-button-sm.ant-skeleton-button-circle {\n width: 24px;\n min-width: 24px;\n border-radius: 50%;\n}\n.ant-skeleton-element .ant-skeleton-button-sm.ant-skeleton-button-round {\n border-radius: 24px;\n}\n.ant-skeleton-element .ant-skeleton-avatar {\n display: inline-block;\n vertical-align: top;\n background: rgba(190, 190, 190, 0.2);\n width: 32px;\n height: 32px;\n line-height: 32px;\n}\n.ant-skeleton-element .ant-skeleton-avatar.ant-skeleton-avatar-circle {\n border-radius: 50%;\n}\n.ant-skeleton-element .ant-skeleton-avatar-lg {\n width: 40px;\n height: 40px;\n line-height: 40px;\n}\n.ant-skeleton-element .ant-skeleton-avatar-lg.ant-skeleton-avatar-circle {\n border-radius: 50%;\n}\n.ant-skeleton-element .ant-skeleton-avatar-sm {\n width: 24px;\n height: 24px;\n line-height: 24px;\n}\n.ant-skeleton-element .ant-skeleton-avatar-sm.ant-skeleton-avatar-circle {\n border-radius: 50%;\n}\n.ant-skeleton-element .ant-skeleton-input {\n display: inline-block;\n vertical-align: top;\n background: rgba(190, 190, 190, 0.2);\n width: 160px;\n min-width: 160px;\n height: 32px;\n line-height: 32px;\n}\n.ant-skeleton-element .ant-skeleton-input-lg {\n width: 200px;\n min-width: 200px;\n height: 40px;\n line-height: 40px;\n}\n.ant-skeleton-element .ant-skeleton-input-sm {\n width: 120px;\n min-width: 120px;\n height: 24px;\n line-height: 24px;\n}\n.ant-skeleton-element .ant-skeleton-image {\n display: flex;\n align-items: center;\n justify-content: center;\n vertical-align: top;\n background: rgba(190, 190, 190, 0.2);\n width: 96px;\n height: 96px;\n line-height: 96px;\n}\n.ant-skeleton-element .ant-skeleton-image.ant-skeleton-image-circle {\n border-radius: 50%;\n}\n.ant-skeleton-element .ant-skeleton-image-path {\n fill: #bfbfbf;\n}\n.ant-skeleton-element .ant-skeleton-image-svg {\n width: 48px;\n height: 48px;\n line-height: 48px;\n max-width: 192px;\n max-height: 192px;\n}\n.ant-skeleton-element .ant-skeleton-image-svg.ant-skeleton-image-circle {\n border-radius: 50%;\n}\n@keyframes ant-skeleton-loading {\n 0% {\n transform: translateX(-37.5%);\n }\n 100% {\n transform: translateX(37.5%);\n }\n}\n.ant-skeleton-rtl {\n direction: rtl;\n}\n.ant-skeleton-rtl .ant-skeleton-header {\n padding-right: 0;\n padding-left: 16px;\n}\n.ant-skeleton-rtl.ant-skeleton.ant-skeleton-active .ant-skeleton-content .ant-skeleton-title,\n.ant-skeleton-rtl.ant-skeleton.ant-skeleton-active .ant-skeleton-content .ant-skeleton-paragraph > li {\n animation-name: ant-skeleton-loading-rtl;\n}\n.ant-skeleton-rtl.ant-skeleton.ant-skeleton-active .ant-skeleton-avatar {\n animation-name: ant-skeleton-loading-rtl;\n}\n@keyframes ant-skeleton-loading-rtl {\n 0% {\n background-position: 0% 50%;\n }\n 100% {\n background-position: 100% 50%;\n }\n}\n.ant-slider {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n height: 12px;\n margin: 10px 6px 10px;\n padding: 4px 0;\n cursor: pointer;\n touch-action: none;\n}\n.ant-slider-vertical {\n width: 12px;\n height: 100%;\n margin: 6px 10px;\n padding: 0 4px;\n}\n.ant-slider-vertical .ant-slider-rail {\n width: 4px;\n height: 100%;\n}\n.ant-slider-vertical .ant-slider-track {\n width: 4px;\n}\n.ant-slider-vertical .ant-slider-handle {\n margin-top: -6px;\n margin-left: -5px;\n}\n.ant-slider-vertical .ant-slider-mark {\n top: 0;\n left: 12px;\n width: 18px;\n height: 100%;\n}\n.ant-slider-vertical .ant-slider-mark-text {\n left: 4px;\n white-space: nowrap;\n}\n.ant-slider-vertical .ant-slider-step {\n width: 4px;\n height: 100%;\n}\n.ant-slider-vertical .ant-slider-dot {\n top: auto;\n margin-left: -2px;\n}\n.ant-slider-tooltip .ant-tooltip-inner {\n min-width: unset;\n}\n.ant-slider-rtl.ant-slider-vertical .ant-slider-handle {\n margin-right: -5px;\n margin-left: 0;\n}\n.ant-slider-rtl.ant-slider-vertical .ant-slider-mark {\n right: 12px;\n left: auto;\n}\n.ant-slider-rtl.ant-slider-vertical .ant-slider-mark-text {\n right: 4px;\n left: auto;\n}\n.ant-slider-rtl.ant-slider-vertical .ant-slider-dot {\n right: 2px;\n left: auto;\n}\n.ant-slider-with-marks {\n margin-bottom: 28px;\n}\n.ant-slider-rail {\n position: absolute;\n width: 100%;\n height: 4px;\n background-color: #f5f5f5;\n border-radius: 5px;\n transition: background-color 0.3s;\n}\n.ant-slider-track {\n position: absolute;\n height: 4px;\n background-color: #e0e3ff;\n border-radius: 5px;\n transition: background-color 0.3s;\n}\n.ant-slider-handle {\n position: absolute;\n width: 14px;\n height: 14px;\n margin-top: -5px;\n background-color: #fff;\n border: solid 2px #e0e3ff;\n border-radius: 50%;\n box-shadow: 0;\n cursor: pointer;\n transition: border-color 0.3s, box-shadow 0.6s, transform 0.3s cubic-bezier(0.18, 0.89, 0.32, 1.28);\n}\n.ant-slider-handle-dragging {\n z-index: 1;\n}\n.ant-slider-handle:focus {\n border-color: #7c7de7;\n outline: none;\n box-shadow: 0 0 0 5px rgba(91, 92, 225, 0.12);\n}\n.ant-slider-handle.ant-tooltip-open {\n border-color: #5b5ce1;\n}\n.ant-slider-handle::after {\n position: absolute;\n top: -6px;\n right: -6px;\n bottom: -6px;\n left: -6px;\n content: '';\n}\n.ant-slider:hover .ant-slider-rail {\n background-color: #e1e1e1;\n}\n.ant-slider:hover .ant-slider-track {\n background-color: #b4b9fa;\n}\n.ant-slider:hover .ant-slider-handle:not(.ant-tooltip-open) {\n border-color: #b4b9fa;\n}\n.ant-slider-mark {\n position: absolute;\n top: 14px;\n left: 0;\n width: 100%;\n font-size: 14px;\n}\n.ant-slider-mark-text {\n position: absolute;\n display: inline-block;\n color: rgba(0, 0, 0, 0.45);\n text-align: center;\n word-break: keep-all;\n cursor: pointer;\n user-select: none;\n}\n.ant-slider-mark-text-active {\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-slider-step {\n position: absolute;\n width: 100%;\n height: 4px;\n background: transparent;\n pointer-events: none;\n}\n.ant-slider-dot {\n position: absolute;\n top: -2px;\n width: 8px;\n height: 8px;\n background-color: #fff;\n border: 2px solid #f0f0f0;\n border-radius: 50%;\n cursor: pointer;\n}\n.ant-slider-dot-active {\n border-color: #adaef0;\n}\n.ant-slider-disabled {\n cursor: not-allowed;\n}\n.ant-slider-disabled .ant-slider-rail {\n background-color: #f5f5f5 !important;\n}\n.ant-slider-disabled .ant-slider-track {\n background-color: rgba(0, 0, 0, 0.25) !important;\n}\n.ant-slider-disabled .ant-slider-handle,\n.ant-slider-disabled .ant-slider-dot {\n background-color: #fff;\n border-color: rgba(0, 0, 0, 0.25) !important;\n box-shadow: none;\n cursor: not-allowed;\n}\n.ant-slider-disabled .ant-slider-mark-text,\n.ant-slider-disabled .ant-slider-dot {\n cursor: not-allowed !important;\n}\n.ant-slider-rtl {\n direction: rtl;\n}\n.ant-slider-rtl .ant-slider-mark {\n right: 0;\n left: auto;\n}\n.ant-space {\n display: inline-flex;\n}\n.ant-space-vertical {\n flex-direction: column;\n}\n.ant-space-align-center {\n align-items: center;\n}\n.ant-space-align-start {\n align-items: flex-start;\n}\n.ant-space-align-end {\n align-items: flex-end;\n}\n.ant-space-align-baseline {\n align-items: baseline;\n}\n.ant-space-item:empty {\n display: none;\n}\n.ant-space-compact {\n display: inline-flex;\n}\n.ant-space-compact-block {\n display: flex;\n width: 100%;\n}\n.ant-space-compact-vertical {\n flex-direction: column;\n}\n.ant-space-rtl {\n direction: rtl;\n}\n.ant-space-compact-rtl {\n direction: rtl;\n}\n.ant-spin {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: absolute;\n display: none;\n color: #5b5ce1;\n text-align: center;\n vertical-align: middle;\n opacity: 0;\n transition: transform 0.3s cubic-bezier(0.78, 0.14, 0.15, 0.86);\n}\n.ant-spin-spinning {\n position: static;\n display: inline-block;\n opacity: 1;\n}\n.ant-spin-nested-loading {\n position: relative;\n}\n.ant-spin-nested-loading > div > .ant-spin {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 4;\n display: block;\n width: 100%;\n height: 100%;\n max-height: 400px;\n}\n.ant-spin-nested-loading > div > .ant-spin .ant-spin-dot {\n position: absolute;\n top: 50%;\n left: 50%;\n margin: -10px;\n}\n.ant-spin-nested-loading > div > .ant-spin .ant-spin-text {\n position: absolute;\n top: 50%;\n width: 100%;\n padding-top: 5px;\n text-shadow: 0 1px 2px #fff;\n}\n.ant-spin-nested-loading > div > .ant-spin.ant-spin-show-text .ant-spin-dot {\n margin-top: -20px;\n}\n.ant-spin-nested-loading > div > .ant-spin-sm .ant-spin-dot {\n margin: -7px;\n}\n.ant-spin-nested-loading > div > .ant-spin-sm .ant-spin-text {\n padding-top: 2px;\n}\n.ant-spin-nested-loading > div > .ant-spin-sm.ant-spin-show-text .ant-spin-dot {\n margin-top: -17px;\n}\n.ant-spin-nested-loading > div > .ant-spin-lg .ant-spin-dot {\n margin: -16px;\n}\n.ant-spin-nested-loading > div > .ant-spin-lg .ant-spin-text {\n padding-top: 11px;\n}\n.ant-spin-nested-loading > div > .ant-spin-lg.ant-spin-show-text .ant-spin-dot {\n margin-top: -26px;\n}\n.ant-spin-container {\n position: relative;\n transition: opacity 0.3s;\n}\n.ant-spin-container::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 10;\n display: none \\9;\n width: 100%;\n height: 100%;\n background: #fff;\n opacity: 0;\n transition: all 0.3s;\n content: '';\n pointer-events: none;\n}\n.ant-spin-blur {\n clear: both;\n opacity: 0.5;\n user-select: none;\n pointer-events: none;\n}\n.ant-spin-blur::after {\n opacity: 0.4;\n pointer-events: auto;\n}\n.ant-spin-tip {\n color: rgba(0, 0, 0, 0.45);\n}\n.ant-spin-dot {\n position: relative;\n display: inline-block;\n font-size: 20px;\n width: 1em;\n height: 1em;\n}\n.ant-spin-dot-item {\n position: absolute;\n display: block;\n width: 9px;\n height: 9px;\n background-color: #5b5ce1;\n border-radius: 100%;\n transform: scale(0.75);\n transform-origin: 50% 50%;\n opacity: 0.3;\n animation: antSpinMove 1s infinite linear alternate;\n}\n.ant-spin-dot-item:nth-child(1) {\n top: 0;\n left: 0;\n}\n.ant-spin-dot-item:nth-child(2) {\n top: 0;\n right: 0;\n animation-delay: 0.4s;\n}\n.ant-spin-dot-item:nth-child(3) {\n right: 0;\n bottom: 0;\n animation-delay: 0.8s;\n}\n.ant-spin-dot-item:nth-child(4) {\n bottom: 0;\n left: 0;\n animation-delay: 1.2s;\n}\n.ant-spin-dot-spin {\n transform: rotate(0deg);\n animation: antRotate 1.2s infinite linear;\n}\n.ant-spin-sm .ant-spin-dot {\n font-size: 14px;\n}\n.ant-spin-sm .ant-spin-dot i {\n width: 6px;\n height: 6px;\n}\n.ant-spin-lg .ant-spin-dot {\n font-size: 32px;\n}\n.ant-spin-lg .ant-spin-dot i {\n width: 14px;\n height: 14px;\n}\n.ant-spin.ant-spin-show-text .ant-spin-text {\n display: block;\n}\n@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {\n /* IE10+ */\n .ant-spin-blur {\n background: #fff;\n opacity: 0.5;\n }\n}\n@keyframes antSpinMove {\n to {\n opacity: 1;\n }\n}\n@keyframes antRotate {\n to {\n transform: rotate(360deg);\n }\n}\n.ant-spin-rtl {\n direction: rtl;\n}\n.ant-spin-rtl .ant-spin-dot-spin {\n transform: rotate(-45deg);\n animation-name: antRotateRtl;\n}\n@keyframes antRotateRtl {\n to {\n transform: rotate(-405deg);\n }\n}\n.ant-statistic {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n}\n.ant-statistic-title {\n margin-bottom: 4px;\n color: rgba(0, 0, 0, 0.45);\n font-size: 14px;\n}\n.ant-statistic-skeleton {\n padding-top: 16px;\n}\n.ant-statistic-content {\n color: rgba(0, 0, 0, 0.85);\n font-size: 24px;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';\n}\n.ant-statistic-content-value {\n display: inline-block;\n direction: ltr;\n}\n.ant-statistic-content-prefix,\n.ant-statistic-content-suffix {\n display: inline-block;\n}\n.ant-statistic-content-prefix {\n margin-right: 4px;\n}\n.ant-statistic-content-suffix {\n margin-left: 4px;\n}\n.ant-statistic-rtl {\n direction: rtl;\n}\n.ant-statistic-rtl .ant-statistic-content-prefix {\n margin-right: 0;\n margin-left: 4px;\n}\n.ant-statistic-rtl .ant-statistic-content-suffix {\n margin-right: 4px;\n margin-left: 0;\n}\n.ant-steps {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n display: flex;\n width: 100%;\n font-size: 0;\n text-align: initial;\n}\n.ant-steps-item {\n position: relative;\n display: inline-block;\n flex: 1;\n overflow: hidden;\n vertical-align: top;\n}\n.ant-steps-item-container {\n outline: none;\n}\n.ant-steps-item:last-child {\n flex: none;\n}\n.ant-steps-item:last-child > .ant-steps-item-container > .ant-steps-item-tail,\n.ant-steps-item:last-child > .ant-steps-item-container > .ant-steps-item-content > .ant-steps-item-title::after {\n display: none;\n}\n.ant-steps-item-icon,\n.ant-steps-item-content {\n display: inline-block;\n vertical-align: top;\n}\n.ant-steps-item-icon {\n width: 32px;\n height: 32px;\n margin: 0 8px 0 0;\n font-size: 16px;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';\n line-height: 32px;\n text-align: center;\n border: 1px solid rgba(0, 0, 0, 0.25);\n border-radius: 32px;\n transition: background-color 0.3s, border-color 0.3s;\n}\n.ant-steps-item-icon .ant-steps-icon {\n position: relative;\n top: -0.5px;\n color: #5b5ce1;\n line-height: 1;\n}\n.ant-steps-item-tail {\n position: absolute;\n top: 12px;\n left: 0;\n width: 100%;\n padding: 0 10px;\n}\n.ant-steps-item-tail::after {\n display: inline-block;\n width: 100%;\n height: 1px;\n background: #f0f0f0;\n border-radius: 1px;\n transition: background 0.3s;\n content: '';\n}\n.ant-steps-item-title {\n position: relative;\n display: inline-block;\n padding-right: 16px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 16px;\n line-height: 32px;\n}\n.ant-steps-item-title::after {\n position: absolute;\n top: 16px;\n left: 100%;\n display: block;\n width: 9999px;\n height: 1px;\n background: #f0f0f0;\n content: '';\n}\n.ant-steps-item-subtitle {\n display: inline;\n margin-left: 8px;\n color: rgba(0, 0, 0, 0.45);\n font-weight: normal;\n font-size: 14px;\n}\n.ant-steps-item-description {\n color: rgba(0, 0, 0, 0.45);\n font-size: 14px;\n}\n.ant-steps-item-wait .ant-steps-item-icon {\n background-color: #fff;\n border-color: rgba(0, 0, 0, 0.25);\n}\n.ant-steps-item-wait .ant-steps-item-icon > .ant-steps-icon {\n color: rgba(0, 0, 0, 0.25);\n}\n.ant-steps-item-wait .ant-steps-item-icon > .ant-steps-icon .ant-steps-icon-dot {\n background: rgba(0, 0, 0, 0.25);\n}\n.ant-steps-item-wait > .ant-steps-item-container > .ant-steps-item-content > .ant-steps-item-title {\n color: rgba(0, 0, 0, 0.45);\n}\n.ant-steps-item-wait > .ant-steps-item-container > .ant-steps-item-content > .ant-steps-item-title::after {\n background-color: #f0f0f0;\n}\n.ant-steps-item-wait > .ant-steps-item-container > .ant-steps-item-content > .ant-steps-item-description {\n color: rgba(0, 0, 0, 0.45);\n}\n.ant-steps-item-wait > .ant-steps-item-container > .ant-steps-item-tail::after {\n background-color: #f0f0f0;\n}\n.ant-steps-item-process .ant-steps-item-icon {\n background-color: #fff;\n border-color: #5b5ce1;\n}\n.ant-steps-item-process .ant-steps-item-icon > .ant-steps-icon {\n color: #5b5ce1;\n}\n.ant-steps-item-process .ant-steps-item-icon > .ant-steps-icon .ant-steps-icon-dot {\n background: #5b5ce1;\n}\n.ant-steps-item-process > .ant-steps-item-container > .ant-steps-item-content > .ant-steps-item-title {\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-steps-item-process > .ant-steps-item-container > .ant-steps-item-content > .ant-steps-item-title::after {\n background-color: #f0f0f0;\n}\n.ant-steps-item-process > .ant-steps-item-container > .ant-steps-item-content > .ant-steps-item-description {\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-steps-item-process > .ant-steps-item-container > .ant-steps-item-tail::after {\n background-color: #f0f0f0;\n}\n.ant-steps-item-process > .ant-steps-item-container > .ant-steps-item-icon {\n background: #5b5ce1;\n}\n.ant-steps-item-process > .ant-steps-item-container > .ant-steps-item-icon .ant-steps-icon {\n color: #fff;\n}\n.ant-steps-item-process > .ant-steps-item-container > .ant-steps-item-title {\n font-weight: 500;\n}\n.ant-steps-item-finish .ant-steps-item-icon {\n background-color: #fff;\n border-color: #5b5ce1;\n}\n.ant-steps-item-finish .ant-steps-item-icon > .ant-steps-icon {\n color: #5b5ce1;\n}\n.ant-steps-item-finish .ant-steps-item-icon > .ant-steps-icon .ant-steps-icon-dot {\n background: #5b5ce1;\n}\n.ant-steps-item-finish > .ant-steps-item-container > .ant-steps-item-content > .ant-steps-item-title {\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-steps-item-finish > .ant-steps-item-container > .ant-steps-item-content > .ant-steps-item-title::after {\n background-color: #5b5ce1;\n}\n.ant-steps-item-finish > .ant-steps-item-container > .ant-steps-item-content > .ant-steps-item-description {\n color: rgba(0, 0, 0, 0.45);\n}\n.ant-steps-item-finish > .ant-steps-item-container > .ant-steps-item-tail::after {\n background-color: #5b5ce1;\n}\n.ant-steps-item-error .ant-steps-item-icon {\n background-color: #fff;\n border-color: #ff4d4f;\n}\n.ant-steps-item-error .ant-steps-item-icon > .ant-steps-icon {\n color: #ff4d4f;\n}\n.ant-steps-item-error .ant-steps-item-icon > .ant-steps-icon .ant-steps-icon-dot {\n background: #ff4d4f;\n}\n.ant-steps-item-error > .ant-steps-item-container > .ant-steps-item-content > .ant-steps-item-title {\n color: #ff4d4f;\n}\n.ant-steps-item-error > .ant-steps-item-container > .ant-steps-item-content > .ant-steps-item-title::after {\n background-color: #f0f0f0;\n}\n.ant-steps-item-error > .ant-steps-item-container > .ant-steps-item-content > .ant-steps-item-description {\n color: #ff4d4f;\n}\n.ant-steps-item-error > .ant-steps-item-container > .ant-steps-item-tail::after {\n background-color: #f0f0f0;\n}\n.ant-steps-item.ant-steps-next-error .ant-steps-item-title::after {\n background: #ff4d4f;\n}\n.ant-steps-item-disabled {\n cursor: not-allowed;\n}\n.ant-steps .ant-steps-item:not(.ant-steps-item-active) > .ant-steps-item-container[role='button'] {\n cursor: pointer;\n}\n.ant-steps .ant-steps-item:not(.ant-steps-item-active) > .ant-steps-item-container[role='button'] .ant-steps-item-title,\n.ant-steps .ant-steps-item:not(.ant-steps-item-active) > .ant-steps-item-container[role='button'] .ant-steps-item-subtitle,\n.ant-steps .ant-steps-item:not(.ant-steps-item-active) > .ant-steps-item-container[role='button'] .ant-steps-item-description,\n.ant-steps .ant-steps-item:not(.ant-steps-item-active) > .ant-steps-item-container[role='button'] .ant-steps-item-icon .ant-steps-icon {\n transition: color 0.3s;\n}\n.ant-steps .ant-steps-item:not(.ant-steps-item-active) > .ant-steps-item-container[role='button']:hover .ant-steps-item-title,\n.ant-steps .ant-steps-item:not(.ant-steps-item-active) > .ant-steps-item-container[role='button']:hover .ant-steps-item-subtitle,\n.ant-steps .ant-steps-item:not(.ant-steps-item-active) > .ant-steps-item-container[role='button']:hover .ant-steps-item-description {\n color: #5b5ce1;\n}\n.ant-steps .ant-steps-item:not(.ant-steps-item-active):not(.ant-steps-item-process) > .ant-steps-item-container[role='button']:hover .ant-steps-item-icon {\n border-color: #5b5ce1;\n}\n.ant-steps .ant-steps-item:not(.ant-steps-item-active):not(.ant-steps-item-process) > .ant-steps-item-container[role='button']:hover .ant-steps-item-icon .ant-steps-icon {\n color: #5b5ce1;\n}\n.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item {\n padding-left: 16px;\n white-space: nowrap;\n}\n.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item:first-child {\n padding-left: 0;\n}\n.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item:last-child .ant-steps-item-title {\n padding-right: 0;\n}\n.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item-tail {\n display: none;\n}\n.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item-description {\n max-width: 140px;\n white-space: normal;\n}\n.ant-steps-item-custom > .ant-steps-item-container > .ant-steps-item-icon {\n height: auto;\n background: none;\n border: 0;\n}\n.ant-steps-item-custom > .ant-steps-item-container > .ant-steps-item-icon > .ant-steps-icon {\n top: 0px;\n left: 0.5px;\n width: 32px;\n height: 32px;\n font-size: 24px;\n line-height: 32px;\n}\n.ant-steps-item-custom.ant-steps-item-process .ant-steps-item-icon > .ant-steps-icon {\n color: #5b5ce1;\n}\n.ant-steps:not(.ant-steps-vertical) .ant-steps-item-custom .ant-steps-item-icon {\n width: auto;\n background: none;\n}\n.ant-steps-small.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item {\n padding-left: 12px;\n}\n.ant-steps-small.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item:first-child {\n padding-left: 0;\n}\n.ant-steps-small .ant-steps-item-icon {\n width: 24px;\n height: 24px;\n margin: 0 8px 0 0;\n font-size: 12px;\n line-height: 24px;\n text-align: center;\n border-radius: 24px;\n}\n.ant-steps-small .ant-steps-item-title {\n padding-right: 12px;\n font-size: 14px;\n line-height: 24px;\n}\n.ant-steps-small .ant-steps-item-title::after {\n top: 12px;\n}\n.ant-steps-small .ant-steps-item-description {\n color: rgba(0, 0, 0, 0.45);\n font-size: 14px;\n}\n.ant-steps-small .ant-steps-item-tail {\n top: 8px;\n}\n.ant-steps-small .ant-steps-item-custom .ant-steps-item-icon {\n width: inherit;\n height: inherit;\n line-height: inherit;\n background: none;\n border: 0;\n border-radius: 0;\n}\n.ant-steps-small .ant-steps-item-custom .ant-steps-item-icon > .ant-steps-icon {\n font-size: 24px;\n line-height: 24px;\n transform: none;\n}\n.ant-steps-vertical {\n display: flex;\n flex-direction: column;\n}\n.ant-steps-vertical > .ant-steps-item {\n display: block;\n flex: 1 0 auto;\n padding-left: 0;\n overflow: visible;\n}\n.ant-steps-vertical > .ant-steps-item .ant-steps-item-icon {\n float: left;\n margin-right: 16px;\n}\n.ant-steps-vertical > .ant-steps-item .ant-steps-item-content {\n display: block;\n min-height: 48px;\n overflow: hidden;\n}\n.ant-steps-vertical > .ant-steps-item .ant-steps-item-title {\n line-height: 32px;\n}\n.ant-steps-vertical > .ant-steps-item .ant-steps-item-description {\n padding-bottom: 12px;\n}\n.ant-steps-vertical > .ant-steps-item > .ant-steps-item-container > .ant-steps-item-tail {\n position: absolute;\n top: 0;\n left: 16px;\n width: 1px;\n height: 100%;\n padding: 38px 0 6px;\n}\n.ant-steps-vertical > .ant-steps-item > .ant-steps-item-container > .ant-steps-item-tail::after {\n width: 1px;\n height: 100%;\n}\n.ant-steps-vertical > .ant-steps-item:not(:last-child) > .ant-steps-item-container > .ant-steps-item-tail {\n display: block;\n}\n.ant-steps-vertical > .ant-steps-item > .ant-steps-item-container > .ant-steps-item-content > .ant-steps-item-title::after {\n display: none;\n}\n.ant-steps-vertical.ant-steps-small .ant-steps-item-container .ant-steps-item-tail {\n position: absolute;\n top: 0;\n left: 12px;\n padding: 30px 0 6px;\n}\n.ant-steps-vertical.ant-steps-small .ant-steps-item-container .ant-steps-item-title {\n line-height: 24px;\n}\n.ant-steps-label-vertical .ant-steps-item {\n overflow: visible;\n}\n.ant-steps-label-vertical .ant-steps-item-tail {\n margin-left: 58px;\n padding: 3.5px 24px;\n}\n.ant-steps-label-vertical .ant-steps-item-content {\n display: block;\n width: 116px;\n margin-top: 8px;\n text-align: center;\n}\n.ant-steps-label-vertical .ant-steps-item-icon {\n display: inline-block;\n margin-left: 42px;\n}\n.ant-steps-label-vertical .ant-steps-item-title {\n padding-right: 0;\n padding-left: 0;\n}\n.ant-steps-label-vertical .ant-steps-item-title::after {\n display: none;\n}\n.ant-steps-label-vertical .ant-steps-item-subtitle {\n display: block;\n margin-bottom: 4px;\n margin-left: 0;\n line-height: 1.5715;\n}\n.ant-steps-label-vertical.ant-steps-small:not(.ant-steps-dot) .ant-steps-item-icon {\n margin-left: 46px;\n}\n.ant-steps-dot .ant-steps-item-title,\n.ant-steps-dot.ant-steps-small .ant-steps-item-title {\n line-height: 1.5715;\n}\n.ant-steps-dot .ant-steps-item-tail,\n.ant-steps-dot.ant-steps-small .ant-steps-item-tail {\n top: 2px;\n width: 100%;\n margin: 0 0 0 70px;\n padding: 0;\n}\n.ant-steps-dot .ant-steps-item-tail::after,\n.ant-steps-dot.ant-steps-small .ant-steps-item-tail::after {\n width: calc(100% - 20px);\n height: 3px;\n margin-left: 12px;\n}\n.ant-steps-dot .ant-steps-item:first-child .ant-steps-icon-dot,\n.ant-steps-dot.ant-steps-small .ant-steps-item:first-child .ant-steps-icon-dot {\n left: 2px;\n}\n.ant-steps-dot .ant-steps-item-icon,\n.ant-steps-dot.ant-steps-small .ant-steps-item-icon {\n width: 8px;\n height: 8px;\n margin-left: 67px;\n padding-right: 0;\n line-height: 8px;\n background: transparent;\n border: 0;\n}\n.ant-steps-dot .ant-steps-item-icon .ant-steps-icon-dot,\n.ant-steps-dot.ant-steps-small .ant-steps-item-icon .ant-steps-icon-dot {\n position: relative;\n float: left;\n width: 100%;\n height: 100%;\n border-radius: 100px;\n transition: all 0.3s;\n /* expand hover area */\n}\n.ant-steps-dot .ant-steps-item-icon .ant-steps-icon-dot::after,\n.ant-steps-dot.ant-steps-small .ant-steps-item-icon .ant-steps-icon-dot::after {\n position: absolute;\n top: -12px;\n left: -26px;\n width: 60px;\n height: 32px;\n background: rgba(0, 0, 0, 0.001);\n content: '';\n}\n.ant-steps-dot .ant-steps-item-content,\n.ant-steps-dot.ant-steps-small .ant-steps-item-content {\n width: 140px;\n}\n.ant-steps-dot .ant-steps-item-process .ant-steps-item-icon,\n.ant-steps-dot.ant-steps-small .ant-steps-item-process .ant-steps-item-icon {\n position: relative;\n top: -1px;\n width: 10px;\n height: 10px;\n line-height: 10px;\n background: none;\n}\n.ant-steps-dot .ant-steps-item-process .ant-steps-icon:first-child .ant-steps-icon-dot,\n.ant-steps-dot.ant-steps-small .ant-steps-item-process .ant-steps-icon:first-child .ant-steps-icon-dot {\n left: 0;\n}\n.ant-steps-vertical.ant-steps-dot .ant-steps-item-icon {\n margin-top: 13px;\n margin-left: 0;\n background: none;\n}\n.ant-steps-vertical.ant-steps-dot .ant-steps-item > .ant-steps-item-container > .ant-steps-item-tail {\n top: 6.5px;\n left: -9px;\n margin: 0;\n padding: 22px 0 4px;\n}\n.ant-steps-vertical.ant-steps-dot.ant-steps-small .ant-steps-item-icon {\n margin-top: 10px;\n}\n.ant-steps-vertical.ant-steps-dot.ant-steps-small .ant-steps-item > .ant-steps-item-container > .ant-steps-item-tail {\n top: 3.5px;\n}\n.ant-steps-vertical.ant-steps-dot .ant-steps-item:first-child .ant-steps-icon-dot {\n left: 0;\n}\n.ant-steps-vertical.ant-steps-dot .ant-steps-item-content {\n width: inherit;\n}\n.ant-steps-vertical.ant-steps-dot .ant-steps-item-process .ant-steps-item-container .ant-steps-item-icon .ant-steps-icon-dot {\n top: -1px;\n left: -1px;\n}\n.ant-steps-navigation {\n padding-top: 12px;\n}\n.ant-steps-navigation.ant-steps-small .ant-steps-item-container {\n margin-left: -12px;\n}\n.ant-steps-navigation .ant-steps-item {\n overflow: visible;\n text-align: center;\n}\n.ant-steps-navigation .ant-steps-item-container {\n display: inline-block;\n height: 100%;\n margin-left: -16px;\n padding-bottom: 12px;\n text-align: left;\n transition: opacity 0.3s;\n}\n.ant-steps-navigation .ant-steps-item-container .ant-steps-item-content {\n max-width: auto;\n}\n.ant-steps-navigation .ant-steps-item-container .ant-steps-item-title {\n max-width: 100%;\n padding-right: 0;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.ant-steps-navigation .ant-steps-item-container .ant-steps-item-title::after {\n display: none;\n}\n.ant-steps-navigation .ant-steps-item:not(.ant-steps-item-active) .ant-steps-item-container[role='button'] {\n cursor: pointer;\n}\n.ant-steps-navigation .ant-steps-item:not(.ant-steps-item-active) .ant-steps-item-container[role='button']:hover {\n opacity: 0.85;\n}\n.ant-steps-navigation .ant-steps-item:last-child {\n flex: 1;\n}\n.ant-steps-navigation .ant-steps-item:last-child::after {\n display: none;\n}\n.ant-steps-navigation .ant-steps-item::after {\n position: absolute;\n top: 50%;\n left: 100%;\n display: inline-block;\n width: 12px;\n height: 12px;\n margin-top: -14px;\n margin-left: -2px;\n border: 1px solid rgba(0, 0, 0, 0.25);\n border-bottom: none;\n border-left: none;\n transform: rotate(45deg);\n content: '';\n}\n.ant-steps-navigation .ant-steps-item::before {\n position: absolute;\n bottom: 0;\n left: 50%;\n display: inline-block;\n width: 0;\n height: 2px;\n background-color: #5b5ce1;\n transition: width 0.3s, left 0.3s;\n transition-timing-function: ease-out;\n content: '';\n}\n.ant-steps-navigation .ant-steps-item.ant-steps-item-active::before {\n left: 0;\n width: 100%;\n}\n.ant-steps-navigation.ant-steps-vertical > .ant-steps-item {\n margin-right: 0 !important;\n}\n.ant-steps-navigation.ant-steps-vertical > .ant-steps-item::before {\n display: none;\n}\n.ant-steps-navigation.ant-steps-vertical > .ant-steps-item.ant-steps-item-active::before {\n top: 0;\n right: 0;\n left: unset;\n display: block;\n width: 3px;\n height: calc(100% - 24px);\n}\n.ant-steps-navigation.ant-steps-vertical > .ant-steps-item::after {\n position: relative;\n top: -2px;\n left: 50%;\n display: block;\n width: 8px;\n height: 8px;\n margin-bottom: 8px;\n text-align: center;\n transform: rotate(135deg);\n}\n.ant-steps-navigation.ant-steps-vertical > .ant-steps-item > .ant-steps-item-container > .ant-steps-item-tail {\n visibility: hidden;\n}\n.ant-steps-navigation.ant-steps-horizontal > .ant-steps-item > .ant-steps-item-container > .ant-steps-item-tail {\n visibility: hidden;\n}\n.ant-steps-rtl {\n direction: rtl;\n}\n.ant-steps.ant-steps-rtl .ant-steps-item-icon {\n margin-right: 0;\n margin-left: 8px;\n}\n.ant-steps-rtl .ant-steps-item-tail {\n right: 0;\n left: auto;\n}\n.ant-steps-rtl .ant-steps-item-title {\n padding-right: 0;\n padding-left: 16px;\n}\n.ant-steps-rtl .ant-steps-item-title .ant-steps-item-subtitle {\n float: left;\n margin-right: 8px;\n margin-left: 0;\n}\n.ant-steps-rtl .ant-steps-item-title::after {\n right: 100%;\n left: auto;\n}\n.ant-steps-rtl.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item {\n padding-right: 16px;\n padding-left: 0;\n}\n.ant-steps-rtl.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item:first-child {\n padding-right: 0;\n}\n.ant-steps-rtl.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item:last-child .ant-steps-item-title {\n padding-left: 0;\n}\n.ant-steps-rtl .ant-steps-item-custom .ant-steps-item-icon > .ant-steps-icon {\n right: 0.5px;\n left: auto;\n}\n.ant-steps-rtl.ant-steps-navigation.ant-steps-small .ant-steps-item-container {\n margin-right: -12px;\n margin-left: 0;\n}\n.ant-steps-rtl.ant-steps-navigation .ant-steps-item-container {\n margin-right: -16px;\n margin-left: 0;\n text-align: right;\n}\n.ant-steps-rtl.ant-steps-navigation .ant-steps-item-container .ant-steps-item-title {\n padding-left: 0;\n}\n.ant-steps-rtl.ant-steps-navigation .ant-steps-item::after {\n right: 100%;\n left: auto;\n margin-right: -2px;\n margin-left: 0;\n transform: rotate(225deg);\n}\n.ant-steps-rtl.ant-steps-small.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item {\n padding-right: 12px;\n padding-left: 0;\n}\n.ant-steps-rtl.ant-steps-small.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item:first-child {\n padding-right: 0;\n}\n.ant-steps-rtl.ant-steps-small .ant-steps-item-title {\n padding-right: 0;\n padding-left: 12px;\n}\n.ant-steps-rtl.ant-steps-vertical > .ant-steps-item .ant-steps-item-icon {\n float: right;\n margin-right: 0;\n margin-left: 16px;\n}\n.ant-steps-rtl.ant-steps-vertical > .ant-steps-item > .ant-steps-item-container > .ant-steps-item-tail {\n right: 16px;\n left: auto;\n}\n.ant-steps-rtl.ant-steps-vertical.ant-steps-small .ant-steps-item-container .ant-steps-item-tail {\n right: 12px;\n left: auto;\n}\n.ant-steps-rtl.ant-steps-label-vertical .ant-steps-item-title {\n padding-left: 0;\n}\n.ant-steps-rtl.ant-steps-dot .ant-steps-item-tail,\n.ant-steps-rtl.ant-steps-dot.ant-steps-small .ant-steps-item-tail {\n margin: 0 70px 0 0;\n}\n.ant-steps-rtl.ant-steps-dot .ant-steps-item-tail::after,\n.ant-steps-rtl.ant-steps-dot.ant-steps-small .ant-steps-item-tail::after {\n margin-right: 12px;\n margin-left: 0;\n}\n.ant-steps-rtl.ant-steps-dot .ant-steps-item:first-child .ant-steps-icon-dot,\n.ant-steps-rtl.ant-steps-dot.ant-steps-small .ant-steps-item:first-child .ant-steps-icon-dot {\n right: 2px;\n left: auto;\n}\n.ant-steps-rtl.ant-steps-dot .ant-steps-item-icon,\n.ant-steps-rtl.ant-steps-dot.ant-steps-small .ant-steps-item-icon {\n margin-right: 67px;\n margin-left: 0;\n}\n.ant-steps-dot .ant-steps-item-icon .ant-steps-icon-dot,\n.ant-steps-dot.ant-steps-small .ant-steps-item-icon .ant-steps-icon-dot {\n /* expand hover area */\n}\n.ant-steps-rtl.ant-steps-dot .ant-steps-item-icon .ant-steps-icon-dot,\n.ant-steps-rtl.ant-steps-dot.ant-steps-small .ant-steps-item-icon .ant-steps-icon-dot {\n float: right;\n}\n.ant-steps-rtl.ant-steps-dot .ant-steps-item-icon .ant-steps-icon-dot::after,\n.ant-steps-rtl.ant-steps-dot.ant-steps-small .ant-steps-item-icon .ant-steps-icon-dot::after {\n right: -26px;\n left: auto;\n}\n.ant-steps-rtl.ant-steps-vertical.ant-steps-dot .ant-steps-item-icon {\n margin-right: 0;\n margin-left: 16px;\n}\n.ant-steps-rtl.ant-steps-vertical.ant-steps-dot .ant-steps-item > .ant-steps-item-container > .ant-steps-item-tail {\n right: -9px;\n left: auto;\n}\n.ant-steps-rtl.ant-steps-vertical.ant-steps-dot .ant-steps-item:first-child .ant-steps-icon-dot {\n right: 0;\n left: auto;\n}\n.ant-steps-rtl.ant-steps-vertical.ant-steps-dot .ant-steps-item-process .ant-steps-icon-dot {\n right: -2px;\n left: auto;\n}\n.ant-steps-rtl.ant-steps-with-progress.ant-steps-horizontal.ant-steps-label-horizontal .ant-steps-item:first-child {\n padding-right: 4px;\n padding-left: 0;\n}\n.ant-steps-rtl.ant-steps-with-progress.ant-steps-horizontal.ant-steps-label-horizontal .ant-steps-item:first-child.ant-steps-item-active {\n padding-right: 4px;\n}\n.ant-steps-with-progress .ant-steps-item {\n padding-top: 4px;\n}\n.ant-steps-with-progress .ant-steps-item .ant-steps-item-tail {\n top: 4px !important;\n}\n.ant-steps-with-progress.ant-steps-horizontal .ant-steps-item:first-child {\n padding-bottom: 4px;\n padding-left: 4px;\n}\n.ant-steps-with-progress.ant-steps-label-vertical .ant-steps-item .ant-steps-item-tail {\n top: 14px !important;\n}\n.ant-steps-with-progress .ant-steps-item-icon {\n position: relative;\n}\n.ant-steps-with-progress .ant-steps-item-icon .ant-progress {\n position: absolute;\n top: -5px;\n right: -5px;\n bottom: -5px;\n left: -5px;\n}\n.ant-switch {\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n display: inline-block;\n box-sizing: border-box;\n min-width: 44px;\n height: 22px;\n line-height: 22px;\n vertical-align: middle;\n background-color: rgba(0, 0, 0, 0.25);\n border: 0;\n border-radius: 100px;\n cursor: pointer;\n transition: all 0.2s;\n user-select: none;\n}\n.ant-switch:focus {\n outline: 0;\n box-shadow: 0 0 0 2px rgba(0, 0, 0, 0.1);\n}\n.ant-switch-checked:focus {\n box-shadow: 0 0 0 2px #f0f2ff;\n}\n.ant-switch:focus:hover {\n box-shadow: none;\n}\n.ant-switch-checked {\n background-color: #5b5ce1;\n}\n.ant-switch-loading,\n.ant-switch-disabled {\n cursor: not-allowed;\n opacity: 0.4;\n}\n.ant-switch-loading *,\n.ant-switch-disabled * {\n box-shadow: none;\n cursor: not-allowed;\n}\n.ant-switch-inner {\n display: block;\n margin: 0 7px 0 25px;\n color: #fff;\n font-size: 12px;\n transition: margin 0.2s;\n}\n.ant-switch-checked .ant-switch-inner {\n margin: 0 25px 0 7px;\n}\n.ant-switch-handle {\n position: absolute;\n top: 2px;\n left: 2px;\n width: 18px;\n height: 18px;\n transition: all 0.2s ease-in-out;\n}\n.ant-switch-handle::before {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background-color: #fff;\n border-radius: 9px;\n box-shadow: 0 2px 4px 0 rgba(0, 35, 11, 0.2);\n transition: all 0.2s ease-in-out;\n content: '';\n}\n.ant-switch-checked .ant-switch-handle {\n left: calc(100% - 18px - 2px);\n}\n.ant-switch:not(.ant-switch-disabled):active .ant-switch-handle::before {\n right: -30%;\n left: 0;\n}\n.ant-switch:not(.ant-switch-disabled):active.ant-switch-checked .ant-switch-handle::before {\n right: 0;\n left: -30%;\n}\n.ant-switch-loading-icon.anticon {\n position: relative;\n top: 2px;\n color: rgba(0, 0, 0, 0.65);\n vertical-align: top;\n}\n.ant-switch-checked .ant-switch-loading-icon {\n color: #5b5ce1;\n}\n.ant-switch-small {\n min-width: 28px;\n height: 16px;\n line-height: 16px;\n}\n.ant-switch-small .ant-switch-inner {\n margin: 0 5px 0 18px;\n font-size: 12px;\n}\n.ant-switch-small .ant-switch-handle {\n width: 12px;\n height: 12px;\n}\n.ant-switch-small .ant-switch-loading-icon {\n top: 1.5px;\n font-size: 9px;\n}\n.ant-switch-small.ant-switch-checked .ant-switch-inner {\n margin: 0 18px 0 5px;\n}\n.ant-switch-small.ant-switch-checked .ant-switch-handle {\n left: calc(100% - 12px - 2px);\n}\n.ant-switch-rtl {\n direction: rtl;\n}\n.ant-switch-rtl .ant-switch-inner {\n margin: 0 25px 0 7px;\n}\n.ant-switch-rtl .ant-switch-handle {\n right: 2px;\n left: auto;\n}\n.ant-switch-rtl:not(.ant-switch-rtl-disabled):active .ant-switch-handle::before {\n right: 0;\n left: -30%;\n}\n.ant-switch-rtl:not(.ant-switch-rtl-disabled):active.ant-switch-checked .ant-switch-handle::before {\n right: -30%;\n left: 0;\n}\n.ant-switch-rtl.ant-switch-checked .ant-switch-inner {\n margin: 0 7px 0 25px;\n}\n.ant-switch-rtl.ant-switch-checked .ant-switch-handle {\n right: calc(100% - 18px - 2px);\n}\n.ant-switch-rtl.ant-switch-small.ant-switch-checked .ant-switch-handle {\n right: calc(100% - 12px - 2px);\n}\n.ant-table.ant-table-middle {\n font-size: 14px;\n}\n.ant-table.ant-table-middle .ant-table-title,\n.ant-table.ant-table-middle .ant-table-footer,\n.ant-table.ant-table-middle .ant-table-thead > tr > th,\n.ant-table.ant-table-middle .ant-table-tbody > tr > td,\n.ant-table.ant-table-middle tfoot > tr > th,\n.ant-table.ant-table-middle tfoot > tr > td {\n padding: 12px 8px;\n}\n.ant-table.ant-table-middle .ant-table-filter-trigger {\n margin-right: -4px;\n}\n.ant-table.ant-table-middle .ant-table-expanded-row-fixed {\n margin: -12px -8px;\n}\n.ant-table.ant-table-middle .ant-table-tbody .ant-table-wrapper:only-child .ant-table {\n margin: -12px -8px -12px 40px;\n}\n.ant-table.ant-table-middle .ant-table-selection-column {\n padding-inline-start: 2px;\n}\n.ant-table.ant-table-small {\n font-size: 14px;\n}\n.ant-table.ant-table-small .ant-table-title,\n.ant-table.ant-table-small .ant-table-footer,\n.ant-table.ant-table-small .ant-table-thead > tr > th,\n.ant-table.ant-table-small .ant-table-tbody > tr > td,\n.ant-table.ant-table-small tfoot > tr > th,\n.ant-table.ant-table-small tfoot > tr > td {\n padding: 8px 8px;\n}\n.ant-table.ant-table-small .ant-table-filter-trigger {\n margin-right: -4px;\n}\n.ant-table.ant-table-small .ant-table-expanded-row-fixed {\n margin: -8px -8px;\n}\n.ant-table.ant-table-small .ant-table-tbody .ant-table-wrapper:only-child .ant-table {\n margin: -8px -8px -8px 40px;\n}\n.ant-table.ant-table-small .ant-table-selection-column {\n padding-inline-start: 2px;\n}\n.ant-table.ant-table-bordered > .ant-table-title {\n border: 1px solid #f0f0f0;\n border-bottom: 0;\n}\n.ant-table.ant-table-bordered > .ant-table-container {\n border-left: 1px solid #f0f0f0;\n}\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-content > table > thead > tr > th,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-header > table > thead > tr > th,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-body > table > thead > tr > th,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-summary > table > thead > tr > th,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-content > table > tbody > tr > td,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-header > table > tbody > tr > td,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-body > table > tbody > tr > td,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-summary > table > tbody > tr > td,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-content > table > tfoot > tr > th,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-header > table > tfoot > tr > th,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-body > table > tfoot > tr > th,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-summary > table > tfoot > tr > th,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-content > table > tfoot > tr > td,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-header > table > tfoot > tr > td,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-body > table > tfoot > tr > td,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-summary > table > tfoot > tr > td {\n border-right: 1px solid #f0f0f0;\n}\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-content > table > thead > tr:not(:last-child) > th,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-header > table > thead > tr:not(:last-child) > th,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-body > table > thead > tr:not(:last-child) > th,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-summary > table > thead > tr:not(:last-child) > th {\n border-bottom: 1px solid #f0f0f0;\n}\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-content > table > thead > tr > th::before,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-header > table > thead > tr > th::before,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-body > table > thead > tr > th::before,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-summary > table > thead > tr > th::before {\n background-color: transparent !important;\n}\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-content > table > thead > tr > .ant-table-cell-fix-right-first::after,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-header > table > thead > tr > .ant-table-cell-fix-right-first::after,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-body > table > thead > tr > .ant-table-cell-fix-right-first::after,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-summary > table > thead > tr > .ant-table-cell-fix-right-first::after,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-content > table > tbody > tr > .ant-table-cell-fix-right-first::after,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-header > table > tbody > tr > .ant-table-cell-fix-right-first::after,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-body > table > tbody > tr > .ant-table-cell-fix-right-first::after,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-summary > table > tbody > tr > .ant-table-cell-fix-right-first::after,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-content > table > tfoot > tr > .ant-table-cell-fix-right-first::after,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-header > table > tfoot > tr > .ant-table-cell-fix-right-first::after,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-body > table > tfoot > tr > .ant-table-cell-fix-right-first::after,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-summary > table > tfoot > tr > .ant-table-cell-fix-right-first::after {\n border-right: 1px solid #f0f0f0;\n}\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-content > table > tbody > tr > td > .ant-table-expanded-row-fixed,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-header > table > tbody > tr > td > .ant-table-expanded-row-fixed,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-body > table > tbody > tr > td > .ant-table-expanded-row-fixed,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-summary > table > tbody > tr > td > .ant-table-expanded-row-fixed {\n margin: -16px -17px;\n}\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-content > table > tbody > tr > td > .ant-table-expanded-row-fixed::after,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-header > table > tbody > tr > td > .ant-table-expanded-row-fixed::after,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-body > table > tbody > tr > td > .ant-table-expanded-row-fixed::after,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-summary > table > tbody > tr > td > .ant-table-expanded-row-fixed::after {\n position: absolute;\n top: 0;\n right: 1px;\n bottom: 0;\n border-right: 1px solid #f0f0f0;\n content: '';\n}\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-content > table,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-header > table {\n border-top: 1px solid #f0f0f0;\n}\n.ant-table.ant-table-bordered.ant-table-scroll-horizontal > .ant-table-container > .ant-table-body > table > tbody > tr.ant-table-expanded-row > td,\n.ant-table.ant-table-bordered.ant-table-scroll-horizontal > .ant-table-container > .ant-table-body > table > tbody > tr.ant-table-placeholder > td {\n border-right: 0;\n}\n.ant-table.ant-table-bordered.ant-table-middle > .ant-table-container > .ant-table-content > table > tbody > tr > td > .ant-table-expanded-row-fixed,\n.ant-table.ant-table-bordered.ant-table-middle > .ant-table-container > .ant-table-body > table > tbody > tr > td > .ant-table-expanded-row-fixed {\n margin: -12px -9px;\n}\n.ant-table.ant-table-bordered.ant-table-small > .ant-table-container > .ant-table-content > table > tbody > tr > td > .ant-table-expanded-row-fixed,\n.ant-table.ant-table-bordered.ant-table-small > .ant-table-container > .ant-table-body > table > tbody > tr > td > .ant-table-expanded-row-fixed {\n margin: -8px -9px;\n}\n.ant-table.ant-table-bordered > .ant-table-footer {\n border: 1px solid #f0f0f0;\n border-top: 0;\n}\n.ant-table-cell .ant-table-container:first-child {\n border-top: 0;\n}\n.ant-table-cell-scrollbar:not([rowspan]) {\n box-shadow: 0 1px 0 1px #fafafa;\n}\n.ant-table-wrapper {\n clear: both;\n max-width: 100%;\n}\n.ant-table-wrapper::before {\n display: table;\n content: '';\n}\n.ant-table-wrapper::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-table-wrapper::before {\n display: table;\n content: '';\n}\n.ant-table-wrapper::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-table {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n font-size: 14px;\n background: #fff;\n border-radius: 5px;\n}\n.ant-table table {\n width: 100%;\n text-align: left;\n border-radius: 5px 5px 0 0;\n border-collapse: separate;\n border-spacing: 0;\n}\n.ant-table-thead > tr > th,\n.ant-table-tbody > tr > td,\n.ant-table tfoot > tr > th,\n.ant-table tfoot > tr > td {\n position: relative;\n padding: 16px 16px;\n overflow-wrap: break-word;\n}\n.ant-table-cell-ellipsis {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n word-break: keep-all;\n}\n.ant-table-cell-ellipsis.ant-table-cell-fix-left-last,\n.ant-table-cell-ellipsis.ant-table-cell-fix-right-first {\n overflow: visible;\n}\n.ant-table-cell-ellipsis.ant-table-cell-fix-left-last .ant-table-cell-content,\n.ant-table-cell-ellipsis.ant-table-cell-fix-right-first .ant-table-cell-content {\n display: block;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.ant-table-cell-ellipsis .ant-table-column-title {\n overflow: hidden;\n text-overflow: ellipsis;\n word-break: keep-all;\n}\n.ant-table-title {\n padding: 16px 16px;\n}\n.ant-table-footer {\n padding: 16px 16px;\n color: rgba(0, 0, 0, 0.85);\n background: #fafafa;\n}\n.ant-table-thead > tr > th {\n position: relative;\n color: rgba(0, 0, 0, 0.85);\n font-weight: 500;\n text-align: left;\n background: #fafafa;\n border-bottom: 1px solid #f0f0f0;\n transition: background 0.3s ease;\n}\n.ant-table-thead > tr > th[colspan]:not([colspan='1']) {\n text-align: center;\n}\n.ant-table-thead > tr > th:not(:last-child):not(.ant-table-selection-column):not(.ant-table-row-expand-icon-cell):not([colspan])::before {\n position: absolute;\n top: 50%;\n right: 0;\n width: 1px;\n height: 1.6em;\n background-color: rgba(0, 0, 0, 0.06);\n transform: translateY(-50%);\n transition: background-color 0.3s;\n content: '';\n}\n.ant-table-thead > tr:not(:last-child) > th[colspan] {\n border-bottom: 0;\n}\n.ant-table-tbody > tr > td {\n border-bottom: 1px solid #f0f0f0;\n transition: background 0.3s;\n}\n.ant-table-tbody > tr > td > .ant-table-wrapper:only-child .ant-table,\n.ant-table-tbody > tr > td > .ant-table-expanded-row-fixed > .ant-table-wrapper:only-child .ant-table {\n margin: -16px -16px -16px 32px;\n}\n.ant-table-tbody > tr > td > .ant-table-wrapper:only-child .ant-table-tbody > tr:last-child > td,\n.ant-table-tbody > tr > td > .ant-table-expanded-row-fixed > .ant-table-wrapper:only-child .ant-table-tbody > tr:last-child > td {\n border-bottom: 0;\n}\n.ant-table-tbody > tr > td > .ant-table-wrapper:only-child .ant-table-tbody > tr:last-child > td:first-child,\n.ant-table-tbody > tr > td > .ant-table-expanded-row-fixed > .ant-table-wrapper:only-child .ant-table-tbody > tr:last-child > td:first-child,\n.ant-table-tbody > tr > td > .ant-table-wrapper:only-child .ant-table-tbody > tr:last-child > td:last-child,\n.ant-table-tbody > tr > td > .ant-table-expanded-row-fixed > .ant-table-wrapper:only-child .ant-table-tbody > tr:last-child > td:last-child {\n border-radius: 0;\n}\n.ant-table-tbody > tr.ant-table-row:hover > td,\n.ant-table-tbody > tr > td.ant-table-cell-row-hover {\n background: #fafafa;\n}\n.ant-table-tbody > tr.ant-table-row-selected > td {\n background: #f0f2ff;\n border-color: rgba(0, 0, 0, 0.03);\n}\n.ant-table-tbody > tr.ant-table-row-selected:hover > td {\n background: #e6e9ff;\n}\n.ant-table-summary {\n position: relative;\n z-index: 2;\n background: #fff;\n}\ndiv.ant-table-summary {\n box-shadow: 0 -1px 0 #f0f0f0;\n}\n.ant-table-summary > tr > th,\n.ant-table-summary > tr > td {\n border-bottom: 1px solid #f0f0f0;\n}\n.ant-table-pagination.ant-pagination {\n margin: 16px 0;\n}\n.ant-table-pagination {\n display: flex;\n flex-wrap: wrap;\n row-gap: 8px;\n}\n.ant-table-pagination > * {\n flex: none;\n}\n.ant-table-pagination-left {\n justify-content: flex-start;\n}\n.ant-table-pagination-center {\n justify-content: center;\n}\n.ant-table-pagination-right {\n justify-content: flex-end;\n}\n.ant-table-thead th.ant-table-column-has-sorters {\n outline: none;\n cursor: pointer;\n transition: all 0.3s;\n}\n.ant-table-thead th.ant-table-column-has-sorters:hover {\n background: rgba(0, 0, 0, 0.04);\n}\n.ant-table-thead th.ant-table-column-has-sorters:hover::before {\n background-color: transparent !important;\n}\n.ant-table-thead th.ant-table-column-has-sorters:focus-visible {\n color: #5b5ce1;\n}\n.ant-table-thead th.ant-table-column-has-sorters.ant-table-cell-fix-left:hover,\n.ant-table-thead th.ant-table-column-has-sorters.ant-table-cell-fix-right:hover {\n background: #f5f5f5;\n}\n.ant-table-thead th.ant-table-column-sort {\n background: #f5f5f5;\n}\n.ant-table-thead th.ant-table-column-sort::before {\n background-color: transparent !important;\n}\ntd.ant-table-column-sort {\n background: #fafafa;\n}\n.ant-table-column-title {\n position: relative;\n z-index: 1;\n flex: 1;\n}\n.ant-table-column-sorters {\n display: flex;\n flex: auto;\n align-items: center;\n justify-content: space-between;\n}\n.ant-table-column-sorters::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 100%;\n content: '';\n}\n.ant-table-column-sorter {\n margin-left: 4px;\n color: #bfbfbf;\n font-size: 0;\n transition: color 0.3s;\n}\n.ant-table-column-sorter-inner {\n display: inline-flex;\n flex-direction: column;\n align-items: center;\n}\n.ant-table-column-sorter-up,\n.ant-table-column-sorter-down {\n font-size: 11px;\n}\n.ant-table-column-sorter-up.active,\n.ant-table-column-sorter-down.active {\n color: #5b5ce1;\n}\n.ant-table-column-sorter-up + .ant-table-column-sorter-down {\n margin-top: -0.3em;\n}\n.ant-table-column-sorters:hover .ant-table-column-sorter {\n color: #a6a6a6;\n}\n.ant-table-filter-column {\n display: flex;\n justify-content: space-between;\n}\n.ant-table-filter-trigger {\n position: relative;\n display: flex;\n align-items: center;\n margin: -4px -8px -4px 4px;\n padding: 0 4px;\n color: #bfbfbf;\n font-size: 12px;\n border-radius: 5px;\n cursor: pointer;\n transition: all 0.3s;\n}\n.ant-table-filter-trigger:hover {\n color: rgba(0, 0, 0, 0.45);\n background: rgba(0, 0, 0, 0.04);\n}\n.ant-table-filter-trigger.active {\n color: #5b5ce1;\n}\n.ant-table-filter-dropdown {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n min-width: 120px;\n background-color: #fff;\n border-radius: 5px;\n box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05);\n}\n.ant-table-filter-dropdown .ant-dropdown-menu {\n max-height: 264px;\n overflow-x: hidden;\n border: 0;\n box-shadow: none;\n}\n.ant-table-filter-dropdown .ant-dropdown-menu:empty::after {\n display: block;\n padding: 8px 0;\n color: rgba(0, 0, 0, 0.25);\n font-size: 12px;\n text-align: center;\n content: 'Not Found';\n}\n.ant-table-filter-dropdown-tree {\n padding: 8px 8px 0;\n}\n.ant-table-filter-dropdown-tree .ant-tree-treenode .ant-tree-node-content-wrapper:hover {\n background-color: #f5f5f5;\n}\n.ant-table-filter-dropdown-tree .ant-tree-treenode-checkbox-checked .ant-tree-node-content-wrapper,\n.ant-table-filter-dropdown-tree .ant-tree-treenode-checkbox-checked .ant-tree-node-content-wrapper:hover {\n background-color: #f0f2ff;\n}\n.ant-table-filter-dropdown-search {\n padding: 8px;\n border-bottom: 1px #f0f0f0 solid;\n}\n.ant-table-filter-dropdown-search-input input {\n min-width: 140px;\n}\n.ant-table-filter-dropdown-search-input .anticon {\n color: rgba(0, 0, 0, 0.25);\n}\n.ant-table-filter-dropdown-checkall {\n width: 100%;\n margin-bottom: 4px;\n margin-left: 4px;\n}\n.ant-table-filter-dropdown-submenu > ul {\n max-height: calc(100vh - 130px);\n overflow-x: hidden;\n overflow-y: auto;\n}\n.ant-table-filter-dropdown .ant-checkbox-wrapper + span,\n.ant-table-filter-dropdown-submenu .ant-checkbox-wrapper + span {\n padding-left: 8px;\n}\n.ant-table-filter-dropdown-btns {\n display: flex;\n justify-content: space-between;\n padding: 7px 8px;\n overflow: hidden;\n background-color: inherit;\n border-top: 1px solid #f0f0f0;\n}\n.ant-table-selection-col {\n width: 32px;\n}\n.ant-table-bordered .ant-table-selection-col {\n width: 50px;\n}\ntable tr th.ant-table-selection-column,\ntable tr td.ant-table-selection-column {\n padding-right: 8px;\n padding-left: 8px;\n text-align: center;\n}\ntable tr th.ant-table-selection-column .ant-radio-wrapper,\ntable tr td.ant-table-selection-column .ant-radio-wrapper {\n margin-right: 0;\n}\ntable tr th.ant-table-selection-column.ant-table-cell-fix-left {\n z-index: 3;\n}\ntable tr th.ant-table-selection-column::after {\n background-color: transparent !important;\n}\n.ant-table-selection {\n position: relative;\n display: inline-flex;\n flex-direction: column;\n}\n.ant-table-selection-extra {\n position: absolute;\n top: 0;\n z-index: 1;\n cursor: pointer;\n transition: all 0.3s;\n margin-inline-start: 100%;\n padding-inline-start: 4px;\n}\n.ant-table-selection-extra .anticon {\n color: #bfbfbf;\n font-size: 10px;\n}\n.ant-table-selection-extra .anticon:hover {\n color: #a6a6a6;\n}\n.ant-table-expand-icon-col {\n width: 48px;\n}\n.ant-table-row-expand-icon-cell {\n text-align: center;\n}\n.ant-table-row-expand-icon-cell .ant-table-row-expand-icon {\n display: inline-flex;\n float: none;\n vertical-align: sub;\n}\n.ant-table-row-indent {\n float: left;\n height: 1px;\n}\n.ant-table-row-expand-icon {\n color: #5b5ce1;\n outline: none;\n cursor: pointer;\n transition: color 0.3s;\n position: relative;\n float: left;\n box-sizing: border-box;\n width: 17px;\n height: 17px;\n padding: 0;\n color: inherit;\n line-height: 17px;\n background: #fff;\n border: 1px solid #f0f0f0;\n border-radius: 5px;\n transform: scale(0.94117647);\n transition: all 0.3s;\n user-select: none;\n}\n.ant-table-row-expand-icon:focus-visible,\n.ant-table-row-expand-icon:hover {\n color: #8588ed;\n}\n.ant-table-row-expand-icon:active {\n color: #4541ba;\n}\n.ant-table-row-expand-icon:focus,\n.ant-table-row-expand-icon:hover,\n.ant-table-row-expand-icon:active {\n border-color: currentcolor;\n}\n.ant-table-row-expand-icon::before,\n.ant-table-row-expand-icon::after {\n position: absolute;\n background: currentcolor;\n transition: transform 0.3s ease-out;\n content: '';\n}\n.ant-table-row-expand-icon::before {\n top: 7px;\n right: 3px;\n left: 3px;\n height: 1px;\n}\n.ant-table-row-expand-icon::after {\n top: 3px;\n bottom: 3px;\n left: 7px;\n width: 1px;\n transform: rotate(90deg);\n}\n.ant-table-row-expand-icon-collapsed::before {\n transform: rotate(-180deg);\n}\n.ant-table-row-expand-icon-collapsed::after {\n transform: rotate(0deg);\n}\n.ant-table-row-expand-icon-spaced {\n background: transparent;\n border: 0;\n visibility: hidden;\n}\n.ant-table-row-expand-icon-spaced::before,\n.ant-table-row-expand-icon-spaced::after {\n display: none;\n content: none;\n}\n.ant-table-row-indent + .ant-table-row-expand-icon {\n margin-top: 2.5005px;\n margin-right: 8px;\n}\ntr.ant-table-expanded-row > td,\ntr.ant-table-expanded-row:hover > td {\n background: #fbfbfb;\n}\ntr.ant-table-expanded-row .ant-descriptions-view {\n display: flex;\n}\ntr.ant-table-expanded-row .ant-descriptions-view table {\n flex: auto;\n width: auto;\n}\n.ant-table .ant-table-expanded-row-fixed {\n position: relative;\n margin: -16px -16px;\n padding: 16px 16px;\n}\n.ant-table-tbody > tr.ant-table-placeholder {\n text-align: center;\n}\n.ant-table-empty .ant-table-tbody > tr.ant-table-placeholder {\n color: rgba(0, 0, 0, 0.25);\n}\n.ant-table-tbody > tr.ant-table-placeholder:hover > td {\n background: #fff;\n}\n.ant-table-cell-fix-left,\n.ant-table-cell-fix-right {\n position: sticky !important;\n z-index: 2;\n background: #fff;\n}\n.ant-table-cell-fix-left-first::after,\n.ant-table-cell-fix-left-last::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: -1px;\n width: 30px;\n transform: translateX(100%);\n transition: box-shadow 0.3s;\n content: '';\n pointer-events: none;\n}\n.ant-table-cell-fix-left-all::after {\n display: none;\n}\n.ant-table-cell-fix-right-first::after,\n.ant-table-cell-fix-right-last::after {\n position: absolute;\n top: 0;\n bottom: -1px;\n left: 0;\n width: 30px;\n transform: translateX(-100%);\n transition: box-shadow 0.3s;\n content: '';\n pointer-events: none;\n}\n.ant-table .ant-table-container::before,\n.ant-table .ant-table-container::after {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: calc(calc(2 + 1) + 1);\n width: 30px;\n transition: box-shadow 0.3s;\n content: '';\n pointer-events: none;\n}\n.ant-table .ant-table-container::before {\n left: 0;\n}\n.ant-table .ant-table-container::after {\n right: 0;\n}\n.ant-table-ping-left:not(.ant-table-has-fix-left) > .ant-table-container {\n position: relative;\n}\n.ant-table-ping-left:not(.ant-table-has-fix-left) > .ant-table-container::before {\n box-shadow: inset 10px 0 8px -8px rgba(0, 0, 0, 0.15);\n}\n.ant-table-ping-left .ant-table-cell-fix-left-first::after,\n.ant-table-ping-left .ant-table-cell-fix-left-last::after {\n box-shadow: inset 10px 0 8px -8px rgba(0, 0, 0, 0.15);\n}\n.ant-table-ping-left .ant-table-cell-fix-left-last::before {\n background-color: transparent !important;\n}\n.ant-table-ping-right:not(.ant-table-has-fix-right) > .ant-table-container {\n position: relative;\n}\n.ant-table-ping-right:not(.ant-table-has-fix-right) > .ant-table-container::after {\n box-shadow: inset -10px 0 8px -8px rgba(0, 0, 0, 0.15);\n}\n.ant-table-ping-right .ant-table-cell-fix-right-first::after,\n.ant-table-ping-right .ant-table-cell-fix-right-last::after {\n box-shadow: inset -10px 0 8px -8px rgba(0, 0, 0, 0.15);\n}\n.ant-table-sticky-holder {\n position: sticky;\n z-index: calc(2 + 1);\n background: #fff;\n}\n.ant-table-sticky-scroll {\n position: sticky;\n bottom: 0;\n z-index: calc(2 + 1);\n display: flex;\n align-items: center;\n background: #ffffff;\n border-top: 1px solid #f0f0f0;\n opacity: 0.6;\n}\n.ant-table-sticky-scroll:hover {\n transform-origin: center bottom;\n}\n.ant-table-sticky-scroll-bar {\n height: 8px;\n background-color: rgba(0, 0, 0, 0.35);\n border-radius: 4px;\n}\n.ant-table-sticky-scroll-bar:hover {\n background-color: rgba(0, 0, 0, 0.8);\n}\n.ant-table-sticky-scroll-bar-active {\n background-color: rgba(0, 0, 0, 0.8);\n}\n@media all and (-ms-high-contrast: none) {\n .ant-table-ping-left .ant-table-cell-fix-left-last::after {\n box-shadow: none !important;\n }\n .ant-table-ping-right .ant-table-cell-fix-right-first::after {\n box-shadow: none !important;\n }\n}\n.ant-table {\n /* title + table */\n /* table */\n /* table + footer */\n}\n.ant-table-title {\n border-radius: 5px 5px 0 0;\n}\n.ant-table-title + .ant-table-container {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n.ant-table-title + .ant-table-container table {\n border-radius: 0;\n}\n.ant-table-title + .ant-table-container table > thead > tr:first-child th:first-child {\n border-radius: 0;\n}\n.ant-table-title + .ant-table-container table > thead > tr:first-child th:last-child {\n border-radius: 0;\n}\n.ant-table-container {\n border-top-left-radius: 5px;\n border-top-right-radius: 5px;\n}\n.ant-table-container table > thead > tr:first-child th:first-child {\n border-top-left-radius: 5px;\n}\n.ant-table-container table > thead > tr:first-child th:last-child {\n border-top-right-radius: 5px;\n}\n.ant-table-footer {\n border-radius: 0 0 5px 5px;\n}\n.ant-table-wrapper-rtl {\n direction: rtl;\n}\n.ant-table-rtl {\n direction: rtl;\n}\n.ant-table-wrapper-rtl .ant-table table {\n text-align: right;\n}\n.ant-table-wrapper-rtl .ant-table-thead > tr > th[colspan]:not([colspan='1']) {\n text-align: center;\n}\n.ant-table-wrapper-rtl .ant-table-thead > tr > th:not(:last-child):not(.ant-table-selection-column):not(.ant-table-row-expand-icon-cell):not([colspan])::before {\n right: auto;\n left: 0;\n}\n.ant-table-wrapper-rtl .ant-table-thead > tr > th {\n text-align: right;\n}\n.ant-table-tbody > tr .ant-table-wrapper:only-child .ant-table.ant-table-rtl {\n margin: -16px 33px -16px -16px;\n}\n.ant-table-wrapper.ant-table-wrapper-rtl .ant-table-pagination-left {\n justify-content: flex-end;\n}\n.ant-table-wrapper.ant-table-wrapper-rtl .ant-table-pagination-right {\n justify-content: flex-start;\n}\n.ant-table-wrapper-rtl .ant-table-column-sorter {\n margin-right: 4px;\n margin-left: 0;\n}\n.ant-table-wrapper-rtl .ant-table-filter-column-title {\n padding: 16px 16px 16px 2.3em;\n}\n.ant-table-rtl .ant-table-thead tr th.ant-table-column-has-sorters .ant-table-filter-column-title {\n padding: 0 0 0 2.3em;\n}\n.ant-table-wrapper-rtl .ant-table-filter-trigger {\n margin: -4px 4px -4px -8px;\n}\n.ant-dropdown-rtl .ant-table-filter-dropdown .ant-checkbox-wrapper + span,\n.ant-dropdown-rtl .ant-table-filter-dropdown-submenu .ant-checkbox-wrapper + span,\n.ant-dropdown-menu-submenu-rtl.ant-table-filter-dropdown .ant-checkbox-wrapper + span,\n.ant-dropdown-menu-submenu-rtl.ant-table-filter-dropdown-submenu .ant-checkbox-wrapper + span {\n padding-right: 8px;\n padding-left: 0;\n}\n.ant-table-wrapper-rtl .ant-table-selection {\n text-align: center;\n}\n.ant-table-wrapper-rtl .ant-table-row-indent {\n float: right;\n}\n.ant-table-wrapper-rtl .ant-table-row-expand-icon {\n float: right;\n}\n.ant-table-wrapper-rtl .ant-table-row-indent + .ant-table-row-expand-icon {\n margin-right: 0;\n margin-left: 8px;\n}\n.ant-table-wrapper-rtl .ant-table-row-expand-icon::after {\n transform: rotate(-90deg);\n}\n.ant-table-wrapper-rtl .ant-table-row-expand-icon-collapsed::before {\n transform: rotate(180deg);\n}\n.ant-table-wrapper-rtl .ant-table-row-expand-icon-collapsed::after {\n transform: rotate(0deg);\n}\n.ant-tabs-small > .ant-tabs-nav .ant-tabs-tab {\n padding: 8px 0;\n font-size: 14px;\n}\n.ant-tabs-large > .ant-tabs-nav .ant-tabs-tab {\n padding: 16px 0;\n font-size: 16px;\n}\n.ant-tabs-card.ant-tabs-small > .ant-tabs-nav .ant-tabs-tab {\n padding: 6px 16px;\n}\n.ant-tabs-card.ant-tabs-large > .ant-tabs-nav .ant-tabs-tab {\n padding: 7px 16px 6px;\n}\n.ant-tabs-rtl {\n direction: rtl;\n}\n.ant-tabs-rtl .ant-tabs-nav .ant-tabs-tab {\n margin: 0 0 0 32px;\n}\n.ant-tabs-rtl .ant-tabs-nav .ant-tabs-tab:last-of-type {\n margin-left: 0;\n}\n.ant-tabs-rtl .ant-tabs-nav .ant-tabs-tab .anticon {\n margin-right: 0;\n margin-left: 12px;\n}\n.ant-tabs-rtl .ant-tabs-nav .ant-tabs-tab .ant-tabs-tab-remove {\n margin-right: 8px;\n margin-left: -4px;\n}\n.ant-tabs-rtl .ant-tabs-nav .ant-tabs-tab .ant-tabs-tab-remove .anticon {\n margin: 0;\n}\n.ant-tabs-rtl.ant-tabs-left > .ant-tabs-nav {\n order: 1;\n}\n.ant-tabs-rtl.ant-tabs-left > .ant-tabs-content-holder {\n order: 0;\n}\n.ant-tabs-rtl.ant-tabs-right > .ant-tabs-nav {\n order: 0;\n}\n.ant-tabs-rtl.ant-tabs-right > .ant-tabs-content-holder {\n order: 1;\n}\n.ant-tabs-rtl.ant-tabs-card.ant-tabs-top > .ant-tabs-nav .ant-tabs-tab + .ant-tabs-tab,\n.ant-tabs-rtl.ant-tabs-card.ant-tabs-bottom > .ant-tabs-nav .ant-tabs-tab + .ant-tabs-tab,\n.ant-tabs-rtl.ant-tabs-card.ant-tabs-top > div > .ant-tabs-nav .ant-tabs-tab + .ant-tabs-tab,\n.ant-tabs-rtl.ant-tabs-card.ant-tabs-bottom > div > .ant-tabs-nav .ant-tabs-tab + .ant-tabs-tab {\n margin-right: 2px;\n margin-left: 0;\n}\n.ant-tabs-rtl.ant-tabs-card.ant-tabs-top > .ant-tabs-nav .ant-tabs-nav-add,\n.ant-tabs-rtl.ant-tabs-card.ant-tabs-bottom > .ant-tabs-nav .ant-tabs-nav-add,\n.ant-tabs-rtl.ant-tabs-card.ant-tabs-top > div > .ant-tabs-nav .ant-tabs-nav-add,\n.ant-tabs-rtl.ant-tabs-card.ant-tabs-bottom > div > .ant-tabs-nav .ant-tabs-nav-add {\n margin-right: 2px;\n margin-left: 0;\n}\n.ant-tabs-dropdown-rtl {\n direction: rtl;\n}\n.ant-tabs-dropdown-rtl .ant-tabs-dropdown-menu-item {\n text-align: right;\n}\n.ant-tabs-top,\n.ant-tabs-bottom {\n flex-direction: column;\n}\n.ant-tabs-top > .ant-tabs-nav,\n.ant-tabs-bottom > .ant-tabs-nav,\n.ant-tabs-top > div > .ant-tabs-nav,\n.ant-tabs-bottom > div > .ant-tabs-nav {\n margin: 0 0 16px 0;\n}\n.ant-tabs-top > .ant-tabs-nav::before,\n.ant-tabs-bottom > .ant-tabs-nav::before,\n.ant-tabs-top > div > .ant-tabs-nav::before,\n.ant-tabs-bottom > div > .ant-tabs-nav::before {\n position: absolute;\n right: 0;\n left: 0;\n border-bottom: 1px solid #f0f0f0;\n content: '';\n}\n.ant-tabs-top > .ant-tabs-nav .ant-tabs-ink-bar,\n.ant-tabs-bottom > .ant-tabs-nav .ant-tabs-ink-bar,\n.ant-tabs-top > div > .ant-tabs-nav .ant-tabs-ink-bar,\n.ant-tabs-bottom > div > .ant-tabs-nav .ant-tabs-ink-bar {\n height: 2px;\n}\n.ant-tabs-top > .ant-tabs-nav .ant-tabs-ink-bar-animated,\n.ant-tabs-bottom > .ant-tabs-nav .ant-tabs-ink-bar-animated,\n.ant-tabs-top > div > .ant-tabs-nav .ant-tabs-ink-bar-animated,\n.ant-tabs-bottom > div > .ant-tabs-nav .ant-tabs-ink-bar-animated {\n transition: width 0.3s, left 0.3s, right 0.3s;\n}\n.ant-tabs-top > .ant-tabs-nav .ant-tabs-nav-wrap::before,\n.ant-tabs-bottom > .ant-tabs-nav .ant-tabs-nav-wrap::before,\n.ant-tabs-top > div > .ant-tabs-nav .ant-tabs-nav-wrap::before,\n.ant-tabs-bottom > div > .ant-tabs-nav .ant-tabs-nav-wrap::before,\n.ant-tabs-top > .ant-tabs-nav .ant-tabs-nav-wrap::after,\n.ant-tabs-bottom > .ant-tabs-nav .ant-tabs-nav-wrap::after,\n.ant-tabs-top > div > .ant-tabs-nav .ant-tabs-nav-wrap::after,\n.ant-tabs-bottom > div > .ant-tabs-nav .ant-tabs-nav-wrap::after {\n top: 0;\n bottom: 0;\n width: 30px;\n}\n.ant-tabs-top > .ant-tabs-nav .ant-tabs-nav-wrap::before,\n.ant-tabs-bottom > .ant-tabs-nav .ant-tabs-nav-wrap::before,\n.ant-tabs-top > div > .ant-tabs-nav .ant-tabs-nav-wrap::before,\n.ant-tabs-bottom > div > .ant-tabs-nav .ant-tabs-nav-wrap::before {\n left: 0;\n box-shadow: inset 10px 0 8px -8px rgba(0, 0, 0, 0.08);\n}\n.ant-tabs-top > .ant-tabs-nav .ant-tabs-nav-wrap::after,\n.ant-tabs-bottom > .ant-tabs-nav .ant-tabs-nav-wrap::after,\n.ant-tabs-top > div > .ant-tabs-nav .ant-tabs-nav-wrap::after,\n.ant-tabs-bottom > div > .ant-tabs-nav .ant-tabs-nav-wrap::after {\n right: 0;\n box-shadow: inset -10px 0 8px -8px rgba(0, 0, 0, 0.08);\n}\n.ant-tabs-top > .ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-left::before,\n.ant-tabs-bottom > .ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-left::before,\n.ant-tabs-top > div > .ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-left::before,\n.ant-tabs-bottom > div > .ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-left::before {\n opacity: 1;\n}\n.ant-tabs-top > .ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-right::after,\n.ant-tabs-bottom > .ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-right::after,\n.ant-tabs-top > div > .ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-right::after,\n.ant-tabs-bottom > div > .ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-right::after {\n opacity: 1;\n}\n.ant-tabs-top > .ant-tabs-nav::before,\n.ant-tabs-top > div > .ant-tabs-nav::before {\n bottom: 0;\n}\n.ant-tabs-top > .ant-tabs-nav .ant-tabs-ink-bar,\n.ant-tabs-top > div > .ant-tabs-nav .ant-tabs-ink-bar {\n bottom: 0;\n}\n.ant-tabs-bottom > .ant-tabs-nav,\n.ant-tabs-bottom > div > .ant-tabs-nav {\n order: 1;\n margin-top: 16px;\n margin-bottom: 0;\n}\n.ant-tabs-bottom > .ant-tabs-nav::before,\n.ant-tabs-bottom > div > .ant-tabs-nav::before {\n top: 0;\n}\n.ant-tabs-bottom > .ant-tabs-nav .ant-tabs-ink-bar,\n.ant-tabs-bottom > div > .ant-tabs-nav .ant-tabs-ink-bar {\n top: 0;\n}\n.ant-tabs-bottom > .ant-tabs-content-holder,\n.ant-tabs-bottom > div > .ant-tabs-content-holder {\n order: 0;\n}\n.ant-tabs-left > .ant-tabs-nav,\n.ant-tabs-right > .ant-tabs-nav,\n.ant-tabs-left > div > .ant-tabs-nav,\n.ant-tabs-right > div > .ant-tabs-nav {\n flex-direction: column;\n min-width: 50px;\n}\n.ant-tabs-left > .ant-tabs-nav .ant-tabs-tab,\n.ant-tabs-right > .ant-tabs-nav .ant-tabs-tab,\n.ant-tabs-left > div > .ant-tabs-nav .ant-tabs-tab,\n.ant-tabs-right > div > .ant-tabs-nav .ant-tabs-tab {\n padding: 8px 24px;\n text-align: center;\n}\n.ant-tabs-left > .ant-tabs-nav .ant-tabs-tab + .ant-tabs-tab,\n.ant-tabs-right > .ant-tabs-nav .ant-tabs-tab + .ant-tabs-tab,\n.ant-tabs-left > div > .ant-tabs-nav .ant-tabs-tab + .ant-tabs-tab,\n.ant-tabs-right > div > .ant-tabs-nav .ant-tabs-tab + .ant-tabs-tab {\n margin: 16px 0 0 0;\n}\n.ant-tabs-left > .ant-tabs-nav .ant-tabs-nav-wrap,\n.ant-tabs-right > .ant-tabs-nav .ant-tabs-nav-wrap,\n.ant-tabs-left > div > .ant-tabs-nav .ant-tabs-nav-wrap,\n.ant-tabs-right > div > .ant-tabs-nav .ant-tabs-nav-wrap {\n flex-direction: column;\n}\n.ant-tabs-left > .ant-tabs-nav .ant-tabs-nav-wrap::before,\n.ant-tabs-right > .ant-tabs-nav .ant-tabs-nav-wrap::before,\n.ant-tabs-left > div > .ant-tabs-nav .ant-tabs-nav-wrap::before,\n.ant-tabs-right > div > .ant-tabs-nav .ant-tabs-nav-wrap::before,\n.ant-tabs-left > .ant-tabs-nav .ant-tabs-nav-wrap::after,\n.ant-tabs-right > .ant-tabs-nav .ant-tabs-nav-wrap::after,\n.ant-tabs-left > div > .ant-tabs-nav .ant-tabs-nav-wrap::after,\n.ant-tabs-right > div > .ant-tabs-nav .ant-tabs-nav-wrap::after {\n right: 0;\n left: 0;\n height: 30px;\n}\n.ant-tabs-left > .ant-tabs-nav .ant-tabs-nav-wrap::before,\n.ant-tabs-right > .ant-tabs-nav .ant-tabs-nav-wrap::before,\n.ant-tabs-left > div > .ant-tabs-nav .ant-tabs-nav-wrap::before,\n.ant-tabs-right > div > .ant-tabs-nav .ant-tabs-nav-wrap::before {\n top: 0;\n box-shadow: inset 0 10px 8px -8px rgba(0, 0, 0, 0.08);\n}\n.ant-tabs-left > .ant-tabs-nav .ant-tabs-nav-wrap::after,\n.ant-tabs-right > .ant-tabs-nav .ant-tabs-nav-wrap::after,\n.ant-tabs-left > div > .ant-tabs-nav .ant-tabs-nav-wrap::after,\n.ant-tabs-right > div > .ant-tabs-nav .ant-tabs-nav-wrap::after {\n bottom: 0;\n box-shadow: inset 0 -10px 8px -8px rgba(0, 0, 0, 0.08);\n}\n.ant-tabs-left > .ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-top::before,\n.ant-tabs-right > .ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-top::before,\n.ant-tabs-left > div > .ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-top::before,\n.ant-tabs-right > div > .ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-top::before {\n opacity: 1;\n}\n.ant-tabs-left > .ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-bottom::after,\n.ant-tabs-right > .ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-bottom::after,\n.ant-tabs-left > div > .ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-bottom::after,\n.ant-tabs-right > div > .ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-bottom::after {\n opacity: 1;\n}\n.ant-tabs-left > .ant-tabs-nav .ant-tabs-ink-bar,\n.ant-tabs-right > .ant-tabs-nav .ant-tabs-ink-bar,\n.ant-tabs-left > div > .ant-tabs-nav .ant-tabs-ink-bar,\n.ant-tabs-right > div > .ant-tabs-nav .ant-tabs-ink-bar {\n width: 2px;\n}\n.ant-tabs-left > .ant-tabs-nav .ant-tabs-ink-bar-animated,\n.ant-tabs-right > .ant-tabs-nav .ant-tabs-ink-bar-animated,\n.ant-tabs-left > div > .ant-tabs-nav .ant-tabs-ink-bar-animated,\n.ant-tabs-right > div > .ant-tabs-nav .ant-tabs-ink-bar-animated {\n transition: height 0.3s, top 0.3s;\n}\n.ant-tabs-left > .ant-tabs-nav .ant-tabs-nav-list,\n.ant-tabs-right > .ant-tabs-nav .ant-tabs-nav-list,\n.ant-tabs-left > div > .ant-tabs-nav .ant-tabs-nav-list,\n.ant-tabs-right > div > .ant-tabs-nav .ant-tabs-nav-list,\n.ant-tabs-left > .ant-tabs-nav .ant-tabs-nav-operations,\n.ant-tabs-right > .ant-tabs-nav .ant-tabs-nav-operations,\n.ant-tabs-left > div > .ant-tabs-nav .ant-tabs-nav-operations,\n.ant-tabs-right > div > .ant-tabs-nav .ant-tabs-nav-operations {\n flex: 1 0 auto;\n flex-direction: column;\n}\n.ant-tabs-left > .ant-tabs-nav .ant-tabs-ink-bar,\n.ant-tabs-left > div > .ant-tabs-nav .ant-tabs-ink-bar {\n right: 0;\n}\n.ant-tabs-left > .ant-tabs-content-holder,\n.ant-tabs-left > div > .ant-tabs-content-holder {\n margin-left: -1px;\n border-left: 1px solid #f0f0f0;\n}\n.ant-tabs-left > .ant-tabs-content-holder > .ant-tabs-content > .ant-tabs-tabpane,\n.ant-tabs-left > div > .ant-tabs-content-holder > .ant-tabs-content > .ant-tabs-tabpane {\n padding-left: 24px;\n}\n.ant-tabs-right > .ant-tabs-nav,\n.ant-tabs-right > div > .ant-tabs-nav {\n order: 1;\n}\n.ant-tabs-right > .ant-tabs-nav .ant-tabs-ink-bar,\n.ant-tabs-right > div > .ant-tabs-nav .ant-tabs-ink-bar {\n left: 0;\n}\n.ant-tabs-right > .ant-tabs-content-holder,\n.ant-tabs-right > div > .ant-tabs-content-holder {\n order: 0;\n margin-right: -1px;\n border-right: 1px solid #f0f0f0;\n}\n.ant-tabs-right > .ant-tabs-content-holder > .ant-tabs-content > .ant-tabs-tabpane,\n.ant-tabs-right > div > .ant-tabs-content-holder > .ant-tabs-content > .ant-tabs-tabpane {\n padding-right: 24px;\n}\n.ant-tabs-dropdown {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: absolute;\n top: -9999px;\n left: -9999px;\n z-index: 1050;\n display: block;\n}\n.ant-tabs-dropdown-hidden {\n display: none;\n}\n.ant-tabs-dropdown-menu {\n max-height: 200px;\n margin: 0;\n padding: 4px 0;\n overflow-x: hidden;\n overflow-y: auto;\n text-align: left;\n list-style-type: none;\n background-color: #fff;\n background-clip: padding-box;\n border-radius: 5px;\n outline: none;\n box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05);\n}\n.ant-tabs-dropdown-menu-item {\n display: flex;\n align-items: center;\n min-width: 120px;\n margin: 0;\n padding: 5px 12px;\n overflow: hidden;\n color: rgba(0, 0, 0, 0.85);\n font-weight: normal;\n font-size: 14px;\n line-height: 22px;\n white-space: nowrap;\n text-overflow: ellipsis;\n cursor: pointer;\n transition: all 0.3s;\n}\n.ant-tabs-dropdown-menu-item > span {\n flex: 1;\n white-space: nowrap;\n}\n.ant-tabs-dropdown-menu-item-remove {\n flex: none;\n margin-left: 12px;\n color: rgba(0, 0, 0, 0.45);\n font-size: 12px;\n background: transparent;\n border: 0;\n cursor: pointer;\n}\n.ant-tabs-dropdown-menu-item-remove:hover {\n color: #8588ed;\n}\n.ant-tabs-dropdown-menu-item:hover {\n background: #f5f5f5;\n}\n.ant-tabs-dropdown-menu-item-disabled,\n.ant-tabs-dropdown-menu-item-disabled:hover {\n color: rgba(0, 0, 0, 0.25);\n background: transparent;\n cursor: not-allowed;\n}\n.ant-tabs-card > .ant-tabs-nav .ant-tabs-tab,\n.ant-tabs-card > div > .ant-tabs-nav .ant-tabs-tab {\n margin: 0;\n padding: 8px 16px;\n background: #fafafa;\n border: 1px solid #f0f0f0;\n transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\n}\n.ant-tabs-card > .ant-tabs-nav .ant-tabs-tab-active,\n.ant-tabs-card > div > .ant-tabs-nav .ant-tabs-tab-active {\n color: #5b5ce1;\n background: #fff;\n}\n.ant-tabs-card > .ant-tabs-nav .ant-tabs-ink-bar,\n.ant-tabs-card > div > .ant-tabs-nav .ant-tabs-ink-bar {\n visibility: hidden;\n}\n.ant-tabs-card.ant-tabs-top > .ant-tabs-nav .ant-tabs-tab + .ant-tabs-tab,\n.ant-tabs-card.ant-tabs-bottom > .ant-tabs-nav .ant-tabs-tab + .ant-tabs-tab,\n.ant-tabs-card.ant-tabs-top > div > .ant-tabs-nav .ant-tabs-tab + .ant-tabs-tab,\n.ant-tabs-card.ant-tabs-bottom > div > .ant-tabs-nav .ant-tabs-tab + .ant-tabs-tab {\n margin-left: 2px;\n}\n.ant-tabs-card.ant-tabs-top > .ant-tabs-nav .ant-tabs-tab,\n.ant-tabs-card.ant-tabs-top > div > .ant-tabs-nav .ant-tabs-tab {\n border-radius: 5px 5px 0 0;\n}\n.ant-tabs-card.ant-tabs-top > .ant-tabs-nav .ant-tabs-tab-active,\n.ant-tabs-card.ant-tabs-top > div > .ant-tabs-nav .ant-tabs-tab-active {\n border-bottom-color: #fff;\n}\n.ant-tabs-card.ant-tabs-bottom > .ant-tabs-nav .ant-tabs-tab,\n.ant-tabs-card.ant-tabs-bottom > div > .ant-tabs-nav .ant-tabs-tab {\n border-radius: 0 0 5px 5px;\n}\n.ant-tabs-card.ant-tabs-bottom > .ant-tabs-nav .ant-tabs-tab-active,\n.ant-tabs-card.ant-tabs-bottom > div > .ant-tabs-nav .ant-tabs-tab-active {\n border-top-color: #fff;\n}\n.ant-tabs-card.ant-tabs-left > .ant-tabs-nav .ant-tabs-tab + .ant-tabs-tab,\n.ant-tabs-card.ant-tabs-right > .ant-tabs-nav .ant-tabs-tab + .ant-tabs-tab,\n.ant-tabs-card.ant-tabs-left > div > .ant-tabs-nav .ant-tabs-tab + .ant-tabs-tab,\n.ant-tabs-card.ant-tabs-right > div > .ant-tabs-nav .ant-tabs-tab + .ant-tabs-tab {\n margin-top: 2px;\n}\n.ant-tabs-card.ant-tabs-left > .ant-tabs-nav .ant-tabs-tab,\n.ant-tabs-card.ant-tabs-left > div > .ant-tabs-nav .ant-tabs-tab {\n border-radius: 5px 0 0 5px;\n}\n.ant-tabs-card.ant-tabs-left > .ant-tabs-nav .ant-tabs-tab-active,\n.ant-tabs-card.ant-tabs-left > div > .ant-tabs-nav .ant-tabs-tab-active {\n border-right-color: #fff;\n}\n.ant-tabs-card.ant-tabs-right > .ant-tabs-nav .ant-tabs-tab,\n.ant-tabs-card.ant-tabs-right > div > .ant-tabs-nav .ant-tabs-tab {\n border-radius: 0 5px 5px 0;\n}\n.ant-tabs-card.ant-tabs-right > .ant-tabs-nav .ant-tabs-tab-active,\n.ant-tabs-card.ant-tabs-right > div > .ant-tabs-nav .ant-tabs-tab-active {\n border-left-color: #fff;\n}\n.ant-tabs {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n display: flex;\n}\n.ant-tabs > .ant-tabs-nav,\n.ant-tabs > div > .ant-tabs-nav {\n position: relative;\n display: flex;\n flex: none;\n align-items: center;\n}\n.ant-tabs > .ant-tabs-nav .ant-tabs-nav-wrap,\n.ant-tabs > div > .ant-tabs-nav .ant-tabs-nav-wrap {\n position: relative;\n display: inline-block;\n display: flex;\n flex: auto;\n align-self: stretch;\n overflow: hidden;\n white-space: nowrap;\n transform: translate(0);\n}\n.ant-tabs > .ant-tabs-nav .ant-tabs-nav-wrap::before,\n.ant-tabs > div > .ant-tabs-nav .ant-tabs-nav-wrap::before,\n.ant-tabs > .ant-tabs-nav .ant-tabs-nav-wrap::after,\n.ant-tabs > div > .ant-tabs-nav .ant-tabs-nav-wrap::after {\n position: absolute;\n z-index: 1;\n opacity: 0;\n transition: opacity 0.3s;\n content: '';\n pointer-events: none;\n}\n.ant-tabs > .ant-tabs-nav .ant-tabs-nav-list,\n.ant-tabs > div > .ant-tabs-nav .ant-tabs-nav-list {\n position: relative;\n display: flex;\n transition: transform 0.3s;\n}\n.ant-tabs > .ant-tabs-nav .ant-tabs-nav-operations,\n.ant-tabs > div > .ant-tabs-nav .ant-tabs-nav-operations {\n display: flex;\n align-self: stretch;\n}\n.ant-tabs > .ant-tabs-nav .ant-tabs-nav-operations-hidden,\n.ant-tabs > div > .ant-tabs-nav .ant-tabs-nav-operations-hidden {\n position: absolute;\n visibility: hidden;\n pointer-events: none;\n}\n.ant-tabs > .ant-tabs-nav .ant-tabs-nav-more,\n.ant-tabs > div > .ant-tabs-nav .ant-tabs-nav-more {\n position: relative;\n padding: 8px 16px;\n background: transparent;\n border: 0;\n}\n.ant-tabs > .ant-tabs-nav .ant-tabs-nav-more::after,\n.ant-tabs > div > .ant-tabs-nav .ant-tabs-nav-more::after {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n height: 5px;\n transform: translateY(100%);\n content: '';\n}\n.ant-tabs > .ant-tabs-nav .ant-tabs-nav-add,\n.ant-tabs > div > .ant-tabs-nav .ant-tabs-nav-add {\n min-width: 40px;\n margin-left: 2px;\n padding: 0 8px;\n background: #fafafa;\n border: 1px solid #f0f0f0;\n border-radius: 5px 5px 0 0;\n outline: none;\n cursor: pointer;\n transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\n}\n.ant-tabs > .ant-tabs-nav .ant-tabs-nav-add:hover,\n.ant-tabs > div > .ant-tabs-nav .ant-tabs-nav-add:hover {\n color: #8588ed;\n}\n.ant-tabs > .ant-tabs-nav .ant-tabs-nav-add:active,\n.ant-tabs > div > .ant-tabs-nav .ant-tabs-nav-add:active,\n.ant-tabs > .ant-tabs-nav .ant-tabs-nav-add:focus,\n.ant-tabs > div > .ant-tabs-nav .ant-tabs-nav-add:focus {\n color: #4541ba;\n}\n.ant-tabs-extra-content {\n flex: none;\n}\n.ant-tabs-centered > .ant-tabs-nav .ant-tabs-nav-wrap:not([class*='ant-tabs-nav-wrap-ping']),\n.ant-tabs-centered > div > .ant-tabs-nav .ant-tabs-nav-wrap:not([class*='ant-tabs-nav-wrap-ping']) {\n justify-content: center;\n}\n.ant-tabs-ink-bar {\n position: absolute;\n background: #5b5ce1;\n pointer-events: none;\n}\n.ant-tabs-tab {\n position: relative;\n display: inline-flex;\n align-items: center;\n padding: 12px 0;\n font-size: 14px;\n background: transparent;\n border: 0;\n outline: none;\n cursor: pointer;\n}\n.ant-tabs-tab-btn:focus,\n.ant-tabs-tab-remove:focus,\n.ant-tabs-tab-btn:active,\n.ant-tabs-tab-remove:active {\n color: #4541ba;\n}\n.ant-tabs-tab-btn {\n outline: none;\n transition: all 0.3s;\n}\n.ant-tabs-tab-remove {\n flex: none;\n margin-right: -4px;\n margin-left: 8px;\n color: rgba(0, 0, 0, 0.45);\n font-size: 12px;\n background: transparent;\n border: none;\n outline: none;\n cursor: pointer;\n transition: all 0.3s;\n}\n.ant-tabs-tab-remove:hover {\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-tabs-tab:hover {\n color: #8588ed;\n}\n.ant-tabs-tab.ant-tabs-tab-active .ant-tabs-tab-btn {\n color: #5b5ce1;\n text-shadow: 0 0 0.25px currentcolor;\n}\n.ant-tabs-tab.ant-tabs-tab-disabled {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n}\n.ant-tabs-tab.ant-tabs-tab-disabled .ant-tabs-tab-btn:focus,\n.ant-tabs-tab.ant-tabs-tab-disabled .ant-tabs-tab-remove:focus,\n.ant-tabs-tab.ant-tabs-tab-disabled .ant-tabs-tab-btn:active,\n.ant-tabs-tab.ant-tabs-tab-disabled .ant-tabs-tab-remove:active {\n color: rgba(0, 0, 0, 0.25);\n}\n.ant-tabs-tab .ant-tabs-tab-remove .anticon {\n margin: 0;\n}\n.ant-tabs-tab .anticon {\n margin-right: 12px;\n}\n.ant-tabs-tab + .ant-tabs-tab {\n margin: 0 0 0 32px;\n}\n.ant-tabs-content {\n position: relative;\n width: 100%;\n}\n.ant-tabs-content-holder {\n flex: auto;\n min-width: 0;\n min-height: 0;\n}\n.ant-tabs-tabpane {\n outline: none;\n}\n.ant-tabs-tabpane-hidden {\n display: none;\n}\n.ant-tabs-switch-appear,\n.ant-tabs-switch-enter {\n transition: none;\n}\n.ant-tabs-switch-appear-start,\n.ant-tabs-switch-enter-start {\n opacity: 0;\n}\n.ant-tabs-switch-appear-active,\n.ant-tabs-switch-enter-active {\n opacity: 1;\n transition: opacity 0.3s;\n}\n.ant-tabs-switch-leave {\n position: absolute;\n transition: none;\n inset: 0;\n}\n.ant-tabs-switch-leave-start {\n opacity: 1;\n}\n.ant-tabs-switch-leave-active {\n opacity: 0;\n transition: opacity 0.3s;\n}\n.ant-tag {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n display: inline-block;\n height: auto;\n margin-right: 8px;\n padding: 0 7px;\n font-size: 12px;\n line-height: 20px;\n white-space: nowrap;\n background: #fafafa;\n border: 1px solid #d9d9d9;\n border-radius: 5px;\n opacity: 1;\n transition: all 0.3s;\n}\n.ant-tag,\n.ant-tag a,\n.ant-tag a:hover {\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-tag > a:first-child:last-child {\n display: inline-block;\n margin: 0 -8px;\n padding: 0 8px;\n}\n.ant-tag-close-icon {\n margin-left: 3px;\n color: rgba(0, 0, 0, 0.45);\n font-size: 10px;\n cursor: pointer;\n transition: all 0.3s;\n}\n.ant-tag-close-icon:hover {\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-tag-has-color {\n border-color: transparent;\n}\n.ant-tag-has-color,\n.ant-tag-has-color a,\n.ant-tag-has-color a:hover,\n.ant-tag-has-color .anticon-close,\n.ant-tag-has-color .anticon-close:hover {\n color: #fff;\n}\n.ant-tag-checkable {\n background-color: transparent;\n border-color: transparent;\n cursor: pointer;\n}\n.ant-tag-checkable:not(.ant-tag-checkable-checked):hover {\n color: #5b5ce1;\n}\n.ant-tag-checkable:active,\n.ant-tag-checkable-checked {\n color: #fff;\n}\n.ant-tag-checkable-checked {\n background-color: #5b5ce1;\n}\n.ant-tag-checkable:active {\n background-color: #4541ba;\n}\n.ant-tag-hidden {\n display: none;\n}\n.ant-tag-pink {\n color: #c41d7f;\n background: #fff0f6;\n border-color: #ffadd2;\n}\n.ant-tag-pink-inverse {\n color: #fff;\n background: #eb2f96;\n border-color: #eb2f96;\n}\n.ant-tag-magenta {\n color: #c41d7f;\n background: #fff0f6;\n border-color: #ffadd2;\n}\n.ant-tag-magenta-inverse {\n color: #fff;\n background: #eb2f96;\n border-color: #eb2f96;\n}\n.ant-tag-red {\n color: #cf1322;\n background: #fff1f0;\n border-color: #ffa39e;\n}\n.ant-tag-red-inverse {\n color: #fff;\n background: #f5222d;\n border-color: #f5222d;\n}\n.ant-tag-volcano {\n color: #d4380d;\n background: #fff2e8;\n border-color: #ffbb96;\n}\n.ant-tag-volcano-inverse {\n color: #fff;\n background: #fa541c;\n border-color: #fa541c;\n}\n.ant-tag-orange {\n color: #d46b08;\n background: #fff7e6;\n border-color: #ffd591;\n}\n.ant-tag-orange-inverse {\n color: #fff;\n background: #fa8c16;\n border-color: #fa8c16;\n}\n.ant-tag-yellow {\n color: #d4b106;\n background: #feffe6;\n border-color: #fffb8f;\n}\n.ant-tag-yellow-inverse {\n color: #fff;\n background: #fadb14;\n border-color: #fadb14;\n}\n.ant-tag-gold {\n color: #d48806;\n background: #fffbe6;\n border-color: #ffe58f;\n}\n.ant-tag-gold-inverse {\n color: #fff;\n background: #faad14;\n border-color: #faad14;\n}\n.ant-tag-cyan {\n color: #08979c;\n background: #e6fffb;\n border-color: #87e8de;\n}\n.ant-tag-cyan-inverse {\n color: #fff;\n background: #13c2c2;\n border-color: #13c2c2;\n}\n.ant-tag-lime {\n color: #7cb305;\n background: #fcffe6;\n border-color: #eaff8f;\n}\n.ant-tag-lime-inverse {\n color: #fff;\n background: #a0d911;\n border-color: #a0d911;\n}\n.ant-tag-green {\n color: #389e0d;\n background: #f6ffed;\n border-color: #b7eb8f;\n}\n.ant-tag-green-inverse {\n color: #fff;\n background: #52c41a;\n border-color: #52c41a;\n}\n.ant-tag-blue {\n color: #096dd9;\n background: #e6f7ff;\n border-color: #91d5ff;\n}\n.ant-tag-blue-inverse {\n color: #fff;\n background: #1890ff;\n border-color: #1890ff;\n}\n.ant-tag-geekblue {\n color: #1d39c4;\n background: #f0f5ff;\n border-color: #adc6ff;\n}\n.ant-tag-geekblue-inverse {\n color: #fff;\n background: #2f54eb;\n border-color: #2f54eb;\n}\n.ant-tag-purple {\n color: #531dab;\n background: #f9f0ff;\n border-color: #d3adf7;\n}\n.ant-tag-purple-inverse {\n color: #fff;\n background: #722ed1;\n border-color: #722ed1;\n}\n.ant-tag-success {\n color: #52c41a;\n background: #f6ffed;\n border-color: #b7eb8f;\n}\n.ant-tag-processing {\n color: #5b5ce1;\n background: #f0f2ff;\n border-color: #e0e3ff;\n}\n.ant-tag-error {\n color: #ff4d4f;\n background: #fff2f0;\n border-color: #ffccc7;\n}\n.ant-tag-warning {\n color: #faad14;\n background: #fffbe6;\n border-color: #ffe58f;\n}\n.ant-tag > .anticon + span,\n.ant-tag > span + .anticon {\n margin-left: 7px;\n}\n.ant-tag.ant-tag-rtl {\n margin-right: 0;\n margin-left: 8px;\n direction: rtl;\n text-align: right;\n}\n.ant-tag-rtl .ant-tag-close-icon {\n margin-right: 3px;\n margin-left: 0;\n}\n.ant-tag-rtl.ant-tag > .anticon + span,\n.ant-tag-rtl.ant-tag > span + .anticon {\n margin-right: 7px;\n margin-left: 0;\n}\n.ant-timeline {\n box-sizing: border-box;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n font-feature-settings: 'tnum';\n margin: 0;\n padding: 0;\n list-style: none;\n}\n.ant-timeline-item {\n position: relative;\n margin: 0;\n padding-bottom: 20px;\n font-size: 14px;\n list-style: none;\n}\n.ant-timeline-item-tail {\n position: absolute;\n top: 10px;\n left: 4px;\n height: calc(100% - 10px);\n border-left: 2px solid #f0f0f0;\n}\n.ant-timeline-item-pending .ant-timeline-item-head {\n font-size: 12px;\n background-color: transparent;\n}\n.ant-timeline-item-pending .ant-timeline-item-tail {\n display: none;\n}\n.ant-timeline-item-head {\n position: absolute;\n width: 10px;\n height: 10px;\n background-color: #fff;\n border: 2px solid transparent;\n border-radius: 100px;\n}\n.ant-timeline-item-head-blue {\n color: #5b5ce1;\n border-color: #5b5ce1;\n}\n.ant-timeline-item-head-red {\n color: #ff4d4f;\n border-color: #ff4d4f;\n}\n.ant-timeline-item-head-green {\n color: #52c41a;\n border-color: #52c41a;\n}\n.ant-timeline-item-head-gray {\n color: rgba(0, 0, 0, 0.25);\n border-color: rgba(0, 0, 0, 0.25);\n}\n.ant-timeline-item-head-custom {\n position: absolute;\n top: 5.5px;\n left: 5px;\n width: auto;\n height: auto;\n margin-top: 0;\n padding: 3px 1px;\n line-height: 1;\n text-align: center;\n border: 0;\n border-radius: 0;\n transform: translate(-50%, -50%);\n}\n.ant-timeline-item-content {\n position: relative;\n top: -7.001px;\n margin: 0 0 0 26px;\n word-break: break-word;\n}\n.ant-timeline-item-last > .ant-timeline-item-tail {\n display: none;\n}\n.ant-timeline-item-last > .ant-timeline-item-content {\n min-height: 48px;\n}\n.ant-timeline.ant-timeline-alternate .ant-timeline-item-tail,\n.ant-timeline.ant-timeline-right .ant-timeline-item-tail,\n.ant-timeline.ant-timeline-label .ant-timeline-item-tail,\n.ant-timeline.ant-timeline-alternate .ant-timeline-item-head,\n.ant-timeline.ant-timeline-right .ant-timeline-item-head,\n.ant-timeline.ant-timeline-label .ant-timeline-item-head,\n.ant-timeline.ant-timeline-alternate .ant-timeline-item-head-custom,\n.ant-timeline.ant-timeline-right .ant-timeline-item-head-custom,\n.ant-timeline.ant-timeline-label .ant-timeline-item-head-custom {\n left: 50%;\n}\n.ant-timeline.ant-timeline-alternate .ant-timeline-item-head,\n.ant-timeline.ant-timeline-right .ant-timeline-item-head,\n.ant-timeline.ant-timeline-label .ant-timeline-item-head {\n margin-left: -4px;\n}\n.ant-timeline.ant-timeline-alternate .ant-timeline-item-head-custom,\n.ant-timeline.ant-timeline-right .ant-timeline-item-head-custom,\n.ant-timeline.ant-timeline-label .ant-timeline-item-head-custom {\n margin-left: 1px;\n}\n.ant-timeline.ant-timeline-alternate .ant-timeline-item-left .ant-timeline-item-content,\n.ant-timeline.ant-timeline-right .ant-timeline-item-left .ant-timeline-item-content,\n.ant-timeline.ant-timeline-label .ant-timeline-item-left .ant-timeline-item-content {\n left: calc(50% - 4px);\n width: calc(50% - 14px);\n text-align: left;\n}\n.ant-timeline.ant-timeline-alternate .ant-timeline-item-right .ant-timeline-item-content,\n.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-content,\n.ant-timeline.ant-timeline-label .ant-timeline-item-right .ant-timeline-item-content {\n width: calc(50% - 12px);\n margin: 0;\n text-align: right;\n}\n.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-tail,\n.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-head,\n.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-head-custom {\n left: calc(100% - 4px - 2px);\n}\n.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-content {\n width: calc(100% - 18px);\n}\n.ant-timeline.ant-timeline-pending .ant-timeline-item-last .ant-timeline-item-tail {\n display: block;\n height: calc(100% - 14px);\n border-left: 2px dotted #f0f0f0;\n}\n.ant-timeline.ant-timeline-reverse .ant-timeline-item-last .ant-timeline-item-tail {\n display: none;\n}\n.ant-timeline.ant-timeline-reverse .ant-timeline-item-pending .ant-timeline-item-tail {\n top: 15px;\n display: block;\n height: calc(100% - 15px);\n border-left: 2px dotted #f0f0f0;\n}\n.ant-timeline.ant-timeline-reverse .ant-timeline-item-pending .ant-timeline-item-content {\n min-height: 48px;\n}\n.ant-timeline.ant-timeline-label .ant-timeline-item-label {\n position: absolute;\n top: -7.001px;\n width: calc(50% - 12px);\n text-align: right;\n}\n.ant-timeline.ant-timeline-label .ant-timeline-item-right .ant-timeline-item-label {\n left: calc(50% + 14px);\n width: calc(50% - 14px);\n text-align: left;\n}\n.ant-timeline-rtl {\n direction: rtl;\n}\n.ant-timeline-rtl .ant-timeline-item-tail {\n right: 4px;\n left: auto;\n border-right: 2px solid #f0f0f0;\n border-left: none;\n}\n.ant-timeline-rtl .ant-timeline-item-head-custom {\n right: 5px;\n left: auto;\n transform: translate(50%, -50%);\n}\n.ant-timeline-rtl .ant-timeline-item-content {\n margin: 0 18px 0 0;\n}\n.ant-timeline-rtl.ant-timeline.ant-timeline-alternate .ant-timeline-item-tail,\n.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-tail,\n.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-tail,\n.ant-timeline-rtl.ant-timeline.ant-timeline-alternate .ant-timeline-item-head,\n.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-head,\n.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-head,\n.ant-timeline-rtl.ant-timeline.ant-timeline-alternate .ant-timeline-item-head-custom,\n.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-head-custom,\n.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-head-custom {\n right: 50%;\n left: auto;\n}\n.ant-timeline-rtl.ant-timeline.ant-timeline-alternate .ant-timeline-item-head,\n.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-head,\n.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-head {\n margin-right: -4px;\n margin-left: 0;\n}\n.ant-timeline-rtl.ant-timeline.ant-timeline-alternate .ant-timeline-item-head-custom,\n.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-head-custom,\n.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-head-custom {\n margin-right: 1px;\n margin-left: 0;\n}\n.ant-timeline-rtl.ant-timeline.ant-timeline-alternate .ant-timeline-item-left .ant-timeline-item-content,\n.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-left .ant-timeline-item-content,\n.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-left .ant-timeline-item-content {\n right: calc(50% - 4px);\n left: auto;\n text-align: right;\n}\n.ant-timeline-rtl.ant-timeline.ant-timeline-alternate .ant-timeline-item-right .ant-timeline-item-content,\n.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-content,\n.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-right .ant-timeline-item-content {\n text-align: left;\n}\n.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-tail,\n.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-head,\n.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-head-custom {\n right: 0;\n left: auto;\n}\n.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-content {\n width: 100%;\n margin-right: 18px;\n text-align: right;\n}\n.ant-timeline-rtl.ant-timeline.ant-timeline-pending .ant-timeline-item-last .ant-timeline-item-tail {\n border-right: 2px dotted #f0f0f0;\n border-left: none;\n}\n.ant-timeline-rtl.ant-timeline.ant-timeline-reverse .ant-timeline-item-pending .ant-timeline-item-tail {\n border-right: 2px dotted #f0f0f0;\n border-left: none;\n}\n.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-label {\n text-align: left;\n}\n.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-right .ant-timeline-item-label {\n right: calc(50% + 14px);\n text-align: right;\n}\n.ant-tooltip {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: absolute;\n z-index: 1070;\n display: block;\n width: max-content;\n width: intrinsic;\n max-width: 250px;\n visibility: visible;\n}\n.ant-tooltip-content {\n position: relative;\n}\n.ant-tooltip-hidden {\n display: none;\n}\n.ant-tooltip-placement-top,\n.ant-tooltip-placement-topLeft,\n.ant-tooltip-placement-topRight {\n padding-bottom: 14.3137085px;\n}\n.ant-tooltip-placement-right,\n.ant-tooltip-placement-rightTop,\n.ant-tooltip-placement-rightBottom {\n padding-left: 14.3137085px;\n}\n.ant-tooltip-placement-bottom,\n.ant-tooltip-placement-bottomLeft,\n.ant-tooltip-placement-bottomRight {\n padding-top: 14.3137085px;\n}\n.ant-tooltip-placement-left,\n.ant-tooltip-placement-leftTop,\n.ant-tooltip-placement-leftBottom {\n padding-right: 14.3137085px;\n}\n.ant-tooltip-inner {\n min-width: 30px;\n min-height: 32px;\n padding: 6px 8px;\n color: #fff;\n text-align: left;\n text-decoration: none;\n word-wrap: break-word;\n background-color: rgba(0, 0, 0, 0.75);\n border-radius: 5px;\n box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05);\n}\n.ant-tooltip-arrow {\n position: absolute;\n z-index: 2;\n display: block;\n width: 22px;\n height: 22px;\n overflow: hidden;\n background: transparent;\n pointer-events: none;\n}\n.ant-tooltip-arrow-content {\n --antd-arrow-background-color: linear-gradient(to right bottom, rgba(0, 0, 0, 0.65), rgba(0, 0, 0, 0.75));\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n display: block;\n width: 11.3137085px;\n height: 11.3137085px;\n margin: auto;\n content: '';\n pointer-events: auto;\n border-radius: 0 0 2px;\n pointer-events: none;\n}\n.ant-tooltip-arrow-content::before {\n position: absolute;\n top: -11.3137085px;\n left: -11.3137085px;\n width: 33.9411255px;\n height: 33.9411255px;\n background: var(--antd-arrow-background-color);\n background-repeat: no-repeat;\n background-position: -10px -10px;\n content: '';\n clip-path: inset(33% 33%);\n clip-path: path('M 9.849242404917499 24.091883092036785 A 5 5 0 0 1 13.384776310850237 22.627416997969522 L 20.627416997969522 22.627416997969522 A 2 2 0 0 0 22.627416997969522 20.627416997969522 L 22.627416997969522 13.384776310850237 A 5 5 0 0 1 24.091883092036785 9.849242404917499 L 23.091883092036785 9.849242404917499 L 9.849242404917499 23.091883092036785 Z');\n}\n.ant-tooltip-placement-top .ant-tooltip-arrow,\n.ant-tooltip-placement-topLeft .ant-tooltip-arrow,\n.ant-tooltip-placement-topRight .ant-tooltip-arrow {\n bottom: 0;\n transform: translateY(100%);\n}\n.ant-tooltip-placement-top .ant-tooltip-arrow-content,\n.ant-tooltip-placement-topLeft .ant-tooltip-arrow-content,\n.ant-tooltip-placement-topRight .ant-tooltip-arrow-content {\n box-shadow: 3px 3px 7px rgba(0, 0, 0, 0.07);\n transform: translateY(-11px) rotate(45deg);\n}\n.ant-tooltip-placement-top .ant-tooltip-arrow {\n left: 50%;\n transform: translateY(100%) translateX(-50%);\n}\n.ant-tooltip-placement-topLeft .ant-tooltip-arrow {\n left: 13px;\n}\n.ant-tooltip-placement-topRight .ant-tooltip-arrow {\n right: 13px;\n}\n.ant-tooltip-placement-right .ant-tooltip-arrow,\n.ant-tooltip-placement-rightTop .ant-tooltip-arrow,\n.ant-tooltip-placement-rightBottom .ant-tooltip-arrow {\n left: 0;\n transform: translateX(-100%);\n}\n.ant-tooltip-placement-right .ant-tooltip-arrow-content,\n.ant-tooltip-placement-rightTop .ant-tooltip-arrow-content,\n.ant-tooltip-placement-rightBottom .ant-tooltip-arrow-content {\n box-shadow: -3px 3px 7px rgba(0, 0, 0, 0.07);\n transform: translateX(11px) rotate(135deg);\n}\n.ant-tooltip-placement-right .ant-tooltip-arrow {\n top: 50%;\n transform: translateX(-100%) translateY(-50%);\n}\n.ant-tooltip-placement-rightTop .ant-tooltip-arrow {\n top: 5px;\n}\n.ant-tooltip-placement-rightBottom .ant-tooltip-arrow {\n bottom: 5px;\n}\n.ant-tooltip-placement-left .ant-tooltip-arrow,\n.ant-tooltip-placement-leftTop .ant-tooltip-arrow,\n.ant-tooltip-placement-leftBottom .ant-tooltip-arrow {\n right: 0;\n transform: translateX(100%);\n}\n.ant-tooltip-placement-left .ant-tooltip-arrow-content,\n.ant-tooltip-placement-leftTop .ant-tooltip-arrow-content,\n.ant-tooltip-placement-leftBottom .ant-tooltip-arrow-content {\n box-shadow: 3px -3px 7px rgba(0, 0, 0, 0.07);\n transform: translateX(-11px) rotate(315deg);\n}\n.ant-tooltip-placement-left .ant-tooltip-arrow {\n top: 50%;\n transform: translateX(100%) translateY(-50%);\n}\n.ant-tooltip-placement-leftTop .ant-tooltip-arrow {\n top: 5px;\n}\n.ant-tooltip-placement-leftBottom .ant-tooltip-arrow {\n bottom: 5px;\n}\n.ant-tooltip-placement-bottom .ant-tooltip-arrow,\n.ant-tooltip-placement-bottomLeft .ant-tooltip-arrow,\n.ant-tooltip-placement-bottomRight .ant-tooltip-arrow {\n top: 0;\n transform: translateY(-100%);\n}\n.ant-tooltip-placement-bottom .ant-tooltip-arrow-content,\n.ant-tooltip-placement-bottomLeft .ant-tooltip-arrow-content,\n.ant-tooltip-placement-bottomRight .ant-tooltip-arrow-content {\n box-shadow: -3px -3px 7px rgba(0, 0, 0, 0.07);\n transform: translateY(11px) rotate(225deg);\n}\n.ant-tooltip-placement-bottom .ant-tooltip-arrow {\n left: 50%;\n transform: translateY(-100%) translateX(-50%);\n}\n.ant-tooltip-placement-bottomLeft .ant-tooltip-arrow {\n left: 13px;\n}\n.ant-tooltip-placement-bottomRight .ant-tooltip-arrow {\n right: 13px;\n}\n.ant-tooltip-pink .ant-tooltip-inner {\n background-color: #eb2f96;\n}\n.ant-tooltip-pink .ant-tooltip-arrow-content::before {\n background: #eb2f96;\n}\n.ant-tooltip-magenta .ant-tooltip-inner {\n background-color: #eb2f96;\n}\n.ant-tooltip-magenta .ant-tooltip-arrow-content::before {\n background: #eb2f96;\n}\n.ant-tooltip-red .ant-tooltip-inner {\n background-color: #f5222d;\n}\n.ant-tooltip-red .ant-tooltip-arrow-content::before {\n background: #f5222d;\n}\n.ant-tooltip-volcano .ant-tooltip-inner {\n background-color: #fa541c;\n}\n.ant-tooltip-volcano .ant-tooltip-arrow-content::before {\n background: #fa541c;\n}\n.ant-tooltip-orange .ant-tooltip-inner {\n background-color: #fa8c16;\n}\n.ant-tooltip-orange .ant-tooltip-arrow-content::before {\n background: #fa8c16;\n}\n.ant-tooltip-yellow .ant-tooltip-inner {\n background-color: #fadb14;\n}\n.ant-tooltip-yellow .ant-tooltip-arrow-content::before {\n background: #fadb14;\n}\n.ant-tooltip-gold .ant-tooltip-inner {\n background-color: #faad14;\n}\n.ant-tooltip-gold .ant-tooltip-arrow-content::before {\n background: #faad14;\n}\n.ant-tooltip-cyan .ant-tooltip-inner {\n background-color: #13c2c2;\n}\n.ant-tooltip-cyan .ant-tooltip-arrow-content::before {\n background: #13c2c2;\n}\n.ant-tooltip-lime .ant-tooltip-inner {\n background-color: #a0d911;\n}\n.ant-tooltip-lime .ant-tooltip-arrow-content::before {\n background: #a0d911;\n}\n.ant-tooltip-green .ant-tooltip-inner {\n background-color: #52c41a;\n}\n.ant-tooltip-green .ant-tooltip-arrow-content::before {\n background: #52c41a;\n}\n.ant-tooltip-blue .ant-tooltip-inner {\n background-color: #1890ff;\n}\n.ant-tooltip-blue .ant-tooltip-arrow-content::before {\n background: #1890ff;\n}\n.ant-tooltip-geekblue .ant-tooltip-inner {\n background-color: #2f54eb;\n}\n.ant-tooltip-geekblue .ant-tooltip-arrow-content::before {\n background: #2f54eb;\n}\n.ant-tooltip-purple .ant-tooltip-inner {\n background-color: #722ed1;\n}\n.ant-tooltip-purple .ant-tooltip-arrow-content::before {\n background: #722ed1;\n}\n.ant-tooltip-rtl {\n direction: rtl;\n}\n.ant-tooltip-rtl .ant-tooltip-inner {\n text-align: right;\n}\n.ant-transfer-customize-list .ant-transfer-list {\n flex: 1 1 50%;\n width: auto;\n height: auto;\n min-height: 200px;\n}\n.ant-transfer-customize-list .ant-table-wrapper .ant-table-small {\n border: 0;\n border-radius: 0;\n}\n.ant-transfer-customize-list .ant-table-wrapper .ant-table-small .ant-table-selection-column {\n width: 40px;\n min-width: 40px;\n}\n.ant-transfer-customize-list .ant-table-wrapper .ant-table-small > .ant-table-content > .ant-table-body > table > .ant-table-thead > tr > th {\n background: #fafafa;\n}\n.ant-transfer-customize-list .ant-table-wrapper .ant-table-small > .ant-table-content .ant-table-row:last-child td {\n border-bottom: 1px solid #f0f0f0;\n}\n.ant-transfer-customize-list .ant-table-wrapper .ant-table-small .ant-table-body {\n margin: 0;\n}\n.ant-transfer-customize-list .ant-table-wrapper .ant-table-pagination.ant-pagination {\n margin: 16px 0 4px;\n}\n.ant-transfer-customize-list .ant-input[disabled] {\n background-color: transparent;\n}\n.ant-transfer-status-error .ant-transfer-list {\n border-color: #ff4d4f;\n}\n.ant-transfer-status-error .ant-transfer-list-search:not([disabled]) {\n border-color: #d9d9d9;\n}\n.ant-transfer-status-error .ant-transfer-list-search:not([disabled]):hover {\n border-color: #8588ed;\n border-right-width: 1px;\n}\n.ant-input-rtl .ant-transfer-status-error .ant-transfer-list-search:not([disabled]):hover {\n border-right-width: 0;\n border-left-width: 1px !important;\n}\n.ant-transfer-status-error .ant-transfer-list-search:not([disabled]):focus {\n border-color: #8588ed;\n box-shadow: 0 0 0 2px rgba(91, 92, 225, 0.2);\n border-right-width: 1px;\n outline: 0;\n}\n.ant-input-rtl .ant-transfer-status-error .ant-transfer-list-search:not([disabled]):focus {\n border-right-width: 0;\n border-left-width: 1px !important;\n}\n.ant-transfer-status-warning .ant-transfer-list {\n border-color: #faad14;\n}\n.ant-transfer-status-warning .ant-transfer-list-search:not([disabled]) {\n border-color: #d9d9d9;\n}\n.ant-transfer-status-warning .ant-transfer-list-search:not([disabled]):hover {\n border-color: #8588ed;\n border-right-width: 1px;\n}\n.ant-input-rtl .ant-transfer-status-warning .ant-transfer-list-search:not([disabled]):hover {\n border-right-width: 0;\n border-left-width: 1px !important;\n}\n.ant-transfer-status-warning .ant-transfer-list-search:not([disabled]):focus {\n border-color: #8588ed;\n box-shadow: 0 0 0 2px rgba(91, 92, 225, 0.2);\n border-right-width: 1px;\n outline: 0;\n}\n.ant-input-rtl .ant-transfer-status-warning .ant-transfer-list-search:not([disabled]):focus {\n border-right-width: 0;\n border-left-width: 1px !important;\n}\n.ant-transfer {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n display: flex;\n align-items: stretch;\n}\n.ant-transfer-disabled .ant-transfer-list {\n background: #f5f5f5;\n}\n.ant-transfer-list {\n display: flex;\n flex-direction: column;\n width: 180px;\n height: 200px;\n border: 1px solid #d9d9d9;\n border-radius: 5px;\n}\n.ant-transfer-list-with-pagination {\n width: 250px;\n height: auto;\n}\n.ant-transfer-list-search .anticon-search {\n color: rgba(0, 0, 0, 0.25);\n}\n.ant-transfer-list-header {\n display: flex;\n flex: none;\n align-items: center;\n height: 40px;\n padding: 8px 12px 9px;\n color: rgba(0, 0, 0, 0.85);\n background: #fff;\n border-bottom: 1px solid #f0f0f0;\n border-radius: 5px 5px 0 0;\n}\n.ant-transfer-list-header > *:not(:last-child) {\n margin-right: 4px;\n}\n.ant-transfer-list-header > * {\n flex: none;\n}\n.ant-transfer-list-header-title {\n flex: auto;\n overflow: hidden;\n white-space: nowrap;\n text-align: right;\n text-overflow: ellipsis;\n}\n.ant-transfer-list-header-dropdown {\n font-size: 10px;\n transform: translateY(10%);\n cursor: pointer;\n}\n.ant-transfer-list-header-dropdown[disabled] {\n cursor: not-allowed;\n}\n.ant-transfer-list-body {\n display: flex;\n flex: auto;\n flex-direction: column;\n overflow: hidden;\n font-size: 14px;\n}\n.ant-transfer-list-body-search-wrapper {\n position: relative;\n flex: none;\n padding: 12px;\n}\n.ant-transfer-list-content {\n flex: auto;\n margin: 0;\n padding: 0;\n overflow: auto;\n list-style: none;\n}\n.ant-transfer-list-content-item {\n display: flex;\n align-items: center;\n min-height: 32px;\n padding: 6px 12px;\n line-height: 20px;\n transition: all 0.3s;\n}\n.ant-transfer-list-content-item > *:not(:last-child) {\n margin-right: 8px;\n}\n.ant-transfer-list-content-item > * {\n flex: none;\n}\n.ant-transfer-list-content-item-text {\n flex: auto;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.ant-transfer-list-content-item-remove {\n position: relative;\n color: #d9d9d9;\n cursor: pointer;\n transition: all 0.3s;\n}\n.ant-transfer-list-content-item-remove:hover {\n color: #8588ed;\n}\n.ant-transfer-list-content-item-remove::after {\n position: absolute;\n top: -6px;\n right: -50%;\n bottom: -6px;\n left: -50%;\n content: '';\n}\n.ant-transfer-list-content-item:not(.ant-transfer-list-content-item-disabled):hover {\n background-color: #f5f5f5;\n cursor: pointer;\n}\n.ant-transfer-list-content-item:not(.ant-transfer-list-content-item-disabled).ant-transfer-list-content-item-checked:hover {\n background-color: #e6e9ff;\n}\n.ant-transfer-list-content-show-remove .ant-transfer-list-content-item:not(.ant-transfer-list-content-item-disabled):hover {\n background: transparent;\n cursor: default;\n}\n.ant-transfer-list-content-item-checked {\n background-color: #f0f2ff;\n}\n.ant-transfer-list-content-item-disabled {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n}\n.ant-transfer-list-pagination {\n padding: 8px 0;\n text-align: right;\n border-top: 1px solid #f0f0f0;\n}\n.ant-transfer-list-body-not-found {\n flex: none;\n width: 100%;\n margin: auto 0;\n color: rgba(0, 0, 0, 0.25);\n text-align: center;\n}\n.ant-transfer-list-footer {\n border-top: 1px solid #f0f0f0;\n}\n.ant-transfer-operation {\n display: flex;\n flex: none;\n flex-direction: column;\n align-self: center;\n margin: 0 8px;\n vertical-align: middle;\n}\n.ant-transfer-operation .ant-btn {\n display: block;\n}\n.ant-transfer-operation .ant-btn:first-child {\n margin-bottom: 4px;\n}\n.ant-transfer-operation .ant-btn .anticon {\n font-size: 12px;\n}\n.ant-transfer .ant-empty-image {\n max-height: -2px;\n}\n.ant-transfer-rtl {\n direction: rtl;\n}\n.ant-transfer-rtl .ant-transfer-list-search {\n padding-right: 8px;\n padding-left: 24px;\n}\n.ant-transfer-rtl .ant-transfer-list-search-action {\n right: auto;\n left: 12px;\n}\n.ant-transfer-rtl .ant-transfer-list-header > *:not(:last-child) {\n margin-right: 0;\n margin-left: 4px;\n}\n.ant-transfer-rtl .ant-transfer-list-header {\n right: 0;\n left: auto;\n}\n.ant-transfer-rtl .ant-transfer-list-header-title {\n text-align: left;\n}\n.ant-transfer-rtl .ant-transfer-list-content-item > *:not(:last-child) {\n margin-right: 0;\n margin-left: 8px;\n}\n.ant-transfer-rtl .ant-transfer-list-pagination {\n text-align: left;\n}\n.ant-transfer-rtl .ant-transfer-list-footer {\n right: 0;\n left: auto;\n}\n@keyframes ant-tree-node-fx-do-not-use {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}\n.ant-tree.ant-tree-directory .ant-tree-treenode {\n position: relative;\n}\n.ant-tree.ant-tree-directory .ant-tree-treenode::before {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 4px;\n left: 0;\n transition: background-color 0.3s;\n content: '';\n pointer-events: none;\n}\n.ant-tree.ant-tree-directory .ant-tree-treenode:hover::before {\n background: #f5f5f5;\n}\n.ant-tree.ant-tree-directory .ant-tree-treenode > * {\n z-index: 1;\n}\n.ant-tree.ant-tree-directory .ant-tree-treenode .ant-tree-switcher {\n transition: color 0.3s;\n}\n.ant-tree.ant-tree-directory .ant-tree-treenode .ant-tree-node-content-wrapper {\n border-radius: 0;\n user-select: none;\n}\n.ant-tree.ant-tree-directory .ant-tree-treenode .ant-tree-node-content-wrapper:hover {\n background: transparent;\n}\n.ant-tree.ant-tree-directory .ant-tree-treenode .ant-tree-node-content-wrapper.ant-tree-node-selected {\n color: #fff;\n background: transparent;\n}\n.ant-tree.ant-tree-directory .ant-tree-treenode-selected:hover::before,\n.ant-tree.ant-tree-directory .ant-tree-treenode-selected::before {\n background: #5b5ce1;\n}\n.ant-tree.ant-tree-directory .ant-tree-treenode-selected .ant-tree-switcher {\n color: #fff;\n}\n.ant-tree.ant-tree-directory .ant-tree-treenode-selected .ant-tree-node-content-wrapper {\n color: #fff;\n background: transparent;\n}\n.ant-tree-checkbox {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n top: 0.2em;\n line-height: 1;\n white-space: nowrap;\n outline: none;\n cursor: pointer;\n}\n.ant-tree-checkbox-wrapper:hover .ant-tree-checkbox-inner,\n.ant-tree-checkbox:hover .ant-tree-checkbox-inner,\n.ant-tree-checkbox-input:focus + .ant-tree-checkbox-inner {\n border-color: #5b5ce1;\n}\n.ant-tree-checkbox-checked::after {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 1px solid #5b5ce1;\n border-radius: 5px;\n visibility: hidden;\n animation: antCheckboxEffect 0.36s ease-in-out;\n animation-fill-mode: backwards;\n content: '';\n}\n.ant-tree-checkbox:hover::after,\n.ant-tree-checkbox-wrapper:hover .ant-tree-checkbox::after {\n visibility: visible;\n}\n.ant-tree-checkbox-inner {\n position: relative;\n top: 0;\n left: 0;\n display: block;\n width: 16px;\n height: 16px;\n direction: ltr;\n background-color: #fff;\n border: 1px solid #d9d9d9;\n border-radius: 5px;\n border-collapse: separate;\n transition: all 0.3s;\n}\n.ant-tree-checkbox-inner::after {\n position: absolute;\n top: 50%;\n left: 21.5%;\n display: table;\n width: 5.71428571px;\n height: 9.14285714px;\n border: 2px solid #fff;\n border-top: 0;\n border-left: 0;\n transform: rotate(45deg) scale(0) translate(-50%, -50%);\n opacity: 0;\n transition: all 0.1s cubic-bezier(0.71, -0.46, 0.88, 0.6), opacity 0.1s;\n content: ' ';\n}\n.ant-tree-checkbox-input {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n width: 100%;\n height: 100%;\n cursor: pointer;\n opacity: 0;\n}\n.ant-tree-checkbox-checked .ant-tree-checkbox-inner::after {\n position: absolute;\n display: table;\n border: 2px solid #fff;\n border-top: 0;\n border-left: 0;\n transform: rotate(45deg) scale(1) translate(-50%, -50%);\n opacity: 1;\n transition: all 0.2s cubic-bezier(0.12, 0.4, 0.29, 1.46) 0.1s;\n content: ' ';\n}\n.ant-tree-checkbox-checked .ant-tree-checkbox-inner {\n background-color: #5b5ce1;\n border-color: #5b5ce1;\n}\n.ant-tree-checkbox-disabled {\n cursor: not-allowed;\n}\n.ant-tree-checkbox-disabled.ant-tree-checkbox-checked .ant-tree-checkbox-inner::after {\n border-color: rgba(0, 0, 0, 0.25);\n animation-name: none;\n}\n.ant-tree-checkbox-disabled .ant-tree-checkbox-input {\n cursor: not-allowed;\n pointer-events: none;\n}\n.ant-tree-checkbox-disabled .ant-tree-checkbox-inner {\n background-color: #f5f5f5;\n border-color: #d9d9d9 !important;\n}\n.ant-tree-checkbox-disabled .ant-tree-checkbox-inner::after {\n border-color: #f5f5f5;\n border-collapse: separate;\n animation-name: none;\n}\n.ant-tree-checkbox-disabled + span {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n}\n.ant-tree-checkbox-disabled:hover::after,\n.ant-tree-checkbox-wrapper:hover .ant-tree-checkbox-disabled::after {\n visibility: hidden;\n}\n.ant-tree-checkbox-wrapper {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n display: inline-flex;\n align-items: baseline;\n line-height: unset;\n cursor: pointer;\n}\n.ant-tree-checkbox-wrapper::after {\n display: inline-block;\n width: 0;\n overflow: hidden;\n content: '\\a0';\n}\n.ant-tree-checkbox-wrapper.ant-tree-checkbox-wrapper-disabled {\n cursor: not-allowed;\n}\n.ant-tree-checkbox-wrapper + .ant-tree-checkbox-wrapper {\n margin-left: 8px;\n}\n.ant-tree-checkbox-wrapper.ant-tree-checkbox-wrapper-in-form-item input[type='checkbox'] {\n width: 14px;\n height: 14px;\n}\n.ant-tree-checkbox + span {\n padding-right: 8px;\n padding-left: 8px;\n}\n.ant-tree-checkbox-group {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n display: inline-block;\n}\n.ant-tree-checkbox-group-item {\n margin-right: 8px;\n}\n.ant-tree-checkbox-group-item:last-child {\n margin-right: 0;\n}\n.ant-tree-checkbox-group-item + .ant-tree-checkbox-group-item {\n margin-left: 0;\n}\n.ant-tree-checkbox-indeterminate .ant-tree-checkbox-inner {\n background-color: #fff;\n border-color: #d9d9d9;\n}\n.ant-tree-checkbox-indeterminate .ant-tree-checkbox-inner::after {\n top: 50%;\n left: 50%;\n width: 8px;\n height: 8px;\n background-color: #5b5ce1;\n border: 0;\n transform: translate(-50%, -50%) scale(1);\n opacity: 1;\n content: ' ';\n}\n.ant-tree-checkbox-indeterminate.ant-tree-checkbox-disabled .ant-tree-checkbox-inner::after {\n background-color: rgba(0, 0, 0, 0.25);\n border-color: rgba(0, 0, 0, 0.25);\n}\n.ant-tree-checkbox-rtl {\n direction: rtl;\n}\n.ant-tree-checkbox-group-rtl .ant-tree-checkbox-group-item {\n margin-right: 0;\n margin-left: 8px;\n}\n.ant-tree-checkbox-group-rtl .ant-tree-checkbox-group-item:last-child {\n margin-left: 0 !important;\n}\n.ant-tree-checkbox-group-rtl .ant-tree-checkbox-group-item + .ant-tree-checkbox-group-item {\n margin-left: 8px;\n}\n.ant-tree {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n background: #fff;\n border-radius: 5px;\n transition: background-color 0.3s;\n}\n.ant-tree-focused:not(:hover):not(.ant-tree-active-focused) {\n background: #f0f2ff;\n}\n.ant-tree-list-holder-inner {\n align-items: flex-start;\n}\n.ant-tree.ant-tree-block-node .ant-tree-list-holder-inner {\n align-items: stretch;\n}\n.ant-tree.ant-tree-block-node .ant-tree-list-holder-inner .ant-tree-node-content-wrapper {\n flex: auto;\n}\n.ant-tree.ant-tree-block-node .ant-tree-list-holder-inner .ant-tree-treenode.dragging {\n position: relative;\n}\n.ant-tree.ant-tree-block-node .ant-tree-list-holder-inner .ant-tree-treenode.dragging::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 4px;\n left: 0;\n border: 1px solid #5b5ce1;\n opacity: 0;\n animation: ant-tree-node-fx-do-not-use 0.3s;\n animation-play-state: running;\n animation-fill-mode: forwards;\n content: '';\n pointer-events: none;\n}\n.ant-tree .ant-tree-treenode {\n display: flex;\n align-items: flex-start;\n padding: 0 0 4px 0;\n outline: none;\n}\n.ant-tree .ant-tree-treenode-disabled .ant-tree-node-content-wrapper {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n}\n.ant-tree .ant-tree-treenode-disabled .ant-tree-node-content-wrapper:hover {\n background: transparent;\n}\n.ant-tree .ant-tree-treenode-active .ant-tree-node-content-wrapper {\n background: #f5f5f5;\n}\n.ant-tree .ant-tree-treenode:not(.ant-tree .ant-tree-treenode-disabled).filter-node .ant-tree-title {\n color: inherit;\n font-weight: 500;\n}\n.ant-tree .ant-tree-treenode-draggable .ant-tree-draggable-icon {\n width: 24px;\n line-height: 24px;\n text-align: center;\n visibility: visible;\n opacity: 0.2;\n transition: opacity 0.3s;\n}\n.ant-tree-treenode:hover .ant-tree .ant-tree-treenode-draggable .ant-tree-draggable-icon {\n opacity: 0.45;\n}\n.ant-tree .ant-tree-treenode-draggable.ant-tree-treenode-disabled .ant-tree-draggable-icon {\n visibility: hidden;\n}\n.ant-tree-indent {\n align-self: stretch;\n white-space: nowrap;\n user-select: none;\n}\n.ant-tree-indent-unit {\n display: inline-block;\n width: 24px;\n}\n.ant-tree-draggable-icon {\n visibility: hidden;\n}\n.ant-tree-switcher {\n position: relative;\n flex: none;\n align-self: stretch;\n width: 24px;\n margin: 0;\n line-height: 24px;\n text-align: center;\n cursor: pointer;\n user-select: none;\n}\n.ant-tree-switcher .ant-tree-switcher-icon,\n.ant-tree-switcher .ant-select-tree-switcher-icon {\n display: inline-block;\n font-size: 10px;\n vertical-align: baseline;\n}\n.ant-tree-switcher .ant-tree-switcher-icon svg,\n.ant-tree-switcher .ant-select-tree-switcher-icon svg {\n transition: transform 0.3s;\n}\n.ant-tree-switcher-noop {\n cursor: default;\n}\n.ant-tree-switcher_close .ant-tree-switcher-icon svg {\n transform: rotate(-90deg);\n}\n.ant-tree-switcher-loading-icon {\n color: #5b5ce1;\n}\n.ant-tree-switcher-leaf-line {\n position: relative;\n z-index: 1;\n display: inline-block;\n width: 100%;\n height: 100%;\n}\n.ant-tree-switcher-leaf-line::before {\n position: absolute;\n top: 0;\n right: 12px;\n bottom: -4px;\n margin-left: -1px;\n border-right: 1px solid #d9d9d9;\n content: ' ';\n}\n.ant-tree-switcher-leaf-line::after {\n position: absolute;\n width: 10px;\n height: 14px;\n border-bottom: 1px solid #d9d9d9;\n content: ' ';\n}\n.ant-tree-checkbox {\n top: initial;\n margin: 4px 8px 0 0;\n}\n.ant-tree .ant-tree-node-content-wrapper {\n position: relative;\n z-index: auto;\n min-height: 24px;\n margin: 0;\n padding: 0 4px;\n color: inherit;\n line-height: 24px;\n background: transparent;\n border-radius: 5px;\n cursor: pointer;\n transition: all 0.3s, border 0s, line-height 0s, box-shadow 0s;\n}\n.ant-tree .ant-tree-node-content-wrapper:hover {\n background-color: #f5f5f5;\n}\n.ant-tree .ant-tree-node-content-wrapper.ant-tree-node-selected {\n background-color: #f0f2ff;\n}\n.ant-tree .ant-tree-node-content-wrapper .ant-tree-iconEle {\n display: inline-block;\n width: 24px;\n height: 24px;\n line-height: 24px;\n text-align: center;\n vertical-align: top;\n}\n.ant-tree .ant-tree-node-content-wrapper .ant-tree-iconEle:empty {\n display: none;\n}\n.ant-tree-unselectable .ant-tree-node-content-wrapper:hover {\n background-color: transparent;\n}\n.ant-tree-node-content-wrapper {\n line-height: 24px;\n user-select: none;\n}\n.ant-tree-node-content-wrapper .ant-tree-drop-indicator {\n position: absolute;\n z-index: 1;\n height: 2px;\n background-color: #5b5ce1;\n border-radius: 1px;\n pointer-events: none;\n}\n.ant-tree-node-content-wrapper .ant-tree-drop-indicator::after {\n position: absolute;\n top: -3px;\n left: -6px;\n width: 8px;\n height: 8px;\n background-color: transparent;\n border: 2px solid #5b5ce1;\n border-radius: 50%;\n content: '';\n}\n.ant-tree .ant-tree-treenode.drop-container > [draggable] {\n box-shadow: 0 0 0 2px #5b5ce1;\n}\n.ant-tree-show-line .ant-tree-indent-unit {\n position: relative;\n height: 100%;\n}\n.ant-tree-show-line .ant-tree-indent-unit::before {\n position: absolute;\n top: 0;\n right: 12px;\n bottom: -4px;\n border-right: 1px solid #d9d9d9;\n content: '';\n}\n.ant-tree-show-line .ant-tree-indent-unit-end::before {\n display: none;\n}\n.ant-tree-show-line .ant-tree-switcher {\n background: #fff;\n}\n.ant-tree-show-line .ant-tree-switcher-line-icon {\n vertical-align: -0.15em;\n}\n.ant-tree .ant-tree-treenode-leaf-last .ant-tree-switcher-leaf-line::before {\n top: auto !important;\n bottom: auto !important;\n height: 14px !important;\n}\n.ant-tree-rtl {\n direction: rtl;\n}\n.ant-tree-rtl .ant-tree-node-content-wrapper[draggable='true'] .ant-tree-drop-indicator::after {\n right: -6px;\n left: unset;\n}\n.ant-tree .ant-tree-treenode-rtl {\n direction: rtl;\n}\n.ant-tree-rtl .ant-tree-switcher_close .ant-tree-switcher-icon svg {\n transform: rotate(90deg);\n}\n.ant-tree-rtl.ant-tree-show-line .ant-tree-indent-unit::before {\n right: auto;\n left: -13px;\n border-right: none;\n border-left: 1px solid #d9d9d9;\n}\n.ant-tree-rtl .ant-tree-checkbox {\n margin: 4px 0 0 8px;\n}\n.ant-tree-select-dropdown-rtl .ant-select-tree-checkbox {\n margin: 4px 0 0 8px;\n}\n.ant-select-tree-checkbox {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n top: 0.2em;\n line-height: 1;\n white-space: nowrap;\n outline: none;\n cursor: pointer;\n}\n.ant-select-tree-checkbox-wrapper:hover .ant-select-tree-checkbox-inner,\n.ant-select-tree-checkbox:hover .ant-select-tree-checkbox-inner,\n.ant-select-tree-checkbox-input:focus + .ant-select-tree-checkbox-inner {\n border-color: #5b5ce1;\n}\n.ant-select-tree-checkbox-checked::after {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 1px solid #5b5ce1;\n border-radius: 5px;\n visibility: hidden;\n animation: antCheckboxEffect 0.36s ease-in-out;\n animation-fill-mode: backwards;\n content: '';\n}\n.ant-select-tree-checkbox:hover::after,\n.ant-select-tree-checkbox-wrapper:hover .ant-select-tree-checkbox::after {\n visibility: visible;\n}\n.ant-select-tree-checkbox-inner {\n position: relative;\n top: 0;\n left: 0;\n display: block;\n width: 16px;\n height: 16px;\n direction: ltr;\n background-color: #fff;\n border: 1px solid #d9d9d9;\n border-radius: 5px;\n border-collapse: separate;\n transition: all 0.3s;\n}\n.ant-select-tree-checkbox-inner::after {\n position: absolute;\n top: 50%;\n left: 21.5%;\n display: table;\n width: 5.71428571px;\n height: 9.14285714px;\n border: 2px solid #fff;\n border-top: 0;\n border-left: 0;\n transform: rotate(45deg) scale(0) translate(-50%, -50%);\n opacity: 0;\n transition: all 0.1s cubic-bezier(0.71, -0.46, 0.88, 0.6), opacity 0.1s;\n content: ' ';\n}\n.ant-select-tree-checkbox-input {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n width: 100%;\n height: 100%;\n cursor: pointer;\n opacity: 0;\n}\n.ant-select-tree-checkbox-checked .ant-select-tree-checkbox-inner::after {\n position: absolute;\n display: table;\n border: 2px solid #fff;\n border-top: 0;\n border-left: 0;\n transform: rotate(45deg) scale(1) translate(-50%, -50%);\n opacity: 1;\n transition: all 0.2s cubic-bezier(0.12, 0.4, 0.29, 1.46) 0.1s;\n content: ' ';\n}\n.ant-select-tree-checkbox-checked .ant-select-tree-checkbox-inner {\n background-color: #5b5ce1;\n border-color: #5b5ce1;\n}\n.ant-select-tree-checkbox-disabled {\n cursor: not-allowed;\n}\n.ant-select-tree-checkbox-disabled.ant-select-tree-checkbox-checked .ant-select-tree-checkbox-inner::after {\n border-color: rgba(0, 0, 0, 0.25);\n animation-name: none;\n}\n.ant-select-tree-checkbox-disabled .ant-select-tree-checkbox-input {\n cursor: not-allowed;\n pointer-events: none;\n}\n.ant-select-tree-checkbox-disabled .ant-select-tree-checkbox-inner {\n background-color: #f5f5f5;\n border-color: #d9d9d9 !important;\n}\n.ant-select-tree-checkbox-disabled .ant-select-tree-checkbox-inner::after {\n border-color: #f5f5f5;\n border-collapse: separate;\n animation-name: none;\n}\n.ant-select-tree-checkbox-disabled + span {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n}\n.ant-select-tree-checkbox-disabled:hover::after,\n.ant-select-tree-checkbox-wrapper:hover .ant-select-tree-checkbox-disabled::after {\n visibility: hidden;\n}\n.ant-select-tree-checkbox-wrapper {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n display: inline-flex;\n align-items: baseline;\n line-height: unset;\n cursor: pointer;\n}\n.ant-select-tree-checkbox-wrapper::after {\n display: inline-block;\n width: 0;\n overflow: hidden;\n content: '\\a0';\n}\n.ant-select-tree-checkbox-wrapper.ant-select-tree-checkbox-wrapper-disabled {\n cursor: not-allowed;\n}\n.ant-select-tree-checkbox-wrapper + .ant-select-tree-checkbox-wrapper {\n margin-left: 8px;\n}\n.ant-select-tree-checkbox-wrapper.ant-select-tree-checkbox-wrapper-in-form-item input[type='checkbox'] {\n width: 14px;\n height: 14px;\n}\n.ant-select-tree-checkbox + span {\n padding-right: 8px;\n padding-left: 8px;\n}\n.ant-select-tree-checkbox-group {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n display: inline-block;\n}\n.ant-select-tree-checkbox-group-item {\n margin-right: 8px;\n}\n.ant-select-tree-checkbox-group-item:last-child {\n margin-right: 0;\n}\n.ant-select-tree-checkbox-group-item + .ant-select-tree-checkbox-group-item {\n margin-left: 0;\n}\n.ant-select-tree-checkbox-indeterminate .ant-select-tree-checkbox-inner {\n background-color: #fff;\n border-color: #d9d9d9;\n}\n.ant-select-tree-checkbox-indeterminate .ant-select-tree-checkbox-inner::after {\n top: 50%;\n left: 50%;\n width: 8px;\n height: 8px;\n background-color: #5b5ce1;\n border: 0;\n transform: translate(-50%, -50%) scale(1);\n opacity: 1;\n content: ' ';\n}\n.ant-select-tree-checkbox-indeterminate.ant-select-tree-checkbox-disabled .ant-select-tree-checkbox-inner::after {\n background-color: rgba(0, 0, 0, 0.25);\n border-color: rgba(0, 0, 0, 0.25);\n}\n.ant-select-tree-checkbox-rtl {\n direction: rtl;\n}\n.ant-select-tree-checkbox-group-rtl .ant-select-tree-checkbox-group-item {\n margin-right: 0;\n margin-left: 8px;\n}\n.ant-select-tree-checkbox-group-rtl .ant-select-tree-checkbox-group-item:last-child {\n margin-left: 0 !important;\n}\n.ant-select-tree-checkbox-group-rtl .ant-select-tree-checkbox-group-item + .ant-select-tree-checkbox-group-item {\n margin-left: 8px;\n}\n.ant-tree-select-dropdown {\n padding: 8px 4px;\n}\n.ant-tree-select-dropdown-rtl {\n direction: rtl;\n}\n.ant-tree-select-dropdown .ant-select-tree {\n border-radius: 0;\n}\n.ant-tree-select-dropdown .ant-select-tree-list-holder-inner {\n align-items: stretch;\n}\n.ant-tree-select-dropdown .ant-select-tree-list-holder-inner .ant-select-tree-treenode .ant-select-tree-node-content-wrapper {\n flex: auto;\n}\n.ant-select-tree {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n background: #fff;\n border-radius: 5px;\n transition: background-color 0.3s;\n}\n.ant-select-tree-focused:not(:hover):not(.ant-select-tree-active-focused) {\n background: #f0f2ff;\n}\n.ant-select-tree-list-holder-inner {\n align-items: flex-start;\n}\n.ant-select-tree.ant-select-tree-block-node .ant-select-tree-list-holder-inner {\n align-items: stretch;\n}\n.ant-select-tree.ant-select-tree-block-node .ant-select-tree-list-holder-inner .ant-select-tree-node-content-wrapper {\n flex: auto;\n}\n.ant-select-tree.ant-select-tree-block-node .ant-select-tree-list-holder-inner .ant-select-tree-treenode.dragging {\n position: relative;\n}\n.ant-select-tree.ant-select-tree-block-node .ant-select-tree-list-holder-inner .ant-select-tree-treenode.dragging::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 4px;\n left: 0;\n border: 1px solid #5b5ce1;\n opacity: 0;\n animation: ant-tree-node-fx-do-not-use 0.3s;\n animation-play-state: running;\n animation-fill-mode: forwards;\n content: '';\n pointer-events: none;\n}\n.ant-select-tree .ant-select-tree-treenode {\n display: flex;\n align-items: flex-start;\n padding: 0 0 4px 0;\n outline: none;\n}\n.ant-select-tree .ant-select-tree-treenode-disabled .ant-select-tree-node-content-wrapper {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n}\n.ant-select-tree .ant-select-tree-treenode-disabled .ant-select-tree-node-content-wrapper:hover {\n background: transparent;\n}\n.ant-select-tree .ant-select-tree-treenode-active .ant-select-tree-node-content-wrapper {\n background: #f5f5f5;\n}\n.ant-select-tree .ant-select-tree-treenode:not(.ant-select-tree .ant-select-tree-treenode-disabled).filter-node .ant-select-tree-title {\n color: inherit;\n font-weight: 500;\n}\n.ant-select-tree .ant-select-tree-treenode-draggable .ant-select-tree-draggable-icon {\n width: 24px;\n line-height: 24px;\n text-align: center;\n visibility: visible;\n opacity: 0.2;\n transition: opacity 0.3s;\n}\n.ant-select-tree-treenode:hover .ant-select-tree .ant-select-tree-treenode-draggable .ant-select-tree-draggable-icon {\n opacity: 0.45;\n}\n.ant-select-tree .ant-select-tree-treenode-draggable.ant-select-tree-treenode-disabled .ant-select-tree-draggable-icon {\n visibility: hidden;\n}\n.ant-select-tree-indent {\n align-self: stretch;\n white-space: nowrap;\n user-select: none;\n}\n.ant-select-tree-indent-unit {\n display: inline-block;\n width: 24px;\n}\n.ant-select-tree-draggable-icon {\n visibility: hidden;\n}\n.ant-select-tree-switcher {\n position: relative;\n flex: none;\n align-self: stretch;\n width: 24px;\n margin: 0;\n line-height: 24px;\n text-align: center;\n cursor: pointer;\n user-select: none;\n}\n.ant-select-tree-switcher .ant-tree-switcher-icon,\n.ant-select-tree-switcher .ant-select-tree-switcher-icon {\n display: inline-block;\n font-size: 10px;\n vertical-align: baseline;\n}\n.ant-select-tree-switcher .ant-tree-switcher-icon svg,\n.ant-select-tree-switcher .ant-select-tree-switcher-icon svg {\n transition: transform 0.3s;\n}\n.ant-select-tree-switcher-noop {\n cursor: default;\n}\n.ant-select-tree-switcher_close .ant-select-tree-switcher-icon svg {\n transform: rotate(-90deg);\n}\n.ant-select-tree-switcher-loading-icon {\n color: #5b5ce1;\n}\n.ant-select-tree-switcher-leaf-line {\n position: relative;\n z-index: 1;\n display: inline-block;\n width: 100%;\n height: 100%;\n}\n.ant-select-tree-switcher-leaf-line::before {\n position: absolute;\n top: 0;\n right: 12px;\n bottom: -4px;\n margin-left: -1px;\n border-right: 1px solid #d9d9d9;\n content: ' ';\n}\n.ant-select-tree-switcher-leaf-line::after {\n position: absolute;\n width: 10px;\n height: 14px;\n border-bottom: 1px solid #d9d9d9;\n content: ' ';\n}\n.ant-select-tree-checkbox {\n top: initial;\n margin: 4px 8px 0 0;\n}\n.ant-select-tree .ant-select-tree-node-content-wrapper {\n position: relative;\n z-index: auto;\n min-height: 24px;\n margin: 0;\n padding: 0 4px;\n color: inherit;\n line-height: 24px;\n background: transparent;\n border-radius: 5px;\n cursor: pointer;\n transition: all 0.3s, border 0s, line-height 0s, box-shadow 0s;\n}\n.ant-select-tree .ant-select-tree-node-content-wrapper:hover {\n background-color: #f5f5f5;\n}\n.ant-select-tree .ant-select-tree-node-content-wrapper.ant-select-tree-node-selected {\n background-color: #f0f2ff;\n}\n.ant-select-tree .ant-select-tree-node-content-wrapper .ant-select-tree-iconEle {\n display: inline-block;\n width: 24px;\n height: 24px;\n line-height: 24px;\n text-align: center;\n vertical-align: top;\n}\n.ant-select-tree .ant-select-tree-node-content-wrapper .ant-select-tree-iconEle:empty {\n display: none;\n}\n.ant-select-tree-unselectable .ant-select-tree-node-content-wrapper:hover {\n background-color: transparent;\n}\n.ant-select-tree-node-content-wrapper {\n line-height: 24px;\n user-select: none;\n}\n.ant-select-tree-node-content-wrapper .ant-tree-drop-indicator {\n position: absolute;\n z-index: 1;\n height: 2px;\n background-color: #5b5ce1;\n border-radius: 1px;\n pointer-events: none;\n}\n.ant-select-tree-node-content-wrapper .ant-tree-drop-indicator::after {\n position: absolute;\n top: -3px;\n left: -6px;\n width: 8px;\n height: 8px;\n background-color: transparent;\n border: 2px solid #5b5ce1;\n border-radius: 50%;\n content: '';\n}\n.ant-select-tree .ant-select-tree-treenode.drop-container > [draggable] {\n box-shadow: 0 0 0 2px #5b5ce1;\n}\n.ant-select-tree-show-line .ant-select-tree-indent-unit {\n position: relative;\n height: 100%;\n}\n.ant-select-tree-show-line .ant-select-tree-indent-unit::before {\n position: absolute;\n top: 0;\n right: 12px;\n bottom: -4px;\n border-right: 1px solid #d9d9d9;\n content: '';\n}\n.ant-select-tree-show-line .ant-select-tree-indent-unit-end::before {\n display: none;\n}\n.ant-select-tree-show-line .ant-select-tree-switcher {\n background: #fff;\n}\n.ant-select-tree-show-line .ant-select-tree-switcher-line-icon {\n vertical-align: -0.15em;\n}\n.ant-select-tree .ant-select-tree-treenode-leaf-last .ant-select-tree-switcher-leaf-line::before {\n top: auto !important;\n bottom: auto !important;\n height: 14px !important;\n}\n.ant-tree-select-dropdown-rtl .ant-select-tree .ant-select-tree-switcher_close .ant-select-tree-switcher-icon svg {\n transform: rotate(90deg);\n}\n.ant-tree-select-dropdown-rtl .ant-select-tree .ant-select-tree-switcher-loading-icon {\n transform: scaleY(-1);\n}\n.ant-typography {\n color: rgba(0, 0, 0, 0.85);\n overflow-wrap: break-word;\n}\n.ant-typography.ant-typography-secondary {\n color: rgba(0, 0, 0, 0.45);\n}\n.ant-typography.ant-typography-success {\n color: #52c41a;\n}\n.ant-typography.ant-typography-warning {\n color: #faad14;\n}\n.ant-typography.ant-typography-danger {\n color: #ff4d4f;\n}\na.ant-typography.ant-typography-danger:active,\na.ant-typography.ant-typography-danger:focus {\n color: #d9363e;\n}\na.ant-typography.ant-typography-danger:hover {\n color: #ff7875;\n}\n.ant-typography.ant-typography-disabled {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n user-select: none;\n}\ndiv.ant-typography,\n.ant-typography p {\n margin-bottom: 1em;\n}\nh1.ant-typography,\ndiv.ant-typography-h1,\ndiv.ant-typography-h1 > textarea,\n.ant-typography h1 {\n margin-bottom: 0.5em;\n color: rgba(0, 0, 0, 0.85);\n font-weight: 600;\n font-size: 38px;\n line-height: 1.23;\n}\nh2.ant-typography,\ndiv.ant-typography-h2,\ndiv.ant-typography-h2 > textarea,\n.ant-typography h2 {\n margin-bottom: 0.5em;\n color: rgba(0, 0, 0, 0.85);\n font-weight: 600;\n font-size: 30px;\n line-height: 1.35;\n}\nh3.ant-typography,\ndiv.ant-typography-h3,\ndiv.ant-typography-h3 > textarea,\n.ant-typography h3 {\n margin-bottom: 0.5em;\n color: rgba(0, 0, 0, 0.85);\n font-weight: 600;\n font-size: 24px;\n line-height: 1.35;\n}\nh4.ant-typography,\ndiv.ant-typography-h4,\ndiv.ant-typography-h4 > textarea,\n.ant-typography h4 {\n margin-bottom: 0.5em;\n color: rgba(0, 0, 0, 0.85);\n font-weight: 600;\n font-size: 20px;\n line-height: 1.4;\n}\nh5.ant-typography,\ndiv.ant-typography-h5,\ndiv.ant-typography-h5 > textarea,\n.ant-typography h5 {\n margin-bottom: 0.5em;\n color: rgba(0, 0, 0, 0.85);\n font-weight: 600;\n font-size: 16px;\n line-height: 1.5;\n}\n.ant-typography + h1.ant-typography,\n.ant-typography + h2.ant-typography,\n.ant-typography + h3.ant-typography,\n.ant-typography + h4.ant-typography,\n.ant-typography + h5.ant-typography {\n margin-top: 1.2em;\n}\n.ant-typography div + h1,\n.ant-typography ul + h1,\n.ant-typography li + h1,\n.ant-typography p + h1,\n.ant-typography h1 + h1,\n.ant-typography h2 + h1,\n.ant-typography h3 + h1,\n.ant-typography h4 + h1,\n.ant-typography h5 + h1,\n.ant-typography div + h2,\n.ant-typography ul + h2,\n.ant-typography li + h2,\n.ant-typography p + h2,\n.ant-typography h1 + h2,\n.ant-typography h2 + h2,\n.ant-typography h3 + h2,\n.ant-typography h4 + h2,\n.ant-typography h5 + h2,\n.ant-typography div + h3,\n.ant-typography ul + h3,\n.ant-typography li + h3,\n.ant-typography p + h3,\n.ant-typography h1 + h3,\n.ant-typography h2 + h3,\n.ant-typography h3 + h3,\n.ant-typography h4 + h3,\n.ant-typography h5 + h3,\n.ant-typography div + h4,\n.ant-typography ul + h4,\n.ant-typography li + h4,\n.ant-typography p + h4,\n.ant-typography h1 + h4,\n.ant-typography h2 + h4,\n.ant-typography h3 + h4,\n.ant-typography h4 + h4,\n.ant-typography h5 + h4,\n.ant-typography div + h5,\n.ant-typography ul + h5,\n.ant-typography li + h5,\n.ant-typography p + h5,\n.ant-typography h1 + h5,\n.ant-typography h2 + h5,\n.ant-typography h3 + h5,\n.ant-typography h4 + h5,\n.ant-typography h5 + h5 {\n margin-top: 1.2em;\n}\na.ant-typography-ellipsis,\nspan.ant-typography-ellipsis {\n display: inline-block;\n max-width: 100%;\n}\na.ant-typography,\n.ant-typography a {\n color: #5b5ce1;\n outline: none;\n cursor: pointer;\n transition: color 0.3s;\n text-decoration: none;\n}\na.ant-typography:focus-visible,\n.ant-typography a:focus-visible,\na.ant-typography:hover,\n.ant-typography a:hover {\n color: #8588ed;\n}\na.ant-typography:active,\n.ant-typography a:active {\n color: #4541ba;\n}\na.ant-typography:active,\n.ant-typography a:active,\na.ant-typography:hover,\n.ant-typography a:hover {\n text-decoration: none;\n}\na.ant-typography[disabled],\n.ant-typography a[disabled],\na.ant-typography.ant-typography-disabled,\n.ant-typography a.ant-typography-disabled {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n}\na.ant-typography[disabled]:active,\n.ant-typography a[disabled]:active,\na.ant-typography.ant-typography-disabled:active,\n.ant-typography a.ant-typography-disabled:active,\na.ant-typography[disabled]:hover,\n.ant-typography a[disabled]:hover,\na.ant-typography.ant-typography-disabled:hover,\n.ant-typography a.ant-typography-disabled:hover {\n color: rgba(0, 0, 0, 0.25);\n}\na.ant-typography[disabled]:active,\n.ant-typography a[disabled]:active,\na.ant-typography.ant-typography-disabled:active,\n.ant-typography a.ant-typography-disabled:active {\n pointer-events: none;\n}\n.ant-typography code {\n margin: 0 0.2em;\n padding: 0.2em 0.4em 0.1em;\n font-size: 85%;\n background: rgba(150, 150, 150, 0.1);\n border: 1px solid rgba(100, 100, 100, 0.2);\n border-radius: 3px;\n}\n.ant-typography kbd {\n margin: 0 0.2em;\n padding: 0.15em 0.4em 0.1em;\n font-size: 90%;\n background: rgba(150, 150, 150, 0.06);\n border: 1px solid rgba(100, 100, 100, 0.2);\n border-bottom-width: 2px;\n border-radius: 3px;\n}\n.ant-typography mark {\n padding: 0;\n background-color: #ffe58f;\n}\n.ant-typography u,\n.ant-typography ins {\n text-decoration: underline;\n text-decoration-skip-ink: auto;\n}\n.ant-typography s,\n.ant-typography del {\n text-decoration: line-through;\n}\n.ant-typography strong {\n font-weight: 600;\n}\n.ant-typography-expand,\n.ant-typography-edit,\n.ant-typography-copy {\n color: #5b5ce1;\n outline: none;\n cursor: pointer;\n transition: color 0.3s;\n margin-left: 4px;\n}\n.ant-typography-expand:focus-visible,\n.ant-typography-edit:focus-visible,\n.ant-typography-copy:focus-visible,\n.ant-typography-expand:hover,\n.ant-typography-edit:hover,\n.ant-typography-copy:hover {\n color: #8588ed;\n}\n.ant-typography-expand:active,\n.ant-typography-edit:active,\n.ant-typography-copy:active {\n color: #4541ba;\n}\n.ant-typography-copy-success,\n.ant-typography-copy-success:hover,\n.ant-typography-copy-success:focus {\n color: #52c41a;\n}\n.ant-typography-edit-content {\n position: relative;\n}\ndiv.ant-typography-edit-content {\n left: -12px;\n margin-top: -5px;\n margin-bottom: calc(1em - 4px - 1px);\n}\n.ant-typography-edit-content-confirm {\n position: absolute;\n right: 10px;\n bottom: 8px;\n color: rgba(0, 0, 0, 0.45);\n font-weight: normal;\n font-size: 14px;\n font-style: normal;\n pointer-events: none;\n}\n.ant-typography-edit-content textarea {\n height: 1em;\n margin: 0 !important;\n /* stylelint-disable-next-line property-no-vendor-prefix */\n -moz-transition: none;\n}\n.ant-typography ul,\n.ant-typography ol {\n margin: 0 0 1em;\n padding: 0;\n}\n.ant-typography ul li,\n.ant-typography ol li {\n margin: 0 0 0 20px;\n padding: 0 0 0 4px;\n}\n.ant-typography ul {\n list-style-type: circle;\n}\n.ant-typography ul ul {\n list-style-type: disc;\n}\n.ant-typography ol {\n list-style-type: decimal;\n}\n.ant-typography pre,\n.ant-typography blockquote {\n margin: 1em 0;\n}\n.ant-typography pre {\n padding: 0.4em 0.6em;\n white-space: pre-wrap;\n word-wrap: break-word;\n background: rgba(150, 150, 150, 0.1);\n border: 1px solid rgba(100, 100, 100, 0.2);\n border-radius: 3px;\n}\n.ant-typography pre code {\n display: inline;\n margin: 0;\n padding: 0;\n font-size: inherit;\n font-family: inherit;\n background: transparent;\n border: 0;\n}\n.ant-typography blockquote {\n padding: 0 0 0 0.6em;\n border-left: 4px solid rgba(100, 100, 100, 0.2);\n opacity: 0.85;\n}\n.ant-typography-single-line {\n white-space: nowrap;\n}\n.ant-typography-ellipsis-single-line {\n overflow: hidden;\n text-overflow: ellipsis;\n}\na.ant-typography-ellipsis-single-line,\nspan.ant-typography-ellipsis-single-line {\n vertical-align: bottom;\n}\n.ant-typography-ellipsis-multiple-line {\n /* stylelint-disable-next-line value-no-vendor-prefix */\n display: -webkit-box;\n overflow: hidden;\n -webkit-line-clamp: 3;\n /*! autoprefixer: ignore next */\n -webkit-box-orient: vertical;\n}\n.ant-typography-rtl {\n direction: rtl;\n}\n.ant-typography-rtl .ant-typography-expand,\n.ant-typography-rtl .ant-typography-edit,\n.ant-typography-rtl .ant-typography-copy {\n margin-right: 4px;\n margin-left: 0;\n}\n.ant-typography-rtl .ant-typography-expand {\n float: left;\n}\ndiv.ant-typography-edit-content.ant-typography-rtl {\n right: -12px;\n left: auto;\n}\n.ant-typography-rtl .ant-typography-edit-content-confirm {\n right: auto;\n left: 10px;\n}\n.ant-typography-rtl.ant-typography ul li,\n.ant-typography-rtl.ant-typography ol li {\n margin: 0 20px 0 0;\n padding: 0 4px 0 0;\n}\n.ant-upload {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n outline: 0;\n}\n.ant-upload p {\n margin: 0;\n}\n.ant-upload-btn {\n display: block;\n width: 100%;\n outline: none;\n}\n.ant-upload input[type='file'] {\n cursor: pointer;\n}\n.ant-upload.ant-upload-select {\n display: inline-block;\n}\n.ant-upload.ant-upload-disabled {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n}\n.ant-upload.ant-upload-select-picture-card {\n width: 104px;\n height: 104px;\n margin-right: 8px;\n margin-bottom: 8px;\n text-align: center;\n vertical-align: top;\n background-color: #fafafa;\n border: 1px dashed #d9d9d9;\n border-radius: 5px;\n cursor: pointer;\n transition: border-color 0.3s;\n}\n.ant-upload.ant-upload-select-picture-card > .ant-upload {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n text-align: center;\n}\n.ant-upload.ant-upload-select-picture-card:hover {\n border-color: #5b5ce1;\n}\n.ant-upload-disabled.ant-upload.ant-upload-select-picture-card:hover {\n border-color: #d9d9d9;\n}\n.ant-upload.ant-upload-drag {\n position: relative;\n width: 100%;\n height: 100%;\n text-align: center;\n background: #fafafa;\n border: 1px dashed #d9d9d9;\n border-radius: 5px;\n cursor: pointer;\n transition: border-color 0.3s;\n}\n.ant-upload.ant-upload-drag .ant-upload {\n padding: 16px 0;\n}\n.ant-upload.ant-upload-drag.ant-upload-drag-hover:not(.ant-upload-disabled) {\n border-color: #4541ba;\n}\n.ant-upload.ant-upload-drag.ant-upload-disabled {\n cursor: not-allowed;\n}\n.ant-upload.ant-upload-drag .ant-upload-btn {\n display: table;\n height: 100%;\n}\n.ant-upload.ant-upload-drag .ant-upload-drag-container {\n display: table-cell;\n vertical-align: middle;\n}\n.ant-upload.ant-upload-drag:not(.ant-upload-disabled):hover {\n border-color: #8588ed;\n}\n.ant-upload.ant-upload-drag p.ant-upload-drag-icon {\n margin-bottom: 20px;\n}\n.ant-upload.ant-upload-drag p.ant-upload-drag-icon .anticon {\n color: #8588ed;\n font-size: 48px;\n}\n.ant-upload.ant-upload-drag p.ant-upload-text {\n margin: 0 0 4px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 16px;\n}\n.ant-upload.ant-upload-drag p.ant-upload-hint {\n color: rgba(0, 0, 0, 0.45);\n font-size: 14px;\n}\n.ant-upload.ant-upload-drag .anticon-plus {\n color: rgba(0, 0, 0, 0.25);\n font-size: 30px;\n transition: all 0.3s;\n}\n.ant-upload.ant-upload-drag .anticon-plus:hover {\n color: rgba(0, 0, 0, 0.45);\n}\n.ant-upload.ant-upload-drag:hover .anticon-plus {\n color: rgba(0, 0, 0, 0.45);\n}\n.ant-upload-picture-card-wrapper {\n display: inline-block;\n width: 100%;\n}\n.ant-upload-picture-card-wrapper::before {\n display: table;\n content: '';\n}\n.ant-upload-picture-card-wrapper::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-upload-picture-card-wrapper::before {\n display: table;\n content: '';\n}\n.ant-upload-picture-card-wrapper::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-upload-list {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n list-style: none;\n font-feature-settings: 'tnum';\n line-height: 1.5715;\n}\n.ant-upload-list::before {\n display: table;\n content: '';\n}\n.ant-upload-list::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-upload-list::before {\n display: table;\n content: '';\n}\n.ant-upload-list::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-upload-list-item {\n position: relative;\n height: 22.001px;\n margin-top: 8px;\n font-size: 14px;\n}\n.ant-upload-list-item-name {\n display: inline-block;\n width: 100%;\n padding-left: 22px;\n overflow: hidden;\n line-height: 1.5715;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.ant-upload-list-item-card-actions {\n position: absolute;\n right: 0;\n}\n.ant-upload-list-item-card-actions-btn {\n opacity: 0;\n}\n.ant-upload-list-item-card-actions-btn.ant-btn-sm {\n height: 22.001px;\n line-height: 1;\n vertical-align: top;\n}\n.ant-upload-list-item-card-actions.picture {\n top: 22px;\n line-height: 0;\n}\n.ant-upload-list-item-card-actions-btn:focus,\n.ant-upload-list-item-card-actions.picture .ant-upload-list-item-card-actions-btn {\n opacity: 1;\n}\n.ant-upload-list-item-card-actions .anticon {\n color: rgba(0, 0, 0, 0.45);\n transition: all 0.3s;\n}\n.ant-upload-list-item-card-actions:hover .anticon {\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-upload-list-item-info {\n height: 100%;\n transition: background-color 0.3s;\n}\n.ant-upload-list-item-info > span {\n display: block;\n width: 100%;\n height: 100%;\n}\n.ant-upload-list-item-info .anticon-loading .anticon,\n.ant-upload-list-item-info .ant-upload-text-icon .anticon {\n position: absolute;\n top: 5px;\n color: rgba(0, 0, 0, 0.45);\n font-size: 14px;\n}\n.ant-upload-list-item:hover .ant-upload-list-item-info {\n background-color: #f5f5f5;\n}\n.ant-upload-list-item:hover .ant-upload-list-item-card-actions-btn {\n opacity: 1;\n}\n.ant-upload-list-item-error,\n.ant-upload-list-item-error .ant-upload-text-icon > .anticon,\n.ant-upload-list-item-error .ant-upload-list-item-name {\n color: #ff4d4f;\n}\n.ant-upload-list-item-error .ant-upload-list-item-card-actions .anticon {\n color: #ff4d4f;\n}\n.ant-upload-list-item-error .ant-upload-list-item-card-actions-btn {\n opacity: 1;\n}\n.ant-upload-list-item-progress {\n position: absolute;\n bottom: -12px;\n width: 100%;\n padding-left: 26px;\n font-size: 14px;\n line-height: 0;\n}\n.ant-upload-list-picture .ant-upload-list-item,\n.ant-upload-list-picture-card .ant-upload-list-item {\n position: relative;\n height: 66px;\n padding: 8px;\n border: 1px solid #d9d9d9;\n border-radius: 5px;\n}\n.ant-upload-list-picture .ant-upload-list-item:hover,\n.ant-upload-list-picture-card .ant-upload-list-item:hover {\n background: transparent;\n}\n.ant-upload-list-picture .ant-upload-list-item-error,\n.ant-upload-list-picture-card .ant-upload-list-item-error {\n border-color: #ff4d4f;\n}\n.ant-upload-list-picture .ant-upload-list-item-info,\n.ant-upload-list-picture-card .ant-upload-list-item-info {\n padding: 0;\n}\n.ant-upload-list-picture .ant-upload-list-item:hover .ant-upload-list-item-info,\n.ant-upload-list-picture-card .ant-upload-list-item:hover .ant-upload-list-item-info {\n background: transparent;\n}\n.ant-upload-list-picture .ant-upload-list-item-uploading,\n.ant-upload-list-picture-card .ant-upload-list-item-uploading {\n border-style: dashed;\n}\n.ant-upload-list-picture .ant-upload-list-item-thumbnail,\n.ant-upload-list-picture-card .ant-upload-list-item-thumbnail {\n width: 48px;\n height: 48px;\n line-height: 60px;\n text-align: center;\n opacity: 0.8;\n}\n.ant-upload-list-picture .ant-upload-list-item-thumbnail .anticon,\n.ant-upload-list-picture-card .ant-upload-list-item-thumbnail .anticon {\n font-size: 26px;\n}\n.ant-upload-list-picture .ant-upload-list-item-error .ant-upload-list-item-thumbnail .anticon svg path[fill='#e6f7ff'],\n.ant-upload-list-picture-card .ant-upload-list-item-error .ant-upload-list-item-thumbnail .anticon svg path[fill='#e6f7ff'] {\n fill: #fff2f0;\n}\n.ant-upload-list-picture .ant-upload-list-item-error .ant-upload-list-item-thumbnail .anticon svg path[fill='#1890ff'],\n.ant-upload-list-picture-card .ant-upload-list-item-error .ant-upload-list-item-thumbnail .anticon svg path[fill='#1890ff'] {\n fill: #ff4d4f;\n}\n.ant-upload-list-picture .ant-upload-list-item-icon,\n.ant-upload-list-picture-card .ant-upload-list-item-icon {\n position: absolute;\n top: 50%;\n left: 50%;\n font-size: 26px;\n transform: translate(-50%, -50%);\n}\n.ant-upload-list-picture .ant-upload-list-item-icon .anticon,\n.ant-upload-list-picture-card .ant-upload-list-item-icon .anticon {\n font-size: 26px;\n}\n.ant-upload-list-picture .ant-upload-list-item-image,\n.ant-upload-list-picture-card .ant-upload-list-item-image {\n max-width: 100%;\n}\n.ant-upload-list-picture .ant-upload-list-item-thumbnail img,\n.ant-upload-list-picture-card .ant-upload-list-item-thumbnail img {\n display: block;\n width: 48px;\n height: 48px;\n overflow: hidden;\n}\n.ant-upload-list-picture .ant-upload-list-item-name,\n.ant-upload-list-picture-card .ant-upload-list-item-name {\n display: inline-block;\n box-sizing: border-box;\n max-width: 100%;\n margin: 0 0 0 8px;\n padding-right: 8px;\n padding-left: 48px;\n overflow: hidden;\n line-height: 44px;\n white-space: nowrap;\n text-overflow: ellipsis;\n transition: all 0.3s;\n}\n.ant-upload-list-picture .ant-upload-list-item-uploading .ant-upload-list-item-name,\n.ant-upload-list-picture-card .ant-upload-list-item-uploading .ant-upload-list-item-name {\n margin-bottom: 12px;\n}\n.ant-upload-list-picture .ant-upload-list-item-progress,\n.ant-upload-list-picture-card .ant-upload-list-item-progress {\n bottom: 14px;\n width: calc(100% - 24px);\n margin-top: 0;\n padding-left: 56px;\n}\n.ant-upload-list-picture-card-container {\n display: inline-block;\n width: 104px;\n height: 104px;\n margin: 0 8px 8px 0;\n vertical-align: top;\n}\n.ant-upload-list-picture-card .ant-upload-list-item {\n height: 100%;\n margin: 0;\n}\n.ant-upload-list-picture-card .ant-upload-list-item-info {\n position: relative;\n height: 100%;\n overflow: hidden;\n}\n.ant-upload-list-picture-card .ant-upload-list-item-info::before {\n position: absolute;\n z-index: 1;\n width: 100%;\n height: 100%;\n background-color: rgba(0, 0, 0, 0.5);\n opacity: 0;\n transition: all 0.3s;\n content: ' ';\n}\n.ant-upload-list-picture-card .ant-upload-list-item:hover .ant-upload-list-item-info::before {\n opacity: 1;\n}\n.ant-upload-list-picture-card .ant-upload-list-item-actions {\n position: absolute;\n top: 50%;\n left: 50%;\n z-index: 10;\n white-space: nowrap;\n transform: translate(-50%, -50%);\n opacity: 0;\n transition: all 0.3s;\n}\n.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-eye,\n.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-download,\n.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-delete {\n z-index: 10;\n width: 16px;\n margin: 0 4px;\n color: rgba(255, 255, 255, 0.85);\n font-size: 16px;\n cursor: pointer;\n transition: all 0.3s;\n}\n.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-eye:hover,\n.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-download:hover,\n.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-delete:hover {\n color: #fff;\n}\n.ant-upload-list-picture-card .ant-upload-list-item-info:hover + .ant-upload-list-item-actions,\n.ant-upload-list-picture-card .ant-upload-list-item-actions:hover {\n opacity: 1;\n}\n.ant-upload-list-picture-card .ant-upload-list-item-thumbnail,\n.ant-upload-list-picture-card .ant-upload-list-item-thumbnail img {\n position: static;\n display: block;\n width: 100%;\n height: 100%;\n object-fit: contain;\n}\n.ant-upload-list-picture-card .ant-upload-list-item-name {\n display: none;\n margin: 8px 0 0;\n padding: 0;\n line-height: 1.5715;\n text-align: center;\n}\n.ant-upload-list-picture-card .ant-upload-list-item-file + .ant-upload-list-item-name {\n position: absolute;\n bottom: 10px;\n display: block;\n}\n.ant-upload-list-picture-card .ant-upload-list-item-uploading.ant-upload-list-item {\n background-color: #fafafa;\n}\n.ant-upload-list-picture-card .ant-upload-list-item-uploading .ant-upload-list-item-info {\n height: auto;\n}\n.ant-upload-list-picture-card .ant-upload-list-item-uploading .ant-upload-list-item-info::before,\n.ant-upload-list-picture-card .ant-upload-list-item-uploading .ant-upload-list-item-info .anticon-eye,\n.ant-upload-list-picture-card .ant-upload-list-item-uploading .ant-upload-list-item-info .anticon-delete {\n display: none;\n}\n.ant-upload-list-picture-card .ant-upload-list-item-progress {\n bottom: 32px;\n width: calc(100% - 14px);\n padding-left: 0;\n}\n.ant-upload-list-text-container,\n.ant-upload-list-picture-container {\n transition: opacity 0.3s, height 0.3s;\n}\n.ant-upload-list-text-container::before,\n.ant-upload-list-picture-container::before {\n display: table;\n width: 0;\n height: 0;\n content: '';\n}\n.ant-upload-list-text-container .ant-upload-span,\n.ant-upload-list-picture-container .ant-upload-span {\n display: block;\n flex: auto;\n}\n.ant-upload-list-text .ant-upload-span,\n.ant-upload-list-picture .ant-upload-span {\n display: flex;\n align-items: center;\n}\n.ant-upload-list-text .ant-upload-span > *,\n.ant-upload-list-picture .ant-upload-span > * {\n flex: none;\n}\n.ant-upload-list-text .ant-upload-list-item-name,\n.ant-upload-list-picture .ant-upload-list-item-name {\n flex: auto;\n margin: 0;\n padding: 0 8px;\n}\n.ant-upload-list-text .ant-upload-list-item-card-actions,\n.ant-upload-list-picture .ant-upload-list-item-card-actions {\n position: static;\n}\n.ant-upload-list-text .ant-upload-text-icon .anticon {\n position: static;\n}\n.ant-upload-list .ant-upload-animate-inline-appear,\n.ant-upload-list .ant-upload-animate-inline-enter,\n.ant-upload-list .ant-upload-animate-inline-leave {\n animation-duration: 0.3s;\n animation-timing-function: cubic-bezier(0.78, 0.14, 0.15, 0.86);\n animation-fill-mode: forwards;\n}\n.ant-upload-list .ant-upload-animate-inline-appear,\n.ant-upload-list .ant-upload-animate-inline-enter {\n animation-name: uploadAnimateInlineIn;\n}\n.ant-upload-list .ant-upload-animate-inline-leave {\n animation-name: uploadAnimateInlineOut;\n}\n@keyframes uploadAnimateInlineIn {\n from {\n width: 0;\n height: 0;\n margin: 0;\n padding: 0;\n opacity: 0;\n }\n}\n@keyframes uploadAnimateInlineOut {\n to {\n width: 0;\n height: 0;\n margin: 0;\n padding: 0;\n opacity: 0;\n }\n}\n.ant-upload-rtl {\n direction: rtl;\n}\n.ant-upload-rtl.ant-upload.ant-upload-select-picture-card {\n margin-right: auto;\n margin-left: 8px;\n}\n.ant-upload-list-rtl {\n direction: rtl;\n}\n.ant-upload-list-rtl .ant-upload-list-item-list-type-text:hover .ant-upload-list-item-name-icon-count-1 {\n padding-right: 22px;\n padding-left: 14px;\n}\n.ant-upload-list-rtl .ant-upload-list-item-list-type-text:hover .ant-upload-list-item-name-icon-count-2 {\n padding-right: 22px;\n padding-left: 28px;\n}\n.ant-upload-list-rtl .ant-upload-list-item-name {\n padding-right: 22px;\n padding-left: 0;\n}\n.ant-upload-list-rtl .ant-upload-list-item-name-icon-count-1 {\n padding-left: 14px;\n}\n.ant-upload-list-rtl .ant-upload-list-item-card-actions {\n right: auto;\n left: 0;\n}\n.ant-upload-list-rtl .ant-upload-list-item-card-actions .anticon {\n padding-right: 0;\n padding-left: 5px;\n}\n.ant-upload-list-rtl .ant-upload-list-item-info {\n padding: 0 4px 0 12px;\n}\n.ant-upload-list-rtl .ant-upload-list-item-error .ant-upload-list-item-card-actions .anticon {\n padding-right: 0;\n padding-left: 5px;\n}\n.ant-upload-list-rtl .ant-upload-list-item-progress {\n padding-right: 26px;\n padding-left: 0;\n}\n.ant-upload-list-picture .ant-upload-list-item-info,\n.ant-upload-list-picture-card .ant-upload-list-item-info {\n padding: 0;\n}\n.ant-upload-list-rtl.ant-upload-list-picture .ant-upload-list-item-thumbnail,\n.ant-upload-list-rtl.ant-upload-list-picture-card .ant-upload-list-item-thumbnail {\n right: 8px;\n left: auto;\n}\n.ant-upload-list-rtl.ant-upload-list-picture .ant-upload-list-item-icon,\n.ant-upload-list-rtl.ant-upload-list-picture-card .ant-upload-list-item-icon {\n right: 50%;\n left: auto;\n transform: translate(50%, -50%);\n}\n.ant-upload-list-rtl.ant-upload-list-picture .ant-upload-list-item-name,\n.ant-upload-list-rtl.ant-upload-list-picture-card .ant-upload-list-item-name {\n margin: 0 8px 0 0;\n padding-right: 48px;\n padding-left: 8px;\n}\n.ant-upload-list-rtl.ant-upload-list-picture .ant-upload-list-item-name-icon-count-1,\n.ant-upload-list-rtl.ant-upload-list-picture-card .ant-upload-list-item-name-icon-count-1 {\n padding-right: 48px;\n padding-left: 18px;\n}\n.ant-upload-list-rtl.ant-upload-list-picture .ant-upload-list-item-name-icon-count-2,\n.ant-upload-list-rtl.ant-upload-list-picture-card .ant-upload-list-item-name-icon-count-2 {\n padding-right: 48px;\n padding-left: 36px;\n}\n.ant-upload-list-rtl.ant-upload-list-picture .ant-upload-list-item-progress,\n.ant-upload-list-rtl.ant-upload-list-picture-card .ant-upload-list-item-progress {\n padding-right: 0;\n padding-left: 0;\n}\n.ant-upload-list-rtl .ant-upload-list-picture-card-container {\n margin: 0 0 8px 8px;\n}\n.ant-upload-list-rtl.ant-upload-list-picture-card .ant-upload-list-item-actions {\n right: 50%;\n left: auto;\n transform: translate(50%, -50%);\n}\n.ant-upload-list-rtl.ant-upload-list-picture-card .ant-upload-list-item-file + .ant-upload-list-item-name {\n margin: 8px 0 0;\n padding: 0;\n}\n", "",{"version":3,"sources":["webpack://./src/styles/main.less","webpack://./node_modules/antd/lib/style/core/base.less","webpack://./node_modules/antd/lib/style/color/tinyColor.less","webpack://./node_modules/antd/lib/style/mixins/size.less","webpack://./node_modules/antd/lib/style/core/global.less","webpack://./node_modules/antd/lib/style/mixins/clearfix.less","webpack://./node_modules/antd/lib/style/mixins/iconfont.less","webpack://./node_modules/antd/lib/style/core/iconfont.less","webpack://./node_modules/antd/lib/style/mixins/motion.less","webpack://./node_modules/antd/lib/style/core/motion/fade.less","webpack://./node_modules/antd/lib/style/core/motion/move.less","webpack://./node_modules/antd/lib/style/core/motion/other.less","webpack://./node_modules/antd/lib/style/core/motion/slide.less","webpack://./node_modules/antd/lib/style/core/motion/zoom.less","webpack://./node_modules/antd/lib/style/core/motion.less","webpack://./node_modules/antd/lib/affix/style/index-pure.less","webpack://./node_modules/antd/lib/style/mixins/reset.less","webpack://./node_modules/antd/lib/alert/style/index-pure.less","webpack://./node_modules/antd/lib/alert/style/rtl.less","webpack://./node_modules/antd/lib/anchor/style/index-pure.less","webpack://./node_modules/antd/lib/anchor/style/rtl.less","webpack://./node_modules/antd/lib/auto-complete/style/index-pure.less","webpack://./node_modules/antd/lib/avatar/style/index-pure.less","webpack://./node_modules/antd/lib/avatar/style/group.less","webpack://./node_modules/antd/lib/avatar/style/rtl.less","webpack://./node_modules/antd/lib/back-top/style/index-pure.less","webpack://./node_modules/antd/lib/back-top/style/responsive.less","webpack://./node_modules/antd/lib/badge/style/index-pure.less","webpack://./node_modules/antd/lib/badge/style/ribbon.less","webpack://./node_modules/antd/lib/badge/style/rtl.less","webpack://./node_modules/antd/lib/breadcrumb/style/index-pure.less","webpack://./node_modules/antd/lib/breadcrumb/style/rtl.less","webpack://./node_modules/antd/lib/button/style/index-pure.less","webpack://./node_modules/antd/lib/button/style/mixin.less","webpack://./node_modules/antd/lib/button/style/rtl.less","webpack://./node_modules/antd/lib/style/mixins/compact-item.less","webpack://./node_modules/antd/lib/button/style/space-compact.less","webpack://./node_modules/antd/lib/style/mixins/compact-item-vertical.less","webpack://./node_modules/antd/lib/calendar/style/index-pure.less","webpack://./node_modules/antd/lib/calendar/style/rtl.less","webpack://./node_modules/antd/lib/card/style/index-pure.less","webpack://./node_modules/antd/lib/card/style/size.less","webpack://./node_modules/antd/lib/carousel/style/index-pure.less","webpack://./node_modules/antd/lib/carousel/style/rtl.less","webpack://./node_modules/antd/lib/checkbox/style/mixin.less","webpack://./node_modules/antd/lib/checkbox/style/rtl.less","webpack://./node_modules/antd/lib/cascader/style/index-pure.less","webpack://./node_modules/antd/lib/cascader/style/rtl.less","webpack://./node_modules/antd/lib/collapse/style/index-pure.less","webpack://./node_modules/antd/lib/collapse/style/rtl.less","webpack://./node_modules/antd/lib/comment/style/index-pure.less","webpack://./node_modules/antd/lib/comment/style/rtl.less","webpack://./node_modules/antd/lib/date-picker/style/status.less","webpack://./node_modules/antd/lib/input/style/mixin.less","webpack://./node_modules/antd/lib/date-picker/style/index-pure.less","webpack://./node_modules/antd/lib/input/style/rtl.less","webpack://./node_modules/antd/lib/style/mixins/compatibility.less","webpack://./node_modules/antd/lib/style/mixins/rounded-arrow.less","webpack://./node_modules/antd/lib/date-picker/style/panel.less","webpack://./node_modules/antd/lib/date-picker/style/rtl.less","webpack://./node_modules/antd/lib/descriptions/style/index-pure.less","webpack://./node_modules/antd/lib/descriptions/style/rtl.less","webpack://./node_modules/antd/lib/divider/style/index-pure.less","webpack://./node_modules/antd/lib/divider/style/rtl.less","webpack://./node_modules/antd/lib/drawer/style/drawer.less","webpack://./node_modules/antd/lib/drawer/style/motion.less","webpack://./node_modules/antd/lib/drawer/style/rtl.less","webpack://./node_modules/antd/lib/dropdown/style/status.less","webpack://./node_modules/antd/lib/dropdown/style/index-pure.less","webpack://./node_modules/antd/lib/dropdown/style/rtl.less","webpack://./node_modules/antd/lib/empty/style/index-pure.less","webpack://./node_modules/antd/lib/empty/style/rtl.less","webpack://./node_modules/antd/lib/form/style/components.less","webpack://./node_modules/antd/lib/form/style/inline.less","webpack://./node_modules/antd/lib/form/style/horizontal.less","webpack://./node_modules/antd/lib/form/style/vertical.less","webpack://./node_modules/antd/lib/form/style/rtl.less","webpack://./node_modules/antd/lib/form/style/status.less","webpack://./node_modules/antd/lib/form/style/mixin.less","webpack://./node_modules/antd/lib/form/style/index-pure.less","webpack://./node_modules/antd/lib/grid/style/index-pure.less","webpack://./node_modules/antd/lib/grid/style/mixin.less","webpack://./node_modules/antd/lib/grid/style/rtl.less","webpack://./node_modules/antd/lib/image/style/index-pure.less","webpack://./node_modules/antd/lib/style/mixins/box.less","webpack://./node_modules/antd/lib/style/mixins/modal-mask.less","webpack://./node_modules/antd/lib/input/style/affix.less","webpack://./node_modules/antd/lib/input/style/allow-clear.less","webpack://./node_modules/antd/lib/input/style/status.less","webpack://./node_modules/antd/lib/input/style/index-pure.less","webpack://./node_modules/antd/lib/input-number/style/rtl.less","webpack://./node_modules/antd/lib/input/style/search-input.less","webpack://./node_modules/antd/lib/input/style/IE11.less","webpack://./node_modules/antd/lib/input-number/style/affix.less","webpack://./node_modules/antd/lib/input-number/style/status.less","webpack://./node_modules/antd/lib/input-number/style/index-pure.less","webpack://./node_modules/antd/lib/layout/style/index-pure.less","webpack://./node_modules/antd/lib/layout/style/light.less","webpack://./node_modules/antd/lib/layout/style/rtl.less","webpack://./node_modules/antd/lib/list/style/index-pure.less","webpack://./node_modules/antd/lib/list/style/bordered.less","webpack://./node_modules/antd/lib/list/style/responsive.less","webpack://./node_modules/antd/lib/list/style/rtl.less","webpack://./node_modules/antd/lib/mentions/style/status.less","webpack://./node_modules/antd/lib/mentions/style/index-pure.less","webpack://./node_modules/antd/lib/mentions/style/rtl.less","webpack://./node_modules/antd/lib/menu/style/status.less","webpack://./node_modules/antd/lib/menu/style/index-pure.less","webpack://./node_modules/antd/lib/menu/style/light.less","webpack://./node_modules/antd/lib/menu/style/dark.less","webpack://./node_modules/antd/lib/menu/style/rtl.less","webpack://./node_modules/antd/lib/message/style/index-pure.less","webpack://./node_modules/antd/lib/message/style/rtl.less","webpack://./node_modules/antd/lib/modal/style/modal.less","webpack://./node_modules/antd/lib/modal/style/confirm.less","webpack://./node_modules/antd/lib/modal/style/rtl.less","webpack://./node_modules/antd/lib/notification/style/index-pure.less","webpack://./node_modules/antd/lib/notification/style/rtl.less","webpack://./node_modules/antd/lib/notification/style/placement.less","webpack://./node_modules/antd/lib/page-header/style/index-pure.less","webpack://./node_modules/antd/lib/style/mixins/operation-unit.less","webpack://./node_modules/antd/lib/page-header/style/rtl.less","webpack://./node_modules/antd/lib/pagination/style/index-pure.less","webpack://./node_modules/antd/lib/pagination/style/rtl.less","webpack://./node_modules/antd/lib/popconfirm/style/index-pure.less","webpack://./node_modules/antd/lib/popover/style/index-pure.less","webpack://./node_modules/antd/lib/popover/style/rtl.less","webpack://./node_modules/antd/lib/progress/style/index-pure.less","webpack://./node_modules/antd/lib/progress/style/rtl.less","webpack://./node_modules/antd/lib/radio/style/index-pure.less","webpack://./node_modules/antd/lib/radio/style/rtl.less","webpack://./node_modules/antd/lib/rate/style/index-pure.less","webpack://./node_modules/antd/lib/rate/style/rtl.less","webpack://./node_modules/antd/lib/result/style/index-pure.less","webpack://./node_modules/antd/lib/result/style/rtl.less","webpack://./node_modules/antd/lib/segmented/style/mixins.less","webpack://./node_modules/antd/lib/segmented/style/index-pure.less","webpack://./node_modules/antd/lib/segmented/style/rtl.less","webpack://./node_modules/antd/lib/select/style/single.less","webpack://./node_modules/antd/lib/select/style/multiple.less","webpack://./node_modules/antd/lib/select/style/status.less","webpack://./node_modules/antd/lib/select/style/index-pure.less","webpack://./node_modules/antd/lib/select/style/rtl.less","webpack://./node_modules/antd/lib/skeleton/style/index-pure.less","webpack://./node_modules/antd/lib/skeleton/style/rtl.less","webpack://./node_modules/antd/lib/slider/style/index-pure.less","webpack://./node_modules/antd/lib/slider/style/rtl.less","webpack://./node_modules/antd/lib/space/style/index-pure.less","webpack://./node_modules/antd/lib/space/style/compact.less","webpack://./node_modules/antd/lib/space/style/rtl.less","webpack://./node_modules/antd/lib/spin/style/index-pure.less","webpack://./node_modules/antd/lib/spin/style/rtl.less","webpack://./node_modules/antd/lib/statistic/style/index-pure.less","webpack://./node_modules/antd/lib/statistic/style/rtl.less","webpack://./node_modules/antd/lib/steps/style/index-pure.less","webpack://./node_modules/antd/lib/steps/style/custom-icon.less","webpack://./node_modules/antd/lib/steps/style/small.less","webpack://./node_modules/antd/lib/steps/style/vertical.less","webpack://./node_modules/antd/lib/steps/style/label-placement.less","webpack://./node_modules/antd/lib/steps/style/progress-dot.less","webpack://./node_modules/antd/lib/steps/style/nav.less","webpack://./node_modules/antd/lib/steps/style/rtl.less","webpack://./node_modules/antd/lib/steps/style/progress.less","webpack://./node_modules/antd/lib/switch/style/index-pure.less","webpack://./node_modules/antd/lib/switch/style/rtl.less","webpack://./node_modules/antd/lib/table/style/size.less","webpack://./node_modules/antd/lib/table/style/bordered.less","webpack://./node_modules/antd/lib/table/style/index-pure.less","webpack://./node_modules/antd/lib/table/style/radius.less","webpack://./node_modules/antd/lib/table/style/rtl.less","webpack://./node_modules/antd/lib/tabs/style/size.less","webpack://./node_modules/antd/lib/tabs/style/rtl.less","webpack://./node_modules/antd/lib/tabs/style/position.less","webpack://./node_modules/antd/lib/tabs/style/dropdown.less","webpack://./node_modules/antd/lib/tabs/style/card.less","webpack://./node_modules/antd/lib/tabs/style/index-pure.less","webpack://./node_modules/antd/lib/tag/style/index-pure.less","webpack://./node_modules/antd/lib/tag/style/rtl.less","webpack://./node_modules/antd/lib/timeline/style/index-pure.less","webpack://./node_modules/antd/lib/timeline/style/rtl.less","webpack://./node_modules/antd/lib/tooltip/style/index-pure.less","webpack://./node_modules/antd/lib/tooltip/style/rtl.less","webpack://./node_modules/antd/lib/transfer/style/customize.less","webpack://./node_modules/antd/lib/transfer/style/status.less","webpack://./node_modules/antd/lib/transfer/style/index-pure.less","webpack://./node_modules/antd/lib/transfer/style/rtl.less","webpack://./node_modules/antd/lib/tree/style/mixin.less","webpack://./node_modules/antd/lib/tree/style/directory.less","webpack://./node_modules/antd/lib/tree/style/rtl.less","webpack://./node_modules/antd/lib/tree-select/style/index-pure.less","webpack://./node_modules/antd/lib/typography/style/index-pure.less","webpack://./node_modules/antd/lib/style/mixins/typography.less","webpack://./node_modules/antd/lib/typography/style/rtl.less","webpack://./node_modules/antd/lib/upload/style/index-pure.less","webpack://./node_modules/antd/lib/upload/style/rtl.less"],"names":[],"mappings":"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AgCzwGE;EACE,8GAAA;AhC2wGJ;AgC5wGE;EAII,kBAAA;EACA,eAAA;AhC2wGN;AgChxGE;EAQM,2CAAA;AhC2wGR;AgCtwGE;ECOA,kBAAA;EACA,oBAAA;AjCkwGF;AgC1wGE;;ECWE,kBAAA;AjCmwGJ;AiCjwGI;;;;;;EAGE,UAAA;AjCswGN;AiCnwGI;;EACE,UAAA;AjCswGN;AgC1xGE;ECwBE,eAAA;AjCqwGJ;AgC7xGE;;;;;;;EC+UE,iBAAA;AjCu9FJ;AgCtyGE;ECkVE,8BAAA;AjCu9FJ;AgCzyGE;ECqVE,gBAAA;AjCu9FJ;AgC5yGE;;ECyVE,cAAA;AjCu9FJ;AgChzGE;EC4VE,kBAAA;AjCu9FJ;AgCnzGE;EC+VE,kBAAA;AjCu9FJ;AgCtzGE;;ECmWE,2BAAA;EACA,8BAAA;AjCu9FJ;AgC3zGE;;ECwWE,4BAAA;EACA,+BAAA;AjCu9FJ;AiCp9FE;EAEI,kBAAA;AjCq9FN;AiCv9FE;EAKI,kBAAA;AjCq9FN;AiC19FE;;EASI,2BAAA;EACA,8BAAA;AjCq9FN;AiC/9FE;;EAcI,4BAAA;EACA,+BAAA;AjCq9FN;AiCj9FE;EACE,WAAA;AjCm9FJ;AE7gHC;E+B6jBG,gBAAA;AjCm9FJ;AiCh9FE;EAEI,kBAAA;EACA,0BAAA;EACA,6BAAA;AjCi9FN;AErhHC;E+BwkBG,iBAAA;EACA,yBAAA;EACA,4BAAA;AjCg9FJ;AE1hHC;;;;;;;;;;;;;;EgCmDK,kBAAA;EACA,iBAAA;AlCu/GN;AE3iHC;EgCyDG,cAAA;AlCq/GJ;AE9iHC;;EgC+DK,0BAAA;AlCm/GN;AEljHC;;EgCsEK,0BAAA;AlCg/GN;AEtjHC;;EgC8EO,0BAAA;AlC4+GR;AE1jHC;;EgCqFO,0BAAA;AlCy+GR;AgC/3GE;;EAEE,kBAAA;AhCi4GJ;AElkHC;;E8BuMG,gBAAA;AhC+3GJ;AgC53GE;EACE,WAAA;EACA,kBAAA;AhC83GJ;AgC53GI;;;;EAIE,uBAAA;AhC83GN;AgC33GI;;EAEE,cAAA;EACA,qBAAA;AhC63GN;AgC13GI;EACE,cAAA;EACA,qBAAA;AhC43GN;AgCz3GI;EACE,0BAAA;EACA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A;EAGA,YAAA;A1EyrPJ;AEtsPC;;EwEmBG,gBAAA;A1EurPJ;A2EhqPI;EACE,sBAAA;A3EkqPN;A2E/pPI;EACE,YAAA;A3EiqPN;AEhtPC;EyEmDK,WAAA;A3EgqPN;AEntPC;;;EyEUC,gBAAA;EACA,mBAAA;EACA,oBAAA;EACA,gBAAA;A3E8sPF;AE3tPC;;;EyEgBG,SAAA;A3EgtPJ;A2E9sPI;;;EACE,aAAA;A3EktPN;AEruPC;;;E0EyMG,iBAAA;A5EiiPJ;A2E3qPA;EzE/DC;IyEUC,gBAAA;IACA,mBAAA;IACA,oBAAA;IACA,gBAAA;E3EouPA;EEjvPD;IyEgBG,SAAA;E3EouPF;E2EluPE;IACE,aAAA;E3EouPJ;EEvvPD;I0EyMG,iBAAA;E5EijPF;EE1vPD;IyE8BK,eAAA;E3E+tPJ;EE7vPD;;IyEiCO,cAAA;IACA,eAAA;E3EguPN;EElwPD;IyEUC,gBAAA;IACA,mBAAA;IACA,oBAAA;IACA,gBAAA;E3E2vPA;EExwPD;IyEgBG,SAAA;E3E2vPF;E2EzvPE;IACE,aAAA;E3E2vPJ;EE9wPD;I0EyMG,iBAAA;E5EwkPF;AACF;A2E5sPA;EzEtEC;IyEUC,gBAAA;IACA,mBAAA;IACA,oBAAA;IACA,gBAAA;E3E4wPA;EEzxPD;IyEgBG,SAAA;E3E4wPF;E2E1wPE;IACE,aAAA;E3E4wPJ;EE/xPD;I0EyMG,iBAAA;E5EylPF;AACF;A2EvtPA;EzE5EC;IyEUC,gBAAA;IACA,mBAAA;IACA,oBAAA;IACA,gBAAA;E3E6xPA;EE1yPD;IyEgBG,SAAA;E3E6xPF;E2E3xPE;IACE,aAAA;E3E6xPJ;EEhzPD;I0EyMG,iBAAA;E5E0mPF;AACF;A2EluPA;EzElFC;IyEUC,gBAAA;IACA,mBAAA;IACA,oBAAA;IACA,gBAAA;E3E8yPA;EE3zPD;IyEgBG,SAAA;E3E8yPF;E2E5yPE;IACE,aAAA;E3E8yPJ;EEj0PD;I0EyMG,iBAAA;E5E2nPF;AACF;A2E7uPA;EzExFC;IyEUC,gBAAA;IACA,mBAAA;IACA,oBAAA;IACA,gBAAA;E3E+zPA;EE50PD;IyEgBG,SAAA;E3E+zPF;E2E7z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nuQC;E8EuBC,2BAAA;AhF+sQF;AEtuQC;E8E4BC,uBAAA;AhF6sQF;AEzuQC;E8EiCC,yBAAA;AhF2sQF;AE5uQC;E8EsCC,8BAAA;AhFysQF;AE/uQC;E8E2CC,6BAAA;AhFusQF;AElvQC;E8EgDC,6BAAA;AhFqsQF;AErvQC;E8EqDC,uBAAA;AhFmsQF;AExvQC;E8E0DC,mBAAA;AhFisQF;AE3vQC;E8E+DC,qBAAA;AhF+rQF;AE9vQC;E8EmEC,kBAAA;EACA,eAAA;EAEA,eAAA;AhF6rQF;AEnwQC;E+EUG,cAAA;EACA,cAAA;EACA,eAAA;AjF4vQJ;AExwQC;E+EeG,UAAA;AjF4vQJ;AE3wQC;E+EkBG,WAAA;AjF4vQJ;AE9wQC;E+EqBG,iBAAA;AjF4vQJ;AEjxQC;E+EwBG,SAAA;AjF4vQJ;AEpxQC;E+EUG,cAAA;EACA,sBAAA;EACA,uBAAA;AjF6wQJ;AEzxQC;E+EeG,kBAAA;AjF6wQJ;AE5xQC;E+EkBG,mBAAA;AjF6wQJ;AE/xQC;E+EqBG,yBAAA;AjF6wQJ;AElyQC;E+EwBG,SAAA;AjF6wQJ;AEryQC;E+EUG,cAAA;EACA,sBAAA;EACA,uBAAA;AjF8xQJ;AE1yQC;E+EeG,kBAAA;AjF8xQJ;AE7yQC;E+EkBG,mBAAA;AjF8xQJ;AEhzQC;E+EqBG,yBAAA;AjF8xQJ;AEnzQC;E+EwBG,SAAA;AjF8xQJ;AEtzQC;E+EUG,cAAA;EACA,eAAA;EACA,gBAAA;AjF+yQJ;AE3zQC;E+EeG,WAAA;AjF+yQJ;AE9zQC;E+EkBG,YAAA;AjF+yQJ;AEj0QC;E+EqBG,kBAAA;AjF+yQJ;AEp0QC;E+EwBG,SAAA;AjF+yQJ;AEv0QC;E+EUG,cAAA;EACA,sBAAA;EACA,uBAAA;AjFg0QJ;AE50QC;E+EeG,kBAAA;AjFg0QJ;AE/0QC;E+EkBG,mBAAA;AjFg0QJ;AEl1QC;E+EqBG,yBAAA;AjFg0QJ;AEr1QC;E+EwBG,SAAA;AjFg0QJ;AEx1QC;E+EUG,cAAA;EACA,sBAAA;EACA,uBAAA;AjFi1QJ;AE71QC;E+EeG,kBAAA;AjFi1QJ;AEh2QC;E+EkBG,mBAAA;AjFi1QJ;AEn2QC;E+EqBG,yBAAA;AjFi1QJ;AEt2QC;E+EwBG,SAAA;AjFi1QJ;AEz2QC;E+EUG,cAAA;EACA,aAAA;EACA,cAAA;AjFk2QJ;AE92QC;E+EeG,SAAA;AjFk2QJ;AEj3QC;E+EkBG,UAAA;AjFk2QJ;AEp3QC;E+EqBG,gBAAA;AjFk2QJ;AEv3QC;E+EwBG,SAAA;AjFk2QJ;AE13QC;E+EUG,cAAA;EACA,sBAAA;EACA,uBAAA;AjFm3QJ;AE/3QC;E+EeG,kBAAA;AjFm3QJ;AEl4QC;E+EkBG,mBAAA;AjFm3QJ;AEr4QC;E+EqBG,yBAAA;AjFm3QJ;AEx4QC;E+EwBG,SAAA;AjFm3QJ;AE34QC;E+EUG,cAAA;EACA,sBAAA;EACA,uBAAA;AjFo4QJ;AEh5QC;E+EeG,kBAAA;AjFo4QJ;AEn5QC;E+EkBG,mBAAA;AjFo4QJ;AEt5QC;E+EqBG,yBAAA;AjFo4QJ;AEz5QC;E+EwBG,SAAA;AjFo4QJ;AE55QC;E+EUG,cAAA;EACA,eAAA;EACA,gBAAA;AjFq5QJ;AEj6QC;E+EeG,WAAA;AjFq5QJ;AEp6QC;E+EkBG,YAAA;AjFq5QJ;AEv6QC;E+EqBG,kBAAA;AjFq5QJ;AE16QC;E+EwBG,SAAA;AjFq5QJ;AE76QC;E+EUG,cAAA;EACA,sBAAA;EACA,uBAAA;AjFs6QJ;AEl7QC;E+EeG,kBAAA;AjFs6QJ;AEr7QC;E+EkBG,mBAAA;AjFs6QJ;AEx7QC;E+EqBG,yBAAA;AjFs6QJ;AE37QC;E+EwBG,SAAA;AjFs6QJ;AE97QC;E+EUG,cAAA;EACA,sBAAA;EACA,uBAAA;AjFu7QJ;AEn8QC;E+EeG,kBAAA;AjFu7QJ;AEt8QC;E+EkBG,mBAAA;AjFu7QJ;AEz8QC;E+EqBG,yBAAA;AjFu7QJ;AE58QC;E+EwBG,SAAA;AjFu7QJ;AE/8QC;E+EUG,cAAA;EACA,aAAA;EACA,cAAA;AjFw8QJ;AEp9QC;E+EeG,SAAA;AjFw8QJ;AEv9QC;E+EkBG,UAAA;AjFw8QJ;AE19QC;E+EqBG,gBAAA;AjFw8QJ;AE79QC;E+EwBG,SAAA;AjFw8QJ;AEh+QC;E+EUG,cAAA;EACA,sBAAA;EACA,uBAAA;AjFy9QJ;AEr+QC;E+EeG,kBAAA;AjFy9QJ;AEx+QC;E+EkBG,mBAAA;AjFy9QJ;AE3+QC;E+EqBG,yBAAA;AjFy9QJ;AE9+QC;E+EwBG,SAAA;AjFy9QJ;AEj/QC;E+EUG,cAAA;EACA,sBAAA;EACA,uBAAA;AjF0+QJ;AEt/QC;E+EeG,kBAAA;AjF0+QJ;AEz/QC;E+EkBG,mBAAA;AjF0+QJ;AE5/QC;E+EqBG,yBAAA;AjF0+QJ;AE//QC;E+EwBG,SAAA;AjF0+QJ;AElgRC;E+EUG,cAAA;EACA,eAAA;EACA,gBAAA;AjF2/QJ;AEvgRC;E+EeG,WAAA;AjF2/QJ;AE1gRC;E+EkBG,YAAA;AjF2/QJ;AE7gRC;E+EqBG,kBAAA;AjF2/QJ;AEhhRC;E+EwBG,QAAA;AjF2/QJ;AEnhRC;E+EUG,cAAA;EACA,sBAAA;EACA,uBAAA;AjF4gRJ;AExhRC;E+EeG,kBAAA;AjF4gRJ;AE3hRC;E+EkBG,mBAAA;AjF4gRJ;AE9hRC;E+EqBG,yBAAA;AjF4gRJ;AEjiRC;E+EwBG,QAAA;AjF4gRJ;AEpiRC;E+EUG,cAAA;EACA,sBAAA;EACA,uBAAA;AjF6hRJ;AEziRC;E+EeG,kBAAA;AjF6hRJ;AE5iRC;E+EkBG,mBAAA;AjF6hRJ;AE/iRC;E+EqBG,yBAAA;AjF6hRJ;AEljRC;E+EwBG,QAAA;AjF6hRJ;AErjRC;E+EUG,cAAA;EACA,aAAA;EACA,cAAA;AjF8iRJ;AE1jRC;E+EeG,SAAA;AjF8iRJ;AE7jRC;E+EkBG,UAAA;AjF8iRJ;AEhkRC;E+EqBG,gBAAA;AjF8iRJ;AEnkRC;E+EwBG,QAAA;AjF8iRJ;AEtkRC;E+EUG,cAAA;EACA,sBAAA;EACA,uBAAA;AjF+jRJ;AE3kRC;E+EeG,kBAAA;AjF+jRJ;AE9kRC;E+EkBG,mBAAA;AjF+jRJ;AEjlRC;E+EqBG,yBAAA;AjF+jRJ;AEplRC;E+EwBG,QAAA;AjF+jRJ;AEvlRC;E+EUG,cAAA;EACA,sBAAA;EACA,uBAAA;AjFglRJ;AE5lRC;E+EeG,kBAAA;AjFglRJ;AE/lRC;E+EkBG,mBAAA;AjFglRJ;AElmRC;E+EqBG,yBAAA;AjFglRJ;AErmRC;E+EwBG,QAAA;AjFglRJ;AExmRC;E+EUG,cAAA;EACA,eAAA;EACA,gBAAA;AjFimRJ;AE7mRC;E+EeG,WAAA;AjFimRJ;AEhnRC;E+EkBG,YAAA;AjFimRJ;AEnnRC;E+EqBG,kBAAA;AjFimRJ;AEtnRC;E+EwBG,QAAA;AjFimRJ;AEznRC;E+EUG,cAAA;EACA,qBAAA;EACA,sBAAA;AjFknRJ;AE9nRC;E+EeG,iBAAA;AjFknRJ;AEjoRC;E+EkBG,kBAAA;AjFknRJ;AEpoRC;E+EqBG,wBAAA;AjFknRJ;AEvoRC;E+EwBG,QAAA;AjFknRJ;AE1oRC;E+EUG,cAAA;EACA,qBAAA;EACA,sBAAA;AjFmoRJ;AE/oRC;E+EeG,iBAAA;AjFmoRJ;AElpRC;E+EkBG,kBAAA;AjFmoRJ;AErpRC;E+EqBG,wBAAA;AjFmoRJ;AExpRC;E+EwBG,QAAA;AjFmoRJ;AE3pRC;E+E+BG,aAAA;AjF+nRJ;AE9pRC;E+EkCG,UAAA;AjF+nRJ;AEjqRC;E+EqCG,WAAA;AjF+nRJ;AEpqRC;E+EwCG,UAAA;AjF+nRJ;AEvqRC;E+E2CG,WAAA;AjF+nRJ;AE1qRC;E+E8CG,cAAA;AjF+nRJ;AE7qRC;E+EiDG,QAAA;AjF+nRJ;AEhrRC;EgFyCK,WAAA;AlF0oRN;AEnrRC;EgF+CK,UAAA;AlFuoRN;AEtrRC;EgFqDK,WAAA;AlFooRN;AEzrRC;EgF2DK,UAAA;AlFioRN;AE5rRC;EgFiEK,eAAA;AlF8nRN;AE/rRC;EgFeK,kBAAA;EACA,UAAA;AlFmrRN;AEnsRC;EgFuBK,WAAA;EACA,iBAAA;AlF+qRN;AEvsRC;EgF+BK,yBAAA;EACA,cAAA;AlF2qRN;AE3sRC;EgFeK,kBAAA;EACA,UAAA;AlF+rRN;AE/sRC;EgFuBK,WAAA;EACA,iBAAA;AlF2rRN;AEntRC;EgF+BK,yBAAA;EACA,cAAA;AlFurRN;AEvtRC;EgFeK,YAAA;EACA,UAAA;AlF2sRN;AE3tRC;EgFuBK,WAAA;EACA,WAAA;AlFusRN;AE/tRC;EgF+BK,mBAAA;EACA,cAAA;AlFmsRN;AEnuRC;EgFeK,mBAAA;EACA,UAAA;AlFutRN;AEvuRC;EgFuBK,WAAA;EACA,kBAAA;AlFmtRN;AE3uRC;EgF+BK,0BAAA;EACA,cAAA;AlF+sRN;AE/uRC;EgFeK,mBAAA;EACA,UAAA;AlFmuRN;AEnvRC;EgFuBK,WAAA;EACA,kBAAA;AlF+tRN;AEvvRC;EgF+BK,0BAAA;EACA,cAAA;AlF2tRN;AE3vRC;EgFeK,UAAA;EACA,UAAA;AlF+uRN;AE/vRC;EgFuBK,WAAA;EACA,SAAA;AlF2uRN;AEnwRC;EgF+BK,iBAAA;EACA,cAAA;AlFuuRN;AEvwRC;EgFeK,mBAAA;EACA,UAAA;AlF2vRN;AE3wRC;EgFuBK,WAAA;EACA,kBAAA;AlFuvRN;AE/wRC;EgF+BK,0BAAA;EACA,cAAA;AlFmvRN;AEnxRC;EgFeK,mBAAA;EACA,UAAA;AlFuwRN;AEvxRC;EgFuBK,WAAA;EACA,kBAAA;AlFmwRN;AE3xRC;EgF+BK,0BAAA;EACA,cAAA;AlF+vRN;AE/xRC;EgFeK,YAAA;EACA,UAAA;AlFmxRN;AEnyRC;EgFuBK,WAAA;EACA,WAAA;AlF+wRN;AEvyRC;EgF+BK,mBAAA;EACA,cAAA;AlF2wRN;AE3yRC;EgFeK,mBAAA;EACA,UAAA;AlF+xRN;AE/yRC;EgFuBK,WAAA;EACA,kBAAA;AlF2xRN;AEnzRC;EgF+BK,0BAAA;EACA,cAAA;AlFuxRN;AEvzRC;EgFeK,mBAAA;EACA,UAAA;AlF2yRN;AE3zRC;EgFuBK,WAAA;EACA,kBAAA;AlFuyRN;AE/zRC;EgF+BK,0BAAA;EACA,cAAA;AlFmyRN;AEn0RC;EgFeK,UAAA;EACA,UAAA;AlFuzRN;AEv0RC;EgFuBK,WAAA;EACA,SAAA;AlFmzRN;AE30RC;EgF+BK,iBAAA;EACA,cAAA;AlF+yRN;AE/0RC;EgFeK,mBAAA;EACA,UAAA;AlFm0RN;AEn1RC;EgFuBK,WAAA;EACA,kBAAA;AlF+zRN;AEv1RC;EgF+BK,0BAAA;EACA,cAAA;AlF2zRN;AE31RC;EgFeK,mBAAA;EACA,UAAA;AlF+0RN;AE/1RC;EgFuBK,WAAA;EACA,kBAAA;AlF20RN;AEn2RC;EgF+BK,0BAAA;EACA,cAAA;AlFu0RN;AEv2RC;EgFeK,YAAA;EACA,UAAA;AlF21RN;AE32RC;EgFuBK,WAAA;EACA,WAAA;AlFu1RN;AE/2RC;EgF+BK,mBAAA;EACA,cAAA;AlFm1RN;AEn3RC;EgFeK,mBAAA;EACA,UAAA;AlFu2RN;AEv3RC;EgFuBK,WAAA;EACA,kBAAA;AlFm2RN;AE33RC;EgF+BK,0BAAA;EACA,cAAA;AlF+1RN;AE/3RC;EgFeK,mBAAA;EACA,UAAA;AlFm3RN;AEn4RC;EgFuBK,WAAA;EACA,kBAAA;AlF+2RN;AEv4RC;EgF+BK,0BAAA;EACA,cAAA;AlF22RN;AE34RC;EgFeK,UAAA;EACA,UAAA;AlF+3RN;AE/4RC;EgFuBK,WAAA;EACA,SAAA;AlF23RN;AEn5RC;EgF+BK,iBAAA;EACA,cAAA;AlFu3RN;AEv5RC;EgFeK,mBAAA;EACA,UAAA;AlF24RN;AE35RC;EgFuBK,WAAA;EACA,kBAAA;AlFu4RN;AE/5RC;EgF+BK,0BAAA;EACA,cAAA;AlFm4RN;AEn6RC;EgFeK,mBAAA;EACA,UAAA;AlFu5RN;AEv6RC;EgFuBK,WAAA;EACA,kBAAA;AlFm5RN;AE36RC;EgF+BK,0BAAA;EACA,cAAA;AlF+4RN;AE/6RC;EgFeK,YAAA;EACA,UAAA;AlFm6RN;AEn7RC;EgFuBK,WAAA;EACA,WAAA;AlF+5RN;AEv7RC;EgF+BK,mBAAA;EACA,cAAA;AlF25RN;AE37RC;EgFeK,mBAAA;EACA,UAAA;AlF+6RN;AE/7RC;EgFuBK,WAAA;EACA,kBAAA;AlF26RN;AEn8RC;EgF+BK,0BAAA;EACA,cAAA;AlFu6RN;AEv8RC;EgFeK,mBAAA;EACA,UAAA;AlF27RN;AE38RC;EgFuBK,WAAA;EACA,kBAAA;AlFu7RN;AE/8RC;EgF+BK,0BAAA;EACA,cAAA;AlFm7RN;AEn9RC;EgFeK,WAAA;EACA,UAAA;AlFu8RN;AEv9RC;EgFuBK,WAAA;EACA,UAAA;AlFm8RN;AE39RC;EgF+BK,kBAAA;EACA,cAAA;AlF+7RN;AE/9RC;E+EUG,cAAA;EACA,cAAA;EACA,eAAA;AjFw9RJ;AEp+RC;E+EeG,UAAA;AjFw9RJ;AEv+RC;E+EkBG,WAAA;AjFw9RJ;AE1+RC;E+EqBG,iBAAA;AjFw9RJ;AE7+RC;E+EwBG,SAAA;AjFw9RJ;AEh/RC;E+EUG,cAAA;EACA,sBAAA;EACA,uBAAA;AjFy+RJ;AEr/RC;E+EeG,kBAAA;AjFy+RJ;AEx/RC;E+EkBG,mBAAA;AjFy+RJ;AE3/RC;E+EqBG,yBAAA;AjFy+RJ;AE9/RC;E+EwBG,SAAA;AjFy+RJ;AEjgSC;E+EUG,cAAA;EACA,sBAAA;EACA,uBAAA;AjF0/RJ;AEtgSC;E+EeG,kBAAA;AjF0/RJ;AEzgSC;E+EkBG,mBAAA;AjF0/RJ;AE5gSC;E+EqBG,yBAAA;AjF0/RJ;AE/gSC;E+EwBG,SAAA;AjF0/RJ;AElhSC;E+EUG,cAAA;EACA,eAAA;EACA,gBAAA;AjF2gSJ;AEvhSC;E+EeG,WAAA;AjF2gSJ;AE1hSC;E+EkBG,YAAA;AjF2gSJ;AE7hSC;E+EqBG,kBAAA;AjF2gSJ;AEhiSC;E+EwBG,SAAA;AjF2gSJ;AEniSC;E+EUG,cAAA;EACA,sBAAA;EACA,uBAAA;AjF4hSJ;AExiSC;E+EeG,kBAAA;AjF4hSJ;AE3iSC;E+EkBG,mBAAA;AjF4hSJ;AE9iSC;E+EqBG,yBAAA;AjF4hSJ;AEjjSC;E+EwBG,SAAA;AjF4hSJ;AEpjSC;E+EUG,cAAA;EACA,sBAAA;EACA,uBAAA;AjF6iSJ;AEzjSC;E+EeG,kBAAA;AjF6iSJ;AE5jSC;E+EkBG,mBAAA;AjF6iSJ;AE/jSC;E+EqBG,yBAAA;AjF6iSJ;AElkSC;E+EwBG,SAAA;AjF6iSJ;AErkSC;E+EUG,cAAA;EACA,aAAA;EACA,cAAA;AjF8jSJ;AE1kSC;E+EeG,SAAA;AjF8jSJ;AE7kSC;E+EkBG,UAAA;AjF8jSJ;AEhlSC;E+EqBG,gBAAA;AjF8jSJ;AEnlSC;E+EwBG,SAAA;AjF8jSJ;AEtlSC;E+EUG,cAAA;EACA,sBAAA;EACA,uBAAA;AjF+kSJ;AE3lSC;E+EeG,kBAAA;AjF+kSJ;AE9lSC;E+EkBG,mBAAA;AjF+kSJ;AEjmSC;E+EqBG,yBAAA;AjF+kSJ;AEpmSC;E+EwBG,SAAA;AjF+kSJ;AEvmSC;E+EUG,cAAA;EACA,sBAAA;EACA,uBAAA;AjFgmSJ;AE5mSC;E+EeG,kBAAA;AjFgmSJ;AE/mSC;E+EkBG,mBAAA;AjFgmSJ;AElnSC;E+EqBG,yBAAA;AjFgmSJ;AErnSC;E+EwBG,SAAA;AjFgmSJ;AExnSC;E+EUG,cAAA;EACA,eAAA;EACA,gBAAA;AjFinSJ;AE7nSC;E+EeG,WAAA;AjFinSJ;AEhoSC;E+EkBG,YAAA;AjFinSJ;AEnoSC;E+EqBG,kBAAA;AjFinSJ;AEtoSC;E+EwBG,SAAA;AjFinSJ;AEzoSC;E+EUG,cAAA;EACA,sBAAA;EACA,uBAAA;AjFkoSJ;AE9oSC;E+EeG,kBAAA;AjFkoSJ;AEjpSC;E+EkBG,mBAAA;AjFkoSJ;AEppSC;E+EqBG,yBAAA;AjFkoSJ;AEvpSC;E+EwBG,SAAA;AjFkoSJ;AE1pSC;E+EUG,cAAA;EACA,sBAAA;EACA,uBAAA;AjFmpSJ;AE/pSC;E+EeG,kBAAA;AjFmpSJ;AElqSC;E+EkBG,mBAAA;AjFmpSJ;AErqSC;E+EqBG,yBAAA;AjFmpSJ;AExqSC;E+EwBG,SAAA;AjFmpSJ;AE3qSC;E+EUG,cAAA;EACA,aAAA;EACA,cAAA;AjFoqSJ;AEhrSC;E+EeG,SAAA;AjFoqSJ;AEnrSC;E+EkBG,UAAA;AjFoqSJ;AEtrSC;E+EqBG,gBAAA;AjFoqSJ;AEzrSC;E+EwBG,SAAA;AjFoqSJ;AE5rSC;E+EUG,cAAA;EACA,sBAAA;EACA,uBAAA;AjFqrSJ;AEjsSC;E+EeG,kBAAA;AjFqrSJ;AEpsSC;E+EkBG,mBAAA;AjFqrSJ;AEvsSC;E+EqBG,yBAAA;AjFqrSJ;AE1sSC;E+EwBG,SAAA;AjFqrSJ;AE7sSC;E+EUG,cAAA;EACA,sBAAA;EACA,uBAAA;AjFssSJ;AEltSC;E+EeG,kBAAA;AjFssSJ;AErtSC;E+EkBG,mBAAA;AjFssSJ;AExtSC;E+EqBG,yBAAA;AjFssSJ;AE3tSC;E+EwBG,SAAA;AjFssSJ;AE9tSC;E+EUG,cAAA;EACA,eAAA;EACA,gBAAA;AjFutSJ;AEnuSC;E+EeG,WAAA;AjFutSJ;AEtuSC;E+EkBG,YAAA;AjFutSJ;AEzuSC;E+EqBG,kBAAA;AjFutSJ;AE5uSC;E+EwBG,QAAA;AjFutSJ;AE/uSC;E+EUG,cAAA;EACA,sBAAA;EACA,uBAAA;AjFwuSJ;AEpvSC;E+EeG,kBAAA;AjFwuSJ;AEvvSC;E+EkBG,mBAAA;AjFwuSJ;AE1vSC;E+EqBG,yBAAA;AjFwuSJ;AE7vSC;E+EwBG,QAAA;AjFwuSJ;AEhwSC;E+EUG,cAAA;EACA,sBAAA;EACA,uBAAA;AjFyvSJ;AErwSC;E+EeG,kBAAA;AjFyvSJ;AExwSC;E+EkBG,mBAAA;AjFyvSJ;AE3wSC;E+EqBG,yBAAA;AjFyvSJ;AE9wSC;E+EwBG,QAAA;AjFyvSJ;AEjxSC;E+EUG,cAAA;EACA,aAAA;EACA,cAAA;AjF0wSJ;AEtxSC;E+EeG,SAAA;AjF0wSJ;AEzxSC;E+EkBG,UAAA;AjF0wSJ;AE5xSC;E+EqBG,gBAAA;AjF0wSJ;AE/xSC;E+EwBG,QAAA;AjF0wSJ;AElySC;E+EUG,cAAA;EACA,sBAAA;EACA,uBAAA;AjF2xSJ;AEvySC;E+EeG,kBAAA;AjF2xSJ;AE1ySC;E+EkBG,mBAAA;AjF2xSJ;AE7ySC;E+EqBG,yBAAA;AjF2xSJ;AEhzSC;E+EwBG,QAAA;AjF2xSJ;AEnzSC;E+EUG,cAAA;EACA,sBAAA;EACA,uBAAA;AjF4ySJ;AExzSC;E+EeG,kBAAA;AjF4ySJ;AE3zSC;E+EkBG,mBAAA;AjF4ySJ;AE9zSC;E+EqBG,yBAAA;AjF4ySJ;AEj0SC;E+EwBG,QAAA;AjF4ySJ;AEp0SC;E+EUG,cAAA;EACA,eAAA;EACA,gBAAA;AjF6zSJ;AEz0SC;E+EeG,WAAA;AjF6zSJ;AE50SC;E+EkBG,YAAA;AjF6zSJ;AE/0SC;E+EqBG,kBAAA;AjF6zSJ;AEl1SC;E+EwBG,QAAA;AjF6zSJ;AEr1SC;E+EUG,cAAA;EACA,qBAAA;EACA,sBAAA;AjF80SJ;AE11SC;E+EeG,iBAAA;AjF80SJ;AE71SC;E+EkBG,kBAAA;AjF80SJ;AEh2SC;E+EqBG,wBAAA;AjF80SJ;AEn2SC;E+EwBG,QAAA;AjF80SJ;AEt2SC;E+EUG,cAAA;EACA,qBAAA;EACA,sBAAA;AjF+1SJ;AE32SC;E+EeG,iBAAA;AjF+1SJ;AE92SC;E+EkBG,kBAAA;AjF+1SJ;AEj3SC;E+EqBG,wBAAA;AjF+1SJ;AEp3SC;E+EwBG,QAAA;AjF+1SJ;AEv3SC;E+E+BG,aAAA;AjF21SJ;AE13SC;E+EkCG,UAAA;AjF21SJ;AE73SC;E+EqCG,WAAA;AjF21SJ;AEh4SC;E+EwCG,UAAA;AjF21SJ;AEn4SC;E+E2CG,WAAA;AjF21SJ;AEt4SC;E+E8CG,cAAA;AjF21SJ;AEz4SC;E+EiDG,QAAA;AjF21SJ;AE54SC;EgFyCK,WAAA;AlFs2SN;AE/4SC;EgF+CK,UAAA;AlFm2SN;AEl5SC;EgFqDK,WAAA;AlFg2SN;AEr5SC;EgF2DK,UAAA;AlF61SN;AEx5SC;EgFiEK,eAAA;AlF01SN;AE35SC;EgFeK,kBAAA;EACA,UAAA;AlF+4SN;AE/5SC;EgFuBK,WAAA;EACA,iBAAA;AlF24SN;AEn6SC;EgF+BK,yBAAA;EACA,cAAA;AlFu4SN;AEv6SC;EgFeK,kBAAA;EACA,UAAA;AlF25SN;AE36SC;EgFuBK,WAAA;EACA,iBAAA;AlFu5SN;AE/6SC;EgF+BK,yBAAA;EACA,cAAA;AlFm5SN;AEn7SC;EgFeK,YAAA;EACA,UAAA;AlFu6SN;AEv7SC;EgFuBK,WAAA;EACA,WAAA;AlFm6SN;AE37SC;EgF+BK,mBAAA;EACA,cAAA;AlF+5SN;AE/7SC;EgFeK,mBAAA;EACA,UAAA;AlFm7SN;AEn8SC;EgFuBK,WAAA;EACA,kBAAA;AlF+6SN;AEv8SC;EgF+BK,0BAAA;EACA,cAAA;AlF26SN;AE38SC;EgFeK,mBAAA;EACA,UAAA;AlF+7SN;AE/8SC;EgFuBK,WAAA;EACA,kBAAA;AlF27SN;AEn9SC;EgF+BK,0BAAA;EACA,cAAA;AlFu7SN;AEv9SC;EgFeK,UAAA;EACA,UAAA;AlF28SN;AE39SC;EgFuBK,WAAA;EACA,SAAA;AlFu8SN;AE/9SC;EgF+BK,iBAAA;EACA,cAAA;AlFm8SN;AEn+SC;EgFeK,mBAAA;EACA,UAAA;AlFu9SN;AEv+SC;EgFuBK,WAAA;EACA,kBAAA;AlFm9SN;AE3+SC;EgF+BK,0BAAA;EACA,cAAA;AlF+8SN;AE/+SC;EgFeK,mBAAA;EACA,UAAA;AlFm+SN;AEn/SC;EgFuBK,WAAA;EACA,kBAAA;AlF+9SN;AEv/SC;EgF+BK,0BAAA;EACA,cAAA;AlF29SN;AE3/SC;EgFeK,YAAA;EACA,UAAA;AlF++SN;AE//SC;EgFuBK,WAAA;EACA,WAAA;AlF2+SN;AEngTC;EgF+BK,mBAAA;EACA,cAAA;AlFu+SN;AEvgTC;EgFeK,mBAAA;EACA,UAAA;AlF2/SN;AE3gTC;EgFuBK,WAAA;EACA,kBAAA;AlFu/SN;AE/gTC;EgF+BK,0BAAA;EACA,cAAA;AlFm/SN;AEnhTC;EgFeK,mBAAA;EACA,UAAA;AlFugTN;AEvhTC;EgFuBK,WAAA;EACA,kBAAA;AlFmgTN;AE3hTC;EgF+BK,0BAAA;EACA,cAAA;AlF+/SN;AE/hTC;EgFeK,UAAA;EACA,UAAA;AlFmhTN;AEniTC;EgFuBK,WAAA;EACA,SAAA;AlF+gTN;AEviTC;EgF+BK,iBAAA;EACA,cAAA;AlF2gTN;AE3iTC;EgFeK,mBAAA;EACA,UAAA;AlF+hTN;AE/iTC;EgFuBK,WAAA;EACA,kBAAA;AlF2hTN;AEnjTC;EgF+BK,0BAAA;EACA,cAAA;AlFuhTN;AEvjTC;EgFeK,mBAAA;EACA,UAAA;AlF2iTN;AE3jTC;EgFuBK,WAAA;EACA,kBAAA;AlFuiTN;AE/jTC;EgF+BK,0BAAA;EACA,cAAA;AlFmiTN;AEnkTC;EgFeK,YAAA;EACA,UAAA;AlFujTN;AEvkTC;EgFuBK,WAAA;EACA,WAAA;AlFmjTN;AE3kTC;EgF+BK,mBAAA;EACA,cAAA;AlF+iTN;AE/kTC;EgFeK,mBAAA;EACA,UAAA;AlFmkTN;AEnlTC;EgFuBK,WAAA;EACA,kBAAA;AlF+jTN;AEvlTC;EgF+BK,0BAAA;EACA,cAAA;AlF2jTN;AE3lTC;EgFeK,mBAAA;EACA,UAAA;AlF+kTN;AE/lTC;EgFuBK,WAAA;EACA,kBAAA;AlF2kTN;AEnmTC;EgF+BK,0BAAA;EACA,cAAA;AlFukTN;AEvmTC;EgFeK,UAAA;EACA,UAAA;AlF2lTN;AE3mTC;EgFuBK,WAAA;EACA,SAAA;AlFulTN;AE/mTC;EgF+BK,iBAAA;EACA,cAAA;AlFmlTN;AEnnTC;EgFeK,mBAAA;EACA,UAAA;AlFumTN;AEvnTC;EgFuBK,WAAA;EACA,kBAAA;AlFmmTN;AE3nTC;EgF+BK,0BAAA;EACA,cAAA;AlF+lTN;AE/nTC;EgFeK,mBAAA;EACA,UAAA;AlFmnTN;AEnoTC;EgFuBK,WAAA;EACA,kBAAA;AlF+mTN;AEvoTC;EgF+BK,0BAAA;EACA,cAAA;AlF2mTN;AE3oTC;EgFeK,YAAA;EACA,UAAA;AlF+nTN;AE/oTC;EgFuBK,WAAA;EACA,WAAA;AlF2nTN;AEnpTC;EgF+BK,mBAAA;EACA,cAAA;AlFunTN;AEvpTC;EgFeK,mBAAA;EACA,UAAA;AlF2oTN;AE3pTC;EgFuBK,WAAA;EACA,kBAAA;AlFuoTN;AE/pTC;EgF+BK,0BAAA;EACA,cAAA;AlFmoTN;AEnqTC;EgFeK,mBAAA;EACA,UAAA;AlFupTN;AEvqTC;EgFuBK,WAAA;EACA,kBAAA;AlFmpTN;AE3qTC;EgF+BK,0BAAA;EACA,cAAA;AlF+oTN;AE/qTC;EgFeK,WAAA;EACA,UAAA;AlFmqTN;AEnrTC;EgFuBK,WAAA;EACA,UAAA;AlF+pTN;AEvrTC;EgF+BK,kBAAA;EACA,cAAA;AlF2pTN;AgFpmTA;E9EvFC;I+EUG,cAAA;IACA,cAAA;IACA,eAAA;EjFqrTF;EEjsTD;I+EeG,UAAA;EjFqrTF;EEpsTD;I+EkBG,WAAA;EjFqrTF;EEvsTD;I+EqBG,iBAAA;EjFqrTF;EE1sTD;I+EwBG,SAAA;EjFqrTF;EE7sTD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjFssTF;EEltTD;I+EeG,kBAAA;EjFssTF;EErtTD;I+EkBG,mBAAA;EjFssTF;EExtTD;I+EqBG,yBAAA;EjFssTF;EE3tTD;I+EwBG,SAAA;EjFssTF;EE9tTD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjFutTF;EEnuTD;I+EeG,kBAAA;EjFutTF;EEtuTD;I+EkBG,mBAAA;EjFutTF;EEzuTD;I+EqBG,yBAAA;EjFutTF;EE5uTD;I+EwBG,SAAA;EjFutTF;EE/uTD;I+EUG,cAAA;IACA,eAAA;IACA,gBAAA;EjFwuTF;EEpvTD;I+EeG,WAAA;EjFwuTF;EEvvTD;I+EkBG,YAAA;EjFwuTF;EE1vTD;I+EqBG,kBAAA;EjFwuTF;EE7vTD;I+EwBG,SAAA;EjFwuTF;EEhwTD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjFyvTF;EErwTD;I+EeG,kBAAA;EjFyvTF;EExwTD;I+EkBG,mBAAA;EjFyvTF;EE3wTD;I+EqBG,yBAAA;EjFyvTF;EE9wTD;I+EwBG,SAAA;EjFyvTF;EEjxTD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjF0wTF;EEtxTD;I+EeG,kBAAA;EjF0wTF;EEzxTD;I+EkBG,mBAAA;EjF0wTF;EE5xTD;I+EqBG,yBAAA;EjF0wTF;EE/xTD;I+EwBG,SAAA;EjF0wTF;EElyTD;I+EUG,cAAA;IACA,aAAA;IACA,cAAA;EjF2xTF;EEvyTD;I+EeG,SAAA;EjF2xTF;EE1yTD;I+EkBG,UAAA;EjF2xTF;EE7yTD;I+EqBG,gBAAA;EjF2xTF;EEhzTD;I+EwBG,SAAA;EjF2xTF;EEnzTD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjF4yTF;EExzTD;I+EeG,kBAAA;EjF4yTF;EE3zTD;I+EkBG,mBAAA;EjF4yTF;EE9zTD;I+EqBG,yBAAA;EjF4yTF;EEj0TD;I+EwBG,SAAA;EjF4yTF;EEp0TD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjF6zTF;EEz0TD;I+EeG,kBAAA;EjF6zTF;EE50TD;I+EkBG,mBAAA;EjF6zTF;EE/0TD;I+EqBG,yBAAA;EjF6zTF;EEl1TD;I+EwBG,SAAA;EjF6zTF;EEr1TD;I+EUG,cAAA;IACA,eAAA;IACA,gBAAA;EjF80TF;EE11TD;I+EeG,WAAA;EjF80TF;EE71TD;I+EkBG,YAAA;EjF80TF;EEh2TD;I+EqBG,kBAAA;EjF80TF;EEn2TD;I+EwBG,SAAA;EjF80TF;EEt2TD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjF+1TF;EE32TD;I+EeG,kBAAA;EjF+1TF;EE92TD;I+EkBG,mBAAA;EjF+1TF;EEj3TD;I+EqBG,yBAAA;EjF+1TF;EEp3TD;I+EwBG,SAAA;EjF+1TF;EEv3TD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjFg3TF;EE53TD;I+EeG,kBAAA;EjFg3TF;EE/3TD;I+EkBG,mBAAA;EjFg3TF;EEl4TD;I+EqBG,yBAAA;EjFg3TF;EEr4TD;I+EwBG,SAAA;EjFg3TF;EEx4TD;I+EUG,cAAA;IACA,aAAA;IACA,cAAA;EjFi4TF;EE74TD;I+EeG,SAAA;EjFi4TF;EEh5TD;I+EkBG,UAAA;EjFi4TF;EEn5TD;I+EqBG,gBAAA;EjFi4TF;EEt5TD;I+EwBG,SAAA;EjFi4TF;EEz5TD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjFk5TF;EE95TD;I+EeG,kBAAA;EjFk5TF;EEj6TD;I+EkBG,mBAAA;EjFk5TF;EEp6TD;I+EqBG,yBAAA;EjFk5TF;EEv6TD;I+EwBG,SAAA;EjFk5TF;EE16TD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjFm6TF;EE/6TD;I+EeG,kBAAA;EjFm6TF;EEl7TD;I+EkBG,mBAAA;EjFm6TF;EEr7TD;I+EqBG,yBAAA;EjFm6TF;EEx7TD;I+EwBG,SAAA;EjFm6TF;EE37TD;I+EUG,cAAA;IACA,eAAA;IACA,gBAAA;EjFo7TF;EEh8TD;I+EeG,WAAA;EjFo7TF;EEn8TD;I+EkBG,YAAA;EjFo7TF;EEt8TD;I+EqBG,kBAAA;EjFo7TF;EEz8TD;I+EwBG,QAAA;EjFo7TF;EE58TD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjFq8TF;EEj9TD;I+EeG,kBAAA;EjFq8TF;EEp9TD;I+EkBG,mBAAA;EjFq8TF;EEv9TD;I+EqBG,yBAAA;EjFq8TF;EE19TD;I+EwBG,QAAA;EjFq8TF;EE79TD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjFs9TF;EEl+TD;I+EeG,kBAAA;EjFs9TF;EEr+TD;I+EkBG,mBAAA;EjFs9TF;EEx+TD;I+EqBG,yBAAA;EjFs9TF;EE3+TD;I+EwBG,QAAA;EjFs9TF;EE9+TD;I+EUG,cAAA;IACA,aAAA;IACA,cAAA;EjFu+TF;EEn/TD;I+EeG,SAAA;EjFu+TF;EEt/TD;I+EkBG,UAAA;EjFu+TF;EEz/TD;I+EqBG,gBAAA;EjFu+TF;EE5/TD;I+EwBG,QAAA;EjFu+TF;EE//TD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjFw/TF;EEpgUD;I+EeG,kBAAA;EjFw/TF;EEvgUD;I+EkBG,mBAAA;EjFw/TF;EE1gUD;I+EqBG,yBAAA;EjFw/TF;EE7gUD;I+EwBG,QAAA;EjFw/TF;EEhhUD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjFygUF;EErhUD;I+EeG,kBAAA;EjFygUF;EExhUD;I+EkBG,mBAAA;EjFygUF;EE3hUD;I+EqBG,yBAAA;EjFygUF;EE9hUD;I+EwBG,QAAA;EjFygUF;EEjiUD;I+EUG,cAAA;IACA,eAAA;IACA,gBAAA;EjF0hUF;EEtiUD;I+EeG,WAAA;EjF0hUF;EEziUD;I+EkBG,YAAA;EjF0hUF;EE5iUD;I+EqBG,kBAAA;EjF0hUF;EE/iUD;I+EwBG,QAAA;EjF0hUF;EEljUD;I+EUG,cAAA;IACA,qBAAA;IACA,sBAAA;EjF2iUF;EEvjUD;I+EeG,iBAAA;EjF2iUF;EE1jUD;I+EkBG,kBAAA;EjF2iUF;EE7jUD;I+EqBG,wBAAA;EjF2iUF;EEhkUD;I+EwBG,QAAA;EjF2iUF;EEnkUD;I+EUG,cAAA;IACA,qBAAA;IACA,sBAAA;EjF4jUF;EExkUD;I+EeG,iBAAA;EjF4jUF;EE3kUD;I+EkBG,kBAAA;EjF4jUF;EE9kUD;I+EqBG,wBAAA;EjF4jUF;EEjlUD;I+EwBG,QAAA;EjF4jUF;EEplUD;I+E+BG,aAAA;EjFwjUF;EEvlUD;I+EkCG,UAAA;EjFwjUF;EE1lUD;I+EqCG,WAAA;EjFwjUF;EE7lUD;I+EwCG,UAAA;EjFwjUF;EEhmUD;I+E2CG,WAAA;EjFwjUF;EEnmUD;I+E8CG,cAAA;EjFwjUF;EEtmUD;I+EiDG,QAAA;EjFwjUF;EEzmUD;IgFyCK,WAAA;ElFmkUJ;EE5mUD;IgF+CK,UAAA;ElFgkUJ;EE/mUD;IgFqDK,WAAA;ElF6jUJ;EElnUD;IgF2DK,UAAA;ElF0jUJ;EErnUD;IgFiEK,eAAA;ElFujUJ;EExnUD;IgFeK,kBAAA;IACA,UAAA;ElF4mUJ;EE5nUD;IgFuBK,WAAA;IACA,iBAAA;ElFwmUJ;EEhoUD;IgF+BK,yBAAA;IACA,cAAA;ElFomUJ;EEpoUD;IgFeK,kBAAA;IACA,UAAA;ElFwnUJ;EExoUD;IgFuBK,WAAA;IACA,iBAAA;ElFonUJ;EE5oUD;IgF+BK,yBAAA;IACA,cAAA;ElFgnUJ;EEhpUD;IgFeK,YAAA;IACA,UAAA;ElFooUJ;EEppUD;IgFuBK,WAAA;IACA,WAAA;ElFgoUJ;EExpUD;IgF+BK,mBAAA;IACA,cAAA;ElF4nUJ;EE5pUD;IgFeK,mBAAA;IACA,UAAA;ElFgpUJ;EEhqUD;IgFuBK,WAAA;IACA,kBAAA;ElF4oUJ;EEpqUD;IgF+BK,0BAAA;IACA,cAAA;ElFwoUJ;EExqUD;IgFeK,mBAAA;IACA,UAAA;ElF4pUJ;EE5qUD;IgFuBK,WAAA;IACA,kBAAA;ElFwpUJ;EEhrUD;IgF+BK,0BAAA;IACA,cAAA;ElFopUJ;EEprUD;IgFeK,UAAA;IACA,UAAA;ElFwqUJ;EExrUD;IgFuBK,WAAA;IACA,SAAA;ElFoqUJ;EE5rUD;IgF+BK,iBAAA;IACA,cAAA;ElFgqUJ;EEhsUD;IgFeK,mBAAA;IACA,UAAA;ElForUJ;EEpsUD;IgFuBK,WAAA;IACA,kBAAA;ElFgrUJ;EExsUD;IgF+BK,0BAAA;IACA,cAAA;ElF4qUJ;EE5sUD;IgFeK,mBAAA;IACA,UAAA;ElFgsUJ;EEhtUD;IgFuBK,WAAA;IACA,kBAAA;ElF4rUJ;EEptUD;IgF+BK,0BAAA;IACA,cAAA;ElFwrUJ;EExtUD;IgFeK,YAAA;IACA,UAAA;ElF4sUJ;EE5tUD;IgFuBK,WAAA;IACA,WAAA;ElFwsUJ;EEhuUD;IgF+BK,mBAAA;IACA,cAAA;ElFosUJ;EEpuUD;IgFeK,mBAAA;IACA,UAAA;ElFwtUJ;EExuUD;IgFuBK,WAAA;IACA,kBAAA;ElFotUJ;EE5uUD;IgF+BK,0BAAA;IACA,cAAA;ElFgtUJ;EEhvUD;IgFeK,mBAAA;IACA,UAAA;ElFouUJ;EEpvUD;IgFuBK,WAAA;IACA,kBAAA;ElFguUJ;EExvUD;IgF+BK,0BAAA;IACA,cAAA;ElF4tUJ;EE5vUD;IgFeK,UAAA;IACA,UAAA;ElFgvUJ;EEhwUD;IgFuBK,WAAA;IACA,SAAA;ElF4uUJ;EEpwUD;IgF+BK,iBAAA;IACA,cAAA;ElFwuUJ;EExwUD;IgFeK,mBAAA;IACA,UAAA;ElF4vUJ;EE5wUD;IgFuBK,WAAA;IACA,kBAAA;ElFwvUJ;EEhxUD;IgF+BK,0BAAA;IACA,cAAA;ElFovUJ;EEpxUD;IgFeK,mBAAA;IACA,UAAA;ElFwwUJ;EExxUD;IgFuBK,WAAA;IACA,kBAAA;ElFowUJ;EE5xUD;IgF+BK,0BAAA;IACA,cAAA;ElFgwUJ;EEhyUD;IgFeK,YAAA;IACA,UAAA;ElFoxUJ;EEpyUD;IgFuBK,WAAA;IACA,WAAA;ElFgxUJ;EExyUD;IgF+BK,mBAAA;IACA,cAAA;ElF4wUJ;EE5yUD;IgFeK,mBAAA;IACA,UAAA;ElFgyUJ;EEhzUD;IgFuBK,WAAA;IACA,kBAAA;ElF4xUJ;EEpzUD;IgF+BK,0BAAA;IACA,cAAA;ElFwxUJ;EExzUD;IgFeK,mBAAA;IACA,UAAA;ElF4yUJ;EE5zUD;IgFuBK,WAAA;IACA,kBAAA;ElFwyUJ;EEh0UD;IgF+BK,0BAAA;IACA,cAAA;ElFoyUJ;EEp0UD;IgFeK,UAAA;IACA,UAAA;ElFwzUJ;EEx0UD;IgFuBK,WAAA;IACA,SAAA;ElFozUJ;EE50UD;IgF+BK,iBAAA;IACA,cAAA;ElFgzUJ;EEh1UD;IgFeK,mBAAA;IACA,UAAA;ElFo0UJ;EEp1UD;IgFuBK,WAAA;IACA,kBAAA;ElFg0UJ;EEx1UD;IgF+BK,0BAAA;IACA,cAAA;ElF4zUJ;EE51UD;IgFeK,mBAAA;IACA,UAAA;ElFg1UJ;EEh2UD;IgFuBK,WAAA;IACA,kBAAA;ElF40UJ;EEp2UD;IgF+BK,0BAAA;IACA,cAAA;ElFw0UJ;EEx2UD;IgFeK,YAAA;IACA,UAAA;ElF41UJ;EE52UD;IgFuBK,WAAA;IACA,WAAA;ElFw1UJ;EEh3UD;IgF+BK,mBAAA;IACA,cAAA;ElFo1UJ;EEp3UD;IgFeK,mBAAA;IACA,UAAA;ElFw2UJ;EEx3UD;IgFuBK,WAAA;IACA,kBAAA;ElFo2UJ;EE53UD;IgF+BK,0BAAA;IACA,cAAA;ElFg2UJ;EEh4UD;IgFeK,mBAAA;IACA,UAAA;ElFo3UJ;EEp4UD;IgFuBK,WAAA;IACA,kBAAA;ElFg3UJ;EEx4UD;IgF+BK,0BAAA;IACA,cAAA;ElF42UJ;EE54UD;IgFeK,WAAA;IACA,UAAA;ElFg4UJ;EEh5UD;IgFuBK,WAAA;IACA,UAAA;ElF43UJ;EEp5UD;IgF+BK,kBAAA;IACA,cAAA;ElFw3UJ;AACF;AgF1zUA;E9E/FC;I+EUG,cAAA;IACA,cAAA;IACA,eAAA;EjFm5UF;EE/5UD;I+EeG,UAAA;EjFm5UF;EEl6UD;I+EkBG,WAAA;EjFm5UF;EEr6UD;I+EqBG,iBAAA;EjFm5UF;EEx6UD;I+EwBG,SAAA;EjFm5UF;EE36UD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjFo6UF;EEh7UD;I+EeG,kBAAA;EjFo6UF;EEn7UD;I+EkBG,mBAAA;EjFo6UF;EEt7UD;I+EqBG,yBAAA;EjFo6UF;EEz7UD;I+EwBG,SAAA;EjFo6UF;EE57UD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjFq7UF;EEj8UD;I+EeG,kBAAA;EjFq7UF;EEp8UD;I+EkBG,mBAAA;EjFq7UF;EEv8UD;I+EqBG,yBAAA;EjFq7UF;EE18UD;I+EwBG,SAAA;EjFq7UF;EE78UD;I+EUG,cAAA;IACA,eAAA;IACA,gBAAA;EjFs8UF;EEl9UD;I+EeG,WAAA;EjFs8UF;EEr9UD;I+EkBG,YAAA;EjFs8UF;EEx9UD;I+EqBG,kBAAA;EjFs8UF;EE39UD;I+EwBG,SAAA;EjFs8UF;EE99UD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjFu9UF;EEn+UD;I+EeG,kBAAA;EjFu9UF;EEt+UD;I+EkBG,mBAAA;EjFu9UF;EEz+UD;I+EqBG,yBAAA;EjFu9UF;EE5+UD;I+EwBG,SAAA;EjFu9UF;EE/+UD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjFw+UF;EEp/UD;I+EeG,kBAAA;EjFw+UF;EEv/UD;I+EkBG,mBAAA;EjFw+UF;EE1/UD;I+EqBG,yBAAA;EjFw+UF;EE7/UD;I+EwBG,SAAA;EjFw+UF;EEhgVD;I+EUG,cAAA;IACA,aAAA;IACA,cAAA;EjFy/UF;EErgVD;I+EeG,SAAA;EjFy/UF;EExgVD;I+EkBG,UAAA;EjFy/UF;EE3gVD;I+EqBG,gBAAA;EjFy/UF;EE9gVD;I+EwBG,SAAA;EjFy/UF;EEjhVD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjF0gVF;EEthVD;I+EeG,kBAAA;EjF0gVF;EEzhVD;I+EkBG,mBAAA;EjF0gVF;EE5hVD;I+EqBG,yBAAA;EjF0gVF;EE/hVD;I+EwBG,SAAA;EjF0gVF;EEliVD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjF2hVF;EEviVD;I+EeG,kBAAA;EjF2hVF;EE1iVD;I+EkBG,mBAAA;EjF2hVF;EE7iVD;I+EqBG,yBAAA;EjF2hVF;EEhjVD;I+EwBG,SAAA;EjF2hVF;EEnjVD;I+EUG,cAAA;IACA,eAAA;IACA,gBAAA;EjF4iVF;EExjVD;I+EeG,WAAA;EjF4iVF;EE3jVD;I+EkBG,YAAA;EjF4iVF;EE9jVD;I+EqBG,kBAAA;EjF4iVF;EEjkVD;I+EwBG,SAAA;EjF4iVF;EEpkVD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjF6jVF;EEzkVD;I+EeG,kBAAA;EjF6jVF;EE5kVD;I+EkBG,mBAAA;EjF6jVF;EE/kVD;I+EqBG,yBAAA;EjF6jVF;EEllVD;I+EwBG,SAAA;EjF6jVF;EErlVD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjF8kVF;EE1lVD;I+EeG,kBAAA;EjF8kVF;EE7lVD;I+EkBG,mBAAA;EjF8kVF;EEhmVD;I+EqBG,yBAAA;EjF8kVF;EEnmVD;I+EwBG,SAAA;EjF8kVF;EEtmVD;I+EUG,cAAA;IACA,aAAA;IACA,cAAA;EjF+lVF;EE3mVD;I+EeG,SAAA;EjF+lVF;EE9mVD;I+EkBG,UAAA;EjF+lVF;EEjnVD;I+EqBG,gBAAA;EjF+lVF;EEpnVD;I+EwBG,SAAA;EjF+lVF;EEvnVD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjFgnVF;EE5nVD;I+EeG,kBAAA;EjFgnVF;EE/nVD;I+EkBG,mBAAA;EjFgnVF;EEloVD;I+EqBG,yBAAA;EjFgnVF;EEroVD;I+EwBG,SAAA;EjFgnVF;EExoVD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjFioVF;EE7oVD;I+EeG,kBAAA;EjFioVF;EEhpVD;I+EkBG,mBAAA;EjFioVF;EEnpVD;I+EqBG,yBAAA;EjFioVF;EEtpVD;I+EwBG,SAAA;EjFioVF;EEzpVD;I+EUG,cAAA;IACA,eAAA;IACA,gBAAA;EjFkpVF;EE9pVD;I+EeG,WAAA;EjFkpVF;EEjqVD;I+EkBG,YAAA;EjFkpVF;EEpqVD;I+EqBG,kBAAA;EjFkpVF;EEvqVD;I+EwBG,QAAA;EjFkpVF;EE1qVD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjFmqVF;EE/qVD;I+EeG,kBAAA;EjFmqVF;EElrVD;I+EkBG,mBAAA;EjFmqVF;EErrVD;I+EqBG,yBAAA;EjFmqVF;EExrVD;I+EwBG,QAAA;EjFmqVF;EE3rVD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjForVF;EEhsVD;I+EeG,kBAAA;EjForVF;EEnsVD;I+EkBG,mBAAA;EjForVF;EEtsVD;I+EqBG,yBAAA;EjForVF;EEzsVD;I+EwBG,QAAA;EjForVF;EE5sVD;I+EUG,cAAA;IACA,aAAA;IACA,cAAA;EjFqsVF;EEjtVD;I+EeG,SAAA;EjFqsVF;EEptVD;I+EkBG,UAAA;EjFqsVF;EEvtVD;I+EqBG,gBAAA;EjFqsVF;EE1tVD;I+EwBG,QAAA;EjFqsVF;EE7tVD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjFstVF;EEluVD;I+EeG,kBAAA;EjFstVF;EEruVD;I+EkBG,mBAAA;EjFstVF;EExuVD;I+EqBG,yBAAA;EjFstVF;EE3uVD;I+EwBG,QAAA;EjFstVF;EE9uVD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjFuuVF;EEnvVD;I+EeG,kBAAA;EjFuuVF;EEtvVD;I+EkBG,mBAAA;EjFuuVF;EEzvVD;I+EqBG,yBAAA;EjFuuVF;EE5vVD;I+EwBG,QAAA;EjFuuVF;EE/vVD;I+EUG,cAAA;IACA,eAAA;IACA,gBAAA;EjFwvVF;EEpwVD;I+EeG,WAAA;EjFwvVF;EEvwVD;I+EkBG,YAAA;EjFwvVF;EE1wVD;I+EqBG,kBAAA;EjFwvVF;EE7wVD;I+EwBG,QAAA;EjFwvVF;EEhxVD;I+EUG,cAAA;IACA,qBAAA;IACA,sBAAA;EjFywVF;EErxVD;I+EeG,iBAAA;EjFywVF;EExxVD;I+EkBG,kBAAA;EjFywVF;EE3xVD;I+EqBG,wBAAA;EjFywVF;EE9xVD;I+EwBG,QAAA;EjFywVF;EEjyVD;I+EUG,cAAA;IACA,qBAAA;IACA,sBAAA;EjF0xVF;EEtyVD;I+EeG,iBAAA;EjF0xVF;EEzyVD;I+EkBG,kBAAA;EjF0xVF;EE5yVD;I+EqBG,wBAAA;EjF0xVF;EE/yVD;I+EwBG,QAAA;EjF0xVF;EElzVD;I+E+BG,aAAA;EjFsxVF;EErzVD;I+EkCG,UAAA;EjFsxVF;EExzVD;I+EqCG,WAAA;EjFsxVF;EE3zVD;I+EwCG,UAAA;EjFsxVF;EE9zVD;I+E2CG,WAAA;EjFsxVF;EEj0VD;I+E8CG,cAAA;EjFsxVF;EEp0VD;I+EiDG,QAAA;EjFsxVF;EEv0VD;IgFyCK,WAAA;ElFiyVJ;EE10VD;IgF+CK,UAAA;ElF8xVJ;EE70VD;IgFqDK,WAAA;ElF2xVJ;EEh1VD;IgF2DK,UAAA;ElFwxVJ;EEn1VD;IgFiEK,eAAA;ElFqxVJ;EEt1VD;IgFeK,kBAAA;IACA,UAAA;ElF00VJ;EE11VD;IgFuBK,WAAA;IACA,iBAAA;ElFs0VJ;EE91VD;IgF+BK,yBAAA;IACA,cAAA;ElFk0VJ;EEl2VD;IgFeK,kBAAA;IACA,UAAA;ElFs1VJ;EEt2VD;IgFuBK,WAAA;IACA,iBAAA;ElFk1VJ;EE12VD;IgF+BK,yBAAA;IACA,cAAA;ElF80VJ;EE92VD;IgFeK,YAAA;IACA,UAAA;ElFk2VJ;EEl3VD;IgFuBK,WAAA;IACA,WAAA;ElF81VJ;EEt3VD;IgF+BK,mBAAA;IACA,cAAA;ElF01VJ;EE13VD;IgFeK,mBAAA;IACA,UAAA;ElF82VJ;EE93VD;IgFuBK,WAAA;IACA,kBAAA;ElF02VJ;EEl4VD;IgF+BK,0BAAA;IACA,cAAA;ElFs2VJ;EEt4VD;IgFeK,mBAAA;IACA,UAAA;ElF03VJ;EE14VD;IgFuBK,WAAA;IACA,kBAAA;ElFs3VJ;EE94VD;IgF+BK,0BAAA;IACA,cAAA;ElFk3VJ;EEl5VD;IgFeK,UAAA;IACA,UAAA;ElFs4VJ;EEt5VD;IgFuBK,WAAA;IACA,SAAA;ElFk4VJ;EE15VD;IgF+BK,iBAAA;IACA,cAAA;ElF83VJ;EE95VD;IgFeK,mBAAA;IACA,UAAA;ElFk5VJ;EEl6VD;IgFuBK,WAAA;IACA,kBAAA;ElF84VJ;EEt6VD;IgF+BK,0BAAA;IACA,cAAA;ElF04VJ;EE16VD;IgFeK,mBAAA;IACA,UAAA;ElF85VJ;EE96VD;IgFuBK,WAAA;IACA,kBAAA;ElF05VJ;EEl7VD;IgF+BK,0BAAA;IACA,cAAA;ElFs5VJ;EEt7VD;IgFeK,YAAA;IACA,UAAA;ElF06VJ;EE17VD;IgFuBK,WAAA;IACA,WAAA;ElFs6VJ;EE97VD;IgF+BK,mBAAA;IACA,cAAA;ElFk6VJ;EEl8VD;IgFeK,mBAAA;IACA,UAAA;ElFs7VJ;EEt8VD;IgFuBK,WAAA;IACA,kBAAA;ElFk7VJ;EE18VD;IgF+BK,0BAAA;IACA,cAAA;ElF86VJ;EE98VD;IgFeK,mBAAA;IACA,UAAA;ElFk8VJ;EEl9VD;IgFuBK,WAAA;IACA,kBAAA;ElF87VJ;EEt9VD;IgF+BK,0BAAA;IACA,cAAA;ElF07VJ;EE19VD;IgFeK,UAAA;IACA,UAAA;ElF88VJ;EE99VD;IgFuBK,WAAA;IACA,SAAA;ElF08VJ;EEl+VD;IgF+BK,iBAAA;IACA,cAAA;ElFs8VJ;EEt+VD;IgFeK,mBAAA;IACA,UAAA;ElF09VJ;EE1+VD;IgFuBK,WAAA;IACA,kBAAA;ElFs9VJ;EE9+VD;IgF+BK,0BAAA;IACA,cAAA;ElFk9VJ;EEl/VD;IgFeK,mBAAA;IACA,UAAA;ElFs+VJ;EEt/VD;IgFuBK,WAAA;IACA,kBAAA;ElFk+VJ;EE1/VD;IgF+BK,0BAAA;IACA,cAAA;ElF89VJ;EE9/VD;IgFeK,YAAA;IACA,UAAA;ElFk/VJ;EElgWD;IgFuBK,WAAA;IACA,WAAA;ElF8+VJ;EEtgWD;IgF+BK,mBAAA;IACA,cAAA;ElF0+VJ;EE1gWD;IgFeK,mBAAA;IACA,UAAA;ElF8/VJ;EE9gWD;IgFuBK,WAAA;IACA,kBAAA;ElF0/VJ;EElhWD;IgF+BK,0BAAA;IACA,cAAA;ElFs/VJ;EEthWD;IgFeK,mBAAA;IACA,UAAA;ElF0gWJ;EE1hWD;IgFuBK,WAAA;IACA,kBAAA;ElFsgWJ;EE9hWD;IgF+BK,0BAAA;IACA,cAAA;ElFkgWJ;EEliWD;IgFeK,UAAA;IACA,UAAA;ElFshWJ;EEtiWD;IgFuBK,WAAA;IACA,SAAA;ElFkhWJ;EE1iWD;IgF+BK,iBAAA;IACA,cAAA;ElF8gWJ;EE9iWD;IgFeK,mBAAA;IACA,UAAA;ElFkiWJ;EEljWD;IgFuBK,WAAA;IACA,kBAAA;ElF8hWJ;EEtjWD;IgF+BK,0BAAA;IACA,cAAA;ElF0hWJ;EE1jWD;IgFeK,mBAAA;IACA,UAAA;ElF8iWJ;EE9jWD;IgFuBK,WAAA;IACA,kBAAA;ElF0iWJ;EElkWD;IgF+BK,0BAAA;IACA,cAAA;ElFsiWJ;EEtkWD;IgFeK,YAAA;IACA,UAAA;ElF0jWJ;EE1kWD;IgFuBK,WAAA;IACA,WAAA;ElFsjWJ;EE9kWD;IgF+BK,mBAAA;IACA,cAAA;ElFkjWJ;EEllWD;IgFeK,mBAAA;IACA,UAAA;ElFskWJ;EEtlWD;IgFuBK,WAAA;IACA,kBAAA;ElFkkWJ;EE1lWD;IgF+BK,0BAAA;IACA,cAAA;ElF8jWJ;EE9lWD;IgFeK,mBAAA;IACA,UAAA;ElFklWJ;EElmWD;IgFuBK,WAAA;IACA,kBAAA;ElF8kWJ;EEtmWD;IgF+BK,0BAAA;IACA,cAAA;ElF0kWJ;EE1mWD;IgFeK,WAAA;IACA,UAAA;ElF8lWJ;EE9mWD;IgFuBK,WAAA;IACA,UAAA;ElF0lWJ;EElnWD;IgF+BK,kBAAA;IACA,cAAA;ElFslWJ;AACF;AgFhhWA;E9EvGC;I+EUG,cAAA;IACA,cAAA;IACA,eAAA;EjFinWF;EE7nWD;I+EeG,UAAA;EjFinWF;EEhoWD;I+EkBG,WAAA;EjFinWF;EEnoWD;I+EqBG,iBAAA;EjFinWF;EEtoWD;I+EwBG,SAAA;EjFinWF;EEzoWD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjFkoWF;EE9oWD;I+EeG,kBAAA;EjFkoWF;EEjpWD;I+EkBG,mBAAA;EjFkoWF;EEppWD;I+EqBG,yBAAA;EjFkoWF;EEvpWD;I+EwBG,SAAA;EjFkoWF;EE1pWD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjFmpWF;EE/pWD;I+EeG,kBAAA;EjFmpWF;EElqWD;I+EkBG,mBAAA;EjFmpWF;EErqWD;I+EqBG,yBAAA;EjFmpWF;EExqWD;I+EwBG,SAAA;EjFmpWF;EE3qWD;I+EUG,cAAA;IACA,eAAA;IACA,gBAAA;EjFoqWF;EEhrWD;I+EeG,WAAA;EjFoqWF;EEnrWD;I+EkBG,YAAA;EjFoqWF;EEtrWD;I+EqBG,kBAAA;EjFoqWF;EEzrWD;I+EwBG,SAAA;EjFoqWF;EE5rWD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjFqrWF;EEjsWD;I+EeG,kBAAA;EjFqrWF;EEpsWD;I+EkBG,mBAAA;EjFqrWF;EEvsWD;I+EqBG,yBAAA;EjFqrWF;EE1sWD;I+EwBG,SAAA;EjFqrWF;EE7sWD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjFssWF;EEltWD;I+EeG,kBAAA;EjFssWF;EErtWD;I+EkBG,mBAAA;EjFssWF;EExtWD;I+EqBG,yBAAA;EjFssWF;EE3tWD;I+EwBG,SAAA;EjFssWF;EE9tWD;I+EUG,cAAA;IACA,aAAA;IACA,cAAA;EjFutWF;EEnuWD;I+EeG,SAAA;EjFutWF;EEtuWD;I+EkBG,UAAA;EjFutWF;EEzuWD;I+EqBG,gBAAA;EjFutWF;EE5uWD;I+EwBG,SAAA;EjFutWF;EE/uWD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjFwuWF;EEpvWD;I+EeG,kBAAA;EjFwuWF;EEvvWD;I+EkBG,mBAAA;EjFwuWF;EE1vWD;I+EqBG,yBAAA;EjFwuWF;EE7vWD;I+EwBG,SAAA;EjFwuWF;EEhwWD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjFyvWF;EErwWD;I+EeG,kBAAA;EjFyvWF;EExwWD;I+EkBG,mBAAA;EjFyvWF;EE3wWD;I+EqBG,yBAAA;EjFyvWF;EE9wWD;I+EwBG,SAAA;EjFyvWF;EEjxWD;I+EUG,cAAA;IACA,eAAA;IACA,gBAAA;EjF0wWF;EEtxWD;I+EeG,WAAA;EjF0wWF;EEzxWD;I+EkBG,YAAA;EjF0wWF;EE5xWD;I+EqBG,kBAAA;EjF0wWF;EE/xWD;I+EwBG,SAAA;EjF0wWF;EElyWD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjF2xWF;EEvyWD;I+EeG,kBAAA;EjF2xWF;EE1yWD;I+EkBG,mBAAA;EjF2xWF;EE7yWD;I+EqBG,yBAAA;EjF2xWF;EEhzWD;I+EwBG,SAAA;EjF2xWF;EEnzWD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjF4yWF;EExzWD;I+EeG,kBAAA;EjF4yWF;EE3zWD;I+EkBG,mBAAA;EjF4yWF;EE9zWD;I+EqBG,yBAAA;EjF4yWF;EEj0WD;I+EwBG,SAAA;EjF4yWF;EEp0WD;I+EUG,cAAA;IACA,aAAA;IACA,cAAA;EjF6zWF;EEz0WD;I+EeG,SAAA;EjF6zWF;EE50WD;I+EkBG,UAAA;EjF6zWF;EE/0WD;I+EqBG,gBAAA;EjF6zWF;EEl1WD;I+EwBG,SAAA;EjF6zWF;EEr1WD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjF80WF;EE11WD;I+EeG,kBAAA;EjF80WF;EE71WD;I+EkBG,mBAAA;EjF80WF;EEh2WD;I+EqBG,yBAAA;EjF80WF;EEn2WD;I+EwBG,SAAA;EjF80WF;EEt2WD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjF+1WF;EE32WD;I+EeG,kBAAA;EjF+1WF;EE92WD;I+EkBG,mBAAA;EjF+1WF;EEj3WD;I+EqBG,yBAAA;EjF+1WF;EEp3WD;I+EwBG,SAAA;EjF+1WF;EEv3WD;I+EUG,cAAA;IACA,eAAA;IACA,gBAAA;EjFg3WF;EE53WD;I+EeG,WAAA;EjFg3WF;EE/3WD;I+EkBG,YAAA;EjFg3WF;EEl4WD;I+EqBG,kBAAA;EjFg3WF;EEr4WD;I+EwBG,QAAA;EjFg3WF;EEx4WD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjFi4WF;EE74WD;I+EeG,kBAAA;EjFi4WF;EEh5WD;I+EkBG,mBAAA;EjFi4WF;EEn5WD;I+EqBG,yBAAA;EjFi4WF;EEt5WD;I+EwBG,QAAA;EjFi4WF;EEz5WD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjFk5WF;EE95WD;I+EeG,kBAAA;EjFk5WF;EEj6WD;I+EkBG,mBAAA;EjFk5WF;EEp6WD;I+EqBG,yBAAA;EjFk5WF;EEv6WD;I+EwBG,QAAA;EjFk5WF;EE16WD;I+EUG,cAAA;IACA,aAAA;IACA,cAAA;EjFm6WF;EE/6WD;I+EeG,SAAA;EjFm6WF;EEl7WD;I+EkBG,UAAA;EjFm6WF;EEr7WD;I+EqBG,gBAAA;EjFm6WF;EEx7WD;I+EwBG,QAAA;EjFm6WF;EE37WD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjFo7WF;EEh8WD;I+EeG,kBAAA;EjFo7WF;EEn8WD;I+EkBG,mBAAA;EjFo7WF;EEt8WD;I+EqBG,yBAAA;EjFo7WF;EEz8WD;I+EwBG,QAAA;EjFo7WF;EE58WD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjFq8WF;EEj9WD;I+EeG,kBAAA;EjFq8WF;EEp9WD;I+EkBG,mBAAA;EjFq8WF;EEv9WD;I+EqBG,yBAAA;EjFq8WF;EE19WD;I+EwBG,QAAA;EjFq8WF;EE79WD;I+EUG,cAAA;IACA,eAAA;IACA,gBAAA;EjFs9WF;EEl+WD;I+EeG,WAAA;EjFs9WF;EEr+WD;I+EkBG,YAAA;EjFs9WF;EEx+WD;I+EqBG,kBAAA;EjFs9WF;EE3+WD;I+EwBG,QAAA;EjFs9WF;EE9+WD;I+EUG,cAAA;IACA,qBAAA;IACA,sBAAA;EjFu+WF;EEn/WD;I+EeG,iBAAA;EjFu+WF;EEt/WD;I+EkBG,kBAAA;EjFu+WF;EEz/WD;I+EqBG,wBAAA;EjFu+WF;EE5/WD;I+EwBG,QAAA;EjFu+WF;EE//WD;I+EUG,cAAA;IACA,qBAAA;IACA,sBAAA;EjFw/WF;EEpgXD;I+EeG,iBAAA;EjFw/WF;EEvgXD;I+EkBG,kBAAA;EjFw/WF;EE1gXD;I+EqBG,wBAAA;EjFw/WF;EE7gXD;I+EwBG,QAAA;EjFw/WF;EEhhXD;I+E+BG,aAAA;EjFo/WF;EEnhXD;I+EkCG,UAAA;EjFo/WF;EEthXD;I+EqCG,WAAA;EjFo/WF;EEzhXD;I+EwCG,UAAA;EjFo/WF;EE5hXD;I+E2CG,WAAA;EjFo/WF;EE/hXD;I+E8CG,cAAA;EjFo/WF;EEliXD;I+EiDG,QAAA;EjFo/WF;EEriXD;IgFyCK,WAAA;ElF+/WJ;EExiXD;IgF+CK,UAAA;ElF4/WJ;EE3iXD;IgFqDK,WAAA;ElFy/WJ;EE9iXD;IgF2DK,UAAA;ElFs/WJ;EEjjXD;IgFiEK,eAAA;ElFm/WJ;EEpjXD;IgFeK,kBAAA;IACA,UAAA;ElFwiXJ;EExjXD;IgFuBK,WAAA;IACA,iBAAA;ElFoiXJ;EE5jXD;IgF+BK,yBAAA;IACA,cAAA;ElFgiXJ;EEhkXD;IgFeK,kBAAA;IACA,UAAA;ElFojXJ;EEpkXD;IgFuBK,WAAA;IACA,iBAAA;ElFgjXJ;EExkXD;IgF+BK,yBAAA;IACA,cAAA;ElF4iXJ;EE5kXD;IgFeK,YAAA;IACA,UAAA;ElFgkXJ;EEhlXD;IgFuBK,WAAA;IACA,WAAA;ElF4jXJ;EEplXD;IgF+BK,mBAAA;IACA,cAAA;ElFwjXJ;EExlXD;IgFeK,mBAAA;IACA,UAAA;ElF4kXJ;EE5lXD;IgFuBK,WAAA;IACA,kBAAA;ElFwkXJ;EEhmXD;IgF+BK,0BAAA;IACA,cAAA;ElFokXJ;EEpmXD;IgFeK,mBAAA;IACA,UAAA;ElFwlXJ;EExmXD;IgFuBK,WAAA;IACA,kBAAA;ElFolXJ;EE5mXD;IgF+BK,0BAAA;IACA,cAAA;ElFglXJ;EEhnXD;IgFeK,UAAA;IACA,UAAA;ElFomXJ;EEpnXD;IgFuBK,WAAA;IACA,SAAA;ElFgmXJ;EExnXD;IgF+BK,iBAAA;IACA,cAAA;ElF4lXJ;EE5nXD;IgFeK,mBAAA;IACA,UAAA;ElFgnXJ;EEhoXD;IgFuBK,WAAA;IACA,kBAAA;ElF4mXJ;EEpoXD;IgF+BK,0BAAA;IACA,cAAA;ElFwmXJ;EExoXD;IgFeK,mBAAA;IACA,UAAA;ElF4nXJ;EE5oXD;IgFuBK,WAAA;IACA,kBAAA;ElFwnXJ;EEhpXD;IgF+BK,0BAAA;IACA,cAAA;ElFonXJ;EEppXD;IgFeK,YAAA;IACA,UAAA;ElFwoXJ;EExpXD;IgFuBK,WAAA;IACA,WAAA;ElFooXJ;EE5pXD;IgF+BK,mBAAA;IACA,cAAA;ElFgoXJ;EEhqXD;IgFeK,mBAAA;IACA,UAAA;ElFopXJ;EEpqXD;IgFuBK,WAAA;IACA,kBAAA;ElFgpXJ;EExqXD;IgF+BK,0BAAA;IACA,cAAA;ElF4oXJ;EE5qXD;IgFeK,mBAAA;IACA,UAAA;ElFgqXJ;EEhrXD;IgFuBK,WAAA;IACA,kBAAA;ElF4pXJ;EEprXD;IgF+BK,0BAAA;IACA,cAAA;ElFwpXJ;EExrXD;IgFeK,UAAA;IACA,UAAA;ElF4qXJ;EE5rXD;IgFuBK,WAAA;IACA,SAAA;ElFwqXJ;EEhsXD;IgF+BK,iBAAA;IACA,cAAA;ElFoqXJ;EEpsXD;IgFeK,mBAAA;IACA,UAAA;ElFwrXJ;EExsXD;IgFuBK,WAAA;IACA,kBAAA;ElForXJ;EE5sXD;IgF+BK,0BAAA;IACA,cAAA;ElFgrXJ;EEhtXD;IgFeK,mBAAA;IACA,UAAA;ElFosXJ;EEptXD;IgFuBK,WAAA;IACA,kBAAA;ElFgsXJ;EExtXD;IgF+BK,0BAAA;IACA,cAAA;ElF4rXJ;EE5tXD;IgFeK,YAAA;IACA,UAAA;ElFgtXJ;EEhuXD;IgFuBK,WAAA;IACA,WAAA;ElF4sXJ;EEpuXD;IgF+BK,mBAAA;IACA,cAAA;ElFwsXJ;EExuXD;IgFeK,mBAAA;IACA,UAAA;ElF4tXJ;EE5uXD;IgFuBK,WAAA;IACA,kBAAA;ElFwtXJ;EEhvXD;IgF+BK,0BAAA;IACA,cAAA;ElFotXJ;EEpvXD;IgFeK,mBAAA;IACA,UAAA;ElFwuXJ;EExvXD;IgFuBK,WAAA;IACA,kBAAA;ElFouXJ;EE5vXD;IgF+BK,0BAAA;IACA,cAAA;ElFguXJ;EEhwXD;IgFeK,UAAA;IACA,UAAA;ElFovXJ;EEpwXD;IgFuBK,WAAA;IACA,SAAA;ElFgvXJ;EExwXD;IgF+BK,iBAAA;IACA,cAAA;ElF4uXJ;EE5wXD;IgFeK,mBAAA;IACA,UAAA;ElFgwXJ;EEhxXD;IgFuBK,WAAA;IACA,kBAAA;ElF4vXJ;EEpxXD;IgF+BK,0BAAA;IACA,cAAA;ElFwvXJ;EExxXD;IgFeK,mBAAA;IACA,UAAA;ElF4wXJ;EE5xXD;IgFuBK,WAAA;IACA,kBAAA;ElFwwXJ;EEhyXD;IgF+BK,0BAAA;IACA,cAAA;ElFowXJ;EEpyXD;IgFeK,YAAA;IACA,UAAA;ElFwxXJ;EExyXD;IgFuBK,WAAA;IACA,WAAA;ElFoxXJ;EE5yXD;IgF+BK,mBAAA;IACA,cAAA;ElFgxXJ;EEhzXD;IgFeK,mBAAA;IACA,UAAA;ElFoyXJ;EEpzXD;IgFuBK,WAAA;IACA,kBAAA;ElFgyXJ;EExzXD;IgF+BK,0BAAA;IACA,cAAA;ElF4xXJ;EE5zXD;IgFeK,mBAAA;IACA,UAAA;ElFgzXJ;EEh0XD;IgFuBK,WAAA;IACA,kBAAA;ElF4yXJ;EEp0XD;IgF+BK,0BAAA;IACA,cAAA;ElFwyXJ;EEx0XD;IgFeK,WAAA;IACA,UAAA;ElF4zXJ;EE50XD;IgFuBK,WAAA;IACA,UAAA;ElFwzXJ;EEh1XD;IgF+BK,kBAAA;IACA,cAAA;ElFozXJ;AACF;AgFtuXA;E9E/GC;I+EUG,cAAA;IACA,cAAA;IACA,eAAA;EjF+0XF;EE31XD;I+EeG,UAAA;EjF+0XF;EE91XD;I+EkBG,WAAA;EjF+0XF;EEj2XD;I+EqBG,iBAAA;EjF+0XF;EEp2XD;I+EwBG,SAAA;EjF+0XF;EEv2XD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjFg2XF;EE52XD;I+EeG,kBAAA;EjFg2XF;EE/2XD;I+EkBG,mBAAA;EjFg2XF;EEl3XD;I+EqBG,yBAAA;EjFg2XF;EEr3XD;I+EwBG,SAAA;EjFg2XF;EEx3XD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjFi3XF;EE73XD;I+EeG,kBAAA;EjFi3XF;EEh4XD;I+EkBG,mBAAA;EjFi3XF;EEn4XD;I+EqBG,yBAAA;EjFi3XF;EEt4XD;I+EwBG,SAAA;EjFi3XF;EEz4XD;I+EUG,cAAA;IACA,eAAA;IACA,gBAAA;EjFk4XF;EE94XD;I+EeG,WAAA;EjFk4XF;EEj5XD;I+EkBG,YAAA;EjFk4XF;EEp5XD;I+EqBG,kBAAA;EjFk4XF;EEv5XD;I+EwBG,SAAA;EjFk4XF;EE15XD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjFm5XF;EE/5XD;I+EeG,kBAAA;EjFm5XF;EEl6XD;I+EkBG,mBAAA;EjFm5XF;EEr6XD;I+EqBG,yBAAA;EjFm5XF;EEx6XD;I+EwBG,SAAA;EjFm5XF;EE36XD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjFo6XF;EEh7XD;I+EeG,kBAAA;EjFo6XF;EEn7XD;I+EkBG,mBAAA;EjFo6XF;EEt7XD;I+EqBG,yBAAA;EjFo6XF;EEz7XD;I+EwBG,SAAA;EjFo6XF;EE57XD;I+EUG,cAAA;IACA,aAAA;IACA,cAAA;EjFq7XF;EEj8XD;I+EeG,SAAA;EjFq7XF;EEp8XD;I+EkBG,UAAA;EjFq7XF;EEv8XD;I+EqBG,gBAAA;EjFq7XF;EE18XD;I+EwBG,SAAA;EjFq7XF;EE78XD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjFs8XF;EEl9XD;I+EeG,kBAAA;EjFs8XF;EEr9XD;I+EkBG,mBAAA;EjFs8XF;EEx9XD;I+EqBG,yBAAA;EjFs8XF;EE39XD;I+EwBG,SAAA;EjFs8XF;EE99XD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjFu9XF;EEn+XD;I+EeG,kBAAA;EjFu9XF;EEt+XD;I+EkBG,mBAAA;EjFu9XF;EEz+XD;I+EqBG,yBAAA;EjFu9XF;EE5+XD;I+EwBG,SAAA;EjFu9XF;EE/+XD;I+EUG,cAAA;IACA,eAAA;IACA,gBAAA;EjFw+XF;EEp/XD;I+EeG,WAAA;EjFw+XF;EEv/XD;I+EkBG,YAAA;EjFw+XF;EE1/XD;I+EqBG,kBAAA;EjFw+XF;EE7/XD;I+EwBG,SAAA;EjFw+XF;EEhgYD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjFy/XF;EErgYD;I+EeG,kBAAA;EjFy/XF;EExgYD;I+EkBG,mBAAA;EjFy/XF;EE3gYD;I+EqBG,yBAAA;EjFy/XF;EE9gYD;I+EwBG,SAAA;EjFy/XF;EEjhYD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjF0gYF;EEthYD;I+EeG,kBAAA;EjF0gYF;EEzhYD;I+EkBG,mBAAA;EjF0gYF;EE5hYD;I+EqBG,yBAAA;EjF0gYF;EE/hYD;I+EwBG,SAAA;EjF0gYF;EEliYD;I+EUG,cAAA;IACA,aAAA;IACA,cAAA;EjF2hYF;EEviYD;I+EeG,SAAA;EjF2hYF;EE1iYD;I+EkBG,UAAA;EjF2hYF;EE7iYD;I+EqBG,gBAAA;EjF2hYF;EEhjYD;I+EwBG,SAAA;EjF2hYF;EEnjYD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjF4iYF;EExjYD;I+EeG,kBAAA;EjF4iYF;EE3jYD;I+EkBG,mBAAA;EjF4iYF;EE9jYD;I+EqBG,yBAAA;EjF4iYF;EEjkYD;I+EwBG,SAAA;EjF4iYF;EEpkYD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjF6jYF;EEzkYD;I+EeG,kBAAA;EjF6jYF;EE5kYD;I+EkBG,mBAAA;EjF6jYF;EE/kYD;I+EqBG,yBAAA;EjF6jYF;EEllYD;I+EwBG,SAAA;EjF6jYF;EErlYD;I+EUG,cAAA;IACA,eAAA;IACA,gBAAA;EjF8kYF;EE1lYD;I+EeG,WAAA;EjF8kYF;EE7lYD;I+EkBG,YAAA;EjF8kYF;EEhmYD;I+EqBG,kBAAA;EjF8kYF;EEnmYD;I+EwBG,QAAA;EjF8kYF;EEtmYD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjF+lYF;EE3mYD;I+EeG,kBAAA;EjF+lYF;EE9mYD;I+EkBG,mBAAA;EjF+lYF;EEjnYD;I+EqBG,yBAAA;EjF+lYF;EEpnYD;I+EwBG,QAAA;EjF+lYF;EEvnYD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjFgnYF;EE5nYD;I+EeG,kBAAA;EjFgnYF;EE/nYD;I+EkBG,mBAAA;EjFgnYF;EEloYD;I+EqBG,yBAAA;EjFgnYF;EEroYD;I+EwBG,QAAA;EjFgnYF;EExoYD;I+EUG,cAAA;IACA,aAAA;IACA,cAAA;EjFioYF;EE7oYD;I+EeG,SAAA;EjFioYF;EEhpYD;I+EkBG,UAAA;EjFioYF;EEnpYD;I+EqBG,gBAAA;EjFioYF;EEtpYD;I+EwBG,QAAA;EjFioYF;EEzpYD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjFkpYF;EE9pYD;I+EeG,kBAAA;EjFkpYF;EEjqYD;I+EkBG,mBAAA;EjFkpYF;EEpqYD;I+EqBG,yBAAA;EjFkpYF;EEvqYD;I+EwBG,QAAA;EjFkpYF;EE1qYD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjFmqYF;EE/qYD;I+EeG,kBAAA;EjFmqYF;EElrYD;I+EkBG,mBAAA;EjFmqYF;EErrYD;I+EqBG,yBAAA;EjFmqYF;EExrYD;I+EwBG,QAAA;EjFmqYF;EE3rYD;I+EUG,cAAA;IACA,eAAA;IACA,gBAAA;EjForYF;EEhsYD;I+EeG,WAAA;EjForYF;EEnsYD;I+EkBG,YAAA;EjForYF;EEtsYD;I+EqBG,kBAAA;EjForYF;EEzsYD;I+EwBG,QAAA;EjForYF;EE5sYD;I+EUG,cAAA;IACA,qBAAA;IACA,sBAAA;EjFqsYF;EEjtYD;I+EeG,iBAAA;EjFqsYF;EEptYD;I+EkBG,kBAAA;EjFqsYF;EEvtYD;I+EqBG,wBAAA;EjFqsYF;EE1tYD;I+EwBG,QAAA;EjFqsYF;EE7tYD;I+EUG,cAAA;IACA,qBAAA;IACA,sBAAA;EjFstYF;EEluYD;I+EeG,iBAAA;EjFstYF;EEruYD;I+EkBG,kBAAA;EjFstYF;EExuYD;I+EqBG,wBAAA;EjFstYF;EE3uYD;I+EwBG,QAAA;EjFstYF;EE9uYD;I+E+BG,aAAA;EjFktYF;EEjvYD;I+EkCG,UAAA;EjFktYF;EEpvYD;I+EqCG,WAAA;EjFktYF;EEvvYD;I+EwCG,UAAA;EjFktYF;EE1vYD;I+E2CG,WAAA;EjFktYF;EE7vYD;I+E8CG,cAAA;EjFktYF;EEhwYD;I+EiDG,QAAA;EjFktYF;EEnwYD;IgFyCK,WAAA;ElF6tYJ;EEtwYD;IgF+CK,UAAA;ElF0tYJ;EEzwYD;IgFqDK,WAAA;ElFutYJ;EE5wYD;IgF2DK,UAAA;ElFotYJ;EE/wYD;IgFiEK,eAAA;ElFitYJ;EElxYD;IgFeK,kBAAA;IACA,UAAA;ElFswYJ;EEtxYD;IgFuBK,WAAA;IACA,iBAAA;ElFkwYJ;EE1xYD;IgF+BK,yBAAA;IACA,cAAA;ElF8vYJ;EE9xYD;IgFeK,kBAAA;IACA,UAAA;ElFkxYJ;EElyYD;IgFuBK,WAAA;IACA,iBAAA;ElF8wYJ;EEtyYD;IgF+BK,yBAAA;IACA,cAAA;ElF0wYJ;EE1yYD;IgFeK,YAAA;IACA,UAAA;ElF8xYJ;EE9yYD;IgFuBK,WAAA;IACA,WAAA;ElF0xYJ;EElzYD;IgF+BK,mBAAA;IACA,cAAA;ElFsxYJ;EEtzYD;IgFeK,mBAAA;IACA,UAAA;ElF0yYJ;EE1zYD;IgFuBK,WAAA;IACA,kBAAA;ElFsyYJ;EE9zYD;IgF+BK,0BAAA;IACA,cAAA;ElFkyYJ;EEl0YD;IgFeK,mBAAA;IACA,UAAA;ElFszYJ;EEt0YD;IgFuBK,WAAA;IACA,kBAAA;ElFkzYJ;EE10YD;IgF+BK,0BAAA;IACA,cAAA;ElF8yYJ;EE90YD;IgFeK,UAAA;IACA,UAAA;ElFk0YJ;EEl1YD;IgFuBK,WAAA;IACA,SAAA;ElF8zYJ;EEt1YD;IgF+BK,iBAAA;IACA,cAAA;ElF0zYJ;EE11YD;IgFeK,mBAAA;IACA,UAAA;ElF80YJ;EE91YD;IgFuBK,WAAA;IACA,kBAAA;ElF00YJ;EEl2YD;IgF+BK,0BAAA;IACA,cAAA;ElFs0YJ;EEt2YD;IgFeK,mBAAA;IACA,UAAA;ElF01YJ;EE12YD;IgFuBK,WAAA;IACA,kBAAA;ElFs1YJ;EE92YD;IgF+BK,0BAAA;IACA,cAAA;ElFk1YJ;EEl3YD;IgFeK,YAAA;IACA,UAAA;ElFs2YJ;EEt3YD;IgFuBK,WAAA;IACA,WAAA;ElFk2YJ;EE13YD;IgF+BK,mBAAA;IACA,cAAA;ElF81YJ;EE93YD;IgFeK,mBAAA;IACA,UAAA;ElFk3YJ;EEl4YD;IgFuBK,WAAA;IACA,kBAAA;ElF82YJ;EEt4YD;IgF+BK,0BAAA;IACA,cAAA;ElF02YJ;EE14YD;IgFeK,mBAAA;IACA,UAAA;ElF83YJ;EE94YD;IgFuBK,WAAA;IACA,kBAAA;ElF03YJ;EEl5YD;IgF+BK,0BAAA;IACA,cAAA;ElFs3YJ;EEt5YD;IgFeK,UAAA;IACA,UAAA;ElF04YJ;EE15YD;IgFuBK,WAAA;IACA,SAAA;ElFs4YJ;EE95YD;IgF+BK,iBAAA;IACA,cAAA;ElFk4YJ;EEl6YD;IgFeK,mBAAA;IACA,UAAA;ElFs5YJ;EEt6YD;IgFuBK,WAAA;IACA,kBAAA;ElFk5YJ;EE16YD;IgF+BK,0BAAA;IACA,cAAA;ElF84YJ;EE96YD;IgFeK,mBAAA;IACA,UAAA;ElFk6YJ;EEl7YD;IgFuBK,WAAA;IACA,kBAAA;ElF85YJ;EEt7YD;IgF+BK,0BAAA;IACA,cAAA;ElF05YJ;EE17YD;IgFeK,YAAA;IACA,UAAA;ElF86YJ;EE97YD;IgFuBK,WAAA;IACA,WAAA;ElF06YJ;EEl8YD;IgF+BK,mBAAA;IACA,cAAA;ElFs6YJ;EEt8YD;IgFeK,mBAAA;IACA,UAAA;ElF07YJ;EE18YD;IgFuBK,WAAA;IACA,kBAAA;ElFs7YJ;EE98YD;IgF+BK,0BAAA;IACA,cAAA;ElFk7YJ;EEl9YD;IgFeK,mBAAA;IACA,UAAA;ElFs8YJ;EEt9YD;IgFuBK,WAAA;IACA,kBAAA;ElFk8YJ;EE19YD;IgF+BK,0BAAA;IACA,cAAA;ElF87YJ;EE99YD;IgFeK,UAAA;IACA,UAAA;ElFk9YJ;EEl+YD;IgFuBK,WAAA;IACA,SAAA;ElF88YJ;EEt+YD;IgF+BK,iBAAA;IACA,cAAA;ElF08YJ;EE1+YD;IgFeK,mBAAA;IACA,UAAA;ElF89YJ;EE9+YD;IgFuBK,WAAA;IACA,kBAAA;ElF09YJ;EEl/YD;IgF+BK,0BAAA;IACA,cAAA;ElFs9YJ;EEt/YD;IgFeK,mBAAA;IACA,UAAA;ElF0+YJ;EE1/YD;IgFuBK,WAAA;IACA,kBAAA;ElFs+YJ;EE9/YD;IgF+BK,0BAAA;IACA,cAAA;ElFk+YJ;EElgZD;IgFeK,YAAA;IACA,UAAA;ElFs/YJ;EEtgZD;IgFuBK,WAAA;IACA,WAAA;ElFk/YJ;EE1gZD;IgF+BK,mBAAA;IACA,cAAA;ElF8+YJ;EE9gZD;IgFeK,mBAAA;IACA,UAAA;ElFkgZJ;EElhZD;IgFuBK,WAAA;IACA,kBAAA;ElF8/YJ;EEthZD;IgF+BK,0BAAA;IACA,cAAA;ElF0/YJ;EE1hZD;IgFeK,mBAAA;IACA,UAAA;ElF8gZJ;EE9hZD;IgFuBK,WAAA;IACA,kBAAA;ElF0gZJ;EEliZD;IgF+BK,0BAAA;IACA,cAAA;ElFsgZJ;EEtiZD;IgFeK,WAAA;IACA,UAAA;ElF0hZJ;EE1iZD;IgFuBK,WAAA;IACA,UAAA;ElFshZJ;EE9iZD;IgF+BK,kBAAA;IACA,cAAA;ElFkhZJ;AACF;AgF57YA;E9EvHC;I+EUG,cAAA;IACA,cAAA;IACA,eAAA;EjF6iZF;EEzjZD;I+EeG,UAAA;EjF6iZF;EE5jZD;I+EkBG,WAAA;EjF6iZF;EE/jZD;I+EqBG,iBAAA;EjF6iZF;EElkZD;I+EwBG,SAAA;EjF6iZF;EErkZD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjF8jZF;EE1kZD;I+EeG,kBAAA;EjF8jZF;EE7kZD;I+EkBG,mBAAA;EjF8jZF;EEhlZD;I+EqBG,yBAAA;EjF8jZF;EEnlZD;I+EwBG,SAAA;EjF8jZF;EEtlZD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjF+kZF;EE3lZD;I+EeG,kBAAA;EjF+kZF;EE9lZD;I+EkBG,mBAAA;EjF+kZF;EEjmZD;I+EqBG,yBAAA;EjF+kZF;EEpmZD;I+EwBG,SAAA;EjF+kZF;EEvmZD;I+EUG,cAAA;IACA,eAAA;IACA,gBAAA;EjFgmZF;EE5mZD;I+EeG,WAAA;EjFgmZF;EE/mZD;I+EkBG,YAAA;EjFgmZF;EElnZD;I+EqBG,kBAAA;EjFgmZF;EErnZD;I+EwBG,SAAA;EjFgmZF;EExnZD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjFinZF;EE7nZD;I+EeG,kBAAA;EjFinZF;EEhoZD;I+EkBG,mBAAA;EjFinZF;EEnoZD;I+EqBG,yBAAA;EjFinZF;EEtoZD;I+EwBG,SAAA;EjFinZF;EEzoZD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjFkoZF;EE9oZD;I+EeG,kBAAA;EjFkoZF;EEjpZD;I+EkBG,mBAAA;EjFkoZF;EEppZD;I+EqBG,yBAAA;EjFkoZF;EEvpZD;I+EwBG,SAAA;EjFkoZF;EE1pZD;I+EUG,cAAA;IACA,aAAA;IACA,cAAA;EjFmpZF;EE/pZD;I+EeG,SAAA;EjFmpZF;EElqZD;I+EkBG,UAAA;EjFmpZF;EErqZD;I+EqBG,gBAAA;EjFmpZF;EExqZD;I+EwBG,SAAA;EjFmpZF;EE3qZD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjFoqZF;EEhrZD;I+EeG,kBAAA;EjFoqZF;EEnrZD;I+EkBG,mBAAA;EjFoqZF;EEtrZD;I+EqBG,yBAAA;EjFoqZF;EEzrZD;I+EwBG,SAAA;EjFoqZF;EE5rZD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjFqrZF;EEjsZD;I+EeG,kBAAA;EjFqrZF;EEpsZD;I+EkBG,mBAAA;EjFqrZF;EEvsZD;I+EqBG,yBAAA;EjFqrZF;EE1sZD;I+EwBG,SAAA;EjFqrZF;EE7sZD;I+EUG,cAAA;IACA,eAAA;IACA,gBAAA;EjFssZF;EEltZD;I+EeG,WAAA;EjFssZF;EErtZD;I+EkBG,YAAA;EjFssZF;EExtZD;I+EqBG,kBAAA;EjFssZF;EE3tZD;I+EwBG,SAAA;EjFssZF;EE9tZD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjFutZF;EEnuZD;I+EeG,kBAAA;EjFutZF;EEtuZD;I+EkBG,mBAAA;EjFutZF;EEzuZD;I+EqBG,yBAAA;EjFutZF;EE5uZD;I+EwBG,SAAA;EjFutZF;EE/uZD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjFwuZF;EEpvZD;I+EeG,kBAAA;EjFwuZF;EEvvZD;I+EkBG,mBAAA;EjFwuZF;EE1vZD;I+EqBG,yBAAA;EjFwuZF;EE7vZD;I+EwBG,SAAA;EjFwuZF;EEhwZD;I+EUG,cAAA;IACA,aAAA;IACA,cAAA;EjFyvZF;EErwZD;I+EeG,SAAA;EjFyvZF;EExwZD;I+EkBG,UAAA;EjFyvZF;EE3wZD;I+EqBG,gBAAA;EjFyvZF;EE9wZD;I+EwBG,SAAA;EjFyvZF;EEjxZD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjF0wZF;EEtxZD;I+EeG,kBAAA;EjF0wZF;EEzxZD;I+EkBG,mBAAA;EjF0wZF;EE5xZD;I+EqBG,yBAAA;EjF0wZF;EE/xZD;I+EwBG,SAAA;EjF0wZF;EElyZD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjF2xZF;EEvyZD;I+EeG,kBAAA;EjF2xZF;EE1yZD;I+EkBG,mBAAA;EjF2xZF;EE7yZD;I+EqBG,yBAAA;EjF2xZF;EEhzZD;I+EwBG,SAAA;EjF2xZF;EEnzZD;I+EUG,cAAA;IACA,eAAA;IACA,gBAAA;EjF4yZF;EExzZD;I+EeG,WAAA;EjF4yZF;EE3zZD;I+EkBG,YAAA;EjF4yZF;EE9zZD;I+EqBG,kBAAA;EjF4yZF;EEj0ZD;I+EwBG,QAAA;EjF4yZF;EEp0ZD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjF6zZF;EEz0ZD;I+EeG,kBAAA;EjF6zZF;EE50ZD;I+EkBG,mBAAA;EjF6zZF;EE/0ZD;I+EqBG,yBAAA;EjF6zZF;EEl1ZD;I+EwBG,QAAA;EjF6zZF;EEr1ZD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjF80ZF;EE11ZD;I+EeG,kBAAA;EjF80ZF;EE71ZD;I+EkBG,mBAAA;EjF80ZF;EEh2ZD;I+EqBG,yBAAA;EjF80ZF;EEn2ZD;I+EwBG,QAAA;EjF80ZF;EEt2ZD;I+EUG,cAAA;IACA,aAAA;IACA,cAAA;EjF+1ZF;EE32ZD;I+EeG,SAAA;EjF+1ZF;EE92ZD;I+EkBG,UAAA;EjF+1ZF;EEj3ZD;I+EqBG,gBAAA;EjF+1ZF;EEp3ZD;I+EwBG,QAAA;EjF+1ZF;EEv3ZD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjFg3ZF;EE53ZD;I+EeG,kBAAA;EjFg3ZF;EE/3ZD;I+EkBG,mBAAA;EjFg3ZF;EEl4ZD;I+EqBG,yBAAA;EjFg3ZF;EEr4ZD;I+EwBG,QAAA;EjFg3ZF;EEx4ZD;I+EUG,cAAA;IACA,sBAAA;IACA,uBAAA;EjFi4ZF;EE74ZD;I+EeG,kBAAA;EjFi4ZF;EEh5ZD;I+EkBG,mBAAA;EjFi4ZF;EEn5ZD;I+EqBG,yBAAA;EjFi4ZF;EEt5ZD;I+EwBG,QAAA;EjFi4ZF;EEz5ZD;I+EUG,cAAA;IACA,eAAA;IACA,gBAAA;EjFk5ZF;EE95ZD;I+EeG,WAAA;EjFk5ZF;EEj6ZD;I+EkBG,YAAA;EjFk5ZF;EEp6ZD;I+EqBG,kBAAA;EjFk5ZF;EEv6ZD;I+EwBG,QAAA;EjFk5ZF;EE16ZD;I+EUG,cAAA;IACA,qBAAA;IACA,sBAAA;EjFm6ZF;EE/6ZD;I+EeG,iBAAA;EjFm6ZF;EEl7ZD;I+EkBG,kBAAA;EjFm6ZF;EEr7ZD;I+EqBG,wBAAA;EjFm6ZF;EEx7ZD;I+EwBG,QAAA;EjFm6ZF;EE37ZD;I+EUG,cAAA;IACA,qBAAA;IACA,sBAAA;EjFo7ZF;EEh8ZD;I+EeG,iBAAA;EjFo7ZF;EEn8ZD;I+EkBG,kBAAA;EjFo7ZF;EEt8ZD;I+EqBG,wBAAA;EjFo7ZF;EEz8ZD;I+EwBG,QAAA;EjFo7ZF;EE58ZD;I+E+BG,aAAA;EjFg7ZF;EE/8ZD;I+EkCG,UAAA;EjFg7ZF;EEl9ZD;I+EqCG,WAAA;EjFg7ZF;EEr9ZD;I+EwCG,UAAA;EjFg7ZF;EEx9ZD;I+E2CG,WAAA;EjFg7ZF;EE39ZD;I+E8CG,cAAA;EjFg7ZF;EE99ZD;I+EiDG,QAAA;EjFg7ZF;EEj+ZD;IgFyCK,WAAA;ElF27ZJ;EEp+ZD;IgF+CK,UAAA;ElFw7ZJ;EEv+ZD;IgFqDK,WAAA;ElFq7ZJ;EE1+ZD;IgF2DK,UAAA;ElFk7ZJ;EE7+ZD;IgFiEK,eAAA;ElF+6ZJ;EEh/ZD;IgFeK,kBAAA;IACA,UAAA;ElFo+ZJ;EEp/ZD;IgFuBK,WAAA;IACA,iBAAA;ElFg+ZJ;EEx/ZD;IgF+BK,yBAAA;IACA,cAAA;ElF49ZJ;EE5/ZD;IgFeK,kBAAA;IACA,UAAA;ElFg/ZJ;EEhgaD;IgFuBK,WAAA;IACA,iBAAA;ElF4+ZJ;EEpgaD;IgF+BK,yBAAA;IACA,cAAA;ElFw+ZJ;EExgaD;IgFeK,YAAA;IACA,UAAA;ElF4/ZJ;EE5gaD;IgFuBK,WAAA;IACA,WAAA;ElFw/ZJ;EEhhaD;IgF+BK,mBAAA;IACA,cAAA;ElFo/ZJ;EEphaD;IgFeK,mBAAA;IACA,UAAA;ElFwgaJ;EExhaD;IgFuBK,WAAA;IACA,kBAAA;ElFogaJ;EE5haD;IgF+BK,0BAAA;IACA,cAAA;ElFggaJ;EEhiaD;IgFeK,mBAAA;IACA,UAAA;ElFohaJ;EEpiaD;IgFuBK,WAAA;IACA,kBAAA;ElFghaJ;EExiaD;IgF+BK,0BAAA;IACA,cAAA;ElF4gaJ;EE5iaD;IgFeK,UAAA;IACA,UAAA;ElFgiaJ;EEhjaD;IgFuBK,WAAA;IACA,SAAA;ElF4haJ;EEpjaD;IgF+BK,iBAAA;IACA,cAAA;ElFwhaJ;EExjaD;IgFeK,mBAAA;IACA,UAAA;ElF4iaJ;EE5jaD;IgFuBK,WAAA;IACA,kBAAA;ElFwiaJ;EEhkaD;IgF+BK,0BAAA;IACA,cAAA;ElFoiaJ;EEpkaD;IgFeK,mBAAA;IACA,UAAA;ElFwjaJ;EExkaD;IgFuBK,WAAA;IACA,kBAAA;ElFojaJ;EE5kaD;IgF+BK,0BAAA;IACA,cAAA;ElFgjaJ;EEhlaD;IgFeK,YAAA;IACA,UAAA;ElFokaJ;EEplaD;IgFuBK,WAAA;IACA,WAAA;ElFgkaJ;EExlaD;IgF+BK,mBAAA;IACA,cAAA;ElF4jaJ;EE5laD;IgFeK,mBAAA;IACA,UAAA;ElFglaJ;EEhmaD;IgFuBK,WAAA;IACA,kBAAA;ElF4kaJ;EEpmaD;IgF+BK,0BAAA;IACA,cAAA;ElFwkaJ;EExmaD;IgFeK,mBAAA;IACA,UAAA;ElF4laJ;EE5maD;IgFuBK,WAAA;IACA,kBAAA;ElFwlaJ;EEhnaD;IgF+BK,0BAAA;IACA,cAAA;ElFolaJ;EEpnaD;IgFeK,UAAA;IACA,UAAA;ElFwmaJ;EExnaD;IgFuBK,WAAA;IACA,SAAA;ElFomaJ;EE5naD;IgF+BK,iBAAA;IACA,cAAA;ElFgmaJ;EEhoaD;IgFeK,mBAAA;IACA,UAAA;ElFonaJ;EEpoaD;IgFuBK,WAAA;IACA,kBAAA;ElFgnaJ;EExoaD;IgF+BK,0BAAA;IACA,cAAA;ElF4maJ;EE5oaD;IgFeK,mBAAA;IACA,UAAA;ElFgoaJ;EEhpaD;IgFuBK,WAAA;IACA,kBAAA;ElF4naJ;EEppaD;IgF+BK,0BAAA;IACA,cAAA;ElFwnaJ;EExpaD;IgFeK,YAAA;IACA,UAAA;ElF4oaJ;EE5paD;IgFuBK,WAAA;IACA,WAAA;ElFwoaJ;EEh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cR;AEptcC;EiCIK,gBAAA;AnCmtcN;AEvtcC;EiCQK,0BAAA;EACA,6BAAA;AnCktcN;AE3tcC;EiCaK,yBAAA;EACA,4BAAA;AnCitcN;AE/tcC;EiCmBK,yBAAA;EACA,4BAAA;AnC+scN;AEnucC;EiCyBK,0BAAA;EACA,6BAAA;AnC6scN;A2F9tcI;;EAEE,qBAAA;A3FgucN;A2FlucI;;EAKI,0BAAA;A3FiucR;AE/ucC;EyFoBG,gBAAA;A3F8tcJ;AElvcC;EyF0BG,mBAAA;A3F2tcJ;AErvcC;EyF+BK,UAAA;EACA,UAAA;EACA,SAAA;A3FytcN;AE1vcC;EyFoCO,cAAA;EACA,iBAAA;EACA,0BAAA;A3FytcR;AE/vcC;EyF0CO,0BAAA;A3FwtcR;AElwcC;EyF6CS,MAAA;EACA,QAAA;EACA,SAAA;EACA,OAAA;A3FwtcV;A2FltcE;EACE,YAAA;A3FotcJ;A2FltcI;;EAEE,UAAA;A3FotcN;A2FhtcE;EACE,YAAA;A3FktcJ;A2F/scE;EACE,YAAA;A3FitcJ;A2F3scM;EAGM,kBAAA;EACA,gBAAA;A3F2scZ;A2FrscI;;EAGI,gBAAA;A3FsscR;A2F/rcM;;;;;;;;;EAGE,UAAA;A3FuscR;AExycC;EyFsGK,UAAA;A3FqscN;A2FhscI;EAGM,iBAAA;EACA,gBAAA;A3FgscV;AuDzycI;EACE,cAAA;AvD2ycN;AuDvycE;EACE,cAAA;AvDyycJ;AuDjycE;EAEI,YAAA;EACA,aAAA;AvDkycN;AuD9xcE;EAEI,iBAAA;AvD+xcN;AuDjycE;EAMI,iBAAA;AvD8xcN;AuDzxcI;EACE,cAAA;AvD2xcN;AuDxxcI;EACE,gBAAA;AvD0xcN;AEr0cC;EqDoDK,eAAA;EACA,gBAAA;AvDoxcN;AEz0cC;EqD0DG,WAAA;EACA,SAAA;AvDkxcJ;AE70cC;EqDkLC,cAAA;AvD8pcF;AuD3pcI;;EAGI,0BAAA;AvD4pcR;AuD1pcQ;;EACE,0BAAA;AvD6pcV;AuDrpcM;;EAEE,2BAAA;AvDupcR;AE51cC;EqD0MK,WAAA;EACA,UAAA;AvDqpcN;AEh2cC;EqD6MO,0BAAA;AvDspcR;A4Fl2cA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BAAA;ArD8idN;AE73dC;EmDmVK,oBAAA;ArD6idN;AEh4dC;EmDuVK,oBAAA;ArD4idN;AqDzidI;EACE,kBAAA;EACA,uBAAA;ArD2idN;AqDhldE;EA0CI,WAAA;ArDyidN;AE14dC;;;;EmDyWK,uBAAA;EACA,gBAAA;ArDuidN;AqDridM;;;;EACE,UAAA;ArD0idR;AqDvidM;;;;EACE,UAAA;ArD4idR;AE75dC;EmDsXK,UAAA;ArD0idN;AEh6dC;EmD2XK,UAAA;ArDwidN;AEn6dC;;;;EmDkYK,2BAAA;EACA,8BAAA;ArDuidN;AE16dC;;;;EmD0YK,uBAAA;EACA,4BAAA;EACA,+BAAA;ArDsidN;AEl7dC;EmDiZK,mBAAA;ArDoidN;AqD9ndE;EA8FI,iBAAA;ArDmidN;AqDjodE;EAgGM,gBAAA;ArDoidR;AE37dC;EmD8ZS,gBAAA;ArDgidV;AE97dC;EmDkaS,0BAAA;ArD+hdV;A+Fn7dE;;ExC4EE,0BAAA;AvD22dJ;AEr8dC;EqD+FK,+BAAA;EACA,cAAA;AvDy2dN;AEz8dC;EqDsGK,eAAA;EACA,8BAAA;EACA,0BAAA;AvDs2dN;AE98dC;;EqD+GK,0BAAA;AvDm2dN;AEl9dC;EqDsHO,0BAAA;AvD+1dR;AEr9dC;EqD4HO,0BAAA;AvD41dR;AEx9dC;EqDoIO,eAAA;EACA,iBAAA;EACA,sBAAA;AvDu1dR;AE79dC;;;;EqD+IO,0BAAA;AvDo1dR;AEn+dC;;;;;EqDyJO,sBAAA;EACA,0BAAA;AvDi1dR;AuD12dE;EA8BI,kBAAA;EACA,cAAA;AvD+0dN;AE/+dC;EqDsKS,0BAAA;AvD40dV;A+Fp+dE;ELsCE,0BAAA;A1Fi8dJ;A+Fv+dE;ELyCE,0BAAA;A1Fi8dJ;AEx/dC;EwF4DK,+BAAA;EACA,cAAA;EACA,0BAAA;A1F+7dN;AE7/dC;EwFiEK,eAAA;EACA,8BAAA;EACA,0BAAA;A1F+7dN;A+Fh/dI;EACE,qBAAA;EACA,iBAAA;EACA,mBAAA;A/Fk/dN;A+Fv+dE;EACE,kBAAA;EACA,cAAA;EACA,WAAA;EACA,WAAA;EACA,gBAAA;EACA,0BAAA;EACA,iBAAA;E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H1mkBE;EACE,QAAA;EACA,4CAAA;A7H4mkBJ;A6HzmkBE;EACE,SAAA;A7H2mkBJ;A6HxmkBE;EACE,YAAA;A7H0mkBJ;AE31kBC;E2H2PK,yBAAA;A7HmmkBN;A6HhmkBM;EACE,yBAAA;A7HkmkBR;AEj2kBC;E2H2PK,yBAAA;A7HymkBN;A6HtmkBM;EACE,yBAAA;A7HwmkBR;AEv2kBC;E2H2PK,yBAAA;A7H+mkBN;A6H5mkBM;EACE,yBAAA;A7H8mkBR;AE72kBC;E2H2PK,yBAAA;A7HqnkBN;A6HlnkBM;EACE,yBAAA;A7HonkBR;AEn3kBC;E2H2PK,yBAAA;A7H2nkBN;A6HxnkBM;EACE,yBAAA;A7H0nkBR;AEz3kBC;E2H2PK,yBAAA;A7HiokBN;A6H9nkBM;EACE,yBAAA;A7HgokBR;AE/3kBC;E2H2PK,yBAAA;A7HuokBN;A6HpokBM;EACE,yBAAA;A7HsokBR;AEr4kBC;E2H2PK,yBAAA;A7H6okBN;A6H1okBM;EACE,yBAAA;A7H4okBR;AE34kBC;E2H2PK,yBAAA;A7HmpkBN;A6HhpkBM;EACE,yBAAA;A7HkpkBR;AEj5kBC;E2H2PK,yBAAA;A7HypkBN;A6HtpkBM;EACE,yBAAA;A7HwpkBR;AEv5kBC;E2H2PK,yBAAA;A7H+pkBN;A6H5pkBM;EACE,yBAAA;A7H8pkBR;AE75kBC;E2H2PK,yBAAA;A7HqqkBN;A6HlqkBM;EACE,yBAAA;A7HoqkBR;AEn6kBC;E2H2PK,yBAAA;A7H2qkBN;A6HxqkBM;EACE,yBAAA;A7H0qkBR;A8Hn6kBE;EACE,cAAA;EACA,iBAAA;A9Hq6kBJ;AE76kBC;E4HcO,eAAA;EACA,gBAAA;A9Hk6kBR;AEj7kBC;E4HqBO,kBAAA;A9H+5kBR;AEp7kBC;E4H4BK,gBAAA;A9H25kBN;AEv7kBC;E4HiCO,iBAAA;EACA,cAAA;A9Hy5kBR;AE37kBC;EcCC,sBAAA;EACA,SAAA;EACA,UAAA;EACA,0BAAA;EACA,eAAA;EACA,0BAAA;EACA,mBAAA;EACA,gBAAA;EACA,6BAAA;E+GDA,qBAAA;A/H+7kBF;A+H77kBE;EACE,kBAAA;EACA,WAAA;EACA,eA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,iBAAA;AjI+llBJ;AExzlBC;E+H6NG,YAAA;EACA,cAAA;EACA,iBAAA;AjI8llBJ;AiI1llBI;EACE,kBAAA;EACA,SAAA;EACA,UAAA;EACA,cAAA;EACA,uBAAA;EACA,UAAA;EACA,YAAA;EACA,cAAA;EACA,yBAAA;EACA,iCAAA;EACA,WAAA;AjI4llBN;AiIxllBE;EACE,8BAAA;EACA,0BAAA;AjI0llBJ;AiIvllBE;EACE,0BAAA;AjIyllBJ;AiItllBE;EACE,kBAAA;AjIwllBJ;AiIrllBE;EACE,kBAAA;EACA,cAAA;AjIullBJ;AiIpllBE;EACE,6CAAA;AjIsllBJ;AE31lBC;;;E+H2QG,QAAA;EACA,SAAA;EACA,UAAA;EACA,oBAAA;AjIqllBJ;AiIlllBE;EACE,UAAA;EACA,cAAA;EACA,gBAAA;EACA,qBAAA;AjIollBJ;AiIlllBI;EACE,yBAAA;AjIollBN;AiIjllBI;EACE,qBAAA;AjImllBN;AiIhllBI;EACE,cAAA;EACA,qBAAA;AjIkllBN;AiIhllBM;EACE,yBAAA;AjIkllBR;AiI9klBI;EACE,cAAA;EACA,qBAAA;AjIgllBN;AiI9klBM;EACE,yBAAA;AjIgllBR;AiI5klBI;EACE,6CAAA;AjI8klBN;AEh4lBC;E+HuTG,WAAA;EACA,mBAAA;EACA,qBAAA;AjI4klBJ;AiI1klBI;EACE,WAAA;EACA,mBAAA;EACA,qBAAA;AjI4klBN;AiIzklBI;EACE,WAAA;EACA,mBAAA;EACA,qBAAA;AjI2klBN;AiIxklBI;EACE,6CAAA;AjI0klBN;AiItklBE;EACE,0BAAA;EACA,yBAAA;EACA,qBAAA;EACA,mBAAA;AjIwklBJ;AiItklBI;;EAEE,0BAAA;EACA,yBAAA;EACA,qBAAA;AjIwklBN;AiIrklBI;EACE,0BAAA;AjIuklBN;AiInklBE;EACE,0BAAA;EACA,yBAAA;EACA,qBAAA;EACA,gBAAA;AjIqklBJ;AiIjklBA;EACE;IACE,mBAAA;IACA,YAAA;EjImklBF;EiIhklBA;IACE,qBAAA;IACA,UAAA;EjIkklBF;AACF;AkIz6lBE;EACE,cAAA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mBAAA;EACA,0BAAA;EACA,eAAA;EACA,iBAAA;A1JsppBJ;A0JpppBI;EACE,kBAAA;EACA,SAAA;EACA,UAAA;EACA,cAAA;EACA,aAAA;EACA,WAAA;EACA,mBAAA;EACA,WAAA;A1JsppBN;A0JlppBE;EACE,eAAA;EACA,gBAAA;EACA,0BAAA;EACA,mBAAA;EACA,eAAA;A1JoppBJ;A0JjppBE;EACE,0BAAA;EACA,eAAA;A1JmppBJ;AEhxpBC;EwJ+NG,sBAAA;EACA,iCAAA;A1JojpBJ;AEpxpBC;EwJkOK,0BAAA;A1JqjpBN;AEvxpBC;EwJoOO,+BAAA;A1JsjpBR;AE1xpBC;EwJyOG,0BAAA;A1JojpBJ;A0JljpBI;EACE,yBAAA;A1JojpBN;AEhypBC;EwJgPG,0BAAA;A1JmjpBJ;AEnypBC;EwJmPG,yBAAA;A1JmjpBJ;AEtypBC;EwJ+NG,sBAAA;EACA,qBAAA;A1J0kpBJ;AE1ypBC;EwJkOK,cAAA;A1J2kpBN;AE7ypBC;EwJoOO,mBAAA;A1J4kpBR;AEhzpBC;EwJyOG,0BAAA;A1J0kpBJ;A0JxkpBI;EACE,yBAAA;A1J0kpBN;AEtzpBC;EwJgPG,0BAAA;A1JykpBJ;AEzzpBC;EwJmPG,yBAAA;A1JykpBJ;A0J1rpBE;EACE,mBAAA;A1J4rpBJ;A0J7rpBE;EAGI,WAAA;A1J6rpBN;A0JzrpBE;EACE,gBAAA;A1J2rpBJ;AEr0pBC;EwJ+NG,sBAAA;EACA,qBAAA;A1JympBJ;AEz0pBC;EwJkOK,cAAA;A1J0mpBN;AE50pBC;EwJoOO,mBAAA;A1J2mpBR;AE/0pBC;EwJyOG,0BAAA;A1JympBJ;A0JvmpBI;EACE,yBAAA;A1JympBN;AEr1pBC;EwJgPG,0BAAA;A1JwmpBJ;AEx1pBC;EwJmPG,yBAAA;A1JwmpBJ;AE31pBC;EwJ+NG,sBAAA;EACA,qBAAA;A1J+npBJ;AE/1pBC;EwJkOK,cAAA;A1JgopBN;AEl2pBC;EwJoOO,mBAAA;A1JiopBR;AEr2pBC;EwJyOG,cAAA;A1J+npBJ;A0J7npBI;EACE,yBAAA;A1J+npBN;AE32pBC;EwJgPG,cAAA;A1J8npBJ;AE92pBC;EwJm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,sBAAA;EACA,kBAAA;EACA,4CAAA;EACA,gCAAA;EACA,WAAA;AnKg5qBN;AmK54qBE;EACE,6BAAA;AnK84qBJ;AmK34qBE;EAEI,WAAA;EACA,OAAA;AnK44qBN;AE7+qBC;EiKsGO,QAAA;EACA,UAAA;AnK04qBR;AEj/qBC;EiK8GG,kBAAA;EACA,QAAA;EACA,0BAAA;EACA,mBAAA;AnKs4qBJ;AmKn4qBE;EACE,cAAA;AnKq4qBJ;AmKj4qBE;EACE,eAAA;EACA,YAAA;EACA,iBAAA;AnKm4qBJ;AmKt4qBE;EAMI,oBAAA;EACA,eAAA;AnKm4qBN;AmK14qBE;EAWI,WAAA;EACA,YAAA;AnKk4qBN;AmK94qBE;EAgBI,UAAA;EACA,cAAA;AnKi4qBN;AE3grBC;EiK+IO,oBAAA;AnK+3qBR;AE9grBC;EiKmJO,6BAAA;AnK83qBR;AEjhrBC;EkKSC,cAAA;ApK2grBF;AEphrBC;EkKYG,oBAAA;ApK2grBJ;AEvhrBC;EkKgBG,UAAA;EACA,UAAA;ApK0grBJ;AoKvgrBE;EAEI,QAAA;EACA,UAAA;ApKwgrBN;AE/hrBC;EkK4BO,WAAA;EACA,OAAA;ApKsgrBR;AEnirBC;EkKoCK,oBAAA;ApKkgrBN;AEtirBC;EkKwCK,8BAAA;ApKigrBN;AEzirBC;EkK+CO,8BAAA;ApK6/qBR;AE5irBC;EmKMG,eAAA;ArKyirBJ;AE/irBC;;;;;;EmKcK,iBAAA;ArKyirBN;AEvjrBC;EmKkBK,kBAAA;ArKwirBN;AE1jrBC;EmKsBK,kBAAA;ArKuirBN;AE7jrBC;EmK6BS,6BAAA;ArKmirBV;AEhkrBC;EmKqCK,yBAAA;ArK8hrBN;AEnkrBC;EmKMG,eAAA;ArKgkrBJ;AEtkrBC;;;;;;EmKcK,gBAAA;ArKgkrBN;AE9krBC;EmKkBK,kBAAA;ArK+jrBN;AEjlrBC;EmKsBK,iBAAA;ArK8jrBN;AEplrBC;EmK6BS,2BAAA;ArK0jrBV;AEvlrBC;EmKqCK,yBAAA;ArKqjrBN;AE1lrBC;EoKSG,yBAAA;EACA,gBAAA;AtKolrBJ;AE9lrBC;EoKeG,8BAAA;AtKklrBJ;AEjmrBC;;;;;;;;;;;;;;;;E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;AvKsirBR;AuKpirBQ;EACE,oCAAA;AvKsirBV;AuKnirBQ;EACE,oCAAA;AvKqirBV;AuK9hrBA;EAEI;IAEI,2BAAA;EvK8hrBN;EuK1hrBE;IAEI,2BAAA;EvK2hrBN;AACF;AE/wsBC;EFixsBC,kBAAkB;EAClB,UAAU;EACV,mBAAmB;AACrB;AwK/wsBE;EACE,0BAAA;AxKixsBJ;AwK9wsBE;EACE,yBAAA;EACA,0BAAA;AxKgxsBJ;AwKlxsBE;EAKI,gBAAA;AxKgxsBN;AwKrxsBE;EASQ,gBAAA;AxK+wsBV;AwKxxsBE;EAaQ,gBAAA;AxK8wsBV;AwKvwsBE;EACE,2BAAA;EACA,4BAAA;AxKywsBJ;AwK3wsBE;EAMM,2BAAA;AxKwwsBR;AwK9wsBE;EAUM,4BAAA;AxKuwsBR;AwKjwsBE;EACE,0BAAA;AxKmwsBJ;AyKzysBE;EACE,cAAA;AzK2ysBJ;AyKtysBE;EACE,cAAA;AzKwysBJ;AEvzsBC;EuKoBK,iBAAA;AzKsysBN;AE1zsBC;EuK8BW,kBAAA;AzK+xsBZ;AE7zsBC;EuKoCW,WAAA;EACA,OAAA;AzK4xsBZ;AEj0sBC;EuK0CS,iBAAA;AzK0xsBV;AyKnxsBE;EAKQ,8BAAA;AzKixsBV;AEv0sBC;EuKgEO,yBAAA;AzK0wsBR;AE10sBC;EuKsEO,2BAAA;AzKuwsBR;AE70sBC;EuKkFK,iBAAA;EACA,cAAA;AzK8vsBN;AEj1sBC;EuK0FK,6BAAA;AzK0vsBN;AEp1sBC;EuKiGO,oBAAA;AzKsvsBR;AEv1sBC;EuKwGK,0BAAA;AzKkvsBN;AE11sBC;;;;EuKoHS,kBAAA;EACA,eAAA;AzK4usBV;AEj2sBC;EuK8HK,kBAAA;AzKsusBN;AEp2sBC;EuKqIK,YAAA;AzKkusBN;AEv2sBC;EuK2IK,YAAA;AzK+tsBN;AE12sBC;EuKgJO,eAAA;EACA,gBAAA;AzK6tsBR;AE92sBC;EuKuJO,yBAAA;AzK0tsBR;AEj3sBC;EuK6JO,yBAAA;AzKutsBR;AEp3sBC;EuKmKO,uBAAA;AzKotsBR;A0Kj3sBE;EAGM,cAAA;EACA,eAAA;A1Ki3sBR;A0K52sBE;EAGM,eAAA;EACA,eA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BC;E8K4FK,cAAA;EACA,mBAAA;EACA,qBAAA;AhLkguBN;AEhmuBC;E8KiGK,WAAA;EACA,mBAAA;EACA,qBAAA;AhLkguBN;AErmuBC;E8K4FK,cAAA;EACA,mBAAA;EACA,qBAAA;AhL4guBN;AE1muBC;E8KiGK,WAAA;EACA,mBAAA;EACA,qBAAA;AhL4guBN;AE/muBC;E8K4FK,cAAA;EACA,mBAAA;EACA,qBAAA;AhLshuBN;AEpnuBC;E8KiGK,WAAA;EACA,mBAAA;EACA,qBAAA;AhLshuBN;AEznuBC;E8K4FK,cAAA;EACA,mBAAA;EACA,qBAAA;AhLgiuBN;AE9nuBC;E8KiGK,WAAA;EACA,mBAAA;EACA,qBAAA;AhLgiuBN;AEnouBC;E8K4FK,cAAA;EACA,mBAAA;EACA,qBAAA;AhL0iuBN;AExouBC;E8KiGK,WAAA;EACA,mBAAA;EACA,qBAAA;AhL0iuBN;AE7ouBC;E8K4FK,cAAA;EACA,mBAAA;EACA,qBAAA;AhLojuBN;AElpuBC;E8KiGK,WAAA;EACA,mBAAA;EACA,qBAAA;AhLojuBN;AEvpuBC;E8K4FK,cAAA;EACA,mBAAA;EACA,qBAAA;AhL8juBN;AE5puBC;E8KiGK,WAAA;EACA,mBAAA;EACA,qBAAA;AhL8juBN;AEjquBC;E8K4FK,cAAA;EACA,mBAAA;EACA,qBAAA;AhLwkuBN;AEtquBC;E8KiGK,WAAA;EACA,mBAAA;EACA,qBAAA;AhLwkuBN;AE3quBC;E8K4FK,cAAA;EACA,mBAAA;EACA,qBAAA;AhLkluBN;AEhruBC;E8KiGK,WAAA;EACA,mBAAA;EACA,qBAAA;AhLkluBN;AErruBC;E8K4GK,cAAA;EACA,mBAAA;EACA,qBAAA;AhL4kuBN;AE1ruBC;E8K4GK,cAAA;EACA,mBAAA;EACA,qBAAA;AhLiluBN;AE/ruBC;E8K4GK,cAAA;EACA,mBAAA;EACA,qBAAA;AhLsluBN;AEpsuBC;E8K4GK,cAAA;EACA,mBAAA;EACA,qBAAA;AhL2luBN;AEzsuBC;;E8K4HG,gBAAA;AhLiluBJ;AiLvsuBE;EACE,eAAA;EACA,gBAAA;EACA,cAAA;EACA,iBAAA;AjLysuBJ;AEntuBC;E+KeK,iBAAA;EACA,cAAA;AjLusuBN;AEvtuBC;;E+KuBK,iBAAA;EACA,cAAA;AjLosuBN;AE5tuBC;EcCC,sBAAA;EAGA,0BAAA;EACA,eAAA;EACA,0BAAA;EACA,mBAAA;EAEA,6BAAA;EkKDA,SAAA;EACA,UAAA;EACA,gBAAA;AlL6tuBF;AkL3tuBE;EACE,kBAAA;EACA,SAAA;EACA,oBAAA;EACA,eAAA;EACA,gBAAA;AlL6tuBJ;AkL3tuBI;EACE,kBAAA;EACA,SAAA;EACA,SAAA;EACA,yBAAA;EACA,8BAAA;AlL6tuBN;AkL1tuBI;EACE,eAAA;EACA,6BAAA;AlL4tuBN;AkLztuBI;EACE,aAAA;AlL2tuBN;AkLxtuBI;EACE,kBAAA;EACA,WAAA;EACA,YAAA;EACA,sBAAA;EACA,6BAAA;EACA,oBAAA;AlL0tuBN;AkLxtuBM;EACE,cAAA;EACA,qBAAA;AlL0tuBR;AkLvtuBM;EACE,cAAA;EACA,qBAAA;AlLytuBR;AkLttuBM;EACE,cAAA;EACA,qBAAA;AlLwtuBR;AkLrtuBM;EACE,0BAAA;EACA,iCAAA;AlLutuBR;AkLntuBI;EACE,kBAAA;EACA,UAAA;EACA,SAAA;EACA,WAAA;EACA,YAAA;EACA,aAAA;EACA,gBAAA;EACA,cAAA;EACA,kBAAA;EACA,SAAA;EACA,gBAAA;EACA,gCAAA;AlLqtuBN;AkLltuBI;EACE,kBAAA;EACA,aAAA;EACA,kBAAA;EACA,sBAAA;AlLotuBN;AkLjtuBI;EAEI,aAAA;AlLktuBR;AkLptuBI;EAKI,gBAAA;AlLktuBR;AkLzsuBM;;;;;;;;;EAGE,SAAA;AlLituBR;AkL9suBM;;;EACE,iBAAA;AlLktuBR;AkLhtuBQ;;;EACE,gBAAA;AlLotuBV;AkLhtuBM;;;EAEI,qBAAA;EACA,uBAAA;EACA,gBAAA;AlLmtuBV;AkL/suBM;;;EAEI,uBAAA;EACA,SAAA;EACA,iBAAA;AlLktuBV;AEj1uBC;;;EgL0IO,4BAAA;AlL4suBR;AEt1uBC;EgL6IO,wBAAA;AlL4suBR;AkLvsuBE;EACE,cAAA;EACA,yBAAA;EACA,+BAAA;AlLysuBJ;AkLtsuBE;EACE,aAAA;AlLwsuBJ;AkLrsuBE;EAEI,SAAA;EACA,cAAA;EACA,yBAAA;EACA,+BAAA;AlLssuBN;AkL3suBE;EAQI,gBAAA;AlLssuBN;AE12uBC;EgLyKK,kBAAA;EACA,aAAA;EACA,uBAAA;EACA,iBAAA;AlLosuBN;AEh3uBC;EgLgLO,sBAAA;EACA,uBAAA;EACA,gBAAA;AlLmsuBR;AmL/2uBE;EACE,cAAA;AnLi3uBJ;AEx3uBC;EiLaO,UAAA;EACA,UAAA;EACA,+BAAA;EACA,iBAAA;AnL82uBR;AE93uBC;EiLsBO,UAAA;EACA,UAAA;EACA,+BAAA;AnL22uBR;AEn4uBC;EiL8BO,kBAAA;AnLw2uBR;AEt4uBC;;;;;;;;;EiL2CS,UAAA;EACA,UAAA;AnLs2uBV;AEl5uBC;;;EiLkDS,kBAAA;EACA,cAAA;AnLq2uBV;AEx5uBC;;;EiLwDW,iBAAA;EACA,cAAA;AnLq2uBZ;AE95uBC;;;EiLiEW,sBAAA;EACA,UAAA;EACA,iBAAA;AnLk2uBZ;AEr6uBC;;;EiL2EW,gBAAA;AnL+1uBZ;AE16uBC;;;EiLwFS,QAAA;EACA,UAAA;AnLu1uBV;AEh7uBC;EiL+FS,WAAA;EACA,kBAAA;EACA,iBAAA;AnLo1uBV;AEr7uBC;EiLyGK,gCAAA;EACA,iBAAA;AnL+0uBN;AEz7uBC;EiLiHO,gCAAA;EACA,iBAAA;AnL20uBR;AE77uBC;EiL0HO,gBAAA;AnLs0uBR;AEh8uBC;EiLgIS,uBAAA;EACA,iBAAA;AnLm0uBV;AEp8uBC;EcCC,sBAAA;EACA,SAAA;EACA,UAAA;EACA,0BAAA;EACA,eAAA;EACA,0BAAA;EACA,mBAAA;EACA,gBAAA;EACA,6BAAA;EoKQA,kBAAA;EACA,aAAA;EACA,cAAA;EACA,kBAAA;EACA,gBAAA;EACA,gBAAA;EACA,mBAAA;ApL+7uBF;AoL77uBE;EACE,kBAAA;ApL+7uBJ;AoL57uBE;EACE,aAAA;ApL87uBJ;AoL37uBE;;;EAGE,4BAAA;ApL67uBJ;AoL17uBE;;;EAGE,0BAAA;ApL47uBJ;AoLz7uBE;;;EAGE,yBAAA;ApL27uBJ;AoLx7uBE;;;EAGE,2BAAA;ApL07uBJ;AoLt7uBE;EACE,eAAA;EACA,gBAAA;EACA,gBAAA;EACA,WAAA;EACA,gBAAA;EACA,qBAAA;EACA,qBAAA;EACA,qCAAA;EACA,kBAAA;EACA,oHAAA;ApLw7uBJ;AoLp7uBE;EACE,kBAAA;EACA,UAAA;EACA,cAAA;EACA,WAAA;EACA,YAAA;EACA,gBAAA;EACA,uBAAA;EACA,oBAAA;ApLs7uBJ;AoLp7uBI;EAEE,yGAAA;EAMA,kBAAA;EACA,MAAA;EACA,QAAA;EACA,SAAA;EACA,OAAA;EACA,cAAA;EACA,mBAAA;EACA,oBAAA;EACA,YAAA;EACA,WAAA;EACA,oBAAA;E3H5EJ,sBAAA;EACA,oBAAA;AzD6/uBF;AyD3/uBE;EACE,kBAAA;EACA,kBAAA;EACA,mBAAA;EACA,mBAAA;EACA,oBAAA;EACA,8CAAA;EAEA,4BAAA;EACA,gCAAA;EACA,WAAA;EACA,yBAAA;EACA,8WAAA;AzD4/uBJ;AoL17uBE;;;EAGE,SAAA;EACA,2BAAA;ApL47uBJ;AoL17uBI;;;EACE,2CAAA;EACA,0CAAA;ApL87uBN;AoL17uBE;EACE,SAAA;EACA,4CAAA;ApL47uBJ;AoLz7uBE;EACE,UAAA;ApL27uBJ;AoLx7uBE;EACE,WAAA;ApL07uBJ;AoLv7uBE;;;EAGE,OAAA;EACA,4BAAA;ApLy7uBJ;AoLv7uBI;;;EACE,4CAAA;EACA,0CAAA;ApL27uBN;AoLv7uBE;EACE,QAAA;EACA,6CAAA;ApLy7uBJ;AoLt7uBE;EACE,QAAA;ApLw7uBJ;AoLr7uBE;EACE,WAAA;ApLu7uBJ;AoLp7uBE;;;EAGE,QAAA;EACA,2BAAA;ApLs7uBJ;AoLp7uBI;;;EACE,4CAAA;EACA,2CAAA;ApLw7uBN;AoLp7uBE;EACE,QAAA;EACA,4CAAA;ApLs7uBJ;AoLn7uBE;EACE,QAAA;ApLq7uBJ;AoLl7uBE;EACE,WAAA;ApLo7uBJ;AoLj7uBE;;;EAGE,MAAA;EACA,4BAAA;ApLm7uBJ;AoLj7uBI;;;EACE,6CAAA;EACA,0CAAA;ApLq7uBN;AoLj7uBE;EACE,SAAA;EACA,6CAAA;ApLm7uBJ;AoLh7uBE;EACE,UAAA;ApLk7uBJ;AoL/6uBE;EACE,WAAA;ApLi7uBJ;AE3nvBC;EkLoNK,yBAAA;ApL06uBN;AoLv6uBM;EACE,mBAAA;ApLy6uBR;AEjovBC;EkLoNK,yBAAA;ApLg7uBN;AoL76uBM;EACE,mBAAA;ApL+6uBR;AEvovBC;EkLoNK,yBAAA;ApLs7uBN;AoLn7uBM;EACE,mBAAA;ApLq7uBR;AE7ovBC;EkLoNK,yBAAA;ApL47uBN;AoLz7uBM;EACE,mBAAA;ApL27uBR;AEnpvBC;EkLoNK,yBAAA;ApLk8uBN;AoL/7uBM;EACE,mBAAA;ApLi8uBR;AEzpvBC;EkLoNK,yBAAA;ApLw8uBN;AoLr8uBM;EACE,mBAAA;ApLu8uBR;AE/pvBC;EkLoNK,yBAAA;ApL88uBN;AoL38uBM;EACE,mBAAA;ApL68uBR;AErqvBC;EkLoNK,yBAAA;ApLo9uBN;AoLj9uBM;EACE,mBAAA;ApLm9uBR;AE3qvBC;EkLoNK,yBAAA;ApL09uBN;AoLv9uBM;EACE,mBAAA;ApLy9uBR;AEjrvBC;EkLoNK,yBAAA;ApLg+uBN;AoL79uBM;EACE,mBAAA;ApL+9uBR;AEvrvBC;EkLoNK,yBAAA;ApLs+uBN;AoLn+uBM;EACE,mBAAA;ApLq+uBR;AE7rvBC;EkLoNK,yBAAA;ApL4+uBN;AoLz+uBM;EACE,mBAAA;ApL2+uBR;AEnsvBC;EkLoNK,yBAAA;ApLk/uBN;AoL/+uBM;EACE,mBAAA;ApLi/uBR;AqLrsvBE;EACE,cAAA;ArLusvBJ;AE5svBC;EmLUK,iBAAA;ArLqsvBN;AE/svBC;EoLSG,aAAA;EACA,WAAA;EACA,YAAA;EACA,iBAAA;AtLysvBJ;AErtvBC;EoLkBK,SAAA;EACA,gBAAA;AtLssvBN;AEztvBC;EoLsBO,WAAA;EACA,eAAA;AtLssvBR;AE7tvBC;EoL6BS,mBAAA;AtLmsvBV;AEhuvBC;EoLiCS,gCAAA;AtLksvBV;AEnuvBC;EoLsCO,SAAA;AtLgsvBR;AEtuvBC;EoL2CK,kBAAA;AtL8rvBN;AsL1rvBI;EACE,6BAA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","sourcesContent":["/*** GLOBAL CSS ***/\n[class^=ant-]::-ms-clear,\n[class*= ant-]::-ms-clear,\n[class^=ant-] input::-ms-clear,\n[class*= ant-] input::-ms-clear,\n[class^=ant-] input::-ms-reveal,\n[class*= ant-] input::-ms-reveal {\n display: none;\n}\n/* stylelint-disable property-no-vendor-prefix, at-rule-no-vendor-prefix */\nhtml,\nbody {\n width: 100%;\n height: 100%;\n}\ninput::-ms-clear,\ninput::-ms-reveal {\n display: none;\n}\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\nhtml {\n font-family: sans-serif;\n line-height: 1.15;\n -webkit-text-size-adjust: 100%;\n -ms-text-size-adjust: 100%;\n -ms-overflow-style: scrollbar;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n@-ms-viewport {\n width: device-width;\n}\nbody {\n margin: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';\n font-variant: tabular-nums;\n line-height: 1.5715;\n background-color: #fff;\n font-feature-settings: 'tnum';\n}\n[tabindex='-1']:focus {\n outline: none !important;\n}\nhr {\n box-sizing: content-box;\n height: 0;\n overflow: visible;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n margin-top: 0;\n margin-bottom: 0.5em;\n color: rgba(0, 0, 0, 0.85);\n font-weight: 500;\n}\np {\n margin-top: 0;\n margin-bottom: 1em;\n}\nabbr[title],\nabbr[data-original-title] {\n text-decoration: underline;\n text-decoration: underline dotted;\n border-bottom: 0;\n cursor: help;\n}\naddress {\n margin-bottom: 1em;\n font-style: normal;\n line-height: inherit;\n}\ninput[type='text'],\ninput[type='password'],\ninput[type='number'],\ntextarea {\n -webkit-appearance: none;\n}\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1em;\n}\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\ndt {\n font-weight: 500;\n}\ndd {\n margin-bottom: 0.5em;\n margin-left: 0;\n}\nblockquote {\n margin: 0 0 1em;\n}\ndfn {\n font-style: italic;\n}\nb,\nstrong {\n font-weight: bolder;\n}\nsmall {\n font-size: 80%;\n}\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\nsub {\n bottom: -0.25em;\n}\nsup {\n top: -0.5em;\n}\na {\n color: #5b5ce1;\n text-decoration: none;\n background-color: transparent;\n outline: none;\n cursor: pointer;\n transition: color 0.3s;\n -webkit-text-decoration-skip: objects;\n}\na:hover {\n color: #8588ed;\n}\na:active {\n color: #4541ba;\n}\na:active,\na:hover {\n text-decoration: none;\n outline: 0;\n}\na:focus {\n text-decoration: none;\n outline: 0;\n}\na[disabled] {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n}\npre,\ncode,\nkbd,\nsamp {\n font-size: 1em;\n font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;\n}\npre {\n margin-top: 0;\n margin-bottom: 1em;\n overflow: auto;\n}\nfigure {\n margin: 0 0 1em;\n}\nimg {\n vertical-align: middle;\n border-style: none;\n}\na,\narea,\nbutton,\n[role='button'],\ninput:not([type='range']),\nlabel,\nselect,\nsummary,\ntextarea {\n touch-action: manipulation;\n}\ntable {\n border-collapse: collapse;\n}\ncaption {\n padding-top: 0.75em;\n padding-bottom: 0.3em;\n color: rgba(0, 0, 0, 0.45);\n text-align: left;\n caption-side: bottom;\n}\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n color: inherit;\n font-size: inherit;\n font-family: inherit;\n line-height: inherit;\n}\nbutton,\ninput {\n overflow: visible;\n}\nbutton,\nselect {\n text-transform: none;\n}\nbutton,\nhtml [type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\nbutton::-moz-focus-inner,\n[type='button']::-moz-focus-inner,\n[type='reset']::-moz-focus-inner,\n[type='submit']::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\ninput[type='radio'],\ninput[type='checkbox'] {\n box-sizing: border-box;\n padding: 0;\n}\ninput[type='date'],\ninput[type='time'],\ninput[type='datetime-local'],\ninput[type='month'] {\n -webkit-appearance: listbox;\n}\ntextarea {\n overflow: auto;\n resize: vertical;\n}\nfieldset {\n min-width: 0;\n margin: 0;\n padding: 0;\n border: 0;\n}\nlegend {\n display: block;\n width: 100%;\n max-width: 100%;\n margin-bottom: 0.5em;\n padding: 0;\n color: inherit;\n font-size: 1.5em;\n line-height: inherit;\n white-space: normal;\n}\nprogress {\n vertical-align: baseline;\n}\n[type='number']::-webkit-inner-spin-button,\n[type='number']::-webkit-outer-spin-button {\n height: auto;\n}\n[type='search'] {\n outline-offset: -2px;\n -webkit-appearance: none;\n}\n[type='search']::-webkit-search-cancel-button,\n[type='search']::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n::-webkit-file-upload-button {\n font: inherit;\n -webkit-appearance: button;\n}\noutput {\n display: inline-block;\n}\nsummary {\n display: list-item;\n}\ntemplate {\n display: none;\n}\n[hidden] {\n display: none !important;\n}\nmark {\n padding: 0.2em;\n background-color: #feffe6;\n}\n::selection {\n color: #fff;\n background: #5b5ce1;\n}\n.clearfix::before {\n display: table;\n content: '';\n}\n.clearfix::after {\n display: table;\n clear: both;\n content: '';\n}\n.anticon {\n display: inline-block;\n color: inherit;\n font-style: normal;\n line-height: 0;\n text-align: center;\n text-transform: none;\n vertical-align: -0.125em;\n text-rendering: optimizelegibility;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n.anticon > * {\n line-height: 1;\n}\n.anticon svg {\n display: inline-block;\n}\n.anticon::before {\n display: none;\n}\n.anticon .anticon-icon {\n display: block;\n}\n.anticon > .anticon {\n line-height: 0;\n vertical-align: 0;\n}\n.anticon[tabindex] {\n cursor: pointer;\n}\n.anticon-spin,\n.anticon-spin::before {\n display: inline-block;\n animation: loadingCircle 1s infinite linear;\n}\n.ant-fade-enter,\n.ant-fade-appear {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-fade-leave {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-fade-enter.ant-fade-enter-active,\n.ant-fade-appear.ant-fade-appear-active {\n animation-name: antFadeIn;\n animation-play-state: running;\n}\n.ant-fade-leave.ant-fade-leave-active {\n animation-name: antFadeOut;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-fade-enter,\n.ant-fade-appear {\n opacity: 0;\n animation-timing-function: linear;\n}\n.ant-fade-leave {\n animation-timing-function: linear;\n}\n@keyframes antFadeIn {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}\n@keyframes antFadeOut {\n 0% {\n opacity: 1;\n }\n 100% {\n opacity: 0;\n }\n}\n.ant-move-up-enter,\n.ant-move-up-appear {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-move-up-leave {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-move-up-enter.ant-move-up-enter-active,\n.ant-move-up-appear.ant-move-up-appear-active {\n animation-name: antMoveUpIn;\n animation-play-state: running;\n}\n.ant-move-up-leave.ant-move-up-leave-active {\n animation-name: antMoveUpOut;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-move-up-enter,\n.ant-move-up-appear {\n opacity: 0;\n animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);\n}\n.ant-move-up-leave {\n animation-timing-function: cubic-bezier(0.6, 0.04, 0.98, 0.34);\n}\n.ant-move-down-enter,\n.ant-move-down-appear {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-move-down-leave {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-move-down-enter.ant-move-down-enter-active,\n.ant-move-down-appear.ant-move-down-appear-active {\n animation-name: antMoveDownIn;\n animation-play-state: running;\n}\n.ant-move-down-leave.ant-move-down-leave-active {\n animation-name: antMoveDownOut;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-move-down-enter,\n.ant-move-down-appear {\n opacity: 0;\n animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);\n}\n.ant-move-down-leave {\n animation-timing-function: cubic-bezier(0.6, 0.04, 0.98, 0.34);\n}\n.ant-move-left-enter,\n.ant-move-left-appear {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-move-left-leave {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-move-left-enter.ant-move-left-enter-active,\n.ant-move-left-appear.ant-move-left-appear-active {\n animation-name: antMoveLeftIn;\n animation-play-state: running;\n}\n.ant-move-left-leave.ant-move-left-leave-active {\n animation-name: antMoveLeftOut;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-move-left-enter,\n.ant-move-left-appear {\n opacity: 0;\n animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);\n}\n.ant-move-left-leave {\n animation-timing-function: cubic-bezier(0.6, 0.04, 0.98, 0.34);\n}\n.ant-move-right-enter,\n.ant-move-right-appear {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-move-right-leave {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-move-right-enter.ant-move-right-enter-active,\n.ant-move-right-appear.ant-move-right-appear-active {\n animation-name: antMoveRightIn;\n animation-play-state: running;\n}\n.ant-move-right-leave.ant-move-right-leave-active {\n animation-name: antMoveRightOut;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-move-right-enter,\n.ant-move-right-appear {\n opacity: 0;\n animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);\n}\n.ant-move-right-leave {\n animation-timing-function: cubic-bezier(0.6, 0.04, 0.98, 0.34);\n}\n@keyframes antMoveDownIn {\n 0% {\n transform: translateY(100%);\n transform-origin: 0 0;\n opacity: 0;\n }\n 100% {\n transform: translateY(0%);\n transform-origin: 0 0;\n opacity: 1;\n }\n}\n@keyframes antMoveDownOut {\n 0% {\n transform: translateY(0%);\n transform-origin: 0 0;\n opacity: 1;\n }\n 100% {\n transform: translateY(100%);\n transform-origin: 0 0;\n opacity: 0;\n }\n}\n@keyframes antMoveLeftIn {\n 0% {\n transform: translateX(-100%);\n transform-origin: 0 0;\n opacity: 0;\n }\n 100% {\n transform: translateX(0%);\n transform-origin: 0 0;\n opacity: 1;\n }\n}\n@keyframes antMoveLeftOut {\n 0% {\n transform: translateX(0%);\n transform-origin: 0 0;\n opacity: 1;\n }\n 100% {\n transform: translateX(-100%);\n transform-origin: 0 0;\n opacity: 0;\n }\n}\n@keyframes antMoveRightIn {\n 0% {\n transform: translateX(100%);\n transform-origin: 0 0;\n opacity: 0;\n }\n 100% {\n transform: translateX(0%);\n transform-origin: 0 0;\n opacity: 1;\n }\n}\n@keyframes antMoveRightOut {\n 0% {\n transform: translateX(0%);\n transform-origin: 0 0;\n opacity: 1;\n }\n 100% {\n transform: translateX(100%);\n transform-origin: 0 0;\n opacity: 0;\n }\n}\n@keyframes antMoveUpIn {\n 0% {\n transform: translateY(-100%);\n transform-origin: 0 0;\n opacity: 0;\n }\n 100% {\n transform: translateY(0%);\n transform-origin: 0 0;\n opacity: 1;\n }\n}\n@keyframes antMoveUpOut {\n 0% {\n transform: translateY(0%);\n transform-origin: 0 0;\n opacity: 1;\n }\n 100% {\n transform: translateY(-100%);\n transform-origin: 0 0;\n opacity: 0;\n }\n}\n@keyframes loadingCircle {\n 100% {\n transform: rotate(360deg);\n }\n}\n[ant-click-animating='true'],\n[ant-click-animating-without-extra-node='true'] {\n position: relative;\n}\nhtml {\n --antd-wave-shadow-color: #5b5ce1;\n --scroll-bar: 0;\n}\n[ant-click-animating-without-extra-node='true']::after,\n.ant-click-animating-node {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n display: block;\n border-radius: inherit;\n box-shadow: 0 0 0 0 #5b5ce1;\n box-shadow: 0 0 0 0 var(--antd-wave-shadow-color);\n opacity: 0.2;\n animation: fadeEffect 2s cubic-bezier(0.08, 0.82, 0.17, 1), waveEffect 0.4s cubic-bezier(0.08, 0.82, 0.17, 1);\n animation-fill-mode: forwards;\n content: '';\n pointer-events: none;\n}\n@keyframes waveEffect {\n 100% {\n box-shadow: 0 0 0 #5b5ce1;\n box-shadow: 0 0 0 6px var(--antd-wave-shadow-color);\n }\n}\n@keyframes fadeEffect {\n 100% {\n opacity: 0;\n }\n}\n.ant-slide-up-enter,\n.ant-slide-up-appear {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-slide-up-leave {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-slide-up-enter.ant-slide-up-enter-active,\n.ant-slide-up-appear.ant-slide-up-appear-active {\n animation-name: antSlideUpIn;\n animation-play-state: running;\n}\n.ant-slide-up-leave.ant-slide-up-leave-active {\n animation-name: antSlideUpOut;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-slide-up-enter,\n.ant-slide-up-appear {\n opacity: 0;\n animation-timing-function: cubic-bezier(0.23, 1, 0.32, 1);\n}\n.ant-slide-up-leave {\n animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n}\n.ant-slide-down-enter,\n.ant-slide-down-appear {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-slide-down-leave {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-slide-down-enter.ant-slide-down-enter-active,\n.ant-slide-down-appear.ant-slide-down-appear-active {\n animation-name: antSlideDownIn;\n animation-play-state: running;\n}\n.ant-slide-down-leave.ant-slide-down-leave-active {\n animation-name: antSlideDownOut;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-slide-down-enter,\n.ant-slide-down-appear {\n opacity: 0;\n animation-timing-function: cubic-bezier(0.23, 1, 0.32, 1);\n}\n.ant-slide-down-leave {\n animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n}\n.ant-slide-left-enter,\n.ant-slide-left-appear {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-slide-left-leave {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-slide-left-enter.ant-slide-left-enter-active,\n.ant-slide-left-appear.ant-slide-left-appear-active {\n animation-name: antSlideLeftIn;\n animation-play-state: running;\n}\n.ant-slide-left-leave.ant-slide-left-leave-active {\n animation-name: antSlideLeftOut;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-slide-left-enter,\n.ant-slide-left-appear {\n opacity: 0;\n animation-timing-function: cubic-bezier(0.23, 1, 0.32, 1);\n}\n.ant-slide-left-leave {\n animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n}\n.ant-slide-right-enter,\n.ant-slide-right-appear {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-slide-right-leave {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-slide-right-enter.ant-slide-right-enter-active,\n.ant-slide-right-appear.ant-slide-right-appear-active {\n animation-name: antSlideRightIn;\n animation-play-state: running;\n}\n.ant-slide-right-leave.ant-slide-right-leave-active {\n animation-name: antSlideRightOut;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-slide-right-enter,\n.ant-slide-right-appear {\n opacity: 0;\n animation-timing-function: cubic-bezier(0.23, 1, 0.32, 1);\n}\n.ant-slide-right-leave {\n animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n}\n@keyframes antSlideUpIn {\n 0% {\n transform: scaleY(0.8);\n transform-origin: 0% 0%;\n opacity: 0;\n }\n 100% {\n transform: scaleY(1);\n transform-origin: 0% 0%;\n opacity: 1;\n }\n}\n@keyframes antSlideUpOut {\n 0% {\n transform: scaleY(1);\n transform-origin: 0% 0%;\n opacity: 1;\n }\n 100% {\n transform: scaleY(0.8);\n transform-origin: 0% 0%;\n opacity: 0;\n }\n}\n@keyframes antSlideDownIn {\n 0% {\n transform: scaleY(0.8);\n transform-origin: 100% 100%;\n opacity: 0;\n }\n 100% {\n transform: scaleY(1);\n transform-origin: 100% 100%;\n opacity: 1;\n }\n}\n@keyframes antSlideDownOut {\n 0% {\n transform: scaleY(1);\n transform-origin: 100% 100%;\n opacity: 1;\n }\n 100% {\n transform: scaleY(0.8);\n transform-origin: 100% 100%;\n opacity: 0;\n }\n}\n@keyframes antSlideLeftIn {\n 0% {\n transform: scaleX(0.8);\n transform-origin: 0% 0%;\n opacity: 0;\n }\n 100% {\n transform: scaleX(1);\n transform-origin: 0% 0%;\n opacity: 1;\n }\n}\n@keyframes antSlideLeftOut {\n 0% {\n transform: scaleX(1);\n transform-origin: 0% 0%;\n opacity: 1;\n }\n 100% {\n transform: scaleX(0.8);\n transform-origin: 0% 0%;\n opacity: 0;\n }\n}\n@keyframes antSlideRightIn {\n 0% {\n transform: scaleX(0.8);\n transform-origin: 100% 0%;\n opacity: 0;\n }\n 100% {\n transform: scaleX(1);\n transform-origin: 100% 0%;\n opacity: 1;\n }\n}\n@keyframes antSlideRightOut {\n 0% {\n transform: scaleX(1);\n transform-origin: 100% 0%;\n opacity: 1;\n }\n 100% {\n transform: scaleX(0.8);\n transform-origin: 100% 0%;\n opacity: 0;\n }\n}\n.ant-zoom-enter,\n.ant-zoom-appear {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-zoom-leave {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-zoom-enter.ant-zoom-enter-active,\n.ant-zoom-appear.ant-zoom-appear-active {\n animation-name: antZoomIn;\n animation-play-state: running;\n}\n.ant-zoom-leave.ant-zoom-leave-active {\n animation-name: antZoomOut;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-zoom-enter,\n.ant-zoom-appear {\n transform: scale(0);\n opacity: 0;\n animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);\n}\n.ant-zoom-enter-prepare,\n.ant-zoom-appear-prepare {\n transform: none;\n}\n.ant-zoom-leave {\n animation-timing-function: cubic-bezier(0.78, 0.14, 0.15, 0.86);\n}\n.ant-zoom-big-enter,\n.ant-zoom-big-appear {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-zoom-big-leave {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-zoom-big-enter.ant-zoom-big-enter-active,\n.ant-zoom-big-appear.ant-zoom-big-appear-active {\n animation-name: antZoomBigIn;\n animation-play-state: running;\n}\n.ant-zoom-big-leave.ant-zoom-big-leave-active {\n animation-name: antZoomBigOut;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-zoom-big-enter,\n.ant-zoom-big-appear {\n transform: scale(0);\n opacity: 0;\n animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);\n}\n.ant-zoom-big-enter-prepare,\n.ant-zoom-big-appear-prepare {\n transform: none;\n}\n.ant-zoom-big-leave {\n animation-timing-function: cubic-bezier(0.78, 0.14, 0.15, 0.86);\n}\n.ant-zoom-big-fast-enter,\n.ant-zoom-big-fast-appear {\n animation-duration: 0.1s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-zoom-big-fast-leave {\n animation-duration: 0.1s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-zoom-big-fast-enter.ant-zoom-big-fast-enter-active,\n.ant-zoom-big-fast-appear.ant-zoom-big-fast-appear-active {\n animation-name: antZoomBigIn;\n animation-play-state: running;\n}\n.ant-zoom-big-fast-leave.ant-zoom-big-fast-leave-active {\n animation-name: antZoomBigOut;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-zoom-big-fast-enter,\n.ant-zoom-big-fast-appear {\n transform: scale(0);\n opacity: 0;\n animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);\n}\n.ant-zoom-big-fast-enter-prepare,\n.ant-zoom-big-fast-appear-prepare {\n transform: none;\n}\n.ant-zoom-big-fast-leave {\n animation-timing-function: cubic-bezier(0.78, 0.14, 0.15, 0.86);\n}\n.ant-zoom-up-enter,\n.ant-zoom-up-appear {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-zoom-up-leave {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-zoom-up-enter.ant-zoom-up-enter-active,\n.ant-zoom-up-appear.ant-zoom-up-appear-active {\n animation-name: antZoomUpIn;\n animation-play-state: running;\n}\n.ant-zoom-up-leave.ant-zoom-up-leave-active {\n animation-name: antZoomUpOut;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-zoom-up-enter,\n.ant-zoom-up-appear {\n transform: scale(0);\n opacity: 0;\n animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);\n}\n.ant-zoom-up-enter-prepare,\n.ant-zoom-up-appear-prepare {\n transform: none;\n}\n.ant-zoom-up-leave {\n animation-timing-function: cubic-bezier(0.78, 0.14, 0.15, 0.86);\n}\n.ant-zoom-down-enter,\n.ant-zoom-down-appear {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-zoom-down-leave {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-zoom-down-enter.ant-zoom-down-enter-active,\n.ant-zoom-down-appear.ant-zoom-down-appear-active {\n animation-name: antZoomDownIn;\n animation-play-state: running;\n}\n.ant-zoom-down-leave.ant-zoom-down-leave-active {\n animation-name: antZoomDownOut;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-zoom-down-enter,\n.ant-zoom-down-appear {\n transform: scale(0);\n opacity: 0;\n animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);\n}\n.ant-zoom-down-enter-prepare,\n.ant-zoom-down-appear-prepare {\n transform: none;\n}\n.ant-zoom-down-leave {\n animation-timing-function: cubic-bezier(0.78, 0.14, 0.15, 0.86);\n}\n.ant-zoom-left-enter,\n.ant-zoom-left-appear {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-zoom-left-leave {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-zoom-left-enter.ant-zoom-left-enter-active,\n.ant-zoom-left-appear.ant-zoom-left-appear-active {\n animation-name: antZoomLeftIn;\n animation-play-state: running;\n}\n.ant-zoom-left-leave.ant-zoom-left-leave-active {\n animation-name: antZoomLeftOut;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-zoom-left-enter,\n.ant-zoom-left-appear {\n transform: scale(0);\n opacity: 0;\n animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);\n}\n.ant-zoom-left-enter-prepare,\n.ant-zoom-left-appear-prepare {\n transform: none;\n}\n.ant-zoom-left-leave {\n animation-timing-function: cubic-bezier(0.78, 0.14, 0.15, 0.86);\n}\n.ant-zoom-right-enter,\n.ant-zoom-right-appear {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-zoom-right-leave {\n animation-duration: 0.2s;\n animation-fill-mode: both;\n animation-play-state: paused;\n}\n.ant-zoom-right-enter.ant-zoom-right-enter-active,\n.ant-zoom-right-appear.ant-zoom-right-appear-active {\n animation-name: antZoomRightIn;\n animation-play-state: running;\n}\n.ant-zoom-right-leave.ant-zoom-right-leave-active {\n animation-name: antZoomRightOut;\n animation-play-state: running;\n pointer-events: none;\n}\n.ant-zoom-right-enter,\n.ant-zoom-right-appear {\n transform: scale(0);\n opacity: 0;\n animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1);\n}\n.ant-zoom-right-enter-prepare,\n.ant-zoom-right-appear-prepare {\n transform: none;\n}\n.ant-zoom-right-leave {\n animation-timing-function: cubic-bezier(0.78, 0.14, 0.15, 0.86);\n}\n@keyframes antZoomIn {\n 0% {\n transform: scale(0.2);\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n}\n@keyframes antZoomOut {\n 0% {\n transform: scale(1);\n }\n 100% {\n transform: scale(0.2);\n opacity: 0;\n }\n}\n@keyframes antZoomBigIn {\n 0% {\n transform: scale(0.8);\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n}\n@keyframes antZoomBigOut {\n 0% {\n transform: scale(1);\n }\n 100% {\n transform: scale(0.8);\n opacity: 0;\n }\n}\n@keyframes antZoomUpIn {\n 0% {\n transform: scale(0.8);\n transform-origin: 50% 0%;\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n transform-origin: 50% 0%;\n }\n}\n@keyframes antZoomUpOut {\n 0% {\n transform: scale(1);\n transform-origin: 50% 0%;\n }\n 100% {\n transform: scale(0.8);\n transform-origin: 50% 0%;\n opacity: 0;\n }\n}\n@keyframes antZoomLeftIn {\n 0% {\n transform: scale(0.8);\n transform-origin: 0% 50%;\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n transform-origin: 0% 50%;\n }\n}\n@keyframes antZoomLeftOut {\n 0% {\n transform: scale(1);\n transform-origin: 0% 50%;\n }\n 100% {\n transform: scale(0.8);\n transform-origin: 0% 50%;\n opacity: 0;\n }\n}\n@keyframes antZoomRightIn {\n 0% {\n transform: scale(0.8);\n transform-origin: 100% 50%;\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n transform-origin: 100% 50%;\n }\n}\n@keyframes antZoomRightOut {\n 0% {\n transform: scale(1);\n transform-origin: 100% 50%;\n }\n 100% {\n transform: scale(0.8);\n transform-origin: 100% 50%;\n opacity: 0;\n }\n}\n@keyframes antZoomDownIn {\n 0% {\n transform: scale(0.8);\n transform-origin: 50% 100%;\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n transform-origin: 50% 100%;\n }\n}\n@keyframes antZoomDownOut {\n 0% {\n transform: scale(1);\n transform-origin: 50% 100%;\n }\n 100% {\n transform: scale(0.8);\n transform-origin: 50% 100%;\n opacity: 0;\n }\n}\n.ant-motion-collapse-legacy {\n overflow: hidden;\n}\n.ant-motion-collapse-legacy-active {\n transition: height 0.2s cubic-bezier(0.645, 0.045, 0.355, 1), opacity 0.2s cubic-bezier(0.645, 0.045, 0.355, 1) !important;\n}\n.ant-motion-collapse {\n overflow: hidden;\n transition: height 0.2s cubic-bezier(0.645, 0.045, 0.355, 1), opacity 0.2s cubic-bezier(0.645, 0.045, 0.355, 1) !important;\n}\n/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */\n/* stylelint-disable no-duplicate-selectors */\n/* stylelint-disable */\n/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.ant-affix {\n position: fixed;\n z-index: 10;\n}\n.ant-alert {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n display: flex;\n align-items: center;\n padding: 8px 15px;\n word-wrap: break-word;\n border-radius: 5px;\n}\n.ant-alert-content {\n flex: 1;\n min-width: 0;\n}\n.ant-alert-icon {\n margin-right: 8px;\n}\n.ant-alert-description {\n display: none;\n font-size: 14px;\n line-height: 22px;\n}\n.ant-alert-success {\n background-color: #f6ffed;\n border: 1px solid #b7eb8f;\n}\n.ant-alert-success .ant-alert-icon {\n color: #52c41a;\n}\n.ant-alert-info {\n background-color: #f0f2ff;\n border: 1px solid #e0e3ff;\n}\n.ant-alert-info .ant-alert-icon {\n color: #5b5ce1;\n}\n.ant-alert-warning {\n background-color: #fffbe6;\n border: 1px solid #ffe58f;\n}\n.ant-alert-warning .ant-alert-icon {\n color: #faad14;\n}\n.ant-alert-error {\n background-color: #fff2f0;\n border: 1px solid #ffccc7;\n}\n.ant-alert-error .ant-alert-icon {\n color: #ff4d4f;\n}\n.ant-alert-error .ant-alert-description > pre {\n margin: 0;\n padding: 0;\n}\n.ant-alert-action {\n margin-left: 8px;\n}\n.ant-alert-close-icon {\n margin-left: 8px;\n padding: 0;\n overflow: hidden;\n font-size: 12px;\n line-height: 12px;\n background-color: transparent;\n border: none;\n outline: none;\n cursor: pointer;\n}\n.ant-alert-close-icon .anticon-close {\n color: rgba(0, 0, 0, 0.45);\n transition: color 0.3s;\n}\n.ant-alert-close-icon .anticon-close:hover {\n color: rgba(0, 0, 0, 0.75);\n}\n.ant-alert-close-text {\n color: rgba(0, 0, 0, 0.45);\n transition: color 0.3s;\n}\n.ant-alert-close-text:hover {\n color: rgba(0, 0, 0, 0.75);\n}\n.ant-alert-with-description {\n align-items: flex-start;\n padding: 15px 15px 15px 24px;\n}\n.ant-alert-with-description.ant-alert-no-icon {\n padding: 15px 15px;\n}\n.ant-alert-with-description .ant-alert-icon {\n margin-right: 15px;\n font-size: 24px;\n}\n.ant-alert-with-description .ant-alert-message {\n display: block;\n margin-bottom: 4px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 16px;\n}\n.ant-alert-message {\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-alert-with-description .ant-alert-description {\n display: block;\n}\n.ant-alert.ant-alert-motion-leave {\n overflow: hidden;\n opacity: 1;\n transition: max-height 0.3s cubic-bezier(0.78, 0.14, 0.15, 0.86), opacity 0.3s cubic-bezier(0.78, 0.14, 0.15, 0.86), padding-top 0.3s cubic-bezier(0.78, 0.14, 0.15, 0.86), padding-bottom 0.3s cubic-bezier(0.78, 0.14, 0.15, 0.86), margin-bottom 0.3s cubic-bezier(0.78, 0.14, 0.15, 0.86);\n}\n.ant-alert.ant-alert-motion-leave-active {\n max-height: 0;\n margin-bottom: 0 !important;\n padding-top: 0;\n padding-bottom: 0;\n opacity: 0;\n}\n.ant-alert-banner {\n margin-bottom: 0;\n border: 0;\n border-radius: 0;\n}\n.ant-alert.ant-alert-rtl {\n direction: rtl;\n}\n.ant-alert-rtl .ant-alert-icon {\n margin-right: auto;\n margin-left: 8px;\n}\n.ant-alert-rtl .ant-alert-action {\n margin-right: 8px;\n margin-left: auto;\n}\n.ant-alert-rtl .ant-alert-close-icon {\n margin-right: 8px;\n margin-left: auto;\n}\n.ant-alert-rtl.ant-alert-with-description {\n padding-right: 24px;\n padding-left: 15px;\n}\n.ant-alert-rtl.ant-alert-with-description .ant-alert-icon {\n margin-right: auto;\n margin-left: 15px;\n}\n.ant-anchor {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n padding-left: 2px;\n}\n.ant-anchor-wrapper {\n margin-left: -4px;\n padding-left: 4px;\n overflow: auto;\n background-color: transparent;\n}\n.ant-anchor-ink {\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n}\n.ant-anchor-ink::before {\n position: relative;\n display: block;\n width: 2px;\n height: 100%;\n margin: 0 auto;\n background-color: #f0f0f0;\n content: ' ';\n}\n.ant-anchor-ink-ball {\n position: absolute;\n left: 50%;\n display: none;\n width: 8px;\n height: 8px;\n background-color: #fff;\n border: 2px solid #5b5ce1;\n border-radius: 8px;\n transform: translateX(-50%);\n transition: top 0.3s ease-in-out;\n}\n.ant-anchor-ink-ball.ant-ink-ball-visible {\n display: inline-block;\n}\n.ant-anchor-fixed .ant-anchor-ink .ant-anchor-ink-ball {\n display: none;\n}\n.ant-anchor-link {\n padding: 4px 0 4px 16px;\n}\n.ant-anchor-link-title {\n position: relative;\n display: block;\n margin-bottom: 3px;\n overflow: hidden;\n color: rgba(0, 0, 0, 0.85);\n white-space: nowrap;\n text-overflow: ellipsis;\n transition: all 0.3s;\n}\n.ant-anchor-link-title:only-child {\n margin-bottom: 0;\n}\n.ant-anchor-link-active > .ant-anchor-link-title {\n color: #5b5ce1;\n}\n.ant-anchor-link .ant-anchor-link {\n padding-top: 2px;\n padding-bottom: 2px;\n}\n.ant-anchor-rtl {\n direction: rtl;\n}\n.ant-anchor-rtl.ant-anchor-wrapper {\n margin-right: -4px;\n margin-left: 0;\n padding-right: 4px;\n padding-left: 0;\n}\n.ant-anchor-rtl .ant-anchor-ink {\n right: 0;\n left: auto;\n}\n.ant-anchor-rtl .ant-anchor-ink-ball {\n right: 50%;\n left: 0;\n transform: translateX(50%);\n}\n.ant-anchor-rtl .ant-anchor-link {\n padding: 4px 16px 4px 0;\n}\n.ant-select-auto-complete {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n}\n.ant-select-auto-complete .ant-select-clear {\n right: 13px;\n}\n.ant-avatar {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n display: inline-block;\n overflow: hidden;\n color: #fff;\n white-space: nowrap;\n text-align: center;\n vertical-align: middle;\n background: #ccc;\n width: 32px;\n height: 32px;\n line-height: 32px;\n border-radius: 50%;\n}\n.ant-avatar-image {\n background: transparent;\n}\n.ant-avatar .ant-image-img {\n display: block;\n}\n.ant-avatar-string {\n position: absolute;\n left: 50%;\n transform-origin: 0 center;\n}\n.ant-avatar.ant-avatar-icon {\n font-size: 18px;\n}\n.ant-avatar.ant-avatar-icon > .anticon {\n margin: 0;\n}\n.ant-avatar-lg {\n width: 40px;\n height: 40px;\n line-height: 40px;\n border-radius: 50%;\n}\n.ant-avatar-lg-string {\n position: absolute;\n left: 50%;\n transform-origin: 0 center;\n}\n.ant-avatar-lg.ant-avatar-icon {\n font-size: 24px;\n}\n.ant-avatar-lg.ant-avatar-icon > .anticon {\n margin: 0;\n}\n.ant-avatar-sm {\n width: 24px;\n height: 24px;\n line-height: 24px;\n border-radius: 50%;\n}\n.ant-avatar-sm-string {\n position: absolute;\n left: 50%;\n transform-origin: 0 center;\n}\n.ant-avatar-sm.ant-avatar-icon {\n font-size: 14px;\n}\n.ant-avatar-sm.ant-avatar-icon > .anticon {\n margin: 0;\n}\n.ant-avatar-square {\n border-radius: 5px;\n}\n.ant-avatar > img {\n display: block;\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n.ant-avatar-group {\n display: inline-flex;\n}\n.ant-avatar-group .ant-avatar {\n border: 1px solid #fff;\n}\n.ant-avatar-group .ant-avatar:not(:first-child) {\n margin-left: -8px;\n}\n.ant-avatar-group-popover .ant-avatar + .ant-avatar {\n margin-left: 3px;\n}\n.ant-avatar-group-rtl .ant-avatar:not(:first-child) {\n margin-right: -8px;\n margin-left: 0;\n}\n.ant-avatar-group-popover.ant-popover-rtl .ant-avatar + .ant-avatar {\n margin-right: 3px;\n margin-left: 0;\n}\n.ant-back-top {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: fixed;\n right: 100px;\n bottom: 50px;\n z-index: 10;\n width: 40px;\n height: 40px;\n cursor: pointer;\n}\n.ant-back-top:empty {\n display: none;\n}\n.ant-back-top-rtl {\n right: auto;\n left: 100px;\n direction: rtl;\n}\n.ant-back-top-content {\n width: 40px;\n height: 40px;\n overflow: hidden;\n color: #fff;\n text-align: center;\n background-color: rgba(0, 0, 0, 0.45);\n border-radius: 20px;\n transition: all 0.3s;\n}\n.ant-back-top-content:hover {\n background-color: rgba(0, 0, 0, 0.85);\n transition: all 0.3s;\n}\n.ant-back-top-icon {\n font-size: 24px;\n line-height: 40px;\n}\n@media screen and (max-width: 768px) {\n .ant-back-top {\n right: 60px;\n }\n .ant-back-top-rtl {\n right: auto;\n left: 60px;\n }\n}\n@media screen and (max-width: 480px) {\n .ant-back-top {\n right: 20px;\n }\n .ant-back-top-rtl {\n right: auto;\n left: 20px;\n }\n}\n.ant-badge {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n display: inline-block;\n line-height: 1;\n}\n.ant-badge-count {\n z-index: auto;\n min-width: 20px;\n height: 20px;\n padding: 0 6px;\n color: #fff;\n font-weight: normal;\n font-size: 12px;\n line-height: 20px;\n white-space: nowrap;\n text-align: center;\n background: #ff4d4f;\n border-radius: 10px;\n box-shadow: 0 0 0 1px #fff;\n}\n.ant-badge-count a,\n.ant-badge-count a:hover {\n color: #fff;\n}\n.ant-badge-count-sm {\n min-width: 14px;\n height: 14px;\n padding: 0;\n font-size: 12px;\n line-height: 14px;\n border-radius: 7px;\n}\n.ant-badge-multiple-words {\n padding: 0 8px;\n}\n.ant-badge-dot {\n z-index: auto;\n width: 6px;\n min-width: 6px;\n height: 6px;\n background: #ff4d4f;\n border-radius: 100%;\n box-shadow: 0 0 0 1px #fff;\n}\n.ant-badge-dot.ant-scroll-number {\n transition: background 1.5s;\n}\n.ant-badge-count,\n.ant-badge-dot,\n.ant-badge .ant-scroll-number-custom-component {\n position: absolute;\n top: 0;\n right: 0;\n transform: translate(50%, -50%);\n transform-origin: 100% 0%;\n}\n.ant-badge-count.anticon-spin,\n.ant-badge-dot.anticon-spin,\n.ant-badge .ant-scroll-number-custom-component.anticon-spin {\n animation: antBadgeLoadingCircle 1s infinite linear;\n}\n.ant-badge-status {\n line-height: inherit;\n vertical-align: baseline;\n}\n.ant-badge-status-dot {\n position: relative;\n top: -1px;\n display: inline-block;\n width: 6px;\n height: 6px;\n vertical-align: middle;\n border-radius: 50%;\n}\n.ant-badge-status-success {\n background-color: #52c41a;\n}\n.ant-badge-status-processing {\n position: relative;\n background-color: #1890ff;\n}\n.ant-badge-status-processing::after {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 1px solid #1890ff;\n border-radius: 50%;\n animation: antStatusProcessing 1.2s infinite ease-in-out;\n content: '';\n}\n.ant-badge-status-default {\n background-color: #d9d9d9;\n}\n.ant-badge-status-error {\n background-color: #ff4d4f;\n}\n.ant-badge-status-warning {\n background-color: #faad14;\n}\n.ant-badge-status-pink {\n background: #eb2f96;\n}\n.ant-badge-status-magenta {\n background: #eb2f96;\n}\n.ant-badge-status-red {\n background: #f5222d;\n}\n.ant-badge-status-volcano {\n background: #fa541c;\n}\n.ant-badge-status-orange {\n background: #fa8c16;\n}\n.ant-badge-status-yellow {\n background: #fadb14;\n}\n.ant-badge-status-gold {\n background: #faad14;\n}\n.ant-badge-status-cyan {\n background: #13c2c2;\n}\n.ant-badge-status-lime {\n background: #a0d911;\n}\n.ant-badge-status-green {\n background: #52c41a;\n}\n.ant-badge-status-blue {\n background: #1890ff;\n}\n.ant-badge-status-geekblue {\n background: #2f54eb;\n}\n.ant-badge-status-purple {\n background: #722ed1;\n}\n.ant-badge-status-text {\n margin-left: 8px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n}\n.ant-badge-zoom-appear,\n.ant-badge-zoom-enter {\n animation: antZoomBadgeIn 0.3s cubic-bezier(0.12, 0.4, 0.29, 1.46);\n animation-fill-mode: both;\n}\n.ant-badge-zoom-leave {\n animation: antZoomBadgeOut 0.3s cubic-bezier(0.71, -0.46, 0.88, 0.6);\n animation-fill-mode: both;\n}\n.ant-badge-not-a-wrapper .ant-badge-zoom-appear,\n.ant-badge-not-a-wrapper .ant-badge-zoom-enter {\n animation: antNoWrapperZoomBadgeIn 0.3s cubic-bezier(0.12, 0.4, 0.29, 1.46);\n}\n.ant-badge-not-a-wrapper .ant-badge-zoom-leave {\n animation: antNoWrapperZoomBadgeOut 0.3s cubic-bezier(0.71, -0.46, 0.88, 0.6);\n}\n.ant-badge-not-a-wrapper:not(.ant-badge-status) {\n vertical-align: middle;\n}\n.ant-badge-not-a-wrapper .ant-scroll-number-custom-component,\n.ant-badge-not-a-wrapper .ant-badge-count {\n transform: none;\n}\n.ant-badge-not-a-wrapper .ant-scroll-number-custom-component,\n.ant-badge-not-a-wrapper .ant-scroll-number {\n position: relative;\n top: auto;\n display: block;\n transform-origin: 50% 50%;\n}\n@keyframes antStatusProcessing {\n 0% {\n transform: scale(0.8);\n opacity: 0.5;\n }\n 100% {\n transform: scale(2.4);\n opacity: 0;\n }\n}\n.ant-scroll-number {\n overflow: hidden;\n direction: ltr;\n}\n.ant-scroll-number-only {\n position: relative;\n display: inline-block;\n height: 20px;\n transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\n /* stylelint-disable property-no-vendor-prefix */\n -webkit-transform-style: preserve-3d;\n -webkit-backface-visibility: hidden;\n /* stylelint-enable property-no-vendor-prefix */\n}\n.ant-scroll-number-only > p.ant-scroll-number-only-unit {\n height: 20px;\n margin: 0;\n /* stylelint-disable property-no-vendor-prefix */\n -webkit-transform-style: preserve-3d;\n -webkit-backface-visibility: hidden;\n /* stylelint-enable property-no-vendor-prefix */\n}\n.ant-scroll-number-symbol {\n vertical-align: top;\n}\n@keyframes antZoomBadgeIn {\n 0% {\n transform: scale(0) translate(50%, -50%);\n opacity: 0;\n }\n 100% {\n transform: scale(1) translate(50%, -50%);\n }\n}\n@keyframes antZoomBadgeOut {\n 0% {\n transform: scale(1) translate(50%, -50%);\n }\n 100% {\n transform: scale(0) translate(50%, -50%);\n opacity: 0;\n }\n}\n@keyframes antNoWrapperZoomBadgeIn {\n 0% {\n transform: scale(0);\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n }\n}\n@keyframes antNoWrapperZoomBadgeOut {\n 0% {\n transform: scale(1);\n }\n 100% {\n transform: scale(0);\n opacity: 0;\n }\n}\n@keyframes antBadgeLoadingCircle {\n 0% {\n transform-origin: 50%;\n }\n 100% {\n transform: translate(50%, -50%) rotate(360deg);\n transform-origin: 50%;\n }\n}\n.ant-ribbon-wrapper {\n position: relative;\n}\n.ant-ribbon {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: absolute;\n top: 8px;\n height: 22px;\n padding: 0 8px;\n color: #fff;\n line-height: 22px;\n white-space: nowrap;\n background-color: #5b5ce1;\n border-radius: 2px;\n}\n.ant-ribbon-text {\n color: #fff;\n}\n.ant-ribbon-corner {\n position: absolute;\n top: 100%;\n width: 8px;\n height: 8px;\n color: currentcolor;\n border: 4px solid;\n transform: scaleY(0.75);\n transform-origin: top;\n}\n.ant-ribbon-corner::after {\n position: absolute;\n top: -4px;\n left: -4px;\n width: inherit;\n height: inherit;\n color: rgba(0, 0, 0, 0.25);\n border: inherit;\n content: '';\n}\n.ant-ribbon-color-pink {\n color: #eb2f96;\n background: #eb2f96;\n}\n.ant-ribbon-color-magenta {\n color: #eb2f96;\n background: #eb2f96;\n}\n.ant-ribbon-color-red {\n color: #f5222d;\n background: #f5222d;\n}\n.ant-ribbon-color-volcano {\n color: #fa541c;\n background: #fa541c;\n}\n.ant-ribbon-color-orange {\n color: #fa8c16;\n background: #fa8c16;\n}\n.ant-ribbon-color-yellow {\n color: #fadb14;\n background: #fadb14;\n}\n.ant-ribbon-color-gold {\n color: #faad14;\n background: #faad14;\n}\n.ant-ribbon-color-cyan {\n color: #13c2c2;\n background: #13c2c2;\n}\n.ant-ribbon-color-lime {\n color: #a0d911;\n background: #a0d911;\n}\n.ant-ribbon-color-green {\n color: #52c41a;\n background: #52c41a;\n}\n.ant-ribbon-color-blue {\n color: #1890ff;\n background: #1890ff;\n}\n.ant-ribbon-color-geekblue {\n color: #2f54eb;\n background: #2f54eb;\n}\n.ant-ribbon-color-purple {\n color: #722ed1;\n background: #722ed1;\n}\n.ant-ribbon.ant-ribbon-placement-end {\n right: -8px;\n border-bottom-right-radius: 0;\n}\n.ant-ribbon.ant-ribbon-placement-end .ant-ribbon-corner {\n right: 0;\n border-color: currentcolor transparent transparent currentcolor;\n}\n.ant-ribbon.ant-ribbon-placement-start {\n left: -8px;\n border-bottom-left-radius: 0;\n}\n.ant-ribbon.ant-ribbon-placement-start .ant-ribbon-corner {\n left: 0;\n border-color: currentcolor currentcolor transparent transparent;\n}\n.ant-badge-rtl {\n direction: rtl;\n}\n.ant-badge-rtl.ant-badge:not(.ant-badge-not-a-wrapper) .ant-badge-count,\n.ant-badge-rtl.ant-badge:not(.ant-badge-not-a-wrapper) .ant-badge-dot,\n.ant-badge-rtl.ant-badge:not(.ant-badge-not-a-wrapper) .ant-scroll-number-custom-component {\n right: auto;\n left: 0;\n direction: ltr;\n transform: translate(-50%, -50%);\n transform-origin: 0% 0%;\n}\n.ant-badge-rtl.ant-badge:not(.ant-badge-not-a-wrapper) .ant-scroll-number-custom-component {\n right: auto;\n left: 0;\n transform: translate(-50%, -50%);\n transform-origin: 0% 0%;\n}\n.ant-badge-rtl .ant-badge-status-text {\n margin-right: 8px;\n margin-left: 0;\n}\n.ant-badge:not(.ant-badge-not-a-wrapper).ant-badge-rtl .ant-badge-zoom-appear,\n.ant-badge:not(.ant-badge-not-a-wrapper).ant-badge-rtl .ant-badge-zoom-enter {\n animation-name: antZoomBadgeInRtl;\n}\n.ant-badge:not(.ant-badge-not-a-wrapper).ant-badge-rtl .ant-badge-zoom-leave {\n animation-name: antZoomBadgeOutRtl;\n}\n.ant-ribbon-rtl {\n direction: rtl;\n}\n.ant-ribbon-rtl.ant-ribbon-placement-end {\n right: unset;\n left: -8px;\n border-bottom-right-radius: 2px;\n border-bottom-left-radius: 0;\n}\n.ant-ribbon-rtl.ant-ribbon-placement-end .ant-ribbon-corner {\n right: unset;\n left: 0;\n border-color: currentcolor currentcolor transparent transparent;\n}\n.ant-ribbon-rtl.ant-ribbon-placement-end .ant-ribbon-corner::after {\n border-color: currentcolor currentcolor transparent transparent;\n}\n.ant-ribbon-rtl.ant-ribbon-placement-start {\n right: -8px;\n left: unset;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 2px;\n}\n.ant-ribbon-rtl.ant-ribbon-placement-start .ant-ribbon-corner {\n right: 0;\n left: unset;\n border-color: currentcolor transparent transparent currentcolor;\n}\n.ant-ribbon-rtl.ant-ribbon-placement-start .ant-ribbon-corner::after {\n border-color: currentcolor transparent transparent currentcolor;\n}\n@keyframes antZoomBadgeInRtl {\n 0% {\n transform: scale(0) translate(-50%, -50%);\n opacity: 0;\n }\n 100% {\n transform: scale(1) translate(-50%, -50%);\n }\n}\n@keyframes antZoomBadgeOutRtl {\n 0% {\n transform: scale(1) translate(-50%, -50%);\n }\n 100% {\n transform: scale(0) translate(-50%, -50%);\n opacity: 0;\n }\n}\n.ant-breadcrumb {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n color: rgba(0, 0, 0, 0.45);\n font-size: 14px;\n}\n.ant-breadcrumb .anticon {\n font-size: 14px;\n}\n.ant-breadcrumb ol {\n display: flex;\n flex-wrap: wrap;\n margin: 0;\n padding: 0;\n list-style: none;\n}\n.ant-breadcrumb a {\n color: rgba(0, 0, 0, 0.45);\n transition: color 0.3s;\n}\n.ant-breadcrumb a:hover {\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-breadcrumb li:last-child {\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-breadcrumb li:last-child a {\n color: rgba(0, 0, 0, 0.85);\n}\nli:last-child > .ant-breadcrumb-separator {\n display: none;\n}\n.ant-breadcrumb-separator {\n margin: 0 8px;\n color: rgba(0, 0, 0, 0.45);\n}\n.ant-breadcrumb-link > .anticon + span,\n.ant-breadcrumb-link > .anticon + a {\n margin-left: 4px;\n}\n.ant-breadcrumb-overlay-link > .anticon {\n margin-left: 4px;\n}\n.ant-breadcrumb-rtl {\n direction: rtl;\n}\n.ant-breadcrumb-rtl::before {\n display: table;\n content: '';\n}\n.ant-breadcrumb-rtl::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-breadcrumb-rtl::before {\n display: table;\n content: '';\n}\n.ant-breadcrumb-rtl::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-breadcrumb-rtl > span {\n float: right;\n}\n.ant-breadcrumb-rtl .ant-breadcrumb-link > .anticon + span,\n.ant-breadcrumb-rtl .ant-breadcrumb-link > .anticon + a {\n margin-right: 4px;\n margin-left: 0;\n}\n.ant-breadcrumb-rtl .ant-breadcrumb-overlay-link > .anticon {\n margin-right: 4px;\n margin-left: 0;\n}\n.ant-btn {\n line-height: 1.5715;\n position: relative;\n display: inline-block;\n font-weight: 400;\n white-space: nowrap;\n text-align: center;\n background-image: none;\n border: 1px solid transparent;\n box-shadow: 0 2px 0 rgba(0, 0, 0, 0.015);\n cursor: pointer;\n transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\n user-select: none;\n touch-action: manipulation;\n height: 32px;\n padding: 4px 15px;\n font-size: 14px;\n border-radius: 5px;\n color: rgba(0, 0, 0, 0.85);\n border-color: #d9d9d9;\n background: #fff;\n}\n.ant-btn > .anticon {\n line-height: 1;\n}\n.ant-btn,\n.ant-btn:active,\n.ant-btn:focus {\n outline: 0;\n}\n.ant-btn:not([disabled]):hover {\n text-decoration: none;\n}\n.ant-btn:not([disabled]):active {\n outline: 0;\n box-shadow: none;\n}\n.ant-btn[disabled] {\n cursor: not-allowed;\n}\n.ant-btn[disabled] > * {\n pointer-events: none;\n}\n.ant-btn-lg {\n height: 40px;\n padding: 6.4px 15px;\n font-size: 16px;\n border-radius: 5px;\n}\n.ant-btn-sm {\n height: 24px;\n padding: 0px 7px;\n font-size: 14px;\n border-radius: 5px;\n}\n.ant-btn > a:only-child {\n color: currentcolor;\n}\n.ant-btn > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn:hover,\n.ant-btn:focus {\n color: #8588ed;\n border-color: #8588ed;\n background: #fff;\n}\n.ant-btn:hover > a:only-child,\n.ant-btn:focus > a:only-child {\n color: currentcolor;\n}\n.ant-btn:hover > a:only-child::after,\n.ant-btn:focus > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn:active {\n color: #4541ba;\n border-color: #4541ba;\n background: #fff;\n}\n.ant-btn:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn[disabled],\n.ant-btn[disabled]:hover,\n.ant-btn[disabled]:focus,\n.ant-btn[disabled]:active {\n color: rgba(0, 0, 0, 0.25);\n border-color: #d9d9d9;\n background: #f5f5f5;\n text-shadow: none;\n box-shadow: none;\n}\n.ant-btn[disabled] > a:only-child,\n.ant-btn[disabled]:hover > a:only-child,\n.ant-btn[disabled]:focus > a:only-child,\n.ant-btn[disabled]:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn[disabled] > a:only-child::after,\n.ant-btn[disabled]:hover > a:only-child::after,\n.ant-btn[disabled]:focus > a:only-child::after,\n.ant-btn[disabled]:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn:hover,\n.ant-btn:focus,\n.ant-btn:active {\n text-decoration: none;\n background: #fff;\n}\n.ant-btn > span {\n display: inline-block;\n}\n.ant-btn-primary {\n color: #fff;\n border-color: #5b5ce1;\n background: #5b5ce1;\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.12);\n box-shadow: 0 2px 0 rgba(0, 0, 0, 0.045);\n}\n.ant-btn-primary > a:only-child {\n color: currentcolor;\n}\n.ant-btn-primary > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-primary:hover,\n.ant-btn-primary:focus {\n color: #fff;\n border-color: #8588ed;\n background: #8588ed;\n}\n.ant-btn-primary:hover > a:only-child,\n.ant-btn-primary:focus > a:only-child {\n color: currentcolor;\n}\n.ant-btn-primary:hover > a:only-child::after,\n.ant-btn-primary:focus > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-primary:active {\n color: #fff;\n border-color: #4541ba;\n background: #4541ba;\n}\n.ant-btn-primary:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-primary:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-primary[disabled],\n.ant-btn-primary[disabled]:hover,\n.ant-btn-primary[disabled]:focus,\n.ant-btn-primary[disabled]:active {\n color: rgba(0, 0, 0, 0.25);\n border-color: #d9d9d9;\n background: #f5f5f5;\n text-shadow: none;\n box-shadow: none;\n}\n.ant-btn-primary[disabled] > a:only-child,\n.ant-btn-primary[disabled]:hover > a:only-child,\n.ant-btn-primary[disabled]:focus > a:only-child,\n.ant-btn-primary[disabled]:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-primary[disabled] > a:only-child::after,\n.ant-btn-primary[disabled]:hover > a:only-child::after,\n.ant-btn-primary[disabled]:focus > a:only-child::after,\n.ant-btn-primary[disabled]:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-group .ant-btn-primary:not(:first-child):not(:last-child) {\n border-right-color: #8588ed;\n border-left-color: #8588ed;\n}\n.ant-btn-group .ant-btn-primary:not(:first-child):not(:last-child):disabled {\n border-color: #d9d9d9;\n}\n.ant-btn-group .ant-btn-primary:first-child:not(:last-child) {\n border-right-color: #8588ed;\n}\n.ant-btn-group .ant-btn-primary:first-child:not(:last-child)[disabled] {\n border-right-color: #d9d9d9;\n}\n.ant-btn-group .ant-btn-primary:last-child:not(:first-child),\n.ant-btn-group .ant-btn-primary + .ant-btn-primary {\n border-left-color: #8588ed;\n}\n.ant-btn-group .ant-btn-primary:last-child:not(:first-child)[disabled],\n.ant-btn-group .ant-btn-primary + .ant-btn-primary[disabled] {\n border-left-color: #d9d9d9;\n}\n.ant-btn-ghost {\n color: rgba(0, 0, 0, 0.85);\n border-color: #d9d9d9;\n background: transparent;\n}\n.ant-btn-ghost > a:only-child {\n color: currentcolor;\n}\n.ant-btn-ghost > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-ghost:hover,\n.ant-btn-ghost:focus {\n color: #8588ed;\n border-color: #8588ed;\n background: transparent;\n}\n.ant-btn-ghost:hover > a:only-child,\n.ant-btn-ghost:focus > a:only-child {\n color: currentcolor;\n}\n.ant-btn-ghost:hover > a:only-child::after,\n.ant-btn-ghost:focus > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-ghost:active {\n color: #4541ba;\n border-color: #4541ba;\n background: transparent;\n}\n.ant-btn-ghost:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-ghost:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-ghost[disabled],\n.ant-btn-ghost[disabled]:hover,\n.ant-btn-ghost[disabled]:focus,\n.ant-btn-ghost[disabled]:active {\n color: rgba(0, 0, 0, 0.25);\n border-color: #d9d9d9;\n background: #f5f5f5;\n text-shadow: none;\n box-shadow: none;\n}\n.ant-btn-ghost[disabled] > a:only-child,\n.ant-btn-ghost[disabled]:hover > a:only-child,\n.ant-btn-ghost[disabled]:focus > a:only-child,\n.ant-btn-ghost[disabled]:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-ghost[disabled] > a:only-child::after,\n.ant-btn-ghost[disabled]:hover > a:only-child::after,\n.ant-btn-ghost[disabled]:focus > a:only-child::after,\n.ant-btn-ghost[disabled]:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dashed {\n color: rgba(0, 0, 0, 0.85);\n border-color: #d9d9d9;\n background: #fff;\n border-style: dashed;\n}\n.ant-btn-dashed > a:only-child {\n color: currentcolor;\n}\n.ant-btn-dashed > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dashed:hover,\n.ant-btn-dashed:focus {\n color: #8588ed;\n border-color: #8588ed;\n background: #fff;\n}\n.ant-btn-dashed:hover > a:only-child,\n.ant-btn-dashed:focus > a:only-child {\n color: currentcolor;\n}\n.ant-btn-dashed:hover > a:only-child::after,\n.ant-btn-dashed:focus > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dashed:active {\n color: #4541ba;\n border-color: #4541ba;\n background: #fff;\n}\n.ant-btn-dashed:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-dashed:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dashed[disabled],\n.ant-btn-dashed[disabled]:hover,\n.ant-btn-dashed[disabled]:focus,\n.ant-btn-dashed[disabled]:active {\n color: rgba(0, 0, 0, 0.25);\n border-color: #d9d9d9;\n background: #f5f5f5;\n text-shadow: none;\n box-shadow: none;\n}\n.ant-btn-dashed[disabled] > a:only-child,\n.ant-btn-dashed[disabled]:hover > a:only-child,\n.ant-btn-dashed[disabled]:focus > a:only-child,\n.ant-btn-dashed[disabled]:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-dashed[disabled] > a:only-child::after,\n.ant-btn-dashed[disabled]:hover > a:only-child::after,\n.ant-btn-dashed[disabled]:focus > a:only-child::after,\n.ant-btn-dashed[disabled]:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-danger {\n color: #fff;\n border-color: #ff4d4f;\n background: #ff4d4f;\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.12);\n box-shadow: 0 2px 0 rgba(0, 0, 0, 0.045);\n}\n.ant-btn-danger > a:only-child {\n color: currentcolor;\n}\n.ant-btn-danger > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-danger:hover,\n.ant-btn-danger:focus {\n color: #fff;\n border-color: #ff7875;\n background: #ff7875;\n}\n.ant-btn-danger:hover > a:only-child,\n.ant-btn-danger:focus > a:only-child {\n color: currentcolor;\n}\n.ant-btn-danger:hover > a:only-child::after,\n.ant-btn-danger:focus > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-danger:active {\n color: #fff;\n border-color: #d9363e;\n background: #d9363e;\n}\n.ant-btn-danger:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-danger:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-danger[disabled],\n.ant-btn-danger[disabled]:hover,\n.ant-btn-danger[disabled]:focus,\n.ant-btn-danger[disabled]:active {\n color: rgba(0, 0, 0, 0.25);\n border-color: #d9d9d9;\n background: #f5f5f5;\n text-shadow: none;\n box-shadow: none;\n}\n.ant-btn-danger[disabled] > a:only-child,\n.ant-btn-danger[disabled]:hover > a:only-child,\n.ant-btn-danger[disabled]:focus > a:only-child,\n.ant-btn-danger[disabled]:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-danger[disabled] > a:only-child::after,\n.ant-btn-danger[disabled]:hover > a:only-child::after,\n.ant-btn-danger[disabled]:focus > a:only-child::after,\n.ant-btn-danger[disabled]:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-link {\n color: #5b5ce1;\n border-color: transparent;\n background: transparent;\n box-shadow: none;\n}\n.ant-btn-link > a:only-child {\n color: currentcolor;\n}\n.ant-btn-link > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-link:hover,\n.ant-btn-link:focus {\n color: #8588ed;\n border-color: #8588ed;\n background: transparent;\n}\n.ant-btn-link:hover > a:only-child,\n.ant-btn-link:focus > a:only-child {\n color: currentcolor;\n}\n.ant-btn-link:hover > a:only-child::after,\n.ant-btn-link:focus > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-link:active {\n color: #4541ba;\n border-color: #4541ba;\n background: transparent;\n}\n.ant-btn-link:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-link:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-link[disabled],\n.ant-btn-link[disabled]:hover,\n.ant-btn-link[disabled]:focus,\n.ant-btn-link[disabled]:active {\n color: rgba(0, 0, 0, 0.25);\n border-color: #d9d9d9;\n background: #f5f5f5;\n text-shadow: none;\n box-shadow: none;\n}\n.ant-btn-link[disabled] > a:only-child,\n.ant-btn-link[disabled]:hover > a:only-child,\n.ant-btn-link[disabled]:focus > a:only-child,\n.ant-btn-link[disabled]:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-link[disabled] > a:only-child::after,\n.ant-btn-link[disabled]:hover > a:only-child::after,\n.ant-btn-link[disabled]:focus > a:only-child::after,\n.ant-btn-link[disabled]:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-link:hover {\n background: transparent;\n}\n.ant-btn-link:hover,\n.ant-btn-link:focus,\n.ant-btn-link:active {\n border-color: transparent;\n}\n.ant-btn-link[disabled],\n.ant-btn-link[disabled]:hover,\n.ant-btn-link[disabled]:focus,\n.ant-btn-link[disabled]:active {\n color: rgba(0, 0, 0, 0.25);\n border-color: transparent;\n background: transparent;\n text-shadow: none;\n box-shadow: none;\n}\n.ant-btn-link[disabled] > a:only-child,\n.ant-btn-link[disabled]:hover > a:only-child,\n.ant-btn-link[disabled]:focus > a:only-child,\n.ant-btn-link[disabled]:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-link[disabled] > a:only-child::after,\n.ant-btn-link[disabled]:hover > a:only-child::after,\n.ant-btn-link[disabled]:focus > a:only-child::after,\n.ant-btn-link[disabled]:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-text {\n color: rgba(0, 0, 0, 0.85);\n border-color: transparent;\n background: transparent;\n box-shadow: none;\n}\n.ant-btn-text > a:only-child {\n color: currentcolor;\n}\n.ant-btn-text > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-text:hover,\n.ant-btn-text:focus {\n color: #8588ed;\n border-color: #8588ed;\n background: transparent;\n}\n.ant-btn-text:hover > a:only-child,\n.ant-btn-text:focus > a:only-child {\n color: currentcolor;\n}\n.ant-btn-text:hover > a:only-child::after,\n.ant-btn-text:focus > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-text:active {\n color: #4541ba;\n border-color: #4541ba;\n background: transparent;\n}\n.ant-btn-text:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-text:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-text[disabled],\n.ant-btn-text[disabled]:hover,\n.ant-btn-text[disabled]:focus,\n.ant-btn-text[disabled]:active {\n color: rgba(0, 0, 0, 0.25);\n border-color: #d9d9d9;\n background: #f5f5f5;\n text-shadow: none;\n box-shadow: none;\n}\n.ant-btn-text[disabled] > a:only-child,\n.ant-btn-text[disabled]:hover > a:only-child,\n.ant-btn-text[disabled]:focus > a:only-child,\n.ant-btn-text[disabled]:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-text[disabled] > a:only-child::after,\n.ant-btn-text[disabled]:hover > a:only-child::after,\n.ant-btn-text[disabled]:focus > a:only-child::after,\n.ant-btn-text[disabled]:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-text:hover,\n.ant-btn-text:focus {\n color: rgba(0, 0, 0, 0.85);\n background: rgba(0, 0, 0, 0.018);\n border-color: transparent;\n}\n.ant-btn-text:active {\n color: rgba(0, 0, 0, 0.85);\n background: rgba(0, 0, 0, 0.028);\n border-color: transparent;\n}\n.ant-btn-text[disabled],\n.ant-btn-text[disabled]:hover,\n.ant-btn-text[disabled]:focus,\n.ant-btn-text[disabled]:active {\n color: rgba(0, 0, 0, 0.25);\n border-color: transparent;\n background: transparent;\n text-shadow: none;\n box-shadow: none;\n}\n.ant-btn-text[disabled] > a:only-child,\n.ant-btn-text[disabled]:hover > a:only-child,\n.ant-btn-text[disabled]:focus > a:only-child,\n.ant-btn-text[disabled]:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-text[disabled] > a:only-child::after,\n.ant-btn-text[disabled]:hover > a:only-child::after,\n.ant-btn-text[disabled]:focus > a:only-child::after,\n.ant-btn-text[disabled]:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous {\n color: #ff4d4f;\n border-color: #ff4d4f;\n background: #fff;\n}\n.ant-btn-dangerous > a:only-child {\n color: currentcolor;\n}\n.ant-btn-dangerous > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous:hover,\n.ant-btn-dangerous:focus {\n color: #ff7875;\n border-color: #ff7875;\n background: #fff;\n}\n.ant-btn-dangerous:hover > a:only-child,\n.ant-btn-dangerous:focus > a:only-child {\n color: currentcolor;\n}\n.ant-btn-dangerous:hover > a:only-child::after,\n.ant-btn-dangerous:focus > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous:active {\n color: #d9363e;\n border-color: #d9363e;\n background: #fff;\n}\n.ant-btn-dangerous:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-dangerous:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous[disabled],\n.ant-btn-dangerous[disabled]:hover,\n.ant-btn-dangerous[disabled]:focus,\n.ant-btn-dangerous[disabled]:active {\n color: rgba(0, 0, 0, 0.25);\n border-color: #d9d9d9;\n background: #f5f5f5;\n text-shadow: none;\n box-shadow: none;\n}\n.ant-btn-dangerous[disabled] > a:only-child,\n.ant-btn-dangerous[disabled]:hover > a:only-child,\n.ant-btn-dangerous[disabled]:focus > a:only-child,\n.ant-btn-dangerous[disabled]:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-dangerous[disabled] > a:only-child::after,\n.ant-btn-dangerous[disabled]:hover > a:only-child::after,\n.ant-btn-dangerous[disabled]:focus > a:only-child::after,\n.ant-btn-dangerous[disabled]:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous.ant-btn-primary {\n color: #fff;\n border-color: #ff4d4f;\n background: #ff4d4f;\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.12);\n box-shadow: 0 2px 0 rgba(0, 0, 0, 0.045);\n}\n.ant-btn-dangerous.ant-btn-primary > a:only-child {\n color: currentcolor;\n}\n.ant-btn-dangerous.ant-btn-primary > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous.ant-btn-primary:hover,\n.ant-btn-dangerous.ant-btn-primary:focus {\n color: #fff;\n border-color: #ff7875;\n background: #ff7875;\n}\n.ant-btn-dangerous.ant-btn-primary:hover > a:only-child,\n.ant-btn-dangerous.ant-btn-primary:focus > a:only-child {\n color: currentcolor;\n}\n.ant-btn-dangerous.ant-btn-primary:hover > a:only-child::after,\n.ant-btn-dangerous.ant-btn-primary:focus > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous.ant-btn-primary:active {\n color: #fff;\n border-color: #d9363e;\n background: #d9363e;\n}\n.ant-btn-dangerous.ant-btn-primary:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-dangerous.ant-btn-primary:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous.ant-btn-primary[disabled],\n.ant-btn-dangerous.ant-btn-primary[disabled]:hover,\n.ant-btn-dangerous.ant-btn-primary[disabled]:focus,\n.ant-btn-dangerous.ant-btn-primary[disabled]:active {\n color: rgba(0, 0, 0, 0.25);\n border-color: #d9d9d9;\n background: #f5f5f5;\n text-shadow: none;\n box-shadow: none;\n}\n.ant-btn-dangerous.ant-btn-primary[disabled] > a:only-child,\n.ant-btn-dangerous.ant-btn-primary[disabled]:hover > a:only-child,\n.ant-btn-dangerous.ant-btn-primary[disabled]:focus > a:only-child,\n.ant-btn-dangerous.ant-btn-primary[disabled]:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-dangerous.ant-btn-primary[disabled] > a:only-child::after,\n.ant-btn-dangerous.ant-btn-primary[disabled]:hover > a:only-child::after,\n.ant-btn-dangerous.ant-btn-primary[disabled]:focus > a:only-child::after,\n.ant-btn-dangerous.ant-btn-primary[disabled]:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous.ant-btn-link {\n color: #ff4d4f;\n border-color: transparent;\n background: transparent;\n box-shadow: none;\n}\n.ant-btn-dangerous.ant-btn-link > a:only-child {\n color: currentcolor;\n}\n.ant-btn-dangerous.ant-btn-link > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous.ant-btn-link:hover,\n.ant-btn-dangerous.ant-btn-link:focus {\n color: #8588ed;\n border-color: #8588ed;\n background: transparent;\n}\n.ant-btn-dangerous.ant-btn-link:hover > a:only-child,\n.ant-btn-dangerous.ant-btn-link:focus > a:only-child {\n color: currentcolor;\n}\n.ant-btn-dangerous.ant-btn-link:hover > a:only-child::after,\n.ant-btn-dangerous.ant-btn-link:focus > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous.ant-btn-link:active {\n color: #4541ba;\n border-color: #4541ba;\n background: transparent;\n}\n.ant-btn-dangerous.ant-btn-link:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-dangerous.ant-btn-link:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous.ant-btn-link[disabled],\n.ant-btn-dangerous.ant-btn-link[disabled]:hover,\n.ant-btn-dangerous.ant-btn-link[disabled]:focus,\n.ant-btn-dangerous.ant-btn-link[disabled]:active {\n color: rgba(0, 0, 0, 0.25);\n border-color: #d9d9d9;\n background: #f5f5f5;\n text-shadow: none;\n box-shadow: none;\n}\n.ant-btn-dangerous.ant-btn-link[disabled] > a:only-child,\n.ant-btn-dangerous.ant-btn-link[disabled]:hover > a:only-child,\n.ant-btn-dangerous.ant-btn-link[disabled]:focus > a:only-child,\n.ant-btn-dangerous.ant-btn-link[disabled]:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-dangerous.ant-btn-link[disabled] > a:only-child::after,\n.ant-btn-dangerous.ant-btn-link[disabled]:hover > a:only-child::after,\n.ant-btn-dangerous.ant-btn-link[disabled]:focus > a:only-child::after,\n.ant-btn-dangerous.ant-btn-link[disabled]:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous.ant-btn-link:hover,\n.ant-btn-dangerous.ant-btn-link:focus {\n color: #ff7875;\n border-color: transparent;\n background: transparent;\n}\n.ant-btn-dangerous.ant-btn-link:hover > a:only-child,\n.ant-btn-dangerous.ant-btn-link:focus > a:only-child {\n color: currentcolor;\n}\n.ant-btn-dangerous.ant-btn-link:hover > a:only-child::after,\n.ant-btn-dangerous.ant-btn-link:focus > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous.ant-btn-link:active {\n color: #d9363e;\n border-color: transparent;\n background: transparent;\n}\n.ant-btn-dangerous.ant-btn-link:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-dangerous.ant-btn-link:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous.ant-btn-link[disabled],\n.ant-btn-dangerous.ant-btn-link[disabled]:hover,\n.ant-btn-dangerous.ant-btn-link[disabled]:focus,\n.ant-btn-dangerous.ant-btn-link[disabled]:active {\n color: rgba(0, 0, 0, 0.25);\n border-color: transparent;\n background: transparent;\n text-shadow: none;\n box-shadow: none;\n}\n.ant-btn-dangerous.ant-btn-link[disabled] > a:only-child,\n.ant-btn-dangerous.ant-btn-link[disabled]:hover > a:only-child,\n.ant-btn-dangerous.ant-btn-link[disabled]:focus > a:only-child,\n.ant-btn-dangerous.ant-btn-link[disabled]:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-dangerous.ant-btn-link[disabled] > a:only-child::after,\n.ant-btn-dangerous.ant-btn-link[disabled]:hover > a:only-child::after,\n.ant-btn-dangerous.ant-btn-link[disabled]:focus > a:only-child::after,\n.ant-btn-dangerous.ant-btn-link[disabled]:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous.ant-btn-text {\n color: #ff4d4f;\n border-color: transparent;\n background: transparent;\n box-shadow: none;\n}\n.ant-btn-dangerous.ant-btn-text > a:only-child {\n color: currentcolor;\n}\n.ant-btn-dangerous.ant-btn-text > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous.ant-btn-text:hover,\n.ant-btn-dangerous.ant-btn-text:focus {\n color: #8588ed;\n border-color: #8588ed;\n background: transparent;\n}\n.ant-btn-dangerous.ant-btn-text:hover > a:only-child,\n.ant-btn-dangerous.ant-btn-text:focus > a:only-child {\n color: currentcolor;\n}\n.ant-btn-dangerous.ant-btn-text:hover > a:only-child::after,\n.ant-btn-dangerous.ant-btn-text:focus > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous.ant-btn-text:active {\n color: #4541ba;\n border-color: #4541ba;\n background: transparent;\n}\n.ant-btn-dangerous.ant-btn-text:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-dangerous.ant-btn-text:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous.ant-btn-text[disabled],\n.ant-btn-dangerous.ant-btn-text[disabled]:hover,\n.ant-btn-dangerous.ant-btn-text[disabled]:focus,\n.ant-btn-dangerous.ant-btn-text[disabled]:active {\n color: rgba(0, 0, 0, 0.25);\n border-color: #d9d9d9;\n background: #f5f5f5;\n text-shadow: none;\n box-shadow: none;\n}\n.ant-btn-dangerous.ant-btn-text[disabled] > a:only-child,\n.ant-btn-dangerous.ant-btn-text[disabled]:hover > a:only-child,\n.ant-btn-dangerous.ant-btn-text[disabled]:focus > a:only-child,\n.ant-btn-dangerous.ant-btn-text[disabled]:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-dangerous.ant-btn-text[disabled] > a:only-child::after,\n.ant-btn-dangerous.ant-btn-text[disabled]:hover > a:only-child::after,\n.ant-btn-dangerous.ant-btn-text[disabled]:focus > a:only-child::after,\n.ant-btn-dangerous.ant-btn-text[disabled]:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous.ant-btn-text:hover,\n.ant-btn-dangerous.ant-btn-text:focus {\n color: #ff7875;\n border-color: transparent;\n background: rgba(0, 0, 0, 0.018);\n}\n.ant-btn-dangerous.ant-btn-text:hover > a:only-child,\n.ant-btn-dangerous.ant-btn-text:focus > a:only-child {\n color: currentcolor;\n}\n.ant-btn-dangerous.ant-btn-text:hover > a:only-child::after,\n.ant-btn-dangerous.ant-btn-text:focus > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous.ant-btn-text:active {\n color: #d9363e;\n border-color: transparent;\n background: rgba(0, 0, 0, 0.028);\n}\n.ant-btn-dangerous.ant-btn-text:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-dangerous.ant-btn-text:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-dangerous.ant-btn-text[disabled],\n.ant-btn-dangerous.ant-btn-text[disabled]:hover,\n.ant-btn-dangerous.ant-btn-text[disabled]:focus,\n.ant-btn-dangerous.ant-btn-text[disabled]:active {\n color: rgba(0, 0, 0, 0.25);\n border-color: transparent;\n background: transparent;\n text-shadow: none;\n box-shadow: none;\n}\n.ant-btn-dangerous.ant-btn-text[disabled] > a:only-child,\n.ant-btn-dangerous.ant-btn-text[disabled]:hover > a:only-child,\n.ant-btn-dangerous.ant-btn-text[disabled]:focus > a:only-child,\n.ant-btn-dangerous.ant-btn-text[disabled]:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-dangerous.ant-btn-text[disabled] > a:only-child::after,\n.ant-btn-dangerous.ant-btn-text[disabled]:hover > a:only-child::after,\n.ant-btn-dangerous.ant-btn-text[disabled]:focus > a:only-child::after,\n.ant-btn-dangerous.ant-btn-text[disabled]:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-icon-only {\n width: 32px;\n height: 32px;\n padding: 2.4px 0;\n font-size: 16px;\n border-radius: 5px;\n vertical-align: -3px;\n}\n.ant-btn-icon-only > * {\n font-size: 16px;\n}\n.ant-btn-icon-only.ant-btn-lg {\n width: 40px;\n height: 40px;\n padding: 4.9px 0;\n font-size: 18px;\n border-radius: 5px;\n}\n.ant-btn-icon-only.ant-btn-lg > * {\n font-size: 18px;\n}\n.ant-btn-icon-only.ant-btn-sm {\n width: 24px;\n height: 24px;\n padding: 0px 0;\n font-size: 14px;\n border-radius: 5px;\n}\n.ant-btn-icon-only.ant-btn-sm > * {\n font-size: 14px;\n}\n.ant-btn-icon-only > .anticon {\n display: flex;\n justify-content: center;\n}\n.ant-btn-icon-only .anticon-loading {\n padding: 0 !important;\n}\na.ant-btn-icon-only {\n vertical-align: -1px;\n}\na.ant-btn-icon-only > .anticon {\n display: inline;\n}\n.ant-btn-round {\n height: 32px;\n padding: 4px 16px;\n font-size: 14px;\n border-radius: 32px;\n}\n.ant-btn-round.ant-btn-lg {\n height: 40px;\n padding: 6.4px 20px;\n font-size: 16px;\n border-radius: 40px;\n}\n.ant-btn-round.ant-btn-sm {\n height: 24px;\n padding: 0px 12px;\n font-size: 14px;\n border-radius: 24px;\n}\n.ant-btn-round.ant-btn-icon-only {\n width: auto;\n}\n.ant-btn-circle {\n min-width: 32px;\n padding-right: 0;\n padding-left: 0;\n text-align: center;\n border-radius: 50%;\n}\n.ant-btn-circle.ant-btn-lg {\n min-width: 40px;\n border-radius: 50%;\n}\n.ant-btn-circle.ant-btn-sm {\n min-width: 24px;\n border-radius: 50%;\n}\n.ant-btn::before {\n position: absolute;\n top: -1px;\n right: -1px;\n bottom: -1px;\n left: -1px;\n z-index: 1;\n display: none;\n background: #fff;\n border-radius: inherit;\n opacity: 0.35;\n transition: opacity 0.2s;\n content: '';\n pointer-events: none;\n}\n.ant-btn .anticon {\n transition: margin-left 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\n}\n.ant-btn .anticon.anticon-plus > svg,\n.ant-btn .anticon.anticon-minus > svg {\n shape-rendering: optimizespeed;\n}\n.ant-btn.ant-btn-loading {\n position: relative;\n cursor: default;\n}\n.ant-btn.ant-btn-loading::before {\n display: block;\n}\n.ant-btn > .ant-btn-loading-icon {\n transition: width 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), opacity 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\n}\n.ant-btn > .ant-btn-loading-icon .anticon {\n padding-right: 8px;\n animation: none;\n}\n.ant-btn > .ant-btn-loading-icon .anticon svg {\n animation: loadingCircle 1s infinite linear;\n}\n.ant-btn-group {\n position: relative;\n display: inline-flex;\n}\n.ant-btn-group > .ant-btn,\n.ant-btn-group > span > .ant-btn {\n position: relative;\n}\n.ant-btn-group > .ant-btn:hover,\n.ant-btn-group > span > .ant-btn:hover,\n.ant-btn-group > .ant-btn:focus,\n.ant-btn-group > span > .ant-btn:focus,\n.ant-btn-group > .ant-btn:active,\n.ant-btn-group > span > .ant-btn:active {\n z-index: 2;\n}\n.ant-btn-group > .ant-btn[disabled],\n.ant-btn-group > span > .ant-btn[disabled] {\n z-index: 0;\n}\n.ant-btn-group .ant-btn-icon-only {\n font-size: 14px;\n}\n.ant-btn-group .ant-btn + .ant-btn,\n.ant-btn + .ant-btn-group,\n.ant-btn-group span + .ant-btn,\n.ant-btn-group .ant-btn + span,\n.ant-btn-group > span + span,\n.ant-btn-group + .ant-btn,\n.ant-btn-group + .ant-btn-group {\n margin-left: -1px;\n}\n.ant-btn-group .ant-btn-primary + .ant-btn:not(.ant-btn-primary):not([disabled]) {\n border-left-color: transparent;\n}\n.ant-btn-group .ant-btn {\n border-radius: 0;\n}\n.ant-btn-group > .ant-btn:first-child,\n.ant-btn-group > span:first-child > .ant-btn {\n margin-left: 0;\n}\n.ant-btn-group > .ant-btn:only-child {\n border-radius: 5px;\n}\n.ant-btn-group > span:only-child > .ant-btn {\n border-radius: 5px;\n}\n.ant-btn-group > .ant-btn:first-child:not(:last-child),\n.ant-btn-group > span:first-child:not(:last-child) > .ant-btn {\n border-top-left-radius: 5px;\n border-bottom-left-radius: 5px;\n}\n.ant-btn-group > .ant-btn:last-child:not(:first-child),\n.ant-btn-group > span:last-child:not(:first-child) > .ant-btn {\n border-top-right-radius: 5px;\n border-bottom-right-radius: 5px;\n}\n.ant-btn-group-sm > .ant-btn:only-child {\n border-radius: 5px;\n}\n.ant-btn-group-sm > span:only-child > .ant-btn {\n border-radius: 5px;\n}\n.ant-btn-group-sm > .ant-btn:first-child:not(:last-child),\n.ant-btn-group-sm > span:first-child:not(:last-child) > .ant-btn {\n border-top-left-radius: 5px;\n border-bottom-left-radius: 5px;\n}\n.ant-btn-group-sm > .ant-btn:last-child:not(:first-child),\n.ant-btn-group-sm > span:last-child:not(:first-child) > .ant-btn {\n border-top-right-radius: 5px;\n border-bottom-right-radius: 5px;\n}\n.ant-btn-group > .ant-btn-group {\n float: left;\n}\n.ant-btn-group > .ant-btn-group:not(:first-child):not(:last-child) > .ant-btn {\n border-radius: 0;\n}\n.ant-btn-group > .ant-btn-group:first-child:not(:last-child) > .ant-btn:last-child {\n padding-right: 8px;\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.ant-btn-group > .ant-btn-group:last-child:not(:first-child) > .ant-btn:first-child {\n padding-left: 8px;\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.ant-btn-rtl.ant-btn-group .ant-btn + .ant-btn,\n.ant-btn-rtl.ant-btn + .ant-btn-group,\n.ant-btn-rtl.ant-btn-group span + .ant-btn,\n.ant-btn-rtl.ant-btn-group .ant-btn + span,\n.ant-btn-rtl.ant-btn-group > span + span,\n.ant-btn-rtl.ant-btn-group + .ant-btn,\n.ant-btn-rtl.ant-btn-group + .ant-btn-group,\n.ant-btn-group-rtl.ant-btn-group .ant-btn + .ant-btn,\n.ant-btn-group-rtl.ant-btn + .ant-btn-group,\n.ant-btn-group-rtl.ant-btn-group span + .ant-btn,\n.ant-btn-group-rtl.ant-btn-group .ant-btn + span,\n.ant-btn-group-rtl.ant-btn-group > span + span,\n.ant-btn-group-rtl.ant-btn-group + .ant-btn,\n.ant-btn-group-rtl.ant-btn-group + .ant-btn-group {\n margin-right: -1px;\n margin-left: auto;\n}\n.ant-btn-group.ant-btn-group-rtl {\n direction: rtl;\n}\n.ant-btn-group-rtl.ant-btn-group > .ant-btn:first-child:not(:last-child),\n.ant-btn-group-rtl.ant-btn-group > span:first-child:not(:last-child) > .ant-btn {\n border-radius: 0 5px 5px 0;\n}\n.ant-btn-group-rtl.ant-btn-group > .ant-btn:last-child:not(:first-child),\n.ant-btn-group-rtl.ant-btn-group > span:last-child:not(:first-child) > .ant-btn {\n border-radius: 5px 0 0 5px;\n}\n.ant-btn-group-rtl.ant-btn-group-sm > .ant-btn:first-child:not(:last-child),\n.ant-btn-group-rtl.ant-btn-group-sm > span:first-child:not(:last-child) > .ant-btn {\n border-radius: 0 5px 5px 0;\n}\n.ant-btn-group-rtl.ant-btn-group-sm > .ant-btn:last-child:not(:first-child),\n.ant-btn-group-rtl.ant-btn-group-sm > span:last-child:not(:first-child) > .ant-btn {\n border-radius: 5px 0 0 5px;\n}\n.ant-btn:focus > span,\n.ant-btn:active > span {\n position: relative;\n}\n.ant-btn > .anticon + span,\n.ant-btn > span + .anticon {\n margin-left: 8px;\n}\n.ant-btn.ant-btn-background-ghost {\n color: #fff;\n border-color: #fff;\n}\n.ant-btn.ant-btn-background-ghost,\n.ant-btn.ant-btn-background-ghost:hover,\n.ant-btn.ant-btn-background-ghost:active,\n.ant-btn.ant-btn-background-ghost:focus {\n background: transparent;\n}\n.ant-btn.ant-btn-background-ghost:hover,\n.ant-btn.ant-btn-background-ghost:focus {\n color: #8588ed;\n border-color: #8588ed;\n}\n.ant-btn.ant-btn-background-ghost:active {\n color: #4541ba;\n border-color: #4541ba;\n}\n.ant-btn.ant-btn-background-ghost[disabled] {\n color: rgba(0, 0, 0, 0.25);\n background: transparent;\n border-color: #d9d9d9;\n}\n.ant-btn-background-ghost.ant-btn-primary {\n color: #5b5ce1;\n border-color: #5b5ce1;\n text-shadow: none;\n}\n.ant-btn-background-ghost.ant-btn-primary > a:only-child {\n color: currentcolor;\n}\n.ant-btn-background-ghost.ant-btn-primary > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-background-ghost.ant-btn-primary:hover,\n.ant-btn-background-ghost.ant-btn-primary:focus {\n color: #8588ed;\n border-color: #8588ed;\n}\n.ant-btn-background-ghost.ant-btn-primary:hover > a:only-child,\n.ant-btn-background-ghost.ant-btn-primary:focus > a:only-child {\n color: currentcolor;\n}\n.ant-btn-background-ghost.ant-btn-primary:hover > a:only-child::after,\n.ant-btn-background-ghost.ant-btn-primary:focus > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-background-ghost.ant-btn-primary:active {\n color: #4541ba;\n border-color: #4541ba;\n}\n.ant-btn-background-ghost.ant-btn-primary:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-background-ghost.ant-btn-primary:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-background-ghost.ant-btn-primary[disabled],\n.ant-btn-background-ghost.ant-btn-primary[disabled]:hover,\n.ant-btn-background-ghost.ant-btn-primary[disabled]:focus,\n.ant-btn-background-ghost.ant-btn-primary[disabled]:active {\n color: rgba(0, 0, 0, 0.25);\n border-color: #d9d9d9;\n background: #f5f5f5;\n text-shadow: none;\n box-shadow: none;\n}\n.ant-btn-background-ghost.ant-btn-primary[disabled] > a:only-child,\n.ant-btn-background-ghost.ant-btn-primary[disabled]:hover > a:only-child,\n.ant-btn-background-ghost.ant-btn-primary[disabled]:focus > a:only-child,\n.ant-btn-background-ghost.ant-btn-primary[disabled]:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-background-ghost.ant-btn-primary[disabled] > a:only-child::after,\n.ant-btn-background-ghost.ant-btn-primary[disabled]:hover > a:only-child::after,\n.ant-btn-background-ghost.ant-btn-primary[disabled]:focus > a:only-child::after,\n.ant-btn-background-ghost.ant-btn-primary[disabled]:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-background-ghost.ant-btn-danger {\n color: #ff4d4f;\n border-color: #ff4d4f;\n text-shadow: none;\n}\n.ant-btn-background-ghost.ant-btn-danger > a:only-child {\n color: currentcolor;\n}\n.ant-btn-background-ghost.ant-btn-danger > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-background-ghost.ant-btn-danger:hover,\n.ant-btn-background-ghost.ant-btn-danger:focus {\n color: #ff7875;\n border-color: #ff7875;\n}\n.ant-btn-background-ghost.ant-btn-danger:hover > a:only-child,\n.ant-btn-background-ghost.ant-btn-danger:focus > a:only-child {\n color: currentcolor;\n}\n.ant-btn-background-ghost.ant-btn-danger:hover > a:only-child::after,\n.ant-btn-background-ghost.ant-btn-danger:focus > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-background-ghost.ant-btn-danger:active {\n color: #d9363e;\n border-color: #d9363e;\n}\n.ant-btn-background-ghost.ant-btn-danger:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-background-ghost.ant-btn-danger:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-background-ghost.ant-btn-danger[disabled],\n.ant-btn-background-ghost.ant-btn-danger[disabled]:hover,\n.ant-btn-background-ghost.ant-btn-danger[disabled]:focus,\n.ant-btn-background-ghost.ant-btn-danger[disabled]:active {\n color: rgba(0, 0, 0, 0.25);\n border-color: #d9d9d9;\n background: #f5f5f5;\n text-shadow: none;\n box-shadow: none;\n}\n.ant-btn-background-ghost.ant-btn-danger[disabled] > a:only-child,\n.ant-btn-background-ghost.ant-btn-danger[disabled]:hover > a:only-child,\n.ant-btn-background-ghost.ant-btn-danger[disabled]:focus > a:only-child,\n.ant-btn-background-ghost.ant-btn-danger[disabled]:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-background-ghost.ant-btn-danger[disabled] > a:only-child::after,\n.ant-btn-background-ghost.ant-btn-danger[disabled]:hover > a:only-child::after,\n.ant-btn-background-ghost.ant-btn-danger[disabled]:focus > a:only-child::after,\n.ant-btn-background-ghost.ant-btn-danger[disabled]:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-background-ghost.ant-btn-dangerous {\n color: #ff4d4f;\n border-color: #ff4d4f;\n text-shadow: none;\n}\n.ant-btn-background-ghost.ant-btn-dangerous > a:only-child {\n color: currentcolor;\n}\n.ant-btn-background-ghost.ant-btn-dangerous > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-background-ghost.ant-btn-dangerous:hover,\n.ant-btn-background-ghost.ant-btn-dangerous:focus {\n color: #ff7875;\n border-color: #ff7875;\n}\n.ant-btn-background-ghost.ant-btn-dangerous:hover > a:only-child,\n.ant-btn-background-ghost.ant-btn-dangerous:focus > a:only-child {\n color: currentcolor;\n}\n.ant-btn-background-ghost.ant-btn-dangerous:hover > a:only-child::after,\n.ant-btn-background-ghost.ant-btn-dangerous:focus > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-background-ghost.ant-btn-dangerous:active {\n color: #d9363e;\n border-color: #d9363e;\n}\n.ant-btn-background-ghost.ant-btn-dangerous:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-background-ghost.ant-btn-dangerous:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-background-ghost.ant-btn-dangerous[disabled],\n.ant-btn-background-ghost.ant-btn-dangerous[disabled]:hover,\n.ant-btn-background-ghost.ant-btn-dangerous[disabled]:focus,\n.ant-btn-background-ghost.ant-btn-dangerous[disabled]:active {\n color: rgba(0, 0, 0, 0.25);\n border-color: #d9d9d9;\n background: #f5f5f5;\n text-shadow: none;\n box-shadow: none;\n}\n.ant-btn-background-ghost.ant-btn-dangerous[disabled] > a:only-child,\n.ant-btn-background-ghost.ant-btn-dangerous[disabled]:hover > a:only-child,\n.ant-btn-background-ghost.ant-btn-dangerous[disabled]:focus > a:only-child,\n.ant-btn-background-ghost.ant-btn-dangerous[disabled]:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-background-ghost.ant-btn-dangerous[disabled] > a:only-child::after,\n.ant-btn-background-ghost.ant-btn-dangerous[disabled]:hover > a:only-child::after,\n.ant-btn-background-ghost.ant-btn-dangerous[disabled]:focus > a:only-child::after,\n.ant-btn-background-ghost.ant-btn-dangerous[disabled]:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link {\n color: #ff4d4f;\n border-color: transparent;\n text-shadow: none;\n}\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link > a:only-child {\n color: currentcolor;\n}\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:hover,\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:focus {\n color: #ff7875;\n border-color: transparent;\n}\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:hover > a:only-child,\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:focus > a:only-child {\n color: currentcolor;\n}\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:hover > a:only-child::after,\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:focus > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:active {\n color: #d9363e;\n border-color: transparent;\n}\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled],\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:hover,\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:focus,\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:active {\n color: rgba(0, 0, 0, 0.25);\n border-color: #d9d9d9;\n background: #f5f5f5;\n text-shadow: none;\n box-shadow: none;\n}\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled] > a:only-child,\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:hover > a:only-child,\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:focus > a:only-child,\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:active > a:only-child {\n color: currentcolor;\n}\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled] > a:only-child::after,\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:hover > a:only-child::after,\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:focus > a:only-child::after,\n.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\n.ant-btn-two-chinese-chars::first-letter {\n letter-spacing: 0.34em;\n}\n.ant-btn-two-chinese-chars > *:not(.anticon) {\n margin-right: -0.34em;\n letter-spacing: 0.34em;\n}\n.ant-btn.ant-btn-block {\n width: 100%;\n}\n.ant-btn:empty {\n display: inline-block;\n width: 0;\n visibility: hidden;\n content: '\\a0';\n}\na.ant-btn {\n padding-top: 0.01px !important;\n line-height: 30px;\n}\na.ant-btn-disabled {\n cursor: not-allowed;\n}\na.ant-btn-disabled > * {\n pointer-events: none;\n}\na.ant-btn-disabled,\na.ant-btn-disabled:hover,\na.ant-btn-disabled:focus,\na.ant-btn-disabled:active {\n color: rgba(0, 0, 0, 0.25);\n border-color: transparent;\n background: transparent;\n text-shadow: none;\n box-shadow: none;\n}\na.ant-btn-disabled > a:only-child,\na.ant-btn-disabled:hover > a:only-child,\na.ant-btn-disabled:focus > a:only-child,\na.ant-btn-disabled:active > a:only-child {\n color: currentcolor;\n}\na.ant-btn-disabled > a:only-child::after,\na.ant-btn-disabled:hover > a:only-child::after,\na.ant-btn-disabled:focus > a:only-child::after,\na.ant-btn-disabled:active > a:only-child::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n}\na.ant-btn-lg {\n line-height: 38px;\n}\na.ant-btn-sm {\n line-height: 22px;\n}\n.ant-btn-compact-item:not(.ant-btn-compact-last-item):not(.ant-btn-compact-item-rtl) {\n margin-right: -1px;\n}\n.ant-btn-compact-item:not(.ant-btn-compact-last-item).ant-btn-compact-item-rtl {\n margin-left: -1px;\n}\n.ant-btn-compact-item:hover,\n.ant-btn-compact-item:focus,\n.ant-btn-compact-item:active {\n z-index: 2;\n}\n.ant-btn-compact-item[disabled] {\n z-index: 0;\n}\n.ant-btn-compact-item:not(.ant-btn-compact-first-item):not(.ant-btn-compact-last-item).ant-btn {\n border-radius: 0;\n}\n.ant-btn-compact-item.ant-btn.ant-btn-compact-first-item:not(.ant-btn-compact-item-rtl) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.ant-btn-compact-item.ant-btn.ant-btn-compact-last-item:not(.ant-btn-compact-item-rtl) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.ant-btn-compact-item.ant-btn.ant-btn-compact-item-rtl.ant-btn-compact-first-item {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.ant-btn-compact-item.ant-btn.ant-btn-compact-item-rtl.ant-btn-compact-last-item {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.ant-btn-icon-only.ant-btn-compact-item {\n flex: none;\n}\n.ant-btn-compact-item.ant-btn-primary:not([disabled]) + .ant-btn-compact-item.ant-btn-primary:not([disabled]) {\n position: relative;\n}\n.ant-btn-compact-item.ant-btn-primary:not([disabled]) + .ant-btn-compact-item.ant-btn-primary:not([disabled])::after {\n position: absolute;\n top: -1px;\n left: -1px;\n display: inline-block;\n width: 1px;\n height: calc(100% + 1px * 2);\n background-color: #8588ed;\n content: ' ';\n}\n.ant-btn-compact-item-rtl.ant-btn-compact-first-item.ant-btn-compact-item-rtl:not(.ant-btn-compact-last-item) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.ant-btn-compact-item-rtl.ant-btn-compact-last-item.ant-btn-compact-item-rtl:not(.ant-btn-compact-first-item) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.ant-btn-compact-item-rtl.ant-btn-sm.ant-btn-compact-first-item.ant-btn-compact-item-rtl.ant-btn-sm:not(.ant-btn-compact-last-item) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.ant-btn-compact-item-rtl.ant-btn-sm.ant-btn-compact-last-item.ant-btn-compact-item-rtl.ant-btn-sm:not(.ant-btn-compact-first-item) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.ant-btn-compact-item-rtl.ant-btn-primary:not([disabled]) + .ant-btn-compact-item-rtl.ant-btn-primary:not([disabled])::after {\n right: -1px;\n}\n.ant-btn-compact-vertical-item:not(.ant-btn-compact-vertical-last-item) {\n margin-bottom: -1px;\n}\n.ant-btn-compact-vertical-item:hover,\n.ant-btn-compact-vertical-item:focus,\n.ant-btn-compact-vertical-item:active {\n z-index: 2;\n}\n.ant-btn-compact-vertical-item[disabled] {\n z-index: 0;\n}\n.ant-btn-compact-vertical-item:not(.ant-btn-compact-vertical-first-item):not(.ant-btn-compact-vertical-last-item) {\n border-radius: 0;\n}\n.ant-btn-compact-vertical-item.ant-btn-compact-vertical-first-item {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.ant-btn-compact-vertical-item.ant-btn-compact-vertical-last-item {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n.ant-btn-compact-vertical-item.ant-btn-primary:not([disabled]) + .ant-btn-compact-vertical-item.ant-btn-primary:not([disabled]) {\n position: relative;\n}\n.ant-btn-compact-vertical-item.ant-btn-primary:not([disabled]) + .ant-btn-compact-vertical-item.ant-btn-primary:not([disabled])::after {\n position: absolute;\n top: -1px;\n left: -1px;\n display: inline-block;\n width: calc(100% + 1px * 2);\n height: 1px;\n background-color: #8588ed;\n content: ' ';\n}\n.ant-btn-rtl {\n direction: rtl;\n}\n.ant-btn-group-rtl.ant-btn-group .ant-btn-primary:last-child:not(:first-child),\n.ant-btn-group-rtl.ant-btn-group .ant-btn-primary + .ant-btn-primary {\n border-right-color: #8588ed;\n border-left-color: #d9d9d9;\n}\n.ant-btn-group-rtl.ant-btn-group .ant-btn-primary:last-child:not(:first-child)[disabled],\n.ant-btn-group-rtl.ant-btn-group .ant-btn-primary + .ant-btn-primary[disabled] {\n border-right-color: #d9d9d9;\n border-left-color: #8588ed;\n}\n.ant-btn-rtl.ant-btn > .ant-btn-loading-icon .anticon {\n padding-right: 0;\n padding-left: 8px;\n}\n.ant-btn-rtl.ant-btn > .anticon + span,\n.ant-btn-rtl.ant-btn > span + .anticon {\n margin-right: 8px;\n margin-left: 0;\n}\n.ant-picker-calendar {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n background: #fff;\n}\n.ant-picker-calendar-header {\n display: flex;\n justify-content: flex-end;\n padding: 12px 0;\n}\n.ant-picker-calendar-header .ant-picker-calendar-year-select {\n min-width: 80px;\n}\n.ant-picker-calendar-header .ant-picker-calendar-month-select {\n min-width: 70px;\n margin-left: 8px;\n}\n.ant-picker-calendar-header .ant-picker-calendar-mode-switch {\n margin-left: 8px;\n}\n.ant-picker-calendar .ant-picker-panel {\n background: #fff;\n border: 0;\n border-top: 1px solid #f0f0f0;\n border-radius: 0;\n}\n.ant-picker-calendar .ant-picker-panel .ant-picker-month-panel,\n.ant-picker-calendar .ant-picker-panel .ant-picker-date-panel {\n width: auto;\n}\n.ant-picker-calendar .ant-picker-panel .ant-picker-body {\n padding: 8px 0;\n}\n.ant-picker-calendar .ant-picker-panel .ant-picker-content {\n width: 100%;\n}\n.ant-picker-calendar-mini {\n border-radius: 5px;\n}\n.ant-picker-calendar-mini .ant-picker-calendar-header {\n padding-right: 8px;\n padding-left: 8px;\n}\n.ant-picker-calendar-mini .ant-picker-panel {\n border-radius: 0 0 5px 5px;\n}\n.ant-picker-calendar-mini .ant-picker-content {\n height: 256px;\n}\n.ant-picker-calendar-mini .ant-picker-content th {\n height: auto;\n padding: 0;\n line-height: 18px;\n}\n.ant-picker-calendar-mini .ant-picker-cell::before {\n pointer-events: none;\n}\n.ant-picker-calendar-full .ant-picker-panel {\n display: block;\n width: 100%;\n text-align: right;\n background: #fff;\n border: 0;\n}\n.ant-picker-calendar-full .ant-picker-panel .ant-picker-body th,\n.ant-picker-calendar-full .ant-picker-panel .ant-picker-body td {\n padding: 0;\n}\n.ant-picker-calendar-full .ant-picker-panel .ant-picker-body th {\n height: auto;\n padding: 0 12px 5px 0;\n line-height: 18px;\n}\n.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell::before {\n display: none;\n}\n.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell:hover .ant-picker-calendar-date {\n background: #f5f5f5;\n}\n.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell .ant-picker-calendar-date-today::before {\n display: none;\n}\n.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected .ant-picker-calendar-date,\n.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected:hover .ant-picker-calendar-date,\n.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected .ant-picker-calendar-date-today,\n.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected:hover .ant-picker-calendar-date-today {\n background: #f0f2ff;\n}\n.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected .ant-picker-calendar-date .ant-picker-calendar-date-value,\n.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected:hover .ant-picker-calendar-date .ant-picker-calendar-date-value,\n.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected .ant-picker-calendar-date-today .ant-picker-calendar-date-value,\n.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected:hover .ant-picker-calendar-date-today .ant-picker-calendar-date-value {\n color: #5b5ce1;\n}\n.ant-picker-calendar-full .ant-picker-panel .ant-picker-calendar-date {\n display: block;\n width: auto;\n height: auto;\n margin: 0 4px;\n padding: 4px 8px 0;\n border: 0;\n border-top: 2px solid #f0f0f0;\n border-radius: 0;\n transition: background 0.3s;\n}\n.ant-picker-calendar-full .ant-picker-panel .ant-picker-calendar-date-value {\n line-height: 24px;\n transition: color 0.3s;\n}\n.ant-picker-calendar-full .ant-picker-panel .ant-picker-calendar-date-content {\n position: static;\n width: auto;\n height: 86px;\n overflow-y: auto;\n color: rgba(0, 0, 0, 0.85);\n line-height: 1.5715;\n text-align: left;\n}\n.ant-picker-calendar-full .ant-picker-panel .ant-picker-calendar-date-today {\n border-color: #5b5ce1;\n}\n.ant-picker-calendar-full .ant-picker-panel .ant-picker-calendar-date-today .ant-picker-calendar-date-value {\n color: rgba(0, 0, 0, 0.85);\n}\n@media only screen and (max-width: 480px) {\n .ant-picker-calendar-header {\n display: block;\n }\n .ant-picker-calendar-header .ant-picker-calendar-year-select {\n width: 50%;\n }\n .ant-picker-calendar-header .ant-picker-calendar-month-select {\n width: calc(50% - 8px);\n }\n .ant-picker-calendar-header .ant-picker-calendar-mode-switch {\n width: 100%;\n margin-top: 8px;\n margin-left: 0;\n }\n .ant-picker-calendar-header .ant-picker-calendar-mode-switch > label {\n width: 50%;\n text-align: center;\n }\n}\n.ant-picker-calendar-rtl {\n direction: rtl;\n}\n.ant-picker-calendar-rtl .ant-picker-calendar-header .ant-picker-calendar-month-select {\n margin-right: 8px;\n margin-left: 0;\n}\n.ant-picker-calendar-rtl .ant-picker-calendar-header .ant-picker-calendar-mode-switch {\n margin-right: 8px;\n margin-left: 0;\n}\n.ant-picker-calendar-rtl.ant-picker-calendar-full .ant-picker-panel {\n text-align: left;\n}\n.ant-picker-calendar-rtl.ant-picker-calendar-full .ant-picker-panel .ant-picker-body th {\n padding: 0 0 5px 12px;\n}\n.ant-picker-calendar-rtl.ant-picker-calendar-full .ant-picker-panel .ant-picker-calendar-date-content {\n text-align: right;\n}\n.ant-card {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n background: #fff;\n border-radius: 5px;\n}\n.ant-card-rtl {\n direction: rtl;\n}\n.ant-card-hoverable {\n cursor: pointer;\n transition: box-shadow 0.3s, border-color 0.3s;\n}\n.ant-card-hoverable:hover {\n border-color: transparent;\n box-shadow: 0 1px 2px -2px rgba(0, 0, 0, 0.16), 0 3px 6px 0 rgba(0, 0, 0, 0.12), 0 5px 12px 4px rgba(0, 0, 0, 0.09);\n}\n.ant-card-bordered {\n border: 1px solid #f0f0f0;\n}\n.ant-card-head {\n min-height: 48px;\n margin-bottom: -1px;\n padding: 0 24px;\n color: rgba(0, 0, 0, 0.85);\n font-weight: 500;\n font-size: 16px;\n background: transparent;\n border-bottom: 1px solid #f0f0f0;\n border-radius: 5px 5px 0 0;\n}\n.ant-card-head::before {\n display: table;\n content: '';\n}\n.ant-card-head::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-card-head::before {\n display: table;\n content: '';\n}\n.ant-card-head::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-card-head-wrapper {\n display: flex;\n align-items: center;\n}\n.ant-card-head-title {\n display: inline-block;\n flex: 1;\n padding: 16px 0;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.ant-card-head-title > .ant-typography,\n.ant-card-head-title > .ant-typography-edit-content {\n left: 0;\n margin-top: 0;\n margin-bottom: 0;\n}\n.ant-card-head .ant-tabs-top {\n clear: both;\n margin-bottom: -17px;\n color: rgba(0, 0, 0, 0.85);\n font-weight: normal;\n font-size: 14px;\n}\n.ant-card-head .ant-tabs-top-bar {\n border-bottom: 1px solid #f0f0f0;\n}\n.ant-card-extra {\n margin-left: auto;\n padding: 16px 0;\n color: rgba(0, 0, 0, 0.85);\n font-weight: normal;\n font-size: 14px;\n}\n.ant-card-rtl .ant-card-extra {\n margin-right: auto;\n margin-left: 0;\n}\n.ant-card-body {\n padding: 24px;\n}\n.ant-card-body::before {\n display: table;\n content: '';\n}\n.ant-card-body::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-card-body::before {\n display: table;\n content: '';\n}\n.ant-card-body::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-card-contain-grid .ant-card-body {\n display: flex;\n flex-wrap: wrap;\n}\n.ant-card-contain-grid:not(.ant-card-loading) .ant-card-body {\n margin: -1px 0 0 -1px;\n padding: 0;\n}\n.ant-card-grid {\n width: 33.33%;\n padding: 24px;\n border: 0;\n border-radius: 0;\n box-shadow: 1px 0 0 0 #f0f0f0, 0 1px 0 0 #f0f0f0, 1px 1px 0 0 #f0f0f0, 1px 0 0 0 #f0f0f0 inset, 0 1px 0 0 #f0f0f0 inset;\n transition: all 0.3s;\n}\n.ant-card-grid-hoverable:hover {\n position: relative;\n z-index: 1;\n box-shadow: 0 1px 2px -2px rgba(0, 0, 0, 0.16), 0 3px 6px 0 rgba(0, 0, 0, 0.12), 0 5px 12px 4px rgba(0, 0, 0, 0.09);\n}\n.ant-card-contain-tabs > .ant-card-head .ant-card-head-title {\n min-height: 32px;\n padding-bottom: 0;\n}\n.ant-card-contain-tabs > .ant-card-head .ant-card-extra {\n padding-bottom: 0;\n}\n.ant-card-bordered .ant-card-cover {\n margin-top: -1px;\n margin-right: -1px;\n margin-left: -1px;\n}\n.ant-card-cover > * {\n display: block;\n width: 100%;\n}\n.ant-card-cover img {\n border-radius: 5px 5px 0 0;\n}\n.ant-card-actions {\n display: flex;\n margin: 0;\n padding: 0;\n list-style: none;\n background: #fff;\n border-top: 1px solid #f0f0f0;\n}\n.ant-card-actions::before {\n display: table;\n content: '';\n}\n.ant-card-actions::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-card-actions::before {\n display: table;\n content: '';\n}\n.ant-card-actions::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-card-actions > li {\n margin: 12px 0;\n color: rgba(0, 0, 0, 0.45);\n text-align: center;\n}\n.ant-card-actions > li > span {\n position: relative;\n display: block;\n min-width: 32px;\n font-size: 14px;\n line-height: 1.5715;\n cursor: pointer;\n}\n.ant-card-actions > li > span:hover {\n color: #5b5ce1;\n transition: color 0.3s;\n}\n.ant-card-actions > li > span a:not(.ant-btn),\n.ant-card-actions > li > span > .anticon {\n display: inline-block;\n width: 100%;\n color: rgba(0, 0, 0, 0.45);\n line-height: 22px;\n transition: color 0.3s;\n}\n.ant-card-actions > li > span a:not(.ant-btn):hover,\n.ant-card-actions > li > span > .anticon:hover {\n color: #5b5ce1;\n}\n.ant-card-actions > li > span > .anticon {\n font-size: 16px;\n line-height: 22px;\n}\n.ant-card-actions > li:not(:last-child) {\n border-right: 1px solid #f0f0f0;\n}\n.ant-card-rtl .ant-card-actions > li:not(:last-child) {\n border-right: none;\n border-left: 1px solid #f0f0f0;\n}\n.ant-card-type-inner .ant-card-head {\n padding: 0 24px;\n background: #fafafa;\n}\n.ant-card-type-inner .ant-card-head-title {\n padding: 12px 0;\n font-size: 14px;\n}\n.ant-card-type-inner .ant-card-body {\n padding: 16px 24px;\n}\n.ant-card-type-inner .ant-card-extra {\n padding: 13.5px 0;\n}\n.ant-card-meta {\n display: flex;\n margin: -4px 0;\n}\n.ant-card-meta::before {\n display: table;\n content: '';\n}\n.ant-card-meta::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-card-meta::before {\n display: table;\n content: '';\n}\n.ant-card-meta::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-card-meta-avatar {\n padding-right: 16px;\n}\n.ant-card-rtl .ant-card-meta-avatar {\n padding-right: 0;\n padding-left: 16px;\n}\n.ant-card-meta-detail {\n overflow: hidden;\n}\n.ant-card-meta-detail > div:not(:last-child) {\n margin-bottom: 8px;\n}\n.ant-card-meta-title {\n overflow: hidden;\n color: rgba(0, 0, 0, 0.85);\n font-weight: 500;\n font-size: 16px;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.ant-card-meta-description {\n color: rgba(0, 0, 0, 0.45);\n}\n.ant-card-loading {\n overflow: hidden;\n}\n.ant-card-loading .ant-card-body {\n user-select: none;\n}\n.ant-card-small > .ant-card-head {\n min-height: 36px;\n padding: 0 12px;\n font-size: 14px;\n}\n.ant-card-small > .ant-card-head > .ant-card-head-wrapper > .ant-card-head-title {\n padding: 8px 0;\n}\n.ant-card-small > .ant-card-head > .ant-card-head-wrapper > .ant-card-extra {\n padding: 8px 0;\n font-size: 14px;\n}\n.ant-card-small > .ant-card-body {\n padding: 12px;\n}\n.ant-carousel {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n}\n.ant-carousel .slick-slider {\n position: relative;\n display: block;\n box-sizing: border-box;\n touch-action: pan-y;\n -webkit-touch-callout: none;\n -webkit-tap-highlight-color: transparent;\n}\n.ant-carousel .slick-list {\n position: relative;\n display: block;\n margin: 0;\n padding: 0;\n overflow: hidden;\n}\n.ant-carousel .slick-list:focus {\n outline: none;\n}\n.ant-carousel .slick-list.dragging {\n cursor: pointer;\n}\n.ant-carousel .slick-list .slick-slide {\n pointer-events: none;\n}\n.ant-carousel .slick-list .slick-slide input.ant-radio-input,\n.ant-carousel .slick-list .slick-slide input.ant-checkbox-input {\n visibility: hidden;\n}\n.ant-carousel .slick-list .slick-slide.slick-active {\n pointer-events: auto;\n}\n.ant-carousel .slick-list .slick-slide.slick-active input.ant-radio-input,\n.ant-carousel .slick-list .slick-slide.slick-active input.ant-checkbox-input {\n visibility: visible;\n}\n.ant-carousel .slick-list .slick-slide > div > div {\n vertical-align: bottom;\n}\n.ant-carousel .slick-slider .slick-track,\n.ant-carousel .slick-slider .slick-list {\n transform: translate3d(0, 0, 0);\n touch-action: pan-y;\n}\n.ant-carousel .slick-track {\n position: relative;\n top: 0;\n left: 0;\n display: block;\n}\n.ant-carousel .slick-track::before,\n.ant-carousel .slick-track::after {\n display: table;\n content: '';\n}\n.ant-carousel .slick-track::after {\n clear: both;\n}\n.slick-loading .ant-carousel .slick-track {\n visibility: hidden;\n}\n.ant-carousel .slick-slide {\n display: none;\n float: left;\n height: 100%;\n min-height: 1px;\n}\n.ant-carousel .slick-slide img {\n display: block;\n}\n.ant-carousel .slick-slide.slick-loading img {\n display: none;\n}\n.ant-carousel .slick-slide.dragging img {\n pointer-events: none;\n}\n.ant-carousel .slick-initialized .slick-slide {\n display: block;\n}\n.ant-carousel .slick-loading .slick-slide {\n visibility: hidden;\n}\n.ant-carousel .slick-vertical .slick-slide {\n display: block;\n height: auto;\n}\n.ant-carousel .slick-arrow.slick-hidden {\n display: none;\n}\n.ant-carousel .slick-prev,\n.ant-carousel .slick-next {\n position: absolute;\n top: 50%;\n display: block;\n width: 20px;\n height: 20px;\n margin-top: -10px;\n padding: 0;\n color: transparent;\n font-size: 0;\n line-height: 0;\n background: transparent;\n border: 0;\n outline: none;\n cursor: pointer;\n}\n.ant-carousel .slick-prev:hover,\n.ant-carousel .slick-next:hover,\n.ant-carousel .slick-prev:focus,\n.ant-carousel .slick-next:focus {\n color: transparent;\n background: transparent;\n outline: none;\n}\n.ant-carousel .slick-prev:hover::before,\n.ant-carousel .slick-next:hover::before,\n.ant-carousel .slick-prev:focus::before,\n.ant-carousel .slick-next:focus::before {\n opacity: 1;\n}\n.ant-carousel .slick-prev.slick-disabled::before,\n.ant-carousel .slick-next.slick-disabled::before {\n opacity: 0.25;\n}\n.ant-carousel .slick-prev {\n left: -25px;\n}\n.ant-carousel .slick-prev::before {\n content: '←';\n}\n.ant-carousel .slick-next {\n right: -25px;\n}\n.ant-carousel .slick-next::before {\n content: '→';\n}\n.ant-carousel .slick-dots {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 15;\n display: flex !important;\n justify-content: center;\n margin-right: 15%;\n margin-bottom: 0;\n margin-left: 15%;\n padding-left: 0;\n list-style: none;\n}\n.ant-carousel .slick-dots-bottom {\n bottom: 12px;\n}\n.ant-carousel .slick-dots-top {\n top: 12px;\n bottom: auto;\n}\n.ant-carousel .slick-dots li {\n position: relative;\n display: inline-block;\n flex: 0 1 auto;\n box-sizing: content-box;\n width: 16px;\n height: 3px;\n margin: 0 4px;\n padding: 0;\n text-align: center;\n text-indent: -999px;\n vertical-align: top;\n transition: all 0.5s;\n}\n.ant-carousel .slick-dots li button {\n position: relative;\n display: block;\n width: 100%;\n height: 3px;\n padding: 0;\n color: transparent;\n font-size: 0;\n background: #fff;\n border: 0;\n border-radius: 1px;\n outline: none;\n cursor: pointer;\n opacity: 0.3;\n transition: all 0.5s;\n}\n.ant-carousel .slick-dots li button:hover,\n.ant-carousel .slick-dots li button:focus {\n opacity: 0.75;\n}\n.ant-carousel .slick-dots li button::after {\n position: absolute;\n top: -4px;\n right: -4px;\n bottom: -4px;\n left: -4px;\n content: '';\n}\n.ant-carousel .slick-dots li.slick-active {\n width: 24px;\n}\n.ant-carousel .slick-dots li.slick-active button {\n background: #fff;\n opacity: 1;\n}\n.ant-carousel .slick-dots li.slick-active:hover,\n.ant-carousel .slick-dots li.slick-active:focus {\n opacity: 1;\n}\n.ant-carousel-vertical .slick-dots {\n top: 50%;\n bottom: auto;\n flex-direction: column;\n width: 3px;\n height: auto;\n margin: 0;\n transform: translateY(-50%);\n}\n.ant-carousel-vertical .slick-dots-left {\n right: auto;\n left: 12px;\n}\n.ant-carousel-vertical .slick-dots-right {\n right: 12px;\n left: auto;\n}\n.ant-carousel-vertical .slick-dots li {\n width: 3px;\n height: 16px;\n margin: 4px 0;\n vertical-align: baseline;\n}\n.ant-carousel-vertical .slick-dots li button {\n width: 3px;\n height: 16px;\n}\n.ant-carousel-vertical .slick-dots li.slick-active {\n width: 3px;\n height: 24px;\n}\n.ant-carousel-vertical .slick-dots li.slick-active button {\n width: 3px;\n height: 24px;\n}\n.ant-carousel-rtl {\n direction: rtl;\n}\n.ant-carousel-rtl .ant-carousel .slick-track {\n right: 0;\n left: auto;\n}\n.ant-carousel-rtl .ant-carousel .slick-prev {\n right: -25px;\n left: auto;\n}\n.ant-carousel-rtl .ant-carousel .slick-prev::before {\n content: '→';\n}\n.ant-carousel-rtl .ant-carousel .slick-next {\n right: auto;\n left: -25px;\n}\n.ant-carousel-rtl .ant-carousel .slick-next::before {\n content: '←';\n}\n.ant-carousel-rtl.ant-carousel .slick-dots {\n flex-direction: row-reverse;\n}\n.ant-carousel-rtl.ant-carousel-vertical .slick-dots {\n flex-direction: column;\n}\n@keyframes antCheckboxEffect {\n 0% {\n transform: scale(1);\n opacity: 0.5;\n }\n 100% {\n transform: scale(1.6);\n opacity: 0;\n }\n}\n.ant-cascader-checkbox {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n top: 0.2em;\n line-height: 1;\n white-space: nowrap;\n outline: none;\n cursor: pointer;\n}\n.ant-cascader-checkbox-wrapper:hover .ant-cascader-checkbox-inner,\n.ant-cascader-checkbox:hover .ant-cascader-checkbox-inner,\n.ant-cascader-checkbox-input:focus + .ant-cascader-checkbox-inner {\n border-color: #5b5ce1;\n}\n.ant-cascader-checkbox-checked::after {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 1px solid #5b5ce1;\n border-radius: 5px;\n visibility: hidden;\n animation: antCheckboxEffect 0.36s ease-in-out;\n animation-fill-mode: backwards;\n content: '';\n}\n.ant-cascader-checkbox:hover::after,\n.ant-cascader-checkbox-wrapper:hover .ant-cascader-checkbox::after {\n visibility: visible;\n}\n.ant-cascader-checkbox-inner {\n position: relative;\n top: 0;\n left: 0;\n display: block;\n width: 16px;\n height: 16px;\n direction: ltr;\n background-color: #fff;\n border: 1px solid #d9d9d9;\n border-radius: 5px;\n border-collapse: separate;\n transition: all 0.3s;\n}\n.ant-cascader-checkbox-inner::after {\n position: absolute;\n top: 50%;\n left: 21.5%;\n display: table;\n width: 5.71428571px;\n height: 9.14285714px;\n border: 2px solid #fff;\n border-top: 0;\n border-left: 0;\n transform: rotate(45deg) scale(0) translate(-50%, -50%);\n opacity: 0;\n transition: all 0.1s cubic-bezier(0.71, -0.46, 0.88, 0.6), opacity 0.1s;\n content: ' ';\n}\n.ant-cascader-checkbox-input {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n width: 100%;\n height: 100%;\n cursor: pointer;\n opacity: 0;\n}\n.ant-cascader-checkbox-checked .ant-cascader-checkbox-inner::after {\n position: absolute;\n display: table;\n border: 2px solid #fff;\n border-top: 0;\n border-left: 0;\n transform: rotate(45deg) scale(1) translate(-50%, -50%);\n opacity: 1;\n transition: all 0.2s cubic-bezier(0.12, 0.4, 0.29, 1.46) 0.1s;\n content: ' ';\n}\n.ant-cascader-checkbox-checked .ant-cascader-checkbox-inner {\n background-color: #5b5ce1;\n border-color: #5b5ce1;\n}\n.ant-cascader-checkbox-disabled {\n cursor: not-allowed;\n}\n.ant-cascader-checkbox-disabled.ant-cascader-checkbox-checked .ant-cascader-checkbox-inner::after {\n border-color: rgba(0, 0, 0, 0.25);\n animation-name: none;\n}\n.ant-cascader-checkbox-disabled .ant-cascader-checkbox-input {\n cursor: not-allowed;\n pointer-events: none;\n}\n.ant-cascader-checkbox-disabled .ant-cascader-checkbox-inner {\n background-color: #f5f5f5;\n border-color: #d9d9d9 !important;\n}\n.ant-cascader-checkbox-disabled .ant-cascader-checkbox-inner::after {\n border-color: #f5f5f5;\n border-collapse: separate;\n animation-name: none;\n}\n.ant-cascader-checkbox-disabled + span {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n}\n.ant-cascader-checkbox-disabled:hover::after,\n.ant-cascader-checkbox-wrapper:hover .ant-cascader-checkbox-disabled::after {\n visibility: hidden;\n}\n.ant-cascader-checkbox-wrapper {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n display: inline-flex;\n align-items: baseline;\n line-height: unset;\n cursor: pointer;\n}\n.ant-cascader-checkbox-wrapper::after {\n display: inline-block;\n width: 0;\n overflow: hidden;\n content: '\\a0';\n}\n.ant-cascader-checkbox-wrapper.ant-cascader-checkbox-wrapper-disabled {\n cursor: not-allowed;\n}\n.ant-cascader-checkbox-wrapper + .ant-cascader-checkbox-wrapper {\n margin-left: 8px;\n}\n.ant-cascader-checkbox-wrapper.ant-cascader-checkbox-wrapper-in-form-item input[type='checkbox'] {\n width: 14px;\n height: 14px;\n}\n.ant-cascader-checkbox + span {\n padding-right: 8px;\n padding-left: 8px;\n}\n.ant-cascader-checkbox-group {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n display: inline-block;\n}\n.ant-cascader-checkbox-group-item {\n margin-right: 8px;\n}\n.ant-cascader-checkbox-group-item:last-child {\n margin-right: 0;\n}\n.ant-cascader-checkbox-group-item + .ant-cascader-checkbox-group-item {\n margin-left: 0;\n}\n.ant-cascader-checkbox-indeterminate .ant-cascader-checkbox-inner {\n background-color: #fff;\n border-color: #d9d9d9;\n}\n.ant-cascader-checkbox-indeterminate .ant-cascader-checkbox-inner::after {\n top: 50%;\n left: 50%;\n width: 8px;\n height: 8px;\n background-color: #5b5ce1;\n border: 0;\n transform: translate(-50%, -50%) scale(1);\n opacity: 1;\n content: ' ';\n}\n.ant-cascader-checkbox-indeterminate.ant-cascader-checkbox-disabled .ant-cascader-checkbox-inner::after {\n background-color: rgba(0, 0, 0, 0.25);\n border-color: rgba(0, 0, 0, 0.25);\n}\n.ant-cascader-checkbox-rtl {\n direction: rtl;\n}\n.ant-cascader-checkbox-group-rtl .ant-cascader-checkbox-group-item {\n margin-right: 0;\n margin-left: 8px;\n}\n.ant-cascader-checkbox-group-rtl .ant-cascader-checkbox-group-item:last-child {\n margin-left: 0 !important;\n}\n.ant-cascader-checkbox-group-rtl .ant-cascader-checkbox-group-item + .ant-cascader-checkbox-group-item {\n margin-left: 8px;\n}\n.ant-cascader {\n width: 184px;\n}\n.ant-cascader-checkbox {\n top: 0;\n margin-right: 8px;\n}\n.ant-cascader-menus {\n display: flex;\n flex-wrap: nowrap;\n align-items: flex-start;\n}\n.ant-cascader-menus.ant-cascader-menu-empty .ant-cascader-menu {\n width: 100%;\n height: auto;\n}\n.ant-cascader-menu {\n flex-grow: 1;\n min-width: 111px;\n height: 180px;\n margin: 0;\n margin: -4px 0;\n padding: 4px 0;\n overflow: auto;\n vertical-align: top;\n list-style: none;\n border-right: 1px solid #f0f0f0;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n}\n.ant-cascader-menu-item {\n display: flex;\n flex-wrap: nowrap;\n align-items: center;\n padding: 5px 12px;\n overflow: hidden;\n line-height: 22px;\n white-space: nowrap;\n text-overflow: ellipsis;\n cursor: pointer;\n transition: all 0.3s;\n}\n.ant-cascader-menu-item:hover {\n background: #f5f5f5;\n}\n.ant-cascader-menu-item-disabled {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n}\n.ant-cascader-menu-item-disabled:hover {\n background: transparent;\n}\n.ant-cascader-menu-empty .ant-cascader-menu-item {\n color: rgba(0, 0, 0, 0.25);\n cursor: default;\n pointer-events: none;\n}\n.ant-cascader-menu-item-active:not(.ant-cascader-menu-item-disabled),\n.ant-cascader-menu-item-active:not(.ant-cascader-menu-item-disabled):hover {\n font-weight: 600;\n background-color: #f0f2ff;\n}\n.ant-cascader-menu-item-content {\n flex: auto;\n}\n.ant-cascader-menu-item-expand .ant-cascader-menu-item-expand-icon,\n.ant-cascader-menu-item-loading-icon {\n margin-left: 4px;\n color: rgba(0, 0, 0, 0.45);\n font-size: 10px;\n}\n.ant-cascader-menu-item-disabled.ant-cascader-menu-item-expand .ant-cascader-menu-item-expand-icon,\n.ant-cascader-menu-item-disabled.ant-cascader-menu-item-loading-icon {\n color: rgba(0, 0, 0, 0.25);\n}\n.ant-cascader-menu-item-keyword {\n color: #ff4d4f;\n}\n.ant-cascader-compact-item:not(.ant-cascader-compact-last-item):not(.ant-cascader-compact-item-rtl) {\n margin-right: -1px;\n}\n.ant-cascader-compact-item:not(.ant-cascader-compact-last-item).ant-cascader-compact-item-rtl {\n margin-left: -1px;\n}\n.ant-cascader-compact-item:hover,\n.ant-cascader-compact-item:focus,\n.ant-cascader-compact-item:active {\n z-index: 2;\n}\n.ant-cascader-compact-item[disabled] {\n z-index: 0;\n}\n.ant-cascader-compact-item:not(.ant-cascader-compact-first-item):not(.ant-cascader-compact-last-item).ant-cascader {\n border-radius: 0;\n}\n.ant-cascader-compact-item.ant-cascader.ant-cascader-compact-first-item:not(.ant-cascader-compact-item-rtl) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.ant-cascader-compact-item.ant-cascader.ant-cascader-compact-last-item:not(.ant-cascader-compact-item-rtl) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.ant-cascader-compact-item.ant-cascader.ant-cascader-compact-item-rtl.ant-cascader-compact-first-item {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.ant-cascader-compact-item.ant-cascader.ant-cascader-compact-item-rtl.ant-cascader-compact-last-item {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.ant-cascader-rtl .ant-cascader-menu-item-expand-icon,\n.ant-cascader-rtl .ant-cascader-menu-item-loading-icon {\n margin-right: 4px;\n margin-left: 0;\n}\n.ant-cascader-rtl .ant-cascader-checkbox {\n top: 0;\n margin-right: 0;\n margin-left: 8px;\n}\n.ant-checkbox {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n top: 0.2em;\n line-height: 1;\n white-space: nowrap;\n outline: none;\n cursor: pointer;\n}\n.ant-checkbox-wrapper:hover .ant-checkbox-inner,\n.ant-checkbox:hover .ant-checkbox-inner,\n.ant-checkbox-input:focus + .ant-checkbox-inner {\n border-color: #5b5ce1;\n}\n.ant-checkbox-checked::after {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 1px solid #5b5ce1;\n border-radius: 5px;\n visibility: hidden;\n animation: antCheckboxEffect 0.36s ease-in-out;\n animation-fill-mode: backwards;\n content: '';\n}\n.ant-checkbox:hover::after,\n.ant-checkbox-wrapper:hover .ant-checkbox::after {\n visibility: visible;\n}\n.ant-checkbox-inner {\n position: relative;\n top: 0;\n left: 0;\n display: block;\n width: 16px;\n height: 16px;\n direction: ltr;\n background-color: #fff;\n border: 1px solid #d9d9d9;\n border-radius: 5px;\n border-collapse: separate;\n transition: all 0.3s;\n}\n.ant-checkbox-inner::after {\n position: absolute;\n top: 50%;\n left: 21.5%;\n display: table;\n width: 5.71428571px;\n height: 9.14285714px;\n border: 2px solid #fff;\n border-top: 0;\n border-left: 0;\n transform: rotate(45deg) scale(0) translate(-50%, -50%);\n opacity: 0;\n transition: all 0.1s cubic-bezier(0.71, -0.46, 0.88, 0.6), opacity 0.1s;\n content: ' ';\n}\n.ant-checkbox-input {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n width: 100%;\n height: 100%;\n cursor: pointer;\n opacity: 0;\n}\n.ant-checkbox-checked .ant-checkbox-inner::after {\n position: absolute;\n display: table;\n border: 2px solid #fff;\n border-top: 0;\n border-left: 0;\n transform: rotate(45deg) scale(1) translate(-50%, -50%);\n opacity: 1;\n transition: all 0.2s cubic-bezier(0.12, 0.4, 0.29, 1.46) 0.1s;\n content: ' ';\n}\n.ant-checkbox-checked .ant-checkbox-inner {\n background-color: #5b5ce1;\n border-color: #5b5ce1;\n}\n.ant-checkbox-disabled {\n cursor: not-allowed;\n}\n.ant-checkbox-disabled.ant-checkbox-checked .ant-checkbox-inner::after {\n border-color: rgba(0, 0, 0, 0.25);\n animation-name: none;\n}\n.ant-checkbox-disabled .ant-checkbox-input {\n cursor: not-allowed;\n pointer-events: none;\n}\n.ant-checkbox-disabled .ant-checkbox-inner {\n background-color: #f5f5f5;\n border-color: #d9d9d9 !important;\n}\n.ant-checkbox-disabled .ant-checkbox-inner::after {\n border-color: #f5f5f5;\n border-collapse: separate;\n animation-name: none;\n}\n.ant-checkbox-disabled + span {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n}\n.ant-checkbox-disabled:hover::after,\n.ant-checkbox-wrapper:hover .ant-checkbox-disabled::after {\n visibility: hidden;\n}\n.ant-checkbox-wrapper {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n display: inline-flex;\n align-items: baseline;\n line-height: unset;\n cursor: pointer;\n}\n.ant-checkbox-wrapper::after {\n display: inline-block;\n width: 0;\n overflow: hidden;\n content: '\\a0';\n}\n.ant-checkbox-wrapper.ant-checkbox-wrapper-disabled {\n cursor: not-allowed;\n}\n.ant-checkbox-wrapper + .ant-checkbox-wrapper {\n margin-left: 8px;\n}\n.ant-checkbox-wrapper.ant-checkbox-wrapper-in-form-item input[type='checkbox'] {\n width: 14px;\n height: 14px;\n}\n.ant-checkbox + span {\n padding-right: 8px;\n padding-left: 8px;\n}\n.ant-checkbox-group {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n display: inline-block;\n}\n.ant-checkbox-group-item {\n margin-right: 8px;\n}\n.ant-checkbox-group-item:last-child {\n margin-right: 0;\n}\n.ant-checkbox-group-item + .ant-checkbox-group-item {\n margin-left: 0;\n}\n.ant-checkbox-indeterminate .ant-checkbox-inner {\n background-color: #fff;\n border-color: #d9d9d9;\n}\n.ant-checkbox-indeterminate .ant-checkbox-inner::after {\n top: 50%;\n left: 50%;\n width: 8px;\n height: 8px;\n background-color: #5b5ce1;\n border: 0;\n transform: translate(-50%, -50%) scale(1);\n opacity: 1;\n content: ' ';\n}\n.ant-checkbox-indeterminate.ant-checkbox-disabled .ant-checkbox-inner::after {\n background-color: rgba(0, 0, 0, 0.25);\n border-color: rgba(0, 0, 0, 0.25);\n}\n.ant-checkbox-rtl {\n direction: rtl;\n}\n.ant-checkbox-group-rtl .ant-checkbox-group-item {\n margin-right: 0;\n margin-left: 8px;\n}\n.ant-checkbox-group-rtl .ant-checkbox-group-item:last-child {\n margin-left: 0 !important;\n}\n.ant-checkbox-group-rtl .ant-checkbox-group-item + .ant-checkbox-group-item {\n margin-left: 8px;\n}\n.ant-collapse {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n background-color: #fafafa;\n border: 1px solid #d9d9d9;\n border-bottom: 0;\n border-radius: 5px;\n}\n.ant-collapse > .ant-collapse-item {\n border-bottom: 1px solid #d9d9d9;\n}\n.ant-collapse > .ant-collapse-item:last-child,\n.ant-collapse > .ant-collapse-item:last-child > .ant-collapse-header {\n border-radius: 0 0 5px 5px;\n}\n.ant-collapse > .ant-collapse-item > .ant-collapse-header {\n position: relative;\n display: flex;\n flex-wrap: nowrap;\n align-items: flex-start;\n padding: 12px 16px;\n color: rgba(0, 0, 0, 0.85);\n line-height: 1.5715;\n cursor: pointer;\n transition: all 0.3s, visibility 0s;\n}\n.ant-collapse > .ant-collapse-item > .ant-collapse-header .ant-collapse-arrow {\n display: inline-block;\n margin-right: 12px;\n font-size: 12px;\n vertical-align: -1px;\n}\n.ant-collapse > .ant-collapse-item > .ant-collapse-header .ant-collapse-arrow svg {\n transition: transform 0.24s;\n}\n.ant-collapse > .ant-collapse-item > .ant-collapse-header .ant-collapse-header-text {\n flex: auto;\n}\n.ant-collapse > .ant-collapse-item > .ant-collapse-header .ant-collapse-extra {\n margin-left: auto;\n}\n.ant-collapse > .ant-collapse-item > .ant-collapse-header:focus {\n outline: none;\n}\n.ant-collapse > .ant-collapse-item .ant-collapse-header-collapsible-only {\n cursor: default;\n}\n.ant-collapse > .ant-collapse-item .ant-collapse-header-collapsible-only .ant-collapse-header-text {\n flex: none;\n cursor: pointer;\n}\n.ant-collapse > .ant-collapse-item .ant-collapse-icon-collapsible-only {\n cursor: default;\n}\n.ant-collapse > .ant-collapse-item .ant-collapse-icon-collapsible-only .ant-collapse-expand-icon {\n cursor: pointer;\n}\n.ant-collapse > .ant-collapse-item.ant-collapse-no-arrow > .ant-collapse-header {\n padding-left: 12px;\n}\n.ant-collapse-icon-position-end > .ant-collapse-item > .ant-collapse-header {\n position: relative;\n padding: 12px 16px;\n padding-right: 40px;\n}\n.ant-collapse-icon-position-end > .ant-collapse-item > .ant-collapse-header .ant-collapse-arrow {\n position: absolute;\n top: 50%;\n right: 16px;\n left: auto;\n margin: 0;\n transform: translateY(-50%);\n}\n.ant-collapse-content {\n color: rgba(0, 0, 0, 0.85);\n background-color: #fff;\n border-top: 1px solid #d9d9d9;\n}\n.ant-collapse-content > .ant-collapse-content-box {\n padding: 16px;\n}\n.ant-collapse-content-hidden {\n display: none;\n}\n.ant-collapse-item:last-child > .ant-collapse-content {\n border-radius: 0 0 5px 5px;\n}\n.ant-collapse-borderless {\n background-color: #fafafa;\n border: 0;\n}\n.ant-collapse-borderless > .ant-collapse-item {\n border-bottom: 1px solid #d9d9d9;\n}\n.ant-collapse-borderless > .ant-collapse-item:last-child,\n.ant-collapse-borderless > .ant-collapse-item:last-child .ant-collapse-header {\n border-radius: 0;\n}\n.ant-collapse-borderless > .ant-collapse-item:last-child {\n border-bottom: 0;\n}\n.ant-collapse-borderless > .ant-collapse-item > .ant-collapse-content {\n background-color: transparent;\n border-top: 0;\n}\n.ant-collapse-borderless > .ant-collapse-item > .ant-collapse-content > .ant-collapse-content-box {\n padding-top: 4px;\n}\n.ant-collapse-ghost {\n background-color: transparent;\n border: 0;\n}\n.ant-collapse-ghost > .ant-collapse-item {\n border-bottom: 0;\n}\n.ant-collapse-ghost > .ant-collapse-item > .ant-collapse-content {\n background-color: transparent;\n border-top: 0;\n}\n.ant-collapse-ghost > .ant-collapse-item > .ant-collapse-content > .ant-collapse-content-box {\n padding-top: 12px;\n padding-bottom: 12px;\n}\n.ant-collapse .ant-collapse-item-disabled > .ant-collapse-header,\n.ant-collapse .ant-collapse-item-disabled > .ant-collapse-header > .arrow {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n}\n.ant-collapse-rtl {\n direction: rtl;\n}\n.ant-collapse-rtl.ant-collapse.ant-collapse-icon-position-end > .ant-collapse-item > .ant-collapse-header {\n position: relative;\n padding: 12px 16px;\n padding-left: 40px;\n}\n.ant-collapse-rtl.ant-collapse.ant-collapse-icon-position-end > .ant-collapse-item > .ant-collapse-header .ant-collapse-arrow {\n position: absolute;\n top: 50%;\n right: auto;\n left: 16px;\n margin: 0;\n transform: translateY(-50%);\n}\n.ant-collapse-rtl .ant-collapse > .ant-collapse-item > .ant-collapse-header {\n padding: 12px 16px;\n padding-right: 40px;\n}\n.ant-collapse-rtl.ant-collapse > .ant-collapse-item > .ant-collapse-header .ant-collapse-arrow {\n margin-right: 0;\n margin-left: 12px;\n}\n.ant-collapse-rtl.ant-collapse > .ant-collapse-item > .ant-collapse-header .ant-collapse-arrow svg {\n transform: rotate(180deg);\n}\n.ant-collapse-rtl.ant-collapse > .ant-collapse-item > .ant-collapse-header .ant-collapse-extra {\n margin-right: auto;\n margin-left: 0;\n}\n.ant-collapse-rtl.ant-collapse > .ant-collapse-item.ant-collapse-no-arrow > .ant-collapse-header {\n padding-right: 12px;\n padding-left: 0;\n}\n.ant-comment {\n position: relative;\n background-color: inherit;\n}\n.ant-comment-inner {\n display: flex;\n padding: 16px 0;\n}\n.ant-comment-avatar {\n position: relative;\n flex-shrink: 0;\n margin-right: 12px;\n cursor: pointer;\n}\n.ant-comment-avatar img {\n width: 32px;\n height: 32px;\n border-radius: 50%;\n}\n.ant-comment-content {\n position: relative;\n flex: 1 1 auto;\n min-width: 1px;\n font-size: 14px;\n word-wrap: break-word;\n}\n.ant-comment-content-author {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n margin-bottom: 4px;\n font-size: 14px;\n}\n.ant-comment-content-author > a,\n.ant-comment-content-author > span {\n padding-right: 8px;\n font-size: 12px;\n line-height: 18px;\n}\n.ant-comment-content-author-name {\n color: rgba(0, 0, 0, 0.45);\n font-size: 14px;\n transition: color 0.3s;\n}\n.ant-comment-content-author-name > * {\n color: rgba(0, 0, 0, 0.45);\n}\n.ant-comment-content-author-name > *:hover {\n color: rgba(0, 0, 0, 0.45);\n}\n.ant-comment-content-author-time {\n color: #ccc;\n white-space: nowrap;\n cursor: auto;\n}\n.ant-comment-content-detail p {\n margin-bottom: inherit;\n white-space: pre-wrap;\n}\n.ant-comment-actions {\n margin-top: 12px;\n margin-bottom: inherit;\n padding-left: 0;\n}\n.ant-comment-actions > li {\n display: inline-block;\n color: rgba(0, 0, 0, 0.45);\n}\n.ant-comment-actions > li > span {\n margin-right: 10px;\n color: rgba(0, 0, 0, 0.45);\n font-size: 12px;\n cursor: pointer;\n transition: color 0.3s;\n user-select: none;\n}\n.ant-comment-actions > li > span:hover {\n color: #595959;\n}\n.ant-comment-nested {\n margin-left: 44px;\n}\n.ant-comment-rtl {\n direction: rtl;\n}\n.ant-comment-rtl .ant-comment-avatar {\n margin-right: 0;\n margin-left: 12px;\n}\n.ant-comment-rtl .ant-comment-content-author > a,\n.ant-comment-rtl .ant-comment-content-author > span {\n padding-right: 0;\n padding-left: 8px;\n}\n.ant-comment-rtl .ant-comment-actions {\n padding-right: 0;\n}\n.ant-comment-rtl .ant-comment-actions > li > span {\n margin-right: 0;\n margin-left: 10px;\n}\n.ant-comment-rtl .ant-comment-nested {\n margin-right: 44px;\n margin-left: 0;\n}\n.ant-picker-status-error.ant-picker,\n.ant-picker-status-error.ant-picker:not([disabled]):hover {\n background-color: #fff;\n border-color: #ff4d4f;\n}\n.ant-picker-status-error.ant-picker-focused,\n.ant-picker-status-error.ant-picker:focus {\n border-color: #ff7875;\n box-shadow: 0 0 0 2px rgba(255, 77, 79, 0.2);\n border-right-width: 1px;\n outline: 0;\n}\n.ant-picker-status-error.ant-picker .ant-picker-active-bar {\n background: #ff7875;\n}\n.ant-picker-status-warning.ant-picker,\n.ant-picker-status-warning.ant-picker:not([disabled]):hover {\n background-color: #fff;\n border-color: #faad14;\n}\n.ant-picker-status-warning.ant-picker-focused,\n.ant-picker-status-warning.ant-picker:focus {\n border-color: #ffc53d;\n box-shadow: 0 0 0 2px rgba(250, 173, 20, 0.2);\n border-right-width: 1px;\n outline: 0;\n}\n.ant-picker-status-warning.ant-picker .ant-picker-active-bar {\n background: #ffc53d;\n}\n.ant-picker {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n padding: 4px 11px 4px;\n position: relative;\n display: inline-flex;\n align-items: center;\n background: #fff;\n border: 1px solid #d9d9d9;\n border-radius: 5px;\n transition: border 0.3s, box-shadow 0.3s;\n}\n.ant-picker:hover,\n.ant-picker-focused {\n border-color: #8588ed;\n border-right-width: 1px;\n}\n.ant-input-rtl .ant-picker:hover,\n.ant-input-rtl .ant-picker-focused {\n border-right-width: 0;\n border-left-width: 1px !important;\n}\n.ant-picker-focused {\n border-color: #8588ed;\n box-shadow: 0 0 0 2px rgba(91, 92, 225, 0.2);\n border-right-width: 1px;\n outline: 0;\n}\n.ant-input-rtl .ant-picker-focused {\n border-right-width: 0;\n border-left-width: 1px !important;\n}\n.ant-picker.ant-picker-disabled {\n background: #f5f5f5;\n border-color: #d9d9d9;\n cursor: not-allowed;\n}\n.ant-picker.ant-picker-disabled .ant-picker-suffix {\n color: rgba(0, 0, 0, 0.25);\n}\n.ant-picker.ant-picker-borderless {\n background-color: transparent !important;\n border-color: transparent !important;\n box-shadow: none !important;\n}\n.ant-picker-input {\n position: relative;\n display: inline-flex;\n align-items: center;\n width: 100%;\n}\n.ant-picker-input > input {\n position: relative;\n display: inline-block;\n width: 100%;\n min-width: 0;\n padding: 4px 11px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n line-height: 1.5715;\n background-color: #fff;\n background-image: none;\n border: 1px solid #d9d9d9;\n border-radius: 5px;\n transition: all 0.3s;\n flex: auto;\n min-width: 1px;\n height: auto;\n padding: 0;\n background: transparent;\n border: 0;\n}\n.ant-picker-input > input::placeholder {\n color: #bfbfbf;\n user-select: none;\n}\n.ant-picker-input > input:placeholder-shown {\n text-overflow: ellipsis;\n}\n.ant-picker-input > input:hover {\n border-color: #8588ed;\n border-right-width: 1px;\n}\n.ant-input-rtl .ant-picker-input > input:hover {\n border-right-width: 0;\n border-left-width: 1px !important;\n}\n.ant-picker-input > input:focus,\n.ant-picker-input > input-focused {\n border-color: #8588ed;\n box-shadow: 0 0 0 2px rgba(91, 92, 225, 0.2);\n border-right-width: 1px;\n outline: 0;\n}\n.ant-input-rtl .ant-picker-input > input:focus,\n.ant-input-rtl .ant-picker-input > input-focused {\n border-right-width: 0;\n border-left-width: 1px !important;\n}\n.ant-picker-input > input-disabled {\n color: rgba(0, 0, 0, 0.25);\n background-color: #f5f5f5;\n border-color: #d9d9d9;\n box-shadow: none;\n cursor: not-allowed;\n opacity: 1;\n}\n.ant-picker-input > input-disabled:hover {\n border-color: #d9d9d9;\n border-right-width: 1px;\n}\n.ant-picker-input > input[disabled] {\n color: rgba(0, 0, 0, 0.25);\n background-color: #f5f5f5;\n border-color: #d9d9d9;\n box-shadow: none;\n cursor: not-allowed;\n opacity: 1;\n}\n.ant-picker-input > input[disabled]:hover {\n border-color: #d9d9d9;\n border-right-width: 1px;\n}\n.ant-picker-input > input-borderless,\n.ant-picker-input > input-borderless:hover,\n.ant-picker-input > input-borderless:focus,\n.ant-picker-input > input-borderless-focused,\n.ant-picker-input > input-borderless-disabled,\n.ant-picker-input > input-borderless[disabled] {\n background-color: transparent;\n border: none;\n box-shadow: none;\n}\ntextarea.ant-picker-input > input {\n max-width: 100%;\n height: auto;\n min-height: 32px;\n line-height: 1.5715;\n vertical-align: bottom;\n transition: all 0.3s, height 0s;\n}\n.ant-picker-input > input-lg {\n padding: 6.5px 11px;\n font-size: 16px;\n}\n.ant-picker-input > input-sm {\n padding: 0px 7px;\n}\n.ant-picker-input > input-rtl {\n direction: rtl;\n}\n.ant-picker-input > input:focus {\n box-shadow: none;\n}\n.ant-picker-input > input[disabled] {\n background: transparent;\n}\n.ant-picker-input:hover .ant-picker-clear {\n opacity: 1;\n}\n.ant-picker-input-placeholder > input {\n color: #bfbfbf;\n}\n.ant-picker-large {\n padding: 6.5px 11px 6.5px;\n}\n.ant-picker-large .ant-picker-input > input {\n font-size: 16px;\n}\n.ant-picker-small {\n padding: 0px 7px 0px;\n}\n.ant-picker-suffix {\n display: flex;\n flex: none;\n align-self: center;\n margin-left: 4px;\n color: rgba(0, 0, 0, 0.25);\n line-height: 1;\n pointer-events: none;\n}\n.ant-picker-suffix > * {\n vertical-align: top;\n}\n.ant-picker-suffix > *:not(:last-child) {\n margin-right: 8px;\n}\n.ant-picker-clear {\n position: absolute;\n top: 50%;\n right: 0;\n color: rgba(0, 0, 0, 0.25);\n line-height: 1;\n background: #fff;\n transform: translateY(-50%);\n cursor: pointer;\n opacity: 0;\n transition: opacity 0.3s, color 0.3s;\n}\n.ant-picker-clear > * {\n vertical-align: top;\n}\n.ant-picker-clear:hover {\n color: rgba(0, 0, 0, 0.45);\n}\n.ant-picker-separator {\n position: relative;\n display: inline-block;\n width: 1em;\n height: 16px;\n color: rgba(0, 0, 0, 0.25);\n font-size: 16px;\n vertical-align: top;\n cursor: default;\n}\n.ant-picker-focused .ant-picker-separator {\n color: rgba(0, 0, 0, 0.45);\n}\n.ant-picker-disabled .ant-picker-range-separator .ant-picker-separator {\n cursor: not-allowed;\n}\n.ant-picker-range {\n position: relative;\n display: inline-flex;\n}\n.ant-picker-range .ant-picker-clear {\n right: 11px;\n}\n.ant-picker-range:hover .ant-picker-clear {\n opacity: 1;\n}\n.ant-picker-range .ant-picker-active-bar {\n bottom: -1px;\n height: 2px;\n margin-left: 11px;\n background: #5b5ce1;\n opacity: 0;\n transition: all 0.3s ease-out;\n pointer-events: none;\n}\n.ant-picker-range.ant-picker-focused .ant-picker-active-bar {\n opacity: 1;\n}\n.ant-picker-range-separator {\n align-items: center;\n padding: 0 8px;\n line-height: 1;\n}\n.ant-picker-range.ant-picker-small .ant-picker-clear {\n right: 7px;\n}\n.ant-picker-range.ant-picker-small .ant-picker-active-bar {\n margin-left: 7px;\n}\n.ant-picker-dropdown {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: absolute;\n top: -9999px;\n left: -9999px;\n z-index: 1050;\n}\n.ant-picker-dropdown-hidden {\n display: none;\n}\n.ant-picker-dropdown-placement-bottomLeft .ant-picker-range-arrow {\n top: 2.58561808px;\n display: block;\n transform: rotate(-135deg) translateY(1px);\n}\n.ant-picker-dropdown-placement-topLeft .ant-picker-range-arrow {\n bottom: 2.58561808px;\n display: block;\n transform: rotate(45deg);\n}\n.ant-picker-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-picker-dropdown-placement-topLeft,\n.ant-picker-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-picker-dropdown-placement-topRight,\n.ant-picker-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-picker-dropdown-placement-topLeft,\n.ant-picker-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-picker-dropdown-placement-topRight {\n animation-name: antSlideDownIn;\n}\n.ant-picker-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-picker-dropdown-placement-bottomLeft,\n.ant-picker-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-picker-dropdown-placement-bottomRight,\n.ant-picker-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-picker-dropdown-placement-bottomLeft,\n.ant-picker-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-picker-dropdown-placement-bottomRight {\n animation-name: antSlideUpIn;\n}\n.ant-picker-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-picker-dropdown-placement-topLeft,\n.ant-picker-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-picker-dropdown-placement-topRight {\n animation-name: antSlideDownOut;\n}\n.ant-picker-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-picker-dropdown-placement-bottomLeft,\n.ant-picker-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-picker-dropdown-placement-bottomRight {\n animation-name: antSlideUpOut;\n}\n.ant-picker-dropdown-range {\n padding: 7.54247233px 0;\n}\n.ant-picker-dropdown-range-hidden {\n display: none;\n}\n.ant-picker-dropdown .ant-picker-panel > .ant-picker-time-panel {\n padding-top: 4px;\n}\n.ant-picker-ranges {\n margin-bottom: 0;\n padding: 4px 12px;\n overflow: hidden;\n line-height: 34px;\n text-align: left;\n list-style: none;\n}\n.ant-picker-ranges > li {\n display: inline-block;\n}\n.ant-picker-ranges .ant-picker-preset > .ant-tag-blue {\n color: #5b5ce1;\n background: #f0f2ff;\n border-color: #e0e3ff;\n cursor: pointer;\n}\n.ant-picker-ranges .ant-picker-ok {\n float: right;\n margin-left: 8px;\n}\n.ant-picker-range-wrapper {\n display: flex;\n}\n.ant-picker-range-arrow {\n position: absolute;\n z-index: 1;\n display: none;\n width: 11.3137085px;\n height: 11.3137085px;\n margin-left: 16.5px;\n box-shadow: 2px 2px 6px -2px rgba(0, 0, 0, 0.1);\n transition: left 0.3s ease-out;\n border-radius: 0 0 2px;\n pointer-events: none;\n}\n.ant-picker-range-arrow::before {\n position: absolute;\n top: -11.3137085px;\n left: -11.3137085px;\n width: 33.9411255px;\n height: 33.9411255px;\n background: #fff;\n background-repeat: no-repeat;\n background-position: -10px -10px;\n content: '';\n clip-path: inset(33% 33%);\n clip-path: path('M 9.849242404917499 24.091883092036785 A 5 5 0 0 1 13.384776310850237 22.627416997969522 L 20.627416997969522 22.627416997969522 A 2 2 0 0 0 22.627416997969522 20.627416997969522 L 22.627416997969522 13.384776310850237 A 5 5 0 0 1 24.091883092036785 9.849242404917499 L 23.091883092036785 9.849242404917499 L 9.849242404917499 23.091883092036785 Z');\n}\n.ant-picker-panel-container {\n overflow: hidden;\n vertical-align: top;\n background: #fff;\n border-radius: 5px;\n box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05);\n transition: margin 0.3s;\n}\n.ant-picker-panel-container .ant-picker-panels {\n display: inline-flex;\n flex-wrap: nowrap;\n direction: ltr;\n}\n.ant-picker-panel-container .ant-picker-panel {\n vertical-align: top;\n background: transparent;\n border-width: 0 0 1px 0;\n border-radius: 0;\n}\n.ant-picker-panel-container .ant-picker-panel .ant-picker-content,\n.ant-picker-panel-container .ant-picker-panel table {\n text-align: center;\n}\n.ant-picker-panel-container .ant-picker-panel-focused {\n border-color: #f0f0f0;\n}\n.ant-picker-compact-item:not(.ant-picker-compact-last-item):not(.ant-picker-compact-item-rtl) {\n margin-right: -1px;\n}\n.ant-picker-compact-item:not(.ant-picker-compact-last-item).ant-picker-compact-item-rtl {\n margin-left: -1px;\n}\n.ant-picker-compact-item:hover,\n.ant-picker-compact-item:focus,\n.ant-picker-compact-item:active {\n z-index: 2;\n}\n.ant-picker-compact-item.ant-picker-focused {\n z-index: 2;\n}\n.ant-picker-compact-item[disabled] {\n z-index: 0;\n}\n.ant-picker-compact-item:not(.ant-picker-compact-first-item):not(.ant-picker-compact-last-item).ant-picker {\n border-radius: 0;\n}\n.ant-picker-compact-item.ant-picker.ant-picker-compact-first-item:not(.ant-picker-compact-item-rtl) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.ant-picker-compact-item.ant-picker.ant-picker-compact-last-item:not(.ant-picker-compact-item-rtl) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.ant-picker-compact-item.ant-picker.ant-picker-compact-item-rtl.ant-picker-compact-first-item {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.ant-picker-compact-item.ant-picker.ant-picker-compact-item-rtl.ant-picker-compact-last-item {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.ant-picker-panel {\n display: inline-flex;\n flex-direction: column;\n text-align: center;\n background: #fff;\n border: 1px solid #f0f0f0;\n border-radius: 5px;\n outline: none;\n}\n.ant-picker-panel-focused {\n border-color: #5b5ce1;\n}\n.ant-picker-decade-panel,\n.ant-picker-year-panel,\n.ant-picker-quarter-panel,\n.ant-picker-month-panel,\n.ant-picker-week-panel,\n.ant-picker-date-panel,\n.ant-picker-time-panel {\n display: flex;\n flex-direction: column;\n width: 280px;\n}\n.ant-picker-header {\n display: flex;\n padding: 0 8px;\n color: rgba(0, 0, 0, 0.85);\n border-bottom: 1px solid #f0f0f0;\n}\n.ant-picker-header > * {\n flex: none;\n}\n.ant-picker-header button {\n padding: 0;\n color: rgba(0, 0, 0, 0.25);\n line-height: 40px;\n background: transparent;\n border: 0;\n cursor: pointer;\n transition: color 0.3s;\n}\n.ant-picker-header > button {\n min-width: 1.6em;\n font-size: 14px;\n}\n.ant-picker-header > button:hover {\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-picker-header-view {\n flex: auto;\n font-weight: 500;\n line-height: 40px;\n}\n.ant-picker-header-view button {\n color: inherit;\n font-weight: inherit;\n}\n.ant-picker-header-view button:not(:first-child) {\n margin-left: 8px;\n}\n.ant-picker-header-view button:hover {\n color: #5b5ce1;\n}\n.ant-picker-prev-icon,\n.ant-picker-next-icon,\n.ant-picker-super-prev-icon,\n.ant-picker-super-next-icon {\n position: relative;\n display: inline-block;\n width: 7px;\n height: 7px;\n}\n.ant-picker-prev-icon::before,\n.ant-picker-next-icon::before,\n.ant-picker-super-prev-icon::before,\n.ant-picker-super-next-icon::before {\n position: absolute;\n top: 0;\n left: 0;\n display: inline-block;\n width: 7px;\n height: 7px;\n border: 0 solid currentcolor;\n border-width: 1.5px 0 0 1.5px;\n content: '';\n}\n.ant-picker-super-prev-icon::after,\n.ant-picker-super-next-icon::after {\n position: absolute;\n top: 4px;\n left: 4px;\n display: inline-block;\n width: 7px;\n height: 7px;\n border: 0 solid currentcolor;\n border-width: 1.5px 0 0 1.5px;\n content: '';\n}\n.ant-picker-prev-icon,\n.ant-picker-super-prev-icon {\n transform: rotate(-45deg);\n}\n.ant-picker-next-icon,\n.ant-picker-super-next-icon {\n transform: rotate(135deg);\n}\n.ant-picker-content {\n width: 100%;\n table-layout: fixed;\n border-collapse: collapse;\n}\n.ant-picker-content th,\n.ant-picker-content td {\n position: relative;\n min-width: 24px;\n font-weight: 400;\n}\n.ant-picker-content th {\n height: 30px;\n color: rgba(0, 0, 0, 0.85);\n line-height: 30px;\n}\n.ant-picker-cell {\n padding: 3px 0;\n color: rgba(0, 0, 0, 0.25);\n cursor: pointer;\n}\n.ant-picker-cell-in-view {\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-picker-cell::before {\n position: absolute;\n top: 50%;\n right: 0;\n left: 0;\n z-index: 1;\n height: 24px;\n transform: translateY(-50%);\n transition: all 0.3s;\n content: '';\n}\n.ant-picker-cell .ant-picker-cell-inner {\n position: relative;\n z-index: 2;\n display: inline-block;\n min-width: 24px;\n height: 24px;\n line-height: 24px;\n border-radius: 5px;\n transition: background 0.3s, border 0.3s;\n}\n.ant-picker-cell:hover:not(.ant-picker-cell-in-view) .ant-picker-cell-inner,\n.ant-picker-cell:hover:not(.ant-picker-cell-selected):not(.ant-picker-cell-range-start):not(.ant-picker-cell-range-end):not(.ant-picker-cell-range-hover-start):not(.ant-picker-cell-range-hover-end) .ant-picker-cell-inner {\n background: #f5f5f5;\n}\n.ant-picker-cell-in-view.ant-picker-cell-today .ant-picker-cell-inner::before {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n border: 1px solid #5b5ce1;\n border-radius: 5px;\n content: '';\n}\n.ant-picker-cell-in-view.ant-picker-cell-in-range {\n position: relative;\n}\n.ant-picker-cell-in-view.ant-picker-cell-in-range::before {\n background: #f0f2ff;\n}\n.ant-picker-cell-in-view.ant-picker-cell-selected .ant-picker-cell-inner,\n.ant-picker-cell-in-view.ant-picker-cell-range-start .ant-picker-cell-inner,\n.ant-picker-cell-in-view.ant-picker-cell-range-end .ant-picker-cell-inner {\n color: #fff;\n background: #5b5ce1;\n}\n.ant-picker-cell-in-view.ant-picker-cell-range-start:not(.ant-picker-cell-range-start-single)::before,\n.ant-picker-cell-in-view.ant-picker-cell-range-end:not(.ant-picker-cell-range-end-single)::before {\n background: #f0f2ff;\n}\n.ant-picker-cell-in-view.ant-picker-cell-range-start::before {\n left: 50%;\n}\n.ant-picker-cell-in-view.ant-picker-cell-range-end::before {\n right: 50%;\n}\n.ant-picker-cell-in-view.ant-picker-cell-range-hover-start:not(.ant-picker-cell-in-range):not(.ant-picker-cell-range-start):not(.ant-picker-cell-range-end)::after,\n.ant-picker-cell-in-view.ant-picker-cell-range-hover-end:not(.ant-picker-cell-in-range):not(.ant-picker-cell-range-start):not(.ant-picker-cell-range-end)::after,\n.ant-picker-cell-in-view.ant-picker-cell-range-hover-start.ant-picker-cell-range-start-single::after,\n.ant-picker-cell-in-view.ant-picker-cell-range-hover-start.ant-picker-cell-range-start.ant-picker-cell-range-end.ant-picker-cell-range-end-near-hover::after,\n.ant-picker-cell-in-view.ant-picker-cell-range-hover-end.ant-picker-cell-range-start.ant-picker-cell-range-end.ant-picker-cell-range-start-near-hover::after,\n.ant-picker-cell-in-view.ant-picker-cell-range-hover-end.ant-picker-cell-range-end-single::after,\n.ant-picker-cell-in-view.ant-picker-cell-range-hover:not(.ant-picker-cell-in-range)::after {\n position: absolute;\n top: 50%;\n z-index: 0;\n height: 24px;\n border-top: 1px dashed #b1b2f1;\n border-bottom: 1px dashed #b1b2f1;\n transform: translateY(-50%);\n transition: all 0.3s;\n content: '';\n}\n.ant-picker-cell-range-hover-start::after,\n.ant-picker-cell-range-hover-end::after,\n.ant-picker-cell-range-hover::after {\n right: 0;\n left: 2px;\n}\n.ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover::before,\n.ant-picker-cell-in-view.ant-picker-cell-range-start.ant-picker-cell-range-hover::before,\n.ant-picker-cell-in-view.ant-picker-cell-range-end.ant-picker-cell-range-hover::before,\n.ant-picker-cell-in-view.ant-picker-cell-range-start:not(.ant-picker-cell-range-start-single).ant-picker-cell-range-hover-start::before,\n.ant-picker-cell-in-view.ant-picker-cell-range-end:not(.ant-picker-cell-range-end-single).ant-picker-cell-range-hover-end::before,\n.ant-picker-panel > :not(.ant-picker-date-panel) .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-start::before,\n.ant-picker-panel > :not(.ant-picker-date-panel) .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-end::before {\n background: #f2f2fd;\n}\n.ant-picker-cell-in-view.ant-picker-cell-range-start:not(.ant-picker-cell-range-start-single):not(.ant-picker-cell-range-end) .ant-picker-cell-inner {\n border-radius: 5px 0 0 5px;\n}\n.ant-picker-cell-in-view.ant-picker-cell-range-end:not(.ant-picker-cell-range-end-single):not(.ant-picker-cell-range-start) .ant-picker-cell-inner {\n border-radius: 0 5px 5px 0;\n}\n.ant-picker-date-panel .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-start .ant-picker-cell-inner::after,\n.ant-picker-date-panel .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-end .ant-picker-cell-inner::after {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: -1;\n background: #f2f2fd;\n transition: all 0.3s;\n content: '';\n}\n.ant-picker-date-panel .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-start .ant-picker-cell-inner::after {\n right: -6px;\n left: 0;\n}\n.ant-picker-date-panel .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-end .ant-picker-cell-inner::after {\n right: 0;\n left: -6px;\n}\n.ant-picker-cell-range-hover.ant-picker-cell-range-start::after {\n right: 50%;\n}\n.ant-picker-cell-range-hover.ant-picker-cell-range-end::after {\n left: 50%;\n}\ntr > .ant-picker-cell-in-view.ant-picker-cell-range-hover:first-child::after,\ntr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-end:first-child::after,\n.ant-picker-cell-in-view.ant-picker-cell-start.ant-picker-cell-range-hover-edge-start.ant-picker-cell-range-hover-edge-start-near-range::after,\n.ant-picker-cell-in-view.ant-picker-cell-range-hover-edge-start:not(.ant-picker-cell-range-hover-edge-start-near-range)::after,\n.ant-picker-cell-in-view.ant-picker-cell-range-hover-start::after {\n left: 6px;\n border-left: 1px dashed #b1b2f1;\n border-top-left-radius: 5px;\n border-bottom-left-radius: 5px;\n}\ntr > .ant-picker-cell-in-view.ant-picker-cell-range-hover:last-child::after,\ntr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::after,\n.ant-picker-cell-in-view.ant-picker-cell-end.ant-picker-cell-range-hover-edge-end.ant-picker-cell-range-hover-edge-end-near-range::after,\n.ant-picker-cell-in-view.ant-picker-cell-range-hover-edge-end:not(.ant-picker-cell-range-hover-edge-end-near-range)::after,\n.ant-picker-cell-in-view.ant-picker-cell-range-hover-end::after {\n right: 6px;\n border-right: 1px dashed #b1b2f1;\n border-top-right-radius: 5px;\n border-bottom-right-radius: 5px;\n}\n.ant-picker-cell-disabled {\n color: rgba(0, 0, 0, 0.25);\n pointer-events: none;\n}\n.ant-picker-cell-disabled .ant-picker-cell-inner {\n background: transparent;\n}\n.ant-picker-cell-disabled::before {\n background: rgba(0, 0, 0, 0.04);\n}\n.ant-picker-cell-disabled.ant-picker-cell-today .ant-picker-cell-inner::before {\n border-color: rgba(0, 0, 0, 0.25);\n}\n.ant-picker-decade-panel .ant-picker-content,\n.ant-picker-year-panel .ant-picker-content,\n.ant-picker-quarter-panel .ant-picker-content,\n.ant-picker-month-panel .ant-picker-content {\n height: 264px;\n}\n.ant-picker-decade-panel .ant-picker-cell-inner,\n.ant-picker-year-panel .ant-picker-cell-inner,\n.ant-picker-quarter-panel .ant-picker-cell-inner,\n.ant-picker-month-panel .ant-picker-cell-inner {\n padding: 0 8px;\n}\n.ant-picker-quarter-panel .ant-picker-content {\n height: 56px;\n}\n.ant-picker-footer {\n width: min-content;\n min-width: 100%;\n line-height: 38px;\n text-align: center;\n border-bottom: 1px solid transparent;\n}\n.ant-picker-panel .ant-picker-footer {\n border-top: 1px solid #f0f0f0;\n}\n.ant-picker-footer-extra {\n padding: 0 12px;\n line-height: 38px;\n text-align: left;\n}\n.ant-picker-footer-extra:not(:last-child) {\n border-bottom: 1px solid #f0f0f0;\n}\n.ant-picker-now {\n text-align: left;\n}\n.ant-picker-today-btn {\n color: #5b5ce1;\n}\n.ant-picker-today-btn:hover {\n color: #8588ed;\n}\n.ant-picker-today-btn:active {\n color: #4541ba;\n}\n.ant-picker-today-btn.ant-picker-today-btn-disabled {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n}\n.ant-picker-decade-panel .ant-picker-cell-inner {\n padding: 0 4px;\n}\n.ant-picker-decade-panel .ant-picker-cell::before {\n display: none;\n}\n.ant-picker-year-panel .ant-picker-body,\n.ant-picker-quarter-panel .ant-picker-body,\n.ant-picker-month-panel .ant-picker-body {\n padding: 0 8px;\n}\n.ant-picker-year-panel .ant-picker-cell-inner,\n.ant-picker-quarter-panel .ant-picker-cell-inner,\n.ant-picker-month-panel .ant-picker-cell-inner {\n width: 60px;\n}\n.ant-picker-year-panel .ant-picker-cell-range-hover-start::after,\n.ant-picker-quarter-panel .ant-picker-cell-range-hover-start::after,\n.ant-picker-month-panel .ant-picker-cell-range-hover-start::after {\n left: 14px;\n border-left: 1px dashed #b1b2f1;\n border-radius: 5px 0 0 5px;\n}\n.ant-picker-panel-rtl .ant-picker-year-panel .ant-picker-cell-range-hover-start::after,\n.ant-picker-panel-rtl .ant-picker-quarter-panel .ant-picker-cell-range-hover-start::after,\n.ant-picker-panel-rtl .ant-picker-month-panel .ant-picker-cell-range-hover-start::after {\n right: 14px;\n border-right: 1px dashed #b1b2f1;\n border-radius: 0 5px 5px 0;\n}\n.ant-picker-year-panel .ant-picker-cell-range-hover-end::after,\n.ant-picker-quarter-panel .ant-picker-cell-range-hover-end::after,\n.ant-picker-month-panel .ant-picker-cell-range-hover-end::after {\n right: 14px;\n border-right: 1px dashed #b1b2f1;\n border-radius: 0 5px 5px 0;\n}\n.ant-picker-panel-rtl .ant-picker-year-panel .ant-picker-cell-range-hover-end::after,\n.ant-picker-panel-rtl .ant-picker-quarter-panel .ant-picker-cell-range-hover-end::after,\n.ant-picker-panel-rtl .ant-picker-month-panel .ant-picker-cell-range-hover-end::after {\n left: 14px;\n border-left: 1px dashed #b1b2f1;\n border-radius: 5px 0 0 5px;\n}\n.ant-picker-week-panel .ant-picker-body {\n padding: 8px 12px;\n}\n.ant-picker-week-panel .ant-picker-cell:hover .ant-picker-cell-inner,\n.ant-picker-week-panel .ant-picker-cell-selected .ant-picker-cell-inner,\n.ant-picker-week-panel .ant-picker-cell .ant-picker-cell-inner {\n background: transparent !important;\n}\n.ant-picker-week-panel-row td {\n transition: background 0.3s;\n}\n.ant-picker-week-panel-row:hover td {\n background: #f5f5f5;\n}\n.ant-picker-week-panel-row-selected td,\n.ant-picker-week-panel-row-selected:hover td {\n background: #5b5ce1;\n}\n.ant-picker-week-panel-row-selected td.ant-picker-cell-week,\n.ant-picker-week-panel-row-selected:hover td.ant-picker-cell-week {\n color: rgba(255, 255, 255, 0.5);\n}\n.ant-picker-week-panel-row-selected td.ant-picker-cell-today .ant-picker-cell-inner::before,\n.ant-picker-week-panel-row-selected:hover td.ant-picker-cell-today .ant-picker-cell-inner::before {\n border-color: #fff;\n}\n.ant-picker-week-panel-row-selected td .ant-picker-cell-inner,\n.ant-picker-week-panel-row-selected:hover td .ant-picker-cell-inner {\n color: #fff;\n}\n.ant-picker-date-panel .ant-picker-body {\n padding: 8px 12px;\n}\n.ant-picker-date-panel .ant-picker-content {\n width: 252px;\n}\n.ant-picker-date-panel .ant-picker-content th {\n width: 36px;\n}\n.ant-picker-datetime-panel {\n display: flex;\n}\n.ant-picker-datetime-panel .ant-picker-time-panel {\n border-left: 1px solid #f0f0f0;\n}\n.ant-picker-datetime-panel .ant-picker-date-panel,\n.ant-picker-datetime-panel .ant-picker-time-panel {\n transition: opacity 0.3s;\n}\n.ant-picker-datetime-panel-active .ant-picker-date-panel,\n.ant-picker-datetime-panel-active .ant-picker-time-panel {\n opacity: 0.3;\n}\n.ant-picker-datetime-panel-active .ant-picker-date-panel-active,\n.ant-picker-datetime-panel-active .ant-picker-time-panel-active {\n opacity: 1;\n}\n.ant-picker-time-panel {\n width: auto;\n min-width: auto;\n}\n.ant-picker-time-panel .ant-picker-content {\n display: flex;\n flex: auto;\n height: 224px;\n}\n.ant-picker-time-panel-column {\n flex: 1 0 auto;\n width: 56px;\n margin: 0;\n padding: 0;\n overflow-y: hidden;\n text-align: left;\n list-style: none;\n transition: background 0.3s;\n}\n.ant-picker-time-panel-column::after {\n display: block;\n height: 196px;\n content: '';\n}\n.ant-picker-datetime-panel .ant-picker-time-panel-column::after {\n height: 198px;\n}\n.ant-picker-time-panel-column:not(:first-child) {\n border-left: 1px solid #f0f0f0;\n}\n.ant-picker-time-panel-column-active {\n background: rgba(240, 242, 255, 0.2);\n}\n.ant-picker-time-panel-column:hover {\n overflow-y: auto;\n}\n.ant-picker-time-panel-column > li {\n margin: 0;\n padding: 0;\n}\n.ant-picker-time-panel-column > li.ant-picker-time-panel-cell .ant-picker-time-panel-cell-inner {\n display: block;\n width: 100%;\n height: 28px;\n margin: 0;\n padding: 0 0 0 14px;\n color: rgba(0, 0, 0, 0.85);\n line-height: 28px;\n border-radius: 0;\n cursor: pointer;\n transition: background 0.3s;\n}\n.ant-picker-time-panel-column > li.ant-picker-time-panel-cell .ant-picker-time-panel-cell-inner:hover {\n background: #f5f5f5;\n}\n.ant-picker-time-panel-column > li.ant-picker-time-panel-cell-selected .ant-picker-time-panel-cell-inner {\n background: #f0f2ff;\n}\n.ant-picker-time-panel-column > li.ant-picker-time-panel-cell-disabled .ant-picker-time-panel-cell-inner {\n color: rgba(0, 0, 0, 0.25);\n background: transparent;\n cursor: not-allowed;\n}\n/* stylelint-disable selector-type-no-unknown,selector-no-vendor-prefix */\n_:-ms-fullscreen .ant-picker-range-wrapper .ant-picker-month-panel .ant-picker-cell,\n:root .ant-picker-range-wrapper .ant-picker-month-panel .ant-picker-cell,\n_:-ms-fullscreen .ant-picker-range-wrapper .ant-picker-year-panel .ant-picker-cell,\n:root .ant-picker-range-wrapper .ant-picker-year-panel .ant-picker-cell {\n padding: 21px 0;\n}\n.ant-picker-rtl {\n direction: rtl;\n}\n.ant-picker-rtl .ant-picker-suffix {\n margin-right: 4px;\n margin-left: 0;\n}\n.ant-picker-rtl .ant-picker-clear {\n right: auto;\n left: 0;\n}\n.ant-picker-rtl .ant-picker-separator {\n transform: rotate(180deg);\n}\n.ant-picker-panel-rtl .ant-picker-header-view button:not(:first-child) {\n margin-right: 8px;\n margin-left: 0;\n}\n.ant-picker-rtl.ant-picker-range .ant-picker-clear {\n right: auto;\n left: 11px;\n}\n.ant-picker-rtl.ant-picker-range .ant-picker-active-bar {\n margin-right: 11px;\n margin-left: 0;\n}\n.ant-picker-rtl.ant-picker-range.ant-picker-small .ant-picker-active-bar {\n margin-right: 7px;\n}\n.ant-picker-dropdown-rtl .ant-picker-ranges {\n text-align: right;\n}\n.ant-picker-dropdown-rtl .ant-picker-ranges .ant-picker-ok {\n float: left;\n margin-right: 8px;\n margin-left: 0;\n}\n.ant-picker-panel-rtl {\n direction: rtl;\n}\n.ant-picker-panel-rtl .ant-picker-prev-icon,\n.ant-picker-panel-rtl .ant-picker-super-prev-icon {\n transform: rotate(135deg);\n}\n.ant-picker-panel-rtl .ant-picker-next-icon,\n.ant-picker-panel-rtl .ant-picker-super-next-icon {\n transform: rotate(-45deg);\n}\n.ant-picker-cell .ant-picker-cell-inner {\n position: relative;\n z-index: 2;\n display: inline-block;\n min-width: 24px;\n height: 24px;\n line-height: 24px;\n border-radius: 5px;\n transition: background 0.3s, border 0.3s;\n}\n.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-start::before {\n right: 50%;\n left: 0;\n}\n.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-end::before {\n right: 0;\n left: 50%;\n}\n.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-start.ant-picker-cell-range-end::before {\n right: 50%;\n left: 50%;\n}\n.ant-picker-panel-rtl .ant-picker-date-panel .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-start .ant-picker-cell-inner::after {\n right: 0;\n left: -6px;\n}\n.ant-picker-panel-rtl .ant-picker-date-panel .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-end .ant-picker-cell-inner::after {\n right: -6px;\n left: 0;\n}\n.ant-picker-panel-rtl .ant-picker-cell-range-hover.ant-picker-cell-range-start::after {\n right: 0;\n left: 50%;\n}\n.ant-picker-panel-rtl .ant-picker-cell-range-hover.ant-picker-cell-range-end::after {\n right: 50%;\n left: 0;\n}\n.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-start:not(.ant-picker-cell-range-start-single):not(.ant-picker-cell-range-end) .ant-picker-cell-inner {\n border-radius: 0 5px 5px 0;\n}\n.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-end:not(.ant-picker-cell-range-end-single):not(.ant-picker-cell-range-start) .ant-picker-cell-inner {\n border-radius: 5px 0 0 5px;\n}\n.ant-picker-panel-rtl tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover:not(.ant-picker-cell-selected):first-child::after,\n.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-start.ant-picker-cell-range-hover-edge-start.ant-picker-cell-range-hover-edge-start-near-range::after,\n.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-hover-edge-start:not(.ant-picker-cell-range-hover-edge-start-near-range)::after,\n.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-hover-start::after {\n right: 6px;\n left: 0;\n border-right: 1px dashed #b1b2f1;\n border-left: none;\n border-radius: 0 5px 5px 0;\n}\n.ant-picker-panel-rtl tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover:not(.ant-picker-cell-selected):last-child::after,\n.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-end.ant-picker-cell-range-hover-edge-end.ant-picker-cell-range-hover-edge-end-near-range::after,\n.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-hover-edge-end:not(.ant-picker-cell-range-hover-edge-end-near-range)::after,\n.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-hover-end::after {\n right: 0;\n left: 6px;\n border-right: none;\n border-left: 1px dashed #b1b2f1;\n border-radius: 5px 0 0 5px;\n}\n.ant-picker-panel-rtl tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::after,\n.ant-picker-panel-rtl tr > .ant-picker-cell-in-view.ant-picker-cell-range-hover-end:first-child::after,\n.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-start.ant-picker-cell-range-hover-edge-start:not(.ant-picker-cell-range-hover)::after,\n.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-start.ant-picker-cell-range-hover-end.ant-picker-cell-range-hover-edge-start:not(.ant-picker-cell-range-hover)::after,\n.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-end.ant-picker-cell-range-hover-start.ant-picker-cell-range-hover-edge-end:not(.ant-picker-cell-range-hover)::after,\n.ant-picker-panel-rtl tr > .ant-picker-cell-in-view.ant-picker-cell-start.ant-picker-cell-range-hover.ant-picker-cell-range-hover-edge-start:last-child::after,\n.ant-picker-panel-rtl tr > .ant-picker-cell-in-view.ant-picker-cell-end.ant-picker-cell-range-hover.ant-picker-cell-range-hover-edge-end:first-child::after {\n right: 6px;\n left: 6px;\n border-right: 1px dashed #b1b2f1;\n border-left: 1px dashed #b1b2f1;\n border-radius: 5px;\n}\n.ant-picker-dropdown-rtl .ant-picker-footer-extra {\n direction: rtl;\n text-align: right;\n}\n.ant-picker-panel-rtl .ant-picker-time-panel {\n direction: ltr;\n}\n.ant-descriptions-header {\n display: flex;\n align-items: center;\n margin-bottom: 20px;\n}\n.ant-descriptions-title {\n flex: auto;\n overflow: hidden;\n color: rgba(0, 0, 0, 0.85);\n font-weight: bold;\n font-size: 16px;\n line-height: 1.5715;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.ant-descriptions-extra {\n margin-left: auto;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n}\n.ant-descriptions-view {\n width: 100%;\n border-radius: 5px;\n}\n.ant-descriptions-view table {\n width: 100%;\n table-layout: fixed;\n}\n.ant-descriptions-row > th,\n.ant-descriptions-row > td {\n padding-bottom: 16px;\n}\n.ant-descriptions-row:last-child {\n border-bottom: none;\n}\n.ant-descriptions-item-label {\n color: rgba(0, 0, 0, 0.85);\n font-weight: normal;\n font-size: 14px;\n line-height: 1.5715;\n text-align: start;\n}\n.ant-descriptions-item-label::after {\n content: ':';\n position: relative;\n top: -0.5px;\n margin: 0 8px 0 2px;\n}\n.ant-descriptions-item-label.ant-descriptions-item-no-colon::after {\n content: ' ';\n}\n.ant-descriptions-item-no-label::after {\n margin: 0;\n content: '';\n}\n.ant-descriptions-item-content {\n display: table-cell;\n flex: 1;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n line-height: 1.5715;\n word-break: break-word;\n overflow-wrap: break-word;\n}\n.ant-descriptions-item {\n padding-bottom: 0;\n vertical-align: top;\n}\n.ant-descriptions-item-container {\n display: flex;\n}\n.ant-descriptions-item-container .ant-descriptions-item-label,\n.ant-descriptions-item-container .ant-descriptions-item-content {\n display: inline-flex;\n align-items: baseline;\n}\n.ant-descriptions-middle .ant-descriptions-row > th,\n.ant-descriptions-middle .ant-descriptions-row > td {\n padding-bottom: 12px;\n}\n.ant-descriptions-small .ant-descriptions-row > th,\n.ant-descriptions-small .ant-descriptions-row > td {\n padding-bottom: 8px;\n}\n.ant-descriptions-bordered .ant-descriptions-view {\n border: 1px solid #f0f0f0;\n}\n.ant-descriptions-bordered .ant-descriptions-view > table {\n table-layout: auto;\n border-collapse: collapse;\n}\n.ant-descriptions-bordered .ant-descriptions-item-label,\n.ant-descriptions-bordered .ant-descriptions-item-content {\n padding: 16px 24px;\n border-right: 1px solid #f0f0f0;\n}\n.ant-descriptions-bordered .ant-descriptions-item-label:last-child,\n.ant-descriptions-bordered .ant-descriptions-item-content:last-child {\n border-right: none;\n}\n.ant-descriptions-bordered .ant-descriptions-item-label {\n background-color: #fafafa;\n}\n.ant-descriptions-bordered .ant-descriptions-item-label::after {\n display: none;\n}\n.ant-descriptions-bordered .ant-descriptions-row {\n border-bottom: 1px solid #f0f0f0;\n}\n.ant-descriptions-bordered .ant-descriptions-row:last-child {\n border-bottom: none;\n}\n.ant-descriptions-bordered.ant-descriptions-middle .ant-descriptions-item-label,\n.ant-descriptions-bordered.ant-descriptions-middle .ant-descriptions-item-content {\n padding: 12px 24px;\n}\n.ant-descriptions-bordered.ant-descriptions-small .ant-descriptions-item-label,\n.ant-descriptions-bordered.ant-descriptions-small .ant-descriptions-item-content {\n padding: 8px 16px;\n}\n.ant-descriptions-rtl {\n direction: rtl;\n}\n.ant-descriptions-rtl .ant-descriptions-item-label::after {\n margin: 0 2px 0 8px;\n}\n.ant-descriptions-rtl.ant-descriptions-bordered .ant-descriptions-item-label,\n.ant-descriptions-rtl.ant-descriptions-bordered .ant-descriptions-item-content {\n border-right: none;\n border-left: 1px solid #f0f0f0;\n}\n.ant-descriptions-rtl.ant-descriptions-bordered .ant-descriptions-item-label:last-child,\n.ant-descriptions-rtl.ant-descriptions-bordered .ant-descriptions-item-content:last-child {\n border-left: none;\n}\n.ant-divider {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n border-top: 1px solid rgba(0, 0, 0, 0.06);\n}\n.ant-divider-vertical {\n position: relative;\n top: -0.06em;\n display: inline-block;\n height: 0.9em;\n margin: 0 8px;\n vertical-align: middle;\n border-top: 0;\n border-left: 1px solid rgba(0, 0, 0, 0.06);\n}\n.ant-divider-horizontal {\n display: flex;\n clear: both;\n width: 100%;\n min-width: 100%;\n margin: 24px 0;\n}\n.ant-divider-horizontal.ant-divider-with-text {\n display: flex;\n margin: 16px 0;\n color: rgba(0, 0, 0, 0.85);\n font-weight: 500;\n font-size: 16px;\n white-space: nowrap;\n text-align: center;\n border-top: 0;\n border-top-color: rgba(0, 0, 0, 0.06);\n}\n.ant-divider-horizontal.ant-divider-with-text::before,\n.ant-divider-horizontal.ant-divider-with-text::after {\n position: relative;\n top: 50%;\n width: 50%;\n border-top: 1px solid transparent;\n border-top-color: inherit;\n border-bottom: 0;\n transform: translateY(50%);\n content: '';\n}\n.ant-divider-horizontal.ant-divider-with-text-left::before {\n top: 50%;\n width: 5%;\n}\n.ant-divider-horizontal.ant-divider-with-text-left::after {\n top: 50%;\n width: 95%;\n}\n.ant-divider-horizontal.ant-divider-with-text-right::before {\n top: 50%;\n width: 95%;\n}\n.ant-divider-horizontal.ant-divider-with-text-right::after {\n top: 50%;\n width: 5%;\n}\n.ant-divider-inner-text {\n display: inline-block;\n padding: 0 1em;\n}\n.ant-divider-dashed {\n background: none;\n border-color: rgba(0, 0, 0, 0.06);\n border-style: dashed;\n border-width: 1px 0 0;\n}\n.ant-divider-horizontal.ant-divider-with-text.ant-divider-dashed::before,\n.ant-divider-horizontal.ant-divider-with-text.ant-divider-dashed::after {\n border-style: dashed none none;\n}\n.ant-divider-vertical.ant-divider-dashed {\n border-width: 0 0 0 1px;\n}\n.ant-divider-plain.ant-divider-with-text {\n color: rgba(0, 0, 0, 0.85);\n font-weight: normal;\n font-size: 14px;\n}\n.ant-divider-horizontal.ant-divider-with-text-left.ant-divider-no-default-orientation-margin-left::before {\n width: 0;\n}\n.ant-divider-horizontal.ant-divider-with-text-left.ant-divider-no-default-orientation-margin-left::after {\n width: 100%;\n}\n.ant-divider-horizontal.ant-divider-with-text-left.ant-divider-no-default-orientation-margin-left .ant-divider-inner-text {\n padding-left: 0;\n}\n.ant-divider-horizontal.ant-divider-with-text-right.ant-divider-no-default-orientation-margin-right::before {\n width: 100%;\n}\n.ant-divider-horizontal.ant-divider-with-text-right.ant-divider-no-default-orientation-margin-right::after {\n width: 0;\n}\n.ant-divider-horizontal.ant-divider-with-text-right.ant-divider-no-default-orientation-margin-right .ant-divider-inner-text {\n padding-right: 0;\n}\n.ant-divider-rtl {\n direction: rtl;\n}\n.ant-divider-rtl.ant-divider-horizontal.ant-divider-with-text-left::before {\n width: 95%;\n}\n.ant-divider-rtl.ant-divider-horizontal.ant-divider-with-text-left::after {\n width: 5%;\n}\n.ant-divider-rtl.ant-divider-horizontal.ant-divider-with-text-right::before {\n width: 5%;\n}\n.ant-divider-rtl.ant-divider-horizontal.ant-divider-with-text-right::after {\n width: 95%;\n}\n.ant-drawer {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1000;\n pointer-events: none;\n}\n.ant-drawer-inline {\n position: absolute;\n}\n.ant-drawer-mask {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1000;\n background: rgba(0, 0, 0, 0.45);\n pointer-events: auto;\n}\n.ant-drawer-content-wrapper {\n position: absolute;\n z-index: 1000;\n transition: all 0.3s;\n}\n.ant-drawer-content-wrapper-hidden {\n display: none;\n}\n.ant-drawer-left > .ant-drawer-content-wrapper {\n top: 0;\n bottom: 0;\n left: 0;\n box-shadow: 6px 0 16px -8px rgba(0, 0, 0, 0.08), 9px 0 28px 0 rgba(0, 0, 0, 0.05), 12px 0 48px 16px rgba(0, 0, 0, 0.03);\n}\n.ant-drawer-right > .ant-drawer-content-wrapper {\n top: 0;\n right: 0;\n bottom: 0;\n box-shadow: -6px 0 16px -8px rgba(0, 0, 0, 0.08), -9px 0 28px 0 rgba(0, 0, 0, 0.05), -12px 0 48px 16px rgba(0, 0, 0, 0.03);\n}\n.ant-drawer-top > .ant-drawer-content-wrapper {\n top: 0;\n right: 0;\n left: 0;\n box-shadow: 0 6px 16px -8px rgba(0, 0, 0, 0.08), 0 9px 28px 0 rgba(0, 0, 0, 0.05), 0 12px 48px 16px rgba(0, 0, 0, 0.03);\n}\n.ant-drawer-bottom > .ant-drawer-content-wrapper {\n right: 0;\n bottom: 0;\n left: 0;\n box-shadow: 0 -6px 16px -8px rgba(0, 0, 0, 0.08), 0 -9px 28px 0 rgba(0, 0, 0, 0.05), 0 -12px 48px 16px rgba(0, 0, 0, 0.03);\n}\n.ant-drawer-content {\n width: 100%;\n height: 100%;\n overflow: auto;\n background: #fff;\n pointer-events: auto;\n}\n.ant-drawer-wrapper-body {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n}\n.ant-drawer-header {\n display: flex;\n flex: 0;\n align-items: center;\n padding: 16px 24px;\n font-size: 16px;\n line-height: 22px;\n border-bottom: 1px solid #f0f0f0;\n}\n.ant-drawer-header-title {\n display: flex;\n flex: 1;\n align-items: center;\n min-width: 0;\n min-height: 0;\n}\n.ant-drawer-extra {\n flex: 0;\n}\n.ant-drawer-close {\n display: inline-block;\n margin-right: 12px;\n color: rgba(0, 0, 0, 0.45);\n font-weight: 700;\n font-size: 16px;\n font-style: normal;\n line-height: 1;\n text-align: center;\n text-transform: none;\n text-decoration: none;\n background: transparent;\n border: 0;\n outline: 0;\n cursor: pointer;\n transition: color 0.3s;\n text-rendering: auto;\n}\n.ant-drawer-close:focus,\n.ant-drawer-close:hover {\n color: rgba(0, 0, 0, 0.75);\n text-decoration: none;\n}\n.ant-drawer-title {\n flex: 1;\n margin: 0;\n color: rgba(0, 0, 0, 0.85);\n font-weight: 500;\n font-size: 16px;\n line-height: 22px;\n}\n.ant-drawer-body {\n flex: 1;\n min-width: 0;\n min-height: 0;\n padding: 24px;\n overflow: auto;\n}\n.ant-drawer-footer {\n flex-shrink: 0;\n padding: 10px 16px;\n border-top: 1px solid #f0f0f0;\n}\n.panel-motion-enter-start,\n.panel-motion-appear-start,\n.panel-motion-leave-start {\n transition: none;\n}\n.panel-motion-enter-active,\n.panel-motion-appear-active,\n.panel-motion-leave-active {\n transition: all 0.3s;\n}\n.ant-drawer-mask-motion-enter-active,\n.ant-drawer-mask-motion-appear-active,\n.ant-drawer-mask-motion-leave-active {\n transition: all 0.3s;\n}\n.ant-drawer-mask-motion-enter,\n.ant-drawer-mask-motion-appear {\n opacity: 0;\n}\n.ant-drawer-mask-motion-enter-active,\n.ant-drawer-mask-motion-appear-active {\n opacity: 1;\n}\n.ant-drawer-mask-motion-leave {\n opacity: 1;\n}\n.ant-drawer-mask-motion-leave-active {\n opacity: 0;\n}\n.ant-drawer-panel-motion-left-enter-start,\n.ant-drawer-panel-motion-left-appear-start,\n.ant-drawer-panel-motion-left-leave-start {\n transition: none;\n}\n.ant-drawer-panel-motion-left-enter-active,\n.ant-drawer-panel-motion-left-appear-active,\n.ant-drawer-panel-motion-left-leave-active {\n transition: all 0.3s;\n}\n.ant-drawer-panel-motion-left-enter-start,\n.ant-drawer-panel-motion-left-appear-start {\n transform: translateX(-100%) !important;\n}\n.ant-drawer-panel-motion-left-enter-active,\n.ant-drawer-panel-motion-left-appear-active {\n transform: translateX(0);\n}\n.ant-drawer-panel-motion-left-leave {\n transform: translateX(0);\n}\n.ant-drawer-panel-motion-left-leave-active {\n transform: translateX(-100%);\n}\n.ant-drawer-panel-motion-right-enter-start,\n.ant-drawer-panel-motion-right-appear-start,\n.ant-drawer-panel-motion-right-leave-start {\n transition: none;\n}\n.ant-drawer-panel-motion-right-enter-active,\n.ant-drawer-panel-motion-right-appear-active,\n.ant-drawer-panel-motion-right-leave-active {\n transition: all 0.3s;\n}\n.ant-drawer-panel-motion-right-enter-start,\n.ant-drawer-panel-motion-right-appear-start {\n transform: translateX(100%) !important;\n}\n.ant-drawer-panel-motion-right-enter-active,\n.ant-drawer-panel-motion-right-appear-active {\n transform: translateX(0);\n}\n.ant-drawer-panel-motion-right-leave {\n transform: translateX(0);\n}\n.ant-drawer-panel-motion-right-leave-active {\n transform: translateX(100%);\n}\n.ant-drawer-panel-motion-top-enter-start,\n.ant-drawer-panel-motion-top-appear-start,\n.ant-drawer-panel-motion-top-leave-start {\n transition: none;\n}\n.ant-drawer-panel-motion-top-enter-active,\n.ant-drawer-panel-motion-top-appear-active,\n.ant-drawer-panel-motion-top-leave-active {\n transition: all 0.3s;\n}\n.ant-drawer-panel-motion-top-enter-start,\n.ant-drawer-panel-motion-top-appear-start {\n transform: translateY(-100%) !important;\n}\n.ant-drawer-panel-motion-top-enter-active,\n.ant-drawer-panel-motion-top-appear-active {\n transform: translateY(0);\n}\n.ant-drawer-panel-motion-top-leave {\n transform: translateY(0);\n}\n.ant-drawer-panel-motion-top-leave-active {\n transform: translateY(-100%);\n}\n.ant-drawer-panel-motion-bottom-enter-start,\n.ant-drawer-panel-motion-bottom-appear-start,\n.ant-drawer-panel-motion-bottom-leave-start {\n transition: none;\n}\n.ant-drawer-panel-motion-bottom-enter-active,\n.ant-drawer-panel-motion-bottom-appear-active,\n.ant-drawer-panel-motion-bottom-leave-active {\n transition: all 0.3s;\n}\n.ant-drawer-panel-motion-bottom-enter-start,\n.ant-drawer-panel-motion-bottom-appear-start {\n transform: translateY(100%) !important;\n}\n.ant-drawer-panel-motion-bottom-enter-active,\n.ant-drawer-panel-motion-bottom-appear-active {\n transform: translateY(0);\n}\n.ant-drawer-panel-motion-bottom-leave {\n transform: translateY(0);\n}\n.ant-drawer-panel-motion-bottom-leave-active {\n transform: translateY(100%);\n}\n.ant-drawer-rtl {\n direction: rtl;\n}\n.ant-drawer-rtl .ant-drawer-close {\n margin-right: 0;\n margin-left: 12px;\n}\n.ant-dropdown-menu-item.ant-dropdown-menu-item-danger {\n color: #ff4d4f;\n}\n.ant-dropdown-menu-item.ant-dropdown-menu-item-danger:hover {\n color: #fff;\n background-color: #ff4d4f;\n}\n.ant-dropdown {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: absolute;\n top: -9999px;\n left: -9999px;\n z-index: 1050;\n display: block;\n}\n.ant-dropdown::before {\n position: absolute;\n top: -4px;\n right: 0;\n bottom: -4px;\n left: -7px;\n z-index: -9999;\n opacity: 0.0001;\n content: ' ';\n}\n.ant-dropdown-wrap {\n position: relative;\n}\n.ant-dropdown-wrap .ant-btn > .anticon-down {\n font-size: 10px;\n}\n.ant-dropdown-wrap .anticon-down::before {\n transition: transform 0.2s;\n}\n.ant-dropdown-wrap-open .anticon-down::before {\n transform: rotate(180deg);\n}\n.ant-dropdown-hidden,\n.ant-dropdown-menu-hidden,\n.ant-dropdown-menu-submenu-hidden {\n display: none;\n}\n.ant-dropdown-show-arrow.ant-dropdown-placement-topLeft,\n.ant-dropdown-show-arrow.ant-dropdown-placement-top,\n.ant-dropdown-show-arrow.ant-dropdown-placement-topRight {\n padding-bottom: 15.3137085px;\n}\n.ant-dropdown-show-arrow.ant-dropdown-placement-bottomLeft,\n.ant-dropdown-show-arrow.ant-dropdown-placement-bottom,\n.ant-dropdown-show-arrow.ant-dropdown-placement-bottomRight {\n padding-top: 15.3137085px;\n}\n.ant-dropdown-arrow {\n position: absolute;\n z-index: 1;\n display: block;\n width: 11.3137085px;\n height: 11.3137085px;\n border-radius: 0 0 2px;\n pointer-events: none;\n}\n.ant-dropdown-arrow::before {\n position: absolute;\n top: -11.3137085px;\n left: -11.3137085px;\n width: 33.9411255px;\n height: 33.9411255px;\n background: #fff;\n background-repeat: no-repeat;\n background-position: -10px -10px;\n content: '';\n clip-path: inset(33% 33%);\n clip-path: path('M 9.849242404917499 24.091883092036785 A 5 5 0 0 1 13.384776310850237 22.627416997969522 L 20.627416997969522 22.627416997969522 A 2 2 0 0 0 22.627416997969522 20.627416997969522 L 22.627416997969522 13.384776310850237 A 5 5 0 0 1 24.091883092036785 9.849242404917499 L 23.091883092036785 9.849242404917499 L 9.849242404917499 23.091883092036785 Z');\n}\n.ant-dropdown-placement-top > .ant-dropdown-arrow,\n.ant-dropdown-placement-topLeft > .ant-dropdown-arrow,\n.ant-dropdown-placement-topRight > .ant-dropdown-arrow {\n bottom: 10px;\n box-shadow: 3px 3px 7px -3px rgba(0, 0, 0, 0.1);\n transform: rotate(45deg);\n}\n.ant-dropdown-placement-top > .ant-dropdown-arrow {\n left: 50%;\n transform: translateX(-50%) rotate(45deg);\n}\n.ant-dropdown-placement-topLeft > .ant-dropdown-arrow {\n left: 16px;\n}\n.ant-dropdown-placement-topRight > .ant-dropdown-arrow {\n right: 16px;\n}\n.ant-dropdown-placement-bottom > .ant-dropdown-arrow,\n.ant-dropdown-placement-bottomLeft > .ant-dropdown-arrow,\n.ant-dropdown-placement-bottomRight > .ant-dropdown-arrow {\n top: 9.41421356px;\n box-shadow: 2px 2px 5px -2px rgba(0, 0, 0, 0.1);\n transform: rotate(-135deg) translateY(-0.5px);\n}\n.ant-dropdown-placement-bottom > .ant-dropdown-arrow {\n left: 50%;\n transform: translateX(-50%) rotate(-135deg) translateY(-0.5px);\n}\n.ant-dropdown-placement-bottomLeft > .ant-dropdown-arrow {\n left: 16px;\n}\n.ant-dropdown-placement-bottomRight > .ant-dropdown-arrow {\n right: 16px;\n}\n.ant-dropdown-menu {\n position: relative;\n margin: 0;\n padding: 4px 0;\n text-align: left;\n list-style-type: none;\n background-color: #fff;\n background-clip: padding-box;\n border-radius: 5px;\n outline: none;\n box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05);\n}\n.ant-dropdown-menu-item-group-title {\n padding: 5px 12px;\n color: rgba(0, 0, 0, 0.45);\n transition: all 0.3s;\n}\n.ant-dropdown-menu-submenu-popup {\n position: absolute;\n z-index: 1050;\n background: transparent;\n box-shadow: none;\n transform-origin: 0 0;\n}\n.ant-dropdown-menu-submenu-popup ul,\n.ant-dropdown-menu-submenu-popup li {\n list-style: none;\n}\n.ant-dropdown-menu-submenu-popup ul {\n margin-right: 0.3em;\n margin-left: 0.3em;\n}\n.ant-dropdown-menu-item {\n position: relative;\n display: flex;\n align-items: center;\n}\n.ant-dropdown-menu-item-icon {\n min-width: 12px;\n margin-right: 8px;\n font-size: 12px;\n}\n.ant-dropdown-menu-title-content {\n flex: auto;\n}\n.ant-dropdown-menu-title-content > a {\n color: inherit;\n transition: all 0.3s;\n}\n.ant-dropdown-menu-title-content > a:hover {\n color: inherit;\n}\n.ant-dropdown-menu-title-content > a::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n content: '';\n}\n.ant-dropdown-menu-item,\n.ant-dropdown-menu-submenu-title {\n clear: both;\n margin: 0;\n padding: 5px 12px;\n color: rgba(0, 0, 0, 0.85);\n font-weight: normal;\n font-size: 14px;\n line-height: 22px;\n cursor: pointer;\n transition: all 0.3s;\n}\n.ant-dropdown-menu-item-selected,\n.ant-dropdown-menu-submenu-title-selected {\n color: #5b5ce1;\n background-color: #f0f2ff;\n}\n.ant-dropdown-menu-item:hover,\n.ant-dropdown-menu-submenu-title:hover,\n.ant-dropdown-menu-item.ant-dropdown-menu-item-active,\n.ant-dropdown-menu-item.ant-dropdown-menu-submenu-title-active,\n.ant-dropdown-menu-submenu-title.ant-dropdown-menu-item-active,\n.ant-dropdown-menu-submenu-title.ant-dropdown-menu-submenu-title-active {\n background-color: #f5f5f5;\n}\n.ant-dropdown-menu-item-disabled,\n.ant-dropdown-menu-submenu-title-disabled {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n}\n.ant-dropdown-menu-item-disabled:hover,\n.ant-dropdown-menu-submenu-title-disabled:hover {\n color: rgba(0, 0, 0, 0.25);\n background-color: #fff;\n cursor: not-allowed;\n}\n.ant-dropdown-menu-item-disabled a,\n.ant-dropdown-menu-submenu-title-disabled a {\n pointer-events: none;\n}\n.ant-dropdown-menu-item-divider,\n.ant-dropdown-menu-submenu-title-divider {\n height: 1px;\n margin: 4px 0;\n overflow: hidden;\n line-height: 0;\n background-color: #f0f0f0;\n}\n.ant-dropdown-menu-item .ant-dropdown-menu-submenu-expand-icon,\n.ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-expand-icon {\n position: absolute;\n right: 8px;\n}\n.ant-dropdown-menu-item .ant-dropdown-menu-submenu-expand-icon .ant-dropdown-menu-submenu-arrow-icon,\n.ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-expand-icon .ant-dropdown-menu-submenu-arrow-icon {\n margin-right: 0 !important;\n color: rgba(0, 0, 0, 0.45);\n font-size: 10px;\n font-style: normal;\n}\n.ant-dropdown-menu-item-group-list {\n margin: 0 8px;\n padding: 0;\n list-style: none;\n}\n.ant-dropdown-menu-submenu-title {\n padding-right: 24px;\n}\n.ant-dropdown-menu-submenu-vertical {\n position: relative;\n}\n.ant-dropdown-menu-submenu-vertical > .ant-dropdown-menu {\n position: absolute;\n top: 0;\n left: 100%;\n min-width: 100%;\n margin-left: 4px;\n transform-origin: 0 0;\n}\n.ant-dropdown-menu-submenu.ant-dropdown-menu-submenu-disabled .ant-dropdown-menu-submenu-title,\n.ant-dropdown-menu-submenu.ant-dropdown-menu-submenu-disabled .ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-arrow-icon {\n color: rgba(0, 0, 0, 0.25);\n background-color: #fff;\n cursor: not-allowed;\n}\n.ant-dropdown-menu-submenu-selected .ant-dropdown-menu-submenu-title {\n color: #5b5ce1;\n}\n.ant-dropdown.ant-slide-down-enter.ant-slide-down-enter-active.ant-dropdown-placement-bottomLeft,\n.ant-dropdown.ant-slide-down-appear.ant-slide-down-appear-active.ant-dropdown-placement-bottomLeft,\n.ant-dropdown.ant-slide-down-enter.ant-slide-down-enter-active.ant-dropdown-placement-bottom,\n.ant-dropdown.ant-slide-down-appear.ant-slide-down-appear-active.ant-dropdown-placement-bottom,\n.ant-dropdown.ant-slide-down-enter.ant-slide-down-enter-active.ant-dropdown-placement-bottomRight,\n.ant-dropdown.ant-slide-down-appear.ant-slide-down-appear-active.ant-dropdown-placement-bottomRight {\n animation-name: antSlideUpIn;\n}\n.ant-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-dropdown-placement-topLeft,\n.ant-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-dropdown-placement-topLeft,\n.ant-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-dropdown-placement-top,\n.ant-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-dropdown-placement-top,\n.ant-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-dropdown-placement-topRight,\n.ant-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-dropdown-placement-topRight {\n animation-name: antSlideDownIn;\n}\n.ant-dropdown.ant-slide-down-leave.ant-slide-down-leave-active.ant-dropdown-placement-bottomLeft,\n.ant-dropdown.ant-slide-down-leave.ant-slide-down-leave-active.ant-dropdown-placement-bottom,\n.ant-dropdown.ant-slide-down-leave.ant-slide-down-leave-active.ant-dropdown-placement-bottomRight {\n animation-name: antSlideUpOut;\n}\n.ant-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-dropdown-placement-topLeft,\n.ant-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-dropdown-placement-top,\n.ant-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-dropdown-placement-topRight {\n animation-name: antSlideDownOut;\n}\n.ant-dropdown-trigger > .anticon.anticon-down,\n.ant-dropdown-link > .anticon.anticon-down,\n.ant-dropdown-button > .anticon.anticon-down {\n font-size: 10px;\n vertical-align: baseline;\n}\n.ant-dropdown-button {\n white-space: nowrap;\n}\n.ant-dropdown-button.ant-btn-group > .ant-btn-loading,\n.ant-dropdown-button.ant-btn-group > .ant-btn-loading + .ant-btn {\n cursor: default;\n pointer-events: none;\n}\n.ant-dropdown-button.ant-btn-group > .ant-btn-loading + .ant-btn::before {\n display: block;\n}\n.ant-dropdown-button.ant-btn-group > .ant-btn:last-child:not(:first-child):not(.ant-btn-icon-only) {\n padding-right: 8px;\n padding-left: 8px;\n}\n.ant-dropdown-menu-dark,\n.ant-dropdown-menu-dark .ant-dropdown-menu {\n background: #001529;\n}\n.ant-dropdown-menu-dark .ant-dropdown-menu-item,\n.ant-dropdown-menu-dark .ant-dropdown-menu-submenu-title,\n.ant-dropdown-menu-dark .ant-dropdown-menu-item > a,\n.ant-dropdown-menu-dark .ant-dropdown-menu-item > .anticon + span > a {\n color: rgba(255, 255, 255, 0.65);\n}\n.ant-dropdown-menu-dark .ant-dropdown-menu-item .ant-dropdown-menu-submenu-arrow::after,\n.ant-dropdown-menu-dark .ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-arrow::after,\n.ant-dropdown-menu-dark .ant-dropdown-menu-item > a .ant-dropdown-menu-submenu-arrow::after,\n.ant-dropdown-menu-dark .ant-dropdown-menu-item > .anticon + span > a .ant-dropdown-menu-submenu-arrow::after {\n color: rgba(255, 255, 255, 0.65);\n}\n.ant-dropdown-menu-dark .ant-dropdown-menu-item:hover,\n.ant-dropdown-menu-dark .ant-dropdown-menu-submenu-title:hover,\n.ant-dropdown-menu-dark .ant-dropdown-menu-item > a:hover,\n.ant-dropdown-menu-dark .ant-dropdown-menu-item > .anticon + span > a:hover {\n color: #fff;\n background: transparent;\n}\n.ant-dropdown-menu-dark .ant-dropdown-menu-item-selected,\n.ant-dropdown-menu-dark .ant-dropdown-menu-item-selected:hover,\n.ant-dropdown-menu-dark .ant-dropdown-menu-item-selected > a {\n color: #fff;\n background: #5b5ce1;\n}\n.ant-dropdown-rtl {\n direction: rtl;\n}\n.ant-dropdown-rtl.ant-dropdown::before {\n right: -7px;\n left: 0;\n}\n.ant-dropdown-menu.ant-dropdown-menu-rtl {\n direction: rtl;\n text-align: right;\n}\n.ant-dropdown-rtl .ant-dropdown-menu-item-group-title,\n.ant-dropdown-menu-submenu-rtl .ant-dropdown-menu-item-group-title {\n direction: rtl;\n text-align: right;\n}\n.ant-dropdown-menu-submenu-popup.ant-dropdown-menu-submenu-rtl {\n transform-origin: 100% 0;\n}\n.ant-dropdown-rtl .ant-dropdown-menu-submenu-popup ul,\n.ant-dropdown-rtl .ant-dropdown-menu-submenu-popup li {\n text-align: right;\n}\n.ant-dropdown-rtl .ant-dropdown-menu-item,\n.ant-dropdown-rtl .ant-dropdown-menu-submenu-title {\n text-align: right;\n}\n.ant-dropdown-rtl .ant-dropdown-menu-item > .anticon:first-child,\n.ant-dropdown-rtl .ant-dropdown-menu-submenu-title > .anticon:first-child,\n.ant-dropdown-rtl .ant-dropdown-menu-item > span > .anticon:first-child,\n.ant-dropdown-rtl .ant-dropdown-menu-submenu-title > span > .anticon:first-child {\n margin-right: 0;\n margin-left: 8px;\n}\n.ant-dropdown-rtl .ant-dropdown-menu-item .ant-dropdown-menu-submenu-expand-icon,\n.ant-dropdown-rtl .ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-expand-icon {\n right: auto;\n left: 8px;\n}\n.ant-dropdown-rtl .ant-dropdown-menu-item .ant-dropdown-menu-submenu-expand-icon .ant-dropdown-menu-submenu-arrow-icon,\n.ant-dropdown-rtl .ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-expand-icon .ant-dropdown-menu-submenu-arrow-icon {\n margin-left: 0 !important;\n transform: scaleX(-1);\n}\n.ant-dropdown-rtl .ant-dropdown-menu-submenu-title {\n padding-right: 12px;\n padding-left: 24px;\n}\n.ant-dropdown-rtl .ant-dropdown-menu-submenu-vertical > .ant-dropdown-menu {\n right: 100%;\n left: 0;\n margin-right: 4px;\n margin-left: 0;\n}\n.ant-empty {\n margin: 0 8px;\n font-size: 14px;\n line-height: 1.5715;\n text-align: center;\n}\n.ant-empty-image {\n height: 100px;\n margin-bottom: 8px;\n}\n.ant-empty-image img {\n height: 100%;\n}\n.ant-empty-image svg {\n height: 100%;\n margin: auto;\n}\n.ant-empty-footer {\n margin-top: 16px;\n}\n.ant-empty-normal {\n margin: 32px 0;\n color: rgba(0, 0, 0, 0.25);\n}\n.ant-empty-normal .ant-empty-image {\n height: 40px;\n}\n.ant-empty-small {\n margin: 8px 0;\n color: rgba(0, 0, 0, 0.25);\n}\n.ant-empty-small .ant-empty-image {\n height: 35px;\n}\n.ant-empty-img-default-ellipse {\n fill: #f5f5f5;\n fill-opacity: 0.8;\n}\n.ant-empty-img-default-path-1 {\n fill: #aeb8c2;\n}\n.ant-empty-img-default-path-2 {\n fill: url('#linearGradient-1');\n}\n.ant-empty-img-default-path-3 {\n fill: #f5f5f7;\n}\n.ant-empty-img-default-path-4 {\n fill: #dce0e6;\n}\n.ant-empty-img-default-path-5 {\n fill: #dce0e6;\n}\n.ant-empty-img-default-g {\n fill: #fff;\n}\n.ant-empty-img-simple-ellipse {\n fill: #f5f5f5;\n}\n.ant-empty-img-simple-g {\n stroke: #d9d9d9;\n}\n.ant-empty-img-simple-path {\n fill: #fafafa;\n}\n.ant-empty-rtl {\n direction: rtl;\n}\n.ant-form-item .ant-input-number + .ant-form-text {\n margin-left: 8px;\n}\n.ant-form-inline {\n display: flex;\n flex-wrap: wrap;\n}\n.ant-form-inline .ant-form-item {\n flex: none;\n flex-wrap: nowrap;\n margin-right: 16px;\n margin-bottom: 0;\n}\n.ant-form-inline .ant-form-item-with-help {\n margin-bottom: 24px;\n}\n.ant-form-inline .ant-form-item > .ant-form-item-label,\n.ant-form-inline .ant-form-item > .ant-form-item-control {\n display: inline-block;\n vertical-align: top;\n}\n.ant-form-inline .ant-form-item > .ant-form-item-label {\n flex: none;\n}\n.ant-form-inline .ant-form-item .ant-form-text {\n display: inline-block;\n}\n.ant-form-inline .ant-form-item .ant-form-item-has-feedback {\n display: inline-block;\n}\n.ant-form-horizontal .ant-form-item-label {\n flex-grow: 0;\n}\n.ant-form-horizontal .ant-form-item-control {\n flex: 1 1 0;\n min-width: 0;\n}\n.ant-form-horizontal .ant-form-item-label[class$='-24'] + .ant-form-item-control,\n.ant-form-horizontal .ant-form-item-label[class*='-24 '] + .ant-form-item-control {\n min-width: unset;\n}\n.ant-form-vertical .ant-form-item-row {\n flex-direction: column;\n}\n.ant-form-vertical .ant-form-item-label > label {\n height: auto;\n}\n.ant-form-vertical .ant-form-item .ant-form-item-control {\n width: 100%;\n}\n.ant-form-vertical .ant-form-item-label,\n.ant-col-24.ant-form-item-label,\n.ant-col-xl-24.ant-form-item-label {\n padding: 0 0 8px;\n line-height: 1.5715;\n white-space: initial;\n text-align: left;\n}\n.ant-form-vertical .ant-form-item-label > label,\n.ant-col-24.ant-form-item-label > label,\n.ant-col-xl-24.ant-form-item-label > label {\n margin: 0;\n}\n.ant-form-vertical .ant-form-item-label > label::after,\n.ant-col-24.ant-form-item-label > label::after,\n.ant-col-xl-24.ant-form-item-label > label::after {\n display: none;\n}\n.ant-form-rtl.ant-form-vertical .ant-form-item-label,\n.ant-form-rtl.ant-col-24.ant-form-item-label,\n.ant-form-rtl.ant-col-xl-24.ant-form-item-label {\n text-align: right;\n}\n@media (max-width: 575px) {\n .ant-form-item .ant-form-item-label {\n padding: 0 0 8px;\n line-height: 1.5715;\n white-space: initial;\n text-align: left;\n }\n .ant-form-item .ant-form-item-label > label {\n margin: 0;\n }\n .ant-form-item .ant-form-item-label > label::after {\n display: none;\n }\n .ant-form-rtl.ant-form-item .ant-form-item-label {\n text-align: right;\n }\n .ant-form .ant-form-item {\n flex-wrap: wrap;\n }\n .ant-form .ant-form-item .ant-form-item-label,\n .ant-form .ant-form-item .ant-form-item-control {\n flex: 0 0 100%;\n max-width: 100%;\n }\n .ant-col-xs-24.ant-form-item-label {\n padding: 0 0 8px;\n line-height: 1.5715;\n white-space: initial;\n text-align: left;\n }\n .ant-col-xs-24.ant-form-item-label > label {\n margin: 0;\n }\n .ant-col-xs-24.ant-form-item-label > label::after {\n display: none;\n }\n .ant-form-rtl.ant-col-xs-24.ant-form-item-label {\n text-align: right;\n }\n}\n@media (max-width: 767px) {\n .ant-col-sm-24.ant-form-item-label {\n padding: 0 0 8px;\n line-height: 1.5715;\n white-space: initial;\n text-align: left;\n }\n .ant-col-sm-24.ant-form-item-label > label {\n margin: 0;\n }\n .ant-col-sm-24.ant-form-item-label > label::after {\n display: none;\n }\n .ant-form-rtl.ant-col-sm-24.ant-form-item-label {\n text-align: right;\n }\n}\n@media (max-width: 991px) {\n .ant-col-md-24.ant-form-item-label {\n padding: 0 0 8px;\n line-height: 1.5715;\n white-space: initial;\n text-align: left;\n }\n .ant-col-md-24.ant-form-item-label > label {\n margin: 0;\n }\n .ant-col-md-24.ant-form-item-label > label::after {\n display: none;\n }\n .ant-form-rtl.ant-col-md-24.ant-form-item-label {\n text-align: right;\n }\n}\n@media (max-width: 1199px) {\n .ant-col-lg-24.ant-form-item-label {\n padding: 0 0 8px;\n line-height: 1.5715;\n white-space: initial;\n text-align: left;\n }\n .ant-col-lg-24.ant-form-item-label > label {\n margin: 0;\n }\n .ant-col-lg-24.ant-form-item-label > label::after {\n display: none;\n }\n .ant-form-rtl.ant-col-lg-24.ant-form-item-label {\n text-align: right;\n }\n}\n@media (max-width: 1599px) {\n .ant-col-xl-24.ant-form-item-label {\n padding: 0 0 8px;\n line-height: 1.5715;\n white-space: initial;\n text-align: left;\n }\n .ant-col-xl-24.ant-form-item-label > label {\n margin: 0;\n }\n .ant-col-xl-24.ant-form-item-label > label::after {\n display: none;\n }\n .ant-form-rtl.ant-col-xl-24.ant-form-item-label {\n text-align: right;\n }\n}\n.ant-form-item {\n /* Some non-status related component style is in `components.less` */\n /* To support leave along ErrorList. We add additional className to handle explain style */\n}\n.ant-form-item-explain-error {\n color: #ff4d4f;\n}\n.ant-form-item-explain-warning {\n color: #faad14;\n}\n.ant-form-item-has-feedback .ant-switch {\n margin: 2px 0 4px;\n}\n.ant-form-item-has-warning .ant-form-item-split {\n color: #faad14;\n}\n.ant-form-item-has-error .ant-form-item-split {\n color: #ff4d4f;\n}\n.ant-form {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n}\n.ant-form legend {\n display: block;\n width: 100%;\n margin-bottom: 20px;\n padding: 0;\n color: rgba(0, 0, 0, 0.45);\n font-size: 16px;\n line-height: inherit;\n border: 0;\n border-bottom: 1px solid #d9d9d9;\n}\n.ant-form label {\n font-size: 14px;\n}\n.ant-form input[type='search'] {\n box-sizing: border-box;\n}\n.ant-form input[type='radio'],\n.ant-form input[type='checkbox'] {\n line-height: normal;\n}\n.ant-form input[type='file'] {\n display: block;\n}\n.ant-form input[type='range'] {\n display: block;\n width: 100%;\n}\n.ant-form select[multiple],\n.ant-form select[size] {\n height: auto;\n}\n.ant-form input[type='file']:focus,\n.ant-form input[type='radio']:focus,\n.ant-form input[type='checkbox']:focus {\n outline: thin dotted;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n.ant-form output {\n display: block;\n padding-top: 15px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n line-height: 1.5715;\n}\n.ant-form .ant-form-text {\n display: inline-block;\n padding-right: 8px;\n}\n.ant-form-small .ant-form-item-label > label {\n height: 24px;\n}\n.ant-form-small .ant-form-item-control-input {\n min-height: 24px;\n}\n.ant-form-large .ant-form-item-label > label {\n height: 40px;\n}\n.ant-form-large .ant-form-item-control-input {\n min-height: 40px;\n}\n.ant-form-item {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n margin-bottom: 24px;\n vertical-align: top;\n}\n.ant-form-item-with-help {\n transition: none;\n}\n.ant-form-item-hidden,\n.ant-form-item-hidden.ant-row {\n display: none;\n}\n.ant-form-item-label {\n display: inline-block;\n flex-grow: 0;\n overflow: hidden;\n white-space: nowrap;\n text-align: right;\n vertical-align: middle;\n}\n.ant-form-item-label-left {\n text-align: left;\n}\n.ant-form-item-label-wrap {\n overflow: unset;\n line-height: 1.3215em;\n white-space: unset;\n}\n.ant-form-item-label > label {\n position: relative;\n display: inline-flex;\n align-items: center;\n max-width: 100%;\n height: 32px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n}\n.ant-form-item-label > label > .anticon {\n font-size: 14px;\n vertical-align: top;\n}\n.ant-form-item-label > label.ant-form-item-required:not(.ant-form-item-required-mark-optional)::before {\n display: inline-block;\n margin-right: 4px;\n color: #ff4d4f;\n font-size: 14px;\n font-family: SimSun, sans-serif;\n line-height: 1;\n content: '*';\n}\n.ant-form-hide-required-mark .ant-form-item-label > label.ant-form-item-required:not(.ant-form-item-required-mark-optional)::before {\n display: none;\n}\n.ant-form-item-label > label .ant-form-item-optional {\n display: inline-block;\n margin-left: 4px;\n color: rgba(0, 0, 0, 0.45);\n}\n.ant-form-hide-required-mark .ant-form-item-label > label .ant-form-item-optional {\n display: none;\n}\n.ant-form-item-label > label .ant-form-item-tooltip {\n color: rgba(0, 0, 0, 0.45);\n cursor: help;\n writing-mode: horizontal-tb;\n margin-inline-start: 4px;\n}\n.ant-form-item-label > label::after {\n content: ':';\n position: relative;\n top: -0.5px;\n margin: 0 8px 0 2px;\n}\n.ant-form-item-label > label.ant-form-item-no-colon::after {\n content: ' ';\n}\n.ant-form-item-control {\n display: flex;\n flex-direction: column;\n flex-grow: 1;\n}\n.ant-form-item-control:first-child:not([class^='ant-col-']):not([class*=' ant-col-']) {\n width: 100%;\n}\n.ant-form-item-control-input {\n position: relative;\n display: flex;\n align-items: center;\n min-height: 32px;\n}\n.ant-form-item-control-input-content {\n flex: auto;\n max-width: 100%;\n}\n.ant-form-item-explain,\n.ant-form-item-extra {\n clear: both;\n color: rgba(0, 0, 0, 0.45);\n font-size: 14px;\n line-height: 1.5715;\n transition: color 0.3s cubic-bezier(0.215, 0.61, 0.355, 1);\n}\n.ant-form-item-explain-connected {\n width: 100%;\n}\n.ant-form-item-extra {\n min-height: 24px;\n}\n.ant-form-item-with-help .ant-form-item-explain {\n height: auto;\n opacity: 1;\n}\n.ant-form-item-feedback-icon {\n font-size: 14px;\n text-align: center;\n visibility: visible;\n animation: zoomIn 0.3s cubic-bezier(0.12, 0.4, 0.29, 1.46);\n pointer-events: none;\n}\n.ant-form-item-feedback-icon-success {\n color: #52c41a;\n}\n.ant-form-item-feedback-icon-error {\n color: #ff4d4f;\n}\n.ant-form-item-feedback-icon-warning {\n color: #faad14;\n}\n.ant-form-item-feedback-icon-validating {\n color: #5b5ce1;\n}\n.ant-show-help {\n transition: opacity 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\n}\n.ant-show-help-appear,\n.ant-show-help-enter {\n opacity: 0;\n}\n.ant-show-help-appear-active,\n.ant-show-help-enter-active {\n opacity: 1;\n}\n.ant-show-help-leave {\n opacity: 1;\n}\n.ant-show-help-leave-active {\n opacity: 0;\n}\n.ant-show-help-item {\n overflow: hidden;\n transition: height 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), opacity 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1) !important;\n}\n.ant-show-help-item-appear,\n.ant-show-help-item-enter {\n transform: translateY(-5px);\n opacity: 0;\n}\n.ant-show-help-item-appear-active,\n.ant-show-help-item-enter-active {\n transform: translateY(0);\n opacity: 1;\n}\n.ant-show-help-item-leave {\n transition: height 0.2s cubic-bezier(0.645, 0.045, 0.355, 1), opacity 0.2s cubic-bezier(0.645, 0.045, 0.355, 1), transform 0.2s cubic-bezier(0.645, 0.045, 0.355, 1) !important;\n}\n.ant-show-help-item-leave-active {\n transform: translateY(-5px);\n}\n@keyframes diffZoomIn1 {\n 0% {\n transform: scale(0);\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n}\n@keyframes diffZoomIn2 {\n 0% {\n transform: scale(0);\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n}\n@keyframes diffZoomIn3 {\n 0% {\n transform: scale(0);\n opacity: 0;\n }\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n}\n.ant-form-rtl {\n direction: rtl;\n}\n.ant-form-rtl .ant-form-item-label {\n text-align: left;\n}\n.ant-form-rtl .ant-form-item-label > label.ant-form-item-required::before {\n margin-right: 0;\n margin-left: 4px;\n}\n.ant-form-rtl .ant-form-item-label > label::after {\n margin: 0 2px 0 8px;\n}\n.ant-form-rtl .ant-form-item-label > label .ant-form-item-optional {\n margin-right: 4px;\n margin-left: 0;\n}\n.ant-col-rtl .ant-form-item-control:first-child {\n width: 100%;\n}\n.ant-form-rtl .ant-form-item-has-feedback .ant-input {\n padding-right: 11px;\n padding-left: 24px;\n}\n.ant-form-rtl .ant-form-item-has-feedback .ant-input-affix-wrapper .ant-input-suffix {\n padding-right: 11px;\n padding-left: 18px;\n}\n.ant-form-rtl .ant-form-item-has-feedback .ant-input-affix-wrapper .ant-input {\n padding: 0;\n}\n.ant-form-rtl .ant-form-item-has-feedback .ant-input-number-affix-wrapper .ant-input-number {\n padding: 0;\n}\n.ant-form-rtl .ant-form-item-has-feedback .ant-input-search:not(.ant-input-search-enter-button) .ant-input-suffix {\n right: auto;\n left: 28px;\n}\n.ant-form-rtl .ant-form-item-has-feedback .ant-input-number {\n padding-left: 18px;\n}\n.ant-form-rtl .ant-form-item-has-feedback > .ant-select .ant-select-arrow,\n.ant-form-rtl .ant-form-item-has-feedback > .ant-select .ant-select-clear,\n.ant-form-rtl .ant-form-item-has-feedback :not(.ant-input-group-addon) > .ant-select .ant-select-arrow,\n.ant-form-rtl .ant-form-item-has-feedback :not(.ant-input-group-addon) > .ant-select .ant-select-clear,\n.ant-form-rtl .ant-form-item-has-feedback :not(.ant-input-number-group-addon) > .ant-select .ant-select-arrow,\n.ant-form-rtl .ant-form-item-has-feedback :not(.ant-input-number-group-addon) > .ant-select .ant-select-clear {\n right: auto;\n left: 32px;\n}\n.ant-form-rtl .ant-form-item-has-feedback > .ant-select .ant-select-selection-selected-value,\n.ant-form-rtl .ant-form-item-has-feedback :not(.ant-input-group-addon) > .ant-select .ant-select-selection-selected-value,\n.ant-form-rtl .ant-form-item-has-feedback :not(.ant-input-number-group-addon) > .ant-select .ant-select-selection-selected-value {\n padding-right: 0;\n padding-left: 42px;\n}\n.ant-form-rtl .ant-form-item-has-feedback .ant-cascader-picker-arrow {\n margin-right: 0;\n margin-left: 19px;\n}\n.ant-form-rtl .ant-form-item-has-feedback .ant-cascader-picker-clear {\n right: auto;\n left: 32px;\n}\n.ant-form-rtl .ant-form-item-has-feedback .ant-picker {\n padding-right: 11px;\n padding-left: 29.2px;\n}\n.ant-form-rtl .ant-form-item-has-feedback .ant-picker-large {\n padding-right: 11px;\n padding-left: 29.2px;\n}\n.ant-form-rtl .ant-form-item-has-feedback .ant-picker-small {\n padding-right: 7px;\n padding-left: 25.2px;\n}\n.ant-form-rtl .ant-form-item-has-feedback.ant-form-item-has-success .ant-form-item-children-icon,\n.ant-form-rtl .ant-form-item-has-feedback.ant-form-item-has-warning .ant-form-item-children-icon,\n.ant-form-rtl .ant-form-item-has-feedback.ant-form-item-has-error .ant-form-item-children-icon,\n.ant-form-rtl .ant-form-item-has-feedback.ant-form-item-is-validating .ant-form-item-children-icon {\n right: auto;\n left: 0;\n}\n.ant-form-rtl.ant-form-inline .ant-form-item {\n margin-right: 0;\n margin-left: 16px;\n}\n.ant-row {\n display: flex;\n flex-flow: row wrap;\n min-width: 0;\n}\n.ant-row::before,\n.ant-row::after {\n display: flex;\n}\n.ant-row-no-wrap {\n flex-wrap: nowrap;\n}\n.ant-row-start {\n justify-content: flex-start;\n}\n.ant-row-center {\n justify-content: center;\n}\n.ant-row-end {\n justify-content: flex-end;\n}\n.ant-row-space-between {\n justify-content: space-between;\n}\n.ant-row-space-around {\n justify-content: space-around;\n}\n.ant-row-space-evenly {\n justify-content: space-evenly;\n}\n.ant-row-top {\n align-items: flex-start;\n}\n.ant-row-middle {\n align-items: center;\n}\n.ant-row-bottom {\n align-items: flex-end;\n}\n.ant-col {\n position: relative;\n max-width: 100%;\n min-height: 1px;\n}\n.ant-col-24 {\n display: block;\n flex: 0 0 100%;\n max-width: 100%;\n}\n.ant-col-push-24 {\n left: 100%;\n}\n.ant-col-pull-24 {\n right: 100%;\n}\n.ant-col-offset-24 {\n margin-left: 100%;\n}\n.ant-col-order-24 {\n order: 24;\n}\n.ant-col-23 {\n display: block;\n flex: 0 0 95.83333333%;\n max-width: 95.83333333%;\n}\n.ant-col-push-23 {\n left: 95.83333333%;\n}\n.ant-col-pull-23 {\n right: 95.83333333%;\n}\n.ant-col-offset-23 {\n margin-left: 95.83333333%;\n}\n.ant-col-order-23 {\n order: 23;\n}\n.ant-col-22 {\n display: block;\n flex: 0 0 91.66666667%;\n max-width: 91.66666667%;\n}\n.ant-col-push-22 {\n left: 91.66666667%;\n}\n.ant-col-pull-22 {\n right: 91.66666667%;\n}\n.ant-col-offset-22 {\n margin-left: 91.66666667%;\n}\n.ant-col-order-22 {\n order: 22;\n}\n.ant-col-21 {\n display: block;\n flex: 0 0 87.5%;\n max-width: 87.5%;\n}\n.ant-col-push-21 {\n left: 87.5%;\n}\n.ant-col-pull-21 {\n right: 87.5%;\n}\n.ant-col-offset-21 {\n margin-left: 87.5%;\n}\n.ant-col-order-21 {\n order: 21;\n}\n.ant-col-20 {\n display: block;\n flex: 0 0 83.33333333%;\n max-width: 83.33333333%;\n}\n.ant-col-push-20 {\n left: 83.33333333%;\n}\n.ant-col-pull-20 {\n right: 83.33333333%;\n}\n.ant-col-offset-20 {\n margin-left: 83.33333333%;\n}\n.ant-col-order-20 {\n order: 20;\n}\n.ant-col-19 {\n display: block;\n flex: 0 0 79.16666667%;\n max-width: 79.16666667%;\n}\n.ant-col-push-19 {\n left: 79.16666667%;\n}\n.ant-col-pull-19 {\n right: 79.16666667%;\n}\n.ant-col-offset-19 {\n margin-left: 79.16666667%;\n}\n.ant-col-order-19 {\n order: 19;\n}\n.ant-col-18 {\n display: block;\n flex: 0 0 75%;\n max-width: 75%;\n}\n.ant-col-push-18 {\n left: 75%;\n}\n.ant-col-pull-18 {\n right: 75%;\n}\n.ant-col-offset-18 {\n margin-left: 75%;\n}\n.ant-col-order-18 {\n order: 18;\n}\n.ant-col-17 {\n display: block;\n flex: 0 0 70.83333333%;\n max-width: 70.83333333%;\n}\n.ant-col-push-17 {\n left: 70.83333333%;\n}\n.ant-col-pull-17 {\n right: 70.83333333%;\n}\n.ant-col-offset-17 {\n margin-left: 70.83333333%;\n}\n.ant-col-order-17 {\n order: 17;\n}\n.ant-col-16 {\n display: block;\n flex: 0 0 66.66666667%;\n max-width: 66.66666667%;\n}\n.ant-col-push-16 {\n left: 66.66666667%;\n}\n.ant-col-pull-16 {\n right: 66.66666667%;\n}\n.ant-col-offset-16 {\n margin-left: 66.66666667%;\n}\n.ant-col-order-16 {\n order: 16;\n}\n.ant-col-15 {\n display: block;\n flex: 0 0 62.5%;\n max-width: 62.5%;\n}\n.ant-col-push-15 {\n left: 62.5%;\n}\n.ant-col-pull-15 {\n right: 62.5%;\n}\n.ant-col-offset-15 {\n margin-left: 62.5%;\n}\n.ant-col-order-15 {\n order: 15;\n}\n.ant-col-14 {\n display: block;\n flex: 0 0 58.33333333%;\n max-width: 58.33333333%;\n}\n.ant-col-push-14 {\n left: 58.33333333%;\n}\n.ant-col-pull-14 {\n right: 58.33333333%;\n}\n.ant-col-offset-14 {\n margin-left: 58.33333333%;\n}\n.ant-col-order-14 {\n order: 14;\n}\n.ant-col-13 {\n display: block;\n flex: 0 0 54.16666667%;\n max-width: 54.16666667%;\n}\n.ant-col-push-13 {\n left: 54.16666667%;\n}\n.ant-col-pull-13 {\n right: 54.16666667%;\n}\n.ant-col-offset-13 {\n margin-left: 54.16666667%;\n}\n.ant-col-order-13 {\n order: 13;\n}\n.ant-col-12 {\n display: block;\n flex: 0 0 50%;\n max-width: 50%;\n}\n.ant-col-push-12 {\n left: 50%;\n}\n.ant-col-pull-12 {\n right: 50%;\n}\n.ant-col-offset-12 {\n margin-left: 50%;\n}\n.ant-col-order-12 {\n order: 12;\n}\n.ant-col-11 {\n display: block;\n flex: 0 0 45.83333333%;\n max-width: 45.83333333%;\n}\n.ant-col-push-11 {\n left: 45.83333333%;\n}\n.ant-col-pull-11 {\n right: 45.83333333%;\n}\n.ant-col-offset-11 {\n margin-left: 45.83333333%;\n}\n.ant-col-order-11 {\n order: 11;\n}\n.ant-col-10 {\n display: block;\n flex: 0 0 41.66666667%;\n max-width: 41.66666667%;\n}\n.ant-col-push-10 {\n left: 41.66666667%;\n}\n.ant-col-pull-10 {\n right: 41.66666667%;\n}\n.ant-col-offset-10 {\n margin-left: 41.66666667%;\n}\n.ant-col-order-10 {\n order: 10;\n}\n.ant-col-9 {\n display: block;\n flex: 0 0 37.5%;\n max-width: 37.5%;\n}\n.ant-col-push-9 {\n left: 37.5%;\n}\n.ant-col-pull-9 {\n right: 37.5%;\n}\n.ant-col-offset-9 {\n margin-left: 37.5%;\n}\n.ant-col-order-9 {\n order: 9;\n}\n.ant-col-8 {\n display: block;\n flex: 0 0 33.33333333%;\n max-width: 33.33333333%;\n}\n.ant-col-push-8 {\n left: 33.33333333%;\n}\n.ant-col-pull-8 {\n right: 33.33333333%;\n}\n.ant-col-offset-8 {\n margin-left: 33.33333333%;\n}\n.ant-col-order-8 {\n order: 8;\n}\n.ant-col-7 {\n display: block;\n flex: 0 0 29.16666667%;\n max-width: 29.16666667%;\n}\n.ant-col-push-7 {\n left: 29.16666667%;\n}\n.ant-col-pull-7 {\n right: 29.16666667%;\n}\n.ant-col-offset-7 {\n margin-left: 29.16666667%;\n}\n.ant-col-order-7 {\n order: 7;\n}\n.ant-col-6 {\n display: block;\n flex: 0 0 25%;\n max-width: 25%;\n}\n.ant-col-push-6 {\n left: 25%;\n}\n.ant-col-pull-6 {\n right: 25%;\n}\n.ant-col-offset-6 {\n margin-left: 25%;\n}\n.ant-col-order-6 {\n order: 6;\n}\n.ant-col-5 {\n display: block;\n flex: 0 0 20.83333333%;\n max-width: 20.83333333%;\n}\n.ant-col-push-5 {\n left: 20.83333333%;\n}\n.ant-col-pull-5 {\n right: 20.83333333%;\n}\n.ant-col-offset-5 {\n margin-left: 20.83333333%;\n}\n.ant-col-order-5 {\n order: 5;\n}\n.ant-col-4 {\n display: block;\n flex: 0 0 16.66666667%;\n max-width: 16.66666667%;\n}\n.ant-col-push-4 {\n left: 16.66666667%;\n}\n.ant-col-pull-4 {\n right: 16.66666667%;\n}\n.ant-col-offset-4 {\n margin-left: 16.66666667%;\n}\n.ant-col-order-4 {\n order: 4;\n}\n.ant-col-3 {\n display: block;\n flex: 0 0 12.5%;\n max-width: 12.5%;\n}\n.ant-col-push-3 {\n left: 12.5%;\n}\n.ant-col-pull-3 {\n right: 12.5%;\n}\n.ant-col-offset-3 {\n margin-left: 12.5%;\n}\n.ant-col-order-3 {\n order: 3;\n}\n.ant-col-2 {\n display: block;\n flex: 0 0 8.33333333%;\n max-width: 8.33333333%;\n}\n.ant-col-push-2 {\n left: 8.33333333%;\n}\n.ant-col-pull-2 {\n right: 8.33333333%;\n}\n.ant-col-offset-2 {\n margin-left: 8.33333333%;\n}\n.ant-col-order-2 {\n order: 2;\n}\n.ant-col-1 {\n display: block;\n flex: 0 0 4.16666667%;\n max-width: 4.16666667%;\n}\n.ant-col-push-1 {\n left: 4.16666667%;\n}\n.ant-col-pull-1 {\n right: 4.16666667%;\n}\n.ant-col-offset-1 {\n margin-left: 4.16666667%;\n}\n.ant-col-order-1 {\n order: 1;\n}\n.ant-col-0 {\n display: none;\n}\n.ant-col-push-0 {\n left: auto;\n}\n.ant-col-pull-0 {\n right: auto;\n}\n.ant-col-push-0 {\n left: auto;\n}\n.ant-col-pull-0 {\n right: auto;\n}\n.ant-col-offset-0 {\n margin-left: 0;\n}\n.ant-col-order-0 {\n order: 0;\n}\n.ant-col-push-0.ant-col-rtl {\n right: auto;\n}\n.ant-col-pull-0.ant-col-rtl {\n left: auto;\n}\n.ant-col-push-0.ant-col-rtl {\n right: auto;\n}\n.ant-col-pull-0.ant-col-rtl {\n left: auto;\n}\n.ant-col-offset-0.ant-col-rtl {\n margin-right: 0;\n}\n.ant-col-push-1.ant-col-rtl {\n right: 4.16666667%;\n left: auto;\n}\n.ant-col-pull-1.ant-col-rtl {\n right: auto;\n left: 4.16666667%;\n}\n.ant-col-offset-1.ant-col-rtl {\n margin-right: 4.16666667%;\n margin-left: 0;\n}\n.ant-col-push-2.ant-col-rtl {\n right: 8.33333333%;\n left: auto;\n}\n.ant-col-pull-2.ant-col-rtl {\n right: auto;\n left: 8.33333333%;\n}\n.ant-col-offset-2.ant-col-rtl {\n margin-right: 8.33333333%;\n margin-left: 0;\n}\n.ant-col-push-3.ant-col-rtl {\n right: 12.5%;\n left: auto;\n}\n.ant-col-pull-3.ant-col-rtl {\n right: auto;\n left: 12.5%;\n}\n.ant-col-offset-3.ant-col-rtl {\n margin-right: 12.5%;\n margin-left: 0;\n}\n.ant-col-push-4.ant-col-rtl {\n right: 16.66666667%;\n left: auto;\n}\n.ant-col-pull-4.ant-col-rtl {\n right: auto;\n left: 16.66666667%;\n}\n.ant-col-offset-4.ant-col-rtl {\n margin-right: 16.66666667%;\n margin-left: 0;\n}\n.ant-col-push-5.ant-col-rtl {\n right: 20.83333333%;\n left: auto;\n}\n.ant-col-pull-5.ant-col-rtl {\n right: auto;\n left: 20.83333333%;\n}\n.ant-col-offset-5.ant-col-rtl {\n margin-right: 20.83333333%;\n margin-left: 0;\n}\n.ant-col-push-6.ant-col-rtl {\n right: 25%;\n left: auto;\n}\n.ant-col-pull-6.ant-col-rtl {\n right: auto;\n left: 25%;\n}\n.ant-col-offset-6.ant-col-rtl {\n margin-right: 25%;\n margin-left: 0;\n}\n.ant-col-push-7.ant-col-rtl {\n right: 29.16666667%;\n left: auto;\n}\n.ant-col-pull-7.ant-col-rtl {\n right: auto;\n left: 29.16666667%;\n}\n.ant-col-offset-7.ant-col-rtl {\n margin-right: 29.16666667%;\n margin-left: 0;\n}\n.ant-col-push-8.ant-col-rtl {\n right: 33.33333333%;\n left: auto;\n}\n.ant-col-pull-8.ant-col-rtl {\n right: auto;\n left: 33.33333333%;\n}\n.ant-col-offset-8.ant-col-rtl {\n margin-right: 33.33333333%;\n margin-left: 0;\n}\n.ant-col-push-9.ant-col-rtl {\n right: 37.5%;\n left: auto;\n}\n.ant-col-pull-9.ant-col-rtl {\n right: auto;\n left: 37.5%;\n}\n.ant-col-offset-9.ant-col-rtl {\n margin-right: 37.5%;\n margin-left: 0;\n}\n.ant-col-push-10.ant-col-rtl {\n right: 41.66666667%;\n left: auto;\n}\n.ant-col-pull-10.ant-col-rtl {\n right: auto;\n left: 41.66666667%;\n}\n.ant-col-offset-10.ant-col-rtl {\n margin-right: 41.66666667%;\n margin-left: 0;\n}\n.ant-col-push-11.ant-col-rtl {\n right: 45.83333333%;\n left: auto;\n}\n.ant-col-pull-11.ant-col-rtl {\n right: auto;\n left: 45.83333333%;\n}\n.ant-col-offset-11.ant-col-rtl {\n margin-right: 45.83333333%;\n margin-left: 0;\n}\n.ant-col-push-12.ant-col-rtl {\n right: 50%;\n left: auto;\n}\n.ant-col-pull-12.ant-col-rtl {\n right: auto;\n left: 50%;\n}\n.ant-col-offset-12.ant-col-rtl {\n margin-right: 50%;\n margin-left: 0;\n}\n.ant-col-push-13.ant-col-rtl {\n right: 54.16666667%;\n left: auto;\n}\n.ant-col-pull-13.ant-col-rtl {\n right: auto;\n left: 54.16666667%;\n}\n.ant-col-offset-13.ant-col-rtl {\n margin-right: 54.16666667%;\n margin-left: 0;\n}\n.ant-col-push-14.ant-col-rtl {\n right: 58.33333333%;\n left: auto;\n}\n.ant-col-pull-14.ant-col-rtl {\n right: auto;\n left: 58.33333333%;\n}\n.ant-col-offset-14.ant-col-rtl {\n margin-right: 58.33333333%;\n margin-left: 0;\n}\n.ant-col-push-15.ant-col-rtl {\n right: 62.5%;\n left: auto;\n}\n.ant-col-pull-15.ant-col-rtl {\n right: auto;\n left: 62.5%;\n}\n.ant-col-offset-15.ant-col-rtl {\n margin-right: 62.5%;\n margin-left: 0;\n}\n.ant-col-push-16.ant-col-rtl {\n right: 66.66666667%;\n left: auto;\n}\n.ant-col-pull-16.ant-col-rtl {\n right: auto;\n left: 66.66666667%;\n}\n.ant-col-offset-16.ant-col-rtl {\n margin-right: 66.66666667%;\n margin-left: 0;\n}\n.ant-col-push-17.ant-col-rtl {\n right: 70.83333333%;\n left: auto;\n}\n.ant-col-pull-17.ant-col-rtl {\n right: auto;\n left: 70.83333333%;\n}\n.ant-col-offset-17.ant-col-rtl {\n margin-right: 70.83333333%;\n margin-left: 0;\n}\n.ant-col-push-18.ant-col-rtl {\n right: 75%;\n left: auto;\n}\n.ant-col-pull-18.ant-col-rtl {\n right: auto;\n left: 75%;\n}\n.ant-col-offset-18.ant-col-rtl {\n margin-right: 75%;\n margin-left: 0;\n}\n.ant-col-push-19.ant-col-rtl {\n right: 79.16666667%;\n left: auto;\n}\n.ant-col-pull-19.ant-col-rtl {\n right: auto;\n left: 79.16666667%;\n}\n.ant-col-offset-19.ant-col-rtl {\n margin-right: 79.16666667%;\n margin-left: 0;\n}\n.ant-col-push-20.ant-col-rtl {\n right: 83.33333333%;\n left: auto;\n}\n.ant-col-pull-20.ant-col-rtl {\n right: auto;\n left: 83.33333333%;\n}\n.ant-col-offset-20.ant-col-rtl {\n margin-right: 83.33333333%;\n margin-left: 0;\n}\n.ant-col-push-21.ant-col-rtl {\n right: 87.5%;\n left: auto;\n}\n.ant-col-pull-21.ant-col-rtl {\n right: auto;\n left: 87.5%;\n}\n.ant-col-offset-21.ant-col-rtl {\n margin-right: 87.5%;\n margin-left: 0;\n}\n.ant-col-push-22.ant-col-rtl {\n right: 91.66666667%;\n left: auto;\n}\n.ant-col-pull-22.ant-col-rtl {\n right: auto;\n left: 91.66666667%;\n}\n.ant-col-offset-22.ant-col-rtl {\n margin-right: 91.66666667%;\n margin-left: 0;\n}\n.ant-col-push-23.ant-col-rtl {\n right: 95.83333333%;\n left: auto;\n}\n.ant-col-pull-23.ant-col-rtl {\n right: auto;\n left: 95.83333333%;\n}\n.ant-col-offset-23.ant-col-rtl {\n margin-right: 95.83333333%;\n margin-left: 0;\n}\n.ant-col-push-24.ant-col-rtl {\n right: 100%;\n left: auto;\n}\n.ant-col-pull-24.ant-col-rtl {\n right: auto;\n left: 100%;\n}\n.ant-col-offset-24.ant-col-rtl {\n margin-right: 100%;\n margin-left: 0;\n}\n.ant-col-xs-24 {\n display: block;\n flex: 0 0 100%;\n max-width: 100%;\n}\n.ant-col-xs-push-24 {\n left: 100%;\n}\n.ant-col-xs-pull-24 {\n right: 100%;\n}\n.ant-col-xs-offset-24 {\n margin-left: 100%;\n}\n.ant-col-xs-order-24 {\n order: 24;\n}\n.ant-col-xs-23 {\n display: block;\n flex: 0 0 95.83333333%;\n max-width: 95.83333333%;\n}\n.ant-col-xs-push-23 {\n left: 95.83333333%;\n}\n.ant-col-xs-pull-23 {\n right: 95.83333333%;\n}\n.ant-col-xs-offset-23 {\n margin-left: 95.83333333%;\n}\n.ant-col-xs-order-23 {\n order: 23;\n}\n.ant-col-xs-22 {\n display: block;\n flex: 0 0 91.66666667%;\n max-width: 91.66666667%;\n}\n.ant-col-xs-push-22 {\n left: 91.66666667%;\n}\n.ant-col-xs-pull-22 {\n right: 91.66666667%;\n}\n.ant-col-xs-offset-22 {\n margin-left: 91.66666667%;\n}\n.ant-col-xs-order-22 {\n order: 22;\n}\n.ant-col-xs-21 {\n display: block;\n flex: 0 0 87.5%;\n max-width: 87.5%;\n}\n.ant-col-xs-push-21 {\n left: 87.5%;\n}\n.ant-col-xs-pull-21 {\n right: 87.5%;\n}\n.ant-col-xs-offset-21 {\n margin-left: 87.5%;\n}\n.ant-col-xs-order-21 {\n order: 21;\n}\n.ant-col-xs-20 {\n display: block;\n flex: 0 0 83.33333333%;\n max-width: 83.33333333%;\n}\n.ant-col-xs-push-20 {\n left: 83.33333333%;\n}\n.ant-col-xs-pull-20 {\n right: 83.33333333%;\n}\n.ant-col-xs-offset-20 {\n margin-left: 83.33333333%;\n}\n.ant-col-xs-order-20 {\n order: 20;\n}\n.ant-col-xs-19 {\n display: block;\n flex: 0 0 79.16666667%;\n max-width: 79.16666667%;\n}\n.ant-col-xs-push-19 {\n left: 79.16666667%;\n}\n.ant-col-xs-pull-19 {\n right: 79.16666667%;\n}\n.ant-col-xs-offset-19 {\n margin-left: 79.16666667%;\n}\n.ant-col-xs-order-19 {\n order: 19;\n}\n.ant-col-xs-18 {\n display: block;\n flex: 0 0 75%;\n max-width: 75%;\n}\n.ant-col-xs-push-18 {\n left: 75%;\n}\n.ant-col-xs-pull-18 {\n right: 75%;\n}\n.ant-col-xs-offset-18 {\n margin-left: 75%;\n}\n.ant-col-xs-order-18 {\n order: 18;\n}\n.ant-col-xs-17 {\n display: block;\n flex: 0 0 70.83333333%;\n max-width: 70.83333333%;\n}\n.ant-col-xs-push-17 {\n left: 70.83333333%;\n}\n.ant-col-xs-pull-17 {\n right: 70.83333333%;\n}\n.ant-col-xs-offset-17 {\n margin-left: 70.83333333%;\n}\n.ant-col-xs-order-17 {\n order: 17;\n}\n.ant-col-xs-16 {\n display: block;\n flex: 0 0 66.66666667%;\n max-width: 66.66666667%;\n}\n.ant-col-xs-push-16 {\n left: 66.66666667%;\n}\n.ant-col-xs-pull-16 {\n right: 66.66666667%;\n}\n.ant-col-xs-offset-16 {\n margin-left: 66.66666667%;\n}\n.ant-col-xs-order-16 {\n order: 16;\n}\n.ant-col-xs-15 {\n display: block;\n flex: 0 0 62.5%;\n max-width: 62.5%;\n}\n.ant-col-xs-push-15 {\n left: 62.5%;\n}\n.ant-col-xs-pull-15 {\n right: 62.5%;\n}\n.ant-col-xs-offset-15 {\n margin-left: 62.5%;\n}\n.ant-col-xs-order-15 {\n order: 15;\n}\n.ant-col-xs-14 {\n display: block;\n flex: 0 0 58.33333333%;\n max-width: 58.33333333%;\n}\n.ant-col-xs-push-14 {\n left: 58.33333333%;\n}\n.ant-col-xs-pull-14 {\n right: 58.33333333%;\n}\n.ant-col-xs-offset-14 {\n margin-left: 58.33333333%;\n}\n.ant-col-xs-order-14 {\n order: 14;\n}\n.ant-col-xs-13 {\n display: block;\n flex: 0 0 54.16666667%;\n max-width: 54.16666667%;\n}\n.ant-col-xs-push-13 {\n left: 54.16666667%;\n}\n.ant-col-xs-pull-13 {\n right: 54.16666667%;\n}\n.ant-col-xs-offset-13 {\n margin-left: 54.16666667%;\n}\n.ant-col-xs-order-13 {\n order: 13;\n}\n.ant-col-xs-12 {\n display: block;\n flex: 0 0 50%;\n max-width: 50%;\n}\n.ant-col-xs-push-12 {\n left: 50%;\n}\n.ant-col-xs-pull-12 {\n right: 50%;\n}\n.ant-col-xs-offset-12 {\n margin-left: 50%;\n}\n.ant-col-xs-order-12 {\n order: 12;\n}\n.ant-col-xs-11 {\n display: block;\n flex: 0 0 45.83333333%;\n max-width: 45.83333333%;\n}\n.ant-col-xs-push-11 {\n left: 45.83333333%;\n}\n.ant-col-xs-pull-11 {\n right: 45.83333333%;\n}\n.ant-col-xs-offset-11 {\n margin-left: 45.83333333%;\n}\n.ant-col-xs-order-11 {\n order: 11;\n}\n.ant-col-xs-10 {\n display: block;\n flex: 0 0 41.66666667%;\n max-width: 41.66666667%;\n}\n.ant-col-xs-push-10 {\n left: 41.66666667%;\n}\n.ant-col-xs-pull-10 {\n right: 41.66666667%;\n}\n.ant-col-xs-offset-10 {\n margin-left: 41.66666667%;\n}\n.ant-col-xs-order-10 {\n order: 10;\n}\n.ant-col-xs-9 {\n display: block;\n flex: 0 0 37.5%;\n max-width: 37.5%;\n}\n.ant-col-xs-push-9 {\n left: 37.5%;\n}\n.ant-col-xs-pull-9 {\n right: 37.5%;\n}\n.ant-col-xs-offset-9 {\n margin-left: 37.5%;\n}\n.ant-col-xs-order-9 {\n order: 9;\n}\n.ant-col-xs-8 {\n display: block;\n flex: 0 0 33.33333333%;\n max-width: 33.33333333%;\n}\n.ant-col-xs-push-8 {\n left: 33.33333333%;\n}\n.ant-col-xs-pull-8 {\n right: 33.33333333%;\n}\n.ant-col-xs-offset-8 {\n margin-left: 33.33333333%;\n}\n.ant-col-xs-order-8 {\n order: 8;\n}\n.ant-col-xs-7 {\n display: block;\n flex: 0 0 29.16666667%;\n max-width: 29.16666667%;\n}\n.ant-col-xs-push-7 {\n left: 29.16666667%;\n}\n.ant-col-xs-pull-7 {\n right: 29.16666667%;\n}\n.ant-col-xs-offset-7 {\n margin-left: 29.16666667%;\n}\n.ant-col-xs-order-7 {\n order: 7;\n}\n.ant-col-xs-6 {\n display: block;\n flex: 0 0 25%;\n max-width: 25%;\n}\n.ant-col-xs-push-6 {\n left: 25%;\n}\n.ant-col-xs-pull-6 {\n right: 25%;\n}\n.ant-col-xs-offset-6 {\n margin-left: 25%;\n}\n.ant-col-xs-order-6 {\n order: 6;\n}\n.ant-col-xs-5 {\n display: block;\n flex: 0 0 20.83333333%;\n max-width: 20.83333333%;\n}\n.ant-col-xs-push-5 {\n left: 20.83333333%;\n}\n.ant-col-xs-pull-5 {\n right: 20.83333333%;\n}\n.ant-col-xs-offset-5 {\n margin-left: 20.83333333%;\n}\n.ant-col-xs-order-5 {\n order: 5;\n}\n.ant-col-xs-4 {\n display: block;\n flex: 0 0 16.66666667%;\n max-width: 16.66666667%;\n}\n.ant-col-xs-push-4 {\n left: 16.66666667%;\n}\n.ant-col-xs-pull-4 {\n right: 16.66666667%;\n}\n.ant-col-xs-offset-4 {\n margin-left: 16.66666667%;\n}\n.ant-col-xs-order-4 {\n order: 4;\n}\n.ant-col-xs-3 {\n display: block;\n flex: 0 0 12.5%;\n max-width: 12.5%;\n}\n.ant-col-xs-push-3 {\n left: 12.5%;\n}\n.ant-col-xs-pull-3 {\n right: 12.5%;\n}\n.ant-col-xs-offset-3 {\n margin-left: 12.5%;\n}\n.ant-col-xs-order-3 {\n order: 3;\n}\n.ant-col-xs-2 {\n display: block;\n flex: 0 0 8.33333333%;\n max-width: 8.33333333%;\n}\n.ant-col-xs-push-2 {\n left: 8.33333333%;\n}\n.ant-col-xs-pull-2 {\n right: 8.33333333%;\n}\n.ant-col-xs-offset-2 {\n margin-left: 8.33333333%;\n}\n.ant-col-xs-order-2 {\n order: 2;\n}\n.ant-col-xs-1 {\n display: block;\n flex: 0 0 4.16666667%;\n max-width: 4.16666667%;\n}\n.ant-col-xs-push-1 {\n left: 4.16666667%;\n}\n.ant-col-xs-pull-1 {\n right: 4.16666667%;\n}\n.ant-col-xs-offset-1 {\n margin-left: 4.16666667%;\n}\n.ant-col-xs-order-1 {\n order: 1;\n}\n.ant-col-xs-0 {\n display: none;\n}\n.ant-col-push-0 {\n left: auto;\n}\n.ant-col-pull-0 {\n right: auto;\n}\n.ant-col-xs-push-0 {\n left: auto;\n}\n.ant-col-xs-pull-0 {\n right: auto;\n}\n.ant-col-xs-offset-0 {\n margin-left: 0;\n}\n.ant-col-xs-order-0 {\n order: 0;\n}\n.ant-col-push-0.ant-col-rtl {\n right: auto;\n}\n.ant-col-pull-0.ant-col-rtl {\n left: auto;\n}\n.ant-col-xs-push-0.ant-col-rtl {\n right: auto;\n}\n.ant-col-xs-pull-0.ant-col-rtl {\n left: auto;\n}\n.ant-col-xs-offset-0.ant-col-rtl {\n margin-right: 0;\n}\n.ant-col-xs-push-1.ant-col-rtl {\n right: 4.16666667%;\n left: auto;\n}\n.ant-col-xs-pull-1.ant-col-rtl {\n right: auto;\n left: 4.16666667%;\n}\n.ant-col-xs-offset-1.ant-col-rtl {\n margin-right: 4.16666667%;\n margin-left: 0;\n}\n.ant-col-xs-push-2.ant-col-rtl {\n right: 8.33333333%;\n left: auto;\n}\n.ant-col-xs-pull-2.ant-col-rtl {\n right: auto;\n left: 8.33333333%;\n}\n.ant-col-xs-offset-2.ant-col-rtl {\n margin-right: 8.33333333%;\n margin-left: 0;\n}\n.ant-col-xs-push-3.ant-col-rtl {\n right: 12.5%;\n left: auto;\n}\n.ant-col-xs-pull-3.ant-col-rtl {\n right: auto;\n left: 12.5%;\n}\n.ant-col-xs-offset-3.ant-col-rtl {\n margin-right: 12.5%;\n margin-left: 0;\n}\n.ant-col-xs-push-4.ant-col-rtl {\n right: 16.66666667%;\n left: auto;\n}\n.ant-col-xs-pull-4.ant-col-rtl {\n right: auto;\n left: 16.66666667%;\n}\n.ant-col-xs-offset-4.ant-col-rtl {\n margin-right: 16.66666667%;\n margin-left: 0;\n}\n.ant-col-xs-push-5.ant-col-rtl {\n right: 20.83333333%;\n left: auto;\n}\n.ant-col-xs-pull-5.ant-col-rtl {\n right: auto;\n left: 20.83333333%;\n}\n.ant-col-xs-offset-5.ant-col-rtl {\n margin-right: 20.83333333%;\n margin-left: 0;\n}\n.ant-col-xs-push-6.ant-col-rtl {\n right: 25%;\n left: auto;\n}\n.ant-col-xs-pull-6.ant-col-rtl {\n right: auto;\n left: 25%;\n}\n.ant-col-xs-offset-6.ant-col-rtl {\n margin-right: 25%;\n margin-left: 0;\n}\n.ant-col-xs-push-7.ant-col-rtl {\n right: 29.16666667%;\n left: auto;\n}\n.ant-col-xs-pull-7.ant-col-rtl {\n right: auto;\n left: 29.16666667%;\n}\n.ant-col-xs-offset-7.ant-col-rtl {\n margin-right: 29.16666667%;\n margin-left: 0;\n}\n.ant-col-xs-push-8.ant-col-rtl {\n right: 33.33333333%;\n left: auto;\n}\n.ant-col-xs-pull-8.ant-col-rtl {\n right: auto;\n left: 33.33333333%;\n}\n.ant-col-xs-offset-8.ant-col-rtl {\n margin-right: 33.33333333%;\n margin-left: 0;\n}\n.ant-col-xs-push-9.ant-col-rtl {\n right: 37.5%;\n left: auto;\n}\n.ant-col-xs-pull-9.ant-col-rtl {\n right: auto;\n left: 37.5%;\n}\n.ant-col-xs-offset-9.ant-col-rtl {\n margin-right: 37.5%;\n margin-left: 0;\n}\n.ant-col-xs-push-10.ant-col-rtl {\n right: 41.66666667%;\n left: auto;\n}\n.ant-col-xs-pull-10.ant-col-rtl {\n right: auto;\n left: 41.66666667%;\n}\n.ant-col-xs-offset-10.ant-col-rtl {\n margin-right: 41.66666667%;\n margin-left: 0;\n}\n.ant-col-xs-push-11.ant-col-rtl {\n right: 45.83333333%;\n left: auto;\n}\n.ant-col-xs-pull-11.ant-col-rtl {\n right: auto;\n left: 45.83333333%;\n}\n.ant-col-xs-offset-11.ant-col-rtl {\n margin-right: 45.83333333%;\n margin-left: 0;\n}\n.ant-col-xs-push-12.ant-col-rtl {\n right: 50%;\n left: auto;\n}\n.ant-col-xs-pull-12.ant-col-rtl {\n right: auto;\n left: 50%;\n}\n.ant-col-xs-offset-12.ant-col-rtl {\n margin-right: 50%;\n margin-left: 0;\n}\n.ant-col-xs-push-13.ant-col-rtl {\n right: 54.16666667%;\n left: auto;\n}\n.ant-col-xs-pull-13.ant-col-rtl {\n right: auto;\n left: 54.16666667%;\n}\n.ant-col-xs-offset-13.ant-col-rtl {\n margin-right: 54.16666667%;\n margin-left: 0;\n}\n.ant-col-xs-push-14.ant-col-rtl {\n right: 58.33333333%;\n left: auto;\n}\n.ant-col-xs-pull-14.ant-col-rtl {\n right: auto;\n left: 58.33333333%;\n}\n.ant-col-xs-offset-14.ant-col-rtl {\n margin-right: 58.33333333%;\n margin-left: 0;\n}\n.ant-col-xs-push-15.ant-col-rtl {\n right: 62.5%;\n left: auto;\n}\n.ant-col-xs-pull-15.ant-col-rtl {\n right: auto;\n left: 62.5%;\n}\n.ant-col-xs-offset-15.ant-col-rtl {\n margin-right: 62.5%;\n margin-left: 0;\n}\n.ant-col-xs-push-16.ant-col-rtl {\n right: 66.66666667%;\n left: auto;\n}\n.ant-col-xs-pull-16.ant-col-rtl {\n right: auto;\n left: 66.66666667%;\n}\n.ant-col-xs-offset-16.ant-col-rtl {\n margin-right: 66.66666667%;\n margin-left: 0;\n}\n.ant-col-xs-push-17.ant-col-rtl {\n right: 70.83333333%;\n left: auto;\n}\n.ant-col-xs-pull-17.ant-col-rtl {\n right: auto;\n left: 70.83333333%;\n}\n.ant-col-xs-offset-17.ant-col-rtl {\n margin-right: 70.83333333%;\n margin-left: 0;\n}\n.ant-col-xs-push-18.ant-col-rtl {\n right: 75%;\n left: auto;\n}\n.ant-col-xs-pull-18.ant-col-rtl {\n right: auto;\n left: 75%;\n}\n.ant-col-xs-offset-18.ant-col-rtl {\n margin-right: 75%;\n margin-left: 0;\n}\n.ant-col-xs-push-19.ant-col-rtl {\n right: 79.16666667%;\n left: auto;\n}\n.ant-col-xs-pull-19.ant-col-rtl {\n right: auto;\n left: 79.16666667%;\n}\n.ant-col-xs-offset-19.ant-col-rtl {\n margin-right: 79.16666667%;\n margin-left: 0;\n}\n.ant-col-xs-push-20.ant-col-rtl {\n right: 83.33333333%;\n left: auto;\n}\n.ant-col-xs-pull-20.ant-col-rtl {\n right: auto;\n left: 83.33333333%;\n}\n.ant-col-xs-offset-20.ant-col-rtl {\n margin-right: 83.33333333%;\n margin-left: 0;\n}\n.ant-col-xs-push-21.ant-col-rtl {\n right: 87.5%;\n left: auto;\n}\n.ant-col-xs-pull-21.ant-col-rtl {\n right: auto;\n left: 87.5%;\n}\n.ant-col-xs-offset-21.ant-col-rtl {\n margin-right: 87.5%;\n margin-left: 0;\n}\n.ant-col-xs-push-22.ant-col-rtl {\n right: 91.66666667%;\n left: auto;\n}\n.ant-col-xs-pull-22.ant-col-rtl {\n right: auto;\n left: 91.66666667%;\n}\n.ant-col-xs-offset-22.ant-col-rtl {\n margin-right: 91.66666667%;\n margin-left: 0;\n}\n.ant-col-xs-push-23.ant-col-rtl {\n right: 95.83333333%;\n left: auto;\n}\n.ant-col-xs-pull-23.ant-col-rtl {\n right: auto;\n left: 95.83333333%;\n}\n.ant-col-xs-offset-23.ant-col-rtl {\n margin-right: 95.83333333%;\n margin-left: 0;\n}\n.ant-col-xs-push-24.ant-col-rtl {\n right: 100%;\n left: auto;\n}\n.ant-col-xs-pull-24.ant-col-rtl {\n right: auto;\n left: 100%;\n}\n.ant-col-xs-offset-24.ant-col-rtl {\n margin-right: 100%;\n margin-left: 0;\n}\n@media (min-width: 576px) {\n .ant-col-sm-24 {\n display: block;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .ant-col-sm-push-24 {\n left: 100%;\n }\n .ant-col-sm-pull-24 {\n right: 100%;\n }\n .ant-col-sm-offset-24 {\n margin-left: 100%;\n }\n .ant-col-sm-order-24 {\n order: 24;\n }\n .ant-col-sm-23 {\n display: block;\n flex: 0 0 95.83333333%;\n max-width: 95.83333333%;\n }\n .ant-col-sm-push-23 {\n left: 95.83333333%;\n }\n .ant-col-sm-pull-23 {\n right: 95.83333333%;\n }\n .ant-col-sm-offset-23 {\n margin-left: 95.83333333%;\n }\n .ant-col-sm-order-23 {\n order: 23;\n }\n .ant-col-sm-22 {\n display: block;\n flex: 0 0 91.66666667%;\n max-width: 91.66666667%;\n }\n .ant-col-sm-push-22 {\n left: 91.66666667%;\n }\n .ant-col-sm-pull-22 {\n right: 91.66666667%;\n }\n .ant-col-sm-offset-22 {\n margin-left: 91.66666667%;\n }\n .ant-col-sm-order-22 {\n order: 22;\n }\n .ant-col-sm-21 {\n display: block;\n flex: 0 0 87.5%;\n max-width: 87.5%;\n }\n .ant-col-sm-push-21 {\n left: 87.5%;\n }\n .ant-col-sm-pull-21 {\n right: 87.5%;\n }\n .ant-col-sm-offset-21 {\n margin-left: 87.5%;\n }\n .ant-col-sm-order-21 {\n order: 21;\n }\n .ant-col-sm-20 {\n display: block;\n flex: 0 0 83.33333333%;\n max-width: 83.33333333%;\n }\n .ant-col-sm-push-20 {\n left: 83.33333333%;\n }\n .ant-col-sm-pull-20 {\n right: 83.33333333%;\n }\n .ant-col-sm-offset-20 {\n margin-left: 83.33333333%;\n }\n .ant-col-sm-order-20 {\n order: 20;\n }\n .ant-col-sm-19 {\n display: block;\n flex: 0 0 79.16666667%;\n max-width: 79.16666667%;\n }\n .ant-col-sm-push-19 {\n left: 79.16666667%;\n }\n .ant-col-sm-pull-19 {\n right: 79.16666667%;\n }\n .ant-col-sm-offset-19 {\n margin-left: 79.16666667%;\n }\n .ant-col-sm-order-19 {\n order: 19;\n }\n .ant-col-sm-18 {\n display: block;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .ant-col-sm-push-18 {\n left: 75%;\n }\n .ant-col-sm-pull-18 {\n right: 75%;\n }\n .ant-col-sm-offset-18 {\n margin-left: 75%;\n }\n .ant-col-sm-order-18 {\n order: 18;\n }\n .ant-col-sm-17 {\n display: block;\n flex: 0 0 70.83333333%;\n max-width: 70.83333333%;\n }\n .ant-col-sm-push-17 {\n left: 70.83333333%;\n }\n .ant-col-sm-pull-17 {\n right: 70.83333333%;\n }\n .ant-col-sm-offset-17 {\n margin-left: 70.83333333%;\n }\n .ant-col-sm-order-17 {\n order: 17;\n }\n .ant-col-sm-16 {\n display: block;\n flex: 0 0 66.66666667%;\n max-width: 66.66666667%;\n }\n .ant-col-sm-push-16 {\n left: 66.66666667%;\n }\n .ant-col-sm-pull-16 {\n right: 66.66666667%;\n }\n .ant-col-sm-offset-16 {\n margin-left: 66.66666667%;\n }\n .ant-col-sm-order-16 {\n order: 16;\n }\n .ant-col-sm-15 {\n display: block;\n flex: 0 0 62.5%;\n max-width: 62.5%;\n }\n .ant-col-sm-push-15 {\n left: 62.5%;\n }\n .ant-col-sm-pull-15 {\n right: 62.5%;\n }\n .ant-col-sm-offset-15 {\n margin-left: 62.5%;\n }\n .ant-col-sm-order-15 {\n order: 15;\n }\n .ant-col-sm-14 {\n display: block;\n flex: 0 0 58.33333333%;\n max-width: 58.33333333%;\n }\n .ant-col-sm-push-14 {\n left: 58.33333333%;\n }\n .ant-col-sm-pull-14 {\n right: 58.33333333%;\n }\n .ant-col-sm-offset-14 {\n margin-left: 58.33333333%;\n }\n .ant-col-sm-order-14 {\n order: 14;\n }\n .ant-col-sm-13 {\n display: block;\n flex: 0 0 54.16666667%;\n max-width: 54.16666667%;\n }\n .ant-col-sm-push-13 {\n left: 54.16666667%;\n }\n .ant-col-sm-pull-13 {\n right: 54.16666667%;\n }\n .ant-col-sm-offset-13 {\n margin-left: 54.16666667%;\n }\n .ant-col-sm-order-13 {\n order: 13;\n }\n .ant-col-sm-12 {\n display: block;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .ant-col-sm-push-12 {\n left: 50%;\n }\n .ant-col-sm-pull-12 {\n right: 50%;\n }\n .ant-col-sm-offset-12 {\n margin-left: 50%;\n }\n .ant-col-sm-order-12 {\n order: 12;\n }\n .ant-col-sm-11 {\n display: block;\n flex: 0 0 45.83333333%;\n max-width: 45.83333333%;\n }\n .ant-col-sm-push-11 {\n left: 45.83333333%;\n }\n .ant-col-sm-pull-11 {\n right: 45.83333333%;\n }\n .ant-col-sm-offset-11 {\n margin-left: 45.83333333%;\n }\n .ant-col-sm-order-11 {\n order: 11;\n }\n .ant-col-sm-10 {\n display: block;\n flex: 0 0 41.66666667%;\n max-width: 41.66666667%;\n }\n .ant-col-sm-push-10 {\n left: 41.66666667%;\n }\n .ant-col-sm-pull-10 {\n right: 41.66666667%;\n }\n .ant-col-sm-offset-10 {\n margin-left: 41.66666667%;\n }\n .ant-col-sm-order-10 {\n order: 10;\n }\n .ant-col-sm-9 {\n display: block;\n flex: 0 0 37.5%;\n max-width: 37.5%;\n }\n .ant-col-sm-push-9 {\n left: 37.5%;\n }\n .ant-col-sm-pull-9 {\n right: 37.5%;\n }\n .ant-col-sm-offset-9 {\n margin-left: 37.5%;\n }\n .ant-col-sm-order-9 {\n order: 9;\n }\n .ant-col-sm-8 {\n display: block;\n flex: 0 0 33.33333333%;\n max-width: 33.33333333%;\n }\n .ant-col-sm-push-8 {\n left: 33.33333333%;\n }\n .ant-col-sm-pull-8 {\n right: 33.33333333%;\n }\n .ant-col-sm-offset-8 {\n margin-left: 33.33333333%;\n }\n .ant-col-sm-order-8 {\n order: 8;\n }\n .ant-col-sm-7 {\n display: block;\n flex: 0 0 29.16666667%;\n max-width: 29.16666667%;\n }\n .ant-col-sm-push-7 {\n left: 29.16666667%;\n }\n .ant-col-sm-pull-7 {\n right: 29.16666667%;\n }\n .ant-col-sm-offset-7 {\n margin-left: 29.16666667%;\n }\n .ant-col-sm-order-7 {\n order: 7;\n }\n .ant-col-sm-6 {\n display: block;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .ant-col-sm-push-6 {\n left: 25%;\n }\n .ant-col-sm-pull-6 {\n right: 25%;\n }\n .ant-col-sm-offset-6 {\n margin-left: 25%;\n }\n .ant-col-sm-order-6 {\n order: 6;\n }\n .ant-col-sm-5 {\n display: block;\n flex: 0 0 20.83333333%;\n max-width: 20.83333333%;\n }\n .ant-col-sm-push-5 {\n left: 20.83333333%;\n }\n .ant-col-sm-pull-5 {\n right: 20.83333333%;\n }\n .ant-col-sm-offset-5 {\n margin-left: 20.83333333%;\n }\n .ant-col-sm-order-5 {\n order: 5;\n }\n .ant-col-sm-4 {\n display: block;\n flex: 0 0 16.66666667%;\n max-width: 16.66666667%;\n }\n .ant-col-sm-push-4 {\n left: 16.66666667%;\n }\n .ant-col-sm-pull-4 {\n right: 16.66666667%;\n }\n .ant-col-sm-offset-4 {\n margin-left: 16.66666667%;\n }\n .ant-col-sm-order-4 {\n order: 4;\n }\n .ant-col-sm-3 {\n display: block;\n flex: 0 0 12.5%;\n max-width: 12.5%;\n }\n .ant-col-sm-push-3 {\n left: 12.5%;\n }\n .ant-col-sm-pull-3 {\n right: 12.5%;\n }\n .ant-col-sm-offset-3 {\n margin-left: 12.5%;\n }\n .ant-col-sm-order-3 {\n order: 3;\n }\n .ant-col-sm-2 {\n display: block;\n flex: 0 0 8.33333333%;\n max-width: 8.33333333%;\n }\n .ant-col-sm-push-2 {\n left: 8.33333333%;\n }\n .ant-col-sm-pull-2 {\n right: 8.33333333%;\n }\n .ant-col-sm-offset-2 {\n margin-left: 8.33333333%;\n }\n .ant-col-sm-order-2 {\n order: 2;\n }\n .ant-col-sm-1 {\n display: block;\n flex: 0 0 4.16666667%;\n max-width: 4.16666667%;\n }\n .ant-col-sm-push-1 {\n left: 4.16666667%;\n }\n .ant-col-sm-pull-1 {\n right: 4.16666667%;\n }\n .ant-col-sm-offset-1 {\n margin-left: 4.16666667%;\n }\n .ant-col-sm-order-1 {\n order: 1;\n }\n .ant-col-sm-0 {\n display: none;\n }\n .ant-col-push-0 {\n left: auto;\n }\n .ant-col-pull-0 {\n right: auto;\n }\n .ant-col-sm-push-0 {\n left: auto;\n }\n .ant-col-sm-pull-0 {\n right: auto;\n }\n .ant-col-sm-offset-0 {\n margin-left: 0;\n }\n .ant-col-sm-order-0 {\n order: 0;\n }\n .ant-col-push-0.ant-col-rtl {\n right: auto;\n }\n .ant-col-pull-0.ant-col-rtl {\n left: auto;\n }\n .ant-col-sm-push-0.ant-col-rtl {\n right: auto;\n }\n .ant-col-sm-pull-0.ant-col-rtl {\n left: auto;\n }\n .ant-col-sm-offset-0.ant-col-rtl {\n margin-right: 0;\n }\n .ant-col-sm-push-1.ant-col-rtl {\n right: 4.16666667%;\n left: auto;\n }\n .ant-col-sm-pull-1.ant-col-rtl {\n right: auto;\n left: 4.16666667%;\n }\n .ant-col-sm-offset-1.ant-col-rtl {\n margin-right: 4.16666667%;\n margin-left: 0;\n }\n .ant-col-sm-push-2.ant-col-rtl {\n right: 8.33333333%;\n left: auto;\n }\n .ant-col-sm-pull-2.ant-col-rtl {\n right: auto;\n left: 8.33333333%;\n }\n .ant-col-sm-offset-2.ant-col-rtl {\n margin-right: 8.33333333%;\n margin-left: 0;\n }\n .ant-col-sm-push-3.ant-col-rtl {\n right: 12.5%;\n left: auto;\n }\n .ant-col-sm-pull-3.ant-col-rtl {\n right: auto;\n left: 12.5%;\n }\n .ant-col-sm-offset-3.ant-col-rtl {\n margin-right: 12.5%;\n margin-left: 0;\n }\n .ant-col-sm-push-4.ant-col-rtl {\n right: 16.66666667%;\n left: auto;\n }\n .ant-col-sm-pull-4.ant-col-rtl {\n right: auto;\n left: 16.66666667%;\n }\n .ant-col-sm-offset-4.ant-col-rtl {\n margin-right: 16.66666667%;\n margin-left: 0;\n }\n .ant-col-sm-push-5.ant-col-rtl {\n right: 20.83333333%;\n left: auto;\n }\n .ant-col-sm-pull-5.ant-col-rtl {\n right: auto;\n left: 20.83333333%;\n }\n .ant-col-sm-offset-5.ant-col-rtl {\n margin-right: 20.83333333%;\n margin-left: 0;\n }\n .ant-col-sm-push-6.ant-col-rtl {\n right: 25%;\n left: auto;\n }\n .ant-col-sm-pull-6.ant-col-rtl {\n right: auto;\n left: 25%;\n }\n .ant-col-sm-offset-6.ant-col-rtl {\n margin-right: 25%;\n margin-left: 0;\n }\n .ant-col-sm-push-7.ant-col-rtl {\n right: 29.16666667%;\n left: auto;\n }\n .ant-col-sm-pull-7.ant-col-rtl {\n right: auto;\n left: 29.16666667%;\n }\n .ant-col-sm-offset-7.ant-col-rtl {\n margin-right: 29.16666667%;\n margin-left: 0;\n }\n .ant-col-sm-push-8.ant-col-rtl {\n right: 33.33333333%;\n left: auto;\n }\n .ant-col-sm-pull-8.ant-col-rtl {\n right: auto;\n left: 33.33333333%;\n }\n .ant-col-sm-offset-8.ant-col-rtl {\n margin-right: 33.33333333%;\n margin-left: 0;\n }\n .ant-col-sm-push-9.ant-col-rtl {\n right: 37.5%;\n left: auto;\n }\n .ant-col-sm-pull-9.ant-col-rtl {\n right: auto;\n left: 37.5%;\n }\n .ant-col-sm-offset-9.ant-col-rtl {\n margin-right: 37.5%;\n margin-left: 0;\n }\n .ant-col-sm-push-10.ant-col-rtl {\n right: 41.66666667%;\n left: auto;\n }\n .ant-col-sm-pull-10.ant-col-rtl {\n right: auto;\n left: 41.66666667%;\n }\n .ant-col-sm-offset-10.ant-col-rtl {\n margin-right: 41.66666667%;\n margin-left: 0;\n }\n .ant-col-sm-push-11.ant-col-rtl {\n right: 45.83333333%;\n left: auto;\n }\n .ant-col-sm-pull-11.ant-col-rtl {\n right: auto;\n left: 45.83333333%;\n }\n .ant-col-sm-offset-11.ant-col-rtl {\n margin-right: 45.83333333%;\n margin-left: 0;\n }\n .ant-col-sm-push-12.ant-col-rtl {\n right: 50%;\n left: auto;\n }\n .ant-col-sm-pull-12.ant-col-rtl {\n right: auto;\n left: 50%;\n }\n .ant-col-sm-offset-12.ant-col-rtl {\n margin-right: 50%;\n margin-left: 0;\n }\n .ant-col-sm-push-13.ant-col-rtl {\n right: 54.16666667%;\n left: auto;\n }\n .ant-col-sm-pull-13.ant-col-rtl {\n right: auto;\n left: 54.16666667%;\n }\n .ant-col-sm-offset-13.ant-col-rtl {\n margin-right: 54.16666667%;\n margin-left: 0;\n }\n .ant-col-sm-push-14.ant-col-rtl {\n right: 58.33333333%;\n left: auto;\n }\n .ant-col-sm-pull-14.ant-col-rtl {\n right: auto;\n left: 58.33333333%;\n }\n .ant-col-sm-offset-14.ant-col-rtl {\n margin-right: 58.33333333%;\n margin-left: 0;\n }\n .ant-col-sm-push-15.ant-col-rtl {\n right: 62.5%;\n left: auto;\n }\n .ant-col-sm-pull-15.ant-col-rtl {\n right: auto;\n left: 62.5%;\n }\n .ant-col-sm-offset-15.ant-col-rtl {\n margin-right: 62.5%;\n margin-left: 0;\n }\n .ant-col-sm-push-16.ant-col-rtl {\n right: 66.66666667%;\n left: auto;\n }\n .ant-col-sm-pull-16.ant-col-rtl {\n right: auto;\n left: 66.66666667%;\n }\n .ant-col-sm-offset-16.ant-col-rtl {\n margin-right: 66.66666667%;\n margin-left: 0;\n }\n .ant-col-sm-push-17.ant-col-rtl {\n right: 70.83333333%;\n left: auto;\n }\n .ant-col-sm-pull-17.ant-col-rtl {\n right: auto;\n left: 70.83333333%;\n }\n .ant-col-sm-offset-17.ant-col-rtl {\n margin-right: 70.83333333%;\n margin-left: 0;\n }\n .ant-col-sm-push-18.ant-col-rtl {\n right: 75%;\n left: auto;\n }\n .ant-col-sm-pull-18.ant-col-rtl {\n right: auto;\n left: 75%;\n }\n .ant-col-sm-offset-18.ant-col-rtl {\n margin-right: 75%;\n margin-left: 0;\n }\n .ant-col-sm-push-19.ant-col-rtl {\n right: 79.16666667%;\n left: auto;\n }\n .ant-col-sm-pull-19.ant-col-rtl {\n right: auto;\n left: 79.16666667%;\n }\n .ant-col-sm-offset-19.ant-col-rtl {\n margin-right: 79.16666667%;\n margin-left: 0;\n }\n .ant-col-sm-push-20.ant-col-rtl {\n right: 83.33333333%;\n left: auto;\n }\n .ant-col-sm-pull-20.ant-col-rtl {\n right: auto;\n left: 83.33333333%;\n }\n .ant-col-sm-offset-20.ant-col-rtl {\n margin-right: 83.33333333%;\n margin-left: 0;\n }\n .ant-col-sm-push-21.ant-col-rtl {\n right: 87.5%;\n left: auto;\n }\n .ant-col-sm-pull-21.ant-col-rtl {\n right: auto;\n left: 87.5%;\n }\n .ant-col-sm-offset-21.ant-col-rtl {\n margin-right: 87.5%;\n margin-left: 0;\n }\n .ant-col-sm-push-22.ant-col-rtl {\n right: 91.66666667%;\n left: auto;\n }\n .ant-col-sm-pull-22.ant-col-rtl {\n right: auto;\n left: 91.66666667%;\n }\n .ant-col-sm-offset-22.ant-col-rtl {\n margin-right: 91.66666667%;\n margin-left: 0;\n }\n .ant-col-sm-push-23.ant-col-rtl {\n right: 95.83333333%;\n left: auto;\n }\n .ant-col-sm-pull-23.ant-col-rtl {\n right: auto;\n left: 95.83333333%;\n }\n .ant-col-sm-offset-23.ant-col-rtl {\n margin-right: 95.83333333%;\n margin-left: 0;\n }\n .ant-col-sm-push-24.ant-col-rtl {\n right: 100%;\n left: auto;\n }\n .ant-col-sm-pull-24.ant-col-rtl {\n right: auto;\n left: 100%;\n }\n .ant-col-sm-offset-24.ant-col-rtl {\n margin-right: 100%;\n margin-left: 0;\n }\n}\n@media (min-width: 768px) {\n .ant-col-md-24 {\n display: block;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .ant-col-md-push-24 {\n left: 100%;\n }\n .ant-col-md-pull-24 {\n right: 100%;\n }\n .ant-col-md-offset-24 {\n margin-left: 100%;\n }\n .ant-col-md-order-24 {\n order: 24;\n }\n .ant-col-md-23 {\n display: block;\n flex: 0 0 95.83333333%;\n max-width: 95.83333333%;\n }\n .ant-col-md-push-23 {\n left: 95.83333333%;\n }\n .ant-col-md-pull-23 {\n right: 95.83333333%;\n }\n .ant-col-md-offset-23 {\n margin-left: 95.83333333%;\n }\n .ant-col-md-order-23 {\n order: 23;\n }\n .ant-col-md-22 {\n display: block;\n flex: 0 0 91.66666667%;\n max-width: 91.66666667%;\n }\n .ant-col-md-push-22 {\n left: 91.66666667%;\n }\n .ant-col-md-pull-22 {\n right: 91.66666667%;\n }\n .ant-col-md-offset-22 {\n margin-left: 91.66666667%;\n }\n .ant-col-md-order-22 {\n order: 22;\n }\n .ant-col-md-21 {\n display: block;\n flex: 0 0 87.5%;\n max-width: 87.5%;\n }\n .ant-col-md-push-21 {\n left: 87.5%;\n }\n .ant-col-md-pull-21 {\n right: 87.5%;\n }\n .ant-col-md-offset-21 {\n margin-left: 87.5%;\n }\n .ant-col-md-order-21 {\n order: 21;\n }\n .ant-col-md-20 {\n display: block;\n flex: 0 0 83.33333333%;\n max-width: 83.33333333%;\n }\n .ant-col-md-push-20 {\n left: 83.33333333%;\n }\n .ant-col-md-pull-20 {\n right: 83.33333333%;\n }\n .ant-col-md-offset-20 {\n margin-left: 83.33333333%;\n }\n .ant-col-md-order-20 {\n order: 20;\n }\n .ant-col-md-19 {\n display: block;\n flex: 0 0 79.16666667%;\n max-width: 79.16666667%;\n }\n .ant-col-md-push-19 {\n left: 79.16666667%;\n }\n .ant-col-md-pull-19 {\n right: 79.16666667%;\n }\n .ant-col-md-offset-19 {\n margin-left: 79.16666667%;\n }\n .ant-col-md-order-19 {\n order: 19;\n }\n .ant-col-md-18 {\n display: block;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .ant-col-md-push-18 {\n left: 75%;\n }\n .ant-col-md-pull-18 {\n right: 75%;\n }\n .ant-col-md-offset-18 {\n margin-left: 75%;\n }\n .ant-col-md-order-18 {\n order: 18;\n }\n .ant-col-md-17 {\n display: block;\n flex: 0 0 70.83333333%;\n max-width: 70.83333333%;\n }\n .ant-col-md-push-17 {\n left: 70.83333333%;\n }\n .ant-col-md-pull-17 {\n right: 70.83333333%;\n }\n .ant-col-md-offset-17 {\n margin-left: 70.83333333%;\n }\n .ant-col-md-order-17 {\n order: 17;\n }\n .ant-col-md-16 {\n display: block;\n flex: 0 0 66.66666667%;\n max-width: 66.66666667%;\n }\n .ant-col-md-push-16 {\n left: 66.66666667%;\n }\n .ant-col-md-pull-16 {\n right: 66.66666667%;\n }\n .ant-col-md-offset-16 {\n margin-left: 66.66666667%;\n }\n .ant-col-md-order-16 {\n order: 16;\n }\n .ant-col-md-15 {\n display: block;\n flex: 0 0 62.5%;\n max-width: 62.5%;\n }\n .ant-col-md-push-15 {\n left: 62.5%;\n }\n .ant-col-md-pull-15 {\n right: 62.5%;\n }\n .ant-col-md-offset-15 {\n margin-left: 62.5%;\n }\n .ant-col-md-order-15 {\n order: 15;\n }\n .ant-col-md-14 {\n display: block;\n flex: 0 0 58.33333333%;\n max-width: 58.33333333%;\n }\n .ant-col-md-push-14 {\n left: 58.33333333%;\n }\n .ant-col-md-pull-14 {\n right: 58.33333333%;\n }\n .ant-col-md-offset-14 {\n margin-left: 58.33333333%;\n }\n .ant-col-md-order-14 {\n order: 14;\n }\n .ant-col-md-13 {\n display: block;\n flex: 0 0 54.16666667%;\n max-width: 54.16666667%;\n }\n .ant-col-md-push-13 {\n left: 54.16666667%;\n }\n .ant-col-md-pull-13 {\n right: 54.16666667%;\n }\n .ant-col-md-offset-13 {\n margin-left: 54.16666667%;\n }\n .ant-col-md-order-13 {\n order: 13;\n }\n .ant-col-md-12 {\n display: block;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .ant-col-md-push-12 {\n left: 50%;\n }\n .ant-col-md-pull-12 {\n right: 50%;\n }\n .ant-col-md-offset-12 {\n margin-left: 50%;\n }\n .ant-col-md-order-12 {\n order: 12;\n }\n .ant-col-md-11 {\n display: block;\n flex: 0 0 45.83333333%;\n max-width: 45.83333333%;\n }\n .ant-col-md-push-11 {\n left: 45.83333333%;\n }\n .ant-col-md-pull-11 {\n right: 45.83333333%;\n }\n .ant-col-md-offset-11 {\n margin-left: 45.83333333%;\n }\n .ant-col-md-order-11 {\n order: 11;\n }\n .ant-col-md-10 {\n display: block;\n flex: 0 0 41.66666667%;\n max-width: 41.66666667%;\n }\n .ant-col-md-push-10 {\n left: 41.66666667%;\n }\n .ant-col-md-pull-10 {\n right: 41.66666667%;\n }\n .ant-col-md-offset-10 {\n margin-left: 41.66666667%;\n }\n .ant-col-md-order-10 {\n order: 10;\n }\n .ant-col-md-9 {\n display: block;\n flex: 0 0 37.5%;\n max-width: 37.5%;\n }\n .ant-col-md-push-9 {\n left: 37.5%;\n }\n .ant-col-md-pull-9 {\n right: 37.5%;\n }\n .ant-col-md-offset-9 {\n margin-left: 37.5%;\n }\n .ant-col-md-order-9 {\n order: 9;\n }\n .ant-col-md-8 {\n display: block;\n flex: 0 0 33.33333333%;\n max-width: 33.33333333%;\n }\n .ant-col-md-push-8 {\n left: 33.33333333%;\n }\n .ant-col-md-pull-8 {\n right: 33.33333333%;\n }\n .ant-col-md-offset-8 {\n margin-left: 33.33333333%;\n }\n .ant-col-md-order-8 {\n order: 8;\n }\n .ant-col-md-7 {\n display: block;\n flex: 0 0 29.16666667%;\n max-width: 29.16666667%;\n }\n .ant-col-md-push-7 {\n left: 29.16666667%;\n }\n .ant-col-md-pull-7 {\n right: 29.16666667%;\n }\n .ant-col-md-offset-7 {\n margin-left: 29.16666667%;\n }\n .ant-col-md-order-7 {\n order: 7;\n }\n .ant-col-md-6 {\n display: block;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .ant-col-md-push-6 {\n left: 25%;\n }\n .ant-col-md-pull-6 {\n right: 25%;\n }\n .ant-col-md-offset-6 {\n margin-left: 25%;\n }\n .ant-col-md-order-6 {\n order: 6;\n }\n .ant-col-md-5 {\n display: block;\n flex: 0 0 20.83333333%;\n max-width: 20.83333333%;\n }\n .ant-col-md-push-5 {\n left: 20.83333333%;\n }\n .ant-col-md-pull-5 {\n right: 20.83333333%;\n }\n .ant-col-md-offset-5 {\n margin-left: 20.83333333%;\n }\n .ant-col-md-order-5 {\n order: 5;\n }\n .ant-col-md-4 {\n display: block;\n flex: 0 0 16.66666667%;\n max-width: 16.66666667%;\n }\n .ant-col-md-push-4 {\n left: 16.66666667%;\n }\n .ant-col-md-pull-4 {\n right: 16.66666667%;\n }\n .ant-col-md-offset-4 {\n margin-left: 16.66666667%;\n }\n .ant-col-md-order-4 {\n order: 4;\n }\n .ant-col-md-3 {\n display: block;\n flex: 0 0 12.5%;\n max-width: 12.5%;\n }\n .ant-col-md-push-3 {\n left: 12.5%;\n }\n .ant-col-md-pull-3 {\n right: 12.5%;\n }\n .ant-col-md-offset-3 {\n margin-left: 12.5%;\n }\n .ant-col-md-order-3 {\n order: 3;\n }\n .ant-col-md-2 {\n display: block;\n flex: 0 0 8.33333333%;\n max-width: 8.33333333%;\n }\n .ant-col-md-push-2 {\n left: 8.33333333%;\n }\n .ant-col-md-pull-2 {\n right: 8.33333333%;\n }\n .ant-col-md-offset-2 {\n margin-left: 8.33333333%;\n }\n .ant-col-md-order-2 {\n order: 2;\n }\n .ant-col-md-1 {\n display: block;\n flex: 0 0 4.16666667%;\n max-width: 4.16666667%;\n }\n .ant-col-md-push-1 {\n left: 4.16666667%;\n }\n .ant-col-md-pull-1 {\n right: 4.16666667%;\n }\n .ant-col-md-offset-1 {\n margin-left: 4.16666667%;\n }\n .ant-col-md-order-1 {\n order: 1;\n }\n .ant-col-md-0 {\n display: none;\n }\n .ant-col-push-0 {\n left: auto;\n }\n .ant-col-pull-0 {\n right: auto;\n }\n .ant-col-md-push-0 {\n left: auto;\n }\n .ant-col-md-pull-0 {\n right: auto;\n }\n .ant-col-md-offset-0 {\n margin-left: 0;\n }\n .ant-col-md-order-0 {\n order: 0;\n }\n .ant-col-push-0.ant-col-rtl {\n right: auto;\n }\n .ant-col-pull-0.ant-col-rtl {\n left: auto;\n }\n .ant-col-md-push-0.ant-col-rtl {\n right: auto;\n }\n .ant-col-md-pull-0.ant-col-rtl {\n left: auto;\n }\n .ant-col-md-offset-0.ant-col-rtl {\n margin-right: 0;\n }\n .ant-col-md-push-1.ant-col-rtl {\n right: 4.16666667%;\n left: auto;\n }\n .ant-col-md-pull-1.ant-col-rtl {\n right: auto;\n left: 4.16666667%;\n }\n .ant-col-md-offset-1.ant-col-rtl {\n margin-right: 4.16666667%;\n margin-left: 0;\n }\n .ant-col-md-push-2.ant-col-rtl {\n right: 8.33333333%;\n left: auto;\n }\n .ant-col-md-pull-2.ant-col-rtl {\n right: auto;\n left: 8.33333333%;\n }\n .ant-col-md-offset-2.ant-col-rtl {\n margin-right: 8.33333333%;\n margin-left: 0;\n }\n .ant-col-md-push-3.ant-col-rtl {\n right: 12.5%;\n left: auto;\n }\n .ant-col-md-pull-3.ant-col-rtl {\n right: auto;\n left: 12.5%;\n }\n .ant-col-md-offset-3.ant-col-rtl {\n margin-right: 12.5%;\n margin-left: 0;\n }\n .ant-col-md-push-4.ant-col-rtl {\n right: 16.66666667%;\n left: auto;\n }\n .ant-col-md-pull-4.ant-col-rtl {\n right: auto;\n left: 16.66666667%;\n }\n .ant-col-md-offset-4.ant-col-rtl {\n margin-right: 16.66666667%;\n margin-left: 0;\n }\n .ant-col-md-push-5.ant-col-rtl {\n right: 20.83333333%;\n left: auto;\n }\n .ant-col-md-pull-5.ant-col-rtl {\n right: auto;\n left: 20.83333333%;\n }\n .ant-col-md-offset-5.ant-col-rtl {\n margin-right: 20.83333333%;\n margin-left: 0;\n }\n .ant-col-md-push-6.ant-col-rtl {\n right: 25%;\n left: auto;\n }\n .ant-col-md-pull-6.ant-col-rtl {\n right: auto;\n left: 25%;\n }\n .ant-col-md-offset-6.ant-col-rtl {\n margin-right: 25%;\n margin-left: 0;\n }\n .ant-col-md-push-7.ant-col-rtl {\n right: 29.16666667%;\n left: auto;\n }\n .ant-col-md-pull-7.ant-col-rtl {\n right: auto;\n left: 29.16666667%;\n }\n .ant-col-md-offset-7.ant-col-rtl {\n margin-right: 29.16666667%;\n margin-left: 0;\n }\n .ant-col-md-push-8.ant-col-rtl {\n right: 33.33333333%;\n left: auto;\n }\n .ant-col-md-pull-8.ant-col-rtl {\n right: auto;\n left: 33.33333333%;\n }\n .ant-col-md-offset-8.ant-col-rtl {\n margin-right: 33.33333333%;\n margin-left: 0;\n }\n .ant-col-md-push-9.ant-col-rtl {\n right: 37.5%;\n left: auto;\n }\n .ant-col-md-pull-9.ant-col-rtl {\n right: auto;\n left: 37.5%;\n }\n .ant-col-md-offset-9.ant-col-rtl {\n margin-right: 37.5%;\n margin-left: 0;\n }\n .ant-col-md-push-10.ant-col-rtl {\n right: 41.66666667%;\n left: auto;\n }\n .ant-col-md-pull-10.ant-col-rtl {\n right: auto;\n left: 41.66666667%;\n }\n .ant-col-md-offset-10.ant-col-rtl {\n margin-right: 41.66666667%;\n margin-left: 0;\n }\n .ant-col-md-push-11.ant-col-rtl {\n right: 45.83333333%;\n left: auto;\n }\n .ant-col-md-pull-11.ant-col-rtl {\n right: auto;\n left: 45.83333333%;\n }\n .ant-col-md-offset-11.ant-col-rtl {\n margin-right: 45.83333333%;\n margin-left: 0;\n }\n .ant-col-md-push-12.ant-col-rtl {\n right: 50%;\n left: auto;\n }\n .ant-col-md-pull-12.ant-col-rtl {\n right: auto;\n left: 50%;\n }\n .ant-col-md-offset-12.ant-col-rtl {\n margin-right: 50%;\n margin-left: 0;\n }\n .ant-col-md-push-13.ant-col-rtl {\n right: 54.16666667%;\n left: auto;\n }\n .ant-col-md-pull-13.ant-col-rtl {\n right: auto;\n left: 54.16666667%;\n }\n .ant-col-md-offset-13.ant-col-rtl {\n margin-right: 54.16666667%;\n margin-left: 0;\n }\n .ant-col-md-push-14.ant-col-rtl {\n right: 58.33333333%;\n left: auto;\n }\n .ant-col-md-pull-14.ant-col-rtl {\n right: auto;\n left: 58.33333333%;\n }\n .ant-col-md-offset-14.ant-col-rtl {\n margin-right: 58.33333333%;\n margin-left: 0;\n }\n .ant-col-md-push-15.ant-col-rtl {\n right: 62.5%;\n left: auto;\n }\n .ant-col-md-pull-15.ant-col-rtl {\n right: auto;\n left: 62.5%;\n }\n .ant-col-md-offset-15.ant-col-rtl {\n margin-right: 62.5%;\n margin-left: 0;\n }\n .ant-col-md-push-16.ant-col-rtl {\n right: 66.66666667%;\n left: auto;\n }\n .ant-col-md-pull-16.ant-col-rtl {\n right: auto;\n left: 66.66666667%;\n }\n .ant-col-md-offset-16.ant-col-rtl {\n margin-right: 66.66666667%;\n margin-left: 0;\n }\n .ant-col-md-push-17.ant-col-rtl {\n right: 70.83333333%;\n left: auto;\n }\n .ant-col-md-pull-17.ant-col-rtl {\n right: auto;\n left: 70.83333333%;\n }\n .ant-col-md-offset-17.ant-col-rtl {\n margin-right: 70.83333333%;\n margin-left: 0;\n }\n .ant-col-md-push-18.ant-col-rtl {\n right: 75%;\n left: auto;\n }\n .ant-col-md-pull-18.ant-col-rtl {\n right: auto;\n left: 75%;\n }\n .ant-col-md-offset-18.ant-col-rtl {\n margin-right: 75%;\n margin-left: 0;\n }\n .ant-col-md-push-19.ant-col-rtl {\n right: 79.16666667%;\n left: auto;\n }\n .ant-col-md-pull-19.ant-col-rtl {\n right: auto;\n left: 79.16666667%;\n }\n .ant-col-md-offset-19.ant-col-rtl {\n margin-right: 79.16666667%;\n margin-left: 0;\n }\n .ant-col-md-push-20.ant-col-rtl {\n right: 83.33333333%;\n left: auto;\n }\n .ant-col-md-pull-20.ant-col-rtl {\n right: auto;\n left: 83.33333333%;\n }\n .ant-col-md-offset-20.ant-col-rtl {\n margin-right: 83.33333333%;\n margin-left: 0;\n }\n .ant-col-md-push-21.ant-col-rtl {\n right: 87.5%;\n left: auto;\n }\n .ant-col-md-pull-21.ant-col-rtl {\n right: auto;\n left: 87.5%;\n }\n .ant-col-md-offset-21.ant-col-rtl {\n margin-right: 87.5%;\n margin-left: 0;\n }\n .ant-col-md-push-22.ant-col-rtl {\n right: 91.66666667%;\n left: auto;\n }\n .ant-col-md-pull-22.ant-col-rtl {\n right: auto;\n left: 91.66666667%;\n }\n .ant-col-md-offset-22.ant-col-rtl {\n margin-right: 91.66666667%;\n margin-left: 0;\n }\n .ant-col-md-push-23.ant-col-rtl {\n right: 95.83333333%;\n left: auto;\n }\n .ant-col-md-pull-23.ant-col-rtl {\n right: auto;\n left: 95.83333333%;\n }\n .ant-col-md-offset-23.ant-col-rtl {\n margin-right: 95.83333333%;\n margin-left: 0;\n }\n .ant-col-md-push-24.ant-col-rtl {\n right: 100%;\n left: auto;\n }\n .ant-col-md-pull-24.ant-col-rtl {\n right: auto;\n left: 100%;\n }\n .ant-col-md-offset-24.ant-col-rtl {\n margin-right: 100%;\n margin-left: 0;\n }\n}\n@media (min-width: 992px) {\n .ant-col-lg-24 {\n display: block;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .ant-col-lg-push-24 {\n left: 100%;\n }\n .ant-col-lg-pull-24 {\n right: 100%;\n }\n .ant-col-lg-offset-24 {\n margin-left: 100%;\n }\n .ant-col-lg-order-24 {\n order: 24;\n }\n .ant-col-lg-23 {\n display: block;\n flex: 0 0 95.83333333%;\n max-width: 95.83333333%;\n }\n .ant-col-lg-push-23 {\n left: 95.83333333%;\n }\n .ant-col-lg-pull-23 {\n right: 95.83333333%;\n }\n .ant-col-lg-offset-23 {\n margin-left: 95.83333333%;\n }\n .ant-col-lg-order-23 {\n order: 23;\n }\n .ant-col-lg-22 {\n display: block;\n flex: 0 0 91.66666667%;\n max-width: 91.66666667%;\n }\n .ant-col-lg-push-22 {\n left: 91.66666667%;\n }\n .ant-col-lg-pull-22 {\n right: 91.66666667%;\n }\n .ant-col-lg-offset-22 {\n margin-left: 91.66666667%;\n }\n .ant-col-lg-order-22 {\n order: 22;\n }\n .ant-col-lg-21 {\n display: block;\n flex: 0 0 87.5%;\n max-width: 87.5%;\n }\n .ant-col-lg-push-21 {\n left: 87.5%;\n }\n .ant-col-lg-pull-21 {\n right: 87.5%;\n }\n .ant-col-lg-offset-21 {\n margin-left: 87.5%;\n }\n .ant-col-lg-order-21 {\n order: 21;\n }\n .ant-col-lg-20 {\n display: block;\n flex: 0 0 83.33333333%;\n max-width: 83.33333333%;\n }\n .ant-col-lg-push-20 {\n left: 83.33333333%;\n }\n .ant-col-lg-pull-20 {\n right: 83.33333333%;\n }\n .ant-col-lg-offset-20 {\n margin-left: 83.33333333%;\n }\n .ant-col-lg-order-20 {\n order: 20;\n }\n .ant-col-lg-19 {\n display: block;\n flex: 0 0 79.16666667%;\n max-width: 79.16666667%;\n }\n .ant-col-lg-push-19 {\n left: 79.16666667%;\n }\n .ant-col-lg-pull-19 {\n right: 79.16666667%;\n }\n .ant-col-lg-offset-19 {\n margin-left: 79.16666667%;\n }\n .ant-col-lg-order-19 {\n order: 19;\n }\n .ant-col-lg-18 {\n display: block;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .ant-col-lg-push-18 {\n left: 75%;\n }\n .ant-col-lg-pull-18 {\n right: 75%;\n }\n .ant-col-lg-offset-18 {\n margin-left: 75%;\n }\n .ant-col-lg-order-18 {\n order: 18;\n }\n .ant-col-lg-17 {\n display: block;\n flex: 0 0 70.83333333%;\n max-width: 70.83333333%;\n }\n .ant-col-lg-push-17 {\n left: 70.83333333%;\n }\n .ant-col-lg-pull-17 {\n right: 70.83333333%;\n }\n .ant-col-lg-offset-17 {\n margin-left: 70.83333333%;\n }\n .ant-col-lg-order-17 {\n order: 17;\n }\n .ant-col-lg-16 {\n display: block;\n flex: 0 0 66.66666667%;\n max-width: 66.66666667%;\n }\n .ant-col-lg-push-16 {\n left: 66.66666667%;\n }\n .ant-col-lg-pull-16 {\n right: 66.66666667%;\n }\n .ant-col-lg-offset-16 {\n margin-left: 66.66666667%;\n }\n .ant-col-lg-order-16 {\n order: 16;\n }\n .ant-col-lg-15 {\n display: block;\n flex: 0 0 62.5%;\n max-width: 62.5%;\n }\n .ant-col-lg-push-15 {\n left: 62.5%;\n }\n .ant-col-lg-pull-15 {\n right: 62.5%;\n }\n .ant-col-lg-offset-15 {\n margin-left: 62.5%;\n }\n .ant-col-lg-order-15 {\n order: 15;\n }\n .ant-col-lg-14 {\n display: block;\n flex: 0 0 58.33333333%;\n max-width: 58.33333333%;\n }\n .ant-col-lg-push-14 {\n left: 58.33333333%;\n }\n .ant-col-lg-pull-14 {\n right: 58.33333333%;\n }\n .ant-col-lg-offset-14 {\n margin-left: 58.33333333%;\n }\n .ant-col-lg-order-14 {\n order: 14;\n }\n .ant-col-lg-13 {\n display: block;\n flex: 0 0 54.16666667%;\n max-width: 54.16666667%;\n }\n .ant-col-lg-push-13 {\n left: 54.16666667%;\n }\n .ant-col-lg-pull-13 {\n right: 54.16666667%;\n }\n .ant-col-lg-offset-13 {\n margin-left: 54.16666667%;\n }\n .ant-col-lg-order-13 {\n order: 13;\n }\n .ant-col-lg-12 {\n display: block;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .ant-col-lg-push-12 {\n left: 50%;\n }\n .ant-col-lg-pull-12 {\n right: 50%;\n }\n .ant-col-lg-offset-12 {\n margin-left: 50%;\n }\n .ant-col-lg-order-12 {\n order: 12;\n }\n .ant-col-lg-11 {\n display: block;\n flex: 0 0 45.83333333%;\n max-width: 45.83333333%;\n }\n .ant-col-lg-push-11 {\n left: 45.83333333%;\n }\n .ant-col-lg-pull-11 {\n right: 45.83333333%;\n }\n .ant-col-lg-offset-11 {\n margin-left: 45.83333333%;\n }\n .ant-col-lg-order-11 {\n order: 11;\n }\n .ant-col-lg-10 {\n display: block;\n flex: 0 0 41.66666667%;\n max-width: 41.66666667%;\n }\n .ant-col-lg-push-10 {\n left: 41.66666667%;\n }\n .ant-col-lg-pull-10 {\n right: 41.66666667%;\n }\n .ant-col-lg-offset-10 {\n margin-left: 41.66666667%;\n }\n .ant-col-lg-order-10 {\n order: 10;\n }\n .ant-col-lg-9 {\n display: block;\n flex: 0 0 37.5%;\n max-width: 37.5%;\n }\n .ant-col-lg-push-9 {\n left: 37.5%;\n }\n .ant-col-lg-pull-9 {\n right: 37.5%;\n }\n .ant-col-lg-offset-9 {\n margin-left: 37.5%;\n }\n .ant-col-lg-order-9 {\n order: 9;\n }\n .ant-col-lg-8 {\n display: block;\n flex: 0 0 33.33333333%;\n max-width: 33.33333333%;\n }\n .ant-col-lg-push-8 {\n left: 33.33333333%;\n }\n .ant-col-lg-pull-8 {\n right: 33.33333333%;\n }\n .ant-col-lg-offset-8 {\n margin-left: 33.33333333%;\n }\n .ant-col-lg-order-8 {\n order: 8;\n }\n .ant-col-lg-7 {\n display: block;\n flex: 0 0 29.16666667%;\n max-width: 29.16666667%;\n }\n .ant-col-lg-push-7 {\n left: 29.16666667%;\n }\n .ant-col-lg-pull-7 {\n right: 29.16666667%;\n }\n .ant-col-lg-offset-7 {\n margin-left: 29.16666667%;\n }\n .ant-col-lg-order-7 {\n order: 7;\n }\n .ant-col-lg-6 {\n display: block;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .ant-col-lg-push-6 {\n left: 25%;\n }\n .ant-col-lg-pull-6 {\n right: 25%;\n }\n .ant-col-lg-offset-6 {\n margin-left: 25%;\n }\n .ant-col-lg-order-6 {\n order: 6;\n }\n .ant-col-lg-5 {\n display: block;\n flex: 0 0 20.83333333%;\n max-width: 20.83333333%;\n }\n .ant-col-lg-push-5 {\n left: 20.83333333%;\n }\n .ant-col-lg-pull-5 {\n right: 20.83333333%;\n }\n .ant-col-lg-offset-5 {\n margin-left: 20.83333333%;\n }\n .ant-col-lg-order-5 {\n order: 5;\n }\n .ant-col-lg-4 {\n display: block;\n flex: 0 0 16.66666667%;\n max-width: 16.66666667%;\n }\n .ant-col-lg-push-4 {\n left: 16.66666667%;\n }\n .ant-col-lg-pull-4 {\n right: 16.66666667%;\n }\n .ant-col-lg-offset-4 {\n margin-left: 16.66666667%;\n }\n .ant-col-lg-order-4 {\n order: 4;\n }\n .ant-col-lg-3 {\n display: block;\n flex: 0 0 12.5%;\n max-width: 12.5%;\n }\n .ant-col-lg-push-3 {\n left: 12.5%;\n }\n .ant-col-lg-pull-3 {\n right: 12.5%;\n }\n .ant-col-lg-offset-3 {\n margin-left: 12.5%;\n }\n .ant-col-lg-order-3 {\n order: 3;\n }\n .ant-col-lg-2 {\n display: block;\n flex: 0 0 8.33333333%;\n max-width: 8.33333333%;\n }\n .ant-col-lg-push-2 {\n left: 8.33333333%;\n }\n .ant-col-lg-pull-2 {\n right: 8.33333333%;\n }\n .ant-col-lg-offset-2 {\n margin-left: 8.33333333%;\n }\n .ant-col-lg-order-2 {\n order: 2;\n }\n .ant-col-lg-1 {\n display: block;\n flex: 0 0 4.16666667%;\n max-width: 4.16666667%;\n }\n .ant-col-lg-push-1 {\n left: 4.16666667%;\n }\n .ant-col-lg-pull-1 {\n right: 4.16666667%;\n }\n .ant-col-lg-offset-1 {\n margin-left: 4.16666667%;\n }\n .ant-col-lg-order-1 {\n order: 1;\n }\n .ant-col-lg-0 {\n display: none;\n }\n .ant-col-push-0 {\n left: auto;\n }\n .ant-col-pull-0 {\n right: auto;\n }\n .ant-col-lg-push-0 {\n left: auto;\n }\n .ant-col-lg-pull-0 {\n right: auto;\n }\n .ant-col-lg-offset-0 {\n margin-left: 0;\n }\n .ant-col-lg-order-0 {\n order: 0;\n }\n .ant-col-push-0.ant-col-rtl {\n right: auto;\n }\n .ant-col-pull-0.ant-col-rtl {\n left: auto;\n }\n .ant-col-lg-push-0.ant-col-rtl {\n right: auto;\n }\n .ant-col-lg-pull-0.ant-col-rtl {\n left: auto;\n }\n .ant-col-lg-offset-0.ant-col-rtl {\n margin-right: 0;\n }\n .ant-col-lg-push-1.ant-col-rtl {\n right: 4.16666667%;\n left: auto;\n }\n .ant-col-lg-pull-1.ant-col-rtl {\n right: auto;\n left: 4.16666667%;\n }\n .ant-col-lg-offset-1.ant-col-rtl {\n margin-right: 4.16666667%;\n margin-left: 0;\n }\n .ant-col-lg-push-2.ant-col-rtl {\n right: 8.33333333%;\n left: auto;\n }\n .ant-col-lg-pull-2.ant-col-rtl {\n right: auto;\n left: 8.33333333%;\n }\n .ant-col-lg-offset-2.ant-col-rtl {\n margin-right: 8.33333333%;\n margin-left: 0;\n }\n .ant-col-lg-push-3.ant-col-rtl {\n right: 12.5%;\n left: auto;\n }\n .ant-col-lg-pull-3.ant-col-rtl {\n right: auto;\n left: 12.5%;\n }\n .ant-col-lg-offset-3.ant-col-rtl {\n margin-right: 12.5%;\n margin-left: 0;\n }\n .ant-col-lg-push-4.ant-col-rtl {\n right: 16.66666667%;\n left: auto;\n }\n .ant-col-lg-pull-4.ant-col-rtl {\n right: auto;\n left: 16.66666667%;\n }\n .ant-col-lg-offset-4.ant-col-rtl {\n margin-right: 16.66666667%;\n margin-left: 0;\n }\n .ant-col-lg-push-5.ant-col-rtl {\n right: 20.83333333%;\n left: auto;\n }\n .ant-col-lg-pull-5.ant-col-rtl {\n right: auto;\n left: 20.83333333%;\n }\n .ant-col-lg-offset-5.ant-col-rtl {\n margin-right: 20.83333333%;\n margin-left: 0;\n }\n .ant-col-lg-push-6.ant-col-rtl {\n right: 25%;\n left: auto;\n }\n .ant-col-lg-pull-6.ant-col-rtl {\n right: auto;\n left: 25%;\n }\n .ant-col-lg-offset-6.ant-col-rtl {\n margin-right: 25%;\n margin-left: 0;\n }\n .ant-col-lg-push-7.ant-col-rtl {\n right: 29.16666667%;\n left: auto;\n }\n .ant-col-lg-pull-7.ant-col-rtl {\n right: auto;\n left: 29.16666667%;\n }\n .ant-col-lg-offset-7.ant-col-rtl {\n margin-right: 29.16666667%;\n margin-left: 0;\n }\n .ant-col-lg-push-8.ant-col-rtl {\n right: 33.33333333%;\n left: auto;\n }\n .ant-col-lg-pull-8.ant-col-rtl {\n right: auto;\n left: 33.33333333%;\n }\n .ant-col-lg-offset-8.ant-col-rtl {\n margin-right: 33.33333333%;\n margin-left: 0;\n }\n .ant-col-lg-push-9.ant-col-rtl {\n right: 37.5%;\n left: auto;\n }\n .ant-col-lg-pull-9.ant-col-rtl {\n right: auto;\n left: 37.5%;\n }\n .ant-col-lg-offset-9.ant-col-rtl {\n margin-right: 37.5%;\n margin-left: 0;\n }\n .ant-col-lg-push-10.ant-col-rtl {\n right: 41.66666667%;\n left: auto;\n }\n .ant-col-lg-pull-10.ant-col-rtl {\n right: auto;\n left: 41.66666667%;\n }\n .ant-col-lg-offset-10.ant-col-rtl {\n margin-right: 41.66666667%;\n margin-left: 0;\n }\n .ant-col-lg-push-11.ant-col-rtl {\n right: 45.83333333%;\n left: auto;\n }\n .ant-col-lg-pull-11.ant-col-rtl {\n right: auto;\n left: 45.83333333%;\n }\n .ant-col-lg-offset-11.ant-col-rtl {\n margin-right: 45.83333333%;\n margin-left: 0;\n }\n .ant-col-lg-push-12.ant-col-rtl {\n right: 50%;\n left: auto;\n }\n .ant-col-lg-pull-12.ant-col-rtl {\n right: auto;\n left: 50%;\n }\n .ant-col-lg-offset-12.ant-col-rtl {\n margin-right: 50%;\n margin-left: 0;\n }\n .ant-col-lg-push-13.ant-col-rtl {\n right: 54.16666667%;\n left: auto;\n }\n .ant-col-lg-pull-13.ant-col-rtl {\n right: auto;\n left: 54.16666667%;\n }\n .ant-col-lg-offset-13.ant-col-rtl {\n margin-right: 54.16666667%;\n margin-left: 0;\n }\n .ant-col-lg-push-14.ant-col-rtl {\n right: 58.33333333%;\n left: auto;\n }\n .ant-col-lg-pull-14.ant-col-rtl {\n right: auto;\n left: 58.33333333%;\n }\n .ant-col-lg-offset-14.ant-col-rtl {\n margin-right: 58.33333333%;\n margin-left: 0;\n }\n .ant-col-lg-push-15.ant-col-rtl {\n right: 62.5%;\n left: auto;\n }\n .ant-col-lg-pull-15.ant-col-rtl {\n right: auto;\n left: 62.5%;\n }\n .ant-col-lg-offset-15.ant-col-rtl {\n margin-right: 62.5%;\n margin-left: 0;\n }\n .ant-col-lg-push-16.ant-col-rtl {\n right: 66.66666667%;\n left: auto;\n }\n .ant-col-lg-pull-16.ant-col-rtl {\n right: auto;\n left: 66.66666667%;\n }\n .ant-col-lg-offset-16.ant-col-rtl {\n margin-right: 66.66666667%;\n margin-left: 0;\n }\n .ant-col-lg-push-17.ant-col-rtl {\n right: 70.83333333%;\n left: auto;\n }\n .ant-col-lg-pull-17.ant-col-rtl {\n right: auto;\n left: 70.83333333%;\n }\n .ant-col-lg-offset-17.ant-col-rtl {\n margin-right: 70.83333333%;\n margin-left: 0;\n }\n .ant-col-lg-push-18.ant-col-rtl {\n right: 75%;\n left: auto;\n }\n .ant-col-lg-pull-18.ant-col-rtl {\n right: auto;\n left: 75%;\n }\n .ant-col-lg-offset-18.ant-col-rtl {\n margin-right: 75%;\n margin-left: 0;\n }\n .ant-col-lg-push-19.ant-col-rtl {\n right: 79.16666667%;\n left: auto;\n }\n .ant-col-lg-pull-19.ant-col-rtl {\n right: auto;\n left: 79.16666667%;\n }\n .ant-col-lg-offset-19.ant-col-rtl {\n margin-right: 79.16666667%;\n margin-left: 0;\n }\n .ant-col-lg-push-20.ant-col-rtl {\n right: 83.33333333%;\n left: auto;\n }\n .ant-col-lg-pull-20.ant-col-rtl {\n right: auto;\n left: 83.33333333%;\n }\n .ant-col-lg-offset-20.ant-col-rtl {\n margin-right: 83.33333333%;\n margin-left: 0;\n }\n .ant-col-lg-push-21.ant-col-rtl {\n right: 87.5%;\n left: auto;\n }\n .ant-col-lg-pull-21.ant-col-rtl {\n right: auto;\n left: 87.5%;\n }\n .ant-col-lg-offset-21.ant-col-rtl {\n margin-right: 87.5%;\n margin-left: 0;\n }\n .ant-col-lg-push-22.ant-col-rtl {\n right: 91.66666667%;\n left: auto;\n }\n .ant-col-lg-pull-22.ant-col-rtl {\n right: auto;\n left: 91.66666667%;\n }\n .ant-col-lg-offset-22.ant-col-rtl {\n margin-right: 91.66666667%;\n margin-left: 0;\n }\n .ant-col-lg-push-23.ant-col-rtl {\n right: 95.83333333%;\n left: auto;\n }\n .ant-col-lg-pull-23.ant-col-rtl {\n right: auto;\n left: 95.83333333%;\n }\n .ant-col-lg-offset-23.ant-col-rtl {\n margin-right: 95.83333333%;\n margin-left: 0;\n }\n .ant-col-lg-push-24.ant-col-rtl {\n right: 100%;\n left: auto;\n }\n .ant-col-lg-pull-24.ant-col-rtl {\n right: auto;\n left: 100%;\n }\n .ant-col-lg-offset-24.ant-col-rtl {\n margin-right: 100%;\n margin-left: 0;\n }\n}\n@media (min-width: 1200px) {\n .ant-col-xl-24 {\n display: block;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .ant-col-xl-push-24 {\n left: 100%;\n }\n .ant-col-xl-pull-24 {\n right: 100%;\n }\n .ant-col-xl-offset-24 {\n margin-left: 100%;\n }\n .ant-col-xl-order-24 {\n order: 24;\n }\n .ant-col-xl-23 {\n display: block;\n flex: 0 0 95.83333333%;\n max-width: 95.83333333%;\n }\n .ant-col-xl-push-23 {\n left: 95.83333333%;\n }\n .ant-col-xl-pull-23 {\n right: 95.83333333%;\n }\n .ant-col-xl-offset-23 {\n margin-left: 95.83333333%;\n }\n .ant-col-xl-order-23 {\n order: 23;\n }\n .ant-col-xl-22 {\n display: block;\n flex: 0 0 91.66666667%;\n max-width: 91.66666667%;\n }\n .ant-col-xl-push-22 {\n left: 91.66666667%;\n }\n .ant-col-xl-pull-22 {\n right: 91.66666667%;\n }\n .ant-col-xl-offset-22 {\n margin-left: 91.66666667%;\n }\n .ant-col-xl-order-22 {\n order: 22;\n }\n .ant-col-xl-21 {\n display: block;\n flex: 0 0 87.5%;\n max-width: 87.5%;\n }\n .ant-col-xl-push-21 {\n left: 87.5%;\n }\n .ant-col-xl-pull-21 {\n right: 87.5%;\n }\n .ant-col-xl-offset-21 {\n margin-left: 87.5%;\n }\n .ant-col-xl-order-21 {\n order: 21;\n }\n .ant-col-xl-20 {\n display: block;\n flex: 0 0 83.33333333%;\n max-width: 83.33333333%;\n }\n .ant-col-xl-push-20 {\n left: 83.33333333%;\n }\n .ant-col-xl-pull-20 {\n right: 83.33333333%;\n }\n .ant-col-xl-offset-20 {\n margin-left: 83.33333333%;\n }\n .ant-col-xl-order-20 {\n order: 20;\n }\n .ant-col-xl-19 {\n display: block;\n flex: 0 0 79.16666667%;\n max-width: 79.16666667%;\n }\n .ant-col-xl-push-19 {\n left: 79.16666667%;\n }\n .ant-col-xl-pull-19 {\n right: 79.16666667%;\n }\n .ant-col-xl-offset-19 {\n margin-left: 79.16666667%;\n }\n .ant-col-xl-order-19 {\n order: 19;\n }\n .ant-col-xl-18 {\n display: block;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .ant-col-xl-push-18 {\n left: 75%;\n }\n .ant-col-xl-pull-18 {\n right: 75%;\n }\n .ant-col-xl-offset-18 {\n margin-left: 75%;\n }\n .ant-col-xl-order-18 {\n order: 18;\n }\n .ant-col-xl-17 {\n display: block;\n flex: 0 0 70.83333333%;\n max-width: 70.83333333%;\n }\n .ant-col-xl-push-17 {\n left: 70.83333333%;\n }\n .ant-col-xl-pull-17 {\n right: 70.83333333%;\n }\n .ant-col-xl-offset-17 {\n margin-left: 70.83333333%;\n }\n .ant-col-xl-order-17 {\n order: 17;\n }\n .ant-col-xl-16 {\n display: block;\n flex: 0 0 66.66666667%;\n max-width: 66.66666667%;\n }\n .ant-col-xl-push-16 {\n left: 66.66666667%;\n }\n .ant-col-xl-pull-16 {\n right: 66.66666667%;\n }\n .ant-col-xl-offset-16 {\n margin-left: 66.66666667%;\n }\n .ant-col-xl-order-16 {\n order: 16;\n }\n .ant-col-xl-15 {\n display: block;\n flex: 0 0 62.5%;\n max-width: 62.5%;\n }\n .ant-col-xl-push-15 {\n left: 62.5%;\n }\n .ant-col-xl-pull-15 {\n right: 62.5%;\n }\n .ant-col-xl-offset-15 {\n margin-left: 62.5%;\n }\n .ant-col-xl-order-15 {\n order: 15;\n }\n .ant-col-xl-14 {\n display: block;\n flex: 0 0 58.33333333%;\n max-width: 58.33333333%;\n }\n .ant-col-xl-push-14 {\n left: 58.33333333%;\n }\n .ant-col-xl-pull-14 {\n right: 58.33333333%;\n }\n .ant-col-xl-offset-14 {\n margin-left: 58.33333333%;\n }\n .ant-col-xl-order-14 {\n order: 14;\n }\n .ant-col-xl-13 {\n display: block;\n flex: 0 0 54.16666667%;\n max-width: 54.16666667%;\n }\n .ant-col-xl-push-13 {\n left: 54.16666667%;\n }\n .ant-col-xl-pull-13 {\n right: 54.16666667%;\n }\n .ant-col-xl-offset-13 {\n margin-left: 54.16666667%;\n }\n .ant-col-xl-order-13 {\n order: 13;\n }\n .ant-col-xl-12 {\n display: block;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .ant-col-xl-push-12 {\n left: 50%;\n }\n .ant-col-xl-pull-12 {\n right: 50%;\n }\n .ant-col-xl-offset-12 {\n margin-left: 50%;\n }\n .ant-col-xl-order-12 {\n order: 12;\n }\n .ant-col-xl-11 {\n display: block;\n flex: 0 0 45.83333333%;\n max-width: 45.83333333%;\n }\n .ant-col-xl-push-11 {\n left: 45.83333333%;\n }\n .ant-col-xl-pull-11 {\n right: 45.83333333%;\n }\n .ant-col-xl-offset-11 {\n margin-left: 45.83333333%;\n }\n .ant-col-xl-order-11 {\n order: 11;\n }\n .ant-col-xl-10 {\n display: block;\n flex: 0 0 41.66666667%;\n max-width: 41.66666667%;\n }\n .ant-col-xl-push-10 {\n left: 41.66666667%;\n }\n .ant-col-xl-pull-10 {\n right: 41.66666667%;\n }\n .ant-col-xl-offset-10 {\n margin-left: 41.66666667%;\n }\n .ant-col-xl-order-10 {\n order: 10;\n }\n .ant-col-xl-9 {\n display: block;\n flex: 0 0 37.5%;\n max-width: 37.5%;\n }\n .ant-col-xl-push-9 {\n left: 37.5%;\n }\n .ant-col-xl-pull-9 {\n right: 37.5%;\n }\n .ant-col-xl-offset-9 {\n margin-left: 37.5%;\n }\n .ant-col-xl-order-9 {\n order: 9;\n }\n .ant-col-xl-8 {\n display: block;\n flex: 0 0 33.33333333%;\n max-width: 33.33333333%;\n }\n .ant-col-xl-push-8 {\n left: 33.33333333%;\n }\n .ant-col-xl-pull-8 {\n right: 33.33333333%;\n }\n .ant-col-xl-offset-8 {\n margin-left: 33.33333333%;\n }\n .ant-col-xl-order-8 {\n order: 8;\n }\n .ant-col-xl-7 {\n display: block;\n flex: 0 0 29.16666667%;\n max-width: 29.16666667%;\n }\n .ant-col-xl-push-7 {\n left: 29.16666667%;\n }\n .ant-col-xl-pull-7 {\n right: 29.16666667%;\n }\n .ant-col-xl-offset-7 {\n margin-left: 29.16666667%;\n }\n .ant-col-xl-order-7 {\n order: 7;\n }\n .ant-col-xl-6 {\n display: block;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .ant-col-xl-push-6 {\n left: 25%;\n }\n .ant-col-xl-pull-6 {\n right: 25%;\n }\n .ant-col-xl-offset-6 {\n margin-left: 25%;\n }\n .ant-col-xl-order-6 {\n order: 6;\n }\n .ant-col-xl-5 {\n display: block;\n flex: 0 0 20.83333333%;\n max-width: 20.83333333%;\n }\n .ant-col-xl-push-5 {\n left: 20.83333333%;\n }\n .ant-col-xl-pull-5 {\n right: 20.83333333%;\n }\n .ant-col-xl-offset-5 {\n margin-left: 20.83333333%;\n }\n .ant-col-xl-order-5 {\n order: 5;\n }\n .ant-col-xl-4 {\n display: block;\n flex: 0 0 16.66666667%;\n max-width: 16.66666667%;\n }\n .ant-col-xl-push-4 {\n left: 16.66666667%;\n }\n .ant-col-xl-pull-4 {\n right: 16.66666667%;\n }\n .ant-col-xl-offset-4 {\n margin-left: 16.66666667%;\n }\n .ant-col-xl-order-4 {\n order: 4;\n }\n .ant-col-xl-3 {\n display: block;\n flex: 0 0 12.5%;\n max-width: 12.5%;\n }\n .ant-col-xl-push-3 {\n left: 12.5%;\n }\n .ant-col-xl-pull-3 {\n right: 12.5%;\n }\n .ant-col-xl-offset-3 {\n margin-left: 12.5%;\n }\n .ant-col-xl-order-3 {\n order: 3;\n }\n .ant-col-xl-2 {\n display: block;\n flex: 0 0 8.33333333%;\n max-width: 8.33333333%;\n }\n .ant-col-xl-push-2 {\n left: 8.33333333%;\n }\n .ant-col-xl-pull-2 {\n right: 8.33333333%;\n }\n .ant-col-xl-offset-2 {\n margin-left: 8.33333333%;\n }\n .ant-col-xl-order-2 {\n order: 2;\n }\n .ant-col-xl-1 {\n display: block;\n flex: 0 0 4.16666667%;\n max-width: 4.16666667%;\n }\n .ant-col-xl-push-1 {\n left: 4.16666667%;\n }\n .ant-col-xl-pull-1 {\n right: 4.16666667%;\n }\n .ant-col-xl-offset-1 {\n margin-left: 4.16666667%;\n }\n .ant-col-xl-order-1 {\n order: 1;\n }\n .ant-col-xl-0 {\n display: none;\n }\n .ant-col-push-0 {\n left: auto;\n }\n .ant-col-pull-0 {\n right: auto;\n }\n .ant-col-xl-push-0 {\n left: auto;\n }\n .ant-col-xl-pull-0 {\n right: auto;\n }\n .ant-col-xl-offset-0 {\n margin-left: 0;\n }\n .ant-col-xl-order-0 {\n order: 0;\n }\n .ant-col-push-0.ant-col-rtl {\n right: auto;\n }\n .ant-col-pull-0.ant-col-rtl {\n left: auto;\n }\n .ant-col-xl-push-0.ant-col-rtl {\n right: auto;\n }\n .ant-col-xl-pull-0.ant-col-rtl {\n left: auto;\n }\n .ant-col-xl-offset-0.ant-col-rtl {\n margin-right: 0;\n }\n .ant-col-xl-push-1.ant-col-rtl {\n right: 4.16666667%;\n left: auto;\n }\n .ant-col-xl-pull-1.ant-col-rtl {\n right: auto;\n left: 4.16666667%;\n }\n .ant-col-xl-offset-1.ant-col-rtl {\n margin-right: 4.16666667%;\n margin-left: 0;\n }\n .ant-col-xl-push-2.ant-col-rtl {\n right: 8.33333333%;\n left: auto;\n }\n .ant-col-xl-pull-2.ant-col-rtl {\n right: auto;\n left: 8.33333333%;\n }\n .ant-col-xl-offset-2.ant-col-rtl {\n margin-right: 8.33333333%;\n margin-left: 0;\n }\n .ant-col-xl-push-3.ant-col-rtl {\n right: 12.5%;\n left: auto;\n }\n .ant-col-xl-pull-3.ant-col-rtl {\n right: auto;\n left: 12.5%;\n }\n .ant-col-xl-offset-3.ant-col-rtl {\n margin-right: 12.5%;\n margin-left: 0;\n }\n .ant-col-xl-push-4.ant-col-rtl {\n right: 16.66666667%;\n left: auto;\n }\n .ant-col-xl-pull-4.ant-col-rtl {\n right: auto;\n left: 16.66666667%;\n }\n .ant-col-xl-offset-4.ant-col-rtl {\n margin-right: 16.66666667%;\n margin-left: 0;\n }\n .ant-col-xl-push-5.ant-col-rtl {\n right: 20.83333333%;\n left: auto;\n }\n .ant-col-xl-pull-5.ant-col-rtl {\n right: auto;\n left: 20.83333333%;\n }\n .ant-col-xl-offset-5.ant-col-rtl {\n margin-right: 20.83333333%;\n margin-left: 0;\n }\n .ant-col-xl-push-6.ant-col-rtl {\n right: 25%;\n left: auto;\n }\n .ant-col-xl-pull-6.ant-col-rtl {\n right: auto;\n left: 25%;\n }\n .ant-col-xl-offset-6.ant-col-rtl {\n margin-right: 25%;\n margin-left: 0;\n }\n .ant-col-xl-push-7.ant-col-rtl {\n right: 29.16666667%;\n left: auto;\n }\n .ant-col-xl-pull-7.ant-col-rtl {\n right: auto;\n left: 29.16666667%;\n }\n .ant-col-xl-offset-7.ant-col-rtl {\n margin-right: 29.16666667%;\n margin-left: 0;\n }\n .ant-col-xl-push-8.ant-col-rtl {\n right: 33.33333333%;\n left: auto;\n }\n .ant-col-xl-pull-8.ant-col-rtl {\n right: auto;\n left: 33.33333333%;\n }\n .ant-col-xl-offset-8.ant-col-rtl {\n margin-right: 33.33333333%;\n margin-left: 0;\n }\n .ant-col-xl-push-9.ant-col-rtl {\n right: 37.5%;\n left: auto;\n }\n .ant-col-xl-pull-9.ant-col-rtl {\n right: auto;\n left: 37.5%;\n }\n .ant-col-xl-offset-9.ant-col-rtl {\n margin-right: 37.5%;\n margin-left: 0;\n }\n .ant-col-xl-push-10.ant-col-rtl {\n right: 41.66666667%;\n left: auto;\n }\n .ant-col-xl-pull-10.ant-col-rtl {\n right: auto;\n left: 41.66666667%;\n }\n .ant-col-xl-offset-10.ant-col-rtl {\n margin-right: 41.66666667%;\n margin-left: 0;\n }\n .ant-col-xl-push-11.ant-col-rtl {\n right: 45.83333333%;\n left: auto;\n }\n .ant-col-xl-pull-11.ant-col-rtl {\n right: auto;\n left: 45.83333333%;\n }\n .ant-col-xl-offset-11.ant-col-rtl {\n margin-right: 45.83333333%;\n margin-left: 0;\n }\n .ant-col-xl-push-12.ant-col-rtl {\n right: 50%;\n left: auto;\n }\n .ant-col-xl-pull-12.ant-col-rtl {\n right: auto;\n left: 50%;\n }\n .ant-col-xl-offset-12.ant-col-rtl {\n margin-right: 50%;\n margin-left: 0;\n }\n .ant-col-xl-push-13.ant-col-rtl {\n right: 54.16666667%;\n left: auto;\n }\n .ant-col-xl-pull-13.ant-col-rtl {\n right: auto;\n left: 54.16666667%;\n }\n .ant-col-xl-offset-13.ant-col-rtl {\n margin-right: 54.16666667%;\n margin-left: 0;\n }\n .ant-col-xl-push-14.ant-col-rtl {\n right: 58.33333333%;\n left: auto;\n }\n .ant-col-xl-pull-14.ant-col-rtl {\n right: auto;\n left: 58.33333333%;\n }\n .ant-col-xl-offset-14.ant-col-rtl {\n margin-right: 58.33333333%;\n margin-left: 0;\n }\n .ant-col-xl-push-15.ant-col-rtl {\n right: 62.5%;\n left: auto;\n }\n .ant-col-xl-pull-15.ant-col-rtl {\n right: auto;\n left: 62.5%;\n }\n .ant-col-xl-offset-15.ant-col-rtl {\n margin-right: 62.5%;\n margin-left: 0;\n }\n .ant-col-xl-push-16.ant-col-rtl {\n right: 66.66666667%;\n left: auto;\n }\n .ant-col-xl-pull-16.ant-col-rtl {\n right: auto;\n left: 66.66666667%;\n }\n .ant-col-xl-offset-16.ant-col-rtl {\n margin-right: 66.66666667%;\n margin-left: 0;\n }\n .ant-col-xl-push-17.ant-col-rtl {\n right: 70.83333333%;\n left: auto;\n }\n .ant-col-xl-pull-17.ant-col-rtl {\n right: auto;\n left: 70.83333333%;\n }\n .ant-col-xl-offset-17.ant-col-rtl {\n margin-right: 70.83333333%;\n margin-left: 0;\n }\n .ant-col-xl-push-18.ant-col-rtl {\n right: 75%;\n left: auto;\n }\n .ant-col-xl-pull-18.ant-col-rtl {\n right: auto;\n left: 75%;\n }\n .ant-col-xl-offset-18.ant-col-rtl {\n margin-right: 75%;\n margin-left: 0;\n }\n .ant-col-xl-push-19.ant-col-rtl {\n right: 79.16666667%;\n left: auto;\n }\n .ant-col-xl-pull-19.ant-col-rtl {\n right: auto;\n left: 79.16666667%;\n }\n .ant-col-xl-offset-19.ant-col-rtl {\n margin-right: 79.16666667%;\n margin-left: 0;\n }\n .ant-col-xl-push-20.ant-col-rtl {\n right: 83.33333333%;\n left: auto;\n }\n .ant-col-xl-pull-20.ant-col-rtl {\n right: auto;\n left: 83.33333333%;\n }\n .ant-col-xl-offset-20.ant-col-rtl {\n margin-right: 83.33333333%;\n margin-left: 0;\n }\n .ant-col-xl-push-21.ant-col-rtl {\n right: 87.5%;\n left: auto;\n }\n .ant-col-xl-pull-21.ant-col-rtl {\n right: auto;\n left: 87.5%;\n }\n .ant-col-xl-offset-21.ant-col-rtl {\n margin-right: 87.5%;\n margin-left: 0;\n }\n .ant-col-xl-push-22.ant-col-rtl {\n right: 91.66666667%;\n left: auto;\n }\n .ant-col-xl-pull-22.ant-col-rtl {\n right: auto;\n left: 91.66666667%;\n }\n .ant-col-xl-offset-22.ant-col-rtl {\n margin-right: 91.66666667%;\n margin-left: 0;\n }\n .ant-col-xl-push-23.ant-col-rtl {\n right: 95.83333333%;\n left: auto;\n }\n .ant-col-xl-pull-23.ant-col-rtl {\n right: auto;\n left: 95.83333333%;\n }\n .ant-col-xl-offset-23.ant-col-rtl {\n margin-right: 95.83333333%;\n margin-left: 0;\n }\n .ant-col-xl-push-24.ant-col-rtl {\n right: 100%;\n left: auto;\n }\n .ant-col-xl-pull-24.ant-col-rtl {\n right: auto;\n left: 100%;\n }\n .ant-col-xl-offset-24.ant-col-rtl {\n margin-right: 100%;\n margin-left: 0;\n }\n}\n@media (min-width: 1600px) {\n .ant-col-xxl-24 {\n display: block;\n flex: 0 0 100%;\n max-width: 100%;\n }\n .ant-col-xxl-push-24 {\n left: 100%;\n }\n .ant-col-xxl-pull-24 {\n right: 100%;\n }\n .ant-col-xxl-offset-24 {\n margin-left: 100%;\n }\n .ant-col-xxl-order-24 {\n order: 24;\n }\n .ant-col-xxl-23 {\n display: block;\n flex: 0 0 95.83333333%;\n max-width: 95.83333333%;\n }\n .ant-col-xxl-push-23 {\n left: 95.83333333%;\n }\n .ant-col-xxl-pull-23 {\n right: 95.83333333%;\n }\n .ant-col-xxl-offset-23 {\n margin-left: 95.83333333%;\n }\n .ant-col-xxl-order-23 {\n order: 23;\n }\n .ant-col-xxl-22 {\n display: block;\n flex: 0 0 91.66666667%;\n max-width: 91.66666667%;\n }\n .ant-col-xxl-push-22 {\n left: 91.66666667%;\n }\n .ant-col-xxl-pull-22 {\n right: 91.66666667%;\n }\n .ant-col-xxl-offset-22 {\n margin-left: 91.66666667%;\n }\n .ant-col-xxl-order-22 {\n order: 22;\n }\n .ant-col-xxl-21 {\n display: block;\n flex: 0 0 87.5%;\n max-width: 87.5%;\n }\n .ant-col-xxl-push-21 {\n left: 87.5%;\n }\n .ant-col-xxl-pull-21 {\n right: 87.5%;\n }\n .ant-col-xxl-offset-21 {\n margin-left: 87.5%;\n }\n .ant-col-xxl-order-21 {\n order: 21;\n }\n .ant-col-xxl-20 {\n display: block;\n flex: 0 0 83.33333333%;\n max-width: 83.33333333%;\n }\n .ant-col-xxl-push-20 {\n left: 83.33333333%;\n }\n .ant-col-xxl-pull-20 {\n right: 83.33333333%;\n }\n .ant-col-xxl-offset-20 {\n margin-left: 83.33333333%;\n }\n .ant-col-xxl-order-20 {\n order: 20;\n }\n .ant-col-xxl-19 {\n display: block;\n flex: 0 0 79.16666667%;\n max-width: 79.16666667%;\n }\n .ant-col-xxl-push-19 {\n left: 79.16666667%;\n }\n .ant-col-xxl-pull-19 {\n right: 79.16666667%;\n }\n .ant-col-xxl-offset-19 {\n margin-left: 79.16666667%;\n }\n .ant-col-xxl-order-19 {\n order: 19;\n }\n .ant-col-xxl-18 {\n display: block;\n flex: 0 0 75%;\n max-width: 75%;\n }\n .ant-col-xxl-push-18 {\n left: 75%;\n }\n .ant-col-xxl-pull-18 {\n right: 75%;\n }\n .ant-col-xxl-offset-18 {\n margin-left: 75%;\n }\n .ant-col-xxl-order-18 {\n order: 18;\n }\n .ant-col-xxl-17 {\n display: block;\n flex: 0 0 70.83333333%;\n max-width: 70.83333333%;\n }\n .ant-col-xxl-push-17 {\n left: 70.83333333%;\n }\n .ant-col-xxl-pull-17 {\n right: 70.83333333%;\n }\n .ant-col-xxl-offset-17 {\n margin-left: 70.83333333%;\n }\n .ant-col-xxl-order-17 {\n order: 17;\n }\n .ant-col-xxl-16 {\n display: block;\n flex: 0 0 66.66666667%;\n max-width: 66.66666667%;\n }\n .ant-col-xxl-push-16 {\n left: 66.66666667%;\n }\n .ant-col-xxl-pull-16 {\n right: 66.66666667%;\n }\n .ant-col-xxl-offset-16 {\n margin-left: 66.66666667%;\n }\n .ant-col-xxl-order-16 {\n order: 16;\n }\n .ant-col-xxl-15 {\n display: block;\n flex: 0 0 62.5%;\n max-width: 62.5%;\n }\n .ant-col-xxl-push-15 {\n left: 62.5%;\n }\n .ant-col-xxl-pull-15 {\n right: 62.5%;\n }\n .ant-col-xxl-offset-15 {\n margin-left: 62.5%;\n }\n .ant-col-xxl-order-15 {\n order: 15;\n }\n .ant-col-xxl-14 {\n display: block;\n flex: 0 0 58.33333333%;\n max-width: 58.33333333%;\n }\n .ant-col-xxl-push-14 {\n left: 58.33333333%;\n }\n .ant-col-xxl-pull-14 {\n right: 58.33333333%;\n }\n .ant-col-xxl-offset-14 {\n margin-left: 58.33333333%;\n }\n .ant-col-xxl-order-14 {\n order: 14;\n }\n .ant-col-xxl-13 {\n display: block;\n flex: 0 0 54.16666667%;\n max-width: 54.16666667%;\n }\n .ant-col-xxl-push-13 {\n left: 54.16666667%;\n }\n .ant-col-xxl-pull-13 {\n right: 54.16666667%;\n }\n .ant-col-xxl-offset-13 {\n margin-left: 54.16666667%;\n }\n .ant-col-xxl-order-13 {\n order: 13;\n }\n .ant-col-xxl-12 {\n display: block;\n flex: 0 0 50%;\n max-width: 50%;\n }\n .ant-col-xxl-push-12 {\n left: 50%;\n }\n .ant-col-xxl-pull-12 {\n right: 50%;\n }\n .ant-col-xxl-offset-12 {\n margin-left: 50%;\n }\n .ant-col-xxl-order-12 {\n order: 12;\n }\n .ant-col-xxl-11 {\n display: block;\n flex: 0 0 45.83333333%;\n max-width: 45.83333333%;\n }\n .ant-col-xxl-push-11 {\n left: 45.83333333%;\n }\n .ant-col-xxl-pull-11 {\n right: 45.83333333%;\n }\n .ant-col-xxl-offset-11 {\n margin-left: 45.83333333%;\n }\n .ant-col-xxl-order-11 {\n order: 11;\n }\n .ant-col-xxl-10 {\n display: block;\n flex: 0 0 41.66666667%;\n max-width: 41.66666667%;\n }\n .ant-col-xxl-push-10 {\n left: 41.66666667%;\n }\n .ant-col-xxl-pull-10 {\n right: 41.66666667%;\n }\n .ant-col-xxl-offset-10 {\n margin-left: 41.66666667%;\n }\n .ant-col-xxl-order-10 {\n order: 10;\n }\n .ant-col-xxl-9 {\n display: block;\n flex: 0 0 37.5%;\n max-width: 37.5%;\n }\n .ant-col-xxl-push-9 {\n left: 37.5%;\n }\n .ant-col-xxl-pull-9 {\n right: 37.5%;\n }\n .ant-col-xxl-offset-9 {\n margin-left: 37.5%;\n }\n .ant-col-xxl-order-9 {\n order: 9;\n }\n .ant-col-xxl-8 {\n display: block;\n flex: 0 0 33.33333333%;\n max-width: 33.33333333%;\n }\n .ant-col-xxl-push-8 {\n left: 33.33333333%;\n }\n .ant-col-xxl-pull-8 {\n right: 33.33333333%;\n }\n .ant-col-xxl-offset-8 {\n margin-left: 33.33333333%;\n }\n .ant-col-xxl-order-8 {\n order: 8;\n }\n .ant-col-xxl-7 {\n display: block;\n flex: 0 0 29.16666667%;\n max-width: 29.16666667%;\n }\n .ant-col-xxl-push-7 {\n left: 29.16666667%;\n }\n .ant-col-xxl-pull-7 {\n right: 29.16666667%;\n }\n .ant-col-xxl-offset-7 {\n margin-left: 29.16666667%;\n }\n .ant-col-xxl-order-7 {\n order: 7;\n }\n .ant-col-xxl-6 {\n display: block;\n flex: 0 0 25%;\n max-width: 25%;\n }\n .ant-col-xxl-push-6 {\n left: 25%;\n }\n .ant-col-xxl-pull-6 {\n right: 25%;\n }\n .ant-col-xxl-offset-6 {\n margin-left: 25%;\n }\n .ant-col-xxl-order-6 {\n order: 6;\n }\n .ant-col-xxl-5 {\n display: block;\n flex: 0 0 20.83333333%;\n max-width: 20.83333333%;\n }\n .ant-col-xxl-push-5 {\n left: 20.83333333%;\n }\n .ant-col-xxl-pull-5 {\n right: 20.83333333%;\n }\n .ant-col-xxl-offset-5 {\n margin-left: 20.83333333%;\n }\n .ant-col-xxl-order-5 {\n order: 5;\n }\n .ant-col-xxl-4 {\n display: block;\n flex: 0 0 16.66666667%;\n max-width: 16.66666667%;\n }\n .ant-col-xxl-push-4 {\n left: 16.66666667%;\n }\n .ant-col-xxl-pull-4 {\n right: 16.66666667%;\n }\n .ant-col-xxl-offset-4 {\n margin-left: 16.66666667%;\n }\n .ant-col-xxl-order-4 {\n order: 4;\n }\n .ant-col-xxl-3 {\n display: block;\n flex: 0 0 12.5%;\n max-width: 12.5%;\n }\n .ant-col-xxl-push-3 {\n left: 12.5%;\n }\n .ant-col-xxl-pull-3 {\n right: 12.5%;\n }\n .ant-col-xxl-offset-3 {\n margin-left: 12.5%;\n }\n .ant-col-xxl-order-3 {\n order: 3;\n }\n .ant-col-xxl-2 {\n display: block;\n flex: 0 0 8.33333333%;\n max-width: 8.33333333%;\n }\n .ant-col-xxl-push-2 {\n left: 8.33333333%;\n }\n .ant-col-xxl-pull-2 {\n right: 8.33333333%;\n }\n .ant-col-xxl-offset-2 {\n margin-left: 8.33333333%;\n }\n .ant-col-xxl-order-2 {\n order: 2;\n }\n .ant-col-xxl-1 {\n display: block;\n flex: 0 0 4.16666667%;\n max-width: 4.16666667%;\n }\n .ant-col-xxl-push-1 {\n left: 4.16666667%;\n }\n .ant-col-xxl-pull-1 {\n right: 4.16666667%;\n }\n .ant-col-xxl-offset-1 {\n margin-left: 4.16666667%;\n }\n .ant-col-xxl-order-1 {\n order: 1;\n }\n .ant-col-xxl-0 {\n display: none;\n }\n .ant-col-push-0 {\n left: auto;\n }\n .ant-col-pull-0 {\n right: auto;\n }\n .ant-col-xxl-push-0 {\n left: auto;\n }\n .ant-col-xxl-pull-0 {\n right: auto;\n }\n .ant-col-xxl-offset-0 {\n margin-left: 0;\n }\n .ant-col-xxl-order-0 {\n order: 0;\n }\n .ant-col-push-0.ant-col-rtl {\n right: auto;\n }\n .ant-col-pull-0.ant-col-rtl {\n left: auto;\n }\n .ant-col-xxl-push-0.ant-col-rtl {\n right: auto;\n }\n .ant-col-xxl-pull-0.ant-col-rtl {\n left: auto;\n }\n .ant-col-xxl-offset-0.ant-col-rtl {\n margin-right: 0;\n }\n .ant-col-xxl-push-1.ant-col-rtl {\n right: 4.16666667%;\n left: auto;\n }\n .ant-col-xxl-pull-1.ant-col-rtl {\n right: auto;\n left: 4.16666667%;\n }\n .ant-col-xxl-offset-1.ant-col-rtl {\n margin-right: 4.16666667%;\n margin-left: 0;\n }\n .ant-col-xxl-push-2.ant-col-rtl {\n right: 8.33333333%;\n left: auto;\n }\n .ant-col-xxl-pull-2.ant-col-rtl {\n right: auto;\n left: 8.33333333%;\n }\n .ant-col-xxl-offset-2.ant-col-rtl {\n margin-right: 8.33333333%;\n margin-left: 0;\n }\n .ant-col-xxl-push-3.ant-col-rtl {\n right: 12.5%;\n left: auto;\n }\n .ant-col-xxl-pull-3.ant-col-rtl {\n right: auto;\n left: 12.5%;\n }\n .ant-col-xxl-offset-3.ant-col-rtl {\n margin-right: 12.5%;\n margin-left: 0;\n }\n .ant-col-xxl-push-4.ant-col-rtl {\n right: 16.66666667%;\n left: auto;\n }\n .ant-col-xxl-pull-4.ant-col-rtl {\n right: auto;\n left: 16.66666667%;\n }\n .ant-col-xxl-offset-4.ant-col-rtl {\n margin-right: 16.66666667%;\n margin-left: 0;\n }\n .ant-col-xxl-push-5.ant-col-rtl {\n right: 20.83333333%;\n left: auto;\n }\n .ant-col-xxl-pull-5.ant-col-rtl {\n right: auto;\n left: 20.83333333%;\n }\n .ant-col-xxl-offset-5.ant-col-rtl {\n margin-right: 20.83333333%;\n margin-left: 0;\n }\n .ant-col-xxl-push-6.ant-col-rtl {\n right: 25%;\n left: auto;\n }\n .ant-col-xxl-pull-6.ant-col-rtl {\n right: auto;\n left: 25%;\n }\n .ant-col-xxl-offset-6.ant-col-rtl {\n margin-right: 25%;\n margin-left: 0;\n }\n .ant-col-xxl-push-7.ant-col-rtl {\n right: 29.16666667%;\n left: auto;\n }\n .ant-col-xxl-pull-7.ant-col-rtl {\n right: auto;\n left: 29.16666667%;\n }\n .ant-col-xxl-offset-7.ant-col-rtl {\n margin-right: 29.16666667%;\n margin-left: 0;\n }\n .ant-col-xxl-push-8.ant-col-rtl {\n right: 33.33333333%;\n left: auto;\n }\n .ant-col-xxl-pull-8.ant-col-rtl {\n right: auto;\n left: 33.33333333%;\n }\n .ant-col-xxl-offset-8.ant-col-rtl {\n margin-right: 33.33333333%;\n margin-left: 0;\n }\n .ant-col-xxl-push-9.ant-col-rtl {\n right: 37.5%;\n left: auto;\n }\n .ant-col-xxl-pull-9.ant-col-rtl {\n right: auto;\n left: 37.5%;\n }\n .ant-col-xxl-offset-9.ant-col-rtl {\n margin-right: 37.5%;\n margin-left: 0;\n }\n .ant-col-xxl-push-10.ant-col-rtl {\n right: 41.66666667%;\n left: auto;\n }\n .ant-col-xxl-pull-10.ant-col-rtl {\n right: auto;\n left: 41.66666667%;\n }\n .ant-col-xxl-offset-10.ant-col-rtl {\n margin-right: 41.66666667%;\n margin-left: 0;\n }\n .ant-col-xxl-push-11.ant-col-rtl {\n right: 45.83333333%;\n left: auto;\n }\n .ant-col-xxl-pull-11.ant-col-rtl {\n right: auto;\n left: 45.83333333%;\n }\n .ant-col-xxl-offset-11.ant-col-rtl {\n margin-right: 45.83333333%;\n margin-left: 0;\n }\n .ant-col-xxl-push-12.ant-col-rtl {\n right: 50%;\n left: auto;\n }\n .ant-col-xxl-pull-12.ant-col-rtl {\n right: auto;\n left: 50%;\n }\n .ant-col-xxl-offset-12.ant-col-rtl {\n margin-right: 50%;\n margin-left: 0;\n }\n .ant-col-xxl-push-13.ant-col-rtl {\n right: 54.16666667%;\n left: auto;\n }\n .ant-col-xxl-pull-13.ant-col-rtl {\n right: auto;\n left: 54.16666667%;\n }\n .ant-col-xxl-offset-13.ant-col-rtl {\n margin-right: 54.16666667%;\n margin-left: 0;\n }\n .ant-col-xxl-push-14.ant-col-rtl {\n right: 58.33333333%;\n left: auto;\n }\n .ant-col-xxl-pull-14.ant-col-rtl {\n right: auto;\n left: 58.33333333%;\n }\n .ant-col-xxl-offset-14.ant-col-rtl {\n margin-right: 58.33333333%;\n margin-left: 0;\n }\n .ant-col-xxl-push-15.ant-col-rtl {\n right: 62.5%;\n left: auto;\n }\n .ant-col-xxl-pull-15.ant-col-rtl {\n right: auto;\n left: 62.5%;\n }\n .ant-col-xxl-offset-15.ant-col-rtl {\n margin-right: 62.5%;\n margin-left: 0;\n }\n .ant-col-xxl-push-16.ant-col-rtl {\n right: 66.66666667%;\n left: auto;\n }\n .ant-col-xxl-pull-16.ant-col-rtl {\n right: auto;\n left: 66.66666667%;\n }\n .ant-col-xxl-offset-16.ant-col-rtl {\n margin-right: 66.66666667%;\n margin-left: 0;\n }\n .ant-col-xxl-push-17.ant-col-rtl {\n right: 70.83333333%;\n left: auto;\n }\n .ant-col-xxl-pull-17.ant-col-rtl {\n right: auto;\n left: 70.83333333%;\n }\n .ant-col-xxl-offset-17.ant-col-rtl {\n margin-right: 70.83333333%;\n margin-left: 0;\n }\n .ant-col-xxl-push-18.ant-col-rtl {\n right: 75%;\n left: auto;\n }\n .ant-col-xxl-pull-18.ant-col-rtl {\n right: auto;\n left: 75%;\n }\n .ant-col-xxl-offset-18.ant-col-rtl {\n margin-right: 75%;\n margin-left: 0;\n }\n .ant-col-xxl-push-19.ant-col-rtl {\n right: 79.16666667%;\n left: auto;\n }\n .ant-col-xxl-pull-19.ant-col-rtl {\n right: auto;\n left: 79.16666667%;\n }\n .ant-col-xxl-offset-19.ant-col-rtl {\n margin-right: 79.16666667%;\n margin-left: 0;\n }\n .ant-col-xxl-push-20.ant-col-rtl {\n right: 83.33333333%;\n left: auto;\n }\n .ant-col-xxl-pull-20.ant-col-rtl {\n right: auto;\n left: 83.33333333%;\n }\n .ant-col-xxl-offset-20.ant-col-rtl {\n margin-right: 83.33333333%;\n margin-left: 0;\n }\n .ant-col-xxl-push-21.ant-col-rtl {\n right: 87.5%;\n left: auto;\n }\n .ant-col-xxl-pull-21.ant-col-rtl {\n right: auto;\n left: 87.5%;\n }\n .ant-col-xxl-offset-21.ant-col-rtl {\n margin-right: 87.5%;\n margin-left: 0;\n }\n .ant-col-xxl-push-22.ant-col-rtl {\n right: 91.66666667%;\n left: auto;\n }\n .ant-col-xxl-pull-22.ant-col-rtl {\n right: auto;\n left: 91.66666667%;\n }\n .ant-col-xxl-offset-22.ant-col-rtl {\n margin-right: 91.66666667%;\n margin-left: 0;\n }\n .ant-col-xxl-push-23.ant-col-rtl {\n right: 95.83333333%;\n left: auto;\n }\n .ant-col-xxl-pull-23.ant-col-rtl {\n right: auto;\n left: 95.83333333%;\n }\n .ant-col-xxl-offset-23.ant-col-rtl {\n margin-right: 95.83333333%;\n margin-left: 0;\n }\n .ant-col-xxl-push-24.ant-col-rtl {\n right: 100%;\n left: auto;\n }\n .ant-col-xxl-pull-24.ant-col-rtl {\n right: auto;\n left: 100%;\n }\n .ant-col-xxl-offset-24.ant-col-rtl {\n margin-right: 100%;\n margin-left: 0;\n }\n}\n.ant-row-rtl {\n direction: rtl;\n}\n.ant-image {\n position: relative;\n display: inline-block;\n}\n.ant-image-img {\n width: 100%;\n height: auto;\n vertical-align: middle;\n}\n.ant-image-img-placeholder {\n background-color: #f5f5f5;\n background-image: url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTQuNSAyLjVoLTEzQS41LjUgMCAwIDAgMSAzdjEwYS41LjUgMCAwIDAgLjUuNWgxM2EuNS41IDAgMCAwIC41LS41VjNhLjUuNSAwIDAgMC0uNS0uNXpNNS4yODEgNC43NWExIDEgMCAwIDEgMCAyIDEgMSAwIDAgMSAwLTJ6bTguMDMgNi44M2EuMTI3LjEyNyAwIDAgMS0uMDgxLjAzSDIuNzY5YS4xMjUuMTI1IDAgMCAxLS4wOTYtLjIwN2wyLjY2MS0zLjE1NmEuMTI2LjEyNiAwIDAgMSAuMTc3LS4wMTZsLjAxNi4wMTZMNy4wOCAxMC4wOWwyLjQ3LTIuOTNhLjEyNi4xMjYgMCAwIDEgLjE3Ny0uMDE2bC4wMTUuMDE2IDMuNTg4IDQuMjQ0YS4xMjcuMTI3IDAgMCAxLS4wMi4xNzV6IiBmaWxsPSIjOEM4QzhDIiBmaWxsLXJ1bGU9Im5vbnplcm8iLz48L3N2Zz4=');\n background-repeat: no-repeat;\n background-position: center center;\n background-size: 30%;\n}\n.ant-image-mask {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n color: #fff;\n background: rgba(0, 0, 0, 0.5);\n cursor: pointer;\n opacity: 0;\n transition: opacity 0.3s;\n}\n.ant-image-mask-info {\n padding: 0 4px;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.ant-image-mask-info .anticon {\n margin-inline-end: 4px;\n}\n.ant-image-mask:hover {\n opacity: 1;\n}\n.ant-image-placeholder {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n}\n.ant-image-preview {\n pointer-events: none;\n height: 100%;\n text-align: center;\n}\n.ant-image-preview.ant-zoom-enter,\n.ant-image-preview.ant-zoom-appear {\n transform: none;\n opacity: 0;\n animation-duration: 0.3s;\n user-select: none;\n}\n.ant-image-preview-mask {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1000;\n height: 100%;\n background-color: rgba(0, 0, 0, 0.45);\n}\n.ant-image-preview-mask-hidden {\n display: none;\n}\n.ant-image-preview-wrap {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n overflow: auto;\n outline: 0;\n}\n.ant-image-preview-body {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n overflow: hidden;\n}\n.ant-image-preview-img {\n max-width: 100%;\n max-height: 100%;\n vertical-align: middle;\n transform: scale3d(1, 1, 1);\n cursor: grab;\n transition: transform 0.3s cubic-bezier(0.215, 0.61, 0.355, 1) 0s;\n user-select: none;\n pointer-events: auto;\n}\n.ant-image-preview-img-wrapper {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n transition: transform 0.3s cubic-bezier(0.215, 0.61, 0.355, 1) 0s;\n}\n.ant-image-preview-img-wrapper::before {\n display: inline-block;\n width: 1px;\n height: 50%;\n margin-right: -1px;\n content: '';\n}\n.ant-image-preview-moving .ant-image-preview-img {\n cursor: grabbing;\n}\n.ant-image-preview-moving .ant-image-preview-img-wrapper {\n transition-duration: 0s;\n}\n.ant-image-preview-wrap {\n z-index: 1080;\n}\n.ant-image-preview-operations {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n font-feature-settings: 'tnum';\n position: absolute;\n top: 0;\n right: 0;\n z-index: 1;\n display: flex;\n flex-direction: row-reverse;\n align-items: center;\n width: 100%;\n color: rgba(255, 255, 255, 0.85);\n list-style: none;\n background: rgba(0, 0, 0, 0.1);\n pointer-events: auto;\n}\n.ant-image-preview-operations-operation {\n margin-left: 12px;\n padding: 12px;\n cursor: pointer;\n}\n.ant-image-preview-operations-operation-disabled {\n color: rgba(255, 255, 255, 0.25);\n pointer-events: none;\n}\n.ant-image-preview-operations-operation:last-of-type {\n margin-left: 0;\n}\n.ant-image-preview-operations-progress {\n position: absolute;\n left: 50%;\n transform: translateX(-50%);\n}\n.ant-image-preview-operations-icon {\n font-size: 18px;\n}\n.ant-image-preview-switch-left,\n.ant-image-preview-switch-right {\n position: absolute;\n top: 50%;\n right: 10px;\n z-index: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 44px;\n height: 44px;\n margin-top: -22px;\n color: rgba(255, 255, 255, 0.85);\n background: rgba(0, 0, 0, 0.1);\n border-radius: 50%;\n cursor: pointer;\n pointer-events: auto;\n}\n.ant-image-preview-switch-left-disabled,\n.ant-image-preview-switch-right-disabled {\n color: rgba(255, 255, 255, 0.25);\n cursor: not-allowed;\n}\n.ant-image-preview-switch-left-disabled > .anticon,\n.ant-image-preview-switch-right-disabled > .anticon {\n cursor: not-allowed;\n}\n.ant-image-preview-switch-left > .anticon,\n.ant-image-preview-switch-right > .anticon {\n font-size: 18px;\n}\n.ant-image-preview-switch-left {\n left: 10px;\n}\n.ant-image-preview-switch-right {\n right: 10px;\n}\n.ant-input-affix-wrapper {\n position: relative;\n display: inline-block;\n width: 100%;\n min-width: 0;\n padding: 4px 11px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n line-height: 1.5715;\n background-color: #fff;\n background-image: none;\n border: 1px solid #d9d9d9;\n border-radius: 5px;\n transition: all 0.3s;\n display: inline-flex;\n}\n.ant-input-affix-wrapper::placeholder {\n color: #bfbfbf;\n user-select: none;\n}\n.ant-input-affix-wrapper:placeholder-shown {\n text-overflow: ellipsis;\n}\n.ant-input-affix-wrapper:hover {\n border-color: #8588ed;\n border-right-width: 1px;\n}\n.ant-input-rtl .ant-input-affix-wrapper:hover {\n border-right-width: 0;\n border-left-width: 1px !important;\n}\n.ant-input-affix-wrapper:focus,\n.ant-input-affix-wrapper-focused {\n border-color: #8588ed;\n box-shadow: 0 0 0 2px rgba(91, 92, 225, 0.2);\n border-right-width: 1px;\n outline: 0;\n}\n.ant-input-rtl .ant-input-affix-wrapper:focus,\n.ant-input-rtl .ant-input-affix-wrapper-focused {\n border-right-width: 0;\n border-left-width: 1px !important;\n}\n.ant-input-affix-wrapper-disabled {\n color: rgba(0, 0, 0, 0.25);\n background-color: #f5f5f5;\n border-color: #d9d9d9;\n box-shadow: none;\n cursor: not-allowed;\n opacity: 1;\n}\n.ant-input-affix-wrapper-disabled:hover {\n border-color: #d9d9d9;\n border-right-width: 1px;\n}\n.ant-input-affix-wrapper[disabled] {\n color: rgba(0, 0, 0, 0.25);\n background-color: #f5f5f5;\n border-color: #d9d9d9;\n box-shadow: none;\n cursor: not-allowed;\n opacity: 1;\n}\n.ant-input-affix-wrapper[disabled]:hover {\n border-color: #d9d9d9;\n border-right-width: 1px;\n}\n.ant-input-affix-wrapper-borderless,\n.ant-input-affix-wrapper-borderless:hover,\n.ant-input-affix-wrapper-borderless:focus,\n.ant-input-affix-wrapper-borderless-focused,\n.ant-input-affix-wrapper-borderless-disabled,\n.ant-input-affix-wrapper-borderless[disabled] {\n background-color: transparent;\n border: none;\n box-shadow: none;\n}\ntextarea.ant-input-affix-wrapper {\n max-width: 100%;\n height: auto;\n min-height: 32px;\n line-height: 1.5715;\n vertical-align: bottom;\n transition: all 0.3s, height 0s;\n}\n.ant-input-affix-wrapper-lg {\n padding: 6.5px 11px;\n font-size: 16px;\n}\n.ant-input-affix-wrapper-sm {\n padding: 0px 7px;\n}\n.ant-input-affix-wrapper-rtl {\n direction: rtl;\n}\n.ant-input-affix-wrapper:not(.ant-input-affix-wrapper-disabled):hover {\n border-color: #8588ed;\n border-right-width: 1px;\n z-index: 1;\n}\n.ant-input-rtl .ant-input-affix-wrapper:not(.ant-input-affix-wrapper-disabled):hover {\n border-right-width: 0;\n border-left-width: 1px !important;\n}\n.ant-input-search-with-button .ant-input-affix-wrapper:not(.ant-input-affix-wrapper-disabled):hover {\n z-index: 0;\n}\n.ant-input-affix-wrapper-focused,\n.ant-input-affix-wrapper:focus {\n z-index: 1;\n}\n.ant-input-affix-wrapper-disabled .ant-input[disabled] {\n background: transparent;\n}\n.ant-input-affix-wrapper > .ant-input {\n font-size: inherit;\n border: none;\n outline: none;\n}\n.ant-input-affix-wrapper > .ant-input:focus {\n box-shadow: none !important;\n}\n.ant-input-affix-wrapper > .ant-input:not(textarea) {\n padding: 0;\n}\n.ant-input-affix-wrapper::before {\n width: 0;\n visibility: hidden;\n content: '\\a0';\n}\n.ant-input-prefix,\n.ant-input-suffix {\n display: flex;\n flex: none;\n align-items: center;\n}\n.ant-input-prefix > *:not(:last-child),\n.ant-input-suffix > *:not(:last-child) {\n margin-right: 8px;\n}\n.ant-input-show-count-suffix {\n color: rgba(0, 0, 0, 0.45);\n}\n.ant-input-show-count-has-suffix {\n margin-right: 2px;\n}\n.ant-input-prefix {\n margin-right: 4px;\n}\n.ant-input-suffix {\n margin-left: 4px;\n}\n.anticon.ant-input-clear-icon,\n.ant-input-clear-icon {\n margin: 0;\n color: rgba(0, 0, 0, 0.25);\n font-size: 12px;\n vertical-align: -1px;\n cursor: pointer;\n transition: color 0.3s;\n}\n.anticon.ant-input-clear-icon:hover,\n.ant-input-clear-icon:hover {\n color: rgba(0, 0, 0, 0.45);\n}\n.anticon.ant-input-clear-icon:active,\n.ant-input-clear-icon:active {\n color: rgba(0, 0, 0, 0.85);\n}\n.anticon.ant-input-clear-icon-hidden,\n.ant-input-clear-icon-hidden {\n visibility: hidden;\n}\n.anticon.ant-input-clear-icon-has-suffix,\n.ant-input-clear-icon-has-suffix {\n margin: 0 4px;\n}\n.ant-input-affix-wrapper.ant-input-affix-wrapper-textarea-with-clear-btn {\n padding: 0;\n}\n.ant-input-affix-wrapper.ant-input-affix-wrapper-textarea-with-clear-btn .ant-input-clear-icon {\n position: absolute;\n top: 8px;\n right: 8px;\n z-index: 1;\n}\n.ant-input-status-error:not(.ant-input-disabled):not(.ant-input-borderless).ant-input,\n.ant-input-status-error:not(.ant-input-disabled):not(.ant-input-borderless).ant-input:hover {\n background: #fff;\n border-color: #ff4d4f;\n}\n.ant-input-status-error:not(.ant-input-disabled):not(.ant-input-borderless).ant-input:focus,\n.ant-input-status-error:not(.ant-input-disabled):not(.ant-input-borderless).ant-input-focused {\n border-color: #ff7875;\n box-shadow: 0 0 0 2px rgba(255, 77, 79, 0.2);\n border-right-width: 1px;\n outline: 0;\n}\n.ant-input-status-error .ant-input-prefix {\n color: #ff4d4f;\n}\n.ant-input-status-warning:not(.ant-input-disabled):not(.ant-input-borderless).ant-input,\n.ant-input-status-warning:not(.ant-input-disabled):not(.ant-input-borderless).ant-input:hover {\n background: #fff;\n border-color: #faad14;\n}\n.ant-input-status-warning:not(.ant-input-disabled):not(.ant-input-borderless).ant-input:focus,\n.ant-input-status-warning:not(.ant-input-disabled):not(.ant-input-borderless).ant-input-focused {\n border-color: #ffc53d;\n box-shadow: 0 0 0 2px rgba(250, 173, 20, 0.2);\n border-right-width: 1px;\n outline: 0;\n}\n.ant-input-status-warning .ant-input-prefix {\n color: #faad14;\n}\n.ant-input-affix-wrapper-status-error:not(.ant-input-affix-wrapper-disabled):not(.ant-input-affix-wrapper-borderless).ant-input-affix-wrapper,\n.ant-input-affix-wrapper-status-error:not(.ant-input-affix-wrapper-disabled):not(.ant-input-affix-wrapper-borderless).ant-input-affix-wrapper:hover {\n background: #fff;\n border-color: #ff4d4f;\n}\n.ant-input-affix-wrapper-status-error:not(.ant-input-affix-wrapper-disabled):not(.ant-input-affix-wrapper-borderless).ant-input-affix-wrapper:focus,\n.ant-input-affix-wrapper-status-error:not(.ant-input-affix-wrapper-disabled):not(.ant-input-affix-wrapper-borderless).ant-input-affix-wrapper-focused {\n border-color: #ff7875;\n box-shadow: 0 0 0 2px rgba(255, 77, 79, 0.2);\n border-right-width: 1px;\n outline: 0;\n}\n.ant-input-affix-wrapper-status-error .ant-input-prefix {\n color: #ff4d4f;\n}\n.ant-input-affix-wrapper-status-warning:not(.ant-input-affix-wrapper-disabled):not(.ant-input-affix-wrapper-borderless).ant-input-affix-wrapper,\n.ant-input-affix-wrapper-status-warning:not(.ant-input-affix-wrapper-disabled):not(.ant-input-affix-wrapper-borderless).ant-input-affix-wrapper:hover {\n background: #fff;\n border-color: #faad14;\n}\n.ant-input-affix-wrapper-status-warning:not(.ant-input-affix-wrapper-disabled):not(.ant-input-affix-wrapper-borderless).ant-input-affix-wrapper:focus,\n.ant-input-affix-wrapper-status-warning:not(.ant-input-affix-wrapper-disabled):not(.ant-input-affix-wrapper-borderless).ant-input-affix-wrapper-focused {\n border-color: #ffc53d;\n box-shadow: 0 0 0 2px rgba(250, 173, 20, 0.2);\n border-right-width: 1px;\n outline: 0;\n}\n.ant-input-affix-wrapper-status-warning .ant-input-prefix {\n color: #faad14;\n}\n.ant-input-textarea-status-error.ant-input-textarea-has-feedback .ant-input,\n.ant-input-textarea-status-warning.ant-input-textarea-has-feedback .ant-input,\n.ant-input-textarea-status-success.ant-input-textarea-has-feedback .ant-input,\n.ant-input-textarea-status-validating.ant-input-textarea-has-feedback .ant-input {\n padding-right: 24px;\n}\n.ant-input-group-wrapper-status-error .ant-input-group-addon {\n color: #ff4d4f;\n border-color: #ff4d4f;\n}\n.ant-input-group-wrapper-status-warning .ant-input-group-addon {\n color: #faad14;\n border-color: #faad14;\n}\n.ant-input {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n font-variant: tabular-nums;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n display: inline-block;\n width: 100%;\n min-width: 0;\n padding: 4px 11px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n line-height: 1.5715;\n background-color: #fff;\n background-image: none;\n border: 1px solid #d9d9d9;\n border-radius: 5px;\n transition: all 0.3s;\n}\n.ant-input::placeholder {\n color: #bfbfbf;\n user-select: none;\n}\n.ant-input:placeholder-shown {\n text-overflow: ellipsis;\n}\n.ant-input:hover {\n border-color: #8588ed;\n border-right-width: 1px;\n}\n.ant-input-rtl .ant-input:hover {\n border-right-width: 0;\n border-left-width: 1px !important;\n}\n.ant-input:focus,\n.ant-input-focused {\n border-color: #8588ed;\n box-shadow: 0 0 0 2px rgba(91, 92, 225, 0.2);\n border-right-width: 1px;\n outline: 0;\n}\n.ant-input-rtl .ant-input:focus,\n.ant-input-rtl .ant-input-focused {\n border-right-width: 0;\n border-left-width: 1px !important;\n}\n.ant-input-disabled {\n color: rgba(0, 0, 0, 0.25);\n background-color: #f5f5f5;\n border-color: #d9d9d9;\n box-shadow: none;\n cursor: not-allowed;\n opacity: 1;\n}\n.ant-input-disabled:hover {\n border-color: #d9d9d9;\n border-right-width: 1px;\n}\n.ant-input[disabled] {\n color: rgba(0, 0, 0, 0.25);\n background-color: #f5f5f5;\n border-color: #d9d9d9;\n box-shadow: none;\n cursor: not-allowed;\n opacity: 1;\n}\n.ant-input[disabled]:hover {\n border-color: #d9d9d9;\n border-right-width: 1px;\n}\n.ant-input-borderless,\n.ant-input-borderless:hover,\n.ant-input-borderless:focus,\n.ant-input-borderless-focused,\n.ant-input-borderless-disabled,\n.ant-input-borderless[disabled] {\n background-color: transparent;\n border: none;\n box-shadow: none;\n}\ntextarea.ant-input {\n max-width: 100%;\n height: auto;\n min-height: 32px;\n line-height: 1.5715;\n vertical-align: bottom;\n transition: all 0.3s, height 0s;\n}\n.ant-input-lg {\n padding: 6.5px 11px;\n font-size: 16px;\n}\n.ant-input-sm {\n padding: 0px 7px;\n}\n.ant-input-rtl {\n direction: rtl;\n}\n.ant-input-group {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n display: table;\n width: 100%;\n border-collapse: separate;\n border-spacing: 0;\n}\n.ant-input-group[class*='col-'] {\n float: none;\n padding-right: 0;\n padding-left: 0;\n}\n.ant-input-group > [class*='col-'] {\n padding-right: 8px;\n}\n.ant-input-group > [class*='col-']:last-child {\n padding-right: 0;\n}\n.ant-input-group-addon,\n.ant-input-group-wrap,\n.ant-input-group > .ant-input {\n display: table-cell;\n}\n.ant-input-group-addon:not(:first-child):not(:last-child),\n.ant-input-group-wrap:not(:first-child):not(:last-child),\n.ant-input-group > .ant-input:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.ant-input-group-addon,\n.ant-input-group-wrap {\n width: 1px;\n white-space: nowrap;\n vertical-align: middle;\n}\n.ant-input-group-wrap > * {\n display: block !important;\n}\n.ant-input-group .ant-input {\n float: left;\n width: 100%;\n margin-bottom: 0;\n text-align: inherit;\n}\n.ant-input-group .ant-input:focus {\n z-index: 1;\n border-right-width: 1px;\n}\n.ant-input-group .ant-input:hover {\n z-index: 1;\n border-right-width: 1px;\n}\n.ant-input-search-with-button .ant-input-group .ant-input:hover {\n z-index: 0;\n}\n.ant-input-group-addon {\n position: relative;\n padding: 0 11px;\n color: rgba(0, 0, 0, 0.85);\n font-weight: normal;\n font-size: 14px;\n text-align: center;\n background-color: #fafafa;\n border: 1px solid #d9d9d9;\n border-radius: 5px;\n transition: all 0.3s;\n}\n.ant-input-group-addon .ant-select {\n margin: -5px -11px;\n}\n.ant-input-group-addon .ant-select.ant-select-single:not(.ant-select-customize-input) .ant-select-selector {\n background-color: inherit;\n border: 1px solid transparent;\n box-shadow: none;\n}\n.ant-input-group-addon .ant-select-open .ant-select-selector,\n.ant-input-group-addon .ant-select-focused .ant-select-selector {\n color: #5b5ce1;\n}\n.ant-input-group-addon .ant-cascader-picker {\n margin: -9px -12px;\n background-color: transparent;\n}\n.ant-input-group-addon .ant-cascader-picker .ant-cascader-input {\n text-align: left;\n border: 0;\n box-shadow: none;\n}\n.ant-input-group > .ant-input:first-child,\n.ant-input-group-addon:first-child {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.ant-input-group > .ant-input:first-child .ant-select .ant-select-selector,\n.ant-input-group-addon:first-child .ant-select .ant-select-selector {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.ant-input-group > .ant-input-affix-wrapper:not(:first-child) .ant-input {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.ant-input-group > .ant-input-affix-wrapper:not(:last-child) .ant-input {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.ant-input-group-addon:first-child {\n border-right: 0;\n}\n.ant-input-group-addon:last-child {\n border-left: 0;\n}\n.ant-input-group > .ant-input:last-child,\n.ant-input-group-addon:last-child {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.ant-input-group > .ant-input:last-child .ant-select .ant-select-selector,\n.ant-input-group-addon:last-child .ant-select .ant-select-selector {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.ant-input-group-lg .ant-input,\n.ant-input-group-lg > .ant-input-group-addon {\n padding: 6.5px 11px;\n font-size: 16px;\n}\n.ant-input-group-sm .ant-input,\n.ant-input-group-sm > .ant-input-group-addon {\n padding: 0px 7px;\n}\n.ant-input-group-lg .ant-select-single .ant-select-selector {\n height: 40px;\n}\n.ant-input-group-sm .ant-select-single .ant-select-selector {\n height: 24px;\n}\n.ant-input-group .ant-input-affix-wrapper:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.ant-input-search .ant-input-group .ant-input-affix-wrapper:not(:last-child) {\n border-top-left-radius: 5px;\n border-bottom-left-radius: 5px;\n}\n.ant-input-group .ant-input-affix-wrapper:not(:first-child),\n.ant-input-search .ant-input-group .ant-input-affix-wrapper:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.ant-input-group.ant-input-group-compact {\n display: block;\n}\n.ant-input-group.ant-input-group-compact::before {\n display: table;\n content: '';\n}\n.ant-input-group.ant-input-group-compact::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-input-group.ant-input-group-compact::before {\n display: table;\n content: '';\n}\n.ant-input-group.ant-input-group-compact::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-input-group.ant-input-group-compact-addon:not(:first-child):not(:last-child),\n.ant-input-group.ant-input-group-compact-wrap:not(:first-child):not(:last-child),\n.ant-input-group.ant-input-group-compact > .ant-input:not(:first-child):not(:last-child) {\n border-right-width: 1px;\n}\n.ant-input-group.ant-input-group-compact-addon:not(:first-child):not(:last-child):hover,\n.ant-input-group.ant-input-group-compact-wrap:not(:first-child):not(:last-child):hover,\n.ant-input-group.ant-input-group-compact > .ant-input:not(:first-child):not(:last-child):hover {\n z-index: 1;\n}\n.ant-input-group.ant-input-group-compact-addon:not(:first-child):not(:last-child):focus,\n.ant-input-group.ant-input-group-compact-wrap:not(:first-child):not(:last-child):focus,\n.ant-input-group.ant-input-group-compact > .ant-input:not(:first-child):not(:last-child):focus {\n z-index: 1;\n}\n.ant-input-group.ant-input-group-compact > * {\n display: inline-block;\n float: none;\n vertical-align: top;\n border-radius: 0;\n}\n.ant-input-group.ant-input-group-compact > .ant-input-affix-wrapper {\n display: inline-flex;\n}\n.ant-input-group.ant-input-group-compact > .ant-picker-range {\n display: inline-flex;\n}\n.ant-input-group.ant-input-group-compact > *:not(:last-child) {\n margin-right: -1px;\n border-right-width: 1px;\n}\n.ant-input-group.ant-input-group-compact .ant-input {\n float: none;\n}\n.ant-input-group.ant-input-group-compact > .ant-select > .ant-select-selector,\n.ant-input-group.ant-input-group-compact > .ant-select-auto-complete .ant-input,\n.ant-input-group.ant-input-group-compact > .ant-cascader-picker .ant-input,\n.ant-input-group.ant-input-group-compact > .ant-input-group-wrapper .ant-input {\n border-right-width: 1px;\n border-radius: 0;\n}\n.ant-input-group.ant-input-group-compact > .ant-select > .ant-select-selector:hover,\n.ant-input-group.ant-input-group-compact > .ant-select-auto-complete .ant-input:hover,\n.ant-input-group.ant-input-group-compact > .ant-cascader-picker .ant-input:hover,\n.ant-input-group.ant-input-group-compact > .ant-input-group-wrapper .ant-input:hover {\n z-index: 1;\n}\n.ant-input-group.ant-input-group-compact > .ant-select > .ant-select-selector:focus,\n.ant-input-group.ant-input-group-compact > .ant-select-auto-complete .ant-input:focus,\n.ant-input-group.ant-input-group-compact > .ant-cascader-picker .ant-input:focus,\n.ant-input-group.ant-input-group-compact > .ant-input-group-wrapper .ant-input:focus {\n z-index: 1;\n}\n.ant-input-group.ant-input-group-compact > .ant-select-focused {\n z-index: 1;\n}\n.ant-input-group.ant-input-group-compact > .ant-select > .ant-select-arrow {\n z-index: 1;\n}\n.ant-input-group.ant-input-group-compact > *:first-child,\n.ant-input-group.ant-input-group-compact > .ant-select:first-child > .ant-select-selector,\n.ant-input-group.ant-input-group-compact > .ant-select-auto-complete:first-child .ant-input,\n.ant-input-group.ant-input-group-compact > .ant-cascader-picker:first-child .ant-input {\n border-top-left-radius: 5px;\n border-bottom-left-radius: 5px;\n}\n.ant-input-group.ant-input-group-compact > *:last-child,\n.ant-input-group.ant-input-group-compact > .ant-select:last-child > .ant-select-selector,\n.ant-input-group.ant-input-group-compact > .ant-cascader-picker:last-child .ant-input,\n.ant-input-group.ant-input-group-compact > .ant-cascader-picker-focused:last-child .ant-input {\n border-right-width: 1px;\n border-top-right-radius: 5px;\n border-bottom-right-radius: 5px;\n}\n.ant-input-group.ant-input-group-compact > .ant-select-auto-complete .ant-input {\n vertical-align: top;\n}\n.ant-input-group.ant-input-group-compact .ant-input-group-wrapper + .ant-input-group-wrapper {\n margin-left: -1px;\n}\n.ant-input-group.ant-input-group-compact .ant-input-group-wrapper + .ant-input-group-wrapper .ant-input-affix-wrapper {\n border-radius: 0;\n}\n.ant-input-group.ant-input-group-compact .ant-input-group-wrapper:not(:last-child).ant-input-search > .ant-input-group > .ant-input-group-addon > .ant-input-search-button {\n border-radius: 0;\n}\n.ant-input-group.ant-input-group-compact .ant-input-group-wrapper:not(:last-child).ant-input-search > .ant-input-group > .ant-input {\n border-radius: 5px 0 0 5px;\n}\n.ant-input-group > .ant-input-rtl:first-child,\n.ant-input-group-rtl .ant-input-group-addon:first-child {\n border-radius: 0 5px 5px 0;\n}\n.ant-input-group-rtl .ant-input-group-addon:first-child {\n border-right: 1px solid #d9d9d9;\n border-left: 0;\n}\n.ant-input-group-rtl .ant-input-group-addon:last-child {\n border-right: 0;\n border-left: 1px solid #d9d9d9;\n border-radius: 5px 0 0 5px;\n}\n.ant-input-group-rtl.ant-input-group > .ant-input:last-child,\n.ant-input-group-rtl.ant-input-group-addon:last-child {\n border-radius: 5px 0 0 5px;\n}\n.ant-input-group-rtl.ant-input-group .ant-input-affix-wrapper:not(:first-child) {\n border-radius: 5px 0 0 5px;\n}\n.ant-input-group-rtl.ant-input-group .ant-input-affix-wrapper:not(:last-child) {\n border-radius: 0 5px 5px 0;\n}\n.ant-input-group-rtl.ant-input-group.ant-input-group-compact > *:not(:last-child) {\n margin-right: 0;\n margin-left: -1px;\n border-left-width: 1px;\n}\n.ant-input-group-rtl.ant-input-group.ant-input-group-compact > *:first-child,\n.ant-input-group-rtl.ant-input-group.ant-input-group-compact > .ant-select:first-child > .ant-select-selector,\n.ant-input-group-rtl.ant-input-group.ant-input-group-compact > .ant-select-auto-complete:first-child .ant-input,\n.ant-input-group-rtl.ant-input-group.ant-input-group-compact > .ant-cascader-picker:first-child .ant-input {\n border-radius: 0 5px 5px 0;\n}\n.ant-input-group-rtl.ant-input-group.ant-input-group-compact > *:last-child,\n.ant-input-group-rtl.ant-input-group.ant-input-group-compact > .ant-select:last-child > .ant-select-selector,\n.ant-input-group-rtl.ant-input-group.ant-input-group-compact > .ant-select-auto-complete:last-child .ant-input,\n.ant-input-group-rtl.ant-input-group.ant-input-group-compact > .ant-cascader-picker:last-child .ant-input,\n.ant-input-group-rtl.ant-input-group.ant-input-group-compact > .ant-cascader-picker-focused:last-child .ant-input {\n border-left-width: 1px;\n border-radius: 5px 0 0 5px;\n}\n.ant-input-group.ant-input-group-compact .ant-input-group-wrapper-rtl + .ant-input-group-wrapper-rtl {\n margin-right: -1px;\n margin-left: 0;\n}\n.ant-input-group.ant-input-group-compact .ant-input-group-wrapper-rtl:not(:last-child).ant-input-search > .ant-input-group > .ant-input {\n border-radius: 0 5px 5px 0;\n}\n.ant-input-group > .ant-input-rtl:first-child {\n border-radius: 0 5px 5px 0;\n}\n.ant-input-group > .ant-input-rtl:last-child {\n border-radius: 5px 0 0 5px;\n}\n.ant-input-group-rtl .ant-input-group-addon:first-child {\n border-right: 1px solid #d9d9d9;\n border-left: 0;\n border-radius: 0 5px 5px 0;\n}\n.ant-input-group-rtl .ant-input-group-addon:last-child {\n border-right: 0;\n border-left: 1px solid #d9d9d9;\n border-radius: 5px 0 0 5px;\n}\n.ant-input-group-wrapper {\n display: inline-block;\n width: 100%;\n text-align: start;\n vertical-align: top;\n}\n.ant-input-password-icon.anticon {\n color: rgba(0, 0, 0, 0.45);\n cursor: pointer;\n transition: all 0.3s;\n}\n.ant-input-password-icon.anticon:hover {\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-input[type='color'] {\n height: 32px;\n}\n.ant-input[type='color'].ant-input-lg {\n height: 40px;\n}\n.ant-input[type='color'].ant-input-sm {\n height: 24px;\n padding-top: 3px;\n padding-bottom: 3px;\n}\n.ant-input-textarea-show-count > .ant-input {\n height: 100%;\n}\n.ant-input-textarea-show-count::after {\n float: right;\n color: rgba(0, 0, 0, 0.45);\n white-space: nowrap;\n content: attr(data-count);\n pointer-events: none;\n}\n.ant-input-textarea-show-count.ant-input-textarea-in-form-item::after {\n margin-bottom: -22px;\n}\n.ant-input-textarea-suffix {\n position: absolute;\n top: 0;\n right: 11px;\n bottom: 0;\n z-index: 1;\n display: inline-flex;\n align-items: center;\n margin: auto;\n}\n.ant-input-compact-item:not(.ant-input-compact-last-item):not(.ant-input-compact-item-rtl) {\n margin-right: -1px;\n}\n.ant-input-compact-item:not(.ant-input-compact-last-item).ant-input-compact-item-rtl {\n margin-left: -1px;\n}\n.ant-input-compact-item:hover,\n.ant-input-compact-item:focus,\n.ant-input-compact-item:active {\n z-index: 2;\n}\n.ant-input-compact-item[disabled] {\n z-index: 0;\n}\n.ant-input-compact-item:not(.ant-input-compact-first-item):not(.ant-input-compact-last-item).ant-input {\n border-radius: 0;\n}\n.ant-input-compact-item.ant-input.ant-input-compact-first-item:not(.ant-input-compact-item-rtl) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.ant-input-compact-item.ant-input.ant-input-compact-last-item:not(.ant-input-compact-item-rtl) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.ant-input-compact-item.ant-input.ant-input-compact-item-rtl.ant-input-compact-first-item {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.ant-input-compact-item.ant-input.ant-input-compact-item-rtl.ant-input-compact-last-item {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.ant-input-search .ant-input:hover,\n.ant-input-search .ant-input:focus {\n border-color: #8588ed;\n}\n.ant-input-search .ant-input:hover + .ant-input-group-addon .ant-input-search-button:not(.ant-btn-primary),\n.ant-input-search .ant-input:focus + .ant-input-group-addon .ant-input-search-button:not(.ant-btn-primary) {\n border-left-color: #8588ed;\n}\n.ant-input-search .ant-input-affix-wrapper {\n border-radius: 0;\n}\n.ant-input-search .ant-input-lg {\n line-height: 1.5713;\n}\n.ant-input-search > .ant-input-group > .ant-input-group-addon:last-child {\n left: -1px;\n padding: 0;\n border: 0;\n}\n.ant-input-search > .ant-input-group > .ant-input-group-addon:last-child .ant-input-search-button {\n padding-top: 0;\n padding-bottom: 0;\n border-radius: 0 5px 5px 0;\n}\n.ant-input-search > .ant-input-group > .ant-input-group-addon:last-child .ant-input-search-button:not(.ant-btn-primary) {\n color: rgba(0, 0, 0, 0.45);\n}\n.ant-input-search > .ant-input-group > .ant-input-group-addon:last-child .ant-input-search-button:not(.ant-btn-primary).ant-btn-loading::before {\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n}\n.ant-input-search-button {\n height: 32px;\n}\n.ant-input-search-button:hover,\n.ant-input-search-button:focus {\n z-index: 1;\n}\n.ant-input-search-large .ant-input-search-button {\n height: 40px;\n}\n.ant-input-search-small .ant-input-search-button {\n height: 24px;\n}\n.ant-input-search.ant-input-compact-item:not(.ant-input-compact-item-rtl):not(.ant-input-compact-last-item) .ant-input-group-addon .ant-input-search-button {\n margin-right: -1px;\n border-radius: 0;\n}\n.ant-input-search.ant-input-compact-item:not(.ant-input-compact-first-item) .ant-input,\n.ant-input-search.ant-input-compact-item:not(.ant-input-compact-first-item) .ant-input-affix-wrapper {\n border-radius: 0;\n}\n.ant-input-search.ant-input-compact-item > .ant-input-group-addon .ant-input-search-button:hover,\n.ant-input-search.ant-input-compact-item > .ant-input:hover,\n.ant-input-search.ant-input-compact-item .ant-input-affix-wrapper:hover,\n.ant-input-search.ant-input-compact-item > .ant-input-group-addon .ant-input-search-button:focus,\n.ant-input-search.ant-input-compact-item > .ant-input:focus,\n.ant-input-search.ant-input-compact-item .ant-input-affix-wrapper:focus,\n.ant-input-search.ant-input-compact-item > .ant-input-group-addon .ant-input-search-button:active,\n.ant-input-search.ant-input-compact-item > .ant-input:active,\n.ant-input-search.ant-input-compact-item .ant-input-affix-wrapper:active {\n z-index: 2;\n}\n.ant-input-search.ant-input-compact-item > .ant-input-affix-wrapper-focused {\n z-index: 2;\n}\n.ant-input-search.ant-input-compact-item-rtl:not(.ant-input-compact-last-item) .ant-input-group-addon:last-child .ant-input-search-button {\n margin-left: -1px;\n border-radius: 0;\n}\n.ant-input-group-wrapper-rtl {\n direction: rtl;\n}\n.ant-input-group-rtl {\n direction: rtl;\n}\n.ant-input-affix-wrapper.ant-input-affix-wrapper-rtl > input.ant-input {\n border: none;\n outline: none;\n}\n.ant-input-affix-wrapper-rtl .ant-input-prefix {\n margin: 0 0 0 4px;\n}\n.ant-input-affix-wrapper-rtl .ant-input-suffix {\n margin: 0 4px 0 0;\n}\n.ant-input-textarea-rtl {\n direction: rtl;\n}\n.ant-input-textarea-rtl.ant-input-textarea-show-count::after {\n text-align: left;\n}\n.ant-input-affix-wrapper-rtl .ant-input-clear-icon-has-suffix {\n margin-right: 0;\n margin-left: 4px;\n}\n.ant-input-affix-wrapper-rtl .ant-input-clear-icon {\n right: auto;\n left: 8px;\n}\n.ant-input-search-rtl {\n direction: rtl;\n}\n.ant-input-search-rtl .ant-input:hover + .ant-input-group-addon .ant-input-search-button:not(.ant-btn-primary),\n.ant-input-search-rtl .ant-input:focus + .ant-input-group-addon .ant-input-search-button:not(.ant-btn-primary) {\n border-left-color: #d9d9d9;\n}\n.ant-input-search-rtl .ant-input:hover + .ant-input-group-addon .ant-input-search-button:not(.ant-btn-primary):hover,\n.ant-input-search-rtl .ant-input:focus + .ant-input-group-addon .ant-input-search-button:not(.ant-btn-primary):hover {\n border-left-color: #8588ed;\n}\n.ant-input-search-rtl > .ant-input-group > .ant-input-affix-wrapper:hover,\n.ant-input-search-rtl > .ant-input-group > .ant-input-affix-wrapper-focused {\n border-right-color: #8588ed;\n}\n.ant-input-search-rtl > .ant-input-group > .ant-input-group-addon:last-child {\n right: -1px;\n left: auto;\n}\n.ant-input-search-rtl > .ant-input-group > .ant-input-group-addon:last-child .ant-input-search-button {\n border-radius: 5px 0 0 5px;\n}\n@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {\n .ant-input {\n height: 32px;\n }\n .ant-input-lg {\n height: 40px;\n }\n .ant-input-sm {\n height: 24px;\n }\n .ant-input-affix-wrapper > input.ant-input {\n height: auto;\n }\n}\n.ant-input-number-affix-wrapper {\n display: inline-block;\n width: 100%;\n min-width: 0;\n padding: 4px 11px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n line-height: 1.5715;\n background-color: #fff;\n background-image: none;\n border: 1px solid #d9d9d9;\n border-radius: 5px;\n transition: all 0.3s;\n position: relative;\n display: inline-flex;\n width: 90px;\n padding: 0;\n padding-inline-start: 11px;\n}\n.ant-input-number-affix-wrapper::placeholder {\n color: #bfbfbf;\n user-select: none;\n}\n.ant-input-number-affix-wrapper:placeholder-shown {\n text-overflow: ellipsis;\n}\n.ant-input-number-affix-wrapper:hover {\n border-color: #8588ed;\n border-right-width: 1px;\n}\n.ant-input-rtl .ant-input-number-affix-wrapper:hover {\n border-right-width: 0;\n border-left-width: 1px !important;\n}\n.ant-input-number-affix-wrapper:focus,\n.ant-input-number-affix-wrapper-focused {\n border-color: #8588ed;\n box-shadow: 0 0 0 2px rgba(91, 92, 225, 0.2);\n border-right-width: 1px;\n outline: 0;\n}\n.ant-input-rtl .ant-input-number-affix-wrapper:focus,\n.ant-input-rtl .ant-input-number-affix-wrapper-focused {\n border-right-width: 0;\n border-left-width: 1px !important;\n}\n.ant-input-number-affix-wrapper-disabled {\n color: rgba(0, 0, 0, 0.25);\n background-color: #f5f5f5;\n border-color: #d9d9d9;\n box-shadow: none;\n cursor: not-allowed;\n opacity: 1;\n}\n.ant-input-number-affix-wrapper-disabled:hover {\n border-color: #d9d9d9;\n border-right-width: 1px;\n}\n.ant-input-number-affix-wrapper[disabled] {\n color: rgba(0, 0, 0, 0.25);\n background-color: #f5f5f5;\n border-color: #d9d9d9;\n box-shadow: none;\n cursor: not-allowed;\n opacity: 1;\n}\n.ant-input-number-affix-wrapper[disabled]:hover {\n border-color: #d9d9d9;\n border-right-width: 1px;\n}\n.ant-input-number-affix-wrapper-borderless,\n.ant-input-number-affix-wrapper-borderless:hover,\n.ant-input-number-affix-wrapper-borderless:focus,\n.ant-input-number-affix-wrapper-borderless-focused,\n.ant-input-number-affix-wrapper-borderless-disabled,\n.ant-input-number-affix-wrapper-borderless[disabled] {\n background-color: transparent;\n border: none;\n box-shadow: none;\n}\ntextarea.ant-input-number-affix-wrapper {\n max-width: 100%;\n height: auto;\n min-height: 32px;\n line-height: 1.5715;\n vertical-align: bottom;\n transition: all 0.3s, height 0s;\n}\n.ant-input-number-affix-wrapper-lg {\n padding: 6.5px 11px;\n font-size: 16px;\n}\n.ant-input-number-affix-wrapper-sm {\n padding: 0px 7px;\n}\n.ant-input-number-affix-wrapper-rtl {\n direction: rtl;\n}\n.ant-input-number-affix-wrapper:not(.ant-input-number-affix-wrapper-disabled):hover {\n border-color: #8588ed;\n border-right-width: 1px;\n z-index: 1;\n}\n.ant-input-rtl .ant-input-number-affix-wrapper:not(.ant-input-number-affix-wrapper-disabled):hover {\n border-right-width: 0;\n border-left-width: 1px !important;\n}\n.ant-input-number-affix-wrapper-focused,\n.ant-input-number-affix-wrapper:focus {\n z-index: 1;\n}\n.ant-input-number-affix-wrapper-disabled .ant-input-number[disabled] {\n background: transparent;\n}\n.ant-input-number-affix-wrapper > div.ant-input-number {\n width: 100%;\n border: none;\n outline: none;\n}\n.ant-input-number-affix-wrapper > div.ant-input-number.ant-input-number-focused {\n box-shadow: none !important;\n}\n.ant-input-number-affix-wrapper input.ant-input-number-input {\n padding: 0;\n}\n.ant-input-number-affix-wrapper::before {\n width: 0;\n visibility: hidden;\n content: '\\a0';\n}\n.ant-input-number-affix-wrapper .ant-input-number-handler-wrap {\n z-index: 2;\n}\n.ant-input-number-prefix,\n.ant-input-number-suffix {\n display: flex;\n flex: none;\n align-items: center;\n pointer-events: none;\n}\n.ant-input-number-prefix {\n margin-inline-end: 4px;\n}\n.ant-input-number-suffix {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 1;\n height: 100%;\n margin-right: 11px;\n margin-left: 4px;\n}\n.ant-input-number-group-wrapper .ant-input-number-affix-wrapper {\n width: 100%;\n}\n.ant-input-number-status-error:not(.ant-input-number-disabled):not(.ant-input-number-borderless).ant-input-number,\n.ant-input-number-status-error:not(.ant-input-number-disabled):not(.ant-input-number-borderless).ant-input-number:hover {\n background: #fff;\n border-color: #ff4d4f;\n}\n.ant-input-number-status-error:not(.ant-input-number-disabled):not(.ant-input-number-borderless).ant-input-number:focus,\n.ant-input-number-status-error:not(.ant-input-number-disabled):not(.ant-input-number-borderless).ant-input-number-focused {\n border-color: #ff7875;\n box-shadow: 0 0 0 2px rgba(255, 77, 79, 0.2);\n border-right-width: 1px;\n outline: 0;\n}\n.ant-input-number-status-error .ant-input-number-prefix {\n color: #ff4d4f;\n}\n.ant-input-number-status-warning:not(.ant-input-number-disabled):not(.ant-input-number-borderless).ant-input-number,\n.ant-input-number-status-warning:not(.ant-input-number-disabled):not(.ant-input-number-borderless).ant-input-number:hover {\n background: #fff;\n border-color: #faad14;\n}\n.ant-input-number-status-warning:not(.ant-input-number-disabled):not(.ant-input-number-borderless).ant-input-number:focus,\n.ant-input-number-status-warning:not(.ant-input-number-disabled):not(.ant-input-number-borderless).ant-input-number-focused {\n border-color: #ffc53d;\n box-shadow: 0 0 0 2px rgba(250, 173, 20, 0.2);\n border-right-width: 1px;\n outline: 0;\n}\n.ant-input-number-status-warning .ant-input-number-prefix {\n color: #faad14;\n}\n.ant-input-number-affix-wrapper-status-error:not(.ant-input-number-affix-wrapper-disabled):not(.ant-input-number-affix-wrapper-borderless).ant-input-number-affix-wrapper,\n.ant-input-number-affix-wrapper-status-error:not(.ant-input-number-affix-wrapper-disabled):not(.ant-input-number-affix-wrapper-borderless).ant-input-number-affix-wrapper:hover {\n background: #fff;\n border-color: #ff4d4f;\n}\n.ant-input-number-affix-wrapper-status-error:not(.ant-input-number-affix-wrapper-disabled):not(.ant-input-number-affix-wrapper-borderless).ant-input-number-affix-wrapper:focus,\n.ant-input-number-affix-wrapper-status-error:not(.ant-input-number-affix-wrapper-disabled):not(.ant-input-number-affix-wrapper-borderless).ant-input-number-affix-wrapper-focused {\n border-color: #ff7875;\n box-shadow: 0 0 0 2px rgba(255, 77, 79, 0.2);\n border-right-width: 1px;\n outline: 0;\n}\n.ant-input-number-affix-wrapper-status-error .ant-input-number-prefix {\n color: #ff4d4f;\n}\n.ant-input-number-affix-wrapper-status-warning:not(.ant-input-number-affix-wrapper-disabled):not(.ant-input-number-affix-wrapper-borderless).ant-input-number-affix-wrapper,\n.ant-input-number-affix-wrapper-status-warning:not(.ant-input-number-affix-wrapper-disabled):not(.ant-input-number-affix-wrapper-borderless).ant-input-number-affix-wrapper:hover {\n background: #fff;\n border-color: #faad14;\n}\n.ant-input-number-affix-wrapper-status-warning:not(.ant-input-number-affix-wrapper-disabled):not(.ant-input-number-affix-wrapper-borderless).ant-input-number-affix-wrapper:focus,\n.ant-input-number-affix-wrapper-status-warning:not(.ant-input-number-affix-wrapper-disabled):not(.ant-input-number-affix-wrapper-borderless).ant-input-number-affix-wrapper-focused {\n border-color: #ffc53d;\n box-shadow: 0 0 0 2px rgba(250, 173, 20, 0.2);\n border-right-width: 1px;\n outline: 0;\n}\n.ant-input-number-affix-wrapper-status-warning .ant-input-number-prefix {\n color: #faad14;\n}\n.ant-input-number-group-wrapper-status-error .ant-input-number-group-addon {\n color: #ff4d4f;\n border-color: #ff4d4f;\n}\n.ant-input-number-group-wrapper-status-warning .ant-input-number-group-addon {\n color: #faad14;\n border-color: #faad14;\n}\n.ant-input-number {\n box-sizing: border-box;\n font-variant: tabular-nums;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n width: 100%;\n min-width: 0;\n padding: 4px 11px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n line-height: 1.5715;\n background-color: #fff;\n background-image: none;\n transition: all 0.3s;\n display: inline-block;\n width: 90px;\n margin: 0;\n padding: 0;\n border: 1px solid #d9d9d9;\n border-radius: 5px;\n}\n.ant-input-number::placeholder {\n color: #bfbfbf;\n user-select: none;\n}\n.ant-input-number:placeholder-shown {\n text-overflow: ellipsis;\n}\n.ant-input-number:hover {\n border-color: #8588ed;\n border-right-width: 1px;\n}\n.ant-input-rtl .ant-input-number:hover {\n border-right-width: 0;\n border-left-width: 1px !important;\n}\n.ant-input-number:focus,\n.ant-input-number-focused {\n border-color: #8588ed;\n box-shadow: 0 0 0 2px rgba(91, 92, 225, 0.2);\n border-right-width: 1px;\n outline: 0;\n}\n.ant-input-rtl .ant-input-number:focus,\n.ant-input-rtl .ant-input-number-focused {\n border-right-width: 0;\n border-left-width: 1px !important;\n}\n.ant-input-number-disabled {\n color: rgba(0, 0, 0, 0.25);\n background-color: #f5f5f5;\n border-color: #d9d9d9;\n box-shadow: none;\n cursor: not-allowed;\n opacity: 1;\n}\n.ant-input-number-disabled:hover {\n border-color: #d9d9d9;\n border-right-width: 1px;\n}\n.ant-input-number[disabled] {\n color: rgba(0, 0, 0, 0.25);\n background-color: #f5f5f5;\n border-color: #d9d9d9;\n box-shadow: none;\n cursor: not-allowed;\n opacity: 1;\n}\n.ant-input-number[disabled]:hover {\n border-color: #d9d9d9;\n border-right-width: 1px;\n}\n.ant-input-number-borderless,\n.ant-input-number-borderless:hover,\n.ant-input-number-borderless:focus,\n.ant-input-number-borderless-focused,\n.ant-input-number-borderless-disabled,\n.ant-input-number-borderless[disabled] {\n background-color: transparent;\n border: none;\n box-shadow: none;\n}\ntextarea.ant-input-number {\n max-width: 100%;\n height: auto;\n min-height: 32px;\n line-height: 1.5715;\n vertical-align: bottom;\n transition: all 0.3s, height 0s;\n}\n.ant-input-number-lg {\n padding: 6.5px 11px;\n font-size: 16px;\n}\n.ant-input-number-sm {\n padding: 0px 7px;\n}\n.ant-input-number-rtl {\n direction: rtl;\n}\n.ant-input-number-group {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n display: table;\n width: 100%;\n border-collapse: separate;\n border-spacing: 0;\n}\n.ant-input-number-group[class*='col-'] {\n float: none;\n padding-right: 0;\n padding-left: 0;\n}\n.ant-input-number-group > [class*='col-'] {\n padding-right: 8px;\n}\n.ant-input-number-group > [class*='col-']:last-child {\n padding-right: 0;\n}\n.ant-input-number-group-addon,\n.ant-input-number-group-wrap,\n.ant-input-number-group > .ant-input-number {\n display: table-cell;\n}\n.ant-input-number-group-addon:not(:first-child):not(:last-child),\n.ant-input-number-group-wrap:not(:first-child):not(:last-child),\n.ant-input-number-group > .ant-input-number:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.ant-input-number-group-addon,\n.ant-input-number-group-wrap {\n width: 1px;\n white-space: nowrap;\n vertical-align: middle;\n}\n.ant-input-number-group-wrap > * {\n display: block !important;\n}\n.ant-input-number-group .ant-input-number {\n float: left;\n width: 100%;\n margin-bottom: 0;\n text-align: inherit;\n}\n.ant-input-number-group .ant-input-number:focus {\n z-index: 1;\n border-right-width: 1px;\n}\n.ant-input-number-group .ant-input-number:hover {\n z-index: 1;\n border-right-width: 1px;\n}\n.ant-input-search-with-button .ant-input-number-group .ant-input-number:hover {\n z-index: 0;\n}\n.ant-input-number-group-addon {\n position: relative;\n padding: 0 11px;\n color: rgba(0, 0, 0, 0.85);\n font-weight: normal;\n font-size: 14px;\n text-align: center;\n background-color: #fafafa;\n border: 1px solid #d9d9d9;\n border-radius: 5px;\n transition: all 0.3s;\n}\n.ant-input-number-group-addon .ant-select {\n margin: -5px -11px;\n}\n.ant-input-number-group-addon .ant-select.ant-select-single:not(.ant-select-customize-input) .ant-select-selector {\n background-color: inherit;\n border: 1px solid transparent;\n box-shadow: none;\n}\n.ant-input-number-group-addon .ant-select-open .ant-select-selector,\n.ant-input-number-group-addon .ant-select-focused .ant-select-selector {\n color: #5b5ce1;\n}\n.ant-input-number-group-addon .ant-cascader-picker {\n margin: -9px -12px;\n background-color: transparent;\n}\n.ant-input-number-group-addon .ant-cascader-picker .ant-cascader-input {\n text-align: left;\n border: 0;\n box-shadow: none;\n}\n.ant-input-number-group > .ant-input-number:first-child,\n.ant-input-number-group-addon:first-child {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.ant-input-number-group > .ant-input-number:first-child .ant-select .ant-select-selector,\n.ant-input-number-group-addon:first-child .ant-select .ant-select-selector {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.ant-input-number-group > .ant-input-number-affix-wrapper:not(:first-child) .ant-input-number {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.ant-input-number-group > .ant-input-number-affix-wrapper:not(:last-child) .ant-input-number {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.ant-input-number-group-addon:first-child {\n border-right: 0;\n}\n.ant-input-number-group-addon:last-child {\n border-left: 0;\n}\n.ant-input-number-group > .ant-input-number:last-child,\n.ant-input-number-group-addon:last-child {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.ant-input-number-group > .ant-input-number:last-child .ant-select .ant-select-selector,\n.ant-input-number-group-addon:last-child .ant-select .ant-select-selector {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.ant-input-number-group-lg .ant-input-number,\n.ant-input-number-group-lg > .ant-input-number-group-addon {\n padding: 6.5px 11px;\n font-size: 16px;\n}\n.ant-input-number-group-sm .ant-input-number,\n.ant-input-number-group-sm > .ant-input-number-group-addon {\n padding: 0px 7px;\n}\n.ant-input-number-group-lg .ant-select-single .ant-select-selector {\n height: 40px;\n}\n.ant-input-number-group-sm .ant-select-single .ant-select-selector {\n height: 24px;\n}\n.ant-input-number-group .ant-input-number-affix-wrapper:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.ant-input-search .ant-input-number-group .ant-input-number-affix-wrapper:not(:last-child) {\n border-top-left-radius: 5px;\n border-bottom-left-radius: 5px;\n}\n.ant-input-number-group .ant-input-number-affix-wrapper:not(:first-child),\n.ant-input-search .ant-input-number-group .ant-input-number-affix-wrapper:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.ant-input-number-group.ant-input-number-group-compact {\n display: block;\n}\n.ant-input-number-group.ant-input-number-group-compact::before {\n display: table;\n content: '';\n}\n.ant-input-number-group.ant-input-number-group-compact::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-input-number-group.ant-input-number-group-compact::before {\n display: table;\n content: '';\n}\n.ant-input-number-group.ant-input-number-group-compact::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-input-number-group.ant-input-number-group-compact-addon:not(:first-child):not(:last-child),\n.ant-input-number-group.ant-input-number-group-compact-wrap:not(:first-child):not(:last-child),\n.ant-input-number-group.ant-input-number-group-compact > .ant-input-number:not(:first-child):not(:last-child) {\n border-right-width: 1px;\n}\n.ant-input-number-group.ant-input-number-group-compact-addon:not(:first-child):not(:last-child):hover,\n.ant-input-number-group.ant-input-number-group-compact-wrap:not(:first-child):not(:last-child):hover,\n.ant-input-number-group.ant-input-number-group-compact > .ant-input-number:not(:first-child):not(:last-child):hover {\n z-index: 1;\n}\n.ant-input-number-group.ant-input-number-group-compact-addon:not(:first-child):not(:last-child):focus,\n.ant-input-number-group.ant-input-number-group-compact-wrap:not(:first-child):not(:last-child):focus,\n.ant-input-number-group.ant-input-number-group-compact > .ant-input-number:not(:first-child):not(:last-child):focus {\n z-index: 1;\n}\n.ant-input-number-group.ant-input-number-group-compact > * {\n display: inline-block;\n float: none;\n vertical-align: top;\n border-radius: 0;\n}\n.ant-input-number-group.ant-input-number-group-compact > .ant-input-number-affix-wrapper {\n display: inline-flex;\n}\n.ant-input-number-group.ant-input-number-group-compact > .ant-picker-range {\n display: inline-flex;\n}\n.ant-input-number-group.ant-input-number-group-compact > *:not(:last-child) {\n margin-right: -1px;\n border-right-width: 1px;\n}\n.ant-input-number-group.ant-input-number-group-compact .ant-input-number {\n float: none;\n}\n.ant-input-number-group.ant-input-number-group-compact > .ant-select > .ant-select-selector,\n.ant-input-number-group.ant-input-number-group-compact > .ant-select-auto-complete .ant-input,\n.ant-input-number-group.ant-input-number-group-compact > .ant-cascader-picker .ant-input,\n.ant-input-number-group.ant-input-number-group-compact > .ant-input-group-wrapper .ant-input {\n border-right-width: 1px;\n border-radius: 0;\n}\n.ant-input-number-group.ant-input-number-group-compact > .ant-select > .ant-select-selector:hover,\n.ant-input-number-group.ant-input-number-group-compact > .ant-select-auto-complete .ant-input:hover,\n.ant-input-number-group.ant-input-number-group-compact > .ant-cascader-picker .ant-input:hover,\n.ant-input-number-group.ant-input-number-group-compact > .ant-input-group-wrapper .ant-input:hover {\n z-index: 1;\n}\n.ant-input-number-group.ant-input-number-group-compact > .ant-select > .ant-select-selector:focus,\n.ant-input-number-group.ant-input-number-group-compact > .ant-select-auto-complete .ant-input:focus,\n.ant-input-number-group.ant-input-number-group-compact > .ant-cascader-picker .ant-input:focus,\n.ant-input-number-group.ant-input-number-group-compact > .ant-input-group-wrapper .ant-input:focus {\n z-index: 1;\n}\n.ant-input-number-group.ant-input-number-group-compact > .ant-select-focused {\n z-index: 1;\n}\n.ant-input-number-group.ant-input-number-group-compact > .ant-select > .ant-select-arrow {\n z-index: 1;\n}\n.ant-input-number-group.ant-input-number-group-compact > *:first-child,\n.ant-input-number-group.ant-input-number-group-compact > .ant-select:first-child > .ant-select-selector,\n.ant-input-number-group.ant-input-number-group-compact > .ant-select-auto-complete:first-child .ant-input,\n.ant-input-number-group.ant-input-number-group-compact > .ant-cascader-picker:first-child .ant-input {\n border-top-left-radius: 5px;\n border-bottom-left-radius: 5px;\n}\n.ant-input-number-group.ant-input-number-group-compact > *:last-child,\n.ant-input-number-group.ant-input-number-group-compact > .ant-select:last-child > .ant-select-selector,\n.ant-input-number-group.ant-input-number-group-compact > .ant-cascader-picker:last-child .ant-input,\n.ant-input-number-group.ant-input-number-group-compact > .ant-cascader-picker-focused:last-child .ant-input {\n border-right-width: 1px;\n border-top-right-radius: 5px;\n border-bottom-right-radius: 5px;\n}\n.ant-input-number-group.ant-input-number-group-compact > .ant-select-auto-complete .ant-input {\n vertical-align: top;\n}\n.ant-input-number-group.ant-input-number-group-compact .ant-input-group-wrapper + .ant-input-group-wrapper {\n margin-left: -1px;\n}\n.ant-input-number-group.ant-input-number-group-compact .ant-input-group-wrapper + .ant-input-group-wrapper .ant-input-affix-wrapper {\n border-radius: 0;\n}\n.ant-input-number-group.ant-input-number-group-compact .ant-input-group-wrapper:not(:last-child).ant-input-search > .ant-input-group > .ant-input-group-addon > .ant-input-search-button {\n border-radius: 0;\n}\n.ant-input-number-group.ant-input-number-group-compact .ant-input-group-wrapper:not(:last-child).ant-input-search > .ant-input-group > .ant-input {\n border-radius: 5px 0 0 5px;\n}\n.ant-input-number-group > .ant-input-number-rtl:first-child,\n.ant-input-number-group-rtl .ant-input-number-group-addon:first-child {\n border-radius: 0 5px 5px 0;\n}\n.ant-input-number-group-rtl .ant-input-number-group-addon:first-child {\n border-right: 1px solid #d9d9d9;\n border-left: 0;\n}\n.ant-input-number-group-rtl .ant-input-number-group-addon:last-child {\n border-right: 0;\n border-left: 1px solid #d9d9d9;\n border-radius: 5px 0 0 5px;\n}\n.ant-input-number-group-rtl.ant-input-number-group > .ant-input-number:last-child,\n.ant-input-number-group-rtl.ant-input-number-group-addon:last-child {\n border-radius: 5px 0 0 5px;\n}\n.ant-input-number-group-rtl.ant-input-number-group .ant-input-number-affix-wrapper:not(:first-child) {\n border-radius: 5px 0 0 5px;\n}\n.ant-input-number-group-rtl.ant-input-number-group .ant-input-number-affix-wrapper:not(:last-child) {\n border-radius: 0 5px 5px 0;\n}\n.ant-input-number-group-rtl.ant-input-number-group.ant-input-number-group-compact > *:not(:last-child) {\n margin-right: 0;\n margin-left: -1px;\n border-left-width: 1px;\n}\n.ant-input-number-group-rtl.ant-input-number-group.ant-input-number-group-compact > *:first-child,\n.ant-input-number-group-rtl.ant-input-number-group.ant-input-number-group-compact > .ant-select:first-child > .ant-select-selector,\n.ant-input-number-group-rtl.ant-input-number-group.ant-input-number-group-compact > .ant-select-auto-complete:first-child .ant-input,\n.ant-input-number-group-rtl.ant-input-number-group.ant-input-number-group-compact > .ant-cascader-picker:first-child .ant-input {\n border-radius: 0 5px 5px 0;\n}\n.ant-input-number-group-rtl.ant-input-number-group.ant-input-number-group-compact > *:last-child,\n.ant-input-number-group-rtl.ant-input-number-group.ant-input-number-group-compact > .ant-select:last-child > .ant-select-selector,\n.ant-input-number-group-rtl.ant-input-number-group.ant-input-number-group-compact > .ant-select-auto-complete:last-child .ant-input,\n.ant-input-number-group-rtl.ant-input-number-group.ant-input-number-group-compact > .ant-cascader-picker:last-child .ant-input,\n.ant-input-number-group-rtl.ant-input-number-group.ant-input-number-group-compact > .ant-cascader-picker-focused:last-child .ant-input {\n border-left-width: 1px;\n border-radius: 5px 0 0 5px;\n}\n.ant-input-number-group.ant-input-number-group-compact .ant-input-group-wrapper-rtl + .ant-input-group-wrapper-rtl {\n margin-right: -1px;\n margin-left: 0;\n}\n.ant-input-number-group.ant-input-number-group-compact .ant-input-group-wrapper-rtl:not(:last-child).ant-input-search > .ant-input-group > .ant-input {\n border-radius: 0 5px 5px 0;\n}\n.ant-input-number-group > .ant-input-number-rtl:first-child {\n border-radius: 0 5px 5px 0;\n}\n.ant-input-number-group > .ant-input-number-rtl:last-child {\n border-radius: 5px 0 0 5px;\n}\n.ant-input-number-group-rtl .ant-input-number-group-addon:first-child {\n border-right: 1px solid #d9d9d9;\n border-left: 0;\n border-radius: 0 5px 5px 0;\n}\n.ant-input-number-group-rtl .ant-input-number-group-addon:last-child {\n border-right: 0;\n border-left: 1px solid #d9d9d9;\n border-radius: 5px 0 0 5px;\n}\n.ant-input-number-group-wrapper {\n display: inline-block;\n text-align: start;\n vertical-align: top;\n}\n.ant-input-number-handler {\n position: relative;\n display: block;\n width: 100%;\n height: 50%;\n overflow: hidden;\n color: rgba(0, 0, 0, 0.45);\n font-weight: bold;\n line-height: 0;\n text-align: center;\n border-left: 1px solid #d9d9d9;\n transition: all 0.1s linear;\n}\n.ant-input-number-handler:active {\n background: #f4f4f4;\n}\n.ant-input-number-handler:hover .ant-input-number-handler-up-inner,\n.ant-input-number-handler:hover .ant-input-number-handler-down-inner {\n color: #8588ed;\n}\n.ant-input-number-handler-up-inner,\n.ant-input-number-handler-down-inner {\n display: inline-block;\n color: inherit;\n font-style: normal;\n line-height: 0;\n text-align: center;\n text-transform: none;\n vertical-align: -0.125em;\n text-rendering: optimizelegibility;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n position: absolute;\n right: 4px;\n width: 12px;\n height: 12px;\n color: rgba(0, 0, 0, 0.45);\n line-height: 12px;\n transition: all 0.1s linear;\n user-select: none;\n}\n.ant-input-number-handler-up-inner > *,\n.ant-input-number-handler-down-inner > * {\n line-height: 1;\n}\n.ant-input-number-handler-up-inner svg,\n.ant-input-number-handler-down-inner svg {\n display: inline-block;\n}\n.ant-input-number-handler-up-inner::before,\n.ant-input-number-handler-down-inner::before {\n display: none;\n}\n.ant-input-number-handler-up-inner .ant-input-number-handler-up-inner-icon,\n.ant-input-number-handler-up-inner .ant-input-number-handler-down-inner-icon,\n.ant-input-number-handler-down-inner .ant-input-number-handler-up-inner-icon,\n.ant-input-number-handler-down-inner .ant-input-number-handler-down-inner-icon {\n display: block;\n}\n.ant-input-number:hover {\n border-color: #8588ed;\n border-right-width: 1px;\n}\n.ant-input-number:hover + .ant-form-item-children-icon {\n opacity: 0;\n transition: opacity 0.24s linear 0.24s;\n}\n.ant-input-number-focused {\n border-color: #8588ed;\n box-shadow: 0 0 0 2px rgba(91, 92, 225, 0.2);\n border-right-width: 1px;\n outline: 0;\n}\n.ant-input-rtl .ant-input-number-focused {\n border-right-width: 0;\n border-left-width: 1px !important;\n}\n.ant-input-number-disabled {\n color: rgba(0, 0, 0, 0.25);\n background-color: #f5f5f5;\n border-color: #d9d9d9;\n box-shadow: none;\n cursor: not-allowed;\n opacity: 1;\n}\n.ant-input-number-disabled:hover {\n border-color: #d9d9d9;\n border-right-width: 1px;\n}\n.ant-input-number-disabled .ant-input-number-input {\n cursor: not-allowed;\n}\n.ant-input-number-disabled .ant-input-number-handler-wrap {\n display: none;\n}\n.ant-input-number-readonly .ant-input-number-handler-wrap {\n display: none;\n}\n.ant-input-number-input {\n width: 100%;\n height: 30px;\n padding: 0 11px;\n text-align: left;\n background-color: transparent;\n border: 0;\n border-radius: 5px;\n outline: 0;\n transition: all 0.3s linear;\n appearance: textfield !important;\n}\n.ant-input-number-input::placeholder {\n color: #bfbfbf;\n user-select: none;\n}\n.ant-input-number-input:placeholder-shown {\n text-overflow: ellipsis;\n}\n.ant-input-number-input[type='number']::-webkit-inner-spin-button,\n.ant-input-number-input[type='number']::-webkit-outer-spin-button {\n margin: 0;\n /* stylelint-disable-next-line property-no-vendor-prefix */\n -webkit-appearance: none;\n appearance: none;\n}\n.ant-input-number-lg {\n padding: 0;\n font-size: 16px;\n}\n.ant-input-number-lg input {\n height: 38px;\n}\n.ant-input-number-sm {\n padding: 0;\n}\n.ant-input-number-sm input {\n height: 22px;\n padding: 0 7px;\n}\n.ant-input-number-handler-wrap {\n position: absolute;\n top: 0;\n right: 0;\n width: 22px;\n height: 100%;\n background: #fff;\n border-radius: 0 5px 5px 0;\n opacity: 0;\n transition: opacity 0.24s linear 0.1s;\n}\n.ant-input-number-handler-wrap .ant-input-number-handler .ant-input-number-handler-up-inner,\n.ant-input-number-handler-wrap .ant-input-number-handler .ant-input-number-handler-down-inner {\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: auto;\n margin-right: 0;\n font-size: 7px;\n}\n.ant-input-number-borderless .ant-input-number-handler-wrap {\n border-left-width: 0;\n}\n.ant-input-number-handler-wrap:hover .ant-input-number-handler {\n height: 40%;\n}\n.ant-input-number:hover .ant-input-number-handler-wrap,\n.ant-input-number-focused .ant-input-number-handler-wrap {\n opacity: 1;\n}\n.ant-input-number-handler-up {\n border-top-right-radius: 5px;\n cursor: pointer;\n}\n.ant-input-number-handler-up-inner {\n top: 50%;\n margin-top: -5px;\n text-align: center;\n}\n.ant-input-number-handler-up:hover {\n height: 60% !important;\n}\n.ant-input-number-handler-down {\n top: 0;\n border-top: 1px solid #d9d9d9;\n border-bottom-right-radius: 5px;\n cursor: pointer;\n}\n.ant-input-number-handler-down-inner {\n top: 50%;\n text-align: center;\n transform: translateY(-50%);\n}\n.ant-input-number-handler-down:hover {\n height: 60% !important;\n}\n.ant-input-number-borderless .ant-input-number-handler-down {\n border-top-width: 0;\n}\n.ant-input-number:hover:not(.ant-input-number-borderless) .ant-input-number-handler-down,\n.ant-input-number-focused:not(.ant-input-number-borderless) .ant-input-number-handler-down {\n border-top: 1px solid #d9d9d9;\n}\n.ant-input-number-handler-up-disabled,\n.ant-input-number-handler-down-disabled {\n cursor: not-allowed;\n}\n.ant-input-number-handler-up-disabled:hover .ant-input-number-handler-up-inner,\n.ant-input-number-handler-down-disabled:hover .ant-input-number-handler-down-inner {\n color: rgba(0, 0, 0, 0.25);\n}\n.ant-input-number-borderless {\n box-shadow: none;\n}\n.ant-input-number-out-of-range input {\n color: #ff4d4f;\n}\n.ant-input-number-compact-item:not(.ant-input-number-compact-last-item):not(.ant-input-number-compact-item-rtl) {\n margin-right: -1px;\n}\n.ant-input-number-compact-item:not(.ant-input-number-compact-last-item).ant-input-number-compact-item-rtl {\n margin-left: -1px;\n}\n.ant-input-number-compact-item:hover,\n.ant-input-number-compact-item:focus,\n.ant-input-number-compact-item:active {\n z-index: 2;\n}\n.ant-input-number-compact-item.ant-input-number-focused {\n z-index: 2;\n}\n.ant-input-number-compact-item[disabled] {\n z-index: 0;\n}\n.ant-input-number-compact-item:not(.ant-input-number-compact-first-item):not(.ant-input-number-compact-last-item).ant-input-number {\n border-radius: 0;\n}\n.ant-input-number-compact-item.ant-input-number.ant-input-number-compact-first-item:not(.ant-input-number-compact-item-rtl) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.ant-input-number-compact-item.ant-input-number.ant-input-number-compact-last-item:not(.ant-input-number-compact-item-rtl) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.ant-input-number-compact-item.ant-input-number.ant-input-number-compact-item-rtl.ant-input-number-compact-first-item {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.ant-input-number-compact-item.ant-input-number.ant-input-number-compact-item-rtl.ant-input-number-compact-last-item {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.ant-input-number-rtl {\n direction: rtl;\n}\n.ant-input-number-rtl .ant-input-number-handler {\n border-right: 1px solid #d9d9d9;\n border-left: 0;\n}\n.ant-input-number-rtl .ant-input-number-handler-wrap {\n right: auto;\n left: 0;\n}\n.ant-input-number-rtl.ant-input-number-borderless .ant-input-number-handler-wrap {\n border-right-width: 0;\n}\n.ant-input-number-rtl .ant-input-number-handler-up {\n border-top-right-radius: 0;\n}\n.ant-input-number-rtl .ant-input-number-handler-down {\n border-bottom-right-radius: 0;\n}\n.ant-input-number-rtl .ant-input-number-input {\n direction: ltr;\n text-align: right;\n}\n.ant-layout {\n display: flex;\n flex: auto;\n flex-direction: column;\n /* fix firefox can't set height smaller than content on flex item */\n min-height: 0;\n background: #f0f2f5;\n}\n.ant-layout,\n.ant-layout * {\n box-sizing: border-box;\n}\n.ant-layout.ant-layout-has-sider {\n flex-direction: row;\n}\n.ant-layout.ant-layout-has-sider > .ant-layout,\n.ant-layout.ant-layout-has-sider > .ant-layout-content {\n width: 0;\n}\n.ant-layout-header,\n.ant-layout-footer {\n flex: 0 0 auto;\n}\n.ant-layout-header {\n height: 64px;\n padding: 0 50px;\n color: rgba(0, 0, 0, 0.85);\n line-height: 64px;\n background: #001529;\n}\n.ant-layout-footer {\n padding: 24px 50px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n background: #f0f2f5;\n}\n.ant-layout-content {\n flex: auto;\n /* fix firefox can't set height smaller than content on flex item */\n min-height: 0;\n}\n.ant-layout-sider {\n position: relative;\n /* fix firefox can't set width smaller than content on flex item */\n min-width: 0;\n background: #001529;\n transition: all 0.2s;\n}\n.ant-layout-sider-children {\n height: 100%;\n margin-top: -0.1px;\n padding-top: 0.1px;\n}\n.ant-layout-sider-children .ant-menu.ant-menu-inline-collapsed {\n width: auto;\n}\n.ant-layout-sider-has-trigger {\n padding-bottom: 48px;\n}\n.ant-layout-sider-right {\n order: 1;\n}\n.ant-layout-sider-trigger {\n position: fixed;\n bottom: 0;\n z-index: 1;\n height: 48px;\n color: #fff;\n line-height: 48px;\n text-align: center;\n background: #002140;\n cursor: pointer;\n transition: all 0.2s;\n}\n.ant-layout-sider-zero-width > * {\n overflow: hidden;\n}\n.ant-layout-sider-zero-width-trigger {\n position: absolute;\n top: 64px;\n right: -36px;\n z-index: 1;\n width: 36px;\n height: 42px;\n color: #fff;\n font-size: 18px;\n line-height: 42px;\n text-align: center;\n background: #001529;\n border-radius: 0 5px 5px 0;\n cursor: pointer;\n transition: background 0.3s ease;\n}\n.ant-layout-sider-zero-width-trigger::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n transition: all 0.3s;\n content: '';\n}\n.ant-layout-sider-zero-width-trigger:hover::after {\n background: rgba(255, 255, 255, 0.1);\n}\n.ant-layout-sider-zero-width-trigger-right {\n left: -36px;\n border-radius: 5px 0 0 5px;\n}\n.ant-layout-sider-light {\n background: #fff;\n}\n.ant-layout-sider-light .ant-layout-sider-trigger {\n color: rgba(0, 0, 0, 0.85);\n background: #fff;\n}\n.ant-layout-sider-light .ant-layout-sider-zero-width-trigger {\n color: rgba(0, 0, 0, 0.85);\n background: #fff;\n}\n.ant-layout-rtl {\n direction: rtl;\n}\n.ant-list {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n}\n.ant-list * {\n outline: none;\n}\n.ant-list-pagination {\n margin-top: 24px;\n text-align: right;\n}\n.ant-list-pagination .ant-pagination-options {\n text-align: left;\n}\n.ant-list-more {\n margin-top: 12px;\n text-align: center;\n}\n.ant-list-more button {\n padding-right: 32px;\n padding-left: 32px;\n}\n.ant-list-spin {\n min-height: 40px;\n text-align: center;\n}\n.ant-list-empty-text {\n padding: 16px;\n color: rgba(0, 0, 0, 0.25);\n font-size: 14px;\n text-align: center;\n}\n.ant-list-items {\n margin: 0;\n padding: 0;\n list-style: none;\n}\n.ant-list-item {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 0;\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-list-item-meta {\n display: flex;\n flex: 1;\n align-items: flex-start;\n max-width: 100%;\n}\n.ant-list-item-meta-avatar {\n margin-right: 16px;\n}\n.ant-list-item-meta-content {\n flex: 1 0;\n width: 0;\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-list-item-meta-title {\n margin-bottom: 4px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n line-height: 1.5715;\n}\n.ant-list-item-meta-title > a {\n color: rgba(0, 0, 0, 0.85);\n transition: all 0.3s;\n}\n.ant-list-item-meta-title > a:hover {\n color: #5b5ce1;\n}\n.ant-list-item-meta-description {\n color: rgba(0, 0, 0, 0.45);\n font-size: 14px;\n line-height: 1.5715;\n}\n.ant-list-item-action {\n flex: 0 0 auto;\n margin-left: 48px;\n padding: 0;\n font-size: 0;\n list-style: none;\n}\n.ant-list-item-action > li {\n position: relative;\n display: inline-block;\n padding: 0 8px;\n color: rgba(0, 0, 0, 0.45);\n font-size: 14px;\n line-height: 1.5715;\n text-align: center;\n}\n.ant-list-item-action > li:first-child {\n padding-left: 0;\n}\n.ant-list-item-action-split {\n position: absolute;\n top: 50%;\n right: 0;\n width: 1px;\n height: 14px;\n margin-top: -7px;\n background-color: #f0f0f0;\n}\n.ant-list-header {\n background: transparent;\n}\n.ant-list-footer {\n background: transparent;\n}\n.ant-list-header,\n.ant-list-footer {\n padding-top: 12px;\n padding-bottom: 12px;\n}\n.ant-list-empty {\n padding: 16px 0;\n color: rgba(0, 0, 0, 0.45);\n font-size: 12px;\n text-align: center;\n}\n.ant-list-split .ant-list-item {\n border-bottom: 1px solid #f0f0f0;\n}\n.ant-list-split .ant-list-item:last-child {\n border-bottom: none;\n}\n.ant-list-split .ant-list-header {\n border-bottom: 1px solid #f0f0f0;\n}\n.ant-list-split.ant-list-empty .ant-list-footer {\n border-top: 1px solid #f0f0f0;\n}\n.ant-list-loading .ant-list-spin-nested-loading {\n min-height: 32px;\n}\n.ant-list-split.ant-list-something-after-last-item .ant-spin-container > .ant-list-items > .ant-list-item:last-child {\n border-bottom: 1px solid #f0f0f0;\n}\n.ant-list-lg .ant-list-item {\n padding: 16px 24px;\n}\n.ant-list-sm .ant-list-item {\n padding: 8px 16px;\n}\n.ant-list-vertical .ant-list-item {\n align-items: initial;\n}\n.ant-list-vertical .ant-list-item-main {\n display: block;\n flex: 1;\n}\n.ant-list-vertical .ant-list-item-extra {\n margin-left: 40px;\n}\n.ant-list-vertical .ant-list-item-meta {\n margin-bottom: 16px;\n}\n.ant-list-vertical .ant-list-item-meta-title {\n margin-bottom: 12px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 16px;\n line-height: 24px;\n}\n.ant-list-vertical .ant-list-item-action {\n margin-top: 16px;\n margin-left: auto;\n}\n.ant-list-vertical .ant-list-item-action > li {\n padding: 0 16px;\n}\n.ant-list-vertical .ant-list-item-action > li:first-child {\n padding-left: 0;\n}\n.ant-list-grid .ant-col > .ant-list-item {\n display: block;\n max-width: 100%;\n margin-bottom: 16px;\n padding-top: 0;\n padding-bottom: 0;\n border-bottom: none;\n}\n.ant-list-item-no-flex {\n display: block;\n}\n.ant-list:not(.ant-list-vertical) .ant-list-item-no-flex .ant-list-item-action {\n float: right;\n}\n.ant-list-bordered {\n border: 1px solid #d9d9d9;\n border-radius: 5px;\n}\n.ant-list-bordered .ant-list-header {\n padding-right: 24px;\n padding-left: 24px;\n}\n.ant-list-bordered .ant-list-footer {\n padding-right: 24px;\n padding-left: 24px;\n}\n.ant-list-bordered .ant-list-item {\n padding-right: 24px;\n padding-left: 24px;\n}\n.ant-list-bordered .ant-list-pagination {\n margin: 16px 24px;\n}\n.ant-list-bordered.ant-list-sm .ant-list-item {\n padding: 8px 16px;\n}\n.ant-list-bordered.ant-list-sm .ant-list-header,\n.ant-list-bordered.ant-list-sm .ant-list-footer {\n padding: 8px 16px;\n}\n.ant-list-bordered.ant-list-lg .ant-list-item {\n padding: 16px 24px;\n}\n.ant-list-bordered.ant-list-lg .ant-list-header,\n.ant-list-bordered.ant-list-lg .ant-list-footer {\n padding: 16px 24px;\n}\n@media screen and (max-width: 768px) {\n .ant-list-item-action {\n margin-left: 24px;\n }\n .ant-list-vertical .ant-list-item-extra {\n margin-left: 24px;\n }\n}\n@media screen and (max-width: 576px) {\n .ant-list-item {\n flex-wrap: wrap;\n }\n .ant-list-item-action {\n margin-left: 12px;\n }\n .ant-list-vertical .ant-list-item {\n flex-wrap: wrap-reverse;\n }\n .ant-list-vertical .ant-list-item-main {\n min-width: 220px;\n }\n .ant-list-vertical .ant-list-item-extra {\n margin: auto auto 16px;\n }\n}\n.ant-list-rtl {\n direction: rtl;\n text-align: right;\n}\n.ant-list-rtl .ReactVirtualized__List .ant-list-item {\n direction: rtl;\n}\n.ant-list-rtl .ant-list-pagination {\n text-align: left;\n}\n.ant-list-rtl .ant-list-item-meta-avatar {\n margin-right: 0;\n margin-left: 16px;\n}\n.ant-list-rtl .ant-list-item-action {\n margin-right: 48px;\n margin-left: 0;\n}\n.ant-list.ant-list-rtl .ant-list-item-action > li:first-child {\n padding-right: 0;\n padding-left: 16px;\n}\n.ant-list-rtl .ant-list-item-action-split {\n right: auto;\n left: 0;\n}\n.ant-list-rtl.ant-list-vertical .ant-list-item-extra {\n margin-right: 40px;\n margin-left: 0;\n}\n.ant-list-rtl.ant-list-vertical .ant-list-item-action {\n margin-right: auto;\n}\n.ant-list-rtl .ant-list-vertical .ant-list-item-action > li:first-child {\n padding-right: 0;\n padding-left: 16px;\n}\n.ant-list-rtl .ant-list:not(.ant-list-vertical) .ant-list-item-no-flex .ant-list-item-action {\n float: left;\n}\n@media screen and (max-width: 768px) {\n .ant-list-rtl .ant-list-item-action {\n margin-right: 24px;\n margin-left: 0;\n }\n .ant-list-rtl .ant-list-vertical .ant-list-item-extra {\n margin-right: 24px;\n margin-left: 0;\n }\n}\n@media screen and (max-width: 576px) {\n .ant-list-rtl .ant-list-item-action {\n margin-right: 22px;\n margin-left: 0;\n }\n .ant-list-rtl.ant-list-vertical .ant-list-item-extra {\n margin: auto auto 16px;\n }\n}\n.ant-mentions-status-error:not(.ant-mentions-disabled):not(.ant-mentions-borderless).ant-mentions,\n.ant-mentions-status-error:not(.ant-mentions-disabled):not(.ant-mentions-borderless).ant-mentions:hover {\n background: #fff;\n border-color: #ff4d4f;\n}\n.ant-mentions-status-error:not(.ant-mentions-disabled):not(.ant-mentions-borderless).ant-mentions:focus,\n.ant-mentions-status-error:not(.ant-mentions-disabled):not(.ant-mentions-borderless).ant-mentions-focused {\n border-color: #ff7875;\n box-shadow: 0 0 0 2px rgba(255, 77, 79, 0.2);\n border-right-width: 1px;\n outline: 0;\n}\n.ant-mentions-status-error .ant-input-prefix {\n color: #ff4d4f;\n}\n.ant-mentions-status-warning:not(.ant-mentions-disabled):not(.ant-mentions-borderless).ant-mentions,\n.ant-mentions-status-warning:not(.ant-mentions-disabled):not(.ant-mentions-borderless).ant-mentions:hover {\n background: #fff;\n border-color: #faad14;\n}\n.ant-mentions-status-warning:not(.ant-mentions-disabled):not(.ant-mentions-borderless).ant-mentions:focus,\n.ant-mentions-status-warning:not(.ant-mentions-disabled):not(.ant-mentions-borderless).ant-mentions-focused {\n border-color: #ffc53d;\n box-shadow: 0 0 0 2px rgba(250, 173, 20, 0.2);\n border-right-width: 1px;\n outline: 0;\n}\n.ant-mentions-status-warning .ant-input-prefix {\n color: #faad14;\n}\n.ant-mentions {\n box-sizing: border-box;\n margin: 0;\n font-variant: tabular-nums;\n list-style: none;\n font-feature-settings: 'tnum';\n width: 100%;\n min-width: 0;\n padding: 4px 11px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n background-color: #fff;\n background-image: none;\n border: 1px solid #d9d9d9;\n border-radius: 5px;\n transition: all 0.3s;\n position: relative;\n display: inline-block;\n height: auto;\n padding: 0;\n overflow: hidden;\n line-height: 1.5715;\n white-space: pre-wrap;\n vertical-align: bottom;\n}\n.ant-mentions::placeholder {\n color: #bfbfbf;\n user-select: none;\n}\n.ant-mentions:placeholder-shown {\n text-overflow: ellipsis;\n}\n.ant-mentions:hover {\n border-color: #8588ed;\n border-right-width: 1px;\n}\n.ant-input-rtl .ant-mentions:hover {\n border-right-width: 0;\n border-left-width: 1px !important;\n}\n.ant-mentions:focus,\n.ant-mentions-focused {\n border-color: #8588ed;\n box-shadow: 0 0 0 2px rgba(91, 92, 225, 0.2);\n border-right-width: 1px;\n outline: 0;\n}\n.ant-input-rtl .ant-mentions:focus,\n.ant-input-rtl .ant-mentions-focused {\n border-right-width: 0;\n border-left-width: 1px !important;\n}\n.ant-mentions-disabled {\n color: rgba(0, 0, 0, 0.25);\n background-color: #f5f5f5;\n border-color: #d9d9d9;\n box-shadow: none;\n cursor: not-allowed;\n opacity: 1;\n}\n.ant-mentions-disabled:hover {\n border-color: #d9d9d9;\n border-right-width: 1px;\n}\n.ant-mentions[disabled] {\n color: rgba(0, 0, 0, 0.25);\n background-color: #f5f5f5;\n border-color: #d9d9d9;\n box-shadow: none;\n cursor: not-allowed;\n opacity: 1;\n}\n.ant-mentions[disabled]:hover {\n border-color: #d9d9d9;\n border-right-width: 1px;\n}\n.ant-mentions-borderless,\n.ant-mentions-borderless:hover,\n.ant-mentions-borderless:focus,\n.ant-mentions-borderless-focused,\n.ant-mentions-borderless-disabled,\n.ant-mentions-borderless[disabled] {\n background-color: transparent;\n border: none;\n box-shadow: none;\n}\ntextarea.ant-mentions {\n max-width: 100%;\n height: auto;\n min-height: 32px;\n line-height: 1.5715;\n vertical-align: bottom;\n transition: all 0.3s, height 0s;\n}\n.ant-mentions-lg {\n padding: 6.5px 11px;\n font-size: 16px;\n}\n.ant-mentions-sm {\n padding: 0px 7px;\n}\n.ant-mentions-rtl {\n direction: rtl;\n}\n.ant-mentions-disabled > textarea {\n color: rgba(0, 0, 0, 0.25);\n background-color: #f5f5f5;\n border-color: #d9d9d9;\n box-shadow: none;\n cursor: not-allowed;\n opacity: 1;\n}\n.ant-mentions-disabled > textarea:hover {\n border-color: #d9d9d9;\n border-right-width: 1px;\n}\n.ant-mentions-focused {\n border-color: #8588ed;\n box-shadow: 0 0 0 2px rgba(91, 92, 225, 0.2);\n border-right-width: 1px;\n outline: 0;\n}\n.ant-input-rtl .ant-mentions-focused {\n border-right-width: 0;\n border-left-width: 1px !important;\n}\n.ant-mentions > textarea,\n.ant-mentions-measure {\n min-height: 30px;\n margin: 0;\n padding: 4px 11px;\n overflow: inherit;\n overflow-x: hidden;\n overflow-y: auto;\n /* stylelint-disable declaration-block-no-redundant-longhand-properties */\n font-weight: inherit;\n font-size: inherit;\n font-family: inherit;\n font-style: inherit;\n font-variant: inherit;\n font-size-adjust: inherit;\n font-stretch: inherit;\n line-height: inherit;\n /* stylelint-enable declaration-block-no-redundant-longhand-properties */\n direction: inherit;\n letter-spacing: inherit;\n white-space: inherit;\n text-align: inherit;\n vertical-align: top;\n word-wrap: break-word;\n word-break: inherit;\n tab-size: inherit;\n}\n.ant-mentions > textarea {\n width: 100%;\n border: none;\n outline: none;\n resize: none;\n}\n.ant-mentions > textarea::placeholder {\n color: #bfbfbf;\n user-select: none;\n}\n.ant-mentions > textarea:placeholder-shown {\n text-overflow: ellipsis;\n}\n.ant-mentions-measure {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: -1;\n color: transparent;\n pointer-events: none;\n}\n.ant-mentions-measure > span {\n display: inline-block;\n min-height: 1em;\n}\n.ant-mentions-dropdown {\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: absolute;\n top: -9999px;\n left: -9999px;\n z-index: 1050;\n box-sizing: border-box;\n font-size: 14px;\n font-variant: initial;\n background-color: #fff;\n border-radius: 5px;\n outline: none;\n box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05);\n}\n.ant-mentions-dropdown-hidden {\n display: none;\n}\n.ant-mentions-dropdown-menu {\n max-height: 250px;\n margin-bottom: 0;\n padding-left: 0;\n overflow: auto;\n list-style: none;\n outline: none;\n}\n.ant-mentions-dropdown-menu-item {\n position: relative;\n display: block;\n min-width: 100px;\n padding: 5px 12px;\n overflow: hidden;\n color: rgba(0, 0, 0, 0.85);\n font-weight: normal;\n line-height: 1.5715;\n white-space: nowrap;\n text-overflow: ellipsis;\n cursor: pointer;\n transition: background 0.3s ease;\n}\n.ant-mentions-dropdown-menu-item:hover {\n background-color: #f5f5f5;\n}\n.ant-mentions-dropdown-menu-item:first-child {\n border-radius: 5px 5px 0 0;\n}\n.ant-mentions-dropdown-menu-item:last-child {\n border-radius: 0 0 5px 5px;\n}\n.ant-mentions-dropdown-menu-item-disabled {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n}\n.ant-mentions-dropdown-menu-item-disabled:hover {\n color: rgba(0, 0, 0, 0.25);\n background-color: #fff;\n cursor: not-allowed;\n}\n.ant-mentions-dropdown-menu-item-selected {\n color: rgba(0, 0, 0, 0.85);\n font-weight: 600;\n background-color: #fafafa;\n}\n.ant-mentions-dropdown-menu-item-active {\n background-color: #f5f5f5;\n}\n.ant-mentions-suffix {\n position: absolute;\n top: 0;\n right: 11px;\n bottom: 0;\n z-index: 1;\n display: inline-flex;\n align-items: center;\n margin: auto;\n}\n.ant-mentions-rtl {\n direction: rtl;\n}\n.ant-menu-item-danger.ant-menu-item {\n color: #ff4d4f;\n}\n.ant-menu-item-danger.ant-menu-item:hover,\n.ant-menu-item-danger.ant-menu-item-active {\n color: #ff4d4f;\n}\n.ant-menu-item-danger.ant-menu-item:active {\n background: #fff1f0;\n}\n.ant-menu-item-danger.ant-menu-item-selected {\n color: #ff4d4f;\n}\n.ant-menu-item-danger.ant-menu-item-selected > a,\n.ant-menu-item-danger.ant-menu-item-selected > a:hover {\n color: #ff4d4f;\n}\n.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-danger.ant-menu-item-selected {\n background-color: #fff1f0;\n}\n.ant-menu-inline .ant-menu-item-danger.ant-menu-item::after {\n border-right-color: #ff4d4f;\n}\n.ant-menu-dark .ant-menu-item-danger.ant-menu-item,\n.ant-menu-dark .ant-menu-item-danger.ant-menu-item:hover,\n.ant-menu-dark .ant-menu-item-danger.ant-menu-item > a {\n color: #ff4d4f;\n}\n.ant-menu-dark.ant-menu-dark:not(.ant-menu-horizontal) .ant-menu-item-danger.ant-menu-item-selected {\n color: #fff;\n background-color: #ff4d4f;\n}\n.ant-menu {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n font-variant: tabular-nums;\n line-height: 1.5715;\n font-feature-settings: 'tnum';\n margin-bottom: 0;\n padding-left: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n line-height: 0;\n text-align: left;\n list-style: none;\n background: #fff;\n outline: none;\n box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05);\n transition: background 0.3s, width 0.3s cubic-bezier(0.2, 0, 0, 1) 0s;\n}\n.ant-menu::before {\n display: table;\n content: '';\n}\n.ant-menu::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-menu::before {\n display: table;\n content: '';\n}\n.ant-menu::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-menu.ant-menu-root:focus-visible {\n box-shadow: 0 0 0 2px #f0f2ff;\n}\n.ant-menu ul,\n.ant-menu ol {\n margin: 0;\n padding: 0;\n list-style: none;\n}\n.ant-menu-overflow {\n display: flex;\n}\n.ant-menu-overflow-item {\n flex: none;\n}\n.ant-menu-hidden,\n.ant-menu-submenu-hidden {\n display: none;\n}\n.ant-menu-item-group-title {\n height: 1.5715;\n padding: 8px 16px;\n color: rgba(0, 0, 0, 0.45);\n font-size: 14px;\n line-height: 1.5715;\n transition: all 0.3s;\n}\n.ant-menu-horizontal .ant-menu-submenu {\n transition: border-color 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), background 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\n}\n.ant-menu-submenu,\n.ant-menu-submenu-inline {\n transition: border-color 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), background 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), padding 0.15s cubic-bezier(0.645, 0.045, 0.355, 1);\n}\n.ant-menu-submenu-selected {\n color: #5b5ce1;\n}\n.ant-menu-item:active,\n.ant-menu-submenu-title:active {\n background: #f0f2ff;\n}\n.ant-menu-submenu .ant-menu-sub {\n cursor: initial;\n transition: background 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), padding 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\n}\n.ant-menu-title-content {\n transition: color 0.3s;\n}\n.ant-menu-item a {\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-menu-item a:hover {\n color: #5b5ce1;\n}\n.ant-menu-item a::before {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background-color: transparent;\n content: '';\n}\n.ant-menu-item > .ant-badge a {\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-menu-item > .ant-badge a:hover {\n color: #5b5ce1;\n}\n.ant-menu-item-divider {\n overflow: hidden;\n line-height: 0;\n border-color: #f0f0f0;\n border-style: solid;\n border-width: 1px 0 0;\n}\n.ant-menu-item-divider-dashed {\n border-style: dashed;\n}\n.ant-menu-horizontal .ant-menu-item,\n.ant-menu-horizontal .ant-menu-submenu {\n margin-top: -1px;\n}\n.ant-menu-horizontal > .ant-menu-item:hover,\n.ant-menu-horizontal > .ant-menu-item-active,\n.ant-menu-horizontal > .ant-menu-submenu .ant-menu-submenu-title:hover {\n background-color: transparent;\n}\n.ant-menu-item-selected {\n color: #5b5ce1;\n}\n.ant-menu-item-selected a,\n.ant-menu-item-selected a:hover {\n color: #5b5ce1;\n}\n.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-selected {\n background-color: #f0f2ff;\n}\n.ant-menu-inline,\n.ant-menu-vertical,\n.ant-menu-vertical-left {\n border-right: 1px solid #f0f0f0;\n}\n.ant-menu-vertical-right {\n border-left: 1px solid #f0f0f0;\n}\n.ant-menu-vertical.ant-menu-sub,\n.ant-menu-vertical-left.ant-menu-sub,\n.ant-menu-vertical-right.ant-menu-sub {\n min-width: 160px;\n max-height: calc(100vh - 100px);\n padding: 0;\n overflow: hidden;\n border-right: 0;\n}\n.ant-menu-vertical.ant-menu-sub:not([class*='-active']),\n.ant-menu-vertical-left.ant-menu-sub:not([class*='-active']),\n.ant-menu-vertical-right.ant-menu-sub:not([class*='-active']) {\n overflow-x: hidden;\n overflow-y: auto;\n}\n.ant-menu-vertical.ant-menu-sub .ant-menu-item,\n.ant-menu-vertical-left.ant-menu-sub .ant-menu-item,\n.ant-menu-vertical-right.ant-menu-sub .ant-menu-item {\n left: 0;\n margin-left: 0;\n border-right: 0;\n}\n.ant-menu-vertical.ant-menu-sub .ant-menu-item::after,\n.ant-menu-vertical-left.ant-menu-sub .ant-menu-item::after,\n.ant-menu-vertical-right.ant-menu-sub .ant-menu-item::after {\n border-right: 0;\n}\n.ant-menu-vertical.ant-menu-sub > .ant-menu-item,\n.ant-menu-vertical-left.ant-menu-sub > .ant-menu-item,\n.ant-menu-vertical-right.ant-menu-sub > .ant-menu-item,\n.ant-menu-vertical.ant-menu-sub > .ant-menu-submenu,\n.ant-menu-vertical-left.ant-menu-sub > .ant-menu-submenu,\n.ant-menu-vertical-right.ant-menu-sub > .ant-menu-submenu {\n transform-origin: 0 0;\n}\n.ant-menu-horizontal.ant-menu-sub {\n min-width: 114px;\n}\n.ant-menu-horizontal .ant-menu-item,\n.ant-menu-horizontal .ant-menu-submenu-title {\n transition: border-color 0.3s, background 0.3s;\n}\n.ant-menu-item,\n.ant-menu-submenu-title {\n position: relative;\n display: block;\n margin: 0;\n padding: 0 20px;\n white-space: nowrap;\n cursor: pointer;\n transition: border-color 0.3s, background 0.3s, padding 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\n}\n.ant-menu-item .ant-menu-item-icon,\n.ant-menu-submenu-title .ant-menu-item-icon,\n.ant-menu-item .anticon,\n.ant-menu-submenu-title .anticon {\n min-width: 14px;\n font-size: 14px;\n transition: font-size 0.15s cubic-bezier(0.215, 0.61, 0.355, 1), margin 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), color 0.3s;\n}\n.ant-menu-item .ant-menu-item-icon + span,\n.ant-menu-submenu-title .ant-menu-item-icon + span,\n.ant-menu-item .anticon + span,\n.ant-menu-submenu-title .anticon + span {\n margin-left: 10px;\n opacity: 1;\n transition: opacity 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), margin 0.3s, color 0.3s;\n}\n.ant-menu-item .ant-menu-item-icon.svg,\n.ant-menu-submenu-title .ant-menu-item-icon.svg {\n vertical-align: -0.125em;\n}\n.ant-menu-item.ant-menu-item-only-child > .anticon,\n.ant-menu-submenu-title.ant-menu-item-only-child > .anticon,\n.ant-menu-item.ant-menu-item-only-child > .ant-menu-item-icon,\n.ant-menu-submenu-title.ant-menu-item-only-child > .ant-menu-item-icon {\n margin-right: 0;\n}\n.ant-menu-item:not(.ant-menu-item-disabled):focus-visible,\n.ant-menu-submenu-title:not(.ant-menu-item-disabled):focus-visible {\n box-shadow: 0 0 0 2px #f0f2ff;\n}\n.ant-menu > .ant-menu-item-divider {\n margin: 1px 0;\n padding: 0;\n}\n.ant-menu-submenu-popup {\n position: absolute;\n z-index: 1050;\n background: transparent;\n border-radius: 5px;\n box-shadow: none;\n transform-origin: 0 0;\n}\n.ant-menu-submenu-popup::before {\n position: absolute;\n top: -7px;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: -1;\n width: 100%;\n height: 100%;\n opacity: 0.0001;\n content: ' ';\n}\n.ant-menu-submenu-placement-rightTop::before {\n top: 0;\n left: -7px;\n}\n.ant-menu-submenu > .ant-menu {\n background-color: #fff;\n border-radius: 5px;\n}\n.ant-menu-submenu > .ant-menu-submenu-title::after {\n transition: transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\n}\n.ant-menu-submenu-popup > .ant-menu {\n background-color: #fff;\n}\n.ant-menu-submenu-expand-icon,\n.ant-menu-submenu-arrow {\n position: absolute;\n top: 50%;\n right: 16px;\n width: 10px;\n color: rgba(0, 0, 0, 0.85);\n transform: translateY(-50%);\n transition: transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\n}\n.ant-menu-submenu-arrow::before,\n.ant-menu-submenu-arrow::after {\n position: absolute;\n width: 6px;\n height: 1.5px;\n background-color: currentcolor;\n border-radius: 2px;\n transition: background 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), top 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), color 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\n content: '';\n}\n.ant-menu-submenu-arrow::before {\n transform: rotate(45deg) translateY(-2.5px);\n}\n.ant-menu-submenu-arrow::after {\n transform: rotate(-45deg) translateY(2.5px);\n}\n.ant-menu-submenu:hover > .ant-menu-submenu-title > .ant-menu-submenu-expand-icon,\n.ant-menu-submenu:hover > .ant-menu-submenu-title > .ant-menu-submenu-arrow {\n color: #5b5ce1;\n}\n.ant-menu-inline-collapsed .ant-menu-submenu-arrow::before,\n.ant-menu-submenu-inline .ant-menu-submenu-arrow::before {\n transform: rotate(-45deg) translateX(2.5px);\n}\n.ant-menu-inline-collapsed .ant-menu-submenu-arrow::after,\n.ant-menu-submenu-inline .ant-menu-submenu-arrow::after {\n transform: rotate(45deg) translateX(-2.5px);\n}\n.ant-menu-submenu-horizontal .ant-menu-submenu-arrow {\n display: none;\n}\n.ant-menu-submenu-open.ant-menu-submenu-inline > .ant-menu-submenu-title > .ant-menu-submenu-arrow {\n transform: translateY(-2px);\n}\n.ant-menu-submenu-open.ant-menu-submenu-inline > .ant-menu-submenu-title > .ant-menu-submenu-arrow::after {\n transform: rotate(-45deg) translateX(-2.5px);\n}\n.ant-menu-submenu-open.ant-menu-submenu-inline > .ant-menu-submenu-title > .ant-menu-submenu-arrow::before {\n transform: rotate(45deg) translateX(2.5px);\n}\n.ant-menu-vertical .ant-menu-submenu-selected,\n.ant-menu-vertical-left .ant-menu-submenu-selected,\n.ant-menu-vertical-right .ant-menu-submenu-selected {\n color: #5b5ce1;\n}\n.ant-menu-horizontal {\n line-height: 46px;\n border: 0;\n border-bottom: 1px solid #f0f0f0;\n box-shadow: none;\n}\n.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-item,\n.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-submenu {\n margin-top: -1px;\n margin-bottom: 0;\n padding: 0 20px;\n}\n.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-item:hover,\n.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-submenu:hover,\n.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-item-active,\n.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-submenu-active,\n.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-item-open,\n.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-submenu-open,\n.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-item-selected,\n.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-submenu-selected {\n color: #5b5ce1;\n}\n.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-item:hover::after,\n.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-submenu:hover::after,\n.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-item-active::after,\n.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-submenu-active::after,\n.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-item-open::after,\n.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-submenu-open::after,\n.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-item-selected::after,\n.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-submenu-selected::after {\n border-bottom: 2px solid #5b5ce1;\n}\n.ant-menu-horizontal > .ant-menu-item,\n.ant-menu-horizontal > .ant-menu-submenu {\n position: relative;\n top: 1px;\n display: inline-block;\n vertical-align: bottom;\n}\n.ant-menu-horizontal > .ant-menu-item::after,\n.ant-menu-horizontal > .ant-menu-submenu::after {\n position: absolute;\n right: 20px;\n bottom: 0;\n left: 20px;\n border-bottom: 2px solid transparent;\n transition: border-color 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\n content: '';\n}\n.ant-menu-horizontal > .ant-menu-submenu > .ant-menu-submenu-title {\n padding: 0;\n}\n.ant-menu-horizontal > .ant-menu-item a {\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-menu-horizontal > .ant-menu-item a:hover {\n color: #5b5ce1;\n}\n.ant-menu-horizontal > .ant-menu-item a::before {\n bottom: -2px;\n}\n.ant-menu-horizontal > .ant-menu-item-selected a {\n color: #5b5ce1;\n}\n.ant-menu-horizontal::after {\n display: block;\n clear: both;\n height: 0;\n content: '\\20';\n}\n.ant-menu-vertical .ant-menu-item,\n.ant-menu-vertical-left .ant-menu-item,\n.ant-menu-vertical-right .ant-menu-item,\n.ant-menu-inline .ant-menu-item {\n position: relative;\n}\n.ant-menu-vertical .ant-menu-item::after,\n.ant-menu-vertical-left .ant-menu-item::after,\n.ant-menu-vertical-right .ant-menu-item::after,\n.ant-menu-inline .ant-menu-item::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n border-right: 3px solid #5b5ce1;\n transform: scaleY(0.0001);\n opacity: 0;\n transition: transform 0.15s cubic-bezier(0.215, 0.61, 0.355, 1), opacity 0.15s cubic-bezier(0.215, 0.61, 0.355, 1);\n content: '';\n}\n.ant-menu-vertical .ant-menu-item,\n.ant-menu-vertical-left .ant-menu-item,\n.ant-menu-vertical-right .ant-menu-item,\n.ant-menu-inline .ant-menu-item,\n.ant-menu-vertical .ant-menu-submenu-title,\n.ant-menu-vertical-left .ant-menu-submenu-title,\n.ant-menu-vertical-right .ant-menu-submenu-title,\n.ant-menu-inline .ant-menu-submenu-title {\n height: 40px;\n margin-top: 4px;\n margin-bottom: 4px;\n padding: 0 16px;\n overflow: hidden;\n line-height: 40px;\n text-overflow: ellipsis;\n}\n.ant-menu-vertical .ant-menu-submenu,\n.ant-menu-vertical-left .ant-menu-submenu,\n.ant-menu-vertical-right .ant-menu-submenu,\n.ant-menu-inline .ant-menu-submenu {\n padding-bottom: 0.02px;\n}\n.ant-menu-vertical .ant-menu-item:not(:last-child),\n.ant-menu-vertical-left .ant-menu-item:not(:last-child),\n.ant-menu-vertical-right .ant-menu-item:not(:last-child),\n.ant-menu-inline .ant-menu-item:not(:last-child) {\n margin-bottom: 8px;\n}\n.ant-menu-vertical > .ant-menu-item,\n.ant-menu-vertical-left > .ant-menu-item,\n.ant-menu-vertical-right > .ant-menu-item,\n.ant-menu-inline > .ant-menu-item,\n.ant-menu-vertical > .ant-menu-submenu > .ant-menu-submenu-title,\n.ant-menu-vertical-left > .ant-menu-submenu > .ant-menu-submenu-title,\n.ant-menu-vertical-right > .ant-menu-submenu > .ant-menu-submenu-title,\n.ant-menu-inline > .ant-menu-submenu > .ant-menu-submenu-title {\n height: 40px;\n line-height: 40px;\n}\n.ant-menu-vertical .ant-menu-item-group-list .ant-menu-submenu-title,\n.ant-menu-vertical .ant-menu-submenu-title {\n padding-right: 34px;\n}\n.ant-menu-inline {\n width: 100%;\n}\n.ant-menu-inline .ant-menu-selected::after,\n.ant-menu-inline .ant-menu-item-selected::after {\n transform: scaleY(1);\n opacity: 1;\n transition: transform 0.15s cubic-bezier(0.645, 0.045, 0.355, 1), opacity 0.15s cubic-bezier(0.645, 0.045, 0.355, 1);\n}\n.ant-menu-inline .ant-menu-item,\n.ant-menu-inline .ant-menu-submenu-title {\n width: calc(100% + 1px);\n}\n.ant-menu-inline .ant-menu-item-group-list .ant-menu-submenu-title,\n.ant-menu-inline .ant-menu-submenu-title {\n padding-right: 34px;\n}\n.ant-menu-inline.ant-menu-root .ant-menu-item,\n.ant-menu-inline.ant-menu-root .ant-menu-submenu-title {\n display: flex;\n align-items: center;\n transition: border-color 0.3s, background 0.3s, padding 0.1s cubic-bezier(0.215, 0.61, 0.355, 1);\n}\n.ant-menu-inline.ant-menu-root .ant-menu-item > .ant-menu-title-content,\n.ant-menu-inline.ant-menu-root .ant-menu-submenu-title > .ant-menu-title-content {\n flex: auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.ant-menu-inline.ant-menu-root .ant-menu-item > *,\n.ant-menu-inline.ant-menu-root .ant-menu-submenu-title > * {\n flex: none;\n}\n.ant-menu.ant-menu-inline-collapsed {\n width: 80px;\n}\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-item,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-item-group > .ant-menu-item-group-list > .ant-menu-item,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-item-group > .ant-menu-item-group-list > .ant-menu-submenu > .ant-menu-submenu-title,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-submenu > .ant-menu-submenu-title {\n left: 0;\n padding: 0 calc(50% - 16px / 2);\n text-overflow: clip;\n}\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-item .ant-menu-submenu-arrow,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-item-group > .ant-menu-item-group-list > .ant-menu-item .ant-menu-submenu-arrow,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-item-group > .ant-menu-item-group-list > .ant-menu-submenu > .ant-menu-submenu-title .ant-menu-submenu-arrow,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-submenu > .ant-menu-submenu-title .ant-menu-submenu-arrow {\n opacity: 0;\n}\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-item .ant-menu-item-icon,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-item-group > .ant-menu-item-group-list > .ant-menu-item .ant-menu-item-icon,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-item-group > .ant-menu-item-group-list > .ant-menu-submenu > .ant-menu-submenu-title .ant-menu-item-icon,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-submenu > .ant-menu-submenu-title .ant-menu-item-icon,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-item .anticon,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-item-group > .ant-menu-item-group-list > .ant-menu-item .anticon,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-item-group > .ant-menu-item-group-list > .ant-menu-submenu > .ant-menu-submenu-title .anticon,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-submenu > .ant-menu-submenu-title .anticon {\n margin: 0;\n font-size: 16px;\n line-height: 40px;\n}\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-item .ant-menu-item-icon + span,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-item-group > .ant-menu-item-group-list > .ant-menu-item .ant-menu-item-icon + span,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-item-group > .ant-menu-item-group-list > .ant-menu-submenu > .ant-menu-submenu-title .ant-menu-item-icon + span,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-submenu > .ant-menu-submenu-title .ant-menu-item-icon + span,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-item .anticon + span,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-item-group > .ant-menu-item-group-list > .ant-menu-item .anticon + span,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-item-group > .ant-menu-item-group-list > .ant-menu-submenu > .ant-menu-submenu-title .anticon + span,\n.ant-menu.ant-menu-inline-collapsed > .ant-menu-submenu > .ant-menu-submenu-title .anticon + span {\n display: inline-block;\n opacity: 0;\n}\n.ant-menu.ant-menu-inline-collapsed .ant-menu-item-icon,\n.ant-menu.ant-menu-inline-collapsed .anticon {\n display: inline-block;\n}\n.ant-menu.ant-menu-inline-collapsed-tooltip {\n pointer-events: none;\n}\n.ant-menu.ant-menu-inline-collapsed-tooltip .ant-menu-item-icon,\n.ant-menu.ant-menu-inline-collapsed-tooltip .anticon {\n display: none;\n}\n.ant-menu.ant-menu-inline-collapsed-tooltip a {\n color: rgba(255, 255, 255, 0.85);\n}\n.ant-menu.ant-menu-inline-collapsed .ant-menu-item-group-title {\n padding-right: 4px;\n padding-left: 4px;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.ant-menu-item-group-list {\n margin: 0;\n padding: 0;\n}\n.ant-menu-item-group-list .ant-menu-item,\n.ant-menu-item-group-list .ant-menu-submenu-title {\n padding: 0 16px 0 28px;\n}\n.ant-menu-root.ant-menu-vertical,\n.ant-menu-root.ant-menu-vertical-left,\n.ant-menu-root.ant-menu-vertical-right,\n.ant-menu-root.ant-menu-inline {\n box-shadow: none;\n}\n.ant-menu-root.ant-menu-inline-collapsed .ant-menu-item > .ant-menu-inline-collapsed-noicon,\n.ant-menu-root.ant-menu-inline-collapsed .ant-menu-submenu .ant-menu-submenu-title > .ant-menu-inline-collapsed-noicon {\n font-size: 16px;\n text-align: center;\n}\n.ant-menu-sub.ant-menu-inline {\n padding: 0;\n background: #fafafa;\n border: 0;\n border-radius: 0;\n box-shadow: none;\n}\n.ant-menu-sub.ant-menu-inline > .ant-menu-item,\n.ant-menu-sub.ant-menu-inline > .ant-menu-submenu > .ant-menu-submenu-title {\n height: 40px;\n line-height: 40px;\n list-style-position: inside;\n list-style-type: disc;\n}\n.ant-menu-sub.ant-menu-inline .ant-menu-item-group-title {\n padding-left: 32px;\n}\n.ant-menu-item-disabled,\n.ant-menu-submenu-disabled {\n color: rgba(0, 0, 0, 0.25) !important;\n background: none;\n cursor: not-allowed;\n}\n.ant-menu-item-disabled::after,\n.ant-menu-submenu-disabled::after {\n border-color: transparent !important;\n}\n.ant-menu-item-disabled a,\n.ant-menu-submenu-disabled a {\n color: rgba(0, 0, 0, 0.25) !important;\n}\n.ant-menu-item-disabled > .ant-menu-submenu-title,\n.ant-menu-submenu-disabled > .ant-menu-submenu-title {\n color: rgba(0, 0, 0, 0.25) !important;\n cursor: not-allowed;\n}\n.ant-menu-item-disabled > .ant-menu-submenu-title > .ant-menu-submenu-arrow::before,\n.ant-menu-submenu-disabled > .ant-menu-submenu-title > .ant-menu-submenu-arrow::before,\n.ant-menu-item-disabled > .ant-menu-submenu-title > .ant-menu-submenu-arrow::after,\n.ant-menu-submenu-disabled > .ant-menu-submenu-title > .ant-menu-submenu-arrow::after {\n background: rgba(0, 0, 0, 0.25) !important;\n}\n.ant-layout-header .ant-menu {\n line-height: inherit;\n}\n.ant-menu-inline-collapsed-tooltip a,\n.ant-menu-inline-collapsed-tooltip a:hover {\n color: #fff;\n}\n.ant-menu-light .ant-menu-item:hover,\n.ant-menu-light .ant-menu-item-active,\n.ant-menu-light .ant-menu:not(.ant-menu-inline) .ant-menu-submenu-open,\n.ant-menu-light .ant-menu-submenu-active,\n.ant-menu-light .ant-menu-submenu-title:hover {\n color: #5b5ce1;\n}\n.ant-menu.ant-menu-root:focus-visible {\n box-shadow: 0 0 0 2px #4541ba;\n}\n.ant-menu-dark .ant-menu-item:focus-visible,\n.ant-menu-dark .ant-menu-submenu-title:focus-visible {\n box-shadow: 0 0 0 2px #4541ba;\n}\n.ant-menu.ant-menu-dark,\n.ant-menu-dark .ant-menu-sub,\n.ant-menu.ant-menu-dark .ant-menu-sub {\n color: rgba(255, 255, 255, 0.65);\n background: #001529;\n}\n.ant-menu.ant-menu-dark .ant-menu-submenu-title .ant-menu-submenu-arrow,\n.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow,\n.ant-menu.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow {\n opacity: 0.45;\n transition: all 0.3s;\n}\n.ant-menu.ant-menu-dark .ant-menu-submenu-title .ant-menu-submenu-arrow::after,\n.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow::after,\n.ant-menu.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow::after,\n.ant-menu.ant-menu-dark .ant-menu-submenu-title .ant-menu-submenu-arrow::before,\n.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow::before,\n.ant-menu.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow::before {\n background: #fff;\n}\n.ant-menu-dark.ant-menu-submenu-popup {\n background: transparent;\n}\n.ant-menu-dark .ant-menu-inline.ant-menu-sub {\n background: #000c17;\n}\n.ant-menu-dark.ant-menu-horizontal {\n border-bottom: 0;\n}\n.ant-menu-dark.ant-menu-horizontal > .ant-menu-item,\n.ant-menu-dark.ant-menu-horizontal > .ant-menu-submenu {\n top: 0;\n margin-top: 0;\n padding: 0 20px;\n border-color: #001529;\n border-bottom: 0;\n}\n.ant-menu-dark.ant-menu-horizontal > .ant-menu-item:hover {\n background-color: #5b5ce1;\n}\n.ant-menu-dark.ant-menu-horizontal > .ant-menu-item > a::before {\n bottom: 0;\n}\n.ant-menu-dark .ant-menu-item,\n.ant-menu-dark .ant-menu-item-group-title,\n.ant-menu-dark .ant-menu-item > a,\n.ant-menu-dark .ant-menu-item > span > a {\n color: rgba(255, 255, 255, 0.65);\n}\n.ant-menu-dark.ant-menu-inline,\n.ant-menu-dark.ant-menu-vertical,\n.ant-menu-dark.ant-menu-vertical-left,\n.ant-menu-dark.ant-menu-vertical-right {\n border-right: 0;\n}\n.ant-menu-dark.ant-menu-inline .ant-menu-item,\n.ant-menu-dark.ant-menu-vertical .ant-menu-item,\n.ant-menu-dark.ant-menu-vertical-left .ant-menu-item,\n.ant-menu-dark.ant-menu-vertical-right .ant-menu-item {\n left: 0;\n margin-left: 0;\n border-right: 0;\n}\n.ant-menu-dark.ant-menu-inline .ant-menu-item::after,\n.ant-menu-dark.ant-menu-vertical .ant-menu-item::after,\n.ant-menu-dark.ant-menu-vertical-left .ant-menu-item::after,\n.ant-menu-dark.ant-menu-vertical-right .ant-menu-item::after {\n border-right: 0;\n}\n.ant-menu-dark.ant-menu-inline .ant-menu-item,\n.ant-menu-dark.ant-menu-inline .ant-menu-submenu-title {\n width: 100%;\n}\n.ant-menu-dark .ant-menu-item:hover,\n.ant-menu-dark .ant-menu-item-active,\n.ant-menu-dark .ant-menu-submenu-active,\n.ant-menu-dark .ant-menu-submenu-open,\n.ant-menu-dark .ant-menu-submenu-selected,\n.ant-menu-dark .ant-menu-submenu-title:hover {\n color: #fff;\n background-color: transparent;\n}\n.ant-menu-dark .ant-menu-item:hover > a,\n.ant-menu-dark .ant-menu-item-active > a,\n.ant-menu-dark .ant-menu-submenu-active > a,\n.ant-menu-dark .ant-menu-submenu-open > a,\n.ant-menu-dark .ant-menu-submenu-selected > a,\n.ant-menu-dark .ant-menu-submenu-title:hover > a,\n.ant-menu-dark .ant-menu-item:hover > span > a,\n.ant-menu-dark .ant-menu-item-active > span > a,\n.ant-menu-dark .ant-menu-submenu-active > span > a,\n.ant-menu-dark .ant-menu-submenu-open > span > a,\n.ant-menu-dark .ant-menu-submenu-selected > span > a,\n.ant-menu-dark .ant-menu-submenu-title:hover > span > a {\n color: #fff;\n}\n.ant-menu-dark .ant-menu-item:hover > .ant-menu-submenu-title > .ant-menu-submenu-arrow,\n.ant-menu-dark .ant-menu-item-active > .ant-menu-submenu-title > .ant-menu-submenu-arrow,\n.ant-menu-dark .ant-menu-submenu-active > .ant-menu-submenu-title > .ant-menu-submenu-arrow,\n.ant-menu-dark .ant-menu-submenu-open > .ant-menu-submenu-title > .ant-menu-submenu-arrow,\n.ant-menu-dark .ant-menu-submenu-selected > .ant-menu-submenu-title > .ant-menu-submenu-arrow,\n.ant-menu-dark .ant-menu-submenu-title:hover > .ant-menu-submenu-title > .ant-menu-submenu-arrow {\n opacity: 1;\n}\n.ant-menu-dark .ant-menu-item:hover > .ant-menu-submenu-title > .ant-menu-submenu-arrow::after,\n.ant-menu-dark .ant-menu-item-active > .ant-menu-submenu-title > .ant-menu-submenu-arrow::after,\n.ant-menu-dark .ant-menu-submenu-active > .ant-menu-submenu-title > .ant-menu-submenu-arrow::after,\n.ant-menu-dark .ant-menu-submenu-open > .ant-menu-submenu-title > .ant-menu-submenu-arrow::after,\n.ant-menu-dark .ant-menu-submenu-selected > .ant-menu-submenu-title > .ant-menu-submenu-arrow::after,\n.ant-menu-dark .ant-menu-submenu-title:hover > .ant-menu-submenu-title > .ant-menu-submenu-arrow::after,\n.ant-menu-dark .ant-menu-item:hover > .ant-menu-submenu-title > .ant-menu-submenu-arrow::before,\n.ant-menu-dark .ant-menu-item-active > .ant-menu-submenu-title > .ant-menu-submenu-arrow::before,\n.ant-menu-dark .ant-menu-submenu-active > .ant-menu-submenu-title > .ant-menu-submenu-arrow::before,\n.ant-menu-dark .ant-menu-submenu-open > .ant-menu-submenu-title > .ant-menu-submenu-arrow::before,\n.ant-menu-dark .ant-menu-submenu-selected > .ant-menu-submenu-title > .ant-menu-submenu-arrow::before,\n.ant-menu-dark .ant-menu-submenu-title:hover > .ant-menu-submenu-title > .ant-menu-submenu-arrow::before {\n background: #fff;\n}\n.ant-menu-dark .ant-menu-item:hover {\n background-color: transparent;\n}\n.ant-menu-dark.ant-menu-dark:not(.ant-menu-horizontal) .ant-menu-item-selected {\n background-color: #5b5ce1;\n}\n.ant-menu-dark .ant-menu-item-selected {\n color: #fff;\n border-right: 0;\n}\n.ant-menu-dark .ant-menu-item-selected::after {\n border-right: 0;\n}\n.ant-menu-dark .ant-menu-item-selected > a,\n.ant-menu-dark .ant-menu-item-selected > span > a,\n.ant-menu-dark .ant-menu-item-selected > a:hover,\n.ant-menu-dark .ant-menu-item-selected > span > a:hover {\n color: #fff;\n}\n.ant-menu-dark .ant-menu-item-selected .ant-menu-item-icon,\n.ant-menu-dark .ant-menu-item-selected .anticon {\n color: #fff;\n}\n.ant-menu-dark .ant-menu-item-selected .ant-menu-item-icon + span,\n.ant-menu-dark .ant-menu-item-selected .anticon + span {\n color: #fff;\n}\n.ant-menu.ant-menu-dark .ant-menu-item-selected,\n.ant-menu-submenu-popup.ant-menu-dark .ant-menu-item-selected {\n background-color: #5b5ce1;\n}\n.ant-menu-dark .ant-menu-item-disabled,\n.ant-menu-dark .ant-menu-submenu-disabled,\n.ant-menu-dark .ant-menu-item-disabled > a,\n.ant-menu-dark .ant-menu-submenu-disabled > a,\n.ant-menu-dark .ant-menu-item-disabled > span > a,\n.ant-menu-dark .ant-menu-submenu-disabled > span > a {\n color: rgba(255, 255, 255, 0.35) !important;\n opacity: 0.8;\n}\n.ant-menu-dark .ant-menu-item-disabled > .ant-menu-submenu-title,\n.ant-menu-dark .ant-menu-submenu-disabled > .ant-menu-submenu-title {\n color: rgba(255, 255, 255, 0.35) !important;\n}\n.ant-menu-dark .ant-menu-item-disabled > .ant-menu-submenu-title > .ant-menu-submenu-arrow::before,\n.ant-menu-dark .ant-menu-submenu-disabled > .ant-menu-submenu-title > .ant-menu-submenu-arrow::before,\n.ant-menu-dark .ant-menu-item-disabled > .ant-menu-submenu-title > .ant-menu-submenu-arrow::after,\n.ant-menu-dark .ant-menu-submenu-disabled > .ant-menu-submenu-title > .ant-menu-submenu-arrow::after {\n background: rgba(255, 255, 255, 0.35) !important;\n}\n.ant-menu.ant-menu-rtl {\n direction: rtl;\n text-align: right;\n}\n.ant-menu-rtl .ant-menu-item-group-title {\n text-align: right;\n}\n.ant-menu-rtl.ant-menu-inline,\n.ant-menu-rtl.ant-menu-vertical {\n border-right: none;\n border-left: 1px solid #f0f0f0;\n}\n.ant-menu-rtl.ant-menu-dark.ant-menu-inline,\n.ant-menu-rtl.ant-menu-dark.ant-menu-vertical {\n border-left: none;\n}\n.ant-menu-rtl.ant-menu-vertical.ant-menu-sub > .ant-menu-item,\n.ant-menu-rtl.ant-menu-vertical-left.ant-menu-sub > .ant-menu-item,\n.ant-menu-rtl.ant-menu-vertical-right.ant-menu-sub > .ant-menu-item,\n.ant-menu-rtl.ant-menu-vertical.ant-menu-sub > .ant-menu-submenu,\n.ant-menu-rtl.ant-menu-vertical-left.ant-menu-sub > .ant-menu-submenu,\n.ant-menu-rtl.ant-menu-vertical-right.ant-menu-sub > .ant-menu-submenu {\n transform-origin: top right;\n}\n.ant-menu-rtl .ant-menu-item .ant-menu-item-icon,\n.ant-menu-rtl .ant-menu-submenu-title .ant-menu-item-icon,\n.ant-menu-rtl .ant-menu-item .anticon,\n.ant-menu-rtl .ant-menu-submenu-title .anticon {\n margin-right: auto;\n margin-left: 10px;\n}\n.ant-menu-rtl .ant-menu-item.ant-menu-item-only-child > .ant-menu-item-icon,\n.ant-menu-rtl .ant-menu-submenu-title.ant-menu-item-only-child > .ant-menu-item-icon,\n.ant-menu-rtl .ant-menu-item.ant-menu-item-only-child > .anticon,\n.ant-menu-rtl .ant-menu-submenu-title.ant-menu-item-only-child > .anticon {\n margin-left: 0;\n}\n.ant-menu-submenu-rtl.ant-menu-submenu-popup {\n transform-origin: 100% 0;\n}\n.ant-menu-rtl .ant-menu-submenu-vertical > .ant-menu-submenu-title .ant-menu-submenu-arrow,\n.ant-menu-rtl .ant-menu-submenu-vertical-left > .ant-menu-submenu-title .ant-menu-submenu-arrow,\n.ant-menu-rtl .ant-menu-submenu-vertical-right > .ant-menu-submenu-title .ant-menu-submenu-arrow,\n.ant-menu-rtl .ant-menu-submenu-inline > .ant-menu-submenu-title .ant-menu-submenu-arrow {\n right: auto;\n left: 16px;\n}\n.ant-menu-rtl .ant-menu-submenu-vertical > .ant-menu-submenu-title .ant-menu-submenu-arrow::before,\n.ant-menu-rtl .ant-menu-submenu-vertical-left > .ant-menu-submenu-title .ant-menu-submenu-arrow::before,\n.ant-menu-rtl .ant-menu-submenu-vertical-right > .ant-menu-submenu-title .ant-menu-submenu-arrow::before {\n transform: rotate(-45deg) translateY(-2px);\n}\n.ant-menu-rtl .ant-menu-submenu-vertical > .ant-menu-submenu-title .ant-menu-submenu-arrow::after,\n.ant-menu-rtl .ant-menu-submenu-vertical-left > .ant-menu-submenu-title .ant-menu-submenu-arrow::after,\n.ant-menu-rtl .ant-menu-submenu-vertical-right > .ant-menu-submenu-title .ant-menu-submenu-arrow::after {\n transform: rotate(45deg) translateY(2px);\n}\n.ant-menu-rtl.ant-menu-vertical .ant-menu-item::after,\n.ant-menu-rtl.ant-menu-vertical-left .ant-menu-item::after,\n.ant-menu-rtl.ant-menu-vertical-right .ant-menu-item::after,\n.ant-menu-rtl.ant-menu-inline .ant-menu-item::after {\n right: auto;\n left: 0;\n}\n.ant-menu-rtl.ant-menu-vertical .ant-menu-item,\n.ant-menu-rtl.ant-menu-vertical-left .ant-menu-item,\n.ant-menu-rtl.ant-menu-vertical-right .ant-menu-item,\n.ant-menu-rtl.ant-menu-inline .ant-menu-item,\n.ant-menu-rtl.ant-menu-vertical .ant-menu-submenu-title,\n.ant-menu-rtl.ant-menu-vertical-left .ant-menu-submenu-title,\n.ant-menu-rtl.ant-menu-vertical-right .ant-menu-submenu-title,\n.ant-menu-rtl.ant-menu-inline .ant-menu-submenu-title {\n text-align: right;\n}\n.ant-menu-rtl.ant-menu-inline .ant-menu-submenu-title {\n padding-right: 0;\n padding-left: 34px;\n}\n.ant-menu-rtl.ant-menu-vertical .ant-menu-submenu-title {\n padding-right: 16px;\n padding-left: 34px;\n}\n.ant-menu-rtl.ant-menu-inline-collapsed.ant-menu-vertical .ant-menu-submenu-title {\n padding: 0 calc(50% - 16px / 2);\n}\n.ant-menu-rtl .ant-menu-item-group-list .ant-menu-item,\n.ant-menu-rtl .ant-menu-item-group-list .ant-menu-submenu-title {\n padding: 0 28px 0 16px;\n}\n.ant-menu-sub.ant-menu-inline {\n border: 0;\n}\n.ant-menu-rtl.ant-menu-sub.ant-menu-inline .ant-menu-item-group-title {\n padding-right: 32px;\n padding-left: 0;\n}\n.ant-message {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: fixed;\n top: 8px;\n left: 0;\n z-index: 1010;\n width: 100%;\n pointer-events: none;\n}\n.ant-message-notice {\n padding: 8px;\n text-align: center;\n}\n.ant-message-notice-content {\n display: inline-block;\n padding: 10px 16px;\n background: #fff;\n border-radius: 5px;\n box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05);\n pointer-events: all;\n}\n.ant-message-success .anticon {\n color: #52c41a;\n}\n.ant-message-error .anticon {\n color: #ff4d4f;\n}\n.ant-message-warning .anticon {\n color: #faad14;\n}\n.ant-message-info .anticon,\n.ant-message-loading .anticon {\n color: #5b5ce1;\n}\n.ant-message .anticon {\n position: relative;\n top: 1px;\n margin-right: 8px;\n font-size: 16px;\n}\n.ant-message-notice.ant-move-up-leave.ant-move-up-leave-active {\n animation-name: MessageMoveOut;\n animation-duration: 0.3s;\n}\n@keyframes MessageMoveOut {\n 0% {\n max-height: 150px;\n padding: 8px;\n opacity: 1;\n }\n 100% {\n max-height: 0;\n padding: 0;\n opacity: 0;\n }\n}\n.ant-message-rtl {\n direction: rtl;\n}\n.ant-message-rtl span {\n direction: rtl;\n}\n.ant-message-rtl .anticon {\n margin-right: 0;\n margin-left: 8px;\n}\n.ant-modal {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n pointer-events: none;\n position: relative;\n top: 100px;\n width: auto;\n max-width: calc(100vw - 32px);\n margin: 0 auto;\n padding-bottom: 24px;\n}\n.ant-modal.ant-zoom-enter,\n.ant-modal.ant-zoom-appear {\n transform: none;\n opacity: 0;\n animation-duration: 0.3s;\n user-select: none;\n}\n.ant-modal-mask {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1000;\n height: 100%;\n background-color: rgba(0, 0, 0, 0.45);\n}\n.ant-modal-mask-hidden {\n display: none;\n}\n.ant-modal-wrap {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n overflow: auto;\n outline: 0;\n}\n.ant-modal-wrap {\n z-index: 1000;\n}\n.ant-modal-title {\n margin: 0;\n color: rgba(0, 0, 0, 0.85);\n font-weight: 500;\n font-size: 16px;\n line-height: 22px;\n word-wrap: break-word;\n}\n.ant-modal-content {\n position: relative;\n background-color: #fff;\n background-clip: padding-box;\n border: 0;\n border-radius: 5px;\n box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05);\n pointer-events: auto;\n}\n.ant-modal-close {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 10;\n padding: 0;\n color: rgba(0, 0, 0, 0.45);\n font-weight: 700;\n line-height: 1;\n text-decoration: none;\n background: transparent;\n border: 0;\n outline: 0;\n cursor: pointer;\n transition: color 0.3s;\n}\n.ant-modal-close-x {\n display: block;\n width: 54px;\n height: 54px;\n font-size: 16px;\n font-style: normal;\n line-height: 54px;\n text-align: center;\n text-transform: none;\n text-rendering: auto;\n}\n.ant-modal-close:focus,\n.ant-modal-close:hover {\n color: rgba(0, 0, 0, 0.75);\n text-decoration: none;\n}\n.ant-modal-header {\n padding: 16px 24px;\n color: rgba(0, 0, 0, 0.85);\n background: #fff;\n border-bottom: 1px solid #f0f0f0;\n border-radius: 5px 5px 0 0;\n}\n.ant-modal-body {\n padding: 24px;\n font-size: 14px;\n line-height: 1.5715;\n word-wrap: break-word;\n}\n.ant-modal-footer {\n padding: 10px 16px;\n text-align: right;\n background: transparent;\n border-top: 1px solid #f0f0f0;\n border-radius: 0 0 5px 5px;\n}\n.ant-modal-footer .ant-btn + .ant-btn:not(.ant-dropdown-trigger) {\n margin-bottom: 0;\n margin-left: 8px;\n}\n.ant-modal-open {\n overflow: hidden;\n}\n.ant-modal-centered {\n text-align: center;\n}\n.ant-modal-centered::before {\n display: inline-block;\n width: 0;\n height: 100%;\n vertical-align: middle;\n content: '';\n}\n.ant-modal-centered .ant-modal {\n top: 0;\n display: inline-block;\n padding-bottom: 0;\n text-align: left;\n vertical-align: middle;\n}\n@media (max-width: 767px) {\n .ant-modal {\n max-width: calc(100vw - 16px);\n margin: 8px auto;\n }\n .ant-modal-centered .ant-modal {\n flex: 1;\n }\n}\n.ant-modal-confirm .ant-modal-header {\n display: none;\n}\n.ant-modal-confirm .ant-modal-body {\n padding: 32px 32px 24px;\n}\n.ant-modal-confirm-body-wrapper::before {\n display: table;\n content: '';\n}\n.ant-modal-confirm-body-wrapper::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-modal-confirm-body-wrapper::before {\n display: table;\n content: '';\n}\n.ant-modal-confirm-body-wrapper::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-modal-confirm-body .ant-modal-confirm-title {\n display: block;\n overflow: hidden;\n color: rgba(0, 0, 0, 0.85);\n font-weight: 500;\n font-size: 16px;\n line-height: 1.4;\n}\n.ant-modal-confirm-body .ant-modal-confirm-content {\n margin-top: 8px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n}\n.ant-modal-confirm-body > .anticon {\n float: left;\n margin-right: 16px;\n font-size: 22px;\n}\n.ant-modal-confirm-body > .anticon + .ant-modal-confirm-title + .ant-modal-confirm-content {\n margin-left: 38px;\n}\n.ant-modal-confirm .ant-modal-confirm-btns {\n margin-top: 24px;\n text-align: right;\n}\n.ant-modal-confirm .ant-modal-confirm-btns .ant-btn + .ant-btn {\n margin-bottom: 0;\n margin-left: 8px;\n}\n.ant-modal-confirm-error .ant-modal-confirm-body > .anticon {\n color: #ff4d4f;\n}\n.ant-modal-confirm-warning .ant-modal-confirm-body > .anticon,\n.ant-modal-confirm-confirm .ant-modal-confirm-body > .anticon {\n color: #faad14;\n}\n.ant-modal-confirm-info .ant-modal-confirm-body > .anticon {\n color: #5b5ce1;\n}\n.ant-modal-confirm-success .ant-modal-confirm-body > .anticon {\n color: #52c41a;\n}\n.ant-modal-wrap-rtl {\n direction: rtl;\n}\n.ant-modal-wrap-rtl .ant-modal-close {\n right: initial;\n left: 0;\n}\n.ant-modal-wrap-rtl .ant-modal-footer {\n text-align: left;\n}\n.ant-modal-wrap-rtl .ant-modal-footer .ant-btn + .ant-btn {\n margin-right: 8px;\n margin-left: 0;\n}\n.ant-modal-wrap-rtl .ant-modal-confirm-body {\n direction: rtl;\n}\n.ant-modal-wrap-rtl .ant-modal-confirm-body > .anticon {\n float: right;\n margin-right: 0;\n margin-left: 16px;\n}\n.ant-modal-wrap-rtl .ant-modal-confirm-body > .anticon + .ant-modal-confirm-title + .ant-modal-confirm-content {\n margin-right: 38px;\n margin-left: 0;\n}\n.ant-modal-wrap-rtl .ant-modal-confirm-btns {\n text-align: left;\n}\n.ant-modal-wrap-rtl .ant-modal-confirm-btns .ant-btn + .ant-btn {\n margin-right: 8px;\n margin-left: 0;\n}\n.ant-modal-wrap-rtl.ant-modal-centered .ant-modal {\n text-align: right;\n}\n.ant-notification {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: fixed;\n z-index: 1010;\n margin-right: 24px;\n}\n.ant-notification-close-icon {\n font-size: 14px;\n cursor: pointer;\n}\n.ant-notification-hook-holder {\n position: relative;\n}\n.ant-notification-notice {\n position: relative;\n width: 384px;\n max-width: calc(100vw - 24px * 2);\n margin-bottom: 16px;\n margin-left: auto;\n padding: 16px 24px;\n overflow: hidden;\n line-height: 1.5715;\n word-wrap: break-word;\n background: #fff;\n border-radius: 5px;\n box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05);\n}\n.ant-notification-top .ant-notification-notice,\n.ant-notification-bottom .ant-notification-notice {\n margin-right: auto;\n margin-left: auto;\n}\n.ant-notification-topLeft .ant-notification-notice,\n.ant-notification-bottomLeft .ant-notification-notice {\n margin-right: auto;\n margin-left: 0;\n}\n.ant-notification-notice-message {\n margin-bottom: 8px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 16px;\n line-height: 24px;\n}\n.ant-notification-notice-message-single-line-auto-margin {\n display: block;\n width: calc(384px - 24px * 2 - 24px - 48px - 100%);\n max-width: 4px;\n background-color: transparent;\n pointer-events: none;\n}\n.ant-notification-notice-message-single-line-auto-margin::before {\n display: block;\n content: '';\n}\n.ant-notification-notice-description {\n font-size: 14px;\n}\n.ant-notification-notice-closable .ant-notification-notice-message {\n padding-right: 24px;\n}\n.ant-notification-notice-with-icon .ant-notification-notice-message {\n margin-bottom: 4px;\n margin-left: 48px;\n font-size: 16px;\n}\n.ant-notification-notice-with-icon .ant-notification-notice-description {\n margin-left: 48px;\n font-size: 14px;\n}\n.ant-notification-notice-icon {\n position: absolute;\n margin-left: 4px;\n font-size: 24px;\n line-height: 24px;\n}\n.anticon.ant-notification-notice-icon-success {\n color: #52c41a;\n}\n.anticon.ant-notification-notice-icon-info {\n color: #5b5ce1;\n}\n.anticon.ant-notification-notice-icon-warning {\n color: #faad14;\n}\n.anticon.ant-notification-notice-icon-error {\n color: #ff4d4f;\n}\n.ant-notification-notice-close {\n position: absolute;\n top: 16px;\n right: 22px;\n color: rgba(0, 0, 0, 0.45);\n outline: none;\n}\n.ant-notification-notice-close:hover {\n color: rgba(0, 0, 0, 0.67);\n}\n.ant-notification-notice-btn {\n float: right;\n margin-top: 16px;\n}\n.ant-notification .notification-fade-effect {\n animation-duration: 0.24s;\n animation-timing-function: cubic-bezier(0.645, 0.045, 0.355, 1);\n animation-fill-mode: both;\n}\n.ant-notification-fade-enter,\n.ant-notification-fade-appear {\n animation-duration: 0.24s;\n animation-timing-function: cubic-bezier(0.645, 0.045, 0.355, 1);\n animation-fill-mode: both;\n opacity: 0;\n animation-play-state: paused;\n}\n.ant-notification-fade-leave {\n animation-duration: 0.24s;\n animation-timing-function: cubic-bezier(0.645, 0.045, 0.355, 1);\n animation-fill-mode: both;\n animation-duration: 0.2s;\n animation-play-state: paused;\n}\n.ant-notification-fade-enter.ant-notification-fade-enter-active,\n.ant-notification-fade-appear.ant-notification-fade-appear-active {\n animation-name: NotificationFadeIn;\n animation-play-state: running;\n}\n.ant-notification-fade-leave.ant-notification-fade-leave-active {\n animation-name: NotificationFadeOut;\n animation-play-state: running;\n}\n@keyframes NotificationFadeIn {\n 0% {\n left: 384px;\n opacity: 0;\n }\n 100% {\n left: 0;\n opacity: 1;\n }\n}\n@keyframes NotificationFadeOut {\n 0% {\n max-height: 150px;\n margin-bottom: 16px;\n opacity: 1;\n }\n 100% {\n max-height: 0;\n margin-bottom: 0;\n padding-top: 0;\n padding-bottom: 0;\n opacity: 0;\n }\n}\n.ant-notification-rtl {\n direction: rtl;\n}\n.ant-notification-rtl .ant-notification-notice-closable .ant-notification-notice-message {\n padding-right: 0;\n padding-left: 24px;\n}\n.ant-notification-rtl .ant-notification-notice-with-icon .ant-notification-notice-message {\n margin-right: 48px;\n margin-left: 0;\n}\n.ant-notification-rtl .ant-notification-notice-with-icon .ant-notification-notice-description {\n margin-right: 48px;\n margin-left: 0;\n}\n.ant-notification-rtl .ant-notification-notice-icon {\n margin-right: 4px;\n margin-left: 0;\n}\n.ant-notification-rtl .ant-notification-notice-close {\n right: auto;\n left: 22px;\n}\n.ant-notification-rtl .ant-notification-notice-btn {\n float: left;\n}\n.ant-notification-top,\n.ant-notification-bottom {\n margin-right: 0;\n margin-left: 0;\n}\n.ant-notification-top .ant-notification-fade-enter.ant-notification-fade-enter-active,\n.ant-notification-top .ant-notification-fade-appear.ant-notification-fade-appear-active {\n animation-name: NotificationTopFadeIn;\n}\n.ant-notification-bottom .ant-notification-fade-enter.ant-notification-fade-enter-active,\n.ant-notification-bottom .ant-notification-fade-appear.ant-notification-fade-appear-active {\n animation-name: NotificationBottomFadeIn;\n}\n.ant-notification-topLeft,\n.ant-notification-bottomLeft {\n margin-right: 0;\n margin-left: 24px;\n}\n.ant-notification-topLeft .ant-notification-fade-enter.ant-notification-fade-enter-active,\n.ant-notification-bottomLeft .ant-notification-fade-enter.ant-notification-fade-enter-active,\n.ant-notification-topLeft .ant-notification-fade-appear.ant-notification-fade-appear-active,\n.ant-notification-bottomLeft .ant-notification-fade-appear.ant-notification-fade-appear-active {\n animation-name: NotificationLeftFadeIn;\n}\n@keyframes NotificationTopFadeIn {\n 0% {\n margin-top: -100%;\n opacity: 0;\n }\n 100% {\n margin-top: 0;\n opacity: 1;\n }\n}\n@keyframes NotificationBottomFadeIn {\n 0% {\n margin-bottom: -100%;\n opacity: 0;\n }\n 100% {\n margin-bottom: 0;\n opacity: 1;\n }\n}\n@keyframes NotificationLeftFadeIn {\n 0% {\n right: 384px;\n opacity: 0;\n }\n 100% {\n right: 0;\n opacity: 1;\n }\n}\n.ant-page-header {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n padding: 16px 24px;\n background-color: #fff;\n}\n.ant-page-header-ghost {\n background-color: inherit;\n}\n.ant-page-header.has-breadcrumb {\n padding-top: 12px;\n}\n.ant-page-header.has-footer {\n padding-bottom: 0;\n}\n.ant-page-header-back {\n margin-right: 16px;\n font-size: 16px;\n line-height: 1;\n}\n.ant-page-header-back-button {\n color: #5b5ce1;\n outline: none;\n cursor: pointer;\n transition: color 0.3s;\n color: #000;\n}\n.ant-page-header-back-button:focus-visible,\n.ant-page-header-back-button:hover {\n color: #8588ed;\n}\n.ant-page-header-back-button:active {\n color: #4541ba;\n}\n.ant-page-header .ant-divider-vertical {\n height: 14px;\n margin: 0 12px;\n vertical-align: middle;\n}\n.ant-breadcrumb + .ant-page-header-heading {\n margin-top: 8px;\n}\n.ant-page-header-heading {\n display: flex;\n justify-content: space-between;\n}\n.ant-page-header-heading-left {\n display: flex;\n align-items: center;\n margin: 4px 0;\n overflow: hidden;\n}\n.ant-page-header-heading-title {\n margin-right: 12px;\n margin-bottom: 0;\n color: rgba(0, 0, 0, 0.85);\n font-weight: 600;\n font-size: 20px;\n line-height: 32px;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.ant-page-header-heading .ant-avatar {\n margin-right: 12px;\n}\n.ant-page-header-heading-sub-title {\n margin-right: 12px;\n color: rgba(0, 0, 0, 0.45);\n font-size: 14px;\n line-height: 1.5715;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.ant-page-header-heading-extra {\n margin: 4px 0;\n white-space: nowrap;\n}\n.ant-page-header-heading-extra > * {\n white-space: unset;\n}\n.ant-page-header-content {\n padding-top: 12px;\n}\n.ant-page-header-footer {\n margin-top: 16px;\n}\n.ant-page-header-footer .ant-tabs > .ant-tabs-nav {\n margin: 0;\n}\n.ant-page-header-footer .ant-tabs > .ant-tabs-nav::before {\n border: none;\n}\n.ant-page-header-footer .ant-tabs .ant-tabs-tab {\n padding-top: 8px;\n padding-bottom: 8px;\n font-size: 16px;\n}\n.ant-page-header-compact .ant-page-header-heading {\n flex-wrap: wrap;\n}\n.ant-page-header-rtl {\n direction: rtl;\n}\n.ant-page-header-rtl .ant-page-header-back {\n float: right;\n margin-right: 0;\n margin-left: 16px;\n}\n.ant-page-header-rtl .ant-page-header-heading-title {\n margin-right: 0;\n margin-left: 12px;\n}\n.ant-page-header-rtl .ant-page-header-heading .ant-avatar {\n margin-right: 0;\n margin-left: 12px;\n}\n.ant-page-header-rtl .ant-page-header-heading-sub-title {\n float: right;\n margin-right: 0;\n margin-left: 12px;\n}\n.ant-page-header-rtl .ant-page-header-heading-tags {\n float: right;\n}\n.ant-page-header-rtl .ant-page-header-heading-extra {\n float: left;\n}\n.ant-page-header-rtl .ant-page-header-heading-extra > * {\n margin-right: 12px;\n margin-left: 0;\n}\n.ant-page-header-rtl .ant-page-header-heading-extra > *:first-child {\n margin-right: 0;\n}\n.ant-page-header-rtl .ant-page-header-footer .ant-tabs-bar .ant-tabs-nav {\n float: right;\n}\n.ant-pagination {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n}\n.ant-pagination ul,\n.ant-pagination ol {\n margin: 0;\n padding: 0;\n list-style: none;\n}\n.ant-pagination::after {\n display: block;\n clear: both;\n height: 0;\n overflow: hidden;\n visibility: hidden;\n content: ' ';\n}\n.ant-pagination-total-text {\n display: inline-block;\n height: 32px;\n margin-right: 8px;\n line-height: 30px;\n vertical-align: middle;\n}\n.ant-pagination-item {\n display: inline-block;\n min-width: 32px;\n height: 32px;\n margin-right: 8px;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';\n line-height: 30px;\n text-align: center;\n vertical-align: middle;\n list-style: none;\n background-color: #fff;\n border: 1px solid #d9d9d9;\n border-radius: 5px;\n outline: 0;\n cursor: pointer;\n user-select: none;\n}\n.ant-pagination-item a {\n display: block;\n padding: 0 6px;\n color: rgba(0, 0, 0, 0.85);\n transition: none;\n}\n.ant-pagination-item a:hover {\n text-decoration: none;\n}\n.ant-pagination-item:hover {\n border-color: #5b5ce1;\n transition: all 0.3s;\n}\n.ant-pagination-item:hover a {\n color: #5b5ce1;\n}\n.ant-pagination-item:focus-visible {\n border-color: #5b5ce1;\n transition: all 0.3s;\n}\n.ant-pagination-item:focus-visible a {\n color: #5b5ce1;\n}\n.ant-pagination-item-active {\n font-weight: 500;\n background: #fff;\n border-color: #5b5ce1;\n}\n.ant-pagination-item-active a {\n color: #5b5ce1;\n}\n.ant-pagination-item-active:hover {\n border-color: #8588ed;\n}\n.ant-pagination-item-active:focus-visible {\n border-color: #8588ed;\n}\n.ant-pagination-item-active:hover a {\n color: #8588ed;\n}\n.ant-pagination-item-active:focus-visible a {\n color: #8588ed;\n}\n.ant-pagination-jump-prev,\n.ant-pagination-jump-next {\n outline: 0;\n}\n.ant-pagination-jump-prev .ant-pagination-item-container,\n.ant-pagination-jump-next .ant-pagination-item-container {\n position: relative;\n}\n.ant-pagination-jump-prev .ant-pagination-item-container .ant-pagination-item-link-icon,\n.ant-pagination-jump-next .ant-pagination-item-container .ant-pagination-item-link-icon {\n color: #5b5ce1;\n font-size: 12px;\n letter-spacing: -1px;\n opacity: 0;\n transition: all 0.2s;\n}\n.ant-pagination-jump-prev .ant-pagination-item-container .ant-pagination-item-link-icon-svg,\n.ant-pagination-jump-next .ant-pagination-item-container .ant-pagination-item-link-icon-svg {\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n margin: auto;\n}\n.ant-pagination-jump-prev .ant-pagination-item-container .ant-pagination-item-ellipsis,\n.ant-pagination-jump-next .ant-pagination-item-container .ant-pagination-item-ellipsis {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n display: block;\n margin: auto;\n color: rgba(0, 0, 0, 0.25);\n font-family: Arial, Helvetica, sans-serif;\n letter-spacing: 2px;\n text-align: center;\n text-indent: 0.13em;\n opacity: 1;\n transition: all 0.2s;\n}\n.ant-pagination-jump-prev:hover .ant-pagination-item-link-icon,\n.ant-pagination-jump-next:hover .ant-pagination-item-link-icon {\n opacity: 1;\n}\n.ant-pagination-jump-prev:hover .ant-pagination-item-ellipsis,\n.ant-pagination-jump-next:hover .ant-pagination-item-ellipsis {\n opacity: 0;\n}\n.ant-pagination-jump-prev:focus-visible .ant-pagination-item-link-icon,\n.ant-pagination-jump-next:focus-visible .ant-pagination-item-link-icon {\n opacity: 1;\n}\n.ant-pagination-jump-prev:focus-visible .ant-pagination-item-ellipsis,\n.ant-pagination-jump-next:focus-visible .ant-pagination-item-ellipsis {\n opacity: 0;\n}\n.ant-pagination-prev,\n.ant-pagination-jump-prev,\n.ant-pagination-jump-next {\n margin-right: 8px;\n}\n.ant-pagination-prev,\n.ant-pagination-next,\n.ant-pagination-jump-prev,\n.ant-pagination-jump-next {\n display: inline-block;\n min-width: 32px;\n height: 32px;\n color: rgba(0, 0, 0, 0.85);\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';\n line-height: 32px;\n text-align: center;\n vertical-align: middle;\n list-style: none;\n border-radius: 5px;\n cursor: pointer;\n transition: all 0.3s;\n}\n.ant-pagination-prev,\n.ant-pagination-next {\n font-family: Arial, Helvetica, sans-serif;\n outline: 0;\n}\n.ant-pagination-prev button,\n.ant-pagination-next button {\n color: rgba(0, 0, 0, 0.85);\n cursor: pointer;\n user-select: none;\n}\n.ant-pagination-prev:hover button,\n.ant-pagination-next:hover button {\n border-color: #8588ed;\n}\n.ant-pagination-prev .ant-pagination-item-link,\n.ant-pagination-next .ant-pagination-item-link {\n display: block;\n width: 100%;\n height: 100%;\n padding: 0;\n font-size: 12px;\n text-align: center;\n background-color: #fff;\n border: 1px solid #d9d9d9;\n border-radius: 5px;\n outline: none;\n transition: all 0.3s;\n}\n.ant-pagination-prev:focus-visible .ant-pagination-item-link,\n.ant-pagination-next:focus-visible .ant-pagination-item-link {\n color: #5b5ce1;\n border-color: #5b5ce1;\n}\n.ant-pagination-prev:hover .ant-pagination-item-link,\n.ant-pagination-next:hover .ant-pagination-item-link {\n color: #5b5ce1;\n border-color: #5b5ce1;\n}\n.ant-pagination-disabled,\n.ant-pagination-disabled:hover {\n cursor: not-allowed;\n}\n.ant-pagination-disabled .ant-pagination-item-link,\n.ant-pagination-disabled:hover .ant-pagination-item-link {\n color: rgba(0, 0, 0, 0.25);\n border-color: #d9d9d9;\n cursor: not-allowed;\n}\n.ant-pagination-disabled:focus-visible {\n cursor: not-allowed;\n}\n.ant-pagination-disabled:focus-visible .ant-pagination-item-link {\n color: rgba(0, 0, 0, 0.25);\n border-color: #d9d9d9;\n cursor: not-allowed;\n}\n.ant-pagination-slash {\n margin: 0 10px 0 5px;\n}\n.ant-pagination-options {\n display: inline-block;\n margin-left: 16px;\n vertical-align: middle;\n}\n@media all and (-ms-high-contrast: none) {\n .ant-pagination-options *::-ms-backdrop,\n .ant-pagination-options {\n vertical-align: top;\n }\n}\n.ant-pagination-options-size-changer.ant-select {\n display: inline-block;\n width: auto;\n}\n.ant-pagination-options-quick-jumper {\n display: inline-block;\n height: 32px;\n margin-left: 8px;\n line-height: 32px;\n vertical-align: top;\n}\n.ant-pagination-options-quick-jumper input {\n position: relative;\n display: inline-block;\n width: 100%;\n min-width: 0;\n padding: 4px 11px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n line-height: 1.5715;\n background-color: #fff;\n background-image: none;\n border: 1px solid #d9d9d9;\n border-radius: 5px;\n transition: all 0.3s;\n width: 50px;\n height: 32px;\n margin: 0 8px;\n}\n.ant-pagination-options-quick-jumper input::placeholder {\n color: #bfbfbf;\n user-select: none;\n}\n.ant-pagination-options-quick-jumper input:placeholder-shown {\n text-overflow: ellipsis;\n}\n.ant-pagination-options-quick-jumper input:hover {\n border-color: #8588ed;\n border-right-width: 1px;\n}\n.ant-input-rtl .ant-pagination-options-quick-jumper input:hover {\n border-right-width: 0;\n border-left-width: 1px !important;\n}\n.ant-pagination-options-quick-jumper input:focus,\n.ant-pagination-options-quick-jumper input-focused {\n border-color: #8588ed;\n box-shadow: 0 0 0 2px rgba(91, 92, 225, 0.2);\n border-right-width: 1px;\n outline: 0;\n}\n.ant-input-rtl .ant-pagination-options-quick-jumper input:focus,\n.ant-input-rtl .ant-pagination-options-quick-jumper input-focused {\n border-right-width: 0;\n border-left-width: 1px !important;\n}\n.ant-pagination-options-quick-jumper input-disabled {\n color: rgba(0, 0, 0, 0.25);\n background-color: #f5f5f5;\n border-color: #d9d9d9;\n box-shadow: none;\n cursor: not-allowed;\n opacity: 1;\n}\n.ant-pagination-options-quick-jumper input-disabled:hover {\n border-color: #d9d9d9;\n border-right-width: 1px;\n}\n.ant-pagination-options-quick-jumper input[disabled] {\n color: rgba(0, 0, 0, 0.25);\n background-color: #f5f5f5;\n border-color: #d9d9d9;\n box-shadow: none;\n cursor: not-allowed;\n opacity: 1;\n}\n.ant-pagination-options-quick-jumper input[disabled]:hover {\n border-color: #d9d9d9;\n border-right-width: 1px;\n}\n.ant-pagination-options-quick-jumper input-borderless,\n.ant-pagination-options-quick-jumper input-borderless:hover,\n.ant-pagination-options-quick-jumper input-borderless:focus,\n.ant-pagination-options-quick-jumper input-borderless-focused,\n.ant-pagination-options-quick-jumper input-borderless-disabled,\n.ant-pagination-options-quick-jumper input-borderless[disabled] {\n background-color: transparent;\n border: none;\n box-shadow: none;\n}\ntextarea.ant-pagination-options-quick-jumper input {\n max-width: 100%;\n height: auto;\n min-height: 32px;\n line-height: 1.5715;\n vertical-align: bottom;\n transition: all 0.3s, height 0s;\n}\n.ant-pagination-options-quick-jumper input-lg {\n padding: 6.5px 11px;\n font-size: 16px;\n}\n.ant-pagination-options-quick-jumper input-sm {\n padding: 0px 7px;\n}\n.ant-pagination-options-quick-jumper input-rtl {\n direction: rtl;\n}\n.ant-pagination-simple .ant-pagination-prev,\n.ant-pagination-simple .ant-pagination-next {\n height: 24px;\n line-height: 24px;\n vertical-align: top;\n}\n.ant-pagination-simple .ant-pagination-prev .ant-pagination-item-link,\n.ant-pagination-simple .ant-pagination-next .ant-pagination-item-link {\n height: 24px;\n background-color: transparent;\n border: 0;\n}\n.ant-pagination-simple .ant-pagination-prev .ant-pagination-item-link::after,\n.ant-pagination-simple .ant-pagination-next .ant-pagination-item-link::after {\n height: 24px;\n line-height: 24px;\n}\n.ant-pagination-simple .ant-pagination-simple-pager {\n display: inline-block;\n height: 24px;\n margin-right: 8px;\n}\n.ant-pagination-simple .ant-pagination-simple-pager input {\n box-sizing: border-box;\n height: 100%;\n margin-right: 8px;\n padding: 0 6px;\n text-align: center;\n background-color: #fff;\n border: 1px solid #d9d9d9;\n border-radius: 5px;\n outline: none;\n transition: border-color 0.3s;\n}\n.ant-pagination-simple .ant-pagination-simple-pager input:hover {\n border-color: #5b5ce1;\n}\n.ant-pagination-simple .ant-pagination-simple-pager input:focus {\n border-color: #8588ed;\n box-shadow: 0 0 0 2px rgba(91, 92, 225, 0.2);\n}\n.ant-pagination-simple .ant-pagination-simple-pager input[disabled] {\n color: rgba(0, 0, 0, 0.25);\n background: #f5f5f5;\n border-color: #d9d9d9;\n cursor: not-allowed;\n}\n.ant-pagination.ant-pagination-mini .ant-pagination-total-text,\n.ant-pagination.ant-pagination-mini .ant-pagination-simple-pager {\n height: 24px;\n line-height: 24px;\n}\n.ant-pagination.ant-pagination-mini .ant-pagination-item {\n min-width: 24px;\n height: 24px;\n margin: 0;\n line-height: 22px;\n}\n.ant-pagination.ant-pagination-mini .ant-pagination-item:not(.ant-pagination-item-active) {\n background: transparent;\n border-color: transparent;\n}\n.ant-pagination.ant-pagination-mini .ant-pagination-prev,\n.ant-pagination.ant-pagination-mini .ant-pagination-next {\n min-width: 24px;\n height: 24px;\n margin: 0;\n line-height: 24px;\n}\n.ant-pagination.ant-pagination-mini .ant-pagination-prev .ant-pagination-item-link,\n.ant-pagination.ant-pagination-mini .ant-pagination-next .ant-pagination-item-link {\n background: transparent;\n border-color: transparent;\n}\n.ant-pagination.ant-pagination-mini .ant-pagination-prev .ant-pagination-item-link::after,\n.ant-pagination.ant-pagination-mini .ant-pagination-next .ant-pagination-item-link::after {\n height: 24px;\n line-height: 24px;\n}\n.ant-pagination.ant-pagination-mini .ant-pagination-jump-prev,\n.ant-pagination.ant-pagination-mini .ant-pagination-jump-next {\n height: 24px;\n margin-right: 0;\n line-height: 24px;\n}\n.ant-pagination.ant-pagination-mini .ant-pagination-options {\n margin-left: 2px;\n}\n.ant-pagination.ant-pagination-mini .ant-pagination-options-size-changer {\n top: 0px;\n}\n.ant-pagination.ant-pagination-mini .ant-pagination-options-quick-jumper {\n height: 24px;\n line-height: 24px;\n}\n.ant-pagination.ant-pagination-mini .ant-pagination-options-quick-jumper input {\n padding: 0px 7px;\n width: 44px;\n height: 24px;\n}\n.ant-pagination.ant-pagination-disabled {\n cursor: not-allowed;\n}\n.ant-pagination.ant-pagination-disabled .ant-pagination-item {\n background: #f5f5f5;\n border-color: #d9d9d9;\n cursor: not-allowed;\n}\n.ant-pagination.ant-pagination-disabled .ant-pagination-item a {\n color: rgba(0, 0, 0, 0.25);\n background: transparent;\n border: none;\n cursor: not-allowed;\n}\n.ant-pagination.ant-pagination-disabled .ant-pagination-item-active {\n background: #e6e6e6;\n}\n.ant-pagination.ant-pagination-disabled .ant-pagination-item-active a {\n color: rgba(0, 0, 0, 0.25);\n}\n.ant-pagination.ant-pagination-disabled .ant-pagination-item-link {\n color: rgba(0, 0, 0, 0.25);\n background: #f5f5f5;\n border-color: #d9d9d9;\n cursor: not-allowed;\n}\n.ant-pagination-simple.ant-pagination.ant-pagination-disabled .ant-pagination-item-link {\n background: transparent;\n}\n.ant-pagination.ant-pagination-disabled .ant-pagination-item-link-icon {\n opacity: 0;\n}\n.ant-pagination.ant-pagination-disabled .ant-pagination-item-ellipsis {\n opacity: 1;\n}\n.ant-pagination.ant-pagination-disabled .ant-pagination-simple-pager {\n color: rgba(0, 0, 0, 0.25);\n}\n@media only screen and (max-width: 992px) {\n .ant-pagination-item-after-jump-prev,\n .ant-pagination-item-before-jump-next {\n display: none;\n }\n}\n@media only screen and (max-width: 576px) {\n .ant-pagination-options {\n display: none;\n }\n}\n.ant-pagination-rtl .ant-pagination-total-text {\n margin-right: 0;\n margin-left: 8px;\n}\n.ant-pagination-rtl .ant-pagination-item,\n.ant-pagination-rtl .ant-pagination-prev,\n.ant-pagination-rtl .ant-pagination-jump-prev,\n.ant-pagination-rtl .ant-pagination-jump-next {\n margin-right: 0;\n margin-left: 8px;\n}\n.ant-pagination-rtl .ant-pagination-slash {\n margin: 0 5px 0 10px;\n}\n.ant-pagination-rtl .ant-pagination-options {\n margin-right: 16px;\n margin-left: 0;\n}\n.ant-pagination-rtl .ant-pagination-options .ant-pagination-options-size-changer.ant-select {\n margin-right: 0;\n margin-left: 8px;\n}\n.ant-pagination-rtl .ant-pagination-options .ant-pagination-options-quick-jumper {\n margin-left: 0;\n}\n.ant-pagination-rtl.ant-pagination-simple .ant-pagination-simple-pager {\n margin-right: 0;\n margin-left: 8px;\n}\n.ant-pagination-rtl.ant-pagination-simple .ant-pagination-simple-pager input {\n margin-right: 0;\n margin-left: 8px;\n}\n.ant-pagination-rtl.ant-pagination.mini .ant-pagination-options {\n margin-right: 2px;\n margin-left: 0;\n}\n.ant-popconfirm {\n z-index: 1060;\n}\n.ant-popover {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1030;\n font-weight: normal;\n white-space: normal;\n text-align: left;\n cursor: auto;\n user-select: text;\n}\n.ant-popover-content {\n position: relative;\n}\n.ant-popover::after {\n position: absolute;\n background: rgba(255, 255, 255, 0.01);\n content: '';\n}\n.ant-popover-hidden {\n display: none;\n}\n.ant-popover-placement-top,\n.ant-popover-placement-topLeft,\n.ant-popover-placement-topRight {\n padding-bottom: 15.3137085px;\n}\n.ant-popover-placement-right,\n.ant-popover-placement-rightTop,\n.ant-popover-placement-rightBottom {\n padding-left: 15.3137085px;\n}\n.ant-popover-placement-bottom,\n.ant-popover-placement-bottomLeft,\n.ant-popover-placement-bottomRight {\n padding-top: 15.3137085px;\n}\n.ant-popover-placement-left,\n.ant-popover-placement-leftTop,\n.ant-popover-placement-leftBottom {\n padding-right: 15.3137085px;\n}\n.ant-popover-inner {\n background-color: #fff;\n background-clip: padding-box;\n border-radius: 5px;\n box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05);\n}\n@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {\n .ant-popover {\n /* IE10+ */\n }\n .ant-popover-inner {\n box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05);\n }\n}\n.ant-popover-title {\n min-width: 177px;\n min-height: 32px;\n margin: 0;\n padding: 5px 16px 4px;\n color: rgba(0, 0, 0, 0.85);\n font-weight: 500;\n border-bottom: 1px solid #f0f0f0;\n}\n.ant-popover-inner-content {\n padding: 12px 16px;\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-popover-message {\n display: flex;\n align-items: center;\n padding: 4px 0 12px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n}\n.ant-popover-message .anticon {\n color: #faad14;\n font-size: 14px;\n}\n.ant-popover-message-icon {\n display: inline-block;\n margin-right: 8px;\n}\n.ant-popover-buttons {\n margin-bottom: 4px;\n text-align: right;\n}\n.ant-popover-buttons button:not(:first-child) {\n margin-left: 8px;\n}\n.ant-popover-arrow {\n position: absolute;\n display: block;\n width: 22px;\n height: 22px;\n overflow: hidden;\n background: transparent;\n pointer-events: none;\n}\n.ant-popover-arrow-content {\n --antd-arrow-background-color: #fff;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n display: block;\n width: 11.3137085px;\n height: 11.3137085px;\n margin: auto;\n content: '';\n pointer-events: auto;\n border-radius: 0 0 2px;\n pointer-events: none;\n}\n.ant-popover-arrow-content::before {\n position: absolute;\n top: -11.3137085px;\n left: -11.3137085px;\n width: 33.9411255px;\n height: 33.9411255px;\n background: var(--antd-arrow-background-color);\n background-repeat: no-repeat;\n background-position: -10px -10px;\n content: '';\n clip-path: inset(33% 33%);\n clip-path: path('M 9.849242404917499 24.091883092036785 A 5 5 0 0 1 13.384776310850237 22.627416997969522 L 20.627416997969522 22.627416997969522 A 2 2 0 0 0 22.627416997969522 20.627416997969522 L 22.627416997969522 13.384776310850237 A 5 5 0 0 1 24.091883092036785 9.849242404917499 L 23.091883092036785 9.849242404917499 L 9.849242404917499 23.091883092036785 Z');\n}\n.ant-popover-placement-top .ant-popover-arrow,\n.ant-popover-placement-topLeft .ant-popover-arrow,\n.ant-popover-placement-topRight .ant-popover-arrow {\n bottom: 0;\n transform: translateY(100%);\n}\n.ant-popover-placement-top .ant-popover-arrow-content,\n.ant-popover-placement-topLeft .ant-popover-arrow-content,\n.ant-popover-placement-topRight .ant-popover-arrow-content {\n box-shadow: 3px 3px 7px rgba(0, 0, 0, 0.07);\n transform: translateY(-11px) rotate(45deg);\n}\n.ant-popover-placement-top .ant-popover-arrow {\n left: 50%;\n transform: translateY(100%) translateX(-50%);\n}\n.ant-popover-placement-topLeft .ant-popover-arrow {\n left: 16px;\n}\n.ant-popover-placement-topRight .ant-popover-arrow {\n right: 16px;\n}\n.ant-popover-placement-right .ant-popover-arrow,\n.ant-popover-placement-rightTop .ant-popover-arrow,\n.ant-popover-placement-rightBottom .ant-popover-arrow {\n left: 0;\n transform: translateX(-100%);\n}\n.ant-popover-placement-right .ant-popover-arrow-content,\n.ant-popover-placement-rightTop .ant-popover-arrow-content,\n.ant-popover-placement-rightBottom .ant-popover-arrow-content {\n box-shadow: 3px 3px 7px rgba(0, 0, 0, 0.07);\n transform: translateX(11px) rotate(135deg);\n}\n.ant-popover-placement-right .ant-popover-arrow {\n top: 50%;\n transform: translateX(-100%) translateY(-50%);\n}\n.ant-popover-placement-rightTop .ant-popover-arrow {\n top: 12px;\n}\n.ant-popover-placement-rightBottom .ant-popover-arrow {\n bottom: 12px;\n}\n.ant-popover-placement-bottom .ant-popover-arrow,\n.ant-popover-placement-bottomLeft .ant-popover-arrow,\n.ant-popover-placement-bottomRight .ant-popover-arrow {\n top: 0;\n transform: translateY(-100%);\n}\n.ant-popover-placement-bottom .ant-popover-arrow-content,\n.ant-popover-placement-bottomLeft .ant-popover-arrow-content,\n.ant-popover-placement-bottomRight .ant-popover-arrow-content {\n box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.06);\n transform: translateY(11px) rotate(-135deg);\n}\n.ant-popover-placement-bottom .ant-popover-arrow {\n left: 50%;\n transform: translateY(-100%) translateX(-50%);\n}\n.ant-popover-placement-bottomLeft .ant-popover-arrow {\n left: 16px;\n}\n.ant-popover-placement-bottomRight .ant-popover-arrow {\n right: 16px;\n}\n.ant-popover-placement-left .ant-popover-arrow,\n.ant-popover-placement-leftTop .ant-popover-arrow,\n.ant-popover-placement-leftBottom .ant-popover-arrow {\n right: 0;\n transform: translateX(100%);\n}\n.ant-popover-placement-left .ant-popover-arrow-content,\n.ant-popover-placement-leftTop .ant-popover-arrow-content,\n.ant-popover-placement-leftBottom .ant-popover-arrow-content {\n box-shadow: 3px 3px 7px rgba(0, 0, 0, 0.07);\n transform: translateX(-11px) rotate(-45deg);\n}\n.ant-popover-placement-left .ant-popover-arrow {\n top: 50%;\n transform: translateX(100%) translateY(-50%);\n}\n.ant-popover-placement-leftTop .ant-popover-arrow {\n top: 12px;\n}\n.ant-popover-placement-leftBottom .ant-popover-arrow {\n bottom: 12px;\n}\n.ant-popover-pink .ant-popover-inner {\n background-color: #eb2f96;\n}\n.ant-popover-pink .ant-popover-arrow-content {\n background-color: #eb2f96;\n}\n.ant-popover-magenta .ant-popover-inner {\n background-color: #eb2f96;\n}\n.ant-popover-magenta .ant-popover-arrow-content {\n background-color: #eb2f96;\n}\n.ant-popover-red .ant-popover-inner {\n background-color: #f5222d;\n}\n.ant-popover-red .ant-popover-arrow-content {\n background-color: #f5222d;\n}\n.ant-popover-volcano .ant-popover-inner {\n background-color: #fa541c;\n}\n.ant-popover-volcano .ant-popover-arrow-content {\n background-color: #fa541c;\n}\n.ant-popover-orange .ant-popover-inner {\n background-color: #fa8c16;\n}\n.ant-popover-orange .ant-popover-arrow-content {\n background-color: #fa8c16;\n}\n.ant-popover-yellow .ant-popover-inner {\n background-color: #fadb14;\n}\n.ant-popover-yellow .ant-popover-arrow-content {\n background-color: #fadb14;\n}\n.ant-popover-gold .ant-popover-inner {\n background-color: #faad14;\n}\n.ant-popover-gold .ant-popover-arrow-content {\n background-color: #faad14;\n}\n.ant-popover-cyan .ant-popover-inner {\n background-color: #13c2c2;\n}\n.ant-popover-cyan .ant-popover-arrow-content {\n background-color: #13c2c2;\n}\n.ant-popover-lime .ant-popover-inner {\n background-color: #a0d911;\n}\n.ant-popover-lime .ant-popover-arrow-content {\n background-color: #a0d911;\n}\n.ant-popover-green .ant-popover-inner {\n background-color: #52c41a;\n}\n.ant-popover-green .ant-popover-arrow-content {\n background-color: #52c41a;\n}\n.ant-popover-blue .ant-popover-inner {\n background-color: #1890ff;\n}\n.ant-popover-blue .ant-popover-arrow-content {\n background-color: #1890ff;\n}\n.ant-popover-geekblue .ant-popover-inner {\n background-color: #2f54eb;\n}\n.ant-popover-geekblue .ant-popover-arrow-content {\n background-color: #2f54eb;\n}\n.ant-popover-purple .ant-popover-inner {\n background-color: #722ed1;\n}\n.ant-popover-purple .ant-popover-arrow-content {\n background-color: #722ed1;\n}\n.ant-popover-rtl {\n direction: rtl;\n text-align: right;\n}\n.ant-popover-rtl .ant-popover-message-icon {\n margin-right: 0;\n margin-left: 8px;\n}\n.ant-popover-rtl .ant-popover-message-title {\n padding-left: 16px;\n}\n.ant-popover-rtl .ant-popover-buttons {\n text-align: left;\n}\n.ant-popover-rtl .ant-popover-buttons button {\n margin-right: 8px;\n margin-left: 0;\n}\n.ant-progress {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n display: inline-block;\n}\n.ant-progress-line {\n position: relative;\n width: 100%;\n font-size: 14px;\n}\n.ant-progress-steps {\n display: inline-block;\n}\n.ant-progress-steps-outer {\n display: flex;\n flex-direction: row;\n align-items: center;\n}\n.ant-progress-steps-item {\n flex-shrink: 0;\n min-width: 2px;\n margin-right: 2px;\n background: #f3f3f3;\n transition: all 0.3s;\n}\n.ant-progress-steps-item-active {\n background: #1890ff;\n}\n.ant-progress-small.ant-progress-line,\n.ant-progress-small.ant-progress-line .ant-progress-text .anticon {\n font-size: 12px;\n}\n.ant-progress-outer {\n display: inline-block;\n width: 100%;\n margin-right: 0;\n padding-right: 0;\n}\n.ant-progress-show-info .ant-progress-outer {\n margin-right: calc(-2em - 8px);\n padding-right: calc(2em + 8px);\n}\n.ant-progress-inner {\n position: relative;\n display: inline-block;\n width: 100%;\n overflow: hidden;\n vertical-align: middle;\n background-color: #f5f5f5;\n border-radius: 100px;\n}\n.ant-progress-circle-trail {\n stroke: #f5f5f5;\n}\n.ant-progress-circle-path {\n animation: ant-progress-appear 0.3s;\n}\n.ant-progress-inner:not(.ant-progress-circle-gradient) .ant-progress-circle-path {\n stroke: #1890ff;\n}\n.ant-progress-success-bg,\n.ant-progress-bg {\n position: relative;\n background-color: #1890ff;\n border-radius: 100px;\n transition: all 0.4s cubic-bezier(0.08, 0.82, 0.17, 1) 0s;\n}\n.ant-progress-success-bg {\n position: absolute;\n top: 0;\n left: 0;\n background-color: #52c41a;\n}\n.ant-progress-text {\n display: inline-block;\n width: 2em;\n margin-left: 8px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 1em;\n line-height: 1;\n white-space: nowrap;\n text-align: left;\n vertical-align: middle;\n word-break: normal;\n}\n.ant-progress-text .anticon {\n font-size: 14px;\n}\n.ant-progress-status-active .ant-progress-bg::before {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: #fff;\n border-radius: 10px;\n opacity: 0;\n animation: ant-progress-active 2.4s cubic-bezier(0.23, 1, 0.32, 1) infinite;\n content: '';\n}\n.ant-progress-status-exception .ant-progress-bg {\n background-color: #ff4d4f;\n}\n.ant-progress-status-exception .ant-progress-text {\n color: #ff4d4f;\n}\n.ant-progress-status-exception .ant-progress-inner:not(.ant-progress-circle-gradient) .ant-progress-circle-path {\n stroke: #ff4d4f;\n}\n.ant-progress-status-success .ant-progress-bg {\n background-color: #52c41a;\n}\n.ant-progress-status-success .ant-progress-text {\n color: #52c41a;\n}\n.ant-progress-status-success .ant-progress-inner:not(.ant-progress-circle-gradient) .ant-progress-circle-path {\n stroke: #52c41a;\n}\n.ant-progress-circle .ant-progress-inner {\n position: relative;\n line-height: 1;\n background-color: transparent;\n}\n.ant-progress-circle .ant-progress-text {\n position: absolute;\n top: 50%;\n left: 50%;\n width: 100%;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 1em;\n line-height: 1;\n white-space: normal;\n text-align: center;\n transform: translate(-50%, -50%);\n}\n.ant-progress-circle .ant-progress-text .anticon {\n font-size: 1.16666667em;\n}\n.ant-progress-circle.ant-progress-status-exception .ant-progress-text {\n color: #ff4d4f;\n}\n.ant-progress-circle.ant-progress-status-success .ant-progress-text {\n color: #52c41a;\n}\n@keyframes ant-progress-active {\n 0% {\n transform: translateX(-100%) scaleX(0);\n opacity: 0.1;\n }\n 20% {\n transform: translateX(-100%) scaleX(0);\n opacity: 0.5;\n }\n 100% {\n transform: translateX(0) scaleX(1);\n opacity: 0;\n }\n}\n.ant-progress-rtl {\n direction: rtl;\n}\n.ant-progress-rtl.ant-progress-show-info .ant-progress-outer {\n margin-right: 0;\n margin-left: calc(-2em - 8px);\n padding-right: 0;\n padding-left: calc(2em + 8px);\n}\n.ant-progress-rtl .ant-progress-success-bg {\n right: 0;\n left: auto;\n}\n.ant-progress-rtl.ant-progress-line .ant-progress-text,\n.ant-progress-rtl.ant-progress-steps .ant-progress-text {\n margin-right: 8px;\n margin-left: 0;\n text-align: right;\n}\n.ant-radio-group {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n display: inline-block;\n font-size: 0;\n}\n.ant-radio-group .ant-badge-count {\n z-index: 1;\n}\n.ant-radio-group > .ant-badge:not(:first-child) > .ant-radio-button-wrapper {\n border-left: none;\n}\n.ant-radio-wrapper {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n display: inline-flex;\n align-items: baseline;\n margin-right: 8px;\n cursor: pointer;\n}\n.ant-radio-wrapper-disabled {\n cursor: not-allowed;\n}\n.ant-radio-wrapper::after {\n display: inline-block;\n width: 0;\n overflow: hidden;\n content: '\\a0';\n}\n.ant-radio-wrapper.ant-radio-wrapper-in-form-item input[type='radio'] {\n width: 14px;\n height: 14px;\n}\n.ant-radio {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n top: 0.2em;\n display: inline-block;\n outline: none;\n cursor: pointer;\n}\n.ant-radio-wrapper:hover .ant-radio,\n.ant-radio:hover .ant-radio-inner,\n.ant-radio-input:focus + .ant-radio-inner {\n border-color: #5b5ce1;\n}\n.ant-radio-input:focus + .ant-radio-inner {\n box-shadow: 0 0 0 3px rgba(91, 92, 225, 0.12);\n}\n.ant-radio-checked::after {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 1px solid #5b5ce1;\n border-radius: 50%;\n visibility: hidden;\n animation: antRadioEffect 0.36s ease-in-out;\n animation-fill-mode: both;\n content: '';\n}\n.ant-radio:hover::after,\n.ant-radio-wrapper:hover .ant-radio::after {\n visibility: visible;\n}\n.ant-radio-inner {\n position: relative;\n top: 0;\n left: 0;\n display: block;\n width: 16px;\n height: 16px;\n background-color: #fff;\n border-color: #d9d9d9;\n border-style: solid;\n border-width: 1px;\n border-radius: 50%;\n transition: all 0.3s;\n}\n.ant-radio-inner::after {\n position: absolute;\n top: 50%;\n left: 50%;\n display: block;\n width: 16px;\n height: 16px;\n margin-top: -8px;\n margin-left: -8px;\n background-color: #5b5ce1;\n border-top: 0;\n border-left: 0;\n border-radius: 16px;\n transform: scale(0);\n opacity: 0;\n transition: all 0.3s cubic-bezier(0.78, 0.14, 0.15, 0.86);\n content: ' ';\n}\n.ant-radio-input {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n cursor: pointer;\n opacity: 0;\n}\n.ant-radio.ant-radio-disabled .ant-radio-inner {\n border-color: #d9d9d9;\n}\n.ant-radio-checked .ant-radio-inner {\n border-color: #5b5ce1;\n}\n.ant-radio-checked .ant-radio-inner::after {\n transform: scale(0.5);\n opacity: 1;\n transition: all 0.3s cubic-bezier(0.78, 0.14, 0.15, 0.86);\n}\n.ant-radio-disabled {\n cursor: not-allowed;\n}\n.ant-radio-disabled .ant-radio-inner {\n background-color: #f5f5f5;\n cursor: not-allowed;\n}\n.ant-radio-disabled .ant-radio-inner::after {\n background-color: rgba(0, 0, 0, 0.2);\n}\n.ant-radio-disabled .ant-radio-input {\n cursor: not-allowed;\n}\n.ant-radio-disabled + span {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n}\nspan.ant-radio + * {\n padding-right: 8px;\n padding-left: 8px;\n}\n.ant-radio-button-wrapper {\n position: relative;\n display: inline-block;\n height: 32px;\n margin: 0;\n padding: 0 15px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n line-height: 30px;\n background: #fff;\n border: 1px solid #d9d9d9;\n border-top-width: 1.02px;\n border-left-width: 0;\n cursor: pointer;\n transition: color 0.3s, background 0.3s, border-color 0.3s, box-shadow 0.3s;\n}\n.ant-radio-button-wrapper a {\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-radio-button-wrapper > .ant-radio-button {\n position: absolute;\n top: 0;\n left: 0;\n z-index: -1;\n width: 100%;\n height: 100%;\n}\n.ant-radio-group-large .ant-radio-button-wrapper {\n height: 40px;\n font-size: 16px;\n line-height: 38px;\n}\n.ant-radio-group-small .ant-radio-button-wrapper {\n height: 24px;\n padding: 0 7px;\n line-height: 22px;\n}\n.ant-radio-button-wrapper:not(:first-child)::before {\n position: absolute;\n top: -1px;\n left: -1px;\n display: block;\n box-sizing: content-box;\n width: 1px;\n height: 100%;\n padding: 1px 0;\n background-color: #d9d9d9;\n transition: background-color 0.3s;\n content: '';\n}\n.ant-radio-button-wrapper:first-child {\n border-left: 1px solid #d9d9d9;\n border-radius: 5px 0 0 5px;\n}\n.ant-radio-button-wrapper:last-child {\n border-radius: 0 5px 5px 0;\n}\n.ant-radio-button-wrapper:first-child:last-child {\n border-radius: 5px;\n}\n.ant-radio-button-wrapper:hover {\n position: relative;\n color: #5b5ce1;\n}\n.ant-radio-button-wrapper:focus-within {\n box-shadow: 0 0 0 3px rgba(91, 92, 225, 0.12);\n}\n.ant-radio-button-wrapper .ant-radio-inner,\n.ant-radio-button-wrapper input[type='checkbox'],\n.ant-radio-button-wrapper input[type='radio'] {\n width: 0;\n height: 0;\n opacity: 0;\n pointer-events: none;\n}\n.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled) {\n z-index: 1;\n color: #5b5ce1;\n background: #fff;\n border-color: #5b5ce1;\n}\n.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled)::before {\n background-color: #5b5ce1;\n}\n.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):first-child {\n border-color: #5b5ce1;\n}\n.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):hover {\n color: #8588ed;\n border-color: #8588ed;\n}\n.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):hover::before {\n background-color: #8588ed;\n}\n.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):active {\n color: #4541ba;\n border-color: #4541ba;\n}\n.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):active::before {\n background-color: #4541ba;\n}\n.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):focus-within {\n box-shadow: 0 0 0 3px rgba(91, 92, 225, 0.12);\n}\n.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled) {\n color: #fff;\n background: #5b5ce1;\n border-color: #5b5ce1;\n}\n.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):hover {\n color: #fff;\n background: #8588ed;\n border-color: #8588ed;\n}\n.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):active {\n color: #fff;\n background: #4541ba;\n border-color: #4541ba;\n}\n.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):focus-within {\n box-shadow: 0 0 0 3px rgba(91, 92, 225, 0.12);\n}\n.ant-radio-button-wrapper-disabled {\n color: rgba(0, 0, 0, 0.25);\n background-color: #f5f5f5;\n border-color: #d9d9d9;\n cursor: not-allowed;\n}\n.ant-radio-button-wrapper-disabled:first-child,\n.ant-radio-button-wrapper-disabled:hover {\n color: rgba(0, 0, 0, 0.25);\n background-color: #f5f5f5;\n border-color: #d9d9d9;\n}\n.ant-radio-button-wrapper-disabled:first-child {\n border-left-color: #d9d9d9;\n}\n.ant-radio-button-wrapper-disabled.ant-radio-button-wrapper-checked {\n color: rgba(0, 0, 0, 0.25);\n background-color: #e6e6e6;\n border-color: #d9d9d9;\n box-shadow: none;\n}\n@keyframes antRadioEffect {\n 0% {\n transform: scale(1);\n opacity: 0.5;\n }\n 100% {\n transform: scale(1.6);\n opacity: 0;\n }\n}\n.ant-radio-group.ant-radio-group-rtl {\n direction: rtl;\n}\n.ant-radio-wrapper.ant-radio-wrapper-rtl {\n margin-right: 0;\n margin-left: 8px;\n direction: rtl;\n}\n.ant-radio-button-wrapper.ant-radio-button-wrapper-rtl {\n border-right-width: 0;\n border-left-width: 1px;\n}\n.ant-radio-button-wrapper.ant-radio-button-wrapper-rtl.ant-radio-button-wrapper:not(:first-child)::before {\n right: -1px;\n left: 0;\n}\n.ant-radio-button-wrapper.ant-radio-button-wrapper-rtl.ant-radio-button-wrapper:first-child {\n border-right: 1px solid #d9d9d9;\n border-radius: 0 5px 5px 0;\n}\n.ant-radio-button-wrapper-checked:not([class*=' ant-radio-button-wrapper-disabled']).ant-radio-button-wrapper:first-child {\n border-right-color: #8588ed;\n}\n.ant-radio-button-wrapper.ant-radio-button-wrapper-rtl.ant-radio-button-wrapper:last-child {\n border-radius: 5px 0 0 5px;\n}\n.ant-radio-button-wrapper.ant-radio-button-wrapper-rtl.ant-radio-button-wrapper-disabled:first-child {\n border-right-color: #d9d9d9;\n}\n.ant-rate {\n box-sizing: border-box;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n font-feature-settings: 'tnum';\n display: inline-block;\n margin: 0;\n padding: 0;\n color: #fadb14;\n font-size: 20px;\n line-height: unset;\n list-style: none;\n outline: none;\n}\n.ant-rate-disabled .ant-rate-star {\n cursor: default;\n}\n.ant-rate-disabled .ant-rate-star > div:hover {\n transform: scale(1);\n}\n.ant-rate-star {\n position: relative;\n display: inline-block;\n color: inherit;\n cursor: pointer;\n}\n.ant-rate-star:not(:last-child) {\n margin-right: 8px;\n}\n.ant-rate-star > div {\n transition: all 0.3s, outline 0s;\n}\n.ant-rate-star > div:hover {\n transform: scale(1.1);\n}\n.ant-rate-star > div:focus {\n outline: 0;\n}\n.ant-rate-star > div:focus-visible {\n outline: 1px dashed #fadb14;\n transform: scale(1.1);\n}\n.ant-rate-star-first,\n.ant-rate-star-second {\n color: #f0f0f0;\n transition: all 0.3s;\n user-select: none;\n}\n.ant-rate-star-first .anticon,\n.ant-rate-star-second .anticon {\n vertical-align: middle;\n}\n.ant-rate-star-first {\n position: absolute;\n top: 0;\n left: 0;\n width: 50%;\n height: 100%;\n overflow: hidden;\n opacity: 0;\n}\n.ant-rate-star-half .ant-rate-star-first,\n.ant-rate-star-half .ant-rate-star-second {\n opacity: 1;\n}\n.ant-rate-star-half .ant-rate-star-first,\n.ant-rate-star-full .ant-rate-star-second {\n color: inherit;\n}\n.ant-rate-text {\n display: inline-block;\n margin: 0 8px;\n font-size: 14px;\n}\n.ant-rate-rtl {\n direction: rtl;\n}\n.ant-rate-rtl .ant-rate-star:not(:last-child) {\n margin-right: 0;\n margin-left: 8px;\n}\n.ant-rate-rtl .ant-rate-star-first {\n right: 0;\n left: auto;\n}\n.ant-result {\n padding: 48px 32px;\n}\n.ant-result-success .ant-result-icon > .anticon {\n color: #52c41a;\n}\n.ant-result-error .ant-result-icon > .anticon {\n color: #ff4d4f;\n}\n.ant-result-info .ant-result-icon > .anticon {\n color: #5b5ce1;\n}\n.ant-result-warning .ant-result-icon > .anticon {\n color: #faad14;\n}\n.ant-result-image {\n width: 250px;\n height: 295px;\n margin: auto;\n}\n.ant-result-icon {\n margin-bottom: 24px;\n text-align: center;\n}\n.ant-result-icon > .anticon {\n font-size: 72px;\n}\n.ant-result-title {\n color: rgba(0, 0, 0, 0.85);\n font-size: 24px;\n line-height: 1.8;\n text-align: center;\n}\n.ant-result-subtitle {\n color: rgba(0, 0, 0, 0.45);\n font-size: 14px;\n line-height: 1.6;\n text-align: center;\n}\n.ant-result-extra {\n margin: 24px 0 0 0;\n text-align: center;\n}\n.ant-result-extra > * {\n margin-right: 8px;\n}\n.ant-result-extra > *:last-child {\n margin-right: 0;\n}\n.ant-result-content {\n margin-top: 24px;\n padding: 24px 40px;\n background-color: #fafafa;\n}\n.ant-result-rtl {\n direction: rtl;\n}\n.ant-result-rtl .ant-result-extra > * {\n margin-right: 0;\n margin-left: 8px;\n}\n.ant-result-rtl .ant-result-extra > *:last-child {\n margin-left: 0;\n}\n.segmented-disabled-item,\n.segmented-disabled-item:hover,\n.segmented-disabled-item:focus {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n}\n.segmented-item-selected {\n background-color: #fff;\n border-radius: 5px;\n box-shadow: 0 2px 8px -2px rgba(0, 0, 0, 0.05), 0 1px 4px -1px rgba(0, 0, 0, 0.07), 0 0 1px 0 rgba(0, 0, 0, 0.08);\n}\n.segmented-text-ellipsis {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n word-break: keep-all;\n}\n.ant-segmented {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n display: inline-block;\n padding: 2px;\n color: rgba(0, 0, 0, 0.65);\n background-color: rgba(0, 0, 0, 0.04);\n border-radius: 5px;\n transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\n}\n.ant-segmented-group {\n position: relative;\n display: flex;\n align-items: stretch;\n justify-items: flex-start;\n width: 100%;\n}\n.ant-segmented.ant-segmented-block {\n display: flex;\n}\n.ant-segmented.ant-segmented-block .ant-segmented-item {\n flex: 1;\n min-width: 0;\n}\n.ant-segmented:not(.ant-segmented-disabled):hover,\n.ant-segmented:not(.ant-segmented-disabled):focus {\n background-color: rgba(0, 0, 0, 0.06);\n}\n.ant-segmented-item {\n position: relative;\n text-align: center;\n cursor: pointer;\n transition: color 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\n}\n.ant-segmented-item-selected {\n background-color: #fff;\n border-radius: 5px;\n box-shadow: 0 2px 8px -2px rgba(0, 0, 0, 0.05), 0 1px 4px -1px rgba(0, 0, 0, 0.07), 0 0 1px 0 rgba(0, 0, 0, 0.08);\n color: #262626;\n}\n.ant-segmented-item:hover,\n.ant-segmented-item:focus {\n color: #262626;\n}\n.ant-segmented-item-label {\n min-height: 28px;\n padding: 0 11px;\n line-height: 28px;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n word-break: keep-all;\n}\n.ant-segmented-item-icon + * {\n margin-left: 6px;\n}\n.ant-segmented-item-input {\n position: absolute;\n top: 0;\n left: 0;\n width: 0;\n height: 0;\n opacity: 0;\n pointer-events: none;\n}\n.ant-segmented.ant-segmented-lg .ant-segmented-item-label {\n min-height: 36px;\n padding: 0 11px;\n font-size: 16px;\n line-height: 36px;\n}\n.ant-segmented.ant-segmented-sm .ant-segmented-item-label {\n min-height: 20px;\n padding: 0 7px;\n line-height: 20px;\n}\n.ant-segmented-item-disabled,\n.ant-segmented-item-disabled:hover,\n.ant-segmented-item-disabled:focus {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n}\n.ant-segmented-thumb {\n background-color: #fff;\n border-radius: 5px;\n box-shadow: 0 2px 8px -2px rgba(0, 0, 0, 0.05), 0 1px 4px -1px rgba(0, 0, 0, 0.07), 0 0 1px 0 rgba(0, 0, 0, 0.08);\n position: absolute;\n top: 0;\n left: 0;\n width: 0;\n height: 100%;\n padding: 4px 0;\n}\n.ant-segmented-thumb-motion-appear-active {\n transition: transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), width 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\n will-change: transform, width;\n}\n.ant-segmented.ant-segmented-rtl {\n direction: rtl;\n}\n.ant-segmented.ant-segmented-rtl .ant-segmented-item-icon {\n margin-right: 0;\n margin-left: 6px;\n}\n.ant-select-single .ant-select-selector {\n display: flex;\n}\n.ant-select-single .ant-select-selector .ant-select-selection-search {\n position: absolute;\n top: 0;\n right: 11px;\n bottom: 0;\n left: 11px;\n}\n.ant-select-single .ant-select-selector .ant-select-selection-search-input {\n width: 100%;\n}\n.ant-select-single .ant-select-selector .ant-select-selection-item,\n.ant-select-single .ant-select-selector .ant-select-selection-placeholder {\n padding: 0;\n line-height: 30px;\n transition: all 0.3s;\n}\n.ant-select-single .ant-select-selector .ant-select-selection-item {\n position: relative;\n user-select: none;\n}\n.ant-select-single .ant-select-selector .ant-select-selection-placeholder {\n transition: none;\n pointer-events: none;\n}\n.ant-select-single .ant-select-selector::after,\n.ant-select-single .ant-select-selector .ant-select-selection-item::after,\n.ant-select-single .ant-select-selector .ant-select-selection-placeholder::after {\n display: inline-block;\n width: 0;\n visibility: hidden;\n content: '\\a0';\n}\n.ant-select-single.ant-select-show-arrow .ant-select-selection-search {\n right: 25px;\n}\n.ant-select-single.ant-select-show-arrow .ant-select-selection-item,\n.ant-select-single.ant-select-show-arrow .ant-select-selection-placeholder {\n padding-right: 18px;\n}\n.ant-select-single.ant-select-open .ant-select-selection-item {\n color: #bfbfbf;\n}\n.ant-select-single:not(.ant-select-customize-input) .ant-select-selector {\n width: 100%;\n height: 32px;\n padding: 0 11px;\n}\n.ant-select-single:not(.ant-select-customize-input) .ant-select-selector .ant-select-selection-search-input {\n height: 30px;\n}\n.ant-select-single:not(.ant-select-customize-input) .ant-select-selector::after {\n line-height: 30px;\n}\n.ant-select-single.ant-select-customize-input .ant-select-selector::after {\n display: none;\n}\n.ant-select-single.ant-select-customize-input .ant-select-selector .ant-select-selection-search {\n position: static;\n width: 100%;\n}\n.ant-select-single.ant-select-customize-input .ant-select-selector .ant-select-selection-placeholder {\n position: absolute;\n right: 0;\n left: 0;\n padding: 0 11px;\n}\n.ant-select-single.ant-select-customize-input .ant-select-selector .ant-select-selection-placeholder::after {\n display: none;\n}\n.ant-select-single.ant-select-lg:not(.ant-select-customize-input) .ant-select-selector {\n height: 40px;\n}\n.ant-select-single.ant-select-lg:not(.ant-select-customize-input) .ant-select-selector::after,\n.ant-select-single.ant-select-lg:not(.ant-select-customize-input) .ant-select-selector .ant-select-selection-item,\n.ant-select-single.ant-select-lg:not(.ant-select-customize-input) .ant-select-selector .ant-select-selection-placeholder {\n line-height: 38px;\n}\n.ant-select-single.ant-select-lg:not(.ant-select-customize-input):not(.ant-select-customize-input) .ant-select-selection-search-input {\n height: 38px;\n}\n.ant-select-single.ant-select-sm:not(.ant-select-customize-input) .ant-select-selector {\n height: 24px;\n}\n.ant-select-single.ant-select-sm:not(.ant-select-customize-input) .ant-select-selector::after,\n.ant-select-single.ant-select-sm:not(.ant-select-customize-input) .ant-select-selector .ant-select-selection-item,\n.ant-select-single.ant-select-sm:not(.ant-select-customize-input) .ant-select-selector .ant-select-selection-placeholder {\n line-height: 22px;\n}\n.ant-select-single.ant-select-sm:not(.ant-select-customize-input):not(.ant-select-customize-input) .ant-select-selection-search-input {\n height: 22px;\n}\n.ant-select-single.ant-select-sm:not(.ant-select-customize-input) .ant-select-selection-search {\n right: 7px;\n left: 7px;\n}\n.ant-select-single.ant-select-sm:not(.ant-select-customize-input) .ant-select-selector {\n padding: 0 7px;\n}\n.ant-select-single.ant-select-sm:not(.ant-select-customize-input).ant-select-show-arrow .ant-select-selection-search {\n right: 28px;\n}\n.ant-select-single.ant-select-sm:not(.ant-select-customize-input).ant-select-show-arrow .ant-select-selection-item,\n.ant-select-single.ant-select-sm:not(.ant-select-customize-input).ant-select-show-arrow .ant-select-selection-placeholder {\n padding-right: 21px;\n}\n.ant-select-single.ant-select-lg:not(.ant-select-customize-input) .ant-select-selector {\n padding: 0 11px;\n}\n/**\n * Do not merge `height` & `line-height` under style with `selection` & `search`,\n * since chrome may update to redesign with its align logic.\n */\n.ant-select-selection-overflow {\n position: relative;\n display: flex;\n flex: auto;\n flex-wrap: wrap;\n max-width: 100%;\n}\n.ant-select-selection-overflow-item {\n flex: none;\n align-self: center;\n max-width: 100%;\n}\n.ant-select-multiple .ant-select-selector {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n padding: 1px 4px;\n}\n.ant-select-show-search.ant-select-multiple .ant-select-selector {\n cursor: text;\n}\n.ant-select-disabled.ant-select-multiple .ant-select-selector {\n background: #f5f5f5;\n cursor: not-allowed;\n}\n.ant-select-multiple .ant-select-selector::after {\n display: inline-block;\n width: 0;\n margin: 2px 0;\n line-height: 24px;\n content: '\\a0';\n}\n.ant-select-multiple.ant-select-show-arrow .ant-select-selector,\n.ant-select-multiple.ant-select-allow-clear .ant-select-selector {\n padding-right: 24px;\n}\n.ant-select-multiple .ant-select-selection-item {\n position: relative;\n display: flex;\n flex: none;\n box-sizing: border-box;\n max-width: 100%;\n height: 24px;\n margin-top: 2px;\n margin-bottom: 2px;\n line-height: 22px;\n background: #f5f5f5;\n border: 1px solid #f0f0f0;\n border-radius: 5px;\n cursor: default;\n transition: font-size 0.3s, line-height 0.3s, height 0.3s;\n user-select: none;\n margin-inline-end: 4px;\n padding-inline-start: 8px;\n padding-inline-end: 4px;\n}\n.ant-select-disabled.ant-select-multiple .ant-select-selection-item {\n color: #bfbfbf;\n border-color: #d9d9d9;\n cursor: not-allowed;\n}\n.ant-select-multiple .ant-select-selection-item-content {\n display: inline-block;\n margin-right: 4px;\n overflow: hidden;\n white-space: pre;\n text-overflow: ellipsis;\n}\n.ant-select-multiple .ant-select-selection-item-remove {\n color: inherit;\n font-style: normal;\n line-height: 0;\n text-align: center;\n text-transform: none;\n vertical-align: -0.125em;\n text-rendering: optimizelegibility;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n display: inline-block;\n color: rgba(0, 0, 0, 0.45);\n font-weight: bold;\n font-size: 10px;\n line-height: inherit;\n cursor: pointer;\n}\n.ant-select-multiple .ant-select-selection-item-remove > * {\n line-height: 1;\n}\n.ant-select-multiple .ant-select-selection-item-remove svg {\n display: inline-block;\n}\n.ant-select-multiple .ant-select-selection-item-remove::before {\n display: none;\n}\n.ant-select-multiple .ant-select-selection-item-remove .ant-select-multiple .ant-select-selection-item-remove-icon {\n display: block;\n}\n.ant-select-multiple .ant-select-selection-item-remove > .anticon {\n vertical-align: middle;\n}\n.ant-select-multiple .ant-select-selection-item-remove:hover {\n color: rgba(0, 0, 0, 0.75);\n}\n.ant-select-multiple .ant-select-selection-overflow-item + .ant-select-selection-overflow-item .ant-select-selection-search {\n margin-inline-start: 0;\n}\n.ant-select-multiple .ant-select-selection-search {\n position: relative;\n max-width: 100%;\n margin-inline-start: 7px;\n}\n.ant-select-multiple .ant-select-selection-search-input,\n.ant-select-multiple .ant-select-selection-search-mirror {\n height: 24px;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';\n line-height: 24px;\n transition: all 0.3s;\n}\n.ant-select-multiple .ant-select-selection-search-input {\n width: 100%;\n min-width: 4.1px;\n}\n.ant-select-multiple .ant-select-selection-search-mirror {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 999;\n white-space: pre;\n visibility: hidden;\n}\n.ant-select-multiple .ant-select-selection-placeholder {\n position: absolute;\n top: 50%;\n right: 11px;\n left: 11px;\n transform: translateY(-50%);\n transition: all 0.3s;\n}\n.ant-select-multiple.ant-select-lg .ant-select-selector::after {\n line-height: 32px;\n}\n.ant-select-multiple.ant-select-lg .ant-select-selection-item {\n height: 32px;\n line-height: 30px;\n}\n.ant-select-multiple.ant-select-lg .ant-select-selection-search {\n height: 32px;\n line-height: 32px;\n}\n.ant-select-multiple.ant-select-lg .ant-select-selection-search-input,\n.ant-select-multiple.ant-select-lg .ant-select-selection-search-mirror {\n height: 32px;\n line-height: 30px;\n}\n.ant-select-multiple.ant-select-sm .ant-select-selector::after {\n line-height: 16px;\n}\n.ant-select-multiple.ant-select-sm .ant-select-selection-item {\n height: 16px;\n line-height: 14px;\n}\n.ant-select-multiple.ant-select-sm .ant-select-selection-search {\n height: 16px;\n line-height: 16px;\n}\n.ant-select-multiple.ant-select-sm .ant-select-selection-search-input,\n.ant-select-multiple.ant-select-sm .ant-select-selection-search-mirror {\n height: 16px;\n line-height: 14px;\n}\n.ant-select-multiple.ant-select-sm .ant-select-selection-placeholder {\n left: 7px;\n}\n.ant-select-multiple.ant-select-sm .ant-select-selection-search {\n margin-inline-start: 3px;\n}\n.ant-select-multiple.ant-select-lg .ant-select-selection-item {\n height: 32px;\n line-height: 32px;\n}\n.ant-select-disabled .ant-select-selection-item-remove {\n display: none;\n}\n.ant-select-status-error.ant-select:not(.ant-select-disabled):not(.ant-select-customize-input):not(.ant-pagination-size-changer) .ant-select-selector {\n background-color: #fff;\n border-color: #ff4d4f !important;\n}\n.ant-select-status-error.ant-select:not(.ant-select-disabled):not(.ant-select-customize-input):not(.ant-pagination-size-changer).ant-select-open .ant-select-selector,\n.ant-select-status-error.ant-select:not(.ant-select-disabled):not(.ant-select-customize-input):not(.ant-pagination-size-changer).ant-select-focused .ant-select-selector {\n border-color: #ff7875;\n box-shadow: 0 0 0 2px rgba(255, 77, 79, 0.2);\n border-right-width: 1px;\n outline: 0;\n}\n.ant-select-status-warning.ant-select:not(.ant-select-disabled):not(.ant-select-customize-input):not(.ant-pagination-size-changer) .ant-select-selector {\n background-color: #fff;\n border-color: #faad14 !important;\n}\n.ant-select-status-warning.ant-select:not(.ant-select-disabled):not(.ant-select-customize-input):not(.ant-pagination-size-changer).ant-select-open .ant-select-selector,\n.ant-select-status-warning.ant-select:not(.ant-select-disabled):not(.ant-select-customize-input):not(.ant-pagination-size-changer).ant-select-focused .ant-select-selector {\n border-color: #ffc53d;\n box-shadow: 0 0 0 2px rgba(250, 173, 20, 0.2);\n border-right-width: 1px;\n outline: 0;\n}\n.ant-select-status-error.ant-select-has-feedback .ant-select-clear,\n.ant-select-status-warning.ant-select-has-feedback .ant-select-clear,\n.ant-select-status-success.ant-select-has-feedback .ant-select-clear,\n.ant-select-status-validating.ant-select-has-feedback .ant-select-clear {\n right: 32px;\n}\n.ant-select-status-error.ant-select-has-feedback .ant-select-selection-selected-value,\n.ant-select-status-warning.ant-select-has-feedback .ant-select-selection-selected-value,\n.ant-select-status-success.ant-select-has-feedback .ant-select-selection-selected-value,\n.ant-select-status-validating.ant-select-has-feedback .ant-select-selection-selected-value {\n padding-right: 42px;\n}\n/* Reset search input style */\n.ant-select {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n display: inline-block;\n cursor: pointer;\n}\n.ant-select:not(.ant-select-customize-input) .ant-select-selector {\n position: relative;\n background-color: #fff;\n border: 1px solid #d9d9d9;\n border-radius: 5px;\n transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\n}\n.ant-select:not(.ant-select-customize-input) .ant-select-selector input {\n cursor: pointer;\n}\n.ant-select-show-search.ant-select:not(.ant-select-customize-input) .ant-select-selector {\n cursor: text;\n}\n.ant-select-show-search.ant-select:not(.ant-select-customize-input) .ant-select-selector input {\n cursor: auto;\n}\n.ant-select-focused:not(.ant-select-disabled).ant-select:not(.ant-select-customize-input) .ant-select-selector {\n border-color: #8588ed;\n box-shadow: 0 0 0 2px rgba(91, 92, 225, 0.2);\n border-right-width: 1px;\n outline: 0;\n}\n.ant-input-rtl .ant-select-focused:not(.ant-select-disabled).ant-select:not(.ant-select-customize-input) .ant-select-selector {\n border-right-width: 0;\n border-left-width: 1px !important;\n}\n.ant-select-disabled.ant-select:not(.ant-select-customize-input) .ant-select-selector {\n color: rgba(0, 0, 0, 0.25);\n background: #f5f5f5;\n cursor: not-allowed;\n}\n.ant-select-multiple.ant-select-disabled.ant-select:not(.ant-select-customize-input) .ant-select-selector {\n background: #f5f5f5;\n}\n.ant-select-disabled.ant-select:not(.ant-select-customize-input) .ant-select-selector input {\n cursor: not-allowed;\n}\n.ant-select:not(.ant-select-customize-input) .ant-select-selector .ant-select-selection-search-input {\n margin: 0;\n padding: 0;\n background: transparent;\n border: none;\n outline: none;\n appearance: none;\n}\n.ant-select:not(.ant-select-customize-input) .ant-select-selector .ant-select-selection-search-input::-webkit-search-cancel-button {\n display: none;\n /* stylelint-disable-next-line property-no-vendor-prefix */\n -webkit-appearance: none;\n}\n.ant-select:not(.ant-select-disabled):hover .ant-select-selector {\n border-color: #8588ed;\n border-right-width: 1px;\n}\n.ant-input-rtl .ant-select:not(.ant-select-disabled):hover .ant-select-selector {\n border-right-width: 0;\n border-left-width: 1px !important;\n}\n.ant-select-selection-item {\n flex: 1;\n overflow: hidden;\n font-weight: normal;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n@media all and (-ms-high-contrast: none) {\n .ant-select-selection-item *::-ms-backdrop,\n .ant-select-selection-item {\n flex: auto;\n }\n}\n.ant-select-selection-placeholder {\n flex: 1;\n overflow: hidden;\n color: #bfbfbf;\n white-space: nowrap;\n text-overflow: ellipsis;\n pointer-events: none;\n}\n@media all and (-ms-high-contrast: none) {\n .ant-select-selection-placeholder *::-ms-backdrop,\n .ant-select-selection-placeholder {\n flex: auto;\n }\n}\n.ant-select-arrow {\n display: inline-block;\n color: inherit;\n font-style: normal;\n line-height: 0;\n text-transform: none;\n vertical-align: -0.125em;\n text-rendering: optimizelegibility;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n position: absolute;\n top: 50%;\n right: 11px;\n display: flex;\n align-items: center;\n height: 12px;\n margin-top: -6px;\n color: rgba(0, 0, 0, 0.25);\n font-size: 12px;\n line-height: 1;\n text-align: center;\n pointer-events: none;\n}\n.ant-select-arrow > * {\n line-height: 1;\n}\n.ant-select-arrow svg {\n display: inline-block;\n}\n.ant-select-arrow::before {\n display: none;\n}\n.ant-select-arrow .ant-select-arrow-icon {\n display: block;\n}\n.ant-select-arrow .anticon {\n vertical-align: top;\n transition: transform 0.3s;\n}\n.ant-select-arrow .anticon > svg {\n vertical-align: top;\n}\n.ant-select-arrow .anticon:not(.ant-select-suffix) {\n pointer-events: auto;\n}\n.ant-select-disabled .ant-select-arrow {\n cursor: not-allowed;\n}\n.ant-select-arrow > *:not(:last-child) {\n margin-inline-end: 8px;\n}\n.ant-select-clear {\n position: absolute;\n top: 50%;\n right: 11px;\n z-index: 1;\n display: inline-block;\n width: 12px;\n height: 12px;\n margin-top: -6px;\n color: rgba(0, 0, 0, 0.25);\n font-size: 12px;\n font-style: normal;\n line-height: 1;\n text-align: center;\n text-transform: none;\n background: #fff;\n cursor: pointer;\n opacity: 0;\n transition: color 0.3s ease, opacity 0.15s ease;\n text-rendering: auto;\n}\n.ant-select-clear::before {\n display: block;\n}\n.ant-select-clear:hover {\n color: rgba(0, 0, 0, 0.45);\n}\n.ant-select:hover .ant-select-clear {\n opacity: 1;\n}\n.ant-select-dropdown {\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: absolute;\n top: -9999px;\n left: -9999px;\n z-index: 1050;\n box-sizing: border-box;\n padding: 4px 0;\n overflow: hidden;\n font-size: 14px;\n font-variant: initial;\n background-color: #fff;\n border-radius: 5px;\n outline: none;\n box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05);\n}\n.ant-select-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-select-dropdown-placement-bottomLeft,\n.ant-select-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-select-dropdown-placement-bottomLeft {\n animation-name: antSlideUpIn;\n}\n.ant-select-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-select-dropdown-placement-topLeft,\n.ant-select-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-select-dropdown-placement-topLeft {\n animation-name: antSlideDownIn;\n}\n.ant-select-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-select-dropdown-placement-bottomLeft {\n animation-name: antSlideUpOut;\n}\n.ant-select-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-select-dropdown-placement-topLeft {\n animation-name: antSlideDownOut;\n}\n.ant-select-dropdown-hidden {\n display: none;\n}\n.ant-select-dropdown-empty {\n color: rgba(0, 0, 0, 0.25);\n}\n.ant-select-item-empty {\n position: relative;\n display: block;\n min-height: 32px;\n padding: 5px 12px;\n color: rgba(0, 0, 0, 0.85);\n font-weight: normal;\n font-size: 14px;\n line-height: 22px;\n color: rgba(0, 0, 0, 0.25);\n}\n.ant-select-item {\n position: relative;\n display: block;\n min-height: 32px;\n padding: 5px 12px;\n color: rgba(0, 0, 0, 0.85);\n font-weight: normal;\n font-size: 14px;\n line-height: 22px;\n cursor: pointer;\n transition: background 0.3s ease;\n}\n.ant-select-item-group {\n color: rgba(0, 0, 0, 0.45);\n font-size: 12px;\n cursor: default;\n}\n.ant-select-item-option {\n display: flex;\n}\n.ant-select-item-option-content {\n flex: auto;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.ant-select-item-option-state {\n flex: none;\n}\n.ant-select-item-option-active:not(.ant-select-item-option-disabled) {\n background-color: #f5f5f5;\n}\n.ant-select-item-option-selected:not(.ant-select-item-option-disabled) {\n color: rgba(0, 0, 0, 0.85);\n font-weight: 600;\n background-color: #f0f2ff;\n}\n.ant-select-item-option-selected:not(.ant-select-item-option-disabled) .ant-select-item-option-state {\n color: #5b5ce1;\n}\n.ant-select-item-option-disabled {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n}\n.ant-select-item-option-disabled.ant-select-item-option-selected {\n background-color: #f5f5f5;\n}\n.ant-select-item-option-grouped {\n padding-left: 24px;\n}\n.ant-select-lg {\n font-size: 16px;\n}\n.ant-select-borderless .ant-select-selector {\n background-color: transparent !important;\n border-color: transparent !important;\n box-shadow: none !important;\n}\n.ant-select.ant-select-in-form-item {\n width: 100%;\n}\n.ant-select-compact-item:not(.ant-select-compact-last-item) {\n margin-right: -1px;\n}\n.ant-select-compact-item:not(.ant-select-compact-last-item).ant-select-compact-item-rtl {\n margin-right: 0;\n margin-left: -1px;\n}\n.ant-select-compact-item:hover > *,\n.ant-select-compact-item:focus > *,\n.ant-select-compact-item:active > * {\n z-index: 2;\n}\n.ant-select-compact-item.ant-select-focused > * {\n z-index: 2;\n}\n.ant-select-compact-item[disabled] > * {\n z-index: 0;\n}\n.ant-select-compact-item:not(.ant-select-compact-first-item):not(.ant-select-compact-last-item).ant-select > .ant-select-selector {\n border-radius: 0;\n}\n.ant-select-compact-item.ant-select-compact-first-item.ant-select:not(.ant-select-compact-item-rtl) > .ant-select-selector {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.ant-select-compact-item.ant-select-compact-last-item.ant-select:not(.ant-select-compact-item-rtl) > .ant-select-selector {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.ant-select-compact-item.ant-select.ant-select-compact-first-item.ant-select-compact-item-rtl > .ant-select-selector {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n}\n.ant-select-compact-item.ant-select.ant-select-compact-last-item.ant-select-compact-item-rtl > .ant-select-selector {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n}\n.ant-select-rtl {\n direction: rtl;\n}\n.ant-select-rtl .ant-select-arrow {\n right: initial;\n left: 11px;\n}\n.ant-select-rtl .ant-select-clear {\n right: initial;\n left: 11px;\n}\n.ant-select-dropdown-rtl {\n direction: rtl;\n}\n.ant-select-dropdown-rtl .ant-select-item-option-grouped {\n padding-right: 24px;\n padding-left: 12px;\n}\n.ant-select-rtl.ant-select-multiple.ant-select-show-arrow .ant-select-selector,\n.ant-select-rtl.ant-select-multiple.ant-select-allow-clear .ant-select-selector {\n padding-right: 4px;\n padding-left: 24px;\n}\n.ant-select-rtl.ant-select-multiple .ant-select-selection-item {\n text-align: right;\n}\n.ant-select-rtl.ant-select-multiple .ant-select-selection-item-content {\n margin-right: 0;\n margin-left: 4px;\n text-align: right;\n}\n.ant-select-rtl.ant-select-multiple .ant-select-selection-search-mirror {\n right: 0;\n left: auto;\n}\n.ant-select-rtl.ant-select-multiple .ant-select-selection-placeholder {\n right: 11px;\n left: auto;\n}\n.ant-select-rtl.ant-select-multiple.ant-select-sm .ant-select-selection-placeholder {\n right: 7px;\n}\n.ant-select-rtl.ant-select-single .ant-select-selector .ant-select-selection-item,\n.ant-select-rtl.ant-select-single .ant-select-selector .ant-select-selection-placeholder {\n right: 0;\n left: 9px;\n text-align: right;\n}\n.ant-select-rtl.ant-select-single.ant-select-show-arrow .ant-select-selection-search {\n right: 11px;\n left: 25px;\n}\n.ant-select-rtl.ant-select-single.ant-select-show-arrow .ant-select-selection-item,\n.ant-select-rtl.ant-select-single.ant-select-show-arrow .ant-select-selection-placeholder {\n padding-right: 0;\n padding-left: 18px;\n}\n.ant-select-rtl.ant-select-single.ant-select-sm:not(.ant-select-customize-input).ant-select-show-arrow .ant-select-selection-search {\n right: 6px;\n}\n.ant-select-rtl.ant-select-single.ant-select-sm:not(.ant-select-customize-input).ant-select-show-arrow .ant-select-selection-item,\n.ant-select-rtl.ant-select-single.ant-select-sm:not(.ant-select-customize-input).ant-select-show-arrow .ant-select-selection-placeholder {\n padding-right: 0;\n padding-left: 21px;\n}\n.ant-skeleton {\n display: table;\n width: 100%;\n}\n.ant-skeleton-header {\n display: table-cell;\n padding-right: 16px;\n vertical-align: top;\n}\n.ant-skeleton-header .ant-skeleton-avatar {\n display: inline-block;\n vertical-align: top;\n background: rgba(190, 190, 190, 0.2);\n width: 32px;\n height: 32px;\n line-height: 32px;\n}\n.ant-skeleton-header .ant-skeleton-avatar.ant-skeleton-avatar-circle {\n border-radius: 50%;\n}\n.ant-skeleton-header .ant-skeleton-avatar-lg {\n width: 40px;\n height: 40px;\n line-height: 40px;\n}\n.ant-skeleton-header .ant-skeleton-avatar-lg.ant-skeleton-avatar-circle {\n border-radius: 50%;\n}\n.ant-skeleton-header .ant-skeleton-avatar-sm {\n width: 24px;\n height: 24px;\n line-height: 24px;\n}\n.ant-skeleton-header .ant-skeleton-avatar-sm.ant-skeleton-avatar-circle {\n border-radius: 50%;\n}\n.ant-skeleton-content {\n display: table-cell;\n width: 100%;\n vertical-align: top;\n}\n.ant-skeleton-content .ant-skeleton-title {\n width: 100%;\n height: 16px;\n background: rgba(190, 190, 190, 0.2);\n border-radius: 5px;\n}\n.ant-skeleton-content .ant-skeleton-title + .ant-skeleton-paragraph {\n margin-top: 24px;\n}\n.ant-skeleton-content .ant-skeleton-paragraph {\n padding: 0;\n}\n.ant-skeleton-content .ant-skeleton-paragraph > li {\n width: 100%;\n height: 16px;\n list-style: none;\n background: rgba(190, 190, 190, 0.2);\n border-radius: 5px;\n}\n.ant-skeleton-content .ant-skeleton-paragraph > li:last-child:not(:first-child):not(:nth-child(2)) {\n width: 61%;\n}\n.ant-skeleton-content .ant-skeleton-paragraph > li + li {\n margin-top: 16px;\n}\n.ant-skeleton-with-avatar .ant-skeleton-content .ant-skeleton-title {\n margin-top: 12px;\n}\n.ant-skeleton-with-avatar .ant-skeleton-content .ant-skeleton-title + .ant-skeleton-paragraph {\n margin-top: 28px;\n}\n.ant-skeleton-round .ant-skeleton-content .ant-skeleton-title,\n.ant-skeleton-round .ant-skeleton-content .ant-skeleton-paragraph > li {\n border-radius: 100px;\n}\n.ant-skeleton-active .ant-skeleton-title,\n.ant-skeleton-active .ant-skeleton-paragraph > li,\n.ant-skeleton-active .ant-skeleton-avatar,\n.ant-skeleton-active .ant-skeleton-button,\n.ant-skeleton-active .ant-skeleton-input,\n.ant-skeleton-active .ant-skeleton-image {\n position: relative;\n /* stylelint-disable-next-line property-no-vendor-prefix,value-no-vendor-prefix */\n z-index: 0;\n overflow: hidden;\n background: transparent;\n}\n.ant-skeleton-active .ant-skeleton-title::after,\n.ant-skeleton-active .ant-skeleton-paragraph > li::after,\n.ant-skeleton-active .ant-skeleton-avatar::after,\n.ant-skeleton-active .ant-skeleton-button::after,\n.ant-skeleton-active .ant-skeleton-input::after,\n.ant-skeleton-active .ant-skeleton-image::after {\n position: absolute;\n top: 0;\n right: -150%;\n bottom: 0;\n left: -150%;\n background: linear-gradient(90deg, rgba(190, 190, 190, 0.2) 25%, rgba(129, 129, 129, 0.24) 37%, rgba(190, 190, 190, 0.2) 63%);\n animation: ant-skeleton-loading 1.4s ease infinite;\n content: '';\n}\n.ant-skeleton.ant-skeleton-block {\n width: 100%;\n}\n.ant-skeleton.ant-skeleton-block .ant-skeleton-button {\n width: 100%;\n}\n.ant-skeleton.ant-skeleton-block .ant-skeleton-input {\n width: 100%;\n}\n.ant-skeleton-element {\n display: inline-block;\n width: auto;\n}\n.ant-skeleton-element .ant-skeleton-button {\n display: inline-block;\n vertical-align: top;\n background: rgba(190, 190, 190, 0.2);\n border-radius: 5px;\n width: 64px;\n min-width: 64px;\n height: 32px;\n line-height: 32px;\n}\n.ant-skeleton-element .ant-skeleton-button.ant-skeleton-button-square {\n width: 32px;\n min-width: 32px;\n}\n.ant-skeleton-element .ant-skeleton-button.ant-skeleton-button-circle {\n width: 32px;\n min-width: 32px;\n border-radius: 50%;\n}\n.ant-skeleton-element .ant-skeleton-button.ant-skeleton-button-round {\n border-radius: 32px;\n}\n.ant-skeleton-element .ant-skeleton-button-lg {\n width: 80px;\n min-width: 80px;\n height: 40px;\n line-height: 40px;\n}\n.ant-skeleton-element .ant-skeleton-button-lg.ant-skeleton-button-square {\n width: 40px;\n min-width: 40px;\n}\n.ant-skeleton-element .ant-skeleton-button-lg.ant-skeleton-button-circle {\n width: 40px;\n min-width: 40px;\n border-radius: 50%;\n}\n.ant-skeleton-element .ant-skeleton-button-lg.ant-skeleton-button-round {\n border-radius: 40px;\n}\n.ant-skeleton-element .ant-skeleton-button-sm {\n width: 48px;\n min-width: 48px;\n height: 24px;\n line-height: 24px;\n}\n.ant-skeleton-element .ant-skeleton-button-sm.ant-skeleton-button-square {\n width: 24px;\n min-width: 24px;\n}\n.ant-skeleton-element .ant-skeleton-button-sm.ant-skeleton-button-circle {\n width: 24px;\n min-width: 24px;\n border-radius: 50%;\n}\n.ant-skeleton-element .ant-skeleton-button-sm.ant-skeleton-button-round {\n border-radius: 24px;\n}\n.ant-skeleton-element .ant-skeleton-avatar {\n display: inline-block;\n vertical-align: top;\n background: rgba(190, 190, 190, 0.2);\n width: 32px;\n height: 32px;\n line-height: 32px;\n}\n.ant-skeleton-element .ant-skeleton-avatar.ant-skeleton-avatar-circle {\n border-radius: 50%;\n}\n.ant-skeleton-element .ant-skeleton-avatar-lg {\n width: 40px;\n height: 40px;\n line-height: 40px;\n}\n.ant-skeleton-element .ant-skeleton-avatar-lg.ant-skeleton-avatar-circle {\n border-radius: 50%;\n}\n.ant-skeleton-element .ant-skeleton-avatar-sm {\n width: 24px;\n height: 24px;\n line-height: 24px;\n}\n.ant-skeleton-element .ant-skeleton-avatar-sm.ant-skeleton-avatar-circle {\n border-radius: 50%;\n}\n.ant-skeleton-element .ant-skeleton-input {\n display: inline-block;\n vertical-align: top;\n background: rgba(190, 190, 190, 0.2);\n width: 160px;\n min-width: 160px;\n height: 32px;\n line-height: 32px;\n}\n.ant-skeleton-element .ant-skeleton-input-lg {\n width: 200px;\n min-width: 200px;\n height: 40px;\n line-height: 40px;\n}\n.ant-skeleton-element .ant-skeleton-input-sm {\n width: 120px;\n min-width: 120px;\n height: 24px;\n line-height: 24px;\n}\n.ant-skeleton-element .ant-skeleton-image {\n display: flex;\n align-items: center;\n justify-content: center;\n vertical-align: top;\n background: rgba(190, 190, 190, 0.2);\n width: 96px;\n height: 96px;\n line-height: 96px;\n}\n.ant-skeleton-element .ant-skeleton-image.ant-skeleton-image-circle {\n border-radius: 50%;\n}\n.ant-skeleton-element .ant-skeleton-image-path {\n fill: #bfbfbf;\n}\n.ant-skeleton-element .ant-skeleton-image-svg {\n width: 48px;\n height: 48px;\n line-height: 48px;\n max-width: 192px;\n max-height: 192px;\n}\n.ant-skeleton-element .ant-skeleton-image-svg.ant-skeleton-image-circle {\n border-radius: 50%;\n}\n@keyframes ant-skeleton-loading {\n 0% {\n transform: translateX(-37.5%);\n }\n 100% {\n transform: translateX(37.5%);\n }\n}\n.ant-skeleton-rtl {\n direction: rtl;\n}\n.ant-skeleton-rtl .ant-skeleton-header {\n padding-right: 0;\n padding-left: 16px;\n}\n.ant-skeleton-rtl.ant-skeleton.ant-skeleton-active .ant-skeleton-content .ant-skeleton-title,\n.ant-skeleton-rtl.ant-skeleton.ant-skeleton-active .ant-skeleton-content .ant-skeleton-paragraph > li {\n animation-name: ant-skeleton-loading-rtl;\n}\n.ant-skeleton-rtl.ant-skeleton.ant-skeleton-active .ant-skeleton-avatar {\n animation-name: ant-skeleton-loading-rtl;\n}\n@keyframes ant-skeleton-loading-rtl {\n 0% {\n background-position: 0% 50%;\n }\n 100% {\n background-position: 100% 50%;\n }\n}\n.ant-slider {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n height: 12px;\n margin: 10px 6px 10px;\n padding: 4px 0;\n cursor: pointer;\n touch-action: none;\n}\n.ant-slider-vertical {\n width: 12px;\n height: 100%;\n margin: 6px 10px;\n padding: 0 4px;\n}\n.ant-slider-vertical .ant-slider-rail {\n width: 4px;\n height: 100%;\n}\n.ant-slider-vertical .ant-slider-track {\n width: 4px;\n}\n.ant-slider-vertical .ant-slider-handle {\n margin-top: -6px;\n margin-left: -5px;\n}\n.ant-slider-vertical .ant-slider-mark {\n top: 0;\n left: 12px;\n width: 18px;\n height: 100%;\n}\n.ant-slider-vertical .ant-slider-mark-text {\n left: 4px;\n white-space: nowrap;\n}\n.ant-slider-vertical .ant-slider-step {\n width: 4px;\n height: 100%;\n}\n.ant-slider-vertical .ant-slider-dot {\n top: auto;\n margin-left: -2px;\n}\n.ant-slider-tooltip .ant-tooltip-inner {\n min-width: unset;\n}\n.ant-slider-rtl.ant-slider-vertical .ant-slider-handle {\n margin-right: -5px;\n margin-left: 0;\n}\n.ant-slider-rtl.ant-slider-vertical .ant-slider-mark {\n right: 12px;\n left: auto;\n}\n.ant-slider-rtl.ant-slider-vertical .ant-slider-mark-text {\n right: 4px;\n left: auto;\n}\n.ant-slider-rtl.ant-slider-vertical .ant-slider-dot {\n right: 2px;\n left: auto;\n}\n.ant-slider-with-marks {\n margin-bottom: 28px;\n}\n.ant-slider-rail {\n position: absolute;\n width: 100%;\n height: 4px;\n background-color: #f5f5f5;\n border-radius: 5px;\n transition: background-color 0.3s;\n}\n.ant-slider-track {\n position: absolute;\n height: 4px;\n background-color: #e0e3ff;\n border-radius: 5px;\n transition: background-color 0.3s;\n}\n.ant-slider-handle {\n position: absolute;\n width: 14px;\n height: 14px;\n margin-top: -5px;\n background-color: #fff;\n border: solid 2px #e0e3ff;\n border-radius: 50%;\n box-shadow: 0;\n cursor: pointer;\n transition: border-color 0.3s, box-shadow 0.6s, transform 0.3s cubic-bezier(0.18, 0.89, 0.32, 1.28);\n}\n.ant-slider-handle-dragging {\n z-index: 1;\n}\n.ant-slider-handle:focus {\n border-color: #7c7de7;\n outline: none;\n box-shadow: 0 0 0 5px rgba(91, 92, 225, 0.12);\n}\n.ant-slider-handle.ant-tooltip-open {\n border-color: #5b5ce1;\n}\n.ant-slider-handle::after {\n position: absolute;\n top: -6px;\n right: -6px;\n bottom: -6px;\n left: -6px;\n content: '';\n}\n.ant-slider:hover .ant-slider-rail {\n background-color: #e1e1e1;\n}\n.ant-slider:hover .ant-slider-track {\n background-color: #b4b9fa;\n}\n.ant-slider:hover .ant-slider-handle:not(.ant-tooltip-open) {\n border-color: #b4b9fa;\n}\n.ant-slider-mark {\n position: absolute;\n top: 14px;\n left: 0;\n width: 100%;\n font-size: 14px;\n}\n.ant-slider-mark-text {\n position: absolute;\n display: inline-block;\n color: rgba(0, 0, 0, 0.45);\n text-align: center;\n word-break: keep-all;\n cursor: pointer;\n user-select: none;\n}\n.ant-slider-mark-text-active {\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-slider-step {\n position: absolute;\n width: 100%;\n height: 4px;\n background: transparent;\n pointer-events: none;\n}\n.ant-slider-dot {\n position: absolute;\n top: -2px;\n width: 8px;\n height: 8px;\n background-color: #fff;\n border: 2px solid #f0f0f0;\n border-radius: 50%;\n cursor: pointer;\n}\n.ant-slider-dot-active {\n border-color: #adaef0;\n}\n.ant-slider-disabled {\n cursor: not-allowed;\n}\n.ant-slider-disabled .ant-slider-rail {\n background-color: #f5f5f5 !important;\n}\n.ant-slider-disabled .ant-slider-track {\n background-color: rgba(0, 0, 0, 0.25) !important;\n}\n.ant-slider-disabled .ant-slider-handle,\n.ant-slider-disabled .ant-slider-dot {\n background-color: #fff;\n border-color: rgba(0, 0, 0, 0.25) !important;\n box-shadow: none;\n cursor: not-allowed;\n}\n.ant-slider-disabled .ant-slider-mark-text,\n.ant-slider-disabled .ant-slider-dot {\n cursor: not-allowed !important;\n}\n.ant-slider-rtl {\n direction: rtl;\n}\n.ant-slider-rtl .ant-slider-mark {\n right: 0;\n left: auto;\n}\n.ant-space {\n display: inline-flex;\n}\n.ant-space-vertical {\n flex-direction: column;\n}\n.ant-space-align-center {\n align-items: center;\n}\n.ant-space-align-start {\n align-items: flex-start;\n}\n.ant-space-align-end {\n align-items: flex-end;\n}\n.ant-space-align-baseline {\n align-items: baseline;\n}\n.ant-space-item:empty {\n display: none;\n}\n.ant-space-compact {\n display: inline-flex;\n}\n.ant-space-compact-block {\n display: flex;\n width: 100%;\n}\n.ant-space-compact-vertical {\n flex-direction: column;\n}\n.ant-space-rtl {\n direction: rtl;\n}\n.ant-space-compact-rtl {\n direction: rtl;\n}\n.ant-spin {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: absolute;\n display: none;\n color: #5b5ce1;\n text-align: center;\n vertical-align: middle;\n opacity: 0;\n transition: transform 0.3s cubic-bezier(0.78, 0.14, 0.15, 0.86);\n}\n.ant-spin-spinning {\n position: static;\n display: inline-block;\n opacity: 1;\n}\n.ant-spin-nested-loading {\n position: relative;\n}\n.ant-spin-nested-loading > div > .ant-spin {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 4;\n display: block;\n width: 100%;\n height: 100%;\n max-height: 400px;\n}\n.ant-spin-nested-loading > div > .ant-spin .ant-spin-dot {\n position: absolute;\n top: 50%;\n left: 50%;\n margin: -10px;\n}\n.ant-spin-nested-loading > div > .ant-spin .ant-spin-text {\n position: absolute;\n top: 50%;\n width: 100%;\n padding-top: 5px;\n text-shadow: 0 1px 2px #fff;\n}\n.ant-spin-nested-loading > div > .ant-spin.ant-spin-show-text .ant-spin-dot {\n margin-top: -20px;\n}\n.ant-spin-nested-loading > div > .ant-spin-sm .ant-spin-dot {\n margin: -7px;\n}\n.ant-spin-nested-loading > div > .ant-spin-sm .ant-spin-text {\n padding-top: 2px;\n}\n.ant-spin-nested-loading > div > .ant-spin-sm.ant-spin-show-text .ant-spin-dot {\n margin-top: -17px;\n}\n.ant-spin-nested-loading > div > .ant-spin-lg .ant-spin-dot {\n margin: -16px;\n}\n.ant-spin-nested-loading > div > .ant-spin-lg .ant-spin-text {\n padding-top: 11px;\n}\n.ant-spin-nested-loading > div > .ant-spin-lg.ant-spin-show-text .ant-spin-dot {\n margin-top: -26px;\n}\n.ant-spin-container {\n position: relative;\n transition: opacity 0.3s;\n}\n.ant-spin-container::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 10;\n display: none \\9;\n width: 100%;\n height: 100%;\n background: #fff;\n opacity: 0;\n transition: all 0.3s;\n content: '';\n pointer-events: none;\n}\n.ant-spin-blur {\n clear: both;\n opacity: 0.5;\n user-select: none;\n pointer-events: none;\n}\n.ant-spin-blur::after {\n opacity: 0.4;\n pointer-events: auto;\n}\n.ant-spin-tip {\n color: rgba(0, 0, 0, 0.45);\n}\n.ant-spin-dot {\n position: relative;\n display: inline-block;\n font-size: 20px;\n width: 1em;\n height: 1em;\n}\n.ant-spin-dot-item {\n position: absolute;\n display: block;\n width: 9px;\n height: 9px;\n background-color: #5b5ce1;\n border-radius: 100%;\n transform: scale(0.75);\n transform-origin: 50% 50%;\n opacity: 0.3;\n animation: antSpinMove 1s infinite linear alternate;\n}\n.ant-spin-dot-item:nth-child(1) {\n top: 0;\n left: 0;\n}\n.ant-spin-dot-item:nth-child(2) {\n top: 0;\n right: 0;\n animation-delay: 0.4s;\n}\n.ant-spin-dot-item:nth-child(3) {\n right: 0;\n bottom: 0;\n animation-delay: 0.8s;\n}\n.ant-spin-dot-item:nth-child(4) {\n bottom: 0;\n left: 0;\n animation-delay: 1.2s;\n}\n.ant-spin-dot-spin {\n transform: rotate(0deg);\n animation: antRotate 1.2s infinite linear;\n}\n.ant-spin-sm .ant-spin-dot {\n font-size: 14px;\n}\n.ant-spin-sm .ant-spin-dot i {\n width: 6px;\n height: 6px;\n}\n.ant-spin-lg .ant-spin-dot {\n font-size: 32px;\n}\n.ant-spin-lg .ant-spin-dot i {\n width: 14px;\n height: 14px;\n}\n.ant-spin.ant-spin-show-text .ant-spin-text {\n display: block;\n}\n@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {\n /* IE10+ */\n .ant-spin-blur {\n background: #fff;\n opacity: 0.5;\n }\n}\n@keyframes antSpinMove {\n to {\n opacity: 1;\n }\n}\n@keyframes antRotate {\n to {\n transform: rotate(360deg);\n }\n}\n.ant-spin-rtl {\n direction: rtl;\n}\n.ant-spin-rtl .ant-spin-dot-spin {\n transform: rotate(-45deg);\n animation-name: antRotateRtl;\n}\n@keyframes antRotateRtl {\n to {\n transform: rotate(-405deg);\n }\n}\n.ant-statistic {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n}\n.ant-statistic-title {\n margin-bottom: 4px;\n color: rgba(0, 0, 0, 0.45);\n font-size: 14px;\n}\n.ant-statistic-skeleton {\n padding-top: 16px;\n}\n.ant-statistic-content {\n color: rgba(0, 0, 0, 0.85);\n font-size: 24px;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';\n}\n.ant-statistic-content-value {\n display: inline-block;\n direction: ltr;\n}\n.ant-statistic-content-prefix,\n.ant-statistic-content-suffix {\n display: inline-block;\n}\n.ant-statistic-content-prefix {\n margin-right: 4px;\n}\n.ant-statistic-content-suffix {\n margin-left: 4px;\n}\n.ant-statistic-rtl {\n direction: rtl;\n}\n.ant-statistic-rtl .ant-statistic-content-prefix {\n margin-right: 0;\n margin-left: 4px;\n}\n.ant-statistic-rtl .ant-statistic-content-suffix {\n margin-right: 4px;\n margin-left: 0;\n}\n.ant-steps {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n display: flex;\n width: 100%;\n font-size: 0;\n text-align: initial;\n}\n.ant-steps-item {\n position: relative;\n display: inline-block;\n flex: 1;\n overflow: hidden;\n vertical-align: top;\n}\n.ant-steps-item-container {\n outline: none;\n}\n.ant-steps-item:last-child {\n flex: none;\n}\n.ant-steps-item:last-child > .ant-steps-item-container > .ant-steps-item-tail,\n.ant-steps-item:last-child > .ant-steps-item-container > .ant-steps-item-content > .ant-steps-item-title::after {\n display: none;\n}\n.ant-steps-item-icon,\n.ant-steps-item-content {\n display: inline-block;\n vertical-align: top;\n}\n.ant-steps-item-icon {\n width: 32px;\n height: 32px;\n margin: 0 8px 0 0;\n font-size: 16px;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';\n line-height: 32px;\n text-align: center;\n border: 1px solid rgba(0, 0, 0, 0.25);\n border-radius: 32px;\n transition: background-color 0.3s, border-color 0.3s;\n}\n.ant-steps-item-icon .ant-steps-icon {\n position: relative;\n top: -0.5px;\n color: #5b5ce1;\n line-height: 1;\n}\n.ant-steps-item-tail {\n position: absolute;\n top: 12px;\n left: 0;\n width: 100%;\n padding: 0 10px;\n}\n.ant-steps-item-tail::after {\n display: inline-block;\n width: 100%;\n height: 1px;\n background: #f0f0f0;\n border-radius: 1px;\n transition: background 0.3s;\n content: '';\n}\n.ant-steps-item-title {\n position: relative;\n display: inline-block;\n padding-right: 16px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 16px;\n line-height: 32px;\n}\n.ant-steps-item-title::after {\n position: absolute;\n top: 16px;\n left: 100%;\n display: block;\n width: 9999px;\n height: 1px;\n background: #f0f0f0;\n content: '';\n}\n.ant-steps-item-subtitle {\n display: inline;\n margin-left: 8px;\n color: rgba(0, 0, 0, 0.45);\n font-weight: normal;\n font-size: 14px;\n}\n.ant-steps-item-description {\n color: rgba(0, 0, 0, 0.45);\n font-size: 14px;\n}\n.ant-steps-item-wait .ant-steps-item-icon {\n background-color: #fff;\n border-color: rgba(0, 0, 0, 0.25);\n}\n.ant-steps-item-wait .ant-steps-item-icon > .ant-steps-icon {\n color: rgba(0, 0, 0, 0.25);\n}\n.ant-steps-item-wait .ant-steps-item-icon > .ant-steps-icon .ant-steps-icon-dot {\n background: rgba(0, 0, 0, 0.25);\n}\n.ant-steps-item-wait > .ant-steps-item-container > .ant-steps-item-content > .ant-steps-item-title {\n color: rgba(0, 0, 0, 0.45);\n}\n.ant-steps-item-wait > .ant-steps-item-container > .ant-steps-item-content > .ant-steps-item-title::after {\n background-color: #f0f0f0;\n}\n.ant-steps-item-wait > .ant-steps-item-container > .ant-steps-item-content > .ant-steps-item-description {\n color: rgba(0, 0, 0, 0.45);\n}\n.ant-steps-item-wait > .ant-steps-item-container > .ant-steps-item-tail::after {\n background-color: #f0f0f0;\n}\n.ant-steps-item-process .ant-steps-item-icon {\n background-color: #fff;\n border-color: #5b5ce1;\n}\n.ant-steps-item-process .ant-steps-item-icon > .ant-steps-icon {\n color: #5b5ce1;\n}\n.ant-steps-item-process .ant-steps-item-icon > .ant-steps-icon .ant-steps-icon-dot {\n background: #5b5ce1;\n}\n.ant-steps-item-process > .ant-steps-item-container > .ant-steps-item-content > .ant-steps-item-title {\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-steps-item-process > .ant-steps-item-container > .ant-steps-item-content > .ant-steps-item-title::after {\n background-color: #f0f0f0;\n}\n.ant-steps-item-process > .ant-steps-item-container > .ant-steps-item-content > .ant-steps-item-description {\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-steps-item-process > .ant-steps-item-container > .ant-steps-item-tail::after {\n background-color: #f0f0f0;\n}\n.ant-steps-item-process > .ant-steps-item-container > .ant-steps-item-icon {\n background: #5b5ce1;\n}\n.ant-steps-item-process > .ant-steps-item-container > .ant-steps-item-icon .ant-steps-icon {\n color: #fff;\n}\n.ant-steps-item-process > .ant-steps-item-container > .ant-steps-item-title {\n font-weight: 500;\n}\n.ant-steps-item-finish .ant-steps-item-icon {\n background-color: #fff;\n border-color: #5b5ce1;\n}\n.ant-steps-item-finish .ant-steps-item-icon > .ant-steps-icon {\n color: #5b5ce1;\n}\n.ant-steps-item-finish .ant-steps-item-icon > .ant-steps-icon .ant-steps-icon-dot {\n background: #5b5ce1;\n}\n.ant-steps-item-finish > .ant-steps-item-container > .ant-steps-item-content > .ant-steps-item-title {\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-steps-item-finish > .ant-steps-item-container > .ant-steps-item-content > .ant-steps-item-title::after {\n background-color: #5b5ce1;\n}\n.ant-steps-item-finish > .ant-steps-item-container > .ant-steps-item-content > .ant-steps-item-description {\n color: rgba(0, 0, 0, 0.45);\n}\n.ant-steps-item-finish > .ant-steps-item-container > .ant-steps-item-tail::after {\n background-color: #5b5ce1;\n}\n.ant-steps-item-error .ant-steps-item-icon {\n background-color: #fff;\n border-color: #ff4d4f;\n}\n.ant-steps-item-error .ant-steps-item-icon > .ant-steps-icon {\n color: #ff4d4f;\n}\n.ant-steps-item-error .ant-steps-item-icon > .ant-steps-icon .ant-steps-icon-dot {\n background: #ff4d4f;\n}\n.ant-steps-item-error > .ant-steps-item-container > .ant-steps-item-content > .ant-steps-item-title {\n color: #ff4d4f;\n}\n.ant-steps-item-error > .ant-steps-item-container > .ant-steps-item-content > .ant-steps-item-title::after {\n background-color: #f0f0f0;\n}\n.ant-steps-item-error > .ant-steps-item-container > .ant-steps-item-content > .ant-steps-item-description {\n color: #ff4d4f;\n}\n.ant-steps-item-error > .ant-steps-item-container > .ant-steps-item-tail::after {\n background-color: #f0f0f0;\n}\n.ant-steps-item.ant-steps-next-error .ant-steps-item-title::after {\n background: #ff4d4f;\n}\n.ant-steps-item-disabled {\n cursor: not-allowed;\n}\n.ant-steps .ant-steps-item:not(.ant-steps-item-active) > .ant-steps-item-container[role='button'] {\n cursor: pointer;\n}\n.ant-steps .ant-steps-item:not(.ant-steps-item-active) > .ant-steps-item-container[role='button'] .ant-steps-item-title,\n.ant-steps .ant-steps-item:not(.ant-steps-item-active) > .ant-steps-item-container[role='button'] .ant-steps-item-subtitle,\n.ant-steps .ant-steps-item:not(.ant-steps-item-active) > .ant-steps-item-container[role='button'] .ant-steps-item-description,\n.ant-steps .ant-steps-item:not(.ant-steps-item-active) > .ant-steps-item-container[role='button'] .ant-steps-item-icon .ant-steps-icon {\n transition: color 0.3s;\n}\n.ant-steps .ant-steps-item:not(.ant-steps-item-active) > .ant-steps-item-container[role='button']:hover .ant-steps-item-title,\n.ant-steps .ant-steps-item:not(.ant-steps-item-active) > .ant-steps-item-container[role='button']:hover .ant-steps-item-subtitle,\n.ant-steps .ant-steps-item:not(.ant-steps-item-active) > .ant-steps-item-container[role='button']:hover .ant-steps-item-description {\n color: #5b5ce1;\n}\n.ant-steps .ant-steps-item:not(.ant-steps-item-active):not(.ant-steps-item-process) > .ant-steps-item-container[role='button']:hover .ant-steps-item-icon {\n border-color: #5b5ce1;\n}\n.ant-steps .ant-steps-item:not(.ant-steps-item-active):not(.ant-steps-item-process) > .ant-steps-item-container[role='button']:hover .ant-steps-item-icon .ant-steps-icon {\n color: #5b5ce1;\n}\n.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item {\n padding-left: 16px;\n white-space: nowrap;\n}\n.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item:first-child {\n padding-left: 0;\n}\n.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item:last-child .ant-steps-item-title {\n padding-right: 0;\n}\n.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item-tail {\n display: none;\n}\n.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item-description {\n max-width: 140px;\n white-space: normal;\n}\n.ant-steps-item-custom > .ant-steps-item-container > .ant-steps-item-icon {\n height: auto;\n background: none;\n border: 0;\n}\n.ant-steps-item-custom > .ant-steps-item-container > .ant-steps-item-icon > .ant-steps-icon {\n top: 0px;\n left: 0.5px;\n width: 32px;\n height: 32px;\n font-size: 24px;\n line-height: 32px;\n}\n.ant-steps-item-custom.ant-steps-item-process .ant-steps-item-icon > .ant-steps-icon {\n color: #5b5ce1;\n}\n.ant-steps:not(.ant-steps-vertical) .ant-steps-item-custom .ant-steps-item-icon {\n width: auto;\n background: none;\n}\n.ant-steps-small.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item {\n padding-left: 12px;\n}\n.ant-steps-small.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item:first-child {\n padding-left: 0;\n}\n.ant-steps-small .ant-steps-item-icon {\n width: 24px;\n height: 24px;\n margin: 0 8px 0 0;\n font-size: 12px;\n line-height: 24px;\n text-align: center;\n border-radius: 24px;\n}\n.ant-steps-small .ant-steps-item-title {\n padding-right: 12px;\n font-size: 14px;\n line-height: 24px;\n}\n.ant-steps-small .ant-steps-item-title::after {\n top: 12px;\n}\n.ant-steps-small .ant-steps-item-description {\n color: rgba(0, 0, 0, 0.45);\n font-size: 14px;\n}\n.ant-steps-small .ant-steps-item-tail {\n top: 8px;\n}\n.ant-steps-small .ant-steps-item-custom .ant-steps-item-icon {\n width: inherit;\n height: inherit;\n line-height: inherit;\n background: none;\n border: 0;\n border-radius: 0;\n}\n.ant-steps-small .ant-steps-item-custom .ant-steps-item-icon > .ant-steps-icon {\n font-size: 24px;\n line-height: 24px;\n transform: none;\n}\n.ant-steps-vertical {\n display: flex;\n flex-direction: column;\n}\n.ant-steps-vertical > .ant-steps-item {\n display: block;\n flex: 1 0 auto;\n padding-left: 0;\n overflow: visible;\n}\n.ant-steps-vertical > .ant-steps-item .ant-steps-item-icon {\n float: left;\n margin-right: 16px;\n}\n.ant-steps-vertical > .ant-steps-item .ant-steps-item-content {\n display: block;\n min-height: 48px;\n overflow: hidden;\n}\n.ant-steps-vertical > .ant-steps-item .ant-steps-item-title {\n line-height: 32px;\n}\n.ant-steps-vertical > .ant-steps-item .ant-steps-item-description {\n padding-bottom: 12px;\n}\n.ant-steps-vertical > .ant-steps-item > .ant-steps-item-container > .ant-steps-item-tail {\n position: absolute;\n top: 0;\n left: 16px;\n width: 1px;\n height: 100%;\n padding: 38px 0 6px;\n}\n.ant-steps-vertical > .ant-steps-item > .ant-steps-item-container > .ant-steps-item-tail::after {\n width: 1px;\n height: 100%;\n}\n.ant-steps-vertical > .ant-steps-item:not(:last-child) > .ant-steps-item-container > .ant-steps-item-tail {\n display: block;\n}\n.ant-steps-vertical > .ant-steps-item > .ant-steps-item-container > .ant-steps-item-content > .ant-steps-item-title::after {\n display: none;\n}\n.ant-steps-vertical.ant-steps-small .ant-steps-item-container .ant-steps-item-tail {\n position: absolute;\n top: 0;\n left: 12px;\n padding: 30px 0 6px;\n}\n.ant-steps-vertical.ant-steps-small .ant-steps-item-container .ant-steps-item-title {\n line-height: 24px;\n}\n.ant-steps-label-vertical .ant-steps-item {\n overflow: visible;\n}\n.ant-steps-label-vertical .ant-steps-item-tail {\n margin-left: 58px;\n padding: 3.5px 24px;\n}\n.ant-steps-label-vertical .ant-steps-item-content {\n display: block;\n width: 116px;\n margin-top: 8px;\n text-align: center;\n}\n.ant-steps-label-vertical .ant-steps-item-icon {\n display: inline-block;\n margin-left: 42px;\n}\n.ant-steps-label-vertical .ant-steps-item-title {\n padding-right: 0;\n padding-left: 0;\n}\n.ant-steps-label-vertical .ant-steps-item-title::after {\n display: none;\n}\n.ant-steps-label-vertical .ant-steps-item-subtitle {\n display: block;\n margin-bottom: 4px;\n margin-left: 0;\n line-height: 1.5715;\n}\n.ant-steps-label-vertical.ant-steps-small:not(.ant-steps-dot) .ant-steps-item-icon {\n margin-left: 46px;\n}\n.ant-steps-dot .ant-steps-item-title,\n.ant-steps-dot.ant-steps-small .ant-steps-item-title {\n line-height: 1.5715;\n}\n.ant-steps-dot .ant-steps-item-tail,\n.ant-steps-dot.ant-steps-small .ant-steps-item-tail {\n top: 2px;\n width: 100%;\n margin: 0 0 0 70px;\n padding: 0;\n}\n.ant-steps-dot .ant-steps-item-tail::after,\n.ant-steps-dot.ant-steps-small .ant-steps-item-tail::after {\n width: calc(100% - 20px);\n height: 3px;\n margin-left: 12px;\n}\n.ant-steps-dot .ant-steps-item:first-child .ant-steps-icon-dot,\n.ant-steps-dot.ant-steps-small .ant-steps-item:first-child .ant-steps-icon-dot {\n left: 2px;\n}\n.ant-steps-dot .ant-steps-item-icon,\n.ant-steps-dot.ant-steps-small .ant-steps-item-icon {\n width: 8px;\n height: 8px;\n margin-left: 67px;\n padding-right: 0;\n line-height: 8px;\n background: transparent;\n border: 0;\n}\n.ant-steps-dot .ant-steps-item-icon .ant-steps-icon-dot,\n.ant-steps-dot.ant-steps-small .ant-steps-item-icon .ant-steps-icon-dot {\n position: relative;\n float: left;\n width: 100%;\n height: 100%;\n border-radius: 100px;\n transition: all 0.3s;\n /* expand hover area */\n}\n.ant-steps-dot .ant-steps-item-icon .ant-steps-icon-dot::after,\n.ant-steps-dot.ant-steps-small .ant-steps-item-icon .ant-steps-icon-dot::after {\n position: absolute;\n top: -12px;\n left: -26px;\n width: 60px;\n height: 32px;\n background: rgba(0, 0, 0, 0.001);\n content: '';\n}\n.ant-steps-dot .ant-steps-item-content,\n.ant-steps-dot.ant-steps-small .ant-steps-item-content {\n width: 140px;\n}\n.ant-steps-dot .ant-steps-item-process .ant-steps-item-icon,\n.ant-steps-dot.ant-steps-small .ant-steps-item-process .ant-steps-item-icon {\n position: relative;\n top: -1px;\n width: 10px;\n height: 10px;\n line-height: 10px;\n background: none;\n}\n.ant-steps-dot .ant-steps-item-process .ant-steps-icon:first-child .ant-steps-icon-dot,\n.ant-steps-dot.ant-steps-small .ant-steps-item-process .ant-steps-icon:first-child .ant-steps-icon-dot {\n left: 0;\n}\n.ant-steps-vertical.ant-steps-dot .ant-steps-item-icon {\n margin-top: 13px;\n margin-left: 0;\n background: none;\n}\n.ant-steps-vertical.ant-steps-dot .ant-steps-item > .ant-steps-item-container > .ant-steps-item-tail {\n top: 6.5px;\n left: -9px;\n margin: 0;\n padding: 22px 0 4px;\n}\n.ant-steps-vertical.ant-steps-dot.ant-steps-small .ant-steps-item-icon {\n margin-top: 10px;\n}\n.ant-steps-vertical.ant-steps-dot.ant-steps-small .ant-steps-item > .ant-steps-item-container > .ant-steps-item-tail {\n top: 3.5px;\n}\n.ant-steps-vertical.ant-steps-dot .ant-steps-item:first-child .ant-steps-icon-dot {\n left: 0;\n}\n.ant-steps-vertical.ant-steps-dot .ant-steps-item-content {\n width: inherit;\n}\n.ant-steps-vertical.ant-steps-dot .ant-steps-item-process .ant-steps-item-container .ant-steps-item-icon .ant-steps-icon-dot {\n top: -1px;\n left: -1px;\n}\n.ant-steps-navigation {\n padding-top: 12px;\n}\n.ant-steps-navigation.ant-steps-small .ant-steps-item-container {\n margin-left: -12px;\n}\n.ant-steps-navigation .ant-steps-item {\n overflow: visible;\n text-align: center;\n}\n.ant-steps-navigation .ant-steps-item-container {\n display: inline-block;\n height: 100%;\n margin-left: -16px;\n padding-bottom: 12px;\n text-align: left;\n transition: opacity 0.3s;\n}\n.ant-steps-navigation .ant-steps-item-container .ant-steps-item-content {\n max-width: auto;\n}\n.ant-steps-navigation .ant-steps-item-container .ant-steps-item-title {\n max-width: 100%;\n padding-right: 0;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.ant-steps-navigation .ant-steps-item-container .ant-steps-item-title::after {\n display: none;\n}\n.ant-steps-navigation .ant-steps-item:not(.ant-steps-item-active) .ant-steps-item-container[role='button'] {\n cursor: pointer;\n}\n.ant-steps-navigation .ant-steps-item:not(.ant-steps-item-active) .ant-steps-item-container[role='button']:hover {\n opacity: 0.85;\n}\n.ant-steps-navigation .ant-steps-item:last-child {\n flex: 1;\n}\n.ant-steps-navigation .ant-steps-item:last-child::after {\n display: none;\n}\n.ant-steps-navigation .ant-steps-item::after {\n position: absolute;\n top: 50%;\n left: 100%;\n display: inline-block;\n width: 12px;\n height: 12px;\n margin-top: -14px;\n margin-left: -2px;\n border: 1px solid rgba(0, 0, 0, 0.25);\n border-bottom: none;\n border-left: none;\n transform: rotate(45deg);\n content: '';\n}\n.ant-steps-navigation .ant-steps-item::before {\n position: absolute;\n bottom: 0;\n left: 50%;\n display: inline-block;\n width: 0;\n height: 2px;\n background-color: #5b5ce1;\n transition: width 0.3s, left 0.3s;\n transition-timing-function: ease-out;\n content: '';\n}\n.ant-steps-navigation .ant-steps-item.ant-steps-item-active::before {\n left: 0;\n width: 100%;\n}\n.ant-steps-navigation.ant-steps-vertical > .ant-steps-item {\n margin-right: 0 !important;\n}\n.ant-steps-navigation.ant-steps-vertical > .ant-steps-item::before {\n display: none;\n}\n.ant-steps-navigation.ant-steps-vertical > .ant-steps-item.ant-steps-item-active::before {\n top: 0;\n right: 0;\n left: unset;\n display: block;\n width: 3px;\n height: calc(100% - 24px);\n}\n.ant-steps-navigation.ant-steps-vertical > .ant-steps-item::after {\n position: relative;\n top: -2px;\n left: 50%;\n display: block;\n width: 8px;\n height: 8px;\n margin-bottom: 8px;\n text-align: center;\n transform: rotate(135deg);\n}\n.ant-steps-navigation.ant-steps-vertical > .ant-steps-item > .ant-steps-item-container > .ant-steps-item-tail {\n visibility: hidden;\n}\n.ant-steps-navigation.ant-steps-horizontal > .ant-steps-item > .ant-steps-item-container > .ant-steps-item-tail {\n visibility: hidden;\n}\n.ant-steps-rtl {\n direction: rtl;\n}\n.ant-steps.ant-steps-rtl .ant-steps-item-icon {\n margin-right: 0;\n margin-left: 8px;\n}\n.ant-steps-rtl .ant-steps-item-tail {\n right: 0;\n left: auto;\n}\n.ant-steps-rtl .ant-steps-item-title {\n padding-right: 0;\n padding-left: 16px;\n}\n.ant-steps-rtl .ant-steps-item-title .ant-steps-item-subtitle {\n float: left;\n margin-right: 8px;\n margin-left: 0;\n}\n.ant-steps-rtl .ant-steps-item-title::after {\n right: 100%;\n left: auto;\n}\n.ant-steps-rtl.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item {\n padding-right: 16px;\n padding-left: 0;\n}\n.ant-steps-rtl.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item:first-child {\n padding-right: 0;\n}\n.ant-steps-rtl.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item:last-child .ant-steps-item-title {\n padding-left: 0;\n}\n.ant-steps-rtl .ant-steps-item-custom .ant-steps-item-icon > .ant-steps-icon {\n right: 0.5px;\n left: auto;\n}\n.ant-steps-rtl.ant-steps-navigation.ant-steps-small .ant-steps-item-container {\n margin-right: -12px;\n margin-left: 0;\n}\n.ant-steps-rtl.ant-steps-navigation .ant-steps-item-container {\n margin-right: -16px;\n margin-left: 0;\n text-align: right;\n}\n.ant-steps-rtl.ant-steps-navigation .ant-steps-item-container .ant-steps-item-title {\n padding-left: 0;\n}\n.ant-steps-rtl.ant-steps-navigation .ant-steps-item::after {\n right: 100%;\n left: auto;\n margin-right: -2px;\n margin-left: 0;\n transform: rotate(225deg);\n}\n.ant-steps-rtl.ant-steps-small.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item {\n padding-right: 12px;\n padding-left: 0;\n}\n.ant-steps-rtl.ant-steps-small.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item:first-child {\n padding-right: 0;\n}\n.ant-steps-rtl.ant-steps-small .ant-steps-item-title {\n padding-right: 0;\n padding-left: 12px;\n}\n.ant-steps-rtl.ant-steps-vertical > .ant-steps-item .ant-steps-item-icon {\n float: right;\n margin-right: 0;\n margin-left: 16px;\n}\n.ant-steps-rtl.ant-steps-vertical > .ant-steps-item > .ant-steps-item-container > .ant-steps-item-tail {\n right: 16px;\n left: auto;\n}\n.ant-steps-rtl.ant-steps-vertical.ant-steps-small .ant-steps-item-container .ant-steps-item-tail {\n right: 12px;\n left: auto;\n}\n.ant-steps-rtl.ant-steps-label-vertical .ant-steps-item-title {\n padding-left: 0;\n}\n.ant-steps-rtl.ant-steps-dot .ant-steps-item-tail,\n.ant-steps-rtl.ant-steps-dot.ant-steps-small .ant-steps-item-tail {\n margin: 0 70px 0 0;\n}\n.ant-steps-rtl.ant-steps-dot .ant-steps-item-tail::after,\n.ant-steps-rtl.ant-steps-dot.ant-steps-small .ant-steps-item-tail::after {\n margin-right: 12px;\n margin-left: 0;\n}\n.ant-steps-rtl.ant-steps-dot .ant-steps-item:first-child .ant-steps-icon-dot,\n.ant-steps-rtl.ant-steps-dot.ant-steps-small .ant-steps-item:first-child .ant-steps-icon-dot {\n right: 2px;\n left: auto;\n}\n.ant-steps-rtl.ant-steps-dot .ant-steps-item-icon,\n.ant-steps-rtl.ant-steps-dot.ant-steps-small .ant-steps-item-icon {\n margin-right: 67px;\n margin-left: 0;\n}\n.ant-steps-dot .ant-steps-item-icon .ant-steps-icon-dot,\n.ant-steps-dot.ant-steps-small .ant-steps-item-icon .ant-steps-icon-dot {\n /* expand hover area */\n}\n.ant-steps-rtl.ant-steps-dot .ant-steps-item-icon .ant-steps-icon-dot,\n.ant-steps-rtl.ant-steps-dot.ant-steps-small .ant-steps-item-icon .ant-steps-icon-dot {\n float: right;\n}\n.ant-steps-rtl.ant-steps-dot .ant-steps-item-icon .ant-steps-icon-dot::after,\n.ant-steps-rtl.ant-steps-dot.ant-steps-small .ant-steps-item-icon .ant-steps-icon-dot::after {\n right: -26px;\n left: auto;\n}\n.ant-steps-rtl.ant-steps-vertical.ant-steps-dot .ant-steps-item-icon {\n margin-right: 0;\n margin-left: 16px;\n}\n.ant-steps-rtl.ant-steps-vertical.ant-steps-dot .ant-steps-item > .ant-steps-item-container > .ant-steps-item-tail {\n right: -9px;\n left: auto;\n}\n.ant-steps-rtl.ant-steps-vertical.ant-steps-dot .ant-steps-item:first-child .ant-steps-icon-dot {\n right: 0;\n left: auto;\n}\n.ant-steps-rtl.ant-steps-vertical.ant-steps-dot .ant-steps-item-process .ant-steps-icon-dot {\n right: -2px;\n left: auto;\n}\n.ant-steps-rtl.ant-steps-with-progress.ant-steps-horizontal.ant-steps-label-horizontal .ant-steps-item:first-child {\n padding-right: 4px;\n padding-left: 0;\n}\n.ant-steps-rtl.ant-steps-with-progress.ant-steps-horizontal.ant-steps-label-horizontal .ant-steps-item:first-child.ant-steps-item-active {\n padding-right: 4px;\n}\n.ant-steps-with-progress .ant-steps-item {\n padding-top: 4px;\n}\n.ant-steps-with-progress .ant-steps-item .ant-steps-item-tail {\n top: 4px !important;\n}\n.ant-steps-with-progress.ant-steps-horizontal .ant-steps-item:first-child {\n padding-bottom: 4px;\n padding-left: 4px;\n}\n.ant-steps-with-progress.ant-steps-label-vertical .ant-steps-item .ant-steps-item-tail {\n top: 14px !important;\n}\n.ant-steps-with-progress .ant-steps-item-icon {\n position: relative;\n}\n.ant-steps-with-progress .ant-steps-item-icon .ant-progress {\n position: absolute;\n top: -5px;\n right: -5px;\n bottom: -5px;\n left: -5px;\n}\n.ant-switch {\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n display: inline-block;\n box-sizing: border-box;\n min-width: 44px;\n height: 22px;\n line-height: 22px;\n vertical-align: middle;\n background-color: rgba(0, 0, 0, 0.25);\n border: 0;\n border-radius: 100px;\n cursor: pointer;\n transition: all 0.2s;\n user-select: none;\n}\n.ant-switch:focus {\n outline: 0;\n box-shadow: 0 0 0 2px rgba(0, 0, 0, 0.1);\n}\n.ant-switch-checked:focus {\n box-shadow: 0 0 0 2px #f0f2ff;\n}\n.ant-switch:focus:hover {\n box-shadow: none;\n}\n.ant-switch-checked {\n background-color: #5b5ce1;\n}\n.ant-switch-loading,\n.ant-switch-disabled {\n cursor: not-allowed;\n opacity: 0.4;\n}\n.ant-switch-loading *,\n.ant-switch-disabled * {\n box-shadow: none;\n cursor: not-allowed;\n}\n.ant-switch-inner {\n display: block;\n margin: 0 7px 0 25px;\n color: #fff;\n font-size: 12px;\n transition: margin 0.2s;\n}\n.ant-switch-checked .ant-switch-inner {\n margin: 0 25px 0 7px;\n}\n.ant-switch-handle {\n position: absolute;\n top: 2px;\n left: 2px;\n width: 18px;\n height: 18px;\n transition: all 0.2s ease-in-out;\n}\n.ant-switch-handle::before {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background-color: #fff;\n border-radius: 9px;\n box-shadow: 0 2px 4px 0 rgba(0, 35, 11, 0.2);\n transition: all 0.2s ease-in-out;\n content: '';\n}\n.ant-switch-checked .ant-switch-handle {\n left: calc(100% - 18px - 2px);\n}\n.ant-switch:not(.ant-switch-disabled):active .ant-switch-handle::before {\n right: -30%;\n left: 0;\n}\n.ant-switch:not(.ant-switch-disabled):active.ant-switch-checked .ant-switch-handle::before {\n right: 0;\n left: -30%;\n}\n.ant-switch-loading-icon.anticon {\n position: relative;\n top: 2px;\n color: rgba(0, 0, 0, 0.65);\n vertical-align: top;\n}\n.ant-switch-checked .ant-switch-loading-icon {\n color: #5b5ce1;\n}\n.ant-switch-small {\n min-width: 28px;\n height: 16px;\n line-height: 16px;\n}\n.ant-switch-small .ant-switch-inner {\n margin: 0 5px 0 18px;\n font-size: 12px;\n}\n.ant-switch-small .ant-switch-handle {\n width: 12px;\n height: 12px;\n}\n.ant-switch-small .ant-switch-loading-icon {\n top: 1.5px;\n font-size: 9px;\n}\n.ant-switch-small.ant-switch-checked .ant-switch-inner {\n margin: 0 18px 0 5px;\n}\n.ant-switch-small.ant-switch-checked .ant-switch-handle {\n left: calc(100% - 12px - 2px);\n}\n.ant-switch-rtl {\n direction: rtl;\n}\n.ant-switch-rtl .ant-switch-inner {\n margin: 0 25px 0 7px;\n}\n.ant-switch-rtl .ant-switch-handle {\n right: 2px;\n left: auto;\n}\n.ant-switch-rtl:not(.ant-switch-rtl-disabled):active .ant-switch-handle::before {\n right: 0;\n left: -30%;\n}\n.ant-switch-rtl:not(.ant-switch-rtl-disabled):active.ant-switch-checked .ant-switch-handle::before {\n right: -30%;\n left: 0;\n}\n.ant-switch-rtl.ant-switch-checked .ant-switch-inner {\n margin: 0 7px 0 25px;\n}\n.ant-switch-rtl.ant-switch-checked .ant-switch-handle {\n right: calc(100% - 18px - 2px);\n}\n.ant-switch-rtl.ant-switch-small.ant-switch-checked .ant-switch-handle {\n right: calc(100% - 12px - 2px);\n}\n.ant-table.ant-table-middle {\n font-size: 14px;\n}\n.ant-table.ant-table-middle .ant-table-title,\n.ant-table.ant-table-middle .ant-table-footer,\n.ant-table.ant-table-middle .ant-table-thead > tr > th,\n.ant-table.ant-table-middle .ant-table-tbody > tr > td,\n.ant-table.ant-table-middle tfoot > tr > th,\n.ant-table.ant-table-middle tfoot > tr > td {\n padding: 12px 8px;\n}\n.ant-table.ant-table-middle .ant-table-filter-trigger {\n margin-right: -4px;\n}\n.ant-table.ant-table-middle .ant-table-expanded-row-fixed {\n margin: -12px -8px;\n}\n.ant-table.ant-table-middle .ant-table-tbody .ant-table-wrapper:only-child .ant-table {\n margin: -12px -8px -12px 40px;\n}\n.ant-table.ant-table-middle .ant-table-selection-column {\n padding-inline-start: 2px;\n}\n.ant-table.ant-table-small {\n font-size: 14px;\n}\n.ant-table.ant-table-small .ant-table-title,\n.ant-table.ant-table-small .ant-table-footer,\n.ant-table.ant-table-small .ant-table-thead > tr > th,\n.ant-table.ant-table-small .ant-table-tbody > tr > td,\n.ant-table.ant-table-small tfoot > tr > th,\n.ant-table.ant-table-small tfoot > tr > td {\n padding: 8px 8px;\n}\n.ant-table.ant-table-small .ant-table-filter-trigger {\n margin-right: -4px;\n}\n.ant-table.ant-table-small .ant-table-expanded-row-fixed {\n margin: -8px -8px;\n}\n.ant-table.ant-table-small .ant-table-tbody .ant-table-wrapper:only-child .ant-table {\n margin: -8px -8px -8px 40px;\n}\n.ant-table.ant-table-small .ant-table-selection-column {\n padding-inline-start: 2px;\n}\n.ant-table.ant-table-bordered > .ant-table-title {\n border: 1px solid #f0f0f0;\n border-bottom: 0;\n}\n.ant-table.ant-table-bordered > .ant-table-container {\n border-left: 1px solid #f0f0f0;\n}\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-content > table > thead > tr > th,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-header > table > thead > tr > th,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-body > table > thead > tr > th,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-summary > table > thead > tr > th,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-content > table > tbody > tr > td,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-header > table > tbody > tr > td,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-body > table > tbody > tr > td,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-summary > table > tbody > tr > td,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-content > table > tfoot > tr > th,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-header > table > tfoot > tr > th,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-body > table > tfoot > tr > th,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-summary > table > tfoot > tr > th,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-content > table > tfoot > tr > td,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-header > table > tfoot > tr > td,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-body > table > tfoot > tr > td,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-summary > table > tfoot > tr > td {\n border-right: 1px solid #f0f0f0;\n}\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-content > table > thead > tr:not(:last-child) > th,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-header > table > thead > tr:not(:last-child) > th,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-body > table > thead > tr:not(:last-child) > th,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-summary > table > thead > tr:not(:last-child) > th {\n border-bottom: 1px solid #f0f0f0;\n}\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-content > table > thead > tr > th::before,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-header > table > thead > tr > th::before,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-body > table > thead > tr > th::before,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-summary > table > thead > tr > th::before {\n background-color: transparent !important;\n}\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-content > table > thead > tr > .ant-table-cell-fix-right-first::after,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-header > table > thead > tr > .ant-table-cell-fix-right-first::after,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-body > table > thead > tr > .ant-table-cell-fix-right-first::after,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-summary > table > thead > tr > .ant-table-cell-fix-right-first::after,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-content > table > tbody > tr > .ant-table-cell-fix-right-first::after,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-header > table > tbody > tr > .ant-table-cell-fix-right-first::after,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-body > table > tbody > tr > .ant-table-cell-fix-right-first::after,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-summary > table > tbody > tr > .ant-table-cell-fix-right-first::after,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-content > table > tfoot > tr > .ant-table-cell-fix-right-first::after,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-header > table > tfoot > tr > .ant-table-cell-fix-right-first::after,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-body > table > tfoot > tr > .ant-table-cell-fix-right-first::after,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-summary > table > tfoot > tr > .ant-table-cell-fix-right-first::after {\n border-right: 1px solid #f0f0f0;\n}\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-content > table > tbody > tr > td > .ant-table-expanded-row-fixed,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-header > table > tbody > tr > td > .ant-table-expanded-row-fixed,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-body > table > tbody > tr > td > .ant-table-expanded-row-fixed,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-summary > table > tbody > tr > td > .ant-table-expanded-row-fixed {\n margin: -16px -17px;\n}\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-content > table > tbody > tr > td > .ant-table-expanded-row-fixed::after,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-header > table > tbody > tr > td > .ant-table-expanded-row-fixed::after,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-body > table > tbody > tr > td > .ant-table-expanded-row-fixed::after,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-summary > table > tbody > tr > td > .ant-table-expanded-row-fixed::after {\n position: absolute;\n top: 0;\n right: 1px;\n bottom: 0;\n border-right: 1px solid #f0f0f0;\n content: '';\n}\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-content > table,\n.ant-table.ant-table-bordered > .ant-table-container > .ant-table-header > table {\n border-top: 1px solid #f0f0f0;\n}\n.ant-table.ant-table-bordered.ant-table-scroll-horizontal > .ant-table-container > .ant-table-body > table > tbody > tr.ant-table-expanded-row > td,\n.ant-table.ant-table-bordered.ant-table-scroll-horizontal > .ant-table-container > .ant-table-body > table > tbody > tr.ant-table-placeholder > td {\n border-right: 0;\n}\n.ant-table.ant-table-bordered.ant-table-middle > .ant-table-container > .ant-table-content > table > tbody > tr > td > .ant-table-expanded-row-fixed,\n.ant-table.ant-table-bordered.ant-table-middle > .ant-table-container > .ant-table-body > table > tbody > tr > td > .ant-table-expanded-row-fixed {\n margin: -12px -9px;\n}\n.ant-table.ant-table-bordered.ant-table-small > .ant-table-container > .ant-table-content > table > tbody > tr > td > .ant-table-expanded-row-fixed,\n.ant-table.ant-table-bordered.ant-table-small > .ant-table-container > .ant-table-body > table > tbody > tr > td > .ant-table-expanded-row-fixed {\n margin: -8px -9px;\n}\n.ant-table.ant-table-bordered > .ant-table-footer {\n border: 1px solid #f0f0f0;\n border-top: 0;\n}\n.ant-table-cell .ant-table-container:first-child {\n border-top: 0;\n}\n.ant-table-cell-scrollbar:not([rowspan]) {\n box-shadow: 0 1px 0 1px #fafafa;\n}\n.ant-table-wrapper {\n clear: both;\n max-width: 100%;\n}\n.ant-table-wrapper::before {\n display: table;\n content: '';\n}\n.ant-table-wrapper::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-table-wrapper::before {\n display: table;\n content: '';\n}\n.ant-table-wrapper::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-table {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n font-size: 14px;\n background: #fff;\n border-radius: 5px;\n}\n.ant-table table {\n width: 100%;\n text-align: left;\n border-radius: 5px 5px 0 0;\n border-collapse: separate;\n border-spacing: 0;\n}\n.ant-table-thead > tr > th,\n.ant-table-tbody > tr > td,\n.ant-table tfoot > tr > th,\n.ant-table tfoot > tr > td {\n position: relative;\n padding: 16px 16px;\n overflow-wrap: break-word;\n}\n.ant-table-cell-ellipsis {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n word-break: keep-all;\n}\n.ant-table-cell-ellipsis.ant-table-cell-fix-left-last,\n.ant-table-cell-ellipsis.ant-table-cell-fix-right-first {\n overflow: visible;\n}\n.ant-table-cell-ellipsis.ant-table-cell-fix-left-last .ant-table-cell-content,\n.ant-table-cell-ellipsis.ant-table-cell-fix-right-first .ant-table-cell-content {\n display: block;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.ant-table-cell-ellipsis .ant-table-column-title {\n overflow: hidden;\n text-overflow: ellipsis;\n word-break: keep-all;\n}\n.ant-table-title {\n padding: 16px 16px;\n}\n.ant-table-footer {\n padding: 16px 16px;\n color: rgba(0, 0, 0, 0.85);\n background: #fafafa;\n}\n.ant-table-thead > tr > th {\n position: relative;\n color: rgba(0, 0, 0, 0.85);\n font-weight: 500;\n text-align: left;\n background: #fafafa;\n border-bottom: 1px solid #f0f0f0;\n transition: background 0.3s ease;\n}\n.ant-table-thead > tr > th[colspan]:not([colspan='1']) {\n text-align: center;\n}\n.ant-table-thead > tr > th:not(:last-child):not(.ant-table-selection-column):not(.ant-table-row-expand-icon-cell):not([colspan])::before {\n position: absolute;\n top: 50%;\n right: 0;\n width: 1px;\n height: 1.6em;\n background-color: rgba(0, 0, 0, 0.06);\n transform: translateY(-50%);\n transition: background-color 0.3s;\n content: '';\n}\n.ant-table-thead > tr:not(:last-child) > th[colspan] {\n border-bottom: 0;\n}\n.ant-table-tbody > tr > td {\n border-bottom: 1px solid #f0f0f0;\n transition: background 0.3s;\n}\n.ant-table-tbody > tr > td > .ant-table-wrapper:only-child .ant-table,\n.ant-table-tbody > tr > td > .ant-table-expanded-row-fixed > .ant-table-wrapper:only-child .ant-table {\n margin: -16px -16px -16px 32px;\n}\n.ant-table-tbody > tr > td > .ant-table-wrapper:only-child .ant-table-tbody > tr:last-child > td,\n.ant-table-tbody > tr > td > .ant-table-expanded-row-fixed > .ant-table-wrapper:only-child .ant-table-tbody > tr:last-child > td {\n border-bottom: 0;\n}\n.ant-table-tbody > tr > td > .ant-table-wrapper:only-child .ant-table-tbody > tr:last-child > td:first-child,\n.ant-table-tbody > tr > td > .ant-table-expanded-row-fixed > .ant-table-wrapper:only-child .ant-table-tbody > tr:last-child > td:first-child,\n.ant-table-tbody > tr > td > .ant-table-wrapper:only-child .ant-table-tbody > tr:last-child > td:last-child,\n.ant-table-tbody > tr > td > .ant-table-expanded-row-fixed > .ant-table-wrapper:only-child .ant-table-tbody > tr:last-child > td:last-child {\n border-radius: 0;\n}\n.ant-table-tbody > tr.ant-table-row:hover > td,\n.ant-table-tbody > tr > td.ant-table-cell-row-hover {\n background: #fafafa;\n}\n.ant-table-tbody > tr.ant-table-row-selected > td {\n background: #f0f2ff;\n border-color: rgba(0, 0, 0, 0.03);\n}\n.ant-table-tbody > tr.ant-table-row-selected:hover > td {\n background: #e6e9ff;\n}\n.ant-table-summary {\n position: relative;\n z-index: 2;\n background: #fff;\n}\ndiv.ant-table-summary {\n box-shadow: 0 -1px 0 #f0f0f0;\n}\n.ant-table-summary > tr > th,\n.ant-table-summary > tr > td {\n border-bottom: 1px solid #f0f0f0;\n}\n.ant-table-pagination.ant-pagination {\n margin: 16px 0;\n}\n.ant-table-pagination {\n display: flex;\n flex-wrap: wrap;\n row-gap: 8px;\n}\n.ant-table-pagination > * {\n flex: none;\n}\n.ant-table-pagination-left {\n justify-content: flex-start;\n}\n.ant-table-pagination-center {\n justify-content: center;\n}\n.ant-table-pagination-right {\n justify-content: flex-end;\n}\n.ant-table-thead th.ant-table-column-has-sorters {\n outline: none;\n cursor: pointer;\n transition: all 0.3s;\n}\n.ant-table-thead th.ant-table-column-has-sorters:hover {\n background: rgba(0, 0, 0, 0.04);\n}\n.ant-table-thead th.ant-table-column-has-sorters:hover::before {\n background-color: transparent !important;\n}\n.ant-table-thead th.ant-table-column-has-sorters:focus-visible {\n color: #5b5ce1;\n}\n.ant-table-thead th.ant-table-column-has-sorters.ant-table-cell-fix-left:hover,\n.ant-table-thead th.ant-table-column-has-sorters.ant-table-cell-fix-right:hover {\n background: #f5f5f5;\n}\n.ant-table-thead th.ant-table-column-sort {\n background: #f5f5f5;\n}\n.ant-table-thead th.ant-table-column-sort::before {\n background-color: transparent !important;\n}\ntd.ant-table-column-sort {\n background: #fafafa;\n}\n.ant-table-column-title {\n position: relative;\n z-index: 1;\n flex: 1;\n}\n.ant-table-column-sorters {\n display: flex;\n flex: auto;\n align-items: center;\n justify-content: space-between;\n}\n.ant-table-column-sorters::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 100%;\n content: '';\n}\n.ant-table-column-sorter {\n margin-left: 4px;\n color: #bfbfbf;\n font-size: 0;\n transition: color 0.3s;\n}\n.ant-table-column-sorter-inner {\n display: inline-flex;\n flex-direction: column;\n align-items: center;\n}\n.ant-table-column-sorter-up,\n.ant-table-column-sorter-down {\n font-size: 11px;\n}\n.ant-table-column-sorter-up.active,\n.ant-table-column-sorter-down.active {\n color: #5b5ce1;\n}\n.ant-table-column-sorter-up + .ant-table-column-sorter-down {\n margin-top: -0.3em;\n}\n.ant-table-column-sorters:hover .ant-table-column-sorter {\n color: #a6a6a6;\n}\n.ant-table-filter-column {\n display: flex;\n justify-content: space-between;\n}\n.ant-table-filter-trigger {\n position: relative;\n display: flex;\n align-items: center;\n margin: -4px -8px -4px 4px;\n padding: 0 4px;\n color: #bfbfbf;\n font-size: 12px;\n border-radius: 5px;\n cursor: pointer;\n transition: all 0.3s;\n}\n.ant-table-filter-trigger:hover {\n color: rgba(0, 0, 0, 0.45);\n background: rgba(0, 0, 0, 0.04);\n}\n.ant-table-filter-trigger.active {\n color: #5b5ce1;\n}\n.ant-table-filter-dropdown {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n min-width: 120px;\n background-color: #fff;\n border-radius: 5px;\n box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05);\n}\n.ant-table-filter-dropdown .ant-dropdown-menu {\n max-height: 264px;\n overflow-x: hidden;\n border: 0;\n box-shadow: none;\n}\n.ant-table-filter-dropdown .ant-dropdown-menu:empty::after {\n display: block;\n padding: 8px 0;\n color: rgba(0, 0, 0, 0.25);\n font-size: 12px;\n text-align: center;\n content: 'Not Found';\n}\n.ant-table-filter-dropdown-tree {\n padding: 8px 8px 0;\n}\n.ant-table-filter-dropdown-tree .ant-tree-treenode .ant-tree-node-content-wrapper:hover {\n background-color: #f5f5f5;\n}\n.ant-table-filter-dropdown-tree .ant-tree-treenode-checkbox-checked .ant-tree-node-content-wrapper,\n.ant-table-filter-dropdown-tree .ant-tree-treenode-checkbox-checked .ant-tree-node-content-wrapper:hover {\n background-color: #f0f2ff;\n}\n.ant-table-filter-dropdown-search {\n padding: 8px;\n border-bottom: 1px #f0f0f0 solid;\n}\n.ant-table-filter-dropdown-search-input input {\n min-width: 140px;\n}\n.ant-table-filter-dropdown-search-input .anticon {\n color: rgba(0, 0, 0, 0.25);\n}\n.ant-table-filter-dropdown-checkall {\n width: 100%;\n margin-bottom: 4px;\n margin-left: 4px;\n}\n.ant-table-filter-dropdown-submenu > ul {\n max-height: calc(100vh - 130px);\n overflow-x: hidden;\n overflow-y: auto;\n}\n.ant-table-filter-dropdown .ant-checkbox-wrapper + span,\n.ant-table-filter-dropdown-submenu .ant-checkbox-wrapper + span {\n padding-left: 8px;\n}\n.ant-table-filter-dropdown-btns {\n display: flex;\n justify-content: space-between;\n padding: 7px 8px;\n overflow: hidden;\n background-color: inherit;\n border-top: 1px solid #f0f0f0;\n}\n.ant-table-selection-col {\n width: 32px;\n}\n.ant-table-bordered .ant-table-selection-col {\n width: 50px;\n}\ntable tr th.ant-table-selection-column,\ntable tr td.ant-table-selection-column {\n padding-right: 8px;\n padding-left: 8px;\n text-align: center;\n}\ntable tr th.ant-table-selection-column .ant-radio-wrapper,\ntable tr td.ant-table-selection-column .ant-radio-wrapper {\n margin-right: 0;\n}\ntable tr th.ant-table-selection-column.ant-table-cell-fix-left {\n z-index: 3;\n}\ntable tr th.ant-table-selection-column::after {\n background-color: transparent !important;\n}\n.ant-table-selection {\n position: relative;\n display: inline-flex;\n flex-direction: column;\n}\n.ant-table-selection-extra {\n position: absolute;\n top: 0;\n z-index: 1;\n cursor: pointer;\n transition: all 0.3s;\n margin-inline-start: 100%;\n padding-inline-start: 4px;\n}\n.ant-table-selection-extra .anticon {\n color: #bfbfbf;\n font-size: 10px;\n}\n.ant-table-selection-extra .anticon:hover {\n color: #a6a6a6;\n}\n.ant-table-expand-icon-col {\n width: 48px;\n}\n.ant-table-row-expand-icon-cell {\n text-align: center;\n}\n.ant-table-row-expand-icon-cell .ant-table-row-expand-icon {\n display: inline-flex;\n float: none;\n vertical-align: sub;\n}\n.ant-table-row-indent {\n float: left;\n height: 1px;\n}\n.ant-table-row-expand-icon {\n color: #5b5ce1;\n outline: none;\n cursor: pointer;\n transition: color 0.3s;\n position: relative;\n float: left;\n box-sizing: border-box;\n width: 17px;\n height: 17px;\n padding: 0;\n color: inherit;\n line-height: 17px;\n background: #fff;\n border: 1px solid #f0f0f0;\n border-radius: 5px;\n transform: scale(0.94117647);\n transition: all 0.3s;\n user-select: none;\n}\n.ant-table-row-expand-icon:focus-visible,\n.ant-table-row-expand-icon:hover {\n color: #8588ed;\n}\n.ant-table-row-expand-icon:active {\n color: #4541ba;\n}\n.ant-table-row-expand-icon:focus,\n.ant-table-row-expand-icon:hover,\n.ant-table-row-expand-icon:active {\n border-color: currentcolor;\n}\n.ant-table-row-expand-icon::before,\n.ant-table-row-expand-icon::after {\n position: absolute;\n background: currentcolor;\n transition: transform 0.3s ease-out;\n content: '';\n}\n.ant-table-row-expand-icon::before {\n top: 7px;\n right: 3px;\n left: 3px;\n height: 1px;\n}\n.ant-table-row-expand-icon::after {\n top: 3px;\n bottom: 3px;\n left: 7px;\n width: 1px;\n transform: rotate(90deg);\n}\n.ant-table-row-expand-icon-collapsed::before {\n transform: rotate(-180deg);\n}\n.ant-table-row-expand-icon-collapsed::after {\n transform: rotate(0deg);\n}\n.ant-table-row-expand-icon-spaced {\n background: transparent;\n border: 0;\n visibility: hidden;\n}\n.ant-table-row-expand-icon-spaced::before,\n.ant-table-row-expand-icon-spaced::after {\n display: none;\n content: none;\n}\n.ant-table-row-indent + .ant-table-row-expand-icon {\n margin-top: 2.5005px;\n margin-right: 8px;\n}\ntr.ant-table-expanded-row > td,\ntr.ant-table-expanded-row:hover > td {\n background: #fbfbfb;\n}\ntr.ant-table-expanded-row .ant-descriptions-view {\n display: flex;\n}\ntr.ant-table-expanded-row .ant-descriptions-view table {\n flex: auto;\n width: auto;\n}\n.ant-table .ant-table-expanded-row-fixed {\n position: relative;\n margin: -16px -16px;\n padding: 16px 16px;\n}\n.ant-table-tbody > tr.ant-table-placeholder {\n text-align: center;\n}\n.ant-table-empty .ant-table-tbody > tr.ant-table-placeholder {\n color: rgba(0, 0, 0, 0.25);\n}\n.ant-table-tbody > tr.ant-table-placeholder:hover > td {\n background: #fff;\n}\n.ant-table-cell-fix-left,\n.ant-table-cell-fix-right {\n position: sticky !important;\n z-index: 2;\n background: #fff;\n}\n.ant-table-cell-fix-left-first::after,\n.ant-table-cell-fix-left-last::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: -1px;\n width: 30px;\n transform: translateX(100%);\n transition: box-shadow 0.3s;\n content: '';\n pointer-events: none;\n}\n.ant-table-cell-fix-left-all::after {\n display: none;\n}\n.ant-table-cell-fix-right-first::after,\n.ant-table-cell-fix-right-last::after {\n position: absolute;\n top: 0;\n bottom: -1px;\n left: 0;\n width: 30px;\n transform: translateX(-100%);\n transition: box-shadow 0.3s;\n content: '';\n pointer-events: none;\n}\n.ant-table .ant-table-container::before,\n.ant-table .ant-table-container::after {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: calc(calc(2 + 1) + 1);\n width: 30px;\n transition: box-shadow 0.3s;\n content: '';\n pointer-events: none;\n}\n.ant-table .ant-table-container::before {\n left: 0;\n}\n.ant-table .ant-table-container::after {\n right: 0;\n}\n.ant-table-ping-left:not(.ant-table-has-fix-left) > .ant-table-container {\n position: relative;\n}\n.ant-table-ping-left:not(.ant-table-has-fix-left) > .ant-table-container::before {\n box-shadow: inset 10px 0 8px -8px rgba(0, 0, 0, 0.15);\n}\n.ant-table-ping-left .ant-table-cell-fix-left-first::after,\n.ant-table-ping-left .ant-table-cell-fix-left-last::after {\n box-shadow: inset 10px 0 8px -8px rgba(0, 0, 0, 0.15);\n}\n.ant-table-ping-left .ant-table-cell-fix-left-last::before {\n background-color: transparent !important;\n}\n.ant-table-ping-right:not(.ant-table-has-fix-right) > .ant-table-container {\n position: relative;\n}\n.ant-table-ping-right:not(.ant-table-has-fix-right) > .ant-table-container::after {\n box-shadow: inset -10px 0 8px -8px rgba(0, 0, 0, 0.15);\n}\n.ant-table-ping-right .ant-table-cell-fix-right-first::after,\n.ant-table-ping-right .ant-table-cell-fix-right-last::after {\n box-shadow: inset -10px 0 8px -8px rgba(0, 0, 0, 0.15);\n}\n.ant-table-sticky-holder {\n position: sticky;\n z-index: calc(2 + 1);\n background: #fff;\n}\n.ant-table-sticky-scroll {\n position: sticky;\n bottom: 0;\n z-index: calc(2 + 1);\n display: flex;\n align-items: center;\n background: #ffffff;\n border-top: 1px solid #f0f0f0;\n opacity: 0.6;\n}\n.ant-table-sticky-scroll:hover {\n transform-origin: center bottom;\n}\n.ant-table-sticky-scroll-bar {\n height: 8px;\n background-color: rgba(0, 0, 0, 0.35);\n border-radius: 4px;\n}\n.ant-table-sticky-scroll-bar:hover {\n background-color: rgba(0, 0, 0, 0.8);\n}\n.ant-table-sticky-scroll-bar-active {\n background-color: rgba(0, 0, 0, 0.8);\n}\n@media all and (-ms-high-contrast: none) {\n .ant-table-ping-left .ant-table-cell-fix-left-last::after {\n box-shadow: none !important;\n }\n .ant-table-ping-right .ant-table-cell-fix-right-first::after {\n box-shadow: none !important;\n }\n}\n.ant-table {\n /* title + table */\n /* table */\n /* table + footer */\n}\n.ant-table-title {\n border-radius: 5px 5px 0 0;\n}\n.ant-table-title + .ant-table-container {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n}\n.ant-table-title + .ant-table-container table {\n border-radius: 0;\n}\n.ant-table-title + .ant-table-container table > thead > tr:first-child th:first-child {\n border-radius: 0;\n}\n.ant-table-title + .ant-table-container table > thead > tr:first-child th:last-child {\n border-radius: 0;\n}\n.ant-table-container {\n border-top-left-radius: 5px;\n border-top-right-radius: 5px;\n}\n.ant-table-container table > thead > tr:first-child th:first-child {\n border-top-left-radius: 5px;\n}\n.ant-table-container table > thead > tr:first-child th:last-child {\n border-top-right-radius: 5px;\n}\n.ant-table-footer {\n border-radius: 0 0 5px 5px;\n}\n.ant-table-wrapper-rtl {\n direction: rtl;\n}\n.ant-table-rtl {\n direction: rtl;\n}\n.ant-table-wrapper-rtl .ant-table table {\n text-align: right;\n}\n.ant-table-wrapper-rtl .ant-table-thead > tr > th[colspan]:not([colspan='1']) {\n text-align: center;\n}\n.ant-table-wrapper-rtl .ant-table-thead > tr > th:not(:last-child):not(.ant-table-selection-column):not(.ant-table-row-expand-icon-cell):not([colspan])::before {\n right: auto;\n left: 0;\n}\n.ant-table-wrapper-rtl .ant-table-thead > tr > th {\n text-align: right;\n}\n.ant-table-tbody > tr .ant-table-wrapper:only-child .ant-table.ant-table-rtl {\n margin: -16px 33px -16px -16px;\n}\n.ant-table-wrapper.ant-table-wrapper-rtl .ant-table-pagination-left {\n justify-content: flex-end;\n}\n.ant-table-wrapper.ant-table-wrapper-rtl .ant-table-pagination-right {\n justify-content: flex-start;\n}\n.ant-table-wrapper-rtl .ant-table-column-sorter {\n margin-right: 4px;\n margin-left: 0;\n}\n.ant-table-wrapper-rtl .ant-table-filter-column-title {\n padding: 16px 16px 16px 2.3em;\n}\n.ant-table-rtl .ant-table-thead tr th.ant-table-column-has-sorters .ant-table-filter-column-title {\n padding: 0 0 0 2.3em;\n}\n.ant-table-wrapper-rtl .ant-table-filter-trigger {\n margin: -4px 4px -4px -8px;\n}\n.ant-dropdown-rtl .ant-table-filter-dropdown .ant-checkbox-wrapper + span,\n.ant-dropdown-rtl .ant-table-filter-dropdown-submenu .ant-checkbox-wrapper + span,\n.ant-dropdown-menu-submenu-rtl.ant-table-filter-dropdown .ant-checkbox-wrapper + span,\n.ant-dropdown-menu-submenu-rtl.ant-table-filter-dropdown-submenu .ant-checkbox-wrapper + span {\n padding-right: 8px;\n padding-left: 0;\n}\n.ant-table-wrapper-rtl .ant-table-selection {\n text-align: center;\n}\n.ant-table-wrapper-rtl .ant-table-row-indent {\n float: right;\n}\n.ant-table-wrapper-rtl .ant-table-row-expand-icon {\n float: right;\n}\n.ant-table-wrapper-rtl .ant-table-row-indent + .ant-table-row-expand-icon {\n margin-right: 0;\n margin-left: 8px;\n}\n.ant-table-wrapper-rtl .ant-table-row-expand-icon::after {\n transform: rotate(-90deg);\n}\n.ant-table-wrapper-rtl .ant-table-row-expand-icon-collapsed::before {\n transform: rotate(180deg);\n}\n.ant-table-wrapper-rtl .ant-table-row-expand-icon-collapsed::after {\n transform: rotate(0deg);\n}\n.ant-tabs-small > .ant-tabs-nav .ant-tabs-tab {\n padding: 8px 0;\n font-size: 14px;\n}\n.ant-tabs-large > .ant-tabs-nav .ant-tabs-tab {\n padding: 16px 0;\n font-size: 16px;\n}\n.ant-tabs-card.ant-tabs-small > .ant-tabs-nav .ant-tabs-tab {\n padding: 6px 16px;\n}\n.ant-tabs-card.ant-tabs-large > .ant-tabs-nav .ant-tabs-tab {\n padding: 7px 16px 6px;\n}\n.ant-tabs-rtl {\n direction: rtl;\n}\n.ant-tabs-rtl .ant-tabs-nav .ant-tabs-tab {\n margin: 0 0 0 32px;\n}\n.ant-tabs-rtl .ant-tabs-nav .ant-tabs-tab:last-of-type {\n margin-left: 0;\n}\n.ant-tabs-rtl .ant-tabs-nav .ant-tabs-tab .anticon {\n margin-right: 0;\n margin-left: 12px;\n}\n.ant-tabs-rtl .ant-tabs-nav .ant-tabs-tab .ant-tabs-tab-remove {\n margin-right: 8px;\n margin-left: -4px;\n}\n.ant-tabs-rtl .ant-tabs-nav .ant-tabs-tab .ant-tabs-tab-remove .anticon {\n margin: 0;\n}\n.ant-tabs-rtl.ant-tabs-left > .ant-tabs-nav {\n order: 1;\n}\n.ant-tabs-rtl.ant-tabs-left > .ant-tabs-content-holder {\n order: 0;\n}\n.ant-tabs-rtl.ant-tabs-right > .ant-tabs-nav {\n order: 0;\n}\n.ant-tabs-rtl.ant-tabs-right > .ant-tabs-content-holder {\n order: 1;\n}\n.ant-tabs-rtl.ant-tabs-card.ant-tabs-top > .ant-tabs-nav .ant-tabs-tab + .ant-tabs-tab,\n.ant-tabs-rtl.ant-tabs-card.ant-tabs-bottom > .ant-tabs-nav .ant-tabs-tab + .ant-tabs-tab,\n.ant-tabs-rtl.ant-tabs-card.ant-tabs-top > div > .ant-tabs-nav .ant-tabs-tab + .ant-tabs-tab,\n.ant-tabs-rtl.ant-tabs-card.ant-tabs-bottom > div > .ant-tabs-nav .ant-tabs-tab + .ant-tabs-tab {\n margin-right: 2px;\n margin-left: 0;\n}\n.ant-tabs-rtl.ant-tabs-card.ant-tabs-top > .ant-tabs-nav .ant-tabs-nav-add,\n.ant-tabs-rtl.ant-tabs-card.ant-tabs-bottom > .ant-tabs-nav .ant-tabs-nav-add,\n.ant-tabs-rtl.ant-tabs-card.ant-tabs-top > div > .ant-tabs-nav .ant-tabs-nav-add,\n.ant-tabs-rtl.ant-tabs-card.ant-tabs-bottom > div > .ant-tabs-nav .ant-tabs-nav-add {\n margin-right: 2px;\n margin-left: 0;\n}\n.ant-tabs-dropdown-rtl {\n direction: rtl;\n}\n.ant-tabs-dropdown-rtl .ant-tabs-dropdown-menu-item {\n text-align: right;\n}\n.ant-tabs-top,\n.ant-tabs-bottom {\n flex-direction: column;\n}\n.ant-tabs-top > .ant-tabs-nav,\n.ant-tabs-bottom > .ant-tabs-nav,\n.ant-tabs-top > div > .ant-tabs-nav,\n.ant-tabs-bottom > div > .ant-tabs-nav {\n margin: 0 0 16px 0;\n}\n.ant-tabs-top > .ant-tabs-nav::before,\n.ant-tabs-bottom > .ant-tabs-nav::before,\n.ant-tabs-top > div > .ant-tabs-nav::before,\n.ant-tabs-bottom > div > .ant-tabs-nav::before {\n position: absolute;\n right: 0;\n left: 0;\n border-bottom: 1px solid #f0f0f0;\n content: '';\n}\n.ant-tabs-top > .ant-tabs-nav .ant-tabs-ink-bar,\n.ant-tabs-bottom > .ant-tabs-nav .ant-tabs-ink-bar,\n.ant-tabs-top > div > .ant-tabs-nav .ant-tabs-ink-bar,\n.ant-tabs-bottom > div > .ant-tabs-nav .ant-tabs-ink-bar {\n height: 2px;\n}\n.ant-tabs-top > .ant-tabs-nav .ant-tabs-ink-bar-animated,\n.ant-tabs-bottom > .ant-tabs-nav .ant-tabs-ink-bar-animated,\n.ant-tabs-top > div > .ant-tabs-nav .ant-tabs-ink-bar-animated,\n.ant-tabs-bottom > div > .ant-tabs-nav .ant-tabs-ink-bar-animated {\n transition: width 0.3s, left 0.3s, right 0.3s;\n}\n.ant-tabs-top > .ant-tabs-nav .ant-tabs-nav-wrap::before,\n.ant-tabs-bottom > .ant-tabs-nav .ant-tabs-nav-wrap::before,\n.ant-tabs-top > div > .ant-tabs-nav .ant-tabs-nav-wrap::before,\n.ant-tabs-bottom > div > .ant-tabs-nav .ant-tabs-nav-wrap::before,\n.ant-tabs-top > .ant-tabs-nav .ant-tabs-nav-wrap::after,\n.ant-tabs-bottom > .ant-tabs-nav .ant-tabs-nav-wrap::after,\n.ant-tabs-top > div > .ant-tabs-nav .ant-tabs-nav-wrap::after,\n.ant-tabs-bottom > div > .ant-tabs-nav .ant-tabs-nav-wrap::after {\n top: 0;\n bottom: 0;\n width: 30px;\n}\n.ant-tabs-top > .ant-tabs-nav .ant-tabs-nav-wrap::before,\n.ant-tabs-bottom > .ant-tabs-nav .ant-tabs-nav-wrap::before,\n.ant-tabs-top > div > .ant-tabs-nav .ant-tabs-nav-wrap::before,\n.ant-tabs-bottom > div > .ant-tabs-nav .ant-tabs-nav-wrap::before {\n left: 0;\n box-shadow: inset 10px 0 8px -8px rgba(0, 0, 0, 0.08);\n}\n.ant-tabs-top > .ant-tabs-nav .ant-tabs-nav-wrap::after,\n.ant-tabs-bottom > .ant-tabs-nav .ant-tabs-nav-wrap::after,\n.ant-tabs-top > div > .ant-tabs-nav .ant-tabs-nav-wrap::after,\n.ant-tabs-bottom > div > .ant-tabs-nav .ant-tabs-nav-wrap::after {\n right: 0;\n box-shadow: inset -10px 0 8px -8px rgba(0, 0, 0, 0.08);\n}\n.ant-tabs-top > .ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-left::before,\n.ant-tabs-bottom > .ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-left::before,\n.ant-tabs-top > div > .ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-left::before,\n.ant-tabs-bottom > div > .ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-left::before {\n opacity: 1;\n}\n.ant-tabs-top > .ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-right::after,\n.ant-tabs-bottom > .ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-right::after,\n.ant-tabs-top > div > .ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-right::after,\n.ant-tabs-bottom > div > .ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-right::after {\n opacity: 1;\n}\n.ant-tabs-top > .ant-tabs-nav::before,\n.ant-tabs-top > div > .ant-tabs-nav::before {\n bottom: 0;\n}\n.ant-tabs-top > .ant-tabs-nav .ant-tabs-ink-bar,\n.ant-tabs-top > div > .ant-tabs-nav .ant-tabs-ink-bar {\n bottom: 0;\n}\n.ant-tabs-bottom > .ant-tabs-nav,\n.ant-tabs-bottom > div > .ant-tabs-nav {\n order: 1;\n margin-top: 16px;\n margin-bottom: 0;\n}\n.ant-tabs-bottom > .ant-tabs-nav::before,\n.ant-tabs-bottom > div > .ant-tabs-nav::before {\n top: 0;\n}\n.ant-tabs-bottom > .ant-tabs-nav .ant-tabs-ink-bar,\n.ant-tabs-bottom > div > .ant-tabs-nav .ant-tabs-ink-bar {\n top: 0;\n}\n.ant-tabs-bottom > .ant-tabs-content-holder,\n.ant-tabs-bottom > div > .ant-tabs-content-holder {\n order: 0;\n}\n.ant-tabs-left > .ant-tabs-nav,\n.ant-tabs-right > .ant-tabs-nav,\n.ant-tabs-left > div > .ant-tabs-nav,\n.ant-tabs-right > div > .ant-tabs-nav {\n flex-direction: column;\n min-width: 50px;\n}\n.ant-tabs-left > .ant-tabs-nav .ant-tabs-tab,\n.ant-tabs-right > .ant-tabs-nav .ant-tabs-tab,\n.ant-tabs-left > div > .ant-tabs-nav .ant-tabs-tab,\n.ant-tabs-right > div > .ant-tabs-nav .ant-tabs-tab {\n padding: 8px 24px;\n text-align: center;\n}\n.ant-tabs-left > .ant-tabs-nav .ant-tabs-tab + .ant-tabs-tab,\n.ant-tabs-right > .ant-tabs-nav .ant-tabs-tab + .ant-tabs-tab,\n.ant-tabs-left > div > .ant-tabs-nav .ant-tabs-tab + .ant-tabs-tab,\n.ant-tabs-right > div > .ant-tabs-nav .ant-tabs-tab + .ant-tabs-tab {\n margin: 16px 0 0 0;\n}\n.ant-tabs-left > .ant-tabs-nav .ant-tabs-nav-wrap,\n.ant-tabs-right > .ant-tabs-nav .ant-tabs-nav-wrap,\n.ant-tabs-left > div > .ant-tabs-nav .ant-tabs-nav-wrap,\n.ant-tabs-right > div > .ant-tabs-nav .ant-tabs-nav-wrap {\n flex-direction: column;\n}\n.ant-tabs-left > .ant-tabs-nav .ant-tabs-nav-wrap::before,\n.ant-tabs-right > .ant-tabs-nav .ant-tabs-nav-wrap::before,\n.ant-tabs-left > div > .ant-tabs-nav .ant-tabs-nav-wrap::before,\n.ant-tabs-right > div > .ant-tabs-nav .ant-tabs-nav-wrap::before,\n.ant-tabs-left > .ant-tabs-nav .ant-tabs-nav-wrap::after,\n.ant-tabs-right > .ant-tabs-nav .ant-tabs-nav-wrap::after,\n.ant-tabs-left > div > .ant-tabs-nav .ant-tabs-nav-wrap::after,\n.ant-tabs-right > div > .ant-tabs-nav .ant-tabs-nav-wrap::after {\n right: 0;\n left: 0;\n height: 30px;\n}\n.ant-tabs-left > .ant-tabs-nav .ant-tabs-nav-wrap::before,\n.ant-tabs-right > .ant-tabs-nav .ant-tabs-nav-wrap::before,\n.ant-tabs-left > div > .ant-tabs-nav .ant-tabs-nav-wrap::before,\n.ant-tabs-right > div > .ant-tabs-nav .ant-tabs-nav-wrap::before {\n top: 0;\n box-shadow: inset 0 10px 8px -8px rgba(0, 0, 0, 0.08);\n}\n.ant-tabs-left > .ant-tabs-nav .ant-tabs-nav-wrap::after,\n.ant-tabs-right > .ant-tabs-nav .ant-tabs-nav-wrap::after,\n.ant-tabs-left > div > .ant-tabs-nav .ant-tabs-nav-wrap::after,\n.ant-tabs-right > div > .ant-tabs-nav .ant-tabs-nav-wrap::after {\n bottom: 0;\n box-shadow: inset 0 -10px 8px -8px rgba(0, 0, 0, 0.08);\n}\n.ant-tabs-left > .ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-top::before,\n.ant-tabs-right > .ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-top::before,\n.ant-tabs-left > div > .ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-top::before,\n.ant-tabs-right > div > .ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-top::before {\n opacity: 1;\n}\n.ant-tabs-left > .ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-bottom::after,\n.ant-tabs-right > .ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-bottom::after,\n.ant-tabs-left > div > .ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-bottom::after,\n.ant-tabs-right > div > .ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-bottom::after {\n opacity: 1;\n}\n.ant-tabs-left > .ant-tabs-nav .ant-tabs-ink-bar,\n.ant-tabs-right > .ant-tabs-nav .ant-tabs-ink-bar,\n.ant-tabs-left > div > .ant-tabs-nav .ant-tabs-ink-bar,\n.ant-tabs-right > div > .ant-tabs-nav .ant-tabs-ink-bar {\n width: 2px;\n}\n.ant-tabs-left > .ant-tabs-nav .ant-tabs-ink-bar-animated,\n.ant-tabs-right > .ant-tabs-nav .ant-tabs-ink-bar-animated,\n.ant-tabs-left > div > .ant-tabs-nav .ant-tabs-ink-bar-animated,\n.ant-tabs-right > div > .ant-tabs-nav .ant-tabs-ink-bar-animated {\n transition: height 0.3s, top 0.3s;\n}\n.ant-tabs-left > .ant-tabs-nav .ant-tabs-nav-list,\n.ant-tabs-right > .ant-tabs-nav .ant-tabs-nav-list,\n.ant-tabs-left > div > .ant-tabs-nav .ant-tabs-nav-list,\n.ant-tabs-right > div > .ant-tabs-nav .ant-tabs-nav-list,\n.ant-tabs-left > .ant-tabs-nav .ant-tabs-nav-operations,\n.ant-tabs-right > .ant-tabs-nav .ant-tabs-nav-operations,\n.ant-tabs-left > div > .ant-tabs-nav .ant-tabs-nav-operations,\n.ant-tabs-right > div > .ant-tabs-nav .ant-tabs-nav-operations {\n flex: 1 0 auto;\n flex-direction: column;\n}\n.ant-tabs-left > .ant-tabs-nav .ant-tabs-ink-bar,\n.ant-tabs-left > div > .ant-tabs-nav .ant-tabs-ink-bar {\n right: 0;\n}\n.ant-tabs-left > .ant-tabs-content-holder,\n.ant-tabs-left > div > .ant-tabs-content-holder {\n margin-left: -1px;\n border-left: 1px solid #f0f0f0;\n}\n.ant-tabs-left > .ant-tabs-content-holder > .ant-tabs-content > .ant-tabs-tabpane,\n.ant-tabs-left > div > .ant-tabs-content-holder > .ant-tabs-content > .ant-tabs-tabpane {\n padding-left: 24px;\n}\n.ant-tabs-right > .ant-tabs-nav,\n.ant-tabs-right > div > .ant-tabs-nav {\n order: 1;\n}\n.ant-tabs-right > .ant-tabs-nav .ant-tabs-ink-bar,\n.ant-tabs-right > div > .ant-tabs-nav .ant-tabs-ink-bar {\n left: 0;\n}\n.ant-tabs-right > .ant-tabs-content-holder,\n.ant-tabs-right > div > .ant-tabs-content-holder {\n order: 0;\n margin-right: -1px;\n border-right: 1px solid #f0f0f0;\n}\n.ant-tabs-right > .ant-tabs-content-holder > .ant-tabs-content > .ant-tabs-tabpane,\n.ant-tabs-right > div > .ant-tabs-content-holder > .ant-tabs-content > .ant-tabs-tabpane {\n padding-right: 24px;\n}\n.ant-tabs-dropdown {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: absolute;\n top: -9999px;\n left: -9999px;\n z-index: 1050;\n display: block;\n}\n.ant-tabs-dropdown-hidden {\n display: none;\n}\n.ant-tabs-dropdown-menu {\n max-height: 200px;\n margin: 0;\n padding: 4px 0;\n overflow-x: hidden;\n overflow-y: auto;\n text-align: left;\n list-style-type: none;\n background-color: #fff;\n background-clip: padding-box;\n border-radius: 5px;\n outline: none;\n box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05);\n}\n.ant-tabs-dropdown-menu-item {\n display: flex;\n align-items: center;\n min-width: 120px;\n margin: 0;\n padding: 5px 12px;\n overflow: hidden;\n color: rgba(0, 0, 0, 0.85);\n font-weight: normal;\n font-size: 14px;\n line-height: 22px;\n white-space: nowrap;\n text-overflow: ellipsis;\n cursor: pointer;\n transition: all 0.3s;\n}\n.ant-tabs-dropdown-menu-item > span {\n flex: 1;\n white-space: nowrap;\n}\n.ant-tabs-dropdown-menu-item-remove {\n flex: none;\n margin-left: 12px;\n color: rgba(0, 0, 0, 0.45);\n font-size: 12px;\n background: transparent;\n border: 0;\n cursor: pointer;\n}\n.ant-tabs-dropdown-menu-item-remove:hover {\n color: #8588ed;\n}\n.ant-tabs-dropdown-menu-item:hover {\n background: #f5f5f5;\n}\n.ant-tabs-dropdown-menu-item-disabled,\n.ant-tabs-dropdown-menu-item-disabled:hover {\n color: rgba(0, 0, 0, 0.25);\n background: transparent;\n cursor: not-allowed;\n}\n.ant-tabs-card > .ant-tabs-nav .ant-tabs-tab,\n.ant-tabs-card > div > .ant-tabs-nav .ant-tabs-tab {\n margin: 0;\n padding: 8px 16px;\n background: #fafafa;\n border: 1px solid #f0f0f0;\n transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\n}\n.ant-tabs-card > .ant-tabs-nav .ant-tabs-tab-active,\n.ant-tabs-card > div > .ant-tabs-nav .ant-tabs-tab-active {\n color: #5b5ce1;\n background: #fff;\n}\n.ant-tabs-card > .ant-tabs-nav .ant-tabs-ink-bar,\n.ant-tabs-card > div > .ant-tabs-nav .ant-tabs-ink-bar {\n visibility: hidden;\n}\n.ant-tabs-card.ant-tabs-top > .ant-tabs-nav .ant-tabs-tab + .ant-tabs-tab,\n.ant-tabs-card.ant-tabs-bottom > .ant-tabs-nav .ant-tabs-tab + .ant-tabs-tab,\n.ant-tabs-card.ant-tabs-top > div > .ant-tabs-nav .ant-tabs-tab + .ant-tabs-tab,\n.ant-tabs-card.ant-tabs-bottom > div > .ant-tabs-nav .ant-tabs-tab + .ant-tabs-tab {\n margin-left: 2px;\n}\n.ant-tabs-card.ant-tabs-top > .ant-tabs-nav .ant-tabs-tab,\n.ant-tabs-card.ant-tabs-top > div > .ant-tabs-nav .ant-tabs-tab {\n border-radius: 5px 5px 0 0;\n}\n.ant-tabs-card.ant-tabs-top > .ant-tabs-nav .ant-tabs-tab-active,\n.ant-tabs-card.ant-tabs-top > div > .ant-tabs-nav .ant-tabs-tab-active {\n border-bottom-color: #fff;\n}\n.ant-tabs-card.ant-tabs-bottom > .ant-tabs-nav .ant-tabs-tab,\n.ant-tabs-card.ant-tabs-bottom > div > .ant-tabs-nav .ant-tabs-tab {\n border-radius: 0 0 5px 5px;\n}\n.ant-tabs-card.ant-tabs-bottom > .ant-tabs-nav .ant-tabs-tab-active,\n.ant-tabs-card.ant-tabs-bottom > div > .ant-tabs-nav .ant-tabs-tab-active {\n border-top-color: #fff;\n}\n.ant-tabs-card.ant-tabs-left > .ant-tabs-nav .ant-tabs-tab + .ant-tabs-tab,\n.ant-tabs-card.ant-tabs-right > .ant-tabs-nav .ant-tabs-tab + .ant-tabs-tab,\n.ant-tabs-card.ant-tabs-left > div > .ant-tabs-nav .ant-tabs-tab + .ant-tabs-tab,\n.ant-tabs-card.ant-tabs-right > div > .ant-tabs-nav .ant-tabs-tab + .ant-tabs-tab {\n margin-top: 2px;\n}\n.ant-tabs-card.ant-tabs-left > .ant-tabs-nav .ant-tabs-tab,\n.ant-tabs-card.ant-tabs-left > div > .ant-tabs-nav .ant-tabs-tab {\n border-radius: 5px 0 0 5px;\n}\n.ant-tabs-card.ant-tabs-left > .ant-tabs-nav .ant-tabs-tab-active,\n.ant-tabs-card.ant-tabs-left > div > .ant-tabs-nav .ant-tabs-tab-active {\n border-right-color: #fff;\n}\n.ant-tabs-card.ant-tabs-right > .ant-tabs-nav .ant-tabs-tab,\n.ant-tabs-card.ant-tabs-right > div > .ant-tabs-nav .ant-tabs-tab {\n border-radius: 0 5px 5px 0;\n}\n.ant-tabs-card.ant-tabs-right > .ant-tabs-nav .ant-tabs-tab-active,\n.ant-tabs-card.ant-tabs-right > div > .ant-tabs-nav .ant-tabs-tab-active {\n border-left-color: #fff;\n}\n.ant-tabs {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n display: flex;\n}\n.ant-tabs > .ant-tabs-nav,\n.ant-tabs > div > .ant-tabs-nav {\n position: relative;\n display: flex;\n flex: none;\n align-items: center;\n}\n.ant-tabs > .ant-tabs-nav .ant-tabs-nav-wrap,\n.ant-tabs > div > .ant-tabs-nav .ant-tabs-nav-wrap {\n position: relative;\n display: inline-block;\n display: flex;\n flex: auto;\n align-self: stretch;\n overflow: hidden;\n white-space: nowrap;\n transform: translate(0);\n}\n.ant-tabs > .ant-tabs-nav .ant-tabs-nav-wrap::before,\n.ant-tabs > div > .ant-tabs-nav .ant-tabs-nav-wrap::before,\n.ant-tabs > .ant-tabs-nav .ant-tabs-nav-wrap::after,\n.ant-tabs > div > .ant-tabs-nav .ant-tabs-nav-wrap::after {\n position: absolute;\n z-index: 1;\n opacity: 0;\n transition: opacity 0.3s;\n content: '';\n pointer-events: none;\n}\n.ant-tabs > .ant-tabs-nav .ant-tabs-nav-list,\n.ant-tabs > div > .ant-tabs-nav .ant-tabs-nav-list {\n position: relative;\n display: flex;\n transition: transform 0.3s;\n}\n.ant-tabs > .ant-tabs-nav .ant-tabs-nav-operations,\n.ant-tabs > div > .ant-tabs-nav .ant-tabs-nav-operations {\n display: flex;\n align-self: stretch;\n}\n.ant-tabs > .ant-tabs-nav .ant-tabs-nav-operations-hidden,\n.ant-tabs > div > .ant-tabs-nav .ant-tabs-nav-operations-hidden {\n position: absolute;\n visibility: hidden;\n pointer-events: none;\n}\n.ant-tabs > .ant-tabs-nav .ant-tabs-nav-more,\n.ant-tabs > div > .ant-tabs-nav .ant-tabs-nav-more {\n position: relative;\n padding: 8px 16px;\n background: transparent;\n border: 0;\n}\n.ant-tabs > .ant-tabs-nav .ant-tabs-nav-more::after,\n.ant-tabs > div > .ant-tabs-nav .ant-tabs-nav-more::after {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n height: 5px;\n transform: translateY(100%);\n content: '';\n}\n.ant-tabs > .ant-tabs-nav .ant-tabs-nav-add,\n.ant-tabs > div > .ant-tabs-nav .ant-tabs-nav-add {\n min-width: 40px;\n margin-left: 2px;\n padding: 0 8px;\n background: #fafafa;\n border: 1px solid #f0f0f0;\n border-radius: 5px 5px 0 0;\n outline: none;\n cursor: pointer;\n transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\n}\n.ant-tabs > .ant-tabs-nav .ant-tabs-nav-add:hover,\n.ant-tabs > div > .ant-tabs-nav .ant-tabs-nav-add:hover {\n color: #8588ed;\n}\n.ant-tabs > .ant-tabs-nav .ant-tabs-nav-add:active,\n.ant-tabs > div > .ant-tabs-nav .ant-tabs-nav-add:active,\n.ant-tabs > .ant-tabs-nav .ant-tabs-nav-add:focus,\n.ant-tabs > div > .ant-tabs-nav .ant-tabs-nav-add:focus {\n color: #4541ba;\n}\n.ant-tabs-extra-content {\n flex: none;\n}\n.ant-tabs-centered > .ant-tabs-nav .ant-tabs-nav-wrap:not([class*='ant-tabs-nav-wrap-ping']),\n.ant-tabs-centered > div > .ant-tabs-nav .ant-tabs-nav-wrap:not([class*='ant-tabs-nav-wrap-ping']) {\n justify-content: center;\n}\n.ant-tabs-ink-bar {\n position: absolute;\n background: #5b5ce1;\n pointer-events: none;\n}\n.ant-tabs-tab {\n position: relative;\n display: inline-flex;\n align-items: center;\n padding: 12px 0;\n font-size: 14px;\n background: transparent;\n border: 0;\n outline: none;\n cursor: pointer;\n}\n.ant-tabs-tab-btn:focus,\n.ant-tabs-tab-remove:focus,\n.ant-tabs-tab-btn:active,\n.ant-tabs-tab-remove:active {\n color: #4541ba;\n}\n.ant-tabs-tab-btn {\n outline: none;\n transition: all 0.3s;\n}\n.ant-tabs-tab-remove {\n flex: none;\n margin-right: -4px;\n margin-left: 8px;\n color: rgba(0, 0, 0, 0.45);\n font-size: 12px;\n background: transparent;\n border: none;\n outline: none;\n cursor: pointer;\n transition: all 0.3s;\n}\n.ant-tabs-tab-remove:hover {\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-tabs-tab:hover {\n color: #8588ed;\n}\n.ant-tabs-tab.ant-tabs-tab-active .ant-tabs-tab-btn {\n color: #5b5ce1;\n text-shadow: 0 0 0.25px currentcolor;\n}\n.ant-tabs-tab.ant-tabs-tab-disabled {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n}\n.ant-tabs-tab.ant-tabs-tab-disabled .ant-tabs-tab-btn:focus,\n.ant-tabs-tab.ant-tabs-tab-disabled .ant-tabs-tab-remove:focus,\n.ant-tabs-tab.ant-tabs-tab-disabled .ant-tabs-tab-btn:active,\n.ant-tabs-tab.ant-tabs-tab-disabled .ant-tabs-tab-remove:active {\n color: rgba(0, 0, 0, 0.25);\n}\n.ant-tabs-tab .ant-tabs-tab-remove .anticon {\n margin: 0;\n}\n.ant-tabs-tab .anticon {\n margin-right: 12px;\n}\n.ant-tabs-tab + .ant-tabs-tab {\n margin: 0 0 0 32px;\n}\n.ant-tabs-content {\n position: relative;\n width: 100%;\n}\n.ant-tabs-content-holder {\n flex: auto;\n min-width: 0;\n min-height: 0;\n}\n.ant-tabs-tabpane {\n outline: none;\n}\n.ant-tabs-tabpane-hidden {\n display: none;\n}\n.ant-tabs-switch-appear,\n.ant-tabs-switch-enter {\n transition: none;\n}\n.ant-tabs-switch-appear-start,\n.ant-tabs-switch-enter-start {\n opacity: 0;\n}\n.ant-tabs-switch-appear-active,\n.ant-tabs-switch-enter-active {\n opacity: 1;\n transition: opacity 0.3s;\n}\n.ant-tabs-switch-leave {\n position: absolute;\n transition: none;\n inset: 0;\n}\n.ant-tabs-switch-leave-start {\n opacity: 1;\n}\n.ant-tabs-switch-leave-active {\n opacity: 0;\n transition: opacity 0.3s;\n}\n.ant-tag {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n display: inline-block;\n height: auto;\n margin-right: 8px;\n padding: 0 7px;\n font-size: 12px;\n line-height: 20px;\n white-space: nowrap;\n background: #fafafa;\n border: 1px solid #d9d9d9;\n border-radius: 5px;\n opacity: 1;\n transition: all 0.3s;\n}\n.ant-tag,\n.ant-tag a,\n.ant-tag a:hover {\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-tag > a:first-child:last-child {\n display: inline-block;\n margin: 0 -8px;\n padding: 0 8px;\n}\n.ant-tag-close-icon {\n margin-left: 3px;\n color: rgba(0, 0, 0, 0.45);\n font-size: 10px;\n cursor: pointer;\n transition: all 0.3s;\n}\n.ant-tag-close-icon:hover {\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-tag-has-color {\n border-color: transparent;\n}\n.ant-tag-has-color,\n.ant-tag-has-color a,\n.ant-tag-has-color a:hover,\n.ant-tag-has-color .anticon-close,\n.ant-tag-has-color .anticon-close:hover {\n color: #fff;\n}\n.ant-tag-checkable {\n background-color: transparent;\n border-color: transparent;\n cursor: pointer;\n}\n.ant-tag-checkable:not(.ant-tag-checkable-checked):hover {\n color: #5b5ce1;\n}\n.ant-tag-checkable:active,\n.ant-tag-checkable-checked {\n color: #fff;\n}\n.ant-tag-checkable-checked {\n background-color: #5b5ce1;\n}\n.ant-tag-checkable:active {\n background-color: #4541ba;\n}\n.ant-tag-hidden {\n display: none;\n}\n.ant-tag-pink {\n color: #c41d7f;\n background: #fff0f6;\n border-color: #ffadd2;\n}\n.ant-tag-pink-inverse {\n color: #fff;\n background: #eb2f96;\n border-color: #eb2f96;\n}\n.ant-tag-magenta {\n color: #c41d7f;\n background: #fff0f6;\n border-color: #ffadd2;\n}\n.ant-tag-magenta-inverse {\n color: #fff;\n background: #eb2f96;\n border-color: #eb2f96;\n}\n.ant-tag-red {\n color: #cf1322;\n background: #fff1f0;\n border-color: #ffa39e;\n}\n.ant-tag-red-inverse {\n color: #fff;\n background: #f5222d;\n border-color: #f5222d;\n}\n.ant-tag-volcano {\n color: #d4380d;\n background: #fff2e8;\n border-color: #ffbb96;\n}\n.ant-tag-volcano-inverse {\n color: #fff;\n background: #fa541c;\n border-color: #fa541c;\n}\n.ant-tag-orange {\n color: #d46b08;\n background: #fff7e6;\n border-color: #ffd591;\n}\n.ant-tag-orange-inverse {\n color: #fff;\n background: #fa8c16;\n border-color: #fa8c16;\n}\n.ant-tag-yellow {\n color: #d4b106;\n background: #feffe6;\n border-color: #fffb8f;\n}\n.ant-tag-yellow-inverse {\n color: #fff;\n background: #fadb14;\n border-color: #fadb14;\n}\n.ant-tag-gold {\n color: #d48806;\n background: #fffbe6;\n border-color: #ffe58f;\n}\n.ant-tag-gold-inverse {\n color: #fff;\n background: #faad14;\n border-color: #faad14;\n}\n.ant-tag-cyan {\n color: #08979c;\n background: #e6fffb;\n border-color: #87e8de;\n}\n.ant-tag-cyan-inverse {\n color: #fff;\n background: #13c2c2;\n border-color: #13c2c2;\n}\n.ant-tag-lime {\n color: #7cb305;\n background: #fcffe6;\n border-color: #eaff8f;\n}\n.ant-tag-lime-inverse {\n color: #fff;\n background: #a0d911;\n border-color: #a0d911;\n}\n.ant-tag-green {\n color: #389e0d;\n background: #f6ffed;\n border-color: #b7eb8f;\n}\n.ant-tag-green-inverse {\n color: #fff;\n background: #52c41a;\n border-color: #52c41a;\n}\n.ant-tag-blue {\n color: #096dd9;\n background: #e6f7ff;\n border-color: #91d5ff;\n}\n.ant-tag-blue-inverse {\n color: #fff;\n background: #1890ff;\n border-color: #1890ff;\n}\n.ant-tag-geekblue {\n color: #1d39c4;\n background: #f0f5ff;\n border-color: #adc6ff;\n}\n.ant-tag-geekblue-inverse {\n color: #fff;\n background: #2f54eb;\n border-color: #2f54eb;\n}\n.ant-tag-purple {\n color: #531dab;\n background: #f9f0ff;\n border-color: #d3adf7;\n}\n.ant-tag-purple-inverse {\n color: #fff;\n background: #722ed1;\n border-color: #722ed1;\n}\n.ant-tag-success {\n color: #52c41a;\n background: #f6ffed;\n border-color: #b7eb8f;\n}\n.ant-tag-processing {\n color: #5b5ce1;\n background: #f0f2ff;\n border-color: #e0e3ff;\n}\n.ant-tag-error {\n color: #ff4d4f;\n background: #fff2f0;\n border-color: #ffccc7;\n}\n.ant-tag-warning {\n color: #faad14;\n background: #fffbe6;\n border-color: #ffe58f;\n}\n.ant-tag > .anticon + span,\n.ant-tag > span + .anticon {\n margin-left: 7px;\n}\n.ant-tag.ant-tag-rtl {\n margin-right: 0;\n margin-left: 8px;\n direction: rtl;\n text-align: right;\n}\n.ant-tag-rtl .ant-tag-close-icon {\n margin-right: 3px;\n margin-left: 0;\n}\n.ant-tag-rtl.ant-tag > .anticon + span,\n.ant-tag-rtl.ant-tag > span + .anticon {\n margin-right: 7px;\n margin-left: 0;\n}\n.ant-timeline {\n box-sizing: border-box;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n font-feature-settings: 'tnum';\n margin: 0;\n padding: 0;\n list-style: none;\n}\n.ant-timeline-item {\n position: relative;\n margin: 0;\n padding-bottom: 20px;\n font-size: 14px;\n list-style: none;\n}\n.ant-timeline-item-tail {\n position: absolute;\n top: 10px;\n left: 4px;\n height: calc(100% - 10px);\n border-left: 2px solid #f0f0f0;\n}\n.ant-timeline-item-pending .ant-timeline-item-head {\n font-size: 12px;\n background-color: transparent;\n}\n.ant-timeline-item-pending .ant-timeline-item-tail {\n display: none;\n}\n.ant-timeline-item-head {\n position: absolute;\n width: 10px;\n height: 10px;\n background-color: #fff;\n border: 2px solid transparent;\n border-radius: 100px;\n}\n.ant-timeline-item-head-blue {\n color: #5b5ce1;\n border-color: #5b5ce1;\n}\n.ant-timeline-item-head-red {\n color: #ff4d4f;\n border-color: #ff4d4f;\n}\n.ant-timeline-item-head-green {\n color: #52c41a;\n border-color: #52c41a;\n}\n.ant-timeline-item-head-gray {\n color: rgba(0, 0, 0, 0.25);\n border-color: rgba(0, 0, 0, 0.25);\n}\n.ant-timeline-item-head-custom {\n position: absolute;\n top: 5.5px;\n left: 5px;\n width: auto;\n height: auto;\n margin-top: 0;\n padding: 3px 1px;\n line-height: 1;\n text-align: center;\n border: 0;\n border-radius: 0;\n transform: translate(-50%, -50%);\n}\n.ant-timeline-item-content {\n position: relative;\n top: -7.001px;\n margin: 0 0 0 26px;\n word-break: break-word;\n}\n.ant-timeline-item-last > .ant-timeline-item-tail {\n display: none;\n}\n.ant-timeline-item-last > .ant-timeline-item-content {\n min-height: 48px;\n}\n.ant-timeline.ant-timeline-alternate .ant-timeline-item-tail,\n.ant-timeline.ant-timeline-right .ant-timeline-item-tail,\n.ant-timeline.ant-timeline-label .ant-timeline-item-tail,\n.ant-timeline.ant-timeline-alternate .ant-timeline-item-head,\n.ant-timeline.ant-timeline-right .ant-timeline-item-head,\n.ant-timeline.ant-timeline-label .ant-timeline-item-head,\n.ant-timeline.ant-timeline-alternate .ant-timeline-item-head-custom,\n.ant-timeline.ant-timeline-right .ant-timeline-item-head-custom,\n.ant-timeline.ant-timeline-label .ant-timeline-item-head-custom {\n left: 50%;\n}\n.ant-timeline.ant-timeline-alternate .ant-timeline-item-head,\n.ant-timeline.ant-timeline-right .ant-timeline-item-head,\n.ant-timeline.ant-timeline-label .ant-timeline-item-head {\n margin-left: -4px;\n}\n.ant-timeline.ant-timeline-alternate .ant-timeline-item-head-custom,\n.ant-timeline.ant-timeline-right .ant-timeline-item-head-custom,\n.ant-timeline.ant-timeline-label .ant-timeline-item-head-custom {\n margin-left: 1px;\n}\n.ant-timeline.ant-timeline-alternate .ant-timeline-item-left .ant-timeline-item-content,\n.ant-timeline.ant-timeline-right .ant-timeline-item-left .ant-timeline-item-content,\n.ant-timeline.ant-timeline-label .ant-timeline-item-left .ant-timeline-item-content {\n left: calc(50% - 4px);\n width: calc(50% - 14px);\n text-align: left;\n}\n.ant-timeline.ant-timeline-alternate .ant-timeline-item-right .ant-timeline-item-content,\n.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-content,\n.ant-timeline.ant-timeline-label .ant-timeline-item-right .ant-timeline-item-content {\n width: calc(50% - 12px);\n margin: 0;\n text-align: right;\n}\n.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-tail,\n.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-head,\n.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-head-custom {\n left: calc(100% - 4px - 2px);\n}\n.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-content {\n width: calc(100% - 18px);\n}\n.ant-timeline.ant-timeline-pending .ant-timeline-item-last .ant-timeline-item-tail {\n display: block;\n height: calc(100% - 14px);\n border-left: 2px dotted #f0f0f0;\n}\n.ant-timeline.ant-timeline-reverse .ant-timeline-item-last .ant-timeline-item-tail {\n display: none;\n}\n.ant-timeline.ant-timeline-reverse .ant-timeline-item-pending .ant-timeline-item-tail {\n top: 15px;\n display: block;\n height: calc(100% - 15px);\n border-left: 2px dotted #f0f0f0;\n}\n.ant-timeline.ant-timeline-reverse .ant-timeline-item-pending .ant-timeline-item-content {\n min-height: 48px;\n}\n.ant-timeline.ant-timeline-label .ant-timeline-item-label {\n position: absolute;\n top: -7.001px;\n width: calc(50% - 12px);\n text-align: right;\n}\n.ant-timeline.ant-timeline-label .ant-timeline-item-right .ant-timeline-item-label {\n left: calc(50% + 14px);\n width: calc(50% - 14px);\n text-align: left;\n}\n.ant-timeline-rtl {\n direction: rtl;\n}\n.ant-timeline-rtl .ant-timeline-item-tail {\n right: 4px;\n left: auto;\n border-right: 2px solid #f0f0f0;\n border-left: none;\n}\n.ant-timeline-rtl .ant-timeline-item-head-custom {\n right: 5px;\n left: auto;\n transform: translate(50%, -50%);\n}\n.ant-timeline-rtl .ant-timeline-item-content {\n margin: 0 18px 0 0;\n}\n.ant-timeline-rtl.ant-timeline.ant-timeline-alternate .ant-timeline-item-tail,\n.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-tail,\n.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-tail,\n.ant-timeline-rtl.ant-timeline.ant-timeline-alternate .ant-timeline-item-head,\n.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-head,\n.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-head,\n.ant-timeline-rtl.ant-timeline.ant-timeline-alternate .ant-timeline-item-head-custom,\n.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-head-custom,\n.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-head-custom {\n right: 50%;\n left: auto;\n}\n.ant-timeline-rtl.ant-timeline.ant-timeline-alternate .ant-timeline-item-head,\n.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-head,\n.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-head {\n margin-right: -4px;\n margin-left: 0;\n}\n.ant-timeline-rtl.ant-timeline.ant-timeline-alternate .ant-timeline-item-head-custom,\n.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-head-custom,\n.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-head-custom {\n margin-right: 1px;\n margin-left: 0;\n}\n.ant-timeline-rtl.ant-timeline.ant-timeline-alternate .ant-timeline-item-left .ant-timeline-item-content,\n.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-left .ant-timeline-item-content,\n.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-left .ant-timeline-item-content {\n right: calc(50% - 4px);\n left: auto;\n text-align: right;\n}\n.ant-timeline-rtl.ant-timeline.ant-timeline-alternate .ant-timeline-item-right .ant-timeline-item-content,\n.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-content,\n.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-right .ant-timeline-item-content {\n text-align: left;\n}\n.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-tail,\n.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-head,\n.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-head-custom {\n right: 0;\n left: auto;\n}\n.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-content {\n width: 100%;\n margin-right: 18px;\n text-align: right;\n}\n.ant-timeline-rtl.ant-timeline.ant-timeline-pending .ant-timeline-item-last .ant-timeline-item-tail {\n border-right: 2px dotted #f0f0f0;\n border-left: none;\n}\n.ant-timeline-rtl.ant-timeline.ant-timeline-reverse .ant-timeline-item-pending .ant-timeline-item-tail {\n border-right: 2px dotted #f0f0f0;\n border-left: none;\n}\n.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-label {\n text-align: left;\n}\n.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-right .ant-timeline-item-label {\n right: calc(50% + 14px);\n text-align: right;\n}\n.ant-tooltip {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: absolute;\n z-index: 1070;\n display: block;\n width: max-content;\n width: intrinsic;\n max-width: 250px;\n visibility: visible;\n}\n.ant-tooltip-content {\n position: relative;\n}\n.ant-tooltip-hidden {\n display: none;\n}\n.ant-tooltip-placement-top,\n.ant-tooltip-placement-topLeft,\n.ant-tooltip-placement-topRight {\n padding-bottom: 14.3137085px;\n}\n.ant-tooltip-placement-right,\n.ant-tooltip-placement-rightTop,\n.ant-tooltip-placement-rightBottom {\n padding-left: 14.3137085px;\n}\n.ant-tooltip-placement-bottom,\n.ant-tooltip-placement-bottomLeft,\n.ant-tooltip-placement-bottomRight {\n padding-top: 14.3137085px;\n}\n.ant-tooltip-placement-left,\n.ant-tooltip-placement-leftTop,\n.ant-tooltip-placement-leftBottom {\n padding-right: 14.3137085px;\n}\n.ant-tooltip-inner {\n min-width: 30px;\n min-height: 32px;\n padding: 6px 8px;\n color: #fff;\n text-align: left;\n text-decoration: none;\n word-wrap: break-word;\n background-color: rgba(0, 0, 0, 0.75);\n border-radius: 5px;\n box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 9px 28px 8px rgba(0, 0, 0, 0.05);\n}\n.ant-tooltip-arrow {\n position: absolute;\n z-index: 2;\n display: block;\n width: 22px;\n height: 22px;\n overflow: hidden;\n background: transparent;\n pointer-events: none;\n}\n.ant-tooltip-arrow-content {\n --antd-arrow-background-color: linear-gradient(to right bottom, rgba(0, 0, 0, 0.65), rgba(0, 0, 0, 0.75));\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n display: block;\n width: 11.3137085px;\n height: 11.3137085px;\n margin: auto;\n content: '';\n pointer-events: auto;\n border-radius: 0 0 2px;\n pointer-events: none;\n}\n.ant-tooltip-arrow-content::before {\n position: absolute;\n top: -11.3137085px;\n left: -11.3137085px;\n width: 33.9411255px;\n height: 33.9411255px;\n background: var(--antd-arrow-background-color);\n background-repeat: no-repeat;\n background-position: -10px -10px;\n content: '';\n clip-path: inset(33% 33%);\n clip-path: path('M 9.849242404917499 24.091883092036785 A 5 5 0 0 1 13.384776310850237 22.627416997969522 L 20.627416997969522 22.627416997969522 A 2 2 0 0 0 22.627416997969522 20.627416997969522 L 22.627416997969522 13.384776310850237 A 5 5 0 0 1 24.091883092036785 9.849242404917499 L 23.091883092036785 9.849242404917499 L 9.849242404917499 23.091883092036785 Z');\n}\n.ant-tooltip-placement-top .ant-tooltip-arrow,\n.ant-tooltip-placement-topLeft .ant-tooltip-arrow,\n.ant-tooltip-placement-topRight .ant-tooltip-arrow {\n bottom: 0;\n transform: translateY(100%);\n}\n.ant-tooltip-placement-top .ant-tooltip-arrow-content,\n.ant-tooltip-placement-topLeft .ant-tooltip-arrow-content,\n.ant-tooltip-placement-topRight .ant-tooltip-arrow-content {\n box-shadow: 3px 3px 7px rgba(0, 0, 0, 0.07);\n transform: translateY(-11px) rotate(45deg);\n}\n.ant-tooltip-placement-top .ant-tooltip-arrow {\n left: 50%;\n transform: translateY(100%) translateX(-50%);\n}\n.ant-tooltip-placement-topLeft .ant-tooltip-arrow {\n left: 13px;\n}\n.ant-tooltip-placement-topRight .ant-tooltip-arrow {\n right: 13px;\n}\n.ant-tooltip-placement-right .ant-tooltip-arrow,\n.ant-tooltip-placement-rightTop .ant-tooltip-arrow,\n.ant-tooltip-placement-rightBottom .ant-tooltip-arrow {\n left: 0;\n transform: translateX(-100%);\n}\n.ant-tooltip-placement-right .ant-tooltip-arrow-content,\n.ant-tooltip-placement-rightTop .ant-tooltip-arrow-content,\n.ant-tooltip-placement-rightBottom .ant-tooltip-arrow-content {\n box-shadow: -3px 3px 7px rgba(0, 0, 0, 0.07);\n transform: translateX(11px) rotate(135deg);\n}\n.ant-tooltip-placement-right .ant-tooltip-arrow {\n top: 50%;\n transform: translateX(-100%) translateY(-50%);\n}\n.ant-tooltip-placement-rightTop .ant-tooltip-arrow {\n top: 5px;\n}\n.ant-tooltip-placement-rightBottom .ant-tooltip-arrow {\n bottom: 5px;\n}\n.ant-tooltip-placement-left .ant-tooltip-arrow,\n.ant-tooltip-placement-leftTop .ant-tooltip-arrow,\n.ant-tooltip-placement-leftBottom .ant-tooltip-arrow {\n right: 0;\n transform: translateX(100%);\n}\n.ant-tooltip-placement-left .ant-tooltip-arrow-content,\n.ant-tooltip-placement-leftTop .ant-tooltip-arrow-content,\n.ant-tooltip-placement-leftBottom .ant-tooltip-arrow-content {\n box-shadow: 3px -3px 7px rgba(0, 0, 0, 0.07);\n transform: translateX(-11px) rotate(315deg);\n}\n.ant-tooltip-placement-left .ant-tooltip-arrow {\n top: 50%;\n transform: translateX(100%) translateY(-50%);\n}\n.ant-tooltip-placement-leftTop .ant-tooltip-arrow {\n top: 5px;\n}\n.ant-tooltip-placement-leftBottom .ant-tooltip-arrow {\n bottom: 5px;\n}\n.ant-tooltip-placement-bottom .ant-tooltip-arrow,\n.ant-tooltip-placement-bottomLeft .ant-tooltip-arrow,\n.ant-tooltip-placement-bottomRight .ant-tooltip-arrow {\n top: 0;\n transform: translateY(-100%);\n}\n.ant-tooltip-placement-bottom .ant-tooltip-arrow-content,\n.ant-tooltip-placement-bottomLeft .ant-tooltip-arrow-content,\n.ant-tooltip-placement-bottomRight .ant-tooltip-arrow-content {\n box-shadow: -3px -3px 7px rgba(0, 0, 0, 0.07);\n transform: translateY(11px) rotate(225deg);\n}\n.ant-tooltip-placement-bottom .ant-tooltip-arrow {\n left: 50%;\n transform: translateY(-100%) translateX(-50%);\n}\n.ant-tooltip-placement-bottomLeft .ant-tooltip-arrow {\n left: 13px;\n}\n.ant-tooltip-placement-bottomRight .ant-tooltip-arrow {\n right: 13px;\n}\n.ant-tooltip-pink .ant-tooltip-inner {\n background-color: #eb2f96;\n}\n.ant-tooltip-pink .ant-tooltip-arrow-content::before {\n background: #eb2f96;\n}\n.ant-tooltip-magenta .ant-tooltip-inner {\n background-color: #eb2f96;\n}\n.ant-tooltip-magenta .ant-tooltip-arrow-content::before {\n background: #eb2f96;\n}\n.ant-tooltip-red .ant-tooltip-inner {\n background-color: #f5222d;\n}\n.ant-tooltip-red .ant-tooltip-arrow-content::before {\n background: #f5222d;\n}\n.ant-tooltip-volcano .ant-tooltip-inner {\n background-color: #fa541c;\n}\n.ant-tooltip-volcano .ant-tooltip-arrow-content::before {\n background: #fa541c;\n}\n.ant-tooltip-orange .ant-tooltip-inner {\n background-color: #fa8c16;\n}\n.ant-tooltip-orange .ant-tooltip-arrow-content::before {\n background: #fa8c16;\n}\n.ant-tooltip-yellow .ant-tooltip-inner {\n background-color: #fadb14;\n}\n.ant-tooltip-yellow .ant-tooltip-arrow-content::before {\n background: #fadb14;\n}\n.ant-tooltip-gold .ant-tooltip-inner {\n background-color: #faad14;\n}\n.ant-tooltip-gold .ant-tooltip-arrow-content::before {\n background: #faad14;\n}\n.ant-tooltip-cyan .ant-tooltip-inner {\n background-color: #13c2c2;\n}\n.ant-tooltip-cyan .ant-tooltip-arrow-content::before {\n background: #13c2c2;\n}\n.ant-tooltip-lime .ant-tooltip-inner {\n background-color: #a0d911;\n}\n.ant-tooltip-lime .ant-tooltip-arrow-content::before {\n background: #a0d911;\n}\n.ant-tooltip-green .ant-tooltip-inner {\n background-color: #52c41a;\n}\n.ant-tooltip-green .ant-tooltip-arrow-content::before {\n background: #52c41a;\n}\n.ant-tooltip-blue .ant-tooltip-inner {\n background-color: #1890ff;\n}\n.ant-tooltip-blue .ant-tooltip-arrow-content::before {\n background: #1890ff;\n}\n.ant-tooltip-geekblue .ant-tooltip-inner {\n background-color: #2f54eb;\n}\n.ant-tooltip-geekblue .ant-tooltip-arrow-content::before {\n background: #2f54eb;\n}\n.ant-tooltip-purple .ant-tooltip-inner {\n background-color: #722ed1;\n}\n.ant-tooltip-purple .ant-tooltip-arrow-content::before {\n background: #722ed1;\n}\n.ant-tooltip-rtl {\n direction: rtl;\n}\n.ant-tooltip-rtl .ant-tooltip-inner {\n text-align: right;\n}\n.ant-transfer-customize-list .ant-transfer-list {\n flex: 1 1 50%;\n width: auto;\n height: auto;\n min-height: 200px;\n}\n.ant-transfer-customize-list .ant-table-wrapper .ant-table-small {\n border: 0;\n border-radius: 0;\n}\n.ant-transfer-customize-list .ant-table-wrapper .ant-table-small .ant-table-selection-column {\n width: 40px;\n min-width: 40px;\n}\n.ant-transfer-customize-list .ant-table-wrapper .ant-table-small > .ant-table-content > .ant-table-body > table > .ant-table-thead > tr > th {\n background: #fafafa;\n}\n.ant-transfer-customize-list .ant-table-wrapper .ant-table-small > .ant-table-content .ant-table-row:last-child td {\n border-bottom: 1px solid #f0f0f0;\n}\n.ant-transfer-customize-list .ant-table-wrapper .ant-table-small .ant-table-body {\n margin: 0;\n}\n.ant-transfer-customize-list .ant-table-wrapper .ant-table-pagination.ant-pagination {\n margin: 16px 0 4px;\n}\n.ant-transfer-customize-list .ant-input[disabled] {\n background-color: transparent;\n}\n.ant-transfer-status-error .ant-transfer-list {\n border-color: #ff4d4f;\n}\n.ant-transfer-status-error .ant-transfer-list-search:not([disabled]) {\n border-color: #d9d9d9;\n}\n.ant-transfer-status-error .ant-transfer-list-search:not([disabled]):hover {\n border-color: #8588ed;\n border-right-width: 1px;\n}\n.ant-input-rtl .ant-transfer-status-error .ant-transfer-list-search:not([disabled]):hover {\n border-right-width: 0;\n border-left-width: 1px !important;\n}\n.ant-transfer-status-error .ant-transfer-list-search:not([disabled]):focus {\n border-color: #8588ed;\n box-shadow: 0 0 0 2px rgba(91, 92, 225, 0.2);\n border-right-width: 1px;\n outline: 0;\n}\n.ant-input-rtl .ant-transfer-status-error .ant-transfer-list-search:not([disabled]):focus {\n border-right-width: 0;\n border-left-width: 1px !important;\n}\n.ant-transfer-status-warning .ant-transfer-list {\n border-color: #faad14;\n}\n.ant-transfer-status-warning .ant-transfer-list-search:not([disabled]) {\n border-color: #d9d9d9;\n}\n.ant-transfer-status-warning .ant-transfer-list-search:not([disabled]):hover {\n border-color: #8588ed;\n border-right-width: 1px;\n}\n.ant-input-rtl .ant-transfer-status-warning .ant-transfer-list-search:not([disabled]):hover {\n border-right-width: 0;\n border-left-width: 1px !important;\n}\n.ant-transfer-status-warning .ant-transfer-list-search:not([disabled]):focus {\n border-color: #8588ed;\n box-shadow: 0 0 0 2px rgba(91, 92, 225, 0.2);\n border-right-width: 1px;\n outline: 0;\n}\n.ant-input-rtl .ant-transfer-status-warning .ant-transfer-list-search:not([disabled]):focus {\n border-right-width: 0;\n border-left-width: 1px !important;\n}\n.ant-transfer {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n display: flex;\n align-items: stretch;\n}\n.ant-transfer-disabled .ant-transfer-list {\n background: #f5f5f5;\n}\n.ant-transfer-list {\n display: flex;\n flex-direction: column;\n width: 180px;\n height: 200px;\n border: 1px solid #d9d9d9;\n border-radius: 5px;\n}\n.ant-transfer-list-with-pagination {\n width: 250px;\n height: auto;\n}\n.ant-transfer-list-search .anticon-search {\n color: rgba(0, 0, 0, 0.25);\n}\n.ant-transfer-list-header {\n display: flex;\n flex: none;\n align-items: center;\n height: 40px;\n padding: 8px 12px 9px;\n color: rgba(0, 0, 0, 0.85);\n background: #fff;\n border-bottom: 1px solid #f0f0f0;\n border-radius: 5px 5px 0 0;\n}\n.ant-transfer-list-header > *:not(:last-child) {\n margin-right: 4px;\n}\n.ant-transfer-list-header > * {\n flex: none;\n}\n.ant-transfer-list-header-title {\n flex: auto;\n overflow: hidden;\n white-space: nowrap;\n text-align: right;\n text-overflow: ellipsis;\n}\n.ant-transfer-list-header-dropdown {\n font-size: 10px;\n transform: translateY(10%);\n cursor: pointer;\n}\n.ant-transfer-list-header-dropdown[disabled] {\n cursor: not-allowed;\n}\n.ant-transfer-list-body {\n display: flex;\n flex: auto;\n flex-direction: column;\n overflow: hidden;\n font-size: 14px;\n}\n.ant-transfer-list-body-search-wrapper {\n position: relative;\n flex: none;\n padding: 12px;\n}\n.ant-transfer-list-content {\n flex: auto;\n margin: 0;\n padding: 0;\n overflow: auto;\n list-style: none;\n}\n.ant-transfer-list-content-item {\n display: flex;\n align-items: center;\n min-height: 32px;\n padding: 6px 12px;\n line-height: 20px;\n transition: all 0.3s;\n}\n.ant-transfer-list-content-item > *:not(:last-child) {\n margin-right: 8px;\n}\n.ant-transfer-list-content-item > * {\n flex: none;\n}\n.ant-transfer-list-content-item-text {\n flex: auto;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.ant-transfer-list-content-item-remove {\n position: relative;\n color: #d9d9d9;\n cursor: pointer;\n transition: all 0.3s;\n}\n.ant-transfer-list-content-item-remove:hover {\n color: #8588ed;\n}\n.ant-transfer-list-content-item-remove::after {\n position: absolute;\n top: -6px;\n right: -50%;\n bottom: -6px;\n left: -50%;\n content: '';\n}\n.ant-transfer-list-content-item:not(.ant-transfer-list-content-item-disabled):hover {\n background-color: #f5f5f5;\n cursor: pointer;\n}\n.ant-transfer-list-content-item:not(.ant-transfer-list-content-item-disabled).ant-transfer-list-content-item-checked:hover {\n background-color: #e6e9ff;\n}\n.ant-transfer-list-content-show-remove .ant-transfer-list-content-item:not(.ant-transfer-list-content-item-disabled):hover {\n background: transparent;\n cursor: default;\n}\n.ant-transfer-list-content-item-checked {\n background-color: #f0f2ff;\n}\n.ant-transfer-list-content-item-disabled {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n}\n.ant-transfer-list-pagination {\n padding: 8px 0;\n text-align: right;\n border-top: 1px solid #f0f0f0;\n}\n.ant-transfer-list-body-not-found {\n flex: none;\n width: 100%;\n margin: auto 0;\n color: rgba(0, 0, 0, 0.25);\n text-align: center;\n}\n.ant-transfer-list-footer {\n border-top: 1px solid #f0f0f0;\n}\n.ant-transfer-operation {\n display: flex;\n flex: none;\n flex-direction: column;\n align-self: center;\n margin: 0 8px;\n vertical-align: middle;\n}\n.ant-transfer-operation .ant-btn {\n display: block;\n}\n.ant-transfer-operation .ant-btn:first-child {\n margin-bottom: 4px;\n}\n.ant-transfer-operation .ant-btn .anticon {\n font-size: 12px;\n}\n.ant-transfer .ant-empty-image {\n max-height: -2px;\n}\n.ant-transfer-rtl {\n direction: rtl;\n}\n.ant-transfer-rtl .ant-transfer-list-search {\n padding-right: 8px;\n padding-left: 24px;\n}\n.ant-transfer-rtl .ant-transfer-list-search-action {\n right: auto;\n left: 12px;\n}\n.ant-transfer-rtl .ant-transfer-list-header > *:not(:last-child) {\n margin-right: 0;\n margin-left: 4px;\n}\n.ant-transfer-rtl .ant-transfer-list-header {\n right: 0;\n left: auto;\n}\n.ant-transfer-rtl .ant-transfer-list-header-title {\n text-align: left;\n}\n.ant-transfer-rtl .ant-transfer-list-content-item > *:not(:last-child) {\n margin-right: 0;\n margin-left: 8px;\n}\n.ant-transfer-rtl .ant-transfer-list-pagination {\n text-align: left;\n}\n.ant-transfer-rtl .ant-transfer-list-footer {\n right: 0;\n left: auto;\n}\n@keyframes ant-tree-node-fx-do-not-use {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n}\n.ant-tree.ant-tree-directory .ant-tree-treenode {\n position: relative;\n}\n.ant-tree.ant-tree-directory .ant-tree-treenode::before {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 4px;\n left: 0;\n transition: background-color 0.3s;\n content: '';\n pointer-events: none;\n}\n.ant-tree.ant-tree-directory .ant-tree-treenode:hover::before {\n background: #f5f5f5;\n}\n.ant-tree.ant-tree-directory .ant-tree-treenode > * {\n z-index: 1;\n}\n.ant-tree.ant-tree-directory .ant-tree-treenode .ant-tree-switcher {\n transition: color 0.3s;\n}\n.ant-tree.ant-tree-directory .ant-tree-treenode .ant-tree-node-content-wrapper {\n border-radius: 0;\n user-select: none;\n}\n.ant-tree.ant-tree-directory .ant-tree-treenode .ant-tree-node-content-wrapper:hover {\n background: transparent;\n}\n.ant-tree.ant-tree-directory .ant-tree-treenode .ant-tree-node-content-wrapper.ant-tree-node-selected {\n color: #fff;\n background: transparent;\n}\n.ant-tree.ant-tree-directory .ant-tree-treenode-selected:hover::before,\n.ant-tree.ant-tree-directory .ant-tree-treenode-selected::before {\n background: #5b5ce1;\n}\n.ant-tree.ant-tree-directory .ant-tree-treenode-selected .ant-tree-switcher {\n color: #fff;\n}\n.ant-tree.ant-tree-directory .ant-tree-treenode-selected .ant-tree-node-content-wrapper {\n color: #fff;\n background: transparent;\n}\n.ant-tree-checkbox {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n top: 0.2em;\n line-height: 1;\n white-space: nowrap;\n outline: none;\n cursor: pointer;\n}\n.ant-tree-checkbox-wrapper:hover .ant-tree-checkbox-inner,\n.ant-tree-checkbox:hover .ant-tree-checkbox-inner,\n.ant-tree-checkbox-input:focus + .ant-tree-checkbox-inner {\n border-color: #5b5ce1;\n}\n.ant-tree-checkbox-checked::after {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 1px solid #5b5ce1;\n border-radius: 5px;\n visibility: hidden;\n animation: antCheckboxEffect 0.36s ease-in-out;\n animation-fill-mode: backwards;\n content: '';\n}\n.ant-tree-checkbox:hover::after,\n.ant-tree-checkbox-wrapper:hover .ant-tree-checkbox::after {\n visibility: visible;\n}\n.ant-tree-checkbox-inner {\n position: relative;\n top: 0;\n left: 0;\n display: block;\n width: 16px;\n height: 16px;\n direction: ltr;\n background-color: #fff;\n border: 1px solid #d9d9d9;\n border-radius: 5px;\n border-collapse: separate;\n transition: all 0.3s;\n}\n.ant-tree-checkbox-inner::after {\n position: absolute;\n top: 50%;\n left: 21.5%;\n display: table;\n width: 5.71428571px;\n height: 9.14285714px;\n border: 2px solid #fff;\n border-top: 0;\n border-left: 0;\n transform: rotate(45deg) scale(0) translate(-50%, -50%);\n opacity: 0;\n transition: all 0.1s cubic-bezier(0.71, -0.46, 0.88, 0.6), opacity 0.1s;\n content: ' ';\n}\n.ant-tree-checkbox-input {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n width: 100%;\n height: 100%;\n cursor: pointer;\n opacity: 0;\n}\n.ant-tree-checkbox-checked .ant-tree-checkbox-inner::after {\n position: absolute;\n display: table;\n border: 2px solid #fff;\n border-top: 0;\n border-left: 0;\n transform: rotate(45deg) scale(1) translate(-50%, -50%);\n opacity: 1;\n transition: all 0.2s cubic-bezier(0.12, 0.4, 0.29, 1.46) 0.1s;\n content: ' ';\n}\n.ant-tree-checkbox-checked .ant-tree-checkbox-inner {\n background-color: #5b5ce1;\n border-color: #5b5ce1;\n}\n.ant-tree-checkbox-disabled {\n cursor: not-allowed;\n}\n.ant-tree-checkbox-disabled.ant-tree-checkbox-checked .ant-tree-checkbox-inner::after {\n border-color: rgba(0, 0, 0, 0.25);\n animation-name: none;\n}\n.ant-tree-checkbox-disabled .ant-tree-checkbox-input {\n cursor: not-allowed;\n pointer-events: none;\n}\n.ant-tree-checkbox-disabled .ant-tree-checkbox-inner {\n background-color: #f5f5f5;\n border-color: #d9d9d9 !important;\n}\n.ant-tree-checkbox-disabled .ant-tree-checkbox-inner::after {\n border-color: #f5f5f5;\n border-collapse: separate;\n animation-name: none;\n}\n.ant-tree-checkbox-disabled + span {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n}\n.ant-tree-checkbox-disabled:hover::after,\n.ant-tree-checkbox-wrapper:hover .ant-tree-checkbox-disabled::after {\n visibility: hidden;\n}\n.ant-tree-checkbox-wrapper {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n display: inline-flex;\n align-items: baseline;\n line-height: unset;\n cursor: pointer;\n}\n.ant-tree-checkbox-wrapper::after {\n display: inline-block;\n width: 0;\n overflow: hidden;\n content: '\\a0';\n}\n.ant-tree-checkbox-wrapper.ant-tree-checkbox-wrapper-disabled {\n cursor: not-allowed;\n}\n.ant-tree-checkbox-wrapper + .ant-tree-checkbox-wrapper {\n margin-left: 8px;\n}\n.ant-tree-checkbox-wrapper.ant-tree-checkbox-wrapper-in-form-item input[type='checkbox'] {\n width: 14px;\n height: 14px;\n}\n.ant-tree-checkbox + span {\n padding-right: 8px;\n padding-left: 8px;\n}\n.ant-tree-checkbox-group {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n display: inline-block;\n}\n.ant-tree-checkbox-group-item {\n margin-right: 8px;\n}\n.ant-tree-checkbox-group-item:last-child {\n margin-right: 0;\n}\n.ant-tree-checkbox-group-item + .ant-tree-checkbox-group-item {\n margin-left: 0;\n}\n.ant-tree-checkbox-indeterminate .ant-tree-checkbox-inner {\n background-color: #fff;\n border-color: #d9d9d9;\n}\n.ant-tree-checkbox-indeterminate .ant-tree-checkbox-inner::after {\n top: 50%;\n left: 50%;\n width: 8px;\n height: 8px;\n background-color: #5b5ce1;\n border: 0;\n transform: translate(-50%, -50%) scale(1);\n opacity: 1;\n content: ' ';\n}\n.ant-tree-checkbox-indeterminate.ant-tree-checkbox-disabled .ant-tree-checkbox-inner::after {\n background-color: rgba(0, 0, 0, 0.25);\n border-color: rgba(0, 0, 0, 0.25);\n}\n.ant-tree-checkbox-rtl {\n direction: rtl;\n}\n.ant-tree-checkbox-group-rtl .ant-tree-checkbox-group-item {\n margin-right: 0;\n margin-left: 8px;\n}\n.ant-tree-checkbox-group-rtl .ant-tree-checkbox-group-item:last-child {\n margin-left: 0 !important;\n}\n.ant-tree-checkbox-group-rtl .ant-tree-checkbox-group-item + .ant-tree-checkbox-group-item {\n margin-left: 8px;\n}\n.ant-tree {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n background: #fff;\n border-radius: 5px;\n transition: background-color 0.3s;\n}\n.ant-tree-focused:not(:hover):not(.ant-tree-active-focused) {\n background: #f0f2ff;\n}\n.ant-tree-list-holder-inner {\n align-items: flex-start;\n}\n.ant-tree.ant-tree-block-node .ant-tree-list-holder-inner {\n align-items: stretch;\n}\n.ant-tree.ant-tree-block-node .ant-tree-list-holder-inner .ant-tree-node-content-wrapper {\n flex: auto;\n}\n.ant-tree.ant-tree-block-node .ant-tree-list-holder-inner .ant-tree-treenode.dragging {\n position: relative;\n}\n.ant-tree.ant-tree-block-node .ant-tree-list-holder-inner .ant-tree-treenode.dragging::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 4px;\n left: 0;\n border: 1px solid #5b5ce1;\n opacity: 0;\n animation: ant-tree-node-fx-do-not-use 0.3s;\n animation-play-state: running;\n animation-fill-mode: forwards;\n content: '';\n pointer-events: none;\n}\n.ant-tree .ant-tree-treenode {\n display: flex;\n align-items: flex-start;\n padding: 0 0 4px 0;\n outline: none;\n}\n.ant-tree .ant-tree-treenode-disabled .ant-tree-node-content-wrapper {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n}\n.ant-tree .ant-tree-treenode-disabled .ant-tree-node-content-wrapper:hover {\n background: transparent;\n}\n.ant-tree .ant-tree-treenode-active .ant-tree-node-content-wrapper {\n background: #f5f5f5;\n}\n.ant-tree .ant-tree-treenode:not(.ant-tree .ant-tree-treenode-disabled).filter-node .ant-tree-title {\n color: inherit;\n font-weight: 500;\n}\n.ant-tree .ant-tree-treenode-draggable .ant-tree-draggable-icon {\n width: 24px;\n line-height: 24px;\n text-align: center;\n visibility: visible;\n opacity: 0.2;\n transition: opacity 0.3s;\n}\n.ant-tree-treenode:hover .ant-tree .ant-tree-treenode-draggable .ant-tree-draggable-icon {\n opacity: 0.45;\n}\n.ant-tree .ant-tree-treenode-draggable.ant-tree-treenode-disabled .ant-tree-draggable-icon {\n visibility: hidden;\n}\n.ant-tree-indent {\n align-self: stretch;\n white-space: nowrap;\n user-select: none;\n}\n.ant-tree-indent-unit {\n display: inline-block;\n width: 24px;\n}\n.ant-tree-draggable-icon {\n visibility: hidden;\n}\n.ant-tree-switcher {\n position: relative;\n flex: none;\n align-self: stretch;\n width: 24px;\n margin: 0;\n line-height: 24px;\n text-align: center;\n cursor: pointer;\n user-select: none;\n}\n.ant-tree-switcher .ant-tree-switcher-icon,\n.ant-tree-switcher .ant-select-tree-switcher-icon {\n display: inline-block;\n font-size: 10px;\n vertical-align: baseline;\n}\n.ant-tree-switcher .ant-tree-switcher-icon svg,\n.ant-tree-switcher .ant-select-tree-switcher-icon svg {\n transition: transform 0.3s;\n}\n.ant-tree-switcher-noop {\n cursor: default;\n}\n.ant-tree-switcher_close .ant-tree-switcher-icon svg {\n transform: rotate(-90deg);\n}\n.ant-tree-switcher-loading-icon {\n color: #5b5ce1;\n}\n.ant-tree-switcher-leaf-line {\n position: relative;\n z-index: 1;\n display: inline-block;\n width: 100%;\n height: 100%;\n}\n.ant-tree-switcher-leaf-line::before {\n position: absolute;\n top: 0;\n right: 12px;\n bottom: -4px;\n margin-left: -1px;\n border-right: 1px solid #d9d9d9;\n content: ' ';\n}\n.ant-tree-switcher-leaf-line::after {\n position: absolute;\n width: 10px;\n height: 14px;\n border-bottom: 1px solid #d9d9d9;\n content: ' ';\n}\n.ant-tree-checkbox {\n top: initial;\n margin: 4px 8px 0 0;\n}\n.ant-tree .ant-tree-node-content-wrapper {\n position: relative;\n z-index: auto;\n min-height: 24px;\n margin: 0;\n padding: 0 4px;\n color: inherit;\n line-height: 24px;\n background: transparent;\n border-radius: 5px;\n cursor: pointer;\n transition: all 0.3s, border 0s, line-height 0s, box-shadow 0s;\n}\n.ant-tree .ant-tree-node-content-wrapper:hover {\n background-color: #f5f5f5;\n}\n.ant-tree .ant-tree-node-content-wrapper.ant-tree-node-selected {\n background-color: #f0f2ff;\n}\n.ant-tree .ant-tree-node-content-wrapper .ant-tree-iconEle {\n display: inline-block;\n width: 24px;\n height: 24px;\n line-height: 24px;\n text-align: center;\n vertical-align: top;\n}\n.ant-tree .ant-tree-node-content-wrapper .ant-tree-iconEle:empty {\n display: none;\n}\n.ant-tree-unselectable .ant-tree-node-content-wrapper:hover {\n background-color: transparent;\n}\n.ant-tree-node-content-wrapper {\n line-height: 24px;\n user-select: none;\n}\n.ant-tree-node-content-wrapper .ant-tree-drop-indicator {\n position: absolute;\n z-index: 1;\n height: 2px;\n background-color: #5b5ce1;\n border-radius: 1px;\n pointer-events: none;\n}\n.ant-tree-node-content-wrapper .ant-tree-drop-indicator::after {\n position: absolute;\n top: -3px;\n left: -6px;\n width: 8px;\n height: 8px;\n background-color: transparent;\n border: 2px solid #5b5ce1;\n border-radius: 50%;\n content: '';\n}\n.ant-tree .ant-tree-treenode.drop-container > [draggable] {\n box-shadow: 0 0 0 2px #5b5ce1;\n}\n.ant-tree-show-line .ant-tree-indent-unit {\n position: relative;\n height: 100%;\n}\n.ant-tree-show-line .ant-tree-indent-unit::before {\n position: absolute;\n top: 0;\n right: 12px;\n bottom: -4px;\n border-right: 1px solid #d9d9d9;\n content: '';\n}\n.ant-tree-show-line .ant-tree-indent-unit-end::before {\n display: none;\n}\n.ant-tree-show-line .ant-tree-switcher {\n background: #fff;\n}\n.ant-tree-show-line .ant-tree-switcher-line-icon {\n vertical-align: -0.15em;\n}\n.ant-tree .ant-tree-treenode-leaf-last .ant-tree-switcher-leaf-line::before {\n top: auto !important;\n bottom: auto !important;\n height: 14px !important;\n}\n.ant-tree-rtl {\n direction: rtl;\n}\n.ant-tree-rtl .ant-tree-node-content-wrapper[draggable='true'] .ant-tree-drop-indicator::after {\n right: -6px;\n left: unset;\n}\n.ant-tree .ant-tree-treenode-rtl {\n direction: rtl;\n}\n.ant-tree-rtl .ant-tree-switcher_close .ant-tree-switcher-icon svg {\n transform: rotate(90deg);\n}\n.ant-tree-rtl.ant-tree-show-line .ant-tree-indent-unit::before {\n right: auto;\n left: -13px;\n border-right: none;\n border-left: 1px solid #d9d9d9;\n}\n.ant-tree-rtl .ant-tree-checkbox {\n margin: 4px 0 0 8px;\n}\n.ant-tree-select-dropdown-rtl .ant-select-tree-checkbox {\n margin: 4px 0 0 8px;\n}\n.ant-select-tree-checkbox {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n position: relative;\n top: 0.2em;\n line-height: 1;\n white-space: nowrap;\n outline: none;\n cursor: pointer;\n}\n.ant-select-tree-checkbox-wrapper:hover .ant-select-tree-checkbox-inner,\n.ant-select-tree-checkbox:hover .ant-select-tree-checkbox-inner,\n.ant-select-tree-checkbox-input:focus + .ant-select-tree-checkbox-inner {\n border-color: #5b5ce1;\n}\n.ant-select-tree-checkbox-checked::after {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 1px solid #5b5ce1;\n border-radius: 5px;\n visibility: hidden;\n animation: antCheckboxEffect 0.36s ease-in-out;\n animation-fill-mode: backwards;\n content: '';\n}\n.ant-select-tree-checkbox:hover::after,\n.ant-select-tree-checkbox-wrapper:hover .ant-select-tree-checkbox::after {\n visibility: visible;\n}\n.ant-select-tree-checkbox-inner {\n position: relative;\n top: 0;\n left: 0;\n display: block;\n width: 16px;\n height: 16px;\n direction: ltr;\n background-color: #fff;\n border: 1px solid #d9d9d9;\n border-radius: 5px;\n border-collapse: separate;\n transition: all 0.3s;\n}\n.ant-select-tree-checkbox-inner::after {\n position: absolute;\n top: 50%;\n left: 21.5%;\n display: table;\n width: 5.71428571px;\n height: 9.14285714px;\n border: 2px solid #fff;\n border-top: 0;\n border-left: 0;\n transform: rotate(45deg) scale(0) translate(-50%, -50%);\n opacity: 0;\n transition: all 0.1s cubic-bezier(0.71, -0.46, 0.88, 0.6), opacity 0.1s;\n content: ' ';\n}\n.ant-select-tree-checkbox-input {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n width: 100%;\n height: 100%;\n cursor: pointer;\n opacity: 0;\n}\n.ant-select-tree-checkbox-checked .ant-select-tree-checkbox-inner::after {\n position: absolute;\n display: table;\n border: 2px solid #fff;\n border-top: 0;\n border-left: 0;\n transform: rotate(45deg) scale(1) translate(-50%, -50%);\n opacity: 1;\n transition: all 0.2s cubic-bezier(0.12, 0.4, 0.29, 1.46) 0.1s;\n content: ' ';\n}\n.ant-select-tree-checkbox-checked .ant-select-tree-checkbox-inner {\n background-color: #5b5ce1;\n border-color: #5b5ce1;\n}\n.ant-select-tree-checkbox-disabled {\n cursor: not-allowed;\n}\n.ant-select-tree-checkbox-disabled.ant-select-tree-checkbox-checked .ant-select-tree-checkbox-inner::after {\n border-color: rgba(0, 0, 0, 0.25);\n animation-name: none;\n}\n.ant-select-tree-checkbox-disabled .ant-select-tree-checkbox-input {\n cursor: not-allowed;\n pointer-events: none;\n}\n.ant-select-tree-checkbox-disabled .ant-select-tree-checkbox-inner {\n background-color: #f5f5f5;\n border-color: #d9d9d9 !important;\n}\n.ant-select-tree-checkbox-disabled .ant-select-tree-checkbox-inner::after {\n border-color: #f5f5f5;\n border-collapse: separate;\n animation-name: none;\n}\n.ant-select-tree-checkbox-disabled + span {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n}\n.ant-select-tree-checkbox-disabled:hover::after,\n.ant-select-tree-checkbox-wrapper:hover .ant-select-tree-checkbox-disabled::after {\n visibility: hidden;\n}\n.ant-select-tree-checkbox-wrapper {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n display: inline-flex;\n align-items: baseline;\n line-height: unset;\n cursor: pointer;\n}\n.ant-select-tree-checkbox-wrapper::after {\n display: inline-block;\n width: 0;\n overflow: hidden;\n content: '\\a0';\n}\n.ant-select-tree-checkbox-wrapper.ant-select-tree-checkbox-wrapper-disabled {\n cursor: not-allowed;\n}\n.ant-select-tree-checkbox-wrapper + .ant-select-tree-checkbox-wrapper {\n margin-left: 8px;\n}\n.ant-select-tree-checkbox-wrapper.ant-select-tree-checkbox-wrapper-in-form-item input[type='checkbox'] {\n width: 14px;\n height: 14px;\n}\n.ant-select-tree-checkbox + span {\n padding-right: 8px;\n padding-left: 8px;\n}\n.ant-select-tree-checkbox-group {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n display: inline-block;\n}\n.ant-select-tree-checkbox-group-item {\n margin-right: 8px;\n}\n.ant-select-tree-checkbox-group-item:last-child {\n margin-right: 0;\n}\n.ant-select-tree-checkbox-group-item + .ant-select-tree-checkbox-group-item {\n margin-left: 0;\n}\n.ant-select-tree-checkbox-indeterminate .ant-select-tree-checkbox-inner {\n background-color: #fff;\n border-color: #d9d9d9;\n}\n.ant-select-tree-checkbox-indeterminate .ant-select-tree-checkbox-inner::after {\n top: 50%;\n left: 50%;\n width: 8px;\n height: 8px;\n background-color: #5b5ce1;\n border: 0;\n transform: translate(-50%, -50%) scale(1);\n opacity: 1;\n content: ' ';\n}\n.ant-select-tree-checkbox-indeterminate.ant-select-tree-checkbox-disabled .ant-select-tree-checkbox-inner::after {\n background-color: rgba(0, 0, 0, 0.25);\n border-color: rgba(0, 0, 0, 0.25);\n}\n.ant-select-tree-checkbox-rtl {\n direction: rtl;\n}\n.ant-select-tree-checkbox-group-rtl .ant-select-tree-checkbox-group-item {\n margin-right: 0;\n margin-left: 8px;\n}\n.ant-select-tree-checkbox-group-rtl .ant-select-tree-checkbox-group-item:last-child {\n margin-left: 0 !important;\n}\n.ant-select-tree-checkbox-group-rtl .ant-select-tree-checkbox-group-item + .ant-select-tree-checkbox-group-item {\n margin-left: 8px;\n}\n.ant-tree-select-dropdown {\n padding: 8px 4px;\n}\n.ant-tree-select-dropdown-rtl {\n direction: rtl;\n}\n.ant-tree-select-dropdown .ant-select-tree {\n border-radius: 0;\n}\n.ant-tree-select-dropdown .ant-select-tree-list-holder-inner {\n align-items: stretch;\n}\n.ant-tree-select-dropdown .ant-select-tree-list-holder-inner .ant-select-tree-treenode .ant-select-tree-node-content-wrapper {\n flex: auto;\n}\n.ant-select-tree {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n background: #fff;\n border-radius: 5px;\n transition: background-color 0.3s;\n}\n.ant-select-tree-focused:not(:hover):not(.ant-select-tree-active-focused) {\n background: #f0f2ff;\n}\n.ant-select-tree-list-holder-inner {\n align-items: flex-start;\n}\n.ant-select-tree.ant-select-tree-block-node .ant-select-tree-list-holder-inner {\n align-items: stretch;\n}\n.ant-select-tree.ant-select-tree-block-node .ant-select-tree-list-holder-inner .ant-select-tree-node-content-wrapper {\n flex: auto;\n}\n.ant-select-tree.ant-select-tree-block-node .ant-select-tree-list-holder-inner .ant-select-tree-treenode.dragging {\n position: relative;\n}\n.ant-select-tree.ant-select-tree-block-node .ant-select-tree-list-holder-inner .ant-select-tree-treenode.dragging::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 4px;\n left: 0;\n border: 1px solid #5b5ce1;\n opacity: 0;\n animation: ant-tree-node-fx-do-not-use 0.3s;\n animation-play-state: running;\n animation-fill-mode: forwards;\n content: '';\n pointer-events: none;\n}\n.ant-select-tree .ant-select-tree-treenode {\n display: flex;\n align-items: flex-start;\n padding: 0 0 4px 0;\n outline: none;\n}\n.ant-select-tree .ant-select-tree-treenode-disabled .ant-select-tree-node-content-wrapper {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n}\n.ant-select-tree .ant-select-tree-treenode-disabled .ant-select-tree-node-content-wrapper:hover {\n background: transparent;\n}\n.ant-select-tree .ant-select-tree-treenode-active .ant-select-tree-node-content-wrapper {\n background: #f5f5f5;\n}\n.ant-select-tree .ant-select-tree-treenode:not(.ant-select-tree .ant-select-tree-treenode-disabled).filter-node .ant-select-tree-title {\n color: inherit;\n font-weight: 500;\n}\n.ant-select-tree .ant-select-tree-treenode-draggable .ant-select-tree-draggable-icon {\n width: 24px;\n line-height: 24px;\n text-align: center;\n visibility: visible;\n opacity: 0.2;\n transition: opacity 0.3s;\n}\n.ant-select-tree-treenode:hover .ant-select-tree .ant-select-tree-treenode-draggable .ant-select-tree-draggable-icon {\n opacity: 0.45;\n}\n.ant-select-tree .ant-select-tree-treenode-draggable.ant-select-tree-treenode-disabled .ant-select-tree-draggable-icon {\n visibility: hidden;\n}\n.ant-select-tree-indent {\n align-self: stretch;\n white-space: nowrap;\n user-select: none;\n}\n.ant-select-tree-indent-unit {\n display: inline-block;\n width: 24px;\n}\n.ant-select-tree-draggable-icon {\n visibility: hidden;\n}\n.ant-select-tree-switcher {\n position: relative;\n flex: none;\n align-self: stretch;\n width: 24px;\n margin: 0;\n line-height: 24px;\n text-align: center;\n cursor: pointer;\n user-select: none;\n}\n.ant-select-tree-switcher .ant-tree-switcher-icon,\n.ant-select-tree-switcher .ant-select-tree-switcher-icon {\n display: inline-block;\n font-size: 10px;\n vertical-align: baseline;\n}\n.ant-select-tree-switcher .ant-tree-switcher-icon svg,\n.ant-select-tree-switcher .ant-select-tree-switcher-icon svg {\n transition: transform 0.3s;\n}\n.ant-select-tree-switcher-noop {\n cursor: default;\n}\n.ant-select-tree-switcher_close .ant-select-tree-switcher-icon svg {\n transform: rotate(-90deg);\n}\n.ant-select-tree-switcher-loading-icon {\n color: #5b5ce1;\n}\n.ant-select-tree-switcher-leaf-line {\n position: relative;\n z-index: 1;\n display: inline-block;\n width: 100%;\n height: 100%;\n}\n.ant-select-tree-switcher-leaf-line::before {\n position: absolute;\n top: 0;\n right: 12px;\n bottom: -4px;\n margin-left: -1px;\n border-right: 1px solid #d9d9d9;\n content: ' ';\n}\n.ant-select-tree-switcher-leaf-line::after {\n position: absolute;\n width: 10px;\n height: 14px;\n border-bottom: 1px solid #d9d9d9;\n content: ' ';\n}\n.ant-select-tree-checkbox {\n top: initial;\n margin: 4px 8px 0 0;\n}\n.ant-select-tree .ant-select-tree-node-content-wrapper {\n position: relative;\n z-index: auto;\n min-height: 24px;\n margin: 0;\n padding: 0 4px;\n color: inherit;\n line-height: 24px;\n background: transparent;\n border-radius: 5px;\n cursor: pointer;\n transition: all 0.3s, border 0s, line-height 0s, box-shadow 0s;\n}\n.ant-select-tree .ant-select-tree-node-content-wrapper:hover {\n background-color: #f5f5f5;\n}\n.ant-select-tree .ant-select-tree-node-content-wrapper.ant-select-tree-node-selected {\n background-color: #f0f2ff;\n}\n.ant-select-tree .ant-select-tree-node-content-wrapper .ant-select-tree-iconEle {\n display: inline-block;\n width: 24px;\n height: 24px;\n line-height: 24px;\n text-align: center;\n vertical-align: top;\n}\n.ant-select-tree .ant-select-tree-node-content-wrapper .ant-select-tree-iconEle:empty {\n display: none;\n}\n.ant-select-tree-unselectable .ant-select-tree-node-content-wrapper:hover {\n background-color: transparent;\n}\n.ant-select-tree-node-content-wrapper {\n line-height: 24px;\n user-select: none;\n}\n.ant-select-tree-node-content-wrapper .ant-tree-drop-indicator {\n position: absolute;\n z-index: 1;\n height: 2px;\n background-color: #5b5ce1;\n border-radius: 1px;\n pointer-events: none;\n}\n.ant-select-tree-node-content-wrapper .ant-tree-drop-indicator::after {\n position: absolute;\n top: -3px;\n left: -6px;\n width: 8px;\n height: 8px;\n background-color: transparent;\n border: 2px solid #5b5ce1;\n border-radius: 50%;\n content: '';\n}\n.ant-select-tree .ant-select-tree-treenode.drop-container > [draggable] {\n box-shadow: 0 0 0 2px #5b5ce1;\n}\n.ant-select-tree-show-line .ant-select-tree-indent-unit {\n position: relative;\n height: 100%;\n}\n.ant-select-tree-show-line .ant-select-tree-indent-unit::before {\n position: absolute;\n top: 0;\n right: 12px;\n bottom: -4px;\n border-right: 1px solid #d9d9d9;\n content: '';\n}\n.ant-select-tree-show-line .ant-select-tree-indent-unit-end::before {\n display: none;\n}\n.ant-select-tree-show-line .ant-select-tree-switcher {\n background: #fff;\n}\n.ant-select-tree-show-line .ant-select-tree-switcher-line-icon {\n vertical-align: -0.15em;\n}\n.ant-select-tree .ant-select-tree-treenode-leaf-last .ant-select-tree-switcher-leaf-line::before {\n top: auto !important;\n bottom: auto !important;\n height: 14px !important;\n}\n.ant-tree-select-dropdown-rtl .ant-select-tree .ant-select-tree-switcher_close .ant-select-tree-switcher-icon svg {\n transform: rotate(90deg);\n}\n.ant-tree-select-dropdown-rtl .ant-select-tree .ant-select-tree-switcher-loading-icon {\n transform: scaleY(-1);\n}\n.ant-typography {\n color: rgba(0, 0, 0, 0.85);\n overflow-wrap: break-word;\n}\n.ant-typography.ant-typography-secondary {\n color: rgba(0, 0, 0, 0.45);\n}\n.ant-typography.ant-typography-success {\n color: #52c41a;\n}\n.ant-typography.ant-typography-warning {\n color: #faad14;\n}\n.ant-typography.ant-typography-danger {\n color: #ff4d4f;\n}\na.ant-typography.ant-typography-danger:active,\na.ant-typography.ant-typography-danger:focus {\n color: #d9363e;\n}\na.ant-typography.ant-typography-danger:hover {\n color: #ff7875;\n}\n.ant-typography.ant-typography-disabled {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n user-select: none;\n}\ndiv.ant-typography,\n.ant-typography p {\n margin-bottom: 1em;\n}\nh1.ant-typography,\ndiv.ant-typography-h1,\ndiv.ant-typography-h1 > textarea,\n.ant-typography h1 {\n margin-bottom: 0.5em;\n color: rgba(0, 0, 0, 0.85);\n font-weight: 600;\n font-size: 38px;\n line-height: 1.23;\n}\nh2.ant-typography,\ndiv.ant-typography-h2,\ndiv.ant-typography-h2 > textarea,\n.ant-typography h2 {\n margin-bottom: 0.5em;\n color: rgba(0, 0, 0, 0.85);\n font-weight: 600;\n font-size: 30px;\n line-height: 1.35;\n}\nh3.ant-typography,\ndiv.ant-typography-h3,\ndiv.ant-typography-h3 > textarea,\n.ant-typography h3 {\n margin-bottom: 0.5em;\n color: rgba(0, 0, 0, 0.85);\n font-weight: 600;\n font-size: 24px;\n line-height: 1.35;\n}\nh4.ant-typography,\ndiv.ant-typography-h4,\ndiv.ant-typography-h4 > textarea,\n.ant-typography h4 {\n margin-bottom: 0.5em;\n color: rgba(0, 0, 0, 0.85);\n font-weight: 600;\n font-size: 20px;\n line-height: 1.4;\n}\nh5.ant-typography,\ndiv.ant-typography-h5,\ndiv.ant-typography-h5 > textarea,\n.ant-typography h5 {\n margin-bottom: 0.5em;\n color: rgba(0, 0, 0, 0.85);\n font-weight: 600;\n font-size: 16px;\n line-height: 1.5;\n}\n.ant-typography + h1.ant-typography,\n.ant-typography + h2.ant-typography,\n.ant-typography + h3.ant-typography,\n.ant-typography + h4.ant-typography,\n.ant-typography + h5.ant-typography {\n margin-top: 1.2em;\n}\n.ant-typography div + h1,\n.ant-typography ul + h1,\n.ant-typography li + h1,\n.ant-typography p + h1,\n.ant-typography h1 + h1,\n.ant-typography h2 + h1,\n.ant-typography h3 + h1,\n.ant-typography h4 + h1,\n.ant-typography h5 + h1,\n.ant-typography div + h2,\n.ant-typography ul + h2,\n.ant-typography li + h2,\n.ant-typography p + h2,\n.ant-typography h1 + h2,\n.ant-typography h2 + h2,\n.ant-typography h3 + h2,\n.ant-typography h4 + h2,\n.ant-typography h5 + h2,\n.ant-typography div + h3,\n.ant-typography ul + h3,\n.ant-typography li + h3,\n.ant-typography p + h3,\n.ant-typography h1 + h3,\n.ant-typography h2 + h3,\n.ant-typography h3 + h3,\n.ant-typography h4 + h3,\n.ant-typography h5 + h3,\n.ant-typography div + h4,\n.ant-typography ul + h4,\n.ant-typography li + h4,\n.ant-typography p + h4,\n.ant-typography h1 + h4,\n.ant-typography h2 + h4,\n.ant-typography h3 + h4,\n.ant-typography h4 + h4,\n.ant-typography h5 + h4,\n.ant-typography div + h5,\n.ant-typography ul + h5,\n.ant-typography li + h5,\n.ant-typography p + h5,\n.ant-typography h1 + h5,\n.ant-typography h2 + h5,\n.ant-typography h3 + h5,\n.ant-typography h4 + h5,\n.ant-typography h5 + h5 {\n margin-top: 1.2em;\n}\na.ant-typography-ellipsis,\nspan.ant-typography-ellipsis {\n display: inline-block;\n max-width: 100%;\n}\na.ant-typography,\n.ant-typography a {\n color: #5b5ce1;\n outline: none;\n cursor: pointer;\n transition: color 0.3s;\n text-decoration: none;\n}\na.ant-typography:focus-visible,\n.ant-typography a:focus-visible,\na.ant-typography:hover,\n.ant-typography a:hover {\n color: #8588ed;\n}\na.ant-typography:active,\n.ant-typography a:active {\n color: #4541ba;\n}\na.ant-typography:active,\n.ant-typography a:active,\na.ant-typography:hover,\n.ant-typography a:hover {\n text-decoration: none;\n}\na.ant-typography[disabled],\n.ant-typography a[disabled],\na.ant-typography.ant-typography-disabled,\n.ant-typography a.ant-typography-disabled {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n}\na.ant-typography[disabled]:active,\n.ant-typography a[disabled]:active,\na.ant-typography.ant-typography-disabled:active,\n.ant-typography a.ant-typography-disabled:active,\na.ant-typography[disabled]:hover,\n.ant-typography a[disabled]:hover,\na.ant-typography.ant-typography-disabled:hover,\n.ant-typography a.ant-typography-disabled:hover {\n color: rgba(0, 0, 0, 0.25);\n}\na.ant-typography[disabled]:active,\n.ant-typography a[disabled]:active,\na.ant-typography.ant-typography-disabled:active,\n.ant-typography a.ant-typography-disabled:active {\n pointer-events: none;\n}\n.ant-typography code {\n margin: 0 0.2em;\n padding: 0.2em 0.4em 0.1em;\n font-size: 85%;\n background: rgba(150, 150, 150, 0.1);\n border: 1px solid rgba(100, 100, 100, 0.2);\n border-radius: 3px;\n}\n.ant-typography kbd {\n margin: 0 0.2em;\n padding: 0.15em 0.4em 0.1em;\n font-size: 90%;\n background: rgba(150, 150, 150, 0.06);\n border: 1px solid rgba(100, 100, 100, 0.2);\n border-bottom-width: 2px;\n border-radius: 3px;\n}\n.ant-typography mark {\n padding: 0;\n background-color: #ffe58f;\n}\n.ant-typography u,\n.ant-typography ins {\n text-decoration: underline;\n text-decoration-skip-ink: auto;\n}\n.ant-typography s,\n.ant-typography del {\n text-decoration: line-through;\n}\n.ant-typography strong {\n font-weight: 600;\n}\n.ant-typography-expand,\n.ant-typography-edit,\n.ant-typography-copy {\n color: #5b5ce1;\n outline: none;\n cursor: pointer;\n transition: color 0.3s;\n margin-left: 4px;\n}\n.ant-typography-expand:focus-visible,\n.ant-typography-edit:focus-visible,\n.ant-typography-copy:focus-visible,\n.ant-typography-expand:hover,\n.ant-typography-edit:hover,\n.ant-typography-copy:hover {\n color: #8588ed;\n}\n.ant-typography-expand:active,\n.ant-typography-edit:active,\n.ant-typography-copy:active {\n color: #4541ba;\n}\n.ant-typography-copy-success,\n.ant-typography-copy-success:hover,\n.ant-typography-copy-success:focus {\n color: #52c41a;\n}\n.ant-typography-edit-content {\n position: relative;\n}\ndiv.ant-typography-edit-content {\n left: -12px;\n margin-top: -5px;\n margin-bottom: calc(1em - 4px - 1px);\n}\n.ant-typography-edit-content-confirm {\n position: absolute;\n right: 10px;\n bottom: 8px;\n color: rgba(0, 0, 0, 0.45);\n font-weight: normal;\n font-size: 14px;\n font-style: normal;\n pointer-events: none;\n}\n.ant-typography-edit-content textarea {\n height: 1em;\n margin: 0 !important;\n /* stylelint-disable-next-line property-no-vendor-prefix */\n -moz-transition: none;\n}\n.ant-typography ul,\n.ant-typography ol {\n margin: 0 0 1em;\n padding: 0;\n}\n.ant-typography ul li,\n.ant-typography ol li {\n margin: 0 0 0 20px;\n padding: 0 0 0 4px;\n}\n.ant-typography ul {\n list-style-type: circle;\n}\n.ant-typography ul ul {\n list-style-type: disc;\n}\n.ant-typography ol {\n list-style-type: decimal;\n}\n.ant-typography pre,\n.ant-typography blockquote {\n margin: 1em 0;\n}\n.ant-typography pre {\n padding: 0.4em 0.6em;\n white-space: pre-wrap;\n word-wrap: break-word;\n background: rgba(150, 150, 150, 0.1);\n border: 1px solid rgba(100, 100, 100, 0.2);\n border-radius: 3px;\n}\n.ant-typography pre code {\n display: inline;\n margin: 0;\n padding: 0;\n font-size: inherit;\n font-family: inherit;\n background: transparent;\n border: 0;\n}\n.ant-typography blockquote {\n padding: 0 0 0 0.6em;\n border-left: 4px solid rgba(100, 100, 100, 0.2);\n opacity: 0.85;\n}\n.ant-typography-single-line {\n white-space: nowrap;\n}\n.ant-typography-ellipsis-single-line {\n overflow: hidden;\n text-overflow: ellipsis;\n}\na.ant-typography-ellipsis-single-line,\nspan.ant-typography-ellipsis-single-line {\n vertical-align: bottom;\n}\n.ant-typography-ellipsis-multiple-line {\n /* stylelint-disable-next-line value-no-vendor-prefix */\n display: -webkit-box;\n overflow: hidden;\n -webkit-line-clamp: 3;\n /*! autoprefixer: ignore next */\n -webkit-box-orient: vertical;\n}\n.ant-typography-rtl {\n direction: rtl;\n}\n.ant-typography-rtl .ant-typography-expand,\n.ant-typography-rtl .ant-typography-edit,\n.ant-typography-rtl .ant-typography-copy {\n margin-right: 4px;\n margin-left: 0;\n}\n.ant-typography-rtl .ant-typography-expand {\n float: left;\n}\ndiv.ant-typography-edit-content.ant-typography-rtl {\n right: -12px;\n left: auto;\n}\n.ant-typography-rtl .ant-typography-edit-content-confirm {\n right: auto;\n left: 10px;\n}\n.ant-typography-rtl.ant-typography ul li,\n.ant-typography-rtl.ant-typography ol li {\n margin: 0 20px 0 0;\n padding: 0 4px 0 0;\n}\n.ant-upload {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n line-height: 1.5715;\n list-style: none;\n font-feature-settings: 'tnum';\n outline: 0;\n}\n.ant-upload p {\n margin: 0;\n}\n.ant-upload-btn {\n display: block;\n width: 100%;\n outline: none;\n}\n.ant-upload input[type='file'] {\n cursor: pointer;\n}\n.ant-upload.ant-upload-select {\n display: inline-block;\n}\n.ant-upload.ant-upload-disabled {\n color: rgba(0, 0, 0, 0.25);\n cursor: not-allowed;\n}\n.ant-upload.ant-upload-select-picture-card {\n width: 104px;\n height: 104px;\n margin-right: 8px;\n margin-bottom: 8px;\n text-align: center;\n vertical-align: top;\n background-color: #fafafa;\n border: 1px dashed #d9d9d9;\n border-radius: 5px;\n cursor: pointer;\n transition: border-color 0.3s;\n}\n.ant-upload.ant-upload-select-picture-card > .ant-upload {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n text-align: center;\n}\n.ant-upload.ant-upload-select-picture-card:hover {\n border-color: #5b5ce1;\n}\n.ant-upload-disabled.ant-upload.ant-upload-select-picture-card:hover {\n border-color: #d9d9d9;\n}\n.ant-upload.ant-upload-drag {\n position: relative;\n width: 100%;\n height: 100%;\n text-align: center;\n background: #fafafa;\n border: 1px dashed #d9d9d9;\n border-radius: 5px;\n cursor: pointer;\n transition: border-color 0.3s;\n}\n.ant-upload.ant-upload-drag .ant-upload {\n padding: 16px 0;\n}\n.ant-upload.ant-upload-drag.ant-upload-drag-hover:not(.ant-upload-disabled) {\n border-color: #4541ba;\n}\n.ant-upload.ant-upload-drag.ant-upload-disabled {\n cursor: not-allowed;\n}\n.ant-upload.ant-upload-drag .ant-upload-btn {\n display: table;\n height: 100%;\n}\n.ant-upload.ant-upload-drag .ant-upload-drag-container {\n display: table-cell;\n vertical-align: middle;\n}\n.ant-upload.ant-upload-drag:not(.ant-upload-disabled):hover {\n border-color: #8588ed;\n}\n.ant-upload.ant-upload-drag p.ant-upload-drag-icon {\n margin-bottom: 20px;\n}\n.ant-upload.ant-upload-drag p.ant-upload-drag-icon .anticon {\n color: #8588ed;\n font-size: 48px;\n}\n.ant-upload.ant-upload-drag p.ant-upload-text {\n margin: 0 0 4px;\n color: rgba(0, 0, 0, 0.85);\n font-size: 16px;\n}\n.ant-upload.ant-upload-drag p.ant-upload-hint {\n color: rgba(0, 0, 0, 0.45);\n font-size: 14px;\n}\n.ant-upload.ant-upload-drag .anticon-plus {\n color: rgba(0, 0, 0, 0.25);\n font-size: 30px;\n transition: all 0.3s;\n}\n.ant-upload.ant-upload-drag .anticon-plus:hover {\n color: rgba(0, 0, 0, 0.45);\n}\n.ant-upload.ant-upload-drag:hover .anticon-plus {\n color: rgba(0, 0, 0, 0.45);\n}\n.ant-upload-picture-card-wrapper {\n display: inline-block;\n width: 100%;\n}\n.ant-upload-picture-card-wrapper::before {\n display: table;\n content: '';\n}\n.ant-upload-picture-card-wrapper::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-upload-picture-card-wrapper::before {\n display: table;\n content: '';\n}\n.ant-upload-picture-card-wrapper::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-upload-list {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: rgba(0, 0, 0, 0.85);\n font-size: 14px;\n font-variant: tabular-nums;\n list-style: none;\n font-feature-settings: 'tnum';\n line-height: 1.5715;\n}\n.ant-upload-list::before {\n display: table;\n content: '';\n}\n.ant-upload-list::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-upload-list::before {\n display: table;\n content: '';\n}\n.ant-upload-list::after {\n display: table;\n clear: both;\n content: '';\n}\n.ant-upload-list-item {\n position: relative;\n height: 22.001px;\n margin-top: 8px;\n font-size: 14px;\n}\n.ant-upload-list-item-name {\n display: inline-block;\n width: 100%;\n padding-left: 22px;\n overflow: hidden;\n line-height: 1.5715;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.ant-upload-list-item-card-actions {\n position: absolute;\n right: 0;\n}\n.ant-upload-list-item-card-actions-btn {\n opacity: 0;\n}\n.ant-upload-list-item-card-actions-btn.ant-btn-sm {\n height: 22.001px;\n line-height: 1;\n vertical-align: top;\n}\n.ant-upload-list-item-card-actions.picture {\n top: 22px;\n line-height: 0;\n}\n.ant-upload-list-item-card-actions-btn:focus,\n.ant-upload-list-item-card-actions.picture .ant-upload-list-item-card-actions-btn {\n opacity: 1;\n}\n.ant-upload-list-item-card-actions .anticon {\n color: rgba(0, 0, 0, 0.45);\n transition: all 0.3s;\n}\n.ant-upload-list-item-card-actions:hover .anticon {\n color: rgba(0, 0, 0, 0.85);\n}\n.ant-upload-list-item-info {\n height: 100%;\n transition: background-color 0.3s;\n}\n.ant-upload-list-item-info > span {\n display: block;\n width: 100%;\n height: 100%;\n}\n.ant-upload-list-item-info .anticon-loading .anticon,\n.ant-upload-list-item-info .ant-upload-text-icon .anticon {\n position: absolute;\n top: 5px;\n color: rgba(0, 0, 0, 0.45);\n font-size: 14px;\n}\n.ant-upload-list-item:hover .ant-upload-list-item-info {\n background-color: #f5f5f5;\n}\n.ant-upload-list-item:hover .ant-upload-list-item-card-actions-btn {\n opacity: 1;\n}\n.ant-upload-list-item-error,\n.ant-upload-list-item-error .ant-upload-text-icon > .anticon,\n.ant-upload-list-item-error .ant-upload-list-item-name {\n color: #ff4d4f;\n}\n.ant-upload-list-item-error .ant-upload-list-item-card-actions .anticon {\n color: #ff4d4f;\n}\n.ant-upload-list-item-error .ant-upload-list-item-card-actions-btn {\n opacity: 1;\n}\n.ant-upload-list-item-progress {\n position: absolute;\n bottom: -12px;\n width: 100%;\n padding-left: 26px;\n font-size: 14px;\n line-height: 0;\n}\n.ant-upload-list-picture .ant-upload-list-item,\n.ant-upload-list-picture-card .ant-upload-list-item {\n position: relative;\n height: 66px;\n padding: 8px;\n border: 1px solid #d9d9d9;\n border-radius: 5px;\n}\n.ant-upload-list-picture .ant-upload-list-item:hover,\n.ant-upload-list-picture-card .ant-upload-list-item:hover {\n background: transparent;\n}\n.ant-upload-list-picture .ant-upload-list-item-error,\n.ant-upload-list-picture-card .ant-upload-list-item-error {\n border-color: #ff4d4f;\n}\n.ant-upload-list-picture .ant-upload-list-item-info,\n.ant-upload-list-picture-card .ant-upload-list-item-info {\n padding: 0;\n}\n.ant-upload-list-picture .ant-upload-list-item:hover .ant-upload-list-item-info,\n.ant-upload-list-picture-card .ant-upload-list-item:hover .ant-upload-list-item-info {\n background: transparent;\n}\n.ant-upload-list-picture .ant-upload-list-item-uploading,\n.ant-upload-list-picture-card .ant-upload-list-item-uploading {\n border-style: dashed;\n}\n.ant-upload-list-picture .ant-upload-list-item-thumbnail,\n.ant-upload-list-picture-card .ant-upload-list-item-thumbnail {\n width: 48px;\n height: 48px;\n line-height: 60px;\n text-align: center;\n opacity: 0.8;\n}\n.ant-upload-list-picture .ant-upload-list-item-thumbnail .anticon,\n.ant-upload-list-picture-card .ant-upload-list-item-thumbnail .anticon {\n font-size: 26px;\n}\n.ant-upload-list-picture .ant-upload-list-item-error .ant-upload-list-item-thumbnail .anticon svg path[fill='#e6f7ff'],\n.ant-upload-list-picture-card .ant-upload-list-item-error .ant-upload-list-item-thumbnail .anticon svg path[fill='#e6f7ff'] {\n fill: #fff2f0;\n}\n.ant-upload-list-picture .ant-upload-list-item-error .ant-upload-list-item-thumbnail .anticon svg path[fill='#1890ff'],\n.ant-upload-list-picture-card .ant-upload-list-item-error .ant-upload-list-item-thumbnail .anticon svg path[fill='#1890ff'] {\n fill: #ff4d4f;\n}\n.ant-upload-list-picture .ant-upload-list-item-icon,\n.ant-upload-list-picture-card .ant-upload-list-item-icon {\n position: absolute;\n top: 50%;\n left: 50%;\n font-size: 26px;\n transform: translate(-50%, -50%);\n}\n.ant-upload-list-picture .ant-upload-list-item-icon .anticon,\n.ant-upload-list-picture-card .ant-upload-list-item-icon .anticon {\n font-size: 26px;\n}\n.ant-upload-list-picture .ant-upload-list-item-image,\n.ant-upload-list-picture-card .ant-upload-list-item-image {\n max-width: 100%;\n}\n.ant-upload-list-picture .ant-upload-list-item-thumbnail img,\n.ant-upload-list-picture-card .ant-upload-list-item-thumbnail img {\n display: block;\n width: 48px;\n height: 48px;\n overflow: hidden;\n}\n.ant-upload-list-picture .ant-upload-list-item-name,\n.ant-upload-list-picture-card .ant-upload-list-item-name {\n display: inline-block;\n box-sizing: border-box;\n max-width: 100%;\n margin: 0 0 0 8px;\n padding-right: 8px;\n padding-left: 48px;\n overflow: hidden;\n line-height: 44px;\n white-space: nowrap;\n text-overflow: ellipsis;\n transition: all 0.3s;\n}\n.ant-upload-list-picture .ant-upload-list-item-uploading .ant-upload-list-item-name,\n.ant-upload-list-picture-card .ant-upload-list-item-uploading .ant-upload-list-item-name {\n margin-bottom: 12px;\n}\n.ant-upload-list-picture .ant-upload-list-item-progress,\n.ant-upload-list-picture-card .ant-upload-list-item-progress {\n bottom: 14px;\n width: calc(100% - 24px);\n margin-top: 0;\n padding-left: 56px;\n}\n.ant-upload-list-picture-card-container {\n display: inline-block;\n width: 104px;\n height: 104px;\n margin: 0 8px 8px 0;\n vertical-align: top;\n}\n.ant-upload-list-picture-card .ant-upload-list-item {\n height: 100%;\n margin: 0;\n}\n.ant-upload-list-picture-card .ant-upload-list-item-info {\n position: relative;\n height: 100%;\n overflow: hidden;\n}\n.ant-upload-list-picture-card .ant-upload-list-item-info::before {\n position: absolute;\n z-index: 1;\n width: 100%;\n height: 100%;\n background-color: rgba(0, 0, 0, 0.5);\n opacity: 0;\n transition: all 0.3s;\n content: ' ';\n}\n.ant-upload-list-picture-card .ant-upload-list-item:hover .ant-upload-list-item-info::before {\n opacity: 1;\n}\n.ant-upload-list-picture-card .ant-upload-list-item-actions {\n position: absolute;\n top: 50%;\n left: 50%;\n z-index: 10;\n white-space: nowrap;\n transform: translate(-50%, -50%);\n opacity: 0;\n transition: all 0.3s;\n}\n.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-eye,\n.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-download,\n.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-delete {\n z-index: 10;\n width: 16px;\n margin: 0 4px;\n color: rgba(255, 255, 255, 0.85);\n font-size: 16px;\n cursor: pointer;\n transition: all 0.3s;\n}\n.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-eye:hover,\n.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-download:hover,\n.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-delete:hover {\n color: #fff;\n}\n.ant-upload-list-picture-card .ant-upload-list-item-info:hover + .ant-upload-list-item-actions,\n.ant-upload-list-picture-card .ant-upload-list-item-actions:hover {\n opacity: 1;\n}\n.ant-upload-list-picture-card .ant-upload-list-item-thumbnail,\n.ant-upload-list-picture-card .ant-upload-list-item-thumbnail img {\n position: static;\n display: block;\n width: 100%;\n height: 100%;\n object-fit: contain;\n}\n.ant-upload-list-picture-card .ant-upload-list-item-name {\n display: none;\n margin: 8px 0 0;\n padding: 0;\n line-height: 1.5715;\n text-align: center;\n}\n.ant-upload-list-picture-card .ant-upload-list-item-file + .ant-upload-list-item-name {\n position: absolute;\n bottom: 10px;\n display: block;\n}\n.ant-upload-list-picture-card .ant-upload-list-item-uploading.ant-upload-list-item {\n background-color: #fafafa;\n}\n.ant-upload-list-picture-card .ant-upload-list-item-uploading .ant-upload-list-item-info {\n height: auto;\n}\n.ant-upload-list-picture-card .ant-upload-list-item-uploading .ant-upload-list-item-info::before,\n.ant-upload-list-picture-card .ant-upload-list-item-uploading .ant-upload-list-item-info .anticon-eye,\n.ant-upload-list-picture-card .ant-upload-list-item-uploading .ant-upload-list-item-info .anticon-delete {\n display: none;\n}\n.ant-upload-list-picture-card .ant-upload-list-item-progress {\n bottom: 32px;\n width: calc(100% - 14px);\n padding-left: 0;\n}\n.ant-upload-list-text-container,\n.ant-upload-list-picture-container {\n transition: opacity 0.3s, height 0.3s;\n}\n.ant-upload-list-text-container::before,\n.ant-upload-list-picture-container::before {\n display: table;\n width: 0;\n height: 0;\n content: '';\n}\n.ant-upload-list-text-container .ant-upload-span,\n.ant-upload-list-picture-container .ant-upload-span {\n display: block;\n flex: auto;\n}\n.ant-upload-list-text .ant-upload-span,\n.ant-upload-list-picture .ant-upload-span {\n display: flex;\n align-items: center;\n}\n.ant-upload-list-text .ant-upload-span > *,\n.ant-upload-list-picture .ant-upload-span > * {\n flex: none;\n}\n.ant-upload-list-text .ant-upload-list-item-name,\n.ant-upload-list-picture .ant-upload-list-item-name {\n flex: auto;\n margin: 0;\n padding: 0 8px;\n}\n.ant-upload-list-text .ant-upload-list-item-card-actions,\n.ant-upload-list-picture .ant-upload-list-item-card-actions {\n position: static;\n}\n.ant-upload-list-text .ant-upload-text-icon .anticon {\n position: static;\n}\n.ant-upload-list .ant-upload-animate-inline-appear,\n.ant-upload-list .ant-upload-animate-inline-enter,\n.ant-upload-list .ant-upload-animate-inline-leave {\n animation-duration: 0.3s;\n animation-timing-function: cubic-bezier(0.78, 0.14, 0.15, 0.86);\n animation-fill-mode: forwards;\n}\n.ant-upload-list .ant-upload-animate-inline-appear,\n.ant-upload-list .ant-upload-animate-inline-enter {\n animation-name: uploadAnimateInlineIn;\n}\n.ant-upload-list .ant-upload-animate-inline-leave {\n animation-name: uploadAnimateInlineOut;\n}\n@keyframes uploadAnimateInlineIn {\n from {\n width: 0;\n height: 0;\n margin: 0;\n padding: 0;\n opacity: 0;\n }\n}\n@keyframes uploadAnimateInlineOut {\n to {\n width: 0;\n height: 0;\n margin: 0;\n padding: 0;\n opacity: 0;\n }\n}\n.ant-upload-rtl {\n direction: rtl;\n}\n.ant-upload-rtl.ant-upload.ant-upload-select-picture-card {\n margin-right: auto;\n margin-left: 8px;\n}\n.ant-upload-list-rtl {\n direction: rtl;\n}\n.ant-upload-list-rtl .ant-upload-list-item-list-type-text:hover .ant-upload-list-item-name-icon-count-1 {\n padding-right: 22px;\n padding-left: 14px;\n}\n.ant-upload-list-rtl .ant-upload-list-item-list-type-text:hover .ant-upload-list-item-name-icon-count-2 {\n padding-right: 22px;\n padding-left: 28px;\n}\n.ant-upload-list-rtl .ant-upload-list-item-name {\n padding-right: 22px;\n padding-left: 0;\n}\n.ant-upload-list-rtl .ant-upload-list-item-name-icon-count-1 {\n padding-left: 14px;\n}\n.ant-upload-list-rtl .ant-upload-list-item-card-actions {\n right: auto;\n left: 0;\n}\n.ant-upload-list-rtl .ant-upload-list-item-card-actions .anticon {\n padding-right: 0;\n padding-left: 5px;\n}\n.ant-upload-list-rtl .ant-upload-list-item-info {\n padding: 0 4px 0 12px;\n}\n.ant-upload-list-rtl .ant-upload-list-item-error .ant-upload-list-item-card-actions .anticon {\n padding-right: 0;\n padding-left: 5px;\n}\n.ant-upload-list-rtl .ant-upload-list-item-progress {\n padding-right: 26px;\n padding-left: 0;\n}\n.ant-upload-list-picture .ant-upload-list-item-info,\n.ant-upload-list-picture-card .ant-upload-list-item-info {\n padding: 0;\n}\n.ant-upload-list-rtl.ant-upload-list-picture .ant-upload-list-item-thumbnail,\n.ant-upload-list-rtl.ant-upload-list-picture-card .ant-upload-list-item-thumbnail {\n right: 8px;\n left: auto;\n}\n.ant-upload-list-rtl.ant-upload-list-picture .ant-upload-list-item-icon,\n.ant-upload-list-rtl.ant-upload-list-picture-card .ant-upload-list-item-icon {\n right: 50%;\n left: auto;\n transform: translate(50%, -50%);\n}\n.ant-upload-list-rtl.ant-upload-list-picture .ant-upload-list-item-name,\n.ant-upload-list-rtl.ant-upload-list-picture-card .ant-upload-list-item-name {\n margin: 0 8px 0 0;\n padding-right: 48px;\n padding-left: 8px;\n}\n.ant-upload-list-rtl.ant-upload-list-picture .ant-upload-list-item-name-icon-count-1,\n.ant-upload-list-rtl.ant-upload-list-picture-card .ant-upload-list-item-name-icon-count-1 {\n padding-right: 48px;\n padding-left: 18px;\n}\n.ant-upload-list-rtl.ant-upload-list-picture .ant-upload-list-item-name-icon-count-2,\n.ant-upload-list-rtl.ant-upload-list-picture-card .ant-upload-list-item-name-icon-count-2 {\n padding-right: 48px;\n padding-left: 36px;\n}\n.ant-upload-list-rtl.ant-upload-list-picture .ant-upload-list-item-progress,\n.ant-upload-list-rtl.ant-upload-list-picture-card .ant-upload-list-item-progress {\n padding-right: 0;\n padding-left: 0;\n}\n.ant-upload-list-rtl .ant-upload-list-picture-card-container {\n margin: 0 0 8px 8px;\n}\n.ant-upload-list-rtl.ant-upload-list-picture-card .ant-upload-list-item-actions {\n right: 50%;\n left: auto;\n transform: translate(50%, -50%);\n}\n.ant-upload-list-rtl.ant-upload-list-picture-card .ant-upload-list-item-file + .ant-upload-list-item-name {\n margin: 8px 0 0;\n padding: 0;\n}\n","// Config global less under antd\n[class^=~'@{ant-prefix}-'],\n[class*=~' @{ant-prefix}-'] {\n // remove the clear button of a text input control in IE10+\n &::-ms-clear,\n input::-ms-clear,\n input::-ms-reveal {\n display: none;\n }\n}\n","/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */\n.tinyColorMixin() {\n@functions: ~`(function() {\n// TinyColor v1.4.1\n// https://github.com/bgrins/TinyColor\n// 2016-07-07, Brian Grinstead, MIT License\nvar trimLeft = /^\\s+/,\n trimRight = /\\s+$/,\n tinyCounter = 0,\n mathRound = Math.round,\n mathMin = Math.min,\n mathMax = Math.max,\n mathRandom = Math.random;\n\nfunction tinycolor (color, opts) {\n\n color = (color) ? color : '';\n opts = opts || { };\n\n // If input is already a tinycolor, return itself\n if (color instanceof tinycolor) {\n return color;\n }\n // If we are called as a function, call using new instead\n if (!(this instanceof tinycolor)) {\n return new tinycolor(color, opts);\n }\n\n var rgb = inputToRGB(color);\n this._originalInput = color,\n this._r = rgb.r,\n this._g = rgb.g,\n this._b = rgb.b,\n this._a = rgb.a,\n this._roundA = mathRound(100*this._a) / 100,\n this._format = opts.format || rgb.format;\n this._gradientType = opts.gradientType;\n\n // Don't let the range of [0,255] come back in [0,1].\n // Potentially lose a little bit of precision here, but will fix issues where\n // .5 gets interpreted as half of the total, instead of half of 1\n // If it was supposed to be 128, this was already taken care of by inputToRgb\n if (this._r < 1) { this._r = mathRound(this._r); }\n if (this._g < 1) { this._g = mathRound(this._g); }\n if (this._b < 1) { this._b = mathRound(this._b); }\n\n this._ok = rgb.ok;\n this._tc_id = tinyCounter++;\n}\n\ntinycolor.prototype = {\n isDark: function() {\n return this.getBrightness() < 128;\n },\n isLight: function() {\n return !this.isDark();\n },\n isValid: function() {\n return this._ok;\n },\n getOriginalInput: function() {\n return this._originalInput;\n },\n getFormat: function() {\n return this._format;\n },\n getAlpha: function() {\n return this._a;\n },\n getBrightness: function() {\n //http://www.w3.org/TR/AERT#color-contrast\n var rgb = this.toRgb();\n return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000;\n },\n getLuminance: function() {\n //http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\n var rgb = this.toRgb();\n var RsRGB, GsRGB, BsRGB, R, G, B;\n RsRGB = rgb.r/255;\n GsRGB = rgb.g/255;\n BsRGB = rgb.b/255;\n\n if (RsRGB <= 0.03928) {R = RsRGB / 12.92;} else {R = Math.pow(((RsRGB + 0.055) / 1.055), 2.4);}\n if (GsRGB <= 0.03928) {G = GsRGB / 12.92;} else {G = Math.pow(((GsRGB + 0.055) / 1.055), 2.4);}\n if (BsRGB <= 0.03928) {B = BsRGB / 12.92;} else {B = Math.pow(((BsRGB + 0.055) / 1.055), 2.4);}\n return (0.2126 * R) + (0.7152 * G) + (0.0722 * B);\n },\n setAlpha: function(value) {\n this._a = boundAlpha(value);\n this._roundA = mathRound(100*this._a) / 100;\n return this;\n },\n toHsv: function() {\n var hsv = rgbToHsv(this._r, this._g, this._b);\n return { h: hsv.h * 360, s: hsv.s, v: hsv.v, a: this._a };\n },\n toHsvString: function() {\n var hsv = rgbToHsv(this._r, this._g, this._b);\n var h = mathRound(hsv.h * 360), s = mathRound(hsv.s * 100), v = mathRound(hsv.v * 100);\n return (this._a == 1) ?\n \"hsv(\" + h + \", \" + s + \"%, \" + v + \"%)\" :\n \"hsva(\" + h + \", \" + s + \"%, \" + v + \"%, \"+ this._roundA + \")\";\n },\n toHsl: function() {\n var hsl = rgbToHsl(this._r, this._g, this._b);\n return { h: hsl.h * 360, s: hsl.s, l: hsl.l, a: this._a };\n },\n toHslString: function() {\n var hsl = rgbToHsl(this._r, this._g, this._b);\n var h = mathRound(hsl.h * 360), s = mathRound(hsl.s * 100), l = mathRound(hsl.l * 100);\n return (this._a == 1) ?\n \"hsl(\" + h + \", \" + s + \"%, \" + l + \"%)\" :\n \"hsla(\" + h + \", \" + s + \"%, \" + l + \"%, \"+ this._roundA + \")\";\n },\n toHex: function(allow3Char) {\n return rgbToHex(this._r, this._g, this._b, allow3Char);\n },\n toHexString: function(allow3Char) {\n return '#' + this.toHex(allow3Char);\n },\n toHex8: function(allow4Char) {\n return rgbaToHex(this._r, this._g, this._b, this._a, allow4Char);\n },\n toHex8String: function(allow4Char) {\n return '#' + this.toHex8(allow4Char);\n },\n toRgb: function() {\n return { r: mathRound(this._r), g: mathRound(this._g), b: mathRound(this._b), a: this._a };\n },\n toRgbString: function() {\n return (this._a == 1) ?\n \"rgb(\" + mathRound(this._r) + \", \" + mathRound(this._g) + \", \" + mathRound(this._b) + \")\" :\n \"rgba(\" + mathRound(this._r) + \", \" + mathRound(this._g) + \", \" + mathRound(this._b) + \", \" + this._roundA + \")\";\n },\n toPercentageRgb: function() {\n return { r: mathRound(bound01(this._r, 255) * 100) + \"%\", g: mathRound(bound01(this._g, 255) * 100) + \"%\", b: mathRound(bound01(this._b, 255) * 100) + \"%\", a: this._a };\n },\n toPercentageRgbString: function() {\n return (this._a == 1) ?\n \"rgb(\" + mathRound(bound01(this._r, 255) * 100) + \"%, \" + mathRound(bound01(this._g, 255) * 100) + \"%, \" + mathRound(bound01(this._b, 255) * 100) + \"%)\" :\n \"rgba(\" + mathRound(bound01(this._r, 255) * 100) + \"%, \" + mathRound(bound01(this._g, 255) * 100) + \"%, \" + mathRound(bound01(this._b, 255) * 100) + \"%, \" + this._roundA + \")\";\n },\n toName: function() {\n if (this._a === 0) {\n return \"transparent\";\n }\n\n if (this._a < 1) {\n return false;\n }\n\n return hexNames[rgbToHex(this._r, this._g, this._b, true)] || false;\n },\n toFilter: function(secondColor) {\n var hex8String = '#' + rgbaToArgbHex(this._r, this._g, this._b, this._a);\n var secondHex8String = hex8String;\n var gradientType = this._gradientType ? \"GradientType = 1, \" : \"\";\n\n if (secondColor) {\n var s = tinycolor(secondColor);\n secondHex8String = '#' + rgbaToArgbHex(s._r, s._g, s._b, s._a);\n }\n\n return \"progid:DXImageTransform.Microsoft.gradient(\"+gradientType+\"startColorstr=\"+hex8String+\",endColorstr=\"+secondHex8String+\")\";\n },\n toString: function(format) {\n var formatSet = !!format;\n format = format || this._format;\n\n var formattedString = false;\n var hasAlpha = this._a < 1 && this._a >= 0;\n var needsAlphaFormat = !formatSet && hasAlpha && (format === \"hex\" || format === \"hex6\" || format === \"hex3\" || format === \"hex4\" || format === \"hex8\" || format === \"name\");\n\n if (needsAlphaFormat) {\n // Special case for \"transparent\", all other non-alpha formats\n // will return rgba when there is transparency.\n if (format === \"name\" && this._a === 0) {\n return this.toName();\n }\n return this.toRgbString();\n }\n if (format === \"rgb\") {\n formattedString = this.toRgbString();\n }\n if (format === \"prgb\") {\n formattedString = this.toPercentageRgbString();\n }\n if (format === \"hex\" || format === \"hex6\") {\n formattedString = this.toHexString();\n }\n if (format === \"hex3\") {\n formattedString = this.toHexString(true);\n }\n if (format === \"hex4\") {\n formattedString = this.toHex8String(true);\n }\n if (format === \"hex8\") {\n formattedString = this.toHex8String();\n }\n if (format === \"name\") {\n formattedString = this.toName();\n }\n if (format === \"hsl\") {\n formattedString = this.toHslString();\n }\n if (format === \"hsv\") {\n formattedString = this.toHsvString();\n }\n\n return formattedString || this.toHexString();\n },\n clone: function() {\n return tinycolor(this.toString());\n },\n\n _applyModification: function(fn, args) {\n var color = fn.apply(null, [this].concat([].slice.call(args)));\n this._r = color._r;\n this._g = color._g;\n this._b = color._b;\n this.setAlpha(color._a);\n return this;\n },\n lighten: function() {\n return this._applyModification(lighten, arguments);\n },\n brighten: function() {\n return this._applyModification(brighten, arguments);\n },\n darken: function() {\n return this._applyModification(darken, arguments);\n },\n desaturate: function() {\n return this._applyModification(desaturate, arguments);\n },\n saturate: function() {\n return this._applyModification(saturate, arguments);\n },\n greyscale: function() {\n return this._applyModification(greyscale, arguments);\n },\n spin: function() {\n return this._applyModification(spin, arguments);\n },\n\n _applyCombination: function(fn, args) {\n return fn.apply(null, [this].concat([].slice.call(args)));\n },\n analogous: function() {\n return this._applyCombination(analogous, arguments);\n },\n complement: function() {\n return this._applyCombination(complement, arguments);\n },\n monochromatic: function() {\n return this._applyCombination(monochromatic, arguments);\n },\n splitcomplement: function() {\n return this._applyCombination(splitcomplement, arguments);\n },\n triad: function() {\n return this._applyCombination(triad, arguments);\n },\n tetrad: function() {\n return this._applyCombination(tetrad, arguments);\n }\n};\n\n// If input is an object, force 1 into \"1.0\" to handle ratios properly\n// String input requires \"1.0\" as input, so 1 will be treated as 1\ntinycolor.fromRatio = function(color, opts) {\n if (typeof color == \"object\") {\n var newColor = {};\n for (var i in color) {\n if (color.hasOwnProperty(i)) {\n if (i === \"a\") {\n newColor[i] = color[i];\n }\n else {\n newColor[i] = convertToPercentage(color[i]);\n }\n }\n }\n color = newColor;\n }\n\n return tinycolor(color, opts);\n};\n\n// Given a string or object, convert that input to RGB\n// Possible string inputs:\n//\n// \"red\"\n// \"#f00\" or \"f00\"\n// \"#ff0000\" or \"ff0000\"\n// \"#ff000000\" or \"ff000000\"\n// \"rgb 255 0 0\" or \"rgb (255, 0, 0)\"\n// \"rgb 1.0 0 0\" or \"rgb (1, 0, 0)\"\n// \"rgba (255, 0, 0, 1)\" or \"rgba 255, 0, 0, 1\"\n// \"rgba (1.0, 0, 0, 1)\" or \"rgba 1.0, 0, 0, 1\"\n// \"hsl(0, 100%, 50%)\" or \"hsl 0 100% 50%\"\n// \"hsla(0, 100%, 50%, 1)\" or \"hsla 0 100% 50%, 1\"\n// \"hsv(0, 100%, 100%)\" or \"hsv 0 100% 100%\"\n//\nfunction inputToRGB(color) {\n\n var rgb = { r: 0, g: 0, b: 0 };\n var a = 1;\n var s = null;\n var v = null;\n var l = null;\n var ok = false;\n var format = false;\n\n if (typeof color == \"string\") {\n color = stringInputToObject(color);\n }\n\n if (typeof color == \"object\") {\n if (isValidCSSUnit(color.r) && isValidCSSUnit(color.g) && isValidCSSUnit(color.b)) {\n rgb = rgbToRgb(color.r, color.g, color.b);\n ok = true;\n format = String(color.r).substr(-1) === \"%\" ? \"prgb\" : \"rgb\";\n }\n else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.v)) {\n s = convertToPercentage(color.s);\n v = convertToPercentage(color.v);\n rgb = hsvToRgb(color.h, s, v);\n ok = true;\n format = \"hsv\";\n }\n else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.l)) {\n s = convertToPercentage(color.s);\n l = convertToPercentage(color.l);\n rgb = hslToRgb(color.h, s, l);\n ok = true;\n format = \"hsl\";\n }\n\n if (color.hasOwnProperty(\"a\")) {\n a = color.a;\n }\n }\n\n a = boundAlpha(a);\n\n return {\n ok: ok,\n format: color.format || format,\n r: mathMin(255, mathMax(rgb.r, 0)),\n g: mathMin(255, mathMax(rgb.g, 0)),\n b: mathMin(255, mathMax(rgb.b, 0)),\n a: a\n };\n}\n\n// Conversion Functions\n// --------------------\n\n// rgbToHsl, rgbToHsv, hslToRgb, hsvToRgb modified from:\n// <http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript>\n\n// rgbToRgb\n// Handle bounds / percentage checking to conform to CSS color spec\n// <http://www.w3.org/TR/css3-color/>\n// *Assumes:* r, g, b in [0, 255] or [0, 1]\n// *Returns:* { r, g, b } in [0, 255]\nfunction rgbToRgb(r, g, b){\n return {\n r: bound01(r, 255) * 255,\n g: bound01(g, 255) * 255,\n b: bound01(b, 255) * 255\n };\n}\n\n// rgbToHsl\n// Converts an RGB color value to HSL.\n// *Assumes:* r, g, and b are contained in [0, 255] or [0, 1]\n// *Returns:* { h, s, l } in [0,1]\nfunction rgbToHsl(r, g, b) {\n\n r = bound01(r, 255);\n g = bound01(g, 255);\n b = bound01(b, 255);\n\n var max = mathMax(r, g, b), min = mathMin(r, g, b);\n var h, s, l = (max + min) / 2;\n\n if(max == min) {\n h = s = 0; // achromatic\n }\n else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch(max) {\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n case g: h = (b - r) / d + 2; break;\n case b: h = (r - g) / d + 4; break;\n }\n\n h /= 6;\n }\n\n return { h: h, s: s, l: l };\n}\n\n// hslToRgb\n// Converts an HSL color value to RGB.\n// *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100]\n// *Returns:* { r, g, b } in the set [0, 255]\nfunction hslToRgb(h, s, l) {\n var r, g, b;\n\n h = bound01(h, 360);\n s = bound01(s, 100);\n l = bound01(l, 100);\n\n function hue2rgb(p, q, t) {\n if(t < 0) t += 1;\n if(t > 1) t -= 1;\n if(t < 1/6) return p + (q - p) * 6 * t;\n if(t < 1/2) return q;\n if(t < 2/3) return p + (q - p) * (2/3 - t) * 6;\n return p;\n }\n\n if(s === 0) {\n r = g = b = l; // achromatic\n }\n else {\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1/3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1/3);\n }\n\n return { r: r * 255, g: g * 255, b: b * 255 };\n}\n\n// rgbToHsv\n// Converts an RGB color value to HSV\n// *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1]\n// *Returns:* { h, s, v } in [0,1]\nfunction rgbToHsv(r, g, b) {\n\n r = bound01(r, 255);\n g = bound01(g, 255);\n b = bound01(b, 255);\n\n var max = mathMax(r, g, b), min = mathMin(r, g, b);\n var h, s, v = max;\n\n var d = max - min;\n s = max === 0 ? 0 : d / max;\n\n if(max == min) {\n h = 0; // achromatic\n }\n else {\n switch(max) {\n case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n case g: h = (b - r) / d + 2; break;\n case b: h = (r - g) / d + 4; break;\n }\n h /= 6;\n }\n return { h: h, s: s, v: v };\n}\n\n// hsvToRgb\n// Converts an HSV color value to RGB.\n// *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100]\n// *Returns:* { r, g, b } in the set [0, 255]\n function hsvToRgb(h, s, v) {\n\n h = bound01(h, 360) * 6;\n s = bound01(s, 100);\n v = bound01(v, 100);\n\n var i = Math.floor(h),\n f = h - i,\n p = v * (1 - s),\n q = v * (1 - f * s),\n t = v * (1 - (1 - f) * s),\n mod = i % 6,\n r = [v, q, p, p, t, v][mod],\n g = [t, v, v, q, p, p][mod],\n b = [p, p, t, v, v, q][mod];\n\n return { r: r * 255, g: g * 255, b: b * 255 };\n}\n\n// rgbToHex\n// Converts an RGB color to hex\n// Assumes r, g, and b are contained in the set [0, 255]\n// Returns a 3 or 6 character hex\nfunction rgbToHex(r, g, b, allow3Char) {\n\n var hex = [\n pad2(mathRound(r).toString(16)),\n pad2(mathRound(g).toString(16)),\n pad2(mathRound(b).toString(16))\n ];\n\n // Return a 3 character hex if possible\n if (allow3Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1)) {\n return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0);\n }\n\n return hex.join(\"\");\n}\n\n// rgbaToHex\n// Converts an RGBA color plus alpha transparency to hex\n// Assumes r, g, b are contained in the set [0, 255] and\n// a in [0, 1]. Returns a 4 or 8 character rgba hex\nfunction rgbaToHex(r, g, b, a, allow4Char) {\n\n var hex = [\n pad2(mathRound(r).toString(16)),\n pad2(mathRound(g).toString(16)),\n pad2(mathRound(b).toString(16)),\n pad2(convertDecimalToHex(a))\n ];\n\n // Return a 4 character hex if possible\n if (allow4Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1) && hex[3].charAt(0) == hex[3].charAt(1)) {\n return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0) + hex[3].charAt(0);\n }\n\n return hex.join(\"\");\n}\n\n// rgbaToArgbHex\n// Converts an RGBA color to an ARGB Hex8 string\n// Rarely used, but required for \"toFilter()\"\nfunction rgbaToArgbHex(r, g, b, a) {\n\n var hex = [\n pad2(convertDecimalToHex(a)),\n pad2(mathRound(r).toString(16)),\n pad2(mathRound(g).toString(16)),\n pad2(mathRound(b).toString(16))\n ];\n\n return hex.join(\"\");\n}\n\n// equals\n// Can be called with any tinycolor input\ntinycolor.equals = function (color1, color2) {\n if (!color1 || !color2) { return false; }\n return tinycolor(color1).toRgbString() == tinycolor(color2).toRgbString();\n};\n\ntinycolor.random = function() {\n return tinycolor.fromRatio({\n r: mathRandom(),\n g: mathRandom(),\n b: mathRandom()\n });\n};\n\n// Modification Functions\n// ----------------------\n// Thanks to less.js for some of the basics here\n// <https://github.com/cloudhead/less.js/blob/master/lib/less/functions.js>\n\nfunction desaturate(color, amount) {\n amount = (amount === 0) ? 0 : (amount || 10);\n var hsl = tinycolor(color).toHsl();\n hsl.s -= amount / 100;\n hsl.s = clamp01(hsl.s);\n return tinycolor(hsl);\n}\n\nfunction saturate(color, amount) {\n amount = (amount === 0) ? 0 : (amount || 10);\n var hsl = tinycolor(color).toHsl();\n hsl.s += amount / 100;\n hsl.s = clamp01(hsl.s);\n return tinycolor(hsl);\n}\n\nfunction greyscale(color) {\n return tinycolor(color).desaturate(100);\n}\n\nfunction lighten (color, amount) {\n amount = (amount === 0) ? 0 : (amount || 10);\n var hsl = tinycolor(color).toHsl();\n hsl.l += amount / 100;\n hsl.l = clamp01(hsl.l);\n return tinycolor(hsl);\n}\n\nfunction brighten(color, amount) {\n amount = (amount === 0) ? 0 : (amount || 10);\n var rgb = tinycolor(color).toRgb();\n rgb.r = mathMax(0, mathMin(255, rgb.r - mathRound(255 * - (amount / 100))));\n rgb.g = mathMax(0, mathMin(255, rgb.g - mathRound(255 * - (amount / 100))));\n rgb.b = mathMax(0, mathMin(255, rgb.b - mathRound(255 * - (amount / 100))));\n return tinycolor(rgb);\n}\n\nfunction darken (color, amount) {\n amount = (amount === 0) ? 0 : (amount || 10);\n var hsl = tinycolor(color).toHsl();\n hsl.l -= amount / 100;\n hsl.l = clamp01(hsl.l);\n return tinycolor(hsl);\n}\n\n// Spin takes a positive or negative amount within [-360, 360] indicating the change of hue.\n// Values outside of this range will be wrapped into this range.\nfunction spin(color, amount) {\n var hsl = tinycolor(color).toHsl();\n var hue = (hsl.h + amount) % 360;\n hsl.h = hue < 0 ? 360 + hue : hue;\n return tinycolor(hsl);\n}\n\n// Combination Functions\n// ---------------------\n// Thanks to jQuery xColor for some of the ideas behind these\n// <https://github.com/infusion/jQuery-xcolor/blob/master/jquery.xcolor.js>\n\nfunction complement(color) {\n var hsl = tinycolor(color).toHsl();\n hsl.h = (hsl.h + 180) % 360;\n return tinycolor(hsl);\n}\n\nfunction triad(color) {\n var hsl = tinycolor(color).toHsl();\n var h = hsl.h;\n return [\n tinycolor(color),\n tinycolor({ h: (h + 120) % 360, s: hsl.s, l: hsl.l }),\n tinycolor({ h: (h + 240) % 360, s: hsl.s, l: hsl.l })\n ];\n}\n\nfunction tetrad(color) {\n var hsl = tinycolor(color).toHsl();\n var h = hsl.h;\n return [\n tinycolor(color),\n tinycolor({ h: (h + 90) % 360, s: hsl.s, l: hsl.l }),\n tinycolor({ h: (h + 180) % 360, s: hsl.s, l: hsl.l }),\n tinycolor({ h: (h + 270) % 360, s: hsl.s, l: hsl.l })\n ];\n}\n\nfunction splitcomplement(color) {\n var hsl = tinycolor(color).toHsl();\n var h = hsl.h;\n return [\n tinycolor(color),\n tinycolor({ h: (h + 72) % 360, s: hsl.s, l: hsl.l}),\n tinycolor({ h: (h + 216) % 360, s: hsl.s, l: hsl.l})\n ];\n}\n\nfunction analogous(color, results, slices) {\n results = results || 6;\n slices = slices || 30;\n\n var hsl = tinycolor(color).toHsl();\n var part = 360 / slices;\n var ret = [tinycolor(color)];\n\n for (hsl.h = ((hsl.h - (part * results >> 1)) + 720) % 360; --results; ) {\n hsl.h = (hsl.h + part) % 360;\n ret.push(tinycolor(hsl));\n }\n return ret;\n}\n\nfunction monochromatic(color, results) {\n results = results || 6;\n var hsv = tinycolor(color).toHsv();\n var h = hsv.h, s = hsv.s, v = hsv.v;\n var ret = [];\n var modification = 1 / results;\n\n while (results--) {\n ret.push(tinycolor({ h: h, s: s, v: v}));\n v = (v + modification) % 1;\n }\n\n return ret;\n}\n\n// Utility Functions\n// ---------------------\n\ntinycolor.mix = function(color1, color2, amount) {\n amount = (amount === 0) ? 0 : (amount || 50);\n\n var rgb1 = tinycolor(color1).toRgb();\n var rgb2 = tinycolor(color2).toRgb();\n\n var p = amount / 100;\n\n var rgba = {\n r: ((rgb2.r - rgb1.r) * p) + rgb1.r,\n g: ((rgb2.g - rgb1.g) * p) + rgb1.g,\n b: ((rgb2.b - rgb1.b) * p) + rgb1.b,\n a: ((rgb2.a - rgb1.a) * p) + rgb1.a\n };\n\n return tinycolor(rgba);\n};\n\n// Readability Functions\n// ---------------------\n// <http://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef (WCAG Version 2)\n\n// contrast\n// Analyze the 2 colors and returns the color contrast defined by (WCAG Version 2)\ntinycolor.readability = function(color1, color2) {\n var c1 = tinycolor(color1);\n var c2 = tinycolor(color2);\n return (Math.max(c1.getLuminance(),c2.getLuminance())+0.05) / (Math.min(c1.getLuminance(),c2.getLuminance())+0.05);\n};\n\n// isReadable\n// Ensure that foreground and background color combinations meet WCAG2 guidelines.\n// The third argument is an optional Object.\n// the 'level' property states 'AA' or 'AAA' - if missing or invalid, it defaults to 'AA';\n// the 'size' property states 'large' or 'small' - if missing or invalid, it defaults to 'small'.\n// If the entire object is absent, isReadable defaults to {level:\"AA\",size:\"small\"}.\n\n// *Example*\n// tinycolor.isReadable(\"#000\", \"#111\") => false\n// tinycolor.isReadable(\"#000\", \"#111\",{level:\"AA\",size:\"large\"}) => false\ntinycolor.isReadable = function(color1, color2, wcag2) {\n var readability = tinycolor.readability(color1, color2);\n var wcag2Parms, out;\n\n out = false;\n\n wcag2Parms = validateWCAG2Parms(wcag2);\n switch (wcag2Parms.level + wcag2Parms.size) {\n case \"AAsmall\":\n case \"AAAlarge\":\n out = readability >= 4.5;\n break;\n case \"AAlarge\":\n out = readability >= 3;\n break;\n case \"AAAsmall\":\n out = readability >= 7;\n break;\n }\n return out;\n\n};\n\n// mostReadable\n// Given a base color and a list of possible foreground or background\n// colors for that base, returns the most readable color.\n// Optionally returns Black or White if the most readable color is unreadable.\n// *Example*\n// tinycolor.mostReadable(tinycolor.mostReadable(\"#123\", [\"#124\", \"#125\"],{includeFallbackColors:false}).toHexString(); // \"#112255\"\n// tinycolor.mostReadable(tinycolor.mostReadable(\"#123\", [\"#124\", \"#125\"],{includeFallbackColors:true}).toHexString(); // \"#ffffff\"\n// tinycolor.mostReadable(\"#a8015a\", [\"#faf3f3\"],{includeFallbackColors:true,level:\"AAA\",size:\"large\"}).toHexString(); // \"#faf3f3\"\n// tinycolor.mostReadable(\"#a8015a\", [\"#faf3f3\"],{includeFallbackColors:true,level:\"AAA\",size:\"small\"}).toHexString(); // \"#ffffff\"\ntinycolor.mostReadable = function(baseColor, colorList, args) {\n var bestColor = null;\n var bestScore = 0;\n var readability;\n var includeFallbackColors, level, size ;\n args = args || {};\n includeFallbackColors = args.includeFallbackColors ;\n level = args.level;\n size = args.size;\n\n for (var i= 0; i < colorList.length ; i++) {\n readability = tinycolor.readability(baseColor, colorList[i]);\n if (readability > bestScore) {\n bestScore = readability;\n bestColor = tinycolor(colorList[i]);\n }\n }\n\n if (tinycolor.isReadable(baseColor, bestColor, {\"level\":level,\"size\":size}) || !includeFallbackColors) {\n return bestColor;\n }\n else {\n args.includeFallbackColors=false;\n return tinycolor.mostReadable(baseColor,[\"#fff\", \"#000\"],args);\n }\n};\n\n// Big List of Colors\n// ------------------\n// <http://www.w3.org/TR/css3-color/#svg-color>\nvar names = tinycolor.names = {\n aliceblue: \"f0f8ff\",\n antiquewhite: \"faebd7\",\n aqua: \"0ff\",\n aquamarine: \"7fffd4\",\n azure: \"f0ffff\",\n beige: \"f5f5dc\",\n bisque: \"ffe4c4\",\n black: \"000\",\n blanchedalmond: \"ffebcd\",\n blue: \"00f\",\n blueviolet: \"8a2be2\",\n brown: \"a52a2a\",\n burlywood: \"deb887\",\n burntsienna: \"ea7e5d\",\n cadetblue: \"5f9ea0\",\n chartreuse: \"7fff00\",\n chocolate: \"d2691e\",\n coral: \"ff7f50\",\n cornflowerblue: \"6495ed\",\n cornsilk: \"fff8dc\",\n crimson: \"dc143c\",\n cyan: \"0ff\",\n darkblue: \"00008b\",\n darkcyan: \"008b8b\",\n darkgoldenrod: \"b8860b\",\n darkgray: \"a9a9a9\",\n darkgreen: \"006400\",\n darkgrey: \"a9a9a9\",\n darkkhaki: \"bdb76b\",\n darkmagenta: \"8b008b\",\n darkolivegreen: \"556b2f\",\n darkorange: \"ff8c00\",\n darkorchid: \"9932cc\",\n darkred: \"8b0000\",\n darksalmon: \"e9967a\",\n darkseagreen: \"8fbc8f\",\n darkslateblue: \"483d8b\",\n darkslategray: \"2f4f4f\",\n darkslategrey: \"2f4f4f\",\n darkturquoise: \"00ced1\",\n darkviolet: \"9400d3\",\n deeppink: \"ff1493\",\n deepskyblue: \"00bfff\",\n dimgray: \"696969\",\n dimgrey: \"696969\",\n dodgerblue: \"1e90ff\",\n firebrick: \"b22222\",\n floralwhite: \"fffaf0\",\n forestgreen: \"228b22\",\n fuchsia: \"f0f\",\n gainsboro: \"dcdcdc\",\n ghostwhite: \"f8f8ff\",\n gold: \"ffd700\",\n goldenrod: \"daa520\",\n gray: \"808080\",\n green: \"008000\",\n greenyellow: \"adff2f\",\n grey: \"808080\",\n honeydew: \"f0fff0\",\n hotpink: \"ff69b4\",\n indianred: \"cd5c5c\",\n indigo: \"4b0082\",\n ivory: \"fffff0\",\n khaki: \"f0e68c\",\n lavender: \"e6e6fa\",\n lavenderblush: \"fff0f5\",\n lawngreen: \"7cfc00\",\n lemonchiffon: \"fffacd\",\n lightblue: \"add8e6\",\n lightcoral: \"f08080\",\n lightcyan: \"e0ffff\",\n lightgoldenrodyellow: \"fafad2\",\n lightgray: \"d3d3d3\",\n lightgreen: \"90ee90\",\n lightgrey: \"d3d3d3\",\n lightpink: \"ffb6c1\",\n lightsalmon: \"ffa07a\",\n lightseagreen: \"20b2aa\",\n lightskyblue: \"87cefa\",\n lightslategray: \"789\",\n lightslategrey: \"789\",\n lightsteelblue: \"b0c4de\",\n lightyellow: \"ffffe0\",\n lime: \"0f0\",\n limegreen: \"32cd32\",\n linen: \"faf0e6\",\n magenta: \"f0f\",\n maroon: \"800000\",\n mediumaquamarine: \"66cdaa\",\n mediumblue: \"0000cd\",\n mediumorchid: \"ba55d3\",\n mediumpurple: \"9370db\",\n mediumseagreen: \"3cb371\",\n mediumslateblue: \"7b68ee\",\n mediumspringgreen: \"00fa9a\",\n mediumturquoise: \"48d1cc\",\n mediumvioletred: \"c71585\",\n midnightblue: \"191970\",\n mintcream: \"f5fffa\",\n mistyrose: \"ffe4e1\",\n moccasin: \"ffe4b5\",\n navajowhite: \"ffdead\",\n navy: \"000080\",\n oldlace: \"fdf5e6\",\n olive: \"808000\",\n olivedrab: \"6b8e23\",\n orange: \"ffa500\",\n orangered: \"ff4500\",\n orchid: \"da70d6\",\n palegoldenrod: \"eee8aa\",\n palegreen: \"98fb98\",\n paleturquoise: \"afeeee\",\n palevioletred: \"db7093\",\n papayawhip: \"ffefd5\",\n peachpuff: \"ffdab9\",\n peru: \"cd853f\",\n pink: \"ffc0cb\",\n plum: \"dda0dd\",\n powderblue: \"b0e0e6\",\n purple: \"800080\",\n rebeccapurple: \"663399\",\n red: \"f00\",\n rosybrown: \"bc8f8f\",\n royalblue: \"4169e1\",\n saddlebrown: \"8b4513\",\n salmon: \"fa8072\",\n sandybrown: \"f4a460\",\n seagreen: \"2e8b57\",\n seashell: \"fff5ee\",\n sienna: \"a0522d\",\n silver: \"c0c0c0\",\n skyblue: \"87ceeb\",\n slateblue: \"6a5acd\",\n slategray: \"708090\",\n slategrey: \"708090\",\n snow: \"fffafa\",\n springgreen: \"00ff7f\",\n steelblue: \"4682b4\",\n tan: \"d2b48c\",\n teal: \"008080\",\n thistle: \"d8bfd8\",\n tomato: \"ff6347\",\n turquoise: \"40e0d0\",\n violet: \"ee82ee\",\n wheat: \"f5deb3\",\n white: \"fff\",\n whitesmoke: \"f5f5f5\",\n yellow: \"ff0\",\n yellowgreen: \"9acd32\"\n};\n\n// Make it easy to access colors via hexNames[hex]\nvar hexNames = tinycolor.hexNames = flip(names);\n\n// Utilities\n// ---------\n\n// { 'name1': 'val1' } becomes { 'val1': 'name1' }\nfunction flip(o) {\n var flipped = { };\n for (var i in o) {\n if (o.hasOwnProperty(i)) {\n flipped[o[i]] = i;\n }\n }\n return flipped;\n}\n\n// Return a valid alpha value [0,1] with all invalid values being set to 1\nfunction boundAlpha(a) {\n a = parseFloat(a);\n\n if (isNaN(a) || a < 0 || a > 1) {\n a = 1;\n }\n\n return a;\n}\n\n// Take input from [0, n] and return it as [0, 1]\nfunction bound01(n, max) {\n if (isOnePointZero(n)) { n = \"100%\"; }\n\n var processPercent = isPercentage(n);\n n = mathMin(max, mathMax(0, parseFloat(n)));\n\n // Automatically convert percentage into number\n if (processPercent) {\n n = parseInt(n * max, 10) / 100;\n }\n\n // Handle floating point rounding errors\n if ((Math.abs(n - max) < 0.000001)) {\n return 1;\n }\n\n // Convert into [0, 1] range if it isn't already\n return (n % max) / parseFloat(max);\n}\n\n// Force a number between 0 and 1\nfunction clamp01(val) {\n return mathMin(1, mathMax(0, val));\n}\n\n// Parse a base-16 hex value into a base-10 integer\nfunction parseIntFromHex(val) {\n return parseInt(val, 16);\n}\n\n// Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1\n// <http://stackoverflow.com/questions/7422072/javascript-how-to-detect-number-as-a-decimal-including-1-0>\nfunction isOnePointZero(n) {\n return typeof n == \"string\" && n.indexOf('.') != -1 && parseFloat(n) === 1;\n}\n\n// Check to see if string passed in is a percentage\nfunction isPercentage(n) {\n return typeof n === \"string\" && n.indexOf('%') != -1;\n}\n\n// Force a hex value to have 2 characters\nfunction pad2(c) {\n return c.length == 1 ? '0' + c : '' + c;\n}\n\n// Replace a decimal with it's percentage value\nfunction convertToPercentage(n) {\n if (n <= 1) {\n n = (n * 100) + \"%\";\n }\n\n return n;\n}\n\n// Converts a decimal to a hex value\nfunction convertDecimalToHex(d) {\n return Math.round(parseFloat(d) * 255).toString(16);\n}\n// Converts a hex value to a decimal\nfunction convertHexToDecimal(h) {\n return (parseIntFromHex(h) / 255);\n}\n\nvar matchers = (function() {\n\n // <http://www.w3.org/TR/css3-values/#integers>\n var CSS_INTEGER = \"[-\\\\+]?\\\\d+%?\";\n\n // <http://www.w3.org/TR/css3-values/#number-value>\n var CSS_NUMBER = \"[-\\\\+]?\\\\d*\\\\.\\\\d+%?\";\n\n // Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome.\n var CSS_UNIT = \"(?:\" + CSS_NUMBER + \")|(?:\" + CSS_INTEGER + \")\";\n\n // Actual matching.\n // Parentheses and commas are optional, but not required.\n // Whitespace can take the place of commas or opening paren\n var PERMISSIVE_MATCH3 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n var PERMISSIVE_MATCH4 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n\n return {\n CSS_UNIT: new RegExp(CSS_UNIT),\n rgb: new RegExp(\"rgb\" + PERMISSIVE_MATCH3),\n rgba: new RegExp(\"rgba\" + PERMISSIVE_MATCH4),\n hsl: new RegExp(\"hsl\" + PERMISSIVE_MATCH3),\n hsla: new RegExp(\"hsla\" + PERMISSIVE_MATCH4),\n hsv: new RegExp(\"hsv\" + PERMISSIVE_MATCH3),\n hsva: new RegExp(\"hsva\" + PERMISSIVE_MATCH4),\n hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,\n hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/\n };\n})();\n\n// isValidCSSUnit\n// Take in a single string / number and check to see if it looks like a CSS unit\n// (see matchers above for definition).\nfunction isValidCSSUnit(color) {\n return !!matchers.CSS_UNIT.exec(color);\n}\n\n// stringInputToObject\n// Permissive string parsing. Take in a number of formats, and output an object\n// based on detected format. Returns { r, g, b } or { h, s, l } or { h, s, v}\nfunction stringInputToObject(color) {\n\n color = color.replace(trimLeft, '').replace(trimRight, '').toLowerCase();\n var named = false;\n if (names[color]) {\n color = names[color];\n named = true;\n }\n else if (color == 'transparent') {\n return { r: 0, g: 0, b: 0, a: 0, format: \"name\" };\n }\n\n // Try to match string input using regular expressions.\n // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360]\n // Just return an object and let the conversion functions handle that.\n // This way the result will be the same whether the tinycolor is initialized with string or object.\n var match;\n if ((match = matchers.rgb.exec(color))) {\n return { r: match[1], g: match[2], b: match[3] };\n }\n if ((match = matchers.rgba.exec(color))) {\n return { r: match[1], g: match[2], b: match[3], a: match[4] };\n }\n if ((match = matchers.hsl.exec(color))) {\n return { h: match[1], s: match[2], l: match[3] };\n }\n if ((match = matchers.hsla.exec(color))) {\n return { h: match[1], s: match[2], l: match[3], a: match[4] };\n }\n if ((match = matchers.hsv.exec(color))) {\n return { h: match[1], s: match[2], v: match[3] };\n }\n if ((match = matchers.hsva.exec(color))) {\n return { h: match[1], s: match[2], v: match[3], a: match[4] };\n }\n if ((match = matchers.hex8.exec(color))) {\n return {\n r: parseIntFromHex(match[1]),\n g: parseIntFromHex(match[2]),\n b: parseIntFromHex(match[3]),\n a: convertHexToDecimal(match[4]),\n format: named ? \"name\" : \"hex8\"\n };\n }\n if ((match = matchers.hex6.exec(color))) {\n return {\n r: parseIntFromHex(match[1]),\n g: parseIntFromHex(match[2]),\n b: parseIntFromHex(match[3]),\n format: named ? \"name\" : \"hex\"\n };\n }\n if ((match = matchers.hex4.exec(color))) {\n return {\n r: parseIntFromHex(match[1] + '' + match[1]),\n g: parseIntFromHex(match[2] + '' + match[2]),\n b: parseIntFromHex(match[3] + '' + match[3]),\n a: convertHexToDecimal(match[4] + '' + match[4]),\n format: named ? \"name\" : \"hex8\"\n };\n }\n if ((match = matchers.hex3.exec(color))) {\n return {\n r: parseIntFromHex(match[1] + '' + match[1]),\n g: parseIntFromHex(match[2] + '' + match[2]),\n b: parseIntFromHex(match[3] + '' + match[3]),\n format: named ? \"name\" : \"hex\"\n };\n }\n\n return false;\n}\n\nfunction validateWCAG2Parms(parms) {\n // return valid WCAG2 parms for isReadable.\n // If input parms are invalid, return {\"level\":\"AA\", \"size\":\"small\"}\n var level, size;\n parms = parms || {\"level\":\"AA\", \"size\":\"small\"};\n level = (parms.level || \"AA\").toUpperCase();\n size = (parms.size || \"small\").toLowerCase();\n if (level !== \"AA\" && level !== \"AAA\") {\n level = \"AA\";\n }\n if (size !== \"small\" && size !== \"large\") {\n size = \"small\";\n }\n return {\"level\":level, \"size\":size};\n}\n\nthis.tinycolor = tinycolor;\n\n})()`;\n}\n// It is hacky way to make this function will be compiled preferentially by less\n// resolve error: `ReferenceError: colorPalette is not defined`\n// https://github.com/ant-design/ant-motion/issues/44\n.tinyColorMixin();\n","// Sizing shortcuts\n\n.size(@width; @height) {\n width: @width;\n height: @height;\n}\n\n.square(@size) {\n .size(@size; @size);\n}\n","/* stylelint-disable property-no-vendor-prefix, at-rule-no-vendor-prefix */\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n// HTML & Body reset\n@{html-selector},\nbody {\n .square(100%);\n}\n\n// remove the clear button of a text input control in IE10+\ninput::-ms-clear,\ninput::-ms-reveal {\n display: none;\n}\n\n// Document\n//\n// 1. Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n// 2. Change the default font family in all browsers.\n// 3. Correct the line height in all browsers.\n// 4. Prevent adjustments of font size after orientation changes in IE on Windows Phone and in iOS.\n// 5. Setting @viewport causes scrollbars to overlap content in IE11 and Edge, so\n// we force a non-overlapping, non-auto-hiding scrollbar to counteract.\n// 6. Change the default tap highlight to be completely transparent in iOS.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box; // 1\n}\n\n@{html-selector} {\n font-family: sans-serif; // 2\n line-height: 1.15; // 3\n -webkit-text-size-adjust: 100%; // 4\n -ms-text-size-adjust: 100%; // 4\n -ms-overflow-style: scrollbar; // 5\n -webkit-tap-highlight-color: fade(@black, 0%); // 6\n}\n\n// IE10+ doesn't honor `<meta name=\"viewport\">` in some cases.\n@-ms-viewport {\n width: device-width;\n}\n\n// Body\n//\n// 1. remove the margin in all browsers.\n// 2. As a best practice, apply a default `body-background`.\n\nbody {\n margin: 0; // 1\n color: @text-color;\n font-size: @font-size-base;\n font-family: @font-family;\n font-variant: @font-variant-base;\n line-height: @line-height-base;\n background-color: @body-background; // 2\n font-feature-settings: @font-feature-settings-base;\n}\n\n// Suppress the focus outline on elements that cannot be accessed via keyboard.\n// This prevents an unwanted focus outline from appearing around elements that\n// might still respond to pointer events.\n//\n// Credit: https://github.com/suitcss/base\n[tabindex='-1']:focus {\n outline: none !important;\n}\n\n// Content grouping\n//\n// 1. Add the correct box sizing in Firefox.\n// 2. Show the overflow in Edge and IE.\n\nhr {\n box-sizing: content-box; // 1\n height: 0; // 1\n overflow: visible; // 2\n}\n\n//\n// Typography\n//\n\n// remove top margins from headings\n//\n// By default, `<h1>`-`<h6>` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n margin-top: 0;\n margin-bottom: 0.5em;\n color: @heading-color;\n font-weight: 500;\n}\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `<p>`s get reset. However, we also reset the\n// bottom margin to use `em` units instead of `em`.\np {\n margin-top: 0;\n margin-bottom: 1em;\n}\n\n// Abbreviations\n//\n// 1. remove the bottom border in Firefox 39-.\n// 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n// 3. Add explicit cursor to indicate changed behavior.\n// 4. Duplicate behavior to the data-* attribute for our tooltip plugin\n\nabbr[title],\nabbr[data-original-title] {\n // 4\n text-decoration: underline; // 2\n text-decoration: underline dotted; // 2\n border-bottom: 0; // 1\n cursor: help; // 3\n}\n\naddress {\n margin-bottom: 1em;\n font-style: normal;\n line-height: inherit;\n}\n\ninput[type='text'],\ninput[type='password'],\ninput[type='number'],\ntextarea {\n -webkit-appearance: none;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1em;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 500;\n}\n\ndd {\n margin-bottom: 0.5em;\n margin-left: 0; // Undo browser default\n}\n\nblockquote {\n margin: 0 0 1em;\n}\n\ndfn {\n font-style: italic; // Add the correct font style in Android 4.3-\n}\n\nb,\nstrong {\n font-weight: bolder; // Add the correct font weight in Chrome, Edge, and Safari\n}\n\nsmall {\n font-size: 80%; // Add the correct font size in all browsers\n}\n\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n//\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n//\n// Links\n//\n\na {\n color: @link-color;\n text-decoration: @link-decoration;\n background-color: transparent; // remove the gray background on active links in IE 10.\n outline: none;\n cursor: pointer;\n transition: color 0.3s;\n -webkit-text-decoration-skip: objects; // remove gaps in links underline in iOS 8+ and Safari 8+.\n\n &:hover {\n color: @link-hover-color;\n }\n\n &:active {\n color: @link-active-color;\n }\n\n &:active,\n &:hover {\n text-decoration: @link-hover-decoration;\n outline: 0;\n }\n\n // https://github.com/ant-design/ant-design/issues/22503\n &:focus {\n text-decoration: @link-focus-decoration;\n outline: @link-focus-outline;\n }\n\n &[disabled] {\n color: @disabled-color;\n cursor: not-allowed;\n }\n}\n\n//\n// Code\n//\n\npre,\ncode,\nkbd,\nsamp {\n font-size: 1em; // Correct the odd `em` font sizing in all browsers.\n font-family: @code-family;\n}\n\npre {\n // remove browser default top margin\n margin-top: 0;\n // Reset browser default of `1em` to use `em`s\n margin-bottom: 1em;\n // Don't allow content to break outside\n overflow: auto;\n}\n\n//\n// Figures\n//\nfigure {\n // Apply a consistent margin strategy (matches our type styles).\n margin: 0 0 1em;\n}\n\n//\n// Images and content\n//\n\nimg {\n vertical-align: middle;\n border-style: none; // remove the border on images inside links in IE 10-.\n}\n\n// Avoid 300ms click delay on touch devices that support the `touch-action` CSS property.\n//\n// In particular, unlike most other browsers, IE11+Edge on Windows 10 on touch devices and IE Mobile 10-11\n// DON'T remove the click delay when `<meta name=\"viewport\" content=\"width=device-width\">` is present.\n// However, they DO support emoving the click delay via `touch-action: manipulation`.\n// See:\n// * https://getbootstrap.com/docs/4.0/content/reboot/#click-delay-optimization-for-touch\n// * http://caniuse.com/#feat=css-touch-action\n// * https://patrickhlauke.github.io/touch/tests/results/#suppressing-300ms-delay\n\na,\narea,\nbutton,\n[role='button'],\ninput:not([type='range']),\nlabel,\nselect,\nsummary,\ntextarea {\n touch-action: manipulation;\n}\n\n//\n// Tables\n//\n\ntable {\n border-collapse: collapse; // Prevent double borders\n}\n\ncaption {\n padding-top: 0.75em;\n padding-bottom: 0.3em;\n color: @text-color-secondary;\n text-align: left;\n caption-side: bottom;\n}\n\n//\n// Forms\n//\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // remove the margin in Firefox and Safari\n color: inherit;\n font-size: inherit;\n font-family: inherit;\n line-height: inherit;\n}\n\nbutton,\ninput {\n overflow: visible; // Show the overflow in Edge\n}\n\nbutton,\nselect {\n text-transform: none; // remove the inheritance of text transform in Firefox\n}\n\n// 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n// controls in Android 4.\n// 2. Correct the inability to style clickable types in iOS and Safari.\nbutton,\n@{html-selector} [type=\"button\"], /* 1 */\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; // 2\n}\n\n// remove inner border and padding from Firefox, but don't restore the outline like Normalize.\nbutton::-moz-focus-inner,\n[type='button']::-moz-focus-inner,\n[type='reset']::-moz-focus-inner,\n[type='submit']::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ninput[type='radio'],\ninput[type='checkbox'] {\n box-sizing: border-box; // 1. Add the correct box sizing in IE 10-\n padding: 0; // 2. remove the padding in IE 10-\n}\n\ninput[type='date'],\ninput[type='time'],\ninput[type='datetime-local'],\ninput[type='month'] {\n // remove the default appearance of temporal inputs to avoid a Mobile Safari\n // bug where setting a custom line-height prevents text from being vertically\n // centered within the input.\n // See https://bugs.webkit.org/show_bug.cgi?id=139848\n // and https://github.com/twbs/bootstrap/issues/11266\n -webkit-appearance: listbox;\n}\n\ntextarea {\n overflow: auto; // remove the default vertical scrollbar in IE.\n // Textareas should really only resize vertically so they don't break their (horizontal) containers.\n resize: vertical;\n}\n\nfieldset {\n // Browsers set a default `min-width: min-content;` on fieldsets,\n // unlike e.g. `<div>`s, which have `min-width: 0;` by default.\n // So we reset that to ensure fieldsets behave more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359\n // and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements\n min-width: 0;\n margin: 0;\n // Reset the default outline behavior of fieldsets so they don't affect page layout.\n padding: 0;\n border: 0;\n}\n\n// 1. Correct the text wrapping in Edge and IE.\n// 2. Correct the color inheritance from `fieldset` elements in IE.\nlegend {\n display: block;\n width: 100%;\n max-width: 100%; // 1\n margin-bottom: 0.5em;\n padding: 0;\n color: inherit; // 2\n font-size: 1.5em;\n line-height: inherit;\n white-space: normal; // 1\n}\n\nprogress {\n vertical-align: baseline; // Add the correct vertical alignment in Chrome, Firefox, and Opera.\n}\n\n// Correct the cursor style of incement and decement buttons in Chrome.\n[type='number']::-webkit-inner-spin-button,\n[type='number']::-webkit-outer-spin-button {\n height: auto;\n}\n\n[type='search'] {\n // This overrides the extra rounded corners on search inputs in iOS so that our\n // `.form-control` class can properly style them. Note that this cannot simply\n // be added to `.form-control` as it's not specific enough. For details, see\n // https://github.com/twbs/bootstrap/issues/11586.\n outline-offset: -2px; // 2. Correct the outline style in Safari.\n -webkit-appearance: none;\n}\n\n//\n// remove the inner padding and cancel buttons in Chrome and Safari on macOS.\n//\n\n[type='search']::-webkit-search-cancel-button,\n[type='search']::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// 1. Correct the inability to style clickable types in iOS and Safari.\n// 2. Change font properties to `inherit` in Safari.\n//\n\n::-webkit-file-upload-button {\n font: inherit; // 2\n -webkit-appearance: button; // 1\n}\n\n//\n// Correct element displays\n//\n\noutput {\n display: inline-block;\n}\n\nsummary {\n display: list-item; // Add the correct display in all browsers\n}\n\ntemplate {\n display: none; // Add the correct display in IE\n}\n\n// Always hide an element with the `hidden` HTML attribute (from PureCSS).\n// Needed for proper display in IE 10-.\n[hidden] {\n display: none !important;\n}\n\nmark {\n padding: 0.2em;\n background-color: @yellow-1;\n}\n\n::selection {\n color: @text-color-inverse;\n background: @text-selection-bg;\n}\n\n// Utility classes\n.clearfix {\n .clearfix();\n}\n","// mixins for clearfix\n// ------------------------\n.clearfix() {\n // https://github.com/ant-design/ant-design/issues/21301#issuecomment-583955229\n &::before {\n display: table;\n content: '';\n }\n\n &::after {\n // https://github.com/ant-design/ant-design/issues/21864\n display: table;\n clear: both;\n content: '';\n }\n}\n",".iconfont-mixin() {\n display: inline-block;\n color: @icon-color;\n font-style: normal;\n line-height: 0;\n text-align: center;\n text-transform: none;\n vertical-align: -0.125em; // for SVG icon, see https://blog.prototypr.io/align-svg-icons-to-text-and-say-goodbye-to-font-icons-d44b3d7b26b4\n text-rendering: optimizelegibility;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n\n > * {\n line-height: 1;\n }\n\n svg {\n display: inline-block;\n }\n\n &::before {\n display: none; // dont display old icon.\n }\n\n & &-icon {\n display: block;\n }\n}\n","@import '../themes/index';\n@import '../mixins/iconfont';\n\n.@{iconfont-css-prefix} {\n .iconfont-mixin();\n\n // https://github.com/ant-design/ant-design/issues/33703\n & > & {\n line-height: 0;\n vertical-align: 0;\n }\n\n &[tabindex] {\n cursor: pointer;\n }\n}\n\n.@{iconfont-css-prefix}-spin,\n.@{iconfont-css-prefix}-spin::before {\n display: inline-block;\n animation: loadingCircle 1s infinite linear;\n}\n",".motion-common(@duration: @animation-duration-base) {\n animation-duration: @duration;\n animation-fill-mode: both;\n}\n\n.motion-common-leave(@duration: @animation-duration-base) {\n animation-duration: @duration;\n animation-fill-mode: both;\n}\n\n.make-motion(@className, @keyframeName, @duration: @animation-duration-base) {\n .@{className}-enter,\n .@{className}-appear {\n .motion-common(@duration);\n\n animation-play-state: paused;\n }\n .@{className}-leave {\n .motion-common-leave(@duration);\n\n animation-play-state: paused;\n }\n .@{className}-enter.@{className}-enter-active,\n .@{className}-appear.@{className}-appear-active {\n animation-name: ~'@{keyframeName}In';\n animation-play-state: running;\n }\n .@{className}-leave.@{className}-leave-active {\n animation-name: ~'@{keyframeName}Out';\n animation-play-state: running;\n pointer-events: none;\n }\n}\n",".fade-motion(@className, @keyframeName) {\n @name: ~'@{ant-prefix}-@{className}';\n .make-motion(@name, @keyframeName);\n .@{name}-enter,\n .@{name}-appear {\n opacity: 0;\n animation-timing-function: linear;\n }\n .@{name}-leave {\n animation-timing-function: linear;\n }\n}\n\n.fade-motion(fade, antFade);\n\n@keyframes antFadeIn {\n 0% {\n opacity: 0;\n }\n\n 100% {\n opacity: 1;\n }\n}\n\n@keyframes antFadeOut {\n 0% {\n opacity: 1;\n }\n\n 100% {\n opacity: 0;\n }\n}\n",".move-motion(@className, @keyframeName) {\n @name: ~'@{ant-prefix}-@{className}';\n .make-motion(@name, @keyframeName);\n .@{name}-enter,\n .@{name}-appear {\n opacity: 0;\n animation-timing-function: @ease-out-circ;\n }\n .@{name}-leave {\n animation-timing-function: @ease-in-circ;\n }\n}\n\n.move-motion(move-up, antMoveUp);\n.move-motion(move-down, antMoveDown);\n.move-motion(move-left, antMoveLeft);\n.move-motion(move-right, antMoveRight);\n\n@keyframes antMoveDownIn {\n 0% {\n transform: translateY(100%);\n transform-origin: 0 0;\n opacity: 0;\n }\n\n 100% {\n transform: translateY(0%);\n transform-origin: 0 0;\n opacity: 1;\n }\n}\n\n@keyframes antMoveDownOut {\n 0% {\n transform: translateY(0%);\n transform-origin: 0 0;\n opacity: 1;\n }\n\n 100% {\n transform: translateY(100%);\n transform-origin: 0 0;\n opacity: 0;\n }\n}\n\n@keyframes antMoveLeftIn {\n 0% {\n transform: translateX(-100%);\n transform-origin: 0 0;\n opacity: 0;\n }\n\n 100% {\n transform: translateX(0%);\n transform-origin: 0 0;\n opacity: 1;\n }\n}\n\n@keyframes antMoveLeftOut {\n 0% {\n transform: translateX(0%);\n transform-origin: 0 0;\n opacity: 1;\n }\n\n 100% {\n transform: translateX(-100%);\n transform-origin: 0 0;\n opacity: 0;\n }\n}\n\n@keyframes antMoveRightIn {\n 0% {\n transform: translateX(100%);\n transform-origin: 0 0;\n opacity: 0;\n }\n\n 100% {\n transform: translateX(0%);\n transform-origin: 0 0;\n opacity: 1;\n }\n}\n\n@keyframes antMoveRightOut {\n 0% {\n transform: translateX(0%);\n transform-origin: 0 0;\n opacity: 1;\n }\n\n 100% {\n transform: translateX(100%);\n transform-origin: 0 0;\n opacity: 0;\n }\n}\n\n@keyframes antMoveUpIn {\n 0% {\n transform: translateY(-100%);\n transform-origin: 0 0;\n opacity: 0;\n }\n\n 100% {\n transform: translateY(0%);\n transform-origin: 0 0;\n opacity: 1;\n }\n}\n\n@keyframes antMoveUpOut {\n 0% {\n transform: translateY(0%);\n transform-origin: 0 0;\n opacity: 1;\n }\n\n 100% {\n transform: translateY(-100%);\n transform-origin: 0 0;\n opacity: 0;\n }\n}\n","@keyframes loadingCircle {\n 100% {\n transform: rotate(360deg);\n }\n}\n\n@click-animating-true: ~\"[@{ant-prefix}-click-animating='true']\";\n@click-animating-with-extra-node-true: ~\"[@{ant-prefix}-click-animating-without-extra-node='true']\";\n\n@{click-animating-true},\n@{click-animating-with-extra-node-true} {\n position: relative;\n}\n\nhtml {\n --antd-wave-shadow-color: @primary-color;\n --scroll-bar: 0;\n}\n\n@click-animating-with-extra-node-true-after: ~'@{click-animating-with-extra-node-true}::after';\n\n@{click-animating-with-extra-node-true-after},\n.@{ant-prefix}-click-animating-node {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n display: block;\n border-radius: inherit;\n box-shadow: 0 0 0 0 @primary-color;\n box-shadow: 0 0 0 0 var(--antd-wave-shadow-color);\n opacity: 0.2;\n animation: fadeEffect 2s @ease-out-circ, waveEffect 0.4s @ease-out-circ;\n animation-fill-mode: forwards;\n content: '';\n pointer-events: none;\n}\n\n@keyframes waveEffect {\n 100% {\n box-shadow: 0 0 0 @primary-color;\n box-shadow: 0 0 0 @wave-animation-width var(--antd-wave-shadow-color);\n }\n}\n\n@keyframes fadeEffect {\n 100% {\n opacity: 0;\n }\n}\n",".slide-motion(@className, @keyframeName) {\n @name: ~'@{ant-prefix}-@{className}';\n .make-motion(@name, @keyframeName);\n .@{name}-enter,\n .@{name}-appear {\n opacity: 0;\n animation-timing-function: @ease-out-quint;\n }\n .@{name}-leave {\n animation-timing-function: @ease-in-quint;\n }\n}\n\n.slide-motion(slide-up, antSlideUp);\n.slide-motion(slide-down, antSlideDown);\n.slide-motion(slide-left, antSlideLeft);\n.slide-motion(slide-right, antSlideRight);\n\n@keyframes antSlideUpIn {\n 0% {\n transform: scaleY(0.8);\n transform-origin: 0% 0%;\n opacity: 0;\n }\n\n 100% {\n transform: scaleY(1);\n transform-origin: 0% 0%;\n opacity: 1;\n }\n}\n\n@keyframes antSlideUpOut {\n 0% {\n transform: scaleY(1);\n transform-origin: 0% 0%;\n opacity: 1;\n }\n\n 100% {\n transform: scaleY(0.8);\n transform-origin: 0% 0%;\n opacity: 0;\n }\n}\n\n@keyframes antSlideDownIn {\n 0% {\n transform: scaleY(0.8);\n transform-origin: 100% 100%;\n opacity: 0;\n }\n\n 100% {\n transform: scaleY(1);\n transform-origin: 100% 100%;\n opacity: 1;\n }\n}\n\n@keyframes antSlideDownOut {\n 0% {\n transform: scaleY(1);\n transform-origin: 100% 100%;\n opacity: 1;\n }\n\n 100% {\n transform: scaleY(0.8);\n transform-origin: 100% 100%;\n opacity: 0;\n }\n}\n\n@keyframes antSlideLeftIn {\n 0% {\n transform: scaleX(0.8);\n transform-origin: 0% 0%;\n opacity: 0;\n }\n\n 100% {\n transform: scaleX(1);\n transform-origin: 0% 0%;\n opacity: 1;\n }\n}\n\n@keyframes antSlideLeftOut {\n 0% {\n transform: scaleX(1);\n transform-origin: 0% 0%;\n opacity: 1;\n }\n\n 100% {\n transform: scaleX(0.8);\n transform-origin: 0% 0%;\n opacity: 0;\n }\n}\n\n@keyframes antSlideRightIn {\n 0% {\n transform: scaleX(0.8);\n transform-origin: 100% 0%;\n opacity: 0;\n }\n\n 100% {\n transform: scaleX(1);\n transform-origin: 100% 0%;\n opacity: 1;\n }\n}\n\n@keyframes antSlideRightOut {\n 0% {\n transform: scaleX(1);\n transform-origin: 100% 0%;\n opacity: 1;\n }\n\n 100% {\n transform: scaleX(0.8);\n transform-origin: 100% 0%;\n opacity: 0;\n }\n}\n",".zoom-motion(@className, @keyframeName, @duration: @animation-duration-base) {\n @name: ~'@{ant-prefix}-@{className}';\n .make-motion(@name, @keyframeName, @duration);\n .@{name}-enter,\n .@{name}-appear {\n transform: scale(0); // need this by yiminghe\n opacity: 0;\n animation-timing-function: @ease-out-circ;\n\n &-prepare {\n transform: none;\n }\n }\n .@{name}-leave {\n animation-timing-function: @ease-in-out-circ;\n }\n}\n\n// For Modal, Select choosen item\n.zoom-motion(zoom, antZoom);\n// For Popover, Popconfirm, Dropdown\n.zoom-motion(zoom-big, antZoomBig);\n// For Tooltip\n.zoom-motion(zoom-big-fast, antZoomBig, @animation-duration-fast);\n\n.zoom-motion(zoom-up, antZoomUp);\n.zoom-motion(zoom-down, antZoomDown);\n.zoom-motion(zoom-left, antZoomLeft);\n.zoom-motion(zoom-right, antZoomRight);\n\n@keyframes antZoomIn {\n 0% {\n transform: scale(0.2);\n opacity: 0;\n }\n\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n}\n\n@keyframes antZoomOut {\n 0% {\n transform: scale(1);\n }\n\n 100% {\n transform: scale(0.2);\n opacity: 0;\n }\n}\n\n@keyframes antZoomBigIn {\n 0% {\n transform: scale(0.8);\n opacity: 0;\n }\n\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n}\n\n@keyframes antZoomBigOut {\n 0% {\n transform: scale(1);\n }\n\n 100% {\n transform: scale(0.8);\n opacity: 0;\n }\n}\n\n@keyframes antZoomUpIn {\n 0% {\n transform: scale(0.8);\n transform-origin: 50% 0%;\n opacity: 0;\n }\n\n 100% {\n transform: scale(1);\n transform-origin: 50% 0%;\n }\n}\n\n@keyframes antZoomUpOut {\n 0% {\n transform: scale(1);\n transform-origin: 50% 0%;\n }\n\n 100% {\n transform: scale(0.8);\n transform-origin: 50% 0%;\n opacity: 0;\n }\n}\n\n@keyframes antZoomLeftIn {\n 0% {\n transform: scale(0.8);\n transform-origin: 0% 50%;\n opacity: 0;\n }\n\n 100% {\n transform: scale(1);\n transform-origin: 0% 50%;\n }\n}\n\n@keyframes antZoomLeftOut {\n 0% {\n transform: scale(1);\n transform-origin: 0% 50%;\n }\n\n 100% {\n transform: scale(0.8);\n transform-origin: 0% 50%;\n opacity: 0;\n }\n}\n\n@keyframes antZoomRightIn {\n 0% {\n transform: scale(0.8);\n transform-origin: 100% 50%;\n opacity: 0;\n }\n\n 100% {\n transform: scale(1);\n transform-origin: 100% 50%;\n }\n}\n\n@keyframes antZoomRightOut {\n 0% {\n transform: scale(1);\n transform-origin: 100% 50%;\n }\n\n 100% {\n transform: scale(0.8);\n transform-origin: 100% 50%;\n opacity: 0;\n }\n}\n\n@keyframes antZoomDownIn {\n 0% {\n transform: scale(0.8);\n transform-origin: 50% 100%;\n opacity: 0;\n }\n\n 100% {\n transform: scale(1);\n transform-origin: 50% 100%;\n }\n}\n\n@keyframes antZoomDownOut {\n 0% {\n transform: scale(1);\n transform-origin: 50% 100%;\n }\n\n 100% {\n transform: scale(0.8);\n transform-origin: 50% 100%;\n opacity: 0;\n }\n}\n","// @import '../mixins/motion'; This has moved to theme/xxx inside.\n@import 'motion/fade';\n@import 'motion/move';\n@import 'motion/other';\n@import 'motion/slide';\n@import 'motion/zoom';\n\n// For common/openAnimation\n.ant-motion-collapse-legacy {\n overflow: hidden;\n\n &-active {\n transition: height @animation-duration-base @ease-in-out,\n opacity @animation-duration-base @ease-in-out !important;\n }\n}\n\n.ant-motion-collapse {\n overflow: hidden;\n transition: height @animation-duration-base @ease-in-out,\n opacity @animation-duration-base @ease-in-out !important;\n}\n","@import '../../style/themes/index';\n\n.@{ant-prefix}-affix {\n position: fixed;\n z-index: @zindex-affix;\n}\n",".reset-component() {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n color: @text-color;\n font-size: @font-size-base;\n font-variant: @font-variant-base;\n line-height: @line-height-base;\n list-style: none;\n font-feature-settings: @font-feature-settings-base;\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@alert-prefix-cls: ~'@{ant-prefix}-alert';\n\n.@{alert-prefix-cls} {\n .reset-component();\n\n position: relative;\n display: flex;\n align-items: center;\n padding: 8px 15px;\n word-wrap: break-word;\n border-radius: @border-radius-base;\n\n &-content {\n flex: 1;\n min-width: 0;\n }\n\n &-icon {\n margin-right: @margin-xs;\n }\n\n &-description {\n display: none;\n font-size: @font-size-base;\n line-height: @font-size-base + 8px;\n }\n\n &-success {\n background-color: @alert-success-bg-color;\n border: @border-width-base @border-style-base @alert-success-border-color;\n .@{alert-prefix-cls}-icon {\n color: @alert-success-icon-color;\n }\n }\n\n &-info {\n background-color: @alert-info-bg-color;\n border: @border-width-base @border-style-base @alert-info-border-color;\n .@{alert-prefix-cls}-icon {\n color: @alert-info-icon-color;\n }\n }\n\n &-warning {\n background-color: @alert-warning-bg-color;\n border: @border-width-base @border-style-base @alert-warning-border-color;\n .@{alert-prefix-cls}-icon {\n color: @alert-warning-icon-color;\n }\n }\n\n &-error {\n background-color: @alert-error-bg-color;\n border: @border-width-base @border-style-base @alert-error-border-color;\n\n .@{alert-prefix-cls}-icon {\n color: @alert-error-icon-color;\n }\n\n .@{alert-prefix-cls}-description > pre {\n margin: 0;\n padding: 0;\n }\n }\n\n &-action {\n margin-left: @margin-xs;\n }\n\n &-close-icon {\n margin-left: @margin-xs;\n padding: 0;\n overflow: hidden;\n font-size: @font-size-sm;\n line-height: @font-size-sm;\n background-color: transparent;\n border: none;\n outline: none;\n cursor: pointer;\n\n .@{iconfont-css-prefix}-close {\n color: @alert-close-color;\n transition: color 0.3s;\n\n &:hover {\n color: @alert-close-hover-color;\n }\n }\n }\n\n &-close-text {\n color: @alert-close-color;\n transition: color 0.3s;\n\n &:hover {\n color: @alert-close-hover-color;\n }\n }\n\n &-with-description {\n align-items: flex-start;\n padding: @alert-with-description-padding;\n }\n\n &-with-description&-no-icon {\n padding: @alert-with-description-no-icon-padding-vertical 15px;\n }\n\n &-with-description &-icon {\n margin-right: @alert-with-description-padding-vertical;\n font-size: @alert-with-description-icon-size;\n }\n\n &-with-description &-message {\n display: block;\n margin-bottom: 4px;\n color: @alert-message-color;\n font-size: @font-size-lg;\n }\n\n &-message {\n color: @alert-message-color;\n }\n\n &-with-description &-description {\n display: block;\n }\n\n &&-motion-leave {\n overflow: hidden;\n opacity: 1;\n transition: max-height 0.3s @ease-in-out-circ, opacity 0.3s @ease-in-out-circ,\n padding-top 0.3s @ease-in-out-circ, padding-bottom 0.3s @ease-in-out-circ,\n margin-bottom 0.3s @ease-in-out-circ;\n }\n\n &&-motion-leave-active {\n max-height: 0;\n margin-bottom: 0 !important;\n padding-top: 0;\n padding-bottom: 0;\n opacity: 0;\n }\n\n &-banner {\n margin-bottom: 0;\n border: 0;\n border-radius: 0;\n }\n}\n\n@import './rtl';\n",".@{alert-prefix-cls} {\n &&-rtl {\n direction: rtl;\n }\n\n &-icon {\n .@{alert-prefix-cls}-rtl & {\n margin-right: auto;\n margin-left: @margin-xs;\n }\n }\n\n &-action {\n .@{alert-prefix-cls}-rtl & {\n margin-right: @margin-xs;\n margin-left: auto;\n }\n }\n\n &-close-icon {\n .@{alert-prefix-cls}-rtl & {\n margin-right: @margin-xs;\n margin-left: auto;\n }\n }\n\n &-with-description {\n .@{alert-prefix-cls}-rtl& {\n padding-right: @alert-with-description-icon-size;\n padding-left: @alert-with-description-padding-vertical;\n }\n\n .@{alert-prefix-cls}-icon {\n .@{alert-prefix-cls}-rtl& {\n margin-right: auto;\n margin-left: @alert-with-description-padding-vertical;\n }\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@anchor-border-width: 2px;\n\n.@{ant-prefix}-anchor {\n .reset-component();\n\n position: relative;\n padding-left: @anchor-border-width;\n\n &-wrapper {\n margin-left: -4px;\n padding-left: 4px;\n overflow: auto;\n background-color: @anchor-bg;\n }\n\n &-ink {\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n\n &::before {\n position: relative;\n display: block;\n width: @anchor-border-width;\n height: 100%;\n margin: 0 auto;\n background-color: @anchor-border-color;\n content: ' ';\n }\n\n &-ball {\n position: absolute;\n left: 50%;\n display: none;\n width: 8px;\n height: 8px;\n background-color: @component-background;\n border: 2px solid @primary-color;\n border-radius: 8px;\n transform: translateX(-50%);\n transition: top 0.3s ease-in-out;\n\n &.@{ant-prefix}-ink-ball-visible {\n display: inline-block;\n }\n }\n }\n\n &-fixed &-ink &-ink-ball {\n display: none;\n }\n\n &-link {\n padding: @anchor-link-padding;\n\n &-title {\n position: relative;\n display: block;\n margin-bottom: 3px;\n overflow: hidden;\n color: @text-color;\n white-space: nowrap;\n text-overflow: ellipsis;\n transition: all 0.3s;\n\n &:only-child {\n margin-bottom: 0;\n }\n }\n\n &-active > &-title {\n color: @primary-color;\n }\n }\n\n &-link &-link {\n padding-top: 2px;\n padding-bottom: 2px;\n }\n}\n\n@import './rtl';\n",".@{ant-prefix}-anchor {\n &-rtl {\n direction: rtl;\n }\n\n &-wrapper {\n .@{ant-prefix}-anchor-rtl& {\n margin-right: -4px;\n margin-left: 0;\n padding-right: 4px;\n padding-left: 0;\n }\n }\n\n &-ink {\n .@{ant-prefix}-anchor-rtl & {\n right: 0;\n left: auto;\n }\n\n &-ball {\n .@{ant-prefix}-anchor-rtl & {\n right: 50%;\n left: 0;\n transform: translateX(50%);\n }\n }\n }\n\n &-link {\n .@{ant-prefix}-anchor-rtl & {\n padding: @anchor-link-top @anchor-link-left @anchor-link-top 0;\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n@import '../../input/style/mixin';\n\n@input-prefix-cls: ~'@{ant-prefix}-input';\n@select-prefix-cls: ~'@{ant-prefix}-select';\n@autocomplete-prefix-cls: ~'@{select-prefix-cls}-auto-complete';\n\n.@{autocomplete-prefix-cls} {\n .reset-component();\n\n // https://github.com/ant-design/ant-design/issues/22302\n .@{select-prefix-cls}-clear {\n right: 13px;\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@avatar-prefix-cls: ~'@{ant-prefix}-avatar';\n\n.@{avatar-prefix-cls} {\n .reset-component();\n\n position: relative;\n display: inline-block;\n overflow: hidden;\n color: @avatar-color;\n white-space: nowrap;\n text-align: center;\n vertical-align: middle;\n background: @avatar-bg;\n\n &-image {\n background: transparent;\n }\n\n .@{ant-prefix}-image-img {\n display: block;\n }\n\n .avatar-size(@avatar-size-base, @avatar-font-size-base);\n\n &-lg {\n .avatar-size(@avatar-size-lg, @avatar-font-size-lg);\n }\n\n &-sm {\n .avatar-size(@avatar-size-sm, @avatar-font-size-sm);\n }\n\n &-square {\n border-radius: @avatar-border-radius;\n }\n\n & > img {\n display: block;\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n}\n\n.avatar-size(@size, @font-size) {\n width: @size;\n height: @size;\n line-height: @size;\n border-radius: 50%;\n\n &-string {\n position: absolute;\n left: 50%;\n transform-origin: 0 center;\n }\n\n &.@{avatar-prefix-cls}-icon {\n font-size: @font-size;\n\n > .@{iconfont-css-prefix} {\n margin: 0;\n }\n }\n}\n\n@import './group';\n@import './rtl';\n",".@{avatar-prefix-cls}-group {\n display: inline-flex;\n\n .@{avatar-prefix-cls} {\n border: 1px solid @avatar-group-border-color;\n\n &:not(:first-child) {\n margin-left: @avatar-group-overlapping;\n }\n }\n\n &-popover {\n .@{ant-prefix}-avatar + .@{ant-prefix}-avatar {\n margin-left: @avatar-group-space;\n }\n }\n}\n",".@{avatar-prefix-cls}-group {\n &-rtl {\n .@{avatar-prefix-cls}:not(:first-child) {\n margin-right: @avatar-group-overlapping;\n margin-left: 0;\n }\n }\n\n &-popover.@{ant-prefix}-popover-rtl {\n .@{ant-prefix}-avatar + .@{ant-prefix}-avatar {\n margin-right: @avatar-group-space;\n margin-left: 0;\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@backtop-prefix-cls: ~'@{ant-prefix}-back-top';\n\n.@{backtop-prefix-cls} {\n .reset-component();\n\n position: fixed;\n right: 100px;\n bottom: 50px;\n z-index: @zindex-back-top;\n width: 40px;\n height: 40px;\n cursor: pointer;\n\n &:empty {\n display: none;\n }\n\n &-rtl {\n right: auto;\n left: 100px;\n direction: rtl;\n }\n\n &-content {\n width: 40px;\n height: 40px;\n overflow: hidden;\n color: @back-top-color;\n text-align: center;\n background-color: @back-top-bg;\n border-radius: 20px;\n transition: all 0.3s;\n\n &:hover {\n background-color: @back-top-hover-bg;\n transition: all 0.3s;\n }\n }\n\n &-icon {\n font-size: 24px;\n line-height: 40px;\n }\n}\n\n@import './responsive';\n","@media screen and (max-width: @screen-md) {\n .@{backtop-prefix-cls} {\n right: 60px;\n\n &-rtl {\n right: auto;\n left: 60px;\n }\n }\n}\n\n@media screen and (max-width: @screen-xs) {\n .@{backtop-prefix-cls} {\n right: 20px;\n\n &-rtl {\n right: auto;\n left: 20px;\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@badge-prefix-cls: ~'@{ant-prefix}-badge';\n@number-prefix-cls: ~'@{ant-prefix}-scroll-number';\n\n.@{badge-prefix-cls} {\n .reset-component();\n\n position: relative;\n display: inline-block;\n line-height: 1;\n\n &-count {\n z-index: @zindex-badge;\n min-width: @badge-height;\n height: @badge-height;\n padding: 0 6px;\n color: @badge-text-color;\n font-weight: @badge-font-weight;\n font-size: @badge-font-size;\n line-height: @badge-height;\n white-space: nowrap;\n text-align: center;\n background: @badge-color;\n border-radius: (@badge-height / 2);\n box-shadow: 0 0 0 1px @shadow-color-inverse;\n\n a,\n a:hover {\n color: @badge-text-color;\n }\n }\n\n &-count-sm {\n min-width: @badge-height-sm;\n height: @badge-height-sm;\n padding: 0;\n font-size: @badge-font-size-sm;\n line-height: @badge-height-sm;\n border-radius: (@badge-height-sm / 2);\n }\n\n &-multiple-words {\n padding: 0 8px;\n }\n\n &-dot {\n z-index: @zindex-badge;\n width: @badge-dot-size;\n min-width: @badge-dot-size;\n height: @badge-dot-size;\n background: @highlight-color;\n border-radius: 100%;\n box-shadow: 0 0 0 1px @shadow-color-inverse;\n }\n\n // Tricky way to resolve https://github.com/ant-design/ant-design/issues/30088\n &-dot.@{number-prefix-cls} {\n transition: background 1.5s;\n }\n\n &-count,\n &-dot,\n .@{number-prefix-cls}-custom-component {\n position: absolute;\n top: 0;\n right: 0;\n transform: translate(50%, -50%);\n transform-origin: 100% 0%;\n\n &.@{iconfont-css-prefix}-spin {\n animation: antBadgeLoadingCircle 1s infinite linear;\n }\n }\n\n &-status {\n line-height: inherit;\n vertical-align: baseline;\n\n &-dot {\n position: relative;\n top: -1px;\n display: inline-block;\n width: @badge-status-size;\n height: @badge-status-size;\n vertical-align: middle;\n border-radius: 50%;\n }\n\n &-success {\n background-color: @success-color;\n }\n\n &-processing {\n position: relative;\n background-color: @processing-color;\n\n &::after {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 1px solid @processing-color;\n border-radius: 50%;\n animation: antStatusProcessing 1.2s infinite ease-in-out;\n content: '';\n }\n }\n\n &-default {\n background-color: @normal-color;\n }\n\n &-error {\n background-color: @error-color;\n }\n\n &-warning {\n background-color: @warning-color;\n }\n\n // mixin to iterate over colors and create CSS class for each one\n .make-color-classes(@i: length(@preset-colors)) when (@i > 0) {\n .make-color-classes(@i - 1);\n @color: extract(@preset-colors, @i);\n @darkColor: '@{color}-6';\n &-@{color} {\n background: @@darkColor;\n }\n }\n .make-color-classes();\n\n &-text {\n margin-left: 8px;\n color: @text-color;\n font-size: @font-size-base;\n }\n }\n\n &-zoom-appear,\n &-zoom-enter {\n animation: antZoomBadgeIn @animation-duration-slow @ease-out-back;\n animation-fill-mode: both;\n }\n\n &-zoom-leave {\n animation: antZoomBadgeOut @animation-duration-slow @ease-in-back;\n animation-fill-mode: both;\n }\n\n &-not-a-wrapper {\n .@{badge-prefix-cls}-zoom-appear,\n .@{badge-prefix-cls}-zoom-enter {\n animation: antNoWrapperZoomBadgeIn @animation-duration-slow @ease-out-back;\n }\n\n .@{badge-prefix-cls}-zoom-leave {\n animation: antNoWrapperZoomBadgeOut @animation-duration-slow @ease-in-back;\n }\n\n &:not(.@{badge-prefix-cls}-status) {\n vertical-align: middle;\n }\n\n .@{number-prefix-cls}-custom-component,\n .@{badge-prefix-cls}-count {\n transform: none;\n }\n\n .@{number-prefix-cls}-custom-component,\n .@{number-prefix-cls} {\n position: relative;\n top: auto;\n display: block;\n transform-origin: 50% 50%;\n }\n }\n}\n\n@keyframes antStatusProcessing {\n 0% {\n transform: scale(0.8);\n opacity: 0.5;\n }\n\n 100% {\n transform: scale(2.4);\n opacity: 0;\n }\n}\n\n// Safari will blink with transform when inner element has absolute style.\n.safari-fix-motion() {\n /* stylelint-disable property-no-vendor-prefix */\n -webkit-transform-style: preserve-3d;\n -webkit-backface-visibility: hidden;\n /* stylelint-enable property-no-vendor-prefix */\n}\n\n.@{number-prefix-cls} {\n overflow: hidden;\n direction: ltr;\n\n &-only {\n position: relative;\n display: inline-block;\n height: @badge-height;\n transition: all @animation-duration-slow @ease-in-out;\n .safari-fix-motion;\n\n > p.@{number-prefix-cls}-only-unit {\n height: @badge-height;\n margin: 0;\n .safari-fix-motion;\n }\n }\n\n &-symbol {\n vertical-align: top;\n }\n}\n\n@keyframes antZoomBadgeIn {\n 0% {\n transform: scale(0) translate(50%, -50%);\n opacity: 0;\n }\n\n 100% {\n transform: scale(1) translate(50%, -50%);\n }\n}\n\n@keyframes antZoomBadgeOut {\n 0% {\n transform: scale(1) translate(50%, -50%);\n }\n\n 100% {\n transform: scale(0) translate(50%, -50%);\n opacity: 0;\n }\n}\n\n@keyframes antNoWrapperZoomBadgeIn {\n 0% {\n transform: scale(0);\n opacity: 0;\n }\n\n 100% {\n transform: scale(1);\n }\n}\n\n@keyframes antNoWrapperZoomBadgeOut {\n 0% {\n transform: scale(1);\n }\n\n 100% {\n transform: scale(0);\n opacity: 0;\n }\n}\n\n@keyframes antBadgeLoadingCircle {\n 0% {\n transform-origin: 50%;\n }\n\n 100% {\n transform: translate(50%, -50%) rotate(360deg);\n transform-origin: 50%;\n }\n}\n\n@import './ribbon';\n@import './rtl';\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@ribbon-prefix-cls: ~'@{ant-prefix}-ribbon';\n@ribbon-wrapper-prefix-cls: ~'@{ant-prefix}-ribbon-wrapper';\n\n.@{ribbon-wrapper-prefix-cls} {\n position: relative;\n}\n\n.@{ribbon-prefix-cls} {\n .reset-component();\n\n position: absolute;\n top: 8px;\n height: 22px;\n padding: 0 8px;\n color: @badge-text-color;\n line-height: 22px;\n white-space: nowrap;\n background-color: @primary-color;\n border-radius: @border-radius-sm;\n\n &-text {\n color: @white;\n }\n\n &-corner {\n position: absolute;\n top: 100%;\n width: 8px;\n height: 8px;\n color: currentcolor;\n border: 4px solid;\n transform: scaleY(0.75);\n transform-origin: top;\n // If not support IE 11, use filter: brightness(75%) instead\n &::after {\n position: absolute;\n top: -4px;\n left: -4px;\n width: inherit;\n height: inherit;\n color: rgba(0, 0, 0, 0.25);\n border: inherit;\n content: '';\n }\n }\n\n // colors\n // mixin to iterate over colors and create CSS class for each one\n .make-color-classes(@i: length(@preset-colors)) when (@i > 0) {\n .make-color-classes(@i - 1);\n @color: extract(@preset-colors, @i);\n @darkColor: '@{color}-6';\n &-color-@{color} {\n color: @@darkColor;\n background: @@darkColor;\n }\n }\n .make-color-classes();\n\n // placement\n &.@{ribbon-prefix-cls}-placement-end {\n right: -8px;\n border-bottom-right-radius: 0;\n .@{ribbon-prefix-cls}-corner {\n right: 0;\n border-color: currentcolor transparent transparent currentcolor;\n }\n }\n\n &.@{ribbon-prefix-cls}-placement-start {\n left: -8px;\n border-bottom-left-radius: 0;\n .@{ribbon-prefix-cls}-corner {\n left: 0;\n border-color: currentcolor currentcolor transparent transparent;\n }\n }\n}\n",".@{badge-prefix-cls} {\n &-rtl {\n direction: rtl;\n }\n\n &:not(&-not-a-wrapper) &-count,\n &:not(&-not-a-wrapper) &-dot,\n &:not(&-not-a-wrapper) .@{number-prefix-cls}-custom-component {\n .@{badge-prefix-cls}-rtl& {\n right: auto;\n left: 0;\n direction: ltr;\n transform: translate(-50%, -50%);\n transform-origin: 0% 0%;\n }\n }\n\n &-rtl&:not(&-not-a-wrapper) .@{number-prefix-cls}-custom-component {\n right: auto;\n left: 0;\n transform: translate(-50%, -50%);\n transform-origin: 0% 0%;\n }\n\n &-status {\n &-text {\n .@{badge-prefix-cls}-rtl & {\n margin-right: 8px;\n margin-left: 0;\n }\n }\n }\n\n &:not(&-not-a-wrapper).@{badge-prefix-cls}-rtl {\n .@{badge-prefix-cls}-zoom-appear,\n .@{badge-prefix-cls}-zoom-enter {\n animation-name: antZoomBadgeInRtl;\n }\n\n .@{badge-prefix-cls}-zoom-leave {\n animation-name: antZoomBadgeOutRtl;\n }\n }\n}\n\n.@{ribbon-prefix-cls}-rtl {\n direction: rtl;\n &.@{ribbon-prefix-cls}-placement-end {\n right: unset;\n left: -8px;\n border-bottom-right-radius: @border-radius-sm;\n border-bottom-left-radius: 0;\n .@{ribbon-prefix-cls}-corner {\n right: unset;\n left: 0;\n border-color: currentcolor currentcolor transparent transparent;\n\n &::after {\n border-color: currentcolor currentcolor transparent transparent;\n }\n }\n }\n &.@{ribbon-prefix-cls}-placement-start {\n right: -8px;\n left: unset;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: @border-radius-sm;\n .@{ribbon-prefix-cls}-corner {\n right: 0;\n left: unset;\n border-color: currentcolor transparent transparent currentcolor;\n\n &::after {\n border-color: currentcolor transparent transparent currentcolor;\n }\n }\n }\n}\n\n@keyframes antZoomBadgeInRtl {\n 0% {\n transform: scale(0) translate(-50%, -50%);\n opacity: 0;\n }\n\n 100% {\n transform: scale(1) translate(-50%, -50%);\n }\n}\n\n@keyframes antZoomBadgeOutRtl {\n 0% {\n transform: scale(1) translate(-50%, -50%);\n }\n\n 100% {\n transform: scale(0) translate(-50%, -50%);\n opacity: 0;\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@breadcrumb-prefix-cls: ~'@{ant-prefix}-breadcrumb';\n\n.@{breadcrumb-prefix-cls} {\n .reset-component();\n\n color: @breadcrumb-base-color;\n font-size: @breadcrumb-font-size;\n\n .@{iconfont-css-prefix} {\n font-size: @breadcrumb-icon-font-size;\n }\n\n ol {\n display: flex;\n flex-wrap: wrap;\n margin: 0;\n padding: 0;\n list-style: none;\n }\n\n a {\n color: @breadcrumb-link-color;\n transition: color 0.3s;\n\n &:hover {\n color: @breadcrumb-link-color-hover;\n }\n }\n\n li:last-child {\n color: @breadcrumb-last-item-color;\n\n a {\n color: @breadcrumb-last-item-color;\n }\n }\n\n li:last-child > &-separator {\n display: none;\n }\n\n &-separator {\n margin: @breadcrumb-separator-margin;\n color: @breadcrumb-separator-color;\n }\n\n &-link {\n > .@{iconfont-css-prefix} + span,\n > .@{iconfont-css-prefix} + a {\n margin-left: 4px;\n }\n }\n\n &-overlay-link {\n > .@{iconfont-css-prefix} {\n margin-left: 4px;\n }\n }\n}\n\n@import './rtl';\n",".@{breadcrumb-prefix-cls} {\n &-rtl {\n .clearfix();\n direction: rtl;\n\n > span {\n float: right;\n }\n }\n\n &-link {\n > .@{iconfont-css-prefix} + span,\n > .@{iconfont-css-prefix} + a {\n .@{breadcrumb-prefix-cls}-rtl & {\n margin-right: 4px;\n margin-left: 0;\n }\n }\n }\n\n &-overlay-link {\n > .@{iconfont-css-prefix} {\n .@{breadcrumb-prefix-cls}-rtl & {\n margin-right: 4px;\n margin-left: 0;\n }\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n@import './mixin';\n\n@btn-prefix-cls: ~'@{ant-prefix}-btn';\n\n// for compatible\n@btn-ghost-color: @text-color;\n@btn-ghost-bg: transparent;\n@btn-ghost-border: @border-color-base;\n\n// Button styles\n// -----------------------------\n.@{btn-prefix-cls} {\n // Fixing https://github.com/ant-design/ant-design/issues/12978\n // Fixing https://github.com/ant-design/ant-design/issues/20058\n // Fixing https://github.com/ant-design/ant-design/issues/19972\n // Fixing https://github.com/ant-design/ant-design/issues/18107\n // Fixing https://github.com/ant-design/ant-design/issues/13214\n // It is a render problem of chrome, which is only happened in the codesandbox demo\n // 0.001px solution works and I don't know why\n line-height: @btn-line-height;\n .btn();\n .btn-default();\n\n // Fix loading button animation\n // https://github.com/ant-design/ant-design/issues/24323\n > span {\n display: inline-block;\n }\n\n &-primary {\n .btn-primary();\n\n .@{btn-prefix-cls}-group &:not(:first-child):not(:last-child) {\n border-right-color: @btn-group-border;\n border-left-color: @btn-group-border;\n\n &:disabled {\n border-color: @btn-default-border;\n }\n }\n\n .@{btn-prefix-cls}-group &:first-child {\n &:not(:last-child) {\n border-right-color: @btn-group-border;\n\n &[disabled] {\n border-right-color: @btn-default-border;\n }\n }\n }\n\n .@{btn-prefix-cls}-group &:last-child:not(:first-child),\n .@{btn-prefix-cls}-group & + & {\n border-left-color: @btn-group-border;\n\n &[disabled] {\n border-left-color: @btn-default-border;\n }\n }\n }\n\n &-ghost {\n .btn-ghost();\n }\n\n &-dashed {\n .btn-dashed();\n }\n\n // type=\"danger\" will deprecated\n // use danger instead\n &-danger {\n .btn-danger();\n }\n\n &-link {\n .btn-link();\n }\n\n &-text {\n .btn-text();\n }\n\n &-dangerous {\n .btn-danger-default();\n }\n\n &-dangerous&-primary {\n .btn-danger();\n }\n\n &-dangerous&-link {\n .btn-danger-link();\n }\n\n &-dangerous&-text {\n .btn-danger-text();\n }\n\n &-icon-only {\n .btn-square(@btn-prefix-cls);\n vertical-align: -3px;\n\n > .@{iconfont-css-prefix} {\n display: flex;\n justify-content: center;\n }\n\n .@{iconfont-css-prefix}-loading {\n padding: 0 !important;\n }\n }\n\n // https://github.com/ant-design/ant-design/issues/32365\n a&-icon-only {\n vertical-align: -1px;\n\n > .@{iconfont-css-prefix} {\n display: inline;\n }\n }\n\n &-round {\n .btn-round(@btn-prefix-cls);\n &.@{btn-prefix-cls}-icon-only {\n width: auto;\n }\n }\n\n &-circle {\n .btn-circle(@btn-prefix-cls);\n }\n\n &::before {\n position: absolute;\n top: -@btn-border-width;\n right: -@btn-border-width;\n bottom: -@btn-border-width;\n left: -@btn-border-width;\n z-index: 1;\n display: none;\n background: @component-background;\n border-radius: inherit;\n opacity: 0.35;\n transition: opacity 0.2s;\n content: '';\n pointer-events: none;\n }\n\n .@{iconfont-css-prefix} {\n transition: margin-left 0.3s @ease-in-out;\n\n // Follow icon blur under windows. Change the render.\n // https://github.com/ant-design/ant-design/issues/13924\n &.@{iconfont-css-prefix}-plus,\n &.@{iconfont-css-prefix}-minus {\n > svg {\n shape-rendering: optimizespeed;\n }\n }\n }\n\n &&-loading {\n position: relative;\n cursor: default;\n\n &::before {\n display: block;\n }\n }\n\n & > &-loading-icon {\n transition: width 0.3s @ease-in-out, opacity 0.3s @ease-in-out;\n\n .@{iconfont-css-prefix} {\n padding-right: @padding-xs;\n animation: none;\n // for smooth button padding transition\n svg {\n animation: loadingCircle 1s infinite linear;\n }\n }\n }\n\n &-group {\n .btn-group(@btn-prefix-cls);\n }\n\n // http://stackoverflow.com/a/21281554/3040605\n &:focus > span,\n &:active > span {\n position: relative;\n }\n\n // To ensure that a space will be placed between character and `Icon`.\n > .@{iconfont-css-prefix} + span,\n > span + .@{iconfont-css-prefix} {\n margin-left: @margin-xs;\n }\n\n &&-background-ghost {\n color: @btn-default-ghost-color;\n border-color: @btn-default-ghost-border;\n\n &,\n &:hover,\n &:active,\n &:focus {\n background: @btn-default-ghost-bg;\n }\n\n &:hover,\n &:focus {\n color: @primary-color-hover;\n border-color: @primary-color-hover;\n }\n\n &:active {\n color: @primary-color-active;\n border-color: @primary-color-active;\n }\n\n &[disabled] {\n color: @disabled-color;\n background: @btn-default-ghost-bg;\n border-color: @btn-default-border;\n }\n }\n\n &-background-ghost&-primary {\n .button-variant-ghost(@btn-primary-bg, @btn-primary-bg, @primary-color-hover, @primary-color-active);\n }\n\n &-background-ghost&-danger {\n .button-variant-ghost(@btn-danger-border, @btn-danger-border, @error-color-hover, @error-color-active);\n }\n\n &-background-ghost&-dangerous {\n .button-variant-ghost(@btn-danger-border, @btn-danger-border, @error-color-hover, @error-color-active);\n }\n\n &-background-ghost&-dangerous&-link {\n .button-variant-ghost(@btn-danger-border, transparent, @error-color-hover, @error-color-active);\n }\n\n &-two-chinese-chars::first-letter {\n letter-spacing: 0.34em;\n }\n\n &-two-chinese-chars > *:not(.@{iconfont-css-prefix}) {\n margin-right: -0.34em;\n letter-spacing: 0.34em;\n }\n\n &&-block {\n width: 100%;\n }\n\n // https://github.com/ant-design/ant-design/issues/12681\n // same method as Select\n &:empty {\n display: inline-block;\n width: 0;\n visibility: hidden;\n content: '\\a0';\n }\n}\n\na.@{btn-prefix-cls} {\n // Fixing https://github.com/ant-design/ant-design/issues/12978\n // https://github.com/ant-design/ant-design/issues/29978\n // It is a render problem of chrome, which is only happened in the codesandbox demo\n // 0.1px for padding-top solution works and I don't why\n padding-top: 0.01px !important;\n line-height: @btn-height-base - 2px;\n\n &-disabled {\n .btn-href-disabled();\n }\n\n &-lg {\n line-height: @btn-height-lg - 2px;\n }\n\n &-sm {\n line-height: @btn-height-sm - 2px;\n }\n}\n\n@import './space-compact';\n@import './rtl';\n","// mixins for button\n// ------------------------\n.button-size(@height; @padding-horizontal; @font-size; @border-radius) {\n @padding-vertical: max(\n (round(((@height - @font-size * @line-height-base) / 2) * 10) / 10) - @border-width-base,\n 0\n );\n height: @height;\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n border-radius: @border-radius;\n}\n\n.button-color(@color; @background; @border) {\n color: @color;\n border-color: @border; // a inside Button which only work in Chrome\n & when not(@background = null) {\n background: @background;\n }\n // http://stackoverflow.com/a/17253457\n > a:only-child {\n color: currentcolor;\n\n &::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n content: '';\n }\n }\n}\n\n.button-disabled(@color: @btn-disable-color; @background: @btn-disable-bg; @border: @btn-disable-border) {\n &[disabled] {\n &,\n &:hover,\n &:focus,\n &:active {\n .button-color(@color; @background; @border);\n\n text-shadow: none;\n box-shadow: none;\n }\n }\n}\n\n.button-variant-primary(@color; @background; @backgroundHover: yellow; @backgroundActive: yellow) {\n .button-color(@color; @background; @background);\n\n text-shadow: @btn-text-shadow;\n box-shadow: @btn-primary-shadow;\n\n &:hover,\n &:focus {\n & when (@theme = dark) {\n .button-color(\n @color; ~`colorPalette('@{background}', 7) `; ~`colorPalette('@{background}', 7) `\n );\n }\n & when (not (@theme = dark) and not (@theme = variable)) {\n .button-color(\n @color; ~`colorPalette('@{background}', 5) `; ~`colorPalette('@{background}', 5) `\n );\n }\n & when (@theme = variable) {\n .button-color(@color; @backgroundHover; @backgroundHover);\n }\n }\n\n &:active {\n & when (@theme = dark) {\n .button-color(\n @color; ~`colorPalette('@{background}', 5) `; ~`colorPalette('@{background}', 5) `\n );\n }\n & when (not (@theme = dark) and not (@theme = variable)) {\n .button-color(\n @color; ~`colorPalette('@{background}', 7) `; ~`colorPalette('@{background}', 7) `\n );\n }\n & when (@theme = variable) {\n .button-color(@color; @backgroundActive; @backgroundActive);\n }\n }\n\n .button-disabled();\n}\n\n.button-variant-other(@color; @background; @border) {\n .button-color(@color; @background; @border);\n\n &:hover,\n &:focus {\n & when (@theme = dark) {\n .button-color(@primary-5; @background; @primary-5);\n }\n & when (not (@theme = dark) and not (@theme = variable)) {\n .button-color(\n ~`colorPalette('@{btn-primary-bg}', 5) `; @background;\n ~`colorPalette('@{btn-primary-bg}', 5) `\n );\n }\n & when (@theme = variable) {\n .button-color(@primary-color-hover; @background; @primary-color-hover);\n }\n }\n\n &:active {\n & when (@theme = dark) {\n .button-color(@primary-7; @background; @primary-7);\n }\n & when (not (@theme = dark) and not (@theme = variable)) {\n .button-color(\n ~`colorPalette('@{btn-primary-bg}', 7) `; @background;\n ~`colorPalette('@{btn-primary-bg}', 7) `\n );\n }\n & when (@theme = variable) {\n .button-color(@primary-color-active; @background; @primary-color-active);\n }\n }\n .button-disabled();\n}\n\n.button-variant-ghost(@color; @border; @borderHover: yellow; @borderActive: yellow) {\n .button-color(@color; null; @border);\n text-shadow: none;\n\n &:hover,\n &:focus {\n & when (@border = transparent) {\n & when (@theme = dark) {\n .button-color(~`colorPalette('@{color}', 7) `; null; transparent);\n }\n & when (not (@theme = dark) and not (@theme = variable)) {\n .button-color(~`colorPalette('@{color}', 5) `; null; transparent);\n }\n & when (@theme = variable) {\n .button-color(@borderActive; transparent; transparent);\n }\n }\n & when not (@border = transparent) {\n & when (@theme = dark) {\n .button-color(\n ~`colorPalette('@{color}', 7) `; null; ~`colorPalette('@{color}', 7) `\n );\n }\n & when (not (@theme = dark) and not (@theme = variable)) {\n .button-color(\n ~`colorPalette('@{color}', 5) `; null; ~`colorPalette('@{color}', 5) `\n );\n }\n & when (@theme = variable) {\n .button-color(@borderHover; transparent; @borderHover);\n }\n }\n }\n\n &:active {\n & when (@border = transparent) {\n & when (@theme = dark) {\n .button-color(~`colorPalette('@{color}', 5) `; null; transparent);\n }\n & when (not (@theme = dark) and not (@theme = variable)) {\n .button-color(~`colorPalette('@{color}', 7) `; null; transparent);\n }\n & when (@theme = variable) {\n .button-color(@borderActive; transparent; transparent);\n }\n }\n & when not (@border = transparent) {\n & when (@theme = dark) {\n .button-color(\n ~`colorPalette('@{color}', 5) `; null; ~`colorPalette('@{color}', 5) `\n );\n }\n & when (not (@theme = dark) and not (@theme = variable)) {\n .button-color(\n ~`colorPalette('@{color}', 7) `; null; ~`colorPalette('@{color}', 7) `\n );\n }\n & when (@theme = variable) {\n .button-color(@borderActive; transparent; @borderActive);\n }\n }\n }\n .button-disabled();\n}\n\n.button-group-base(@btnClassName) {\n position: relative;\n display: inline-flex;\n > .@{btnClassName},\n > span > .@{btnClassName} {\n position: relative;\n\n &:hover,\n &:focus,\n &:active {\n z-index: 2;\n }\n\n &[disabled] {\n z-index: 0;\n }\n }\n .@{btnClassName}-icon-only {\n font-size: @font-size-base;\n }\n}\n// Base styles of buttons\n// --------------------------------------------------\n.btn() {\n position: relative;\n display: inline-block;\n font-weight: @btn-font-weight;\n white-space: nowrap;\n text-align: center;\n background-image: none;\n border: @btn-border-width @btn-border-style transparent;\n box-shadow: @btn-shadow;\n cursor: pointer;\n transition: all 0.3s @ease-in-out;\n user-select: none;\n touch-action: manipulation;\n .button-size(\n @btn-height-base; @btn-padding-horizontal-base; @font-size-base; @btn-border-radius-base\n );\n > .@{iconfont-css-prefix} {\n line-height: 1;\n }\n\n &,\n &:active,\n &:focus {\n outline: 0;\n }\n\n &:not([disabled]):hover {\n text-decoration: none;\n }\n\n &:not([disabled]):active {\n outline: 0;\n box-shadow: none;\n }\n\n &[disabled] {\n cursor: not-allowed;\n\n > * {\n pointer-events: none;\n }\n }\n\n &-lg {\n .button-size(\n @btn-height-lg; @btn-padding-horizontal-lg; @btn-font-size-lg; @btn-border-radius-base\n );\n }\n\n &-sm {\n .button-size(\n @btn-height-sm; @btn-padding-horizontal-sm; @btn-font-size-sm; @btn-border-radius-sm\n );\n }\n}\n// primary button style\n.btn-primary() {\n .button-variant-primary(@btn-primary-color; @btn-primary-bg; @primary-color-hover; @primary-color-active);\n}\n// default button style\n.btn-default() {\n .button-variant-other(@btn-default-color; @btn-default-bg; @btn-default-border; );\n\n &:hover,\n &:focus,\n &:active {\n text-decoration: none;\n background: @btn-default-bg;\n }\n}\n// ghost button style\n.btn-ghost() {\n .button-variant-other(@btn-ghost-color, @btn-ghost-bg, @btn-ghost-border);\n}\n// dashed button style\n.btn-dashed() {\n .button-variant-other(@btn-default-color, @btn-default-bg, @btn-default-border);\n border-style: dashed;\n}\n// danger button style\n.btn-danger() {\n .button-variant-primary(@btn-danger-color, @btn-danger-bg, @error-color-hover, @error-color-active);\n}\n// danger default button style\n.btn-danger-default() {\n .button-color(@error-color, @btn-default-bg, @error-color);\n\n &:hover,\n &:focus {\n & when (@theme = dark) {\n .button-color(\n ~`colorPalette('@{error-color}', 7) `; @btn-default-bg; ~`colorPalette('@{error-color}', 7)\n `\n );\n }\n & when (not (@theme = dark) and not (@theme = variable)) {\n .button-color(\n ~`colorPalette('@{error-color}', 5) `; @btn-default-bg; ~`colorPalette('@{error-color}', 5)\n `\n );\n }\n & when (@theme = variable) {\n .button-color(@error-color-hover, @btn-default-bg, @error-color-hover);\n }\n }\n\n &:active {\n & when (@theme = dark) {\n .button-color(\n ~`colorPalette('@{error-color}', 5) `; @btn-default-bg; ~`colorPalette('@{error-color}', 5)\n `\n );\n }\n & when (not (@theme = dark) and not (@theme = variable)) {\n .button-color(\n ~`colorPalette('@{error-color}', 7) `; @btn-default-bg; ~`colorPalette('@{error-color}', 7)\n `\n );\n }\n & when (@theme = variable) {\n .button-color(@error-color-active, @btn-default-bg, @error-color-active);\n }\n }\n .button-disabled();\n}\n// danger link button style\n.btn-danger-link() {\n .button-variant-other(@error-color, transparent, transparent);\n box-shadow: none;\n\n &:hover,\n &:focus {\n & when (@theme = dark) {\n .button-color(~`colorPalette('@{error-color}', 7) `; transparent; transparent);\n }\n & when (not (@theme = dark) and not (@theme = variable)) {\n .button-color(~`colorPalette('@{error-color}', 5) `; transparent; transparent);\n }\n & when (@theme = variable) {\n .button-color(@error-color-hover; transparent; transparent);\n }\n }\n\n &:active {\n & when (@theme = dark) {\n .button-color(~`colorPalette('@{error-color}', 5) `; transparent; transparent);\n }\n & when (not (@theme = dark) and not (@theme = variable)) {\n .button-color(~`colorPalette('@{error-color}', 7) `; transparent; transparent);\n }\n & when (@theme = variable) {\n .button-color(@error-color-active; transparent; transparent);\n }\n }\n .button-disabled(@disabled-color; transparent; transparent);\n}\n// link button style\n.btn-link() {\n .button-variant-other(@link-color, transparent, transparent);\n box-shadow: none;\n\n &:hover {\n background: @btn-link-hover-bg;\n }\n\n &:hover,\n &:focus,\n &:active {\n border-color: transparent;\n }\n .button-disabled(@disabled-color; transparent; transparent);\n}\n// link button disabled style\n.btn-href-disabled() {\n cursor: not-allowed;\n\n > * {\n pointer-events: none;\n }\n\n &,\n &:hover,\n &:focus,\n &:active {\n .button-color(@btn-disable-color,transparent, transparent);\n\n text-shadow: none;\n box-shadow: none;\n }\n}\n// text button style\n.btn-text() {\n .button-variant-other(@text-color, transparent, transparent);\n box-shadow: none;\n\n &:hover,\n &:focus {\n color: @text-color;\n background: @btn-text-hover-bg;\n border-color: transparent;\n }\n\n &:active {\n color: @text-color;\n background: fadein(@btn-text-hover-bg, 1%);\n border-color: transparent;\n }\n\n .button-disabled(@disabled-color; transparent; transparent);\n}\n.btn-danger-text() {\n .button-variant-other(@error-color, transparent, transparent);\n box-shadow: none;\n\n &:hover,\n &:focus {\n & when (@theme = dark) {\n .button-color(~`colorPalette('@{error-color}', 7) `; @btn-text-hover-bg; transparent);\n }\n & when (not (@theme = dark) and not (@theme = variable)) {\n .button-color(~`colorPalette('@{error-color}', 5) `; @btn-text-hover-bg; transparent);\n }\n & when (@theme = variable) {\n .button-color(@error-color-hover; @btn-text-hover-bg; transparent);\n }\n }\n\n &:active {\n & when (@theme = dark) {\n .button-color(~`colorPalette('@{error-color}', 5) `; fadein(@btn-text-hover-bg, 1%); transparent);\n }\n & when (not (@theme = dark) and not (@theme = variable)) {\n .button-color(~`colorPalette('@{error-color}', 7) `; fadein(@btn-text-hover-bg, 1%); transparent);\n }\n & when (@theme = variable) {\n .button-color(@error-color-active; fadein(@btn-text-hover-bg, 1%); transparent);\n }\n }\n .button-disabled(@disabled-color; transparent; transparent);\n}\n// round button\n.btn-round(@btnClassName: btn) {\n .button-size(@btn-circle-size; (@btn-circle-size / 2); @font-size-base; @btn-circle-size);\n &.@{btnClassName}-lg {\n .button-size(\n @btn-circle-size-lg; (@btn-circle-size-lg / 2); @btn-font-size-lg; @btn-circle-size-lg\n );\n }\n &.@{btnClassName}-sm {\n .button-size(\n @btn-circle-size-sm; (@btn-circle-size-sm / 2); @font-size-base; @btn-circle-size-sm\n );\n }\n}\n// square button: the content only contains icon\n.btn-square(@btnClassName: btn) {\n .square(@btn-square-size);\n .button-size(@btn-square-size; 0; @btn-square-only-icon-size; @btn-border-radius-base);\n\n & > * {\n font-size: @btn-square-only-icon-size;\n }\n &.@{btnClassName}-lg {\n .square(@btn-square-size-lg);\n .button-size(@btn-square-size-lg; 0; @btn-square-only-icon-size-lg; @btn-border-radius-base);\n\n & > * {\n font-size: @btn-square-only-icon-size-lg;\n }\n }\n &.@{btnClassName}-sm {\n .square(@btn-square-size-sm);\n .button-size(@btn-square-size-sm; 0; @btn-square-only-icon-size-sm; @btn-border-radius-base);\n\n & > * {\n font-size: @btn-square-only-icon-size-sm;\n }\n }\n}\n// circle button: the content only contains icon\n.btn-circle(@btnClassName: btn) {\n min-width: @btn-height-base;\n padding-right: 0;\n padding-left: 0;\n text-align: center;\n border-radius: 50%;\n &.@{btnClassName}-lg {\n min-width: @btn-height-lg;\n border-radius: 50%;\n }\n &.@{btnClassName}-sm {\n min-width: @btn-height-sm;\n border-radius: 50%;\n }\n}\n// Horizontal button groups style\n// --------------------------------------------------\n.btn-group(@btnClassName: btn) {\n .button-group-base(@btnClassName);\n .@{btnClassName} + .@{btnClassName},\n .@{btnClassName} + &,\n span + .@{btnClassName},\n .@{btnClassName} + span,\n > span + span,\n & + .@{btnClassName},\n & + & {\n margin-left: -1px;\n }\n .@{btnClassName}-primary + .@{btnClassName}:not(.@{btnClassName}-primary):not([disabled]) {\n border-left-color: transparent;\n }\n .@{btnClassName} {\n border-radius: 0;\n }\n > .@{btnClassName}:first-child,\n > span:first-child > .@{btnClassName} {\n margin-left: 0;\n }\n > .@{btnClassName}:only-child {\n border-radius: @btn-border-radius-base;\n }\n > span:only-child > .@{btnClassName} {\n border-radius: @btn-border-radius-base;\n }\n > .@{btnClassName}:first-child:not(:last-child),\n > span:first-child:not(:last-child) > .@{btnClassName} {\n border-top-left-radius: @btn-border-radius-base;\n border-bottom-left-radius: @btn-border-radius-base;\n }\n > .@{btnClassName}:last-child:not(:first-child),\n > span:last-child:not(:first-child) > .@{btnClassName} {\n border-top-right-radius: @btn-border-radius-base;\n border-bottom-right-radius: @btn-border-radius-base;\n }\n\n &-sm {\n > .@{btnClassName}:only-child {\n border-radius: @btn-border-radius-sm;\n }\n > span:only-child > .@{btnClassName} {\n border-radius: @btn-border-radius-sm;\n }\n > .@{btnClassName}:first-child:not(:last-child),\n > span:first-child:not(:last-child) > .@{btnClassName} {\n border-top-left-radius: @btn-border-radius-sm;\n border-bottom-left-radius: @btn-border-radius-sm;\n }\n > .@{btnClassName}:last-child:not(:first-child),\n > span:last-child:not(:first-child) > .@{btnClassName} {\n border-top-right-radius: @btn-border-radius-sm;\n border-bottom-right-radius: @btn-border-radius-sm;\n }\n }\n\n & > & {\n float: left;\n }\n & > &:not(:first-child):not(:last-child) > .@{btnClassName} {\n border-radius: 0;\n }\n\n & > &:first-child:not(:last-child) {\n > .@{btnClassName}:last-child {\n padding-right: 8px;\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n }\n & > &:last-child:not(:first-child) > .@{btnClassName}:first-child {\n padding-left: 8px;\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n}\n",".@{btn-prefix-cls} {\n &-rtl {\n direction: rtl;\n }\n\n &-primary {\n .@{btn-prefix-cls}-group &:last-child:not(:first-child),\n .@{btn-prefix-cls}-group & + & {\n .@{btn-prefix-cls}-group-rtl& {\n border-right-color: @btn-group-border;\n border-left-color: @btn-default-border;\n }\n\n &[disabled] {\n .@{btn-prefix-cls}-group-rtl& {\n border-right-color: @btn-default-border;\n border-left-color: @btn-group-border;\n }\n }\n }\n }\n\n & > &-loading-icon {\n .@{iconfont-css-prefix} {\n .@{btn-prefix-cls}-rtl& {\n padding-right: 0;\n padding-left: @margin-xs;\n }\n }\n }\n\n > .@{iconfont-css-prefix} + span,\n > span + .@{iconfont-css-prefix} {\n .@{btn-prefix-cls}-rtl& {\n margin-right: 8px;\n margin-left: 0;\n }\n }\n}\n\n// mixin\n.btn-group(@btnClassName: btn) {\n .@{btnClassName} + .@{btnClassName},\n .@{btnClassName} + &,\n span + .@{btnClassName},\n .@{btnClassName} + span,\n > span + span,\n & + .@{btnClassName},\n & + & {\n .@{btnClassName}-rtl&,\n .@{btnClassName}-group-rtl& {\n margin-right: -1px;\n margin-left: auto;\n }\n }\n\n &.@{btnClassName}-group-rtl {\n direction: rtl;\n }\n\n > .@{btnClassName}:first-child:not(:last-child),\n > span:first-child:not(:last-child) > .@{btnClassName} {\n .@{btnClassName}-group-rtl& {\n border-radius: 0 @btn-border-radius-base @btn-border-radius-base 0;\n }\n }\n\n > .@{btnClassName}:last-child:not(:first-child),\n > span:last-child:not(:first-child) > .@{btnClassName} {\n .@{btnClassName}-group-rtl& {\n border-radius: @btn-border-radius-base 0 0 @btn-border-radius-base;\n }\n }\n\n &-sm {\n > .@{btnClassName}:first-child:not(:last-child),\n > span:first-child:not(:last-child) > .@{btnClassName} {\n .@{btnClassName}-group-rtl& {\n border-radius: 0 @btn-border-radius-sm @btn-border-radius-sm 0;\n }\n }\n\n > .@{btnClassName}:last-child:not(:first-child),\n > span:last-child:not(:first-child) > .@{btnClassName} {\n .@{btnClassName}-group-rtl& {\n border-radius: @btn-border-radius-sm 0 0 @btn-border-radius-sm;\n }\n }\n }\n}\n",".compact-item-border-radius(@prefix-cls, @bordered-item-cls: null) {\n & when (@bordered-item-cls = null) {\n // border-radius\n &-item:not(&-first-item):not(&-last-item).@{prefix-cls} {\n border-radius: 0;\n }\n\n &-item.@{prefix-cls}&-first-item:not(&-item-rtl) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n\n &-item.@{prefix-cls}&-last-item:not(&-item-rtl) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n\n // ----------rtl for first item----------\n &-item.@{prefix-cls}&-item-rtl&-first-item {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n\n // ----------rtl for last item----------\n &-item.@{prefix-cls}&-item-rtl&-last-item {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n }\n\n & when (not (@bordered-item-cls = null)) {\n // border-radius\n &-item:not(&-first-item):not(&-last-item).@{prefix-cls} > .@{bordered-item-cls} {\n border-radius: 0;\n }\n\n &-item&-first-item.@{prefix-cls}:not(&-item-rtl) > .@{bordered-item-cls} {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n\n &-item&-last-item.@{prefix-cls}:not(&-item-rtl) > .@{bordered-item-cls} {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n\n // ----------rtl for first item----------\n &-item.@{prefix-cls}&-first-item&-item-rtl > .@{bordered-item-cls} {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n\n // ----------rtl for last item----------\n &-item.@{prefix-cls}&-last-item&-item-rtl > .@{bordered-item-cls} {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n }\n}\n\n.compact-item-border(@prefix-cls, @bordered-item-cls: null, @special-open-cls) {\n & when (@bordered-item-cls = null) {\n // border collapse\n &-item:not(&-last-item):not(&-item-rtl) {\n margin-right: -@border-width-base;\n }\n\n // rtl border collapse\n &-item:not(&-last-item)&-item-rtl {\n margin-left: -@border-width-base;\n }\n\n &-item {\n &:hover,\n &:focus,\n &:active {\n z-index: 2;\n }\n\n // Select has an extra focus className\n & when (not (@special-item-cls = null)) {\n &.@{special-item-cls} {\n z-index: 2;\n }\n }\n\n &[disabled] {\n z-index: 0;\n }\n }\n }\n\n & when (not (@bordered-item-cls = null)) {\n // border collapse\n &-item:not(&-last-item) {\n margin-right: -@border-width-base;\n\n &.@{prefix-cls}-compact-item-rtl {\n margin-right: 0;\n margin-left: -@border-width-base;\n }\n }\n\n &-item {\n &:hover,\n &:focus,\n &:active {\n > * {\n z-index: 2;\n }\n }\n\n // Select has an special focus-item\n & when (not (@special-item-cls = null)) {\n &.@{special-item-cls} > * {\n z-index: 2;\n }\n }\n\n &[disabled] > * {\n z-index: 0;\n }\n }\n }\n}\n\n.compact-item(@prefix-cls, @bordered-item-cls: null, @special-item-cls: null) {\n &-compact {\n .compact-item-border(@prefix-cls, @bordered-item-cls, @special-item-cls);\n\n .compact-item-border-radius(@prefix-cls, @bordered-item-cls);\n }\n}\n","@import '../../style/mixins/index';\n\n@btn-prefix-cls: ~'@{ant-prefix}-btn';\n\n// Button in Space.Compact\n.@{btn-prefix-cls} {\n .compact-item(@btn-prefix-cls);\n\n // make `btn-icon-only` not too narrow\n &-icon-only&-compact-item {\n flex: none;\n }\n\n // Special styles for Primary Button\n &-compact-item.@{btn-prefix-cls}-primary {\n &:not([disabled]) + &:not([disabled]) {\n position: relative;\n\n &::after {\n position: absolute;\n top: -@border-width-base;\n left: -@border-width-base;\n display: inline-block;\n width: @border-width-base;\n height: calc(100% + @border-width-base * 2);\n background-color: @btn-group-border;\n content: ' ';\n }\n }\n }\n\n // ----------RTL----------\n &-compact-item-rtl {\n &.@{btn-prefix-cls}-compact-first-item&:not(.@{btn-prefix-cls}-compact-last-item) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n\n &.@{btn-prefix-cls}-compact-last-item&:not(.@{btn-prefix-cls}-compact-first-item) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n\n &.@{btn-prefix-cls}-sm {\n &.@{btn-prefix-cls}-compact-first-item&:not(.@{btn-prefix-cls}-compact-last-item) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n\n &.@{btn-prefix-cls}-compact-last-item&:not(.@{btn-prefix-cls}-compact-first-item) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n }\n\n // ----------RTL Special styles for Primary Button----------\n &.@{btn-prefix-cls}-primary {\n &:not([disabled]) + &:not([disabled]) {\n &::after {\n right: -@border-width-base;\n }\n }\n }\n }\n\n // Button in Space.Compact when direction=vertical\n .compact-item-vertical(@btn-prefix-cls);\n\n // Special styles for Primary Button\n &-compact-vertical-item {\n &.@{btn-prefix-cls}-primary {\n &:not([disabled]) + &:not([disabled]) {\n position: relative;\n\n &::after {\n position: absolute;\n top: -@border-width-base;\n left: -@border-width-base;\n display: inline-block;\n width: calc(100% + @border-width-base * 2);\n height: @border-width-base;\n background-color: @btn-group-border;\n content: ' ';\n }\n }\n }\n }\n}\n",".compact-item-vertical-border-radius(@prefix-cls) {\n &-item:not(&-first-item):not(&-last-item) {\n border-radius: 0;\n }\n\n &-item&-first-item {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n }\n\n &-item&-last-item {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n }\n}\n\n.compact-item-vertical-border(@prefix-cls) {\n // border collapse\n &-item:not(&-last-item) {\n margin-bottom: -@border-width-base;\n }\n\n &-item {\n &:hover,\n &:focus,\n &:active {\n z-index: 2;\n }\n\n &[disabled] {\n z-index: 0;\n }\n }\n}\n\n.compact-item-vertical(@prefix-cls) {\n &-compact-vertical {\n .compact-item-vertical-border(@prefix-cls);\n .compact-item-vertical-border-radius(@prefix-cls);\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@calendar-prefix-cls: ~'@{ant-prefix}-picker-calendar';\n@calendar-picker-prefix-cls: ~'@{ant-prefix}-picker';\n\n.@{calendar-prefix-cls} {\n .reset-component();\n background: @calendar-full-bg;\n\n // ========================= Header =========================\n &-header {\n display: flex;\n justify-content: flex-end;\n padding: @padding-sm 0;\n\n .@{calendar-prefix-cls}-year-select {\n min-width: 80px;\n }\n\n .@{calendar-prefix-cls}-month-select {\n min-width: 70px;\n margin-left: @padding-xs;\n }\n\n .@{calendar-prefix-cls}-mode-switch {\n margin-left: @padding-xs;\n }\n }\n\n .@{calendar-picker-prefix-cls}-panel {\n background: @calendar-full-panel-bg;\n border: 0;\n border-top: @border-width-base @border-style-base @border-color-split;\n border-radius: 0;\n\n .@{calendar-picker-prefix-cls}-month-panel,\n .@{calendar-picker-prefix-cls}-date-panel {\n width: auto;\n }\n\n .@{calendar-picker-prefix-cls}-body {\n padding: @padding-xs 0;\n }\n\n .@{calendar-picker-prefix-cls}-content {\n width: 100%;\n }\n }\n\n // ========================== Mini ==========================\n &-mini {\n border-radius: @border-radius-base;\n\n .@{calendar-picker-prefix-cls}-calendar-header {\n padding-right: @padding-xs;\n padding-left: @padding-xs;\n }\n\n .@{calendar-picker-prefix-cls}-panel {\n border-radius: 0 0 @border-radius-base @border-radius-base;\n }\n\n .@{calendar-picker-prefix-cls}-content {\n height: 256px;\n\n th {\n height: auto;\n padding: 0;\n line-height: 18px;\n }\n }\n\n .@{calendar-picker-prefix-cls}-cell::before {\n pointer-events: none;\n }\n }\n\n // ========================== Full ==========================\n &-full {\n .@{calendar-picker-prefix-cls}-panel {\n display: block;\n width: 100%;\n text-align: right;\n background: @calendar-full-bg;\n border: 0;\n\n .@{calendar-picker-prefix-cls}-body {\n th,\n td {\n padding: 0;\n }\n\n th {\n height: auto;\n padding: 0 12px 5px 0;\n line-height: 18px;\n }\n }\n\n // Cell\n .@{calendar-picker-prefix-cls}-cell {\n &::before {\n display: none;\n }\n\n &:hover {\n .@{calendar-prefix-cls}-date {\n background: @item-hover-bg;\n }\n }\n\n .@{calendar-prefix-cls}-date-today::before {\n display: none;\n }\n\n &-selected,\n &-selected:hover {\n .@{calendar-prefix-cls}-date,\n .@{calendar-prefix-cls}-date-today {\n background: @calendar-item-active-bg;\n\n .@{calendar-prefix-cls}-date-value {\n color: @primary-color;\n }\n }\n }\n }\n\n // Cell date\n .@{calendar-prefix-cls}-date {\n display: block;\n width: auto;\n height: auto;\n margin: 0 (@padding-xs / 2);\n padding: (@padding-xs / 2) @padding-xs 0;\n border: 0;\n border-top: 2px solid @border-color-split;\n border-radius: 0;\n transition: background 0.3s;\n\n &-value {\n line-height: 24px;\n transition: color 0.3s;\n }\n\n &-content {\n position: static;\n width: auto;\n height: 86px;\n overflow-y: auto;\n color: @text-color;\n line-height: @line-height-base;\n text-align: left;\n }\n\n &-today {\n border-color: @primary-color;\n\n .@{calendar-prefix-cls}-date-value {\n color: @text-color;\n }\n }\n }\n }\n }\n}\n\n@media only screen and (max-width: @screen-xs) {\n .@{calendar-prefix-cls} {\n &-header {\n display: block;\n\n .@{calendar-prefix-cls}-year-select {\n width: 50%;\n }\n\n .@{calendar-prefix-cls}-month-select {\n width: ~'calc(50% - @{padding-xs})';\n }\n\n .@{calendar-prefix-cls}-mode-switch {\n width: 100%;\n margin-top: @padding-xs;\n margin-left: 0;\n\n > label {\n width: 50%;\n text-align: center;\n }\n }\n }\n }\n}\n\n@import './rtl';\n",".@{calendar-prefix-cls} {\n &-rtl {\n direction: rtl;\n }\n\n &-header {\n .@{calendar-prefix-cls}-month-select {\n .@{calendar-prefix-cls}-rtl & {\n margin-right: @padding-xs;\n margin-left: 0;\n }\n }\n\n .@{calendar-prefix-cls}-mode-switch {\n .@{calendar-prefix-cls}-rtl & {\n margin-right: @padding-xs;\n margin-left: 0;\n }\n }\n }\n\n // ========================== Full ==========================\n &-full {\n .@{calendar-picker-prefix-cls}-panel {\n .@{calendar-prefix-cls}-rtl& {\n text-align: left;\n }\n\n .@{calendar-picker-prefix-cls}-body {\n th {\n .@{calendar-prefix-cls}-rtl& {\n padding: 0 0 5px 12px;\n }\n }\n }\n\n .@{calendar-prefix-cls}-date {\n &-content {\n .@{calendar-prefix-cls}-rtl& {\n text-align: right;\n }\n }\n }\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@card-prefix-cls: ~'@{ant-prefix}-card';\n@card-hoverable-hover-border: transparent;\n@card-action-icon-size: 16px;\n\n@gradient-min: fade(@card-skeleton-bg, 20%);\n@gradient-max: fade(@card-skeleton-bg, 40%);\n\n.@{card-prefix-cls} {\n .reset-component();\n\n position: relative;\n background: @card-background;\n border-radius: @card-radius;\n\n &-rtl {\n direction: rtl;\n }\n\n &-hoverable {\n cursor: pointer;\n transition: box-shadow 0.3s, border-color 0.3s;\n\n &:hover {\n border-color: @card-hoverable-hover-border;\n box-shadow: @card-shadow;\n }\n }\n\n &-bordered {\n border: @border-width-base @border-style-base @border-color-split;\n }\n\n &-head {\n min-height: @card-head-height;\n margin-bottom: -1px; // Fix card grid overflow bug: https://gw.alipayobjects.com/zos/rmsportal/XonYxBikwpgbqIQBeuhk.png\n padding: 0 @card-padding-base;\n color: @card-head-color;\n font-weight: 500;\n font-size: @card-head-font-size;\n background: @card-head-background;\n border-bottom: @border-width-base @border-style-base @border-color-split;\n border-radius: @card-radius @card-radius 0 0;\n .clearfix();\n\n &-wrapper {\n display: flex;\n align-items: center;\n }\n\n &-title {\n display: inline-block;\n flex: 1;\n padding: @card-head-padding 0;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n\n > .@{ant-prefix}-typography,\n > .@{ant-prefix}-typography-edit-content {\n left: 0;\n margin-top: 0;\n margin-bottom: 0;\n }\n }\n\n .@{ant-prefix}-tabs-top {\n clear: both;\n margin-bottom: @card-head-tabs-margin-bottom;\n color: @text-color;\n font-weight: normal;\n font-size: @font-size-base;\n\n &-bar {\n border-bottom: @border-width-base @border-style-base @border-color-split;\n }\n }\n }\n\n &-extra {\n // https://stackoverflow.com/a/22429853/3040605\n margin-left: auto;\n padding: @card-head-padding 0;\n color: @card-head-extra-color;\n font-weight: normal;\n font-size: @font-size-base;\n\n .@{card-prefix-cls}-rtl & {\n margin-right: auto;\n margin-left: 0;\n }\n }\n\n &-body {\n padding: @card-padding-base;\n .clearfix();\n }\n\n &-contain-grid &-body {\n display: flex;\n flex-wrap: wrap;\n }\n\n &-contain-grid:not(&-loading) &-body {\n margin: -1px 0 0 -1px;\n padding: 0;\n }\n\n &-grid {\n width: 33.33%;\n padding: @card-padding-base;\n border: 0;\n border-radius: 0;\n box-shadow: 1px 0 0 0 @border-color-split, 0 1px 0 0 @border-color-split,\n 1px 1px 0 0 @border-color-split, 1px 0 0 0 @border-color-split inset,\n 0 1px 0 0 @border-color-split inset;\n transition: all 0.3s;\n\n &-hoverable {\n &:hover {\n position: relative;\n z-index: 1;\n box-shadow: @card-shadow;\n }\n }\n }\n\n &-contain-tabs > &-head &-head-title {\n min-height: @card-head-height - @card-head-padding;\n padding-bottom: 0;\n }\n\n &-contain-tabs > &-head &-extra {\n padding-bottom: 0;\n }\n\n &-bordered &-cover {\n margin-top: -1px;\n margin-right: -1px;\n margin-left: -1px;\n }\n\n &-cover {\n > * {\n display: block;\n width: 100%;\n }\n\n img {\n border-radius: @card-radius @card-radius 0 0;\n }\n }\n\n &-actions {\n display: flex;\n margin: 0;\n padding: 0;\n list-style: none;\n background: @card-actions-background;\n border-top: @border-width-base @border-style-base @border-color-split;\n .clearfix();\n\n & > li {\n margin: @card-actions-li-margin;\n color: @text-color-secondary;\n text-align: center;\n\n > span {\n position: relative;\n display: block;\n min-width: 32px;\n font-size: @font-size-base;\n line-height: @line-height-base;\n cursor: pointer;\n\n &:hover {\n color: @primary-color;\n transition: color 0.3s;\n }\n\n a:not(.@{ant-prefix}-btn),\n > .@{iconfont-css-prefix} {\n display: inline-block;\n width: 100%;\n color: @text-color-secondary;\n line-height: 22px;\n transition: color 0.3s;\n\n &:hover {\n color: @primary-color;\n }\n }\n\n > .@{iconfont-css-prefix} {\n font-size: @card-action-icon-size;\n line-height: 22px;\n }\n }\n\n &:not(:last-child) {\n border-right: @border-width-base @border-style-base @border-color-split;\n\n .@{card-prefix-cls}-rtl & {\n border-right: none;\n border-left: @border-width-base @border-style-base @border-color-split;\n }\n }\n }\n }\n\n &-type-inner &-head {\n padding: 0 @card-padding-base;\n background: @background-color-light;\n\n &-title {\n padding: @card-inner-head-padding 0;\n font-size: @font-size-base;\n }\n }\n\n &-type-inner &-body {\n padding: 16px @card-padding-base;\n }\n\n &-type-inner &-extra {\n padding: @card-inner-head-padding + 1.5px 0;\n }\n\n &-meta {\n display: flex;\n margin: -4px 0;\n .clearfix();\n\n &-avatar {\n padding-right: 16px;\n\n .@{card-prefix-cls}-rtl & {\n padding-right: 0;\n padding-left: 16px;\n }\n }\n\n &-detail {\n overflow: hidden;\n\n > div:not(:last-child) {\n margin-bottom: @margin-xs;\n }\n }\n\n &-title {\n overflow: hidden;\n color: @card-head-color;\n font-weight: 500;\n font-size: @font-size-lg;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n\n &-description {\n color: @text-color-secondary;\n }\n }\n\n &-loading {\n overflow: hidden;\n }\n\n &-loading &-body {\n user-select: none;\n }\n}\n\n@import './size';\n",".@{card-prefix-cls}-small {\n > .@{card-prefix-cls}-head {\n min-height: @card-head-height-sm;\n padding: 0 @card-padding-base-sm;\n font-size: @card-head-font-size-sm;\n\n > .@{card-prefix-cls}-head-wrapper {\n > .@{card-prefix-cls}-head-title {\n padding: @card-head-padding-sm 0;\n }\n > .@{card-prefix-cls}-extra {\n padding: @card-head-padding-sm 0;\n font-size: @card-head-font-size-sm;\n }\n }\n }\n > .@{card-prefix-cls}-body {\n padding: @card-padding-base-sm;\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@carousel-prefix-cls: ~'@{ant-prefix}-carousel';\n@carousel-dot-margin: 4px;\n\n.@{carousel-prefix-cls} {\n .reset-component();\n\n .slick-slider {\n position: relative;\n display: block;\n box-sizing: border-box;\n touch-action: pan-y;\n -webkit-touch-callout: none;\n -webkit-tap-highlight-color: transparent;\n }\n\n .slick-list {\n position: relative;\n display: block;\n margin: 0;\n padding: 0;\n overflow: hidden;\n\n &:focus {\n outline: none;\n }\n\n &.dragging {\n cursor: pointer;\n }\n\n .slick-slide {\n pointer-events: none;\n\n // https://github.com/ant-design/ant-design/issues/23294\n input.@{ant-prefix}-radio-input,\n input.@{ant-prefix}-checkbox-input {\n visibility: hidden;\n }\n\n &.slick-active {\n pointer-events: auto;\n\n input.@{ant-prefix}-radio-input,\n input.@{ant-prefix}-checkbox-input {\n visibility: visible;\n }\n }\n\n // fix Carousel content height not match parent node\n // when children is empty node\n // https://github.com/ant-design/ant-design/issues/25878\n > div > div {\n vertical-align: bottom;\n }\n }\n }\n\n .slick-slider .slick-track,\n .slick-slider .slick-list {\n transform: translate3d(0, 0, 0);\n touch-action: pan-y;\n }\n\n .slick-track {\n position: relative;\n top: 0;\n left: 0;\n display: block;\n\n &::before,\n &::after {\n display: table;\n content: '';\n }\n\n &::after {\n clear: both;\n }\n\n .slick-loading & {\n visibility: hidden;\n }\n }\n\n .slick-slide {\n display: none;\n float: left;\n height: 100%;\n min-height: 1px;\n\n img {\n display: block;\n }\n\n &.slick-loading img {\n display: none;\n }\n\n &.dragging img {\n pointer-events: none;\n }\n }\n\n .slick-initialized .slick-slide {\n display: block;\n }\n\n .slick-loading .slick-slide {\n visibility: hidden;\n }\n\n .slick-vertical .slick-slide {\n display: block;\n height: auto;\n }\n\n .slick-arrow.slick-hidden {\n display: none;\n }\n\n // Arrows\n .slick-prev,\n .slick-next {\n position: absolute;\n top: 50%;\n display: block;\n width: 20px;\n height: 20px;\n margin-top: -10px;\n padding: 0;\n color: transparent;\n font-size: 0;\n line-height: 0;\n background: transparent;\n border: 0;\n outline: none;\n cursor: pointer;\n\n &:hover,\n &:focus {\n color: transparent;\n background: transparent;\n outline: none;\n\n &::before {\n opacity: 1;\n }\n }\n\n &.slick-disabled::before {\n opacity: 0.25;\n }\n }\n\n .slick-prev {\n left: -25px;\n\n &::before {\n content: '←';\n }\n }\n\n .slick-next {\n right: -25px;\n\n &::before {\n content: '→';\n }\n }\n\n // Dots\n .slick-dots {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 15;\n display: flex !important;\n justify-content: center;\n margin-right: 15%;\n margin-bottom: 0;\n margin-left: 15%;\n padding-left: 0;\n list-style: none;\n\n &-bottom {\n bottom: 12px;\n }\n\n &-top {\n top: 12px;\n bottom: auto;\n }\n\n li {\n position: relative;\n display: inline-block;\n flex: 0 1 auto;\n box-sizing: content-box;\n width: @carousel-dot-width;\n height: @carousel-dot-height;\n margin: 0 @carousel-dot-margin;\n padding: 0;\n text-align: center;\n text-indent: -999px;\n vertical-align: top;\n transition: all 0.5s;\n\n button {\n position: relative;\n display: block;\n width: 100%;\n height: @carousel-dot-height;\n padding: 0;\n color: transparent;\n font-size: 0;\n background: @component-background;\n border: 0;\n border-radius: 1px;\n outline: none;\n cursor: pointer;\n opacity: 0.3;\n transition: all 0.5s;\n\n &:hover,\n &:focus {\n opacity: 0.75;\n }\n\n &::after {\n position: absolute;\n top: -@carousel-dot-margin;\n right: -@carousel-dot-margin;\n bottom: -@carousel-dot-margin;\n left: -@carousel-dot-margin;\n content: '';\n }\n }\n\n &.slick-active {\n width: @carousel-dot-active-width;\n\n & button {\n background: @component-background;\n opacity: 1;\n }\n\n &:hover,\n &:focus {\n opacity: 1;\n }\n }\n }\n }\n}\n\n.@{ant-prefix}-carousel-vertical {\n .slick-dots {\n top: 50%;\n bottom: auto;\n flex-direction: column;\n width: @carousel-dot-height;\n height: auto;\n margin: 0;\n transform: translateY(-50%);\n\n &-left {\n right: auto;\n left: 12px;\n }\n\n &-right {\n right: 12px;\n left: auto;\n }\n\n li {\n width: @carousel-dot-height;\n height: @carousel-dot-width;\n margin: @carousel-dot-margin 0;\n vertical-align: baseline;\n\n button {\n width: @carousel-dot-height;\n height: @carousel-dot-width;\n }\n\n &.slick-active {\n width: @carousel-dot-height;\n height: @carousel-dot-active-width;\n\n button {\n width: @carousel-dot-height;\n height: @carousel-dot-active-width;\n }\n }\n }\n }\n}\n\n@import './rtl';\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@carousel-prefix-cls: ~'@{ant-prefix}-carousel';\n\n.@{carousel-prefix-cls} {\n &-rtl {\n direction: rtl;\n }\n\n .slick-track {\n .@{carousel-prefix-cls}-rtl & {\n right: 0;\n left: auto;\n }\n }\n\n .slick-prev {\n .@{carousel-prefix-cls}-rtl & {\n right: -25px;\n left: auto;\n\n &::before {\n content: '→';\n }\n }\n }\n\n .slick-next {\n .@{carousel-prefix-cls}-rtl & {\n right: auto;\n left: -25px;\n\n &::before {\n content: '←';\n }\n }\n }\n\n // Dots\n .slick-dots {\n .@{carousel-prefix-cls}-rtl& {\n flex-direction: row-reverse;\n }\n }\n}\n\n.@{ant-prefix}-carousel-vertical {\n .slick-dots {\n .@{carousel-prefix-cls}-rtl& {\n flex-direction: column;\n }\n }\n}\n","@import '../../style/mixins/index';\n\n.antCheckboxFn(@checkbox-prefix-cls: ~'@{ant-prefix}-checkbox') {\n @checkbox-inner-prefix-cls: ~'@{checkbox-prefix-cls}-inner';\n // 一般状态\n .@{checkbox-prefix-cls} {\n .reset-component();\n\n position: relative;\n top: 0.2em;\n line-height: 1;\n white-space: nowrap;\n outline: none;\n cursor: pointer;\n\n .@{checkbox-prefix-cls}-wrapper:hover &-inner,\n &:hover &-inner,\n &-input:focus + &-inner {\n border-color: @checkbox-color;\n }\n\n &-checked::after {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 1px solid @checkbox-color;\n border-radius: @checkbox-border-radius;\n visibility: hidden;\n animation: antCheckboxEffect 0.36s ease-in-out;\n animation-fill-mode: backwards;\n content: '';\n }\n\n &:hover::after,\n .@{checkbox-prefix-cls}-wrapper:hover &::after {\n visibility: visible;\n }\n\n &-inner {\n position: relative;\n top: 0;\n left: 0;\n display: block;\n width: @checkbox-size;\n height: @checkbox-size;\n direction: ltr;\n background-color: @checkbox-check-bg;\n border: @checkbox-border-width @border-style-base @border-color-base;\n border-radius: @checkbox-border-radius;\n // Fix IE checked style\n // https://github.com/ant-design/ant-design/issues/12597\n border-collapse: separate;\n transition: all 0.3s;\n\n &::after {\n @check-width: (@checkbox-size / 14) * 5px;\n @check-height: (@checkbox-size / 14) * 8px;\n\n position: absolute;\n top: 50%;\n // https://github.com/ant-design/ant-design/pull/19452\n // https://github.com/ant-design/ant-design/pull/31726\n left: 21.5%;\n display: table;\n width: @check-width;\n height: @check-height;\n border: 2px solid @checkbox-check-color;\n border-top: 0;\n border-left: 0;\n transform: rotate(45deg) scale(0) translate(-50%, -50%);\n opacity: 0;\n transition: all 0.1s @ease-in-back, opacity 0.1s;\n content: ' ';\n }\n }\n\n &-input {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n width: 100%;\n height: 100%;\n cursor: pointer;\n opacity: 0;\n }\n }\n\n // 选中状态\n .@{checkbox-prefix-cls}-checked .@{checkbox-inner-prefix-cls}::after {\n position: absolute;\n display: table;\n border: 2px solid @checkbox-check-color;\n border-top: 0;\n border-left: 0;\n transform: rotate(45deg) scale(1) translate(-50%, -50%);\n opacity: 1;\n transition: all 0.2s @ease-out-back 0.1s;\n content: ' ';\n }\n\n .@{checkbox-prefix-cls}-checked {\n .@{checkbox-inner-prefix-cls} {\n background-color: @checkbox-color;\n border-color: @checkbox-color;\n }\n }\n\n .@{checkbox-prefix-cls}-disabled {\n cursor: not-allowed;\n\n &.@{checkbox-prefix-cls}-checked {\n .@{checkbox-inner-prefix-cls}::after {\n border-color: @disabled-color;\n animation-name: none;\n }\n }\n\n .@{checkbox-prefix-cls}-input {\n cursor: not-allowed;\n pointer-events: none;\n }\n\n .@{checkbox-inner-prefix-cls} {\n background-color: @input-disabled-bg;\n border-color: @border-color-base !important;\n\n &::after {\n border-color: @input-disabled-bg;\n border-collapse: separate;\n animation-name: none;\n }\n }\n\n & + span {\n color: @disabled-color;\n cursor: not-allowed;\n }\n\n // Not show highlight border of checkbox when disabled\n &:hover::after,\n .@{checkbox-prefix-cls}-wrapper:hover &::after {\n visibility: hidden;\n }\n }\n\n .@{checkbox-prefix-cls}-wrapper {\n .reset-component();\n display: inline-flex;\n align-items: baseline;\n line-height: unset;\n cursor: pointer;\n\n &::after {\n display: inline-block;\n width: 0;\n overflow: hidden;\n content: '\\a0';\n }\n\n &.@{checkbox-prefix-cls}-wrapper-disabled {\n cursor: not-allowed;\n }\n\n & + & {\n margin-left: 8px;\n }\n\n &&-in-form-item {\n input[type='checkbox'] {\n width: 14px;\n height: 14px;\n }\n }\n }\n\n .@{checkbox-prefix-cls} + span {\n padding-right: 8px;\n padding-left: 8px;\n }\n\n .@{checkbox-prefix-cls}-group {\n .reset-component();\n display: inline-block;\n\n &-item {\n margin-right: @checkbox-group-item-margin-right;\n\n &:last-child {\n margin-right: 0;\n }\n }\n\n &-item + &-item {\n margin-left: 0;\n }\n }\n\n // 半选状态\n .@{checkbox-prefix-cls}-indeterminate {\n .@{checkbox-inner-prefix-cls} {\n background-color: @checkbox-check-bg;\n border-color: @border-color-base;\n }\n .@{checkbox-inner-prefix-cls}::after {\n @indeterminate-width: @checkbox-size - 8px;\n @indeterminate-height: @checkbox-size - 8px;\n\n top: 50%;\n left: 50%;\n width: @indeterminate-width;\n height: @indeterminate-height;\n background-color: @checkbox-color;\n border: 0;\n transform: translate(-50%, -50%) scale(1);\n opacity: 1;\n content: ' ';\n }\n\n &.@{checkbox-prefix-cls}-disabled .@{checkbox-inner-prefix-cls}::after {\n background-color: @disabled-color;\n border-color: @disabled-color;\n }\n }\n}\n\n@keyframes antCheckboxEffect {\n 0% {\n transform: scale(1);\n opacity: 0.5;\n }\n\n 100% {\n transform: scale(1.6);\n opacity: 0;\n }\n}\n","@import '../../style/mixins/index';\n\n.antCheckboxFn(@checkbox-prefix-cls: ~'@{ant-prefix}-checkbox') {\n .@{checkbox-prefix-cls}-rtl {\n direction: rtl;\n }\n\n .@{checkbox-prefix-cls}-group {\n &-item {\n .@{checkbox-prefix-cls}-group-rtl & {\n margin-right: 0;\n margin-left: @checkbox-group-item-margin-right;\n }\n\n &:last-child {\n .@{checkbox-prefix-cls}-group-rtl & {\n margin-left: 0 !important;\n }\n }\n }\n\n &-item + &-item {\n .@{checkbox-prefix-cls}-group-rtl & {\n margin-left: @checkbox-group-item-margin-right;\n }\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n@import '../../input/style/mixin';\n@import '../../checkbox/style/mixin';\n\n@cascader-prefix-cls: ~'@{ant-prefix}-cascader';\n\n.antCheckboxFn(@checkbox-prefix-cls: ~'@{cascader-prefix-cls}-checkbox');\n\n.@{cascader-prefix-cls} {\n width: 184px;\n\n &-checkbox {\n top: 0;\n margin-right: @padding-xs;\n }\n\n &-menus {\n display: flex;\n flex-wrap: nowrap;\n align-items: flex-start;\n\n &.@{cascader-prefix-cls}-menu-empty {\n .@{cascader-prefix-cls}-menu {\n width: 100%;\n height: auto;\n }\n }\n }\n\n &-menu {\n flex-grow: 1;\n min-width: 111px;\n height: 180px;\n margin: 0;\n margin: -@dropdown-edge-child-vertical-padding 0;\n padding: @cascader-dropdown-edge-child-vertical-padding 0;\n overflow: auto;\n vertical-align: top;\n list-style: none;\n border-right: @border-width-base @border-style-base @cascader-menu-border-color-split;\n -ms-overflow-style: -ms-autohiding-scrollbar; // https://github.com/ant-design/ant-design/issues/11857\n\n &-item {\n display: flex;\n flex-wrap: nowrap;\n align-items: center;\n padding: @cascader-dropdown-vertical-padding @control-padding-horizontal;\n overflow: hidden;\n line-height: @cascader-dropdown-line-height;\n white-space: nowrap;\n text-overflow: ellipsis;\n cursor: pointer;\n transition: all 0.3s;\n\n &:hover {\n background: @item-hover-bg;\n }\n\n &-disabled {\n color: @disabled-color;\n cursor: not-allowed;\n\n &:hover {\n background: transparent;\n }\n }\n\n .@{cascader-prefix-cls}-menu-empty & {\n color: @disabled-color;\n cursor: default;\n pointer-events: none;\n }\n\n &-active:not(&-disabled) {\n &,\n &:hover {\n font-weight: @select-item-selected-font-weight;\n background-color: @cascader-item-selected-bg;\n }\n }\n\n &-content {\n flex: auto;\n }\n\n &-expand &-expand-icon,\n &-loading-icon {\n margin-left: @padding-xss;\n color: @text-color-secondary;\n font-size: 10px;\n\n .@{cascader-prefix-cls}-menu-item-disabled& {\n color: @disabled-color;\n }\n }\n\n &-keyword {\n color: @highlight-color;\n }\n }\n }\n\n // ===================== Compact Item Styles =====================\n .compact-item(@cascader-prefix-cls);\n}\n\n@import './rtl';\n","// We can not import reference of `./index` directly since it will make dead loop in less\n@import (reference) '../../style/themes/index';\n@cascader-prefix-cls: ~'@{ant-prefix}-cascader';\n\n.@{cascader-prefix-cls}-rtl {\n .@{cascader-prefix-cls}-menu-item {\n &-expand-icon,\n &-loading-icon {\n margin-right: @padding-xss;\n margin-left: 0;\n }\n }\n\n .@{cascader-prefix-cls}-checkbox {\n top: 0;\n margin-right: 0;\n margin-left: @padding-xs;\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@collapse-prefix-cls: ~'@{ant-prefix}-collapse';\n\n.@{collapse-prefix-cls} {\n .reset-component();\n\n background-color: @collapse-header-bg;\n border: @border-width-base @border-style-base @border-color-base;\n border-bottom: 0;\n border-radius: @collapse-panel-border-radius;\n\n & > &-item {\n border-bottom: @border-width-base @border-style-base @border-color-base;\n\n &:last-child {\n &,\n & > .@{collapse-prefix-cls}-header {\n border-radius: 0 0 @collapse-panel-border-radius @collapse-panel-border-radius;\n }\n }\n\n > .@{collapse-prefix-cls}-header {\n position: relative; // Compatible with old version of antd, should remove in next version\n display: flex;\n flex-wrap: nowrap;\n align-items: flex-start;\n padding: @collapse-header-padding;\n color: @heading-color;\n line-height: @line-height-base;\n cursor: pointer;\n transition: all 0.3s, visibility 0s;\n\n .@{collapse-prefix-cls}-arrow {\n display: inline-block;\n margin-right: @margin-sm;\n font-size: @font-size-sm;\n vertical-align: -1px;\n\n & svg {\n transition: transform 0.24s;\n }\n }\n\n .@{collapse-prefix-cls}-header-text {\n flex: auto;\n }\n\n .@{collapse-prefix-cls}-extra {\n margin-left: auto;\n }\n\n &:focus {\n outline: none;\n }\n }\n\n .@{collapse-prefix-cls}-header-collapsible-only {\n cursor: default;\n .@{collapse-prefix-cls}-header-text {\n flex: none;\n cursor: pointer;\n }\n }\n\n .@{collapse-prefix-cls}-icon-collapsible-only {\n cursor: default;\n .@{collapse-prefix-cls}-expand-icon {\n cursor: pointer;\n }\n }\n\n &.@{collapse-prefix-cls}-no-arrow {\n > .@{collapse-prefix-cls}-header {\n padding-left: @padding-sm;\n }\n }\n }\n\n // Expand Icon end\n &-icon-position-end {\n & > .@{collapse-prefix-cls}-item {\n > .@{collapse-prefix-cls}-header {\n position: relative;\n padding: @collapse-header-padding;\n padding-right: @collapse-header-padding-extra;\n\n .@{collapse-prefix-cls}-arrow {\n position: absolute;\n top: 50%;\n right: @padding-md;\n left: auto;\n margin: 0;\n transform: translateY(-50%);\n }\n }\n }\n }\n\n &-content {\n color: @text-color;\n background-color: @collapse-content-bg;\n border-top: @border-width-base @border-style-base @border-color-base;\n\n & > &-box {\n padding: @collapse-content-padding;\n }\n\n &-hidden {\n display: none;\n }\n }\n\n &-item:last-child {\n > .@{collapse-prefix-cls}-content {\n border-radius: 0 0 @collapse-panel-border-radius @collapse-panel-border-radius;\n }\n }\n\n &-borderless {\n background-color: @collapse-header-bg;\n border: 0;\n }\n\n &-borderless > &-item {\n border-bottom: 1px solid @border-color-base;\n }\n\n &-borderless > &-item:last-child,\n &-borderless > &-item:last-child &-header {\n border-radius: 0;\n }\n\n // hide the last border-bottom in borderless mode\n &-borderless > &-item:last-child {\n border-bottom: 0;\n }\n\n &-borderless > &-item > &-content {\n background-color: transparent;\n border-top: 0;\n }\n\n &-borderless > &-item > &-content > &-content-box {\n padding-top: 4px;\n }\n\n &-ghost {\n background-color: transparent;\n border: 0;\n > .@{collapse-prefix-cls}-item {\n border-bottom: 0;\n > .@{collapse-prefix-cls}-content {\n background-color: transparent;\n border-top: 0;\n > .@{collapse-prefix-cls}-content-box {\n padding-top: 12px;\n padding-bottom: 12px;\n }\n }\n }\n }\n\n & &-item-disabled > &-header {\n &,\n & > .arrow {\n color: @disabled-color;\n cursor: not-allowed;\n }\n }\n}\n\n@import './rtl';\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@collapse-prefix-cls: ~'@{ant-prefix}-collapse';\n\n.@{collapse-prefix-cls} {\n &-rtl {\n direction: rtl;\n\n // Expand Icon end\n &.@{collapse-prefix-cls}.@{collapse-prefix-cls}-icon-position-end {\n & > .@{collapse-prefix-cls}-item {\n > .@{collapse-prefix-cls}-header {\n position: relative;\n padding: @collapse-header-padding;\n padding-left: @collapse-header-padding-extra;\n\n .@{collapse-prefix-cls}-arrow {\n position: absolute;\n top: 50%;\n right: auto;\n left: @padding-md;\n margin: 0;\n transform: translateY(-50%);\n }\n }\n }\n }\n }\n\n & > &-item {\n > .@{collapse-prefix-cls}-header {\n .@{collapse-prefix-cls}-rtl & {\n padding: @collapse-header-padding;\n padding-right: @collapse-header-padding-extra;\n }\n\n .@{collapse-prefix-cls}-arrow {\n .@{collapse-prefix-cls}-rtl& {\n margin-right: 0;\n margin-left: @margin-sm;\n }\n\n & svg {\n .@{collapse-prefix-cls}-rtl& {\n transform: rotate(180deg);\n }\n }\n }\n\n .@{collapse-prefix-cls}-extra {\n .@{collapse-prefix-cls}-rtl& {\n margin-right: auto;\n margin-left: 0;\n }\n }\n }\n\n &.@{collapse-prefix-cls}-no-arrow {\n > .@{collapse-prefix-cls}-header {\n .@{collapse-prefix-cls}-rtl& {\n padding-right: @padding-sm;\n padding-left: 0;\n }\n }\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@comment-prefix-cls: ~'@{ant-prefix}-comment';\n\n.@{comment-prefix-cls} {\n position: relative;\n background-color: @comment-bg;\n\n &-inner {\n display: flex;\n padding: @comment-padding-base;\n }\n\n &-avatar {\n position: relative;\n flex-shrink: 0;\n margin-right: @margin-sm;\n cursor: pointer;\n\n img {\n width: 32px;\n height: 32px;\n border-radius: 50%;\n }\n }\n\n &-content {\n position: relative;\n flex: 1 1 auto;\n min-width: 1px;\n font-size: @comment-font-size-base;\n word-wrap: break-word;\n\n &-author {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n margin-bottom: @margin-xss;\n font-size: @comment-font-size-base;\n\n & > a,\n & > span {\n padding-right: @padding-xs;\n font-size: @comment-font-size-sm;\n line-height: 18px;\n }\n\n &-name {\n color: @comment-author-name-color;\n font-size: @comment-font-size-base;\n transition: color 0.3s;\n\n > * {\n color: @comment-author-name-color;\n\n &:hover {\n color: @comment-author-name-color;\n }\n }\n }\n\n &-time {\n color: @comment-author-time-color;\n white-space: nowrap;\n cursor: auto;\n }\n }\n\n &-detail p {\n margin-bottom: @comment-content-detail-p-margin-bottom;\n white-space: pre-wrap;\n }\n }\n\n &-actions {\n margin-top: @comment-actions-margin-top;\n margin-bottom: @comment-actions-margin-bottom;\n padding-left: 0;\n\n > li {\n display: inline-block;\n color: @comment-action-color;\n\n > span {\n margin-right: 10px;\n color: @comment-action-color;\n font-size: @comment-font-size-sm;\n cursor: pointer;\n transition: color 0.3s;\n user-select: none;\n\n &:hover {\n color: @comment-action-hover-color;\n }\n }\n }\n }\n\n &-nested {\n margin-left: @comment-nest-indent;\n }\n}\n\n@import './rtl';\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@comment-prefix-cls: ~'@{ant-prefix}-comment';\n\n.@{comment-prefix-cls} {\n &-rtl {\n direction: rtl;\n }\n\n &-avatar {\n .@{comment-prefix-cls}-rtl & {\n margin-right: 0;\n margin-left: 12px;\n }\n }\n\n &-content {\n &-author {\n & > a,\n & > span {\n .@{comment-prefix-cls}-rtl & {\n padding-right: 0;\n padding-left: 8px;\n }\n }\n }\n }\n\n &-actions {\n .@{comment-prefix-cls}-rtl & {\n padding-right: 0;\n }\n\n > li {\n > span {\n .@{comment-prefix-cls}-rtl & {\n margin-right: 0;\n margin-left: 10px;\n }\n }\n }\n }\n\n &-nested {\n .@{comment-prefix-cls}-rtl & {\n margin-right: @comment-nest-indent;\n margin-left: 0;\n }\n }\n}\n","@import '../../input/style/mixin';\n\n@picker-prefix-cls: ~'@{ant-prefix}-picker';\n\n.picker-status-color(\n @text-color: @input-color;\n @border-color: @input-border-color;\n @background-color: @input-bg;\n @hoverBorderColor: @primary-color-hover;\n @outlineColor: @primary-color-outline;\n) {\n &.@{picker-prefix-cls} {\n &,\n &:not([disabled]):hover {\n background-color: @background-color;\n border-color: @border-color;\n }\n\n &-focused,\n &:focus {\n .active(@text-color, @hoverBorderColor, @outlineColor);\n }\n\n .@{picker-prefix-cls}-active-bar {\n background: @hoverBorderColor;\n }\n }\n}\n\n.@{picker-prefix-cls} {\n &-status-error {\n .picker-status-color(@error-color, @error-color, @input-bg, @error-color-hover, @error-color-outline);\n }\n\n &-status-warning {\n .picker-status-color(@warning-color, @warning-color, @input-bg, @warning-color-hover, @warning-color-outline);\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@input-affix-with-clear-btn-width: 38px;\n\n// size mixins for input\n.input-lg() {\n padding: @input-padding-vertical-lg @input-padding-horizontal-lg;\n font-size: @font-size-lg;\n}\n\n.input-sm() {\n padding: @input-padding-vertical-sm @input-padding-horizontal-sm;\n}\n\n// input status\n// == when focus or active\n.active(@borderColor: @primary-color; @hoverBorderColor: @primary-color-hover; @outlineColor: @primary-color-outline) {\n & when (@theme = dark) {\n border-color: @borderColor;\n }\n & when (not (@theme = dark) and not (@theme = variable)) {\n border-color: @hoverBorderColor;\n }\n & when not (@theme = variable) {\n box-shadow: @input-outline-offset @outline-blur-size @outline-width\n fade(@borderColor, @outline-fade);\n }\n & when (@theme = variable) {\n border-color: @hoverBorderColor;\n box-shadow: @input-outline-offset @outline-blur-size @outline-width @outlineColor;\n }\n border-right-width: @border-width-base;\n outline: 0;\n}\n\n// == when hover\n.hover(@color: @input-hover-border-color) {\n border-color: @color;\n border-right-width: @border-width-base;\n}\n\n.disabled() {\n color: @input-disabled-color;\n background-color: @input-disabled-bg;\n border-color: @input-border-color;\n box-shadow: none;\n cursor: not-allowed;\n opacity: 1;\n\n &:hover {\n .hover(@input-border-color);\n }\n}\n\n// Basic style for input\n.input() {\n position: relative;\n display: inline-block;\n width: 100%;\n min-width: 0;\n padding: @input-padding-vertical-base @input-padding-horizontal-base;\n color: @input-color;\n font-size: @font-size-base;\n line-height: @line-height-base;\n background-color: @input-bg;\n background-image: none;\n border: @border-width-base @border-style-base @input-border-color;\n border-radius: @control-border-radius;\n transition: all 0.3s;\n .placeholder(); // Reset placeholder\n\n &:hover {\n .hover();\n }\n\n &:focus,\n &-focused {\n .active();\n }\n\n &-disabled {\n .disabled();\n }\n\n &[disabled] {\n .disabled();\n }\n\n &-borderless {\n &,\n &:hover,\n &:focus,\n &-focused,\n &-disabled,\n &[disabled] {\n background-color: transparent;\n border: none;\n box-shadow: none;\n }\n }\n\n // Reset height for `textarea`s\n textarea& {\n max-width: 100%; // prevent textearea resize from coming out of its container\n height: auto;\n min-height: @input-height-base;\n line-height: @line-height-base;\n vertical-align: bottom;\n transition: all 0.3s, height 0s;\n }\n\n // Size\n &-lg {\n .input-lg();\n }\n\n &-sm {\n .input-sm();\n }\n}\n\n// label input\n.input-group(@inputClass) {\n position: relative;\n display: table;\n width: 100%;\n border-collapse: separate;\n border-spacing: 0;\n\n // Undo padding and float of grid classes\n &[class*='col-'] {\n float: none;\n padding-right: 0;\n padding-left: 0;\n }\n\n > [class*='col-'] {\n padding-right: 8px;\n\n &:last-child {\n padding-right: 0;\n }\n }\n\n &-addon,\n &-wrap,\n > .@{inputClass} {\n display: table-cell;\n\n &:not(:first-child):not(:last-child) {\n border-radius: 0;\n }\n }\n\n &-addon,\n &-wrap {\n width: 1px; // To make addon/wrap as small as possible\n white-space: nowrap;\n vertical-align: middle;\n }\n\n &-wrap > * {\n display: block !important;\n }\n\n .@{inputClass} {\n float: left;\n width: 100%;\n margin-bottom: 0;\n text-align: inherit;\n\n &:focus {\n z-index: 1; // Fix https://gw.alipayobjects.com/zos/rmsportal/DHNpoqfMXSfrSnlZvhsJ.png\n border-right-width: 1px;\n }\n\n &:hover {\n z-index: 1;\n border-right-width: 1px;\n .@{ant-prefix}-input-search-with-button & {\n z-index: 0;\n }\n }\n }\n\n &-addon {\n position: relative;\n padding: 0 @input-padding-horizontal-base;\n color: @input-color;\n font-weight: normal;\n font-size: @font-size-base;\n text-align: center;\n background-color: @input-addon-bg;\n border: @border-width-base @border-style-base @input-border-color;\n border-radius: @control-border-radius;\n transition: all 0.3s;\n\n // Reset Select's style in addon\n .@{ant-prefix}-select {\n margin: -(@input-padding-vertical-base + 1px) (-@input-padding-horizontal-base);\n\n &.@{ant-prefix}-select-single:not(.@{ant-prefix}-select-customize-input)\n .@{ant-prefix}-select-selector {\n background-color: inherit;\n border: @border-width-base @border-style-base transparent;\n box-shadow: none;\n }\n\n &-open,\n &-focused {\n .@{ant-prefix}-select-selector {\n color: @primary-color;\n }\n }\n }\n\n // https://github.com/ant-design/ant-design/issues/31333\n .@{ant-prefix}-cascader-picker {\n margin: -9px (-@control-padding-horizontal);\n background-color: transparent;\n .@{ant-prefix}-cascader-input {\n text-align: left;\n border: 0;\n box-shadow: none;\n }\n }\n }\n\n // Reset rounded corners\n > .@{inputClass}:first-child,\n &-addon:first-child {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n\n // Reset Select's style in addon\n .@{ant-prefix}-select .@{ant-prefix}-select-selector {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n }\n\n > .@{inputClass}-affix-wrapper {\n &:not(:first-child) .@{inputClass} {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n\n &:not(:last-child) .@{inputClass} {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n }\n }\n\n &-addon:first-child {\n border-right: 0;\n }\n\n &-addon:last-child {\n border-left: 0;\n }\n\n > .@{inputClass}:last-child,\n &-addon:last-child {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n\n // Reset Select's style in addon\n .@{ant-prefix}-select .@{ant-prefix}-select-selector {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n }\n\n // Sizing options\n &-lg .@{inputClass},\n &-lg > &-addon {\n .input-lg();\n }\n\n &-sm .@{inputClass},\n &-sm > &-addon {\n .input-sm();\n }\n\n // Fix https://github.com/ant-design/ant-design/issues/5754\n &-lg .@{ant-prefix}-select-single .@{ant-prefix}-select-selector {\n height: @input-height-lg;\n }\n\n &-sm .@{ant-prefix}-select-single .@{ant-prefix}-select-selector {\n height: @input-height-sm;\n }\n\n .@{inputClass}-affix-wrapper {\n &:not(:last-child) {\n border-top-right-radius: 0;\n border-bottom-right-radius: 0;\n .@{ant-prefix}-input-search & {\n border-top-left-radius: @control-border-radius;\n border-bottom-left-radius: @control-border-radius;\n }\n }\n\n &:not(:first-child),\n .@{ant-prefix}-input-search &:not(:first-child) {\n border-top-left-radius: 0;\n border-bottom-left-radius: 0;\n }\n }\n\n &&-compact {\n display: block;\n .clearfix();\n\n &-addon,\n &-wrap,\n > .@{inputClass} {\n &:not(:first-child):not(:last-child) {\n border-right-width: @border-width-base;\n\n &:hover {\n z-index: 1;\n }\n\n &:focus {\n z-index: 1;\n }\n }\n }\n\n & > * {\n display: inline-block;\n float: none;\n vertical-align: top; // https://github.com/ant-design/ant-design-pro/issues/139\n border-radius: 0;\n }\n\n & > .@{inputClass}-affix-wrapper {\n display: inline-flex;\n }\n\n & > .@{ant-prefix}-picker-range {\n display: inline-flex;\n }\n\n & > *:not(:last-child) {\n margin-right: -@border-width-base;\n border-right-width: @border-width-base;\n }\n\n // Undo float for .ant-input-group .ant-input\n .@{inputClass} {\n float: none;\n }\n\n // reset border for Select, DatePicker, AutoComplete, Cascader, Mention, TimePicker, Input\n & > .@{ant-prefix}-select > .@{ant-prefix}-select-selector,\n & > .@{ant-prefix}-select-auto-complete .@{ant-prefix}-input,\n & > .@{ant-prefix}-cascader-picker .@{ant-prefix}-input,\n & > .@{ant-prefix}-input-group-wrapper .@{ant-prefix}-input {\n border-right-width: @border-width-base;\n border-radius: 0;\n\n &:hover {\n z-index: 1;\n }\n\n &:focus {\n z-index: 1;\n }\n }\n\n & > .@{ant-prefix}-select-focused {\n z-index: 1;\n }\n\n // update z-index for arrow icon\n & > .@{ant-prefix}-select > .@{ant-prefix}-select-arrow {\n z-index: 1; // https://github.com/ant-design/ant-design/issues/20371\n }\n\n & > *:first-child,\n & > .@{ant-prefix}-select:first-child > .@{ant-prefix}-select-selector,\n & > .@{ant-prefix}-select-auto-complete:first-child .@{ant-prefix}-input,\n & > .@{ant-prefix}-cascader-picker:first-child .@{ant-prefix}-input {\n border-top-left-radius: @control-border-radius;\n border-bottom-left-radius: @control-border-radius;\n }\n\n & > *:last-child,\n & > .@{ant-prefix}-select:last-child > .@{ant-prefix}-select-selector,\n & > .@{ant-prefix}-cascader-picker:last-child .@{ant-prefix}-input,\n & > .@{ant-prefix}-cascader-picker-focused:last-child .@{ant-prefix}-input {\n border-right-width: @border-width-base;\n border-top-right-radius: @control-border-radius;\n border-bottom-right-radius: @control-border-radius;\n }\n\n // https://github.com/ant-design/ant-design/issues/12493\n & > .@{ant-prefix}-select-auto-complete .@{ant-prefix}-input {\n vertical-align: top;\n }\n\n .@{ant-prefix}-input-group-wrapper + .@{ant-prefix}-input-group-wrapper {\n margin-left: -1px;\n .@{ant-prefix}-input-affix-wrapper {\n border-radius: 0;\n }\n }\n\n .@{ant-prefix}-input-group-wrapper:not(:last-child) {\n &.@{ant-prefix}-input-search > .@{ant-prefix}-input-group {\n & > .@{ant-prefix}-input-group-addon > .@{ant-prefix}-input-search-button {\n border-radius: 0;\n }\n\n & > .@{ant-prefix}-input {\n border-radius: @control-border-radius 0 0 @control-border-radius;\n }\n }\n }\n }\n}\n\n.status-color(\n @prefix-cls: @input-prefix-cls;\n @text-color: @input-color;\n @border-color: @input-border-color;\n @background-color: @input-bg;\n @hoverBorderColor: @primary-color-hover;\n @outlineColor: @primary-color-outline;\n) {\n &:not(.@{prefix-cls}-disabled):not(.@{prefix-cls}-borderless).@{prefix-cls} {\n &,\n &:hover {\n background: @background-color;\n border-color: @border-color;\n }\n\n &:focus,\n &-focused {\n .active(@text-color, @hoverBorderColor, @outlineColor);\n }\n }\n}\n\n.status-color-common(\n @prefix-cls: @input-prefix-cls;\n @text-color: @input-color;\n @border-color: @input-border-color;\n @background-color: @input-bg;\n @hoverBorderColor: @primary-color-hover;\n @outlineColor: @primary-color-outline;\n) {\n .@{prefix-cls}-prefix {\n color: @text-color;\n }\n}\n\n.group-status-color(\n @prefix-cls: @input-prefix-cls;\n @text-color: @input-color;\n @border-color: @input-border-color;\n) {\n .@{prefix-cls}-group-addon {\n color: @text-color;\n border-color: @border-color;\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n@import '../../input/style/mixin';\n@import './status';\n\n@picker-prefix-cls: ~'@{ant-prefix}-picker';\n\n.picker-padding(@input-height, @font-size, @padding-horizontal) {\n // font height probably 22.0001, So use floor better\n @font-height: floor(@font-size * @line-height-base) + 2;\n @padding-top: max(((@input-height - @font-height) / 2), 0);\n @padding-bottom: max(@input-height - @font-height - @padding-top, 0);\n padding: @padding-top @padding-horizontal @padding-bottom;\n}\n\n.@{picker-prefix-cls} {\n @arrow-size: @popover-arrow-width;\n\n .reset-component();\n .picker-padding(@input-height-base, @font-size-base, @input-padding-horizontal-base);\n position: relative;\n display: inline-flex;\n align-items: center;\n background: @picker-bg;\n border: @border-width-base @border-style-base @select-border-color;\n border-radius: @control-border-radius;\n transition: border @animation-duration-slow, box-shadow @animation-duration-slow;\n\n &:hover,\n &-focused {\n .hover();\n }\n\n &-focused {\n .active();\n }\n\n &&-disabled {\n background: @input-disabled-bg;\n border-color: @select-border-color;\n cursor: not-allowed;\n }\n\n &&-disabled &-suffix {\n color: @disabled-color;\n }\n\n &&-borderless {\n background-color: transparent !important;\n border-color: transparent !important;\n box-shadow: none !important;\n }\n\n // ======================== Input =========================\n &-input {\n position: relative;\n display: inline-flex;\n align-items: center;\n width: 100%;\n\n > input {\n .input();\n flex: auto;\n\n // Fix Firefox flex not correct:\n // https://github.com/ant-design/ant-design/pull/20023#issuecomment-564389553\n min-width: 1px;\n height: auto;\n padding: 0;\n background: transparent;\n\n border: 0;\n\n &:focus {\n box-shadow: none;\n }\n\n &[disabled] {\n background: transparent;\n }\n }\n\n &:hover {\n .@{picker-prefix-cls}-clear {\n opacity: 1;\n }\n }\n\n &-placeholder {\n > input {\n color: @input-placeholder-color;\n }\n }\n }\n\n // Size\n &-large {\n .picker-padding(@input-height-lg, @font-size-lg, @input-padding-horizontal-lg);\n\n .@{picker-prefix-cls}-input > input {\n font-size: @font-size-lg;\n }\n }\n\n &-small {\n .picker-padding(@input-height-sm, @font-size-base, @input-padding-horizontal-sm);\n }\n\n &-suffix {\n display: flex;\n flex: none;\n align-self: center;\n margin-left: (@padding-xs / 2);\n color: @disabled-color;\n line-height: 1;\n pointer-events: none;\n\n > * {\n vertical-align: top;\n\n &:not(:last-child) {\n margin-right: 8px;\n }\n }\n }\n\n &-clear {\n position: absolute;\n top: 50%;\n right: 0;\n color: @disabled-color;\n line-height: 1;\n background: @component-background;\n transform: translateY(-50%);\n cursor: pointer;\n opacity: 0;\n transition: opacity @animation-duration-slow, color @animation-duration-slow;\n\n > * {\n vertical-align: top;\n }\n\n &:hover {\n color: @text-color-secondary;\n }\n }\n\n &-separator {\n position: relative;\n display: inline-block;\n width: 1em;\n height: @font-size-lg;\n color: @disabled-color;\n font-size: @font-size-lg;\n vertical-align: top;\n cursor: default;\n\n .@{picker-prefix-cls}-focused & {\n color: @text-color-secondary;\n }\n\n .@{picker-prefix-cls}-range-separator & {\n .@{picker-prefix-cls}-disabled & {\n cursor: not-allowed;\n }\n }\n }\n\n // ======================== Range =========================\n &-range {\n position: relative;\n display: inline-flex;\n\n // Clear\n .@{picker-prefix-cls}-clear {\n right: @input-padding-horizontal-base;\n }\n\n &:hover {\n .@{picker-prefix-cls}-clear {\n opacity: 1;\n }\n }\n\n // Active bar\n .@{picker-prefix-cls}-active-bar {\n bottom: -@border-width-base;\n height: 2px;\n margin-left: @input-padding-horizontal-base;\n background: @primary-color;\n opacity: 0;\n transition: all @animation-duration-slow ease-out;\n pointer-events: none;\n }\n\n &.@{picker-prefix-cls}-focused {\n .@{picker-prefix-cls}-active-bar {\n opacity: 1;\n }\n }\n\n &-separator {\n align-items: center;\n padding: 0 @padding-xs;\n line-height: 1;\n }\n\n &.@{picker-prefix-cls}-small {\n .@{picker-prefix-cls}-clear {\n right: @input-padding-horizontal-sm;\n }\n\n .@{picker-prefix-cls}-active-bar {\n margin-left: @input-padding-horizontal-sm;\n }\n }\n }\n\n // ======================= Dropdown =======================\n &-dropdown {\n .reset-component();\n position: absolute;\n // Fix incorrect position of picker popup\n // https://github.com/ant-design/ant-design/issues/35590\n top: -9999px;\n left: -9999px;\n z-index: @zindex-picker;\n\n &-hidden {\n display: none;\n }\n\n &-placement-bottomLeft {\n .@{picker-prefix-cls}-range-arrow {\n top: (@arrow-size / 2) - (@arrow-size / 3) + 0.7px;\n display: block;\n transform: rotate(-135deg) translateY(1px);\n }\n }\n\n &-placement-topLeft {\n .@{picker-prefix-cls}-range-arrow {\n bottom: (@arrow-size / 2) - (@arrow-size / 3) + 0.7px;\n display: block;\n transform: rotate(45deg);\n }\n }\n\n &.@{ant-prefix}-slide-up-enter.@{ant-prefix}-slide-up-enter-active&-placement-topLeft,\n &.@{ant-prefix}-slide-up-enter.@{ant-prefix}-slide-up-enter-active&-placement-topRight,\n &.@{ant-prefix}-slide-up-appear.@{ant-prefix}-slide-up-appear-active&-placement-topLeft,\n &.@{ant-prefix}-slide-up-appear.@{ant-prefix}-slide-up-appear-active&-placement-topRight {\n animation-name: antSlideDownIn;\n }\n\n &.@{ant-prefix}-slide-up-enter.@{ant-prefix}-slide-up-enter-active&-placement-bottomLeft,\n &.@{ant-prefix}-slide-up-enter.@{ant-prefix}-slide-up-enter-active&-placement-bottomRight,\n &.@{ant-prefix}-slide-up-appear.@{ant-prefix}-slide-up-appear-active&-placement-bottomLeft,\n &.@{ant-prefix}-slide-up-appear.@{ant-prefix}-slide-up-appear-active&-placement-bottomRight {\n animation-name: antSlideUpIn;\n }\n\n &.@{ant-prefix}-slide-up-leave.@{ant-prefix}-slide-up-leave-active&-placement-topLeft,\n &.@{ant-prefix}-slide-up-leave.@{ant-prefix}-slide-up-leave-active&-placement-topRight {\n animation-name: antSlideDownOut;\n }\n\n &.@{ant-prefix}-slide-up-leave.@{ant-prefix}-slide-up-leave-active&-placement-bottomLeft,\n &.@{ant-prefix}-slide-up-leave.@{ant-prefix}-slide-up-leave-active&-placement-bottomRight {\n animation-name: antSlideUpOut;\n }\n }\n\n &-dropdown-range {\n padding: (@arrow-size * 2 / 3) 0;\n\n &-hidden {\n display: none;\n }\n }\n\n // Time picker with additional style\n &-dropdown &-panel > &-time-panel {\n padding-top: (@padding-xs / 2);\n }\n\n // ======================== Ranges ========================\n &-ranges {\n margin-bottom: 0;\n padding: (@padding-xs / 2) @padding-sm;\n overflow: hidden;\n line-height: @picker-text-height - 2 * @border-width-base - (@padding-xs / 2);\n text-align: left;\n list-style: none;\n\n > li {\n display: inline-block;\n }\n\n // https://github.com/ant-design/ant-design/issues/23687\n .@{picker-prefix-cls}-preset > .@{ant-prefix}-tag-blue {\n color: @primary-color;\n background: @primary-1;\n border-color: @primary-3;\n cursor: pointer;\n }\n\n .@{picker-prefix-cls}-ok {\n float: right;\n margin-left: @padding-xs;\n }\n }\n\n &-range-wrapper {\n display: flex;\n }\n\n &-range-arrow {\n position: absolute;\n z-index: 1;\n display: none;\n width: @arrow-size;\n height: @arrow-size;\n margin-left: @input-padding-horizontal-base * 1.5;\n box-shadow: 2px 2px 6px -2px fade(@black, 10%); // use spread radius to hide shadow over popover\n transition: left @animation-duration-slow ease-out;\n .roundedArrow(@arrow-size, 5px, @calendar-bg);\n }\n\n &-panel-container {\n overflow: hidden;\n vertical-align: top;\n background: @calendar-bg;\n border-radius: @border-radius-base;\n box-shadow: @box-shadow-base;\n transition: margin @animation-duration-slow;\n\n .@{picker-prefix-cls}-panels {\n display: inline-flex;\n flex-wrap: nowrap;\n direction: ltr;\n }\n\n .@{picker-prefix-cls}-panel {\n vertical-align: top;\n background: transparent;\n border-width: 0 0 @border-width-base 0;\n border-radius: 0;\n\n .@{picker-prefix-cls}-content,\n table {\n text-align: center;\n }\n\n &-focused {\n border-color: @border-color-split;\n }\n }\n }\n\n // ===================== Compact Item Styles =====================\n .compact-item(@picker-prefix-cls, null, ~'@{picker-prefix-cls}-focused');\n}\n\n@import './panel';\n@import './rtl';\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n//== Style for input-group: input with label, with button or dropdown...\n.@{ant-prefix}-input-group {\n &-wrapper {\n &-rtl {\n direction: rtl;\n }\n }\n\n &-rtl {\n direction: rtl;\n }\n}\n\n// affix\n@input-affix-margin: 4px;\n\n.@{ant-prefix}-input {\n &-affix-wrapper&-affix-wrapper-rtl {\n > input.@{ant-prefix}-input {\n border: none;\n outline: none;\n }\n }\n\n &-affix-wrapper-rtl {\n .@{ant-prefix}-input-prefix {\n margin: 0 0 0 @input-affix-margin;\n }\n\n .@{ant-prefix}-input-suffix {\n margin: 0 @input-affix-margin 0 0;\n }\n }\n\n &-textarea {\n &-rtl {\n direction: rtl;\n }\n\n &-rtl&-show-count::after {\n text-align: left;\n }\n }\n}\n\n// allow-clear\n.@{ant-prefix}-input-clear-icon {\n &-has-suffix {\n .@{ant-prefix}-input-affix-wrapper-rtl & {\n margin-right: 0;\n margin-left: @input-affix-margin;\n }\n }\n\n .@{ant-prefix}-input-affix-wrapper-rtl & {\n right: auto;\n left: 8px;\n }\n}\n\n// mixin\n@input-rtl-cls: ~'@{ant-prefix}-input-rtl';\n\n.active() {\n .@{input-rtl-cls} & {\n border-right-width: 0;\n border-left-width: @border-width-base !important;\n }\n}\n\n.hover() {\n .@{input-rtl-cls} & {\n border-right-width: 0;\n border-left-width: @border-width-base !important;\n }\n}\n\n.input() {\n &-rtl {\n direction: rtl;\n }\n}\n\n// label input\n.input-group(@inputClass) {\n > .@{inputClass}-rtl:first-child,\n &-rtl &-addon:first-child {\n border-radius: 0 @border-radius-base @border-radius-base 0;\n }\n\n &-addon:first-child {\n .@{inputClass}-group-rtl & {\n border-right: @border-width-base @border-style-base @input-border-color;\n border-left: 0;\n }\n }\n\n &-addon:last-child {\n .@{inputClass}-group-rtl & {\n border-right: 0;\n border-left: @border-width-base @border-style-base @input-border-color;\n border-radius: @border-radius-base 0 0 @border-radius-base;\n }\n }\n\n > .@{inputClass}:last-child,\n &-addon:last-child {\n .@{inputClass}-group-rtl& {\n border-radius: @border-radius-base 0 0 @border-radius-base;\n }\n }\n\n .@{inputClass}-affix-wrapper {\n &:not(:first-child) {\n .@{inputClass}-group-rtl& {\n border-radius: @border-radius-base 0 0 @border-radius-base;\n }\n }\n\n &:not(:last-child) {\n .@{inputClass}-group-rtl& {\n border-radius: 0 @border-radius-base @border-radius-base 0;\n }\n }\n }\n\n &&-compact {\n & > *:not(:last-child) {\n .@{inputClass}-group-rtl& {\n margin-right: 0;\n margin-left: -@border-width-base;\n border-left-width: @border-width-base;\n }\n }\n\n & > *:first-child,\n & > .@{ant-prefix}-select:first-child > .@{ant-prefix}-select-selector,\n & > .@{ant-prefix}-select-auto-complete:first-child .@{ant-prefix}-input,\n & > .@{ant-prefix}-cascader-picker:first-child .@{ant-prefix}-input {\n .@{inputClass}-group-rtl& {\n border-radius: 0 @border-radius-base @border-radius-base 0;\n }\n }\n\n & > *:last-child,\n & > .@{ant-prefix}-select:last-child > .@{ant-prefix}-select-selector,\n & > .@{ant-prefix}-select-auto-complete:last-child .@{ant-prefix}-input,\n & > .@{ant-prefix}-cascader-picker:last-child .@{ant-prefix}-input,\n & > .@{ant-prefix}-cascader-picker-focused:last-child .@{ant-prefix}-input {\n .@{inputClass}-group-rtl& {\n border-left-width: @border-width-base;\n border-radius: @border-radius-base 0 0 @border-radius-base;\n }\n }\n\n .@{ant-prefix}-input-group-wrapper-rtl + .@{ant-prefix}-input-group-wrapper-rtl {\n margin-right: -1px;\n margin-left: 0;\n }\n\n .@{ant-prefix}-input-group-wrapper-rtl:not(:last-child) {\n &.@{ant-prefix}-input-search > .@{ant-prefix}-input-group {\n & > .@{ant-prefix}-input {\n border-radius: 0 @border-radius-base @border-radius-base 0;\n }\n }\n }\n }\n}\n\n// search-input\n@search-prefix: ~'@{ant-prefix}-input-search';\n@search-rtl-cls: ~'@{search-prefix}-rtl';\n\n.@{search-prefix}-rtl {\n direction: rtl;\n\n .@{ant-prefix}-input {\n &:hover,\n &:focus {\n + .@{ant-prefix}-input-group-addon .@{search-prefix}-button:not(.@{ant-prefix}-btn-primary) {\n border-left-color: @border-color-base;\n\n &:hover {\n border-left-color: @input-hover-border-color;\n }\n }\n }\n }\n\n > .@{ant-prefix}-input-group {\n > .@{ant-prefix}-input-affix-wrapper {\n &:hover,\n &-focused {\n border-right-color: @input-hover-border-color;\n }\n }\n\n > .@{ant-prefix}-input-group-addon:last-child {\n right: -1px;\n left: auto;\n .@{search-prefix}-button {\n border-radius: @border-radius-base 0 0 @border-radius-base;\n }\n }\n }\n}\n","// Compatibility for browsers.\n\n// Placeholder text\n.placeholder(@color: @input-placeholder-color) {\n &::placeholder {\n color: @color;\n user-select: none; // https://github.com/ant-design/ant-design/pull/32639\n }\n\n &:placeholder-shown {\n text-overflow: ellipsis;\n }\n}\n",".roundedArrow(@width, @outer-radius, @bg-color: var(--antd-arrow-background-color)) {\n @corner-height: unit(((@outer-radius) * (1 - 1 / sqrt(2))));\n\n @width-without-unit: unit(@width);\n @outer-radius-without-unit: unit(@outer-radius);\n @inner-radius-without-unit: unit(@arrow-border-radius);\n\n @a-x: @width-without-unit - @corner-height;\n @a-y: 2 * @width-without-unit + @corner-height;\n @b-x: @a-x + @outer-radius-without-unit * (1 / sqrt(2));\n @b-y: 2 * @width-without-unit;\n @c-x: 2 * @width-without-unit - @inner-radius-without-unit;\n @c-y: 2 * @width-without-unit;\n @d-x: 2 * @width-without-unit;\n @d-y: 2 * @width-without-unit - @inner-radius-without-unit;\n @e-x: 2 * @width-without-unit;\n @e-y: @f-y + @outer-radius-without-unit * (1 / sqrt(2));\n @f-x: 2 * @width-without-unit + @corner-height;\n @f-y: @width-without-unit - @corner-height;\n @g-x: @f-x - 1;\n @g-y: @f-y;\n @h-x: @a-x;\n @h-y: @a-y - 1;\n\n border-radius: 0 0 @arrow-border-radius;\n pointer-events: none;\n\n &::before {\n position: absolute;\n top: -@width;\n left: -@width;\n width: @width * 3;\n height: @width * 3;\n background: @bg-color;\n // Hack firefox: https://github.com/ant-design/ant-design/pull/33710#issuecomment-1015287825\n background-repeat: no-repeat;\n background-position: ceil(-@width + 1px) ceil(-@width + 1px);\n content: '';\n clip-path: inset(33% 33%); // For browsers that do not support path()\n clip-path: path(\n 'M @{a-x} @{a-y} A @{outer-radius-without-unit} @{outer-radius-without-unit} 0 0 1 @{b-x} @{b-y} L @{c-x} @{c-y} A @{inner-radius-without-unit} @{inner-radius-without-unit} 0 0 0 @{d-x} @{d-y} L @{e-x} @{e-y} A @{outer-radius-without-unit} @{outer-radius-without-unit} 0 0 1 @{f-x} @{f-y} L @{g-x} @{g-y} L @{h-x} @{h-y} Z'\n );\n }\n}\n","@picker-cell-inner-cls: ~'@{picker-prefix-cls}-cell-inner';\n\n.@{picker-prefix-cls} {\n @picker-arrow-size: 7px;\n @picker-year-month-cell-width: 60px;\n @picker-panel-width: @picker-panel-cell-width * 7 + @padding-sm * 2 + 4;\n\n &-panel {\n display: inline-flex;\n flex-direction: column;\n text-align: center;\n background: @calendar-bg;\n border: @border-width-base @border-style-base @picker-border-color;\n border-radius: @border-radius-base;\n outline: none;\n\n &-focused {\n border-color: @primary-color;\n }\n }\n\n // ========================================================\n // = Shared Panel =\n // ========================================================\n &-decade-panel,\n &-year-panel,\n &-quarter-panel,\n &-month-panel,\n &-week-panel,\n &-date-panel,\n &-time-panel {\n display: flex;\n flex-direction: column;\n width: @picker-panel-width;\n }\n\n // ======================= Header =======================\n &-header {\n display: flex;\n padding: 0 @padding-xs;\n color: @heading-color;\n border-bottom: @border-width-base @border-style-base @picker-border-color;\n\n > * {\n flex: none;\n }\n\n button {\n padding: 0;\n color: @disabled-color;\n line-height: @picker-text-height;\n background: transparent;\n border: 0;\n cursor: pointer;\n transition: color @animation-duration-slow;\n }\n\n > button {\n min-width: 1.6em;\n font-size: @font-size-base;\n\n &:hover {\n color: @text-color;\n }\n }\n\n &-view {\n flex: auto;\n font-weight: 500;\n line-height: @picker-text-height;\n\n button {\n color: inherit;\n font-weight: inherit;\n\n &:not(:first-child) {\n margin-left: @padding-xs;\n }\n\n &:hover {\n color: @primary-color;\n }\n }\n }\n }\n\n // Arrow button\n &-prev-icon,\n &-next-icon,\n &-super-prev-icon,\n &-super-next-icon {\n position: relative;\n display: inline-block;\n width: @picker-arrow-size;\n height: @picker-arrow-size;\n\n &::before {\n position: absolute;\n top: 0;\n left: 0;\n display: inline-block;\n width: @picker-arrow-size;\n height: @picker-arrow-size;\n border: 0 solid currentcolor;\n border-width: 1.5px 0 0 1.5px;\n content: '';\n }\n }\n\n &-super-prev-icon,\n &-super-next-icon {\n &::after {\n position: absolute;\n top: ceil((@picker-arrow-size / 2));\n left: ceil((@picker-arrow-size / 2));\n display: inline-block;\n width: @picker-arrow-size;\n height: @picker-arrow-size;\n border: 0 solid currentcolor;\n border-width: 1.5px 0 0 1.5px;\n content: '';\n }\n }\n\n &-prev-icon,\n &-super-prev-icon {\n transform: rotate(-45deg);\n }\n\n &-next-icon,\n &-super-next-icon {\n transform: rotate(135deg);\n }\n\n // ======================== Body ========================\n &-content {\n width: 100%;\n table-layout: fixed;\n border-collapse: collapse;\n\n th,\n td {\n position: relative;\n min-width: 24px;\n font-weight: 400;\n }\n\n th {\n height: 30px;\n color: @text-color;\n line-height: 30px;\n }\n }\n\n .picker-cell-inner(@cellClassName) {\n &::before {\n position: absolute;\n top: 50%;\n right: 0;\n left: 0;\n z-index: 1;\n height: @picker-panel-cell-height;\n transform: translateY(-50%);\n transition: all @animation-duration-slow;\n content: '';\n }\n\n // >>> Default\n .@{cellClassName} {\n position: relative;\n z-index: 2;\n display: inline-block;\n min-width: @picker-panel-cell-height;\n height: @picker-panel-cell-height;\n line-height: @picker-panel-cell-height;\n border-radius: @border-radius-base;\n transition: background @animation-duration-slow, border @animation-duration-slow;\n }\n\n // >>> Hover\n &:hover:not(&-in-view),\n &:hover:not(&-selected):not(&-range-start):not(&-range-end):not(&-range-hover-start):not(&-range-hover-end) {\n .@{cellClassName} {\n background: @picker-basic-cell-hover-color;\n }\n }\n\n // >>> Today\n &-in-view&-today .@{cellClassName} {\n &::before {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n border: @border-width-base @border-style-base @primary-color;\n border-radius: @border-radius-base;\n content: '';\n }\n }\n\n // >>> In Range\n &-in-view&-in-range {\n position: relative;\n\n &::before {\n background: @picker-basic-cell-active-with-range-color;\n }\n }\n\n // >>> Selected\n &-in-view&-selected .@{cellClassName},\n &-in-view&-range-start .@{cellClassName},\n &-in-view&-range-end .@{cellClassName} {\n color: @text-color-inverse;\n background: @primary-color;\n }\n\n &-in-view&-range-start:not(&-range-start-single),\n &-in-view&-range-end:not(&-range-end-single) {\n &::before {\n background: @picker-basic-cell-active-with-range-color;\n }\n }\n\n &-in-view&-range-start::before {\n left: 50%;\n }\n\n &-in-view&-range-end::before {\n right: 50%;\n }\n\n // >>> Range Hover\n &-in-view&-range-hover-start:not(&-in-range):not(&-range-start):not(&-range-end),\n &-in-view&-range-hover-end:not(&-in-range):not(&-range-start):not(&-range-end),\n &-in-view&-range-hover-start&-range-start-single,\n &-in-view&-range-hover-start&-range-start&-range-end&-range-end-near-hover,\n &-in-view&-range-hover-end&-range-start&-range-end&-range-start-near-hover,\n &-in-view&-range-hover-end&-range-end-single,\n &-in-view&-range-hover:not(&-in-range) {\n &::after {\n position: absolute;\n top: 50%;\n z-index: 0;\n height: 24px;\n border-top: @border-width-base dashed @picker-date-hover-range-border-color;\n border-bottom: @border-width-base dashed @picker-date-hover-range-border-color;\n transform: translateY(-50%);\n transition: all @animation-duration-slow;\n content: '';\n }\n }\n\n // Add space for stash\n &-range-hover-start::after,\n &-range-hover-end::after,\n &-range-hover::after {\n right: 0;\n left: 2px;\n }\n\n // Hover with in range\n &-in-view&-in-range&-range-hover::before,\n &-in-view&-range-start&-range-hover::before,\n &-in-view&-range-end&-range-hover::before,\n &-in-view&-range-start:not(&-range-start-single)&-range-hover-start::before,\n &-in-view&-range-end:not(&-range-end-single)&-range-hover-end::before,\n .@{picker-prefix-cls}-panel\n > :not(.@{picker-prefix-cls}-date-panel)\n &-in-view&-in-range&-range-hover-start::before,\n .@{picker-prefix-cls}-panel\n > :not(.@{picker-prefix-cls}-date-panel)\n &-in-view&-in-range&-range-hover-end::before {\n background: @picker-date-hover-range-color;\n }\n\n // range start border-radius\n &-in-view&-range-start:not(&-range-start-single):not(&-range-end) .@{cellClassName} {\n border-radius: @border-radius-base 0 0 @border-radius-base;\n }\n\n // range end border-radius\n &-in-view&-range-end:not(&-range-end-single):not(&-range-start) .@{cellClassName} {\n border-radius: 0 @border-radius-base @border-radius-base 0;\n }\n\n // DatePanel only\n .@{picker-prefix-cls}-date-panel &-in-view&-in-range&-range-hover-start .@{cellClassName},\n .@{picker-prefix-cls}-date-panel &-in-view&-in-range&-range-hover-end .@{cellClassName} {\n &::after {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: -1;\n background: @picker-date-hover-range-color;\n transition: all @animation-duration-slow;\n content: '';\n }\n }\n\n .@{picker-prefix-cls}-date-panel\n &-in-view&-in-range&-range-hover-start\n .@{cellClassName}::after {\n right: -5px - @border-width-base;\n left: 0;\n }\n\n .@{picker-prefix-cls}-date-panel &-in-view&-in-range&-range-hover-end .@{cellClassName}::after {\n right: 0;\n left: -5px - @border-width-base;\n }\n\n // Hover with range start & end\n &-range-hover&-range-start::after {\n right: 50%;\n }\n\n &-range-hover&-range-end::after {\n left: 50%;\n }\n\n // Edge start\n tr > &-in-view&-range-hover:first-child::after,\n tr > &-in-view&-range-hover-end:first-child::after,\n &-in-view&-start&-range-hover-edge-start&-range-hover-edge-start-near-range::after,\n &-in-view&-range-hover-edge-start:not(&-range-hover-edge-start-near-range)::after,\n &-in-view&-range-hover-start::after {\n left: 6px;\n border-left: @border-width-base dashed @picker-date-hover-range-border-color;\n border-top-left-radius: @border-radius-base;\n border-bottom-left-radius: @border-radius-base;\n }\n\n // Edge end\n tr > &-in-view&-range-hover:last-child::after,\n tr > &-in-view&-range-hover-start:last-child::after,\n &-in-view&-end&-range-hover-edge-end&-range-hover-edge-end-near-range::after,\n &-in-view&-range-hover-edge-end:not(&-range-hover-edge-end-near-range)::after,\n &-in-view&-range-hover-end::after {\n right: 6px;\n border-right: @border-width-base dashed @picker-date-hover-range-border-color;\n border-top-right-radius: @border-radius-base;\n border-bottom-right-radius: @border-radius-base;\n }\n\n // >>> Disabled\n &-disabled {\n color: @disabled-color;\n pointer-events: none;\n\n .@{cellClassName} {\n background: transparent;\n }\n\n &::before {\n background: @picker-basic-cell-disabled-bg;\n }\n }\n &-disabled&-today .@{cellClassName}::before {\n border-color: @disabled-color;\n }\n }\n\n &-cell {\n padding: 3px 0;\n color: @disabled-color;\n cursor: pointer;\n\n // In view\n &-in-view {\n color: @text-color;\n }\n\n .picker-cell-inner(~'@{picker-cell-inner-cls}');\n }\n\n &-decade-panel,\n &-year-panel,\n &-quarter-panel,\n &-month-panel {\n .@{picker-prefix-cls}-content {\n height: @picker-panel-without-time-cell-height * 4;\n }\n\n .@{picker-cell-inner-cls} {\n padding: 0 @padding-xs;\n }\n }\n\n &-quarter-panel {\n .@{picker-prefix-cls}-content {\n height: 56px;\n }\n }\n\n // ======================== Footer ========================\n &-footer {\n width: min-content;\n min-width: 100%;\n line-height: @picker-text-height - 2 * @border-width-base;\n text-align: center;\n border-bottom: @border-width-base @border-style-base transparent;\n\n .@{picker-prefix-cls}-panel & {\n border-top: @border-width-base @border-style-base @picker-border-color;\n }\n\n &-extra {\n padding: 0 @padding-sm;\n line-height: @picker-text-height - 2 * @border-width-base;\n text-align: left;\n\n &:not(:last-child) {\n border-bottom: @border-width-base @border-style-base @picker-border-color;\n }\n }\n }\n\n &-now {\n text-align: left;\n }\n\n &-today-btn {\n color: @link-color;\n\n &:hover {\n color: @link-hover-color;\n }\n\n &:active {\n color: @link-active-color;\n }\n\n &&-disabled {\n color: @disabled-color;\n cursor: not-allowed;\n }\n }\n\n // ========================================================\n // = Special =\n // ========================================================\n\n // ===================== Decade Panel =====================\n &-decade-panel {\n .@{picker-cell-inner-cls} {\n padding: 0 (@padding-xs / 2);\n }\n\n .@{picker-prefix-cls}-cell::before {\n display: none;\n }\n }\n\n // ============= Year & Quarter & Month Panel =============\n &-year-panel,\n &-quarter-panel,\n &-month-panel {\n @hover-cell-fixed-distance: (\n (((@picker-panel-width - @padding-xs * 2) / 3) - @picker-year-month-cell-width) / 2\n );\n\n .@{picker-prefix-cls}-body {\n padding: 0 @padding-xs;\n }\n\n .@{picker-cell-inner-cls} {\n width: @picker-year-month-cell-width;\n }\n\n .@{picker-prefix-cls}-cell-range-hover-start::after {\n left: @hover-cell-fixed-distance;\n border-left: @border-width-base dashed @picker-date-hover-range-border-color;\n border-radius: @border-radius-base 0 0 @border-radius-base;\n\n .@{picker-prefix-cls}-panel-rtl & {\n right: @hover-cell-fixed-distance;\n border-right: @border-width-base dashed @picker-date-hover-range-border-color;\n border-radius: 0 @border-radius-base @border-radius-base 0;\n }\n }\n .@{picker-prefix-cls}-cell-range-hover-end::after {\n right: @hover-cell-fixed-distance;\n border-right: @border-width-base dashed @picker-date-hover-range-border-color;\n border-radius: 0 @border-radius-base @border-radius-base 0;\n\n .@{picker-prefix-cls}-panel-rtl & {\n left: @hover-cell-fixed-distance;\n border-left: @border-width-base dashed @picker-date-hover-range-border-color;\n border-radius: @border-radius-base 0 0 @border-radius-base;\n }\n }\n }\n\n // ====================== Week Panel ======================\n &-week-panel {\n .@{picker-prefix-cls}-body {\n padding: @padding-xs @padding-sm;\n }\n\n // Clear cell style\n .@{picker-prefix-cls}-cell {\n &:hover .@{picker-cell-inner-cls},\n &-selected .@{picker-cell-inner-cls},\n .@{picker-cell-inner-cls} {\n background: transparent !important;\n }\n }\n\n &-row {\n td {\n transition: background @animation-duration-slow;\n }\n\n &:hover td {\n background: @picker-basic-cell-hover-color;\n }\n\n &-selected td,\n &-selected:hover td {\n background: @primary-color;\n\n &.@{picker-prefix-cls}-cell-week {\n color: fade(@text-color-inverse, 50%);\n }\n\n &.@{picker-prefix-cls}-cell-today .@{picker-cell-inner-cls}::before {\n border-color: @text-color-inverse;\n }\n\n .@{picker-cell-inner-cls} {\n color: @text-color-inverse;\n }\n }\n }\n }\n\n // ====================== Date Panel ======================\n &-date-panel {\n .@{picker-prefix-cls}-body {\n padding: @padding-xs @padding-sm;\n }\n\n .@{picker-prefix-cls}-content {\n width: @picker-panel-cell-width * 7;\n\n th {\n width: @picker-panel-cell-width;\n }\n }\n }\n\n // ==================== Datetime Panel ====================\n &-datetime-panel {\n display: flex;\n\n .@{picker-prefix-cls}-time-panel {\n border-left: @border-width-base @border-style-base @picker-border-color;\n }\n\n .@{picker-prefix-cls}-date-panel,\n .@{picker-prefix-cls}-time-panel {\n transition: opacity @animation-duration-slow;\n }\n\n // Keyboard\n &-active {\n .@{picker-prefix-cls}-date-panel,\n .@{picker-prefix-cls}-time-panel {\n opacity: 0.3;\n\n &-active {\n opacity: 1;\n }\n }\n }\n }\n\n // ====================== Time Panel ======================\n &-time-panel {\n width: auto;\n min-width: auto;\n\n .@{picker-prefix-cls}-content {\n display: flex;\n flex: auto;\n height: @picker-time-panel-column-height;\n }\n\n &-column {\n flex: 1 0 auto;\n width: @picker-time-panel-column-width;\n margin: 0;\n padding: 0;\n overflow-y: hidden;\n text-align: left;\n list-style: none;\n transition: background @animation-duration-slow;\n\n &::after {\n display: block;\n height: @picker-time-panel-column-height - @picker-time-panel-cell-height;\n content: '';\n .@{picker-prefix-cls}-datetime-panel & {\n height: @picker-time-panel-column-height - @picker-time-panel-cell-height + 2 *\n @border-width-base;\n }\n }\n\n &:not(:first-child) {\n border-left: @border-width-base @border-style-base @picker-border-color;\n }\n\n &-active {\n background: @calendar-column-active-bg;\n }\n\n &:hover {\n overflow-y: auto;\n }\n\n > li {\n margin: 0;\n padding: 0;\n\n &.@{picker-prefix-cls}-time-panel-cell {\n .@{picker-prefix-cls}-time-panel-cell-inner {\n display: block;\n width: 100%;\n height: @picker-time-panel-cell-height;\n margin: 0;\n padding: 0 0 0 ((@picker-time-panel-column-width - 28px) / 2);\n color: @text-color;\n line-height: @picker-time-panel-cell-height;\n border-radius: 0;\n cursor: pointer;\n transition: background @animation-duration-slow;\n\n &:hover {\n background: @item-hover-bg;\n }\n }\n\n &-selected {\n .@{picker-prefix-cls}-time-panel-cell-inner {\n background: @calendar-item-active-bg;\n }\n }\n\n &-disabled {\n .@{picker-prefix-cls}-time-panel-cell-inner {\n color: @disabled-color;\n background: transparent;\n cursor: not-allowed;\n }\n }\n }\n }\n }\n }\n}\n\n// Fix IE11 render bug by css hacks\n// https://github.com/ant-design/ant-design/issues/21559\n// https://codepen.io/afc163-1472555193/pen/mdJRaNj?editors=0110\n/* stylelint-disable selector-type-no-unknown,selector-no-vendor-prefix */\n_:-ms-fullscreen,\n:root {\n .@{picker-prefix-cls}-range-wrapper {\n .@{picker-prefix-cls}-month-panel .@{picker-prefix-cls}-cell,\n .@{picker-prefix-cls}-year-panel .@{picker-prefix-cls}-cell {\n padding: 21px 0;\n }\n }\n}\n",".@{picker-prefix-cls} {\n &-rtl {\n direction: rtl;\n }\n\n &-suffix {\n .@{picker-prefix-cls}-rtl & {\n margin-right: (@padding-xs / 2);\n margin-left: 0;\n }\n }\n\n &-clear {\n .@{picker-prefix-cls}-rtl & {\n right: auto;\n left: 0;\n }\n }\n\n &-separator {\n .@{picker-prefix-cls}-rtl & {\n transform: rotate(180deg);\n }\n }\n\n &-header {\n &-view {\n button {\n &:not(:first-child) {\n .@{picker-prefix-cls}-panel-rtl & {\n margin-right: @padding-xs;\n margin-left: 0;\n }\n }\n }\n }\n }\n\n // ======================== Range =========================\n &-range {\n // Clear\n .@{picker-prefix-cls}-clear {\n .@{picker-prefix-cls}-rtl& {\n right: auto;\n left: @input-padding-horizontal-base;\n }\n }\n\n // Active bar\n .@{picker-prefix-cls}-active-bar {\n .@{picker-prefix-cls}-rtl& {\n margin-right: @input-padding-horizontal-base;\n margin-left: 0;\n }\n }\n\n &.@{picker-prefix-cls}-small {\n .@{picker-prefix-cls}-active-bar {\n .@{picker-prefix-cls}-rtl& {\n margin-right: @input-padding-horizontal-sm;\n }\n }\n }\n }\n\n // ======================== Ranges ========================\n &-ranges {\n .@{picker-prefix-cls}-dropdown-rtl & {\n text-align: right;\n }\n\n .@{picker-prefix-cls}-ok {\n .@{picker-prefix-cls}-dropdown-rtl & {\n float: left;\n margin-right: @padding-xs;\n margin-left: 0;\n }\n }\n }\n\n // ======================== Panel ========================\n &-panel {\n &-rtl {\n direction: rtl;\n }\n }\n\n &-prev-icon,\n &-super-prev-icon {\n .@{picker-prefix-cls}-panel-rtl & {\n transform: rotate(135deg);\n }\n }\n\n &-next-icon,\n &-super-next-icon {\n .@{picker-prefix-cls}-panel-rtl & {\n transform: rotate(-45deg);\n }\n }\n\n &-cell {\n .picker-cell-inner(~'@{picker-cell-inner-cls}');\n }\n\n // ======================== Body ==========================\n .picker-cell-inner(@cellClassName) {\n .@{cellClassName} {\n position: relative;\n z-index: 2;\n display: inline-block;\n min-width: @picker-panel-cell-height;\n height: @picker-panel-cell-height;\n line-height: @picker-panel-cell-height;\n border-radius: @border-radius-base;\n transition: background @animation-duration-slow, border @animation-duration-slow;\n }\n\n &-in-view&-range-start::before {\n .@{picker-prefix-cls}-panel-rtl & {\n right: 50%;\n left: 0;\n }\n }\n\n &-in-view&-range-end::before {\n .@{picker-prefix-cls}-panel-rtl & {\n right: 0;\n left: 50%;\n }\n }\n\n &-in-view&-range-start&-range-end::before {\n .@{picker-prefix-cls}-panel-rtl & {\n right: 50%;\n left: 50%;\n }\n }\n\n .@{picker-prefix-cls}-date-panel\n &-in-view&-in-range&-range-hover-start\n .@{cellClassName}::after {\n .@{picker-prefix-cls}-panel-rtl & {\n right: 0;\n left: -5px - @border-width-base;\n }\n }\n\n .@{picker-prefix-cls}-date-panel &-in-view&-in-range&-range-hover-end .@{cellClassName}::after {\n .@{picker-prefix-cls}-panel-rtl & {\n right: -5px - @border-width-base;\n left: 0;\n }\n }\n\n // Hover with range start & end\n &-range-hover&-range-start::after {\n .@{picker-prefix-cls}-panel-rtl & {\n right: 0;\n left: 50%;\n }\n }\n\n &-range-hover&-range-end::after {\n .@{picker-prefix-cls}-panel-rtl & {\n right: 50%;\n left: 0;\n }\n }\n\n // range start border-radius\n &-in-view&-range-start:not(&-range-start-single):not(&-range-end) .@{cellClassName} {\n .@{picker-prefix-cls}-panel-rtl & {\n border-radius: 0 @border-radius-base @border-radius-base 0;\n }\n }\n\n // range end border-radius\n &-in-view&-range-end:not(&-range-end-single):not(&-range-start) .@{cellClassName} {\n .@{picker-prefix-cls}-panel-rtl & {\n border-radius: @border-radius-base 0 0 @border-radius-base;\n }\n }\n\n // Edge start\n tr > &-in-view&-range-hover:not(&-selected):first-child::after,\n &-in-view&-start&-range-hover-edge-start&-range-hover-edge-start-near-range::after,\n &-in-view&-range-hover-edge-start:not(&-range-hover-edge-start-near-range)::after,\n &-in-view&-range-hover-start::after {\n .@{picker-prefix-cls}-panel-rtl & {\n right: 6px;\n left: 0;\n border-right: @border-width-base dashed @picker-date-hover-range-border-color;\n border-left: none;\n border-radius: 0 @border-radius-base @border-radius-base 0;\n }\n }\n\n // Edge end\n tr > &-in-view&-range-hover:not(&-selected):last-child::after,\n &-in-view&-end&-range-hover-edge-end&-range-hover-edge-end-near-range::after,\n &-in-view&-range-hover-edge-end:not(&-range-hover-edge-end-near-range)::after,\n &-in-view&-range-hover-end::after {\n .@{picker-prefix-cls}-panel-rtl & {\n right: 0;\n left: 6px;\n border-right: none;\n border-left: @border-width-base dashed @picker-date-hover-range-border-color;\n border-radius: @border-radius-base 0 0 @border-radius-base;\n }\n }\n\n tr > &-in-view&-range-hover-start:last-child::after,\n tr > &-in-view&-range-hover-end:first-child::after,\n &-in-view&-start&-range-hover-edge-start:not(&-range-hover)::after,\n &-in-view&-start&-range-hover-end&-range-hover-edge-start:not(&-range-hover)::after,\n &-in-view&-end&-range-hover-start&-range-hover-edge-end:not(&-range-hover)::after,\n tr > &-in-view&-start&-range-hover&-range-hover-edge-start:last-child::after,\n tr > &-in-view&-end&-range-hover&-range-hover-edge-end:first-child::after {\n .@{picker-prefix-cls}-panel-rtl & {\n right: 6px;\n left: 6px;\n border-right: @border-width-base dashed @picker-date-hover-range-border-color;\n border-left: @border-width-base dashed @picker-date-hover-range-border-color;\n border-radius: @border-radius-base;\n }\n }\n }\n\n // ======================== Footer ========================\n &-footer {\n &-extra {\n .@{picker-prefix-cls}-dropdown-rtl & {\n direction: rtl;\n text-align: right;\n }\n }\n }\n\n // ====================== Time Panel ======================\n &-time-panel {\n .@{picker-prefix-cls}-panel-rtl & {\n direction: ltr;\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@descriptions-prefix-cls: ~'@{ant-prefix}-descriptions';\n\n.@{descriptions-prefix-cls} {\n &-header {\n display: flex;\n align-items: center;\n margin-bottom: @descriptions-title-margin-bottom;\n }\n\n &-title {\n flex: auto;\n overflow: hidden;\n color: @heading-color;\n font-weight: bold;\n font-size: @font-size-lg;\n line-height: @line-height-base;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n\n &-extra {\n margin-left: auto;\n color: @descriptions-extra-color;\n font-size: @font-size-base;\n }\n\n &-view {\n width: 100%;\n border-radius: @border-radius-base;\n\n table {\n width: 100%;\n table-layout: fixed;\n }\n }\n\n &-row {\n > th,\n > td {\n padding-bottom: @descriptions-item-padding-bottom;\n }\n\n &:last-child {\n border-bottom: none;\n }\n }\n\n &-item-label {\n color: @heading-color;\n font-weight: normal;\n font-size: @font-size-base;\n line-height: @line-height-base;\n text-align: start;\n\n &::after {\n & when (@descriptions-item-trailing-colon=true) {\n content: ':';\n }\n & when not (@descriptions-item-trailing-colon=true) {\n content: ' ';\n }\n\n position: relative;\n top: -0.5px;\n margin: 0 @descriptions-item-label-colon-margin-right 0\n @descriptions-item-label-colon-margin-left;\n }\n\n &.@{descriptions-prefix-cls}-item-no-colon::after {\n content: ' ';\n }\n }\n\n &-item-no-label {\n &::after {\n margin: 0;\n content: '';\n }\n }\n\n &-item-content {\n display: table-cell;\n flex: 1;\n color: @text-color;\n font-size: @font-size-base;\n line-height: @line-height-base;\n word-break: break-word;\n overflow-wrap: break-word;\n }\n\n &-item {\n padding-bottom: 0;\n vertical-align: top;\n\n &-container {\n display: flex;\n\n .@{descriptions-prefix-cls}-item-label,\n .@{descriptions-prefix-cls}-item-content {\n display: inline-flex;\n align-items: baseline;\n }\n }\n }\n\n &-middle {\n .@{descriptions-prefix-cls}-row {\n > th,\n > td {\n padding-bottom: @padding-sm;\n }\n }\n }\n\n &-small {\n .@{descriptions-prefix-cls}-row {\n > th,\n > td {\n padding-bottom: @padding-xs;\n }\n }\n }\n\n &-bordered {\n .@{descriptions-prefix-cls}-view {\n border: 1px solid @border-color-split;\n\n > table {\n table-layout: auto;\n border-collapse: collapse;\n }\n }\n\n .@{descriptions-prefix-cls}-item-label,\n .@{descriptions-prefix-cls}-item-content {\n padding: @descriptions-default-padding;\n border-right: 1px solid @border-color-split;\n\n &:last-child {\n border-right: none;\n }\n }\n\n .@{descriptions-prefix-cls}-item-label {\n background-color: @descriptions-bg;\n\n &::after {\n display: none;\n }\n }\n\n .@{descriptions-prefix-cls}-row {\n border-bottom: 1px solid @border-color-split;\n\n &:last-child {\n border-bottom: none;\n }\n }\n\n &.@{descriptions-prefix-cls}-middle {\n .@{descriptions-prefix-cls}-item-label,\n .@{descriptions-prefix-cls}-item-content {\n padding: @descriptions-middle-padding;\n }\n }\n\n &.@{descriptions-prefix-cls}-small {\n .@{descriptions-prefix-cls}-item-label,\n .@{descriptions-prefix-cls}-item-content {\n padding: @descriptions-small-padding;\n }\n }\n }\n}\n\n@import './rtl';\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@descriptions-prefix-cls: ~'@{ant-prefix}-descriptions';\n\n.@{descriptions-prefix-cls} {\n &-rtl {\n direction: rtl;\n }\n\n &-item-label {\n &::after {\n .@{descriptions-prefix-cls}-rtl & {\n margin: 0 @descriptions-item-label-colon-margin-left 0\n @descriptions-item-label-colon-margin-right;\n }\n }\n }\n\n &-bordered {\n .@{descriptions-prefix-cls}-item-label,\n .@{descriptions-prefix-cls}-item-content {\n .@{descriptions-prefix-cls}-rtl& {\n border-right: none;\n border-left: 1px solid @border-color-split;\n\n &:last-child {\n border-left: none;\n }\n }\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@divider-prefix-cls: ~'@{ant-prefix}-divider';\n\n.@{divider-prefix-cls} {\n .reset-component();\n\n border-top: @border-width-base solid @divider-color;\n\n &-vertical {\n position: relative;\n top: -0.06em;\n display: inline-block;\n height: 0.9em;\n margin: 0 @divider-vertical-gutter;\n vertical-align: middle;\n border-top: 0;\n border-left: @border-width-base solid @divider-color;\n }\n\n &-horizontal {\n display: flex;\n clear: both;\n width: 100%;\n min-width: 100%; // Fix https://github.com/ant-design/ant-design/issues/10914\n margin: 24px 0;\n }\n\n &-horizontal&-with-text {\n display: flex;\n margin: 16px 0;\n color: @heading-color;\n font-weight: 500;\n font-size: @font-size-lg;\n white-space: nowrap;\n text-align: center;\n border-top: 0;\n border-top-color: @divider-color;\n\n &::before,\n &::after {\n position: relative;\n top: 50%;\n width: 50%;\n border-top: @border-width-base solid transparent;\n // Chrome not accept `inherit` in `border-top`\n border-top-color: inherit;\n border-bottom: 0;\n transform: translateY(50%);\n content: '';\n }\n }\n\n &-horizontal&-with-text-left {\n &::before {\n top: 50%;\n width: @divider-orientation-margin;\n }\n\n &::after {\n top: 50%;\n width: 100% - @divider-orientation-margin;\n }\n }\n\n &-horizontal&-with-text-right {\n &::before {\n top: 50%;\n width: 100% - @divider-orientation-margin;\n }\n\n &::after {\n top: 50%;\n width: @divider-orientation-margin;\n }\n }\n\n &-inner-text {\n display: inline-block;\n padding: 0 @divider-text-padding;\n }\n\n &-dashed {\n background: none;\n border-color: @divider-color;\n border-style: dashed;\n border-width: @border-width-base 0 0;\n }\n\n &-horizontal&-with-text&-dashed {\n &::before,\n &::after {\n border-style: dashed none none;\n }\n }\n\n &-vertical&-dashed {\n border-width: 0 0 0 @border-width-base;\n }\n\n &-plain&-with-text {\n color: @text-color;\n font-weight: normal;\n font-size: @font-size-base;\n }\n\n &-horizontal&-with-text-left&-no-default-orientation-margin-left {\n &::before {\n width: 0;\n }\n\n &::after {\n width: 100%;\n }\n\n .@{divider-prefix-cls}-inner-text {\n padding-left: 0;\n }\n }\n\n &-horizontal&-with-text-right&-no-default-orientation-margin-right {\n &::before {\n width: 100%;\n }\n\n &::after {\n width: 0;\n }\n\n .@{divider-prefix-cls}-inner-text {\n padding-right: 0;\n }\n }\n}\n\n@import './rtl';\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@divider-prefix-cls: ~'@{ant-prefix}-divider';\n\n.@{divider-prefix-cls} {\n &-rtl {\n direction: rtl;\n }\n\n &-horizontal&-with-text-left {\n &::before {\n .@{divider-prefix-cls}-rtl& {\n width: 100% - @divider-orientation-margin;\n }\n }\n\n &::after {\n .@{divider-prefix-cls}-rtl& {\n width: @divider-orientation-margin;\n }\n }\n }\n\n &-horizontal&-with-text-right {\n &::before {\n .@{divider-prefix-cls}-rtl& {\n width: @divider-orientation-margin;\n }\n }\n\n &::after {\n .@{divider-prefix-cls}-rtl& {\n width: 100% - @divider-orientation-margin;\n }\n }\n }\n}\n","@import '../../style/themes/index';\n\n@drawer-prefix-cls: ~'@{ant-prefix}-drawer';\n@picker-prefix-cls: ~'@{ant-prefix}-picker';\n@drawer-animation-ease: @ease-out-quint;\n\n.@{drawer-prefix-cls} {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: @zindex-modal;\n pointer-events: none;\n\n &-inline {\n position: absolute;\n }\n\n // ====================== Mask ======================\n &-mask {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: @zindex-modal;\n background: @modal-mask-bg;\n pointer-events: auto;\n }\n\n // ==================== Content =====================\n &-content-wrapper {\n position: absolute;\n z-index: @zindex-modal;\n transition: all @animation-duration-slow;\n\n &-hidden {\n display: none;\n }\n\n // Placement\n .@{drawer-prefix-cls}-left > & {\n top: 0;\n bottom: 0;\n left: 0;\n box-shadow: @shadow-1-right;\n }\n\n .@{drawer-prefix-cls}-right > & {\n top: 0;\n right: 0;\n bottom: 0;\n box-shadow: @shadow-1-left;\n }\n\n .@{drawer-prefix-cls}-top > & {\n top: 0;\n right: 0;\n left: 0;\n box-shadow: @shadow-1-down;\n }\n\n .@{drawer-prefix-cls}-bottom > & {\n right: 0;\n bottom: 0;\n left: 0;\n box-shadow: @shadow-1-up;\n }\n }\n\n &-content {\n width: 100%;\n height: 100%;\n overflow: auto;\n background: @drawer-bg;\n pointer-events: auto;\n }\n\n // ===================== Panel ======================\n &-wrapper-body {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n }\n\n // Header\n &-header {\n display: flex;\n flex: 0;\n align-items: center;\n padding: @drawer-header-padding;\n font-size: @drawer-title-font-size;\n line-height: @drawer-title-line-height;\n border-bottom: @border-width-base @border-style-base @border-color-split;\n\n &-title {\n display: flex;\n flex: 1;\n align-items: center;\n min-width: 0;\n min-height: 0;\n }\n }\n\n &-extra {\n flex: 0;\n }\n\n &-close {\n display: inline-block;\n margin-right: 12px;\n color: @modal-close-color;\n font-weight: 700;\n font-size: @font-size-lg;\n font-style: normal;\n line-height: 1;\n text-align: center;\n text-transform: none;\n text-decoration: none;\n background: transparent;\n border: 0;\n outline: 0;\n cursor: pointer;\n transition: color @animation-duration-slow;\n text-rendering: auto;\n\n &:focus,\n &:hover {\n color: @icon-color-hover;\n text-decoration: none;\n }\n }\n\n &-title {\n flex: 1;\n margin: 0;\n color: @heading-color;\n font-weight: 500;\n font-size: @drawer-title-font-size;\n line-height: @drawer-title-line-height;\n }\n\n // Body\n &-body {\n flex: 1;\n min-width: 0;\n min-height: 0;\n padding: @drawer-body-padding;\n overflow: auto;\n }\n\n // Footer\n &-footer {\n flex-shrink: 0;\n padding: @drawer-footer-padding-vertical @drawer-footer-padding-horizontal;\n border-top: @border-width-base @border-style-base @border-color-split;\n }\n}\n","@import (reference) '../../style/themes/index';\n\n@drawer-prefix-cls: ~'@{ant-prefix}-drawer';\n\n.panel-motion {\n &-enter,\n &-appear,\n &-leave {\n &-start {\n transition: none;\n }\n\n &-active {\n transition: all @animation-duration-slow;\n }\n }\n}\n\n.@{drawer-prefix-cls} {\n // ======================== Mask ========================\n &-mask-motion {\n &-enter,\n &-appear,\n &-leave {\n &-active {\n transition: all @animation-duration-slow;\n }\n }\n\n &-enter,\n &-appear {\n opacity: 0;\n\n &-active {\n opacity: 1;\n }\n }\n\n &-leave {\n opacity: 1;\n\n &-active {\n opacity: 0;\n }\n }\n }\n\n // ======================= Panel ========================\n &-panel-motion {\n // Left\n &-left {\n .panel-motion();\n\n &-enter,\n &-appear {\n &-start {\n transform: translateX(-100%) !important;\n }\n\n &-active {\n transform: translateX(0);\n }\n }\n\n &-leave {\n transform: translateX(0);\n\n &-active {\n transform: translateX(-100%);\n }\n }\n }\n\n // Right\n &-right {\n .panel-motion();\n\n &-enter,\n &-appear {\n &-start {\n transform: translateX(100%) !important;\n }\n\n &-active {\n transform: translateX(0);\n }\n }\n\n &-leave {\n transform: translateX(0);\n\n &-active {\n transform: translateX(100%);\n }\n }\n }\n\n // Top\n &-top {\n .panel-motion();\n\n &-enter,\n &-appear {\n &-start {\n transform: translateY(-100%) !important;\n }\n\n &-active {\n transform: translateY(0);\n }\n }\n\n &-leave {\n transform: translateY(0);\n\n &-active {\n transform: translateY(-100%);\n }\n }\n }\n\n // Bottom\n &-bottom {\n .panel-motion();\n\n &-enter,\n &-appear {\n &-start {\n transform: translateY(100%) !important;\n }\n\n &-active {\n transform: translateY(0);\n }\n }\n\n &-leave {\n transform: translateY(0);\n\n &-active {\n transform: translateY(100%);\n }\n }\n }\n }\n}\n","@import '../../style/themes/index';\n\n@drawer-prefix-cls: ~'@{ant-prefix}-drawer';\n\n.@{drawer-prefix-cls} {\n &-rtl {\n direction: rtl;\n }\n\n &-close {\n .@{drawer-prefix-cls}-rtl & {\n margin-right: 0;\n margin-left: 12px;\n }\n }\n}\n","@import (reference) '../../style/themes/index';\n\n@dropdown-prefix-cls: ~'@{ant-prefix}-dropdown';\n\n.@{dropdown-prefix-cls}-menu-item {\n &&-danger {\n color: @error-color;\n\n &:hover {\n color: @text-color-inverse;\n background-color: @error-color;\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n@import './status';\n\n@dropdown-prefix-cls: ~'@{ant-prefix}-dropdown';\n\n.@{dropdown-prefix-cls} {\n .reset-component();\n\n position: absolute;\n top: -9999px;\n left: -9999px;\n z-index: @zindex-dropdown;\n display: block;\n\n &::before {\n position: absolute;\n top: -@popover-distance + @popover-arrow-width;\n right: 0;\n bottom: -@popover-distance + @popover-arrow-width;\n left: -7px;\n z-index: -9999;\n opacity: 0.0001;\n content: ' ';\n }\n\n &-wrap {\n position: relative;\n\n .@{ant-prefix}-btn > .@{iconfont-css-prefix}-down {\n font-size: 10px;\n }\n\n .@{iconfont-css-prefix}-down::before {\n transition: transform @animation-duration-base;\n }\n }\n\n &-wrap-open {\n .@{iconfont-css-prefix}-down::before {\n transform: rotate(180deg);\n }\n }\n\n &-hidden,\n &-menu-hidden,\n &-menu-submenu-hidden {\n display: none;\n }\n\n // Offset the popover to account for the dropdown arrow\n &-show-arrow&-placement-topLeft,\n &-show-arrow&-placement-top,\n &-show-arrow&-placement-topRight {\n padding-bottom: @popover-distance;\n }\n\n &-show-arrow&-placement-bottomLeft,\n &-show-arrow&-placement-bottom,\n &-show-arrow&-placement-bottomRight {\n padding-top: @popover-distance;\n }\n\n // Arrows\n // .popover-arrow is outer, .popover-arrow:after is inner\n\n &-arrow {\n position: absolute;\n z-index: 1; // lift it up so the menu wouldn't cask shadow on it\n display: block;\n width: @popover-arrow-width;\n height: @popover-arrow-width;\n .roundedArrow(@popover-arrow-width, 5px, @popover-bg);\n }\n\n &-placement-top > &-arrow,\n &-placement-topLeft > &-arrow,\n &-placement-topRight > &-arrow {\n bottom: @popover-arrow-width * sqrt((1 / 2)) + 2px;\n box-shadow: 3px 3px 7px -3px fade(@black, 10%);\n transform: rotate(45deg);\n }\n\n &-placement-top > &-arrow {\n left: 50%;\n transform: translateX(-50%) rotate(45deg);\n }\n\n &-placement-topLeft > &-arrow {\n left: 16px;\n }\n\n &-placement-topRight > &-arrow {\n right: 16px;\n }\n\n &-placement-bottom > &-arrow,\n &-placement-bottomLeft > &-arrow,\n &-placement-bottomRight > &-arrow {\n top: (@popover-arrow-width + 2px) * sqrt((1 / 2));\n box-shadow: 2px 2px 5px -2px fade(@black, 10%);\n transform: rotate(-135deg) translateY(-0.5px);\n }\n\n &-placement-bottom > &-arrow {\n left: 50%;\n transform: translateX(-50%) rotate(-135deg) translateY(-0.5px);\n }\n\n &-placement-bottomLeft > &-arrow {\n left: 16px;\n }\n\n &-placement-bottomRight > &-arrow {\n right: 16px;\n }\n\n &-menu {\n position: relative;\n margin: 0;\n padding: @dropdown-edge-child-vertical-padding 0;\n text-align: left;\n list-style-type: none;\n background-color: @dropdown-menu-bg;\n background-clip: padding-box;\n border-radius: @border-radius-base;\n outline: none;\n box-shadow: @box-shadow-base;\n\n &-item-group-title {\n padding: 5px @control-padding-horizontal;\n color: @text-color-secondary;\n transition: all @animation-duration-slow;\n }\n\n &-submenu-popup {\n position: absolute;\n z-index: @zindex-dropdown;\n background: transparent;\n box-shadow: none;\n transform-origin: 0 0;\n\n ul,\n li {\n list-style: none;\n }\n\n ul {\n margin-right: 0.3em;\n margin-left: 0.3em;\n }\n }\n\n // ======================= Item Content =======================\n &-item {\n position: relative;\n display: flex;\n align-items: center;\n }\n\n &-item-icon {\n min-width: 12px;\n margin-right: 8px;\n font-size: @font-size-sm;\n }\n\n &-title-content {\n flex: auto;\n\n > a {\n color: inherit;\n transition: all @animation-duration-slow;\n\n &:hover {\n color: inherit;\n }\n\n &::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n content: '';\n }\n }\n }\n\n // =========================== Item ===========================\n &-item,\n &-submenu-title {\n clear: both;\n margin: 0;\n padding: @dropdown-vertical-padding @control-padding-horizontal;\n color: @text-color;\n font-weight: normal;\n font-size: @dropdown-font-size;\n line-height: @dropdown-line-height;\n cursor: pointer;\n transition: all @animation-duration-slow;\n\n &:first-child {\n & when (@dropdown-edge-child-vertical-padding = 0) {\n border-radius: @border-radius-base @border-radius-base 0 0;\n }\n }\n\n &:last-child {\n & when (@dropdown-edge-child-vertical-padding = 0) {\n border-radius: 0 0 @border-radius-base @border-radius-base;\n }\n }\n\n &-selected {\n color: @dropdown-selected-color;\n background-color: @dropdown-selected-bg;\n }\n\n &:hover,\n &&-active {\n background-color: @item-hover-bg;\n }\n\n &-disabled {\n color: @disabled-color;\n cursor: not-allowed;\n\n &:hover {\n color: @disabled-color;\n background-color: @dropdown-menu-submenu-disabled-bg;\n cursor: not-allowed;\n }\n\n a {\n pointer-events: none;\n }\n }\n\n &-divider {\n height: 1px;\n margin: 4px 0;\n overflow: hidden;\n line-height: 0;\n background-color: @border-color-split;\n }\n\n .@{dropdown-prefix-cls}-menu-submenu-expand-icon {\n position: absolute;\n right: @padding-xs;\n\n .@{dropdown-prefix-cls}-menu-submenu-arrow-icon {\n margin-right: 0 !important;\n color: @text-color-secondary;\n font-size: 10px;\n font-style: normal;\n }\n }\n }\n\n &-item-group-list {\n margin: 0 8px;\n padding: 0;\n list-style: none;\n }\n\n &-submenu-title {\n padding-right: @control-padding-horizontal + @font-size-sm;\n }\n\n &-submenu-vertical {\n position: relative;\n }\n\n &-submenu-vertical > & {\n position: absolute;\n top: 0;\n left: 100%;\n min-width: 100%;\n margin-left: 4px;\n transform-origin: 0 0;\n }\n\n &-submenu&-submenu-disabled .@{dropdown-prefix-cls}-menu-submenu-title {\n &,\n .@{dropdown-prefix-cls}-menu-submenu-arrow-icon {\n color: @disabled-color;\n background-color: @dropdown-menu-submenu-disabled-bg;\n cursor: not-allowed;\n }\n }\n\n // https://github.com/ant-design/ant-design/issues/19264\n &-submenu-selected &-submenu-title {\n color: @primary-color;\n }\n }\n\n &.@{ant-prefix}-slide-down-enter.@{ant-prefix}-slide-down-enter-active&-placement-bottomLeft,\n &.@{ant-prefix}-slide-down-appear.@{ant-prefix}-slide-down-appear-active&-placement-bottomLeft,\n &.@{ant-prefix}-slide-down-enter.@{ant-prefix}-slide-down-enter-active&-placement-bottom,\n &.@{ant-prefix}-slide-down-appear.@{ant-prefix}-slide-down-appear-active&-placement-bottom,\n &.@{ant-prefix}-slide-down-enter.@{ant-prefix}-slide-down-enter-active&-placement-bottomRight,\n &.@{ant-prefix}-slide-down-appear.@{ant-prefix}-slide-down-appear-active&-placement-bottomRight {\n animation-name: antSlideUpIn;\n }\n\n &.@{ant-prefix}-slide-up-enter.@{ant-prefix}-slide-up-enter-active&-placement-topLeft,\n &.@{ant-prefix}-slide-up-appear.@{ant-prefix}-slide-up-appear-active&-placement-topLeft,\n &.@{ant-prefix}-slide-up-enter.@{ant-prefix}-slide-up-enter-active&-placement-top,\n &.@{ant-prefix}-slide-up-appear.@{ant-prefix}-slide-up-appear-active&-placement-top,\n &.@{ant-prefix}-slide-up-enter.@{ant-prefix}-slide-up-enter-active&-placement-topRight,\n &.@{ant-prefix}-slide-up-appear.@{ant-prefix}-slide-up-appear-active&-placement-topRight {\n animation-name: antSlideDownIn;\n }\n\n &.@{ant-prefix}-slide-down-leave.@{ant-prefix}-slide-down-leave-active&-placement-bottomLeft,\n &.@{ant-prefix}-slide-down-leave.@{ant-prefix}-slide-down-leave-active&-placement-bottom,\n &.@{ant-prefix}-slide-down-leave.@{ant-prefix}-slide-down-leave-active&-placement-bottomRight {\n animation-name: antSlideUpOut;\n }\n\n &.@{ant-prefix}-slide-up-leave.@{ant-prefix}-slide-up-leave-active&-placement-topLeft,\n &.@{ant-prefix}-slide-up-leave.@{ant-prefix}-slide-up-leave-active&-placement-top,\n &.@{ant-prefix}-slide-up-leave.@{ant-prefix}-slide-up-leave-active&-placement-topRight {\n animation-name: antSlideDownOut;\n }\n}\n\n.@{dropdown-prefix-cls}-trigger,\n.@{dropdown-prefix-cls}-link,\n.@{dropdown-prefix-cls}-button {\n > .@{iconfont-css-prefix}.@{iconfont-css-prefix}-down {\n font-size: 10px;\n vertical-align: baseline;\n }\n}\n\n.@{dropdown-prefix-cls}-button {\n white-space: nowrap;\n\n &.@{ant-prefix}-btn-group > .@{ant-prefix}-btn {\n &-loading,\n &-loading + .@{ant-prefix}-btn {\n cursor: default;\n pointer-events: none;\n }\n\n &-loading + .@{ant-prefix}-btn::before {\n display: block;\n }\n\n &:last-child:not(:first-child):not(.@{ant-prefix}-btn-icon-only) {\n padding-right: @padding-xs;\n padding-left: @padding-xs;\n }\n }\n}\n\n// https://github.com/ant-design/ant-design/issues/4903\n.@{dropdown-prefix-cls}-menu-dark {\n &,\n .@{dropdown-prefix-cls}-menu {\n background: @menu-dark-bg;\n }\n .@{dropdown-prefix-cls}-menu-item,\n .@{dropdown-prefix-cls}-menu-submenu-title,\n .@{dropdown-prefix-cls}-menu-item > a,\n .@{dropdown-prefix-cls}-menu-item > .@{iconfont-css-prefix} + span > a {\n color: @text-color-secondary-dark;\n .@{dropdown-prefix-cls}-menu-submenu-arrow::after {\n color: @text-color-secondary-dark;\n }\n\n &:hover {\n color: @text-color-inverse;\n background: transparent;\n }\n }\n .@{dropdown-prefix-cls}-menu-item-selected {\n &,\n &:hover,\n > a {\n color: @text-color-inverse;\n background: @primary-color;\n }\n }\n}\n\n@import './rtl';\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@dropdown-prefix-cls: ~'@{ant-prefix}-dropdown';\n\n.@{dropdown-prefix-cls} {\n &-rtl {\n direction: rtl;\n }\n\n &::before {\n .@{dropdown-prefix-cls}-rtl& {\n right: -7px;\n left: 0;\n }\n }\n\n &-menu {\n &&-rtl {\n direction: rtl;\n text-align: right;\n }\n\n &-item-group-title {\n .@{dropdown-prefix-cls}-rtl &,\n .@{dropdown-prefix-cls}-menu-submenu-rtl & {\n direction: rtl;\n text-align: right;\n }\n }\n\n &-submenu-popup {\n &.@{dropdown-prefix-cls}-menu-submenu-rtl {\n transform-origin: 100% 0;\n }\n\n ul,\n li {\n .@{dropdown-prefix-cls}-rtl & {\n text-align: right;\n }\n }\n }\n\n &-item,\n &-submenu-title {\n .@{dropdown-prefix-cls}-rtl & {\n text-align: right;\n }\n\n > .@{iconfont-css-prefix}:first-child,\n > span > .@{iconfont-css-prefix}:first-child {\n .@{dropdown-prefix-cls}-rtl & {\n margin-right: 0;\n margin-left: 8px;\n }\n }\n\n .@{dropdown-prefix-cls}-menu-submenu-expand-icon {\n .@{dropdown-prefix-cls}-rtl & {\n right: auto;\n left: @padding-xs;\n }\n\n .@{dropdown-prefix-cls}-menu-submenu-arrow-icon {\n .@{dropdown-prefix-cls}-rtl & {\n margin-left: 0 !important;\n transform: scaleX(-1);\n }\n }\n }\n }\n\n &-submenu-title {\n .@{dropdown-prefix-cls}-rtl & {\n padding-right: @control-padding-horizontal;\n padding-left: @control-padding-horizontal + @font-size-sm;\n }\n }\n\n &-submenu-vertical > & {\n .@{dropdown-prefix-cls}-rtl & {\n right: 100%;\n left: 0;\n margin-right: 4px;\n margin-left: 0;\n }\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@empty-prefix-cls: ~'@{ant-prefix}-empty';\n@empty-img-prefix-cls: ~'@{ant-prefix}-empty-img';\n\n.@{empty-prefix-cls} {\n margin: 0 8px;\n font-size: @empty-font-size;\n line-height: @line-height-base;\n text-align: center;\n\n &-image {\n height: 100px;\n margin-bottom: 8px;\n\n img {\n height: 100%;\n }\n\n svg {\n height: 100%;\n margin: auto;\n }\n }\n\n &-footer {\n margin-top: 16px;\n }\n\n // antd internal empty style\n &-normal {\n margin: 32px 0;\n color: @disabled-color;\n\n .@{empty-prefix-cls}-image {\n height: 40px;\n }\n }\n\n &-small {\n margin: 8px 0;\n color: @disabled-color;\n\n .@{empty-prefix-cls}-image {\n height: 35px;\n }\n }\n}\n\n.@{empty-img-prefix-cls}-default {\n // not support the definition because the less variables have no meaning\n & when (@theme = dark) {\n &-ellipse {\n fill: @white;\n fill-opacity: 0.08;\n }\n\n &-path {\n &-1 {\n fill: #262626;\n }\n\n &-2 {\n fill: url('#linearGradient-1');\n }\n\n &-3 {\n fill: #595959;\n }\n\n &-4 {\n fill: #434343;\n }\n\n &-5 {\n fill: #595959;\n }\n }\n\n &-g {\n fill: #434343;\n }\n }\n & when not (@theme = dark) {\n &-ellipse {\n fill: #f5f5f5;\n fill-opacity: 0.8;\n }\n\n &-path {\n &-1 {\n fill: #aeb8c2;\n }\n\n &-2 {\n fill: url('#linearGradient-1');\n }\n\n &-3 {\n fill: #f5f5f7;\n }\n\n &-4 {\n fill: #dce0e6;\n }\n\n &-5 {\n fill: #dce0e6;\n }\n }\n\n &-g {\n fill: @white;\n }\n }\n}\n\n.@{empty-img-prefix-cls}-simple {\n // not support the definition because the less variables have no meaning\n & when (@theme = dark) {\n &-ellipse {\n fill: @white;\n fill-opacity: 0.08;\n }\n\n &-g {\n stroke: #434343;\n }\n\n &-path {\n fill: #262626;\n stroke: #434343;\n }\n }\n & when not (@theme = dark) {\n &-ellipse {\n fill: #f5f5f5;\n }\n\n &-g {\n stroke: #d9d9d9;\n }\n\n &-path {\n fill: #fafafa;\n }\n }\n}\n\n@import './rtl';\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@empty-prefix-cls: ~'@{ant-prefix}-empty';\n\n.@{empty-prefix-cls} {\n &-rtl {\n direction: rtl;\n }\n}\n","@import (reference) '../../style/themes/index';\n\n@form-prefix-cls: ~'@{ant-prefix}-form';\n@form-item-prefix-cls: ~'@{form-prefix-cls}-item';\n\n// ================================================================\n// = Children Component =\n// ================================================================\n// FIXME: useless, remove in v5\n.@{form-item-prefix-cls} {\n .@{ant-prefix}-input-number {\n + .@{form-prefix-cls}-text {\n margin-left: 8px;\n }\n }\n}\n","@import (reference) '../../style/themes/index';\n\n@form-prefix-cls: ~'@{ant-prefix}-form';\n@form-item-prefix-cls: ~'@{form-prefix-cls}-item';\n\n.@{form-prefix-cls}-inline {\n display: flex;\n flex-wrap: wrap;\n\n .@{form-prefix-cls}-item {\n flex: none;\n flex-wrap: nowrap;\n margin-right: 16px;\n margin-bottom: 0;\n\n &-with-help {\n margin-bottom: @form-item-margin-bottom;\n }\n\n > .@{form-item-prefix-cls}-label,\n > .@{form-item-prefix-cls}-control {\n display: inline-block;\n vertical-align: top;\n }\n\n > .@{form-item-prefix-cls}-label {\n flex: none;\n }\n\n .@{form-prefix-cls}-text {\n display: inline-block;\n }\n\n .@{form-item-prefix-cls}-has-feedback {\n display: inline-block;\n }\n }\n}\n","@import (reference) '../../style/themes/index';\n\n@form-prefix-cls: ~'@{ant-prefix}-form';\n@form-item-prefix-cls: ~'@{form-prefix-cls}-item';\n\n.@{form-prefix-cls}-horizontal {\n .@{form-item-prefix-cls}-label {\n flex-grow: 0;\n }\n .@{form-item-prefix-cls}-control {\n flex: 1 1 0;\n // https://github.com/ant-design/ant-design/issues/32777\n // https://github.com/ant-design/ant-design/issues/33773\n min-width: 0;\n }\n // https://github.com/ant-design/ant-design/issues/32980\n // https://github.com/ant-design/ant-design/issues/34903\n .@{form-item-prefix-cls}-label[class$='-24'] + .@{form-item-prefix-cls}-control,\n .@{form-item-prefix-cls}-label[class*='-24 '] + .@{form-item-prefix-cls}-control {\n min-width: unset;\n }\n}\n","@import (reference) '../../style/themes/index';\n\n@form-prefix-cls: ~'@{ant-prefix}-form';\n@form-item-prefix-cls: ~'@{form-prefix-cls}-item';\n\n// ================== Label ==================\n.make-vertical-layout-label() {\n & when (@form-vertical-label-margin > 0) {\n margin: @form-vertical-label-margin;\n }\n padding: @form-vertical-label-padding;\n line-height: @line-height-base;\n white-space: initial;\n text-align: left;\n\n > label {\n margin: 0;\n\n &::after {\n display: none;\n }\n }\n}\n\n.make-vertical-layout() {\n .@{form-prefix-cls}-item .@{form-prefix-cls}-item-label {\n .make-vertical-layout-label();\n }\n .@{form-prefix-cls} {\n .@{form-prefix-cls}-item {\n flex-wrap: wrap;\n .@{form-prefix-cls}-item-label,\n .@{form-prefix-cls}-item-control {\n flex: 0 0 100%;\n max-width: 100%;\n }\n }\n }\n}\n\n.@{form-prefix-cls}-vertical {\n .@{form-item-prefix-cls} {\n &-row {\n flex-direction: column;\n }\n\n &-label > label {\n height: auto;\n }\n\n .@{form-prefix-cls}-item-control {\n width: 100%;\n }\n }\n}\n\n.@{form-prefix-cls}-vertical .@{form-item-prefix-cls}-label,\n/* when labelCol is 24, it is a vertical form */\n.@{ant-prefix}-col-24.@{form-item-prefix-cls}-label,\n.@{ant-prefix}-col-xl-24.@{form-item-prefix-cls}-label {\n .make-vertical-layout-label();\n}\n\n@media (max-width: @screen-xs-max) {\n .make-vertical-layout();\n .@{ant-prefix}-col-xs-24.@{form-item-prefix-cls}-label {\n .make-vertical-layout-label();\n }\n}\n\n@media (max-width: @screen-sm-max) {\n .@{ant-prefix}-col-sm-24.@{form-item-prefix-cls}-label {\n .make-vertical-layout-label();\n }\n}\n\n@media (max-width: @screen-md-max) {\n .@{ant-prefix}-col-md-24.@{form-item-prefix-cls}-label {\n .make-vertical-layout-label();\n }\n}\n\n@media (max-width: @screen-lg-max) {\n .@{ant-prefix}-col-lg-24.@{form-item-prefix-cls}-label {\n .make-vertical-layout-label();\n }\n}\n\n@media (max-width: @screen-xl-max) {\n .@{ant-prefix}-col-xl-24.@{form-item-prefix-cls}-label {\n .make-vertical-layout-label();\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n@import '../../input/style/mixin';\n@import '../../button/style/mixin';\n@import '../../grid/style/mixin';\n\n@form-prefix-cls: ~'@{ant-prefix}-form';\n@form-item-prefix-cls: ~'@{form-prefix-cls}-item';\n\n.@{form-prefix-cls} {\n &-rtl {\n direction: rtl;\n }\n}\n\n// ================================================================\n// = Item =\n// ================================================================\n.@{form-item-prefix-cls} {\n // ==============================================================\n // = Label =\n // ==============================================================\n &-label {\n .@{form-prefix-cls}-rtl & {\n text-align: left;\n }\n\n > label {\n &.@{form-item-prefix-cls}-required::before {\n .@{form-prefix-cls}-rtl & {\n margin-right: 0;\n margin-left: 4px;\n }\n }\n\n &::after {\n .@{form-prefix-cls}-rtl & {\n margin: 0 @form-item-label-colon-margin-left 0 @form-item-label-colon-margin-right;\n }\n }\n\n .@{form-item-prefix-cls}-optional {\n .@{form-prefix-cls}-rtl & {\n margin-right: @margin-xss;\n margin-left: 0;\n }\n }\n }\n }\n\n // ==============================================================\n // = Input =\n // ==============================================================\n &-control {\n .@{ant-prefix}-col-rtl &:first-child {\n width: 100%;\n }\n }\n\n // status\n &-has-feedback {\n .@{ant-prefix}-input {\n .@{form-prefix-cls}-rtl & {\n padding-right: @input-padding-horizontal-base;\n padding-left: 24px;\n }\n }\n\n .@{ant-prefix}-input-affix-wrapper {\n .@{ant-prefix}-input-suffix {\n .@{form-prefix-cls}-rtl & {\n padding-right: @input-padding-horizontal-base;\n padding-left: 18px;\n }\n }\n .@{ant-prefix}-input {\n .@{form-prefix-cls}-rtl & {\n padding: 0;\n }\n }\n }\n\n .@{ant-prefix}-input-number-affix-wrapper {\n .@{ant-prefix}-input-number {\n .@{form-prefix-cls}-rtl & {\n padding: 0;\n }\n }\n }\n\n .@{ant-prefix}-input-search:not(.@{ant-prefix}-input-search-enter-button) {\n .@{ant-prefix}-input-suffix {\n .@{form-prefix-cls}-rtl & {\n right: auto;\n left: 28px;\n }\n }\n }\n\n .@{ant-prefix}-input-number {\n .@{form-prefix-cls}-rtl & {\n padding-left: 18px;\n }\n }\n\n > .@{ant-prefix}-select .@{ant-prefix}-select-arrow,\n > .@{ant-prefix}-select .@{ant-prefix}-select-clear,\n :not(.@{ant-prefix}-input-group-addon) > .@{ant-prefix}-select .@{ant-prefix}-select-arrow,\n :not(.@{ant-prefix}-input-group-addon) > .@{ant-prefix}-select .@{ant-prefix}-select-clear,\n :not(.@{ant-prefix}-input-number-group-addon)\n > .@{ant-prefix}-select\n .@{ant-prefix}-select-arrow,\n :not(.@{ant-prefix}-input-number-group-addon)\n > .@{ant-prefix}-select\n .@{ant-prefix}-select-clear {\n .@{form-prefix-cls}-rtl & {\n right: auto;\n left: 32px;\n }\n }\n\n > .@{ant-prefix}-select .@{ant-prefix}-select-selection-selected-value,\n :not(.@{ant-prefix}-input-group-addon)\n > .@{ant-prefix}-select\n .@{ant-prefix}-select-selection-selected-value,\n :not(.@{ant-prefix}-input-number-group-addon)\n > .@{ant-prefix}-select\n .@{ant-prefix}-select-selection-selected-value {\n .@{form-prefix-cls}-rtl & {\n padding-right: 0;\n padding-left: 42px;\n }\n }\n\n .@{ant-prefix}-cascader-picker {\n &-arrow {\n .@{form-prefix-cls}-rtl & {\n margin-right: 0;\n margin-left: 19px;\n }\n }\n\n &-clear {\n .@{form-prefix-cls}-rtl & {\n right: auto;\n left: 32px;\n }\n }\n }\n\n .@{ant-prefix}-picker {\n .@{form-prefix-cls}-rtl & {\n padding-right: @input-padding-horizontal-base;\n padding-left: @input-padding-horizontal-base + @font-size-base * 1.3;\n }\n\n &-large {\n .@{form-prefix-cls}-rtl & {\n padding-right: @input-padding-horizontal-lg;\n padding-left: @input-padding-horizontal-lg + @font-size-base * 1.3;\n }\n }\n\n &-small {\n .@{form-prefix-cls}-rtl & {\n padding-right: @input-padding-horizontal-sm;\n padding-left: @input-padding-horizontal-sm + @font-size-base * 1.3;\n }\n }\n }\n\n &.@{form-item-prefix-cls} {\n &-has-success,\n &-has-warning,\n &-has-error,\n &-is-validating {\n // ====================== Icon ======================\n .@{form-item-prefix-cls}-children-icon {\n .@{form-prefix-cls}-rtl & {\n right: auto;\n left: 0;\n }\n }\n }\n }\n }\n}\n\n// inline\n.@{form-prefix-cls}-inline {\n .@{form-prefix-cls}-item {\n .@{form-prefix-cls}-rtl& {\n margin-right: 0;\n margin-left: 16px;\n }\n }\n}\n\n// vertical\n.make-vertical-layout-label() {\n .@{form-prefix-cls}-rtl& {\n text-align: right;\n }\n}\n","@import (reference) '../../style/themes/index';\n\n@form-prefix-cls: ~'@{ant-prefix}-form';\n@form-item-prefix-cls: ~'@{form-prefix-cls}-item';\n\n.@{form-item-prefix-cls} {\n // ================================================================\n // = Status =\n // ================================================================\n\n /* Some non-status related component style is in `components.less` */\n\n // ========================= Explain =========================\n\n /* To support leave along ErrorList. We add additional className to handle explain style */\n &-explain {\n &-error {\n color: @error-color;\n }\n\n &-warning {\n color: @warning-color;\n }\n }\n\n &-has-feedback {\n // ======================== Switch =========================\n .@{ant-prefix}-switch {\n margin: 2px 0 4px;\n }\n }\n\n // ======================== Warning ========================\n &-has-warning {\n .form-control-validation(@warning-color; @warning-color; @form-warning-input-bg; @warning-color-hover; @warning-color-outline);\n }\n\n // ========================= Error =========================\n &-has-error {\n .form-control-validation(@error-color; @error-color; @form-error-input-bg; @error-color-hover; @error-color-outline);\n }\n}\n","@import '../../input/style/mixin';\n\n.form-control-validation(\n @text-color: @input-color;\n @border-color: @input-border-color;\n @background-color: @input-bg;\n @hoverBorderColor: @primary-color-hover;\n @outlineColor: @primary-color-outline;\n) {\n .@{ant-prefix}-form-item-split {\n color: @text-color;\n }\n}\n\n// Reset form styles\n// -----------------------------\n// Based on Bootstrap framework\n.reset-form() {\n legend {\n display: block;\n width: 100%;\n margin-bottom: 20px;\n padding: 0;\n color: @text-color-secondary;\n font-size: @font-size-lg;\n line-height: inherit;\n border: 0;\n border-bottom: @border-width-base @border-style-base @border-color-base;\n }\n\n label {\n font-size: @font-size-base;\n }\n\n input[type='search'] {\n box-sizing: border-box;\n }\n\n // Position radios and checkboxes better\n input[type='radio'],\n input[type='checkbox'] {\n line-height: normal;\n }\n\n input[type='file'] {\n display: block;\n }\n\n // Make range inputs behave like textual form controls\n input[type='range'] {\n display: block;\n width: 100%;\n }\n\n // Make multiple select elements height not fixed\n select[multiple],\n select[size] {\n height: auto;\n }\n\n // Focus for file, radio, and checkbox\n input[type='file']:focus,\n input[type='radio']:focus,\n input[type='checkbox']:focus {\n outline: thin dotted;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n }\n\n // Adjust output element\n output {\n display: block;\n padding-top: 15px;\n color: @input-color;\n font-size: @font-size-base;\n line-height: @line-height-base;\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n@import '../../input/style/mixin';\n@import '../../button/style/mixin';\n@import '../../grid/style/mixin';\n@import './components';\n@import './inline';\n@import './horizontal';\n@import './vertical';\n@import './status';\n@import './mixin';\n\n@form-prefix-cls: ~'@{ant-prefix}-form';\n@form-item-prefix-cls: ~'@{form-prefix-cls}-item';\n@form-font-height: ceil(@font-size-base * @line-height-base);\n\n.@{form-prefix-cls} {\n .reset-component();\n .reset-form();\n\n .@{form-prefix-cls}-text {\n display: inline-block;\n padding-right: 8px;\n }\n\n // ================================================================\n // = Size =\n // ================================================================\n .formSize(@input-height) {\n .@{form-item-prefix-cls}-label > label {\n height: @input-height;\n }\n\n .@{form-item-prefix-cls}-control-input {\n min-height: @input-height;\n }\n }\n\n &-small {\n .formSize(@input-height-sm);\n }\n\n &-large {\n .formSize(@input-height-lg);\n }\n}\n\n.explainAndExtraDistance(@num) when (@num >= 0) {\n padding-top: floor(@num);\n}\n\n.explainAndExtraDistance(@num) when (@num < 0) {\n margin-top: ceil(@num);\n margin-bottom: ceil(@num);\n}\n\n// ================================================================\n// = Item =\n// ================================================================\n.@{form-item-prefix-cls} {\n .reset-component();\n\n margin-bottom: @form-item-margin-bottom;\n vertical-align: top;\n\n &-with-help {\n transition: none;\n }\n\n &-hidden,\n &-hidden.@{ant-prefix}-row {\n // https://github.com/ant-design/ant-design/issues/26141\n display: none;\n }\n\n // ==============================================================\n // = Label =\n // ==============================================================\n &-label {\n display: inline-block;\n flex-grow: 0;\n overflow: hidden;\n white-space: nowrap;\n text-align: right;\n vertical-align: middle;\n\n &-left {\n text-align: left;\n }\n\n &-wrap {\n overflow: unset;\n line-height: (@line-height-base - 0.25em);\n white-space: unset;\n }\n\n > label {\n position: relative;\n display: inline-flex;\n align-items: center;\n max-width: 100%;\n height: @form-item-label-height;\n color: @label-color;\n font-size: @form-item-label-font-size;\n\n > .@{iconfont-css-prefix} {\n font-size: @form-item-label-font-size;\n vertical-align: top;\n }\n\n // Required mark\n &.@{form-item-prefix-cls}-required:not(.@{form-item-prefix-cls}-required-mark-optional)::before {\n display: inline-block;\n margin-right: 4px;\n color: @label-required-color;\n font-size: @form-item-label-font-size;\n font-family: SimSun, sans-serif;\n line-height: 1;\n content: '*';\n\n .@{form-prefix-cls}-hide-required-mark & {\n display: none;\n }\n }\n\n // Optional mark\n .@{form-item-prefix-cls}-optional {\n display: inline-block;\n margin-left: @margin-xss;\n color: @text-color-secondary;\n\n .@{form-prefix-cls}-hide-required-mark & {\n display: none;\n }\n }\n\n // Optional mark\n .@{form-item-prefix-cls}-tooltip {\n color: @text-color-secondary;\n cursor: help;\n writing-mode: horizontal-tb;\n margin-inline-start: @margin-xss;\n }\n\n &::after {\n & when (@form-item-trailing-colon=true) {\n content: ':';\n }\n & when not (@form-item-trailing-colon=true) {\n content: ' ';\n }\n\n position: relative;\n top: -0.5px;\n margin: 0 @form-item-label-colon-margin-right 0 @form-item-label-colon-margin-left;\n }\n\n &.@{form-item-prefix-cls}-no-colon::after {\n content: ' ';\n }\n }\n }\n\n // ==============================================================\n // = Input =\n // ==============================================================\n &-control {\n display: flex;\n flex-direction: column;\n flex-grow: 1;\n\n &:first-child:not([class^=~\"'@{ant-prefix}-col-'\"]):not([class*=~\"' @{ant-prefix}-col-'\"]) {\n width: 100%;\n }\n }\n\n &-control-input {\n position: relative;\n display: flex;\n align-items: center;\n min-height: @input-height-base;\n\n &-content {\n flex: auto;\n max-width: 100%;\n }\n }\n\n // ==============================================================\n // = Explain =\n // ==============================================================\n &-explain,\n &-extra {\n clear: both;\n color: @text-color-secondary;\n font-size: @font-size-base;\n line-height: @line-height-base;\n transition: color 0.3s @ease-out; // sync input color transition\n .explainAndExtraDistance((@form-item-margin-bottom - @form-font-height) / 2);\n }\n\n &-explain-connected {\n width: 100%;\n }\n\n &-extra {\n min-height: @form-item-margin-bottom;\n }\n\n &-with-help &-explain {\n height: auto;\n // min-height: @form-item-margin-bottom;\n opacity: 1;\n }\n\n // ==============================================================\n // = Feedback Icon =\n // ==============================================================\n &-feedback-icon {\n font-size: @font-size-base;\n text-align: center;\n visibility: visible;\n animation: zoomIn 0.3s @ease-out-back;\n pointer-events: none;\n\n &-success {\n color: @success-color;\n }\n\n &-error {\n color: @error-color;\n }\n\n &-warning {\n color: @warning-color;\n }\n\n &-validating {\n color: @primary-color;\n }\n }\n}\n\n// >>>>>>>>>> Motion <<<<<<<<<<\n// Explain holder\n.@{ant-prefix}-show-help {\n transition: opacity @animation-duration-slow @ease-in-out;\n\n &-appear,\n &-enter {\n opacity: 0;\n\n &-active {\n opacity: 1;\n }\n }\n\n &-leave {\n opacity: 1;\n\n &-active {\n opacity: 0;\n }\n }\n}\n\n// Explain\n.@{ant-prefix}-show-help-item {\n overflow: hidden;\n transition: height @animation-duration-slow @ease-in-out,\n opacity @animation-duration-slow @ease-in-out, transform @animation-duration-slow @ease-in-out !important;\n\n &-appear,\n &-enter {\n transform: translateY(-5px);\n opacity: 0;\n\n &-active {\n transform: translateY(0);\n opacity: 1;\n }\n }\n\n &-leave {\n transition: height @animation-duration-base @ease-in-out,\n opacity @animation-duration-base @ease-in-out, transform @animation-duration-base @ease-in-out !important;\n }\n\n &-leave-active {\n transform: translateY(-5px);\n }\n}\n\n// need there different zoom animation\n// otherwise won't trigger anim\n@keyframes diffZoomIn1 {\n 0% {\n transform: scale(0);\n opacity: 0;\n }\n\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n}\n\n@keyframes diffZoomIn2 {\n 0% {\n transform: scale(0);\n opacity: 0;\n }\n\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n}\n\n@keyframes diffZoomIn3 {\n 0% {\n transform: scale(0);\n opacity: 0;\n }\n\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n}\n\n@import './rtl';\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n@import './mixin';\n\n// Grid system\n.@{row-prefix-cls} {\n display: flex;\n flex-flow: row wrap;\n min-width: 0;\n\n &::before,\n &::after {\n display: flex;\n }\n\n // No wrap of flex\n &-no-wrap {\n flex-wrap: nowrap;\n }\n}\n\n// x轴原点\n.@{row-prefix-cls}-start {\n justify-content: flex-start;\n}\n\n// x轴居中\n.@{row-prefix-cls}-center {\n justify-content: center;\n}\n\n// x轴反方向\n.@{row-prefix-cls}-end {\n justify-content: flex-end;\n}\n\n// x轴平分\n.@{row-prefix-cls}-space-between {\n justify-content: space-between;\n}\n\n// x轴有间隔地平分\n.@{row-prefix-cls}-space-around {\n justify-content: space-around;\n}\n\n// x轴有间隔地均分\n.@{row-prefix-cls}-space-evenly {\n justify-content: space-evenly;\n}\n\n// 顶部对齐\n.@{row-prefix-cls}-top {\n align-items: flex-start;\n}\n\n// 居中对齐\n.@{row-prefix-cls}-middle {\n align-items: center;\n}\n\n// 底部对齐\n.@{row-prefix-cls}-bottom {\n align-items: flex-end;\n}\n\n.@{col-prefix-cls} {\n position: relative;\n max-width: 100%;\n // Prevent columns from collapsing when empty\n min-height: 1px;\n}\n\n.make-grid();\n\n// Extra small grid\n//\n// Columns, offsets, pushes, and pulls for extra small devices like\n// smartphones.\n\n.make-grid(-xs);\n\n// Small grid\n//\n// Columns, offsets, pushes, and pulls for the small device range, from phones\n// to tablets.\n\n@media (min-width: @screen-sm-min) {\n .make-grid(-sm);\n}\n\n// Medium grid\n//\n// Columns, offsets, pushes, and pulls for the desktop device range.\n\n@media (min-width: @screen-md-min) {\n .make-grid(-md);\n}\n\n// Large grid\n//\n// Columns, offsets, pushes, and pulls for the large desktop device range.\n\n@media (min-width: @screen-lg-min) {\n .make-grid(-lg);\n}\n\n// Extra Large grid\n//\n// Columns, offsets, pushes, and pulls for the full hd device range.\n\n@media (min-width: @screen-xl-min) {\n .make-grid(-xl);\n}\n\n// Extra Extra Large grid\n//\n// Columns, offsets, pushes, and pulls for the full hd device range.\n\n@media (min-width: @screen-xxl-min) {\n .make-grid(-xxl);\n}\n\n@import './rtl';\n","@import '../../style/mixins/index';\n\n@row-prefix-cls: ~'@{ant-prefix}-row';\n@col-prefix-cls: ~'@{ant-prefix}-col';\n\n// mixins for grid system\n// ------------------------\n\n.loop-grid-columns(@index, @class) when (@index > 0) {\n .@{col-prefix-cls}@{class}-@{index} {\n display: block;\n flex: 0 0 percentage((@index / @grid-columns));\n max-width: percentage((@index / @grid-columns));\n }\n .@{col-prefix-cls}@{class}-push-@{index} {\n left: percentage((@index / @grid-columns));\n }\n .@{col-prefix-cls}@{class}-pull-@{index} {\n right: percentage((@index / @grid-columns));\n }\n .@{col-prefix-cls}@{class}-offset-@{index} {\n margin-left: percentage((@index / @grid-columns));\n }\n .@{col-prefix-cls}@{class}-order-@{index} {\n order: @index;\n }\n .loop-grid-columns((@index - 1), @class);\n}\n\n.loop-grid-columns(@index, @class) when (@index = 0) {\n .@{col-prefix-cls}@{class}-@{index} {\n display: none;\n }\n .@{col-prefix-cls}-push-@{index} {\n left: auto;\n }\n .@{col-prefix-cls}-pull-@{index} {\n right: auto;\n }\n .@{col-prefix-cls}@{class}-push-@{index} {\n left: auto;\n }\n .@{col-prefix-cls}@{class}-pull-@{index} {\n right: auto;\n }\n .@{col-prefix-cls}@{class}-offset-@{index} {\n margin-left: 0;\n }\n .@{col-prefix-cls}@{class}-order-@{index} {\n order: 0;\n }\n}\n\n.make-grid(@class: ~'') {\n .loop-grid-columns(@grid-columns, @class);\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n@import './mixin';\n\n.@{row-prefix-cls} {\n &-rtl {\n direction: rtl;\n }\n}\n\n// mixin\n.loop-grid-columns(@index, @class) when (@index > 0) {\n .@{col-prefix-cls}@{class}-push-@{index} {\n // reset property in RTL direction\n &.@{col-prefix-cls}-rtl {\n right: percentage((@index / @grid-columns));\n left: auto;\n }\n }\n\n .@{col-prefix-cls}@{class}-pull-@{index} {\n // reset property in RTL direction\n &.@{col-prefix-cls}-rtl {\n right: auto;\n left: percentage((@index / @grid-columns));\n }\n }\n\n .@{col-prefix-cls}@{class}-offset-@{index} {\n // reset property in RTL direction\n &.@{col-prefix-cls}-rtl {\n margin-right: percentage((@index / @grid-columns));\n margin-left: 0;\n }\n }\n}\n\n.loop-grid-columns(@index, @class) when (@index = 0) {\n .@{col-prefix-cls}-push-@{index} {\n // reset property in RTL direction\n &.@{col-prefix-cls}-rtl {\n right: auto;\n }\n }\n\n .@{col-prefix-cls}-pull-@{index} {\n &.@{col-prefix-cls}-rtl {\n left: auto;\n }\n }\n\n .@{col-prefix-cls}@{class}-push-@{index} {\n &.@{col-prefix-cls}-rtl {\n right: auto;\n }\n }\n\n .@{col-prefix-cls}@{class}-pull-@{index} {\n &.@{col-prefix-cls}-rtl {\n left: auto;\n }\n }\n\n .@{col-prefix-cls}@{class}-offset-@{index} {\n &.@{col-prefix-cls}-rtl {\n margin-right: 0;\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@image-prefix-cls: ~'@{ant-prefix}-image';\n@image-preview-prefix-cls: ~'@{image-prefix-cls}-preview';\n\n.@{image-prefix-cls} {\n position: relative;\n display: inline-block;\n\n &-img {\n width: 100%;\n height: auto;\n vertical-align: middle;\n\n &-placeholder {\n background-color: @image-bg;\n background-image: url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTQuNSAyLjVoLTEzQS41LjUgMCAwIDAgMSAzdjEwYS41LjUgMCAwIDAgLjUuNWgxM2EuNS41IDAgMCAwIC41LS41VjNhLjUuNSAwIDAgMC0uNS0uNXpNNS4yODEgNC43NWExIDEgMCAwIDEgMCAyIDEgMSAwIDAgMSAwLTJ6bTguMDMgNi44M2EuMTI3LjEyNyAwIDAgMS0uMDgxLjAzSDIuNzY5YS4xMjUuMTI1IDAgMCAxLS4wOTYtLjIwN2wyLjY2MS0zLjE1NmEuMTI2LjEyNiAwIDAgMSAuMTc3LS4wMTZsLjAxNi4wMTZMNy4wOCAxMC4wOWwyLjQ3LTIuOTNhLjEyNi4xMjYgMCAwIDEgLjE3Ny0uMDE2bC4wMTUuMDE2IDMuNTg4IDQuMjQ0YS4xMjcuMTI3IDAgMCAxLS4wMi4xNzV6IiBmaWxsPSIjOEM4QzhDIiBmaWxsLXJ1bGU9Im5vbnplcm8iLz48L3N2Zz4=');\n background-repeat: no-repeat;\n background-position: center center;\n background-size: 30%;\n }\n }\n\n &-mask {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n color: @text-color-inverse;\n background: fade(@black, 50%);\n cursor: pointer;\n opacity: 0;\n transition: opacity @animation-duration-slow;\n\n &-info {\n padding: 0 @padding-xss;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n .@{iconfont-css-prefix} {\n margin-inline-end: @margin-xss;\n }\n }\n\n &:hover {\n opacity: 1;\n }\n }\n\n &-placeholder {\n .box();\n }\n\n &-preview {\n .modal-mask();\n\n height: 100%;\n text-align: center;\n\n &-body {\n .box();\n overflow: hidden;\n }\n\n &-img {\n max-width: 100%;\n max-height: 100%;\n vertical-align: middle;\n transform: scale3d(1, 1, 1);\n cursor: grab;\n transition: transform 0.3s @ease-out 0s;\n user-select: none;\n pointer-events: auto;\n\n &-wrapper {\n .box();\n transition: transform 0.3s @ease-out 0s;\n\n &::before {\n display: inline-block;\n width: 1px;\n height: 50%;\n margin-right: -1px;\n content: '';\n }\n }\n }\n\n &-moving {\n .@{image-prefix-cls}-preview-img {\n cursor: grabbing;\n\n &-wrapper {\n transition-duration: 0s;\n }\n }\n }\n\n &-wrap {\n z-index: @zindex-image;\n }\n\n &-operations {\n .reset-component();\n position: absolute;\n top: 0;\n right: 0;\n z-index: 1;\n display: flex;\n flex-direction: row-reverse;\n align-items: center;\n width: 100%;\n color: @image-preview-operation-color;\n list-style: none;\n background: fade(@modal-mask-bg, 10%);\n pointer-events: auto;\n\n &-operation {\n margin-left: @control-padding-horizontal;\n padding: @control-padding-horizontal;\n cursor: pointer;\n\n &-disabled {\n color: @image-preview-operation-disabled-color;\n pointer-events: none;\n }\n\n &:last-of-type {\n margin-left: 0;\n }\n }\n\n &-progress {\n position: absolute;\n left: 50%;\n transform: translateX(-50%);\n }\n\n &-icon {\n font-size: @image-preview-operation-size;\n }\n }\n\n &-switch-left,\n &-switch-right {\n position: absolute;\n top: 50%;\n right: 10px;\n z-index: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 44px;\n height: 44px;\n margin-top: -22px;\n color: @image-preview-operation-color;\n background: fade(@modal-mask-bg, 10%);\n border-radius: 50%;\n cursor: pointer;\n pointer-events: auto;\n\n &-disabled {\n color: @image-preview-operation-disabled-color;\n cursor: not-allowed;\n > .@{iconfont-css-prefix} {\n cursor: not-allowed;\n }\n }\n > .@{iconfont-css-prefix} {\n font-size: 18px;\n }\n }\n\n &-switch-left {\n left: 10px;\n }\n\n &-switch-right {\n right: 10px;\n }\n }\n}\n",".box(@position: absolute) {\n position: @position;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n}\n","@import 'box';\n\n.modal-mask() {\n pointer-events: none;\n\n &.@{ant-prefix}-zoom-enter,\n &.@{ant-prefix}-zoom-appear {\n transform: none; // reset scale avoid mousePosition bug\n opacity: 0;\n animation-duration: @animation-duration-slow;\n user-select: none; // https://github.com/ant-design/ant-design/issues/11777\n }\n\n &-mask {\n .box(fixed);\n z-index: @zindex-modal-mask;\n height: 100%;\n background-color: @modal-mask-bg;\n\n &-hidden {\n display: none;\n }\n }\n\n &-wrap {\n .box(fixed);\n overflow: auto;\n outline: 0;\n }\n}\n","@import './mixin';\n@import (reference) '../../style/themes/index';\n@input-prefix-cls: ~'@{ant-prefix}-input';\n\n@input-affix-margin: 4px;\n\n.@{ant-prefix}-input {\n &-affix-wrapper {\n .input();\n display: inline-flex;\n\n &:not(&-disabled):hover {\n .hover();\n z-index: 1;\n .@{ant-prefix}-input-search-with-button & {\n z-index: 0;\n }\n }\n\n &-focused,\n &:focus {\n z-index: 1;\n }\n\n &-disabled {\n .@{ant-prefix}-input[disabled] {\n background: transparent;\n }\n }\n\n > .@{ant-prefix}-input {\n font-size: inherit;\n border: none;\n outline: none;\n\n &:focus {\n box-shadow: none !important;\n }\n\n &:not(textarea) {\n padding: 0;\n }\n }\n\n &::before {\n width: 0;\n visibility: hidden;\n content: '\\a0';\n }\n }\n\n &-prefix,\n &-suffix {\n display: flex;\n flex: none;\n align-items: center;\n\n > *:not(:last-child) {\n margin-right: 8px;\n }\n }\n\n &-show-count-suffix {\n color: @text-color-secondary;\n }\n\n &-show-count-has-suffix {\n margin-right: 2px;\n }\n\n &-prefix {\n margin-right: @input-affix-margin;\n }\n\n &-suffix {\n margin-left: @input-affix-margin;\n }\n}\n","@import (reference) '../../style/themes/index';\n@input-prefix-cls: ~'@{ant-prefix}-input';\n\n// ========================= Input =========================\n.@{iconfont-css-prefix}.@{input-prefix-cls}-clear-icon,\n.@{input-prefix-cls}-clear-icon {\n margin: 0;\n color: @disabled-color;\n font-size: @font-size-sm;\n vertical-align: -1px;\n // https://github.com/ant-design/ant-design/pull/18151\n // https://codesandbox.io/s/wizardly-sun-u10br\n cursor: pointer;\n transition: color 0.3s;\n\n &:hover {\n color: @text-color-secondary;\n }\n\n &:active {\n color: @text-color;\n }\n\n &-hidden {\n visibility: hidden;\n }\n\n &-has-suffix {\n margin: 0 @input-affix-margin;\n }\n}\n\n// ======================= TextArea ========================\n.@{input-prefix-cls}-affix-wrapper.@{input-prefix-cls}-affix-wrapper-textarea-with-clear-btn {\n padding: 0;\n\n .@{input-prefix-cls}-clear-icon {\n position: absolute;\n top: 8px;\n right: 8px;\n z-index: 1;\n }\n}\n","@import './mixin';\n\n@input-prefix-cls: ~'@{ant-prefix}-input';\n\n@input-wrapper-cls: @input-prefix-cls, ~'@{input-prefix-cls}-affix-wrapper';\n\neach(@input-wrapper-cls, {\n .@{value} {\n &-status-error {\n .status-color(@value, @error-color, @error-color, @input-bg, @error-color-hover, @error-color-outline);\n .status-color-common(@input-prefix-cls, @error-color, @error-color, @input-bg, @error-color-hover, @error-color-outline);\n }\n\n &-status-warning {\n .status-color(@value, @warning-color, @warning-color, @input-bg, @warning-color-hover, @warning-color-outline);\n .status-color-common(@input-prefix-cls, @warning-color, @warning-color, @input-bg, @warning-color-hover, @warning-color-outline);\n }\n }\n});\n\n.@{input-prefix-cls}-textarea {\n &-status-error,\n &-status-warning,\n &-status-success,\n &-status-validating {\n &.@{input-prefix-cls}-textarea-has-feedback {\n .@{input-prefix-cls} {\n padding-right: 24px;\n }\n }\n }\n}\n\n.@{input-prefix-cls}-group-wrapper {\n &-status-error {\n .group-status-color(@input-prefix-cls, @error-color, @error-color);\n }\n\n &-status-warning {\n .group-status-color(@input-prefix-cls, @warning-color, @warning-color);\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n@import './mixin';\n@import './affix';\n@import './allow-clear';\n@import './status';\n@input-prefix-cls: ~'@{ant-prefix}-input';\n\n// Input styles\n.@{input-prefix-cls} {\n .reset-component();\n .input();\n\n //== Style for input-group: input with label, with button or dropdown...\n &-group {\n .reset-component();\n .input-group(~'@{input-prefix-cls}');\n\n &-wrapper {\n display: inline-block;\n width: 100%;\n text-align: start;\n vertical-align: top; // https://github.com/ant-design/ant-design/issues/6403\n }\n }\n\n &-password-icon.@{iconfont-css-prefix} {\n color: @text-color-secondary;\n cursor: pointer;\n transition: all 0.3s;\n\n &:hover {\n color: @input-icon-hover-color;\n }\n }\n\n &[type='color'] {\n height: @input-height-base;\n\n &.@{input-prefix-cls}-lg {\n height: @input-height-lg;\n }\n &.@{input-prefix-cls}-sm {\n height: @input-height-sm;\n padding-top: 3px;\n padding-bottom: 3px;\n }\n }\n\n &-textarea-show-count {\n // https://github.com/ant-design/ant-design/issues/33049\n > .@{input-prefix-cls} {\n height: 100%;\n }\n\n &::after {\n float: right;\n color: @text-color-secondary;\n white-space: nowrap;\n content: attr(data-count);\n pointer-events: none;\n }\n\n &.@{input-prefix-cls}-textarea-in-form-item {\n &::after {\n margin-bottom: -22px;\n }\n }\n }\n\n &-textarea-suffix {\n position: absolute;\n top: 0;\n right: @input-padding-horizontal-base;\n bottom: 0;\n z-index: 1;\n display: inline-flex;\n align-items: center;\n margin: auto;\n }\n\n // ===================== Compact Item Styles =====================\n .compact-item(@input-prefix-cls);\n}\n\n@import './search-input';\n@import './rtl';\n@import './IE11';\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n@import '../../input/style/mixin';\n\n@input-number-prefix-cls: ~'@{ant-prefix}-input-number';\n\n.@{input-number-prefix-cls} {\n &-rtl {\n direction: rtl;\n }\n\n &-handler {\n .@{input-number-prefix-cls}-rtl & {\n border-right: @border-width-base @border-style-base @input-number-handler-border-color;\n border-left: 0;\n }\n\n &-wrap {\n .@{input-number-prefix-cls}-rtl & {\n right: auto;\n left: 0;\n }\n\n .@{input-number-prefix-cls}-rtl.@{input-number-prefix-cls}-borderless & {\n border-right-width: 0;\n }\n }\n\n &-up {\n .@{input-number-prefix-cls}-rtl & {\n border-top-right-radius: 0;\n }\n }\n\n &-down {\n .@{input-number-prefix-cls}-rtl & {\n border-bottom-right-radius: 0;\n }\n }\n }\n\n &-input {\n .@{input-number-prefix-cls}-rtl & {\n direction: ltr;\n text-align: right;\n }\n }\n}\n\n// https://github.com/ant-design/ant-design/issues/35870\n.input-group(@input-number-prefix-cls) {\n > .@{input-number-prefix-cls}-rtl:first-child {\n border-radius: 0 @border-radius-base @border-radius-base 0;\n }\n > .@{input-number-prefix-cls}-rtl:last-child {\n border-radius: @border-radius-base 0 0 @border-radius-base;\n }\n\n &-addon {\n .@{input-number-prefix-cls}-group-rtl &:first-child {\n border-right: @border-width-base @border-style-base @input-border-color;\n border-left: 0;\n border-radius: 0 @border-radius-base @border-radius-base 0;\n }\n .@{input-number-prefix-cls}-group-rtl &:last-child {\n border-right: 0;\n border-left: @border-width-base @border-style-base @input-border-color;\n border-radius: @border-radius-base 0 0 @border-radius-base;\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n@import '../../button/style/mixin';\n@import './mixin';\n\n@search-prefix: ~'@{ant-prefix}-input-search';\n\n.@{search-prefix} {\n .@{ant-prefix}-input {\n &:hover,\n &:focus {\n border-color: @input-hover-border-color;\n\n + .@{ant-prefix}-input-group-addon .@{search-prefix}-button:not(.@{ant-prefix}-btn-primary) {\n border-left-color: @input-hover-border-color;\n }\n }\n }\n\n .@{ant-prefix}-input-affix-wrapper {\n border-radius: 0;\n }\n\n // fix slight height diff in Firefox:\n // https://ant.design/components/auto-complete-cn/#components-auto-complete-demo-certain-category\n .@{ant-prefix}-input-lg {\n line-height: @line-height-base - 0.0002;\n }\n\n > .@{ant-prefix}-input-group {\n > .@{ant-prefix}-input-group-addon:last-child {\n left: -1px;\n padding: 0;\n border: 0;\n\n .@{search-prefix}-button {\n padding-top: 0;\n padding-bottom: 0;\n border-radius: 0 @border-radius-base @border-radius-base 0;\n }\n\n .@{search-prefix}-button:not(.@{ant-prefix}-btn-primary) {\n color: @text-color-secondary;\n\n &.@{ant-prefix}-btn-loading::before {\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n }\n }\n }\n }\n\n &-button {\n height: @input-height-base;\n\n &:hover,\n &:focus {\n z-index: 1;\n }\n }\n\n &-large &-button {\n height: @input-height-lg;\n }\n\n &-small &-button {\n height: @input-height-sm;\n }\n\n // ===================== Compact Item Customized Styles =====================\n &.@{input-prefix-cls}-compact-item {\n &:not(.@{input-prefix-cls}-compact-item-rtl) {\n &:not(.@{input-prefix-cls}-compact-last-item) {\n .@{input-prefix-cls}-group-addon {\n .@{input-prefix-cls}-search-button {\n margin-right: -@border-width-base;\n border-radius: 0;\n }\n }\n }\n }\n\n &:not(.@{input-prefix-cls}-compact-first-item) {\n .@{input-prefix-cls},\n .@{input-prefix-cls}-affix-wrapper {\n border-radius: 0;\n }\n }\n\n > .@{input-prefix-cls}-group-addon .@{input-prefix-cls}-search-button,\n > .@{input-prefix-cls},\n .@{input-prefix-cls}-affix-wrapper {\n &:hover,\n &:focus,\n &:active {\n z-index: 2;\n }\n }\n\n > .@{input-prefix-cls}-affix-wrapper-focused {\n z-index: 2;\n }\n }\n // ===================== For RTL Compact Item Customized Styles =====================\n &.@{input-prefix-cls}-compact-item-rtl {\n &:not(.@{input-prefix-cls}-compact-last-item) {\n .@{input-prefix-cls}-group-addon:last-child {\n .@{input-prefix-cls}-search-button {\n margin-left: -@border-width-base;\n border-radius: 0;\n }\n }\n }\n }\n}\n","// Fix Input component height issue in IE11\n@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {\n .@{ant-prefix}-input {\n height: @input-height-base;\n\n &-lg {\n height: @input-height-lg;\n }\n\n &-sm {\n height: @input-height-sm;\n }\n\n &-affix-wrapper {\n > input.@{ant-prefix}-input {\n height: auto;\n }\n }\n }\n}\n","@import '../../input/style/mixin';\n@import (reference) '../../style/themes/index';\n@input-prefix-cls: ~'@{ant-prefix}-input';\n\n@input-affix-margin: 4px;\n\n.@{ant-prefix}-input-number {\n &-affix-wrapper {\n .input();\n // or number handler will cover form status\n position: relative;\n display: inline-flex;\n width: 90px;\n padding: 0;\n padding-inline-start: @input-padding-horizontal-base;\n\n &:not(&-disabled):hover {\n .hover();\n z-index: 1;\n }\n\n &-focused,\n &:focus {\n z-index: 1;\n }\n\n &-disabled {\n .@{ant-prefix}-input-number[disabled] {\n background: transparent;\n }\n }\n\n > div.@{ant-prefix}-input-number {\n width: 100%;\n border: none;\n outline: none;\n\n &.@{ant-prefix}-input-number-focused {\n box-shadow: none !important;\n }\n }\n\n input.@{ant-prefix}-input-number-input {\n padding: 0;\n }\n\n &::before {\n width: 0;\n visibility: hidden;\n content: '\\a0';\n }\n\n .@{ant-prefix}-input-number-handler-wrap {\n z-index: 2;\n }\n }\n\n &-prefix,\n &-suffix {\n display: flex;\n flex: none;\n align-items: center;\n pointer-events: none;\n }\n\n &-prefix {\n margin-inline-end: @input-affix-margin;\n }\n\n &-suffix {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 1;\n height: 100%;\n margin-right: @input-padding-horizontal-base;\n margin-left: @input-affix-margin;\n }\n}\n\n.@{ant-prefix}-input-number-group-wrapper .@{ant-prefix}-input-number-affix-wrapper {\n width: 100%;\n}\n","@import '../../input/style/mixin';\n\n@input-number-prefix-cls: ~'@{ant-prefix}-input-number';\n\n@input-number-wrapper-cls: @input-number-prefix-cls, ~'@{input-number-prefix-cls}-affix-wrapper';\n\neach(@input-number-wrapper-cls, {\n .@{value} {\n &-status-error {\n .status-color(@value, @error-color, @error-color, @input-bg, @error-color-hover, @error-color-outline);\n .status-color-common(@input-number-prefix-cls, @error-color, @error-color, @input-bg, @error-color-hover, @error-color-outline)\n }\n\n &-status-warning {\n .status-color(@value, @warning-color, @warning-color, @input-bg, @warning-color-hover, @warning-color-outline);\n .status-color-common(@input-number-prefix-cls, @warning-color, @warning-color, @input-bg, @warning-color-hover, @warning-color-outline)\n }\n }\n});\n\n.@{input-number-prefix-cls}-group-wrapper {\n &-status-error {\n .group-status-color(@input-number-prefix-cls, @error-color, @error-color);\n }\n\n &-status-warning {\n .group-status-color(@input-number-prefix-cls, @warning-color, @warning-color);\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n@import '../../input/style/mixin';\n@import './affix';\n@import './status';\n\n@input-number-prefix-cls: ~'@{ant-prefix}-input-number';\n@form-item-prefix-cls: ~'@{ant-prefix}-form-item';\n\n.@{input-number-prefix-cls} {\n .reset-component();\n .input();\n\n //== Style for input-group: input with label, with button or dropdown...\n &-group {\n .reset-component();\n .input-group(~'@{input-number-prefix-cls}');\n\n &-wrapper {\n display: inline-block;\n text-align: start;\n vertical-align: top; // https://github.com/ant-design/ant-design/issues/6403\n }\n }\n\n display: inline-block;\n width: 90px;\n margin: 0;\n padding: 0;\n border: @border-width-base @border-style-base @input-border-color;\n border-radius: @control-border-radius;\n\n &-handler {\n position: relative;\n display: block;\n width: 100%;\n height: 50%;\n overflow: hidden;\n color: @text-color-secondary;\n font-weight: bold;\n line-height: 0;\n text-align: center;\n border-left: @border-width-base @border-style-base @input-number-handler-border-color;\n transition: all 0.1s linear;\n\n &:active {\n background: @input-number-handler-active-bg;\n }\n\n &:hover &-up-inner,\n &:hover &-down-inner {\n color: @input-number-handler-hover-bg;\n }\n }\n\n &-handler-up-inner,\n &-handler-down-inner {\n .iconfont-mixin();\n\n position: absolute;\n right: 4px;\n width: 12px;\n height: 12px;\n color: @text-color-secondary;\n line-height: 12px;\n transition: all 0.1s linear;\n user-select: none;\n }\n\n &:hover {\n .hover(@input-number-hover-border-color);\n & + .@{form-item-prefix-cls}-children-icon {\n opacity: 0;\n transition: opacity 0.24s linear 0.24s;\n }\n }\n\n &-focused {\n .active();\n }\n\n &-disabled {\n .disabled();\n .@{input-number-prefix-cls}-input {\n cursor: not-allowed;\n }\n .@{input-number-prefix-cls}-handler-wrap {\n display: none;\n }\n }\n\n &-readonly {\n .@{input-number-prefix-cls}-handler-wrap {\n display: none;\n }\n }\n\n &-input {\n width: 100%;\n height: @input-height-base - 2px;\n padding: 0 @control-padding-horizontal - 1px;\n text-align: left;\n background-color: transparent;\n border: 0;\n border-radius: @control-border-radius;\n outline: 0;\n transition: all 0.3s linear;\n appearance: textfield !important;\n .placeholder();\n\n &[type='number']::-webkit-inner-spin-button,\n &[type='number']::-webkit-outer-spin-button {\n margin: 0;\n /* stylelint-disable-next-line property-no-vendor-prefix */\n -webkit-appearance: none;\n appearance: none;\n }\n }\n\n &-lg {\n padding: 0;\n font-size: @font-size-lg;\n\n input {\n height: @input-height-lg - 2px;\n }\n }\n\n &-sm {\n padding: 0;\n\n input {\n height: @input-height-sm - 2px;\n padding: 0 @control-padding-horizontal-sm - 1px;\n }\n }\n\n &-handler-wrap {\n position: absolute;\n top: 0;\n right: 0;\n width: 22px;\n height: 100%;\n background: @input-number-handler-bg;\n border-radius: 0 @control-border-radius @control-border-radius 0;\n opacity: 0;\n transition: opacity 0.24s linear 0.1s;\n\n // Fix input number inside Menu makes icon too large\n // We arise the selector priority by nest selector here\n // https://github.com/ant-design/ant-design/issues/14367\n .@{input-number-prefix-cls}-handler {\n .@{input-number-prefix-cls}-handler-up-inner,\n .@{input-number-prefix-cls}-handler-down-inner {\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: auto;\n margin-right: 0;\n font-size: 7px;\n }\n }\n\n .@{input-number-prefix-cls}-borderless & {\n border-left-width: 0;\n }\n }\n\n &-handler-wrap:hover &-handler {\n height: 40%;\n }\n\n &:hover &-handler-wrap,\n &-focused &-handler-wrap {\n opacity: 1;\n }\n\n &-handler-up {\n border-top-right-radius: @control-border-radius;\n cursor: pointer;\n\n &-inner {\n top: 50%;\n margin-top: -5px;\n text-align: center;\n }\n\n &:hover {\n height: 60% !important;\n }\n }\n\n &-handler-down {\n top: 0;\n border-top: @border-width-base @border-style-base @input-number-handler-border-color;\n border-bottom-right-radius: @control-border-radius;\n cursor: pointer;\n\n &-inner {\n top: 50%;\n text-align: center;\n transform: translateY(-50%);\n }\n\n &:hover {\n height: 60% !important;\n }\n .@{input-number-prefix-cls}-borderless & {\n border-top-width: 0;\n }\n }\n\n &:hover:not(.@{input-number-prefix-cls}-borderless) &-handler-down,\n &-focused:not(.@{input-number-prefix-cls}-borderless) &-handler-down {\n border-top: @border-width-base @border-style-base @input-number-handler-border-color;\n }\n\n &-handler-up-disabled,\n &-handler-down-disabled {\n cursor: not-allowed;\n }\n\n &-handler-up-disabled:hover &-handler-up-inner,\n &-handler-down-disabled:hover &-handler-down-inner {\n color: @disabled-color;\n }\n\n &-borderless {\n box-shadow: none;\n }\n\n // ===================== Out Of Range =====================\n &-out-of-range {\n input {\n color: @error-color;\n }\n }\n\n // ===================== Compact Item Styles =====================\n .compact-item(@input-number-prefix-cls, null, ~'@{input-number-prefix-cls}-focused');\n}\n\n@import './rtl';\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@layout-prefix-cls: ~'@{ant-prefix}-layout';\n@layout-menu-prefix-cls: ~'@{ant-prefix}-menu';\n\n.@{layout-prefix-cls} {\n display: flex;\n flex: auto;\n flex-direction: column;\n\n /* fix firefox can't set height smaller than content on flex item */\n min-height: 0;\n background: @layout-body-background;\n\n &,\n * {\n box-sizing: border-box;\n }\n\n &&-has-sider {\n flex-direction: row;\n\n > .@{layout-prefix-cls},\n > .@{layout-prefix-cls}-content {\n width: 0; // https://segmentfault.com/a/1190000019498300\n }\n }\n\n &-header,\n &-footer {\n flex: 0 0 auto;\n }\n\n &-header {\n height: @layout-header-height;\n padding: @layout-header-padding;\n color: @layout-header-color;\n line-height: @layout-header-height;\n background: @layout-header-background;\n }\n\n &-footer {\n padding: @layout-footer-padding;\n color: @text-color;\n font-size: @font-size-base;\n background: @layout-footer-background;\n }\n\n &-content {\n flex: auto;\n\n /* fix firefox can't set height smaller than content on flex item */\n min-height: 0;\n }\n\n &-sider {\n position: relative;\n\n /* fix firefox can't set width smaller than content on flex item */\n min-width: 0;\n background: @layout-sider-background;\n transition: all 0.2s;\n\n &-children {\n height: 100%;\n margin-top: -0.1px;\n // Hack for fixing margin collaspe bug\n // https://github.com/ant-design/ant-design/issues/7967\n // solution from https://stackoverflow.com/a/33132624/3040605\n padding-top: 0.1px;\n\n .@{layout-menu-prefix-cls}.@{layout-menu-prefix-cls}-inline-collapsed {\n width: auto;\n }\n }\n\n &-has-trigger {\n padding-bottom: @layout-trigger-height;\n }\n\n &-right {\n order: 1;\n }\n\n &-trigger {\n position: fixed;\n bottom: 0;\n z-index: 1;\n height: @layout-trigger-height;\n color: @layout-trigger-color;\n line-height: @layout-trigger-height;\n text-align: center;\n background: @layout-trigger-background;\n cursor: pointer;\n transition: all 0.2s;\n }\n\n &-zero-width {\n > * {\n overflow: hidden;\n }\n\n &-trigger {\n position: absolute;\n top: @layout-header-height;\n right: -@layout-zero-trigger-width;\n z-index: 1;\n width: @layout-zero-trigger-width;\n height: @layout-zero-trigger-height;\n color: @layout-trigger-color;\n font-size: (@layout-zero-trigger-width / 2);\n line-height: @layout-zero-trigger-height;\n text-align: center;\n background: @layout-sider-background;\n border-radius: 0 @border-radius-base @border-radius-base 0;\n cursor: pointer;\n transition: background 0.3s ease;\n\n &::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: transparent;\n transition: all 0.3s;\n content: '';\n }\n\n &:hover::after {\n background: rgba(255, 255, 255, 0.1);\n }\n\n &-right {\n left: -@layout-zero-trigger-width;\n border-radius: @border-radius-base 0 0 @border-radius-base;\n }\n }\n }\n }\n}\n\n@import './light';\n@import './rtl';\n",".@{layout-prefix-cls}-sider-light {\n background: @layout-sider-background-light;\n .@{layout-prefix-cls}-sider-trigger {\n color: @layout-trigger-color-light;\n background: @layout-trigger-background-light;\n }\n .@{layout-prefix-cls}-sider-zero-width-trigger {\n color: @layout-trigger-color-light;\n background: @layout-trigger-background-light;\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@layout-prefix-cls: ~'@{ant-prefix}-layout';\n\n.@{layout-prefix-cls} {\n &-rtl {\n direction: rtl;\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n@import './customize.less';\n\n@list-prefix-cls: ~'@{ant-prefix}-list';\n\n.@{list-prefix-cls} {\n .reset-component();\n\n position: relative;\n\n * {\n outline: none;\n }\n\n &-pagination {\n margin-top: @margin-lg;\n text-align: right;\n\n // https://github.com/ant-design/ant-design/issues/20037\n .@{ant-prefix}-pagination-options {\n text-align: left;\n }\n }\n\n &-more {\n margin-top: @margin-sm;\n text-align: center;\n\n button {\n padding-right: 32px;\n padding-left: 32px;\n }\n }\n\n &-spin {\n min-height: 40px;\n text-align: center;\n }\n\n &-empty-text {\n padding: @list-empty-text-padding;\n color: @disabled-color;\n font-size: @font-size-base;\n text-align: center;\n }\n\n &-items {\n margin: 0;\n padding: 0;\n list-style: none;\n }\n\n &-item {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: @list-item-padding;\n color: @text-color;\n\n &-meta {\n display: flex;\n flex: 1;\n align-items: flex-start;\n max-width: 100%;\n\n &-avatar {\n margin-right: @list-item-meta-avatar-margin-right;\n }\n\n &-content {\n flex: 1 0;\n width: 0;\n color: @text-color;\n }\n\n &-title {\n margin-bottom: 4px;\n color: @text-color;\n font-size: @font-size-base;\n line-height: @line-height-base;\n\n > a {\n color: @text-color;\n transition: all 0.3s;\n\n &:hover {\n color: @primary-color;\n }\n }\n }\n\n &-description {\n color: @text-color-secondary;\n font-size: @list-item-meta-description-font-size;\n line-height: @line-height-base;\n }\n }\n\n &-action {\n flex: 0 0 auto;\n margin-left: 48px;\n padding: 0;\n font-size: 0;\n list-style: none;\n\n & > li {\n position: relative;\n display: inline-block;\n padding: 0 @padding-xs;\n color: @text-color-secondary;\n font-size: @font-size-base;\n line-height: @line-height-base;\n text-align: center;\n\n &:first-child {\n padding-left: 0;\n }\n }\n\n &-split {\n position: absolute;\n top: 50%;\n right: 0;\n width: 1px;\n height: 14px;\n margin-top: -7px;\n background-color: @border-color-split;\n }\n }\n }\n\n &-header {\n background: @list-header-background;\n }\n\n &-footer {\n background: @list-footer-background;\n }\n\n &-header,\n &-footer {\n padding-top: @padding-sm;\n padding-bottom: @padding-sm;\n }\n\n &-empty {\n padding: @padding-md 0;\n color: @text-color-secondary;\n font-size: 12px;\n text-align: center;\n }\n\n &-split &-item {\n border-bottom: 1px solid @border-color-split;\n\n &:last-child {\n border-bottom: none;\n }\n }\n\n &-split &-header {\n border-bottom: 1px solid @border-color-split;\n }\n\n &-split&-empty &-footer {\n border-top: 1px solid @border-color-split;\n }\n\n &-loading &-spin-nested-loading {\n min-height: 32px;\n }\n\n &-split&-something-after-last-item .@{ant-prefix}-spin-container > &-items > &-item:last-child {\n border-bottom: 1px solid @border-color-split;\n }\n\n &-lg &-item {\n padding: @list-item-padding-lg;\n }\n\n &-sm &-item {\n padding: @list-item-padding-sm;\n }\n\n &-vertical &-item {\n align-items: initial;\n\n &-main {\n display: block;\n flex: 1;\n }\n\n &-extra {\n margin-left: 40px;\n }\n\n &-meta {\n margin-bottom: @list-item-meta-margin-bottom;\n\n &-title {\n margin-bottom: @list-item-meta-title-margin-bottom;\n color: @heading-color;\n font-size: @font-size-lg;\n line-height: 24px;\n }\n }\n\n &-action {\n margin-top: @padding-md;\n margin-left: auto;\n\n > li {\n padding: 0 @padding-md;\n\n &:first-child {\n padding-left: 0;\n }\n }\n }\n }\n\n &-grid .@{ant-prefix}-col > &-item {\n display: block;\n max-width: 100%;\n margin-bottom: @margin-md;\n padding-top: 0;\n padding-bottom: 0;\n border-bottom: none;\n }\n\n // ============================ without flex ============================\n &-item-no-flex {\n display: block;\n }\n\n // Horizontal\n &:not(.@{list-prefix-cls}-vertical) {\n .@{list-prefix-cls}-item-no-flex {\n .@{list-prefix-cls}-item-action {\n float: right;\n }\n }\n }\n}\n\n@import './bordered';\n@import './responsive';\n@import './rtl';\n","@import '../../style/themes/index';\n\n.@{list-prefix-cls}-bordered {\n border: 1px solid @border-color-base;\n border-radius: @border-radius-base;\n .@{list-prefix-cls}-header {\n padding-right: @padding-lg;\n padding-left: @padding-lg;\n }\n\n .@{list-prefix-cls}-footer {\n padding-right: @padding-lg;\n padding-left: @padding-lg;\n }\n\n .@{list-prefix-cls}-item {\n padding-right: @padding-lg;\n padding-left: @padding-lg;\n }\n\n .@{list-prefix-cls}-pagination {\n margin: @margin-md @margin-lg;\n }\n\n &.@{list-prefix-cls}-sm {\n .@{list-prefix-cls}-item {\n padding: @list-item-padding-sm;\n }\n .@{list-prefix-cls}-header,\n .@{list-prefix-cls}-footer {\n padding: @list-item-padding-sm;\n }\n }\n\n &.@{list-prefix-cls}-lg {\n .@{list-prefix-cls}-item {\n padding: @list-item-padding-lg;\n }\n .@{list-prefix-cls}-header,\n .@{list-prefix-cls}-footer {\n padding: @list-item-padding-lg;\n }\n }\n}\n","@media screen and (max-width: @screen-md) {\n .@{list-prefix-cls} {\n &-item {\n &-action {\n margin-left: 24px;\n }\n }\n }\n\n .@{list-prefix-cls}-vertical {\n .@{list-prefix-cls}-item {\n &-extra {\n margin-left: 24px;\n }\n }\n }\n}\n\n@media screen and (max-width: @screen-sm) {\n .@{list-prefix-cls} {\n &-item {\n flex-wrap: wrap;\n\n &-action {\n margin-left: 12px;\n }\n }\n }\n\n .@{list-prefix-cls}-vertical {\n .@{list-prefix-cls}-item {\n flex-wrap: wrap-reverse;\n\n &-main {\n min-width: 220px;\n }\n\n &-extra {\n margin: auto auto 16px;\n }\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n@import './customize.less';\n\n@list-prefix-cls: ~'@{ant-prefix}-list';\n\n.@{list-prefix-cls} {\n &-rtl {\n direction: rtl;\n text-align: right;\n\n // fix for virtual scroll style attribute > (direction:ltr)\n .ReactVirtualized__List .@{list-prefix-cls}-item {\n direction: rtl;\n }\n }\n\n &-pagination {\n .@{list-prefix-cls}-rtl & {\n text-align: left;\n }\n }\n\n &-item {\n &-meta {\n &-avatar {\n .@{list-prefix-cls}-rtl & {\n margin-right: 0;\n margin-left: @list-item-meta-avatar-margin-right;\n }\n }\n }\n\n &-action {\n .@{list-prefix-cls}-rtl & {\n margin-right: 48px;\n margin-left: 0;\n }\n\n & > li:first-child {\n .@{list-prefix-cls}.@{list-prefix-cls}-rtl & {\n padding-right: 0;\n padding-left: @padding-md;\n }\n }\n\n &-split {\n .@{list-prefix-cls}-rtl & {\n right: auto;\n left: 0;\n }\n }\n }\n }\n\n &-vertical &-item {\n &-extra {\n .@{list-prefix-cls}-rtl& {\n margin-right: 40px;\n margin-left: 0;\n }\n }\n\n &-action {\n .@{list-prefix-cls}-rtl& {\n margin-right: auto;\n }\n\n > li {\n &:first-child {\n .@{list-prefix-cls}-rtl & {\n padding-right: 0;\n padding-left: @padding-md;\n }\n }\n }\n }\n }\n\n // Horizontal\n &:not(.@{list-prefix-cls}-vertical) {\n .@{list-prefix-cls}-item-no-flex {\n .@{list-prefix-cls}-item-action {\n .@{list-prefix-cls}-rtl & {\n float: left;\n }\n }\n }\n }\n}\n\n// responsive\n@media screen and (max-width: @screen-md) {\n .@{list-prefix-cls} {\n &-item {\n &-action {\n .@{list-prefix-cls}-rtl & {\n margin-right: 24px;\n margin-left: 0;\n }\n }\n }\n }\n\n .@{list-prefix-cls}-vertical {\n .@{list-prefix-cls}-item {\n &-extra {\n .@{list-prefix-cls}-rtl & {\n margin-right: 24px;\n margin-left: 0;\n }\n }\n }\n }\n}\n\n@media screen and (max-width: @screen-sm) {\n .@{list-prefix-cls} {\n &-item {\n &-action {\n .@{list-prefix-cls}-rtl & {\n margin-right: 22px;\n margin-left: 0;\n }\n }\n }\n }\n\n .@{list-prefix-cls}-vertical {\n .@{list-prefix-cls}-item {\n &-extra {\n // to override margins on rtl view\n .@{list-prefix-cls}-rtl& {\n margin: auto auto 16px;\n }\n }\n }\n }\n}\n","@import '../../input/style/mixin';\n\n@mention-prefix-cls: ~'@{ant-prefix}-mentions';\n@input-prefix-cls: ~'@{ant-prefix}-input';\n\n.@{mention-prefix-cls} {\n &-status-error {\n .status-color(@mention-prefix-cls, @error-color, @error-color, @input-bg, @error-color-hover, @error-color-outline);\n .status-color-common(@input-prefix-cls, @error-color, @error-color, @input-bg, @error-color-hover, @error-color-outline);\n }\n\n &-status-warning {\n .status-color(@mention-prefix-cls, @warning-color, @warning-color, @input-bg, @warning-color-hover, @warning-color-outline);\n .status-color-common(@input-prefix-cls, @warning-color, @warning-color, @input-bg, @warning-color-hover, @warning-color-outline);\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n@import '../../input/style/mixin';\n@import './status';\n\n@mention-prefix-cls: ~'@{ant-prefix}-mentions';\n\n.@{mention-prefix-cls} {\n .reset-component();\n .input();\n\n position: relative;\n display: inline-block;\n height: auto;\n padding: 0;\n overflow: hidden;\n line-height: @line-height-base;\n white-space: pre-wrap;\n vertical-align: bottom;\n\n // =================== Status ===================\n &-disabled {\n > textarea {\n .disabled();\n }\n }\n\n &-focused {\n .active();\n }\n\n // ================= Input Area =================\n > textarea,\n &-measure {\n min-height: @input-height-base - 2px;\n margin: 0;\n padding: @input-padding-vertical-base @input-padding-horizontal-base;\n overflow: inherit;\n overflow-x: hidden;\n overflow-y: auto;\n /* stylelint-disable declaration-block-no-redundant-longhand-properties */\n font-weight: inherit;\n font-size: inherit;\n font-family: inherit;\n font-style: inherit;\n font-variant: inherit;\n font-size-adjust: inherit;\n font-stretch: inherit;\n line-height: inherit;\n /* stylelint-enable declaration-block-no-redundant-longhand-properties */\n direction: inherit;\n letter-spacing: inherit;\n white-space: inherit;\n text-align: inherit;\n vertical-align: top;\n word-wrap: break-word;\n word-break: inherit;\n tab-size: inherit;\n }\n\n > textarea {\n width: 100%;\n border: none;\n outline: none;\n resize: none;\n & when (@theme = dark) {\n background-color: transparent;\n }\n .placeholder();\n }\n\n &-measure {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: -1;\n color: transparent;\n pointer-events: none;\n\n > span {\n display: inline-block;\n min-height: 1em;\n }\n }\n\n // ================== Dropdown ==================\n &-dropdown {\n // Ref select dropdown style\n .reset-component();\n\n position: absolute;\n top: -9999px;\n left: -9999px;\n z-index: @zindex-dropdown;\n box-sizing: border-box;\n font-size: @font-size-base;\n font-variant: initial;\n background-color: @mentions-dropdown-bg;\n border-radius: @border-radius-base;\n outline: none;\n box-shadow: @box-shadow-base;\n\n &-hidden {\n display: none;\n }\n\n &-menu {\n max-height: 250px;\n margin-bottom: 0;\n padding-left: 0; // Override default ul/ol\n overflow: auto;\n list-style: none;\n outline: none;\n\n &-item {\n position: relative;\n display: block;\n min-width: 100px;\n padding: 5px @control-padding-horizontal;\n overflow: hidden;\n color: @text-color;\n font-weight: normal;\n line-height: @line-height-base;\n white-space: nowrap;\n text-overflow: ellipsis;\n cursor: pointer;\n transition: background 0.3s ease;\n\n &:hover {\n background-color: @item-hover-bg;\n }\n\n &:first-child {\n border-radius: @border-radius-base @border-radius-base 0 0;\n }\n\n &:last-child {\n border-radius: 0 0 @border-radius-base @border-radius-base;\n }\n\n &-disabled {\n color: @disabled-color;\n cursor: not-allowed;\n\n &:hover {\n color: @disabled-color;\n background-color: @mentions-dropdown-menu-item-hover-bg;\n cursor: not-allowed;\n }\n }\n\n &-selected {\n color: @text-color;\n font-weight: @select-item-selected-font-weight;\n background-color: @background-color-light;\n }\n\n &-active {\n background-color: @item-hover-bg;\n }\n }\n }\n }\n\n &-suffix {\n position: absolute;\n top: 0;\n right: @input-padding-horizontal-base;\n bottom: 0;\n z-index: 1;\n display: inline-flex;\n align-items: center;\n margin: auto;\n }\n}\n\n@import './rtl';\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@mention-prefix-cls: ~'@{ant-prefix}-mentions';\n\n.@{mention-prefix-cls} {\n &-rtl {\n direction: rtl;\n }\n}\n","@import (reference) '../../style/themes/index';\n@menu-prefix-cls: ~'@{ant-prefix}-menu';\n\n.@{menu-prefix-cls} {\n // Danger\n &-item-danger&-item {\n color: @menu-highlight-danger-color;\n\n &:hover,\n &-active {\n color: @menu-highlight-danger-color;\n }\n\n &:active {\n background: @menu-item-active-danger-bg;\n }\n\n &-selected {\n color: @menu-highlight-danger-color;\n\n > a,\n > a:hover {\n color: @menu-highlight-danger-color;\n }\n }\n\n .@{menu-prefix-cls}:not(.@{menu-prefix-cls}-horizontal) &-selected {\n background-color: @menu-item-active-danger-bg;\n }\n\n .@{menu-prefix-cls}-inline &::after {\n border-right-color: @menu-highlight-danger-color;\n }\n }\n\n // ==================== Dark ====================\n &-dark &-item-danger&-item {\n &,\n &:hover,\n & > a {\n color: @menu-dark-danger-color;\n }\n }\n\n &-dark&-dark:not(&-horizontal) &-item-danger&-item-selected {\n color: @menu-dark-highlight-color;\n background-color: @menu-dark-item-active-danger-bg;\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n@import './status';\n\n@menu-prefix-cls: ~'@{ant-prefix}-menu';\n@menu-animation-duration-normal: 0.15s;\n\n.accessibility-focus() {\n box-shadow: 0 0 0 2px @primary-2;\n}\n\n// TODO: Should remove icon style compatible in v5\n\n// default theme\n.@{menu-prefix-cls} {\n .reset-component();\n\n margin-bottom: 0;\n padding-left: 0; // Override default ul/ol\n color: @menu-item-color;\n font-size: @menu-item-font-size;\n line-height: 0; // Fix display inline-block gap\n text-align: left;\n list-style: none;\n background: @menu-bg;\n outline: none;\n box-shadow: @box-shadow-base;\n transition: background @animation-duration-slow,\n width @animation-duration-slow cubic-bezier(0.2, 0, 0, 1) 0s;\n .clearfix();\n\n &&-root:focus-visible {\n .accessibility-focus();\n }\n\n ul,\n ol {\n margin: 0;\n padding: 0;\n list-style: none;\n }\n\n // Overflow ellipsis\n &-overflow {\n display: flex;\n\n &-item {\n flex: none;\n }\n }\n\n &-hidden,\n &-submenu-hidden {\n display: none;\n }\n\n &-item-group-title {\n height: @menu-item-group-height;\n padding: 8px 16px;\n color: @menu-item-group-title-color;\n font-size: @menu-item-group-title-font-size;\n line-height: @menu-item-group-height;\n transition: all @animation-duration-slow;\n }\n\n &-horizontal &-submenu {\n transition: border-color @animation-duration-slow @ease-in-out,\n background @animation-duration-slow @ease-in-out;\n }\n\n &-submenu,\n &-submenu-inline {\n transition: border-color @animation-duration-slow @ease-in-out,\n background @animation-duration-slow @ease-in-out,\n padding @menu-animation-duration-normal @ease-in-out;\n }\n\n &-submenu-selected {\n color: @menu-highlight-color;\n }\n\n &-item:active,\n &-submenu-title:active {\n background: @menu-item-active-bg;\n }\n\n &-submenu &-sub {\n cursor: initial;\n transition: background @animation-duration-slow @ease-in-out,\n padding @animation-duration-slow @ease-in-out;\n }\n\n &-title-content {\n transition: color @animation-duration-slow;\n }\n\n &-item a {\n color: @menu-item-color;\n\n &:hover {\n color: @menu-highlight-color;\n }\n\n &::before {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background-color: transparent;\n content: '';\n }\n }\n\n // https://github.com/ant-design/ant-design/issues/19809\n &-item > .@{ant-prefix}-badge a {\n color: @menu-item-color;\n\n &:hover {\n color: @menu-highlight-color;\n }\n }\n\n &-item-divider {\n overflow: hidden;\n line-height: 0;\n border-color: @border-color-split;\n border-style: solid;\n border-width: 1px 0 0;\n }\n\n &-item-divider-dashed {\n border-style: dashed;\n }\n\n &-horizontal &-item,\n &-horizontal &-submenu {\n margin-top: -1px;\n }\n\n &-horizontal > &-item:hover,\n &-horizontal > &-item-active,\n &-horizontal > &-submenu &-submenu-title:hover {\n background-color: transparent;\n }\n\n &-item-selected {\n color: @menu-highlight-color;\n\n a,\n a:hover {\n color: @menu-highlight-color;\n }\n }\n\n &:not(&-horizontal) &-item-selected {\n background-color: @menu-item-active-bg;\n }\n\n &-inline,\n &-vertical,\n &-vertical-left {\n border-right: @border-width-base @border-style-base @border-color-split;\n }\n\n &-vertical-right {\n border-left: @border-width-base @border-style-base @border-color-split;\n }\n\n &-vertical&-sub,\n &-vertical-left&-sub,\n &-vertical-right&-sub {\n min-width: 160px;\n max-height: calc(100vh - 100px);\n padding: 0;\n overflow: hidden;\n border-right: 0;\n\n // https://github.com/ant-design/ant-design/issues/22244\n // https://github.com/ant-design/ant-design/issues/26812\n &:not([class*='-active']) {\n overflow-x: hidden;\n overflow-y: auto;\n }\n\n .@{menu-prefix-cls}-item {\n left: 0;\n margin-left: 0;\n border-right: 0;\n\n &::after {\n border-right: 0;\n }\n }\n > .@{menu-prefix-cls}-item,\n > .@{menu-prefix-cls}-submenu {\n transform-origin: 0 0;\n }\n }\n\n &-horizontal&-sub {\n min-width: 114px; // in case of submenu width is too big: https://codesandbox.io/s/qvpwm6mk66\n }\n\n &-horizontal &-item,\n &-horizontal &-submenu-title {\n transition: border-color @animation-duration-slow, background @animation-duration-slow;\n }\n\n &-item,\n &-submenu-title {\n position: relative;\n display: block;\n margin: 0;\n padding: @menu-item-padding;\n white-space: nowrap;\n cursor: pointer;\n transition: border-color @animation-duration-slow, background @animation-duration-slow,\n padding @animation-duration-slow @ease-in-out;\n\n .@{menu-prefix-cls}-item-icon,\n .@{iconfont-css-prefix} {\n min-width: 14px;\n font-size: @menu-icon-size;\n transition: font-size @menu-animation-duration-normal @ease-out,\n margin @animation-duration-slow @ease-in-out, color @animation-duration-slow;\n\n + span {\n margin-left: @menu-icon-margin-right;\n opacity: 1;\n transition: opacity @animation-duration-slow @ease-in-out, margin @animation-duration-slow,\n color @animation-duration-slow;\n }\n }\n\n .@{menu-prefix-cls}-item-icon.svg {\n vertical-align: -0.125em;\n }\n\n &.@{menu-prefix-cls}-item-only-child {\n > .@{iconfont-css-prefix},\n > .@{menu-prefix-cls}-item-icon {\n margin-right: 0;\n }\n }\n\n &:not(.@{menu-prefix-cls}-item-disabled):focus-visible {\n .accessibility-focus();\n }\n }\n\n & > &-item-divider {\n margin: 1px 0;\n padding: 0;\n }\n\n &-submenu {\n &-popup {\n position: absolute;\n z-index: @zindex-dropdown;\n background: transparent;\n border-radius: @border-radius-base;\n box-shadow: none;\n transform-origin: 0 0;\n\n // https://github.com/ant-design/ant-design/issues/13955\n &::before {\n position: absolute;\n top: -7px;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: -1;\n width: 100%;\n height: 100%;\n opacity: 0.0001;\n content: ' ';\n }\n }\n\n // https://github.com/ant-design/ant-design/issues/13955\n &-placement-rightTop::before {\n top: 0;\n left: -7px;\n }\n\n > .@{menu-prefix-cls} {\n background-color: @menu-bg;\n border-radius: @border-radius-base;\n\n &-submenu-title::after {\n transition: transform @animation-duration-slow @ease-in-out;\n }\n }\n\n &-popup > .@{menu-prefix-cls} {\n background-color: @menu-popup-bg;\n }\n\n &-expand-icon,\n &-arrow {\n position: absolute;\n top: 50%;\n right: 16px;\n width: 10px;\n color: @menu-item-color;\n transform: translateY(-50%);\n transition: transform @animation-duration-slow @ease-in-out;\n }\n\n &-arrow {\n // →\n &::before,\n &::after {\n position: absolute;\n width: 6px;\n height: 1.5px;\n background-color: currentcolor;\n border-radius: 2px;\n transition: background @animation-duration-slow @ease-in-out,\n transform @animation-duration-slow @ease-in-out, top @animation-duration-slow @ease-in-out,\n color @animation-duration-slow @ease-in-out;\n content: '';\n }\n\n &::before {\n transform: rotate(45deg) translateY(-2.5px);\n }\n\n &::after {\n transform: rotate(-45deg) translateY(2.5px);\n }\n }\n\n &:hover > &-title > &-expand-icon,\n &:hover > &-title > &-arrow {\n color: @menu-highlight-color;\n }\n\n .@{menu-prefix-cls}-inline-collapsed &-arrow,\n &-inline &-arrow {\n // ↓\n &::before {\n transform: rotate(-45deg) translateX(2.5px);\n }\n\n &::after {\n transform: rotate(45deg) translateX(-2.5px);\n }\n }\n\n &-horizontal &-arrow {\n display: none;\n }\n\n &-open&-inline > &-title > &-arrow {\n // ↑\n transform: translateY(-2px);\n\n &::after {\n transform: rotate(-45deg) translateX(-2.5px);\n }\n\n &::before {\n transform: rotate(45deg) translateX(2.5px);\n }\n }\n }\n\n &-vertical &-submenu-selected,\n &-vertical-left &-submenu-selected,\n &-vertical-right &-submenu-selected {\n color: @menu-highlight-color;\n }\n\n &-horizontal {\n line-height: @menu-horizontal-line-height;\n border: 0;\n border-bottom: @border-width-base @border-style-base @border-color-split;\n box-shadow: none;\n\n &:not(.@{menu-prefix-cls}-dark) {\n > .@{menu-prefix-cls}-item,\n > .@{menu-prefix-cls}-submenu {\n margin-top: -1px;\n margin-bottom: 0;\n padding: @menu-item-padding;\n\n &:hover,\n &-active,\n &-open,\n &-selected {\n color: @menu-highlight-color;\n\n &::after {\n border-bottom: 2px solid @menu-highlight-color;\n }\n }\n }\n }\n\n > .@{menu-prefix-cls}-item,\n > .@{menu-prefix-cls}-submenu {\n position: relative;\n top: 1px;\n display: inline-block;\n vertical-align: bottom;\n\n &::after {\n position: absolute;\n right: @menu-item-padding-horizontal;\n bottom: 0;\n left: @menu-item-padding-horizontal;\n border-bottom: 2px solid transparent;\n transition: border-color @animation-duration-slow @ease-in-out;\n content: '';\n }\n }\n\n > .@{menu-prefix-cls}-submenu > .@{menu-prefix-cls}-submenu-title {\n padding: 0;\n }\n\n > .@{menu-prefix-cls}-item {\n a {\n color: @menu-item-color;\n\n &:hover {\n color: @menu-highlight-color;\n }\n\n &::before {\n bottom: -2px;\n }\n }\n\n &-selected a {\n color: @menu-highlight-color;\n }\n }\n\n &::after {\n display: block;\n clear: both;\n height: 0;\n content: '\\20';\n }\n }\n\n &-vertical,\n &-vertical-left,\n &-vertical-right,\n &-inline {\n .@{menu-prefix-cls}-item {\n position: relative;\n\n &::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n border-right: @menu-item-active-border-width solid @menu-highlight-color;\n transform: scaleY(0.0001);\n opacity: 0;\n transition: transform @menu-animation-duration-normal @ease-out,\n opacity @menu-animation-duration-normal @ease-out;\n content: '';\n }\n }\n\n .@{menu-prefix-cls}-item,\n .@{menu-prefix-cls}-submenu-title {\n height: @menu-item-height;\n margin-top: @menu-item-vertical-margin;\n margin-bottom: @menu-item-vertical-margin;\n padding: 0 16px;\n overflow: hidden;\n line-height: @menu-item-height;\n text-overflow: ellipsis;\n }\n\n // disable margin collapsed\n .@{menu-prefix-cls}-submenu {\n padding-bottom: 0.02px;\n }\n\n .@{menu-prefix-cls}-item:not(:last-child) {\n margin-bottom: @menu-item-boundary-margin;\n }\n\n > .@{menu-prefix-cls}-item,\n > .@{menu-prefix-cls}-submenu > .@{menu-prefix-cls}-submenu-title {\n height: @menu-inline-toplevel-item-height;\n line-height: @menu-inline-toplevel-item-height;\n }\n }\n\n &-vertical {\n .@{menu-prefix-cls}-item-group-list .@{menu-prefix-cls}-submenu-title,\n .@{menu-prefix-cls}-submenu-title {\n padding-right: 34px;\n }\n }\n\n &-inline {\n width: 100%;\n .@{menu-prefix-cls}-selected,\n .@{menu-prefix-cls}-item-selected {\n &::after {\n transform: scaleY(1);\n opacity: 1;\n transition: transform @menu-animation-duration-normal @ease-in-out,\n opacity @menu-animation-duration-normal @ease-in-out;\n }\n }\n\n .@{menu-prefix-cls}-item,\n .@{menu-prefix-cls}-submenu-title {\n width: ~'calc(100% + 1px)';\n }\n\n .@{menu-prefix-cls}-item-group-list .@{menu-prefix-cls}-submenu-title,\n .@{menu-prefix-cls}-submenu-title {\n padding-right: 34px;\n }\n\n // Motion enhance for first level\n &.@{menu-prefix-cls}-root {\n .@{menu-prefix-cls}-item,\n .@{menu-prefix-cls}-submenu-title {\n display: flex;\n align-items: center;\n transition: border-color @animation-duration-slow, background @animation-duration-slow,\n padding 0.1s @ease-out;\n\n > .@{menu-prefix-cls}-title-content {\n flex: auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n > * {\n flex: none;\n }\n }\n }\n }\n\n &&-inline-collapsed {\n width: @menu-collapsed-width;\n\n > .@{menu-prefix-cls}-item,\n > .@{menu-prefix-cls}-item-group\n > .@{menu-prefix-cls}-item-group-list\n > .@{menu-prefix-cls}-item,\n > .@{menu-prefix-cls}-item-group\n > .@{menu-prefix-cls}-item-group-list\n > .@{menu-prefix-cls}-submenu\n > .@{menu-prefix-cls}-submenu-title,\n > .@{menu-prefix-cls}-submenu > .@{menu-prefix-cls}-submenu-title {\n left: 0;\n padding: 0 ~'calc(50% - @{menu-icon-size-lg} / 2)';\n text-overflow: clip;\n\n .@{menu-prefix-cls}-submenu-arrow {\n opacity: 0;\n }\n\n .@{menu-prefix-cls}-item-icon,\n .@{iconfont-css-prefix} {\n margin: 0;\n font-size: @menu-icon-size-lg;\n line-height: @menu-item-height;\n\n + span {\n display: inline-block;\n opacity: 0;\n }\n }\n }\n\n .@{menu-prefix-cls}-item-icon,\n .@{iconfont-css-prefix} {\n display: inline-block;\n }\n\n &-tooltip {\n pointer-events: none;\n\n .@{menu-prefix-cls}-item-icon,\n .@{iconfont-css-prefix} {\n display: none;\n }\n\n a {\n color: @text-color-dark;\n }\n }\n\n .@{menu-prefix-cls}-item-group-title {\n padding-right: 4px;\n padding-left: 4px;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n }\n\n &-item-group-list {\n margin: 0;\n padding: 0;\n .@{menu-prefix-cls}-item,\n .@{menu-prefix-cls}-submenu-title {\n padding: 0 16px 0 28px;\n }\n }\n\n &-root&-vertical,\n &-root&-vertical-left,\n &-root&-vertical-right,\n &-root&-inline {\n box-shadow: none;\n }\n\n &-root&-inline-collapsed {\n .@{menu-prefix-cls}-item,\n .@{menu-prefix-cls}-submenu .@{menu-prefix-cls}-submenu-title {\n > .@{menu-prefix-cls}-inline-collapsed-noicon {\n font-size: @menu-icon-size-lg;\n text-align: center;\n }\n }\n }\n\n &-sub&-inline {\n padding: 0;\n background: @menu-inline-submenu-bg;\n border: 0;\n border-radius: 0;\n box-shadow: none;\n & > .@{menu-prefix-cls}-item,\n & > .@{menu-prefix-cls}-submenu > .@{menu-prefix-cls}-submenu-title {\n height: @menu-item-height;\n line-height: @menu-item-height;\n list-style-position: inside;\n list-style-type: disc;\n }\n\n & .@{menu-prefix-cls}-item-group-title {\n padding-left: 32px;\n }\n }\n\n // Disabled state sets text to gray and nukes hover/tab effects\n &-item-disabled,\n &-submenu-disabled {\n color: @disabled-color !important;\n background: none;\n cursor: not-allowed;\n\n &::after {\n border-color: transparent !important;\n }\n\n a {\n color: @disabled-color !important;\n }\n\n > .@{menu-prefix-cls}-submenu-title {\n color: @disabled-color !important;\n cursor: not-allowed;\n > .@{menu-prefix-cls}-submenu-arrow {\n &::before,\n &::after {\n background: @disabled-color !important;\n }\n }\n }\n }\n}\n\n// Integration with header element so menu items have the same height\n.@{ant-prefix}-layout-header {\n .@{menu-prefix-cls} {\n line-height: inherit;\n }\n}\n\n// https://github.com/ant-design/ant-design/issues/32950\n.@{ant-prefix}-menu-inline-collapsed-tooltip {\n a,\n a:hover {\n color: @white;\n }\n}\n\n@import './light';\n@import './dark';\n@import './rtl';\n",".@{menu-prefix-cls} {\n // light theme\n &-light {\n .@{menu-prefix-cls}-item:hover,\n .@{menu-prefix-cls}-item-active,\n .@{menu-prefix-cls}:not(.@{menu-prefix-cls}-inline) .@{menu-prefix-cls}-submenu-open,\n .@{menu-prefix-cls}-submenu-active,\n .@{menu-prefix-cls}-submenu-title:hover {\n color: @menu-highlight-color;\n }\n }\n}\n",".accessibility-focus-dark() {\n box-shadow: 0 0 0 2px @primary-7;\n}\n\n.@{menu-prefix-cls} {\n &&-root:focus-visible {\n .accessibility-focus-dark();\n }\n\n &-dark &-item,\n &-dark &-submenu-title {\n &:focus-visible {\n .accessibility-focus-dark();\n }\n }\n\n // dark theme\n &&-dark,\n &-dark &-sub,\n &&-dark &-sub {\n color: @menu-dark-color;\n background: @menu-dark-bg;\n .@{menu-prefix-cls}-submenu-title .@{menu-prefix-cls}-submenu-arrow {\n opacity: 0.45;\n transition: all 0.3s;\n\n &::after,\n &::before {\n background: @menu-dark-arrow-color;\n }\n }\n }\n\n &-dark&-submenu-popup {\n background: transparent;\n }\n\n &-dark &-inline&-sub {\n background: @menu-dark-inline-submenu-bg;\n }\n\n &-dark&-horizontal {\n border-bottom: 0;\n }\n\n &-dark&-horizontal > &-item,\n &-dark&-horizontal > &-submenu {\n top: 0;\n margin-top: 0;\n padding: @menu-item-padding;\n border-color: @menu-dark-bg;\n border-bottom: 0;\n }\n\n &-dark&-horizontal > &-item:hover {\n background-color: @menu-dark-item-active-bg;\n }\n\n &-dark&-horizontal > &-item > a::before {\n bottom: 0;\n }\n\n &-dark &-item,\n &-dark &-item-group-title,\n &-dark &-item > a,\n &-dark &-item > span > a {\n color: @menu-dark-color;\n }\n\n &-dark&-inline,\n &-dark&-vertical,\n &-dark&-vertical-left,\n &-dark&-vertical-right {\n border-right: 0;\n }\n\n &-dark&-inline &-item,\n &-dark&-vertical &-item,\n &-dark&-vertical-left &-item,\n &-dark&-vertical-right &-item {\n left: 0;\n margin-left: 0;\n border-right: 0;\n\n &::after {\n border-right: 0;\n }\n }\n\n &-dark&-inline &-item,\n &-dark&-inline &-submenu-title {\n width: 100%;\n }\n\n &-dark &-item:hover,\n &-dark &-item-active,\n &-dark &-submenu-active,\n &-dark &-submenu-open,\n &-dark &-submenu-selected,\n &-dark &-submenu-title:hover {\n color: @menu-dark-highlight-color;\n background-color: transparent;\n\n > a,\n > span > a {\n color: @menu-dark-highlight-color;\n }\n > .@{menu-prefix-cls}-submenu-title {\n > .@{menu-prefix-cls}-submenu-arrow {\n opacity: 1;\n\n &::after,\n &::before {\n background: @menu-dark-highlight-color;\n }\n }\n }\n }\n\n &-dark &-item:hover {\n background-color: @menu-dark-item-hover-bg;\n }\n\n &-dark&-dark:not(&-horizontal) &-item-selected {\n background-color: @menu-dark-item-active-bg;\n }\n\n &-dark &-item-selected {\n color: @menu-dark-highlight-color;\n border-right: 0;\n\n &::after {\n border-right: 0;\n }\n\n > a,\n > span > a,\n > a:hover,\n > span > a:hover {\n color: @menu-dark-highlight-color;\n }\n\n .@{menu-prefix-cls}-item-icon,\n .@{iconfont-css-prefix} {\n color: @menu-dark-selected-item-icon-color;\n\n + span {\n color: @menu-dark-selected-item-text-color;\n }\n }\n }\n\n &&-dark &-item-selected,\n &-submenu-popup&-dark &-item-selected {\n background-color: @menu-dark-item-active-bg;\n }\n\n // Disabled state sets text to dark gray and nukes hover/tab effects\n &-dark &-item-disabled,\n &-dark &-submenu-disabled {\n &,\n > a,\n > span > a {\n color: @disabled-color-dark !important;\n opacity: 0.8;\n }\n > .@{menu-prefix-cls}-submenu-title {\n color: @disabled-color-dark !important;\n > .@{menu-prefix-cls}-submenu-arrow {\n &::before,\n &::after {\n background: @disabled-color-dark !important;\n }\n }\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@menu-prefix-cls: ~'@{ant-prefix}-menu';\n\n.@{menu-prefix-cls} {\n &&-rtl {\n direction: rtl;\n text-align: right;\n }\n\n &-item-group-title {\n .@{menu-prefix-cls}-rtl & {\n text-align: right;\n }\n }\n\n &-inline,\n &-vertical {\n .@{menu-prefix-cls}-rtl& {\n border-right: none;\n border-left: @border-width-base @border-style-base @border-color-split;\n }\n }\n\n &-dark&-inline,\n &-dark&-vertical {\n .@{menu-prefix-cls}-rtl& {\n border-left: none;\n }\n }\n\n &-vertical&-sub,\n &-vertical-left&-sub,\n &-vertical-right&-sub {\n > .@{menu-prefix-cls}-item,\n > .@{menu-prefix-cls}-submenu {\n .@{menu-prefix-cls}-rtl& {\n transform-origin: top right;\n }\n }\n }\n\n &-item,\n &-submenu-title {\n .@{menu-prefix-cls}-item-icon,\n .@{iconfont-css-prefix} {\n .@{menu-prefix-cls}-rtl & {\n margin-right: auto;\n margin-left: @menu-icon-margin-right;\n }\n }\n\n &.@{menu-prefix-cls}-item-only-child {\n > .@{menu-prefix-cls}-item-icon,\n > .@{iconfont-css-prefix} {\n .@{menu-prefix-cls}-rtl & {\n margin-left: 0;\n }\n }\n }\n }\n\n &-submenu {\n &-rtl.@{menu-prefix-cls}-submenu-popup {\n transform-origin: 100% 0;\n }\n\n &-vertical,\n &-vertical-left,\n &-vertical-right,\n &-inline {\n > .@{menu-prefix-cls}-submenu-title .@{menu-prefix-cls}-submenu-arrow {\n .@{menu-prefix-cls}-rtl & {\n right: auto;\n left: 16px;\n }\n }\n }\n\n &-vertical,\n &-vertical-left,\n &-vertical-right {\n > .@{menu-prefix-cls}-submenu-title .@{menu-prefix-cls}-submenu-arrow {\n &::before {\n .@{menu-prefix-cls}-rtl & {\n transform: rotate(-45deg) translateY(-2px);\n }\n }\n\n &::after {\n .@{menu-prefix-cls}-rtl & {\n transform: rotate(45deg) translateY(2px);\n }\n }\n }\n }\n }\n\n &-vertical,\n &-vertical-left,\n &-vertical-right,\n &-inline {\n .@{menu-prefix-cls}-item {\n &::after {\n .@{menu-prefix-cls}-rtl& {\n right: auto;\n left: 0;\n }\n }\n }\n\n .@{menu-prefix-cls}-item,\n .@{menu-prefix-cls}-submenu-title {\n .@{menu-prefix-cls}-rtl& {\n text-align: right;\n }\n }\n }\n\n &-inline {\n .@{menu-prefix-cls}-submenu-title {\n .@{menu-prefix-cls}-rtl& {\n padding-right: 0;\n padding-left: 34px;\n }\n }\n }\n\n &-vertical {\n .@{menu-prefix-cls}-submenu-title {\n .@{menu-prefix-cls}-rtl& {\n padding-right: 16px;\n padding-left: 34px;\n }\n }\n }\n\n &-inline-collapsed&-vertical {\n .@{menu-prefix-cls}-submenu-title {\n .@{menu-prefix-cls}-rtl& {\n padding: 0 ~'calc(50% - @{menu-icon-size-lg} / 2)';\n }\n }\n }\n\n &-item-group-list {\n .@{menu-prefix-cls}-item,\n .@{menu-prefix-cls}-submenu-title {\n .@{menu-prefix-cls}-rtl & {\n padding: 0 28px 0 16px;\n }\n }\n }\n\n &-sub&-inline {\n border: 0;\n & .@{menu-prefix-cls}-item-group-title {\n .@{menu-prefix-cls}-rtl& {\n padding-right: 32px;\n padding-left: 0;\n }\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@message-prefix-cls: ~'@{ant-prefix}-message';\n\n.@{message-prefix-cls} {\n .reset-component();\n\n position: fixed;\n top: 8px;\n left: 0;\n z-index: @zindex-message;\n width: 100%;\n pointer-events: none;\n\n &-notice {\n padding: 8px;\n text-align: center;\n }\n\n &-notice-content {\n display: inline-block;\n padding: @message-notice-content-padding;\n background: @message-notice-content-bg;\n border-radius: @border-radius-base;\n box-shadow: @shadow-2;\n pointer-events: all;\n }\n\n &-success .@{iconfont-css-prefix} {\n color: @success-color;\n }\n\n &-error .@{iconfont-css-prefix} {\n color: @error-color;\n }\n\n &-warning .@{iconfont-css-prefix} {\n color: @warning-color;\n }\n\n &-info .@{iconfont-css-prefix},\n &-loading .@{iconfont-css-prefix} {\n color: @info-color;\n }\n\n .@{iconfont-css-prefix} {\n position: relative;\n top: 1px;\n margin-right: 8px;\n font-size: @font-size-lg;\n }\n\n &-notice.@{ant-prefix}-move-up-leave.@{ant-prefix}-move-up-leave-active {\n animation-name: MessageMoveOut;\n animation-duration: 0.3s;\n }\n}\n\n@keyframes MessageMoveOut {\n 0% {\n max-height: 150px;\n padding: 8px;\n opacity: 1;\n }\n\n 100% {\n max-height: 0;\n padding: 0;\n opacity: 0;\n }\n}\n\n@import './rtl';\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@message-prefix-cls: ~'@{ant-prefix}-message';\n\n.@{message-prefix-cls}-rtl {\n direction: rtl;\n\n span {\n direction: rtl;\n }\n\n .@{iconfont-css-prefix} {\n margin-right: 0;\n margin-left: 8px;\n }\n}\n","@dialog-prefix-cls: ~'@{ant-prefix}-modal';\n\n.@{dialog-prefix-cls} {\n .reset-component();\n .modal-mask();\n\n position: relative;\n top: 100px;\n width: auto;\n max-width: calc(100vw - 32px);\n margin: 0 auto;\n padding-bottom: 24px;\n\n &-wrap {\n z-index: @zindex-modal;\n }\n\n &-title {\n margin: 0;\n color: @modal-heading-color;\n font-weight: 500;\n font-size: @modal-header-title-font-size;\n line-height: @modal-header-title-line-height;\n word-wrap: break-word;\n }\n\n &-content {\n position: relative;\n background-color: @modal-content-bg;\n background-clip: padding-box;\n border: 0;\n border-radius: @modal-border-radius;\n box-shadow: @shadow-2;\n pointer-events: auto;\n }\n\n &-close {\n position: absolute;\n top: 0;\n right: 0;\n z-index: @zindex-popup-close;\n padding: 0;\n color: @modal-close-color;\n font-weight: 700;\n line-height: 1;\n text-decoration: none;\n background: transparent;\n border: 0;\n outline: 0;\n cursor: pointer;\n transition: color 0.3s;\n\n &-x {\n display: block;\n width: @modal-header-close-size;\n height: @modal-header-close-size;\n font-size: @font-size-lg;\n font-style: normal;\n line-height: @modal-header-close-size;\n text-align: center;\n text-transform: none;\n text-rendering: auto;\n }\n\n &:focus,\n &:hover {\n color: @icon-color-hover;\n text-decoration: none;\n }\n }\n\n &-header {\n padding: @modal-header-padding;\n color: @text-color;\n background: @modal-header-bg;\n border-bottom: @modal-header-border-width @modal-header-border-style\n @modal-header-border-color-split;\n border-radius: @modal-border-radius @modal-border-radius 0 0;\n }\n\n &-body {\n padding: @modal-body-padding;\n font-size: @font-size-base;\n line-height: @line-height-base;\n word-wrap: break-word;\n }\n\n &-footer {\n padding: @modal-footer-padding-vertical @modal-footer-padding-horizontal;\n text-align: right;\n background: @modal-footer-bg;\n border-top: @modal-footer-border-width @modal-footer-border-style\n @modal-footer-border-color-split;\n border-radius: 0 0 @modal-border-radius @modal-border-radius;\n\n .@{ant-prefix}-btn + .@{ant-prefix}-btn:not(.@{ant-prefix}-dropdown-trigger) {\n margin-bottom: 0;\n margin-left: 8px;\n }\n }\n\n &-open {\n overflow: hidden;\n }\n}\n\n.@{dialog-prefix-cls}-centered {\n text-align: center;\n\n &::before {\n display: inline-block;\n width: 0;\n height: 100%;\n vertical-align: middle;\n content: '';\n }\n .@{dialog-prefix-cls} {\n top: 0;\n display: inline-block;\n padding-bottom: 0;\n text-align: left;\n vertical-align: middle;\n }\n}\n\n@media (max-width: @screen-sm-max) {\n .@{dialog-prefix-cls} {\n max-width: calc(100vw - 16px);\n margin: 8px auto;\n }\n .@{dialog-prefix-cls}-centered {\n .@{dialog-prefix-cls} {\n flex: 1;\n }\n }\n}\n","@import '../../style/mixins/index';\n\n@confirm-prefix-cls: ~'@{ant-prefix}-modal-confirm';\n\n.@{confirm-prefix-cls} {\n .@{ant-prefix}-modal-header {\n display: none;\n }\n\n .@{ant-prefix}-modal-body {\n padding: @modal-confirm-body-padding;\n }\n\n &-body-wrapper {\n .clearfix();\n }\n\n &-body {\n .@{confirm-prefix-cls}-title {\n display: block;\n // create BFC to avoid\n // https://user-images.githubusercontent.com/507615/37702510-ba844e06-2d2d-11e8-9b67-8e19be57f445.png\n overflow: hidden;\n color: @heading-color;\n font-weight: 500;\n font-size: @modal-confirm-title-font-size;\n line-height: 1.4;\n }\n\n .@{confirm-prefix-cls}-content {\n margin-top: 8px;\n color: @text-color;\n font-size: @font-size-base;\n }\n\n > .@{iconfont-css-prefix} {\n float: left;\n margin-right: 16px;\n font-size: 22px;\n\n // `content` after `icon` should set marginLeft\n + .@{confirm-prefix-cls}-title + .@{confirm-prefix-cls}-content {\n margin-left: 38px;\n }\n }\n }\n\n .@{confirm-prefix-cls}-btns {\n margin-top: 24px;\n text-align: right;\n\n .@{ant-prefix}-btn + .@{ant-prefix}-btn {\n margin-bottom: 0;\n margin-left: 8px;\n }\n }\n\n &-error &-body > .@{iconfont-css-prefix} {\n color: @error-color;\n }\n\n &-warning &-body > .@{iconfont-css-prefix},\n &-confirm &-body > .@{iconfont-css-prefix} {\n color: @warning-color;\n }\n\n &-info &-body > .@{iconfont-css-prefix} {\n color: @info-color;\n }\n\n &-success &-body > .@{iconfont-css-prefix} {\n color: @success-color;\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@dialog-prefix-cls: ~'@{ant-prefix}-modal';\n@confirm-prefix-cls: ~'@{ant-prefix}-modal-confirm';\n@dialog-wrap-rtl-cls: ~'@{dialog-prefix-cls}-wrap-rtl';\n\n.@{dialog-prefix-cls} {\n &-wrap {\n &-rtl {\n direction: rtl;\n }\n }\n\n &-close {\n .@{dialog-wrap-rtl-cls} & {\n right: initial;\n left: 0;\n }\n }\n\n &-footer {\n .@{dialog-wrap-rtl-cls} & {\n text-align: left;\n }\n .@{ant-prefix}-btn + .@{ant-prefix}-btn {\n .@{dialog-wrap-rtl-cls} & {\n margin-right: 8px;\n margin-left: 0;\n }\n }\n }\n\n &-confirm {\n &-body {\n .@{dialog-wrap-rtl-cls} & {\n direction: rtl;\n }\n > .@{iconfont-css-prefix} {\n .@{dialog-wrap-rtl-cls} & {\n float: right;\n margin-right: 0;\n margin-left: 16px;\n }\n + .@{confirm-prefix-cls}-title + .@{confirm-prefix-cls}-content {\n .@{dialog-wrap-rtl-cls} & {\n margin-right: 38px;\n margin-left: 0;\n }\n }\n }\n }\n\n &-btns {\n .@{dialog-wrap-rtl-cls} & {\n text-align: left;\n }\n .@{ant-prefix}-btn + .@{ant-prefix}-btn {\n .@{dialog-wrap-rtl-cls} & {\n margin-right: 8px;\n margin-left: 0;\n }\n }\n }\n }\n}\n\n.@{dialog-prefix-cls}-centered {\n .@{dialog-prefix-cls} {\n .@{dialog-wrap-rtl-cls}& {\n text-align: right;\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n.popover-customize-bg(@notification-prefix-cls, @popover-background);\n\n@notification-prefix-cls: ~'@{ant-prefix}-notification';\n@notification-width: 384px;\n@notification-padding: @notification-padding-vertical @notification-padding-horizontal;\n@notification-margin-bottom: 16px;\n@notification-margin-edge: 24px;\n\n.@{notification-prefix-cls} {\n .reset-component();\n\n position: fixed;\n z-index: @zindex-notification;\n margin-right: @notification-margin-edge;\n\n &-close-icon {\n font-size: @font-size-base;\n cursor: pointer;\n }\n\n &-hook-holder {\n position: relative;\n }\n\n &-notice {\n position: relative;\n width: @notification-width;\n max-width: ~'calc(100vw - @{notification-margin-edge} * 2)';\n margin-bottom: @notification-margin-bottom;\n margin-left: auto;\n padding: @notification-padding;\n overflow: hidden;\n line-height: @line-height-base;\n word-wrap: break-word;\n background: @notification-bg;\n border-radius: @border-radius-base;\n box-shadow: @shadow-2;\n\n .@{notification-prefix-cls}-top &,\n .@{notification-prefix-cls}-bottom & {\n margin-right: auto;\n margin-left: auto;\n }\n\n .@{notification-prefix-cls}-topLeft &,\n .@{notification-prefix-cls}-bottomLeft & {\n margin-right: auto;\n margin-left: 0;\n }\n\n &-message {\n margin-bottom: 8px;\n color: @heading-color;\n font-size: @font-size-lg;\n line-height: 24px;\n\n // https://github.com/ant-design/ant-design/issues/5846#issuecomment-296244140\n &-single-line-auto-margin {\n display: block;\n width: ~'calc(@{notification-width} - @{notification-padding-horizontal} * 2 - 24px - 48px - 100%)';\n max-width: 4px;\n background-color: transparent;\n pointer-events: none;\n\n &::before {\n display: block;\n content: '';\n }\n }\n }\n\n &-description {\n font-size: @font-size-base;\n }\n\n &-closable &-message {\n padding-right: 24px;\n }\n\n &-with-icon &-message {\n margin-bottom: 4px;\n margin-left: 48px;\n font-size: @font-size-lg;\n }\n\n &-with-icon &-description {\n margin-left: 48px;\n font-size: @font-size-base;\n }\n\n // Icon & color style in different selector level\n // https://github.com/ant-design/ant-design/issues/16503\n // https://github.com/ant-design/ant-design/issues/15512\n &-icon {\n position: absolute;\n margin-left: 4px;\n font-size: 24px;\n line-height: 24px;\n }\n\n .@{iconfont-css-prefix}&-icon {\n &-success {\n color: @success-color;\n }\n\n &-info {\n color: @info-color;\n }\n\n &-warning {\n color: @warning-color;\n }\n\n &-error {\n color: @error-color;\n }\n }\n\n &-close {\n position: absolute;\n top: 16px;\n right: 22px;\n color: @text-color-secondary;\n outline: none;\n\n &:hover {\n & when (@theme = dark) {\n color: fade(@white, 85%);\n }\n & when not (@theme = dark) {\n color: shade(@text-color-secondary, 40%);\n }\n }\n }\n\n &-btn {\n float: right;\n margin-top: 16px;\n }\n }\n\n .notification-fade-effect {\n animation-duration: 0.24s;\n animation-timing-function: @ease-in-out;\n animation-fill-mode: both;\n }\n\n &-fade-enter,\n &-fade-appear {\n .notification-fade-effect();\n\n opacity: 0;\n animation-play-state: paused;\n }\n\n &-fade-leave {\n .notification-fade-effect();\n\n animation-duration: 0.2s;\n animation-play-state: paused;\n }\n\n &-fade-enter&-fade-enter-active,\n &-fade-appear&-fade-appear-active {\n animation-name: NotificationFadeIn;\n animation-play-state: running;\n }\n\n &-fade-leave&-fade-leave-active {\n animation-name: NotificationFadeOut;\n animation-play-state: running;\n }\n}\n\n@keyframes NotificationFadeIn {\n 0% {\n left: @notification-width;\n opacity: 0;\n }\n\n 100% {\n left: 0;\n opacity: 1;\n }\n}\n\n@keyframes NotificationFadeOut {\n 0% {\n max-height: 150px;\n margin-bottom: @notification-margin-bottom;\n opacity: 1;\n }\n\n 100% {\n max-height: 0;\n margin-bottom: 0;\n padding-top: 0;\n padding-bottom: 0;\n opacity: 0;\n }\n}\n\n@import './rtl';\n@import './placement';\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@notification-prefix-cls: ~'@{ant-prefix}-notification';\n\n.@{notification-prefix-cls} {\n &-rtl {\n direction: rtl;\n }\n\n &-notice {\n &-closable &-message {\n .@{notification-prefix-cls}-rtl & {\n padding-right: 0;\n padding-left: 24px;\n }\n }\n\n &-with-icon &-message {\n .@{notification-prefix-cls}-rtl & {\n margin-right: 48px;\n margin-left: 0;\n }\n }\n\n &-with-icon &-description {\n .@{notification-prefix-cls}-rtl & {\n margin-right: 48px;\n margin-left: 0;\n }\n }\n\n &-icon {\n .@{notification-prefix-cls}-rtl & {\n margin-right: 4px;\n margin-left: 0;\n }\n }\n\n &-close {\n .@{notification-prefix-cls}-rtl & {\n right: auto;\n left: 22px;\n }\n }\n\n &-btn {\n .@{notification-prefix-cls}-rtl & {\n float: left;\n }\n }\n }\n}\n",".@{notification-prefix-cls} {\n &-top,\n &-bottom {\n margin-right: 0;\n margin-left: 0;\n }\n\n &-top {\n .@{notification-prefix-cls}-fade-enter.@{notification-prefix-cls}-fade-enter-active,\n .@{notification-prefix-cls}-fade-appear.@{notification-prefix-cls}-fade-appear-active {\n animation-name: NotificationTopFadeIn;\n }\n }\n\n &-bottom {\n .@{notification-prefix-cls}-fade-enter.@{notification-prefix-cls}-fade-enter-active,\n .@{notification-prefix-cls}-fade-appear.@{notification-prefix-cls}-fade-appear-active {\n animation-name: NotificationBottomFadeIn;\n }\n }\n\n &-topLeft,\n &-bottomLeft {\n margin-right: 0;\n margin-left: @notification-margin-edge;\n\n .@{notification-prefix-cls}-fade-enter.@{notification-prefix-cls}-fade-enter-active,\n .@{notification-prefix-cls}-fade-appear.@{notification-prefix-cls}-fade-appear-active {\n animation-name: NotificationLeftFadeIn;\n }\n }\n}\n\n@keyframes NotificationTopFadeIn {\n 0% {\n margin-top: -100%;\n opacity: 0;\n }\n\n 100% {\n margin-top: 0;\n opacity: 1;\n }\n}\n\n@keyframes NotificationBottomFadeIn {\n 0% {\n margin-bottom: -100%;\n opacity: 0;\n }\n\n 100% {\n margin-bottom: 0;\n opacity: 1;\n }\n}\n\n@keyframes NotificationLeftFadeIn {\n 0% {\n right: @notification-width;\n opacity: 0;\n }\n\n 100% {\n right: 0;\n opacity: 1;\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@pageheader-prefix-cls: ~'@{ant-prefix}-page-header';\n\n.@{pageheader-prefix-cls} {\n .reset-component();\n position: relative;\n padding: @page-header-padding-vertical @page-header-padding;\n background-color: @component-background;\n\n &-ghost {\n background-color: @page-header-ghost-bg;\n }\n\n &.has-breadcrumb {\n padding-top: @page-header-padding-breadcrumb;\n }\n\n &.has-footer {\n padding-bottom: 0;\n }\n\n &-back {\n margin-right: @margin-md;\n font-size: 16px;\n line-height: 1;\n\n &-button {\n .operation-unit();\n color: @page-header-back-color;\n }\n }\n\n .@{ant-prefix}-divider-vertical {\n height: 14px;\n margin: 0 @margin-sm;\n vertical-align: middle;\n }\n\n .@{ant-prefix}-breadcrumb + &-heading {\n margin-top: @margin-xs;\n }\n\n .text-overflow-ellipsis() {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n\n &-heading {\n display: flex;\n justify-content: space-between;\n\n &-left {\n display: flex;\n align-items: center;\n margin: (@margin-xs / 2) 0;\n overflow: hidden;\n }\n\n &-title {\n margin-right: @margin-sm;\n margin-bottom: 0;\n color: @heading-color;\n font-weight: 600;\n font-size: @page-header-heading-title;\n line-height: @height-base;\n .text-overflow-ellipsis();\n }\n\n .@{ant-prefix}-avatar {\n margin-right: @margin-sm;\n }\n\n &-sub-title {\n margin-right: @margin-sm;\n color: @text-color-secondary;\n font-size: @page-header-heading-sub-title;\n line-height: @line-height-base;\n .text-overflow-ellipsis();\n }\n\n &-extra {\n margin: (@margin-xs / 2) 0;\n white-space: nowrap;\n\n > * {\n white-space: unset;\n }\n }\n }\n\n &-content {\n padding-top: @page-header-content-padding-vertical;\n }\n\n &-footer {\n margin-top: @margin-md;\n .@{ant-prefix}-tabs {\n > .@{ant-prefix}-tabs-nav {\n margin: 0;\n\n &::before {\n border: none;\n }\n }\n\n .@{ant-prefix}-tabs-tab {\n padding-top: @padding-xs;\n padding-bottom: @padding-xs;\n font-size: @page-header-tabs-tab-font-size;\n }\n }\n }\n\n &-compact &-heading {\n flex-wrap: wrap;\n }\n}\n\n@import './rtl';\n",".operation-unit() {\n color: @link-color;\n outline: none;\n cursor: pointer;\n transition: color 0.3s;\n\n &:focus-visible,\n &:hover {\n color: @link-hover-color;\n }\n\n &:active {\n color: @link-active-color;\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@pageheader-prefix-cls: ~'@{ant-prefix}-page-header';\n\n.@{pageheader-prefix-cls} {\n &-rtl {\n direction: rtl;\n }\n\n &-back {\n .@{pageheader-prefix-cls}-rtl & {\n float: right;\n margin-right: 0;\n margin-left: 16px;\n }\n }\n\n &-heading {\n &-title {\n .@{pageheader-prefix-cls}-rtl & {\n margin-right: 0;\n margin-left: @margin-sm;\n }\n }\n\n .@{ant-prefix}-avatar {\n .@{pageheader-prefix-cls}-rtl & {\n margin-right: 0;\n margin-left: @margin-sm;\n }\n }\n\n &-sub-title {\n .@{pageheader-prefix-cls}-rtl & {\n float: right;\n margin-right: 0;\n margin-left: 12px;\n }\n }\n\n &-tags {\n .@{pageheader-prefix-cls}-rtl & {\n float: right;\n }\n }\n\n &-extra {\n .@{pageheader-prefix-cls}-rtl & {\n float: left;\n }\n\n > * {\n .@{pageheader-prefix-cls}-rtl & {\n margin-right: @margin-sm;\n margin-left: 0;\n }\n }\n\n > *:first-child {\n .@{pageheader-prefix-cls}-rtl & {\n margin-right: 0;\n }\n }\n }\n }\n\n &-footer {\n .@{ant-prefix}-tabs-bar {\n .@{ant-prefix}-tabs-nav {\n .@{pageheader-prefix-cls}-rtl & {\n float: right;\n }\n }\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n@import '../../input/style/mixin';\n\n@pagination-prefix-cls: ~'@{ant-prefix}-pagination';\n\n.@{pagination-prefix-cls} {\n .reset-component();\n\n ul,\n ol {\n margin: 0;\n padding: 0;\n list-style: none;\n }\n\n &::after {\n display: block;\n clear: both;\n height: 0;\n overflow: hidden;\n visibility: hidden;\n content: ' ';\n }\n\n &-total-text {\n display: inline-block;\n height: @pagination-item-size;\n margin-right: 8px;\n line-height: @pagination-item-size - 2px;\n vertical-align: middle;\n }\n\n &-item {\n display: inline-block;\n min-width: @pagination-item-size;\n height: @pagination-item-size;\n margin-right: 8px;\n font-family: @pagination-font-family;\n line-height: @pagination-item-size - 2px;\n text-align: center;\n vertical-align: middle;\n list-style: none;\n background-color: @pagination-item-bg;\n border: @border-width-base @border-style-base @border-color-base;\n border-radius: @border-radius-base;\n outline: 0;\n cursor: pointer;\n user-select: none;\n\n a {\n display: block;\n padding: 0 6px;\n color: @text-color;\n transition: none;\n\n &:hover {\n text-decoration: none;\n }\n }\n\n &:hover {\n border-color: @primary-color;\n transition: all 0.3s;\n\n a {\n color: @primary-color;\n }\n }\n\n // cannot merge with `&:hover`\n // see https://github.com/ant-design/ant-design/pull/34002\n &:focus-visible {\n border-color: @primary-color;\n transition: all 0.3s;\n\n a {\n color: @primary-color;\n }\n }\n\n &-active {\n font-weight: @pagination-font-weight-active;\n background: @pagination-item-bg-active;\n border-color: @primary-color;\n\n a {\n color: @primary-color;\n }\n\n &:hover {\n border-color: @primary-5;\n }\n\n &:focus-visible {\n border-color: @primary-5;\n }\n\n &:hover a {\n color: @primary-5;\n }\n\n &:focus-visible a {\n color: @primary-5;\n }\n }\n }\n\n &-jump-prev,\n &-jump-next {\n outline: 0;\n .@{pagination-prefix-cls}-item-container {\n position: relative;\n\n .@{pagination-prefix-cls}-item-link-icon {\n color: @primary-color;\n font-size: @font-size-sm;\n letter-spacing: -1px;\n opacity: 0;\n transition: all 0.2s;\n\n &-svg {\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n margin: auto;\n }\n }\n\n .@{pagination-prefix-cls}-item-ellipsis {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n display: block;\n margin: auto;\n color: @disabled-color;\n font-family: Arial, Helvetica, sans-serif;\n letter-spacing: 2px;\n text-align: center;\n text-indent: 0.13em;\n opacity: 1;\n transition: all 0.2s;\n }\n }\n\n &:hover {\n .@{pagination-prefix-cls}-item-link-icon {\n opacity: 1;\n }\n .@{pagination-prefix-cls}-item-ellipsis {\n opacity: 0;\n }\n }\n\n &:focus-visible {\n .@{pagination-prefix-cls}-item-link-icon {\n opacity: 1;\n }\n .@{pagination-prefix-cls}-item-ellipsis {\n opacity: 0;\n }\n }\n }\n\n &-prev,\n &-jump-prev,\n &-jump-next {\n margin-right: 8px;\n }\n\n &-prev,\n &-next,\n &-jump-prev,\n &-jump-next {\n display: inline-block;\n min-width: @pagination-item-size;\n height: @pagination-item-size;\n color: @text-color;\n font-family: @pagination-font-family;\n line-height: @pagination-item-size;\n text-align: center;\n vertical-align: middle;\n list-style: none;\n border-radius: @border-radius-base;\n cursor: pointer;\n transition: all 0.3s;\n }\n\n &-prev,\n &-next {\n font-family: Arial, Helvetica, sans-serif;\n outline: 0;\n\n button {\n color: @text-color;\n cursor: pointer;\n user-select: none;\n }\n\n &:hover button {\n border-color: @primary-5;\n }\n\n .@{pagination-prefix-cls}-item-link {\n display: block;\n width: 100%;\n height: 100%;\n padding: 0;\n font-size: 12px;\n text-align: center;\n background-color: @pagination-item-link-bg;\n border: @border-width-base @border-style-base @border-color-base;\n border-radius: @border-radius-base;\n outline: none;\n transition: all 0.3s;\n }\n\n &:focus-visible .@{pagination-prefix-cls}-item-link {\n color: @primary-color;\n border-color: @primary-color;\n }\n\n &:hover .@{pagination-prefix-cls}-item-link {\n color: @primary-color;\n border-color: @primary-color;\n }\n }\n\n &-disabled {\n &,\n &:hover {\n cursor: not-allowed;\n .@{pagination-prefix-cls}-item-link {\n color: @disabled-color;\n border-color: @border-color-base;\n cursor: not-allowed;\n }\n }\n\n &:focus-visible {\n cursor: not-allowed;\n .@{pagination-prefix-cls}-item-link {\n color: @disabled-color;\n border-color: @border-color-base;\n cursor: not-allowed;\n }\n }\n }\n\n &-slash {\n margin: 0 10px 0 5px;\n }\n\n &-options {\n display: inline-block;\n margin-left: 16px;\n vertical-align: middle;\n\n // IE11 css hack. `*::-ms-backdrop,` is a must have\n @media all and (-ms-high-contrast: none) {\n *::-ms-backdrop,\n & {\n vertical-align: top;\n }\n }\n\n &-size-changer.@{ant-prefix}-select {\n display: inline-block;\n width: auto;\n }\n\n &-quick-jumper {\n display: inline-block;\n height: @input-height-base;\n margin-left: @margin-xs;\n line-height: @input-height-base;\n vertical-align: top;\n\n input {\n .input();\n\n width: 50px;\n height: @input-height-base;\n margin: 0 8px;\n }\n }\n }\n\n &-simple &-prev,\n &-simple &-next {\n height: @pagination-item-size-sm;\n line-height: @pagination-item-size-sm;\n vertical-align: top;\n .@{pagination-prefix-cls}-item-link {\n height: @pagination-item-size-sm;\n background-color: transparent;\n border: 0;\n\n &::after {\n height: @pagination-item-size-sm;\n line-height: @pagination-item-size-sm;\n }\n }\n }\n\n &-simple &-simple-pager {\n display: inline-block;\n height: @pagination-item-size-sm;\n margin-right: 8px;\n\n input {\n box-sizing: border-box;\n height: 100%;\n margin-right: 8px;\n padding: 0 6px;\n text-align: center;\n background-color: @pagination-item-input-bg;\n border: @border-width-base @border-style-base @border-color-base;\n border-radius: @border-radius-base;\n outline: none;\n transition: border-color 0.3s;\n\n &:hover {\n border-color: @primary-color;\n }\n\n &:focus {\n border-color: @primary-color-hover;\n box-shadow: @input-outline-offset @outline-blur-size @outline-width @primary-color-outline;\n }\n\n &[disabled] {\n color: @disabled-color;\n background: @disabled-bg;\n border-color: @border-color-base;\n cursor: not-allowed;\n }\n }\n }\n\n &&-mini &-total-text,\n &&-mini &-simple-pager {\n height: @pagination-item-size-sm;\n line-height: @pagination-item-size-sm;\n }\n\n &&-mini &-item {\n min-width: @pagination-item-size-sm;\n height: @pagination-item-size-sm;\n margin: 0;\n line-height: @pagination-item-size-sm - 2px;\n }\n\n &&-mini &-item:not(&-item-active) {\n background: transparent;\n border-color: transparent;\n }\n\n &&-mini &-prev,\n &&-mini &-next {\n min-width: @pagination-item-size-sm;\n height: @pagination-item-size-sm;\n margin: 0;\n line-height: @pagination-item-size-sm;\n }\n\n &&-mini &-prev &-item-link,\n &&-mini &-next &-item-link {\n background: transparent;\n border-color: transparent;\n\n &::after {\n height: @pagination-item-size-sm;\n line-height: @pagination-item-size-sm;\n }\n }\n\n &&-mini &-jump-prev,\n &&-mini &-jump-next {\n height: @pagination-item-size-sm;\n margin-right: 0;\n line-height: @pagination-item-size-sm;\n }\n\n &&-mini &-options {\n margin-left: 2px;\n\n &-size-changer {\n top: @pagination-mini-options-size-changer-top;\n }\n\n &-quick-jumper {\n height: @pagination-item-size-sm;\n line-height: @pagination-item-size-sm;\n\n input {\n .input-sm();\n\n width: 44px;\n height: @input-height-sm;\n }\n }\n }\n\n // ============================ Disabled ============================\n &&-disabled {\n cursor: not-allowed;\n\n .@{pagination-prefix-cls}-item {\n background: @disabled-bg;\n border-color: @border-color-base;\n cursor: not-allowed;\n\n a {\n color: @disabled-color;\n background: transparent;\n border: none;\n cursor: not-allowed;\n }\n\n &-active {\n background: @pagination-item-disabled-bg-active;\n\n a {\n color: @pagination-item-disabled-color-active;\n }\n }\n }\n\n .@{pagination-prefix-cls}-item-link {\n color: @disabled-color;\n background: @disabled-bg;\n border-color: @border-color-base;\n cursor: not-allowed;\n .@{pagination-prefix-cls}-simple& {\n background: transparent;\n }\n }\n\n .@{pagination-prefix-cls}-item-link-icon {\n opacity: 0;\n }\n\n .@{pagination-prefix-cls}-item-ellipsis {\n opacity: 1;\n }\n\n .@{pagination-prefix-cls}-simple-pager {\n color: @disabled-color;\n }\n }\n}\n\n@media only screen and (max-width: @screen-lg) {\n .@{pagination-prefix-cls}-item {\n &-after-jump-prev,\n &-before-jump-next {\n display: none;\n }\n }\n}\n\n@media only screen and (max-width: @screen-sm) {\n .@{pagination-prefix-cls}-options {\n display: none;\n }\n}\n\n@import './rtl';\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n@import '../../input/style/mixin';\n\n@pagination-prefix-cls: ~'@{ant-prefix}-pagination';\n\n.@{pagination-prefix-cls}-rtl {\n .@{pagination-prefix-cls}-total-text {\n margin-right: 0;\n margin-left: 8px;\n }\n\n .@{pagination-prefix-cls}-item,\n .@{pagination-prefix-cls}-prev,\n .@{pagination-prefix-cls}-jump-prev,\n .@{pagination-prefix-cls}-jump-next {\n margin-right: 0;\n margin-left: 8px;\n }\n\n .@{pagination-prefix-cls}-slash {\n margin: 0 5px 0 10px;\n }\n\n .@{pagination-prefix-cls}-options {\n margin-right: 16px;\n margin-left: 0;\n\n .@{pagination-prefix-cls}-options-size-changer.@{ant-prefix}-select {\n margin-right: 0;\n margin-left: 8px;\n }\n\n .@{pagination-prefix-cls}-options-quick-jumper {\n margin-left: 0;\n }\n }\n\n &.@{pagination-prefix-cls}-simple {\n .@{pagination-prefix-cls}-simple-pager {\n margin-right: 0;\n margin-left: 8px;\n\n input {\n margin-right: 0;\n margin-left: 8px;\n }\n }\n }\n\n &.@{pagination-prefix-cls}.mini .@{pagination-prefix-cls}-options {\n margin-right: 2px;\n margin-left: 0;\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@popconfirm-prefix-cls: ~'@{ant-prefix}-popconfirm';\n\n.@{popconfirm-prefix-cls} {\n z-index: @zindex-popoconfirm;\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@popover-prefix-cls: ~'@{ant-prefix}-popover';\n\n@popover-arrow-rotate-width: sqrt(@popover-arrow-width * @popover-arrow-width * 2) + 6px;\n\n@popover-arrow-offset-vertical: 12px;\n@popover-arrow-offset-horizontal: 16px;\n\n.@{popover-prefix-cls} {\n .reset-component();\n\n position: absolute;\n top: 0;\n left: 0;\n z-index: @zindex-popover;\n font-weight: normal;\n white-space: normal;\n text-align: left;\n cursor: auto;\n user-select: text;\n\n &-content {\n position: relative;\n }\n\n &::after {\n position: absolute;\n background: fade(@white, 1%);\n content: '';\n }\n\n &-hidden {\n display: none;\n }\n\n // Offset the popover to account for the popover arrow\n &-placement-top,\n &-placement-topLeft,\n &-placement-topRight {\n padding-bottom: @popover-distance;\n }\n\n &-placement-right,\n &-placement-rightTop,\n &-placement-rightBottom {\n padding-left: @popover-distance;\n }\n\n &-placement-bottom,\n &-placement-bottomLeft,\n &-placement-bottomRight {\n padding-top: @popover-distance;\n }\n\n &-placement-left,\n &-placement-leftTop,\n &-placement-leftBottom {\n padding-right: @popover-distance;\n }\n\n &-inner {\n background-color: @popover-bg;\n background-clip: padding-box;\n border-radius: @border-radius-base;\n box-shadow: @box-shadow-base;\n }\n\n @media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {\n /* IE10+ */\n &-inner {\n box-shadow: @box-shadow-base;\n }\n }\n\n &-title {\n min-width: @popover-min-width;\n min-height: @popover-min-height;\n margin: 0; // reset heading margin\n padding: 5px @popover-padding-horizontal 4px;\n color: @heading-color;\n font-weight: 500;\n border-bottom: 1px solid @border-color-split;\n }\n\n &-inner-content {\n padding: @padding-sm @popover-padding-horizontal;\n color: @popover-color;\n }\n\n &-message {\n display: flex;\n align-items: center;\n padding: 4px 0 12px;\n color: @popover-color;\n font-size: @font-size-base;\n .@{iconfont-css-prefix} {\n color: @warning-color;\n font-size: @font-size-base;\n }\n\n &-icon {\n display: inline-block;\n margin-right: 8px;\n }\n }\n\n &-buttons {\n margin-bottom: 4px;\n text-align: right;\n\n button:not(:first-child) {\n margin-left: 8px;\n }\n }\n\n // Arrows\n &-arrow {\n position: absolute;\n display: block;\n width: @popover-arrow-rotate-width;\n height: @popover-arrow-rotate-width;\n overflow: hidden;\n background: transparent;\n pointer-events: none;\n\n &-content {\n --antd-arrow-background-color: @popover-bg;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n display: block;\n width: @popover-arrow-width;\n height: @popover-arrow-width;\n margin: auto;\n content: '';\n pointer-events: auto;\n .roundedArrow(@popover-arrow-width, 5px);\n }\n }\n\n &-placement-top &-arrow,\n &-placement-topLeft &-arrow,\n &-placement-topRight &-arrow {\n bottom: 0;\n transform: translateY(100%);\n\n &-content {\n box-shadow: 3px 3px 7px fade(@black, 7%);\n transform: translateY((-@popover-arrow-rotate-width / 2)) rotate(45deg);\n }\n }\n\n &-placement-top &-arrow {\n left: 50%;\n transform: translateY(100%) translateX(-50%);\n }\n\n &-placement-topLeft &-arrow {\n left: @popover-arrow-offset-horizontal;\n }\n\n &-placement-topRight &-arrow {\n right: @popover-arrow-offset-horizontal;\n }\n\n &-placement-right &-arrow,\n &-placement-rightTop &-arrow,\n &-placement-rightBottom &-arrow {\n left: 0;\n transform: translateX(-100%);\n\n &-content {\n box-shadow: 3px 3px 7px fade(@black, 7%);\n transform: translateX((@popover-arrow-rotate-width / 2)) rotate(135deg);\n }\n }\n\n &-placement-right &-arrow {\n top: 50%;\n transform: translateX(-100%) translateY(-50%);\n }\n\n &-placement-rightTop &-arrow {\n top: @popover-arrow-offset-vertical;\n }\n\n &-placement-rightBottom &-arrow {\n bottom: @popover-arrow-offset-vertical;\n }\n\n &-placement-bottom &-arrow,\n &-placement-bottomLeft &-arrow,\n &-placement-bottomRight &-arrow {\n top: 0;\n transform: translateY(-100%);\n\n &-content {\n box-shadow: 2px 2px 5px fade(@black, 6%);\n transform: translateY((@popover-arrow-rotate-width / 2)) rotate(-135deg);\n }\n }\n\n &-placement-bottom &-arrow {\n left: 50%;\n transform: translateY(-100%) translateX(-50%);\n }\n\n &-placement-bottomLeft &-arrow {\n left: @popover-arrow-offset-horizontal;\n }\n\n &-placement-bottomRight &-arrow {\n right: @popover-arrow-offset-horizontal;\n }\n\n &-placement-left &-arrow,\n &-placement-leftTop &-arrow,\n &-placement-leftBottom &-arrow {\n right: 0;\n transform: translateX(100%);\n\n &-content {\n box-shadow: 3px 3px 7px fade(@black, 7%);\n transform: translateX((-@popover-arrow-rotate-width / 2)) rotate(-45deg);\n }\n }\n\n &-placement-left &-arrow {\n top: 50%;\n transform: translateX(100%) translateY(-50%);\n }\n\n &-placement-leftTop &-arrow {\n top: @popover-arrow-offset-vertical;\n }\n\n &-placement-leftBottom &-arrow {\n bottom: @popover-arrow-offset-vertical;\n }\n}\n\n.generator-popover-preset-color(@i: length(@preset-colors)) when (@i > 0) {\n .generator-popover-preset-color(@i - 1);\n @color: extract(@preset-colors, @i);\n @lightColor: '@{color}-6';\n .@{popover-prefix-cls}-@{color} {\n .@{popover-prefix-cls}-inner {\n background-color: @@lightColor;\n }\n .@{popover-prefix-cls}-arrow {\n &-content {\n background-color: @@lightColor;\n }\n }\n }\n}\n.generator-popover-preset-color();\n\n@import './rtl';\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@popover-prefix-cls: ~'@{ant-prefix}-popover';\n\n.@{popover-prefix-cls} {\n &-rtl {\n direction: rtl;\n text-align: right;\n }\n\n &-message {\n &-icon {\n .@{popover-prefix-cls}-rtl & {\n margin-right: 0;\n margin-left: 8px;\n }\n }\n\n &-title {\n .@{popover-prefix-cls}-rtl & {\n padding-left: @padding-md;\n }\n }\n }\n\n &-buttons {\n .@{popover-prefix-cls}-rtl & {\n text-align: left;\n }\n\n button {\n .@{popover-prefix-cls}-rtl & {\n margin-right: 8px;\n margin-left: 0;\n }\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@progress-prefix-cls: ~'@{ant-prefix}-progress';\n\n.@{progress-prefix-cls} {\n .reset-component();\n\n display: inline-block;\n\n &-line {\n position: relative;\n width: 100%;\n font-size: @font-size-base;\n }\n\n &-steps {\n display: inline-block;\n\n &-outer {\n display: flex;\n flex-direction: row;\n align-items: center;\n }\n\n &-item {\n flex-shrink: 0;\n min-width: 2px;\n margin-right: 2px;\n background: @progress-steps-item-bg;\n transition: all 0.3s;\n\n &-active {\n background: @progress-default-color;\n }\n }\n }\n\n &-small&-line,\n &-small&-line &-text .@{iconfont-css-prefix} {\n font-size: @font-size-sm;\n }\n\n &-outer {\n display: inline-block;\n width: 100%;\n margin-right: 0;\n padding-right: 0;\n .@{progress-prefix-cls}-show-info & {\n margin-right: ~'calc(-2em - 8px)';\n padding-right: ~'calc(2em + 8px)';\n }\n }\n\n &-inner {\n position: relative;\n display: inline-block;\n width: 100%;\n overflow: hidden;\n vertical-align: middle;\n background-color: @progress-remaining-color;\n border-radius: @progress-radius;\n }\n\n &-circle-trail {\n stroke: @progress-remaining-color;\n }\n\n &-circle-path {\n animation: ~'@{ant-prefix}-progress-appear' 0.3s;\n }\n\n &-inner:not(.@{ant-prefix}-progress-circle-gradient) {\n .@{ant-prefix}-progress-circle-path {\n stroke: @progress-default-color;\n }\n }\n\n &-success-bg,\n &-bg {\n position: relative;\n background-color: @progress-default-color;\n border-radius: @progress-radius;\n transition: all 0.4s @ease-out-circ 0s;\n }\n\n &-success-bg {\n position: absolute;\n top: 0;\n left: 0;\n background-color: @success-color;\n }\n\n &-text {\n display: inline-block;\n width: 2em;\n margin-left: 8px;\n color: @progress-info-text-color;\n font-size: @progress-text-font-size;\n line-height: 1;\n white-space: nowrap;\n text-align: left;\n vertical-align: middle;\n word-break: normal;\n .@{iconfont-css-prefix} {\n font-size: @font-size-base;\n }\n }\n\n &-status-active {\n .@{progress-prefix-cls}-bg::before {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: @component-background;\n border-radius: 10px;\n opacity: 0;\n animation: ~'@{ant-prefix}-progress-active' 2.4s @ease-out-quint infinite;\n content: '';\n }\n }\n\n &-status-exception {\n .@{progress-prefix-cls}-bg {\n background-color: @error-color;\n }\n .@{progress-prefix-cls}-text {\n color: @error-color;\n }\n }\n\n &-status-exception &-inner:not(.@{progress-prefix-cls}-circle-gradient) {\n .@{progress-prefix-cls}-circle-path {\n stroke: @error-color;\n }\n }\n\n &-status-success {\n .@{progress-prefix-cls}-bg {\n background-color: @success-color;\n }\n .@{progress-prefix-cls}-text {\n color: @success-color;\n }\n }\n\n &-status-success &-inner:not(.@{progress-prefix-cls}-circle-gradient) {\n .@{progress-prefix-cls}-circle-path {\n stroke: @success-color;\n }\n }\n\n &-circle &-inner {\n position: relative;\n line-height: 1;\n background-color: transparent;\n }\n\n &-circle &-text {\n position: absolute;\n top: 50%;\n left: 50%;\n width: 100%;\n margin: 0;\n padding: 0;\n color: @progress-text-color;\n font-size: @progress-circle-text-font-size;\n line-height: 1;\n white-space: normal;\n text-align: center;\n transform: translate(-50%, -50%);\n\n .@{iconfont-css-prefix} {\n font-size: (14 / 12em);\n }\n }\n\n &-circle&-status-exception {\n .@{progress-prefix-cls}-text {\n color: @error-color;\n }\n }\n\n &-circle&-status-success {\n .@{progress-prefix-cls}-text {\n color: @success-color;\n }\n }\n}\n\n@keyframes ~\"@{ant-prefix}-progress-active\" {\n 0% {\n transform: translateX(-100%) scaleX(0);\n opacity: 0.1;\n }\n\n 20% {\n transform: translateX(-100%) scaleX(0);\n opacity: 0.5;\n }\n\n 100% {\n transform: translateX(0) scaleX(1);\n opacity: 0;\n }\n}\n\n@import './rtl';\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@progress-prefix-cls: ~'@{ant-prefix}-progress';\n\n.@{progress-prefix-cls} {\n &-rtl {\n direction: rtl;\n }\n\n &-outer {\n .@{progress-prefix-cls}-show-info & {\n .@{progress-prefix-cls}-rtl& {\n margin-right: 0;\n margin-left: ~'calc(-2em - 8px)';\n padding-right: 0;\n padding-left: ~'calc(2em + 8px)';\n }\n }\n }\n\n &-success-bg {\n .@{progress-prefix-cls}-rtl & {\n right: 0;\n left: auto;\n }\n }\n\n &-line &-text,\n &-steps &-text {\n .@{progress-prefix-cls}-rtl& {\n margin-right: 8px;\n margin-left: 0;\n text-align: right;\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@radio-prefix-cls: ~'@{ant-prefix}-radio';\n@radio-group-prefix-cls: ~'@{radio-prefix-cls}-group';\n@radio-inner-prefix-cls: ~'@{radio-prefix-cls}-inner';\n@radio-duration: 0.3s;\n@radio-focus-shadow: 0 0 0 3px @slider-handle-color-focus-shadow;\n@radio-button-focus-shadow: @radio-focus-shadow;\n\n.@{radio-group-prefix-cls} {\n .reset-component();\n\n display: inline-block;\n font-size: 0;\n\n .@{ant-prefix}-badge-count {\n z-index: 1;\n }\n\n > .@{ant-prefix}-badge:not(:first-child) > .@{radio-prefix-cls}-button-wrapper {\n border-left: none;\n }\n}\n\n// 一般状态\n.@{radio-prefix-cls}-wrapper {\n .reset-component();\n position: relative;\n display: inline-flex;\n align-items: baseline;\n margin-right: @radio-wrapper-margin-right;\n cursor: pointer;\n\n &-disabled {\n cursor: not-allowed;\n }\n\n &::after {\n display: inline-block;\n width: 0;\n overflow: hidden;\n content: '\\a0';\n }\n\n &&-in-form-item {\n input[type='radio'] {\n width: 14px;\n height: 14px;\n }\n }\n}\n\n.@{radio-prefix-cls} {\n .reset-component();\n\n position: relative;\n top: @radio-top;\n display: inline-block;\n outline: none;\n cursor: pointer;\n\n .@{radio-prefix-cls}-wrapper:hover &,\n &:hover .@{radio-inner-prefix-cls},\n &-input:focus + .@{radio-inner-prefix-cls} {\n border-color: @radio-dot-color;\n }\n\n &-input:focus + .@{radio-inner-prefix-cls} {\n box-shadow: @radio-focus-shadow;\n }\n\n &-checked::after {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: 1px solid @radio-dot-color;\n border-radius: 50%;\n visibility: hidden;\n animation: antRadioEffect 0.36s ease-in-out;\n animation-fill-mode: both;\n content: '';\n }\n\n &:hover::after,\n .@{radio-prefix-cls}-wrapper:hover &::after {\n visibility: visible;\n }\n\n &-inner {\n &::after {\n position: absolute;\n top: 50%;\n left: 50%;\n display: block;\n width: @radio-size;\n height: @radio-size;\n margin-top: -(@radio-size / 2);\n margin-left: -(@radio-size / 2);\n background-color: @radio-dot-color;\n border-top: 0;\n border-left: 0;\n border-radius: @radio-size;\n transform: scale(0);\n opacity: 0;\n transition: all @radio-duration @ease-in-out-circ;\n content: ' ';\n }\n\n position: relative;\n top: 0;\n left: 0;\n display: block;\n width: @radio-size;\n height: @radio-size;\n background-color: @radio-button-bg;\n border-color: @border-color-base;\n border-style: solid;\n border-width: @radio-border-width;\n border-radius: 50%;\n transition: all @radio-duration;\n }\n\n &-input {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1;\n cursor: pointer;\n opacity: 0;\n }\n\n &&-disabled {\n .@{radio-inner-prefix-cls} {\n border-color: @border-color-base;\n }\n }\n}\n\n// 选中状态\n.@{radio-prefix-cls}-checked {\n .@{radio-inner-prefix-cls} {\n border-color: @radio-dot-color;\n\n &::after {\n transform: scale((unit(@radio-dot-size) / unit(@radio-size)));\n opacity: 1;\n transition: all @radio-duration @ease-in-out-circ;\n }\n }\n}\n\n.@{radio-prefix-cls}-disabled {\n cursor: not-allowed;\n\n .@{radio-inner-prefix-cls} {\n background-color: @input-disabled-bg;\n cursor: not-allowed;\n\n &::after {\n background-color: @radio-dot-disabled-color;\n }\n }\n\n .@{radio-prefix-cls}-input {\n cursor: not-allowed;\n }\n\n & + span {\n color: @disabled-color;\n cursor: not-allowed;\n }\n}\n\nspan.@{radio-prefix-cls} + * {\n padding-right: 8px;\n padding-left: 8px;\n}\n\n.@{radio-prefix-cls}-button-wrapper {\n position: relative;\n display: inline-block;\n height: @btn-height-base;\n margin: 0;\n padding: 0 @radio-button-padding-horizontal;\n color: @radio-button-color;\n font-size: @font-size-base;\n line-height: @btn-height-base - 2px;\n background: @radio-button-bg;\n border: @border-width-base @border-style-base @border-color-base;\n // strange align fix for chrome but works\n // https://gw.alipayobjects.com/zos/rmsportal/VFTfKXJuogBAXcvfAUWJ.gif\n border-top-width: @border-width-base + 0.02px;\n border-left-width: 0;\n cursor: pointer;\n transition: color 0.3s, background 0.3s, border-color 0.3s, box-shadow 0.3s;\n\n a {\n color: @radio-button-color;\n }\n\n > .@{radio-prefix-cls}-button {\n position: absolute;\n top: 0;\n left: 0;\n z-index: -1;\n width: 100%;\n height: 100%;\n }\n\n .@{radio-group-prefix-cls}-large & {\n height: @input-height-lg;\n font-size: @font-size-lg;\n line-height: @input-height-lg - 2px;\n }\n\n .@{radio-group-prefix-cls}-small & {\n height: @input-height-sm;\n padding: 0 @control-padding-horizontal-sm - 1px;\n line-height: @input-height-sm - 2px;\n }\n\n &:not(:first-child) {\n &::before {\n position: absolute;\n top: @border-width-base * -1;\n left: -1px;\n display: block;\n box-sizing: content-box;\n width: 1px;\n height: 100%;\n padding: @border-width-base 0;\n background-color: @border-color-base;\n transition: background-color 0.3s;\n content: '';\n }\n }\n\n &:first-child {\n border-left: @border-width-base @border-style-base @border-color-base;\n border-radius: @border-radius-base 0 0 @border-radius-base;\n }\n\n &:last-child {\n border-radius: 0 @border-radius-base @border-radius-base 0;\n }\n\n &:first-child:last-child {\n border-radius: @border-radius-base;\n }\n\n &:hover {\n position: relative;\n color: @radio-dot-color;\n }\n\n &:focus-within {\n box-shadow: @radio-button-focus-shadow;\n }\n\n .@{radio-prefix-cls}-inner,\n input[type='checkbox'],\n input[type='radio'] {\n width: 0;\n height: 0;\n opacity: 0;\n pointer-events: none;\n }\n\n &-checked:not(&-disabled) {\n z-index: 1;\n color: @radio-dot-color;\n background: @radio-button-checked-bg;\n border-color: @radio-dot-color;\n\n &::before {\n background-color: @radio-dot-color;\n }\n\n &:first-child {\n border-color: @radio-dot-color;\n }\n\n &:hover {\n color: @radio-button-hover-color;\n border-color: @radio-button-hover-color;\n\n &::before {\n background-color: @radio-button-hover-color;\n }\n }\n\n &:active {\n color: @radio-button-active-color;\n border-color: @radio-button-active-color;\n\n &::before {\n background-color: @radio-button-active-color;\n }\n }\n\n &:focus-within {\n box-shadow: @radio-button-focus-shadow;\n }\n }\n\n .@{radio-group-prefix-cls}-solid &-checked:not(&-disabled) {\n color: @radio-solid-checked-color;\n background: @radio-dot-color;\n border-color: @radio-dot-color;\n\n &:hover {\n color: @radio-solid-checked-color;\n background: @radio-button-hover-color;\n border-color: @radio-button-hover-color;\n }\n\n &:active {\n color: @radio-solid-checked-color;\n background: @radio-button-active-color;\n border-color: @radio-button-active-color;\n }\n\n &:focus-within {\n box-shadow: @radio-button-focus-shadow;\n }\n }\n\n &-disabled {\n color: @disabled-color;\n background-color: @input-disabled-bg;\n border-color: @border-color-base;\n cursor: not-allowed;\n\n &:first-child,\n &:hover {\n color: @disabled-color;\n background-color: @input-disabled-bg;\n border-color: @border-color-base;\n }\n\n &:first-child {\n border-left-color: @border-color-base;\n }\n }\n\n &-disabled&-checked {\n color: @radio-disabled-button-checked-color;\n background-color: @radio-disabled-button-checked-bg;\n border-color: @border-color-base;\n box-shadow: none;\n }\n}\n\n@keyframes antRadioEffect {\n 0% {\n transform: scale(1);\n opacity: 0.5;\n }\n\n 100% {\n transform: scale(1.6);\n opacity: 0;\n }\n}\n\n@import './rtl';\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@radio-prefix-cls: ~'@{ant-prefix}-radio';\n@radio-group-prefix-cls: ~'@{radio-prefix-cls}-group';\n@radio-prefix-cls-button-wrapper: ~'@{radio-prefix-cls}-button-wrapper';\n\n.@{radio-group-prefix-cls} {\n &&-rtl {\n direction: rtl;\n }\n}\n\n// 一般状态\n.@{radio-prefix-cls}-wrapper {\n &&-rtl {\n margin-right: 0;\n margin-left: @radio-wrapper-margin-right;\n direction: rtl;\n }\n}\n\n.@{radio-prefix-cls-button-wrapper} {\n &&-rtl {\n border-right-width: 0;\n border-left-width: @border-width-base;\n }\n\n &:not(:first-child) {\n &::before {\n .@{radio-prefix-cls-button-wrapper}.@{radio-prefix-cls-button-wrapper}-rtl& {\n right: -1px;\n left: 0;\n }\n }\n }\n\n &:first-child {\n .@{radio-prefix-cls-button-wrapper}.@{radio-prefix-cls-button-wrapper}-rtl& {\n border-right: @border-width-base @border-style-base @border-color-base;\n border-radius: 0 @border-radius-base @border-radius-base 0;\n }\n .@{radio-prefix-cls-button-wrapper}-checked:not([class*=~\"' @{radio-prefix-cls}-button-wrapper-disabled'\"])& {\n border-right-color: @radio-button-hover-color;\n }\n }\n\n &:last-child {\n .@{radio-prefix-cls-button-wrapper}.@{radio-prefix-cls-button-wrapper}-rtl& {\n border-radius: @border-radius-base 0 0 @border-radius-base;\n }\n }\n\n &-disabled {\n &:first-child {\n .@{radio-prefix-cls-button-wrapper}.@{radio-prefix-cls-button-wrapper}-rtl& {\n border-right-color: @border-color-base;\n }\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@rate-prefix-cls: ~'@{ant-prefix}-rate';\n\n.@{rate-prefix-cls} {\n .reset-component();\n\n display: inline-block;\n margin: 0;\n padding: 0;\n color: @rate-star-color;\n font-size: @rate-star-size;\n line-height: unset;\n list-style: none;\n outline: none;\n\n &-disabled &-star {\n cursor: default;\n\n > div:hover {\n transform: scale(1);\n }\n }\n\n &-star {\n position: relative;\n display: inline-block;\n color: inherit;\n cursor: pointer;\n\n &:not(:last-child) {\n margin-right: 8px;\n }\n\n > div {\n transition: all 0.3s, outline 0s;\n\n &:hover {\n transform: @rate-star-hover-scale;\n }\n\n &:focus {\n outline: 0;\n }\n\n &:focus-visible {\n outline: 1px dashed @rate-star-color;\n transform: @rate-star-hover-scale;\n }\n }\n\n &-first,\n &-second {\n color: @rate-star-bg;\n transition: all 0.3s;\n user-select: none;\n .@{iconfont-css-prefix} {\n vertical-align: middle;\n }\n }\n\n &-first {\n position: absolute;\n top: 0;\n left: 0;\n width: 50%;\n height: 100%;\n overflow: hidden;\n opacity: 0;\n }\n\n &-half &-first,\n &-half &-second {\n opacity: 1;\n }\n\n &-half &-first,\n &-full &-second {\n color: inherit;\n }\n }\n\n &-text {\n display: inline-block;\n margin: 0 8px;\n font-size: @font-size-base;\n }\n}\n\n@import './rtl';\n",".@{rate-prefix-cls} {\n &-rtl {\n direction: rtl;\n }\n\n &-star {\n &:not(:last-child) {\n .@{rate-prefix-cls}-rtl & {\n margin-right: 0;\n margin-left: 8px;\n }\n }\n\n &-first {\n .@{rate-prefix-cls}-rtl & {\n right: 0;\n left: auto;\n }\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@result-prefix-cls: ~'@{ant-prefix}-result';\n\n.@{result-prefix-cls} {\n padding: 48px 32px;\n // status color\n &-success &-icon > .@{iconfont-css-prefix} {\n color: @success-color;\n }\n\n &-error &-icon > .@{iconfont-css-prefix} {\n color: @error-color;\n }\n\n &-info &-icon > .@{iconfont-css-prefix} {\n color: @info-color;\n }\n\n &-warning &-icon > .@{iconfont-css-prefix} {\n color: @warning-color;\n }\n\n // Exception Status image\n &-image {\n width: 250px;\n height: 295px;\n margin: auto;\n }\n\n &-icon {\n margin-bottom: 24px;\n text-align: center;\n\n > .@{iconfont-css-prefix} {\n font-size: @result-icon-font-size;\n }\n }\n\n &-title {\n color: @heading-color;\n font-size: @result-title-font-size;\n line-height: 1.8;\n text-align: center;\n }\n\n &-subtitle {\n color: @text-color-secondary;\n font-size: @result-subtitle-font-size;\n line-height: 1.6;\n text-align: center;\n }\n\n &-extra {\n margin: @result-extra-margin;\n text-align: center;\n\n > * {\n margin-right: 8px;\n\n &:last-child {\n margin-right: 0;\n }\n }\n }\n\n &-content {\n margin-top: 24px;\n padding: 24px 40px;\n background-color: @background-color-light;\n }\n}\n\n@import './rtl';\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@result-prefix-cls: ~'@{ant-prefix}-result';\n\n.@{result-prefix-cls} {\n &-rtl {\n direction: rtl;\n }\n\n &-extra {\n > * {\n .@{result-prefix-cls}-rtl & {\n margin-right: 0;\n margin-left: 8px;\n }\n\n &:last-child {\n .@{result-prefix-cls}-rtl & {\n margin-left: 0;\n }\n }\n }\n }\n}\n","// mixins\n.segmented-disabled-item {\n &,\n &:hover,\n &:focus {\n color: @disabled-color;\n cursor: not-allowed;\n }\n}\n\n.segmented-item-selected {\n background-color: @segmented-selected-bg;\n border-radius: @border-radius-base;\n box-shadow: 0 2px 8px -2px fade(@black, 5%), 0 1px 4px -1px fade(@black, 7%),\n 0 0 1px 0 fade(@black, 8%);\n}\n\n.segmented-text-ellipsis {\n overflow: hidden;\n // handle text ellipsis\n white-space: nowrap;\n text-overflow: ellipsis;\n word-break: keep-all;\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n@import './mixins.less';\n\n@segmented-prefix-cls: ~'@{ant-prefix}-segmented';\n\n@segmented-container-padding: 2px;\n\n.@{segmented-prefix-cls} {\n .reset-component();\n display: inline-block;\n padding: @segmented-container-padding;\n color: @segmented-label-color;\n background-color: @segmented-bg;\n border-radius: @border-radius-base;\n transition: all 0.3s @ease-in-out;\n\n &-group {\n position: relative;\n display: flex;\n align-items: stretch;\n justify-items: flex-start;\n width: 100%;\n }\n\n // block styles\n &&-block {\n display: flex;\n }\n\n &&-block &-item {\n flex: 1;\n min-width: 0;\n }\n\n // hover/focus styles\n &:not(&-disabled) {\n &:hover,\n &:focus {\n background-color: @segmented-hover-bg;\n }\n }\n\n // item styles\n &-item {\n position: relative;\n text-align: center;\n cursor: pointer;\n transition: color 0.3s @ease-in-out;\n\n &-selected {\n .segmented-item-selected();\n color: @segmented-label-hover-color;\n }\n\n &:hover,\n &:focus {\n color: @segmented-label-hover-color;\n }\n\n &-label {\n min-height: @input-height-base - @segmented-container-padding * 2;\n padding: 0 @input-padding-horizontal-base;\n line-height: @input-height-base - @segmented-container-padding * 2;\n .segmented-text-ellipsis();\n }\n\n // syntactic sugar to add `icon` for Segmented Item\n &-icon + * {\n margin-left: (@margin-sm / 2);\n }\n\n &-input {\n position: absolute;\n top: 0;\n left: 0;\n width: 0;\n height: 0;\n opacity: 0;\n pointer-events: none;\n }\n }\n\n // size styles\n &&-lg &-item-label {\n min-height: @input-height-lg - @segmented-container-padding * 2;\n padding: 0 @input-padding-horizontal-lg;\n font-size: @font-size-lg;\n line-height: @input-height-lg - @segmented-container-padding * 2;\n }\n\n &&-sm &-item-label {\n min-height: @input-height-sm - @segmented-container-padding * 2;\n padding: 0 @input-padding-horizontal-sm;\n line-height: @input-height-sm - @segmented-container-padding * 2;\n }\n\n // disabled styles\n &-item-disabled {\n .segmented-disabled-item();\n }\n\n // thumb styles\n &-thumb {\n .segmented-item-selected();\n\n position: absolute;\n top: 0;\n left: 0;\n width: 0;\n height: 100%;\n padding: 4px 0;\n }\n\n // transition effect when `appear-active`\n &-thumb-motion-appear-active {\n transition: transform 0.3s @ease-in-out, width 0.3s @ease-in-out;\n will-change: transform, width;\n }\n}\n\n@import './rtl';\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@segmented-prefix-cls: ~'@{ant-prefix}-segmented';\n\n.@{segmented-prefix-cls} {\n &&-rtl {\n direction: rtl;\n }\n\n &&-rtl &-item-icon {\n margin-right: 0;\n margin-left: 6px;\n }\n}\n","@import (reference) '../../style/themes/index';\n@select-prefix-cls: ~'@{ant-prefix}-select';\n\n@selection-item-padding: ceil(@font-size-base * 1.25);\n\n.@{select-prefix-cls}-single {\n // ========================= Selector =========================\n .@{select-prefix-cls}-selector {\n display: flex;\n\n .@{select-prefix-cls}-selection-search {\n position: absolute;\n top: 0;\n right: @input-padding-horizontal-base;\n bottom: 0;\n left: @input-padding-horizontal-base;\n\n &-input {\n width: 100%;\n }\n }\n\n .@{select-prefix-cls}-selection-item,\n .@{select-prefix-cls}-selection-placeholder {\n padding: 0;\n line-height: @select-height-without-border;\n transition: all 0.3s;\n }\n\n .@{select-prefix-cls}-selection-item {\n position: relative;\n user-select: none;\n }\n\n .@{select-prefix-cls}-selection-placeholder {\n transition: none;\n pointer-events: none;\n }\n\n // For common baseline align\n &::after,\n /* For '' value baseline align */\n .@{select-prefix-cls}-selection-item::after,\n /* For undefined value baseline align */\n .@{select-prefix-cls}-selection-placeholder::after {\n display: inline-block;\n width: 0;\n visibility: hidden;\n content: '\\a0';\n }\n }\n\n // With arrow should provides `padding-right` to show the arrow\n &.@{select-prefix-cls}-show-arrow .@{select-prefix-cls}-selection-search {\n right: @input-padding-horizontal-base + @font-size-base;\n }\n\n &.@{select-prefix-cls}-show-arrow .@{select-prefix-cls}-selection-item,\n &.@{select-prefix-cls}-show-arrow .@{select-prefix-cls}-selection-placeholder {\n padding-right: @selection-item-padding;\n }\n\n // Opacity selection if open\n &.@{select-prefix-cls}-open .@{select-prefix-cls}-selection-item {\n color: @input-placeholder-color;\n }\n\n // ========================== Input ==========================\n // We only change the style of non-customize input which is only support by `combobox` mode.\n\n // Not customize\n &:not(.@{select-prefix-cls}-customize-input) {\n .@{select-prefix-cls}-selector {\n width: 100%;\n height: @input-height-base;\n padding: 0 @input-padding-horizontal-base;\n\n .@{select-prefix-cls}-selection-search-input {\n height: @select-height-without-border;\n }\n\n &::after {\n line-height: @select-height-without-border;\n }\n }\n }\n\n &.@{select-prefix-cls}-customize-input {\n .@{select-prefix-cls}-selector {\n &::after {\n display: none;\n }\n\n .@{select-prefix-cls}-selection-search {\n position: static;\n width: 100%;\n }\n\n .@{select-prefix-cls}-selection-placeholder {\n position: absolute;\n right: 0;\n left: 0;\n padding: 0 @input-padding-horizontal-base;\n\n &::after {\n display: none;\n }\n }\n }\n }\n\n // ============================================================\n // == Size ==\n // ============================================================\n .select-size(@suffix, @input-height) {\n @merged-cls: ~'@{select-prefix-cls}-@{suffix}';\n\n &.@{merged-cls}:not(.@{select-prefix-cls}-customize-input) {\n .@{select-prefix-cls}-selector {\n height: @input-height;\n\n &::after,\n .@{select-prefix-cls}-selection-item,\n .@{select-prefix-cls}-selection-placeholder {\n line-height: @input-height - 2 * @border-width-base;\n }\n }\n\n // Not customize\n &:not(.@{select-prefix-cls}-customize-input) {\n .@{select-prefix-cls}-selection-search-input {\n height: @input-height - 2 * @border-width-base;\n }\n }\n }\n }\n\n .select-size('lg', @select-single-item-height-lg);\n .select-size('sm', @input-height-sm);\n\n // Size small need additional set padding\n &.@{select-prefix-cls}-sm {\n &:not(.@{select-prefix-cls}-customize-input) {\n .@{select-prefix-cls}-selection-search {\n right: @input-padding-horizontal-sm;\n left: @input-padding-horizontal-sm;\n }\n\n .@{select-prefix-cls}-selector {\n padding: 0 @input-padding-horizontal-sm;\n }\n\n // With arrow should provides `padding-right` to show the arrow\n &.@{select-prefix-cls}-show-arrow .@{select-prefix-cls}-selection-search {\n right: @input-padding-horizontal-sm + @font-size-base * 1.5;\n }\n\n &.@{select-prefix-cls}-show-arrow .@{select-prefix-cls}-selection-item,\n &.@{select-prefix-cls}-show-arrow .@{select-prefix-cls}-selection-placeholder {\n padding-right: @font-size-base * 1.5;\n }\n }\n }\n\n &.@{select-prefix-cls}-lg {\n &:not(.@{select-prefix-cls}-customize-input) {\n .@{select-prefix-cls}-selector {\n padding: 0 @input-padding-horizontal-lg;\n }\n }\n }\n}\n","@import (reference) '../../style/themes/index';\n@select-prefix-cls: ~'@{ant-prefix}-select';\n\n@select-overflow-prefix-cls: ~'@{select-prefix-cls}-selection-overflow';\n@select-multiple-item-border-width: 1px;\n\n@select-multiple-padding: max(\n @input-padding-vertical-base - @select-multiple-item-border-width -\n @select-multiple-item-spacing-half,\n 0\n);\n\n/**\n * Do not merge `height` & `line-height` under style with `selection` & `search`,\n * since chrome may update to redesign with its align logic.\n */\n\n// =========================== Overflow ===========================\n.@{select-overflow-prefix-cls} {\n position: relative;\n display: flex;\n flex: auto;\n flex-wrap: wrap;\n max-width: 100%;\n\n &-item {\n flex: none;\n align-self: center;\n max-width: 100%;\n }\n}\n\n.@{select-prefix-cls} {\n &-multiple {\n // ========================= Selector =========================\n .@{select-prefix-cls}-selector {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n // Multiple is little different that horizontal is follow the vertical\n padding: @select-multiple-padding @input-padding-vertical-base;\n\n .@{select-prefix-cls}-show-search& {\n cursor: text;\n }\n\n .@{select-prefix-cls}-disabled& {\n background: @select-multiple-disabled-background;\n cursor: not-allowed;\n }\n\n &::after {\n display: inline-block;\n width: 0;\n margin: @select-multiple-item-spacing-half 0;\n line-height: @select-multiple-item-height;\n content: '\\a0';\n }\n }\n\n &.@{select-prefix-cls}-show-arrow .@{select-prefix-cls}-selector,\n &.@{select-prefix-cls}-allow-clear .@{select-prefix-cls}-selector {\n padding-right: @font-size-sm + @control-padding-horizontal;\n }\n\n // ======================== Selections ========================\n .@{select-prefix-cls}-selection-item {\n position: relative;\n display: flex;\n flex: none;\n box-sizing: border-box;\n max-width: 100%;\n\n height: @select-multiple-item-height;\n margin-top: @select-multiple-item-spacing-half;\n margin-bottom: @select-multiple-item-spacing-half;\n line-height: @select-multiple-item-height - @select-multiple-item-border-width * 2;\n background: @select-selection-item-bg;\n border: 1px solid @select-selection-item-border-color;\n border-radius: @border-radius-base;\n cursor: default;\n transition: font-size 0.3s, line-height 0.3s, height 0.3s;\n user-select: none;\n margin-inline-end: @input-padding-vertical-base;\n padding-inline-start: @padding-xs;\n padding-inline-end: (@padding-xs / 2);\n\n .@{select-prefix-cls}-disabled& {\n color: @select-multiple-item-disabled-color;\n border-color: @select-multiple-item-disabled-border-color;\n cursor: not-allowed;\n }\n\n // It's ok not to do this, but 24px makes bottom narrow in view should adjust\n &-content {\n display: inline-block;\n margin-right: (@padding-xs / 2);\n overflow: hidden;\n white-space: pre; // fix whitespace wrapping. custom tags display all whitespace within.\n text-overflow: ellipsis;\n }\n\n &-remove {\n .iconfont-mixin();\n display: inline-block;\n color: @text-color-secondary;\n font-weight: bold;\n font-size: 10px;\n line-height: inherit;\n cursor: pointer;\n\n > .@{iconfont-css-prefix} {\n vertical-align: middle;\n }\n\n &:hover {\n color: @icon-color-hover;\n }\n }\n }\n\n // ========================== Input ==========================\n .@{select-overflow-prefix-cls}-item + .@{select-overflow-prefix-cls}-item {\n .@{select-prefix-cls}-selection-search {\n margin-inline-start: 0;\n }\n }\n\n .@{select-prefix-cls}-selection-search {\n position: relative;\n max-width: 100%;\n margin-inline-start: @input-padding-horizontal-base - @input-padding-vertical-base;\n\n &-input,\n &-mirror {\n height: @select-multiple-item-height;\n font-family: @font-family;\n line-height: @select-multiple-item-height;\n transition: all 0.3s;\n }\n\n &-input {\n width: 100%;\n min-width: 4.1px; // fix search cursor missing\n }\n\n &-mirror {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 999;\n white-space: pre; // fix whitespace wrapping caused width calculation bug\n visibility: hidden;\n }\n }\n\n // ======================= Placeholder =======================\n .@{select-prefix-cls}-selection-placeholder {\n position: absolute;\n top: 50%;\n right: @input-padding-horizontal;\n left: @input-padding-horizontal;\n transform: translateY(-50%);\n transition: all 0.3s;\n }\n\n // ============================================================\n // == Size ==\n // ============================================================\n .select-size(@suffix, @input-height) {\n @merged-cls: ~'@{select-prefix-cls}-@{suffix}';\n &.@{merged-cls} {\n @select-selection-height: @input-height - @input-padding-vertical-base * 2;\n @select-height-without-border: @input-height - @border-width-base * 2;\n\n .@{select-prefix-cls}-selector::after {\n line-height: @select-selection-height;\n }\n\n .@{select-prefix-cls}-selection-item {\n height: @select-selection-height;\n line-height: @select-selection-height - @border-width-base * 2;\n }\n\n .@{select-prefix-cls}-selection-search {\n height: @select-selection-height;\n line-height: @select-selection-height;\n\n &-input,\n &-mirror {\n height: @select-selection-height;\n line-height: @select-selection-height - @border-width-base * 2;\n }\n }\n }\n }\n\n .select-size('lg', @input-height-lg);\n .select-size('sm', @input-height-sm);\n\n // Size small need additional set padding\n &.@{select-prefix-cls}-sm {\n .@{select-prefix-cls}-selection-placeholder {\n left: @input-padding-horizontal-sm;\n }\n // https://github.com/ant-design/ant-design/issues/29559\n .@{select-prefix-cls}-selection-search {\n margin-inline-start: 3px;\n }\n }\n &.@{select-prefix-cls}-lg {\n .@{select-prefix-cls}-selection-item {\n height: @select-multiple-item-height-lg;\n line-height: @select-multiple-item-height-lg;\n }\n }\n }\n\n &-disabled .@{select-prefix-cls}-selection-item-remove {\n display: none;\n }\n}\n","@import '../../input/style/mixin';\n\n@select-prefix-cls: ~'@{ant-prefix}-select';\n@pagination-prefix-cls: ~'@{ant-prefix}-pagination';\n\n.select-status-color(\n @text-color;\n @border-color;\n @background-color;\n @hoverBorderColor;\n @outlineColor;\n) {\n &.@{select-prefix-cls}:not(.@{select-prefix-cls}-disabled):not(.@{select-prefix-cls}-customize-input):not(.@{pagination-prefix-cls}-size-changer) {\n .@{select-prefix-cls}-selector {\n background-color: @background-color;\n border-color: @border-color !important;\n }\n &.@{select-prefix-cls}-open .@{select-prefix-cls}-selector,\n &.@{select-prefix-cls}-focused .@{select-prefix-cls}-selector {\n .active(@border-color, @hoverBorderColor, @outlineColor);\n }\n }\n}\n\n.@{select-prefix-cls} {\n &-status-error {\n .select-status-color(@error-color, @error-color, @select-background, @error-color-hover, @error-color-outline);\n }\n\n &-status-warning {\n .select-status-color(@warning-color, @warning-color, @input-bg, @warning-color-hover, @warning-color-outline);\n }\n\n &-status-error,\n &-status-warning,\n &-status-success,\n &-status-validating {\n &.@{select-prefix-cls}-has-feedback {\n //.@{prefix-cls}-arrow,\n .@{select-prefix-cls}-clear {\n right: 32px;\n }\n\n .@{select-prefix-cls}-selection-selected-value {\n padding-right: 42px;\n }\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n@import '../../input/style/mixin';\n@import './single';\n@import './multiple';\n@import './status';\n\n@select-prefix-cls: ~'@{ant-prefix}-select';\n@select-height-without-border: @input-height-base - 2 * @border-width-base;\n@select-dropdown-edge-child-vertical-padding: @dropdown-edge-child-vertical-padding;\n\n.select-selector() {\n position: relative;\n background-color: @select-background;\n border: @border-width-base @border-style-base @select-border-color;\n border-radius: @control-border-radius;\n transition: all 0.3s @ease-in-out;\n\n input {\n cursor: pointer;\n }\n\n .@{select-prefix-cls}-show-search& {\n cursor: text;\n\n input {\n cursor: auto;\n }\n }\n\n .@{select-prefix-cls}-focused:not(.@{select-prefix-cls}-disabled)& {\n .active();\n }\n\n .@{select-prefix-cls}-disabled& {\n color: @disabled-color;\n background: @input-disabled-bg;\n cursor: not-allowed;\n\n .@{select-prefix-cls}-multiple& {\n background: @select-multiple-disabled-background;\n }\n\n input {\n cursor: not-allowed;\n }\n }\n}\n\n/* Reset search input style */\n.select-search-input-without-border() {\n .@{select-prefix-cls}-selection-search-input {\n margin: 0;\n padding: 0;\n background: transparent;\n border: none;\n outline: none;\n appearance: none;\n\n &::-webkit-search-cancel-button {\n display: none;\n /* stylelint-disable-next-line property-no-vendor-prefix */\n -webkit-appearance: none;\n }\n }\n}\n\n.@{select-prefix-cls} {\n .reset-component();\n position: relative;\n display: inline-block;\n cursor: pointer;\n\n &:not(&-customize-input) &-selector {\n .select-selector();\n .select-search-input-without-border();\n }\n\n &:not(&-disabled):hover &-selector {\n .hover();\n }\n\n // ======================== Selection ========================\n &-selection-item {\n flex: 1;\n overflow: hidden;\n font-weight: normal;\n white-space: nowrap;\n text-overflow: ellipsis;\n\n // IE11 css hack. `*::-ms-backdrop,` is a must have\n @media all and (-ms-high-contrast: none) {\n *::-ms-backdrop,\n & {\n flex: auto;\n }\n }\n }\n\n // ======================= Placeholder =======================\n &-selection-placeholder {\n flex: 1;\n overflow: hidden;\n color: @input-placeholder-color;\n white-space: nowrap;\n text-overflow: ellipsis;\n pointer-events: none;\n\n // IE11 css hack. `*::-ms-backdrop,` is a must have\n @media all and (-ms-high-contrast: none) {\n *::-ms-backdrop,\n & {\n flex: auto;\n }\n }\n }\n\n // ========================== Arrow ==========================\n &-arrow {\n .iconfont-mixin();\n position: absolute;\n top: 50%;\n right: @control-padding-horizontal - 1px;\n display: flex;\n align-items: center;\n height: @font-size-sm;\n margin-top: (-@font-size-sm / 2);\n color: @disabled-color;\n font-size: @font-size-sm;\n line-height: 1;\n text-align: center;\n pointer-events: none;\n\n .@{iconfont-css-prefix} {\n vertical-align: top;\n transition: transform 0.3s;\n\n > svg {\n vertical-align: top;\n }\n\n &:not(.@{select-prefix-cls}-suffix) {\n pointer-events: auto;\n }\n }\n\n .@{select-prefix-cls}-disabled & {\n cursor: not-allowed;\n }\n\n > *:not(:last-child) {\n margin-inline-end: @padding-xs;\n }\n }\n\n // ========================== Clear ==========================\n &-clear {\n position: absolute;\n top: 50%;\n right: @control-padding-horizontal - 1px;\n z-index: 1;\n display: inline-block;\n width: @font-size-sm;\n height: @font-size-sm;\n margin-top: (-@font-size-sm / 2);\n color: @disabled-color;\n font-size: @font-size-sm;\n font-style: normal;\n line-height: 1;\n text-align: center;\n text-transform: none;\n background: @select-clear-background;\n cursor: pointer;\n opacity: 0;\n transition: color 0.3s ease, opacity 0.15s ease;\n text-rendering: auto;\n\n &::before {\n display: block;\n }\n\n &:hover {\n color: @text-color-secondary;\n }\n\n .@{select-prefix-cls}:hover & {\n opacity: 1;\n }\n }\n\n // ========================== Popup ==========================\n &-dropdown {\n .reset-component();\n position: absolute;\n top: -9999px;\n left: -9999px;\n z-index: @zindex-dropdown;\n box-sizing: border-box;\n padding: @select-dropdown-edge-child-vertical-padding 0;\n overflow: hidden;\n font-size: @font-size-base;\n // Fix select render lag of long text in chrome\n // https://github.com/ant-design/ant-design/issues/11456\n // https://github.com/ant-design/ant-design/issues/11843\n font-variant: initial;\n background-color: @select-dropdown-bg;\n border-radius: @border-radius-base;\n outline: none;\n box-shadow: @box-shadow-base;\n\n &.@{ant-prefix}-slide-up-enter.@{ant-prefix}-slide-up-enter-active&-placement-bottomLeft,\n &.@{ant-prefix}-slide-up-appear.@{ant-prefix}-slide-up-appear-active&-placement-bottomLeft {\n animation-name: antSlideUpIn;\n }\n\n &.@{ant-prefix}-slide-up-enter.@{ant-prefix}-slide-up-enter-active&-placement-topLeft,\n &.@{ant-prefix}-slide-up-appear.@{ant-prefix}-slide-up-appear-active&-placement-topLeft {\n animation-name: antSlideDownIn;\n }\n\n &.@{ant-prefix}-slide-up-leave.@{ant-prefix}-slide-up-leave-active&-placement-bottomLeft {\n animation-name: antSlideUpOut;\n }\n\n &.@{ant-prefix}-slide-up-leave.@{ant-prefix}-slide-up-leave-active&-placement-topLeft {\n animation-name: antSlideDownOut;\n }\n\n &-hidden {\n display: none;\n }\n\n &-empty {\n color: @disabled-color;\n }\n }\n\n // ========================= Options =========================\n .item() {\n position: relative;\n display: block;\n min-height: @select-dropdown-height;\n padding: @select-dropdown-vertical-padding @control-padding-horizontal;\n color: @text-color;\n font-weight: normal;\n font-size: @select-dropdown-font-size;\n line-height: @select-dropdown-line-height;\n }\n\n &-item-empty {\n .item();\n color: @disabled-color;\n }\n\n &-item {\n .item();\n\n cursor: pointer;\n transition: background 0.3s ease;\n\n // =========== Group ============\n &-group {\n color: @text-color-secondary;\n font-size: @font-size-sm;\n cursor: default;\n }\n\n // =========== Option ===========\n &-option {\n display: flex;\n\n &-content {\n flex: auto;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n\n &-state {\n flex: none;\n }\n\n &-active:not(&-disabled) {\n background-color: @select-item-active-bg;\n }\n\n &-selected:not(&-disabled) {\n color: @select-item-selected-color;\n font-weight: @select-item-selected-font-weight;\n background-color: @select-item-selected-bg;\n\n .@{select-prefix-cls}-item-option-state {\n color: @primary-color;\n }\n }\n\n &-disabled {\n &.@{select-prefix-cls}-item-option-selected {\n background-color: @select-multiple-disabled-background;\n }\n color: @disabled-color;\n cursor: not-allowed;\n }\n\n &-grouped {\n padding-left: @control-padding-horizontal * 2;\n }\n }\n }\n\n // ============================================================\n // == Size ==\n // ============================================================\n &-lg {\n font-size: @font-size-lg;\n }\n\n // no border style\n &-borderless &-selector {\n background-color: transparent !important;\n border-color: transparent !important;\n box-shadow: none !important;\n }\n\n &&-in-form-item {\n width: 100%;\n }\n\n // ===================== Compact Item Styles =====================\n .compact-item(@select-prefix-cls, ~'@{select-prefix-cls}-selector', ~'@{select-prefix-cls}-focused');\n}\n\n@import './rtl';\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n@import '../../input/style/mixin';\n\n@select-prefix-cls: ~'@{ant-prefix}-select';\n\n.@{select-prefix-cls} {\n &-rtl {\n direction: rtl;\n }\n\n // ========================== Arrow ==========================\n &-arrow {\n .@{select-prefix-cls}-rtl & {\n right: initial;\n left: @control-padding-horizontal - 1px;\n }\n }\n\n // ========================== Clear ==========================\n &-clear {\n .@{select-prefix-cls}-rtl & {\n right: initial;\n left: @control-padding-horizontal - 1px;\n }\n }\n\n // ========================== Popup ==========================\n &-dropdown {\n &-rtl {\n direction: rtl;\n }\n }\n\n // ========================= Options =========================\n &-item {\n &-option {\n &-grouped {\n .@{select-prefix-cls}-dropdown-rtl & {\n padding-right: @control-padding-horizontal * 2;\n padding-left: @control-padding-horizontal;\n }\n }\n }\n }\n}\n\n// multiple\n@select-multiple-item-border-width: 1px;\n@select-multiple-item-spacing-half: ceil((@input-padding-vertical-base / 2));\n@select-multiple-padding: max(\n @input-padding-vertical-base - @select-multiple-item-border-width -\n @select-multiple-item-spacing-half,\n 0\n);\n\n.@{select-prefix-cls}-multiple {\n &.@{select-prefix-cls}-show-arrow .@{select-prefix-cls}-selector,\n &.@{select-prefix-cls}-allow-clear .@{select-prefix-cls}-selector {\n .@{select-prefix-cls}-rtl& {\n padding-right: @input-padding-vertical-base;\n padding-left: @font-size-sm + @control-padding-horizontal;\n }\n }\n\n // ======================== Selections ========================\n .@{select-prefix-cls}-selection-item {\n .@{select-prefix-cls}-rtl& {\n text-align: right;\n }\n // It's ok not to do this, but 24px makes bottom narrow in view should adjust\n &-content {\n .@{select-prefix-cls}-rtl& {\n margin-right: 0;\n margin-left: (@padding-xs / 2);\n text-align: right;\n }\n }\n }\n\n // ========================== Input ==========================\n .@{select-prefix-cls}-selection-search {\n &-mirror {\n .@{select-prefix-cls}-rtl& {\n right: 0;\n left: auto;\n }\n }\n }\n\n // ======================= Placeholder =======================\n .@{select-prefix-cls}-selection-placeholder {\n .@{select-prefix-cls}-rtl& {\n right: @input-padding-horizontal;\n left: auto;\n }\n }\n\n // ============================================================\n // == Size ==\n // ============================================================\n\n // Size small need additional set padding\n &.@{select-prefix-cls}-sm {\n .@{select-prefix-cls}-selection-placeholder {\n .@{select-prefix-cls}-rtl& {\n right: @input-padding-horizontal-sm;\n }\n }\n }\n}\n\n// single\n@selection-item-padding: ceil(@font-size-base * 1.25);\n\n.@{select-prefix-cls}-single {\n // ========================= Selector =========================\n .@{select-prefix-cls}-selector {\n .@{select-prefix-cls}-selection-item,\n .@{select-prefix-cls}-selection-placeholder {\n .@{select-prefix-cls}-rtl& {\n right: 0;\n left: 9px;\n text-align: right;\n }\n }\n }\n\n // With arrow should provides `padding-right` to show the arrow\n &.@{select-prefix-cls}-show-arrow .@{select-prefix-cls}-selection-search {\n .@{select-prefix-cls}-rtl& {\n right: @input-padding-horizontal-base;\n left: @input-padding-horizontal-base + @font-size-base;\n }\n }\n\n &.@{select-prefix-cls}-show-arrow .@{select-prefix-cls}-selection-item,\n &.@{select-prefix-cls}-show-arrow .@{select-prefix-cls}-selection-placeholder {\n .@{select-prefix-cls}-rtl& {\n padding-right: 0;\n padding-left: @selection-item-padding;\n }\n }\n\n // ============================================================\n // == Size ==\n // ============================================================\n\n // Size small need additional set padding\n &.@{select-prefix-cls}-sm {\n &:not(.@{select-prefix-cls}-customize-input) {\n // With arrow should provides `padding-right` to show the arrow\n &.@{select-prefix-cls}-show-arrow .@{select-prefix-cls}-selection-search {\n .@{select-prefix-cls}-rtl& {\n right: @input-padding-horizontal-sm - 1px;\n }\n }\n\n &.@{select-prefix-cls}-show-arrow .@{select-prefix-cls}-selection-item,\n &.@{select-prefix-cls}-show-arrow .@{select-prefix-cls}-selection-placeholder {\n .@{select-prefix-cls}-rtl& {\n padding-right: 0;\n padding-left: @font-size-base * 1.5;\n }\n }\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@skeleton-prefix-cls: ~'@{ant-prefix}-skeleton';\n@skeleton-avatar-prefix-cls: ~'@{skeleton-prefix-cls}-avatar';\n@skeleton-title-prefix-cls: ~'@{skeleton-prefix-cls}-title';\n@skeleton-paragraph-prefix-cls: ~'@{skeleton-prefix-cls}-paragraph';\n@skeleton-button-prefix-cls: ~'@{skeleton-prefix-cls}-button';\n@skeleton-input-prefix-cls: ~'@{skeleton-prefix-cls}-input';\n@skeleton-image-prefix-cls: ~'@{skeleton-prefix-cls}-image';\n@skeleton-block-radius: @border-radius-base;\n\n.@{skeleton-prefix-cls} {\n display: table;\n width: 100%;\n\n &-header {\n display: table-cell;\n padding-right: @padding-md;\n vertical-align: top;\n\n // Avatar\n .@{skeleton-avatar-prefix-cls} {\n .skeleton-element-avatar();\n }\n }\n\n &-content {\n display: table-cell;\n width: 100%;\n vertical-align: top;\n\n // Title\n .@{skeleton-title-prefix-cls} {\n width: 100%;\n height: @skeleton-title-height;\n background: @skeleton-color;\n border-radius: @skeleton-block-radius;\n\n + .@{skeleton-paragraph-prefix-cls} {\n margin-top: @skeleton-title-paragraph-margin-top;\n }\n }\n\n // paragraph\n .@{skeleton-paragraph-prefix-cls} {\n padding: 0;\n\n > li {\n width: 100%;\n height: @skeleton-paragraph-li-height;\n list-style: none;\n background: @skeleton-color;\n border-radius: @skeleton-block-radius;\n\n &:last-child:not(:first-child):not(:nth-child(2)) {\n width: 61%;\n }\n\n + li {\n margin-top: @skeleton-paragraph-li-margin-top;\n }\n }\n }\n }\n\n &-with-avatar &-content {\n // Title\n .@{skeleton-title-prefix-cls} {\n margin-top: @margin-sm;\n\n + .@{skeleton-paragraph-prefix-cls} {\n margin-top: @skeleton-paragraph-margin-top;\n }\n }\n }\n\n &-round &-content {\n .@{skeleton-title-prefix-cls},\n .@{skeleton-paragraph-prefix-cls} > li {\n border-radius: 100px;\n }\n }\n\n // With active animation\n &-active {\n .@{skeleton-title-prefix-cls},\n .@{skeleton-paragraph-prefix-cls} > li,\n .@{skeleton-avatar-prefix-cls},\n .@{skeleton-button-prefix-cls},\n .@{skeleton-input-prefix-cls},\n .@{skeleton-image-prefix-cls} {\n .skeleton-color();\n }\n }\n\n // Skeleton Block Button, Input\n &.@{skeleton-prefix-cls}-block {\n width: 100%;\n\n .@{skeleton-button-prefix-cls} {\n width: 100%;\n }\n\n .@{skeleton-input-prefix-cls} {\n width: 100%;\n }\n }\n\n // Skeleton element\n &-element {\n display: inline-block;\n width: auto;\n\n .@{skeleton-button-prefix-cls} {\n .skeleton-element-button();\n }\n\n .@{skeleton-avatar-prefix-cls} {\n .skeleton-element-avatar();\n }\n\n .@{skeleton-input-prefix-cls} {\n .skeleton-element-input();\n }\n\n .@{skeleton-image-prefix-cls} {\n .skeleton-element-image();\n }\n }\n}\n// Button\n.skeleton-element-button() {\n display: inline-block;\n vertical-align: top;\n background: @skeleton-color;\n border-radius: @border-radius-base;\n\n .skeleton-element-button-size(@btn-height-base);\n\n &-lg {\n .skeleton-element-button-size(@btn-height-lg);\n }\n\n &-sm {\n .skeleton-element-button-size(@btn-height-sm);\n }\n}\n// Avatar\n.skeleton-element-avatar() {\n display: inline-block;\n vertical-align: top;\n background: @skeleton-color;\n\n .skeleton-element-avatar-size(@avatar-size-base);\n\n &-lg {\n .skeleton-element-avatar-size(@avatar-size-lg);\n }\n\n &-sm {\n .skeleton-element-avatar-size(@avatar-size-sm);\n }\n}\n\n// Input\n.skeleton-element-input() {\n display: inline-block;\n vertical-align: top;\n background: @skeleton-color;\n\n .skeleton-element-input-size(@input-height-base);\n\n &-lg {\n .skeleton-element-input-size(@input-height-lg);\n }\n\n &-sm {\n .skeleton-element-input-size(@input-height-sm);\n }\n}\n\n// Image\n.skeleton-element-image() {\n display: flex;\n align-items: center;\n justify-content: center;\n vertical-align: top;\n background: @skeleton-color;\n\n .skeleton-element-image-size(@image-size-base*2);\n\n &-path {\n fill: #bfbfbf;\n }\n\n &-svg {\n .skeleton-element-image-size(@image-size-base);\n max-width: @image-size-base * 4;\n max-height: @image-size-base * 4;\n }\n}\n\n.skeleton-element-avatar-size(@size) {\n width: @size;\n .skeleton-element-common-size(@size);\n\n &.@{skeleton-avatar-prefix-cls}-circle {\n border-radius: 50%;\n }\n}\n\n.skeleton-element-button-size(@size) {\n width: @size * 2;\n min-width: @size * 2;\n .skeleton-element-common-size(@size);\n\n &.@{skeleton-button-prefix-cls}-square {\n width: @size;\n min-width: @size;\n }\n\n &.@{skeleton-button-prefix-cls}-circle {\n width: @size;\n min-width: @size;\n border-radius: 50%;\n }\n\n &.@{skeleton-button-prefix-cls}-round {\n border-radius: @size;\n }\n}\n\n.skeleton-element-input-size(@size) {\n width: @size * 5;\n min-width: @size * 5;\n .skeleton-element-common-size(@size);\n}\n\n.skeleton-element-image-size(@size) {\n width: @size;\n .skeleton-element-common-size(@size);\n\n &.@{skeleton-image-prefix-cls}-circle {\n border-radius: 50%;\n }\n}\n\n.skeleton-element-common-size(@size) {\n height: @size;\n line-height: @size;\n}\n\n.skeleton-color() {\n position: relative;\n // fix https://github.com/ant-design/ant-design/issues/36444\n // https://monshin.github.io/202109/css/safari-border-radius-overflow-hidden/\n /* stylelint-disable-next-line property-no-vendor-prefix,value-no-vendor-prefix */\n z-index: 0;\n overflow: hidden;\n background: transparent;\n\n &::after {\n position: absolute;\n top: 0;\n right: -150%;\n bottom: 0;\n left: -150%;\n background: linear-gradient(\n 90deg,\n @skeleton-color 25%,\n @skeleton-to-color 37%,\n @skeleton-color 63%\n );\n animation: ~'@{skeleton-prefix-cls}-loading' 1.4s ease infinite;\n content: '';\n }\n}\n\n@keyframes ~\"@{skeleton-prefix-cls}-loading\" {\n 0% {\n transform: translateX(-37.5%);\n }\n\n 100% {\n transform: translateX(37.5%);\n }\n}\n\n@import './rtl';\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@skeleton-prefix-cls: ~'@{ant-prefix}-skeleton';\n@skeleton-avatar-prefix-cls: ~'@{skeleton-prefix-cls}-avatar';\n@skeleton-title-prefix-cls: ~'@{skeleton-prefix-cls}-title';\n@skeleton-paragraph-prefix-cls: ~'@{skeleton-prefix-cls}-paragraph';\n\n.@{skeleton-prefix-cls} {\n &-rtl {\n direction: rtl;\n }\n\n &-header {\n .@{skeleton-prefix-cls}-rtl & {\n padding-right: 0;\n padding-left: 16px;\n }\n }\n\n // With active animation\n &.@{skeleton-prefix-cls}-active {\n & .@{skeleton-prefix-cls}-content {\n .@{skeleton-title-prefix-cls},\n .@{skeleton-paragraph-prefix-cls} > li {\n .@{skeleton-prefix-cls}-rtl& {\n animation-name: ~'@{skeleton-prefix-cls}-loading-rtl';\n }\n }\n }\n\n .@{skeleton-avatar-prefix-cls} {\n .@{skeleton-prefix-cls}-rtl& {\n animation-name: ~'@{skeleton-prefix-cls}-loading-rtl';\n }\n }\n }\n}\n\n@keyframes ~\"@{skeleton-prefix-cls}-loading-rtl\" {\n 0% {\n background-position: 0% 50%;\n }\n\n 100% {\n background-position: 100% 50%;\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@slider-prefix-cls: ~'@{ant-prefix}-slider';\n\n.@{slider-prefix-cls} {\n .reset-component();\n\n position: relative;\n height: 12px;\n margin: @slider-margin;\n padding: 4px 0;\n cursor: pointer;\n touch-action: none;\n\n .vertical();\n\n &-with-marks {\n margin-bottom: 28px;\n }\n\n &-rail {\n position: absolute;\n width: 100%;\n height: 4px;\n background-color: @slider-rail-background-color;\n border-radius: @border-radius-base;\n transition: background-color 0.3s;\n }\n\n &-track {\n position: absolute;\n height: 4px;\n background-color: @slider-track-background-color;\n border-radius: @border-radius-base;\n transition: background-color 0.3s;\n }\n\n &-handle {\n position: absolute;\n width: @slider-handle-size;\n height: @slider-handle-size;\n margin-top: @slider-handle-margin-top;\n background-color: @slider-handle-background-color;\n border: solid @slider-handle-border-width @slider-handle-color;\n border-radius: 50%;\n box-shadow: @slider-handle-shadow;\n cursor: pointer;\n transition: border-color 0.3s, box-shadow 0.6s,\n transform 0.3s cubic-bezier(0.18, 0.89, 0.32, 1.28);\n\n // &-dragging&-dragging&-dragging {\n // border-color: @slider-handle-color-focus;\n // box-shadow: 0 0 0 5px @slider-handle-color-focus-shadow;\n // }\n &-dragging {\n z-index: 1;\n }\n\n &:focus {\n border-color: @slider-handle-color-focus;\n outline: none;\n box-shadow: 0 0 0 5px @slider-handle-color-focus-shadow;\n }\n\n &.@{ant-prefix}-tooltip-open {\n border-color: @slider-handle-color-tooltip-open;\n }\n\n &::after {\n position: absolute;\n top: -6px;\n right: -6px;\n bottom: -6px;\n left: -6px;\n content: '';\n }\n }\n\n &:hover {\n .@{slider-prefix-cls}-rail {\n background-color: @slider-rail-background-color-hover;\n }\n .@{slider-prefix-cls}-track {\n background-color: @slider-track-background-color-hover;\n }\n .@{slider-prefix-cls}-handle:not(.@{ant-prefix}-tooltip-open) {\n border-color: @slider-handle-color-hover;\n }\n }\n\n &-mark {\n position: absolute;\n top: 14px;\n left: 0;\n width: 100%;\n font-size: @font-size-base;\n }\n\n &-mark-text {\n position: absolute;\n display: inline-block;\n color: @text-color-secondary;\n text-align: center;\n word-break: keep-all;\n cursor: pointer;\n user-select: none;\n\n &-active {\n color: @text-color;\n }\n }\n\n &-step {\n position: absolute;\n width: 100%;\n height: 4px;\n background: transparent;\n pointer-events: none;\n }\n\n &-dot {\n position: absolute;\n top: -2px;\n width: 8px;\n height: 8px;\n background-color: @component-background;\n border: 2px solid @slider-dot-border-color;\n border-radius: 50%;\n cursor: pointer;\n\n &-active {\n border-color: @slider-dot-border-color-active;\n }\n }\n\n &-disabled {\n cursor: not-allowed;\n\n .@{slider-prefix-cls}-rail {\n background-color: @slider-rail-background-color !important;\n }\n\n .@{slider-prefix-cls}-track {\n background-color: @slider-disabled-color !important;\n }\n\n .@{slider-prefix-cls}-handle,\n .@{slider-prefix-cls}-dot {\n background-color: @component-background;\n border-color: @slider-disabled-color !important;\n box-shadow: none;\n cursor: not-allowed;\n }\n\n .@{slider-prefix-cls}-mark-text,\n .@{slider-prefix-cls}-dot {\n cursor: not-allowed !important;\n }\n }\n}\n\n.vertical() {\n &-vertical {\n width: 12px;\n height: 100%;\n margin: 6px 10px;\n padding: 0 4px;\n\n .@{slider-prefix-cls}-rail {\n width: 4px;\n height: 100%;\n }\n\n .@{slider-prefix-cls}-track {\n width: 4px;\n }\n\n .@{slider-prefix-cls}-handle {\n margin-top: -6px; // we chould consider border width as well: (10 + 2 ) / 2\n margin-left: @slider-handle-margin-left;\n }\n\n .@{slider-prefix-cls}-mark {\n top: 0;\n left: 12px;\n width: 18px;\n height: 100%;\n }\n\n .@{slider-prefix-cls}-mark-text {\n left: 4px;\n white-space: nowrap;\n }\n\n .@{slider-prefix-cls}-step {\n width: 4px;\n height: 100%;\n }\n\n .@{slider-prefix-cls}-dot {\n top: auto;\n margin-left: -2px;\n }\n }\n\n &-tooltip {\n // https://github.com/ant-design/ant-design/issues/20014\n .@{ant-prefix}-tooltip-inner {\n min-width: unset;\n }\n }\n}\n\n@import './rtl';\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@slider-prefix-cls: ~'@{ant-prefix}-slider';\n\n.@{slider-prefix-cls} {\n &-rtl {\n direction: rtl;\n }\n\n &-mark {\n .@{slider-prefix-cls}-rtl & {\n right: 0;\n left: auto;\n }\n }\n}\n\n.vertical() {\n &-vertical {\n .@{slider-prefix-cls}-handle {\n .@{slider-prefix-cls}-rtl& {\n margin-right: -5px;\n margin-left: 0;\n }\n }\n\n .@{slider-prefix-cls}-mark {\n .@{slider-prefix-cls}-rtl& {\n right: 12px;\n left: auto;\n }\n }\n\n .@{slider-prefix-cls}-mark-text {\n .@{slider-prefix-cls}-rtl& {\n right: 4px;\n left: auto;\n }\n }\n\n .@{slider-prefix-cls}-dot {\n .@{slider-prefix-cls}-rtl& {\n right: 2px;\n left: auto;\n }\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@space-prefix-cls: ~'@{ant-prefix}-space';\n@space-item-prefix-cls: ~'@{ant-prefix}-space-item';\n\n.@{space-prefix-cls} {\n display: inline-flex;\n\n &-vertical {\n flex-direction: column;\n }\n\n &-align {\n &-center {\n align-items: center;\n }\n\n &-start {\n align-items: flex-start;\n }\n\n &-end {\n align-items: flex-end;\n }\n\n &-baseline {\n align-items: baseline;\n }\n }\n}\n\n.@{space-item-prefix-cls} {\n &:empty {\n display: none;\n }\n}\n\n@import './compact';\n@import './rtl';\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@space-compact-prefix-cls: ~'@{ant-prefix}-space-compact';\n\n.@{space-compact-prefix-cls} {\n display: inline-flex;\n\n &-block {\n display: flex;\n width: 100%;\n }\n\n &-vertical {\n flex-direction: column;\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@space-prefix-cls: ~'@{ant-prefix}-space';\n\n.@{space-prefix-cls} {\n &-rtl {\n direction: rtl;\n }\n\n &-compact-rtl {\n direction: rtl;\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@spin-prefix-cls: ~'@{ant-prefix}-spin';\n@spin-dot-default: @text-color-secondary;\n\n.@{spin-prefix-cls} {\n .reset-component();\n\n position: absolute;\n display: none;\n color: @primary-color;\n text-align: center;\n vertical-align: middle;\n opacity: 0;\n transition: transform 0.3s @ease-in-out-circ;\n\n &-spinning {\n position: static;\n display: inline-block;\n opacity: 1;\n }\n\n &-nested-loading {\n position: relative;\n > div > .@{spin-prefix-cls} {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 4;\n display: block;\n width: 100%;\n height: 100%;\n max-height: 400px;\n .@{spin-prefix-cls}-dot {\n position: absolute;\n top: 50%;\n left: 50%;\n margin: -(@spin-dot-size / 2);\n }\n .@{spin-prefix-cls}-text {\n position: absolute;\n top: 50%;\n width: 100%;\n padding-top: ((@spin-dot-size - @font-size-base) / 2) + 2px;\n text-shadow: 0 1px 2px @shadow-color-inverse;\n }\n &.@{spin-prefix-cls}-show-text .@{spin-prefix-cls}-dot {\n margin-top: -(@spin-dot-size / 2) - 10px;\n }\n }\n\n > div > .@{spin-prefix-cls}-sm {\n .@{spin-prefix-cls}-dot {\n margin: -(@spin-dot-size-sm / 2);\n }\n .@{spin-prefix-cls}-text {\n padding-top: ((@spin-dot-size-sm - @font-size-base) / 2) + 2px;\n }\n &.@{spin-prefix-cls}-show-text .@{spin-prefix-cls}-dot {\n margin-top: -(@spin-dot-size-sm / 2) - 10px;\n }\n }\n\n > div > .@{spin-prefix-cls}-lg {\n .@{spin-prefix-cls}-dot {\n margin: -(@spin-dot-size-lg / 2);\n }\n .@{spin-prefix-cls}-text {\n padding-top: ((@spin-dot-size-lg - @font-size-base) / 2) + 2px;\n }\n &.@{spin-prefix-cls}-show-text .@{spin-prefix-cls}-dot {\n margin-top: -(@spin-dot-size-lg / 2) - 10px;\n }\n }\n }\n\n &-container {\n position: relative;\n transition: opacity 0.3s;\n\n &::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 10;\n display: ~'none \\9';\n width: 100%;\n height: 100%;\n background: @component-background;\n opacity: 0;\n transition: all 0.3s;\n content: '';\n pointer-events: none;\n }\n }\n\n &-blur {\n clear: both;\n opacity: 0.5;\n user-select: none;\n pointer-events: none;\n\n &::after {\n opacity: 0.4;\n pointer-events: auto;\n }\n }\n\n // tip\n // ------------------------------\n &-tip {\n color: @spin-dot-default;\n }\n\n // dots\n // ------------------------------\n\n &-dot {\n position: relative;\n display: inline-block;\n font-size: @spin-dot-size;\n\n .square(1em);\n\n &-item {\n position: absolute;\n display: block;\n width: 9px;\n height: 9px;\n background-color: @primary-color;\n border-radius: 100%;\n transform: scale(0.75);\n transform-origin: 50% 50%;\n opacity: 0.3;\n animation: antSpinMove 1s infinite linear alternate;\n\n &:nth-child(1) {\n top: 0;\n left: 0;\n }\n\n &:nth-child(2) {\n top: 0;\n right: 0;\n animation-delay: 0.4s;\n }\n\n &:nth-child(3) {\n right: 0;\n bottom: 0;\n animation-delay: 0.8s;\n }\n\n &:nth-child(4) {\n bottom: 0;\n left: 0;\n animation-delay: 1.2s;\n }\n }\n\n &-spin {\n transform: rotate(0deg);\n animation: antRotate 1.2s infinite linear;\n }\n }\n\n // Sizes\n // ------------------------------\n\n // small\n &-sm &-dot {\n font-size: @spin-dot-size-sm;\n\n i {\n width: 6px;\n height: 6px;\n }\n }\n\n // large\n &-lg &-dot {\n font-size: @spin-dot-size-lg;\n\n i {\n width: 14px;\n height: 14px;\n }\n }\n\n &&-show-text &-text {\n display: block;\n }\n}\n\n@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {\n /* IE10+ */\n .@{spin-prefix-cls}-blur {\n background: @component-background;\n opacity: 0.5;\n }\n}\n\n@keyframes antSpinMove {\n to {\n opacity: 1;\n }\n}\n\n@keyframes antRotate {\n to {\n transform: rotate(360deg);\n }\n}\n\n@import './rtl';\n",".@{spin-prefix-cls} {\n &-rtl {\n direction: rtl;\n }\n\n &-dot {\n &-spin {\n .@{spin-prefix-cls}-rtl & {\n transform: rotate(-45deg);\n animation-name: antRotateRtl;\n }\n }\n }\n}\n\n@keyframes antRotateRtl {\n to {\n transform: rotate(-405deg);\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@statistic-prefix-cls: ~'@{ant-prefix}-statistic';\n\n.@{statistic-prefix-cls} {\n .reset-component();\n\n &-title {\n margin-bottom: @margin-xss;\n color: @text-color-secondary;\n font-size: @statistic-title-font-size;\n }\n\n &-skeleton {\n padding-top: @padding-md;\n }\n\n &-content {\n color: @heading-color;\n font-size: @statistic-content-font-size;\n font-family: @statistic-font-family;\n\n &-value {\n display: inline-block;\n direction: ltr;\n }\n\n &-prefix,\n &-suffix {\n display: inline-block;\n }\n\n &-prefix {\n margin-right: 4px;\n }\n\n &-suffix {\n margin-left: 4px;\n }\n }\n}\n\n@import './rtl';\n",".@{statistic-prefix-cls} {\n &-rtl {\n direction: rtl;\n }\n\n &-content {\n &-prefix {\n .@{statistic-prefix-cls}-rtl & {\n margin-right: 0;\n margin-left: 4px;\n }\n }\n\n &-suffix {\n .@{statistic-prefix-cls}-rtl & {\n margin-right: 4px;\n margin-left: 0;\n }\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@steps-prefix-cls: ~'@{ant-prefix}-steps';\n@process-icon-color: @primary-color;\n@process-title-color: @heading-color;\n@process-description-color: @text-color;\n@process-icon-text-color: @text-color-inverse;\n@wait-icon-color: @disabled-color;\n@wait-title-color: @text-color-secondary;\n@wait-description-color: @wait-title-color;\n@wait-tail-color: @process-tail-color;\n@finish-icon-color: @process-icon-color;\n@finish-title-color: @text-color;\n@finish-description-color: @text-color-secondary;\n@finish-tail-color: @primary-color;\n@error-icon-color: @error-color;\n@error-title-color: @error-color;\n@error-description-color: @error-color;\n@error-tail-color: @wait-tail-color;\n@steps-nav-active-color: @primary-color;\n\n.@{steps-prefix-cls} {\n .reset-component();\n\n display: flex;\n width: 100%;\n font-size: 0;\n text-align: initial;\n}\n\n.@{steps-prefix-cls}-item {\n position: relative;\n display: inline-block;\n flex: 1;\n overflow: hidden;\n vertical-align: top;\n\n &-container {\n outline: none;\n }\n\n &:last-child {\n flex: none;\n }\n\n &:last-child > &-container > &-tail,\n &:last-child > &-container > &-content > &-title::after {\n display: none;\n }\n\n &-icon,\n &-content {\n display: inline-block;\n vertical-align: top;\n }\n\n &-icon {\n width: @steps-icon-size;\n height: @steps-icon-size;\n margin: @steps-icon-margin;\n font-size: @steps-icon-font-size;\n font-family: @font-family;\n line-height: @steps-icon-size;\n text-align: center;\n border: @border-width-base @border-style-base @wait-icon-color;\n border-radius: @steps-icon-size;\n transition: background-color 0.3s, border-color 0.3s;\n\n .@{steps-prefix-cls}-icon {\n position: relative;\n top: @steps-icon-top;\n color: @primary-color;\n line-height: 1;\n }\n }\n\n &-tail {\n position: absolute;\n top: 12px;\n left: 0;\n width: 100%;\n padding: 0 10px;\n\n &::after {\n display: inline-block;\n width: 100%;\n height: 1px;\n background: @border-color-split;\n border-radius: 1px;\n transition: background 0.3s;\n content: '';\n }\n }\n\n &-title {\n position: relative;\n display: inline-block;\n padding-right: 16px;\n color: @text-color;\n font-size: @font-size-lg;\n line-height: @steps-title-line-height;\n\n &::after {\n position: absolute;\n top: (@steps-title-line-height / 2);\n left: 100%;\n display: block;\n width: 9999px;\n height: 1px;\n background: @wait-tail-color;\n content: '';\n }\n }\n\n &-subtitle {\n display: inline;\n margin-left: 8px;\n color: @text-color-secondary;\n font-weight: normal;\n font-size: @font-size-base;\n }\n\n &-description {\n color: @text-color-secondary;\n font-size: @font-size-base;\n }\n .step-item-status(wait);\n .step-item-status(process);\n\n &-process > &-container > &-icon {\n background: @process-icon-color;\n .@{steps-prefix-cls}-icon {\n color: @process-icon-text-color;\n }\n }\n\n &-process > &-container > &-title {\n font-weight: 500;\n }\n .step-item-status(finish);\n .step-item-status(error);\n\n &.@{steps-prefix-cls}-next-error .@{steps-prefix-cls}-item-title::after {\n background: @error-icon-color;\n }\n\n &-disabled {\n cursor: not-allowed;\n }\n}\n\n// ===================== Clickable =====================\n.@{steps-prefix-cls} .@{steps-prefix-cls}-item {\n &:not(.@{steps-prefix-cls}-item-active) {\n & > .@{steps-prefix-cls}-item-container[role='button'] {\n cursor: pointer;\n\n .@{steps-prefix-cls}-item {\n &-title,\n &-subtitle,\n &-description,\n &-icon .@{steps-prefix-cls}-icon {\n transition: color 0.3s;\n }\n }\n\n &:hover {\n .@{steps-prefix-cls}-item {\n &-title,\n &-subtitle,\n &-description {\n color: @primary-color;\n }\n }\n }\n }\n\n &:not(.@{steps-prefix-cls}-item-process) {\n & > .@{steps-prefix-cls}-item-container[role='button']:hover {\n .@{steps-prefix-cls}-item {\n &-icon {\n border-color: @primary-color;\n\n .@{steps-prefix-cls}-icon {\n color: @primary-color;\n }\n }\n }\n }\n }\n }\n}\n\n.@{steps-prefix-cls}-horizontal:not(.@{steps-prefix-cls}-label-vertical) {\n .@{steps-prefix-cls}-item {\n padding-left: 16px;\n white-space: nowrap;\n\n &:first-child {\n padding-left: 0;\n }\n &:last-child .@{steps-prefix-cls}-item-title {\n padding-right: 0;\n }\n\n &-tail {\n display: none;\n }\n\n &-description {\n max-width: @steps-description-max-width;\n white-space: normal;\n }\n }\n}\n\n.step-item-status(@status) {\n @icon-color: '@{status}-icon-color';\n @title-color: '@{status}-title-color';\n @description-color: '@{status}-description-color';\n @tail-color: '@{status}-tail-color';\n &-@{status} &-icon {\n background-color: @steps-background;\n border-color: @@icon-color;\n > .@{steps-prefix-cls}-icon {\n color: @@icon-color;\n .@{steps-prefix-cls}-icon-dot {\n background: @@icon-color;\n }\n }\n }\n &-@{status} > &-container > &-content > &-title {\n color: @@title-color;\n\n &::after {\n background-color: @@tail-color;\n }\n }\n &-@{status} > &-container > &-content > &-description {\n color: @@description-color;\n }\n &-@{status} > &-container > &-tail::after {\n background-color: @@tail-color;\n }\n}\n\n@import './custom-icon';\n@import './small';\n@import './vertical';\n@import './label-placement';\n@import './progress-dot';\n@import './nav';\n@import './rtl';\n@import './progress.less';\n",".@{steps-prefix-cls}-item-custom {\n > .@{steps-prefix-cls}-item-container > .@{steps-prefix-cls}-item-icon {\n height: auto;\n background: none;\n border: 0;\n > .@{steps-prefix-cls}-icon {\n top: @steps-icon-custom-top;\n left: 0.5px;\n width: @steps-icon-custom-size;\n height: @steps-icon-custom-size;\n font-size: @steps-icon-custom-font-size;\n line-height: @steps-icon-custom-size;\n }\n }\n &.@{steps-prefix-cls}-item-process {\n .@{steps-prefix-cls}-item-icon > .@{steps-prefix-cls}-icon {\n color: @process-icon-color;\n }\n }\n}\n\n// Only adjust horizontal customize icon width\n.@{steps-prefix-cls} {\n &:not(.@{steps-prefix-cls}-vertical) {\n .@{steps-prefix-cls}-item-custom {\n .@{steps-prefix-cls}-item-icon {\n width: auto;\n background: none;\n }\n }\n }\n}\n",".@{steps-prefix-cls}-small {\n &.@{steps-prefix-cls}-horizontal:not(.@{steps-prefix-cls}-label-vertical)\n .@{steps-prefix-cls}-item {\n padding-left: 12px;\n\n &:first-child {\n padding-left: 0;\n }\n }\n .@{steps-prefix-cls}-item-icon {\n width: @steps-small-icon-size;\n height: @steps-small-icon-size;\n margin: @steps-small-icon-margin;\n font-size: @font-size-sm;\n line-height: @steps-small-icon-size;\n text-align: center;\n border-radius: @steps-small-icon-size;\n }\n .@{steps-prefix-cls}-item-title {\n padding-right: 12px;\n font-size: @font-size-base;\n line-height: @steps-small-icon-size;\n\n &::after {\n top: (@steps-small-icon-size / 2);\n }\n }\n .@{steps-prefix-cls}-item-description {\n color: @text-color-secondary;\n font-size: @font-size-base;\n }\n .@{steps-prefix-cls}-item-tail {\n top: 8px;\n }\n .@{steps-prefix-cls}-item-custom .@{steps-prefix-cls}-item-icon {\n width: inherit;\n height: inherit;\n line-height: inherit;\n background: none;\n border: 0;\n border-radius: 0;\n > .@{steps-prefix-cls}-icon {\n font-size: @steps-small-icon-size;\n line-height: @steps-small-icon-size;\n transform: none;\n }\n }\n}\n",".@{steps-prefix-cls}-vertical {\n display: flex;\n flex-direction: column;\n\n > .@{steps-prefix-cls}-item {\n display: block;\n flex: 1 0 auto;\n padding-left: 0;\n overflow: visible;\n\n .@{steps-prefix-cls}-item-icon {\n float: left;\n margin-right: @steps-vertical-icon-width;\n }\n\n .@{steps-prefix-cls}-item-content {\n display: block;\n min-height: 48px;\n overflow: hidden;\n }\n\n .@{steps-prefix-cls}-item-title {\n line-height: @steps-icon-size;\n }\n\n .@{steps-prefix-cls}-item-description {\n padding-bottom: 12px;\n }\n }\n\n > .@{steps-prefix-cls}-item\n > .@{steps-prefix-cls}-item-container\n > .@{steps-prefix-cls}-item-tail {\n position: absolute;\n top: 0;\n left: @steps-vertical-tail-width;\n width: 1px;\n height: 100%;\n padding: @steps-icon-size + 6px 0 6px;\n\n &::after {\n width: 1px;\n height: 100%;\n }\n }\n\n > .@{steps-prefix-cls}-item:not(:last-child)\n > .@{steps-prefix-cls}-item-container\n > .@{steps-prefix-cls}-item-tail {\n display: block;\n }\n\n > .@{steps-prefix-cls}-item\n > .@{steps-prefix-cls}-item-container\n > .@{steps-prefix-cls}-item-content\n > .@{steps-prefix-cls}-item-title {\n &::after {\n display: none;\n }\n }\n\n &.@{steps-prefix-cls}-small .@{steps-prefix-cls}-item-container {\n .@{steps-prefix-cls}-item-tail {\n position: absolute;\n top: 0;\n left: @steps-vertical-tail-width-sm;\n padding: @steps-small-icon-size + 6px 0 6px;\n }\n .@{steps-prefix-cls}-item-title {\n line-height: @steps-small-icon-size;\n }\n }\n}\n",".@{steps-prefix-cls}-label-vertical {\n .@{steps-prefix-cls}-item {\n overflow: visible;\n\n &-tail {\n margin-left: 58px;\n padding: 3.5px 24px;\n }\n\n &-content {\n display: block;\n width: ((@steps-icon-size / 2) + 42px) * 2;\n margin-top: 8px;\n text-align: center;\n }\n\n &-icon {\n display: inline-block;\n margin-left: 42px;\n }\n\n &-title {\n padding-right: 0;\n padding-left: 0;\n\n &::after {\n display: none;\n }\n }\n\n &-subtitle {\n display: block;\n margin-bottom: 4px;\n margin-left: 0;\n line-height: @line-height-base;\n }\n }\n &.@{steps-prefix-cls}-small:not(.@{steps-prefix-cls}-dot) {\n .@{steps-prefix-cls}-item {\n &-icon {\n margin-left: 46px;\n }\n }\n }\n}\n",".@{steps-prefix-cls}-dot,\n.@{steps-prefix-cls}-dot.@{steps-prefix-cls}-small {\n .@{steps-prefix-cls}-item {\n &-title {\n line-height: @line-height-base;\n }\n\n &-tail {\n top: @steps-dot-top;\n width: 100%;\n margin: 0 0 0 (@steps-description-max-width / 2);\n padding: 0;\n\n &::after {\n width: ~'calc(100% - 20px)';\n height: 3px;\n margin-left: 12px;\n }\n }\n &:first-child .@{steps-prefix-cls}-icon-dot {\n left: 2px;\n }\n\n &-icon {\n width: @steps-dot-size;\n height: @steps-dot-size;\n margin-left: 67px;\n padding-right: 0;\n line-height: @steps-dot-size;\n background: transparent;\n border: 0;\n\n .@{steps-prefix-cls}-icon-dot {\n position: relative;\n float: left;\n width: 100%;\n height: 100%;\n border-radius: 100px;\n transition: all 0.3s;\n\n /* expand hover area */\n &::after {\n position: absolute;\n top: -12px;\n left: -26px;\n width: 60px;\n height: 32px;\n background: fade(@black, 0.1%);\n content: '';\n }\n }\n }\n\n &-content {\n width: @steps-description-max-width;\n }\n &-process .@{steps-prefix-cls}-item-icon {\n position: relative;\n top: -1px;\n width: @steps-current-dot-size;\n height: @steps-current-dot-size;\n line-height: @steps-current-dot-size;\n background: none;\n }\n &-process .@{steps-prefix-cls}-icon {\n &:first-child .@{steps-prefix-cls}-icon-dot {\n left: 0;\n }\n }\n }\n}\n\n.@{steps-prefix-cls}-vertical.@{steps-prefix-cls}-dot {\n .@{steps-prefix-cls}-item-icon {\n margin-top: 13px;\n margin-left: 0;\n background: none;\n }\n\n // https://github.com/ant-design/ant-design/issues/18354\n .@{steps-prefix-cls}-item > .@{steps-prefix-cls}-item-container > .@{steps-prefix-cls}-item-tail {\n top: 6.5px;\n left: -9px;\n margin: 0;\n padding: 22px 0 4px;\n }\n\n &.@{steps-prefix-cls}-small {\n .@{steps-prefix-cls}-item-icon {\n margin-top: 10px;\n }\n\n .@{steps-prefix-cls}-item\n > .@{steps-prefix-cls}-item-container\n > .@{steps-prefix-cls}-item-tail {\n top: 3.5px;\n }\n }\n\n .@{steps-prefix-cls}-item:first-child .@{steps-prefix-cls}-icon-dot {\n left: 0;\n }\n .@{steps-prefix-cls}-item-content {\n width: inherit;\n }\n .@{steps-prefix-cls}-item-process\n .@{steps-prefix-cls}-item-container\n .@{steps-prefix-cls}-item-icon\n .@{steps-prefix-cls}-icon-dot {\n top: -1px;\n left: -1px;\n }\n}\n",".@{steps-prefix-cls}-navigation {\n padding-top: 12px;\n\n &.@{steps-prefix-cls}-small {\n .@{steps-prefix-cls}-item {\n &-container {\n margin-left: -12px;\n }\n }\n }\n\n .@{steps-prefix-cls}-item {\n overflow: visible;\n text-align: center;\n\n &-container {\n display: inline-block;\n height: 100%;\n margin-left: -16px;\n padding-bottom: 12px;\n text-align: left;\n transition: opacity 0.3s;\n\n .@{steps-prefix-cls}-item-content {\n max-width: @steps-nav-content-max-width;\n }\n\n .@{steps-prefix-cls}-item-title {\n max-width: 100%;\n padding-right: 0;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n\n &::after {\n display: none;\n }\n }\n }\n\n &:not(.@{steps-prefix-cls}-item-active) {\n .@{steps-prefix-cls}-item-container[role='button'] {\n cursor: pointer;\n\n &:hover {\n opacity: 0.85;\n }\n }\n }\n\n &:last-child {\n flex: 1;\n\n &::after {\n display: none;\n }\n }\n\n &::after {\n position: absolute;\n top: 50%;\n left: 100%;\n display: inline-block;\n width: 12px;\n height: 12px;\n margin-top: -14px;\n margin-left: -2px;\n border: 1px solid @steps-nav-arrow-color;\n border-bottom: none;\n border-left: none;\n transform: rotate(45deg);\n content: '';\n }\n\n &::before {\n position: absolute;\n bottom: 0;\n left: 50%;\n display: inline-block;\n width: 0;\n height: 2px;\n background-color: @steps-nav-active-color;\n transition: width 0.3s, left 0.3s;\n transition-timing-function: ease-out;\n content: '';\n }\n }\n\n .@{steps-prefix-cls}-item.@{steps-prefix-cls}-item-active::before {\n left: 0;\n width: 100%;\n }\n}\n\n.@{steps-prefix-cls}-navigation.@{steps-prefix-cls}-vertical {\n > .@{steps-prefix-cls}-item {\n margin-right: 0 !important;\n\n &::before {\n display: none;\n }\n &.@{steps-prefix-cls}-item-active::before {\n top: 0;\n right: 0;\n left: unset;\n display: block;\n width: 3px;\n height: calc(100% - 24px);\n }\n\n &::after {\n position: relative;\n top: -2px;\n left: 50%;\n display: block;\n width: 8px;\n height: 8px;\n margin-bottom: 8px;\n text-align: center;\n transform: rotate(135deg);\n }\n > .@{steps-prefix-cls}-item-container > .@{steps-prefix-cls}-item-tail {\n visibility: hidden;\n }\n }\n}\n\n.@{steps-prefix-cls}-navigation.@{steps-prefix-cls}-horizontal {\n > .@{steps-prefix-cls}-item\n > .@{steps-prefix-cls}-item-container\n > .@{steps-prefix-cls}-item-tail {\n visibility: hidden;\n }\n}\n",".@{steps-prefix-cls} {\n &-rtl {\n direction: rtl;\n }\n}\n\n.@{steps-prefix-cls}-item {\n &-icon {\n .@{steps-prefix-cls}.@{steps-prefix-cls}-rtl & {\n margin-right: 0;\n margin-left: 8px;\n }\n }\n\n &-tail {\n .@{steps-prefix-cls}-rtl & {\n right: 0;\n left: auto;\n }\n }\n\n &-title {\n .@{steps-prefix-cls}-rtl & {\n padding-right: 0;\n padding-left: 16px;\n }\n\n .@{steps-prefix-cls}-item-subtitle {\n .@{steps-prefix-cls}-rtl & {\n float: left;\n margin-right: 8px;\n margin-left: 0;\n }\n }\n\n &::after {\n .@{steps-prefix-cls}-rtl & {\n right: 100%;\n left: auto;\n }\n }\n }\n}\n\n.@{steps-prefix-cls}-horizontal:not(.@{steps-prefix-cls}-label-vertical) {\n .@{steps-prefix-cls}-item {\n .@{steps-prefix-cls}-rtl& {\n padding-right: 16px;\n padding-left: 0;\n }\n\n &:first-child {\n .@{steps-prefix-cls}-rtl& {\n padding-right: 0;\n }\n }\n\n &:last-child .@{steps-prefix-cls}-item-title {\n .@{steps-prefix-cls}-rtl& {\n padding-left: 0;\n }\n }\n }\n}\n\n// custom-icon\n.@{steps-prefix-cls}-item-custom {\n .@{steps-prefix-cls}-item-icon {\n > .@{steps-prefix-cls}-icon {\n .@{steps-prefix-cls}-rtl & {\n right: 0.5px;\n left: auto;\n }\n }\n }\n}\n\n// nav\n.@{steps-prefix-cls}-navigation {\n &.@{steps-prefix-cls}-small {\n .@{steps-prefix-cls}-item {\n &-container {\n .@{steps-prefix-cls}-rtl& {\n margin-right: -12px;\n margin-left: 0;\n }\n }\n }\n }\n\n .@{steps-prefix-cls}-item {\n &-container {\n .@{steps-prefix-cls}-rtl& {\n margin-right: -16px;\n margin-left: 0;\n text-align: right;\n }\n\n .@{steps-prefix-cls}-item-title {\n .@{steps-prefix-cls}-rtl& {\n padding-left: 0;\n }\n }\n }\n\n &::after {\n .@{steps-prefix-cls}-rtl& {\n right: 100%;\n left: auto;\n margin-right: -2px;\n margin-left: 0;\n transform: rotate(225deg);\n }\n }\n }\n}\n\n// small\n.@{steps-prefix-cls}-small {\n &.@{steps-prefix-cls}-horizontal:not(.@{steps-prefix-cls}-label-vertical)\n .@{steps-prefix-cls}-item {\n .@{steps-prefix-cls}-rtl& {\n padding-right: 12px;\n padding-left: 0;\n }\n\n &:first-child {\n .@{steps-prefix-cls}-rtl& {\n padding-right: 0;\n }\n }\n }\n\n .@{steps-prefix-cls}-item-title {\n .@{steps-prefix-cls}-rtl& {\n padding-right: 0;\n padding-left: 12px;\n }\n }\n}\n\n// vertical\n.@{steps-prefix-cls}-vertical {\n > .@{steps-prefix-cls}-item {\n .@{steps-prefix-cls}-item-icon {\n .@{steps-prefix-cls}-rtl& {\n float: right;\n margin-right: 0;\n margin-left: @steps-vertical-icon-width;\n }\n }\n }\n\n > .@{steps-prefix-cls}-item\n > .@{steps-prefix-cls}-item-container\n > .@{steps-prefix-cls}-item-tail {\n .@{steps-prefix-cls}-rtl& {\n right: @steps-vertical-tail-width;\n left: auto;\n }\n }\n\n &.@{steps-prefix-cls}-small .@{steps-prefix-cls}-item-container {\n .@{steps-prefix-cls}-item-tail {\n .@{steps-prefix-cls}-rtl& {\n right: @steps-vertical-tail-width-sm;\n left: auto;\n }\n }\n }\n}\n\n// label\n.@{steps-prefix-cls}-label-vertical {\n .@{steps-prefix-cls}-item {\n &-title {\n .@{steps-prefix-cls}-rtl& {\n padding-left: 0;\n }\n }\n }\n}\n\n// progress-dot\n.@{steps-prefix-cls}-dot,\n.@{steps-prefix-cls}-dot.@{steps-prefix-cls}-small {\n .@{steps-prefix-cls}-item {\n &-tail {\n .@{steps-prefix-cls}-rtl& {\n margin: 0 (@steps-description-max-width / 2) 0 0;\n }\n\n &::after {\n .@{steps-prefix-cls}-rtl& {\n margin-right: 12px;\n margin-left: 0;\n }\n }\n }\n\n &:first-child .@{steps-prefix-cls}-icon-dot {\n .@{steps-prefix-cls}-rtl& {\n right: 2px;\n left: auto;\n }\n }\n\n &-icon {\n .@{steps-prefix-cls}-rtl& {\n margin-right: 67px;\n margin-left: 0;\n }\n\n .@{steps-prefix-cls}-icon-dot {\n .@{steps-prefix-cls}-rtl& {\n float: right;\n }\n\n /* expand hover area */\n &::after {\n .@{steps-prefix-cls}-rtl& {\n right: -26px;\n left: auto;\n }\n }\n }\n }\n }\n}\n\n.@{steps-prefix-cls}-vertical.@{steps-prefix-cls}-dot {\n .@{steps-prefix-cls}-item-icon {\n .@{steps-prefix-cls}-rtl& {\n margin-right: 0;\n margin-left: 16px;\n }\n }\n\n // https://github.com/ant-design/ant-design/issues/18354\n .@{steps-prefix-cls}-item > .@{steps-prefix-cls}-item-container > .@{steps-prefix-cls}-item-tail {\n .@{steps-prefix-cls}-rtl& {\n right: -9px;\n left: auto;\n }\n }\n\n .@{steps-prefix-cls}-item:first-child .@{steps-prefix-cls}-icon-dot {\n .@{steps-prefix-cls}-rtl& {\n right: 0;\n left: auto;\n }\n }\n\n .@{steps-prefix-cls}-item-process .@{steps-prefix-cls}-icon-dot {\n .@{steps-prefix-cls}-rtl& {\n right: -2px;\n left: auto;\n }\n }\n}\n\n// RTL Steps with progress\n.@{steps-prefix-cls}-rtl.@{steps-prefix-cls}-with-progress.@{steps-prefix-cls}-horizontal.@{steps-prefix-cls}-label-horizontal {\n .@{steps-prefix-cls}-item:first-child {\n padding-right: 4px;\n padding-left: 0;\n &.@{steps-prefix-cls}-item-active {\n padding-right: 4px;\n }\n }\n}\n","@progress-prefix-cls: ~'@{ant-prefix}-progress';\n\n.@{steps-prefix-cls}-with-progress {\n .@{steps-prefix-cls}-item {\n padding-top: 4px;\n\n .@{steps-prefix-cls}-item-tail {\n top: 4px !important;\n }\n }\n\n &.@{steps-prefix-cls}-horizontal {\n .@{steps-prefix-cls}-item:first-child {\n padding-bottom: 4px;\n padding-left: 4px;\n }\n }\n\n &.@{steps-prefix-cls}-label-vertical {\n .@{steps-prefix-cls}-item .@{steps-prefix-cls}-item-tail {\n top: 14px !important;\n }\n }\n\n .@{steps-prefix-cls}-item-icon {\n position: relative;\n\n .@{progress-prefix-cls} {\n position: absolute;\n top: -5px;\n right: -5px;\n bottom: -5px;\n left: -5px;\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@switch-prefix-cls: ~'@{ant-prefix}-switch';\n@switch-duration: 0.2s;\n\n@switch-pin-size: @switch-height - 4px;\n@switch-sm-pin-size: @switch-sm-height - 4px;\n\n.@{switch-prefix-cls} {\n .reset-component();\n\n position: relative;\n display: inline-block;\n box-sizing: border-box;\n min-width: @switch-min-width;\n height: @switch-height;\n line-height: @switch-height;\n vertical-align: middle;\n background-color: @disabled-color;\n border: 0;\n border-radius: 100px;\n cursor: pointer;\n transition: all @switch-duration;\n user-select: none;\n\n &:focus {\n outline: 0;\n box-shadow: 0 0 0 2px fade(@disabled-color, 10%);\n }\n\n &-checked:focus {\n box-shadow: 0 0 0 2px @primary-1;\n }\n\n &:focus:hover {\n box-shadow: none;\n }\n\n &-checked {\n background-color: @switch-color;\n }\n\n &-loading,\n &-disabled {\n cursor: not-allowed;\n opacity: @switch-disabled-opacity;\n\n * {\n box-shadow: none;\n cursor: not-allowed;\n }\n }\n\n // ========================= Inner ==========================\n &-inner {\n display: block;\n margin: 0 @switch-inner-margin-min 0 @switch-inner-margin-max;\n color: @text-color-inverse;\n font-size: @font-size-sm;\n transition: margin @switch-duration;\n }\n\n &-checked &-inner {\n margin: 0 @switch-inner-margin-max 0 @switch-inner-margin-min;\n }\n\n // ========================= Handle =========================\n &-handle {\n position: absolute;\n top: @switch-padding;\n left: @switch-padding;\n width: @switch-pin-size;\n height: @switch-pin-size;\n transition: all @switch-duration ease-in-out;\n\n &::before {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background-color: @switch-bg;\n border-radius: (@switch-pin-size / 2);\n box-shadow: 0 2px 4px 0 @switch-shadow-color;\n transition: all @switch-duration ease-in-out;\n content: '';\n }\n }\n\n &-checked &-handle {\n left: calc(100% - @switch-pin-size - @switch-padding);\n }\n\n &:not(&-disabled):active {\n .@{switch-prefix-cls}-handle::before {\n right: -30%;\n left: 0;\n }\n\n &.@{switch-prefix-cls}-checked {\n .@{switch-prefix-cls}-handle::before {\n right: 0;\n left: -30%;\n }\n }\n }\n\n // ======================== Loading =========================\n &-loading-icon.@{iconfont-css-prefix} {\n position: relative;\n top: ((@switch-pin-size - @font-size-base) / 2);\n color: rgba(0, 0, 0, 0.65);\n vertical-align: top;\n }\n\n &-checked &-loading-icon {\n color: @switch-color;\n }\n\n // ========================== Size ==========================\n &-small {\n min-width: @switch-sm-min-width;\n height: @switch-sm-height;\n line-height: @switch-sm-height;\n\n .@{switch-prefix-cls}-inner {\n margin: 0 @switch-sm-inner-margin-min 0 @switch-sm-inner-margin-max;\n font-size: @font-size-sm;\n }\n\n .@{switch-prefix-cls}-handle {\n width: @switch-sm-pin-size;\n height: @switch-sm-pin-size;\n }\n\n .@{switch-prefix-cls}-loading-icon {\n top: ((@switch-sm-pin-size - 9px) / 2);\n font-size: 9px;\n }\n\n &.@{switch-prefix-cls}-checked {\n .@{switch-prefix-cls}-inner {\n margin: 0 @switch-sm-inner-margin-max 0 @switch-sm-inner-margin-min;\n }\n\n .@{switch-prefix-cls}-handle {\n left: calc(100% - @switch-sm-pin-size - @switch-padding);\n }\n }\n }\n}\n\n@import './rtl';\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@switch-prefix-cls: ~'@{ant-prefix}-switch';\n\n@switch-pin-size: @switch-height - 4px;\n@switch-sm-pin-size: @switch-sm-height - 4px;\n\n.@{switch-prefix-cls}-rtl {\n direction: rtl;\n\n .@{switch-prefix-cls}-inner {\n margin: 0 @switch-inner-margin-max 0 @switch-inner-margin-min;\n }\n\n .@{switch-prefix-cls}-handle {\n right: @switch-padding;\n left: auto;\n }\n\n &:not(&-disabled):active {\n .@{switch-prefix-cls}-handle::before {\n right: 0;\n left: -30%;\n }\n\n &.@{switch-prefix-cls}-checked {\n .@{switch-prefix-cls}-handle::before {\n right: -30%;\n left: 0;\n }\n }\n }\n\n &.@{switch-prefix-cls}-checked {\n .@{switch-prefix-cls}-inner {\n margin: 0 @switch-inner-margin-min 0 @switch-inner-margin-max;\n }\n\n .@{switch-prefix-cls}-handle {\n right: calc(100% - @switch-pin-size - @switch-padding);\n }\n }\n\n &.@{switch-prefix-cls}-small {\n &.@{switch-prefix-cls}-checked {\n .@{switch-prefix-cls}-handle {\n right: calc(100% - @switch-sm-pin-size - @switch-padding);\n }\n }\n }\n}\n","@import (reference) '../../style/themes/index';\n\n@table-prefix-cls: ~'@{ant-prefix}-table';\n\n.table-size(@size, @padding-vertical, @padding-horizontal, @font-size) {\n .@{table-prefix-cls}.@{table-prefix-cls}-@{size} {\n font-size: @font-size;\n\n .@{table-prefix-cls}-title,\n .@{table-prefix-cls}-footer,\n .@{table-prefix-cls}-thead > tr > th,\n .@{table-prefix-cls}-tbody > tr > td,\n tfoot > tr > th,\n tfoot > tr > td {\n padding: @padding-vertical @padding-horizontal;\n }\n\n .@{table-prefix-cls}-filter-trigger {\n margin-right: -(@padding-horizontal / 2);\n }\n\n .@{table-prefix-cls}-expanded-row-fixed {\n margin: -@padding-vertical -@padding-horizontal;\n }\n\n .@{table-prefix-cls}-tbody {\n // ========================= Nest Table ===========================\n .@{table-prefix-cls}-wrapper:only-child {\n .@{table-prefix-cls} {\n margin: -@padding-vertical -@padding-horizontal -@padding-vertical (@table-expand-column-width -\n @padding-horizontal);\n }\n }\n }\n\n // https://github.com/ant-design/ant-design/issues/35167\n .@{table-prefix-cls}-selection-column {\n padding-inline-start: (@padding-horizontal / 4);\n }\n }\n}\n\n// ================================================================\n// = Middle =\n// ================================================================\n.table-size(~'middle', @table-padding-vertical-md, @table-padding-horizontal-md, @table-font-size-md);\n\n// ================================================================\n// = Small =\n// ================================================================\n.table-size(~'small', @table-padding-vertical-sm, @table-padding-horizontal-sm, @table-font-size-sm);\n","@import './size';\n@import (reference) '../../style/themes/index';\n@table-prefix-cls: ~'@{ant-prefix}-table';\n\n@table-border: @border-width-base @border-style-base @table-border-color;\n\n.@{table-prefix-cls}.@{table-prefix-cls}-bordered {\n // ============================ Title =============================\n > .@{table-prefix-cls}-title {\n border: @table-border;\n border-bottom: 0;\n }\n\n > .@{table-prefix-cls}-container {\n // ============================ Content ============================\n border-left: @table-border;\n\n > .@{table-prefix-cls}-content,\n > .@{table-prefix-cls}-header,\n > .@{table-prefix-cls}-body,\n > .@{table-prefix-cls}-summary {\n > table {\n // ============================= Cell =============================\n > thead > tr > th,\n > tbody > tr > td,\n > tfoot > tr > th,\n > tfoot > tr > td {\n border-right: @table-border;\n }\n // ============================ Header ============================\n > thead {\n > tr:not(:last-child) > th {\n border-bottom: @border-width-base @border-style-base @table-border-color;\n }\n\n > tr > th {\n &::before {\n background-color: transparent !important;\n }\n }\n }\n\n // Fixed right should provides additional border\n > thead > tr,\n > tbody > tr,\n > tfoot > tr {\n > .@{table-prefix-cls}-cell-fix-right-first::after {\n border-right: @table-border;\n }\n }\n }\n\n // ========================== Expandable ==========================\n > table > tbody > tr > td {\n > .@{table-prefix-cls}-expanded-row-fixed {\n margin: -@table-padding-vertical (-@table-padding-horizontal - @border-width-base);\n\n &::after {\n position: absolute;\n top: 0;\n right: @border-width-base;\n bottom: 0;\n border-right: @table-border;\n content: '';\n }\n }\n }\n }\n\n > .@{table-prefix-cls}-content,\n > .@{table-prefix-cls}-header {\n > table {\n border-top: @table-border;\n }\n }\n }\n\n &.@{table-prefix-cls}-scroll-horizontal {\n > .@{table-prefix-cls}-container > .@{table-prefix-cls}-body {\n > table > tbody {\n > tr.@{table-prefix-cls}-expanded-row,\n > tr.@{table-prefix-cls}-placeholder {\n > td {\n border-right: 0;\n }\n }\n }\n }\n }\n\n // Size related\n &.@{table-prefix-cls}-middle {\n > .@{table-prefix-cls}-container {\n > .@{table-prefix-cls}-content,\n > .@{table-prefix-cls}-body {\n > table > tbody > tr > td {\n > .@{table-prefix-cls}-expanded-row-fixed {\n margin: -@table-padding-vertical-md (-@table-padding-horizontal-md - @border-width-base);\n }\n }\n }\n }\n }\n\n &.@{table-prefix-cls}-small {\n > .@{table-prefix-cls}-container {\n > .@{table-prefix-cls}-content,\n > .@{table-prefix-cls}-body {\n > table > tbody > tr > td {\n > .@{table-prefix-cls}-expanded-row-fixed {\n margin: -@table-padding-vertical-sm (-@table-padding-horizontal-sm - @border-width-base);\n }\n }\n }\n }\n }\n\n // ============================ Footer ============================\n > .@{table-prefix-cls}-footer {\n border: @table-border;\n border-top: 0;\n }\n}\n\n.@{table-prefix-cls}-cell {\n // ============================ Nested ============================\n .@{table-prefix-cls}-container:first-child {\n // :first-child to avoid the case when bordered and title is set\n border-top: 0;\n }\n\n // https://github.com/ant-design/ant-design/issues/35577\n &-scrollbar:not([rowspan]) {\n box-shadow: 0 @border-width-base 0 @border-width-base @table-header-bg;\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n@import './size';\n@import './bordered';\n\n@table-prefix-cls: ~'@{ant-prefix}-table';\n@tree-prefix-cls: ~'@{ant-prefix}-tree';\n@dropdown-prefix-cls: ~'@{ant-prefix}-dropdown';\n@descriptions-prefix-cls: ~'@{ant-prefix}-descriptions';\n@table-header-icon-color: #bfbfbf;\n@table-header-icon-color-hover: darken(@table-header-icon-color, 10%);\n@table-sticky-zindex: calc(@zindex-table-fixed + 1);\n@table-sticky-scroll-bar-active-bg: fade(@table-sticky-scroll-bar-bg, 80%);\n@table-filter-dropdown-max-height: 264px;\n@table-expand-column-width: 48px;\n\n.@{table-prefix-cls}-wrapper {\n clear: both;\n max-width: 100%;\n .clearfix();\n}\n\n.@{table-prefix-cls} {\n .reset-component();\n position: relative;\n font-size: @table-font-size;\n background: @table-bg;\n border-radius: @table-border-radius-base;\n\n // https://github.com/ant-design/ant-design/issues/17611\n table {\n width: 100%;\n text-align: left;\n border-radius: @table-border-radius-base @table-border-radius-base 0 0;\n border-collapse: separate;\n border-spacing: 0;\n }\n\n // ============================= Cell =============================\n &-thead > tr > th,\n &-tbody > tr > td,\n tfoot > tr > th,\n tfoot > tr > td {\n position: relative;\n padding: @table-padding-vertical @table-padding-horizontal;\n overflow-wrap: break-word;\n }\n\n &-cell-ellipsis {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n word-break: keep-all;\n\n // Fixed first or last should special process\n &.@{table-prefix-cls}-cell-fix-left-last,\n &.@{table-prefix-cls}-cell-fix-right-first {\n overflow: visible;\n\n .@{table-prefix-cls}-cell-content {\n display: block;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n }\n\n .@{table-prefix-cls}-column-title {\n overflow: hidden;\n text-overflow: ellipsis;\n word-break: keep-all;\n }\n }\n\n // ============================ Title =============================\n &-title {\n padding: @table-padding-vertical @table-padding-horizontal;\n }\n\n // ============================ Footer ============================\n &-footer {\n padding: @table-padding-vertical @table-padding-horizontal;\n color: @table-footer-color;\n background: @table-footer-bg;\n }\n\n // ============================ Header ============================\n &-thead {\n > tr {\n > th {\n position: relative;\n color: @table-header-color;\n font-weight: 500;\n text-align: left;\n background: @table-header-bg;\n border-bottom: @border-width-base @border-style-base @table-border-color;\n transition: background 0.3s ease;\n\n &[colspan]:not([colspan='1']) {\n text-align: center;\n }\n\n &:not(:last-child):not(.@{table-prefix-cls}-selection-column):not(.@{table-prefix-cls}-row-expand-icon-cell):not([colspan])::before {\n position: absolute;\n top: 50%;\n right: 0;\n width: 1px;\n height: 1.6em;\n background-color: @table-header-cell-split-color;\n transform: translateY(-50%);\n transition: background-color 0.3s;\n content: '';\n }\n }\n }\n\n > tr:not(:last-child) > th {\n &[colspan] {\n border-bottom: 0;\n }\n }\n }\n\n // ============================= Body =============================\n &-tbody {\n > tr {\n > td {\n border-bottom: @border-width-base @border-style-base @table-border-color;\n transition: background 0.3s;\n\n // ========================= Nest Table ===========================\n > .@{table-prefix-cls}-wrapper:only-child,\n > .@{table-prefix-cls}-expanded-row-fixed > .@{table-prefix-cls}-wrapper:only-child {\n .@{table-prefix-cls} {\n margin: -@table-padding-vertical -@table-padding-horizontal -@table-padding-vertical (@table-expand-column-width -\n @table-padding-horizontal);\n\n &-tbody > tr:last-child > td {\n border-bottom: 0;\n\n &:first-child,\n &:last-child {\n border-radius: 0;\n }\n }\n }\n }\n }\n\n &.@{table-prefix-cls}-row:hover > td,\n > td.@{table-prefix-cls}-cell-row-hover {\n background: @table-row-hover-bg;\n }\n\n &.@{table-prefix-cls}-row-selected {\n > td {\n background: @table-selected-row-bg;\n border-color: rgba(0, 0, 0, 0.03);\n }\n\n &:hover {\n > td {\n background: @table-selected-row-hover-bg;\n }\n }\n }\n }\n }\n\n // =========================== Summary ============================\n &-summary {\n position: relative;\n z-index: @zindex-table-fixed;\n background: @table-bg;\n\n div& {\n box-shadow: 0 -@border-width-base 0 @table-border-color;\n }\n\n > tr {\n > th,\n > td {\n border-bottom: @border-width-base @border-style-base @table-border-color;\n }\n }\n }\n\n // ========================== Pagination ==========================\n &-pagination.@{ant-prefix}-pagination {\n margin: 16px 0;\n }\n\n &-pagination {\n display: flex;\n flex-wrap: wrap;\n row-gap: @padding-xs;\n\n > * {\n flex: none;\n }\n\n &-left {\n justify-content: flex-start;\n }\n\n &-center {\n justify-content: center;\n }\n\n &-right {\n justify-content: flex-end;\n }\n }\n\n // ================================================================\n // = Function =\n // ================================================================\n\n // ============================ Sorter ============================\n &-thead th.@{table-prefix-cls}-column-has-sorters {\n outline: none;\n cursor: pointer;\n transition: all 0.3s;\n\n &:hover {\n background: @table-header-sort-active-bg;\n\n &::before {\n background-color: transparent !important;\n }\n }\n\n &:focus-visible {\n color: @primary-color;\n }\n\n // https://github.com/ant-design/ant-design/issues/30969\n &.@{table-prefix-cls}-cell-fix-left:hover,\n &.@{table-prefix-cls}-cell-fix-right:hover {\n background: @table-fixed-header-sort-active-bg;\n }\n }\n\n &-thead th.@{table-prefix-cls}-column-sort {\n background: @table-header-sort-bg;\n\n &::before {\n background-color: transparent !important;\n }\n }\n\n td&-column-sort {\n background: @table-body-sort-bg;\n }\n\n &-column-title {\n position: relative;\n z-index: 1;\n flex: 1;\n }\n\n &-column-sorters {\n display: flex;\n flex: auto;\n align-items: center;\n justify-content: space-between;\n\n &::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n width: 100%;\n height: 100%;\n content: '';\n }\n }\n\n &-column-sorter {\n margin-left: 4px;\n color: @table-header-icon-color;\n font-size: 0;\n transition: color 0.3s;\n\n &-inner {\n display: inline-flex;\n flex-direction: column;\n align-items: center;\n }\n\n &-up,\n &-down {\n font-size: 11px;\n\n &.active {\n color: @primary-color;\n }\n }\n\n &-up + &-down {\n margin-top: -0.3em;\n }\n }\n\n &-column-sorters:hover &-column-sorter {\n color: darken(@table-header-icon-color, 10%);\n }\n\n // ============================ Filter ============================\n &-filter-column {\n display: flex;\n justify-content: space-between;\n }\n\n &-filter-trigger {\n position: relative;\n display: flex;\n align-items: center;\n margin: -4px (-@table-padding-horizontal / 2) -4px 4px;\n padding: 0 4px;\n color: @table-header-icon-color;\n font-size: @font-size-sm;\n border-radius: @border-radius-base;\n cursor: pointer;\n transition: all 0.3s;\n\n &:hover {\n color: @text-color-secondary;\n background: @table-header-filter-active-bg;\n }\n\n &.active {\n color: @primary-color;\n }\n }\n\n // Dropdown\n &-filter-dropdown {\n .reset-component();\n\n min-width: 120px;\n background-color: @table-filter-dropdown-bg;\n border-radius: @border-radius-base;\n box-shadow: @box-shadow-base;\n\n // Reset menu\n .@{dropdown-prefix-cls}-menu {\n // https://github.com/ant-design/ant-design/issues/4916\n // https://github.com/ant-design/ant-design/issues/19542\n max-height: @table-filter-dropdown-max-height;\n overflow-x: hidden;\n border: 0;\n box-shadow: none;\n\n &:empty::after {\n display: block;\n padding: 8px 0;\n color: @disabled-color;\n font-size: @font-size-sm;\n text-align: center;\n content: 'Not Found';\n }\n }\n\n &-tree {\n padding: 8px 8px 0;\n\n .@{tree-prefix-cls}-treenode .@{tree-prefix-cls}-node-content-wrapper:hover {\n background-color: @tree-node-hover-bg;\n }\n\n .@{tree-prefix-cls}-treenode-checkbox-checked .@{tree-prefix-cls}-node-content-wrapper {\n &,\n &:hover {\n background-color: @tree-node-selected-bg;\n }\n }\n }\n\n &-search {\n padding: 8px;\n border-bottom: @border-width-base @border-color-split @border-style-base;\n\n &-input {\n input {\n min-width: 140px;\n }\n .@{iconfont-css-prefix} {\n color: @disabled-color;\n }\n }\n }\n\n &-checkall {\n width: 100%;\n margin-bottom: 4px;\n margin-left: 4px;\n }\n\n &-submenu > ul {\n max-height: calc(100vh - 130px);\n overflow-x: hidden;\n overflow-y: auto;\n }\n\n // Checkbox\n &,\n &-submenu {\n .@{ant-prefix}-checkbox-wrapper + span {\n padding-left: 8px;\n }\n }\n\n // Operation\n &-btns {\n display: flex;\n justify-content: space-between;\n padding: 7px 8px;\n overflow: hidden;\n background-color: @table-filter-btns-bg;\n border-top: @border-width-base @border-style-base @table-border-color;\n }\n }\n\n // ========================== Selections ==========================\n &-selection-col {\n width: @table-selection-column-width;\n }\n\n &-bordered &-selection-col {\n width: @table-selection-column-width + 18px;\n }\n\n table tr th&-selection-column,\n table tr td&-selection-column {\n padding-right: @padding-xs;\n padding-left: @padding-xs;\n text-align: center;\n\n .@{ant-prefix}-radio-wrapper {\n margin-right: 0;\n }\n }\n\n table tr th&-selection-column&-cell-fix-left {\n z-index: 3;\n }\n\n table tr th&-selection-column::after {\n background-color: transparent !important;\n }\n\n &-selection {\n position: relative;\n display: inline-flex;\n flex-direction: column;\n\n &-extra {\n position: absolute;\n top: 0;\n z-index: 1;\n cursor: pointer;\n transition: all 0.3s;\n margin-inline-start: 100%;\n padding-inline-start: (@table-padding-horizontal / 4);\n\n .@{iconfont-css-prefix} {\n color: @table-header-icon-color;\n font-size: 10px;\n\n &:hover {\n color: @table-header-icon-color-hover;\n }\n }\n }\n }\n\n // ========================== Expandable ==========================\n &-expand-icon-col {\n width: @table-expand-column-width;\n }\n\n &-row-expand-icon-cell {\n text-align: center;\n\n .@{table-prefix-cls}-row-expand-icon {\n display: inline-flex;\n float: none;\n vertical-align: sub;\n }\n }\n\n &-row-indent {\n float: left;\n height: 1px;\n }\n\n &-row-expand-icon {\n .operation-unit();\n position: relative;\n float: left;\n box-sizing: border-box;\n width: @expand-icon-size;\n height: @expand-icon-size;\n padding: 0;\n color: inherit;\n line-height: ceil(((@font-size-sm * 1.4 - @border-width-base * 3) / 2)) * 2 + @border-width-base *\n 3;\n background: @table-expand-icon-bg;\n border: @border-width-base @border-style-base @table-border-color;\n border-radius: @border-radius-base;\n transform: scale((unit(@checkbox-size) / unit(@expand-icon-size)));\n transition: all 0.3s;\n user-select: none;\n @expand-icon-size: ceil(((@font-size-sm * 1.4 - @border-width-base * 3) / 2)) * 2 +\n @border-width-base * 3;\n\n &:focus,\n &:hover,\n &:active {\n border-color: currentcolor;\n }\n\n &::before,\n &::after {\n position: absolute;\n background: currentcolor;\n transition: transform 0.3s ease-out;\n content: '';\n }\n\n &::before {\n top: ceil(((@font-size-sm * 1.4 - @border-width-base * 3) / 2));\n right: 3px;\n left: 3px;\n height: @border-width-base;\n }\n\n &::after {\n top: 3px;\n bottom: 3px;\n left: ceil(((@font-size-sm * 1.4 - @border-width-base * 3) / 2));\n width: @border-width-base;\n transform: rotate(90deg);\n }\n\n // Motion effect\n &-collapsed::before {\n transform: rotate(-180deg);\n }\n\n &-collapsed::after {\n transform: rotate(0deg);\n }\n\n &-spaced {\n &::before,\n &::after {\n display: none;\n content: none;\n }\n background: transparent;\n border: 0;\n visibility: hidden;\n }\n\n .@{table-prefix-cls}-row-indent + & {\n margin-top: ((@font-size-base * @line-height-base - @border-width-base * 3) / 2) -\n ceil(((@font-size-sm * 1.4 - @border-width-base * 3) / 2));\n margin-right: @padding-xs;\n }\n }\n\n tr&-expanded-row {\n &,\n &:hover {\n > td {\n background: @table-expanded-row-bg;\n }\n }\n\n // https://github.com/ant-design/ant-design/issues/25573\n .@{descriptions-prefix-cls}-view {\n display: flex;\n\n table {\n flex: auto;\n width: auto;\n }\n }\n }\n\n // With fixed\n .@{table-prefix-cls}-expanded-row-fixed {\n position: relative;\n margin: -@table-padding-vertical -@table-padding-horizontal;\n padding: @table-padding-vertical @table-padding-horizontal;\n }\n\n // ========================= Placeholder ==========================\n &-tbody > tr&-placeholder {\n text-align: center;\n .@{table-prefix-cls}-empty & {\n color: @disabled-color;\n }\n\n &:hover {\n > td {\n background: @component-background;\n }\n }\n }\n\n // ============================ Fixed =============================\n &-cell-fix-left,\n &-cell-fix-right {\n position: sticky !important;\n z-index: @zindex-table-fixed;\n background: @table-bg;\n }\n\n &-cell-fix-left-first::after,\n &-cell-fix-left-last::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: -1px;\n width: 30px;\n transform: translateX(100%);\n transition: box-shadow 0.3s;\n content: '';\n pointer-events: none;\n }\n\n &-cell-fix-left-all::after {\n display: none;\n }\n\n &-cell-fix-right-first::after,\n &-cell-fix-right-last::after {\n position: absolute;\n top: 0;\n bottom: -1px;\n left: 0;\n width: 30px;\n transform: translateX(-100%);\n transition: box-shadow 0.3s;\n content: '';\n pointer-events: none;\n }\n\n .@{table-prefix-cls}-container {\n &::before,\n &::after {\n position: absolute;\n top: 0;\n bottom: 0;\n z-index: calc(@table-sticky-zindex + 1);\n width: 30px;\n transition: box-shadow 0.3s;\n content: '';\n pointer-events: none;\n }\n\n &::before {\n left: 0;\n }\n\n &::after {\n right: 0;\n }\n }\n\n &-ping-left {\n &:not(.@{table-prefix-cls}-has-fix-left) > .@{table-prefix-cls}-container {\n position: relative;\n\n &::before {\n box-shadow: inset 10px 0 8px -8px darken(@shadow-color, 5%);\n }\n }\n\n .@{table-prefix-cls}-cell-fix-left-first::after,\n .@{table-prefix-cls}-cell-fix-left-last::after {\n box-shadow: inset 10px 0 8px -8px darken(@shadow-color, 5%);\n }\n\n .@{table-prefix-cls}-cell-fix-left-last::before {\n background-color: transparent !important;\n }\n }\n\n &-ping-right {\n &:not(.@{table-prefix-cls}-has-fix-right) > .@{table-prefix-cls}-container {\n position: relative;\n\n &::after {\n box-shadow: inset -10px 0 8px -8px darken(@shadow-color, 5%);\n }\n }\n\n .@{table-prefix-cls}-cell-fix-right-first::after,\n .@{table-prefix-cls}-cell-fix-right-last::after {\n box-shadow: inset -10px 0 8px -8px darken(@shadow-color, 5%);\n }\n }\n\n &-sticky {\n &-holder {\n position: sticky;\n z-index: @table-sticky-zindex;\n background: @component-background;\n }\n\n &-scroll {\n position: sticky;\n bottom: 0;\n z-index: @table-sticky-zindex;\n display: flex;\n align-items: center;\n background: lighten(@table-border-color, 80%);\n border-top: 1px solid @table-border-color;\n opacity: 0.6;\n\n &:hover {\n transform-origin: center bottom;\n }\n\n &-bar {\n height: 8px;\n background-color: @table-sticky-scroll-bar-bg;\n border-radius: @table-sticky-scroll-bar-radius;\n\n &:hover {\n background-color: @table-sticky-scroll-bar-active-bg;\n }\n\n &-active {\n background-color: @table-sticky-scroll-bar-active-bg;\n }\n }\n }\n }\n}\n\n@media all and (-ms-high-contrast: none) {\n .@{table-prefix-cls} {\n &-ping-left {\n .@{table-prefix-cls}-cell-fix-left-last::after {\n box-shadow: none !important;\n }\n }\n\n &-ping-right {\n .@{table-prefix-cls}-cell-fix-right-first::after {\n box-shadow: none !important;\n }\n }\n }\n}\n\n@import './radius';\n@import './rtl';\n","// ================================================================\n// = Border Radius =\n// ================================================================\n.@{table-prefix-cls} {\n /* title + table */\n &-title {\n border-radius: @table-border-radius-base @table-border-radius-base 0 0;\n }\n\n &-title + &-container {\n border-top-left-radius: 0;\n border-top-right-radius: 0;\n\n table {\n border-radius: 0;\n\n > thead > tr:first-child {\n th:first-child {\n border-radius: 0;\n }\n\n th:last-child {\n border-radius: 0;\n }\n }\n }\n }\n\n /* table */\n &-container {\n border-top-left-radius: @table-border-radius-base;\n border-top-right-radius: @table-border-radius-base;\n\n table > thead > tr:first-child {\n th:first-child {\n border-top-left-radius: @table-border-radius-base;\n }\n\n th:last-child {\n border-top-right-radius: @table-border-radius-base;\n }\n }\n }\n\n /* table + footer */\n &-footer {\n border-radius: 0 0 @table-border-radius-base @table-border-radius-base;\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@table-prefix-cls: ~'@{ant-prefix}-table';\n@table-wrapepr-cls: ~'@{table-prefix-cls}-wrapper';\n@table-wrapepr-rtl-cls: ~'@{table-prefix-cls}-wrapper-rtl';\n\n.@{table-prefix-cls}-wrapper {\n &-rtl {\n direction: rtl;\n }\n}\n\n.@{table-prefix-cls} {\n &-rtl {\n direction: rtl;\n }\n\n table {\n .@{table-wrapepr-rtl-cls} & {\n text-align: right;\n }\n }\n\n // ============================ Header ============================\n &-thead {\n > tr {\n > th {\n &[colspan]:not([colspan='1']) {\n .@{table-wrapepr-rtl-cls} & {\n text-align: center;\n }\n }\n\n &:not(:last-child):not(.@{table-prefix-cls}-selection-column):not(.@{table-prefix-cls}-row-expand-icon-cell):not([colspan])::before {\n .@{table-wrapepr-rtl-cls} & {\n right: auto;\n left: 0;\n }\n }\n\n .@{table-wrapepr-rtl-cls} & {\n text-align: right;\n }\n }\n }\n }\n\n // ============================= Body =============================\n &-tbody {\n > tr {\n // ========================= Nest Table ===========================\n .@{table-prefix-cls}-wrapper:only-child {\n .@{table-prefix-cls}.@{table-prefix-cls}-rtl {\n margin: -@table-padding-vertical (@table-padding-horizontal + ceil(@font-size-sm * 1.4)) -@table-padding-vertical -@table-padding-horizontal;\n }\n }\n }\n }\n\n // ========================== Pagination ==========================\n &-pagination {\n &-left {\n .@{table-wrapepr-cls}.@{table-wrapepr-rtl-cls} & {\n justify-content: flex-end;\n }\n }\n\n &-right {\n .@{table-wrapepr-cls}.@{table-wrapepr-rtl-cls} & {\n justify-content: flex-start;\n }\n }\n }\n\n // ================================================================\n // = Function =\n // ================================================================\n\n // ============================ Sorter ============================\n &-column-sorter {\n .@{table-wrapepr-rtl-cls} & {\n margin-right: 4px;\n margin-left: 0;\n }\n }\n\n // ============================ Filter ============================\n &-filter-column-title {\n .@{table-wrapepr-rtl-cls} & {\n padding: @table-padding-vertical @table-padding-horizontal @table-padding-vertical 2.3em;\n }\n }\n\n &-thead tr th.@{table-prefix-cls}-column-has-sorters {\n .@{table-prefix-cls}-filter-column-title {\n .@{table-prefix-cls}-rtl & {\n padding: 0 0 0 2.3em;\n }\n }\n }\n\n &-filter-trigger {\n .@{table-wrapepr-rtl-cls} & {\n margin: -4px 4px -4px (-@table-padding-horizontal / 2);\n }\n }\n\n // Dropdown\n &-filter-dropdown {\n // Checkbox\n &,\n &-submenu {\n .@{ant-prefix}-checkbox-wrapper + span {\n .@{ant-prefix}-dropdown-rtl &,\n .@{ant-prefix}-dropdown-menu-submenu-rtl& {\n padding-right: 8px;\n padding-left: 0;\n }\n }\n }\n }\n\n // ========================== Selections ==========================\n &-selection {\n .@{table-wrapepr-rtl-cls} & {\n text-align: center;\n }\n }\n\n // ========================== Expandable ==========================\n &-row-indent {\n .@{table-wrapepr-rtl-cls} & {\n float: right;\n }\n }\n\n &-row-expand-icon {\n .@{table-wrapepr-rtl-cls} & {\n float: right;\n }\n\n .@{table-prefix-cls}-row-indent + & {\n .@{table-wrapepr-rtl-cls} & {\n margin-right: 0;\n margin-left: @padding-xs;\n }\n }\n\n &::after {\n .@{table-wrapepr-rtl-cls} & {\n transform: rotate(-90deg);\n }\n }\n\n &-collapsed::before {\n .@{table-wrapepr-rtl-cls} & {\n transform: rotate(180deg);\n }\n }\n\n &-collapsed::after {\n .@{table-wrapepr-rtl-cls} & {\n transform: rotate(0deg);\n }\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@tab-prefix-cls: ~'@{ant-prefix}-tabs';\n\n.@{tab-prefix-cls} {\n &-small {\n > .@{tab-prefix-cls}-nav {\n .@{tab-prefix-cls}-tab {\n padding: @tabs-horizontal-padding-sm;\n font-size: @tabs-title-font-size-sm;\n }\n }\n }\n\n &-large {\n > .@{tab-prefix-cls}-nav {\n .@{tab-prefix-cls}-tab {\n padding: @tabs-horizontal-padding-lg;\n font-size: @tabs-title-font-size-lg;\n }\n }\n }\n\n &-card {\n &.@{tab-prefix-cls}-small {\n > .@{tab-prefix-cls}-nav {\n .@{tab-prefix-cls}-tab {\n padding: @tabs-card-horizontal-padding-sm;\n }\n }\n }\n\n &.@{tab-prefix-cls}-large {\n > .@{tab-prefix-cls}-nav {\n .@{tab-prefix-cls}-tab {\n padding: @tabs-card-horizontal-padding-lg;\n }\n }\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@tab-prefix-cls: ~'@{ant-prefix}-tabs';\n\n.@{tab-prefix-cls} {\n &-rtl {\n direction: rtl;\n\n .@{tab-prefix-cls}-nav {\n .@{tab-prefix-cls}-tab {\n margin: @tabs-horizontal-margin-rtl;\n\n &:last-of-type {\n margin-left: 0;\n }\n\n .@{iconfont-css-prefix} {\n margin-right: 0;\n margin-left: @margin-sm;\n }\n\n .@{tab-prefix-cls}-tab-remove {\n margin-right: @margin-xs;\n margin-left: -@margin-xss;\n\n .@{iconfont-css-prefix} {\n margin: 0;\n }\n }\n }\n }\n\n &.@{tab-prefix-cls}-left {\n > .@{tab-prefix-cls}-nav {\n order: 1;\n }\n > .@{tab-prefix-cls}-content-holder {\n order: 0;\n }\n }\n\n &.@{tab-prefix-cls}-right {\n > .@{tab-prefix-cls}-nav {\n order: 0;\n }\n > .@{tab-prefix-cls}-content-holder {\n order: 1;\n }\n }\n }\n\n // ====================== Card ======================\n &-card {\n &.@{tab-prefix-cls}-top,\n &.@{tab-prefix-cls}-bottom {\n > .@{tab-prefix-cls}-nav,\n > div > .@{tab-prefix-cls}-nav {\n .@{tab-prefix-cls}-tab + .@{tab-prefix-cls}-tab {\n .@{tab-prefix-cls}-rtl& {\n margin-right: @tabs-card-gutter;\n margin-left: 0;\n }\n }\n .@{tab-prefix-cls}-nav-add {\n .@{tab-prefix-cls}-rtl& {\n margin-right: @tabs-card-gutter;\n margin-left: 0;\n }\n }\n }\n }\n }\n}\n\n.@{tab-prefix-cls}-dropdown {\n &-rtl {\n direction: rtl;\n }\n\n &-menu-item {\n .@{tab-prefix-cls}-dropdown-rtl & {\n text-align: right;\n }\n }\n}\n","@import '../../style/themes/index';\n@tab-prefix-cls: ~'@{ant-prefix}-tabs';\n\n.@{tab-prefix-cls} {\n // ========================== Top & Bottom ==========================\n &-top,\n &-bottom {\n flex-direction: column;\n\n > .@{tab-prefix-cls}-nav,\n > div > .@{tab-prefix-cls}-nav {\n margin: @tabs-bar-margin;\n\n &::before {\n position: absolute;\n right: 0;\n left: 0;\n border-bottom: @border-width-base @border-style-base @border-color-split;\n content: '';\n }\n\n .@{tab-prefix-cls}-ink-bar {\n height: 2px;\n\n &-animated {\n transition: width @animation-duration-slow, left @animation-duration-slow,\n right @animation-duration-slow;\n }\n }\n\n .@{tab-prefix-cls}-nav-wrap {\n &::before,\n &::after {\n top: 0;\n bottom: 0;\n width: 30px;\n }\n\n &::before {\n left: 0;\n box-shadow: inset 10px 0 8px -8px fade(@shadow-color, 8%);\n }\n\n &::after {\n right: 0;\n box-shadow: inset -10px 0 8px -8px fade(@shadow-color, 8%);\n }\n\n &.@{tab-prefix-cls}-nav-wrap-ping-left::before {\n opacity: 1;\n }\n &.@{tab-prefix-cls}-nav-wrap-ping-right::after {\n opacity: 1;\n }\n }\n }\n }\n\n &-top {\n > .@{tab-prefix-cls}-nav,\n > div > .@{tab-prefix-cls}-nav {\n &::before {\n bottom: 0;\n }\n\n .@{tab-prefix-cls}-ink-bar {\n bottom: 0;\n }\n }\n }\n\n &-bottom {\n > .@{tab-prefix-cls}-nav,\n > div > .@{tab-prefix-cls}-nav {\n order: 1;\n margin-top: @margin-md;\n margin-bottom: 0;\n\n &::before {\n top: 0;\n }\n\n .@{tab-prefix-cls}-ink-bar {\n top: 0;\n }\n }\n\n > .@{tab-prefix-cls}-content-holder,\n > div > .@{tab-prefix-cls}-content-holder {\n order: 0;\n }\n }\n\n // ========================== Left & Right ==========================\n &-left,\n &-right {\n > .@{tab-prefix-cls}-nav,\n > div > .@{tab-prefix-cls}-nav {\n flex-direction: column;\n min-width: 50px;\n\n // >>>>>>>>>>> Tab\n .@{tab-prefix-cls}-tab {\n padding: @tabs-vertical-padding;\n text-align: center;\n }\n\n .@{tab-prefix-cls}-tab + .@{tab-prefix-cls}-tab {\n margin: @tabs-vertical-margin;\n }\n\n // >>>>>>>>>>> Nav\n .@{tab-prefix-cls}-nav-wrap {\n flex-direction: column;\n\n &::before,\n &::after {\n right: 0;\n left: 0;\n height: 30px;\n }\n\n &::before {\n top: 0;\n box-shadow: inset 0 10px 8px -8px fade(@shadow-color, 8%);\n }\n\n &::after {\n bottom: 0;\n box-shadow: inset 0 -10px 8px -8px fade(@shadow-color, 8%);\n }\n\n &.@{tab-prefix-cls}-nav-wrap-ping-top::before {\n opacity: 1;\n }\n &.@{tab-prefix-cls}-nav-wrap-ping-bottom::after {\n opacity: 1;\n }\n }\n\n // >>>>>>>>>>> Ink Bar\n .@{tab-prefix-cls}-ink-bar {\n width: 2px;\n\n &-animated {\n transition: height @animation-duration-slow, top @animation-duration-slow;\n }\n }\n\n .@{tab-prefix-cls}-nav-list,\n .@{tab-prefix-cls}-nav-operations {\n flex: 1 0 auto; // fix safari scroll problem\n flex-direction: column;\n }\n }\n }\n\n &-left {\n > .@{tab-prefix-cls}-nav,\n > div > .@{tab-prefix-cls}-nav {\n .@{tab-prefix-cls}-ink-bar {\n right: 0;\n }\n }\n\n > .@{tab-prefix-cls}-content-holder,\n > div > .@{tab-prefix-cls}-content-holder {\n margin-left: -@border-width-base;\n border-left: @border-width-base @border-style-base @border-color-split;\n\n > .@{tab-prefix-cls}-content > .@{tab-prefix-cls}-tabpane {\n padding-left: @padding-lg;\n }\n }\n }\n\n &-right {\n > .@{tab-prefix-cls}-nav,\n > div > .@{tab-prefix-cls}-nav {\n order: 1;\n\n .@{tab-prefix-cls}-ink-bar {\n left: 0;\n }\n }\n\n > .@{tab-prefix-cls}-content-holder,\n > div > .@{tab-prefix-cls}-content-holder {\n order: 0;\n margin-right: -@border-width-base;\n border-right: @border-width-base @border-style-base @border-color-split;\n\n > .@{tab-prefix-cls}-content > .@{tab-prefix-cls}-tabpane {\n padding-right: @padding-lg;\n }\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@tab-prefix-cls: ~'@{ant-prefix}-tabs';\n\n.@{tab-prefix-cls}-dropdown {\n .reset-component();\n\n position: absolute;\n top: -9999px;\n left: -9999px;\n z-index: @zindex-dropdown;\n display: block;\n\n &-hidden {\n display: none;\n }\n\n &-menu {\n max-height: 200px;\n margin: 0;\n padding: @dropdown-edge-child-vertical-padding 0;\n overflow-x: hidden;\n overflow-y: auto;\n text-align: left;\n list-style-type: none;\n background-color: @dropdown-menu-bg;\n background-clip: padding-box;\n border-radius: @border-radius-base;\n outline: none;\n box-shadow: @box-shadow-base;\n\n &-item {\n display: flex;\n align-items: center;\n min-width: 120px;\n margin: 0;\n padding: @dropdown-vertical-padding @control-padding-horizontal;\n overflow: hidden;\n color: @text-color;\n font-weight: normal;\n font-size: @dropdown-font-size;\n line-height: @dropdown-line-height;\n white-space: nowrap;\n text-overflow: ellipsis;\n cursor: pointer;\n transition: all 0.3s;\n\n > span {\n flex: 1;\n white-space: nowrap;\n }\n\n &-remove {\n flex: none;\n margin-left: @margin-sm;\n color: @text-color-secondary;\n font-size: @font-size-sm;\n background: transparent;\n border: 0;\n cursor: pointer;\n\n &:hover {\n color: @tabs-hover-color;\n }\n }\n\n &:hover {\n background: @item-hover-bg;\n }\n\n &-disabled {\n &,\n &:hover {\n color: @disabled-color;\n background: transparent;\n cursor: not-allowed;\n }\n }\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@tab-prefix-cls: ~'@{ant-prefix}-tabs';\n\n.@{tab-prefix-cls}-card {\n > .@{tab-prefix-cls}-nav,\n > div > .@{tab-prefix-cls}-nav {\n .@{tab-prefix-cls}-tab {\n margin: 0;\n padding: @tabs-card-horizontal-padding;\n background: @tabs-card-head-background;\n border: @border-width-base @border-style-base @border-color-split;\n transition: all @animation-duration-slow @ease-in-out;\n\n &-active {\n color: @tabs-card-active-color;\n background: @component-background;\n }\n }\n\n .@{tab-prefix-cls}-ink-bar {\n visibility: hidden;\n }\n }\n\n // ========================== Top & Bottom ==========================\n &.@{tab-prefix-cls}-top,\n &.@{tab-prefix-cls}-bottom {\n > .@{tab-prefix-cls}-nav,\n > div > .@{tab-prefix-cls}-nav {\n .@{tab-prefix-cls}-tab + .@{tab-prefix-cls}-tab {\n margin-left: @tabs-card-gutter;\n }\n }\n }\n\n &.@{tab-prefix-cls}-top {\n > .@{tab-prefix-cls}-nav,\n > div > .@{tab-prefix-cls}-nav {\n .@{tab-prefix-cls}-tab {\n border-radius: @border-radius-base @border-radius-base 0 0;\n\n &-active {\n border-bottom-color: @component-background;\n }\n }\n }\n }\n &.@{tab-prefix-cls}-bottom {\n > .@{tab-prefix-cls}-nav,\n > div > .@{tab-prefix-cls}-nav {\n .@{tab-prefix-cls}-tab {\n border-radius: 0 0 @border-radius-base @border-radius-base;\n\n &-active {\n border-top-color: @component-background;\n }\n }\n }\n }\n\n // ========================== Left & Right ==========================\n &.@{tab-prefix-cls}-left,\n &.@{tab-prefix-cls}-right {\n > .@{tab-prefix-cls}-nav,\n > div > .@{tab-prefix-cls}-nav {\n .@{tab-prefix-cls}-tab + .@{tab-prefix-cls}-tab {\n margin-top: @tabs-card-gutter;\n }\n }\n }\n\n &.@{tab-prefix-cls}-left {\n > .@{tab-prefix-cls}-nav,\n > div > .@{tab-prefix-cls}-nav {\n .@{tab-prefix-cls}-tab {\n border-radius: @border-radius-base 0 0 @border-radius-base;\n\n &-active {\n border-right-color: @component-background;\n }\n }\n }\n }\n &.@{tab-prefix-cls}-right {\n > .@{tab-prefix-cls}-nav,\n > div > .@{tab-prefix-cls}-nav {\n .@{tab-prefix-cls}-tab {\n border-radius: 0 @border-radius-base @border-radius-base 0;\n\n &-active {\n border-left-color: @component-background;\n }\n }\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n@import './size';\n@import './rtl';\n@import './position';\n@import './dropdown';\n@import './card';\n\n@tab-prefix-cls: ~'@{ant-prefix}-tabs';\n\n.@{tab-prefix-cls} {\n .reset-component();\n\n display: flex;\n\n // ========================== Navigation ==========================\n > .@{tab-prefix-cls}-nav,\n > div > .@{tab-prefix-cls}-nav {\n position: relative;\n display: flex;\n flex: none;\n align-items: center;\n\n .@{tab-prefix-cls}-nav-wrap {\n position: relative;\n display: inline-block;\n display: flex;\n flex: auto;\n align-self: stretch;\n overflow: hidden;\n white-space: nowrap;\n transform: translate(0); // Fix chrome render bug\n\n // >>>>> Ping shadow\n &::before,\n &::after {\n position: absolute;\n z-index: 1;\n opacity: 0;\n transition: opacity @animation-duration-slow;\n content: '';\n pointer-events: none;\n }\n }\n\n .@{tab-prefix-cls}-nav-list {\n position: relative;\n display: flex;\n transition: transform @animation-duration-slow;\n }\n\n // >>>>>>>> Operations\n .@{tab-prefix-cls}-nav-operations {\n display: flex;\n align-self: stretch;\n\n &-hidden {\n position: absolute;\n visibility: hidden;\n pointer-events: none;\n }\n }\n\n .@{tab-prefix-cls}-nav-more {\n position: relative;\n padding: @tabs-card-horizontal-padding;\n background: transparent;\n border: 0;\n\n &::after {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n height: 5px;\n transform: translateY(100%);\n content: '';\n }\n }\n\n .@{tab-prefix-cls}-nav-add {\n min-width: @tabs-card-height;\n margin-left: @tabs-card-gutter;\n padding: 0 @padding-xs;\n background: @tabs-card-head-background;\n border: @border-width-base @border-style-base @border-color-split;\n border-radius: @border-radius-base @border-radius-base 0 0;\n outline: none;\n cursor: pointer;\n transition: all @animation-duration-slow @ease-in-out;\n\n &:hover {\n color: @tabs-hover-color;\n }\n\n &:active,\n &:focus {\n color: @tabs-active-color;\n }\n }\n }\n\n &-extra-content {\n flex: none;\n }\n\n &-centered {\n > .@{tab-prefix-cls}-nav,\n > div > .@{tab-prefix-cls}-nav {\n .@{tab-prefix-cls}-nav-wrap {\n &:not([class*='@{tab-prefix-cls}-nav-wrap-ping']) {\n justify-content: center;\n }\n }\n }\n }\n\n // ============================ InkBar ============================\n &-ink-bar {\n position: absolute;\n background: @tabs-ink-bar-color;\n pointer-events: none;\n }\n\n // ============================= Tabs =============================\n &-tab {\n position: relative;\n display: inline-flex;\n align-items: center;\n padding: @tabs-horizontal-padding;\n font-size: @tabs-title-font-size;\n background: transparent;\n border: 0;\n outline: none;\n cursor: pointer;\n\n &-btn,\n &-remove {\n &:focus,\n &:active {\n color: @tabs-active-color;\n }\n }\n\n &-btn {\n outline: none;\n transition: all 0.3s;\n }\n\n &-remove {\n flex: none;\n margin-right: -@margin-xss;\n margin-left: @margin-xs;\n color: @text-color-secondary;\n font-size: @font-size-sm;\n background: transparent;\n border: none;\n outline: none;\n cursor: pointer;\n transition: all @animation-duration-slow;\n\n &:hover {\n color: @heading-color;\n }\n }\n\n &:hover {\n color: @tabs-hover-color;\n }\n\n &&-active &-btn {\n color: @tabs-highlight-color;\n text-shadow: 0 0 0.25px currentcolor;\n }\n\n &&-disabled {\n color: @disabled-color;\n cursor: not-allowed;\n }\n\n &&-disabled &-btn,\n &&-disabled &-remove {\n &:focus,\n &:active {\n color: @disabled-color;\n }\n }\n\n & &-remove .@{iconfont-css-prefix} {\n margin: 0;\n }\n\n .@{iconfont-css-prefix} {\n margin-right: @margin-sm;\n }\n }\n\n &-tab + &-tab {\n margin: @tabs-horizontal-margin;\n }\n\n // =========================== TabPanes ===========================\n &-content {\n &-holder {\n flex: auto;\n min-width: 0;\n min-height: 0;\n }\n\n position: relative;\n width: 100%;\n }\n\n &-tabpane {\n outline: none;\n\n &-hidden {\n display: none;\n }\n }\n\n // Motion\n &-switch {\n &-appear,\n &-enter {\n transition: none;\n\n &-start {\n opacity: 0;\n }\n\n &-active {\n opacity: 1;\n transition: opacity @animation-duration-slow;\n }\n }\n\n &-leave {\n position: absolute;\n transition: none;\n inset: 0;\n\n &-start {\n opacity: 1;\n }\n\n &-active {\n opacity: 0;\n transition: opacity @animation-duration-slow;\n }\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@tag-prefix-cls: ~'@{ant-prefix}-tag';\n\n.@{tag-prefix-cls} {\n .reset-component();\n\n display: inline-block;\n height: auto;\n margin-right: 8px;\n padding: 0 7px;\n font-size: @tag-font-size;\n line-height: @tag-line-height;\n white-space: nowrap;\n background: @tag-default-bg;\n border: @border-width-base @border-style-base @border-color-base;\n border-radius: @tag-border-radius;\n opacity: 1;\n transition: all 0.3s;\n\n &,\n a,\n a:hover {\n color: @tag-default-color;\n }\n\n > a:first-child:last-child {\n display: inline-block;\n margin: 0 -8px;\n padding: 0 8px;\n }\n\n &-close-icon {\n margin-left: 3px;\n color: @text-color-secondary;\n font-size: 10px;\n cursor: pointer;\n transition: all 0.3s;\n\n &:hover {\n color: @heading-color;\n }\n }\n\n &-has-color {\n border-color: transparent;\n &,\n a,\n a:hover,\n .@{iconfont-css-prefix}-close,\n .@{iconfont-css-prefix}-close:hover {\n color: @text-color-inverse;\n }\n }\n\n &-checkable {\n background-color: transparent;\n border-color: transparent;\n cursor: pointer;\n\n &:not(&-checked):hover {\n color: @primary-color;\n }\n\n &:active,\n &-checked {\n color: @text-color-inverse;\n }\n\n &-checked {\n background-color: @primary-6;\n }\n\n &:active {\n background-color: @primary-7;\n }\n }\n\n &-hidden {\n display: none;\n }\n\n // mixin to iterate over colors and create CSS class for each one\n .make-color-classes(@i: length(@preset-colors)) when (@i > 0) {\n .make-color-classes(@i - 1);\n @color: extract(@preset-colors, @i);\n @lightColor: '@{color}-1';\n @lightBorderColor: '@{color}-3';\n @darkColor: '@{color}-6';\n @textColor: '@{color}-7';\n &-@{color} {\n color: @@textColor;\n background: @@lightColor;\n border-color: @@lightBorderColor;\n }\n &-@{color}-inverse {\n color: @text-color-inverse;\n background: @@darkColor;\n border-color: @@darkColor;\n }\n }\n\n .make-status-color-classes(@status, @cssVariableType) {\n @bgColor: '@{cssVariableType}-color-deprecated-bg';\n @borderColor: '@{cssVariableType}-color-deprecated-border';\n @textColor: '@{cssVariableType}-color';\n &-@{status} {\n color: @@textColor;\n background: @@bgColor;\n border-color: @@borderColor;\n }\n }\n\n .make-color-classes();\n\n .make-status-color-classes(success, success);\n .make-status-color-classes(processing, info);\n .make-status-color-classes(error, error);\n .make-status-color-classes(warning, warning);\n\n // To ensure that a space will be placed between character and `Icon`.\n > .@{iconfont-css-prefix} + span,\n > span + .@{iconfont-css-prefix} {\n margin-left: 7px;\n }\n}\n\n@import './rtl';\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@tag-prefix-cls: ~'@{ant-prefix}-tag';\n\n.@{tag-prefix-cls} {\n &&-rtl {\n margin-right: 0;\n margin-left: 8px;\n direction: rtl;\n text-align: right;\n }\n\n &-close-icon {\n .@{tag-prefix-cls}-rtl & {\n margin-right: 3px;\n margin-left: 0;\n }\n }\n\n > .@{iconfont-css-prefix} + span,\n > span + .@{iconfont-css-prefix} {\n .@{tag-prefix-cls}-rtl& {\n margin-right: 7px;\n margin-left: 0;\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@timeline-prefix-cls: ~'@{ant-prefix}-timeline';\n\n.@{timeline-prefix-cls} {\n .reset-component();\n\n margin: 0;\n padding: 0;\n list-style: none;\n\n &-item {\n position: relative;\n margin: 0;\n padding-bottom: @timeline-item-padding-bottom;\n font-size: @font-size-base;\n list-style: none;\n\n &-tail {\n position: absolute;\n top: 10px;\n left: 4px;\n height: calc(100% - 10px);\n border-left: @timeline-width solid @timeline-color;\n }\n\n &-pending &-head {\n font-size: @font-size-sm;\n background-color: transparent;\n }\n\n &-pending &-tail {\n display: none;\n }\n\n &-head {\n position: absolute;\n width: 10px;\n height: 10px;\n background-color: @timeline-dot-bg;\n border: @timeline-dot-border-width solid transparent;\n border-radius: 100px;\n\n &-blue {\n color: @primary-color;\n border-color: @primary-color;\n }\n\n &-red {\n color: @error-color;\n border-color: @error-color;\n }\n\n &-green {\n color: @success-color;\n border-color: @success-color;\n }\n\n &-gray {\n color: @disabled-color;\n border-color: @disabled-color;\n }\n }\n\n &-head-custom {\n position: absolute;\n top: 5.5px;\n left: 5px;\n width: auto;\n height: auto;\n margin-top: 0;\n padding: 3px 1px;\n line-height: 1;\n text-align: center;\n border: 0;\n border-radius: 0;\n transform: translate(-50%, -50%);\n }\n\n &-content {\n position: relative;\n top: -(@font-size-base * @line-height-base - @font-size-base) + 1px;\n margin: 0 0 0 @margin-lg + 2px;\n word-break: break-word;\n }\n\n &-last {\n > .@{timeline-prefix-cls}-item-tail {\n display: none;\n }\n > .@{timeline-prefix-cls}-item-content {\n min-height: 48px;\n }\n }\n }\n\n &.@{timeline-prefix-cls}-alternate,\n &.@{timeline-prefix-cls}-right,\n &.@{timeline-prefix-cls}-label {\n .@{timeline-prefix-cls}-item {\n &-tail,\n &-head,\n &-head-custom {\n left: 50%;\n }\n\n &-head {\n margin-left: -4px;\n\n &-custom {\n margin-left: 1px;\n }\n }\n\n &-left {\n .@{timeline-prefix-cls}-item-content {\n left: calc(50% - 4px);\n width: calc(50% - 14px);\n text-align: left;\n }\n }\n\n &-right {\n .@{timeline-prefix-cls}-item-content {\n width: calc(50% - 12px);\n margin: 0;\n text-align: right;\n }\n }\n }\n }\n\n &.@{timeline-prefix-cls}-right {\n .@{timeline-prefix-cls}-item-right {\n .@{timeline-prefix-cls}-item-tail,\n .@{timeline-prefix-cls}-item-head,\n .@{timeline-prefix-cls}-item-head-custom {\n left: calc(100% - 4px - @timeline-width);\n }\n .@{timeline-prefix-cls}-item-content {\n width: calc(100% - 18px);\n }\n }\n }\n\n &&-pending &-item-last &-item-tail {\n display: block;\n height: calc(100% - 14px);\n border-left: 2px dotted @timeline-color;\n }\n\n &&-reverse &-item-last &-item-tail {\n display: none;\n }\n\n &&-reverse &-item-pending {\n .@{timeline-prefix-cls}-item-tail {\n top: 15px;\n display: block;\n height: calc(100% - 15px);\n border-left: 2px dotted @timeline-color;\n }\n .@{timeline-prefix-cls}-item-content {\n min-height: 48px;\n }\n }\n &.@{timeline-prefix-cls}-label {\n .@{timeline-prefix-cls}-item-label {\n position: absolute;\n top: -(@font-size-base * @line-height-base - @font-size-base) + 1px;\n width: calc(50% - 12px);\n text-align: right;\n }\n .@{timeline-prefix-cls}-item-right {\n .@{timeline-prefix-cls}-item-label {\n left: calc(50% + 14px);\n width: calc(50% - 14px);\n text-align: left;\n }\n }\n }\n}\n\n@import './rtl';\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@timeline-prefix-cls: ~'@{ant-prefix}-timeline';\n\n.@{timeline-prefix-cls} {\n &-rtl {\n direction: rtl;\n }\n\n &-item {\n &-tail {\n .@{timeline-prefix-cls}-rtl & {\n right: 4px;\n left: auto;\n border-right: @timeline-width solid @timeline-color;\n border-left: none;\n }\n }\n\n &-head-custom {\n .@{timeline-prefix-cls}-rtl & {\n right: 5px;\n left: auto;\n transform: translate(50%, -50%);\n }\n }\n\n &-content {\n .@{timeline-prefix-cls}-rtl & {\n margin: 0 18px 0 0;\n }\n }\n }\n\n &.@{timeline-prefix-cls}-alternate,\n &.@{timeline-prefix-cls}-right,\n &.@{timeline-prefix-cls}-label {\n .@{timeline-prefix-cls}-item {\n &-tail,\n &-head,\n &-head-custom {\n .@{timeline-prefix-cls}-rtl& {\n right: 50%;\n left: auto;\n }\n }\n\n &-head {\n .@{timeline-prefix-cls}-rtl& {\n margin-right: -4px;\n margin-left: 0;\n }\n\n &-custom {\n .@{timeline-prefix-cls}-rtl& {\n margin-right: 1px;\n margin-left: 0;\n }\n }\n }\n\n &-left {\n .@{timeline-prefix-cls}-item-content {\n .@{timeline-prefix-cls}-rtl& {\n right: calc(50% - 4px);\n left: auto;\n text-align: right;\n }\n }\n }\n\n &-right {\n .@{timeline-prefix-cls}-item-content {\n .@{timeline-prefix-cls}-rtl& {\n text-align: left;\n }\n }\n }\n }\n }\n\n &.@{timeline-prefix-cls}-right {\n .@{timeline-prefix-cls}-item-right {\n .@{timeline-prefix-cls}-item-tail,\n .@{timeline-prefix-cls}-item-head,\n .@{timeline-prefix-cls}-item-head-custom {\n .@{timeline-prefix-cls}-rtl& {\n right: 0;\n left: auto;\n }\n }\n\n .@{timeline-prefix-cls}-item-content {\n .@{timeline-prefix-cls}-rtl& {\n width: 100%;\n margin-right: 18px;\n text-align: right;\n }\n }\n }\n }\n\n &&-pending &-item-last &-item-tail {\n .@{timeline-prefix-cls}-rtl& {\n border-right: 2px dotted @timeline-color;\n border-left: none;\n }\n }\n\n &&-reverse &-item-pending {\n .@{timeline-prefix-cls}-item-tail {\n .@{timeline-prefix-cls}-rtl& {\n border-right: 2px dotted @timeline-color;\n border-left: none;\n }\n }\n }\n\n &.@{timeline-prefix-cls}-label {\n .@{timeline-prefix-cls}-item-label {\n .@{timeline-prefix-cls}-rtl& {\n text-align: left;\n }\n }\n .@{timeline-prefix-cls}-item-right {\n .@{timeline-prefix-cls}-item-label {\n .@{timeline-prefix-cls}-rtl& {\n right: calc(50% + 14px);\n text-align: right;\n }\n }\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@tooltip-prefix-cls: ~'@{ant-prefix}-tooltip';\n\n@tooltip-arrow-shadow-width: 3px;\n\n@tooltip-arrow-rotate-width: sqrt(@tooltip-arrow-width * @tooltip-arrow-width * 2) +\n @tooltip-arrow-shadow-width * 2;\n\n@tooltip-arrow-offset-vertical: 5px; // 8 - 3px\n@tooltip-arrow-offset-horizontal: 13px; // 16 - 3px\n\n// Base class\n.@{tooltip-prefix-cls} {\n .reset-component();\n\n position: absolute;\n z-index: @zindex-tooltip;\n display: block;\n width: max-content;\n width: intrinsic;\n max-width: @tooltip-max-width;\n visibility: visible;\n\n &-content {\n position: relative;\n }\n\n &-hidden {\n display: none;\n }\n\n &-placement-top,\n &-placement-topLeft,\n &-placement-topRight {\n padding-bottom: @tooltip-distance;\n }\n\n &-placement-right,\n &-placement-rightTop,\n &-placement-rightBottom {\n padding-left: @tooltip-distance;\n }\n\n &-placement-bottom,\n &-placement-bottomLeft,\n &-placement-bottomRight {\n padding-top: @tooltip-distance;\n }\n\n &-placement-left,\n &-placement-leftTop,\n &-placement-leftBottom {\n padding-right: @tooltip-distance;\n }\n\n // Wrapper for the tooltip content\n &-inner {\n min-width: 30px;\n min-height: 32px;\n padding: 6px 8px;\n color: @tooltip-color;\n text-align: left;\n text-decoration: none;\n word-wrap: break-word;\n background-color: @tooltip-bg;\n border-radius: @border-radius-base;\n box-shadow: @box-shadow-base;\n }\n\n // Arrows\n &-arrow {\n position: absolute;\n z-index: 2;\n display: block;\n width: @tooltip-arrow-rotate-width;\n height: @tooltip-arrow-rotate-width;\n overflow: hidden;\n background: transparent;\n pointer-events: none;\n\n &-content {\n // Use linear gradient to mix box shadow of tooltip inner\n --antd-arrow-background-color: linear-gradient(\n to right bottom,\n fadeout(@tooltip-bg, 10%),\n @tooltip-bg\n );\n\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n display: block;\n width: @tooltip-arrow-width;\n height: @tooltip-arrow-width;\n margin: auto;\n content: '';\n pointer-events: auto;\n .roundedArrow(@tooltip-arrow-width, 5px);\n }\n }\n\n &-placement-top &-arrow,\n &-placement-topLeft &-arrow,\n &-placement-topRight &-arrow {\n bottom: 0;\n transform: translateY(100%);\n\n &-content {\n box-shadow: @tooltip-arrow-shadow-width @tooltip-arrow-shadow-width 7px fade(@black, 7%);\n transform: translateY((-@tooltip-arrow-rotate-width / 2)) rotate(45deg);\n }\n }\n\n &-placement-top &-arrow {\n left: 50%;\n transform: translateY(100%) translateX(-50%);\n }\n\n &-placement-topLeft &-arrow {\n left: @tooltip-arrow-offset-horizontal;\n }\n\n &-placement-topRight &-arrow {\n right: @tooltip-arrow-offset-horizontal;\n }\n\n &-placement-right &-arrow,\n &-placement-rightTop &-arrow,\n &-placement-rightBottom &-arrow {\n left: 0;\n transform: translateX(-100%);\n\n &-content {\n box-shadow: -@tooltip-arrow-shadow-width @tooltip-arrow-shadow-width 7px fade(@black, 7%);\n transform: translateX((@tooltip-arrow-rotate-width / 2)) rotate(135deg);\n }\n }\n\n &-placement-right &-arrow {\n top: 50%;\n transform: translateX(-100%) translateY(-50%);\n }\n\n &-placement-rightTop &-arrow {\n top: @tooltip-arrow-offset-vertical;\n }\n\n &-placement-rightBottom &-arrow {\n bottom: @tooltip-arrow-offset-vertical;\n }\n\n &-placement-left &-arrow,\n &-placement-leftTop &-arrow,\n &-placement-leftBottom &-arrow {\n right: 0;\n transform: translateX(100%);\n\n &-content {\n box-shadow: @tooltip-arrow-shadow-width -@tooltip-arrow-shadow-width 7px fade(@black, 7%);\n transform: translateX((-@tooltip-arrow-rotate-width / 2)) rotate(315deg);\n }\n }\n\n &-placement-left &-arrow {\n top: 50%;\n transform: translateX(100%) translateY(-50%);\n }\n\n &-placement-leftTop &-arrow {\n top: @tooltip-arrow-offset-vertical;\n }\n\n &-placement-leftBottom &-arrow {\n bottom: @tooltip-arrow-offset-vertical;\n }\n\n &-placement-bottom &-arrow,\n &-placement-bottomLeft &-arrow,\n &-placement-bottomRight &-arrow {\n top: 0;\n transform: translateY(-100%);\n\n &-content {\n box-shadow: -@tooltip-arrow-shadow-width -@tooltip-arrow-shadow-width 7px fade(@black, 7%);\n transform: translateY((@tooltip-arrow-rotate-width / 2)) rotate(225deg);\n }\n }\n\n &-placement-bottom &-arrow {\n left: 50%;\n transform: translateY(-100%) translateX(-50%);\n }\n\n &-placement-bottomLeft &-arrow {\n left: @tooltip-arrow-offset-horizontal;\n }\n\n &-placement-bottomRight &-arrow {\n right: @tooltip-arrow-offset-horizontal;\n }\n}\n\n.generator-tooltip-preset-color(@i: length(@preset-colors)) when (@i > 0) {\n .generator-tooltip-preset-color(@i - 1);\n @color: extract(@preset-colors, @i);\n @lightColor: '@{color}-6';\n .@{tooltip-prefix-cls}-@{color} {\n .@{tooltip-prefix-cls}-inner {\n background-color: @@lightColor;\n }\n .@{tooltip-prefix-cls}-arrow {\n &-content::before {\n background: @@lightColor;\n }\n }\n }\n}\n.generator-tooltip-preset-color();\n\n@import './rtl';\n","@tooltip-prefix-cls: ~'@{ant-prefix}-tooltip';\n\n// Base class\n.@{tooltip-prefix-cls} {\n &-rtl {\n direction: rtl;\n }\n // Wrapper for the tooltip content\n &-inner {\n .@{tooltip-prefix-cls}-rtl & {\n text-align: right;\n }\n }\n}\n","@import '../../style/themes/index';\n\n@transfer-prefix-cls: ~'@{ant-prefix}-transfer';\n\n@table-prefix-cls: ~'@{ant-prefix}-table';\n@input-prefix-cls: ~'@{ant-prefix}-input';\n\n.@{transfer-prefix-cls}-customize-list {\n .@{transfer-prefix-cls}-list {\n flex: 1 1 50%;\n width: auto;\n height: auto;\n min-height: @transfer-list-height;\n }\n\n // =================== Hook Components ===================\n .@{table-prefix-cls}-wrapper {\n .@{table-prefix-cls}-small {\n border: 0;\n border-radius: 0;\n\n .@{table-prefix-cls}-selection-column {\n width: 40px;\n min-width: 40px;\n }\n\n > .@{table-prefix-cls}-content {\n // Header background color\n > .@{table-prefix-cls}-body > table > .@{table-prefix-cls}-thead > tr > th {\n background: @table-header-bg;\n }\n\n .@{table-prefix-cls}-row:last-child td {\n border-bottom: @border-width-base @border-style-base @border-color-split;\n }\n }\n\n .@{table-prefix-cls}-body {\n margin: 0;\n }\n }\n\n .@{table-prefix-cls}-pagination.@{ant-prefix}-pagination {\n margin: 16px 0 4px;\n }\n }\n .@{input-prefix-cls} {\n &[disabled] {\n background-color: transparent;\n }\n }\n}\n","@import '../../input/style/mixin';\n\n@transfer-prefix-cls: ~'@{ant-prefix}-transfer';\n\n.transfer-status-color(@color) {\n .@{transfer-prefix-cls}-list {\n border-color: @color;\n\n &-search:not([disabled]) {\n border-color: @input-border-color;\n\n &:hover {\n .hover();\n }\n\n &:focus {\n .active();\n }\n }\n }\n}\n\n.@{transfer-prefix-cls} {\n &-status-error {\n .transfer-status-color(@error-color);\n }\n\n &-status-warning {\n .transfer-status-color(@warning-color);\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n@import '../../checkbox/style/mixin';\n@import './customize';\n@import './status';\n\n@transfer-prefix-cls: ~'@{ant-prefix}-transfer';\n\n@transfer-header-vertical-padding: ceil(\n ((@transfer-header-height - 1px - @font-size-base * @line-height-base) / 2)\n);\n\n.@{transfer-prefix-cls} {\n .reset-component();\n\n position: relative;\n display: flex;\n align-items: stretch;\n\n &-disabled {\n .@{transfer-prefix-cls}-list {\n background: @transfer-disabled-bg;\n }\n }\n\n &-list {\n display: flex;\n flex-direction: column;\n width: 180px;\n height: @transfer-list-height;\n border: @border-width-base @border-style-base @border-color-base;\n border-radius: @border-radius-base;\n\n &-with-pagination {\n width: 250px;\n height: auto;\n }\n\n &-search {\n .anticon-search {\n color: @disabled-color;\n }\n }\n\n &-header {\n display: flex;\n flex: none;\n align-items: center;\n height: @transfer-header-height;\n // border-top is on the transfer dom. We should minus 1px for this\n padding: (@transfer-header-vertical-padding - 1px) @control-padding-horizontal\n @transfer-header-vertical-padding;\n color: @text-color;\n background: @component-background;\n border-bottom: @border-width-base @border-style-base @border-color-split;\n border-radius: @border-radius-base @border-radius-base 0 0;\n\n > *:not(:last-child) {\n margin-right: 4px;\n }\n\n > * {\n flex: none;\n }\n\n &-title {\n flex: auto;\n overflow: hidden;\n white-space: nowrap;\n text-align: right;\n text-overflow: ellipsis;\n }\n\n &-dropdown {\n font-size: 10px;\n transform: translateY(10%);\n cursor: pointer;\n\n &[disabled] {\n cursor: not-allowed;\n }\n }\n }\n\n &-body {\n display: flex;\n flex: auto;\n flex-direction: column;\n overflow: hidden;\n font-size: @font-size-base;\n\n &-search-wrapper {\n position: relative;\n flex: none;\n padding: @padding-sm;\n }\n }\n\n &-content {\n flex: auto;\n margin: 0;\n padding: 0;\n overflow: auto;\n list-style: none;\n\n &-item {\n display: flex;\n align-items: center;\n min-height: @transfer-item-height;\n padding: @transfer-item-padding-vertical @control-padding-horizontal;\n line-height: @transfer-item-height - 2 * @transfer-item-padding-vertical;\n transition: all 0.3s;\n\n > *:not(:last-child) {\n margin-right: 8px;\n }\n\n > * {\n flex: none;\n }\n\n &-text {\n flex: auto;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n\n &-remove {\n position: relative;\n color: @border-color-base;\n cursor: pointer;\n transition: all 0.3s;\n\n &:hover {\n color: @link-hover-color;\n }\n\n &::after {\n position: absolute;\n top: -@transfer-item-padding-vertical;\n right: -50%;\n bottom: -@transfer-item-padding-vertical;\n left: -50%;\n content: '';\n }\n }\n }\n\n &-item:not(&-item-disabled) {\n &:hover {\n background-color: @transfer-item-hover-bg;\n cursor: pointer;\n }\n\n &.@{transfer-prefix-cls}-list-content-item-checked:hover {\n background-color: @transfer-item-selected-hover-bg;\n }\n }\n\n // Do not change hover style when `oneWay` mode\n &-show-remove &-item:not(&-item-disabled):hover {\n background: transparent;\n cursor: default;\n }\n\n &-item-checked {\n background-color: @item-active-bg;\n }\n\n &-item-disabled {\n color: @btn-disable-color;\n cursor: not-allowed;\n }\n }\n\n &-pagination {\n padding: @padding-xs 0;\n text-align: right;\n border-top: @border-width-base @border-style-base @border-color-split;\n }\n\n &-body-not-found {\n flex: none;\n width: 100%;\n margin: auto 0;\n color: @disabled-color;\n text-align: center;\n }\n\n &-footer {\n border-top: @border-width-base @border-style-base @border-color-split;\n }\n }\n\n &-operation {\n display: flex;\n flex: none;\n flex-direction: column;\n align-self: center;\n margin: 0 8px;\n vertical-align: middle;\n\n .@{ant-prefix}-btn {\n display: block;\n\n &:first-child {\n margin-bottom: 4px;\n }\n\n .@{iconfont-css-prefix} {\n font-size: 12px;\n }\n }\n }\n\n .@{ant-prefix}-empty-image {\n max-height: (@transfer-header-height / 2) - 22;\n }\n}\n\n@import './rtl';\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n@import '../../checkbox/style/mixin';\n\n@transfer-prefix-cls: ~'@{ant-prefix}-transfer';\n\n.@{transfer-prefix-cls} {\n &-rtl {\n direction: rtl;\n }\n\n &-list {\n &-search {\n .@{transfer-prefix-cls}-rtl & {\n padding-right: @control-padding-horizontal-sm;\n padding-left: 24px;\n }\n\n &-action {\n .@{transfer-prefix-cls}-rtl & {\n right: auto;\n left: 12px;\n }\n }\n }\n\n &-header {\n > *:not(:last-child) {\n .@{transfer-prefix-cls}-rtl & {\n margin-right: 0;\n margin-left: 4px;\n }\n }\n\n .@{transfer-prefix-cls}-rtl & {\n right: 0;\n left: auto;\n }\n\n &-title {\n .@{transfer-prefix-cls}-rtl & {\n text-align: left;\n }\n }\n }\n\n &-content {\n &-item {\n > *:not(:last-child) {\n .@{transfer-prefix-cls}-rtl & {\n margin-right: 0;\n margin-left: 8px;\n }\n }\n }\n }\n\n &-pagination {\n .@{transfer-prefix-cls}-rtl & {\n text-align: left;\n }\n }\n\n &-footer {\n .@{transfer-prefix-cls}-rtl & {\n right: 0;\n left: auto;\n }\n }\n }\n}\n","@import '../../style/mixins/index';\n\n@tree-prefix-cls: ~'@{ant-prefix}-tree';\n@select-tree-prefix-cls: ~'@{ant-prefix}-select-tree';\n@tree-motion: ~'@{ant-prefix}-motion-collapse';\n@tree-node-padding: (@padding-xs / 2);\n// @deprecated: kept for customization usages, recommend using @tree-node-highlight-color instead.\n@tree-node-hightlight-color: inherit;\n@tree-node-highlight-color: @tree-node-hightlight-color;\n\n.antTreeSwitcherIcon(@type: 'tree-default-open-icon') {\n .@{tree-prefix-cls}-switcher-icon,\n .@{select-tree-prefix-cls}-switcher-icon {\n display: inline-block;\n font-size: 10px;\n vertical-align: baseline;\n\n svg {\n transition: transform 0.3s;\n }\n }\n}\n\n.drop-indicator() {\n .@{tree-prefix-cls}-drop-indicator {\n position: absolute;\n // it should displayed over the following node\n z-index: 1;\n height: 2px;\n background-color: @primary-color;\n border-radius: 1px;\n pointer-events: none;\n\n &::after {\n position: absolute;\n top: -3px;\n left: -6px;\n width: 8px;\n height: 8px;\n background-color: transparent;\n border: 2px solid @primary-color;\n border-radius: 50%;\n content: '';\n }\n }\n}\n\n.antTreeFn(@custom-tree-prefix-cls) {\n @custom-tree-node-prefix-cls: ~'@{custom-tree-prefix-cls}-treenode';\n .reset-component();\n background: @tree-bg;\n border-radius: @border-radius-base;\n transition: background-color 0.3s;\n\n &-focused:not(:hover):not(&-active-focused) {\n background: @primary-1;\n }\n\n // =================== Virtual List ===================\n &-list-holder-inner {\n align-items: flex-start;\n }\n\n &.@{custom-tree-prefix-cls}-block-node {\n .@{custom-tree-prefix-cls}-list-holder-inner {\n align-items: stretch;\n\n // >>> Title\n .@{custom-tree-prefix-cls}-node-content-wrapper {\n flex: auto;\n }\n\n // >>> Drag\n .@{custom-tree-node-prefix-cls}.dragging {\n position: relative;\n\n &::after {\n position: absolute;\n top: 0;\n right: 0;\n bottom: @tree-node-padding;\n left: 0;\n border: 1px solid @primary-color;\n opacity: 0;\n animation: ant-tree-node-fx-do-not-use 0.3s;\n animation-play-state: running;\n animation-fill-mode: forwards;\n content: '';\n pointer-events: none;\n }\n }\n }\n }\n\n // ===================== TreeNode =====================\n .@{custom-tree-node-prefix-cls} {\n display: flex;\n align-items: flex-start;\n padding: 0 0 @tree-node-padding 0;\n outline: none;\n // Disabled\n &-disabled {\n // >>> Title\n .@{custom-tree-prefix-cls}-node-content-wrapper {\n color: @disabled-color;\n cursor: not-allowed;\n\n &:hover {\n background: transparent;\n }\n }\n }\n\n &-active .@{custom-tree-prefix-cls}-node-content-wrapper {\n background: @tree-node-hover-bg;\n }\n\n &:not(&-disabled).filter-node .@{custom-tree-prefix-cls}-title {\n color: @tree-node-highlight-color;\n font-weight: 500;\n }\n\n &-draggable {\n .@{custom-tree-prefix-cls}-draggable-icon {\n width: @tree-title-height;\n line-height: @tree-title-height;\n text-align: center;\n visibility: visible;\n opacity: 0.2;\n transition: opacity @animation-duration-slow;\n\n .@{custom-tree-node-prefix-cls}:hover & {\n opacity: 0.45;\n }\n }\n\n &.@{custom-tree-node-prefix-cls}-disabled {\n .@{custom-tree-prefix-cls}-draggable-icon {\n visibility: hidden;\n }\n }\n }\n }\n\n // >>> Indent\n &-indent {\n align-self: stretch;\n white-space: nowrap;\n user-select: none;\n\n &-unit {\n display: inline-block;\n width: @tree-title-height;\n }\n }\n\n // >>> Drag Handler\n &-draggable-icon {\n visibility: hidden;\n }\n\n // >>> Switcher\n &-switcher {\n .antTreeSwitcherIcon();\n position: relative;\n flex: none;\n align-self: stretch;\n width: @tree-title-height;\n margin: 0;\n line-height: @tree-title-height;\n text-align: center;\n cursor: pointer;\n user-select: none;\n\n &-noop {\n cursor: default;\n }\n\n &_close {\n .@{custom-tree-prefix-cls}-switcher-icon {\n svg {\n transform: rotate(-90deg);\n }\n }\n }\n\n &-loading-icon {\n color: @primary-color;\n }\n\n &-leaf-line {\n position: relative;\n z-index: 1;\n display: inline-block;\n width: 100%;\n height: 100%;\n // https://github.com/ant-design/ant-design/issues/31884\n &::before {\n position: absolute;\n top: 0;\n right: 12px;\n bottom: -@tree-node-padding;\n margin-left: -1px;\n border-right: 1px solid @normal-color;\n content: ' ';\n }\n\n &::after {\n position: absolute;\n width: @tree-title-height - 14px;\n height: @tree-title-height - 10px;\n border-bottom: 1px solid @normal-color;\n content: ' ';\n }\n }\n }\n\n // >>> Checkbox\n &-checkbox {\n top: initial;\n margin: ((@tree-title-height - @checkbox-size) / 2) 8px 0 0;\n }\n\n // >>> Title\n & &-node-content-wrapper {\n position: relative;\n z-index: auto;\n min-height: @tree-title-height;\n margin: 0;\n padding: 0 4px;\n color: inherit;\n line-height: @tree-title-height;\n background: transparent;\n border-radius: @border-radius-base;\n cursor: pointer;\n transition: all 0.3s, border 0s, line-height 0s, box-shadow 0s;\n\n &:hover {\n background-color: @tree-node-hover-bg;\n }\n\n &.@{custom-tree-prefix-cls}-node-selected {\n background-color: @tree-node-selected-bg;\n }\n\n // Icon\n .@{custom-tree-prefix-cls}-iconEle {\n display: inline-block;\n width: @tree-title-height;\n height: @tree-title-height;\n line-height: @tree-title-height;\n text-align: center;\n vertical-align: top;\n\n &:empty {\n display: none;\n }\n }\n }\n\n // https://github.com/ant-design/ant-design/issues/28217\n &-unselectable &-node-content-wrapper:hover {\n background-color: transparent;\n }\n\n // ==================== Draggable =====================\n &-node-content-wrapper {\n line-height: @tree-title-height;\n user-select: none;\n\n .drop-indicator();\n }\n\n .@{custom-tree-node-prefix-cls}.drop-container {\n > [draggable] {\n box-shadow: 0 0 0 2px @primary-color;\n }\n }\n\n // ==================== Show Line =====================\n &-show-line {\n // ================ Indent lines ================\n .@{custom-tree-prefix-cls}-indent {\n &-unit {\n position: relative;\n height: 100%;\n\n &::before {\n position: absolute;\n top: 0;\n right: (@tree-title-height / 2);\n bottom: -@tree-node-padding;\n border-right: 1px solid @border-color-base;\n content: '';\n }\n\n &-end {\n &::before {\n display: none;\n }\n }\n }\n }\n\n // ============== Cover Background ==============\n .@{custom-tree-prefix-cls}-switcher {\n background: @component-background;\n\n &-line-icon {\n // https://github.com/ant-design/ant-design/issues/32813\n vertical-align: -0.15em;\n }\n }\n }\n\n .@{custom-tree-node-prefix-cls}-leaf-last {\n .@{custom-tree-prefix-cls}-switcher {\n &-leaf-line {\n &::before {\n top: auto !important;\n bottom: auto !important;\n height: @tree-title-height - 10px !important;\n }\n }\n }\n }\n}\n\n@keyframes ant-tree-node-fx-do-not-use {\n 0% {\n opacity: 0;\n }\n\n 100% {\n opacity: 1;\n }\n}\n","@import '../../style/themes/index';\n\n@tree-prefix-cls: ~'@{ant-prefix}-tree';\n\n.@{tree-prefix-cls}.@{tree-prefix-cls}-directory {\n // ================== TreeNode ==================\n .@{tree-prefix-cls}-treenode {\n position: relative;\n\n // Hover color\n &::before {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 4px;\n left: 0;\n transition: background-color 0.3s;\n content: '';\n pointer-events: none;\n }\n\n &:hover {\n &::before {\n background: @item-hover-bg;\n }\n }\n\n // Elements\n > * {\n z-index: 1;\n }\n\n // >>> Switcher\n .@{tree-prefix-cls}-switcher {\n transition: color 0.3s;\n }\n\n // >>> Title\n .@{tree-prefix-cls}-node-content-wrapper {\n border-radius: 0;\n user-select: none;\n\n &:hover {\n background: transparent;\n }\n\n &.@{tree-prefix-cls}-node-selected {\n color: @tree-directory-selected-color;\n background: transparent;\n }\n }\n\n // ============= Selected =============\n &-selected {\n &:hover::before,\n &::before {\n background: @tree-directory-selected-bg;\n }\n\n // >>> Switcher\n .@{tree-prefix-cls}-switcher {\n color: @tree-directory-selected-color;\n }\n\n // >>> Title\n .@{tree-prefix-cls}-node-content-wrapper {\n color: @tree-directory-selected-color;\n background: transparent;\n }\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n@import '../../checkbox/style/mixin';\n\n@tree-prefix-cls: ~'@{ant-prefix}-tree';\n@select-tree-prefix-cls: ~'@{ant-prefix}-select-tree';\n@tree-node-prefix-cls: ~'@{tree-prefix-cls}-treenode';\n\n.@{tree-prefix-cls} {\n &-rtl {\n direction: rtl;\n .@{tree-prefix-cls}-node-content-wrapper[draggable='true'] {\n .@{tree-prefix-cls}-drop-indicator {\n &::after {\n right: -6px;\n left: unset;\n }\n }\n }\n }\n\n // ===================== TreeNode =====================\n .@{tree-node-prefix-cls} {\n &-rtl {\n direction: rtl;\n }\n }\n\n // >>> Switcher\n &-switcher {\n &_close {\n .@{tree-prefix-cls}-switcher-icon {\n svg {\n .@{tree-prefix-cls}-rtl & {\n transform: rotate(90deg);\n }\n }\n }\n }\n }\n // ==================== Show Line =====================\n &-show-line {\n // ================ Indent lines ================\n .@{tree-prefix-cls}-indent {\n &-unit {\n &::before {\n .@{tree-prefix-cls}-rtl& {\n right: auto;\n left: -(@tree-title-height / 2) - 1px;\n border-right: none;\n border-left: 1px solid @border-color-base;\n }\n }\n }\n }\n }\n // >>> Checkbox\n &-checkbox {\n .@{tree-prefix-cls}-rtl & {\n margin: ((@tree-title-height - @checkbox-size) / 2) 0 0 8px;\n }\n }\n}\n\n.@{select-tree-prefix-cls} {\n // >>> Checkbox\n &-checkbox {\n .@{tree-prefix-cls}-select-dropdown-rtl & {\n margin: ((@tree-title-height - @checkbox-size) / 2) 0 0 8px;\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n@import '../../tree/style/mixin';\n@import '../../checkbox/style/mixin';\n\n@tree-select-prefix-cls: ~'@{ant-prefix}-tree-select';\n@select-tree-prefix-cls: ~'@{ant-prefix}-select-tree';\n\n.antCheckboxFn(@checkbox-prefix-cls: ~'@{select-tree-prefix-cls}-checkbox');\n\n.@{tree-select-prefix-cls} {\n // ======================= Dropdown =======================\n &-dropdown {\n padding: @padding-xs (@padding-xs / 2);\n\n &-rtl {\n direction: rtl;\n }\n // ======================== Tree ========================\n .@{select-tree-prefix-cls} {\n border-radius: 0;\n\n &-list-holder-inner {\n align-items: stretch;\n\n .@{select-tree-prefix-cls}-treenode {\n .@{select-tree-prefix-cls}-node-content-wrapper {\n flex: auto;\n }\n }\n }\n }\n }\n}\n\n.@{select-tree-prefix-cls} {\n .antTreeFn(@select-tree-prefix-cls);\n\n // change switcher icon rotation in rtl direction\n & &-switcher {\n &_close {\n .@{select-tree-prefix-cls}-switcher-icon {\n svg {\n .@{tree-select-prefix-cls}-dropdown-rtl & {\n transform: rotate(90deg);\n }\n }\n }\n }\n\n &-loading-icon {\n .@{tree-select-prefix-cls}-dropdown-rtl & {\n transform: scaleY(-1);\n }\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@typography-prefix-cls: ~'@{ant-prefix}-typography';\n\n// =============== Basic ===============\n.@{typography-prefix-cls} {\n color: @text-color;\n overflow-wrap: break-word;\n\n &&-secondary {\n color: @text-color-secondary;\n }\n\n &&-success {\n color: @success-color;\n }\n\n &&-warning {\n color: @warning-color;\n }\n\n &&-danger {\n color: @error-color;\n\n a&:active,\n a&:focus {\n color: @error-color-active;\n }\n\n a&:hover {\n color: @error-color-hover;\n }\n }\n\n &&-disabled {\n color: @disabled-color;\n cursor: not-allowed;\n user-select: none;\n }\n\n // Tag\n div&,\n p {\n .typography-paragraph();\n }\n\n h1&,\n div&-h1,\n div&-h1 > textarea,\n h1 {\n .typography-title-1();\n }\n\n h2&,\n div&-h2,\n div&-h2 > textarea,\n h2 {\n .typography-title-2();\n }\n\n h3&,\n div&-h3,\n div&-h3 > textarea,\n h3 {\n .typography-title-3();\n }\n\n h4&,\n div&-h4,\n div&-h4 > textarea,\n h4 {\n .typography-title-4();\n }\n\n h5&,\n div&-h5,\n div&-h5 > textarea,\n h5 {\n .typography-title-5();\n }\n\n h1&,\n h2&,\n h3&,\n h4&,\n h5& {\n .@{typography-prefix-cls} + & {\n margin-top: @typography-title-margin-top;\n }\n }\n\n div,\n ul,\n li,\n p,\n h1,\n h2,\n h3,\n h4,\n h5 {\n + h1,\n + h2,\n + h3,\n + h4,\n + h5 {\n margin-top: @typography-title-margin-top;\n }\n }\n\n a&-ellipsis,\n span&-ellipsis {\n display: inline-block;\n max-width: 100%;\n }\n\n a&,\n a {\n .operation-unit();\n text-decoration: @link-decoration;\n\n &:active,\n &:hover {\n text-decoration: @link-hover-decoration;\n }\n\n &[disabled],\n &.@{typography-prefix-cls}-disabled {\n color: @disabled-color;\n cursor: not-allowed;\n\n &:active,\n &:hover {\n color: @disabled-color;\n }\n\n &:active {\n pointer-events: none;\n }\n }\n }\n\n code {\n margin: 0 0.2em;\n padding: 0.2em 0.4em 0.1em;\n font-size: 85%;\n background: rgba(150, 150, 150, 0.1);\n border: 1px solid rgba(100, 100, 100, 0.2);\n border-radius: 3px;\n }\n\n kbd {\n margin: 0 0.2em;\n padding: 0.15em 0.4em 0.1em;\n font-size: 90%;\n background: rgba(150, 150, 150, 0.06);\n border: 1px solid rgba(100, 100, 100, 0.2);\n border-bottom-width: 2px;\n border-radius: 3px;\n }\n\n mark {\n padding: 0;\n background-color: @gold-3;\n }\n\n u,\n ins {\n text-decoration: underline;\n text-decoration-skip-ink: auto;\n }\n\n s,\n del {\n text-decoration: line-through;\n }\n\n strong {\n font-weight: 600;\n }\n\n // Operation\n &-expand,\n &-edit,\n &-copy {\n .operation-unit();\n\n margin-left: 4px;\n }\n\n &-copy-success {\n &,\n &:hover,\n &:focus {\n color: @success-color;\n }\n }\n\n // Text input area\n &-edit-content {\n position: relative;\n\n div& {\n left: -@input-padding-horizontal - 1px;\n margin-top: -@input-padding-vertical-base - 1px;\n margin-bottom: calc(1em - @input-padding-vertical-base - 1px);\n }\n\n &-confirm {\n position: absolute;\n right: 10px;\n bottom: 8px;\n color: @text-color-secondary;\n // default style\n font-weight: normal;\n font-size: @font-size-base;\n font-style: normal;\n pointer-events: none;\n }\n\n // Fix Editable Textarea flash in Firefox\n textarea {\n // https://stackoverflow.com/a/7695964/3040605\n height: 1em;\n margin: 0 !important;\n /* stylelint-disable-next-line property-no-vendor-prefix */\n -moz-transition: none;\n }\n }\n\n // list\n ul,\n ol {\n margin: 0 0 1em;\n padding: 0;\n\n li {\n margin: 0 0 0 20px;\n padding: 0 0 0 4px;\n }\n }\n\n ul {\n list-style-type: circle;\n\n ul {\n list-style-type: disc;\n }\n }\n\n ol {\n list-style-type: decimal;\n }\n\n // pre & block\n pre,\n blockquote {\n margin: 1em 0;\n }\n\n pre {\n padding: 0.4em 0.6em;\n white-space: pre-wrap;\n word-wrap: break-word;\n background: rgba(150, 150, 150, 0.1);\n border: 1px solid rgba(100, 100, 100, 0.2);\n border-radius: 3px;\n\n // Compatible for marked\n code {\n display: inline;\n margin: 0;\n padding: 0;\n font-size: inherit;\n font-family: inherit;\n background: transparent;\n border: 0;\n }\n }\n\n blockquote {\n padding: 0 0 0 0.6em;\n border-left: 4px solid rgba(100, 100, 100, 0.2);\n opacity: 0.85;\n }\n\n // ============ Ellipsis ============\n &-single-line {\n white-space: nowrap;\n }\n\n &-ellipsis-single-line {\n overflow: hidden;\n text-overflow: ellipsis;\n\n // https://blog.csdn.net/iefreer/article/details/50421025\n a&,\n span& {\n vertical-align: bottom;\n }\n }\n\n &-ellipsis-multiple-line {\n /* stylelint-disable-next-line value-no-vendor-prefix */\n display: -webkit-box;\n overflow: hidden;\n -webkit-line-clamp: 3;\n\n /*! autoprefixer: ignore next */\n -webkit-box-orient: vertical;\n }\n}\n\n@import './rtl';\n","// =============== Common ===============\n.typography-paragraph() {\n margin-bottom: 1em;\n}\n\n.typography-title(@fontSize; @fontWeight; @lineHeight; @headingColor; @headingMarginBottom;) {\n margin-bottom: @headingMarginBottom;\n color: @headingColor;\n font-weight: @fontWeight;\n font-size: @fontSize;\n line-height: @lineHeight;\n}\n\n.typography-title-1() {\n .typography-title(\n @heading-1-size,\n @typography-title-font-weight,\n 1.23,\n @heading-color,\n @typography-title-margin-bottom\n );\n}\n.typography-title-2() {\n .typography-title(\n @heading-2-size,\n @typography-title-font-weight,\n 1.35,\n @heading-color,\n @typography-title-margin-bottom\n );\n}\n.typography-title-3() {\n .typography-title(\n @heading-3-size,\n @typography-title-font-weight,\n 1.35,\n @heading-color,\n @typography-title-margin-bottom\n );\n}\n.typography-title-4() {\n .typography-title(\n @heading-4-size,\n @typography-title-font-weight,\n 1.4,\n @heading-color,\n @typography-title-margin-bottom\n );\n}\n.typography-title-5() {\n .typography-title(\n @heading-5-size,\n @typography-title-font-weight,\n 1.5,\n @heading-color,\n @typography-title-margin-bottom\n );\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@typography-prefix-cls: ~'@{ant-prefix}-typography';\n\n.@{typography-prefix-cls} {\n &-rtl {\n direction: rtl;\n }\n\n // Operation\n &-expand,\n &-edit,\n &-copy {\n .@{typography-prefix-cls}-rtl & {\n margin-right: 4px;\n margin-left: 0;\n }\n }\n\n &-expand {\n .@{typography-prefix-cls}-rtl & {\n float: left;\n }\n }\n\n // Text input area\n &-edit-content {\n div& {\n &.@{typography-prefix-cls}-rtl {\n right: -@input-padding-horizontal - 1px;\n left: auto;\n }\n }\n\n &-confirm {\n .@{typography-prefix-cls}-rtl & {\n right: auto;\n left: 10px;\n }\n }\n }\n\n // list\n ul,\n ol {\n li {\n .@{typography-prefix-cls}-rtl& {\n margin: 0 20px 0 0;\n padding: 0 4px 0 0;\n }\n }\n }\n}\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@upload-prefix-cls: ~'@{ant-prefix}-upload';\n@upload-item: ~'@{ant-prefix}-upload-list-item';\n@upload-picture-card-size: 104px;\n@upload-picture-card-border-style: @border-style-base;\n\n.@{upload-prefix-cls} {\n .reset-component();\n\n outline: 0;\n\n p {\n margin: 0;\n }\n\n &-btn {\n display: block;\n width: 100%;\n outline: none;\n }\n\n input[type='file'] {\n cursor: pointer;\n }\n\n &&-select {\n display: inline-block;\n }\n\n &&-disabled {\n color: @disabled-color;\n cursor: not-allowed;\n }\n\n &&-select-picture-card {\n width: @upload-picture-card-size;\n height: @upload-picture-card-size;\n margin-right: 8px;\n margin-bottom: 8px;\n text-align: center;\n vertical-align: top;\n background-color: @background-color-light;\n border: @border-width-base dashed @border-color-base;\n border-radius: @border-radius-base;\n cursor: pointer;\n transition: border-color 0.3s;\n\n > .@{upload-prefix-cls} {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n text-align: center;\n }\n\n &:hover {\n border-color: @primary-color;\n .@{upload-prefix-cls}-disabled& {\n border-color: @border-color-base;\n }\n }\n }\n\n &&-drag {\n position: relative;\n width: 100%;\n height: 100%;\n text-align: center;\n background: @background-color-light;\n border: @border-width-base dashed @border-color-base;\n border-radius: @border-radius-base;\n cursor: pointer;\n transition: border-color 0.3s;\n\n .@{upload-prefix-cls} {\n padding: @padding-md 0;\n }\n\n &.@{upload-prefix-cls}-drag-hover:not(.@{upload-prefix-cls}-disabled) {\n border-color: @primary-7;\n }\n\n &.@{upload-prefix-cls}-disabled {\n cursor: not-allowed;\n }\n\n .@{upload-prefix-cls}-btn {\n display: table;\n height: 100%;\n }\n\n .@{upload-prefix-cls}-drag-container {\n display: table-cell;\n vertical-align: middle;\n }\n\n &:not(.@{upload-prefix-cls}-disabled):hover {\n border-color: @primary-5;\n }\n\n p.@{upload-prefix-cls}-drag-icon {\n .@{iconfont-css-prefix} {\n color: @primary-5;\n font-size: 48px;\n }\n\n margin-bottom: 20px;\n }\n p.@{upload-prefix-cls}-text {\n margin: 0 0 4px;\n color: @heading-color;\n font-size: @font-size-lg;\n }\n p.@{upload-prefix-cls}-hint {\n color: @text-color-secondary;\n font-size: @font-size-base;\n }\n\n .@{iconfont-css-prefix}-plus {\n color: @disabled-color;\n font-size: 30px;\n transition: all 0.3s;\n\n &:hover {\n color: @text-color-secondary;\n }\n }\n &:hover .@{iconfont-css-prefix}-plus {\n color: @text-color-secondary;\n }\n }\n\n &-picture-card-wrapper {\n .clearfix();\n\n display: inline-block;\n width: 100%;\n }\n}\n\n.@{upload-prefix-cls}-list {\n .reset-component();\n .clearfix();\n line-height: @line-height-base;\n\n // ============================ Item ============================\n &-item {\n position: relative;\n height: @line-height-base * @font-size-base;\n margin-top: @margin-xs;\n font-size: @font-size-base;\n\n &-name {\n display: inline-block;\n width: 100%;\n padding-left: @font-size-base + 8px;\n overflow: hidden;\n line-height: @line-height-base;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n\n &-card-actions {\n position: absolute;\n right: 0;\n\n &-btn {\n opacity: 0;\n }\n\n &-btn.@{ant-prefix}-btn-sm {\n height: @line-height-base * @font-size-base;\n line-height: 1;\n vertical-align: top;\n }\n\n &.picture {\n top: 22px;\n line-height: 0;\n }\n\n &-btn:focus,\n &.picture &-btn {\n opacity: 1;\n }\n\n .@{iconfont-css-prefix} {\n color: @upload-actions-color;\n transition: all 0.3s;\n }\n\n &:hover .@{iconfont-css-prefix} {\n color: @text-color;\n }\n }\n\n &-info {\n height: 100%;\n transition: background-color 0.3s;\n\n > span {\n display: block;\n width: 100%;\n height: 100%;\n }\n\n .@{iconfont-css-prefix}-loading,\n .@{upload-prefix-cls}-text-icon {\n .@{iconfont-css-prefix} {\n position: absolute;\n top: (@font-size-base / 2) - 2px;\n color: @text-color-secondary;\n font-size: @font-size-base;\n }\n }\n }\n\n &:hover &-info {\n background-color: @item-hover-bg;\n }\n\n &:hover &-card-actions-btn {\n opacity: 1;\n }\n\n &-error,\n &-error .@{upload-prefix-cls}-text-icon > .@{iconfont-css-prefix},\n &-error &-name {\n color: @error-color;\n }\n\n &-error &-card-actions {\n .@{iconfont-css-prefix} {\n color: @error-color;\n }\n\n &-btn {\n opacity: 1;\n }\n }\n\n &-progress {\n position: absolute;\n bottom: -12px;\n width: 100%;\n padding-left: @font-size-base + 12px;\n font-size: @font-size-base;\n line-height: 0;\n }\n }\n\n // =================== Picture & Picture Card ===================\n &-picture,\n &-picture-card {\n .@{upload-item} {\n position: relative;\n height: 66px;\n padding: @padding-xs;\n border: @border-width-base @upload-picture-card-border-style @border-color-base;\n border-radius: @border-radius-base;\n\n &:hover {\n background: transparent;\n }\n\n &-error {\n border-color: @error-color;\n }\n }\n\n .@{upload-item}-info {\n padding: 0;\n }\n\n .@{upload-item}:hover .@{upload-item}-info {\n background: transparent;\n }\n\n .@{upload-item}-uploading {\n border-style: dashed;\n }\n\n .@{upload-item}-thumbnail {\n width: 48px;\n height: 48px;\n line-height: 60px;\n text-align: center;\n opacity: 0.8;\n\n .@{iconfont-css-prefix} {\n font-size: 26px;\n }\n }\n\n // Adjust the color of the error icon : https://github.com/ant-design/ant-design/pull/24160\n .@{upload-item}-error .@{upload-item}-thumbnail {\n .@{iconfont-css-prefix} {\n svg path {\n &[fill='#e6f7ff'] {\n fill: @error-color-deprecated-bg;\n }\n\n &[fill='#1890ff'] {\n fill: @error-color;\n }\n }\n }\n }\n\n .@{upload-item}-icon {\n position: absolute;\n top: 50%;\n left: 50%;\n font-size: 26px;\n transform: translate(-50%, -50%);\n\n .@{iconfont-css-prefix} {\n font-size: 26px;\n }\n }\n\n .@{upload-item}-image {\n max-width: 100%;\n }\n\n .@{upload-item}-thumbnail img {\n display: block;\n width: 48px;\n height: 48px;\n overflow: hidden;\n }\n\n .@{upload-item}-name {\n display: inline-block;\n box-sizing: border-box;\n max-width: 100%;\n margin: 0 0 0 8px;\n padding-right: 8px;\n padding-left: 48px;\n overflow: hidden;\n line-height: 44px;\n white-space: nowrap;\n text-overflow: ellipsis;\n transition: all 0.3s;\n }\n\n .@{upload-item}-uploading .@{upload-item}-name {\n margin-bottom: 12px;\n }\n\n .@{upload-item}-progress {\n bottom: 14px;\n width: ~'calc(100% - 24px)';\n margin-top: 0;\n padding-left: 56px;\n }\n }\n\n // ======================== Picture Card ========================\n &-picture-card {\n &-container {\n display: inline-block;\n width: @upload-picture-card-size;\n height: @upload-picture-card-size;\n margin: 0 @margin-xs @margin-xs 0;\n vertical-align: top;\n }\n\n .@{upload-item} {\n height: 100%;\n margin: 0;\n }\n\n .@{upload-item}-info {\n position: relative;\n height: 100%;\n overflow: hidden;\n\n &::before {\n position: absolute;\n z-index: 1;\n width: 100%;\n height: 100%;\n background-color: fade(@black, 50%);\n opacity: 0;\n transition: all 0.3s;\n content: ' ';\n }\n }\n\n .@{upload-item}:hover .@{upload-item}-info::before {\n opacity: 1;\n }\n\n .@{upload-item}-actions {\n position: absolute;\n top: 50%;\n left: 50%;\n z-index: 10;\n white-space: nowrap;\n transform: translate(-50%, -50%);\n opacity: 0;\n transition: all 0.3s;\n\n .@{iconfont-css-prefix}-eye,\n .@{iconfont-css-prefix}-download,\n .@{iconfont-css-prefix}-delete {\n z-index: 10;\n width: 16px;\n margin: 0 4px;\n color: @text-color-dark;\n font-size: 16px;\n cursor: pointer;\n transition: all 0.3s;\n\n &:hover {\n color: @text-color-inverse;\n }\n }\n }\n\n .@{upload-item}-info:hover + .@{upload-item}-actions,\n .@{upload-item}-actions:hover {\n opacity: 1;\n }\n\n .@{upload-item}-thumbnail,\n .@{upload-item}-thumbnail img {\n position: static;\n display: block;\n width: 100%;\n height: 100%;\n object-fit: contain;\n }\n\n .@{upload-item}-name {\n display: none;\n margin: 8px 0 0;\n padding: 0;\n line-height: @line-height-base;\n text-align: center;\n }\n\n .@{upload-item}-file + .@{upload-item}-name {\n position: absolute;\n bottom: 10px;\n display: block;\n }\n\n .@{upload-item}-uploading {\n &.@{upload-item} {\n background-color: @background-color-light;\n }\n\n .@{upload-item}-info {\n height: auto;\n\n &::before,\n .@{iconfont-css-prefix}-eye,\n .@{iconfont-css-prefix}-delete {\n display: none;\n }\n }\n }\n\n .@{upload-item}-progress {\n bottom: 32px;\n width: calc(100% - 14px);\n padding-left: 0;\n }\n }\n\n // ======================= Picture & Text =======================\n &-text,\n &-picture {\n &-container {\n transition: opacity @animation-duration-slow, height @animation-duration-slow;\n\n &::before {\n display: table;\n width: 0;\n height: 0;\n content: '';\n }\n\n // Don't know why span here, just stretch it\n .@{upload-prefix-cls}-span {\n display: block;\n flex: auto;\n }\n }\n\n // text & picture no need this additional element.\n // But it used for picture-card, let's keep it.\n .@{upload-prefix-cls}-span {\n display: flex;\n align-items: center;\n\n > * {\n flex: none;\n }\n }\n\n .@{upload-item}-name {\n flex: auto;\n margin: 0;\n padding: 0 @padding-xs;\n }\n\n .@{upload-item}-card-actions {\n position: static;\n }\n }\n\n // ============================ Text ============================\n &-text {\n .@{upload-prefix-cls}-text-icon {\n .@{iconfont-css-prefix} {\n position: static;\n }\n }\n }\n\n // =========================== Motion ===========================\n .@{upload-prefix-cls}-animate-inline-appear,\n .@{upload-prefix-cls}-animate-inline-enter,\n .@{upload-prefix-cls}-animate-inline-leave {\n animation-duration: @animation-duration-slow;\n animation-timing-function: @ease-in-out-circ;\n animation-fill-mode: forwards;\n }\n\n .@{upload-prefix-cls}-animate-inline-appear,\n .@{upload-prefix-cls}-animate-inline-enter {\n animation-name: uploadAnimateInlineIn;\n }\n\n .@{upload-prefix-cls}-animate-inline-leave {\n animation-name: uploadAnimateInlineOut;\n }\n}\n\n@keyframes uploadAnimateInlineIn {\n from {\n width: 0;\n height: 0;\n margin: 0;\n padding: 0;\n opacity: 0;\n }\n}\n\n@keyframes uploadAnimateInlineOut {\n to {\n width: 0;\n height: 0;\n margin: 0;\n padding: 0;\n opacity: 0;\n }\n}\n\n@import './rtl';\n","@import '../../style/themes/index';\n@import '../../style/mixins/index';\n\n@upload-prefix-cls: ~'@{ant-prefix}-upload';\n@upload-item: ~'@{ant-prefix}-upload-list-item';\n\n.@{upload-prefix-cls} {\n &-rtl {\n direction: rtl;\n }\n\n &&-select-picture-card {\n .@{upload-prefix-cls}-rtl& {\n margin-right: auto;\n margin-left: 8px;\n }\n }\n}\n\n.@{upload-prefix-cls}-list {\n &-rtl {\n direction: rtl;\n }\n\n &-item-list-type-text {\n &:hover {\n .@{upload-prefix-cls}-list-item-name-icon-count-1 {\n .@{upload-prefix-cls}-list-rtl & {\n padding-right: 22px;\n padding-left: 14px;\n }\n }\n .@{upload-prefix-cls}-list-item-name-icon-count-2 {\n .@{upload-prefix-cls}-list-rtl & {\n padding-right: 22px;\n padding-left: 28px;\n }\n }\n }\n }\n\n &-item {\n &-name {\n .@{upload-prefix-cls}-list-rtl & {\n padding-right: @font-size-base + 8px;\n padding-left: 0;\n }\n }\n\n &-name-icon-count-1 {\n .@{upload-prefix-cls}-list-rtl & {\n padding-left: 14px;\n }\n }\n\n &-card-actions {\n .@{upload-prefix-cls}-list-rtl & {\n right: auto;\n left: 0;\n }\n .@{iconfont-css-prefix} {\n .@{upload-prefix-cls}-list-rtl & {\n padding-right: 0;\n padding-left: 5px;\n }\n }\n }\n\n &-info {\n .@{upload-prefix-cls}-list-rtl & {\n padding: 0 4px 0 12px;\n }\n }\n\n &-error &-card-actions {\n .@{iconfont-css-prefix} {\n .@{upload-prefix-cls}-list-rtl & {\n padding-right: 0;\n padding-left: 5px;\n }\n }\n }\n\n &-progress {\n .@{upload-prefix-cls}-list-rtl & {\n padding-right: @font-size-base + 12px;\n padding-left: 0;\n }\n }\n }\n\n &-picture,\n &-picture-card {\n .@{upload-item}-info {\n padding: 0;\n }\n\n .@{upload-item}-thumbnail {\n .@{upload-prefix-cls}-list-rtl& {\n right: 8px;\n left: auto;\n }\n }\n\n .@{upload-item}-icon {\n .@{upload-prefix-cls}-list-rtl& {\n right: 50%;\n left: auto;\n transform: translate(50%, -50%);\n }\n }\n\n .@{upload-item}-name {\n .@{upload-prefix-cls}-list-rtl& {\n margin: 0 8px 0 0;\n padding-right: 48px;\n padding-left: 8px;\n }\n }\n\n .@{upload-item}-name-icon-count-1 {\n .@{upload-prefix-cls}-list-rtl& {\n padding-right: 48px;\n padding-left: 18px;\n }\n }\n\n .@{upload-item}-name-icon-count-2 {\n .@{upload-prefix-cls}-list-rtl& {\n padding-right: 48px;\n padding-left: 36px;\n }\n }\n\n .@{upload-item}-progress {\n .@{upload-prefix-cls}-list-rtl& {\n padding-right: 0;\n padding-left: 0;\n }\n }\n }\n\n &-picture-card {\n &-container {\n .@{upload-prefix-cls}-list-rtl & {\n margin: 0 0 @margin-xs @margin-xs;\n }\n }\n\n .@{upload-item}-actions {\n .@{upload-prefix-cls}-list-rtl& {\n right: 50%;\n left: auto;\n transform: translate(50%, -50%);\n }\n }\n\n .@{upload-item}-file + .@{upload-item}-name {\n .@{upload-prefix-cls}-list-rtl& {\n margin: 8px 0 0;\n padding: 0;\n }\n }\n }\n}\n"],"sourceRoot":""}]);
|
|
|
// Exports
|
|
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/css-loader/dist/runtime/api.js":
|
|
|
/*!*****************************************************!*\
|
|
|
!*** ./node_modules/css-loader/dist/runtime/api.js ***!
|
|
|
\*****************************************************/
|
|
|
/***/ ((module) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
/*
|
|
|
MIT License http://www.opensource.org/licenses/mit-license.php
|
|
|
Author Tobias Koppers @sokra
|
|
|
*/
|
|
|
module.exports = function (cssWithMappingToString) {
|
|
|
var list = []; // return the list of modules as css string
|
|
|
|
|
|
list.toString = function toString() {
|
|
|
return this.map(function (item) {
|
|
|
var content = "";
|
|
|
var needLayer = typeof item[5] !== "undefined";
|
|
|
|
|
|
if (item[4]) {
|
|
|
content += "@supports (".concat(item[4], ") {");
|
|
|
}
|
|
|
|
|
|
if (item[2]) {
|
|
|
content += "@media ".concat(item[2], " {");
|
|
|
}
|
|
|
|
|
|
if (needLayer) {
|
|
|
content += "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {");
|
|
|
}
|
|
|
|
|
|
content += cssWithMappingToString(item);
|
|
|
|
|
|
if (needLayer) {
|
|
|
content += "}";
|
|
|
}
|
|
|
|
|
|
if (item[2]) {
|
|
|
content += "}";
|
|
|
}
|
|
|
|
|
|
if (item[4]) {
|
|
|
content += "}";
|
|
|
}
|
|
|
|
|
|
return content;
|
|
|
}).join("");
|
|
|
}; // import a list of modules into the list
|
|
|
|
|
|
|
|
|
list.i = function i(modules, media, dedupe, supports, layer) {
|
|
|
if (typeof modules === "string") {
|
|
|
modules = [[null, modules, undefined]];
|
|
|
}
|
|
|
|
|
|
var alreadyImportedModules = {};
|
|
|
|
|
|
if (dedupe) {
|
|
|
for (var k = 0; k < this.length; k++) {
|
|
|
var id = this[k][0];
|
|
|
|
|
|
if (id != null) {
|
|
|
alreadyImportedModules[id] = true;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
for (var _k = 0; _k < modules.length; _k++) {
|
|
|
var item = [].concat(modules[_k]);
|
|
|
|
|
|
if (dedupe && alreadyImportedModules[item[0]]) {
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
if (typeof layer !== "undefined") {
|
|
|
if (typeof item[5] === "undefined") {
|
|
|
item[5] = layer;
|
|
|
} else {
|
|
|
item[1] = "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {").concat(item[1], "}");
|
|
|
item[5] = layer;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (media) {
|
|
|
if (!item[2]) {
|
|
|
item[2] = media;
|
|
|
} else {
|
|
|
item[1] = "@media ".concat(item[2], " {").concat(item[1], "}");
|
|
|
item[2] = media;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (supports) {
|
|
|
if (!item[4]) {
|
|
|
item[4] = "".concat(supports);
|
|
|
} else {
|
|
|
item[1] = "@supports (".concat(item[4], ") {").concat(item[1], "}");
|
|
|
item[4] = supports;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
list.push(item);
|
|
|
}
|
|
|
};
|
|
|
|
|
|
return list;
|
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/css-loader/dist/runtime/getUrl.js":
|
|
|
/*!********************************************************!*\
|
|
|
!*** ./node_modules/css-loader/dist/runtime/getUrl.js ***!
|
|
|
\********************************************************/
|
|
|
/***/ ((module) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
module.exports = function (url, options) {
|
|
|
if (!options) {
|
|
|
options = {};
|
|
|
}
|
|
|
|
|
|
if (!url) {
|
|
|
return url;
|
|
|
}
|
|
|
|
|
|
url = String(url.__esModule ? url.default : url); // If url is already wrapped in quotes, remove them
|
|
|
|
|
|
if (/^['"].*['"]$/.test(url)) {
|
|
|
url = url.slice(1, -1);
|
|
|
}
|
|
|
|
|
|
if (options.hash) {
|
|
|
url += options.hash;
|
|
|
} // Should url be wrapped?
|
|
|
// See https://drafts.csswg.org/css-values-3/#urls
|
|
|
|
|
|
|
|
|
if (/["'() \t\n]|(%20)/.test(url) || options.needQuotes) {
|
|
|
return "\"".concat(url.replace(/"/g, '\\"').replace(/\n/g, "\\n"), "\"");
|
|
|
}
|
|
|
|
|
|
return url;
|
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/css-loader/dist/runtime/sourceMaps.js":
|
|
|
/*!************************************************************!*\
|
|
|
!*** ./node_modules/css-loader/dist/runtime/sourceMaps.js ***!
|
|
|
\************************************************************/
|
|
|
/***/ ((module) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
module.exports = function (item) {
|
|
|
var content = item[1];
|
|
|
var cssMapping = item[3];
|
|
|
|
|
|
if (!cssMapping) {
|
|
|
return content;
|
|
|
}
|
|
|
|
|
|
if (typeof btoa === "function") {
|
|
|
var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));
|
|
|
var data = "sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(base64);
|
|
|
var sourceMapping = "/*# ".concat(data, " */");
|
|
|
var sourceURLs = cssMapping.sources.map(function (source) {
|
|
|
return "/*# sourceURL=".concat(cssMapping.sourceRoot || "").concat(source, " */");
|
|
|
});
|
|
|
return [content].concat(sourceURLs).concat([sourceMapping]).join("\n");
|
|
|
}
|
|
|
|
|
|
return [content].join("\n");
|
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/just-extend/index.js":
|
|
|
/*!*******************************************!*\
|
|
|
!*** ./node_modules/just-extend/index.js ***!
|
|
|
\*******************************************/
|
|
|
/***/ ((module) => {
|
|
|
|
|
|
module.exports = extend;
|
|
|
|
|
|
/*
|
|
|
var obj = {a: 3, b: 5};
|
|
|
extend(obj, {a: 4, c: 8}); // {a: 4, b: 5, c: 8}
|
|
|
obj; // {a: 4, b: 5, c: 8}
|
|
|
|
|
|
var obj = {a: 3, b: 5};
|
|
|
extend({}, obj, {a: 4, c: 8}); // {a: 4, b: 5, c: 8}
|
|
|
obj; // {a: 3, b: 5}
|
|
|
|
|
|
var arr = [1, 2, 3];
|
|
|
var obj = {a: 3, b: 5};
|
|
|
extend(obj, {c: arr}); // {a: 3, b: 5, c: [1, 2, 3]}
|
|
|
arr.push(4);
|
|
|
obj; // {a: 3, b: 5, c: [1, 2, 3, 4]}
|
|
|
|
|
|
var arr = [1, 2, 3];
|
|
|
var obj = {a: 3, b: 5};
|
|
|
extend(true, obj, {c: arr}); // {a: 3, b: 5, c: [1, 2, 3]}
|
|
|
arr.push(4);
|
|
|
obj; // {a: 3, b: 5, c: [1, 2, 3]}
|
|
|
|
|
|
extend({a: 4, b: 5}); // {a: 4, b: 5}
|
|
|
extend({a: 4, b: 5}, 3); {a: 4, b: 5}
|
|
|
extend({a: 4, b: 5}, true); {a: 4, b: 5}
|
|
|
extend('hello', {a: 4, b: 5}); // throws
|
|
|
extend(3, {a: 4, b: 5}); // throws
|
|
|
*/
|
|
|
|
|
|
function extend(/* [deep], obj1, obj2, [objn] */) {
|
|
|
var args = [].slice.call(arguments);
|
|
|
var deep = false;
|
|
|
if (typeof args[0] == 'boolean') {
|
|
|
deep = args.shift();
|
|
|
}
|
|
|
var result = args[0];
|
|
|
if (isUnextendable(result)) {
|
|
|
throw new Error('extendee must be an object');
|
|
|
}
|
|
|
var extenders = args.slice(1);
|
|
|
var len = extenders.length;
|
|
|
for (var i = 0; i < len; i++) {
|
|
|
var extender = extenders[i];
|
|
|
for (var key in extender) {
|
|
|
if (Object.prototype.hasOwnProperty.call(extender, key)) {
|
|
|
var value = extender[key];
|
|
|
if (deep && isCloneable(value)) {
|
|
|
var base = Array.isArray(value) ? [] : {};
|
|
|
result[key] = extend(
|
|
|
true,
|
|
|
Object.prototype.hasOwnProperty.call(result, key) && !isUnextendable(result[key])
|
|
|
? result[key]
|
|
|
: base,
|
|
|
value
|
|
|
);
|
|
|
} else {
|
|
|
result[key] = value;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
function isCloneable(obj) {
|
|
|
return Array.isArray(obj) || {}.toString.call(obj) == '[object Object]';
|
|
|
}
|
|
|
|
|
|
function isUnextendable(val) {
|
|
|
return !val || (typeof val != 'object' && typeof val != 'function');
|
|
|
}
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/object-assign/index.js":
|
|
|
/*!*********************************************!*\
|
|
|
!*** ./node_modules/object-assign/index.js ***!
|
|
|
\*********************************************/
|
|
|
/***/ ((module) => {
|
|
|
|
|
|
"use strict";
|
|
|
/*
|
|
|
object-assign
|
|
|
(c) Sindre Sorhus
|
|
|
@license MIT
|
|
|
*/
|
|
|
|
|
|
|
|
|
/* eslint-disable no-unused-vars */
|
|
|
var getOwnPropertySymbols = Object.getOwnPropertySymbols;
|
|
|
var hasOwnProperty = Object.prototype.hasOwnProperty;
|
|
|
var propIsEnumerable = Object.prototype.propertyIsEnumerable;
|
|
|
|
|
|
function toObject(val) {
|
|
|
if (val === null || val === undefined) {
|
|
|
throw new TypeError('Object.assign cannot be called with null or undefined');
|
|
|
}
|
|
|
|
|
|
return Object(val);
|
|
|
}
|
|
|
|
|
|
function shouldUseNative() {
|
|
|
try {
|
|
|
if (!Object.assign) {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
// Detect buggy property enumeration order in older V8 versions.
|
|
|
|
|
|
// https://bugs.chromium.org/p/v8/issues/detail?id=4118
|
|
|
var test1 = new String('abc'); // eslint-disable-line no-new-wrappers
|
|
|
test1[5] = 'de';
|
|
|
if (Object.getOwnPropertyNames(test1)[0] === '5') {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
// https://bugs.chromium.org/p/v8/issues/detail?id=3056
|
|
|
var test2 = {};
|
|
|
for (var i = 0; i < 10; i++) {
|
|
|
test2['_' + String.fromCharCode(i)] = i;
|
|
|
}
|
|
|
var order2 = Object.getOwnPropertyNames(test2).map(function (n) {
|
|
|
return test2[n];
|
|
|
});
|
|
|
if (order2.join('') !== '0123456789') {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
// https://bugs.chromium.org/p/v8/issues/detail?id=3056
|
|
|
var test3 = {};
|
|
|
'abcdefghijklmnopqrst'.split('').forEach(function (letter) {
|
|
|
test3[letter] = letter;
|
|
|
});
|
|
|
if (Object.keys(Object.assign({}, test3)).join('') !==
|
|
|
'abcdefghijklmnopqrst') {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
return true;
|
|
|
} catch (err) {
|
|
|
// We don't expect any of the above to throw, but better to be safe.
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
module.exports = shouldUseNative() ? Object.assign : function (target, source) {
|
|
|
var from;
|
|
|
var to = toObject(target);
|
|
|
var symbols;
|
|
|
|
|
|
for (var s = 1; s < arguments.length; s++) {
|
|
|
from = Object(arguments[s]);
|
|
|
|
|
|
for (var key in from) {
|
|
|
if (hasOwnProperty.call(from, key)) {
|
|
|
to[key] = from[key];
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (getOwnPropertySymbols) {
|
|
|
symbols = getOwnPropertySymbols(from);
|
|
|
for (var i = 0; i < symbols.length; i++) {
|
|
|
if (propIsEnumerable.call(from, symbols[i])) {
|
|
|
to[symbols[i]] = from[symbols[i]];
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return to;
|
|
|
};
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/prop-types/checkPropTypes.js":
|
|
|
/*!***************************************************!*\
|
|
|
!*** ./node_modules/prop-types/checkPropTypes.js ***!
|
|
|
\***************************************************/
|
|
|
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
/**
|
|
|
* Copyright (c) 2013-present, Facebook, Inc.
|
|
|
*
|
|
|
* This source code is licensed under the MIT license found in the
|
|
|
* LICENSE file in the root directory of this source tree.
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
var printWarning = function() {};
|
|
|
|
|
|
if (true) {
|
|
|
var ReactPropTypesSecret = __webpack_require__(/*! ./lib/ReactPropTypesSecret */ "./node_modules/prop-types/lib/ReactPropTypesSecret.js");
|
|
|
var loggedTypeFailures = {};
|
|
|
var has = __webpack_require__(/*! ./lib/has */ "./node_modules/prop-types/lib/has.js");
|
|
|
|
|
|
printWarning = function(text) {
|
|
|
var message = 'Warning: ' + text;
|
|
|
if (typeof console !== 'undefined') {
|
|
|
console.error(message);
|
|
|
}
|
|
|
try {
|
|
|
// --- Welcome to debugging React ---
|
|
|
// This error was thrown as a convenience so that you can use this stack
|
|
|
// to find the callsite that caused this warning to fire.
|
|
|
throw new Error(message);
|
|
|
} catch (x) { /**/ }
|
|
|
};
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Assert that the values match with the type specs.
|
|
|
* Error messages are memorized and will only be shown once.
|
|
|
*
|
|
|
* @param {object} typeSpecs Map of name to a ReactPropType
|
|
|
* @param {object} values Runtime values that need to be type-checked
|
|
|
* @param {string} location e.g. "prop", "context", "child context"
|
|
|
* @param {string} componentName Name of the component for error messages.
|
|
|
* @param {?Function} getStack Returns the component stack.
|
|
|
* @private
|
|
|
*/
|
|
|
function checkPropTypes(typeSpecs, values, location, componentName, getStack) {
|
|
|
if (true) {
|
|
|
for (var typeSpecName in typeSpecs) {
|
|
|
if (has(typeSpecs, typeSpecName)) {
|
|
|
var error;
|
|
|
// Prop type validation may throw. In case they do, we don't want to
|
|
|
// fail the render phase where it didn't fail before. So we log it.
|
|
|
// After these have been cleaned up, we'll let them throw.
|
|
|
try {
|
|
|
// This is intentionally an invariant that gets caught. It's the same
|
|
|
// behavior as without this statement except with a better message.
|
|
|
if (typeof typeSpecs[typeSpecName] !== 'function') {
|
|
|
var err = Error(
|
|
|
(componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' +
|
|
|
'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' +
|
|
|
'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.'
|
|
|
);
|
|
|
err.name = 'Invariant Violation';
|
|
|
throw err;
|
|
|
}
|
|
|
error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret);
|
|
|
} catch (ex) {
|
|
|
error = ex;
|
|
|
}
|
|
|
if (error && !(error instanceof Error)) {
|
|
|
printWarning(
|
|
|
(componentName || 'React class') + ': type specification of ' +
|
|
|
location + ' `' + typeSpecName + '` is invalid; the type checker ' +
|
|
|
'function must return `null` or an `Error` but returned a ' + typeof error + '. ' +
|
|
|
'You may have forgotten to pass an argument to the type checker ' +
|
|
|
'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' +
|
|
|
'shape all require an argument).'
|
|
|
);
|
|
|
}
|
|
|
if (error instanceof Error && !(error.message in loggedTypeFailures)) {
|
|
|
// Only monitor this failure once because there tends to be a lot of the
|
|
|
// same error.
|
|
|
loggedTypeFailures[error.message] = true;
|
|
|
|
|
|
var stack = getStack ? getStack() : '';
|
|
|
|
|
|
printWarning(
|
|
|
'Failed ' + location + ' type: ' + error.message + (stack != null ? stack : '')
|
|
|
);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Resets warning cache when testing.
|
|
|
*
|
|
|
* @private
|
|
|
*/
|
|
|
checkPropTypes.resetWarningCache = function() {
|
|
|
if (true) {
|
|
|
loggedTypeFailures = {};
|
|
|
}
|
|
|
}
|
|
|
|
|
|
module.exports = checkPropTypes;
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/prop-types/factoryWithTypeCheckers.js":
|
|
|
/*!************************************************************!*\
|
|
|
!*** ./node_modules/prop-types/factoryWithTypeCheckers.js ***!
|
|
|
\************************************************************/
|
|
|
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
/**
|
|
|
* Copyright (c) 2013-present, Facebook, Inc.
|
|
|
*
|
|
|
* This source code is licensed under the MIT license found in the
|
|
|
* LICENSE file in the root directory of this source tree.
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
var ReactIs = __webpack_require__(/*! react-is */ "./node_modules/react-is/index.js");
|
|
|
var assign = __webpack_require__(/*! object-assign */ "./node_modules/object-assign/index.js");
|
|
|
|
|
|
var ReactPropTypesSecret = __webpack_require__(/*! ./lib/ReactPropTypesSecret */ "./node_modules/prop-types/lib/ReactPropTypesSecret.js");
|
|
|
var has = __webpack_require__(/*! ./lib/has */ "./node_modules/prop-types/lib/has.js");
|
|
|
var checkPropTypes = __webpack_require__(/*! ./checkPropTypes */ "./node_modules/prop-types/checkPropTypes.js");
|
|
|
|
|
|
var printWarning = function() {};
|
|
|
|
|
|
if (true) {
|
|
|
printWarning = function(text) {
|
|
|
var message = 'Warning: ' + text;
|
|
|
if (typeof console !== 'undefined') {
|
|
|
console.error(message);
|
|
|
}
|
|
|
try {
|
|
|
// --- Welcome to debugging React ---
|
|
|
// This error was thrown as a convenience so that you can use this stack
|
|
|
// to find the callsite that caused this warning to fire.
|
|
|
throw new Error(message);
|
|
|
} catch (x) {}
|
|
|
};
|
|
|
}
|
|
|
|
|
|
function emptyFunctionThatReturnsNull() {
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
module.exports = function(isValidElement, throwOnDirectAccess) {
|
|
|
/* global Symbol */
|
|
|
var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;
|
|
|
var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.
|
|
|
|
|
|
/**
|
|
|
* Returns the iterator method function contained on the iterable object.
|
|
|
*
|
|
|
* Be sure to invoke the function with the iterable as context:
|
|
|
*
|
|
|
* var iteratorFn = getIteratorFn(myIterable);
|
|
|
* if (iteratorFn) {
|
|
|
* var iterator = iteratorFn.call(myIterable);
|
|
|
* ...
|
|
|
* }
|
|
|
*
|
|
|
* @param {?object} maybeIterable
|
|
|
* @return {?function}
|
|
|
*/
|
|
|
function getIteratorFn(maybeIterable) {
|
|
|
var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);
|
|
|
if (typeof iteratorFn === 'function') {
|
|
|
return iteratorFn;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Collection of methods that allow declaration and validation of props that are
|
|
|
* supplied to React components. Example usage:
|
|
|
*
|
|
|
* var Props = require('ReactPropTypes');
|
|
|
* var MyArticle = React.createClass({
|
|
|
* propTypes: {
|
|
|
* // An optional string prop named "description".
|
|
|
* description: Props.string,
|
|
|
*
|
|
|
* // A required enum prop named "category".
|
|
|
* category: Props.oneOf(['News','Photos']).isRequired,
|
|
|
*
|
|
|
* // A prop named "dialog" that requires an instance of Dialog.
|
|
|
* dialog: Props.instanceOf(Dialog).isRequired
|
|
|
* },
|
|
|
* render: function() { ... }
|
|
|
* });
|
|
|
*
|
|
|
* A more formal specification of how these methods are used:
|
|
|
*
|
|
|
* type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)
|
|
|
* decl := ReactPropTypes.{type}(.isRequired)?
|
|
|
*
|
|
|
* Each and every declaration produces a function with the same signature. This
|
|
|
* allows the creation of custom validation functions. For example:
|
|
|
*
|
|
|
* var MyLink = React.createClass({
|
|
|
* propTypes: {
|
|
|
* // An optional string or URI prop named "href".
|
|
|
* href: function(props, propName, componentName) {
|
|
|
* var propValue = props[propName];
|
|
|
* if (propValue != null && typeof propValue !== 'string' &&
|
|
|
* !(propValue instanceof URI)) {
|
|
|
* return new Error(
|
|
|
* 'Expected a string or an URI for ' + propName + ' in ' +
|
|
|
* componentName
|
|
|
* );
|
|
|
* }
|
|
|
* }
|
|
|
* },
|
|
|
* render: function() {...}
|
|
|
* });
|
|
|
*
|
|
|
* @internal
|
|
|
*/
|
|
|
|
|
|
var ANONYMOUS = '<<anonymous>>';
|
|
|
|
|
|
// Important!
|
|
|
// Keep this list in sync with production version in `./factoryWithThrowingShims.js`.
|
|
|
var ReactPropTypes = {
|
|
|
array: createPrimitiveTypeChecker('array'),
|
|
|
bigint: createPrimitiveTypeChecker('bigint'),
|
|
|
bool: createPrimitiveTypeChecker('boolean'),
|
|
|
func: createPrimitiveTypeChecker('function'),
|
|
|
number: createPrimitiveTypeChecker('number'),
|
|
|
object: createPrimitiveTypeChecker('object'),
|
|
|
string: createPrimitiveTypeChecker('string'),
|
|
|
symbol: createPrimitiveTypeChecker('symbol'),
|
|
|
|
|
|
any: createAnyTypeChecker(),
|
|
|
arrayOf: createArrayOfTypeChecker,
|
|
|
element: createElementTypeChecker(),
|
|
|
elementType: createElementTypeTypeChecker(),
|
|
|
instanceOf: createInstanceTypeChecker,
|
|
|
node: createNodeChecker(),
|
|
|
objectOf: createObjectOfTypeChecker,
|
|
|
oneOf: createEnumTypeChecker,
|
|
|
oneOfType: createUnionTypeChecker,
|
|
|
shape: createShapeTypeChecker,
|
|
|
exact: createStrictShapeTypeChecker,
|
|
|
};
|
|
|
|
|
|
/**
|
|
|
* inlined Object.is polyfill to avoid requiring consumers ship their own
|
|
|
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is
|
|
|
*/
|
|
|
/*eslint-disable no-self-compare*/
|
|
|
function is(x, y) {
|
|
|
// SameValue algorithm
|
|
|
if (x === y) {
|
|
|
// Steps 1-5, 7-10
|
|
|
// Steps 6.b-6.e: +0 != -0
|
|
|
return x !== 0 || 1 / x === 1 / y;
|
|
|
} else {
|
|
|
// Step 6.a: NaN == NaN
|
|
|
return x !== x && y !== y;
|
|
|
}
|
|
|
}
|
|
|
/*eslint-enable no-self-compare*/
|
|
|
|
|
|
/**
|
|
|
* We use an Error-like object for backward compatibility as people may call
|
|
|
* PropTypes directly and inspect their output. However, we don't use real
|
|
|
* Errors anymore. We don't inspect their stack anyway, and creating them
|
|
|
* is prohibitively expensive if they are created too often, such as what
|
|
|
* happens in oneOfType() for any type before the one that matched.
|
|
|
*/
|
|
|
function PropTypeError(message, data) {
|
|
|
this.message = message;
|
|
|
this.data = data && typeof data === 'object' ? data: {};
|
|
|
this.stack = '';
|
|
|
}
|
|
|
// Make `instanceof Error` still work for returned errors.
|
|
|
PropTypeError.prototype = Error.prototype;
|
|
|
|
|
|
function createChainableTypeChecker(validate) {
|
|
|
if (true) {
|
|
|
var manualPropTypeCallCache = {};
|
|
|
var manualPropTypeWarningCount = 0;
|
|
|
}
|
|
|
function checkType(isRequired, props, propName, componentName, location, propFullName, secret) {
|
|
|
componentName = componentName || ANONYMOUS;
|
|
|
propFullName = propFullName || propName;
|
|
|
|
|
|
if (secret !== ReactPropTypesSecret) {
|
|
|
if (throwOnDirectAccess) {
|
|
|
// New behavior only for users of `prop-types` package
|
|
|
var err = new Error(
|
|
|
'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +
|
|
|
'Use `PropTypes.checkPropTypes()` to call them. ' +
|
|
|
'Read more at http://fb.me/use-check-prop-types'
|
|
|
);
|
|
|
err.name = 'Invariant Violation';
|
|
|
throw err;
|
|
|
} else if ( true && typeof console !== 'undefined') {
|
|
|
// Old behavior for people using React.PropTypes
|
|
|
var cacheKey = componentName + ':' + propName;
|
|
|
if (
|
|
|
!manualPropTypeCallCache[cacheKey] &&
|
|
|
// Avoid spamming the console because they are often not actionable except for lib authors
|
|
|
manualPropTypeWarningCount < 3
|
|
|
) {
|
|
|
printWarning(
|
|
|
'You are manually calling a React.PropTypes validation ' +
|
|
|
'function for the `' + propFullName + '` prop on `' + componentName + '`. This is deprecated ' +
|
|
|
'and will throw in the standalone `prop-types` package. ' +
|
|
|
'You may be seeing this warning due to a third-party PropTypes ' +
|
|
|
'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.'
|
|
|
);
|
|
|
manualPropTypeCallCache[cacheKey] = true;
|
|
|
manualPropTypeWarningCount++;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
if (props[propName] == null) {
|
|
|
if (isRequired) {
|
|
|
if (props[propName] === null) {
|
|
|
return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.'));
|
|
|
}
|
|
|
return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.'));
|
|
|
}
|
|
|
return null;
|
|
|
} else {
|
|
|
return validate(props, propName, componentName, location, propFullName);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var chainedCheckType = checkType.bind(null, false);
|
|
|
chainedCheckType.isRequired = checkType.bind(null, true);
|
|
|
|
|
|
return chainedCheckType;
|
|
|
}
|
|
|
|
|
|
function createPrimitiveTypeChecker(expectedType) {
|
|
|
function validate(props, propName, componentName, location, propFullName, secret) {
|
|
|
var propValue = props[propName];
|
|
|
var propType = getPropType(propValue);
|
|
|
if (propType !== expectedType) {
|
|
|
// `propValue` being instance of, say, date/regexp, pass the 'object'
|
|
|
// check, but we can offer a more precise error message here rather than
|
|
|
// 'of type `object`'.
|
|
|
var preciseType = getPreciseType(propValue);
|
|
|
|
|
|
return new PropTypeError(
|
|
|
'Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'),
|
|
|
{expectedType: expectedType}
|
|
|
);
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
return createChainableTypeChecker(validate);
|
|
|
}
|
|
|
|
|
|
function createAnyTypeChecker() {
|
|
|
return createChainableTypeChecker(emptyFunctionThatReturnsNull);
|
|
|
}
|
|
|
|
|
|
function createArrayOfTypeChecker(typeChecker) {
|
|
|
function validate(props, propName, componentName, location, propFullName) {
|
|
|
if (typeof typeChecker !== 'function') {
|
|
|
return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.');
|
|
|
}
|
|
|
var propValue = props[propName];
|
|
|
if (!Array.isArray(propValue)) {
|
|
|
var propType = getPropType(propValue);
|
|
|
return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));
|
|
|
}
|
|
|
for (var i = 0; i < propValue.length; i++) {
|
|
|
var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret);
|
|
|
if (error instanceof Error) {
|
|
|
return error;
|
|
|
}
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
return createChainableTypeChecker(validate);
|
|
|
}
|
|
|
|
|
|
function createElementTypeChecker() {
|
|
|
function validate(props, propName, componentName, location, propFullName) {
|
|
|
var propValue = props[propName];
|
|
|
if (!isValidElement(propValue)) {
|
|
|
var propType = getPropType(propValue);
|
|
|
return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.'));
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
return createChainableTypeChecker(validate);
|
|
|
}
|
|
|
|
|
|
function createElementTypeTypeChecker() {
|
|
|
function validate(props, propName, componentName, location, propFullName) {
|
|
|
var propValue = props[propName];
|
|
|
if (!ReactIs.isValidElementType(propValue)) {
|
|
|
var propType = getPropType(propValue);
|
|
|
return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement type.'));
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
return createChainableTypeChecker(validate);
|
|
|
}
|
|
|
|
|
|
function createInstanceTypeChecker(expectedClass) {
|
|
|
function validate(props, propName, componentName, location, propFullName) {
|
|
|
if (!(props[propName] instanceof expectedClass)) {
|
|
|
var expectedClassName = expectedClass.name || ANONYMOUS;
|
|
|
var actualClassName = getClassName(props[propName]);
|
|
|
return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
return createChainableTypeChecker(validate);
|
|
|
}
|
|
|
|
|
|
function createEnumTypeChecker(expectedValues) {
|
|
|
if (!Array.isArray(expectedValues)) {
|
|
|
if (true) {
|
|
|
if (arguments.length > 1) {
|
|
|
printWarning(
|
|
|
'Invalid arguments supplied to oneOf, expected an array, got ' + arguments.length + ' arguments. ' +
|
|
|
'A common mistake is to write oneOf(x, y, z) instead of oneOf([x, y, z]).'
|
|
|
);
|
|
|
} else {
|
|
|
printWarning('Invalid argument supplied to oneOf, expected an array.');
|
|
|
}
|
|
|
}
|
|
|
return emptyFunctionThatReturnsNull;
|
|
|
}
|
|
|
|
|
|
function validate(props, propName, componentName, location, propFullName) {
|
|
|
var propValue = props[propName];
|
|
|
for (var i = 0; i < expectedValues.length; i++) {
|
|
|
if (is(propValue, expectedValues[i])) {
|
|
|
return null;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var valuesString = JSON.stringify(expectedValues, function replacer(key, value) {
|
|
|
var type = getPreciseType(value);
|
|
|
if (type === 'symbol') {
|
|
|
return String(value);
|
|
|
}
|
|
|
return value;
|
|
|
});
|
|
|
return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + String(propValue) + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));
|
|
|
}
|
|
|
return createChainableTypeChecker(validate);
|
|
|
}
|
|
|
|
|
|
function createObjectOfTypeChecker(typeChecker) {
|
|
|
function validate(props, propName, componentName, location, propFullName) {
|
|
|
if (typeof typeChecker !== 'function') {
|
|
|
return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.');
|
|
|
}
|
|
|
var propValue = props[propName];
|
|
|
var propType = getPropType(propValue);
|
|
|
if (propType !== 'object') {
|
|
|
return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));
|
|
|
}
|
|
|
for (var key in propValue) {
|
|
|
if (has(propValue, key)) {
|
|
|
var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);
|
|
|
if (error instanceof Error) {
|
|
|
return error;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
return createChainableTypeChecker(validate);
|
|
|
}
|
|
|
|
|
|
function createUnionTypeChecker(arrayOfTypeCheckers) {
|
|
|
if (!Array.isArray(arrayOfTypeCheckers)) {
|
|
|
true ? printWarning('Invalid argument supplied to oneOfType, expected an instance of array.') : 0;
|
|
|
return emptyFunctionThatReturnsNull;
|
|
|
}
|
|
|
|
|
|
for (var i = 0; i < arrayOfTypeCheckers.length; i++) {
|
|
|
var checker = arrayOfTypeCheckers[i];
|
|
|
if (typeof checker !== 'function') {
|
|
|
printWarning(
|
|
|
'Invalid argument supplied to oneOfType. Expected an array of check functions, but ' +
|
|
|
'received ' + getPostfixForTypeWarning(checker) + ' at index ' + i + '.'
|
|
|
);
|
|
|
return emptyFunctionThatReturnsNull;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function validate(props, propName, componentName, location, propFullName) {
|
|
|
var expectedTypes = [];
|
|
|
for (var i = 0; i < arrayOfTypeCheckers.length; i++) {
|
|
|
var checker = arrayOfTypeCheckers[i];
|
|
|
var checkerResult = checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret);
|
|
|
if (checkerResult == null) {
|
|
|
return null;
|
|
|
}
|
|
|
if (checkerResult.data && has(checkerResult.data, 'expectedType')) {
|
|
|
expectedTypes.push(checkerResult.data.expectedType);
|
|
|
}
|
|
|
}
|
|
|
var expectedTypesMessage = (expectedTypes.length > 0) ? ', expected one of type [' + expectedTypes.join(', ') + ']': '';
|
|
|
return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`' + expectedTypesMessage + '.'));
|
|
|
}
|
|
|
return createChainableTypeChecker(validate);
|
|
|
}
|
|
|
|
|
|
function createNodeChecker() {
|
|
|
function validate(props, propName, componentName, location, propFullName) {
|
|
|
if (!isNode(props[propName])) {
|
|
|
return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
return createChainableTypeChecker(validate);
|
|
|
}
|
|
|
|
|
|
function invalidValidatorError(componentName, location, propFullName, key, type) {
|
|
|
return new PropTypeError(
|
|
|
(componentName || 'React class') + ': ' + location + ' type `' + propFullName + '.' + key + '` is invalid; ' +
|
|
|
'it must be a function, usually from the `prop-types` package, but received `' + type + '`.'
|
|
|
);
|
|
|
}
|
|
|
|
|
|
function createShapeTypeChecker(shapeTypes) {
|
|
|
function validate(props, propName, componentName, location, propFullName) {
|
|
|
var propValue = props[propName];
|
|
|
var propType = getPropType(propValue);
|
|
|
if (propType !== 'object') {
|
|
|
return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));
|
|
|
}
|
|
|
for (var key in shapeTypes) {
|
|
|
var checker = shapeTypes[key];
|
|
|
if (typeof checker !== 'function') {
|
|
|
return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker));
|
|
|
}
|
|
|
var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);
|
|
|
if (error) {
|
|
|
return error;
|
|
|
}
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
return createChainableTypeChecker(validate);
|
|
|
}
|
|
|
|
|
|
function createStrictShapeTypeChecker(shapeTypes) {
|
|
|
function validate(props, propName, componentName, location, propFullName) {
|
|
|
var propValue = props[propName];
|
|
|
var propType = getPropType(propValue);
|
|
|
if (propType !== 'object') {
|
|
|
return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));
|
|
|
}
|
|
|
// We need to check all keys in case some are required but missing from props.
|
|
|
var allKeys = assign({}, props[propName], shapeTypes);
|
|
|
for (var key in allKeys) {
|
|
|
var checker = shapeTypes[key];
|
|
|
if (has(shapeTypes, key) && typeof checker !== 'function') {
|
|
|
return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker));
|
|
|
}
|
|
|
if (!checker) {
|
|
|
return new PropTypeError(
|
|
|
'Invalid ' + location + ' `' + propFullName + '` key `' + key + '` supplied to `' + componentName + '`.' +
|
|
|
'\nBad object: ' + JSON.stringify(props[propName], null, ' ') +
|
|
|
'\nValid keys: ' + JSON.stringify(Object.keys(shapeTypes), null, ' ')
|
|
|
);
|
|
|
}
|
|
|
var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);
|
|
|
if (error) {
|
|
|
return error;
|
|
|
}
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
return createChainableTypeChecker(validate);
|
|
|
}
|
|
|
|
|
|
function isNode(propValue) {
|
|
|
switch (typeof propValue) {
|
|
|
case 'number':
|
|
|
case 'string':
|
|
|
case 'undefined':
|
|
|
return true;
|
|
|
case 'boolean':
|
|
|
return !propValue;
|
|
|
case 'object':
|
|
|
if (Array.isArray(propValue)) {
|
|
|
return propValue.every(isNode);
|
|
|
}
|
|
|
if (propValue === null || isValidElement(propValue)) {
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
var iteratorFn = getIteratorFn(propValue);
|
|
|
if (iteratorFn) {
|
|
|
var iterator = iteratorFn.call(propValue);
|
|
|
var step;
|
|
|
if (iteratorFn !== propValue.entries) {
|
|
|
while (!(step = iterator.next()).done) {
|
|
|
if (!isNode(step.value)) {
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
|
// Iterator will provide entry [k,v] tuples rather than values.
|
|
|
while (!(step = iterator.next()).done) {
|
|
|
var entry = step.value;
|
|
|
if (entry) {
|
|
|
if (!isNode(entry[1])) {
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
return true;
|
|
|
default:
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function isSymbol(propType, propValue) {
|
|
|
// Native Symbol.
|
|
|
if (propType === 'symbol') {
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
// falsy value can't be a Symbol
|
|
|
if (!propValue) {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
// 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'
|
|
|
if (propValue['@@toStringTag'] === 'Symbol') {
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
// Fallback for non-spec compliant Symbols which are polyfilled.
|
|
|
if (typeof Symbol === 'function' && propValue instanceof Symbol) {
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
// Equivalent of `typeof` but with special handling for array and regexp.
|
|
|
function getPropType(propValue) {
|
|
|
var propType = typeof propValue;
|
|
|
if (Array.isArray(propValue)) {
|
|
|
return 'array';
|
|
|
}
|
|
|
if (propValue instanceof RegExp) {
|
|
|
// Old webkits (at least until Android 4.0) return 'function' rather than
|
|
|
// 'object' for typeof a RegExp. We'll normalize this here so that /bla/
|
|
|
// passes PropTypes.object.
|
|
|
return 'object';
|
|
|
}
|
|
|
if (isSymbol(propType, propValue)) {
|
|
|
return 'symbol';
|
|
|
}
|
|
|
return propType;
|
|
|
}
|
|
|
|
|
|
// This handles more types than `getPropType`. Only used for error messages.
|
|
|
// See `createPrimitiveTypeChecker`.
|
|
|
function getPreciseType(propValue) {
|
|
|
if (typeof propValue === 'undefined' || propValue === null) {
|
|
|
return '' + propValue;
|
|
|
}
|
|
|
var propType = getPropType(propValue);
|
|
|
if (propType === 'object') {
|
|
|
if (propValue instanceof Date) {
|
|
|
return 'date';
|
|
|
} else if (propValue instanceof RegExp) {
|
|
|
return 'regexp';
|
|
|
}
|
|
|
}
|
|
|
return propType;
|
|
|
}
|
|
|
|
|
|
// Returns a string that is postfixed to a warning about an invalid type.
|
|
|
// For example, "undefined" or "of type array"
|
|
|
function getPostfixForTypeWarning(value) {
|
|
|
var type = getPreciseType(value);
|
|
|
switch (type) {
|
|
|
case 'array':
|
|
|
case 'object':
|
|
|
return 'an ' + type;
|
|
|
case 'boolean':
|
|
|
case 'date':
|
|
|
case 'regexp':
|
|
|
return 'a ' + type;
|
|
|
default:
|
|
|
return type;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// Returns class name of the object, if any.
|
|
|
function getClassName(propValue) {
|
|
|
if (!propValue.constructor || !propValue.constructor.name) {
|
|
|
return ANONYMOUS;
|
|
|
}
|
|
|
return propValue.constructor.name;
|
|
|
}
|
|
|
|
|
|
ReactPropTypes.checkPropTypes = checkPropTypes;
|
|
|
ReactPropTypes.resetWarningCache = checkPropTypes.resetWarningCache;
|
|
|
ReactPropTypes.PropTypes = ReactPropTypes;
|
|
|
|
|
|
return ReactPropTypes;
|
|
|
};
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/prop-types/index.js":
|
|
|
/*!******************************************!*\
|
|
|
!*** ./node_modules/prop-types/index.js ***!
|
|
|
\******************************************/
|
|
|
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
|
|
|
|
|
/**
|
|
|
* Copyright (c) 2013-present, Facebook, Inc.
|
|
|
*
|
|
|
* This source code is licensed under the MIT license found in the
|
|
|
* LICENSE file in the root directory of this source tree.
|
|
|
*/
|
|
|
|
|
|
if (true) {
|
|
|
var ReactIs = __webpack_require__(/*! react-is */ "./node_modules/react-is/index.js");
|
|
|
|
|
|
// By explicitly using `prop-types` you are opting into new development behavior.
|
|
|
// http://fb.me/prop-types-in-prod
|
|
|
var throwOnDirectAccess = true;
|
|
|
module.exports = __webpack_require__(/*! ./factoryWithTypeCheckers */ "./node_modules/prop-types/factoryWithTypeCheckers.js")(ReactIs.isElement, throwOnDirectAccess);
|
|
|
} else {}
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/prop-types/lib/ReactPropTypesSecret.js":
|
|
|
/*!*************************************************************!*\
|
|
|
!*** ./node_modules/prop-types/lib/ReactPropTypesSecret.js ***!
|
|
|
\*************************************************************/
|
|
|
/***/ ((module) => {
|
|
|
|
|
|
"use strict";
|
|
|
/**
|
|
|
* Copyright (c) 2013-present, Facebook, Inc.
|
|
|
*
|
|
|
* This source code is licensed under the MIT license found in the
|
|
|
* LICENSE file in the root directory of this source tree.
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
var ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';
|
|
|
|
|
|
module.exports = ReactPropTypesSecret;
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/prop-types/lib/has.js":
|
|
|
/*!********************************************!*\
|
|
|
!*** ./node_modules/prop-types/lib/has.js ***!
|
|
|
\********************************************/
|
|
|
/***/ ((module) => {
|
|
|
|
|
|
module.exports = Function.call.bind(Object.prototype.hasOwnProperty);
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/rc-field-form/es/Field.js":
|
|
|
/*!************************************************!*\
|
|
|
!*** ./node_modules/rc-field-form/es/Field.js ***!
|
|
|
\************************************************/
|
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "./node_modules/@babel/runtime/helpers/esm/extends.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "./node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "./node_modules/@babel/runtime/helpers/esm/defineProperty.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "./node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/esm/classCallCheck */ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/esm/createClass */ "./node_modules/@babel/runtime/helpers/esm/createClass.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/esm/assertThisInitialized */ "./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_inherits__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inherits */ "./node_modules/@babel/runtime/helpers/esm/inherits.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_createSuper__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @babel/runtime/helpers/esm/createSuper */ "./node_modules/@babel/runtime/helpers/esm/createSuper.js");
|
|
|
/* harmony import */ var rc_util_es_Children_toArray__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! rc-util/es/Children/toArray */ "./node_modules/rc-util/es/Children/toArray.js");
|
|
|
/* harmony import */ var rc_util_es_warning__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! rc-util/es/warning */ "./node_modules/rc-util/es/warning.js");
|
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
|
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_12__);
|
|
|
/* harmony import */ var _FieldContext__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./FieldContext */ "./node_modules/rc-field-form/es/FieldContext.js");
|
|
|
/* harmony import */ var _utils_typeUtil__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./utils/typeUtil */ "./node_modules/rc-field-form/es/utils/typeUtil.js");
|
|
|
/* harmony import */ var _utils_validateUtil__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./utils/validateUtil */ "./node_modules/rc-field-form/es/utils/validateUtil.js");
|
|
|
/* harmony import */ var _utils_valueUtil__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./utils/valueUtil */ "./node_modules/rc-field-form/es/utils/valueUtil.js");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var _excluded = ["name"];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var EMPTY_ERRORS = [];
|
|
|
function requireUpdate(shouldUpdate, prev, next, prevValue, nextValue, info) {
|
|
|
if (typeof shouldUpdate === 'function') {
|
|
|
return shouldUpdate(prev, next, 'source' in info ? {
|
|
|
source: info.source
|
|
|
} : {});
|
|
|
}
|
|
|
return prevValue !== nextValue;
|
|
|
}
|
|
|
// We use Class instead of Hooks here since it will cost much code by using Hooks.
|
|
|
var Field = /*#__PURE__*/function (_React$Component) {
|
|
|
(0,_babel_runtime_helpers_esm_inherits__WEBPACK_IMPORTED_MODULE_8__["default"])(Field, _React$Component);
|
|
|
var _super = (0,_babel_runtime_helpers_esm_createSuper__WEBPACK_IMPORTED_MODULE_9__["default"])(Field);
|
|
|
/**
|
|
|
* Follow state should not management in State since it will async update by React.
|
|
|
* This makes first render of form can not get correct state value.
|
|
|
*/
|
|
|
|
|
|
/**
|
|
|
* Mark when touched & validated. Currently only used for `dependencies`.
|
|
|
* Note that we do not think field with `initialValue` is dirty
|
|
|
* but this will be by `isFieldDirty` func.
|
|
|
*/
|
|
|
|
|
|
// ============================== Subscriptions ==============================
|
|
|
function Field(props) {
|
|
|
var _this;
|
|
|
(0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_5__["default"])(this, Field);
|
|
|
_this = _super.call(this, props);
|
|
|
// Register on init
|
|
|
_this.state = {
|
|
|
resetCount: 0
|
|
|
};
|
|
|
_this.cancelRegisterFunc = null;
|
|
|
_this.mounted = false;
|
|
|
_this.touched = false;
|
|
|
_this.dirty = false;
|
|
|
_this.validatePromise = null;
|
|
|
_this.prevValidating = void 0;
|
|
|
_this.errors = EMPTY_ERRORS;
|
|
|
_this.warnings = EMPTY_ERRORS;
|
|
|
_this.cancelRegister = function () {
|
|
|
var _this$props = _this.props,
|
|
|
preserve = _this$props.preserve,
|
|
|
isListField = _this$props.isListField,
|
|
|
name = _this$props.name;
|
|
|
if (_this.cancelRegisterFunc) {
|
|
|
_this.cancelRegisterFunc(isListField, preserve, (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_16__.getNamePath)(name));
|
|
|
}
|
|
|
_this.cancelRegisterFunc = null;
|
|
|
};
|
|
|
_this.getNamePath = function () {
|
|
|
var _this$props2 = _this.props,
|
|
|
name = _this$props2.name,
|
|
|
fieldContext = _this$props2.fieldContext;
|
|
|
var _fieldContext$prefixN = fieldContext.prefixName,
|
|
|
prefixName = _fieldContext$prefixN === void 0 ? [] : _fieldContext$prefixN;
|
|
|
return name !== undefined ? [].concat((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_4__["default"])(prefixName), (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_4__["default"])(name)) : [];
|
|
|
};
|
|
|
_this.getRules = function () {
|
|
|
var _this$props3 = _this.props,
|
|
|
_this$props3$rules = _this$props3.rules,
|
|
|
rules = _this$props3$rules === void 0 ? [] : _this$props3$rules,
|
|
|
fieldContext = _this$props3.fieldContext;
|
|
|
return rules.map(function (rule) {
|
|
|
if (typeof rule === 'function') {
|
|
|
return rule(fieldContext);
|
|
|
}
|
|
|
return rule;
|
|
|
});
|
|
|
};
|
|
|
_this.refresh = function () {
|
|
|
if (!_this.mounted) return;
|
|
|
/**
|
|
|
* Clean up current node.
|
|
|
*/
|
|
|
_this.setState(function (_ref) {
|
|
|
var resetCount = _ref.resetCount;
|
|
|
return {
|
|
|
resetCount: resetCount + 1
|
|
|
};
|
|
|
});
|
|
|
};
|
|
|
_this.triggerMetaEvent = function (destroy) {
|
|
|
var onMetaChange = _this.props.onMetaChange;
|
|
|
onMetaChange === null || onMetaChange === void 0 ? void 0 : onMetaChange((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_3__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_3__["default"])({}, _this.getMeta()), {}, {
|
|
|
destroy: destroy
|
|
|
}));
|
|
|
};
|
|
|
_this.onStoreChange = function (prevStore, namePathList, info) {
|
|
|
var _this$props4 = _this.props,
|
|
|
shouldUpdate = _this$props4.shouldUpdate,
|
|
|
_this$props4$dependen = _this$props4.dependencies,
|
|
|
dependencies = _this$props4$dependen === void 0 ? [] : _this$props4$dependen,
|
|
|
onReset = _this$props4.onReset;
|
|
|
var store = info.store;
|
|
|
var namePath = _this.getNamePath();
|
|
|
var prevValue = _this.getValue(prevStore);
|
|
|
var curValue = _this.getValue(store);
|
|
|
var namePathMatch = namePathList && (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_16__.containsNamePath)(namePathList, namePath);
|
|
|
// `setFieldsValue` is a quick access to update related status
|
|
|
if (info.type === 'valueUpdate' && info.source === 'external' && prevValue !== curValue) {
|
|
|
_this.touched = true;
|
|
|
_this.dirty = true;
|
|
|
_this.validatePromise = null;
|
|
|
_this.errors = EMPTY_ERRORS;
|
|
|
_this.warnings = EMPTY_ERRORS;
|
|
|
_this.triggerMetaEvent();
|
|
|
}
|
|
|
switch (info.type) {
|
|
|
case 'reset':
|
|
|
if (!namePathList || namePathMatch) {
|
|
|
// Clean up state
|
|
|
_this.touched = false;
|
|
|
_this.dirty = false;
|
|
|
_this.validatePromise = null;
|
|
|
_this.errors = EMPTY_ERRORS;
|
|
|
_this.warnings = EMPTY_ERRORS;
|
|
|
_this.triggerMetaEvent();
|
|
|
onReset === null || onReset === void 0 ? void 0 : onReset();
|
|
|
_this.refresh();
|
|
|
return;
|
|
|
}
|
|
|
break;
|
|
|
/**
|
|
|
* In case field with `preserve = false` nest deps like:
|
|
|
* - A = 1 => show B
|
|
|
* - B = 1 => show C
|
|
|
* - Reset A, need clean B, C
|
|
|
*/
|
|
|
case 'remove':
|
|
|
{
|
|
|
if (shouldUpdate) {
|
|
|
_this.reRender();
|
|
|
return;
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
|
case 'setField':
|
|
|
{
|
|
|
if (namePathMatch) {
|
|
|
var data = info.data;
|
|
|
if ('touched' in data) {
|
|
|
_this.touched = data.touched;
|
|
|
}
|
|
|
if ('validating' in data && !('originRCField' in data)) {
|
|
|
_this.validatePromise = data.validating ? Promise.resolve([]) : null;
|
|
|
}
|
|
|
if ('errors' in data) {
|
|
|
_this.errors = data.errors || EMPTY_ERRORS;
|
|
|
}
|
|
|
if ('warnings' in data) {
|
|
|
_this.warnings = data.warnings || EMPTY_ERRORS;
|
|
|
}
|
|
|
_this.dirty = true;
|
|
|
_this.triggerMetaEvent();
|
|
|
_this.reRender();
|
|
|
return;
|
|
|
}
|
|
|
// Handle update by `setField` with `shouldUpdate`
|
|
|
if (shouldUpdate && !namePath.length && requireUpdate(shouldUpdate, prevStore, store, prevValue, curValue, info)) {
|
|
|
_this.reRender();
|
|
|
return;
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
|
case 'dependenciesUpdate':
|
|
|
{
|
|
|
/**
|
|
|
* Trigger when marked `dependencies` updated. Related fields will all update
|
|
|
*/
|
|
|
var dependencyList = dependencies.map(_utils_valueUtil__WEBPACK_IMPORTED_MODULE_16__.getNamePath);
|
|
|
// No need for `namePathMath` check and `shouldUpdate` check, since `valueUpdate` will be
|
|
|
// emitted earlier and they will work there
|
|
|
// If set it may cause unnecessary twice rerendering
|
|
|
if (dependencyList.some(function (dependency) {
|
|
|
return (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_16__.containsNamePath)(info.relatedFields, dependency);
|
|
|
})) {
|
|
|
_this.reRender();
|
|
|
return;
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
|
default:
|
|
|
// 1. If `namePath` exists in `namePathList`, means it's related value and should update
|
|
|
// For example <List name="list"><Field name={['list', 0]}></List>
|
|
|
// If `namePathList` is [['list']] (List value update), Field should be updated
|
|
|
// If `namePathList` is [['list', 0]] (Field value update), List shouldn't be updated
|
|
|
// 2.
|
|
|
// 2.1 If `dependencies` is set, `name` is not set and `shouldUpdate` is not set,
|
|
|
// don't use `shouldUpdate`. `dependencies` is view as a shortcut if `shouldUpdate`
|
|
|
// is not provided
|
|
|
// 2.2 If `shouldUpdate` provided, use customize logic to update the field
|
|
|
// else to check if value changed
|
|
|
if (namePathMatch || (!dependencies.length || namePath.length || shouldUpdate) && requireUpdate(shouldUpdate, prevStore, store, prevValue, curValue, info)) {
|
|
|
_this.reRender();
|
|
|
return;
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
|
if (shouldUpdate === true) {
|
|
|
_this.reRender();
|
|
|
}
|
|
|
};
|
|
|
_this.validateRules = function (options) {
|
|
|
// We should fixed namePath & value to avoid developer change then by form function
|
|
|
var namePath = _this.getNamePath();
|
|
|
var currentValue = _this.getValue();
|
|
|
// Force change to async to avoid rule OOD under renderProps field
|
|
|
var rootPromise = Promise.resolve().then(function () {
|
|
|
if (!_this.mounted) {
|
|
|
return [];
|
|
|
}
|
|
|
var _this$props5 = _this.props,
|
|
|
_this$props5$validate = _this$props5.validateFirst,
|
|
|
validateFirst = _this$props5$validate === void 0 ? false : _this$props5$validate,
|
|
|
messageVariables = _this$props5.messageVariables;
|
|
|
var _ref2 = options || {},
|
|
|
triggerName = _ref2.triggerName;
|
|
|
var filteredRules = _this.getRules();
|
|
|
if (triggerName) {
|
|
|
filteredRules = filteredRules.filter(function (rule) {
|
|
|
return rule;
|
|
|
}).filter(function (rule) {
|
|
|
var validateTrigger = rule.validateTrigger;
|
|
|
if (!validateTrigger) {
|
|
|
return true;
|
|
|
}
|
|
|
var triggerList = (0,_utils_typeUtil__WEBPACK_IMPORTED_MODULE_14__.toArray)(validateTrigger);
|
|
|
return triggerList.includes(triggerName);
|
|
|
});
|
|
|
}
|
|
|
var promise = (0,_utils_validateUtil__WEBPACK_IMPORTED_MODULE_15__.validateRules)(namePath, currentValue, filteredRules, options, validateFirst, messageVariables);
|
|
|
promise.catch(function (e) {
|
|
|
return e;
|
|
|
}).then(function () {
|
|
|
var ruleErrors = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : EMPTY_ERRORS;
|
|
|
if (_this.validatePromise === rootPromise) {
|
|
|
var _ruleErrors$forEach;
|
|
|
_this.validatePromise = null;
|
|
|
// Get errors & warnings
|
|
|
var nextErrors = [];
|
|
|
var nextWarnings = [];
|
|
|
(_ruleErrors$forEach = ruleErrors.forEach) === null || _ruleErrors$forEach === void 0 ? void 0 : _ruleErrors$forEach.call(ruleErrors, function (_ref3) {
|
|
|
var warningOnly = _ref3.rule.warningOnly,
|
|
|
_ref3$errors = _ref3.errors,
|
|
|
errors = _ref3$errors === void 0 ? EMPTY_ERRORS : _ref3$errors;
|
|
|
if (warningOnly) {
|
|
|
nextWarnings.push.apply(nextWarnings, (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_4__["default"])(errors));
|
|
|
} else {
|
|
|
nextErrors.push.apply(nextErrors, (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_4__["default"])(errors));
|
|
|
}
|
|
|
});
|
|
|
_this.errors = nextErrors;
|
|
|
_this.warnings = nextWarnings;
|
|
|
_this.triggerMetaEvent();
|
|
|
_this.reRender();
|
|
|
}
|
|
|
});
|
|
|
return promise;
|
|
|
});
|
|
|
_this.validatePromise = rootPromise;
|
|
|
_this.dirty = true;
|
|
|
_this.errors = EMPTY_ERRORS;
|
|
|
_this.warnings = EMPTY_ERRORS;
|
|
|
_this.triggerMetaEvent();
|
|
|
// Force trigger re-render since we need sync renderProps with new meta
|
|
|
_this.reRender();
|
|
|
return rootPromise;
|
|
|
};
|
|
|
_this.isFieldValidating = function () {
|
|
|
return !!_this.validatePromise;
|
|
|
};
|
|
|
_this.isFieldTouched = function () {
|
|
|
return _this.touched;
|
|
|
};
|
|
|
_this.isFieldDirty = function () {
|
|
|
// Touched or validate or has initialValue
|
|
|
if (_this.dirty || _this.props.initialValue !== undefined) {
|
|
|
return true;
|
|
|
}
|
|
|
// Form set initialValue
|
|
|
var fieldContext = _this.props.fieldContext;
|
|
|
var _fieldContext$getInte = fieldContext.getInternalHooks(_FieldContext__WEBPACK_IMPORTED_MODULE_13__.HOOK_MARK),
|
|
|
getInitialValue = _fieldContext$getInte.getInitialValue;
|
|
|
if (getInitialValue(_this.getNamePath()) !== undefined) {
|
|
|
return true;
|
|
|
}
|
|
|
return false;
|
|
|
};
|
|
|
_this.getErrors = function () {
|
|
|
return _this.errors;
|
|
|
};
|
|
|
_this.getWarnings = function () {
|
|
|
return _this.warnings;
|
|
|
};
|
|
|
_this.isListField = function () {
|
|
|
return _this.props.isListField;
|
|
|
};
|
|
|
_this.isList = function () {
|
|
|
return _this.props.isList;
|
|
|
};
|
|
|
_this.isPreserve = function () {
|
|
|
return _this.props.preserve;
|
|
|
};
|
|
|
_this.getMeta = function () {
|
|
|
// Make error & validating in cache to save perf
|
|
|
_this.prevValidating = _this.isFieldValidating();
|
|
|
var meta = {
|
|
|
touched: _this.isFieldTouched(),
|
|
|
validating: _this.prevValidating,
|
|
|
errors: _this.errors,
|
|
|
warnings: _this.warnings,
|
|
|
name: _this.getNamePath()
|
|
|
};
|
|
|
return meta;
|
|
|
};
|
|
|
_this.getOnlyChild = function (children) {
|
|
|
// Support render props
|
|
|
if (typeof children === 'function') {
|
|
|
var meta = _this.getMeta();
|
|
|
return (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_3__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_3__["default"])({}, _this.getOnlyChild(children(_this.getControlled(), meta, _this.props.fieldContext))), {}, {
|
|
|
isFunction: true
|
|
|
});
|
|
|
}
|
|
|
// Filed element only
|
|
|
var childList = (0,rc_util_es_Children_toArray__WEBPACK_IMPORTED_MODULE_10__["default"])(children);
|
|
|
if (childList.length !== 1 || ! /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_12__.isValidElement(childList[0])) {
|
|
|
return {
|
|
|
child: childList,
|
|
|
isFunction: false
|
|
|
};
|
|
|
}
|
|
|
return {
|
|
|
child: childList[0],
|
|
|
isFunction: false
|
|
|
};
|
|
|
};
|
|
|
_this.getValue = function (store) {
|
|
|
var getFieldsValue = _this.props.fieldContext.getFieldsValue;
|
|
|
var namePath = _this.getNamePath();
|
|
|
return (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_16__.getValue)(store || getFieldsValue(true), namePath);
|
|
|
};
|
|
|
_this.getControlled = function () {
|
|
|
var childProps = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
|
var _this$props6 = _this.props,
|
|
|
trigger = _this$props6.trigger,
|
|
|
validateTrigger = _this$props6.validateTrigger,
|
|
|
getValueFromEvent = _this$props6.getValueFromEvent,
|
|
|
normalize = _this$props6.normalize,
|
|
|
valuePropName = _this$props6.valuePropName,
|
|
|
getValueProps = _this$props6.getValueProps,
|
|
|
fieldContext = _this$props6.fieldContext;
|
|
|
var mergedValidateTrigger = validateTrigger !== undefined ? validateTrigger : fieldContext.validateTrigger;
|
|
|
var namePath = _this.getNamePath();
|
|
|
var getInternalHooks = fieldContext.getInternalHooks,
|
|
|
getFieldsValue = fieldContext.getFieldsValue;
|
|
|
var _getInternalHooks = getInternalHooks(_FieldContext__WEBPACK_IMPORTED_MODULE_13__.HOOK_MARK),
|
|
|
dispatch = _getInternalHooks.dispatch;
|
|
|
var value = _this.getValue();
|
|
|
var mergedGetValueProps = getValueProps || function (val) {
|
|
|
return (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_2__["default"])({}, valuePropName, val);
|
|
|
};
|
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
|
var originTriggerFunc = childProps[trigger];
|
|
|
var control = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_3__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_3__["default"])({}, childProps), mergedGetValueProps(value));
|
|
|
// Add trigger
|
|
|
control[trigger] = function () {
|
|
|
// Mark as touched
|
|
|
_this.touched = true;
|
|
|
_this.dirty = true;
|
|
|
_this.triggerMetaEvent();
|
|
|
var newValue;
|
|
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
|
args[_key] = arguments[_key];
|
|
|
}
|
|
|
if (getValueFromEvent) {
|
|
|
newValue = getValueFromEvent.apply(void 0, args);
|
|
|
} else {
|
|
|
newValue = _utils_valueUtil__WEBPACK_IMPORTED_MODULE_16__.defaultGetValueFromEvent.apply(void 0, [valuePropName].concat(args));
|
|
|
}
|
|
|
if (normalize) {
|
|
|
newValue = normalize(newValue, value, getFieldsValue(true));
|
|
|
}
|
|
|
dispatch({
|
|
|
type: 'updateValue',
|
|
|
namePath: namePath,
|
|
|
value: newValue
|
|
|
});
|
|
|
if (originTriggerFunc) {
|
|
|
originTriggerFunc.apply(void 0, args);
|
|
|
}
|
|
|
};
|
|
|
// Add validateTrigger
|
|
|
var validateTriggerList = (0,_utils_typeUtil__WEBPACK_IMPORTED_MODULE_14__.toArray)(mergedValidateTrigger || []);
|
|
|
validateTriggerList.forEach(function (triggerName) {
|
|
|
// Wrap additional function of component, so that we can get latest value from store
|
|
|
var originTrigger = control[triggerName];
|
|
|
control[triggerName] = function () {
|
|
|
if (originTrigger) {
|
|
|
originTrigger.apply(void 0, arguments);
|
|
|
}
|
|
|
// Always use latest rules
|
|
|
var rules = _this.props.rules;
|
|
|
if (rules && rules.length) {
|
|
|
// We dispatch validate to root,
|
|
|
// since it will update related data with other field with same name
|
|
|
dispatch({
|
|
|
type: 'validateField',
|
|
|
namePath: namePath,
|
|
|
triggerName: triggerName
|
|
|
});
|
|
|
}
|
|
|
};
|
|
|
});
|
|
|
return control;
|
|
|
};
|
|
|
if (props.fieldContext) {
|
|
|
var getInternalHooks = props.fieldContext.getInternalHooks;
|
|
|
var _getInternalHooks2 = getInternalHooks(_FieldContext__WEBPACK_IMPORTED_MODULE_13__.HOOK_MARK),
|
|
|
initEntityValue = _getInternalHooks2.initEntityValue;
|
|
|
initEntityValue((0,_babel_runtime_helpers_esm_assertThisInitialized__WEBPACK_IMPORTED_MODULE_7__["default"])(_this));
|
|
|
}
|
|
|
return _this;
|
|
|
}
|
|
|
(0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_6__["default"])(Field, [{
|
|
|
key: "componentDidMount",
|
|
|
value: function componentDidMount() {
|
|
|
var _this$props7 = this.props,
|
|
|
shouldUpdate = _this$props7.shouldUpdate,
|
|
|
fieldContext = _this$props7.fieldContext;
|
|
|
this.mounted = true;
|
|
|
// Register on init
|
|
|
if (fieldContext) {
|
|
|
var getInternalHooks = fieldContext.getInternalHooks;
|
|
|
var _getInternalHooks3 = getInternalHooks(_FieldContext__WEBPACK_IMPORTED_MODULE_13__.HOOK_MARK),
|
|
|
registerField = _getInternalHooks3.registerField;
|
|
|
this.cancelRegisterFunc = registerField(this);
|
|
|
}
|
|
|
// One more render for component in case fields not ready
|
|
|
if (shouldUpdate === true) {
|
|
|
this.reRender();
|
|
|
}
|
|
|
}
|
|
|
}, {
|
|
|
key: "componentWillUnmount",
|
|
|
value: function componentWillUnmount() {
|
|
|
this.cancelRegister();
|
|
|
this.triggerMetaEvent(true);
|
|
|
this.mounted = false;
|
|
|
}
|
|
|
}, {
|
|
|
key: "reRender",
|
|
|
value: function reRender() {
|
|
|
if (!this.mounted) return;
|
|
|
this.forceUpdate();
|
|
|
}
|
|
|
}, {
|
|
|
key: "render",
|
|
|
value: function render() {
|
|
|
var resetCount = this.state.resetCount;
|
|
|
var children = this.props.children;
|
|
|
var _this$getOnlyChild = this.getOnlyChild(children),
|
|
|
child = _this$getOnlyChild.child,
|
|
|
isFunction = _this$getOnlyChild.isFunction;
|
|
|
// Not need to `cloneElement` since user can handle this in render function self
|
|
|
var returnChildNode;
|
|
|
if (isFunction) {
|
|
|
returnChildNode = child;
|
|
|
} else if ( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_12__.isValidElement(child)) {
|
|
|
returnChildNode = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_12__.cloneElement(child, this.getControlled(child.props));
|
|
|
} else {
|
|
|
(0,rc_util_es_warning__WEBPACK_IMPORTED_MODULE_11__["default"])(!child, '`children` of Field is not validate ReactElement.');
|
|
|
returnChildNode = child;
|
|
|
}
|
|
|
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_12__.createElement(react__WEBPACK_IMPORTED_MODULE_12__.Fragment, {
|
|
|
key: resetCount
|
|
|
}, returnChildNode);
|
|
|
}
|
|
|
}]);
|
|
|
return Field;
|
|
|
}(react__WEBPACK_IMPORTED_MODULE_12__.Component);
|
|
|
Field.contextType = _FieldContext__WEBPACK_IMPORTED_MODULE_13__["default"];
|
|
|
Field.defaultProps = {
|
|
|
trigger: 'onChange',
|
|
|
valuePropName: 'value'
|
|
|
};
|
|
|
function WrapperField(_ref5) {
|
|
|
var name = _ref5.name,
|
|
|
restProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__["default"])(_ref5, _excluded);
|
|
|
var fieldContext = react__WEBPACK_IMPORTED_MODULE_12__.useContext(_FieldContext__WEBPACK_IMPORTED_MODULE_13__["default"]);
|
|
|
var namePath = name !== undefined ? (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_16__.getNamePath)(name) : undefined;
|
|
|
var key = 'keep';
|
|
|
if (!restProps.isListField) {
|
|
|
key = "_".concat((namePath || []).join('_'));
|
|
|
}
|
|
|
// Warning if it's a directly list field.
|
|
|
// We can still support multiple level field preserve.
|
|
|
if ( true && restProps.preserve === false && restProps.isListField && namePath.length <= 1) {
|
|
|
(0,rc_util_es_warning__WEBPACK_IMPORTED_MODULE_11__["default"])(false, '`preserve` should not apply on Form.List fields.');
|
|
|
}
|
|
|
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_12__.createElement(Field, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({
|
|
|
key: key,
|
|
|
name: namePath
|
|
|
}, restProps, {
|
|
|
fieldContext: fieldContext
|
|
|
}));
|
|
|
}
|
|
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (WrapperField);
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/rc-field-form/es/FieldContext.js":
|
|
|
/*!*******************************************************!*\
|
|
|
!*** ./node_modules/rc-field-form/es/FieldContext.js ***!
|
|
|
\*******************************************************/
|
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "HOOK_MARK": () => (/* binding */ HOOK_MARK),
|
|
|
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var rc_util_es_warning__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! rc-util/es/warning */ "./node_modules/rc-util/es/warning.js");
|
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
|
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
|
|
|
|
|
|
|
|
|
var HOOK_MARK = 'RC_FORM_INTERNAL_HOOKS';
|
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
|
var warningFunc = function warningFunc() {
|
|
|
(0,rc_util_es_warning__WEBPACK_IMPORTED_MODULE_0__["default"])(false, 'Can not find FormContext. Please make sure you wrap Field under Form.');
|
|
|
};
|
|
|
var Context = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createContext({
|
|
|
getFieldValue: warningFunc,
|
|
|
getFieldsValue: warningFunc,
|
|
|
getFieldError: warningFunc,
|
|
|
getFieldWarning: warningFunc,
|
|
|
getFieldsError: warningFunc,
|
|
|
isFieldsTouched: warningFunc,
|
|
|
isFieldTouched: warningFunc,
|
|
|
isFieldValidating: warningFunc,
|
|
|
isFieldsValidating: warningFunc,
|
|
|
resetFields: warningFunc,
|
|
|
setFields: warningFunc,
|
|
|
setFieldValue: warningFunc,
|
|
|
setFieldsValue: warningFunc,
|
|
|
validateFields: warningFunc,
|
|
|
submit: warningFunc,
|
|
|
getInternalHooks: function getInternalHooks() {
|
|
|
warningFunc();
|
|
|
return {
|
|
|
dispatch: warningFunc,
|
|
|
initEntityValue: warningFunc,
|
|
|
registerField: warningFunc,
|
|
|
useSubscribe: warningFunc,
|
|
|
setInitialValues: warningFunc,
|
|
|
destroyForm: warningFunc,
|
|
|
setCallbacks: warningFunc,
|
|
|
registerWatch: warningFunc,
|
|
|
getFields: warningFunc,
|
|
|
setValidateMessages: warningFunc,
|
|
|
setPreserve: warningFunc,
|
|
|
getInitialValue: warningFunc
|
|
|
};
|
|
|
}
|
|
|
});
|
|
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Context);
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/rc-field-form/es/Form.js":
|
|
|
/*!***********************************************!*\
|
|
|
!*** ./node_modules/rc-field-form/es/Form.js ***!
|
|
|
\***********************************************/
|
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "./node_modules/@babel/runtime/helpers/esm/extends.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "./node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "./node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "./node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js");
|
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
|
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_4__);
|
|
|
/* harmony import */ var _useForm__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./useForm */ "./node_modules/rc-field-form/es/useForm.js");
|
|
|
/* harmony import */ var _FieldContext__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./FieldContext */ "./node_modules/rc-field-form/es/FieldContext.js");
|
|
|
/* harmony import */ var _FormContext__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./FormContext */ "./node_modules/rc-field-form/es/FormContext.js");
|
|
|
/* harmony import */ var _utils_valueUtil__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./utils/valueUtil */ "./node_modules/rc-field-form/es/utils/valueUtil.js");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var _excluded = ["name", "initialValues", "fields", "form", "preserve", "children", "component", "validateMessages", "validateTrigger", "onValuesChange", "onFieldsChange", "onFinish", "onFinishFailed"];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var Form = function Form(_ref, ref) {
|
|
|
var name = _ref.name,
|
|
|
initialValues = _ref.initialValues,
|
|
|
fields = _ref.fields,
|
|
|
form = _ref.form,
|
|
|
preserve = _ref.preserve,
|
|
|
children = _ref.children,
|
|
|
_ref$component = _ref.component,
|
|
|
Component = _ref$component === void 0 ? 'form' : _ref$component,
|
|
|
validateMessages = _ref.validateMessages,
|
|
|
_ref$validateTrigger = _ref.validateTrigger,
|
|
|
validateTrigger = _ref$validateTrigger === void 0 ? 'onChange' : _ref$validateTrigger,
|
|
|
onValuesChange = _ref.onValuesChange,
|
|
|
_onFieldsChange = _ref.onFieldsChange,
|
|
|
_onFinish = _ref.onFinish,
|
|
|
onFinishFailed = _ref.onFinishFailed,
|
|
|
restProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_3__["default"])(_ref, _excluded);
|
|
|
var formContext = react__WEBPACK_IMPORTED_MODULE_4__.useContext(_FormContext__WEBPACK_IMPORTED_MODULE_7__["default"]);
|
|
|
// We customize handle event since Context will makes all the consumer re-render:
|
|
|
// https://reactjs.org/docs/context.html#contextprovider
|
|
|
var _useForm = (0,_useForm__WEBPACK_IMPORTED_MODULE_5__["default"])(form),
|
|
|
_useForm2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_useForm, 1),
|
|
|
formInstance = _useForm2[0];
|
|
|
var _formInstance$getInte = formInstance.getInternalHooks(_FieldContext__WEBPACK_IMPORTED_MODULE_6__.HOOK_MARK),
|
|
|
useSubscribe = _formInstance$getInte.useSubscribe,
|
|
|
setInitialValues = _formInstance$getInte.setInitialValues,
|
|
|
setCallbacks = _formInstance$getInte.setCallbacks,
|
|
|
setValidateMessages = _formInstance$getInte.setValidateMessages,
|
|
|
setPreserve = _formInstance$getInte.setPreserve,
|
|
|
destroyForm = _formInstance$getInte.destroyForm;
|
|
|
// Pass ref with form instance
|
|
|
react__WEBPACK_IMPORTED_MODULE_4__.useImperativeHandle(ref, function () {
|
|
|
return formInstance;
|
|
|
});
|
|
|
// Register form into Context
|
|
|
react__WEBPACK_IMPORTED_MODULE_4__.useEffect(function () {
|
|
|
formContext.registerForm(name, formInstance);
|
|
|
return function () {
|
|
|
formContext.unregisterForm(name);
|
|
|
};
|
|
|
}, [formContext, formInstance, name]);
|
|
|
// Pass props to store
|
|
|
setValidateMessages((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, formContext.validateMessages), validateMessages));
|
|
|
setCallbacks({
|
|
|
onValuesChange: onValuesChange,
|
|
|
onFieldsChange: function onFieldsChange(changedFields) {
|
|
|
formContext.triggerFormChange(name, changedFields);
|
|
|
if (_onFieldsChange) {
|
|
|
for (var _len = arguments.length, rest = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
|
|
rest[_key - 1] = arguments[_key];
|
|
|
}
|
|
|
_onFieldsChange.apply(void 0, [changedFields].concat(rest));
|
|
|
}
|
|
|
},
|
|
|
onFinish: function onFinish(values) {
|
|
|
formContext.triggerFormFinish(name, values);
|
|
|
if (_onFinish) {
|
|
|
_onFinish(values);
|
|
|
}
|
|
|
},
|
|
|
onFinishFailed: onFinishFailed
|
|
|
});
|
|
|
setPreserve(preserve);
|
|
|
// Set initial value, init store value when first mount
|
|
|
var mountRef = react__WEBPACK_IMPORTED_MODULE_4__.useRef(null);
|
|
|
setInitialValues(initialValues, !mountRef.current);
|
|
|
if (!mountRef.current) {
|
|
|
mountRef.current = true;
|
|
|
}
|
|
|
react__WEBPACK_IMPORTED_MODULE_4__.useEffect(function () {
|
|
|
return destroyForm;
|
|
|
},
|
|
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
|
[]);
|
|
|
// Prepare children by `children` type
|
|
|
var childrenNode;
|
|
|
var childrenRenderProps = typeof children === 'function';
|
|
|
if (childrenRenderProps) {
|
|
|
var values = formInstance.getFieldsValue(true);
|
|
|
childrenNode = children(values, formInstance);
|
|
|
} else {
|
|
|
childrenNode = children;
|
|
|
}
|
|
|
// Not use subscribe when using render props
|
|
|
useSubscribe(!childrenRenderProps);
|
|
|
// Listen if fields provided. We use ref to save prev data here to avoid additional render
|
|
|
var prevFieldsRef = react__WEBPACK_IMPORTED_MODULE_4__.useRef();
|
|
|
react__WEBPACK_IMPORTED_MODULE_4__.useEffect(function () {
|
|
|
if (!(0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_8__.isSimilar)(prevFieldsRef.current || [], fields || [])) {
|
|
|
formInstance.setFields(fields || []);
|
|
|
}
|
|
|
prevFieldsRef.current = fields;
|
|
|
}, [fields, formInstance]);
|
|
|
var formContextValue = react__WEBPACK_IMPORTED_MODULE_4__.useMemo(function () {
|
|
|
return (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, formInstance), {}, {
|
|
|
validateTrigger: validateTrigger
|
|
|
});
|
|
|
}, [formInstance, validateTrigger]);
|
|
|
var wrapperNode = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.createElement(_FieldContext__WEBPACK_IMPORTED_MODULE_6__["default"].Provider, {
|
|
|
value: formContextValue
|
|
|
}, childrenNode);
|
|
|
if (Component === false) {
|
|
|
return wrapperNode;
|
|
|
}
|
|
|
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.createElement(Component, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, restProps, {
|
|
|
onSubmit: function onSubmit(event) {
|
|
|
event.preventDefault();
|
|
|
event.stopPropagation();
|
|
|
formInstance.submit();
|
|
|
},
|
|
|
onReset: function onReset(event) {
|
|
|
var _restProps$onReset;
|
|
|
event.preventDefault();
|
|
|
formInstance.resetFields();
|
|
|
(_restProps$onReset = restProps.onReset) === null || _restProps$onReset === void 0 ? void 0 : _restProps$onReset.call(restProps, event);
|
|
|
}
|
|
|
}), wrapperNode);
|
|
|
};
|
|
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Form);
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/rc-field-form/es/FormContext.js":
|
|
|
/*!******************************************************!*\
|
|
|
!*** ./node_modules/rc-field-form/es/FormContext.js ***!
|
|
|
\******************************************************/
|
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "FormProvider": () => (/* binding */ FormProvider),
|
|
|
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "./node_modules/@babel/runtime/helpers/esm/defineProperty.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "./node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
|
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
|
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);
|
|
|
|
|
|
|
|
|
|
|
|
var FormContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createContext({
|
|
|
triggerFormChange: function triggerFormChange() {},
|
|
|
triggerFormFinish: function triggerFormFinish() {},
|
|
|
registerForm: function registerForm() {},
|
|
|
unregisterForm: function unregisterForm() {}
|
|
|
});
|
|
|
var FormProvider = function FormProvider(_ref) {
|
|
|
var validateMessages = _ref.validateMessages,
|
|
|
onFormChange = _ref.onFormChange,
|
|
|
onFormFinish = _ref.onFormFinish,
|
|
|
children = _ref.children;
|
|
|
var formContext = react__WEBPACK_IMPORTED_MODULE_2__.useContext(FormContext);
|
|
|
var formsRef = react__WEBPACK_IMPORTED_MODULE_2__.useRef({});
|
|
|
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement(FormContext.Provider, {
|
|
|
value: (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, formContext), {}, {
|
|
|
validateMessages: (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, formContext.validateMessages), validateMessages),
|
|
|
// =========================================================
|
|
|
// = Global Form Control =
|
|
|
// =========================================================
|
|
|
triggerFormChange: function triggerFormChange(name, changedFields) {
|
|
|
if (onFormChange) {
|
|
|
onFormChange(name, {
|
|
|
changedFields: changedFields,
|
|
|
forms: formsRef.current
|
|
|
});
|
|
|
}
|
|
|
formContext.triggerFormChange(name, changedFields);
|
|
|
},
|
|
|
triggerFormFinish: function triggerFormFinish(name, values) {
|
|
|
if (onFormFinish) {
|
|
|
onFormFinish(name, {
|
|
|
values: values,
|
|
|
forms: formsRef.current
|
|
|
});
|
|
|
}
|
|
|
formContext.triggerFormFinish(name, values);
|
|
|
},
|
|
|
registerForm: function registerForm(name, form) {
|
|
|
if (name) {
|
|
|
formsRef.current = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, formsRef.current), {}, (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])({}, name, form));
|
|
|
}
|
|
|
formContext.registerForm(name, form);
|
|
|
},
|
|
|
unregisterForm: function unregisterForm(name) {
|
|
|
var newForms = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, formsRef.current);
|
|
|
delete newForms[name];
|
|
|
formsRef.current = newForms;
|
|
|
formContext.unregisterForm(name);
|
|
|
}
|
|
|
})
|
|
|
}, children);
|
|
|
};
|
|
|
|
|
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (FormContext);
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/rc-field-form/es/List.js":
|
|
|
/*!***********************************************!*\
|
|
|
!*** ./node_modules/rc-field-form/es/List.js ***!
|
|
|
\***********************************************/
|
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "./node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js");
|
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
|
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);
|
|
|
/* harmony import */ var rc_util_es_warning__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! rc-util/es/warning */ "./node_modules/rc-util/es/warning.js");
|
|
|
/* harmony import */ var _FieldContext__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./FieldContext */ "./node_modules/rc-field-form/es/FieldContext.js");
|
|
|
/* harmony import */ var _Field__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./Field */ "./node_modules/rc-field-form/es/Field.js");
|
|
|
/* harmony import */ var _utils_valueUtil__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./utils/valueUtil */ "./node_modules/rc-field-form/es/utils/valueUtil.js");
|
|
|
/* harmony import */ var _ListContext__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./ListContext */ "./node_modules/rc-field-form/es/ListContext.js");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var List = function List(_ref) {
|
|
|
var name = _ref.name,
|
|
|
initialValue = _ref.initialValue,
|
|
|
children = _ref.children,
|
|
|
rules = _ref.rules,
|
|
|
validateTrigger = _ref.validateTrigger;
|
|
|
var context = react__WEBPACK_IMPORTED_MODULE_2__.useContext(_FieldContext__WEBPACK_IMPORTED_MODULE_4__["default"]);
|
|
|
var keyRef = react__WEBPACK_IMPORTED_MODULE_2__.useRef({
|
|
|
keys: [],
|
|
|
id: 0
|
|
|
});
|
|
|
var keyManager = keyRef.current;
|
|
|
var prefixName = react__WEBPACK_IMPORTED_MODULE_2__.useMemo(function () {
|
|
|
var parentPrefixName = (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_6__.getNamePath)(context.prefixName) || [];
|
|
|
return [].concat((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__["default"])(parentPrefixName), (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_6__.getNamePath)(name)));
|
|
|
}, [context.prefixName, name]);
|
|
|
var fieldContext = react__WEBPACK_IMPORTED_MODULE_2__.useMemo(function () {
|
|
|
return (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, context), {}, {
|
|
|
prefixName: prefixName
|
|
|
});
|
|
|
}, [context, prefixName]);
|
|
|
// List context
|
|
|
var listContext = react__WEBPACK_IMPORTED_MODULE_2__.useMemo(function () {
|
|
|
return {
|
|
|
getKey: function getKey(namePath) {
|
|
|
var len = prefixName.length;
|
|
|
var pathName = namePath[len];
|
|
|
return [keyManager.keys[pathName], namePath.slice(len + 1)];
|
|
|
}
|
|
|
};
|
|
|
}, [prefixName]);
|
|
|
// User should not pass `children` as other type.
|
|
|
if (typeof children !== 'function') {
|
|
|
(0,rc_util_es_warning__WEBPACK_IMPORTED_MODULE_3__["default"])(false, 'Form.List only accepts function as children.');
|
|
|
return null;
|
|
|
}
|
|
|
var shouldUpdate = function shouldUpdate(prevValue, nextValue, _ref2) {
|
|
|
var source = _ref2.source;
|
|
|
if (source === 'internal') {
|
|
|
return false;
|
|
|
}
|
|
|
return prevValue !== nextValue;
|
|
|
};
|
|
|
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement(_ListContext__WEBPACK_IMPORTED_MODULE_7__["default"].Provider, {
|
|
|
value: listContext
|
|
|
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement(_FieldContext__WEBPACK_IMPORTED_MODULE_4__["default"].Provider, {
|
|
|
value: fieldContext
|
|
|
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.createElement(_Field__WEBPACK_IMPORTED_MODULE_5__["default"], {
|
|
|
name: [],
|
|
|
shouldUpdate: shouldUpdate,
|
|
|
rules: rules,
|
|
|
validateTrigger: validateTrigger,
|
|
|
initialValue: initialValue,
|
|
|
isList: true
|
|
|
}, function (_ref3, meta) {
|
|
|
var _ref3$value = _ref3.value,
|
|
|
value = _ref3$value === void 0 ? [] : _ref3$value,
|
|
|
onChange = _ref3.onChange;
|
|
|
var getFieldValue = context.getFieldValue;
|
|
|
var getNewValue = function getNewValue() {
|
|
|
var values = getFieldValue(prefixName || []);
|
|
|
return values || [];
|
|
|
};
|
|
|
/**
|
|
|
* Always get latest value in case user update fields by `form` api.
|
|
|
*/
|
|
|
var operations = {
|
|
|
add: function add(defaultValue, index) {
|
|
|
// Mapping keys
|
|
|
var newValue = getNewValue();
|
|
|
if (index >= 0 && index <= newValue.length) {
|
|
|
keyManager.keys = [].concat((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__["default"])(keyManager.keys.slice(0, index)), [keyManager.id], (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__["default"])(keyManager.keys.slice(index)));
|
|
|
onChange([].concat((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__["default"])(newValue.slice(0, index)), [defaultValue], (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__["default"])(newValue.slice(index))));
|
|
|
} else {
|
|
|
if ( true && (index < 0 || index > newValue.length)) {
|
|
|
(0,rc_util_es_warning__WEBPACK_IMPORTED_MODULE_3__["default"])(false, 'The second parameter of the add function should be a valid positive number.');
|
|
|
}
|
|
|
keyManager.keys = [].concat((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__["default"])(keyManager.keys), [keyManager.id]);
|
|
|
onChange([].concat((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__["default"])(newValue), [defaultValue]));
|
|
|
}
|
|
|
keyManager.id += 1;
|
|
|
},
|
|
|
remove: function remove(index) {
|
|
|
var newValue = getNewValue();
|
|
|
var indexSet = new Set(Array.isArray(index) ? index : [index]);
|
|
|
if (indexSet.size <= 0) {
|
|
|
return;
|
|
|
}
|
|
|
keyManager.keys = keyManager.keys.filter(function (_, keysIndex) {
|
|
|
return !indexSet.has(keysIndex);
|
|
|
});
|
|
|
// Trigger store change
|
|
|
onChange(newValue.filter(function (_, valueIndex) {
|
|
|
return !indexSet.has(valueIndex);
|
|
|
}));
|
|
|
},
|
|
|
move: function move(from, to) {
|
|
|
if (from === to) {
|
|
|
return;
|
|
|
}
|
|
|
var newValue = getNewValue();
|
|
|
// Do not handle out of range
|
|
|
if (from < 0 || from >= newValue.length || to < 0 || to >= newValue.length) {
|
|
|
return;
|
|
|
}
|
|
|
keyManager.keys = (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_6__.move)(keyManager.keys, from, to);
|
|
|
// Trigger store change
|
|
|
onChange((0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_6__.move)(newValue, from, to));
|
|
|
}
|
|
|
};
|
|
|
var listValue = value || [];
|
|
|
if (!Array.isArray(listValue)) {
|
|
|
listValue = [];
|
|
|
if (true) {
|
|
|
(0,rc_util_es_warning__WEBPACK_IMPORTED_MODULE_3__["default"])(false, "Current value of '".concat(prefixName.join(' > '), "' is not an array type."));
|
|
|
}
|
|
|
}
|
|
|
return children(listValue.map(function (__, index) {
|
|
|
var key = keyManager.keys[index];
|
|
|
if (key === undefined) {
|
|
|
keyManager.keys[index] = keyManager.id;
|
|
|
key = keyManager.keys[index];
|
|
|
keyManager.id += 1;
|
|
|
}
|
|
|
return {
|
|
|
name: index,
|
|
|
key: key,
|
|
|
isListField: true
|
|
|
};
|
|
|
}), operations, meta);
|
|
|
})));
|
|
|
};
|
|
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (List);
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/rc-field-form/es/ListContext.js":
|
|
|
/*!******************************************************!*\
|
|
|
!*** ./node_modules/rc-field-form/es/ListContext.js ***!
|
|
|
\******************************************************/
|
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
|
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
|
|
|
|
var ListContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext(null);
|
|
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ListContext);
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/rc-field-form/es/index.js":
|
|
|
/*!************************************************!*\
|
|
|
!*** ./node_modules/rc-field-form/es/index.js ***!
|
|
|
\************************************************/
|
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "Field": () => (/* reexport safe */ _Field__WEBPACK_IMPORTED_MODULE_1__["default"]),
|
|
|
/* harmony export */ "FieldContext": () => (/* reexport safe */ _FieldContext__WEBPACK_IMPORTED_MODULE_6__["default"]),
|
|
|
/* harmony export */ "FormProvider": () => (/* reexport safe */ _FormContext__WEBPACK_IMPORTED_MODULE_5__.FormProvider),
|
|
|
/* harmony export */ "List": () => (/* reexport safe */ _List__WEBPACK_IMPORTED_MODULE_2__["default"]),
|
|
|
/* harmony export */ "ListContext": () => (/* reexport safe */ _ListContext__WEBPACK_IMPORTED_MODULE_7__["default"]),
|
|
|
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__),
|
|
|
/* harmony export */ "useForm": () => (/* reexport safe */ _useForm__WEBPACK_IMPORTED_MODULE_3__["default"]),
|
|
|
/* harmony export */ "useWatch": () => (/* reexport safe */ _useWatch__WEBPACK_IMPORTED_MODULE_8__["default"])
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
|
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
|
/* harmony import */ var _Field__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Field */ "./node_modules/rc-field-form/es/Field.js");
|
|
|
/* harmony import */ var _List__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./List */ "./node_modules/rc-field-form/es/List.js");
|
|
|
/* harmony import */ var _useForm__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./useForm */ "./node_modules/rc-field-form/es/useForm.js");
|
|
|
/* harmony import */ var _Form__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./Form */ "./node_modules/rc-field-form/es/Form.js");
|
|
|
/* harmony import */ var _FormContext__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./FormContext */ "./node_modules/rc-field-form/es/FormContext.js");
|
|
|
/* harmony import */ var _FieldContext__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./FieldContext */ "./node_modules/rc-field-form/es/FieldContext.js");
|
|
|
/* harmony import */ var _ListContext__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./ListContext */ "./node_modules/rc-field-form/es/ListContext.js");
|
|
|
/* harmony import */ var _useWatch__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./useWatch */ "./node_modules/rc-field-form/es/useWatch.js");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var InternalForm = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(_Form__WEBPACK_IMPORTED_MODULE_4__["default"]);
|
|
|
var RefForm = InternalForm;
|
|
|
RefForm.FormProvider = _FormContext__WEBPACK_IMPORTED_MODULE_5__.FormProvider;
|
|
|
RefForm.Field = _Field__WEBPACK_IMPORTED_MODULE_1__["default"];
|
|
|
RefForm.List = _List__WEBPACK_IMPORTED_MODULE_2__["default"];
|
|
|
RefForm.useForm = _useForm__WEBPACK_IMPORTED_MODULE_3__["default"];
|
|
|
RefForm.useWatch = _useWatch__WEBPACK_IMPORTED_MODULE_8__["default"];
|
|
|
|
|
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (RefForm);
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/rc-field-form/es/useForm.js":
|
|
|
/*!**************************************************!*\
|
|
|
!*** ./node_modules/rc-field-form/es/useForm.js ***!
|
|
|
\**************************************************/
|
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "FormStore": () => (/* binding */ FormStore),
|
|
|
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "./node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "./node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "./node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/esm/createClass */ "./node_modules/@babel/runtime/helpers/esm/createClass.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/esm/classCallCheck */ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js");
|
|
|
/* harmony import */ var rc_util_es_warning__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! rc-util/es/warning */ "./node_modules/rc-util/es/warning.js");
|
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
|
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_7__);
|
|
|
/* harmony import */ var _FieldContext__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./FieldContext */ "./node_modules/rc-field-form/es/FieldContext.js");
|
|
|
/* harmony import */ var _utils_asyncUtil__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./utils/asyncUtil */ "./node_modules/rc-field-form/es/utils/asyncUtil.js");
|
|
|
/* harmony import */ var _utils_cloneDeep__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./utils/cloneDeep */ "./node_modules/rc-field-form/es/utils/cloneDeep.js");
|
|
|
/* harmony import */ var _utils_messages__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./utils/messages */ "./node_modules/rc-field-form/es/utils/messages.js");
|
|
|
/* harmony import */ var _utils_NameMap__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./utils/NameMap */ "./node_modules/rc-field-form/es/utils/NameMap.js");
|
|
|
/* harmony import */ var _utils_valueUtil__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./utils/valueUtil */ "./node_modules/rc-field-form/es/utils/valueUtil.js");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var _excluded = ["name", "errors"];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var FormStore = /*#__PURE__*/(0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_4__["default"])(function FormStore(forceRootUpdate) {
|
|
|
var _this = this;
|
|
|
(0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_5__["default"])(this, FormStore);
|
|
|
this.formHooked = false;
|
|
|
this.forceRootUpdate = void 0;
|
|
|
this.subscribable = true;
|
|
|
this.store = {};
|
|
|
this.fieldEntities = [];
|
|
|
this.initialValues = {};
|
|
|
this.callbacks = {};
|
|
|
this.validateMessages = null;
|
|
|
this.preserve = null;
|
|
|
this.lastValidatePromise = null;
|
|
|
this.getForm = function () {
|
|
|
return {
|
|
|
getFieldValue: _this.getFieldValue,
|
|
|
getFieldsValue: _this.getFieldsValue,
|
|
|
getFieldError: _this.getFieldError,
|
|
|
getFieldWarning: _this.getFieldWarning,
|
|
|
getFieldsError: _this.getFieldsError,
|
|
|
isFieldsTouched: _this.isFieldsTouched,
|
|
|
isFieldTouched: _this.isFieldTouched,
|
|
|
isFieldValidating: _this.isFieldValidating,
|
|
|
isFieldsValidating: _this.isFieldsValidating,
|
|
|
resetFields: _this.resetFields,
|
|
|
setFields: _this.setFields,
|
|
|
setFieldValue: _this.setFieldValue,
|
|
|
setFieldsValue: _this.setFieldsValue,
|
|
|
validateFields: _this.validateFields,
|
|
|
submit: _this.submit,
|
|
|
_init: true,
|
|
|
getInternalHooks: _this.getInternalHooks
|
|
|
};
|
|
|
};
|
|
|
this.getInternalHooks = function (key) {
|
|
|
if (key === _FieldContext__WEBPACK_IMPORTED_MODULE_8__.HOOK_MARK) {
|
|
|
_this.formHooked = true;
|
|
|
return {
|
|
|
dispatch: _this.dispatch,
|
|
|
initEntityValue: _this.initEntityValue,
|
|
|
registerField: _this.registerField,
|
|
|
useSubscribe: _this.useSubscribe,
|
|
|
setInitialValues: _this.setInitialValues,
|
|
|
destroyForm: _this.destroyForm,
|
|
|
setCallbacks: _this.setCallbacks,
|
|
|
setValidateMessages: _this.setValidateMessages,
|
|
|
getFields: _this.getFields,
|
|
|
setPreserve: _this.setPreserve,
|
|
|
getInitialValue: _this.getInitialValue,
|
|
|
registerWatch: _this.registerWatch
|
|
|
};
|
|
|
}
|
|
|
(0,rc_util_es_warning__WEBPACK_IMPORTED_MODULE_6__["default"])(false, '`getInternalHooks` is internal usage. Should not call directly.');
|
|
|
return null;
|
|
|
};
|
|
|
this.useSubscribe = function (subscribable) {
|
|
|
_this.subscribable = subscribable;
|
|
|
};
|
|
|
this.prevWithoutPreserves = null;
|
|
|
this.setInitialValues = function (initialValues, init) {
|
|
|
_this.initialValues = initialValues || {};
|
|
|
if (init) {
|
|
|
var _this$prevWithoutPres;
|
|
|
var nextStore = (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_13__.setValues)({}, initialValues, _this.store);
|
|
|
// We will take consider prev form unmount fields.
|
|
|
// When the field is not `preserve`, we need fill this with initialValues instead of store.
|
|
|
// eslint-disable-next-line array-callback-return
|
|
|
(_this$prevWithoutPres = _this.prevWithoutPreserves) === null || _this$prevWithoutPres === void 0 ? void 0 : _this$prevWithoutPres.map(function (_ref) {
|
|
|
var namePath = _ref.key;
|
|
|
nextStore = (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_13__.setValue)(nextStore, namePath, (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_13__.getValue)(initialValues, namePath));
|
|
|
});
|
|
|
_this.prevWithoutPreserves = null;
|
|
|
_this.updateStore(nextStore);
|
|
|
}
|
|
|
};
|
|
|
this.destroyForm = function () {
|
|
|
var prevWithoutPreserves = new _utils_NameMap__WEBPACK_IMPORTED_MODULE_12__["default"]();
|
|
|
_this.getFieldEntities(true).forEach(function (entity) {
|
|
|
if (!_this.isMergedPreserve(entity.isPreserve())) {
|
|
|
prevWithoutPreserves.set(entity.getNamePath(), true);
|
|
|
}
|
|
|
});
|
|
|
_this.prevWithoutPreserves = prevWithoutPreserves;
|
|
|
};
|
|
|
this.getInitialValue = function (namePath) {
|
|
|
var initValue = (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_13__.getValue)(_this.initialValues, namePath);
|
|
|
// Not cloneDeep when without `namePath`
|
|
|
return namePath.length ? (0,_utils_cloneDeep__WEBPACK_IMPORTED_MODULE_10__["default"])(initValue) : initValue;
|
|
|
};
|
|
|
this.setCallbacks = function (callbacks) {
|
|
|
_this.callbacks = callbacks;
|
|
|
};
|
|
|
this.setValidateMessages = function (validateMessages) {
|
|
|
_this.validateMessages = validateMessages;
|
|
|
};
|
|
|
this.setPreserve = function (preserve) {
|
|
|
_this.preserve = preserve;
|
|
|
};
|
|
|
this.watchList = [];
|
|
|
this.registerWatch = function (callback) {
|
|
|
_this.watchList.push(callback);
|
|
|
return function () {
|
|
|
_this.watchList = _this.watchList.filter(function (fn) {
|
|
|
return fn !== callback;
|
|
|
});
|
|
|
};
|
|
|
};
|
|
|
this.notifyWatch = function () {
|
|
|
var namePath = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
|
// No need to cost perf when nothing need to watch
|
|
|
if (_this.watchList.length) {
|
|
|
var values = _this.getFieldsValue();
|
|
|
_this.watchList.forEach(function (callback) {
|
|
|
callback(values, namePath);
|
|
|
});
|
|
|
}
|
|
|
};
|
|
|
this.timeoutId = null;
|
|
|
this.warningUnhooked = function () {
|
|
|
if ( true && !_this.timeoutId && typeof window !== 'undefined') {
|
|
|
_this.timeoutId = setTimeout(function () {
|
|
|
_this.timeoutId = null;
|
|
|
if (!_this.formHooked) {
|
|
|
(0,rc_util_es_warning__WEBPACK_IMPORTED_MODULE_6__["default"])(false, 'Instance created by `useForm` is not connected to any Form element. Forget to pass `form` prop?');
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
};
|
|
|
this.updateStore = function (nextStore) {
|
|
|
_this.store = nextStore;
|
|
|
};
|
|
|
this.getFieldEntities = function () {
|
|
|
var pure = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
|
if (!pure) {
|
|
|
return _this.fieldEntities;
|
|
|
}
|
|
|
return _this.fieldEntities.filter(function (field) {
|
|
|
return field.getNamePath().length;
|
|
|
});
|
|
|
};
|
|
|
this.getFieldsMap = function () {
|
|
|
var pure = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
|
var cache = new _utils_NameMap__WEBPACK_IMPORTED_MODULE_12__["default"]();
|
|
|
_this.getFieldEntities(pure).forEach(function (field) {
|
|
|
var namePath = field.getNamePath();
|
|
|
cache.set(namePath, field);
|
|
|
});
|
|
|
return cache;
|
|
|
};
|
|
|
this.getFieldEntitiesForNamePathList = function (nameList) {
|
|
|
if (!nameList) {
|
|
|
return _this.getFieldEntities(true);
|
|
|
}
|
|
|
var cache = _this.getFieldsMap(true);
|
|
|
return nameList.map(function (name) {
|
|
|
var namePath = (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_13__.getNamePath)(name);
|
|
|
return cache.get(namePath) || {
|
|
|
INVALIDATE_NAME_PATH: (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_13__.getNamePath)(name)
|
|
|
};
|
|
|
});
|
|
|
};
|
|
|
this.getFieldsValue = function (nameList, filterFunc) {
|
|
|
_this.warningUnhooked();
|
|
|
if (nameList === true && !filterFunc) {
|
|
|
return _this.store;
|
|
|
}
|
|
|
var fieldEntities = _this.getFieldEntitiesForNamePathList(Array.isArray(nameList) ? nameList : null);
|
|
|
var filteredNameList = [];
|
|
|
fieldEntities.forEach(function (entity) {
|
|
|
var _entity$isListField;
|
|
|
var namePath = 'INVALIDATE_NAME_PATH' in entity ? entity.INVALIDATE_NAME_PATH : entity.getNamePath();
|
|
|
// Ignore when it's a list item and not specific the namePath,
|
|
|
// since parent field is already take in count
|
|
|
if (!nameList && ((_entity$isListField = entity.isListField) === null || _entity$isListField === void 0 ? void 0 : _entity$isListField.call(entity))) {
|
|
|
return;
|
|
|
}
|
|
|
if (!filterFunc) {
|
|
|
filteredNameList.push(namePath);
|
|
|
} else {
|
|
|
var meta = 'getMeta' in entity ? entity.getMeta() : null;
|
|
|
if (filterFunc(meta)) {
|
|
|
filteredNameList.push(namePath);
|
|
|
}
|
|
|
}
|
|
|
});
|
|
|
return (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_13__.cloneByNamePathList)(_this.store, filteredNameList.map(_utils_valueUtil__WEBPACK_IMPORTED_MODULE_13__.getNamePath));
|
|
|
};
|
|
|
this.getFieldValue = function (name) {
|
|
|
_this.warningUnhooked();
|
|
|
var namePath = (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_13__.getNamePath)(name);
|
|
|
return (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_13__.getValue)(_this.store, namePath);
|
|
|
};
|
|
|
this.getFieldsError = function (nameList) {
|
|
|
_this.warningUnhooked();
|
|
|
var fieldEntities = _this.getFieldEntitiesForNamePathList(nameList);
|
|
|
return fieldEntities.map(function (entity, index) {
|
|
|
if (entity && !('INVALIDATE_NAME_PATH' in entity)) {
|
|
|
return {
|
|
|
name: entity.getNamePath(),
|
|
|
errors: entity.getErrors(),
|
|
|
warnings: entity.getWarnings()
|
|
|
};
|
|
|
}
|
|
|
return {
|
|
|
name: (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_13__.getNamePath)(nameList[index]),
|
|
|
errors: [],
|
|
|
warnings: []
|
|
|
};
|
|
|
});
|
|
|
};
|
|
|
this.getFieldError = function (name) {
|
|
|
_this.warningUnhooked();
|
|
|
var namePath = (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_13__.getNamePath)(name);
|
|
|
var fieldError = _this.getFieldsError([namePath])[0];
|
|
|
return fieldError.errors;
|
|
|
};
|
|
|
this.getFieldWarning = function (name) {
|
|
|
_this.warningUnhooked();
|
|
|
var namePath = (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_13__.getNamePath)(name);
|
|
|
var fieldError = _this.getFieldsError([namePath])[0];
|
|
|
return fieldError.warnings;
|
|
|
};
|
|
|
this.isFieldsTouched = function () {
|
|
|
_this.warningUnhooked();
|
|
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
|
args[_key] = arguments[_key];
|
|
|
}
|
|
|
var arg0 = args[0],
|
|
|
arg1 = args[1];
|
|
|
var namePathList;
|
|
|
var isAllFieldsTouched = false;
|
|
|
if (args.length === 0) {
|
|
|
namePathList = null;
|
|
|
} else if (args.length === 1) {
|
|
|
if (Array.isArray(arg0)) {
|
|
|
namePathList = arg0.map(_utils_valueUtil__WEBPACK_IMPORTED_MODULE_13__.getNamePath);
|
|
|
isAllFieldsTouched = false;
|
|
|
} else {
|
|
|
namePathList = null;
|
|
|
isAllFieldsTouched = arg0;
|
|
|
}
|
|
|
} else {
|
|
|
namePathList = arg0.map(_utils_valueUtil__WEBPACK_IMPORTED_MODULE_13__.getNamePath);
|
|
|
isAllFieldsTouched = arg1;
|
|
|
}
|
|
|
var fieldEntities = _this.getFieldEntities(true);
|
|
|
var isFieldTouched = function isFieldTouched(field) {
|
|
|
return field.isFieldTouched();
|
|
|
};
|
|
|
// ===== Will get fully compare when not config namePathList =====
|
|
|
if (!namePathList) {
|
|
|
return isAllFieldsTouched ? fieldEntities.every(isFieldTouched) : fieldEntities.some(isFieldTouched);
|
|
|
}
|
|
|
// Generate a nest tree for validate
|
|
|
var map = new _utils_NameMap__WEBPACK_IMPORTED_MODULE_12__["default"]();
|
|
|
namePathList.forEach(function (shortNamePath) {
|
|
|
map.set(shortNamePath, []);
|
|
|
});
|
|
|
fieldEntities.forEach(function (field) {
|
|
|
var fieldNamePath = field.getNamePath();
|
|
|
// Find matched entity and put into list
|
|
|
namePathList.forEach(function (shortNamePath) {
|
|
|
if (shortNamePath.every(function (nameUnit, i) {
|
|
|
return fieldNamePath[i] === nameUnit;
|
|
|
})) {
|
|
|
map.update(shortNamePath, function (list) {
|
|
|
return [].concat((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_3__["default"])(list), [field]);
|
|
|
});
|
|
|
}
|
|
|
});
|
|
|
});
|
|
|
// Check if NameMap value is touched
|
|
|
var isNamePathListTouched = function isNamePathListTouched(entities) {
|
|
|
return entities.some(isFieldTouched);
|
|
|
};
|
|
|
var namePathListEntities = map.map(function (_ref2) {
|
|
|
var value = _ref2.value;
|
|
|
return value;
|
|
|
});
|
|
|
return isAllFieldsTouched ? namePathListEntities.every(isNamePathListTouched) : namePathListEntities.some(isNamePathListTouched);
|
|
|
};
|
|
|
this.isFieldTouched = function (name) {
|
|
|
_this.warningUnhooked();
|
|
|
return _this.isFieldsTouched([name]);
|
|
|
};
|
|
|
this.isFieldsValidating = function (nameList) {
|
|
|
_this.warningUnhooked();
|
|
|
var fieldEntities = _this.getFieldEntities();
|
|
|
if (!nameList) {
|
|
|
return fieldEntities.some(function (testField) {
|
|
|
return testField.isFieldValidating();
|
|
|
});
|
|
|
}
|
|
|
var namePathList = nameList.map(_utils_valueUtil__WEBPACK_IMPORTED_MODULE_13__.getNamePath);
|
|
|
return fieldEntities.some(function (testField) {
|
|
|
var fieldNamePath = testField.getNamePath();
|
|
|
return (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_13__.containsNamePath)(namePathList, fieldNamePath) && testField.isFieldValidating();
|
|
|
});
|
|
|
};
|
|
|
this.isFieldValidating = function (name) {
|
|
|
_this.warningUnhooked();
|
|
|
return _this.isFieldsValidating([name]);
|
|
|
};
|
|
|
this.resetWithFieldInitialValue = function () {
|
|
|
var info = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
|
// Create cache
|
|
|
var cache = new _utils_NameMap__WEBPACK_IMPORTED_MODULE_12__["default"]();
|
|
|
var fieldEntities = _this.getFieldEntities(true);
|
|
|
fieldEntities.forEach(function (field) {
|
|
|
var initialValue = field.props.initialValue;
|
|
|
var namePath = field.getNamePath();
|
|
|
// Record only if has `initialValue`
|
|
|
if (initialValue !== undefined) {
|
|
|
var records = cache.get(namePath) || new Set();
|
|
|
records.add({
|
|
|
entity: field,
|
|
|
value: initialValue
|
|
|
});
|
|
|
cache.set(namePath, records);
|
|
|
}
|
|
|
});
|
|
|
// Reset
|
|
|
var resetWithFields = function resetWithFields(entities) {
|
|
|
entities.forEach(function (field) {
|
|
|
var initialValue = field.props.initialValue;
|
|
|
if (initialValue !== undefined) {
|
|
|
var namePath = field.getNamePath();
|
|
|
var formInitialValue = _this.getInitialValue(namePath);
|
|
|
if (formInitialValue !== undefined) {
|
|
|
// Warning if conflict with form initialValues and do not modify value
|
|
|
(0,rc_util_es_warning__WEBPACK_IMPORTED_MODULE_6__["default"])(false, "Form already set 'initialValues' with path '".concat(namePath.join('.'), "'. Field can not overwrite it."));
|
|
|
} else {
|
|
|
var records = cache.get(namePath);
|
|
|
if (records && records.size > 1) {
|
|
|
// Warning if multiple field set `initialValue`and do not modify value
|
|
|
(0,rc_util_es_warning__WEBPACK_IMPORTED_MODULE_6__["default"])(false, "Multiple Field with path '".concat(namePath.join('.'), "' set 'initialValue'. Can not decide which one to pick."));
|
|
|
} else if (records) {
|
|
|
var originValue = _this.getFieldValue(namePath);
|
|
|
// Set `initialValue`
|
|
|
if (!info.skipExist || originValue === undefined) {
|
|
|
_this.updateStore((0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_13__.setValue)(_this.store, namePath, (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_3__["default"])(records)[0].value));
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
});
|
|
|
};
|
|
|
var requiredFieldEntities;
|
|
|
if (info.entities) {
|
|
|
requiredFieldEntities = info.entities;
|
|
|
} else if (info.namePathList) {
|
|
|
requiredFieldEntities = [];
|
|
|
info.namePathList.forEach(function (namePath) {
|
|
|
var records = cache.get(namePath);
|
|
|
if (records) {
|
|
|
var _requiredFieldEntitie;
|
|
|
(_requiredFieldEntitie = requiredFieldEntities).push.apply(_requiredFieldEntitie, (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_3__["default"])((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_3__["default"])(records).map(function (r) {
|
|
|
return r.entity;
|
|
|
})));
|
|
|
}
|
|
|
});
|
|
|
} else {
|
|
|
requiredFieldEntities = fieldEntities;
|
|
|
}
|
|
|
resetWithFields(requiredFieldEntities);
|
|
|
};
|
|
|
this.resetFields = function (nameList) {
|
|
|
_this.warningUnhooked();
|
|
|
var prevStore = _this.store;
|
|
|
if (!nameList) {
|
|
|
_this.updateStore((0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_13__.setValues)({}, _this.initialValues));
|
|
|
_this.resetWithFieldInitialValue();
|
|
|
_this.notifyObservers(prevStore, null, {
|
|
|
type: 'reset'
|
|
|
});
|
|
|
_this.notifyWatch();
|
|
|
return;
|
|
|
}
|
|
|
// Reset by `nameList`
|
|
|
var namePathList = nameList.map(_utils_valueUtil__WEBPACK_IMPORTED_MODULE_13__.getNamePath);
|
|
|
namePathList.forEach(function (namePath) {
|
|
|
var initialValue = _this.getInitialValue(namePath);
|
|
|
_this.updateStore((0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_13__.setValue)(_this.store, namePath, initialValue));
|
|
|
});
|
|
|
_this.resetWithFieldInitialValue({
|
|
|
namePathList: namePathList
|
|
|
});
|
|
|
_this.notifyObservers(prevStore, namePathList, {
|
|
|
type: 'reset'
|
|
|
});
|
|
|
_this.notifyWatch(namePathList);
|
|
|
};
|
|
|
this.setFields = function (fields) {
|
|
|
_this.warningUnhooked();
|
|
|
var prevStore = _this.store;
|
|
|
var namePathList = [];
|
|
|
fields.forEach(function (fieldData) {
|
|
|
var name = fieldData.name,
|
|
|
errors = fieldData.errors,
|
|
|
data = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_2__["default"])(fieldData, _excluded);
|
|
|
var namePath = (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_13__.getNamePath)(name);
|
|
|
namePathList.push(namePath);
|
|
|
// Value
|
|
|
if ('value' in data) {
|
|
|
_this.updateStore((0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_13__.setValue)(_this.store, namePath, data.value));
|
|
|
}
|
|
|
_this.notifyObservers(prevStore, [namePath], {
|
|
|
type: 'setField',
|
|
|
data: fieldData
|
|
|
});
|
|
|
});
|
|
|
_this.notifyWatch(namePathList);
|
|
|
};
|
|
|
this.getFields = function () {
|
|
|
var entities = _this.getFieldEntities(true);
|
|
|
var fields = entities.map(function (field) {
|
|
|
var namePath = field.getNamePath();
|
|
|
var meta = field.getMeta();
|
|
|
var fieldData = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, meta), {}, {
|
|
|
name: namePath,
|
|
|
value: _this.getFieldValue(namePath)
|
|
|
});
|
|
|
Object.defineProperty(fieldData, 'originRCField', {
|
|
|
value: true
|
|
|
});
|
|
|
return fieldData;
|
|
|
});
|
|
|
return fields;
|
|
|
};
|
|
|
this.initEntityValue = function (entity) {
|
|
|
var initialValue = entity.props.initialValue;
|
|
|
if (initialValue !== undefined) {
|
|
|
var namePath = entity.getNamePath();
|
|
|
var prevValue = (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_13__.getValue)(_this.store, namePath);
|
|
|
if (prevValue === undefined) {
|
|
|
_this.updateStore((0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_13__.setValue)(_this.store, namePath, initialValue));
|
|
|
}
|
|
|
}
|
|
|
};
|
|
|
this.isMergedPreserve = function (fieldPreserve) {
|
|
|
var mergedPreserve = fieldPreserve !== undefined ? fieldPreserve : _this.preserve;
|
|
|
return mergedPreserve !== null && mergedPreserve !== void 0 ? mergedPreserve : true;
|
|
|
};
|
|
|
this.registerField = function (entity) {
|
|
|
_this.fieldEntities.push(entity);
|
|
|
var namePath = entity.getNamePath();
|
|
|
_this.notifyWatch([namePath]);
|
|
|
// Set initial values
|
|
|
if (entity.props.initialValue !== undefined) {
|
|
|
var prevStore = _this.store;
|
|
|
_this.resetWithFieldInitialValue({
|
|
|
entities: [entity],
|
|
|
skipExist: true
|
|
|
});
|
|
|
_this.notifyObservers(prevStore, [entity.getNamePath()], {
|
|
|
type: 'valueUpdate',
|
|
|
source: 'internal'
|
|
|
});
|
|
|
}
|
|
|
// un-register field callback
|
|
|
return function (isListField, preserve) {
|
|
|
var subNamePath = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
|
|
|
_this.fieldEntities = _this.fieldEntities.filter(function (item) {
|
|
|
return item !== entity;
|
|
|
});
|
|
|
// Clean up store value if not preserve
|
|
|
if (!_this.isMergedPreserve(preserve) && (!isListField || subNamePath.length > 1)) {
|
|
|
var defaultValue = isListField ? undefined : _this.getInitialValue(namePath);
|
|
|
if (namePath.length && _this.getFieldValue(namePath) !== defaultValue && _this.fieldEntities.every(function (field) {
|
|
|
return (
|
|
|
// Only reset when no namePath exist
|
|
|
!(0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_13__.matchNamePath)(field.getNamePath(), namePath)
|
|
|
);
|
|
|
})) {
|
|
|
var _prevStore = _this.store;
|
|
|
_this.updateStore((0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_13__.setValue)(_prevStore, namePath, defaultValue, true));
|
|
|
// Notify that field is unmount
|
|
|
_this.notifyObservers(_prevStore, [namePath], {
|
|
|
type: 'remove'
|
|
|
});
|
|
|
// Dependencies update
|
|
|
_this.triggerDependenciesUpdate(_prevStore, namePath);
|
|
|
}
|
|
|
}
|
|
|
_this.notifyWatch([namePath]);
|
|
|
};
|
|
|
};
|
|
|
this.dispatch = function (action) {
|
|
|
switch (action.type) {
|
|
|
case 'updateValue':
|
|
|
{
|
|
|
var namePath = action.namePath,
|
|
|
value = action.value;
|
|
|
_this.updateValue(namePath, value);
|
|
|
break;
|
|
|
}
|
|
|
case 'validateField':
|
|
|
{
|
|
|
var _namePath = action.namePath,
|
|
|
triggerName = action.triggerName;
|
|
|
_this.validateFields([_namePath], {
|
|
|
triggerName: triggerName
|
|
|
});
|
|
|
break;
|
|
|
}
|
|
|
default:
|
|
|
// Currently we don't have other action. Do nothing.
|
|
|
}
|
|
|
};
|
|
|
this.notifyObservers = function (prevStore, namePathList, info) {
|
|
|
if (_this.subscribable) {
|
|
|
var mergedInfo = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, info), {}, {
|
|
|
store: _this.getFieldsValue(true)
|
|
|
});
|
|
|
_this.getFieldEntities().forEach(function (_ref3) {
|
|
|
var onStoreChange = _ref3.onStoreChange;
|
|
|
onStoreChange(prevStore, namePathList, mergedInfo);
|
|
|
});
|
|
|
} else {
|
|
|
_this.forceRootUpdate();
|
|
|
}
|
|
|
};
|
|
|
this.triggerDependenciesUpdate = function (prevStore, namePath) {
|
|
|
var childrenFields = _this.getDependencyChildrenFields(namePath);
|
|
|
if (childrenFields.length) {
|
|
|
_this.validateFields(childrenFields);
|
|
|
}
|
|
|
_this.notifyObservers(prevStore, childrenFields, {
|
|
|
type: 'dependenciesUpdate',
|
|
|
relatedFields: [namePath].concat((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_3__["default"])(childrenFields))
|
|
|
});
|
|
|
return childrenFields;
|
|
|
};
|
|
|
this.updateValue = function (name, value) {
|
|
|
var namePath = (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_13__.getNamePath)(name);
|
|
|
var prevStore = _this.store;
|
|
|
_this.updateStore((0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_13__.setValue)(_this.store, namePath, value));
|
|
|
_this.notifyObservers(prevStore, [namePath], {
|
|
|
type: 'valueUpdate',
|
|
|
source: 'internal'
|
|
|
});
|
|
|
_this.notifyWatch([namePath]);
|
|
|
// Dependencies update
|
|
|
var childrenFields = _this.triggerDependenciesUpdate(prevStore, namePath);
|
|
|
// trigger callback function
|
|
|
var onValuesChange = _this.callbacks.onValuesChange;
|
|
|
if (onValuesChange) {
|
|
|
var changedValues = (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_13__.cloneByNamePathList)(_this.store, [namePath]);
|
|
|
onValuesChange(changedValues, _this.getFieldsValue());
|
|
|
}
|
|
|
_this.triggerOnFieldsChange([namePath].concat((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_3__["default"])(childrenFields)));
|
|
|
};
|
|
|
this.setFieldsValue = function (store) {
|
|
|
_this.warningUnhooked();
|
|
|
var prevStore = _this.store;
|
|
|
if (store) {
|
|
|
var nextStore = (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_13__.setValues)(_this.store, store);
|
|
|
_this.updateStore(nextStore);
|
|
|
}
|
|
|
_this.notifyObservers(prevStore, null, {
|
|
|
type: 'valueUpdate',
|
|
|
source: 'external'
|
|
|
});
|
|
|
_this.notifyWatch();
|
|
|
};
|
|
|
this.setFieldValue = function (name, value) {
|
|
|
_this.setFields([{
|
|
|
name: name,
|
|
|
value: value
|
|
|
}]);
|
|
|
};
|
|
|
this.getDependencyChildrenFields = function (rootNamePath) {
|
|
|
var children = new Set();
|
|
|
var childrenFields = [];
|
|
|
var dependencies2fields = new _utils_NameMap__WEBPACK_IMPORTED_MODULE_12__["default"]();
|
|
|
/**
|
|
|
* Generate maps
|
|
|
* Can use cache to save perf if user report performance issue with this
|
|
|
*/
|
|
|
_this.getFieldEntities().forEach(function (field) {
|
|
|
var dependencies = field.props.dependencies;
|
|
|
(dependencies || []).forEach(function (dependency) {
|
|
|
var dependencyNamePath = (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_13__.getNamePath)(dependency);
|
|
|
dependencies2fields.update(dependencyNamePath, function () {
|
|
|
var fields = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Set();
|
|
|
fields.add(field);
|
|
|
return fields;
|
|
|
});
|
|
|
});
|
|
|
});
|
|
|
var fillChildren = function fillChildren(namePath) {
|
|
|
var fields = dependencies2fields.get(namePath) || new Set();
|
|
|
fields.forEach(function (field) {
|
|
|
if (!children.has(field)) {
|
|
|
children.add(field);
|
|
|
var fieldNamePath = field.getNamePath();
|
|
|
if (field.isFieldDirty() && fieldNamePath.length) {
|
|
|
childrenFields.push(fieldNamePath);
|
|
|
fillChildren(fieldNamePath);
|
|
|
}
|
|
|
}
|
|
|
});
|
|
|
};
|
|
|
fillChildren(rootNamePath);
|
|
|
return childrenFields;
|
|
|
};
|
|
|
this.triggerOnFieldsChange = function (namePathList, filedErrors) {
|
|
|
var onFieldsChange = _this.callbacks.onFieldsChange;
|
|
|
if (onFieldsChange) {
|
|
|
var fields = _this.getFields();
|
|
|
/**
|
|
|
* Fill errors since `fields` may be replaced by controlled fields
|
|
|
*/
|
|
|
if (filedErrors) {
|
|
|
var cache = new _utils_NameMap__WEBPACK_IMPORTED_MODULE_12__["default"]();
|
|
|
filedErrors.forEach(function (_ref4) {
|
|
|
var name = _ref4.name,
|
|
|
errors = _ref4.errors;
|
|
|
cache.set(name, errors);
|
|
|
});
|
|
|
fields.forEach(function (field) {
|
|
|
// eslint-disable-next-line no-param-reassign
|
|
|
field.errors = cache.get(field.name) || field.errors;
|
|
|
});
|
|
|
}
|
|
|
var changedFields = fields.filter(function (_ref5) {
|
|
|
var fieldName = _ref5.name;
|
|
|
return (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_13__.containsNamePath)(namePathList, fieldName);
|
|
|
});
|
|
|
onFieldsChange(changedFields, fields);
|
|
|
}
|
|
|
};
|
|
|
this.validateFields = function (nameList, options) {
|
|
|
_this.warningUnhooked();
|
|
|
var provideNameList = !!nameList;
|
|
|
var namePathList = provideNameList ? nameList.map(_utils_valueUtil__WEBPACK_IMPORTED_MODULE_13__.getNamePath) : [];
|
|
|
// Collect result in promise list
|
|
|
var promiseList = [];
|
|
|
_this.getFieldEntities(true).forEach(function (field) {
|
|
|
// Add field if not provide `nameList`
|
|
|
if (!provideNameList) {
|
|
|
namePathList.push(field.getNamePath());
|
|
|
}
|
|
|
/**
|
|
|
* Recursive validate if configured.
|
|
|
* TODO: perf improvement @zombieJ
|
|
|
*/
|
|
|
if ((options === null || options === void 0 ? void 0 : options.recursive) && provideNameList) {
|
|
|
var namePath = field.getNamePath();
|
|
|
if (
|
|
|
// nameList[i] === undefined 说明是以 nameList 开头的
|
|
|
// ['name'] -> ['name','list']
|
|
|
namePath.every(function (nameUnit, i) {
|
|
|
return nameList[i] === nameUnit || nameList[i] === undefined;
|
|
|
})) {
|
|
|
namePathList.push(namePath);
|
|
|
}
|
|
|
}
|
|
|
// Skip if without rule
|
|
|
if (!field.props.rules || !field.props.rules.length) {
|
|
|
return;
|
|
|
}
|
|
|
var fieldNamePath = field.getNamePath();
|
|
|
// Add field validate rule in to promise list
|
|
|
if (!provideNameList || (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_13__.containsNamePath)(namePathList, fieldNamePath)) {
|
|
|
var promise = field.validateRules((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({
|
|
|
validateMessages: (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, _utils_messages__WEBPACK_IMPORTED_MODULE_11__.defaultValidateMessages), _this.validateMessages)
|
|
|
}, options));
|
|
|
// Wrap promise with field
|
|
|
promiseList.push(promise.then(function () {
|
|
|
return {
|
|
|
name: fieldNamePath,
|
|
|
errors: [],
|
|
|
warnings: []
|
|
|
};
|
|
|
}).catch(function (ruleErrors) {
|
|
|
var _ruleErrors$forEach;
|
|
|
var mergedErrors = [];
|
|
|
var mergedWarnings = [];
|
|
|
(_ruleErrors$forEach = ruleErrors.forEach) === null || _ruleErrors$forEach === void 0 ? void 0 : _ruleErrors$forEach.call(ruleErrors, function (_ref6) {
|
|
|
var warningOnly = _ref6.rule.warningOnly,
|
|
|
errors = _ref6.errors;
|
|
|
if (warningOnly) {
|
|
|
mergedWarnings.push.apply(mergedWarnings, (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_3__["default"])(errors));
|
|
|
} else {
|
|
|
mergedErrors.push.apply(mergedErrors, (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_3__["default"])(errors));
|
|
|
}
|
|
|
});
|
|
|
if (mergedErrors.length) {
|
|
|
return Promise.reject({
|
|
|
name: fieldNamePath,
|
|
|
errors: mergedErrors,
|
|
|
warnings: mergedWarnings
|
|
|
});
|
|
|
}
|
|
|
return {
|
|
|
name: fieldNamePath,
|
|
|
errors: mergedErrors,
|
|
|
warnings: mergedWarnings
|
|
|
};
|
|
|
}));
|
|
|
}
|
|
|
});
|
|
|
var summaryPromise = (0,_utils_asyncUtil__WEBPACK_IMPORTED_MODULE_9__.allPromiseFinish)(promiseList);
|
|
|
_this.lastValidatePromise = summaryPromise;
|
|
|
// Notify fields with rule that validate has finished and need update
|
|
|
summaryPromise.catch(function (results) {
|
|
|
return results;
|
|
|
}).then(function (results) {
|
|
|
var resultNamePathList = results.map(function (_ref7) {
|
|
|
var name = _ref7.name;
|
|
|
return name;
|
|
|
});
|
|
|
_this.notifyObservers(_this.store, resultNamePathList, {
|
|
|
type: 'validateFinish'
|
|
|
});
|
|
|
_this.triggerOnFieldsChange(resultNamePathList, results);
|
|
|
});
|
|
|
var returnPromise = summaryPromise.then(function () {
|
|
|
if (_this.lastValidatePromise === summaryPromise) {
|
|
|
return Promise.resolve(_this.getFieldsValue(namePathList));
|
|
|
}
|
|
|
return Promise.reject([]);
|
|
|
}).catch(function (results) {
|
|
|
var errorList = results.filter(function (result) {
|
|
|
return result && result.errors.length;
|
|
|
});
|
|
|
return Promise.reject({
|
|
|
values: _this.getFieldsValue(namePathList),
|
|
|
errorFields: errorList,
|
|
|
outOfDate: _this.lastValidatePromise !== summaryPromise
|
|
|
});
|
|
|
});
|
|
|
// Do not throw in console
|
|
|
returnPromise.catch(function (e) {
|
|
|
return e;
|
|
|
});
|
|
|
return returnPromise;
|
|
|
};
|
|
|
this.submit = function () {
|
|
|
_this.warningUnhooked();
|
|
|
_this.validateFields().then(function (values) {
|
|
|
var onFinish = _this.callbacks.onFinish;
|
|
|
if (onFinish) {
|
|
|
try {
|
|
|
onFinish(values);
|
|
|
} catch (err) {
|
|
|
// Should print error if user `onFinish` callback failed
|
|
|
console.error(err);
|
|
|
}
|
|
|
}
|
|
|
}).catch(function (e) {
|
|
|
var onFinishFailed = _this.callbacks.onFinishFailed;
|
|
|
if (onFinishFailed) {
|
|
|
onFinishFailed(e);
|
|
|
}
|
|
|
});
|
|
|
};
|
|
|
this.forceRootUpdate = forceRootUpdate;
|
|
|
});
|
|
|
function useForm(form) {
|
|
|
var formRef = react__WEBPACK_IMPORTED_MODULE_7__.useRef();
|
|
|
var _React$useState = react__WEBPACK_IMPORTED_MODULE_7__.useState({}),
|
|
|
_React$useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__["default"])(_React$useState, 2),
|
|
|
forceUpdate = _React$useState2[1];
|
|
|
if (!formRef.current) {
|
|
|
if (form) {
|
|
|
formRef.current = form;
|
|
|
} else {
|
|
|
// Create a new FormStore if not provided
|
|
|
var forceReRender = function forceReRender() {
|
|
|
forceUpdate({});
|
|
|
};
|
|
|
var formStore = new FormStore(forceReRender);
|
|
|
formRef.current = formStore.getForm();
|
|
|
}
|
|
|
}
|
|
|
return [formRef.current];
|
|
|
}
|
|
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (useForm);
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/rc-field-form/es/useWatch.js":
|
|
|
/*!***************************************************!*\
|
|
|
!*** ./node_modules/rc-field-form/es/useWatch.js ***!
|
|
|
\***************************************************/
|
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__),
|
|
|
/* harmony export */ "stringify": () => (/* binding */ stringify)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "./node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
|
|
|
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! . */ "./node_modules/rc-field-form/es/index.js");
|
|
|
/* harmony import */ var rc_util_es_warning__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rc-util/es/warning */ "./node_modules/rc-util/es/warning.js");
|
|
|
/* harmony import */ var _FieldContext__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./FieldContext */ "./node_modules/rc-field-form/es/FieldContext.js");
|
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
|
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_4__);
|
|
|
/* harmony import */ var _utils_valueUtil__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./utils/valueUtil */ "./node_modules/rc-field-form/es/utils/valueUtil.js");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function stringify(value) {
|
|
|
try {
|
|
|
return JSON.stringify(value);
|
|
|
} catch (err) {
|
|
|
return Math.random();
|
|
|
}
|
|
|
}
|
|
|
function useWatch() {
|
|
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
|
args[_key] = arguments[_key];
|
|
|
}
|
|
|
var _args$ = args[0],
|
|
|
dependencies = _args$ === void 0 ? [] : _args$,
|
|
|
form = args[1];
|
|
|
var _useState = (0,react__WEBPACK_IMPORTED_MODULE_4__.useState)(),
|
|
|
_useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__["default"])(_useState, 2),
|
|
|
value = _useState2[0],
|
|
|
setValue = _useState2[1];
|
|
|
var valueStr = (0,react__WEBPACK_IMPORTED_MODULE_4__.useMemo)(function () {
|
|
|
return stringify(value);
|
|
|
}, [value]);
|
|
|
var valueStrRef = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)(valueStr);
|
|
|
valueStrRef.current = valueStr;
|
|
|
var fieldContext = (0,react__WEBPACK_IMPORTED_MODULE_4__.useContext)(___WEBPACK_IMPORTED_MODULE_1__.FieldContext);
|
|
|
var formInstance = form || fieldContext;
|
|
|
var isValidForm = formInstance && formInstance._init;
|
|
|
// Warning if not exist form instance
|
|
|
if (true) {
|
|
|
(0,rc_util_es_warning__WEBPACK_IMPORTED_MODULE_2__["default"])(args.length === 2 ? form ? isValidForm : true : isValidForm, 'useWatch requires a form instance since it can not auto detect from context.');
|
|
|
}
|
|
|
var namePath = (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_5__.getNamePath)(dependencies);
|
|
|
var namePathRef = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)(namePath);
|
|
|
namePathRef.current = namePath;
|
|
|
(0,react__WEBPACK_IMPORTED_MODULE_4__.useEffect)(function () {
|
|
|
// Skip if not exist form instance
|
|
|
if (!isValidForm) {
|
|
|
return;
|
|
|
}
|
|
|
var getFieldsValue = formInstance.getFieldsValue,
|
|
|
getInternalHooks = formInstance.getInternalHooks;
|
|
|
var _getInternalHooks = getInternalHooks(_FieldContext__WEBPACK_IMPORTED_MODULE_3__.HOOK_MARK),
|
|
|
registerWatch = _getInternalHooks.registerWatch;
|
|
|
var cancelRegister = registerWatch(function (store) {
|
|
|
var newValue = (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_5__.getValue)(store, namePathRef.current);
|
|
|
var nextValueStr = stringify(newValue);
|
|
|
// Compare stringify in case it's nest object
|
|
|
if (valueStrRef.current !== nextValueStr) {
|
|
|
valueStrRef.current = nextValueStr;
|
|
|
setValue(newValue);
|
|
|
}
|
|
|
});
|
|
|
// TODO: We can improve this perf in future
|
|
|
var initialValue = (0,_utils_valueUtil__WEBPACK_IMPORTED_MODULE_5__.getValue)(getFieldsValue(), namePathRef.current);
|
|
|
setValue(initialValue);
|
|
|
return cancelRegister;
|
|
|
},
|
|
|
// We do not need re-register since namePath content is the same
|
|
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
|
[isValidForm]);
|
|
|
return value;
|
|
|
}
|
|
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (useWatch);
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/rc-field-form/es/utils/NameMap.js":
|
|
|
/*!********************************************************!*\
|
|
|
!*** ./node_modules/rc-field-form/es/utils/NameMap.js ***!
|
|
|
\********************************************************/
|
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "./node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/classCallCheck */ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/createClass */ "./node_modules/@babel/runtime/helpers/esm/createClass.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ "./node_modules/@babel/runtime/helpers/esm/typeof.js");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var SPLIT = '__@field_split__';
|
|
|
/**
|
|
|
* Convert name path into string to fast the fetch speed of Map.
|
|
|
*/
|
|
|
function normalize(namePath) {
|
|
|
return namePath.map(function (cell) {
|
|
|
return "".concat((0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_4__["default"])(cell), ":").concat(cell);
|
|
|
})
|
|
|
// Magic split
|
|
|
.join(SPLIT);
|
|
|
}
|
|
|
/**
|
|
|
* NameMap like a `Map` but accepts `string[]` as key.
|
|
|
*/
|
|
|
var NameMap = /*#__PURE__*/function () {
|
|
|
function NameMap() {
|
|
|
(0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_2__["default"])(this, NameMap);
|
|
|
this.kvs = new Map();
|
|
|
}
|
|
|
(0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_3__["default"])(NameMap, [{
|
|
|
key: "set",
|
|
|
value: function set(key, value) {
|
|
|
this.kvs.set(normalize(key), value);
|
|
|
}
|
|
|
}, {
|
|
|
key: "get",
|
|
|
value: function get(key) {
|
|
|
return this.kvs.get(normalize(key));
|
|
|
}
|
|
|
}, {
|
|
|
key: "update",
|
|
|
value: function update(key, updater) {
|
|
|
var origin = this.get(key);
|
|
|
var next = updater(origin);
|
|
|
if (!next) {
|
|
|
this.delete(key);
|
|
|
} else {
|
|
|
this.set(key, next);
|
|
|
}
|
|
|
}
|
|
|
}, {
|
|
|
key: "delete",
|
|
|
value: function _delete(key) {
|
|
|
this.kvs.delete(normalize(key));
|
|
|
}
|
|
|
// Since we only use this in test, let simply realize this
|
|
|
}, {
|
|
|
key: "map",
|
|
|
value: function map(callback) {
|
|
|
return (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__["default"])(this.kvs.entries()).map(function (_ref) {
|
|
|
var _ref2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__["default"])(_ref, 2),
|
|
|
key = _ref2[0],
|
|
|
value = _ref2[1];
|
|
|
var cells = key.split(SPLIT);
|
|
|
return callback({
|
|
|
key: cells.map(function (cell) {
|
|
|
var _cell$match = cell.match(/^([^:]*):(.*)$/),
|
|
|
_cell$match2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__["default"])(_cell$match, 3),
|
|
|
type = _cell$match2[1],
|
|
|
unit = _cell$match2[2];
|
|
|
return type === 'number' ? Number(unit) : unit;
|
|
|
}),
|
|
|
value: value
|
|
|
});
|
|
|
});
|
|
|
}
|
|
|
}, {
|
|
|
key: "toJSON",
|
|
|
value: function toJSON() {
|
|
|
var json = {};
|
|
|
this.map(function (_ref3) {
|
|
|
var key = _ref3.key,
|
|
|
value = _ref3.value;
|
|
|
json[key.join('.')] = value;
|
|
|
return null;
|
|
|
});
|
|
|
return json;
|
|
|
}
|
|
|
}]);
|
|
|
return NameMap;
|
|
|
}();
|
|
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (NameMap);
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/rc-field-form/es/utils/asyncUtil.js":
|
|
|
/*!**********************************************************!*\
|
|
|
!*** ./node_modules/rc-field-form/es/utils/asyncUtil.js ***!
|
|
|
\**********************************************************/
|
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "allPromiseFinish": () => (/* binding */ allPromiseFinish)
|
|
|
/* harmony export */ });
|
|
|
function allPromiseFinish(promiseList) {
|
|
|
var hasError = false;
|
|
|
var count = promiseList.length;
|
|
|
var results = [];
|
|
|
if (!promiseList.length) {
|
|
|
return Promise.resolve([]);
|
|
|
}
|
|
|
return new Promise(function (resolve, reject) {
|
|
|
promiseList.forEach(function (promise, index) {
|
|
|
promise.catch(function (e) {
|
|
|
hasError = true;
|
|
|
return e;
|
|
|
}).then(function (result) {
|
|
|
count -= 1;
|
|
|
results[index] = result;
|
|
|
if (count > 0) {
|
|
|
return;
|
|
|
}
|
|
|
if (hasError) {
|
|
|
reject(results);
|
|
|
}
|
|
|
resolve(results);
|
|
|
});
|
|
|
});
|
|
|
});
|
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/rc-field-form/es/utils/cloneDeep.js":
|
|
|
/*!**********************************************************!*\
|
|
|
!*** ./node_modules/rc-field-form/es/utils/cloneDeep.js ***!
|
|
|
\**********************************************************/
|
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ "./node_modules/@babel/runtime/helpers/esm/typeof.js");
|
|
|
|
|
|
function cloneDeep(val) {
|
|
|
if (Array.isArray(val)) {
|
|
|
return cloneArrayDeep(val);
|
|
|
} else if ((0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_0__["default"])(val) === 'object' && val !== null) {
|
|
|
return cloneObjectDeep(val);
|
|
|
}
|
|
|
return val;
|
|
|
}
|
|
|
function cloneObjectDeep(val) {
|
|
|
if (Object.getPrototypeOf(val) === Object.prototype) {
|
|
|
var res = {};
|
|
|
for (var key in val) {
|
|
|
res[key] = cloneDeep(val[key]);
|
|
|
}
|
|
|
return res;
|
|
|
}
|
|
|
return val;
|
|
|
}
|
|
|
function cloneArrayDeep(val) {
|
|
|
return val.map(function (item) {
|
|
|
return cloneDeep(item);
|
|
|
});
|
|
|
}
|
|
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cloneDeep);
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/rc-field-form/es/utils/messages.js":
|
|
|
/*!*********************************************************!*\
|
|
|
!*** ./node_modules/rc-field-form/es/utils/messages.js ***!
|
|
|
\*********************************************************/
|
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "defaultValidateMessages": () => (/* binding */ defaultValidateMessages)
|
|
|
/* harmony export */ });
|
|
|
var typeTemplate = "'${name}' is not a valid ${type}";
|
|
|
var defaultValidateMessages = {
|
|
|
default: "Validation error on field '${name}'",
|
|
|
required: "'${name}' is required",
|
|
|
enum: "'${name}' must be one of [${enum}]",
|
|
|
whitespace: "'${name}' cannot be empty",
|
|
|
date: {
|
|
|
format: "'${name}' is invalid for format date",
|
|
|
parse: "'${name}' could not be parsed as date",
|
|
|
invalid: "'${name}' is invalid date"
|
|
|
},
|
|
|
types: {
|
|
|
string: typeTemplate,
|
|
|
method: typeTemplate,
|
|
|
array: typeTemplate,
|
|
|
object: typeTemplate,
|
|
|
number: typeTemplate,
|
|
|
date: typeTemplate,
|
|
|
boolean: typeTemplate,
|
|
|
integer: typeTemplate,
|
|
|
float: typeTemplate,
|
|
|
regexp: typeTemplate,
|
|
|
email: typeTemplate,
|
|
|
url: typeTemplate,
|
|
|
hex: typeTemplate
|
|
|
},
|
|
|
string: {
|
|
|
len: "'${name}' must be exactly ${len} characters",
|
|
|
min: "'${name}' must be at least ${min} characters",
|
|
|
max: "'${name}' cannot be longer than ${max} characters",
|
|
|
range: "'${name}' must be between ${min} and ${max} characters"
|
|
|
},
|
|
|
number: {
|
|
|
len: "'${name}' must equal ${len}",
|
|
|
min: "'${name}' cannot be less than ${min}",
|
|
|
max: "'${name}' cannot be greater than ${max}",
|
|
|
range: "'${name}' must be between ${min} and ${max}"
|
|
|
},
|
|
|
array: {
|
|
|
len: "'${name}' must be exactly ${len} in length",
|
|
|
min: "'${name}' cannot be less than ${min} in length",
|
|
|
max: "'${name}' cannot be greater than ${max} in length",
|
|
|
range: "'${name}' must be between ${min} and ${max} in length"
|
|
|
},
|
|
|
pattern: {
|
|
|
mismatch: "'${name}' does not match pattern ${pattern}"
|
|
|
}
|
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/rc-field-form/es/utils/typeUtil.js":
|
|
|
/*!*********************************************************!*\
|
|
|
!*** ./node_modules/rc-field-form/es/utils/typeUtil.js ***!
|
|
|
\*********************************************************/
|
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "toArray": () => (/* binding */ toArray)
|
|
|
/* harmony export */ });
|
|
|
function toArray(value) {
|
|
|
if (value === undefined || value === null) {
|
|
|
return [];
|
|
|
}
|
|
|
return Array.isArray(value) ? value : [value];
|
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/rc-field-form/es/utils/validateUtil.js":
|
|
|
/*!*************************************************************!*\
|
|
|
!*** ./node_modules/rc-field-form/es/utils/validateUtil.js ***!
|
|
|
\*************************************************************/
|
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "validateRules": () => (/* binding */ validateRules)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "./node_modules/@babel/runtime/helpers/esm/defineProperty.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_regeneratorRuntime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/regeneratorRuntime */ "./node_modules/@babel/runtime/helpers/esm/regeneratorRuntime.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "./node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_asyncToGenerator__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/esm/asyncToGenerator */ "./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js");
|
|
|
/* harmony import */ var async_validator__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! async-validator */ "./node_modules/async-validator/dist-web/index.js");
|
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
|
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_5__);
|
|
|
/* harmony import */ var rc_util_es_warning__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! rc-util/es/warning */ "./node_modules/rc-util/es/warning.js");
|
|
|
/* harmony import */ var _messages__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./messages */ "./node_modules/rc-field-form/es/utils/messages.js");
|
|
|
/* harmony import */ var _valueUtil__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./valueUtil */ "./node_modules/rc-field-form/es/utils/valueUtil.js");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Remove incorrect original ts define
|
|
|
var AsyncValidator = async_validator__WEBPACK_IMPORTED_MODULE_9__["default"];
|
|
|
/**
|
|
|
* Replace with template.
|
|
|
* `I'm ${name}` + { name: 'bamboo' } = I'm bamboo
|
|
|
*/
|
|
|
function replaceMessage(template, kv) {
|
|
|
return template.replace(/\$\{\w+\}/g, function (str) {
|
|
|
var key = str.slice(2, -1);
|
|
|
return kv[key];
|
|
|
});
|
|
|
}
|
|
|
var CODE_LOGIC_ERROR = 'CODE_LOGIC_ERROR';
|
|
|
function validateRule(_x, _x2, _x3, _x4, _x5) {
|
|
|
return _validateRule.apply(this, arguments);
|
|
|
}
|
|
|
/**
|
|
|
* We use `async-validator` to validate the value.
|
|
|
* But only check one value in a time to avoid namePath validate issue.
|
|
|
*/
|
|
|
function _validateRule() {
|
|
|
_validateRule = (0,_babel_runtime_helpers_esm_asyncToGenerator__WEBPACK_IMPORTED_MODULE_4__["default"])( /*#__PURE__*/(0,_babel_runtime_helpers_esm_regeneratorRuntime__WEBPACK_IMPORTED_MODULE_2__["default"])().mark(function _callee2(name, value, rule, options, messageVariables) {
|
|
|
var cloneRule, originValidator, subRuleField, validator, messages, result, subResults, kv, fillVariableResult;
|
|
|
return (0,_babel_runtime_helpers_esm_regeneratorRuntime__WEBPACK_IMPORTED_MODULE_2__["default"])().wrap(function _callee2$(_context2) {
|
|
|
while (1) {
|
|
|
switch (_context2.prev = _context2.next) {
|
|
|
case 0:
|
|
|
cloneRule = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_3__["default"])({}, rule); // Bug of `async-validator`
|
|
|
// https://github.com/react-component/field-form/issues/316
|
|
|
// https://github.com/react-component/field-form/issues/313
|
|
|
delete cloneRule.ruleIndex;
|
|
|
if (cloneRule.validator) {
|
|
|
originValidator = cloneRule.validator;
|
|
|
cloneRule.validator = function () {
|
|
|
try {
|
|
|
return originValidator.apply(void 0, arguments);
|
|
|
} catch (error) {
|
|
|
console.error(error);
|
|
|
return Promise.reject(CODE_LOGIC_ERROR);
|
|
|
}
|
|
|
};
|
|
|
}
|
|
|
// We should special handle array validate
|
|
|
subRuleField = null;
|
|
|
if (cloneRule && cloneRule.type === 'array' && cloneRule.defaultField) {
|
|
|
subRuleField = cloneRule.defaultField;
|
|
|
delete cloneRule.defaultField;
|
|
|
}
|
|
|
validator = new AsyncValidator((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])({}, name, [cloneRule]));
|
|
|
messages = (0,_valueUtil__WEBPACK_IMPORTED_MODULE_8__.setValues)({}, _messages__WEBPACK_IMPORTED_MODULE_7__.defaultValidateMessages, options.validateMessages);
|
|
|
validator.messages(messages);
|
|
|
result = [];
|
|
|
_context2.prev = 9;
|
|
|
_context2.next = 12;
|
|
|
return Promise.resolve(validator.validate((0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])({}, name, value), (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_3__["default"])({}, options)));
|
|
|
case 12:
|
|
|
_context2.next = 17;
|
|
|
break;
|
|
|
case 14:
|
|
|
_context2.prev = 14;
|
|
|
_context2.t0 = _context2["catch"](9);
|
|
|
if (_context2.t0.errors) {
|
|
|
result = _context2.t0.errors.map(function (_ref4, index) {
|
|
|
var message = _ref4.message;
|
|
|
var mergedMessage = message === CODE_LOGIC_ERROR ? messages.default : message;
|
|
|
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_5__.isValidElement(mergedMessage) ?
|
|
|
/*#__PURE__*/
|
|
|
// Wrap ReactNode with `key`
|
|
|
react__WEBPACK_IMPORTED_MODULE_5__.cloneElement(mergedMessage, {
|
|
|
key: "error_".concat(index)
|
|
|
}) : mergedMessage;
|
|
|
});
|
|
|
}
|
|
|
case 17:
|
|
|
if (!(!result.length && subRuleField)) {
|
|
|
_context2.next = 22;
|
|
|
break;
|
|
|
}
|
|
|
_context2.next = 20;
|
|
|
return Promise.all(value.map(function (subValue, i) {
|
|
|
return validateRule("".concat(name, ".").concat(i), subValue, subRuleField, options, messageVariables);
|
|
|
}));
|
|
|
case 20:
|
|
|
subResults = _context2.sent;
|
|
|
return _context2.abrupt("return", subResults.reduce(function (prev, errors) {
|
|
|
return [].concat((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(prev), (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(errors));
|
|
|
}, []));
|
|
|
case 22:
|
|
|
// Replace message with variables
|
|
|
kv = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_3__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_3__["default"])({}, rule), {}, {
|
|
|
name: name,
|
|
|
enum: (rule.enum || []).join(', ')
|
|
|
}, messageVariables);
|
|
|
fillVariableResult = result.map(function (error) {
|
|
|
if (typeof error === 'string') {
|
|
|
return replaceMessage(error, kv);
|
|
|
}
|
|
|
return error;
|
|
|
});
|
|
|
return _context2.abrupt("return", fillVariableResult);
|
|
|
case 25:
|
|
|
case "end":
|
|
|
return _context2.stop();
|
|
|
}
|
|
|
}
|
|
|
}, _callee2, null, [[9, 14]]);
|
|
|
}));
|
|
|
return _validateRule.apply(this, arguments);
|
|
|
}
|
|
|
function validateRules(namePath, value, rules, options, validateFirst, messageVariables) {
|
|
|
var name = namePath.join('.');
|
|
|
// Fill rule with context
|
|
|
var filledRules = rules.map(function (currentRule, ruleIndex) {
|
|
|
var originValidatorFunc = currentRule.validator;
|
|
|
var cloneRule = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_3__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_3__["default"])({}, currentRule), {}, {
|
|
|
ruleIndex: ruleIndex
|
|
|
});
|
|
|
// Replace validator if needed
|
|
|
if (originValidatorFunc) {
|
|
|
cloneRule.validator = function (rule, val, callback) {
|
|
|
var hasPromise = false;
|
|
|
// Wrap callback only accept when promise not provided
|
|
|
var wrappedCallback = function wrappedCallback() {
|
|
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
|
args[_key] = arguments[_key];
|
|
|
}
|
|
|
// Wait a tick to make sure return type is a promise
|
|
|
Promise.resolve().then(function () {
|
|
|
(0,rc_util_es_warning__WEBPACK_IMPORTED_MODULE_6__["default"])(!hasPromise, 'Your validator function has already return a promise. `callback` will be ignored.');
|
|
|
if (!hasPromise) {
|
|
|
callback.apply(void 0, args);
|
|
|
}
|
|
|
});
|
|
|
};
|
|
|
// Get promise
|
|
|
var promise = originValidatorFunc(rule, val, wrappedCallback);
|
|
|
hasPromise = promise && typeof promise.then === 'function' && typeof promise.catch === 'function';
|
|
|
/**
|
|
|
* 1. Use promise as the first priority.
|
|
|
* 2. If promise not exist, use callback with warning instead
|
|
|
*/
|
|
|
(0,rc_util_es_warning__WEBPACK_IMPORTED_MODULE_6__["default"])(hasPromise, '`callback` is deprecated. Please return a promise instead.');
|
|
|
if (hasPromise) {
|
|
|
promise.then(function () {
|
|
|
callback();
|
|
|
}).catch(function (err) {
|
|
|
callback(err || ' ');
|
|
|
});
|
|
|
}
|
|
|
};
|
|
|
}
|
|
|
return cloneRule;
|
|
|
}).sort(function (_ref, _ref2) {
|
|
|
var w1 = _ref.warningOnly,
|
|
|
i1 = _ref.ruleIndex;
|
|
|
var w2 = _ref2.warningOnly,
|
|
|
i2 = _ref2.ruleIndex;
|
|
|
if (!!w1 === !!w2) {
|
|
|
// Let keep origin order
|
|
|
return i1 - i2;
|
|
|
}
|
|
|
if (w1) {
|
|
|
return 1;
|
|
|
}
|
|
|
return -1;
|
|
|
});
|
|
|
// Do validate rules
|
|
|
var summaryPromise;
|
|
|
if (validateFirst === true) {
|
|
|
// >>>>> Validate by serialization
|
|
|
summaryPromise = new Promise( /*#__PURE__*/function () {
|
|
|
var _ref3 = (0,_babel_runtime_helpers_esm_asyncToGenerator__WEBPACK_IMPORTED_MODULE_4__["default"])( /*#__PURE__*/(0,_babel_runtime_helpers_esm_regeneratorRuntime__WEBPACK_IMPORTED_MODULE_2__["default"])().mark(function _callee(resolve, reject) {
|
|
|
var i, rule, errors;
|
|
|
return (0,_babel_runtime_helpers_esm_regeneratorRuntime__WEBPACK_IMPORTED_MODULE_2__["default"])().wrap(function _callee$(_context) {
|
|
|
while (1) {
|
|
|
switch (_context.prev = _context.next) {
|
|
|
case 0:
|
|
|
i = 0;
|
|
|
case 1:
|
|
|
if (!(i < filledRules.length)) {
|
|
|
_context.next = 12;
|
|
|
break;
|
|
|
}
|
|
|
rule = filledRules[i];
|
|
|
_context.next = 5;
|
|
|
return validateRule(name, value, rule, options, messageVariables);
|
|
|
case 5:
|
|
|
errors = _context.sent;
|
|
|
if (!errors.length) {
|
|
|
_context.next = 9;
|
|
|
break;
|
|
|
}
|
|
|
reject([{
|
|
|
errors: errors,
|
|
|
rule: rule
|
|
|
}]);
|
|
|
return _context.abrupt("return");
|
|
|
case 9:
|
|
|
i += 1;
|
|
|
_context.next = 1;
|
|
|
break;
|
|
|
case 12:
|
|
|
/* eslint-enable */
|
|
|
resolve([]);
|
|
|
case 13:
|
|
|
case "end":
|
|
|
return _context.stop();
|
|
|
}
|
|
|
}
|
|
|
}, _callee);
|
|
|
}));
|
|
|
return function (_x6, _x7) {
|
|
|
return _ref3.apply(this, arguments);
|
|
|
};
|
|
|
}());
|
|
|
} else {
|
|
|
// >>>>> Validate by parallel
|
|
|
var rulePromises = filledRules.map(function (rule) {
|
|
|
return validateRule(name, value, rule, options, messageVariables).then(function (errors) {
|
|
|
return {
|
|
|
errors: errors,
|
|
|
rule: rule
|
|
|
};
|
|
|
});
|
|
|
});
|
|
|
summaryPromise = (validateFirst ? finishOnFirstFailed(rulePromises) : finishOnAllFailed(rulePromises)).then(function (errors) {
|
|
|
// Always change to rejection for Field to catch
|
|
|
return Promise.reject(errors);
|
|
|
});
|
|
|
}
|
|
|
// Internal catch error to avoid console error log.
|
|
|
summaryPromise.catch(function (e) {
|
|
|
return e;
|
|
|
});
|
|
|
return summaryPromise;
|
|
|
}
|
|
|
function finishOnAllFailed(_x8) {
|
|
|
return _finishOnAllFailed.apply(this, arguments);
|
|
|
}
|
|
|
function _finishOnAllFailed() {
|
|
|
_finishOnAllFailed = (0,_babel_runtime_helpers_esm_asyncToGenerator__WEBPACK_IMPORTED_MODULE_4__["default"])( /*#__PURE__*/(0,_babel_runtime_helpers_esm_regeneratorRuntime__WEBPACK_IMPORTED_MODULE_2__["default"])().mark(function _callee3(rulePromises) {
|
|
|
return (0,_babel_runtime_helpers_esm_regeneratorRuntime__WEBPACK_IMPORTED_MODULE_2__["default"])().wrap(function _callee3$(_context3) {
|
|
|
while (1) {
|
|
|
switch (_context3.prev = _context3.next) {
|
|
|
case 0:
|
|
|
return _context3.abrupt("return", Promise.all(rulePromises).then(function (errorsList) {
|
|
|
var _ref5;
|
|
|
var errors = (_ref5 = []).concat.apply(_ref5, (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(errorsList));
|
|
|
return errors;
|
|
|
}));
|
|
|
case 1:
|
|
|
case "end":
|
|
|
return _context3.stop();
|
|
|
}
|
|
|
}
|
|
|
}, _callee3);
|
|
|
}));
|
|
|
return _finishOnAllFailed.apply(this, arguments);
|
|
|
}
|
|
|
function finishOnFirstFailed(_x9) {
|
|
|
return _finishOnFirstFailed.apply(this, arguments);
|
|
|
}
|
|
|
function _finishOnFirstFailed() {
|
|
|
_finishOnFirstFailed = (0,_babel_runtime_helpers_esm_asyncToGenerator__WEBPACK_IMPORTED_MODULE_4__["default"])( /*#__PURE__*/(0,_babel_runtime_helpers_esm_regeneratorRuntime__WEBPACK_IMPORTED_MODULE_2__["default"])().mark(function _callee4(rulePromises) {
|
|
|
var count;
|
|
|
return (0,_babel_runtime_helpers_esm_regeneratorRuntime__WEBPACK_IMPORTED_MODULE_2__["default"])().wrap(function _callee4$(_context4) {
|
|
|
while (1) {
|
|
|
switch (_context4.prev = _context4.next) {
|
|
|
case 0:
|
|
|
count = 0;
|
|
|
return _context4.abrupt("return", new Promise(function (resolve) {
|
|
|
rulePromises.forEach(function (promise) {
|
|
|
promise.then(function (ruleError) {
|
|
|
if (ruleError.errors.length) {
|
|
|
resolve([ruleError]);
|
|
|
}
|
|
|
count += 1;
|
|
|
if (count === rulePromises.length) {
|
|
|
resolve([]);
|
|
|
}
|
|
|
});
|
|
|
});
|
|
|
}));
|
|
|
case 2:
|
|
|
case "end":
|
|
|
return _context4.stop();
|
|
|
}
|
|
|
}
|
|
|
}, _callee4);
|
|
|
}));
|
|
|
return _finishOnFirstFailed.apply(this, arguments);
|
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/rc-field-form/es/utils/valueUtil.js":
|
|
|
/*!**********************************************************!*\
|
|
|
!*** ./node_modules/rc-field-form/es/utils/valueUtil.js ***!
|
|
|
\**********************************************************/
|
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "cloneByNamePathList": () => (/* binding */ cloneByNamePathList),
|
|
|
/* harmony export */ "containsNamePath": () => (/* binding */ containsNamePath),
|
|
|
/* harmony export */ "defaultGetValueFromEvent": () => (/* binding */ defaultGetValueFromEvent),
|
|
|
/* harmony export */ "getNamePath": () => (/* binding */ getNamePath),
|
|
|
/* harmony export */ "getValue": () => (/* binding */ getValue),
|
|
|
/* harmony export */ "isSimilar": () => (/* binding */ isSimilar),
|
|
|
/* harmony export */ "matchNamePath": () => (/* binding */ matchNamePath),
|
|
|
/* harmony export */ "move": () => (/* binding */ move),
|
|
|
/* harmony export */ "setValue": () => (/* binding */ setValue),
|
|
|
/* harmony export */ "setValues": () => (/* binding */ setValues)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "./node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ "./node_modules/@babel/runtime/helpers/esm/typeof.js");
|
|
|
/* harmony import */ var rc_util_es_utils_get__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! rc-util/es/utils/get */ "./node_modules/rc-util/es/utils/get.js");
|
|
|
/* harmony import */ var rc_util_es_utils_set__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! rc-util/es/utils/set */ "./node_modules/rc-util/es/utils/set.js");
|
|
|
/* harmony import */ var _typeUtil__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./typeUtil */ "./node_modules/rc-field-form/es/utils/typeUtil.js");
|
|
|
/* harmony import */ var _utils_cloneDeep__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/cloneDeep */ "./node_modules/rc-field-form/es/utils/cloneDeep.js");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
* Convert name to internal supported format.
|
|
|
* This function should keep since we still thinking if need support like `a.b.c` format.
|
|
|
* 'a' => ['a']
|
|
|
* 123 => [123]
|
|
|
* ['a', 123] => ['a', 123]
|
|
|
*/
|
|
|
function getNamePath(path) {
|
|
|
return (0,_typeUtil__WEBPACK_IMPORTED_MODULE_5__.toArray)(path);
|
|
|
}
|
|
|
function getValue(store, namePath) {
|
|
|
var value = (0,rc_util_es_utils_get__WEBPACK_IMPORTED_MODULE_3__["default"])(store, namePath);
|
|
|
return value;
|
|
|
}
|
|
|
function setValue(store, namePath, value) {
|
|
|
var removeIfUndefined = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
|
|
|
var newStore = (0,rc_util_es_utils_set__WEBPACK_IMPORTED_MODULE_4__["default"])(store, namePath, value, removeIfUndefined);
|
|
|
return newStore;
|
|
|
}
|
|
|
function cloneByNamePathList(store, namePathList) {
|
|
|
var newStore = {};
|
|
|
namePathList.forEach(function (namePath) {
|
|
|
var value = getValue(store, namePath);
|
|
|
newStore = setValue(newStore, namePath, value);
|
|
|
});
|
|
|
return newStore;
|
|
|
}
|
|
|
function containsNamePath(namePathList, namePath) {
|
|
|
return namePathList && namePathList.some(function (path) {
|
|
|
return matchNamePath(path, namePath);
|
|
|
});
|
|
|
}
|
|
|
function isObject(obj) {
|
|
|
return (0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_2__["default"])(obj) === 'object' && obj !== null && Object.getPrototypeOf(obj) === Object.prototype;
|
|
|
}
|
|
|
/**
|
|
|
* Copy values into store and return a new values object
|
|
|
* ({ a: 1, b: { c: 2 } }, { a: 4, b: { d: 5 } }) => { a: 4, b: { c: 2, d: 5 } }
|
|
|
*/
|
|
|
function internalSetValues(store, values) {
|
|
|
var newStore = Array.isArray(store) ? (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__["default"])(store) : (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, store);
|
|
|
if (!values) {
|
|
|
return newStore;
|
|
|
}
|
|
|
Object.keys(values).forEach(function (key) {
|
|
|
var prevValue = newStore[key];
|
|
|
var value = values[key];
|
|
|
// If both are object (but target is not array), we use recursion to set deep value
|
|
|
var recursive = isObject(prevValue) && isObject(value);
|
|
|
newStore[key] = recursive ? internalSetValues(prevValue, value || {}) : (0,_utils_cloneDeep__WEBPACK_IMPORTED_MODULE_6__["default"])(value); // Clone deep for arrays
|
|
|
});
|
|
|
|
|
|
return newStore;
|
|
|
}
|
|
|
function setValues(store) {
|
|
|
for (var _len = arguments.length, restValues = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
|
|
restValues[_key - 1] = arguments[_key];
|
|
|
}
|
|
|
return restValues.reduce(function (current, newStore) {
|
|
|
return internalSetValues(current, newStore);
|
|
|
}, store);
|
|
|
}
|
|
|
function matchNamePath(namePath, changedNamePath) {
|
|
|
if (!namePath || !changedNamePath || namePath.length !== changedNamePath.length) {
|
|
|
return false;
|
|
|
}
|
|
|
return namePath.every(function (nameUnit, i) {
|
|
|
return changedNamePath[i] === nameUnit;
|
|
|
});
|
|
|
}
|
|
|
function isSimilar(source, target) {
|
|
|
if (source === target) {
|
|
|
return true;
|
|
|
}
|
|
|
if (!source && target || source && !target) {
|
|
|
return false;
|
|
|
}
|
|
|
if (!source || !target || (0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_2__["default"])(source) !== 'object' || (0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_2__["default"])(target) !== 'object') {
|
|
|
return false;
|
|
|
}
|
|
|
var sourceKeys = Object.keys(source);
|
|
|
var targetKeys = Object.keys(target);
|
|
|
var keys = new Set([].concat(sourceKeys, targetKeys));
|
|
|
return (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__["default"])(keys).every(function (key) {
|
|
|
var sourceValue = source[key];
|
|
|
var targetValue = target[key];
|
|
|
if (typeof sourceValue === 'function' && typeof targetValue === 'function') {
|
|
|
return true;
|
|
|
}
|
|
|
return sourceValue === targetValue;
|
|
|
});
|
|
|
}
|
|
|
function defaultGetValueFromEvent(valuePropName) {
|
|
|
var event = arguments.length <= 1 ? undefined : arguments[1];
|
|
|
if (event && event.target && (0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_2__["default"])(event.target) === 'object' && valuePropName in event.target) {
|
|
|
return event.target[valuePropName];
|
|
|
}
|
|
|
return event;
|
|
|
}
|
|
|
/**
|
|
|
* Moves an array item from one position in an array to another.
|
|
|
*
|
|
|
* Note: This is a pure function so a new array will be returned, instead
|
|
|
* of altering the array argument.
|
|
|
*
|
|
|
* @param array Array in which to move an item. (required)
|
|
|
* @param moveIndex The index of the item to move. (required)
|
|
|
* @param toIndex The index to move item at moveIndex to. (required)
|
|
|
*/
|
|
|
function move(array, moveIndex, toIndex) {
|
|
|
var length = array.length;
|
|
|
if (moveIndex < 0 || moveIndex >= length || toIndex < 0 || toIndex >= length) {
|
|
|
return array;
|
|
|
}
|
|
|
var item = array[moveIndex];
|
|
|
var diff = moveIndex - toIndex;
|
|
|
if (diff > 0) {
|
|
|
// move left
|
|
|
return [].concat((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__["default"])(array.slice(0, toIndex)), [item], (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__["default"])(array.slice(toIndex, moveIndex)), (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__["default"])(array.slice(moveIndex + 1, length)));
|
|
|
}
|
|
|
if (diff < 0) {
|
|
|
// move right
|
|
|
return [].concat((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__["default"])(array.slice(0, moveIndex)), (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__["default"])(array.slice(moveIndex + 1, toIndex + 1)), [item], (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__["default"])(array.slice(toIndex + 1, length)));
|
|
|
}
|
|
|
return array;
|
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/rc-motion/es/CSSMotion.js":
|
|
|
/*!************************************************!*\
|
|
|
!*** ./node_modules/rc-motion/es/CSSMotion.js ***!
|
|
|
\************************************************/
|
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__),
|
|
|
/* harmony export */ "genCSSMotion": () => (/* binding */ genCSSMotion)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "./node_modules/@babel/runtime/helpers/esm/defineProperty.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "./node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "./node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ "./node_modules/@babel/runtime/helpers/esm/typeof.js");
|
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
|
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_4__);
|
|
|
/* harmony import */ var rc_util_es_Dom_findDOMNode__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! rc-util/es/Dom/findDOMNode */ "./node_modules/rc-util/es/Dom/findDOMNode.js");
|
|
|
/* harmony import */ var rc_util_es_ref__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! rc-util/es/ref */ "./node_modules/rc-util/es/ref.js");
|
|
|
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js");
|
|
|
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_7__);
|
|
|
/* harmony import */ var _util_motion__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./util/motion */ "./node_modules/rc-motion/es/util/motion.js");
|
|
|
/* harmony import */ var _interface__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./interface */ "./node_modules/rc-motion/es/interface.js");
|
|
|
/* harmony import */ var _hooks_useStatus__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./hooks/useStatus */ "./node_modules/rc-motion/es/hooks/useStatus.js");
|
|
|
/* harmony import */ var _DomWrapper__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./DomWrapper */ "./node_modules/rc-motion/es/DomWrapper.js");
|
|
|
/* harmony import */ var _hooks_useStepQueue__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./hooks/useStepQueue */ "./node_modules/rc-motion/es/hooks/useStepQueue.js");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* eslint-disable react/default-props-match-prop-types, react/no-multi-comp, react/prop-types */
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
* `transitionSupport` is used for none transition test case.
|
|
|
* Default we use browser transition event support check.
|
|
|
*/
|
|
|
|
|
|
function genCSSMotion(config) {
|
|
|
var transitionSupport = config;
|
|
|
|
|
|
if ((0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_3__["default"])(config) === 'object') {
|
|
|
transitionSupport = config.transitionSupport;
|
|
|
}
|
|
|
|
|
|
function isSupportTransition(props) {
|
|
|
return !!(props.motionName && transitionSupport);
|
|
|
}
|
|
|
|
|
|
var CSSMotion = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.forwardRef(function (props, ref) {
|
|
|
var _props$visible = props.visible,
|
|
|
visible = _props$visible === void 0 ? true : _props$visible,
|
|
|
_props$removeOnLeave = props.removeOnLeave,
|
|
|
removeOnLeave = _props$removeOnLeave === void 0 ? true : _props$removeOnLeave,
|
|
|
forceRender = props.forceRender,
|
|
|
children = props.children,
|
|
|
motionName = props.motionName,
|
|
|
leavedClassName = props.leavedClassName,
|
|
|
eventProps = props.eventProps;
|
|
|
var supportMotion = isSupportTransition(props); // Ref to the react node, it may be a HTMLElement
|
|
|
|
|
|
var nodeRef = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)(); // Ref to the dom wrapper in case ref can not pass to HTMLElement
|
|
|
|
|
|
var wrapperNodeRef = (0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)();
|
|
|
|
|
|
function getDomElement() {
|
|
|
try {
|
|
|
// Here we're avoiding call for findDOMNode since it's deprecated
|
|
|
// in strict mode. We're calling it only when node ref is not
|
|
|
// an instance of DOM HTMLElement. Otherwise use
|
|
|
// findDOMNode as a final resort
|
|
|
return nodeRef.current instanceof HTMLElement ? nodeRef.current : (0,rc_util_es_Dom_findDOMNode__WEBPACK_IMPORTED_MODULE_5__["default"])(wrapperNodeRef.current);
|
|
|
} catch (e) {
|
|
|
// Only happen when `motionDeadline` trigger but element removed.
|
|
|
return null;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var _useStatus = (0,_hooks_useStatus__WEBPACK_IMPORTED_MODULE_10__["default"])(supportMotion, visible, getDomElement, props),
|
|
|
_useStatus2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_useStatus, 4),
|
|
|
status = _useStatus2[0],
|
|
|
statusStep = _useStatus2[1],
|
|
|
statusStyle = _useStatus2[2],
|
|
|
mergedVisible = _useStatus2[3]; // Record whether content has rendered
|
|
|
// Will return null for un-rendered even when `removeOnLeave={false}`
|
|
|
|
|
|
|
|
|
var renderedRef = react__WEBPACK_IMPORTED_MODULE_4__.useRef(mergedVisible);
|
|
|
|
|
|
if (mergedVisible) {
|
|
|
renderedRef.current = true;
|
|
|
} // ====================== Refs ======================
|
|
|
|
|
|
|
|
|
var setNodeRef = react__WEBPACK_IMPORTED_MODULE_4__.useCallback(function (node) {
|
|
|
nodeRef.current = node;
|
|
|
(0,rc_util_es_ref__WEBPACK_IMPORTED_MODULE_6__.fillRef)(ref, node);
|
|
|
}, [ref]); // ===================== Render =====================
|
|
|
|
|
|
var motionChildren;
|
|
|
|
|
|
var mergedProps = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, eventProps), {}, {
|
|
|
visible: visible
|
|
|
});
|
|
|
|
|
|
if (!children) {
|
|
|
// No children
|
|
|
motionChildren = null;
|
|
|
} else if (status === _interface__WEBPACK_IMPORTED_MODULE_9__.STATUS_NONE || !isSupportTransition(props)) {
|
|
|
// Stable children
|
|
|
if (mergedVisible) {
|
|
|
motionChildren = children((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, mergedProps), setNodeRef);
|
|
|
} else if (!removeOnLeave && renderedRef.current) {
|
|
|
motionChildren = children((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, mergedProps), {}, {
|
|
|
className: leavedClassName
|
|
|
}), setNodeRef);
|
|
|
} else if (forceRender) {
|
|
|
motionChildren = children((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, mergedProps), {}, {
|
|
|
style: {
|
|
|
display: 'none'
|
|
|
}
|
|
|
}), setNodeRef);
|
|
|
} else {
|
|
|
motionChildren = null;
|
|
|
}
|
|
|
} else {
|
|
|
var _classNames;
|
|
|
|
|
|
// In motion
|
|
|
var statusSuffix;
|
|
|
|
|
|
if (statusStep === _interface__WEBPACK_IMPORTED_MODULE_9__.STEP_PREPARE) {
|
|
|
statusSuffix = 'prepare';
|
|
|
} else if ((0,_hooks_useStepQueue__WEBPACK_IMPORTED_MODULE_12__.isActive)(statusStep)) {
|
|
|
statusSuffix = 'active';
|
|
|
} else if (statusStep === _interface__WEBPACK_IMPORTED_MODULE_9__.STEP_START) {
|
|
|
statusSuffix = 'start';
|
|
|
}
|
|
|
|
|
|
motionChildren = children((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_1__["default"])({}, mergedProps), {}, {
|
|
|
className: classnames__WEBPACK_IMPORTED_MODULE_7___default()((0,_util_motion__WEBPACK_IMPORTED_MODULE_8__.getTransitionName)(motionName, status), (_classNames = {}, (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])(_classNames, (0,_util_motion__WEBPACK_IMPORTED_MODULE_8__.getTransitionName)(motionName, "".concat(status, "-").concat(statusSuffix)), statusSuffix), (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_0__["default"])(_classNames, motionName, typeof motionName === 'string'), _classNames)),
|
|
|
style: statusStyle
|
|
|
}), setNodeRef);
|
|
|
} // Auto inject ref if child node not have `ref` props
|
|
|
|
|
|
|
|
|
if ( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.isValidElement(motionChildren) && (0,rc_util_es_ref__WEBPACK_IMPORTED_MODULE_6__.supportRef)(motionChildren)) {
|
|
|
var _motionChildren = motionChildren,
|
|
|
originNodeRef = _motionChildren.ref;
|
|
|
|
|
|
if (!originNodeRef) {
|
|
|
motionChildren = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.cloneElement(motionChildren, {
|
|
|
ref: setNodeRef
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_4__.createElement(_DomWrapper__WEBPACK_IMPORTED_MODULE_11__["default"], {
|
|
|
ref: wrapperNodeRef
|
|
|
}, motionChildren);
|
|
|
});
|
|
|
CSSMotion.displayName = 'CSSMotion';
|
|
|
return CSSMotion;
|
|
|
}
|
|
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (genCSSMotion(_util_motion__WEBPACK_IMPORTED_MODULE_8__.supportTransition));
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/rc-motion/es/CSSMotionList.js":
|
|
|
/*!****************************************************!*\
|
|
|
!*** ./node_modules/rc-motion/es/CSSMotionList.js ***!
|
|
|
\****************************************************/
|
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__),
|
|
|
/* harmony export */ "genCSSMotionList": () => (/* binding */ genCSSMotionList)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "./node_modules/@babel/runtime/helpers/esm/extends.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "./node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "./node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/classCallCheck */ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/esm/createClass */ "./node_modules/@babel/runtime/helpers/esm/createClass.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_inherits__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inherits */ "./node_modules/@babel/runtime/helpers/esm/inherits.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_createSuper__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/esm/createSuper */ "./node_modules/@babel/runtime/helpers/esm/createSuper.js");
|
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
|
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_7__);
|
|
|
/* harmony import */ var _CSSMotion__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./CSSMotion */ "./node_modules/rc-motion/es/CSSMotion.js");
|
|
|
/* harmony import */ var _util_motion__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./util/motion */ "./node_modules/rc-motion/es/util/motion.js");
|
|
|
/* harmony import */ var _util_diff__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./util/diff */ "./node_modules/rc-motion/es/util/diff.js");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var _excluded = ["component", "children", "onVisibleChanged", "onAllRemoved"],
|
|
|
_excluded2 = ["status"];
|
|
|
|
|
|
/* eslint react/prop-types: 0 */
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var MOTION_PROP_NAMES = ['eventProps', 'visible', 'children', 'motionName', 'motionAppear', 'motionEnter', 'motionLeave', 'motionLeaveImmediately', 'motionDeadline', 'removeOnLeave', 'leavedClassName', 'onAppearStart', 'onAppearActive', 'onAppearEnd', 'onEnterStart', 'onEnterActive', 'onEnterEnd', 'onLeaveStart', 'onLeaveActive', 'onLeaveEnd'];
|
|
|
/**
|
|
|
* Generate a CSSMotionList component with config
|
|
|
* @param transitionSupport No need since CSSMotionList no longer depends on transition support
|
|
|
* @param CSSMotion CSSMotion component
|
|
|
*/
|
|
|
|
|
|
function genCSSMotionList(transitionSupport) {
|
|
|
var CSSMotion = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _CSSMotion__WEBPACK_IMPORTED_MODULE_8__["default"];
|
|
|
|
|
|
var CSSMotionList = /*#__PURE__*/function (_React$Component) {
|
|
|
(0,_babel_runtime_helpers_esm_inherits__WEBPACK_IMPORTED_MODULE_5__["default"])(CSSMotionList, _React$Component);
|
|
|
|
|
|
var _super = (0,_babel_runtime_helpers_esm_createSuper__WEBPACK_IMPORTED_MODULE_6__["default"])(CSSMotionList);
|
|
|
|
|
|
function CSSMotionList() {
|
|
|
var _this;
|
|
|
|
|
|
(0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_3__["default"])(this, CSSMotionList);
|
|
|
|
|
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
|
args[_key] = arguments[_key];
|
|
|
}
|
|
|
|
|
|
_this = _super.call.apply(_super, [this].concat(args));
|
|
|
_this.state = {
|
|
|
keyEntities: []
|
|
|
};
|
|
|
|
|
|
_this.removeKey = function (removeKey) {
|
|
|
var keyEntities = _this.state.keyEntities;
|
|
|
var nextKeyEntities = keyEntities.map(function (entity) {
|
|
|
if (entity.key !== removeKey) return entity;
|
|
|
return (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])({}, entity), {}, {
|
|
|
status: _util_diff__WEBPACK_IMPORTED_MODULE_10__.STATUS_REMOVED
|
|
|
});
|
|
|
});
|
|
|
|
|
|
_this.setState({
|
|
|
keyEntities: nextKeyEntities
|
|
|
});
|
|
|
|
|
|
return nextKeyEntities.filter(function (_ref) {
|
|
|
var status = _ref.status;
|
|
|
return status !== _util_diff__WEBPACK_IMPORTED_MODULE_10__.STATUS_REMOVED;
|
|
|
}).length;
|
|
|
};
|
|
|
|
|
|
return _this;
|
|
|
}
|
|
|
|
|
|
(0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_4__["default"])(CSSMotionList, [{
|
|
|
key: "render",
|
|
|
value: function render() {
|
|
|
var _this2 = this;
|
|
|
|
|
|
var keyEntities = this.state.keyEntities;
|
|
|
|
|
|
var _this$props = this.props,
|
|
|
component = _this$props.component,
|
|
|
children = _this$props.children,
|
|
|
_onVisibleChanged = _this$props.onVisibleChanged,
|
|
|
onAllRemoved = _this$props.onAllRemoved,
|
|
|
restProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__["default"])(_this$props, _excluded);
|
|
|
|
|
|
var Component = component || react__WEBPACK_IMPORTED_MODULE_7__.Fragment;
|
|
|
var motionProps = {};
|
|
|
MOTION_PROP_NAMES.forEach(function (prop) {
|
|
|
motionProps[prop] = restProps[prop];
|
|
|
delete restProps[prop];
|
|
|
});
|
|
|
delete restProps.keys;
|
|
|
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7__.createElement(Component, restProps, keyEntities.map(function (_ref2) {
|
|
|
var status = _ref2.status,
|
|
|
eventProps = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_1__["default"])(_ref2, _excluded2);
|
|
|
|
|
|
var visible = status === _util_diff__WEBPACK_IMPORTED_MODULE_10__.STATUS_ADD || status === _util_diff__WEBPACK_IMPORTED_MODULE_10__.STATUS_KEEP;
|
|
|
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7__.createElement(CSSMotion, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({}, motionProps, {
|
|
|
key: eventProps.key,
|
|
|
visible: visible,
|
|
|
eventProps: eventProps,
|
|
|
onVisibleChanged: function onVisibleChanged(changedVisible) {
|
|
|
_onVisibleChanged === null || _onVisibleChanged === void 0 ? void 0 : _onVisibleChanged(changedVisible, {
|
|
|
key: eventProps.key
|
|
|
});
|
|
|
|
|
|
if (!changedVisible) {
|
|
|
var restKeysCount = _this2.removeKey(eventProps.key);
|
|
|
|
|
|
if (restKeysCount === 0 && onAllRemoved) {
|
|
|
onAllRemoved();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}), children);
|
|
|
}));
|
|
|
}
|
|
|
}], [{
|
|
|
key: "getDerivedStateFromProps",
|
|
|
value: function getDerivedStateFromProps(_ref3, _ref4) {
|
|
|
var keys = _ref3.keys;
|
|
|
var keyEntities = _ref4.keyEntities;
|
|
|
var parsedKeyObjects = (0,_util_diff__WEBPACK_IMPORTED_MODULE_10__.parseKeys)(keys);
|
|
|
var mixedKeyEntities = (0,_util_diff__WEBPACK_IMPORTED_MODULE_10__.diffKeys)(keyEntities, parsedKeyObjects);
|
|
|
return {
|
|
|
keyEntities: mixedKeyEntities.filter(function (entity) {
|
|
|
var prevEntity = keyEntities.find(function (_ref5) {
|
|
|
var key = _ref5.key;
|
|
|
return entity.key === key;
|
|
|
}); // Remove if already mark as removed
|
|
|
|
|
|
if (prevEntity && prevEntity.status === _util_diff__WEBPACK_IMPORTED_MODULE_10__.STATUS_REMOVED && entity.status === _util_diff__WEBPACK_IMPORTED_MODULE_10__.STATUS_REMOVE) {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
return true;
|
|
|
})
|
|
|
};
|
|
|
} // ZombieJ: Return the count of rest keys. It's safe to refactor if need more info.
|
|
|
|
|
|
}]);
|
|
|
|
|
|
return CSSMotionList;
|
|
|
}(react__WEBPACK_IMPORTED_MODULE_7__.Component);
|
|
|
|
|
|
CSSMotionList.defaultProps = {
|
|
|
component: 'div'
|
|
|
};
|
|
|
return CSSMotionList;
|
|
|
}
|
|
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (genCSSMotionList(_util_motion__WEBPACK_IMPORTED_MODULE_9__.supportTransition));
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/rc-motion/es/DomWrapper.js":
|
|
|
/*!*************************************************!*\
|
|
|
!*** ./node_modules/rc-motion/es/DomWrapper.js ***!
|
|
|
\*************************************************/
|
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/classCallCheck */ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/createClass */ "./node_modules/@babel/runtime/helpers/esm/createClass.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_inherits__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inherits */ "./node_modules/@babel/runtime/helpers/esm/inherits.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_createSuper__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/createSuper */ "./node_modules/@babel/runtime/helpers/esm/createSuper.js");
|
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
|
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_4__);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var DomWrapper = /*#__PURE__*/function (_React$Component) {
|
|
|
(0,_babel_runtime_helpers_esm_inherits__WEBPACK_IMPORTED_MODULE_2__["default"])(DomWrapper, _React$Component);
|
|
|
|
|
|
var _super = (0,_babel_runtime_helpers_esm_createSuper__WEBPACK_IMPORTED_MODULE_3__["default"])(DomWrapper);
|
|
|
|
|
|
function DomWrapper() {
|
|
|
(0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_0__["default"])(this, DomWrapper);
|
|
|
|
|
|
return _super.apply(this, arguments);
|
|
|
}
|
|
|
|
|
|
(0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_1__["default"])(DomWrapper, [{
|
|
|
key: "render",
|
|
|
value: function render() {
|
|
|
return this.props.children;
|
|
|
}
|
|
|
}]);
|
|
|
|
|
|
return DomWrapper;
|
|
|
}(react__WEBPACK_IMPORTED_MODULE_4__.Component);
|
|
|
|
|
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (DomWrapper);
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/rc-motion/es/hooks/useDomMotionEvents.js":
|
|
|
/*!***************************************************************!*\
|
|
|
!*** ./node_modules/rc-motion/es/hooks/useDomMotionEvents.js ***!
|
|
|
\***************************************************************/
|
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
|
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
|
/* harmony import */ var _util_motion__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/motion */ "./node_modules/rc-motion/es/util/motion.js");
|
|
|
|
|
|
|
|
|
|
|
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (function (callback) {
|
|
|
var cacheElementRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(); // Cache callback
|
|
|
|
|
|
var callbackRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(callback);
|
|
|
callbackRef.current = callback; // Internal motion event handler
|
|
|
|
|
|
var onInternalMotionEnd = react__WEBPACK_IMPORTED_MODULE_0__.useCallback(function (event) {
|
|
|
callbackRef.current(event);
|
|
|
}, []); // Remove events
|
|
|
|
|
|
function removeMotionEvents(element) {
|
|
|
if (element) {
|
|
|
element.removeEventListener(_util_motion__WEBPACK_IMPORTED_MODULE_1__.transitionEndName, onInternalMotionEnd);
|
|
|
element.removeEventListener(_util_motion__WEBPACK_IMPORTED_MODULE_1__.animationEndName, onInternalMotionEnd);
|
|
|
}
|
|
|
} // Patch events
|
|
|
|
|
|
|
|
|
function patchMotionEvents(element) {
|
|
|
if (cacheElementRef.current && cacheElementRef.current !== element) {
|
|
|
removeMotionEvents(cacheElementRef.current);
|
|
|
}
|
|
|
|
|
|
if (element && element !== cacheElementRef.current) {
|
|
|
element.addEventListener(_util_motion__WEBPACK_IMPORTED_MODULE_1__.transitionEndName, onInternalMotionEnd);
|
|
|
element.addEventListener(_util_motion__WEBPACK_IMPORTED_MODULE_1__.animationEndName, onInternalMotionEnd); // Save as cache in case dom removed trigger by `motionDeadline`
|
|
|
|
|
|
cacheElementRef.current = element;
|
|
|
}
|
|
|
} // Clean up when removed
|
|
|
|
|
|
|
|
|
react__WEBPACK_IMPORTED_MODULE_0__.useEffect(function () {
|
|
|
return function () {
|
|
|
removeMotionEvents(cacheElementRef.current);
|
|
|
};
|
|
|
}, []);
|
|
|
return [patchMotionEvents, removeMotionEvents];
|
|
|
});
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/rc-motion/es/hooks/useIsomorphicLayoutEffect.js":
|
|
|
/*!**********************************************************************!*\
|
|
|
!*** ./node_modules/rc-motion/es/hooks/useIsomorphicLayoutEffect.js ***!
|
|
|
\**********************************************************************/
|
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
|
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
|
/* harmony import */ var rc_util_es_Dom_canUseDom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rc-util/es/Dom/canUseDom */ "./node_modules/rc-util/es/Dom/canUseDom.js");
|
|
|
|
|
|
// It's safe to use `useLayoutEffect` but the warning is annoying
|
|
|
|
|
|
var useIsomorphicLayoutEffect = (0,rc_util_es_Dom_canUseDom__WEBPACK_IMPORTED_MODULE_1__["default"])() ? react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect : react__WEBPACK_IMPORTED_MODULE_0__.useEffect;
|
|
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (useIsomorphicLayoutEffect);
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/rc-motion/es/hooks/useNextFrame.js":
|
|
|
/*!*********************************************************!*\
|
|
|
!*** ./node_modules/rc-motion/es/hooks/useNextFrame.js ***!
|
|
|
\*********************************************************/
|
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
|
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
|
/* harmony import */ var rc_util_es_raf__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rc-util/es/raf */ "./node_modules/rc-util/es/raf.js");
|
|
|
|
|
|
|
|
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (function () {
|
|
|
var nextFrameRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null);
|
|
|
|
|
|
function cancelNextFrame() {
|
|
|
rc_util_es_raf__WEBPACK_IMPORTED_MODULE_1__["default"].cancel(nextFrameRef.current);
|
|
|
}
|
|
|
|
|
|
function nextFrame(callback) {
|
|
|
var delay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2;
|
|
|
cancelNextFrame();
|
|
|
var nextFrameId = (0,rc_util_es_raf__WEBPACK_IMPORTED_MODULE_1__["default"])(function () {
|
|
|
if (delay <= 1) {
|
|
|
callback({
|
|
|
isCanceled: function isCanceled() {
|
|
|
return nextFrameId !== nextFrameRef.current;
|
|
|
}
|
|
|
});
|
|
|
} else {
|
|
|
nextFrame(callback, delay - 1);
|
|
|
}
|
|
|
});
|
|
|
nextFrameRef.current = nextFrameId;
|
|
|
}
|
|
|
|
|
|
react__WEBPACK_IMPORTED_MODULE_0__.useEffect(function () {
|
|
|
return function () {
|
|
|
cancelNextFrame();
|
|
|
};
|
|
|
}, []);
|
|
|
return [nextFrame, cancelNextFrame];
|
|
|
});
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/rc-motion/es/hooks/useStatus.js":
|
|
|
/*!******************************************************!*\
|
|
|
!*** ./node_modules/rc-motion/es/hooks/useStatus.js ***!
|
|
|
\******************************************************/
|
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (/* binding */ useStatus)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "./node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "./node_modules/@babel/runtime/helpers/esm/defineProperty.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "./node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
|
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
|
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);
|
|
|
/* harmony import */ var rc_util_es_hooks_useState__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! rc-util/es/hooks/useState */ "./node_modules/rc-util/es/hooks/useState.js");
|
|
|
/* harmony import */ var _interface__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../interface */ "./node_modules/rc-motion/es/interface.js");
|
|
|
/* harmony import */ var _useStepQueue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./useStepQueue */ "./node_modules/rc-motion/es/hooks/useStepQueue.js");
|
|
|
/* harmony import */ var _useDomMotionEvents__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./useDomMotionEvents */ "./node_modules/rc-motion/es/hooks/useDomMotionEvents.js");
|
|
|
/* harmony import */ var _useIsomorphicLayoutEffect__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./useIsomorphicLayoutEffect */ "./node_modules/rc-motion/es/hooks/useIsomorphicLayoutEffect.js");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function useStatus(supportMotion, visible, getElement, _ref) {
|
|
|
var _ref$motionEnter = _ref.motionEnter,
|
|
|
motionEnter = _ref$motionEnter === void 0 ? true : _ref$motionEnter,
|
|
|
_ref$motionAppear = _ref.motionAppear,
|
|
|
motionAppear = _ref$motionAppear === void 0 ? true : _ref$motionAppear,
|
|
|
_ref$motionLeave = _ref.motionLeave,
|
|
|
motionLeave = _ref$motionLeave === void 0 ? true : _ref$motionLeave,
|
|
|
motionDeadline = _ref.motionDeadline,
|
|
|
motionLeaveImmediately = _ref.motionLeaveImmediately,
|
|
|
onAppearPrepare = _ref.onAppearPrepare,
|
|
|
onEnterPrepare = _ref.onEnterPrepare,
|
|
|
onLeavePrepare = _ref.onLeavePrepare,
|
|
|
onAppearStart = _ref.onAppearStart,
|
|
|
onEnterStart = _ref.onEnterStart,
|
|
|
onLeaveStart = _ref.onLeaveStart,
|
|
|
onAppearActive = _ref.onAppearActive,
|
|
|
onEnterActive = _ref.onEnterActive,
|
|
|
onLeaveActive = _ref.onLeaveActive,
|
|
|
onAppearEnd = _ref.onAppearEnd,
|
|
|
onEnterEnd = _ref.onEnterEnd,
|
|
|
onLeaveEnd = _ref.onLeaveEnd,
|
|
|
onVisibleChanged = _ref.onVisibleChanged;
|
|
|
|
|
|
// Used for outer render usage to avoid `visible: false & status: none` to render nothing
|
|
|
var _useState = (0,rc_util_es_hooks_useState__WEBPACK_IMPORTED_MODULE_4__["default"])(),
|
|
|
_useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_useState, 2),
|
|
|
asyncVisible = _useState2[0],
|
|
|
setAsyncVisible = _useState2[1];
|
|
|
|
|
|
var _useState3 = (0,rc_util_es_hooks_useState__WEBPACK_IMPORTED_MODULE_4__["default"])(_interface__WEBPACK_IMPORTED_MODULE_5__.STATUS_NONE),
|
|
|
_useState4 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_useState3, 2),
|
|
|
status = _useState4[0],
|
|
|
setStatus = _useState4[1];
|
|
|
|
|
|
var _useState5 = (0,rc_util_es_hooks_useState__WEBPACK_IMPORTED_MODULE_4__["default"])(null),
|
|
|
_useState6 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_useState5, 2),
|
|
|
style = _useState6[0],
|
|
|
setStyle = _useState6[1];
|
|
|
|
|
|
var mountedRef = (0,react__WEBPACK_IMPORTED_MODULE_3__.useRef)(false);
|
|
|
var deadlineRef = (0,react__WEBPACK_IMPORTED_MODULE_3__.useRef)(null); // =========================== Dom Node ===========================
|
|
|
|
|
|
function getDomElement() {
|
|
|
return getElement();
|
|
|
} // ========================== Motion End ==========================
|
|
|
|
|
|
|
|
|
var activeRef = (0,react__WEBPACK_IMPORTED_MODULE_3__.useRef)(false);
|
|
|
|
|
|
function onInternalMotionEnd(event) {
|
|
|
var element = getDomElement();
|
|
|
|
|
|
if (event && !event.deadline && event.target !== element) {
|
|
|
// event exists
|
|
|
// not initiated by deadline
|
|
|
// transitionEnd not fired by inner elements
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
var currentActive = activeRef.current;
|
|
|
var canEnd;
|
|
|
|
|
|
if (status === _interface__WEBPACK_IMPORTED_MODULE_5__.STATUS_APPEAR && currentActive) {
|
|
|
canEnd = onAppearEnd === null || onAppearEnd === void 0 ? void 0 : onAppearEnd(element, event);
|
|
|
} else if (status === _interface__WEBPACK_IMPORTED_MODULE_5__.STATUS_ENTER && currentActive) {
|
|
|
canEnd = onEnterEnd === null || onEnterEnd === void 0 ? void 0 : onEnterEnd(element, event);
|
|
|
} else if (status === _interface__WEBPACK_IMPORTED_MODULE_5__.STATUS_LEAVE && currentActive) {
|
|
|
canEnd = onLeaveEnd === null || onLeaveEnd === void 0 ? void 0 : onLeaveEnd(element, event);
|
|
|
} // Only update status when `canEnd` and not destroyed
|
|
|
|
|
|
|
|
|
if (status !== _interface__WEBPACK_IMPORTED_MODULE_5__.STATUS_NONE && currentActive && canEnd !== false) {
|
|
|
setStatus(_interface__WEBPACK_IMPORTED_MODULE_5__.STATUS_NONE, true);
|
|
|
setStyle(null, true);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var _useDomMotionEvents = (0,_useDomMotionEvents__WEBPACK_IMPORTED_MODULE_7__["default"])(onInternalMotionEnd),
|
|
|
_useDomMotionEvents2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_useDomMotionEvents, 1),
|
|
|
patchMotionEvents = _useDomMotionEvents2[0]; // ============================= Step =============================
|
|
|
|
|
|
|
|
|
var eventHandlers = react__WEBPACK_IMPORTED_MODULE_3__.useMemo(function () {
|
|
|
var _ref2, _ref3, _ref4;
|
|
|
|
|
|
switch (status) {
|
|
|
case _interface__WEBPACK_IMPORTED_MODULE_5__.STATUS_APPEAR:
|
|
|
return _ref2 = {}, (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])(_ref2, _interface__WEBPACK_IMPORTED_MODULE_5__.STEP_PREPARE, onAppearPrepare), (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])(_ref2, _interface__WEBPACK_IMPORTED_MODULE_5__.STEP_START, onAppearStart), (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])(_ref2, _interface__WEBPACK_IMPORTED_MODULE_5__.STEP_ACTIVE, onAppearActive), _ref2;
|
|
|
|
|
|
case _interface__WEBPACK_IMPORTED_MODULE_5__.STATUS_ENTER:
|
|
|
return _ref3 = {}, (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])(_ref3, _interface__WEBPACK_IMPORTED_MODULE_5__.STEP_PREPARE, onEnterPrepare), (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])(_ref3, _interface__WEBPACK_IMPORTED_MODULE_5__.STEP_START, onEnterStart), (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])(_ref3, _interface__WEBPACK_IMPORTED_MODULE_5__.STEP_ACTIVE, onEnterActive), _ref3;
|
|
|
|
|
|
case _interface__WEBPACK_IMPORTED_MODULE_5__.STATUS_LEAVE:
|
|
|
return _ref4 = {}, (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])(_ref4, _interface__WEBPACK_IMPORTED_MODULE_5__.STEP_PREPARE, onLeavePrepare), (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])(_ref4, _interface__WEBPACK_IMPORTED_MODULE_5__.STEP_START, onLeaveStart), (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])(_ref4, _interface__WEBPACK_IMPORTED_MODULE_5__.STEP_ACTIVE, onLeaveActive), _ref4;
|
|
|
|
|
|
default:
|
|
|
return {};
|
|
|
}
|
|
|
}, [status]);
|
|
|
|
|
|
var _useStepQueue = (0,_useStepQueue__WEBPACK_IMPORTED_MODULE_6__["default"])(status, function (newStep) {
|
|
|
// Only prepare step can be skip
|
|
|
if (newStep === _interface__WEBPACK_IMPORTED_MODULE_5__.STEP_PREPARE) {
|
|
|
var onPrepare = eventHandlers[_interface__WEBPACK_IMPORTED_MODULE_5__.STEP_PREPARE];
|
|
|
|
|
|
if (!onPrepare) {
|
|
|
return _useStepQueue__WEBPACK_IMPORTED_MODULE_6__.SkipStep;
|
|
|
}
|
|
|
|
|
|
return onPrepare(getDomElement());
|
|
|
} // Rest step is sync update
|
|
|
|
|
|
|
|
|
// Rest step is sync update
|
|
|
if (step in eventHandlers) {
|
|
|
var _eventHandlers$step;
|
|
|
|
|
|
setStyle(((_eventHandlers$step = eventHandlers[step]) === null || _eventHandlers$step === void 0 ? void 0 : _eventHandlers$step.call(eventHandlers, getDomElement(), null)) || null);
|
|
|
}
|
|
|
|
|
|
if (step === _interface__WEBPACK_IMPORTED_MODULE_5__.STEP_ACTIVE) {
|
|
|
// Patch events when motion needed
|
|
|
patchMotionEvents(getDomElement());
|
|
|
|
|
|
if (motionDeadline > 0) {
|
|
|
clearTimeout(deadlineRef.current);
|
|
|
deadlineRef.current = setTimeout(function () {
|
|
|
onInternalMotionEnd({
|
|
|
deadline: true
|
|
|
});
|
|
|
}, motionDeadline);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return _useStepQueue__WEBPACK_IMPORTED_MODULE_6__.DoStep;
|
|
|
}),
|
|
|
_useStepQueue2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_useStepQueue, 2),
|
|
|
startStep = _useStepQueue2[0],
|
|
|
step = _useStepQueue2[1];
|
|
|
|
|
|
var active = (0,_useStepQueue__WEBPACK_IMPORTED_MODULE_6__.isActive)(step);
|
|
|
activeRef.current = active; // ============================ Status ============================
|
|
|
// Update with new status
|
|
|
|
|
|
(0,_useIsomorphicLayoutEffect__WEBPACK_IMPORTED_MODULE_8__["default"])(function () {
|
|
|
setAsyncVisible(visible);
|
|
|
var isMounted = mountedRef.current;
|
|
|
mountedRef.current = true;
|
|
|
|
|
|
if (!supportMotion) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
var nextStatus; // Appear
|
|
|
|
|
|
if (!isMounted && visible && motionAppear) {
|
|
|
nextStatus = _interface__WEBPACK_IMPORTED_MODULE_5__.STATUS_APPEAR;
|
|
|
} // Enter
|
|
|
|
|
|
|
|
|
if (isMounted && visible && motionEnter) {
|
|
|
nextStatus = _interface__WEBPACK_IMPORTED_MODULE_5__.STATUS_ENTER;
|
|
|
} // Leave
|
|
|
|
|
|
|
|
|
if (isMounted && !visible && motionLeave || !isMounted && motionLeaveImmediately && !visible && motionLeave) {
|
|
|
nextStatus = _interface__WEBPACK_IMPORTED_MODULE_5__.STATUS_LEAVE;
|
|
|
} // Update to next status
|
|
|
|
|
|
|
|
|
if (nextStatus) {
|
|
|
setStatus(nextStatus);
|
|
|
startStep();
|
|
|
}
|
|
|
}, [visible]); // ============================ Effect ============================
|
|
|
// Reset when motion changed
|
|
|
|
|
|
(0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)(function () {
|
|
|
if ( // Cancel appear
|
|
|
status === _interface__WEBPACK_IMPORTED_MODULE_5__.STATUS_APPEAR && !motionAppear || // Cancel enter
|
|
|
status === _interface__WEBPACK_IMPORTED_MODULE_5__.STATUS_ENTER && !motionEnter || // Cancel leave
|
|
|
status === _interface__WEBPACK_IMPORTED_MODULE_5__.STATUS_LEAVE && !motionLeave) {
|
|
|
setStatus(_interface__WEBPACK_IMPORTED_MODULE_5__.STATUS_NONE);
|
|
|
}
|
|
|
}, [motionAppear, motionEnter, motionLeave]);
|
|
|
(0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)(function () {
|
|
|
return function () {
|
|
|
mountedRef.current = false;
|
|
|
clearTimeout(deadlineRef.current);
|
|
|
};
|
|
|
}, []); // Trigger `onVisibleChanged`
|
|
|
|
|
|
var firstMountChangeRef = react__WEBPACK_IMPORTED_MODULE_3__.useRef(false);
|
|
|
(0,react__WEBPACK_IMPORTED_MODULE_3__.useEffect)(function () {
|
|
|
// [visible & motion not end] => [!visible & motion end] still need trigger onVisibleChanged
|
|
|
if (asyncVisible) {
|
|
|
firstMountChangeRef.current = true;
|
|
|
}
|
|
|
|
|
|
if (asyncVisible !== undefined && status === _interface__WEBPACK_IMPORTED_MODULE_5__.STATUS_NONE) {
|
|
|
// Skip first render is invisible since it's nothing changed
|
|
|
if (firstMountChangeRef.current || asyncVisible) {
|
|
|
onVisibleChanged === null || onVisibleChanged === void 0 ? void 0 : onVisibleChanged(asyncVisible);
|
|
|
}
|
|
|
|
|
|
firstMountChangeRef.current = true;
|
|
|
}
|
|
|
}, [asyncVisible, status]); // ============================ Styles ============================
|
|
|
|
|
|
var mergedStyle = style;
|
|
|
|
|
|
if (eventHandlers[_interface__WEBPACK_IMPORTED_MODULE_5__.STEP_PREPARE] && step === _interface__WEBPACK_IMPORTED_MODULE_5__.STEP_START) {
|
|
|
mergedStyle = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({
|
|
|
transition: 'none'
|
|
|
}, mergedStyle);
|
|
|
}
|
|
|
|
|
|
return [status, step, mergedStyle, asyncVisible !== null && asyncVisible !== void 0 ? asyncVisible : visible];
|
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/rc-motion/es/hooks/useStepQueue.js":
|
|
|
/*!*********************************************************!*\
|
|
|
!*** ./node_modules/rc-motion/es/hooks/useStepQueue.js ***!
|
|
|
\*********************************************************/
|
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "DoStep": () => (/* binding */ DoStep),
|
|
|
/* harmony export */ "SkipStep": () => (/* binding */ SkipStep),
|
|
|
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__),
|
|
|
/* harmony export */ "isActive": () => (/* binding */ isActive)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "./node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
|
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
|
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
|
|
|
/* harmony import */ var rc_util_es_hooks_useState__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! rc-util/es/hooks/useState */ "./node_modules/rc-util/es/hooks/useState.js");
|
|
|
/* harmony import */ var _interface__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../interface */ "./node_modules/rc-motion/es/interface.js");
|
|
|
/* harmony import */ var _useNextFrame__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./useNextFrame */ "./node_modules/rc-motion/es/hooks/useNextFrame.js");
|
|
|
/* harmony import */ var _useIsomorphicLayoutEffect__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./useIsomorphicLayoutEffect */ "./node_modules/rc-motion/es/hooks/useIsomorphicLayoutEffect.js");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var STEP_QUEUE = [_interface__WEBPACK_IMPORTED_MODULE_3__.STEP_PREPARE, _interface__WEBPACK_IMPORTED_MODULE_3__.STEP_START, _interface__WEBPACK_IMPORTED_MODULE_3__.STEP_ACTIVE, _interface__WEBPACK_IMPORTED_MODULE_3__.STEP_ACTIVATED];
|
|
|
/** Skip current step */
|
|
|
|
|
|
var SkipStep = false;
|
|
|
/** Current step should be update in */
|
|
|
|
|
|
var DoStep = true;
|
|
|
function isActive(step) {
|
|
|
return step === _interface__WEBPACK_IMPORTED_MODULE_3__.STEP_ACTIVE || step === _interface__WEBPACK_IMPORTED_MODULE_3__.STEP_ACTIVATED;
|
|
|
}
|
|
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (function (status, callback) {
|
|
|
var _useState = (0,rc_util_es_hooks_useState__WEBPACK_IMPORTED_MODULE_2__["default"])(_interface__WEBPACK_IMPORTED_MODULE_3__.STEP_NONE),
|
|
|
_useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__["default"])(_useState, 2),
|
|
|
step = _useState2[0],
|
|
|
setStep = _useState2[1];
|
|
|
|
|
|
var _useNextFrame = (0,_useNextFrame__WEBPACK_IMPORTED_MODULE_4__["default"])(),
|
|
|
_useNextFrame2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__["default"])(_useNextFrame, 2),
|
|
|
nextFrame = _useNextFrame2[0],
|
|
|
cancelNextFrame = _useNextFrame2[1];
|
|
|
|
|
|
function startQueue() {
|
|
|
setStep(_interface__WEBPACK_IMPORTED_MODULE_3__.STEP_PREPARE, true);
|
|
|
}
|
|
|
|
|
|
(0,_useIsomorphicLayoutEffect__WEBPACK_IMPORTED_MODULE_5__["default"])(function () {
|
|
|
if (step !== _interface__WEBPACK_IMPORTED_MODULE_3__.STEP_NONE && step !== _interface__WEBPACK_IMPORTED_MODULE_3__.STEP_ACTIVATED) {
|
|
|
var index = STEP_QUEUE.indexOf(step);
|
|
|
var nextStep = STEP_QUEUE[index + 1];
|
|
|
var result = callback(step);
|
|
|
|
|
|
if (result === SkipStep) {
|
|
|
// Skip when no needed
|
|
|
setStep(nextStep, true);
|
|
|
} else {
|
|
|
// Do as frame for step update
|
|
|
nextFrame(function (info) {
|
|
|
function doNext() {
|
|
|
// Skip since current queue is ood
|
|
|
if (info.isCanceled()) return;
|
|
|
setStep(nextStep, true);
|
|
|
}
|
|
|
|
|
|
if (result === true) {
|
|
|
doNext();
|
|
|
} else {
|
|
|
// Only promise should be async
|
|
|
Promise.resolve(result).then(doNext);
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
}, [status, step]);
|
|
|
react__WEBPACK_IMPORTED_MODULE_1__.useEffect(function () {
|
|
|
return function () {
|
|
|
cancelNextFrame();
|
|
|
};
|
|
|
}, []);
|
|
|
return [startQueue, step];
|
|
|
});
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/rc-motion/es/index.js":
|
|
|
/*!********************************************!*\
|
|
|
!*** ./node_modules/rc-motion/es/index.js ***!
|
|
|
\********************************************/
|
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "CSSMotionList": () => (/* reexport safe */ _CSSMotionList__WEBPACK_IMPORTED_MODULE_1__["default"]),
|
|
|
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var _CSSMotion__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./CSSMotion */ "./node_modules/rc-motion/es/CSSMotion.js");
|
|
|
/* harmony import */ var _CSSMotionList__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./CSSMotionList */ "./node_modules/rc-motion/es/CSSMotionList.js");
|
|
|
|
|
|
|
|
|
|
|
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_CSSMotion__WEBPACK_IMPORTED_MODULE_0__["default"]);
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/rc-motion/es/interface.js":
|
|
|
/*!************************************************!*\
|
|
|
!*** ./node_modules/rc-motion/es/interface.js ***!
|
|
|
\************************************************/
|
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "STATUS_APPEAR": () => (/* binding */ STATUS_APPEAR),
|
|
|
/* harmony export */ "STATUS_ENTER": () => (/* binding */ STATUS_ENTER),
|
|
|
/* harmony export */ "STATUS_LEAVE": () => (/* binding */ STATUS_LEAVE),
|
|
|
/* harmony export */ "STATUS_NONE": () => (/* binding */ STATUS_NONE),
|
|
|
/* harmony export */ "STEP_ACTIVATED": () => (/* binding */ STEP_ACTIVATED),
|
|
|
/* harmony export */ "STEP_ACTIVE": () => (/* binding */ STEP_ACTIVE),
|
|
|
/* harmony export */ "STEP_NONE": () => (/* binding */ STEP_NONE),
|
|
|
/* harmony export */ "STEP_PREPARE": () => (/* binding */ STEP_PREPARE),
|
|
|
/* harmony export */ "STEP_START": () => (/* binding */ STEP_START)
|
|
|
/* harmony export */ });
|
|
|
var STATUS_NONE = 'none';
|
|
|
var STATUS_APPEAR = 'appear';
|
|
|
var STATUS_ENTER = 'enter';
|
|
|
var STATUS_LEAVE = 'leave';
|
|
|
var STEP_NONE = 'none';
|
|
|
var STEP_PREPARE = 'prepare';
|
|
|
var STEP_START = 'start';
|
|
|
var STEP_ACTIVE = 'active';
|
|
|
var STEP_ACTIVATED = 'end';
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/rc-motion/es/util/diff.js":
|
|
|
/*!************************************************!*\
|
|
|
!*** ./node_modules/rc-motion/es/util/diff.js ***!
|
|
|
\************************************************/
|
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "STATUS_ADD": () => (/* binding */ STATUS_ADD),
|
|
|
/* harmony export */ "STATUS_KEEP": () => (/* binding */ STATUS_KEEP),
|
|
|
/* harmony export */ "STATUS_REMOVE": () => (/* binding */ STATUS_REMOVE),
|
|
|
/* harmony export */ "STATUS_REMOVED": () => (/* binding */ STATUS_REMOVED),
|
|
|
/* harmony export */ "diffKeys": () => (/* binding */ diffKeys),
|
|
|
/* harmony export */ "parseKeys": () => (/* binding */ parseKeys),
|
|
|
/* harmony export */ "wrapKeyToObject": () => (/* binding */ wrapKeyToObject)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "./node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ "./node_modules/@babel/runtime/helpers/esm/typeof.js");
|
|
|
|
|
|
|
|
|
var STATUS_ADD = 'add';
|
|
|
var STATUS_KEEP = 'keep';
|
|
|
var STATUS_REMOVE = 'remove';
|
|
|
var STATUS_REMOVED = 'removed';
|
|
|
function wrapKeyToObject(key) {
|
|
|
var keyObj;
|
|
|
|
|
|
if (key && (0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_1__["default"])(key) === 'object' && 'key' in key) {
|
|
|
keyObj = key;
|
|
|
} else {
|
|
|
keyObj = {
|
|
|
key: key
|
|
|
};
|
|
|
}
|
|
|
|
|
|
return (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, keyObj), {}, {
|
|
|
key: String(keyObj.key)
|
|
|
});
|
|
|
}
|
|
|
function parseKeys() {
|
|
|
var keys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
|
return keys.map(wrapKeyToObject);
|
|
|
}
|
|
|
function diffKeys() {
|
|
|
var prevKeys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
|
var currentKeys = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
|
var list = [];
|
|
|
var currentIndex = 0;
|
|
|
var currentLen = currentKeys.length;
|
|
|
var prevKeyObjects = parseKeys(prevKeys);
|
|
|
var currentKeyObjects = parseKeys(currentKeys); // Check prev keys to insert or keep
|
|
|
|
|
|
prevKeyObjects.forEach(function (keyObj) {
|
|
|
var hit = false;
|
|
|
|
|
|
for (var i = currentIndex; i < currentLen; i += 1) {
|
|
|
var currentKeyObj = currentKeyObjects[i];
|
|
|
|
|
|
if (currentKeyObj.key === keyObj.key) {
|
|
|
// New added keys should add before current key
|
|
|
if (currentIndex < i) {
|
|
|
list = list.concat(currentKeyObjects.slice(currentIndex, i).map(function (obj) {
|
|
|
return (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, obj), {}, {
|
|
|
status: STATUS_ADD
|
|
|
});
|
|
|
}));
|
|
|
currentIndex = i;
|
|
|
}
|
|
|
|
|
|
list.push((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, currentKeyObj), {}, {
|
|
|
status: STATUS_KEEP
|
|
|
}));
|
|
|
currentIndex += 1;
|
|
|
hit = true;
|
|
|
break;
|
|
|
}
|
|
|
} // If not hit, it means key is removed
|
|
|
|
|
|
|
|
|
if (!hit) {
|
|
|
list.push((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, keyObj), {}, {
|
|
|
status: STATUS_REMOVE
|
|
|
}));
|
|
|
}
|
|
|
}); // Add rest to the list
|
|
|
|
|
|
if (currentIndex < currentLen) {
|
|
|
list = list.concat(currentKeyObjects.slice(currentIndex).map(function (obj) {
|
|
|
return (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, obj), {}, {
|
|
|
status: STATUS_ADD
|
|
|
});
|
|
|
}));
|
|
|
}
|
|
|
/**
|
|
|
* Merge same key when it remove and add again:
|
|
|
* [1 - add, 2 - keep, 1 - remove] -> [1 - keep, 2 - keep]
|
|
|
*/
|
|
|
|
|
|
|
|
|
var keys = {};
|
|
|
list.forEach(function (_ref) {
|
|
|
var key = _ref.key;
|
|
|
keys[key] = (keys[key] || 0) + 1;
|
|
|
});
|
|
|
var duplicatedKeys = Object.keys(keys).filter(function (key) {
|
|
|
return keys[key] > 1;
|
|
|
});
|
|
|
duplicatedKeys.forEach(function (matchKey) {
|
|
|
// Remove `STATUS_REMOVE` node.
|
|
|
list = list.filter(function (_ref2) {
|
|
|
var key = _ref2.key,
|
|
|
status = _ref2.status;
|
|
|
return key !== matchKey || status !== STATUS_REMOVE;
|
|
|
}); // Update `STATUS_ADD` to `STATUS_KEEP`
|
|
|
|
|
|
list.forEach(function (node) {
|
|
|
if (node.key === matchKey) {
|
|
|
// eslint-disable-next-line no-param-reassign
|
|
|
node.status = STATUS_KEEP;
|
|
|
}
|
|
|
});
|
|
|
});
|
|
|
return list;
|
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/rc-motion/es/util/motion.js":
|
|
|
/*!**************************************************!*\
|
|
|
!*** ./node_modules/rc-motion/es/util/motion.js ***!
|
|
|
\**************************************************/
|
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "animationEndName": () => (/* binding */ animationEndName),
|
|
|
/* harmony export */ "getTransitionName": () => (/* binding */ getTransitionName),
|
|
|
/* harmony export */ "getVendorPrefixedEventName": () => (/* binding */ getVendorPrefixedEventName),
|
|
|
/* harmony export */ "getVendorPrefixes": () => (/* binding */ getVendorPrefixes),
|
|
|
/* harmony export */ "supportTransition": () => (/* binding */ supportTransition),
|
|
|
/* harmony export */ "transitionEndName": () => (/* binding */ transitionEndName)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ "./node_modules/@babel/runtime/helpers/esm/typeof.js");
|
|
|
/* harmony import */ var rc_util_es_Dom_canUseDom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rc-util/es/Dom/canUseDom */ "./node_modules/rc-util/es/Dom/canUseDom.js");
|
|
|
|
|
|
// ================= Transition =================
|
|
|
// Event wrapper. Copy from react source code
|
|
|
|
|
|
function makePrefixMap(styleProp, eventName) {
|
|
|
var prefixes = {};
|
|
|
prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();
|
|
|
prefixes["Webkit".concat(styleProp)] = "webkit".concat(eventName);
|
|
|
prefixes["Moz".concat(styleProp)] = "moz".concat(eventName);
|
|
|
prefixes["ms".concat(styleProp)] = "MS".concat(eventName);
|
|
|
prefixes["O".concat(styleProp)] = "o".concat(eventName.toLowerCase());
|
|
|
return prefixes;
|
|
|
}
|
|
|
|
|
|
function getVendorPrefixes(domSupport, win) {
|
|
|
var prefixes = {
|
|
|
animationend: makePrefixMap('Animation', 'AnimationEnd'),
|
|
|
transitionend: makePrefixMap('Transition', 'TransitionEnd')
|
|
|
};
|
|
|
|
|
|
if (domSupport) {
|
|
|
if (!('AnimationEvent' in win)) {
|
|
|
delete prefixes.animationend.animation;
|
|
|
}
|
|
|
|
|
|
if (!('TransitionEvent' in win)) {
|
|
|
delete prefixes.transitionend.transition;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return prefixes;
|
|
|
}
|
|
|
var vendorPrefixes = getVendorPrefixes((0,rc_util_es_Dom_canUseDom__WEBPACK_IMPORTED_MODULE_1__["default"])(), typeof window !== 'undefined' ? window : {});
|
|
|
var style = {};
|
|
|
|
|
|
if ((0,rc_util_es_Dom_canUseDom__WEBPACK_IMPORTED_MODULE_1__["default"])()) {
|
|
|
var _document$createEleme = document.createElement('div');
|
|
|
|
|
|
style = _document$createEleme.style;
|
|
|
}
|
|
|
|
|
|
var prefixedEventNames = {};
|
|
|
function getVendorPrefixedEventName(eventName) {
|
|
|
if (prefixedEventNames[eventName]) {
|
|
|
return prefixedEventNames[eventName];
|
|
|
}
|
|
|
|
|
|
var prefixMap = vendorPrefixes[eventName];
|
|
|
|
|
|
if (prefixMap) {
|
|
|
var stylePropList = Object.keys(prefixMap);
|
|
|
var len = stylePropList.length;
|
|
|
|
|
|
for (var i = 0; i < len; i += 1) {
|
|
|
var styleProp = stylePropList[i];
|
|
|
|
|
|
if (Object.prototype.hasOwnProperty.call(prefixMap, styleProp) && styleProp in style) {
|
|
|
prefixedEventNames[eventName] = prefixMap[styleProp];
|
|
|
return prefixedEventNames[eventName];
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return '';
|
|
|
}
|
|
|
var internalAnimationEndName = getVendorPrefixedEventName('animationend');
|
|
|
var internalTransitionEndName = getVendorPrefixedEventName('transitionend');
|
|
|
var supportTransition = !!(internalAnimationEndName && internalTransitionEndName);
|
|
|
var animationEndName = internalAnimationEndName || 'animationend';
|
|
|
var transitionEndName = internalTransitionEndName || 'transitionend';
|
|
|
function getTransitionName(transitionName, transitionType) {
|
|
|
if (!transitionName) return null;
|
|
|
|
|
|
if ((0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_0__["default"])(transitionName) === 'object') {
|
|
|
var type = transitionType.replace(/-\w/g, function (match) {
|
|
|
return match[1].toUpperCase();
|
|
|
});
|
|
|
return transitionName[type];
|
|
|
}
|
|
|
|
|
|
return "".concat(transitionName, "-").concat(transitionType);
|
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/rc-notification/es/Notice.js":
|
|
|
/*!***************************************************!*\
|
|
|
!*** ./node_modules/rc-notification/es/Notice.js ***!
|
|
|
\***************************************************/
|
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (/* binding */ Notice)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "./node_modules/@babel/runtime/helpers/esm/extends.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/defineProperty */ "./node_modules/@babel/runtime/helpers/esm/defineProperty.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/classCallCheck */ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/createClass */ "./node_modules/@babel/runtime/helpers/esm/createClass.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_inherits__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inherits */ "./node_modules/@babel/runtime/helpers/esm/inherits.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_createSuper__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/esm/createSuper */ "./node_modules/@babel/runtime/helpers/esm/createSuper.js");
|
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
|
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_6__);
|
|
|
/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! react-dom */ "./node_modules/react-dom/index.js");
|
|
|
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js");
|
|
|
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_8__);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var Notice = /*#__PURE__*/function (_Component) {
|
|
|
(0,_babel_runtime_helpers_esm_inherits__WEBPACK_IMPORTED_MODULE_4__["default"])(Notice, _Component);
|
|
|
var _super = (0,_babel_runtime_helpers_esm_createSuper__WEBPACK_IMPORTED_MODULE_5__["default"])(Notice);
|
|
|
function Notice() {
|
|
|
var _this;
|
|
|
(0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_2__["default"])(this, Notice);
|
|
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
|
args[_key] = arguments[_key];
|
|
|
}
|
|
|
_this = _super.call.apply(_super, [this].concat(args));
|
|
|
_this.closeTimer = null;
|
|
|
_this.close = function (e) {
|
|
|
if (e) {
|
|
|
e.stopPropagation();
|
|
|
}
|
|
|
_this.clearCloseTimer();
|
|
|
var _this$props = _this.props,
|
|
|
onClose = _this$props.onClose,
|
|
|
noticeKey = _this$props.noticeKey;
|
|
|
if (onClose) {
|
|
|
onClose(noticeKey);
|
|
|
}
|
|
|
};
|
|
|
_this.startCloseTimer = function () {
|
|
|
if (_this.props.duration) {
|
|
|
_this.closeTimer = window.setTimeout(function () {
|
|
|
_this.close();
|
|
|
}, _this.props.duration * 1000);
|
|
|
}
|
|
|
};
|
|
|
_this.clearCloseTimer = function () {
|
|
|
if (_this.closeTimer) {
|
|
|
clearTimeout(_this.closeTimer);
|
|
|
_this.closeTimer = null;
|
|
|
}
|
|
|
};
|
|
|
return _this;
|
|
|
}
|
|
|
(0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_3__["default"])(Notice, [{
|
|
|
key: "componentDidMount",
|
|
|
value: function componentDidMount() {
|
|
|
this.startCloseTimer();
|
|
|
}
|
|
|
}, {
|
|
|
key: "componentDidUpdate",
|
|
|
value: function componentDidUpdate(prevProps) {
|
|
|
if (this.props.duration !== prevProps.duration || this.props.updateMark !== prevProps.updateMark ||
|
|
|
// Visible again need reset timer
|
|
|
this.props.visible !== prevProps.visible && this.props.visible) {
|
|
|
this.restartCloseTimer();
|
|
|
}
|
|
|
}
|
|
|
}, {
|
|
|
key: "componentWillUnmount",
|
|
|
value: function componentWillUnmount() {
|
|
|
this.clearCloseTimer();
|
|
|
}
|
|
|
}, {
|
|
|
key: "restartCloseTimer",
|
|
|
value: function restartCloseTimer() {
|
|
|
this.clearCloseTimer();
|
|
|
this.startCloseTimer();
|
|
|
}
|
|
|
}, {
|
|
|
key: "render",
|
|
|
value: function render() {
|
|
|
var _this2 = this;
|
|
|
var _this$props2 = this.props,
|
|
|
prefixCls = _this$props2.prefixCls,
|
|
|
className = _this$props2.className,
|
|
|
closable = _this$props2.closable,
|
|
|
closeIcon = _this$props2.closeIcon,
|
|
|
style = _this$props2.style,
|
|
|
onClick = _this$props2.onClick,
|
|
|
children = _this$props2.children,
|
|
|
holder = _this$props2.holder;
|
|
|
var componentClass = "".concat(prefixCls, "-notice");
|
|
|
var dataOrAriaAttributeProps = Object.keys(this.props).reduce(function (acc, key) {
|
|
|
if (key.substr(0, 5) === 'data-' || key.substr(0, 5) === 'aria-' || key === 'role') {
|
|
|
acc[key] = _this2.props[key];
|
|
|
}
|
|
|
return acc;
|
|
|
}, {});
|
|
|
var node = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6__.createElement("div", (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__["default"])({
|
|
|
className: classnames__WEBPACK_IMPORTED_MODULE_8___default()(componentClass, className, (0,_babel_runtime_helpers_esm_defineProperty__WEBPACK_IMPORTED_MODULE_1__["default"])({}, "".concat(componentClass, "-closable"), closable)),
|
|
|
style: style,
|
|
|
onMouseEnter: this.clearCloseTimer,
|
|
|
onMouseLeave: this.startCloseTimer,
|
|
|
onClick: onClick
|
|
|
}, dataOrAriaAttributeProps), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6__.createElement("div", {
|
|
|
className: "".concat(componentClass, "-content")
|
|
|
}, children), closable ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6__.createElement("a", {
|
|
|
tabIndex: 0,
|
|
|
onClick: this.close,
|
|
|
className: "".concat(componentClass, "-close")
|
|
|
}, closeIcon || /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_6__.createElement("span", {
|
|
|
className: "".concat(componentClass, "-close-x")
|
|
|
})) : null);
|
|
|
if (holder) {
|
|
|
return /*#__PURE__*/react_dom__WEBPACK_IMPORTED_MODULE_7__.createPortal(node, holder);
|
|
|
}
|
|
|
return node;
|
|
|
}
|
|
|
}]);
|
|
|
return Notice;
|
|
|
}(react__WEBPACK_IMPORTED_MODULE_6__.Component);
|
|
|
Notice.defaultProps = {
|
|
|
onClose: function onClose() {},
|
|
|
duration: 1.5
|
|
|
};
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/rc-notification/es/Notification.js":
|
|
|
/*!*********************************************************!*\
|
|
|
!*** ./node_modules/rc-notification/es/Notification.js ***!
|
|
|
\*********************************************************/
|
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutProperties */ "./node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "./node_modules/@babel/runtime/helpers/esm/extends.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "./node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/classCallCheck */ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/esm/createClass */ "./node_modules/@babel/runtime/helpers/esm/createClass.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_inherits__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inherits */ "./node_modules/@babel/runtime/helpers/esm/inherits.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_createSuper__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/esm/createSuper */ "./node_modules/@babel/runtime/helpers/esm/createSuper.js");
|
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
|
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_7__);
|
|
|
/* harmony import */ var rc_util_es_React_render__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! rc-util/es/React/render */ "./node_modules/rc-util/es/React/render.js");
|
|
|
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! classnames */ "./node_modules/classnames/index.js");
|
|
|
/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_9__);
|
|
|
/* harmony import */ var rc_motion__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! rc-motion */ "./node_modules/rc-motion/es/index.js");
|
|
|
/* harmony import */ var _Notice__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./Notice */ "./node_modules/rc-notification/es/Notice.js");
|
|
|
/* harmony import */ var _useNotification__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./useNotification */ "./node_modules/rc-notification/es/useNotification.js");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var _excluded = ["getContainer"];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var seed = 0;
|
|
|
var now = Date.now();
|
|
|
function getUuid() {
|
|
|
var id = seed;
|
|
|
seed += 1;
|
|
|
return "rcNotification_".concat(now, "_").concat(id);
|
|
|
}
|
|
|
var Notification = /*#__PURE__*/function (_Component) {
|
|
|
(0,_babel_runtime_helpers_esm_inherits__WEBPACK_IMPORTED_MODULE_5__["default"])(Notification, _Component);
|
|
|
var _super = (0,_babel_runtime_helpers_esm_createSuper__WEBPACK_IMPORTED_MODULE_6__["default"])(Notification);
|
|
|
function Notification() {
|
|
|
var _this;
|
|
|
(0,_babel_runtime_helpers_esm_classCallCheck__WEBPACK_IMPORTED_MODULE_3__["default"])(this, Notification);
|
|
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
|
args[_key] = arguments[_key];
|
|
|
}
|
|
|
_this = _super.call.apply(_super, [this].concat(args));
|
|
|
_this.state = {
|
|
|
notices: []
|
|
|
};
|
|
|
_this.hookRefs = new Map();
|
|
|
_this.add = function (originNotice, holderCallback) {
|
|
|
var _originNotice$key;
|
|
|
var key = (_originNotice$key = originNotice.key) !== null && _originNotice$key !== void 0 ? _originNotice$key : getUuid();
|
|
|
var notice = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])({}, originNotice), {}, {
|
|
|
key: key
|
|
|
});
|
|
|
var maxCount = _this.props.maxCount;
|
|
|
_this.setState(function (previousState) {
|
|
|
var notices = previousState.notices;
|
|
|
var noticeIndex = notices.map(function (v) {
|
|
|
return v.notice.key;
|
|
|
}).indexOf(key);
|
|
|
var updatedNotices = notices.concat();
|
|
|
if (noticeIndex !== -1) {
|
|
|
updatedNotices.splice(noticeIndex, 1, {
|
|
|
notice: notice,
|
|
|
holderCallback: holderCallback
|
|
|
});
|
|
|
} else {
|
|
|
if (maxCount && notices.length >= maxCount) {
|
|
|
// XXX, use key of first item to update new added (let React to move exsiting
|
|
|
// instead of remove and mount). Same key was used before for both a) external
|
|
|
// manual control and b) internal react 'key' prop , which is not that good.
|
|
|
// eslint-disable-next-line no-param-reassign
|
|
|
// zombieJ: Not know why use `updateKey`. This makes Notice infinite loop in jest.
|
|
|
// Change to `updateMark` for compare instead.
|
|
|
// https://github.com/react-component/notification/commit/32299e6be396f94040bfa82517eea940db947ece
|
|
|
notice.key = updatedNotices[0].notice.key;
|
|
|
notice.updateMark = getUuid();
|
|
|
// zombieJ: That's why. User may close by key directly.
|
|
|
// We need record this but not re-render to avoid upper issue
|
|
|
// https://github.com/react-component/notification/issues/129
|
|
|
notice.userPassKey = key;
|
|
|
updatedNotices.shift();
|
|
|
}
|
|
|
updatedNotices.push({
|
|
|
notice: notice,
|
|
|
holderCallback: holderCallback
|
|
|
});
|
|
|
}
|
|
|
return {
|
|
|
notices: updatedNotices
|
|
|
};
|
|
|
});
|
|
|
};
|
|
|
_this.remove = function (removeKey) {
|
|
|
_this.setState(function (_ref) {
|
|
|
var notices = _ref.notices;
|
|
|
return {
|
|
|
notices: notices.filter(function (_ref2) {
|
|
|
var _ref2$notice = _ref2.notice,
|
|
|
key = _ref2$notice.key,
|
|
|
userPassKey = _ref2$notice.userPassKey;
|
|
|
var mergedKey = userPassKey !== null && userPassKey !== void 0 ? userPassKey : key;
|
|
|
return mergedKey !== removeKey;
|
|
|
})
|
|
|
};
|
|
|
});
|
|
|
};
|
|
|
_this.noticePropsMap = {};
|
|
|
return _this;
|
|
|
}
|
|
|
(0,_babel_runtime_helpers_esm_createClass__WEBPACK_IMPORTED_MODULE_4__["default"])(Notification, [{
|
|
|
key: "getTransitionName",
|
|
|
value: function getTransitionName() {
|
|
|
var _this$props = this.props,
|
|
|
prefixCls = _this$props.prefixCls,
|
|
|
animation = _this$props.animation;
|
|
|
var transitionName = this.props.transitionName;
|
|
|
if (!transitionName && animation) {
|
|
|
transitionName = "".concat(prefixCls, "-").concat(animation);
|
|
|
}
|
|
|
return transitionName;
|
|
|
}
|
|
|
}, {
|
|
|
key: "render",
|
|
|
value: function render() {
|
|
|
var _this2 = this;
|
|
|
var notices = this.state.notices;
|
|
|
var _this$props2 = this.props,
|
|
|
prefixCls = _this$props2.prefixCls,
|
|
|
className = _this$props2.className,
|
|
|
closeIcon = _this$props2.closeIcon,
|
|
|
style = _this$props2.style;
|
|
|
var noticeKeys = [];
|
|
|
notices.forEach(function (_ref3, index) {
|
|
|
var notice = _ref3.notice,
|
|
|
holderCallback = _ref3.holderCallback;
|
|
|
var updateMark = index === notices.length - 1 ? notice.updateMark : undefined;
|
|
|
var key = notice.key,
|
|
|
userPassKey = notice.userPassKey;
|
|
|
var noticeProps = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])({
|
|
|
prefixCls: prefixCls,
|
|
|
closeIcon: closeIcon
|
|
|
}, notice), notice.props), {}, {
|
|
|
key: key,
|
|
|
noticeKey: userPassKey || key,
|
|
|
updateMark: updateMark,
|
|
|
onClose: function onClose(noticeKey) {
|
|
|
var _notice$onClose;
|
|
|
_this2.remove(noticeKey);
|
|
|
(_notice$onClose = notice.onClose) === null || _notice$onClose === void 0 ? void 0 : _notice$onClose.call(notice);
|
|
|
},
|
|
|
onClick: notice.onClick,
|
|
|
children: notice.content
|
|
|
});
|
|
|
// Give to motion
|
|
|
noticeKeys.push(key);
|
|
|
_this2.noticePropsMap[key] = {
|
|
|
props: noticeProps,
|
|
|
holderCallback: holderCallback
|
|
|
};
|
|
|
});
|
|
|
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7__.createElement("div", {
|
|
|
className: classnames__WEBPACK_IMPORTED_MODULE_9___default()(prefixCls, className),
|
|
|
style: style
|
|
|
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7__.createElement(rc_motion__WEBPACK_IMPORTED_MODULE_10__.CSSMotionList, {
|
|
|
keys: noticeKeys,
|
|
|
motionName: this.getTransitionName(),
|
|
|
onVisibleChanged: function onVisibleChanged(changedVisible, _ref4) {
|
|
|
var key = _ref4.key;
|
|
|
if (!changedVisible) {
|
|
|
delete _this2.noticePropsMap[key];
|
|
|
}
|
|
|
}
|
|
|
}, function (_ref5) {
|
|
|
var key = _ref5.key,
|
|
|
motionClassName = _ref5.className,
|
|
|
motionStyle = _ref5.style,
|
|
|
visible = _ref5.visible;
|
|
|
var _this2$noticePropsMap = _this2.noticePropsMap[key],
|
|
|
noticeProps = _this2$noticePropsMap.props,
|
|
|
holderCallback = _this2$noticePropsMap.holderCallback;
|
|
|
if (holderCallback) {
|
|
|
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7__.createElement("div", {
|
|
|
key: key,
|
|
|
className: classnames__WEBPACK_IMPORTED_MODULE_9___default()(motionClassName, "".concat(prefixCls, "-hook-holder")),
|
|
|
style: (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])({}, motionStyle),
|
|
|
ref: function ref(div) {
|
|
|
if (typeof key === 'undefined') {
|
|
|
return;
|
|
|
}
|
|
|
if (div) {
|
|
|
_this2.hookRefs.set(key, div);
|
|
|
holderCallback(div, noticeProps);
|
|
|
} else {
|
|
|
_this2.hookRefs.delete(key);
|
|
|
}
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7__.createElement(_Notice__WEBPACK_IMPORTED_MODULE_11__["default"], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__["default"])({}, noticeProps, {
|
|
|
className: classnames__WEBPACK_IMPORTED_MODULE_9___default()(motionClassName, noticeProps === null || noticeProps === void 0 ? void 0 : noticeProps.className),
|
|
|
style: (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])((0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_2__["default"])({}, motionStyle), noticeProps === null || noticeProps === void 0 ? void 0 : noticeProps.style),
|
|
|
visible: visible
|
|
|
}));
|
|
|
}));
|
|
|
}
|
|
|
}]);
|
|
|
return Notification;
|
|
|
}(react__WEBPACK_IMPORTED_MODULE_7__.Component);
|
|
|
Notification.newInstance = void 0;
|
|
|
Notification.defaultProps = {
|
|
|
prefixCls: 'rc-notification',
|
|
|
animation: 'fade',
|
|
|
style: {
|
|
|
top: 65,
|
|
|
left: '50%'
|
|
|
}
|
|
|
};
|
|
|
Notification.newInstance = function newNotificationInstance(properties, callback) {
|
|
|
var _ref6 = properties || {},
|
|
|
getContainer = _ref6.getContainer,
|
|
|
props = (0,_babel_runtime_helpers_esm_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__["default"])(_ref6, _excluded);
|
|
|
var div = document.createElement('div');
|
|
|
if (getContainer) {
|
|
|
var root = getContainer();
|
|
|
root.appendChild(div);
|
|
|
} else {
|
|
|
document.body.appendChild(div);
|
|
|
}
|
|
|
var called = false;
|
|
|
function ref(notification) {
|
|
|
if (called) {
|
|
|
return;
|
|
|
}
|
|
|
called = true;
|
|
|
callback({
|
|
|
notice: function notice(noticeProps) {
|
|
|
notification.add(noticeProps);
|
|
|
},
|
|
|
removeNotice: function removeNotice(key) {
|
|
|
notification.remove(key);
|
|
|
},
|
|
|
component: notification,
|
|
|
destroy: function destroy() {
|
|
|
(0,rc_util_es_React_render__WEBPACK_IMPORTED_MODULE_8__.unmount)(div);
|
|
|
if (div.parentNode) {
|
|
|
div.parentNode.removeChild(div);
|
|
|
}
|
|
|
},
|
|
|
// Hooks
|
|
|
useNotification: function useNotification() {
|
|
|
return (0,_useNotification__WEBPACK_IMPORTED_MODULE_12__["default"])(notification);
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
// Only used for test case usage
|
|
|
if (false) {}
|
|
|
(0,rc_util_es_React_render__WEBPACK_IMPORTED_MODULE_8__.render)( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_7__.createElement(Notification, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__["default"])({}, props, {
|
|
|
ref: ref
|
|
|
})), div);
|
|
|
};
|
|
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Notification);
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/rc-notification/es/index.js":
|
|
|
/*!**************************************************!*\
|
|
|
!*** ./node_modules/rc-notification/es/index.js ***!
|
|
|
\**************************************************/
|
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var _Notification__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Notification */ "./node_modules/rc-notification/es/Notification.js");
|
|
|
|
|
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_Notification__WEBPACK_IMPORTED_MODULE_0__["default"]);
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/rc-notification/es/useNotification.js":
|
|
|
/*!************************************************************!*\
|
|
|
!*** ./node_modules/rc-notification/es/useNotification.js ***!
|
|
|
\************************************************************/
|
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (/* binding */ useNotification)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ "./node_modules/@babel/runtime/helpers/esm/extends.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "./node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
|
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
|
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_3__);
|
|
|
/* harmony import */ var _Notice__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./Notice */ "./node_modules/rc-notification/es/Notice.js");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function useNotification(notificationInstance) {
|
|
|
var createdRef = react__WEBPACK_IMPORTED_MODULE_3__.useRef({});
|
|
|
var _React$useState = react__WEBPACK_IMPORTED_MODULE_3__.useState([]),
|
|
|
_React$useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_2__["default"])(_React$useState, 2),
|
|
|
elements = _React$useState2[0],
|
|
|
setElements = _React$useState2[1];
|
|
|
function notify(noticeProps) {
|
|
|
var firstMount = true;
|
|
|
notificationInstance.add(noticeProps, function (div, props) {
|
|
|
var key = props.key;
|
|
|
if (div && (!createdRef.current[key] || firstMount)) {
|
|
|
var noticeEle = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(_Notice__WEBPACK_IMPORTED_MODULE_4__["default"], (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__["default"])({}, props, {
|
|
|
holder: div
|
|
|
}));
|
|
|
createdRef.current[key] = noticeEle;
|
|
|
setElements(function (originElements) {
|
|
|
var index = originElements.findIndex(function (ele) {
|
|
|
return ele.key === props.key;
|
|
|
});
|
|
|
if (index === -1) {
|
|
|
return [].concat((0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(originElements), [noticeEle]);
|
|
|
}
|
|
|
var cloneList = (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__["default"])(originElements);
|
|
|
cloneList[index] = noticeEle;
|
|
|
return cloneList;
|
|
|
});
|
|
|
}
|
|
|
firstMount = false;
|
|
|
});
|
|
|
}
|
|
|
return [notify, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_3__.createElement(react__WEBPACK_IMPORTED_MODULE_3__.Fragment, null, elements)];
|
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/rc-notification/lib/Notice.js":
|
|
|
/*!****************************************************!*\
|
|
|
!*** ./node_modules/rc-notification/lib/Notice.js ***!
|
|
|
\****************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js");
|
|
|
var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports["default"] = void 0;
|
|
|
var _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ "./node_modules/@babel/runtime/helpers/extends.js"));
|
|
|
var _defineProperty2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "./node_modules/@babel/runtime/helpers/defineProperty.js"));
|
|
|
var _classCallCheck2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/classCallCheck.js"));
|
|
|
var _createClass2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/createClass.js"));
|
|
|
var _inherits2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/inherits */ "./node_modules/@babel/runtime/helpers/inherits.js"));
|
|
|
var _createSuper2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/createSuper */ "./node_modules/@babel/runtime/helpers/createSuper.js"));
|
|
|
var React = _interopRequireWildcard(__webpack_require__(/*! react */ "./node_modules/react/index.js"));
|
|
|
var _reactDom = _interopRequireDefault(__webpack_require__(/*! react-dom */ "./node_modules/react-dom/index.js"));
|
|
|
var _classnames = _interopRequireDefault(__webpack_require__(/*! classnames */ "./node_modules/classnames/index.js"));
|
|
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
|
var Notice = /*#__PURE__*/function (_Component) {
|
|
|
(0, _inherits2.default)(Notice, _Component);
|
|
|
var _super = (0, _createSuper2.default)(Notice);
|
|
|
function Notice() {
|
|
|
var _this;
|
|
|
(0, _classCallCheck2.default)(this, Notice);
|
|
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
|
args[_key] = arguments[_key];
|
|
|
}
|
|
|
_this = _super.call.apply(_super, [this].concat(args));
|
|
|
_this.closeTimer = null;
|
|
|
_this.close = function (e) {
|
|
|
if (e) {
|
|
|
e.stopPropagation();
|
|
|
}
|
|
|
_this.clearCloseTimer();
|
|
|
var _this$props = _this.props,
|
|
|
onClose = _this$props.onClose,
|
|
|
noticeKey = _this$props.noticeKey;
|
|
|
if (onClose) {
|
|
|
onClose(noticeKey);
|
|
|
}
|
|
|
};
|
|
|
_this.startCloseTimer = function () {
|
|
|
if (_this.props.duration) {
|
|
|
_this.closeTimer = window.setTimeout(function () {
|
|
|
_this.close();
|
|
|
}, _this.props.duration * 1000);
|
|
|
}
|
|
|
};
|
|
|
_this.clearCloseTimer = function () {
|
|
|
if (_this.closeTimer) {
|
|
|
clearTimeout(_this.closeTimer);
|
|
|
_this.closeTimer = null;
|
|
|
}
|
|
|
};
|
|
|
return _this;
|
|
|
}
|
|
|
(0, _createClass2.default)(Notice, [{
|
|
|
key: "componentDidMount",
|
|
|
value: function componentDidMount() {
|
|
|
this.startCloseTimer();
|
|
|
}
|
|
|
}, {
|
|
|
key: "componentDidUpdate",
|
|
|
value: function componentDidUpdate(prevProps) {
|
|
|
if (this.props.duration !== prevProps.duration || this.props.updateMark !== prevProps.updateMark ||
|
|
|
// Visible again need reset timer
|
|
|
this.props.visible !== prevProps.visible && this.props.visible) {
|
|
|
this.restartCloseTimer();
|
|
|
}
|
|
|
}
|
|
|
}, {
|
|
|
key: "componentWillUnmount",
|
|
|
value: function componentWillUnmount() {
|
|
|
this.clearCloseTimer();
|
|
|
}
|
|
|
}, {
|
|
|
key: "restartCloseTimer",
|
|
|
value: function restartCloseTimer() {
|
|
|
this.clearCloseTimer();
|
|
|
this.startCloseTimer();
|
|
|
}
|
|
|
}, {
|
|
|
key: "render",
|
|
|
value: function render() {
|
|
|
var _this2 = this;
|
|
|
var _this$props2 = this.props,
|
|
|
prefixCls = _this$props2.prefixCls,
|
|
|
className = _this$props2.className,
|
|
|
closable = _this$props2.closable,
|
|
|
closeIcon = _this$props2.closeIcon,
|
|
|
style = _this$props2.style,
|
|
|
onClick = _this$props2.onClick,
|
|
|
children = _this$props2.children,
|
|
|
holder = _this$props2.holder;
|
|
|
var componentClass = "".concat(prefixCls, "-notice");
|
|
|
var dataOrAriaAttributeProps = Object.keys(this.props).reduce(function (acc, key) {
|
|
|
if (key.substr(0, 5) === 'data-' || key.substr(0, 5) === 'aria-' || key === 'role') {
|
|
|
acc[key] = _this2.props[key];
|
|
|
}
|
|
|
return acc;
|
|
|
}, {});
|
|
|
var node = /*#__PURE__*/React.createElement("div", (0, _extends2.default)({
|
|
|
className: (0, _classnames.default)(componentClass, className, (0, _defineProperty2.default)({}, "".concat(componentClass, "-closable"), closable)),
|
|
|
style: style,
|
|
|
onMouseEnter: this.clearCloseTimer,
|
|
|
onMouseLeave: this.startCloseTimer,
|
|
|
onClick: onClick
|
|
|
}, dataOrAriaAttributeProps), /*#__PURE__*/React.createElement("div", {
|
|
|
className: "".concat(componentClass, "-content")
|
|
|
}, children), closable ? /*#__PURE__*/React.createElement("a", {
|
|
|
tabIndex: 0,
|
|
|
onClick: this.close,
|
|
|
className: "".concat(componentClass, "-close")
|
|
|
}, closeIcon || /*#__PURE__*/React.createElement("span", {
|
|
|
className: "".concat(componentClass, "-close-x")
|
|
|
})) : null);
|
|
|
if (holder) {
|
|
|
return /*#__PURE__*/_reactDom.default.createPortal(node, holder);
|
|
|
}
|
|
|
return node;
|
|
|
}
|
|
|
}]);
|
|
|
return Notice;
|
|
|
}(React.Component);
|
|
|
exports["default"] = Notice;
|
|
|
Notice.defaultProps = {
|
|
|
onClose: function onClose() {},
|
|
|
duration: 1.5
|
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/rc-notification/lib/useNotification.js":
|
|
|
/*!*************************************************************!*\
|
|
|
!*** ./node_modules/rc-notification/lib/useNotification.js ***!
|
|
|
\*************************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js");
|
|
|
var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js");
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports["default"] = useNotification;
|
|
|
var _toConsumableArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/toConsumableArray */ "./node_modules/@babel/runtime/helpers/toConsumableArray.js"));
|
|
|
var _extends2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/extends */ "./node_modules/@babel/runtime/helpers/extends.js"));
|
|
|
var _slicedToArray2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/slicedToArray */ "./node_modules/@babel/runtime/helpers/slicedToArray.js"));
|
|
|
var React = _interopRequireWildcard(__webpack_require__(/*! react */ "./node_modules/react/index.js"));
|
|
|
var _Notice = _interopRequireDefault(__webpack_require__(/*! ./Notice */ "./node_modules/rc-notification/lib/Notice.js"));
|
|
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
|
function useNotification(notificationInstance) {
|
|
|
var createdRef = React.useRef({});
|
|
|
var _React$useState = React.useState([]),
|
|
|
_React$useState2 = (0, _slicedToArray2.default)(_React$useState, 2),
|
|
|
elements = _React$useState2[0],
|
|
|
setElements = _React$useState2[1];
|
|
|
function notify(noticeProps) {
|
|
|
var firstMount = true;
|
|
|
notificationInstance.add(noticeProps, function (div, props) {
|
|
|
var key = props.key;
|
|
|
if (div && (!createdRef.current[key] || firstMount)) {
|
|
|
var noticeEle = /*#__PURE__*/React.createElement(_Notice.default, (0, _extends2.default)({}, props, {
|
|
|
holder: div
|
|
|
}));
|
|
|
createdRef.current[key] = noticeEle;
|
|
|
setElements(function (originElements) {
|
|
|
var index = originElements.findIndex(function (ele) {
|
|
|
return ele.key === props.key;
|
|
|
});
|
|
|
if (index === -1) {
|
|
|
return [].concat((0, _toConsumableArray2.default)(originElements), [noticeEle]);
|
|
|
}
|
|
|
var cloneList = (0, _toConsumableArray2.default)(originElements);
|
|
|
cloneList[index] = noticeEle;
|
|
|
return cloneList;
|
|
|
});
|
|
|
}
|
|
|
firstMount = false;
|
|
|
});
|
|
|
}
|
|
|
return [notify, /*#__PURE__*/React.createElement(React.Fragment, null, elements)];
|
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/rc-pagination/lib/locale/en_US.js":
|
|
|
/*!********************************************************!*\
|
|
|
!*** ./node_modules/rc-pagination/lib/locale/en_US.js ***!
|
|
|
\********************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports["default"] = void 0;
|
|
|
var _default = {
|
|
|
// Options.jsx
|
|
|
items_per_page: '/ page',
|
|
|
jump_to: 'Go to',
|
|
|
jump_to_confirm: 'confirm',
|
|
|
page: 'Page',
|
|
|
// Pagination.jsx
|
|
|
prev_page: 'Previous Page',
|
|
|
next_page: 'Next Page',
|
|
|
prev_5: 'Previous 5 Pages',
|
|
|
next_5: 'Next 5 Pages',
|
|
|
prev_3: 'Previous 3 Pages',
|
|
|
next_3: 'Next 3 Pages',
|
|
|
page_size: 'Page Size'
|
|
|
};
|
|
|
exports["default"] = _default;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/rc-picker/lib/locale/en_US.js":
|
|
|
/*!****************************************************!*\
|
|
|
!*** ./node_modules/rc-picker/lib/locale/en_US.js ***!
|
|
|
\****************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports["default"] = void 0;
|
|
|
var locale = {
|
|
|
locale: 'en_US',
|
|
|
today: 'Today',
|
|
|
now: 'Now',
|
|
|
backToToday: 'Back to today',
|
|
|
ok: 'OK',
|
|
|
clear: 'Clear',
|
|
|
month: 'Month',
|
|
|
year: 'Year',
|
|
|
timeSelect: 'select time',
|
|
|
dateSelect: 'select date',
|
|
|
weekSelect: 'Choose a week',
|
|
|
monthSelect: 'Choose a month',
|
|
|
yearSelect: 'Choose a year',
|
|
|
decadeSelect: 'Choose a decade',
|
|
|
yearFormat: 'YYYY',
|
|
|
dateFormat: 'M/D/YYYY',
|
|
|
dayFormat: 'D',
|
|
|
dateTimeFormat: 'M/D/YYYY HH:mm:ss',
|
|
|
monthBeforeYear: true,
|
|
|
previousMonth: 'Previous month (PageUp)',
|
|
|
nextMonth: 'Next month (PageDown)',
|
|
|
previousYear: 'Last year (Control + left)',
|
|
|
nextYear: 'Next year (Control + right)',
|
|
|
previousDecade: 'Last decade',
|
|
|
nextDecade: 'Next decade',
|
|
|
previousCentury: 'Last century',
|
|
|
nextCentury: 'Next century'
|
|
|
};
|
|
|
var _default = locale;
|
|
|
exports["default"] = _default;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/rc-util/es/Children/toArray.js":
|
|
|
/*!*****************************************************!*\
|
|
|
!*** ./node_modules/rc-util/es/Children/toArray.js ***!
|
|
|
\*****************************************************/
|
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (/* binding */ toArray)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
|
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
|
/* harmony import */ var react_is__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-is */ "./node_modules/react-is/index.js");
|
|
|
|
|
|
|
|
|
function toArray(children) {
|
|
|
var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
|
var ret = [];
|
|
|
react__WEBPACK_IMPORTED_MODULE_0___default().Children.forEach(children, function (child) {
|
|
|
if ((child === undefined || child === null) && !option.keepEmpty) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (Array.isArray(child)) {
|
|
|
ret = ret.concat(toArray(child));
|
|
|
} else if ((0,react_is__WEBPACK_IMPORTED_MODULE_1__.isFragment)(child) && child.props) {
|
|
|
ret = ret.concat(toArray(child.props.children, option));
|
|
|
} else {
|
|
|
ret.push(child);
|
|
|
}
|
|
|
});
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/rc-util/es/Dom/canUseDom.js":
|
|
|
/*!**************************************************!*\
|
|
|
!*** ./node_modules/rc-util/es/Dom/canUseDom.js ***!
|
|
|
\**************************************************/
|
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (/* binding */ canUseDom)
|
|
|
/* harmony export */ });
|
|
|
function canUseDom() {
|
|
|
return !!(typeof window !== 'undefined' && window.document && window.document.createElement);
|
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/rc-util/es/Dom/findDOMNode.js":
|
|
|
/*!****************************************************!*\
|
|
|
!*** ./node_modules/rc-util/es/Dom/findDOMNode.js ***!
|
|
|
\****************************************************/
|
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (/* binding */ findDOMNode)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-dom */ "./node_modules/react-dom/index.js");
|
|
|
|
|
|
/**
|
|
|
* Return if a node is a DOM node. Else will return by `findDOMNode`
|
|
|
*/
|
|
|
|
|
|
function findDOMNode(node) {
|
|
|
if (node instanceof HTMLElement) {
|
|
|
return node;
|
|
|
}
|
|
|
|
|
|
return react_dom__WEBPACK_IMPORTED_MODULE_0__.findDOMNode(node);
|
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/rc-util/es/React/render.js":
|
|
|
/*!*************************************************!*\
|
|
|
!*** ./node_modules/rc-util/es/React/render.js ***!
|
|
|
\*************************************************/
|
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
var react_dom__WEBPACK_IMPORTED_MODULE_4___namespace_cache;
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "_r": () => (/* binding */ _r),
|
|
|
/* harmony export */ "_u": () => (/* binding */ _u),
|
|
|
/* harmony export */ "render": () => (/* binding */ render),
|
|
|
/* harmony export */ "unmount": () => (/* binding */ unmount)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_regeneratorRuntime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/regeneratorRuntime */ "./node_modules/@babel/runtime/helpers/esm/regeneratorRuntime.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/asyncToGenerator */ "./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ "./node_modules/@babel/runtime/helpers/esm/typeof.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "./node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
|
|
|
/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react-dom */ "./node_modules/react-dom/index.js");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Let compiler not to search module usage
|
|
|
|
|
|
var fullClone = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_3__["default"])({}, /*#__PURE__*/ (react_dom__WEBPACK_IMPORTED_MODULE_4___namespace_cache || (react_dom__WEBPACK_IMPORTED_MODULE_4___namespace_cache = __webpack_require__.t(react_dom__WEBPACK_IMPORTED_MODULE_4__, 2))));
|
|
|
|
|
|
var version = fullClone.version,
|
|
|
reactRender = fullClone.render,
|
|
|
unmountComponentAtNode = fullClone.unmountComponentAtNode;
|
|
|
var createRoot;
|
|
|
|
|
|
try {
|
|
|
var mainVersion = Number((version || '').split('.')[0]);
|
|
|
|
|
|
if (mainVersion >= 18) {
|
|
|
createRoot = fullClone.createRoot;
|
|
|
}
|
|
|
} catch (e) {// Do nothing;
|
|
|
}
|
|
|
|
|
|
function toggleWarning(skip) {
|
|
|
var __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = fullClone.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;
|
|
|
|
|
|
if (__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED && (0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_2__["default"])(__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED) === 'object') {
|
|
|
__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.usingClientEntryPoint = skip;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var MARK = '__rc_react_root__';
|
|
|
|
|
|
function modernRender(node, container) {
|
|
|
toggleWarning(true);
|
|
|
var root = container[MARK] || createRoot(container);
|
|
|
toggleWarning(false);
|
|
|
root.render(node);
|
|
|
container[MARK] = root;
|
|
|
}
|
|
|
|
|
|
function legacyRender(node, container) {
|
|
|
reactRender(node, container);
|
|
|
}
|
|
|
/** @private Test usage. Not work in prod */
|
|
|
|
|
|
|
|
|
function _r(node, container) {
|
|
|
if (true) {
|
|
|
return legacyRender(node, container);
|
|
|
}
|
|
|
}
|
|
|
function render(node, container) {
|
|
|
if (createRoot) {
|
|
|
modernRender(node, container);
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
legacyRender(node, container);
|
|
|
} // ========================= Unmount ==========================
|
|
|
|
|
|
function modernUnmount(_x) {
|
|
|
return _modernUnmount.apply(this, arguments);
|
|
|
}
|
|
|
|
|
|
function _modernUnmount() {
|
|
|
_modernUnmount = (0,_babel_runtime_helpers_esm_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__["default"])( /*#__PURE__*/(0,_babel_runtime_helpers_esm_regeneratorRuntime__WEBPACK_IMPORTED_MODULE_0__["default"])().mark(function _callee(container) {
|
|
|
return (0,_babel_runtime_helpers_esm_regeneratorRuntime__WEBPACK_IMPORTED_MODULE_0__["default"])().wrap(function _callee$(_context) {
|
|
|
while (1) {
|
|
|
switch (_context.prev = _context.next) {
|
|
|
case 0:
|
|
|
return _context.abrupt("return", Promise.resolve().then(function () {
|
|
|
var _container$MARK;
|
|
|
|
|
|
(_container$MARK = container[MARK]) === null || _container$MARK === void 0 ? void 0 : _container$MARK.unmount();
|
|
|
delete container[MARK];
|
|
|
}));
|
|
|
|
|
|
case 1:
|
|
|
case "end":
|
|
|
return _context.stop();
|
|
|
}
|
|
|
}
|
|
|
}, _callee);
|
|
|
}));
|
|
|
return _modernUnmount.apply(this, arguments);
|
|
|
}
|
|
|
|
|
|
function legacyUnmount(container) {
|
|
|
unmountComponentAtNode(container);
|
|
|
}
|
|
|
/** @private Test usage. Not work in prod */
|
|
|
|
|
|
|
|
|
function _u(container) {
|
|
|
if (true) {
|
|
|
return legacyUnmount(container);
|
|
|
}
|
|
|
}
|
|
|
function unmount(_x2) {
|
|
|
return _unmount.apply(this, arguments);
|
|
|
}
|
|
|
|
|
|
function _unmount() {
|
|
|
_unmount = (0,_babel_runtime_helpers_esm_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__["default"])( /*#__PURE__*/(0,_babel_runtime_helpers_esm_regeneratorRuntime__WEBPACK_IMPORTED_MODULE_0__["default"])().mark(function _callee2(container) {
|
|
|
return (0,_babel_runtime_helpers_esm_regeneratorRuntime__WEBPACK_IMPORTED_MODULE_0__["default"])().wrap(function _callee2$(_context2) {
|
|
|
while (1) {
|
|
|
switch (_context2.prev = _context2.next) {
|
|
|
case 0:
|
|
|
if (!(createRoot !== undefined)) {
|
|
|
_context2.next = 2;
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
return _context2.abrupt("return", modernUnmount(container));
|
|
|
|
|
|
case 2:
|
|
|
legacyUnmount(container);
|
|
|
|
|
|
case 3:
|
|
|
case "end":
|
|
|
return _context2.stop();
|
|
|
}
|
|
|
}
|
|
|
}, _callee2);
|
|
|
}));
|
|
|
return _unmount.apply(this, arguments);
|
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/rc-util/es/hooks/useMemo.js":
|
|
|
/*!**************************************************!*\
|
|
|
!*** ./node_modules/rc-util/es/hooks/useMemo.js ***!
|
|
|
\**************************************************/
|
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (/* binding */ useMemo)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
|
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
|
|
|
|
function useMemo(getValue, condition, shouldUpdate) {
|
|
|
var cacheRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef({});
|
|
|
|
|
|
if (!('value' in cacheRef.current) || shouldUpdate(cacheRef.current.condition, condition)) {
|
|
|
cacheRef.current.value = getValue();
|
|
|
cacheRef.current.condition = condition;
|
|
|
}
|
|
|
|
|
|
return cacheRef.current.value;
|
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/rc-util/es/hooks/useState.js":
|
|
|
/*!***************************************************!*\
|
|
|
!*** ./node_modules/rc-util/es/hooks/useState.js ***!
|
|
|
\***************************************************/
|
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (/* binding */ useSafeState)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/slicedToArray */ "./node_modules/@babel/runtime/helpers/esm/slicedToArray.js");
|
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
|
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
|
|
|
|
|
|
|
|
|
/**
|
|
|
* Same as React.useState but `setState` accept `ignoreDestroy` param to not to setState after destroyed.
|
|
|
* We do not make this auto is to avoid real memory leak.
|
|
|
* Developer should confirm it's safe to ignore themselves.
|
|
|
*/
|
|
|
|
|
|
function useSafeState(defaultValue) {
|
|
|
var destroyRef = react__WEBPACK_IMPORTED_MODULE_1__.useRef(false);
|
|
|
|
|
|
var _React$useState = react__WEBPACK_IMPORTED_MODULE_1__.useState(defaultValue),
|
|
|
_React$useState2 = (0,_babel_runtime_helpers_esm_slicedToArray__WEBPACK_IMPORTED_MODULE_0__["default"])(_React$useState, 2),
|
|
|
value = _React$useState2[0],
|
|
|
setValue = _React$useState2[1];
|
|
|
|
|
|
react__WEBPACK_IMPORTED_MODULE_1__.useEffect(function () {
|
|
|
destroyRef.current = false;
|
|
|
return function () {
|
|
|
destroyRef.current = true;
|
|
|
};
|
|
|
}, []);
|
|
|
|
|
|
function safeSetState(updater, ignoreDestroy) {
|
|
|
if (ignoreDestroy && destroyRef.current) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
setValue(updater);
|
|
|
}
|
|
|
|
|
|
return [value, safeSetState];
|
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/rc-util/es/raf.js":
|
|
|
/*!****************************************!*\
|
|
|
!*** ./node_modules/rc-util/es/raf.js ***!
|
|
|
\****************************************/
|
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (/* binding */ wrapperRaf)
|
|
|
/* harmony export */ });
|
|
|
var raf = function raf(callback) {
|
|
|
return +setTimeout(callback, 16);
|
|
|
};
|
|
|
|
|
|
var caf = function caf(num) {
|
|
|
return clearTimeout(num);
|
|
|
};
|
|
|
|
|
|
if (typeof window !== 'undefined' && 'requestAnimationFrame' in window) {
|
|
|
raf = function raf(callback) {
|
|
|
return window.requestAnimationFrame(callback);
|
|
|
};
|
|
|
|
|
|
caf = function caf(handle) {
|
|
|
return window.cancelAnimationFrame(handle);
|
|
|
};
|
|
|
}
|
|
|
|
|
|
var rafUUID = 0;
|
|
|
var rafIds = new Map();
|
|
|
|
|
|
function cleanup(id) {
|
|
|
rafIds.delete(id);
|
|
|
}
|
|
|
|
|
|
function wrapperRaf(callback) {
|
|
|
var times = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
|
|
|
rafUUID += 1;
|
|
|
var id = rafUUID;
|
|
|
|
|
|
function callRef(leftTimes) {
|
|
|
if (leftTimes === 0) {
|
|
|
// Clean up
|
|
|
cleanup(id); // Trigger
|
|
|
|
|
|
callback();
|
|
|
} else {
|
|
|
// Next raf
|
|
|
var realId = raf(function () {
|
|
|
callRef(leftTimes - 1);
|
|
|
}); // Bind real raf id
|
|
|
|
|
|
rafIds.set(id, realId);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
callRef(times);
|
|
|
return id;
|
|
|
}
|
|
|
|
|
|
wrapperRaf.cancel = function (id) {
|
|
|
var realId = rafIds.get(id);
|
|
|
cleanup(realId);
|
|
|
return caf(realId);
|
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/rc-util/es/ref.js":
|
|
|
/*!****************************************!*\
|
|
|
!*** ./node_modules/rc-util/es/ref.js ***!
|
|
|
\****************************************/
|
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "composeRef": () => (/* binding */ composeRef),
|
|
|
/* harmony export */ "fillRef": () => (/* binding */ fillRef),
|
|
|
/* harmony export */ "supportRef": () => (/* binding */ supportRef),
|
|
|
/* harmony export */ "useComposeRef": () => (/* binding */ useComposeRef)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/typeof */ "./node_modules/@babel/runtime/helpers/esm/typeof.js");
|
|
|
/* harmony import */ var react_is__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-is */ "./node_modules/react-is/index.js");
|
|
|
/* harmony import */ var _hooks_useMemo__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./hooks/useMemo */ "./node_modules/rc-util/es/hooks/useMemo.js");
|
|
|
|
|
|
|
|
|
|
|
|
function fillRef(ref, node) {
|
|
|
if (typeof ref === 'function') {
|
|
|
ref(node);
|
|
|
} else if ((0,_babel_runtime_helpers_esm_typeof__WEBPACK_IMPORTED_MODULE_0__["default"])(ref) === 'object' && ref && 'current' in ref) {
|
|
|
ref.current = node;
|
|
|
}
|
|
|
}
|
|
|
/**
|
|
|
* Merge refs into one ref function to support ref passing.
|
|
|
*/
|
|
|
|
|
|
function composeRef() {
|
|
|
for (var _len = arguments.length, refs = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
|
refs[_key] = arguments[_key];
|
|
|
}
|
|
|
|
|
|
var refList = refs.filter(function (ref) {
|
|
|
return ref;
|
|
|
});
|
|
|
|
|
|
if (refList.length <= 1) {
|
|
|
return refList[0];
|
|
|
}
|
|
|
|
|
|
return function (node) {
|
|
|
refs.forEach(function (ref) {
|
|
|
fillRef(ref, node);
|
|
|
});
|
|
|
};
|
|
|
}
|
|
|
function useComposeRef() {
|
|
|
for (var _len2 = arguments.length, refs = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
|
refs[_key2] = arguments[_key2];
|
|
|
}
|
|
|
|
|
|
return (0,_hooks_useMemo__WEBPACK_IMPORTED_MODULE_2__["default"])(function () {
|
|
|
return composeRef.apply(void 0, refs);
|
|
|
}, refs, function (prev, next) {
|
|
|
return prev.length === next.length && prev.every(function (ref, i) {
|
|
|
return ref === next[i];
|
|
|
});
|
|
|
});
|
|
|
}
|
|
|
function supportRef(nodeOrComponent) {
|
|
|
var _type$prototype, _nodeOrComponent$prot;
|
|
|
|
|
|
var type = (0,react_is__WEBPACK_IMPORTED_MODULE_1__.isMemo)(nodeOrComponent) ? nodeOrComponent.type.type : nodeOrComponent.type; // Function component node
|
|
|
|
|
|
if (typeof type === 'function' && !((_type$prototype = type.prototype) === null || _type$prototype === void 0 ? void 0 : _type$prototype.render)) {
|
|
|
return false;
|
|
|
} // Class component
|
|
|
|
|
|
|
|
|
if (typeof nodeOrComponent === 'function' && !((_nodeOrComponent$prot = nodeOrComponent.prototype) === null || _nodeOrComponent$prot === void 0 ? void 0 : _nodeOrComponent$prot.render)) {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
return true;
|
|
|
}
|
|
|
/* eslint-enable */
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/rc-util/es/utils/get.js":
|
|
|
/*!**********************************************!*\
|
|
|
!*** ./node_modules/rc-util/es/utils/get.js ***!
|
|
|
\**********************************************/
|
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (/* binding */ get)
|
|
|
/* harmony export */ });
|
|
|
function get(entity, path) {
|
|
|
var current = entity;
|
|
|
|
|
|
for (var i = 0; i < path.length; i += 1) {
|
|
|
if (current === null || current === undefined) {
|
|
|
return undefined;
|
|
|
}
|
|
|
|
|
|
current = current[path[i]];
|
|
|
}
|
|
|
|
|
|
return current;
|
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/rc-util/es/utils/set.js":
|
|
|
/*!**********************************************!*\
|
|
|
!*** ./node_modules/rc-util/es/utils/set.js ***!
|
|
|
\**********************************************/
|
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (/* binding */ set)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectSpread2 */ "./node_modules/@babel/runtime/helpers/esm/objectSpread2.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toConsumableArray */ "./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js");
|
|
|
/* harmony import */ var _babel_runtime_helpers_esm_toArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/esm/toArray */ "./node_modules/@babel/runtime/helpers/esm/toArray.js");
|
|
|
/* harmony import */ var _get__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./get */ "./node_modules/rc-util/es/utils/get.js");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function internalSet(entity, paths, value, removeIfUndefined) {
|
|
|
if (!paths.length) {
|
|
|
return value;
|
|
|
}
|
|
|
|
|
|
var _paths = (0,_babel_runtime_helpers_esm_toArray__WEBPACK_IMPORTED_MODULE_2__["default"])(paths),
|
|
|
path = _paths[0],
|
|
|
restPath = _paths.slice(1);
|
|
|
|
|
|
var clone;
|
|
|
|
|
|
if (!entity && typeof path === 'number') {
|
|
|
clone = [];
|
|
|
} else if (Array.isArray(entity)) {
|
|
|
clone = (0,_babel_runtime_helpers_esm_toConsumableArray__WEBPACK_IMPORTED_MODULE_1__["default"])(entity);
|
|
|
} else {
|
|
|
clone = (0,_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__["default"])({}, entity);
|
|
|
} // Delete prop if `removeIfUndefined` and value is undefined
|
|
|
|
|
|
|
|
|
if (removeIfUndefined && value === undefined && restPath.length === 1) {
|
|
|
delete clone[path][restPath[0]];
|
|
|
} else {
|
|
|
clone[path] = internalSet(clone[path], restPath, value, removeIfUndefined);
|
|
|
}
|
|
|
|
|
|
return clone;
|
|
|
}
|
|
|
|
|
|
function set(entity, paths, value) {
|
|
|
var removeIfUndefined = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
|
|
|
|
|
|
// Do nothing if `removeIfUndefined` and parent object not exist
|
|
|
if (paths.length && removeIfUndefined && value === undefined && !(0,_get__WEBPACK_IMPORTED_MODULE_3__["default"])(entity, paths.slice(0, -1))) {
|
|
|
return entity;
|
|
|
}
|
|
|
|
|
|
return internalSet(entity, paths, value, removeIfUndefined);
|
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/rc-util/es/warning.js":
|
|
|
/*!********************************************!*\
|
|
|
!*** ./node_modules/rc-util/es/warning.js ***!
|
|
|
\********************************************/
|
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "call": () => (/* binding */ call),
|
|
|
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__),
|
|
|
/* harmony export */ "note": () => (/* binding */ note),
|
|
|
/* harmony export */ "noteOnce": () => (/* binding */ noteOnce),
|
|
|
/* harmony export */ "resetWarned": () => (/* binding */ resetWarned),
|
|
|
/* harmony export */ "warning": () => (/* binding */ warning),
|
|
|
/* harmony export */ "warningOnce": () => (/* binding */ warningOnce)
|
|
|
/* harmony export */ });
|
|
|
/* eslint-disable no-console */
|
|
|
var warned = {};
|
|
|
function warning(valid, message) {
|
|
|
// Support uglify
|
|
|
if ( true && !valid && console !== undefined) {
|
|
|
console.error("Warning: ".concat(message));
|
|
|
}
|
|
|
}
|
|
|
function note(valid, message) {
|
|
|
// Support uglify
|
|
|
if ( true && !valid && console !== undefined) {
|
|
|
console.warn("Note: ".concat(message));
|
|
|
}
|
|
|
}
|
|
|
function resetWarned() {
|
|
|
warned = {};
|
|
|
}
|
|
|
function call(method, valid, message) {
|
|
|
if (!valid && !warned[message]) {
|
|
|
method(false, message);
|
|
|
warned[message] = true;
|
|
|
}
|
|
|
}
|
|
|
function warningOnce(valid, message) {
|
|
|
call(warning, valid, message);
|
|
|
}
|
|
|
function noteOnce(valid, message) {
|
|
|
call(note, valid, message);
|
|
|
}
|
|
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (warningOnce);
|
|
|
/* eslint-enable */
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/rc-util/lib/Children/toArray.js":
|
|
|
/*!******************************************************!*\
|
|
|
!*** ./node_modules/rc-util/lib/Children/toArray.js ***!
|
|
|
\******************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
var _interopRequireDefault = (__webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js")["default"]);
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports["default"] = toArray;
|
|
|
|
|
|
var _react = _interopRequireDefault(__webpack_require__(/*! react */ "./node_modules/react/index.js"));
|
|
|
|
|
|
var _reactIs = __webpack_require__(/*! react-is */ "./node_modules/react-is/index.js");
|
|
|
|
|
|
function toArray(children) {
|
|
|
var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
|
var ret = [];
|
|
|
|
|
|
_react.default.Children.forEach(children, function (child) {
|
|
|
if ((child === undefined || child === null) && !option.keepEmpty) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (Array.isArray(child)) {
|
|
|
ret = ret.concat(toArray(child));
|
|
|
} else if ((0, _reactIs.isFragment)(child) && child.props) {
|
|
|
ret = ret.concat(toArray(child.props.children, option));
|
|
|
} else {
|
|
|
ret.push(child);
|
|
|
}
|
|
|
});
|
|
|
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/rc-util/lib/Dom/canUseDom.js":
|
|
|
/*!***************************************************!*\
|
|
|
!*** ./node_modules/rc-util/lib/Dom/canUseDom.js ***!
|
|
|
\***************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports["default"] = canUseDom;
|
|
|
|
|
|
function canUseDom() {
|
|
|
return !!(typeof window !== 'undefined' && window.document && window.document.createElement);
|
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/rc-util/lib/Dom/contains.js":
|
|
|
/*!**************************************************!*\
|
|
|
!*** ./node_modules/rc-util/lib/Dom/contains.js ***!
|
|
|
\**************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports["default"] = contains;
|
|
|
|
|
|
function contains(root, n) {
|
|
|
if (!root) {
|
|
|
return false;
|
|
|
} // Use native if support
|
|
|
|
|
|
|
|
|
if (root.contains) {
|
|
|
return root.contains(n);
|
|
|
} // `document.contains` not support with IE11
|
|
|
|
|
|
|
|
|
var node = n;
|
|
|
|
|
|
while (node) {
|
|
|
if (node === root) {
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
node = node.parentNode;
|
|
|
}
|
|
|
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/rc-util/lib/Dom/dynamicCSS.js":
|
|
|
/*!****************************************************!*\
|
|
|
!*** ./node_modules/rc-util/lib/Dom/dynamicCSS.js ***!
|
|
|
\****************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
var _interopRequireDefault = (__webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js")["default"]);
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports.injectCSS = injectCSS;
|
|
|
exports.removeCSS = removeCSS;
|
|
|
exports.updateCSS = updateCSS;
|
|
|
|
|
|
var _canUseDom = _interopRequireDefault(__webpack_require__(/*! ./canUseDom */ "./node_modules/rc-util/lib/Dom/canUseDom.js"));
|
|
|
|
|
|
var _contains = _interopRequireDefault(__webpack_require__(/*! ./contains */ "./node_modules/rc-util/lib/Dom/contains.js"));
|
|
|
|
|
|
var APPEND_ORDER = 'data-rc-order';
|
|
|
var MARK_KEY = "rc-util-key";
|
|
|
var containerCache = new Map();
|
|
|
|
|
|
function getMark() {
|
|
|
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
|
|
|
mark = _ref.mark;
|
|
|
|
|
|
if (mark) {
|
|
|
return mark.startsWith('data-') ? mark : "data-".concat(mark);
|
|
|
}
|
|
|
|
|
|
return MARK_KEY;
|
|
|
}
|
|
|
|
|
|
function getContainer(option) {
|
|
|
if (option.attachTo) {
|
|
|
return option.attachTo;
|
|
|
}
|
|
|
|
|
|
var head = document.querySelector('head');
|
|
|
return head || document.body;
|
|
|
}
|
|
|
|
|
|
function getOrder(prepend) {
|
|
|
if (prepend === 'queue') {
|
|
|
return 'prependQueue';
|
|
|
}
|
|
|
|
|
|
return prepend ? 'prepend' : 'append';
|
|
|
}
|
|
|
/**
|
|
|
* Find style which inject by rc-util
|
|
|
*/
|
|
|
|
|
|
|
|
|
function findStyles(container) {
|
|
|
return Array.from((containerCache.get(container) || container).children).filter(function (node) {
|
|
|
return node.tagName === 'STYLE';
|
|
|
});
|
|
|
}
|
|
|
|
|
|
function injectCSS(css) {
|
|
|
var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
|
|
|
|
if (!(0, _canUseDom.default)()) {
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
var csp = option.csp,
|
|
|
prepend = option.prepend;
|
|
|
var styleNode = document.createElement('style');
|
|
|
styleNode.setAttribute(APPEND_ORDER, getOrder(prepend));
|
|
|
|
|
|
if (csp === null || csp === void 0 ? void 0 : csp.nonce) {
|
|
|
styleNode.nonce = csp === null || csp === void 0 ? void 0 : csp.nonce;
|
|
|
}
|
|
|
|
|
|
styleNode.innerHTML = css;
|
|
|
var container = getContainer(option);
|
|
|
var firstChild = container.firstChild;
|
|
|
|
|
|
if (prepend) {
|
|
|
// If is queue `prepend`, it will prepend first style and then append rest style
|
|
|
if (prepend === 'queue') {
|
|
|
var existStyle = findStyles(container).filter(function (node) {
|
|
|
return ['prepend', 'prependQueue'].includes(node.getAttribute(APPEND_ORDER));
|
|
|
});
|
|
|
|
|
|
if (existStyle.length) {
|
|
|
container.insertBefore(styleNode, existStyle[existStyle.length - 1].nextSibling);
|
|
|
return styleNode;
|
|
|
}
|
|
|
} // Use `insertBefore` as `prepend`
|
|
|
|
|
|
|
|
|
container.insertBefore(styleNode, firstChild);
|
|
|
} else {
|
|
|
container.appendChild(styleNode);
|
|
|
}
|
|
|
|
|
|
return styleNode;
|
|
|
}
|
|
|
|
|
|
function findExistNode(key) {
|
|
|
var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
|
var container = getContainer(option);
|
|
|
return findStyles(container).find(function (node) {
|
|
|
return node.getAttribute(getMark(option)) === key;
|
|
|
});
|
|
|
}
|
|
|
|
|
|
function removeCSS(key) {
|
|
|
var _existNode$parentNode;
|
|
|
|
|
|
var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
|
var existNode = findExistNode(key, option);
|
|
|
existNode === null || existNode === void 0 ? void 0 : (_existNode$parentNode = existNode.parentNode) === null || _existNode$parentNode === void 0 ? void 0 : _existNode$parentNode.removeChild(existNode);
|
|
|
}
|
|
|
/**
|
|
|
* qiankun will inject `appendChild` to insert into other
|
|
|
*/
|
|
|
|
|
|
|
|
|
function syncRealContainer(container, option) {
|
|
|
var cachedRealContainer = containerCache.get(container); // Find real container when not cached or cached container removed
|
|
|
|
|
|
if (!cachedRealContainer || !(0, _contains.default)(document, cachedRealContainer)) {
|
|
|
var placeholderStyle = injectCSS('', option);
|
|
|
var parentNode = placeholderStyle.parentNode;
|
|
|
containerCache.set(container, parentNode);
|
|
|
parentNode.removeChild(placeholderStyle);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function updateCSS(css, key) {
|
|
|
var option = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
|
var container = getContainer(option); // Sync real parent
|
|
|
|
|
|
syncRealContainer(container, option);
|
|
|
var existNode = findExistNode(key, option);
|
|
|
|
|
|
if (existNode) {
|
|
|
var _option$csp, _option$csp2;
|
|
|
|
|
|
if (((_option$csp = option.csp) === null || _option$csp === void 0 ? void 0 : _option$csp.nonce) && existNode.nonce !== ((_option$csp2 = option.csp) === null || _option$csp2 === void 0 ? void 0 : _option$csp2.nonce)) {
|
|
|
var _option$csp3;
|
|
|
|
|
|
existNode.nonce = (_option$csp3 = option.csp) === null || _option$csp3 === void 0 ? void 0 : _option$csp3.nonce;
|
|
|
}
|
|
|
|
|
|
if (existNode.innerHTML !== css) {
|
|
|
existNode.innerHTML = css;
|
|
|
}
|
|
|
|
|
|
return existNode;
|
|
|
}
|
|
|
|
|
|
var newNode = injectCSS(css, option);
|
|
|
newNode.setAttribute(getMark(option), key);
|
|
|
return newNode;
|
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/rc-util/lib/hooks/useMemo.js":
|
|
|
/*!***************************************************!*\
|
|
|
!*** ./node_modules/rc-util/lib/hooks/useMemo.js ***!
|
|
|
\***************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
var _interopRequireWildcard = (__webpack_require__(/*! @babel/runtime/helpers/interopRequireWildcard */ "./node_modules/@babel/runtime/helpers/interopRequireWildcard.js")["default"]);
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports["default"] = useMemo;
|
|
|
|
|
|
var React = _interopRequireWildcard(__webpack_require__(/*! react */ "./node_modules/react/index.js"));
|
|
|
|
|
|
function useMemo(getValue, condition, shouldUpdate) {
|
|
|
var cacheRef = React.useRef({});
|
|
|
|
|
|
if (!('value' in cacheRef.current) || shouldUpdate(cacheRef.current.condition, condition)) {
|
|
|
cacheRef.current.value = getValue();
|
|
|
cacheRef.current.condition = condition;
|
|
|
}
|
|
|
|
|
|
return cacheRef.current.value;
|
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/rc-util/lib/omit.js":
|
|
|
/*!******************************************!*\
|
|
|
!*** ./node_modules/rc-util/lib/omit.js ***!
|
|
|
\******************************************/
|
|
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
var _interopRequireDefault = (__webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js")["default"]);
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports["default"] = omit;
|
|
|
|
|
|
var _objectSpread2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectSpread2 */ "./node_modules/@babel/runtime/helpers/objectSpread2.js"));
|
|
|
|
|
|
function omit(obj, fields) {
|
|
|
var clone = (0, _objectSpread2.default)({}, obj);
|
|
|
|
|
|
if (Array.isArray(fields)) {
|
|
|
fields.forEach(function (key) {
|
|
|
delete clone[key];
|
|
|
});
|
|
|
}
|
|
|
|
|
|
return clone;
|
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/rc-util/lib/raf.js":
|
|
|
/*!*****************************************!*\
|
|
|
!*** ./node_modules/rc-util/lib/raf.js ***!
|
|
|
\*****************************************/
|
|
|
/***/ ((__unused_webpack_module, exports) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports["default"] = wrapperRaf;
|
|
|
|
|
|
var raf = function raf(callback) {
|
|
|
return +setTimeout(callback, 16);
|
|
|
};
|
|
|
|
|
|
var caf = function caf(num) {
|
|
|
return clearTimeout(num);
|
|
|
};
|
|
|
|
|
|
if (typeof window !== 'undefined' && 'requestAnimationFrame' in window) {
|
|
|
raf = function raf(callback) {
|
|
|
return window.requestAnimationFrame(callback);
|
|
|
};
|
|
|
|
|
|
caf = function caf(handle) {
|
|
|
return window.cancelAnimationFrame(handle);
|
|
|
};
|
|
|
}
|
|
|
|
|
|
var rafUUID = 0;
|
|
|
var rafIds = new Map();
|
|
|
|
|
|
function cleanup(id) {
|
|
|
rafIds.delete(id);
|
|
|
}
|
|
|
|
|
|
function wrapperRaf(callback) {
|
|
|
var times = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
|
|
|
rafUUID += 1;
|
|
|
var id = rafUUID;
|
|
|
|
|
|
function callRef(leftTimes) {
|
|
|
if (leftTimes === 0) {
|
|
|
// Clean up
|
|
|
cleanup(id); // Trigger
|
|
|
|
|
|
callback();
|
|
|
} else {
|
|
|
// Next raf
|
|
|
var realId = raf(function () {
|
|
|
callRef(leftTimes - 1);
|
|
|
}); // Bind real raf id
|
|
|
|
|
|
rafIds.set(id, realId);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
callRef(times);
|
|
|
return id;
|
|
|
}
|
|
|
|
|
|
wrapperRaf.cancel = function (id) {
|
|
|
var realId = rafIds.get(id);
|
|
|
cleanup(realId);
|
|
|
return caf(realId);
|
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/rc-util/lib/ref.js":
|
|
|
/*!*****************************************!*\
|
|
|
!*** ./node_modules/rc-util/lib/ref.js ***!
|
|
|
\*****************************************/
|
|
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
var _interopRequireDefault = (__webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js")["default"]);
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports.composeRef = composeRef;
|
|
|
exports.fillRef = fillRef;
|
|
|
exports.supportRef = supportRef;
|
|
|
exports.useComposeRef = useComposeRef;
|
|
|
|
|
|
var _typeof2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/typeof */ "./node_modules/@babel/runtime/helpers/typeof.js"));
|
|
|
|
|
|
var _reactIs = __webpack_require__(/*! react-is */ "./node_modules/react-is/index.js");
|
|
|
|
|
|
var _useMemo = _interopRequireDefault(__webpack_require__(/*! ./hooks/useMemo */ "./node_modules/rc-util/lib/hooks/useMemo.js"));
|
|
|
|
|
|
function fillRef(ref, node) {
|
|
|
if (typeof ref === 'function') {
|
|
|
ref(node);
|
|
|
} else if ((0, _typeof2.default)(ref) === 'object' && ref && 'current' in ref) {
|
|
|
ref.current = node;
|
|
|
}
|
|
|
}
|
|
|
/**
|
|
|
* Merge refs into one ref function to support ref passing.
|
|
|
*/
|
|
|
|
|
|
|
|
|
function composeRef() {
|
|
|
for (var _len = arguments.length, refs = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
|
refs[_key] = arguments[_key];
|
|
|
}
|
|
|
|
|
|
var refList = refs.filter(function (ref) {
|
|
|
return ref;
|
|
|
});
|
|
|
|
|
|
if (refList.length <= 1) {
|
|
|
return refList[0];
|
|
|
}
|
|
|
|
|
|
return function (node) {
|
|
|
refs.forEach(function (ref) {
|
|
|
fillRef(ref, node);
|
|
|
});
|
|
|
};
|
|
|
}
|
|
|
|
|
|
function useComposeRef() {
|
|
|
for (var _len2 = arguments.length, refs = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
|
|
refs[_key2] = arguments[_key2];
|
|
|
}
|
|
|
|
|
|
return (0, _useMemo.default)(function () {
|
|
|
return composeRef.apply(void 0, refs);
|
|
|
}, refs, function (prev, next) {
|
|
|
return prev.length === next.length && prev.every(function (ref, i) {
|
|
|
return ref === next[i];
|
|
|
});
|
|
|
});
|
|
|
}
|
|
|
|
|
|
function supportRef(nodeOrComponent) {
|
|
|
var _type$prototype, _nodeOrComponent$prot;
|
|
|
|
|
|
var type = (0, _reactIs.isMemo)(nodeOrComponent) ? nodeOrComponent.type.type : nodeOrComponent.type; // Function component node
|
|
|
|
|
|
if (typeof type === 'function' && !((_type$prototype = type.prototype) === null || _type$prototype === void 0 ? void 0 : _type$prototype.render)) {
|
|
|
return false;
|
|
|
} // Class component
|
|
|
|
|
|
|
|
|
if (typeof nodeOrComponent === 'function' && !((_nodeOrComponent$prot = nodeOrComponent.prototype) === null || _nodeOrComponent$prot === void 0 ? void 0 : _nodeOrComponent$prot.render)) {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
return true;
|
|
|
}
|
|
|
/* eslint-enable */
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/rc-util/lib/warning.js":
|
|
|
/*!*********************************************!*\
|
|
|
!*** ./node_modules/rc-util/lib/warning.js ***!
|
|
|
\*********************************************/
|
|
|
/***/ ((__unused_webpack_module, exports) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
Object.defineProperty(exports, "__esModule", ({
|
|
|
value: true
|
|
|
}));
|
|
|
exports.call = call;
|
|
|
exports["default"] = void 0;
|
|
|
exports.note = note;
|
|
|
exports.noteOnce = noteOnce;
|
|
|
exports.resetWarned = resetWarned;
|
|
|
exports.warning = warning;
|
|
|
exports.warningOnce = warningOnce;
|
|
|
|
|
|
/* eslint-disable no-console */
|
|
|
var warned = {};
|
|
|
|
|
|
function warning(valid, message) {
|
|
|
// Support uglify
|
|
|
if ( true && !valid && console !== undefined) {
|
|
|
console.error("Warning: ".concat(message));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function note(valid, message) {
|
|
|
// Support uglify
|
|
|
if ( true && !valid && console !== undefined) {
|
|
|
console.warn("Note: ".concat(message));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function resetWarned() {
|
|
|
warned = {};
|
|
|
}
|
|
|
|
|
|
function call(method, valid, message) {
|
|
|
if (!valid && !warned[message]) {
|
|
|
method(false, message);
|
|
|
warned[message] = true;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function warningOnce(valid, message) {
|
|
|
call(warning, valid, message);
|
|
|
}
|
|
|
|
|
|
function noteOnce(valid, message) {
|
|
|
call(note, valid, message);
|
|
|
}
|
|
|
|
|
|
var _default = warningOnce;
|
|
|
/* eslint-enable */
|
|
|
|
|
|
exports["default"] = _default;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/react-dom/cjs/react-dom.development.js":
|
|
|
/*!*************************************************************!*\
|
|
|
!*** ./node_modules/react-dom/cjs/react-dom.development.js ***!
|
|
|
\*************************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
/**
|
|
|
* @license React
|
|
|
* react-dom.development.js
|
|
|
*
|
|
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
|
*
|
|
|
* This source code is licensed under the MIT license found in the
|
|
|
* LICENSE file in the root directory of this source tree.
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
if (true) {
|
|
|
(function() {
|
|
|
|
|
|
'use strict';
|
|
|
|
|
|
/* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */
|
|
|
if (
|
|
|
typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&
|
|
|
typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart ===
|
|
|
'function'
|
|
|
) {
|
|
|
__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error());
|
|
|
}
|
|
|
var React = __webpack_require__(/*! react */ "./node_modules/react/index.js");
|
|
|
var Scheduler = __webpack_require__(/*! scheduler */ "./node_modules/scheduler/index.js");
|
|
|
|
|
|
var ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;
|
|
|
|
|
|
var suppressWarning = false;
|
|
|
function setSuppressWarning(newSuppressWarning) {
|
|
|
{
|
|
|
suppressWarning = newSuppressWarning;
|
|
|
}
|
|
|
} // In DEV, calls to console.warn and console.error get replaced
|
|
|
// by calls to these methods by a Babel plugin.
|
|
|
//
|
|
|
// In PROD (or in packages without access to React internals),
|
|
|
// they are left as they are instead.
|
|
|
|
|
|
function warn(format) {
|
|
|
{
|
|
|
if (!suppressWarning) {
|
|
|
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
|
|
args[_key - 1] = arguments[_key];
|
|
|
}
|
|
|
|
|
|
printWarning('warn', format, args);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
function error(format) {
|
|
|
{
|
|
|
if (!suppressWarning) {
|
|
|
for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
|
|
|
args[_key2 - 1] = arguments[_key2];
|
|
|
}
|
|
|
|
|
|
printWarning('error', format, args);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function printWarning(level, format, args) {
|
|
|
// When changing this logic, you might want to also
|
|
|
// update consoleWithStackDev.www.js as well.
|
|
|
{
|
|
|
var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;
|
|
|
var stack = ReactDebugCurrentFrame.getStackAddendum();
|
|
|
|
|
|
if (stack !== '') {
|
|
|
format += '%s';
|
|
|
args = args.concat([stack]);
|
|
|
} // eslint-disable-next-line react-internal/safe-string-coercion
|
|
|
|
|
|
|
|
|
var argsWithFormat = args.map(function (item) {
|
|
|
return String(item);
|
|
|
}); // Careful: RN currently depends on this prefix
|
|
|
|
|
|
argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it
|
|
|
// breaks IE9: https://github.com/facebook/react/issues/13610
|
|
|
// eslint-disable-next-line react-internal/no-production-logging
|
|
|
|
|
|
Function.prototype.apply.call(console[level], console, argsWithFormat);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var FunctionComponent = 0;
|
|
|
var ClassComponent = 1;
|
|
|
var IndeterminateComponent = 2; // Before we know whether it is function or class
|
|
|
|
|
|
var HostRoot = 3; // Root of a host tree. Could be nested inside another node.
|
|
|
|
|
|
var HostPortal = 4; // A subtree. Could be an entry point to a different renderer.
|
|
|
|
|
|
var HostComponent = 5;
|
|
|
var HostText = 6;
|
|
|
var Fragment = 7;
|
|
|
var Mode = 8;
|
|
|
var ContextConsumer = 9;
|
|
|
var ContextProvider = 10;
|
|
|
var ForwardRef = 11;
|
|
|
var Profiler = 12;
|
|
|
var SuspenseComponent = 13;
|
|
|
var MemoComponent = 14;
|
|
|
var SimpleMemoComponent = 15;
|
|
|
var LazyComponent = 16;
|
|
|
var IncompleteClassComponent = 17;
|
|
|
var DehydratedFragment = 18;
|
|
|
var SuspenseListComponent = 19;
|
|
|
var ScopeComponent = 21;
|
|
|
var OffscreenComponent = 22;
|
|
|
var LegacyHiddenComponent = 23;
|
|
|
var CacheComponent = 24;
|
|
|
var TracingMarkerComponent = 25;
|
|
|
|
|
|
// -----------------------------------------------------------------------------
|
|
|
|
|
|
var enableClientRenderFallbackOnTextMismatch = true; // TODO: Need to review this code one more time before landing
|
|
|
// the react-reconciler package.
|
|
|
|
|
|
var enableNewReconciler = false; // Support legacy Primer support on internal FB www
|
|
|
|
|
|
var enableLazyContextPropagation = false; // FB-only usage. The new API has different semantics.
|
|
|
|
|
|
var enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber
|
|
|
|
|
|
var enableSuspenseAvoidThisFallback = false; // Enables unstable_avoidThisFallback feature in Fizz
|
|
|
// React DOM Chopping Block
|
|
|
//
|
|
|
// Similar to main Chopping Block but only flags related to React DOM. These are
|
|
|
// grouped because we will likely batch all of them into a single major release.
|
|
|
// -----------------------------------------------------------------------------
|
|
|
// Disable support for comment nodes as React DOM containers. Already disabled
|
|
|
// in open source, but www codebase still relies on it. Need to remove.
|
|
|
|
|
|
var disableCommentsAsDOMContainers = true; // Disable javascript: URL strings in href for XSS protection.
|
|
|
// and client rendering, mostly to allow JSX attributes to apply to the custom
|
|
|
// element's object properties instead of only HTML attributes.
|
|
|
// https://github.com/facebook/react/issues/11347
|
|
|
|
|
|
var enableCustomElementPropertySupport = false; // Disables children for <textarea> elements
|
|
|
var warnAboutStringRefs = false; // -----------------------------------------------------------------------------
|
|
|
// Debugging and DevTools
|
|
|
// -----------------------------------------------------------------------------
|
|
|
// Adds user timing marks for e.g. state updates, suspense, and work loop stuff,
|
|
|
// for an experimental timeline tool.
|
|
|
|
|
|
var enableSchedulingProfiler = true; // Helps identify side effects in render-phase lifecycle hooks and setState
|
|
|
|
|
|
var enableProfilerTimer = true; // Record durations for commit and passive effects phases.
|
|
|
|
|
|
var enableProfilerCommitHooks = true; // Phase param passed to onRender callback differentiates between an "update" and a "cascading-update".
|
|
|
|
|
|
var allNativeEvents = new Set();
|
|
|
/**
|
|
|
* Mapping from registration name to event name
|
|
|
*/
|
|
|
|
|
|
|
|
|
var registrationNameDependencies = {};
|
|
|
/**
|
|
|
* Mapping from lowercase registration names to the properly cased version,
|
|
|
* used to warn in the case of missing event handlers. Available
|
|
|
* only in true.
|
|
|
* @type {Object}
|
|
|
*/
|
|
|
|
|
|
var possibleRegistrationNames = {} ; // Trust the developer to only use possibleRegistrationNames in true
|
|
|
|
|
|
function registerTwoPhaseEvent(registrationName, dependencies) {
|
|
|
registerDirectEvent(registrationName, dependencies);
|
|
|
registerDirectEvent(registrationName + 'Capture', dependencies);
|
|
|
}
|
|
|
function registerDirectEvent(registrationName, dependencies) {
|
|
|
{
|
|
|
if (registrationNameDependencies[registrationName]) {
|
|
|
error('EventRegistry: More than one plugin attempted to publish the same ' + 'registration name, `%s`.', registrationName);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
registrationNameDependencies[registrationName] = dependencies;
|
|
|
|
|
|
{
|
|
|
var lowerCasedName = registrationName.toLowerCase();
|
|
|
possibleRegistrationNames[lowerCasedName] = registrationName;
|
|
|
|
|
|
if (registrationName === 'onDoubleClick') {
|
|
|
possibleRegistrationNames.ondblclick = registrationName;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
for (var i = 0; i < dependencies.length; i++) {
|
|
|
allNativeEvents.add(dependencies[i]);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var canUseDOM = !!(typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined');
|
|
|
|
|
|
var hasOwnProperty = Object.prototype.hasOwnProperty;
|
|
|
|
|
|
/*
|
|
|
* The `'' + value` pattern (used in in perf-sensitive code) throws for Symbol
|
|
|
* and Temporal.* types. See https://github.com/facebook/react/pull/22064.
|
|
|
*
|
|
|
* The functions in this module will throw an easier-to-understand,
|
|
|
* easier-to-debug exception with a clear errors message message explaining the
|
|
|
* problem. (Instead of a confusing exception thrown inside the implementation
|
|
|
* of the `value` object).
|
|
|
*/
|
|
|
// $FlowFixMe only called in DEV, so void return is not possible.
|
|
|
function typeName(value) {
|
|
|
{
|
|
|
// toStringTag is needed for namespaced types like Temporal.Instant
|
|
|
var hasToStringTag = typeof Symbol === 'function' && Symbol.toStringTag;
|
|
|
var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || 'Object';
|
|
|
return type;
|
|
|
}
|
|
|
} // $FlowFixMe only called in DEV, so void return is not possible.
|
|
|
|
|
|
|
|
|
function willCoercionThrow(value) {
|
|
|
{
|
|
|
try {
|
|
|
testStringCoercion(value);
|
|
|
return false;
|
|
|
} catch (e) {
|
|
|
return true;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function testStringCoercion(value) {
|
|
|
// If you ended up here by following an exception call stack, here's what's
|
|
|
// happened: you supplied an object or symbol value to React (as a prop, key,
|
|
|
// DOM attribute, CSS property, string ref, etc.) and when React tried to
|
|
|
// coerce it to a string using `'' + value`, an exception was thrown.
|
|
|
//
|
|
|
// The most common types that will cause this exception are `Symbol` instances
|
|
|
// and Temporal objects like `Temporal.Instant`. But any object that has a
|
|
|
// `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this
|
|
|
// exception. (Library authors do this to prevent users from using built-in
|
|
|
// numeric operators like `+` or comparison operators like `>=` because custom
|
|
|
// methods are needed to perform accurate arithmetic or comparison.)
|
|
|
//
|
|
|
// To fix the problem, coerce this object or symbol value to a string before
|
|
|
// passing it to React. The most reliable way is usually `String(value)`.
|
|
|
//
|
|
|
// To find which value is throwing, check the browser or debugger console.
|
|
|
// Before this exception was thrown, there should be `console.error` output
|
|
|
// that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the
|
|
|
// problem and how that type was used: key, atrribute, input value prop, etc.
|
|
|
// In most cases, this console output also shows the component and its
|
|
|
// ancestor components where the exception happened.
|
|
|
//
|
|
|
// eslint-disable-next-line react-internal/safe-string-coercion
|
|
|
return '' + value;
|
|
|
}
|
|
|
|
|
|
function checkAttributeStringCoercion(value, attributeName) {
|
|
|
{
|
|
|
if (willCoercionThrow(value)) {
|
|
|
error('The provided `%s` attribute is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.', attributeName, typeName(value));
|
|
|
|
|
|
return testStringCoercion(value); // throw (to help callers find troubleshooting comments)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
function checkKeyStringCoercion(value) {
|
|
|
{
|
|
|
if (willCoercionThrow(value)) {
|
|
|
error('The provided key is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.', typeName(value));
|
|
|
|
|
|
return testStringCoercion(value); // throw (to help callers find troubleshooting comments)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
function checkPropStringCoercion(value, propName) {
|
|
|
{
|
|
|
if (willCoercionThrow(value)) {
|
|
|
error('The provided `%s` prop is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.', propName, typeName(value));
|
|
|
|
|
|
return testStringCoercion(value); // throw (to help callers find troubleshooting comments)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
function checkCSSPropertyStringCoercion(value, propName) {
|
|
|
{
|
|
|
if (willCoercionThrow(value)) {
|
|
|
error('The provided `%s` CSS property is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.', propName, typeName(value));
|
|
|
|
|
|
return testStringCoercion(value); // throw (to help callers find troubleshooting comments)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
function checkHtmlStringCoercion(value) {
|
|
|
{
|
|
|
if (willCoercionThrow(value)) {
|
|
|
error('The provided HTML markup uses a value of unsupported type %s.' + ' This value must be coerced to a string before before using it here.', typeName(value));
|
|
|
|
|
|
return testStringCoercion(value); // throw (to help callers find troubleshooting comments)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
function checkFormFieldValueStringCoercion(value) {
|
|
|
{
|
|
|
if (willCoercionThrow(value)) {
|
|
|
error('Form field values (value, checked, defaultValue, or defaultChecked props)' + ' must be strings, not %s.' + ' This value must be coerced to a string before before using it here.', typeName(value));
|
|
|
|
|
|
return testStringCoercion(value); // throw (to help callers find troubleshooting comments)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// A reserved attribute.
|
|
|
// It is handled by React separately and shouldn't be written to the DOM.
|
|
|
var RESERVED = 0; // A simple string attribute.
|
|
|
// Attributes that aren't in the filter are presumed to have this type.
|
|
|
|
|
|
var STRING = 1; // A string attribute that accepts booleans in React. In HTML, these are called
|
|
|
// "enumerated" attributes with "true" and "false" as possible values.
|
|
|
// When true, it should be set to a "true" string.
|
|
|
// When false, it should be set to a "false" string.
|
|
|
|
|
|
var BOOLEANISH_STRING = 2; // A real boolean attribute.
|
|
|
// When true, it should be present (set either to an empty string or its name).
|
|
|
// When false, it should be omitted.
|
|
|
|
|
|
var BOOLEAN = 3; // An attribute that can be used as a flag as well as with a value.
|
|
|
// When true, it should be present (set either to an empty string or its name).
|
|
|
// When false, it should be omitted.
|
|
|
// For any other value, should be present with that value.
|
|
|
|
|
|
var OVERLOADED_BOOLEAN = 4; // An attribute that must be numeric or parse as a numeric.
|
|
|
// When falsy, it should be removed.
|
|
|
|
|
|
var NUMERIC = 5; // An attribute that must be positive numeric or parse as a positive numeric.
|
|
|
// When falsy, it should be removed.
|
|
|
|
|
|
var POSITIVE_NUMERIC = 6;
|
|
|
|
|
|
/* eslint-disable max-len */
|
|
|
var ATTRIBUTE_NAME_START_CHAR = ":A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD";
|
|
|
/* eslint-enable max-len */
|
|
|
|
|
|
var ATTRIBUTE_NAME_CHAR = ATTRIBUTE_NAME_START_CHAR + "\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040";
|
|
|
var VALID_ATTRIBUTE_NAME_REGEX = new RegExp('^[' + ATTRIBUTE_NAME_START_CHAR + '][' + ATTRIBUTE_NAME_CHAR + ']*$');
|
|
|
var illegalAttributeNameCache = {};
|
|
|
var validatedAttributeNameCache = {};
|
|
|
function isAttributeNameSafe(attributeName) {
|
|
|
if (hasOwnProperty.call(validatedAttributeNameCache, attributeName)) {
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName)) {
|
|
|
validatedAttributeNameCache[attributeName] = true;
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
illegalAttributeNameCache[attributeName] = true;
|
|
|
|
|
|
{
|
|
|
error('Invalid attribute name: `%s`', attributeName);
|
|
|
}
|
|
|
|
|
|
return false;
|
|
|
}
|
|
|
function shouldIgnoreAttribute(name, propertyInfo, isCustomComponentTag) {
|
|
|
if (propertyInfo !== null) {
|
|
|
return propertyInfo.type === RESERVED;
|
|
|
}
|
|
|
|
|
|
if (isCustomComponentTag) {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
if (name.length > 2 && (name[0] === 'o' || name[0] === 'O') && (name[1] === 'n' || name[1] === 'N')) {
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
return false;
|
|
|
}
|
|
|
function shouldRemoveAttributeWithWarning(name, value, propertyInfo, isCustomComponentTag) {
|
|
|
if (propertyInfo !== null && propertyInfo.type === RESERVED) {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
switch (typeof value) {
|
|
|
case 'function': // $FlowIssue symbol is perfectly valid here
|
|
|
|
|
|
case 'symbol':
|
|
|
// eslint-disable-line
|
|
|
return true;
|
|
|
|
|
|
case 'boolean':
|
|
|
{
|
|
|
if (isCustomComponentTag) {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
if (propertyInfo !== null) {
|
|
|
return !propertyInfo.acceptsBooleans;
|
|
|
} else {
|
|
|
var prefix = name.toLowerCase().slice(0, 5);
|
|
|
return prefix !== 'data-' && prefix !== 'aria-';
|
|
|
}
|
|
|
}
|
|
|
|
|
|
default:
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
function shouldRemoveAttribute(name, value, propertyInfo, isCustomComponentTag) {
|
|
|
if (value === null || typeof value === 'undefined') {
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
if (shouldRemoveAttributeWithWarning(name, value, propertyInfo, isCustomComponentTag)) {
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
if (isCustomComponentTag) {
|
|
|
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
if (propertyInfo !== null) {
|
|
|
|
|
|
switch (propertyInfo.type) {
|
|
|
case BOOLEAN:
|
|
|
return !value;
|
|
|
|
|
|
case OVERLOADED_BOOLEAN:
|
|
|
return value === false;
|
|
|
|
|
|
case NUMERIC:
|
|
|
return isNaN(value);
|
|
|
|
|
|
case POSITIVE_NUMERIC:
|
|
|
return isNaN(value) || value < 1;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return false;
|
|
|
}
|
|
|
function getPropertyInfo(name) {
|
|
|
return properties.hasOwnProperty(name) ? properties[name] : null;
|
|
|
}
|
|
|
|
|
|
function PropertyInfoRecord(name, type, mustUseProperty, attributeName, attributeNamespace, sanitizeURL, removeEmptyString) {
|
|
|
this.acceptsBooleans = type === BOOLEANISH_STRING || type === BOOLEAN || type === OVERLOADED_BOOLEAN;
|
|
|
this.attributeName = attributeName;
|
|
|
this.attributeNamespace = attributeNamespace;
|
|
|
this.mustUseProperty = mustUseProperty;
|
|
|
this.propertyName = name;
|
|
|
this.type = type;
|
|
|
this.sanitizeURL = sanitizeURL;
|
|
|
this.removeEmptyString = removeEmptyString;
|
|
|
} // When adding attributes to this list, be sure to also add them to
|
|
|
// the `possibleStandardNames` module to ensure casing and incorrect
|
|
|
// name warnings.
|
|
|
|
|
|
|
|
|
var properties = {}; // These props are reserved by React. They shouldn't be written to the DOM.
|
|
|
|
|
|
var reservedProps = ['children', 'dangerouslySetInnerHTML', // TODO: This prevents the assignment of defaultValue to regular
|
|
|
// elements (not just inputs). Now that ReactDOMInput assigns to the
|
|
|
// defaultValue property -- do we need this?
|
|
|
'defaultValue', 'defaultChecked', 'innerHTML', 'suppressContentEditableWarning', 'suppressHydrationWarning', 'style'];
|
|
|
|
|
|
reservedProps.forEach(function (name) {
|
|
|
properties[name] = new PropertyInfoRecord(name, RESERVED, false, // mustUseProperty
|
|
|
name, // attributeName
|
|
|
null, // attributeNamespace
|
|
|
false, // sanitizeURL
|
|
|
false);
|
|
|
}); // A few React string attributes have a different name.
|
|
|
// This is a mapping from React prop names to the attribute names.
|
|
|
|
|
|
[['acceptCharset', 'accept-charset'], ['className', 'class'], ['htmlFor', 'for'], ['httpEquiv', 'http-equiv']].forEach(function (_ref) {
|
|
|
var name = _ref[0],
|
|
|
attributeName = _ref[1];
|
|
|
properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty
|
|
|
attributeName, // attributeName
|
|
|
null, // attributeNamespace
|
|
|
false, // sanitizeURL
|
|
|
false);
|
|
|
}); // These are "enumerated" HTML attributes that accept "true" and "false".
|
|
|
// In React, we let users pass `true` and `false` even though technically
|
|
|
// these aren't boolean attributes (they are coerced to strings).
|
|
|
|
|
|
['contentEditable', 'draggable', 'spellCheck', 'value'].forEach(function (name) {
|
|
|
properties[name] = new PropertyInfoRecord(name, BOOLEANISH_STRING, false, // mustUseProperty
|
|
|
name.toLowerCase(), // attributeName
|
|
|
null, // attributeNamespace
|
|
|
false, // sanitizeURL
|
|
|
false);
|
|
|
}); // These are "enumerated" SVG attributes that accept "true" and "false".
|
|
|
// In React, we let users pass `true` and `false` even though technically
|
|
|
// these aren't boolean attributes (they are coerced to strings).
|
|
|
// Since these are SVG attributes, their attribute names are case-sensitive.
|
|
|
|
|
|
['autoReverse', 'externalResourcesRequired', 'focusable', 'preserveAlpha'].forEach(function (name) {
|
|
|
properties[name] = new PropertyInfoRecord(name, BOOLEANISH_STRING, false, // mustUseProperty
|
|
|
name, // attributeName
|
|
|
null, // attributeNamespace
|
|
|
false, // sanitizeURL
|
|
|
false);
|
|
|
}); // These are HTML boolean attributes.
|
|
|
|
|
|
['allowFullScreen', 'async', // Note: there is a special case that prevents it from being written to the DOM
|
|
|
// on the client side because the browsers are inconsistent. Instead we call focus().
|
|
|
'autoFocus', 'autoPlay', 'controls', 'default', 'defer', 'disabled', 'disablePictureInPicture', 'disableRemotePlayback', 'formNoValidate', 'hidden', 'loop', 'noModule', 'noValidate', 'open', 'playsInline', 'readOnly', 'required', 'reversed', 'scoped', 'seamless', // Microdata
|
|
|
'itemScope'].forEach(function (name) {
|
|
|
properties[name] = new PropertyInfoRecord(name, BOOLEAN, false, // mustUseProperty
|
|
|
name.toLowerCase(), // attributeName
|
|
|
null, // attributeNamespace
|
|
|
false, // sanitizeURL
|
|
|
false);
|
|
|
}); // These are the few React props that we set as DOM properties
|
|
|
// rather than attributes. These are all booleans.
|
|
|
|
|
|
['checked', // Note: `option.selected` is not updated if `select.multiple` is
|
|
|
// disabled with `removeAttribute`. We have special logic for handling this.
|
|
|
'multiple', 'muted', 'selected' // NOTE: if you add a camelCased prop to this list,
|
|
|
// you'll need to set attributeName to name.toLowerCase()
|
|
|
// instead in the assignment below.
|
|
|
].forEach(function (name) {
|
|
|
properties[name] = new PropertyInfoRecord(name, BOOLEAN, true, // mustUseProperty
|
|
|
name, // attributeName
|
|
|
null, // attributeNamespace
|
|
|
false, // sanitizeURL
|
|
|
false);
|
|
|
}); // These are HTML attributes that are "overloaded booleans": they behave like
|
|
|
// booleans, but can also accept a string value.
|
|
|
|
|
|
['capture', 'download' // NOTE: if you add a camelCased prop to this list,
|
|
|
// you'll need to set attributeName to name.toLowerCase()
|
|
|
// instead in the assignment below.
|
|
|
].forEach(function (name) {
|
|
|
properties[name] = new PropertyInfoRecord(name, OVERLOADED_BOOLEAN, false, // mustUseProperty
|
|
|
name, // attributeName
|
|
|
null, // attributeNamespace
|
|
|
false, // sanitizeURL
|
|
|
false);
|
|
|
}); // These are HTML attributes that must be positive numbers.
|
|
|
|
|
|
['cols', 'rows', 'size', 'span' // NOTE: if you add a camelCased prop to this list,
|
|
|
// you'll need to set attributeName to name.toLowerCase()
|
|
|
// instead in the assignment below.
|
|
|
].forEach(function (name) {
|
|
|
properties[name] = new PropertyInfoRecord(name, POSITIVE_NUMERIC, false, // mustUseProperty
|
|
|
name, // attributeName
|
|
|
null, // attributeNamespace
|
|
|
false, // sanitizeURL
|
|
|
false);
|
|
|
}); // These are HTML attributes that must be numbers.
|
|
|
|
|
|
['rowSpan', 'start'].forEach(function (name) {
|
|
|
properties[name] = new PropertyInfoRecord(name, NUMERIC, false, // mustUseProperty
|
|
|
name.toLowerCase(), // attributeName
|
|
|
null, // attributeNamespace
|
|
|
false, // sanitizeURL
|
|
|
false);
|
|
|
});
|
|
|
var CAMELIZE = /[\-\:]([a-z])/g;
|
|
|
|
|
|
var capitalize = function (token) {
|
|
|
return token[1].toUpperCase();
|
|
|
}; // This is a list of all SVG attributes that need special casing, namespacing,
|
|
|
// or boolean value assignment. Regular attributes that just accept strings
|
|
|
// and have the same names are omitted, just like in the HTML attribute filter.
|
|
|
// Some of these attributes can be hard to find. This list was created by
|
|
|
// scraping the MDN documentation.
|
|
|
|
|
|
|
|
|
['accent-height', 'alignment-baseline', 'arabic-form', 'baseline-shift', 'cap-height', 'clip-path', 'clip-rule', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'dominant-baseline', 'enable-background', 'fill-opacity', 'fill-rule', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'glyph-name', 'glyph-orientation-horizontal', 'glyph-orientation-vertical', 'horiz-adv-x', 'horiz-origin-x', 'image-rendering', 'letter-spacing', 'lighting-color', 'marker-end', 'marker-mid', 'marker-start', 'overline-position', 'overline-thickness', 'paint-order', 'panose-1', 'pointer-events', 'rendering-intent', 'shape-rendering', 'stop-color', 'stop-opacity', 'strikethrough-position', 'strikethrough-thickness', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke-width', 'text-anchor', 'text-decoration', 'text-rendering', 'underline-position', 'underline-thickness', 'unicode-bidi', 'unicode-range', 'units-per-em', 'v-alphabetic', 'v-hanging', 'v-ideographic', 'v-mathematical', 'vector-effect', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'word-spacing', 'writing-mode', 'xmlns:xlink', 'x-height' // NOTE: if you add a camelCased prop to this list,
|
|
|
// you'll need to set attributeName to name.toLowerCase()
|
|
|
// instead in the assignment below.
|
|
|
].forEach(function (attributeName) {
|
|
|
var name = attributeName.replace(CAMELIZE, capitalize);
|
|
|
properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty
|
|
|
attributeName, null, // attributeNamespace
|
|
|
false, // sanitizeURL
|
|
|
false);
|
|
|
}); // String SVG attributes with the xlink namespace.
|
|
|
|
|
|
['xlink:actuate', 'xlink:arcrole', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type' // NOTE: if you add a camelCased prop to this list,
|
|
|
// you'll need to set attributeName to name.toLowerCase()
|
|
|
// instead in the assignment below.
|
|
|
].forEach(function (attributeName) {
|
|
|
var name = attributeName.replace(CAMELIZE, capitalize);
|
|
|
properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty
|
|
|
attributeName, 'http://www.w3.org/1999/xlink', false, // sanitizeURL
|
|
|
false);
|
|
|
}); // String SVG attributes with the xml namespace.
|
|
|
|
|
|
['xml:base', 'xml:lang', 'xml:space' // NOTE: if you add a camelCased prop to this list,
|
|
|
// you'll need to set attributeName to name.toLowerCase()
|
|
|
// instead in the assignment below.
|
|
|
].forEach(function (attributeName) {
|
|
|
var name = attributeName.replace(CAMELIZE, capitalize);
|
|
|
properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty
|
|
|
attributeName, 'http://www.w3.org/XML/1998/namespace', false, // sanitizeURL
|
|
|
false);
|
|
|
}); // These attribute exists both in HTML and SVG.
|
|
|
// The attribute name is case-sensitive in SVG so we can't just use
|
|
|
// the React name like we do for attributes that exist only in HTML.
|
|
|
|
|
|
['tabIndex', 'crossOrigin'].forEach(function (attributeName) {
|
|
|
properties[attributeName] = new PropertyInfoRecord(attributeName, STRING, false, // mustUseProperty
|
|
|
attributeName.toLowerCase(), // attributeName
|
|
|
null, // attributeNamespace
|
|
|
false, // sanitizeURL
|
|
|
false);
|
|
|
}); // These attributes accept URLs. These must not allow javascript: URLS.
|
|
|
// These will also need to accept Trusted Types object in the future.
|
|
|
|
|
|
var xlinkHref = 'xlinkHref';
|
|
|
properties[xlinkHref] = new PropertyInfoRecord('xlinkHref', STRING, false, // mustUseProperty
|
|
|
'xlink:href', 'http://www.w3.org/1999/xlink', true, // sanitizeURL
|
|
|
false);
|
|
|
['src', 'href', 'action', 'formAction'].forEach(function (attributeName) {
|
|
|
properties[attributeName] = new PropertyInfoRecord(attributeName, STRING, false, // mustUseProperty
|
|
|
attributeName.toLowerCase(), // attributeName
|
|
|
null, // attributeNamespace
|
|
|
true, // sanitizeURL
|
|
|
true);
|
|
|
});
|
|
|
|
|
|
// and any newline or tab are filtered out as if they're not part of the URL.
|
|
|
// https://url.spec.whatwg.org/#url-parsing
|
|
|
// Tab or newline are defined as \r\n\t:
|
|
|
// https://infra.spec.whatwg.org/#ascii-tab-or-newline
|
|
|
// A C0 control is a code point in the range \u0000 NULL to \u001F
|
|
|
// INFORMATION SEPARATOR ONE, inclusive:
|
|
|
// https://infra.spec.whatwg.org/#c0-control-or-space
|
|
|
|
|
|
/* eslint-disable max-len */
|
|
|
|
|
|
var isJavaScriptProtocol = /^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*\:/i;
|
|
|
var didWarn = false;
|
|
|
|
|
|
function sanitizeURL(url) {
|
|
|
{
|
|
|
if (!didWarn && isJavaScriptProtocol.test(url)) {
|
|
|
didWarn = true;
|
|
|
|
|
|
error('A future version of React will block javascript: URLs as a security precaution. ' + 'Use event handlers instead if you can. If you need to generate unsafe HTML try ' + 'using dangerouslySetInnerHTML instead. React was passed %s.', JSON.stringify(url));
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Get the value for a property on a node. Only used in DEV for SSR validation.
|
|
|
* The "expected" argument is used as a hint of what the expected value is.
|
|
|
* Some properties have multiple equivalent values.
|
|
|
*/
|
|
|
function getValueForProperty(node, name, expected, propertyInfo) {
|
|
|
{
|
|
|
if (propertyInfo.mustUseProperty) {
|
|
|
var propertyName = propertyInfo.propertyName;
|
|
|
return node[propertyName];
|
|
|
} else {
|
|
|
// This check protects multiple uses of `expected`, which is why the
|
|
|
// react-internal/safe-string-coercion rule is disabled in several spots
|
|
|
// below.
|
|
|
{
|
|
|
checkAttributeStringCoercion(expected, name);
|
|
|
}
|
|
|
|
|
|
if ( propertyInfo.sanitizeURL) {
|
|
|
// If we haven't fully disabled javascript: URLs, and if
|
|
|
// the hydration is successful of a javascript: URL, we
|
|
|
// still want to warn on the client.
|
|
|
// eslint-disable-next-line react-internal/safe-string-coercion
|
|
|
sanitizeURL('' + expected);
|
|
|
}
|
|
|
|
|
|
var attributeName = propertyInfo.attributeName;
|
|
|
var stringValue = null;
|
|
|
|
|
|
if (propertyInfo.type === OVERLOADED_BOOLEAN) {
|
|
|
if (node.hasAttribute(attributeName)) {
|
|
|
var value = node.getAttribute(attributeName);
|
|
|
|
|
|
if (value === '') {
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
if (shouldRemoveAttribute(name, expected, propertyInfo, false)) {
|
|
|
return value;
|
|
|
} // eslint-disable-next-line react-internal/safe-string-coercion
|
|
|
|
|
|
|
|
|
if (value === '' + expected) {
|
|
|
return expected;
|
|
|
}
|
|
|
|
|
|
return value;
|
|
|
}
|
|
|
} else if (node.hasAttribute(attributeName)) {
|
|
|
if (shouldRemoveAttribute(name, expected, propertyInfo, false)) {
|
|
|
// We had an attribute but shouldn't have had one, so read it
|
|
|
// for the error message.
|
|
|
return node.getAttribute(attributeName);
|
|
|
}
|
|
|
|
|
|
if (propertyInfo.type === BOOLEAN) {
|
|
|
// If this was a boolean, it doesn't matter what the value is
|
|
|
// the fact that we have it is the same as the expected.
|
|
|
return expected;
|
|
|
} // Even if this property uses a namespace we use getAttribute
|
|
|
// because we assume its namespaced name is the same as our config.
|
|
|
// To use getAttributeNS we need the local name which we don't have
|
|
|
// in our config atm.
|
|
|
|
|
|
|
|
|
stringValue = node.getAttribute(attributeName);
|
|
|
}
|
|
|
|
|
|
if (shouldRemoveAttribute(name, expected, propertyInfo, false)) {
|
|
|
return stringValue === null ? expected : stringValue; // eslint-disable-next-line react-internal/safe-string-coercion
|
|
|
} else if (stringValue === '' + expected) {
|
|
|
return expected;
|
|
|
} else {
|
|
|
return stringValue;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
/**
|
|
|
* Get the value for a attribute on a node. Only used in DEV for SSR validation.
|
|
|
* The third argument is used as a hint of what the expected value is. Some
|
|
|
* attributes have multiple equivalent values.
|
|
|
*/
|
|
|
|
|
|
function getValueForAttribute(node, name, expected, isCustomComponentTag) {
|
|
|
{
|
|
|
if (!isAttributeNameSafe(name)) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (!node.hasAttribute(name)) {
|
|
|
return expected === undefined ? undefined : null;
|
|
|
}
|
|
|
|
|
|
var value = node.getAttribute(name);
|
|
|
|
|
|
{
|
|
|
checkAttributeStringCoercion(expected, name);
|
|
|
}
|
|
|
|
|
|
if (value === '' + expected) {
|
|
|
return expected;
|
|
|
}
|
|
|
|
|
|
return value;
|
|
|
}
|
|
|
}
|
|
|
/**
|
|
|
* Sets the value for a property on a node.
|
|
|
*
|
|
|
* @param {DOMElement} node
|
|
|
* @param {string} name
|
|
|
* @param {*} value
|
|
|
*/
|
|
|
|
|
|
function setValueForProperty(node, name, value, isCustomComponentTag) {
|
|
|
var propertyInfo = getPropertyInfo(name);
|
|
|
|
|
|
if (shouldIgnoreAttribute(name, propertyInfo, isCustomComponentTag)) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (shouldRemoveAttribute(name, value, propertyInfo, isCustomComponentTag)) {
|
|
|
value = null;
|
|
|
}
|
|
|
|
|
|
|
|
|
if (isCustomComponentTag || propertyInfo === null) {
|
|
|
if (isAttributeNameSafe(name)) {
|
|
|
var _attributeName = name;
|
|
|
|
|
|
if (value === null) {
|
|
|
node.removeAttribute(_attributeName);
|
|
|
} else {
|
|
|
{
|
|
|
checkAttributeStringCoercion(value, name);
|
|
|
}
|
|
|
|
|
|
node.setAttribute(_attributeName, '' + value);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
var mustUseProperty = propertyInfo.mustUseProperty;
|
|
|
|
|
|
if (mustUseProperty) {
|
|
|
var propertyName = propertyInfo.propertyName;
|
|
|
|
|
|
if (value === null) {
|
|
|
var type = propertyInfo.type;
|
|
|
node[propertyName] = type === BOOLEAN ? false : '';
|
|
|
} else {
|
|
|
// Contrary to `setAttribute`, object properties are properly
|
|
|
// `toString`ed by IE8/9.
|
|
|
node[propertyName] = value;
|
|
|
}
|
|
|
|
|
|
return;
|
|
|
} // The rest are treated as attributes with special cases.
|
|
|
|
|
|
|
|
|
var attributeName = propertyInfo.attributeName,
|
|
|
attributeNamespace = propertyInfo.attributeNamespace;
|
|
|
|
|
|
if (value === null) {
|
|
|
node.removeAttribute(attributeName);
|
|
|
} else {
|
|
|
var _type = propertyInfo.type;
|
|
|
var attributeValue;
|
|
|
|
|
|
if (_type === BOOLEAN || _type === OVERLOADED_BOOLEAN && value === true) {
|
|
|
// If attribute type is boolean, we know for sure it won't be an execution sink
|
|
|
// and we won't require Trusted Type here.
|
|
|
attributeValue = '';
|
|
|
} else {
|
|
|
// `setAttribute` with objects becomes only `[object]` in IE8/9,
|
|
|
// ('' + value) makes it output the correct toString()-value.
|
|
|
{
|
|
|
{
|
|
|
checkAttributeStringCoercion(value, attributeName);
|
|
|
}
|
|
|
|
|
|
attributeValue = '' + value;
|
|
|
}
|
|
|
|
|
|
if (propertyInfo.sanitizeURL) {
|
|
|
sanitizeURL(attributeValue.toString());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (attributeNamespace) {
|
|
|
node.setAttributeNS(attributeNamespace, attributeName, attributeValue);
|
|
|
} else {
|
|
|
node.setAttribute(attributeName, attributeValue);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// ATTENTION
|
|
|
// When adding new symbols to this file,
|
|
|
// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'
|
|
|
// The Symbol used to tag the ReactElement-like types.
|
|
|
var REACT_ELEMENT_TYPE = Symbol.for('react.element');
|
|
|
var REACT_PORTAL_TYPE = Symbol.for('react.portal');
|
|
|
var REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');
|
|
|
var REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode');
|
|
|
var REACT_PROFILER_TYPE = Symbol.for('react.profiler');
|
|
|
var REACT_PROVIDER_TYPE = Symbol.for('react.provider');
|
|
|
var REACT_CONTEXT_TYPE = Symbol.for('react.context');
|
|
|
var REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');
|
|
|
var REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');
|
|
|
var REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list');
|
|
|
var REACT_MEMO_TYPE = Symbol.for('react.memo');
|
|
|
var REACT_LAZY_TYPE = Symbol.for('react.lazy');
|
|
|
var REACT_SCOPE_TYPE = Symbol.for('react.scope');
|
|
|
var REACT_DEBUG_TRACING_MODE_TYPE = Symbol.for('react.debug_trace_mode');
|
|
|
var REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen');
|
|
|
var REACT_LEGACY_HIDDEN_TYPE = Symbol.for('react.legacy_hidden');
|
|
|
var REACT_CACHE_TYPE = Symbol.for('react.cache');
|
|
|
var REACT_TRACING_MARKER_TYPE = Symbol.for('react.tracing_marker');
|
|
|
var MAYBE_ITERATOR_SYMBOL = Symbol.iterator;
|
|
|
var FAUX_ITERATOR_SYMBOL = '@@iterator';
|
|
|
function getIteratorFn(maybeIterable) {
|
|
|
if (maybeIterable === null || typeof maybeIterable !== 'object') {
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];
|
|
|
|
|
|
if (typeof maybeIterator === 'function') {
|
|
|
return maybeIterator;
|
|
|
}
|
|
|
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
var assign = Object.assign;
|
|
|
|
|
|
// Helpers to patch console.logs to avoid logging during side-effect free
|
|
|
// replaying on render function. This currently only patches the object
|
|
|
// lazily which won't cover if the log function was extracted eagerly.
|
|
|
// We could also eagerly patch the method.
|
|
|
var disabledDepth = 0;
|
|
|
var prevLog;
|
|
|
var prevInfo;
|
|
|
var prevWarn;
|
|
|
var prevError;
|
|
|
var prevGroup;
|
|
|
var prevGroupCollapsed;
|
|
|
var prevGroupEnd;
|
|
|
|
|
|
function disabledLog() {}
|
|
|
|
|
|
disabledLog.__reactDisabledLog = true;
|
|
|
function disableLogs() {
|
|
|
{
|
|
|
if (disabledDepth === 0) {
|
|
|
/* eslint-disable react-internal/no-production-logging */
|
|
|
prevLog = console.log;
|
|
|
prevInfo = console.info;
|
|
|
prevWarn = console.warn;
|
|
|
prevError = console.error;
|
|
|
prevGroup = console.group;
|
|
|
prevGroupCollapsed = console.groupCollapsed;
|
|
|
prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099
|
|
|
|
|
|
var props = {
|
|
|
configurable: true,
|
|
|
enumerable: true,
|
|
|
value: disabledLog,
|
|
|
writable: true
|
|
|
}; // $FlowFixMe Flow thinks console is immutable.
|
|
|
|
|
|
Object.defineProperties(console, {
|
|
|
info: props,
|
|
|
log: props,
|
|
|
warn: props,
|
|
|
error: props,
|
|
|
group: props,
|
|
|
groupCollapsed: props,
|
|
|
groupEnd: props
|
|
|
});
|
|
|
/* eslint-enable react-internal/no-production-logging */
|
|
|
}
|
|
|
|
|
|
disabledDepth++;
|
|
|
}
|
|
|
}
|
|
|
function reenableLogs() {
|
|
|
{
|
|
|
disabledDepth--;
|
|
|
|
|
|
if (disabledDepth === 0) {
|
|
|
/* eslint-disable react-internal/no-production-logging */
|
|
|
var props = {
|
|
|
configurable: true,
|
|
|
enumerable: true,
|
|
|
writable: true
|
|
|
}; // $FlowFixMe Flow thinks console is immutable.
|
|
|
|
|
|
Object.defineProperties(console, {
|
|
|
log: assign({}, props, {
|
|
|
value: prevLog
|
|
|
}),
|
|
|
info: assign({}, props, {
|
|
|
value: prevInfo
|
|
|
}),
|
|
|
warn: assign({}, props, {
|
|
|
value: prevWarn
|
|
|
}),
|
|
|
error: assign({}, props, {
|
|
|
value: prevError
|
|
|
}),
|
|
|
group: assign({}, props, {
|
|
|
value: prevGroup
|
|
|
}),
|
|
|
groupCollapsed: assign({}, props, {
|
|
|
value: prevGroupCollapsed
|
|
|
}),
|
|
|
groupEnd: assign({}, props, {
|
|
|
value: prevGroupEnd
|
|
|
})
|
|
|
});
|
|
|
/* eslint-enable react-internal/no-production-logging */
|
|
|
}
|
|
|
|
|
|
if (disabledDepth < 0) {
|
|
|
error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.');
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;
|
|
|
var prefix;
|
|
|
function describeBuiltInComponentFrame(name, source, ownerFn) {
|
|
|
{
|
|
|
if (prefix === undefined) {
|
|
|
// Extract the VM specific prefix used by each line.
|
|
|
try {
|
|
|
throw Error();
|
|
|
} catch (x) {
|
|
|
var match = x.stack.trim().match(/\n( *(at )?)/);
|
|
|
prefix = match && match[1] || '';
|
|
|
}
|
|
|
} // We use the prefix to ensure our stacks line up with native stack frames.
|
|
|
|
|
|
|
|
|
return '\n' + prefix + name;
|
|
|
}
|
|
|
}
|
|
|
var reentry = false;
|
|
|
var componentFrameCache;
|
|
|
|
|
|
{
|
|
|
var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;
|
|
|
componentFrameCache = new PossiblyWeakMap();
|
|
|
}
|
|
|
|
|
|
function describeNativeComponentFrame(fn, construct) {
|
|
|
// If something asked for a stack inside a fake render, it should get ignored.
|
|
|
if ( !fn || reentry) {
|
|
|
return '';
|
|
|
}
|
|
|
|
|
|
{
|
|
|
var frame = componentFrameCache.get(fn);
|
|
|
|
|
|
if (frame !== undefined) {
|
|
|
return frame;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var control;
|
|
|
reentry = true;
|
|
|
var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined.
|
|
|
|
|
|
Error.prepareStackTrace = undefined;
|
|
|
var previousDispatcher;
|
|
|
|
|
|
{
|
|
|
previousDispatcher = ReactCurrentDispatcher.current; // Set the dispatcher in DEV because this might be call in the render function
|
|
|
// for warnings.
|
|
|
|
|
|
ReactCurrentDispatcher.current = null;
|
|
|
disableLogs();
|
|
|
}
|
|
|
|
|
|
try {
|
|
|
// This should throw.
|
|
|
if (construct) {
|
|
|
// Something should be setting the props in the constructor.
|
|
|
var Fake = function () {
|
|
|
throw Error();
|
|
|
}; // $FlowFixMe
|
|
|
|
|
|
|
|
|
Object.defineProperty(Fake.prototype, 'props', {
|
|
|
set: function () {
|
|
|
// We use a throwing setter instead of frozen or non-writable props
|
|
|
// because that won't throw in a non-strict mode function.
|
|
|
throw Error();
|
|
|
}
|
|
|
});
|
|
|
|
|
|
if (typeof Reflect === 'object' && Reflect.construct) {
|
|
|
// We construct a different control for this case to include any extra
|
|
|
// frames added by the construct call.
|
|
|
try {
|
|
|
Reflect.construct(Fake, []);
|
|
|
} catch (x) {
|
|
|
control = x;
|
|
|
}
|
|
|
|
|
|
Reflect.construct(fn, [], Fake);
|
|
|
} else {
|
|
|
try {
|
|
|
Fake.call();
|
|
|
} catch (x) {
|
|
|
control = x;
|
|
|
}
|
|
|
|
|
|
fn.call(Fake.prototype);
|
|
|
}
|
|
|
} else {
|
|
|
try {
|
|
|
throw Error();
|
|
|
} catch (x) {
|
|
|
control = x;
|
|
|
}
|
|
|
|
|
|
fn();
|
|
|
}
|
|
|
} catch (sample) {
|
|
|
// This is inlined manually because closure doesn't do it for us.
|
|
|
if (sample && control && typeof sample.stack === 'string') {
|
|
|
// This extracts the first frame from the sample that isn't also in the control.
|
|
|
// Skipping one frame that we assume is the frame that calls the two.
|
|
|
var sampleLines = sample.stack.split('\n');
|
|
|
var controlLines = control.stack.split('\n');
|
|
|
var s = sampleLines.length - 1;
|
|
|
var c = controlLines.length - 1;
|
|
|
|
|
|
while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {
|
|
|
// We expect at least one stack frame to be shared.
|
|
|
// Typically this will be the root most one. However, stack frames may be
|
|
|
// cut off due to maximum stack limits. In this case, one maybe cut off
|
|
|
// earlier than the other. We assume that the sample is longer or the same
|
|
|
// and there for cut off earlier. So we should find the root most frame in
|
|
|
// the sample somewhere in the control.
|
|
|
c--;
|
|
|
}
|
|
|
|
|
|
for (; s >= 1 && c >= 0; s--, c--) {
|
|
|
// Next we find the first one that isn't the same which should be the
|
|
|
// frame that called our sample function and the control.
|
|
|
if (sampleLines[s] !== controlLines[c]) {
|
|
|
// In V8, the first line is describing the message but other VMs don't.
|
|
|
// If we're about to return the first line, and the control is also on the same
|
|
|
// line, that's a pretty good indicator that our sample threw at same line as
|
|
|
// the control. I.e. before we entered the sample frame. So we ignore this result.
|
|
|
// This can happen if you passed a class to function component, or non-function.
|
|
|
if (s !== 1 || c !== 1) {
|
|
|
do {
|
|
|
s--;
|
|
|
c--; // We may still have similar intermediate frames from the construct call.
|
|
|
// The next one that isn't the same should be our match though.
|
|
|
|
|
|
if (c < 0 || sampleLines[s] !== controlLines[c]) {
|
|
|
// V8 adds a "new" prefix for native classes. Let's remove it to make it prettier.
|
|
|
var _frame = '\n' + sampleLines[s].replace(' at new ', ' at '); // If our component frame is labeled "<anonymous>"
|
|
|
// but we have a user-provided "displayName"
|
|
|
// splice it in to make the stack more readable.
|
|
|
|
|
|
|
|
|
if (fn.displayName && _frame.includes('<anonymous>')) {
|
|
|
_frame = _frame.replace('<anonymous>', fn.displayName);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
if (typeof fn === 'function') {
|
|
|
componentFrameCache.set(fn, _frame);
|
|
|
}
|
|
|
} // Return the line we found.
|
|
|
|
|
|
|
|
|
return _frame;
|
|
|
}
|
|
|
} while (s >= 1 && c >= 0);
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
} finally {
|
|
|
reentry = false;
|
|
|
|
|
|
{
|
|
|
ReactCurrentDispatcher.current = previousDispatcher;
|
|
|
reenableLogs();
|
|
|
}
|
|
|
|
|
|
Error.prepareStackTrace = previousPrepareStackTrace;
|
|
|
} // Fallback to just using the name if we couldn't make it throw.
|
|
|
|
|
|
|
|
|
var name = fn ? fn.displayName || fn.name : '';
|
|
|
var syntheticFrame = name ? describeBuiltInComponentFrame(name) : '';
|
|
|
|
|
|
{
|
|
|
if (typeof fn === 'function') {
|
|
|
componentFrameCache.set(fn, syntheticFrame);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return syntheticFrame;
|
|
|
}
|
|
|
|
|
|
function describeClassComponentFrame(ctor, source, ownerFn) {
|
|
|
{
|
|
|
return describeNativeComponentFrame(ctor, true);
|
|
|
}
|
|
|
}
|
|
|
function describeFunctionComponentFrame(fn, source, ownerFn) {
|
|
|
{
|
|
|
return describeNativeComponentFrame(fn, false);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function shouldConstruct(Component) {
|
|
|
var prototype = Component.prototype;
|
|
|
return !!(prototype && prototype.isReactComponent);
|
|
|
}
|
|
|
|
|
|
function describeUnknownElementTypeFrameInDEV(type, source, ownerFn) {
|
|
|
|
|
|
if (type == null) {
|
|
|
return '';
|
|
|
}
|
|
|
|
|
|
if (typeof type === 'function') {
|
|
|
{
|
|
|
return describeNativeComponentFrame(type, shouldConstruct(type));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (typeof type === 'string') {
|
|
|
return describeBuiltInComponentFrame(type);
|
|
|
}
|
|
|
|
|
|
switch (type) {
|
|
|
case REACT_SUSPENSE_TYPE:
|
|
|
return describeBuiltInComponentFrame('Suspense');
|
|
|
|
|
|
case REACT_SUSPENSE_LIST_TYPE:
|
|
|
return describeBuiltInComponentFrame('SuspenseList');
|
|
|
}
|
|
|
|
|
|
if (typeof type === 'object') {
|
|
|
switch (type.$$typeof) {
|
|
|
case REACT_FORWARD_REF_TYPE:
|
|
|
return describeFunctionComponentFrame(type.render);
|
|
|
|
|
|
case REACT_MEMO_TYPE:
|
|
|
// Memo may contain any component type so we recursively resolve it.
|
|
|
return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn);
|
|
|
|
|
|
case REACT_LAZY_TYPE:
|
|
|
{
|
|
|
var lazyComponent = type;
|
|
|
var payload = lazyComponent._payload;
|
|
|
var init = lazyComponent._init;
|
|
|
|
|
|
try {
|
|
|
// Lazy may contain any component type so we recursively resolve it.
|
|
|
return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn);
|
|
|
} catch (x) {}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return '';
|
|
|
}
|
|
|
|
|
|
function describeFiber(fiber) {
|
|
|
var owner = fiber._debugOwner ? fiber._debugOwner.type : null ;
|
|
|
var source = fiber._debugSource ;
|
|
|
|
|
|
switch (fiber.tag) {
|
|
|
case HostComponent:
|
|
|
return describeBuiltInComponentFrame(fiber.type);
|
|
|
|
|
|
case LazyComponent:
|
|
|
return describeBuiltInComponentFrame('Lazy');
|
|
|
|
|
|
case SuspenseComponent:
|
|
|
return describeBuiltInComponentFrame('Suspense');
|
|
|
|
|
|
case SuspenseListComponent:
|
|
|
return describeBuiltInComponentFrame('SuspenseList');
|
|
|
|
|
|
case FunctionComponent:
|
|
|
case IndeterminateComponent:
|
|
|
case SimpleMemoComponent:
|
|
|
return describeFunctionComponentFrame(fiber.type);
|
|
|
|
|
|
case ForwardRef:
|
|
|
return describeFunctionComponentFrame(fiber.type.render);
|
|
|
|
|
|
case ClassComponent:
|
|
|
return describeClassComponentFrame(fiber.type);
|
|
|
|
|
|
default:
|
|
|
return '';
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function getStackByFiberInDevAndProd(workInProgress) {
|
|
|
try {
|
|
|
var info = '';
|
|
|
var node = workInProgress;
|
|
|
|
|
|
do {
|
|
|
info += describeFiber(node);
|
|
|
node = node.return;
|
|
|
} while (node);
|
|
|
|
|
|
return info;
|
|
|
} catch (x) {
|
|
|
return '\nError generating stack: ' + x.message + '\n' + x.stack;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function getWrappedName(outerType, innerType, wrapperName) {
|
|
|
var displayName = outerType.displayName;
|
|
|
|
|
|
if (displayName) {
|
|
|
return displayName;
|
|
|
}
|
|
|
|
|
|
var functionName = innerType.displayName || innerType.name || '';
|
|
|
return functionName !== '' ? wrapperName + "(" + functionName + ")" : wrapperName;
|
|
|
} // Keep in sync with react-reconciler/getComponentNameFromFiber
|
|
|
|
|
|
|
|
|
function getContextName(type) {
|
|
|
return type.displayName || 'Context';
|
|
|
} // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead.
|
|
|
|
|
|
|
|
|
function getComponentNameFromType(type) {
|
|
|
if (type == null) {
|
|
|
// Host root, text node or just invalid type.
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
{
|
|
|
if (typeof type.tag === 'number') {
|
|
|
error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (typeof type === 'function') {
|
|
|
return type.displayName || type.name || null;
|
|
|
}
|
|
|
|
|
|
if (typeof type === 'string') {
|
|
|
return type;
|
|
|
}
|
|
|
|
|
|
switch (type) {
|
|
|
case REACT_FRAGMENT_TYPE:
|
|
|
return 'Fragment';
|
|
|
|
|
|
case REACT_PORTAL_TYPE:
|
|
|
return 'Portal';
|
|
|
|
|
|
case REACT_PROFILER_TYPE:
|
|
|
return 'Profiler';
|
|
|
|
|
|
case REACT_STRICT_MODE_TYPE:
|
|
|
return 'StrictMode';
|
|
|
|
|
|
case REACT_SUSPENSE_TYPE:
|
|
|
return 'Suspense';
|
|
|
|
|
|
case REACT_SUSPENSE_LIST_TYPE:
|
|
|
return 'SuspenseList';
|
|
|
|
|
|
}
|
|
|
|
|
|
if (typeof type === 'object') {
|
|
|
switch (type.$$typeof) {
|
|
|
case REACT_CONTEXT_TYPE:
|
|
|
var context = type;
|
|
|
return getContextName(context) + '.Consumer';
|
|
|
|
|
|
case REACT_PROVIDER_TYPE:
|
|
|
var provider = type;
|
|
|
return getContextName(provider._context) + '.Provider';
|
|
|
|
|
|
case REACT_FORWARD_REF_TYPE:
|
|
|
return getWrappedName(type, type.render, 'ForwardRef');
|
|
|
|
|
|
case REACT_MEMO_TYPE:
|
|
|
var outerName = type.displayName || null;
|
|
|
|
|
|
if (outerName !== null) {
|
|
|
return outerName;
|
|
|
}
|
|
|
|
|
|
return getComponentNameFromType(type.type) || 'Memo';
|
|
|
|
|
|
case REACT_LAZY_TYPE:
|
|
|
{
|
|
|
var lazyComponent = type;
|
|
|
var payload = lazyComponent._payload;
|
|
|
var init = lazyComponent._init;
|
|
|
|
|
|
try {
|
|
|
return getComponentNameFromType(init(payload));
|
|
|
} catch (x) {
|
|
|
return null;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// eslint-disable-next-line no-fallthrough
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
function getWrappedName$1(outerType, innerType, wrapperName) {
|
|
|
var functionName = innerType.displayName || innerType.name || '';
|
|
|
return outerType.displayName || (functionName !== '' ? wrapperName + "(" + functionName + ")" : wrapperName);
|
|
|
} // Keep in sync with shared/getComponentNameFromType
|
|
|
|
|
|
|
|
|
function getContextName$1(type) {
|
|
|
return type.displayName || 'Context';
|
|
|
}
|
|
|
|
|
|
function getComponentNameFromFiber(fiber) {
|
|
|
var tag = fiber.tag,
|
|
|
type = fiber.type;
|
|
|
|
|
|
switch (tag) {
|
|
|
case CacheComponent:
|
|
|
return 'Cache';
|
|
|
|
|
|
case ContextConsumer:
|
|
|
var context = type;
|
|
|
return getContextName$1(context) + '.Consumer';
|
|
|
|
|
|
case ContextProvider:
|
|
|
var provider = type;
|
|
|
return getContextName$1(provider._context) + '.Provider';
|
|
|
|
|
|
case DehydratedFragment:
|
|
|
return 'DehydratedFragment';
|
|
|
|
|
|
case ForwardRef:
|
|
|
return getWrappedName$1(type, type.render, 'ForwardRef');
|
|
|
|
|
|
case Fragment:
|
|
|
return 'Fragment';
|
|
|
|
|
|
case HostComponent:
|
|
|
// Host component type is the display name (e.g. "div", "View")
|
|
|
return type;
|
|
|
|
|
|
case HostPortal:
|
|
|
return 'Portal';
|
|
|
|
|
|
case HostRoot:
|
|
|
return 'Root';
|
|
|
|
|
|
case HostText:
|
|
|
return 'Text';
|
|
|
|
|
|
case LazyComponent:
|
|
|
// Name comes from the type in this case; we don't have a tag.
|
|
|
return getComponentNameFromType(type);
|
|
|
|
|
|
case Mode:
|
|
|
if (type === REACT_STRICT_MODE_TYPE) {
|
|
|
// Don't be less specific than shared/getComponentNameFromType
|
|
|
return 'StrictMode';
|
|
|
}
|
|
|
|
|
|
return 'Mode';
|
|
|
|
|
|
case OffscreenComponent:
|
|
|
return 'Offscreen';
|
|
|
|
|
|
case Profiler:
|
|
|
return 'Profiler';
|
|
|
|
|
|
case ScopeComponent:
|
|
|
return 'Scope';
|
|
|
|
|
|
case SuspenseComponent:
|
|
|
return 'Suspense';
|
|
|
|
|
|
case SuspenseListComponent:
|
|
|
return 'SuspenseList';
|
|
|
|
|
|
case TracingMarkerComponent:
|
|
|
return 'TracingMarker';
|
|
|
// The display name for this tags come from the user-provided type:
|
|
|
|
|
|
case ClassComponent:
|
|
|
case FunctionComponent:
|
|
|
case IncompleteClassComponent:
|
|
|
case IndeterminateComponent:
|
|
|
case MemoComponent:
|
|
|
case SimpleMemoComponent:
|
|
|
if (typeof type === 'function') {
|
|
|
return type.displayName || type.name || null;
|
|
|
}
|
|
|
|
|
|
if (typeof type === 'string') {
|
|
|
return type;
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;
|
|
|
var current = null;
|
|
|
var isRendering = false;
|
|
|
function getCurrentFiberOwnerNameInDevOrNull() {
|
|
|
{
|
|
|
if (current === null) {
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
var owner = current._debugOwner;
|
|
|
|
|
|
if (owner !== null && typeof owner !== 'undefined') {
|
|
|
return getComponentNameFromFiber(owner);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
function getCurrentFiberStackInDev() {
|
|
|
{
|
|
|
if (current === null) {
|
|
|
return '';
|
|
|
} // Safe because if current fiber exists, we are reconciling,
|
|
|
// and it is guaranteed to be the work-in-progress version.
|
|
|
|
|
|
|
|
|
return getStackByFiberInDevAndProd(current);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function resetCurrentFiber() {
|
|
|
{
|
|
|
ReactDebugCurrentFrame.getCurrentStack = null;
|
|
|
current = null;
|
|
|
isRendering = false;
|
|
|
}
|
|
|
}
|
|
|
function setCurrentFiber(fiber) {
|
|
|
{
|
|
|
ReactDebugCurrentFrame.getCurrentStack = fiber === null ? null : getCurrentFiberStackInDev;
|
|
|
current = fiber;
|
|
|
isRendering = false;
|
|
|
}
|
|
|
}
|
|
|
function getCurrentFiber() {
|
|
|
{
|
|
|
return current;
|
|
|
}
|
|
|
}
|
|
|
function setIsRendering(rendering) {
|
|
|
{
|
|
|
isRendering = rendering;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// Flow does not allow string concatenation of most non-string types. To work
|
|
|
// around this limitation, we use an opaque type that can only be obtained by
|
|
|
// passing the value through getToStringValue first.
|
|
|
function toString(value) {
|
|
|
// The coercion safety check is performed in getToStringValue().
|
|
|
// eslint-disable-next-line react-internal/safe-string-coercion
|
|
|
return '' + value;
|
|
|
}
|
|
|
function getToStringValue(value) {
|
|
|
switch (typeof value) {
|
|
|
case 'boolean':
|
|
|
case 'number':
|
|
|
case 'string':
|
|
|
case 'undefined':
|
|
|
return value;
|
|
|
|
|
|
case 'object':
|
|
|
{
|
|
|
checkFormFieldValueStringCoercion(value);
|
|
|
}
|
|
|
|
|
|
return value;
|
|
|
|
|
|
default:
|
|
|
// function, symbol are assigned as empty strings
|
|
|
return '';
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var hasReadOnlyValue = {
|
|
|
button: true,
|
|
|
checkbox: true,
|
|
|
image: true,
|
|
|
hidden: true,
|
|
|
radio: true,
|
|
|
reset: true,
|
|
|
submit: true
|
|
|
};
|
|
|
function checkControlledValueProps(tagName, props) {
|
|
|
{
|
|
|
if (!(hasReadOnlyValue[props.type] || props.onChange || props.onInput || props.readOnly || props.disabled || props.value == null)) {
|
|
|
error('You provided a `value` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultValue`. Otherwise, ' + 'set either `onChange` or `readOnly`.');
|
|
|
}
|
|
|
|
|
|
if (!(props.onChange || props.readOnly || props.disabled || props.checked == null)) {
|
|
|
error('You provided a `checked` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultChecked`. Otherwise, ' + 'set either `onChange` or `readOnly`.');
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function isCheckable(elem) {
|
|
|
var type = elem.type;
|
|
|
var nodeName = elem.nodeName;
|
|
|
return nodeName && nodeName.toLowerCase() === 'input' && (type === 'checkbox' || type === 'radio');
|
|
|
}
|
|
|
|
|
|
function getTracker(node) {
|
|
|
return node._valueTracker;
|
|
|
}
|
|
|
|
|
|
function detachTracker(node) {
|
|
|
node._valueTracker = null;
|
|
|
}
|
|
|
|
|
|
function getValueFromNode(node) {
|
|
|
var value = '';
|
|
|
|
|
|
if (!node) {
|
|
|
return value;
|
|
|
}
|
|
|
|
|
|
if (isCheckable(node)) {
|
|
|
value = node.checked ? 'true' : 'false';
|
|
|
} else {
|
|
|
value = node.value;
|
|
|
}
|
|
|
|
|
|
return value;
|
|
|
}
|
|
|
|
|
|
function trackValueOnNode(node) {
|
|
|
var valueField = isCheckable(node) ? 'checked' : 'value';
|
|
|
var descriptor = Object.getOwnPropertyDescriptor(node.constructor.prototype, valueField);
|
|
|
|
|
|
{
|
|
|
checkFormFieldValueStringCoercion(node[valueField]);
|
|
|
}
|
|
|
|
|
|
var currentValue = '' + node[valueField]; // if someone has already defined a value or Safari, then bail
|
|
|
// and don't track value will cause over reporting of changes,
|
|
|
// but it's better then a hard failure
|
|
|
// (needed for certain tests that spyOn input values and Safari)
|
|
|
|
|
|
if (node.hasOwnProperty(valueField) || typeof descriptor === 'undefined' || typeof descriptor.get !== 'function' || typeof descriptor.set !== 'function') {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
var get = descriptor.get,
|
|
|
set = descriptor.set;
|
|
|
Object.defineProperty(node, valueField, {
|
|
|
configurable: true,
|
|
|
get: function () {
|
|
|
return get.call(this);
|
|
|
},
|
|
|
set: function (value) {
|
|
|
{
|
|
|
checkFormFieldValueStringCoercion(value);
|
|
|
}
|
|
|
|
|
|
currentValue = '' + value;
|
|
|
set.call(this, value);
|
|
|
}
|
|
|
}); // We could've passed this the first time
|
|
|
// but it triggers a bug in IE11 and Edge 14/15.
|
|
|
// Calling defineProperty() again should be equivalent.
|
|
|
// https://github.com/facebook/react/issues/11768
|
|
|
|
|
|
Object.defineProperty(node, valueField, {
|
|
|
enumerable: descriptor.enumerable
|
|
|
});
|
|
|
var tracker = {
|
|
|
getValue: function () {
|
|
|
return currentValue;
|
|
|
},
|
|
|
setValue: function (value) {
|
|
|
{
|
|
|
checkFormFieldValueStringCoercion(value);
|
|
|
}
|
|
|
|
|
|
currentValue = '' + value;
|
|
|
},
|
|
|
stopTracking: function () {
|
|
|
detachTracker(node);
|
|
|
delete node[valueField];
|
|
|
}
|
|
|
};
|
|
|
return tracker;
|
|
|
}
|
|
|
|
|
|
function track(node) {
|
|
|
if (getTracker(node)) {
|
|
|
return;
|
|
|
} // TODO: Once it's just Fiber we can move this to node._wrapperState
|
|
|
|
|
|
|
|
|
node._valueTracker = trackValueOnNode(node);
|
|
|
}
|
|
|
function updateValueIfChanged(node) {
|
|
|
if (!node) {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
var tracker = getTracker(node); // if there is no tracker at this point it's unlikely
|
|
|
// that trying again will succeed
|
|
|
|
|
|
if (!tracker) {
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
var lastValue = tracker.getValue();
|
|
|
var nextValue = getValueFromNode(node);
|
|
|
|
|
|
if (nextValue !== lastValue) {
|
|
|
tracker.setValue(nextValue);
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
function getActiveElement(doc) {
|
|
|
doc = doc || (typeof document !== 'undefined' ? document : undefined);
|
|
|
|
|
|
if (typeof doc === 'undefined') {
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
try {
|
|
|
return doc.activeElement || doc.body;
|
|
|
} catch (e) {
|
|
|
return doc.body;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var didWarnValueDefaultValue = false;
|
|
|
var didWarnCheckedDefaultChecked = false;
|
|
|
var didWarnControlledToUncontrolled = false;
|
|
|
var didWarnUncontrolledToControlled = false;
|
|
|
|
|
|
function isControlled(props) {
|
|
|
var usesChecked = props.type === 'checkbox' || props.type === 'radio';
|
|
|
return usesChecked ? props.checked != null : props.value != null;
|
|
|
}
|
|
|
/**
|
|
|
* Implements an <input> host component that allows setting these optional
|
|
|
* props: `checked`, `value`, `defaultChecked`, and `defaultValue`.
|
|
|
*
|
|
|
* If `checked` or `value` are not supplied (or null/undefined), user actions
|
|
|
* that affect the checked state or value will trigger updates to the element.
|
|
|
*
|
|
|
* If they are supplied (and not null/undefined), the rendered element will not
|
|
|
* trigger updates to the element. Instead, the props must change in order for
|
|
|
* the rendered element to be updated.
|
|
|
*
|
|
|
* The rendered element will be initialized as unchecked (or `defaultChecked`)
|
|
|
* with an empty value (or `defaultValue`).
|
|
|
*
|
|
|
* See http://www.w3.org/TR/2012/WD-html5-20121025/the-input-element.html
|
|
|
*/
|
|
|
|
|
|
|
|
|
function getHostProps(element, props) {
|
|
|
var node = element;
|
|
|
var checked = props.checked;
|
|
|
var hostProps = assign({}, props, {
|
|
|
defaultChecked: undefined,
|
|
|
defaultValue: undefined,
|
|
|
value: undefined,
|
|
|
checked: checked != null ? checked : node._wrapperState.initialChecked
|
|
|
});
|
|
|
return hostProps;
|
|
|
}
|
|
|
function initWrapperState(element, props) {
|
|
|
{
|
|
|
checkControlledValueProps('input', props);
|
|
|
|
|
|
if (props.checked !== undefined && props.defaultChecked !== undefined && !didWarnCheckedDefaultChecked) {
|
|
|
error('%s contains an input of type %s with both checked and defaultChecked props. ' + 'Input elements must be either controlled or uncontrolled ' + '(specify either the checked prop, or the defaultChecked prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://reactjs.org/link/controlled-components', getCurrentFiberOwnerNameInDevOrNull() || 'A component', props.type);
|
|
|
|
|
|
didWarnCheckedDefaultChecked = true;
|
|
|
}
|
|
|
|
|
|
if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValueDefaultValue) {
|
|
|
error('%s contains an input of type %s with both value and defaultValue props. ' + 'Input elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://reactjs.org/link/controlled-components', getCurrentFiberOwnerNameInDevOrNull() || 'A component', props.type);
|
|
|
|
|
|
didWarnValueDefaultValue = true;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var node = element;
|
|
|
var defaultValue = props.defaultValue == null ? '' : props.defaultValue;
|
|
|
node._wrapperState = {
|
|
|
initialChecked: props.checked != null ? props.checked : props.defaultChecked,
|
|
|
initialValue: getToStringValue(props.value != null ? props.value : defaultValue),
|
|
|
controlled: isControlled(props)
|
|
|
};
|
|
|
}
|
|
|
function updateChecked(element, props) {
|
|
|
var node = element;
|
|
|
var checked = props.checked;
|
|
|
|
|
|
if (checked != null) {
|
|
|
setValueForProperty(node, 'checked', checked, false);
|
|
|
}
|
|
|
}
|
|
|
function updateWrapper(element, props) {
|
|
|
var node = element;
|
|
|
|
|
|
{
|
|
|
var controlled = isControlled(props);
|
|
|
|
|
|
if (!node._wrapperState.controlled && controlled && !didWarnUncontrolledToControlled) {
|
|
|
error('A component is changing an uncontrolled input to be controlled. ' + 'This is likely caused by the value changing from undefined to ' + 'a defined value, which should not happen. ' + 'Decide between using a controlled or uncontrolled input ' + 'element for the lifetime of the component. More info: https://reactjs.org/link/controlled-components');
|
|
|
|
|
|
didWarnUncontrolledToControlled = true;
|
|
|
}
|
|
|
|
|
|
if (node._wrapperState.controlled && !controlled && !didWarnControlledToUncontrolled) {
|
|
|
error('A component is changing a controlled input to be uncontrolled. ' + 'This is likely caused by the value changing from a defined to ' + 'undefined, which should not happen. ' + 'Decide between using a controlled or uncontrolled input ' + 'element for the lifetime of the component. More info: https://reactjs.org/link/controlled-components');
|
|
|
|
|
|
didWarnControlledToUncontrolled = true;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
updateChecked(element, props);
|
|
|
var value = getToStringValue(props.value);
|
|
|
var type = props.type;
|
|
|
|
|
|
if (value != null) {
|
|
|
if (type === 'number') {
|
|
|
if (value === 0 && node.value === '' || // We explicitly want to coerce to number here if possible.
|
|
|
// eslint-disable-next-line
|
|
|
node.value != value) {
|
|
|
node.value = toString(value);
|
|
|
}
|
|
|
} else if (node.value !== toString(value)) {
|
|
|
node.value = toString(value);
|
|
|
}
|
|
|
} else if (type === 'submit' || type === 'reset') {
|
|
|
// Submit/reset inputs need the attribute removed completely to avoid
|
|
|
// blank-text buttons.
|
|
|
node.removeAttribute('value');
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
{
|
|
|
// When syncing the value attribute, the value comes from a cascade of
|
|
|
// properties:
|
|
|
// 1. The value React property
|
|
|
// 2. The defaultValue React property
|
|
|
// 3. Otherwise there should be no change
|
|
|
if (props.hasOwnProperty('value')) {
|
|
|
setDefaultValue(node, props.type, value);
|
|
|
} else if (props.hasOwnProperty('defaultValue')) {
|
|
|
setDefaultValue(node, props.type, getToStringValue(props.defaultValue));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
{
|
|
|
// When syncing the checked attribute, it only changes when it needs
|
|
|
// to be removed, such as transitioning from a checkbox into a text input
|
|
|
if (props.checked == null && props.defaultChecked != null) {
|
|
|
node.defaultChecked = !!props.defaultChecked;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
function postMountWrapper(element, props, isHydrating) {
|
|
|
var node = element; // Do not assign value if it is already set. This prevents user text input
|
|
|
// from being lost during SSR hydration.
|
|
|
|
|
|
if (props.hasOwnProperty('value') || props.hasOwnProperty('defaultValue')) {
|
|
|
var type = props.type;
|
|
|
var isButton = type === 'submit' || type === 'reset'; // Avoid setting value attribute on submit/reset inputs as it overrides the
|
|
|
// default value provided by the browser. See: #12872
|
|
|
|
|
|
if (isButton && (props.value === undefined || props.value === null)) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
var initialValue = toString(node._wrapperState.initialValue); // Do not assign value if it is already set. This prevents user text input
|
|
|
// from being lost during SSR hydration.
|
|
|
|
|
|
if (!isHydrating) {
|
|
|
{
|
|
|
// When syncing the value attribute, the value property should use
|
|
|
// the wrapperState._initialValue property. This uses:
|
|
|
//
|
|
|
// 1. The value React property when present
|
|
|
// 2. The defaultValue React property when present
|
|
|
// 3. An empty string
|
|
|
if (initialValue !== node.value) {
|
|
|
node.value = initialValue;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
{
|
|
|
// Otherwise, the value attribute is synchronized to the property,
|
|
|
// so we assign defaultValue to the same thing as the value property
|
|
|
// assignment step above.
|
|
|
node.defaultValue = initialValue;
|
|
|
}
|
|
|
} // Normally, we'd just do `node.checked = node.checked` upon initial mount, less this bug
|
|
|
// this is needed to work around a chrome bug where setting defaultChecked
|
|
|
// will sometimes influence the value of checked (even after detachment).
|
|
|
// Reference: https://bugs.chromium.org/p/chromium/issues/detail?id=608416
|
|
|
// We need to temporarily unset name to avoid disrupting radio button groups.
|
|
|
|
|
|
|
|
|
var name = node.name;
|
|
|
|
|
|
if (name !== '') {
|
|
|
node.name = '';
|
|
|
}
|
|
|
|
|
|
{
|
|
|
// When syncing the checked attribute, both the checked property and
|
|
|
// attribute are assigned at the same time using defaultChecked. This uses:
|
|
|
//
|
|
|
// 1. The checked React property when present
|
|
|
// 2. The defaultChecked React property when present
|
|
|
// 3. Otherwise, false
|
|
|
node.defaultChecked = !node.defaultChecked;
|
|
|
node.defaultChecked = !!node._wrapperState.initialChecked;
|
|
|
}
|
|
|
|
|
|
if (name !== '') {
|
|
|
node.name = name;
|
|
|
}
|
|
|
}
|
|
|
function restoreControlledState(element, props) {
|
|
|
var node = element;
|
|
|
updateWrapper(node, props);
|
|
|
updateNamedCousins(node, props);
|
|
|
}
|
|
|
|
|
|
function updateNamedCousins(rootNode, props) {
|
|
|
var name = props.name;
|
|
|
|
|
|
if (props.type === 'radio' && name != null) {
|
|
|
var queryRoot = rootNode;
|
|
|
|
|
|
while (queryRoot.parentNode) {
|
|
|
queryRoot = queryRoot.parentNode;
|
|
|
} // If `rootNode.form` was non-null, then we could try `form.elements`,
|
|
|
// but that sometimes behaves strangely in IE8. We could also try using
|
|
|
// `form.getElementsByName`, but that will only return direct children
|
|
|
// and won't include inputs that use the HTML5 `form=` attribute. Since
|
|
|
// the input might not even be in a form. It might not even be in the
|
|
|
// document. Let's just use the local `querySelectorAll` to ensure we don't
|
|
|
// miss anything.
|
|
|
|
|
|
|
|
|
{
|
|
|
checkAttributeStringCoercion(name, 'name');
|
|
|
}
|
|
|
|
|
|
var group = queryRoot.querySelectorAll('input[name=' + JSON.stringify('' + name) + '][type="radio"]');
|
|
|
|
|
|
for (var i = 0; i < group.length; i++) {
|
|
|
var otherNode = group[i];
|
|
|
|
|
|
if (otherNode === rootNode || otherNode.form !== rootNode.form) {
|
|
|
continue;
|
|
|
} // This will throw if radio buttons rendered by different copies of React
|
|
|
// and the same name are rendered into the same form (same as #1939).
|
|
|
// That's probably okay; we don't support it just as we don't support
|
|
|
// mixing React radio buttons with non-React ones.
|
|
|
|
|
|
|
|
|
var otherProps = getFiberCurrentPropsFromNode(otherNode);
|
|
|
|
|
|
if (!otherProps) {
|
|
|
throw new Error('ReactDOMInput: Mixing React and non-React radio inputs with the ' + 'same `name` is not supported.');
|
|
|
} // We need update the tracked value on the named cousin since the value
|
|
|
// was changed but the input saw no event or value set
|
|
|
|
|
|
|
|
|
updateValueIfChanged(otherNode); // If this is a controlled radio button group, forcing the input that
|
|
|
// was previously checked to update will cause it to be come re-checked
|
|
|
// as appropriate.
|
|
|
|
|
|
updateWrapper(otherNode, otherProps);
|
|
|
}
|
|
|
}
|
|
|
} // In Chrome, assigning defaultValue to certain input types triggers input validation.
|
|
|
// For number inputs, the display value loses trailing decimal points. For email inputs,
|
|
|
// Chrome raises "The specified value <x> is not a valid email address".
|
|
|
//
|
|
|
// Here we check to see if the defaultValue has actually changed, avoiding these problems
|
|
|
// when the user is inputting text
|
|
|
//
|
|
|
// https://github.com/facebook/react/issues/7253
|
|
|
|
|
|
|
|
|
function setDefaultValue(node, type, value) {
|
|
|
if ( // Focused number inputs synchronize on blur. See ChangeEventPlugin.js
|
|
|
type !== 'number' || getActiveElement(node.ownerDocument) !== node) {
|
|
|
if (value == null) {
|
|
|
node.defaultValue = toString(node._wrapperState.initialValue);
|
|
|
} else if (node.defaultValue !== toString(value)) {
|
|
|
node.defaultValue = toString(value);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var didWarnSelectedSetOnOption = false;
|
|
|
var didWarnInvalidChild = false;
|
|
|
var didWarnInvalidInnerHTML = false;
|
|
|
/**
|
|
|
* Implements an <option> host component that warns when `selected` is set.
|
|
|
*/
|
|
|
|
|
|
function validateProps(element, props) {
|
|
|
{
|
|
|
// If a value is not provided, then the children must be simple.
|
|
|
if (props.value == null) {
|
|
|
if (typeof props.children === 'object' && props.children !== null) {
|
|
|
React.Children.forEach(props.children, function (child) {
|
|
|
if (child == null) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (typeof child === 'string' || typeof child === 'number') {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (!didWarnInvalidChild) {
|
|
|
didWarnInvalidChild = true;
|
|
|
|
|
|
error('Cannot infer the option value of complex children. ' + 'Pass a `value` prop or use a plain string as children to <option>.');
|
|
|
}
|
|
|
});
|
|
|
} else if (props.dangerouslySetInnerHTML != null) {
|
|
|
if (!didWarnInvalidInnerHTML) {
|
|
|
didWarnInvalidInnerHTML = true;
|
|
|
|
|
|
error('Pass a `value` prop if you set dangerouslyInnerHTML so React knows ' + 'which value should be selected.');
|
|
|
}
|
|
|
}
|
|
|
} // TODO: Remove support for `selected` in <option>.
|
|
|
|
|
|
|
|
|
if (props.selected != null && !didWarnSelectedSetOnOption) {
|
|
|
error('Use the `defaultValue` or `value` props on <select> instead of ' + 'setting `selected` on <option>.');
|
|
|
|
|
|
didWarnSelectedSetOnOption = true;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
function postMountWrapper$1(element, props) {
|
|
|
// value="" should make a value attribute (#6219)
|
|
|
if (props.value != null) {
|
|
|
element.setAttribute('value', toString(getToStringValue(props.value)));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare
|
|
|
|
|
|
function isArray(a) {
|
|
|
return isArrayImpl(a);
|
|
|
}
|
|
|
|
|
|
var didWarnValueDefaultValue$1;
|
|
|
|
|
|
{
|
|
|
didWarnValueDefaultValue$1 = false;
|
|
|
}
|
|
|
|
|
|
function getDeclarationErrorAddendum() {
|
|
|
var ownerName = getCurrentFiberOwnerNameInDevOrNull();
|
|
|
|
|
|
if (ownerName) {
|
|
|
return '\n\nCheck the render method of `' + ownerName + '`.';
|
|
|
}
|
|
|
|
|
|
return '';
|
|
|
}
|
|
|
|
|
|
var valuePropNames = ['value', 'defaultValue'];
|
|
|
/**
|
|
|
* Validation function for `value` and `defaultValue`.
|
|
|
*/
|
|
|
|
|
|
function checkSelectPropTypes(props) {
|
|
|
{
|
|
|
checkControlledValueProps('select', props);
|
|
|
|
|
|
for (var i = 0; i < valuePropNames.length; i++) {
|
|
|
var propName = valuePropNames[i];
|
|
|
|
|
|
if (props[propName] == null) {
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
var propNameIsArray = isArray(props[propName]);
|
|
|
|
|
|
if (props.multiple && !propNameIsArray) {
|
|
|
error('The `%s` prop supplied to <select> must be an array if ' + '`multiple` is true.%s', propName, getDeclarationErrorAddendum());
|
|
|
} else if (!props.multiple && propNameIsArray) {
|
|
|
error('The `%s` prop supplied to <select> must be a scalar ' + 'value if `multiple` is false.%s', propName, getDeclarationErrorAddendum());
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function updateOptions(node, multiple, propValue, setDefaultSelected) {
|
|
|
var options = node.options;
|
|
|
|
|
|
if (multiple) {
|
|
|
var selectedValues = propValue;
|
|
|
var selectedValue = {};
|
|
|
|
|
|
for (var i = 0; i < selectedValues.length; i++) {
|
|
|
// Prefix to avoid chaos with special keys.
|
|
|
selectedValue['$' + selectedValues[i]] = true;
|
|
|
}
|
|
|
|
|
|
for (var _i = 0; _i < options.length; _i++) {
|
|
|
var selected = selectedValue.hasOwnProperty('$' + options[_i].value);
|
|
|
|
|
|
if (options[_i].selected !== selected) {
|
|
|
options[_i].selected = selected;
|
|
|
}
|
|
|
|
|
|
if (selected && setDefaultSelected) {
|
|
|
options[_i].defaultSelected = true;
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
|
// Do not set `select.value` as exact behavior isn't consistent across all
|
|
|
// browsers for all cases.
|
|
|
var _selectedValue = toString(getToStringValue(propValue));
|
|
|
|
|
|
var defaultSelected = null;
|
|
|
|
|
|
for (var _i2 = 0; _i2 < options.length; _i2++) {
|
|
|
if (options[_i2].value === _selectedValue) {
|
|
|
options[_i2].selected = true;
|
|
|
|
|
|
if (setDefaultSelected) {
|
|
|
options[_i2].defaultSelected = true;
|
|
|
}
|
|
|
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (defaultSelected === null && !options[_i2].disabled) {
|
|
|
defaultSelected = options[_i2];
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (defaultSelected !== null) {
|
|
|
defaultSelected.selected = true;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
/**
|
|
|
* Implements a <select> host component that allows optionally setting the
|
|
|
* props `value` and `defaultValue`. If `multiple` is false, the prop must be a
|
|
|
* stringable. If `multiple` is true, the prop must be an array of stringables.
|
|
|
*
|
|
|
* If `value` is not supplied (or null/undefined), user actions that change the
|
|
|
* selected option will trigger updates to the rendered options.
|
|
|
*
|
|
|
* If it is supplied (and not null/undefined), the rendered options will not
|
|
|
* update in response to user actions. Instead, the `value` prop must change in
|
|
|
* order for the rendered options to update.
|
|
|
*
|
|
|
* If `defaultValue` is provided, any options with the supplied values will be
|
|
|
* selected.
|
|
|
*/
|
|
|
|
|
|
|
|
|
function getHostProps$1(element, props) {
|
|
|
return assign({}, props, {
|
|
|
value: undefined
|
|
|
});
|
|
|
}
|
|
|
function initWrapperState$1(element, props) {
|
|
|
var node = element;
|
|
|
|
|
|
{
|
|
|
checkSelectPropTypes(props);
|
|
|
}
|
|
|
|
|
|
node._wrapperState = {
|
|
|
wasMultiple: !!props.multiple
|
|
|
};
|
|
|
|
|
|
{
|
|
|
if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValueDefaultValue$1) {
|
|
|
error('Select elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled select ' + 'element and remove one of these props. More info: ' + 'https://reactjs.org/link/controlled-components');
|
|
|
|
|
|
didWarnValueDefaultValue$1 = true;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
function postMountWrapper$2(element, props) {
|
|
|
var node = element;
|
|
|
node.multiple = !!props.multiple;
|
|
|
var value = props.value;
|
|
|
|
|
|
if (value != null) {
|
|
|
updateOptions(node, !!props.multiple, value, false);
|
|
|
} else if (props.defaultValue != null) {
|
|
|
updateOptions(node, !!props.multiple, props.defaultValue, true);
|
|
|
}
|
|
|
}
|
|
|
function postUpdateWrapper(element, props) {
|
|
|
var node = element;
|
|
|
var wasMultiple = node._wrapperState.wasMultiple;
|
|
|
node._wrapperState.wasMultiple = !!props.multiple;
|
|
|
var value = props.value;
|
|
|
|
|
|
if (value != null) {
|
|
|
updateOptions(node, !!props.multiple, value, false);
|
|
|
} else if (wasMultiple !== !!props.multiple) {
|
|
|
// For simplicity, reapply `defaultValue` if `multiple` is toggled.
|
|
|
if (props.defaultValue != null) {
|
|
|
updateOptions(node, !!props.multiple, props.defaultValue, true);
|
|
|
} else {
|
|
|
// Revert the select back to its default unselected state.
|
|
|
updateOptions(node, !!props.multiple, props.multiple ? [] : '', false);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
function restoreControlledState$1(element, props) {
|
|
|
var node = element;
|
|
|
var value = props.value;
|
|
|
|
|
|
if (value != null) {
|
|
|
updateOptions(node, !!props.multiple, value, false);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var didWarnValDefaultVal = false;
|
|
|
|
|
|
/**
|
|
|
* Implements a <textarea> host component that allows setting `value`, and
|
|
|
* `defaultValue`. This differs from the traditional DOM API because value is
|
|
|
* usually set as PCDATA children.
|
|
|
*
|
|
|
* If `value` is not supplied (or null/undefined), user actions that affect the
|
|
|
* value will trigger updates to the element.
|
|
|
*
|
|
|
* If `value` is supplied (and not null/undefined), the rendered element will
|
|
|
* not trigger updates to the element. Instead, the `value` prop must change in
|
|
|
* order for the rendered element to be updated.
|
|
|
*
|
|
|
* The rendered element will be initialized with an empty value, the prop
|
|
|
* `defaultValue` if specified, or the children content (deprecated).
|
|
|
*/
|
|
|
function getHostProps$2(element, props) {
|
|
|
var node = element;
|
|
|
|
|
|
if (props.dangerouslySetInnerHTML != null) {
|
|
|
throw new Error('`dangerouslySetInnerHTML` does not make sense on <textarea>.');
|
|
|
} // Always set children to the same thing. In IE9, the selection range will
|
|
|
// get reset if `textContent` is mutated. We could add a check in setTextContent
|
|
|
// to only set the value if/when the value differs from the node value (which would
|
|
|
// completely solve this IE9 bug), but Sebastian+Sophie seemed to like this
|
|
|
// solution. The value can be a boolean or object so that's why it's forced
|
|
|
// to be a string.
|
|
|
|
|
|
|
|
|
var hostProps = assign({}, props, {
|
|
|
value: undefined,
|
|
|
defaultValue: undefined,
|
|
|
children: toString(node._wrapperState.initialValue)
|
|
|
});
|
|
|
|
|
|
return hostProps;
|
|
|
}
|
|
|
function initWrapperState$2(element, props) {
|
|
|
var node = element;
|
|
|
|
|
|
{
|
|
|
checkControlledValueProps('textarea', props);
|
|
|
|
|
|
if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValDefaultVal) {
|
|
|
error('%s contains a textarea with both value and defaultValue props. ' + 'Textarea elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled textarea ' + 'and remove one of these props. More info: ' + 'https://reactjs.org/link/controlled-components', getCurrentFiberOwnerNameInDevOrNull() || 'A component');
|
|
|
|
|
|
didWarnValDefaultVal = true;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var initialValue = props.value; // Only bother fetching default value if we're going to use it
|
|
|
|
|
|
if (initialValue == null) {
|
|
|
var children = props.children,
|
|
|
defaultValue = props.defaultValue;
|
|
|
|
|
|
if (children != null) {
|
|
|
{
|
|
|
error('Use the `defaultValue` or `value` props instead of setting ' + 'children on <textarea>.');
|
|
|
}
|
|
|
|
|
|
{
|
|
|
if (defaultValue != null) {
|
|
|
throw new Error('If you supply `defaultValue` on a <textarea>, do not pass children.');
|
|
|
}
|
|
|
|
|
|
if (isArray(children)) {
|
|
|
if (children.length > 1) {
|
|
|
throw new Error('<textarea> can only have at most one child.');
|
|
|
}
|
|
|
|
|
|
children = children[0];
|
|
|
}
|
|
|
|
|
|
defaultValue = children;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (defaultValue == null) {
|
|
|
defaultValue = '';
|
|
|
}
|
|
|
|
|
|
initialValue = defaultValue;
|
|
|
}
|
|
|
|
|
|
node._wrapperState = {
|
|
|
initialValue: getToStringValue(initialValue)
|
|
|
};
|
|
|
}
|
|
|
function updateWrapper$1(element, props) {
|
|
|
var node = element;
|
|
|
var value = getToStringValue(props.value);
|
|
|
var defaultValue = getToStringValue(props.defaultValue);
|
|
|
|
|
|
if (value != null) {
|
|
|
// Cast `value` to a string to ensure the value is set correctly. While
|
|
|
// browsers typically do this as necessary, jsdom doesn't.
|
|
|
var newValue = toString(value); // To avoid side effects (such as losing text selection), only set value if changed
|
|
|
|
|
|
if (newValue !== node.value) {
|
|
|
node.value = newValue;
|
|
|
}
|
|
|
|
|
|
if (props.defaultValue == null && node.defaultValue !== newValue) {
|
|
|
node.defaultValue = newValue;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (defaultValue != null) {
|
|
|
node.defaultValue = toString(defaultValue);
|
|
|
}
|
|
|
}
|
|
|
function postMountWrapper$3(element, props) {
|
|
|
var node = element; // This is in postMount because we need access to the DOM node, which is not
|
|
|
// available until after the component has mounted.
|
|
|
|
|
|
var textContent = node.textContent; // Only set node.value if textContent is equal to the expected
|
|
|
// initial value. In IE10/IE11 there is a bug where the placeholder attribute
|
|
|
// will populate textContent as well.
|
|
|
// https://developer.microsoft.com/microsoft-edge/platform/issues/101525/
|
|
|
|
|
|
if (textContent === node._wrapperState.initialValue) {
|
|
|
if (textContent !== '' && textContent !== null) {
|
|
|
node.value = textContent;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
function restoreControlledState$2(element, props) {
|
|
|
// DOM component is still mounted; update
|
|
|
updateWrapper$1(element, props);
|
|
|
}
|
|
|
|
|
|
var HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';
|
|
|
var MATH_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';
|
|
|
var SVG_NAMESPACE = 'http://www.w3.org/2000/svg'; // Assumes there is no parent namespace.
|
|
|
|
|
|
function getIntrinsicNamespace(type) {
|
|
|
switch (type) {
|
|
|
case 'svg':
|
|
|
return SVG_NAMESPACE;
|
|
|
|
|
|
case 'math':
|
|
|
return MATH_NAMESPACE;
|
|
|
|
|
|
default:
|
|
|
return HTML_NAMESPACE;
|
|
|
}
|
|
|
}
|
|
|
function getChildNamespace(parentNamespace, type) {
|
|
|
if (parentNamespace == null || parentNamespace === HTML_NAMESPACE) {
|
|
|
// No (or default) parent namespace: potential entry point.
|
|
|
return getIntrinsicNamespace(type);
|
|
|
}
|
|
|
|
|
|
if (parentNamespace === SVG_NAMESPACE && type === 'foreignObject') {
|
|
|
// We're leaving SVG.
|
|
|
return HTML_NAMESPACE;
|
|
|
} // By default, pass namespace below.
|
|
|
|
|
|
|
|
|
return parentNamespace;
|
|
|
}
|
|
|
|
|
|
/* globals MSApp */
|
|
|
|
|
|
/**
|
|
|
* Create a function which has 'unsafe' privileges (required by windows8 apps)
|
|
|
*/
|
|
|
var createMicrosoftUnsafeLocalFunction = function (func) {
|
|
|
if (typeof MSApp !== 'undefined' && MSApp.execUnsafeLocalFunction) {
|
|
|
return function (arg0, arg1, arg2, arg3) {
|
|
|
MSApp.execUnsafeLocalFunction(function () {
|
|
|
return func(arg0, arg1, arg2, arg3);
|
|
|
});
|
|
|
};
|
|
|
} else {
|
|
|
return func;
|
|
|
}
|
|
|
};
|
|
|
|
|
|
var reusableSVGContainer;
|
|
|
/**
|
|
|
* Set the innerHTML property of a node
|
|
|
*
|
|
|
* @param {DOMElement} node
|
|
|
* @param {string} html
|
|
|
* @internal
|
|
|
*/
|
|
|
|
|
|
var setInnerHTML = createMicrosoftUnsafeLocalFunction(function (node, html) {
|
|
|
if (node.namespaceURI === SVG_NAMESPACE) {
|
|
|
|
|
|
if (!('innerHTML' in node)) {
|
|
|
// IE does not have innerHTML for SVG nodes, so instead we inject the
|
|
|
// new markup in a temp node and then move the child nodes across into
|
|
|
// the target node
|
|
|
reusableSVGContainer = reusableSVGContainer || document.createElement('div');
|
|
|
reusableSVGContainer.innerHTML = '<svg>' + html.valueOf().toString() + '</svg>';
|
|
|
var svgNode = reusableSVGContainer.firstChild;
|
|
|
|
|
|
while (node.firstChild) {
|
|
|
node.removeChild(node.firstChild);
|
|
|
}
|
|
|
|
|
|
while (svgNode.firstChild) {
|
|
|
node.appendChild(svgNode.firstChild);
|
|
|
}
|
|
|
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
node.innerHTML = html;
|
|
|
});
|
|
|
|
|
|
/**
|
|
|
* HTML nodeType values that represent the type of the node
|
|
|
*/
|
|
|
var ELEMENT_NODE = 1;
|
|
|
var TEXT_NODE = 3;
|
|
|
var COMMENT_NODE = 8;
|
|
|
var DOCUMENT_NODE = 9;
|
|
|
var DOCUMENT_FRAGMENT_NODE = 11;
|
|
|
|
|
|
/**
|
|
|
* Set the textContent property of a node. For text updates, it's faster
|
|
|
* to set the `nodeValue` of the Text node directly instead of using
|
|
|
* `.textContent` which will remove the existing node and create a new one.
|
|
|
*
|
|
|
* @param {DOMElement} node
|
|
|
* @param {string} text
|
|
|
* @internal
|
|
|
*/
|
|
|
|
|
|
var setTextContent = function (node, text) {
|
|
|
if (text) {
|
|
|
var firstChild = node.firstChild;
|
|
|
|
|
|
if (firstChild && firstChild === node.lastChild && firstChild.nodeType === TEXT_NODE) {
|
|
|
firstChild.nodeValue = text;
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
node.textContent = text;
|
|
|
};
|
|
|
|
|
|
// List derived from Gecko source code:
|
|
|
// https://github.com/mozilla/gecko-dev/blob/4e638efc71/layout/style/test/property_database.js
|
|
|
var shorthandToLonghand = {
|
|
|
animation: ['animationDelay', 'animationDirection', 'animationDuration', 'animationFillMode', 'animationIterationCount', 'animationName', 'animationPlayState', 'animationTimingFunction'],
|
|
|
background: ['backgroundAttachment', 'backgroundClip', 'backgroundColor', 'backgroundImage', 'backgroundOrigin', 'backgroundPositionX', 'backgroundPositionY', 'backgroundRepeat', 'backgroundSize'],
|
|
|
backgroundPosition: ['backgroundPositionX', 'backgroundPositionY'],
|
|
|
border: ['borderBottomColor', 'borderBottomStyle', 'borderBottomWidth', 'borderImageOutset', 'borderImageRepeat', 'borderImageSlice', 'borderImageSource', 'borderImageWidth', 'borderLeftColor', 'borderLeftStyle', 'borderLeftWidth', 'borderRightColor', 'borderRightStyle', 'borderRightWidth', 'borderTopColor', 'borderTopStyle', 'borderTopWidth'],
|
|
|
borderBlockEnd: ['borderBlockEndColor', 'borderBlockEndStyle', 'borderBlockEndWidth'],
|
|
|
borderBlockStart: ['borderBlockStartColor', 'borderBlockStartStyle', 'borderBlockStartWidth'],
|
|
|
borderBottom: ['borderBottomColor', 'borderBottomStyle', 'borderBottomWidth'],
|
|
|
borderColor: ['borderBottomColor', 'borderLeftColor', 'borderRightColor', 'borderTopColor'],
|
|
|
borderImage: ['borderImageOutset', 'borderImageRepeat', 'borderImageSlice', 'borderImageSource', 'borderImageWidth'],
|
|
|
borderInlineEnd: ['borderInlineEndColor', 'borderInlineEndStyle', 'borderInlineEndWidth'],
|
|
|
borderInlineStart: ['borderInlineStartColor', 'borderInlineStartStyle', 'borderInlineStartWidth'],
|
|
|
borderLeft: ['borderLeftColor', 'borderLeftStyle', 'borderLeftWidth'],
|
|
|
borderRadius: ['borderBottomLeftRadius', 'borderBottomRightRadius', 'borderTopLeftRadius', 'borderTopRightRadius'],
|
|
|
borderRight: ['borderRightColor', 'borderRightStyle', 'borderRightWidth'],
|
|
|
borderStyle: ['borderBottomStyle', 'borderLeftStyle', 'borderRightStyle', 'borderTopStyle'],
|
|
|
borderTop: ['borderTopColor', 'borderTopStyle', 'borderTopWidth'],
|
|
|
borderWidth: ['borderBottomWidth', 'borderLeftWidth', 'borderRightWidth', 'borderTopWidth'],
|
|
|
columnRule: ['columnRuleColor', 'columnRuleStyle', 'columnRuleWidth'],
|
|
|
columns: ['columnCount', 'columnWidth'],
|
|
|
flex: ['flexBasis', 'flexGrow', 'flexShrink'],
|
|
|
flexFlow: ['flexDirection', 'flexWrap'],
|
|
|
font: ['fontFamily', 'fontFeatureSettings', 'fontKerning', 'fontLanguageOverride', 'fontSize', 'fontSizeAdjust', 'fontStretch', 'fontStyle', 'fontVariant', 'fontVariantAlternates', 'fontVariantCaps', 'fontVariantEastAsian', 'fontVariantLigatures', 'fontVariantNumeric', 'fontVariantPosition', 'fontWeight', 'lineHeight'],
|
|
|
fontVariant: ['fontVariantAlternates', 'fontVariantCaps', 'fontVariantEastAsian', 'fontVariantLigatures', 'fontVariantNumeric', 'fontVariantPosition'],
|
|
|
gap: ['columnGap', 'rowGap'],
|
|
|
grid: ['gridAutoColumns', 'gridAutoFlow', 'gridAutoRows', 'gridTemplateAreas', 'gridTemplateColumns', 'gridTemplateRows'],
|
|
|
gridArea: ['gridColumnEnd', 'gridColumnStart', 'gridRowEnd', 'gridRowStart'],
|
|
|
gridColumn: ['gridColumnEnd', 'gridColumnStart'],
|
|
|
gridColumnGap: ['columnGap'],
|
|
|
gridGap: ['columnGap', 'rowGap'],
|
|
|
gridRow: ['gridRowEnd', 'gridRowStart'],
|
|
|
gridRowGap: ['rowGap'],
|
|
|
gridTemplate: ['gridTemplateAreas', 'gridTemplateColumns', 'gridTemplateRows'],
|
|
|
listStyle: ['listStyleImage', 'listStylePosition', 'listStyleType'],
|
|
|
margin: ['marginBottom', 'marginLeft', 'marginRight', 'marginTop'],
|
|
|
marker: ['markerEnd', 'markerMid', 'markerStart'],
|
|
|
mask: ['maskClip', 'maskComposite', 'maskImage', 'maskMode', 'maskOrigin', 'maskPositionX', 'maskPositionY', 'maskRepeat', 'maskSize'],
|
|
|
maskPosition: ['maskPositionX', 'maskPositionY'],
|
|
|
outline: ['outlineColor', 'outlineStyle', 'outlineWidth'],
|
|
|
overflow: ['overflowX', 'overflowY'],
|
|
|
padding: ['paddingBottom', 'paddingLeft', 'paddingRight', 'paddingTop'],
|
|
|
placeContent: ['alignContent', 'justifyContent'],
|
|
|
placeItems: ['alignItems', 'justifyItems'],
|
|
|
placeSelf: ['alignSelf', 'justifySelf'],
|
|
|
textDecoration: ['textDecorationColor', 'textDecorationLine', 'textDecorationStyle'],
|
|
|
textEmphasis: ['textEmphasisColor', 'textEmphasisStyle'],
|
|
|
transition: ['transitionDelay', 'transitionDuration', 'transitionProperty', 'transitionTimingFunction'],
|
|
|
wordWrap: ['overflowWrap']
|
|
|
};
|
|
|
|
|
|
/**
|
|
|
* CSS properties which accept numbers but are not in units of "px".
|
|
|
*/
|
|
|
var isUnitlessNumber = {
|
|
|
animationIterationCount: true,
|
|
|
aspectRatio: true,
|
|
|
borderImageOutset: true,
|
|
|
borderImageSlice: true,
|
|
|
borderImageWidth: true,
|
|
|
boxFlex: true,
|
|
|
boxFlexGroup: true,
|
|
|
boxOrdinalGroup: true,
|
|
|
columnCount: true,
|
|
|
columns: true,
|
|
|
flex: true,
|
|
|
flexGrow: true,
|
|
|
flexPositive: true,
|
|
|
flexShrink: true,
|
|
|
flexNegative: true,
|
|
|
flexOrder: true,
|
|
|
gridArea: true,
|
|
|
gridRow: true,
|
|
|
gridRowEnd: true,
|
|
|
gridRowSpan: true,
|
|
|
gridRowStart: true,
|
|
|
gridColumn: true,
|
|
|
gridColumnEnd: true,
|
|
|
gridColumnSpan: true,
|
|
|
gridColumnStart: true,
|
|
|
fontWeight: true,
|
|
|
lineClamp: true,
|
|
|
lineHeight: true,
|
|
|
opacity: true,
|
|
|
order: true,
|
|
|
orphans: true,
|
|
|
tabSize: true,
|
|
|
widows: true,
|
|
|
zIndex: true,
|
|
|
zoom: true,
|
|
|
// SVG-related properties
|
|
|
fillOpacity: true,
|
|
|
floodOpacity: true,
|
|
|
stopOpacity: true,
|
|
|
strokeDasharray: true,
|
|
|
strokeDashoffset: true,
|
|
|
strokeMiterlimit: true,
|
|
|
strokeOpacity: true,
|
|
|
strokeWidth: true
|
|
|
};
|
|
|
/**
|
|
|
* @param {string} prefix vendor-specific prefix, eg: Webkit
|
|
|
* @param {string} key style name, eg: transitionDuration
|
|
|
* @return {string} style name prefixed with `prefix`, properly camelCased, eg:
|
|
|
* WebkitTransitionDuration
|
|
|
*/
|
|
|
|
|
|
function prefixKey(prefix, key) {
|
|
|
return prefix + key.charAt(0).toUpperCase() + key.substring(1);
|
|
|
}
|
|
|
/**
|
|
|
* Support style names that may come passed in prefixed by adding permutations
|
|
|
* of vendor prefixes.
|
|
|
*/
|
|
|
|
|
|
|
|
|
var prefixes = ['Webkit', 'ms', 'Moz', 'O']; // Using Object.keys here, or else the vanilla for-in loop makes IE8 go into an
|
|
|
// infinite loop, because it iterates over the newly added props too.
|
|
|
|
|
|
Object.keys(isUnitlessNumber).forEach(function (prop) {
|
|
|
prefixes.forEach(function (prefix) {
|
|
|
isUnitlessNumber[prefixKey(prefix, prop)] = isUnitlessNumber[prop];
|
|
|
});
|
|
|
});
|
|
|
|
|
|
/**
|
|
|
* Convert a value into the proper css writable value. The style name `name`
|
|
|
* should be logical (no hyphens), as specified
|
|
|
* in `CSSProperty.isUnitlessNumber`.
|
|
|
*
|
|
|
* @param {string} name CSS property name such as `topMargin`.
|
|
|
* @param {*} value CSS property value such as `10px`.
|
|
|
* @return {string} Normalized style value with dimensions applied.
|
|
|
*/
|
|
|
|
|
|
function dangerousStyleValue(name, value, isCustomProperty) {
|
|
|
// Note that we've removed escapeTextForBrowser() calls here since the
|
|
|
// whole string will be escaped when the attribute is injected into
|
|
|
// the markup. If you provide unsafe user data here they can inject
|
|
|
// arbitrary CSS which may be problematic (I couldn't repro this):
|
|
|
// https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet
|
|
|
// http://www.thespanner.co.uk/2007/11/26/ultimate-xss-css-injection/
|
|
|
// This is not an XSS hole but instead a potential CSS injection issue
|
|
|
// which has lead to a greater discussion about how we're going to
|
|
|
// trust URLs moving forward. See #2115901
|
|
|
var isEmpty = value == null || typeof value === 'boolean' || value === '';
|
|
|
|
|
|
if (isEmpty) {
|
|
|
return '';
|
|
|
}
|
|
|
|
|
|
if (!isCustomProperty && typeof value === 'number' && value !== 0 && !(isUnitlessNumber.hasOwnProperty(name) && isUnitlessNumber[name])) {
|
|
|
return value + 'px'; // Presumes implicit 'px' suffix for unitless numbers
|
|
|
}
|
|
|
|
|
|
{
|
|
|
checkCSSPropertyStringCoercion(value, name);
|
|
|
}
|
|
|
|
|
|
return ('' + value).trim();
|
|
|
}
|
|
|
|
|
|
var uppercasePattern = /([A-Z])/g;
|
|
|
var msPattern = /^ms-/;
|
|
|
/**
|
|
|
* Hyphenates a camelcased CSS property name, for example:
|
|
|
*
|
|
|
* > hyphenateStyleName('backgroundColor')
|
|
|
* < "background-color"
|
|
|
* > hyphenateStyleName('MozTransition')
|
|
|
* < "-moz-transition"
|
|
|
* > hyphenateStyleName('msTransition')
|
|
|
* < "-ms-transition"
|
|
|
*
|
|
|
* As Modernizr suggests (http://modernizr.com/docs/#prefixed), an `ms` prefix
|
|
|
* is converted to `-ms-`.
|
|
|
*/
|
|
|
|
|
|
function hyphenateStyleName(name) {
|
|
|
return name.replace(uppercasePattern, '-$1').toLowerCase().replace(msPattern, '-ms-');
|
|
|
}
|
|
|
|
|
|
var warnValidStyle = function () {};
|
|
|
|
|
|
{
|
|
|
// 'msTransform' is correct, but the other prefixes should be capitalized
|
|
|
var badVendoredStyleNamePattern = /^(?:webkit|moz|o)[A-Z]/;
|
|
|
var msPattern$1 = /^-ms-/;
|
|
|
var hyphenPattern = /-(.)/g; // style values shouldn't contain a semicolon
|
|
|
|
|
|
var badStyleValueWithSemicolonPattern = /;\s*$/;
|
|
|
var warnedStyleNames = {};
|
|
|
var warnedStyleValues = {};
|
|
|
var warnedForNaNValue = false;
|
|
|
var warnedForInfinityValue = false;
|
|
|
|
|
|
var camelize = function (string) {
|
|
|
return string.replace(hyphenPattern, function (_, character) {
|
|
|
return character.toUpperCase();
|
|
|
});
|
|
|
};
|
|
|
|
|
|
var warnHyphenatedStyleName = function (name) {
|
|
|
if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
warnedStyleNames[name] = true;
|
|
|
|
|
|
error('Unsupported style property %s. Did you mean %s?', name, // As Andi Smith suggests
|
|
|
// (http://www.andismith.com/blog/2012/02/modernizr-prefixed/), an `-ms` prefix
|
|
|
// is converted to lowercase `ms`.
|
|
|
camelize(name.replace(msPattern$1, 'ms-')));
|
|
|
};
|
|
|
|
|
|
var warnBadVendoredStyleName = function (name) {
|
|
|
if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
warnedStyleNames[name] = true;
|
|
|
|
|
|
error('Unsupported vendor-prefixed style property %s. Did you mean %s?', name, name.charAt(0).toUpperCase() + name.slice(1));
|
|
|
};
|
|
|
|
|
|
var warnStyleValueWithSemicolon = function (name, value) {
|
|
|
if (warnedStyleValues.hasOwnProperty(value) && warnedStyleValues[value]) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
warnedStyleValues[value] = true;
|
|
|
|
|
|
error("Style property values shouldn't contain a semicolon. " + 'Try "%s: %s" instead.', name, value.replace(badStyleValueWithSemicolonPattern, ''));
|
|
|
};
|
|
|
|
|
|
var warnStyleValueIsNaN = function (name, value) {
|
|
|
if (warnedForNaNValue) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
warnedForNaNValue = true;
|
|
|
|
|
|
error('`NaN` is an invalid value for the `%s` css style property.', name);
|
|
|
};
|
|
|
|
|
|
var warnStyleValueIsInfinity = function (name, value) {
|
|
|
if (warnedForInfinityValue) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
warnedForInfinityValue = true;
|
|
|
|
|
|
error('`Infinity` is an invalid value for the `%s` css style property.', name);
|
|
|
};
|
|
|
|
|
|
warnValidStyle = function (name, value) {
|
|
|
if (name.indexOf('-') > -1) {
|
|
|
warnHyphenatedStyleName(name);
|
|
|
} else if (badVendoredStyleNamePattern.test(name)) {
|
|
|
warnBadVendoredStyleName(name);
|
|
|
} else if (badStyleValueWithSemicolonPattern.test(value)) {
|
|
|
warnStyleValueWithSemicolon(name, value);
|
|
|
}
|
|
|
|
|
|
if (typeof value === 'number') {
|
|
|
if (isNaN(value)) {
|
|
|
warnStyleValueIsNaN(name, value);
|
|
|
} else if (!isFinite(value)) {
|
|
|
warnStyleValueIsInfinity(name, value);
|
|
|
}
|
|
|
}
|
|
|
};
|
|
|
}
|
|
|
|
|
|
var warnValidStyle$1 = warnValidStyle;
|
|
|
|
|
|
/**
|
|
|
* Operations for dealing with CSS properties.
|
|
|
*/
|
|
|
|
|
|
/**
|
|
|
* This creates a string that is expected to be equivalent to the style
|
|
|
* attribute generated by server-side rendering. It by-passes warnings and
|
|
|
* security checks so it's not safe to use this value for anything other than
|
|
|
* comparison. It is only used in DEV for SSR validation.
|
|
|
*/
|
|
|
|
|
|
function createDangerousStringForStyles(styles) {
|
|
|
{
|
|
|
var serialized = '';
|
|
|
var delimiter = '';
|
|
|
|
|
|
for (var styleName in styles) {
|
|
|
if (!styles.hasOwnProperty(styleName)) {
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
var styleValue = styles[styleName];
|
|
|
|
|
|
if (styleValue != null) {
|
|
|
var isCustomProperty = styleName.indexOf('--') === 0;
|
|
|
serialized += delimiter + (isCustomProperty ? styleName : hyphenateStyleName(styleName)) + ':';
|
|
|
serialized += dangerousStyleValue(styleName, styleValue, isCustomProperty);
|
|
|
delimiter = ';';
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return serialized || null;
|
|
|
}
|
|
|
}
|
|
|
/**
|
|
|
* Sets the value for multiple styles on a node. If a value is specified as
|
|
|
* '' (empty string), the corresponding style property will be unset.
|
|
|
*
|
|
|
* @param {DOMElement} node
|
|
|
* @param {object} styles
|
|
|
*/
|
|
|
|
|
|
function setValueForStyles(node, styles) {
|
|
|
var style = node.style;
|
|
|
|
|
|
for (var styleName in styles) {
|
|
|
if (!styles.hasOwnProperty(styleName)) {
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
var isCustomProperty = styleName.indexOf('--') === 0;
|
|
|
|
|
|
{
|
|
|
if (!isCustomProperty) {
|
|
|
warnValidStyle$1(styleName, styles[styleName]);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var styleValue = dangerousStyleValue(styleName, styles[styleName], isCustomProperty);
|
|
|
|
|
|
if (styleName === 'float') {
|
|
|
styleName = 'cssFloat';
|
|
|
}
|
|
|
|
|
|
if (isCustomProperty) {
|
|
|
style.setProperty(styleName, styleValue);
|
|
|
} else {
|
|
|
style[styleName] = styleValue;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function isValueEmpty(value) {
|
|
|
return value == null || typeof value === 'boolean' || value === '';
|
|
|
}
|
|
|
/**
|
|
|
* Given {color: 'red', overflow: 'hidden'} returns {
|
|
|
* color: 'color',
|
|
|
* overflowX: 'overflow',
|
|
|
* overflowY: 'overflow',
|
|
|
* }. This can be read as "the overflowY property was set by the overflow
|
|
|
* shorthand". That is, the values are the property that each was derived from.
|
|
|
*/
|
|
|
|
|
|
|
|
|
function expandShorthandMap(styles) {
|
|
|
var expanded = {};
|
|
|
|
|
|
for (var key in styles) {
|
|
|
var longhands = shorthandToLonghand[key] || [key];
|
|
|
|
|
|
for (var i = 0; i < longhands.length; i++) {
|
|
|
expanded[longhands[i]] = key;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return expanded;
|
|
|
}
|
|
|
/**
|
|
|
* When mixing shorthand and longhand property names, we warn during updates if
|
|
|
* we expect an incorrect result to occur. In particular, we warn for:
|
|
|
*
|
|
|
* Updating a shorthand property (longhand gets overwritten):
|
|
|
* {font: 'foo', fontVariant: 'bar'} -> {font: 'baz', fontVariant: 'bar'}
|
|
|
* becomes .style.font = 'baz'
|
|
|
* Removing a shorthand property (longhand gets lost too):
|
|
|
* {font: 'foo', fontVariant: 'bar'} -> {fontVariant: 'bar'}
|
|
|
* becomes .style.font = ''
|
|
|
* Removing a longhand property (should revert to shorthand; doesn't):
|
|
|
* {font: 'foo', fontVariant: 'bar'} -> {font: 'foo'}
|
|
|
* becomes .style.fontVariant = ''
|
|
|
*/
|
|
|
|
|
|
|
|
|
function validateShorthandPropertyCollisionInDev(styleUpdates, nextStyles) {
|
|
|
{
|
|
|
if (!nextStyles) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
var expandedUpdates = expandShorthandMap(styleUpdates);
|
|
|
var expandedStyles = expandShorthandMap(nextStyles);
|
|
|
var warnedAbout = {};
|
|
|
|
|
|
for (var key in expandedUpdates) {
|
|
|
var originalKey = expandedUpdates[key];
|
|
|
var correctOriginalKey = expandedStyles[key];
|
|
|
|
|
|
if (correctOriginalKey && originalKey !== correctOriginalKey) {
|
|
|
var warningKey = originalKey + ',' + correctOriginalKey;
|
|
|
|
|
|
if (warnedAbout[warningKey]) {
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
warnedAbout[warningKey] = true;
|
|
|
|
|
|
error('%s a style property during rerender (%s) when a ' + 'conflicting property is set (%s) can lead to styling bugs. To ' + "avoid this, don't mix shorthand and non-shorthand properties " + 'for the same value; instead, replace the shorthand with ' + 'separate values.', isValueEmpty(styleUpdates[originalKey]) ? 'Removing' : 'Updating', originalKey, correctOriginalKey);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// For HTML, certain tags should omit their close tag. We keep a list for
|
|
|
// those special-case tags.
|
|
|
var omittedCloseTags = {
|
|
|
area: true,
|
|
|
base: true,
|
|
|
br: true,
|
|
|
col: true,
|
|
|
embed: true,
|
|
|
hr: true,
|
|
|
img: true,
|
|
|
input: true,
|
|
|
keygen: true,
|
|
|
link: true,
|
|
|
meta: true,
|
|
|
param: true,
|
|
|
source: true,
|
|
|
track: true,
|
|
|
wbr: true // NOTE: menuitem's close tag should be omitted, but that causes problems.
|
|
|
|
|
|
};
|
|
|
|
|
|
// `omittedCloseTags` except that `menuitem` should still have its closing tag.
|
|
|
|
|
|
var voidElementTags = assign({
|
|
|
menuitem: true
|
|
|
}, omittedCloseTags);
|
|
|
|
|
|
var HTML = '__html';
|
|
|
|
|
|
function assertValidProps(tag, props) {
|
|
|
if (!props) {
|
|
|
return;
|
|
|
} // Note the use of `==` which checks for null or undefined.
|
|
|
|
|
|
|
|
|
if (voidElementTags[tag]) {
|
|
|
if (props.children != null || props.dangerouslySetInnerHTML != null) {
|
|
|
throw new Error(tag + " is a void element tag and must neither have `children` nor " + 'use `dangerouslySetInnerHTML`.');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (props.dangerouslySetInnerHTML != null) {
|
|
|
if (props.children != null) {
|
|
|
throw new Error('Can only set one of `children` or `props.dangerouslySetInnerHTML`.');
|
|
|
}
|
|
|
|
|
|
if (typeof props.dangerouslySetInnerHTML !== 'object' || !(HTML in props.dangerouslySetInnerHTML)) {
|
|
|
throw new Error('`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. ' + 'Please visit https://reactjs.org/link/dangerously-set-inner-html ' + 'for more information.');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
{
|
|
|
if (!props.suppressContentEditableWarning && props.contentEditable && props.children != null) {
|
|
|
error('A component is `contentEditable` and contains `children` managed by ' + 'React. It is now your responsibility to guarantee that none of ' + 'those nodes are unexpectedly modified or duplicated. This is ' + 'probably not intentional.');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (props.style != null && typeof props.style !== 'object') {
|
|
|
throw new Error('The `style` prop expects a mapping from style properties to values, ' + "not a string. For example, style={{marginRight: spacing + 'em'}} when " + 'using JSX.');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function isCustomComponent(tagName, props) {
|
|
|
if (tagName.indexOf('-') === -1) {
|
|
|
return typeof props.is === 'string';
|
|
|
}
|
|
|
|
|
|
switch (tagName) {
|
|
|
// These are reserved SVG and MathML elements.
|
|
|
// We don't mind this list too much because we expect it to never grow.
|
|
|
// The alternative is to track the namespace in a few places which is convoluted.
|
|
|
// https://w3c.github.io/webcomponents/spec/custom/#custom-elements-core-concepts
|
|
|
case 'annotation-xml':
|
|
|
case 'color-profile':
|
|
|
case 'font-face':
|
|
|
case 'font-face-src':
|
|
|
case 'font-face-uri':
|
|
|
case 'font-face-format':
|
|
|
case 'font-face-name':
|
|
|
case 'missing-glyph':
|
|
|
return false;
|
|
|
|
|
|
default:
|
|
|
return true;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// When adding attributes to the HTML or SVG allowed attribute list, be sure to
|
|
|
// also add them to this module to ensure casing and incorrect name
|
|
|
// warnings.
|
|
|
var possibleStandardNames = {
|
|
|
// HTML
|
|
|
accept: 'accept',
|
|
|
acceptcharset: 'acceptCharset',
|
|
|
'accept-charset': 'acceptCharset',
|
|
|
accesskey: 'accessKey',
|
|
|
action: 'action',
|
|
|
allowfullscreen: 'allowFullScreen',
|
|
|
alt: 'alt',
|
|
|
as: 'as',
|
|
|
async: 'async',
|
|
|
autocapitalize: 'autoCapitalize',
|
|
|
autocomplete: 'autoComplete',
|
|
|
autocorrect: 'autoCorrect',
|
|
|
autofocus: 'autoFocus',
|
|
|
autoplay: 'autoPlay',
|
|
|
autosave: 'autoSave',
|
|
|
capture: 'capture',
|
|
|
cellpadding: 'cellPadding',
|
|
|
cellspacing: 'cellSpacing',
|
|
|
challenge: 'challenge',
|
|
|
charset: 'charSet',
|
|
|
checked: 'checked',
|
|
|
children: 'children',
|
|
|
cite: 'cite',
|
|
|
class: 'className',
|
|
|
classid: 'classID',
|
|
|
classname: 'className',
|
|
|
cols: 'cols',
|
|
|
colspan: 'colSpan',
|
|
|
content: 'content',
|
|
|
contenteditable: 'contentEditable',
|
|
|
contextmenu: 'contextMenu',
|
|
|
controls: 'controls',
|
|
|
controlslist: 'controlsList',
|
|
|
coords: 'coords',
|
|
|
crossorigin: 'crossOrigin',
|
|
|
dangerouslysetinnerhtml: 'dangerouslySetInnerHTML',
|
|
|
data: 'data',
|
|
|
datetime: 'dateTime',
|
|
|
default: 'default',
|
|
|
defaultchecked: 'defaultChecked',
|
|
|
defaultvalue: 'defaultValue',
|
|
|
defer: 'defer',
|
|
|
dir: 'dir',
|
|
|
disabled: 'disabled',
|
|
|
disablepictureinpicture: 'disablePictureInPicture',
|
|
|
disableremoteplayback: 'disableRemotePlayback',
|
|
|
download: 'download',
|
|
|
draggable: 'draggable',
|
|
|
enctype: 'encType',
|
|
|
enterkeyhint: 'enterKeyHint',
|
|
|
for: 'htmlFor',
|
|
|
form: 'form',
|
|
|
formmethod: 'formMethod',
|
|
|
formaction: 'formAction',
|
|
|
formenctype: 'formEncType',
|
|
|
formnovalidate: 'formNoValidate',
|
|
|
formtarget: 'formTarget',
|
|
|
frameborder: 'frameBorder',
|
|
|
headers: 'headers',
|
|
|
height: 'height',
|
|
|
hidden: 'hidden',
|
|
|
high: 'high',
|
|
|
href: 'href',
|
|
|
hreflang: 'hrefLang',
|
|
|
htmlfor: 'htmlFor',
|
|
|
httpequiv: 'httpEquiv',
|
|
|
'http-equiv': 'httpEquiv',
|
|
|
icon: 'icon',
|
|
|
id: 'id',
|
|
|
imagesizes: 'imageSizes',
|
|
|
imagesrcset: 'imageSrcSet',
|
|
|
innerhtml: 'innerHTML',
|
|
|
inputmode: 'inputMode',
|
|
|
integrity: 'integrity',
|
|
|
is: 'is',
|
|
|
itemid: 'itemID',
|
|
|
itemprop: 'itemProp',
|
|
|
itemref: 'itemRef',
|
|
|
itemscope: 'itemScope',
|
|
|
itemtype: 'itemType',
|
|
|
keyparams: 'keyParams',
|
|
|
keytype: 'keyType',
|
|
|
kind: 'kind',
|
|
|
label: 'label',
|
|
|
lang: 'lang',
|
|
|
list: 'list',
|
|
|
loop: 'loop',
|
|
|
low: 'low',
|
|
|
manifest: 'manifest',
|
|
|
marginwidth: 'marginWidth',
|
|
|
marginheight: 'marginHeight',
|
|
|
max: 'max',
|
|
|
maxlength: 'maxLength',
|
|
|
media: 'media',
|
|
|
mediagroup: 'mediaGroup',
|
|
|
method: 'method',
|
|
|
min: 'min',
|
|
|
minlength: 'minLength',
|
|
|
multiple: 'multiple',
|
|
|
muted: 'muted',
|
|
|
name: 'name',
|
|
|
nomodule: 'noModule',
|
|
|
nonce: 'nonce',
|
|
|
novalidate: 'noValidate',
|
|
|
open: 'open',
|
|
|
optimum: 'optimum',
|
|
|
pattern: 'pattern',
|
|
|
placeholder: 'placeholder',
|
|
|
playsinline: 'playsInline',
|
|
|
poster: 'poster',
|
|
|
preload: 'preload',
|
|
|
profile: 'profile',
|
|
|
radiogroup: 'radioGroup',
|
|
|
readonly: 'readOnly',
|
|
|
referrerpolicy: 'referrerPolicy',
|
|
|
rel: 'rel',
|
|
|
required: 'required',
|
|
|
reversed: 'reversed',
|
|
|
role: 'role',
|
|
|
rows: 'rows',
|
|
|
rowspan: 'rowSpan',
|
|
|
sandbox: 'sandbox',
|
|
|
scope: 'scope',
|
|
|
scoped: 'scoped',
|
|
|
scrolling: 'scrolling',
|
|
|
seamless: 'seamless',
|
|
|
selected: 'selected',
|
|
|
shape: 'shape',
|
|
|
size: 'size',
|
|
|
sizes: 'sizes',
|
|
|
span: 'span',
|
|
|
spellcheck: 'spellCheck',
|
|
|
src: 'src',
|
|
|
srcdoc: 'srcDoc',
|
|
|
srclang: 'srcLang',
|
|
|
srcset: 'srcSet',
|
|
|
start: 'start',
|
|
|
step: 'step',
|
|
|
style: 'style',
|
|
|
summary: 'summary',
|
|
|
tabindex: 'tabIndex',
|
|
|
target: 'target',
|
|
|
title: 'title',
|
|
|
type: 'type',
|
|
|
usemap: 'useMap',
|
|
|
value: 'value',
|
|
|
width: 'width',
|
|
|
wmode: 'wmode',
|
|
|
wrap: 'wrap',
|
|
|
// SVG
|
|
|
about: 'about',
|
|
|
accentheight: 'accentHeight',
|
|
|
'accent-height': 'accentHeight',
|
|
|
accumulate: 'accumulate',
|
|
|
additive: 'additive',
|
|
|
alignmentbaseline: 'alignmentBaseline',
|
|
|
'alignment-baseline': 'alignmentBaseline',
|
|
|
allowreorder: 'allowReorder',
|
|
|
alphabetic: 'alphabetic',
|
|
|
amplitude: 'amplitude',
|
|
|
arabicform: 'arabicForm',
|
|
|
'arabic-form': 'arabicForm',
|
|
|
ascent: 'ascent',
|
|
|
attributename: 'attributeName',
|
|
|
attributetype: 'attributeType',
|
|
|
autoreverse: 'autoReverse',
|
|
|
azimuth: 'azimuth',
|
|
|
basefrequency: 'baseFrequency',
|
|
|
baselineshift: 'baselineShift',
|
|
|
'baseline-shift': 'baselineShift',
|
|
|
baseprofile: 'baseProfile',
|
|
|
bbox: 'bbox',
|
|
|
begin: 'begin',
|
|
|
bias: 'bias',
|
|
|
by: 'by',
|
|
|
calcmode: 'calcMode',
|
|
|
capheight: 'capHeight',
|
|
|
'cap-height': 'capHeight',
|
|
|
clip: 'clip',
|
|
|
clippath: 'clipPath',
|
|
|
'clip-path': 'clipPath',
|
|
|
clippathunits: 'clipPathUnits',
|
|
|
cliprule: 'clipRule',
|
|
|
'clip-rule': 'clipRule',
|
|
|
color: 'color',
|
|
|
colorinterpolation: 'colorInterpolation',
|
|
|
'color-interpolation': 'colorInterpolation',
|
|
|
colorinterpolationfilters: 'colorInterpolationFilters',
|
|
|
'color-interpolation-filters': 'colorInterpolationFilters',
|
|
|
colorprofile: 'colorProfile',
|
|
|
'color-profile': 'colorProfile',
|
|
|
colorrendering: 'colorRendering',
|
|
|
'color-rendering': 'colorRendering',
|
|
|
contentscripttype: 'contentScriptType',
|
|
|
contentstyletype: 'contentStyleType',
|
|
|
cursor: 'cursor',
|
|
|
cx: 'cx',
|
|
|
cy: 'cy',
|
|
|
d: 'd',
|
|
|
datatype: 'datatype',
|
|
|
decelerate: 'decelerate',
|
|
|
descent: 'descent',
|
|
|
diffuseconstant: 'diffuseConstant',
|
|
|
direction: 'direction',
|
|
|
display: 'display',
|
|
|
divisor: 'divisor',
|
|
|
dominantbaseline: 'dominantBaseline',
|
|
|
'dominant-baseline': 'dominantBaseline',
|
|
|
dur: 'dur',
|
|
|
dx: 'dx',
|
|
|
dy: 'dy',
|
|
|
edgemode: 'edgeMode',
|
|
|
elevation: 'elevation',
|
|
|
enablebackground: 'enableBackground',
|
|
|
'enable-background': 'enableBackground',
|
|
|
end: 'end',
|
|
|
exponent: 'exponent',
|
|
|
externalresourcesrequired: 'externalResourcesRequired',
|
|
|
fill: 'fill',
|
|
|
fillopacity: 'fillOpacity',
|
|
|
'fill-opacity': 'fillOpacity',
|
|
|
fillrule: 'fillRule',
|
|
|
'fill-rule': 'fillRule',
|
|
|
filter: 'filter',
|
|
|
filterres: 'filterRes',
|
|
|
filterunits: 'filterUnits',
|
|
|
floodopacity: 'floodOpacity',
|
|
|
'flood-opacity': 'floodOpacity',
|
|
|
floodcolor: 'floodColor',
|
|
|
'flood-color': 'floodColor',
|
|
|
focusable: 'focusable',
|
|
|
fontfamily: 'fontFamily',
|
|
|
'font-family': 'fontFamily',
|
|
|
fontsize: 'fontSize',
|
|
|
'font-size': 'fontSize',
|
|
|
fontsizeadjust: 'fontSizeAdjust',
|
|
|
'font-size-adjust': 'fontSizeAdjust',
|
|
|
fontstretch: 'fontStretch',
|
|
|
'font-stretch': 'fontStretch',
|
|
|
fontstyle: 'fontStyle',
|
|
|
'font-style': 'fontStyle',
|
|
|
fontvariant: 'fontVariant',
|
|
|
'font-variant': 'fontVariant',
|
|
|
fontweight: 'fontWeight',
|
|
|
'font-weight': 'fontWeight',
|
|
|
format: 'format',
|
|
|
from: 'from',
|
|
|
fx: 'fx',
|
|
|
fy: 'fy',
|
|
|
g1: 'g1',
|
|
|
g2: 'g2',
|
|
|
glyphname: 'glyphName',
|
|
|
'glyph-name': 'glyphName',
|
|
|
glyphorientationhorizontal: 'glyphOrientationHorizontal',
|
|
|
'glyph-orientation-horizontal': 'glyphOrientationHorizontal',
|
|
|
glyphorientationvertical: 'glyphOrientationVertical',
|
|
|
'glyph-orientation-vertical': 'glyphOrientationVertical',
|
|
|
glyphref: 'glyphRef',
|
|
|
gradienttransform: 'gradientTransform',
|
|
|
gradientunits: 'gradientUnits',
|
|
|
hanging: 'hanging',
|
|
|
horizadvx: 'horizAdvX',
|
|
|
'horiz-adv-x': 'horizAdvX',
|
|
|
horizoriginx: 'horizOriginX',
|
|
|
'horiz-origin-x': 'horizOriginX',
|
|
|
ideographic: 'ideographic',
|
|
|
imagerendering: 'imageRendering',
|
|
|
'image-rendering': 'imageRendering',
|
|
|
in2: 'in2',
|
|
|
in: 'in',
|
|
|
inlist: 'inlist',
|
|
|
intercept: 'intercept',
|
|
|
k1: 'k1',
|
|
|
k2: 'k2',
|
|
|
k3: 'k3',
|
|
|
k4: 'k4',
|
|
|
k: 'k',
|
|
|
kernelmatrix: 'kernelMatrix',
|
|
|
kernelunitlength: 'kernelUnitLength',
|
|
|
kerning: 'kerning',
|
|
|
keypoints: 'keyPoints',
|
|
|
keysplines: 'keySplines',
|
|
|
keytimes: 'keyTimes',
|
|
|
lengthadjust: 'lengthAdjust',
|
|
|
letterspacing: 'letterSpacing',
|
|
|
'letter-spacing': 'letterSpacing',
|
|
|
lightingcolor: 'lightingColor',
|
|
|
'lighting-color': 'lightingColor',
|
|
|
limitingconeangle: 'limitingConeAngle',
|
|
|
local: 'local',
|
|
|
markerend: 'markerEnd',
|
|
|
'marker-end': 'markerEnd',
|
|
|
markerheight: 'markerHeight',
|
|
|
markermid: 'markerMid',
|
|
|
'marker-mid': 'markerMid',
|
|
|
markerstart: 'markerStart',
|
|
|
'marker-start': 'markerStart',
|
|
|
markerunits: 'markerUnits',
|
|
|
markerwidth: 'markerWidth',
|
|
|
mask: 'mask',
|
|
|
maskcontentunits: 'maskContentUnits',
|
|
|
maskunits: 'maskUnits',
|
|
|
mathematical: 'mathematical',
|
|
|
mode: 'mode',
|
|
|
numoctaves: 'numOctaves',
|
|
|
offset: 'offset',
|
|
|
opacity: 'opacity',
|
|
|
operator: 'operator',
|
|
|
order: 'order',
|
|
|
orient: 'orient',
|
|
|
orientation: 'orientation',
|
|
|
origin: 'origin',
|
|
|
overflow: 'overflow',
|
|
|
overlineposition: 'overlinePosition',
|
|
|
'overline-position': 'overlinePosition',
|
|
|
overlinethickness: 'overlineThickness',
|
|
|
'overline-thickness': 'overlineThickness',
|
|
|
paintorder: 'paintOrder',
|
|
|
'paint-order': 'paintOrder',
|
|
|
panose1: 'panose1',
|
|
|
'panose-1': 'panose1',
|
|
|
pathlength: 'pathLength',
|
|
|
patterncontentunits: 'patternContentUnits',
|
|
|
patterntransform: 'patternTransform',
|
|
|
patternunits: 'patternUnits',
|
|
|
pointerevents: 'pointerEvents',
|
|
|
'pointer-events': 'pointerEvents',
|
|
|
points: 'points',
|
|
|
pointsatx: 'pointsAtX',
|
|
|
pointsaty: 'pointsAtY',
|
|
|
pointsatz: 'pointsAtZ',
|
|
|
prefix: 'prefix',
|
|
|
preservealpha: 'preserveAlpha',
|
|
|
preserveaspectratio: 'preserveAspectRatio',
|
|
|
primitiveunits: 'primitiveUnits',
|
|
|
property: 'property',
|
|
|
r: 'r',
|
|
|
radius: 'radius',
|
|
|
refx: 'refX',
|
|
|
refy: 'refY',
|
|
|
renderingintent: 'renderingIntent',
|
|
|
'rendering-intent': 'renderingIntent',
|
|
|
repeatcount: 'repeatCount',
|
|
|
repeatdur: 'repeatDur',
|
|
|
requiredextensions: 'requiredExtensions',
|
|
|
requiredfeatures: 'requiredFeatures',
|
|
|
resource: 'resource',
|
|
|
restart: 'restart',
|
|
|
result: 'result',
|
|
|
results: 'results',
|
|
|
rotate: 'rotate',
|
|
|
rx: 'rx',
|
|
|
ry: 'ry',
|
|
|
scale: 'scale',
|
|
|
security: 'security',
|
|
|
seed: 'seed',
|
|
|
shaperendering: 'shapeRendering',
|
|
|
'shape-rendering': 'shapeRendering',
|
|
|
slope: 'slope',
|
|
|
spacing: 'spacing',
|
|
|
specularconstant: 'specularConstant',
|
|
|
specularexponent: 'specularExponent',
|
|
|
speed: 'speed',
|
|
|
spreadmethod: 'spreadMethod',
|
|
|
startoffset: 'startOffset',
|
|
|
stddeviation: 'stdDeviation',
|
|
|
stemh: 'stemh',
|
|
|
stemv: 'stemv',
|
|
|
stitchtiles: 'stitchTiles',
|
|
|
stopcolor: 'stopColor',
|
|
|
'stop-color': 'stopColor',
|
|
|
stopopacity: 'stopOpacity',
|
|
|
'stop-opacity': 'stopOpacity',
|
|
|
strikethroughposition: 'strikethroughPosition',
|
|
|
'strikethrough-position': 'strikethroughPosition',
|
|
|
strikethroughthickness: 'strikethroughThickness',
|
|
|
'strikethrough-thickness': 'strikethroughThickness',
|
|
|
string: 'string',
|
|
|
stroke: 'stroke',
|
|
|
strokedasharray: 'strokeDasharray',
|
|
|
'stroke-dasharray': 'strokeDasharray',
|
|
|
strokedashoffset: 'strokeDashoffset',
|
|
|
'stroke-dashoffset': 'strokeDashoffset',
|
|
|
strokelinecap: 'strokeLinecap',
|
|
|
'stroke-linecap': 'strokeLinecap',
|
|
|
strokelinejoin: 'strokeLinejoin',
|
|
|
'stroke-linejoin': 'strokeLinejoin',
|
|
|
strokemiterlimit: 'strokeMiterlimit',
|
|
|
'stroke-miterlimit': 'strokeMiterlimit',
|
|
|
strokewidth: 'strokeWidth',
|
|
|
'stroke-width': 'strokeWidth',
|
|
|
strokeopacity: 'strokeOpacity',
|
|
|
'stroke-opacity': 'strokeOpacity',
|
|
|
suppresscontenteditablewarning: 'suppressContentEditableWarning',
|
|
|
suppresshydrationwarning: 'suppressHydrationWarning',
|
|
|
surfacescale: 'surfaceScale',
|
|
|
systemlanguage: 'systemLanguage',
|
|
|
tablevalues: 'tableValues',
|
|
|
targetx: 'targetX',
|
|
|
targety: 'targetY',
|
|
|
textanchor: 'textAnchor',
|
|
|
'text-anchor': 'textAnchor',
|
|
|
textdecoration: 'textDecoration',
|
|
|
'text-decoration': 'textDecoration',
|
|
|
textlength: 'textLength',
|
|
|
textrendering: 'textRendering',
|
|
|
'text-rendering': 'textRendering',
|
|
|
to: 'to',
|
|
|
transform: 'transform',
|
|
|
typeof: 'typeof',
|
|
|
u1: 'u1',
|
|
|
u2: 'u2',
|
|
|
underlineposition: 'underlinePosition',
|
|
|
'underline-position': 'underlinePosition',
|
|
|
underlinethickness: 'underlineThickness',
|
|
|
'underline-thickness': 'underlineThickness',
|
|
|
unicode: 'unicode',
|
|
|
unicodebidi: 'unicodeBidi',
|
|
|
'unicode-bidi': 'unicodeBidi',
|
|
|
unicoderange: 'unicodeRange',
|
|
|
'unicode-range': 'unicodeRange',
|
|
|
unitsperem: 'unitsPerEm',
|
|
|
'units-per-em': 'unitsPerEm',
|
|
|
unselectable: 'unselectable',
|
|
|
valphabetic: 'vAlphabetic',
|
|
|
'v-alphabetic': 'vAlphabetic',
|
|
|
values: 'values',
|
|
|
vectoreffect: 'vectorEffect',
|
|
|
'vector-effect': 'vectorEffect',
|
|
|
version: 'version',
|
|
|
vertadvy: 'vertAdvY',
|
|
|
'vert-adv-y': 'vertAdvY',
|
|
|
vertoriginx: 'vertOriginX',
|
|
|
'vert-origin-x': 'vertOriginX',
|
|
|
vertoriginy: 'vertOriginY',
|
|
|
'vert-origin-y': 'vertOriginY',
|
|
|
vhanging: 'vHanging',
|
|
|
'v-hanging': 'vHanging',
|
|
|
videographic: 'vIdeographic',
|
|
|
'v-ideographic': 'vIdeographic',
|
|
|
viewbox: 'viewBox',
|
|
|
viewtarget: 'viewTarget',
|
|
|
visibility: 'visibility',
|
|
|
vmathematical: 'vMathematical',
|
|
|
'v-mathematical': 'vMathematical',
|
|
|
vocab: 'vocab',
|
|
|
widths: 'widths',
|
|
|
wordspacing: 'wordSpacing',
|
|
|
'word-spacing': 'wordSpacing',
|
|
|
writingmode: 'writingMode',
|
|
|
'writing-mode': 'writingMode',
|
|
|
x1: 'x1',
|
|
|
x2: 'x2',
|
|
|
x: 'x',
|
|
|
xchannelselector: 'xChannelSelector',
|
|
|
xheight: 'xHeight',
|
|
|
'x-height': 'xHeight',
|
|
|
xlinkactuate: 'xlinkActuate',
|
|
|
'xlink:actuate': 'xlinkActuate',
|
|
|
xlinkarcrole: 'xlinkArcrole',
|
|
|
'xlink:arcrole': 'xlinkArcrole',
|
|
|
xlinkhref: 'xlinkHref',
|
|
|
'xlink:href': 'xlinkHref',
|
|
|
xlinkrole: 'xlinkRole',
|
|
|
'xlink:role': 'xlinkRole',
|
|
|
xlinkshow: 'xlinkShow',
|
|
|
'xlink:show': 'xlinkShow',
|
|
|
xlinktitle: 'xlinkTitle',
|
|
|
'xlink:title': 'xlinkTitle',
|
|
|
xlinktype: 'xlinkType',
|
|
|
'xlink:type': 'xlinkType',
|
|
|
xmlbase: 'xmlBase',
|
|
|
'xml:base': 'xmlBase',
|
|
|
xmllang: 'xmlLang',
|
|
|
'xml:lang': 'xmlLang',
|
|
|
xmlns: 'xmlns',
|
|
|
'xml:space': 'xmlSpace',
|
|
|
xmlnsxlink: 'xmlnsXlink',
|
|
|
'xmlns:xlink': 'xmlnsXlink',
|
|
|
xmlspace: 'xmlSpace',
|
|
|
y1: 'y1',
|
|
|
y2: 'y2',
|
|
|
y: 'y',
|
|
|
ychannelselector: 'yChannelSelector',
|
|
|
z: 'z',
|
|
|
zoomandpan: 'zoomAndPan'
|
|
|
};
|
|
|
|
|
|
var ariaProperties = {
|
|
|
'aria-current': 0,
|
|
|
// state
|
|
|
'aria-description': 0,
|
|
|
'aria-details': 0,
|
|
|
'aria-disabled': 0,
|
|
|
// state
|
|
|
'aria-hidden': 0,
|
|
|
// state
|
|
|
'aria-invalid': 0,
|
|
|
// state
|
|
|
'aria-keyshortcuts': 0,
|
|
|
'aria-label': 0,
|
|
|
'aria-roledescription': 0,
|
|
|
// Widget Attributes
|
|
|
'aria-autocomplete': 0,
|
|
|
'aria-checked': 0,
|
|
|
'aria-expanded': 0,
|
|
|
'aria-haspopup': 0,
|
|
|
'aria-level': 0,
|
|
|
'aria-modal': 0,
|
|
|
'aria-multiline': 0,
|
|
|
'aria-multiselectable': 0,
|
|
|
'aria-orientation': 0,
|
|
|
'aria-placeholder': 0,
|
|
|
'aria-pressed': 0,
|
|
|
'aria-readonly': 0,
|
|
|
'aria-required': 0,
|
|
|
'aria-selected': 0,
|
|
|
'aria-sort': 0,
|
|
|
'aria-valuemax': 0,
|
|
|
'aria-valuemin': 0,
|
|
|
'aria-valuenow': 0,
|
|
|
'aria-valuetext': 0,
|
|
|
// Live Region Attributes
|
|
|
'aria-atomic': 0,
|
|
|
'aria-busy': 0,
|
|
|
'aria-live': 0,
|
|
|
'aria-relevant': 0,
|
|
|
// Drag-and-Drop Attributes
|
|
|
'aria-dropeffect': 0,
|
|
|
'aria-grabbed': 0,
|
|
|
// Relationship Attributes
|
|
|
'aria-activedescendant': 0,
|
|
|
'aria-colcount': 0,
|
|
|
'aria-colindex': 0,
|
|
|
'aria-colspan': 0,
|
|
|
'aria-controls': 0,
|
|
|
'aria-describedby': 0,
|
|
|
'aria-errormessage': 0,
|
|
|
'aria-flowto': 0,
|
|
|
'aria-labelledby': 0,
|
|
|
'aria-owns': 0,
|
|
|
'aria-posinset': 0,
|
|
|
'aria-rowcount': 0,
|
|
|
'aria-rowindex': 0,
|
|
|
'aria-rowspan': 0,
|
|
|
'aria-setsize': 0
|
|
|
};
|
|
|
|
|
|
var warnedProperties = {};
|
|
|
var rARIA = new RegExp('^(aria)-[' + ATTRIBUTE_NAME_CHAR + ']*$');
|
|
|
var rARIACamel = new RegExp('^(aria)[A-Z][' + ATTRIBUTE_NAME_CHAR + ']*$');
|
|
|
|
|
|
function validateProperty(tagName, name) {
|
|
|
{
|
|
|
if (hasOwnProperty.call(warnedProperties, name) && warnedProperties[name]) {
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
if (rARIACamel.test(name)) {
|
|
|
var ariaName = 'aria-' + name.slice(4).toLowerCase();
|
|
|
var correctName = ariaProperties.hasOwnProperty(ariaName) ? ariaName : null; // If this is an aria-* attribute, but is not listed in the known DOM
|
|
|
// DOM properties, then it is an invalid aria-* attribute.
|
|
|
|
|
|
if (correctName == null) {
|
|
|
error('Invalid ARIA attribute `%s`. ARIA attributes follow the pattern aria-* and must be lowercase.', name);
|
|
|
|
|
|
warnedProperties[name] = true;
|
|
|
return true;
|
|
|
} // aria-* attributes should be lowercase; suggest the lowercase version.
|
|
|
|
|
|
|
|
|
if (name !== correctName) {
|
|
|
error('Invalid ARIA attribute `%s`. Did you mean `%s`?', name, correctName);
|
|
|
|
|
|
warnedProperties[name] = true;
|
|
|
return true;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (rARIA.test(name)) {
|
|
|
var lowerCasedName = name.toLowerCase();
|
|
|
var standardName = ariaProperties.hasOwnProperty(lowerCasedName) ? lowerCasedName : null; // If this is an aria-* attribute, but is not listed in the known DOM
|
|
|
// DOM properties, then it is an invalid aria-* attribute.
|
|
|
|
|
|
if (standardName == null) {
|
|
|
warnedProperties[name] = true;
|
|
|
return false;
|
|
|
} // aria-* attributes should be lowercase; suggest the lowercase version.
|
|
|
|
|
|
|
|
|
if (name !== standardName) {
|
|
|
error('Unknown ARIA attribute `%s`. Did you mean `%s`?', name, standardName);
|
|
|
|
|
|
warnedProperties[name] = true;
|
|
|
return true;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
function warnInvalidARIAProps(type, props) {
|
|
|
{
|
|
|
var invalidProps = [];
|
|
|
|
|
|
for (var key in props) {
|
|
|
var isValid = validateProperty(type, key);
|
|
|
|
|
|
if (!isValid) {
|
|
|
invalidProps.push(key);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var unknownPropString = invalidProps.map(function (prop) {
|
|
|
return '`' + prop + '`';
|
|
|
}).join(', ');
|
|
|
|
|
|
if (invalidProps.length === 1) {
|
|
|
error('Invalid aria prop %s on <%s> tag. ' + 'For details, see https://reactjs.org/link/invalid-aria-props', unknownPropString, type);
|
|
|
} else if (invalidProps.length > 1) {
|
|
|
error('Invalid aria props %s on <%s> tag. ' + 'For details, see https://reactjs.org/link/invalid-aria-props', unknownPropString, type);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function validateProperties(type, props) {
|
|
|
if (isCustomComponent(type, props)) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
warnInvalidARIAProps(type, props);
|
|
|
}
|
|
|
|
|
|
var didWarnValueNull = false;
|
|
|
function validateProperties$1(type, props) {
|
|
|
{
|
|
|
if (type !== 'input' && type !== 'textarea' && type !== 'select') {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (props != null && props.value === null && !didWarnValueNull) {
|
|
|
didWarnValueNull = true;
|
|
|
|
|
|
if (type === 'select' && props.multiple) {
|
|
|
error('`value` prop on `%s` should not be null. ' + 'Consider using an empty array when `multiple` is set to `true` ' + 'to clear the component or `undefined` for uncontrolled components.', type);
|
|
|
} else {
|
|
|
error('`value` prop on `%s` should not be null. ' + 'Consider using an empty string to clear the component or `undefined` ' + 'for uncontrolled components.', type);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var validateProperty$1 = function () {};
|
|
|
|
|
|
{
|
|
|
var warnedProperties$1 = {};
|
|
|
var EVENT_NAME_REGEX = /^on./;
|
|
|
var INVALID_EVENT_NAME_REGEX = /^on[^A-Z]/;
|
|
|
var rARIA$1 = new RegExp('^(aria)-[' + ATTRIBUTE_NAME_CHAR + ']*$');
|
|
|
var rARIACamel$1 = new RegExp('^(aria)[A-Z][' + ATTRIBUTE_NAME_CHAR + ']*$');
|
|
|
|
|
|
validateProperty$1 = function (tagName, name, value, eventRegistry) {
|
|
|
if (hasOwnProperty.call(warnedProperties$1, name) && warnedProperties$1[name]) {
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
var lowerCasedName = name.toLowerCase();
|
|
|
|
|
|
if (lowerCasedName === 'onfocusin' || lowerCasedName === 'onfocusout') {
|
|
|
error('React uses onFocus and onBlur instead of onFocusIn and onFocusOut. ' + 'All React events are normalized to bubble, so onFocusIn and onFocusOut ' + 'are not needed/supported by React.');
|
|
|
|
|
|
warnedProperties$1[name] = true;
|
|
|
return true;
|
|
|
} // We can't rely on the event system being injected on the server.
|
|
|
|
|
|
|
|
|
if (eventRegistry != null) {
|
|
|
var registrationNameDependencies = eventRegistry.registrationNameDependencies,
|
|
|
possibleRegistrationNames = eventRegistry.possibleRegistrationNames;
|
|
|
|
|
|
if (registrationNameDependencies.hasOwnProperty(name)) {
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
var registrationName = possibleRegistrationNames.hasOwnProperty(lowerCasedName) ? possibleRegistrationNames[lowerCasedName] : null;
|
|
|
|
|
|
if (registrationName != null) {
|
|
|
error('Invalid event handler property `%s`. Did you mean `%s`?', name, registrationName);
|
|
|
|
|
|
warnedProperties$1[name] = true;
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
if (EVENT_NAME_REGEX.test(name)) {
|
|
|
error('Unknown event handler property `%s`. It will be ignored.', name);
|
|
|
|
|
|
warnedProperties$1[name] = true;
|
|
|
return true;
|
|
|
}
|
|
|
} else if (EVENT_NAME_REGEX.test(name)) {
|
|
|
// If no event plugins have been injected, we are in a server environment.
|
|
|
// So we can't tell if the event name is correct for sure, but we can filter
|
|
|
// out known bad ones like `onclick`. We can't suggest a specific replacement though.
|
|
|
if (INVALID_EVENT_NAME_REGEX.test(name)) {
|
|
|
error('Invalid event handler property `%s`. ' + 'React events use the camelCase naming convention, for example `onClick`.', name);
|
|
|
}
|
|
|
|
|
|
warnedProperties$1[name] = true;
|
|
|
return true;
|
|
|
} // Let the ARIA attribute hook validate ARIA attributes
|
|
|
|
|
|
|
|
|
if (rARIA$1.test(name) || rARIACamel$1.test(name)) {
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
if (lowerCasedName === 'innerhtml') {
|
|
|
error('Directly setting property `innerHTML` is not permitted. ' + 'For more information, lookup documentation on `dangerouslySetInnerHTML`.');
|
|
|
|
|
|
warnedProperties$1[name] = true;
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
if (lowerCasedName === 'aria') {
|
|
|
error('The `aria` attribute is reserved for future use in React. ' + 'Pass individual `aria-` attributes instead.');
|
|
|
|
|
|
warnedProperties$1[name] = true;
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
if (lowerCasedName === 'is' && value !== null && value !== undefined && typeof value !== 'string') {
|
|
|
error('Received a `%s` for a string attribute `is`. If this is expected, cast ' + 'the value to a string.', typeof value);
|
|
|
|
|
|
warnedProperties$1[name] = true;
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
if (typeof value === 'number' && isNaN(value)) {
|
|
|
error('Received NaN for the `%s` attribute. If this is expected, cast ' + 'the value to a string.', name);
|
|
|
|
|
|
warnedProperties$1[name] = true;
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
var propertyInfo = getPropertyInfo(name);
|
|
|
var isReserved = propertyInfo !== null && propertyInfo.type === RESERVED; // Known attributes should match the casing specified in the property config.
|
|
|
|
|
|
if (possibleStandardNames.hasOwnProperty(lowerCasedName)) {
|
|
|
var standardName = possibleStandardNames[lowerCasedName];
|
|
|
|
|
|
if (standardName !== name) {
|
|
|
error('Invalid DOM property `%s`. Did you mean `%s`?', name, standardName);
|
|
|
|
|
|
warnedProperties$1[name] = true;
|
|
|
return true;
|
|
|
}
|
|
|
} else if (!isReserved && name !== lowerCasedName) {
|
|
|
// Unknown attributes should have lowercase casing since that's how they
|
|
|
// will be cased anyway with server rendering.
|
|
|
error('React does not recognize the `%s` prop on a DOM element. If you ' + 'intentionally want it to appear in the DOM as a custom ' + 'attribute, spell it as lowercase `%s` instead. ' + 'If you accidentally passed it from a parent component, remove ' + 'it from the DOM element.', name, lowerCasedName);
|
|
|
|
|
|
warnedProperties$1[name] = true;
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
if (typeof value === 'boolean' && shouldRemoveAttributeWithWarning(name, value, propertyInfo, false)) {
|
|
|
if (value) {
|
|
|
error('Received `%s` for a non-boolean attribute `%s`.\n\n' + 'If you want to write it to the DOM, pass a string instead: ' + '%s="%s" or %s={value.toString()}.', value, name, name, value, name);
|
|
|
} else {
|
|
|
error('Received `%s` for a non-boolean attribute `%s`.\n\n' + 'If you want to write it to the DOM, pass a string instead: ' + '%s="%s" or %s={value.toString()}.\n\n' + 'If you used to conditionally omit it with %s={condition && value}, ' + 'pass %s={condition ? value : undefined} instead.', value, name, name, value, name, name, name);
|
|
|
}
|
|
|
|
|
|
warnedProperties$1[name] = true;
|
|
|
return true;
|
|
|
} // Now that we've validated casing, do not validate
|
|
|
// data types for reserved props
|
|
|
|
|
|
|
|
|
if (isReserved) {
|
|
|
return true;
|
|
|
} // Warn when a known attribute is a bad type
|
|
|
|
|
|
|
|
|
if (shouldRemoveAttributeWithWarning(name, value, propertyInfo, false)) {
|
|
|
warnedProperties$1[name] = true;
|
|
|
return false;
|
|
|
} // Warn when passing the strings 'false' or 'true' into a boolean prop
|
|
|
|
|
|
|
|
|
if ((value === 'false' || value === 'true') && propertyInfo !== null && propertyInfo.type === BOOLEAN) {
|
|
|
error('Received the string `%s` for the boolean attribute `%s`. ' + '%s ' + 'Did you mean %s={%s}?', value, name, value === 'false' ? 'The browser will interpret it as a truthy value.' : 'Although this works, it will not work as expected if you pass the string "false".', name, value);
|
|
|
|
|
|
warnedProperties$1[name] = true;
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
return true;
|
|
|
};
|
|
|
}
|
|
|
|
|
|
var warnUnknownProperties = function (type, props, eventRegistry) {
|
|
|
{
|
|
|
var unknownProps = [];
|
|
|
|
|
|
for (var key in props) {
|
|
|
var isValid = validateProperty$1(type, key, props[key], eventRegistry);
|
|
|
|
|
|
if (!isValid) {
|
|
|
unknownProps.push(key);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var unknownPropString = unknownProps.map(function (prop) {
|
|
|
return '`' + prop + '`';
|
|
|
}).join(', ');
|
|
|
|
|
|
if (unknownProps.length === 1) {
|
|
|
error('Invalid value for prop %s on <%s> tag. Either remove it from the element, ' + 'or pass a string or number value to keep it in the DOM. ' + 'For details, see https://reactjs.org/link/attribute-behavior ', unknownPropString, type);
|
|
|
} else if (unknownProps.length > 1) {
|
|
|
error('Invalid values for props %s on <%s> tag. Either remove them from the element, ' + 'or pass a string or number value to keep them in the DOM. ' + 'For details, see https://reactjs.org/link/attribute-behavior ', unknownPropString, type);
|
|
|
}
|
|
|
}
|
|
|
};
|
|
|
|
|
|
function validateProperties$2(type, props, eventRegistry) {
|
|
|
if (isCustomComponent(type, props)) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
warnUnknownProperties(type, props, eventRegistry);
|
|
|
}
|
|
|
|
|
|
var IS_EVENT_HANDLE_NON_MANAGED_NODE = 1;
|
|
|
var IS_NON_DELEGATED = 1 << 1;
|
|
|
var IS_CAPTURE_PHASE = 1 << 2;
|
|
|
// set to LEGACY_FB_SUPPORT. LEGACY_FB_SUPPORT only gets set when
|
|
|
// we call willDeferLaterForLegacyFBSupport, thus not bailing out
|
|
|
// will result in endless cycles like an infinite loop.
|
|
|
// We also don't want to defer during event replaying.
|
|
|
|
|
|
var SHOULD_NOT_PROCESS_POLYFILL_EVENT_PLUGINS = IS_EVENT_HANDLE_NON_MANAGED_NODE | IS_NON_DELEGATED | IS_CAPTURE_PHASE;
|
|
|
|
|
|
// This exists to avoid circular dependency between ReactDOMEventReplaying
|
|
|
// and DOMPluginEventSystem.
|
|
|
var currentReplayingEvent = null;
|
|
|
function setReplayingEvent(event) {
|
|
|
{
|
|
|
if (currentReplayingEvent !== null) {
|
|
|
error('Expected currently replaying event to be null. This error ' + 'is likely caused by a bug in React. Please file an issue.');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
currentReplayingEvent = event;
|
|
|
}
|
|
|
function resetReplayingEvent() {
|
|
|
{
|
|
|
if (currentReplayingEvent === null) {
|
|
|
error('Expected currently replaying event to not be null. This error ' + 'is likely caused by a bug in React. Please file an issue.');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
currentReplayingEvent = null;
|
|
|
}
|
|
|
function isReplayingEvent(event) {
|
|
|
return event === currentReplayingEvent;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Gets the target node from a native browser event by accounting for
|
|
|
* inconsistencies in browser DOM APIs.
|
|
|
*
|
|
|
* @param {object} nativeEvent Native browser event.
|
|
|
* @return {DOMEventTarget} Target node.
|
|
|
*/
|
|
|
|
|
|
function getEventTarget(nativeEvent) {
|
|
|
// Fallback to nativeEvent.srcElement for IE9
|
|
|
// https://github.com/facebook/react/issues/12506
|
|
|
var target = nativeEvent.target || nativeEvent.srcElement || window; // Normalize SVG <use> element events #4963
|
|
|
|
|
|
if (target.correspondingUseElement) {
|
|
|
target = target.correspondingUseElement;
|
|
|
} // Safari may fire events on text nodes (Node.TEXT_NODE is 3).
|
|
|
// @see http://www.quirksmode.org/js/events_properties.html
|
|
|
|
|
|
|
|
|
return target.nodeType === TEXT_NODE ? target.parentNode : target;
|
|
|
}
|
|
|
|
|
|
var restoreImpl = null;
|
|
|
var restoreTarget = null;
|
|
|
var restoreQueue = null;
|
|
|
|
|
|
function restoreStateOfTarget(target) {
|
|
|
// We perform this translation at the end of the event loop so that we
|
|
|
// always receive the correct fiber here
|
|
|
var internalInstance = getInstanceFromNode(target);
|
|
|
|
|
|
if (!internalInstance) {
|
|
|
// Unmounted
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (typeof restoreImpl !== 'function') {
|
|
|
throw new Error('setRestoreImplementation() needs to be called to handle a target for controlled ' + 'events. This error is likely caused by a bug in React. Please file an issue.');
|
|
|
}
|
|
|
|
|
|
var stateNode = internalInstance.stateNode; // Guard against Fiber being unmounted.
|
|
|
|
|
|
if (stateNode) {
|
|
|
var _props = getFiberCurrentPropsFromNode(stateNode);
|
|
|
|
|
|
restoreImpl(internalInstance.stateNode, internalInstance.type, _props);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function setRestoreImplementation(impl) {
|
|
|
restoreImpl = impl;
|
|
|
}
|
|
|
function enqueueStateRestore(target) {
|
|
|
if (restoreTarget) {
|
|
|
if (restoreQueue) {
|
|
|
restoreQueue.push(target);
|
|
|
} else {
|
|
|
restoreQueue = [target];
|
|
|
}
|
|
|
} else {
|
|
|
restoreTarget = target;
|
|
|
}
|
|
|
}
|
|
|
function needsStateRestore() {
|
|
|
return restoreTarget !== null || restoreQueue !== null;
|
|
|
}
|
|
|
function restoreStateIfNeeded() {
|
|
|
if (!restoreTarget) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
var target = restoreTarget;
|
|
|
var queuedTargets = restoreQueue;
|
|
|
restoreTarget = null;
|
|
|
restoreQueue = null;
|
|
|
restoreStateOfTarget(target);
|
|
|
|
|
|
if (queuedTargets) {
|
|
|
for (var i = 0; i < queuedTargets.length; i++) {
|
|
|
restoreStateOfTarget(queuedTargets[i]);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// the renderer. Such as when we're dispatching events or if third party
|
|
|
// libraries need to call batchedUpdates. Eventually, this API will go away when
|
|
|
// everything is batched by default. We'll then have a similar API to opt-out of
|
|
|
// scheduled work and instead do synchronous work.
|
|
|
// Defaults
|
|
|
|
|
|
var batchedUpdatesImpl = function (fn, bookkeeping) {
|
|
|
return fn(bookkeeping);
|
|
|
};
|
|
|
|
|
|
var flushSyncImpl = function () {};
|
|
|
|
|
|
var isInsideEventHandler = false;
|
|
|
|
|
|
function finishEventHandler() {
|
|
|
// Here we wait until all updates have propagated, which is important
|
|
|
// when using controlled components within layers:
|
|
|
// https://github.com/facebook/react/issues/1698
|
|
|
// Then we restore state of any controlled component.
|
|
|
var controlledComponentsHavePendingUpdates = needsStateRestore();
|
|
|
|
|
|
if (controlledComponentsHavePendingUpdates) {
|
|
|
// If a controlled event was fired, we may need to restore the state of
|
|
|
// the DOM node back to the controlled value. This is necessary when React
|
|
|
// bails out of the update without touching the DOM.
|
|
|
// TODO: Restore state in the microtask, after the discrete updates flush,
|
|
|
// instead of early flushing them here.
|
|
|
flushSyncImpl();
|
|
|
restoreStateIfNeeded();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function batchedUpdates(fn, a, b) {
|
|
|
if (isInsideEventHandler) {
|
|
|
// If we are currently inside another batch, we need to wait until it
|
|
|
// fully completes before restoring state.
|
|
|
return fn(a, b);
|
|
|
}
|
|
|
|
|
|
isInsideEventHandler = true;
|
|
|
|
|
|
try {
|
|
|
return batchedUpdatesImpl(fn, a, b);
|
|
|
} finally {
|
|
|
isInsideEventHandler = false;
|
|
|
finishEventHandler();
|
|
|
}
|
|
|
} // TODO: Replace with flushSync
|
|
|
function setBatchingImplementation(_batchedUpdatesImpl, _discreteUpdatesImpl, _flushSyncImpl) {
|
|
|
batchedUpdatesImpl = _batchedUpdatesImpl;
|
|
|
flushSyncImpl = _flushSyncImpl;
|
|
|
}
|
|
|
|
|
|
function isInteractive(tag) {
|
|
|
return tag === 'button' || tag === 'input' || tag === 'select' || tag === 'textarea';
|
|
|
}
|
|
|
|
|
|
function shouldPreventMouseEvent(name, type, props) {
|
|
|
switch (name) {
|
|
|
case 'onClick':
|
|
|
case 'onClickCapture':
|
|
|
case 'onDoubleClick':
|
|
|
case 'onDoubleClickCapture':
|
|
|
case 'onMouseDown':
|
|
|
case 'onMouseDownCapture':
|
|
|
case 'onMouseMove':
|
|
|
case 'onMouseMoveCapture':
|
|
|
case 'onMouseUp':
|
|
|
case 'onMouseUpCapture':
|
|
|
case 'onMouseEnter':
|
|
|
return !!(props.disabled && isInteractive(type));
|
|
|
|
|
|
default:
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
/**
|
|
|
* @param {object} inst The instance, which is the source of events.
|
|
|
* @param {string} registrationName Name of listener (e.g. `onClick`).
|
|
|
* @return {?function} The stored callback.
|
|
|
*/
|
|
|
|
|
|
|
|
|
function getListener(inst, registrationName) {
|
|
|
var stateNode = inst.stateNode;
|
|
|
|
|
|
if (stateNode === null) {
|
|
|
// Work in progress (ex: onload events in incremental mode).
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
var props = getFiberCurrentPropsFromNode(stateNode);
|
|
|
|
|
|
if (props === null) {
|
|
|
// Work in progress.
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
var listener = props[registrationName];
|
|
|
|
|
|
if (shouldPreventMouseEvent(registrationName, inst.type, props)) {
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
if (listener && typeof listener !== 'function') {
|
|
|
throw new Error("Expected `" + registrationName + "` listener to be a function, instead got a value of `" + typeof listener + "` type.");
|
|
|
}
|
|
|
|
|
|
return listener;
|
|
|
}
|
|
|
|
|
|
var passiveBrowserEventsSupported = false; // Check if browser support events with passive listeners
|
|
|
// https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support
|
|
|
|
|
|
if (canUseDOM) {
|
|
|
try {
|
|
|
var options = {}; // $FlowFixMe: Ignore Flow complaining about needing a value
|
|
|
|
|
|
Object.defineProperty(options, 'passive', {
|
|
|
get: function () {
|
|
|
passiveBrowserEventsSupported = true;
|
|
|
}
|
|
|
});
|
|
|
window.addEventListener('test', options, options);
|
|
|
window.removeEventListener('test', options, options);
|
|
|
} catch (e) {
|
|
|
passiveBrowserEventsSupported = false;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function invokeGuardedCallbackProd(name, func, context, a, b, c, d, e, f) {
|
|
|
var funcArgs = Array.prototype.slice.call(arguments, 3);
|
|
|
|
|
|
try {
|
|
|
func.apply(context, funcArgs);
|
|
|
} catch (error) {
|
|
|
this.onError(error);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var invokeGuardedCallbackImpl = invokeGuardedCallbackProd;
|
|
|
|
|
|
{
|
|
|
// In DEV mode, we swap out invokeGuardedCallback for a special version
|
|
|
// that plays more nicely with the browser's DevTools. The idea is to preserve
|
|
|
// "Pause on exceptions" behavior. Because React wraps all user-provided
|
|
|
// functions in invokeGuardedCallback, and the production version of
|
|
|
// invokeGuardedCallback uses a try-catch, all user exceptions are treated
|
|
|
// like caught exceptions, and the DevTools won't pause unless the developer
|
|
|
// takes the extra step of enabling pause on caught exceptions. This is
|
|
|
// unintuitive, though, because even though React has caught the error, from
|
|
|
// the developer's perspective, the error is uncaught.
|
|
|
//
|
|
|
// To preserve the expected "Pause on exceptions" behavior, we don't use a
|
|
|
// try-catch in DEV. Instead, we synchronously dispatch a fake event to a fake
|
|
|
// DOM node, and call the user-provided callback from inside an event handler
|
|
|
// for that fake event. If the callback throws, the error is "captured" using
|
|
|
// a global event handler. But because the error happens in a different
|
|
|
// event loop context, it does not interrupt the normal program flow.
|
|
|
// Effectively, this gives us try-catch behavior without actually using
|
|
|
// try-catch. Neat!
|
|
|
// Check that the browser supports the APIs we need to implement our special
|
|
|
// DEV version of invokeGuardedCallback
|
|
|
if (typeof window !== 'undefined' && typeof window.dispatchEvent === 'function' && typeof document !== 'undefined' && typeof document.createEvent === 'function') {
|
|
|
var fakeNode = document.createElement('react');
|
|
|
|
|
|
invokeGuardedCallbackImpl = function invokeGuardedCallbackDev(name, func, context, a, b, c, d, e, f) {
|
|
|
// If document doesn't exist we know for sure we will crash in this method
|
|
|
// when we call document.createEvent(). However this can cause confusing
|
|
|
// errors: https://github.com/facebook/create-react-app/issues/3482
|
|
|
// So we preemptively throw with a better message instead.
|
|
|
if (typeof document === 'undefined' || document === null) {
|
|
|
throw new Error('The `document` global was defined when React was initialized, but is not ' + 'defined anymore. This can happen in a test environment if a component ' + 'schedules an update from an asynchronous callback, but the test has already ' + 'finished running. To solve this, you can either unmount the component at ' + 'the end of your test (and ensure that any asynchronous operations get ' + 'canceled in `componentWillUnmount`), or you can change the test itself ' + 'to be asynchronous.');
|
|
|
}
|
|
|
|
|
|
var evt = document.createEvent('Event');
|
|
|
var didCall = false; // Keeps track of whether the user-provided callback threw an error. We
|
|
|
// set this to true at the beginning, then set it to false right after
|
|
|
// calling the function. If the function errors, `didError` will never be
|
|
|
// set to false. This strategy works even if the browser is flaky and
|
|
|
// fails to call our global error handler, because it doesn't rely on
|
|
|
// the error event at all.
|
|
|
|
|
|
var didError = true; // Keeps track of the value of window.event so that we can reset it
|
|
|
// during the callback to let user code access window.event in the
|
|
|
// browsers that support it.
|
|
|
|
|
|
var windowEvent = window.event; // Keeps track of the descriptor of window.event to restore it after event
|
|
|
// dispatching: https://github.com/facebook/react/issues/13688
|
|
|
|
|
|
var windowEventDescriptor = Object.getOwnPropertyDescriptor(window, 'event');
|
|
|
|
|
|
function restoreAfterDispatch() {
|
|
|
// We immediately remove the callback from event listeners so that
|
|
|
// nested `invokeGuardedCallback` calls do not clash. Otherwise, a
|
|
|
// nested call would trigger the fake event handlers of any call higher
|
|
|
// in the stack.
|
|
|
fakeNode.removeEventListener(evtType, callCallback, false); // We check for window.hasOwnProperty('event') to prevent the
|
|
|
// window.event assignment in both IE <= 10 as they throw an error
|
|
|
// "Member not found" in strict mode, and in Firefox which does not
|
|
|
// support window.event.
|
|
|
|
|
|
if (typeof window.event !== 'undefined' && window.hasOwnProperty('event')) {
|
|
|
window.event = windowEvent;
|
|
|
}
|
|
|
} // Create an event handler for our fake event. We will synchronously
|
|
|
// dispatch our fake event using `dispatchEvent`. Inside the handler, we
|
|
|
// call the user-provided callback.
|
|
|
|
|
|
|
|
|
var funcArgs = Array.prototype.slice.call(arguments, 3);
|
|
|
|
|
|
function callCallback() {
|
|
|
didCall = true;
|
|
|
restoreAfterDispatch();
|
|
|
func.apply(context, funcArgs);
|
|
|
didError = false;
|
|
|
} // Create a global error event handler. We use this to capture the value
|
|
|
// that was thrown. It's possible that this error handler will fire more
|
|
|
// than once; for example, if non-React code also calls `dispatchEvent`
|
|
|
// and a handler for that event throws. We should be resilient to most of
|
|
|
// those cases. Even if our error event handler fires more than once, the
|
|
|
// last error event is always used. If the callback actually does error,
|
|
|
// we know that the last error event is the correct one, because it's not
|
|
|
// possible for anything else to have happened in between our callback
|
|
|
// erroring and the code that follows the `dispatchEvent` call below. If
|
|
|
// the callback doesn't error, but the error event was fired, we know to
|
|
|
// ignore it because `didError` will be false, as described above.
|
|
|
|
|
|
|
|
|
var error; // Use this to track whether the error event is ever called.
|
|
|
|
|
|
var didSetError = false;
|
|
|
var isCrossOriginError = false;
|
|
|
|
|
|
function handleWindowError(event) {
|
|
|
error = event.error;
|
|
|
didSetError = true;
|
|
|
|
|
|
if (error === null && event.colno === 0 && event.lineno === 0) {
|
|
|
isCrossOriginError = true;
|
|
|
}
|
|
|
|
|
|
if (event.defaultPrevented) {
|
|
|
// Some other error handler has prevented default.
|
|
|
// Browsers silence the error report if this happens.
|
|
|
// We'll remember this to later decide whether to log it or not.
|
|
|
if (error != null && typeof error === 'object') {
|
|
|
try {
|
|
|
error._suppressLogging = true;
|
|
|
} catch (inner) {// Ignore.
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
} // Create a fake event type.
|
|
|
|
|
|
|
|
|
var evtType = "react-" + (name ? name : 'invokeguardedcallback'); // Attach our event handlers
|
|
|
|
|
|
window.addEventListener('error', handleWindowError);
|
|
|
fakeNode.addEventListener(evtType, callCallback, false); // Synchronously dispatch our fake event. If the user-provided function
|
|
|
// errors, it will trigger our global error handler.
|
|
|
|
|
|
evt.initEvent(evtType, false, false);
|
|
|
fakeNode.dispatchEvent(evt);
|
|
|
|
|
|
if (windowEventDescriptor) {
|
|
|
Object.defineProperty(window, 'event', windowEventDescriptor);
|
|
|
}
|
|
|
|
|
|
if (didCall && didError) {
|
|
|
if (!didSetError) {
|
|
|
// The callback errored, but the error event never fired.
|
|
|
// eslint-disable-next-line react-internal/prod-error-codes
|
|
|
error = new Error('An error was thrown inside one of your components, but React ' + "doesn't know what it was. This is likely due to browser " + 'flakiness. React does its best to preserve the "Pause on ' + 'exceptions" behavior of the DevTools, which requires some ' + "DEV-mode only tricks. It's possible that these don't work in " + 'your browser. Try triggering the error in production mode, ' + 'or switching to a modern browser. If you suspect that this is ' + 'actually an issue with React, please file an issue.');
|
|
|
} else if (isCrossOriginError) {
|
|
|
// eslint-disable-next-line react-internal/prod-error-codes
|
|
|
error = new Error("A cross-origin error was thrown. React doesn't have access to " + 'the actual error object in development. ' + 'See https://reactjs.org/link/crossorigin-error for more information.');
|
|
|
}
|
|
|
|
|
|
this.onError(error);
|
|
|
} // Remove our event listeners
|
|
|
|
|
|
|
|
|
window.removeEventListener('error', handleWindowError);
|
|
|
|
|
|
if (!didCall) {
|
|
|
// Something went really wrong, and our event was not dispatched.
|
|
|
// https://github.com/facebook/react/issues/16734
|
|
|
// https://github.com/facebook/react/issues/16585
|
|
|
// Fall back to the production implementation.
|
|
|
restoreAfterDispatch();
|
|
|
return invokeGuardedCallbackProd.apply(this, arguments);
|
|
|
}
|
|
|
};
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var invokeGuardedCallbackImpl$1 = invokeGuardedCallbackImpl;
|
|
|
|
|
|
var hasError = false;
|
|
|
var caughtError = null; // Used by event system to capture/rethrow the first error.
|
|
|
|
|
|
var hasRethrowError = false;
|
|
|
var rethrowError = null;
|
|
|
var reporter = {
|
|
|
onError: function (error) {
|
|
|
hasError = true;
|
|
|
caughtError = error;
|
|
|
}
|
|
|
};
|
|
|
/**
|
|
|
* Call a function while guarding against errors that happens within it.
|
|
|
* Returns an error if it throws, otherwise null.
|
|
|
*
|
|
|
* In production, this is implemented using a try-catch. The reason we don't
|
|
|
* use a try-catch directly is so that we can swap out a different
|
|
|
* implementation in DEV mode.
|
|
|
*
|
|
|
* @param {String} name of the guard to use for logging or debugging
|
|
|
* @param {Function} func The function to invoke
|
|
|
* @param {*} context The context to use when calling the function
|
|
|
* @param {...*} args Arguments for function
|
|
|
*/
|
|
|
|
|
|
function invokeGuardedCallback(name, func, context, a, b, c, d, e, f) {
|
|
|
hasError = false;
|
|
|
caughtError = null;
|
|
|
invokeGuardedCallbackImpl$1.apply(reporter, arguments);
|
|
|
}
|
|
|
/**
|
|
|
* Same as invokeGuardedCallback, but instead of returning an error, it stores
|
|
|
* it in a global so it can be rethrown by `rethrowCaughtError` later.
|
|
|
* TODO: See if caughtError and rethrowError can be unified.
|
|
|
*
|
|
|
* @param {String} name of the guard to use for logging or debugging
|
|
|
* @param {Function} func The function to invoke
|
|
|
* @param {*} context The context to use when calling the function
|
|
|
* @param {...*} args Arguments for function
|
|
|
*/
|
|
|
|
|
|
function invokeGuardedCallbackAndCatchFirstError(name, func, context, a, b, c, d, e, f) {
|
|
|
invokeGuardedCallback.apply(this, arguments);
|
|
|
|
|
|
if (hasError) {
|
|
|
var error = clearCaughtError();
|
|
|
|
|
|
if (!hasRethrowError) {
|
|
|
hasRethrowError = true;
|
|
|
rethrowError = error;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
/**
|
|
|
* During execution of guarded functions we will capture the first error which
|
|
|
* we will rethrow to be handled by the top level error handler.
|
|
|
*/
|
|
|
|
|
|
function rethrowCaughtError() {
|
|
|
if (hasRethrowError) {
|
|
|
var error = rethrowError;
|
|
|
hasRethrowError = false;
|
|
|
rethrowError = null;
|
|
|
throw error;
|
|
|
}
|
|
|
}
|
|
|
function hasCaughtError() {
|
|
|
return hasError;
|
|
|
}
|
|
|
function clearCaughtError() {
|
|
|
if (hasError) {
|
|
|
var error = caughtError;
|
|
|
hasError = false;
|
|
|
caughtError = null;
|
|
|
return error;
|
|
|
} else {
|
|
|
throw new Error('clearCaughtError was called but no error was captured. This error ' + 'is likely caused by a bug in React. Please file an issue.');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* `ReactInstanceMap` maintains a mapping from a public facing stateful
|
|
|
* instance (key) and the internal representation (value). This allows public
|
|
|
* methods to accept the user facing instance as an argument and map them back
|
|
|
* to internal methods.
|
|
|
*
|
|
|
* Note that this module is currently shared and assumed to be stateless.
|
|
|
* If this becomes an actual Map, that will break.
|
|
|
*/
|
|
|
function get(key) {
|
|
|
return key._reactInternals;
|
|
|
}
|
|
|
function has(key) {
|
|
|
return key._reactInternals !== undefined;
|
|
|
}
|
|
|
function set(key, value) {
|
|
|
key._reactInternals = value;
|
|
|
}
|
|
|
|
|
|
// Don't change these two values. They're used by React Dev Tools.
|
|
|
var NoFlags =
|
|
|
/* */
|
|
|
0;
|
|
|
var PerformedWork =
|
|
|
/* */
|
|
|
1; // You can change the rest (and add more).
|
|
|
|
|
|
var Placement =
|
|
|
/* */
|
|
|
2;
|
|
|
var Update =
|
|
|
/* */
|
|
|
4;
|
|
|
var ChildDeletion =
|
|
|
/* */
|
|
|
16;
|
|
|
var ContentReset =
|
|
|
/* */
|
|
|
32;
|
|
|
var Callback =
|
|
|
/* */
|
|
|
64;
|
|
|
var DidCapture =
|
|
|
/* */
|
|
|
128;
|
|
|
var ForceClientRender =
|
|
|
/* */
|
|
|
256;
|
|
|
var Ref =
|
|
|
/* */
|
|
|
512;
|
|
|
var Snapshot =
|
|
|
/* */
|
|
|
1024;
|
|
|
var Passive =
|
|
|
/* */
|
|
|
2048;
|
|
|
var Hydrating =
|
|
|
/* */
|
|
|
4096;
|
|
|
var Visibility =
|
|
|
/* */
|
|
|
8192;
|
|
|
var StoreConsistency =
|
|
|
/* */
|
|
|
16384;
|
|
|
var LifecycleEffectMask = Passive | Update | Callback | Ref | Snapshot | StoreConsistency; // Union of all commit flags (flags with the lifetime of a particular commit)
|
|
|
|
|
|
var HostEffectMask =
|
|
|
/* */
|
|
|
32767; // These are not really side effects, but we still reuse this field.
|
|
|
|
|
|
var Incomplete =
|
|
|
/* */
|
|
|
32768;
|
|
|
var ShouldCapture =
|
|
|
/* */
|
|
|
65536;
|
|
|
var ForceUpdateForLegacySuspense =
|
|
|
/* */
|
|
|
131072;
|
|
|
var Forked =
|
|
|
/* */
|
|
|
1048576; // Static tags describe aspects of a fiber that are not specific to a render,
|
|
|
// e.g. a fiber uses a passive effect (even if there are no updates on this particular render).
|
|
|
// This enables us to defer more work in the unmount case,
|
|
|
// since we can defer traversing the tree during layout to look for Passive effects,
|
|
|
// and instead rely on the static flag as a signal that there may be cleanup work.
|
|
|
|
|
|
var RefStatic =
|
|
|
/* */
|
|
|
2097152;
|
|
|
var LayoutStatic =
|
|
|
/* */
|
|
|
4194304;
|
|
|
var PassiveStatic =
|
|
|
/* */
|
|
|
8388608; // These flags allow us to traverse to fibers that have effects on mount
|
|
|
// without traversing the entire tree after every commit for
|
|
|
// double invoking
|
|
|
|
|
|
var MountLayoutDev =
|
|
|
/* */
|
|
|
16777216;
|
|
|
var MountPassiveDev =
|
|
|
/* */
|
|
|
33554432; // Groups of flags that are used in the commit phase to skip over trees that
|
|
|
// don't contain effects, by checking subtreeFlags.
|
|
|
|
|
|
var BeforeMutationMask = // TODO: Remove Update flag from before mutation phase by re-landing Visibility
|
|
|
// flag logic (see #20043)
|
|
|
Update | Snapshot | ( 0);
|
|
|
var MutationMask = Placement | Update | ChildDeletion | ContentReset | Ref | Hydrating | Visibility;
|
|
|
var LayoutMask = Update | Callback | Ref | Visibility; // TODO: Split into PassiveMountMask and PassiveUnmountMask
|
|
|
|
|
|
var PassiveMask = Passive | ChildDeletion; // Union of tags that don't get reset on clones.
|
|
|
// This allows certain concepts to persist without recalculating them,
|
|
|
// e.g. whether a subtree contains passive effects or portals.
|
|
|
|
|
|
var StaticMask = LayoutStatic | PassiveStatic | RefStatic;
|
|
|
|
|
|
var ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;
|
|
|
function getNearestMountedFiber(fiber) {
|
|
|
var node = fiber;
|
|
|
var nearestMounted = fiber;
|
|
|
|
|
|
if (!fiber.alternate) {
|
|
|
// If there is no alternate, this might be a new tree that isn't inserted
|
|
|
// yet. If it is, then it will have a pending insertion effect on it.
|
|
|
var nextNode = node;
|
|
|
|
|
|
do {
|
|
|
node = nextNode;
|
|
|
|
|
|
if ((node.flags & (Placement | Hydrating)) !== NoFlags) {
|
|
|
// This is an insertion or in-progress hydration. The nearest possible
|
|
|
// mounted fiber is the parent but we need to continue to figure out
|
|
|
// if that one is still mounted.
|
|
|
nearestMounted = node.return;
|
|
|
}
|
|
|
|
|
|
nextNode = node.return;
|
|
|
} while (nextNode);
|
|
|
} else {
|
|
|
while (node.return) {
|
|
|
node = node.return;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (node.tag === HostRoot) {
|
|
|
// TODO: Check if this was a nested HostRoot when used with
|
|
|
// renderContainerIntoSubtree.
|
|
|
return nearestMounted;
|
|
|
} // If we didn't hit the root, that means that we're in an disconnected tree
|
|
|
// that has been unmounted.
|
|
|
|
|
|
|
|
|
return null;
|
|
|
}
|
|
|
function getSuspenseInstanceFromFiber(fiber) {
|
|
|
if (fiber.tag === SuspenseComponent) {
|
|
|
var suspenseState = fiber.memoizedState;
|
|
|
|
|
|
if (suspenseState === null) {
|
|
|
var current = fiber.alternate;
|
|
|
|
|
|
if (current !== null) {
|
|
|
suspenseState = current.memoizedState;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (suspenseState !== null) {
|
|
|
return suspenseState.dehydrated;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return null;
|
|
|
}
|
|
|
function getContainerFromFiber(fiber) {
|
|
|
return fiber.tag === HostRoot ? fiber.stateNode.containerInfo : null;
|
|
|
}
|
|
|
function isFiberMounted(fiber) {
|
|
|
return getNearestMountedFiber(fiber) === fiber;
|
|
|
}
|
|
|
function isMounted(component) {
|
|
|
{
|
|
|
var owner = ReactCurrentOwner.current;
|
|
|
|
|
|
if (owner !== null && owner.tag === ClassComponent) {
|
|
|
var ownerFiber = owner;
|
|
|
var instance = ownerFiber.stateNode;
|
|
|
|
|
|
if (!instance._warnedAboutRefsInRender) {
|
|
|
error('%s is accessing isMounted inside its render() function. ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', getComponentNameFromFiber(ownerFiber) || 'A component');
|
|
|
}
|
|
|
|
|
|
instance._warnedAboutRefsInRender = true;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var fiber = get(component);
|
|
|
|
|
|
if (!fiber) {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
return getNearestMountedFiber(fiber) === fiber;
|
|
|
}
|
|
|
|
|
|
function assertIsMounted(fiber) {
|
|
|
if (getNearestMountedFiber(fiber) !== fiber) {
|
|
|
throw new Error('Unable to find node on an unmounted component.');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function findCurrentFiberUsingSlowPath(fiber) {
|
|
|
var alternate = fiber.alternate;
|
|
|
|
|
|
if (!alternate) {
|
|
|
// If there is no alternate, then we only need to check if it is mounted.
|
|
|
var nearestMounted = getNearestMountedFiber(fiber);
|
|
|
|
|
|
if (nearestMounted === null) {
|
|
|
throw new Error('Unable to find node on an unmounted component.');
|
|
|
}
|
|
|
|
|
|
if (nearestMounted !== fiber) {
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
return fiber;
|
|
|
} // If we have two possible branches, we'll walk backwards up to the root
|
|
|
// to see what path the root points to. On the way we may hit one of the
|
|
|
// special cases and we'll deal with them.
|
|
|
|
|
|
|
|
|
var a = fiber;
|
|
|
var b = alternate;
|
|
|
|
|
|
while (true) {
|
|
|
var parentA = a.return;
|
|
|
|
|
|
if (parentA === null) {
|
|
|
// We're at the root.
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
var parentB = parentA.alternate;
|
|
|
|
|
|
if (parentB === null) {
|
|
|
// There is no alternate. This is an unusual case. Currently, it only
|
|
|
// happens when a Suspense component is hidden. An extra fragment fiber
|
|
|
// is inserted in between the Suspense fiber and its children. Skip
|
|
|
// over this extra fragment fiber and proceed to the next parent.
|
|
|
var nextParent = parentA.return;
|
|
|
|
|
|
if (nextParent !== null) {
|
|
|
a = b = nextParent;
|
|
|
continue;
|
|
|
} // If there's no parent, we're at the root.
|
|
|
|
|
|
|
|
|
break;
|
|
|
} // If both copies of the parent fiber point to the same child, we can
|
|
|
// assume that the child is current. This happens when we bailout on low
|
|
|
// priority: the bailed out fiber's child reuses the current child.
|
|
|
|
|
|
|
|
|
if (parentA.child === parentB.child) {
|
|
|
var child = parentA.child;
|
|
|
|
|
|
while (child) {
|
|
|
if (child === a) {
|
|
|
// We've determined that A is the current branch.
|
|
|
assertIsMounted(parentA);
|
|
|
return fiber;
|
|
|
}
|
|
|
|
|
|
if (child === b) {
|
|
|
// We've determined that B is the current branch.
|
|
|
assertIsMounted(parentA);
|
|
|
return alternate;
|
|
|
}
|
|
|
|
|
|
child = child.sibling;
|
|
|
} // We should never have an alternate for any mounting node. So the only
|
|
|
// way this could possibly happen is if this was unmounted, if at all.
|
|
|
|
|
|
|
|
|
throw new Error('Unable to find node on an unmounted component.');
|
|
|
}
|
|
|
|
|
|
if (a.return !== b.return) {
|
|
|
// The return pointer of A and the return pointer of B point to different
|
|
|
// fibers. We assume that return pointers never criss-cross, so A must
|
|
|
// belong to the child set of A.return, and B must belong to the child
|
|
|
// set of B.return.
|
|
|
a = parentA;
|
|
|
b = parentB;
|
|
|
} else {
|
|
|
// The return pointers point to the same fiber. We'll have to use the
|
|
|
// default, slow path: scan the child sets of each parent alternate to see
|
|
|
// which child belongs to which set.
|
|
|
//
|
|
|
// Search parent A's child set
|
|
|
var didFindChild = false;
|
|
|
var _child = parentA.child;
|
|
|
|
|
|
while (_child) {
|
|
|
if (_child === a) {
|
|
|
didFindChild = true;
|
|
|
a = parentA;
|
|
|
b = parentB;
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
if (_child === b) {
|
|
|
didFindChild = true;
|
|
|
b = parentA;
|
|
|
a = parentB;
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
_child = _child.sibling;
|
|
|
}
|
|
|
|
|
|
if (!didFindChild) {
|
|
|
// Search parent B's child set
|
|
|
_child = parentB.child;
|
|
|
|
|
|
while (_child) {
|
|
|
if (_child === a) {
|
|
|
didFindChild = true;
|
|
|
a = parentB;
|
|
|
b = parentA;
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
if (_child === b) {
|
|
|
didFindChild = true;
|
|
|
b = parentB;
|
|
|
a = parentA;
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
_child = _child.sibling;
|
|
|
}
|
|
|
|
|
|
if (!didFindChild) {
|
|
|
throw new Error('Child was not found in either parent set. This indicates a bug ' + 'in React related to the return pointer. Please file an issue.');
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (a.alternate !== b) {
|
|
|
throw new Error("Return fibers should always be each others' alternates. " + 'This error is likely caused by a bug in React. Please file an issue.');
|
|
|
}
|
|
|
} // If the root is not a host container, we're in a disconnected tree. I.e.
|
|
|
// unmounted.
|
|
|
|
|
|
|
|
|
if (a.tag !== HostRoot) {
|
|
|
throw new Error('Unable to find node on an unmounted component.');
|
|
|
}
|
|
|
|
|
|
if (a.stateNode.current === a) {
|
|
|
// We've determined that A is the current branch.
|
|
|
return fiber;
|
|
|
} // Otherwise B has to be current branch.
|
|
|
|
|
|
|
|
|
return alternate;
|
|
|
}
|
|
|
function findCurrentHostFiber(parent) {
|
|
|
var currentParent = findCurrentFiberUsingSlowPath(parent);
|
|
|
return currentParent !== null ? findCurrentHostFiberImpl(currentParent) : null;
|
|
|
}
|
|
|
|
|
|
function findCurrentHostFiberImpl(node) {
|
|
|
// Next we'll drill down this component to find the first HostComponent/Text.
|
|
|
if (node.tag === HostComponent || node.tag === HostText) {
|
|
|
return node;
|
|
|
}
|
|
|
|
|
|
var child = node.child;
|
|
|
|
|
|
while (child !== null) {
|
|
|
var match = findCurrentHostFiberImpl(child);
|
|
|
|
|
|
if (match !== null) {
|
|
|
return match;
|
|
|
}
|
|
|
|
|
|
child = child.sibling;
|
|
|
}
|
|
|
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
function findCurrentHostFiberWithNoPortals(parent) {
|
|
|
var currentParent = findCurrentFiberUsingSlowPath(parent);
|
|
|
return currentParent !== null ? findCurrentHostFiberWithNoPortalsImpl(currentParent) : null;
|
|
|
}
|
|
|
|
|
|
function findCurrentHostFiberWithNoPortalsImpl(node) {
|
|
|
// Next we'll drill down this component to find the first HostComponent/Text.
|
|
|
if (node.tag === HostComponent || node.tag === HostText) {
|
|
|
return node;
|
|
|
}
|
|
|
|
|
|
var child = node.child;
|
|
|
|
|
|
while (child !== null) {
|
|
|
if (child.tag !== HostPortal) {
|
|
|
var match = findCurrentHostFiberWithNoPortalsImpl(child);
|
|
|
|
|
|
if (match !== null) {
|
|
|
return match;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
child = child.sibling;
|
|
|
}
|
|
|
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
// This module only exists as an ESM wrapper around the external CommonJS
|
|
|
var scheduleCallback = Scheduler.unstable_scheduleCallback;
|
|
|
var cancelCallback = Scheduler.unstable_cancelCallback;
|
|
|
var shouldYield = Scheduler.unstable_shouldYield;
|
|
|
var requestPaint = Scheduler.unstable_requestPaint;
|
|
|
var now = Scheduler.unstable_now;
|
|
|
var getCurrentPriorityLevel = Scheduler.unstable_getCurrentPriorityLevel;
|
|
|
var ImmediatePriority = Scheduler.unstable_ImmediatePriority;
|
|
|
var UserBlockingPriority = Scheduler.unstable_UserBlockingPriority;
|
|
|
var NormalPriority = Scheduler.unstable_NormalPriority;
|
|
|
var LowPriority = Scheduler.unstable_LowPriority;
|
|
|
var IdlePriority = Scheduler.unstable_IdlePriority;
|
|
|
// this doesn't actually exist on the scheduler, but it *does*
|
|
|
// on scheduler/unstable_mock, which we'll need for internal testing
|
|
|
var unstable_yieldValue = Scheduler.unstable_yieldValue;
|
|
|
var unstable_setDisableYieldValue = Scheduler.unstable_setDisableYieldValue;
|
|
|
|
|
|
var rendererID = null;
|
|
|
var injectedHook = null;
|
|
|
var injectedProfilingHooks = null;
|
|
|
var hasLoggedError = false;
|
|
|
var isDevToolsPresent = typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined';
|
|
|
function injectInternals(internals) {
|
|
|
if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined') {
|
|
|
// No DevTools
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
var hook = __REACT_DEVTOOLS_GLOBAL_HOOK__;
|
|
|
|
|
|
if (hook.isDisabled) {
|
|
|
// This isn't a real property on the hook, but it can be set to opt out
|
|
|
// of DevTools integration and associated warnings and logs.
|
|
|
// https://github.com/facebook/react/issues/3877
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
if (!hook.supportsFiber) {
|
|
|
{
|
|
|
error('The installed version of React DevTools is too old and will not work ' + 'with the current version of React. Please update React DevTools. ' + 'https://reactjs.org/link/react-devtools');
|
|
|
} // DevTools exists, even though it doesn't support Fiber.
|
|
|
|
|
|
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
try {
|
|
|
if (enableSchedulingProfiler) {
|
|
|
// Conditionally inject these hooks only if Timeline profiler is supported by this build.
|
|
|
// This gives DevTools a way to feature detect that isn't tied to version number
|
|
|
// (since profiling and timeline are controlled by different feature flags).
|
|
|
internals = assign({}, internals, {
|
|
|
getLaneLabelMap: getLaneLabelMap,
|
|
|
injectProfilingHooks: injectProfilingHooks
|
|
|
});
|
|
|
}
|
|
|
|
|
|
rendererID = hook.inject(internals); // We have successfully injected, so now it is safe to set up hooks.
|
|
|
|
|
|
injectedHook = hook;
|
|
|
} catch (err) {
|
|
|
// Catch all errors because it is unsafe to throw during initialization.
|
|
|
{
|
|
|
error('React instrumentation encountered an error: %s.', err);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (hook.checkDCE) {
|
|
|
// This is the real DevTools.
|
|
|
return true;
|
|
|
} else {
|
|
|
// This is likely a hook installed by Fast Refresh runtime.
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
function onScheduleRoot(root, children) {
|
|
|
{
|
|
|
if (injectedHook && typeof injectedHook.onScheduleFiberRoot === 'function') {
|
|
|
try {
|
|
|
injectedHook.onScheduleFiberRoot(rendererID, root, children);
|
|
|
} catch (err) {
|
|
|
if ( !hasLoggedError) {
|
|
|
hasLoggedError = true;
|
|
|
|
|
|
error('React instrumentation encountered an error: %s', err);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
function onCommitRoot(root, eventPriority) {
|
|
|
if (injectedHook && typeof injectedHook.onCommitFiberRoot === 'function') {
|
|
|
try {
|
|
|
var didError = (root.current.flags & DidCapture) === DidCapture;
|
|
|
|
|
|
if (enableProfilerTimer) {
|
|
|
var schedulerPriority;
|
|
|
|
|
|
switch (eventPriority) {
|
|
|
case DiscreteEventPriority:
|
|
|
schedulerPriority = ImmediatePriority;
|
|
|
break;
|
|
|
|
|
|
case ContinuousEventPriority:
|
|
|
schedulerPriority = UserBlockingPriority;
|
|
|
break;
|
|
|
|
|
|
case DefaultEventPriority:
|
|
|
schedulerPriority = NormalPriority;
|
|
|
break;
|
|
|
|
|
|
case IdleEventPriority:
|
|
|
schedulerPriority = IdlePriority;
|
|
|
break;
|
|
|
|
|
|
default:
|
|
|
schedulerPriority = NormalPriority;
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
injectedHook.onCommitFiberRoot(rendererID, root, schedulerPriority, didError);
|
|
|
} else {
|
|
|
injectedHook.onCommitFiberRoot(rendererID, root, undefined, didError);
|
|
|
}
|
|
|
} catch (err) {
|
|
|
{
|
|
|
if (!hasLoggedError) {
|
|
|
hasLoggedError = true;
|
|
|
|
|
|
error('React instrumentation encountered an error: %s', err);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
function onPostCommitRoot(root) {
|
|
|
if (injectedHook && typeof injectedHook.onPostCommitFiberRoot === 'function') {
|
|
|
try {
|
|
|
injectedHook.onPostCommitFiberRoot(rendererID, root);
|
|
|
} catch (err) {
|
|
|
{
|
|
|
if (!hasLoggedError) {
|
|
|
hasLoggedError = true;
|
|
|
|
|
|
error('React instrumentation encountered an error: %s', err);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
function onCommitUnmount(fiber) {
|
|
|
if (injectedHook && typeof injectedHook.onCommitFiberUnmount === 'function') {
|
|
|
try {
|
|
|
injectedHook.onCommitFiberUnmount(rendererID, fiber);
|
|
|
} catch (err) {
|
|
|
{
|
|
|
if (!hasLoggedError) {
|
|
|
hasLoggedError = true;
|
|
|
|
|
|
error('React instrumentation encountered an error: %s', err);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
function setIsStrictModeForDevtools(newIsStrictMode) {
|
|
|
{
|
|
|
if (typeof unstable_yieldValue === 'function') {
|
|
|
// We're in a test because Scheduler.unstable_yieldValue only exists
|
|
|
// in SchedulerMock. To reduce the noise in strict mode tests,
|
|
|
// suppress warnings and disable scheduler yielding during the double render
|
|
|
unstable_setDisableYieldValue(newIsStrictMode);
|
|
|
setSuppressWarning(newIsStrictMode);
|
|
|
}
|
|
|
|
|
|
if (injectedHook && typeof injectedHook.setStrictMode === 'function') {
|
|
|
try {
|
|
|
injectedHook.setStrictMode(rendererID, newIsStrictMode);
|
|
|
} catch (err) {
|
|
|
{
|
|
|
if (!hasLoggedError) {
|
|
|
hasLoggedError = true;
|
|
|
|
|
|
error('React instrumentation encountered an error: %s', err);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
} // Profiler API hooks
|
|
|
|
|
|
function injectProfilingHooks(profilingHooks) {
|
|
|
injectedProfilingHooks = profilingHooks;
|
|
|
}
|
|
|
|
|
|
function getLaneLabelMap() {
|
|
|
{
|
|
|
var map = new Map();
|
|
|
var lane = 1;
|
|
|
|
|
|
for (var index = 0; index < TotalLanes; index++) {
|
|
|
var label = getLabelForLane(lane);
|
|
|
map.set(lane, label);
|
|
|
lane *= 2;
|
|
|
}
|
|
|
|
|
|
return map;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function markCommitStarted(lanes) {
|
|
|
{
|
|
|
if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markCommitStarted === 'function') {
|
|
|
injectedProfilingHooks.markCommitStarted(lanes);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
function markCommitStopped() {
|
|
|
{
|
|
|
if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markCommitStopped === 'function') {
|
|
|
injectedProfilingHooks.markCommitStopped();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
function markComponentRenderStarted(fiber) {
|
|
|
{
|
|
|
if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentRenderStarted === 'function') {
|
|
|
injectedProfilingHooks.markComponentRenderStarted(fiber);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
function markComponentRenderStopped() {
|
|
|
{
|
|
|
if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentRenderStopped === 'function') {
|
|
|
injectedProfilingHooks.markComponentRenderStopped();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
function markComponentPassiveEffectMountStarted(fiber) {
|
|
|
{
|
|
|
if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentPassiveEffectMountStarted === 'function') {
|
|
|
injectedProfilingHooks.markComponentPassiveEffectMountStarted(fiber);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
function markComponentPassiveEffectMountStopped() {
|
|
|
{
|
|
|
if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentPassiveEffectMountStopped === 'function') {
|
|
|
injectedProfilingHooks.markComponentPassiveEffectMountStopped();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
function markComponentPassiveEffectUnmountStarted(fiber) {
|
|
|
{
|
|
|
if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentPassiveEffectUnmountStarted === 'function') {
|
|
|
injectedProfilingHooks.markComponentPassiveEffectUnmountStarted(fiber);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
function markComponentPassiveEffectUnmountStopped() {
|
|
|
{
|
|
|
if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentPassiveEffectUnmountStopped === 'function') {
|
|
|
injectedProfilingHooks.markComponentPassiveEffectUnmountStopped();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
function markComponentLayoutEffectMountStarted(fiber) {
|
|
|
{
|
|
|
if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentLayoutEffectMountStarted === 'function') {
|
|
|
injectedProfilingHooks.markComponentLayoutEffectMountStarted(fiber);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
function markComponentLayoutEffectMountStopped() {
|
|
|
{
|
|
|
if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentLayoutEffectMountStopped === 'function') {
|
|
|
injectedProfilingHooks.markComponentLayoutEffectMountStopped();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
function markComponentLayoutEffectUnmountStarted(fiber) {
|
|
|
{
|
|
|
if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentLayoutEffectUnmountStarted === 'function') {
|
|
|
injectedProfilingHooks.markComponentLayoutEffectUnmountStarted(fiber);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
function markComponentLayoutEffectUnmountStopped() {
|
|
|
{
|
|
|
if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentLayoutEffectUnmountStopped === 'function') {
|
|
|
injectedProfilingHooks.markComponentLayoutEffectUnmountStopped();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
function markComponentErrored(fiber, thrownValue, lanes) {
|
|
|
{
|
|
|
if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentErrored === 'function') {
|
|
|
injectedProfilingHooks.markComponentErrored(fiber, thrownValue, lanes);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
function markComponentSuspended(fiber, wakeable, lanes) {
|
|
|
{
|
|
|
if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markComponentSuspended === 'function') {
|
|
|
injectedProfilingHooks.markComponentSuspended(fiber, wakeable, lanes);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
function markLayoutEffectsStarted(lanes) {
|
|
|
{
|
|
|
if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markLayoutEffectsStarted === 'function') {
|
|
|
injectedProfilingHooks.markLayoutEffectsStarted(lanes);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
function markLayoutEffectsStopped() {
|
|
|
{
|
|
|
if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markLayoutEffectsStopped === 'function') {
|
|
|
injectedProfilingHooks.markLayoutEffectsStopped();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
function markPassiveEffectsStarted(lanes) {
|
|
|
{
|
|
|
if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markPassiveEffectsStarted === 'function') {
|
|
|
injectedProfilingHooks.markPassiveEffectsStarted(lanes);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
function markPassiveEffectsStopped() {
|
|
|
{
|
|
|
if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markPassiveEffectsStopped === 'function') {
|
|
|
injectedProfilingHooks.markPassiveEffectsStopped();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
function markRenderStarted(lanes) {
|
|
|
{
|
|
|
if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markRenderStarted === 'function') {
|
|
|
injectedProfilingHooks.markRenderStarted(lanes);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
function markRenderYielded() {
|
|
|
{
|
|
|
if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markRenderYielded === 'function') {
|
|
|
injectedProfilingHooks.markRenderYielded();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
function markRenderStopped() {
|
|
|
{
|
|
|
if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markRenderStopped === 'function') {
|
|
|
injectedProfilingHooks.markRenderStopped();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
function markRenderScheduled(lane) {
|
|
|
{
|
|
|
if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markRenderScheduled === 'function') {
|
|
|
injectedProfilingHooks.markRenderScheduled(lane);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
function markForceUpdateScheduled(fiber, lane) {
|
|
|
{
|
|
|
if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markForceUpdateScheduled === 'function') {
|
|
|
injectedProfilingHooks.markForceUpdateScheduled(fiber, lane);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
function markStateUpdateScheduled(fiber, lane) {
|
|
|
{
|
|
|
if (injectedProfilingHooks !== null && typeof injectedProfilingHooks.markStateUpdateScheduled === 'function') {
|
|
|
injectedProfilingHooks.markStateUpdateScheduled(fiber, lane);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var NoMode =
|
|
|
/* */
|
|
|
0; // TODO: Remove ConcurrentMode by reading from the root tag instead
|
|
|
|
|
|
var ConcurrentMode =
|
|
|
/* */
|
|
|
1;
|
|
|
var ProfileMode =
|
|
|
/* */
|
|
|
2;
|
|
|
var StrictLegacyMode =
|
|
|
/* */
|
|
|
8;
|
|
|
var StrictEffectsMode =
|
|
|
/* */
|
|
|
16;
|
|
|
|
|
|
// TODO: This is pretty well supported by browsers. Maybe we can drop it.
|
|
|
var clz32 = Math.clz32 ? Math.clz32 : clz32Fallback; // Count leading zeros.
|
|
|
// Based on:
|
|
|
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/clz32
|
|
|
|
|
|
var log = Math.log;
|
|
|
var LN2 = Math.LN2;
|
|
|
|
|
|
function clz32Fallback(x) {
|
|
|
var asUint = x >>> 0;
|
|
|
|
|
|
if (asUint === 0) {
|
|
|
return 32;
|
|
|
}
|
|
|
|
|
|
return 31 - (log(asUint) / LN2 | 0) | 0;
|
|
|
}
|
|
|
|
|
|
// If those values are changed that package should be rebuilt and redeployed.
|
|
|
|
|
|
var TotalLanes = 31;
|
|
|
var NoLanes =
|
|
|
/* */
|
|
|
0;
|
|
|
var NoLane =
|
|
|
/* */
|
|
|
0;
|
|
|
var SyncLane =
|
|
|
/* */
|
|
|
1;
|
|
|
var InputContinuousHydrationLane =
|
|
|
/* */
|
|
|
2;
|
|
|
var InputContinuousLane =
|
|
|
/* */
|
|
|
4;
|
|
|
var DefaultHydrationLane =
|
|
|
/* */
|
|
|
8;
|
|
|
var DefaultLane =
|
|
|
/* */
|
|
|
16;
|
|
|
var TransitionHydrationLane =
|
|
|
/* */
|
|
|
32;
|
|
|
var TransitionLanes =
|
|
|
/* */
|
|
|
4194240;
|
|
|
var TransitionLane1 =
|
|
|
/* */
|
|
|
64;
|
|
|
var TransitionLane2 =
|
|
|
/* */
|
|
|
128;
|
|
|
var TransitionLane3 =
|
|
|
/* */
|
|
|
256;
|
|
|
var TransitionLane4 =
|
|
|
/* */
|
|
|
512;
|
|
|
var TransitionLane5 =
|
|
|
/* */
|
|
|
1024;
|
|
|
var TransitionLane6 =
|
|
|
/* */
|
|
|
2048;
|
|
|
var TransitionLane7 =
|
|
|
/* */
|
|
|
4096;
|
|
|
var TransitionLane8 =
|
|
|
/* */
|
|
|
8192;
|
|
|
var TransitionLane9 =
|
|
|
/* */
|
|
|
16384;
|
|
|
var TransitionLane10 =
|
|
|
/* */
|
|
|
32768;
|
|
|
var TransitionLane11 =
|
|
|
/* */
|
|
|
65536;
|
|
|
var TransitionLane12 =
|
|
|
/* */
|
|
|
131072;
|
|
|
var TransitionLane13 =
|
|
|
/* */
|
|
|
262144;
|
|
|
var TransitionLane14 =
|
|
|
/* */
|
|
|
524288;
|
|
|
var TransitionLane15 =
|
|
|
/* */
|
|
|
1048576;
|
|
|
var TransitionLane16 =
|
|
|
/* */
|
|
|
2097152;
|
|
|
var RetryLanes =
|
|
|
/* */
|
|
|
130023424;
|
|
|
var RetryLane1 =
|
|
|
/* */
|
|
|
4194304;
|
|
|
var RetryLane2 =
|
|
|
/* */
|
|
|
8388608;
|
|
|
var RetryLane3 =
|
|
|
/* */
|
|
|
16777216;
|
|
|
var RetryLane4 =
|
|
|
/* */
|
|
|
33554432;
|
|
|
var RetryLane5 =
|
|
|
/* */
|
|
|
67108864;
|
|
|
var SomeRetryLane = RetryLane1;
|
|
|
var SelectiveHydrationLane =
|
|
|
/* */
|
|
|
134217728;
|
|
|
var NonIdleLanes =
|
|
|
/* */
|
|
|
268435455;
|
|
|
var IdleHydrationLane =
|
|
|
/* */
|
|
|
268435456;
|
|
|
var IdleLane =
|
|
|
/* */
|
|
|
536870912;
|
|
|
var OffscreenLane =
|
|
|
/* */
|
|
|
1073741824; // This function is used for the experimental timeline (react-devtools-timeline)
|
|
|
// It should be kept in sync with the Lanes values above.
|
|
|
|
|
|
function getLabelForLane(lane) {
|
|
|
{
|
|
|
if (lane & SyncLane) {
|
|
|
return 'Sync';
|
|
|
}
|
|
|
|
|
|
if (lane & InputContinuousHydrationLane) {
|
|
|
return 'InputContinuousHydration';
|
|
|
}
|
|
|
|
|
|
if (lane & InputContinuousLane) {
|
|
|
return 'InputContinuous';
|
|
|
}
|
|
|
|
|
|
if (lane & DefaultHydrationLane) {
|
|
|
return 'DefaultHydration';
|
|
|
}
|
|
|
|
|
|
if (lane & DefaultLane) {
|
|
|
return 'Default';
|
|
|
}
|
|
|
|
|
|
if (lane & TransitionHydrationLane) {
|
|
|
return 'TransitionHydration';
|
|
|
}
|
|
|
|
|
|
if (lane & TransitionLanes) {
|
|
|
return 'Transition';
|
|
|
}
|
|
|
|
|
|
if (lane & RetryLanes) {
|
|
|
return 'Retry';
|
|
|
}
|
|
|
|
|
|
if (lane & SelectiveHydrationLane) {
|
|
|
return 'SelectiveHydration';
|
|
|
}
|
|
|
|
|
|
if (lane & IdleHydrationLane) {
|
|
|
return 'IdleHydration';
|
|
|
}
|
|
|
|
|
|
if (lane & IdleLane) {
|
|
|
return 'Idle';
|
|
|
}
|
|
|
|
|
|
if (lane & OffscreenLane) {
|
|
|
return 'Offscreen';
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
var NoTimestamp = -1;
|
|
|
var nextTransitionLane = TransitionLane1;
|
|
|
var nextRetryLane = RetryLane1;
|
|
|
|
|
|
function getHighestPriorityLanes(lanes) {
|
|
|
switch (getHighestPriorityLane(lanes)) {
|
|
|
case SyncLane:
|
|
|
return SyncLane;
|
|
|
|
|
|
case InputContinuousHydrationLane:
|
|
|
return InputContinuousHydrationLane;
|
|
|
|
|
|
case InputContinuousLane:
|
|
|
return InputContinuousLane;
|
|
|
|
|
|
case DefaultHydrationLane:
|
|
|
return DefaultHydrationLane;
|
|
|
|
|
|
case DefaultLane:
|
|
|
return DefaultLane;
|
|
|
|
|
|
case TransitionHydrationLane:
|
|
|
return TransitionHydrationLane;
|
|
|
|
|
|
case TransitionLane1:
|
|
|
case TransitionLane2:
|
|
|
case TransitionLane3:
|
|
|
case TransitionLane4:
|
|
|
case TransitionLane5:
|
|
|
case TransitionLane6:
|
|
|
case TransitionLane7:
|
|
|
case TransitionLane8:
|
|
|
case TransitionLane9:
|
|
|
case TransitionLane10:
|
|
|
case TransitionLane11:
|
|
|
case TransitionLane12:
|
|
|
case TransitionLane13:
|
|
|
case TransitionLane14:
|
|
|
case TransitionLane15:
|
|
|
case TransitionLane16:
|
|
|
return lanes & TransitionLanes;
|
|
|
|
|
|
case RetryLane1:
|
|
|
case RetryLane2:
|
|
|
case RetryLane3:
|
|
|
case RetryLane4:
|
|
|
case RetryLane5:
|
|
|
return lanes & RetryLanes;
|
|
|
|
|
|
case SelectiveHydrationLane:
|
|
|
return SelectiveHydrationLane;
|
|
|
|
|
|
case IdleHydrationLane:
|
|
|
return IdleHydrationLane;
|
|
|
|
|
|
case IdleLane:
|
|
|
return IdleLane;
|
|
|
|
|
|
case OffscreenLane:
|
|
|
return OffscreenLane;
|
|
|
|
|
|
default:
|
|
|
{
|
|
|
error('Should have found matching lanes. This is a bug in React.');
|
|
|
} // This shouldn't be reachable, but as a fallback, return the entire bitmask.
|
|
|
|
|
|
|
|
|
return lanes;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function getNextLanes(root, wipLanes) {
|
|
|
// Early bailout if there's no pending work left.
|
|
|
var pendingLanes = root.pendingLanes;
|
|
|
|
|
|
if (pendingLanes === NoLanes) {
|
|
|
return NoLanes;
|
|
|
}
|
|
|
|
|
|
var nextLanes = NoLanes;
|
|
|
var suspendedLanes = root.suspendedLanes;
|
|
|
var pingedLanes = root.pingedLanes; // Do not work on any idle work until all the non-idle work has finished,
|
|
|
// even if the work is suspended.
|
|
|
|
|
|
var nonIdlePendingLanes = pendingLanes & NonIdleLanes;
|
|
|
|
|
|
if (nonIdlePendingLanes !== NoLanes) {
|
|
|
var nonIdleUnblockedLanes = nonIdlePendingLanes & ~suspendedLanes;
|
|
|
|
|
|
if (nonIdleUnblockedLanes !== NoLanes) {
|
|
|
nextLanes = getHighestPriorityLanes(nonIdleUnblockedLanes);
|
|
|
} else {
|
|
|
var nonIdlePingedLanes = nonIdlePendingLanes & pingedLanes;
|
|
|
|
|
|
if (nonIdlePingedLanes !== NoLanes) {
|
|
|
nextLanes = getHighestPriorityLanes(nonIdlePingedLanes);
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
|
// The only remaining work is Idle.
|
|
|
var unblockedLanes = pendingLanes & ~suspendedLanes;
|
|
|
|
|
|
if (unblockedLanes !== NoLanes) {
|
|
|
nextLanes = getHighestPriorityLanes(unblockedLanes);
|
|
|
} else {
|
|
|
if (pingedLanes !== NoLanes) {
|
|
|
nextLanes = getHighestPriorityLanes(pingedLanes);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (nextLanes === NoLanes) {
|
|
|
// This should only be reachable if we're suspended
|
|
|
// TODO: Consider warning in this path if a fallback timer is not scheduled.
|
|
|
return NoLanes;
|
|
|
} // If we're already in the middle of a render, switching lanes will interrupt
|
|
|
// it and we'll lose our progress. We should only do this if the new lanes are
|
|
|
// higher priority.
|
|
|
|
|
|
|
|
|
if (wipLanes !== NoLanes && wipLanes !== nextLanes && // If we already suspended with a delay, then interrupting is fine. Don't
|
|
|
// bother waiting until the root is complete.
|
|
|
(wipLanes & suspendedLanes) === NoLanes) {
|
|
|
var nextLane = getHighestPriorityLane(nextLanes);
|
|
|
var wipLane = getHighestPriorityLane(wipLanes);
|
|
|
|
|
|
if ( // Tests whether the next lane is equal or lower priority than the wip
|
|
|
// one. This works because the bits decrease in priority as you go left.
|
|
|
nextLane >= wipLane || // Default priority updates should not interrupt transition updates. The
|
|
|
// only difference between default updates and transition updates is that
|
|
|
// default updates do not support refresh transitions.
|
|
|
nextLane === DefaultLane && (wipLane & TransitionLanes) !== NoLanes) {
|
|
|
// Keep working on the existing in-progress tree. Do not interrupt.
|
|
|
return wipLanes;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if ((nextLanes & InputContinuousLane) !== NoLanes) {
|
|
|
// When updates are sync by default, we entangle continuous priority updates
|
|
|
// and default updates, so they render in the same batch. The only reason
|
|
|
// they use separate lanes is because continuous updates should interrupt
|
|
|
// transitions, but default updates should not.
|
|
|
nextLanes |= pendingLanes & DefaultLane;
|
|
|
} // Check for entangled lanes and add them to the batch.
|
|
|
//
|
|
|
// A lane is said to be entangled with another when it's not allowed to render
|
|
|
// in a batch that does not also include the other lane. Typically we do this
|
|
|
// when multiple updates have the same source, and we only want to respond to
|
|
|
// the most recent event from that source.
|
|
|
//
|
|
|
// Note that we apply entanglements *after* checking for partial work above.
|
|
|
// This means that if a lane is entangled during an interleaved event while
|
|
|
// it's already rendering, we won't interrupt it. This is intentional, since
|
|
|
// entanglement is usually "best effort": we'll try our best to render the
|
|
|
// lanes in the same batch, but it's not worth throwing out partially
|
|
|
// completed work in order to do it.
|
|
|
// TODO: Reconsider this. The counter-argument is that the partial work
|
|
|
// represents an intermediate state, which we don't want to show to the user.
|
|
|
// And by spending extra time finishing it, we're increasing the amount of
|
|
|
// time it takes to show the final state, which is what they are actually
|
|
|
// waiting for.
|
|
|
//
|
|
|
// For those exceptions where entanglement is semantically important, like
|
|
|
// useMutableSource, we should ensure that there is no partial work at the
|
|
|
// time we apply the entanglement.
|
|
|
|
|
|
|
|
|
var entangledLanes = root.entangledLanes;
|
|
|
|
|
|
if (entangledLanes !== NoLanes) {
|
|
|
var entanglements = root.entanglements;
|
|
|
var lanes = nextLanes & entangledLanes;
|
|
|
|
|
|
while (lanes > 0) {
|
|
|
var index = pickArbitraryLaneIndex(lanes);
|
|
|
var lane = 1 << index;
|
|
|
nextLanes |= entanglements[index];
|
|
|
lanes &= ~lane;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return nextLanes;
|
|
|
}
|
|
|
function getMostRecentEventTime(root, lanes) {
|
|
|
var eventTimes = root.eventTimes;
|
|
|
var mostRecentEventTime = NoTimestamp;
|
|
|
|
|
|
while (lanes > 0) {
|
|
|
var index = pickArbitraryLaneIndex(lanes);
|
|
|
var lane = 1 << index;
|
|
|
var eventTime = eventTimes[index];
|
|
|
|
|
|
if (eventTime > mostRecentEventTime) {
|
|
|
mostRecentEventTime = eventTime;
|
|
|
}
|
|
|
|
|
|
lanes &= ~lane;
|
|
|
}
|
|
|
|
|
|
return mostRecentEventTime;
|
|
|
}
|
|
|
|
|
|
function computeExpirationTime(lane, currentTime) {
|
|
|
switch (lane) {
|
|
|
case SyncLane:
|
|
|
case InputContinuousHydrationLane:
|
|
|
case InputContinuousLane:
|
|
|
// User interactions should expire slightly more quickly.
|
|
|
//
|
|
|
// NOTE: This is set to the corresponding constant as in Scheduler.js.
|
|
|
// When we made it larger, a product metric in www regressed, suggesting
|
|
|
// there's a user interaction that's being starved by a series of
|
|
|
// synchronous updates. If that theory is correct, the proper solution is
|
|
|
// to fix the starvation. However, this scenario supports the idea that
|
|
|
// expiration times are an important safeguard when starvation
|
|
|
// does happen.
|
|
|
return currentTime + 250;
|
|
|
|
|
|
case DefaultHydrationLane:
|
|
|
case DefaultLane:
|
|
|
case TransitionHydrationLane:
|
|
|
case TransitionLane1:
|
|
|
case TransitionLane2:
|
|
|
case TransitionLane3:
|
|
|
case TransitionLane4:
|
|
|
case TransitionLane5:
|
|
|
case TransitionLane6:
|
|
|
case TransitionLane7:
|
|
|
case TransitionLane8:
|
|
|
case TransitionLane9:
|
|
|
case TransitionLane10:
|
|
|
case TransitionLane11:
|
|
|
case TransitionLane12:
|
|
|
case TransitionLane13:
|
|
|
case TransitionLane14:
|
|
|
case TransitionLane15:
|
|
|
case TransitionLane16:
|
|
|
return currentTime + 5000;
|
|
|
|
|
|
case RetryLane1:
|
|
|
case RetryLane2:
|
|
|
case RetryLane3:
|
|
|
case RetryLane4:
|
|
|
case RetryLane5:
|
|
|
// TODO: Retries should be allowed to expire if they are CPU bound for
|
|
|
// too long, but when I made this change it caused a spike in browser
|
|
|
// crashes. There must be some other underlying bug; not super urgent but
|
|
|
// ideally should figure out why and fix it. Unfortunately we don't have
|
|
|
// a repro for the crashes, only detected via production metrics.
|
|
|
return NoTimestamp;
|
|
|
|
|
|
case SelectiveHydrationLane:
|
|
|
case IdleHydrationLane:
|
|
|
case IdleLane:
|
|
|
case OffscreenLane:
|
|
|
// Anything idle priority or lower should never expire.
|
|
|
return NoTimestamp;
|
|
|
|
|
|
default:
|
|
|
{
|
|
|
error('Should have found matching lanes. This is a bug in React.');
|
|
|
}
|
|
|
|
|
|
return NoTimestamp;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function markStarvedLanesAsExpired(root, currentTime) {
|
|
|
// TODO: This gets called every time we yield. We can optimize by storing
|
|
|
// the earliest expiration time on the root. Then use that to quickly bail out
|
|
|
// of this function.
|
|
|
var pendingLanes = root.pendingLanes;
|
|
|
var suspendedLanes = root.suspendedLanes;
|
|
|
var pingedLanes = root.pingedLanes;
|
|
|
var expirationTimes = root.expirationTimes; // Iterate through the pending lanes and check if we've reached their
|
|
|
// expiration time. If so, we'll assume the update is being starved and mark
|
|
|
// it as expired to force it to finish.
|
|
|
|
|
|
var lanes = pendingLanes;
|
|
|
|
|
|
while (lanes > 0) {
|
|
|
var index = pickArbitraryLaneIndex(lanes);
|
|
|
var lane = 1 << index;
|
|
|
var expirationTime = expirationTimes[index];
|
|
|
|
|
|
if (expirationTime === NoTimestamp) {
|
|
|
// Found a pending lane with no expiration time. If it's not suspended, or
|
|
|
// if it's pinged, assume it's CPU-bound. Compute a new expiration time
|
|
|
// using the current time.
|
|
|
if ((lane & suspendedLanes) === NoLanes || (lane & pingedLanes) !== NoLanes) {
|
|
|
// Assumes timestamps are monotonically increasing.
|
|
|
expirationTimes[index] = computeExpirationTime(lane, currentTime);
|
|
|
}
|
|
|
} else if (expirationTime <= currentTime) {
|
|
|
// This lane expired
|
|
|
root.expiredLanes |= lane;
|
|
|
}
|
|
|
|
|
|
lanes &= ~lane;
|
|
|
}
|
|
|
} // This returns the highest priority pending lanes regardless of whether they
|
|
|
// are suspended.
|
|
|
|
|
|
function getHighestPriorityPendingLanes(root) {
|
|
|
return getHighestPriorityLanes(root.pendingLanes);
|
|
|
}
|
|
|
function getLanesToRetrySynchronouslyOnError(root) {
|
|
|
var everythingButOffscreen = root.pendingLanes & ~OffscreenLane;
|
|
|
|
|
|
if (everythingButOffscreen !== NoLanes) {
|
|
|
return everythingButOffscreen;
|
|
|
}
|
|
|
|
|
|
if (everythingButOffscreen & OffscreenLane) {
|
|
|
return OffscreenLane;
|
|
|
}
|
|
|
|
|
|
return NoLanes;
|
|
|
}
|
|
|
function includesSyncLane(lanes) {
|
|
|
return (lanes & SyncLane) !== NoLanes;
|
|
|
}
|
|
|
function includesNonIdleWork(lanes) {
|
|
|
return (lanes & NonIdleLanes) !== NoLanes;
|
|
|
}
|
|
|
function includesOnlyRetries(lanes) {
|
|
|
return (lanes & RetryLanes) === lanes;
|
|
|
}
|
|
|
function includesOnlyNonUrgentLanes(lanes) {
|
|
|
var UrgentLanes = SyncLane | InputContinuousLane | DefaultLane;
|
|
|
return (lanes & UrgentLanes) === NoLanes;
|
|
|
}
|
|
|
function includesOnlyTransitions(lanes) {
|
|
|
return (lanes & TransitionLanes) === lanes;
|
|
|
}
|
|
|
function includesBlockingLane(root, lanes) {
|
|
|
|
|
|
var SyncDefaultLanes = InputContinuousHydrationLane | InputContinuousLane | DefaultHydrationLane | DefaultLane;
|
|
|
return (lanes & SyncDefaultLanes) !== NoLanes;
|
|
|
}
|
|
|
function includesExpiredLane(root, lanes) {
|
|
|
// This is a separate check from includesBlockingLane because a lane can
|
|
|
// expire after a render has already started.
|
|
|
return (lanes & root.expiredLanes) !== NoLanes;
|
|
|
}
|
|
|
function isTransitionLane(lane) {
|
|
|
return (lane & TransitionLanes) !== NoLanes;
|
|
|
}
|
|
|
function claimNextTransitionLane() {
|
|
|
// Cycle through the lanes, assigning each new transition to the next lane.
|
|
|
// In most cases, this means every transition gets its own lane, until we
|
|
|
// run out of lanes and cycle back to the beginning.
|
|
|
var lane = nextTransitionLane;
|
|
|
nextTransitionLane <<= 1;
|
|
|
|
|
|
if ((nextTransitionLane & TransitionLanes) === NoLanes) {
|
|
|
nextTransitionLane = TransitionLane1;
|
|
|
}
|
|
|
|
|
|
return lane;
|
|
|
}
|
|
|
function claimNextRetryLane() {
|
|
|
var lane = nextRetryLane;
|
|
|
nextRetryLane <<= 1;
|
|
|
|
|
|
if ((nextRetryLane & RetryLanes) === NoLanes) {
|
|
|
nextRetryLane = RetryLane1;
|
|
|
}
|
|
|
|
|
|
return lane;
|
|
|
}
|
|
|
function getHighestPriorityLane(lanes) {
|
|
|
return lanes & -lanes;
|
|
|
}
|
|
|
function pickArbitraryLane(lanes) {
|
|
|
// This wrapper function gets inlined. Only exists so to communicate that it
|
|
|
// doesn't matter which bit is selected; you can pick any bit without
|
|
|
// affecting the algorithms where its used. Here I'm using
|
|
|
// getHighestPriorityLane because it requires the fewest operations.
|
|
|
return getHighestPriorityLane(lanes);
|
|
|
}
|
|
|
|
|
|
function pickArbitraryLaneIndex(lanes) {
|
|
|
return 31 - clz32(lanes);
|
|
|
}
|
|
|
|
|
|
function laneToIndex(lane) {
|
|
|
return pickArbitraryLaneIndex(lane);
|
|
|
}
|
|
|
|
|
|
function includesSomeLane(a, b) {
|
|
|
return (a & b) !== NoLanes;
|
|
|
}
|
|
|
function isSubsetOfLanes(set, subset) {
|
|
|
return (set & subset) === subset;
|
|
|
}
|
|
|
function mergeLanes(a, b) {
|
|
|
return a | b;
|
|
|
}
|
|
|
function removeLanes(set, subset) {
|
|
|
return set & ~subset;
|
|
|
}
|
|
|
function intersectLanes(a, b) {
|
|
|
return a & b;
|
|
|
} // Seems redundant, but it changes the type from a single lane (used for
|
|
|
// updates) to a group of lanes (used for flushing work).
|
|
|
|
|
|
function laneToLanes(lane) {
|
|
|
return lane;
|
|
|
}
|
|
|
function higherPriorityLane(a, b) {
|
|
|
// This works because the bit ranges decrease in priority as you go left.
|
|
|
return a !== NoLane && a < b ? a : b;
|
|
|
}
|
|
|
function createLaneMap(initial) {
|
|
|
// Intentionally pushing one by one.
|
|
|
// https://v8.dev/blog/elements-kinds#avoid-creating-holes
|
|
|
var laneMap = [];
|
|
|
|
|
|
for (var i = 0; i < TotalLanes; i++) {
|
|
|
laneMap.push(initial);
|
|
|
}
|
|
|
|
|
|
return laneMap;
|
|
|
}
|
|
|
function markRootUpdated(root, updateLane, eventTime) {
|
|
|
root.pendingLanes |= updateLane; // If there are any suspended transitions, it's possible this new update
|
|
|
// could unblock them. Clear the suspended lanes so that we can try rendering
|
|
|
// them again.
|
|
|
//
|
|
|
// TODO: We really only need to unsuspend only lanes that are in the
|
|
|
// `subtreeLanes` of the updated fiber, or the update lanes of the return
|
|
|
// path. This would exclude suspended updates in an unrelated sibling tree,
|
|
|
// since there's no way for this update to unblock it.
|
|
|
//
|
|
|
// We don't do this if the incoming update is idle, because we never process
|
|
|
// idle updates until after all the regular updates have finished; there's no
|
|
|
// way it could unblock a transition.
|
|
|
|
|
|
if (updateLane !== IdleLane) {
|
|
|
root.suspendedLanes = NoLanes;
|
|
|
root.pingedLanes = NoLanes;
|
|
|
}
|
|
|
|
|
|
var eventTimes = root.eventTimes;
|
|
|
var index = laneToIndex(updateLane); // We can always overwrite an existing timestamp because we prefer the most
|
|
|
// recent event, and we assume time is monotonically increasing.
|
|
|
|
|
|
eventTimes[index] = eventTime;
|
|
|
}
|
|
|
function markRootSuspended(root, suspendedLanes) {
|
|
|
root.suspendedLanes |= suspendedLanes;
|
|
|
root.pingedLanes &= ~suspendedLanes; // The suspended lanes are no longer CPU-bound. Clear their expiration times.
|
|
|
|
|
|
var expirationTimes = root.expirationTimes;
|
|
|
var lanes = suspendedLanes;
|
|
|
|
|
|
while (lanes > 0) {
|
|
|
var index = pickArbitraryLaneIndex(lanes);
|
|
|
var lane = 1 << index;
|
|
|
expirationTimes[index] = NoTimestamp;
|
|
|
lanes &= ~lane;
|
|
|
}
|
|
|
}
|
|
|
function markRootPinged(root, pingedLanes, eventTime) {
|
|
|
root.pingedLanes |= root.suspendedLanes & pingedLanes;
|
|
|
}
|
|
|
function markRootFinished(root, remainingLanes) {
|
|
|
var noLongerPendingLanes = root.pendingLanes & ~remainingLanes;
|
|
|
root.pendingLanes = remainingLanes; // Let's try everything again
|
|
|
|
|
|
root.suspendedLanes = NoLanes;
|
|
|
root.pingedLanes = NoLanes;
|
|
|
root.expiredLanes &= remainingLanes;
|
|
|
root.mutableReadLanes &= remainingLanes;
|
|
|
root.entangledLanes &= remainingLanes;
|
|
|
var entanglements = root.entanglements;
|
|
|
var eventTimes = root.eventTimes;
|
|
|
var expirationTimes = root.expirationTimes; // Clear the lanes that no longer have pending work
|
|
|
|
|
|
var lanes = noLongerPendingLanes;
|
|
|
|
|
|
while (lanes > 0) {
|
|
|
var index = pickArbitraryLaneIndex(lanes);
|
|
|
var lane = 1 << index;
|
|
|
entanglements[index] = NoLanes;
|
|
|
eventTimes[index] = NoTimestamp;
|
|
|
expirationTimes[index] = NoTimestamp;
|
|
|
lanes &= ~lane;
|
|
|
}
|
|
|
}
|
|
|
function markRootEntangled(root, entangledLanes) {
|
|
|
// In addition to entangling each of the given lanes with each other, we also
|
|
|
// have to consider _transitive_ entanglements. For each lane that is already
|
|
|
// entangled with *any* of the given lanes, that lane is now transitively
|
|
|
// entangled with *all* the given lanes.
|
|
|
//
|
|
|
// Translated: If C is entangled with A, then entangling A with B also
|
|
|
// entangles C with B.
|
|
|
//
|
|
|
// If this is hard to grasp, it might help to intentionally break this
|
|
|
// function and look at the tests that fail in ReactTransition-test.js. Try
|
|
|
// commenting out one of the conditions below.
|
|
|
var rootEntangledLanes = root.entangledLanes |= entangledLanes;
|
|
|
var entanglements = root.entanglements;
|
|
|
var lanes = rootEntangledLanes;
|
|
|
|
|
|
while (lanes) {
|
|
|
var index = pickArbitraryLaneIndex(lanes);
|
|
|
var lane = 1 << index;
|
|
|
|
|
|
if ( // Is this one of the newly entangled lanes?
|
|
|
lane & entangledLanes | // Is this lane transitively entangled with the newly entangled lanes?
|
|
|
entanglements[index] & entangledLanes) {
|
|
|
entanglements[index] |= entangledLanes;
|
|
|
}
|
|
|
|
|
|
lanes &= ~lane;
|
|
|
}
|
|
|
}
|
|
|
function getBumpedLaneForHydration(root, renderLanes) {
|
|
|
var renderLane = getHighestPriorityLane(renderLanes);
|
|
|
var lane;
|
|
|
|
|
|
switch (renderLane) {
|
|
|
case InputContinuousLane:
|
|
|
lane = InputContinuousHydrationLane;
|
|
|
break;
|
|
|
|
|
|
case DefaultLane:
|
|
|
lane = DefaultHydrationLane;
|
|
|
break;
|
|
|
|
|
|
case TransitionLane1:
|
|
|
case TransitionLane2:
|
|
|
case TransitionLane3:
|
|
|
case TransitionLane4:
|
|
|
case TransitionLane5:
|
|
|
case TransitionLane6:
|
|
|
case TransitionLane7:
|
|
|
case TransitionLane8:
|
|
|
case TransitionLane9:
|
|
|
case TransitionLane10:
|
|
|
case TransitionLane11:
|
|
|
case TransitionLane12:
|
|
|
case TransitionLane13:
|
|
|
case TransitionLane14:
|
|
|
case TransitionLane15:
|
|
|
case TransitionLane16:
|
|
|
case RetryLane1:
|
|
|
case RetryLane2:
|
|
|
case RetryLane3:
|
|
|
case RetryLane4:
|
|
|
case RetryLane5:
|
|
|
lane = TransitionHydrationLane;
|
|
|
break;
|
|
|
|
|
|
case IdleLane:
|
|
|
lane = IdleHydrationLane;
|
|
|
break;
|
|
|
|
|
|
default:
|
|
|
// Everything else is already either a hydration lane, or shouldn't
|
|
|
// be retried at a hydration lane.
|
|
|
lane = NoLane;
|
|
|
break;
|
|
|
} // Check if the lane we chose is suspended. If so, that indicates that we
|
|
|
// already attempted and failed to hydrate at that level. Also check if we're
|
|
|
// already rendering that lane, which is rare but could happen.
|
|
|
|
|
|
|
|
|
if ((lane & (root.suspendedLanes | renderLanes)) !== NoLane) {
|
|
|
// Give up trying to hydrate and fall back to client render.
|
|
|
return NoLane;
|
|
|
}
|
|
|
|
|
|
return lane;
|
|
|
}
|
|
|
function addFiberToLanesMap(root, fiber, lanes) {
|
|
|
|
|
|
if (!isDevToolsPresent) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
var pendingUpdatersLaneMap = root.pendingUpdatersLaneMap;
|
|
|
|
|
|
while (lanes > 0) {
|
|
|
var index = laneToIndex(lanes);
|
|
|
var lane = 1 << index;
|
|
|
var updaters = pendingUpdatersLaneMap[index];
|
|
|
updaters.add(fiber);
|
|
|
lanes &= ~lane;
|
|
|
}
|
|
|
}
|
|
|
function movePendingFibersToMemoized(root, lanes) {
|
|
|
|
|
|
if (!isDevToolsPresent) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
var pendingUpdatersLaneMap = root.pendingUpdatersLaneMap;
|
|
|
var memoizedUpdaters = root.memoizedUpdaters;
|
|
|
|
|
|
while (lanes > 0) {
|
|
|
var index = laneToIndex(lanes);
|
|
|
var lane = 1 << index;
|
|
|
var updaters = pendingUpdatersLaneMap[index];
|
|
|
|
|
|
if (updaters.size > 0) {
|
|
|
updaters.forEach(function (fiber) {
|
|
|
var alternate = fiber.alternate;
|
|
|
|
|
|
if (alternate === null || !memoizedUpdaters.has(alternate)) {
|
|
|
memoizedUpdaters.add(fiber);
|
|
|
}
|
|
|
});
|
|
|
updaters.clear();
|
|
|
}
|
|
|
|
|
|
lanes &= ~lane;
|
|
|
}
|
|
|
}
|
|
|
function getTransitionsForLanes(root, lanes) {
|
|
|
{
|
|
|
return null;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var DiscreteEventPriority = SyncLane;
|
|
|
var ContinuousEventPriority = InputContinuousLane;
|
|
|
var DefaultEventPriority = DefaultLane;
|
|
|
var IdleEventPriority = IdleLane;
|
|
|
var currentUpdatePriority = NoLane;
|
|
|
function getCurrentUpdatePriority() {
|
|
|
return currentUpdatePriority;
|
|
|
}
|
|
|
function setCurrentUpdatePriority(newPriority) {
|
|
|
currentUpdatePriority = newPriority;
|
|
|
}
|
|
|
function runWithPriority(priority, fn) {
|
|
|
var previousPriority = currentUpdatePriority;
|
|
|
|
|
|
try {
|
|
|
currentUpdatePriority = priority;
|
|
|
return fn();
|
|
|
} finally {
|
|
|
currentUpdatePriority = previousPriority;
|
|
|
}
|
|
|
}
|
|
|
function higherEventPriority(a, b) {
|
|
|
return a !== 0 && a < b ? a : b;
|
|
|
}
|
|
|
function lowerEventPriority(a, b) {
|
|
|
return a === 0 || a > b ? a : b;
|
|
|
}
|
|
|
function isHigherEventPriority(a, b) {
|
|
|
return a !== 0 && a < b;
|
|
|
}
|
|
|
function lanesToEventPriority(lanes) {
|
|
|
var lane = getHighestPriorityLane(lanes);
|
|
|
|
|
|
if (!isHigherEventPriority(DiscreteEventPriority, lane)) {
|
|
|
return DiscreteEventPriority;
|
|
|
}
|
|
|
|
|
|
if (!isHigherEventPriority(ContinuousEventPriority, lane)) {
|
|
|
return ContinuousEventPriority;
|
|
|
}
|
|
|
|
|
|
if (includesNonIdleWork(lane)) {
|
|
|
return DefaultEventPriority;
|
|
|
}
|
|
|
|
|
|
return IdleEventPriority;
|
|
|
}
|
|
|
|
|
|
// This is imported by the event replaying implementation in React DOM. It's
|
|
|
// in a separate file to break a circular dependency between the renderer and
|
|
|
// the reconciler.
|
|
|
function isRootDehydrated(root) {
|
|
|
var currentState = root.current.memoizedState;
|
|
|
return currentState.isDehydrated;
|
|
|
}
|
|
|
|
|
|
var _attemptSynchronousHydration;
|
|
|
|
|
|
function setAttemptSynchronousHydration(fn) {
|
|
|
_attemptSynchronousHydration = fn;
|
|
|
}
|
|
|
function attemptSynchronousHydration(fiber) {
|
|
|
_attemptSynchronousHydration(fiber);
|
|
|
}
|
|
|
var attemptContinuousHydration;
|
|
|
function setAttemptContinuousHydration(fn) {
|
|
|
attemptContinuousHydration = fn;
|
|
|
}
|
|
|
var attemptHydrationAtCurrentPriority;
|
|
|
function setAttemptHydrationAtCurrentPriority(fn) {
|
|
|
attemptHydrationAtCurrentPriority = fn;
|
|
|
}
|
|
|
var getCurrentUpdatePriority$1;
|
|
|
function setGetCurrentUpdatePriority(fn) {
|
|
|
getCurrentUpdatePriority$1 = fn;
|
|
|
}
|
|
|
var attemptHydrationAtPriority;
|
|
|
function setAttemptHydrationAtPriority(fn) {
|
|
|
attemptHydrationAtPriority = fn;
|
|
|
} // TODO: Upgrade this definition once we're on a newer version of Flow that
|
|
|
// has this definition built-in.
|
|
|
|
|
|
var hasScheduledReplayAttempt = false; // The queue of discrete events to be replayed.
|
|
|
|
|
|
var queuedDiscreteEvents = []; // Indicates if any continuous event targets are non-null for early bailout.
|
|
|
// if the last target was dehydrated.
|
|
|
|
|
|
var queuedFocus = null;
|
|
|
var queuedDrag = null;
|
|
|
var queuedMouse = null; // For pointer events there can be one latest event per pointerId.
|
|
|
|
|
|
var queuedPointers = new Map();
|
|
|
var queuedPointerCaptures = new Map(); // We could consider replaying selectionchange and touchmoves too.
|
|
|
|
|
|
var queuedExplicitHydrationTargets = [];
|
|
|
var discreteReplayableEvents = ['mousedown', 'mouseup', 'touchcancel', 'touchend', 'touchstart', 'auxclick', 'dblclick', 'pointercancel', 'pointerdown', 'pointerup', 'dragend', 'dragstart', 'drop', 'compositionend', 'compositionstart', 'keydown', 'keypress', 'keyup', 'input', 'textInput', // Intentionally camelCase
|
|
|
'copy', 'cut', 'paste', 'click', 'change', 'contextmenu', 'reset', 'submit'];
|
|
|
function isDiscreteEventThatRequiresHydration(eventType) {
|
|
|
return discreteReplayableEvents.indexOf(eventType) > -1;
|
|
|
}
|
|
|
|
|
|
function createQueuedReplayableEvent(blockedOn, domEventName, eventSystemFlags, targetContainer, nativeEvent) {
|
|
|
return {
|
|
|
blockedOn: blockedOn,
|
|
|
domEventName: domEventName,
|
|
|
eventSystemFlags: eventSystemFlags,
|
|
|
nativeEvent: nativeEvent,
|
|
|
targetContainers: [targetContainer]
|
|
|
};
|
|
|
}
|
|
|
|
|
|
function clearIfContinuousEvent(domEventName, nativeEvent) {
|
|
|
switch (domEventName) {
|
|
|
case 'focusin':
|
|
|
case 'focusout':
|
|
|
queuedFocus = null;
|
|
|
break;
|
|
|
|
|
|
case 'dragenter':
|
|
|
case 'dragleave':
|
|
|
queuedDrag = null;
|
|
|
break;
|
|
|
|
|
|
case 'mouseover':
|
|
|
case 'mouseout':
|
|
|
queuedMouse = null;
|
|
|
break;
|
|
|
|
|
|
case 'pointerover':
|
|
|
case 'pointerout':
|
|
|
{
|
|
|
var pointerId = nativeEvent.pointerId;
|
|
|
queuedPointers.delete(pointerId);
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
case 'gotpointercapture':
|
|
|
case 'lostpointercapture':
|
|
|
{
|
|
|
var _pointerId = nativeEvent.pointerId;
|
|
|
queuedPointerCaptures.delete(_pointerId);
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function accumulateOrCreateContinuousQueuedReplayableEvent(existingQueuedEvent, blockedOn, domEventName, eventSystemFlags, targetContainer, nativeEvent) {
|
|
|
if (existingQueuedEvent === null || existingQueuedEvent.nativeEvent !== nativeEvent) {
|
|
|
var queuedEvent = createQueuedReplayableEvent(blockedOn, domEventName, eventSystemFlags, targetContainer, nativeEvent);
|
|
|
|
|
|
if (blockedOn !== null) {
|
|
|
var _fiber2 = getInstanceFromNode(blockedOn);
|
|
|
|
|
|
if (_fiber2 !== null) {
|
|
|
// Attempt to increase the priority of this target.
|
|
|
attemptContinuousHydration(_fiber2);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return queuedEvent;
|
|
|
} // If we have already queued this exact event, then it's because
|
|
|
// the different event systems have different DOM event listeners.
|
|
|
// We can accumulate the flags, and the targetContainers, and
|
|
|
// store a single event to be replayed.
|
|
|
|
|
|
|
|
|
existingQueuedEvent.eventSystemFlags |= eventSystemFlags;
|
|
|
var targetContainers = existingQueuedEvent.targetContainers;
|
|
|
|
|
|
if (targetContainer !== null && targetContainers.indexOf(targetContainer) === -1) {
|
|
|
targetContainers.push(targetContainer);
|
|
|
}
|
|
|
|
|
|
return existingQueuedEvent;
|
|
|
}
|
|
|
|
|
|
function queueIfContinuousEvent(blockedOn, domEventName, eventSystemFlags, targetContainer, nativeEvent) {
|
|
|
// These set relatedTarget to null because the replayed event will be treated as if we
|
|
|
// moved from outside the window (no target) onto the target once it hydrates.
|
|
|
// Instead of mutating we could clone the event.
|
|
|
switch (domEventName) {
|
|
|
case 'focusin':
|
|
|
{
|
|
|
var focusEvent = nativeEvent;
|
|
|
queuedFocus = accumulateOrCreateContinuousQueuedReplayableEvent(queuedFocus, blockedOn, domEventName, eventSystemFlags, targetContainer, focusEvent);
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
case 'dragenter':
|
|
|
{
|
|
|
var dragEvent = nativeEvent;
|
|
|
queuedDrag = accumulateOrCreateContinuousQueuedReplayableEvent(queuedDrag, blockedOn, domEventName, eventSystemFlags, targetContainer, dragEvent);
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
case 'mouseover':
|
|
|
{
|
|
|
var mouseEvent = nativeEvent;
|
|
|
queuedMouse = accumulateOrCreateContinuousQueuedReplayableEvent(queuedMouse, blockedOn, domEventName, eventSystemFlags, targetContainer, mouseEvent);
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
case 'pointerover':
|
|
|
{
|
|
|
var pointerEvent = nativeEvent;
|
|
|
var pointerId = pointerEvent.pointerId;
|
|
|
queuedPointers.set(pointerId, accumulateOrCreateContinuousQueuedReplayableEvent(queuedPointers.get(pointerId) || null, blockedOn, domEventName, eventSystemFlags, targetContainer, pointerEvent));
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
case 'gotpointercapture':
|
|
|
{
|
|
|
var _pointerEvent = nativeEvent;
|
|
|
var _pointerId2 = _pointerEvent.pointerId;
|
|
|
queuedPointerCaptures.set(_pointerId2, accumulateOrCreateContinuousQueuedReplayableEvent(queuedPointerCaptures.get(_pointerId2) || null, blockedOn, domEventName, eventSystemFlags, targetContainer, _pointerEvent));
|
|
|
return true;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return false;
|
|
|
} // Check if this target is unblocked. Returns true if it's unblocked.
|
|
|
|
|
|
function attemptExplicitHydrationTarget(queuedTarget) {
|
|
|
// TODO: This function shares a lot of logic with findInstanceBlockingEvent.
|
|
|
// Try to unify them. It's a bit tricky since it would require two return
|
|
|
// values.
|
|
|
var targetInst = getClosestInstanceFromNode(queuedTarget.target);
|
|
|
|
|
|
if (targetInst !== null) {
|
|
|
var nearestMounted = getNearestMountedFiber(targetInst);
|
|
|
|
|
|
if (nearestMounted !== null) {
|
|
|
var tag = nearestMounted.tag;
|
|
|
|
|
|
if (tag === SuspenseComponent) {
|
|
|
var instance = getSuspenseInstanceFromFiber(nearestMounted);
|
|
|
|
|
|
if (instance !== null) {
|
|
|
// We're blocked on hydrating this boundary.
|
|
|
// Increase its priority.
|
|
|
queuedTarget.blockedOn = instance;
|
|
|
attemptHydrationAtPriority(queuedTarget.priority, function () {
|
|
|
attemptHydrationAtCurrentPriority(nearestMounted);
|
|
|
});
|
|
|
return;
|
|
|
}
|
|
|
} else if (tag === HostRoot) {
|
|
|
var root = nearestMounted.stateNode;
|
|
|
|
|
|
if (isRootDehydrated(root)) {
|
|
|
queuedTarget.blockedOn = getContainerFromFiber(nearestMounted); // We don't currently have a way to increase the priority of
|
|
|
// a root other than sync.
|
|
|
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
queuedTarget.blockedOn = null;
|
|
|
}
|
|
|
|
|
|
function queueExplicitHydrationTarget(target) {
|
|
|
// TODO: This will read the priority if it's dispatched by the React
|
|
|
// event system but not native events. Should read window.event.type, like
|
|
|
// we do for updates (getCurrentEventPriority).
|
|
|
var updatePriority = getCurrentUpdatePriority$1();
|
|
|
var queuedTarget = {
|
|
|
blockedOn: null,
|
|
|
target: target,
|
|
|
priority: updatePriority
|
|
|
};
|
|
|
var i = 0;
|
|
|
|
|
|
for (; i < queuedExplicitHydrationTargets.length; i++) {
|
|
|
// Stop once we hit the first target with lower priority than
|
|
|
if (!isHigherEventPriority(updatePriority, queuedExplicitHydrationTargets[i].priority)) {
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
queuedExplicitHydrationTargets.splice(i, 0, queuedTarget);
|
|
|
|
|
|
if (i === 0) {
|
|
|
attemptExplicitHydrationTarget(queuedTarget);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function attemptReplayContinuousQueuedEvent(queuedEvent) {
|
|
|
if (queuedEvent.blockedOn !== null) {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
var targetContainers = queuedEvent.targetContainers;
|
|
|
|
|
|
while (targetContainers.length > 0) {
|
|
|
var targetContainer = targetContainers[0];
|
|
|
var nextBlockedOn = findInstanceBlockingEvent(queuedEvent.domEventName, queuedEvent.eventSystemFlags, targetContainer, queuedEvent.nativeEvent);
|
|
|
|
|
|
if (nextBlockedOn === null) {
|
|
|
{
|
|
|
var nativeEvent = queuedEvent.nativeEvent;
|
|
|
var nativeEventClone = new nativeEvent.constructor(nativeEvent.type, nativeEvent);
|
|
|
setReplayingEvent(nativeEventClone);
|
|
|
nativeEvent.target.dispatchEvent(nativeEventClone);
|
|
|
resetReplayingEvent();
|
|
|
}
|
|
|
} else {
|
|
|
// We're still blocked. Try again later.
|
|
|
var _fiber3 = getInstanceFromNode(nextBlockedOn);
|
|
|
|
|
|
if (_fiber3 !== null) {
|
|
|
attemptContinuousHydration(_fiber3);
|
|
|
}
|
|
|
|
|
|
queuedEvent.blockedOn = nextBlockedOn;
|
|
|
return false;
|
|
|
} // This target container was successfully dispatched. Try the next.
|
|
|
|
|
|
|
|
|
targetContainers.shift();
|
|
|
}
|
|
|
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
function attemptReplayContinuousQueuedEventInMap(queuedEvent, key, map) {
|
|
|
if (attemptReplayContinuousQueuedEvent(queuedEvent)) {
|
|
|
map.delete(key);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function replayUnblockedEvents() {
|
|
|
hasScheduledReplayAttempt = false;
|
|
|
|
|
|
|
|
|
if (queuedFocus !== null && attemptReplayContinuousQueuedEvent(queuedFocus)) {
|
|
|
queuedFocus = null;
|
|
|
}
|
|
|
|
|
|
if (queuedDrag !== null && attemptReplayContinuousQueuedEvent(queuedDrag)) {
|
|
|
queuedDrag = null;
|
|
|
}
|
|
|
|
|
|
if (queuedMouse !== null && attemptReplayContinuousQueuedEvent(queuedMouse)) {
|
|
|
queuedMouse = null;
|
|
|
}
|
|
|
|
|
|
queuedPointers.forEach(attemptReplayContinuousQueuedEventInMap);
|
|
|
queuedPointerCaptures.forEach(attemptReplayContinuousQueuedEventInMap);
|
|
|
}
|
|
|
|
|
|
function scheduleCallbackIfUnblocked(queuedEvent, unblocked) {
|
|
|
if (queuedEvent.blockedOn === unblocked) {
|
|
|
queuedEvent.blockedOn = null;
|
|
|
|
|
|
if (!hasScheduledReplayAttempt) {
|
|
|
hasScheduledReplayAttempt = true; // Schedule a callback to attempt replaying as many events as are
|
|
|
// now unblocked. This first might not actually be unblocked yet.
|
|
|
// We could check it early to avoid scheduling an unnecessary callback.
|
|
|
|
|
|
Scheduler.unstable_scheduleCallback(Scheduler.unstable_NormalPriority, replayUnblockedEvents);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function retryIfBlockedOn(unblocked) {
|
|
|
// Mark anything that was blocked on this as no longer blocked
|
|
|
// and eligible for a replay.
|
|
|
if (queuedDiscreteEvents.length > 0) {
|
|
|
scheduleCallbackIfUnblocked(queuedDiscreteEvents[0], unblocked); // This is a exponential search for each boundary that commits. I think it's
|
|
|
// worth it because we expect very few discrete events to queue up and once
|
|
|
// we are actually fully unblocked it will be fast to replay them.
|
|
|
|
|
|
for (var i = 1; i < queuedDiscreteEvents.length; i++) {
|
|
|
var queuedEvent = queuedDiscreteEvents[i];
|
|
|
|
|
|
if (queuedEvent.blockedOn === unblocked) {
|
|
|
queuedEvent.blockedOn = null;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (queuedFocus !== null) {
|
|
|
scheduleCallbackIfUnblocked(queuedFocus, unblocked);
|
|
|
}
|
|
|
|
|
|
if (queuedDrag !== null) {
|
|
|
scheduleCallbackIfUnblocked(queuedDrag, unblocked);
|
|
|
}
|
|
|
|
|
|
if (queuedMouse !== null) {
|
|
|
scheduleCallbackIfUnblocked(queuedMouse, unblocked);
|
|
|
}
|
|
|
|
|
|
var unblock = function (queuedEvent) {
|
|
|
return scheduleCallbackIfUnblocked(queuedEvent, unblocked);
|
|
|
};
|
|
|
|
|
|
queuedPointers.forEach(unblock);
|
|
|
queuedPointerCaptures.forEach(unblock);
|
|
|
|
|
|
for (var _i = 0; _i < queuedExplicitHydrationTargets.length; _i++) {
|
|
|
var queuedTarget = queuedExplicitHydrationTargets[_i];
|
|
|
|
|
|
if (queuedTarget.blockedOn === unblocked) {
|
|
|
queuedTarget.blockedOn = null;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
while (queuedExplicitHydrationTargets.length > 0) {
|
|
|
var nextExplicitTarget = queuedExplicitHydrationTargets[0];
|
|
|
|
|
|
if (nextExplicitTarget.blockedOn !== null) {
|
|
|
// We're still blocked.
|
|
|
break;
|
|
|
} else {
|
|
|
attemptExplicitHydrationTarget(nextExplicitTarget);
|
|
|
|
|
|
if (nextExplicitTarget.blockedOn === null) {
|
|
|
// We're unblocked.
|
|
|
queuedExplicitHydrationTargets.shift();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var ReactCurrentBatchConfig = ReactSharedInternals.ReactCurrentBatchConfig; // TODO: can we stop exporting these?
|
|
|
|
|
|
var _enabled = true; // This is exported in FB builds for use by legacy FB layer infra.
|
|
|
// We'd like to remove this but it's not clear if this is safe.
|
|
|
|
|
|
function setEnabled(enabled) {
|
|
|
_enabled = !!enabled;
|
|
|
}
|
|
|
function isEnabled() {
|
|
|
return _enabled;
|
|
|
}
|
|
|
function createEventListenerWrapperWithPriority(targetContainer, domEventName, eventSystemFlags) {
|
|
|
var eventPriority = getEventPriority(domEventName);
|
|
|
var listenerWrapper;
|
|
|
|
|
|
switch (eventPriority) {
|
|
|
case DiscreteEventPriority:
|
|
|
listenerWrapper = dispatchDiscreteEvent;
|
|
|
break;
|
|
|
|
|
|
case ContinuousEventPriority:
|
|
|
listenerWrapper = dispatchContinuousEvent;
|
|
|
break;
|
|
|
|
|
|
case DefaultEventPriority:
|
|
|
default:
|
|
|
listenerWrapper = dispatchEvent;
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
return listenerWrapper.bind(null, domEventName, eventSystemFlags, targetContainer);
|
|
|
}
|
|
|
|
|
|
function dispatchDiscreteEvent(domEventName, eventSystemFlags, container, nativeEvent) {
|
|
|
var previousPriority = getCurrentUpdatePriority();
|
|
|
var prevTransition = ReactCurrentBatchConfig.transition;
|
|
|
ReactCurrentBatchConfig.transition = null;
|
|
|
|
|
|
try {
|
|
|
setCurrentUpdatePriority(DiscreteEventPriority);
|
|
|
dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);
|
|
|
} finally {
|
|
|
setCurrentUpdatePriority(previousPriority);
|
|
|
ReactCurrentBatchConfig.transition = prevTransition;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function dispatchContinuousEvent(domEventName, eventSystemFlags, container, nativeEvent) {
|
|
|
var previousPriority = getCurrentUpdatePriority();
|
|
|
var prevTransition = ReactCurrentBatchConfig.transition;
|
|
|
ReactCurrentBatchConfig.transition = null;
|
|
|
|
|
|
try {
|
|
|
setCurrentUpdatePriority(ContinuousEventPriority);
|
|
|
dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);
|
|
|
} finally {
|
|
|
setCurrentUpdatePriority(previousPriority);
|
|
|
ReactCurrentBatchConfig.transition = prevTransition;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function dispatchEvent(domEventName, eventSystemFlags, targetContainer, nativeEvent) {
|
|
|
if (!_enabled) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
{
|
|
|
dispatchEventWithEnableCapturePhaseSelectiveHydrationWithoutDiscreteEventReplay(domEventName, eventSystemFlags, targetContainer, nativeEvent);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function dispatchEventWithEnableCapturePhaseSelectiveHydrationWithoutDiscreteEventReplay(domEventName, eventSystemFlags, targetContainer, nativeEvent) {
|
|
|
var blockedOn = findInstanceBlockingEvent(domEventName, eventSystemFlags, targetContainer, nativeEvent);
|
|
|
|
|
|
if (blockedOn === null) {
|
|
|
dispatchEventForPluginEventSystem(domEventName, eventSystemFlags, nativeEvent, return_targetInst, targetContainer);
|
|
|
clearIfContinuousEvent(domEventName, nativeEvent);
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (queueIfContinuousEvent(blockedOn, domEventName, eventSystemFlags, targetContainer, nativeEvent)) {
|
|
|
nativeEvent.stopPropagation();
|
|
|
return;
|
|
|
} // We need to clear only if we didn't queue because
|
|
|
// queueing is accumulative.
|
|
|
|
|
|
|
|
|
clearIfContinuousEvent(domEventName, nativeEvent);
|
|
|
|
|
|
if (eventSystemFlags & IS_CAPTURE_PHASE && isDiscreteEventThatRequiresHydration(domEventName)) {
|
|
|
while (blockedOn !== null) {
|
|
|
var fiber = getInstanceFromNode(blockedOn);
|
|
|
|
|
|
if (fiber !== null) {
|
|
|
attemptSynchronousHydration(fiber);
|
|
|
}
|
|
|
|
|
|
var nextBlockedOn = findInstanceBlockingEvent(domEventName, eventSystemFlags, targetContainer, nativeEvent);
|
|
|
|
|
|
if (nextBlockedOn === null) {
|
|
|
dispatchEventForPluginEventSystem(domEventName, eventSystemFlags, nativeEvent, return_targetInst, targetContainer);
|
|
|
}
|
|
|
|
|
|
if (nextBlockedOn === blockedOn) {
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
blockedOn = nextBlockedOn;
|
|
|
}
|
|
|
|
|
|
if (blockedOn !== null) {
|
|
|
nativeEvent.stopPropagation();
|
|
|
}
|
|
|
|
|
|
return;
|
|
|
} // This is not replayable so we'll invoke it but without a target,
|
|
|
// in case the event system needs to trace it.
|
|
|
|
|
|
|
|
|
dispatchEventForPluginEventSystem(domEventName, eventSystemFlags, nativeEvent, null, targetContainer);
|
|
|
}
|
|
|
|
|
|
var return_targetInst = null; // Returns a SuspenseInstance or Container if it's blocked.
|
|
|
// The return_targetInst field above is conceptually part of the return value.
|
|
|
|
|
|
function findInstanceBlockingEvent(domEventName, eventSystemFlags, targetContainer, nativeEvent) {
|
|
|
// TODO: Warn if _enabled is false.
|
|
|
return_targetInst = null;
|
|
|
var nativeEventTarget = getEventTarget(nativeEvent);
|
|
|
var targetInst = getClosestInstanceFromNode(nativeEventTarget);
|
|
|
|
|
|
if (targetInst !== null) {
|
|
|
var nearestMounted = getNearestMountedFiber(targetInst);
|
|
|
|
|
|
if (nearestMounted === null) {
|
|
|
// This tree has been unmounted already. Dispatch without a target.
|
|
|
targetInst = null;
|
|
|
} else {
|
|
|
var tag = nearestMounted.tag;
|
|
|
|
|
|
if (tag === SuspenseComponent) {
|
|
|
var instance = getSuspenseInstanceFromFiber(nearestMounted);
|
|
|
|
|
|
if (instance !== null) {
|
|
|
// Queue the event to be replayed later. Abort dispatching since we
|
|
|
// don't want this event dispatched twice through the event system.
|
|
|
// TODO: If this is the first discrete event in the queue. Schedule an increased
|
|
|
// priority for this boundary.
|
|
|
return instance;
|
|
|
} // This shouldn't happen, something went wrong but to avoid blocking
|
|
|
// the whole system, dispatch the event without a target.
|
|
|
// TODO: Warn.
|
|
|
|
|
|
|
|
|
targetInst = null;
|
|
|
} else if (tag === HostRoot) {
|
|
|
var root = nearestMounted.stateNode;
|
|
|
|
|
|
if (isRootDehydrated(root)) {
|
|
|
// If this happens during a replay something went wrong and it might block
|
|
|
// the whole system.
|
|
|
return getContainerFromFiber(nearestMounted);
|
|
|
}
|
|
|
|
|
|
targetInst = null;
|
|
|
} else if (nearestMounted !== targetInst) {
|
|
|
// If we get an event (ex: img onload) before committing that
|
|
|
// component's mount, ignore it for now (that is, treat it as if it was an
|
|
|
// event on a non-React tree). We might also consider queueing events and
|
|
|
// dispatching them after the mount.
|
|
|
targetInst = null;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return_targetInst = targetInst; // We're not blocked on anything.
|
|
|
|
|
|
return null;
|
|
|
}
|
|
|
function getEventPriority(domEventName) {
|
|
|
switch (domEventName) {
|
|
|
// Used by SimpleEventPlugin:
|
|
|
case 'cancel':
|
|
|
case 'click':
|
|
|
case 'close':
|
|
|
case 'contextmenu':
|
|
|
case 'copy':
|
|
|
case 'cut':
|
|
|
case 'auxclick':
|
|
|
case 'dblclick':
|
|
|
case 'dragend':
|
|
|
case 'dragstart':
|
|
|
case 'drop':
|
|
|
case 'focusin':
|
|
|
case 'focusout':
|
|
|
case 'input':
|
|
|
case 'invalid':
|
|
|
case 'keydown':
|
|
|
case 'keypress':
|
|
|
case 'keyup':
|
|
|
case 'mousedown':
|
|
|
case 'mouseup':
|
|
|
case 'paste':
|
|
|
case 'pause':
|
|
|
case 'play':
|
|
|
case 'pointercancel':
|
|
|
case 'pointerdown':
|
|
|
case 'pointerup':
|
|
|
case 'ratechange':
|
|
|
case 'reset':
|
|
|
case 'resize':
|
|
|
case 'seeked':
|
|
|
case 'submit':
|
|
|
case 'touchcancel':
|
|
|
case 'touchend':
|
|
|
case 'touchstart':
|
|
|
case 'volumechange': // Used by polyfills:
|
|
|
// eslint-disable-next-line no-fallthrough
|
|
|
|
|
|
case 'change':
|
|
|
case 'selectionchange':
|
|
|
case 'textInput':
|
|
|
case 'compositionstart':
|
|
|
case 'compositionend':
|
|
|
case 'compositionupdate': // Only enableCreateEventHandleAPI:
|
|
|
// eslint-disable-next-line no-fallthrough
|
|
|
|
|
|
case 'beforeblur':
|
|
|
case 'afterblur': // Not used by React but could be by user code:
|
|
|
// eslint-disable-next-line no-fallthrough
|
|
|
|
|
|
case 'beforeinput':
|
|
|
case 'blur':
|
|
|
case 'fullscreenchange':
|
|
|
case 'focus':
|
|
|
case 'hashchange':
|
|
|
case 'popstate':
|
|
|
case 'select':
|
|
|
case 'selectstart':
|
|
|
return DiscreteEventPriority;
|
|
|
|
|
|
case 'drag':
|
|
|
case 'dragenter':
|
|
|
case 'dragexit':
|
|
|
case 'dragleave':
|
|
|
case 'dragover':
|
|
|
case 'mousemove':
|
|
|
case 'mouseout':
|
|
|
case 'mouseover':
|
|
|
case 'pointermove':
|
|
|
case 'pointerout':
|
|
|
case 'pointerover':
|
|
|
case 'scroll':
|
|
|
case 'toggle':
|
|
|
case 'touchmove':
|
|
|
case 'wheel': // Not used by React but could be by user code:
|
|
|
// eslint-disable-next-line no-fallthrough
|
|
|
|
|
|
case 'mouseenter':
|
|
|
case 'mouseleave':
|
|
|
case 'pointerenter':
|
|
|
case 'pointerleave':
|
|
|
return ContinuousEventPriority;
|
|
|
|
|
|
case 'message':
|
|
|
{
|
|
|
// We might be in the Scheduler callback.
|
|
|
// Eventually this mechanism will be replaced by a check
|
|
|
// of the current priority on the native scheduler.
|
|
|
var schedulerPriority = getCurrentPriorityLevel();
|
|
|
|
|
|
switch (schedulerPriority) {
|
|
|
case ImmediatePriority:
|
|
|
return DiscreteEventPriority;
|
|
|
|
|
|
case UserBlockingPriority:
|
|
|
return ContinuousEventPriority;
|
|
|
|
|
|
case NormalPriority:
|
|
|
case LowPriority:
|
|
|
// TODO: Handle LowSchedulerPriority, somehow. Maybe the same lane as hydration.
|
|
|
return DefaultEventPriority;
|
|
|
|
|
|
case IdlePriority:
|
|
|
return IdleEventPriority;
|
|
|
|
|
|
default:
|
|
|
return DefaultEventPriority;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
default:
|
|
|
return DefaultEventPriority;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function addEventBubbleListener(target, eventType, listener) {
|
|
|
target.addEventListener(eventType, listener, false);
|
|
|
return listener;
|
|
|
}
|
|
|
function addEventCaptureListener(target, eventType, listener) {
|
|
|
target.addEventListener(eventType, listener, true);
|
|
|
return listener;
|
|
|
}
|
|
|
function addEventCaptureListenerWithPassiveFlag(target, eventType, listener, passive) {
|
|
|
target.addEventListener(eventType, listener, {
|
|
|
capture: true,
|
|
|
passive: passive
|
|
|
});
|
|
|
return listener;
|
|
|
}
|
|
|
function addEventBubbleListenerWithPassiveFlag(target, eventType, listener, passive) {
|
|
|
target.addEventListener(eventType, listener, {
|
|
|
passive: passive
|
|
|
});
|
|
|
return listener;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* These variables store information about text content of a target node,
|
|
|
* allowing comparison of content before and after a given event.
|
|
|
*
|
|
|
* Identify the node where selection currently begins, then observe
|
|
|
* both its text content and its current position in the DOM. Since the
|
|
|
* browser may natively replace the target node during composition, we can
|
|
|
* use its position to find its replacement.
|
|
|
*
|
|
|
*
|
|
|
*/
|
|
|
var root = null;
|
|
|
var startText = null;
|
|
|
var fallbackText = null;
|
|
|
function initialize(nativeEventTarget) {
|
|
|
root = nativeEventTarget;
|
|
|
startText = getText();
|
|
|
return true;
|
|
|
}
|
|
|
function reset() {
|
|
|
root = null;
|
|
|
startText = null;
|
|
|
fallbackText = null;
|
|
|
}
|
|
|
function getData() {
|
|
|
if (fallbackText) {
|
|
|
return fallbackText;
|
|
|
}
|
|
|
|
|
|
var start;
|
|
|
var startValue = startText;
|
|
|
var startLength = startValue.length;
|
|
|
var end;
|
|
|
var endValue = getText();
|
|
|
var endLength = endValue.length;
|
|
|
|
|
|
for (start = 0; start < startLength; start++) {
|
|
|
if (startValue[start] !== endValue[start]) {
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var minEnd = startLength - start;
|
|
|
|
|
|
for (end = 1; end <= minEnd; end++) {
|
|
|
if (startValue[startLength - end] !== endValue[endLength - end]) {
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var sliceTail = end > 1 ? 1 - end : undefined;
|
|
|
fallbackText = endValue.slice(start, sliceTail);
|
|
|
return fallbackText;
|
|
|
}
|
|
|
function getText() {
|
|
|
if ('value' in root) {
|
|
|
return root.value;
|
|
|
}
|
|
|
|
|
|
return root.textContent;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* `charCode` represents the actual "character code" and is safe to use with
|
|
|
* `String.fromCharCode`. As such, only keys that correspond to printable
|
|
|
* characters produce a valid `charCode`, the only exception to this is Enter.
|
|
|
* The Tab-key is considered non-printable and does not have a `charCode`,
|
|
|
* presumably because it does not produce a tab-character in browsers.
|
|
|
*
|
|
|
* @param {object} nativeEvent Native browser event.
|
|
|
* @return {number} Normalized `charCode` property.
|
|
|
*/
|
|
|
function getEventCharCode(nativeEvent) {
|
|
|
var charCode;
|
|
|
var keyCode = nativeEvent.keyCode;
|
|
|
|
|
|
if ('charCode' in nativeEvent) {
|
|
|
charCode = nativeEvent.charCode; // FF does not set `charCode` for the Enter-key, check against `keyCode`.
|
|
|
|
|
|
if (charCode === 0 && keyCode === 13) {
|
|
|
charCode = 13;
|
|
|
}
|
|
|
} else {
|
|
|
// IE8 does not implement `charCode`, but `keyCode` has the correct value.
|
|
|
charCode = keyCode;
|
|
|
} // IE and Edge (on Windows) and Chrome / Safari (on Windows and Linux)
|
|
|
// report Enter as charCode 10 when ctrl is pressed.
|
|
|
|
|
|
|
|
|
if (charCode === 10) {
|
|
|
charCode = 13;
|
|
|
} // Some non-printable keys are reported in `charCode`/`keyCode`, discard them.
|
|
|
// Must not discard the (non-)printable Enter-key.
|
|
|
|
|
|
|
|
|
if (charCode >= 32 || charCode === 13) {
|
|
|
return charCode;
|
|
|
}
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
function functionThatReturnsTrue() {
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
function functionThatReturnsFalse() {
|
|
|
return false;
|
|
|
} // This is intentionally a factory so that we have different returned constructors.
|
|
|
// If we had a single constructor, it would be megamorphic and engines would deopt.
|
|
|
|
|
|
|
|
|
function createSyntheticEvent(Interface) {
|
|
|
/**
|
|
|
* Synthetic events are dispatched by event plugins, typically in response to a
|
|
|
* top-level event delegation handler.
|
|
|
*
|
|
|
* These systems should generally use pooling to reduce the frequency of garbage
|
|
|
* collection. The system should check `isPersistent` to determine whether the
|
|
|
* event should be released into the pool after being dispatched. Users that
|
|
|
* need a persisted event should invoke `persist`.
|
|
|
*
|
|
|
* Synthetic events (and subclasses) implement the DOM Level 3 Events API by
|
|
|
* normalizing browser quirks. Subclasses do not necessarily have to implement a
|
|
|
* DOM interface; custom application-specific events can also subclass this.
|
|
|
*/
|
|
|
function SyntheticBaseEvent(reactName, reactEventType, targetInst, nativeEvent, nativeEventTarget) {
|
|
|
this._reactName = reactName;
|
|
|
this._targetInst = targetInst;
|
|
|
this.type = reactEventType;
|
|
|
this.nativeEvent = nativeEvent;
|
|
|
this.target = nativeEventTarget;
|
|
|
this.currentTarget = null;
|
|
|
|
|
|
for (var _propName in Interface) {
|
|
|
if (!Interface.hasOwnProperty(_propName)) {
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
var normalize = Interface[_propName];
|
|
|
|
|
|
if (normalize) {
|
|
|
this[_propName] = normalize(nativeEvent);
|
|
|
} else {
|
|
|
this[_propName] = nativeEvent[_propName];
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var defaultPrevented = nativeEvent.defaultPrevented != null ? nativeEvent.defaultPrevented : nativeEvent.returnValue === false;
|
|
|
|
|
|
if (defaultPrevented) {
|
|
|
this.isDefaultPrevented = functionThatReturnsTrue;
|
|
|
} else {
|
|
|
this.isDefaultPrevented = functionThatReturnsFalse;
|
|
|
}
|
|
|
|
|
|
this.isPropagationStopped = functionThatReturnsFalse;
|
|
|
return this;
|
|
|
}
|
|
|
|
|
|
assign(SyntheticBaseEvent.prototype, {
|
|
|
preventDefault: function () {
|
|
|
this.defaultPrevented = true;
|
|
|
var event = this.nativeEvent;
|
|
|
|
|
|
if (!event) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (event.preventDefault) {
|
|
|
event.preventDefault(); // $FlowFixMe - flow is not aware of `unknown` in IE
|
|
|
} else if (typeof event.returnValue !== 'unknown') {
|
|
|
event.returnValue = false;
|
|
|
}
|
|
|
|
|
|
this.isDefaultPrevented = functionThatReturnsTrue;
|
|
|
},
|
|
|
stopPropagation: function () {
|
|
|
var event = this.nativeEvent;
|
|
|
|
|
|
if (!event) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (event.stopPropagation) {
|
|
|
event.stopPropagation(); // $FlowFixMe - flow is not aware of `unknown` in IE
|
|
|
} else if (typeof event.cancelBubble !== 'unknown') {
|
|
|
// The ChangeEventPlugin registers a "propertychange" event for
|
|
|
// IE. This event does not support bubbling or cancelling, and
|
|
|
// any references to cancelBubble throw "Member not found". A
|
|
|
// typeof check of "unknown" circumvents this issue (and is also
|
|
|
// IE specific).
|
|
|
event.cancelBubble = true;
|
|
|
}
|
|
|
|
|
|
this.isPropagationStopped = functionThatReturnsTrue;
|
|
|
},
|
|
|
|
|
|
/**
|
|
|
* We release all dispatched `SyntheticEvent`s after each event loop, adding
|
|
|
* them back into the pool. This allows a way to hold onto a reference that
|
|
|
* won't be added back into the pool.
|
|
|
*/
|
|
|
persist: function () {// Modern event system doesn't use pooling.
|
|
|
},
|
|
|
|
|
|
/**
|
|
|
* Checks if this event should be released back into the pool.
|
|
|
*
|
|
|
* @return {boolean} True if this should not be released, false otherwise.
|
|
|
*/
|
|
|
isPersistent: functionThatReturnsTrue
|
|
|
});
|
|
|
return SyntheticBaseEvent;
|
|
|
}
|
|
|
/**
|
|
|
* @interface Event
|
|
|
* @see http://www.w3.org/TR/DOM-Level-3-Events/
|
|
|
*/
|
|
|
|
|
|
|
|
|
var EventInterface = {
|
|
|
eventPhase: 0,
|
|
|
bubbles: 0,
|
|
|
cancelable: 0,
|
|
|
timeStamp: function (event) {
|
|
|
return event.timeStamp || Date.now();
|
|
|
},
|
|
|
defaultPrevented: 0,
|
|
|
isTrusted: 0
|
|
|
};
|
|
|
var SyntheticEvent = createSyntheticEvent(EventInterface);
|
|
|
|
|
|
var UIEventInterface = assign({}, EventInterface, {
|
|
|
view: 0,
|
|
|
detail: 0
|
|
|
});
|
|
|
|
|
|
var SyntheticUIEvent = createSyntheticEvent(UIEventInterface);
|
|
|
var lastMovementX;
|
|
|
var lastMovementY;
|
|
|
var lastMouseEvent;
|
|
|
|
|
|
function updateMouseMovementPolyfillState(event) {
|
|
|
if (event !== lastMouseEvent) {
|
|
|
if (lastMouseEvent && event.type === 'mousemove') {
|
|
|
lastMovementX = event.screenX - lastMouseEvent.screenX;
|
|
|
lastMovementY = event.screenY - lastMouseEvent.screenY;
|
|
|
} else {
|
|
|
lastMovementX = 0;
|
|
|
lastMovementY = 0;
|
|
|
}
|
|
|
|
|
|
lastMouseEvent = event;
|
|
|
}
|
|
|
}
|
|
|
/**
|
|
|
* @interface MouseEvent
|
|
|
* @see http://www.w3.org/TR/DOM-Level-3-Events/
|
|
|
*/
|
|
|
|
|
|
|
|
|
var MouseEventInterface = assign({}, UIEventInterface, {
|
|
|
screenX: 0,
|
|
|
screenY: 0,
|
|
|
clientX: 0,
|
|
|
clientY: 0,
|
|
|
pageX: 0,
|
|
|
pageY: 0,
|
|
|
ctrlKey: 0,
|
|
|
shiftKey: 0,
|
|
|
altKey: 0,
|
|
|
metaKey: 0,
|
|
|
getModifierState: getEventModifierState,
|
|
|
button: 0,
|
|
|
buttons: 0,
|
|
|
relatedTarget: function (event) {
|
|
|
if (event.relatedTarget === undefined) return event.fromElement === event.srcElement ? event.toElement : event.fromElement;
|
|
|
return event.relatedTarget;
|
|
|
},
|
|
|
movementX: function (event) {
|
|
|
if ('movementX' in event) {
|
|
|
return event.movementX;
|
|
|
}
|
|
|
|
|
|
updateMouseMovementPolyfillState(event);
|
|
|
return lastMovementX;
|
|
|
},
|
|
|
movementY: function (event) {
|
|
|
if ('movementY' in event) {
|
|
|
return event.movementY;
|
|
|
} // Don't need to call updateMouseMovementPolyfillState() here
|
|
|
// because it's guaranteed to have already run when movementX
|
|
|
// was copied.
|
|
|
|
|
|
|
|
|
return lastMovementY;
|
|
|
}
|
|
|
});
|
|
|
|
|
|
var SyntheticMouseEvent = createSyntheticEvent(MouseEventInterface);
|
|
|
/**
|
|
|
* @interface DragEvent
|
|
|
* @see http://www.w3.org/TR/DOM-Level-3-Events/
|
|
|
*/
|
|
|
|
|
|
var DragEventInterface = assign({}, MouseEventInterface, {
|
|
|
dataTransfer: 0
|
|
|
});
|
|
|
|
|
|
var SyntheticDragEvent = createSyntheticEvent(DragEventInterface);
|
|
|
/**
|
|
|
* @interface FocusEvent
|
|
|
* @see http://www.w3.org/TR/DOM-Level-3-Events/
|
|
|
*/
|
|
|
|
|
|
var FocusEventInterface = assign({}, UIEventInterface, {
|
|
|
relatedTarget: 0
|
|
|
});
|
|
|
|
|
|
var SyntheticFocusEvent = createSyntheticEvent(FocusEventInterface);
|
|
|
/**
|
|
|
* @interface Event
|
|
|
* @see http://www.w3.org/TR/css3-animations/#AnimationEvent-interface
|
|
|
* @see https://developer.mozilla.org/en-US/docs/Web/API/AnimationEvent
|
|
|
*/
|
|
|
|
|
|
var AnimationEventInterface = assign({}, EventInterface, {
|
|
|
animationName: 0,
|
|
|
elapsedTime: 0,
|
|
|
pseudoElement: 0
|
|
|
});
|
|
|
|
|
|
var SyntheticAnimationEvent = createSyntheticEvent(AnimationEventInterface);
|
|
|
/**
|
|
|
* @interface Event
|
|
|
* @see http://www.w3.org/TR/clipboard-apis/
|
|
|
*/
|
|
|
|
|
|
var ClipboardEventInterface = assign({}, EventInterface, {
|
|
|
clipboardData: function (event) {
|
|
|
return 'clipboardData' in event ? event.clipboardData : window.clipboardData;
|
|
|
}
|
|
|
});
|
|
|
|
|
|
var SyntheticClipboardEvent = createSyntheticEvent(ClipboardEventInterface);
|
|
|
/**
|
|
|
* @interface Event
|
|
|
* @see http://www.w3.org/TR/DOM-Level-3-Events/#events-compositionevents
|
|
|
*/
|
|
|
|
|
|
var CompositionEventInterface = assign({}, EventInterface, {
|
|
|
data: 0
|
|
|
});
|
|
|
|
|
|
var SyntheticCompositionEvent = createSyntheticEvent(CompositionEventInterface);
|
|
|
/**
|
|
|
* @interface Event
|
|
|
* @see http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105
|
|
|
* /#events-inputevents
|
|
|
*/
|
|
|
// Happens to share the same list for now.
|
|
|
|
|
|
var SyntheticInputEvent = SyntheticCompositionEvent;
|
|
|
/**
|
|
|
* Normalization of deprecated HTML5 `key` values
|
|
|
* @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names
|
|
|
*/
|
|
|
|
|
|
var normalizeKey = {
|
|
|
Esc: 'Escape',
|
|
|
Spacebar: ' ',
|
|
|
Left: 'ArrowLeft',
|
|
|
Up: 'ArrowUp',
|
|
|
Right: 'ArrowRight',
|
|
|
Down: 'ArrowDown',
|
|
|
Del: 'Delete',
|
|
|
Win: 'OS',
|
|
|
Menu: 'ContextMenu',
|
|
|
Apps: 'ContextMenu',
|
|
|
Scroll: 'ScrollLock',
|
|
|
MozPrintableKey: 'Unidentified'
|
|
|
};
|
|
|
/**
|
|
|
* Translation from legacy `keyCode` to HTML5 `key`
|
|
|
* Only special keys supported, all others depend on keyboard layout or browser
|
|
|
* @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names
|
|
|
*/
|
|
|
|
|
|
var translateToKey = {
|
|
|
'8': 'Backspace',
|
|
|
'9': 'Tab',
|
|
|
'12': 'Clear',
|
|
|
'13': 'Enter',
|
|
|
'16': 'Shift',
|
|
|
'17': 'Control',
|
|
|
'18': 'Alt',
|
|
|
'19': 'Pause',
|
|
|
'20': 'CapsLock',
|
|
|
'27': 'Escape',
|
|
|
'32': ' ',
|
|
|
'33': 'PageUp',
|
|
|
'34': 'PageDown',
|
|
|
'35': 'End',
|
|
|
'36': 'Home',
|
|
|
'37': 'ArrowLeft',
|
|
|
'38': 'ArrowUp',
|
|
|
'39': 'ArrowRight',
|
|
|
'40': 'ArrowDown',
|
|
|
'45': 'Insert',
|
|
|
'46': 'Delete',
|
|
|
'112': 'F1',
|
|
|
'113': 'F2',
|
|
|
'114': 'F3',
|
|
|
'115': 'F4',
|
|
|
'116': 'F5',
|
|
|
'117': 'F6',
|
|
|
'118': 'F7',
|
|
|
'119': 'F8',
|
|
|
'120': 'F9',
|
|
|
'121': 'F10',
|
|
|
'122': 'F11',
|
|
|
'123': 'F12',
|
|
|
'144': 'NumLock',
|
|
|
'145': 'ScrollLock',
|
|
|
'224': 'Meta'
|
|
|
};
|
|
|
/**
|
|
|
* @param {object} nativeEvent Native browser event.
|
|
|
* @return {string} Normalized `key` property.
|
|
|
*/
|
|
|
|
|
|
function getEventKey(nativeEvent) {
|
|
|
if (nativeEvent.key) {
|
|
|
// Normalize inconsistent values reported by browsers due to
|
|
|
// implementations of a working draft specification.
|
|
|
// FireFox implements `key` but returns `MozPrintableKey` for all
|
|
|
// printable characters (normalized to `Unidentified`), ignore it.
|
|
|
var key = normalizeKey[nativeEvent.key] || nativeEvent.key;
|
|
|
|
|
|
if (key !== 'Unidentified') {
|
|
|
return key;
|
|
|
}
|
|
|
} // Browser does not implement `key`, polyfill as much of it as we can.
|
|
|
|
|
|
|
|
|
if (nativeEvent.type === 'keypress') {
|
|
|
var charCode = getEventCharCode(nativeEvent); // The enter-key is technically both printable and non-printable and can
|
|
|
// thus be captured by `keypress`, no other non-printable key should.
|
|
|
|
|
|
return charCode === 13 ? 'Enter' : String.fromCharCode(charCode);
|
|
|
}
|
|
|
|
|
|
if (nativeEvent.type === 'keydown' || nativeEvent.type === 'keyup') {
|
|
|
// While user keyboard layout determines the actual meaning of each
|
|
|
// `keyCode` value, almost all function keys have a universal value.
|
|
|
return translateToKey[nativeEvent.keyCode] || 'Unidentified';
|
|
|
}
|
|
|
|
|
|
return '';
|
|
|
}
|
|
|
/**
|
|
|
* Translation from modifier key to the associated property in the event.
|
|
|
* @see http://www.w3.org/TR/DOM-Level-3-Events/#keys-Modifiers
|
|
|
*/
|
|
|
|
|
|
|
|
|
var modifierKeyToProp = {
|
|
|
Alt: 'altKey',
|
|
|
Control: 'ctrlKey',
|
|
|
Meta: 'metaKey',
|
|
|
Shift: 'shiftKey'
|
|
|
}; // Older browsers (Safari <= 10, iOS Safari <= 10.2) do not support
|
|
|
// getModifierState. If getModifierState is not supported, we map it to a set of
|
|
|
// modifier keys exposed by the event. In this case, Lock-keys are not supported.
|
|
|
|
|
|
function modifierStateGetter(keyArg) {
|
|
|
var syntheticEvent = this;
|
|
|
var nativeEvent = syntheticEvent.nativeEvent;
|
|
|
|
|
|
if (nativeEvent.getModifierState) {
|
|
|
return nativeEvent.getModifierState(keyArg);
|
|
|
}
|
|
|
|
|
|
var keyProp = modifierKeyToProp[keyArg];
|
|
|
return keyProp ? !!nativeEvent[keyProp] : false;
|
|
|
}
|
|
|
|
|
|
function getEventModifierState(nativeEvent) {
|
|
|
return modifierStateGetter;
|
|
|
}
|
|
|
/**
|
|
|
* @interface KeyboardEvent
|
|
|
* @see http://www.w3.org/TR/DOM-Level-3-Events/
|
|
|
*/
|
|
|
|
|
|
|
|
|
var KeyboardEventInterface = assign({}, UIEventInterface, {
|
|
|
key: getEventKey,
|
|
|
code: 0,
|
|
|
location: 0,
|
|
|
ctrlKey: 0,
|
|
|
shiftKey: 0,
|
|
|
altKey: 0,
|
|
|
metaKey: 0,
|
|
|
repeat: 0,
|
|
|
locale: 0,
|
|
|
getModifierState: getEventModifierState,
|
|
|
// Legacy Interface
|
|
|
charCode: function (event) {
|
|
|
// `charCode` is the result of a KeyPress event and represents the value of
|
|
|
// the actual printable character.
|
|
|
// KeyPress is deprecated, but its replacement is not yet final and not
|
|
|
// implemented in any major browser. Only KeyPress has charCode.
|
|
|
if (event.type === 'keypress') {
|
|
|
return getEventCharCode(event);
|
|
|
}
|
|
|
|
|
|
return 0;
|
|
|
},
|
|
|
keyCode: function (event) {
|
|
|
// `keyCode` is the result of a KeyDown/Up event and represents the value of
|
|
|
// physical keyboard key.
|
|
|
// The actual meaning of the value depends on the users' keyboard layout
|
|
|
// which cannot be detected. Assuming that it is a US keyboard layout
|
|
|
// provides a surprisingly accurate mapping for US and European users.
|
|
|
// Due to this, it is left to the user to implement at this time.
|
|
|
if (event.type === 'keydown' || event.type === 'keyup') {
|
|
|
return event.keyCode;
|
|
|
}
|
|
|
|
|
|
return 0;
|
|
|
},
|
|
|
which: function (event) {
|
|
|
// `which` is an alias for either `keyCode` or `charCode` depending on the
|
|
|
// type of the event.
|
|
|
if (event.type === 'keypress') {
|
|
|
return getEventCharCode(event);
|
|
|
}
|
|
|
|
|
|
if (event.type === 'keydown' || event.type === 'keyup') {
|
|
|
return event.keyCode;
|
|
|
}
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
});
|
|
|
|
|
|
var SyntheticKeyboardEvent = createSyntheticEvent(KeyboardEventInterface);
|
|
|
/**
|
|
|
* @interface PointerEvent
|
|
|
* @see http://www.w3.org/TR/pointerevents/
|
|
|
*/
|
|
|
|
|
|
var PointerEventInterface = assign({}, MouseEventInterface, {
|
|
|
pointerId: 0,
|
|
|
width: 0,
|
|
|
height: 0,
|
|
|
pressure: 0,
|
|
|
tangentialPressure: 0,
|
|
|
tiltX: 0,
|
|
|
tiltY: 0,
|
|
|
twist: 0,
|
|
|
pointerType: 0,
|
|
|
isPrimary: 0
|
|
|
});
|
|
|
|
|
|
var SyntheticPointerEvent = createSyntheticEvent(PointerEventInterface);
|
|
|
/**
|
|
|
* @interface TouchEvent
|
|
|
* @see http://www.w3.org/TR/touch-events/
|
|
|
*/
|
|
|
|
|
|
var TouchEventInterface = assign({}, UIEventInterface, {
|
|
|
touches: 0,
|
|
|
targetTouches: 0,
|
|
|
changedTouches: 0,
|
|
|
altKey: 0,
|
|
|
metaKey: 0,
|
|
|
ctrlKey: 0,
|
|
|
shiftKey: 0,
|
|
|
getModifierState: getEventModifierState
|
|
|
});
|
|
|
|
|
|
var SyntheticTouchEvent = createSyntheticEvent(TouchEventInterface);
|
|
|
/**
|
|
|
* @interface Event
|
|
|
* @see http://www.w3.org/TR/2009/WD-css3-transitions-20090320/#transition-events-
|
|
|
* @see https://developer.mozilla.org/en-US/docs/Web/API/TransitionEvent
|
|
|
*/
|
|
|
|
|
|
var TransitionEventInterface = assign({}, EventInterface, {
|
|
|
propertyName: 0,
|
|
|
elapsedTime: 0,
|
|
|
pseudoElement: 0
|
|
|
});
|
|
|
|
|
|
var SyntheticTransitionEvent = createSyntheticEvent(TransitionEventInterface);
|
|
|
/**
|
|
|
* @interface WheelEvent
|
|
|
* @see http://www.w3.org/TR/DOM-Level-3-Events/
|
|
|
*/
|
|
|
|
|
|
var WheelEventInterface = assign({}, MouseEventInterface, {
|
|
|
deltaX: function (event) {
|
|
|
return 'deltaX' in event ? event.deltaX : // Fallback to `wheelDeltaX` for Webkit and normalize (right is positive).
|
|
|
'wheelDeltaX' in event ? -event.wheelDeltaX : 0;
|
|
|
},
|
|
|
deltaY: function (event) {
|
|
|
return 'deltaY' in event ? event.deltaY : // Fallback to `wheelDeltaY` for Webkit and normalize (down is positive).
|
|
|
'wheelDeltaY' in event ? -event.wheelDeltaY : // Fallback to `wheelDelta` for IE<9 and normalize (down is positive).
|
|
|
'wheelDelta' in event ? -event.wheelDelta : 0;
|
|
|
},
|
|
|
deltaZ: 0,
|
|
|
// Browsers without "deltaMode" is reporting in raw wheel delta where one
|
|
|
// notch on the scroll is always +/- 120, roughly equivalent to pixels.
|
|
|
// A good approximation of DOM_DELTA_LINE (1) is 5% of viewport size or
|
|
|
// ~40 pixels, for DOM_DELTA_SCREEN (2) it is 87.5% of viewport size.
|
|
|
deltaMode: 0
|
|
|
});
|
|
|
|
|
|
var SyntheticWheelEvent = createSyntheticEvent(WheelEventInterface);
|
|
|
|
|
|
var END_KEYCODES = [9, 13, 27, 32]; // Tab, Return, Esc, Space
|
|
|
|
|
|
var START_KEYCODE = 229;
|
|
|
var canUseCompositionEvent = canUseDOM && 'CompositionEvent' in window;
|
|
|
var documentMode = null;
|
|
|
|
|
|
if (canUseDOM && 'documentMode' in document) {
|
|
|
documentMode = document.documentMode;
|
|
|
} // Webkit offers a very useful `textInput` event that can be used to
|
|
|
// directly represent `beforeInput`. The IE `textinput` event is not as
|
|
|
// useful, so we don't use it.
|
|
|
|
|
|
|
|
|
var canUseTextInputEvent = canUseDOM && 'TextEvent' in window && !documentMode; // In IE9+, we have access to composition events, but the data supplied
|
|
|
// by the native compositionend event may be incorrect. Japanese ideographic
|
|
|
// spaces, for instance (\u3000) are not recorded correctly.
|
|
|
|
|
|
var useFallbackCompositionData = canUseDOM && (!canUseCompositionEvent || documentMode && documentMode > 8 && documentMode <= 11);
|
|
|
var SPACEBAR_CODE = 32;
|
|
|
var SPACEBAR_CHAR = String.fromCharCode(SPACEBAR_CODE);
|
|
|
|
|
|
function registerEvents() {
|
|
|
registerTwoPhaseEvent('onBeforeInput', ['compositionend', 'keypress', 'textInput', 'paste']);
|
|
|
registerTwoPhaseEvent('onCompositionEnd', ['compositionend', 'focusout', 'keydown', 'keypress', 'keyup', 'mousedown']);
|
|
|
registerTwoPhaseEvent('onCompositionStart', ['compositionstart', 'focusout', 'keydown', 'keypress', 'keyup', 'mousedown']);
|
|
|
registerTwoPhaseEvent('onCompositionUpdate', ['compositionupdate', 'focusout', 'keydown', 'keypress', 'keyup', 'mousedown']);
|
|
|
} // Track whether we've ever handled a keypress on the space key.
|
|
|
|
|
|
|
|
|
var hasSpaceKeypress = false;
|
|
|
/**
|
|
|
* Return whether a native keypress event is assumed to be a command.
|
|
|
* This is required because Firefox fires `keypress` events for key commands
|
|
|
* (cut, copy, select-all, etc.) even though no character is inserted.
|
|
|
*/
|
|
|
|
|
|
function isKeypressCommand(nativeEvent) {
|
|
|
return (nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) && // ctrlKey && altKey is equivalent to AltGr, and is not a command.
|
|
|
!(nativeEvent.ctrlKey && nativeEvent.altKey);
|
|
|
}
|
|
|
/**
|
|
|
* Translate native top level events into event types.
|
|
|
*/
|
|
|
|
|
|
|
|
|
function getCompositionEventType(domEventName) {
|
|
|
switch (domEventName) {
|
|
|
case 'compositionstart':
|
|
|
return 'onCompositionStart';
|
|
|
|
|
|
case 'compositionend':
|
|
|
return 'onCompositionEnd';
|
|
|
|
|
|
case 'compositionupdate':
|
|
|
return 'onCompositionUpdate';
|
|
|
}
|
|
|
}
|
|
|
/**
|
|
|
* Does our fallback best-guess model think this event signifies that
|
|
|
* composition has begun?
|
|
|
*/
|
|
|
|
|
|
|
|
|
function isFallbackCompositionStart(domEventName, nativeEvent) {
|
|
|
return domEventName === 'keydown' && nativeEvent.keyCode === START_KEYCODE;
|
|
|
}
|
|
|
/**
|
|
|
* Does our fallback mode think that this event is the end of composition?
|
|
|
*/
|
|
|
|
|
|
|
|
|
function isFallbackCompositionEnd(domEventName, nativeEvent) {
|
|
|
switch (domEventName) {
|
|
|
case 'keyup':
|
|
|
// Command keys insert or clear IME input.
|
|
|
return END_KEYCODES.indexOf(nativeEvent.keyCode) !== -1;
|
|
|
|
|
|
case 'keydown':
|
|
|
// Expect IME keyCode on each keydown. If we get any other
|
|
|
// code we must have exited earlier.
|
|
|
return nativeEvent.keyCode !== START_KEYCODE;
|
|
|
|
|
|
case 'keypress':
|
|
|
case 'mousedown':
|
|
|
case 'focusout':
|
|
|
// Events are not possible without cancelling IME.
|
|
|
return true;
|
|
|
|
|
|
default:
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
/**
|
|
|
* Google Input Tools provides composition data via a CustomEvent,
|
|
|
* with the `data` property populated in the `detail` object. If this
|
|
|
* is available on the event object, use it. If not, this is a plain
|
|
|
* composition event and we have nothing special to extract.
|
|
|
*
|
|
|
* @param {object} nativeEvent
|
|
|
* @return {?string}
|
|
|
*/
|
|
|
|
|
|
|
|
|
function getDataFromCustomEvent(nativeEvent) {
|
|
|
var detail = nativeEvent.detail;
|
|
|
|
|
|
if (typeof detail === 'object' && 'data' in detail) {
|
|
|
return detail.data;
|
|
|
}
|
|
|
|
|
|
return null;
|
|
|
}
|
|
|
/**
|
|
|
* Check if a composition event was triggered by Korean IME.
|
|
|
* Our fallback mode does not work well with IE's Korean IME,
|
|
|
* so just use native composition events when Korean IME is used.
|
|
|
* Although CompositionEvent.locale property is deprecated,
|
|
|
* it is available in IE, where our fallback mode is enabled.
|
|
|
*
|
|
|
* @param {object} nativeEvent
|
|
|
* @return {boolean}
|
|
|
*/
|
|
|
|
|
|
|
|
|
function isUsingKoreanIME(nativeEvent) {
|
|
|
return nativeEvent.locale === 'ko';
|
|
|
} // Track the current IME composition status, if any.
|
|
|
|
|
|
|
|
|
var isComposing = false;
|
|
|
/**
|
|
|
* @return {?object} A SyntheticCompositionEvent.
|
|
|
*/
|
|
|
|
|
|
function extractCompositionEvent(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget) {
|
|
|
var eventType;
|
|
|
var fallbackData;
|
|
|
|
|
|
if (canUseCompositionEvent) {
|
|
|
eventType = getCompositionEventType(domEventName);
|
|
|
} else if (!isComposing) {
|
|
|
if (isFallbackCompositionStart(domEventName, nativeEvent)) {
|
|
|
eventType = 'onCompositionStart';
|
|
|
}
|
|
|
} else if (isFallbackCompositionEnd(domEventName, nativeEvent)) {
|
|
|
eventType = 'onCompositionEnd';
|
|
|
}
|
|
|
|
|
|
if (!eventType) {
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
if (useFallbackCompositionData && !isUsingKoreanIME(nativeEvent)) {
|
|
|
// The current composition is stored statically and must not be
|
|
|
// overwritten while composition continues.
|
|
|
if (!isComposing && eventType === 'onCompositionStart') {
|
|
|
isComposing = initialize(nativeEventTarget);
|
|
|
} else if (eventType === 'onCompositionEnd') {
|
|
|
if (isComposing) {
|
|
|
fallbackData = getData();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var listeners = accumulateTwoPhaseListeners(targetInst, eventType);
|
|
|
|
|
|
if (listeners.length > 0) {
|
|
|
var event = new SyntheticCompositionEvent(eventType, domEventName, null, nativeEvent, nativeEventTarget);
|
|
|
dispatchQueue.push({
|
|
|
event: event,
|
|
|
listeners: listeners
|
|
|
});
|
|
|
|
|
|
if (fallbackData) {
|
|
|
// Inject data generated from fallback path into the synthetic event.
|
|
|
// This matches the property of native CompositionEventInterface.
|
|
|
event.data = fallbackData;
|
|
|
} else {
|
|
|
var customData = getDataFromCustomEvent(nativeEvent);
|
|
|
|
|
|
if (customData !== null) {
|
|
|
event.data = customData;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function getNativeBeforeInputChars(domEventName, nativeEvent) {
|
|
|
switch (domEventName) {
|
|
|
case 'compositionend':
|
|
|
return getDataFromCustomEvent(nativeEvent);
|
|
|
|
|
|
case 'keypress':
|
|
|
/**
|
|
|
* If native `textInput` events are available, our goal is to make
|
|
|
* use of them. However, there is a special case: the spacebar key.
|
|
|
* In Webkit, preventing default on a spacebar `textInput` event
|
|
|
* cancels character insertion, but it *also* causes the browser
|
|
|
* to fall back to its default spacebar behavior of scrolling the
|
|
|
* page.
|
|
|
*
|
|
|
* Tracking at:
|
|
|
* https://code.google.com/p/chromium/issues/detail?id=355103
|
|
|
*
|
|
|
* To avoid this issue, use the keypress event as if no `textInput`
|
|
|
* event is available.
|
|
|
*/
|
|
|
var which = nativeEvent.which;
|
|
|
|
|
|
if (which !== SPACEBAR_CODE) {
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
hasSpaceKeypress = true;
|
|
|
return SPACEBAR_CHAR;
|
|
|
|
|
|
case 'textInput':
|
|
|
// Record the characters to be added to the DOM.
|
|
|
var chars = nativeEvent.data; // If it's a spacebar character, assume that we have already handled
|
|
|
// it at the keypress level and bail immediately. Android Chrome
|
|
|
// doesn't give us keycodes, so we need to ignore it.
|
|
|
|
|
|
if (chars === SPACEBAR_CHAR && hasSpaceKeypress) {
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
return chars;
|
|
|
|
|
|
default:
|
|
|
// For other native event types, do nothing.
|
|
|
return null;
|
|
|
}
|
|
|
}
|
|
|
/**
|
|
|
* For browsers that do not provide the `textInput` event, extract the
|
|
|
* appropriate string to use for SyntheticInputEvent.
|
|
|
*/
|
|
|
|
|
|
|
|
|
function getFallbackBeforeInputChars(domEventName, nativeEvent) {
|
|
|
// If we are currently composing (IME) and using a fallback to do so,
|
|
|
// try to extract the composed characters from the fallback object.
|
|
|
// If composition event is available, we extract a string only at
|
|
|
// compositionevent, otherwise extract it at fallback events.
|
|
|
if (isComposing) {
|
|
|
if (domEventName === 'compositionend' || !canUseCompositionEvent && isFallbackCompositionEnd(domEventName, nativeEvent)) {
|
|
|
var chars = getData();
|
|
|
reset();
|
|
|
isComposing = false;
|
|
|
return chars;
|
|
|
}
|
|
|
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
switch (domEventName) {
|
|
|
case 'paste':
|
|
|
// If a paste event occurs after a keypress, throw out the input
|
|
|
// chars. Paste events should not lead to BeforeInput events.
|
|
|
return null;
|
|
|
|
|
|
case 'keypress':
|
|
|
/**
|
|
|
* As of v27, Firefox may fire keypress events even when no character
|
|
|
* will be inserted. A few possibilities:
|
|
|
*
|
|
|
* - `which` is `0`. Arrow keys, Esc key, etc.
|
|
|
*
|
|
|
* - `which` is the pressed key code, but no char is available.
|
|
|
* Ex: 'AltGr + d` in Polish. There is no modified character for
|
|
|
* this key combination and no character is inserted into the
|
|
|
* document, but FF fires the keypress for char code `100` anyway.
|
|
|
* No `input` event will occur.
|
|
|
*
|
|
|
* - `which` is the pressed key code, but a command combination is
|
|
|
* being used. Ex: `Cmd+C`. No character is inserted, and no
|
|
|
* `input` event will occur.
|
|
|
*/
|
|
|
if (!isKeypressCommand(nativeEvent)) {
|
|
|
// IE fires the `keypress` event when a user types an emoji via
|
|
|
// Touch keyboard of Windows. In such a case, the `char` property
|
|
|
// holds an emoji character like `\uD83D\uDE0A`. Because its length
|
|
|
// is 2, the property `which` does not represent an emoji correctly.
|
|
|
// In such a case, we directly return the `char` property instead of
|
|
|
// using `which`.
|
|
|
if (nativeEvent.char && nativeEvent.char.length > 1) {
|
|
|
return nativeEvent.char;
|
|
|
} else if (nativeEvent.which) {
|
|
|
return String.fromCharCode(nativeEvent.which);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return null;
|
|
|
|
|
|
case 'compositionend':
|
|
|
return useFallbackCompositionData && !isUsingKoreanIME(nativeEvent) ? null : nativeEvent.data;
|
|
|
|
|
|
default:
|
|
|
return null;
|
|
|
}
|
|
|
}
|
|
|
/**
|
|
|
* Extract a SyntheticInputEvent for `beforeInput`, based on either native
|
|
|
* `textInput` or fallback behavior.
|
|
|
*
|
|
|
* @return {?object} A SyntheticInputEvent.
|
|
|
*/
|
|
|
|
|
|
|
|
|
function extractBeforeInputEvent(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget) {
|
|
|
var chars;
|
|
|
|
|
|
if (canUseTextInputEvent) {
|
|
|
chars = getNativeBeforeInputChars(domEventName, nativeEvent);
|
|
|
} else {
|
|
|
chars = getFallbackBeforeInputChars(domEventName, nativeEvent);
|
|
|
} // If no characters are being inserted, no BeforeInput event should
|
|
|
// be fired.
|
|
|
|
|
|
|
|
|
if (!chars) {
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
var listeners = accumulateTwoPhaseListeners(targetInst, 'onBeforeInput');
|
|
|
|
|
|
if (listeners.length > 0) {
|
|
|
var event = new SyntheticInputEvent('onBeforeInput', 'beforeinput', null, nativeEvent, nativeEventTarget);
|
|
|
dispatchQueue.push({
|
|
|
event: event,
|
|
|
listeners: listeners
|
|
|
});
|
|
|
event.data = chars;
|
|
|
}
|
|
|
}
|
|
|
/**
|
|
|
* Create an `onBeforeInput` event to match
|
|
|
* http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105/#events-inputevents.
|
|
|
*
|
|
|
* This event plugin is based on the native `textInput` event
|
|
|
* available in Chrome, Safari, Opera, and IE. This event fires after
|
|
|
* `onKeyPress` and `onCompositionEnd`, but before `onInput`.
|
|
|
*
|
|
|
* `beforeInput` is spec'd but not implemented in any browsers, and
|
|
|
* the `input` event does not provide any useful information about what has
|
|
|
* actually been added, contrary to the spec. Thus, `textInput` is the best
|
|
|
* available event to identify the characters that have actually been inserted
|
|
|
* into the target node.
|
|
|
*
|
|
|
* This plugin is also responsible for emitting `composition` events, thus
|
|
|
* allowing us to share composition fallback code for both `beforeInput` and
|
|
|
* `composition` event types.
|
|
|
*/
|
|
|
|
|
|
|
|
|
function extractEvents(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags, targetContainer) {
|
|
|
extractCompositionEvent(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget);
|
|
|
extractBeforeInputEvent(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary
|
|
|
*/
|
|
|
var supportedInputTypes = {
|
|
|
color: true,
|
|
|
date: true,
|
|
|
datetime: true,
|
|
|
'datetime-local': true,
|
|
|
email: true,
|
|
|
month: true,
|
|
|
number: true,
|
|
|
password: true,
|
|
|
range: true,
|
|
|
search: true,
|
|
|
tel: true,
|
|
|
text: true,
|
|
|
time: true,
|
|
|
url: true,
|
|
|
week: true
|
|
|
};
|
|
|
|
|
|
function isTextInputElement(elem) {
|
|
|
var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();
|
|
|
|
|
|
if (nodeName === 'input') {
|
|
|
return !!supportedInputTypes[elem.type];
|
|
|
}
|
|
|
|
|
|
if (nodeName === 'textarea') {
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Checks if an event is supported in the current execution environment.
|
|
|
*
|
|
|
* NOTE: This will not work correctly for non-generic events such as `change`,
|
|
|
* `reset`, `load`, `error`, and `select`.
|
|
|
*
|
|
|
* Borrows from Modernizr.
|
|
|
*
|
|
|
* @param {string} eventNameSuffix Event name, e.g. "click".
|
|
|
* @return {boolean} True if the event is supported.
|
|
|
* @internal
|
|
|
* @license Modernizr 3.0.0pre (Custom Build) | MIT
|
|
|
*/
|
|
|
|
|
|
function isEventSupported(eventNameSuffix) {
|
|
|
if (!canUseDOM) {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
var eventName = 'on' + eventNameSuffix;
|
|
|
var isSupported = (eventName in document);
|
|
|
|
|
|
if (!isSupported) {
|
|
|
var element = document.createElement('div');
|
|
|
element.setAttribute(eventName, 'return;');
|
|
|
isSupported = typeof element[eventName] === 'function';
|
|
|
}
|
|
|
|
|
|
return isSupported;
|
|
|
}
|
|
|
|
|
|
function registerEvents$1() {
|
|
|
registerTwoPhaseEvent('onChange', ['change', 'click', 'focusin', 'focusout', 'input', 'keydown', 'keyup', 'selectionchange']);
|
|
|
}
|
|
|
|
|
|
function createAndAccumulateChangeEvent(dispatchQueue, inst, nativeEvent, target) {
|
|
|
// Flag this event loop as needing state restore.
|
|
|
enqueueStateRestore(target);
|
|
|
var listeners = accumulateTwoPhaseListeners(inst, 'onChange');
|
|
|
|
|
|
if (listeners.length > 0) {
|
|
|
var event = new SyntheticEvent('onChange', 'change', null, nativeEvent, target);
|
|
|
dispatchQueue.push({
|
|
|
event: event,
|
|
|
listeners: listeners
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
/**
|
|
|
* For IE shims
|
|
|
*/
|
|
|
|
|
|
|
|
|
var activeElement = null;
|
|
|
var activeElementInst = null;
|
|
|
/**
|
|
|
* SECTION: handle `change` event
|
|
|
*/
|
|
|
|
|
|
function shouldUseChangeEvent(elem) {
|
|
|
var nodeName = elem.nodeName && elem.nodeName.toLowerCase();
|
|
|
return nodeName === 'select' || nodeName === 'input' && elem.type === 'file';
|
|
|
}
|
|
|
|
|
|
function manualDispatchChangeEvent(nativeEvent) {
|
|
|
var dispatchQueue = [];
|
|
|
createAndAccumulateChangeEvent(dispatchQueue, activeElementInst, nativeEvent, getEventTarget(nativeEvent)); // If change and propertychange bubbled, we'd just bind to it like all the
|
|
|
// other events and have it go through ReactBrowserEventEmitter. Since it
|
|
|
// doesn't, we manually listen for the events and so we have to enqueue and
|
|
|
// process the abstract event manually.
|
|
|
//
|
|
|
// Batching is necessary here in order to ensure that all event handlers run
|
|
|
// before the next rerender (including event handlers attached to ancestor
|
|
|
// elements instead of directly on the input). Without this, controlled
|
|
|
// components don't work properly in conjunction with event bubbling because
|
|
|
// the component is rerendered and the value reverted before all the event
|
|
|
// handlers can run. See https://github.com/facebook/react/issues/708.
|
|
|
|
|
|
batchedUpdates(runEventInBatch, dispatchQueue);
|
|
|
}
|
|
|
|
|
|
function runEventInBatch(dispatchQueue) {
|
|
|
processDispatchQueue(dispatchQueue, 0);
|
|
|
}
|
|
|
|
|
|
function getInstIfValueChanged(targetInst) {
|
|
|
var targetNode = getNodeFromInstance(targetInst);
|
|
|
|
|
|
if (updateValueIfChanged(targetNode)) {
|
|
|
return targetInst;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function getTargetInstForChangeEvent(domEventName, targetInst) {
|
|
|
if (domEventName === 'change') {
|
|
|
return targetInst;
|
|
|
}
|
|
|
}
|
|
|
/**
|
|
|
* SECTION: handle `input` event
|
|
|
*/
|
|
|
|
|
|
|
|
|
var isInputEventSupported = false;
|
|
|
|
|
|
if (canUseDOM) {
|
|
|
// IE9 claims to support the input event but fails to trigger it when
|
|
|
// deleting text, so we ignore its input events.
|
|
|
isInputEventSupported = isEventSupported('input') && (!document.documentMode || document.documentMode > 9);
|
|
|
}
|
|
|
/**
|
|
|
* (For IE <=9) Starts tracking propertychange events on the passed-in element
|
|
|
* and override the value property so that we can distinguish user events from
|
|
|
* value changes in JS.
|
|
|
*/
|
|
|
|
|
|
|
|
|
function startWatchingForValueChange(target, targetInst) {
|
|
|
activeElement = target;
|
|
|
activeElementInst = targetInst;
|
|
|
activeElement.attachEvent('onpropertychange', handlePropertyChange);
|
|
|
}
|
|
|
/**
|
|
|
* (For IE <=9) Removes the event listeners from the currently-tracked element,
|
|
|
* if any exists.
|
|
|
*/
|
|
|
|
|
|
|
|
|
function stopWatchingForValueChange() {
|
|
|
if (!activeElement) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
activeElement.detachEvent('onpropertychange', handlePropertyChange);
|
|
|
activeElement = null;
|
|
|
activeElementInst = null;
|
|
|
}
|
|
|
/**
|
|
|
* (For IE <=9) Handles a propertychange event, sending a `change` event if
|
|
|
* the value of the active element has changed.
|
|
|
*/
|
|
|
|
|
|
|
|
|
function handlePropertyChange(nativeEvent) {
|
|
|
if (nativeEvent.propertyName !== 'value') {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (getInstIfValueChanged(activeElementInst)) {
|
|
|
manualDispatchChangeEvent(nativeEvent);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function handleEventsForInputEventPolyfill(domEventName, target, targetInst) {
|
|
|
if (domEventName === 'focusin') {
|
|
|
// In IE9, propertychange fires for most input events but is buggy and
|
|
|
// doesn't fire when text is deleted, but conveniently, selectionchange
|
|
|
// appears to fire in all of the remaining cases so we catch those and
|
|
|
// forward the event if the value has changed
|
|
|
// In either case, we don't want to call the event handler if the value
|
|
|
// is changed from JS so we redefine a setter for `.value` that updates
|
|
|
// our activeElementValue variable, allowing us to ignore those changes
|
|
|
//
|
|
|
// stopWatching() should be a noop here but we call it just in case we
|
|
|
// missed a blur event somehow.
|
|
|
stopWatchingForValueChange();
|
|
|
startWatchingForValueChange(target, targetInst);
|
|
|
} else if (domEventName === 'focusout') {
|
|
|
stopWatchingForValueChange();
|
|
|
}
|
|
|
} // For IE8 and IE9.
|
|
|
|
|
|
|
|
|
function getTargetInstForInputEventPolyfill(domEventName, targetInst) {
|
|
|
if (domEventName === 'selectionchange' || domEventName === 'keyup' || domEventName === 'keydown') {
|
|
|
// On the selectionchange event, the target is just document which isn't
|
|
|
// helpful for us so just check activeElement instead.
|
|
|
//
|
|
|
// 99% of the time, keydown and keyup aren't necessary. IE8 fails to fire
|
|
|
// propertychange on the first input event after setting `value` from a
|
|
|
// script and fires only keydown, keypress, keyup. Catching keyup usually
|
|
|
// gets it and catching keydown lets us fire an event for the first
|
|
|
// keystroke if user does a key repeat (it'll be a little delayed: right
|
|
|
// before the second keystroke). Other input methods (e.g., paste) seem to
|
|
|
// fire selectionchange normally.
|
|
|
return getInstIfValueChanged(activeElementInst);
|
|
|
}
|
|
|
}
|
|
|
/**
|
|
|
* SECTION: handle `click` event
|
|
|
*/
|
|
|
|
|
|
|
|
|
function shouldUseClickEvent(elem) {
|
|
|
// Use the `click` event to detect changes to checkbox and radio inputs.
|
|
|
// This approach works across all browsers, whereas `change` does not fire
|
|
|
// until `blur` in IE8.
|
|
|
var nodeName = elem.nodeName;
|
|
|
return nodeName && nodeName.toLowerCase() === 'input' && (elem.type === 'checkbox' || elem.type === 'radio');
|
|
|
}
|
|
|
|
|
|
function getTargetInstForClickEvent(domEventName, targetInst) {
|
|
|
if (domEventName === 'click') {
|
|
|
return getInstIfValueChanged(targetInst);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function getTargetInstForInputOrChangeEvent(domEventName, targetInst) {
|
|
|
if (domEventName === 'input' || domEventName === 'change') {
|
|
|
return getInstIfValueChanged(targetInst);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function handleControlledInputBlur(node) {
|
|
|
var state = node._wrapperState;
|
|
|
|
|
|
if (!state || !state.controlled || node.type !== 'number') {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
{
|
|
|
// If controlled, assign the value attribute to the current value on blur
|
|
|
setDefaultValue(node, 'number', node.value);
|
|
|
}
|
|
|
}
|
|
|
/**
|
|
|
* This plugin creates an `onChange` event that normalizes change events
|
|
|
* across form elements. This event fires at a time when it's possible to
|
|
|
* change the element's value without seeing a flicker.
|
|
|
*
|
|
|
* Supported elements are:
|
|
|
* - input (see `isTextInputElement`)
|
|
|
* - textarea
|
|
|
* - select
|
|
|
*/
|
|
|
|
|
|
|
|
|
function extractEvents$1(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags, targetContainer) {
|
|
|
var targetNode = targetInst ? getNodeFromInstance(targetInst) : window;
|
|
|
var getTargetInstFunc, handleEventFunc;
|
|
|
|
|
|
if (shouldUseChangeEvent(targetNode)) {
|
|
|
getTargetInstFunc = getTargetInstForChangeEvent;
|
|
|
} else if (isTextInputElement(targetNode)) {
|
|
|
if (isInputEventSupported) {
|
|
|
getTargetInstFunc = getTargetInstForInputOrChangeEvent;
|
|
|
} else {
|
|
|
getTargetInstFunc = getTargetInstForInputEventPolyfill;
|
|
|
handleEventFunc = handleEventsForInputEventPolyfill;
|
|
|
}
|
|
|
} else if (shouldUseClickEvent(targetNode)) {
|
|
|
getTargetInstFunc = getTargetInstForClickEvent;
|
|
|
}
|
|
|
|
|
|
if (getTargetInstFunc) {
|
|
|
var inst = getTargetInstFunc(domEventName, targetInst);
|
|
|
|
|
|
if (inst) {
|
|
|
createAndAccumulateChangeEvent(dispatchQueue, inst, nativeEvent, nativeEventTarget);
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (handleEventFunc) {
|
|
|
handleEventFunc(domEventName, targetNode, targetInst);
|
|
|
} // When blurring, set the value attribute for number inputs
|
|
|
|
|
|
|
|
|
if (domEventName === 'focusout') {
|
|
|
handleControlledInputBlur(targetNode);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function registerEvents$2() {
|
|
|
registerDirectEvent('onMouseEnter', ['mouseout', 'mouseover']);
|
|
|
registerDirectEvent('onMouseLeave', ['mouseout', 'mouseover']);
|
|
|
registerDirectEvent('onPointerEnter', ['pointerout', 'pointerover']);
|
|
|
registerDirectEvent('onPointerLeave', ['pointerout', 'pointerover']);
|
|
|
}
|
|
|
/**
|
|
|
* For almost every interaction we care about, there will be both a top-level
|
|
|
* `mouseover` and `mouseout` event that occurs. Only use `mouseout` so that
|
|
|
* we do not extract duplicate events. However, moving the mouse into the
|
|
|
* browser from outside will not fire a `mouseout` event. In this case, we use
|
|
|
* the `mouseover` top-level event.
|
|
|
*/
|
|
|
|
|
|
|
|
|
function extractEvents$2(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags, targetContainer) {
|
|
|
var isOverEvent = domEventName === 'mouseover' || domEventName === 'pointerover';
|
|
|
var isOutEvent = domEventName === 'mouseout' || domEventName === 'pointerout';
|
|
|
|
|
|
if (isOverEvent && !isReplayingEvent(nativeEvent)) {
|
|
|
// If this is an over event with a target, we might have already dispatched
|
|
|
// the event in the out event of the other target. If this is replayed,
|
|
|
// then it's because we couldn't dispatch against this target previously
|
|
|
// so we have to do it now instead.
|
|
|
var related = nativeEvent.relatedTarget || nativeEvent.fromElement;
|
|
|
|
|
|
if (related) {
|
|
|
// If the related node is managed by React, we can assume that we have
|
|
|
// already dispatched the corresponding events during its mouseout.
|
|
|
if (getClosestInstanceFromNode(related) || isContainerMarkedAsRoot(related)) {
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (!isOutEvent && !isOverEvent) {
|
|
|
// Must not be a mouse or pointer in or out - ignoring.
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
var win; // TODO: why is this nullable in the types but we read from it?
|
|
|
|
|
|
if (nativeEventTarget.window === nativeEventTarget) {
|
|
|
// `nativeEventTarget` is probably a window object.
|
|
|
win = nativeEventTarget;
|
|
|
} else {
|
|
|
// TODO: Figure out why `ownerDocument` is sometimes undefined in IE8.
|
|
|
var doc = nativeEventTarget.ownerDocument;
|
|
|
|
|
|
if (doc) {
|
|
|
win = doc.defaultView || doc.parentWindow;
|
|
|
} else {
|
|
|
win = window;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var from;
|
|
|
var to;
|
|
|
|
|
|
if (isOutEvent) {
|
|
|
var _related = nativeEvent.relatedTarget || nativeEvent.toElement;
|
|
|
|
|
|
from = targetInst;
|
|
|
to = _related ? getClosestInstanceFromNode(_related) : null;
|
|
|
|
|
|
if (to !== null) {
|
|
|
var nearestMounted = getNearestMountedFiber(to);
|
|
|
|
|
|
if (to !== nearestMounted || to.tag !== HostComponent && to.tag !== HostText) {
|
|
|
to = null;
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
|
// Moving to a node from outside the window.
|
|
|
from = null;
|
|
|
to = targetInst;
|
|
|
}
|
|
|
|
|
|
if (from === to) {
|
|
|
// Nothing pertains to our managed components.
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
var SyntheticEventCtor = SyntheticMouseEvent;
|
|
|
var leaveEventType = 'onMouseLeave';
|
|
|
var enterEventType = 'onMouseEnter';
|
|
|
var eventTypePrefix = 'mouse';
|
|
|
|
|
|
if (domEventName === 'pointerout' || domEventName === 'pointerover') {
|
|
|
SyntheticEventCtor = SyntheticPointerEvent;
|
|
|
leaveEventType = 'onPointerLeave';
|
|
|
enterEventType = 'onPointerEnter';
|
|
|
eventTypePrefix = 'pointer';
|
|
|
}
|
|
|
|
|
|
var fromNode = from == null ? win : getNodeFromInstance(from);
|
|
|
var toNode = to == null ? win : getNodeFromInstance(to);
|
|
|
var leave = new SyntheticEventCtor(leaveEventType, eventTypePrefix + 'leave', from, nativeEvent, nativeEventTarget);
|
|
|
leave.target = fromNode;
|
|
|
leave.relatedTarget = toNode;
|
|
|
var enter = null; // We should only process this nativeEvent if we are processing
|
|
|
// the first ancestor. Next time, we will ignore the event.
|
|
|
|
|
|
var nativeTargetInst = getClosestInstanceFromNode(nativeEventTarget);
|
|
|
|
|
|
if (nativeTargetInst === targetInst) {
|
|
|
var enterEvent = new SyntheticEventCtor(enterEventType, eventTypePrefix + 'enter', to, nativeEvent, nativeEventTarget);
|
|
|
enterEvent.target = toNode;
|
|
|
enterEvent.relatedTarget = fromNode;
|
|
|
enter = enterEvent;
|
|
|
}
|
|
|
|
|
|
accumulateEnterLeaveTwoPhaseListeners(dispatchQueue, leave, enter, from, to);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* inlined Object.is polyfill to avoid requiring consumers ship their own
|
|
|
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is
|
|
|
*/
|
|
|
function is(x, y) {
|
|
|
return x === y && (x !== 0 || 1 / x === 1 / y) || x !== x && y !== y // eslint-disable-line no-self-compare
|
|
|
;
|
|
|
}
|
|
|
|
|
|
var objectIs = typeof Object.is === 'function' ? Object.is : is;
|
|
|
|
|
|
/**
|
|
|
* Performs equality by iterating through keys on an object and returning false
|
|
|
* when any key has values which are not strictly equal between the arguments.
|
|
|
* Returns true when the values of all keys are strictly equal.
|
|
|
*/
|
|
|
|
|
|
function shallowEqual(objA, objB) {
|
|
|
if (objectIs(objA, objB)) {
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
var keysA = Object.keys(objA);
|
|
|
var keysB = Object.keys(objB);
|
|
|
|
|
|
if (keysA.length !== keysB.length) {
|
|
|
return false;
|
|
|
} // Test for A's keys different from B.
|
|
|
|
|
|
|
|
|
for (var i = 0; i < keysA.length; i++) {
|
|
|
var currentKey = keysA[i];
|
|
|
|
|
|
if (!hasOwnProperty.call(objB, currentKey) || !objectIs(objA[currentKey], objB[currentKey])) {
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Given any node return the first leaf node without children.
|
|
|
*
|
|
|
* @param {DOMElement|DOMTextNode} node
|
|
|
* @return {DOMElement|DOMTextNode}
|
|
|
*/
|
|
|
|
|
|
function getLeafNode(node) {
|
|
|
while (node && node.firstChild) {
|
|
|
node = node.firstChild;
|
|
|
}
|
|
|
|
|
|
return node;
|
|
|
}
|
|
|
/**
|
|
|
* Get the next sibling within a container. This will walk up the
|
|
|
* DOM if a node's siblings have been exhausted.
|
|
|
*
|
|
|
* @param {DOMElement|DOMTextNode} node
|
|
|
* @return {?DOMElement|DOMTextNode}
|
|
|
*/
|
|
|
|
|
|
|
|
|
function getSiblingNode(node) {
|
|
|
while (node) {
|
|
|
if (node.nextSibling) {
|
|
|
return node.nextSibling;
|
|
|
}
|
|
|
|
|
|
node = node.parentNode;
|
|
|
}
|
|
|
}
|
|
|
/**
|
|
|
* Get object describing the nodes which contain characters at offset.
|
|
|
*
|
|
|
* @param {DOMElement|DOMTextNode} root
|
|
|
* @param {number} offset
|
|
|
* @return {?object}
|
|
|
*/
|
|
|
|
|
|
|
|
|
function getNodeForCharacterOffset(root, offset) {
|
|
|
var node = getLeafNode(root);
|
|
|
var nodeStart = 0;
|
|
|
var nodeEnd = 0;
|
|
|
|
|
|
while (node) {
|
|
|
if (node.nodeType === TEXT_NODE) {
|
|
|
nodeEnd = nodeStart + node.textContent.length;
|
|
|
|
|
|
if (nodeStart <= offset && nodeEnd >= offset) {
|
|
|
return {
|
|
|
node: node,
|
|
|
offset: offset - nodeStart
|
|
|
};
|
|
|
}
|
|
|
|
|
|
nodeStart = nodeEnd;
|
|
|
}
|
|
|
|
|
|
node = getLeafNode(getSiblingNode(node));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* @param {DOMElement} outerNode
|
|
|
* @return {?object}
|
|
|
*/
|
|
|
|
|
|
function getOffsets(outerNode) {
|
|
|
var ownerDocument = outerNode.ownerDocument;
|
|
|
var win = ownerDocument && ownerDocument.defaultView || window;
|
|
|
var selection = win.getSelection && win.getSelection();
|
|
|
|
|
|
if (!selection || selection.rangeCount === 0) {
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
var anchorNode = selection.anchorNode,
|
|
|
anchorOffset = selection.anchorOffset,
|
|
|
focusNode = selection.focusNode,
|
|
|
focusOffset = selection.focusOffset; // In Firefox, anchorNode and focusNode can be "anonymous divs", e.g. the
|
|
|
// up/down buttons on an <input type="number">. Anonymous divs do not seem to
|
|
|
// expose properties, triggering a "Permission denied error" if any of its
|
|
|
// properties are accessed. The only seemingly possible way to avoid erroring
|
|
|
// is to access a property that typically works for non-anonymous divs and
|
|
|
// catch any error that may otherwise arise. See
|
|
|
// https://bugzilla.mozilla.org/show_bug.cgi?id=208427
|
|
|
|
|
|
try {
|
|
|
/* eslint-disable no-unused-expressions */
|
|
|
anchorNode.nodeType;
|
|
|
focusNode.nodeType;
|
|
|
/* eslint-enable no-unused-expressions */
|
|
|
} catch (e) {
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
return getModernOffsetsFromPoints(outerNode, anchorNode, anchorOffset, focusNode, focusOffset);
|
|
|
}
|
|
|
/**
|
|
|
* Returns {start, end} where `start` is the character/codepoint index of
|
|
|
* (anchorNode, anchorOffset) within the textContent of `outerNode`, and
|
|
|
* `end` is the index of (focusNode, focusOffset).
|
|
|
*
|
|
|
* Returns null if you pass in garbage input but we should probably just crash.
|
|
|
*
|
|
|
* Exported only for testing.
|
|
|
*/
|
|
|
|
|
|
function getModernOffsetsFromPoints(outerNode, anchorNode, anchorOffset, focusNode, focusOffset) {
|
|
|
var length = 0;
|
|
|
var start = -1;
|
|
|
var end = -1;
|
|
|
var indexWithinAnchor = 0;
|
|
|
var indexWithinFocus = 0;
|
|
|
var node = outerNode;
|
|
|
var parentNode = null;
|
|
|
|
|
|
outer: while (true) {
|
|
|
var next = null;
|
|
|
|
|
|
while (true) {
|
|
|
if (node === anchorNode && (anchorOffset === 0 || node.nodeType === TEXT_NODE)) {
|
|
|
start = length + anchorOffset;
|
|
|
}
|
|
|
|
|
|
if (node === focusNode && (focusOffset === 0 || node.nodeType === TEXT_NODE)) {
|
|
|
end = length + focusOffset;
|
|
|
}
|
|
|
|
|
|
if (node.nodeType === TEXT_NODE) {
|
|
|
length += node.nodeValue.length;
|
|
|
}
|
|
|
|
|
|
if ((next = node.firstChild) === null) {
|
|
|
break;
|
|
|
} // Moving from `node` to its first child `next`.
|
|
|
|
|
|
|
|
|
parentNode = node;
|
|
|
node = next;
|
|
|
}
|
|
|
|
|
|
while (true) {
|
|
|
if (node === outerNode) {
|
|
|
// If `outerNode` has children, this is always the second time visiting
|
|
|
// it. If it has no children, this is still the first loop, and the only
|
|
|
// valid selection is anchorNode and focusNode both equal to this node
|
|
|
// and both offsets 0, in which case we will have handled above.
|
|
|
break outer;
|
|
|
}
|
|
|
|
|
|
if (parentNode === anchorNode && ++indexWithinAnchor === anchorOffset) {
|
|
|
start = length;
|
|
|
}
|
|
|
|
|
|
if (parentNode === focusNode && ++indexWithinFocus === focusOffset) {
|
|
|
end = length;
|
|
|
}
|
|
|
|
|
|
if ((next = node.nextSibling) !== null) {
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
node = parentNode;
|
|
|
parentNode = node.parentNode;
|
|
|
} // Moving from `node` to its next sibling `next`.
|
|
|
|
|
|
|
|
|
node = next;
|
|
|
}
|
|
|
|
|
|
if (start === -1 || end === -1) {
|
|
|
// This should never happen. (Would happen if the anchor/focus nodes aren't
|
|
|
// actually inside the passed-in node.)
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
return {
|
|
|
start: start,
|
|
|
end: end
|
|
|
};
|
|
|
}
|
|
|
/**
|
|
|
* In modern non-IE browsers, we can support both forward and backward
|
|
|
* selections.
|
|
|
*
|
|
|
* Note: IE10+ supports the Selection object, but it does not support
|
|
|
* the `extend` method, which means that even in modern IE, it's not possible
|
|
|
* to programmatically create a backward selection. Thus, for all IE
|
|
|
* versions, we use the old IE API to create our selections.
|
|
|
*
|
|
|
* @param {DOMElement|DOMTextNode} node
|
|
|
* @param {object} offsets
|
|
|
*/
|
|
|
|
|
|
function setOffsets(node, offsets) {
|
|
|
var doc = node.ownerDocument || document;
|
|
|
var win = doc && doc.defaultView || window; // Edge fails with "Object expected" in some scenarios.
|
|
|
// (For instance: TinyMCE editor used in a list component that supports pasting to add more,
|
|
|
// fails when pasting 100+ items)
|
|
|
|
|
|
if (!win.getSelection) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
var selection = win.getSelection();
|
|
|
var length = node.textContent.length;
|
|
|
var start = Math.min(offsets.start, length);
|
|
|
var end = offsets.end === undefined ? start : Math.min(offsets.end, length); // IE 11 uses modern selection, but doesn't support the extend method.
|
|
|
// Flip backward selections, so we can set with a single range.
|
|
|
|
|
|
if (!selection.extend && start > end) {
|
|
|
var temp = end;
|
|
|
end = start;
|
|
|
start = temp;
|
|
|
}
|
|
|
|
|
|
var startMarker = getNodeForCharacterOffset(node, start);
|
|
|
var endMarker = getNodeForCharacterOffset(node, end);
|
|
|
|
|
|
if (startMarker && endMarker) {
|
|
|
if (selection.rangeCount === 1 && selection.anchorNode === startMarker.node && selection.anchorOffset === startMarker.offset && selection.focusNode === endMarker.node && selection.focusOffset === endMarker.offset) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
var range = doc.createRange();
|
|
|
range.setStart(startMarker.node, startMarker.offset);
|
|
|
selection.removeAllRanges();
|
|
|
|
|
|
if (start > end) {
|
|
|
selection.addRange(range);
|
|
|
selection.extend(endMarker.node, endMarker.offset);
|
|
|
} else {
|
|
|
range.setEnd(endMarker.node, endMarker.offset);
|
|
|
selection.addRange(range);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function isTextNode(node) {
|
|
|
return node && node.nodeType === TEXT_NODE;
|
|
|
}
|
|
|
|
|
|
function containsNode(outerNode, innerNode) {
|
|
|
if (!outerNode || !innerNode) {
|
|
|
return false;
|
|
|
} else if (outerNode === innerNode) {
|
|
|
return true;
|
|
|
} else if (isTextNode(outerNode)) {
|
|
|
return false;
|
|
|
} else if (isTextNode(innerNode)) {
|
|
|
return containsNode(outerNode, innerNode.parentNode);
|
|
|
} else if ('contains' in outerNode) {
|
|
|
return outerNode.contains(innerNode);
|
|
|
} else if (outerNode.compareDocumentPosition) {
|
|
|
return !!(outerNode.compareDocumentPosition(innerNode) & 16);
|
|
|
} else {
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function isInDocument(node) {
|
|
|
return node && node.ownerDocument && containsNode(node.ownerDocument.documentElement, node);
|
|
|
}
|
|
|
|
|
|
function isSameOriginFrame(iframe) {
|
|
|
try {
|
|
|
// Accessing the contentDocument of a HTMLIframeElement can cause the browser
|
|
|
// to throw, e.g. if it has a cross-origin src attribute.
|
|
|
// Safari will show an error in the console when the access results in "Blocked a frame with origin". e.g:
|
|
|
// iframe.contentDocument.defaultView;
|
|
|
// A safety way is to access one of the cross origin properties: Window or Location
|
|
|
// Which might result in "SecurityError" DOM Exception and it is compatible to Safari.
|
|
|
// https://html.spec.whatwg.org/multipage/browsers.html#integration-with-idl
|
|
|
return typeof iframe.contentWindow.location.href === 'string';
|
|
|
} catch (err) {
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function getActiveElementDeep() {
|
|
|
var win = window;
|
|
|
var element = getActiveElement();
|
|
|
|
|
|
while (element instanceof win.HTMLIFrameElement) {
|
|
|
if (isSameOriginFrame(element)) {
|
|
|
win = element.contentWindow;
|
|
|
} else {
|
|
|
return element;
|
|
|
}
|
|
|
|
|
|
element = getActiveElement(win.document);
|
|
|
}
|
|
|
|
|
|
return element;
|
|
|
}
|
|
|
/**
|
|
|
* @ReactInputSelection: React input selection module. Based on Selection.js,
|
|
|
* but modified to be suitable for react and has a couple of bug fixes (doesn't
|
|
|
* assume buttons have range selections allowed).
|
|
|
* Input selection module for React.
|
|
|
*/
|
|
|
|
|
|
/**
|
|
|
* @hasSelectionCapabilities: we get the element types that support selection
|
|
|
* from https://html.spec.whatwg.org/#do-not-apply, looking at `selectionStart`
|
|
|
* and `selectionEnd` rows.
|
|
|
*/
|
|
|
|
|
|
|
|
|
function hasSelectionCapabilities(elem) {
|
|
|
var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();
|
|
|
return nodeName && (nodeName === 'input' && (elem.type === 'text' || elem.type === 'search' || elem.type === 'tel' || elem.type === 'url' || elem.type === 'password') || nodeName === 'textarea' || elem.contentEditable === 'true');
|
|
|
}
|
|
|
function getSelectionInformation() {
|
|
|
var focusedElem = getActiveElementDeep();
|
|
|
return {
|
|
|
focusedElem: focusedElem,
|
|
|
selectionRange: hasSelectionCapabilities(focusedElem) ? getSelection(focusedElem) : null
|
|
|
};
|
|
|
}
|
|
|
/**
|
|
|
* @restoreSelection: If any selection information was potentially lost,
|
|
|
* restore it. This is useful when performing operations that could remove dom
|
|
|
* nodes and place them back in, resulting in focus being lost.
|
|
|
*/
|
|
|
|
|
|
function restoreSelection(priorSelectionInformation) {
|
|
|
var curFocusedElem = getActiveElementDeep();
|
|
|
var priorFocusedElem = priorSelectionInformation.focusedElem;
|
|
|
var priorSelectionRange = priorSelectionInformation.selectionRange;
|
|
|
|
|
|
if (curFocusedElem !== priorFocusedElem && isInDocument(priorFocusedElem)) {
|
|
|
if (priorSelectionRange !== null && hasSelectionCapabilities(priorFocusedElem)) {
|
|
|
setSelection(priorFocusedElem, priorSelectionRange);
|
|
|
} // Focusing a node can change the scroll position, which is undesirable
|
|
|
|
|
|
|
|
|
var ancestors = [];
|
|
|
var ancestor = priorFocusedElem;
|
|
|
|
|
|
while (ancestor = ancestor.parentNode) {
|
|
|
if (ancestor.nodeType === ELEMENT_NODE) {
|
|
|
ancestors.push({
|
|
|
element: ancestor,
|
|
|
left: ancestor.scrollLeft,
|
|
|
top: ancestor.scrollTop
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (typeof priorFocusedElem.focus === 'function') {
|
|
|
priorFocusedElem.focus();
|
|
|
}
|
|
|
|
|
|
for (var i = 0; i < ancestors.length; i++) {
|
|
|
var info = ancestors[i];
|
|
|
info.element.scrollLeft = info.left;
|
|
|
info.element.scrollTop = info.top;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
/**
|
|
|
* @getSelection: Gets the selection bounds of a focused textarea, input or
|
|
|
* contentEditable node.
|
|
|
* -@input: Look up selection bounds of this input
|
|
|
* -@return {start: selectionStart, end: selectionEnd}
|
|
|
*/
|
|
|
|
|
|
function getSelection(input) {
|
|
|
var selection;
|
|
|
|
|
|
if ('selectionStart' in input) {
|
|
|
// Modern browser with input or textarea.
|
|
|
selection = {
|
|
|
start: input.selectionStart,
|
|
|
end: input.selectionEnd
|
|
|
};
|
|
|
} else {
|
|
|
// Content editable or old IE textarea.
|
|
|
selection = getOffsets(input);
|
|
|
}
|
|
|
|
|
|
return selection || {
|
|
|
start: 0,
|
|
|
end: 0
|
|
|
};
|
|
|
}
|
|
|
/**
|
|
|
* @setSelection: Sets the selection bounds of a textarea or input and focuses
|
|
|
* the input.
|
|
|
* -@input Set selection bounds of this input or textarea
|
|
|
* -@offsets Object of same form that is returned from get*
|
|
|
*/
|
|
|
|
|
|
function setSelection(input, offsets) {
|
|
|
var start = offsets.start;
|
|
|
var end = offsets.end;
|
|
|
|
|
|
if (end === undefined) {
|
|
|
end = start;
|
|
|
}
|
|
|
|
|
|
if ('selectionStart' in input) {
|
|
|
input.selectionStart = start;
|
|
|
input.selectionEnd = Math.min(end, input.value.length);
|
|
|
} else {
|
|
|
setOffsets(input, offsets);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var skipSelectionChangeEvent = canUseDOM && 'documentMode' in document && document.documentMode <= 11;
|
|
|
|
|
|
function registerEvents$3() {
|
|
|
registerTwoPhaseEvent('onSelect', ['focusout', 'contextmenu', 'dragend', 'focusin', 'keydown', 'keyup', 'mousedown', 'mouseup', 'selectionchange']);
|
|
|
}
|
|
|
|
|
|
var activeElement$1 = null;
|
|
|
var activeElementInst$1 = null;
|
|
|
var lastSelection = null;
|
|
|
var mouseDown = false;
|
|
|
/**
|
|
|
* Get an object which is a unique representation of the current selection.
|
|
|
*
|
|
|
* The return value will not be consistent across nodes or browsers, but
|
|
|
* two identical selections on the same node will return identical objects.
|
|
|
*/
|
|
|
|
|
|
function getSelection$1(node) {
|
|
|
if ('selectionStart' in node && hasSelectionCapabilities(node)) {
|
|
|
return {
|
|
|
start: node.selectionStart,
|
|
|
end: node.selectionEnd
|
|
|
};
|
|
|
} else {
|
|
|
var win = node.ownerDocument && node.ownerDocument.defaultView || window;
|
|
|
var selection = win.getSelection();
|
|
|
return {
|
|
|
anchorNode: selection.anchorNode,
|
|
|
anchorOffset: selection.anchorOffset,
|
|
|
focusNode: selection.focusNode,
|
|
|
focusOffset: selection.focusOffset
|
|
|
};
|
|
|
}
|
|
|
}
|
|
|
/**
|
|
|
* Get document associated with the event target.
|
|
|
*/
|
|
|
|
|
|
|
|
|
function getEventTargetDocument(eventTarget) {
|
|
|
return eventTarget.window === eventTarget ? eventTarget.document : eventTarget.nodeType === DOCUMENT_NODE ? eventTarget : eventTarget.ownerDocument;
|
|
|
}
|
|
|
/**
|
|
|
* Poll selection to see whether it's changed.
|
|
|
*
|
|
|
* @param {object} nativeEvent
|
|
|
* @param {object} nativeEventTarget
|
|
|
* @return {?SyntheticEvent}
|
|
|
*/
|
|
|
|
|
|
|
|
|
function constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget) {
|
|
|
// Ensure we have the right element, and that the user is not dragging a
|
|
|
// selection (this matches native `select` event behavior). In HTML5, select
|
|
|
// fires only on input and textarea thus if there's no focused element we
|
|
|
// won't dispatch.
|
|
|
var doc = getEventTargetDocument(nativeEventTarget);
|
|
|
|
|
|
if (mouseDown || activeElement$1 == null || activeElement$1 !== getActiveElement(doc)) {
|
|
|
return;
|
|
|
} // Only fire when selection has actually changed.
|
|
|
|
|
|
|
|
|
var currentSelection = getSelection$1(activeElement$1);
|
|
|
|
|
|
if (!lastSelection || !shallowEqual(lastSelection, currentSelection)) {
|
|
|
lastSelection = currentSelection;
|
|
|
var listeners = accumulateTwoPhaseListeners(activeElementInst$1, 'onSelect');
|
|
|
|
|
|
if (listeners.length > 0) {
|
|
|
var event = new SyntheticEvent('onSelect', 'select', null, nativeEvent, nativeEventTarget);
|
|
|
dispatchQueue.push({
|
|
|
event: event,
|
|
|
listeners: listeners
|
|
|
});
|
|
|
event.target = activeElement$1;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
/**
|
|
|
* This plugin creates an `onSelect` event that normalizes select events
|
|
|
* across form elements.
|
|
|
*
|
|
|
* Supported elements are:
|
|
|
* - input (see `isTextInputElement`)
|
|
|
* - textarea
|
|
|
* - contentEditable
|
|
|
*
|
|
|
* This differs from native browser implementations in the following ways:
|
|
|
* - Fires on contentEditable fields as well as inputs.
|
|
|
* - Fires for collapsed selection.
|
|
|
* - Fires after user input.
|
|
|
*/
|
|
|
|
|
|
|
|
|
function extractEvents$3(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags, targetContainer) {
|
|
|
var targetNode = targetInst ? getNodeFromInstance(targetInst) : window;
|
|
|
|
|
|
switch (domEventName) {
|
|
|
// Track the input node that has focus.
|
|
|
case 'focusin':
|
|
|
if (isTextInputElement(targetNode) || targetNode.contentEditable === 'true') {
|
|
|
activeElement$1 = targetNode;
|
|
|
activeElementInst$1 = targetInst;
|
|
|
lastSelection = null;
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case 'focusout':
|
|
|
activeElement$1 = null;
|
|
|
activeElementInst$1 = null;
|
|
|
lastSelection = null;
|
|
|
break;
|
|
|
// Don't fire the event while the user is dragging. This matches the
|
|
|
// semantics of the native select event.
|
|
|
|
|
|
case 'mousedown':
|
|
|
mouseDown = true;
|
|
|
break;
|
|
|
|
|
|
case 'contextmenu':
|
|
|
case 'mouseup':
|
|
|
case 'dragend':
|
|
|
mouseDown = false;
|
|
|
constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget);
|
|
|
break;
|
|
|
// Chrome and IE fire non-standard event when selection is changed (and
|
|
|
// sometimes when it hasn't). IE's event fires out of order with respect
|
|
|
// to key and input events on deletion, so we discard it.
|
|
|
//
|
|
|
// Firefox doesn't support selectionchange, so check selection status
|
|
|
// after each key entry. The selection changes after keydown and before
|
|
|
// keyup, but we check on keydown as well in the case of holding down a
|
|
|
// key, when multiple keydown events are fired but only one keyup is.
|
|
|
// This is also our approach for IE handling, for the reason above.
|
|
|
|
|
|
case 'selectionchange':
|
|
|
if (skipSelectionChangeEvent) {
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
// falls through
|
|
|
|
|
|
case 'keydown':
|
|
|
case 'keyup':
|
|
|
constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Generate a mapping of standard vendor prefixes using the defined style property and event name.
|
|
|
*
|
|
|
* @param {string} styleProp
|
|
|
* @param {string} eventName
|
|
|
* @returns {object}
|
|
|
*/
|
|
|
|
|
|
function makePrefixMap(styleProp, eventName) {
|
|
|
var prefixes = {};
|
|
|
prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();
|
|
|
prefixes['Webkit' + styleProp] = 'webkit' + eventName;
|
|
|
prefixes['Moz' + styleProp] = 'moz' + eventName;
|
|
|
return prefixes;
|
|
|
}
|
|
|
/**
|
|
|
* A list of event names to a configurable list of vendor prefixes.
|
|
|
*/
|
|
|
|
|
|
|
|
|
var vendorPrefixes = {
|
|
|
animationend: makePrefixMap('Animation', 'AnimationEnd'),
|
|
|
animationiteration: makePrefixMap('Animation', 'AnimationIteration'),
|
|
|
animationstart: makePrefixMap('Animation', 'AnimationStart'),
|
|
|
transitionend: makePrefixMap('Transition', 'TransitionEnd')
|
|
|
};
|
|
|
/**
|
|
|
* Event names that have already been detected and prefixed (if applicable).
|
|
|
*/
|
|
|
|
|
|
var prefixedEventNames = {};
|
|
|
/**
|
|
|
* Element to check for prefixes on.
|
|
|
*/
|
|
|
|
|
|
var style = {};
|
|
|
/**
|
|
|
* Bootstrap if a DOM exists.
|
|
|
*/
|
|
|
|
|
|
if (canUseDOM) {
|
|
|
style = document.createElement('div').style; // On some platforms, in particular some releases of Android 4.x,
|
|
|
// the un-prefixed "animation" and "transition" properties are defined on the
|
|
|
// style object but the events that fire will still be prefixed, so we need
|
|
|
// to check if the un-prefixed events are usable, and if not remove them from the map.
|
|
|
|
|
|
if (!('AnimationEvent' in window)) {
|
|
|
delete vendorPrefixes.animationend.animation;
|
|
|
delete vendorPrefixes.animationiteration.animation;
|
|
|
delete vendorPrefixes.animationstart.animation;
|
|
|
} // Same as above
|
|
|
|
|
|
|
|
|
if (!('TransitionEvent' in window)) {
|
|
|
delete vendorPrefixes.transitionend.transition;
|
|
|
}
|
|
|
}
|
|
|
/**
|
|
|
* Attempts to determine the correct vendor prefixed event name.
|
|
|
*
|
|
|
* @param {string} eventName
|
|
|
* @returns {string}
|
|
|
*/
|
|
|
|
|
|
|
|
|
function getVendorPrefixedEventName(eventName) {
|
|
|
if (prefixedEventNames[eventName]) {
|
|
|
return prefixedEventNames[eventName];
|
|
|
} else if (!vendorPrefixes[eventName]) {
|
|
|
return eventName;
|
|
|
}
|
|
|
|
|
|
var prefixMap = vendorPrefixes[eventName];
|
|
|
|
|
|
for (var styleProp in prefixMap) {
|
|
|
if (prefixMap.hasOwnProperty(styleProp) && styleProp in style) {
|
|
|
return prefixedEventNames[eventName] = prefixMap[styleProp];
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return eventName;
|
|
|
}
|
|
|
|
|
|
var ANIMATION_END = getVendorPrefixedEventName('animationend');
|
|
|
var ANIMATION_ITERATION = getVendorPrefixedEventName('animationiteration');
|
|
|
var ANIMATION_START = getVendorPrefixedEventName('animationstart');
|
|
|
var TRANSITION_END = getVendorPrefixedEventName('transitionend');
|
|
|
|
|
|
var topLevelEventsToReactNames = new Map(); // NOTE: Capitalization is important in this list!
|
|
|
//
|
|
|
// E.g. it needs "pointerDown", not "pointerdown".
|
|
|
// This is because we derive both React name ("onPointerDown")
|
|
|
// and DOM name ("pointerdown") from the same list.
|
|
|
//
|
|
|
// Exceptions that don't match this convention are listed separately.
|
|
|
//
|
|
|
// prettier-ignore
|
|
|
|
|
|
var simpleEventPluginEvents = ['abort', 'auxClick', 'cancel', 'canPlay', 'canPlayThrough', 'click', 'close', 'contextMenu', 'copy', 'cut', 'drag', 'dragEnd', 'dragEnter', 'dragExit', 'dragLeave', 'dragOver', 'dragStart', 'drop', 'durationChange', 'emptied', 'encrypted', 'ended', 'error', 'gotPointerCapture', 'input', 'invalid', 'keyDown', 'keyPress', 'keyUp', 'load', 'loadedData', 'loadedMetadata', 'loadStart', 'lostPointerCapture', 'mouseDown', 'mouseMove', 'mouseOut', 'mouseOver', 'mouseUp', 'paste', 'pause', 'play', 'playing', 'pointerCancel', 'pointerDown', 'pointerMove', 'pointerOut', 'pointerOver', 'pointerUp', 'progress', 'rateChange', 'reset', 'resize', 'seeked', 'seeking', 'stalled', 'submit', 'suspend', 'timeUpdate', 'touchCancel', 'touchEnd', 'touchStart', 'volumeChange', 'scroll', 'toggle', 'touchMove', 'waiting', 'wheel'];
|
|
|
|
|
|
function registerSimpleEvent(domEventName, reactName) {
|
|
|
topLevelEventsToReactNames.set(domEventName, reactName);
|
|
|
registerTwoPhaseEvent(reactName, [domEventName]);
|
|
|
}
|
|
|
|
|
|
function registerSimpleEvents() {
|
|
|
for (var i = 0; i < simpleEventPluginEvents.length; i++) {
|
|
|
var eventName = simpleEventPluginEvents[i];
|
|
|
var domEventName = eventName.toLowerCase();
|
|
|
var capitalizedEvent = eventName[0].toUpperCase() + eventName.slice(1);
|
|
|
registerSimpleEvent(domEventName, 'on' + capitalizedEvent);
|
|
|
} // Special cases where event names don't match.
|
|
|
|
|
|
|
|
|
registerSimpleEvent(ANIMATION_END, 'onAnimationEnd');
|
|
|
registerSimpleEvent(ANIMATION_ITERATION, 'onAnimationIteration');
|
|
|
registerSimpleEvent(ANIMATION_START, 'onAnimationStart');
|
|
|
registerSimpleEvent('dblclick', 'onDoubleClick');
|
|
|
registerSimpleEvent('focusin', 'onFocus');
|
|
|
registerSimpleEvent('focusout', 'onBlur');
|
|
|
registerSimpleEvent(TRANSITION_END, 'onTransitionEnd');
|
|
|
}
|
|
|
|
|
|
function extractEvents$4(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags, targetContainer) {
|
|
|
var reactName = topLevelEventsToReactNames.get(domEventName);
|
|
|
|
|
|
if (reactName === undefined) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
var SyntheticEventCtor = SyntheticEvent;
|
|
|
var reactEventType = domEventName;
|
|
|
|
|
|
switch (domEventName) {
|
|
|
case 'keypress':
|
|
|
// Firefox creates a keypress event for function keys too. This removes
|
|
|
// the unwanted keypress events. Enter is however both printable and
|
|
|
// non-printable. One would expect Tab to be as well (but it isn't).
|
|
|
if (getEventCharCode(nativeEvent) === 0) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
/* falls through */
|
|
|
|
|
|
case 'keydown':
|
|
|
case 'keyup':
|
|
|
SyntheticEventCtor = SyntheticKeyboardEvent;
|
|
|
break;
|
|
|
|
|
|
case 'focusin':
|
|
|
reactEventType = 'focus';
|
|
|
SyntheticEventCtor = SyntheticFocusEvent;
|
|
|
break;
|
|
|
|
|
|
case 'focusout':
|
|
|
reactEventType = 'blur';
|
|
|
SyntheticEventCtor = SyntheticFocusEvent;
|
|
|
break;
|
|
|
|
|
|
case 'beforeblur':
|
|
|
case 'afterblur':
|
|
|
SyntheticEventCtor = SyntheticFocusEvent;
|
|
|
break;
|
|
|
|
|
|
case 'click':
|
|
|
// Firefox creates a click event on right mouse clicks. This removes the
|
|
|
// unwanted click events.
|
|
|
if (nativeEvent.button === 2) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
/* falls through */
|
|
|
|
|
|
case 'auxclick':
|
|
|
case 'dblclick':
|
|
|
case 'mousedown':
|
|
|
case 'mousemove':
|
|
|
case 'mouseup': // TODO: Disabled elements should not respond to mouse events
|
|
|
|
|
|
/* falls through */
|
|
|
|
|
|
case 'mouseout':
|
|
|
case 'mouseover':
|
|
|
case 'contextmenu':
|
|
|
SyntheticEventCtor = SyntheticMouseEvent;
|
|
|
break;
|
|
|
|
|
|
case 'drag':
|
|
|
case 'dragend':
|
|
|
case 'dragenter':
|
|
|
case 'dragexit':
|
|
|
case 'dragleave':
|
|
|
case 'dragover':
|
|
|
case 'dragstart':
|
|
|
case 'drop':
|
|
|
SyntheticEventCtor = SyntheticDragEvent;
|
|
|
break;
|
|
|
|
|
|
case 'touchcancel':
|
|
|
case 'touchend':
|
|
|
case 'touchmove':
|
|
|
case 'touchstart':
|
|
|
SyntheticEventCtor = SyntheticTouchEvent;
|
|
|
break;
|
|
|
|
|
|
case ANIMATION_END:
|
|
|
case ANIMATION_ITERATION:
|
|
|
case ANIMATION_START:
|
|
|
SyntheticEventCtor = SyntheticAnimationEvent;
|
|
|
break;
|
|
|
|
|
|
case TRANSITION_END:
|
|
|
SyntheticEventCtor = SyntheticTransitionEvent;
|
|
|
break;
|
|
|
|
|
|
case 'scroll':
|
|
|
SyntheticEventCtor = SyntheticUIEvent;
|
|
|
break;
|
|
|
|
|
|
case 'wheel':
|
|
|
SyntheticEventCtor = SyntheticWheelEvent;
|
|
|
break;
|
|
|
|
|
|
case 'copy':
|
|
|
case 'cut':
|
|
|
case 'paste':
|
|
|
SyntheticEventCtor = SyntheticClipboardEvent;
|
|
|
break;
|
|
|
|
|
|
case 'gotpointercapture':
|
|
|
case 'lostpointercapture':
|
|
|
case 'pointercancel':
|
|
|
case 'pointerdown':
|
|
|
case 'pointermove':
|
|
|
case 'pointerout':
|
|
|
case 'pointerover':
|
|
|
case 'pointerup':
|
|
|
SyntheticEventCtor = SyntheticPointerEvent;
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
var inCapturePhase = (eventSystemFlags & IS_CAPTURE_PHASE) !== 0;
|
|
|
|
|
|
{
|
|
|
// Some events don't bubble in the browser.
|
|
|
// In the past, React has always bubbled them, but this can be surprising.
|
|
|
// We're going to try aligning closer to the browser behavior by not bubbling
|
|
|
// them in React either. We'll start by not bubbling onScroll, and then expand.
|
|
|
var accumulateTargetOnly = !inCapturePhase && // TODO: ideally, we'd eventually add all events from
|
|
|
// nonDelegatedEvents list in DOMPluginEventSystem.
|
|
|
// Then we can remove this special list.
|
|
|
// This is a breaking change that can wait until React 18.
|
|
|
domEventName === 'scroll';
|
|
|
|
|
|
var _listeners = accumulateSinglePhaseListeners(targetInst, reactName, nativeEvent.type, inCapturePhase, accumulateTargetOnly);
|
|
|
|
|
|
if (_listeners.length > 0) {
|
|
|
// Intentionally create event lazily.
|
|
|
var _event = new SyntheticEventCtor(reactName, reactEventType, null, nativeEvent, nativeEventTarget);
|
|
|
|
|
|
dispatchQueue.push({
|
|
|
event: _event,
|
|
|
listeners: _listeners
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// TODO: remove top-level side effect.
|
|
|
registerSimpleEvents();
|
|
|
registerEvents$2();
|
|
|
registerEvents$1();
|
|
|
registerEvents$3();
|
|
|
registerEvents();
|
|
|
|
|
|
function extractEvents$5(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags, targetContainer) {
|
|
|
// TODO: we should remove the concept of a "SimpleEventPlugin".
|
|
|
// This is the basic functionality of the event system. All
|
|
|
// the other plugins are essentially polyfills. So the plugin
|
|
|
// should probably be inlined somewhere and have its logic
|
|
|
// be core the to event system. This would potentially allow
|
|
|
// us to ship builds of React without the polyfilled plugins below.
|
|
|
extractEvents$4(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags);
|
|
|
var shouldProcessPolyfillPlugins = (eventSystemFlags & SHOULD_NOT_PROCESS_POLYFILL_EVENT_PLUGINS) === 0; // We don't process these events unless we are in the
|
|
|
// event's native "bubble" phase, which means that we're
|
|
|
// not in the capture phase. That's because we emulate
|
|
|
// the capture phase here still. This is a trade-off,
|
|
|
// because in an ideal world we would not emulate and use
|
|
|
// the phases properly, like we do with the SimpleEvent
|
|
|
// plugin. However, the plugins below either expect
|
|
|
// emulation (EnterLeave) or use state localized to that
|
|
|
// plugin (BeforeInput, Change, Select). The state in
|
|
|
// these modules complicates things, as you'll essentially
|
|
|
// get the case where the capture phase event might change
|
|
|
// state, only for the following bubble event to come in
|
|
|
// later and not trigger anything as the state now
|
|
|
// invalidates the heuristics of the event plugin. We
|
|
|
// could alter all these plugins to work in such ways, but
|
|
|
// that might cause other unknown side-effects that we
|
|
|
// can't foresee right now.
|
|
|
|
|
|
if (shouldProcessPolyfillPlugins) {
|
|
|
extractEvents$2(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget);
|
|
|
extractEvents$1(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget);
|
|
|
extractEvents$3(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget);
|
|
|
extractEvents(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget);
|
|
|
}
|
|
|
} // List of events that need to be individually attached to media elements.
|
|
|
|
|
|
|
|
|
var mediaEventTypes = ['abort', 'canplay', 'canplaythrough', 'durationchange', 'emptied', 'encrypted', 'ended', 'error', 'loadeddata', 'loadedmetadata', 'loadstart', 'pause', 'play', 'playing', 'progress', 'ratechange', 'resize', 'seeked', 'seeking', 'stalled', 'suspend', 'timeupdate', 'volumechange', 'waiting']; // We should not delegate these events to the container, but rather
|
|
|
// set them on the actual target element itself. This is primarily
|
|
|
// because these events do not consistently bubble in the DOM.
|
|
|
|
|
|
var nonDelegatedEvents = new Set(['cancel', 'close', 'invalid', 'load', 'scroll', 'toggle'].concat(mediaEventTypes));
|
|
|
|
|
|
function executeDispatch(event, listener, currentTarget) {
|
|
|
var type = event.type || 'unknown-event';
|
|
|
event.currentTarget = currentTarget;
|
|
|
invokeGuardedCallbackAndCatchFirstError(type, listener, undefined, event);
|
|
|
event.currentTarget = null;
|
|
|
}
|
|
|
|
|
|
function processDispatchQueueItemsInOrder(event, dispatchListeners, inCapturePhase) {
|
|
|
var previousInstance;
|
|
|
|
|
|
if (inCapturePhase) {
|
|
|
for (var i = dispatchListeners.length - 1; i >= 0; i--) {
|
|
|
var _dispatchListeners$i = dispatchListeners[i],
|
|
|
instance = _dispatchListeners$i.instance,
|
|
|
currentTarget = _dispatchListeners$i.currentTarget,
|
|
|
listener = _dispatchListeners$i.listener;
|
|
|
|
|
|
if (instance !== previousInstance && event.isPropagationStopped()) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
executeDispatch(event, listener, currentTarget);
|
|
|
previousInstance = instance;
|
|
|
}
|
|
|
} else {
|
|
|
for (var _i = 0; _i < dispatchListeners.length; _i++) {
|
|
|
var _dispatchListeners$_i = dispatchListeners[_i],
|
|
|
_instance = _dispatchListeners$_i.instance,
|
|
|
_currentTarget = _dispatchListeners$_i.currentTarget,
|
|
|
_listener = _dispatchListeners$_i.listener;
|
|
|
|
|
|
if (_instance !== previousInstance && event.isPropagationStopped()) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
executeDispatch(event, _listener, _currentTarget);
|
|
|
previousInstance = _instance;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function processDispatchQueue(dispatchQueue, eventSystemFlags) {
|
|
|
var inCapturePhase = (eventSystemFlags & IS_CAPTURE_PHASE) !== 0;
|
|
|
|
|
|
for (var i = 0; i < dispatchQueue.length; i++) {
|
|
|
var _dispatchQueue$i = dispatchQueue[i],
|
|
|
event = _dispatchQueue$i.event,
|
|
|
listeners = _dispatchQueue$i.listeners;
|
|
|
processDispatchQueueItemsInOrder(event, listeners, inCapturePhase); // event system doesn't use pooling.
|
|
|
} // This would be a good time to rethrow if any of the event handlers threw.
|
|
|
|
|
|
|
|
|
rethrowCaughtError();
|
|
|
}
|
|
|
|
|
|
function dispatchEventsForPlugins(domEventName, eventSystemFlags, nativeEvent, targetInst, targetContainer) {
|
|
|
var nativeEventTarget = getEventTarget(nativeEvent);
|
|
|
var dispatchQueue = [];
|
|
|
extractEvents$5(dispatchQueue, domEventName, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags);
|
|
|
processDispatchQueue(dispatchQueue, eventSystemFlags);
|
|
|
}
|
|
|
|
|
|
function listenToNonDelegatedEvent(domEventName, targetElement) {
|
|
|
{
|
|
|
if (!nonDelegatedEvents.has(domEventName)) {
|
|
|
error('Did not expect a listenToNonDelegatedEvent() call for "%s". ' + 'This is a bug in React. Please file an issue.', domEventName);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var isCapturePhaseListener = false;
|
|
|
var listenerSet = getEventListenerSet(targetElement);
|
|
|
var listenerSetKey = getListenerSetKey(domEventName, isCapturePhaseListener);
|
|
|
|
|
|
if (!listenerSet.has(listenerSetKey)) {
|
|
|
addTrappedEventListener(targetElement, domEventName, IS_NON_DELEGATED, isCapturePhaseListener);
|
|
|
listenerSet.add(listenerSetKey);
|
|
|
}
|
|
|
}
|
|
|
function listenToNativeEvent(domEventName, isCapturePhaseListener, target) {
|
|
|
{
|
|
|
if (nonDelegatedEvents.has(domEventName) && !isCapturePhaseListener) {
|
|
|
error('Did not expect a listenToNativeEvent() call for "%s" in the bubble phase. ' + 'This is a bug in React. Please file an issue.', domEventName);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var eventSystemFlags = 0;
|
|
|
|
|
|
if (isCapturePhaseListener) {
|
|
|
eventSystemFlags |= IS_CAPTURE_PHASE;
|
|
|
}
|
|
|
|
|
|
addTrappedEventListener(target, domEventName, eventSystemFlags, isCapturePhaseListener);
|
|
|
} // This is only used by createEventHandle when the
|
|
|
var listeningMarker = '_reactListening' + Math.random().toString(36).slice(2);
|
|
|
function listenToAllSupportedEvents(rootContainerElement) {
|
|
|
if (!rootContainerElement[listeningMarker]) {
|
|
|
rootContainerElement[listeningMarker] = true;
|
|
|
allNativeEvents.forEach(function (domEventName) {
|
|
|
// We handle selectionchange separately because it
|
|
|
// doesn't bubble and needs to be on the document.
|
|
|
if (domEventName !== 'selectionchange') {
|
|
|
if (!nonDelegatedEvents.has(domEventName)) {
|
|
|
listenToNativeEvent(domEventName, false, rootContainerElement);
|
|
|
}
|
|
|
|
|
|
listenToNativeEvent(domEventName, true, rootContainerElement);
|
|
|
}
|
|
|
});
|
|
|
var ownerDocument = rootContainerElement.nodeType === DOCUMENT_NODE ? rootContainerElement : rootContainerElement.ownerDocument;
|
|
|
|
|
|
if (ownerDocument !== null) {
|
|
|
// The selectionchange event also needs deduplication
|
|
|
// but it is attached to the document.
|
|
|
if (!ownerDocument[listeningMarker]) {
|
|
|
ownerDocument[listeningMarker] = true;
|
|
|
listenToNativeEvent('selectionchange', false, ownerDocument);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function addTrappedEventListener(targetContainer, domEventName, eventSystemFlags, isCapturePhaseListener, isDeferredListenerForLegacyFBSupport) {
|
|
|
var listener = createEventListenerWrapperWithPriority(targetContainer, domEventName, eventSystemFlags); // If passive option is not supported, then the event will be
|
|
|
// active and not passive.
|
|
|
|
|
|
var isPassiveListener = undefined;
|
|
|
|
|
|
if (passiveBrowserEventsSupported) {
|
|
|
// Browsers introduced an intervention, making these events
|
|
|
// passive by default on document. React doesn't bind them
|
|
|
// to document anymore, but changing this now would undo
|
|
|
// the performance wins from the change. So we emulate
|
|
|
// the existing behavior manually on the roots now.
|
|
|
// https://github.com/facebook/react/issues/19651
|
|
|
if (domEventName === 'touchstart' || domEventName === 'touchmove' || domEventName === 'wheel') {
|
|
|
isPassiveListener = true;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
targetContainer = targetContainer;
|
|
|
var unsubscribeListener; // When legacyFBSupport is enabled, it's for when we
|
|
|
|
|
|
|
|
|
if (isCapturePhaseListener) {
|
|
|
if (isPassiveListener !== undefined) {
|
|
|
unsubscribeListener = addEventCaptureListenerWithPassiveFlag(targetContainer, domEventName, listener, isPassiveListener);
|
|
|
} else {
|
|
|
unsubscribeListener = addEventCaptureListener(targetContainer, domEventName, listener);
|
|
|
}
|
|
|
} else {
|
|
|
if (isPassiveListener !== undefined) {
|
|
|
unsubscribeListener = addEventBubbleListenerWithPassiveFlag(targetContainer, domEventName, listener, isPassiveListener);
|
|
|
} else {
|
|
|
unsubscribeListener = addEventBubbleListener(targetContainer, domEventName, listener);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function isMatchingRootContainer(grandContainer, targetContainer) {
|
|
|
return grandContainer === targetContainer || grandContainer.nodeType === COMMENT_NODE && grandContainer.parentNode === targetContainer;
|
|
|
}
|
|
|
|
|
|
function dispatchEventForPluginEventSystem(domEventName, eventSystemFlags, nativeEvent, targetInst, targetContainer) {
|
|
|
var ancestorInst = targetInst;
|
|
|
|
|
|
if ((eventSystemFlags & IS_EVENT_HANDLE_NON_MANAGED_NODE) === 0 && (eventSystemFlags & IS_NON_DELEGATED) === 0) {
|
|
|
var targetContainerNode = targetContainer; // If we are using the legacy FB support flag, we
|
|
|
|
|
|
if (targetInst !== null) {
|
|
|
// The below logic attempts to work out if we need to change
|
|
|
// the target fiber to a different ancestor. We had similar logic
|
|
|
// in the legacy event system, except the big difference between
|
|
|
// systems is that the modern event system now has an event listener
|
|
|
// attached to each React Root and React Portal Root. Together,
|
|
|
// the DOM nodes representing these roots are the "rootContainer".
|
|
|
// To figure out which ancestor instance we should use, we traverse
|
|
|
// up the fiber tree from the target instance and attempt to find
|
|
|
// root boundaries that match that of our current "rootContainer".
|
|
|
// If we find that "rootContainer", we find the parent fiber
|
|
|
// sub-tree for that root and make that our ancestor instance.
|
|
|
var node = targetInst;
|
|
|
|
|
|
mainLoop: while (true) {
|
|
|
if (node === null) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
var nodeTag = node.tag;
|
|
|
|
|
|
if (nodeTag === HostRoot || nodeTag === HostPortal) {
|
|
|
var container = node.stateNode.containerInfo;
|
|
|
|
|
|
if (isMatchingRootContainer(container, targetContainerNode)) {
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
if (nodeTag === HostPortal) {
|
|
|
// The target is a portal, but it's not the rootContainer we're looking for.
|
|
|
// Normally portals handle their own events all the way down to the root.
|
|
|
// So we should be able to stop now. However, we don't know if this portal
|
|
|
// was part of *our* root.
|
|
|
var grandNode = node.return;
|
|
|
|
|
|
while (grandNode !== null) {
|
|
|
var grandTag = grandNode.tag;
|
|
|
|
|
|
if (grandTag === HostRoot || grandTag === HostPortal) {
|
|
|
var grandContainer = grandNode.stateNode.containerInfo;
|
|
|
|
|
|
if (isMatchingRootContainer(grandContainer, targetContainerNode)) {
|
|
|
// This is the rootContainer we're looking for and we found it as
|
|
|
// a parent of the Portal. That means we can ignore it because the
|
|
|
// Portal will bubble through to us.
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
grandNode = grandNode.return;
|
|
|
}
|
|
|
} // Now we need to find it's corresponding host fiber in the other
|
|
|
// tree. To do this we can use getClosestInstanceFromNode, but we
|
|
|
// need to validate that the fiber is a host instance, otherwise
|
|
|
// we need to traverse up through the DOM till we find the correct
|
|
|
// node that is from the other tree.
|
|
|
|
|
|
|
|
|
while (container !== null) {
|
|
|
var parentNode = getClosestInstanceFromNode(container);
|
|
|
|
|
|
if (parentNode === null) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
var parentTag = parentNode.tag;
|
|
|
|
|
|
if (parentTag === HostComponent || parentTag === HostText) {
|
|
|
node = ancestorInst = parentNode;
|
|
|
continue mainLoop;
|
|
|
}
|
|
|
|
|
|
container = container.parentNode;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
node = node.return;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
batchedUpdates(function () {
|
|
|
return dispatchEventsForPlugins(domEventName, eventSystemFlags, nativeEvent, ancestorInst);
|
|
|
});
|
|
|
}
|
|
|
|
|
|
function createDispatchListener(instance, listener, currentTarget) {
|
|
|
return {
|
|
|
instance: instance,
|
|
|
listener: listener,
|
|
|
currentTarget: currentTarget
|
|
|
};
|
|
|
}
|
|
|
|
|
|
function accumulateSinglePhaseListeners(targetFiber, reactName, nativeEventType, inCapturePhase, accumulateTargetOnly, nativeEvent) {
|
|
|
var captureName = reactName !== null ? reactName + 'Capture' : null;
|
|
|
var reactEventName = inCapturePhase ? captureName : reactName;
|
|
|
var listeners = [];
|
|
|
var instance = targetFiber;
|
|
|
var lastHostComponent = null; // Accumulate all instances and listeners via the target -> root path.
|
|
|
|
|
|
while (instance !== null) {
|
|
|
var _instance2 = instance,
|
|
|
stateNode = _instance2.stateNode,
|
|
|
tag = _instance2.tag; // Handle listeners that are on HostComponents (i.e. <div>)
|
|
|
|
|
|
if (tag === HostComponent && stateNode !== null) {
|
|
|
lastHostComponent = stateNode; // createEventHandle listeners
|
|
|
|
|
|
|
|
|
if (reactEventName !== null) {
|
|
|
var listener = getListener(instance, reactEventName);
|
|
|
|
|
|
if (listener != null) {
|
|
|
listeners.push(createDispatchListener(instance, listener, lastHostComponent));
|
|
|
}
|
|
|
}
|
|
|
} // If we are only accumulating events for the target, then we don't
|
|
|
// continue to propagate through the React fiber tree to find other
|
|
|
// listeners.
|
|
|
|
|
|
|
|
|
if (accumulateTargetOnly) {
|
|
|
break;
|
|
|
} // If we are processing the onBeforeBlur event, then we need to take
|
|
|
|
|
|
instance = instance.return;
|
|
|
}
|
|
|
|
|
|
return listeners;
|
|
|
} // We should only use this function for:
|
|
|
// - BeforeInputEventPlugin
|
|
|
// - ChangeEventPlugin
|
|
|
// - SelectEventPlugin
|
|
|
// This is because we only process these plugins
|
|
|
// in the bubble phase, so we need to accumulate two
|
|
|
// phase event listeners (via emulation).
|
|
|
|
|
|
function accumulateTwoPhaseListeners(targetFiber, reactName) {
|
|
|
var captureName = reactName + 'Capture';
|
|
|
var listeners = [];
|
|
|
var instance = targetFiber; // Accumulate all instances and listeners via the target -> root path.
|
|
|
|
|
|
while (instance !== null) {
|
|
|
var _instance3 = instance,
|
|
|
stateNode = _instance3.stateNode,
|
|
|
tag = _instance3.tag; // Handle listeners that are on HostComponents (i.e. <div>)
|
|
|
|
|
|
if (tag === HostComponent && stateNode !== null) {
|
|
|
var currentTarget = stateNode;
|
|
|
var captureListener = getListener(instance, captureName);
|
|
|
|
|
|
if (captureListener != null) {
|
|
|
listeners.unshift(createDispatchListener(instance, captureListener, currentTarget));
|
|
|
}
|
|
|
|
|
|
var bubbleListener = getListener(instance, reactName);
|
|
|
|
|
|
if (bubbleListener != null) {
|
|
|
listeners.push(createDispatchListener(instance, bubbleListener, currentTarget));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
instance = instance.return;
|
|
|
}
|
|
|
|
|
|
return listeners;
|
|
|
}
|
|
|
|
|
|
function getParent(inst) {
|
|
|
if (inst === null) {
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
do {
|
|
|
inst = inst.return; // TODO: If this is a HostRoot we might want to bail out.
|
|
|
// That is depending on if we want nested subtrees (layers) to bubble
|
|
|
// events to their parent. We could also go through parentNode on the
|
|
|
// host node but that wouldn't work for React Native and doesn't let us
|
|
|
// do the portal feature.
|
|
|
} while (inst && inst.tag !== HostComponent);
|
|
|
|
|
|
if (inst) {
|
|
|
return inst;
|
|
|
}
|
|
|
|
|
|
return null;
|
|
|
}
|
|
|
/**
|
|
|
* Return the lowest common ancestor of A and B, or null if they are in
|
|
|
* different trees.
|
|
|
*/
|
|
|
|
|
|
|
|
|
function getLowestCommonAncestor(instA, instB) {
|
|
|
var nodeA = instA;
|
|
|
var nodeB = instB;
|
|
|
var depthA = 0;
|
|
|
|
|
|
for (var tempA = nodeA; tempA; tempA = getParent(tempA)) {
|
|
|
depthA++;
|
|
|
}
|
|
|
|
|
|
var depthB = 0;
|
|
|
|
|
|
for (var tempB = nodeB; tempB; tempB = getParent(tempB)) {
|
|
|
depthB++;
|
|
|
} // If A is deeper, crawl up.
|
|
|
|
|
|
|
|
|
while (depthA - depthB > 0) {
|
|
|
nodeA = getParent(nodeA);
|
|
|
depthA--;
|
|
|
} // If B is deeper, crawl up.
|
|
|
|
|
|
|
|
|
while (depthB - depthA > 0) {
|
|
|
nodeB = getParent(nodeB);
|
|
|
depthB--;
|
|
|
} // Walk in lockstep until we find a match.
|
|
|
|
|
|
|
|
|
var depth = depthA;
|
|
|
|
|
|
while (depth--) {
|
|
|
if (nodeA === nodeB || nodeB !== null && nodeA === nodeB.alternate) {
|
|
|
return nodeA;
|
|
|
}
|
|
|
|
|
|
nodeA = getParent(nodeA);
|
|
|
nodeB = getParent(nodeB);
|
|
|
}
|
|
|
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
function accumulateEnterLeaveListenersForEvent(dispatchQueue, event, target, common, inCapturePhase) {
|
|
|
var registrationName = event._reactName;
|
|
|
var listeners = [];
|
|
|
var instance = target;
|
|
|
|
|
|
while (instance !== null) {
|
|
|
if (instance === common) {
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
var _instance4 = instance,
|
|
|
alternate = _instance4.alternate,
|
|
|
stateNode = _instance4.stateNode,
|
|
|
tag = _instance4.tag;
|
|
|
|
|
|
if (alternate !== null && alternate === common) {
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
if (tag === HostComponent && stateNode !== null) {
|
|
|
var currentTarget = stateNode;
|
|
|
|
|
|
if (inCapturePhase) {
|
|
|
var captureListener = getListener(instance, registrationName);
|
|
|
|
|
|
if (captureListener != null) {
|
|
|
listeners.unshift(createDispatchListener(instance, captureListener, currentTarget));
|
|
|
}
|
|
|
} else if (!inCapturePhase) {
|
|
|
var bubbleListener = getListener(instance, registrationName);
|
|
|
|
|
|
if (bubbleListener != null) {
|
|
|
listeners.push(createDispatchListener(instance, bubbleListener, currentTarget));
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
instance = instance.return;
|
|
|
}
|
|
|
|
|
|
if (listeners.length !== 0) {
|
|
|
dispatchQueue.push({
|
|
|
event: event,
|
|
|
listeners: listeners
|
|
|
});
|
|
|
}
|
|
|
} // We should only use this function for:
|
|
|
// - EnterLeaveEventPlugin
|
|
|
// This is because we only process this plugin
|
|
|
// in the bubble phase, so we need to accumulate two
|
|
|
// phase event listeners.
|
|
|
|
|
|
|
|
|
function accumulateEnterLeaveTwoPhaseListeners(dispatchQueue, leaveEvent, enterEvent, from, to) {
|
|
|
var common = from && to ? getLowestCommonAncestor(from, to) : null;
|
|
|
|
|
|
if (from !== null) {
|
|
|
accumulateEnterLeaveListenersForEvent(dispatchQueue, leaveEvent, from, common, false);
|
|
|
}
|
|
|
|
|
|
if (to !== null && enterEvent !== null) {
|
|
|
accumulateEnterLeaveListenersForEvent(dispatchQueue, enterEvent, to, common, true);
|
|
|
}
|
|
|
}
|
|
|
function getListenerSetKey(domEventName, capture) {
|
|
|
return domEventName + "__" + (capture ? 'capture' : 'bubble');
|
|
|
}
|
|
|
|
|
|
var didWarnInvalidHydration = false;
|
|
|
var DANGEROUSLY_SET_INNER_HTML = 'dangerouslySetInnerHTML';
|
|
|
var SUPPRESS_CONTENT_EDITABLE_WARNING = 'suppressContentEditableWarning';
|
|
|
var SUPPRESS_HYDRATION_WARNING = 'suppressHydrationWarning';
|
|
|
var AUTOFOCUS = 'autoFocus';
|
|
|
var CHILDREN = 'children';
|
|
|
var STYLE = 'style';
|
|
|
var HTML$1 = '__html';
|
|
|
var warnedUnknownTags;
|
|
|
var validatePropertiesInDevelopment;
|
|
|
var warnForPropDifference;
|
|
|
var warnForExtraAttributes;
|
|
|
var warnForInvalidEventListener;
|
|
|
var canDiffStyleForHydrationWarning;
|
|
|
var normalizeHTML;
|
|
|
|
|
|
{
|
|
|
warnedUnknownTags = {
|
|
|
// There are working polyfills for <dialog>. Let people use it.
|
|
|
dialog: true,
|
|
|
// Electron ships a custom <webview> tag to display external web content in
|
|
|
// an isolated frame and process.
|
|
|
// This tag is not present in non Electron environments such as JSDom which
|
|
|
// is often used for testing purposes.
|
|
|
// @see https://electronjs.org/docs/api/webview-tag
|
|
|
webview: true
|
|
|
};
|
|
|
|
|
|
validatePropertiesInDevelopment = function (type, props) {
|
|
|
validateProperties(type, props);
|
|
|
validateProperties$1(type, props);
|
|
|
validateProperties$2(type, props, {
|
|
|
registrationNameDependencies: registrationNameDependencies,
|
|
|
possibleRegistrationNames: possibleRegistrationNames
|
|
|
});
|
|
|
}; // IE 11 parses & normalizes the style attribute as opposed to other
|
|
|
// browsers. It adds spaces and sorts the properties in some
|
|
|
// non-alphabetical order. Handling that would require sorting CSS
|
|
|
// properties in the client & server versions or applying
|
|
|
// `expectedStyle` to a temporary DOM node to read its `style` attribute
|
|
|
// normalized. Since it only affects IE, we're skipping style warnings
|
|
|
// in that browser completely in favor of doing all that work.
|
|
|
// See https://github.com/facebook/react/issues/11807
|
|
|
|
|
|
|
|
|
canDiffStyleForHydrationWarning = canUseDOM && !document.documentMode;
|
|
|
|
|
|
warnForPropDifference = function (propName, serverValue, clientValue) {
|
|
|
if (didWarnInvalidHydration) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
var normalizedClientValue = normalizeMarkupForTextOrAttribute(clientValue);
|
|
|
var normalizedServerValue = normalizeMarkupForTextOrAttribute(serverValue);
|
|
|
|
|
|
if (normalizedServerValue === normalizedClientValue) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
didWarnInvalidHydration = true;
|
|
|
|
|
|
error('Prop `%s` did not match. Server: %s Client: %s', propName, JSON.stringify(normalizedServerValue), JSON.stringify(normalizedClientValue));
|
|
|
};
|
|
|
|
|
|
warnForExtraAttributes = function (attributeNames) {
|
|
|
if (didWarnInvalidHydration) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
didWarnInvalidHydration = true;
|
|
|
var names = [];
|
|
|
attributeNames.forEach(function (name) {
|
|
|
names.push(name);
|
|
|
});
|
|
|
|
|
|
error('Extra attributes from the server: %s', names);
|
|
|
};
|
|
|
|
|
|
warnForInvalidEventListener = function (registrationName, listener) {
|
|
|
if (listener === false) {
|
|
|
error('Expected `%s` listener to be a function, instead got `false`.\n\n' + 'If you used to conditionally omit it with %s={condition && value}, ' + 'pass %s={condition ? value : undefined} instead.', registrationName, registrationName, registrationName);
|
|
|
} else {
|
|
|
error('Expected `%s` listener to be a function, instead got a value of `%s` type.', registrationName, typeof listener);
|
|
|
}
|
|
|
}; // Parse the HTML and read it back to normalize the HTML string so that it
|
|
|
// can be used for comparison.
|
|
|
|
|
|
|
|
|
normalizeHTML = function (parent, html) {
|
|
|
// We could have created a separate document here to avoid
|
|
|
// re-initializing custom elements if they exist. But this breaks
|
|
|
// how <noscript> is being handled. So we use the same document.
|
|
|
// See the discussion in https://github.com/facebook/react/pull/11157.
|
|
|
var testElement = parent.namespaceURI === HTML_NAMESPACE ? parent.ownerDocument.createElement(parent.tagName) : parent.ownerDocument.createElementNS(parent.namespaceURI, parent.tagName);
|
|
|
testElement.innerHTML = html;
|
|
|
return testElement.innerHTML;
|
|
|
};
|
|
|
} // HTML parsing normalizes CR and CRLF to LF.
|
|
|
// It also can turn \u0000 into \uFFFD inside attributes.
|
|
|
// https://www.w3.org/TR/html5/single-page.html#preprocessing-the-input-stream
|
|
|
// If we have a mismatch, it might be caused by that.
|
|
|
// We will still patch up in this case but not fire the warning.
|
|
|
|
|
|
|
|
|
var NORMALIZE_NEWLINES_REGEX = /\r\n?/g;
|
|
|
var NORMALIZE_NULL_AND_REPLACEMENT_REGEX = /\u0000|\uFFFD/g;
|
|
|
|
|
|
function normalizeMarkupForTextOrAttribute(markup) {
|
|
|
{
|
|
|
checkHtmlStringCoercion(markup);
|
|
|
}
|
|
|
|
|
|
var markupString = typeof markup === 'string' ? markup : '' + markup;
|
|
|
return markupString.replace(NORMALIZE_NEWLINES_REGEX, '\n').replace(NORMALIZE_NULL_AND_REPLACEMENT_REGEX, '');
|
|
|
}
|
|
|
|
|
|
function checkForUnmatchedText(serverText, clientText, isConcurrentMode, shouldWarnDev) {
|
|
|
var normalizedClientText = normalizeMarkupForTextOrAttribute(clientText);
|
|
|
var normalizedServerText = normalizeMarkupForTextOrAttribute(serverText);
|
|
|
|
|
|
if (normalizedServerText === normalizedClientText) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (shouldWarnDev) {
|
|
|
{
|
|
|
if (!didWarnInvalidHydration) {
|
|
|
didWarnInvalidHydration = true;
|
|
|
|
|
|
error('Text content did not match. Server: "%s" Client: "%s"', normalizedServerText, normalizedClientText);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (isConcurrentMode && enableClientRenderFallbackOnTextMismatch) {
|
|
|
// In concurrent roots, we throw when there's a text mismatch and revert to
|
|
|
// client rendering, up to the nearest Suspense boundary.
|
|
|
throw new Error('Text content does not match server-rendered HTML.');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function getOwnerDocumentFromRootContainer(rootContainerElement) {
|
|
|
return rootContainerElement.nodeType === DOCUMENT_NODE ? rootContainerElement : rootContainerElement.ownerDocument;
|
|
|
}
|
|
|
|
|
|
function noop() {}
|
|
|
|
|
|
function trapClickOnNonInteractiveElement(node) {
|
|
|
// Mobile Safari does not fire properly bubble click events on
|
|
|
// non-interactive elements, which means delegated click listeners do not
|
|
|
// fire. The workaround for this bug involves attaching an empty click
|
|
|
// listener on the target node.
|
|
|
// https://www.quirksmode.org/blog/archives/2010/09/click_event_del.html
|
|
|
// Just set it using the onclick property so that we don't have to manage any
|
|
|
// bookkeeping for it. Not sure if we need to clear it when the listener is
|
|
|
// removed.
|
|
|
// TODO: Only do this for the relevant Safaris maybe?
|
|
|
node.onclick = noop;
|
|
|
}
|
|
|
|
|
|
function setInitialDOMProperties(tag, domElement, rootContainerElement, nextProps, isCustomComponentTag) {
|
|
|
for (var propKey in nextProps) {
|
|
|
if (!nextProps.hasOwnProperty(propKey)) {
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
var nextProp = nextProps[propKey];
|
|
|
|
|
|
if (propKey === STYLE) {
|
|
|
{
|
|
|
if (nextProp) {
|
|
|
// Freeze the next style object so that we can assume it won't be
|
|
|
// mutated. We have already warned for this in the past.
|
|
|
Object.freeze(nextProp);
|
|
|
}
|
|
|
} // Relies on `updateStylesByID` not mutating `styleUpdates`.
|
|
|
|
|
|
|
|
|
setValueForStyles(domElement, nextProp);
|
|
|
} else if (propKey === DANGEROUSLY_SET_INNER_HTML) {
|
|
|
var nextHtml = nextProp ? nextProp[HTML$1] : undefined;
|
|
|
|
|
|
if (nextHtml != null) {
|
|
|
setInnerHTML(domElement, nextHtml);
|
|
|
}
|
|
|
} else if (propKey === CHILDREN) {
|
|
|
if (typeof nextProp === 'string') {
|
|
|
// Avoid setting initial textContent when the text is empty. In IE11 setting
|
|
|
// textContent on a <textarea> will cause the placeholder to not
|
|
|
// show within the <textarea> until it has been focused and blurred again.
|
|
|
// https://github.com/facebook/react/issues/6731#issuecomment-254874553
|
|
|
var canSetTextContent = tag !== 'textarea' || nextProp !== '';
|
|
|
|
|
|
if (canSetTextContent) {
|
|
|
setTextContent(domElement, nextProp);
|
|
|
}
|
|
|
} else if (typeof nextProp === 'number') {
|
|
|
setTextContent(domElement, '' + nextProp);
|
|
|
}
|
|
|
} else if (propKey === SUPPRESS_CONTENT_EDITABLE_WARNING || propKey === SUPPRESS_HYDRATION_WARNING) ; else if (propKey === AUTOFOCUS) ; else if (registrationNameDependencies.hasOwnProperty(propKey)) {
|
|
|
if (nextProp != null) {
|
|
|
if ( typeof nextProp !== 'function') {
|
|
|
warnForInvalidEventListener(propKey, nextProp);
|
|
|
}
|
|
|
|
|
|
if (propKey === 'onScroll') {
|
|
|
listenToNonDelegatedEvent('scroll', domElement);
|
|
|
}
|
|
|
}
|
|
|
} else if (nextProp != null) {
|
|
|
setValueForProperty(domElement, propKey, nextProp, isCustomComponentTag);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function updateDOMProperties(domElement, updatePayload, wasCustomComponentTag, isCustomComponentTag) {
|
|
|
// TODO: Handle wasCustomComponentTag
|
|
|
for (var i = 0; i < updatePayload.length; i += 2) {
|
|
|
var propKey = updatePayload[i];
|
|
|
var propValue = updatePayload[i + 1];
|
|
|
|
|
|
if (propKey === STYLE) {
|
|
|
setValueForStyles(domElement, propValue);
|
|
|
} else if (propKey === DANGEROUSLY_SET_INNER_HTML) {
|
|
|
setInnerHTML(domElement, propValue);
|
|
|
} else if (propKey === CHILDREN) {
|
|
|
setTextContent(domElement, propValue);
|
|
|
} else {
|
|
|
setValueForProperty(domElement, propKey, propValue, isCustomComponentTag);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function createElement(type, props, rootContainerElement, parentNamespace) {
|
|
|
var isCustomComponentTag; // We create tags in the namespace of their parent container, except HTML
|
|
|
// tags get no namespace.
|
|
|
|
|
|
var ownerDocument = getOwnerDocumentFromRootContainer(rootContainerElement);
|
|
|
var domElement;
|
|
|
var namespaceURI = parentNamespace;
|
|
|
|
|
|
if (namespaceURI === HTML_NAMESPACE) {
|
|
|
namespaceURI = getIntrinsicNamespace(type);
|
|
|
}
|
|
|
|
|
|
if (namespaceURI === HTML_NAMESPACE) {
|
|
|
{
|
|
|
isCustomComponentTag = isCustomComponent(type, props); // Should this check be gated by parent namespace? Not sure we want to
|
|
|
// allow <SVG> or <mATH>.
|
|
|
|
|
|
if (!isCustomComponentTag && type !== type.toLowerCase()) {
|
|
|
error('<%s /> is using incorrect casing. ' + 'Use PascalCase for React components, ' + 'or lowercase for HTML elements.', type);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (type === 'script') {
|
|
|
// Create the script via .innerHTML so its "parser-inserted" flag is
|
|
|
// set to true and it does not execute
|
|
|
var div = ownerDocument.createElement('div');
|
|
|
|
|
|
div.innerHTML = '<script><' + '/script>'; // eslint-disable-line
|
|
|
// This is guaranteed to yield a script element.
|
|
|
|
|
|
var firstChild = div.firstChild;
|
|
|
domElement = div.removeChild(firstChild);
|
|
|
} else if (typeof props.is === 'string') {
|
|
|
// $FlowIssue `createElement` should be updated for Web Components
|
|
|
domElement = ownerDocument.createElement(type, {
|
|
|
is: props.is
|
|
|
});
|
|
|
} else {
|
|
|
// Separate else branch instead of using `props.is || undefined` above because of a Firefox bug.
|
|
|
// See discussion in https://github.com/facebook/react/pull/6896
|
|
|
// and discussion in https://bugzilla.mozilla.org/show_bug.cgi?id=1276240
|
|
|
domElement = ownerDocument.createElement(type); // Normally attributes are assigned in `setInitialDOMProperties`, however the `multiple` and `size`
|
|
|
// attributes on `select`s needs to be added before `option`s are inserted.
|
|
|
// This prevents:
|
|
|
// - a bug where the `select` does not scroll to the correct option because singular
|
|
|
// `select` elements automatically pick the first item #13222
|
|
|
// - a bug where the `select` set the first item as selected despite the `size` attribute #14239
|
|
|
// See https://github.com/facebook/react/issues/13222
|
|
|
// and https://github.com/facebook/react/issues/14239
|
|
|
|
|
|
if (type === 'select') {
|
|
|
var node = domElement;
|
|
|
|
|
|
if (props.multiple) {
|
|
|
node.multiple = true;
|
|
|
} else if (props.size) {
|
|
|
// Setting a size greater than 1 causes a select to behave like `multiple=true`, where
|
|
|
// it is possible that no option is selected.
|
|
|
//
|
|
|
// This is only necessary when a select in "single selection mode".
|
|
|
node.size = props.size;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
|
domElement = ownerDocument.createElementNS(namespaceURI, type);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
if (namespaceURI === HTML_NAMESPACE) {
|
|
|
if (!isCustomComponentTag && Object.prototype.toString.call(domElement) === '[object HTMLUnknownElement]' && !hasOwnProperty.call(warnedUnknownTags, type)) {
|
|
|
warnedUnknownTags[type] = true;
|
|
|
|
|
|
error('The tag <%s> is unrecognized in this browser. ' + 'If you meant to render a React component, start its name with ' + 'an uppercase letter.', type);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return domElement;
|
|
|
}
|
|
|
function createTextNode(text, rootContainerElement) {
|
|
|
return getOwnerDocumentFromRootContainer(rootContainerElement).createTextNode(text);
|
|
|
}
|
|
|
function setInitialProperties(domElement, tag, rawProps, rootContainerElement) {
|
|
|
var isCustomComponentTag = isCustomComponent(tag, rawProps);
|
|
|
|
|
|
{
|
|
|
validatePropertiesInDevelopment(tag, rawProps);
|
|
|
} // TODO: Make sure that we check isMounted before firing any of these events.
|
|
|
|
|
|
|
|
|
var props;
|
|
|
|
|
|
switch (tag) {
|
|
|
case 'dialog':
|
|
|
listenToNonDelegatedEvent('cancel', domElement);
|
|
|
listenToNonDelegatedEvent('close', domElement);
|
|
|
props = rawProps;
|
|
|
break;
|
|
|
|
|
|
case 'iframe':
|
|
|
case 'object':
|
|
|
case 'embed':
|
|
|
// We listen to this event in case to ensure emulated bubble
|
|
|
// listeners still fire for the load event.
|
|
|
listenToNonDelegatedEvent('load', domElement);
|
|
|
props = rawProps;
|
|
|
break;
|
|
|
|
|
|
case 'video':
|
|
|
case 'audio':
|
|
|
// We listen to these events in case to ensure emulated bubble
|
|
|
// listeners still fire for all the media events.
|
|
|
for (var i = 0; i < mediaEventTypes.length; i++) {
|
|
|
listenToNonDelegatedEvent(mediaEventTypes[i], domElement);
|
|
|
}
|
|
|
|
|
|
props = rawProps;
|
|
|
break;
|
|
|
|
|
|
case 'source':
|
|
|
// We listen to this event in case to ensure emulated bubble
|
|
|
// listeners still fire for the error event.
|
|
|
listenToNonDelegatedEvent('error', domElement);
|
|
|
props = rawProps;
|
|
|
break;
|
|
|
|
|
|
case 'img':
|
|
|
case 'image':
|
|
|
case 'link':
|
|
|
// We listen to these events in case to ensure emulated bubble
|
|
|
// listeners still fire for error and load events.
|
|
|
listenToNonDelegatedEvent('error', domElement);
|
|
|
listenToNonDelegatedEvent('load', domElement);
|
|
|
props = rawProps;
|
|
|
break;
|
|
|
|
|
|
case 'details':
|
|
|
// We listen to this event in case to ensure emulated bubble
|
|
|
// listeners still fire for the toggle event.
|
|
|
listenToNonDelegatedEvent('toggle', domElement);
|
|
|
props = rawProps;
|
|
|
break;
|
|
|
|
|
|
case 'input':
|
|
|
initWrapperState(domElement, rawProps);
|
|
|
props = getHostProps(domElement, rawProps); // We listen to this event in case to ensure emulated bubble
|
|
|
// listeners still fire for the invalid event.
|
|
|
|
|
|
listenToNonDelegatedEvent('invalid', domElement);
|
|
|
break;
|
|
|
|
|
|
case 'option':
|
|
|
validateProps(domElement, rawProps);
|
|
|
props = rawProps;
|
|
|
break;
|
|
|
|
|
|
case 'select':
|
|
|
initWrapperState$1(domElement, rawProps);
|
|
|
props = getHostProps$1(domElement, rawProps); // We listen to this event in case to ensure emulated bubble
|
|
|
// listeners still fire for the invalid event.
|
|
|
|
|
|
listenToNonDelegatedEvent('invalid', domElement);
|
|
|
break;
|
|
|
|
|
|
case 'textarea':
|
|
|
initWrapperState$2(domElement, rawProps);
|
|
|
props = getHostProps$2(domElement, rawProps); // We listen to this event in case to ensure emulated bubble
|
|
|
// listeners still fire for the invalid event.
|
|
|
|
|
|
listenToNonDelegatedEvent('invalid', domElement);
|
|
|
break;
|
|
|
|
|
|
default:
|
|
|
props = rawProps;
|
|
|
}
|
|
|
|
|
|
assertValidProps(tag, props);
|
|
|
setInitialDOMProperties(tag, domElement, rootContainerElement, props, isCustomComponentTag);
|
|
|
|
|
|
switch (tag) {
|
|
|
case 'input':
|
|
|
// TODO: Make sure we check if this is still unmounted or do any clean
|
|
|
// up necessary since we never stop tracking anymore.
|
|
|
track(domElement);
|
|
|
postMountWrapper(domElement, rawProps, false);
|
|
|
break;
|
|
|
|
|
|
case 'textarea':
|
|
|
// TODO: Make sure we check if this is still unmounted or do any clean
|
|
|
// up necessary since we never stop tracking anymore.
|
|
|
track(domElement);
|
|
|
postMountWrapper$3(domElement);
|
|
|
break;
|
|
|
|
|
|
case 'option':
|
|
|
postMountWrapper$1(domElement, rawProps);
|
|
|
break;
|
|
|
|
|
|
case 'select':
|
|
|
postMountWrapper$2(domElement, rawProps);
|
|
|
break;
|
|
|
|
|
|
default:
|
|
|
if (typeof props.onClick === 'function') {
|
|
|
// TODO: This cast may not be sound for SVG, MathML or custom elements.
|
|
|
trapClickOnNonInteractiveElement(domElement);
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
}
|
|
|
} // Calculate the diff between the two objects.
|
|
|
|
|
|
function diffProperties(domElement, tag, lastRawProps, nextRawProps, rootContainerElement) {
|
|
|
{
|
|
|
validatePropertiesInDevelopment(tag, nextRawProps);
|
|
|
}
|
|
|
|
|
|
var updatePayload = null;
|
|
|
var lastProps;
|
|
|
var nextProps;
|
|
|
|
|
|
switch (tag) {
|
|
|
case 'input':
|
|
|
lastProps = getHostProps(domElement, lastRawProps);
|
|
|
nextProps = getHostProps(domElement, nextRawProps);
|
|
|
updatePayload = [];
|
|
|
break;
|
|
|
|
|
|
case 'select':
|
|
|
lastProps = getHostProps$1(domElement, lastRawProps);
|
|
|
nextProps = getHostProps$1(domElement, nextRawProps);
|
|
|
updatePayload = [];
|
|
|
break;
|
|
|
|
|
|
case 'textarea':
|
|
|
lastProps = getHostProps$2(domElement, lastRawProps);
|
|
|
nextProps = getHostProps$2(domElement, nextRawProps);
|
|
|
updatePayload = [];
|
|
|
break;
|
|
|
|
|
|
default:
|
|
|
lastProps = lastRawProps;
|
|
|
nextProps = nextRawProps;
|
|
|
|
|
|
if (typeof lastProps.onClick !== 'function' && typeof nextProps.onClick === 'function') {
|
|
|
// TODO: This cast may not be sound for SVG, MathML or custom elements.
|
|
|
trapClickOnNonInteractiveElement(domElement);
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
assertValidProps(tag, nextProps);
|
|
|
var propKey;
|
|
|
var styleName;
|
|
|
var styleUpdates = null;
|
|
|
|
|
|
for (propKey in lastProps) {
|
|
|
if (nextProps.hasOwnProperty(propKey) || !lastProps.hasOwnProperty(propKey) || lastProps[propKey] == null) {
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
if (propKey === STYLE) {
|
|
|
var lastStyle = lastProps[propKey];
|
|
|
|
|
|
for (styleName in lastStyle) {
|
|
|
if (lastStyle.hasOwnProperty(styleName)) {
|
|
|
if (!styleUpdates) {
|
|
|
styleUpdates = {};
|
|
|
}
|
|
|
|
|
|
styleUpdates[styleName] = '';
|
|
|
}
|
|
|
}
|
|
|
} else if (propKey === DANGEROUSLY_SET_INNER_HTML || propKey === CHILDREN) ; else if (propKey === SUPPRESS_CONTENT_EDITABLE_WARNING || propKey === SUPPRESS_HYDRATION_WARNING) ; else if (propKey === AUTOFOCUS) ; else if (registrationNameDependencies.hasOwnProperty(propKey)) {
|
|
|
// This is a special case. If any listener updates we need to ensure
|
|
|
// that the "current" fiber pointer gets updated so we need a commit
|
|
|
// to update this element.
|
|
|
if (!updatePayload) {
|
|
|
updatePayload = [];
|
|
|
}
|
|
|
} else {
|
|
|
// For all other deleted properties we add it to the queue. We use
|
|
|
// the allowed property list in the commit phase instead.
|
|
|
(updatePayload = updatePayload || []).push(propKey, null);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
for (propKey in nextProps) {
|
|
|
var nextProp = nextProps[propKey];
|
|
|
var lastProp = lastProps != null ? lastProps[propKey] : undefined;
|
|
|
|
|
|
if (!nextProps.hasOwnProperty(propKey) || nextProp === lastProp || nextProp == null && lastProp == null) {
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
if (propKey === STYLE) {
|
|
|
{
|
|
|
if (nextProp) {
|
|
|
// Freeze the next style object so that we can assume it won't be
|
|
|
// mutated. We have already warned for this in the past.
|
|
|
Object.freeze(nextProp);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (lastProp) {
|
|
|
// Unset styles on `lastProp` but not on `nextProp`.
|
|
|
for (styleName in lastProp) {
|
|
|
if (lastProp.hasOwnProperty(styleName) && (!nextProp || !nextProp.hasOwnProperty(styleName))) {
|
|
|
if (!styleUpdates) {
|
|
|
styleUpdates = {};
|
|
|
}
|
|
|
|
|
|
styleUpdates[styleName] = '';
|
|
|
}
|
|
|
} // Update styles that changed since `lastProp`.
|
|
|
|
|
|
|
|
|
for (styleName in nextProp) {
|
|
|
if (nextProp.hasOwnProperty(styleName) && lastProp[styleName] !== nextProp[styleName]) {
|
|
|
if (!styleUpdates) {
|
|
|
styleUpdates = {};
|
|
|
}
|
|
|
|
|
|
styleUpdates[styleName] = nextProp[styleName];
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
|
// Relies on `updateStylesByID` not mutating `styleUpdates`.
|
|
|
if (!styleUpdates) {
|
|
|
if (!updatePayload) {
|
|
|
updatePayload = [];
|
|
|
}
|
|
|
|
|
|
updatePayload.push(propKey, styleUpdates);
|
|
|
}
|
|
|
|
|
|
styleUpdates = nextProp;
|
|
|
}
|
|
|
} else if (propKey === DANGEROUSLY_SET_INNER_HTML) {
|
|
|
var nextHtml = nextProp ? nextProp[HTML$1] : undefined;
|
|
|
var lastHtml = lastProp ? lastProp[HTML$1] : undefined;
|
|
|
|
|
|
if (nextHtml != null) {
|
|
|
if (lastHtml !== nextHtml) {
|
|
|
(updatePayload = updatePayload || []).push(propKey, nextHtml);
|
|
|
}
|
|
|
}
|
|
|
} else if (propKey === CHILDREN) {
|
|
|
if (typeof nextProp === 'string' || typeof nextProp === 'number') {
|
|
|
(updatePayload = updatePayload || []).push(propKey, '' + nextProp);
|
|
|
}
|
|
|
} else if (propKey === SUPPRESS_CONTENT_EDITABLE_WARNING || propKey === SUPPRESS_HYDRATION_WARNING) ; else if (registrationNameDependencies.hasOwnProperty(propKey)) {
|
|
|
if (nextProp != null) {
|
|
|
// We eagerly listen to this even though we haven't committed yet.
|
|
|
if ( typeof nextProp !== 'function') {
|
|
|
warnForInvalidEventListener(propKey, nextProp);
|
|
|
}
|
|
|
|
|
|
if (propKey === 'onScroll') {
|
|
|
listenToNonDelegatedEvent('scroll', domElement);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (!updatePayload && lastProp !== nextProp) {
|
|
|
// This is a special case. If any listener updates we need to ensure
|
|
|
// that the "current" props pointer gets updated so we need a commit
|
|
|
// to update this element.
|
|
|
updatePayload = [];
|
|
|
}
|
|
|
} else {
|
|
|
// For any other property we always add it to the queue and then we
|
|
|
// filter it out using the allowed property list during the commit.
|
|
|
(updatePayload = updatePayload || []).push(propKey, nextProp);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (styleUpdates) {
|
|
|
{
|
|
|
validateShorthandPropertyCollisionInDev(styleUpdates, nextProps[STYLE]);
|
|
|
}
|
|
|
|
|
|
(updatePayload = updatePayload || []).push(STYLE, styleUpdates);
|
|
|
}
|
|
|
|
|
|
return updatePayload;
|
|
|
} // Apply the diff.
|
|
|
|
|
|
function updateProperties(domElement, updatePayload, tag, lastRawProps, nextRawProps) {
|
|
|
// Update checked *before* name.
|
|
|
// In the middle of an update, it is possible to have multiple checked.
|
|
|
// When a checked radio tries to change name, browser makes another radio's checked false.
|
|
|
if (tag === 'input' && nextRawProps.type === 'radio' && nextRawProps.name != null) {
|
|
|
updateChecked(domElement, nextRawProps);
|
|
|
}
|
|
|
|
|
|
var wasCustomComponentTag = isCustomComponent(tag, lastRawProps);
|
|
|
var isCustomComponentTag = isCustomComponent(tag, nextRawProps); // Apply the diff.
|
|
|
|
|
|
updateDOMProperties(domElement, updatePayload, wasCustomComponentTag, isCustomComponentTag); // TODO: Ensure that an update gets scheduled if any of the special props
|
|
|
// changed.
|
|
|
|
|
|
switch (tag) {
|
|
|
case 'input':
|
|
|
// Update the wrapper around inputs *after* updating props. This has to
|
|
|
// happen after `updateDOMProperties`. Otherwise HTML5 input validations
|
|
|
// raise warnings and prevent the new value from being assigned.
|
|
|
updateWrapper(domElement, nextRawProps);
|
|
|
break;
|
|
|
|
|
|
case 'textarea':
|
|
|
updateWrapper$1(domElement, nextRawProps);
|
|
|
break;
|
|
|
|
|
|
case 'select':
|
|
|
// <select> value update needs to occur after <option> children
|
|
|
// reconciliation
|
|
|
postUpdateWrapper(domElement, nextRawProps);
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function getPossibleStandardName(propName) {
|
|
|
{
|
|
|
var lowerCasedName = propName.toLowerCase();
|
|
|
|
|
|
if (!possibleStandardNames.hasOwnProperty(lowerCasedName)) {
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
return possibleStandardNames[lowerCasedName] || null;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function diffHydratedProperties(domElement, tag, rawProps, parentNamespace, rootContainerElement, isConcurrentMode, shouldWarnDev) {
|
|
|
var isCustomComponentTag;
|
|
|
var extraAttributeNames;
|
|
|
|
|
|
{
|
|
|
isCustomComponentTag = isCustomComponent(tag, rawProps);
|
|
|
validatePropertiesInDevelopment(tag, rawProps);
|
|
|
} // TODO: Make sure that we check isMounted before firing any of these events.
|
|
|
|
|
|
|
|
|
switch (tag) {
|
|
|
case 'dialog':
|
|
|
listenToNonDelegatedEvent('cancel', domElement);
|
|
|
listenToNonDelegatedEvent('close', domElement);
|
|
|
break;
|
|
|
|
|
|
case 'iframe':
|
|
|
case 'object':
|
|
|
case 'embed':
|
|
|
// We listen to this event in case to ensure emulated bubble
|
|
|
// listeners still fire for the load event.
|
|
|
listenToNonDelegatedEvent('load', domElement);
|
|
|
break;
|
|
|
|
|
|
case 'video':
|
|
|
case 'audio':
|
|
|
// We listen to these events in case to ensure emulated bubble
|
|
|
// listeners still fire for all the media events.
|
|
|
for (var i = 0; i < mediaEventTypes.length; i++) {
|
|
|
listenToNonDelegatedEvent(mediaEventTypes[i], domElement);
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case 'source':
|
|
|
// We listen to this event in case to ensure emulated bubble
|
|
|
// listeners still fire for the error event.
|
|
|
listenToNonDelegatedEvent('error', domElement);
|
|
|
break;
|
|
|
|
|
|
case 'img':
|
|
|
case 'image':
|
|
|
case 'link':
|
|
|
// We listen to these events in case to ensure emulated bubble
|
|
|
// listeners still fire for error and load events.
|
|
|
listenToNonDelegatedEvent('error', domElement);
|
|
|
listenToNonDelegatedEvent('load', domElement);
|
|
|
break;
|
|
|
|
|
|
case 'details':
|
|
|
// We listen to this event in case to ensure emulated bubble
|
|
|
// listeners still fire for the toggle event.
|
|
|
listenToNonDelegatedEvent('toggle', domElement);
|
|
|
break;
|
|
|
|
|
|
case 'input':
|
|
|
initWrapperState(domElement, rawProps); // We listen to this event in case to ensure emulated bubble
|
|
|
// listeners still fire for the invalid event.
|
|
|
|
|
|
listenToNonDelegatedEvent('invalid', domElement);
|
|
|
break;
|
|
|
|
|
|
case 'option':
|
|
|
validateProps(domElement, rawProps);
|
|
|
break;
|
|
|
|
|
|
case 'select':
|
|
|
initWrapperState$1(domElement, rawProps); // We listen to this event in case to ensure emulated bubble
|
|
|
// listeners still fire for the invalid event.
|
|
|
|
|
|
listenToNonDelegatedEvent('invalid', domElement);
|
|
|
break;
|
|
|
|
|
|
case 'textarea':
|
|
|
initWrapperState$2(domElement, rawProps); // We listen to this event in case to ensure emulated bubble
|
|
|
// listeners still fire for the invalid event.
|
|
|
|
|
|
listenToNonDelegatedEvent('invalid', domElement);
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
assertValidProps(tag, rawProps);
|
|
|
|
|
|
{
|
|
|
extraAttributeNames = new Set();
|
|
|
var attributes = domElement.attributes;
|
|
|
|
|
|
for (var _i = 0; _i < attributes.length; _i++) {
|
|
|
var name = attributes[_i].name.toLowerCase();
|
|
|
|
|
|
switch (name) {
|
|
|
// Controlled attributes are not validated
|
|
|
// TODO: Only ignore them on controlled tags.
|
|
|
case 'value':
|
|
|
break;
|
|
|
|
|
|
case 'checked':
|
|
|
break;
|
|
|
|
|
|
case 'selected':
|
|
|
break;
|
|
|
|
|
|
default:
|
|
|
// Intentionally use the original name.
|
|
|
// See discussion in https://github.com/facebook/react/pull/10676.
|
|
|
extraAttributeNames.add(attributes[_i].name);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var updatePayload = null;
|
|
|
|
|
|
for (var propKey in rawProps) {
|
|
|
if (!rawProps.hasOwnProperty(propKey)) {
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
var nextProp = rawProps[propKey];
|
|
|
|
|
|
if (propKey === CHILDREN) {
|
|
|
// For text content children we compare against textContent. This
|
|
|
// might match additional HTML that is hidden when we read it using
|
|
|
// textContent. E.g. "foo" will match "f<span>oo</span>" but that still
|
|
|
// satisfies our requirement. Our requirement is not to produce perfect
|
|
|
// HTML and attributes. Ideally we should preserve structure but it's
|
|
|
// ok not to if the visible content is still enough to indicate what
|
|
|
// even listeners these nodes might be wired up to.
|
|
|
// TODO: Warn if there is more than a single textNode as a child.
|
|
|
// TODO: Should we use domElement.firstChild.nodeValue to compare?
|
|
|
if (typeof nextProp === 'string') {
|
|
|
if (domElement.textContent !== nextProp) {
|
|
|
if (rawProps[SUPPRESS_HYDRATION_WARNING] !== true) {
|
|
|
checkForUnmatchedText(domElement.textContent, nextProp, isConcurrentMode, shouldWarnDev);
|
|
|
}
|
|
|
|
|
|
updatePayload = [CHILDREN, nextProp];
|
|
|
}
|
|
|
} else if (typeof nextProp === 'number') {
|
|
|
if (domElement.textContent !== '' + nextProp) {
|
|
|
if (rawProps[SUPPRESS_HYDRATION_WARNING] !== true) {
|
|
|
checkForUnmatchedText(domElement.textContent, nextProp, isConcurrentMode, shouldWarnDev);
|
|
|
}
|
|
|
|
|
|
updatePayload = [CHILDREN, '' + nextProp];
|
|
|
}
|
|
|
}
|
|
|
} else if (registrationNameDependencies.hasOwnProperty(propKey)) {
|
|
|
if (nextProp != null) {
|
|
|
if ( typeof nextProp !== 'function') {
|
|
|
warnForInvalidEventListener(propKey, nextProp);
|
|
|
}
|
|
|
|
|
|
if (propKey === 'onScroll') {
|
|
|
listenToNonDelegatedEvent('scroll', domElement);
|
|
|
}
|
|
|
}
|
|
|
} else if (shouldWarnDev && true && // Convince Flow we've calculated it (it's DEV-only in this method.)
|
|
|
typeof isCustomComponentTag === 'boolean') {
|
|
|
// Validate that the properties correspond to their expected values.
|
|
|
var serverValue = void 0;
|
|
|
var propertyInfo = isCustomComponentTag && enableCustomElementPropertySupport ? null : getPropertyInfo(propKey);
|
|
|
|
|
|
if (rawProps[SUPPRESS_HYDRATION_WARNING] === true) ; else if (propKey === SUPPRESS_CONTENT_EDITABLE_WARNING || propKey === SUPPRESS_HYDRATION_WARNING || // Controlled attributes are not validated
|
|
|
// TODO: Only ignore them on controlled tags.
|
|
|
propKey === 'value' || propKey === 'checked' || propKey === 'selected') ; else if (propKey === DANGEROUSLY_SET_INNER_HTML) {
|
|
|
var serverHTML = domElement.innerHTML;
|
|
|
var nextHtml = nextProp ? nextProp[HTML$1] : undefined;
|
|
|
|
|
|
if (nextHtml != null) {
|
|
|
var expectedHTML = normalizeHTML(domElement, nextHtml);
|
|
|
|
|
|
if (expectedHTML !== serverHTML) {
|
|
|
warnForPropDifference(propKey, serverHTML, expectedHTML);
|
|
|
}
|
|
|
}
|
|
|
} else if (propKey === STYLE) {
|
|
|
// $FlowFixMe - Should be inferred as not undefined.
|
|
|
extraAttributeNames.delete(propKey);
|
|
|
|
|
|
if (canDiffStyleForHydrationWarning) {
|
|
|
var expectedStyle = createDangerousStringForStyles(nextProp);
|
|
|
serverValue = domElement.getAttribute('style');
|
|
|
|
|
|
if (expectedStyle !== serverValue) {
|
|
|
warnForPropDifference(propKey, serverValue, expectedStyle);
|
|
|
}
|
|
|
}
|
|
|
} else if (isCustomComponentTag && !enableCustomElementPropertySupport) {
|
|
|
// $FlowFixMe - Should be inferred as not undefined.
|
|
|
extraAttributeNames.delete(propKey.toLowerCase());
|
|
|
serverValue = getValueForAttribute(domElement, propKey, nextProp);
|
|
|
|
|
|
if (nextProp !== serverValue) {
|
|
|
warnForPropDifference(propKey, serverValue, nextProp);
|
|
|
}
|
|
|
} else if (!shouldIgnoreAttribute(propKey, propertyInfo, isCustomComponentTag) && !shouldRemoveAttribute(propKey, nextProp, propertyInfo, isCustomComponentTag)) {
|
|
|
var isMismatchDueToBadCasing = false;
|
|
|
|
|
|
if (propertyInfo !== null) {
|
|
|
// $FlowFixMe - Should be inferred as not undefined.
|
|
|
extraAttributeNames.delete(propertyInfo.attributeName);
|
|
|
serverValue = getValueForProperty(domElement, propKey, nextProp, propertyInfo);
|
|
|
} else {
|
|
|
var ownNamespace = parentNamespace;
|
|
|
|
|
|
if (ownNamespace === HTML_NAMESPACE) {
|
|
|
ownNamespace = getIntrinsicNamespace(tag);
|
|
|
}
|
|
|
|
|
|
if (ownNamespace === HTML_NAMESPACE) {
|
|
|
// $FlowFixMe - Should be inferred as not undefined.
|
|
|
extraAttributeNames.delete(propKey.toLowerCase());
|
|
|
} else {
|
|
|
var standardName = getPossibleStandardName(propKey);
|
|
|
|
|
|
if (standardName !== null && standardName !== propKey) {
|
|
|
// If an SVG prop is supplied with bad casing, it will
|
|
|
// be successfully parsed from HTML, but will produce a mismatch
|
|
|
// (and would be incorrectly rendered on the client).
|
|
|
// However, we already warn about bad casing elsewhere.
|
|
|
// So we'll skip the misleading extra mismatch warning in this case.
|
|
|
isMismatchDueToBadCasing = true; // $FlowFixMe - Should be inferred as not undefined.
|
|
|
|
|
|
extraAttributeNames.delete(standardName);
|
|
|
} // $FlowFixMe - Should be inferred as not undefined.
|
|
|
|
|
|
|
|
|
extraAttributeNames.delete(propKey);
|
|
|
}
|
|
|
|
|
|
serverValue = getValueForAttribute(domElement, propKey, nextProp);
|
|
|
}
|
|
|
|
|
|
var dontWarnCustomElement = enableCustomElementPropertySupport ;
|
|
|
|
|
|
if (!dontWarnCustomElement && nextProp !== serverValue && !isMismatchDueToBadCasing) {
|
|
|
warnForPropDifference(propKey, serverValue, nextProp);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
{
|
|
|
if (shouldWarnDev) {
|
|
|
if ( // $FlowFixMe - Should be inferred as not undefined.
|
|
|
extraAttributeNames.size > 0 && rawProps[SUPPRESS_HYDRATION_WARNING] !== true) {
|
|
|
// $FlowFixMe - Should be inferred as not undefined.
|
|
|
warnForExtraAttributes(extraAttributeNames);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
switch (tag) {
|
|
|
case 'input':
|
|
|
// TODO: Make sure we check if this is still unmounted or do any clean
|
|
|
// up necessary since we never stop tracking anymore.
|
|
|
track(domElement);
|
|
|
postMountWrapper(domElement, rawProps, true);
|
|
|
break;
|
|
|
|
|
|
case 'textarea':
|
|
|
// TODO: Make sure we check if this is still unmounted or do any clean
|
|
|
// up necessary since we never stop tracking anymore.
|
|
|
track(domElement);
|
|
|
postMountWrapper$3(domElement);
|
|
|
break;
|
|
|
|
|
|
case 'select':
|
|
|
case 'option':
|
|
|
// For input and textarea we current always set the value property at
|
|
|
// post mount to force it to diverge from attributes. However, for
|
|
|
// option and select we don't quite do the same thing and select
|
|
|
// is not resilient to the DOM state changing so we don't do that here.
|
|
|
// TODO: Consider not doing this for input and textarea.
|
|
|
break;
|
|
|
|
|
|
default:
|
|
|
if (typeof rawProps.onClick === 'function') {
|
|
|
// TODO: This cast may not be sound for SVG, MathML or custom elements.
|
|
|
trapClickOnNonInteractiveElement(domElement);
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
return updatePayload;
|
|
|
}
|
|
|
function diffHydratedText(textNode, text, isConcurrentMode) {
|
|
|
var isDifferent = textNode.nodeValue !== text;
|
|
|
return isDifferent;
|
|
|
}
|
|
|
function warnForDeletedHydratableElement(parentNode, child) {
|
|
|
{
|
|
|
if (didWarnInvalidHydration) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
didWarnInvalidHydration = true;
|
|
|
|
|
|
error('Did not expect server HTML to contain a <%s> in <%s>.', child.nodeName.toLowerCase(), parentNode.nodeName.toLowerCase());
|
|
|
}
|
|
|
}
|
|
|
function warnForDeletedHydratableText(parentNode, child) {
|
|
|
{
|
|
|
if (didWarnInvalidHydration) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
didWarnInvalidHydration = true;
|
|
|
|
|
|
error('Did not expect server HTML to contain the text node "%s" in <%s>.', child.nodeValue, parentNode.nodeName.toLowerCase());
|
|
|
}
|
|
|
}
|
|
|
function warnForInsertedHydratedElement(parentNode, tag, props) {
|
|
|
{
|
|
|
if (didWarnInvalidHydration) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
didWarnInvalidHydration = true;
|
|
|
|
|
|
error('Expected server HTML to contain a matching <%s> in <%s>.', tag, parentNode.nodeName.toLowerCase());
|
|
|
}
|
|
|
}
|
|
|
function warnForInsertedHydratedText(parentNode, text) {
|
|
|
{
|
|
|
if (text === '') {
|
|
|
// We expect to insert empty text nodes since they're not represented in
|
|
|
// the HTML.
|
|
|
// TODO: Remove this special case if we can just avoid inserting empty
|
|
|
// text nodes.
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (didWarnInvalidHydration) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
didWarnInvalidHydration = true;
|
|
|
|
|
|
error('Expected server HTML to contain a matching text node for "%s" in <%s>.', text, parentNode.nodeName.toLowerCase());
|
|
|
}
|
|
|
}
|
|
|
function restoreControlledState$3(domElement, tag, props) {
|
|
|
switch (tag) {
|
|
|
case 'input':
|
|
|
restoreControlledState(domElement, props);
|
|
|
return;
|
|
|
|
|
|
case 'textarea':
|
|
|
restoreControlledState$2(domElement, props);
|
|
|
return;
|
|
|
|
|
|
case 'select':
|
|
|
restoreControlledState$1(domElement, props);
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var validateDOMNesting = function () {};
|
|
|
|
|
|
var updatedAncestorInfo = function () {};
|
|
|
|
|
|
{
|
|
|
// This validation code was written based on the HTML5 parsing spec:
|
|
|
// https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-scope
|
|
|
//
|
|
|
// Note: this does not catch all invalid nesting, nor does it try to (as it's
|
|
|
// not clear what practical benefit doing so provides); instead, we warn only
|
|
|
// for cases where the parser will give a parse tree differing from what React
|
|
|
// intended. For example, <b><div></div></b> is invalid but we don't warn
|
|
|
// because it still parses correctly; we do warn for other cases like nested
|
|
|
// <p> tags where the beginning of the second element implicitly closes the
|
|
|
// first, causing a confusing mess.
|
|
|
// https://html.spec.whatwg.org/multipage/syntax.html#special
|
|
|
var specialTags = ['address', 'applet', 'area', 'article', 'aside', 'base', 'basefont', 'bgsound', 'blockquote', 'body', 'br', 'button', 'caption', 'center', 'col', 'colgroup', 'dd', 'details', 'dir', 'div', 'dl', 'dt', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'frame', 'frameset', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'iframe', 'img', 'input', 'isindex', 'li', 'link', 'listing', 'main', 'marquee', 'menu', 'menuitem', 'meta', 'nav', 'noembed', 'noframes', 'noscript', 'object', 'ol', 'p', 'param', 'plaintext', 'pre', 'script', 'section', 'select', 'source', 'style', 'summary', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'title', 'tr', 'track', 'ul', 'wbr', 'xmp']; // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-scope
|
|
|
|
|
|
var inScopeTags = ['applet', 'caption', 'html', 'table', 'td', 'th', 'marquee', 'object', 'template', // https://html.spec.whatwg.org/multipage/syntax.html#html-integration-point
|
|
|
// TODO: Distinguish by namespace here -- for <title>, including it here
|
|
|
// errs on the side of fewer warnings
|
|
|
'foreignObject', 'desc', 'title']; // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-button-scope
|
|
|
|
|
|
var buttonScopeTags = inScopeTags.concat(['button']); // https://html.spec.whatwg.org/multipage/syntax.html#generate-implied-end-tags
|
|
|
|
|
|
var impliedEndTags = ['dd', 'dt', 'li', 'option', 'optgroup', 'p', 'rp', 'rt'];
|
|
|
var emptyAncestorInfo = {
|
|
|
current: null,
|
|
|
formTag: null,
|
|
|
aTagInScope: null,
|
|
|
buttonTagInScope: null,
|
|
|
nobrTagInScope: null,
|
|
|
pTagInButtonScope: null,
|
|
|
listItemTagAutoclosing: null,
|
|
|
dlItemTagAutoclosing: null
|
|
|
};
|
|
|
|
|
|
updatedAncestorInfo = function (oldInfo, tag) {
|
|
|
var ancestorInfo = assign({}, oldInfo || emptyAncestorInfo);
|
|
|
|
|
|
var info = {
|
|
|
tag: tag
|
|
|
};
|
|
|
|
|
|
if (inScopeTags.indexOf(tag) !== -1) {
|
|
|
ancestorInfo.aTagInScope = null;
|
|
|
ancestorInfo.buttonTagInScope = null;
|
|
|
ancestorInfo.nobrTagInScope = null;
|
|
|
}
|
|
|
|
|
|
if (buttonScopeTags.indexOf(tag) !== -1) {
|
|
|
ancestorInfo.pTagInButtonScope = null;
|
|
|
} // See rules for 'li', 'dd', 'dt' start tags in
|
|
|
// https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody
|
|
|
|
|
|
|
|
|
if (specialTags.indexOf(tag) !== -1 && tag !== 'address' && tag !== 'div' && tag !== 'p') {
|
|
|
ancestorInfo.listItemTagAutoclosing = null;
|
|
|
ancestorInfo.dlItemTagAutoclosing = null;
|
|
|
}
|
|
|
|
|
|
ancestorInfo.current = info;
|
|
|
|
|
|
if (tag === 'form') {
|
|
|
ancestorInfo.formTag = info;
|
|
|
}
|
|
|
|
|
|
if (tag === 'a') {
|
|
|
ancestorInfo.aTagInScope = info;
|
|
|
}
|
|
|
|
|
|
if (tag === 'button') {
|
|
|
ancestorInfo.buttonTagInScope = info;
|
|
|
}
|
|
|
|
|
|
if (tag === 'nobr') {
|
|
|
ancestorInfo.nobrTagInScope = info;
|
|
|
}
|
|
|
|
|
|
if (tag === 'p') {
|
|
|
ancestorInfo.pTagInButtonScope = info;
|
|
|
}
|
|
|
|
|
|
if (tag === 'li') {
|
|
|
ancestorInfo.listItemTagAutoclosing = info;
|
|
|
}
|
|
|
|
|
|
if (tag === 'dd' || tag === 'dt') {
|
|
|
ancestorInfo.dlItemTagAutoclosing = info;
|
|
|
}
|
|
|
|
|
|
return ancestorInfo;
|
|
|
};
|
|
|
/**
|
|
|
* Returns whether
|
|
|
*/
|
|
|
|
|
|
|
|
|
var isTagValidWithParent = function (tag, parentTag) {
|
|
|
// First, let's check if we're in an unusual parsing mode...
|
|
|
switch (parentTag) {
|
|
|
// https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inselect
|
|
|
case 'select':
|
|
|
return tag === 'option' || tag === 'optgroup' || tag === '#text';
|
|
|
|
|
|
case 'optgroup':
|
|
|
return tag === 'option' || tag === '#text';
|
|
|
// Strictly speaking, seeing an <option> doesn't mean we're in a <select>
|
|
|
// but
|
|
|
|
|
|
case 'option':
|
|
|
return tag === '#text';
|
|
|
// https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intd
|
|
|
// https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incaption
|
|
|
// No special behavior since these rules fall back to "in body" mode for
|
|
|
// all except special table nodes which cause bad parsing behavior anyway.
|
|
|
// https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intr
|
|
|
|
|
|
case 'tr':
|
|
|
return tag === 'th' || tag === 'td' || tag === 'style' || tag === 'script' || tag === 'template';
|
|
|
// https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intbody
|
|
|
|
|
|
case 'tbody':
|
|
|
case 'thead':
|
|
|
case 'tfoot':
|
|
|
return tag === 'tr' || tag === 'style' || tag === 'script' || tag === 'template';
|
|
|
// https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incolgroup
|
|
|
|
|
|
case 'colgroup':
|
|
|
return tag === 'col' || tag === 'template';
|
|
|
// https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intable
|
|
|
|
|
|
case 'table':
|
|
|
return tag === 'caption' || tag === 'colgroup' || tag === 'tbody' || tag === 'tfoot' || tag === 'thead' || tag === 'style' || tag === 'script' || tag === 'template';
|
|
|
// https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inhead
|
|
|
|
|
|
case 'head':
|
|
|
return tag === 'base' || tag === 'basefont' || tag === 'bgsound' || tag === 'link' || tag === 'meta' || tag === 'title' || tag === 'noscript' || tag === 'noframes' || tag === 'style' || tag === 'script' || tag === 'template';
|
|
|
// https://html.spec.whatwg.org/multipage/semantics.html#the-html-element
|
|
|
|
|
|
case 'html':
|
|
|
return tag === 'head' || tag === 'body' || tag === 'frameset';
|
|
|
|
|
|
case 'frameset':
|
|
|
return tag === 'frame';
|
|
|
|
|
|
case '#document':
|
|
|
return tag === 'html';
|
|
|
} // Probably in the "in body" parsing mode, so we outlaw only tag combos
|
|
|
// where the parsing rules cause implicit opens or closes to be added.
|
|
|
// https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody
|
|
|
|
|
|
|
|
|
switch (tag) {
|
|
|
case 'h1':
|
|
|
case 'h2':
|
|
|
case 'h3':
|
|
|
case 'h4':
|
|
|
case 'h5':
|
|
|
case 'h6':
|
|
|
return parentTag !== 'h1' && parentTag !== 'h2' && parentTag !== 'h3' && parentTag !== 'h4' && parentTag !== 'h5' && parentTag !== 'h6';
|
|
|
|
|
|
case 'rp':
|
|
|
case 'rt':
|
|
|
return impliedEndTags.indexOf(parentTag) === -1;
|
|
|
|
|
|
case 'body':
|
|
|
case 'caption':
|
|
|
case 'col':
|
|
|
case 'colgroup':
|
|
|
case 'frameset':
|
|
|
case 'frame':
|
|
|
case 'head':
|
|
|
case 'html':
|
|
|
case 'tbody':
|
|
|
case 'td':
|
|
|
case 'tfoot':
|
|
|
case 'th':
|
|
|
case 'thead':
|
|
|
case 'tr':
|
|
|
// These tags are only valid with a few parents that have special child
|
|
|
// parsing rules -- if we're down here, then none of those matched and
|
|
|
// so we allow it only if we don't know what the parent is, as all other
|
|
|
// cases are invalid.
|
|
|
return parentTag == null;
|
|
|
}
|
|
|
|
|
|
return true;
|
|
|
};
|
|
|
/**
|
|
|
* Returns whether
|
|
|
*/
|
|
|
|
|
|
|
|
|
var findInvalidAncestorForTag = function (tag, ancestorInfo) {
|
|
|
switch (tag) {
|
|
|
case 'address':
|
|
|
case 'article':
|
|
|
case 'aside':
|
|
|
case 'blockquote':
|
|
|
case 'center':
|
|
|
case 'details':
|
|
|
case 'dialog':
|
|
|
case 'dir':
|
|
|
case 'div':
|
|
|
case 'dl':
|
|
|
case 'fieldset':
|
|
|
case 'figcaption':
|
|
|
case 'figure':
|
|
|
case 'footer':
|
|
|
case 'header':
|
|
|
case 'hgroup':
|
|
|
case 'main':
|
|
|
case 'menu':
|
|
|
case 'nav':
|
|
|
case 'ol':
|
|
|
case 'p':
|
|
|
case 'section':
|
|
|
case 'summary':
|
|
|
case 'ul':
|
|
|
case 'pre':
|
|
|
case 'listing':
|
|
|
case 'table':
|
|
|
case 'hr':
|
|
|
case 'xmp':
|
|
|
case 'h1':
|
|
|
case 'h2':
|
|
|
case 'h3':
|
|
|
case 'h4':
|
|
|
case 'h5':
|
|
|
case 'h6':
|
|
|
return ancestorInfo.pTagInButtonScope;
|
|
|
|
|
|
case 'form':
|
|
|
return ancestorInfo.formTag || ancestorInfo.pTagInButtonScope;
|
|
|
|
|
|
case 'li':
|
|
|
return ancestorInfo.listItemTagAutoclosing;
|
|
|
|
|
|
case 'dd':
|
|
|
case 'dt':
|
|
|
return ancestorInfo.dlItemTagAutoclosing;
|
|
|
|
|
|
case 'button':
|
|
|
return ancestorInfo.buttonTagInScope;
|
|
|
|
|
|
case 'a':
|
|
|
// Spec says something about storing a list of markers, but it sounds
|
|
|
// equivalent to this check.
|
|
|
return ancestorInfo.aTagInScope;
|
|
|
|
|
|
case 'nobr':
|
|
|
return ancestorInfo.nobrTagInScope;
|
|
|
}
|
|
|
|
|
|
return null;
|
|
|
};
|
|
|
|
|
|
var didWarn$1 = {};
|
|
|
|
|
|
validateDOMNesting = function (childTag, childText, ancestorInfo) {
|
|
|
ancestorInfo = ancestorInfo || emptyAncestorInfo;
|
|
|
var parentInfo = ancestorInfo.current;
|
|
|
var parentTag = parentInfo && parentInfo.tag;
|
|
|
|
|
|
if (childText != null) {
|
|
|
if (childTag != null) {
|
|
|
error('validateDOMNesting: when childText is passed, childTag should be null');
|
|
|
}
|
|
|
|
|
|
childTag = '#text';
|
|
|
}
|
|
|
|
|
|
var invalidParent = isTagValidWithParent(childTag, parentTag) ? null : parentInfo;
|
|
|
var invalidAncestor = invalidParent ? null : findInvalidAncestorForTag(childTag, ancestorInfo);
|
|
|
var invalidParentOrAncestor = invalidParent || invalidAncestor;
|
|
|
|
|
|
if (!invalidParentOrAncestor) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
var ancestorTag = invalidParentOrAncestor.tag;
|
|
|
var warnKey = !!invalidParent + '|' + childTag + '|' + ancestorTag;
|
|
|
|
|
|
if (didWarn$1[warnKey]) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
didWarn$1[warnKey] = true;
|
|
|
var tagDisplayName = childTag;
|
|
|
var whitespaceInfo = '';
|
|
|
|
|
|
if (childTag === '#text') {
|
|
|
if (/\S/.test(childText)) {
|
|
|
tagDisplayName = 'Text nodes';
|
|
|
} else {
|
|
|
tagDisplayName = 'Whitespace text nodes';
|
|
|
whitespaceInfo = " Make sure you don't have any extra whitespace between tags on " + 'each line of your source code.';
|
|
|
}
|
|
|
} else {
|
|
|
tagDisplayName = '<' + childTag + '>';
|
|
|
}
|
|
|
|
|
|
if (invalidParent) {
|
|
|
var info = '';
|
|
|
|
|
|
if (ancestorTag === 'table' && childTag === 'tr') {
|
|
|
info += ' Add a <tbody>, <thead> or <tfoot> to your code to match the DOM tree generated by ' + 'the browser.';
|
|
|
}
|
|
|
|
|
|
error('validateDOMNesting(...): %s cannot appear as a child of <%s>.%s%s', tagDisplayName, ancestorTag, whitespaceInfo, info);
|
|
|
} else {
|
|
|
error('validateDOMNesting(...): %s cannot appear as a descendant of ' + '<%s>.', tagDisplayName, ancestorTag);
|
|
|
}
|
|
|
};
|
|
|
}
|
|
|
|
|
|
var SUPPRESS_HYDRATION_WARNING$1 = 'suppressHydrationWarning';
|
|
|
var SUSPENSE_START_DATA = '$';
|
|
|
var SUSPENSE_END_DATA = '/$';
|
|
|
var SUSPENSE_PENDING_START_DATA = '$?';
|
|
|
var SUSPENSE_FALLBACK_START_DATA = '$!';
|
|
|
var STYLE$1 = 'style';
|
|
|
var eventsEnabled = null;
|
|
|
var selectionInformation = null;
|
|
|
function getRootHostContext(rootContainerInstance) {
|
|
|
var type;
|
|
|
var namespace;
|
|
|
var nodeType = rootContainerInstance.nodeType;
|
|
|
|
|
|
switch (nodeType) {
|
|
|
case DOCUMENT_NODE:
|
|
|
case DOCUMENT_FRAGMENT_NODE:
|
|
|
{
|
|
|
type = nodeType === DOCUMENT_NODE ? '#document' : '#fragment';
|
|
|
var root = rootContainerInstance.documentElement;
|
|
|
namespace = root ? root.namespaceURI : getChildNamespace(null, '');
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
default:
|
|
|
{
|
|
|
var container = nodeType === COMMENT_NODE ? rootContainerInstance.parentNode : rootContainerInstance;
|
|
|
var ownNamespace = container.namespaceURI || null;
|
|
|
type = container.tagName;
|
|
|
namespace = getChildNamespace(ownNamespace, type);
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
{
|
|
|
var validatedTag = type.toLowerCase();
|
|
|
var ancestorInfo = updatedAncestorInfo(null, validatedTag);
|
|
|
return {
|
|
|
namespace: namespace,
|
|
|
ancestorInfo: ancestorInfo
|
|
|
};
|
|
|
}
|
|
|
}
|
|
|
function getChildHostContext(parentHostContext, type, rootContainerInstance) {
|
|
|
{
|
|
|
var parentHostContextDev = parentHostContext;
|
|
|
var namespace = getChildNamespace(parentHostContextDev.namespace, type);
|
|
|
var ancestorInfo = updatedAncestorInfo(parentHostContextDev.ancestorInfo, type);
|
|
|
return {
|
|
|
namespace: namespace,
|
|
|
ancestorInfo: ancestorInfo
|
|
|
};
|
|
|
}
|
|
|
}
|
|
|
function getPublicInstance(instance) {
|
|
|
return instance;
|
|
|
}
|
|
|
function prepareForCommit(containerInfo) {
|
|
|
eventsEnabled = isEnabled();
|
|
|
selectionInformation = getSelectionInformation();
|
|
|
var activeInstance = null;
|
|
|
|
|
|
setEnabled(false);
|
|
|
return activeInstance;
|
|
|
}
|
|
|
function resetAfterCommit(containerInfo) {
|
|
|
restoreSelection(selectionInformation);
|
|
|
setEnabled(eventsEnabled);
|
|
|
eventsEnabled = null;
|
|
|
selectionInformation = null;
|
|
|
}
|
|
|
function createInstance(type, props, rootContainerInstance, hostContext, internalInstanceHandle) {
|
|
|
var parentNamespace;
|
|
|
|
|
|
{
|
|
|
// TODO: take namespace into account when validating.
|
|
|
var hostContextDev = hostContext;
|
|
|
validateDOMNesting(type, null, hostContextDev.ancestorInfo);
|
|
|
|
|
|
if (typeof props.children === 'string' || typeof props.children === 'number') {
|
|
|
var string = '' + props.children;
|
|
|
var ownAncestorInfo = updatedAncestorInfo(hostContextDev.ancestorInfo, type);
|
|
|
validateDOMNesting(null, string, ownAncestorInfo);
|
|
|
}
|
|
|
|
|
|
parentNamespace = hostContextDev.namespace;
|
|
|
}
|
|
|
|
|
|
var domElement = createElement(type, props, rootContainerInstance, parentNamespace);
|
|
|
precacheFiberNode(internalInstanceHandle, domElement);
|
|
|
updateFiberProps(domElement, props);
|
|
|
return domElement;
|
|
|
}
|
|
|
function appendInitialChild(parentInstance, child) {
|
|
|
parentInstance.appendChild(child);
|
|
|
}
|
|
|
function finalizeInitialChildren(domElement, type, props, rootContainerInstance, hostContext) {
|
|
|
setInitialProperties(domElement, type, props, rootContainerInstance);
|
|
|
|
|
|
switch (type) {
|
|
|
case 'button':
|
|
|
case 'input':
|
|
|
case 'select':
|
|
|
case 'textarea':
|
|
|
return !!props.autoFocus;
|
|
|
|
|
|
case 'img':
|
|
|
return true;
|
|
|
|
|
|
default:
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
function prepareUpdate(domElement, type, oldProps, newProps, rootContainerInstance, hostContext) {
|
|
|
{
|
|
|
var hostContextDev = hostContext;
|
|
|
|
|
|
if (typeof newProps.children !== typeof oldProps.children && (typeof newProps.children === 'string' || typeof newProps.children === 'number')) {
|
|
|
var string = '' + newProps.children;
|
|
|
var ownAncestorInfo = updatedAncestorInfo(hostContextDev.ancestorInfo, type);
|
|
|
validateDOMNesting(null, string, ownAncestorInfo);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return diffProperties(domElement, type, oldProps, newProps);
|
|
|
}
|
|
|
function shouldSetTextContent(type, props) {
|
|
|
return type === 'textarea' || type === 'noscript' || typeof props.children === 'string' || typeof props.children === 'number' || typeof props.dangerouslySetInnerHTML === 'object' && props.dangerouslySetInnerHTML !== null && props.dangerouslySetInnerHTML.__html != null;
|
|
|
}
|
|
|
function createTextInstance(text, rootContainerInstance, hostContext, internalInstanceHandle) {
|
|
|
{
|
|
|
var hostContextDev = hostContext;
|
|
|
validateDOMNesting(null, text, hostContextDev.ancestorInfo);
|
|
|
}
|
|
|
|
|
|
var textNode = createTextNode(text, rootContainerInstance);
|
|
|
precacheFiberNode(internalInstanceHandle, textNode);
|
|
|
return textNode;
|
|
|
}
|
|
|
function getCurrentEventPriority() {
|
|
|
var currentEvent = window.event;
|
|
|
|
|
|
if (currentEvent === undefined) {
|
|
|
return DefaultEventPriority;
|
|
|
}
|
|
|
|
|
|
return getEventPriority(currentEvent.type);
|
|
|
}
|
|
|
// if a component just imports ReactDOM (e.g. for findDOMNode).
|
|
|
// Some environments might not have setTimeout or clearTimeout.
|
|
|
|
|
|
var scheduleTimeout = typeof setTimeout === 'function' ? setTimeout : undefined;
|
|
|
var cancelTimeout = typeof clearTimeout === 'function' ? clearTimeout : undefined;
|
|
|
var noTimeout = -1;
|
|
|
var localPromise = typeof Promise === 'function' ? Promise : undefined; // -------------------
|
|
|
var scheduleMicrotask = typeof queueMicrotask === 'function' ? queueMicrotask : typeof localPromise !== 'undefined' ? function (callback) {
|
|
|
return localPromise.resolve(null).then(callback).catch(handleErrorInNextTick);
|
|
|
} : scheduleTimeout; // TODO: Determine the best fallback here.
|
|
|
|
|
|
function handleErrorInNextTick(error) {
|
|
|
setTimeout(function () {
|
|
|
throw error;
|
|
|
});
|
|
|
} // -------------------
|
|
|
function commitMount(domElement, type, newProps, internalInstanceHandle) {
|
|
|
// Despite the naming that might imply otherwise, this method only
|
|
|
// fires if there is an `Update` effect scheduled during mounting.
|
|
|
// This happens if `finalizeInitialChildren` returns `true` (which it
|
|
|
// does to implement the `autoFocus` attribute on the client). But
|
|
|
// there are also other cases when this might happen (such as patching
|
|
|
// up text content during hydration mismatch). So we'll check this again.
|
|
|
switch (type) {
|
|
|
case 'button':
|
|
|
case 'input':
|
|
|
case 'select':
|
|
|
case 'textarea':
|
|
|
if (newProps.autoFocus) {
|
|
|
domElement.focus();
|
|
|
}
|
|
|
|
|
|
return;
|
|
|
|
|
|
case 'img':
|
|
|
{
|
|
|
if (newProps.src) {
|
|
|
domElement.src = newProps.src;
|
|
|
}
|
|
|
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
function commitUpdate(domElement, updatePayload, type, oldProps, newProps, internalInstanceHandle) {
|
|
|
// Apply the diff to the DOM node.
|
|
|
updateProperties(domElement, updatePayload, type, oldProps, newProps); // Update the props handle so that we know which props are the ones with
|
|
|
// with current event handlers.
|
|
|
|
|
|
updateFiberProps(domElement, newProps);
|
|
|
}
|
|
|
function resetTextContent(domElement) {
|
|
|
setTextContent(domElement, '');
|
|
|
}
|
|
|
function commitTextUpdate(textInstance, oldText, newText) {
|
|
|
textInstance.nodeValue = newText;
|
|
|
}
|
|
|
function appendChild(parentInstance, child) {
|
|
|
parentInstance.appendChild(child);
|
|
|
}
|
|
|
function appendChildToContainer(container, child) {
|
|
|
var parentNode;
|
|
|
|
|
|
if (container.nodeType === COMMENT_NODE) {
|
|
|
parentNode = container.parentNode;
|
|
|
parentNode.insertBefore(child, container);
|
|
|
} else {
|
|
|
parentNode = container;
|
|
|
parentNode.appendChild(child);
|
|
|
} // This container might be used for a portal.
|
|
|
// If something inside a portal is clicked, that click should bubble
|
|
|
// through the React tree. However, on Mobile Safari the click would
|
|
|
// never bubble through the *DOM* tree unless an ancestor with onclick
|
|
|
// event exists. So we wouldn't see it and dispatch it.
|
|
|
// This is why we ensure that non React root containers have inline onclick
|
|
|
// defined.
|
|
|
// https://github.com/facebook/react/issues/11918
|
|
|
|
|
|
|
|
|
var reactRootContainer = container._reactRootContainer;
|
|
|
|
|
|
if ((reactRootContainer === null || reactRootContainer === undefined) && parentNode.onclick === null) {
|
|
|
// TODO: This cast may not be sound for SVG, MathML or custom elements.
|
|
|
trapClickOnNonInteractiveElement(parentNode);
|
|
|
}
|
|
|
}
|
|
|
function insertBefore(parentInstance, child, beforeChild) {
|
|
|
parentInstance.insertBefore(child, beforeChild);
|
|
|
}
|
|
|
function insertInContainerBefore(container, child, beforeChild) {
|
|
|
if (container.nodeType === COMMENT_NODE) {
|
|
|
container.parentNode.insertBefore(child, beforeChild);
|
|
|
} else {
|
|
|
container.insertBefore(child, beforeChild);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function removeChild(parentInstance, child) {
|
|
|
parentInstance.removeChild(child);
|
|
|
}
|
|
|
function removeChildFromContainer(container, child) {
|
|
|
if (container.nodeType === COMMENT_NODE) {
|
|
|
container.parentNode.removeChild(child);
|
|
|
} else {
|
|
|
container.removeChild(child);
|
|
|
}
|
|
|
}
|
|
|
function clearSuspenseBoundary(parentInstance, suspenseInstance) {
|
|
|
var node = suspenseInstance; // Delete all nodes within this suspense boundary.
|
|
|
// There might be nested nodes so we need to keep track of how
|
|
|
// deep we are and only break out when we're back on top.
|
|
|
|
|
|
var depth = 0;
|
|
|
|
|
|
do {
|
|
|
var nextNode = node.nextSibling;
|
|
|
parentInstance.removeChild(node);
|
|
|
|
|
|
if (nextNode && nextNode.nodeType === COMMENT_NODE) {
|
|
|
var data = nextNode.data;
|
|
|
|
|
|
if (data === SUSPENSE_END_DATA) {
|
|
|
if (depth === 0) {
|
|
|
parentInstance.removeChild(nextNode); // Retry if any event replaying was blocked on this.
|
|
|
|
|
|
retryIfBlockedOn(suspenseInstance);
|
|
|
return;
|
|
|
} else {
|
|
|
depth--;
|
|
|
}
|
|
|
} else if (data === SUSPENSE_START_DATA || data === SUSPENSE_PENDING_START_DATA || data === SUSPENSE_FALLBACK_START_DATA) {
|
|
|
depth++;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
node = nextNode;
|
|
|
} while (node); // TODO: Warn, we didn't find the end comment boundary.
|
|
|
// Retry if any event replaying was blocked on this.
|
|
|
|
|
|
|
|
|
retryIfBlockedOn(suspenseInstance);
|
|
|
}
|
|
|
function clearSuspenseBoundaryFromContainer(container, suspenseInstance) {
|
|
|
if (container.nodeType === COMMENT_NODE) {
|
|
|
clearSuspenseBoundary(container.parentNode, suspenseInstance);
|
|
|
} else if (container.nodeType === ELEMENT_NODE) {
|
|
|
clearSuspenseBoundary(container, suspenseInstance);
|
|
|
} // Retry if any event replaying was blocked on this.
|
|
|
|
|
|
|
|
|
retryIfBlockedOn(container);
|
|
|
}
|
|
|
function hideInstance(instance) {
|
|
|
// TODO: Does this work for all element types? What about MathML? Should we
|
|
|
// pass host context to this method?
|
|
|
instance = instance;
|
|
|
var style = instance.style;
|
|
|
|
|
|
if (typeof style.setProperty === 'function') {
|
|
|
style.setProperty('display', 'none', 'important');
|
|
|
} else {
|
|
|
style.display = 'none';
|
|
|
}
|
|
|
}
|
|
|
function hideTextInstance(textInstance) {
|
|
|
textInstance.nodeValue = '';
|
|
|
}
|
|
|
function unhideInstance(instance, props) {
|
|
|
instance = instance;
|
|
|
var styleProp = props[STYLE$1];
|
|
|
var display = styleProp !== undefined && styleProp !== null && styleProp.hasOwnProperty('display') ? styleProp.display : null;
|
|
|
instance.style.display = dangerousStyleValue('display', display);
|
|
|
}
|
|
|
function unhideTextInstance(textInstance, text) {
|
|
|
textInstance.nodeValue = text;
|
|
|
}
|
|
|
function clearContainer(container) {
|
|
|
if (container.nodeType === ELEMENT_NODE) {
|
|
|
container.textContent = '';
|
|
|
} else if (container.nodeType === DOCUMENT_NODE) {
|
|
|
if (container.documentElement) {
|
|
|
container.removeChild(container.documentElement);
|
|
|
}
|
|
|
}
|
|
|
} // -------------------
|
|
|
function canHydrateInstance(instance, type, props) {
|
|
|
if (instance.nodeType !== ELEMENT_NODE || type.toLowerCase() !== instance.nodeName.toLowerCase()) {
|
|
|
return null;
|
|
|
} // This has now been refined to an element node.
|
|
|
|
|
|
|
|
|
return instance;
|
|
|
}
|
|
|
function canHydrateTextInstance(instance, text) {
|
|
|
if (text === '' || instance.nodeType !== TEXT_NODE) {
|
|
|
// Empty strings are not parsed by HTML so there won't be a correct match here.
|
|
|
return null;
|
|
|
} // This has now been refined to a text node.
|
|
|
|
|
|
|
|
|
return instance;
|
|
|
}
|
|
|
function canHydrateSuspenseInstance(instance) {
|
|
|
if (instance.nodeType !== COMMENT_NODE) {
|
|
|
// Empty strings are not parsed by HTML so there won't be a correct match here.
|
|
|
return null;
|
|
|
} // This has now been refined to a suspense node.
|
|
|
|
|
|
|
|
|
return instance;
|
|
|
}
|
|
|
function isSuspenseInstancePending(instance) {
|
|
|
return instance.data === SUSPENSE_PENDING_START_DATA;
|
|
|
}
|
|
|
function isSuspenseInstanceFallback(instance) {
|
|
|
return instance.data === SUSPENSE_FALLBACK_START_DATA;
|
|
|
}
|
|
|
function getSuspenseInstanceFallbackErrorDetails(instance) {
|
|
|
var dataset = instance.nextSibling && instance.nextSibling.dataset;
|
|
|
var digest, message, stack;
|
|
|
|
|
|
if (dataset) {
|
|
|
digest = dataset.dgst;
|
|
|
|
|
|
{
|
|
|
message = dataset.msg;
|
|
|
stack = dataset.stck;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
{
|
|
|
return {
|
|
|
message: message,
|
|
|
digest: digest,
|
|
|
stack: stack
|
|
|
};
|
|
|
} // let value = {message: undefined, hash: undefined};
|
|
|
// const nextSibling = instance.nextSibling;
|
|
|
// if (nextSibling) {
|
|
|
// const dataset = ((nextSibling: any): HTMLTemplateElement).dataset;
|
|
|
// value.message = dataset.msg;
|
|
|
// value.hash = dataset.hash;
|
|
|
// if (true) {
|
|
|
// value.stack = dataset.stack;
|
|
|
// }
|
|
|
// }
|
|
|
// return value;
|
|
|
|
|
|
}
|
|
|
function registerSuspenseInstanceRetry(instance, callback) {
|
|
|
instance._reactRetry = callback;
|
|
|
}
|
|
|
|
|
|
function getNextHydratable(node) {
|
|
|
// Skip non-hydratable nodes.
|
|
|
for (; node != null; node = node.nextSibling) {
|
|
|
var nodeType = node.nodeType;
|
|
|
|
|
|
if (nodeType === ELEMENT_NODE || nodeType === TEXT_NODE) {
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
if (nodeType === COMMENT_NODE) {
|
|
|
var nodeData = node.data;
|
|
|
|
|
|
if (nodeData === SUSPENSE_START_DATA || nodeData === SUSPENSE_FALLBACK_START_DATA || nodeData === SUSPENSE_PENDING_START_DATA) {
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
if (nodeData === SUSPENSE_END_DATA) {
|
|
|
return null;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return node;
|
|
|
}
|
|
|
|
|
|
function getNextHydratableSibling(instance) {
|
|
|
return getNextHydratable(instance.nextSibling);
|
|
|
}
|
|
|
function getFirstHydratableChild(parentInstance) {
|
|
|
return getNextHydratable(parentInstance.firstChild);
|
|
|
}
|
|
|
function getFirstHydratableChildWithinContainer(parentContainer) {
|
|
|
return getNextHydratable(parentContainer.firstChild);
|
|
|
}
|
|
|
function getFirstHydratableChildWithinSuspenseInstance(parentInstance) {
|
|
|
return getNextHydratable(parentInstance.nextSibling);
|
|
|
}
|
|
|
function hydrateInstance(instance, type, props, rootContainerInstance, hostContext, internalInstanceHandle, shouldWarnDev) {
|
|
|
precacheFiberNode(internalInstanceHandle, instance); // TODO: Possibly defer this until the commit phase where all the events
|
|
|
// get attached.
|
|
|
|
|
|
updateFiberProps(instance, props);
|
|
|
var parentNamespace;
|
|
|
|
|
|
{
|
|
|
var hostContextDev = hostContext;
|
|
|
parentNamespace = hostContextDev.namespace;
|
|
|
} // TODO: Temporary hack to check if we're in a concurrent root. We can delete
|
|
|
// when the legacy root API is removed.
|
|
|
|
|
|
|
|
|
var isConcurrentMode = (internalInstanceHandle.mode & ConcurrentMode) !== NoMode;
|
|
|
return diffHydratedProperties(instance, type, props, parentNamespace, rootContainerInstance, isConcurrentMode, shouldWarnDev);
|
|
|
}
|
|
|
function hydrateTextInstance(textInstance, text, internalInstanceHandle, shouldWarnDev) {
|
|
|
precacheFiberNode(internalInstanceHandle, textInstance); // TODO: Temporary hack to check if we're in a concurrent root. We can delete
|
|
|
// when the legacy root API is removed.
|
|
|
|
|
|
var isConcurrentMode = (internalInstanceHandle.mode & ConcurrentMode) !== NoMode;
|
|
|
return diffHydratedText(textInstance, text);
|
|
|
}
|
|
|
function hydrateSuspenseInstance(suspenseInstance, internalInstanceHandle) {
|
|
|
precacheFiberNode(internalInstanceHandle, suspenseInstance);
|
|
|
}
|
|
|
function getNextHydratableInstanceAfterSuspenseInstance(suspenseInstance) {
|
|
|
var node = suspenseInstance.nextSibling; // Skip past all nodes within this suspense boundary.
|
|
|
// There might be nested nodes so we need to keep track of how
|
|
|
// deep we are and only break out when we're back on top.
|
|
|
|
|
|
var depth = 0;
|
|
|
|
|
|
while (node) {
|
|
|
if (node.nodeType === COMMENT_NODE) {
|
|
|
var data = node.data;
|
|
|
|
|
|
if (data === SUSPENSE_END_DATA) {
|
|
|
if (depth === 0) {
|
|
|
return getNextHydratableSibling(node);
|
|
|
} else {
|
|
|
depth--;
|
|
|
}
|
|
|
} else if (data === SUSPENSE_START_DATA || data === SUSPENSE_FALLBACK_START_DATA || data === SUSPENSE_PENDING_START_DATA) {
|
|
|
depth++;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
node = node.nextSibling;
|
|
|
} // TODO: Warn, we didn't find the end comment boundary.
|
|
|
|
|
|
|
|
|
return null;
|
|
|
} // Returns the SuspenseInstance if this node is a direct child of a
|
|
|
// SuspenseInstance. I.e. if its previous sibling is a Comment with
|
|
|
// SUSPENSE_x_START_DATA. Otherwise, null.
|
|
|
|
|
|
function getParentSuspenseInstance(targetInstance) {
|
|
|
var node = targetInstance.previousSibling; // Skip past all nodes within this suspense boundary.
|
|
|
// There might be nested nodes so we need to keep track of how
|
|
|
// deep we are and only break out when we're back on top.
|
|
|
|
|
|
var depth = 0;
|
|
|
|
|
|
while (node) {
|
|
|
if (node.nodeType === COMMENT_NODE) {
|
|
|
var data = node.data;
|
|
|
|
|
|
if (data === SUSPENSE_START_DATA || data === SUSPENSE_FALLBACK_START_DATA || data === SUSPENSE_PENDING_START_DATA) {
|
|
|
if (depth === 0) {
|
|
|
return node;
|
|
|
} else {
|
|
|
depth--;
|
|
|
}
|
|
|
} else if (data === SUSPENSE_END_DATA) {
|
|
|
depth++;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
node = node.previousSibling;
|
|
|
}
|
|
|
|
|
|
return null;
|
|
|
}
|
|
|
function commitHydratedContainer(container) {
|
|
|
// Retry if any event replaying was blocked on this.
|
|
|
retryIfBlockedOn(container);
|
|
|
}
|
|
|
function commitHydratedSuspenseInstance(suspenseInstance) {
|
|
|
// Retry if any event replaying was blocked on this.
|
|
|
retryIfBlockedOn(suspenseInstance);
|
|
|
}
|
|
|
function shouldDeleteUnhydratedTailInstances(parentType) {
|
|
|
return parentType !== 'head' && parentType !== 'body';
|
|
|
}
|
|
|
function didNotMatchHydratedContainerTextInstance(parentContainer, textInstance, text, isConcurrentMode) {
|
|
|
var shouldWarnDev = true;
|
|
|
checkForUnmatchedText(textInstance.nodeValue, text, isConcurrentMode, shouldWarnDev);
|
|
|
}
|
|
|
function didNotMatchHydratedTextInstance(parentType, parentProps, parentInstance, textInstance, text, isConcurrentMode) {
|
|
|
if (parentProps[SUPPRESS_HYDRATION_WARNING$1] !== true) {
|
|
|
var shouldWarnDev = true;
|
|
|
checkForUnmatchedText(textInstance.nodeValue, text, isConcurrentMode, shouldWarnDev);
|
|
|
}
|
|
|
}
|
|
|
function didNotHydrateInstanceWithinContainer(parentContainer, instance) {
|
|
|
{
|
|
|
if (instance.nodeType === ELEMENT_NODE) {
|
|
|
warnForDeletedHydratableElement(parentContainer, instance);
|
|
|
} else if (instance.nodeType === COMMENT_NODE) ; else {
|
|
|
warnForDeletedHydratableText(parentContainer, instance);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
function didNotHydrateInstanceWithinSuspenseInstance(parentInstance, instance) {
|
|
|
{
|
|
|
// $FlowFixMe: Only Element or Document can be parent nodes.
|
|
|
var parentNode = parentInstance.parentNode;
|
|
|
|
|
|
if (parentNode !== null) {
|
|
|
if (instance.nodeType === ELEMENT_NODE) {
|
|
|
warnForDeletedHydratableElement(parentNode, instance);
|
|
|
} else if (instance.nodeType === COMMENT_NODE) ; else {
|
|
|
warnForDeletedHydratableText(parentNode, instance);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
function didNotHydrateInstance(parentType, parentProps, parentInstance, instance, isConcurrentMode) {
|
|
|
{
|
|
|
if (isConcurrentMode || parentProps[SUPPRESS_HYDRATION_WARNING$1] !== true) {
|
|
|
if (instance.nodeType === ELEMENT_NODE) {
|
|
|
warnForDeletedHydratableElement(parentInstance, instance);
|
|
|
} else if (instance.nodeType === COMMENT_NODE) ; else {
|
|
|
warnForDeletedHydratableText(parentInstance, instance);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
function didNotFindHydratableInstanceWithinContainer(parentContainer, type, props) {
|
|
|
{
|
|
|
warnForInsertedHydratedElement(parentContainer, type);
|
|
|
}
|
|
|
}
|
|
|
function didNotFindHydratableTextInstanceWithinContainer(parentContainer, text) {
|
|
|
{
|
|
|
warnForInsertedHydratedText(parentContainer, text);
|
|
|
}
|
|
|
}
|
|
|
function didNotFindHydratableInstanceWithinSuspenseInstance(parentInstance, type, props) {
|
|
|
{
|
|
|
// $FlowFixMe: Only Element or Document can be parent nodes.
|
|
|
var parentNode = parentInstance.parentNode;
|
|
|
if (parentNode !== null) warnForInsertedHydratedElement(parentNode, type);
|
|
|
}
|
|
|
}
|
|
|
function didNotFindHydratableTextInstanceWithinSuspenseInstance(parentInstance, text) {
|
|
|
{
|
|
|
// $FlowFixMe: Only Element or Document can be parent nodes.
|
|
|
var parentNode = parentInstance.parentNode;
|
|
|
if (parentNode !== null) warnForInsertedHydratedText(parentNode, text);
|
|
|
}
|
|
|
}
|
|
|
function didNotFindHydratableInstance(parentType, parentProps, parentInstance, type, props, isConcurrentMode) {
|
|
|
{
|
|
|
if (isConcurrentMode || parentProps[SUPPRESS_HYDRATION_WARNING$1] !== true) {
|
|
|
warnForInsertedHydratedElement(parentInstance, type);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
function didNotFindHydratableTextInstance(parentType, parentProps, parentInstance, text, isConcurrentMode) {
|
|
|
{
|
|
|
if (isConcurrentMode || parentProps[SUPPRESS_HYDRATION_WARNING$1] !== true) {
|
|
|
warnForInsertedHydratedText(parentInstance, text);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
function errorHydratingContainer(parentContainer) {
|
|
|
{
|
|
|
// TODO: This gets logged by onRecoverableError, too, so we should be
|
|
|
// able to remove it.
|
|
|
error('An error occurred during hydration. The server HTML was replaced with client content in <%s>.', parentContainer.nodeName.toLowerCase());
|
|
|
}
|
|
|
}
|
|
|
function preparePortalMount(portalInstance) {
|
|
|
listenToAllSupportedEvents(portalInstance);
|
|
|
}
|
|
|
|
|
|
var randomKey = Math.random().toString(36).slice(2);
|
|
|
var internalInstanceKey = '__reactFiber$' + randomKey;
|
|
|
var internalPropsKey = '__reactProps$' + randomKey;
|
|
|
var internalContainerInstanceKey = '__reactContainer$' + randomKey;
|
|
|
var internalEventHandlersKey = '__reactEvents$' + randomKey;
|
|
|
var internalEventHandlerListenersKey = '__reactListeners$' + randomKey;
|
|
|
var internalEventHandlesSetKey = '__reactHandles$' + randomKey;
|
|
|
function detachDeletedInstance(node) {
|
|
|
// TODO: This function is only called on host components. I don't think all of
|
|
|
// these fields are relevant.
|
|
|
delete node[internalInstanceKey];
|
|
|
delete node[internalPropsKey];
|
|
|
delete node[internalEventHandlersKey];
|
|
|
delete node[internalEventHandlerListenersKey];
|
|
|
delete node[internalEventHandlesSetKey];
|
|
|
}
|
|
|
function precacheFiberNode(hostInst, node) {
|
|
|
node[internalInstanceKey] = hostInst;
|
|
|
}
|
|
|
function markContainerAsRoot(hostRoot, node) {
|
|
|
node[internalContainerInstanceKey] = hostRoot;
|
|
|
}
|
|
|
function unmarkContainerAsRoot(node) {
|
|
|
node[internalContainerInstanceKey] = null;
|
|
|
}
|
|
|
function isContainerMarkedAsRoot(node) {
|
|
|
return !!node[internalContainerInstanceKey];
|
|
|
} // Given a DOM node, return the closest HostComponent or HostText fiber ancestor.
|
|
|
// If the target node is part of a hydrated or not yet rendered subtree, then
|
|
|
// this may also return a SuspenseComponent or HostRoot to indicate that.
|
|
|
// Conceptually the HostRoot fiber is a child of the Container node. So if you
|
|
|
// pass the Container node as the targetNode, you will not actually get the
|
|
|
// HostRoot back. To get to the HostRoot, you need to pass a child of it.
|
|
|
// The same thing applies to Suspense boundaries.
|
|
|
|
|
|
function getClosestInstanceFromNode(targetNode) {
|
|
|
var targetInst = targetNode[internalInstanceKey];
|
|
|
|
|
|
if (targetInst) {
|
|
|
// Don't return HostRoot or SuspenseComponent here.
|
|
|
return targetInst;
|
|
|
} // If the direct event target isn't a React owned DOM node, we need to look
|
|
|
// to see if one of its parents is a React owned DOM node.
|
|
|
|
|
|
|
|
|
var parentNode = targetNode.parentNode;
|
|
|
|
|
|
while (parentNode) {
|
|
|
// We'll check if this is a container root that could include
|
|
|
// React nodes in the future. We need to check this first because
|
|
|
// if we're a child of a dehydrated container, we need to first
|
|
|
// find that inner container before moving on to finding the parent
|
|
|
// instance. Note that we don't check this field on the targetNode
|
|
|
// itself because the fibers are conceptually between the container
|
|
|
// node and the first child. It isn't surrounding the container node.
|
|
|
// If it's not a container, we check if it's an instance.
|
|
|
targetInst = parentNode[internalContainerInstanceKey] || parentNode[internalInstanceKey];
|
|
|
|
|
|
if (targetInst) {
|
|
|
// Since this wasn't the direct target of the event, we might have
|
|
|
// stepped past dehydrated DOM nodes to get here. However they could
|
|
|
// also have been non-React nodes. We need to answer which one.
|
|
|
// If we the instance doesn't have any children, then there can't be
|
|
|
// a nested suspense boundary within it. So we can use this as a fast
|
|
|
// bailout. Most of the time, when people add non-React children to
|
|
|
// the tree, it is using a ref to a child-less DOM node.
|
|
|
// Normally we'd only need to check one of the fibers because if it
|
|
|
// has ever gone from having children to deleting them or vice versa
|
|
|
// it would have deleted the dehydrated boundary nested inside already.
|
|
|
// However, since the HostRoot starts out with an alternate it might
|
|
|
// have one on the alternate so we need to check in case this was a
|
|
|
// root.
|
|
|
var alternate = targetInst.alternate;
|
|
|
|
|
|
if (targetInst.child !== null || alternate !== null && alternate.child !== null) {
|
|
|
// Next we need to figure out if the node that skipped past is
|
|
|
// nested within a dehydrated boundary and if so, which one.
|
|
|
var suspenseInstance = getParentSuspenseInstance(targetNode);
|
|
|
|
|
|
while (suspenseInstance !== null) {
|
|
|
// We found a suspense instance. That means that we haven't
|
|
|
// hydrated it yet. Even though we leave the comments in the
|
|
|
// DOM after hydrating, and there are boundaries in the DOM
|
|
|
// that could already be hydrated, we wouldn't have found them
|
|
|
// through this pass since if the target is hydrated it would
|
|
|
// have had an internalInstanceKey on it.
|
|
|
// Let's get the fiber associated with the SuspenseComponent
|
|
|
// as the deepest instance.
|
|
|
var targetSuspenseInst = suspenseInstance[internalInstanceKey];
|
|
|
|
|
|
if (targetSuspenseInst) {
|
|
|
return targetSuspenseInst;
|
|
|
} // If we don't find a Fiber on the comment, it might be because
|
|
|
// we haven't gotten to hydrate it yet. There might still be a
|
|
|
// parent boundary that hasn't above this one so we need to find
|
|
|
// the outer most that is known.
|
|
|
|
|
|
|
|
|
suspenseInstance = getParentSuspenseInstance(suspenseInstance); // If we don't find one, then that should mean that the parent
|
|
|
// host component also hasn't hydrated yet. We can return it
|
|
|
// below since it will bail out on the isMounted check later.
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return targetInst;
|
|
|
}
|
|
|
|
|
|
targetNode = parentNode;
|
|
|
parentNode = targetNode.parentNode;
|
|
|
}
|
|
|
|
|
|
return null;
|
|
|
}
|
|
|
/**
|
|
|
* Given a DOM node, return the ReactDOMComponent or ReactDOMTextComponent
|
|
|
* instance, or null if the node was not rendered by this React.
|
|
|
*/
|
|
|
|
|
|
function getInstanceFromNode(node) {
|
|
|
var inst = node[internalInstanceKey] || node[internalContainerInstanceKey];
|
|
|
|
|
|
if (inst) {
|
|
|
if (inst.tag === HostComponent || inst.tag === HostText || inst.tag === SuspenseComponent || inst.tag === HostRoot) {
|
|
|
return inst;
|
|
|
} else {
|
|
|
return null;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return null;
|
|
|
}
|
|
|
/**
|
|
|
* Given a ReactDOMComponent or ReactDOMTextComponent, return the corresponding
|
|
|
* DOM node.
|
|
|
*/
|
|
|
|
|
|
function getNodeFromInstance(inst) {
|
|
|
if (inst.tag === HostComponent || inst.tag === HostText) {
|
|
|
// In Fiber this, is just the state node right now. We assume it will be
|
|
|
// a host component or host text.
|
|
|
return inst.stateNode;
|
|
|
} // Without this first invariant, passing a non-DOM-component triggers the next
|
|
|
// invariant for a missing parent, which is super confusing.
|
|
|
|
|
|
|
|
|
throw new Error('getNodeFromInstance: Invalid argument.');
|
|
|
}
|
|
|
function getFiberCurrentPropsFromNode(node) {
|
|
|
return node[internalPropsKey] || null;
|
|
|
}
|
|
|
function updateFiberProps(node, props) {
|
|
|
node[internalPropsKey] = props;
|
|
|
}
|
|
|
function getEventListenerSet(node) {
|
|
|
var elementListenerSet = node[internalEventHandlersKey];
|
|
|
|
|
|
if (elementListenerSet === undefined) {
|
|
|
elementListenerSet = node[internalEventHandlersKey] = new Set();
|
|
|
}
|
|
|
|
|
|
return elementListenerSet;
|
|
|
}
|
|
|
|
|
|
var loggedTypeFailures = {};
|
|
|
var ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;
|
|
|
|
|
|
function setCurrentlyValidatingElement(element) {
|
|
|
{
|
|
|
if (element) {
|
|
|
var owner = element._owner;
|
|
|
var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);
|
|
|
ReactDebugCurrentFrame$1.setExtraStackFrame(stack);
|
|
|
} else {
|
|
|
ReactDebugCurrentFrame$1.setExtraStackFrame(null);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function checkPropTypes(typeSpecs, values, location, componentName, element) {
|
|
|
{
|
|
|
// $FlowFixMe This is okay but Flow doesn't know it.
|
|
|
var has = Function.call.bind(hasOwnProperty);
|
|
|
|
|
|
for (var typeSpecName in typeSpecs) {
|
|
|
if (has(typeSpecs, typeSpecName)) {
|
|
|
var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to
|
|
|
// fail the render phase where it didn't fail before. So we log it.
|
|
|
// After these have been cleaned up, we'll let them throw.
|
|
|
|
|
|
try {
|
|
|
// This is intentionally an invariant that gets caught. It's the same
|
|
|
// behavior as without this statement except with a better message.
|
|
|
if (typeof typeSpecs[typeSpecName] !== 'function') {
|
|
|
// eslint-disable-next-line react-internal/prod-error-codes
|
|
|
var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.');
|
|
|
err.name = 'Invariant Violation';
|
|
|
throw err;
|
|
|
}
|
|
|
|
|
|
error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED');
|
|
|
} catch (ex) {
|
|
|
error$1 = ex;
|
|
|
}
|
|
|
|
|
|
if (error$1 && !(error$1 instanceof Error)) {
|
|
|
setCurrentlyValidatingElement(element);
|
|
|
|
|
|
error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1);
|
|
|
|
|
|
setCurrentlyValidatingElement(null);
|
|
|
}
|
|
|
|
|
|
if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) {
|
|
|
// Only monitor this failure once because there tends to be a lot of the
|
|
|
// same error.
|
|
|
loggedTypeFailures[error$1.message] = true;
|
|
|
setCurrentlyValidatingElement(element);
|
|
|
|
|
|
error('Failed %s type: %s', location, error$1.message);
|
|
|
|
|
|
setCurrentlyValidatingElement(null);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var valueStack = [];
|
|
|
var fiberStack;
|
|
|
|
|
|
{
|
|
|
fiberStack = [];
|
|
|
}
|
|
|
|
|
|
var index = -1;
|
|
|
|
|
|
function createCursor(defaultValue) {
|
|
|
return {
|
|
|
current: defaultValue
|
|
|
};
|
|
|
}
|
|
|
|
|
|
function pop(cursor, fiber) {
|
|
|
if (index < 0) {
|
|
|
{
|
|
|
error('Unexpected pop.');
|
|
|
}
|
|
|
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
{
|
|
|
if (fiber !== fiberStack[index]) {
|
|
|
error('Unexpected Fiber popped.');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
cursor.current = valueStack[index];
|
|
|
valueStack[index] = null;
|
|
|
|
|
|
{
|
|
|
fiberStack[index] = null;
|
|
|
}
|
|
|
|
|
|
index--;
|
|
|
}
|
|
|
|
|
|
function push(cursor, value, fiber) {
|
|
|
index++;
|
|
|
valueStack[index] = cursor.current;
|
|
|
|
|
|
{
|
|
|
fiberStack[index] = fiber;
|
|
|
}
|
|
|
|
|
|
cursor.current = value;
|
|
|
}
|
|
|
|
|
|
var warnedAboutMissingGetChildContext;
|
|
|
|
|
|
{
|
|
|
warnedAboutMissingGetChildContext = {};
|
|
|
}
|
|
|
|
|
|
var emptyContextObject = {};
|
|
|
|
|
|
{
|
|
|
Object.freeze(emptyContextObject);
|
|
|
} // A cursor to the current merged context object on the stack.
|
|
|
|
|
|
|
|
|
var contextStackCursor = createCursor(emptyContextObject); // A cursor to a boolean indicating whether the context has changed.
|
|
|
|
|
|
var didPerformWorkStackCursor = createCursor(false); // Keep track of the previous context object that was on the stack.
|
|
|
// We use this to get access to the parent context after we have already
|
|
|
// pushed the next context provider, and now need to merge their contexts.
|
|
|
|
|
|
var previousContext = emptyContextObject;
|
|
|
|
|
|
function getUnmaskedContext(workInProgress, Component, didPushOwnContextIfProvider) {
|
|
|
{
|
|
|
if (didPushOwnContextIfProvider && isContextProvider(Component)) {
|
|
|
// If the fiber is a context provider itself, when we read its context
|
|
|
// we may have already pushed its own child context on the stack. A context
|
|
|
// provider should not "see" its own child context. Therefore we read the
|
|
|
// previous (parent) context instead for a context provider.
|
|
|
return previousContext;
|
|
|
}
|
|
|
|
|
|
return contextStackCursor.current;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function cacheContext(workInProgress, unmaskedContext, maskedContext) {
|
|
|
{
|
|
|
var instance = workInProgress.stateNode;
|
|
|
instance.__reactInternalMemoizedUnmaskedChildContext = unmaskedContext;
|
|
|
instance.__reactInternalMemoizedMaskedChildContext = maskedContext;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function getMaskedContext(workInProgress, unmaskedContext) {
|
|
|
{
|
|
|
var type = workInProgress.type;
|
|
|
var contextTypes = type.contextTypes;
|
|
|
|
|
|
if (!contextTypes) {
|
|
|
return emptyContextObject;
|
|
|
} // Avoid recreating masked context unless unmasked context has changed.
|
|
|
// Failing to do this will result in unnecessary calls to componentWillReceiveProps.
|
|
|
// This may trigger infinite loops if componentWillReceiveProps calls setState.
|
|
|
|
|
|
|
|
|
var instance = workInProgress.stateNode;
|
|
|
|
|
|
if (instance && instance.__reactInternalMemoizedUnmaskedChildContext === unmaskedContext) {
|
|
|
return instance.__reactInternalMemoizedMaskedChildContext;
|
|
|
}
|
|
|
|
|
|
var context = {};
|
|
|
|
|
|
for (var key in contextTypes) {
|
|
|
context[key] = unmaskedContext[key];
|
|
|
}
|
|
|
|
|
|
{
|
|
|
var name = getComponentNameFromFiber(workInProgress) || 'Unknown';
|
|
|
checkPropTypes(contextTypes, context, 'context', name);
|
|
|
} // Cache unmasked context so we can avoid recreating masked context unless necessary.
|
|
|
// Context is created before the class component is instantiated so check for instance.
|
|
|
|
|
|
|
|
|
if (instance) {
|
|
|
cacheContext(workInProgress, unmaskedContext, context);
|
|
|
}
|
|
|
|
|
|
return context;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function hasContextChanged() {
|
|
|
{
|
|
|
return didPerformWorkStackCursor.current;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function isContextProvider(type) {
|
|
|
{
|
|
|
var childContextTypes = type.childContextTypes;
|
|
|
return childContextTypes !== null && childContextTypes !== undefined;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function popContext(fiber) {
|
|
|
{
|
|
|
pop(didPerformWorkStackCursor, fiber);
|
|
|
pop(contextStackCursor, fiber);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function popTopLevelContextObject(fiber) {
|
|
|
{
|
|
|
pop(didPerformWorkStackCursor, fiber);
|
|
|
pop(contextStackCursor, fiber);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function pushTopLevelContextObject(fiber, context, didChange) {
|
|
|
{
|
|
|
if (contextStackCursor.current !== emptyContextObject) {
|
|
|
throw new Error('Unexpected context found on stack. ' + 'This error is likely caused by a bug in React. Please file an issue.');
|
|
|
}
|
|
|
|
|
|
push(contextStackCursor, context, fiber);
|
|
|
push(didPerformWorkStackCursor, didChange, fiber);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function processChildContext(fiber, type, parentContext) {
|
|
|
{
|
|
|
var instance = fiber.stateNode;
|
|
|
var childContextTypes = type.childContextTypes; // TODO (bvaughn) Replace this behavior with an invariant() in the future.
|
|
|
// It has only been added in Fiber to match the (unintentional) behavior in Stack.
|
|
|
|
|
|
if (typeof instance.getChildContext !== 'function') {
|
|
|
{
|
|
|
var componentName = getComponentNameFromFiber(fiber) || 'Unknown';
|
|
|
|
|
|
if (!warnedAboutMissingGetChildContext[componentName]) {
|
|
|
warnedAboutMissingGetChildContext[componentName] = true;
|
|
|
|
|
|
error('%s.childContextTypes is specified but there is no getChildContext() method ' + 'on the instance. You can either define getChildContext() on %s or remove ' + 'childContextTypes from it.', componentName, componentName);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return parentContext;
|
|
|
}
|
|
|
|
|
|
var childContext = instance.getChildContext();
|
|
|
|
|
|
for (var contextKey in childContext) {
|
|
|
if (!(contextKey in childContextTypes)) {
|
|
|
throw new Error((getComponentNameFromFiber(fiber) || 'Unknown') + ".getChildContext(): key \"" + contextKey + "\" is not defined in childContextTypes.");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
{
|
|
|
var name = getComponentNameFromFiber(fiber) || 'Unknown';
|
|
|
checkPropTypes(childContextTypes, childContext, 'child context', name);
|
|
|
}
|
|
|
|
|
|
return assign({}, parentContext, childContext);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function pushContextProvider(workInProgress) {
|
|
|
{
|
|
|
var instance = workInProgress.stateNode; // We push the context as early as possible to ensure stack integrity.
|
|
|
// If the instance does not exist yet, we will push null at first,
|
|
|
// and replace it on the stack later when invalidating the context.
|
|
|
|
|
|
var memoizedMergedChildContext = instance && instance.__reactInternalMemoizedMergedChildContext || emptyContextObject; // Remember the parent context so we can merge with it later.
|
|
|
// Inherit the parent's did-perform-work value to avoid inadvertently blocking updates.
|
|
|
|
|
|
previousContext = contextStackCursor.current;
|
|
|
push(contextStackCursor, memoizedMergedChildContext, workInProgress);
|
|
|
push(didPerformWorkStackCursor, didPerformWorkStackCursor.current, workInProgress);
|
|
|
return true;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function invalidateContextProvider(workInProgress, type, didChange) {
|
|
|
{
|
|
|
var instance = workInProgress.stateNode;
|
|
|
|
|
|
if (!instance) {
|
|
|
throw new Error('Expected to have an instance by this point. ' + 'This error is likely caused by a bug in React. Please file an issue.');
|
|
|
}
|
|
|
|
|
|
if (didChange) {
|
|
|
// Merge parent and own context.
|
|
|
// Skip this if we're not updating due to sCU.
|
|
|
// This avoids unnecessarily recomputing memoized values.
|
|
|
var mergedContext = processChildContext(workInProgress, type, previousContext);
|
|
|
instance.__reactInternalMemoizedMergedChildContext = mergedContext; // Replace the old (or empty) context with the new one.
|
|
|
// It is important to unwind the context in the reverse order.
|
|
|
|
|
|
pop(didPerformWorkStackCursor, workInProgress);
|
|
|
pop(contextStackCursor, workInProgress); // Now push the new context and mark that it has changed.
|
|
|
|
|
|
push(contextStackCursor, mergedContext, workInProgress);
|
|
|
push(didPerformWorkStackCursor, didChange, workInProgress);
|
|
|
} else {
|
|
|
pop(didPerformWorkStackCursor, workInProgress);
|
|
|
push(didPerformWorkStackCursor, didChange, workInProgress);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function findCurrentUnmaskedContext(fiber) {
|
|
|
{
|
|
|
// Currently this is only used with renderSubtreeIntoContainer; not sure if it
|
|
|
// makes sense elsewhere
|
|
|
if (!isFiberMounted(fiber) || fiber.tag !== ClassComponent) {
|
|
|
throw new Error('Expected subtree parent to be a mounted class component. ' + 'This error is likely caused by a bug in React. Please file an issue.');
|
|
|
}
|
|
|
|
|
|
var node = fiber;
|
|
|
|
|
|
do {
|
|
|
switch (node.tag) {
|
|
|
case HostRoot:
|
|
|
return node.stateNode.context;
|
|
|
|
|
|
case ClassComponent:
|
|
|
{
|
|
|
var Component = node.type;
|
|
|
|
|
|
if (isContextProvider(Component)) {
|
|
|
return node.stateNode.__reactInternalMemoizedMergedChildContext;
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
node = node.return;
|
|
|
} while (node !== null);
|
|
|
|
|
|
throw new Error('Found unexpected detached subtree parent. ' + 'This error is likely caused by a bug in React. Please file an issue.');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var LegacyRoot = 0;
|
|
|
var ConcurrentRoot = 1;
|
|
|
|
|
|
var syncQueue = null;
|
|
|
var includesLegacySyncCallbacks = false;
|
|
|
var isFlushingSyncQueue = false;
|
|
|
function scheduleSyncCallback(callback) {
|
|
|
// Push this callback into an internal queue. We'll flush these either in
|
|
|
// the next tick, or earlier if something calls `flushSyncCallbackQueue`.
|
|
|
if (syncQueue === null) {
|
|
|
syncQueue = [callback];
|
|
|
} else {
|
|
|
// Push onto existing queue. Don't need to schedule a callback because
|
|
|
// we already scheduled one when we created the queue.
|
|
|
syncQueue.push(callback);
|
|
|
}
|
|
|
}
|
|
|
function scheduleLegacySyncCallback(callback) {
|
|
|
includesLegacySyncCallbacks = true;
|
|
|
scheduleSyncCallback(callback);
|
|
|
}
|
|
|
function flushSyncCallbacksOnlyInLegacyMode() {
|
|
|
// Only flushes the queue if there's a legacy sync callback scheduled.
|
|
|
// TODO: There's only a single type of callback: performSyncOnWorkOnRoot. So
|
|
|
// it might make more sense for the queue to be a list of roots instead of a
|
|
|
// list of generic callbacks. Then we can have two: one for legacy roots, one
|
|
|
// for concurrent roots. And this method would only flush the legacy ones.
|
|
|
if (includesLegacySyncCallbacks) {
|
|
|
flushSyncCallbacks();
|
|
|
}
|
|
|
}
|
|
|
function flushSyncCallbacks() {
|
|
|
if (!isFlushingSyncQueue && syncQueue !== null) {
|
|
|
// Prevent re-entrance.
|
|
|
isFlushingSyncQueue = true;
|
|
|
var i = 0;
|
|
|
var previousUpdatePriority = getCurrentUpdatePriority();
|
|
|
|
|
|
try {
|
|
|
var isSync = true;
|
|
|
var queue = syncQueue; // TODO: Is this necessary anymore? The only user code that runs in this
|
|
|
// queue is in the render or commit phases.
|
|
|
|
|
|
setCurrentUpdatePriority(DiscreteEventPriority);
|
|
|
|
|
|
for (; i < queue.length; i++) {
|
|
|
var callback = queue[i];
|
|
|
|
|
|
do {
|
|
|
callback = callback(isSync);
|
|
|
} while (callback !== null);
|
|
|
}
|
|
|
|
|
|
syncQueue = null;
|
|
|
includesLegacySyncCallbacks = false;
|
|
|
} catch (error) {
|
|
|
// If something throws, leave the remaining callbacks on the queue.
|
|
|
if (syncQueue !== null) {
|
|
|
syncQueue = syncQueue.slice(i + 1);
|
|
|
} // Resume flushing in the next tick
|
|
|
|
|
|
|
|
|
scheduleCallback(ImmediatePriority, flushSyncCallbacks);
|
|
|
throw error;
|
|
|
} finally {
|
|
|
setCurrentUpdatePriority(previousUpdatePriority);
|
|
|
isFlushingSyncQueue = false;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
// TODO: Use the unified fiber stack module instead of this local one?
|
|
|
// Intentionally not using it yet to derisk the initial implementation, because
|
|
|
// the way we push/pop these values is a bit unusual. If there's a mistake, I'd
|
|
|
// rather the ids be wrong than crash the whole reconciler.
|
|
|
var forkStack = [];
|
|
|
var forkStackIndex = 0;
|
|
|
var treeForkProvider = null;
|
|
|
var treeForkCount = 0;
|
|
|
var idStack = [];
|
|
|
var idStackIndex = 0;
|
|
|
var treeContextProvider = null;
|
|
|
var treeContextId = 1;
|
|
|
var treeContextOverflow = '';
|
|
|
function isForkedChild(workInProgress) {
|
|
|
warnIfNotHydrating();
|
|
|
return (workInProgress.flags & Forked) !== NoFlags;
|
|
|
}
|
|
|
function getForksAtLevel(workInProgress) {
|
|
|
warnIfNotHydrating();
|
|
|
return treeForkCount;
|
|
|
}
|
|
|
function getTreeId() {
|
|
|
var overflow = treeContextOverflow;
|
|
|
var idWithLeadingBit = treeContextId;
|
|
|
var id = idWithLeadingBit & ~getLeadingBit(idWithLeadingBit);
|
|
|
return id.toString(32) + overflow;
|
|
|
}
|
|
|
function pushTreeFork(workInProgress, totalChildren) {
|
|
|
// This is called right after we reconcile an array (or iterator) of child
|
|
|
// fibers, because that's the only place where we know how many children in
|
|
|
// the whole set without doing extra work later, or storing addtional
|
|
|
// information on the fiber.
|
|
|
//
|
|
|
// That's why this function is separate from pushTreeId — it's called during
|
|
|
// the render phase of the fork parent, not the child, which is where we push
|
|
|
// the other context values.
|
|
|
//
|
|
|
// In the Fizz implementation this is much simpler because the child is
|
|
|
// rendered in the same callstack as the parent.
|
|
|
//
|
|
|
// It might be better to just add a `forks` field to the Fiber type. It would
|
|
|
// make this module simpler.
|
|
|
warnIfNotHydrating();
|
|
|
forkStack[forkStackIndex++] = treeForkCount;
|
|
|
forkStack[forkStackIndex++] = treeForkProvider;
|
|
|
treeForkProvider = workInProgress;
|
|
|
treeForkCount = totalChildren;
|
|
|
}
|
|
|
function pushTreeId(workInProgress, totalChildren, index) {
|
|
|
warnIfNotHydrating();
|
|
|
idStack[idStackIndex++] = treeContextId;
|
|
|
idStack[idStackIndex++] = treeContextOverflow;
|
|
|
idStack[idStackIndex++] = treeContextProvider;
|
|
|
treeContextProvider = workInProgress;
|
|
|
var baseIdWithLeadingBit = treeContextId;
|
|
|
var baseOverflow = treeContextOverflow; // The leftmost 1 marks the end of the sequence, non-inclusive. It's not part
|
|
|
// of the id; we use it to account for leading 0s.
|
|
|
|
|
|
var baseLength = getBitLength(baseIdWithLeadingBit) - 1;
|
|
|
var baseId = baseIdWithLeadingBit & ~(1 << baseLength);
|
|
|
var slot = index + 1;
|
|
|
var length = getBitLength(totalChildren) + baseLength; // 30 is the max length we can store without overflowing, taking into
|
|
|
// consideration the leading 1 we use to mark the end of the sequence.
|
|
|
|
|
|
if (length > 30) {
|
|
|
// We overflowed the bitwise-safe range. Fall back to slower algorithm.
|
|
|
// This branch assumes the length of the base id is greater than 5; it won't
|
|
|
// work for smaller ids, because you need 5 bits per character.
|
|
|
//
|
|
|
// We encode the id in multiple steps: first the base id, then the
|
|
|
// remaining digits.
|
|
|
//
|
|
|
// Each 5 bit sequence corresponds to a single base 32 character. So for
|
|
|
// example, if the current id is 23 bits long, we can convert 20 of those
|
|
|
// bits into a string of 4 characters, with 3 bits left over.
|
|
|
//
|
|
|
// First calculate how many bits in the base id represent a complete
|
|
|
// sequence of characters.
|
|
|
var numberOfOverflowBits = baseLength - baseLength % 5; // Then create a bitmask that selects only those bits.
|
|
|
|
|
|
var newOverflowBits = (1 << numberOfOverflowBits) - 1; // Select the bits, and convert them to a base 32 string.
|
|
|
|
|
|
var newOverflow = (baseId & newOverflowBits).toString(32); // Now we can remove those bits from the base id.
|
|
|
|
|
|
var restOfBaseId = baseId >> numberOfOverflowBits;
|
|
|
var restOfBaseLength = baseLength - numberOfOverflowBits; // Finally, encode the rest of the bits using the normal algorithm. Because
|
|
|
// we made more room, this time it won't overflow.
|
|
|
|
|
|
var restOfLength = getBitLength(totalChildren) + restOfBaseLength;
|
|
|
var restOfNewBits = slot << restOfBaseLength;
|
|
|
var id = restOfNewBits | restOfBaseId;
|
|
|
var overflow = newOverflow + baseOverflow;
|
|
|
treeContextId = 1 << restOfLength | id;
|
|
|
treeContextOverflow = overflow;
|
|
|
} else {
|
|
|
// Normal path
|
|
|
var newBits = slot << baseLength;
|
|
|
|
|
|
var _id = newBits | baseId;
|
|
|
|
|
|
var _overflow = baseOverflow;
|
|
|
treeContextId = 1 << length | _id;
|
|
|
treeContextOverflow = _overflow;
|
|
|
}
|
|
|
}
|
|
|
function pushMaterializedTreeId(workInProgress) {
|
|
|
warnIfNotHydrating(); // This component materialized an id. This will affect any ids that appear
|
|
|
// in its children.
|
|
|
|
|
|
var returnFiber = workInProgress.return;
|
|
|
|
|
|
if (returnFiber !== null) {
|
|
|
var numberOfForks = 1;
|
|
|
var slotIndex = 0;
|
|
|
pushTreeFork(workInProgress, numberOfForks);
|
|
|
pushTreeId(workInProgress, numberOfForks, slotIndex);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function getBitLength(number) {
|
|
|
return 32 - clz32(number);
|
|
|
}
|
|
|
|
|
|
function getLeadingBit(id) {
|
|
|
return 1 << getBitLength(id) - 1;
|
|
|
}
|
|
|
|
|
|
function popTreeContext(workInProgress) {
|
|
|
// Restore the previous values.
|
|
|
// This is a bit more complicated than other context-like modules in Fiber
|
|
|
// because the same Fiber may appear on the stack multiple times and for
|
|
|
// different reasons. We have to keep popping until the work-in-progress is
|
|
|
// no longer at the top of the stack.
|
|
|
while (workInProgress === treeForkProvider) {
|
|
|
treeForkProvider = forkStack[--forkStackIndex];
|
|
|
forkStack[forkStackIndex] = null;
|
|
|
treeForkCount = forkStack[--forkStackIndex];
|
|
|
forkStack[forkStackIndex] = null;
|
|
|
}
|
|
|
|
|
|
while (workInProgress === treeContextProvider) {
|
|
|
treeContextProvider = idStack[--idStackIndex];
|
|
|
idStack[idStackIndex] = null;
|
|
|
treeContextOverflow = idStack[--idStackIndex];
|
|
|
idStack[idStackIndex] = null;
|
|
|
treeContextId = idStack[--idStackIndex];
|
|
|
idStack[idStackIndex] = null;
|
|
|
}
|
|
|
}
|
|
|
function getSuspendedTreeContext() {
|
|
|
warnIfNotHydrating();
|
|
|
|
|
|
if (treeContextProvider !== null) {
|
|
|
return {
|
|
|
id: treeContextId,
|
|
|
overflow: treeContextOverflow
|
|
|
};
|
|
|
} else {
|
|
|
return null;
|
|
|
}
|
|
|
}
|
|
|
function restoreSuspendedTreeContext(workInProgress, suspendedContext) {
|
|
|
warnIfNotHydrating();
|
|
|
idStack[idStackIndex++] = treeContextId;
|
|
|
idStack[idStackIndex++] = treeContextOverflow;
|
|
|
idStack[idStackIndex++] = treeContextProvider;
|
|
|
treeContextId = suspendedContext.id;
|
|
|
treeContextOverflow = suspendedContext.overflow;
|
|
|
treeContextProvider = workInProgress;
|
|
|
}
|
|
|
|
|
|
function warnIfNotHydrating() {
|
|
|
{
|
|
|
if (!getIsHydrating()) {
|
|
|
error('Expected to be hydrating. This is a bug in React. Please file ' + 'an issue.');
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// This may have been an insertion or a hydration.
|
|
|
|
|
|
var hydrationParentFiber = null;
|
|
|
var nextHydratableInstance = null;
|
|
|
var isHydrating = false; // This flag allows for warning supression when we expect there to be mismatches
|
|
|
// due to earlier mismatches or a suspended fiber.
|
|
|
|
|
|
var didSuspendOrErrorDEV = false; // Hydration errors that were thrown inside this boundary
|
|
|
|
|
|
var hydrationErrors = null;
|
|
|
|
|
|
function warnIfHydrating() {
|
|
|
{
|
|
|
if (isHydrating) {
|
|
|
error('We should not be hydrating here. This is a bug in React. Please file a bug.');
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function markDidThrowWhileHydratingDEV() {
|
|
|
{
|
|
|
didSuspendOrErrorDEV = true;
|
|
|
}
|
|
|
}
|
|
|
function didSuspendOrErrorWhileHydratingDEV() {
|
|
|
{
|
|
|
return didSuspendOrErrorDEV;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function enterHydrationState(fiber) {
|
|
|
|
|
|
var parentInstance = fiber.stateNode.containerInfo;
|
|
|
nextHydratableInstance = getFirstHydratableChildWithinContainer(parentInstance);
|
|
|
hydrationParentFiber = fiber;
|
|
|
isHydrating = true;
|
|
|
hydrationErrors = null;
|
|
|
didSuspendOrErrorDEV = false;
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
function reenterHydrationStateFromDehydratedSuspenseInstance(fiber, suspenseInstance, treeContext) {
|
|
|
|
|
|
nextHydratableInstance = getFirstHydratableChildWithinSuspenseInstance(suspenseInstance);
|
|
|
hydrationParentFiber = fiber;
|
|
|
isHydrating = true;
|
|
|
hydrationErrors = null;
|
|
|
didSuspendOrErrorDEV = false;
|
|
|
|
|
|
if (treeContext !== null) {
|
|
|
restoreSuspendedTreeContext(fiber, treeContext);
|
|
|
}
|
|
|
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
function warnUnhydratedInstance(returnFiber, instance) {
|
|
|
{
|
|
|
switch (returnFiber.tag) {
|
|
|
case HostRoot:
|
|
|
{
|
|
|
didNotHydrateInstanceWithinContainer(returnFiber.stateNode.containerInfo, instance);
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
case HostComponent:
|
|
|
{
|
|
|
var isConcurrentMode = (returnFiber.mode & ConcurrentMode) !== NoMode;
|
|
|
didNotHydrateInstance(returnFiber.type, returnFiber.memoizedProps, returnFiber.stateNode, instance, // TODO: Delete this argument when we remove the legacy root API.
|
|
|
isConcurrentMode);
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
case SuspenseComponent:
|
|
|
{
|
|
|
var suspenseState = returnFiber.memoizedState;
|
|
|
if (suspenseState.dehydrated !== null) didNotHydrateInstanceWithinSuspenseInstance(suspenseState.dehydrated, instance);
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function deleteHydratableInstance(returnFiber, instance) {
|
|
|
warnUnhydratedInstance(returnFiber, instance);
|
|
|
var childToDelete = createFiberFromHostInstanceForDeletion();
|
|
|
childToDelete.stateNode = instance;
|
|
|
childToDelete.return = returnFiber;
|
|
|
var deletions = returnFiber.deletions;
|
|
|
|
|
|
if (deletions === null) {
|
|
|
returnFiber.deletions = [childToDelete];
|
|
|
returnFiber.flags |= ChildDeletion;
|
|
|
} else {
|
|
|
deletions.push(childToDelete);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function warnNonhydratedInstance(returnFiber, fiber) {
|
|
|
{
|
|
|
if (didSuspendOrErrorDEV) {
|
|
|
// Inside a boundary that already suspended. We're currently rendering the
|
|
|
// siblings of a suspended node. The mismatch may be due to the missing
|
|
|
// data, so it's probably a false positive.
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
switch (returnFiber.tag) {
|
|
|
case HostRoot:
|
|
|
{
|
|
|
var parentContainer = returnFiber.stateNode.containerInfo;
|
|
|
|
|
|
switch (fiber.tag) {
|
|
|
case HostComponent:
|
|
|
var type = fiber.type;
|
|
|
var props = fiber.pendingProps;
|
|
|
didNotFindHydratableInstanceWithinContainer(parentContainer, type);
|
|
|
break;
|
|
|
|
|
|
case HostText:
|
|
|
var text = fiber.pendingProps;
|
|
|
didNotFindHydratableTextInstanceWithinContainer(parentContainer, text);
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
case HostComponent:
|
|
|
{
|
|
|
var parentType = returnFiber.type;
|
|
|
var parentProps = returnFiber.memoizedProps;
|
|
|
var parentInstance = returnFiber.stateNode;
|
|
|
|
|
|
switch (fiber.tag) {
|
|
|
case HostComponent:
|
|
|
{
|
|
|
var _type = fiber.type;
|
|
|
var _props = fiber.pendingProps;
|
|
|
var isConcurrentMode = (returnFiber.mode & ConcurrentMode) !== NoMode;
|
|
|
didNotFindHydratableInstance(parentType, parentProps, parentInstance, _type, _props, // TODO: Delete this argument when we remove the legacy root API.
|
|
|
isConcurrentMode);
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
case HostText:
|
|
|
{
|
|
|
var _text = fiber.pendingProps;
|
|
|
|
|
|
var _isConcurrentMode = (returnFiber.mode & ConcurrentMode) !== NoMode;
|
|
|
|
|
|
didNotFindHydratableTextInstance(parentType, parentProps, parentInstance, _text, // TODO: Delete this argument when we remove the legacy root API.
|
|
|
_isConcurrentMode);
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
case SuspenseComponent:
|
|
|
{
|
|
|
var suspenseState = returnFiber.memoizedState;
|
|
|
var _parentInstance = suspenseState.dehydrated;
|
|
|
if (_parentInstance !== null) switch (fiber.tag) {
|
|
|
case HostComponent:
|
|
|
var _type2 = fiber.type;
|
|
|
var _props2 = fiber.pendingProps;
|
|
|
didNotFindHydratableInstanceWithinSuspenseInstance(_parentInstance, _type2);
|
|
|
break;
|
|
|
|
|
|
case HostText:
|
|
|
var _text2 = fiber.pendingProps;
|
|
|
didNotFindHydratableTextInstanceWithinSuspenseInstance(_parentInstance, _text2);
|
|
|
break;
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
default:
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function insertNonHydratedInstance(returnFiber, fiber) {
|
|
|
fiber.flags = fiber.flags & ~Hydrating | Placement;
|
|
|
warnNonhydratedInstance(returnFiber, fiber);
|
|
|
}
|
|
|
|
|
|
function tryHydrate(fiber, nextInstance) {
|
|
|
switch (fiber.tag) {
|
|
|
case HostComponent:
|
|
|
{
|
|
|
var type = fiber.type;
|
|
|
var props = fiber.pendingProps;
|
|
|
var instance = canHydrateInstance(nextInstance, type);
|
|
|
|
|
|
if (instance !== null) {
|
|
|
fiber.stateNode = instance;
|
|
|
hydrationParentFiber = fiber;
|
|
|
nextHydratableInstance = getFirstHydratableChild(instance);
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
case HostText:
|
|
|
{
|
|
|
var text = fiber.pendingProps;
|
|
|
var textInstance = canHydrateTextInstance(nextInstance, text);
|
|
|
|
|
|
if (textInstance !== null) {
|
|
|
fiber.stateNode = textInstance;
|
|
|
hydrationParentFiber = fiber; // Text Instances don't have children so there's nothing to hydrate.
|
|
|
|
|
|
nextHydratableInstance = null;
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
case SuspenseComponent:
|
|
|
{
|
|
|
var suspenseInstance = canHydrateSuspenseInstance(nextInstance);
|
|
|
|
|
|
if (suspenseInstance !== null) {
|
|
|
var suspenseState = {
|
|
|
dehydrated: suspenseInstance,
|
|
|
treeContext: getSuspendedTreeContext(),
|
|
|
retryLane: OffscreenLane
|
|
|
};
|
|
|
fiber.memoizedState = suspenseState; // Store the dehydrated fragment as a child fiber.
|
|
|
// This simplifies the code for getHostSibling and deleting nodes,
|
|
|
// since it doesn't have to consider all Suspense boundaries and
|
|
|
// check if they're dehydrated ones or not.
|
|
|
|
|
|
var dehydratedFragment = createFiberFromDehydratedFragment(suspenseInstance);
|
|
|
dehydratedFragment.return = fiber;
|
|
|
fiber.child = dehydratedFragment;
|
|
|
hydrationParentFiber = fiber; // While a Suspense Instance does have children, we won't step into
|
|
|
// it during the first pass. Instead, we'll reenter it later.
|
|
|
|
|
|
nextHydratableInstance = null;
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
default:
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function shouldClientRenderOnMismatch(fiber) {
|
|
|
return (fiber.mode & ConcurrentMode) !== NoMode && (fiber.flags & DidCapture) === NoFlags;
|
|
|
}
|
|
|
|
|
|
function throwOnHydrationMismatch(fiber) {
|
|
|
throw new Error('Hydration failed because the initial UI does not match what was ' + 'rendered on the server.');
|
|
|
}
|
|
|
|
|
|
function tryToClaimNextHydratableInstance(fiber) {
|
|
|
if (!isHydrating) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
var nextInstance = nextHydratableInstance;
|
|
|
|
|
|
if (!nextInstance) {
|
|
|
if (shouldClientRenderOnMismatch(fiber)) {
|
|
|
warnNonhydratedInstance(hydrationParentFiber, fiber);
|
|
|
throwOnHydrationMismatch();
|
|
|
} // Nothing to hydrate. Make it an insertion.
|
|
|
|
|
|
|
|
|
insertNonHydratedInstance(hydrationParentFiber, fiber);
|
|
|
isHydrating = false;
|
|
|
hydrationParentFiber = fiber;
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
var firstAttemptedInstance = nextInstance;
|
|
|
|
|
|
if (!tryHydrate(fiber, nextInstance)) {
|
|
|
if (shouldClientRenderOnMismatch(fiber)) {
|
|
|
warnNonhydratedInstance(hydrationParentFiber, fiber);
|
|
|
throwOnHydrationMismatch();
|
|
|
} // If we can't hydrate this instance let's try the next one.
|
|
|
// We use this as a heuristic. It's based on intuition and not data so it
|
|
|
// might be flawed or unnecessary.
|
|
|
|
|
|
|
|
|
nextInstance = getNextHydratableSibling(firstAttemptedInstance);
|
|
|
var prevHydrationParentFiber = hydrationParentFiber;
|
|
|
|
|
|
if (!nextInstance || !tryHydrate(fiber, nextInstance)) {
|
|
|
// Nothing to hydrate. Make it an insertion.
|
|
|
insertNonHydratedInstance(hydrationParentFiber, fiber);
|
|
|
isHydrating = false;
|
|
|
hydrationParentFiber = fiber;
|
|
|
return;
|
|
|
} // We matched the next one, we'll now assume that the first one was
|
|
|
// superfluous and we'll delete it. Since we can't eagerly delete it
|
|
|
// we'll have to schedule a deletion. To do that, this node needs a dummy
|
|
|
// fiber associated with it.
|
|
|
|
|
|
|
|
|
deleteHydratableInstance(prevHydrationParentFiber, firstAttemptedInstance);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function prepareToHydrateHostInstance(fiber, rootContainerInstance, hostContext) {
|
|
|
|
|
|
var instance = fiber.stateNode;
|
|
|
var shouldWarnIfMismatchDev = !didSuspendOrErrorDEV;
|
|
|
var updatePayload = hydrateInstance(instance, fiber.type, fiber.memoizedProps, rootContainerInstance, hostContext, fiber, shouldWarnIfMismatchDev); // TODO: Type this specific to this type of component.
|
|
|
|
|
|
fiber.updateQueue = updatePayload; // If the update payload indicates that there is a change or if there
|
|
|
// is a new ref we mark this as an update.
|
|
|
|
|
|
if (updatePayload !== null) {
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
function prepareToHydrateHostTextInstance(fiber) {
|
|
|
|
|
|
var textInstance = fiber.stateNode;
|
|
|
var textContent = fiber.memoizedProps;
|
|
|
var shouldUpdate = hydrateTextInstance(textInstance, textContent, fiber);
|
|
|
|
|
|
if (shouldUpdate) {
|
|
|
// We assume that prepareToHydrateHostTextInstance is called in a context where the
|
|
|
// hydration parent is the parent host component of this host text.
|
|
|
var returnFiber = hydrationParentFiber;
|
|
|
|
|
|
if (returnFiber !== null) {
|
|
|
switch (returnFiber.tag) {
|
|
|
case HostRoot:
|
|
|
{
|
|
|
var parentContainer = returnFiber.stateNode.containerInfo;
|
|
|
var isConcurrentMode = (returnFiber.mode & ConcurrentMode) !== NoMode;
|
|
|
didNotMatchHydratedContainerTextInstance(parentContainer, textInstance, textContent, // TODO: Delete this argument when we remove the legacy root API.
|
|
|
isConcurrentMode);
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
case HostComponent:
|
|
|
{
|
|
|
var parentType = returnFiber.type;
|
|
|
var parentProps = returnFiber.memoizedProps;
|
|
|
var parentInstance = returnFiber.stateNode;
|
|
|
|
|
|
var _isConcurrentMode2 = (returnFiber.mode & ConcurrentMode) !== NoMode;
|
|
|
|
|
|
didNotMatchHydratedTextInstance(parentType, parentProps, parentInstance, textInstance, textContent, // TODO: Delete this argument when we remove the legacy root API.
|
|
|
_isConcurrentMode2);
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return shouldUpdate;
|
|
|
}
|
|
|
|
|
|
function prepareToHydrateHostSuspenseInstance(fiber) {
|
|
|
|
|
|
var suspenseState = fiber.memoizedState;
|
|
|
var suspenseInstance = suspenseState !== null ? suspenseState.dehydrated : null;
|
|
|
|
|
|
if (!suspenseInstance) {
|
|
|
throw new Error('Expected to have a hydrated suspense instance. ' + 'This error is likely caused by a bug in React. Please file an issue.');
|
|
|
}
|
|
|
|
|
|
hydrateSuspenseInstance(suspenseInstance, fiber);
|
|
|
}
|
|
|
|
|
|
function skipPastDehydratedSuspenseInstance(fiber) {
|
|
|
|
|
|
var suspenseState = fiber.memoizedState;
|
|
|
var suspenseInstance = suspenseState !== null ? suspenseState.dehydrated : null;
|
|
|
|
|
|
if (!suspenseInstance) {
|
|
|
throw new Error('Expected to have a hydrated suspense instance. ' + 'This error is likely caused by a bug in React. Please file an issue.');
|
|
|
}
|
|
|
|
|
|
return getNextHydratableInstanceAfterSuspenseInstance(suspenseInstance);
|
|
|
}
|
|
|
|
|
|
function popToNextHostParent(fiber) {
|
|
|
var parent = fiber.return;
|
|
|
|
|
|
while (parent !== null && parent.tag !== HostComponent && parent.tag !== HostRoot && parent.tag !== SuspenseComponent) {
|
|
|
parent = parent.return;
|
|
|
}
|
|
|
|
|
|
hydrationParentFiber = parent;
|
|
|
}
|
|
|
|
|
|
function popHydrationState(fiber) {
|
|
|
|
|
|
if (fiber !== hydrationParentFiber) {
|
|
|
// We're deeper than the current hydration context, inside an inserted
|
|
|
// tree.
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
if (!isHydrating) {
|
|
|
// If we're not currently hydrating but we're in a hydration context, then
|
|
|
// we were an insertion and now need to pop up reenter hydration of our
|
|
|
// siblings.
|
|
|
popToNextHostParent(fiber);
|
|
|
isHydrating = true;
|
|
|
return false;
|
|
|
} // If we have any remaining hydratable nodes, we need to delete them now.
|
|
|
// We only do this deeper than head and body since they tend to have random
|
|
|
// other nodes in them. We also ignore components with pure text content in
|
|
|
// side of them. We also don't delete anything inside the root container.
|
|
|
|
|
|
|
|
|
if (fiber.tag !== HostRoot && (fiber.tag !== HostComponent || shouldDeleteUnhydratedTailInstances(fiber.type) && !shouldSetTextContent(fiber.type, fiber.memoizedProps))) {
|
|
|
var nextInstance = nextHydratableInstance;
|
|
|
|
|
|
if (nextInstance) {
|
|
|
if (shouldClientRenderOnMismatch(fiber)) {
|
|
|
warnIfUnhydratedTailNodes(fiber);
|
|
|
throwOnHydrationMismatch();
|
|
|
} else {
|
|
|
while (nextInstance) {
|
|
|
deleteHydratableInstance(fiber, nextInstance);
|
|
|
nextInstance = getNextHydratableSibling(nextInstance);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
popToNextHostParent(fiber);
|
|
|
|
|
|
if (fiber.tag === SuspenseComponent) {
|
|
|
nextHydratableInstance = skipPastDehydratedSuspenseInstance(fiber);
|
|
|
} else {
|
|
|
nextHydratableInstance = hydrationParentFiber ? getNextHydratableSibling(fiber.stateNode) : null;
|
|
|
}
|
|
|
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
function hasUnhydratedTailNodes() {
|
|
|
return isHydrating && nextHydratableInstance !== null;
|
|
|
}
|
|
|
|
|
|
function warnIfUnhydratedTailNodes(fiber) {
|
|
|
var nextInstance = nextHydratableInstance;
|
|
|
|
|
|
while (nextInstance) {
|
|
|
warnUnhydratedInstance(fiber, nextInstance);
|
|
|
nextInstance = getNextHydratableSibling(nextInstance);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function resetHydrationState() {
|
|
|
|
|
|
hydrationParentFiber = null;
|
|
|
nextHydratableInstance = null;
|
|
|
isHydrating = false;
|
|
|
didSuspendOrErrorDEV = false;
|
|
|
}
|
|
|
|
|
|
function upgradeHydrationErrorsToRecoverable() {
|
|
|
if (hydrationErrors !== null) {
|
|
|
// Successfully completed a forced client render. The errors that occurred
|
|
|
// during the hydration attempt are now recovered. We will log them in
|
|
|
// commit phase, once the entire tree has finished.
|
|
|
queueRecoverableErrors(hydrationErrors);
|
|
|
hydrationErrors = null;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function getIsHydrating() {
|
|
|
return isHydrating;
|
|
|
}
|
|
|
|
|
|
function queueHydrationError(error) {
|
|
|
if (hydrationErrors === null) {
|
|
|
hydrationErrors = [error];
|
|
|
} else {
|
|
|
hydrationErrors.push(error);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var ReactCurrentBatchConfig$1 = ReactSharedInternals.ReactCurrentBatchConfig;
|
|
|
var NoTransition = null;
|
|
|
function requestCurrentTransition() {
|
|
|
return ReactCurrentBatchConfig$1.transition;
|
|
|
}
|
|
|
|
|
|
var ReactStrictModeWarnings = {
|
|
|
recordUnsafeLifecycleWarnings: function (fiber, instance) {},
|
|
|
flushPendingUnsafeLifecycleWarnings: function () {},
|
|
|
recordLegacyContextWarning: function (fiber, instance) {},
|
|
|
flushLegacyContextWarning: function () {},
|
|
|
discardPendingWarnings: function () {}
|
|
|
};
|
|
|
|
|
|
{
|
|
|
var findStrictRoot = function (fiber) {
|
|
|
var maybeStrictRoot = null;
|
|
|
var node = fiber;
|
|
|
|
|
|
while (node !== null) {
|
|
|
if (node.mode & StrictLegacyMode) {
|
|
|
maybeStrictRoot = node;
|
|
|
}
|
|
|
|
|
|
node = node.return;
|
|
|
}
|
|
|
|
|
|
return maybeStrictRoot;
|
|
|
};
|
|
|
|
|
|
var setToSortedString = function (set) {
|
|
|
var array = [];
|
|
|
set.forEach(function (value) {
|
|
|
array.push(value);
|
|
|
});
|
|
|
return array.sort().join(', ');
|
|
|
};
|
|
|
|
|
|
var pendingComponentWillMountWarnings = [];
|
|
|
var pendingUNSAFE_ComponentWillMountWarnings = [];
|
|
|
var pendingComponentWillReceivePropsWarnings = [];
|
|
|
var pendingUNSAFE_ComponentWillReceivePropsWarnings = [];
|
|
|
var pendingComponentWillUpdateWarnings = [];
|
|
|
var pendingUNSAFE_ComponentWillUpdateWarnings = []; // Tracks components we have already warned about.
|
|
|
|
|
|
var didWarnAboutUnsafeLifecycles = new Set();
|
|
|
|
|
|
ReactStrictModeWarnings.recordUnsafeLifecycleWarnings = function (fiber, instance) {
|
|
|
// Dedupe strategy: Warn once per component.
|
|
|
if (didWarnAboutUnsafeLifecycles.has(fiber.type)) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (typeof instance.componentWillMount === 'function' && // Don't warn about react-lifecycles-compat polyfilled components.
|
|
|
instance.componentWillMount.__suppressDeprecationWarning !== true) {
|
|
|
pendingComponentWillMountWarnings.push(fiber);
|
|
|
}
|
|
|
|
|
|
if (fiber.mode & StrictLegacyMode && typeof instance.UNSAFE_componentWillMount === 'function') {
|
|
|
pendingUNSAFE_ComponentWillMountWarnings.push(fiber);
|
|
|
}
|
|
|
|
|
|
if (typeof instance.componentWillReceiveProps === 'function' && instance.componentWillReceiveProps.__suppressDeprecationWarning !== true) {
|
|
|
pendingComponentWillReceivePropsWarnings.push(fiber);
|
|
|
}
|
|
|
|
|
|
if (fiber.mode & StrictLegacyMode && typeof instance.UNSAFE_componentWillReceiveProps === 'function') {
|
|
|
pendingUNSAFE_ComponentWillReceivePropsWarnings.push(fiber);
|
|
|
}
|
|
|
|
|
|
if (typeof instance.componentWillUpdate === 'function' && instance.componentWillUpdate.__suppressDeprecationWarning !== true) {
|
|
|
pendingComponentWillUpdateWarnings.push(fiber);
|
|
|
}
|
|
|
|
|
|
if (fiber.mode & StrictLegacyMode && typeof instance.UNSAFE_componentWillUpdate === 'function') {
|
|
|
pendingUNSAFE_ComponentWillUpdateWarnings.push(fiber);
|
|
|
}
|
|
|
};
|
|
|
|
|
|
ReactStrictModeWarnings.flushPendingUnsafeLifecycleWarnings = function () {
|
|
|
// We do an initial pass to gather component names
|
|
|
var componentWillMountUniqueNames = new Set();
|
|
|
|
|
|
if (pendingComponentWillMountWarnings.length > 0) {
|
|
|
pendingComponentWillMountWarnings.forEach(function (fiber) {
|
|
|
componentWillMountUniqueNames.add(getComponentNameFromFiber(fiber) || 'Component');
|
|
|
didWarnAboutUnsafeLifecycles.add(fiber.type);
|
|
|
});
|
|
|
pendingComponentWillMountWarnings = [];
|
|
|
}
|
|
|
|
|
|
var UNSAFE_componentWillMountUniqueNames = new Set();
|
|
|
|
|
|
if (pendingUNSAFE_ComponentWillMountWarnings.length > 0) {
|
|
|
pendingUNSAFE_ComponentWillMountWarnings.forEach(function (fiber) {
|
|
|
UNSAFE_componentWillMountUniqueNames.add(getComponentNameFromFiber(fiber) || 'Component');
|
|
|
didWarnAboutUnsafeLifecycles.add(fiber.type);
|
|
|
});
|
|
|
pendingUNSAFE_ComponentWillMountWarnings = [];
|
|
|
}
|
|
|
|
|
|
var componentWillReceivePropsUniqueNames = new Set();
|
|
|
|
|
|
if (pendingComponentWillReceivePropsWarnings.length > 0) {
|
|
|
pendingComponentWillReceivePropsWarnings.forEach(function (fiber) {
|
|
|
componentWillReceivePropsUniqueNames.add(getComponentNameFromFiber(fiber) || 'Component');
|
|
|
didWarnAboutUnsafeLifecycles.add(fiber.type);
|
|
|
});
|
|
|
pendingComponentWillReceivePropsWarnings = [];
|
|
|
}
|
|
|
|
|
|
var UNSAFE_componentWillReceivePropsUniqueNames = new Set();
|
|
|
|
|
|
if (pendingUNSAFE_ComponentWillReceivePropsWarnings.length > 0) {
|
|
|
pendingUNSAFE_ComponentWillReceivePropsWarnings.forEach(function (fiber) {
|
|
|
UNSAFE_componentWillReceivePropsUniqueNames.add(getComponentNameFromFiber(fiber) || 'Component');
|
|
|
didWarnAboutUnsafeLifecycles.add(fiber.type);
|
|
|
});
|
|
|
pendingUNSAFE_ComponentWillReceivePropsWarnings = [];
|
|
|
}
|
|
|
|
|
|
var componentWillUpdateUniqueNames = new Set();
|
|
|
|
|
|
if (pendingComponentWillUpdateWarnings.length > 0) {
|
|
|
pendingComponentWillUpdateWarnings.forEach(function (fiber) {
|
|
|
componentWillUpdateUniqueNames.add(getComponentNameFromFiber(fiber) || 'Component');
|
|
|
didWarnAboutUnsafeLifecycles.add(fiber.type);
|
|
|
});
|
|
|
pendingComponentWillUpdateWarnings = [];
|
|
|
}
|
|
|
|
|
|
var UNSAFE_componentWillUpdateUniqueNames = new Set();
|
|
|
|
|
|
if (pendingUNSAFE_ComponentWillUpdateWarnings.length > 0) {
|
|
|
pendingUNSAFE_ComponentWillUpdateWarnings.forEach(function (fiber) {
|
|
|
UNSAFE_componentWillUpdateUniqueNames.add(getComponentNameFromFiber(fiber) || 'Component');
|
|
|
didWarnAboutUnsafeLifecycles.add(fiber.type);
|
|
|
});
|
|
|
pendingUNSAFE_ComponentWillUpdateWarnings = [];
|
|
|
} // Finally, we flush all the warnings
|
|
|
// UNSAFE_ ones before the deprecated ones, since they'll be 'louder'
|
|
|
|
|
|
|
|
|
if (UNSAFE_componentWillMountUniqueNames.size > 0) {
|
|
|
var sortedNames = setToSortedString(UNSAFE_componentWillMountUniqueNames);
|
|
|
|
|
|
error('Using UNSAFE_componentWillMount in strict mode is not recommended and may indicate bugs in your code. ' + 'See https://reactjs.org/link/unsafe-component-lifecycles for details.\n\n' + '* Move code with side effects to componentDidMount, and set initial state in the constructor.\n' + '\nPlease update the following components: %s', sortedNames);
|
|
|
}
|
|
|
|
|
|
if (UNSAFE_componentWillReceivePropsUniqueNames.size > 0) {
|
|
|
var _sortedNames = setToSortedString(UNSAFE_componentWillReceivePropsUniqueNames);
|
|
|
|
|
|
error('Using UNSAFE_componentWillReceiveProps in strict mode is not recommended ' + 'and may indicate bugs in your code. ' + 'See https://reactjs.org/link/unsafe-component-lifecycles for details.\n\n' + '* Move data fetching code or side effects to componentDidUpdate.\n' + "* If you're updating state whenever props change, " + 'refactor your code to use memoization techniques or move it to ' + 'static getDerivedStateFromProps. Learn more at: https://reactjs.org/link/derived-state\n' + '\nPlease update the following components: %s', _sortedNames);
|
|
|
}
|
|
|
|
|
|
if (UNSAFE_componentWillUpdateUniqueNames.size > 0) {
|
|
|
var _sortedNames2 = setToSortedString(UNSAFE_componentWillUpdateUniqueNames);
|
|
|
|
|
|
error('Using UNSAFE_componentWillUpdate in strict mode is not recommended ' + 'and may indicate bugs in your code. ' + 'See https://reactjs.org/link/unsafe-component-lifecycles for details.\n\n' + '* Move data fetching code or side effects to componentDidUpdate.\n' + '\nPlease update the following components: %s', _sortedNames2);
|
|
|
}
|
|
|
|
|
|
if (componentWillMountUniqueNames.size > 0) {
|
|
|
var _sortedNames3 = setToSortedString(componentWillMountUniqueNames);
|
|
|
|
|
|
warn('componentWillMount has been renamed, and is not recommended for use. ' + 'See https://reactjs.org/link/unsafe-component-lifecycles for details.\n\n' + '* Move code with side effects to componentDidMount, and set initial state in the constructor.\n' + '* Rename componentWillMount to UNSAFE_componentWillMount to suppress ' + 'this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. ' + 'To rename all deprecated lifecycles to their new names, you can run ' + '`npx react-codemod rename-unsafe-lifecycles` in your project source folder.\n' + '\nPlease update the following components: %s', _sortedNames3);
|
|
|
}
|
|
|
|
|
|
if (componentWillReceivePropsUniqueNames.size > 0) {
|
|
|
var _sortedNames4 = setToSortedString(componentWillReceivePropsUniqueNames);
|
|
|
|
|
|
warn('componentWillReceiveProps has been renamed, and is not recommended for use. ' + 'See https://reactjs.org/link/unsafe-component-lifecycles for details.\n\n' + '* Move data fetching code or side effects to componentDidUpdate.\n' + "* If you're updating state whenever props change, refactor your " + 'code to use memoization techniques or move it to ' + 'static getDerivedStateFromProps. Learn more at: https://reactjs.org/link/derived-state\n' + '* Rename componentWillReceiveProps to UNSAFE_componentWillReceiveProps to suppress ' + 'this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. ' + 'To rename all deprecated lifecycles to their new names, you can run ' + '`npx react-codemod rename-unsafe-lifecycles` in your project source folder.\n' + '\nPlease update the following components: %s', _sortedNames4);
|
|
|
}
|
|
|
|
|
|
if (componentWillUpdateUniqueNames.size > 0) {
|
|
|
var _sortedNames5 = setToSortedString(componentWillUpdateUniqueNames);
|
|
|
|
|
|
warn('componentWillUpdate has been renamed, and is not recommended for use. ' + 'See https://reactjs.org/link/unsafe-component-lifecycles for details.\n\n' + '* Move data fetching code or side effects to componentDidUpdate.\n' + '* Rename componentWillUpdate to UNSAFE_componentWillUpdate to suppress ' + 'this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. ' + 'To rename all deprecated lifecycles to their new names, you can run ' + '`npx react-codemod rename-unsafe-lifecycles` in your project source folder.\n' + '\nPlease update the following components: %s', _sortedNames5);
|
|
|
}
|
|
|
};
|
|
|
|
|
|
var pendingLegacyContextWarning = new Map(); // Tracks components we have already warned about.
|
|
|
|
|
|
var didWarnAboutLegacyContext = new Set();
|
|
|
|
|
|
ReactStrictModeWarnings.recordLegacyContextWarning = function (fiber, instance) {
|
|
|
var strictRoot = findStrictRoot(fiber);
|
|
|
|
|
|
if (strictRoot === null) {
|
|
|
error('Expected to find a StrictMode component in a strict mode tree. ' + 'This error is likely caused by a bug in React. Please file an issue.');
|
|
|
|
|
|
return;
|
|
|
} // Dedup strategy: Warn once per component.
|
|
|
|
|
|
|
|
|
if (didWarnAboutLegacyContext.has(fiber.type)) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
var warningsForRoot = pendingLegacyContextWarning.get(strictRoot);
|
|
|
|
|
|
if (fiber.type.contextTypes != null || fiber.type.childContextTypes != null || instance !== null && typeof instance.getChildContext === 'function') {
|
|
|
if (warningsForRoot === undefined) {
|
|
|
warningsForRoot = [];
|
|
|
pendingLegacyContextWarning.set(strictRoot, warningsForRoot);
|
|
|
}
|
|
|
|
|
|
warningsForRoot.push(fiber);
|
|
|
}
|
|
|
};
|
|
|
|
|
|
ReactStrictModeWarnings.flushLegacyContextWarning = function () {
|
|
|
pendingLegacyContextWarning.forEach(function (fiberArray, strictRoot) {
|
|
|
if (fiberArray.length === 0) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
var firstFiber = fiberArray[0];
|
|
|
var uniqueNames = new Set();
|
|
|
fiberArray.forEach(function (fiber) {
|
|
|
uniqueNames.add(getComponentNameFromFiber(fiber) || 'Component');
|
|
|
didWarnAboutLegacyContext.add(fiber.type);
|
|
|
});
|
|
|
var sortedNames = setToSortedString(uniqueNames);
|
|
|
|
|
|
try {
|
|
|
setCurrentFiber(firstFiber);
|
|
|
|
|
|
error('Legacy context API has been detected within a strict-mode tree.' + '\n\nThe old API will be supported in all 16.x releases, but applications ' + 'using it should migrate to the new version.' + '\n\nPlease update the following components: %s' + '\n\nLearn more about this warning here: https://reactjs.org/link/legacy-context', sortedNames);
|
|
|
} finally {
|
|
|
resetCurrentFiber();
|
|
|
}
|
|
|
});
|
|
|
};
|
|
|
|
|
|
ReactStrictModeWarnings.discardPendingWarnings = function () {
|
|
|
pendingComponentWillMountWarnings = [];
|
|
|
pendingUNSAFE_ComponentWillMountWarnings = [];
|
|
|
pendingComponentWillReceivePropsWarnings = [];
|
|
|
pendingUNSAFE_ComponentWillReceivePropsWarnings = [];
|
|
|
pendingComponentWillUpdateWarnings = [];
|
|
|
pendingUNSAFE_ComponentWillUpdateWarnings = [];
|
|
|
pendingLegacyContextWarning = new Map();
|
|
|
};
|
|
|
}
|
|
|
|
|
|
function resolveDefaultProps(Component, baseProps) {
|
|
|
if (Component && Component.defaultProps) {
|
|
|
// Resolve default props. Taken from ReactElement
|
|
|
var props = assign({}, baseProps);
|
|
|
var defaultProps = Component.defaultProps;
|
|
|
|
|
|
for (var propName in defaultProps) {
|
|
|
if (props[propName] === undefined) {
|
|
|
props[propName] = defaultProps[propName];
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return props;
|
|
|
}
|
|
|
|
|
|
return baseProps;
|
|
|
}
|
|
|
|
|
|
var valueCursor = createCursor(null);
|
|
|
var rendererSigil;
|
|
|
|
|
|
{
|
|
|
// Use this to detect multiple renderers using the same context
|
|
|
rendererSigil = {};
|
|
|
}
|
|
|
|
|
|
var currentlyRenderingFiber = null;
|
|
|
var lastContextDependency = null;
|
|
|
var lastFullyObservedContext = null;
|
|
|
var isDisallowedContextReadInDEV = false;
|
|
|
function resetContextDependencies() {
|
|
|
// This is called right before React yields execution, to ensure `readContext`
|
|
|
// cannot be called outside the render phase.
|
|
|
currentlyRenderingFiber = null;
|
|
|
lastContextDependency = null;
|
|
|
lastFullyObservedContext = null;
|
|
|
|
|
|
{
|
|
|
isDisallowedContextReadInDEV = false;
|
|
|
}
|
|
|
}
|
|
|
function enterDisallowedContextReadInDEV() {
|
|
|
{
|
|
|
isDisallowedContextReadInDEV = true;
|
|
|
}
|
|
|
}
|
|
|
function exitDisallowedContextReadInDEV() {
|
|
|
{
|
|
|
isDisallowedContextReadInDEV = false;
|
|
|
}
|
|
|
}
|
|
|
function pushProvider(providerFiber, context, nextValue) {
|
|
|
{
|
|
|
push(valueCursor, context._currentValue, providerFiber);
|
|
|
context._currentValue = nextValue;
|
|
|
|
|
|
{
|
|
|
if (context._currentRenderer !== undefined && context._currentRenderer !== null && context._currentRenderer !== rendererSigil) {
|
|
|
error('Detected multiple renderers concurrently rendering the ' + 'same context provider. This is currently unsupported.');
|
|
|
}
|
|
|
|
|
|
context._currentRenderer = rendererSigil;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
function popProvider(context, providerFiber) {
|
|
|
var currentValue = valueCursor.current;
|
|
|
pop(valueCursor, providerFiber);
|
|
|
|
|
|
{
|
|
|
{
|
|
|
context._currentValue = currentValue;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
function scheduleContextWorkOnParentPath(parent, renderLanes, propagationRoot) {
|
|
|
// Update the child lanes of all the ancestors, including the alternates.
|
|
|
var node = parent;
|
|
|
|
|
|
while (node !== null) {
|
|
|
var alternate = node.alternate;
|
|
|
|
|
|
if (!isSubsetOfLanes(node.childLanes, renderLanes)) {
|
|
|
node.childLanes = mergeLanes(node.childLanes, renderLanes);
|
|
|
|
|
|
if (alternate !== null) {
|
|
|
alternate.childLanes = mergeLanes(alternate.childLanes, renderLanes);
|
|
|
}
|
|
|
} else if (alternate !== null && !isSubsetOfLanes(alternate.childLanes, renderLanes)) {
|
|
|
alternate.childLanes = mergeLanes(alternate.childLanes, renderLanes);
|
|
|
}
|
|
|
|
|
|
if (node === propagationRoot) {
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
node = node.return;
|
|
|
}
|
|
|
|
|
|
{
|
|
|
if (node !== propagationRoot) {
|
|
|
error('Expected to find the propagation root when scheduling context work. ' + 'This error is likely caused by a bug in React. Please file an issue.');
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
function propagateContextChange(workInProgress, context, renderLanes) {
|
|
|
{
|
|
|
propagateContextChange_eager(workInProgress, context, renderLanes);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function propagateContextChange_eager(workInProgress, context, renderLanes) {
|
|
|
|
|
|
var fiber = workInProgress.child;
|
|
|
|
|
|
if (fiber !== null) {
|
|
|
// Set the return pointer of the child to the work-in-progress fiber.
|
|
|
fiber.return = workInProgress;
|
|
|
}
|
|
|
|
|
|
while (fiber !== null) {
|
|
|
var nextFiber = void 0; // Visit this fiber.
|
|
|
|
|
|
var list = fiber.dependencies;
|
|
|
|
|
|
if (list !== null) {
|
|
|
nextFiber = fiber.child;
|
|
|
var dependency = list.firstContext;
|
|
|
|
|
|
while (dependency !== null) {
|
|
|
// Check if the context matches.
|
|
|
if (dependency.context === context) {
|
|
|
// Match! Schedule an update on this fiber.
|
|
|
if (fiber.tag === ClassComponent) {
|
|
|
// Schedule a force update on the work-in-progress.
|
|
|
var lane = pickArbitraryLane(renderLanes);
|
|
|
var update = createUpdate(NoTimestamp, lane);
|
|
|
update.tag = ForceUpdate; // TODO: Because we don't have a work-in-progress, this will add the
|
|
|
// update to the current fiber, too, which means it will persist even if
|
|
|
// this render is thrown away. Since it's a race condition, not sure it's
|
|
|
// worth fixing.
|
|
|
// Inlined `enqueueUpdate` to remove interleaved update check
|
|
|
|
|
|
var updateQueue = fiber.updateQueue;
|
|
|
|
|
|
if (updateQueue === null) ; else {
|
|
|
var sharedQueue = updateQueue.shared;
|
|
|
var pending = sharedQueue.pending;
|
|
|
|
|
|
if (pending === null) {
|
|
|
// This is the first update. Create a circular list.
|
|
|
update.next = update;
|
|
|
} else {
|
|
|
update.next = pending.next;
|
|
|
pending.next = update;
|
|
|
}
|
|
|
|
|
|
sharedQueue.pending = update;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
fiber.lanes = mergeLanes(fiber.lanes, renderLanes);
|
|
|
var alternate = fiber.alternate;
|
|
|
|
|
|
if (alternate !== null) {
|
|
|
alternate.lanes = mergeLanes(alternate.lanes, renderLanes);
|
|
|
}
|
|
|
|
|
|
scheduleContextWorkOnParentPath(fiber.return, renderLanes, workInProgress); // Mark the updated lanes on the list, too.
|
|
|
|
|
|
list.lanes = mergeLanes(list.lanes, renderLanes); // Since we already found a match, we can stop traversing the
|
|
|
// dependency list.
|
|
|
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
dependency = dependency.next;
|
|
|
}
|
|
|
} else if (fiber.tag === ContextProvider) {
|
|
|
// Don't scan deeper if this is a matching provider
|
|
|
nextFiber = fiber.type === workInProgress.type ? null : fiber.child;
|
|
|
} else if (fiber.tag === DehydratedFragment) {
|
|
|
// If a dehydrated suspense boundary is in this subtree, we don't know
|
|
|
// if it will have any context consumers in it. The best we can do is
|
|
|
// mark it as having updates.
|
|
|
var parentSuspense = fiber.return;
|
|
|
|
|
|
if (parentSuspense === null) {
|
|
|
throw new Error('We just came from a parent so we must have had a parent. This is a bug in React.');
|
|
|
}
|
|
|
|
|
|
parentSuspense.lanes = mergeLanes(parentSuspense.lanes, renderLanes);
|
|
|
var _alternate = parentSuspense.alternate;
|
|
|
|
|
|
if (_alternate !== null) {
|
|
|
_alternate.lanes = mergeLanes(_alternate.lanes, renderLanes);
|
|
|
} // This is intentionally passing this fiber as the parent
|
|
|
// because we want to schedule this fiber as having work
|
|
|
// on its children. We'll use the childLanes on
|
|
|
// this fiber to indicate that a context has changed.
|
|
|
|
|
|
|
|
|
scheduleContextWorkOnParentPath(parentSuspense, renderLanes, workInProgress);
|
|
|
nextFiber = fiber.sibling;
|
|
|
} else {
|
|
|
// Traverse down.
|
|
|
nextFiber = fiber.child;
|
|
|
}
|
|
|
|
|
|
if (nextFiber !== null) {
|
|
|
// Set the return pointer of the child to the work-in-progress fiber.
|
|
|
nextFiber.return = fiber;
|
|
|
} else {
|
|
|
// No child. Traverse to next sibling.
|
|
|
nextFiber = fiber;
|
|
|
|
|
|
while (nextFiber !== null) {
|
|
|
if (nextFiber === workInProgress) {
|
|
|
// We're back to the root of this subtree. Exit.
|
|
|
nextFiber = null;
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
var sibling = nextFiber.sibling;
|
|
|
|
|
|
if (sibling !== null) {
|
|
|
// Set the return pointer of the sibling to the work-in-progress fiber.
|
|
|
sibling.return = nextFiber.return;
|
|
|
nextFiber = sibling;
|
|
|
break;
|
|
|
} // No more siblings. Traverse up.
|
|
|
|
|
|
|
|
|
nextFiber = nextFiber.return;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
fiber = nextFiber;
|
|
|
}
|
|
|
}
|
|
|
function prepareToReadContext(workInProgress, renderLanes) {
|
|
|
currentlyRenderingFiber = workInProgress;
|
|
|
lastContextDependency = null;
|
|
|
lastFullyObservedContext = null;
|
|
|
var dependencies = workInProgress.dependencies;
|
|
|
|
|
|
if (dependencies !== null) {
|
|
|
{
|
|
|
var firstContext = dependencies.firstContext;
|
|
|
|
|
|
if (firstContext !== null) {
|
|
|
if (includesSomeLane(dependencies.lanes, renderLanes)) {
|
|
|
// Context list has a pending update. Mark that this fiber performed work.
|
|
|
markWorkInProgressReceivedUpdate();
|
|
|
} // Reset the work-in-progress list
|
|
|
|
|
|
|
|
|
dependencies.firstContext = null;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
function readContext(context) {
|
|
|
{
|
|
|
// This warning would fire if you read context inside a Hook like useMemo.
|
|
|
// Unlike the class check below, it's not enforced in production for perf.
|
|
|
if (isDisallowedContextReadInDEV) {
|
|
|
error('Context can only be read while React is rendering. ' + 'In classes, you can read it in the render method or getDerivedStateFromProps. ' + 'In function components, you can read it directly in the function body, but not ' + 'inside Hooks like useReducer() or useMemo().');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var value = context._currentValue ;
|
|
|
|
|
|
if (lastFullyObservedContext === context) ; else {
|
|
|
var contextItem = {
|
|
|
context: context,
|
|
|
memoizedValue: value,
|
|
|
next: null
|
|
|
};
|
|
|
|
|
|
if (lastContextDependency === null) {
|
|
|
if (currentlyRenderingFiber === null) {
|
|
|
throw new Error('Context can only be read while React is rendering. ' + 'In classes, you can read it in the render method or getDerivedStateFromProps. ' + 'In function components, you can read it directly in the function body, but not ' + 'inside Hooks like useReducer() or useMemo().');
|
|
|
} // This is the first dependency for this component. Create a new list.
|
|
|
|
|
|
|
|
|
lastContextDependency = contextItem;
|
|
|
currentlyRenderingFiber.dependencies = {
|
|
|
lanes: NoLanes,
|
|
|
firstContext: contextItem
|
|
|
};
|
|
|
} else {
|
|
|
// Append a new context item.
|
|
|
lastContextDependency = lastContextDependency.next = contextItem;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return value;
|
|
|
}
|
|
|
|
|
|
// render. When this render exits, either because it finishes or because it is
|
|
|
// interrupted, the interleaved updates will be transferred onto the main part
|
|
|
// of the queue.
|
|
|
|
|
|
var concurrentQueues = null;
|
|
|
function pushConcurrentUpdateQueue(queue) {
|
|
|
if (concurrentQueues === null) {
|
|
|
concurrentQueues = [queue];
|
|
|
} else {
|
|
|
concurrentQueues.push(queue);
|
|
|
}
|
|
|
}
|
|
|
function finishQueueingConcurrentUpdates() {
|
|
|
// Transfer the interleaved updates onto the main queue. Each queue has a
|
|
|
// `pending` field and an `interleaved` field. When they are not null, they
|
|
|
// point to the last node in a circular linked list. We need to append the
|
|
|
// interleaved list to the end of the pending list by joining them into a
|
|
|
// single, circular list.
|
|
|
if (concurrentQueues !== null) {
|
|
|
for (var i = 0; i < concurrentQueues.length; i++) {
|
|
|
var queue = concurrentQueues[i];
|
|
|
var lastInterleavedUpdate = queue.interleaved;
|
|
|
|
|
|
if (lastInterleavedUpdate !== null) {
|
|
|
queue.interleaved = null;
|
|
|
var firstInterleavedUpdate = lastInterleavedUpdate.next;
|
|
|
var lastPendingUpdate = queue.pending;
|
|
|
|
|
|
if (lastPendingUpdate !== null) {
|
|
|
var firstPendingUpdate = lastPendingUpdate.next;
|
|
|
lastPendingUpdate.next = firstInterleavedUpdate;
|
|
|
lastInterleavedUpdate.next = firstPendingUpdate;
|
|
|
}
|
|
|
|
|
|
queue.pending = lastInterleavedUpdate;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
concurrentQueues = null;
|
|
|
}
|
|
|
}
|
|
|
function enqueueConcurrentHookUpdate(fiber, queue, update, lane) {
|
|
|
var interleaved = queue.interleaved;
|
|
|
|
|
|
if (interleaved === null) {
|
|
|
// This is the first update. Create a circular list.
|
|
|
update.next = update; // At the end of the current render, this queue's interleaved updates will
|
|
|
// be transferred to the pending queue.
|
|
|
|
|
|
pushConcurrentUpdateQueue(queue);
|
|
|
} else {
|
|
|
update.next = interleaved.next;
|
|
|
interleaved.next = update;
|
|
|
}
|
|
|
|
|
|
queue.interleaved = update;
|
|
|
return markUpdateLaneFromFiberToRoot(fiber, lane);
|
|
|
}
|
|
|
function enqueueConcurrentHookUpdateAndEagerlyBailout(fiber, queue, update, lane) {
|
|
|
var interleaved = queue.interleaved;
|
|
|
|
|
|
if (interleaved === null) {
|
|
|
// This is the first update. Create a circular list.
|
|
|
update.next = update; // At the end of the current render, this queue's interleaved updates will
|
|
|
// be transferred to the pending queue.
|
|
|
|
|
|
pushConcurrentUpdateQueue(queue);
|
|
|
} else {
|
|
|
update.next = interleaved.next;
|
|
|
interleaved.next = update;
|
|
|
}
|
|
|
|
|
|
queue.interleaved = update;
|
|
|
}
|
|
|
function enqueueConcurrentClassUpdate(fiber, queue, update, lane) {
|
|
|
var interleaved = queue.interleaved;
|
|
|
|
|
|
if (interleaved === null) {
|
|
|
// This is the first update. Create a circular list.
|
|
|
update.next = update; // At the end of the current render, this queue's interleaved updates will
|
|
|
// be transferred to the pending queue.
|
|
|
|
|
|
pushConcurrentUpdateQueue(queue);
|
|
|
} else {
|
|
|
update.next = interleaved.next;
|
|
|
interleaved.next = update;
|
|
|
}
|
|
|
|
|
|
queue.interleaved = update;
|
|
|
return markUpdateLaneFromFiberToRoot(fiber, lane);
|
|
|
}
|
|
|
function enqueueConcurrentRenderForLane(fiber, lane) {
|
|
|
return markUpdateLaneFromFiberToRoot(fiber, lane);
|
|
|
} // Calling this function outside this module should only be done for backwards
|
|
|
// compatibility and should always be accompanied by a warning.
|
|
|
|
|
|
var unsafe_markUpdateLaneFromFiberToRoot = markUpdateLaneFromFiberToRoot;
|
|
|
|
|
|
function markUpdateLaneFromFiberToRoot(sourceFiber, lane) {
|
|
|
// Update the source fiber's lanes
|
|
|
sourceFiber.lanes = mergeLanes(sourceFiber.lanes, lane);
|
|
|
var alternate = sourceFiber.alternate;
|
|
|
|
|
|
if (alternate !== null) {
|
|
|
alternate.lanes = mergeLanes(alternate.lanes, lane);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
if (alternate === null && (sourceFiber.flags & (Placement | Hydrating)) !== NoFlags) {
|
|
|
warnAboutUpdateOnNotYetMountedFiberInDEV(sourceFiber);
|
|
|
}
|
|
|
} // Walk the parent path to the root and update the child lanes.
|
|
|
|
|
|
|
|
|
var node = sourceFiber;
|
|
|
var parent = sourceFiber.return;
|
|
|
|
|
|
while (parent !== null) {
|
|
|
parent.childLanes = mergeLanes(parent.childLanes, lane);
|
|
|
alternate = parent.alternate;
|
|
|
|
|
|
if (alternate !== null) {
|
|
|
alternate.childLanes = mergeLanes(alternate.childLanes, lane);
|
|
|
} else {
|
|
|
{
|
|
|
if ((parent.flags & (Placement | Hydrating)) !== NoFlags) {
|
|
|
warnAboutUpdateOnNotYetMountedFiberInDEV(sourceFiber);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
node = parent;
|
|
|
parent = parent.return;
|
|
|
}
|
|
|
|
|
|
if (node.tag === HostRoot) {
|
|
|
var root = node.stateNode;
|
|
|
return root;
|
|
|
} else {
|
|
|
return null;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var UpdateState = 0;
|
|
|
var ReplaceState = 1;
|
|
|
var ForceUpdate = 2;
|
|
|
var CaptureUpdate = 3; // Global state that is reset at the beginning of calling `processUpdateQueue`.
|
|
|
// It should only be read right after calling `processUpdateQueue`, via
|
|
|
// `checkHasForceUpdateAfterProcessing`.
|
|
|
|
|
|
var hasForceUpdate = false;
|
|
|
var didWarnUpdateInsideUpdate;
|
|
|
var currentlyProcessingQueue;
|
|
|
|
|
|
{
|
|
|
didWarnUpdateInsideUpdate = false;
|
|
|
currentlyProcessingQueue = null;
|
|
|
}
|
|
|
|
|
|
function initializeUpdateQueue(fiber) {
|
|
|
var queue = {
|
|
|
baseState: fiber.memoizedState,
|
|
|
firstBaseUpdate: null,
|
|
|
lastBaseUpdate: null,
|
|
|
shared: {
|
|
|
pending: null,
|
|
|
interleaved: null,
|
|
|
lanes: NoLanes
|
|
|
},
|
|
|
effects: null
|
|
|
};
|
|
|
fiber.updateQueue = queue;
|
|
|
}
|
|
|
function cloneUpdateQueue(current, workInProgress) {
|
|
|
// Clone the update queue from current. Unless it's already a clone.
|
|
|
var queue = workInProgress.updateQueue;
|
|
|
var currentQueue = current.updateQueue;
|
|
|
|
|
|
if (queue === currentQueue) {
|
|
|
var clone = {
|
|
|
baseState: currentQueue.baseState,
|
|
|
firstBaseUpdate: currentQueue.firstBaseUpdate,
|
|
|
lastBaseUpdate: currentQueue.lastBaseUpdate,
|
|
|
shared: currentQueue.shared,
|
|
|
effects: currentQueue.effects
|
|
|
};
|
|
|
workInProgress.updateQueue = clone;
|
|
|
}
|
|
|
}
|
|
|
function createUpdate(eventTime, lane) {
|
|
|
var update = {
|
|
|
eventTime: eventTime,
|
|
|
lane: lane,
|
|
|
tag: UpdateState,
|
|
|
payload: null,
|
|
|
callback: null,
|
|
|
next: null
|
|
|
};
|
|
|
return update;
|
|
|
}
|
|
|
function enqueueUpdate(fiber, update, lane) {
|
|
|
var updateQueue = fiber.updateQueue;
|
|
|
|
|
|
if (updateQueue === null) {
|
|
|
// Only occurs if the fiber has been unmounted.
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
var sharedQueue = updateQueue.shared;
|
|
|
|
|
|
{
|
|
|
if (currentlyProcessingQueue === sharedQueue && !didWarnUpdateInsideUpdate) {
|
|
|
error('An update (setState, replaceState, or forceUpdate) was scheduled ' + 'from inside an update function. Update functions should be pure, ' + 'with zero side-effects. Consider using componentDidUpdate or a ' + 'callback.');
|
|
|
|
|
|
didWarnUpdateInsideUpdate = true;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (isUnsafeClassRenderPhaseUpdate()) {
|
|
|
// This is an unsafe render phase update. Add directly to the update
|
|
|
// queue so we can process it immediately during the current render.
|
|
|
var pending = sharedQueue.pending;
|
|
|
|
|
|
if (pending === null) {
|
|
|
// This is the first update. Create a circular list.
|
|
|
update.next = update;
|
|
|
} else {
|
|
|
update.next = pending.next;
|
|
|
pending.next = update;
|
|
|
}
|
|
|
|
|
|
sharedQueue.pending = update; // Update the childLanes even though we're most likely already rendering
|
|
|
// this fiber. This is for backwards compatibility in the case where you
|
|
|
// update a different component during render phase than the one that is
|
|
|
// currently renderings (a pattern that is accompanied by a warning).
|
|
|
|
|
|
return unsafe_markUpdateLaneFromFiberToRoot(fiber, lane);
|
|
|
} else {
|
|
|
return enqueueConcurrentClassUpdate(fiber, sharedQueue, update, lane);
|
|
|
}
|
|
|
}
|
|
|
function entangleTransitions(root, fiber, lane) {
|
|
|
var updateQueue = fiber.updateQueue;
|
|
|
|
|
|
if (updateQueue === null) {
|
|
|
// Only occurs if the fiber has been unmounted.
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
var sharedQueue = updateQueue.shared;
|
|
|
|
|
|
if (isTransitionLane(lane)) {
|
|
|
var queueLanes = sharedQueue.lanes; // If any entangled lanes are no longer pending on the root, then they must
|
|
|
// have finished. We can remove them from the shared queue, which represents
|
|
|
// a superset of the actually pending lanes. In some cases we may entangle
|
|
|
// more than we need to, but that's OK. In fact it's worse if we *don't*
|
|
|
// entangle when we should.
|
|
|
|
|
|
queueLanes = intersectLanes(queueLanes, root.pendingLanes); // Entangle the new transition lane with the other transition lanes.
|
|
|
|
|
|
var newQueueLanes = mergeLanes(queueLanes, lane);
|
|
|
sharedQueue.lanes = newQueueLanes; // Even if queue.lanes already include lane, we don't know for certain if
|
|
|
// the lane finished since the last time we entangled it. So we need to
|
|
|
// entangle it again, just to be sure.
|
|
|
|
|
|
markRootEntangled(root, newQueueLanes);
|
|
|
}
|
|
|
}
|
|
|
function enqueueCapturedUpdate(workInProgress, capturedUpdate) {
|
|
|
// Captured updates are updates that are thrown by a child during the render
|
|
|
// phase. They should be discarded if the render is aborted. Therefore,
|
|
|
// we should only put them on the work-in-progress queue, not the current one.
|
|
|
var queue = workInProgress.updateQueue; // Check if the work-in-progress queue is a clone.
|
|
|
|
|
|
var current = workInProgress.alternate;
|
|
|
|
|
|
if (current !== null) {
|
|
|
var currentQueue = current.updateQueue;
|
|
|
|
|
|
if (queue === currentQueue) {
|
|
|
// The work-in-progress queue is the same as current. This happens when
|
|
|
// we bail out on a parent fiber that then captures an error thrown by
|
|
|
// a child. Since we want to append the update only to the work-in
|
|
|
// -progress queue, we need to clone the updates. We usually clone during
|
|
|
// processUpdateQueue, but that didn't happen in this case because we
|
|
|
// skipped over the parent when we bailed out.
|
|
|
var newFirst = null;
|
|
|
var newLast = null;
|
|
|
var firstBaseUpdate = queue.firstBaseUpdate;
|
|
|
|
|
|
if (firstBaseUpdate !== null) {
|
|
|
// Loop through the updates and clone them.
|
|
|
var update = firstBaseUpdate;
|
|
|
|
|
|
do {
|
|
|
var clone = {
|
|
|
eventTime: update.eventTime,
|
|
|
lane: update.lane,
|
|
|
tag: update.tag,
|
|
|
payload: update.payload,
|
|
|
callback: update.callback,
|
|
|
next: null
|
|
|
};
|
|
|
|
|
|
if (newLast === null) {
|
|
|
newFirst = newLast = clone;
|
|
|
} else {
|
|
|
newLast.next = clone;
|
|
|
newLast = clone;
|
|
|
}
|
|
|
|
|
|
update = update.next;
|
|
|
} while (update !== null); // Append the captured update the end of the cloned list.
|
|
|
|
|
|
|
|
|
if (newLast === null) {
|
|
|
newFirst = newLast = capturedUpdate;
|
|
|
} else {
|
|
|
newLast.next = capturedUpdate;
|
|
|
newLast = capturedUpdate;
|
|
|
}
|
|
|
} else {
|
|
|
// There are no base updates.
|
|
|
newFirst = newLast = capturedUpdate;
|
|
|
}
|
|
|
|
|
|
queue = {
|
|
|
baseState: currentQueue.baseState,
|
|
|
firstBaseUpdate: newFirst,
|
|
|
lastBaseUpdate: newLast,
|
|
|
shared: currentQueue.shared,
|
|
|
effects: currentQueue.effects
|
|
|
};
|
|
|
workInProgress.updateQueue = queue;
|
|
|
return;
|
|
|
}
|
|
|
} // Append the update to the end of the list.
|
|
|
|
|
|
|
|
|
var lastBaseUpdate = queue.lastBaseUpdate;
|
|
|
|
|
|
if (lastBaseUpdate === null) {
|
|
|
queue.firstBaseUpdate = capturedUpdate;
|
|
|
} else {
|
|
|
lastBaseUpdate.next = capturedUpdate;
|
|
|
}
|
|
|
|
|
|
queue.lastBaseUpdate = capturedUpdate;
|
|
|
}
|
|
|
|
|
|
function getStateFromUpdate(workInProgress, queue, update, prevState, nextProps, instance) {
|
|
|
switch (update.tag) {
|
|
|
case ReplaceState:
|
|
|
{
|
|
|
var payload = update.payload;
|
|
|
|
|
|
if (typeof payload === 'function') {
|
|
|
// Updater function
|
|
|
{
|
|
|
enterDisallowedContextReadInDEV();
|
|
|
}
|
|
|
|
|
|
var nextState = payload.call(instance, prevState, nextProps);
|
|
|
|
|
|
{
|
|
|
if ( workInProgress.mode & StrictLegacyMode) {
|
|
|
setIsStrictModeForDevtools(true);
|
|
|
|
|
|
try {
|
|
|
payload.call(instance, prevState, nextProps);
|
|
|
} finally {
|
|
|
setIsStrictModeForDevtools(false);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
exitDisallowedContextReadInDEV();
|
|
|
}
|
|
|
|
|
|
return nextState;
|
|
|
} // State object
|
|
|
|
|
|
|
|
|
return payload;
|
|
|
}
|
|
|
|
|
|
case CaptureUpdate:
|
|
|
{
|
|
|
workInProgress.flags = workInProgress.flags & ~ShouldCapture | DidCapture;
|
|
|
}
|
|
|
// Intentional fallthrough
|
|
|
|
|
|
case UpdateState:
|
|
|
{
|
|
|
var _payload = update.payload;
|
|
|
var partialState;
|
|
|
|
|
|
if (typeof _payload === 'function') {
|
|
|
// Updater function
|
|
|
{
|
|
|
enterDisallowedContextReadInDEV();
|
|
|
}
|
|
|
|
|
|
partialState = _payload.call(instance, prevState, nextProps);
|
|
|
|
|
|
{
|
|
|
if ( workInProgress.mode & StrictLegacyMode) {
|
|
|
setIsStrictModeForDevtools(true);
|
|
|
|
|
|
try {
|
|
|
_payload.call(instance, prevState, nextProps);
|
|
|
} finally {
|
|
|
setIsStrictModeForDevtools(false);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
exitDisallowedContextReadInDEV();
|
|
|
}
|
|
|
} else {
|
|
|
// Partial state object
|
|
|
partialState = _payload;
|
|
|
}
|
|
|
|
|
|
if (partialState === null || partialState === undefined) {
|
|
|
// Null and undefined are treated as no-ops.
|
|
|
return prevState;
|
|
|
} // Merge the partial state and the previous state.
|
|
|
|
|
|
|
|
|
return assign({}, prevState, partialState);
|
|
|
}
|
|
|
|
|
|
case ForceUpdate:
|
|
|
{
|
|
|
hasForceUpdate = true;
|
|
|
return prevState;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return prevState;
|
|
|
}
|
|
|
|
|
|
function processUpdateQueue(workInProgress, props, instance, renderLanes) {
|
|
|
// This is always non-null on a ClassComponent or HostRoot
|
|
|
var queue = workInProgress.updateQueue;
|
|
|
hasForceUpdate = false;
|
|
|
|
|
|
{
|
|
|
currentlyProcessingQueue = queue.shared;
|
|
|
}
|
|
|
|
|
|
var firstBaseUpdate = queue.firstBaseUpdate;
|
|
|
var lastBaseUpdate = queue.lastBaseUpdate; // Check if there are pending updates. If so, transfer them to the base queue.
|
|
|
|
|
|
var pendingQueue = queue.shared.pending;
|
|
|
|
|
|
if (pendingQueue !== null) {
|
|
|
queue.shared.pending = null; // The pending queue is circular. Disconnect the pointer between first
|
|
|
// and last so that it's non-circular.
|
|
|
|
|
|
var lastPendingUpdate = pendingQueue;
|
|
|
var firstPendingUpdate = lastPendingUpdate.next;
|
|
|
lastPendingUpdate.next = null; // Append pending updates to base queue
|
|
|
|
|
|
if (lastBaseUpdate === null) {
|
|
|
firstBaseUpdate = firstPendingUpdate;
|
|
|
} else {
|
|
|
lastBaseUpdate.next = firstPendingUpdate;
|
|
|
}
|
|
|
|
|
|
lastBaseUpdate = lastPendingUpdate; // If there's a current queue, and it's different from the base queue, then
|
|
|
// we need to transfer the updates to that queue, too. Because the base
|
|
|
// queue is a singly-linked list with no cycles, we can append to both
|
|
|
// lists and take advantage of structural sharing.
|
|
|
// TODO: Pass `current` as argument
|
|
|
|
|
|
var current = workInProgress.alternate;
|
|
|
|
|
|
if (current !== null) {
|
|
|
// This is always non-null on a ClassComponent or HostRoot
|
|
|
var currentQueue = current.updateQueue;
|
|
|
var currentLastBaseUpdate = currentQueue.lastBaseUpdate;
|
|
|
|
|
|
if (currentLastBaseUpdate !== lastBaseUpdate) {
|
|
|
if (currentLastBaseUpdate === null) {
|
|
|
currentQueue.firstBaseUpdate = firstPendingUpdate;
|
|
|
} else {
|
|
|
currentLastBaseUpdate.next = firstPendingUpdate;
|
|
|
}
|
|
|
|
|
|
currentQueue.lastBaseUpdate = lastPendingUpdate;
|
|
|
}
|
|
|
}
|
|
|
} // These values may change as we process the queue.
|
|
|
|
|
|
|
|
|
if (firstBaseUpdate !== null) {
|
|
|
// Iterate through the list of updates to compute the result.
|
|
|
var newState = queue.baseState; // TODO: Don't need to accumulate this. Instead, we can remove renderLanes
|
|
|
// from the original lanes.
|
|
|
|
|
|
var newLanes = NoLanes;
|
|
|
var newBaseState = null;
|
|
|
var newFirstBaseUpdate = null;
|
|
|
var newLastBaseUpdate = null;
|
|
|
var update = firstBaseUpdate;
|
|
|
|
|
|
do {
|
|
|
var updateLane = update.lane;
|
|
|
var updateEventTime = update.eventTime;
|
|
|
|
|
|
if (!isSubsetOfLanes(renderLanes, updateLane)) {
|
|
|
// Priority is insufficient. Skip this update. If this is the first
|
|
|
// skipped update, the previous update/state is the new base
|
|
|
// update/state.
|
|
|
var clone = {
|
|
|
eventTime: updateEventTime,
|
|
|
lane: updateLane,
|
|
|
tag: update.tag,
|
|
|
payload: update.payload,
|
|
|
callback: update.callback,
|
|
|
next: null
|
|
|
};
|
|
|
|
|
|
if (newLastBaseUpdate === null) {
|
|
|
newFirstBaseUpdate = newLastBaseUpdate = clone;
|
|
|
newBaseState = newState;
|
|
|
} else {
|
|
|
newLastBaseUpdate = newLastBaseUpdate.next = clone;
|
|
|
} // Update the remaining priority in the queue.
|
|
|
|
|
|
|
|
|
newLanes = mergeLanes(newLanes, updateLane);
|
|
|
} else {
|
|
|
// This update does have sufficient priority.
|
|
|
if (newLastBaseUpdate !== null) {
|
|
|
var _clone = {
|
|
|
eventTime: updateEventTime,
|
|
|
// This update is going to be committed so we never want uncommit
|
|
|
// it. Using NoLane works because 0 is a subset of all bitmasks, so
|
|
|
// this will never be skipped by the check above.
|
|
|
lane: NoLane,
|
|
|
tag: update.tag,
|
|
|
payload: update.payload,
|
|
|
callback: update.callback,
|
|
|
next: null
|
|
|
};
|
|
|
newLastBaseUpdate = newLastBaseUpdate.next = _clone;
|
|
|
} // Process this update.
|
|
|
|
|
|
|
|
|
newState = getStateFromUpdate(workInProgress, queue, update, newState, props, instance);
|
|
|
var callback = update.callback;
|
|
|
|
|
|
if (callback !== null && // If the update was already committed, we should not queue its
|
|
|
// callback again.
|
|
|
update.lane !== NoLane) {
|
|
|
workInProgress.flags |= Callback;
|
|
|
var effects = queue.effects;
|
|
|
|
|
|
if (effects === null) {
|
|
|
queue.effects = [update];
|
|
|
} else {
|
|
|
effects.push(update);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
update = update.next;
|
|
|
|
|
|
if (update === null) {
|
|
|
pendingQueue = queue.shared.pending;
|
|
|
|
|
|
if (pendingQueue === null) {
|
|
|
break;
|
|
|
} else {
|
|
|
// An update was scheduled from inside a reducer. Add the new
|
|
|
// pending updates to the end of the list and keep processing.
|
|
|
var _lastPendingUpdate = pendingQueue; // Intentionally unsound. Pending updates form a circular list, but we
|
|
|
// unravel them when transferring them to the base queue.
|
|
|
|
|
|
var _firstPendingUpdate = _lastPendingUpdate.next;
|
|
|
_lastPendingUpdate.next = null;
|
|
|
update = _firstPendingUpdate;
|
|
|
queue.lastBaseUpdate = _lastPendingUpdate;
|
|
|
queue.shared.pending = null;
|
|
|
}
|
|
|
}
|
|
|
} while (true);
|
|
|
|
|
|
if (newLastBaseUpdate === null) {
|
|
|
newBaseState = newState;
|
|
|
}
|
|
|
|
|
|
queue.baseState = newBaseState;
|
|
|
queue.firstBaseUpdate = newFirstBaseUpdate;
|
|
|
queue.lastBaseUpdate = newLastBaseUpdate; // Interleaved updates are stored on a separate queue. We aren't going to
|
|
|
// process them during this render, but we do need to track which lanes
|
|
|
// are remaining.
|
|
|
|
|
|
var lastInterleaved = queue.shared.interleaved;
|
|
|
|
|
|
if (lastInterleaved !== null) {
|
|
|
var interleaved = lastInterleaved;
|
|
|
|
|
|
do {
|
|
|
newLanes = mergeLanes(newLanes, interleaved.lane);
|
|
|
interleaved = interleaved.next;
|
|
|
} while (interleaved !== lastInterleaved);
|
|
|
} else if (firstBaseUpdate === null) {
|
|
|
// `queue.lanes` is used for entangling transitions. We can set it back to
|
|
|
// zero once the queue is empty.
|
|
|
queue.shared.lanes = NoLanes;
|
|
|
} // Set the remaining expiration time to be whatever is remaining in the queue.
|
|
|
// This should be fine because the only two other things that contribute to
|
|
|
// expiration time are props and context. We're already in the middle of the
|
|
|
// begin phase by the time we start processing the queue, so we've already
|
|
|
// dealt with the props. Context in components that specify
|
|
|
// shouldComponentUpdate is tricky; but we'll have to account for
|
|
|
// that regardless.
|
|
|
|
|
|
|
|
|
markSkippedUpdateLanes(newLanes);
|
|
|
workInProgress.lanes = newLanes;
|
|
|
workInProgress.memoizedState = newState;
|
|
|
}
|
|
|
|
|
|
{
|
|
|
currentlyProcessingQueue = null;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function callCallback(callback, context) {
|
|
|
if (typeof callback !== 'function') {
|
|
|
throw new Error('Invalid argument passed as callback. Expected a function. Instead ' + ("received: " + callback));
|
|
|
}
|
|
|
|
|
|
callback.call(context);
|
|
|
}
|
|
|
|
|
|
function resetHasForceUpdateBeforeProcessing() {
|
|
|
hasForceUpdate = false;
|
|
|
}
|
|
|
function checkHasForceUpdateAfterProcessing() {
|
|
|
return hasForceUpdate;
|
|
|
}
|
|
|
function commitUpdateQueue(finishedWork, finishedQueue, instance) {
|
|
|
// Commit the effects
|
|
|
var effects = finishedQueue.effects;
|
|
|
finishedQueue.effects = null;
|
|
|
|
|
|
if (effects !== null) {
|
|
|
for (var i = 0; i < effects.length; i++) {
|
|
|
var effect = effects[i];
|
|
|
var callback = effect.callback;
|
|
|
|
|
|
if (callback !== null) {
|
|
|
effect.callback = null;
|
|
|
callCallback(callback, instance);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var fakeInternalInstance = {}; // React.Component uses a shared frozen object by default.
|
|
|
// We'll use it to determine whether we need to initialize legacy refs.
|
|
|
|
|
|
var emptyRefsObject = new React.Component().refs;
|
|
|
var didWarnAboutStateAssignmentForComponent;
|
|
|
var didWarnAboutUninitializedState;
|
|
|
var didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate;
|
|
|
var didWarnAboutLegacyLifecyclesAndDerivedState;
|
|
|
var didWarnAboutUndefinedDerivedState;
|
|
|
var warnOnUndefinedDerivedState;
|
|
|
var warnOnInvalidCallback;
|
|
|
var didWarnAboutDirectlyAssigningPropsToState;
|
|
|
var didWarnAboutContextTypeAndContextTypes;
|
|
|
var didWarnAboutInvalidateContextType;
|
|
|
|
|
|
{
|
|
|
didWarnAboutStateAssignmentForComponent = new Set();
|
|
|
didWarnAboutUninitializedState = new Set();
|
|
|
didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate = new Set();
|
|
|
didWarnAboutLegacyLifecyclesAndDerivedState = new Set();
|
|
|
didWarnAboutDirectlyAssigningPropsToState = new Set();
|
|
|
didWarnAboutUndefinedDerivedState = new Set();
|
|
|
didWarnAboutContextTypeAndContextTypes = new Set();
|
|
|
didWarnAboutInvalidateContextType = new Set();
|
|
|
var didWarnOnInvalidCallback = new Set();
|
|
|
|
|
|
warnOnInvalidCallback = function (callback, callerName) {
|
|
|
if (callback === null || typeof callback === 'function') {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
var key = callerName + '_' + callback;
|
|
|
|
|
|
if (!didWarnOnInvalidCallback.has(key)) {
|
|
|
didWarnOnInvalidCallback.add(key);
|
|
|
|
|
|
error('%s(...): Expected the last optional `callback` argument to be a ' + 'function. Instead received: %s.', callerName, callback);
|
|
|
}
|
|
|
};
|
|
|
|
|
|
warnOnUndefinedDerivedState = function (type, partialState) {
|
|
|
if (partialState === undefined) {
|
|
|
var componentName = getComponentNameFromType(type) || 'Component';
|
|
|
|
|
|
if (!didWarnAboutUndefinedDerivedState.has(componentName)) {
|
|
|
didWarnAboutUndefinedDerivedState.add(componentName);
|
|
|
|
|
|
error('%s.getDerivedStateFromProps(): A valid state object (or null) must be returned. ' + 'You have returned undefined.', componentName);
|
|
|
}
|
|
|
}
|
|
|
}; // This is so gross but it's at least non-critical and can be removed if
|
|
|
// it causes problems. This is meant to give a nicer error message for
|
|
|
// ReactDOM15.unstable_renderSubtreeIntoContainer(reactDOM16Component,
|
|
|
// ...)) which otherwise throws a "_processChildContext is not a function"
|
|
|
// exception.
|
|
|
|
|
|
|
|
|
Object.defineProperty(fakeInternalInstance, '_processChildContext', {
|
|
|
enumerable: false,
|
|
|
value: function () {
|
|
|
throw new Error('_processChildContext is not available in React 16+. This likely ' + 'means you have multiple copies of React and are attempting to nest ' + 'a React 15 tree inside a React 16 tree using ' + "unstable_renderSubtreeIntoContainer, which isn't supported. Try " + 'to make sure you have only one copy of React (and ideally, switch ' + 'to ReactDOM.createPortal).');
|
|
|
}
|
|
|
});
|
|
|
Object.freeze(fakeInternalInstance);
|
|
|
}
|
|
|
|
|
|
function applyDerivedStateFromProps(workInProgress, ctor, getDerivedStateFromProps, nextProps) {
|
|
|
var prevState = workInProgress.memoizedState;
|
|
|
var partialState = getDerivedStateFromProps(nextProps, prevState);
|
|
|
|
|
|
{
|
|
|
if ( workInProgress.mode & StrictLegacyMode) {
|
|
|
setIsStrictModeForDevtools(true);
|
|
|
|
|
|
try {
|
|
|
// Invoke the function an extra time to help detect side-effects.
|
|
|
partialState = getDerivedStateFromProps(nextProps, prevState);
|
|
|
} finally {
|
|
|
setIsStrictModeForDevtools(false);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
warnOnUndefinedDerivedState(ctor, partialState);
|
|
|
} // Merge the partial state and the previous state.
|
|
|
|
|
|
|
|
|
var memoizedState = partialState === null || partialState === undefined ? prevState : assign({}, prevState, partialState);
|
|
|
workInProgress.memoizedState = memoizedState; // Once the update queue is empty, persist the derived state onto the
|
|
|
// base state.
|
|
|
|
|
|
if (workInProgress.lanes === NoLanes) {
|
|
|
// Queue is always non-null for classes
|
|
|
var updateQueue = workInProgress.updateQueue;
|
|
|
updateQueue.baseState = memoizedState;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var classComponentUpdater = {
|
|
|
isMounted: isMounted,
|
|
|
enqueueSetState: function (inst, payload, callback) {
|
|
|
var fiber = get(inst);
|
|
|
var eventTime = requestEventTime();
|
|
|
var lane = requestUpdateLane(fiber);
|
|
|
var update = createUpdate(eventTime, lane);
|
|
|
update.payload = payload;
|
|
|
|
|
|
if (callback !== undefined && callback !== null) {
|
|
|
{
|
|
|
warnOnInvalidCallback(callback, 'setState');
|
|
|
}
|
|
|
|
|
|
update.callback = callback;
|
|
|
}
|
|
|
|
|
|
var root = enqueueUpdate(fiber, update, lane);
|
|
|
|
|
|
if (root !== null) {
|
|
|
scheduleUpdateOnFiber(root, fiber, lane, eventTime);
|
|
|
entangleTransitions(root, fiber, lane);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
markStateUpdateScheduled(fiber, lane);
|
|
|
}
|
|
|
},
|
|
|
enqueueReplaceState: function (inst, payload, callback) {
|
|
|
var fiber = get(inst);
|
|
|
var eventTime = requestEventTime();
|
|
|
var lane = requestUpdateLane(fiber);
|
|
|
var update = createUpdate(eventTime, lane);
|
|
|
update.tag = ReplaceState;
|
|
|
update.payload = payload;
|
|
|
|
|
|
if (callback !== undefined && callback !== null) {
|
|
|
{
|
|
|
warnOnInvalidCallback(callback, 'replaceState');
|
|
|
}
|
|
|
|
|
|
update.callback = callback;
|
|
|
}
|
|
|
|
|
|
var root = enqueueUpdate(fiber, update, lane);
|
|
|
|
|
|
if (root !== null) {
|
|
|
scheduleUpdateOnFiber(root, fiber, lane, eventTime);
|
|
|
entangleTransitions(root, fiber, lane);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
markStateUpdateScheduled(fiber, lane);
|
|
|
}
|
|
|
},
|
|
|
enqueueForceUpdate: function (inst, callback) {
|
|
|
var fiber = get(inst);
|
|
|
var eventTime = requestEventTime();
|
|
|
var lane = requestUpdateLane(fiber);
|
|
|
var update = createUpdate(eventTime, lane);
|
|
|
update.tag = ForceUpdate;
|
|
|
|
|
|
if (callback !== undefined && callback !== null) {
|
|
|
{
|
|
|
warnOnInvalidCallback(callback, 'forceUpdate');
|
|
|
}
|
|
|
|
|
|
update.callback = callback;
|
|
|
}
|
|
|
|
|
|
var root = enqueueUpdate(fiber, update, lane);
|
|
|
|
|
|
if (root !== null) {
|
|
|
scheduleUpdateOnFiber(root, fiber, lane, eventTime);
|
|
|
entangleTransitions(root, fiber, lane);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
markForceUpdateScheduled(fiber, lane);
|
|
|
}
|
|
|
}
|
|
|
};
|
|
|
|
|
|
function checkShouldComponentUpdate(workInProgress, ctor, oldProps, newProps, oldState, newState, nextContext) {
|
|
|
var instance = workInProgress.stateNode;
|
|
|
|
|
|
if (typeof instance.shouldComponentUpdate === 'function') {
|
|
|
var shouldUpdate = instance.shouldComponentUpdate(newProps, newState, nextContext);
|
|
|
|
|
|
{
|
|
|
if ( workInProgress.mode & StrictLegacyMode) {
|
|
|
setIsStrictModeForDevtools(true);
|
|
|
|
|
|
try {
|
|
|
// Invoke the function an extra time to help detect side-effects.
|
|
|
shouldUpdate = instance.shouldComponentUpdate(newProps, newState, nextContext);
|
|
|
} finally {
|
|
|
setIsStrictModeForDevtools(false);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (shouldUpdate === undefined) {
|
|
|
error('%s.shouldComponentUpdate(): Returned undefined instead of a ' + 'boolean value. Make sure to return true or false.', getComponentNameFromType(ctor) || 'Component');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return shouldUpdate;
|
|
|
}
|
|
|
|
|
|
if (ctor.prototype && ctor.prototype.isPureReactComponent) {
|
|
|
return !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState);
|
|
|
}
|
|
|
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
function checkClassInstance(workInProgress, ctor, newProps) {
|
|
|
var instance = workInProgress.stateNode;
|
|
|
|
|
|
{
|
|
|
var name = getComponentNameFromType(ctor) || 'Component';
|
|
|
var renderPresent = instance.render;
|
|
|
|
|
|
if (!renderPresent) {
|
|
|
if (ctor.prototype && typeof ctor.prototype.render === 'function') {
|
|
|
error('%s(...): No `render` method found on the returned component ' + 'instance: did you accidentally return an object from the constructor?', name);
|
|
|
} else {
|
|
|
error('%s(...): No `render` method found on the returned component ' + 'instance: you may have forgotten to define `render`.', name);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (instance.getInitialState && !instance.getInitialState.isReactClassApproved && !instance.state) {
|
|
|
error('getInitialState was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Did you mean to define a state property instead?', name);
|
|
|
}
|
|
|
|
|
|
if (instance.getDefaultProps && !instance.getDefaultProps.isReactClassApproved) {
|
|
|
error('getDefaultProps was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Use a static property to define defaultProps instead.', name);
|
|
|
}
|
|
|
|
|
|
if (instance.propTypes) {
|
|
|
error('propTypes was defined as an instance property on %s. Use a static ' + 'property to define propTypes instead.', name);
|
|
|
}
|
|
|
|
|
|
if (instance.contextType) {
|
|
|
error('contextType was defined as an instance property on %s. Use a static ' + 'property to define contextType instead.', name);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
if (instance.contextTypes) {
|
|
|
error('contextTypes was defined as an instance property on %s. Use a static ' + 'property to define contextTypes instead.', name);
|
|
|
}
|
|
|
|
|
|
if (ctor.contextType && ctor.contextTypes && !didWarnAboutContextTypeAndContextTypes.has(ctor)) {
|
|
|
didWarnAboutContextTypeAndContextTypes.add(ctor);
|
|
|
|
|
|
error('%s declares both contextTypes and contextType static properties. ' + 'The legacy contextTypes property will be ignored.', name);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (typeof instance.componentShouldUpdate === 'function') {
|
|
|
error('%s has a method called ' + 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + 'The name is phrased as a question because the function is ' + 'expected to return a value.', name);
|
|
|
}
|
|
|
|
|
|
if (ctor.prototype && ctor.prototype.isPureReactComponent && typeof instance.shouldComponentUpdate !== 'undefined') {
|
|
|
error('%s has a method called shouldComponentUpdate(). ' + 'shouldComponentUpdate should not be used when extending React.PureComponent. ' + 'Please extend React.Component if shouldComponentUpdate is used.', getComponentNameFromType(ctor) || 'A pure component');
|
|
|
}
|
|
|
|
|
|
if (typeof instance.componentDidUnmount === 'function') {
|
|
|
error('%s has a method called ' + 'componentDidUnmount(). But there is no such lifecycle method. ' + 'Did you mean componentWillUnmount()?', name);
|
|
|
}
|
|
|
|
|
|
if (typeof instance.componentDidReceiveProps === 'function') {
|
|
|
error('%s has a method called ' + 'componentDidReceiveProps(). But there is no such lifecycle method. ' + 'If you meant to update the state in response to changing props, ' + 'use componentWillReceiveProps(). If you meant to fetch data or ' + 'run side-effects or mutations after React has updated the UI, use componentDidUpdate().', name);
|
|
|
}
|
|
|
|
|
|
if (typeof instance.componentWillRecieveProps === 'function') {
|
|
|
error('%s has a method called ' + 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?', name);
|
|
|
}
|
|
|
|
|
|
if (typeof instance.UNSAFE_componentWillRecieveProps === 'function') {
|
|
|
error('%s has a method called ' + 'UNSAFE_componentWillRecieveProps(). Did you mean UNSAFE_componentWillReceiveProps()?', name);
|
|
|
}
|
|
|
|
|
|
var hasMutatedProps = instance.props !== newProps;
|
|
|
|
|
|
if (instance.props !== undefined && hasMutatedProps) {
|
|
|
error('%s(...): When calling super() in `%s`, make sure to pass ' + "up the same props that your component's constructor was passed.", name, name);
|
|
|
}
|
|
|
|
|
|
if (instance.defaultProps) {
|
|
|
error('Setting defaultProps as an instance property on %s is not supported and will be ignored.' + ' Instead, define defaultProps as a static property on %s.', name, name);
|
|
|
}
|
|
|
|
|
|
if (typeof instance.getSnapshotBeforeUpdate === 'function' && typeof instance.componentDidUpdate !== 'function' && !didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.has(ctor)) {
|
|
|
didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.add(ctor);
|
|
|
|
|
|
error('%s: getSnapshotBeforeUpdate() should be used with componentDidUpdate(). ' + 'This component defines getSnapshotBeforeUpdate() only.', getComponentNameFromType(ctor));
|
|
|
}
|
|
|
|
|
|
if (typeof instance.getDerivedStateFromProps === 'function') {
|
|
|
error('%s: getDerivedStateFromProps() is defined as an instance method ' + 'and will be ignored. Instead, declare it as a static method.', name);
|
|
|
}
|
|
|
|
|
|
if (typeof instance.getDerivedStateFromError === 'function') {
|
|
|
error('%s: getDerivedStateFromError() is defined as an instance method ' + 'and will be ignored. Instead, declare it as a static method.', name);
|
|
|
}
|
|
|
|
|
|
if (typeof ctor.getSnapshotBeforeUpdate === 'function') {
|
|
|
error('%s: getSnapshotBeforeUpdate() is defined as a static method ' + 'and will be ignored. Instead, declare it as an instance method.', name);
|
|
|
}
|
|
|
|
|
|
var _state = instance.state;
|
|
|
|
|
|
if (_state && (typeof _state !== 'object' || isArray(_state))) {
|
|
|
error('%s.state: must be set to an object or null', name);
|
|
|
}
|
|
|
|
|
|
if (typeof instance.getChildContext === 'function' && typeof ctor.childContextTypes !== 'object') {
|
|
|
error('%s.getChildContext(): childContextTypes must be defined in order to ' + 'use getChildContext().', name);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function adoptClassInstance(workInProgress, instance) {
|
|
|
instance.updater = classComponentUpdater;
|
|
|
workInProgress.stateNode = instance; // The instance needs access to the fiber so that it can schedule updates
|
|
|
|
|
|
set(instance, workInProgress);
|
|
|
|
|
|
{
|
|
|
instance._reactInternalInstance = fakeInternalInstance;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function constructClassInstance(workInProgress, ctor, props) {
|
|
|
var isLegacyContextConsumer = false;
|
|
|
var unmaskedContext = emptyContextObject;
|
|
|
var context = emptyContextObject;
|
|
|
var contextType = ctor.contextType;
|
|
|
|
|
|
{
|
|
|
if ('contextType' in ctor) {
|
|
|
var isValid = // Allow null for conditional declaration
|
|
|
contextType === null || contextType !== undefined && contextType.$$typeof === REACT_CONTEXT_TYPE && contextType._context === undefined; // Not a <Context.Consumer>
|
|
|
|
|
|
if (!isValid && !didWarnAboutInvalidateContextType.has(ctor)) {
|
|
|
didWarnAboutInvalidateContextType.add(ctor);
|
|
|
var addendum = '';
|
|
|
|
|
|
if (contextType === undefined) {
|
|
|
addendum = ' However, it is set to undefined. ' + 'This can be caused by a typo or by mixing up named and default imports. ' + 'This can also happen due to a circular dependency, so ' + 'try moving the createContext() call to a separate file.';
|
|
|
} else if (typeof contextType !== 'object') {
|
|
|
addendum = ' However, it is set to a ' + typeof contextType + '.';
|
|
|
} else if (contextType.$$typeof === REACT_PROVIDER_TYPE) {
|
|
|
addendum = ' Did you accidentally pass the Context.Provider instead?';
|
|
|
} else if (contextType._context !== undefined) {
|
|
|
// <Context.Consumer>
|
|
|
addendum = ' Did you accidentally pass the Context.Consumer instead?';
|
|
|
} else {
|
|
|
addendum = ' However, it is set to an object with keys {' + Object.keys(contextType).join(', ') + '}.';
|
|
|
}
|
|
|
|
|
|
error('%s defines an invalid contextType. ' + 'contextType should point to the Context object returned by React.createContext().%s', getComponentNameFromType(ctor) || 'Component', addendum);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (typeof contextType === 'object' && contextType !== null) {
|
|
|
context = readContext(contextType);
|
|
|
} else {
|
|
|
unmaskedContext = getUnmaskedContext(workInProgress, ctor, true);
|
|
|
var contextTypes = ctor.contextTypes;
|
|
|
isLegacyContextConsumer = contextTypes !== null && contextTypes !== undefined;
|
|
|
context = isLegacyContextConsumer ? getMaskedContext(workInProgress, unmaskedContext) : emptyContextObject;
|
|
|
}
|
|
|
|
|
|
var instance = new ctor(props, context); // Instantiate twice to help detect side-effects.
|
|
|
|
|
|
{
|
|
|
if ( workInProgress.mode & StrictLegacyMode) {
|
|
|
setIsStrictModeForDevtools(true);
|
|
|
|
|
|
try {
|
|
|
instance = new ctor(props, context); // eslint-disable-line no-new
|
|
|
} finally {
|
|
|
setIsStrictModeForDevtools(false);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var state = workInProgress.memoizedState = instance.state !== null && instance.state !== undefined ? instance.state : null;
|
|
|
adoptClassInstance(workInProgress, instance);
|
|
|
|
|
|
{
|
|
|
if (typeof ctor.getDerivedStateFromProps === 'function' && state === null) {
|
|
|
var componentName = getComponentNameFromType(ctor) || 'Component';
|
|
|
|
|
|
if (!didWarnAboutUninitializedState.has(componentName)) {
|
|
|
didWarnAboutUninitializedState.add(componentName);
|
|
|
|
|
|
error('`%s` uses `getDerivedStateFromProps` but its initial state is ' + '%s. This is not recommended. Instead, define the initial state by ' + 'assigning an object to `this.state` in the constructor of `%s`. ' + 'This ensures that `getDerivedStateFromProps` arguments have a consistent shape.', componentName, instance.state === null ? 'null' : 'undefined', componentName);
|
|
|
}
|
|
|
} // If new component APIs are defined, "unsafe" lifecycles won't be called.
|
|
|
// Warn about these lifecycles if they are present.
|
|
|
// Don't warn about react-lifecycles-compat polyfilled methods though.
|
|
|
|
|
|
|
|
|
if (typeof ctor.getDerivedStateFromProps === 'function' || typeof instance.getSnapshotBeforeUpdate === 'function') {
|
|
|
var foundWillMountName = null;
|
|
|
var foundWillReceivePropsName = null;
|
|
|
var foundWillUpdateName = null;
|
|
|
|
|
|
if (typeof instance.componentWillMount === 'function' && instance.componentWillMount.__suppressDeprecationWarning !== true) {
|
|
|
foundWillMountName = 'componentWillMount';
|
|
|
} else if (typeof instance.UNSAFE_componentWillMount === 'function') {
|
|
|
foundWillMountName = 'UNSAFE_componentWillMount';
|
|
|
}
|
|
|
|
|
|
if (typeof instance.componentWillReceiveProps === 'function' && instance.componentWillReceiveProps.__suppressDeprecationWarning !== true) {
|
|
|
foundWillReceivePropsName = 'componentWillReceiveProps';
|
|
|
} else if (typeof instance.UNSAFE_componentWillReceiveProps === 'function') {
|
|
|
foundWillReceivePropsName = 'UNSAFE_componentWillReceiveProps';
|
|
|
}
|
|
|
|
|
|
if (typeof instance.componentWillUpdate === 'function' && instance.componentWillUpdate.__suppressDeprecationWarning !== true) {
|
|
|
foundWillUpdateName = 'componentWillUpdate';
|
|
|
} else if (typeof instance.UNSAFE_componentWillUpdate === 'function') {
|
|
|
foundWillUpdateName = 'UNSAFE_componentWillUpdate';
|
|
|
}
|
|
|
|
|
|
if (foundWillMountName !== null || foundWillReceivePropsName !== null || foundWillUpdateName !== null) {
|
|
|
var _componentName = getComponentNameFromType(ctor) || 'Component';
|
|
|
|
|
|
var newApiName = typeof ctor.getDerivedStateFromProps === 'function' ? 'getDerivedStateFromProps()' : 'getSnapshotBeforeUpdate()';
|
|
|
|
|
|
if (!didWarnAboutLegacyLifecyclesAndDerivedState.has(_componentName)) {
|
|
|
didWarnAboutLegacyLifecyclesAndDerivedState.add(_componentName);
|
|
|
|
|
|
error('Unsafe legacy lifecycles will not be called for components using new component APIs.\n\n' + '%s uses %s but also contains the following legacy lifecycles:%s%s%s\n\n' + 'The above lifecycles should be removed. Learn more about this warning here:\n' + 'https://reactjs.org/link/unsafe-component-lifecycles', _componentName, newApiName, foundWillMountName !== null ? "\n " + foundWillMountName : '', foundWillReceivePropsName !== null ? "\n " + foundWillReceivePropsName : '', foundWillUpdateName !== null ? "\n " + foundWillUpdateName : '');
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
} // Cache unmasked context so we can avoid recreating masked context unless necessary.
|
|
|
// ReactFiberContext usually updates this cache but can't for newly-created instances.
|
|
|
|
|
|
|
|
|
if (isLegacyContextConsumer) {
|
|
|
cacheContext(workInProgress, unmaskedContext, context);
|
|
|
}
|
|
|
|
|
|
return instance;
|
|
|
}
|
|
|
|
|
|
function callComponentWillMount(workInProgress, instance) {
|
|
|
var oldState = instance.state;
|
|
|
|
|
|
if (typeof instance.componentWillMount === 'function') {
|
|
|
instance.componentWillMount();
|
|
|
}
|
|
|
|
|
|
if (typeof instance.UNSAFE_componentWillMount === 'function') {
|
|
|
instance.UNSAFE_componentWillMount();
|
|
|
}
|
|
|
|
|
|
if (oldState !== instance.state) {
|
|
|
{
|
|
|
error('%s.componentWillMount(): Assigning directly to this.state is ' + "deprecated (except inside a component's " + 'constructor). Use setState instead.', getComponentNameFromFiber(workInProgress) || 'Component');
|
|
|
}
|
|
|
|
|
|
classComponentUpdater.enqueueReplaceState(instance, instance.state, null);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function callComponentWillReceiveProps(workInProgress, instance, newProps, nextContext) {
|
|
|
var oldState = instance.state;
|
|
|
|
|
|
if (typeof instance.componentWillReceiveProps === 'function') {
|
|
|
instance.componentWillReceiveProps(newProps, nextContext);
|
|
|
}
|
|
|
|
|
|
if (typeof instance.UNSAFE_componentWillReceiveProps === 'function') {
|
|
|
instance.UNSAFE_componentWillReceiveProps(newProps, nextContext);
|
|
|
}
|
|
|
|
|
|
if (instance.state !== oldState) {
|
|
|
{
|
|
|
var componentName = getComponentNameFromFiber(workInProgress) || 'Component';
|
|
|
|
|
|
if (!didWarnAboutStateAssignmentForComponent.has(componentName)) {
|
|
|
didWarnAboutStateAssignmentForComponent.add(componentName);
|
|
|
|
|
|
error('%s.componentWillReceiveProps(): Assigning directly to ' + "this.state is deprecated (except inside a component's " + 'constructor). Use setState instead.', componentName);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
classComponentUpdater.enqueueReplaceState(instance, instance.state, null);
|
|
|
}
|
|
|
} // Invokes the mount life-cycles on a previously never rendered instance.
|
|
|
|
|
|
|
|
|
function mountClassInstance(workInProgress, ctor, newProps, renderLanes) {
|
|
|
{
|
|
|
checkClassInstance(workInProgress, ctor, newProps);
|
|
|
}
|
|
|
|
|
|
var instance = workInProgress.stateNode;
|
|
|
instance.props = newProps;
|
|
|
instance.state = workInProgress.memoizedState;
|
|
|
instance.refs = emptyRefsObject;
|
|
|
initializeUpdateQueue(workInProgress);
|
|
|
var contextType = ctor.contextType;
|
|
|
|
|
|
if (typeof contextType === 'object' && contextType !== null) {
|
|
|
instance.context = readContext(contextType);
|
|
|
} else {
|
|
|
var unmaskedContext = getUnmaskedContext(workInProgress, ctor, true);
|
|
|
instance.context = getMaskedContext(workInProgress, unmaskedContext);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
if (instance.state === newProps) {
|
|
|
var componentName = getComponentNameFromType(ctor) || 'Component';
|
|
|
|
|
|
if (!didWarnAboutDirectlyAssigningPropsToState.has(componentName)) {
|
|
|
didWarnAboutDirectlyAssigningPropsToState.add(componentName);
|
|
|
|
|
|
error('%s: It is not recommended to assign props directly to state ' + "because updates to props won't be reflected in state. " + 'In most cases, it is better to use props directly.', componentName);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (workInProgress.mode & StrictLegacyMode) {
|
|
|
ReactStrictModeWarnings.recordLegacyContextWarning(workInProgress, instance);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
ReactStrictModeWarnings.recordUnsafeLifecycleWarnings(workInProgress, instance);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
instance.state = workInProgress.memoizedState;
|
|
|
var getDerivedStateFromProps = ctor.getDerivedStateFromProps;
|
|
|
|
|
|
if (typeof getDerivedStateFromProps === 'function') {
|
|
|
applyDerivedStateFromProps(workInProgress, ctor, getDerivedStateFromProps, newProps);
|
|
|
instance.state = workInProgress.memoizedState;
|
|
|
} // In order to support react-lifecycles-compat polyfilled components,
|
|
|
// Unsafe lifecycles should not be invoked for components using the new APIs.
|
|
|
|
|
|
|
|
|
if (typeof ctor.getDerivedStateFromProps !== 'function' && typeof instance.getSnapshotBeforeUpdate !== 'function' && (typeof instance.UNSAFE_componentWillMount === 'function' || typeof instance.componentWillMount === 'function')) {
|
|
|
callComponentWillMount(workInProgress, instance); // If we had additional state updates during this life-cycle, let's
|
|
|
// process them now.
|
|
|
|
|
|
processUpdateQueue(workInProgress, newProps, instance, renderLanes);
|
|
|
instance.state = workInProgress.memoizedState;
|
|
|
}
|
|
|
|
|
|
if (typeof instance.componentDidMount === 'function') {
|
|
|
var fiberFlags = Update;
|
|
|
|
|
|
{
|
|
|
fiberFlags |= LayoutStatic;
|
|
|
}
|
|
|
|
|
|
if ( (workInProgress.mode & StrictEffectsMode) !== NoMode) {
|
|
|
fiberFlags |= MountLayoutDev;
|
|
|
}
|
|
|
|
|
|
workInProgress.flags |= fiberFlags;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function resumeMountClassInstance(workInProgress, ctor, newProps, renderLanes) {
|
|
|
var instance = workInProgress.stateNode;
|
|
|
var oldProps = workInProgress.memoizedProps;
|
|
|
instance.props = oldProps;
|
|
|
var oldContext = instance.context;
|
|
|
var contextType = ctor.contextType;
|
|
|
var nextContext = emptyContextObject;
|
|
|
|
|
|
if (typeof contextType === 'object' && contextType !== null) {
|
|
|
nextContext = readContext(contextType);
|
|
|
} else {
|
|
|
var nextLegacyUnmaskedContext = getUnmaskedContext(workInProgress, ctor, true);
|
|
|
nextContext = getMaskedContext(workInProgress, nextLegacyUnmaskedContext);
|
|
|
}
|
|
|
|
|
|
var getDerivedStateFromProps = ctor.getDerivedStateFromProps;
|
|
|
var hasNewLifecycles = typeof getDerivedStateFromProps === 'function' || typeof instance.getSnapshotBeforeUpdate === 'function'; // Note: During these life-cycles, instance.props/instance.state are what
|
|
|
// ever the previously attempted to render - not the "current". However,
|
|
|
// during componentDidUpdate we pass the "current" props.
|
|
|
// In order to support react-lifecycles-compat polyfilled components,
|
|
|
// Unsafe lifecycles should not be invoked for components using the new APIs.
|
|
|
|
|
|
if (!hasNewLifecycles && (typeof instance.UNSAFE_componentWillReceiveProps === 'function' || typeof instance.componentWillReceiveProps === 'function')) {
|
|
|
if (oldProps !== newProps || oldContext !== nextContext) {
|
|
|
callComponentWillReceiveProps(workInProgress, instance, newProps, nextContext);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
resetHasForceUpdateBeforeProcessing();
|
|
|
var oldState = workInProgress.memoizedState;
|
|
|
var newState = instance.state = oldState;
|
|
|
processUpdateQueue(workInProgress, newProps, instance, renderLanes);
|
|
|
newState = workInProgress.memoizedState;
|
|
|
|
|
|
if (oldProps === newProps && oldState === newState && !hasContextChanged() && !checkHasForceUpdateAfterProcessing()) {
|
|
|
// If an update was already in progress, we should schedule an Update
|
|
|
// effect even though we're bailing out, so that cWU/cDU are called.
|
|
|
if (typeof instance.componentDidMount === 'function') {
|
|
|
var fiberFlags = Update;
|
|
|
|
|
|
{
|
|
|
fiberFlags |= LayoutStatic;
|
|
|
}
|
|
|
|
|
|
if ( (workInProgress.mode & StrictEffectsMode) !== NoMode) {
|
|
|
fiberFlags |= MountLayoutDev;
|
|
|
}
|
|
|
|
|
|
workInProgress.flags |= fiberFlags;
|
|
|
}
|
|
|
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
if (typeof getDerivedStateFromProps === 'function') {
|
|
|
applyDerivedStateFromProps(workInProgress, ctor, getDerivedStateFromProps, newProps);
|
|
|
newState = workInProgress.memoizedState;
|
|
|
}
|
|
|
|
|
|
var shouldUpdate = checkHasForceUpdateAfterProcessing() || checkShouldComponentUpdate(workInProgress, ctor, oldProps, newProps, oldState, newState, nextContext);
|
|
|
|
|
|
if (shouldUpdate) {
|
|
|
// In order to support react-lifecycles-compat polyfilled components,
|
|
|
// Unsafe lifecycles should not be invoked for components using the new APIs.
|
|
|
if (!hasNewLifecycles && (typeof instance.UNSAFE_componentWillMount === 'function' || typeof instance.componentWillMount === 'function')) {
|
|
|
if (typeof instance.componentWillMount === 'function') {
|
|
|
instance.componentWillMount();
|
|
|
}
|
|
|
|
|
|
if (typeof instance.UNSAFE_componentWillMount === 'function') {
|
|
|
instance.UNSAFE_componentWillMount();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (typeof instance.componentDidMount === 'function') {
|
|
|
var _fiberFlags = Update;
|
|
|
|
|
|
{
|
|
|
_fiberFlags |= LayoutStatic;
|
|
|
}
|
|
|
|
|
|
if ( (workInProgress.mode & StrictEffectsMode) !== NoMode) {
|
|
|
_fiberFlags |= MountLayoutDev;
|
|
|
}
|
|
|
|
|
|
workInProgress.flags |= _fiberFlags;
|
|
|
}
|
|
|
} else {
|
|
|
// If an update was already in progress, we should schedule an Update
|
|
|
// effect even though we're bailing out, so that cWU/cDU are called.
|
|
|
if (typeof instance.componentDidMount === 'function') {
|
|
|
var _fiberFlags2 = Update;
|
|
|
|
|
|
{
|
|
|
_fiberFlags2 |= LayoutStatic;
|
|
|
}
|
|
|
|
|
|
if ( (workInProgress.mode & StrictEffectsMode) !== NoMode) {
|
|
|
_fiberFlags2 |= MountLayoutDev;
|
|
|
}
|
|
|
|
|
|
workInProgress.flags |= _fiberFlags2;
|
|
|
} // If shouldComponentUpdate returned false, we should still update the
|
|
|
// memoized state to indicate that this work can be reused.
|
|
|
|
|
|
|
|
|
workInProgress.memoizedProps = newProps;
|
|
|
workInProgress.memoizedState = newState;
|
|
|
} // Update the existing instance's state, props, and context pointers even
|
|
|
// if shouldComponentUpdate returns false.
|
|
|
|
|
|
|
|
|
instance.props = newProps;
|
|
|
instance.state = newState;
|
|
|
instance.context = nextContext;
|
|
|
return shouldUpdate;
|
|
|
} // Invokes the update life-cycles and returns false if it shouldn't rerender.
|
|
|
|
|
|
|
|
|
function updateClassInstance(current, workInProgress, ctor, newProps, renderLanes) {
|
|
|
var instance = workInProgress.stateNode;
|
|
|
cloneUpdateQueue(current, workInProgress);
|
|
|
var unresolvedOldProps = workInProgress.memoizedProps;
|
|
|
var oldProps = workInProgress.type === workInProgress.elementType ? unresolvedOldProps : resolveDefaultProps(workInProgress.type, unresolvedOldProps);
|
|
|
instance.props = oldProps;
|
|
|
var unresolvedNewProps = workInProgress.pendingProps;
|
|
|
var oldContext = instance.context;
|
|
|
var contextType = ctor.contextType;
|
|
|
var nextContext = emptyContextObject;
|
|
|
|
|
|
if (typeof contextType === 'object' && contextType !== null) {
|
|
|
nextContext = readContext(contextType);
|
|
|
} else {
|
|
|
var nextUnmaskedContext = getUnmaskedContext(workInProgress, ctor, true);
|
|
|
nextContext = getMaskedContext(workInProgress, nextUnmaskedContext);
|
|
|
}
|
|
|
|
|
|
var getDerivedStateFromProps = ctor.getDerivedStateFromProps;
|
|
|
var hasNewLifecycles = typeof getDerivedStateFromProps === 'function' || typeof instance.getSnapshotBeforeUpdate === 'function'; // Note: During these life-cycles, instance.props/instance.state are what
|
|
|
// ever the previously attempted to render - not the "current". However,
|
|
|
// during componentDidUpdate we pass the "current" props.
|
|
|
// In order to support react-lifecycles-compat polyfilled components,
|
|
|
// Unsafe lifecycles should not be invoked for components using the new APIs.
|
|
|
|
|
|
if (!hasNewLifecycles && (typeof instance.UNSAFE_componentWillReceiveProps === 'function' || typeof instance.componentWillReceiveProps === 'function')) {
|
|
|
if (unresolvedOldProps !== unresolvedNewProps || oldContext !== nextContext) {
|
|
|
callComponentWillReceiveProps(workInProgress, instance, newProps, nextContext);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
resetHasForceUpdateBeforeProcessing();
|
|
|
var oldState = workInProgress.memoizedState;
|
|
|
var newState = instance.state = oldState;
|
|
|
processUpdateQueue(workInProgress, newProps, instance, renderLanes);
|
|
|
newState = workInProgress.memoizedState;
|
|
|
|
|
|
if (unresolvedOldProps === unresolvedNewProps && oldState === newState && !hasContextChanged() && !checkHasForceUpdateAfterProcessing() && !(enableLazyContextPropagation )) {
|
|
|
// If an update was already in progress, we should schedule an Update
|
|
|
// effect even though we're bailing out, so that cWU/cDU are called.
|
|
|
if (typeof instance.componentDidUpdate === 'function') {
|
|
|
if (unresolvedOldProps !== current.memoizedProps || oldState !== current.memoizedState) {
|
|
|
workInProgress.flags |= Update;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (typeof instance.getSnapshotBeforeUpdate === 'function') {
|
|
|
if (unresolvedOldProps !== current.memoizedProps || oldState !== current.memoizedState) {
|
|
|
workInProgress.flags |= Snapshot;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
if (typeof getDerivedStateFromProps === 'function') {
|
|
|
applyDerivedStateFromProps(workInProgress, ctor, getDerivedStateFromProps, newProps);
|
|
|
newState = workInProgress.memoizedState;
|
|
|
}
|
|
|
|
|
|
var shouldUpdate = checkHasForceUpdateAfterProcessing() || checkShouldComponentUpdate(workInProgress, ctor, oldProps, newProps, oldState, newState, nextContext) || // TODO: In some cases, we'll end up checking if context has changed twice,
|
|
|
// both before and after `shouldComponentUpdate` has been called. Not ideal,
|
|
|
// but I'm loath to refactor this function. This only happens for memoized
|
|
|
// components so it's not that common.
|
|
|
enableLazyContextPropagation ;
|
|
|
|
|
|
if (shouldUpdate) {
|
|
|
// In order to support react-lifecycles-compat polyfilled components,
|
|
|
// Unsafe lifecycles should not be invoked for components using the new APIs.
|
|
|
if (!hasNewLifecycles && (typeof instance.UNSAFE_componentWillUpdate === 'function' || typeof instance.componentWillUpdate === 'function')) {
|
|
|
if (typeof instance.componentWillUpdate === 'function') {
|
|
|
instance.componentWillUpdate(newProps, newState, nextContext);
|
|
|
}
|
|
|
|
|
|
if (typeof instance.UNSAFE_componentWillUpdate === 'function') {
|
|
|
instance.UNSAFE_componentWillUpdate(newProps, newState, nextContext);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (typeof instance.componentDidUpdate === 'function') {
|
|
|
workInProgress.flags |= Update;
|
|
|
}
|
|
|
|
|
|
if (typeof instance.getSnapshotBeforeUpdate === 'function') {
|
|
|
workInProgress.flags |= Snapshot;
|
|
|
}
|
|
|
} else {
|
|
|
// If an update was already in progress, we should schedule an Update
|
|
|
// effect even though we're bailing out, so that cWU/cDU are called.
|
|
|
if (typeof instance.componentDidUpdate === 'function') {
|
|
|
if (unresolvedOldProps !== current.memoizedProps || oldState !== current.memoizedState) {
|
|
|
workInProgress.flags |= Update;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (typeof instance.getSnapshotBeforeUpdate === 'function') {
|
|
|
if (unresolvedOldProps !== current.memoizedProps || oldState !== current.memoizedState) {
|
|
|
workInProgress.flags |= Snapshot;
|
|
|
}
|
|
|
} // If shouldComponentUpdate returned false, we should still update the
|
|
|
// memoized props/state to indicate that this work can be reused.
|
|
|
|
|
|
|
|
|
workInProgress.memoizedProps = newProps;
|
|
|
workInProgress.memoizedState = newState;
|
|
|
} // Update the existing instance's state, props, and context pointers even
|
|
|
// if shouldComponentUpdate returns false.
|
|
|
|
|
|
|
|
|
instance.props = newProps;
|
|
|
instance.state = newState;
|
|
|
instance.context = nextContext;
|
|
|
return shouldUpdate;
|
|
|
}
|
|
|
|
|
|
var didWarnAboutMaps;
|
|
|
var didWarnAboutGenerators;
|
|
|
var didWarnAboutStringRefs;
|
|
|
var ownerHasKeyUseWarning;
|
|
|
var ownerHasFunctionTypeWarning;
|
|
|
|
|
|
var warnForMissingKey = function (child, returnFiber) {};
|
|
|
|
|
|
{
|
|
|
didWarnAboutMaps = false;
|
|
|
didWarnAboutGenerators = false;
|
|
|
didWarnAboutStringRefs = {};
|
|
|
/**
|
|
|
* Warn if there's no key explicitly set on dynamic arrays of children or
|
|
|
* object keys are not valid. This allows us to keep track of children between
|
|
|
* updates.
|
|
|
*/
|
|
|
|
|
|
ownerHasKeyUseWarning = {};
|
|
|
ownerHasFunctionTypeWarning = {};
|
|
|
|
|
|
warnForMissingKey = function (child, returnFiber) {
|
|
|
if (child === null || typeof child !== 'object') {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (!child._store || child._store.validated || child.key != null) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (typeof child._store !== 'object') {
|
|
|
throw new Error('React Component in warnForMissingKey should have a _store. ' + 'This error is likely caused by a bug in React. Please file an issue.');
|
|
|
}
|
|
|
|
|
|
child._store.validated = true;
|
|
|
var componentName = getComponentNameFromFiber(returnFiber) || 'Component';
|
|
|
|
|
|
if (ownerHasKeyUseWarning[componentName]) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
ownerHasKeyUseWarning[componentName] = true;
|
|
|
|
|
|
error('Each child in a list should have a unique ' + '"key" prop. See https://reactjs.org/link/warning-keys for ' + 'more information.');
|
|
|
};
|
|
|
}
|
|
|
|
|
|
function coerceRef(returnFiber, current, element) {
|
|
|
var mixedRef = element.ref;
|
|
|
|
|
|
if (mixedRef !== null && typeof mixedRef !== 'function' && typeof mixedRef !== 'object') {
|
|
|
{
|
|
|
// TODO: Clean this up once we turn on the string ref warning for
|
|
|
// everyone, because the strict mode case will no longer be relevant
|
|
|
if ((returnFiber.mode & StrictLegacyMode || warnAboutStringRefs) && // We warn in ReactElement.js if owner and self are equal for string refs
|
|
|
// because these cannot be automatically converted to an arrow function
|
|
|
// using a codemod. Therefore, we don't have to warn about string refs again.
|
|
|
!(element._owner && element._self && element._owner.stateNode !== element._self)) {
|
|
|
var componentName = getComponentNameFromFiber(returnFiber) || 'Component';
|
|
|
|
|
|
if (!didWarnAboutStringRefs[componentName]) {
|
|
|
{
|
|
|
error('A string ref, "%s", has been found within a strict mode tree. ' + 'String refs are a source of potential bugs and should be avoided. ' + 'We recommend using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', mixedRef);
|
|
|
}
|
|
|
|
|
|
didWarnAboutStringRefs[componentName] = true;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (element._owner) {
|
|
|
var owner = element._owner;
|
|
|
var inst;
|
|
|
|
|
|
if (owner) {
|
|
|
var ownerFiber = owner;
|
|
|
|
|
|
if (ownerFiber.tag !== ClassComponent) {
|
|
|
throw new Error('Function components cannot have string refs. ' + 'We recommend using useRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref');
|
|
|
}
|
|
|
|
|
|
inst = ownerFiber.stateNode;
|
|
|
}
|
|
|
|
|
|
if (!inst) {
|
|
|
throw new Error("Missing owner for string ref " + mixedRef + ". This error is likely caused by a " + 'bug in React. Please file an issue.');
|
|
|
} // Assigning this to a const so Flow knows it won't change in the closure
|
|
|
|
|
|
|
|
|
var resolvedInst = inst;
|
|
|
|
|
|
{
|
|
|
checkPropStringCoercion(mixedRef, 'ref');
|
|
|
}
|
|
|
|
|
|
var stringRef = '' + mixedRef; // Check if previous string ref matches new string ref
|
|
|
|
|
|
if (current !== null && current.ref !== null && typeof current.ref === 'function' && current.ref._stringRef === stringRef) {
|
|
|
return current.ref;
|
|
|
}
|
|
|
|
|
|
var ref = function (value) {
|
|
|
var refs = resolvedInst.refs;
|
|
|
|
|
|
if (refs === emptyRefsObject) {
|
|
|
// This is a lazy pooled frozen object, so we need to initialize.
|
|
|
refs = resolvedInst.refs = {};
|
|
|
}
|
|
|
|
|
|
if (value === null) {
|
|
|
delete refs[stringRef];
|
|
|
} else {
|
|
|
refs[stringRef] = value;
|
|
|
}
|
|
|
};
|
|
|
|
|
|
ref._stringRef = stringRef;
|
|
|
return ref;
|
|
|
} else {
|
|
|
if (typeof mixedRef !== 'string') {
|
|
|
throw new Error('Expected ref to be a function, a string, an object returned by React.createRef(), or null.');
|
|
|
}
|
|
|
|
|
|
if (!element._owner) {
|
|
|
throw new Error("Element ref was specified as a string (" + mixedRef + ") but no owner was set. This could happen for one of" + ' the following reasons:\n' + '1. You may be adding a ref to a function component\n' + "2. You may be adding a ref to a component that was not created inside a component's render method\n" + '3. You have multiple copies of React loaded\n' + 'See https://reactjs.org/link/refs-must-have-owner for more information.');
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return mixedRef;
|
|
|
}
|
|
|
|
|
|
function throwOnInvalidObjectType(returnFiber, newChild) {
|
|
|
var childString = Object.prototype.toString.call(newChild);
|
|
|
throw new Error("Objects are not valid as a React child (found: " + (childString === '[object Object]' ? 'object with keys {' + Object.keys(newChild).join(', ') + '}' : childString) + "). " + 'If you meant to render a collection of children, use an array ' + 'instead.');
|
|
|
}
|
|
|
|
|
|
function warnOnFunctionType(returnFiber) {
|
|
|
{
|
|
|
var componentName = getComponentNameFromFiber(returnFiber) || 'Component';
|
|
|
|
|
|
if (ownerHasFunctionTypeWarning[componentName]) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
ownerHasFunctionTypeWarning[componentName] = true;
|
|
|
|
|
|
error('Functions are not valid as a React child. This may happen if ' + 'you return a Component instead of <Component /> from render. ' + 'Or maybe you meant to call this function rather than return it.');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function resolveLazy(lazyType) {
|
|
|
var payload = lazyType._payload;
|
|
|
var init = lazyType._init;
|
|
|
return init(payload);
|
|
|
} // This wrapper function exists because I expect to clone the code in each path
|
|
|
// to be able to optimize each path individually by branching early. This needs
|
|
|
// a compiler or we can do it manually. Helpers that don't need this branching
|
|
|
// live outside of this function.
|
|
|
|
|
|
|
|
|
function ChildReconciler(shouldTrackSideEffects) {
|
|
|
function deleteChild(returnFiber, childToDelete) {
|
|
|
if (!shouldTrackSideEffects) {
|
|
|
// Noop.
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
var deletions = returnFiber.deletions;
|
|
|
|
|
|
if (deletions === null) {
|
|
|
returnFiber.deletions = [childToDelete];
|
|
|
returnFiber.flags |= ChildDeletion;
|
|
|
} else {
|
|
|
deletions.push(childToDelete);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function deleteRemainingChildren(returnFiber, currentFirstChild) {
|
|
|
if (!shouldTrackSideEffects) {
|
|
|
// Noop.
|
|
|
return null;
|
|
|
} // TODO: For the shouldClone case, this could be micro-optimized a bit by
|
|
|
// assuming that after the first child we've already added everything.
|
|
|
|
|
|
|
|
|
var childToDelete = currentFirstChild;
|
|
|
|
|
|
while (childToDelete !== null) {
|
|
|
deleteChild(returnFiber, childToDelete);
|
|
|
childToDelete = childToDelete.sibling;
|
|
|
}
|
|
|
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
function mapRemainingChildren(returnFiber, currentFirstChild) {
|
|
|
// Add the remaining children to a temporary map so that we can find them by
|
|
|
// keys quickly. Implicit (null) keys get added to this set with their index
|
|
|
// instead.
|
|
|
var existingChildren = new Map();
|
|
|
var existingChild = currentFirstChild;
|
|
|
|
|
|
while (existingChild !== null) {
|
|
|
if (existingChild.key !== null) {
|
|
|
existingChildren.set(existingChild.key, existingChild);
|
|
|
} else {
|
|
|
existingChildren.set(existingChild.index, existingChild);
|
|
|
}
|
|
|
|
|
|
existingChild = existingChild.sibling;
|
|
|
}
|
|
|
|
|
|
return existingChildren;
|
|
|
}
|
|
|
|
|
|
function useFiber(fiber, pendingProps) {
|
|
|
// We currently set sibling to null and index to 0 here because it is easy
|
|
|
// to forget to do before returning it. E.g. for the single child case.
|
|
|
var clone = createWorkInProgress(fiber, pendingProps);
|
|
|
clone.index = 0;
|
|
|
clone.sibling = null;
|
|
|
return clone;
|
|
|
}
|
|
|
|
|
|
function placeChild(newFiber, lastPlacedIndex, newIndex) {
|
|
|
newFiber.index = newIndex;
|
|
|
|
|
|
if (!shouldTrackSideEffects) {
|
|
|
// During hydration, the useId algorithm needs to know which fibers are
|
|
|
// part of a list of children (arrays, iterators).
|
|
|
newFiber.flags |= Forked;
|
|
|
return lastPlacedIndex;
|
|
|
}
|
|
|
|
|
|
var current = newFiber.alternate;
|
|
|
|
|
|
if (current !== null) {
|
|
|
var oldIndex = current.index;
|
|
|
|
|
|
if (oldIndex < lastPlacedIndex) {
|
|
|
// This is a move.
|
|
|
newFiber.flags |= Placement;
|
|
|
return lastPlacedIndex;
|
|
|
} else {
|
|
|
// This item can stay in place.
|
|
|
return oldIndex;
|
|
|
}
|
|
|
} else {
|
|
|
// This is an insertion.
|
|
|
newFiber.flags |= Placement;
|
|
|
return lastPlacedIndex;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function placeSingleChild(newFiber) {
|
|
|
// This is simpler for the single child case. We only need to do a
|
|
|
// placement for inserting new children.
|
|
|
if (shouldTrackSideEffects && newFiber.alternate === null) {
|
|
|
newFiber.flags |= Placement;
|
|
|
}
|
|
|
|
|
|
return newFiber;
|
|
|
}
|
|
|
|
|
|
function updateTextNode(returnFiber, current, textContent, lanes) {
|
|
|
if (current === null || current.tag !== HostText) {
|
|
|
// Insert
|
|
|
var created = createFiberFromText(textContent, returnFiber.mode, lanes);
|
|
|
created.return = returnFiber;
|
|
|
return created;
|
|
|
} else {
|
|
|
// Update
|
|
|
var existing = useFiber(current, textContent);
|
|
|
existing.return = returnFiber;
|
|
|
return existing;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function updateElement(returnFiber, current, element, lanes) {
|
|
|
var elementType = element.type;
|
|
|
|
|
|
if (elementType === REACT_FRAGMENT_TYPE) {
|
|
|
return updateFragment(returnFiber, current, element.props.children, lanes, element.key);
|
|
|
}
|
|
|
|
|
|
if (current !== null) {
|
|
|
if (current.elementType === elementType || ( // Keep this check inline so it only runs on the false path:
|
|
|
isCompatibleFamilyForHotReloading(current, element) ) || // Lazy types should reconcile their resolved type.
|
|
|
// We need to do this after the Hot Reloading check above,
|
|
|
// because hot reloading has different semantics than prod because
|
|
|
// it doesn't resuspend. So we can't let the call below suspend.
|
|
|
typeof elementType === 'object' && elementType !== null && elementType.$$typeof === REACT_LAZY_TYPE && resolveLazy(elementType) === current.type) {
|
|
|
// Move based on index
|
|
|
var existing = useFiber(current, element.props);
|
|
|
existing.ref = coerceRef(returnFiber, current, element);
|
|
|
existing.return = returnFiber;
|
|
|
|
|
|
{
|
|
|
existing._debugSource = element._source;
|
|
|
existing._debugOwner = element._owner;
|
|
|
}
|
|
|
|
|
|
return existing;
|
|
|
}
|
|
|
} // Insert
|
|
|
|
|
|
|
|
|
var created = createFiberFromElement(element, returnFiber.mode, lanes);
|
|
|
created.ref = coerceRef(returnFiber, current, element);
|
|
|
created.return = returnFiber;
|
|
|
return created;
|
|
|
}
|
|
|
|
|
|
function updatePortal(returnFiber, current, portal, lanes) {
|
|
|
if (current === null || current.tag !== HostPortal || current.stateNode.containerInfo !== portal.containerInfo || current.stateNode.implementation !== portal.implementation) {
|
|
|
// Insert
|
|
|
var created = createFiberFromPortal(portal, returnFiber.mode, lanes);
|
|
|
created.return = returnFiber;
|
|
|
return created;
|
|
|
} else {
|
|
|
// Update
|
|
|
var existing = useFiber(current, portal.children || []);
|
|
|
existing.return = returnFiber;
|
|
|
return existing;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function updateFragment(returnFiber, current, fragment, lanes, key) {
|
|
|
if (current === null || current.tag !== Fragment) {
|
|
|
// Insert
|
|
|
var created = createFiberFromFragment(fragment, returnFiber.mode, lanes, key);
|
|
|
created.return = returnFiber;
|
|
|
return created;
|
|
|
} else {
|
|
|
// Update
|
|
|
var existing = useFiber(current, fragment);
|
|
|
existing.return = returnFiber;
|
|
|
return existing;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function createChild(returnFiber, newChild, lanes) {
|
|
|
if (typeof newChild === 'string' && newChild !== '' || typeof newChild === 'number') {
|
|
|
// Text nodes don't have keys. If the previous node is implicitly keyed
|
|
|
// we can continue to replace it without aborting even if it is not a text
|
|
|
// node.
|
|
|
var created = createFiberFromText('' + newChild, returnFiber.mode, lanes);
|
|
|
created.return = returnFiber;
|
|
|
return created;
|
|
|
}
|
|
|
|
|
|
if (typeof newChild === 'object' && newChild !== null) {
|
|
|
switch (newChild.$$typeof) {
|
|
|
case REACT_ELEMENT_TYPE:
|
|
|
{
|
|
|
var _created = createFiberFromElement(newChild, returnFiber.mode, lanes);
|
|
|
|
|
|
_created.ref = coerceRef(returnFiber, null, newChild);
|
|
|
_created.return = returnFiber;
|
|
|
return _created;
|
|
|
}
|
|
|
|
|
|
case REACT_PORTAL_TYPE:
|
|
|
{
|
|
|
var _created2 = createFiberFromPortal(newChild, returnFiber.mode, lanes);
|
|
|
|
|
|
_created2.return = returnFiber;
|
|
|
return _created2;
|
|
|
}
|
|
|
|
|
|
case REACT_LAZY_TYPE:
|
|
|
{
|
|
|
var payload = newChild._payload;
|
|
|
var init = newChild._init;
|
|
|
return createChild(returnFiber, init(payload), lanes);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (isArray(newChild) || getIteratorFn(newChild)) {
|
|
|
var _created3 = createFiberFromFragment(newChild, returnFiber.mode, lanes, null);
|
|
|
|
|
|
_created3.return = returnFiber;
|
|
|
return _created3;
|
|
|
}
|
|
|
|
|
|
throwOnInvalidObjectType(returnFiber, newChild);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
if (typeof newChild === 'function') {
|
|
|
warnOnFunctionType(returnFiber);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
function updateSlot(returnFiber, oldFiber, newChild, lanes) {
|
|
|
// Update the fiber if the keys match, otherwise return null.
|
|
|
var key = oldFiber !== null ? oldFiber.key : null;
|
|
|
|
|
|
if (typeof newChild === 'string' && newChild !== '' || typeof newChild === 'number') {
|
|
|
// Text nodes don't have keys. If the previous node is implicitly keyed
|
|
|
// we can continue to replace it without aborting even if it is not a text
|
|
|
// node.
|
|
|
if (key !== null) {
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
return updateTextNode(returnFiber, oldFiber, '' + newChild, lanes);
|
|
|
}
|
|
|
|
|
|
if (typeof newChild === 'object' && newChild !== null) {
|
|
|
switch (newChild.$$typeof) {
|
|
|
case REACT_ELEMENT_TYPE:
|
|
|
{
|
|
|
if (newChild.key === key) {
|
|
|
return updateElement(returnFiber, oldFiber, newChild, lanes);
|
|
|
} else {
|
|
|
return null;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
case REACT_PORTAL_TYPE:
|
|
|
{
|
|
|
if (newChild.key === key) {
|
|
|
return updatePortal(returnFiber, oldFiber, newChild, lanes);
|
|
|
} else {
|
|
|
return null;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
case REACT_LAZY_TYPE:
|
|
|
{
|
|
|
var payload = newChild._payload;
|
|
|
var init = newChild._init;
|
|
|
return updateSlot(returnFiber, oldFiber, init(payload), lanes);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (isArray(newChild) || getIteratorFn(newChild)) {
|
|
|
if (key !== null) {
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
return updateFragment(returnFiber, oldFiber, newChild, lanes, null);
|
|
|
}
|
|
|
|
|
|
throwOnInvalidObjectType(returnFiber, newChild);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
if (typeof newChild === 'function') {
|
|
|
warnOnFunctionType(returnFiber);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
function updateFromMap(existingChildren, returnFiber, newIdx, newChild, lanes) {
|
|
|
if (typeof newChild === 'string' && newChild !== '' || typeof newChild === 'number') {
|
|
|
// Text nodes don't have keys, so we neither have to check the old nor
|
|
|
// new node for the key. If both are text nodes, they match.
|
|
|
var matchedFiber = existingChildren.get(newIdx) || null;
|
|
|
return updateTextNode(returnFiber, matchedFiber, '' + newChild, lanes);
|
|
|
}
|
|
|
|
|
|
if (typeof newChild === 'object' && newChild !== null) {
|
|
|
switch (newChild.$$typeof) {
|
|
|
case REACT_ELEMENT_TYPE:
|
|
|
{
|
|
|
var _matchedFiber = existingChildren.get(newChild.key === null ? newIdx : newChild.key) || null;
|
|
|
|
|
|
return updateElement(returnFiber, _matchedFiber, newChild, lanes);
|
|
|
}
|
|
|
|
|
|
case REACT_PORTAL_TYPE:
|
|
|
{
|
|
|
var _matchedFiber2 = existingChildren.get(newChild.key === null ? newIdx : newChild.key) || null;
|
|
|
|
|
|
return updatePortal(returnFiber, _matchedFiber2, newChild, lanes);
|
|
|
}
|
|
|
|
|
|
case REACT_LAZY_TYPE:
|
|
|
var payload = newChild._payload;
|
|
|
var init = newChild._init;
|
|
|
return updateFromMap(existingChildren, returnFiber, newIdx, init(payload), lanes);
|
|
|
}
|
|
|
|
|
|
if (isArray(newChild) || getIteratorFn(newChild)) {
|
|
|
var _matchedFiber3 = existingChildren.get(newIdx) || null;
|
|
|
|
|
|
return updateFragment(returnFiber, _matchedFiber3, newChild, lanes, null);
|
|
|
}
|
|
|
|
|
|
throwOnInvalidObjectType(returnFiber, newChild);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
if (typeof newChild === 'function') {
|
|
|
warnOnFunctionType(returnFiber);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return null;
|
|
|
}
|
|
|
/**
|
|
|
* Warns if there is a duplicate or missing key
|
|
|
*/
|
|
|
|
|
|
|
|
|
function warnOnInvalidKey(child, knownKeys, returnFiber) {
|
|
|
{
|
|
|
if (typeof child !== 'object' || child === null) {
|
|
|
return knownKeys;
|
|
|
}
|
|
|
|
|
|
switch (child.$$typeof) {
|
|
|
case REACT_ELEMENT_TYPE:
|
|
|
case REACT_PORTAL_TYPE:
|
|
|
warnForMissingKey(child, returnFiber);
|
|
|
var key = child.key;
|
|
|
|
|
|
if (typeof key !== 'string') {
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
if (knownKeys === null) {
|
|
|
knownKeys = new Set();
|
|
|
knownKeys.add(key);
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
if (!knownKeys.has(key)) {
|
|
|
knownKeys.add(key);
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
error('Encountered two children with the same key, `%s`. ' + 'Keys should be unique so that components maintain their identity ' + 'across updates. Non-unique keys may cause children to be ' + 'duplicated and/or omitted — the behavior is unsupported and ' + 'could change in a future version.', key);
|
|
|
|
|
|
break;
|
|
|
|
|
|
case REACT_LAZY_TYPE:
|
|
|
var payload = child._payload;
|
|
|
var init = child._init;
|
|
|
warnOnInvalidKey(init(payload), knownKeys, returnFiber);
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return knownKeys;
|
|
|
}
|
|
|
|
|
|
function reconcileChildrenArray(returnFiber, currentFirstChild, newChildren, lanes) {
|
|
|
// This algorithm can't optimize by searching from both ends since we
|
|
|
// don't have backpointers on fibers. I'm trying to see how far we can get
|
|
|
// with that model. If it ends up not being worth the tradeoffs, we can
|
|
|
// add it later.
|
|
|
// Even with a two ended optimization, we'd want to optimize for the case
|
|
|
// where there are few changes and brute force the comparison instead of
|
|
|
// going for the Map. It'd like to explore hitting that path first in
|
|
|
// forward-only mode and only go for the Map once we notice that we need
|
|
|
// lots of look ahead. This doesn't handle reversal as well as two ended
|
|
|
// search but that's unusual. Besides, for the two ended optimization to
|
|
|
// work on Iterables, we'd need to copy the whole set.
|
|
|
// In this first iteration, we'll just live with hitting the bad case
|
|
|
// (adding everything to a Map) in for every insert/move.
|
|
|
// If you change this code, also update reconcileChildrenIterator() which
|
|
|
// uses the same algorithm.
|
|
|
{
|
|
|
// First, validate keys.
|
|
|
var knownKeys = null;
|
|
|
|
|
|
for (var i = 0; i < newChildren.length; i++) {
|
|
|
var child = newChildren[i];
|
|
|
knownKeys = warnOnInvalidKey(child, knownKeys, returnFiber);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var resultingFirstChild = null;
|
|
|
var previousNewFiber = null;
|
|
|
var oldFiber = currentFirstChild;
|
|
|
var lastPlacedIndex = 0;
|
|
|
var newIdx = 0;
|
|
|
var nextOldFiber = null;
|
|
|
|
|
|
for (; oldFiber !== null && newIdx < newChildren.length; newIdx++) {
|
|
|
if (oldFiber.index > newIdx) {
|
|
|
nextOldFiber = oldFiber;
|
|
|
oldFiber = null;
|
|
|
} else {
|
|
|
nextOldFiber = oldFiber.sibling;
|
|
|
}
|
|
|
|
|
|
var newFiber = updateSlot(returnFiber, oldFiber, newChildren[newIdx], lanes);
|
|
|
|
|
|
if (newFiber === null) {
|
|
|
// TODO: This breaks on empty slots like null children. That's
|
|
|
// unfortunate because it triggers the slow path all the time. We need
|
|
|
// a better way to communicate whether this was a miss or null,
|
|
|
// boolean, undefined, etc.
|
|
|
if (oldFiber === null) {
|
|
|
oldFiber = nextOldFiber;
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
if (shouldTrackSideEffects) {
|
|
|
if (oldFiber && newFiber.alternate === null) {
|
|
|
// We matched the slot, but we didn't reuse the existing fiber, so we
|
|
|
// need to delete the existing child.
|
|
|
deleteChild(returnFiber, oldFiber);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
lastPlacedIndex = placeChild(newFiber, lastPlacedIndex, newIdx);
|
|
|
|
|
|
if (previousNewFiber === null) {
|
|
|
// TODO: Move out of the loop. This only happens for the first run.
|
|
|
resultingFirstChild = newFiber;
|
|
|
} else {
|
|
|
// TODO: Defer siblings if we're not at the right index for this slot.
|
|
|
// I.e. if we had null values before, then we want to defer this
|
|
|
// for each null value. However, we also don't want to call updateSlot
|
|
|
// with the previous one.
|
|
|
previousNewFiber.sibling = newFiber;
|
|
|
}
|
|
|
|
|
|
previousNewFiber = newFiber;
|
|
|
oldFiber = nextOldFiber;
|
|
|
}
|
|
|
|
|
|
if (newIdx === newChildren.length) {
|
|
|
// We've reached the end of the new children. We can delete the rest.
|
|
|
deleteRemainingChildren(returnFiber, oldFiber);
|
|
|
|
|
|
if (getIsHydrating()) {
|
|
|
var numberOfForks = newIdx;
|
|
|
pushTreeFork(returnFiber, numberOfForks);
|
|
|
}
|
|
|
|
|
|
return resultingFirstChild;
|
|
|
}
|
|
|
|
|
|
if (oldFiber === null) {
|
|
|
// If we don't have any more existing children we can choose a fast path
|
|
|
// since the rest will all be insertions.
|
|
|
for (; newIdx < newChildren.length; newIdx++) {
|
|
|
var _newFiber = createChild(returnFiber, newChildren[newIdx], lanes);
|
|
|
|
|
|
if (_newFiber === null) {
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
lastPlacedIndex = placeChild(_newFiber, lastPlacedIndex, newIdx);
|
|
|
|
|
|
if (previousNewFiber === null) {
|
|
|
// TODO: Move out of the loop. This only happens for the first run.
|
|
|
resultingFirstChild = _newFiber;
|
|
|
} else {
|
|
|
previousNewFiber.sibling = _newFiber;
|
|
|
}
|
|
|
|
|
|
previousNewFiber = _newFiber;
|
|
|
}
|
|
|
|
|
|
if (getIsHydrating()) {
|
|
|
var _numberOfForks = newIdx;
|
|
|
pushTreeFork(returnFiber, _numberOfForks);
|
|
|
}
|
|
|
|
|
|
return resultingFirstChild;
|
|
|
} // Add all children to a key map for quick lookups.
|
|
|
|
|
|
|
|
|
var existingChildren = mapRemainingChildren(returnFiber, oldFiber); // Keep scanning and use the map to restore deleted items as moves.
|
|
|
|
|
|
for (; newIdx < newChildren.length; newIdx++) {
|
|
|
var _newFiber2 = updateFromMap(existingChildren, returnFiber, newIdx, newChildren[newIdx], lanes);
|
|
|
|
|
|
if (_newFiber2 !== null) {
|
|
|
if (shouldTrackSideEffects) {
|
|
|
if (_newFiber2.alternate !== null) {
|
|
|
// The new fiber is a work in progress, but if there exists a
|
|
|
// current, that means that we reused the fiber. We need to delete
|
|
|
// it from the child list so that we don't add it to the deletion
|
|
|
// list.
|
|
|
existingChildren.delete(_newFiber2.key === null ? newIdx : _newFiber2.key);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
lastPlacedIndex = placeChild(_newFiber2, lastPlacedIndex, newIdx);
|
|
|
|
|
|
if (previousNewFiber === null) {
|
|
|
resultingFirstChild = _newFiber2;
|
|
|
} else {
|
|
|
previousNewFiber.sibling = _newFiber2;
|
|
|
}
|
|
|
|
|
|
previousNewFiber = _newFiber2;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (shouldTrackSideEffects) {
|
|
|
// Any existing children that weren't consumed above were deleted. We need
|
|
|
// to add them to the deletion list.
|
|
|
existingChildren.forEach(function (child) {
|
|
|
return deleteChild(returnFiber, child);
|
|
|
});
|
|
|
}
|
|
|
|
|
|
if (getIsHydrating()) {
|
|
|
var _numberOfForks2 = newIdx;
|
|
|
pushTreeFork(returnFiber, _numberOfForks2);
|
|
|
}
|
|
|
|
|
|
return resultingFirstChild;
|
|
|
}
|
|
|
|
|
|
function reconcileChildrenIterator(returnFiber, currentFirstChild, newChildrenIterable, lanes) {
|
|
|
// This is the same implementation as reconcileChildrenArray(),
|
|
|
// but using the iterator instead.
|
|
|
var iteratorFn = getIteratorFn(newChildrenIterable);
|
|
|
|
|
|
if (typeof iteratorFn !== 'function') {
|
|
|
throw new Error('An object is not an iterable. This error is likely caused by a bug in ' + 'React. Please file an issue.');
|
|
|
}
|
|
|
|
|
|
{
|
|
|
// We don't support rendering Generators because it's a mutation.
|
|
|
// See https://github.com/facebook/react/issues/12995
|
|
|
if (typeof Symbol === 'function' && // $FlowFixMe Flow doesn't know about toStringTag
|
|
|
newChildrenIterable[Symbol.toStringTag] === 'Generator') {
|
|
|
if (!didWarnAboutGenerators) {
|
|
|
error('Using Generators as children is unsupported and will likely yield ' + 'unexpected results because enumerating a generator mutates it. ' + 'You may convert it to an array with `Array.from()` or the ' + '`[...spread]` operator before rendering. Keep in mind ' + 'you might need to polyfill these features for older browsers.');
|
|
|
}
|
|
|
|
|
|
didWarnAboutGenerators = true;
|
|
|
} // Warn about using Maps as children
|
|
|
|
|
|
|
|
|
if (newChildrenIterable.entries === iteratorFn) {
|
|
|
if (!didWarnAboutMaps) {
|
|
|
error('Using Maps as children is not supported. ' + 'Use an array of keyed ReactElements instead.');
|
|
|
}
|
|
|
|
|
|
didWarnAboutMaps = true;
|
|
|
} // First, validate keys.
|
|
|
// We'll get a different iterator later for the main pass.
|
|
|
|
|
|
|
|
|
var _newChildren = iteratorFn.call(newChildrenIterable);
|
|
|
|
|
|
if (_newChildren) {
|
|
|
var knownKeys = null;
|
|
|
|
|
|
var _step = _newChildren.next();
|
|
|
|
|
|
for (; !_step.done; _step = _newChildren.next()) {
|
|
|
var child = _step.value;
|
|
|
knownKeys = warnOnInvalidKey(child, knownKeys, returnFiber);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var newChildren = iteratorFn.call(newChildrenIterable);
|
|
|
|
|
|
if (newChildren == null) {
|
|
|
throw new Error('An iterable object provided no iterator.');
|
|
|
}
|
|
|
|
|
|
var resultingFirstChild = null;
|
|
|
var previousNewFiber = null;
|
|
|
var oldFiber = currentFirstChild;
|
|
|
var lastPlacedIndex = 0;
|
|
|
var newIdx = 0;
|
|
|
var nextOldFiber = null;
|
|
|
var step = newChildren.next();
|
|
|
|
|
|
for (; oldFiber !== null && !step.done; newIdx++, step = newChildren.next()) {
|
|
|
if (oldFiber.index > newIdx) {
|
|
|
nextOldFiber = oldFiber;
|
|
|
oldFiber = null;
|
|
|
} else {
|
|
|
nextOldFiber = oldFiber.sibling;
|
|
|
}
|
|
|
|
|
|
var newFiber = updateSlot(returnFiber, oldFiber, step.value, lanes);
|
|
|
|
|
|
if (newFiber === null) {
|
|
|
// TODO: This breaks on empty slots like null children. That's
|
|
|
// unfortunate because it triggers the slow path all the time. We need
|
|
|
// a better way to communicate whether this was a miss or null,
|
|
|
// boolean, undefined, etc.
|
|
|
if (oldFiber === null) {
|
|
|
oldFiber = nextOldFiber;
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
if (shouldTrackSideEffects) {
|
|
|
if (oldFiber && newFiber.alternate === null) {
|
|
|
// We matched the slot, but we didn't reuse the existing fiber, so we
|
|
|
// need to delete the existing child.
|
|
|
deleteChild(returnFiber, oldFiber);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
lastPlacedIndex = placeChild(newFiber, lastPlacedIndex, newIdx);
|
|
|
|
|
|
if (previousNewFiber === null) {
|
|
|
// TODO: Move out of the loop. This only happens for the first run.
|
|
|
resultingFirstChild = newFiber;
|
|
|
} else {
|
|
|
// TODO: Defer siblings if we're not at the right index for this slot.
|
|
|
// I.e. if we had null values before, then we want to defer this
|
|
|
// for each null value. However, we also don't want to call updateSlot
|
|
|
// with the previous one.
|
|
|
previousNewFiber.sibling = newFiber;
|
|
|
}
|
|
|
|
|
|
previousNewFiber = newFiber;
|
|
|
oldFiber = nextOldFiber;
|
|
|
}
|
|
|
|
|
|
if (step.done) {
|
|
|
// We've reached the end of the new children. We can delete the rest.
|
|
|
deleteRemainingChildren(returnFiber, oldFiber);
|
|
|
|
|
|
if (getIsHydrating()) {
|
|
|
var numberOfForks = newIdx;
|
|
|
pushTreeFork(returnFiber, numberOfForks);
|
|
|
}
|
|
|
|
|
|
return resultingFirstChild;
|
|
|
}
|
|
|
|
|
|
if (oldFiber === null) {
|
|
|
// If we don't have any more existing children we can choose a fast path
|
|
|
// since the rest will all be insertions.
|
|
|
for (; !step.done; newIdx++, step = newChildren.next()) {
|
|
|
var _newFiber3 = createChild(returnFiber, step.value, lanes);
|
|
|
|
|
|
if (_newFiber3 === null) {
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
lastPlacedIndex = placeChild(_newFiber3, lastPlacedIndex, newIdx);
|
|
|
|
|
|
if (previousNewFiber === null) {
|
|
|
// TODO: Move out of the loop. This only happens for the first run.
|
|
|
resultingFirstChild = _newFiber3;
|
|
|
} else {
|
|
|
previousNewFiber.sibling = _newFiber3;
|
|
|
}
|
|
|
|
|
|
previousNewFiber = _newFiber3;
|
|
|
}
|
|
|
|
|
|
if (getIsHydrating()) {
|
|
|
var _numberOfForks3 = newIdx;
|
|
|
pushTreeFork(returnFiber, _numberOfForks3);
|
|
|
}
|
|
|
|
|
|
return resultingFirstChild;
|
|
|
} // Add all children to a key map for quick lookups.
|
|
|
|
|
|
|
|
|
var existingChildren = mapRemainingChildren(returnFiber, oldFiber); // Keep scanning and use the map to restore deleted items as moves.
|
|
|
|
|
|
for (; !step.done; newIdx++, step = newChildren.next()) {
|
|
|
var _newFiber4 = updateFromMap(existingChildren, returnFiber, newIdx, step.value, lanes);
|
|
|
|
|
|
if (_newFiber4 !== null) {
|
|
|
if (shouldTrackSideEffects) {
|
|
|
if (_newFiber4.alternate !== null) {
|
|
|
// The new fiber is a work in progress, but if there exists a
|
|
|
// current, that means that we reused the fiber. We need to delete
|
|
|
// it from the child list so that we don't add it to the deletion
|
|
|
// list.
|
|
|
existingChildren.delete(_newFiber4.key === null ? newIdx : _newFiber4.key);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
lastPlacedIndex = placeChild(_newFiber4, lastPlacedIndex, newIdx);
|
|
|
|
|
|
if (previousNewFiber === null) {
|
|
|
resultingFirstChild = _newFiber4;
|
|
|
} else {
|
|
|
previousNewFiber.sibling = _newFiber4;
|
|
|
}
|
|
|
|
|
|
previousNewFiber = _newFiber4;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (shouldTrackSideEffects) {
|
|
|
// Any existing children that weren't consumed above were deleted. We need
|
|
|
// to add them to the deletion list.
|
|
|
existingChildren.forEach(function (child) {
|
|
|
return deleteChild(returnFiber, child);
|
|
|
});
|
|
|
}
|
|
|
|
|
|
if (getIsHydrating()) {
|
|
|
var _numberOfForks4 = newIdx;
|
|
|
pushTreeFork(returnFiber, _numberOfForks4);
|
|
|
}
|
|
|
|
|
|
return resultingFirstChild;
|
|
|
}
|
|
|
|
|
|
function reconcileSingleTextNode(returnFiber, currentFirstChild, textContent, lanes) {
|
|
|
// There's no need to check for keys on text nodes since we don't have a
|
|
|
// way to define them.
|
|
|
if (currentFirstChild !== null && currentFirstChild.tag === HostText) {
|
|
|
// We already have an existing node so let's just update it and delete
|
|
|
// the rest.
|
|
|
deleteRemainingChildren(returnFiber, currentFirstChild.sibling);
|
|
|
var existing = useFiber(currentFirstChild, textContent);
|
|
|
existing.return = returnFiber;
|
|
|
return existing;
|
|
|
} // The existing first child is not a text node so we need to create one
|
|
|
// and delete the existing ones.
|
|
|
|
|
|
|
|
|
deleteRemainingChildren(returnFiber, currentFirstChild);
|
|
|
var created = createFiberFromText(textContent, returnFiber.mode, lanes);
|
|
|
created.return = returnFiber;
|
|
|
return created;
|
|
|
}
|
|
|
|
|
|
function reconcileSingleElement(returnFiber, currentFirstChild, element, lanes) {
|
|
|
var key = element.key;
|
|
|
var child = currentFirstChild;
|
|
|
|
|
|
while (child !== null) {
|
|
|
// TODO: If key === null and child.key === null, then this only applies to
|
|
|
// the first item in the list.
|
|
|
if (child.key === key) {
|
|
|
var elementType = element.type;
|
|
|
|
|
|
if (elementType === REACT_FRAGMENT_TYPE) {
|
|
|
if (child.tag === Fragment) {
|
|
|
deleteRemainingChildren(returnFiber, child.sibling);
|
|
|
var existing = useFiber(child, element.props.children);
|
|
|
existing.return = returnFiber;
|
|
|
|
|
|
{
|
|
|
existing._debugSource = element._source;
|
|
|
existing._debugOwner = element._owner;
|
|
|
}
|
|
|
|
|
|
return existing;
|
|
|
}
|
|
|
} else {
|
|
|
if (child.elementType === elementType || ( // Keep this check inline so it only runs on the false path:
|
|
|
isCompatibleFamilyForHotReloading(child, element) ) || // Lazy types should reconcile their resolved type.
|
|
|
// We need to do this after the Hot Reloading check above,
|
|
|
// because hot reloading has different semantics than prod because
|
|
|
// it doesn't resuspend. So we can't let the call below suspend.
|
|
|
typeof elementType === 'object' && elementType !== null && elementType.$$typeof === REACT_LAZY_TYPE && resolveLazy(elementType) === child.type) {
|
|
|
deleteRemainingChildren(returnFiber, child.sibling);
|
|
|
|
|
|
var _existing = useFiber(child, element.props);
|
|
|
|
|
|
_existing.ref = coerceRef(returnFiber, child, element);
|
|
|
_existing.return = returnFiber;
|
|
|
|
|
|
{
|
|
|
_existing._debugSource = element._source;
|
|
|
_existing._debugOwner = element._owner;
|
|
|
}
|
|
|
|
|
|
return _existing;
|
|
|
}
|
|
|
} // Didn't match.
|
|
|
|
|
|
|
|
|
deleteRemainingChildren(returnFiber, child);
|
|
|
break;
|
|
|
} else {
|
|
|
deleteChild(returnFiber, child);
|
|
|
}
|
|
|
|
|
|
child = child.sibling;
|
|
|
}
|
|
|
|
|
|
if (element.type === REACT_FRAGMENT_TYPE) {
|
|
|
var created = createFiberFromFragment(element.props.children, returnFiber.mode, lanes, element.key);
|
|
|
created.return = returnFiber;
|
|
|
return created;
|
|
|
} else {
|
|
|
var _created4 = createFiberFromElement(element, returnFiber.mode, lanes);
|
|
|
|
|
|
_created4.ref = coerceRef(returnFiber, currentFirstChild, element);
|
|
|
_created4.return = returnFiber;
|
|
|
return _created4;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function reconcileSinglePortal(returnFiber, currentFirstChild, portal, lanes) {
|
|
|
var key = portal.key;
|
|
|
var child = currentFirstChild;
|
|
|
|
|
|
while (child !== null) {
|
|
|
// TODO: If key === null and child.key === null, then this only applies to
|
|
|
// the first item in the list.
|
|
|
if (child.key === key) {
|
|
|
if (child.tag === HostPortal && child.stateNode.containerInfo === portal.containerInfo && child.stateNode.implementation === portal.implementation) {
|
|
|
deleteRemainingChildren(returnFiber, child.sibling);
|
|
|
var existing = useFiber(child, portal.children || []);
|
|
|
existing.return = returnFiber;
|
|
|
return existing;
|
|
|
} else {
|
|
|
deleteRemainingChildren(returnFiber, child);
|
|
|
break;
|
|
|
}
|
|
|
} else {
|
|
|
deleteChild(returnFiber, child);
|
|
|
}
|
|
|
|
|
|
child = child.sibling;
|
|
|
}
|
|
|
|
|
|
var created = createFiberFromPortal(portal, returnFiber.mode, lanes);
|
|
|
created.return = returnFiber;
|
|
|
return created;
|
|
|
} // This API will tag the children with the side-effect of the reconciliation
|
|
|
// itself. They will be added to the side-effect list as we pass through the
|
|
|
// children and the parent.
|
|
|
|
|
|
|
|
|
function reconcileChildFibers(returnFiber, currentFirstChild, newChild, lanes) {
|
|
|
// This function is not recursive.
|
|
|
// If the top level item is an array, we treat it as a set of children,
|
|
|
// not as a fragment. Nested arrays on the other hand will be treated as
|
|
|
// fragment nodes. Recursion happens at the normal flow.
|
|
|
// Handle top level unkeyed fragments as if they were arrays.
|
|
|
// This leads to an ambiguity between <>{[...]}</> and <>...</>.
|
|
|
// We treat the ambiguous cases above the same.
|
|
|
var isUnkeyedTopLevelFragment = typeof newChild === 'object' && newChild !== null && newChild.type === REACT_FRAGMENT_TYPE && newChild.key === null;
|
|
|
|
|
|
if (isUnkeyedTopLevelFragment) {
|
|
|
newChild = newChild.props.children;
|
|
|
} // Handle object types
|
|
|
|
|
|
|
|
|
if (typeof newChild === 'object' && newChild !== null) {
|
|
|
switch (newChild.$$typeof) {
|
|
|
case REACT_ELEMENT_TYPE:
|
|
|
return placeSingleChild(reconcileSingleElement(returnFiber, currentFirstChild, newChild, lanes));
|
|
|
|
|
|
case REACT_PORTAL_TYPE:
|
|
|
return placeSingleChild(reconcileSinglePortal(returnFiber, currentFirstChild, newChild, lanes));
|
|
|
|
|
|
case REACT_LAZY_TYPE:
|
|
|
var payload = newChild._payload;
|
|
|
var init = newChild._init; // TODO: This function is supposed to be non-recursive.
|
|
|
|
|
|
return reconcileChildFibers(returnFiber, currentFirstChild, init(payload), lanes);
|
|
|
}
|
|
|
|
|
|
if (isArray(newChild)) {
|
|
|
return reconcileChildrenArray(returnFiber, currentFirstChild, newChild, lanes);
|
|
|
}
|
|
|
|
|
|
if (getIteratorFn(newChild)) {
|
|
|
return reconcileChildrenIterator(returnFiber, currentFirstChild, newChild, lanes);
|
|
|
}
|
|
|
|
|
|
throwOnInvalidObjectType(returnFiber, newChild);
|
|
|
}
|
|
|
|
|
|
if (typeof newChild === 'string' && newChild !== '' || typeof newChild === 'number') {
|
|
|
return placeSingleChild(reconcileSingleTextNode(returnFiber, currentFirstChild, '' + newChild, lanes));
|
|
|
}
|
|
|
|
|
|
{
|
|
|
if (typeof newChild === 'function') {
|
|
|
warnOnFunctionType(returnFiber);
|
|
|
}
|
|
|
} // Remaining cases are all treated as empty.
|
|
|
|
|
|
|
|
|
return deleteRemainingChildren(returnFiber, currentFirstChild);
|
|
|
}
|
|
|
|
|
|
return reconcileChildFibers;
|
|
|
}
|
|
|
|
|
|
var reconcileChildFibers = ChildReconciler(true);
|
|
|
var mountChildFibers = ChildReconciler(false);
|
|
|
function cloneChildFibers(current, workInProgress) {
|
|
|
if (current !== null && workInProgress.child !== current.child) {
|
|
|
throw new Error('Resuming work not yet implemented.');
|
|
|
}
|
|
|
|
|
|
if (workInProgress.child === null) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
var currentChild = workInProgress.child;
|
|
|
var newChild = createWorkInProgress(currentChild, currentChild.pendingProps);
|
|
|
workInProgress.child = newChild;
|
|
|
newChild.return = workInProgress;
|
|
|
|
|
|
while (currentChild.sibling !== null) {
|
|
|
currentChild = currentChild.sibling;
|
|
|
newChild = newChild.sibling = createWorkInProgress(currentChild, currentChild.pendingProps);
|
|
|
newChild.return = workInProgress;
|
|
|
}
|
|
|
|
|
|
newChild.sibling = null;
|
|
|
} // Reset a workInProgress child set to prepare it for a second pass.
|
|
|
|
|
|
function resetChildFibers(workInProgress, lanes) {
|
|
|
var child = workInProgress.child;
|
|
|
|
|
|
while (child !== null) {
|
|
|
resetWorkInProgress(child, lanes);
|
|
|
child = child.sibling;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var NO_CONTEXT = {};
|
|
|
var contextStackCursor$1 = createCursor(NO_CONTEXT);
|
|
|
var contextFiberStackCursor = createCursor(NO_CONTEXT);
|
|
|
var rootInstanceStackCursor = createCursor(NO_CONTEXT);
|
|
|
|
|
|
function requiredContext(c) {
|
|
|
if (c === NO_CONTEXT) {
|
|
|
throw new Error('Expected host context to exist. This error is likely caused by a bug ' + 'in React. Please file an issue.');
|
|
|
}
|
|
|
|
|
|
return c;
|
|
|
}
|
|
|
|
|
|
function getRootHostContainer() {
|
|
|
var rootInstance = requiredContext(rootInstanceStackCursor.current);
|
|
|
return rootInstance;
|
|
|
}
|
|
|
|
|
|
function pushHostContainer(fiber, nextRootInstance) {
|
|
|
// Push current root instance onto the stack;
|
|
|
// This allows us to reset root when portals are popped.
|
|
|
push(rootInstanceStackCursor, nextRootInstance, fiber); // Track the context and the Fiber that provided it.
|
|
|
// This enables us to pop only Fibers that provide unique contexts.
|
|
|
|
|
|
push(contextFiberStackCursor, fiber, fiber); // Finally, we need to push the host context to the stack.
|
|
|
// However, we can't just call getRootHostContext() and push it because
|
|
|
// we'd have a different number of entries on the stack depending on
|
|
|
// whether getRootHostContext() throws somewhere in renderer code or not.
|
|
|
// So we push an empty value first. This lets us safely unwind on errors.
|
|
|
|
|
|
push(contextStackCursor$1, NO_CONTEXT, fiber);
|
|
|
var nextRootContext = getRootHostContext(nextRootInstance); // Now that we know this function doesn't throw, replace it.
|
|
|
|
|
|
pop(contextStackCursor$1, fiber);
|
|
|
push(contextStackCursor$1, nextRootContext, fiber);
|
|
|
}
|
|
|
|
|
|
function popHostContainer(fiber) {
|
|
|
pop(contextStackCursor$1, fiber);
|
|
|
pop(contextFiberStackCursor, fiber);
|
|
|
pop(rootInstanceStackCursor, fiber);
|
|
|
}
|
|
|
|
|
|
function getHostContext() {
|
|
|
var context = requiredContext(contextStackCursor$1.current);
|
|
|
return context;
|
|
|
}
|
|
|
|
|
|
function pushHostContext(fiber) {
|
|
|
var rootInstance = requiredContext(rootInstanceStackCursor.current);
|
|
|
var context = requiredContext(contextStackCursor$1.current);
|
|
|
var nextContext = getChildHostContext(context, fiber.type); // Don't push this Fiber's context unless it's unique.
|
|
|
|
|
|
if (context === nextContext) {
|
|
|
return;
|
|
|
} // Track the context and the Fiber that provided it.
|
|
|
// This enables us to pop only Fibers that provide unique contexts.
|
|
|
|
|
|
|
|
|
push(contextFiberStackCursor, fiber, fiber);
|
|
|
push(contextStackCursor$1, nextContext, fiber);
|
|
|
}
|
|
|
|
|
|
function popHostContext(fiber) {
|
|
|
// Do not pop unless this Fiber provided the current context.
|
|
|
// pushHostContext() only pushes Fibers that provide unique contexts.
|
|
|
if (contextFiberStackCursor.current !== fiber) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
pop(contextStackCursor$1, fiber);
|
|
|
pop(contextFiberStackCursor, fiber);
|
|
|
}
|
|
|
|
|
|
var DefaultSuspenseContext = 0; // The Suspense Context is split into two parts. The lower bits is
|
|
|
// inherited deeply down the subtree. The upper bits only affect
|
|
|
// this immediate suspense boundary and gets reset each new
|
|
|
// boundary or suspense list.
|
|
|
|
|
|
var SubtreeSuspenseContextMask = 1; // Subtree Flags:
|
|
|
// InvisibleParentSuspenseContext indicates that one of our parent Suspense
|
|
|
// boundaries is not currently showing visible main content.
|
|
|
// Either because it is already showing a fallback or is not mounted at all.
|
|
|
// We can use this to determine if it is desirable to trigger a fallback at
|
|
|
// the parent. If not, then we might need to trigger undesirable boundaries
|
|
|
// and/or suspend the commit to avoid hiding the parent content.
|
|
|
|
|
|
var InvisibleParentSuspenseContext = 1; // Shallow Flags:
|
|
|
// ForceSuspenseFallback can be used by SuspenseList to force newly added
|
|
|
// items into their fallback state during one of the render passes.
|
|
|
|
|
|
var ForceSuspenseFallback = 2;
|
|
|
var suspenseStackCursor = createCursor(DefaultSuspenseContext);
|
|
|
function hasSuspenseContext(parentContext, flag) {
|
|
|
return (parentContext & flag) !== 0;
|
|
|
}
|
|
|
function setDefaultShallowSuspenseContext(parentContext) {
|
|
|
return parentContext & SubtreeSuspenseContextMask;
|
|
|
}
|
|
|
function setShallowSuspenseContext(parentContext, shallowContext) {
|
|
|
return parentContext & SubtreeSuspenseContextMask | shallowContext;
|
|
|
}
|
|
|
function addSubtreeSuspenseContext(parentContext, subtreeContext) {
|
|
|
return parentContext | subtreeContext;
|
|
|
}
|
|
|
function pushSuspenseContext(fiber, newContext) {
|
|
|
push(suspenseStackCursor, newContext, fiber);
|
|
|
}
|
|
|
function popSuspenseContext(fiber) {
|
|
|
pop(suspenseStackCursor, fiber);
|
|
|
}
|
|
|
|
|
|
function shouldCaptureSuspense(workInProgress, hasInvisibleParent) {
|
|
|
// If it was the primary children that just suspended, capture and render the
|
|
|
// fallback. Otherwise, don't capture and bubble to the next boundary.
|
|
|
var nextState = workInProgress.memoizedState;
|
|
|
|
|
|
if (nextState !== null) {
|
|
|
if (nextState.dehydrated !== null) {
|
|
|
// A dehydrated boundary always captures.
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
var props = workInProgress.memoizedProps; // Regular boundaries always capture.
|
|
|
|
|
|
{
|
|
|
return true;
|
|
|
} // If it's a boundary we should avoid, then we prefer to bubble up to the
|
|
|
}
|
|
|
function findFirstSuspended(row) {
|
|
|
var node = row;
|
|
|
|
|
|
while (node !== null) {
|
|
|
if (node.tag === SuspenseComponent) {
|
|
|
var state = node.memoizedState;
|
|
|
|
|
|
if (state !== null) {
|
|
|
var dehydrated = state.dehydrated;
|
|
|
|
|
|
if (dehydrated === null || isSuspenseInstancePending(dehydrated) || isSuspenseInstanceFallback(dehydrated)) {
|
|
|
return node;
|
|
|
}
|
|
|
}
|
|
|
} else if (node.tag === SuspenseListComponent && // revealOrder undefined can't be trusted because it don't
|
|
|
// keep track of whether it suspended or not.
|
|
|
node.memoizedProps.revealOrder !== undefined) {
|
|
|
var didSuspend = (node.flags & DidCapture) !== NoFlags;
|
|
|
|
|
|
if (didSuspend) {
|
|
|
return node;
|
|
|
}
|
|
|
} else if (node.child !== null) {
|
|
|
node.child.return = node;
|
|
|
node = node.child;
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
if (node === row) {
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
while (node.sibling === null) {
|
|
|
if (node.return === null || node.return === row) {
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
node = node.return;
|
|
|
}
|
|
|
|
|
|
node.sibling.return = node.return;
|
|
|
node = node.sibling;
|
|
|
}
|
|
|
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
var NoFlags$1 =
|
|
|
/* */
|
|
|
0; // Represents whether effect should fire.
|
|
|
|
|
|
var HasEffect =
|
|
|
/* */
|
|
|
1; // Represents the phase in which the effect (not the clean-up) fires.
|
|
|
|
|
|
var Insertion =
|
|
|
/* */
|
|
|
2;
|
|
|
var Layout =
|
|
|
/* */
|
|
|
4;
|
|
|
var Passive$1 =
|
|
|
/* */
|
|
|
8;
|
|
|
|
|
|
// and should be reset before starting a new render.
|
|
|
// This tracks which mutable sources need to be reset after a render.
|
|
|
|
|
|
var workInProgressSources = [];
|
|
|
function resetWorkInProgressVersions() {
|
|
|
for (var i = 0; i < workInProgressSources.length; i++) {
|
|
|
var mutableSource = workInProgressSources[i];
|
|
|
|
|
|
{
|
|
|
mutableSource._workInProgressVersionPrimary = null;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
workInProgressSources.length = 0;
|
|
|
}
|
|
|
// This ensures that the version used for server rendering matches the one
|
|
|
// that is eventually read during hydration.
|
|
|
// If they don't match there's a potential tear and a full deopt render is required.
|
|
|
|
|
|
function registerMutableSourceForHydration(root, mutableSource) {
|
|
|
var getVersion = mutableSource._getVersion;
|
|
|
var version = getVersion(mutableSource._source); // TODO Clear this data once all pending hydration work is finished.
|
|
|
// Retaining it forever may interfere with GC.
|
|
|
|
|
|
if (root.mutableSourceEagerHydrationData == null) {
|
|
|
root.mutableSourceEagerHydrationData = [mutableSource, version];
|
|
|
} else {
|
|
|
root.mutableSourceEagerHydrationData.push(mutableSource, version);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var ReactCurrentDispatcher$1 = ReactSharedInternals.ReactCurrentDispatcher,
|
|
|
ReactCurrentBatchConfig$2 = ReactSharedInternals.ReactCurrentBatchConfig;
|
|
|
var didWarnAboutMismatchedHooksForComponent;
|
|
|
var didWarnUncachedGetSnapshot;
|
|
|
|
|
|
{
|
|
|
didWarnAboutMismatchedHooksForComponent = new Set();
|
|
|
}
|
|
|
|
|
|
// These are set right before calling the component.
|
|
|
var renderLanes = NoLanes; // The work-in-progress fiber. I've named it differently to distinguish it from
|
|
|
// the work-in-progress hook.
|
|
|
|
|
|
var currentlyRenderingFiber$1 = null; // Hooks are stored as a linked list on the fiber's memoizedState field. The
|
|
|
// current hook list is the list that belongs to the current fiber. The
|
|
|
// work-in-progress hook list is a new list that will be added to the
|
|
|
// work-in-progress fiber.
|
|
|
|
|
|
var currentHook = null;
|
|
|
var workInProgressHook = null; // Whether an update was scheduled at any point during the render phase. This
|
|
|
// does not get reset if we do another render pass; only when we're completely
|
|
|
// finished evaluating this component. This is an optimization so we know
|
|
|
// whether we need to clear render phase updates after a throw.
|
|
|
|
|
|
var didScheduleRenderPhaseUpdate = false; // Where an update was scheduled only during the current render pass. This
|
|
|
// gets reset after each attempt.
|
|
|
// TODO: Maybe there's some way to consolidate this with
|
|
|
// `didScheduleRenderPhaseUpdate`. Or with `numberOfReRenders`.
|
|
|
|
|
|
var didScheduleRenderPhaseUpdateDuringThisPass = false; // Counts the number of useId hooks in this component.
|
|
|
|
|
|
var localIdCounter = 0; // Used for ids that are generated completely client-side (i.e. not during
|
|
|
// hydration). This counter is global, so client ids are not stable across
|
|
|
// render attempts.
|
|
|
|
|
|
var globalClientIdCounter = 0;
|
|
|
var RE_RENDER_LIMIT = 25; // In DEV, this is the name of the currently executing primitive hook
|
|
|
|
|
|
var currentHookNameInDev = null; // In DEV, this list ensures that hooks are called in the same order between renders.
|
|
|
// The list stores the order of hooks used during the initial render (mount).
|
|
|
// Subsequent renders (updates) reference this list.
|
|
|
|
|
|
var hookTypesDev = null;
|
|
|
var hookTypesUpdateIndexDev = -1; // In DEV, this tracks whether currently rendering component needs to ignore
|
|
|
// the dependencies for Hooks that need them (e.g. useEffect or useMemo).
|
|
|
// When true, such Hooks will always be "remounted". Only used during hot reload.
|
|
|
|
|
|
var ignorePreviousDependencies = false;
|
|
|
|
|
|
function mountHookTypesDev() {
|
|
|
{
|
|
|
var hookName = currentHookNameInDev;
|
|
|
|
|
|
if (hookTypesDev === null) {
|
|
|
hookTypesDev = [hookName];
|
|
|
} else {
|
|
|
hookTypesDev.push(hookName);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function updateHookTypesDev() {
|
|
|
{
|
|
|
var hookName = currentHookNameInDev;
|
|
|
|
|
|
if (hookTypesDev !== null) {
|
|
|
hookTypesUpdateIndexDev++;
|
|
|
|
|
|
if (hookTypesDev[hookTypesUpdateIndexDev] !== hookName) {
|
|
|
warnOnHookMismatchInDev(hookName);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function checkDepsAreArrayDev(deps) {
|
|
|
{
|
|
|
if (deps !== undefined && deps !== null && !isArray(deps)) {
|
|
|
// Verify deps, but only on mount to avoid extra checks.
|
|
|
// It's unlikely their type would change as usually you define them inline.
|
|
|
error('%s received a final argument that is not an array (instead, received `%s`). When ' + 'specified, the final argument must be an array.', currentHookNameInDev, typeof deps);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function warnOnHookMismatchInDev(currentHookName) {
|
|
|
{
|
|
|
var componentName = getComponentNameFromFiber(currentlyRenderingFiber$1);
|
|
|
|
|
|
if (!didWarnAboutMismatchedHooksForComponent.has(componentName)) {
|
|
|
didWarnAboutMismatchedHooksForComponent.add(componentName);
|
|
|
|
|
|
if (hookTypesDev !== null) {
|
|
|
var table = '';
|
|
|
var secondColumnStart = 30;
|
|
|
|
|
|
for (var i = 0; i <= hookTypesUpdateIndexDev; i++) {
|
|
|
var oldHookName = hookTypesDev[i];
|
|
|
var newHookName = i === hookTypesUpdateIndexDev ? currentHookName : oldHookName;
|
|
|
var row = i + 1 + ". " + oldHookName; // Extra space so second column lines up
|
|
|
// lol @ IE not supporting String#repeat
|
|
|
|
|
|
while (row.length < secondColumnStart) {
|
|
|
row += ' ';
|
|
|
}
|
|
|
|
|
|
row += newHookName + '\n';
|
|
|
table += row;
|
|
|
}
|
|
|
|
|
|
error('React has detected a change in the order of Hooks called by %s. ' + 'This will lead to bugs and errors if not fixed. ' + 'For more information, read the Rules of Hooks: https://reactjs.org/link/rules-of-hooks\n\n' + ' Previous render Next render\n' + ' ------------------------------------------------------\n' + '%s' + ' ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n', componentName, table);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function throwInvalidHookError() {
|
|
|
throw new Error('Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for' + ' one of the following reasons:\n' + '1. You might have mismatching versions of React and the renderer (such as React DOM)\n' + '2. You might be breaking the Rules of Hooks\n' + '3. You might have more than one copy of React in the same app\n' + 'See https://reactjs.org/link/invalid-hook-call for tips about how to debug and fix this problem.');
|
|
|
}
|
|
|
|
|
|
function areHookInputsEqual(nextDeps, prevDeps) {
|
|
|
{
|
|
|
if (ignorePreviousDependencies) {
|
|
|
// Only true when this component is being hot reloaded.
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (prevDeps === null) {
|
|
|
{
|
|
|
error('%s received a final argument during this render, but not during ' + 'the previous render. Even though the final argument is optional, ' + 'its type cannot change between renders.', currentHookNameInDev);
|
|
|
}
|
|
|
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
{
|
|
|
// Don't bother comparing lengths in prod because these arrays should be
|
|
|
// passed inline.
|
|
|
if (nextDeps.length !== prevDeps.length) {
|
|
|
error('The final argument passed to %s changed size between renders. The ' + 'order and size of this array must remain constant.\n\n' + 'Previous: %s\n' + 'Incoming: %s', currentHookNameInDev, "[" + prevDeps.join(', ') + "]", "[" + nextDeps.join(', ') + "]");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
for (var i = 0; i < prevDeps.length && i < nextDeps.length; i++) {
|
|
|
if (objectIs(nextDeps[i], prevDeps[i])) {
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
function renderWithHooks(current, workInProgress, Component, props, secondArg, nextRenderLanes) {
|
|
|
renderLanes = nextRenderLanes;
|
|
|
currentlyRenderingFiber$1 = workInProgress;
|
|
|
|
|
|
{
|
|
|
hookTypesDev = current !== null ? current._debugHookTypes : null;
|
|
|
hookTypesUpdateIndexDev = -1; // Used for hot reloading:
|
|
|
|
|
|
ignorePreviousDependencies = current !== null && current.type !== workInProgress.type;
|
|
|
}
|
|
|
|
|
|
workInProgress.memoizedState = null;
|
|
|
workInProgress.updateQueue = null;
|
|
|
workInProgress.lanes = NoLanes; // The following should have already been reset
|
|
|
// currentHook = null;
|
|
|
// workInProgressHook = null;
|
|
|
// didScheduleRenderPhaseUpdate = false;
|
|
|
// localIdCounter = 0;
|
|
|
// TODO Warn if no hooks are used at all during mount, then some are used during update.
|
|
|
// Currently we will identify the update render as a mount because memoizedState === null.
|
|
|
// This is tricky because it's valid for certain types of components (e.g. React.lazy)
|
|
|
// Using memoizedState to differentiate between mount/update only works if at least one stateful hook is used.
|
|
|
// Non-stateful hooks (e.g. context) don't get added to memoizedState,
|
|
|
// so memoizedState would be null during updates and mounts.
|
|
|
|
|
|
{
|
|
|
if (current !== null && current.memoizedState !== null) {
|
|
|
ReactCurrentDispatcher$1.current = HooksDispatcherOnUpdateInDEV;
|
|
|
} else if (hookTypesDev !== null) {
|
|
|
// This dispatcher handles an edge case where a component is updating,
|
|
|
// but no stateful hooks have been used.
|
|
|
// We want to match the production code behavior (which will use HooksDispatcherOnMount),
|
|
|
// but with the extra DEV validation to ensure hooks ordering hasn't changed.
|
|
|
// This dispatcher does that.
|
|
|
ReactCurrentDispatcher$1.current = HooksDispatcherOnMountWithHookTypesInDEV;
|
|
|
} else {
|
|
|
ReactCurrentDispatcher$1.current = HooksDispatcherOnMountInDEV;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var children = Component(props, secondArg); // Check if there was a render phase update
|
|
|
|
|
|
if (didScheduleRenderPhaseUpdateDuringThisPass) {
|
|
|
// Keep rendering in a loop for as long as render phase updates continue to
|
|
|
// be scheduled. Use a counter to prevent infinite loops.
|
|
|
var numberOfReRenders = 0;
|
|
|
|
|
|
do {
|
|
|
didScheduleRenderPhaseUpdateDuringThisPass = false;
|
|
|
localIdCounter = 0;
|
|
|
|
|
|
if (numberOfReRenders >= RE_RENDER_LIMIT) {
|
|
|
throw new Error('Too many re-renders. React limits the number of renders to prevent ' + 'an infinite loop.');
|
|
|
}
|
|
|
|
|
|
numberOfReRenders += 1;
|
|
|
|
|
|
{
|
|
|
// Even when hot reloading, allow dependencies to stabilize
|
|
|
// after first render to prevent infinite render phase updates.
|
|
|
ignorePreviousDependencies = false;
|
|
|
} // Start over from the beginning of the list
|
|
|
|
|
|
|
|
|
currentHook = null;
|
|
|
workInProgressHook = null;
|
|
|
workInProgress.updateQueue = null;
|
|
|
|
|
|
{
|
|
|
// Also validate hook order for cascading updates.
|
|
|
hookTypesUpdateIndexDev = -1;
|
|
|
}
|
|
|
|
|
|
ReactCurrentDispatcher$1.current = HooksDispatcherOnRerenderInDEV ;
|
|
|
children = Component(props, secondArg);
|
|
|
} while (didScheduleRenderPhaseUpdateDuringThisPass);
|
|
|
} // We can assume the previous dispatcher is always this one, since we set it
|
|
|
// at the beginning of the render phase and there's no re-entrance.
|
|
|
|
|
|
|
|
|
ReactCurrentDispatcher$1.current = ContextOnlyDispatcher;
|
|
|
|
|
|
{
|
|
|
workInProgress._debugHookTypes = hookTypesDev;
|
|
|
} // This check uses currentHook so that it works the same in DEV and prod bundles.
|
|
|
// hookTypesDev could catch more cases (e.g. context) but only in DEV bundles.
|
|
|
|
|
|
|
|
|
var didRenderTooFewHooks = currentHook !== null && currentHook.next !== null;
|
|
|
renderLanes = NoLanes;
|
|
|
currentlyRenderingFiber$1 = null;
|
|
|
currentHook = null;
|
|
|
workInProgressHook = null;
|
|
|
|
|
|
{
|
|
|
currentHookNameInDev = null;
|
|
|
hookTypesDev = null;
|
|
|
hookTypesUpdateIndexDev = -1; // Confirm that a static flag was not added or removed since the last
|
|
|
// render. If this fires, it suggests that we incorrectly reset the static
|
|
|
// flags in some other part of the codebase. This has happened before, for
|
|
|
// example, in the SuspenseList implementation.
|
|
|
|
|
|
if (current !== null && (current.flags & StaticMask) !== (workInProgress.flags & StaticMask) && // Disable this warning in legacy mode, because legacy Suspense is weird
|
|
|
// and creates false positives. To make this work in legacy mode, we'd
|
|
|
// need to mark fibers that commit in an incomplete state, somehow. For
|
|
|
// now I'll disable the warning that most of the bugs that would trigger
|
|
|
// it are either exclusive to concurrent mode or exist in both.
|
|
|
(current.mode & ConcurrentMode) !== NoMode) {
|
|
|
error('Internal React error: Expected static flag was missing. Please ' + 'notify the React team.');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
didScheduleRenderPhaseUpdate = false; // This is reset by checkDidRenderIdHook
|
|
|
// localIdCounter = 0;
|
|
|
|
|
|
if (didRenderTooFewHooks) {
|
|
|
throw new Error('Rendered fewer hooks than expected. This may be caused by an accidental ' + 'early return statement.');
|
|
|
}
|
|
|
|
|
|
return children;
|
|
|
}
|
|
|
function checkDidRenderIdHook() {
|
|
|
// This should be called immediately after every renderWithHooks call.
|
|
|
// Conceptually, it's part of the return value of renderWithHooks; it's only a
|
|
|
// separate function to avoid using an array tuple.
|
|
|
var didRenderIdHook = localIdCounter !== 0;
|
|
|
localIdCounter = 0;
|
|
|
return didRenderIdHook;
|
|
|
}
|
|
|
function bailoutHooks(current, workInProgress, lanes) {
|
|
|
workInProgress.updateQueue = current.updateQueue; // TODO: Don't need to reset the flags here, because they're reset in the
|
|
|
// complete phase (bubbleProperties).
|
|
|
|
|
|
if ( (workInProgress.mode & StrictEffectsMode) !== NoMode) {
|
|
|
workInProgress.flags &= ~(MountPassiveDev | MountLayoutDev | Passive | Update);
|
|
|
} else {
|
|
|
workInProgress.flags &= ~(Passive | Update);
|
|
|
}
|
|
|
|
|
|
current.lanes = removeLanes(current.lanes, lanes);
|
|
|
}
|
|
|
function resetHooksAfterThrow() {
|
|
|
// We can assume the previous dispatcher is always this one, since we set it
|
|
|
// at the beginning of the render phase and there's no re-entrance.
|
|
|
ReactCurrentDispatcher$1.current = ContextOnlyDispatcher;
|
|
|
|
|
|
if (didScheduleRenderPhaseUpdate) {
|
|
|
// There were render phase updates. These are only valid for this render
|
|
|
// phase, which we are now aborting. Remove the updates from the queues so
|
|
|
// they do not persist to the next render. Do not remove updates from hooks
|
|
|
// that weren't processed.
|
|
|
//
|
|
|
// Only reset the updates from the queue if it has a clone. If it does
|
|
|
// not have a clone, that means it wasn't processed, and the updates were
|
|
|
// scheduled before we entered the render phase.
|
|
|
var hook = currentlyRenderingFiber$1.memoizedState;
|
|
|
|
|
|
while (hook !== null) {
|
|
|
var queue = hook.queue;
|
|
|
|
|
|
if (queue !== null) {
|
|
|
queue.pending = null;
|
|
|
}
|
|
|
|
|
|
hook = hook.next;
|
|
|
}
|
|
|
|
|
|
didScheduleRenderPhaseUpdate = false;
|
|
|
}
|
|
|
|
|
|
renderLanes = NoLanes;
|
|
|
currentlyRenderingFiber$1 = null;
|
|
|
currentHook = null;
|
|
|
workInProgressHook = null;
|
|
|
|
|
|
{
|
|
|
hookTypesDev = null;
|
|
|
hookTypesUpdateIndexDev = -1;
|
|
|
currentHookNameInDev = null;
|
|
|
isUpdatingOpaqueValueInRenderPhase = false;
|
|
|
}
|
|
|
|
|
|
didScheduleRenderPhaseUpdateDuringThisPass = false;
|
|
|
localIdCounter = 0;
|
|
|
}
|
|
|
|
|
|
function mountWorkInProgressHook() {
|
|
|
var hook = {
|
|
|
memoizedState: null,
|
|
|
baseState: null,
|
|
|
baseQueue: null,
|
|
|
queue: null,
|
|
|
next: null
|
|
|
};
|
|
|
|
|
|
if (workInProgressHook === null) {
|
|
|
// This is the first hook in the list
|
|
|
currentlyRenderingFiber$1.memoizedState = workInProgressHook = hook;
|
|
|
} else {
|
|
|
// Append to the end of the list
|
|
|
workInProgressHook = workInProgressHook.next = hook;
|
|
|
}
|
|
|
|
|
|
return workInProgressHook;
|
|
|
}
|
|
|
|
|
|
function updateWorkInProgressHook() {
|
|
|
// This function is used both for updates and for re-renders triggered by a
|
|
|
// render phase update. It assumes there is either a current hook we can
|
|
|
// clone, or a work-in-progress hook from a previous render pass that we can
|
|
|
// use as a base. When we reach the end of the base list, we must switch to
|
|
|
// the dispatcher used for mounts.
|
|
|
var nextCurrentHook;
|
|
|
|
|
|
if (currentHook === null) {
|
|
|
var current = currentlyRenderingFiber$1.alternate;
|
|
|
|
|
|
if (current !== null) {
|
|
|
nextCurrentHook = current.memoizedState;
|
|
|
} else {
|
|
|
nextCurrentHook = null;
|
|
|
}
|
|
|
} else {
|
|
|
nextCurrentHook = currentHook.next;
|
|
|
}
|
|
|
|
|
|
var nextWorkInProgressHook;
|
|
|
|
|
|
if (workInProgressHook === null) {
|
|
|
nextWorkInProgressHook = currentlyRenderingFiber$1.memoizedState;
|
|
|
} else {
|
|
|
nextWorkInProgressHook = workInProgressHook.next;
|
|
|
}
|
|
|
|
|
|
if (nextWorkInProgressHook !== null) {
|
|
|
// There's already a work-in-progress. Reuse it.
|
|
|
workInProgressHook = nextWorkInProgressHook;
|
|
|
nextWorkInProgressHook = workInProgressHook.next;
|
|
|
currentHook = nextCurrentHook;
|
|
|
} else {
|
|
|
// Clone from the current hook.
|
|
|
if (nextCurrentHook === null) {
|
|
|
throw new Error('Rendered more hooks than during the previous render.');
|
|
|
}
|
|
|
|
|
|
currentHook = nextCurrentHook;
|
|
|
var newHook = {
|
|
|
memoizedState: currentHook.memoizedState,
|
|
|
baseState: currentHook.baseState,
|
|
|
baseQueue: currentHook.baseQueue,
|
|
|
queue: currentHook.queue,
|
|
|
next: null
|
|
|
};
|
|
|
|
|
|
if (workInProgressHook === null) {
|
|
|
// This is the first hook in the list.
|
|
|
currentlyRenderingFiber$1.memoizedState = workInProgressHook = newHook;
|
|
|
} else {
|
|
|
// Append to the end of the list.
|
|
|
workInProgressHook = workInProgressHook.next = newHook;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return workInProgressHook;
|
|
|
}
|
|
|
|
|
|
function createFunctionComponentUpdateQueue() {
|
|
|
return {
|
|
|
lastEffect: null,
|
|
|
stores: null
|
|
|
};
|
|
|
}
|
|
|
|
|
|
function basicStateReducer(state, action) {
|
|
|
// $FlowFixMe: Flow doesn't like mixed types
|
|
|
return typeof action === 'function' ? action(state) : action;
|
|
|
}
|
|
|
|
|
|
function mountReducer(reducer, initialArg, init) {
|
|
|
var hook = mountWorkInProgressHook();
|
|
|
var initialState;
|
|
|
|
|
|
if (init !== undefined) {
|
|
|
initialState = init(initialArg);
|
|
|
} else {
|
|
|
initialState = initialArg;
|
|
|
}
|
|
|
|
|
|
hook.memoizedState = hook.baseState = initialState;
|
|
|
var queue = {
|
|
|
pending: null,
|
|
|
interleaved: null,
|
|
|
lanes: NoLanes,
|
|
|
dispatch: null,
|
|
|
lastRenderedReducer: reducer,
|
|
|
lastRenderedState: initialState
|
|
|
};
|
|
|
hook.queue = queue;
|
|
|
var dispatch = queue.dispatch = dispatchReducerAction.bind(null, currentlyRenderingFiber$1, queue);
|
|
|
return [hook.memoizedState, dispatch];
|
|
|
}
|
|
|
|
|
|
function updateReducer(reducer, initialArg, init) {
|
|
|
var hook = updateWorkInProgressHook();
|
|
|
var queue = hook.queue;
|
|
|
|
|
|
if (queue === null) {
|
|
|
throw new Error('Should have a queue. This is likely a bug in React. Please file an issue.');
|
|
|
}
|
|
|
|
|
|
queue.lastRenderedReducer = reducer;
|
|
|
var current = currentHook; // The last rebase update that is NOT part of the base state.
|
|
|
|
|
|
var baseQueue = current.baseQueue; // The last pending update that hasn't been processed yet.
|
|
|
|
|
|
var pendingQueue = queue.pending;
|
|
|
|
|
|
if (pendingQueue !== null) {
|
|
|
// We have new updates that haven't been processed yet.
|
|
|
// We'll add them to the base queue.
|
|
|
if (baseQueue !== null) {
|
|
|
// Merge the pending queue and the base queue.
|
|
|
var baseFirst = baseQueue.next;
|
|
|
var pendingFirst = pendingQueue.next;
|
|
|
baseQueue.next = pendingFirst;
|
|
|
pendingQueue.next = baseFirst;
|
|
|
}
|
|
|
|
|
|
{
|
|
|
if (current.baseQueue !== baseQueue) {
|
|
|
// Internal invariant that should never happen, but feasibly could in
|
|
|
// the future if we implement resuming, or some form of that.
|
|
|
error('Internal error: Expected work-in-progress queue to be a clone. ' + 'This is a bug in React.');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
current.baseQueue = baseQueue = pendingQueue;
|
|
|
queue.pending = null;
|
|
|
}
|
|
|
|
|
|
if (baseQueue !== null) {
|
|
|
// We have a queue to process.
|
|
|
var first = baseQueue.next;
|
|
|
var newState = current.baseState;
|
|
|
var newBaseState = null;
|
|
|
var newBaseQueueFirst = null;
|
|
|
var newBaseQueueLast = null;
|
|
|
var update = first;
|
|
|
|
|
|
do {
|
|
|
var updateLane = update.lane;
|
|
|
|
|
|
if (!isSubsetOfLanes(renderLanes, updateLane)) {
|
|
|
// Priority is insufficient. Skip this update. If this is the first
|
|
|
// skipped update, the previous update/state is the new base
|
|
|
// update/state.
|
|
|
var clone = {
|
|
|
lane: updateLane,
|
|
|
action: update.action,
|
|
|
hasEagerState: update.hasEagerState,
|
|
|
eagerState: update.eagerState,
|
|
|
next: null
|
|
|
};
|
|
|
|
|
|
if (newBaseQueueLast === null) {
|
|
|
newBaseQueueFirst = newBaseQueueLast = clone;
|
|
|
newBaseState = newState;
|
|
|
} else {
|
|
|
newBaseQueueLast = newBaseQueueLast.next = clone;
|
|
|
} // Update the remaining priority in the queue.
|
|
|
// TODO: Don't need to accumulate this. Instead, we can remove
|
|
|
// renderLanes from the original lanes.
|
|
|
|
|
|
|
|
|
currentlyRenderingFiber$1.lanes = mergeLanes(currentlyRenderingFiber$1.lanes, updateLane);
|
|
|
markSkippedUpdateLanes(updateLane);
|
|
|
} else {
|
|
|
// This update does have sufficient priority.
|
|
|
if (newBaseQueueLast !== null) {
|
|
|
var _clone = {
|
|
|
// This update is going to be committed so we never want uncommit
|
|
|
// it. Using NoLane works because 0 is a subset of all bitmasks, so
|
|
|
// this will never be skipped by the check above.
|
|
|
lane: NoLane,
|
|
|
action: update.action,
|
|
|
hasEagerState: update.hasEagerState,
|
|
|
eagerState: update.eagerState,
|
|
|
next: null
|
|
|
};
|
|
|
newBaseQueueLast = newBaseQueueLast.next = _clone;
|
|
|
} // Process this update.
|
|
|
|
|
|
|
|
|
if (update.hasEagerState) {
|
|
|
// If this update is a state update (not a reducer) and was processed eagerly,
|
|
|
// we can use the eagerly computed state
|
|
|
newState = update.eagerState;
|
|
|
} else {
|
|
|
var action = update.action;
|
|
|
newState = reducer(newState, action);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
update = update.next;
|
|
|
} while (update !== null && update !== first);
|
|
|
|
|
|
if (newBaseQueueLast === null) {
|
|
|
newBaseState = newState;
|
|
|
} else {
|
|
|
newBaseQueueLast.next = newBaseQueueFirst;
|
|
|
} // Mark that the fiber performed work, but only if the new state is
|
|
|
// different from the current state.
|
|
|
|
|
|
|
|
|
if (!objectIs(newState, hook.memoizedState)) {
|
|
|
markWorkInProgressReceivedUpdate();
|
|
|
}
|
|
|
|
|
|
hook.memoizedState = newState;
|
|
|
hook.baseState = newBaseState;
|
|
|
hook.baseQueue = newBaseQueueLast;
|
|
|
queue.lastRenderedState = newState;
|
|
|
} // Interleaved updates are stored on a separate queue. We aren't going to
|
|
|
// process them during this render, but we do need to track which lanes
|
|
|
// are remaining.
|
|
|
|
|
|
|
|
|
var lastInterleaved = queue.interleaved;
|
|
|
|
|
|
if (lastInterleaved !== null) {
|
|
|
var interleaved = lastInterleaved;
|
|
|
|
|
|
do {
|
|
|
var interleavedLane = interleaved.lane;
|
|
|
currentlyRenderingFiber$1.lanes = mergeLanes(currentlyRenderingFiber$1.lanes, interleavedLane);
|
|
|
markSkippedUpdateLanes(interleavedLane);
|
|
|
interleaved = interleaved.next;
|
|
|
} while (interleaved !== lastInterleaved);
|
|
|
} else if (baseQueue === null) {
|
|
|
// `queue.lanes` is used for entangling transitions. We can set it back to
|
|
|
// zero once the queue is empty.
|
|
|
queue.lanes = NoLanes;
|
|
|
}
|
|
|
|
|
|
var dispatch = queue.dispatch;
|
|
|
return [hook.memoizedState, dispatch];
|
|
|
}
|
|
|
|
|
|
function rerenderReducer(reducer, initialArg, init) {
|
|
|
var hook = updateWorkInProgressHook();
|
|
|
var queue = hook.queue;
|
|
|
|
|
|
if (queue === null) {
|
|
|
throw new Error('Should have a queue. This is likely a bug in React. Please file an issue.');
|
|
|
}
|
|
|
|
|
|
queue.lastRenderedReducer = reducer; // This is a re-render. Apply the new render phase updates to the previous
|
|
|
// work-in-progress hook.
|
|
|
|
|
|
var dispatch = queue.dispatch;
|
|
|
var lastRenderPhaseUpdate = queue.pending;
|
|
|
var newState = hook.memoizedState;
|
|
|
|
|
|
if (lastRenderPhaseUpdate !== null) {
|
|
|
// The queue doesn't persist past this render pass.
|
|
|
queue.pending = null;
|
|
|
var firstRenderPhaseUpdate = lastRenderPhaseUpdate.next;
|
|
|
var update = firstRenderPhaseUpdate;
|
|
|
|
|
|
do {
|
|
|
// Process this render phase update. We don't have to check the
|
|
|
// priority because it will always be the same as the current
|
|
|
// render's.
|
|
|
var action = update.action;
|
|
|
newState = reducer(newState, action);
|
|
|
update = update.next;
|
|
|
} while (update !== firstRenderPhaseUpdate); // Mark that the fiber performed work, but only if the new state is
|
|
|
// different from the current state.
|
|
|
|
|
|
|
|
|
if (!objectIs(newState, hook.memoizedState)) {
|
|
|
markWorkInProgressReceivedUpdate();
|
|
|
}
|
|
|
|
|
|
hook.memoizedState = newState; // Don't persist the state accumulated from the render phase updates to
|
|
|
// the base state unless the queue is empty.
|
|
|
// TODO: Not sure if this is the desired semantics, but it's what we
|
|
|
// do for gDSFP. I can't remember why.
|
|
|
|
|
|
if (hook.baseQueue === null) {
|
|
|
hook.baseState = newState;
|
|
|
}
|
|
|
|
|
|
queue.lastRenderedState = newState;
|
|
|
}
|
|
|
|
|
|
return [newState, dispatch];
|
|
|
}
|
|
|
|
|
|
function mountMutableSource(source, getSnapshot, subscribe) {
|
|
|
{
|
|
|
return undefined;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function updateMutableSource(source, getSnapshot, subscribe) {
|
|
|
{
|
|
|
return undefined;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function mountSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) {
|
|
|
var fiber = currentlyRenderingFiber$1;
|
|
|
var hook = mountWorkInProgressHook();
|
|
|
var nextSnapshot;
|
|
|
var isHydrating = getIsHydrating();
|
|
|
|
|
|
if (isHydrating) {
|
|
|
if (getServerSnapshot === undefined) {
|
|
|
throw new Error('Missing getServerSnapshot, which is required for ' + 'server-rendered content. Will revert to client rendering.');
|
|
|
}
|
|
|
|
|
|
nextSnapshot = getServerSnapshot();
|
|
|
|
|
|
{
|
|
|
if (!didWarnUncachedGetSnapshot) {
|
|
|
if (nextSnapshot !== getServerSnapshot()) {
|
|
|
error('The result of getServerSnapshot should be cached to avoid an infinite loop');
|
|
|
|
|
|
didWarnUncachedGetSnapshot = true;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
|
nextSnapshot = getSnapshot();
|
|
|
|
|
|
{
|
|
|
if (!didWarnUncachedGetSnapshot) {
|
|
|
var cachedSnapshot = getSnapshot();
|
|
|
|
|
|
if (!objectIs(nextSnapshot, cachedSnapshot)) {
|
|
|
error('The result of getSnapshot should be cached to avoid an infinite loop');
|
|
|
|
|
|
didWarnUncachedGetSnapshot = true;
|
|
|
}
|
|
|
}
|
|
|
} // Unless we're rendering a blocking lane, schedule a consistency check.
|
|
|
// Right before committing, we will walk the tree and check if any of the
|
|
|
// stores were mutated.
|
|
|
//
|
|
|
// We won't do this if we're hydrating server-rendered content, because if
|
|
|
// the content is stale, it's already visible anyway. Instead we'll patch
|
|
|
// it up in a passive effect.
|
|
|
|
|
|
|
|
|
var root = getWorkInProgressRoot();
|
|
|
|
|
|
if (root === null) {
|
|
|
throw new Error('Expected a work-in-progress root. This is a bug in React. Please file an issue.');
|
|
|
}
|
|
|
|
|
|
if (!includesBlockingLane(root, renderLanes)) {
|
|
|
pushStoreConsistencyCheck(fiber, getSnapshot, nextSnapshot);
|
|
|
}
|
|
|
} // Read the current snapshot from the store on every render. This breaks the
|
|
|
// normal rules of React, and only works because store updates are
|
|
|
// always synchronous.
|
|
|
|
|
|
|
|
|
hook.memoizedState = nextSnapshot;
|
|
|
var inst = {
|
|
|
value: nextSnapshot,
|
|
|
getSnapshot: getSnapshot
|
|
|
};
|
|
|
hook.queue = inst; // Schedule an effect to subscribe to the store.
|
|
|
|
|
|
mountEffect(subscribeToStore.bind(null, fiber, inst, subscribe), [subscribe]); // Schedule an effect to update the mutable instance fields. We will update
|
|
|
// this whenever subscribe, getSnapshot, or value changes. Because there's no
|
|
|
// clean-up function, and we track the deps correctly, we can call pushEffect
|
|
|
// directly, without storing any additional state. For the same reason, we
|
|
|
// don't need to set a static flag, either.
|
|
|
// TODO: We can move this to the passive phase once we add a pre-commit
|
|
|
// consistency check. See the next comment.
|
|
|
|
|
|
fiber.flags |= Passive;
|
|
|
pushEffect(HasEffect | Passive$1, updateStoreInstance.bind(null, fiber, inst, nextSnapshot, getSnapshot), undefined, null);
|
|
|
return nextSnapshot;
|
|
|
}
|
|
|
|
|
|
function updateSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) {
|
|
|
var fiber = currentlyRenderingFiber$1;
|
|
|
var hook = updateWorkInProgressHook(); // Read the current snapshot from the store on every render. This breaks the
|
|
|
// normal rules of React, and only works because store updates are
|
|
|
// always synchronous.
|
|
|
|
|
|
var nextSnapshot = getSnapshot();
|
|
|
|
|
|
{
|
|
|
if (!didWarnUncachedGetSnapshot) {
|
|
|
var cachedSnapshot = getSnapshot();
|
|
|
|
|
|
if (!objectIs(nextSnapshot, cachedSnapshot)) {
|
|
|
error('The result of getSnapshot should be cached to avoid an infinite loop');
|
|
|
|
|
|
didWarnUncachedGetSnapshot = true;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var prevSnapshot = hook.memoizedState;
|
|
|
var snapshotChanged = !objectIs(prevSnapshot, nextSnapshot);
|
|
|
|
|
|
if (snapshotChanged) {
|
|
|
hook.memoizedState = nextSnapshot;
|
|
|
markWorkInProgressReceivedUpdate();
|
|
|
}
|
|
|
|
|
|
var inst = hook.queue;
|
|
|
updateEffect(subscribeToStore.bind(null, fiber, inst, subscribe), [subscribe]); // Whenever getSnapshot or subscribe changes, we need to check in the
|
|
|
// commit phase if there was an interleaved mutation. In concurrent mode
|
|
|
// this can happen all the time, but even in synchronous mode, an earlier
|
|
|
// effect may have mutated the store.
|
|
|
|
|
|
if (inst.getSnapshot !== getSnapshot || snapshotChanged || // Check if the susbcribe function changed. We can save some memory by
|
|
|
// checking whether we scheduled a subscription effect above.
|
|
|
workInProgressHook !== null && workInProgressHook.memoizedState.tag & HasEffect) {
|
|
|
fiber.flags |= Passive;
|
|
|
pushEffect(HasEffect | Passive$1, updateStoreInstance.bind(null, fiber, inst, nextSnapshot, getSnapshot), undefined, null); // Unless we're rendering a blocking lane, schedule a consistency check.
|
|
|
// Right before committing, we will walk the tree and check if any of the
|
|
|
// stores were mutated.
|
|
|
|
|
|
var root = getWorkInProgressRoot();
|
|
|
|
|
|
if (root === null) {
|
|
|
throw new Error('Expected a work-in-progress root. This is a bug in React. Please file an issue.');
|
|
|
}
|
|
|
|
|
|
if (!includesBlockingLane(root, renderLanes)) {
|
|
|
pushStoreConsistencyCheck(fiber, getSnapshot, nextSnapshot);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return nextSnapshot;
|
|
|
}
|
|
|
|
|
|
function pushStoreConsistencyCheck(fiber, getSnapshot, renderedSnapshot) {
|
|
|
fiber.flags |= StoreConsistency;
|
|
|
var check = {
|
|
|
getSnapshot: getSnapshot,
|
|
|
value: renderedSnapshot
|
|
|
};
|
|
|
var componentUpdateQueue = currentlyRenderingFiber$1.updateQueue;
|
|
|
|
|
|
if (componentUpdateQueue === null) {
|
|
|
componentUpdateQueue = createFunctionComponentUpdateQueue();
|
|
|
currentlyRenderingFiber$1.updateQueue = componentUpdateQueue;
|
|
|
componentUpdateQueue.stores = [check];
|
|
|
} else {
|
|
|
var stores = componentUpdateQueue.stores;
|
|
|
|
|
|
if (stores === null) {
|
|
|
componentUpdateQueue.stores = [check];
|
|
|
} else {
|
|
|
stores.push(check);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function updateStoreInstance(fiber, inst, nextSnapshot, getSnapshot) {
|
|
|
// These are updated in the passive phase
|
|
|
inst.value = nextSnapshot;
|
|
|
inst.getSnapshot = getSnapshot; // Something may have been mutated in between render and commit. This could
|
|
|
// have been in an event that fired before the passive effects, or it could
|
|
|
// have been in a layout effect. In that case, we would have used the old
|
|
|
// snapsho and getSnapshot values to bail out. We need to check one more time.
|
|
|
|
|
|
if (checkIfSnapshotChanged(inst)) {
|
|
|
// Force a re-render.
|
|
|
forceStoreRerender(fiber);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function subscribeToStore(fiber, inst, subscribe) {
|
|
|
var handleStoreChange = function () {
|
|
|
// The store changed. Check if the snapshot changed since the last time we
|
|
|
// read from the store.
|
|
|
if (checkIfSnapshotChanged(inst)) {
|
|
|
// Force a re-render.
|
|
|
forceStoreRerender(fiber);
|
|
|
}
|
|
|
}; // Subscribe to the store and return a clean-up function.
|
|
|
|
|
|
|
|
|
return subscribe(handleStoreChange);
|
|
|
}
|
|
|
|
|
|
function checkIfSnapshotChanged(inst) {
|
|
|
var latestGetSnapshot = inst.getSnapshot;
|
|
|
var prevValue = inst.value;
|
|
|
|
|
|
try {
|
|
|
var nextValue = latestGetSnapshot();
|
|
|
return !objectIs(prevValue, nextValue);
|
|
|
} catch (error) {
|
|
|
return true;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function forceStoreRerender(fiber) {
|
|
|
var root = enqueueConcurrentRenderForLane(fiber, SyncLane);
|
|
|
|
|
|
if (root !== null) {
|
|
|
scheduleUpdateOnFiber(root, fiber, SyncLane, NoTimestamp);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function mountState(initialState) {
|
|
|
var hook = mountWorkInProgressHook();
|
|
|
|
|
|
if (typeof initialState === 'function') {
|
|
|
// $FlowFixMe: Flow doesn't like mixed types
|
|
|
initialState = initialState();
|
|
|
}
|
|
|
|
|
|
hook.memoizedState = hook.baseState = initialState;
|
|
|
var queue = {
|
|
|
pending: null,
|
|
|
interleaved: null,
|
|
|
lanes: NoLanes,
|
|
|
dispatch: null,
|
|
|
lastRenderedReducer: basicStateReducer,
|
|
|
lastRenderedState: initialState
|
|
|
};
|
|
|
hook.queue = queue;
|
|
|
var dispatch = queue.dispatch = dispatchSetState.bind(null, currentlyRenderingFiber$1, queue);
|
|
|
return [hook.memoizedState, dispatch];
|
|
|
}
|
|
|
|
|
|
function updateState(initialState) {
|
|
|
return updateReducer(basicStateReducer);
|
|
|
}
|
|
|
|
|
|
function rerenderState(initialState) {
|
|
|
return rerenderReducer(basicStateReducer);
|
|
|
}
|
|
|
|
|
|
function pushEffect(tag, create, destroy, deps) {
|
|
|
var effect = {
|
|
|
tag: tag,
|
|
|
create: create,
|
|
|
destroy: destroy,
|
|
|
deps: deps,
|
|
|
// Circular
|
|
|
next: null
|
|
|
};
|
|
|
var componentUpdateQueue = currentlyRenderingFiber$1.updateQueue;
|
|
|
|
|
|
if (componentUpdateQueue === null) {
|
|
|
componentUpdateQueue = createFunctionComponentUpdateQueue();
|
|
|
currentlyRenderingFiber$1.updateQueue = componentUpdateQueue;
|
|
|
componentUpdateQueue.lastEffect = effect.next = effect;
|
|
|
} else {
|
|
|
var lastEffect = componentUpdateQueue.lastEffect;
|
|
|
|
|
|
if (lastEffect === null) {
|
|
|
componentUpdateQueue.lastEffect = effect.next = effect;
|
|
|
} else {
|
|
|
var firstEffect = lastEffect.next;
|
|
|
lastEffect.next = effect;
|
|
|
effect.next = firstEffect;
|
|
|
componentUpdateQueue.lastEffect = effect;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return effect;
|
|
|
}
|
|
|
|
|
|
function mountRef(initialValue) {
|
|
|
var hook = mountWorkInProgressHook();
|
|
|
|
|
|
{
|
|
|
var _ref2 = {
|
|
|
current: initialValue
|
|
|
};
|
|
|
hook.memoizedState = _ref2;
|
|
|
return _ref2;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function updateRef(initialValue) {
|
|
|
var hook = updateWorkInProgressHook();
|
|
|
return hook.memoizedState;
|
|
|
}
|
|
|
|
|
|
function mountEffectImpl(fiberFlags, hookFlags, create, deps) {
|
|
|
var hook = mountWorkInProgressHook();
|
|
|
var nextDeps = deps === undefined ? null : deps;
|
|
|
currentlyRenderingFiber$1.flags |= fiberFlags;
|
|
|
hook.memoizedState = pushEffect(HasEffect | hookFlags, create, undefined, nextDeps);
|
|
|
}
|
|
|
|
|
|
function updateEffectImpl(fiberFlags, hookFlags, create, deps) {
|
|
|
var hook = updateWorkInProgressHook();
|
|
|
var nextDeps = deps === undefined ? null : deps;
|
|
|
var destroy = undefined;
|
|
|
|
|
|
if (currentHook !== null) {
|
|
|
var prevEffect = currentHook.memoizedState;
|
|
|
destroy = prevEffect.destroy;
|
|
|
|
|
|
if (nextDeps !== null) {
|
|
|
var prevDeps = prevEffect.deps;
|
|
|
|
|
|
if (areHookInputsEqual(nextDeps, prevDeps)) {
|
|
|
hook.memoizedState = pushEffect(hookFlags, create, destroy, nextDeps);
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
currentlyRenderingFiber$1.flags |= fiberFlags;
|
|
|
hook.memoizedState = pushEffect(HasEffect | hookFlags, create, destroy, nextDeps);
|
|
|
}
|
|
|
|
|
|
function mountEffect(create, deps) {
|
|
|
if ( (currentlyRenderingFiber$1.mode & StrictEffectsMode) !== NoMode) {
|
|
|
return mountEffectImpl(MountPassiveDev | Passive | PassiveStatic, Passive$1, create, deps);
|
|
|
} else {
|
|
|
return mountEffectImpl(Passive | PassiveStatic, Passive$1, create, deps);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function updateEffect(create, deps) {
|
|
|
return updateEffectImpl(Passive, Passive$1, create, deps);
|
|
|
}
|
|
|
|
|
|
function mountInsertionEffect(create, deps) {
|
|
|
return mountEffectImpl(Update, Insertion, create, deps);
|
|
|
}
|
|
|
|
|
|
function updateInsertionEffect(create, deps) {
|
|
|
return updateEffectImpl(Update, Insertion, create, deps);
|
|
|
}
|
|
|
|
|
|
function mountLayoutEffect(create, deps) {
|
|
|
var fiberFlags = Update;
|
|
|
|
|
|
{
|
|
|
fiberFlags |= LayoutStatic;
|
|
|
}
|
|
|
|
|
|
if ( (currentlyRenderingFiber$1.mode & StrictEffectsMode) !== NoMode) {
|
|
|
fiberFlags |= MountLayoutDev;
|
|
|
}
|
|
|
|
|
|
return mountEffectImpl(fiberFlags, Layout, create, deps);
|
|
|
}
|
|
|
|
|
|
function updateLayoutEffect(create, deps) {
|
|
|
return updateEffectImpl(Update, Layout, create, deps);
|
|
|
}
|
|
|
|
|
|
function imperativeHandleEffect(create, ref) {
|
|
|
if (typeof ref === 'function') {
|
|
|
var refCallback = ref;
|
|
|
|
|
|
var _inst = create();
|
|
|
|
|
|
refCallback(_inst);
|
|
|
return function () {
|
|
|
refCallback(null);
|
|
|
};
|
|
|
} else if (ref !== null && ref !== undefined) {
|
|
|
var refObject = ref;
|
|
|
|
|
|
{
|
|
|
if (!refObject.hasOwnProperty('current')) {
|
|
|
error('Expected useImperativeHandle() first argument to either be a ' + 'ref callback or React.createRef() object. Instead received: %s.', 'an object with keys {' + Object.keys(refObject).join(', ') + '}');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var _inst2 = create();
|
|
|
|
|
|
refObject.current = _inst2;
|
|
|
return function () {
|
|
|
refObject.current = null;
|
|
|
};
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function mountImperativeHandle(ref, create, deps) {
|
|
|
{
|
|
|
if (typeof create !== 'function') {
|
|
|
error('Expected useImperativeHandle() second argument to be a function ' + 'that creates a handle. Instead received: %s.', create !== null ? typeof create : 'null');
|
|
|
}
|
|
|
} // TODO: If deps are provided, should we skip comparing the ref itself?
|
|
|
|
|
|
|
|
|
var effectDeps = deps !== null && deps !== undefined ? deps.concat([ref]) : null;
|
|
|
var fiberFlags = Update;
|
|
|
|
|
|
{
|
|
|
fiberFlags |= LayoutStatic;
|
|
|
}
|
|
|
|
|
|
if ( (currentlyRenderingFiber$1.mode & StrictEffectsMode) !== NoMode) {
|
|
|
fiberFlags |= MountLayoutDev;
|
|
|
}
|
|
|
|
|
|
return mountEffectImpl(fiberFlags, Layout, imperativeHandleEffect.bind(null, create, ref), effectDeps);
|
|
|
}
|
|
|
|
|
|
function updateImperativeHandle(ref, create, deps) {
|
|
|
{
|
|
|
if (typeof create !== 'function') {
|
|
|
error('Expected useImperativeHandle() second argument to be a function ' + 'that creates a handle. Instead received: %s.', create !== null ? typeof create : 'null');
|
|
|
}
|
|
|
} // TODO: If deps are provided, should we skip comparing the ref itself?
|
|
|
|
|
|
|
|
|
var effectDeps = deps !== null && deps !== undefined ? deps.concat([ref]) : null;
|
|
|
return updateEffectImpl(Update, Layout, imperativeHandleEffect.bind(null, create, ref), effectDeps);
|
|
|
}
|
|
|
|
|
|
function mountDebugValue(value, formatterFn) {// This hook is normally a no-op.
|
|
|
// The react-debug-hooks package injects its own implementation
|
|
|
// so that e.g. DevTools can display custom hook values.
|
|
|
}
|
|
|
|
|
|
var updateDebugValue = mountDebugValue;
|
|
|
|
|
|
function mountCallback(callback, deps) {
|
|
|
var hook = mountWorkInProgressHook();
|
|
|
var nextDeps = deps === undefined ? null : deps;
|
|
|
hook.memoizedState = [callback, nextDeps];
|
|
|
return callback;
|
|
|
}
|
|
|
|
|
|
function updateCallback(callback, deps) {
|
|
|
var hook = updateWorkInProgressHook();
|
|
|
var nextDeps = deps === undefined ? null : deps;
|
|
|
var prevState = hook.memoizedState;
|
|
|
|
|
|
if (prevState !== null) {
|
|
|
if (nextDeps !== null) {
|
|
|
var prevDeps = prevState[1];
|
|
|
|
|
|
if (areHookInputsEqual(nextDeps, prevDeps)) {
|
|
|
return prevState[0];
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
hook.memoizedState = [callback, nextDeps];
|
|
|
return callback;
|
|
|
}
|
|
|
|
|
|
function mountMemo(nextCreate, deps) {
|
|
|
var hook = mountWorkInProgressHook();
|
|
|
var nextDeps = deps === undefined ? null : deps;
|
|
|
var nextValue = nextCreate();
|
|
|
hook.memoizedState = [nextValue, nextDeps];
|
|
|
return nextValue;
|
|
|
}
|
|
|
|
|
|
function updateMemo(nextCreate, deps) {
|
|
|
var hook = updateWorkInProgressHook();
|
|
|
var nextDeps = deps === undefined ? null : deps;
|
|
|
var prevState = hook.memoizedState;
|
|
|
|
|
|
if (prevState !== null) {
|
|
|
// Assume these are defined. If they're not, areHookInputsEqual will warn.
|
|
|
if (nextDeps !== null) {
|
|
|
var prevDeps = prevState[1];
|
|
|
|
|
|
if (areHookInputsEqual(nextDeps, prevDeps)) {
|
|
|
return prevState[0];
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var nextValue = nextCreate();
|
|
|
hook.memoizedState = [nextValue, nextDeps];
|
|
|
return nextValue;
|
|
|
}
|
|
|
|
|
|
function mountDeferredValue(value) {
|
|
|
var hook = mountWorkInProgressHook();
|
|
|
hook.memoizedState = value;
|
|
|
return value;
|
|
|
}
|
|
|
|
|
|
function updateDeferredValue(value) {
|
|
|
var hook = updateWorkInProgressHook();
|
|
|
var resolvedCurrentHook = currentHook;
|
|
|
var prevValue = resolvedCurrentHook.memoizedState;
|
|
|
return updateDeferredValueImpl(hook, prevValue, value);
|
|
|
}
|
|
|
|
|
|
function rerenderDeferredValue(value) {
|
|
|
var hook = updateWorkInProgressHook();
|
|
|
|
|
|
if (currentHook === null) {
|
|
|
// This is a rerender during a mount.
|
|
|
hook.memoizedState = value;
|
|
|
return value;
|
|
|
} else {
|
|
|
// This is a rerender during an update.
|
|
|
var prevValue = currentHook.memoizedState;
|
|
|
return updateDeferredValueImpl(hook, prevValue, value);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function updateDeferredValueImpl(hook, prevValue, value) {
|
|
|
var shouldDeferValue = !includesOnlyNonUrgentLanes(renderLanes);
|
|
|
|
|
|
if (shouldDeferValue) {
|
|
|
// This is an urgent update. If the value has changed, keep using the
|
|
|
// previous value and spawn a deferred render to update it later.
|
|
|
if (!objectIs(value, prevValue)) {
|
|
|
// Schedule a deferred render
|
|
|
var deferredLane = claimNextTransitionLane();
|
|
|
currentlyRenderingFiber$1.lanes = mergeLanes(currentlyRenderingFiber$1.lanes, deferredLane);
|
|
|
markSkippedUpdateLanes(deferredLane); // Set this to true to indicate that the rendered value is inconsistent
|
|
|
// from the latest value. The name "baseState" doesn't really match how we
|
|
|
// use it because we're reusing a state hook field instead of creating a
|
|
|
// new one.
|
|
|
|
|
|
hook.baseState = true;
|
|
|
} // Reuse the previous value
|
|
|
|
|
|
|
|
|
return prevValue;
|
|
|
} else {
|
|
|
// This is not an urgent update, so we can use the latest value regardless
|
|
|
// of what it is. No need to defer it.
|
|
|
// However, if we're currently inside a spawned render, then we need to mark
|
|
|
// this as an update to prevent the fiber from bailing out.
|
|
|
//
|
|
|
// `baseState` is true when the current value is different from the rendered
|
|
|
// value. The name doesn't really match how we use it because we're reusing
|
|
|
// a state hook field instead of creating a new one.
|
|
|
if (hook.baseState) {
|
|
|
// Flip this back to false.
|
|
|
hook.baseState = false;
|
|
|
markWorkInProgressReceivedUpdate();
|
|
|
}
|
|
|
|
|
|
hook.memoizedState = value;
|
|
|
return value;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function startTransition(setPending, callback, options) {
|
|
|
var previousPriority = getCurrentUpdatePriority();
|
|
|
setCurrentUpdatePriority(higherEventPriority(previousPriority, ContinuousEventPriority));
|
|
|
setPending(true);
|
|
|
var prevTransition = ReactCurrentBatchConfig$2.transition;
|
|
|
ReactCurrentBatchConfig$2.transition = {};
|
|
|
var currentTransition = ReactCurrentBatchConfig$2.transition;
|
|
|
|
|
|
{
|
|
|
ReactCurrentBatchConfig$2.transition._updatedFibers = new Set();
|
|
|
}
|
|
|
|
|
|
try {
|
|
|
setPending(false);
|
|
|
callback();
|
|
|
} finally {
|
|
|
setCurrentUpdatePriority(previousPriority);
|
|
|
ReactCurrentBatchConfig$2.transition = prevTransition;
|
|
|
|
|
|
{
|
|
|
if (prevTransition === null && currentTransition._updatedFibers) {
|
|
|
var updatedFibersCount = currentTransition._updatedFibers.size;
|
|
|
|
|
|
if (updatedFibersCount > 10) {
|
|
|
warn('Detected a large number of updates inside startTransition. ' + 'If this is due to a subscription please re-write it to use React provided hooks. ' + 'Otherwise concurrent mode guarantees are off the table.');
|
|
|
}
|
|
|
|
|
|
currentTransition._updatedFibers.clear();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function mountTransition() {
|
|
|
var _mountState = mountState(false),
|
|
|
isPending = _mountState[0],
|
|
|
setPending = _mountState[1]; // The `start` method never changes.
|
|
|
|
|
|
|
|
|
var start = startTransition.bind(null, setPending);
|
|
|
var hook = mountWorkInProgressHook();
|
|
|
hook.memoizedState = start;
|
|
|
return [isPending, start];
|
|
|
}
|
|
|
|
|
|
function updateTransition() {
|
|
|
var _updateState = updateState(),
|
|
|
isPending = _updateState[0];
|
|
|
|
|
|
var hook = updateWorkInProgressHook();
|
|
|
var start = hook.memoizedState;
|
|
|
return [isPending, start];
|
|
|
}
|
|
|
|
|
|
function rerenderTransition() {
|
|
|
var _rerenderState = rerenderState(),
|
|
|
isPending = _rerenderState[0];
|
|
|
|
|
|
var hook = updateWorkInProgressHook();
|
|
|
var start = hook.memoizedState;
|
|
|
return [isPending, start];
|
|
|
}
|
|
|
|
|
|
var isUpdatingOpaqueValueInRenderPhase = false;
|
|
|
function getIsUpdatingOpaqueValueInRenderPhaseInDEV() {
|
|
|
{
|
|
|
return isUpdatingOpaqueValueInRenderPhase;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function mountId() {
|
|
|
var hook = mountWorkInProgressHook();
|
|
|
var root = getWorkInProgressRoot(); // TODO: In Fizz, id generation is specific to each server config. Maybe we
|
|
|
// should do this in Fiber, too? Deferring this decision for now because
|
|
|
// there's no other place to store the prefix except for an internal field on
|
|
|
// the public createRoot object, which the fiber tree does not currently have
|
|
|
// a reference to.
|
|
|
|
|
|
var identifierPrefix = root.identifierPrefix;
|
|
|
var id;
|
|
|
|
|
|
if (getIsHydrating()) {
|
|
|
var treeId = getTreeId(); // Use a captial R prefix for server-generated ids.
|
|
|
|
|
|
id = ':' + identifierPrefix + 'R' + treeId; // Unless this is the first id at this level, append a number at the end
|
|
|
// that represents the position of this useId hook among all the useId
|
|
|
// hooks for this fiber.
|
|
|
|
|
|
var localId = localIdCounter++;
|
|
|
|
|
|
if (localId > 0) {
|
|
|
id += 'H' + localId.toString(32);
|
|
|
}
|
|
|
|
|
|
id += ':';
|
|
|
} else {
|
|
|
// Use a lowercase r prefix for client-generated ids.
|
|
|
var globalClientId = globalClientIdCounter++;
|
|
|
id = ':' + identifierPrefix + 'r' + globalClientId.toString(32) + ':';
|
|
|
}
|
|
|
|
|
|
hook.memoizedState = id;
|
|
|
return id;
|
|
|
}
|
|
|
|
|
|
function updateId() {
|
|
|
var hook = updateWorkInProgressHook();
|
|
|
var id = hook.memoizedState;
|
|
|
return id;
|
|
|
}
|
|
|
|
|
|
function dispatchReducerAction(fiber, queue, action) {
|
|
|
{
|
|
|
if (typeof arguments[3] === 'function') {
|
|
|
error("State updates from the useState() and useReducer() Hooks don't support the " + 'second callback argument. To execute a side effect after ' + 'rendering, declare it in the component body with useEffect().');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var lane = requestUpdateLane(fiber);
|
|
|
var update = {
|
|
|
lane: lane,
|
|
|
action: action,
|
|
|
hasEagerState: false,
|
|
|
eagerState: null,
|
|
|
next: null
|
|
|
};
|
|
|
|
|
|
if (isRenderPhaseUpdate(fiber)) {
|
|
|
enqueueRenderPhaseUpdate(queue, update);
|
|
|
} else {
|
|
|
var root = enqueueConcurrentHookUpdate(fiber, queue, update, lane);
|
|
|
|
|
|
if (root !== null) {
|
|
|
var eventTime = requestEventTime();
|
|
|
scheduleUpdateOnFiber(root, fiber, lane, eventTime);
|
|
|
entangleTransitionUpdate(root, queue, lane);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
markUpdateInDevTools(fiber, lane);
|
|
|
}
|
|
|
|
|
|
function dispatchSetState(fiber, queue, action) {
|
|
|
{
|
|
|
if (typeof arguments[3] === 'function') {
|
|
|
error("State updates from the useState() and useReducer() Hooks don't support the " + 'second callback argument. To execute a side effect after ' + 'rendering, declare it in the component body with useEffect().');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var lane = requestUpdateLane(fiber);
|
|
|
var update = {
|
|
|
lane: lane,
|
|
|
action: action,
|
|
|
hasEagerState: false,
|
|
|
eagerState: null,
|
|
|
next: null
|
|
|
};
|
|
|
|
|
|
if (isRenderPhaseUpdate(fiber)) {
|
|
|
enqueueRenderPhaseUpdate(queue, update);
|
|
|
} else {
|
|
|
var alternate = fiber.alternate;
|
|
|
|
|
|
if (fiber.lanes === NoLanes && (alternate === null || alternate.lanes === NoLanes)) {
|
|
|
// The queue is currently empty, which means we can eagerly compute the
|
|
|
// next state before entering the render phase. If the new state is the
|
|
|
// same as the current state, we may be able to bail out entirely.
|
|
|
var lastRenderedReducer = queue.lastRenderedReducer;
|
|
|
|
|
|
if (lastRenderedReducer !== null) {
|
|
|
var prevDispatcher;
|
|
|
|
|
|
{
|
|
|
prevDispatcher = ReactCurrentDispatcher$1.current;
|
|
|
ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;
|
|
|
}
|
|
|
|
|
|
try {
|
|
|
var currentState = queue.lastRenderedState;
|
|
|
var eagerState = lastRenderedReducer(currentState, action); // Stash the eagerly computed state, and the reducer used to compute
|
|
|
// it, on the update object. If the reducer hasn't changed by the
|
|
|
// time we enter the render phase, then the eager state can be used
|
|
|
// without calling the reducer again.
|
|
|
|
|
|
update.hasEagerState = true;
|
|
|
update.eagerState = eagerState;
|
|
|
|
|
|
if (objectIs(eagerState, currentState)) {
|
|
|
// Fast path. We can bail out without scheduling React to re-render.
|
|
|
// It's still possible that we'll need to rebase this update later,
|
|
|
// if the component re-renders for a different reason and by that
|
|
|
// time the reducer has changed.
|
|
|
// TODO: Do we still need to entangle transitions in this case?
|
|
|
enqueueConcurrentHookUpdateAndEagerlyBailout(fiber, queue, update, lane);
|
|
|
return;
|
|
|
}
|
|
|
} catch (error) {// Suppress the error. It will throw again in the render phase.
|
|
|
} finally {
|
|
|
{
|
|
|
ReactCurrentDispatcher$1.current = prevDispatcher;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var root = enqueueConcurrentHookUpdate(fiber, queue, update, lane);
|
|
|
|
|
|
if (root !== null) {
|
|
|
var eventTime = requestEventTime();
|
|
|
scheduleUpdateOnFiber(root, fiber, lane, eventTime);
|
|
|
entangleTransitionUpdate(root, queue, lane);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
markUpdateInDevTools(fiber, lane);
|
|
|
}
|
|
|
|
|
|
function isRenderPhaseUpdate(fiber) {
|
|
|
var alternate = fiber.alternate;
|
|
|
return fiber === currentlyRenderingFiber$1 || alternate !== null && alternate === currentlyRenderingFiber$1;
|
|
|
}
|
|
|
|
|
|
function enqueueRenderPhaseUpdate(queue, update) {
|
|
|
// This is a render phase update. Stash it in a lazily-created map of
|
|
|
// queue -> linked list of updates. After this render pass, we'll restart
|
|
|
// and apply the stashed updates on top of the work-in-progress hook.
|
|
|
didScheduleRenderPhaseUpdateDuringThisPass = didScheduleRenderPhaseUpdate = true;
|
|
|
var pending = queue.pending;
|
|
|
|
|
|
if (pending === null) {
|
|
|
// This is the first update. Create a circular list.
|
|
|
update.next = update;
|
|
|
} else {
|
|
|
update.next = pending.next;
|
|
|
pending.next = update;
|
|
|
}
|
|
|
|
|
|
queue.pending = update;
|
|
|
} // TODO: Move to ReactFiberConcurrentUpdates?
|
|
|
|
|
|
|
|
|
function entangleTransitionUpdate(root, queue, lane) {
|
|
|
if (isTransitionLane(lane)) {
|
|
|
var queueLanes = queue.lanes; // If any entangled lanes are no longer pending on the root, then they
|
|
|
// must have finished. We can remove them from the shared queue, which
|
|
|
// represents a superset of the actually pending lanes. In some cases we
|
|
|
// may entangle more than we need to, but that's OK. In fact it's worse if
|
|
|
// we *don't* entangle when we should.
|
|
|
|
|
|
queueLanes = intersectLanes(queueLanes, root.pendingLanes); // Entangle the new transition lane with the other transition lanes.
|
|
|
|
|
|
var newQueueLanes = mergeLanes(queueLanes, lane);
|
|
|
queue.lanes = newQueueLanes; // Even if queue.lanes already include lane, we don't know for certain if
|
|
|
// the lane finished since the last time we entangled it. So we need to
|
|
|
// entangle it again, just to be sure.
|
|
|
|
|
|
markRootEntangled(root, newQueueLanes);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function markUpdateInDevTools(fiber, lane, action) {
|
|
|
|
|
|
{
|
|
|
markStateUpdateScheduled(fiber, lane);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var ContextOnlyDispatcher = {
|
|
|
readContext: readContext,
|
|
|
useCallback: throwInvalidHookError,
|
|
|
useContext: throwInvalidHookError,
|
|
|
useEffect: throwInvalidHookError,
|
|
|
useImperativeHandle: throwInvalidHookError,
|
|
|
useInsertionEffect: throwInvalidHookError,
|
|
|
useLayoutEffect: throwInvalidHookError,
|
|
|
useMemo: throwInvalidHookError,
|
|
|
useReducer: throwInvalidHookError,
|
|
|
useRef: throwInvalidHookError,
|
|
|
useState: throwInvalidHookError,
|
|
|
useDebugValue: throwInvalidHookError,
|
|
|
useDeferredValue: throwInvalidHookError,
|
|
|
useTransition: throwInvalidHookError,
|
|
|
useMutableSource: throwInvalidHookError,
|
|
|
useSyncExternalStore: throwInvalidHookError,
|
|
|
useId: throwInvalidHookError,
|
|
|
unstable_isNewReconciler: enableNewReconciler
|
|
|
};
|
|
|
|
|
|
var HooksDispatcherOnMountInDEV = null;
|
|
|
var HooksDispatcherOnMountWithHookTypesInDEV = null;
|
|
|
var HooksDispatcherOnUpdateInDEV = null;
|
|
|
var HooksDispatcherOnRerenderInDEV = null;
|
|
|
var InvalidNestedHooksDispatcherOnMountInDEV = null;
|
|
|
var InvalidNestedHooksDispatcherOnUpdateInDEV = null;
|
|
|
var InvalidNestedHooksDispatcherOnRerenderInDEV = null;
|
|
|
|
|
|
{
|
|
|
var warnInvalidContextAccess = function () {
|
|
|
error('Context can only be read while React is rendering. ' + 'In classes, you can read it in the render method or getDerivedStateFromProps. ' + 'In function components, you can read it directly in the function body, but not ' + 'inside Hooks like useReducer() or useMemo().');
|
|
|
};
|
|
|
|
|
|
var warnInvalidHookAccess = function () {
|
|
|
error('Do not call Hooks inside useEffect(...), useMemo(...), or other built-in Hooks. ' + 'You can only call Hooks at the top level of your React function. ' + 'For more information, see ' + 'https://reactjs.org/link/rules-of-hooks');
|
|
|
};
|
|
|
|
|
|
HooksDispatcherOnMountInDEV = {
|
|
|
readContext: function (context) {
|
|
|
return readContext(context);
|
|
|
},
|
|
|
useCallback: function (callback, deps) {
|
|
|
currentHookNameInDev = 'useCallback';
|
|
|
mountHookTypesDev();
|
|
|
checkDepsAreArrayDev(deps);
|
|
|
return mountCallback(callback, deps);
|
|
|
},
|
|
|
useContext: function (context) {
|
|
|
currentHookNameInDev = 'useContext';
|
|
|
mountHookTypesDev();
|
|
|
return readContext(context);
|
|
|
},
|
|
|
useEffect: function (create, deps) {
|
|
|
currentHookNameInDev = 'useEffect';
|
|
|
mountHookTypesDev();
|
|
|
checkDepsAreArrayDev(deps);
|
|
|
return mountEffect(create, deps);
|
|
|
},
|
|
|
useImperativeHandle: function (ref, create, deps) {
|
|
|
currentHookNameInDev = 'useImperativeHandle';
|
|
|
mountHookTypesDev();
|
|
|
checkDepsAreArrayDev(deps);
|
|
|
return mountImperativeHandle(ref, create, deps);
|
|
|
},
|
|
|
useInsertionEffect: function (create, deps) {
|
|
|
currentHookNameInDev = 'useInsertionEffect';
|
|
|
mountHookTypesDev();
|
|
|
checkDepsAreArrayDev(deps);
|
|
|
return mountInsertionEffect(create, deps);
|
|
|
},
|
|
|
useLayoutEffect: function (create, deps) {
|
|
|
currentHookNameInDev = 'useLayoutEffect';
|
|
|
mountHookTypesDev();
|
|
|
checkDepsAreArrayDev(deps);
|
|
|
return mountLayoutEffect(create, deps);
|
|
|
},
|
|
|
useMemo: function (create, deps) {
|
|
|
currentHookNameInDev = 'useMemo';
|
|
|
mountHookTypesDev();
|
|
|
checkDepsAreArrayDev(deps);
|
|
|
var prevDispatcher = ReactCurrentDispatcher$1.current;
|
|
|
ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;
|
|
|
|
|
|
try {
|
|
|
return mountMemo(create, deps);
|
|
|
} finally {
|
|
|
ReactCurrentDispatcher$1.current = prevDispatcher;
|
|
|
}
|
|
|
},
|
|
|
useReducer: function (reducer, initialArg, init) {
|
|
|
currentHookNameInDev = 'useReducer';
|
|
|
mountHookTypesDev();
|
|
|
var prevDispatcher = ReactCurrentDispatcher$1.current;
|
|
|
ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;
|
|
|
|
|
|
try {
|
|
|
return mountReducer(reducer, initialArg, init);
|
|
|
} finally {
|
|
|
ReactCurrentDispatcher$1.current = prevDispatcher;
|
|
|
}
|
|
|
},
|
|
|
useRef: function (initialValue) {
|
|
|
currentHookNameInDev = 'useRef';
|
|
|
mountHookTypesDev();
|
|
|
return mountRef(initialValue);
|
|
|
},
|
|
|
useState: function (initialState) {
|
|
|
currentHookNameInDev = 'useState';
|
|
|
mountHookTypesDev();
|
|
|
var prevDispatcher = ReactCurrentDispatcher$1.current;
|
|
|
ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;
|
|
|
|
|
|
try {
|
|
|
return mountState(initialState);
|
|
|
} finally {
|
|
|
ReactCurrentDispatcher$1.current = prevDispatcher;
|
|
|
}
|
|
|
},
|
|
|
useDebugValue: function (value, formatterFn) {
|
|
|
currentHookNameInDev = 'useDebugValue';
|
|
|
mountHookTypesDev();
|
|
|
return mountDebugValue();
|
|
|
},
|
|
|
useDeferredValue: function (value) {
|
|
|
currentHookNameInDev = 'useDeferredValue';
|
|
|
mountHookTypesDev();
|
|
|
return mountDeferredValue(value);
|
|
|
},
|
|
|
useTransition: function () {
|
|
|
currentHookNameInDev = 'useTransition';
|
|
|
mountHookTypesDev();
|
|
|
return mountTransition();
|
|
|
},
|
|
|
useMutableSource: function (source, getSnapshot, subscribe) {
|
|
|
currentHookNameInDev = 'useMutableSource';
|
|
|
mountHookTypesDev();
|
|
|
return mountMutableSource();
|
|
|
},
|
|
|
useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {
|
|
|
currentHookNameInDev = 'useSyncExternalStore';
|
|
|
mountHookTypesDev();
|
|
|
return mountSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);
|
|
|
},
|
|
|
useId: function () {
|
|
|
currentHookNameInDev = 'useId';
|
|
|
mountHookTypesDev();
|
|
|
return mountId();
|
|
|
},
|
|
|
unstable_isNewReconciler: enableNewReconciler
|
|
|
};
|
|
|
|
|
|
HooksDispatcherOnMountWithHookTypesInDEV = {
|
|
|
readContext: function (context) {
|
|
|
return readContext(context);
|
|
|
},
|
|
|
useCallback: function (callback, deps) {
|
|
|
currentHookNameInDev = 'useCallback';
|
|
|
updateHookTypesDev();
|
|
|
return mountCallback(callback, deps);
|
|
|
},
|
|
|
useContext: function (context) {
|
|
|
currentHookNameInDev = 'useContext';
|
|
|
updateHookTypesDev();
|
|
|
return readContext(context);
|
|
|
},
|
|
|
useEffect: function (create, deps) {
|
|
|
currentHookNameInDev = 'useEffect';
|
|
|
updateHookTypesDev();
|
|
|
return mountEffect(create, deps);
|
|
|
},
|
|
|
useImperativeHandle: function (ref, create, deps) {
|
|
|
currentHookNameInDev = 'useImperativeHandle';
|
|
|
updateHookTypesDev();
|
|
|
return mountImperativeHandle(ref, create, deps);
|
|
|
},
|
|
|
useInsertionEffect: function (create, deps) {
|
|
|
currentHookNameInDev = 'useInsertionEffect';
|
|
|
updateHookTypesDev();
|
|
|
return mountInsertionEffect(create, deps);
|
|
|
},
|
|
|
useLayoutEffect: function (create, deps) {
|
|
|
currentHookNameInDev = 'useLayoutEffect';
|
|
|
updateHookTypesDev();
|
|
|
return mountLayoutEffect(create, deps);
|
|
|
},
|
|
|
useMemo: function (create, deps) {
|
|
|
currentHookNameInDev = 'useMemo';
|
|
|
updateHookTypesDev();
|
|
|
var prevDispatcher = ReactCurrentDispatcher$1.current;
|
|
|
ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;
|
|
|
|
|
|
try {
|
|
|
return mountMemo(create, deps);
|
|
|
} finally {
|
|
|
ReactCurrentDispatcher$1.current = prevDispatcher;
|
|
|
}
|
|
|
},
|
|
|
useReducer: function (reducer, initialArg, init) {
|
|
|
currentHookNameInDev = 'useReducer';
|
|
|
updateHookTypesDev();
|
|
|
var prevDispatcher = ReactCurrentDispatcher$1.current;
|
|
|
ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;
|
|
|
|
|
|
try {
|
|
|
return mountReducer(reducer, initialArg, init);
|
|
|
} finally {
|
|
|
ReactCurrentDispatcher$1.current = prevDispatcher;
|
|
|
}
|
|
|
},
|
|
|
useRef: function (initialValue) {
|
|
|
currentHookNameInDev = 'useRef';
|
|
|
updateHookTypesDev();
|
|
|
return mountRef(initialValue);
|
|
|
},
|
|
|
useState: function (initialState) {
|
|
|
currentHookNameInDev = 'useState';
|
|
|
updateHookTypesDev();
|
|
|
var prevDispatcher = ReactCurrentDispatcher$1.current;
|
|
|
ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;
|
|
|
|
|
|
try {
|
|
|
return mountState(initialState);
|
|
|
} finally {
|
|
|
ReactCurrentDispatcher$1.current = prevDispatcher;
|
|
|
}
|
|
|
},
|
|
|
useDebugValue: function (value, formatterFn) {
|
|
|
currentHookNameInDev = 'useDebugValue';
|
|
|
updateHookTypesDev();
|
|
|
return mountDebugValue();
|
|
|
},
|
|
|
useDeferredValue: function (value) {
|
|
|
currentHookNameInDev = 'useDeferredValue';
|
|
|
updateHookTypesDev();
|
|
|
return mountDeferredValue(value);
|
|
|
},
|
|
|
useTransition: function () {
|
|
|
currentHookNameInDev = 'useTransition';
|
|
|
updateHookTypesDev();
|
|
|
return mountTransition();
|
|
|
},
|
|
|
useMutableSource: function (source, getSnapshot, subscribe) {
|
|
|
currentHookNameInDev = 'useMutableSource';
|
|
|
updateHookTypesDev();
|
|
|
return mountMutableSource();
|
|
|
},
|
|
|
useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {
|
|
|
currentHookNameInDev = 'useSyncExternalStore';
|
|
|
updateHookTypesDev();
|
|
|
return mountSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);
|
|
|
},
|
|
|
useId: function () {
|
|
|
currentHookNameInDev = 'useId';
|
|
|
updateHookTypesDev();
|
|
|
return mountId();
|
|
|
},
|
|
|
unstable_isNewReconciler: enableNewReconciler
|
|
|
};
|
|
|
|
|
|
HooksDispatcherOnUpdateInDEV = {
|
|
|
readContext: function (context) {
|
|
|
return readContext(context);
|
|
|
},
|
|
|
useCallback: function (callback, deps) {
|
|
|
currentHookNameInDev = 'useCallback';
|
|
|
updateHookTypesDev();
|
|
|
return updateCallback(callback, deps);
|
|
|
},
|
|
|
useContext: function (context) {
|
|
|
currentHookNameInDev = 'useContext';
|
|
|
updateHookTypesDev();
|
|
|
return readContext(context);
|
|
|
},
|
|
|
useEffect: function (create, deps) {
|
|
|
currentHookNameInDev = 'useEffect';
|
|
|
updateHookTypesDev();
|
|
|
return updateEffect(create, deps);
|
|
|
},
|
|
|
useImperativeHandle: function (ref, create, deps) {
|
|
|
currentHookNameInDev = 'useImperativeHandle';
|
|
|
updateHookTypesDev();
|
|
|
return updateImperativeHandle(ref, create, deps);
|
|
|
},
|
|
|
useInsertionEffect: function (create, deps) {
|
|
|
currentHookNameInDev = 'useInsertionEffect';
|
|
|
updateHookTypesDev();
|
|
|
return updateInsertionEffect(create, deps);
|
|
|
},
|
|
|
useLayoutEffect: function (create, deps) {
|
|
|
currentHookNameInDev = 'useLayoutEffect';
|
|
|
updateHookTypesDev();
|
|
|
return updateLayoutEffect(create, deps);
|
|
|
},
|
|
|
useMemo: function (create, deps) {
|
|
|
currentHookNameInDev = 'useMemo';
|
|
|
updateHookTypesDev();
|
|
|
var prevDispatcher = ReactCurrentDispatcher$1.current;
|
|
|
ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;
|
|
|
|
|
|
try {
|
|
|
return updateMemo(create, deps);
|
|
|
} finally {
|
|
|
ReactCurrentDispatcher$1.current = prevDispatcher;
|
|
|
}
|
|
|
},
|
|
|
useReducer: function (reducer, initialArg, init) {
|
|
|
currentHookNameInDev = 'useReducer';
|
|
|
updateHookTypesDev();
|
|
|
var prevDispatcher = ReactCurrentDispatcher$1.current;
|
|
|
ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;
|
|
|
|
|
|
try {
|
|
|
return updateReducer(reducer, initialArg, init);
|
|
|
} finally {
|
|
|
ReactCurrentDispatcher$1.current = prevDispatcher;
|
|
|
}
|
|
|
},
|
|
|
useRef: function (initialValue) {
|
|
|
currentHookNameInDev = 'useRef';
|
|
|
updateHookTypesDev();
|
|
|
return updateRef();
|
|
|
},
|
|
|
useState: function (initialState) {
|
|
|
currentHookNameInDev = 'useState';
|
|
|
updateHookTypesDev();
|
|
|
var prevDispatcher = ReactCurrentDispatcher$1.current;
|
|
|
ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;
|
|
|
|
|
|
try {
|
|
|
return updateState(initialState);
|
|
|
} finally {
|
|
|
ReactCurrentDispatcher$1.current = prevDispatcher;
|
|
|
}
|
|
|
},
|
|
|
useDebugValue: function (value, formatterFn) {
|
|
|
currentHookNameInDev = 'useDebugValue';
|
|
|
updateHookTypesDev();
|
|
|
return updateDebugValue();
|
|
|
},
|
|
|
useDeferredValue: function (value) {
|
|
|
currentHookNameInDev = 'useDeferredValue';
|
|
|
updateHookTypesDev();
|
|
|
return updateDeferredValue(value);
|
|
|
},
|
|
|
useTransition: function () {
|
|
|
currentHookNameInDev = 'useTransition';
|
|
|
updateHookTypesDev();
|
|
|
return updateTransition();
|
|
|
},
|
|
|
useMutableSource: function (source, getSnapshot, subscribe) {
|
|
|
currentHookNameInDev = 'useMutableSource';
|
|
|
updateHookTypesDev();
|
|
|
return updateMutableSource();
|
|
|
},
|
|
|
useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {
|
|
|
currentHookNameInDev = 'useSyncExternalStore';
|
|
|
updateHookTypesDev();
|
|
|
return updateSyncExternalStore(subscribe, getSnapshot);
|
|
|
},
|
|
|
useId: function () {
|
|
|
currentHookNameInDev = 'useId';
|
|
|
updateHookTypesDev();
|
|
|
return updateId();
|
|
|
},
|
|
|
unstable_isNewReconciler: enableNewReconciler
|
|
|
};
|
|
|
|
|
|
HooksDispatcherOnRerenderInDEV = {
|
|
|
readContext: function (context) {
|
|
|
return readContext(context);
|
|
|
},
|
|
|
useCallback: function (callback, deps) {
|
|
|
currentHookNameInDev = 'useCallback';
|
|
|
updateHookTypesDev();
|
|
|
return updateCallback(callback, deps);
|
|
|
},
|
|
|
useContext: function (context) {
|
|
|
currentHookNameInDev = 'useContext';
|
|
|
updateHookTypesDev();
|
|
|
return readContext(context);
|
|
|
},
|
|
|
useEffect: function (create, deps) {
|
|
|
currentHookNameInDev = 'useEffect';
|
|
|
updateHookTypesDev();
|
|
|
return updateEffect(create, deps);
|
|
|
},
|
|
|
useImperativeHandle: function (ref, create, deps) {
|
|
|
currentHookNameInDev = 'useImperativeHandle';
|
|
|
updateHookTypesDev();
|
|
|
return updateImperativeHandle(ref, create, deps);
|
|
|
},
|
|
|
useInsertionEffect: function (create, deps) {
|
|
|
currentHookNameInDev = 'useInsertionEffect';
|
|
|
updateHookTypesDev();
|
|
|
return updateInsertionEffect(create, deps);
|
|
|
},
|
|
|
useLayoutEffect: function (create, deps) {
|
|
|
currentHookNameInDev = 'useLayoutEffect';
|
|
|
updateHookTypesDev();
|
|
|
return updateLayoutEffect(create, deps);
|
|
|
},
|
|
|
useMemo: function (create, deps) {
|
|
|
currentHookNameInDev = 'useMemo';
|
|
|
updateHookTypesDev();
|
|
|
var prevDispatcher = ReactCurrentDispatcher$1.current;
|
|
|
ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnRerenderInDEV;
|
|
|
|
|
|
try {
|
|
|
return updateMemo(create, deps);
|
|
|
} finally {
|
|
|
ReactCurrentDispatcher$1.current = prevDispatcher;
|
|
|
}
|
|
|
},
|
|
|
useReducer: function (reducer, initialArg, init) {
|
|
|
currentHookNameInDev = 'useReducer';
|
|
|
updateHookTypesDev();
|
|
|
var prevDispatcher = ReactCurrentDispatcher$1.current;
|
|
|
ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnRerenderInDEV;
|
|
|
|
|
|
try {
|
|
|
return rerenderReducer(reducer, initialArg, init);
|
|
|
} finally {
|
|
|
ReactCurrentDispatcher$1.current = prevDispatcher;
|
|
|
}
|
|
|
},
|
|
|
useRef: function (initialValue) {
|
|
|
currentHookNameInDev = 'useRef';
|
|
|
updateHookTypesDev();
|
|
|
return updateRef();
|
|
|
},
|
|
|
useState: function (initialState) {
|
|
|
currentHookNameInDev = 'useState';
|
|
|
updateHookTypesDev();
|
|
|
var prevDispatcher = ReactCurrentDispatcher$1.current;
|
|
|
ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnRerenderInDEV;
|
|
|
|
|
|
try {
|
|
|
return rerenderState(initialState);
|
|
|
} finally {
|
|
|
ReactCurrentDispatcher$1.current = prevDispatcher;
|
|
|
}
|
|
|
},
|
|
|
useDebugValue: function (value, formatterFn) {
|
|
|
currentHookNameInDev = 'useDebugValue';
|
|
|
updateHookTypesDev();
|
|
|
return updateDebugValue();
|
|
|
},
|
|
|
useDeferredValue: function (value) {
|
|
|
currentHookNameInDev = 'useDeferredValue';
|
|
|
updateHookTypesDev();
|
|
|
return rerenderDeferredValue(value);
|
|
|
},
|
|
|
useTransition: function () {
|
|
|
currentHookNameInDev = 'useTransition';
|
|
|
updateHookTypesDev();
|
|
|
return rerenderTransition();
|
|
|
},
|
|
|
useMutableSource: function (source, getSnapshot, subscribe) {
|
|
|
currentHookNameInDev = 'useMutableSource';
|
|
|
updateHookTypesDev();
|
|
|
return updateMutableSource();
|
|
|
},
|
|
|
useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {
|
|
|
currentHookNameInDev = 'useSyncExternalStore';
|
|
|
updateHookTypesDev();
|
|
|
return updateSyncExternalStore(subscribe, getSnapshot);
|
|
|
},
|
|
|
useId: function () {
|
|
|
currentHookNameInDev = 'useId';
|
|
|
updateHookTypesDev();
|
|
|
return updateId();
|
|
|
},
|
|
|
unstable_isNewReconciler: enableNewReconciler
|
|
|
};
|
|
|
|
|
|
InvalidNestedHooksDispatcherOnMountInDEV = {
|
|
|
readContext: function (context) {
|
|
|
warnInvalidContextAccess();
|
|
|
return readContext(context);
|
|
|
},
|
|
|
useCallback: function (callback, deps) {
|
|
|
currentHookNameInDev = 'useCallback';
|
|
|
warnInvalidHookAccess();
|
|
|
mountHookTypesDev();
|
|
|
return mountCallback(callback, deps);
|
|
|
},
|
|
|
useContext: function (context) {
|
|
|
currentHookNameInDev = 'useContext';
|
|
|
warnInvalidHookAccess();
|
|
|
mountHookTypesDev();
|
|
|
return readContext(context);
|
|
|
},
|
|
|
useEffect: function (create, deps) {
|
|
|
currentHookNameInDev = 'useEffect';
|
|
|
warnInvalidHookAccess();
|
|
|
mountHookTypesDev();
|
|
|
return mountEffect(create, deps);
|
|
|
},
|
|
|
useImperativeHandle: function (ref, create, deps) {
|
|
|
currentHookNameInDev = 'useImperativeHandle';
|
|
|
warnInvalidHookAccess();
|
|
|
mountHookTypesDev();
|
|
|
return mountImperativeHandle(ref, create, deps);
|
|
|
},
|
|
|
useInsertionEffect: function (create, deps) {
|
|
|
currentHookNameInDev = 'useInsertionEffect';
|
|
|
warnInvalidHookAccess();
|
|
|
mountHookTypesDev();
|
|
|
return mountInsertionEffect(create, deps);
|
|
|
},
|
|
|
useLayoutEffect: function (create, deps) {
|
|
|
currentHookNameInDev = 'useLayoutEffect';
|
|
|
warnInvalidHookAccess();
|
|
|
mountHookTypesDev();
|
|
|
return mountLayoutEffect(create, deps);
|
|
|
},
|
|
|
useMemo: function (create, deps) {
|
|
|
currentHookNameInDev = 'useMemo';
|
|
|
warnInvalidHookAccess();
|
|
|
mountHookTypesDev();
|
|
|
var prevDispatcher = ReactCurrentDispatcher$1.current;
|
|
|
ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;
|
|
|
|
|
|
try {
|
|
|
return mountMemo(create, deps);
|
|
|
} finally {
|
|
|
ReactCurrentDispatcher$1.current = prevDispatcher;
|
|
|
}
|
|
|
},
|
|
|
useReducer: function (reducer, initialArg, init) {
|
|
|
currentHookNameInDev = 'useReducer';
|
|
|
warnInvalidHookAccess();
|
|
|
mountHookTypesDev();
|
|
|
var prevDispatcher = ReactCurrentDispatcher$1.current;
|
|
|
ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;
|
|
|
|
|
|
try {
|
|
|
return mountReducer(reducer, initialArg, init);
|
|
|
} finally {
|
|
|
ReactCurrentDispatcher$1.current = prevDispatcher;
|
|
|
}
|
|
|
},
|
|
|
useRef: function (initialValue) {
|
|
|
currentHookNameInDev = 'useRef';
|
|
|
warnInvalidHookAccess();
|
|
|
mountHookTypesDev();
|
|
|
return mountRef(initialValue);
|
|
|
},
|
|
|
useState: function (initialState) {
|
|
|
currentHookNameInDev = 'useState';
|
|
|
warnInvalidHookAccess();
|
|
|
mountHookTypesDev();
|
|
|
var prevDispatcher = ReactCurrentDispatcher$1.current;
|
|
|
ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;
|
|
|
|
|
|
try {
|
|
|
return mountState(initialState);
|
|
|
} finally {
|
|
|
ReactCurrentDispatcher$1.current = prevDispatcher;
|
|
|
}
|
|
|
},
|
|
|
useDebugValue: function (value, formatterFn) {
|
|
|
currentHookNameInDev = 'useDebugValue';
|
|
|
warnInvalidHookAccess();
|
|
|
mountHookTypesDev();
|
|
|
return mountDebugValue();
|
|
|
},
|
|
|
useDeferredValue: function (value) {
|
|
|
currentHookNameInDev = 'useDeferredValue';
|
|
|
warnInvalidHookAccess();
|
|
|
mountHookTypesDev();
|
|
|
return mountDeferredValue(value);
|
|
|
},
|
|
|
useTransition: function () {
|
|
|
currentHookNameInDev = 'useTransition';
|
|
|
warnInvalidHookAccess();
|
|
|
mountHookTypesDev();
|
|
|
return mountTransition();
|
|
|
},
|
|
|
useMutableSource: function (source, getSnapshot, subscribe) {
|
|
|
currentHookNameInDev = 'useMutableSource';
|
|
|
warnInvalidHookAccess();
|
|
|
mountHookTypesDev();
|
|
|
return mountMutableSource();
|
|
|
},
|
|
|
useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {
|
|
|
currentHookNameInDev = 'useSyncExternalStore';
|
|
|
warnInvalidHookAccess();
|
|
|
mountHookTypesDev();
|
|
|
return mountSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);
|
|
|
},
|
|
|
useId: function () {
|
|
|
currentHookNameInDev = 'useId';
|
|
|
warnInvalidHookAccess();
|
|
|
mountHookTypesDev();
|
|
|
return mountId();
|
|
|
},
|
|
|
unstable_isNewReconciler: enableNewReconciler
|
|
|
};
|
|
|
|
|
|
InvalidNestedHooksDispatcherOnUpdateInDEV = {
|
|
|
readContext: function (context) {
|
|
|
warnInvalidContextAccess();
|
|
|
return readContext(context);
|
|
|
},
|
|
|
useCallback: function (callback, deps) {
|
|
|
currentHookNameInDev = 'useCallback';
|
|
|
warnInvalidHookAccess();
|
|
|
updateHookTypesDev();
|
|
|
return updateCallback(callback, deps);
|
|
|
},
|
|
|
useContext: function (context) {
|
|
|
currentHookNameInDev = 'useContext';
|
|
|
warnInvalidHookAccess();
|
|
|
updateHookTypesDev();
|
|
|
return readContext(context);
|
|
|
},
|
|
|
useEffect: function (create, deps) {
|
|
|
currentHookNameInDev = 'useEffect';
|
|
|
warnInvalidHookAccess();
|
|
|
updateHookTypesDev();
|
|
|
return updateEffect(create, deps);
|
|
|
},
|
|
|
useImperativeHandle: function (ref, create, deps) {
|
|
|
currentHookNameInDev = 'useImperativeHandle';
|
|
|
warnInvalidHookAccess();
|
|
|
updateHookTypesDev();
|
|
|
return updateImperativeHandle(ref, create, deps);
|
|
|
},
|
|
|
useInsertionEffect: function (create, deps) {
|
|
|
currentHookNameInDev = 'useInsertionEffect';
|
|
|
warnInvalidHookAccess();
|
|
|
updateHookTypesDev();
|
|
|
return updateInsertionEffect(create, deps);
|
|
|
},
|
|
|
useLayoutEffect: function (create, deps) {
|
|
|
currentHookNameInDev = 'useLayoutEffect';
|
|
|
warnInvalidHookAccess();
|
|
|
updateHookTypesDev();
|
|
|
return updateLayoutEffect(create, deps);
|
|
|
},
|
|
|
useMemo: function (create, deps) {
|
|
|
currentHookNameInDev = 'useMemo';
|
|
|
warnInvalidHookAccess();
|
|
|
updateHookTypesDev();
|
|
|
var prevDispatcher = ReactCurrentDispatcher$1.current;
|
|
|
ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;
|
|
|
|
|
|
try {
|
|
|
return updateMemo(create, deps);
|
|
|
} finally {
|
|
|
ReactCurrentDispatcher$1.current = prevDispatcher;
|
|
|
}
|
|
|
},
|
|
|
useReducer: function (reducer, initialArg, init) {
|
|
|
currentHookNameInDev = 'useReducer';
|
|
|
warnInvalidHookAccess();
|
|
|
updateHookTypesDev();
|
|
|
var prevDispatcher = ReactCurrentDispatcher$1.current;
|
|
|
ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;
|
|
|
|
|
|
try {
|
|
|
return updateReducer(reducer, initialArg, init);
|
|
|
} finally {
|
|
|
ReactCurrentDispatcher$1.current = prevDispatcher;
|
|
|
}
|
|
|
},
|
|
|
useRef: function (initialValue) {
|
|
|
currentHookNameInDev = 'useRef';
|
|
|
warnInvalidHookAccess();
|
|
|
updateHookTypesDev();
|
|
|
return updateRef();
|
|
|
},
|
|
|
useState: function (initialState) {
|
|
|
currentHookNameInDev = 'useState';
|
|
|
warnInvalidHookAccess();
|
|
|
updateHookTypesDev();
|
|
|
var prevDispatcher = ReactCurrentDispatcher$1.current;
|
|
|
ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;
|
|
|
|
|
|
try {
|
|
|
return updateState(initialState);
|
|
|
} finally {
|
|
|
ReactCurrentDispatcher$1.current = prevDispatcher;
|
|
|
}
|
|
|
},
|
|
|
useDebugValue: function (value, formatterFn) {
|
|
|
currentHookNameInDev = 'useDebugValue';
|
|
|
warnInvalidHookAccess();
|
|
|
updateHookTypesDev();
|
|
|
return updateDebugValue();
|
|
|
},
|
|
|
useDeferredValue: function (value) {
|
|
|
currentHookNameInDev = 'useDeferredValue';
|
|
|
warnInvalidHookAccess();
|
|
|
updateHookTypesDev();
|
|
|
return updateDeferredValue(value);
|
|
|
},
|
|
|
useTransition: function () {
|
|
|
currentHookNameInDev = 'useTransition';
|
|
|
warnInvalidHookAccess();
|
|
|
updateHookTypesDev();
|
|
|
return updateTransition();
|
|
|
},
|
|
|
useMutableSource: function (source, getSnapshot, subscribe) {
|
|
|
currentHookNameInDev = 'useMutableSource';
|
|
|
warnInvalidHookAccess();
|
|
|
updateHookTypesDev();
|
|
|
return updateMutableSource();
|
|
|
},
|
|
|
useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {
|
|
|
currentHookNameInDev = 'useSyncExternalStore';
|
|
|
warnInvalidHookAccess();
|
|
|
updateHookTypesDev();
|
|
|
return updateSyncExternalStore(subscribe, getSnapshot);
|
|
|
},
|
|
|
useId: function () {
|
|
|
currentHookNameInDev = 'useId';
|
|
|
warnInvalidHookAccess();
|
|
|
updateHookTypesDev();
|
|
|
return updateId();
|
|
|
},
|
|
|
unstable_isNewReconciler: enableNewReconciler
|
|
|
};
|
|
|
|
|
|
InvalidNestedHooksDispatcherOnRerenderInDEV = {
|
|
|
readContext: function (context) {
|
|
|
warnInvalidContextAccess();
|
|
|
return readContext(context);
|
|
|
},
|
|
|
useCallback: function (callback, deps) {
|
|
|
currentHookNameInDev = 'useCallback';
|
|
|
warnInvalidHookAccess();
|
|
|
updateHookTypesDev();
|
|
|
return updateCallback(callback, deps);
|
|
|
},
|
|
|
useContext: function (context) {
|
|
|
currentHookNameInDev = 'useContext';
|
|
|
warnInvalidHookAccess();
|
|
|
updateHookTypesDev();
|
|
|
return readContext(context);
|
|
|
},
|
|
|
useEffect: function (create, deps) {
|
|
|
currentHookNameInDev = 'useEffect';
|
|
|
warnInvalidHookAccess();
|
|
|
updateHookTypesDev();
|
|
|
return updateEffect(create, deps);
|
|
|
},
|
|
|
useImperativeHandle: function (ref, create, deps) {
|
|
|
currentHookNameInDev = 'useImperativeHandle';
|
|
|
warnInvalidHookAccess();
|
|
|
updateHookTypesDev();
|
|
|
return updateImperativeHandle(ref, create, deps);
|
|
|
},
|
|
|
useInsertionEffect: function (create, deps) {
|
|
|
currentHookNameInDev = 'useInsertionEffect';
|
|
|
warnInvalidHookAccess();
|
|
|
updateHookTypesDev();
|
|
|
return updateInsertionEffect(create, deps);
|
|
|
},
|
|
|
useLayoutEffect: function (create, deps) {
|
|
|
currentHookNameInDev = 'useLayoutEffect';
|
|
|
warnInvalidHookAccess();
|
|
|
updateHookTypesDev();
|
|
|
return updateLayoutEffect(create, deps);
|
|
|
},
|
|
|
useMemo: function (create, deps) {
|
|
|
currentHookNameInDev = 'useMemo';
|
|
|
warnInvalidHookAccess();
|
|
|
updateHookTypesDev();
|
|
|
var prevDispatcher = ReactCurrentDispatcher$1.current;
|
|
|
ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;
|
|
|
|
|
|
try {
|
|
|
return updateMemo(create, deps);
|
|
|
} finally {
|
|
|
ReactCurrentDispatcher$1.current = prevDispatcher;
|
|
|
}
|
|
|
},
|
|
|
useReducer: function (reducer, initialArg, init) {
|
|
|
currentHookNameInDev = 'useReducer';
|
|
|
warnInvalidHookAccess();
|
|
|
updateHookTypesDev();
|
|
|
var prevDispatcher = ReactCurrentDispatcher$1.current;
|
|
|
ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;
|
|
|
|
|
|
try {
|
|
|
return rerenderReducer(reducer, initialArg, init);
|
|
|
} finally {
|
|
|
ReactCurrentDispatcher$1.current = prevDispatcher;
|
|
|
}
|
|
|
},
|
|
|
useRef: function (initialValue) {
|
|
|
currentHookNameInDev = 'useRef';
|
|
|
warnInvalidHookAccess();
|
|
|
updateHookTypesDev();
|
|
|
return updateRef();
|
|
|
},
|
|
|
useState: function (initialState) {
|
|
|
currentHookNameInDev = 'useState';
|
|
|
warnInvalidHookAccess();
|
|
|
updateHookTypesDev();
|
|
|
var prevDispatcher = ReactCurrentDispatcher$1.current;
|
|
|
ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;
|
|
|
|
|
|
try {
|
|
|
return rerenderState(initialState);
|
|
|
} finally {
|
|
|
ReactCurrentDispatcher$1.current = prevDispatcher;
|
|
|
}
|
|
|
},
|
|
|
useDebugValue: function (value, formatterFn) {
|
|
|
currentHookNameInDev = 'useDebugValue';
|
|
|
warnInvalidHookAccess();
|
|
|
updateHookTypesDev();
|
|
|
return updateDebugValue();
|
|
|
},
|
|
|
useDeferredValue: function (value) {
|
|
|
currentHookNameInDev = 'useDeferredValue';
|
|
|
warnInvalidHookAccess();
|
|
|
updateHookTypesDev();
|
|
|
return rerenderDeferredValue(value);
|
|
|
},
|
|
|
useTransition: function () {
|
|
|
currentHookNameInDev = 'useTransition';
|
|
|
warnInvalidHookAccess();
|
|
|
updateHookTypesDev();
|
|
|
return rerenderTransition();
|
|
|
},
|
|
|
useMutableSource: function (source, getSnapshot, subscribe) {
|
|
|
currentHookNameInDev = 'useMutableSource';
|
|
|
warnInvalidHookAccess();
|
|
|
updateHookTypesDev();
|
|
|
return updateMutableSource();
|
|
|
},
|
|
|
useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {
|
|
|
currentHookNameInDev = 'useSyncExternalStore';
|
|
|
warnInvalidHookAccess();
|
|
|
updateHookTypesDev();
|
|
|
return updateSyncExternalStore(subscribe, getSnapshot);
|
|
|
},
|
|
|
useId: function () {
|
|
|
currentHookNameInDev = 'useId';
|
|
|
warnInvalidHookAccess();
|
|
|
updateHookTypesDev();
|
|
|
return updateId();
|
|
|
},
|
|
|
unstable_isNewReconciler: enableNewReconciler
|
|
|
};
|
|
|
}
|
|
|
|
|
|
var now$1 = Scheduler.unstable_now;
|
|
|
var commitTime = 0;
|
|
|
var layoutEffectStartTime = -1;
|
|
|
var profilerStartTime = -1;
|
|
|
var passiveEffectStartTime = -1;
|
|
|
/**
|
|
|
* Tracks whether the current update was a nested/cascading update (scheduled from a layout effect).
|
|
|
*
|
|
|
* The overall sequence is:
|
|
|
* 1. render
|
|
|
* 2. commit (and call `onRender`, `onCommit`)
|
|
|
* 3. check for nested updates
|
|
|
* 4. flush passive effects (and call `onPostCommit`)
|
|
|
*
|
|
|
* Nested updates are identified in step 3 above,
|
|
|
* but step 4 still applies to the work that was just committed.
|
|
|
* We use two flags to track nested updates then:
|
|
|
* one tracks whether the upcoming update is a nested update,
|
|
|
* and the other tracks whether the current update was a nested update.
|
|
|
* The first value gets synced to the second at the start of the render phase.
|
|
|
*/
|
|
|
|
|
|
var currentUpdateIsNested = false;
|
|
|
var nestedUpdateScheduled = false;
|
|
|
|
|
|
function isCurrentUpdateNested() {
|
|
|
return currentUpdateIsNested;
|
|
|
}
|
|
|
|
|
|
function markNestedUpdateScheduled() {
|
|
|
{
|
|
|
nestedUpdateScheduled = true;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function resetNestedUpdateFlag() {
|
|
|
{
|
|
|
currentUpdateIsNested = false;
|
|
|
nestedUpdateScheduled = false;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function syncNestedUpdateFlag() {
|
|
|
{
|
|
|
currentUpdateIsNested = nestedUpdateScheduled;
|
|
|
nestedUpdateScheduled = false;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function getCommitTime() {
|
|
|
return commitTime;
|
|
|
}
|
|
|
|
|
|
function recordCommitTime() {
|
|
|
|
|
|
commitTime = now$1();
|
|
|
}
|
|
|
|
|
|
function startProfilerTimer(fiber) {
|
|
|
|
|
|
profilerStartTime = now$1();
|
|
|
|
|
|
if (fiber.actualStartTime < 0) {
|
|
|
fiber.actualStartTime = now$1();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function stopProfilerTimerIfRunning(fiber) {
|
|
|
|
|
|
profilerStartTime = -1;
|
|
|
}
|
|
|
|
|
|
function stopProfilerTimerIfRunningAndRecordDelta(fiber, overrideBaseTime) {
|
|
|
|
|
|
if (profilerStartTime >= 0) {
|
|
|
var elapsedTime = now$1() - profilerStartTime;
|
|
|
fiber.actualDuration += elapsedTime;
|
|
|
|
|
|
if (overrideBaseTime) {
|
|
|
fiber.selfBaseDuration = elapsedTime;
|
|
|
}
|
|
|
|
|
|
profilerStartTime = -1;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function recordLayoutEffectDuration(fiber) {
|
|
|
|
|
|
if (layoutEffectStartTime >= 0) {
|
|
|
var elapsedTime = now$1() - layoutEffectStartTime;
|
|
|
layoutEffectStartTime = -1; // Store duration on the next nearest Profiler ancestor
|
|
|
// Or the root (for the DevTools Profiler to read)
|
|
|
|
|
|
var parentFiber = fiber.return;
|
|
|
|
|
|
while (parentFiber !== null) {
|
|
|
switch (parentFiber.tag) {
|
|
|
case HostRoot:
|
|
|
var root = parentFiber.stateNode;
|
|
|
root.effectDuration += elapsedTime;
|
|
|
return;
|
|
|
|
|
|
case Profiler:
|
|
|
var parentStateNode = parentFiber.stateNode;
|
|
|
parentStateNode.effectDuration += elapsedTime;
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
parentFiber = parentFiber.return;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function recordPassiveEffectDuration(fiber) {
|
|
|
|
|
|
if (passiveEffectStartTime >= 0) {
|
|
|
var elapsedTime = now$1() - passiveEffectStartTime;
|
|
|
passiveEffectStartTime = -1; // Store duration on the next nearest Profiler ancestor
|
|
|
// Or the root (for the DevTools Profiler to read)
|
|
|
|
|
|
var parentFiber = fiber.return;
|
|
|
|
|
|
while (parentFiber !== null) {
|
|
|
switch (parentFiber.tag) {
|
|
|
case HostRoot:
|
|
|
var root = parentFiber.stateNode;
|
|
|
|
|
|
if (root !== null) {
|
|
|
root.passiveEffectDuration += elapsedTime;
|
|
|
}
|
|
|
|
|
|
return;
|
|
|
|
|
|
case Profiler:
|
|
|
var parentStateNode = parentFiber.stateNode;
|
|
|
|
|
|
if (parentStateNode !== null) {
|
|
|
// Detached fibers have their state node cleared out.
|
|
|
// In this case, the return pointer is also cleared out,
|
|
|
// so we won't be able to report the time spent in this Profiler's subtree.
|
|
|
parentStateNode.passiveEffectDuration += elapsedTime;
|
|
|
}
|
|
|
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
parentFiber = parentFiber.return;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function startLayoutEffectTimer() {
|
|
|
|
|
|
layoutEffectStartTime = now$1();
|
|
|
}
|
|
|
|
|
|
function startPassiveEffectTimer() {
|
|
|
|
|
|
passiveEffectStartTime = now$1();
|
|
|
}
|
|
|
|
|
|
function transferActualDuration(fiber) {
|
|
|
// Transfer time spent rendering these children so we don't lose it
|
|
|
// after we rerender. This is used as a helper in special cases
|
|
|
// where we should count the work of multiple passes.
|
|
|
var child = fiber.child;
|
|
|
|
|
|
while (child) {
|
|
|
fiber.actualDuration += child.actualDuration;
|
|
|
child = child.sibling;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function createCapturedValueAtFiber(value, source) {
|
|
|
// If the value is an error, call this function immediately after it is thrown
|
|
|
// so the stack is accurate.
|
|
|
return {
|
|
|
value: value,
|
|
|
source: source,
|
|
|
stack: getStackByFiberInDevAndProd(source),
|
|
|
digest: null
|
|
|
};
|
|
|
}
|
|
|
function createCapturedValue(value, digest, stack) {
|
|
|
return {
|
|
|
value: value,
|
|
|
source: null,
|
|
|
stack: stack != null ? stack : null,
|
|
|
digest: digest != null ? digest : null
|
|
|
};
|
|
|
}
|
|
|
|
|
|
// This module is forked in different environments.
|
|
|
// By default, return `true` to log errors to the console.
|
|
|
// Forks can return `false` if this isn't desirable.
|
|
|
function showErrorDialog(boundary, errorInfo) {
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
function logCapturedError(boundary, errorInfo) {
|
|
|
try {
|
|
|
var logError = showErrorDialog(boundary, errorInfo); // Allow injected showErrorDialog() to prevent default console.error logging.
|
|
|
// This enables renderers like ReactNative to better manage redbox behavior.
|
|
|
|
|
|
if (logError === false) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
var error = errorInfo.value;
|
|
|
|
|
|
if (true) {
|
|
|
var source = errorInfo.source;
|
|
|
var stack = errorInfo.stack;
|
|
|
var componentStack = stack !== null ? stack : ''; // Browsers support silencing uncaught errors by calling
|
|
|
// `preventDefault()` in window `error` handler.
|
|
|
// We record this information as an expando on the error.
|
|
|
|
|
|
if (error != null && error._suppressLogging) {
|
|
|
if (boundary.tag === ClassComponent) {
|
|
|
// The error is recoverable and was silenced.
|
|
|
// Ignore it and don't print the stack addendum.
|
|
|
// This is handy for testing error boundaries without noise.
|
|
|
return;
|
|
|
} // The error is fatal. Since the silencing might have
|
|
|
// been accidental, we'll surface it anyway.
|
|
|
// However, the browser would have silenced the original error
|
|
|
// so we'll print it first, and then print the stack addendum.
|
|
|
|
|
|
|
|
|
console['error'](error); // Don't transform to our wrapper
|
|
|
// For a more detailed description of this block, see:
|
|
|
// https://github.com/facebook/react/pull/13384
|
|
|
}
|
|
|
|
|
|
var componentName = source ? getComponentNameFromFiber(source) : null;
|
|
|
var componentNameMessage = componentName ? "The above error occurred in the <" + componentName + "> component:" : 'The above error occurred in one of your React components:';
|
|
|
var errorBoundaryMessage;
|
|
|
|
|
|
if (boundary.tag === HostRoot) {
|
|
|
errorBoundaryMessage = 'Consider adding an error boundary to your tree to customize error handling behavior.\n' + 'Visit https://reactjs.org/link/error-boundaries to learn more about error boundaries.';
|
|
|
} else {
|
|
|
var errorBoundaryName = getComponentNameFromFiber(boundary) || 'Anonymous';
|
|
|
errorBoundaryMessage = "React will try to recreate this component tree from scratch " + ("using the error boundary you provided, " + errorBoundaryName + ".");
|
|
|
}
|
|
|
|
|
|
var combinedMessage = componentNameMessage + "\n" + componentStack + "\n\n" + ("" + errorBoundaryMessage); // In development, we provide our own message with just the component stack.
|
|
|
// We don't include the original error message and JS stack because the browser
|
|
|
// has already printed it. Even if the application swallows the error, it is still
|
|
|
// displayed by the browser thanks to the DEV-only fake event trick in ReactErrorUtils.
|
|
|
|
|
|
console['error'](combinedMessage); // Don't transform to our wrapper
|
|
|
} else {}
|
|
|
} catch (e) {
|
|
|
// This method must not throw, or React internal state will get messed up.
|
|
|
// If console.error is overridden, or logCapturedError() shows a dialog that throws,
|
|
|
// we want to report this error outside of the normal stack as a last resort.
|
|
|
// https://github.com/facebook/react/issues/13188
|
|
|
setTimeout(function () {
|
|
|
throw e;
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var PossiblyWeakMap$1 = typeof WeakMap === 'function' ? WeakMap : Map;
|
|
|
|
|
|
function createRootErrorUpdate(fiber, errorInfo, lane) {
|
|
|
var update = createUpdate(NoTimestamp, lane); // Unmount the root by rendering null.
|
|
|
|
|
|
update.tag = CaptureUpdate; // Caution: React DevTools currently depends on this property
|
|
|
// being called "element".
|
|
|
|
|
|
update.payload = {
|
|
|
element: null
|
|
|
};
|
|
|
var error = errorInfo.value;
|
|
|
|
|
|
update.callback = function () {
|
|
|
onUncaughtError(error);
|
|
|
logCapturedError(fiber, errorInfo);
|
|
|
};
|
|
|
|
|
|
return update;
|
|
|
}
|
|
|
|
|
|
function createClassErrorUpdate(fiber, errorInfo, lane) {
|
|
|
var update = createUpdate(NoTimestamp, lane);
|
|
|
update.tag = CaptureUpdate;
|
|
|
var getDerivedStateFromError = fiber.type.getDerivedStateFromError;
|
|
|
|
|
|
if (typeof getDerivedStateFromError === 'function') {
|
|
|
var error$1 = errorInfo.value;
|
|
|
|
|
|
update.payload = function () {
|
|
|
return getDerivedStateFromError(error$1);
|
|
|
};
|
|
|
|
|
|
update.callback = function () {
|
|
|
{
|
|
|
markFailedErrorBoundaryForHotReloading(fiber);
|
|
|
}
|
|
|
|
|
|
logCapturedError(fiber, errorInfo);
|
|
|
};
|
|
|
}
|
|
|
|
|
|
var inst = fiber.stateNode;
|
|
|
|
|
|
if (inst !== null && typeof inst.componentDidCatch === 'function') {
|
|
|
update.callback = function callback() {
|
|
|
{
|
|
|
markFailedErrorBoundaryForHotReloading(fiber);
|
|
|
}
|
|
|
|
|
|
logCapturedError(fiber, errorInfo);
|
|
|
|
|
|
if (typeof getDerivedStateFromError !== 'function') {
|
|
|
// To preserve the preexisting retry behavior of error boundaries,
|
|
|
// we keep track of which ones already failed during this batch.
|
|
|
// This gets reset before we yield back to the browser.
|
|
|
// TODO: Warn in strict mode if getDerivedStateFromError is
|
|
|
// not defined.
|
|
|
markLegacyErrorBoundaryAsFailed(this);
|
|
|
}
|
|
|
|
|
|
var error$1 = errorInfo.value;
|
|
|
var stack = errorInfo.stack;
|
|
|
this.componentDidCatch(error$1, {
|
|
|
componentStack: stack !== null ? stack : ''
|
|
|
});
|
|
|
|
|
|
{
|
|
|
if (typeof getDerivedStateFromError !== 'function') {
|
|
|
// If componentDidCatch is the only error boundary method defined,
|
|
|
// then it needs to call setState to recover from errors.
|
|
|
// If no state update is scheduled then the boundary will swallow the error.
|
|
|
if (!includesSomeLane(fiber.lanes, SyncLane)) {
|
|
|
error('%s: Error boundaries should implement getDerivedStateFromError(). ' + 'In that method, return a state update to display an error message or fallback UI.', getComponentNameFromFiber(fiber) || 'Unknown');
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
};
|
|
|
}
|
|
|
|
|
|
return update;
|
|
|
}
|
|
|
|
|
|
function attachPingListener(root, wakeable, lanes) {
|
|
|
// Attach a ping listener
|
|
|
//
|
|
|
// The data might resolve before we have a chance to commit the fallback. Or,
|
|
|
// in the case of a refresh, we'll never commit a fallback. So we need to
|
|
|
// attach a listener now. When it resolves ("pings"), we can decide whether to
|
|
|
// try rendering the tree again.
|
|
|
//
|
|
|
// Only attach a listener if one does not already exist for the lanes
|
|
|
// we're currently rendering (which acts like a "thread ID" here).
|
|
|
//
|
|
|
// We only need to do this in concurrent mode. Legacy Suspense always
|
|
|
// commits fallbacks synchronously, so there are no pings.
|
|
|
var pingCache = root.pingCache;
|
|
|
var threadIDs;
|
|
|
|
|
|
if (pingCache === null) {
|
|
|
pingCache = root.pingCache = new PossiblyWeakMap$1();
|
|
|
threadIDs = new Set();
|
|
|
pingCache.set(wakeable, threadIDs);
|
|
|
} else {
|
|
|
threadIDs = pingCache.get(wakeable);
|
|
|
|
|
|
if (threadIDs === undefined) {
|
|
|
threadIDs = new Set();
|
|
|
pingCache.set(wakeable, threadIDs);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (!threadIDs.has(lanes)) {
|
|
|
// Memoize using the thread ID to prevent redundant listeners.
|
|
|
threadIDs.add(lanes);
|
|
|
var ping = pingSuspendedRoot.bind(null, root, wakeable, lanes);
|
|
|
|
|
|
{
|
|
|
if (isDevToolsPresent) {
|
|
|
// If we have pending work still, restore the original updaters
|
|
|
restorePendingUpdaters(root, lanes);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
wakeable.then(ping, ping);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function attachRetryListener(suspenseBoundary, root, wakeable, lanes) {
|
|
|
// Retry listener
|
|
|
//
|
|
|
// If the fallback does commit, we need to attach a different type of
|
|
|
// listener. This one schedules an update on the Suspense boundary to turn
|
|
|
// the fallback state off.
|
|
|
//
|
|
|
// Stash the wakeable on the boundary fiber so we can access it in the
|
|
|
// commit phase.
|
|
|
//
|
|
|
// When the wakeable resolves, we'll attempt to render the boundary
|
|
|
// again ("retry").
|
|
|
var wakeables = suspenseBoundary.updateQueue;
|
|
|
|
|
|
if (wakeables === null) {
|
|
|
var updateQueue = new Set();
|
|
|
updateQueue.add(wakeable);
|
|
|
suspenseBoundary.updateQueue = updateQueue;
|
|
|
} else {
|
|
|
wakeables.add(wakeable);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function resetSuspendedComponent(sourceFiber, rootRenderLanes) {
|
|
|
// A legacy mode Suspense quirk, only relevant to hook components.
|
|
|
|
|
|
|
|
|
var tag = sourceFiber.tag;
|
|
|
|
|
|
if ((sourceFiber.mode & ConcurrentMode) === NoMode && (tag === FunctionComponent || tag === ForwardRef || tag === SimpleMemoComponent)) {
|
|
|
var currentSource = sourceFiber.alternate;
|
|
|
|
|
|
if (currentSource) {
|
|
|
sourceFiber.updateQueue = currentSource.updateQueue;
|
|
|
sourceFiber.memoizedState = currentSource.memoizedState;
|
|
|
sourceFiber.lanes = currentSource.lanes;
|
|
|
} else {
|
|
|
sourceFiber.updateQueue = null;
|
|
|
sourceFiber.memoizedState = null;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function getNearestSuspenseBoundaryToCapture(returnFiber) {
|
|
|
var node = returnFiber;
|
|
|
|
|
|
do {
|
|
|
if (node.tag === SuspenseComponent && shouldCaptureSuspense(node)) {
|
|
|
return node;
|
|
|
} // This boundary already captured during this render. Continue to the next
|
|
|
// boundary.
|
|
|
|
|
|
|
|
|
node = node.return;
|
|
|
} while (node !== null);
|
|
|
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
function markSuspenseBoundaryShouldCapture(suspenseBoundary, returnFiber, sourceFiber, root, rootRenderLanes) {
|
|
|
// This marks a Suspense boundary so that when we're unwinding the stack,
|
|
|
// it captures the suspended "exception" and does a second (fallback) pass.
|
|
|
if ((suspenseBoundary.mode & ConcurrentMode) === NoMode) {
|
|
|
// Legacy Mode Suspense
|
|
|
//
|
|
|
// If the boundary is in legacy mode, we should *not*
|
|
|
// suspend the commit. Pretend as if the suspended component rendered
|
|
|
// null and keep rendering. When the Suspense boundary completes,
|
|
|
// we'll do a second pass to render the fallback.
|
|
|
if (suspenseBoundary === returnFiber) {
|
|
|
// Special case where we suspended while reconciling the children of
|
|
|
// a Suspense boundary's inner Offscreen wrapper fiber. This happens
|
|
|
// when a React.lazy component is a direct child of a
|
|
|
// Suspense boundary.
|
|
|
//
|
|
|
// Suspense boundaries are implemented as multiple fibers, but they
|
|
|
// are a single conceptual unit. The legacy mode behavior where we
|
|
|
// pretend the suspended fiber committed as `null` won't work,
|
|
|
// because in this case the "suspended" fiber is the inner
|
|
|
// Offscreen wrapper.
|
|
|
//
|
|
|
// Because the contents of the boundary haven't started rendering
|
|
|
// yet (i.e. nothing in the tree has partially rendered) we can
|
|
|
// switch to the regular, concurrent mode behavior: mark the
|
|
|
// boundary with ShouldCapture and enter the unwind phase.
|
|
|
suspenseBoundary.flags |= ShouldCapture;
|
|
|
} else {
|
|
|
suspenseBoundary.flags |= DidCapture;
|
|
|
sourceFiber.flags |= ForceUpdateForLegacySuspense; // We're going to commit this fiber even though it didn't complete.
|
|
|
// But we shouldn't call any lifecycle methods or callbacks. Remove
|
|
|
// all lifecycle effect tags.
|
|
|
|
|
|
sourceFiber.flags &= ~(LifecycleEffectMask | Incomplete);
|
|
|
|
|
|
if (sourceFiber.tag === ClassComponent) {
|
|
|
var currentSourceFiber = sourceFiber.alternate;
|
|
|
|
|
|
if (currentSourceFiber === null) {
|
|
|
// This is a new mount. Change the tag so it's not mistaken for a
|
|
|
// completed class component. For example, we should not call
|
|
|
// componentWillUnmount if it is deleted.
|
|
|
sourceFiber.tag = IncompleteClassComponent;
|
|
|
} else {
|
|
|
// When we try rendering again, we should not reuse the current fiber,
|
|
|
// since it's known to be in an inconsistent state. Use a force update to
|
|
|
// prevent a bail out.
|
|
|
var update = createUpdate(NoTimestamp, SyncLane);
|
|
|
update.tag = ForceUpdate;
|
|
|
enqueueUpdate(sourceFiber, update, SyncLane);
|
|
|
}
|
|
|
} // The source fiber did not complete. Mark it with Sync priority to
|
|
|
// indicate that it still has pending work.
|
|
|
|
|
|
|
|
|
sourceFiber.lanes = mergeLanes(sourceFiber.lanes, SyncLane);
|
|
|
}
|
|
|
|
|
|
return suspenseBoundary;
|
|
|
} // Confirmed that the boundary is in a concurrent mode tree. Continue
|
|
|
// with the normal suspend path.
|
|
|
//
|
|
|
// After this we'll use a set of heuristics to determine whether this
|
|
|
// render pass will run to completion or restart or "suspend" the commit.
|
|
|
// The actual logic for this is spread out in different places.
|
|
|
//
|
|
|
// This first principle is that if we're going to suspend when we complete
|
|
|
// a root, then we should also restart if we get an update or ping that
|
|
|
// might unsuspend it, and vice versa. The only reason to suspend is
|
|
|
// because you think you might want to restart before committing. However,
|
|
|
// it doesn't make sense to restart only while in the period we're suspended.
|
|
|
//
|
|
|
// Restarting too aggressively is also not good because it starves out any
|
|
|
// intermediate loading state. So we use heuristics to determine when.
|
|
|
// Suspense Heuristics
|
|
|
//
|
|
|
// If nothing threw a Promise or all the same fallbacks are already showing,
|
|
|
// then don't suspend/restart.
|
|
|
//
|
|
|
// If this is an initial render of a new tree of Suspense boundaries and
|
|
|
// those trigger a fallback, then don't suspend/restart. We want to ensure
|
|
|
// that we can show the initial loading state as quickly as possible.
|
|
|
//
|
|
|
// If we hit a "Delayed" case, such as when we'd switch from content back into
|
|
|
// a fallback, then we should always suspend/restart. Transitions apply
|
|
|
// to this case. If none is defined, JND is used instead.
|
|
|
//
|
|
|
// If we're already showing a fallback and it gets "retried", allowing us to show
|
|
|
// another level, but there's still an inner boundary that would show a fallback,
|
|
|
// then we suspend/restart for 500ms since the last time we showed a fallback
|
|
|
// anywhere in the tree. This effectively throttles progressive loading into a
|
|
|
// consistent train of commits. This also gives us an opportunity to restart to
|
|
|
// get to the completed state slightly earlier.
|
|
|
//
|
|
|
// If there's ambiguity due to batching it's resolved in preference of:
|
|
|
// 1) "delayed", 2) "initial render", 3) "retry".
|
|
|
//
|
|
|
// We want to ensure that a "busy" state doesn't get force committed. We want to
|
|
|
// ensure that new initial loading states can commit as soon as possible.
|
|
|
|
|
|
|
|
|
suspenseBoundary.flags |= ShouldCapture; // TODO: I think we can remove this, since we now use `DidCapture` in
|
|
|
// the begin phase to prevent an early bailout.
|
|
|
|
|
|
suspenseBoundary.lanes = rootRenderLanes;
|
|
|
return suspenseBoundary;
|
|
|
}
|
|
|
|
|
|
function throwException(root, returnFiber, sourceFiber, value, rootRenderLanes) {
|
|
|
// The source fiber did not complete.
|
|
|
sourceFiber.flags |= Incomplete;
|
|
|
|
|
|
{
|
|
|
if (isDevToolsPresent) {
|
|
|
// If we have pending work still, restore the original updaters
|
|
|
restorePendingUpdaters(root, rootRenderLanes);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (value !== null && typeof value === 'object' && typeof value.then === 'function') {
|
|
|
// This is a wakeable. The component suspended.
|
|
|
var wakeable = value;
|
|
|
resetSuspendedComponent(sourceFiber);
|
|
|
|
|
|
{
|
|
|
if (getIsHydrating() && sourceFiber.mode & ConcurrentMode) {
|
|
|
markDidThrowWhileHydratingDEV();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
var suspenseBoundary = getNearestSuspenseBoundaryToCapture(returnFiber);
|
|
|
|
|
|
if (suspenseBoundary !== null) {
|
|
|
suspenseBoundary.flags &= ~ForceClientRender;
|
|
|
markSuspenseBoundaryShouldCapture(suspenseBoundary, returnFiber, sourceFiber, root, rootRenderLanes); // We only attach ping listeners in concurrent mode. Legacy Suspense always
|
|
|
// commits fallbacks synchronously, so there are no pings.
|
|
|
|
|
|
if (suspenseBoundary.mode & ConcurrentMode) {
|
|
|
attachPingListener(root, wakeable, rootRenderLanes);
|
|
|
}
|
|
|
|
|
|
attachRetryListener(suspenseBoundary, root, wakeable);
|
|
|
return;
|
|
|
} else {
|
|
|
// No boundary was found. Unless this is a sync update, this is OK.
|
|
|
// We can suspend and wait for more data to arrive.
|
|
|
if (!includesSyncLane(rootRenderLanes)) {
|
|
|
// This is not a sync update. Suspend. Since we're not activating a
|
|
|
// Suspense boundary, this will unwind all the way to the root without
|
|
|
// performing a second pass to render a fallback. (This is arguably how
|
|
|
// refresh transitions should work, too, since we're not going to commit
|
|
|
// the fallbacks anyway.)
|
|
|
//
|
|
|
// This case also applies to initial hydration.
|
|
|
attachPingListener(root, wakeable, rootRenderLanes);
|
|
|
renderDidSuspendDelayIfPossible();
|
|
|
return;
|
|
|
} // This is a sync/discrete update. We treat this case like an error
|
|
|
// because discrete renders are expected to produce a complete tree
|
|
|
// synchronously to maintain consistency with external state.
|
|
|
|
|
|
|
|
|
var uncaughtSuspenseError = new Error('A component suspended while responding to synchronous input. This ' + 'will cause the UI to be replaced with a loading indicator. To ' + 'fix, updates that suspend should be wrapped ' + 'with startTransition.'); // If we're outside a transition, fall through to the regular error path.
|
|
|
// The error will be caught by the nearest suspense boundary.
|
|
|
|
|
|
value = uncaughtSuspenseError;
|
|
|
}
|
|
|
} else {
|
|
|
// This is a regular error, not a Suspense wakeable.
|
|
|
if (getIsHydrating() && sourceFiber.mode & ConcurrentMode) {
|
|
|
markDidThrowWhileHydratingDEV();
|
|
|
|
|
|
var _suspenseBoundary = getNearestSuspenseBoundaryToCapture(returnFiber); // If the error was thrown during hydration, we may be able to recover by
|
|
|
// discarding the dehydrated content and switching to a client render.
|
|
|
// Instead of surfacing the error, find the nearest Suspense boundary
|
|
|
// and render it again without hydration.
|
|
|
|
|
|
|
|
|
if (_suspenseBoundary !== null) {
|
|
|
if ((_suspenseBoundary.flags & ShouldCapture) === NoFlags) {
|
|
|
// Set a flag to indicate that we should try rendering the normal
|
|
|
// children again, not the fallback.
|
|
|
_suspenseBoundary.flags |= ForceClientRender;
|
|
|
}
|
|
|
|
|
|
markSuspenseBoundaryShouldCapture(_suspenseBoundary, returnFiber, sourceFiber, root, rootRenderLanes); // Even though the user may not be affected by this error, we should
|
|
|
// still log it so it can be fixed.
|
|
|
|
|
|
queueHydrationError(createCapturedValueAtFiber(value, sourceFiber));
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
value = createCapturedValueAtFiber(value, sourceFiber);
|
|
|
renderDidError(value); // We didn't find a boundary that could handle this type of exception. Start
|
|
|
// over and traverse parent path again, this time treating the exception
|
|
|
// as an error.
|
|
|
|
|
|
var workInProgress = returnFiber;
|
|
|
|
|
|
do {
|
|
|
switch (workInProgress.tag) {
|
|
|
case HostRoot:
|
|
|
{
|
|
|
var _errorInfo = value;
|
|
|
workInProgress.flags |= ShouldCapture;
|
|
|
var lane = pickArbitraryLane(rootRenderLanes);
|
|
|
workInProgress.lanes = mergeLanes(workInProgress.lanes, lane);
|
|
|
var update = createRootErrorUpdate(workInProgress, _errorInfo, lane);
|
|
|
enqueueCapturedUpdate(workInProgress, update);
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
case ClassComponent:
|
|
|
// Capture and retry
|
|
|
var errorInfo = value;
|
|
|
var ctor = workInProgress.type;
|
|
|
var instance = workInProgress.stateNode;
|
|
|
|
|
|
if ((workInProgress.flags & DidCapture) === NoFlags && (typeof ctor.getDerivedStateFromError === 'function' || instance !== null && typeof instance.componentDidCatch === 'function' && !isAlreadyFailedLegacyErrorBoundary(instance))) {
|
|
|
workInProgress.flags |= ShouldCapture;
|
|
|
|
|
|
var _lane = pickArbitraryLane(rootRenderLanes);
|
|
|
|
|
|
workInProgress.lanes = mergeLanes(workInProgress.lanes, _lane); // Schedule the error boundary to re-render using updated state
|
|
|
|
|
|
var _update = createClassErrorUpdate(workInProgress, errorInfo, _lane);
|
|
|
|
|
|
enqueueCapturedUpdate(workInProgress, _update);
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
workInProgress = workInProgress.return;
|
|
|
} while (workInProgress !== null);
|
|
|
}
|
|
|
|
|
|
function getSuspendedCache() {
|
|
|
{
|
|
|
return null;
|
|
|
} // This function is called when a Suspense boundary suspends. It returns the
|
|
|
}
|
|
|
|
|
|
var ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner;
|
|
|
var didReceiveUpdate = false;
|
|
|
var didWarnAboutBadClass;
|
|
|
var didWarnAboutModulePatternComponent;
|
|
|
var didWarnAboutContextTypeOnFunctionComponent;
|
|
|
var didWarnAboutGetDerivedStateOnFunctionComponent;
|
|
|
var didWarnAboutFunctionRefs;
|
|
|
var didWarnAboutReassigningProps;
|
|
|
var didWarnAboutRevealOrder;
|
|
|
var didWarnAboutTailOptions;
|
|
|
|
|
|
{
|
|
|
didWarnAboutBadClass = {};
|
|
|
didWarnAboutModulePatternComponent = {};
|
|
|
didWarnAboutContextTypeOnFunctionComponent = {};
|
|
|
didWarnAboutGetDerivedStateOnFunctionComponent = {};
|
|
|
didWarnAboutFunctionRefs = {};
|
|
|
didWarnAboutReassigningProps = false;
|
|
|
didWarnAboutRevealOrder = {};
|
|
|
didWarnAboutTailOptions = {};
|
|
|
}
|
|
|
|
|
|
function reconcileChildren(current, workInProgress, nextChildren, renderLanes) {
|
|
|
if (current === null) {
|
|
|
// If this is a fresh new component that hasn't been rendered yet, we
|
|
|
// won't update its child set by applying minimal side-effects. Instead,
|
|
|
// we will add them all to the child before it gets rendered. That means
|
|
|
// we can optimize this reconciliation pass by not tracking side-effects.
|
|
|
workInProgress.child = mountChildFibers(workInProgress, null, nextChildren, renderLanes);
|
|
|
} else {
|
|
|
// If the current child is the same as the work in progress, it means that
|
|
|
// we haven't yet started any work on these children. Therefore, we use
|
|
|
// the clone algorithm to create a copy of all the current children.
|
|
|
// If we had any progressed work already, that is invalid at this point so
|
|
|
// let's throw it out.
|
|
|
workInProgress.child = reconcileChildFibers(workInProgress, current.child, nextChildren, renderLanes);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function forceUnmountCurrentAndReconcile(current, workInProgress, nextChildren, renderLanes) {
|
|
|
// This function is fork of reconcileChildren. It's used in cases where we
|
|
|
// want to reconcile without matching against the existing set. This has the
|
|
|
// effect of all current children being unmounted; even if the type and key
|
|
|
// are the same, the old child is unmounted and a new child is created.
|
|
|
//
|
|
|
// To do this, we're going to go through the reconcile algorithm twice. In
|
|
|
// the first pass, we schedule a deletion for all the current children by
|
|
|
// passing null.
|
|
|
workInProgress.child = reconcileChildFibers(workInProgress, current.child, null, renderLanes); // In the second pass, we mount the new children. The trick here is that we
|
|
|
// pass null in place of where we usually pass the current child set. This has
|
|
|
// the effect of remounting all children regardless of whether their
|
|
|
// identities match.
|
|
|
|
|
|
workInProgress.child = reconcileChildFibers(workInProgress, null, nextChildren, renderLanes);
|
|
|
}
|
|
|
|
|
|
function updateForwardRef(current, workInProgress, Component, nextProps, renderLanes) {
|
|
|
// TODO: current can be non-null here even if the component
|
|
|
// hasn't yet mounted. This happens after the first render suspends.
|
|
|
// We'll need to figure out if this is fine or can cause issues.
|
|
|
{
|
|
|
if (workInProgress.type !== workInProgress.elementType) {
|
|
|
// Lazy component props can't be validated in createElement
|
|
|
// because they're only guaranteed to be resolved here.
|
|
|
var innerPropTypes = Component.propTypes;
|
|
|
|
|
|
if (innerPropTypes) {
|
|
|
checkPropTypes(innerPropTypes, nextProps, // Resolved props
|
|
|
'prop', getComponentNameFromType(Component));
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var render = Component.render;
|
|
|
var ref = workInProgress.ref; // The rest is a fork of updateFunctionComponent
|
|
|
|
|
|
var nextChildren;
|
|
|
var hasId;
|
|
|
prepareToReadContext(workInProgress, renderLanes);
|
|
|
|
|
|
{
|
|
|
markComponentRenderStarted(workInProgress);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
ReactCurrentOwner$1.current = workInProgress;
|
|
|
setIsRendering(true);
|
|
|
nextChildren = renderWithHooks(current, workInProgress, render, nextProps, ref, renderLanes);
|
|
|
hasId = checkDidRenderIdHook();
|
|
|
|
|
|
if ( workInProgress.mode & StrictLegacyMode) {
|
|
|
setIsStrictModeForDevtools(true);
|
|
|
|
|
|
try {
|
|
|
nextChildren = renderWithHooks(current, workInProgress, render, nextProps, ref, renderLanes);
|
|
|
hasId = checkDidRenderIdHook();
|
|
|
} finally {
|
|
|
setIsStrictModeForDevtools(false);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
setIsRendering(false);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
markComponentRenderStopped();
|
|
|
}
|
|
|
|
|
|
if (current !== null && !didReceiveUpdate) {
|
|
|
bailoutHooks(current, workInProgress, renderLanes);
|
|
|
return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);
|
|
|
}
|
|
|
|
|
|
if (getIsHydrating() && hasId) {
|
|
|
pushMaterializedTreeId(workInProgress);
|
|
|
} // React DevTools reads this flag.
|
|
|
|
|
|
|
|
|
workInProgress.flags |= PerformedWork;
|
|
|
reconcileChildren(current, workInProgress, nextChildren, renderLanes);
|
|
|
return workInProgress.child;
|
|
|
}
|
|
|
|
|
|
function updateMemoComponent(current, workInProgress, Component, nextProps, renderLanes) {
|
|
|
if (current === null) {
|
|
|
var type = Component.type;
|
|
|
|
|
|
if (isSimpleFunctionComponent(type) && Component.compare === null && // SimpleMemoComponent codepath doesn't resolve outer props either.
|
|
|
Component.defaultProps === undefined) {
|
|
|
var resolvedType = type;
|
|
|
|
|
|
{
|
|
|
resolvedType = resolveFunctionForHotReloading(type);
|
|
|
} // If this is a plain function component without default props,
|
|
|
// and with only the default shallow comparison, we upgrade it
|
|
|
// to a SimpleMemoComponent to allow fast path updates.
|
|
|
|
|
|
|
|
|
workInProgress.tag = SimpleMemoComponent;
|
|
|
workInProgress.type = resolvedType;
|
|
|
|
|
|
{
|
|
|
validateFunctionComponentInDev(workInProgress, type);
|
|
|
}
|
|
|
|
|
|
return updateSimpleMemoComponent(current, workInProgress, resolvedType, nextProps, renderLanes);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
var innerPropTypes = type.propTypes;
|
|
|
|
|
|
if (innerPropTypes) {
|
|
|
// Inner memo component props aren't currently validated in createElement.
|
|
|
// We could move it there, but we'd still need this for lazy code path.
|
|
|
checkPropTypes(innerPropTypes, nextProps, // Resolved props
|
|
|
'prop', getComponentNameFromType(type));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var child = createFiberFromTypeAndProps(Component.type, null, nextProps, workInProgress, workInProgress.mode, renderLanes);
|
|
|
child.ref = workInProgress.ref;
|
|
|
child.return = workInProgress;
|
|
|
workInProgress.child = child;
|
|
|
return child;
|
|
|
}
|
|
|
|
|
|
{
|
|
|
var _type = Component.type;
|
|
|
var _innerPropTypes = _type.propTypes;
|
|
|
|
|
|
if (_innerPropTypes) {
|
|
|
// Inner memo component props aren't currently validated in createElement.
|
|
|
// We could move it there, but we'd still need this for lazy code path.
|
|
|
checkPropTypes(_innerPropTypes, nextProps, // Resolved props
|
|
|
'prop', getComponentNameFromType(_type));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var currentChild = current.child; // This is always exactly one child
|
|
|
|
|
|
var hasScheduledUpdateOrContext = checkScheduledUpdateOrContext(current, renderLanes);
|
|
|
|
|
|
if (!hasScheduledUpdateOrContext) {
|
|
|
// This will be the props with resolved defaultProps,
|
|
|
// unlike current.memoizedProps which will be the unresolved ones.
|
|
|
var prevProps = currentChild.memoizedProps; // Default to shallow comparison
|
|
|
|
|
|
var compare = Component.compare;
|
|
|
compare = compare !== null ? compare : shallowEqual;
|
|
|
|
|
|
if (compare(prevProps, nextProps) && current.ref === workInProgress.ref) {
|
|
|
return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);
|
|
|
}
|
|
|
} // React DevTools reads this flag.
|
|
|
|
|
|
|
|
|
workInProgress.flags |= PerformedWork;
|
|
|
var newChild = createWorkInProgress(currentChild, nextProps);
|
|
|
newChild.ref = workInProgress.ref;
|
|
|
newChild.return = workInProgress;
|
|
|
workInProgress.child = newChild;
|
|
|
return newChild;
|
|
|
}
|
|
|
|
|
|
function updateSimpleMemoComponent(current, workInProgress, Component, nextProps, renderLanes) {
|
|
|
// TODO: current can be non-null here even if the component
|
|
|
// hasn't yet mounted. This happens when the inner render suspends.
|
|
|
// We'll need to figure out if this is fine or can cause issues.
|
|
|
{
|
|
|
if (workInProgress.type !== workInProgress.elementType) {
|
|
|
// Lazy component props can't be validated in createElement
|
|
|
// because they're only guaranteed to be resolved here.
|
|
|
var outerMemoType = workInProgress.elementType;
|
|
|
|
|
|
if (outerMemoType.$$typeof === REACT_LAZY_TYPE) {
|
|
|
// We warn when you define propTypes on lazy()
|
|
|
// so let's just skip over it to find memo() outer wrapper.
|
|
|
// Inner props for memo are validated later.
|
|
|
var lazyComponent = outerMemoType;
|
|
|
var payload = lazyComponent._payload;
|
|
|
var init = lazyComponent._init;
|
|
|
|
|
|
try {
|
|
|
outerMemoType = init(payload);
|
|
|
} catch (x) {
|
|
|
outerMemoType = null;
|
|
|
} // Inner propTypes will be validated in the function component path.
|
|
|
|
|
|
|
|
|
var outerPropTypes = outerMemoType && outerMemoType.propTypes;
|
|
|
|
|
|
if (outerPropTypes) {
|
|
|
checkPropTypes(outerPropTypes, nextProps, // Resolved (SimpleMemoComponent has no defaultProps)
|
|
|
'prop', getComponentNameFromType(outerMemoType));
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (current !== null) {
|
|
|
var prevProps = current.memoizedProps;
|
|
|
|
|
|
if (shallowEqual(prevProps, nextProps) && current.ref === workInProgress.ref && ( // Prevent bailout if the implementation changed due to hot reload.
|
|
|
workInProgress.type === current.type )) {
|
|
|
didReceiveUpdate = false; // The props are shallowly equal. Reuse the previous props object, like we
|
|
|
// would during a normal fiber bailout.
|
|
|
//
|
|
|
// We don't have strong guarantees that the props object is referentially
|
|
|
// equal during updates where we can't bail out anyway — like if the props
|
|
|
// are shallowly equal, but there's a local state or context update in the
|
|
|
// same batch.
|
|
|
//
|
|
|
// However, as a principle, we should aim to make the behavior consistent
|
|
|
// across different ways of memoizing a component. For example, React.memo
|
|
|
// has a different internal Fiber layout if you pass a normal function
|
|
|
// component (SimpleMemoComponent) versus if you pass a different type
|
|
|
// like forwardRef (MemoComponent). But this is an implementation detail.
|
|
|
// Wrapping a component in forwardRef (or React.lazy, etc) shouldn't
|
|
|
// affect whether the props object is reused during a bailout.
|
|
|
|
|
|
workInProgress.pendingProps = nextProps = prevProps;
|
|
|
|
|
|
if (!checkScheduledUpdateOrContext(current, renderLanes)) {
|
|
|
// The pending lanes were cleared at the beginning of beginWork. We're
|
|
|
// about to bail out, but there might be other lanes that weren't
|
|
|
// included in the current render. Usually, the priority level of the
|
|
|
// remaining updates is accumulated during the evaluation of the
|
|
|
// component (i.e. when processing the update queue). But since since
|
|
|
// we're bailing out early *without* evaluating the component, we need
|
|
|
// to account for it here, too. Reset to the value of the current fiber.
|
|
|
// NOTE: This only applies to SimpleMemoComponent, not MemoComponent,
|
|
|
// because a MemoComponent fiber does not have hooks or an update queue;
|
|
|
// rather, it wraps around an inner component, which may or may not
|
|
|
// contains hooks.
|
|
|
// TODO: Move the reset at in beginWork out of the common path so that
|
|
|
// this is no longer necessary.
|
|
|
workInProgress.lanes = current.lanes;
|
|
|
return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);
|
|
|
} else if ((current.flags & ForceUpdateForLegacySuspense) !== NoFlags) {
|
|
|
// This is a special case that only exists for legacy mode.
|
|
|
// See https://github.com/facebook/react/pull/19216.
|
|
|
didReceiveUpdate = true;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return updateFunctionComponent(current, workInProgress, Component, nextProps, renderLanes);
|
|
|
}
|
|
|
|
|
|
function updateOffscreenComponent(current, workInProgress, renderLanes) {
|
|
|
var nextProps = workInProgress.pendingProps;
|
|
|
var nextChildren = nextProps.children;
|
|
|
var prevState = current !== null ? current.memoizedState : null;
|
|
|
|
|
|
if (nextProps.mode === 'hidden' || enableLegacyHidden ) {
|
|
|
// Rendering a hidden tree.
|
|
|
if ((workInProgress.mode & ConcurrentMode) === NoMode) {
|
|
|
// In legacy sync mode, don't defer the subtree. Render it now.
|
|
|
// TODO: Consider how Offscreen should work with transitions in the future
|
|
|
var nextState = {
|
|
|
baseLanes: NoLanes,
|
|
|
cachePool: null,
|
|
|
transitions: null
|
|
|
};
|
|
|
workInProgress.memoizedState = nextState;
|
|
|
|
|
|
pushRenderLanes(workInProgress, renderLanes);
|
|
|
} else if (!includesSomeLane(renderLanes, OffscreenLane)) {
|
|
|
var spawnedCachePool = null; // We're hidden, and we're not rendering at Offscreen. We will bail out
|
|
|
// and resume this tree later.
|
|
|
|
|
|
var nextBaseLanes;
|
|
|
|
|
|
if (prevState !== null) {
|
|
|
var prevBaseLanes = prevState.baseLanes;
|
|
|
nextBaseLanes = mergeLanes(prevBaseLanes, renderLanes);
|
|
|
} else {
|
|
|
nextBaseLanes = renderLanes;
|
|
|
} // Schedule this fiber to re-render at offscreen priority. Then bailout.
|
|
|
|
|
|
|
|
|
workInProgress.lanes = workInProgress.childLanes = laneToLanes(OffscreenLane);
|
|
|
var _nextState = {
|
|
|
baseLanes: nextBaseLanes,
|
|
|
cachePool: spawnedCachePool,
|
|
|
transitions: null
|
|
|
};
|
|
|
workInProgress.memoizedState = _nextState;
|
|
|
workInProgress.updateQueue = null;
|
|
|
// to avoid a push/pop misalignment.
|
|
|
|
|
|
|
|
|
pushRenderLanes(workInProgress, nextBaseLanes);
|
|
|
|
|
|
return null;
|
|
|
} else {
|
|
|
// This is the second render. The surrounding visible content has already
|
|
|
// committed. Now we resume rendering the hidden tree.
|
|
|
// Rendering at offscreen, so we can clear the base lanes.
|
|
|
var _nextState2 = {
|
|
|
baseLanes: NoLanes,
|
|
|
cachePool: null,
|
|
|
transitions: null
|
|
|
};
|
|
|
workInProgress.memoizedState = _nextState2; // Push the lanes that were skipped when we bailed out.
|
|
|
|
|
|
var subtreeRenderLanes = prevState !== null ? prevState.baseLanes : renderLanes;
|
|
|
|
|
|
pushRenderLanes(workInProgress, subtreeRenderLanes);
|
|
|
}
|
|
|
} else {
|
|
|
// Rendering a visible tree.
|
|
|
var _subtreeRenderLanes;
|
|
|
|
|
|
if (prevState !== null) {
|
|
|
// We're going from hidden -> visible.
|
|
|
_subtreeRenderLanes = mergeLanes(prevState.baseLanes, renderLanes);
|
|
|
|
|
|
workInProgress.memoizedState = null;
|
|
|
} else {
|
|
|
// We weren't previously hidden, and we still aren't, so there's nothing
|
|
|
// special to do. Need to push to the stack regardless, though, to avoid
|
|
|
// a push/pop misalignment.
|
|
|
_subtreeRenderLanes = renderLanes;
|
|
|
}
|
|
|
|
|
|
pushRenderLanes(workInProgress, _subtreeRenderLanes);
|
|
|
}
|
|
|
|
|
|
reconcileChildren(current, workInProgress, nextChildren, renderLanes);
|
|
|
return workInProgress.child;
|
|
|
} // Note: These happen to have identical begin phases, for now. We shouldn't hold
|
|
|
|
|
|
function updateFragment(current, workInProgress, renderLanes) {
|
|
|
var nextChildren = workInProgress.pendingProps;
|
|
|
reconcileChildren(current, workInProgress, nextChildren, renderLanes);
|
|
|
return workInProgress.child;
|
|
|
}
|
|
|
|
|
|
function updateMode(current, workInProgress, renderLanes) {
|
|
|
var nextChildren = workInProgress.pendingProps.children;
|
|
|
reconcileChildren(current, workInProgress, nextChildren, renderLanes);
|
|
|
return workInProgress.child;
|
|
|
}
|
|
|
|
|
|
function updateProfiler(current, workInProgress, renderLanes) {
|
|
|
{
|
|
|
workInProgress.flags |= Update;
|
|
|
|
|
|
{
|
|
|
// Reset effect durations for the next eventual effect phase.
|
|
|
// These are reset during render to allow the DevTools commit hook a chance to read them,
|
|
|
var stateNode = workInProgress.stateNode;
|
|
|
stateNode.effectDuration = 0;
|
|
|
stateNode.passiveEffectDuration = 0;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var nextProps = workInProgress.pendingProps;
|
|
|
var nextChildren = nextProps.children;
|
|
|
reconcileChildren(current, workInProgress, nextChildren, renderLanes);
|
|
|
return workInProgress.child;
|
|
|
}
|
|
|
|
|
|
function markRef(current, workInProgress) {
|
|
|
var ref = workInProgress.ref;
|
|
|
|
|
|
if (current === null && ref !== null || current !== null && current.ref !== ref) {
|
|
|
// Schedule a Ref effect
|
|
|
workInProgress.flags |= Ref;
|
|
|
|
|
|
{
|
|
|
workInProgress.flags |= RefStatic;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function updateFunctionComponent(current, workInProgress, Component, nextProps, renderLanes) {
|
|
|
{
|
|
|
if (workInProgress.type !== workInProgress.elementType) {
|
|
|
// Lazy component props can't be validated in createElement
|
|
|
// because they're only guaranteed to be resolved here.
|
|
|
var innerPropTypes = Component.propTypes;
|
|
|
|
|
|
if (innerPropTypes) {
|
|
|
checkPropTypes(innerPropTypes, nextProps, // Resolved props
|
|
|
'prop', getComponentNameFromType(Component));
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var context;
|
|
|
|
|
|
{
|
|
|
var unmaskedContext = getUnmaskedContext(workInProgress, Component, true);
|
|
|
context = getMaskedContext(workInProgress, unmaskedContext);
|
|
|
}
|
|
|
|
|
|
var nextChildren;
|
|
|
var hasId;
|
|
|
prepareToReadContext(workInProgress, renderLanes);
|
|
|
|
|
|
{
|
|
|
markComponentRenderStarted(workInProgress);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
ReactCurrentOwner$1.current = workInProgress;
|
|
|
setIsRendering(true);
|
|
|
nextChildren = renderWithHooks(current, workInProgress, Component, nextProps, context, renderLanes);
|
|
|
hasId = checkDidRenderIdHook();
|
|
|
|
|
|
if ( workInProgress.mode & StrictLegacyMode) {
|
|
|
setIsStrictModeForDevtools(true);
|
|
|
|
|
|
try {
|
|
|
nextChildren = renderWithHooks(current, workInProgress, Component, nextProps, context, renderLanes);
|
|
|
hasId = checkDidRenderIdHook();
|
|
|
} finally {
|
|
|
setIsStrictModeForDevtools(false);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
setIsRendering(false);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
markComponentRenderStopped();
|
|
|
}
|
|
|
|
|
|
if (current !== null && !didReceiveUpdate) {
|
|
|
bailoutHooks(current, workInProgress, renderLanes);
|
|
|
return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);
|
|
|
}
|
|
|
|
|
|
if (getIsHydrating() && hasId) {
|
|
|
pushMaterializedTreeId(workInProgress);
|
|
|
} // React DevTools reads this flag.
|
|
|
|
|
|
|
|
|
workInProgress.flags |= PerformedWork;
|
|
|
reconcileChildren(current, workInProgress, nextChildren, renderLanes);
|
|
|
return workInProgress.child;
|
|
|
}
|
|
|
|
|
|
function updateClassComponent(current, workInProgress, Component, nextProps, renderLanes) {
|
|
|
{
|
|
|
// This is used by DevTools to force a boundary to error.
|
|
|
switch (shouldError(workInProgress)) {
|
|
|
case false:
|
|
|
{
|
|
|
var _instance = workInProgress.stateNode;
|
|
|
var ctor = workInProgress.type; // TODO This way of resetting the error boundary state is a hack.
|
|
|
// Is there a better way to do this?
|
|
|
|
|
|
var tempInstance = new ctor(workInProgress.memoizedProps, _instance.context);
|
|
|
var state = tempInstance.state;
|
|
|
|
|
|
_instance.updater.enqueueSetState(_instance, state, null);
|
|
|
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
case true:
|
|
|
{
|
|
|
workInProgress.flags |= DidCapture;
|
|
|
workInProgress.flags |= ShouldCapture; // eslint-disable-next-line react-internal/prod-error-codes
|
|
|
|
|
|
var error$1 = new Error('Simulated error coming from DevTools');
|
|
|
var lane = pickArbitraryLane(renderLanes);
|
|
|
workInProgress.lanes = mergeLanes(workInProgress.lanes, lane); // Schedule the error boundary to re-render using updated state
|
|
|
|
|
|
var update = createClassErrorUpdate(workInProgress, createCapturedValueAtFiber(error$1, workInProgress), lane);
|
|
|
enqueueCapturedUpdate(workInProgress, update);
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (workInProgress.type !== workInProgress.elementType) {
|
|
|
// Lazy component props can't be validated in createElement
|
|
|
// because they're only guaranteed to be resolved here.
|
|
|
var innerPropTypes = Component.propTypes;
|
|
|
|
|
|
if (innerPropTypes) {
|
|
|
checkPropTypes(innerPropTypes, nextProps, // Resolved props
|
|
|
'prop', getComponentNameFromType(Component));
|
|
|
}
|
|
|
}
|
|
|
} // Push context providers early to prevent context stack mismatches.
|
|
|
// During mounting we don't know the child context yet as the instance doesn't exist.
|
|
|
// We will invalidate the child context in finishClassComponent() right after rendering.
|
|
|
|
|
|
|
|
|
var hasContext;
|
|
|
|
|
|
if (isContextProvider(Component)) {
|
|
|
hasContext = true;
|
|
|
pushContextProvider(workInProgress);
|
|
|
} else {
|
|
|
hasContext = false;
|
|
|
}
|
|
|
|
|
|
prepareToReadContext(workInProgress, renderLanes);
|
|
|
var instance = workInProgress.stateNode;
|
|
|
var shouldUpdate;
|
|
|
|
|
|
if (instance === null) {
|
|
|
resetSuspendedCurrentOnMountInLegacyMode(current, workInProgress); // In the initial pass we might need to construct the instance.
|
|
|
|
|
|
constructClassInstance(workInProgress, Component, nextProps);
|
|
|
mountClassInstance(workInProgress, Component, nextProps, renderLanes);
|
|
|
shouldUpdate = true;
|
|
|
} else if (current === null) {
|
|
|
// In a resume, we'll already have an instance we can reuse.
|
|
|
shouldUpdate = resumeMountClassInstance(workInProgress, Component, nextProps, renderLanes);
|
|
|
} else {
|
|
|
shouldUpdate = updateClassInstance(current, workInProgress, Component, nextProps, renderLanes);
|
|
|
}
|
|
|
|
|
|
var nextUnitOfWork = finishClassComponent(current, workInProgress, Component, shouldUpdate, hasContext, renderLanes);
|
|
|
|
|
|
{
|
|
|
var inst = workInProgress.stateNode;
|
|
|
|
|
|
if (shouldUpdate && inst.props !== nextProps) {
|
|
|
if (!didWarnAboutReassigningProps) {
|
|
|
error('It looks like %s is reassigning its own `this.props` while rendering. ' + 'This is not supported and can lead to confusing bugs.', getComponentNameFromFiber(workInProgress) || 'a component');
|
|
|
}
|
|
|
|
|
|
didWarnAboutReassigningProps = true;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return nextUnitOfWork;
|
|
|
}
|
|
|
|
|
|
function finishClassComponent(current, workInProgress, Component, shouldUpdate, hasContext, renderLanes) {
|
|
|
// Refs should update even if shouldComponentUpdate returns false
|
|
|
markRef(current, workInProgress);
|
|
|
var didCaptureError = (workInProgress.flags & DidCapture) !== NoFlags;
|
|
|
|
|
|
if (!shouldUpdate && !didCaptureError) {
|
|
|
// Context providers should defer to sCU for rendering
|
|
|
if (hasContext) {
|
|
|
invalidateContextProvider(workInProgress, Component, false);
|
|
|
}
|
|
|
|
|
|
return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);
|
|
|
}
|
|
|
|
|
|
var instance = workInProgress.stateNode; // Rerender
|
|
|
|
|
|
ReactCurrentOwner$1.current = workInProgress;
|
|
|
var nextChildren;
|
|
|
|
|
|
if (didCaptureError && typeof Component.getDerivedStateFromError !== 'function') {
|
|
|
// If we captured an error, but getDerivedStateFromError is not defined,
|
|
|
// unmount all the children. componentDidCatch will schedule an update to
|
|
|
// re-render a fallback. This is temporary until we migrate everyone to
|
|
|
// the new API.
|
|
|
// TODO: Warn in a future release.
|
|
|
nextChildren = null;
|
|
|
|
|
|
{
|
|
|
stopProfilerTimerIfRunning();
|
|
|
}
|
|
|
} else {
|
|
|
{
|
|
|
markComponentRenderStarted(workInProgress);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
setIsRendering(true);
|
|
|
nextChildren = instance.render();
|
|
|
|
|
|
if ( workInProgress.mode & StrictLegacyMode) {
|
|
|
setIsStrictModeForDevtools(true);
|
|
|
|
|
|
try {
|
|
|
instance.render();
|
|
|
} finally {
|
|
|
setIsStrictModeForDevtools(false);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
setIsRendering(false);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
markComponentRenderStopped();
|
|
|
}
|
|
|
} // React DevTools reads this flag.
|
|
|
|
|
|
|
|
|
workInProgress.flags |= PerformedWork;
|
|
|
|
|
|
if (current !== null && didCaptureError) {
|
|
|
// If we're recovering from an error, reconcile without reusing any of
|
|
|
// the existing children. Conceptually, the normal children and the children
|
|
|
// that are shown on error are two different sets, so we shouldn't reuse
|
|
|
// normal children even if their identities match.
|
|
|
forceUnmountCurrentAndReconcile(current, workInProgress, nextChildren, renderLanes);
|
|
|
} else {
|
|
|
reconcileChildren(current, workInProgress, nextChildren, renderLanes);
|
|
|
} // Memoize state using the values we just used to render.
|
|
|
// TODO: Restructure so we never read values from the instance.
|
|
|
|
|
|
|
|
|
workInProgress.memoizedState = instance.state; // The context might have changed so we need to recalculate it.
|
|
|
|
|
|
if (hasContext) {
|
|
|
invalidateContextProvider(workInProgress, Component, true);
|
|
|
}
|
|
|
|
|
|
return workInProgress.child;
|
|
|
}
|
|
|
|
|
|
function pushHostRootContext(workInProgress) {
|
|
|
var root = workInProgress.stateNode;
|
|
|
|
|
|
if (root.pendingContext) {
|
|
|
pushTopLevelContextObject(workInProgress, root.pendingContext, root.pendingContext !== root.context);
|
|
|
} else if (root.context) {
|
|
|
// Should always be set
|
|
|
pushTopLevelContextObject(workInProgress, root.context, false);
|
|
|
}
|
|
|
|
|
|
pushHostContainer(workInProgress, root.containerInfo);
|
|
|
}
|
|
|
|
|
|
function updateHostRoot(current, workInProgress, renderLanes) {
|
|
|
pushHostRootContext(workInProgress);
|
|
|
|
|
|
if (current === null) {
|
|
|
throw new Error('Should have a current fiber. This is a bug in React.');
|
|
|
}
|
|
|
|
|
|
var nextProps = workInProgress.pendingProps;
|
|
|
var prevState = workInProgress.memoizedState;
|
|
|
var prevChildren = prevState.element;
|
|
|
cloneUpdateQueue(current, workInProgress);
|
|
|
processUpdateQueue(workInProgress, nextProps, null, renderLanes);
|
|
|
var nextState = workInProgress.memoizedState;
|
|
|
var root = workInProgress.stateNode;
|
|
|
// being called "element".
|
|
|
|
|
|
|
|
|
var nextChildren = nextState.element;
|
|
|
|
|
|
if ( prevState.isDehydrated) {
|
|
|
// This is a hydration root whose shell has not yet hydrated. We should
|
|
|
// attempt to hydrate.
|
|
|
// Flip isDehydrated to false to indicate that when this render
|
|
|
// finishes, the root will no longer be dehydrated.
|
|
|
var overrideState = {
|
|
|
element: nextChildren,
|
|
|
isDehydrated: false,
|
|
|
cache: nextState.cache,
|
|
|
pendingSuspenseBoundaries: nextState.pendingSuspenseBoundaries,
|
|
|
transitions: nextState.transitions
|
|
|
};
|
|
|
var updateQueue = workInProgress.updateQueue; // `baseState` can always be the last state because the root doesn't
|
|
|
// have reducer functions so it doesn't need rebasing.
|
|
|
|
|
|
updateQueue.baseState = overrideState;
|
|
|
workInProgress.memoizedState = overrideState;
|
|
|
|
|
|
if (workInProgress.flags & ForceClientRender) {
|
|
|
// Something errored during a previous attempt to hydrate the shell, so we
|
|
|
// forced a client render.
|
|
|
var recoverableError = createCapturedValueAtFiber(new Error('There was an error while hydrating. Because the error happened outside ' + 'of a Suspense boundary, the entire root will switch to ' + 'client rendering.'), workInProgress);
|
|
|
return mountHostRootWithoutHydrating(current, workInProgress, nextChildren, renderLanes, recoverableError);
|
|
|
} else if (nextChildren !== prevChildren) {
|
|
|
var _recoverableError = createCapturedValueAtFiber(new Error('This root received an early update, before anything was able ' + 'hydrate. Switched the entire root to client rendering.'), workInProgress);
|
|
|
|
|
|
return mountHostRootWithoutHydrating(current, workInProgress, nextChildren, renderLanes, _recoverableError);
|
|
|
} else {
|
|
|
// The outermost shell has not hydrated yet. Start hydrating.
|
|
|
enterHydrationState(workInProgress);
|
|
|
|
|
|
var child = mountChildFibers(workInProgress, null, nextChildren, renderLanes);
|
|
|
workInProgress.child = child;
|
|
|
var node = child;
|
|
|
|
|
|
while (node) {
|
|
|
// Mark each child as hydrating. This is a fast path to know whether this
|
|
|
// tree is part of a hydrating tree. This is used to determine if a child
|
|
|
// node has fully mounted yet, and for scheduling event replaying.
|
|
|
// Conceptually this is similar to Placement in that a new subtree is
|
|
|
// inserted into the React tree here. It just happens to not need DOM
|
|
|
// mutations because it already exists.
|
|
|
node.flags = node.flags & ~Placement | Hydrating;
|
|
|
node = node.sibling;
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
|
// Root is not dehydrated. Either this is a client-only root, or it
|
|
|
// already hydrated.
|
|
|
resetHydrationState();
|
|
|
|
|
|
if (nextChildren === prevChildren) {
|
|
|
return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);
|
|
|
}
|
|
|
|
|
|
reconcileChildren(current, workInProgress, nextChildren, renderLanes);
|
|
|
}
|
|
|
|
|
|
return workInProgress.child;
|
|
|
}
|
|
|
|
|
|
function mountHostRootWithoutHydrating(current, workInProgress, nextChildren, renderLanes, recoverableError) {
|
|
|
// Revert to client rendering.
|
|
|
resetHydrationState();
|
|
|
queueHydrationError(recoverableError);
|
|
|
workInProgress.flags |= ForceClientRender;
|
|
|
reconcileChildren(current, workInProgress, nextChildren, renderLanes);
|
|
|
return workInProgress.child;
|
|
|
}
|
|
|
|
|
|
function updateHostComponent(current, workInProgress, renderLanes) {
|
|
|
pushHostContext(workInProgress);
|
|
|
|
|
|
if (current === null) {
|
|
|
tryToClaimNextHydratableInstance(workInProgress);
|
|
|
}
|
|
|
|
|
|
var type = workInProgress.type;
|
|
|
var nextProps = workInProgress.pendingProps;
|
|
|
var prevProps = current !== null ? current.memoizedProps : null;
|
|
|
var nextChildren = nextProps.children;
|
|
|
var isDirectTextChild = shouldSetTextContent(type, nextProps);
|
|
|
|
|
|
if (isDirectTextChild) {
|
|
|
// We special case a direct text child of a host node. This is a common
|
|
|
// case. We won't handle it as a reified child. We will instead handle
|
|
|
// this in the host environment that also has access to this prop. That
|
|
|
// avoids allocating another HostText fiber and traversing it.
|
|
|
nextChildren = null;
|
|
|
} else if (prevProps !== null && shouldSetTextContent(type, prevProps)) {
|
|
|
// If we're switching from a direct text child to a normal child, or to
|
|
|
// empty, we need to schedule the text content to be reset.
|
|
|
workInProgress.flags |= ContentReset;
|
|
|
}
|
|
|
|
|
|
markRef(current, workInProgress);
|
|
|
reconcileChildren(current, workInProgress, nextChildren, renderLanes);
|
|
|
return workInProgress.child;
|
|
|
}
|
|
|
|
|
|
function updateHostText(current, workInProgress) {
|
|
|
if (current === null) {
|
|
|
tryToClaimNextHydratableInstance(workInProgress);
|
|
|
} // Nothing to do here. This is terminal. We'll do the completion step
|
|
|
// immediately after.
|
|
|
|
|
|
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
function mountLazyComponent(_current, workInProgress, elementType, renderLanes) {
|
|
|
resetSuspendedCurrentOnMountInLegacyMode(_current, workInProgress);
|
|
|
var props = workInProgress.pendingProps;
|
|
|
var lazyComponent = elementType;
|
|
|
var payload = lazyComponent._payload;
|
|
|
var init = lazyComponent._init;
|
|
|
var Component = init(payload); // Store the unwrapped component in the type.
|
|
|
|
|
|
workInProgress.type = Component;
|
|
|
var resolvedTag = workInProgress.tag = resolveLazyComponentTag(Component);
|
|
|
var resolvedProps = resolveDefaultProps(Component, props);
|
|
|
var child;
|
|
|
|
|
|
switch (resolvedTag) {
|
|
|
case FunctionComponent:
|
|
|
{
|
|
|
{
|
|
|
validateFunctionComponentInDev(workInProgress, Component);
|
|
|
workInProgress.type = Component = resolveFunctionForHotReloading(Component);
|
|
|
}
|
|
|
|
|
|
child = updateFunctionComponent(null, workInProgress, Component, resolvedProps, renderLanes);
|
|
|
return child;
|
|
|
}
|
|
|
|
|
|
case ClassComponent:
|
|
|
{
|
|
|
{
|
|
|
workInProgress.type = Component = resolveClassForHotReloading(Component);
|
|
|
}
|
|
|
|
|
|
child = updateClassComponent(null, workInProgress, Component, resolvedProps, renderLanes);
|
|
|
return child;
|
|
|
}
|
|
|
|
|
|
case ForwardRef:
|
|
|
{
|
|
|
{
|
|
|
workInProgress.type = Component = resolveForwardRefForHotReloading(Component);
|
|
|
}
|
|
|
|
|
|
child = updateForwardRef(null, workInProgress, Component, resolvedProps, renderLanes);
|
|
|
return child;
|
|
|
}
|
|
|
|
|
|
case MemoComponent:
|
|
|
{
|
|
|
{
|
|
|
if (workInProgress.type !== workInProgress.elementType) {
|
|
|
var outerPropTypes = Component.propTypes;
|
|
|
|
|
|
if (outerPropTypes) {
|
|
|
checkPropTypes(outerPropTypes, resolvedProps, // Resolved for outer only
|
|
|
'prop', getComponentNameFromType(Component));
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
child = updateMemoComponent(null, workInProgress, Component, resolveDefaultProps(Component.type, resolvedProps), // The inner type can have defaults too
|
|
|
renderLanes);
|
|
|
return child;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var hint = '';
|
|
|
|
|
|
{
|
|
|
if (Component !== null && typeof Component === 'object' && Component.$$typeof === REACT_LAZY_TYPE) {
|
|
|
hint = ' Did you wrap a component in React.lazy() more than once?';
|
|
|
}
|
|
|
} // This message intentionally doesn't mention ForwardRef or MemoComponent
|
|
|
// because the fact that it's a separate type of work is an
|
|
|
// implementation detail.
|
|
|
|
|
|
|
|
|
throw new Error("Element type is invalid. Received a promise that resolves to: " + Component + ". " + ("Lazy element type must resolve to a class or function." + hint));
|
|
|
}
|
|
|
|
|
|
function mountIncompleteClassComponent(_current, workInProgress, Component, nextProps, renderLanes) {
|
|
|
resetSuspendedCurrentOnMountInLegacyMode(_current, workInProgress); // Promote the fiber to a class and try rendering again.
|
|
|
|
|
|
workInProgress.tag = ClassComponent; // The rest of this function is a fork of `updateClassComponent`
|
|
|
// Push context providers early to prevent context stack mismatches.
|
|
|
// During mounting we don't know the child context yet as the instance doesn't exist.
|
|
|
// We will invalidate the child context in finishClassComponent() right after rendering.
|
|
|
|
|
|
var hasContext;
|
|
|
|
|
|
if (isContextProvider(Component)) {
|
|
|
hasContext = true;
|
|
|
pushContextProvider(workInProgress);
|
|
|
} else {
|
|
|
hasContext = false;
|
|
|
}
|
|
|
|
|
|
prepareToReadContext(workInProgress, renderLanes);
|
|
|
constructClassInstance(workInProgress, Component, nextProps);
|
|
|
mountClassInstance(workInProgress, Component, nextProps, renderLanes);
|
|
|
return finishClassComponent(null, workInProgress, Component, true, hasContext, renderLanes);
|
|
|
}
|
|
|
|
|
|
function mountIndeterminateComponent(_current, workInProgress, Component, renderLanes) {
|
|
|
resetSuspendedCurrentOnMountInLegacyMode(_current, workInProgress);
|
|
|
var props = workInProgress.pendingProps;
|
|
|
var context;
|
|
|
|
|
|
{
|
|
|
var unmaskedContext = getUnmaskedContext(workInProgress, Component, false);
|
|
|
context = getMaskedContext(workInProgress, unmaskedContext);
|
|
|
}
|
|
|
|
|
|
prepareToReadContext(workInProgress, renderLanes);
|
|
|
var value;
|
|
|
var hasId;
|
|
|
|
|
|
{
|
|
|
markComponentRenderStarted(workInProgress);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
if (Component.prototype && typeof Component.prototype.render === 'function') {
|
|
|
var componentName = getComponentNameFromType(Component) || 'Unknown';
|
|
|
|
|
|
if (!didWarnAboutBadClass[componentName]) {
|
|
|
error("The <%s /> component appears to have a render method, but doesn't extend React.Component. " + 'This is likely to cause errors. Change %s to extend React.Component instead.', componentName, componentName);
|
|
|
|
|
|
didWarnAboutBadClass[componentName] = true;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (workInProgress.mode & StrictLegacyMode) {
|
|
|
ReactStrictModeWarnings.recordLegacyContextWarning(workInProgress, null);
|
|
|
}
|
|
|
|
|
|
setIsRendering(true);
|
|
|
ReactCurrentOwner$1.current = workInProgress;
|
|
|
value = renderWithHooks(null, workInProgress, Component, props, context, renderLanes);
|
|
|
hasId = checkDidRenderIdHook();
|
|
|
setIsRendering(false);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
markComponentRenderStopped();
|
|
|
} // React DevTools reads this flag.
|
|
|
|
|
|
|
|
|
workInProgress.flags |= PerformedWork;
|
|
|
|
|
|
{
|
|
|
// Support for module components is deprecated and is removed behind a flag.
|
|
|
// Whether or not it would crash later, we want to show a good message in DEV first.
|
|
|
if (typeof value === 'object' && value !== null && typeof value.render === 'function' && value.$$typeof === undefined) {
|
|
|
var _componentName = getComponentNameFromType(Component) || 'Unknown';
|
|
|
|
|
|
if (!didWarnAboutModulePatternComponent[_componentName]) {
|
|
|
error('The <%s /> component appears to be a function component that returns a class instance. ' + 'Change %s to a class that extends React.Component instead. ' + "If you can't use a class try assigning the prototype on the function as a workaround. " + "`%s.prototype = React.Component.prototype`. Don't use an arrow function since it " + 'cannot be called with `new` by React.', _componentName, _componentName, _componentName);
|
|
|
|
|
|
didWarnAboutModulePatternComponent[_componentName] = true;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if ( // Run these checks in production only if the flag is off.
|
|
|
// Eventually we'll delete this branch altogether.
|
|
|
typeof value === 'object' && value !== null && typeof value.render === 'function' && value.$$typeof === undefined) {
|
|
|
{
|
|
|
var _componentName2 = getComponentNameFromType(Component) || 'Unknown';
|
|
|
|
|
|
if (!didWarnAboutModulePatternComponent[_componentName2]) {
|
|
|
error('The <%s /> component appears to be a function component that returns a class instance. ' + 'Change %s to a class that extends React.Component instead. ' + "If you can't use a class try assigning the prototype on the function as a workaround. " + "`%s.prototype = React.Component.prototype`. Don't use an arrow function since it " + 'cannot be called with `new` by React.', _componentName2, _componentName2, _componentName2);
|
|
|
|
|
|
didWarnAboutModulePatternComponent[_componentName2] = true;
|
|
|
}
|
|
|
} // Proceed under the assumption that this is a class instance
|
|
|
|
|
|
|
|
|
workInProgress.tag = ClassComponent; // Throw out any hooks that were used.
|
|
|
|
|
|
workInProgress.memoizedState = null;
|
|
|
workInProgress.updateQueue = null; // Push context providers early to prevent context stack mismatches.
|
|
|
// During mounting we don't know the child context yet as the instance doesn't exist.
|
|
|
// We will invalidate the child context in finishClassComponent() right after rendering.
|
|
|
|
|
|
var hasContext = false;
|
|
|
|
|
|
if (isContextProvider(Component)) {
|
|
|
hasContext = true;
|
|
|
pushContextProvider(workInProgress);
|
|
|
} else {
|
|
|
hasContext = false;
|
|
|
}
|
|
|
|
|
|
workInProgress.memoizedState = value.state !== null && value.state !== undefined ? value.state : null;
|
|
|
initializeUpdateQueue(workInProgress);
|
|
|
adoptClassInstance(workInProgress, value);
|
|
|
mountClassInstance(workInProgress, Component, props, renderLanes);
|
|
|
return finishClassComponent(null, workInProgress, Component, true, hasContext, renderLanes);
|
|
|
} else {
|
|
|
// Proceed under the assumption that this is a function component
|
|
|
workInProgress.tag = FunctionComponent;
|
|
|
|
|
|
{
|
|
|
|
|
|
if ( workInProgress.mode & StrictLegacyMode) {
|
|
|
setIsStrictModeForDevtools(true);
|
|
|
|
|
|
try {
|
|
|
value = renderWithHooks(null, workInProgress, Component, props, context, renderLanes);
|
|
|
hasId = checkDidRenderIdHook();
|
|
|
} finally {
|
|
|
setIsStrictModeForDevtools(false);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (getIsHydrating() && hasId) {
|
|
|
pushMaterializedTreeId(workInProgress);
|
|
|
}
|
|
|
|
|
|
reconcileChildren(null, workInProgress, value, renderLanes);
|
|
|
|
|
|
{
|
|
|
validateFunctionComponentInDev(workInProgress, Component);
|
|
|
}
|
|
|
|
|
|
return workInProgress.child;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function validateFunctionComponentInDev(workInProgress, Component) {
|
|
|
{
|
|
|
if (Component) {
|
|
|
if (Component.childContextTypes) {
|
|
|
error('%s(...): childContextTypes cannot be defined on a function component.', Component.displayName || Component.name || 'Component');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (workInProgress.ref !== null) {
|
|
|
var info = '';
|
|
|
var ownerName = getCurrentFiberOwnerNameInDevOrNull();
|
|
|
|
|
|
if (ownerName) {
|
|
|
info += '\n\nCheck the render method of `' + ownerName + '`.';
|
|
|
}
|
|
|
|
|
|
var warningKey = ownerName || '';
|
|
|
var debugSource = workInProgress._debugSource;
|
|
|
|
|
|
if (debugSource) {
|
|
|
warningKey = debugSource.fileName + ':' + debugSource.lineNumber;
|
|
|
}
|
|
|
|
|
|
if (!didWarnAboutFunctionRefs[warningKey]) {
|
|
|
didWarnAboutFunctionRefs[warningKey] = true;
|
|
|
|
|
|
error('Function components cannot be given refs. ' + 'Attempts to access this ref will fail. ' + 'Did you mean to use React.forwardRef()?%s', info);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (typeof Component.getDerivedStateFromProps === 'function') {
|
|
|
var _componentName3 = getComponentNameFromType(Component) || 'Unknown';
|
|
|
|
|
|
if (!didWarnAboutGetDerivedStateOnFunctionComponent[_componentName3]) {
|
|
|
error('%s: Function components do not support getDerivedStateFromProps.', _componentName3);
|
|
|
|
|
|
didWarnAboutGetDerivedStateOnFunctionComponent[_componentName3] = true;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (typeof Component.contextType === 'object' && Component.contextType !== null) {
|
|
|
var _componentName4 = getComponentNameFromType(Component) || 'Unknown';
|
|
|
|
|
|
if (!didWarnAboutContextTypeOnFunctionComponent[_componentName4]) {
|
|
|
error('%s: Function components do not support contextType.', _componentName4);
|
|
|
|
|
|
didWarnAboutContextTypeOnFunctionComponent[_componentName4] = true;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var SUSPENDED_MARKER = {
|
|
|
dehydrated: null,
|
|
|
treeContext: null,
|
|
|
retryLane: NoLane
|
|
|
};
|
|
|
|
|
|
function mountSuspenseOffscreenState(renderLanes) {
|
|
|
return {
|
|
|
baseLanes: renderLanes,
|
|
|
cachePool: getSuspendedCache(),
|
|
|
transitions: null
|
|
|
};
|
|
|
}
|
|
|
|
|
|
function updateSuspenseOffscreenState(prevOffscreenState, renderLanes) {
|
|
|
var cachePool = null;
|
|
|
|
|
|
return {
|
|
|
baseLanes: mergeLanes(prevOffscreenState.baseLanes, renderLanes),
|
|
|
cachePool: cachePool,
|
|
|
transitions: prevOffscreenState.transitions
|
|
|
};
|
|
|
} // TODO: Probably should inline this back
|
|
|
|
|
|
|
|
|
function shouldRemainOnFallback(suspenseContext, current, workInProgress, renderLanes) {
|
|
|
// If we're already showing a fallback, there are cases where we need to
|
|
|
// remain on that fallback regardless of whether the content has resolved.
|
|
|
// For example, SuspenseList coordinates when nested content appears.
|
|
|
if (current !== null) {
|
|
|
var suspenseState = current.memoizedState;
|
|
|
|
|
|
if (suspenseState === null) {
|
|
|
// Currently showing content. Don't hide it, even if ForceSuspenseFallback
|
|
|
// is true. More precise name might be "ForceRemainSuspenseFallback".
|
|
|
// Note: This is a factoring smell. Can't remain on a fallback if there's
|
|
|
// no fallback to remain on.
|
|
|
return false;
|
|
|
}
|
|
|
} // Not currently showing content. Consult the Suspense context.
|
|
|
|
|
|
|
|
|
return hasSuspenseContext(suspenseContext, ForceSuspenseFallback);
|
|
|
}
|
|
|
|
|
|
function getRemainingWorkInPrimaryTree(current, renderLanes) {
|
|
|
// TODO: Should not remove render lanes that were pinged during this render
|
|
|
return removeLanes(current.childLanes, renderLanes);
|
|
|
}
|
|
|
|
|
|
function updateSuspenseComponent(current, workInProgress, renderLanes) {
|
|
|
var nextProps = workInProgress.pendingProps; // This is used by DevTools to force a boundary to suspend.
|
|
|
|
|
|
{
|
|
|
if (shouldSuspend(workInProgress)) {
|
|
|
workInProgress.flags |= DidCapture;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var suspenseContext = suspenseStackCursor.current;
|
|
|
var showFallback = false;
|
|
|
var didSuspend = (workInProgress.flags & DidCapture) !== NoFlags;
|
|
|
|
|
|
if (didSuspend || shouldRemainOnFallback(suspenseContext, current)) {
|
|
|
// Something in this boundary's subtree already suspended. Switch to
|
|
|
// rendering the fallback children.
|
|
|
showFallback = true;
|
|
|
workInProgress.flags &= ~DidCapture;
|
|
|
} else {
|
|
|
// Attempting the main content
|
|
|
if (current === null || current.memoizedState !== null) {
|
|
|
// This is a new mount or this boundary is already showing a fallback state.
|
|
|
// Mark this subtree context as having at least one invisible parent that could
|
|
|
// handle the fallback state.
|
|
|
// Avoided boundaries are not considered since they cannot handle preferred fallback states.
|
|
|
{
|
|
|
suspenseContext = addSubtreeSuspenseContext(suspenseContext, InvisibleParentSuspenseContext);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
suspenseContext = setDefaultShallowSuspenseContext(suspenseContext);
|
|
|
pushSuspenseContext(workInProgress, suspenseContext); // OK, the next part is confusing. We're about to reconcile the Suspense
|
|
|
// boundary's children. This involves some custom reconciliation logic. Two
|
|
|
// main reasons this is so complicated.
|
|
|
//
|
|
|
// First, Legacy Mode has different semantics for backwards compatibility. The
|
|
|
// primary tree will commit in an inconsistent state, so when we do the
|
|
|
// second pass to render the fallback, we do some exceedingly, uh, clever
|
|
|
// hacks to make that not totally break. Like transferring effects and
|
|
|
// deletions from hidden tree. In Concurrent Mode, it's much simpler,
|
|
|
// because we bailout on the primary tree completely and leave it in its old
|
|
|
// state, no effects. Same as what we do for Offscreen (except that
|
|
|
// Offscreen doesn't have the first render pass).
|
|
|
//
|
|
|
// Second is hydration. During hydration, the Suspense fiber has a slightly
|
|
|
// different layout, where the child points to a dehydrated fragment, which
|
|
|
// contains the DOM rendered by the server.
|
|
|
//
|
|
|
// Third, even if you set all that aside, Suspense is like error boundaries in
|
|
|
// that we first we try to render one tree, and if that fails, we render again
|
|
|
// and switch to a different tree. Like a try/catch block. So we have to track
|
|
|
// which branch we're currently rendering. Ideally we would model this using
|
|
|
// a stack.
|
|
|
|
|
|
if (current === null) {
|
|
|
// Initial mount
|
|
|
// Special path for hydration
|
|
|
// If we're currently hydrating, try to hydrate this boundary.
|
|
|
tryToClaimNextHydratableInstance(workInProgress); // This could've been a dehydrated suspense component.
|
|
|
|
|
|
var suspenseState = workInProgress.memoizedState;
|
|
|
|
|
|
if (suspenseState !== null) {
|
|
|
var dehydrated = suspenseState.dehydrated;
|
|
|
|
|
|
if (dehydrated !== null) {
|
|
|
return mountDehydratedSuspenseComponent(workInProgress, dehydrated);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var nextPrimaryChildren = nextProps.children;
|
|
|
var nextFallbackChildren = nextProps.fallback;
|
|
|
|
|
|
if (showFallback) {
|
|
|
var fallbackFragment = mountSuspenseFallbackChildren(workInProgress, nextPrimaryChildren, nextFallbackChildren, renderLanes);
|
|
|
var primaryChildFragment = workInProgress.child;
|
|
|
primaryChildFragment.memoizedState = mountSuspenseOffscreenState(renderLanes);
|
|
|
workInProgress.memoizedState = SUSPENDED_MARKER;
|
|
|
|
|
|
return fallbackFragment;
|
|
|
} else {
|
|
|
return mountSuspensePrimaryChildren(workInProgress, nextPrimaryChildren);
|
|
|
}
|
|
|
} else {
|
|
|
// This is an update.
|
|
|
// Special path for hydration
|
|
|
var prevState = current.memoizedState;
|
|
|
|
|
|
if (prevState !== null) {
|
|
|
var _dehydrated = prevState.dehydrated;
|
|
|
|
|
|
if (_dehydrated !== null) {
|
|
|
return updateDehydratedSuspenseComponent(current, workInProgress, didSuspend, nextProps, _dehydrated, prevState, renderLanes);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (showFallback) {
|
|
|
var _nextFallbackChildren = nextProps.fallback;
|
|
|
var _nextPrimaryChildren = nextProps.children;
|
|
|
var fallbackChildFragment = updateSuspenseFallbackChildren(current, workInProgress, _nextPrimaryChildren, _nextFallbackChildren, renderLanes);
|
|
|
var _primaryChildFragment2 = workInProgress.child;
|
|
|
var prevOffscreenState = current.child.memoizedState;
|
|
|
_primaryChildFragment2.memoizedState = prevOffscreenState === null ? mountSuspenseOffscreenState(renderLanes) : updateSuspenseOffscreenState(prevOffscreenState, renderLanes);
|
|
|
|
|
|
_primaryChildFragment2.childLanes = getRemainingWorkInPrimaryTree(current, renderLanes);
|
|
|
workInProgress.memoizedState = SUSPENDED_MARKER;
|
|
|
return fallbackChildFragment;
|
|
|
} else {
|
|
|
var _nextPrimaryChildren2 = nextProps.children;
|
|
|
|
|
|
var _primaryChildFragment3 = updateSuspensePrimaryChildren(current, workInProgress, _nextPrimaryChildren2, renderLanes);
|
|
|
|
|
|
workInProgress.memoizedState = null;
|
|
|
return _primaryChildFragment3;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function mountSuspensePrimaryChildren(workInProgress, primaryChildren, renderLanes) {
|
|
|
var mode = workInProgress.mode;
|
|
|
var primaryChildProps = {
|
|
|
mode: 'visible',
|
|
|
children: primaryChildren
|
|
|
};
|
|
|
var primaryChildFragment = mountWorkInProgressOffscreenFiber(primaryChildProps, mode);
|
|
|
primaryChildFragment.return = workInProgress;
|
|
|
workInProgress.child = primaryChildFragment;
|
|
|
return primaryChildFragment;
|
|
|
}
|
|
|
|
|
|
function mountSuspenseFallbackChildren(workInProgress, primaryChildren, fallbackChildren, renderLanes) {
|
|
|
var mode = workInProgress.mode;
|
|
|
var progressedPrimaryFragment = workInProgress.child;
|
|
|
var primaryChildProps = {
|
|
|
mode: 'hidden',
|
|
|
children: primaryChildren
|
|
|
};
|
|
|
var primaryChildFragment;
|
|
|
var fallbackChildFragment;
|
|
|
|
|
|
if ((mode & ConcurrentMode) === NoMode && progressedPrimaryFragment !== null) {
|
|
|
// In legacy mode, we commit the primary tree as if it successfully
|
|
|
// completed, even though it's in an inconsistent state.
|
|
|
primaryChildFragment = progressedPrimaryFragment;
|
|
|
primaryChildFragment.childLanes = NoLanes;
|
|
|
primaryChildFragment.pendingProps = primaryChildProps;
|
|
|
|
|
|
if ( workInProgress.mode & ProfileMode) {
|
|
|
// Reset the durations from the first pass so they aren't included in the
|
|
|
// final amounts. This seems counterintuitive, since we're intentionally
|
|
|
// not measuring part of the render phase, but this makes it match what we
|
|
|
// do in Concurrent Mode.
|
|
|
primaryChildFragment.actualDuration = 0;
|
|
|
primaryChildFragment.actualStartTime = -1;
|
|
|
primaryChildFragment.selfBaseDuration = 0;
|
|
|
primaryChildFragment.treeBaseDuration = 0;
|
|
|
}
|
|
|
|
|
|
fallbackChildFragment = createFiberFromFragment(fallbackChildren, mode, renderLanes, null);
|
|
|
} else {
|
|
|
primaryChildFragment = mountWorkInProgressOffscreenFiber(primaryChildProps, mode);
|
|
|
fallbackChildFragment = createFiberFromFragment(fallbackChildren, mode, renderLanes, null);
|
|
|
}
|
|
|
|
|
|
primaryChildFragment.return = workInProgress;
|
|
|
fallbackChildFragment.return = workInProgress;
|
|
|
primaryChildFragment.sibling = fallbackChildFragment;
|
|
|
workInProgress.child = primaryChildFragment;
|
|
|
return fallbackChildFragment;
|
|
|
}
|
|
|
|
|
|
function mountWorkInProgressOffscreenFiber(offscreenProps, mode, renderLanes) {
|
|
|
// The props argument to `createFiberFromOffscreen` is `any` typed, so we use
|
|
|
// this wrapper function to constrain it.
|
|
|
return createFiberFromOffscreen(offscreenProps, mode, NoLanes, null);
|
|
|
}
|
|
|
|
|
|
function updateWorkInProgressOffscreenFiber(current, offscreenProps) {
|
|
|
// The props argument to `createWorkInProgress` is `any` typed, so we use this
|
|
|
// wrapper function to constrain it.
|
|
|
return createWorkInProgress(current, offscreenProps);
|
|
|
}
|
|
|
|
|
|
function updateSuspensePrimaryChildren(current, workInProgress, primaryChildren, renderLanes) {
|
|
|
var currentPrimaryChildFragment = current.child;
|
|
|
var currentFallbackChildFragment = currentPrimaryChildFragment.sibling;
|
|
|
var primaryChildFragment = updateWorkInProgressOffscreenFiber(currentPrimaryChildFragment, {
|
|
|
mode: 'visible',
|
|
|
children: primaryChildren
|
|
|
});
|
|
|
|
|
|
if ((workInProgress.mode & ConcurrentMode) === NoMode) {
|
|
|
primaryChildFragment.lanes = renderLanes;
|
|
|
}
|
|
|
|
|
|
primaryChildFragment.return = workInProgress;
|
|
|
primaryChildFragment.sibling = null;
|
|
|
|
|
|
if (currentFallbackChildFragment !== null) {
|
|
|
// Delete the fallback child fragment
|
|
|
var deletions = workInProgress.deletions;
|
|
|
|
|
|
if (deletions === null) {
|
|
|
workInProgress.deletions = [currentFallbackChildFragment];
|
|
|
workInProgress.flags |= ChildDeletion;
|
|
|
} else {
|
|
|
deletions.push(currentFallbackChildFragment);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
workInProgress.child = primaryChildFragment;
|
|
|
return primaryChildFragment;
|
|
|
}
|
|
|
|
|
|
function updateSuspenseFallbackChildren(current, workInProgress, primaryChildren, fallbackChildren, renderLanes) {
|
|
|
var mode = workInProgress.mode;
|
|
|
var currentPrimaryChildFragment = current.child;
|
|
|
var currentFallbackChildFragment = currentPrimaryChildFragment.sibling;
|
|
|
var primaryChildProps = {
|
|
|
mode: 'hidden',
|
|
|
children: primaryChildren
|
|
|
};
|
|
|
var primaryChildFragment;
|
|
|
|
|
|
if ( // In legacy mode, we commit the primary tree as if it successfully
|
|
|
// completed, even though it's in an inconsistent state.
|
|
|
(mode & ConcurrentMode) === NoMode && // Make sure we're on the second pass, i.e. the primary child fragment was
|
|
|
// already cloned. In legacy mode, the only case where this isn't true is
|
|
|
// when DevTools forces us to display a fallback; we skip the first render
|
|
|
// pass entirely and go straight to rendering the fallback. (In Concurrent
|
|
|
// Mode, SuspenseList can also trigger this scenario, but this is a legacy-
|
|
|
// only codepath.)
|
|
|
workInProgress.child !== currentPrimaryChildFragment) {
|
|
|
var progressedPrimaryFragment = workInProgress.child;
|
|
|
primaryChildFragment = progressedPrimaryFragment;
|
|
|
primaryChildFragment.childLanes = NoLanes;
|
|
|
primaryChildFragment.pendingProps = primaryChildProps;
|
|
|
|
|
|
if ( workInProgress.mode & ProfileMode) {
|
|
|
// Reset the durations from the first pass so they aren't included in the
|
|
|
// final amounts. This seems counterintuitive, since we're intentionally
|
|
|
// not measuring part of the render phase, but this makes it match what we
|
|
|
// do in Concurrent Mode.
|
|
|
primaryChildFragment.actualDuration = 0;
|
|
|
primaryChildFragment.actualStartTime = -1;
|
|
|
primaryChildFragment.selfBaseDuration = currentPrimaryChildFragment.selfBaseDuration;
|
|
|
primaryChildFragment.treeBaseDuration = currentPrimaryChildFragment.treeBaseDuration;
|
|
|
} // The fallback fiber was added as a deletion during the first pass.
|
|
|
// However, since we're going to remain on the fallback, we no longer want
|
|
|
// to delete it.
|
|
|
|
|
|
|
|
|
workInProgress.deletions = null;
|
|
|
} else {
|
|
|
primaryChildFragment = updateWorkInProgressOffscreenFiber(currentPrimaryChildFragment, primaryChildProps); // Since we're reusing a current tree, we need to reuse the flags, too.
|
|
|
// (We don't do this in legacy mode, because in legacy mode we don't re-use
|
|
|
// the current tree; see previous branch.)
|
|
|
|
|
|
primaryChildFragment.subtreeFlags = currentPrimaryChildFragment.subtreeFlags & StaticMask;
|
|
|
}
|
|
|
|
|
|
var fallbackChildFragment;
|
|
|
|
|
|
if (currentFallbackChildFragment !== null) {
|
|
|
fallbackChildFragment = createWorkInProgress(currentFallbackChildFragment, fallbackChildren);
|
|
|
} else {
|
|
|
fallbackChildFragment = createFiberFromFragment(fallbackChildren, mode, renderLanes, null); // Needs a placement effect because the parent (the Suspense boundary) already
|
|
|
// mounted but this is a new fiber.
|
|
|
|
|
|
fallbackChildFragment.flags |= Placement;
|
|
|
}
|
|
|
|
|
|
fallbackChildFragment.return = workInProgress;
|
|
|
primaryChildFragment.return = workInProgress;
|
|
|
primaryChildFragment.sibling = fallbackChildFragment;
|
|
|
workInProgress.child = primaryChildFragment;
|
|
|
return fallbackChildFragment;
|
|
|
}
|
|
|
|
|
|
function retrySuspenseComponentWithoutHydrating(current, workInProgress, renderLanes, recoverableError) {
|
|
|
// Falling back to client rendering. Because this has performance
|
|
|
// implications, it's considered a recoverable error, even though the user
|
|
|
// likely won't observe anything wrong with the UI.
|
|
|
//
|
|
|
// The error is passed in as an argument to enforce that every caller provide
|
|
|
// a custom message, or explicitly opt out (currently the only path that opts
|
|
|
// out is legacy mode; every concurrent path provides an error).
|
|
|
if (recoverableError !== null) {
|
|
|
queueHydrationError(recoverableError);
|
|
|
} // This will add the old fiber to the deletion list
|
|
|
|
|
|
|
|
|
reconcileChildFibers(workInProgress, current.child, null, renderLanes); // We're now not suspended nor dehydrated.
|
|
|
|
|
|
var nextProps = workInProgress.pendingProps;
|
|
|
var primaryChildren = nextProps.children;
|
|
|
var primaryChildFragment = mountSuspensePrimaryChildren(workInProgress, primaryChildren); // Needs a placement effect because the parent (the Suspense boundary) already
|
|
|
// mounted but this is a new fiber.
|
|
|
|
|
|
primaryChildFragment.flags |= Placement;
|
|
|
workInProgress.memoizedState = null;
|
|
|
return primaryChildFragment;
|
|
|
}
|
|
|
|
|
|
function mountSuspenseFallbackAfterRetryWithoutHydrating(current, workInProgress, primaryChildren, fallbackChildren, renderLanes) {
|
|
|
var fiberMode = workInProgress.mode;
|
|
|
var primaryChildProps = {
|
|
|
mode: 'visible',
|
|
|
children: primaryChildren
|
|
|
};
|
|
|
var primaryChildFragment = mountWorkInProgressOffscreenFiber(primaryChildProps, fiberMode);
|
|
|
var fallbackChildFragment = createFiberFromFragment(fallbackChildren, fiberMode, renderLanes, null); // Needs a placement effect because the parent (the Suspense
|
|
|
// boundary) already mounted but this is a new fiber.
|
|
|
|
|
|
fallbackChildFragment.flags |= Placement;
|
|
|
primaryChildFragment.return = workInProgress;
|
|
|
fallbackChildFragment.return = workInProgress;
|
|
|
primaryChildFragment.sibling = fallbackChildFragment;
|
|
|
workInProgress.child = primaryChildFragment;
|
|
|
|
|
|
if ((workInProgress.mode & ConcurrentMode) !== NoMode) {
|
|
|
// We will have dropped the effect list which contains the
|
|
|
// deletion. We need to reconcile to delete the current child.
|
|
|
reconcileChildFibers(workInProgress, current.child, null, renderLanes);
|
|
|
}
|
|
|
|
|
|
return fallbackChildFragment;
|
|
|
}
|
|
|
|
|
|
function mountDehydratedSuspenseComponent(workInProgress, suspenseInstance, renderLanes) {
|
|
|
// During the first pass, we'll bail out and not drill into the children.
|
|
|
// Instead, we'll leave the content in place and try to hydrate it later.
|
|
|
if ((workInProgress.mode & ConcurrentMode) === NoMode) {
|
|
|
{
|
|
|
error('Cannot hydrate Suspense in legacy mode. Switch from ' + 'ReactDOM.hydrate(element, container) to ' + 'ReactDOMClient.hydrateRoot(container, <App />)' + '.render(element) or remove the Suspense components from ' + 'the server rendered components.');
|
|
|
}
|
|
|
|
|
|
workInProgress.lanes = laneToLanes(SyncLane);
|
|
|
} else if (isSuspenseInstanceFallback(suspenseInstance)) {
|
|
|
// This is a client-only boundary. Since we won't get any content from the server
|
|
|
// for this, we need to schedule that at a higher priority based on when it would
|
|
|
// have timed out. In theory we could render it in this pass but it would have the
|
|
|
// wrong priority associated with it and will prevent hydration of parent path.
|
|
|
// Instead, we'll leave work left on it to render it in a separate commit.
|
|
|
// TODO This time should be the time at which the server rendered response that is
|
|
|
// a parent to this boundary was displayed. However, since we currently don't have
|
|
|
// a protocol to transfer that time, we'll just estimate it by using the current
|
|
|
// time. This will mean that Suspense timeouts are slightly shifted to later than
|
|
|
// they should be.
|
|
|
// Schedule a normal pri update to render this content.
|
|
|
workInProgress.lanes = laneToLanes(DefaultHydrationLane);
|
|
|
} else {
|
|
|
// We'll continue hydrating the rest at offscreen priority since we'll already
|
|
|
// be showing the right content coming from the server, it is no rush.
|
|
|
workInProgress.lanes = laneToLanes(OffscreenLane);
|
|
|
}
|
|
|
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
function updateDehydratedSuspenseComponent(current, workInProgress, didSuspend, nextProps, suspenseInstance, suspenseState, renderLanes) {
|
|
|
if (!didSuspend) {
|
|
|
// This is the first render pass. Attempt to hydrate.
|
|
|
// We should never be hydrating at this point because it is the first pass,
|
|
|
// but after we've already committed once.
|
|
|
warnIfHydrating();
|
|
|
|
|
|
if ((workInProgress.mode & ConcurrentMode) === NoMode) {
|
|
|
return retrySuspenseComponentWithoutHydrating(current, workInProgress, renderLanes, // TODO: When we delete legacy mode, we should make this error argument
|
|
|
// required — every concurrent mode path that causes hydration to
|
|
|
// de-opt to client rendering should have an error message.
|
|
|
null);
|
|
|
}
|
|
|
|
|
|
if (isSuspenseInstanceFallback(suspenseInstance)) {
|
|
|
// This boundary is in a permanent fallback state. In this case, we'll never
|
|
|
// get an update and we'll never be able to hydrate the final content. Let's just try the
|
|
|
// client side render instead.
|
|
|
var digest, message, stack;
|
|
|
|
|
|
{
|
|
|
var _getSuspenseInstanceF = getSuspenseInstanceFallbackErrorDetails(suspenseInstance);
|
|
|
|
|
|
digest = _getSuspenseInstanceF.digest;
|
|
|
message = _getSuspenseInstanceF.message;
|
|
|
stack = _getSuspenseInstanceF.stack;
|
|
|
}
|
|
|
|
|
|
var error;
|
|
|
|
|
|
if (message) {
|
|
|
// eslint-disable-next-line react-internal/prod-error-codes
|
|
|
error = new Error(message);
|
|
|
} else {
|
|
|
error = new Error('The server could not finish this Suspense boundary, likely ' + 'due to an error during server rendering. Switched to ' + 'client rendering.');
|
|
|
}
|
|
|
|
|
|
var capturedValue = createCapturedValue(error, digest, stack);
|
|
|
return retrySuspenseComponentWithoutHydrating(current, workInProgress, renderLanes, capturedValue);
|
|
|
}
|
|
|
// any context has changed, we need to treat is as if the input might have changed.
|
|
|
|
|
|
|
|
|
var hasContextChanged = includesSomeLane(renderLanes, current.childLanes);
|
|
|
|
|
|
if (didReceiveUpdate || hasContextChanged) {
|
|
|
// This boundary has changed since the first render. This means that we are now unable to
|
|
|
// hydrate it. We might still be able to hydrate it using a higher priority lane.
|
|
|
var root = getWorkInProgressRoot();
|
|
|
|
|
|
if (root !== null) {
|
|
|
var attemptHydrationAtLane = getBumpedLaneForHydration(root, renderLanes);
|
|
|
|
|
|
if (attemptHydrationAtLane !== NoLane && attemptHydrationAtLane !== suspenseState.retryLane) {
|
|
|
// Intentionally mutating since this render will get interrupted. This
|
|
|
// is one of the very rare times where we mutate the current tree
|
|
|
// during the render phase.
|
|
|
suspenseState.retryLane = attemptHydrationAtLane; // TODO: Ideally this would inherit the event time of the current render
|
|
|
|
|
|
var eventTime = NoTimestamp;
|
|
|
enqueueConcurrentRenderForLane(current, attemptHydrationAtLane);
|
|
|
scheduleUpdateOnFiber(root, current, attemptHydrationAtLane, eventTime);
|
|
|
}
|
|
|
} // If we have scheduled higher pri work above, this will probably just abort the render
|
|
|
// since we now have higher priority work, but in case it doesn't, we need to prepare to
|
|
|
// render something, if we time out. Even if that requires us to delete everything and
|
|
|
// skip hydration.
|
|
|
// Delay having to do this as long as the suspense timeout allows us.
|
|
|
|
|
|
|
|
|
renderDidSuspendDelayIfPossible();
|
|
|
|
|
|
var _capturedValue = createCapturedValue(new Error('This Suspense boundary received an update before it finished ' + 'hydrating. This caused the boundary to switch to client rendering. ' + 'The usual way to fix this is to wrap the original update ' + 'in startTransition.'));
|
|
|
|
|
|
return retrySuspenseComponentWithoutHydrating(current, workInProgress, renderLanes, _capturedValue);
|
|
|
} else if (isSuspenseInstancePending(suspenseInstance)) {
|
|
|
// This component is still pending more data from the server, so we can't hydrate its
|
|
|
// content. We treat it as if this component suspended itself. It might seem as if
|
|
|
// we could just try to render it client-side instead. However, this will perform a
|
|
|
// lot of unnecessary work and is unlikely to complete since it often will suspend
|
|
|
// on missing data anyway. Additionally, the server might be able to render more
|
|
|
// than we can on the client yet. In that case we'd end up with more fallback states
|
|
|
// on the client than if we just leave it alone. If the server times out or errors
|
|
|
// these should update this boundary to the permanent Fallback state instead.
|
|
|
// Mark it as having captured (i.e. suspended).
|
|
|
workInProgress.flags |= DidCapture; // Leave the child in place. I.e. the dehydrated fragment.
|
|
|
|
|
|
workInProgress.child = current.child; // Register a callback to retry this boundary once the server has sent the result.
|
|
|
|
|
|
var retry = retryDehydratedSuspenseBoundary.bind(null, current);
|
|
|
registerSuspenseInstanceRetry(suspenseInstance, retry);
|
|
|
return null;
|
|
|
} else {
|
|
|
// This is the first attempt.
|
|
|
reenterHydrationStateFromDehydratedSuspenseInstance(workInProgress, suspenseInstance, suspenseState.treeContext);
|
|
|
var primaryChildren = nextProps.children;
|
|
|
var primaryChildFragment = mountSuspensePrimaryChildren(workInProgress, primaryChildren); // Mark the children as hydrating. This is a fast path to know whether this
|
|
|
// tree is part of a hydrating tree. This is used to determine if a child
|
|
|
// node has fully mounted yet, and for scheduling event replaying.
|
|
|
// Conceptually this is similar to Placement in that a new subtree is
|
|
|
// inserted into the React tree here. It just happens to not need DOM
|
|
|
// mutations because it already exists.
|
|
|
|
|
|
primaryChildFragment.flags |= Hydrating;
|
|
|
return primaryChildFragment;
|
|
|
}
|
|
|
} else {
|
|
|
// This is the second render pass. We already attempted to hydrated, but
|
|
|
// something either suspended or errored.
|
|
|
if (workInProgress.flags & ForceClientRender) {
|
|
|
// Something errored during hydration. Try again without hydrating.
|
|
|
workInProgress.flags &= ~ForceClientRender;
|
|
|
|
|
|
var _capturedValue2 = createCapturedValue(new Error('There was an error while hydrating this Suspense boundary. ' + 'Switched to client rendering.'));
|
|
|
|
|
|
return retrySuspenseComponentWithoutHydrating(current, workInProgress, renderLanes, _capturedValue2);
|
|
|
} else if (workInProgress.memoizedState !== null) {
|
|
|
// Something suspended and we should still be in dehydrated mode.
|
|
|
// Leave the existing child in place.
|
|
|
workInProgress.child = current.child; // The dehydrated completion pass expects this flag to be there
|
|
|
// but the normal suspense pass doesn't.
|
|
|
|
|
|
workInProgress.flags |= DidCapture;
|
|
|
return null;
|
|
|
} else {
|
|
|
// Suspended but we should no longer be in dehydrated mode.
|
|
|
// Therefore we now have to render the fallback.
|
|
|
var nextPrimaryChildren = nextProps.children;
|
|
|
var nextFallbackChildren = nextProps.fallback;
|
|
|
var fallbackChildFragment = mountSuspenseFallbackAfterRetryWithoutHydrating(current, workInProgress, nextPrimaryChildren, nextFallbackChildren, renderLanes);
|
|
|
var _primaryChildFragment4 = workInProgress.child;
|
|
|
_primaryChildFragment4.memoizedState = mountSuspenseOffscreenState(renderLanes);
|
|
|
workInProgress.memoizedState = SUSPENDED_MARKER;
|
|
|
return fallbackChildFragment;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function scheduleSuspenseWorkOnFiber(fiber, renderLanes, propagationRoot) {
|
|
|
fiber.lanes = mergeLanes(fiber.lanes, renderLanes);
|
|
|
var alternate = fiber.alternate;
|
|
|
|
|
|
if (alternate !== null) {
|
|
|
alternate.lanes = mergeLanes(alternate.lanes, renderLanes);
|
|
|
}
|
|
|
|
|
|
scheduleContextWorkOnParentPath(fiber.return, renderLanes, propagationRoot);
|
|
|
}
|
|
|
|
|
|
function propagateSuspenseContextChange(workInProgress, firstChild, renderLanes) {
|
|
|
// Mark any Suspense boundaries with fallbacks as having work to do.
|
|
|
// If they were previously forced into fallbacks, they may now be able
|
|
|
// to unblock.
|
|
|
var node = firstChild;
|
|
|
|
|
|
while (node !== null) {
|
|
|
if (node.tag === SuspenseComponent) {
|
|
|
var state = node.memoizedState;
|
|
|
|
|
|
if (state !== null) {
|
|
|
scheduleSuspenseWorkOnFiber(node, renderLanes, workInProgress);
|
|
|
}
|
|
|
} else if (node.tag === SuspenseListComponent) {
|
|
|
// If the tail is hidden there might not be an Suspense boundaries
|
|
|
// to schedule work on. In this case we have to schedule it on the
|
|
|
// list itself.
|
|
|
// We don't have to traverse to the children of the list since
|
|
|
// the list will propagate the change when it rerenders.
|
|
|
scheduleSuspenseWorkOnFiber(node, renderLanes, workInProgress);
|
|
|
} else if (node.child !== null) {
|
|
|
node.child.return = node;
|
|
|
node = node.child;
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
if (node === workInProgress) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
while (node.sibling === null) {
|
|
|
if (node.return === null || node.return === workInProgress) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
node = node.return;
|
|
|
}
|
|
|
|
|
|
node.sibling.return = node.return;
|
|
|
node = node.sibling;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function findLastContentRow(firstChild) {
|
|
|
// This is going to find the last row among these children that is already
|
|
|
// showing content on the screen, as opposed to being in fallback state or
|
|
|
// new. If a row has multiple Suspense boundaries, any of them being in the
|
|
|
// fallback state, counts as the whole row being in a fallback state.
|
|
|
// Note that the "rows" will be workInProgress, but any nested children
|
|
|
// will still be current since we haven't rendered them yet. The mounted
|
|
|
// order may not be the same as the new order. We use the new order.
|
|
|
var row = firstChild;
|
|
|
var lastContentRow = null;
|
|
|
|
|
|
while (row !== null) {
|
|
|
var currentRow = row.alternate; // New rows can't be content rows.
|
|
|
|
|
|
if (currentRow !== null && findFirstSuspended(currentRow) === null) {
|
|
|
lastContentRow = row;
|
|
|
}
|
|
|
|
|
|
row = row.sibling;
|
|
|
}
|
|
|
|
|
|
return lastContentRow;
|
|
|
}
|
|
|
|
|
|
function validateRevealOrder(revealOrder) {
|
|
|
{
|
|
|
if (revealOrder !== undefined && revealOrder !== 'forwards' && revealOrder !== 'backwards' && revealOrder !== 'together' && !didWarnAboutRevealOrder[revealOrder]) {
|
|
|
didWarnAboutRevealOrder[revealOrder] = true;
|
|
|
|
|
|
if (typeof revealOrder === 'string') {
|
|
|
switch (revealOrder.toLowerCase()) {
|
|
|
case 'together':
|
|
|
case 'forwards':
|
|
|
case 'backwards':
|
|
|
{
|
|
|
error('"%s" is not a valid value for revealOrder on <SuspenseList />. ' + 'Use lowercase "%s" instead.', revealOrder, revealOrder.toLowerCase());
|
|
|
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
case 'forward':
|
|
|
case 'backward':
|
|
|
{
|
|
|
error('"%s" is not a valid value for revealOrder on <SuspenseList />. ' + 'React uses the -s suffix in the spelling. Use "%ss" instead.', revealOrder, revealOrder.toLowerCase());
|
|
|
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
default:
|
|
|
error('"%s" is not a supported revealOrder on <SuspenseList />. ' + 'Did you mean "together", "forwards" or "backwards"?', revealOrder);
|
|
|
|
|
|
break;
|
|
|
}
|
|
|
} else {
|
|
|
error('%s is not a supported value for revealOrder on <SuspenseList />. ' + 'Did you mean "together", "forwards" or "backwards"?', revealOrder);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function validateTailOptions(tailMode, revealOrder) {
|
|
|
{
|
|
|
if (tailMode !== undefined && !didWarnAboutTailOptions[tailMode]) {
|
|
|
if (tailMode !== 'collapsed' && tailMode !== 'hidden') {
|
|
|
didWarnAboutTailOptions[tailMode] = true;
|
|
|
|
|
|
error('"%s" is not a supported value for tail on <SuspenseList />. ' + 'Did you mean "collapsed" or "hidden"?', tailMode);
|
|
|
} else if (revealOrder !== 'forwards' && revealOrder !== 'backwards') {
|
|
|
didWarnAboutTailOptions[tailMode] = true;
|
|
|
|
|
|
error('<SuspenseList tail="%s" /> is only valid if revealOrder is ' + '"forwards" or "backwards". ' + 'Did you mean to specify revealOrder="forwards"?', tailMode);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function validateSuspenseListNestedChild(childSlot, index) {
|
|
|
{
|
|
|
var isAnArray = isArray(childSlot);
|
|
|
var isIterable = !isAnArray && typeof getIteratorFn(childSlot) === 'function';
|
|
|
|
|
|
if (isAnArray || isIterable) {
|
|
|
var type = isAnArray ? 'array' : 'iterable';
|
|
|
|
|
|
error('A nested %s was passed to row #%s in <SuspenseList />. Wrap it in ' + 'an additional SuspenseList to configure its revealOrder: ' + '<SuspenseList revealOrder=...> ... ' + '<SuspenseList revealOrder=...>{%s}</SuspenseList> ... ' + '</SuspenseList>', type, index, type);
|
|
|
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
function validateSuspenseListChildren(children, revealOrder) {
|
|
|
{
|
|
|
if ((revealOrder === 'forwards' || revealOrder === 'backwards') && children !== undefined && children !== null && children !== false) {
|
|
|
if (isArray(children)) {
|
|
|
for (var i = 0; i < children.length; i++) {
|
|
|
if (!validateSuspenseListNestedChild(children[i], i)) {
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
|
var iteratorFn = getIteratorFn(children);
|
|
|
|
|
|
if (typeof iteratorFn === 'function') {
|
|
|
var childrenIterator = iteratorFn.call(children);
|
|
|
|
|
|
if (childrenIterator) {
|
|
|
var step = childrenIterator.next();
|
|
|
var _i = 0;
|
|
|
|
|
|
for (; !step.done; step = childrenIterator.next()) {
|
|
|
if (!validateSuspenseListNestedChild(step.value, _i)) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
_i++;
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
|
error('A single row was passed to a <SuspenseList revealOrder="%s" />. ' + 'This is not useful since it needs multiple rows. ' + 'Did you mean to pass multiple children or an array?', revealOrder);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function initSuspenseListRenderState(workInProgress, isBackwards, tail, lastContentRow, tailMode) {
|
|
|
var renderState = workInProgress.memoizedState;
|
|
|
|
|
|
if (renderState === null) {
|
|
|
workInProgress.memoizedState = {
|
|
|
isBackwards: isBackwards,
|
|
|
rendering: null,
|
|
|
renderingStartTime: 0,
|
|
|
last: lastContentRow,
|
|
|
tail: tail,
|
|
|
tailMode: tailMode
|
|
|
};
|
|
|
} else {
|
|
|
// We can reuse the existing object from previous renders.
|
|
|
renderState.isBackwards = isBackwards;
|
|
|
renderState.rendering = null;
|
|
|
renderState.renderingStartTime = 0;
|
|
|
renderState.last = lastContentRow;
|
|
|
renderState.tail = tail;
|
|
|
renderState.tailMode = tailMode;
|
|
|
}
|
|
|
} // This can end up rendering this component multiple passes.
|
|
|
// The first pass splits the children fibers into two sets. A head and tail.
|
|
|
// We first render the head. If anything is in fallback state, we do another
|
|
|
// pass through beginWork to rerender all children (including the tail) with
|
|
|
// the force suspend context. If the first render didn't have anything in
|
|
|
// in fallback state. Then we render each row in the tail one-by-one.
|
|
|
// That happens in the completeWork phase without going back to beginWork.
|
|
|
|
|
|
|
|
|
function updateSuspenseListComponent(current, workInProgress, renderLanes) {
|
|
|
var nextProps = workInProgress.pendingProps;
|
|
|
var revealOrder = nextProps.revealOrder;
|
|
|
var tailMode = nextProps.tail;
|
|
|
var newChildren = nextProps.children;
|
|
|
validateRevealOrder(revealOrder);
|
|
|
validateTailOptions(tailMode, revealOrder);
|
|
|
validateSuspenseListChildren(newChildren, revealOrder);
|
|
|
reconcileChildren(current, workInProgress, newChildren, renderLanes);
|
|
|
var suspenseContext = suspenseStackCursor.current;
|
|
|
var shouldForceFallback = hasSuspenseContext(suspenseContext, ForceSuspenseFallback);
|
|
|
|
|
|
if (shouldForceFallback) {
|
|
|
suspenseContext = setShallowSuspenseContext(suspenseContext, ForceSuspenseFallback);
|
|
|
workInProgress.flags |= DidCapture;
|
|
|
} else {
|
|
|
var didSuspendBefore = current !== null && (current.flags & DidCapture) !== NoFlags;
|
|
|
|
|
|
if (didSuspendBefore) {
|
|
|
// If we previously forced a fallback, we need to schedule work
|
|
|
// on any nested boundaries to let them know to try to render
|
|
|
// again. This is the same as context updating.
|
|
|
propagateSuspenseContextChange(workInProgress, workInProgress.child, renderLanes);
|
|
|
}
|
|
|
|
|
|
suspenseContext = setDefaultShallowSuspenseContext(suspenseContext);
|
|
|
}
|
|
|
|
|
|
pushSuspenseContext(workInProgress, suspenseContext);
|
|
|
|
|
|
if ((workInProgress.mode & ConcurrentMode) === NoMode) {
|
|
|
// In legacy mode, SuspenseList doesn't work so we just
|
|
|
// use make it a noop by treating it as the default revealOrder.
|
|
|
workInProgress.memoizedState = null;
|
|
|
} else {
|
|
|
switch (revealOrder) {
|
|
|
case 'forwards':
|
|
|
{
|
|
|
var lastContentRow = findLastContentRow(workInProgress.child);
|
|
|
var tail;
|
|
|
|
|
|
if (lastContentRow === null) {
|
|
|
// The whole list is part of the tail.
|
|
|
// TODO: We could fast path by just rendering the tail now.
|
|
|
tail = workInProgress.child;
|
|
|
workInProgress.child = null;
|
|
|
} else {
|
|
|
// Disconnect the tail rows after the content row.
|
|
|
// We're going to render them separately later.
|
|
|
tail = lastContentRow.sibling;
|
|
|
lastContentRow.sibling = null;
|
|
|
}
|
|
|
|
|
|
initSuspenseListRenderState(workInProgress, false, // isBackwards
|
|
|
tail, lastContentRow, tailMode);
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
case 'backwards':
|
|
|
{
|
|
|
// We're going to find the first row that has existing content.
|
|
|
// At the same time we're going to reverse the list of everything
|
|
|
// we pass in the meantime. That's going to be our tail in reverse
|
|
|
// order.
|
|
|
var _tail = null;
|
|
|
var row = workInProgress.child;
|
|
|
workInProgress.child = null;
|
|
|
|
|
|
while (row !== null) {
|
|
|
var currentRow = row.alternate; // New rows can't be content rows.
|
|
|
|
|
|
if (currentRow !== null && findFirstSuspended(currentRow) === null) {
|
|
|
// This is the beginning of the main content.
|
|
|
workInProgress.child = row;
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
var nextRow = row.sibling;
|
|
|
row.sibling = _tail;
|
|
|
_tail = row;
|
|
|
row = nextRow;
|
|
|
} // TODO: If workInProgress.child is null, we can continue on the tail immediately.
|
|
|
|
|
|
|
|
|
initSuspenseListRenderState(workInProgress, true, // isBackwards
|
|
|
_tail, null, // last
|
|
|
tailMode);
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
case 'together':
|
|
|
{
|
|
|
initSuspenseListRenderState(workInProgress, false, // isBackwards
|
|
|
null, // tail
|
|
|
null, // last
|
|
|
undefined);
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
default:
|
|
|
{
|
|
|
// The default reveal order is the same as not having
|
|
|
// a boundary.
|
|
|
workInProgress.memoizedState = null;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return workInProgress.child;
|
|
|
}
|
|
|
|
|
|
function updatePortalComponent(current, workInProgress, renderLanes) {
|
|
|
pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);
|
|
|
var nextChildren = workInProgress.pendingProps;
|
|
|
|
|
|
if (current === null) {
|
|
|
// Portals are special because we don't append the children during mount
|
|
|
// but at commit. Therefore we need to track insertions which the normal
|
|
|
// flow doesn't do during mount. This doesn't happen at the root because
|
|
|
// the root always starts with a "current" with a null child.
|
|
|
// TODO: Consider unifying this with how the root works.
|
|
|
workInProgress.child = reconcileChildFibers(workInProgress, null, nextChildren, renderLanes);
|
|
|
} else {
|
|
|
reconcileChildren(current, workInProgress, nextChildren, renderLanes);
|
|
|
}
|
|
|
|
|
|
return workInProgress.child;
|
|
|
}
|
|
|
|
|
|
var hasWarnedAboutUsingNoValuePropOnContextProvider = false;
|
|
|
|
|
|
function updateContextProvider(current, workInProgress, renderLanes) {
|
|
|
var providerType = workInProgress.type;
|
|
|
var context = providerType._context;
|
|
|
var newProps = workInProgress.pendingProps;
|
|
|
var oldProps = workInProgress.memoizedProps;
|
|
|
var newValue = newProps.value;
|
|
|
|
|
|
{
|
|
|
if (!('value' in newProps)) {
|
|
|
if (!hasWarnedAboutUsingNoValuePropOnContextProvider) {
|
|
|
hasWarnedAboutUsingNoValuePropOnContextProvider = true;
|
|
|
|
|
|
error('The `value` prop is required for the `<Context.Provider>`. Did you misspell it or forget to pass it?');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var providerPropTypes = workInProgress.type.propTypes;
|
|
|
|
|
|
if (providerPropTypes) {
|
|
|
checkPropTypes(providerPropTypes, newProps, 'prop', 'Context.Provider');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
pushProvider(workInProgress, context, newValue);
|
|
|
|
|
|
{
|
|
|
if (oldProps !== null) {
|
|
|
var oldValue = oldProps.value;
|
|
|
|
|
|
if (objectIs(oldValue, newValue)) {
|
|
|
// No change. Bailout early if children are the same.
|
|
|
if (oldProps.children === newProps.children && !hasContextChanged()) {
|
|
|
return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);
|
|
|
}
|
|
|
} else {
|
|
|
// The context value changed. Search for matching consumers and schedule
|
|
|
// them to update.
|
|
|
propagateContextChange(workInProgress, context, renderLanes);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var newChildren = newProps.children;
|
|
|
reconcileChildren(current, workInProgress, newChildren, renderLanes);
|
|
|
return workInProgress.child;
|
|
|
}
|
|
|
|
|
|
var hasWarnedAboutUsingContextAsConsumer = false;
|
|
|
|
|
|
function updateContextConsumer(current, workInProgress, renderLanes) {
|
|
|
var context = workInProgress.type; // The logic below for Context differs depending on PROD or DEV mode. In
|
|
|
// DEV mode, we create a separate object for Context.Consumer that acts
|
|
|
// like a proxy to Context. This proxy object adds unnecessary code in PROD
|
|
|
// so we use the old behaviour (Context.Consumer references Context) to
|
|
|
// reduce size and overhead. The separate object references context via
|
|
|
// a property called "_context", which also gives us the ability to check
|
|
|
// in DEV mode if this property exists or not and warn if it does not.
|
|
|
|
|
|
{
|
|
|
if (context._context === undefined) {
|
|
|
// This may be because it's a Context (rather than a Consumer).
|
|
|
// Or it may be because it's older React where they're the same thing.
|
|
|
// We only want to warn if we're sure it's a new React.
|
|
|
if (context !== context.Consumer) {
|
|
|
if (!hasWarnedAboutUsingContextAsConsumer) {
|
|
|
hasWarnedAboutUsingContextAsConsumer = true;
|
|
|
|
|
|
error('Rendering <Context> directly is not supported and will be removed in ' + 'a future major release. Did you mean to render <Context.Consumer> instead?');
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
|
context = context._context;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var newProps = workInProgress.pendingProps;
|
|
|
var render = newProps.children;
|
|
|
|
|
|
{
|
|
|
if (typeof render !== 'function') {
|
|
|
error('A context consumer was rendered with multiple children, or a child ' + "that isn't a function. A context consumer expects a single child " + 'that is a function. If you did pass a function, make sure there ' + 'is no trailing or leading whitespace around it.');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
prepareToReadContext(workInProgress, renderLanes);
|
|
|
var newValue = readContext(context);
|
|
|
|
|
|
{
|
|
|
markComponentRenderStarted(workInProgress);
|
|
|
}
|
|
|
|
|
|
var newChildren;
|
|
|
|
|
|
{
|
|
|
ReactCurrentOwner$1.current = workInProgress;
|
|
|
setIsRendering(true);
|
|
|
newChildren = render(newValue);
|
|
|
setIsRendering(false);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
markComponentRenderStopped();
|
|
|
} // React DevTools reads this flag.
|
|
|
|
|
|
|
|
|
workInProgress.flags |= PerformedWork;
|
|
|
reconcileChildren(current, workInProgress, newChildren, renderLanes);
|
|
|
return workInProgress.child;
|
|
|
}
|
|
|
|
|
|
function markWorkInProgressReceivedUpdate() {
|
|
|
didReceiveUpdate = true;
|
|
|
}
|
|
|
|
|
|
function resetSuspendedCurrentOnMountInLegacyMode(current, workInProgress) {
|
|
|
if ((workInProgress.mode & ConcurrentMode) === NoMode) {
|
|
|
if (current !== null) {
|
|
|
// A lazy component only mounts if it suspended inside a non-
|
|
|
// concurrent tree, in an inconsistent state. We want to treat it like
|
|
|
// a new mount, even though an empty version of it already committed.
|
|
|
// Disconnect the alternate pointers.
|
|
|
current.alternate = null;
|
|
|
workInProgress.alternate = null; // Since this is conceptually a new fiber, schedule a Placement effect
|
|
|
|
|
|
workInProgress.flags |= Placement;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes) {
|
|
|
if (current !== null) {
|
|
|
// Reuse previous dependencies
|
|
|
workInProgress.dependencies = current.dependencies;
|
|
|
}
|
|
|
|
|
|
{
|
|
|
// Don't update "base" render times for bailouts.
|
|
|
stopProfilerTimerIfRunning();
|
|
|
}
|
|
|
|
|
|
markSkippedUpdateLanes(workInProgress.lanes); // Check if the children have any pending work.
|
|
|
|
|
|
if (!includesSomeLane(renderLanes, workInProgress.childLanes)) {
|
|
|
// The children don't have any work either. We can skip them.
|
|
|
// TODO: Once we add back resuming, we should check if the children are
|
|
|
// a work-in-progress set. If so, we need to transfer their effects.
|
|
|
{
|
|
|
return null;
|
|
|
}
|
|
|
} // This fiber doesn't have work, but its subtree does. Clone the child
|
|
|
// fibers and continue.
|
|
|
|
|
|
|
|
|
cloneChildFibers(current, workInProgress);
|
|
|
return workInProgress.child;
|
|
|
}
|
|
|
|
|
|
function remountFiber(current, oldWorkInProgress, newWorkInProgress) {
|
|
|
{
|
|
|
var returnFiber = oldWorkInProgress.return;
|
|
|
|
|
|
if (returnFiber === null) {
|
|
|
// eslint-disable-next-line react-internal/prod-error-codes
|
|
|
throw new Error('Cannot swap the root fiber.');
|
|
|
} // Disconnect from the old current.
|
|
|
// It will get deleted.
|
|
|
|
|
|
|
|
|
current.alternate = null;
|
|
|
oldWorkInProgress.alternate = null; // Connect to the new tree.
|
|
|
|
|
|
newWorkInProgress.index = oldWorkInProgress.index;
|
|
|
newWorkInProgress.sibling = oldWorkInProgress.sibling;
|
|
|
newWorkInProgress.return = oldWorkInProgress.return;
|
|
|
newWorkInProgress.ref = oldWorkInProgress.ref; // Replace the child/sibling pointers above it.
|
|
|
|
|
|
if (oldWorkInProgress === returnFiber.child) {
|
|
|
returnFiber.child = newWorkInProgress;
|
|
|
} else {
|
|
|
var prevSibling = returnFiber.child;
|
|
|
|
|
|
if (prevSibling === null) {
|
|
|
// eslint-disable-next-line react-internal/prod-error-codes
|
|
|
throw new Error('Expected parent to have a child.');
|
|
|
}
|
|
|
|
|
|
while (prevSibling.sibling !== oldWorkInProgress) {
|
|
|
prevSibling = prevSibling.sibling;
|
|
|
|
|
|
if (prevSibling === null) {
|
|
|
// eslint-disable-next-line react-internal/prod-error-codes
|
|
|
throw new Error('Expected to find the previous sibling.');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
prevSibling.sibling = newWorkInProgress;
|
|
|
} // Delete the old fiber and place the new one.
|
|
|
// Since the old fiber is disconnected, we have to schedule it manually.
|
|
|
|
|
|
|
|
|
var deletions = returnFiber.deletions;
|
|
|
|
|
|
if (deletions === null) {
|
|
|
returnFiber.deletions = [current];
|
|
|
returnFiber.flags |= ChildDeletion;
|
|
|
} else {
|
|
|
deletions.push(current);
|
|
|
}
|
|
|
|
|
|
newWorkInProgress.flags |= Placement; // Restart work from the new fiber.
|
|
|
|
|
|
return newWorkInProgress;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function checkScheduledUpdateOrContext(current, renderLanes) {
|
|
|
// Before performing an early bailout, we must check if there are pending
|
|
|
// updates or context.
|
|
|
var updateLanes = current.lanes;
|
|
|
|
|
|
if (includesSomeLane(updateLanes, renderLanes)) {
|
|
|
return true;
|
|
|
} // No pending update, but because context is propagated lazily, we need
|
|
|
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
function attemptEarlyBailoutIfNoScheduledUpdate(current, workInProgress, renderLanes) {
|
|
|
// This fiber does not have any pending work. Bailout without entering
|
|
|
// the begin phase. There's still some bookkeeping we that needs to be done
|
|
|
// in this optimized path, mostly pushing stuff onto the stack.
|
|
|
switch (workInProgress.tag) {
|
|
|
case HostRoot:
|
|
|
pushHostRootContext(workInProgress);
|
|
|
var root = workInProgress.stateNode;
|
|
|
|
|
|
resetHydrationState();
|
|
|
break;
|
|
|
|
|
|
case HostComponent:
|
|
|
pushHostContext(workInProgress);
|
|
|
break;
|
|
|
|
|
|
case ClassComponent:
|
|
|
{
|
|
|
var Component = workInProgress.type;
|
|
|
|
|
|
if (isContextProvider(Component)) {
|
|
|
pushContextProvider(workInProgress);
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
case HostPortal:
|
|
|
pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);
|
|
|
break;
|
|
|
|
|
|
case ContextProvider:
|
|
|
{
|
|
|
var newValue = workInProgress.memoizedProps.value;
|
|
|
var context = workInProgress.type._context;
|
|
|
pushProvider(workInProgress, context, newValue);
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
case Profiler:
|
|
|
{
|
|
|
// Profiler should only call onRender when one of its descendants actually rendered.
|
|
|
var hasChildWork = includesSomeLane(renderLanes, workInProgress.childLanes);
|
|
|
|
|
|
if (hasChildWork) {
|
|
|
workInProgress.flags |= Update;
|
|
|
}
|
|
|
|
|
|
{
|
|
|
// Reset effect durations for the next eventual effect phase.
|
|
|
// These are reset during render to allow the DevTools commit hook a chance to read them,
|
|
|
var stateNode = workInProgress.stateNode;
|
|
|
stateNode.effectDuration = 0;
|
|
|
stateNode.passiveEffectDuration = 0;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case SuspenseComponent:
|
|
|
{
|
|
|
var state = workInProgress.memoizedState;
|
|
|
|
|
|
if (state !== null) {
|
|
|
if (state.dehydrated !== null) {
|
|
|
pushSuspenseContext(workInProgress, setDefaultShallowSuspenseContext(suspenseStackCursor.current)); // We know that this component will suspend again because if it has
|
|
|
// been unsuspended it has committed as a resolved Suspense component.
|
|
|
// If it needs to be retried, it should have work scheduled on it.
|
|
|
|
|
|
workInProgress.flags |= DidCapture; // We should never render the children of a dehydrated boundary until we
|
|
|
// upgrade it. We return null instead of bailoutOnAlreadyFinishedWork.
|
|
|
|
|
|
return null;
|
|
|
} // If this boundary is currently timed out, we need to decide
|
|
|
// whether to retry the primary children, or to skip over it and
|
|
|
// go straight to the fallback. Check the priority of the primary
|
|
|
// child fragment.
|
|
|
|
|
|
|
|
|
var primaryChildFragment = workInProgress.child;
|
|
|
var primaryChildLanes = primaryChildFragment.childLanes;
|
|
|
|
|
|
if (includesSomeLane(renderLanes, primaryChildLanes)) {
|
|
|
// The primary children have pending work. Use the normal path
|
|
|
// to attempt to render the primary children again.
|
|
|
return updateSuspenseComponent(current, workInProgress, renderLanes);
|
|
|
} else {
|
|
|
// The primary child fragment does not have pending work marked
|
|
|
// on it
|
|
|
pushSuspenseContext(workInProgress, setDefaultShallowSuspenseContext(suspenseStackCursor.current)); // The primary children do not have pending work with sufficient
|
|
|
// priority. Bailout.
|
|
|
|
|
|
var child = bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);
|
|
|
|
|
|
if (child !== null) {
|
|
|
// The fallback children have pending work. Skip over the
|
|
|
// primary children and work on the fallback.
|
|
|
return child.sibling;
|
|
|
} else {
|
|
|
// Note: We can return `null` here because we already checked
|
|
|
// whether there were nested context consumers, via the call to
|
|
|
// `bailoutOnAlreadyFinishedWork` above.
|
|
|
return null;
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
|
pushSuspenseContext(workInProgress, setDefaultShallowSuspenseContext(suspenseStackCursor.current));
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
case SuspenseListComponent:
|
|
|
{
|
|
|
var didSuspendBefore = (current.flags & DidCapture) !== NoFlags;
|
|
|
|
|
|
var _hasChildWork = includesSomeLane(renderLanes, workInProgress.childLanes);
|
|
|
|
|
|
if (didSuspendBefore) {
|
|
|
if (_hasChildWork) {
|
|
|
// If something was in fallback state last time, and we have all the
|
|
|
// same children then we're still in progressive loading state.
|
|
|
// Something might get unblocked by state updates or retries in the
|
|
|
// tree which will affect the tail. So we need to use the normal
|
|
|
// path to compute the correct tail.
|
|
|
return updateSuspenseListComponent(current, workInProgress, renderLanes);
|
|
|
} // If none of the children had any work, that means that none of
|
|
|
// them got retried so they'll still be blocked in the same way
|
|
|
// as before. We can fast bail out.
|
|
|
|
|
|
|
|
|
workInProgress.flags |= DidCapture;
|
|
|
} // If nothing suspended before and we're rendering the same children,
|
|
|
// then the tail doesn't matter. Anything new that suspends will work
|
|
|
// in the "together" mode, so we can continue from the state we had.
|
|
|
|
|
|
|
|
|
var renderState = workInProgress.memoizedState;
|
|
|
|
|
|
if (renderState !== null) {
|
|
|
// Reset to the "together" mode in case we've started a different
|
|
|
// update in the past but didn't complete it.
|
|
|
renderState.rendering = null;
|
|
|
renderState.tail = null;
|
|
|
renderState.lastEffect = null;
|
|
|
}
|
|
|
|
|
|
pushSuspenseContext(workInProgress, suspenseStackCursor.current);
|
|
|
|
|
|
if (_hasChildWork) {
|
|
|
break;
|
|
|
} else {
|
|
|
// If none of the children had any work, that means that none of
|
|
|
// them got retried so they'll still be blocked in the same way
|
|
|
// as before. We can fast bail out.
|
|
|
return null;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
case OffscreenComponent:
|
|
|
case LegacyHiddenComponent:
|
|
|
{
|
|
|
// Need to check if the tree still needs to be deferred. This is
|
|
|
// almost identical to the logic used in the normal update path,
|
|
|
// so we'll just enter that. The only difference is we'll bail out
|
|
|
// at the next level instead of this one, because the child props
|
|
|
// have not changed. Which is fine.
|
|
|
// TODO: Probably should refactor `beginWork` to split the bailout
|
|
|
// path from the normal path. I'm tempted to do a labeled break here
|
|
|
// but I won't :)
|
|
|
workInProgress.lanes = NoLanes;
|
|
|
return updateOffscreenComponent(current, workInProgress, renderLanes);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);
|
|
|
}
|
|
|
|
|
|
function beginWork(current, workInProgress, renderLanes) {
|
|
|
{
|
|
|
if (workInProgress._debugNeedsRemount && current !== null) {
|
|
|
// This will restart the begin phase with a new fiber.
|
|
|
return remountFiber(current, workInProgress, createFiberFromTypeAndProps(workInProgress.type, workInProgress.key, workInProgress.pendingProps, workInProgress._debugOwner || null, workInProgress.mode, workInProgress.lanes));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (current !== null) {
|
|
|
var oldProps = current.memoizedProps;
|
|
|
var newProps = workInProgress.pendingProps;
|
|
|
|
|
|
if (oldProps !== newProps || hasContextChanged() || ( // Force a re-render if the implementation changed due to hot reload:
|
|
|
workInProgress.type !== current.type )) {
|
|
|
// If props or context changed, mark the fiber as having performed work.
|
|
|
// This may be unset if the props are determined to be equal later (memo).
|
|
|
didReceiveUpdate = true;
|
|
|
} else {
|
|
|
// Neither props nor legacy context changes. Check if there's a pending
|
|
|
// update or context change.
|
|
|
var hasScheduledUpdateOrContext = checkScheduledUpdateOrContext(current, renderLanes);
|
|
|
|
|
|
if (!hasScheduledUpdateOrContext && // If this is the second pass of an error or suspense boundary, there
|
|
|
// may not be work scheduled on `current`, so we check for this flag.
|
|
|
(workInProgress.flags & DidCapture) === NoFlags) {
|
|
|
// No pending updates or context. Bail out now.
|
|
|
didReceiveUpdate = false;
|
|
|
return attemptEarlyBailoutIfNoScheduledUpdate(current, workInProgress, renderLanes);
|
|
|
}
|
|
|
|
|
|
if ((current.flags & ForceUpdateForLegacySuspense) !== NoFlags) {
|
|
|
// This is a special case that only exists for legacy mode.
|
|
|
// See https://github.com/facebook/react/pull/19216.
|
|
|
didReceiveUpdate = true;
|
|
|
} else {
|
|
|
// An update was scheduled on this fiber, but there are no new props
|
|
|
// nor legacy context. Set this to false. If an update queue or context
|
|
|
// consumer produces a changed value, it will set this to true. Otherwise,
|
|
|
// the component will assume the children have not changed and bail out.
|
|
|
didReceiveUpdate = false;
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
|
didReceiveUpdate = false;
|
|
|
|
|
|
if (getIsHydrating() && isForkedChild(workInProgress)) {
|
|
|
// Check if this child belongs to a list of muliple children in
|
|
|
// its parent.
|
|
|
//
|
|
|
// In a true multi-threaded implementation, we would render children on
|
|
|
// parallel threads. This would represent the beginning of a new render
|
|
|
// thread for this subtree.
|
|
|
//
|
|
|
// We only use this for id generation during hydration, which is why the
|
|
|
// logic is located in this special branch.
|
|
|
var slotIndex = workInProgress.index;
|
|
|
var numberOfForks = getForksAtLevel();
|
|
|
pushTreeId(workInProgress, numberOfForks, slotIndex);
|
|
|
}
|
|
|
} // Before entering the begin phase, clear pending update priority.
|
|
|
// TODO: This assumes that we're about to evaluate the component and process
|
|
|
// the update queue. However, there's an exception: SimpleMemoComponent
|
|
|
// sometimes bails out later in the begin phase. This indicates that we should
|
|
|
// move this assignment out of the common path and into each branch.
|
|
|
|
|
|
|
|
|
workInProgress.lanes = NoLanes;
|
|
|
|
|
|
switch (workInProgress.tag) {
|
|
|
case IndeterminateComponent:
|
|
|
{
|
|
|
return mountIndeterminateComponent(current, workInProgress, workInProgress.type, renderLanes);
|
|
|
}
|
|
|
|
|
|
case LazyComponent:
|
|
|
{
|
|
|
var elementType = workInProgress.elementType;
|
|
|
return mountLazyComponent(current, workInProgress, elementType, renderLanes);
|
|
|
}
|
|
|
|
|
|
case FunctionComponent:
|
|
|
{
|
|
|
var Component = workInProgress.type;
|
|
|
var unresolvedProps = workInProgress.pendingProps;
|
|
|
var resolvedProps = workInProgress.elementType === Component ? unresolvedProps : resolveDefaultProps(Component, unresolvedProps);
|
|
|
return updateFunctionComponent(current, workInProgress, Component, resolvedProps, renderLanes);
|
|
|
}
|
|
|
|
|
|
case ClassComponent:
|
|
|
{
|
|
|
var _Component = workInProgress.type;
|
|
|
var _unresolvedProps = workInProgress.pendingProps;
|
|
|
|
|
|
var _resolvedProps = workInProgress.elementType === _Component ? _unresolvedProps : resolveDefaultProps(_Component, _unresolvedProps);
|
|
|
|
|
|
return updateClassComponent(current, workInProgress, _Component, _resolvedProps, renderLanes);
|
|
|
}
|
|
|
|
|
|
case HostRoot:
|
|
|
return updateHostRoot(current, workInProgress, renderLanes);
|
|
|
|
|
|
case HostComponent:
|
|
|
return updateHostComponent(current, workInProgress, renderLanes);
|
|
|
|
|
|
case HostText:
|
|
|
return updateHostText(current, workInProgress);
|
|
|
|
|
|
case SuspenseComponent:
|
|
|
return updateSuspenseComponent(current, workInProgress, renderLanes);
|
|
|
|
|
|
case HostPortal:
|
|
|
return updatePortalComponent(current, workInProgress, renderLanes);
|
|
|
|
|
|
case ForwardRef:
|
|
|
{
|
|
|
var type = workInProgress.type;
|
|
|
var _unresolvedProps2 = workInProgress.pendingProps;
|
|
|
|
|
|
var _resolvedProps2 = workInProgress.elementType === type ? _unresolvedProps2 : resolveDefaultProps(type, _unresolvedProps2);
|
|
|
|
|
|
return updateForwardRef(current, workInProgress, type, _resolvedProps2, renderLanes);
|
|
|
}
|
|
|
|
|
|
case Fragment:
|
|
|
return updateFragment(current, workInProgress, renderLanes);
|
|
|
|
|
|
case Mode:
|
|
|
return updateMode(current, workInProgress, renderLanes);
|
|
|
|
|
|
case Profiler:
|
|
|
return updateProfiler(current, workInProgress, renderLanes);
|
|
|
|
|
|
case ContextProvider:
|
|
|
return updateContextProvider(current, workInProgress, renderLanes);
|
|
|
|
|
|
case ContextConsumer:
|
|
|
return updateContextConsumer(current, workInProgress, renderLanes);
|
|
|
|
|
|
case MemoComponent:
|
|
|
{
|
|
|
var _type2 = workInProgress.type;
|
|
|
var _unresolvedProps3 = workInProgress.pendingProps; // Resolve outer props first, then resolve inner props.
|
|
|
|
|
|
var _resolvedProps3 = resolveDefaultProps(_type2, _unresolvedProps3);
|
|
|
|
|
|
{
|
|
|
if (workInProgress.type !== workInProgress.elementType) {
|
|
|
var outerPropTypes = _type2.propTypes;
|
|
|
|
|
|
if (outerPropTypes) {
|
|
|
checkPropTypes(outerPropTypes, _resolvedProps3, // Resolved for outer only
|
|
|
'prop', getComponentNameFromType(_type2));
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
_resolvedProps3 = resolveDefaultProps(_type2.type, _resolvedProps3);
|
|
|
return updateMemoComponent(current, workInProgress, _type2, _resolvedProps3, renderLanes);
|
|
|
}
|
|
|
|
|
|
case SimpleMemoComponent:
|
|
|
{
|
|
|
return updateSimpleMemoComponent(current, workInProgress, workInProgress.type, workInProgress.pendingProps, renderLanes);
|
|
|
}
|
|
|
|
|
|
case IncompleteClassComponent:
|
|
|
{
|
|
|
var _Component2 = workInProgress.type;
|
|
|
var _unresolvedProps4 = workInProgress.pendingProps;
|
|
|
|
|
|
var _resolvedProps4 = workInProgress.elementType === _Component2 ? _unresolvedProps4 : resolveDefaultProps(_Component2, _unresolvedProps4);
|
|
|
|
|
|
return mountIncompleteClassComponent(current, workInProgress, _Component2, _resolvedProps4, renderLanes);
|
|
|
}
|
|
|
|
|
|
case SuspenseListComponent:
|
|
|
{
|
|
|
return updateSuspenseListComponent(current, workInProgress, renderLanes);
|
|
|
}
|
|
|
|
|
|
case ScopeComponent:
|
|
|
{
|
|
|
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
case OffscreenComponent:
|
|
|
{
|
|
|
return updateOffscreenComponent(current, workInProgress, renderLanes);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
throw new Error("Unknown unit of work tag (" + workInProgress.tag + "). This error is likely caused by a bug in " + 'React. Please file an issue.');
|
|
|
}
|
|
|
|
|
|
function markUpdate(workInProgress) {
|
|
|
// Tag the fiber with an update effect. This turns a Placement into
|
|
|
// a PlacementAndUpdate.
|
|
|
workInProgress.flags |= Update;
|
|
|
}
|
|
|
|
|
|
function markRef$1(workInProgress) {
|
|
|
workInProgress.flags |= Ref;
|
|
|
|
|
|
{
|
|
|
workInProgress.flags |= RefStatic;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var appendAllChildren;
|
|
|
var updateHostContainer;
|
|
|
var updateHostComponent$1;
|
|
|
var updateHostText$1;
|
|
|
|
|
|
{
|
|
|
// Mutation mode
|
|
|
appendAllChildren = function (parent, workInProgress, needsVisibilityToggle, isHidden) {
|
|
|
// We only have the top Fiber that was created but we need recurse down its
|
|
|
// children to find all the terminal nodes.
|
|
|
var node = workInProgress.child;
|
|
|
|
|
|
while (node !== null) {
|
|
|
if (node.tag === HostComponent || node.tag === HostText) {
|
|
|
appendInitialChild(parent, node.stateNode);
|
|
|
} else if (node.tag === HostPortal) ; else if (node.child !== null) {
|
|
|
node.child.return = node;
|
|
|
node = node.child;
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
if (node === workInProgress) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
while (node.sibling === null) {
|
|
|
if (node.return === null || node.return === workInProgress) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
node = node.return;
|
|
|
}
|
|
|
|
|
|
node.sibling.return = node.return;
|
|
|
node = node.sibling;
|
|
|
}
|
|
|
};
|
|
|
|
|
|
updateHostContainer = function (current, workInProgress) {// Noop
|
|
|
};
|
|
|
|
|
|
updateHostComponent$1 = function (current, workInProgress, type, newProps, rootContainerInstance) {
|
|
|
// If we have an alternate, that means this is an update and we need to
|
|
|
// schedule a side-effect to do the updates.
|
|
|
var oldProps = current.memoizedProps;
|
|
|
|
|
|
if (oldProps === newProps) {
|
|
|
// In mutation mode, this is sufficient for a bailout because
|
|
|
// we won't touch this node even if children changed.
|
|
|
return;
|
|
|
} // If we get updated because one of our children updated, we don't
|
|
|
// have newProps so we'll have to reuse them.
|
|
|
// TODO: Split the update API as separate for the props vs. children.
|
|
|
// Even better would be if children weren't special cased at all tho.
|
|
|
|
|
|
|
|
|
var instance = workInProgress.stateNode;
|
|
|
var currentHostContext = getHostContext(); // TODO: Experiencing an error where oldProps is null. Suggests a host
|
|
|
// component is hitting the resume path. Figure out why. Possibly
|
|
|
// related to `hidden`.
|
|
|
|
|
|
var updatePayload = prepareUpdate(instance, type, oldProps, newProps, rootContainerInstance, currentHostContext); // TODO: Type this specific to this type of component.
|
|
|
|
|
|
workInProgress.updateQueue = updatePayload; // If the update payload indicates that there is a change or if there
|
|
|
// is a new ref we mark this as an update. All the work is done in commitWork.
|
|
|
|
|
|
if (updatePayload) {
|
|
|
markUpdate(workInProgress);
|
|
|
}
|
|
|
};
|
|
|
|
|
|
updateHostText$1 = function (current, workInProgress, oldText, newText) {
|
|
|
// If the text differs, mark it as an update. All the work in done in commitWork.
|
|
|
if (oldText !== newText) {
|
|
|
markUpdate(workInProgress);
|
|
|
}
|
|
|
};
|
|
|
}
|
|
|
|
|
|
function cutOffTailIfNeeded(renderState, hasRenderedATailFallback) {
|
|
|
if (getIsHydrating()) {
|
|
|
// If we're hydrating, we should consume as many items as we can
|
|
|
// so we don't leave any behind.
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
switch (renderState.tailMode) {
|
|
|
case 'hidden':
|
|
|
{
|
|
|
// Any insertions at the end of the tail list after this point
|
|
|
// should be invisible. If there are already mounted boundaries
|
|
|
// anything before them are not considered for collapsing.
|
|
|
// Therefore we need to go through the whole tail to find if
|
|
|
// there are any.
|
|
|
var tailNode = renderState.tail;
|
|
|
var lastTailNode = null;
|
|
|
|
|
|
while (tailNode !== null) {
|
|
|
if (tailNode.alternate !== null) {
|
|
|
lastTailNode = tailNode;
|
|
|
}
|
|
|
|
|
|
tailNode = tailNode.sibling;
|
|
|
} // Next we're simply going to delete all insertions after the
|
|
|
// last rendered item.
|
|
|
|
|
|
|
|
|
if (lastTailNode === null) {
|
|
|
// All remaining items in the tail are insertions.
|
|
|
renderState.tail = null;
|
|
|
} else {
|
|
|
// Detach the insertion after the last node that was already
|
|
|
// inserted.
|
|
|
lastTailNode.sibling = null;
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
case 'collapsed':
|
|
|
{
|
|
|
// Any insertions at the end of the tail list after this point
|
|
|
// should be invisible. If there are already mounted boundaries
|
|
|
// anything before them are not considered for collapsing.
|
|
|
// Therefore we need to go through the whole tail to find if
|
|
|
// there are any.
|
|
|
var _tailNode = renderState.tail;
|
|
|
var _lastTailNode = null;
|
|
|
|
|
|
while (_tailNode !== null) {
|
|
|
if (_tailNode.alternate !== null) {
|
|
|
_lastTailNode = _tailNode;
|
|
|
}
|
|
|
|
|
|
_tailNode = _tailNode.sibling;
|
|
|
} // Next we're simply going to delete all insertions after the
|
|
|
// last rendered item.
|
|
|
|
|
|
|
|
|
if (_lastTailNode === null) {
|
|
|
// All remaining items in the tail are insertions.
|
|
|
if (!hasRenderedATailFallback && renderState.tail !== null) {
|
|
|
// We suspended during the head. We want to show at least one
|
|
|
// row at the tail. So we'll keep on and cut off the rest.
|
|
|
renderState.tail.sibling = null;
|
|
|
} else {
|
|
|
renderState.tail = null;
|
|
|
}
|
|
|
} else {
|
|
|
// Detach the insertion after the last node that was already
|
|
|
// inserted.
|
|
|
_lastTailNode.sibling = null;
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function bubbleProperties(completedWork) {
|
|
|
var didBailout = completedWork.alternate !== null && completedWork.alternate.child === completedWork.child;
|
|
|
var newChildLanes = NoLanes;
|
|
|
var subtreeFlags = NoFlags;
|
|
|
|
|
|
if (!didBailout) {
|
|
|
// Bubble up the earliest expiration time.
|
|
|
if ( (completedWork.mode & ProfileMode) !== NoMode) {
|
|
|
// In profiling mode, resetChildExpirationTime is also used to reset
|
|
|
// profiler durations.
|
|
|
var actualDuration = completedWork.actualDuration;
|
|
|
var treeBaseDuration = completedWork.selfBaseDuration;
|
|
|
var child = completedWork.child;
|
|
|
|
|
|
while (child !== null) {
|
|
|
newChildLanes = mergeLanes(newChildLanes, mergeLanes(child.lanes, child.childLanes));
|
|
|
subtreeFlags |= child.subtreeFlags;
|
|
|
subtreeFlags |= child.flags; // When a fiber is cloned, its actualDuration is reset to 0. This value will
|
|
|
// only be updated if work is done on the fiber (i.e. it doesn't bailout).
|
|
|
// When work is done, it should bubble to the parent's actualDuration. If
|
|
|
// the fiber has not been cloned though, (meaning no work was done), then
|
|
|
// this value will reflect the amount of time spent working on a previous
|
|
|
// render. In that case it should not bubble. We determine whether it was
|
|
|
// cloned by comparing the child pointer.
|
|
|
|
|
|
actualDuration += child.actualDuration;
|
|
|
treeBaseDuration += child.treeBaseDuration;
|
|
|
child = child.sibling;
|
|
|
}
|
|
|
|
|
|
completedWork.actualDuration = actualDuration;
|
|
|
completedWork.treeBaseDuration = treeBaseDuration;
|
|
|
} else {
|
|
|
var _child = completedWork.child;
|
|
|
|
|
|
while (_child !== null) {
|
|
|
newChildLanes = mergeLanes(newChildLanes, mergeLanes(_child.lanes, _child.childLanes));
|
|
|
subtreeFlags |= _child.subtreeFlags;
|
|
|
subtreeFlags |= _child.flags; // Update the return pointer so the tree is consistent. This is a code
|
|
|
// smell because it assumes the commit phase is never concurrent with
|
|
|
// the render phase. Will address during refactor to alternate model.
|
|
|
|
|
|
_child.return = completedWork;
|
|
|
_child = _child.sibling;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
completedWork.subtreeFlags |= subtreeFlags;
|
|
|
} else {
|
|
|
// Bubble up the earliest expiration time.
|
|
|
if ( (completedWork.mode & ProfileMode) !== NoMode) {
|
|
|
// In profiling mode, resetChildExpirationTime is also used to reset
|
|
|
// profiler durations.
|
|
|
var _treeBaseDuration = completedWork.selfBaseDuration;
|
|
|
var _child2 = completedWork.child;
|
|
|
|
|
|
while (_child2 !== null) {
|
|
|
newChildLanes = mergeLanes(newChildLanes, mergeLanes(_child2.lanes, _child2.childLanes)); // "Static" flags share the lifetime of the fiber/hook they belong to,
|
|
|
// so we should bubble those up even during a bailout. All the other
|
|
|
// flags have a lifetime only of a single render + commit, so we should
|
|
|
// ignore them.
|
|
|
|
|
|
subtreeFlags |= _child2.subtreeFlags & StaticMask;
|
|
|
subtreeFlags |= _child2.flags & StaticMask;
|
|
|
_treeBaseDuration += _child2.treeBaseDuration;
|
|
|
_child2 = _child2.sibling;
|
|
|
}
|
|
|
|
|
|
completedWork.treeBaseDuration = _treeBaseDuration;
|
|
|
} else {
|
|
|
var _child3 = completedWork.child;
|
|
|
|
|
|
while (_child3 !== null) {
|
|
|
newChildLanes = mergeLanes(newChildLanes, mergeLanes(_child3.lanes, _child3.childLanes)); // "Static" flags share the lifetime of the fiber/hook they belong to,
|
|
|
// so we should bubble those up even during a bailout. All the other
|
|
|
// flags have a lifetime only of a single render + commit, so we should
|
|
|
// ignore them.
|
|
|
|
|
|
subtreeFlags |= _child3.subtreeFlags & StaticMask;
|
|
|
subtreeFlags |= _child3.flags & StaticMask; // Update the return pointer so the tree is consistent. This is a code
|
|
|
// smell because it assumes the commit phase is never concurrent with
|
|
|
// the render phase. Will address during refactor to alternate model.
|
|
|
|
|
|
_child3.return = completedWork;
|
|
|
_child3 = _child3.sibling;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
completedWork.subtreeFlags |= subtreeFlags;
|
|
|
}
|
|
|
|
|
|
completedWork.childLanes = newChildLanes;
|
|
|
return didBailout;
|
|
|
}
|
|
|
|
|
|
function completeDehydratedSuspenseBoundary(current, workInProgress, nextState) {
|
|
|
if (hasUnhydratedTailNodes() && (workInProgress.mode & ConcurrentMode) !== NoMode && (workInProgress.flags & DidCapture) === NoFlags) {
|
|
|
warnIfUnhydratedTailNodes(workInProgress);
|
|
|
resetHydrationState();
|
|
|
workInProgress.flags |= ForceClientRender | Incomplete | ShouldCapture;
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
var wasHydrated = popHydrationState(workInProgress);
|
|
|
|
|
|
if (nextState !== null && nextState.dehydrated !== null) {
|
|
|
// We might be inside a hydration state the first time we're picking up this
|
|
|
// Suspense boundary, and also after we've reentered it for further hydration.
|
|
|
if (current === null) {
|
|
|
if (!wasHydrated) {
|
|
|
throw new Error('A dehydrated suspense component was completed without a hydrated node. ' + 'This is probably a bug in React.');
|
|
|
}
|
|
|
|
|
|
prepareToHydrateHostSuspenseInstance(workInProgress);
|
|
|
bubbleProperties(workInProgress);
|
|
|
|
|
|
{
|
|
|
if ((workInProgress.mode & ProfileMode) !== NoMode) {
|
|
|
var isTimedOutSuspense = nextState !== null;
|
|
|
|
|
|
if (isTimedOutSuspense) {
|
|
|
// Don't count time spent in a timed out Suspense subtree as part of the base duration.
|
|
|
var primaryChildFragment = workInProgress.child;
|
|
|
|
|
|
if (primaryChildFragment !== null) {
|
|
|
// $FlowFixMe Flow doesn't support type casting in combination with the -= operator
|
|
|
workInProgress.treeBaseDuration -= primaryChildFragment.treeBaseDuration;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return false;
|
|
|
} else {
|
|
|
// We might have reentered this boundary to hydrate it. If so, we need to reset the hydration
|
|
|
// state since we're now exiting out of it. popHydrationState doesn't do that for us.
|
|
|
resetHydrationState();
|
|
|
|
|
|
if ((workInProgress.flags & DidCapture) === NoFlags) {
|
|
|
// This boundary did not suspend so it's now hydrated and unsuspended.
|
|
|
workInProgress.memoizedState = null;
|
|
|
} // If nothing suspended, we need to schedule an effect to mark this boundary
|
|
|
// as having hydrated so events know that they're free to be invoked.
|
|
|
// It's also a signal to replay events and the suspense callback.
|
|
|
// If something suspended, schedule an effect to attach retry listeners.
|
|
|
// So we might as well always mark this.
|
|
|
|
|
|
|
|
|
workInProgress.flags |= Update;
|
|
|
bubbleProperties(workInProgress);
|
|
|
|
|
|
{
|
|
|
if ((workInProgress.mode & ProfileMode) !== NoMode) {
|
|
|
var _isTimedOutSuspense = nextState !== null;
|
|
|
|
|
|
if (_isTimedOutSuspense) {
|
|
|
// Don't count time spent in a timed out Suspense subtree as part of the base duration.
|
|
|
var _primaryChildFragment = workInProgress.child;
|
|
|
|
|
|
if (_primaryChildFragment !== null) {
|
|
|
// $FlowFixMe Flow doesn't support type casting in combination with the -= operator
|
|
|
workInProgress.treeBaseDuration -= _primaryChildFragment.treeBaseDuration;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return false;
|
|
|
}
|
|
|
} else {
|
|
|
// Successfully completed this tree. If this was a forced client render,
|
|
|
// there may have been recoverable errors during first hydration
|
|
|
// attempt. If so, add them to a queue so we can log them in the
|
|
|
// commit phase.
|
|
|
upgradeHydrationErrorsToRecoverable(); // Fall through to normal Suspense path
|
|
|
|
|
|
return true;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function completeWork(current, workInProgress, renderLanes) {
|
|
|
var newProps = workInProgress.pendingProps; // Note: This intentionally doesn't check if we're hydrating because comparing
|
|
|
// to the current tree provider fiber is just as fast and less error-prone.
|
|
|
// Ideally we would have a special version of the work loop only
|
|
|
// for hydration.
|
|
|
|
|
|
popTreeContext(workInProgress);
|
|
|
|
|
|
switch (workInProgress.tag) {
|
|
|
case IndeterminateComponent:
|
|
|
case LazyComponent:
|
|
|
case SimpleMemoComponent:
|
|
|
case FunctionComponent:
|
|
|
case ForwardRef:
|
|
|
case Fragment:
|
|
|
case Mode:
|
|
|
case Profiler:
|
|
|
case ContextConsumer:
|
|
|
case MemoComponent:
|
|
|
bubbleProperties(workInProgress);
|
|
|
return null;
|
|
|
|
|
|
case ClassComponent:
|
|
|
{
|
|
|
var Component = workInProgress.type;
|
|
|
|
|
|
if (isContextProvider(Component)) {
|
|
|
popContext(workInProgress);
|
|
|
}
|
|
|
|
|
|
bubbleProperties(workInProgress);
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
case HostRoot:
|
|
|
{
|
|
|
var fiberRoot = workInProgress.stateNode;
|
|
|
popHostContainer(workInProgress);
|
|
|
popTopLevelContextObject(workInProgress);
|
|
|
resetWorkInProgressVersions();
|
|
|
|
|
|
if (fiberRoot.pendingContext) {
|
|
|
fiberRoot.context = fiberRoot.pendingContext;
|
|
|
fiberRoot.pendingContext = null;
|
|
|
}
|
|
|
|
|
|
if (current === null || current.child === null) {
|
|
|
// If we hydrated, pop so that we can delete any remaining children
|
|
|
// that weren't hydrated.
|
|
|
var wasHydrated = popHydrationState(workInProgress);
|
|
|
|
|
|
if (wasHydrated) {
|
|
|
// If we hydrated, then we'll need to schedule an update for
|
|
|
// the commit side-effects on the root.
|
|
|
markUpdate(workInProgress);
|
|
|
} else {
|
|
|
if (current !== null) {
|
|
|
var prevState = current.memoizedState;
|
|
|
|
|
|
if ( // Check if this is a client root
|
|
|
!prevState.isDehydrated || // Check if we reverted to client rendering (e.g. due to an error)
|
|
|
(workInProgress.flags & ForceClientRender) !== NoFlags) {
|
|
|
// Schedule an effect to clear this container at the start of the
|
|
|
// next commit. This handles the case of React rendering into a
|
|
|
// container with previous children. It's also safe to do for
|
|
|
// updates too, because current.child would only be null if the
|
|
|
// previous render was null (so the container would already
|
|
|
// be empty).
|
|
|
workInProgress.flags |= Snapshot; // If this was a forced client render, there may have been
|
|
|
// recoverable errors during first hydration attempt. If so, add
|
|
|
// them to a queue so we can log them in the commit phase.
|
|
|
|
|
|
upgradeHydrationErrorsToRecoverable();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
updateHostContainer(current, workInProgress);
|
|
|
bubbleProperties(workInProgress);
|
|
|
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
case HostComponent:
|
|
|
{
|
|
|
popHostContext(workInProgress);
|
|
|
var rootContainerInstance = getRootHostContainer();
|
|
|
var type = workInProgress.type;
|
|
|
|
|
|
if (current !== null && workInProgress.stateNode != null) {
|
|
|
updateHostComponent$1(current, workInProgress, type, newProps, rootContainerInstance);
|
|
|
|
|
|
if (current.ref !== workInProgress.ref) {
|
|
|
markRef$1(workInProgress);
|
|
|
}
|
|
|
} else {
|
|
|
if (!newProps) {
|
|
|
if (workInProgress.stateNode === null) {
|
|
|
throw new Error('We must have new props for new mounts. This error is likely ' + 'caused by a bug in React. Please file an issue.');
|
|
|
} // This can happen when we abort work.
|
|
|
|
|
|
|
|
|
bubbleProperties(workInProgress);
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
var currentHostContext = getHostContext(); // TODO: Move createInstance to beginWork and keep it on a context
|
|
|
// "stack" as the parent. Then append children as we go in beginWork
|
|
|
// or completeWork depending on whether we want to add them top->down or
|
|
|
// bottom->up. Top->down is faster in IE11.
|
|
|
|
|
|
var _wasHydrated = popHydrationState(workInProgress);
|
|
|
|
|
|
if (_wasHydrated) {
|
|
|
// TODO: Move this and createInstance step into the beginPhase
|
|
|
// to consolidate.
|
|
|
if (prepareToHydrateHostInstance(workInProgress, rootContainerInstance, currentHostContext)) {
|
|
|
// If changes to the hydrated node need to be applied at the
|
|
|
// commit-phase we mark this as such.
|
|
|
markUpdate(workInProgress);
|
|
|
}
|
|
|
} else {
|
|
|
var instance = createInstance(type, newProps, rootContainerInstance, currentHostContext, workInProgress);
|
|
|
appendAllChildren(instance, workInProgress, false, false);
|
|
|
workInProgress.stateNode = instance; // Certain renderers require commit-time effects for initial mount.
|
|
|
// (eg DOM renderer supports auto-focus for certain elements).
|
|
|
// Make sure such renderers get scheduled for later work.
|
|
|
|
|
|
if (finalizeInitialChildren(instance, type, newProps, rootContainerInstance)) {
|
|
|
markUpdate(workInProgress);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (workInProgress.ref !== null) {
|
|
|
// If there is a ref on a host node we need to schedule a callback
|
|
|
markRef$1(workInProgress);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
bubbleProperties(workInProgress);
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
case HostText:
|
|
|
{
|
|
|
var newText = newProps;
|
|
|
|
|
|
if (current && workInProgress.stateNode != null) {
|
|
|
var oldText = current.memoizedProps; // If we have an alternate, that means this is an update and we need
|
|
|
// to schedule a side-effect to do the updates.
|
|
|
|
|
|
updateHostText$1(current, workInProgress, oldText, newText);
|
|
|
} else {
|
|
|
if (typeof newText !== 'string') {
|
|
|
if (workInProgress.stateNode === null) {
|
|
|
throw new Error('We must have new props for new mounts. This error is likely ' + 'caused by a bug in React. Please file an issue.');
|
|
|
} // This can happen when we abort work.
|
|
|
|
|
|
}
|
|
|
|
|
|
var _rootContainerInstance = getRootHostContainer();
|
|
|
|
|
|
var _currentHostContext = getHostContext();
|
|
|
|
|
|
var _wasHydrated2 = popHydrationState(workInProgress);
|
|
|
|
|
|
if (_wasHydrated2) {
|
|
|
if (prepareToHydrateHostTextInstance(workInProgress)) {
|
|
|
markUpdate(workInProgress);
|
|
|
}
|
|
|
} else {
|
|
|
workInProgress.stateNode = createTextInstance(newText, _rootContainerInstance, _currentHostContext, workInProgress);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
bubbleProperties(workInProgress);
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
case SuspenseComponent:
|
|
|
{
|
|
|
popSuspenseContext(workInProgress);
|
|
|
var nextState = workInProgress.memoizedState; // Special path for dehydrated boundaries. We may eventually move this
|
|
|
// to its own fiber type so that we can add other kinds of hydration
|
|
|
// boundaries that aren't associated with a Suspense tree. In anticipation
|
|
|
// of such a refactor, all the hydration logic is contained in
|
|
|
// this branch.
|
|
|
|
|
|
if (current === null || current.memoizedState !== null && current.memoizedState.dehydrated !== null) {
|
|
|
var fallthroughToNormalSuspensePath = completeDehydratedSuspenseBoundary(current, workInProgress, nextState);
|
|
|
|
|
|
if (!fallthroughToNormalSuspensePath) {
|
|
|
if (workInProgress.flags & ShouldCapture) {
|
|
|
// Special case. There were remaining unhydrated nodes. We treat
|
|
|
// this as a mismatch. Revert to client rendering.
|
|
|
return workInProgress;
|
|
|
} else {
|
|
|
// Did not finish hydrating, either because this is the initial
|
|
|
// render or because something suspended.
|
|
|
return null;
|
|
|
}
|
|
|
} // Continue with the normal Suspense path.
|
|
|
|
|
|
}
|
|
|
|
|
|
if ((workInProgress.flags & DidCapture) !== NoFlags) {
|
|
|
// Something suspended. Re-render with the fallback children.
|
|
|
workInProgress.lanes = renderLanes; // Do not reset the effect list.
|
|
|
|
|
|
if ( (workInProgress.mode & ProfileMode) !== NoMode) {
|
|
|
transferActualDuration(workInProgress);
|
|
|
} // Don't bubble properties in this case.
|
|
|
|
|
|
|
|
|
return workInProgress;
|
|
|
}
|
|
|
|
|
|
var nextDidTimeout = nextState !== null;
|
|
|
var prevDidTimeout = current !== null && current.memoizedState !== null;
|
|
|
// a passive effect, which is when we process the transitions
|
|
|
|
|
|
|
|
|
if (nextDidTimeout !== prevDidTimeout) {
|
|
|
// an effect to toggle the subtree's visibility. When we switch from
|
|
|
// fallback -> primary, the inner Offscreen fiber schedules this effect
|
|
|
// as part of its normal complete phase. But when we switch from
|
|
|
// primary -> fallback, the inner Offscreen fiber does not have a complete
|
|
|
// phase. So we need to schedule its effect here.
|
|
|
//
|
|
|
// We also use this flag to connect/disconnect the effects, but the same
|
|
|
// logic applies: when re-connecting, the Offscreen fiber's complete
|
|
|
// phase will handle scheduling the effect. It's only when the fallback
|
|
|
// is active that we have to do anything special.
|
|
|
|
|
|
|
|
|
if (nextDidTimeout) {
|
|
|
var _offscreenFiber2 = workInProgress.child;
|
|
|
_offscreenFiber2.flags |= Visibility; // TODO: This will still suspend a synchronous tree if anything
|
|
|
// in the concurrent tree already suspended during this render.
|
|
|
// This is a known bug.
|
|
|
|
|
|
if ((workInProgress.mode & ConcurrentMode) !== NoMode) {
|
|
|
// TODO: Move this back to throwException because this is too late
|
|
|
// if this is a large tree which is common for initial loads. We
|
|
|
// don't know if we should restart a render or not until we get
|
|
|
// this marker, and this is too late.
|
|
|
// If this render already had a ping or lower pri updates,
|
|
|
// and this is the first time we know we're going to suspend we
|
|
|
// should be able to immediately restart from within throwException.
|
|
|
var hasInvisibleChildContext = current === null && (workInProgress.memoizedProps.unstable_avoidThisFallback !== true || !enableSuspenseAvoidThisFallback);
|
|
|
|
|
|
if (hasInvisibleChildContext || hasSuspenseContext(suspenseStackCursor.current, InvisibleParentSuspenseContext)) {
|
|
|
// If this was in an invisible tree or a new render, then showing
|
|
|
// this boundary is ok.
|
|
|
renderDidSuspend();
|
|
|
} else {
|
|
|
// Otherwise, we're going to have to hide content so we should
|
|
|
// suspend for longer if possible.
|
|
|
renderDidSuspendDelayIfPossible();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var wakeables = workInProgress.updateQueue;
|
|
|
|
|
|
if (wakeables !== null) {
|
|
|
// Schedule an effect to attach a retry listener to the promise.
|
|
|
// TODO: Move to passive phase
|
|
|
workInProgress.flags |= Update;
|
|
|
}
|
|
|
|
|
|
bubbleProperties(workInProgress);
|
|
|
|
|
|
{
|
|
|
if ((workInProgress.mode & ProfileMode) !== NoMode) {
|
|
|
if (nextDidTimeout) {
|
|
|
// Don't count time spent in a timed out Suspense subtree as part of the base duration.
|
|
|
var primaryChildFragment = workInProgress.child;
|
|
|
|
|
|
if (primaryChildFragment !== null) {
|
|
|
// $FlowFixMe Flow doesn't support type casting in combination with the -= operator
|
|
|
workInProgress.treeBaseDuration -= primaryChildFragment.treeBaseDuration;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
case HostPortal:
|
|
|
popHostContainer(workInProgress);
|
|
|
updateHostContainer(current, workInProgress);
|
|
|
|
|
|
if (current === null) {
|
|
|
preparePortalMount(workInProgress.stateNode.containerInfo);
|
|
|
}
|
|
|
|
|
|
bubbleProperties(workInProgress);
|
|
|
return null;
|
|
|
|
|
|
case ContextProvider:
|
|
|
// Pop provider fiber
|
|
|
var context = workInProgress.type._context;
|
|
|
popProvider(context, workInProgress);
|
|
|
bubbleProperties(workInProgress);
|
|
|
return null;
|
|
|
|
|
|
case IncompleteClassComponent:
|
|
|
{
|
|
|
// Same as class component case. I put it down here so that the tags are
|
|
|
// sequential to ensure this switch is compiled to a jump table.
|
|
|
var _Component = workInProgress.type;
|
|
|
|
|
|
if (isContextProvider(_Component)) {
|
|
|
popContext(workInProgress);
|
|
|
}
|
|
|
|
|
|
bubbleProperties(workInProgress);
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
case SuspenseListComponent:
|
|
|
{
|
|
|
popSuspenseContext(workInProgress);
|
|
|
var renderState = workInProgress.memoizedState;
|
|
|
|
|
|
if (renderState === null) {
|
|
|
// We're running in the default, "independent" mode.
|
|
|
// We don't do anything in this mode.
|
|
|
bubbleProperties(workInProgress);
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
var didSuspendAlready = (workInProgress.flags & DidCapture) !== NoFlags;
|
|
|
var renderedTail = renderState.rendering;
|
|
|
|
|
|
if (renderedTail === null) {
|
|
|
// We just rendered the head.
|
|
|
if (!didSuspendAlready) {
|
|
|
// This is the first pass. We need to figure out if anything is still
|
|
|
// suspended in the rendered set.
|
|
|
// If new content unsuspended, but there's still some content that
|
|
|
// didn't. Then we need to do a second pass that forces everything
|
|
|
// to keep showing their fallbacks.
|
|
|
// We might be suspended if something in this render pass suspended, or
|
|
|
// something in the previous committed pass suspended. Otherwise,
|
|
|
// there's no chance so we can skip the expensive call to
|
|
|
// findFirstSuspended.
|
|
|
var cannotBeSuspended = renderHasNotSuspendedYet() && (current === null || (current.flags & DidCapture) === NoFlags);
|
|
|
|
|
|
if (!cannotBeSuspended) {
|
|
|
var row = workInProgress.child;
|
|
|
|
|
|
while (row !== null) {
|
|
|
var suspended = findFirstSuspended(row);
|
|
|
|
|
|
if (suspended !== null) {
|
|
|
didSuspendAlready = true;
|
|
|
workInProgress.flags |= DidCapture;
|
|
|
cutOffTailIfNeeded(renderState, false); // If this is a newly suspended tree, it might not get committed as
|
|
|
// part of the second pass. In that case nothing will subscribe to
|
|
|
// its thenables. Instead, we'll transfer its thenables to the
|
|
|
// SuspenseList so that it can retry if they resolve.
|
|
|
// There might be multiple of these in the list but since we're
|
|
|
// going to wait for all of them anyway, it doesn't really matter
|
|
|
// which ones gets to ping. In theory we could get clever and keep
|
|
|
// track of how many dependencies remain but it gets tricky because
|
|
|
// in the meantime, we can add/remove/change items and dependencies.
|
|
|
// We might bail out of the loop before finding any but that
|
|
|
// doesn't matter since that means that the other boundaries that
|
|
|
// we did find already has their listeners attached.
|
|
|
|
|
|
var newThenables = suspended.updateQueue;
|
|
|
|
|
|
if (newThenables !== null) {
|
|
|
workInProgress.updateQueue = newThenables;
|
|
|
workInProgress.flags |= Update;
|
|
|
} // Rerender the whole list, but this time, we'll force fallbacks
|
|
|
// to stay in place.
|
|
|
// Reset the effect flags before doing the second pass since that's now invalid.
|
|
|
// Reset the child fibers to their original state.
|
|
|
|
|
|
|
|
|
workInProgress.subtreeFlags = NoFlags;
|
|
|
resetChildFibers(workInProgress, renderLanes); // Set up the Suspense Context to force suspense and immediately
|
|
|
// rerender the children.
|
|
|
|
|
|
pushSuspenseContext(workInProgress, setShallowSuspenseContext(suspenseStackCursor.current, ForceSuspenseFallback)); // Don't bubble properties in this case.
|
|
|
|
|
|
return workInProgress.child;
|
|
|
}
|
|
|
|
|
|
row = row.sibling;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (renderState.tail !== null && now() > getRenderTargetTime()) {
|
|
|
// We have already passed our CPU deadline but we still have rows
|
|
|
// left in the tail. We'll just give up further attempts to render
|
|
|
// the main content and only render fallbacks.
|
|
|
workInProgress.flags |= DidCapture;
|
|
|
didSuspendAlready = true;
|
|
|
cutOffTailIfNeeded(renderState, false); // Since nothing actually suspended, there will nothing to ping this
|
|
|
// to get it started back up to attempt the next item. While in terms
|
|
|
// of priority this work has the same priority as this current render,
|
|
|
// it's not part of the same transition once the transition has
|
|
|
// committed. If it's sync, we still want to yield so that it can be
|
|
|
// painted. Conceptually, this is really the same as pinging.
|
|
|
// We can use any RetryLane even if it's the one currently rendering
|
|
|
// since we're leaving it behind on this node.
|
|
|
|
|
|
workInProgress.lanes = SomeRetryLane;
|
|
|
}
|
|
|
} else {
|
|
|
cutOffTailIfNeeded(renderState, false);
|
|
|
} // Next we're going to render the tail.
|
|
|
|
|
|
} else {
|
|
|
// Append the rendered row to the child list.
|
|
|
if (!didSuspendAlready) {
|
|
|
var _suspended = findFirstSuspended(renderedTail);
|
|
|
|
|
|
if (_suspended !== null) {
|
|
|
workInProgress.flags |= DidCapture;
|
|
|
didSuspendAlready = true; // Ensure we transfer the update queue to the parent so that it doesn't
|
|
|
// get lost if this row ends up dropped during a second pass.
|
|
|
|
|
|
var _newThenables = _suspended.updateQueue;
|
|
|
|
|
|
if (_newThenables !== null) {
|
|
|
workInProgress.updateQueue = _newThenables;
|
|
|
workInProgress.flags |= Update;
|
|
|
}
|
|
|
|
|
|
cutOffTailIfNeeded(renderState, true); // This might have been modified.
|
|
|
|
|
|
if (renderState.tail === null && renderState.tailMode === 'hidden' && !renderedTail.alternate && !getIsHydrating() // We don't cut it if we're hydrating.
|
|
|
) {
|
|
|
// We're done.
|
|
|
bubbleProperties(workInProgress);
|
|
|
return null;
|
|
|
}
|
|
|
} else if ( // The time it took to render last row is greater than the remaining
|
|
|
// time we have to render. So rendering one more row would likely
|
|
|
// exceed it.
|
|
|
now() * 2 - renderState.renderingStartTime > getRenderTargetTime() && renderLanes !== OffscreenLane) {
|
|
|
// We have now passed our CPU deadline and we'll just give up further
|
|
|
// attempts to render the main content and only render fallbacks.
|
|
|
// The assumption is that this is usually faster.
|
|
|
workInProgress.flags |= DidCapture;
|
|
|
didSuspendAlready = true;
|
|
|
cutOffTailIfNeeded(renderState, false); // Since nothing actually suspended, there will nothing to ping this
|
|
|
// to get it started back up to attempt the next item. While in terms
|
|
|
// of priority this work has the same priority as this current render,
|
|
|
// it's not part of the same transition once the transition has
|
|
|
// committed. If it's sync, we still want to yield so that it can be
|
|
|
// painted. Conceptually, this is really the same as pinging.
|
|
|
// We can use any RetryLane even if it's the one currently rendering
|
|
|
// since we're leaving it behind on this node.
|
|
|
|
|
|
workInProgress.lanes = SomeRetryLane;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (renderState.isBackwards) {
|
|
|
// The effect list of the backwards tail will have been added
|
|
|
// to the end. This breaks the guarantee that life-cycles fire in
|
|
|
// sibling order but that isn't a strong guarantee promised by React.
|
|
|
// Especially since these might also just pop in during future commits.
|
|
|
// Append to the beginning of the list.
|
|
|
renderedTail.sibling = workInProgress.child;
|
|
|
workInProgress.child = renderedTail;
|
|
|
} else {
|
|
|
var previousSibling = renderState.last;
|
|
|
|
|
|
if (previousSibling !== null) {
|
|
|
previousSibling.sibling = renderedTail;
|
|
|
} else {
|
|
|
workInProgress.child = renderedTail;
|
|
|
}
|
|
|
|
|
|
renderState.last = renderedTail;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (renderState.tail !== null) {
|
|
|
// We still have tail rows to render.
|
|
|
// Pop a row.
|
|
|
var next = renderState.tail;
|
|
|
renderState.rendering = next;
|
|
|
renderState.tail = next.sibling;
|
|
|
renderState.renderingStartTime = now();
|
|
|
next.sibling = null; // Restore the context.
|
|
|
// TODO: We can probably just avoid popping it instead and only
|
|
|
// setting it the first time we go from not suspended to suspended.
|
|
|
|
|
|
var suspenseContext = suspenseStackCursor.current;
|
|
|
|
|
|
if (didSuspendAlready) {
|
|
|
suspenseContext = setShallowSuspenseContext(suspenseContext, ForceSuspenseFallback);
|
|
|
} else {
|
|
|
suspenseContext = setDefaultShallowSuspenseContext(suspenseContext);
|
|
|
}
|
|
|
|
|
|
pushSuspenseContext(workInProgress, suspenseContext); // Do a pass over the next row.
|
|
|
// Don't bubble properties in this case.
|
|
|
|
|
|
return next;
|
|
|
}
|
|
|
|
|
|
bubbleProperties(workInProgress);
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
case ScopeComponent:
|
|
|
{
|
|
|
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
case OffscreenComponent:
|
|
|
case LegacyHiddenComponent:
|
|
|
{
|
|
|
popRenderLanes(workInProgress);
|
|
|
var _nextState = workInProgress.memoizedState;
|
|
|
var nextIsHidden = _nextState !== null;
|
|
|
|
|
|
if (current !== null) {
|
|
|
var _prevState = current.memoizedState;
|
|
|
var prevIsHidden = _prevState !== null;
|
|
|
|
|
|
if (prevIsHidden !== nextIsHidden && ( // LegacyHidden doesn't do any hiding — it only pre-renders.
|
|
|
!enableLegacyHidden )) {
|
|
|
workInProgress.flags |= Visibility;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (!nextIsHidden || (workInProgress.mode & ConcurrentMode) === NoMode) {
|
|
|
bubbleProperties(workInProgress);
|
|
|
} else {
|
|
|
// Don't bubble properties for hidden children unless we're rendering
|
|
|
// at offscreen priority.
|
|
|
if (includesSomeLane(subtreeRenderLanes, OffscreenLane)) {
|
|
|
bubbleProperties(workInProgress);
|
|
|
|
|
|
{
|
|
|
// Check if there was an insertion or update in the hidden subtree.
|
|
|
// If so, we need to hide those nodes in the commit phase, so
|
|
|
// schedule a visibility effect.
|
|
|
if ( workInProgress.subtreeFlags & (Placement | Update)) {
|
|
|
workInProgress.flags |= Visibility;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
case CacheComponent:
|
|
|
{
|
|
|
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
case TracingMarkerComponent:
|
|
|
{
|
|
|
|
|
|
return null;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
throw new Error("Unknown unit of work tag (" + workInProgress.tag + "). This error is likely caused by a bug in " + 'React. Please file an issue.');
|
|
|
}
|
|
|
|
|
|
function unwindWork(current, workInProgress, renderLanes) {
|
|
|
// Note: This intentionally doesn't check if we're hydrating because comparing
|
|
|
// to the current tree provider fiber is just as fast and less error-prone.
|
|
|
// Ideally we would have a special version of the work loop only
|
|
|
// for hydration.
|
|
|
popTreeContext(workInProgress);
|
|
|
|
|
|
switch (workInProgress.tag) {
|
|
|
case ClassComponent:
|
|
|
{
|
|
|
var Component = workInProgress.type;
|
|
|
|
|
|
if (isContextProvider(Component)) {
|
|
|
popContext(workInProgress);
|
|
|
}
|
|
|
|
|
|
var flags = workInProgress.flags;
|
|
|
|
|
|
if (flags & ShouldCapture) {
|
|
|
workInProgress.flags = flags & ~ShouldCapture | DidCapture;
|
|
|
|
|
|
if ( (workInProgress.mode & ProfileMode) !== NoMode) {
|
|
|
transferActualDuration(workInProgress);
|
|
|
}
|
|
|
|
|
|
return workInProgress;
|
|
|
}
|
|
|
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
case HostRoot:
|
|
|
{
|
|
|
var root = workInProgress.stateNode;
|
|
|
popHostContainer(workInProgress);
|
|
|
popTopLevelContextObject(workInProgress);
|
|
|
resetWorkInProgressVersions();
|
|
|
var _flags = workInProgress.flags;
|
|
|
|
|
|
if ((_flags & ShouldCapture) !== NoFlags && (_flags & DidCapture) === NoFlags) {
|
|
|
// There was an error during render that wasn't captured by a suspense
|
|
|
// boundary. Do a second pass on the root to unmount the children.
|
|
|
workInProgress.flags = _flags & ~ShouldCapture | DidCapture;
|
|
|
return workInProgress;
|
|
|
} // We unwound to the root without completing it. Exit.
|
|
|
|
|
|
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
case HostComponent:
|
|
|
{
|
|
|
// TODO: popHydrationState
|
|
|
popHostContext(workInProgress);
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
case SuspenseComponent:
|
|
|
{
|
|
|
popSuspenseContext(workInProgress);
|
|
|
var suspenseState = workInProgress.memoizedState;
|
|
|
|
|
|
if (suspenseState !== null && suspenseState.dehydrated !== null) {
|
|
|
if (workInProgress.alternate === null) {
|
|
|
throw new Error('Threw in newly mounted dehydrated component. This is likely a bug in ' + 'React. Please file an issue.');
|
|
|
}
|
|
|
|
|
|
resetHydrationState();
|
|
|
}
|
|
|
|
|
|
var _flags2 = workInProgress.flags;
|
|
|
|
|
|
if (_flags2 & ShouldCapture) {
|
|
|
workInProgress.flags = _flags2 & ~ShouldCapture | DidCapture; // Captured a suspense effect. Re-render the boundary.
|
|
|
|
|
|
if ( (workInProgress.mode & ProfileMode) !== NoMode) {
|
|
|
transferActualDuration(workInProgress);
|
|
|
}
|
|
|
|
|
|
return workInProgress;
|
|
|
}
|
|
|
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
case SuspenseListComponent:
|
|
|
{
|
|
|
popSuspenseContext(workInProgress); // SuspenseList doesn't actually catch anything. It should've been
|
|
|
// caught by a nested boundary. If not, it should bubble through.
|
|
|
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
case HostPortal:
|
|
|
popHostContainer(workInProgress);
|
|
|
return null;
|
|
|
|
|
|
case ContextProvider:
|
|
|
var context = workInProgress.type._context;
|
|
|
popProvider(context, workInProgress);
|
|
|
return null;
|
|
|
|
|
|
case OffscreenComponent:
|
|
|
case LegacyHiddenComponent:
|
|
|
popRenderLanes(workInProgress);
|
|
|
return null;
|
|
|
|
|
|
case CacheComponent:
|
|
|
|
|
|
return null;
|
|
|
|
|
|
default:
|
|
|
return null;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function unwindInterruptedWork(current, interruptedWork, renderLanes) {
|
|
|
// Note: This intentionally doesn't check if we're hydrating because comparing
|
|
|
// to the current tree provider fiber is just as fast and less error-prone.
|
|
|
// Ideally we would have a special version of the work loop only
|
|
|
// for hydration.
|
|
|
popTreeContext(interruptedWork);
|
|
|
|
|
|
switch (interruptedWork.tag) {
|
|
|
case ClassComponent:
|
|
|
{
|
|
|
var childContextTypes = interruptedWork.type.childContextTypes;
|
|
|
|
|
|
if (childContextTypes !== null && childContextTypes !== undefined) {
|
|
|
popContext(interruptedWork);
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
case HostRoot:
|
|
|
{
|
|
|
var root = interruptedWork.stateNode;
|
|
|
popHostContainer(interruptedWork);
|
|
|
popTopLevelContextObject(interruptedWork);
|
|
|
resetWorkInProgressVersions();
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
case HostComponent:
|
|
|
{
|
|
|
popHostContext(interruptedWork);
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
case HostPortal:
|
|
|
popHostContainer(interruptedWork);
|
|
|
break;
|
|
|
|
|
|
case SuspenseComponent:
|
|
|
popSuspenseContext(interruptedWork);
|
|
|
break;
|
|
|
|
|
|
case SuspenseListComponent:
|
|
|
popSuspenseContext(interruptedWork);
|
|
|
break;
|
|
|
|
|
|
case ContextProvider:
|
|
|
var context = interruptedWork.type._context;
|
|
|
popProvider(context, interruptedWork);
|
|
|
break;
|
|
|
|
|
|
case OffscreenComponent:
|
|
|
case LegacyHiddenComponent:
|
|
|
popRenderLanes(interruptedWork);
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var didWarnAboutUndefinedSnapshotBeforeUpdate = null;
|
|
|
|
|
|
{
|
|
|
didWarnAboutUndefinedSnapshotBeforeUpdate = new Set();
|
|
|
} // Used during the commit phase to track the state of the Offscreen component stack.
|
|
|
// Allows us to avoid traversing the return path to find the nearest Offscreen ancestor.
|
|
|
// Only used when enableSuspenseLayoutEffectSemantics is enabled.
|
|
|
|
|
|
|
|
|
var offscreenSubtreeIsHidden = false;
|
|
|
var offscreenSubtreeWasHidden = false;
|
|
|
var PossiblyWeakSet = typeof WeakSet === 'function' ? WeakSet : Set;
|
|
|
var nextEffect = null; // Used for Profiling builds to track updaters.
|
|
|
|
|
|
var inProgressLanes = null;
|
|
|
var inProgressRoot = null;
|
|
|
function reportUncaughtErrorInDEV(error) {
|
|
|
// Wrapping each small part of the commit phase into a guarded
|
|
|
// callback is a bit too slow (https://github.com/facebook/react/pull/21666).
|
|
|
// But we rely on it to surface errors to DEV tools like overlays
|
|
|
// (https://github.com/facebook/react/issues/21712).
|
|
|
// As a compromise, rethrow only caught errors in a guard.
|
|
|
{
|
|
|
invokeGuardedCallback(null, function () {
|
|
|
throw error;
|
|
|
});
|
|
|
clearCaughtError();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var callComponentWillUnmountWithTimer = function (current, instance) {
|
|
|
instance.props = current.memoizedProps;
|
|
|
instance.state = current.memoizedState;
|
|
|
|
|
|
if ( current.mode & ProfileMode) {
|
|
|
try {
|
|
|
startLayoutEffectTimer();
|
|
|
instance.componentWillUnmount();
|
|
|
} finally {
|
|
|
recordLayoutEffectDuration(current);
|
|
|
}
|
|
|
} else {
|
|
|
instance.componentWillUnmount();
|
|
|
}
|
|
|
}; // Capture errors so they don't interrupt mounting.
|
|
|
|
|
|
|
|
|
function safelyCallCommitHookLayoutEffectListMount(current, nearestMountedAncestor) {
|
|
|
try {
|
|
|
commitHookEffectListMount(Layout, current);
|
|
|
} catch (error) {
|
|
|
captureCommitPhaseError(current, nearestMountedAncestor, error);
|
|
|
}
|
|
|
} // Capture errors so they don't interrupt unmounting.
|
|
|
|
|
|
|
|
|
function safelyCallComponentWillUnmount(current, nearestMountedAncestor, instance) {
|
|
|
try {
|
|
|
callComponentWillUnmountWithTimer(current, instance);
|
|
|
} catch (error) {
|
|
|
captureCommitPhaseError(current, nearestMountedAncestor, error);
|
|
|
}
|
|
|
} // Capture errors so they don't interrupt mounting.
|
|
|
|
|
|
|
|
|
function safelyCallComponentDidMount(current, nearestMountedAncestor, instance) {
|
|
|
try {
|
|
|
instance.componentDidMount();
|
|
|
} catch (error) {
|
|
|
captureCommitPhaseError(current, nearestMountedAncestor, error);
|
|
|
}
|
|
|
} // Capture errors so they don't interrupt mounting.
|
|
|
|
|
|
|
|
|
function safelyAttachRef(current, nearestMountedAncestor) {
|
|
|
try {
|
|
|
commitAttachRef(current);
|
|
|
} catch (error) {
|
|
|
captureCommitPhaseError(current, nearestMountedAncestor, error);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function safelyDetachRef(current, nearestMountedAncestor) {
|
|
|
var ref = current.ref;
|
|
|
|
|
|
if (ref !== null) {
|
|
|
if (typeof ref === 'function') {
|
|
|
var retVal;
|
|
|
|
|
|
try {
|
|
|
if (enableProfilerTimer && enableProfilerCommitHooks && current.mode & ProfileMode) {
|
|
|
try {
|
|
|
startLayoutEffectTimer();
|
|
|
retVal = ref(null);
|
|
|
} finally {
|
|
|
recordLayoutEffectDuration(current);
|
|
|
}
|
|
|
} else {
|
|
|
retVal = ref(null);
|
|
|
}
|
|
|
} catch (error) {
|
|
|
captureCommitPhaseError(current, nearestMountedAncestor, error);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
if (typeof retVal === 'function') {
|
|
|
error('Unexpected return value from a callback ref in %s. ' + 'A callback ref should not return a function.', getComponentNameFromFiber(current));
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
|
ref.current = null;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function safelyCallDestroy(current, nearestMountedAncestor, destroy) {
|
|
|
try {
|
|
|
destroy();
|
|
|
} catch (error) {
|
|
|
captureCommitPhaseError(current, nearestMountedAncestor, error);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var focusedInstanceHandle = null;
|
|
|
var shouldFireAfterActiveInstanceBlur = false;
|
|
|
function commitBeforeMutationEffects(root, firstChild) {
|
|
|
focusedInstanceHandle = prepareForCommit(root.containerInfo);
|
|
|
nextEffect = firstChild;
|
|
|
commitBeforeMutationEffects_begin(); // We no longer need to track the active instance fiber
|
|
|
|
|
|
var shouldFire = shouldFireAfterActiveInstanceBlur;
|
|
|
shouldFireAfterActiveInstanceBlur = false;
|
|
|
focusedInstanceHandle = null;
|
|
|
return shouldFire;
|
|
|
}
|
|
|
|
|
|
function commitBeforeMutationEffects_begin() {
|
|
|
while (nextEffect !== null) {
|
|
|
var fiber = nextEffect; // This phase is only used for beforeActiveInstanceBlur.
|
|
|
|
|
|
var child = fiber.child;
|
|
|
|
|
|
if ((fiber.subtreeFlags & BeforeMutationMask) !== NoFlags && child !== null) {
|
|
|
child.return = fiber;
|
|
|
nextEffect = child;
|
|
|
} else {
|
|
|
commitBeforeMutationEffects_complete();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function commitBeforeMutationEffects_complete() {
|
|
|
while (nextEffect !== null) {
|
|
|
var fiber = nextEffect;
|
|
|
setCurrentFiber(fiber);
|
|
|
|
|
|
try {
|
|
|
commitBeforeMutationEffectsOnFiber(fiber);
|
|
|
} catch (error) {
|
|
|
captureCommitPhaseError(fiber, fiber.return, error);
|
|
|
}
|
|
|
|
|
|
resetCurrentFiber();
|
|
|
var sibling = fiber.sibling;
|
|
|
|
|
|
if (sibling !== null) {
|
|
|
sibling.return = fiber.return;
|
|
|
nextEffect = sibling;
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
nextEffect = fiber.return;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function commitBeforeMutationEffectsOnFiber(finishedWork) {
|
|
|
var current = finishedWork.alternate;
|
|
|
var flags = finishedWork.flags;
|
|
|
|
|
|
if ((flags & Snapshot) !== NoFlags) {
|
|
|
setCurrentFiber(finishedWork);
|
|
|
|
|
|
switch (finishedWork.tag) {
|
|
|
case FunctionComponent:
|
|
|
case ForwardRef:
|
|
|
case SimpleMemoComponent:
|
|
|
{
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
case ClassComponent:
|
|
|
{
|
|
|
if (current !== null) {
|
|
|
var prevProps = current.memoizedProps;
|
|
|
var prevState = current.memoizedState;
|
|
|
var instance = finishedWork.stateNode; // We could update instance props and state here,
|
|
|
// but instead we rely on them being set during last render.
|
|
|
// TODO: revisit this when we implement resuming.
|
|
|
|
|
|
{
|
|
|
if (finishedWork.type === finishedWork.elementType && !didWarnAboutReassigningProps) {
|
|
|
if (instance.props !== finishedWork.memoizedProps) {
|
|
|
error('Expected %s props to match memoized props before ' + 'getSnapshotBeforeUpdate. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentNameFromFiber(finishedWork) || 'instance');
|
|
|
}
|
|
|
|
|
|
if (instance.state !== finishedWork.memoizedState) {
|
|
|
error('Expected %s state to match memoized state before ' + 'getSnapshotBeforeUpdate. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.state`. ' + 'Please file an issue.', getComponentNameFromFiber(finishedWork) || 'instance');
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var snapshot = instance.getSnapshotBeforeUpdate(finishedWork.elementType === finishedWork.type ? prevProps : resolveDefaultProps(finishedWork.type, prevProps), prevState);
|
|
|
|
|
|
{
|
|
|
var didWarnSet = didWarnAboutUndefinedSnapshotBeforeUpdate;
|
|
|
|
|
|
if (snapshot === undefined && !didWarnSet.has(finishedWork.type)) {
|
|
|
didWarnSet.add(finishedWork.type);
|
|
|
|
|
|
error('%s.getSnapshotBeforeUpdate(): A snapshot value (or null) ' + 'must be returned. You have returned undefined.', getComponentNameFromFiber(finishedWork));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
instance.__reactInternalSnapshotBeforeUpdate = snapshot;
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
case HostRoot:
|
|
|
{
|
|
|
{
|
|
|
var root = finishedWork.stateNode;
|
|
|
clearContainer(root.containerInfo);
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
case HostComponent:
|
|
|
case HostText:
|
|
|
case HostPortal:
|
|
|
case IncompleteClassComponent:
|
|
|
// Nothing to do for these component types
|
|
|
break;
|
|
|
|
|
|
default:
|
|
|
{
|
|
|
throw new Error('This unit of work tag should not have side-effects. This error is ' + 'likely caused by a bug in React. Please file an issue.');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
resetCurrentFiber();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function commitHookEffectListUnmount(flags, finishedWork, nearestMountedAncestor) {
|
|
|
var updateQueue = finishedWork.updateQueue;
|
|
|
var lastEffect = updateQueue !== null ? updateQueue.lastEffect : null;
|
|
|
|
|
|
if (lastEffect !== null) {
|
|
|
var firstEffect = lastEffect.next;
|
|
|
var effect = firstEffect;
|
|
|
|
|
|
do {
|
|
|
if ((effect.tag & flags) === flags) {
|
|
|
// Unmount
|
|
|
var destroy = effect.destroy;
|
|
|
effect.destroy = undefined;
|
|
|
|
|
|
if (destroy !== undefined) {
|
|
|
{
|
|
|
if ((flags & Passive$1) !== NoFlags$1) {
|
|
|
markComponentPassiveEffectUnmountStarted(finishedWork);
|
|
|
} else if ((flags & Layout) !== NoFlags$1) {
|
|
|
markComponentLayoutEffectUnmountStarted(finishedWork);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
{
|
|
|
if ((flags & Insertion) !== NoFlags$1) {
|
|
|
setIsRunningInsertionEffect(true);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
safelyCallDestroy(finishedWork, nearestMountedAncestor, destroy);
|
|
|
|
|
|
{
|
|
|
if ((flags & Insertion) !== NoFlags$1) {
|
|
|
setIsRunningInsertionEffect(false);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
{
|
|
|
if ((flags & Passive$1) !== NoFlags$1) {
|
|
|
markComponentPassiveEffectUnmountStopped();
|
|
|
} else if ((flags & Layout) !== NoFlags$1) {
|
|
|
markComponentLayoutEffectUnmountStopped();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
effect = effect.next;
|
|
|
} while (effect !== firstEffect);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function commitHookEffectListMount(flags, finishedWork) {
|
|
|
var updateQueue = finishedWork.updateQueue;
|
|
|
var lastEffect = updateQueue !== null ? updateQueue.lastEffect : null;
|
|
|
|
|
|
if (lastEffect !== null) {
|
|
|
var firstEffect = lastEffect.next;
|
|
|
var effect = firstEffect;
|
|
|
|
|
|
do {
|
|
|
if ((effect.tag & flags) === flags) {
|
|
|
{
|
|
|
if ((flags & Passive$1) !== NoFlags$1) {
|
|
|
markComponentPassiveEffectMountStarted(finishedWork);
|
|
|
} else if ((flags & Layout) !== NoFlags$1) {
|
|
|
markComponentLayoutEffectMountStarted(finishedWork);
|
|
|
}
|
|
|
} // Mount
|
|
|
|
|
|
|
|
|
var create = effect.create;
|
|
|
|
|
|
{
|
|
|
if ((flags & Insertion) !== NoFlags$1) {
|
|
|
setIsRunningInsertionEffect(true);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
effect.destroy = create();
|
|
|
|
|
|
{
|
|
|
if ((flags & Insertion) !== NoFlags$1) {
|
|
|
setIsRunningInsertionEffect(false);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
{
|
|
|
if ((flags & Passive$1) !== NoFlags$1) {
|
|
|
markComponentPassiveEffectMountStopped();
|
|
|
} else if ((flags & Layout) !== NoFlags$1) {
|
|
|
markComponentLayoutEffectMountStopped();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
{
|
|
|
var destroy = effect.destroy;
|
|
|
|
|
|
if (destroy !== undefined && typeof destroy !== 'function') {
|
|
|
var hookName = void 0;
|
|
|
|
|
|
if ((effect.tag & Layout) !== NoFlags) {
|
|
|
hookName = 'useLayoutEffect';
|
|
|
} else if ((effect.tag & Insertion) !== NoFlags) {
|
|
|
hookName = 'useInsertionEffect';
|
|
|
} else {
|
|
|
hookName = 'useEffect';
|
|
|
}
|
|
|
|
|
|
var addendum = void 0;
|
|
|
|
|
|
if (destroy === null) {
|
|
|
addendum = ' You returned null. If your effect does not require clean ' + 'up, return undefined (or nothing).';
|
|
|
} else if (typeof destroy.then === 'function') {
|
|
|
addendum = '\n\nIt looks like you wrote ' + hookName + '(async () => ...) or returned a Promise. ' + 'Instead, write the async function inside your effect ' + 'and call it immediately:\n\n' + hookName + '(() => {\n' + ' async function fetchData() {\n' + ' // You can await here\n' + ' const response = await MyAPI.getData(someId);\n' + ' // ...\n' + ' }\n' + ' fetchData();\n' + "}, [someId]); // Or [] if effect doesn't need props or state\n\n" + 'Learn more about data fetching with Hooks: https://reactjs.org/link/hooks-data-fetching';
|
|
|
} else {
|
|
|
addendum = ' You returned: ' + destroy;
|
|
|
}
|
|
|
|
|
|
error('%s must not return anything besides a function, ' + 'which is used for clean-up.%s', hookName, addendum);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
effect = effect.next;
|
|
|
} while (effect !== firstEffect);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function commitPassiveEffectDurations(finishedRoot, finishedWork) {
|
|
|
{
|
|
|
// Only Profilers with work in their subtree will have an Update effect scheduled.
|
|
|
if ((finishedWork.flags & Update) !== NoFlags) {
|
|
|
switch (finishedWork.tag) {
|
|
|
case Profiler:
|
|
|
{
|
|
|
var passiveEffectDuration = finishedWork.stateNode.passiveEffectDuration;
|
|
|
var _finishedWork$memoize = finishedWork.memoizedProps,
|
|
|
id = _finishedWork$memoize.id,
|
|
|
onPostCommit = _finishedWork$memoize.onPostCommit; // This value will still reflect the previous commit phase.
|
|
|
// It does not get reset until the start of the next commit phase.
|
|
|
|
|
|
var commitTime = getCommitTime();
|
|
|
var phase = finishedWork.alternate === null ? 'mount' : 'update';
|
|
|
|
|
|
{
|
|
|
if (isCurrentUpdateNested()) {
|
|
|
phase = 'nested-update';
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (typeof onPostCommit === 'function') {
|
|
|
onPostCommit(id, phase, passiveEffectDuration, commitTime);
|
|
|
} // Bubble times to the next nearest ancestor Profiler.
|
|
|
// After we process that Profiler, we'll bubble further up.
|
|
|
|
|
|
|
|
|
var parentFiber = finishedWork.return;
|
|
|
|
|
|
outer: while (parentFiber !== null) {
|
|
|
switch (parentFiber.tag) {
|
|
|
case HostRoot:
|
|
|
var root = parentFiber.stateNode;
|
|
|
root.passiveEffectDuration += passiveEffectDuration;
|
|
|
break outer;
|
|
|
|
|
|
case Profiler:
|
|
|
var parentStateNode = parentFiber.stateNode;
|
|
|
parentStateNode.passiveEffectDuration += passiveEffectDuration;
|
|
|
break outer;
|
|
|
}
|
|
|
|
|
|
parentFiber = parentFiber.return;
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function commitLayoutEffectOnFiber(finishedRoot, current, finishedWork, committedLanes) {
|
|
|
if ((finishedWork.flags & LayoutMask) !== NoFlags) {
|
|
|
switch (finishedWork.tag) {
|
|
|
case FunctionComponent:
|
|
|
case ForwardRef:
|
|
|
case SimpleMemoComponent:
|
|
|
{
|
|
|
if ( !offscreenSubtreeWasHidden) {
|
|
|
// At this point layout effects have already been destroyed (during mutation phase).
|
|
|
// This is done to prevent sibling component effects from interfering with each other,
|
|
|
// e.g. a destroy function in one component should never override a ref set
|
|
|
// by a create function in another component during the same commit.
|
|
|
if ( finishedWork.mode & ProfileMode) {
|
|
|
try {
|
|
|
startLayoutEffectTimer();
|
|
|
commitHookEffectListMount(Layout | HasEffect, finishedWork);
|
|
|
} finally {
|
|
|
recordLayoutEffectDuration(finishedWork);
|
|
|
}
|
|
|
} else {
|
|
|
commitHookEffectListMount(Layout | HasEffect, finishedWork);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
case ClassComponent:
|
|
|
{
|
|
|
var instance = finishedWork.stateNode;
|
|
|
|
|
|
if (finishedWork.flags & Update) {
|
|
|
if (!offscreenSubtreeWasHidden) {
|
|
|
if (current === null) {
|
|
|
// We could update instance props and state here,
|
|
|
// but instead we rely on them being set during last render.
|
|
|
// TODO: revisit this when we implement resuming.
|
|
|
{
|
|
|
if (finishedWork.type === finishedWork.elementType && !didWarnAboutReassigningProps) {
|
|
|
if (instance.props !== finishedWork.memoizedProps) {
|
|
|
error('Expected %s props to match memoized props before ' + 'componentDidMount. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentNameFromFiber(finishedWork) || 'instance');
|
|
|
}
|
|
|
|
|
|
if (instance.state !== finishedWork.memoizedState) {
|
|
|
error('Expected %s state to match memoized state before ' + 'componentDidMount. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.state`. ' + 'Please file an issue.', getComponentNameFromFiber(finishedWork) || 'instance');
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if ( finishedWork.mode & ProfileMode) {
|
|
|
try {
|
|
|
startLayoutEffectTimer();
|
|
|
instance.componentDidMount();
|
|
|
} finally {
|
|
|
recordLayoutEffectDuration(finishedWork);
|
|
|
}
|
|
|
} else {
|
|
|
instance.componentDidMount();
|
|
|
}
|
|
|
} else {
|
|
|
var prevProps = finishedWork.elementType === finishedWork.type ? current.memoizedProps : resolveDefaultProps(finishedWork.type, current.memoizedProps);
|
|
|
var prevState = current.memoizedState; // We could update instance props and state here,
|
|
|
// but instead we rely on them being set during last render.
|
|
|
// TODO: revisit this when we implement resuming.
|
|
|
|
|
|
{
|
|
|
if (finishedWork.type === finishedWork.elementType && !didWarnAboutReassigningProps) {
|
|
|
if (instance.props !== finishedWork.memoizedProps) {
|
|
|
error('Expected %s props to match memoized props before ' + 'componentDidUpdate. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentNameFromFiber(finishedWork) || 'instance');
|
|
|
}
|
|
|
|
|
|
if (instance.state !== finishedWork.memoizedState) {
|
|
|
error('Expected %s state to match memoized state before ' + 'componentDidUpdate. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.state`. ' + 'Please file an issue.', getComponentNameFromFiber(finishedWork) || 'instance');
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if ( finishedWork.mode & ProfileMode) {
|
|
|
try {
|
|
|
startLayoutEffectTimer();
|
|
|
instance.componentDidUpdate(prevProps, prevState, instance.__reactInternalSnapshotBeforeUpdate);
|
|
|
} finally {
|
|
|
recordLayoutEffectDuration(finishedWork);
|
|
|
}
|
|
|
} else {
|
|
|
instance.componentDidUpdate(prevProps, prevState, instance.__reactInternalSnapshotBeforeUpdate);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
} // TODO: I think this is now always non-null by the time it reaches the
|
|
|
// commit phase. Consider removing the type check.
|
|
|
|
|
|
|
|
|
var updateQueue = finishedWork.updateQueue;
|
|
|
|
|
|
if (updateQueue !== null) {
|
|
|
{
|
|
|
if (finishedWork.type === finishedWork.elementType && !didWarnAboutReassigningProps) {
|
|
|
if (instance.props !== finishedWork.memoizedProps) {
|
|
|
error('Expected %s props to match memoized props before ' + 'processing the update queue. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentNameFromFiber(finishedWork) || 'instance');
|
|
|
}
|
|
|
|
|
|
if (instance.state !== finishedWork.memoizedState) {
|
|
|
error('Expected %s state to match memoized state before ' + 'processing the update queue. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.state`. ' + 'Please file an issue.', getComponentNameFromFiber(finishedWork) || 'instance');
|
|
|
}
|
|
|
}
|
|
|
} // We could update instance props and state here,
|
|
|
// but instead we rely on them being set during last render.
|
|
|
// TODO: revisit this when we implement resuming.
|
|
|
|
|
|
|
|
|
commitUpdateQueue(finishedWork, updateQueue, instance);
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
case HostRoot:
|
|
|
{
|
|
|
// TODO: I think this is now always non-null by the time it reaches the
|
|
|
// commit phase. Consider removing the type check.
|
|
|
var _updateQueue = finishedWork.updateQueue;
|
|
|
|
|
|
if (_updateQueue !== null) {
|
|
|
var _instance = null;
|
|
|
|
|
|
if (finishedWork.child !== null) {
|
|
|
switch (finishedWork.child.tag) {
|
|
|
case HostComponent:
|
|
|
_instance = getPublicInstance(finishedWork.child.stateNode);
|
|
|
break;
|
|
|
|
|
|
case ClassComponent:
|
|
|
_instance = finishedWork.child.stateNode;
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
commitUpdateQueue(finishedWork, _updateQueue, _instance);
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
case HostComponent:
|
|
|
{
|
|
|
var _instance2 = finishedWork.stateNode; // Renderers may schedule work to be done after host components are mounted
|
|
|
// (eg DOM renderer may schedule auto-focus for inputs and form controls).
|
|
|
// These effects should only be committed when components are first mounted,
|
|
|
// aka when there is no current/alternate.
|
|
|
|
|
|
if (current === null && finishedWork.flags & Update) {
|
|
|
var type = finishedWork.type;
|
|
|
var props = finishedWork.memoizedProps;
|
|
|
commitMount(_instance2, type, props);
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
case HostText:
|
|
|
{
|
|
|
// We have no life-cycles associated with text.
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
case HostPortal:
|
|
|
{
|
|
|
// We have no life-cycles associated with portals.
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
case Profiler:
|
|
|
{
|
|
|
{
|
|
|
var _finishedWork$memoize2 = finishedWork.memoizedProps,
|
|
|
onCommit = _finishedWork$memoize2.onCommit,
|
|
|
onRender = _finishedWork$memoize2.onRender;
|
|
|
var effectDuration = finishedWork.stateNode.effectDuration;
|
|
|
var commitTime = getCommitTime();
|
|
|
var phase = current === null ? 'mount' : 'update';
|
|
|
|
|
|
{
|
|
|
if (isCurrentUpdateNested()) {
|
|
|
phase = 'nested-update';
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (typeof onRender === 'function') {
|
|
|
onRender(finishedWork.memoizedProps.id, phase, finishedWork.actualDuration, finishedWork.treeBaseDuration, finishedWork.actualStartTime, commitTime);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
if (typeof onCommit === 'function') {
|
|
|
onCommit(finishedWork.memoizedProps.id, phase, effectDuration, commitTime);
|
|
|
} // Schedule a passive effect for this Profiler to call onPostCommit hooks.
|
|
|
// This effect should be scheduled even if there is no onPostCommit callback for this Profiler,
|
|
|
// because the effect is also where times bubble to parent Profilers.
|
|
|
|
|
|
|
|
|
enqueuePendingPassiveProfilerEffect(finishedWork); // Propagate layout effect durations to the next nearest Profiler ancestor.
|
|
|
// Do not reset these values until the next render so DevTools has a chance to read them first.
|
|
|
|
|
|
var parentFiber = finishedWork.return;
|
|
|
|
|
|
outer: while (parentFiber !== null) {
|
|
|
switch (parentFiber.tag) {
|
|
|
case HostRoot:
|
|
|
var root = parentFiber.stateNode;
|
|
|
root.effectDuration += effectDuration;
|
|
|
break outer;
|
|
|
|
|
|
case Profiler:
|
|
|
var parentStateNode = parentFiber.stateNode;
|
|
|
parentStateNode.effectDuration += effectDuration;
|
|
|
break outer;
|
|
|
}
|
|
|
|
|
|
parentFiber = parentFiber.return;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
case SuspenseComponent:
|
|
|
{
|
|
|
commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
case SuspenseListComponent:
|
|
|
case IncompleteClassComponent:
|
|
|
case ScopeComponent:
|
|
|
case OffscreenComponent:
|
|
|
case LegacyHiddenComponent:
|
|
|
case TracingMarkerComponent:
|
|
|
{
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
default:
|
|
|
throw new Error('This unit of work tag should not have side-effects. This error is ' + 'likely caused by a bug in React. Please file an issue.');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if ( !offscreenSubtreeWasHidden) {
|
|
|
{
|
|
|
if (finishedWork.flags & Ref) {
|
|
|
commitAttachRef(finishedWork);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function reappearLayoutEffectsOnFiber(node) {
|
|
|
// Turn on layout effects in a tree that previously disappeared.
|
|
|
// TODO (Offscreen) Check: flags & LayoutStatic
|
|
|
switch (node.tag) {
|
|
|
case FunctionComponent:
|
|
|
case ForwardRef:
|
|
|
case SimpleMemoComponent:
|
|
|
{
|
|
|
if ( node.mode & ProfileMode) {
|
|
|
try {
|
|
|
startLayoutEffectTimer();
|
|
|
safelyCallCommitHookLayoutEffectListMount(node, node.return);
|
|
|
} finally {
|
|
|
recordLayoutEffectDuration(node);
|
|
|
}
|
|
|
} else {
|
|
|
safelyCallCommitHookLayoutEffectListMount(node, node.return);
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
case ClassComponent:
|
|
|
{
|
|
|
var instance = node.stateNode;
|
|
|
|
|
|
if (typeof instance.componentDidMount === 'function') {
|
|
|
safelyCallComponentDidMount(node, node.return, instance);
|
|
|
}
|
|
|
|
|
|
safelyAttachRef(node, node.return);
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
case HostComponent:
|
|
|
{
|
|
|
safelyAttachRef(node, node.return);
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function hideOrUnhideAllChildren(finishedWork, isHidden) {
|
|
|
// Only hide or unhide the top-most host nodes.
|
|
|
var hostSubtreeRoot = null;
|
|
|
|
|
|
{
|
|
|
// We only have the top Fiber that was inserted but we need to recurse down its
|
|
|
// children to find all the terminal nodes.
|
|
|
var node = finishedWork;
|
|
|
|
|
|
while (true) {
|
|
|
if (node.tag === HostComponent) {
|
|
|
if (hostSubtreeRoot === null) {
|
|
|
hostSubtreeRoot = node;
|
|
|
|
|
|
try {
|
|
|
var instance = node.stateNode;
|
|
|
|
|
|
if (isHidden) {
|
|
|
hideInstance(instance);
|
|
|
} else {
|
|
|
unhideInstance(node.stateNode, node.memoizedProps);
|
|
|
}
|
|
|
} catch (error) {
|
|
|
captureCommitPhaseError(finishedWork, finishedWork.return, error);
|
|
|
}
|
|
|
}
|
|
|
} else if (node.tag === HostText) {
|
|
|
if (hostSubtreeRoot === null) {
|
|
|
try {
|
|
|
var _instance3 = node.stateNode;
|
|
|
|
|
|
if (isHidden) {
|
|
|
hideTextInstance(_instance3);
|
|
|
} else {
|
|
|
unhideTextInstance(_instance3, node.memoizedProps);
|
|
|
}
|
|
|
} catch (error) {
|
|
|
captureCommitPhaseError(finishedWork, finishedWork.return, error);
|
|
|
}
|
|
|
}
|
|
|
} else if ((node.tag === OffscreenComponent || node.tag === LegacyHiddenComponent) && node.memoizedState !== null && node !== finishedWork) ; else if (node.child !== null) {
|
|
|
node.child.return = node;
|
|
|
node = node.child;
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
if (node === finishedWork) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
while (node.sibling === null) {
|
|
|
if (node.return === null || node.return === finishedWork) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (hostSubtreeRoot === node) {
|
|
|
hostSubtreeRoot = null;
|
|
|
}
|
|
|
|
|
|
node = node.return;
|
|
|
}
|
|
|
|
|
|
if (hostSubtreeRoot === node) {
|
|
|
hostSubtreeRoot = null;
|
|
|
}
|
|
|
|
|
|
node.sibling.return = node.return;
|
|
|
node = node.sibling;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function commitAttachRef(finishedWork) {
|
|
|
var ref = finishedWork.ref;
|
|
|
|
|
|
if (ref !== null) {
|
|
|
var instance = finishedWork.stateNode;
|
|
|
var instanceToUse;
|
|
|
|
|
|
switch (finishedWork.tag) {
|
|
|
case HostComponent:
|
|
|
instanceToUse = getPublicInstance(instance);
|
|
|
break;
|
|
|
|
|
|
default:
|
|
|
instanceToUse = instance;
|
|
|
} // Moved outside to ensure DCE works with this flag
|
|
|
|
|
|
if (typeof ref === 'function') {
|
|
|
var retVal;
|
|
|
|
|
|
if ( finishedWork.mode & ProfileMode) {
|
|
|
try {
|
|
|
startLayoutEffectTimer();
|
|
|
retVal = ref(instanceToUse);
|
|
|
} finally {
|
|
|
recordLayoutEffectDuration(finishedWork);
|
|
|
}
|
|
|
} else {
|
|
|
retVal = ref(instanceToUse);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
if (typeof retVal === 'function') {
|
|
|
error('Unexpected return value from a callback ref in %s. ' + 'A callback ref should not return a function.', getComponentNameFromFiber(finishedWork));
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
|
{
|
|
|
if (!ref.hasOwnProperty('current')) {
|
|
|
error('Unexpected ref object provided for %s. ' + 'Use either a ref-setter function or React.createRef().', getComponentNameFromFiber(finishedWork));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
ref.current = instanceToUse;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function detachFiberMutation(fiber) {
|
|
|
// Cut off the return pointer to disconnect it from the tree.
|
|
|
// This enables us to detect and warn against state updates on an unmounted component.
|
|
|
// It also prevents events from bubbling from within disconnected components.
|
|
|
//
|
|
|
// Ideally, we should also clear the child pointer of the parent alternate to let this
|
|
|
// get GC:ed but we don't know which for sure which parent is the current
|
|
|
// one so we'll settle for GC:ing the subtree of this child.
|
|
|
// This child itself will be GC:ed when the parent updates the next time.
|
|
|
//
|
|
|
// Note that we can't clear child or sibling pointers yet.
|
|
|
// They're needed for passive effects and for findDOMNode.
|
|
|
// We defer those fields, and all other cleanup, to the passive phase (see detachFiberAfterEffects).
|
|
|
//
|
|
|
// Don't reset the alternate yet, either. We need that so we can detach the
|
|
|
// alternate's fields in the passive phase. Clearing the return pointer is
|
|
|
// sufficient for findDOMNode semantics.
|
|
|
var alternate = fiber.alternate;
|
|
|
|
|
|
if (alternate !== null) {
|
|
|
alternate.return = null;
|
|
|
}
|
|
|
|
|
|
fiber.return = null;
|
|
|
}
|
|
|
|
|
|
function detachFiberAfterEffects(fiber) {
|
|
|
var alternate = fiber.alternate;
|
|
|
|
|
|
if (alternate !== null) {
|
|
|
fiber.alternate = null;
|
|
|
detachFiberAfterEffects(alternate);
|
|
|
} // Note: Defensively using negation instead of < in case
|
|
|
// `deletedTreeCleanUpLevel` is undefined.
|
|
|
|
|
|
|
|
|
{
|
|
|
// Clear cyclical Fiber fields. This level alone is designed to roughly
|
|
|
// approximate the planned Fiber refactor. In that world, `setState` will be
|
|
|
// bound to a special "instance" object instead of a Fiber. The Instance
|
|
|
// object will not have any of these fields. It will only be connected to
|
|
|
// the fiber tree via a single link at the root. So if this level alone is
|
|
|
// sufficient to fix memory issues, that bodes well for our plans.
|
|
|
fiber.child = null;
|
|
|
fiber.deletions = null;
|
|
|
fiber.sibling = null; // The `stateNode` is cyclical because on host nodes it points to the host
|
|
|
// tree, which has its own pointers to children, parents, and siblings.
|
|
|
// The other host nodes also point back to fibers, so we should detach that
|
|
|
// one, too.
|
|
|
|
|
|
if (fiber.tag === HostComponent) {
|
|
|
var hostInstance = fiber.stateNode;
|
|
|
|
|
|
if (hostInstance !== null) {
|
|
|
detachDeletedInstance(hostInstance);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
fiber.stateNode = null; // I'm intentionally not clearing the `return` field in this level. We
|
|
|
// already disconnect the `return` pointer at the root of the deleted
|
|
|
// subtree (in `detachFiberMutation`). Besides, `return` by itself is not
|
|
|
// cyclical — it's only cyclical when combined with `child`, `sibling`, and
|
|
|
// `alternate`. But we'll clear it in the next level anyway, just in case.
|
|
|
|
|
|
{
|
|
|
fiber._debugOwner = null;
|
|
|
}
|
|
|
|
|
|
{
|
|
|
// Theoretically, nothing in here should be necessary, because we already
|
|
|
// disconnected the fiber from the tree. So even if something leaks this
|
|
|
// particular fiber, it won't leak anything else
|
|
|
//
|
|
|
// The purpose of this branch is to be super aggressive so we can measure
|
|
|
// if there's any difference in memory impact. If there is, that could
|
|
|
// indicate a React leak we don't know about.
|
|
|
fiber.return = null;
|
|
|
fiber.dependencies = null;
|
|
|
fiber.memoizedProps = null;
|
|
|
fiber.memoizedState = null;
|
|
|
fiber.pendingProps = null;
|
|
|
fiber.stateNode = null; // TODO: Move to `commitPassiveUnmountInsideDeletedTreeOnFiber` instead.
|
|
|
|
|
|
fiber.updateQueue = null;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function getHostParentFiber(fiber) {
|
|
|
var parent = fiber.return;
|
|
|
|
|
|
while (parent !== null) {
|
|
|
if (isHostParent(parent)) {
|
|
|
return parent;
|
|
|
}
|
|
|
|
|
|
parent = parent.return;
|
|
|
}
|
|
|
|
|
|
throw new Error('Expected to find a host parent. This error is likely caused by a bug ' + 'in React. Please file an issue.');
|
|
|
}
|
|
|
|
|
|
function isHostParent(fiber) {
|
|
|
return fiber.tag === HostComponent || fiber.tag === HostRoot || fiber.tag === HostPortal;
|
|
|
}
|
|
|
|
|
|
function getHostSibling(fiber) {
|
|
|
// We're going to search forward into the tree until we find a sibling host
|
|
|
// node. Unfortunately, if multiple insertions are done in a row we have to
|
|
|
// search past them. This leads to exponential search for the next sibling.
|
|
|
// TODO: Find a more efficient way to do this.
|
|
|
var node = fiber;
|
|
|
|
|
|
siblings: while (true) {
|
|
|
// If we didn't find anything, let's try the next sibling.
|
|
|
while (node.sibling === null) {
|
|
|
if (node.return === null || isHostParent(node.return)) {
|
|
|
// If we pop out of the root or hit the parent the fiber we are the
|
|
|
// last sibling.
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
node = node.return;
|
|
|
}
|
|
|
|
|
|
node.sibling.return = node.return;
|
|
|
node = node.sibling;
|
|
|
|
|
|
while (node.tag !== HostComponent && node.tag !== HostText && node.tag !== DehydratedFragment) {
|
|
|
// If it is not host node and, we might have a host node inside it.
|
|
|
// Try to search down until we find one.
|
|
|
if (node.flags & Placement) {
|
|
|
// If we don't have a child, try the siblings instead.
|
|
|
continue siblings;
|
|
|
} // If we don't have a child, try the siblings instead.
|
|
|
// We also skip portals because they are not part of this host tree.
|
|
|
|
|
|
|
|
|
if (node.child === null || node.tag === HostPortal) {
|
|
|
continue siblings;
|
|
|
} else {
|
|
|
node.child.return = node;
|
|
|
node = node.child;
|
|
|
}
|
|
|
} // Check if this host node is stable or about to be placed.
|
|
|
|
|
|
|
|
|
if (!(node.flags & Placement)) {
|
|
|
// Found it!
|
|
|
return node.stateNode;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function commitPlacement(finishedWork) {
|
|
|
|
|
|
|
|
|
var parentFiber = getHostParentFiber(finishedWork); // Note: these two variables *must* always be updated together.
|
|
|
|
|
|
switch (parentFiber.tag) {
|
|
|
case HostComponent:
|
|
|
{
|
|
|
var parent = parentFiber.stateNode;
|
|
|
|
|
|
if (parentFiber.flags & ContentReset) {
|
|
|
// Reset the text content of the parent before doing any insertions
|
|
|
resetTextContent(parent); // Clear ContentReset from the effect tag
|
|
|
|
|
|
parentFiber.flags &= ~ContentReset;
|
|
|
}
|
|
|
|
|
|
var before = getHostSibling(finishedWork); // We only have the top Fiber that was inserted but we need to recurse down its
|
|
|
// children to find all the terminal nodes.
|
|
|
|
|
|
insertOrAppendPlacementNode(finishedWork, before, parent);
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
case HostRoot:
|
|
|
case HostPortal:
|
|
|
{
|
|
|
var _parent = parentFiber.stateNode.containerInfo;
|
|
|
|
|
|
var _before = getHostSibling(finishedWork);
|
|
|
|
|
|
insertOrAppendPlacementNodeIntoContainer(finishedWork, _before, _parent);
|
|
|
break;
|
|
|
}
|
|
|
// eslint-disable-next-line-no-fallthrough
|
|
|
|
|
|
default:
|
|
|
throw new Error('Invalid host parent fiber. This error is likely caused by a bug ' + 'in React. Please file an issue.');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function insertOrAppendPlacementNodeIntoContainer(node, before, parent) {
|
|
|
var tag = node.tag;
|
|
|
var isHost = tag === HostComponent || tag === HostText;
|
|
|
|
|
|
if (isHost) {
|
|
|
var stateNode = node.stateNode;
|
|
|
|
|
|
if (before) {
|
|
|
insertInContainerBefore(parent, stateNode, before);
|
|
|
} else {
|
|
|
appendChildToContainer(parent, stateNode);
|
|
|
}
|
|
|
} else if (tag === HostPortal) ; else {
|
|
|
var child = node.child;
|
|
|
|
|
|
if (child !== null) {
|
|
|
insertOrAppendPlacementNodeIntoContainer(child, before, parent);
|
|
|
var sibling = child.sibling;
|
|
|
|
|
|
while (sibling !== null) {
|
|
|
insertOrAppendPlacementNodeIntoContainer(sibling, before, parent);
|
|
|
sibling = sibling.sibling;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function insertOrAppendPlacementNode(node, before, parent) {
|
|
|
var tag = node.tag;
|
|
|
var isHost = tag === HostComponent || tag === HostText;
|
|
|
|
|
|
if (isHost) {
|
|
|
var stateNode = node.stateNode;
|
|
|
|
|
|
if (before) {
|
|
|
insertBefore(parent, stateNode, before);
|
|
|
} else {
|
|
|
appendChild(parent, stateNode);
|
|
|
}
|
|
|
} else if (tag === HostPortal) ; else {
|
|
|
var child = node.child;
|
|
|
|
|
|
if (child !== null) {
|
|
|
insertOrAppendPlacementNode(child, before, parent);
|
|
|
var sibling = child.sibling;
|
|
|
|
|
|
while (sibling !== null) {
|
|
|
insertOrAppendPlacementNode(sibling, before, parent);
|
|
|
sibling = sibling.sibling;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
} // These are tracked on the stack as we recursively traverse a
|
|
|
// deleted subtree.
|
|
|
// TODO: Update these during the whole mutation phase, not just during
|
|
|
// a deletion.
|
|
|
|
|
|
|
|
|
var hostParent = null;
|
|
|
var hostParentIsContainer = false;
|
|
|
|
|
|
function commitDeletionEffects(root, returnFiber, deletedFiber) {
|
|
|
{
|
|
|
// We only have the top Fiber that was deleted but we need to recurse down its
|
|
|
// children to find all the terminal nodes.
|
|
|
// Recursively delete all host nodes from the parent, detach refs, clean
|
|
|
// up mounted layout effects, and call componentWillUnmount.
|
|
|
// We only need to remove the topmost host child in each branch. But then we
|
|
|
// still need to keep traversing to unmount effects, refs, and cWU. TODO: We
|
|
|
// could split this into two separate traversals functions, where the second
|
|
|
// one doesn't include any removeChild logic. This is maybe the same
|
|
|
// function as "disappearLayoutEffects" (or whatever that turns into after
|
|
|
// the layout phase is refactored to use recursion).
|
|
|
// Before starting, find the nearest host parent on the stack so we know
|
|
|
// which instance/container to remove the children from.
|
|
|
// TODO: Instead of searching up the fiber return path on every deletion, we
|
|
|
// can track the nearest host component on the JS stack as we traverse the
|
|
|
// tree during the commit phase. This would make insertions faster, too.
|
|
|
var parent = returnFiber;
|
|
|
|
|
|
findParent: while (parent !== null) {
|
|
|
switch (parent.tag) {
|
|
|
case HostComponent:
|
|
|
{
|
|
|
hostParent = parent.stateNode;
|
|
|
hostParentIsContainer = false;
|
|
|
break findParent;
|
|
|
}
|
|
|
|
|
|
case HostRoot:
|
|
|
{
|
|
|
hostParent = parent.stateNode.containerInfo;
|
|
|
hostParentIsContainer = true;
|
|
|
break findParent;
|
|
|
}
|
|
|
|
|
|
case HostPortal:
|
|
|
{
|
|
|
hostParent = parent.stateNode.containerInfo;
|
|
|
hostParentIsContainer = true;
|
|
|
break findParent;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
parent = parent.return;
|
|
|
}
|
|
|
|
|
|
if (hostParent === null) {
|
|
|
throw new Error('Expected to find a host parent. This error is likely caused by ' + 'a bug in React. Please file an issue.');
|
|
|
}
|
|
|
|
|
|
commitDeletionEffectsOnFiber(root, returnFiber, deletedFiber);
|
|
|
hostParent = null;
|
|
|
hostParentIsContainer = false;
|
|
|
}
|
|
|
|
|
|
detachFiberMutation(deletedFiber);
|
|
|
}
|
|
|
|
|
|
function recursivelyTraverseDeletionEffects(finishedRoot, nearestMountedAncestor, parent) {
|
|
|
// TODO: Use a static flag to skip trees that don't have unmount effects
|
|
|
var child = parent.child;
|
|
|
|
|
|
while (child !== null) {
|
|
|
commitDeletionEffectsOnFiber(finishedRoot, nearestMountedAncestor, child);
|
|
|
child = child.sibling;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function commitDeletionEffectsOnFiber(finishedRoot, nearestMountedAncestor, deletedFiber) {
|
|
|
onCommitUnmount(deletedFiber); // The cases in this outer switch modify the stack before they traverse
|
|
|
// into their subtree. There are simpler cases in the inner switch
|
|
|
// that don't modify the stack.
|
|
|
|
|
|
switch (deletedFiber.tag) {
|
|
|
case HostComponent:
|
|
|
{
|
|
|
if (!offscreenSubtreeWasHidden) {
|
|
|
safelyDetachRef(deletedFiber, nearestMountedAncestor);
|
|
|
} // Intentional fallthrough to next branch
|
|
|
|
|
|
}
|
|
|
// eslint-disable-next-line-no-fallthrough
|
|
|
|
|
|
case HostText:
|
|
|
{
|
|
|
// We only need to remove the nearest host child. Set the host parent
|
|
|
// to `null` on the stack to indicate that nested children don't
|
|
|
// need to be removed.
|
|
|
{
|
|
|
var prevHostParent = hostParent;
|
|
|
var prevHostParentIsContainer = hostParentIsContainer;
|
|
|
hostParent = null;
|
|
|
recursivelyTraverseDeletionEffects(finishedRoot, nearestMountedAncestor, deletedFiber);
|
|
|
hostParent = prevHostParent;
|
|
|
hostParentIsContainer = prevHostParentIsContainer;
|
|
|
|
|
|
if (hostParent !== null) {
|
|
|
// Now that all the child effects have unmounted, we can remove the
|
|
|
// node from the tree.
|
|
|
if (hostParentIsContainer) {
|
|
|
removeChildFromContainer(hostParent, deletedFiber.stateNode);
|
|
|
} else {
|
|
|
removeChild(hostParent, deletedFiber.stateNode);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
case DehydratedFragment:
|
|
|
{
|
|
|
// Delete the dehydrated suspense boundary and all of its content.
|
|
|
|
|
|
|
|
|
{
|
|
|
if (hostParent !== null) {
|
|
|
if (hostParentIsContainer) {
|
|
|
clearSuspenseBoundaryFromContainer(hostParent, deletedFiber.stateNode);
|
|
|
} else {
|
|
|
clearSuspenseBoundary(hostParent, deletedFiber.stateNode);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
case HostPortal:
|
|
|
{
|
|
|
{
|
|
|
// When we go into a portal, it becomes the parent to remove from.
|
|
|
var _prevHostParent = hostParent;
|
|
|
var _prevHostParentIsContainer = hostParentIsContainer;
|
|
|
hostParent = deletedFiber.stateNode.containerInfo;
|
|
|
hostParentIsContainer = true;
|
|
|
recursivelyTraverseDeletionEffects(finishedRoot, nearestMountedAncestor, deletedFiber);
|
|
|
hostParent = _prevHostParent;
|
|
|
hostParentIsContainer = _prevHostParentIsContainer;
|
|
|
}
|
|
|
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
case FunctionComponent:
|
|
|
case ForwardRef:
|
|
|
case MemoComponent:
|
|
|
case SimpleMemoComponent:
|
|
|
{
|
|
|
if (!offscreenSubtreeWasHidden) {
|
|
|
var updateQueue = deletedFiber.updateQueue;
|
|
|
|
|
|
if (updateQueue !== null) {
|
|
|
var lastEffect = updateQueue.lastEffect;
|
|
|
|
|
|
if (lastEffect !== null) {
|
|
|
var firstEffect = lastEffect.next;
|
|
|
var effect = firstEffect;
|
|
|
|
|
|
do {
|
|
|
var _effect = effect,
|
|
|
destroy = _effect.destroy,
|
|
|
tag = _effect.tag;
|
|
|
|
|
|
if (destroy !== undefined) {
|
|
|
if ((tag & Insertion) !== NoFlags$1) {
|
|
|
safelyCallDestroy(deletedFiber, nearestMountedAncestor, destroy);
|
|
|
} else if ((tag & Layout) !== NoFlags$1) {
|
|
|
{
|
|
|
markComponentLayoutEffectUnmountStarted(deletedFiber);
|
|
|
}
|
|
|
|
|
|
if ( deletedFiber.mode & ProfileMode) {
|
|
|
startLayoutEffectTimer();
|
|
|
safelyCallDestroy(deletedFiber, nearestMountedAncestor, destroy);
|
|
|
recordLayoutEffectDuration(deletedFiber);
|
|
|
} else {
|
|
|
safelyCallDestroy(deletedFiber, nearestMountedAncestor, destroy);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
markComponentLayoutEffectUnmountStopped();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
effect = effect.next;
|
|
|
} while (effect !== firstEffect);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
recursivelyTraverseDeletionEffects(finishedRoot, nearestMountedAncestor, deletedFiber);
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
case ClassComponent:
|
|
|
{
|
|
|
if (!offscreenSubtreeWasHidden) {
|
|
|
safelyDetachRef(deletedFiber, nearestMountedAncestor);
|
|
|
var instance = deletedFiber.stateNode;
|
|
|
|
|
|
if (typeof instance.componentWillUnmount === 'function') {
|
|
|
safelyCallComponentWillUnmount(deletedFiber, nearestMountedAncestor, instance);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
recursivelyTraverseDeletionEffects(finishedRoot, nearestMountedAncestor, deletedFiber);
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
case ScopeComponent:
|
|
|
{
|
|
|
|
|
|
recursivelyTraverseDeletionEffects(finishedRoot, nearestMountedAncestor, deletedFiber);
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
case OffscreenComponent:
|
|
|
{
|
|
|
if ( // TODO: Remove this dead flag
|
|
|
deletedFiber.mode & ConcurrentMode) {
|
|
|
// If this offscreen component is hidden, we already unmounted it. Before
|
|
|
// deleting the children, track that it's already unmounted so that we
|
|
|
// don't attempt to unmount the effects again.
|
|
|
// TODO: If the tree is hidden, in most cases we should be able to skip
|
|
|
// over the nested children entirely. An exception is we haven't yet found
|
|
|
// the topmost host node to delete, which we already track on the stack.
|
|
|
// But the other case is portals, which need to be detached no matter how
|
|
|
// deeply they are nested. We should use a subtree flag to track whether a
|
|
|
// subtree includes a nested portal.
|
|
|
var prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;
|
|
|
offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden || deletedFiber.memoizedState !== null;
|
|
|
recursivelyTraverseDeletionEffects(finishedRoot, nearestMountedAncestor, deletedFiber);
|
|
|
offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;
|
|
|
} else {
|
|
|
recursivelyTraverseDeletionEffects(finishedRoot, nearestMountedAncestor, deletedFiber);
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
default:
|
|
|
{
|
|
|
recursivelyTraverseDeletionEffects(finishedRoot, nearestMountedAncestor, deletedFiber);
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function commitSuspenseCallback(finishedWork) {
|
|
|
// TODO: Move this to passive phase
|
|
|
var newState = finishedWork.memoizedState;
|
|
|
}
|
|
|
|
|
|
function commitSuspenseHydrationCallbacks(finishedRoot, finishedWork) {
|
|
|
|
|
|
var newState = finishedWork.memoizedState;
|
|
|
|
|
|
if (newState === null) {
|
|
|
var current = finishedWork.alternate;
|
|
|
|
|
|
if (current !== null) {
|
|
|
var prevState = current.memoizedState;
|
|
|
|
|
|
if (prevState !== null) {
|
|
|
var suspenseInstance = prevState.dehydrated;
|
|
|
|
|
|
if (suspenseInstance !== null) {
|
|
|
commitHydratedSuspenseInstance(suspenseInstance);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function attachSuspenseRetryListeners(finishedWork) {
|
|
|
// If this boundary just timed out, then it will have a set of wakeables.
|
|
|
// For each wakeable, attach a listener so that when it resolves, React
|
|
|
// attempts to re-render the boundary in the primary (pre-timeout) state.
|
|
|
var wakeables = finishedWork.updateQueue;
|
|
|
|
|
|
if (wakeables !== null) {
|
|
|
finishedWork.updateQueue = null;
|
|
|
var retryCache = finishedWork.stateNode;
|
|
|
|
|
|
if (retryCache === null) {
|
|
|
retryCache = finishedWork.stateNode = new PossiblyWeakSet();
|
|
|
}
|
|
|
|
|
|
wakeables.forEach(function (wakeable) {
|
|
|
// Memoize using the boundary fiber to prevent redundant listeners.
|
|
|
var retry = resolveRetryWakeable.bind(null, finishedWork, wakeable);
|
|
|
|
|
|
if (!retryCache.has(wakeable)) {
|
|
|
retryCache.add(wakeable);
|
|
|
|
|
|
{
|
|
|
if (isDevToolsPresent) {
|
|
|
if (inProgressLanes !== null && inProgressRoot !== null) {
|
|
|
// If we have pending work still, associate the original updaters with it.
|
|
|
restorePendingUpdaters(inProgressRoot, inProgressLanes);
|
|
|
} else {
|
|
|
throw Error('Expected finished root and lanes to be set. This is a bug in React.');
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
wakeable.then(retry, retry);
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
} // This function detects when a Suspense boundary goes from visible to hidden.
|
|
|
function commitMutationEffects(root, finishedWork, committedLanes) {
|
|
|
inProgressLanes = committedLanes;
|
|
|
inProgressRoot = root;
|
|
|
setCurrentFiber(finishedWork);
|
|
|
commitMutationEffectsOnFiber(finishedWork, root);
|
|
|
setCurrentFiber(finishedWork);
|
|
|
inProgressLanes = null;
|
|
|
inProgressRoot = null;
|
|
|
}
|
|
|
|
|
|
function recursivelyTraverseMutationEffects(root, parentFiber, lanes) {
|
|
|
// Deletions effects can be scheduled on any fiber type. They need to happen
|
|
|
// before the children effects hae fired.
|
|
|
var deletions = parentFiber.deletions;
|
|
|
|
|
|
if (deletions !== null) {
|
|
|
for (var i = 0; i < deletions.length; i++) {
|
|
|
var childToDelete = deletions[i];
|
|
|
|
|
|
try {
|
|
|
commitDeletionEffects(root, parentFiber, childToDelete);
|
|
|
} catch (error) {
|
|
|
captureCommitPhaseError(childToDelete, parentFiber, error);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var prevDebugFiber = getCurrentFiber();
|
|
|
|
|
|
if (parentFiber.subtreeFlags & MutationMask) {
|
|
|
var child = parentFiber.child;
|
|
|
|
|
|
while (child !== null) {
|
|
|
setCurrentFiber(child);
|
|
|
commitMutationEffectsOnFiber(child, root);
|
|
|
child = child.sibling;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
setCurrentFiber(prevDebugFiber);
|
|
|
}
|
|
|
|
|
|
function commitMutationEffectsOnFiber(finishedWork, root, lanes) {
|
|
|
var current = finishedWork.alternate;
|
|
|
var flags = finishedWork.flags; // The effect flag should be checked *after* we refine the type of fiber,
|
|
|
// because the fiber tag is more specific. An exception is any flag related
|
|
|
// to reconcilation, because those can be set on all fiber types.
|
|
|
|
|
|
switch (finishedWork.tag) {
|
|
|
case FunctionComponent:
|
|
|
case ForwardRef:
|
|
|
case MemoComponent:
|
|
|
case SimpleMemoComponent:
|
|
|
{
|
|
|
recursivelyTraverseMutationEffects(root, finishedWork);
|
|
|
commitReconciliationEffects(finishedWork);
|
|
|
|
|
|
if (flags & Update) {
|
|
|
try {
|
|
|
commitHookEffectListUnmount(Insertion | HasEffect, finishedWork, finishedWork.return);
|
|
|
commitHookEffectListMount(Insertion | HasEffect, finishedWork);
|
|
|
} catch (error) {
|
|
|
captureCommitPhaseError(finishedWork, finishedWork.return, error);
|
|
|
} // Layout effects are destroyed during the mutation phase so that all
|
|
|
// destroy functions for all fibers are called before any create functions.
|
|
|
// This prevents sibling component effects from interfering with each other,
|
|
|
// e.g. a destroy function in one component should never override a ref set
|
|
|
// by a create function in another component during the same commit.
|
|
|
|
|
|
|
|
|
if ( finishedWork.mode & ProfileMode) {
|
|
|
try {
|
|
|
startLayoutEffectTimer();
|
|
|
commitHookEffectListUnmount(Layout | HasEffect, finishedWork, finishedWork.return);
|
|
|
} catch (error) {
|
|
|
captureCommitPhaseError(finishedWork, finishedWork.return, error);
|
|
|
}
|
|
|
|
|
|
recordLayoutEffectDuration(finishedWork);
|
|
|
} else {
|
|
|
try {
|
|
|
commitHookEffectListUnmount(Layout | HasEffect, finishedWork, finishedWork.return);
|
|
|
} catch (error) {
|
|
|
captureCommitPhaseError(finishedWork, finishedWork.return, error);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
case ClassComponent:
|
|
|
{
|
|
|
recursivelyTraverseMutationEffects(root, finishedWork);
|
|
|
commitReconciliationEffects(finishedWork);
|
|
|
|
|
|
if (flags & Ref) {
|
|
|
if (current !== null) {
|
|
|
safelyDetachRef(current, current.return);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
case HostComponent:
|
|
|
{
|
|
|
recursivelyTraverseMutationEffects(root, finishedWork);
|
|
|
commitReconciliationEffects(finishedWork);
|
|
|
|
|
|
if (flags & Ref) {
|
|
|
if (current !== null) {
|
|
|
safelyDetachRef(current, current.return);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
{
|
|
|
// TODO: ContentReset gets cleared by the children during the commit
|
|
|
// phase. This is a refactor hazard because it means we must read
|
|
|
// flags the flags after `commitReconciliationEffects` has already run;
|
|
|
// the order matters. We should refactor so that ContentReset does not
|
|
|
// rely on mutating the flag during commit. Like by setting a flag
|
|
|
// during the render phase instead.
|
|
|
if (finishedWork.flags & ContentReset) {
|
|
|
var instance = finishedWork.stateNode;
|
|
|
|
|
|
try {
|
|
|
resetTextContent(instance);
|
|
|
} catch (error) {
|
|
|
captureCommitPhaseError(finishedWork, finishedWork.return, error);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (flags & Update) {
|
|
|
var _instance4 = finishedWork.stateNode;
|
|
|
|
|
|
if (_instance4 != null) {
|
|
|
// Commit the work prepared earlier.
|
|
|
var newProps = finishedWork.memoizedProps; // For hydration we reuse the update path but we treat the oldProps
|
|
|
// as the newProps. The updatePayload will contain the real change in
|
|
|
// this case.
|
|
|
|
|
|
var oldProps = current !== null ? current.memoizedProps : newProps;
|
|
|
var type = finishedWork.type; // TODO: Type the updateQueue to be specific to host components.
|
|
|
|
|
|
var updatePayload = finishedWork.updateQueue;
|
|
|
finishedWork.updateQueue = null;
|
|
|
|
|
|
if (updatePayload !== null) {
|
|
|
try {
|
|
|
commitUpdate(_instance4, updatePayload, type, oldProps, newProps, finishedWork);
|
|
|
} catch (error) {
|
|
|
captureCommitPhaseError(finishedWork, finishedWork.return, error);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
case HostText:
|
|
|
{
|
|
|
recursivelyTraverseMutationEffects(root, finishedWork);
|
|
|
commitReconciliationEffects(finishedWork);
|
|
|
|
|
|
if (flags & Update) {
|
|
|
{
|
|
|
if (finishedWork.stateNode === null) {
|
|
|
throw new Error('This should have a text node initialized. This error is likely ' + 'caused by a bug in React. Please file an issue.');
|
|
|
}
|
|
|
|
|
|
var textInstance = finishedWork.stateNode;
|
|
|
var newText = finishedWork.memoizedProps; // For hydration we reuse the update path but we treat the oldProps
|
|
|
// as the newProps. The updatePayload will contain the real change in
|
|
|
// this case.
|
|
|
|
|
|
var oldText = current !== null ? current.memoizedProps : newText;
|
|
|
|
|
|
try {
|
|
|
commitTextUpdate(textInstance, oldText, newText);
|
|
|
} catch (error) {
|
|
|
captureCommitPhaseError(finishedWork, finishedWork.return, error);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
case HostRoot:
|
|
|
{
|
|
|
recursivelyTraverseMutationEffects(root, finishedWork);
|
|
|
commitReconciliationEffects(finishedWork);
|
|
|
|
|
|
if (flags & Update) {
|
|
|
{
|
|
|
if (current !== null) {
|
|
|
var prevRootState = current.memoizedState;
|
|
|
|
|
|
if (prevRootState.isDehydrated) {
|
|
|
try {
|
|
|
commitHydratedContainer(root.containerInfo);
|
|
|
} catch (error) {
|
|
|
captureCommitPhaseError(finishedWork, finishedWork.return, error);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
case HostPortal:
|
|
|
{
|
|
|
recursivelyTraverseMutationEffects(root, finishedWork);
|
|
|
commitReconciliationEffects(finishedWork);
|
|
|
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
case SuspenseComponent:
|
|
|
{
|
|
|
recursivelyTraverseMutationEffects(root, finishedWork);
|
|
|
commitReconciliationEffects(finishedWork);
|
|
|
var offscreenFiber = finishedWork.child;
|
|
|
|
|
|
if (offscreenFiber.flags & Visibility) {
|
|
|
var offscreenInstance = offscreenFiber.stateNode;
|
|
|
var newState = offscreenFiber.memoizedState;
|
|
|
var isHidden = newState !== null; // Track the current state on the Offscreen instance so we can
|
|
|
// read it during an event
|
|
|
|
|
|
offscreenInstance.isHidden = isHidden;
|
|
|
|
|
|
if (isHidden) {
|
|
|
var wasHidden = offscreenFiber.alternate !== null && offscreenFiber.alternate.memoizedState !== null;
|
|
|
|
|
|
if (!wasHidden) {
|
|
|
// TODO: Move to passive phase
|
|
|
markCommitTimeOfFallback();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (flags & Update) {
|
|
|
try {
|
|
|
commitSuspenseCallback(finishedWork);
|
|
|
} catch (error) {
|
|
|
captureCommitPhaseError(finishedWork, finishedWork.return, error);
|
|
|
}
|
|
|
|
|
|
attachSuspenseRetryListeners(finishedWork);
|
|
|
}
|
|
|
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
case OffscreenComponent:
|
|
|
{
|
|
|
var _wasHidden = current !== null && current.memoizedState !== null;
|
|
|
|
|
|
if ( // TODO: Remove this dead flag
|
|
|
finishedWork.mode & ConcurrentMode) {
|
|
|
// Before committing the children, track on the stack whether this
|
|
|
// offscreen subtree was already hidden, so that we don't unmount the
|
|
|
// effects again.
|
|
|
var prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;
|
|
|
offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden || _wasHidden;
|
|
|
recursivelyTraverseMutationEffects(root, finishedWork);
|
|
|
offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;
|
|
|
} else {
|
|
|
recursivelyTraverseMutationEffects(root, finishedWork);
|
|
|
}
|
|
|
|
|
|
commitReconciliationEffects(finishedWork);
|
|
|
|
|
|
if (flags & Visibility) {
|
|
|
var _offscreenInstance = finishedWork.stateNode;
|
|
|
var _newState = finishedWork.memoizedState;
|
|
|
|
|
|
var _isHidden = _newState !== null;
|
|
|
|
|
|
var offscreenBoundary = finishedWork; // Track the current state on the Offscreen instance so we can
|
|
|
// read it during an event
|
|
|
|
|
|
_offscreenInstance.isHidden = _isHidden;
|
|
|
|
|
|
{
|
|
|
if (_isHidden) {
|
|
|
if (!_wasHidden) {
|
|
|
if ((offscreenBoundary.mode & ConcurrentMode) !== NoMode) {
|
|
|
nextEffect = offscreenBoundary;
|
|
|
var offscreenChild = offscreenBoundary.child;
|
|
|
|
|
|
while (offscreenChild !== null) {
|
|
|
nextEffect = offscreenChild;
|
|
|
disappearLayoutEffects_begin(offscreenChild);
|
|
|
offscreenChild = offscreenChild.sibling;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
{
|
|
|
// TODO: This needs to run whenever there's an insertion or update
|
|
|
// inside a hidden Offscreen tree.
|
|
|
hideOrUnhideAllChildren(offscreenBoundary, _isHidden);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
case SuspenseListComponent:
|
|
|
{
|
|
|
recursivelyTraverseMutationEffects(root, finishedWork);
|
|
|
commitReconciliationEffects(finishedWork);
|
|
|
|
|
|
if (flags & Update) {
|
|
|
attachSuspenseRetryListeners(finishedWork);
|
|
|
}
|
|
|
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
case ScopeComponent:
|
|
|
{
|
|
|
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
default:
|
|
|
{
|
|
|
recursivelyTraverseMutationEffects(root, finishedWork);
|
|
|
commitReconciliationEffects(finishedWork);
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function commitReconciliationEffects(finishedWork) {
|
|
|
// Placement effects (insertions, reorders) can be scheduled on any fiber
|
|
|
// type. They needs to happen after the children effects have fired, but
|
|
|
// before the effects on this fiber have fired.
|
|
|
var flags = finishedWork.flags;
|
|
|
|
|
|
if (flags & Placement) {
|
|
|
try {
|
|
|
commitPlacement(finishedWork);
|
|
|
} catch (error) {
|
|
|
captureCommitPhaseError(finishedWork, finishedWork.return, error);
|
|
|
} // Clear the "placement" from effect tag so that we know that this is
|
|
|
// inserted, before any life-cycles like componentDidMount gets called.
|
|
|
// TODO: findDOMNode doesn't rely on this any more but isMounted does
|
|
|
// and isMounted is deprecated anyway so we should be able to kill this.
|
|
|
|
|
|
|
|
|
finishedWork.flags &= ~Placement;
|
|
|
}
|
|
|
|
|
|
if (flags & Hydrating) {
|
|
|
finishedWork.flags &= ~Hydrating;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function commitLayoutEffects(finishedWork, root, committedLanes) {
|
|
|
inProgressLanes = committedLanes;
|
|
|
inProgressRoot = root;
|
|
|
nextEffect = finishedWork;
|
|
|
commitLayoutEffects_begin(finishedWork, root, committedLanes);
|
|
|
inProgressLanes = null;
|
|
|
inProgressRoot = null;
|
|
|
}
|
|
|
|
|
|
function commitLayoutEffects_begin(subtreeRoot, root, committedLanes) {
|
|
|
// Suspense layout effects semantics don't change for legacy roots.
|
|
|
var isModernRoot = (subtreeRoot.mode & ConcurrentMode) !== NoMode;
|
|
|
|
|
|
while (nextEffect !== null) {
|
|
|
var fiber = nextEffect;
|
|
|
var firstChild = fiber.child;
|
|
|
|
|
|
if ( fiber.tag === OffscreenComponent && isModernRoot) {
|
|
|
// Keep track of the current Offscreen stack's state.
|
|
|
var isHidden = fiber.memoizedState !== null;
|
|
|
var newOffscreenSubtreeIsHidden = isHidden || offscreenSubtreeIsHidden;
|
|
|
|
|
|
if (newOffscreenSubtreeIsHidden) {
|
|
|
// The Offscreen tree is hidden. Skip over its layout effects.
|
|
|
commitLayoutMountEffects_complete(subtreeRoot, root, committedLanes);
|
|
|
continue;
|
|
|
} else {
|
|
|
// TODO (Offscreen) Also check: subtreeFlags & LayoutMask
|
|
|
var current = fiber.alternate;
|
|
|
var wasHidden = current !== null && current.memoizedState !== null;
|
|
|
var newOffscreenSubtreeWasHidden = wasHidden || offscreenSubtreeWasHidden;
|
|
|
var prevOffscreenSubtreeIsHidden = offscreenSubtreeIsHidden;
|
|
|
var prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden; // Traverse the Offscreen subtree with the current Offscreen as the root.
|
|
|
|
|
|
offscreenSubtreeIsHidden = newOffscreenSubtreeIsHidden;
|
|
|
offscreenSubtreeWasHidden = newOffscreenSubtreeWasHidden;
|
|
|
|
|
|
if (offscreenSubtreeWasHidden && !prevOffscreenSubtreeWasHidden) {
|
|
|
// This is the root of a reappearing boundary. Turn its layout effects
|
|
|
// back on.
|
|
|
nextEffect = fiber;
|
|
|
reappearLayoutEffects_begin(fiber);
|
|
|
}
|
|
|
|
|
|
var child = firstChild;
|
|
|
|
|
|
while (child !== null) {
|
|
|
nextEffect = child;
|
|
|
commitLayoutEffects_begin(child, // New root; bubble back up to here and stop.
|
|
|
root, committedLanes);
|
|
|
child = child.sibling;
|
|
|
} // Restore Offscreen state and resume in our-progress traversal.
|
|
|
|
|
|
|
|
|
nextEffect = fiber;
|
|
|
offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden;
|
|
|
offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;
|
|
|
commitLayoutMountEffects_complete(subtreeRoot, root, committedLanes);
|
|
|
continue;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if ((fiber.subtreeFlags & LayoutMask) !== NoFlags && firstChild !== null) {
|
|
|
firstChild.return = fiber;
|
|
|
nextEffect = firstChild;
|
|
|
} else {
|
|
|
commitLayoutMountEffects_complete(subtreeRoot, root, committedLanes);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function commitLayoutMountEffects_complete(subtreeRoot, root, committedLanes) {
|
|
|
while (nextEffect !== null) {
|
|
|
var fiber = nextEffect;
|
|
|
|
|
|
if ((fiber.flags & LayoutMask) !== NoFlags) {
|
|
|
var current = fiber.alternate;
|
|
|
setCurrentFiber(fiber);
|
|
|
|
|
|
try {
|
|
|
commitLayoutEffectOnFiber(root, current, fiber, committedLanes);
|
|
|
} catch (error) {
|
|
|
captureCommitPhaseError(fiber, fiber.return, error);
|
|
|
}
|
|
|
|
|
|
resetCurrentFiber();
|
|
|
}
|
|
|
|
|
|
if (fiber === subtreeRoot) {
|
|
|
nextEffect = null;
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
var sibling = fiber.sibling;
|
|
|
|
|
|
if (sibling !== null) {
|
|
|
sibling.return = fiber.return;
|
|
|
nextEffect = sibling;
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
nextEffect = fiber.return;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function disappearLayoutEffects_begin(subtreeRoot) {
|
|
|
while (nextEffect !== null) {
|
|
|
var fiber = nextEffect;
|
|
|
var firstChild = fiber.child; // TODO (Offscreen) Check: flags & (RefStatic | LayoutStatic)
|
|
|
|
|
|
switch (fiber.tag) {
|
|
|
case FunctionComponent:
|
|
|
case ForwardRef:
|
|
|
case MemoComponent:
|
|
|
case SimpleMemoComponent:
|
|
|
{
|
|
|
if ( fiber.mode & ProfileMode) {
|
|
|
try {
|
|
|
startLayoutEffectTimer();
|
|
|
commitHookEffectListUnmount(Layout, fiber, fiber.return);
|
|
|
} finally {
|
|
|
recordLayoutEffectDuration(fiber);
|
|
|
}
|
|
|
} else {
|
|
|
commitHookEffectListUnmount(Layout, fiber, fiber.return);
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
case ClassComponent:
|
|
|
{
|
|
|
// TODO (Offscreen) Check: flags & RefStatic
|
|
|
safelyDetachRef(fiber, fiber.return);
|
|
|
var instance = fiber.stateNode;
|
|
|
|
|
|
if (typeof instance.componentWillUnmount === 'function') {
|
|
|
safelyCallComponentWillUnmount(fiber, fiber.return, instance);
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
case HostComponent:
|
|
|
{
|
|
|
safelyDetachRef(fiber, fiber.return);
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
case OffscreenComponent:
|
|
|
{
|
|
|
// Check if this is a
|
|
|
var isHidden = fiber.memoizedState !== null;
|
|
|
|
|
|
if (isHidden) {
|
|
|
// Nested Offscreen tree is already hidden. Don't disappear
|
|
|
// its effects.
|
|
|
disappearLayoutEffects_complete(subtreeRoot);
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
}
|
|
|
} // TODO (Offscreen) Check: subtreeFlags & LayoutStatic
|
|
|
|
|
|
|
|
|
if (firstChild !== null) {
|
|
|
firstChild.return = fiber;
|
|
|
nextEffect = firstChild;
|
|
|
} else {
|
|
|
disappearLayoutEffects_complete(subtreeRoot);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function disappearLayoutEffects_complete(subtreeRoot) {
|
|
|
while (nextEffect !== null) {
|
|
|
var fiber = nextEffect;
|
|
|
|
|
|
if (fiber === subtreeRoot) {
|
|
|
nextEffect = null;
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
var sibling = fiber.sibling;
|
|
|
|
|
|
if (sibling !== null) {
|
|
|
sibling.return = fiber.return;
|
|
|
nextEffect = sibling;
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
nextEffect = fiber.return;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function reappearLayoutEffects_begin(subtreeRoot) {
|
|
|
while (nextEffect !== null) {
|
|
|
var fiber = nextEffect;
|
|
|
var firstChild = fiber.child;
|
|
|
|
|
|
if (fiber.tag === OffscreenComponent) {
|
|
|
var isHidden = fiber.memoizedState !== null;
|
|
|
|
|
|
if (isHidden) {
|
|
|
// Nested Offscreen tree is still hidden. Don't re-appear its effects.
|
|
|
reappearLayoutEffects_complete(subtreeRoot);
|
|
|
continue;
|
|
|
}
|
|
|
} // TODO (Offscreen) Check: subtreeFlags & LayoutStatic
|
|
|
|
|
|
|
|
|
if (firstChild !== null) {
|
|
|
// This node may have been reused from a previous render, so we can't
|
|
|
// assume its return pointer is correct.
|
|
|
firstChild.return = fiber;
|
|
|
nextEffect = firstChild;
|
|
|
} else {
|
|
|
reappearLayoutEffects_complete(subtreeRoot);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function reappearLayoutEffects_complete(subtreeRoot) {
|
|
|
while (nextEffect !== null) {
|
|
|
var fiber = nextEffect; // TODO (Offscreen) Check: flags & LayoutStatic
|
|
|
|
|
|
setCurrentFiber(fiber);
|
|
|
|
|
|
try {
|
|
|
reappearLayoutEffectsOnFiber(fiber);
|
|
|
} catch (error) {
|
|
|
captureCommitPhaseError(fiber, fiber.return, error);
|
|
|
}
|
|
|
|
|
|
resetCurrentFiber();
|
|
|
|
|
|
if (fiber === subtreeRoot) {
|
|
|
nextEffect = null;
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
var sibling = fiber.sibling;
|
|
|
|
|
|
if (sibling !== null) {
|
|
|
// This node may have been reused from a previous render, so we can't
|
|
|
// assume its return pointer is correct.
|
|
|
sibling.return = fiber.return;
|
|
|
nextEffect = sibling;
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
nextEffect = fiber.return;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function commitPassiveMountEffects(root, finishedWork, committedLanes, committedTransitions) {
|
|
|
nextEffect = finishedWork;
|
|
|
commitPassiveMountEffects_begin(finishedWork, root, committedLanes, committedTransitions);
|
|
|
}
|
|
|
|
|
|
function commitPassiveMountEffects_begin(subtreeRoot, root, committedLanes, committedTransitions) {
|
|
|
while (nextEffect !== null) {
|
|
|
var fiber = nextEffect;
|
|
|
var firstChild = fiber.child;
|
|
|
|
|
|
if ((fiber.subtreeFlags & PassiveMask) !== NoFlags && firstChild !== null) {
|
|
|
firstChild.return = fiber;
|
|
|
nextEffect = firstChild;
|
|
|
} else {
|
|
|
commitPassiveMountEffects_complete(subtreeRoot, root, committedLanes, committedTransitions);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function commitPassiveMountEffects_complete(subtreeRoot, root, committedLanes, committedTransitions) {
|
|
|
while (nextEffect !== null) {
|
|
|
var fiber = nextEffect;
|
|
|
|
|
|
if ((fiber.flags & Passive) !== NoFlags) {
|
|
|
setCurrentFiber(fiber);
|
|
|
|
|
|
try {
|
|
|
commitPassiveMountOnFiber(root, fiber, committedLanes, committedTransitions);
|
|
|
} catch (error) {
|
|
|
captureCommitPhaseError(fiber, fiber.return, error);
|
|
|
}
|
|
|
|
|
|
resetCurrentFiber();
|
|
|
}
|
|
|
|
|
|
if (fiber === subtreeRoot) {
|
|
|
nextEffect = null;
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
var sibling = fiber.sibling;
|
|
|
|
|
|
if (sibling !== null) {
|
|
|
sibling.return = fiber.return;
|
|
|
nextEffect = sibling;
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
nextEffect = fiber.return;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function commitPassiveMountOnFiber(finishedRoot, finishedWork, committedLanes, committedTransitions) {
|
|
|
switch (finishedWork.tag) {
|
|
|
case FunctionComponent:
|
|
|
case ForwardRef:
|
|
|
case SimpleMemoComponent:
|
|
|
{
|
|
|
if ( finishedWork.mode & ProfileMode) {
|
|
|
startPassiveEffectTimer();
|
|
|
|
|
|
try {
|
|
|
commitHookEffectListMount(Passive$1 | HasEffect, finishedWork);
|
|
|
} finally {
|
|
|
recordPassiveEffectDuration(finishedWork);
|
|
|
}
|
|
|
} else {
|
|
|
commitHookEffectListMount(Passive$1 | HasEffect, finishedWork);
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function commitPassiveUnmountEffects(firstChild) {
|
|
|
nextEffect = firstChild;
|
|
|
commitPassiveUnmountEffects_begin();
|
|
|
}
|
|
|
|
|
|
function commitPassiveUnmountEffects_begin() {
|
|
|
while (nextEffect !== null) {
|
|
|
var fiber = nextEffect;
|
|
|
var child = fiber.child;
|
|
|
|
|
|
if ((nextEffect.flags & ChildDeletion) !== NoFlags) {
|
|
|
var deletions = fiber.deletions;
|
|
|
|
|
|
if (deletions !== null) {
|
|
|
for (var i = 0; i < deletions.length; i++) {
|
|
|
var fiberToDelete = deletions[i];
|
|
|
nextEffect = fiberToDelete;
|
|
|
commitPassiveUnmountEffectsInsideOfDeletedTree_begin(fiberToDelete, fiber);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
// A fiber was deleted from this parent fiber, but it's still part of
|
|
|
// the previous (alternate) parent fiber's list of children. Because
|
|
|
// children are a linked list, an earlier sibling that's still alive
|
|
|
// will be connected to the deleted fiber via its `alternate`:
|
|
|
//
|
|
|
// live fiber
|
|
|
// --alternate--> previous live fiber
|
|
|
// --sibling--> deleted fiber
|
|
|
//
|
|
|
// We can't disconnect `alternate` on nodes that haven't been deleted
|
|
|
// yet, but we can disconnect the `sibling` and `child` pointers.
|
|
|
var previousFiber = fiber.alternate;
|
|
|
|
|
|
if (previousFiber !== null) {
|
|
|
var detachedChild = previousFiber.child;
|
|
|
|
|
|
if (detachedChild !== null) {
|
|
|
previousFiber.child = null;
|
|
|
|
|
|
do {
|
|
|
var detachedSibling = detachedChild.sibling;
|
|
|
detachedChild.sibling = null;
|
|
|
detachedChild = detachedSibling;
|
|
|
} while (detachedChild !== null);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
nextEffect = fiber;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if ((fiber.subtreeFlags & PassiveMask) !== NoFlags && child !== null) {
|
|
|
child.return = fiber;
|
|
|
nextEffect = child;
|
|
|
} else {
|
|
|
commitPassiveUnmountEffects_complete();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function commitPassiveUnmountEffects_complete() {
|
|
|
while (nextEffect !== null) {
|
|
|
var fiber = nextEffect;
|
|
|
|
|
|
if ((fiber.flags & Passive) !== NoFlags) {
|
|
|
setCurrentFiber(fiber);
|
|
|
commitPassiveUnmountOnFiber(fiber);
|
|
|
resetCurrentFiber();
|
|
|
}
|
|
|
|
|
|
var sibling = fiber.sibling;
|
|
|
|
|
|
if (sibling !== null) {
|
|
|
sibling.return = fiber.return;
|
|
|
nextEffect = sibling;
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
nextEffect = fiber.return;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function commitPassiveUnmountOnFiber(finishedWork) {
|
|
|
switch (finishedWork.tag) {
|
|
|
case FunctionComponent:
|
|
|
case ForwardRef:
|
|
|
case SimpleMemoComponent:
|
|
|
{
|
|
|
if ( finishedWork.mode & ProfileMode) {
|
|
|
startPassiveEffectTimer();
|
|
|
commitHookEffectListUnmount(Passive$1 | HasEffect, finishedWork, finishedWork.return);
|
|
|
recordPassiveEffectDuration(finishedWork);
|
|
|
} else {
|
|
|
commitHookEffectListUnmount(Passive$1 | HasEffect, finishedWork, finishedWork.return);
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function commitPassiveUnmountEffectsInsideOfDeletedTree_begin(deletedSubtreeRoot, nearestMountedAncestor) {
|
|
|
while (nextEffect !== null) {
|
|
|
var fiber = nextEffect; // Deletion effects fire in parent -> child order
|
|
|
// TODO: Check if fiber has a PassiveStatic flag
|
|
|
|
|
|
setCurrentFiber(fiber);
|
|
|
commitPassiveUnmountInsideDeletedTreeOnFiber(fiber, nearestMountedAncestor);
|
|
|
resetCurrentFiber();
|
|
|
var child = fiber.child; // TODO: Only traverse subtree if it has a PassiveStatic flag. (But, if we
|
|
|
// do this, still need to handle `deletedTreeCleanUpLevel` correctly.)
|
|
|
|
|
|
if (child !== null) {
|
|
|
child.return = fiber;
|
|
|
nextEffect = child;
|
|
|
} else {
|
|
|
commitPassiveUnmountEffectsInsideOfDeletedTree_complete(deletedSubtreeRoot);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function commitPassiveUnmountEffectsInsideOfDeletedTree_complete(deletedSubtreeRoot) {
|
|
|
while (nextEffect !== null) {
|
|
|
var fiber = nextEffect;
|
|
|
var sibling = fiber.sibling;
|
|
|
var returnFiber = fiber.return;
|
|
|
|
|
|
{
|
|
|
// Recursively traverse the entire deleted tree and clean up fiber fields.
|
|
|
// This is more aggressive than ideal, and the long term goal is to only
|
|
|
// have to detach the deleted tree at the root.
|
|
|
detachFiberAfterEffects(fiber);
|
|
|
|
|
|
if (fiber === deletedSubtreeRoot) {
|
|
|
nextEffect = null;
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (sibling !== null) {
|
|
|
sibling.return = returnFiber;
|
|
|
nextEffect = sibling;
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
nextEffect = returnFiber;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function commitPassiveUnmountInsideDeletedTreeOnFiber(current, nearestMountedAncestor) {
|
|
|
switch (current.tag) {
|
|
|
case FunctionComponent:
|
|
|
case ForwardRef:
|
|
|
case SimpleMemoComponent:
|
|
|
{
|
|
|
if ( current.mode & ProfileMode) {
|
|
|
startPassiveEffectTimer();
|
|
|
commitHookEffectListUnmount(Passive$1, current, nearestMountedAncestor);
|
|
|
recordPassiveEffectDuration(current);
|
|
|
} else {
|
|
|
commitHookEffectListUnmount(Passive$1, current, nearestMountedAncestor);
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
} // TODO: Reuse reappearLayoutEffects traversal here?
|
|
|
|
|
|
|
|
|
function invokeLayoutEffectMountInDEV(fiber) {
|
|
|
{
|
|
|
// We don't need to re-check StrictEffectsMode here.
|
|
|
// This function is only called if that check has already passed.
|
|
|
switch (fiber.tag) {
|
|
|
case FunctionComponent:
|
|
|
case ForwardRef:
|
|
|
case SimpleMemoComponent:
|
|
|
{
|
|
|
try {
|
|
|
commitHookEffectListMount(Layout | HasEffect, fiber);
|
|
|
} catch (error) {
|
|
|
captureCommitPhaseError(fiber, fiber.return, error);
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
case ClassComponent:
|
|
|
{
|
|
|
var instance = fiber.stateNode;
|
|
|
|
|
|
try {
|
|
|
instance.componentDidMount();
|
|
|
} catch (error) {
|
|
|
captureCommitPhaseError(fiber, fiber.return, error);
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function invokePassiveEffectMountInDEV(fiber) {
|
|
|
{
|
|
|
// We don't need to re-check StrictEffectsMode here.
|
|
|
// This function is only called if that check has already passed.
|
|
|
switch (fiber.tag) {
|
|
|
case FunctionComponent:
|
|
|
case ForwardRef:
|
|
|
case SimpleMemoComponent:
|
|
|
{
|
|
|
try {
|
|
|
commitHookEffectListMount(Passive$1 | HasEffect, fiber);
|
|
|
} catch (error) {
|
|
|
captureCommitPhaseError(fiber, fiber.return, error);
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function invokeLayoutEffectUnmountInDEV(fiber) {
|
|
|
{
|
|
|
// We don't need to re-check StrictEffectsMode here.
|
|
|
// This function is only called if that check has already passed.
|
|
|
switch (fiber.tag) {
|
|
|
case FunctionComponent:
|
|
|
case ForwardRef:
|
|
|
case SimpleMemoComponent:
|
|
|
{
|
|
|
try {
|
|
|
commitHookEffectListUnmount(Layout | HasEffect, fiber, fiber.return);
|
|
|
} catch (error) {
|
|
|
captureCommitPhaseError(fiber, fiber.return, error);
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
case ClassComponent:
|
|
|
{
|
|
|
var instance = fiber.stateNode;
|
|
|
|
|
|
if (typeof instance.componentWillUnmount === 'function') {
|
|
|
safelyCallComponentWillUnmount(fiber, fiber.return, instance);
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function invokePassiveEffectUnmountInDEV(fiber) {
|
|
|
{
|
|
|
// We don't need to re-check StrictEffectsMode here.
|
|
|
// This function is only called if that check has already passed.
|
|
|
switch (fiber.tag) {
|
|
|
case FunctionComponent:
|
|
|
case ForwardRef:
|
|
|
case SimpleMemoComponent:
|
|
|
{
|
|
|
try {
|
|
|
commitHookEffectListUnmount(Passive$1 | HasEffect, fiber, fiber.return);
|
|
|
} catch (error) {
|
|
|
captureCommitPhaseError(fiber, fiber.return, error);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var COMPONENT_TYPE = 0;
|
|
|
var HAS_PSEUDO_CLASS_TYPE = 1;
|
|
|
var ROLE_TYPE = 2;
|
|
|
var TEST_NAME_TYPE = 3;
|
|
|
var TEXT_TYPE = 4;
|
|
|
|
|
|
if (typeof Symbol === 'function' && Symbol.for) {
|
|
|
var symbolFor = Symbol.for;
|
|
|
COMPONENT_TYPE = symbolFor('selector.component');
|
|
|
HAS_PSEUDO_CLASS_TYPE = symbolFor('selector.has_pseudo_class');
|
|
|
ROLE_TYPE = symbolFor('selector.role');
|
|
|
TEST_NAME_TYPE = symbolFor('selector.test_id');
|
|
|
TEXT_TYPE = symbolFor('selector.text');
|
|
|
}
|
|
|
var commitHooks = [];
|
|
|
function onCommitRoot$1() {
|
|
|
{
|
|
|
commitHooks.forEach(function (commitHook) {
|
|
|
return commitHook();
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var ReactCurrentActQueue = ReactSharedInternals.ReactCurrentActQueue;
|
|
|
function isLegacyActEnvironment(fiber) {
|
|
|
{
|
|
|
// Legacy mode. We preserve the behavior of React 17's act. It assumes an
|
|
|
// act environment whenever `jest` is defined, but you can still turn off
|
|
|
// spurious warnings by setting IS_REACT_ACT_ENVIRONMENT explicitly
|
|
|
// to false.
|
|
|
var isReactActEnvironmentGlobal = // $FlowExpectedError – Flow doesn't know about IS_REACT_ACT_ENVIRONMENT global
|
|
|
typeof IS_REACT_ACT_ENVIRONMENT !== 'undefined' ? IS_REACT_ACT_ENVIRONMENT : undefined; // $FlowExpectedError - Flow doesn't know about jest
|
|
|
|
|
|
var jestIsDefined = typeof jest !== 'undefined';
|
|
|
return jestIsDefined && isReactActEnvironmentGlobal !== false;
|
|
|
}
|
|
|
}
|
|
|
function isConcurrentActEnvironment() {
|
|
|
{
|
|
|
var isReactActEnvironmentGlobal = // $FlowExpectedError – Flow doesn't know about IS_REACT_ACT_ENVIRONMENT global
|
|
|
typeof IS_REACT_ACT_ENVIRONMENT !== 'undefined' ? IS_REACT_ACT_ENVIRONMENT : undefined;
|
|
|
|
|
|
if (!isReactActEnvironmentGlobal && ReactCurrentActQueue.current !== null) {
|
|
|
// TODO: Include link to relevant documentation page.
|
|
|
error('The current testing environment is not configured to support ' + 'act(...)');
|
|
|
}
|
|
|
|
|
|
return isReactActEnvironmentGlobal;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var ceil = Math.ceil;
|
|
|
var ReactCurrentDispatcher$2 = ReactSharedInternals.ReactCurrentDispatcher,
|
|
|
ReactCurrentOwner$2 = ReactSharedInternals.ReactCurrentOwner,
|
|
|
ReactCurrentBatchConfig$3 = ReactSharedInternals.ReactCurrentBatchConfig,
|
|
|
ReactCurrentActQueue$1 = ReactSharedInternals.ReactCurrentActQueue;
|
|
|
var NoContext =
|
|
|
/* */
|
|
|
0;
|
|
|
var BatchedContext =
|
|
|
/* */
|
|
|
1;
|
|
|
var RenderContext =
|
|
|
/* */
|
|
|
2;
|
|
|
var CommitContext =
|
|
|
/* */
|
|
|
4;
|
|
|
var RootInProgress = 0;
|
|
|
var RootFatalErrored = 1;
|
|
|
var RootErrored = 2;
|
|
|
var RootSuspended = 3;
|
|
|
var RootSuspendedWithDelay = 4;
|
|
|
var RootCompleted = 5;
|
|
|
var RootDidNotComplete = 6; // Describes where we are in the React execution stack
|
|
|
|
|
|
var executionContext = NoContext; // The root we're working on
|
|
|
|
|
|
var workInProgressRoot = null; // The fiber we're working on
|
|
|
|
|
|
var workInProgress = null; // The lanes we're rendering
|
|
|
|
|
|
var workInProgressRootRenderLanes = NoLanes; // Stack that allows components to change the render lanes for its subtree
|
|
|
// This is a superset of the lanes we started working on at the root. The only
|
|
|
// case where it's different from `workInProgressRootRenderLanes` is when we
|
|
|
// enter a subtree that is hidden and needs to be unhidden: Suspense and
|
|
|
// Offscreen component.
|
|
|
//
|
|
|
// Most things in the work loop should deal with workInProgressRootRenderLanes.
|
|
|
// Most things in begin/complete phases should deal with subtreeRenderLanes.
|
|
|
|
|
|
var subtreeRenderLanes = NoLanes;
|
|
|
var subtreeRenderLanesCursor = createCursor(NoLanes); // Whether to root completed, errored, suspended, etc.
|
|
|
|
|
|
var workInProgressRootExitStatus = RootInProgress; // A fatal error, if one is thrown
|
|
|
|
|
|
var workInProgressRootFatalError = null; // "Included" lanes refer to lanes that were worked on during this render. It's
|
|
|
// slightly different than `renderLanes` because `renderLanes` can change as you
|
|
|
// enter and exit an Offscreen tree. This value is the combination of all render
|
|
|
// lanes for the entire render phase.
|
|
|
|
|
|
var workInProgressRootIncludedLanes = NoLanes; // The work left over by components that were visited during this render. Only
|
|
|
// includes unprocessed updates, not work in bailed out children.
|
|
|
|
|
|
var workInProgressRootSkippedLanes = NoLanes; // Lanes that were updated (in an interleaved event) during this render.
|
|
|
|
|
|
var workInProgressRootInterleavedUpdatedLanes = NoLanes; // Lanes that were updated during the render phase (*not* an interleaved event).
|
|
|
|
|
|
var workInProgressRootPingedLanes = NoLanes; // Errors that are thrown during the render phase.
|
|
|
|
|
|
var workInProgressRootConcurrentErrors = null; // These are errors that we recovered from without surfacing them to the UI.
|
|
|
// We will log them once the tree commits.
|
|
|
|
|
|
var workInProgressRootRecoverableErrors = null; // The most recent time we committed a fallback. This lets us ensure a train
|
|
|
// model where we don't commit new loading states in too quick succession.
|
|
|
|
|
|
var globalMostRecentFallbackTime = 0;
|
|
|
var FALLBACK_THROTTLE_MS = 500; // The absolute time for when we should start giving up on rendering
|
|
|
// more and prefer CPU suspense heuristics instead.
|
|
|
|
|
|
var workInProgressRootRenderTargetTime = Infinity; // How long a render is supposed to take before we start following CPU
|
|
|
// suspense heuristics and opt out of rendering more content.
|
|
|
|
|
|
var RENDER_TIMEOUT_MS = 500;
|
|
|
var workInProgressTransitions = null;
|
|
|
|
|
|
function resetRenderTimer() {
|
|
|
workInProgressRootRenderTargetTime = now() + RENDER_TIMEOUT_MS;
|
|
|
}
|
|
|
|
|
|
function getRenderTargetTime() {
|
|
|
return workInProgressRootRenderTargetTime;
|
|
|
}
|
|
|
var hasUncaughtError = false;
|
|
|
var firstUncaughtError = null;
|
|
|
var legacyErrorBoundariesThatAlreadyFailed = null; // Only used when enableProfilerNestedUpdateScheduledHook is true;
|
|
|
var rootDoesHavePassiveEffects = false;
|
|
|
var rootWithPendingPassiveEffects = null;
|
|
|
var pendingPassiveEffectsLanes = NoLanes;
|
|
|
var pendingPassiveProfilerEffects = [];
|
|
|
var pendingPassiveTransitions = null; // Use these to prevent an infinite loop of nested updates
|
|
|
|
|
|
var NESTED_UPDATE_LIMIT = 50;
|
|
|
var nestedUpdateCount = 0;
|
|
|
var rootWithNestedUpdates = null;
|
|
|
var isFlushingPassiveEffects = false;
|
|
|
var didScheduleUpdateDuringPassiveEffects = false;
|
|
|
var NESTED_PASSIVE_UPDATE_LIMIT = 50;
|
|
|
var nestedPassiveUpdateCount = 0;
|
|
|
var rootWithPassiveNestedUpdates = null; // If two updates are scheduled within the same event, we should treat their
|
|
|
// event times as simultaneous, even if the actual clock time has advanced
|
|
|
// between the first and second call.
|
|
|
|
|
|
var currentEventTime = NoTimestamp;
|
|
|
var currentEventTransitionLane = NoLanes;
|
|
|
var isRunningInsertionEffect = false;
|
|
|
function getWorkInProgressRoot() {
|
|
|
return workInProgressRoot;
|
|
|
}
|
|
|
function requestEventTime() {
|
|
|
if ((executionContext & (RenderContext | CommitContext)) !== NoContext) {
|
|
|
// We're inside React, so it's fine to read the actual time.
|
|
|
return now();
|
|
|
} // We're not inside React, so we may be in the middle of a browser event.
|
|
|
|
|
|
|
|
|
if (currentEventTime !== NoTimestamp) {
|
|
|
// Use the same start time for all updates until we enter React again.
|
|
|
return currentEventTime;
|
|
|
} // This is the first update since React yielded. Compute a new start time.
|
|
|
|
|
|
|
|
|
currentEventTime = now();
|
|
|
return currentEventTime;
|
|
|
}
|
|
|
function requestUpdateLane(fiber) {
|
|
|
// Special cases
|
|
|
var mode = fiber.mode;
|
|
|
|
|
|
if ((mode & ConcurrentMode) === NoMode) {
|
|
|
return SyncLane;
|
|
|
} else if ( (executionContext & RenderContext) !== NoContext && workInProgressRootRenderLanes !== NoLanes) {
|
|
|
// This is a render phase update. These are not officially supported. The
|
|
|
// old behavior is to give this the same "thread" (lanes) as
|
|
|
// whatever is currently rendering. So if you call `setState` on a component
|
|
|
// that happens later in the same render, it will flush. Ideally, we want to
|
|
|
// remove the special case and treat them as if they came from an
|
|
|
// interleaved event. Regardless, this pattern is not officially supported.
|
|
|
// This behavior is only a fallback. The flag only exists until we can roll
|
|
|
// out the setState warning, since existing code might accidentally rely on
|
|
|
// the current behavior.
|
|
|
return pickArbitraryLane(workInProgressRootRenderLanes);
|
|
|
}
|
|
|
|
|
|
var isTransition = requestCurrentTransition() !== NoTransition;
|
|
|
|
|
|
if (isTransition) {
|
|
|
if ( ReactCurrentBatchConfig$3.transition !== null) {
|
|
|
var transition = ReactCurrentBatchConfig$3.transition;
|
|
|
|
|
|
if (!transition._updatedFibers) {
|
|
|
transition._updatedFibers = new Set();
|
|
|
}
|
|
|
|
|
|
transition._updatedFibers.add(fiber);
|
|
|
} // The algorithm for assigning an update to a lane should be stable for all
|
|
|
// updates at the same priority within the same event. To do this, the
|
|
|
// inputs to the algorithm must be the same.
|
|
|
//
|
|
|
// The trick we use is to cache the first of each of these inputs within an
|
|
|
// event. Then reset the cached values once we can be sure the event is
|
|
|
// over. Our heuristic for that is whenever we enter a concurrent work loop.
|
|
|
|
|
|
|
|
|
if (currentEventTransitionLane === NoLane) {
|
|
|
// All transitions within the same event are assigned the same lane.
|
|
|
currentEventTransitionLane = claimNextTransitionLane();
|
|
|
}
|
|
|
|
|
|
return currentEventTransitionLane;
|
|
|
} // Updates originating inside certain React methods, like flushSync, have
|
|
|
// their priority set by tracking it with a context variable.
|
|
|
//
|
|
|
// The opaque type returned by the host config is internally a lane, so we can
|
|
|
// use that directly.
|
|
|
// TODO: Move this type conversion to the event priority module.
|
|
|
|
|
|
|
|
|
var updateLane = getCurrentUpdatePriority();
|
|
|
|
|
|
if (updateLane !== NoLane) {
|
|
|
return updateLane;
|
|
|
} // This update originated outside React. Ask the host environment for an
|
|
|
// appropriate priority, based on the type of event.
|
|
|
//
|
|
|
// The opaque type returned by the host config is internally a lane, so we can
|
|
|
// use that directly.
|
|
|
// TODO: Move this type conversion to the event priority module.
|
|
|
|
|
|
|
|
|
var eventLane = getCurrentEventPriority();
|
|
|
return eventLane;
|
|
|
}
|
|
|
|
|
|
function requestRetryLane(fiber) {
|
|
|
// This is a fork of `requestUpdateLane` designed specifically for Suspense
|
|
|
// "retries" — a special update that attempts to flip a Suspense boundary
|
|
|
// from its placeholder state to its primary/resolved state.
|
|
|
// Special cases
|
|
|
var mode = fiber.mode;
|
|
|
|
|
|
if ((mode & ConcurrentMode) === NoMode) {
|
|
|
return SyncLane;
|
|
|
}
|
|
|
|
|
|
return claimNextRetryLane();
|
|
|
}
|
|
|
|
|
|
function scheduleUpdateOnFiber(root, fiber, lane, eventTime) {
|
|
|
checkForNestedUpdates();
|
|
|
|
|
|
{
|
|
|
if (isRunningInsertionEffect) {
|
|
|
error('useInsertionEffect must not schedule updates.');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
{
|
|
|
if (isFlushingPassiveEffects) {
|
|
|
didScheduleUpdateDuringPassiveEffects = true;
|
|
|
}
|
|
|
} // Mark that the root has a pending update.
|
|
|
|
|
|
|
|
|
markRootUpdated(root, lane, eventTime);
|
|
|
|
|
|
if ((executionContext & RenderContext) !== NoLanes && root === workInProgressRoot) {
|
|
|
// This update was dispatched during the render phase. This is a mistake
|
|
|
// if the update originates from user space (with the exception of local
|
|
|
// hook updates, which are handled differently and don't reach this
|
|
|
// function), but there are some internal React features that use this as
|
|
|
// an implementation detail, like selective hydration.
|
|
|
warnAboutRenderPhaseUpdatesInDEV(fiber); // Track lanes that were updated during the render phase
|
|
|
} else {
|
|
|
// This is a normal update, scheduled from outside the render phase. For
|
|
|
// example, during an input event.
|
|
|
{
|
|
|
if (isDevToolsPresent) {
|
|
|
addFiberToLanesMap(root, fiber, lane);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
warnIfUpdatesNotWrappedWithActDEV(fiber);
|
|
|
|
|
|
if (root === workInProgressRoot) {
|
|
|
// Received an update to a tree that's in the middle of rendering. Mark
|
|
|
// that there was an interleaved update work on this root. Unless the
|
|
|
// `deferRenderPhaseUpdateToNextBatch` flag is off and this is a render
|
|
|
// phase update. In that case, we don't treat render phase updates as if
|
|
|
// they were interleaved, for backwards compat reasons.
|
|
|
if ( (executionContext & RenderContext) === NoContext) {
|
|
|
workInProgressRootInterleavedUpdatedLanes = mergeLanes(workInProgressRootInterleavedUpdatedLanes, lane);
|
|
|
}
|
|
|
|
|
|
if (workInProgressRootExitStatus === RootSuspendedWithDelay) {
|
|
|
// The root already suspended with a delay, which means this render
|
|
|
// definitely won't finish. Since we have a new update, let's mark it as
|
|
|
// suspended now, right before marking the incoming update. This has the
|
|
|
// effect of interrupting the current render and switching to the update.
|
|
|
// TODO: Make sure this doesn't override pings that happen while we've
|
|
|
// already started rendering.
|
|
|
markRootSuspended$1(root, workInProgressRootRenderLanes);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
ensureRootIsScheduled(root, eventTime);
|
|
|
|
|
|
if (lane === SyncLane && executionContext === NoContext && (fiber.mode & ConcurrentMode) === NoMode && // Treat `act` as if it's inside `batchedUpdates`, even in legacy mode.
|
|
|
!( ReactCurrentActQueue$1.isBatchingLegacy)) {
|
|
|
// Flush the synchronous work now, unless we're already working or inside
|
|
|
// a batch. This is intentionally inside scheduleUpdateOnFiber instead of
|
|
|
// scheduleCallbackForFiber to preserve the ability to schedule a callback
|
|
|
// without immediately flushing it. We only do this for user-initiated
|
|
|
// updates, to preserve historical behavior of legacy mode.
|
|
|
resetRenderTimer();
|
|
|
flushSyncCallbacksOnlyInLegacyMode();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
function scheduleInitialHydrationOnRoot(root, lane, eventTime) {
|
|
|
// This is a special fork of scheduleUpdateOnFiber that is only used to
|
|
|
// schedule the initial hydration of a root that has just been created. Most
|
|
|
// of the stuff in scheduleUpdateOnFiber can be skipped.
|
|
|
//
|
|
|
// The main reason for this separate path, though, is to distinguish the
|
|
|
// initial children from subsequent updates. In fully client-rendered roots
|
|
|
// (createRoot instead of hydrateRoot), all top-level renders are modeled as
|
|
|
// updates, but hydration roots are special because the initial render must
|
|
|
// match what was rendered on the server.
|
|
|
var current = root.current;
|
|
|
current.lanes = lane;
|
|
|
markRootUpdated(root, lane, eventTime);
|
|
|
ensureRootIsScheduled(root, eventTime);
|
|
|
}
|
|
|
function isUnsafeClassRenderPhaseUpdate(fiber) {
|
|
|
// Check if this is a render phase update. Only called by class components,
|
|
|
// which special (deprecated) behavior for UNSAFE_componentWillReceive props.
|
|
|
return (// TODO: Remove outdated deferRenderPhaseUpdateToNextBatch experiment. We
|
|
|
// decided not to enable it.
|
|
|
(executionContext & RenderContext) !== NoContext
|
|
|
);
|
|
|
} // Use this function to schedule a task for a root. There's only one task per
|
|
|
// root; if a task was already scheduled, we'll check to make sure the priority
|
|
|
// of the existing task is the same as the priority of the next level that the
|
|
|
// root has work on. This function is called on every update, and right before
|
|
|
// exiting a task.
|
|
|
|
|
|
function ensureRootIsScheduled(root, currentTime) {
|
|
|
var existingCallbackNode = root.callbackNode; // Check if any lanes are being starved by other work. If so, mark them as
|
|
|
// expired so we know to work on those next.
|
|
|
|
|
|
markStarvedLanesAsExpired(root, currentTime); // Determine the next lanes to work on, and their priority.
|
|
|
|
|
|
var nextLanes = getNextLanes(root, root === workInProgressRoot ? workInProgressRootRenderLanes : NoLanes);
|
|
|
|
|
|
if (nextLanes === NoLanes) {
|
|
|
// Special case: There's nothing to work on.
|
|
|
if (existingCallbackNode !== null) {
|
|
|
cancelCallback$1(existingCallbackNode);
|
|
|
}
|
|
|
|
|
|
root.callbackNode = null;
|
|
|
root.callbackPriority = NoLane;
|
|
|
return;
|
|
|
} // We use the highest priority lane to represent the priority of the callback.
|
|
|
|
|
|
|
|
|
var newCallbackPriority = getHighestPriorityLane(nextLanes); // Check if there's an existing task. We may be able to reuse it.
|
|
|
|
|
|
var existingCallbackPriority = root.callbackPriority;
|
|
|
|
|
|
if (existingCallbackPriority === newCallbackPriority && // Special case related to `act`. If the currently scheduled task is a
|
|
|
// Scheduler task, rather than an `act` task, cancel it and re-scheduled
|
|
|
// on the `act` queue.
|
|
|
!( ReactCurrentActQueue$1.current !== null && existingCallbackNode !== fakeActCallbackNode)) {
|
|
|
{
|
|
|
// If we're going to re-use an existing task, it needs to exist.
|
|
|
// Assume that discrete update microtasks are non-cancellable and null.
|
|
|
// TODO: Temporary until we confirm this warning is not fired.
|
|
|
if (existingCallbackNode == null && existingCallbackPriority !== SyncLane) {
|
|
|
error('Expected scheduled callback to exist. This error is likely caused by a bug in React. Please file an issue.');
|
|
|
}
|
|
|
} // The priority hasn't changed. We can reuse the existing task. Exit.
|
|
|
|
|
|
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (existingCallbackNode != null) {
|
|
|
// Cancel the existing callback. We'll schedule a new one below.
|
|
|
cancelCallback$1(existingCallbackNode);
|
|
|
} // Schedule a new callback.
|
|
|
|
|
|
|
|
|
var newCallbackNode;
|
|
|
|
|
|
if (newCallbackPriority === SyncLane) {
|
|
|
// Special case: Sync React callbacks are scheduled on a special
|
|
|
// internal queue
|
|
|
if (root.tag === LegacyRoot) {
|
|
|
if ( ReactCurrentActQueue$1.isBatchingLegacy !== null) {
|
|
|
ReactCurrentActQueue$1.didScheduleLegacyUpdate = true;
|
|
|
}
|
|
|
|
|
|
scheduleLegacySyncCallback(performSyncWorkOnRoot.bind(null, root));
|
|
|
} else {
|
|
|
scheduleSyncCallback(performSyncWorkOnRoot.bind(null, root));
|
|
|
}
|
|
|
|
|
|
{
|
|
|
// Flush the queue in a microtask.
|
|
|
if ( ReactCurrentActQueue$1.current !== null) {
|
|
|
// Inside `act`, use our internal `act` queue so that these get flushed
|
|
|
// at the end of the current scope even when using the sync version
|
|
|
// of `act`.
|
|
|
ReactCurrentActQueue$1.current.push(flushSyncCallbacks);
|
|
|
} else {
|
|
|
scheduleMicrotask(function () {
|
|
|
// In Safari, appending an iframe forces microtasks to run.
|
|
|
// https://github.com/facebook/react/issues/22459
|
|
|
// We don't support running callbacks in the middle of render
|
|
|
// or commit so we need to check against that.
|
|
|
if ((executionContext & (RenderContext | CommitContext)) === NoContext) {
|
|
|
// Note that this would still prematurely flush the callbacks
|
|
|
// if this happens outside render or commit phase (e.g. in an event).
|
|
|
flushSyncCallbacks();
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
|
|
|
newCallbackNode = null;
|
|
|
} else {
|
|
|
var schedulerPriorityLevel;
|
|
|
|
|
|
switch (lanesToEventPriority(nextLanes)) {
|
|
|
case DiscreteEventPriority:
|
|
|
schedulerPriorityLevel = ImmediatePriority;
|
|
|
break;
|
|
|
|
|
|
case ContinuousEventPriority:
|
|
|
schedulerPriorityLevel = UserBlockingPriority;
|
|
|
break;
|
|
|
|
|
|
case DefaultEventPriority:
|
|
|
schedulerPriorityLevel = NormalPriority;
|
|
|
break;
|
|
|
|
|
|
case IdleEventPriority:
|
|
|
schedulerPriorityLevel = IdlePriority;
|
|
|
break;
|
|
|
|
|
|
default:
|
|
|
schedulerPriorityLevel = NormalPriority;
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
newCallbackNode = scheduleCallback$1(schedulerPriorityLevel, performConcurrentWorkOnRoot.bind(null, root));
|
|
|
}
|
|
|
|
|
|
root.callbackPriority = newCallbackPriority;
|
|
|
root.callbackNode = newCallbackNode;
|
|
|
} // This is the entry point for every concurrent task, i.e. anything that
|
|
|
// goes through Scheduler.
|
|
|
|
|
|
|
|
|
function performConcurrentWorkOnRoot(root, didTimeout) {
|
|
|
{
|
|
|
resetNestedUpdateFlag();
|
|
|
} // Since we know we're in a React event, we can clear the current
|
|
|
// event time. The next update will compute a new event time.
|
|
|
|
|
|
|
|
|
currentEventTime = NoTimestamp;
|
|
|
currentEventTransitionLane = NoLanes;
|
|
|
|
|
|
if ((executionContext & (RenderContext | CommitContext)) !== NoContext) {
|
|
|
throw new Error('Should not already be working.');
|
|
|
} // Flush any pending passive effects before deciding which lanes to work on,
|
|
|
// in case they schedule additional work.
|
|
|
|
|
|
|
|
|
var originalCallbackNode = root.callbackNode;
|
|
|
var didFlushPassiveEffects = flushPassiveEffects();
|
|
|
|
|
|
if (didFlushPassiveEffects) {
|
|
|
// Something in the passive effect phase may have canceled the current task.
|
|
|
// Check if the task node for this root was changed.
|
|
|
if (root.callbackNode !== originalCallbackNode) {
|
|
|
// The current task was canceled. Exit. We don't need to call
|
|
|
// `ensureRootIsScheduled` because the check above implies either that
|
|
|
// there's a new task, or that there's no remaining work on this root.
|
|
|
return null;
|
|
|
}
|
|
|
} // Determine the next lanes to work on, using the fields stored
|
|
|
// on the root.
|
|
|
|
|
|
|
|
|
var lanes = getNextLanes(root, root === workInProgressRoot ? workInProgressRootRenderLanes : NoLanes);
|
|
|
|
|
|
if (lanes === NoLanes) {
|
|
|
// Defensive coding. This is never expected to happen.
|
|
|
return null;
|
|
|
} // We disable time-slicing in some cases: if the work has been CPU-bound
|
|
|
// for too long ("expired" work, to prevent starvation), or we're in
|
|
|
// sync-updates-by-default mode.
|
|
|
// TODO: We only check `didTimeout` defensively, to account for a Scheduler
|
|
|
// bug we're still investigating. Once the bug in Scheduler is fixed,
|
|
|
// we can remove this, since we track expiration ourselves.
|
|
|
|
|
|
|
|
|
var shouldTimeSlice = !includesBlockingLane(root, lanes) && !includesExpiredLane(root, lanes) && ( !didTimeout);
|
|
|
var exitStatus = shouldTimeSlice ? renderRootConcurrent(root, lanes) : renderRootSync(root, lanes);
|
|
|
|
|
|
if (exitStatus !== RootInProgress) {
|
|
|
if (exitStatus === RootErrored) {
|
|
|
// If something threw an error, try rendering one more time. We'll
|
|
|
// render synchronously to block concurrent data mutations, and we'll
|
|
|
// includes all pending updates are included. If it still fails after
|
|
|
// the second attempt, we'll give up and commit the resulting tree.
|
|
|
var errorRetryLanes = getLanesToRetrySynchronouslyOnError(root);
|
|
|
|
|
|
if (errorRetryLanes !== NoLanes) {
|
|
|
lanes = errorRetryLanes;
|
|
|
exitStatus = recoverFromConcurrentError(root, errorRetryLanes);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (exitStatus === RootFatalErrored) {
|
|
|
var fatalError = workInProgressRootFatalError;
|
|
|
prepareFreshStack(root, NoLanes);
|
|
|
markRootSuspended$1(root, lanes);
|
|
|
ensureRootIsScheduled(root, now());
|
|
|
throw fatalError;
|
|
|
}
|
|
|
|
|
|
if (exitStatus === RootDidNotComplete) {
|
|
|
// The render unwound without completing the tree. This happens in special
|
|
|
// cases where need to exit the current render without producing a
|
|
|
// consistent tree or committing.
|
|
|
//
|
|
|
// This should only happen during a concurrent render, not a discrete or
|
|
|
// synchronous update. We should have already checked for this when we
|
|
|
// unwound the stack.
|
|
|
markRootSuspended$1(root, lanes);
|
|
|
} else {
|
|
|
// The render completed.
|
|
|
// Check if this render may have yielded to a concurrent event, and if so,
|
|
|
// confirm that any newly rendered stores are consistent.
|
|
|
// TODO: It's possible that even a concurrent render may never have yielded
|
|
|
// to the main thread, if it was fast enough, or if it expired. We could
|
|
|
// skip the consistency check in that case, too.
|
|
|
var renderWasConcurrent = !includesBlockingLane(root, lanes);
|
|
|
var finishedWork = root.current.alternate;
|
|
|
|
|
|
if (renderWasConcurrent && !isRenderConsistentWithExternalStores(finishedWork)) {
|
|
|
// A store was mutated in an interleaved event. Render again,
|
|
|
// synchronously, to block further mutations.
|
|
|
exitStatus = renderRootSync(root, lanes); // We need to check again if something threw
|
|
|
|
|
|
if (exitStatus === RootErrored) {
|
|
|
var _errorRetryLanes = getLanesToRetrySynchronouslyOnError(root);
|
|
|
|
|
|
if (_errorRetryLanes !== NoLanes) {
|
|
|
lanes = _errorRetryLanes;
|
|
|
exitStatus = recoverFromConcurrentError(root, _errorRetryLanes); // We assume the tree is now consistent because we didn't yield to any
|
|
|
// concurrent events.
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (exitStatus === RootFatalErrored) {
|
|
|
var _fatalError = workInProgressRootFatalError;
|
|
|
prepareFreshStack(root, NoLanes);
|
|
|
markRootSuspended$1(root, lanes);
|
|
|
ensureRootIsScheduled(root, now());
|
|
|
throw _fatalError;
|
|
|
}
|
|
|
} // We now have a consistent tree. The next step is either to commit it,
|
|
|
// or, if something suspended, wait to commit it after a timeout.
|
|
|
|
|
|
|
|
|
root.finishedWork = finishedWork;
|
|
|
root.finishedLanes = lanes;
|
|
|
finishConcurrentRender(root, exitStatus, lanes);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
ensureRootIsScheduled(root, now());
|
|
|
|
|
|
if (root.callbackNode === originalCallbackNode) {
|
|
|
// The task node scheduled for this root is the same one that's
|
|
|
// currently executed. Need to return a continuation.
|
|
|
return performConcurrentWorkOnRoot.bind(null, root);
|
|
|
}
|
|
|
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
function recoverFromConcurrentError(root, errorRetryLanes) {
|
|
|
// If an error occurred during hydration, discard server response and fall
|
|
|
// back to client side render.
|
|
|
// Before rendering again, save the errors from the previous attempt.
|
|
|
var errorsFromFirstAttempt = workInProgressRootConcurrentErrors;
|
|
|
|
|
|
if (isRootDehydrated(root)) {
|
|
|
// The shell failed to hydrate. Set a flag to force a client rendering
|
|
|
// during the next attempt. To do this, we call prepareFreshStack now
|
|
|
// to create the root work-in-progress fiber. This is a bit weird in terms
|
|
|
// of factoring, because it relies on renderRootSync not calling
|
|
|
// prepareFreshStack again in the call below, which happens because the
|
|
|
// root and lanes haven't changed.
|
|
|
//
|
|
|
// TODO: I think what we should do is set ForceClientRender inside
|
|
|
// throwException, like we do for nested Suspense boundaries. The reason
|
|
|
// it's here instead is so we can switch to the synchronous work loop, too.
|
|
|
// Something to consider for a future refactor.
|
|
|
var rootWorkInProgress = prepareFreshStack(root, errorRetryLanes);
|
|
|
rootWorkInProgress.flags |= ForceClientRender;
|
|
|
|
|
|
{
|
|
|
errorHydratingContainer(root.containerInfo);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var exitStatus = renderRootSync(root, errorRetryLanes);
|
|
|
|
|
|
if (exitStatus !== RootErrored) {
|
|
|
// Successfully finished rendering on retry
|
|
|
// The errors from the failed first attempt have been recovered. Add
|
|
|
// them to the collection of recoverable errors. We'll log them in the
|
|
|
// commit phase.
|
|
|
var errorsFromSecondAttempt = workInProgressRootRecoverableErrors;
|
|
|
workInProgressRootRecoverableErrors = errorsFromFirstAttempt; // The errors from the second attempt should be queued after the errors
|
|
|
// from the first attempt, to preserve the causal sequence.
|
|
|
|
|
|
if (errorsFromSecondAttempt !== null) {
|
|
|
queueRecoverableErrors(errorsFromSecondAttempt);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return exitStatus;
|
|
|
}
|
|
|
|
|
|
function queueRecoverableErrors(errors) {
|
|
|
if (workInProgressRootRecoverableErrors === null) {
|
|
|
workInProgressRootRecoverableErrors = errors;
|
|
|
} else {
|
|
|
workInProgressRootRecoverableErrors.push.apply(workInProgressRootRecoverableErrors, errors);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function finishConcurrentRender(root, exitStatus, lanes) {
|
|
|
switch (exitStatus) {
|
|
|
case RootInProgress:
|
|
|
case RootFatalErrored:
|
|
|
{
|
|
|
throw new Error('Root did not complete. This is a bug in React.');
|
|
|
}
|
|
|
// Flow knows about invariant, so it complains if I add a break
|
|
|
// statement, but eslint doesn't know about invariant, so it complains
|
|
|
// if I do. eslint-disable-next-line no-fallthrough
|
|
|
|
|
|
case RootErrored:
|
|
|
{
|
|
|
// We should have already attempted to retry this tree. If we reached
|
|
|
// this point, it errored again. Commit it.
|
|
|
commitRoot(root, workInProgressRootRecoverableErrors, workInProgressTransitions);
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
case RootSuspended:
|
|
|
{
|
|
|
markRootSuspended$1(root, lanes); // We have an acceptable loading state. We need to figure out if we
|
|
|
// should immediately commit it or wait a bit.
|
|
|
|
|
|
if (includesOnlyRetries(lanes) && // do not delay if we're inside an act() scope
|
|
|
!shouldForceFlushFallbacksInDEV()) {
|
|
|
// This render only included retries, no updates. Throttle committing
|
|
|
// retries so that we don't show too many loading states too quickly.
|
|
|
var msUntilTimeout = globalMostRecentFallbackTime + FALLBACK_THROTTLE_MS - now(); // Don't bother with a very short suspense time.
|
|
|
|
|
|
if (msUntilTimeout > 10) {
|
|
|
var nextLanes = getNextLanes(root, NoLanes);
|
|
|
|
|
|
if (nextLanes !== NoLanes) {
|
|
|
// There's additional work on this root.
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
var suspendedLanes = root.suspendedLanes;
|
|
|
|
|
|
if (!isSubsetOfLanes(suspendedLanes, lanes)) {
|
|
|
// We should prefer to render the fallback of at the last
|
|
|
// suspended level. Ping the last suspended level to try
|
|
|
// rendering it again.
|
|
|
// FIXME: What if the suspended lanes are Idle? Should not restart.
|
|
|
var eventTime = requestEventTime();
|
|
|
markRootPinged(root, suspendedLanes);
|
|
|
break;
|
|
|
} // The render is suspended, it hasn't timed out, and there's no
|
|
|
// lower priority work to do. Instead of committing the fallback
|
|
|
// immediately, wait for more data to arrive.
|
|
|
|
|
|
|
|
|
root.timeoutHandle = scheduleTimeout(commitRoot.bind(null, root, workInProgressRootRecoverableErrors, workInProgressTransitions), msUntilTimeout);
|
|
|
break;
|
|
|
}
|
|
|
} // The work expired. Commit immediately.
|
|
|
|
|
|
|
|
|
commitRoot(root, workInProgressRootRecoverableErrors, workInProgressTransitions);
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
case RootSuspendedWithDelay:
|
|
|
{
|
|
|
markRootSuspended$1(root, lanes);
|
|
|
|
|
|
if (includesOnlyTransitions(lanes)) {
|
|
|
// This is a transition, so we should exit without committing a
|
|
|
// placeholder and without scheduling a timeout. Delay indefinitely
|
|
|
// until we receive more data.
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
if (!shouldForceFlushFallbacksInDEV()) {
|
|
|
// This is not a transition, but we did trigger an avoided state.
|
|
|
// Schedule a placeholder to display after a short delay, using the Just
|
|
|
// Noticeable Difference.
|
|
|
// TODO: Is the JND optimization worth the added complexity? If this is
|
|
|
// the only reason we track the event time, then probably not.
|
|
|
// Consider removing.
|
|
|
var mostRecentEventTime = getMostRecentEventTime(root, lanes);
|
|
|
var eventTimeMs = mostRecentEventTime;
|
|
|
var timeElapsedMs = now() - eventTimeMs;
|
|
|
|
|
|
var _msUntilTimeout = jnd(timeElapsedMs) - timeElapsedMs; // Don't bother with a very short suspense time.
|
|
|
|
|
|
|
|
|
if (_msUntilTimeout > 10) {
|
|
|
// Instead of committing the fallback immediately, wait for more data
|
|
|
// to arrive.
|
|
|
root.timeoutHandle = scheduleTimeout(commitRoot.bind(null, root, workInProgressRootRecoverableErrors, workInProgressTransitions), _msUntilTimeout);
|
|
|
break;
|
|
|
}
|
|
|
} // Commit the placeholder.
|
|
|
|
|
|
|
|
|
commitRoot(root, workInProgressRootRecoverableErrors, workInProgressTransitions);
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
case RootCompleted:
|
|
|
{
|
|
|
// The work completed. Ready to commit.
|
|
|
commitRoot(root, workInProgressRootRecoverableErrors, workInProgressTransitions);
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
default:
|
|
|
{
|
|
|
throw new Error('Unknown root exit status.');
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function isRenderConsistentWithExternalStores(finishedWork) {
|
|
|
// Search the rendered tree for external store reads, and check whether the
|
|
|
// stores were mutated in a concurrent event. Intentionally using an iterative
|
|
|
// loop instead of recursion so we can exit early.
|
|
|
var node = finishedWork;
|
|
|
|
|
|
while (true) {
|
|
|
if (node.flags & StoreConsistency) {
|
|
|
var updateQueue = node.updateQueue;
|
|
|
|
|
|
if (updateQueue !== null) {
|
|
|
var checks = updateQueue.stores;
|
|
|
|
|
|
if (checks !== null) {
|
|
|
for (var i = 0; i < checks.length; i++) {
|
|
|
var check = checks[i];
|
|
|
var getSnapshot = check.getSnapshot;
|
|
|
var renderedValue = check.value;
|
|
|
|
|
|
try {
|
|
|
if (!objectIs(getSnapshot(), renderedValue)) {
|
|
|
// Found an inconsistent store.
|
|
|
return false;
|
|
|
}
|
|
|
} catch (error) {
|
|
|
// If `getSnapshot` throws, return `false`. This will schedule
|
|
|
// a re-render, and the error will be rethrown during render.
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var child = node.child;
|
|
|
|
|
|
if (node.subtreeFlags & StoreConsistency && child !== null) {
|
|
|
child.return = node;
|
|
|
node = child;
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
if (node === finishedWork) {
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
while (node.sibling === null) {
|
|
|
if (node.return === null || node.return === finishedWork) {
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
node = node.return;
|
|
|
}
|
|
|
|
|
|
node.sibling.return = node.return;
|
|
|
node = node.sibling;
|
|
|
} // Flow doesn't know this is unreachable, but eslint does
|
|
|
// eslint-disable-next-line no-unreachable
|
|
|
|
|
|
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
function markRootSuspended$1(root, suspendedLanes) {
|
|
|
// When suspending, we should always exclude lanes that were pinged or (more
|
|
|
// rarely, since we try to avoid it) updated during the render phase.
|
|
|
// TODO: Lol maybe there's a better way to factor this besides this
|
|
|
// obnoxiously named function :)
|
|
|
suspendedLanes = removeLanes(suspendedLanes, workInProgressRootPingedLanes);
|
|
|
suspendedLanes = removeLanes(suspendedLanes, workInProgressRootInterleavedUpdatedLanes);
|
|
|
markRootSuspended(root, suspendedLanes);
|
|
|
} // This is the entry point for synchronous tasks that don't go
|
|
|
// through Scheduler
|
|
|
|
|
|
|
|
|
function performSyncWorkOnRoot(root) {
|
|
|
{
|
|
|
syncNestedUpdateFlag();
|
|
|
}
|
|
|
|
|
|
if ((executionContext & (RenderContext | CommitContext)) !== NoContext) {
|
|
|
throw new Error('Should not already be working.');
|
|
|
}
|
|
|
|
|
|
flushPassiveEffects();
|
|
|
var lanes = getNextLanes(root, NoLanes);
|
|
|
|
|
|
if (!includesSomeLane(lanes, SyncLane)) {
|
|
|
// There's no remaining sync work left.
|
|
|
ensureRootIsScheduled(root, now());
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
var exitStatus = renderRootSync(root, lanes);
|
|
|
|
|
|
if (root.tag !== LegacyRoot && exitStatus === RootErrored) {
|
|
|
// If something threw an error, try rendering one more time. We'll render
|
|
|
// synchronously to block concurrent data mutations, and we'll includes
|
|
|
// all pending updates are included. If it still fails after the second
|
|
|
// attempt, we'll give up and commit the resulting tree.
|
|
|
var errorRetryLanes = getLanesToRetrySynchronouslyOnError(root);
|
|
|
|
|
|
if (errorRetryLanes !== NoLanes) {
|
|
|
lanes = errorRetryLanes;
|
|
|
exitStatus = recoverFromConcurrentError(root, errorRetryLanes);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (exitStatus === RootFatalErrored) {
|
|
|
var fatalError = workInProgressRootFatalError;
|
|
|
prepareFreshStack(root, NoLanes);
|
|
|
markRootSuspended$1(root, lanes);
|
|
|
ensureRootIsScheduled(root, now());
|
|
|
throw fatalError;
|
|
|
}
|
|
|
|
|
|
if (exitStatus === RootDidNotComplete) {
|
|
|
throw new Error('Root did not complete. This is a bug in React.');
|
|
|
} // We now have a consistent tree. Because this is a sync render, we
|
|
|
// will commit it even if something suspended.
|
|
|
|
|
|
|
|
|
var finishedWork = root.current.alternate;
|
|
|
root.finishedWork = finishedWork;
|
|
|
root.finishedLanes = lanes;
|
|
|
commitRoot(root, workInProgressRootRecoverableErrors, workInProgressTransitions); // Before exiting, make sure there's a callback scheduled for the next
|
|
|
// pending level.
|
|
|
|
|
|
ensureRootIsScheduled(root, now());
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
function flushRoot(root, lanes) {
|
|
|
if (lanes !== NoLanes) {
|
|
|
markRootEntangled(root, mergeLanes(lanes, SyncLane));
|
|
|
ensureRootIsScheduled(root, now());
|
|
|
|
|
|
if ((executionContext & (RenderContext | CommitContext)) === NoContext) {
|
|
|
resetRenderTimer();
|
|
|
flushSyncCallbacks();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
function batchedUpdates$1(fn, a) {
|
|
|
var prevExecutionContext = executionContext;
|
|
|
executionContext |= BatchedContext;
|
|
|
|
|
|
try {
|
|
|
return fn(a);
|
|
|
} finally {
|
|
|
executionContext = prevExecutionContext; // If there were legacy sync updates, flush them at the end of the outer
|
|
|
// most batchedUpdates-like method.
|
|
|
|
|
|
if (executionContext === NoContext && // Treat `act` as if it's inside `batchedUpdates`, even in legacy mode.
|
|
|
!( ReactCurrentActQueue$1.isBatchingLegacy)) {
|
|
|
resetRenderTimer();
|
|
|
flushSyncCallbacksOnlyInLegacyMode();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
function discreteUpdates(fn, a, b, c, d) {
|
|
|
var previousPriority = getCurrentUpdatePriority();
|
|
|
var prevTransition = ReactCurrentBatchConfig$3.transition;
|
|
|
|
|
|
try {
|
|
|
ReactCurrentBatchConfig$3.transition = null;
|
|
|
setCurrentUpdatePriority(DiscreteEventPriority);
|
|
|
return fn(a, b, c, d);
|
|
|
} finally {
|
|
|
setCurrentUpdatePriority(previousPriority);
|
|
|
ReactCurrentBatchConfig$3.transition = prevTransition;
|
|
|
|
|
|
if (executionContext === NoContext) {
|
|
|
resetRenderTimer();
|
|
|
}
|
|
|
}
|
|
|
} // Overload the definition to the two valid signatures.
|
|
|
// Warning, this opts-out of checking the function body.
|
|
|
|
|
|
// eslint-disable-next-line no-redeclare
|
|
|
function flushSync(fn) {
|
|
|
// In legacy mode, we flush pending passive effects at the beginning of the
|
|
|
// next event, not at the end of the previous one.
|
|
|
if (rootWithPendingPassiveEffects !== null && rootWithPendingPassiveEffects.tag === LegacyRoot && (executionContext & (RenderContext | CommitContext)) === NoContext) {
|
|
|
flushPassiveEffects();
|
|
|
}
|
|
|
|
|
|
var prevExecutionContext = executionContext;
|
|
|
executionContext |= BatchedContext;
|
|
|
var prevTransition = ReactCurrentBatchConfig$3.transition;
|
|
|
var previousPriority = getCurrentUpdatePriority();
|
|
|
|
|
|
try {
|
|
|
ReactCurrentBatchConfig$3.transition = null;
|
|
|
setCurrentUpdatePriority(DiscreteEventPriority);
|
|
|
|
|
|
if (fn) {
|
|
|
return fn();
|
|
|
} else {
|
|
|
return undefined;
|
|
|
}
|
|
|
} finally {
|
|
|
setCurrentUpdatePriority(previousPriority);
|
|
|
ReactCurrentBatchConfig$3.transition = prevTransition;
|
|
|
executionContext = prevExecutionContext; // Flush the immediate callbacks that were scheduled during this batch.
|
|
|
// Note that this will happen even if batchedUpdates is higher up
|
|
|
// the stack.
|
|
|
|
|
|
if ((executionContext & (RenderContext | CommitContext)) === NoContext) {
|
|
|
flushSyncCallbacks();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
function isAlreadyRendering() {
|
|
|
// Used by the renderer to print a warning if certain APIs are called from
|
|
|
// the wrong context.
|
|
|
return (executionContext & (RenderContext | CommitContext)) !== NoContext;
|
|
|
}
|
|
|
function pushRenderLanes(fiber, lanes) {
|
|
|
push(subtreeRenderLanesCursor, subtreeRenderLanes, fiber);
|
|
|
subtreeRenderLanes = mergeLanes(subtreeRenderLanes, lanes);
|
|
|
workInProgressRootIncludedLanes = mergeLanes(workInProgressRootIncludedLanes, lanes);
|
|
|
}
|
|
|
function popRenderLanes(fiber) {
|
|
|
subtreeRenderLanes = subtreeRenderLanesCursor.current;
|
|
|
pop(subtreeRenderLanesCursor, fiber);
|
|
|
}
|
|
|
|
|
|
function prepareFreshStack(root, lanes) {
|
|
|
root.finishedWork = null;
|
|
|
root.finishedLanes = NoLanes;
|
|
|
var timeoutHandle = root.timeoutHandle;
|
|
|
|
|
|
if (timeoutHandle !== noTimeout) {
|
|
|
// The root previous suspended and scheduled a timeout to commit a fallback
|
|
|
// state. Now that we have additional work, cancel the timeout.
|
|
|
root.timeoutHandle = noTimeout; // $FlowFixMe Complains noTimeout is not a TimeoutID, despite the check above
|
|
|
|
|
|
cancelTimeout(timeoutHandle);
|
|
|
}
|
|
|
|
|
|
if (workInProgress !== null) {
|
|
|
var interruptedWork = workInProgress.return;
|
|
|
|
|
|
while (interruptedWork !== null) {
|
|
|
var current = interruptedWork.alternate;
|
|
|
unwindInterruptedWork(current, interruptedWork);
|
|
|
interruptedWork = interruptedWork.return;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
workInProgressRoot = root;
|
|
|
var rootWorkInProgress = createWorkInProgress(root.current, null);
|
|
|
workInProgress = rootWorkInProgress;
|
|
|
workInProgressRootRenderLanes = subtreeRenderLanes = workInProgressRootIncludedLanes = lanes;
|
|
|
workInProgressRootExitStatus = RootInProgress;
|
|
|
workInProgressRootFatalError = null;
|
|
|
workInProgressRootSkippedLanes = NoLanes;
|
|
|
workInProgressRootInterleavedUpdatedLanes = NoLanes;
|
|
|
workInProgressRootPingedLanes = NoLanes;
|
|
|
workInProgressRootConcurrentErrors = null;
|
|
|
workInProgressRootRecoverableErrors = null;
|
|
|
finishQueueingConcurrentUpdates();
|
|
|
|
|
|
{
|
|
|
ReactStrictModeWarnings.discardPendingWarnings();
|
|
|
}
|
|
|
|
|
|
return rootWorkInProgress;
|
|
|
}
|
|
|
|
|
|
function handleError(root, thrownValue) {
|
|
|
do {
|
|
|
var erroredWork = workInProgress;
|
|
|
|
|
|
try {
|
|
|
// Reset module-level state that was set during the render phase.
|
|
|
resetContextDependencies();
|
|
|
resetHooksAfterThrow();
|
|
|
resetCurrentFiber(); // TODO: I found and added this missing line while investigating a
|
|
|
// separate issue. Write a regression test using string refs.
|
|
|
|
|
|
ReactCurrentOwner$2.current = null;
|
|
|
|
|
|
if (erroredWork === null || erroredWork.return === null) {
|
|
|
// Expected to be working on a non-root fiber. This is a fatal error
|
|
|
// because there's no ancestor that can handle it; the root is
|
|
|
// supposed to capture all errors that weren't caught by an error
|
|
|
// boundary.
|
|
|
workInProgressRootExitStatus = RootFatalErrored;
|
|
|
workInProgressRootFatalError = thrownValue; // Set `workInProgress` to null. This represents advancing to the next
|
|
|
// sibling, or the parent if there are no siblings. But since the root
|
|
|
// has no siblings nor a parent, we set it to null. Usually this is
|
|
|
// handled by `completeUnitOfWork` or `unwindWork`, but since we're
|
|
|
// intentionally not calling those, we need set it here.
|
|
|
// TODO: Consider calling `unwindWork` to pop the contexts.
|
|
|
|
|
|
workInProgress = null;
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (enableProfilerTimer && erroredWork.mode & ProfileMode) {
|
|
|
// Record the time spent rendering before an error was thrown. This
|
|
|
// avoids inaccurate Profiler durations in the case of a
|
|
|
// suspended render.
|
|
|
stopProfilerTimerIfRunningAndRecordDelta(erroredWork, true);
|
|
|
}
|
|
|
|
|
|
if (enableSchedulingProfiler) {
|
|
|
markComponentRenderStopped();
|
|
|
|
|
|
if (thrownValue !== null && typeof thrownValue === 'object' && typeof thrownValue.then === 'function') {
|
|
|
var wakeable = thrownValue;
|
|
|
markComponentSuspended(erroredWork, wakeable, workInProgressRootRenderLanes);
|
|
|
} else {
|
|
|
markComponentErrored(erroredWork, thrownValue, workInProgressRootRenderLanes);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
throwException(root, erroredWork.return, erroredWork, thrownValue, workInProgressRootRenderLanes);
|
|
|
completeUnitOfWork(erroredWork);
|
|
|
} catch (yetAnotherThrownValue) {
|
|
|
// Something in the return path also threw.
|
|
|
thrownValue = yetAnotherThrownValue;
|
|
|
|
|
|
if (workInProgress === erroredWork && erroredWork !== null) {
|
|
|
// If this boundary has already errored, then we had trouble processing
|
|
|
// the error. Bubble it to the next boundary.
|
|
|
erroredWork = erroredWork.return;
|
|
|
workInProgress = erroredWork;
|
|
|
} else {
|
|
|
erroredWork = workInProgress;
|
|
|
}
|
|
|
|
|
|
continue;
|
|
|
} // Return to the normal work loop.
|
|
|
|
|
|
|
|
|
return;
|
|
|
} while (true);
|
|
|
}
|
|
|
|
|
|
function pushDispatcher() {
|
|
|
var prevDispatcher = ReactCurrentDispatcher$2.current;
|
|
|
ReactCurrentDispatcher$2.current = ContextOnlyDispatcher;
|
|
|
|
|
|
if (prevDispatcher === null) {
|
|
|
// The React isomorphic package does not include a default dispatcher.
|
|
|
// Instead the first renderer will lazily attach one, in order to give
|
|
|
// nicer error messages.
|
|
|
return ContextOnlyDispatcher;
|
|
|
} else {
|
|
|
return prevDispatcher;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function popDispatcher(prevDispatcher) {
|
|
|
ReactCurrentDispatcher$2.current = prevDispatcher;
|
|
|
}
|
|
|
|
|
|
function markCommitTimeOfFallback() {
|
|
|
globalMostRecentFallbackTime = now();
|
|
|
}
|
|
|
function markSkippedUpdateLanes(lane) {
|
|
|
workInProgressRootSkippedLanes = mergeLanes(lane, workInProgressRootSkippedLanes);
|
|
|
}
|
|
|
function renderDidSuspend() {
|
|
|
if (workInProgressRootExitStatus === RootInProgress) {
|
|
|
workInProgressRootExitStatus = RootSuspended;
|
|
|
}
|
|
|
}
|
|
|
function renderDidSuspendDelayIfPossible() {
|
|
|
if (workInProgressRootExitStatus === RootInProgress || workInProgressRootExitStatus === RootSuspended || workInProgressRootExitStatus === RootErrored) {
|
|
|
workInProgressRootExitStatus = RootSuspendedWithDelay;
|
|
|
} // Check if there are updates that we skipped tree that might have unblocked
|
|
|
// this render.
|
|
|
|
|
|
|
|
|
if (workInProgressRoot !== null && (includesNonIdleWork(workInProgressRootSkippedLanes) || includesNonIdleWork(workInProgressRootInterleavedUpdatedLanes))) {
|
|
|
// Mark the current render as suspended so that we switch to working on
|
|
|
// the updates that were skipped. Usually we only suspend at the end of
|
|
|
// the render phase.
|
|
|
// TODO: We should probably always mark the root as suspended immediately
|
|
|
// (inside this function), since by suspending at the end of the render
|
|
|
// phase introduces a potential mistake where we suspend lanes that were
|
|
|
// pinged or updated while we were rendering.
|
|
|
markRootSuspended$1(workInProgressRoot, workInProgressRootRenderLanes);
|
|
|
}
|
|
|
}
|
|
|
function renderDidError(error) {
|
|
|
if (workInProgressRootExitStatus !== RootSuspendedWithDelay) {
|
|
|
workInProgressRootExitStatus = RootErrored;
|
|
|
}
|
|
|
|
|
|
if (workInProgressRootConcurrentErrors === null) {
|
|
|
workInProgressRootConcurrentErrors = [error];
|
|
|
} else {
|
|
|
workInProgressRootConcurrentErrors.push(error);
|
|
|
}
|
|
|
} // Called during render to determine if anything has suspended.
|
|
|
// Returns false if we're not sure.
|
|
|
|
|
|
function renderHasNotSuspendedYet() {
|
|
|
// If something errored or completed, we can't really be sure,
|
|
|
// so those are false.
|
|
|
return workInProgressRootExitStatus === RootInProgress;
|
|
|
}
|
|
|
|
|
|
function renderRootSync(root, lanes) {
|
|
|
var prevExecutionContext = executionContext;
|
|
|
executionContext |= RenderContext;
|
|
|
var prevDispatcher = pushDispatcher(); // If the root or lanes have changed, throw out the existing stack
|
|
|
// and prepare a fresh one. Otherwise we'll continue where we left off.
|
|
|
|
|
|
if (workInProgressRoot !== root || workInProgressRootRenderLanes !== lanes) {
|
|
|
{
|
|
|
if (isDevToolsPresent) {
|
|
|
var memoizedUpdaters = root.memoizedUpdaters;
|
|
|
|
|
|
if (memoizedUpdaters.size > 0) {
|
|
|
restorePendingUpdaters(root, workInProgressRootRenderLanes);
|
|
|
memoizedUpdaters.clear();
|
|
|
} // At this point, move Fibers that scheduled the upcoming work from the Map to the Set.
|
|
|
// If we bailout on this work, we'll move them back (like above).
|
|
|
// It's important to move them now in case the work spawns more work at the same priority with different updaters.
|
|
|
// That way we can keep the current update and future updates separate.
|
|
|
|
|
|
|
|
|
movePendingFibersToMemoized(root, lanes);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
workInProgressTransitions = getTransitionsForLanes();
|
|
|
prepareFreshStack(root, lanes);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
markRenderStarted(lanes);
|
|
|
}
|
|
|
|
|
|
do {
|
|
|
try {
|
|
|
workLoopSync();
|
|
|
break;
|
|
|
} catch (thrownValue) {
|
|
|
handleError(root, thrownValue);
|
|
|
}
|
|
|
} while (true);
|
|
|
|
|
|
resetContextDependencies();
|
|
|
executionContext = prevExecutionContext;
|
|
|
popDispatcher(prevDispatcher);
|
|
|
|
|
|
if (workInProgress !== null) {
|
|
|
// This is a sync render, so we should have finished the whole tree.
|
|
|
throw new Error('Cannot commit an incomplete root. This error is likely caused by a ' + 'bug in React. Please file an issue.');
|
|
|
}
|
|
|
|
|
|
{
|
|
|
markRenderStopped();
|
|
|
} // Set this to null to indicate there's no in-progress render.
|
|
|
|
|
|
|
|
|
workInProgressRoot = null;
|
|
|
workInProgressRootRenderLanes = NoLanes;
|
|
|
return workInProgressRootExitStatus;
|
|
|
} // The work loop is an extremely hot path. Tell Closure not to inline it.
|
|
|
|
|
|
/** @noinline */
|
|
|
|
|
|
|
|
|
function workLoopSync() {
|
|
|
// Already timed out, so perform work without checking if we need to yield.
|
|
|
while (workInProgress !== null) {
|
|
|
performUnitOfWork(workInProgress);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function renderRootConcurrent(root, lanes) {
|
|
|
var prevExecutionContext = executionContext;
|
|
|
executionContext |= RenderContext;
|
|
|
var prevDispatcher = pushDispatcher(); // If the root or lanes have changed, throw out the existing stack
|
|
|
// and prepare a fresh one. Otherwise we'll continue where we left off.
|
|
|
|
|
|
if (workInProgressRoot !== root || workInProgressRootRenderLanes !== lanes) {
|
|
|
{
|
|
|
if (isDevToolsPresent) {
|
|
|
var memoizedUpdaters = root.memoizedUpdaters;
|
|
|
|
|
|
if (memoizedUpdaters.size > 0) {
|
|
|
restorePendingUpdaters(root, workInProgressRootRenderLanes);
|
|
|
memoizedUpdaters.clear();
|
|
|
} // At this point, move Fibers that scheduled the upcoming work from the Map to the Set.
|
|
|
// If we bailout on this work, we'll move them back (like above).
|
|
|
// It's important to move them now in case the work spawns more work at the same priority with different updaters.
|
|
|
// That way we can keep the current update and future updates separate.
|
|
|
|
|
|
|
|
|
movePendingFibersToMemoized(root, lanes);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
workInProgressTransitions = getTransitionsForLanes();
|
|
|
resetRenderTimer();
|
|
|
prepareFreshStack(root, lanes);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
markRenderStarted(lanes);
|
|
|
}
|
|
|
|
|
|
do {
|
|
|
try {
|
|
|
workLoopConcurrent();
|
|
|
break;
|
|
|
} catch (thrownValue) {
|
|
|
handleError(root, thrownValue);
|
|
|
}
|
|
|
} while (true);
|
|
|
|
|
|
resetContextDependencies();
|
|
|
popDispatcher(prevDispatcher);
|
|
|
executionContext = prevExecutionContext;
|
|
|
|
|
|
|
|
|
if (workInProgress !== null) {
|
|
|
// Still work remaining.
|
|
|
{
|
|
|
markRenderYielded();
|
|
|
}
|
|
|
|
|
|
return RootInProgress;
|
|
|
} else {
|
|
|
// Completed the tree.
|
|
|
{
|
|
|
markRenderStopped();
|
|
|
} // Set this to null to indicate there's no in-progress render.
|
|
|
|
|
|
|
|
|
workInProgressRoot = null;
|
|
|
workInProgressRootRenderLanes = NoLanes; // Return the final exit status.
|
|
|
|
|
|
return workInProgressRootExitStatus;
|
|
|
}
|
|
|
}
|
|
|
/** @noinline */
|
|
|
|
|
|
|
|
|
function workLoopConcurrent() {
|
|
|
// Perform work until Scheduler asks us to yield
|
|
|
while (workInProgress !== null && !shouldYield()) {
|
|
|
performUnitOfWork(workInProgress);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function performUnitOfWork(unitOfWork) {
|
|
|
// The current, flushed, state of this fiber is the alternate. Ideally
|
|
|
// nothing should rely on this, but relying on it here means that we don't
|
|
|
// need an additional field on the work in progress.
|
|
|
var current = unitOfWork.alternate;
|
|
|
setCurrentFiber(unitOfWork);
|
|
|
var next;
|
|
|
|
|
|
if ( (unitOfWork.mode & ProfileMode) !== NoMode) {
|
|
|
startProfilerTimer(unitOfWork);
|
|
|
next = beginWork$1(current, unitOfWork, subtreeRenderLanes);
|
|
|
stopProfilerTimerIfRunningAndRecordDelta(unitOfWork, true);
|
|
|
} else {
|
|
|
next = beginWork$1(current, unitOfWork, subtreeRenderLanes);
|
|
|
}
|
|
|
|
|
|
resetCurrentFiber();
|
|
|
unitOfWork.memoizedProps = unitOfWork.pendingProps;
|
|
|
|
|
|
if (next === null) {
|
|
|
// If this doesn't spawn new work, complete the current work.
|
|
|
completeUnitOfWork(unitOfWork);
|
|
|
} else {
|
|
|
workInProgress = next;
|
|
|
}
|
|
|
|
|
|
ReactCurrentOwner$2.current = null;
|
|
|
}
|
|
|
|
|
|
function completeUnitOfWork(unitOfWork) {
|
|
|
// Attempt to complete the current unit of work, then move to the next
|
|
|
// sibling. If there are no more siblings, return to the parent fiber.
|
|
|
var completedWork = unitOfWork;
|
|
|
|
|
|
do {
|
|
|
// The current, flushed, state of this fiber is the alternate. Ideally
|
|
|
// nothing should rely on this, but relying on it here means that we don't
|
|
|
// need an additional field on the work in progress.
|
|
|
var current = completedWork.alternate;
|
|
|
var returnFiber = completedWork.return; // Check if the work completed or if something threw.
|
|
|
|
|
|
if ((completedWork.flags & Incomplete) === NoFlags) {
|
|
|
setCurrentFiber(completedWork);
|
|
|
var next = void 0;
|
|
|
|
|
|
if ( (completedWork.mode & ProfileMode) === NoMode) {
|
|
|
next = completeWork(current, completedWork, subtreeRenderLanes);
|
|
|
} else {
|
|
|
startProfilerTimer(completedWork);
|
|
|
next = completeWork(current, completedWork, subtreeRenderLanes); // Update render duration assuming we didn't error.
|
|
|
|
|
|
stopProfilerTimerIfRunningAndRecordDelta(completedWork, false);
|
|
|
}
|
|
|
|
|
|
resetCurrentFiber();
|
|
|
|
|
|
if (next !== null) {
|
|
|
// Completing this fiber spawned new work. Work on that next.
|
|
|
workInProgress = next;
|
|
|
return;
|
|
|
}
|
|
|
} else {
|
|
|
// This fiber did not complete because something threw. Pop values off
|
|
|
// the stack without entering the complete phase. If this is a boundary,
|
|
|
// capture values if possible.
|
|
|
var _next = unwindWork(current, completedWork); // Because this fiber did not complete, don't reset its lanes.
|
|
|
|
|
|
|
|
|
if (_next !== null) {
|
|
|
// If completing this work spawned new work, do that next. We'll come
|
|
|
// back here again.
|
|
|
// Since we're restarting, remove anything that is not a host effect
|
|
|
// from the effect tag.
|
|
|
_next.flags &= HostEffectMask;
|
|
|
workInProgress = _next;
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if ( (completedWork.mode & ProfileMode) !== NoMode) {
|
|
|
// Record the render duration for the fiber that errored.
|
|
|
stopProfilerTimerIfRunningAndRecordDelta(completedWork, false); // Include the time spent working on failed children before continuing.
|
|
|
|
|
|
var actualDuration = completedWork.actualDuration;
|
|
|
var child = completedWork.child;
|
|
|
|
|
|
while (child !== null) {
|
|
|
actualDuration += child.actualDuration;
|
|
|
child = child.sibling;
|
|
|
}
|
|
|
|
|
|
completedWork.actualDuration = actualDuration;
|
|
|
}
|
|
|
|
|
|
if (returnFiber !== null) {
|
|
|
// Mark the parent fiber as incomplete and clear its subtree flags.
|
|
|
returnFiber.flags |= Incomplete;
|
|
|
returnFiber.subtreeFlags = NoFlags;
|
|
|
returnFiber.deletions = null;
|
|
|
} else {
|
|
|
// We've unwound all the way to the root.
|
|
|
workInProgressRootExitStatus = RootDidNotComplete;
|
|
|
workInProgress = null;
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var siblingFiber = completedWork.sibling;
|
|
|
|
|
|
if (siblingFiber !== null) {
|
|
|
// If there is more work to do in this returnFiber, do that next.
|
|
|
workInProgress = siblingFiber;
|
|
|
return;
|
|
|
} // Otherwise, return to the parent
|
|
|
|
|
|
|
|
|
completedWork = returnFiber; // Update the next thing we're working on in case something throws.
|
|
|
|
|
|
workInProgress = completedWork;
|
|
|
} while (completedWork !== null); // We've reached the root.
|
|
|
|
|
|
|
|
|
if (workInProgressRootExitStatus === RootInProgress) {
|
|
|
workInProgressRootExitStatus = RootCompleted;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function commitRoot(root, recoverableErrors, transitions) {
|
|
|
// TODO: This no longer makes any sense. We already wrap the mutation and
|
|
|
// layout phases. Should be able to remove.
|
|
|
var previousUpdateLanePriority = getCurrentUpdatePriority();
|
|
|
var prevTransition = ReactCurrentBatchConfig$3.transition;
|
|
|
|
|
|
try {
|
|
|
ReactCurrentBatchConfig$3.transition = null;
|
|
|
setCurrentUpdatePriority(DiscreteEventPriority);
|
|
|
commitRootImpl(root, recoverableErrors, transitions, previousUpdateLanePriority);
|
|
|
} finally {
|
|
|
ReactCurrentBatchConfig$3.transition = prevTransition;
|
|
|
setCurrentUpdatePriority(previousUpdateLanePriority);
|
|
|
}
|
|
|
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
function commitRootImpl(root, recoverableErrors, transitions, renderPriorityLevel) {
|
|
|
do {
|
|
|
// `flushPassiveEffects` will call `flushSyncUpdateQueue` at the end, which
|
|
|
// means `flushPassiveEffects` will sometimes result in additional
|
|
|
// passive effects. So we need to keep flushing in a loop until there are
|
|
|
// no more pending effects.
|
|
|
// TODO: Might be better if `flushPassiveEffects` did not automatically
|
|
|
// flush synchronous work at the end, to avoid factoring hazards like this.
|
|
|
flushPassiveEffects();
|
|
|
} while (rootWithPendingPassiveEffects !== null);
|
|
|
|
|
|
flushRenderPhaseStrictModeWarningsInDEV();
|
|
|
|
|
|
if ((executionContext & (RenderContext | CommitContext)) !== NoContext) {
|
|
|
throw new Error('Should not already be working.');
|
|
|
}
|
|
|
|
|
|
var finishedWork = root.finishedWork;
|
|
|
var lanes = root.finishedLanes;
|
|
|
|
|
|
{
|
|
|
markCommitStarted(lanes);
|
|
|
}
|
|
|
|
|
|
if (finishedWork === null) {
|
|
|
|
|
|
{
|
|
|
markCommitStopped();
|
|
|
}
|
|
|
|
|
|
return null;
|
|
|
} else {
|
|
|
{
|
|
|
if (lanes === NoLanes) {
|
|
|
error('root.finishedLanes should not be empty during a commit. This is a ' + 'bug in React.');
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
root.finishedWork = null;
|
|
|
root.finishedLanes = NoLanes;
|
|
|
|
|
|
if (finishedWork === root.current) {
|
|
|
throw new Error('Cannot commit the same tree as before. This error is likely caused by ' + 'a bug in React. Please file an issue.');
|
|
|
} // commitRoot never returns a continuation; it always finishes synchronously.
|
|
|
// So we can clear these now to allow a new callback to be scheduled.
|
|
|
|
|
|
|
|
|
root.callbackNode = null;
|
|
|
root.callbackPriority = NoLane; // Update the first and last pending times on this root. The new first
|
|
|
// pending time is whatever is left on the root fiber.
|
|
|
|
|
|
var remainingLanes = mergeLanes(finishedWork.lanes, finishedWork.childLanes);
|
|
|
markRootFinished(root, remainingLanes);
|
|
|
|
|
|
if (root === workInProgressRoot) {
|
|
|
// We can reset these now that they are finished.
|
|
|
workInProgressRoot = null;
|
|
|
workInProgress = null;
|
|
|
workInProgressRootRenderLanes = NoLanes;
|
|
|
} // If there are pending passive effects, schedule a callback to process them.
|
|
|
// Do this as early as possible, so it is queued before anything else that
|
|
|
// might get scheduled in the commit phase. (See #16714.)
|
|
|
// TODO: Delete all other places that schedule the passive effect callback
|
|
|
// They're redundant.
|
|
|
|
|
|
|
|
|
if ((finishedWork.subtreeFlags & PassiveMask) !== NoFlags || (finishedWork.flags & PassiveMask) !== NoFlags) {
|
|
|
if (!rootDoesHavePassiveEffects) {
|
|
|
rootDoesHavePassiveEffects = true;
|
|
|
// to store it in pendingPassiveTransitions until they get processed
|
|
|
// We need to pass this through as an argument to commitRoot
|
|
|
// because workInProgressTransitions might have changed between
|
|
|
// the previous render and commit if we throttle the commit
|
|
|
// with setTimeout
|
|
|
|
|
|
pendingPassiveTransitions = transitions;
|
|
|
scheduleCallback$1(NormalPriority, function () {
|
|
|
flushPassiveEffects(); // This render triggered passive effects: release the root cache pool
|
|
|
// *after* passive effects fire to avoid freeing a cache pool that may
|
|
|
// be referenced by a node in the tree (HostRoot, Cache boundary etc)
|
|
|
|
|
|
return null;
|
|
|
});
|
|
|
}
|
|
|
} // Check if there are any effects in the whole tree.
|
|
|
// TODO: This is left over from the effect list implementation, where we had
|
|
|
// to check for the existence of `firstEffect` to satisfy Flow. I think the
|
|
|
// only other reason this optimization exists is because it affects profiling.
|
|
|
// Reconsider whether this is necessary.
|
|
|
|
|
|
|
|
|
var subtreeHasEffects = (finishedWork.subtreeFlags & (BeforeMutationMask | MutationMask | LayoutMask | PassiveMask)) !== NoFlags;
|
|
|
var rootHasEffect = (finishedWork.flags & (BeforeMutationMask | MutationMask | LayoutMask | PassiveMask)) !== NoFlags;
|
|
|
|
|
|
if (subtreeHasEffects || rootHasEffect) {
|
|
|
var prevTransition = ReactCurrentBatchConfig$3.transition;
|
|
|
ReactCurrentBatchConfig$3.transition = null;
|
|
|
var previousPriority = getCurrentUpdatePriority();
|
|
|
setCurrentUpdatePriority(DiscreteEventPriority);
|
|
|
var prevExecutionContext = executionContext;
|
|
|
executionContext |= CommitContext; // Reset this to null before calling lifecycles
|
|
|
|
|
|
ReactCurrentOwner$2.current = null; // The commit phase is broken into several sub-phases. We do a separate pass
|
|
|
// of the effect list for each phase: all mutation effects come before all
|
|
|
// layout effects, and so on.
|
|
|
// The first phase a "before mutation" phase. We use this phase to read the
|
|
|
// state of the host tree right before we mutate it. This is where
|
|
|
// getSnapshotBeforeUpdate is called.
|
|
|
|
|
|
var shouldFireAfterActiveInstanceBlur = commitBeforeMutationEffects(root, finishedWork);
|
|
|
|
|
|
{
|
|
|
// Mark the current commit time to be shared by all Profilers in this
|
|
|
// batch. This enables them to be grouped later.
|
|
|
recordCommitTime();
|
|
|
}
|
|
|
|
|
|
|
|
|
commitMutationEffects(root, finishedWork, lanes);
|
|
|
|
|
|
resetAfterCommit(root.containerInfo); // The work-in-progress tree is now the current tree. This must come after
|
|
|
// the mutation phase, so that the previous tree is still current during
|
|
|
// componentWillUnmount, but before the layout phase, so that the finished
|
|
|
// work is current during componentDidMount/Update.
|
|
|
|
|
|
root.current = finishedWork; // The next phase is the layout phase, where we call effects that read
|
|
|
|
|
|
{
|
|
|
markLayoutEffectsStarted(lanes);
|
|
|
}
|
|
|
|
|
|
commitLayoutEffects(finishedWork, root, lanes);
|
|
|
|
|
|
{
|
|
|
markLayoutEffectsStopped();
|
|
|
}
|
|
|
// opportunity to paint.
|
|
|
|
|
|
|
|
|
requestPaint();
|
|
|
executionContext = prevExecutionContext; // Reset the priority to the previous non-sync value.
|
|
|
|
|
|
setCurrentUpdatePriority(previousPriority);
|
|
|
ReactCurrentBatchConfig$3.transition = prevTransition;
|
|
|
} else {
|
|
|
// No effects.
|
|
|
root.current = finishedWork; // Measure these anyway so the flamegraph explicitly shows that there were
|
|
|
// no effects.
|
|
|
// TODO: Maybe there's a better way to report this.
|
|
|
|
|
|
{
|
|
|
recordCommitTime();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var rootDidHavePassiveEffects = rootDoesHavePassiveEffects;
|
|
|
|
|
|
if (rootDoesHavePassiveEffects) {
|
|
|
// This commit has passive effects. Stash a reference to them. But don't
|
|
|
// schedule a callback until after flushing layout work.
|
|
|
rootDoesHavePassiveEffects = false;
|
|
|
rootWithPendingPassiveEffects = root;
|
|
|
pendingPassiveEffectsLanes = lanes;
|
|
|
} else {
|
|
|
|
|
|
{
|
|
|
nestedPassiveUpdateCount = 0;
|
|
|
rootWithPassiveNestedUpdates = null;
|
|
|
}
|
|
|
} // Read this again, since an effect might have updated it
|
|
|
|
|
|
|
|
|
remainingLanes = root.pendingLanes; // Check if there's remaining work on this root
|
|
|
// TODO: This is part of the `componentDidCatch` implementation. Its purpose
|
|
|
// is to detect whether something might have called setState inside
|
|
|
// `componentDidCatch`. The mechanism is known to be flawed because `setState`
|
|
|
// inside `componentDidCatch` is itself flawed — that's why we recommend
|
|
|
// `getDerivedStateFromError` instead. However, it could be improved by
|
|
|
// checking if remainingLanes includes Sync work, instead of whether there's
|
|
|
// any work remaining at all (which would also include stuff like Suspense
|
|
|
// retries or transitions). It's been like this for a while, though, so fixing
|
|
|
// it probably isn't that urgent.
|
|
|
|
|
|
if (remainingLanes === NoLanes) {
|
|
|
// If there's no remaining work, we can clear the set of already failed
|
|
|
// error boundaries.
|
|
|
legacyErrorBoundariesThatAlreadyFailed = null;
|
|
|
}
|
|
|
|
|
|
{
|
|
|
if (!rootDidHavePassiveEffects) {
|
|
|
commitDoubleInvokeEffectsInDEV(root.current, false);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
onCommitRoot(finishedWork.stateNode, renderPriorityLevel);
|
|
|
|
|
|
{
|
|
|
if (isDevToolsPresent) {
|
|
|
root.memoizedUpdaters.clear();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
{
|
|
|
onCommitRoot$1();
|
|
|
} // Always call this before exiting `commitRoot`, to ensure that any
|
|
|
// additional work on this root is scheduled.
|
|
|
|
|
|
|
|
|
ensureRootIsScheduled(root, now());
|
|
|
|
|
|
if (recoverableErrors !== null) {
|
|
|
// There were errors during this render, but recovered from them without
|
|
|
// needing to surface it to the UI. We log them here.
|
|
|
var onRecoverableError = root.onRecoverableError;
|
|
|
|
|
|
for (var i = 0; i < recoverableErrors.length; i++) {
|
|
|
var recoverableError = recoverableErrors[i];
|
|
|
var componentStack = recoverableError.stack;
|
|
|
var digest = recoverableError.digest;
|
|
|
onRecoverableError(recoverableError.value, {
|
|
|
componentStack: componentStack,
|
|
|
digest: digest
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (hasUncaughtError) {
|
|
|
hasUncaughtError = false;
|
|
|
var error$1 = firstUncaughtError;
|
|
|
firstUncaughtError = null;
|
|
|
throw error$1;
|
|
|
} // If the passive effects are the result of a discrete render, flush them
|
|
|
// synchronously at the end of the current task so that the result is
|
|
|
// immediately observable. Otherwise, we assume that they are not
|
|
|
// order-dependent and do not need to be observed by external systems, so we
|
|
|
// can wait until after paint.
|
|
|
// TODO: We can optimize this by not scheduling the callback earlier. Since we
|
|
|
// currently schedule the callback in multiple places, will wait until those
|
|
|
// are consolidated.
|
|
|
|
|
|
|
|
|
if (includesSomeLane(pendingPassiveEffectsLanes, SyncLane) && root.tag !== LegacyRoot) {
|
|
|
flushPassiveEffects();
|
|
|
} // Read this again, since a passive effect might have updated it
|
|
|
|
|
|
|
|
|
remainingLanes = root.pendingLanes;
|
|
|
|
|
|
if (includesSomeLane(remainingLanes, SyncLane)) {
|
|
|
{
|
|
|
markNestedUpdateScheduled();
|
|
|
} // Count the number of times the root synchronously re-renders without
|
|
|
// finishing. If there are too many, it indicates an infinite update loop.
|
|
|
|
|
|
|
|
|
if (root === rootWithNestedUpdates) {
|
|
|
nestedUpdateCount++;
|
|
|
} else {
|
|
|
nestedUpdateCount = 0;
|
|
|
rootWithNestedUpdates = root;
|
|
|
}
|
|
|
} else {
|
|
|
nestedUpdateCount = 0;
|
|
|
} // If layout work was scheduled, flush it now.
|
|
|
|
|
|
|
|
|
flushSyncCallbacks();
|
|
|
|
|
|
{
|
|
|
markCommitStopped();
|
|
|
}
|
|
|
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
function flushPassiveEffects() {
|
|
|
// Returns whether passive effects were flushed.
|
|
|
// TODO: Combine this check with the one in flushPassiveEFfectsImpl. We should
|
|
|
// probably just combine the two functions. I believe they were only separate
|
|
|
// in the first place because we used to wrap it with
|
|
|
// `Scheduler.runWithPriority`, which accepts a function. But now we track the
|
|
|
// priority within React itself, so we can mutate the variable directly.
|
|
|
if (rootWithPendingPassiveEffects !== null) {
|
|
|
var renderPriority = lanesToEventPriority(pendingPassiveEffectsLanes);
|
|
|
var priority = lowerEventPriority(DefaultEventPriority, renderPriority);
|
|
|
var prevTransition = ReactCurrentBatchConfig$3.transition;
|
|
|
var previousPriority = getCurrentUpdatePriority();
|
|
|
|
|
|
try {
|
|
|
ReactCurrentBatchConfig$3.transition = null;
|
|
|
setCurrentUpdatePriority(priority);
|
|
|
return flushPassiveEffectsImpl();
|
|
|
} finally {
|
|
|
setCurrentUpdatePriority(previousPriority);
|
|
|
ReactCurrentBatchConfig$3.transition = prevTransition; // Once passive effects have run for the tree - giving components a
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return false;
|
|
|
}
|
|
|
function enqueuePendingPassiveProfilerEffect(fiber) {
|
|
|
{
|
|
|
pendingPassiveProfilerEffects.push(fiber);
|
|
|
|
|
|
if (!rootDoesHavePassiveEffects) {
|
|
|
rootDoesHavePassiveEffects = true;
|
|
|
scheduleCallback$1(NormalPriority, function () {
|
|
|
flushPassiveEffects();
|
|
|
return null;
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function flushPassiveEffectsImpl() {
|
|
|
if (rootWithPendingPassiveEffects === null) {
|
|
|
return false;
|
|
|
} // Cache and clear the transitions flag
|
|
|
|
|
|
|
|
|
var transitions = pendingPassiveTransitions;
|
|
|
pendingPassiveTransitions = null;
|
|
|
var root = rootWithPendingPassiveEffects;
|
|
|
var lanes = pendingPassiveEffectsLanes;
|
|
|
rootWithPendingPassiveEffects = null; // TODO: This is sometimes out of sync with rootWithPendingPassiveEffects.
|
|
|
// Figure out why and fix it. It's not causing any known issues (probably
|
|
|
// because it's only used for profiling), but it's a refactor hazard.
|
|
|
|
|
|
pendingPassiveEffectsLanes = NoLanes;
|
|
|
|
|
|
if ((executionContext & (RenderContext | CommitContext)) !== NoContext) {
|
|
|
throw new Error('Cannot flush passive effects while already rendering.');
|
|
|
}
|
|
|
|
|
|
{
|
|
|
isFlushingPassiveEffects = true;
|
|
|
didScheduleUpdateDuringPassiveEffects = false;
|
|
|
}
|
|
|
|
|
|
{
|
|
|
markPassiveEffectsStarted(lanes);
|
|
|
}
|
|
|
|
|
|
var prevExecutionContext = executionContext;
|
|
|
executionContext |= CommitContext;
|
|
|
commitPassiveUnmountEffects(root.current);
|
|
|
commitPassiveMountEffects(root, root.current, lanes, transitions); // TODO: Move to commitPassiveMountEffects
|
|
|
|
|
|
{
|
|
|
var profilerEffects = pendingPassiveProfilerEffects;
|
|
|
pendingPassiveProfilerEffects = [];
|
|
|
|
|
|
for (var i = 0; i < profilerEffects.length; i++) {
|
|
|
var _fiber = profilerEffects[i];
|
|
|
commitPassiveEffectDurations(root, _fiber);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
{
|
|
|
markPassiveEffectsStopped();
|
|
|
}
|
|
|
|
|
|
{
|
|
|
commitDoubleInvokeEffectsInDEV(root.current, true);
|
|
|
}
|
|
|
|
|
|
executionContext = prevExecutionContext;
|
|
|
flushSyncCallbacks();
|
|
|
|
|
|
{
|
|
|
// If additional passive effects were scheduled, increment a counter. If this
|
|
|
// exceeds the limit, we'll fire a warning.
|
|
|
if (didScheduleUpdateDuringPassiveEffects) {
|
|
|
if (root === rootWithPassiveNestedUpdates) {
|
|
|
nestedPassiveUpdateCount++;
|
|
|
} else {
|
|
|
nestedPassiveUpdateCount = 0;
|
|
|
rootWithPassiveNestedUpdates = root;
|
|
|
}
|
|
|
} else {
|
|
|
nestedPassiveUpdateCount = 0;
|
|
|
}
|
|
|
|
|
|
isFlushingPassiveEffects = false;
|
|
|
didScheduleUpdateDuringPassiveEffects = false;
|
|
|
} // TODO: Move to commitPassiveMountEffects
|
|
|
|
|
|
|
|
|
onPostCommitRoot(root);
|
|
|
|
|
|
{
|
|
|
var stateNode = root.current.stateNode;
|
|
|
stateNode.effectDuration = 0;
|
|
|
stateNode.passiveEffectDuration = 0;
|
|
|
}
|
|
|
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
function isAlreadyFailedLegacyErrorBoundary(instance) {
|
|
|
return legacyErrorBoundariesThatAlreadyFailed !== null && legacyErrorBoundariesThatAlreadyFailed.has(instance);
|
|
|
}
|
|
|
function markLegacyErrorBoundaryAsFailed(instance) {
|
|
|
if (legacyErrorBoundariesThatAlreadyFailed === null) {
|
|
|
legacyErrorBoundariesThatAlreadyFailed = new Set([instance]);
|
|
|
} else {
|
|
|
legacyErrorBoundariesThatAlreadyFailed.add(instance);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function prepareToThrowUncaughtError(error) {
|
|
|
if (!hasUncaughtError) {
|
|
|
hasUncaughtError = true;
|
|
|
firstUncaughtError = error;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var onUncaughtError = prepareToThrowUncaughtError;
|
|
|
|
|
|
function captureCommitPhaseErrorOnRoot(rootFiber, sourceFiber, error) {
|
|
|
var errorInfo = createCapturedValueAtFiber(error, sourceFiber);
|
|
|
var update = createRootErrorUpdate(rootFiber, errorInfo, SyncLane);
|
|
|
var root = enqueueUpdate(rootFiber, update, SyncLane);
|
|
|
var eventTime = requestEventTime();
|
|
|
|
|
|
if (root !== null) {
|
|
|
markRootUpdated(root, SyncLane, eventTime);
|
|
|
ensureRootIsScheduled(root, eventTime);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function captureCommitPhaseError(sourceFiber, nearestMountedAncestor, error$1) {
|
|
|
{
|
|
|
reportUncaughtErrorInDEV(error$1);
|
|
|
setIsRunningInsertionEffect(false);
|
|
|
}
|
|
|
|
|
|
if (sourceFiber.tag === HostRoot) {
|
|
|
// Error was thrown at the root. There is no parent, so the root
|
|
|
// itself should capture it.
|
|
|
captureCommitPhaseErrorOnRoot(sourceFiber, sourceFiber, error$1);
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
var fiber = null;
|
|
|
|
|
|
{
|
|
|
fiber = nearestMountedAncestor;
|
|
|
}
|
|
|
|
|
|
while (fiber !== null) {
|
|
|
if (fiber.tag === HostRoot) {
|
|
|
captureCommitPhaseErrorOnRoot(fiber, sourceFiber, error$1);
|
|
|
return;
|
|
|
} else if (fiber.tag === ClassComponent) {
|
|
|
var ctor = fiber.type;
|
|
|
var instance = fiber.stateNode;
|
|
|
|
|
|
if (typeof ctor.getDerivedStateFromError === 'function' || typeof instance.componentDidCatch === 'function' && !isAlreadyFailedLegacyErrorBoundary(instance)) {
|
|
|
var errorInfo = createCapturedValueAtFiber(error$1, sourceFiber);
|
|
|
var update = createClassErrorUpdate(fiber, errorInfo, SyncLane);
|
|
|
var root = enqueueUpdate(fiber, update, SyncLane);
|
|
|
var eventTime = requestEventTime();
|
|
|
|
|
|
if (root !== null) {
|
|
|
markRootUpdated(root, SyncLane, eventTime);
|
|
|
ensureRootIsScheduled(root, eventTime);
|
|
|
}
|
|
|
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
fiber = fiber.return;
|
|
|
}
|
|
|
|
|
|
{
|
|
|
// TODO: Until we re-land skipUnmountedBoundaries (see #20147), this warning
|
|
|
// will fire for errors that are thrown by destroy functions inside deleted
|
|
|
// trees. What it should instead do is propagate the error to the parent of
|
|
|
// the deleted tree. In the meantime, do not add this warning to the
|
|
|
// allowlist; this is only for our internal use.
|
|
|
error('Internal React error: Attempted to capture a commit phase error ' + 'inside a detached tree. This indicates a bug in React. Likely ' + 'causes include deleting the same fiber more than once, committing an ' + 'already-finished tree, or an inconsistent return pointer.\n\n' + 'Error message:\n\n%s', error$1);
|
|
|
}
|
|
|
}
|
|
|
function pingSuspendedRoot(root, wakeable, pingedLanes) {
|
|
|
var pingCache = root.pingCache;
|
|
|
|
|
|
if (pingCache !== null) {
|
|
|
// The wakeable resolved, so we no longer need to memoize, because it will
|
|
|
// never be thrown again.
|
|
|
pingCache.delete(wakeable);
|
|
|
}
|
|
|
|
|
|
var eventTime = requestEventTime();
|
|
|
markRootPinged(root, pingedLanes);
|
|
|
warnIfSuspenseResolutionNotWrappedWithActDEV(root);
|
|
|
|
|
|
if (workInProgressRoot === root && isSubsetOfLanes(workInProgressRootRenderLanes, pingedLanes)) {
|
|
|
// Received a ping at the same priority level at which we're currently
|
|
|
// rendering. We might want to restart this render. This should mirror
|
|
|
// the logic of whether or not a root suspends once it completes.
|
|
|
// TODO: If we're rendering sync either due to Sync, Batched or expired,
|
|
|
// we should probably never restart.
|
|
|
// If we're suspended with delay, or if it's a retry, we'll always suspend
|
|
|
// so we can always restart.
|
|
|
if (workInProgressRootExitStatus === RootSuspendedWithDelay || workInProgressRootExitStatus === RootSuspended && includesOnlyRetries(workInProgressRootRenderLanes) && now() - globalMostRecentFallbackTime < FALLBACK_THROTTLE_MS) {
|
|
|
// Restart from the root.
|
|
|
prepareFreshStack(root, NoLanes);
|
|
|
} else {
|
|
|
// Even though we can't restart right now, we might get an
|
|
|
// opportunity later. So we mark this render as having a ping.
|
|
|
workInProgressRootPingedLanes = mergeLanes(workInProgressRootPingedLanes, pingedLanes);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
ensureRootIsScheduled(root, eventTime);
|
|
|
}
|
|
|
|
|
|
function retryTimedOutBoundary(boundaryFiber, retryLane) {
|
|
|
// The boundary fiber (a Suspense component or SuspenseList component)
|
|
|
// previously was rendered in its fallback state. One of the promises that
|
|
|
// suspended it has resolved, which means at least part of the tree was
|
|
|
// likely unblocked. Try rendering again, at a new lanes.
|
|
|
if (retryLane === NoLane) {
|
|
|
// TODO: Assign this to `suspenseState.retryLane`? to avoid
|
|
|
// unnecessary entanglement?
|
|
|
retryLane = requestRetryLane(boundaryFiber);
|
|
|
} // TODO: Special case idle priority?
|
|
|
|
|
|
|
|
|
var eventTime = requestEventTime();
|
|
|
var root = enqueueConcurrentRenderForLane(boundaryFiber, retryLane);
|
|
|
|
|
|
if (root !== null) {
|
|
|
markRootUpdated(root, retryLane, eventTime);
|
|
|
ensureRootIsScheduled(root, eventTime);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function retryDehydratedSuspenseBoundary(boundaryFiber) {
|
|
|
var suspenseState = boundaryFiber.memoizedState;
|
|
|
var retryLane = NoLane;
|
|
|
|
|
|
if (suspenseState !== null) {
|
|
|
retryLane = suspenseState.retryLane;
|
|
|
}
|
|
|
|
|
|
retryTimedOutBoundary(boundaryFiber, retryLane);
|
|
|
}
|
|
|
function resolveRetryWakeable(boundaryFiber, wakeable) {
|
|
|
var retryLane = NoLane; // Default
|
|
|
|
|
|
var retryCache;
|
|
|
|
|
|
switch (boundaryFiber.tag) {
|
|
|
case SuspenseComponent:
|
|
|
retryCache = boundaryFiber.stateNode;
|
|
|
var suspenseState = boundaryFiber.memoizedState;
|
|
|
|
|
|
if (suspenseState !== null) {
|
|
|
retryLane = suspenseState.retryLane;
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case SuspenseListComponent:
|
|
|
retryCache = boundaryFiber.stateNode;
|
|
|
break;
|
|
|
|
|
|
default:
|
|
|
throw new Error('Pinged unknown suspense boundary type. ' + 'This is probably a bug in React.');
|
|
|
}
|
|
|
|
|
|
if (retryCache !== null) {
|
|
|
// The wakeable resolved, so we no longer need to memoize, because it will
|
|
|
// never be thrown again.
|
|
|
retryCache.delete(wakeable);
|
|
|
}
|
|
|
|
|
|
retryTimedOutBoundary(boundaryFiber, retryLane);
|
|
|
} // Computes the next Just Noticeable Difference (JND) boundary.
|
|
|
// The theory is that a person can't tell the difference between small differences in time.
|
|
|
// Therefore, if we wait a bit longer than necessary that won't translate to a noticeable
|
|
|
// difference in the experience. However, waiting for longer might mean that we can avoid
|
|
|
// showing an intermediate loading state. The longer we have already waited, the harder it
|
|
|
// is to tell small differences in time. Therefore, the longer we've already waited,
|
|
|
// the longer we can wait additionally. At some point we have to give up though.
|
|
|
// We pick a train model where the next boundary commits at a consistent schedule.
|
|
|
// These particular numbers are vague estimates. We expect to adjust them based on research.
|
|
|
|
|
|
function jnd(timeElapsed) {
|
|
|
return timeElapsed < 120 ? 120 : timeElapsed < 480 ? 480 : timeElapsed < 1080 ? 1080 : timeElapsed < 1920 ? 1920 : timeElapsed < 3000 ? 3000 : timeElapsed < 4320 ? 4320 : ceil(timeElapsed / 1960) * 1960;
|
|
|
}
|
|
|
|
|
|
function checkForNestedUpdates() {
|
|
|
if (nestedUpdateCount > NESTED_UPDATE_LIMIT) {
|
|
|
nestedUpdateCount = 0;
|
|
|
rootWithNestedUpdates = null;
|
|
|
throw new Error('Maximum update depth exceeded. This can happen when a component ' + 'repeatedly calls setState inside componentWillUpdate or ' + 'componentDidUpdate. React limits the number of nested updates to ' + 'prevent infinite loops.');
|
|
|
}
|
|
|
|
|
|
{
|
|
|
if (nestedPassiveUpdateCount > NESTED_PASSIVE_UPDATE_LIMIT) {
|
|
|
nestedPassiveUpdateCount = 0;
|
|
|
rootWithPassiveNestedUpdates = null;
|
|
|
|
|
|
error('Maximum update depth exceeded. This can happen when a component ' + "calls setState inside useEffect, but useEffect either doesn't " + 'have a dependency array, or one of the dependencies changes on ' + 'every render.');
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function flushRenderPhaseStrictModeWarningsInDEV() {
|
|
|
{
|
|
|
ReactStrictModeWarnings.flushLegacyContextWarning();
|
|
|
|
|
|
{
|
|
|
ReactStrictModeWarnings.flushPendingUnsafeLifecycleWarnings();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function commitDoubleInvokeEffectsInDEV(fiber, hasPassiveEffects) {
|
|
|
{
|
|
|
// TODO (StrictEffects) Should we set a marker on the root if it contains strict effects
|
|
|
// so we don't traverse unnecessarily? similar to subtreeFlags but just at the root level.
|
|
|
// Maybe not a big deal since this is DEV only behavior.
|
|
|
setCurrentFiber(fiber);
|
|
|
invokeEffectsInDev(fiber, MountLayoutDev, invokeLayoutEffectUnmountInDEV);
|
|
|
|
|
|
if (hasPassiveEffects) {
|
|
|
invokeEffectsInDev(fiber, MountPassiveDev, invokePassiveEffectUnmountInDEV);
|
|
|
}
|
|
|
|
|
|
invokeEffectsInDev(fiber, MountLayoutDev, invokeLayoutEffectMountInDEV);
|
|
|
|
|
|
if (hasPassiveEffects) {
|
|
|
invokeEffectsInDev(fiber, MountPassiveDev, invokePassiveEffectMountInDEV);
|
|
|
}
|
|
|
|
|
|
resetCurrentFiber();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function invokeEffectsInDev(firstChild, fiberFlags, invokeEffectFn) {
|
|
|
{
|
|
|
// We don't need to re-check StrictEffectsMode here.
|
|
|
// This function is only called if that check has already passed.
|
|
|
var current = firstChild;
|
|
|
var subtreeRoot = null;
|
|
|
|
|
|
while (current !== null) {
|
|
|
var primarySubtreeFlag = current.subtreeFlags & fiberFlags;
|
|
|
|
|
|
if (current !== subtreeRoot && current.child !== null && primarySubtreeFlag !== NoFlags) {
|
|
|
current = current.child;
|
|
|
} else {
|
|
|
if ((current.flags & fiberFlags) !== NoFlags) {
|
|
|
invokeEffectFn(current);
|
|
|
}
|
|
|
|
|
|
if (current.sibling !== null) {
|
|
|
current = current.sibling;
|
|
|
} else {
|
|
|
current = subtreeRoot = current.return;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var didWarnStateUpdateForNotYetMountedComponent = null;
|
|
|
function warnAboutUpdateOnNotYetMountedFiberInDEV(fiber) {
|
|
|
{
|
|
|
if ((executionContext & RenderContext) !== NoContext) {
|
|
|
// We let the other warning about render phase updates deal with this one.
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (!(fiber.mode & ConcurrentMode)) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
var tag = fiber.tag;
|
|
|
|
|
|
if (tag !== IndeterminateComponent && tag !== HostRoot && tag !== ClassComponent && tag !== FunctionComponent && tag !== ForwardRef && tag !== MemoComponent && tag !== SimpleMemoComponent) {
|
|
|
// Only warn for user-defined components, not internal ones like Suspense.
|
|
|
return;
|
|
|
} // We show the whole stack but dedupe on the top component's name because
|
|
|
// the problematic code almost always lies inside that component.
|
|
|
|
|
|
|
|
|
var componentName = getComponentNameFromFiber(fiber) || 'ReactComponent';
|
|
|
|
|
|
if (didWarnStateUpdateForNotYetMountedComponent !== null) {
|
|
|
if (didWarnStateUpdateForNotYetMountedComponent.has(componentName)) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
didWarnStateUpdateForNotYetMountedComponent.add(componentName);
|
|
|
} else {
|
|
|
didWarnStateUpdateForNotYetMountedComponent = new Set([componentName]);
|
|
|
}
|
|
|
|
|
|
var previousFiber = current;
|
|
|
|
|
|
try {
|
|
|
setCurrentFiber(fiber);
|
|
|
|
|
|
error("Can't perform a React state update on a component that hasn't mounted yet. " + 'This indicates that you have a side-effect in your render function that ' + 'asynchronously later calls tries to update the component. Move this work to ' + 'useEffect instead.');
|
|
|
} finally {
|
|
|
if (previousFiber) {
|
|
|
setCurrentFiber(fiber);
|
|
|
} else {
|
|
|
resetCurrentFiber();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
var beginWork$1;
|
|
|
|
|
|
{
|
|
|
var dummyFiber = null;
|
|
|
|
|
|
beginWork$1 = function (current, unitOfWork, lanes) {
|
|
|
// If a component throws an error, we replay it again in a synchronously
|
|
|
// dispatched event, so that the debugger will treat it as an uncaught
|
|
|
// error See ReactErrorUtils for more information.
|
|
|
// Before entering the begin phase, copy the work-in-progress onto a dummy
|
|
|
// fiber. If beginWork throws, we'll use this to reset the state.
|
|
|
var originalWorkInProgressCopy = assignFiberPropertiesInDEV(dummyFiber, unitOfWork);
|
|
|
|
|
|
try {
|
|
|
return beginWork(current, unitOfWork, lanes);
|
|
|
} catch (originalError) {
|
|
|
if (didSuspendOrErrorWhileHydratingDEV() || originalError !== null && typeof originalError === 'object' && typeof originalError.then === 'function') {
|
|
|
// Don't replay promises.
|
|
|
// Don't replay errors if we are hydrating and have already suspended or handled an error
|
|
|
throw originalError;
|
|
|
} // Keep this code in sync with handleError; any changes here must have
|
|
|
// corresponding changes there.
|
|
|
|
|
|
|
|
|
resetContextDependencies();
|
|
|
resetHooksAfterThrow(); // Don't reset current debug fiber, since we're about to work on the
|
|
|
// same fiber again.
|
|
|
// Unwind the failed stack frame
|
|
|
|
|
|
unwindInterruptedWork(current, unitOfWork); // Restore the original properties of the fiber.
|
|
|
|
|
|
assignFiberPropertiesInDEV(unitOfWork, originalWorkInProgressCopy);
|
|
|
|
|
|
if ( unitOfWork.mode & ProfileMode) {
|
|
|
// Reset the profiler timer.
|
|
|
startProfilerTimer(unitOfWork);
|
|
|
} // Run beginWork again.
|
|
|
|
|
|
|
|
|
invokeGuardedCallback(null, beginWork, null, current, unitOfWork, lanes);
|
|
|
|
|
|
if (hasCaughtError()) {
|
|
|
var replayError = clearCaughtError();
|
|
|
|
|
|
if (typeof replayError === 'object' && replayError !== null && replayError._suppressLogging && typeof originalError === 'object' && originalError !== null && !originalError._suppressLogging) {
|
|
|
// If suppressed, let the flag carry over to the original error which is the one we'll rethrow.
|
|
|
originalError._suppressLogging = true;
|
|
|
}
|
|
|
} // We always throw the original error in case the second render pass is not idempotent.
|
|
|
// This can happen if a memoized function or CommonJS module doesn't throw after first invocation.
|
|
|
|
|
|
|
|
|
throw originalError;
|
|
|
}
|
|
|
};
|
|
|
}
|
|
|
|
|
|
var didWarnAboutUpdateInRender = false;
|
|
|
var didWarnAboutUpdateInRenderForAnotherComponent;
|
|
|
|
|
|
{
|
|
|
didWarnAboutUpdateInRenderForAnotherComponent = new Set();
|
|
|
}
|
|
|
|
|
|
function warnAboutRenderPhaseUpdatesInDEV(fiber) {
|
|
|
{
|
|
|
if (isRendering && !getIsUpdatingOpaqueValueInRenderPhaseInDEV()) {
|
|
|
switch (fiber.tag) {
|
|
|
case FunctionComponent:
|
|
|
case ForwardRef:
|
|
|
case SimpleMemoComponent:
|
|
|
{
|
|
|
var renderingComponentName = workInProgress && getComponentNameFromFiber(workInProgress) || 'Unknown'; // Dedupe by the rendering component because it's the one that needs to be fixed.
|
|
|
|
|
|
var dedupeKey = renderingComponentName;
|
|
|
|
|
|
if (!didWarnAboutUpdateInRenderForAnotherComponent.has(dedupeKey)) {
|
|
|
didWarnAboutUpdateInRenderForAnotherComponent.add(dedupeKey);
|
|
|
var setStateComponentName = getComponentNameFromFiber(fiber) || 'Unknown';
|
|
|
|
|
|
error('Cannot update a component (`%s`) while rendering a ' + 'different component (`%s`). To locate the bad setState() call inside `%s`, ' + 'follow the stack trace as described in https://reactjs.org/link/setstate-in-render', setStateComponentName, renderingComponentName, renderingComponentName);
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
case ClassComponent:
|
|
|
{
|
|
|
if (!didWarnAboutUpdateInRender) {
|
|
|
error('Cannot update during an existing state transition (such as ' + 'within `render`). Render methods should be a pure ' + 'function of props and state.');
|
|
|
|
|
|
didWarnAboutUpdateInRender = true;
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function restorePendingUpdaters(root, lanes) {
|
|
|
{
|
|
|
if (isDevToolsPresent) {
|
|
|
var memoizedUpdaters = root.memoizedUpdaters;
|
|
|
memoizedUpdaters.forEach(function (schedulingFiber) {
|
|
|
addFiberToLanesMap(root, schedulingFiber, lanes);
|
|
|
}); // This function intentionally does not clear memoized updaters.
|
|
|
// Those may still be relevant to the current commit
|
|
|
// and a future one (e.g. Suspense).
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
var fakeActCallbackNode = {};
|
|
|
|
|
|
function scheduleCallback$1(priorityLevel, callback) {
|
|
|
{
|
|
|
// If we're currently inside an `act` scope, bypass Scheduler and push to
|
|
|
// the `act` queue instead.
|
|
|
var actQueue = ReactCurrentActQueue$1.current;
|
|
|
|
|
|
if (actQueue !== null) {
|
|
|
actQueue.push(callback);
|
|
|
return fakeActCallbackNode;
|
|
|
} else {
|
|
|
return scheduleCallback(priorityLevel, callback);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function cancelCallback$1(callbackNode) {
|
|
|
if ( callbackNode === fakeActCallbackNode) {
|
|
|
return;
|
|
|
} // In production, always call Scheduler. This function will be stripped out.
|
|
|
|
|
|
|
|
|
return cancelCallback(callbackNode);
|
|
|
}
|
|
|
|
|
|
function shouldForceFlushFallbacksInDEV() {
|
|
|
// Never force flush in production. This function should get stripped out.
|
|
|
return ReactCurrentActQueue$1.current !== null;
|
|
|
}
|
|
|
|
|
|
function warnIfUpdatesNotWrappedWithActDEV(fiber) {
|
|
|
{
|
|
|
if (fiber.mode & ConcurrentMode) {
|
|
|
if (!isConcurrentActEnvironment()) {
|
|
|
// Not in an act environment. No need to warn.
|
|
|
return;
|
|
|
}
|
|
|
} else {
|
|
|
// Legacy mode has additional cases where we suppress a warning.
|
|
|
if (!isLegacyActEnvironment()) {
|
|
|
// Not in an act environment. No need to warn.
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (executionContext !== NoContext) {
|
|
|
// Legacy mode doesn't warn if the update is batched, i.e.
|
|
|
// batchedUpdates or flushSync.
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (fiber.tag !== FunctionComponent && fiber.tag !== ForwardRef && fiber.tag !== SimpleMemoComponent) {
|
|
|
// For backwards compatibility with pre-hooks code, legacy mode only
|
|
|
// warns for updates that originate from a hook.
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (ReactCurrentActQueue$1.current === null) {
|
|
|
var previousFiber = current;
|
|
|
|
|
|
try {
|
|
|
setCurrentFiber(fiber);
|
|
|
|
|
|
error('An update to %s inside a test was not wrapped in act(...).\n\n' + 'When testing, code that causes React state updates should be ' + 'wrapped into act(...):\n\n' + 'act(() => {\n' + ' /* fire events that update state */\n' + '});\n' + '/* assert on the output */\n\n' + "This ensures that you're testing the behavior the user would see " + 'in the browser.' + ' Learn more at https://reactjs.org/link/wrap-tests-with-act', getComponentNameFromFiber(fiber));
|
|
|
} finally {
|
|
|
if (previousFiber) {
|
|
|
setCurrentFiber(fiber);
|
|
|
} else {
|
|
|
resetCurrentFiber();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function warnIfSuspenseResolutionNotWrappedWithActDEV(root) {
|
|
|
{
|
|
|
if (root.tag !== LegacyRoot && isConcurrentActEnvironment() && ReactCurrentActQueue$1.current === null) {
|
|
|
error('A suspended resource finished loading inside a test, but the event ' + 'was not wrapped in act(...).\n\n' + 'When testing, code that resolves suspended data should be wrapped ' + 'into act(...):\n\n' + 'act(() => {\n' + ' /* finish loading suspended data */\n' + '});\n' + '/* assert on the output */\n\n' + "This ensures that you're testing the behavior the user would see " + 'in the browser.' + ' Learn more at https://reactjs.org/link/wrap-tests-with-act');
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function setIsRunningInsertionEffect(isRunning) {
|
|
|
{
|
|
|
isRunningInsertionEffect = isRunning;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/* eslint-disable react-internal/prod-error-codes */
|
|
|
var resolveFamily = null; // $FlowFixMe Flow gets confused by a WeakSet feature check below.
|
|
|
|
|
|
var failedBoundaries = null;
|
|
|
var setRefreshHandler = function (handler) {
|
|
|
{
|
|
|
resolveFamily = handler;
|
|
|
}
|
|
|
};
|
|
|
function resolveFunctionForHotReloading(type) {
|
|
|
{
|
|
|
if (resolveFamily === null) {
|
|
|
// Hot reloading is disabled.
|
|
|
return type;
|
|
|
}
|
|
|
|
|
|
var family = resolveFamily(type);
|
|
|
|
|
|
if (family === undefined) {
|
|
|
return type;
|
|
|
} // Use the latest known implementation.
|
|
|
|
|
|
|
|
|
return family.current;
|
|
|
}
|
|
|
}
|
|
|
function resolveClassForHotReloading(type) {
|
|
|
// No implementation differences.
|
|
|
return resolveFunctionForHotReloading(type);
|
|
|
}
|
|
|
function resolveForwardRefForHotReloading(type) {
|
|
|
{
|
|
|
if (resolveFamily === null) {
|
|
|
// Hot reloading is disabled.
|
|
|
return type;
|
|
|
}
|
|
|
|
|
|
var family = resolveFamily(type);
|
|
|
|
|
|
if (family === undefined) {
|
|
|
// Check if we're dealing with a real forwardRef. Don't want to crash early.
|
|
|
if (type !== null && type !== undefined && typeof type.render === 'function') {
|
|
|
// ForwardRef is special because its resolved .type is an object,
|
|
|
// but it's possible that we only have its inner render function in the map.
|
|
|
// If that inner render function is different, we'll build a new forwardRef type.
|
|
|
var currentRender = resolveFunctionForHotReloading(type.render);
|
|
|
|
|
|
if (type.render !== currentRender) {
|
|
|
var syntheticType = {
|
|
|
$$typeof: REACT_FORWARD_REF_TYPE,
|
|
|
render: currentRender
|
|
|
};
|
|
|
|
|
|
if (type.displayName !== undefined) {
|
|
|
syntheticType.displayName = type.displayName;
|
|
|
}
|
|
|
|
|
|
return syntheticType;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return type;
|
|
|
} // Use the latest known implementation.
|
|
|
|
|
|
|
|
|
return family.current;
|
|
|
}
|
|
|
}
|
|
|
function isCompatibleFamilyForHotReloading(fiber, element) {
|
|
|
{
|
|
|
if (resolveFamily === null) {
|
|
|
// Hot reloading is disabled.
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
var prevType = fiber.elementType;
|
|
|
var nextType = element.type; // If we got here, we know types aren't === equal.
|
|
|
|
|
|
var needsCompareFamilies = false;
|
|
|
var $$typeofNextType = typeof nextType === 'object' && nextType !== null ? nextType.$$typeof : null;
|
|
|
|
|
|
switch (fiber.tag) {
|
|
|
case ClassComponent:
|
|
|
{
|
|
|
if (typeof nextType === 'function') {
|
|
|
needsCompareFamilies = true;
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
case FunctionComponent:
|
|
|
{
|
|
|
if (typeof nextType === 'function') {
|
|
|
needsCompareFamilies = true;
|
|
|
} else if ($$typeofNextType === REACT_LAZY_TYPE) {
|
|
|
// We don't know the inner type yet.
|
|
|
// We're going to assume that the lazy inner type is stable,
|
|
|
// and so it is sufficient to avoid reconciling it away.
|
|
|
// We're not going to unwrap or actually use the new lazy type.
|
|
|
needsCompareFamilies = true;
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
case ForwardRef:
|
|
|
{
|
|
|
if ($$typeofNextType === REACT_FORWARD_REF_TYPE) {
|
|
|
needsCompareFamilies = true;
|
|
|
} else if ($$typeofNextType === REACT_LAZY_TYPE) {
|
|
|
needsCompareFamilies = true;
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
case MemoComponent:
|
|
|
case SimpleMemoComponent:
|
|
|
{
|
|
|
if ($$typeofNextType === REACT_MEMO_TYPE) {
|
|
|
// TODO: if it was but can no longer be simple,
|
|
|
// we shouldn't set this.
|
|
|
needsCompareFamilies = true;
|
|
|
} else if ($$typeofNextType === REACT_LAZY_TYPE) {
|
|
|
needsCompareFamilies = true;
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
default:
|
|
|
return false;
|
|
|
} // Check if both types have a family and it's the same one.
|
|
|
|
|
|
|
|
|
if (needsCompareFamilies) {
|
|
|
// Note: memo() and forwardRef() we'll compare outer rather than inner type.
|
|
|
// This means both of them need to be registered to preserve state.
|
|
|
// If we unwrapped and compared the inner types for wrappers instead,
|
|
|
// then we would risk falsely saying two separate memo(Foo)
|
|
|
// calls are equivalent because they wrap the same Foo function.
|
|
|
var prevFamily = resolveFamily(prevType);
|
|
|
|
|
|
if (prevFamily !== undefined && prevFamily === resolveFamily(nextType)) {
|
|
|
return true;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
function markFailedErrorBoundaryForHotReloading(fiber) {
|
|
|
{
|
|
|
if (resolveFamily === null) {
|
|
|
// Hot reloading is disabled.
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (typeof WeakSet !== 'function') {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (failedBoundaries === null) {
|
|
|
failedBoundaries = new WeakSet();
|
|
|
}
|
|
|
|
|
|
failedBoundaries.add(fiber);
|
|
|
}
|
|
|
}
|
|
|
var scheduleRefresh = function (root, update) {
|
|
|
{
|
|
|
if (resolveFamily === null) {
|
|
|
// Hot reloading is disabled.
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
var staleFamilies = update.staleFamilies,
|
|
|
updatedFamilies = update.updatedFamilies;
|
|
|
flushPassiveEffects();
|
|
|
flushSync(function () {
|
|
|
scheduleFibersWithFamiliesRecursively(root.current, updatedFamilies, staleFamilies);
|
|
|
});
|
|
|
}
|
|
|
};
|
|
|
var scheduleRoot = function (root, element) {
|
|
|
{
|
|
|
if (root.context !== emptyContextObject) {
|
|
|
// Super edge case: root has a legacy _renderSubtree context
|
|
|
// but we don't know the parentComponent so we can't pass it.
|
|
|
// Just ignore. We'll delete this with _renderSubtree code path later.
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
flushPassiveEffects();
|
|
|
flushSync(function () {
|
|
|
updateContainer(element, root, null, null);
|
|
|
});
|
|
|
}
|
|
|
};
|
|
|
|
|
|
function scheduleFibersWithFamiliesRecursively(fiber, updatedFamilies, staleFamilies) {
|
|
|
{
|
|
|
var alternate = fiber.alternate,
|
|
|
child = fiber.child,
|
|
|
sibling = fiber.sibling,
|
|
|
tag = fiber.tag,
|
|
|
type = fiber.type;
|
|
|
var candidateType = null;
|
|
|
|
|
|
switch (tag) {
|
|
|
case FunctionComponent:
|
|
|
case SimpleMemoComponent:
|
|
|
case ClassComponent:
|
|
|
candidateType = type;
|
|
|
break;
|
|
|
|
|
|
case ForwardRef:
|
|
|
candidateType = type.render;
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
if (resolveFamily === null) {
|
|
|
throw new Error('Expected resolveFamily to be set during hot reload.');
|
|
|
}
|
|
|
|
|
|
var needsRender = false;
|
|
|
var needsRemount = false;
|
|
|
|
|
|
if (candidateType !== null) {
|
|
|
var family = resolveFamily(candidateType);
|
|
|
|
|
|
if (family !== undefined) {
|
|
|
if (staleFamilies.has(family)) {
|
|
|
needsRemount = true;
|
|
|
} else if (updatedFamilies.has(family)) {
|
|
|
if (tag === ClassComponent) {
|
|
|
needsRemount = true;
|
|
|
} else {
|
|
|
needsRender = true;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (failedBoundaries !== null) {
|
|
|
if (failedBoundaries.has(fiber) || alternate !== null && failedBoundaries.has(alternate)) {
|
|
|
needsRemount = true;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (needsRemount) {
|
|
|
fiber._debugNeedsRemount = true;
|
|
|
}
|
|
|
|
|
|
if (needsRemount || needsRender) {
|
|
|
var _root = enqueueConcurrentRenderForLane(fiber, SyncLane);
|
|
|
|
|
|
if (_root !== null) {
|
|
|
scheduleUpdateOnFiber(_root, fiber, SyncLane, NoTimestamp);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (child !== null && !needsRemount) {
|
|
|
scheduleFibersWithFamiliesRecursively(child, updatedFamilies, staleFamilies);
|
|
|
}
|
|
|
|
|
|
if (sibling !== null) {
|
|
|
scheduleFibersWithFamiliesRecursively(sibling, updatedFamilies, staleFamilies);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var findHostInstancesForRefresh = function (root, families) {
|
|
|
{
|
|
|
var hostInstances = new Set();
|
|
|
var types = new Set(families.map(function (family) {
|
|
|
return family.current;
|
|
|
}));
|
|
|
findHostInstancesForMatchingFibersRecursively(root.current, types, hostInstances);
|
|
|
return hostInstances;
|
|
|
}
|
|
|
};
|
|
|
|
|
|
function findHostInstancesForMatchingFibersRecursively(fiber, types, hostInstances) {
|
|
|
{
|
|
|
var child = fiber.child,
|
|
|
sibling = fiber.sibling,
|
|
|
tag = fiber.tag,
|
|
|
type = fiber.type;
|
|
|
var candidateType = null;
|
|
|
|
|
|
switch (tag) {
|
|
|
case FunctionComponent:
|
|
|
case SimpleMemoComponent:
|
|
|
case ClassComponent:
|
|
|
candidateType = type;
|
|
|
break;
|
|
|
|
|
|
case ForwardRef:
|
|
|
candidateType = type.render;
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
var didMatch = false;
|
|
|
|
|
|
if (candidateType !== null) {
|
|
|
if (types.has(candidateType)) {
|
|
|
didMatch = true;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (didMatch) {
|
|
|
// We have a match. This only drills down to the closest host components.
|
|
|
// There's no need to search deeper because for the purpose of giving
|
|
|
// visual feedback, "flashing" outermost parent rectangles is sufficient.
|
|
|
findHostInstancesForFiberShallowly(fiber, hostInstances);
|
|
|
} else {
|
|
|
// If there's no match, maybe there will be one further down in the child tree.
|
|
|
if (child !== null) {
|
|
|
findHostInstancesForMatchingFibersRecursively(child, types, hostInstances);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (sibling !== null) {
|
|
|
findHostInstancesForMatchingFibersRecursively(sibling, types, hostInstances);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function findHostInstancesForFiberShallowly(fiber, hostInstances) {
|
|
|
{
|
|
|
var foundHostInstances = findChildHostInstancesForFiberShallowly(fiber, hostInstances);
|
|
|
|
|
|
if (foundHostInstances) {
|
|
|
return;
|
|
|
} // If we didn't find any host children, fallback to closest host parent.
|
|
|
|
|
|
|
|
|
var node = fiber;
|
|
|
|
|
|
while (true) {
|
|
|
switch (node.tag) {
|
|
|
case HostComponent:
|
|
|
hostInstances.add(node.stateNode);
|
|
|
return;
|
|
|
|
|
|
case HostPortal:
|
|
|
hostInstances.add(node.stateNode.containerInfo);
|
|
|
return;
|
|
|
|
|
|
case HostRoot:
|
|
|
hostInstances.add(node.stateNode.containerInfo);
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (node.return === null) {
|
|
|
throw new Error('Expected to reach root first.');
|
|
|
}
|
|
|
|
|
|
node = node.return;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function findChildHostInstancesForFiberShallowly(fiber, hostInstances) {
|
|
|
{
|
|
|
var node = fiber;
|
|
|
var foundHostInstances = false;
|
|
|
|
|
|
while (true) {
|
|
|
if (node.tag === HostComponent) {
|
|
|
// We got a match.
|
|
|
foundHostInstances = true;
|
|
|
hostInstances.add(node.stateNode); // There may still be more, so keep searching.
|
|
|
} else if (node.child !== null) {
|
|
|
node.child.return = node;
|
|
|
node = node.child;
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
if (node === fiber) {
|
|
|
return foundHostInstances;
|
|
|
}
|
|
|
|
|
|
while (node.sibling === null) {
|
|
|
if (node.return === null || node.return === fiber) {
|
|
|
return foundHostInstances;
|
|
|
}
|
|
|
|
|
|
node = node.return;
|
|
|
}
|
|
|
|
|
|
node.sibling.return = node.return;
|
|
|
node = node.sibling;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
var hasBadMapPolyfill;
|
|
|
|
|
|
{
|
|
|
hasBadMapPolyfill = false;
|
|
|
|
|
|
try {
|
|
|
var nonExtensibleObject = Object.preventExtensions({});
|
|
|
/* eslint-disable no-new */
|
|
|
|
|
|
new Map([[nonExtensibleObject, null]]);
|
|
|
new Set([nonExtensibleObject]);
|
|
|
/* eslint-enable no-new */
|
|
|
} catch (e) {
|
|
|
// TODO: Consider warning about bad polyfills
|
|
|
hasBadMapPolyfill = true;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function FiberNode(tag, pendingProps, key, mode) {
|
|
|
// Instance
|
|
|
this.tag = tag;
|
|
|
this.key = key;
|
|
|
this.elementType = null;
|
|
|
this.type = null;
|
|
|
this.stateNode = null; // Fiber
|
|
|
|
|
|
this.return = null;
|
|
|
this.child = null;
|
|
|
this.sibling = null;
|
|
|
this.index = 0;
|
|
|
this.ref = null;
|
|
|
this.pendingProps = pendingProps;
|
|
|
this.memoizedProps = null;
|
|
|
this.updateQueue = null;
|
|
|
this.memoizedState = null;
|
|
|
this.dependencies = null;
|
|
|
this.mode = mode; // Effects
|
|
|
|
|
|
this.flags = NoFlags;
|
|
|
this.subtreeFlags = NoFlags;
|
|
|
this.deletions = null;
|
|
|
this.lanes = NoLanes;
|
|
|
this.childLanes = NoLanes;
|
|
|
this.alternate = null;
|
|
|
|
|
|
{
|
|
|
// Note: The following is done to avoid a v8 performance cliff.
|
|
|
//
|
|
|
// Initializing the fields below to smis and later updating them with
|
|
|
// double values will cause Fibers to end up having separate shapes.
|
|
|
// This behavior/bug has something to do with Object.preventExtension().
|
|
|
// Fortunately this only impacts DEV builds.
|
|
|
// Unfortunately it makes React unusably slow for some applications.
|
|
|
// To work around this, initialize the fields below with doubles.
|
|
|
//
|
|
|
// Learn more about this here:
|
|
|
// https://github.com/facebook/react/issues/14365
|
|
|
// https://bugs.chromium.org/p/v8/issues/detail?id=8538
|
|
|
this.actualDuration = Number.NaN;
|
|
|
this.actualStartTime = Number.NaN;
|
|
|
this.selfBaseDuration = Number.NaN;
|
|
|
this.treeBaseDuration = Number.NaN; // It's okay to replace the initial doubles with smis after initialization.
|
|
|
// This won't trigger the performance cliff mentioned above,
|
|
|
// and it simplifies other profiler code (including DevTools).
|
|
|
|
|
|
this.actualDuration = 0;
|
|
|
this.actualStartTime = -1;
|
|
|
this.selfBaseDuration = 0;
|
|
|
this.treeBaseDuration = 0;
|
|
|
}
|
|
|
|
|
|
{
|
|
|
// This isn't directly used but is handy for debugging internals:
|
|
|
this._debugSource = null;
|
|
|
this._debugOwner = null;
|
|
|
this._debugNeedsRemount = false;
|
|
|
this._debugHookTypes = null;
|
|
|
|
|
|
if (!hasBadMapPolyfill && typeof Object.preventExtensions === 'function') {
|
|
|
Object.preventExtensions(this);
|
|
|
}
|
|
|
}
|
|
|
} // This is a constructor function, rather than a POJO constructor, still
|
|
|
// please ensure we do the following:
|
|
|
// 1) Nobody should add any instance methods on this. Instance methods can be
|
|
|
// more difficult to predict when they get optimized and they are almost
|
|
|
// never inlined properly in static compilers.
|
|
|
// 2) Nobody should rely on `instanceof Fiber` for type testing. We should
|
|
|
// always know when it is a fiber.
|
|
|
// 3) We might want to experiment with using numeric keys since they are easier
|
|
|
// to optimize in a non-JIT environment.
|
|
|
// 4) We can easily go from a constructor to a createFiber object literal if that
|
|
|
// is faster.
|
|
|
// 5) It should be easy to port this to a C struct and keep a C implementation
|
|
|
// compatible.
|
|
|
|
|
|
|
|
|
var createFiber = function (tag, pendingProps, key, mode) {
|
|
|
// $FlowFixMe: the shapes are exact here but Flow doesn't like constructors
|
|
|
return new FiberNode(tag, pendingProps, key, mode);
|
|
|
};
|
|
|
|
|
|
function shouldConstruct$1(Component) {
|
|
|
var prototype = Component.prototype;
|
|
|
return !!(prototype && prototype.isReactComponent);
|
|
|
}
|
|
|
|
|
|
function isSimpleFunctionComponent(type) {
|
|
|
return typeof type === 'function' && !shouldConstruct$1(type) && type.defaultProps === undefined;
|
|
|
}
|
|
|
function resolveLazyComponentTag(Component) {
|
|
|
if (typeof Component === 'function') {
|
|
|
return shouldConstruct$1(Component) ? ClassComponent : FunctionComponent;
|
|
|
} else if (Component !== undefined && Component !== null) {
|
|
|
var $$typeof = Component.$$typeof;
|
|
|
|
|
|
if ($$typeof === REACT_FORWARD_REF_TYPE) {
|
|
|
return ForwardRef;
|
|
|
}
|
|
|
|
|
|
if ($$typeof === REACT_MEMO_TYPE) {
|
|
|
return MemoComponent;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return IndeterminateComponent;
|
|
|
} // This is used to create an alternate fiber to do work on.
|
|
|
|
|
|
function createWorkInProgress(current, pendingProps) {
|
|
|
var workInProgress = current.alternate;
|
|
|
|
|
|
if (workInProgress === null) {
|
|
|
// We use a double buffering pooling technique because we know that we'll
|
|
|
// only ever need at most two versions of a tree. We pool the "other" unused
|
|
|
// node that we're free to reuse. This is lazily created to avoid allocating
|
|
|
// extra objects for things that are never updated. It also allow us to
|
|
|
// reclaim the extra memory if needed.
|
|
|
workInProgress = createFiber(current.tag, pendingProps, current.key, current.mode);
|
|
|
workInProgress.elementType = current.elementType;
|
|
|
workInProgress.type = current.type;
|
|
|
workInProgress.stateNode = current.stateNode;
|
|
|
|
|
|
{
|
|
|
// DEV-only fields
|
|
|
workInProgress._debugSource = current._debugSource;
|
|
|
workInProgress._debugOwner = current._debugOwner;
|
|
|
workInProgress._debugHookTypes = current._debugHookTypes;
|
|
|
}
|
|
|
|
|
|
workInProgress.alternate = current;
|
|
|
current.alternate = workInProgress;
|
|
|
} else {
|
|
|
workInProgress.pendingProps = pendingProps; // Needed because Blocks store data on type.
|
|
|
|
|
|
workInProgress.type = current.type; // We already have an alternate.
|
|
|
// Reset the effect tag.
|
|
|
|
|
|
workInProgress.flags = NoFlags; // The effects are no longer valid.
|
|
|
|
|
|
workInProgress.subtreeFlags = NoFlags;
|
|
|
workInProgress.deletions = null;
|
|
|
|
|
|
{
|
|
|
// We intentionally reset, rather than copy, actualDuration & actualStartTime.
|
|
|
// This prevents time from endlessly accumulating in new commits.
|
|
|
// This has the downside of resetting values for different priority renders,
|
|
|
// But works for yielding (the common case) and should support resuming.
|
|
|
workInProgress.actualDuration = 0;
|
|
|
workInProgress.actualStartTime = -1;
|
|
|
}
|
|
|
} // Reset all effects except static ones.
|
|
|
// Static effects are not specific to a render.
|
|
|
|
|
|
|
|
|
workInProgress.flags = current.flags & StaticMask;
|
|
|
workInProgress.childLanes = current.childLanes;
|
|
|
workInProgress.lanes = current.lanes;
|
|
|
workInProgress.child = current.child;
|
|
|
workInProgress.memoizedProps = current.memoizedProps;
|
|
|
workInProgress.memoizedState = current.memoizedState;
|
|
|
workInProgress.updateQueue = current.updateQueue; // Clone the dependencies object. This is mutated during the render phase, so
|
|
|
// it cannot be shared with the current fiber.
|
|
|
|
|
|
var currentDependencies = current.dependencies;
|
|
|
workInProgress.dependencies = currentDependencies === null ? null : {
|
|
|
lanes: currentDependencies.lanes,
|
|
|
firstContext: currentDependencies.firstContext
|
|
|
}; // These will be overridden during the parent's reconciliation
|
|
|
|
|
|
workInProgress.sibling = current.sibling;
|
|
|
workInProgress.index = current.index;
|
|
|
workInProgress.ref = current.ref;
|
|
|
|
|
|
{
|
|
|
workInProgress.selfBaseDuration = current.selfBaseDuration;
|
|
|
workInProgress.treeBaseDuration = current.treeBaseDuration;
|
|
|
}
|
|
|
|
|
|
{
|
|
|
workInProgress._debugNeedsRemount = current._debugNeedsRemount;
|
|
|
|
|
|
switch (workInProgress.tag) {
|
|
|
case IndeterminateComponent:
|
|
|
case FunctionComponent:
|
|
|
case SimpleMemoComponent:
|
|
|
workInProgress.type = resolveFunctionForHotReloading(current.type);
|
|
|
break;
|
|
|
|
|
|
case ClassComponent:
|
|
|
workInProgress.type = resolveClassForHotReloading(current.type);
|
|
|
break;
|
|
|
|
|
|
case ForwardRef:
|
|
|
workInProgress.type = resolveForwardRefForHotReloading(current.type);
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return workInProgress;
|
|
|
} // Used to reuse a Fiber for a second pass.
|
|
|
|
|
|
function resetWorkInProgress(workInProgress, renderLanes) {
|
|
|
// This resets the Fiber to what createFiber or createWorkInProgress would
|
|
|
// have set the values to before during the first pass. Ideally this wouldn't
|
|
|
// be necessary but unfortunately many code paths reads from the workInProgress
|
|
|
// when they should be reading from current and writing to workInProgress.
|
|
|
// We assume pendingProps, index, key, ref, return are still untouched to
|
|
|
// avoid doing another reconciliation.
|
|
|
// Reset the effect flags but keep any Placement tags, since that's something
|
|
|
// that child fiber is setting, not the reconciliation.
|
|
|
workInProgress.flags &= StaticMask | Placement; // The effects are no longer valid.
|
|
|
|
|
|
var current = workInProgress.alternate;
|
|
|
|
|
|
if (current === null) {
|
|
|
// Reset to createFiber's initial values.
|
|
|
workInProgress.childLanes = NoLanes;
|
|
|
workInProgress.lanes = renderLanes;
|
|
|
workInProgress.child = null;
|
|
|
workInProgress.subtreeFlags = NoFlags;
|
|
|
workInProgress.memoizedProps = null;
|
|
|
workInProgress.memoizedState = null;
|
|
|
workInProgress.updateQueue = null;
|
|
|
workInProgress.dependencies = null;
|
|
|
workInProgress.stateNode = null;
|
|
|
|
|
|
{
|
|
|
// Note: We don't reset the actualTime counts. It's useful to accumulate
|
|
|
// actual time across multiple render passes.
|
|
|
workInProgress.selfBaseDuration = 0;
|
|
|
workInProgress.treeBaseDuration = 0;
|
|
|
}
|
|
|
} else {
|
|
|
// Reset to the cloned values that createWorkInProgress would've.
|
|
|
workInProgress.childLanes = current.childLanes;
|
|
|
workInProgress.lanes = current.lanes;
|
|
|
workInProgress.child = current.child;
|
|
|
workInProgress.subtreeFlags = NoFlags;
|
|
|
workInProgress.deletions = null;
|
|
|
workInProgress.memoizedProps = current.memoizedProps;
|
|
|
workInProgress.memoizedState = current.memoizedState;
|
|
|
workInProgress.updateQueue = current.updateQueue; // Needed because Blocks store data on type.
|
|
|
|
|
|
workInProgress.type = current.type; // Clone the dependencies object. This is mutated during the render phase, so
|
|
|
// it cannot be shared with the current fiber.
|
|
|
|
|
|
var currentDependencies = current.dependencies;
|
|
|
workInProgress.dependencies = currentDependencies === null ? null : {
|
|
|
lanes: currentDependencies.lanes,
|
|
|
firstContext: currentDependencies.firstContext
|
|
|
};
|
|
|
|
|
|
{
|
|
|
// Note: We don't reset the actualTime counts. It's useful to accumulate
|
|
|
// actual time across multiple render passes.
|
|
|
workInProgress.selfBaseDuration = current.selfBaseDuration;
|
|
|
workInProgress.treeBaseDuration = current.treeBaseDuration;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return workInProgress;
|
|
|
}
|
|
|
function createHostRootFiber(tag, isStrictMode, concurrentUpdatesByDefaultOverride) {
|
|
|
var mode;
|
|
|
|
|
|
if (tag === ConcurrentRoot) {
|
|
|
mode = ConcurrentMode;
|
|
|
|
|
|
if (isStrictMode === true) {
|
|
|
mode |= StrictLegacyMode;
|
|
|
|
|
|
{
|
|
|
mode |= StrictEffectsMode;
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
|
mode = NoMode;
|
|
|
}
|
|
|
|
|
|
if ( isDevToolsPresent) {
|
|
|
// Always collect profile timings when DevTools are present.
|
|
|
// This enables DevTools to start capturing timing at any point–
|
|
|
// Without some nodes in the tree having empty base times.
|
|
|
mode |= ProfileMode;
|
|
|
}
|
|
|
|
|
|
return createFiber(HostRoot, null, null, mode);
|
|
|
}
|
|
|
function createFiberFromTypeAndProps(type, // React$ElementType
|
|
|
key, pendingProps, owner, mode, lanes) {
|
|
|
var fiberTag = IndeterminateComponent; // The resolved type is set if we know what the final type will be. I.e. it's not lazy.
|
|
|
|
|
|
var resolvedType = type;
|
|
|
|
|
|
if (typeof type === 'function') {
|
|
|
if (shouldConstruct$1(type)) {
|
|
|
fiberTag = ClassComponent;
|
|
|
|
|
|
{
|
|
|
resolvedType = resolveClassForHotReloading(resolvedType);
|
|
|
}
|
|
|
} else {
|
|
|
{
|
|
|
resolvedType = resolveFunctionForHotReloading(resolvedType);
|
|
|
}
|
|
|
}
|
|
|
} else if (typeof type === 'string') {
|
|
|
fiberTag = HostComponent;
|
|
|
} else {
|
|
|
getTag: switch (type) {
|
|
|
case REACT_FRAGMENT_TYPE:
|
|
|
return createFiberFromFragment(pendingProps.children, mode, lanes, key);
|
|
|
|
|
|
case REACT_STRICT_MODE_TYPE:
|
|
|
fiberTag = Mode;
|
|
|
mode |= StrictLegacyMode;
|
|
|
|
|
|
if ( (mode & ConcurrentMode) !== NoMode) {
|
|
|
// Strict effects should never run on legacy roots
|
|
|
mode |= StrictEffectsMode;
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
|
|
case REACT_PROFILER_TYPE:
|
|
|
return createFiberFromProfiler(pendingProps, mode, lanes, key);
|
|
|
|
|
|
case REACT_SUSPENSE_TYPE:
|
|
|
return createFiberFromSuspense(pendingProps, mode, lanes, key);
|
|
|
|
|
|
case REACT_SUSPENSE_LIST_TYPE:
|
|
|
return createFiberFromSuspenseList(pendingProps, mode, lanes, key);
|
|
|
|
|
|
case REACT_OFFSCREEN_TYPE:
|
|
|
return createFiberFromOffscreen(pendingProps, mode, lanes, key);
|
|
|
|
|
|
case REACT_LEGACY_HIDDEN_TYPE:
|
|
|
|
|
|
// eslint-disable-next-line no-fallthrough
|
|
|
|
|
|
case REACT_SCOPE_TYPE:
|
|
|
|
|
|
// eslint-disable-next-line no-fallthrough
|
|
|
|
|
|
case REACT_CACHE_TYPE:
|
|
|
|
|
|
// eslint-disable-next-line no-fallthrough
|
|
|
|
|
|
case REACT_TRACING_MARKER_TYPE:
|
|
|
|
|
|
// eslint-disable-next-line no-fallthrough
|
|
|
|
|
|
case REACT_DEBUG_TRACING_MODE_TYPE:
|
|
|
|
|
|
// eslint-disable-next-line no-fallthrough
|
|
|
|
|
|
default:
|
|
|
{
|
|
|
if (typeof type === 'object' && type !== null) {
|
|
|
switch (type.$$typeof) {
|
|
|
case REACT_PROVIDER_TYPE:
|
|
|
fiberTag = ContextProvider;
|
|
|
break getTag;
|
|
|
|
|
|
case REACT_CONTEXT_TYPE:
|
|
|
// This is a consumer
|
|
|
fiberTag = ContextConsumer;
|
|
|
break getTag;
|
|
|
|
|
|
case REACT_FORWARD_REF_TYPE:
|
|
|
fiberTag = ForwardRef;
|
|
|
|
|
|
{
|
|
|
resolvedType = resolveForwardRefForHotReloading(resolvedType);
|
|
|
}
|
|
|
|
|
|
break getTag;
|
|
|
|
|
|
case REACT_MEMO_TYPE:
|
|
|
fiberTag = MemoComponent;
|
|
|
break getTag;
|
|
|
|
|
|
case REACT_LAZY_TYPE:
|
|
|
fiberTag = LazyComponent;
|
|
|
resolvedType = null;
|
|
|
break getTag;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var info = '';
|
|
|
|
|
|
{
|
|
|
if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {
|
|
|
info += ' You likely forgot to export your component from the file ' + "it's defined in, or you might have mixed up default and " + 'named imports.';
|
|
|
}
|
|
|
|
|
|
var ownerName = owner ? getComponentNameFromFiber(owner) : null;
|
|
|
|
|
|
if (ownerName) {
|
|
|
info += '\n\nCheck the render method of `' + ownerName + '`.';
|
|
|
}
|
|
|
}
|
|
|
|
|
|
throw new Error('Element type is invalid: expected a string (for built-in ' + 'components) or a class/function (for composite components) ' + ("but got: " + (type == null ? type : typeof type) + "." + info));
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var fiber = createFiber(fiberTag, pendingProps, key, mode);
|
|
|
fiber.elementType = type;
|
|
|
fiber.type = resolvedType;
|
|
|
fiber.lanes = lanes;
|
|
|
|
|
|
{
|
|
|
fiber._debugOwner = owner;
|
|
|
}
|
|
|
|
|
|
return fiber;
|
|
|
}
|
|
|
function createFiberFromElement(element, mode, lanes) {
|
|
|
var owner = null;
|
|
|
|
|
|
{
|
|
|
owner = element._owner;
|
|
|
}
|
|
|
|
|
|
var type = element.type;
|
|
|
var key = element.key;
|
|
|
var pendingProps = element.props;
|
|
|
var fiber = createFiberFromTypeAndProps(type, key, pendingProps, owner, mode, lanes);
|
|
|
|
|
|
{
|
|
|
fiber._debugSource = element._source;
|
|
|
fiber._debugOwner = element._owner;
|
|
|
}
|
|
|
|
|
|
return fiber;
|
|
|
}
|
|
|
function createFiberFromFragment(elements, mode, lanes, key) {
|
|
|
var fiber = createFiber(Fragment, elements, key, mode);
|
|
|
fiber.lanes = lanes;
|
|
|
return fiber;
|
|
|
}
|
|
|
|
|
|
function createFiberFromProfiler(pendingProps, mode, lanes, key) {
|
|
|
{
|
|
|
if (typeof pendingProps.id !== 'string') {
|
|
|
error('Profiler must specify an "id" of type `string` as a prop. Received the type `%s` instead.', typeof pendingProps.id);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var fiber = createFiber(Profiler, pendingProps, key, mode | ProfileMode);
|
|
|
fiber.elementType = REACT_PROFILER_TYPE;
|
|
|
fiber.lanes = lanes;
|
|
|
|
|
|
{
|
|
|
fiber.stateNode = {
|
|
|
effectDuration: 0,
|
|
|
passiveEffectDuration: 0
|
|
|
};
|
|
|
}
|
|
|
|
|
|
return fiber;
|
|
|
}
|
|
|
|
|
|
function createFiberFromSuspense(pendingProps, mode, lanes, key) {
|
|
|
var fiber = createFiber(SuspenseComponent, pendingProps, key, mode);
|
|
|
fiber.elementType = REACT_SUSPENSE_TYPE;
|
|
|
fiber.lanes = lanes;
|
|
|
return fiber;
|
|
|
}
|
|
|
function createFiberFromSuspenseList(pendingProps, mode, lanes, key) {
|
|
|
var fiber = createFiber(SuspenseListComponent, pendingProps, key, mode);
|
|
|
fiber.elementType = REACT_SUSPENSE_LIST_TYPE;
|
|
|
fiber.lanes = lanes;
|
|
|
return fiber;
|
|
|
}
|
|
|
function createFiberFromOffscreen(pendingProps, mode, lanes, key) {
|
|
|
var fiber = createFiber(OffscreenComponent, pendingProps, key, mode);
|
|
|
fiber.elementType = REACT_OFFSCREEN_TYPE;
|
|
|
fiber.lanes = lanes;
|
|
|
var primaryChildInstance = {
|
|
|
isHidden: false
|
|
|
};
|
|
|
fiber.stateNode = primaryChildInstance;
|
|
|
return fiber;
|
|
|
}
|
|
|
function createFiberFromText(content, mode, lanes) {
|
|
|
var fiber = createFiber(HostText, content, null, mode);
|
|
|
fiber.lanes = lanes;
|
|
|
return fiber;
|
|
|
}
|
|
|
function createFiberFromHostInstanceForDeletion() {
|
|
|
var fiber = createFiber(HostComponent, null, null, NoMode);
|
|
|
fiber.elementType = 'DELETED';
|
|
|
return fiber;
|
|
|
}
|
|
|
function createFiberFromDehydratedFragment(dehydratedNode) {
|
|
|
var fiber = createFiber(DehydratedFragment, null, null, NoMode);
|
|
|
fiber.stateNode = dehydratedNode;
|
|
|
return fiber;
|
|
|
}
|
|
|
function createFiberFromPortal(portal, mode, lanes) {
|
|
|
var pendingProps = portal.children !== null ? portal.children : [];
|
|
|
var fiber = createFiber(HostPortal, pendingProps, portal.key, mode);
|
|
|
fiber.lanes = lanes;
|
|
|
fiber.stateNode = {
|
|
|
containerInfo: portal.containerInfo,
|
|
|
pendingChildren: null,
|
|
|
// Used by persistent updates
|
|
|
implementation: portal.implementation
|
|
|
};
|
|
|
return fiber;
|
|
|
} // Used for stashing WIP properties to replay failed work in DEV.
|
|
|
|
|
|
function assignFiberPropertiesInDEV(target, source) {
|
|
|
if (target === null) {
|
|
|
// This Fiber's initial properties will always be overwritten.
|
|
|
// We only use a Fiber to ensure the same hidden class so DEV isn't slow.
|
|
|
target = createFiber(IndeterminateComponent, null, null, NoMode);
|
|
|
} // This is intentionally written as a list of all properties.
|
|
|
// We tried to use Object.assign() instead but this is called in
|
|
|
// the hottest path, and Object.assign() was too slow:
|
|
|
// https://github.com/facebook/react/issues/12502
|
|
|
// This code is DEV-only so size is not a concern.
|
|
|
|
|
|
|
|
|
target.tag = source.tag;
|
|
|
target.key = source.key;
|
|
|
target.elementType = source.elementType;
|
|
|
target.type = source.type;
|
|
|
target.stateNode = source.stateNode;
|
|
|
target.return = source.return;
|
|
|
target.child = source.child;
|
|
|
target.sibling = source.sibling;
|
|
|
target.index = source.index;
|
|
|
target.ref = source.ref;
|
|
|
target.pendingProps = source.pendingProps;
|
|
|
target.memoizedProps = source.memoizedProps;
|
|
|
target.updateQueue = source.updateQueue;
|
|
|
target.memoizedState = source.memoizedState;
|
|
|
target.dependencies = source.dependencies;
|
|
|
target.mode = source.mode;
|
|
|
target.flags = source.flags;
|
|
|
target.subtreeFlags = source.subtreeFlags;
|
|
|
target.deletions = source.deletions;
|
|
|
target.lanes = source.lanes;
|
|
|
target.childLanes = source.childLanes;
|
|
|
target.alternate = source.alternate;
|
|
|
|
|
|
{
|
|
|
target.actualDuration = source.actualDuration;
|
|
|
target.actualStartTime = source.actualStartTime;
|
|
|
target.selfBaseDuration = source.selfBaseDuration;
|
|
|
target.treeBaseDuration = source.treeBaseDuration;
|
|
|
}
|
|
|
|
|
|
target._debugSource = source._debugSource;
|
|
|
target._debugOwner = source._debugOwner;
|
|
|
target._debugNeedsRemount = source._debugNeedsRemount;
|
|
|
target._debugHookTypes = source._debugHookTypes;
|
|
|
return target;
|
|
|
}
|
|
|
|
|
|
function FiberRootNode(containerInfo, tag, hydrate, identifierPrefix, onRecoverableError) {
|
|
|
this.tag = tag;
|
|
|
this.containerInfo = containerInfo;
|
|
|
this.pendingChildren = null;
|
|
|
this.current = null;
|
|
|
this.pingCache = null;
|
|
|
this.finishedWork = null;
|
|
|
this.timeoutHandle = noTimeout;
|
|
|
this.context = null;
|
|
|
this.pendingContext = null;
|
|
|
this.callbackNode = null;
|
|
|
this.callbackPriority = NoLane;
|
|
|
this.eventTimes = createLaneMap(NoLanes);
|
|
|
this.expirationTimes = createLaneMap(NoTimestamp);
|
|
|
this.pendingLanes = NoLanes;
|
|
|
this.suspendedLanes = NoLanes;
|
|
|
this.pingedLanes = NoLanes;
|
|
|
this.expiredLanes = NoLanes;
|
|
|
this.mutableReadLanes = NoLanes;
|
|
|
this.finishedLanes = NoLanes;
|
|
|
this.entangledLanes = NoLanes;
|
|
|
this.entanglements = createLaneMap(NoLanes);
|
|
|
this.identifierPrefix = identifierPrefix;
|
|
|
this.onRecoverableError = onRecoverableError;
|
|
|
|
|
|
{
|
|
|
this.mutableSourceEagerHydrationData = null;
|
|
|
}
|
|
|
|
|
|
{
|
|
|
this.effectDuration = 0;
|
|
|
this.passiveEffectDuration = 0;
|
|
|
}
|
|
|
|
|
|
{
|
|
|
this.memoizedUpdaters = new Set();
|
|
|
var pendingUpdatersLaneMap = this.pendingUpdatersLaneMap = [];
|
|
|
|
|
|
for (var _i = 0; _i < TotalLanes; _i++) {
|
|
|
pendingUpdatersLaneMap.push(new Set());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
{
|
|
|
switch (tag) {
|
|
|
case ConcurrentRoot:
|
|
|
this._debugRootType = hydrate ? 'hydrateRoot()' : 'createRoot()';
|
|
|
break;
|
|
|
|
|
|
case LegacyRoot:
|
|
|
this._debugRootType = hydrate ? 'hydrate()' : 'render()';
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function createFiberRoot(containerInfo, tag, hydrate, initialChildren, hydrationCallbacks, isStrictMode, concurrentUpdatesByDefaultOverride, // TODO: We have several of these arguments that are conceptually part of the
|
|
|
// host config, but because they are passed in at runtime, we have to thread
|
|
|
// them through the root constructor. Perhaps we should put them all into a
|
|
|
// single type, like a DynamicHostConfig that is defined by the renderer.
|
|
|
identifierPrefix, onRecoverableError, transitionCallbacks) {
|
|
|
var root = new FiberRootNode(containerInfo, tag, hydrate, identifierPrefix, onRecoverableError);
|
|
|
// stateNode is any.
|
|
|
|
|
|
|
|
|
var uninitializedFiber = createHostRootFiber(tag, isStrictMode);
|
|
|
root.current = uninitializedFiber;
|
|
|
uninitializedFiber.stateNode = root;
|
|
|
|
|
|
{
|
|
|
var _initialState = {
|
|
|
element: initialChildren,
|
|
|
isDehydrated: hydrate,
|
|
|
cache: null,
|
|
|
// not enabled yet
|
|
|
transitions: null,
|
|
|
pendingSuspenseBoundaries: null
|
|
|
};
|
|
|
uninitializedFiber.memoizedState = _initialState;
|
|
|
}
|
|
|
|
|
|
initializeUpdateQueue(uninitializedFiber);
|
|
|
return root;
|
|
|
}
|
|
|
|
|
|
var ReactVersion = '18.2.0';
|
|
|
|
|
|
function createPortal(children, containerInfo, // TODO: figure out the API for cross-renderer implementation.
|
|
|
implementation) {
|
|
|
var key = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
|
|
|
|
|
|
{
|
|
|
checkKeyStringCoercion(key);
|
|
|
}
|
|
|
|
|
|
return {
|
|
|
// This tag allow us to uniquely identify this as a React Portal
|
|
|
$$typeof: REACT_PORTAL_TYPE,
|
|
|
key: key == null ? null : '' + key,
|
|
|
children: children,
|
|
|
containerInfo: containerInfo,
|
|
|
implementation: implementation
|
|
|
};
|
|
|
}
|
|
|
|
|
|
var didWarnAboutNestedUpdates;
|
|
|
var didWarnAboutFindNodeInStrictMode;
|
|
|
|
|
|
{
|
|
|
didWarnAboutNestedUpdates = false;
|
|
|
didWarnAboutFindNodeInStrictMode = {};
|
|
|
}
|
|
|
|
|
|
function getContextForSubtree(parentComponent) {
|
|
|
if (!parentComponent) {
|
|
|
return emptyContextObject;
|
|
|
}
|
|
|
|
|
|
var fiber = get(parentComponent);
|
|
|
var parentContext = findCurrentUnmaskedContext(fiber);
|
|
|
|
|
|
if (fiber.tag === ClassComponent) {
|
|
|
var Component = fiber.type;
|
|
|
|
|
|
if (isContextProvider(Component)) {
|
|
|
return processChildContext(fiber, Component, parentContext);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return parentContext;
|
|
|
}
|
|
|
|
|
|
function findHostInstanceWithWarning(component, methodName) {
|
|
|
{
|
|
|
var fiber = get(component);
|
|
|
|
|
|
if (fiber === undefined) {
|
|
|
if (typeof component.render === 'function') {
|
|
|
throw new Error('Unable to find node on an unmounted component.');
|
|
|
} else {
|
|
|
var keys = Object.keys(component).join(',');
|
|
|
throw new Error("Argument appears to not be a ReactComponent. Keys: " + keys);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var hostFiber = findCurrentHostFiber(fiber);
|
|
|
|
|
|
if (hostFiber === null) {
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
if (hostFiber.mode & StrictLegacyMode) {
|
|
|
var componentName = getComponentNameFromFiber(fiber) || 'Component';
|
|
|
|
|
|
if (!didWarnAboutFindNodeInStrictMode[componentName]) {
|
|
|
didWarnAboutFindNodeInStrictMode[componentName] = true;
|
|
|
var previousFiber = current;
|
|
|
|
|
|
try {
|
|
|
setCurrentFiber(hostFiber);
|
|
|
|
|
|
if (fiber.mode & StrictLegacyMode) {
|
|
|
error('%s is deprecated in StrictMode. ' + '%s was passed an instance of %s which is inside StrictMode. ' + 'Instead, add a ref directly to the element you want to reference. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-find-node', methodName, methodName, componentName);
|
|
|
} else {
|
|
|
error('%s is deprecated in StrictMode. ' + '%s was passed an instance of %s which renders StrictMode children. ' + 'Instead, add a ref directly to the element you want to reference. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-find-node', methodName, methodName, componentName);
|
|
|
}
|
|
|
} finally {
|
|
|
// Ideally this should reset to previous but this shouldn't be called in
|
|
|
// render and there's another warning for that anyway.
|
|
|
if (previousFiber) {
|
|
|
setCurrentFiber(previousFiber);
|
|
|
} else {
|
|
|
resetCurrentFiber();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return hostFiber.stateNode;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function createContainer(containerInfo, tag, hydrationCallbacks, isStrictMode, concurrentUpdatesByDefaultOverride, identifierPrefix, onRecoverableError, transitionCallbacks) {
|
|
|
var hydrate = false;
|
|
|
var initialChildren = null;
|
|
|
return createFiberRoot(containerInfo, tag, hydrate, initialChildren, hydrationCallbacks, isStrictMode, concurrentUpdatesByDefaultOverride, identifierPrefix, onRecoverableError);
|
|
|
}
|
|
|
function createHydrationContainer(initialChildren, // TODO: Remove `callback` when we delete legacy mode.
|
|
|
callback, containerInfo, tag, hydrationCallbacks, isStrictMode, concurrentUpdatesByDefaultOverride, identifierPrefix, onRecoverableError, transitionCallbacks) {
|
|
|
var hydrate = true;
|
|
|
var root = createFiberRoot(containerInfo, tag, hydrate, initialChildren, hydrationCallbacks, isStrictMode, concurrentUpdatesByDefaultOverride, identifierPrefix, onRecoverableError); // TODO: Move this to FiberRoot constructor
|
|
|
|
|
|
root.context = getContextForSubtree(null); // Schedule the initial render. In a hydration root, this is different from
|
|
|
// a regular update because the initial render must match was was rendered
|
|
|
// on the server.
|
|
|
// NOTE: This update intentionally doesn't have a payload. We're only using
|
|
|
// the update to schedule work on the root fiber (and, for legacy roots, to
|
|
|
// enqueue the callback if one is provided).
|
|
|
|
|
|
var current = root.current;
|
|
|
var eventTime = requestEventTime();
|
|
|
var lane = requestUpdateLane(current);
|
|
|
var update = createUpdate(eventTime, lane);
|
|
|
update.callback = callback !== undefined && callback !== null ? callback : null;
|
|
|
enqueueUpdate(current, update, lane);
|
|
|
scheduleInitialHydrationOnRoot(root, lane, eventTime);
|
|
|
return root;
|
|
|
}
|
|
|
function updateContainer(element, container, parentComponent, callback) {
|
|
|
{
|
|
|
onScheduleRoot(container, element);
|
|
|
}
|
|
|
|
|
|
var current$1 = container.current;
|
|
|
var eventTime = requestEventTime();
|
|
|
var lane = requestUpdateLane(current$1);
|
|
|
|
|
|
{
|
|
|
markRenderScheduled(lane);
|
|
|
}
|
|
|
|
|
|
var context = getContextForSubtree(parentComponent);
|
|
|
|
|
|
if (container.context === null) {
|
|
|
container.context = context;
|
|
|
} else {
|
|
|
container.pendingContext = context;
|
|
|
}
|
|
|
|
|
|
{
|
|
|
if (isRendering && current !== null && !didWarnAboutNestedUpdates) {
|
|
|
didWarnAboutNestedUpdates = true;
|
|
|
|
|
|
error('Render methods should be a pure function of props and state; ' + 'triggering nested component updates from render is not allowed. ' + 'If necessary, trigger nested updates in componentDidUpdate.\n\n' + 'Check the render method of %s.', getComponentNameFromFiber(current) || 'Unknown');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var update = createUpdate(eventTime, lane); // Caution: React DevTools currently depends on this property
|
|
|
// being called "element".
|
|
|
|
|
|
update.payload = {
|
|
|
element: element
|
|
|
};
|
|
|
callback = callback === undefined ? null : callback;
|
|
|
|
|
|
if (callback !== null) {
|
|
|
{
|
|
|
if (typeof callback !== 'function') {
|
|
|
error('render(...): Expected the last optional `callback` argument to be a ' + 'function. Instead received: %s.', callback);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
update.callback = callback;
|
|
|
}
|
|
|
|
|
|
var root = enqueueUpdate(current$1, update, lane);
|
|
|
|
|
|
if (root !== null) {
|
|
|
scheduleUpdateOnFiber(root, current$1, lane, eventTime);
|
|
|
entangleTransitions(root, current$1, lane);
|
|
|
}
|
|
|
|
|
|
return lane;
|
|
|
}
|
|
|
function getPublicRootInstance(container) {
|
|
|
var containerFiber = container.current;
|
|
|
|
|
|
if (!containerFiber.child) {
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
switch (containerFiber.child.tag) {
|
|
|
case HostComponent:
|
|
|
return getPublicInstance(containerFiber.child.stateNode);
|
|
|
|
|
|
default:
|
|
|
return containerFiber.child.stateNode;
|
|
|
}
|
|
|
}
|
|
|
function attemptSynchronousHydration$1(fiber) {
|
|
|
switch (fiber.tag) {
|
|
|
case HostRoot:
|
|
|
{
|
|
|
var root = fiber.stateNode;
|
|
|
|
|
|
if (isRootDehydrated(root)) {
|
|
|
// Flush the first scheduled "update".
|
|
|
var lanes = getHighestPriorityPendingLanes(root);
|
|
|
flushRoot(root, lanes);
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
case SuspenseComponent:
|
|
|
{
|
|
|
flushSync(function () {
|
|
|
var root = enqueueConcurrentRenderForLane(fiber, SyncLane);
|
|
|
|
|
|
if (root !== null) {
|
|
|
var eventTime = requestEventTime();
|
|
|
scheduleUpdateOnFiber(root, fiber, SyncLane, eventTime);
|
|
|
}
|
|
|
}); // If we're still blocked after this, we need to increase
|
|
|
// the priority of any promises resolving within this
|
|
|
// boundary so that they next attempt also has higher pri.
|
|
|
|
|
|
var retryLane = SyncLane;
|
|
|
markRetryLaneIfNotHydrated(fiber, retryLane);
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function markRetryLaneImpl(fiber, retryLane) {
|
|
|
var suspenseState = fiber.memoizedState;
|
|
|
|
|
|
if (suspenseState !== null && suspenseState.dehydrated !== null) {
|
|
|
suspenseState.retryLane = higherPriorityLane(suspenseState.retryLane, retryLane);
|
|
|
}
|
|
|
} // Increases the priority of thenables when they resolve within this boundary.
|
|
|
|
|
|
|
|
|
function markRetryLaneIfNotHydrated(fiber, retryLane) {
|
|
|
markRetryLaneImpl(fiber, retryLane);
|
|
|
var alternate = fiber.alternate;
|
|
|
|
|
|
if (alternate) {
|
|
|
markRetryLaneImpl(alternate, retryLane);
|
|
|
}
|
|
|
}
|
|
|
function attemptContinuousHydration$1(fiber) {
|
|
|
if (fiber.tag !== SuspenseComponent) {
|
|
|
// We ignore HostRoots here because we can't increase
|
|
|
// their priority and they should not suspend on I/O,
|
|
|
// since you have to wrap anything that might suspend in
|
|
|
// Suspense.
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
var lane = SelectiveHydrationLane;
|
|
|
var root = enqueueConcurrentRenderForLane(fiber, lane);
|
|
|
|
|
|
if (root !== null) {
|
|
|
var eventTime = requestEventTime();
|
|
|
scheduleUpdateOnFiber(root, fiber, lane, eventTime);
|
|
|
}
|
|
|
|
|
|
markRetryLaneIfNotHydrated(fiber, lane);
|
|
|
}
|
|
|
function attemptHydrationAtCurrentPriority$1(fiber) {
|
|
|
if (fiber.tag !== SuspenseComponent) {
|
|
|
// We ignore HostRoots here because we can't increase
|
|
|
// their priority other than synchronously flush it.
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
var lane = requestUpdateLane(fiber);
|
|
|
var root = enqueueConcurrentRenderForLane(fiber, lane);
|
|
|
|
|
|
if (root !== null) {
|
|
|
var eventTime = requestEventTime();
|
|
|
scheduleUpdateOnFiber(root, fiber, lane, eventTime);
|
|
|
}
|
|
|
|
|
|
markRetryLaneIfNotHydrated(fiber, lane);
|
|
|
}
|
|
|
function findHostInstanceWithNoPortals(fiber) {
|
|
|
var hostFiber = findCurrentHostFiberWithNoPortals(fiber);
|
|
|
|
|
|
if (hostFiber === null) {
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
return hostFiber.stateNode;
|
|
|
}
|
|
|
|
|
|
var shouldErrorImpl = function (fiber) {
|
|
|
return null;
|
|
|
};
|
|
|
|
|
|
function shouldError(fiber) {
|
|
|
return shouldErrorImpl(fiber);
|
|
|
}
|
|
|
|
|
|
var shouldSuspendImpl = function (fiber) {
|
|
|
return false;
|
|
|
};
|
|
|
|
|
|
function shouldSuspend(fiber) {
|
|
|
return shouldSuspendImpl(fiber);
|
|
|
}
|
|
|
var overrideHookState = null;
|
|
|
var overrideHookStateDeletePath = null;
|
|
|
var overrideHookStateRenamePath = null;
|
|
|
var overrideProps = null;
|
|
|
var overridePropsDeletePath = null;
|
|
|
var overridePropsRenamePath = null;
|
|
|
var scheduleUpdate = null;
|
|
|
var setErrorHandler = null;
|
|
|
var setSuspenseHandler = null;
|
|
|
|
|
|
{
|
|
|
var copyWithDeleteImpl = function (obj, path, index) {
|
|
|
var key = path[index];
|
|
|
var updated = isArray(obj) ? obj.slice() : assign({}, obj);
|
|
|
|
|
|
if (index + 1 === path.length) {
|
|
|
if (isArray(updated)) {
|
|
|
updated.splice(key, 1);
|
|
|
} else {
|
|
|
delete updated[key];
|
|
|
}
|
|
|
|
|
|
return updated;
|
|
|
} // $FlowFixMe number or string is fine here
|
|
|
|
|
|
|
|
|
updated[key] = copyWithDeleteImpl(obj[key], path, index + 1);
|
|
|
return updated;
|
|
|
};
|
|
|
|
|
|
var copyWithDelete = function (obj, path) {
|
|
|
return copyWithDeleteImpl(obj, path, 0);
|
|
|
};
|
|
|
|
|
|
var copyWithRenameImpl = function (obj, oldPath, newPath, index) {
|
|
|
var oldKey = oldPath[index];
|
|
|
var updated = isArray(obj) ? obj.slice() : assign({}, obj);
|
|
|
|
|
|
if (index + 1 === oldPath.length) {
|
|
|
var newKey = newPath[index]; // $FlowFixMe number or string is fine here
|
|
|
|
|
|
updated[newKey] = updated[oldKey];
|
|
|
|
|
|
if (isArray(updated)) {
|
|
|
updated.splice(oldKey, 1);
|
|
|
} else {
|
|
|
delete updated[oldKey];
|
|
|
}
|
|
|
} else {
|
|
|
// $FlowFixMe number or string is fine here
|
|
|
updated[oldKey] = copyWithRenameImpl( // $FlowFixMe number or string is fine here
|
|
|
obj[oldKey], oldPath, newPath, index + 1);
|
|
|
}
|
|
|
|
|
|
return updated;
|
|
|
};
|
|
|
|
|
|
var copyWithRename = function (obj, oldPath, newPath) {
|
|
|
if (oldPath.length !== newPath.length) {
|
|
|
warn('copyWithRename() expects paths of the same length');
|
|
|
|
|
|
return;
|
|
|
} else {
|
|
|
for (var i = 0; i < newPath.length - 1; i++) {
|
|
|
if (oldPath[i] !== newPath[i]) {
|
|
|
warn('copyWithRename() expects paths to be the same except for the deepest key');
|
|
|
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return copyWithRenameImpl(obj, oldPath, newPath, 0);
|
|
|
};
|
|
|
|
|
|
var copyWithSetImpl = function (obj, path, index, value) {
|
|
|
if (index >= path.length) {
|
|
|
return value;
|
|
|
}
|
|
|
|
|
|
var key = path[index];
|
|
|
var updated = isArray(obj) ? obj.slice() : assign({}, obj); // $FlowFixMe number or string is fine here
|
|
|
|
|
|
updated[key] = copyWithSetImpl(obj[key], path, index + 1, value);
|
|
|
return updated;
|
|
|
};
|
|
|
|
|
|
var copyWithSet = function (obj, path, value) {
|
|
|
return copyWithSetImpl(obj, path, 0, value);
|
|
|
};
|
|
|
|
|
|
var findHook = function (fiber, id) {
|
|
|
// For now, the "id" of stateful hooks is just the stateful hook index.
|
|
|
// This may change in the future with e.g. nested hooks.
|
|
|
var currentHook = fiber.memoizedState;
|
|
|
|
|
|
while (currentHook !== null && id > 0) {
|
|
|
currentHook = currentHook.next;
|
|
|
id--;
|
|
|
}
|
|
|
|
|
|
return currentHook;
|
|
|
}; // Support DevTools editable values for useState and useReducer.
|
|
|
|
|
|
|
|
|
overrideHookState = function (fiber, id, path, value) {
|
|
|
var hook = findHook(fiber, id);
|
|
|
|
|
|
if (hook !== null) {
|
|
|
var newState = copyWithSet(hook.memoizedState, path, value);
|
|
|
hook.memoizedState = newState;
|
|
|
hook.baseState = newState; // We aren't actually adding an update to the queue,
|
|
|
// because there is no update we can add for useReducer hooks that won't trigger an error.
|
|
|
// (There's no appropriate action type for DevTools overrides.)
|
|
|
// As a result though, React will see the scheduled update as a noop and bailout.
|
|
|
// Shallow cloning props works as a workaround for now to bypass the bailout check.
|
|
|
|
|
|
fiber.memoizedProps = assign({}, fiber.memoizedProps);
|
|
|
var root = enqueueConcurrentRenderForLane(fiber, SyncLane);
|
|
|
|
|
|
if (root !== null) {
|
|
|
scheduleUpdateOnFiber(root, fiber, SyncLane, NoTimestamp);
|
|
|
}
|
|
|
}
|
|
|
};
|
|
|
|
|
|
overrideHookStateDeletePath = function (fiber, id, path) {
|
|
|
var hook = findHook(fiber, id);
|
|
|
|
|
|
if (hook !== null) {
|
|
|
var newState = copyWithDelete(hook.memoizedState, path);
|
|
|
hook.memoizedState = newState;
|
|
|
hook.baseState = newState; // We aren't actually adding an update to the queue,
|
|
|
// because there is no update we can add for useReducer hooks that won't trigger an error.
|
|
|
// (There's no appropriate action type for DevTools overrides.)
|
|
|
// As a result though, React will see the scheduled update as a noop and bailout.
|
|
|
// Shallow cloning props works as a workaround for now to bypass the bailout check.
|
|
|
|
|
|
fiber.memoizedProps = assign({}, fiber.memoizedProps);
|
|
|
var root = enqueueConcurrentRenderForLane(fiber, SyncLane);
|
|
|
|
|
|
if (root !== null) {
|
|
|
scheduleUpdateOnFiber(root, fiber, SyncLane, NoTimestamp);
|
|
|
}
|
|
|
}
|
|
|
};
|
|
|
|
|
|
overrideHookStateRenamePath = function (fiber, id, oldPath, newPath) {
|
|
|
var hook = findHook(fiber, id);
|
|
|
|
|
|
if (hook !== null) {
|
|
|
var newState = copyWithRename(hook.memoizedState, oldPath, newPath);
|
|
|
hook.memoizedState = newState;
|
|
|
hook.baseState = newState; // We aren't actually adding an update to the queue,
|
|
|
// because there is no update we can add for useReducer hooks that won't trigger an error.
|
|
|
// (There's no appropriate action type for DevTools overrides.)
|
|
|
// As a result though, React will see the scheduled update as a noop and bailout.
|
|
|
// Shallow cloning props works as a workaround for now to bypass the bailout check.
|
|
|
|
|
|
fiber.memoizedProps = assign({}, fiber.memoizedProps);
|
|
|
var root = enqueueConcurrentRenderForLane(fiber, SyncLane);
|
|
|
|
|
|
if (root !== null) {
|
|
|
scheduleUpdateOnFiber(root, fiber, SyncLane, NoTimestamp);
|
|
|
}
|
|
|
}
|
|
|
}; // Support DevTools props for function components, forwardRef, memo, host components, etc.
|
|
|
|
|
|
|
|
|
overrideProps = function (fiber, path, value) {
|
|
|
fiber.pendingProps = copyWithSet(fiber.memoizedProps, path, value);
|
|
|
|
|
|
if (fiber.alternate) {
|
|
|
fiber.alternate.pendingProps = fiber.pendingProps;
|
|
|
}
|
|
|
|
|
|
var root = enqueueConcurrentRenderForLane(fiber, SyncLane);
|
|
|
|
|
|
if (root !== null) {
|
|
|
scheduleUpdateOnFiber(root, fiber, SyncLane, NoTimestamp);
|
|
|
}
|
|
|
};
|
|
|
|
|
|
overridePropsDeletePath = function (fiber, path) {
|
|
|
fiber.pendingProps = copyWithDelete(fiber.memoizedProps, path);
|
|
|
|
|
|
if (fiber.alternate) {
|
|
|
fiber.alternate.pendingProps = fiber.pendingProps;
|
|
|
}
|
|
|
|
|
|
var root = enqueueConcurrentRenderForLane(fiber, SyncLane);
|
|
|
|
|
|
if (root !== null) {
|
|
|
scheduleUpdateOnFiber(root, fiber, SyncLane, NoTimestamp);
|
|
|
}
|
|
|
};
|
|
|
|
|
|
overridePropsRenamePath = function (fiber, oldPath, newPath) {
|
|
|
fiber.pendingProps = copyWithRename(fiber.memoizedProps, oldPath, newPath);
|
|
|
|
|
|
if (fiber.alternate) {
|
|
|
fiber.alternate.pendingProps = fiber.pendingProps;
|
|
|
}
|
|
|
|
|
|
var root = enqueueConcurrentRenderForLane(fiber, SyncLane);
|
|
|
|
|
|
if (root !== null) {
|
|
|
scheduleUpdateOnFiber(root, fiber, SyncLane, NoTimestamp);
|
|
|
}
|
|
|
};
|
|
|
|
|
|
scheduleUpdate = function (fiber) {
|
|
|
var root = enqueueConcurrentRenderForLane(fiber, SyncLane);
|
|
|
|
|
|
if (root !== null) {
|
|
|
scheduleUpdateOnFiber(root, fiber, SyncLane, NoTimestamp);
|
|
|
}
|
|
|
};
|
|
|
|
|
|
setErrorHandler = function (newShouldErrorImpl) {
|
|
|
shouldErrorImpl = newShouldErrorImpl;
|
|
|
};
|
|
|
|
|
|
setSuspenseHandler = function (newShouldSuspendImpl) {
|
|
|
shouldSuspendImpl = newShouldSuspendImpl;
|
|
|
};
|
|
|
}
|
|
|
|
|
|
function findHostInstanceByFiber(fiber) {
|
|
|
var hostFiber = findCurrentHostFiber(fiber);
|
|
|
|
|
|
if (hostFiber === null) {
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
return hostFiber.stateNode;
|
|
|
}
|
|
|
|
|
|
function emptyFindFiberByHostInstance(instance) {
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
function getCurrentFiberForDevTools() {
|
|
|
return current;
|
|
|
}
|
|
|
|
|
|
function injectIntoDevTools(devToolsConfig) {
|
|
|
var findFiberByHostInstance = devToolsConfig.findFiberByHostInstance;
|
|
|
var ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;
|
|
|
return injectInternals({
|
|
|
bundleType: devToolsConfig.bundleType,
|
|
|
version: devToolsConfig.version,
|
|
|
rendererPackageName: devToolsConfig.rendererPackageName,
|
|
|
rendererConfig: devToolsConfig.rendererConfig,
|
|
|
overrideHookState: overrideHookState,
|
|
|
overrideHookStateDeletePath: overrideHookStateDeletePath,
|
|
|
overrideHookStateRenamePath: overrideHookStateRenamePath,
|
|
|
overrideProps: overrideProps,
|
|
|
overridePropsDeletePath: overridePropsDeletePath,
|
|
|
overridePropsRenamePath: overridePropsRenamePath,
|
|
|
setErrorHandler: setErrorHandler,
|
|
|
setSuspenseHandler: setSuspenseHandler,
|
|
|
scheduleUpdate: scheduleUpdate,
|
|
|
currentDispatcherRef: ReactCurrentDispatcher,
|
|
|
findHostInstanceByFiber: findHostInstanceByFiber,
|
|
|
findFiberByHostInstance: findFiberByHostInstance || emptyFindFiberByHostInstance,
|
|
|
// React Refresh
|
|
|
findHostInstancesForRefresh: findHostInstancesForRefresh ,
|
|
|
scheduleRefresh: scheduleRefresh ,
|
|
|
scheduleRoot: scheduleRoot ,
|
|
|
setRefreshHandler: setRefreshHandler ,
|
|
|
// Enables DevTools to append owner stacks to error messages in DEV mode.
|
|
|
getCurrentFiber: getCurrentFiberForDevTools ,
|
|
|
// Enables DevTools to detect reconciler version rather than renderer version
|
|
|
// which may not match for third party renderers.
|
|
|
reconcilerVersion: ReactVersion
|
|
|
});
|
|
|
}
|
|
|
|
|
|
/* global reportError */
|
|
|
|
|
|
var defaultOnRecoverableError = typeof reportError === 'function' ? // In modern browsers, reportError will dispatch an error event,
|
|
|
// emulating an uncaught JavaScript error.
|
|
|
reportError : function (error) {
|
|
|
// In older browsers and test environments, fallback to console.error.
|
|
|
// eslint-disable-next-line react-internal/no-production-logging
|
|
|
console['error'](error);
|
|
|
};
|
|
|
|
|
|
function ReactDOMRoot(internalRoot) {
|
|
|
this._internalRoot = internalRoot;
|
|
|
}
|
|
|
|
|
|
ReactDOMHydrationRoot.prototype.render = ReactDOMRoot.prototype.render = function (children) {
|
|
|
var root = this._internalRoot;
|
|
|
|
|
|
if (root === null) {
|
|
|
throw new Error('Cannot update an unmounted root.');
|
|
|
}
|
|
|
|
|
|
{
|
|
|
if (typeof arguments[1] === 'function') {
|
|
|
error('render(...): does not support the second callback argument. ' + 'To execute a side effect after rendering, declare it in a component body with useEffect().');
|
|
|
} else if (isValidContainer(arguments[1])) {
|
|
|
error('You passed a container to the second argument of root.render(...). ' + "You don't need to pass it again since you already passed it to create the root.");
|
|
|
} else if (typeof arguments[1] !== 'undefined') {
|
|
|
error('You passed a second argument to root.render(...) but it only accepts ' + 'one argument.');
|
|
|
}
|
|
|
|
|
|
var container = root.containerInfo;
|
|
|
|
|
|
if (container.nodeType !== COMMENT_NODE) {
|
|
|
var hostInstance = findHostInstanceWithNoPortals(root.current);
|
|
|
|
|
|
if (hostInstance) {
|
|
|
if (hostInstance.parentNode !== container) {
|
|
|
error('render(...): It looks like the React-rendered content of the ' + 'root container was removed without using React. This is not ' + 'supported and will cause errors. Instead, call ' + "root.unmount() to empty a root's container.");
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
updateContainer(children, root, null, null);
|
|
|
};
|
|
|
|
|
|
ReactDOMHydrationRoot.prototype.unmount = ReactDOMRoot.prototype.unmount = function () {
|
|
|
{
|
|
|
if (typeof arguments[0] === 'function') {
|
|
|
error('unmount(...): does not support a callback argument. ' + 'To execute a side effect after rendering, declare it in a component body with useEffect().');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var root = this._internalRoot;
|
|
|
|
|
|
if (root !== null) {
|
|
|
this._internalRoot = null;
|
|
|
var container = root.containerInfo;
|
|
|
|
|
|
{
|
|
|
if (isAlreadyRendering()) {
|
|
|
error('Attempted to synchronously unmount a root while React was already ' + 'rendering. React cannot finish unmounting the root until the ' + 'current render has completed, which may lead to a race condition.');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
flushSync(function () {
|
|
|
updateContainer(null, root, null, null);
|
|
|
});
|
|
|
unmarkContainerAsRoot(container);
|
|
|
}
|
|
|
};
|
|
|
|
|
|
function createRoot(container, options) {
|
|
|
if (!isValidContainer(container)) {
|
|
|
throw new Error('createRoot(...): Target container is not a DOM element.');
|
|
|
}
|
|
|
|
|
|
warnIfReactDOMContainerInDEV(container);
|
|
|
var isStrictMode = false;
|
|
|
var concurrentUpdatesByDefaultOverride = false;
|
|
|
var identifierPrefix = '';
|
|
|
var onRecoverableError = defaultOnRecoverableError;
|
|
|
var transitionCallbacks = null;
|
|
|
|
|
|
if (options !== null && options !== undefined) {
|
|
|
{
|
|
|
if (options.hydrate) {
|
|
|
warn('hydrate through createRoot is deprecated. Use ReactDOMClient.hydrateRoot(container, <App />) instead.');
|
|
|
} else {
|
|
|
if (typeof options === 'object' && options !== null && options.$$typeof === REACT_ELEMENT_TYPE) {
|
|
|
error('You passed a JSX element to createRoot. You probably meant to ' + 'call root.render instead. ' + 'Example usage:\n\n' + ' let root = createRoot(domContainer);\n' + ' root.render(<App />);');
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (options.unstable_strictMode === true) {
|
|
|
isStrictMode = true;
|
|
|
}
|
|
|
|
|
|
if (options.identifierPrefix !== undefined) {
|
|
|
identifierPrefix = options.identifierPrefix;
|
|
|
}
|
|
|
|
|
|
if (options.onRecoverableError !== undefined) {
|
|
|
onRecoverableError = options.onRecoverableError;
|
|
|
}
|
|
|
|
|
|
if (options.transitionCallbacks !== undefined) {
|
|
|
transitionCallbacks = options.transitionCallbacks;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var root = createContainer(container, ConcurrentRoot, null, isStrictMode, concurrentUpdatesByDefaultOverride, identifierPrefix, onRecoverableError);
|
|
|
markContainerAsRoot(root.current, container);
|
|
|
var rootContainerElement = container.nodeType === COMMENT_NODE ? container.parentNode : container;
|
|
|
listenToAllSupportedEvents(rootContainerElement);
|
|
|
return new ReactDOMRoot(root);
|
|
|
}
|
|
|
|
|
|
function ReactDOMHydrationRoot(internalRoot) {
|
|
|
this._internalRoot = internalRoot;
|
|
|
}
|
|
|
|
|
|
function scheduleHydration(target) {
|
|
|
if (target) {
|
|
|
queueExplicitHydrationTarget(target);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = scheduleHydration;
|
|
|
function hydrateRoot(container, initialChildren, options) {
|
|
|
if (!isValidContainer(container)) {
|
|
|
throw new Error('hydrateRoot(...): Target container is not a DOM element.');
|
|
|
}
|
|
|
|
|
|
warnIfReactDOMContainerInDEV(container);
|
|
|
|
|
|
{
|
|
|
if (initialChildren === undefined) {
|
|
|
error('Must provide initial children as second argument to hydrateRoot. ' + 'Example usage: hydrateRoot(domContainer, <App />)');
|
|
|
}
|
|
|
} // For now we reuse the whole bag of options since they contain
|
|
|
// the hydration callbacks.
|
|
|
|
|
|
|
|
|
var hydrationCallbacks = options != null ? options : null; // TODO: Delete this option
|
|
|
|
|
|
var mutableSources = options != null && options.hydratedSources || null;
|
|
|
var isStrictMode = false;
|
|
|
var concurrentUpdatesByDefaultOverride = false;
|
|
|
var identifierPrefix = '';
|
|
|
var onRecoverableError = defaultOnRecoverableError;
|
|
|
|
|
|
if (options !== null && options !== undefined) {
|
|
|
if (options.unstable_strictMode === true) {
|
|
|
isStrictMode = true;
|
|
|
}
|
|
|
|
|
|
if (options.identifierPrefix !== undefined) {
|
|
|
identifierPrefix = options.identifierPrefix;
|
|
|
}
|
|
|
|
|
|
if (options.onRecoverableError !== undefined) {
|
|
|
onRecoverableError = options.onRecoverableError;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var root = createHydrationContainer(initialChildren, null, container, ConcurrentRoot, hydrationCallbacks, isStrictMode, concurrentUpdatesByDefaultOverride, identifierPrefix, onRecoverableError);
|
|
|
markContainerAsRoot(root.current, container); // This can't be a comment node since hydration doesn't work on comment nodes anyway.
|
|
|
|
|
|
listenToAllSupportedEvents(container);
|
|
|
|
|
|
if (mutableSources) {
|
|
|
for (var i = 0; i < mutableSources.length; i++) {
|
|
|
var mutableSource = mutableSources[i];
|
|
|
registerMutableSourceForHydration(root, mutableSource);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return new ReactDOMHydrationRoot(root);
|
|
|
}
|
|
|
function isValidContainer(node) {
|
|
|
return !!(node && (node.nodeType === ELEMENT_NODE || node.nodeType === DOCUMENT_NODE || node.nodeType === DOCUMENT_FRAGMENT_NODE || !disableCommentsAsDOMContainers ));
|
|
|
} // TODO: Remove this function which also includes comment nodes.
|
|
|
// We only use it in places that are currently more relaxed.
|
|
|
|
|
|
function isValidContainerLegacy(node) {
|
|
|
return !!(node && (node.nodeType === ELEMENT_NODE || node.nodeType === DOCUMENT_NODE || node.nodeType === DOCUMENT_FRAGMENT_NODE || node.nodeType === COMMENT_NODE && node.nodeValue === ' react-mount-point-unstable '));
|
|
|
}
|
|
|
|
|
|
function warnIfReactDOMContainerInDEV(container) {
|
|
|
{
|
|
|
if (container.nodeType === ELEMENT_NODE && container.tagName && container.tagName.toUpperCase() === 'BODY') {
|
|
|
error('createRoot(): Creating roots directly with document.body is ' + 'discouraged, since its children are often manipulated by third-party ' + 'scripts and browser extensions. This may lead to subtle ' + 'reconciliation issues. Try using a container element created ' + 'for your app.');
|
|
|
}
|
|
|
|
|
|
if (isContainerMarkedAsRoot(container)) {
|
|
|
if (container._reactRootContainer) {
|
|
|
error('You are calling ReactDOMClient.createRoot() on a container that was previously ' + 'passed to ReactDOM.render(). This is not supported.');
|
|
|
} else {
|
|
|
error('You are calling ReactDOMClient.createRoot() on a container that ' + 'has already been passed to createRoot() before. Instead, call ' + 'root.render() on the existing root instead if you want to update it.');
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var ReactCurrentOwner$3 = ReactSharedInternals.ReactCurrentOwner;
|
|
|
var topLevelUpdateWarnings;
|
|
|
|
|
|
{
|
|
|
topLevelUpdateWarnings = function (container) {
|
|
|
if (container._reactRootContainer && container.nodeType !== COMMENT_NODE) {
|
|
|
var hostInstance = findHostInstanceWithNoPortals(container._reactRootContainer.current);
|
|
|
|
|
|
if (hostInstance) {
|
|
|
if (hostInstance.parentNode !== container) {
|
|
|
error('render(...): It looks like the React-rendered content of this ' + 'container was removed without using React. This is not ' + 'supported and will cause errors. Instead, call ' + 'ReactDOM.unmountComponentAtNode to empty a container.');
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var isRootRenderedBySomeReact = !!container._reactRootContainer;
|
|
|
var rootEl = getReactRootElementInContainer(container);
|
|
|
var hasNonRootReactChild = !!(rootEl && getInstanceFromNode(rootEl));
|
|
|
|
|
|
if (hasNonRootReactChild && !isRootRenderedBySomeReact) {
|
|
|
error('render(...): Replacing React-rendered children with a new root ' + 'component. If you intended to update the children of this node, ' + 'you should instead have the existing children update their state ' + 'and render the new components instead of calling ReactDOM.render.');
|
|
|
}
|
|
|
|
|
|
if (container.nodeType === ELEMENT_NODE && container.tagName && container.tagName.toUpperCase() === 'BODY') {
|
|
|
error('render(): Rendering components directly into document.body is ' + 'discouraged, since its children are often manipulated by third-party ' + 'scripts and browser extensions. This may lead to subtle ' + 'reconciliation issues. Try rendering into a container element created ' + 'for your app.');
|
|
|
}
|
|
|
};
|
|
|
}
|
|
|
|
|
|
function getReactRootElementInContainer(container) {
|
|
|
if (!container) {
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
if (container.nodeType === DOCUMENT_NODE) {
|
|
|
return container.documentElement;
|
|
|
} else {
|
|
|
return container.firstChild;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function noopOnRecoverableError() {// This isn't reachable because onRecoverableError isn't called in the
|
|
|
// legacy API.
|
|
|
}
|
|
|
|
|
|
function legacyCreateRootFromDOMContainer(container, initialChildren, parentComponent, callback, isHydrationContainer) {
|
|
|
if (isHydrationContainer) {
|
|
|
if (typeof callback === 'function') {
|
|
|
var originalCallback = callback;
|
|
|
|
|
|
callback = function () {
|
|
|
var instance = getPublicRootInstance(root);
|
|
|
originalCallback.call(instance);
|
|
|
};
|
|
|
}
|
|
|
|
|
|
var root = createHydrationContainer(initialChildren, callback, container, LegacyRoot, null, // hydrationCallbacks
|
|
|
false, // isStrictMode
|
|
|
false, // concurrentUpdatesByDefaultOverride,
|
|
|
'', // identifierPrefix
|
|
|
noopOnRecoverableError);
|
|
|
container._reactRootContainer = root;
|
|
|
markContainerAsRoot(root.current, container);
|
|
|
var rootContainerElement = container.nodeType === COMMENT_NODE ? container.parentNode : container;
|
|
|
listenToAllSupportedEvents(rootContainerElement);
|
|
|
flushSync();
|
|
|
return root;
|
|
|
} else {
|
|
|
// First clear any existing content.
|
|
|
var rootSibling;
|
|
|
|
|
|
while (rootSibling = container.lastChild) {
|
|
|
container.removeChild(rootSibling);
|
|
|
}
|
|
|
|
|
|
if (typeof callback === 'function') {
|
|
|
var _originalCallback = callback;
|
|
|
|
|
|
callback = function () {
|
|
|
var instance = getPublicRootInstance(_root);
|
|
|
|
|
|
_originalCallback.call(instance);
|
|
|
};
|
|
|
}
|
|
|
|
|
|
var _root = createContainer(container, LegacyRoot, null, // hydrationCallbacks
|
|
|
false, // isStrictMode
|
|
|
false, // concurrentUpdatesByDefaultOverride,
|
|
|
'', // identifierPrefix
|
|
|
noopOnRecoverableError);
|
|
|
|
|
|
container._reactRootContainer = _root;
|
|
|
markContainerAsRoot(_root.current, container);
|
|
|
|
|
|
var _rootContainerElement = container.nodeType === COMMENT_NODE ? container.parentNode : container;
|
|
|
|
|
|
listenToAllSupportedEvents(_rootContainerElement); // Initial mount should not be batched.
|
|
|
|
|
|
flushSync(function () {
|
|
|
updateContainer(initialChildren, _root, parentComponent, callback);
|
|
|
});
|
|
|
return _root;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function warnOnInvalidCallback$1(callback, callerName) {
|
|
|
{
|
|
|
if (callback !== null && typeof callback !== 'function') {
|
|
|
error('%s(...): Expected the last optional `callback` argument to be a ' + 'function. Instead received: %s.', callerName, callback);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function legacyRenderSubtreeIntoContainer(parentComponent, children, container, forceHydrate, callback) {
|
|
|
{
|
|
|
topLevelUpdateWarnings(container);
|
|
|
warnOnInvalidCallback$1(callback === undefined ? null : callback, 'render');
|
|
|
}
|
|
|
|
|
|
var maybeRoot = container._reactRootContainer;
|
|
|
var root;
|
|
|
|
|
|
if (!maybeRoot) {
|
|
|
// Initial mount
|
|
|
root = legacyCreateRootFromDOMContainer(container, children, parentComponent, callback, forceHydrate);
|
|
|
} else {
|
|
|
root = maybeRoot;
|
|
|
|
|
|
if (typeof callback === 'function') {
|
|
|
var originalCallback = callback;
|
|
|
|
|
|
callback = function () {
|
|
|
var instance = getPublicRootInstance(root);
|
|
|
originalCallback.call(instance);
|
|
|
};
|
|
|
} // Update
|
|
|
|
|
|
|
|
|
updateContainer(children, root, parentComponent, callback);
|
|
|
}
|
|
|
|
|
|
return getPublicRootInstance(root);
|
|
|
}
|
|
|
|
|
|
function findDOMNode(componentOrElement) {
|
|
|
{
|
|
|
var owner = ReactCurrentOwner$3.current;
|
|
|
|
|
|
if (owner !== null && owner.stateNode !== null) {
|
|
|
var warnedAboutRefsInRender = owner.stateNode._warnedAboutRefsInRender;
|
|
|
|
|
|
if (!warnedAboutRefsInRender) {
|
|
|
error('%s is accessing findDOMNode inside its render(). ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', getComponentNameFromType(owner.type) || 'A component');
|
|
|
}
|
|
|
|
|
|
owner.stateNode._warnedAboutRefsInRender = true;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (componentOrElement == null) {
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
if (componentOrElement.nodeType === ELEMENT_NODE) {
|
|
|
return componentOrElement;
|
|
|
}
|
|
|
|
|
|
{
|
|
|
return findHostInstanceWithWarning(componentOrElement, 'findDOMNode');
|
|
|
}
|
|
|
}
|
|
|
function hydrate(element, container, callback) {
|
|
|
{
|
|
|
error('ReactDOM.hydrate is no longer supported in React 18. Use hydrateRoot ' + 'instead. Until you switch to the new API, your app will behave as ' + "if it's running React 17. Learn " + 'more: https://reactjs.org/link/switch-to-createroot');
|
|
|
}
|
|
|
|
|
|
if (!isValidContainerLegacy(container)) {
|
|
|
throw new Error('Target container is not a DOM element.');
|
|
|
}
|
|
|
|
|
|
{
|
|
|
var isModernRoot = isContainerMarkedAsRoot(container) && container._reactRootContainer === undefined;
|
|
|
|
|
|
if (isModernRoot) {
|
|
|
error('You are calling ReactDOM.hydrate() on a container that was previously ' + 'passed to ReactDOMClient.createRoot(). This is not supported. ' + 'Did you mean to call hydrateRoot(container, element)?');
|
|
|
}
|
|
|
} // TODO: throw or warn if we couldn't hydrate?
|
|
|
|
|
|
|
|
|
return legacyRenderSubtreeIntoContainer(null, element, container, true, callback);
|
|
|
}
|
|
|
function render(element, container, callback) {
|
|
|
{
|
|
|
error('ReactDOM.render is no longer supported in React 18. Use createRoot ' + 'instead. Until you switch to the new API, your app will behave as ' + "if it's running React 17. Learn " + 'more: https://reactjs.org/link/switch-to-createroot');
|
|
|
}
|
|
|
|
|
|
if (!isValidContainerLegacy(container)) {
|
|
|
throw new Error('Target container is not a DOM element.');
|
|
|
}
|
|
|
|
|
|
{
|
|
|
var isModernRoot = isContainerMarkedAsRoot(container) && container._reactRootContainer === undefined;
|
|
|
|
|
|
if (isModernRoot) {
|
|
|
error('You are calling ReactDOM.render() on a container that was previously ' + 'passed to ReactDOMClient.createRoot(). This is not supported. ' + 'Did you mean to call root.render(element)?');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return legacyRenderSubtreeIntoContainer(null, element, container, false, callback);
|
|
|
}
|
|
|
function unstable_renderSubtreeIntoContainer(parentComponent, element, containerNode, callback) {
|
|
|
{
|
|
|
error('ReactDOM.unstable_renderSubtreeIntoContainer() is no longer supported ' + 'in React 18. Consider using a portal instead. Until you switch to ' + "the createRoot API, your app will behave as if it's running React " + '17. Learn more: https://reactjs.org/link/switch-to-createroot');
|
|
|
}
|
|
|
|
|
|
if (!isValidContainerLegacy(containerNode)) {
|
|
|
throw new Error('Target container is not a DOM element.');
|
|
|
}
|
|
|
|
|
|
if (parentComponent == null || !has(parentComponent)) {
|
|
|
throw new Error('parentComponent must be a valid React Component');
|
|
|
}
|
|
|
|
|
|
return legacyRenderSubtreeIntoContainer(parentComponent, element, containerNode, false, callback);
|
|
|
}
|
|
|
function unmountComponentAtNode(container) {
|
|
|
if (!isValidContainerLegacy(container)) {
|
|
|
throw new Error('unmountComponentAtNode(...): Target container is not a DOM element.');
|
|
|
}
|
|
|
|
|
|
{
|
|
|
var isModernRoot = isContainerMarkedAsRoot(container) && container._reactRootContainer === undefined;
|
|
|
|
|
|
if (isModernRoot) {
|
|
|
error('You are calling ReactDOM.unmountComponentAtNode() on a container that was previously ' + 'passed to ReactDOMClient.createRoot(). This is not supported. Did you mean to call root.unmount()?');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (container._reactRootContainer) {
|
|
|
{
|
|
|
var rootEl = getReactRootElementInContainer(container);
|
|
|
var renderedByDifferentReact = rootEl && !getInstanceFromNode(rootEl);
|
|
|
|
|
|
if (renderedByDifferentReact) {
|
|
|
error("unmountComponentAtNode(): The node you're attempting to unmount " + 'was rendered by another copy of React.');
|
|
|
}
|
|
|
} // Unmount should not be batched.
|
|
|
|
|
|
|
|
|
flushSync(function () {
|
|
|
legacyRenderSubtreeIntoContainer(null, null, container, false, function () {
|
|
|
// $FlowFixMe This should probably use `delete container._reactRootContainer`
|
|
|
container._reactRootContainer = null;
|
|
|
unmarkContainerAsRoot(container);
|
|
|
});
|
|
|
}); // If you call unmountComponentAtNode twice in quick succession, you'll
|
|
|
// get `true` twice. That's probably fine?
|
|
|
|
|
|
return true;
|
|
|
} else {
|
|
|
{
|
|
|
var _rootEl = getReactRootElementInContainer(container);
|
|
|
|
|
|
var hasNonRootReactChild = !!(_rootEl && getInstanceFromNode(_rootEl)); // Check if the container itself is a React root node.
|
|
|
|
|
|
var isContainerReactRoot = container.nodeType === ELEMENT_NODE && isValidContainerLegacy(container.parentNode) && !!container.parentNode._reactRootContainer;
|
|
|
|
|
|
if (hasNonRootReactChild) {
|
|
|
error("unmountComponentAtNode(): The node you're attempting to unmount " + 'was rendered by React and is not a top-level container. %s', isContainerReactRoot ? 'You may have accidentally passed in a React root node instead ' + 'of its container.' : 'Instead, have the parent component update its state and ' + 'rerender in order to remove this component.');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
setAttemptSynchronousHydration(attemptSynchronousHydration$1);
|
|
|
setAttemptContinuousHydration(attemptContinuousHydration$1);
|
|
|
setAttemptHydrationAtCurrentPriority(attemptHydrationAtCurrentPriority$1);
|
|
|
setGetCurrentUpdatePriority(getCurrentUpdatePriority);
|
|
|
setAttemptHydrationAtPriority(runWithPriority);
|
|
|
|
|
|
{
|
|
|
if (typeof Map !== 'function' || // $FlowIssue Flow incorrectly thinks Map has no prototype
|
|
|
Map.prototype == null || typeof Map.prototype.forEach !== 'function' || typeof Set !== 'function' || // $FlowIssue Flow incorrectly thinks Set has no prototype
|
|
|
Set.prototype == null || typeof Set.prototype.clear !== 'function' || typeof Set.prototype.forEach !== 'function') {
|
|
|
error('React depends on Map and Set built-in types. Make sure that you load a ' + 'polyfill in older browsers. https://reactjs.org/link/react-polyfills');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
setRestoreImplementation(restoreControlledState$3);
|
|
|
setBatchingImplementation(batchedUpdates$1, discreteUpdates, flushSync);
|
|
|
|
|
|
function createPortal$1(children, container) {
|
|
|
var key = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
|
|
|
|
|
|
if (!isValidContainer(container)) {
|
|
|
throw new Error('Target container is not a DOM element.');
|
|
|
} // TODO: pass ReactDOM portal implementation as third argument
|
|
|
// $FlowFixMe The Flow type is opaque but there's no way to actually create it.
|
|
|
|
|
|
|
|
|
return createPortal(children, container, null, key);
|
|
|
}
|
|
|
|
|
|
function renderSubtreeIntoContainer(parentComponent, element, containerNode, callback) {
|
|
|
return unstable_renderSubtreeIntoContainer(parentComponent, element, containerNode, callback);
|
|
|
}
|
|
|
|
|
|
var Internals = {
|
|
|
usingClientEntryPoint: false,
|
|
|
// Keep in sync with ReactTestUtils.js.
|
|
|
// This is an array for better minification.
|
|
|
Events: [getInstanceFromNode, getNodeFromInstance, getFiberCurrentPropsFromNode, enqueueStateRestore, restoreStateIfNeeded, batchedUpdates$1]
|
|
|
};
|
|
|
|
|
|
function createRoot$1(container, options) {
|
|
|
{
|
|
|
if (!Internals.usingClientEntryPoint && !false) {
|
|
|
error('You are importing createRoot from "react-dom" which is not supported. ' + 'You should instead import it from "react-dom/client".');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return createRoot(container, options);
|
|
|
}
|
|
|
|
|
|
function hydrateRoot$1(container, initialChildren, options) {
|
|
|
{
|
|
|
if (!Internals.usingClientEntryPoint && !false) {
|
|
|
error('You are importing hydrateRoot from "react-dom" which is not supported. ' + 'You should instead import it from "react-dom/client".');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return hydrateRoot(container, initialChildren, options);
|
|
|
} // Overload the definition to the two valid signatures.
|
|
|
// Warning, this opts-out of checking the function body.
|
|
|
|
|
|
|
|
|
// eslint-disable-next-line no-redeclare
|
|
|
function flushSync$1(fn) {
|
|
|
{
|
|
|
if (isAlreadyRendering()) {
|
|
|
error('flushSync was called from inside a lifecycle method. React cannot ' + 'flush when React is already rendering. Consider moving this call to ' + 'a scheduler task or micro task.');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return flushSync(fn);
|
|
|
}
|
|
|
var foundDevTools = injectIntoDevTools({
|
|
|
findFiberByHostInstance: getClosestInstanceFromNode,
|
|
|
bundleType: 1 ,
|
|
|
version: ReactVersion,
|
|
|
rendererPackageName: 'react-dom'
|
|
|
});
|
|
|
|
|
|
{
|
|
|
if (!foundDevTools && canUseDOM && window.top === window.self) {
|
|
|
// If we're in Chrome or Firefox, provide a download link if not installed.
|
|
|
if (navigator.userAgent.indexOf('Chrome') > -1 && navigator.userAgent.indexOf('Edge') === -1 || navigator.userAgent.indexOf('Firefox') > -1) {
|
|
|
var protocol = window.location.protocol; // Don't warn in exotic cases like chrome-extension://.
|
|
|
|
|
|
if (/^(https?|file):$/.test(protocol)) {
|
|
|
// eslint-disable-next-line react-internal/no-production-logging
|
|
|
console.info('%cDownload the React DevTools ' + 'for a better development experience: ' + 'https://reactjs.org/link/react-devtools' + (protocol === 'file:' ? '\nYou might need to use a local HTTP server (instead of file://): ' + 'https://reactjs.org/link/react-devtools-faq' : ''), 'font-weight:bold');
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = Internals;
|
|
|
exports.createPortal = createPortal$1;
|
|
|
exports.createRoot = createRoot$1;
|
|
|
exports.findDOMNode = findDOMNode;
|
|
|
exports.flushSync = flushSync$1;
|
|
|
exports.hydrate = hydrate;
|
|
|
exports.hydrateRoot = hydrateRoot$1;
|
|
|
exports.render = render;
|
|
|
exports.unmountComponentAtNode = unmountComponentAtNode;
|
|
|
exports.unstable_batchedUpdates = batchedUpdates$1;
|
|
|
exports.unstable_renderSubtreeIntoContainer = renderSubtreeIntoContainer;
|
|
|
exports.version = ReactVersion;
|
|
|
/* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */
|
|
|
if (
|
|
|
typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&
|
|
|
typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop ===
|
|
|
'function'
|
|
|
) {
|
|
|
__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error());
|
|
|
}
|
|
|
|
|
|
})();
|
|
|
}
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/react-dom/index.js":
|
|
|
/*!*****************************************!*\
|
|
|
!*** ./node_modules/react-dom/index.js ***!
|
|
|
\*****************************************/
|
|
|
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
function checkDCE() {
|
|
|
/* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */
|
|
|
if (
|
|
|
typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||
|
|
|
typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'
|
|
|
) {
|
|
|
return;
|
|
|
}
|
|
|
if (true) {
|
|
|
// This branch is unreachable because this function is only called
|
|
|
// in production, but the condition is true only in development.
|
|
|
// Therefore if the branch is still here, dead code elimination wasn't
|
|
|
// properly applied.
|
|
|
// Don't change the message. React DevTools relies on it. Also make sure
|
|
|
// this message doesn't occur elsewhere in this function, or it will cause
|
|
|
// a false positive.
|
|
|
throw new Error('^_^');
|
|
|
}
|
|
|
try {
|
|
|
// Verify that the code above has been dead code eliminated (DCE'd).
|
|
|
__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);
|
|
|
} catch (err) {
|
|
|
// DevTools shouldn't crash React, no matter what.
|
|
|
// We should still report in case we break this code.
|
|
|
console.error(err);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (false) {} else {
|
|
|
module.exports = __webpack_require__(/*! ./cjs/react-dom.development.js */ "./node_modules/react-dom/cjs/react-dom.development.js");
|
|
|
}
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/react-is/cjs/react-is.development.js":
|
|
|
/*!***********************************************************!*\
|
|
|
!*** ./node_modules/react-is/cjs/react-is.development.js ***!
|
|
|
\***********************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports) => {
|
|
|
|
|
|
"use strict";
|
|
|
/** @license React v16.13.1
|
|
|
* react-is.development.js
|
|
|
*
|
|
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
|
*
|
|
|
* This source code is licensed under the MIT license found in the
|
|
|
* LICENSE file in the root directory of this source tree.
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (true) {
|
|
|
(function() {
|
|
|
'use strict';
|
|
|
|
|
|
// The Symbol used to tag the ReactElement-like types. If there is no native Symbol
|
|
|
// nor polyfill, then a plain number is used for performance.
|
|
|
var hasSymbol = typeof Symbol === 'function' && Symbol.for;
|
|
|
var REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;
|
|
|
var REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;
|
|
|
var REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;
|
|
|
var REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;
|
|
|
var REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;
|
|
|
var REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;
|
|
|
var REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary
|
|
|
// (unstable) APIs that have been removed. Can we remove the symbols?
|
|
|
|
|
|
var REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol.for('react.async_mode') : 0xeacf;
|
|
|
var REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;
|
|
|
var REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;
|
|
|
var REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;
|
|
|
var REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8;
|
|
|
var REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;
|
|
|
var REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;
|
|
|
var REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9;
|
|
|
var REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5;
|
|
|
var REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6;
|
|
|
var REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7;
|
|
|
|
|
|
function isValidElementType(type) {
|
|
|
return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill.
|
|
|
type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE || type.$$typeof === REACT_SCOPE_TYPE || type.$$typeof === REACT_BLOCK_TYPE);
|
|
|
}
|
|
|
|
|
|
function typeOf(object) {
|
|
|
if (typeof object === 'object' && object !== null) {
|
|
|
var $$typeof = object.$$typeof;
|
|
|
|
|
|
switch ($$typeof) {
|
|
|
case REACT_ELEMENT_TYPE:
|
|
|
var type = object.type;
|
|
|
|
|
|
switch (type) {
|
|
|
case REACT_ASYNC_MODE_TYPE:
|
|
|
case REACT_CONCURRENT_MODE_TYPE:
|
|
|
case REACT_FRAGMENT_TYPE:
|
|
|
case REACT_PROFILER_TYPE:
|
|
|
case REACT_STRICT_MODE_TYPE:
|
|
|
case REACT_SUSPENSE_TYPE:
|
|
|
return type;
|
|
|
|
|
|
default:
|
|
|
var $$typeofType = type && type.$$typeof;
|
|
|
|
|
|
switch ($$typeofType) {
|
|
|
case REACT_CONTEXT_TYPE:
|
|
|
case REACT_FORWARD_REF_TYPE:
|
|
|
case REACT_LAZY_TYPE:
|
|
|
case REACT_MEMO_TYPE:
|
|
|
case REACT_PROVIDER_TYPE:
|
|
|
return $$typeofType;
|
|
|
|
|
|
default:
|
|
|
return $$typeof;
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
case REACT_PORTAL_TYPE:
|
|
|
return $$typeof;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return undefined;
|
|
|
} // AsyncMode is deprecated along with isAsyncMode
|
|
|
|
|
|
var AsyncMode = REACT_ASYNC_MODE_TYPE;
|
|
|
var ConcurrentMode = REACT_CONCURRENT_MODE_TYPE;
|
|
|
var ContextConsumer = REACT_CONTEXT_TYPE;
|
|
|
var ContextProvider = REACT_PROVIDER_TYPE;
|
|
|
var Element = REACT_ELEMENT_TYPE;
|
|
|
var ForwardRef = REACT_FORWARD_REF_TYPE;
|
|
|
var Fragment = REACT_FRAGMENT_TYPE;
|
|
|
var Lazy = REACT_LAZY_TYPE;
|
|
|
var Memo = REACT_MEMO_TYPE;
|
|
|
var Portal = REACT_PORTAL_TYPE;
|
|
|
var Profiler = REACT_PROFILER_TYPE;
|
|
|
var StrictMode = REACT_STRICT_MODE_TYPE;
|
|
|
var Suspense = REACT_SUSPENSE_TYPE;
|
|
|
var hasWarnedAboutDeprecatedIsAsyncMode = false; // AsyncMode should be deprecated
|
|
|
|
|
|
function isAsyncMode(object) {
|
|
|
{
|
|
|
if (!hasWarnedAboutDeprecatedIsAsyncMode) {
|
|
|
hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint
|
|
|
|
|
|
console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactIs.isConcurrentMode() instead. It has the exact same API.');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE;
|
|
|
}
|
|
|
function isConcurrentMode(object) {
|
|
|
return typeOf(object) === REACT_CONCURRENT_MODE_TYPE;
|
|
|
}
|
|
|
function isContextConsumer(object) {
|
|
|
return typeOf(object) === REACT_CONTEXT_TYPE;
|
|
|
}
|
|
|
function isContextProvider(object) {
|
|
|
return typeOf(object) === REACT_PROVIDER_TYPE;
|
|
|
}
|
|
|
function isElement(object) {
|
|
|
return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;
|
|
|
}
|
|
|
function isForwardRef(object) {
|
|
|
return typeOf(object) === REACT_FORWARD_REF_TYPE;
|
|
|
}
|
|
|
function isFragment(object) {
|
|
|
return typeOf(object) === REACT_FRAGMENT_TYPE;
|
|
|
}
|
|
|
function isLazy(object) {
|
|
|
return typeOf(object) === REACT_LAZY_TYPE;
|
|
|
}
|
|
|
function isMemo(object) {
|
|
|
return typeOf(object) === REACT_MEMO_TYPE;
|
|
|
}
|
|
|
function isPortal(object) {
|
|
|
return typeOf(object) === REACT_PORTAL_TYPE;
|
|
|
}
|
|
|
function isProfiler(object) {
|
|
|
return typeOf(object) === REACT_PROFILER_TYPE;
|
|
|
}
|
|
|
function isStrictMode(object) {
|
|
|
return typeOf(object) === REACT_STRICT_MODE_TYPE;
|
|
|
}
|
|
|
function isSuspense(object) {
|
|
|
return typeOf(object) === REACT_SUSPENSE_TYPE;
|
|
|
}
|
|
|
|
|
|
exports.AsyncMode = AsyncMode;
|
|
|
exports.ConcurrentMode = ConcurrentMode;
|
|
|
exports.ContextConsumer = ContextConsumer;
|
|
|
exports.ContextProvider = ContextProvider;
|
|
|
exports.Element = Element;
|
|
|
exports.ForwardRef = ForwardRef;
|
|
|
exports.Fragment = Fragment;
|
|
|
exports.Lazy = Lazy;
|
|
|
exports.Memo = Memo;
|
|
|
exports.Portal = Portal;
|
|
|
exports.Profiler = Profiler;
|
|
|
exports.StrictMode = StrictMode;
|
|
|
exports.Suspense = Suspense;
|
|
|
exports.isAsyncMode = isAsyncMode;
|
|
|
exports.isConcurrentMode = isConcurrentMode;
|
|
|
exports.isContextConsumer = isContextConsumer;
|
|
|
exports.isContextProvider = isContextProvider;
|
|
|
exports.isElement = isElement;
|
|
|
exports.isForwardRef = isForwardRef;
|
|
|
exports.isFragment = isFragment;
|
|
|
exports.isLazy = isLazy;
|
|
|
exports.isMemo = isMemo;
|
|
|
exports.isPortal = isPortal;
|
|
|
exports.isProfiler = isProfiler;
|
|
|
exports.isStrictMode = isStrictMode;
|
|
|
exports.isSuspense = isSuspense;
|
|
|
exports.isValidElementType = isValidElementType;
|
|
|
exports.typeOf = typeOf;
|
|
|
})();
|
|
|
}
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/react-is/index.js":
|
|
|
/*!****************************************!*\
|
|
|
!*** ./node_modules/react-is/index.js ***!
|
|
|
\****************************************/
|
|
|
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
if (false) {} else {
|
|
|
module.exports = __webpack_require__(/*! ./cjs/react-is.development.js */ "./node_modules/react-is/cjs/react-is.development.js");
|
|
|
}
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/react/cjs/react.development.js":
|
|
|
/*!*****************************************************!*\
|
|
|
!*** ./node_modules/react/cjs/react.development.js ***!
|
|
|
\*****************************************************/
|
|
|
/***/ ((module, exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
/* module decorator */ module = __webpack_require__.nmd(module);
|
|
|
/**
|
|
|
* @license React
|
|
|
* react.development.js
|
|
|
*
|
|
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
|
*
|
|
|
* This source code is licensed under the MIT license found in the
|
|
|
* LICENSE file in the root directory of this source tree.
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
if (true) {
|
|
|
(function() {
|
|
|
|
|
|
'use strict';
|
|
|
|
|
|
/* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */
|
|
|
if (
|
|
|
typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&
|
|
|
typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart ===
|
|
|
'function'
|
|
|
) {
|
|
|
__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error());
|
|
|
}
|
|
|
var ReactVersion = '18.2.0';
|
|
|
|
|
|
// ATTENTION
|
|
|
// When adding new symbols to this file,
|
|
|
// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'
|
|
|
// The Symbol used to tag the ReactElement-like types.
|
|
|
var REACT_ELEMENT_TYPE = Symbol.for('react.element');
|
|
|
var REACT_PORTAL_TYPE = Symbol.for('react.portal');
|
|
|
var REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');
|
|
|
var REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode');
|
|
|
var REACT_PROFILER_TYPE = Symbol.for('react.profiler');
|
|
|
var REACT_PROVIDER_TYPE = Symbol.for('react.provider');
|
|
|
var REACT_CONTEXT_TYPE = Symbol.for('react.context');
|
|
|
var REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');
|
|
|
var REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');
|
|
|
var REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list');
|
|
|
var REACT_MEMO_TYPE = Symbol.for('react.memo');
|
|
|
var REACT_LAZY_TYPE = Symbol.for('react.lazy');
|
|
|
var REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen');
|
|
|
var MAYBE_ITERATOR_SYMBOL = Symbol.iterator;
|
|
|
var FAUX_ITERATOR_SYMBOL = '@@iterator';
|
|
|
function getIteratorFn(maybeIterable) {
|
|
|
if (maybeIterable === null || typeof maybeIterable !== 'object') {
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];
|
|
|
|
|
|
if (typeof maybeIterator === 'function') {
|
|
|
return maybeIterator;
|
|
|
}
|
|
|
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Keeps track of the current dispatcher.
|
|
|
*/
|
|
|
var ReactCurrentDispatcher = {
|
|
|
/**
|
|
|
* @internal
|
|
|
* @type {ReactComponent}
|
|
|
*/
|
|
|
current: null
|
|
|
};
|
|
|
|
|
|
/**
|
|
|
* Keeps track of the current batch's configuration such as how long an update
|
|
|
* should suspend for if it needs to.
|
|
|
*/
|
|
|
var ReactCurrentBatchConfig = {
|
|
|
transition: null
|
|
|
};
|
|
|
|
|
|
var ReactCurrentActQueue = {
|
|
|
current: null,
|
|
|
// Used to reproduce behavior of `batchedUpdates` in legacy mode.
|
|
|
isBatchingLegacy: false,
|
|
|
didScheduleLegacyUpdate: false
|
|
|
};
|
|
|
|
|
|
/**
|
|
|
* Keeps track of the current owner.
|
|
|
*
|
|
|
* The current owner is the component who should own any components that are
|
|
|
* currently being constructed.
|
|
|
*/
|
|
|
var ReactCurrentOwner = {
|
|
|
/**
|
|
|
* @internal
|
|
|
* @type {ReactComponent}
|
|
|
*/
|
|
|
current: null
|
|
|
};
|
|
|
|
|
|
var ReactDebugCurrentFrame = {};
|
|
|
var currentExtraStackFrame = null;
|
|
|
function setExtraStackFrame(stack) {
|
|
|
{
|
|
|
currentExtraStackFrame = stack;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
{
|
|
|
ReactDebugCurrentFrame.setExtraStackFrame = function (stack) {
|
|
|
{
|
|
|
currentExtraStackFrame = stack;
|
|
|
}
|
|
|
}; // Stack implementation injected by the current renderer.
|
|
|
|
|
|
|
|
|
ReactDebugCurrentFrame.getCurrentStack = null;
|
|
|
|
|
|
ReactDebugCurrentFrame.getStackAddendum = function () {
|
|
|
var stack = ''; // Add an extra top frame while an element is being validated
|
|
|
|
|
|
if (currentExtraStackFrame) {
|
|
|
stack += currentExtraStackFrame;
|
|
|
} // Delegate to the injected renderer-specific implementation
|
|
|
|
|
|
|
|
|
var impl = ReactDebugCurrentFrame.getCurrentStack;
|
|
|
|
|
|
if (impl) {
|
|
|
stack += impl() || '';
|
|
|
}
|
|
|
|
|
|
return stack;
|
|
|
};
|
|
|
}
|
|
|
|
|
|
// -----------------------------------------------------------------------------
|
|
|
|
|
|
var enableScopeAPI = false; // Experimental Create Event Handle API.
|
|
|
var enableCacheElement = false;
|
|
|
var enableTransitionTracing = false; // No known bugs, but needs performance testing
|
|
|
|
|
|
var enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber
|
|
|
// stuff. Intended to enable React core members to more easily debug scheduling
|
|
|
// issues in DEV builds.
|
|
|
|
|
|
var enableDebugTracing = false; // Track which Fiber(s) schedule render work.
|
|
|
|
|
|
var ReactSharedInternals = {
|
|
|
ReactCurrentDispatcher: ReactCurrentDispatcher,
|
|
|
ReactCurrentBatchConfig: ReactCurrentBatchConfig,
|
|
|
ReactCurrentOwner: ReactCurrentOwner
|
|
|
};
|
|
|
|
|
|
{
|
|
|
ReactSharedInternals.ReactDebugCurrentFrame = ReactDebugCurrentFrame;
|
|
|
ReactSharedInternals.ReactCurrentActQueue = ReactCurrentActQueue;
|
|
|
}
|
|
|
|
|
|
// by calls to these methods by a Babel plugin.
|
|
|
//
|
|
|
// In PROD (or in packages without access to React internals),
|
|
|
// they are left as they are instead.
|
|
|
|
|
|
function warn(format) {
|
|
|
{
|
|
|
{
|
|
|
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
|
|
args[_key - 1] = arguments[_key];
|
|
|
}
|
|
|
|
|
|
printWarning('warn', format, args);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
function error(format) {
|
|
|
{
|
|
|
{
|
|
|
for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
|
|
|
args[_key2 - 1] = arguments[_key2];
|
|
|
}
|
|
|
|
|
|
printWarning('error', format, args);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function printWarning(level, format, args) {
|
|
|
// When changing this logic, you might want to also
|
|
|
// update consoleWithStackDev.www.js as well.
|
|
|
{
|
|
|
var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;
|
|
|
var stack = ReactDebugCurrentFrame.getStackAddendum();
|
|
|
|
|
|
if (stack !== '') {
|
|
|
format += '%s';
|
|
|
args = args.concat([stack]);
|
|
|
} // eslint-disable-next-line react-internal/safe-string-coercion
|
|
|
|
|
|
|
|
|
var argsWithFormat = args.map(function (item) {
|
|
|
return String(item);
|
|
|
}); // Careful: RN currently depends on this prefix
|
|
|
|
|
|
argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it
|
|
|
// breaks IE9: https://github.com/facebook/react/issues/13610
|
|
|
// eslint-disable-next-line react-internal/no-production-logging
|
|
|
|
|
|
Function.prototype.apply.call(console[level], console, argsWithFormat);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var didWarnStateUpdateForUnmountedComponent = {};
|
|
|
|
|
|
function warnNoop(publicInstance, callerName) {
|
|
|
{
|
|
|
var _constructor = publicInstance.constructor;
|
|
|
var componentName = _constructor && (_constructor.displayName || _constructor.name) || 'ReactClass';
|
|
|
var warningKey = componentName + "." + callerName;
|
|
|
|
|
|
if (didWarnStateUpdateForUnmountedComponent[warningKey]) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
error("Can't call %s on a component that is not yet mounted. " + 'This is a no-op, but it might indicate a bug in your application. ' + 'Instead, assign to `this.state` directly or define a `state = {};` ' + 'class property with the desired state in the %s component.', callerName, componentName);
|
|
|
|
|
|
didWarnStateUpdateForUnmountedComponent[warningKey] = true;
|
|
|
}
|
|
|
}
|
|
|
/**
|
|
|
* This is the abstract API for an update queue.
|
|
|
*/
|
|
|
|
|
|
|
|
|
var ReactNoopUpdateQueue = {
|
|
|
/**
|
|
|
* Checks whether or not this composite component is mounted.
|
|
|
* @param {ReactClass} publicInstance The instance we want to test.
|
|
|
* @return {boolean} True if mounted, false otherwise.
|
|
|
* @protected
|
|
|
* @final
|
|
|
*/
|
|
|
isMounted: function (publicInstance) {
|
|
|
return false;
|
|
|
},
|
|
|
|
|
|
/**
|
|
|
* Forces an update. This should only be invoked when it is known with
|
|
|
* certainty that we are **not** in a DOM transaction.
|
|
|
*
|
|
|
* You may want to call this when you know that some deeper aspect of the
|
|
|
* component's state has changed but `setState` was not called.
|
|
|
*
|
|
|
* This will not invoke `shouldComponentUpdate`, but it will invoke
|
|
|
* `componentWillUpdate` and `componentDidUpdate`.
|
|
|
*
|
|
|
* @param {ReactClass} publicInstance The instance that should rerender.
|
|
|
* @param {?function} callback Called after component is updated.
|
|
|
* @param {?string} callerName name of the calling function in the public API.
|
|
|
* @internal
|
|
|
*/
|
|
|
enqueueForceUpdate: function (publicInstance, callback, callerName) {
|
|
|
warnNoop(publicInstance, 'forceUpdate');
|
|
|
},
|
|
|
|
|
|
/**
|
|
|
* Replaces all of the state. Always use this or `setState` to mutate state.
|
|
|
* You should treat `this.state` as immutable.
|
|
|
*
|
|
|
* There is no guarantee that `this.state` will be immediately updated, so
|
|
|
* accessing `this.state` after calling this method may return the old value.
|
|
|
*
|
|
|
* @param {ReactClass} publicInstance The instance that should rerender.
|
|
|
* @param {object} completeState Next state.
|
|
|
* @param {?function} callback Called after component is updated.
|
|
|
* @param {?string} callerName name of the calling function in the public API.
|
|
|
* @internal
|
|
|
*/
|
|
|
enqueueReplaceState: function (publicInstance, completeState, callback, callerName) {
|
|
|
warnNoop(publicInstance, 'replaceState');
|
|
|
},
|
|
|
|
|
|
/**
|
|
|
* Sets a subset of the state. This only exists because _pendingState is
|
|
|
* internal. This provides a merging strategy that is not available to deep
|
|
|
* properties which is confusing. TODO: Expose pendingState or don't use it
|
|
|
* during the merge.
|
|
|
*
|
|
|
* @param {ReactClass} publicInstance The instance that should rerender.
|
|
|
* @param {object} partialState Next partial state to be merged with state.
|
|
|
* @param {?function} callback Called after component is updated.
|
|
|
* @param {?string} Name of the calling function in the public API.
|
|
|
* @internal
|
|
|
*/
|
|
|
enqueueSetState: function (publicInstance, partialState, callback, callerName) {
|
|
|
warnNoop(publicInstance, 'setState');
|
|
|
}
|
|
|
};
|
|
|
|
|
|
var assign = Object.assign;
|
|
|
|
|
|
var emptyObject = {};
|
|
|
|
|
|
{
|
|
|
Object.freeze(emptyObject);
|
|
|
}
|
|
|
/**
|
|
|
* Base class helpers for the updating state of a component.
|
|
|
*/
|
|
|
|
|
|
|
|
|
function Component(props, context, updater) {
|
|
|
this.props = props;
|
|
|
this.context = context; // If a component has string refs, we will assign a different object later.
|
|
|
|
|
|
this.refs = emptyObject; // We initialize the default updater but the real one gets injected by the
|
|
|
// renderer.
|
|
|
|
|
|
this.updater = updater || ReactNoopUpdateQueue;
|
|
|
}
|
|
|
|
|
|
Component.prototype.isReactComponent = {};
|
|
|
/**
|
|
|
* Sets a subset of the state. Always use this to mutate
|
|
|
* state. You should treat `this.state` as immutable.
|
|
|
*
|
|
|
* There is no guarantee that `this.state` will be immediately updated, so
|
|
|
* accessing `this.state` after calling this method may return the old value.
|
|
|
*
|
|
|
* There is no guarantee that calls to `setState` will run synchronously,
|
|
|
* as they may eventually be batched together. You can provide an optional
|
|
|
* callback that will be executed when the call to setState is actually
|
|
|
* completed.
|
|
|
*
|
|
|
* When a function is provided to setState, it will be called at some point in
|
|
|
* the future (not synchronously). It will be called with the up to date
|
|
|
* component arguments (state, props, context). These values can be different
|
|
|
* from this.* because your function may be called after receiveProps but before
|
|
|
* shouldComponentUpdate, and this new state, props, and context will not yet be
|
|
|
* assigned to this.
|
|
|
*
|
|
|
* @param {object|function} partialState Next partial state or function to
|
|
|
* produce next partial state to be merged with current state.
|
|
|
* @param {?function} callback Called after state is updated.
|
|
|
* @final
|
|
|
* @protected
|
|
|
*/
|
|
|
|
|
|
Component.prototype.setState = function (partialState, callback) {
|
|
|
if (typeof partialState !== 'object' && typeof partialState !== 'function' && partialState != null) {
|
|
|
throw new Error('setState(...): takes an object of state variables to update or a ' + 'function which returns an object of state variables.');
|
|
|
}
|
|
|
|
|
|
this.updater.enqueueSetState(this, partialState, callback, 'setState');
|
|
|
};
|
|
|
/**
|
|
|
* Forces an update. This should only be invoked when it is known with
|
|
|
* certainty that we are **not** in a DOM transaction.
|
|
|
*
|
|
|
* You may want to call this when you know that some deeper aspect of the
|
|
|
* component's state has changed but `setState` was not called.
|
|
|
*
|
|
|
* This will not invoke `shouldComponentUpdate`, but it will invoke
|
|
|
* `componentWillUpdate` and `componentDidUpdate`.
|
|
|
*
|
|
|
* @param {?function} callback Called after update is complete.
|
|
|
* @final
|
|
|
* @protected
|
|
|
*/
|
|
|
|
|
|
|
|
|
Component.prototype.forceUpdate = function (callback) {
|
|
|
this.updater.enqueueForceUpdate(this, callback, 'forceUpdate');
|
|
|
};
|
|
|
/**
|
|
|
* Deprecated APIs. These APIs used to exist on classic React classes but since
|
|
|
* we would like to deprecate them, we're not going to move them over to this
|
|
|
* modern base class. Instead, we define a getter that warns if it's accessed.
|
|
|
*/
|
|
|
|
|
|
|
|
|
{
|
|
|
var deprecatedAPIs = {
|
|
|
isMounted: ['isMounted', 'Instead, make sure to clean up subscriptions and pending requests in ' + 'componentWillUnmount to prevent memory leaks.'],
|
|
|
replaceState: ['replaceState', 'Refactor your code to use setState instead (see ' + 'https://github.com/facebook/react/issues/3236).']
|
|
|
};
|
|
|
|
|
|
var defineDeprecationWarning = function (methodName, info) {
|
|
|
Object.defineProperty(Component.prototype, methodName, {
|
|
|
get: function () {
|
|
|
warn('%s(...) is deprecated in plain JavaScript React classes. %s', info[0], info[1]);
|
|
|
|
|
|
return undefined;
|
|
|
}
|
|
|
});
|
|
|
};
|
|
|
|
|
|
for (var fnName in deprecatedAPIs) {
|
|
|
if (deprecatedAPIs.hasOwnProperty(fnName)) {
|
|
|
defineDeprecationWarning(fnName, deprecatedAPIs[fnName]);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function ComponentDummy() {}
|
|
|
|
|
|
ComponentDummy.prototype = Component.prototype;
|
|
|
/**
|
|
|
* Convenience component with default shallow equality check for sCU.
|
|
|
*/
|
|
|
|
|
|
function PureComponent(props, context, updater) {
|
|
|
this.props = props;
|
|
|
this.context = context; // If a component has string refs, we will assign a different object later.
|
|
|
|
|
|
this.refs = emptyObject;
|
|
|
this.updater = updater || ReactNoopUpdateQueue;
|
|
|
}
|
|
|
|
|
|
var pureComponentPrototype = PureComponent.prototype = new ComponentDummy();
|
|
|
pureComponentPrototype.constructor = PureComponent; // Avoid an extra prototype jump for these methods.
|
|
|
|
|
|
assign(pureComponentPrototype, Component.prototype);
|
|
|
pureComponentPrototype.isPureReactComponent = true;
|
|
|
|
|
|
// an immutable object with a single mutable value
|
|
|
function createRef() {
|
|
|
var refObject = {
|
|
|
current: null
|
|
|
};
|
|
|
|
|
|
{
|
|
|
Object.seal(refObject);
|
|
|
}
|
|
|
|
|
|
return refObject;
|
|
|
}
|
|
|
|
|
|
var isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare
|
|
|
|
|
|
function isArray(a) {
|
|
|
return isArrayImpl(a);
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* The `'' + value` pattern (used in in perf-sensitive code) throws for Symbol
|
|
|
* and Temporal.* types. See https://github.com/facebook/react/pull/22064.
|
|
|
*
|
|
|
* The functions in this module will throw an easier-to-understand,
|
|
|
* easier-to-debug exception with a clear errors message message explaining the
|
|
|
* problem. (Instead of a confusing exception thrown inside the implementation
|
|
|
* of the `value` object).
|
|
|
*/
|
|
|
// $FlowFixMe only called in DEV, so void return is not possible.
|
|
|
function typeName(value) {
|
|
|
{
|
|
|
// toStringTag is needed for namespaced types like Temporal.Instant
|
|
|
var hasToStringTag = typeof Symbol === 'function' && Symbol.toStringTag;
|
|
|
var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || 'Object';
|
|
|
return type;
|
|
|
}
|
|
|
} // $FlowFixMe only called in DEV, so void return is not possible.
|
|
|
|
|
|
|
|
|
function willCoercionThrow(value) {
|
|
|
{
|
|
|
try {
|
|
|
testStringCoercion(value);
|
|
|
return false;
|
|
|
} catch (e) {
|
|
|
return true;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function testStringCoercion(value) {
|
|
|
// If you ended up here by following an exception call stack, here's what's
|
|
|
// happened: you supplied an object or symbol value to React (as a prop, key,
|
|
|
// DOM attribute, CSS property, string ref, etc.) and when React tried to
|
|
|
// coerce it to a string using `'' + value`, an exception was thrown.
|
|
|
//
|
|
|
// The most common types that will cause this exception are `Symbol` instances
|
|
|
// and Temporal objects like `Temporal.Instant`. But any object that has a
|
|
|
// `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this
|
|
|
// exception. (Library authors do this to prevent users from using built-in
|
|
|
// numeric operators like `+` or comparison operators like `>=` because custom
|
|
|
// methods are needed to perform accurate arithmetic or comparison.)
|
|
|
//
|
|
|
// To fix the problem, coerce this object or symbol value to a string before
|
|
|
// passing it to React. The most reliable way is usually `String(value)`.
|
|
|
//
|
|
|
// To find which value is throwing, check the browser or debugger console.
|
|
|
// Before this exception was thrown, there should be `console.error` output
|
|
|
// that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the
|
|
|
// problem and how that type was used: key, atrribute, input value prop, etc.
|
|
|
// In most cases, this console output also shows the component and its
|
|
|
// ancestor components where the exception happened.
|
|
|
//
|
|
|
// eslint-disable-next-line react-internal/safe-string-coercion
|
|
|
return '' + value;
|
|
|
}
|
|
|
function checkKeyStringCoercion(value) {
|
|
|
{
|
|
|
if (willCoercionThrow(value)) {
|
|
|
error('The provided key is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.', typeName(value));
|
|
|
|
|
|
return testStringCoercion(value); // throw (to help callers find troubleshooting comments)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function getWrappedName(outerType, innerType, wrapperName) {
|
|
|
var displayName = outerType.displayName;
|
|
|
|
|
|
if (displayName) {
|
|
|
return displayName;
|
|
|
}
|
|
|
|
|
|
var functionName = innerType.displayName || innerType.name || '';
|
|
|
return functionName !== '' ? wrapperName + "(" + functionName + ")" : wrapperName;
|
|
|
} // Keep in sync with react-reconciler/getComponentNameFromFiber
|
|
|
|
|
|
|
|
|
function getContextName(type) {
|
|
|
return type.displayName || 'Context';
|
|
|
} // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead.
|
|
|
|
|
|
|
|
|
function getComponentNameFromType(type) {
|
|
|
if (type == null) {
|
|
|
// Host root, text node or just invalid type.
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
{
|
|
|
if (typeof type.tag === 'number') {
|
|
|
error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (typeof type === 'function') {
|
|
|
return type.displayName || type.name || null;
|
|
|
}
|
|
|
|
|
|
if (typeof type === 'string') {
|
|
|
return type;
|
|
|
}
|
|
|
|
|
|
switch (type) {
|
|
|
case REACT_FRAGMENT_TYPE:
|
|
|
return 'Fragment';
|
|
|
|
|
|
case REACT_PORTAL_TYPE:
|
|
|
return 'Portal';
|
|
|
|
|
|
case REACT_PROFILER_TYPE:
|
|
|
return 'Profiler';
|
|
|
|
|
|
case REACT_STRICT_MODE_TYPE:
|
|
|
return 'StrictMode';
|
|
|
|
|
|
case REACT_SUSPENSE_TYPE:
|
|
|
return 'Suspense';
|
|
|
|
|
|
case REACT_SUSPENSE_LIST_TYPE:
|
|
|
return 'SuspenseList';
|
|
|
|
|
|
}
|
|
|
|
|
|
if (typeof type === 'object') {
|
|
|
switch (type.$$typeof) {
|
|
|
case REACT_CONTEXT_TYPE:
|
|
|
var context = type;
|
|
|
return getContextName(context) + '.Consumer';
|
|
|
|
|
|
case REACT_PROVIDER_TYPE:
|
|
|
var provider = type;
|
|
|
return getContextName(provider._context) + '.Provider';
|
|
|
|
|
|
case REACT_FORWARD_REF_TYPE:
|
|
|
return getWrappedName(type, type.render, 'ForwardRef');
|
|
|
|
|
|
case REACT_MEMO_TYPE:
|
|
|
var outerName = type.displayName || null;
|
|
|
|
|
|
if (outerName !== null) {
|
|
|
return outerName;
|
|
|
}
|
|
|
|
|
|
return getComponentNameFromType(type.type) || 'Memo';
|
|
|
|
|
|
case REACT_LAZY_TYPE:
|
|
|
{
|
|
|
var lazyComponent = type;
|
|
|
var payload = lazyComponent._payload;
|
|
|
var init = lazyComponent._init;
|
|
|
|
|
|
try {
|
|
|
return getComponentNameFromType(init(payload));
|
|
|
} catch (x) {
|
|
|
return null;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// eslint-disable-next-line no-fallthrough
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
var hasOwnProperty = Object.prototype.hasOwnProperty;
|
|
|
|
|
|
var RESERVED_PROPS = {
|
|
|
key: true,
|
|
|
ref: true,
|
|
|
__self: true,
|
|
|
__source: true
|
|
|
};
|
|
|
var specialPropKeyWarningShown, specialPropRefWarningShown, didWarnAboutStringRefs;
|
|
|
|
|
|
{
|
|
|
didWarnAboutStringRefs = {};
|
|
|
}
|
|
|
|
|
|
function hasValidRef(config) {
|
|
|
{
|
|
|
if (hasOwnProperty.call(config, 'ref')) {
|
|
|
var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;
|
|
|
|
|
|
if (getter && getter.isReactWarning) {
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return config.ref !== undefined;
|
|
|
}
|
|
|
|
|
|
function hasValidKey(config) {
|
|
|
{
|
|
|
if (hasOwnProperty.call(config, 'key')) {
|
|
|
var getter = Object.getOwnPropertyDescriptor(config, 'key').get;
|
|
|
|
|
|
if (getter && getter.isReactWarning) {
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return config.key !== undefined;
|
|
|
}
|
|
|
|
|
|
function defineKeyPropWarningGetter(props, displayName) {
|
|
|
var warnAboutAccessingKey = function () {
|
|
|
{
|
|
|
if (!specialPropKeyWarningShown) {
|
|
|
specialPropKeyWarningShown = true;
|
|
|
|
|
|
error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);
|
|
|
}
|
|
|
}
|
|
|
};
|
|
|
|
|
|
warnAboutAccessingKey.isReactWarning = true;
|
|
|
Object.defineProperty(props, 'key', {
|
|
|
get: warnAboutAccessingKey,
|
|
|
configurable: true
|
|
|
});
|
|
|
}
|
|
|
|
|
|
function defineRefPropWarningGetter(props, displayName) {
|
|
|
var warnAboutAccessingRef = function () {
|
|
|
{
|
|
|
if (!specialPropRefWarningShown) {
|
|
|
specialPropRefWarningShown = true;
|
|
|
|
|
|
error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);
|
|
|
}
|
|
|
}
|
|
|
};
|
|
|
|
|
|
warnAboutAccessingRef.isReactWarning = true;
|
|
|
Object.defineProperty(props, 'ref', {
|
|
|
get: warnAboutAccessingRef,
|
|
|
configurable: true
|
|
|
});
|
|
|
}
|
|
|
|
|
|
function warnIfStringRefCannotBeAutoConverted(config) {
|
|
|
{
|
|
|
if (typeof config.ref === 'string' && ReactCurrentOwner.current && config.__self && ReactCurrentOwner.current.stateNode !== config.__self) {
|
|
|
var componentName = getComponentNameFromType(ReactCurrentOwner.current.type);
|
|
|
|
|
|
if (!didWarnAboutStringRefs[componentName]) {
|
|
|
error('Component "%s" contains the string ref "%s". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', componentName, config.ref);
|
|
|
|
|
|
didWarnAboutStringRefs[componentName] = true;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
/**
|
|
|
* Factory method to create a new React element. This no longer adheres to
|
|
|
* the class pattern, so do not use new to call it. Also, instanceof check
|
|
|
* will not work. Instead test $$typeof field against Symbol.for('react.element') to check
|
|
|
* if something is a React Element.
|
|
|
*
|
|
|
* @param {*} type
|
|
|
* @param {*} props
|
|
|
* @param {*} key
|
|
|
* @param {string|object} ref
|
|
|
* @param {*} owner
|
|
|
* @param {*} self A *temporary* helper to detect places where `this` is
|
|
|
* different from the `owner` when React.createElement is called, so that we
|
|
|
* can warn. We want to get rid of owner and replace string `ref`s with arrow
|
|
|
* functions, and as long as `this` and owner are the same, there will be no
|
|
|
* change in behavior.
|
|
|
* @param {*} source An annotation object (added by a transpiler or otherwise)
|
|
|
* indicating filename, line number, and/or other information.
|
|
|
* @internal
|
|
|
*/
|
|
|
|
|
|
|
|
|
var ReactElement = function (type, key, ref, self, source, owner, props) {
|
|
|
var element = {
|
|
|
// This tag allows us to uniquely identify this as a React Element
|
|
|
$$typeof: REACT_ELEMENT_TYPE,
|
|
|
// Built-in properties that belong on the element
|
|
|
type: type,
|
|
|
key: key,
|
|
|
ref: ref,
|
|
|
props: props,
|
|
|
// Record the component responsible for creating this element.
|
|
|
_owner: owner
|
|
|
};
|
|
|
|
|
|
{
|
|
|
// The validation flag is currently mutative. We put it on
|
|
|
// an external backing store so that we can freeze the whole object.
|
|
|
// This can be replaced with a WeakMap once they are implemented in
|
|
|
// commonly used development environments.
|
|
|
element._store = {}; // To make comparing ReactElements easier for testing purposes, we make
|
|
|
// the validation flag non-enumerable (where possible, which should
|
|
|
// include every environment we run tests in), so the test framework
|
|
|
// ignores it.
|
|
|
|
|
|
Object.defineProperty(element._store, 'validated', {
|
|
|
configurable: false,
|
|
|
enumerable: false,
|
|
|
writable: true,
|
|
|
value: false
|
|
|
}); // self and source are DEV only properties.
|
|
|
|
|
|
Object.defineProperty(element, '_self', {
|
|
|
configurable: false,
|
|
|
enumerable: false,
|
|
|
writable: false,
|
|
|
value: self
|
|
|
}); // Two elements created in two different places should be considered
|
|
|
// equal for testing purposes and therefore we hide it from enumeration.
|
|
|
|
|
|
Object.defineProperty(element, '_source', {
|
|
|
configurable: false,
|
|
|
enumerable: false,
|
|
|
writable: false,
|
|
|
value: source
|
|
|
});
|
|
|
|
|
|
if (Object.freeze) {
|
|
|
Object.freeze(element.props);
|
|
|
Object.freeze(element);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return element;
|
|
|
};
|
|
|
/**
|
|
|
* Create and return a new ReactElement of the given type.
|
|
|
* See https://reactjs.org/docs/react-api.html#createelement
|
|
|
*/
|
|
|
|
|
|
function createElement(type, config, children) {
|
|
|
var propName; // Reserved names are extracted
|
|
|
|
|
|
var props = {};
|
|
|
var key = null;
|
|
|
var ref = null;
|
|
|
var self = null;
|
|
|
var source = null;
|
|
|
|
|
|
if (config != null) {
|
|
|
if (hasValidRef(config)) {
|
|
|
ref = config.ref;
|
|
|
|
|
|
{
|
|
|
warnIfStringRefCannotBeAutoConverted(config);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (hasValidKey(config)) {
|
|
|
{
|
|
|
checkKeyStringCoercion(config.key);
|
|
|
}
|
|
|
|
|
|
key = '' + config.key;
|
|
|
}
|
|
|
|
|
|
self = config.__self === undefined ? null : config.__self;
|
|
|
source = config.__source === undefined ? null : config.__source; // Remaining properties are added to a new props object
|
|
|
|
|
|
for (propName in config) {
|
|
|
if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {
|
|
|
props[propName] = config[propName];
|
|
|
}
|
|
|
}
|
|
|
} // Children can be more than one argument, and those are transferred onto
|
|
|
// the newly allocated props object.
|
|
|
|
|
|
|
|
|
var childrenLength = arguments.length - 2;
|
|
|
|
|
|
if (childrenLength === 1) {
|
|
|
props.children = children;
|
|
|
} else if (childrenLength > 1) {
|
|
|
var childArray = Array(childrenLength);
|
|
|
|
|
|
for (var i = 0; i < childrenLength; i++) {
|
|
|
childArray[i] = arguments[i + 2];
|
|
|
}
|
|
|
|
|
|
{
|
|
|
if (Object.freeze) {
|
|
|
Object.freeze(childArray);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
props.children = childArray;
|
|
|
} // Resolve default props
|
|
|
|
|
|
|
|
|
if (type && type.defaultProps) {
|
|
|
var defaultProps = type.defaultProps;
|
|
|
|
|
|
for (propName in defaultProps) {
|
|
|
if (props[propName] === undefined) {
|
|
|
props[propName] = defaultProps[propName];
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
{
|
|
|
if (key || ref) {
|
|
|
var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;
|
|
|
|
|
|
if (key) {
|
|
|
defineKeyPropWarningGetter(props, displayName);
|
|
|
}
|
|
|
|
|
|
if (ref) {
|
|
|
defineRefPropWarningGetter(props, displayName);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);
|
|
|
}
|
|
|
function cloneAndReplaceKey(oldElement, newKey) {
|
|
|
var newElement = ReactElement(oldElement.type, newKey, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, oldElement.props);
|
|
|
return newElement;
|
|
|
}
|
|
|
/**
|
|
|
* Clone and return a new ReactElement using element as the starting point.
|
|
|
* See https://reactjs.org/docs/react-api.html#cloneelement
|
|
|
*/
|
|
|
|
|
|
function cloneElement(element, config, children) {
|
|
|
if (element === null || element === undefined) {
|
|
|
throw new Error("React.cloneElement(...): The argument must be a React element, but you passed " + element + ".");
|
|
|
}
|
|
|
|
|
|
var propName; // Original props are copied
|
|
|
|
|
|
var props = assign({}, element.props); // Reserved names are extracted
|
|
|
|
|
|
var key = element.key;
|
|
|
var ref = element.ref; // Self is preserved since the owner is preserved.
|
|
|
|
|
|
var self = element._self; // Source is preserved since cloneElement is unlikely to be targeted by a
|
|
|
// transpiler, and the original source is probably a better indicator of the
|
|
|
// true owner.
|
|
|
|
|
|
var source = element._source; // Owner will be preserved, unless ref is overridden
|
|
|
|
|
|
var owner = element._owner;
|
|
|
|
|
|
if (config != null) {
|
|
|
if (hasValidRef(config)) {
|
|
|
// Silently steal the ref from the parent.
|
|
|
ref = config.ref;
|
|
|
owner = ReactCurrentOwner.current;
|
|
|
}
|
|
|
|
|
|
if (hasValidKey(config)) {
|
|
|
{
|
|
|
checkKeyStringCoercion(config.key);
|
|
|
}
|
|
|
|
|
|
key = '' + config.key;
|
|
|
} // Remaining properties override existing props
|
|
|
|
|
|
|
|
|
var defaultProps;
|
|
|
|
|
|
if (element.type && element.type.defaultProps) {
|
|
|
defaultProps = element.type.defaultProps;
|
|
|
}
|
|
|
|
|
|
for (propName in config) {
|
|
|
if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {
|
|
|
if (config[propName] === undefined && defaultProps !== undefined) {
|
|
|
// Resolve default props
|
|
|
props[propName] = defaultProps[propName];
|
|
|
} else {
|
|
|
props[propName] = config[propName];
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
} // Children can be more than one argument, and those are transferred onto
|
|
|
// the newly allocated props object.
|
|
|
|
|
|
|
|
|
var childrenLength = arguments.length - 2;
|
|
|
|
|
|
if (childrenLength === 1) {
|
|
|
props.children = children;
|
|
|
} else if (childrenLength > 1) {
|
|
|
var childArray = Array(childrenLength);
|
|
|
|
|
|
for (var i = 0; i < childrenLength; i++) {
|
|
|
childArray[i] = arguments[i + 2];
|
|
|
}
|
|
|
|
|
|
props.children = childArray;
|
|
|
}
|
|
|
|
|
|
return ReactElement(element.type, key, ref, self, source, owner, props);
|
|
|
}
|
|
|
/**
|
|
|
* Verifies the object is a ReactElement.
|
|
|
* See https://reactjs.org/docs/react-api.html#isvalidelement
|
|
|
* @param {?object} object
|
|
|
* @return {boolean} True if `object` is a ReactElement.
|
|
|
* @final
|
|
|
*/
|
|
|
|
|
|
function isValidElement(object) {
|
|
|
return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;
|
|
|
}
|
|
|
|
|
|
var SEPARATOR = '.';
|
|
|
var SUBSEPARATOR = ':';
|
|
|
/**
|
|
|
* Escape and wrap key so it is safe to use as a reactid
|
|
|
*
|
|
|
* @param {string} key to be escaped.
|
|
|
* @return {string} the escaped key.
|
|
|
*/
|
|
|
|
|
|
function escape(key) {
|
|
|
var escapeRegex = /[=:]/g;
|
|
|
var escaperLookup = {
|
|
|
'=': '=0',
|
|
|
':': '=2'
|
|
|
};
|
|
|
var escapedString = key.replace(escapeRegex, function (match) {
|
|
|
return escaperLookup[match];
|
|
|
});
|
|
|
return '$' + escapedString;
|
|
|
}
|
|
|
/**
|
|
|
* TODO: Test that a single child and an array with one item have the same key
|
|
|
* pattern.
|
|
|
*/
|
|
|
|
|
|
|
|
|
var didWarnAboutMaps = false;
|
|
|
var userProvidedKeyEscapeRegex = /\/+/g;
|
|
|
|
|
|
function escapeUserProvidedKey(text) {
|
|
|
return text.replace(userProvidedKeyEscapeRegex, '$&/');
|
|
|
}
|
|
|
/**
|
|
|
* Generate a key string that identifies a element within a set.
|
|
|
*
|
|
|
* @param {*} element A element that could contain a manual key.
|
|
|
* @param {number} index Index that is used if a manual key is not provided.
|
|
|
* @return {string}
|
|
|
*/
|
|
|
|
|
|
|
|
|
function getElementKey(element, index) {
|
|
|
// Do some typechecking here since we call this blindly. We want to ensure
|
|
|
// that we don't block potential future ES APIs.
|
|
|
if (typeof element === 'object' && element !== null && element.key != null) {
|
|
|
// Explicit key
|
|
|
{
|
|
|
checkKeyStringCoercion(element.key);
|
|
|
}
|
|
|
|
|
|
return escape('' + element.key);
|
|
|
} // Implicit key determined by the index in the set
|
|
|
|
|
|
|
|
|
return index.toString(36);
|
|
|
}
|
|
|
|
|
|
function mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) {
|
|
|
var type = typeof children;
|
|
|
|
|
|
if (type === 'undefined' || type === 'boolean') {
|
|
|
// All of the above are perceived as null.
|
|
|
children = null;
|
|
|
}
|
|
|
|
|
|
var invokeCallback = false;
|
|
|
|
|
|
if (children === null) {
|
|
|
invokeCallback = true;
|
|
|
} else {
|
|
|
switch (type) {
|
|
|
case 'string':
|
|
|
case 'number':
|
|
|
invokeCallback = true;
|
|
|
break;
|
|
|
|
|
|
case 'object':
|
|
|
switch (children.$$typeof) {
|
|
|
case REACT_ELEMENT_TYPE:
|
|
|
case REACT_PORTAL_TYPE:
|
|
|
invokeCallback = true;
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (invokeCallback) {
|
|
|
var _child = children;
|
|
|
var mappedChild = callback(_child); // If it's the only child, treat the name as if it was wrapped in an array
|
|
|
// so that it's consistent if the number of children grows:
|
|
|
|
|
|
var childKey = nameSoFar === '' ? SEPARATOR + getElementKey(_child, 0) : nameSoFar;
|
|
|
|
|
|
if (isArray(mappedChild)) {
|
|
|
var escapedChildKey = '';
|
|
|
|
|
|
if (childKey != null) {
|
|
|
escapedChildKey = escapeUserProvidedKey(childKey) + '/';
|
|
|
}
|
|
|
|
|
|
mapIntoArray(mappedChild, array, escapedChildKey, '', function (c) {
|
|
|
return c;
|
|
|
});
|
|
|
} else if (mappedChild != null) {
|
|
|
if (isValidElement(mappedChild)) {
|
|
|
{
|
|
|
// The `if` statement here prevents auto-disabling of the safe
|
|
|
// coercion ESLint rule, so we must manually disable it below.
|
|
|
// $FlowFixMe Flow incorrectly thinks React.Portal doesn't have a key
|
|
|
if (mappedChild.key && (!_child || _child.key !== mappedChild.key)) {
|
|
|
checkKeyStringCoercion(mappedChild.key);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
mappedChild = cloneAndReplaceKey(mappedChild, // Keep both the (mapped) and old keys if they differ, just as
|
|
|
// traverseAllChildren used to do for objects as children
|
|
|
escapedPrefix + ( // $FlowFixMe Flow incorrectly thinks React.Portal doesn't have a key
|
|
|
mappedChild.key && (!_child || _child.key !== mappedChild.key) ? // $FlowFixMe Flow incorrectly thinks existing element's key can be a number
|
|
|
// eslint-disable-next-line react-internal/safe-string-coercion
|
|
|
escapeUserProvidedKey('' + mappedChild.key) + '/' : '') + childKey);
|
|
|
}
|
|
|
|
|
|
array.push(mappedChild);
|
|
|
}
|
|
|
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
var child;
|
|
|
var nextName;
|
|
|
var subtreeCount = 0; // Count of children found in the current subtree.
|
|
|
|
|
|
var nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR;
|
|
|
|
|
|
if (isArray(children)) {
|
|
|
for (var i = 0; i < children.length; i++) {
|
|
|
child = children[i];
|
|
|
nextName = nextNamePrefix + getElementKey(child, i);
|
|
|
subtreeCount += mapIntoArray(child, array, escapedPrefix, nextName, callback);
|
|
|
}
|
|
|
} else {
|
|
|
var iteratorFn = getIteratorFn(children);
|
|
|
|
|
|
if (typeof iteratorFn === 'function') {
|
|
|
var iterableChildren = children;
|
|
|
|
|
|
{
|
|
|
// Warn about using Maps as children
|
|
|
if (iteratorFn === iterableChildren.entries) {
|
|
|
if (!didWarnAboutMaps) {
|
|
|
warn('Using Maps as children is not supported. ' + 'Use an array of keyed ReactElements instead.');
|
|
|
}
|
|
|
|
|
|
didWarnAboutMaps = true;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var iterator = iteratorFn.call(iterableChildren);
|
|
|
var step;
|
|
|
var ii = 0;
|
|
|
|
|
|
while (!(step = iterator.next()).done) {
|
|
|
child = step.value;
|
|
|
nextName = nextNamePrefix + getElementKey(child, ii++);
|
|
|
subtreeCount += mapIntoArray(child, array, escapedPrefix, nextName, callback);
|
|
|
}
|
|
|
} else if (type === 'object') {
|
|
|
// eslint-disable-next-line react-internal/safe-string-coercion
|
|
|
var childrenString = String(children);
|
|
|
throw new Error("Objects are not valid as a React child (found: " + (childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString) + "). " + 'If you meant to render a collection of children, use an array ' + 'instead.');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return subtreeCount;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Maps children that are typically specified as `props.children`.
|
|
|
*
|
|
|
* See https://reactjs.org/docs/react-api.html#reactchildrenmap
|
|
|
*
|
|
|
* The provided mapFunction(child, index) will be called for each
|
|
|
* leaf child.
|
|
|
*
|
|
|
* @param {?*} children Children tree container.
|
|
|
* @param {function(*, int)} func The map function.
|
|
|
* @param {*} context Context for mapFunction.
|
|
|
* @return {object} Object containing the ordered map of results.
|
|
|
*/
|
|
|
function mapChildren(children, func, context) {
|
|
|
if (children == null) {
|
|
|
return children;
|
|
|
}
|
|
|
|
|
|
var result = [];
|
|
|
var count = 0;
|
|
|
mapIntoArray(children, result, '', '', function (child) {
|
|
|
return func.call(context, child, count++);
|
|
|
});
|
|
|
return result;
|
|
|
}
|
|
|
/**
|
|
|
* Count the number of children that are typically specified as
|
|
|
* `props.children`.
|
|
|
*
|
|
|
* See https://reactjs.org/docs/react-api.html#reactchildrencount
|
|
|
*
|
|
|
* @param {?*} children Children tree container.
|
|
|
* @return {number} The number of children.
|
|
|
*/
|
|
|
|
|
|
|
|
|
function countChildren(children) {
|
|
|
var n = 0;
|
|
|
mapChildren(children, function () {
|
|
|
n++; // Don't return anything
|
|
|
});
|
|
|
return n;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Iterates through children that are typically specified as `props.children`.
|
|
|
*
|
|
|
* See https://reactjs.org/docs/react-api.html#reactchildrenforeach
|
|
|
*
|
|
|
* The provided forEachFunc(child, index) will be called for each
|
|
|
* leaf child.
|
|
|
*
|
|
|
* @param {?*} children Children tree container.
|
|
|
* @param {function(*, int)} forEachFunc
|
|
|
* @param {*} forEachContext Context for forEachContext.
|
|
|
*/
|
|
|
function forEachChildren(children, forEachFunc, forEachContext) {
|
|
|
mapChildren(children, function () {
|
|
|
forEachFunc.apply(this, arguments); // Don't return anything.
|
|
|
}, forEachContext);
|
|
|
}
|
|
|
/**
|
|
|
* Flatten a children object (typically specified as `props.children`) and
|
|
|
* return an array with appropriately re-keyed children.
|
|
|
*
|
|
|
* See https://reactjs.org/docs/react-api.html#reactchildrentoarray
|
|
|
*/
|
|
|
|
|
|
|
|
|
function toArray(children) {
|
|
|
return mapChildren(children, function (child) {
|
|
|
return child;
|
|
|
}) || [];
|
|
|
}
|
|
|
/**
|
|
|
* Returns the first child in a collection of children and verifies that there
|
|
|
* is only one child in the collection.
|
|
|
*
|
|
|
* See https://reactjs.org/docs/react-api.html#reactchildrenonly
|
|
|
*
|
|
|
* The current implementation of this function assumes that a single child gets
|
|
|
* passed without a wrapper, but the purpose of this helper function is to
|
|
|
* abstract away the particular structure of children.
|
|
|
*
|
|
|
* @param {?object} children Child collection structure.
|
|
|
* @return {ReactElement} The first and only `ReactElement` contained in the
|
|
|
* structure.
|
|
|
*/
|
|
|
|
|
|
|
|
|
function onlyChild(children) {
|
|
|
if (!isValidElement(children)) {
|
|
|
throw new Error('React.Children.only expected to receive a single React element child.');
|
|
|
}
|
|
|
|
|
|
return children;
|
|
|
}
|
|
|
|
|
|
function createContext(defaultValue) {
|
|
|
// TODO: Second argument used to be an optional `calculateChangedBits`
|
|
|
// function. Warn to reserve for future use?
|
|
|
var context = {
|
|
|
$$typeof: REACT_CONTEXT_TYPE,
|
|
|
// As a workaround to support multiple concurrent renderers, we categorize
|
|
|
// some renderers as primary and others as secondary. We only expect
|
|
|
// there to be two concurrent renderers at most: React Native (primary) and
|
|
|
// Fabric (secondary); React DOM (primary) and React ART (secondary).
|
|
|
// Secondary renderers store their context values on separate fields.
|
|
|
_currentValue: defaultValue,
|
|
|
_currentValue2: defaultValue,
|
|
|
// Used to track how many concurrent renderers this context currently
|
|
|
// supports within in a single renderer. Such as parallel server rendering.
|
|
|
_threadCount: 0,
|
|
|
// These are circular
|
|
|
Provider: null,
|
|
|
Consumer: null,
|
|
|
// Add these to use same hidden class in VM as ServerContext
|
|
|
_defaultValue: null,
|
|
|
_globalName: null
|
|
|
};
|
|
|
context.Provider = {
|
|
|
$$typeof: REACT_PROVIDER_TYPE,
|
|
|
_context: context
|
|
|
};
|
|
|
var hasWarnedAboutUsingNestedContextConsumers = false;
|
|
|
var hasWarnedAboutUsingConsumerProvider = false;
|
|
|
var hasWarnedAboutDisplayNameOnConsumer = false;
|
|
|
|
|
|
{
|
|
|
// A separate object, but proxies back to the original context object for
|
|
|
// backwards compatibility. It has a different $$typeof, so we can properly
|
|
|
// warn for the incorrect usage of Context as a Consumer.
|
|
|
var Consumer = {
|
|
|
$$typeof: REACT_CONTEXT_TYPE,
|
|
|
_context: context
|
|
|
}; // $FlowFixMe: Flow complains about not setting a value, which is intentional here
|
|
|
|
|
|
Object.defineProperties(Consumer, {
|
|
|
Provider: {
|
|
|
get: function () {
|
|
|
if (!hasWarnedAboutUsingConsumerProvider) {
|
|
|
hasWarnedAboutUsingConsumerProvider = true;
|
|
|
|
|
|
error('Rendering <Context.Consumer.Provider> is not supported and will be removed in ' + 'a future major release. Did you mean to render <Context.Provider> instead?');
|
|
|
}
|
|
|
|
|
|
return context.Provider;
|
|
|
},
|
|
|
set: function (_Provider) {
|
|
|
context.Provider = _Provider;
|
|
|
}
|
|
|
},
|
|
|
_currentValue: {
|
|
|
get: function () {
|
|
|
return context._currentValue;
|
|
|
},
|
|
|
set: function (_currentValue) {
|
|
|
context._currentValue = _currentValue;
|
|
|
}
|
|
|
},
|
|
|
_currentValue2: {
|
|
|
get: function () {
|
|
|
return context._currentValue2;
|
|
|
},
|
|
|
set: function (_currentValue2) {
|
|
|
context._currentValue2 = _currentValue2;
|
|
|
}
|
|
|
},
|
|
|
_threadCount: {
|
|
|
get: function () {
|
|
|
return context._threadCount;
|
|
|
},
|
|
|
set: function (_threadCount) {
|
|
|
context._threadCount = _threadCount;
|
|
|
}
|
|
|
},
|
|
|
Consumer: {
|
|
|
get: function () {
|
|
|
if (!hasWarnedAboutUsingNestedContextConsumers) {
|
|
|
hasWarnedAboutUsingNestedContextConsumers = true;
|
|
|
|
|
|
error('Rendering <Context.Consumer.Consumer> is not supported and will be removed in ' + 'a future major release. Did you mean to render <Context.Consumer> instead?');
|
|
|
}
|
|
|
|
|
|
return context.Consumer;
|
|
|
}
|
|
|
},
|
|
|
displayName: {
|
|
|
get: function () {
|
|
|
return context.displayName;
|
|
|
},
|
|
|
set: function (displayName) {
|
|
|
if (!hasWarnedAboutDisplayNameOnConsumer) {
|
|
|
warn('Setting `displayName` on Context.Consumer has no effect. ' + "You should set it directly on the context with Context.displayName = '%s'.", displayName);
|
|
|
|
|
|
hasWarnedAboutDisplayNameOnConsumer = true;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}); // $FlowFixMe: Flow complains about missing properties because it doesn't understand defineProperty
|
|
|
|
|
|
context.Consumer = Consumer;
|
|
|
}
|
|
|
|
|
|
{
|
|
|
context._currentRenderer = null;
|
|
|
context._currentRenderer2 = null;
|
|
|
}
|
|
|
|
|
|
return context;
|
|
|
}
|
|
|
|
|
|
var Uninitialized = -1;
|
|
|
var Pending = 0;
|
|
|
var Resolved = 1;
|
|
|
var Rejected = 2;
|
|
|
|
|
|
function lazyInitializer(payload) {
|
|
|
if (payload._status === Uninitialized) {
|
|
|
var ctor = payload._result;
|
|
|
var thenable = ctor(); // Transition to the next state.
|
|
|
// This might throw either because it's missing or throws. If so, we treat it
|
|
|
// as still uninitialized and try again next time. Which is the same as what
|
|
|
// happens if the ctor or any wrappers processing the ctor throws. This might
|
|
|
// end up fixing it if the resolution was a concurrency bug.
|
|
|
|
|
|
thenable.then(function (moduleObject) {
|
|
|
if (payload._status === Pending || payload._status === Uninitialized) {
|
|
|
// Transition to the next state.
|
|
|
var resolved = payload;
|
|
|
resolved._status = Resolved;
|
|
|
resolved._result = moduleObject;
|
|
|
}
|
|
|
}, function (error) {
|
|
|
if (payload._status === Pending || payload._status === Uninitialized) {
|
|
|
// Transition to the next state.
|
|
|
var rejected = payload;
|
|
|
rejected._status = Rejected;
|
|
|
rejected._result = error;
|
|
|
}
|
|
|
});
|
|
|
|
|
|
if (payload._status === Uninitialized) {
|
|
|
// In case, we're still uninitialized, then we're waiting for the thenable
|
|
|
// to resolve. Set it as pending in the meantime.
|
|
|
var pending = payload;
|
|
|
pending._status = Pending;
|
|
|
pending._result = thenable;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (payload._status === Resolved) {
|
|
|
var moduleObject = payload._result;
|
|
|
|
|
|
{
|
|
|
if (moduleObject === undefined) {
|
|
|
error('lazy: Expected the result of a dynamic imp' + 'ort() call. ' + 'Instead received: %s\n\nYour code should look like: \n ' + // Break up imports to avoid accidentally parsing them as dependencies.
|
|
|
'const MyComponent = lazy(() => imp' + "ort('./MyComponent'))\n\n" + 'Did you accidentally put curly braces around the import?', moduleObject);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
{
|
|
|
if (!('default' in moduleObject)) {
|
|
|
error('lazy: Expected the result of a dynamic imp' + 'ort() call. ' + 'Instead received: %s\n\nYour code should look like: \n ' + // Break up imports to avoid accidentally parsing them as dependencies.
|
|
|
'const MyComponent = lazy(() => imp' + "ort('./MyComponent'))", moduleObject);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return moduleObject.default;
|
|
|
} else {
|
|
|
throw payload._result;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function lazy(ctor) {
|
|
|
var payload = {
|
|
|
// We use these fields to store the result.
|
|
|
_status: Uninitialized,
|
|
|
_result: ctor
|
|
|
};
|
|
|
var lazyType = {
|
|
|
$$typeof: REACT_LAZY_TYPE,
|
|
|
_payload: payload,
|
|
|
_init: lazyInitializer
|
|
|
};
|
|
|
|
|
|
{
|
|
|
// In production, this would just set it on the object.
|
|
|
var defaultProps;
|
|
|
var propTypes; // $FlowFixMe
|
|
|
|
|
|
Object.defineProperties(lazyType, {
|
|
|
defaultProps: {
|
|
|
configurable: true,
|
|
|
get: function () {
|
|
|
return defaultProps;
|
|
|
},
|
|
|
set: function (newDefaultProps) {
|
|
|
error('React.lazy(...): It is not supported to assign `defaultProps` to ' + 'a lazy component import. Either specify them where the component ' + 'is defined, or create a wrapping component around it.');
|
|
|
|
|
|
defaultProps = newDefaultProps; // Match production behavior more closely:
|
|
|
// $FlowFixMe
|
|
|
|
|
|
Object.defineProperty(lazyType, 'defaultProps', {
|
|
|
enumerable: true
|
|
|
});
|
|
|
}
|
|
|
},
|
|
|
propTypes: {
|
|
|
configurable: true,
|
|
|
get: function () {
|
|
|
return propTypes;
|
|
|
},
|
|
|
set: function (newPropTypes) {
|
|
|
error('React.lazy(...): It is not supported to assign `propTypes` to ' + 'a lazy component import. Either specify them where the component ' + 'is defined, or create a wrapping component around it.');
|
|
|
|
|
|
propTypes = newPropTypes; // Match production behavior more closely:
|
|
|
// $FlowFixMe
|
|
|
|
|
|
Object.defineProperty(lazyType, 'propTypes', {
|
|
|
enumerable: true
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
|
|
|
return lazyType;
|
|
|
}
|
|
|
|
|
|
function forwardRef(render) {
|
|
|
{
|
|
|
if (render != null && render.$$typeof === REACT_MEMO_TYPE) {
|
|
|
error('forwardRef requires a render function but received a `memo` ' + 'component. Instead of forwardRef(memo(...)), use ' + 'memo(forwardRef(...)).');
|
|
|
} else if (typeof render !== 'function') {
|
|
|
error('forwardRef requires a render function but was given %s.', render === null ? 'null' : typeof render);
|
|
|
} else {
|
|
|
if (render.length !== 0 && render.length !== 2) {
|
|
|
error('forwardRef render functions accept exactly two parameters: props and ref. %s', render.length === 1 ? 'Did you forget to use the ref parameter?' : 'Any additional parameter will be undefined.');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (render != null) {
|
|
|
if (render.defaultProps != null || render.propTypes != null) {
|
|
|
error('forwardRef render functions do not support propTypes or defaultProps. ' + 'Did you accidentally pass a React component?');
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var elementType = {
|
|
|
$$typeof: REACT_FORWARD_REF_TYPE,
|
|
|
render: render
|
|
|
};
|
|
|
|
|
|
{
|
|
|
var ownName;
|
|
|
Object.defineProperty(elementType, 'displayName', {
|
|
|
enumerable: false,
|
|
|
configurable: true,
|
|
|
get: function () {
|
|
|
return ownName;
|
|
|
},
|
|
|
set: function (name) {
|
|
|
ownName = name; // The inner component shouldn't inherit this display name in most cases,
|
|
|
// because the component may be used elsewhere.
|
|
|
// But it's nice for anonymous functions to inherit the name,
|
|
|
// so that our component-stack generation logic will display their frames.
|
|
|
// An anonymous function generally suggests a pattern like:
|
|
|
// React.forwardRef((props, ref) => {...});
|
|
|
// This kind of inner function is not used elsewhere so the side effect is okay.
|
|
|
|
|
|
if (!render.name && !render.displayName) {
|
|
|
render.displayName = name;
|
|
|
}
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
|
|
|
return elementType;
|
|
|
}
|
|
|
|
|
|
var REACT_MODULE_REFERENCE;
|
|
|
|
|
|
{
|
|
|
REACT_MODULE_REFERENCE = Symbol.for('react.module.reference');
|
|
|
}
|
|
|
|
|
|
function isValidElementType(type) {
|
|
|
if (typeof type === 'string' || typeof type === 'function') {
|
|
|
return true;
|
|
|
} // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).
|
|
|
|
|
|
|
|
|
if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden || type === REACT_OFFSCREEN_TYPE || enableScopeAPI || enableCacheElement || enableTransitionTracing ) {
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
if (typeof type === 'object' && type !== null) {
|
|
|
if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object
|
|
|
// types supported by any Flight configuration anywhere since
|
|
|
// we don't know which Flight build this will end up being used
|
|
|
// with.
|
|
|
type.$$typeof === REACT_MODULE_REFERENCE || type.getModuleId !== undefined) {
|
|
|
return true;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
function memo(type, compare) {
|
|
|
{
|
|
|
if (!isValidElementType(type)) {
|
|
|
error('memo: The first argument must be a component. Instead ' + 'received: %s', type === null ? 'null' : typeof type);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var elementType = {
|
|
|
$$typeof: REACT_MEMO_TYPE,
|
|
|
type: type,
|
|
|
compare: compare === undefined ? null : compare
|
|
|
};
|
|
|
|
|
|
{
|
|
|
var ownName;
|
|
|
Object.defineProperty(elementType, 'displayName', {
|
|
|
enumerable: false,
|
|
|
configurable: true,
|
|
|
get: function () {
|
|
|
return ownName;
|
|
|
},
|
|
|
set: function (name) {
|
|
|
ownName = name; // The inner component shouldn't inherit this display name in most cases,
|
|
|
// because the component may be used elsewhere.
|
|
|
// But it's nice for anonymous functions to inherit the name,
|
|
|
// so that our component-stack generation logic will display their frames.
|
|
|
// An anonymous function generally suggests a pattern like:
|
|
|
// React.memo((props) => {...});
|
|
|
// This kind of inner function is not used elsewhere so the side effect is okay.
|
|
|
|
|
|
if (!type.name && !type.displayName) {
|
|
|
type.displayName = name;
|
|
|
}
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
|
|
|
return elementType;
|
|
|
}
|
|
|
|
|
|
function resolveDispatcher() {
|
|
|
var dispatcher = ReactCurrentDispatcher.current;
|
|
|
|
|
|
{
|
|
|
if (dispatcher === null) {
|
|
|
error('Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for' + ' one of the following reasons:\n' + '1. You might have mismatching versions of React and the renderer (such as React DOM)\n' + '2. You might be breaking the Rules of Hooks\n' + '3. You might have more than one copy of React in the same app\n' + 'See https://reactjs.org/link/invalid-hook-call for tips about how to debug and fix this problem.');
|
|
|
}
|
|
|
} // Will result in a null access error if accessed outside render phase. We
|
|
|
// intentionally don't throw our own error because this is in a hot path.
|
|
|
// Also helps ensure this is inlined.
|
|
|
|
|
|
|
|
|
return dispatcher;
|
|
|
}
|
|
|
function useContext(Context) {
|
|
|
var dispatcher = resolveDispatcher();
|
|
|
|
|
|
{
|
|
|
// TODO: add a more generic warning for invalid values.
|
|
|
if (Context._context !== undefined) {
|
|
|
var realContext = Context._context; // Don't deduplicate because this legitimately causes bugs
|
|
|
// and nobody should be using this in existing code.
|
|
|
|
|
|
if (realContext.Consumer === Context) {
|
|
|
error('Calling useContext(Context.Consumer) is not supported, may cause bugs, and will be ' + 'removed in a future major release. Did you mean to call useContext(Context) instead?');
|
|
|
} else if (realContext.Provider === Context) {
|
|
|
error('Calling useContext(Context.Provider) is not supported. ' + 'Did you mean to call useContext(Context) instead?');
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return dispatcher.useContext(Context);
|
|
|
}
|
|
|
function useState(initialState) {
|
|
|
var dispatcher = resolveDispatcher();
|
|
|
return dispatcher.useState(initialState);
|
|
|
}
|
|
|
function useReducer(reducer, initialArg, init) {
|
|
|
var dispatcher = resolveDispatcher();
|
|
|
return dispatcher.useReducer(reducer, initialArg, init);
|
|
|
}
|
|
|
function useRef(initialValue) {
|
|
|
var dispatcher = resolveDispatcher();
|
|
|
return dispatcher.useRef(initialValue);
|
|
|
}
|
|
|
function useEffect(create, deps) {
|
|
|
var dispatcher = resolveDispatcher();
|
|
|
return dispatcher.useEffect(create, deps);
|
|
|
}
|
|
|
function useInsertionEffect(create, deps) {
|
|
|
var dispatcher = resolveDispatcher();
|
|
|
return dispatcher.useInsertionEffect(create, deps);
|
|
|
}
|
|
|
function useLayoutEffect(create, deps) {
|
|
|
var dispatcher = resolveDispatcher();
|
|
|
return dispatcher.useLayoutEffect(create, deps);
|
|
|
}
|
|
|
function useCallback(callback, deps) {
|
|
|
var dispatcher = resolveDispatcher();
|
|
|
return dispatcher.useCallback(callback, deps);
|
|
|
}
|
|
|
function useMemo(create, deps) {
|
|
|
var dispatcher = resolveDispatcher();
|
|
|
return dispatcher.useMemo(create, deps);
|
|
|
}
|
|
|
function useImperativeHandle(ref, create, deps) {
|
|
|
var dispatcher = resolveDispatcher();
|
|
|
return dispatcher.useImperativeHandle(ref, create, deps);
|
|
|
}
|
|
|
function useDebugValue(value, formatterFn) {
|
|
|
{
|
|
|
var dispatcher = resolveDispatcher();
|
|
|
return dispatcher.useDebugValue(value, formatterFn);
|
|
|
}
|
|
|
}
|
|
|
function useTransition() {
|
|
|
var dispatcher = resolveDispatcher();
|
|
|
return dispatcher.useTransition();
|
|
|
}
|
|
|
function useDeferredValue(value) {
|
|
|
var dispatcher = resolveDispatcher();
|
|
|
return dispatcher.useDeferredValue(value);
|
|
|
}
|
|
|
function useId() {
|
|
|
var dispatcher = resolveDispatcher();
|
|
|
return dispatcher.useId();
|
|
|
}
|
|
|
function useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) {
|
|
|
var dispatcher = resolveDispatcher();
|
|
|
return dispatcher.useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);
|
|
|
}
|
|
|
|
|
|
// Helpers to patch console.logs to avoid logging during side-effect free
|
|
|
// replaying on render function. This currently only patches the object
|
|
|
// lazily which won't cover if the log function was extracted eagerly.
|
|
|
// We could also eagerly patch the method.
|
|
|
var disabledDepth = 0;
|
|
|
var prevLog;
|
|
|
var prevInfo;
|
|
|
var prevWarn;
|
|
|
var prevError;
|
|
|
var prevGroup;
|
|
|
var prevGroupCollapsed;
|
|
|
var prevGroupEnd;
|
|
|
|
|
|
function disabledLog() {}
|
|
|
|
|
|
disabledLog.__reactDisabledLog = true;
|
|
|
function disableLogs() {
|
|
|
{
|
|
|
if (disabledDepth === 0) {
|
|
|
/* eslint-disable react-internal/no-production-logging */
|
|
|
prevLog = console.log;
|
|
|
prevInfo = console.info;
|
|
|
prevWarn = console.warn;
|
|
|
prevError = console.error;
|
|
|
prevGroup = console.group;
|
|
|
prevGroupCollapsed = console.groupCollapsed;
|
|
|
prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099
|
|
|
|
|
|
var props = {
|
|
|
configurable: true,
|
|
|
enumerable: true,
|
|
|
value: disabledLog,
|
|
|
writable: true
|
|
|
}; // $FlowFixMe Flow thinks console is immutable.
|
|
|
|
|
|
Object.defineProperties(console, {
|
|
|
info: props,
|
|
|
log: props,
|
|
|
warn: props,
|
|
|
error: props,
|
|
|
group: props,
|
|
|
groupCollapsed: props,
|
|
|
groupEnd: props
|
|
|
});
|
|
|
/* eslint-enable react-internal/no-production-logging */
|
|
|
}
|
|
|
|
|
|
disabledDepth++;
|
|
|
}
|
|
|
}
|
|
|
function reenableLogs() {
|
|
|
{
|
|
|
disabledDepth--;
|
|
|
|
|
|
if (disabledDepth === 0) {
|
|
|
/* eslint-disable react-internal/no-production-logging */
|
|
|
var props = {
|
|
|
configurable: true,
|
|
|
enumerable: true,
|
|
|
writable: true
|
|
|
}; // $FlowFixMe Flow thinks console is immutable.
|
|
|
|
|
|
Object.defineProperties(console, {
|
|
|
log: assign({}, props, {
|
|
|
value: prevLog
|
|
|
}),
|
|
|
info: assign({}, props, {
|
|
|
value: prevInfo
|
|
|
}),
|
|
|
warn: assign({}, props, {
|
|
|
value: prevWarn
|
|
|
}),
|
|
|
error: assign({}, props, {
|
|
|
value: prevError
|
|
|
}),
|
|
|
group: assign({}, props, {
|
|
|
value: prevGroup
|
|
|
}),
|
|
|
groupCollapsed: assign({}, props, {
|
|
|
value: prevGroupCollapsed
|
|
|
}),
|
|
|
groupEnd: assign({}, props, {
|
|
|
value: prevGroupEnd
|
|
|
})
|
|
|
});
|
|
|
/* eslint-enable react-internal/no-production-logging */
|
|
|
}
|
|
|
|
|
|
if (disabledDepth < 0) {
|
|
|
error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.');
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var ReactCurrentDispatcher$1 = ReactSharedInternals.ReactCurrentDispatcher;
|
|
|
var prefix;
|
|
|
function describeBuiltInComponentFrame(name, source, ownerFn) {
|
|
|
{
|
|
|
if (prefix === undefined) {
|
|
|
// Extract the VM specific prefix used by each line.
|
|
|
try {
|
|
|
throw Error();
|
|
|
} catch (x) {
|
|
|
var match = x.stack.trim().match(/\n( *(at )?)/);
|
|
|
prefix = match && match[1] || '';
|
|
|
}
|
|
|
} // We use the prefix to ensure our stacks line up with native stack frames.
|
|
|
|
|
|
|
|
|
return '\n' + prefix + name;
|
|
|
}
|
|
|
}
|
|
|
var reentry = false;
|
|
|
var componentFrameCache;
|
|
|
|
|
|
{
|
|
|
var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;
|
|
|
componentFrameCache = new PossiblyWeakMap();
|
|
|
}
|
|
|
|
|
|
function describeNativeComponentFrame(fn, construct) {
|
|
|
// If something asked for a stack inside a fake render, it should get ignored.
|
|
|
if ( !fn || reentry) {
|
|
|
return '';
|
|
|
}
|
|
|
|
|
|
{
|
|
|
var frame = componentFrameCache.get(fn);
|
|
|
|
|
|
if (frame !== undefined) {
|
|
|
return frame;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var control;
|
|
|
reentry = true;
|
|
|
var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined.
|
|
|
|
|
|
Error.prepareStackTrace = undefined;
|
|
|
var previousDispatcher;
|
|
|
|
|
|
{
|
|
|
previousDispatcher = ReactCurrentDispatcher$1.current; // Set the dispatcher in DEV because this might be call in the render function
|
|
|
// for warnings.
|
|
|
|
|
|
ReactCurrentDispatcher$1.current = null;
|
|
|
disableLogs();
|
|
|
}
|
|
|
|
|
|
try {
|
|
|
// This should throw.
|
|
|
if (construct) {
|
|
|
// Something should be setting the props in the constructor.
|
|
|
var Fake = function () {
|
|
|
throw Error();
|
|
|
}; // $FlowFixMe
|
|
|
|
|
|
|
|
|
Object.defineProperty(Fake.prototype, 'props', {
|
|
|
set: function () {
|
|
|
// We use a throwing setter instead of frozen or non-writable props
|
|
|
// because that won't throw in a non-strict mode function.
|
|
|
throw Error();
|
|
|
}
|
|
|
});
|
|
|
|
|
|
if (typeof Reflect === 'object' && Reflect.construct) {
|
|
|
// We construct a different control for this case to include any extra
|
|
|
// frames added by the construct call.
|
|
|
try {
|
|
|
Reflect.construct(Fake, []);
|
|
|
} catch (x) {
|
|
|
control = x;
|
|
|
}
|
|
|
|
|
|
Reflect.construct(fn, [], Fake);
|
|
|
} else {
|
|
|
try {
|
|
|
Fake.call();
|
|
|
} catch (x) {
|
|
|
control = x;
|
|
|
}
|
|
|
|
|
|
fn.call(Fake.prototype);
|
|
|
}
|
|
|
} else {
|
|
|
try {
|
|
|
throw Error();
|
|
|
} catch (x) {
|
|
|
control = x;
|
|
|
}
|
|
|
|
|
|
fn();
|
|
|
}
|
|
|
} catch (sample) {
|
|
|
// This is inlined manually because closure doesn't do it for us.
|
|
|
if (sample && control && typeof sample.stack === 'string') {
|
|
|
// This extracts the first frame from the sample that isn't also in the control.
|
|
|
// Skipping one frame that we assume is the frame that calls the two.
|
|
|
var sampleLines = sample.stack.split('\n');
|
|
|
var controlLines = control.stack.split('\n');
|
|
|
var s = sampleLines.length - 1;
|
|
|
var c = controlLines.length - 1;
|
|
|
|
|
|
while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {
|
|
|
// We expect at least one stack frame to be shared.
|
|
|
// Typically this will be the root most one. However, stack frames may be
|
|
|
// cut off due to maximum stack limits. In this case, one maybe cut off
|
|
|
// earlier than the other. We assume that the sample is longer or the same
|
|
|
// and there for cut off earlier. So we should find the root most frame in
|
|
|
// the sample somewhere in the control.
|
|
|
c--;
|
|
|
}
|
|
|
|
|
|
for (; s >= 1 && c >= 0; s--, c--) {
|
|
|
// Next we find the first one that isn't the same which should be the
|
|
|
// frame that called our sample function and the control.
|
|
|
if (sampleLines[s] !== controlLines[c]) {
|
|
|
// In V8, the first line is describing the message but other VMs don't.
|
|
|
// If we're about to return the first line, and the control is also on the same
|
|
|
// line, that's a pretty good indicator that our sample threw at same line as
|
|
|
// the control. I.e. before we entered the sample frame. So we ignore this result.
|
|
|
// This can happen if you passed a class to function component, or non-function.
|
|
|
if (s !== 1 || c !== 1) {
|
|
|
do {
|
|
|
s--;
|
|
|
c--; // We may still have similar intermediate frames from the construct call.
|
|
|
// The next one that isn't the same should be our match though.
|
|
|
|
|
|
if (c < 0 || sampleLines[s] !== controlLines[c]) {
|
|
|
// V8 adds a "new" prefix for native classes. Let's remove it to make it prettier.
|
|
|
var _frame = '\n' + sampleLines[s].replace(' at new ', ' at '); // If our component frame is labeled "<anonymous>"
|
|
|
// but we have a user-provided "displayName"
|
|
|
// splice it in to make the stack more readable.
|
|
|
|
|
|
|
|
|
if (fn.displayName && _frame.includes('<anonymous>')) {
|
|
|
_frame = _frame.replace('<anonymous>', fn.displayName);
|
|
|
}
|
|
|
|
|
|
{
|
|
|
if (typeof fn === 'function') {
|
|
|
componentFrameCache.set(fn, _frame);
|
|
|
}
|
|
|
} // Return the line we found.
|
|
|
|
|
|
|
|
|
return _frame;
|
|
|
}
|
|
|
} while (s >= 1 && c >= 0);
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
} finally {
|
|
|
reentry = false;
|
|
|
|
|
|
{
|
|
|
ReactCurrentDispatcher$1.current = previousDispatcher;
|
|
|
reenableLogs();
|
|
|
}
|
|
|
|
|
|
Error.prepareStackTrace = previousPrepareStackTrace;
|
|
|
} // Fallback to just using the name if we couldn't make it throw.
|
|
|
|
|
|
|
|
|
var name = fn ? fn.displayName || fn.name : '';
|
|
|
var syntheticFrame = name ? describeBuiltInComponentFrame(name) : '';
|
|
|
|
|
|
{
|
|
|
if (typeof fn === 'function') {
|
|
|
componentFrameCache.set(fn, syntheticFrame);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return syntheticFrame;
|
|
|
}
|
|
|
function describeFunctionComponentFrame(fn, source, ownerFn) {
|
|
|
{
|
|
|
return describeNativeComponentFrame(fn, false);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function shouldConstruct(Component) {
|
|
|
var prototype = Component.prototype;
|
|
|
return !!(prototype && prototype.isReactComponent);
|
|
|
}
|
|
|
|
|
|
function describeUnknownElementTypeFrameInDEV(type, source, ownerFn) {
|
|
|
|
|
|
if (type == null) {
|
|
|
return '';
|
|
|
}
|
|
|
|
|
|
if (typeof type === 'function') {
|
|
|
{
|
|
|
return describeNativeComponentFrame(type, shouldConstruct(type));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (typeof type === 'string') {
|
|
|
return describeBuiltInComponentFrame(type);
|
|
|
}
|
|
|
|
|
|
switch (type) {
|
|
|
case REACT_SUSPENSE_TYPE:
|
|
|
return describeBuiltInComponentFrame('Suspense');
|
|
|
|
|
|
case REACT_SUSPENSE_LIST_TYPE:
|
|
|
return describeBuiltInComponentFrame('SuspenseList');
|
|
|
}
|
|
|
|
|
|
if (typeof type === 'object') {
|
|
|
switch (type.$$typeof) {
|
|
|
case REACT_FORWARD_REF_TYPE:
|
|
|
return describeFunctionComponentFrame(type.render);
|
|
|
|
|
|
case REACT_MEMO_TYPE:
|
|
|
// Memo may contain any component type so we recursively resolve it.
|
|
|
return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn);
|
|
|
|
|
|
case REACT_LAZY_TYPE:
|
|
|
{
|
|
|
var lazyComponent = type;
|
|
|
var payload = lazyComponent._payload;
|
|
|
var init = lazyComponent._init;
|
|
|
|
|
|
try {
|
|
|
// Lazy may contain any component type so we recursively resolve it.
|
|
|
return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn);
|
|
|
} catch (x) {}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return '';
|
|
|
}
|
|
|
|
|
|
var loggedTypeFailures = {};
|
|
|
var ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;
|
|
|
|
|
|
function setCurrentlyValidatingElement(element) {
|
|
|
{
|
|
|
if (element) {
|
|
|
var owner = element._owner;
|
|
|
var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);
|
|
|
ReactDebugCurrentFrame$1.setExtraStackFrame(stack);
|
|
|
} else {
|
|
|
ReactDebugCurrentFrame$1.setExtraStackFrame(null);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function checkPropTypes(typeSpecs, values, location, componentName, element) {
|
|
|
{
|
|
|
// $FlowFixMe This is okay but Flow doesn't know it.
|
|
|
var has = Function.call.bind(hasOwnProperty);
|
|
|
|
|
|
for (var typeSpecName in typeSpecs) {
|
|
|
if (has(typeSpecs, typeSpecName)) {
|
|
|
var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to
|
|
|
// fail the render phase where it didn't fail before. So we log it.
|
|
|
// After these have been cleaned up, we'll let them throw.
|
|
|
|
|
|
try {
|
|
|
// This is intentionally an invariant that gets caught. It's the same
|
|
|
// behavior as without this statement except with a better message.
|
|
|
if (typeof typeSpecs[typeSpecName] !== 'function') {
|
|
|
// eslint-disable-next-line react-internal/prod-error-codes
|
|
|
var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.');
|
|
|
err.name = 'Invariant Violation';
|
|
|
throw err;
|
|
|
}
|
|
|
|
|
|
error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED');
|
|
|
} catch (ex) {
|
|
|
error$1 = ex;
|
|
|
}
|
|
|
|
|
|
if (error$1 && !(error$1 instanceof Error)) {
|
|
|
setCurrentlyValidatingElement(element);
|
|
|
|
|
|
error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1);
|
|
|
|
|
|
setCurrentlyValidatingElement(null);
|
|
|
}
|
|
|
|
|
|
if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) {
|
|
|
// Only monitor this failure once because there tends to be a lot of the
|
|
|
// same error.
|
|
|
loggedTypeFailures[error$1.message] = true;
|
|
|
setCurrentlyValidatingElement(element);
|
|
|
|
|
|
error('Failed %s type: %s', location, error$1.message);
|
|
|
|
|
|
setCurrentlyValidatingElement(null);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function setCurrentlyValidatingElement$1(element) {
|
|
|
{
|
|
|
if (element) {
|
|
|
var owner = element._owner;
|
|
|
var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);
|
|
|
setExtraStackFrame(stack);
|
|
|
} else {
|
|
|
setExtraStackFrame(null);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var propTypesMisspellWarningShown;
|
|
|
|
|
|
{
|
|
|
propTypesMisspellWarningShown = false;
|
|
|
}
|
|
|
|
|
|
function getDeclarationErrorAddendum() {
|
|
|
if (ReactCurrentOwner.current) {
|
|
|
var name = getComponentNameFromType(ReactCurrentOwner.current.type);
|
|
|
|
|
|
if (name) {
|
|
|
return '\n\nCheck the render method of `' + name + '`.';
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return '';
|
|
|
}
|
|
|
|
|
|
function getSourceInfoErrorAddendum(source) {
|
|
|
if (source !== undefined) {
|
|
|
var fileName = source.fileName.replace(/^.*[\\\/]/, '');
|
|
|
var lineNumber = source.lineNumber;
|
|
|
return '\n\nCheck your code at ' + fileName + ':' + lineNumber + '.';
|
|
|
}
|
|
|
|
|
|
return '';
|
|
|
}
|
|
|
|
|
|
function getSourceInfoErrorAddendumForProps(elementProps) {
|
|
|
if (elementProps !== null && elementProps !== undefined) {
|
|
|
return getSourceInfoErrorAddendum(elementProps.__source);
|
|
|
}
|
|
|
|
|
|
return '';
|
|
|
}
|
|
|
/**
|
|
|
* Warn if there's no key explicitly set on dynamic arrays of children or
|
|
|
* object keys are not valid. This allows us to keep track of children between
|
|
|
* updates.
|
|
|
*/
|
|
|
|
|
|
|
|
|
var ownerHasKeyUseWarning = {};
|
|
|
|
|
|
function getCurrentComponentErrorInfo(parentType) {
|
|
|
var info = getDeclarationErrorAddendum();
|
|
|
|
|
|
if (!info) {
|
|
|
var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;
|
|
|
|
|
|
if (parentName) {
|
|
|
info = "\n\nCheck the top-level render call using <" + parentName + ">.";
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return info;
|
|
|
}
|
|
|
/**
|
|
|
* Warn if the element doesn't have an explicit key assigned to it.
|
|
|
* This element is in an array. The array could grow and shrink or be
|
|
|
* reordered. All children that haven't already been validated are required to
|
|
|
* have a "key" property assigned to it. Error statuses are cached so a warning
|
|
|
* will only be shown once.
|
|
|
*
|
|
|
* @internal
|
|
|
* @param {ReactElement} element Element that requires a key.
|
|
|
* @param {*} parentType element's parent's type.
|
|
|
*/
|
|
|
|
|
|
|
|
|
function validateExplicitKey(element, parentType) {
|
|
|
if (!element._store || element._store.validated || element.key != null) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
element._store.validated = true;
|
|
|
var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);
|
|
|
|
|
|
if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a
|
|
|
// property, it may be the creator of the child that's responsible for
|
|
|
// assigning it a key.
|
|
|
|
|
|
var childOwner = '';
|
|
|
|
|
|
if (element && element._owner && element._owner !== ReactCurrentOwner.current) {
|
|
|
// Give the component that originally created this child.
|
|
|
childOwner = " It was passed a child from " + getComponentNameFromType(element._owner.type) + ".";
|
|
|
}
|
|
|
|
|
|
{
|
|
|
setCurrentlyValidatingElement$1(element);
|
|
|
|
|
|
error('Each child in a list should have a unique "key" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner);
|
|
|
|
|
|
setCurrentlyValidatingElement$1(null);
|
|
|
}
|
|
|
}
|
|
|
/**
|
|
|
* Ensure that every element either is passed in a static location, in an
|
|
|
* array with an explicit keys property defined, or in an object literal
|
|
|
* with valid key property.
|
|
|
*
|
|
|
* @internal
|
|
|
* @param {ReactNode} node Statically passed child of any type.
|
|
|
* @param {*} parentType node's parent's type.
|
|
|
*/
|
|
|
|
|
|
|
|
|
function validateChildKeys(node, parentType) {
|
|
|
if (typeof node !== 'object') {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (isArray(node)) {
|
|
|
for (var i = 0; i < node.length; i++) {
|
|
|
var child = node[i];
|
|
|
|
|
|
if (isValidElement(child)) {
|
|
|
validateExplicitKey(child, parentType);
|
|
|
}
|
|
|
}
|
|
|
} else if (isValidElement(node)) {
|
|
|
// This element was passed in a valid location.
|
|
|
if (node._store) {
|
|
|
node._store.validated = true;
|
|
|
}
|
|
|
} else if (node) {
|
|
|
var iteratorFn = getIteratorFn(node);
|
|
|
|
|
|
if (typeof iteratorFn === 'function') {
|
|
|
// Entry iterators used to provide implicit keys,
|
|
|
// but now we print a separate warning for them later.
|
|
|
if (iteratorFn !== node.entries) {
|
|
|
var iterator = iteratorFn.call(node);
|
|
|
var step;
|
|
|
|
|
|
while (!(step = iterator.next()).done) {
|
|
|
if (isValidElement(step.value)) {
|
|
|
validateExplicitKey(step.value, parentType);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
/**
|
|
|
* Given an element, validate that its props follow the propTypes definition,
|
|
|
* provided by the type.
|
|
|
*
|
|
|
* @param {ReactElement} element
|
|
|
*/
|
|
|
|
|
|
|
|
|
function validatePropTypes(element) {
|
|
|
{
|
|
|
var type = element.type;
|
|
|
|
|
|
if (type === null || type === undefined || typeof type === 'string') {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
var propTypes;
|
|
|
|
|
|
if (typeof type === 'function') {
|
|
|
propTypes = type.propTypes;
|
|
|
} else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here.
|
|
|
// Inner props are checked in the reconciler.
|
|
|
type.$$typeof === REACT_MEMO_TYPE)) {
|
|
|
propTypes = type.propTypes;
|
|
|
} else {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (propTypes) {
|
|
|
// Intentionally inside to avoid triggering lazy initializers:
|
|
|
var name = getComponentNameFromType(type);
|
|
|
checkPropTypes(propTypes, element.props, 'prop', name, element);
|
|
|
} else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) {
|
|
|
propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers:
|
|
|
|
|
|
var _name = getComponentNameFromType(type);
|
|
|
|
|
|
error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', _name || 'Unknown');
|
|
|
}
|
|
|
|
|
|
if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) {
|
|
|
error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.');
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
/**
|
|
|
* Given a fragment, validate that it can only be provided with fragment props
|
|
|
* @param {ReactElement} fragment
|
|
|
*/
|
|
|
|
|
|
|
|
|
function validateFragmentProps(fragment) {
|
|
|
{
|
|
|
var keys = Object.keys(fragment.props);
|
|
|
|
|
|
for (var i = 0; i < keys.length; i++) {
|
|
|
var key = keys[i];
|
|
|
|
|
|
if (key !== 'children' && key !== 'key') {
|
|
|
setCurrentlyValidatingElement$1(fragment);
|
|
|
|
|
|
error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);
|
|
|
|
|
|
setCurrentlyValidatingElement$1(null);
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (fragment.ref !== null) {
|
|
|
setCurrentlyValidatingElement$1(fragment);
|
|
|
|
|
|
error('Invalid attribute `ref` supplied to `React.Fragment`.');
|
|
|
|
|
|
setCurrentlyValidatingElement$1(null);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
function createElementWithValidation(type, props, children) {
|
|
|
var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to
|
|
|
// succeed and there will likely be errors in render.
|
|
|
|
|
|
if (!validType) {
|
|
|
var info = '';
|
|
|
|
|
|
if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {
|
|
|
info += ' You likely forgot to export your component from the file ' + "it's defined in, or you might have mixed up default and named imports.";
|
|
|
}
|
|
|
|
|
|
var sourceInfo = getSourceInfoErrorAddendumForProps(props);
|
|
|
|
|
|
if (sourceInfo) {
|
|
|
info += sourceInfo;
|
|
|
} else {
|
|
|
info += getDeclarationErrorAddendum();
|
|
|
}
|
|
|
|
|
|
var typeString;
|
|
|
|
|
|
if (type === null) {
|
|
|
typeString = 'null';
|
|
|
} else if (isArray(type)) {
|
|
|
typeString = 'array';
|
|
|
} else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {
|
|
|
typeString = "<" + (getComponentNameFromType(type.type) || 'Unknown') + " />";
|
|
|
info = ' Did you accidentally export a JSX literal instead of a component?';
|
|
|
} else {
|
|
|
typeString = typeof type;
|
|
|
}
|
|
|
|
|
|
{
|
|
|
error('React.createElement: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var element = createElement.apply(this, arguments); // The result can be nullish if a mock or a custom function is used.
|
|
|
// TODO: Drop this when these are no longer allowed as the type argument.
|
|
|
|
|
|
if (element == null) {
|
|
|
return element;
|
|
|
} // Skip key warning if the type isn't valid since our key validation logic
|
|
|
// doesn't expect a non-string/function type and can throw confusing errors.
|
|
|
// We don't want exception behavior to differ between dev and prod.
|
|
|
// (Rendering will throw with a helpful message and as soon as the type is
|
|
|
// fixed, the key warnings will appear.)
|
|
|
|
|
|
|
|
|
if (validType) {
|
|
|
for (var i = 2; i < arguments.length; i++) {
|
|
|
validateChildKeys(arguments[i], type);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (type === REACT_FRAGMENT_TYPE) {
|
|
|
validateFragmentProps(element);
|
|
|
} else {
|
|
|
validatePropTypes(element);
|
|
|
}
|
|
|
|
|
|
return element;
|
|
|
}
|
|
|
var didWarnAboutDeprecatedCreateFactory = false;
|
|
|
function createFactoryWithValidation(type) {
|
|
|
var validatedFactory = createElementWithValidation.bind(null, type);
|
|
|
validatedFactory.type = type;
|
|
|
|
|
|
{
|
|
|
if (!didWarnAboutDeprecatedCreateFactory) {
|
|
|
didWarnAboutDeprecatedCreateFactory = true;
|
|
|
|
|
|
warn('React.createFactory() is deprecated and will be removed in ' + 'a future major release. Consider using JSX ' + 'or use React.createElement() directly instead.');
|
|
|
} // Legacy hook: remove it
|
|
|
|
|
|
|
|
|
Object.defineProperty(validatedFactory, 'type', {
|
|
|
enumerable: false,
|
|
|
get: function () {
|
|
|
warn('Factory.type is deprecated. Access the class directly ' + 'before passing it to createFactory.');
|
|
|
|
|
|
Object.defineProperty(this, 'type', {
|
|
|
value: type
|
|
|
});
|
|
|
return type;
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
|
|
|
return validatedFactory;
|
|
|
}
|
|
|
function cloneElementWithValidation(element, props, children) {
|
|
|
var newElement = cloneElement.apply(this, arguments);
|
|
|
|
|
|
for (var i = 2; i < arguments.length; i++) {
|
|
|
validateChildKeys(arguments[i], newElement.type);
|
|
|
}
|
|
|
|
|
|
validatePropTypes(newElement);
|
|
|
return newElement;
|
|
|
}
|
|
|
|
|
|
function startTransition(scope, options) {
|
|
|
var prevTransition = ReactCurrentBatchConfig.transition;
|
|
|
ReactCurrentBatchConfig.transition = {};
|
|
|
var currentTransition = ReactCurrentBatchConfig.transition;
|
|
|
|
|
|
{
|
|
|
ReactCurrentBatchConfig.transition._updatedFibers = new Set();
|
|
|
}
|
|
|
|
|
|
try {
|
|
|
scope();
|
|
|
} finally {
|
|
|
ReactCurrentBatchConfig.transition = prevTransition;
|
|
|
|
|
|
{
|
|
|
if (prevTransition === null && currentTransition._updatedFibers) {
|
|
|
var updatedFibersCount = currentTransition._updatedFibers.size;
|
|
|
|
|
|
if (updatedFibersCount > 10) {
|
|
|
warn('Detected a large number of updates inside startTransition. ' + 'If this is due to a subscription please re-write it to use React provided hooks. ' + 'Otherwise concurrent mode guarantees are off the table.');
|
|
|
}
|
|
|
|
|
|
currentTransition._updatedFibers.clear();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var didWarnAboutMessageChannel = false;
|
|
|
var enqueueTaskImpl = null;
|
|
|
function enqueueTask(task) {
|
|
|
if (enqueueTaskImpl === null) {
|
|
|
try {
|
|
|
// read require off the module object to get around the bundlers.
|
|
|
// we don't want them to detect a require and bundle a Node polyfill.
|
|
|
var requireString = ('require' + Math.random()).slice(0, 7);
|
|
|
var nodeRequire = module && module[requireString]; // assuming we're in node, let's try to get node's
|
|
|
// version of setImmediate, bypassing fake timers if any.
|
|
|
|
|
|
enqueueTaskImpl = nodeRequire.call(module, 'timers').setImmediate;
|
|
|
} catch (_err) {
|
|
|
// we're in a browser
|
|
|
// we can't use regular timers because they may still be faked
|
|
|
// so we try MessageChannel+postMessage instead
|
|
|
enqueueTaskImpl = function (callback) {
|
|
|
{
|
|
|
if (didWarnAboutMessageChannel === false) {
|
|
|
didWarnAboutMessageChannel = true;
|
|
|
|
|
|
if (typeof MessageChannel === 'undefined') {
|
|
|
error('This browser does not have a MessageChannel implementation, ' + 'so enqueuing tasks via await act(async () => ...) will fail. ' + 'Please file an issue at https://github.com/facebook/react/issues ' + 'if you encounter this warning.');
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var channel = new MessageChannel();
|
|
|
channel.port1.onmessage = callback;
|
|
|
channel.port2.postMessage(undefined);
|
|
|
};
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return enqueueTaskImpl(task);
|
|
|
}
|
|
|
|
|
|
var actScopeDepth = 0;
|
|
|
var didWarnNoAwaitAct = false;
|
|
|
function act(callback) {
|
|
|
{
|
|
|
// `act` calls can be nested, so we track the depth. This represents the
|
|
|
// number of `act` scopes on the stack.
|
|
|
var prevActScopeDepth = actScopeDepth;
|
|
|
actScopeDepth++;
|
|
|
|
|
|
if (ReactCurrentActQueue.current === null) {
|
|
|
// This is the outermost `act` scope. Initialize the queue. The reconciler
|
|
|
// will detect the queue and use it instead of Scheduler.
|
|
|
ReactCurrentActQueue.current = [];
|
|
|
}
|
|
|
|
|
|
var prevIsBatchingLegacy = ReactCurrentActQueue.isBatchingLegacy;
|
|
|
var result;
|
|
|
|
|
|
try {
|
|
|
// Used to reproduce behavior of `batchedUpdates` in legacy mode. Only
|
|
|
// set to `true` while the given callback is executed, not for updates
|
|
|
// triggered during an async event, because this is how the legacy
|
|
|
// implementation of `act` behaved.
|
|
|
ReactCurrentActQueue.isBatchingLegacy = true;
|
|
|
result = callback(); // Replicate behavior of original `act` implementation in legacy mode,
|
|
|
// which flushed updates immediately after the scope function exits, even
|
|
|
// if it's an async function.
|
|
|
|
|
|
if (!prevIsBatchingLegacy && ReactCurrentActQueue.didScheduleLegacyUpdate) {
|
|
|
var queue = ReactCurrentActQueue.current;
|
|
|
|
|
|
if (queue !== null) {
|
|
|
ReactCurrentActQueue.didScheduleLegacyUpdate = false;
|
|
|
flushActQueue(queue);
|
|
|
}
|
|
|
}
|
|
|
} catch (error) {
|
|
|
popActScope(prevActScopeDepth);
|
|
|
throw error;
|
|
|
} finally {
|
|
|
ReactCurrentActQueue.isBatchingLegacy = prevIsBatchingLegacy;
|
|
|
}
|
|
|
|
|
|
if (result !== null && typeof result === 'object' && typeof result.then === 'function') {
|
|
|
var thenableResult = result; // The callback is an async function (i.e. returned a promise). Wait
|
|
|
// for it to resolve before exiting the current scope.
|
|
|
|
|
|
var wasAwaited = false;
|
|
|
var thenable = {
|
|
|
then: function (resolve, reject) {
|
|
|
wasAwaited = true;
|
|
|
thenableResult.then(function (returnValue) {
|
|
|
popActScope(prevActScopeDepth);
|
|
|
|
|
|
if (actScopeDepth === 0) {
|
|
|
// We've exited the outermost act scope. Recursively flush the
|
|
|
// queue until there's no remaining work.
|
|
|
recursivelyFlushAsyncActWork(returnValue, resolve, reject);
|
|
|
} else {
|
|
|
resolve(returnValue);
|
|
|
}
|
|
|
}, function (error) {
|
|
|
// The callback threw an error.
|
|
|
popActScope(prevActScopeDepth);
|
|
|
reject(error);
|
|
|
});
|
|
|
}
|
|
|
};
|
|
|
|
|
|
{
|
|
|
if (!didWarnNoAwaitAct && typeof Promise !== 'undefined') {
|
|
|
// eslint-disable-next-line no-undef
|
|
|
Promise.resolve().then(function () {}).then(function () {
|
|
|
if (!wasAwaited) {
|
|
|
didWarnNoAwaitAct = true;
|
|
|
|
|
|
error('You called act(async () => ...) without await. ' + 'This could lead to unexpected testing behaviour, ' + 'interleaving multiple act calls and mixing their ' + 'scopes. ' + 'You should - await act(async () => ...);');
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return thenable;
|
|
|
} else {
|
|
|
var returnValue = result; // The callback is not an async function. Exit the current scope
|
|
|
// immediately, without awaiting.
|
|
|
|
|
|
popActScope(prevActScopeDepth);
|
|
|
|
|
|
if (actScopeDepth === 0) {
|
|
|
// Exiting the outermost act scope. Flush the queue.
|
|
|
var _queue = ReactCurrentActQueue.current;
|
|
|
|
|
|
if (_queue !== null) {
|
|
|
flushActQueue(_queue);
|
|
|
ReactCurrentActQueue.current = null;
|
|
|
} // Return a thenable. If the user awaits it, we'll flush again in
|
|
|
// case additional work was scheduled by a microtask.
|
|
|
|
|
|
|
|
|
var _thenable = {
|
|
|
then: function (resolve, reject) {
|
|
|
// Confirm we haven't re-entered another `act` scope, in case
|
|
|
// the user does something weird like await the thenable
|
|
|
// multiple times.
|
|
|
if (ReactCurrentActQueue.current === null) {
|
|
|
// Recursively flush the queue until there's no remaining work.
|
|
|
ReactCurrentActQueue.current = [];
|
|
|
recursivelyFlushAsyncActWork(returnValue, resolve, reject);
|
|
|
} else {
|
|
|
resolve(returnValue);
|
|
|
}
|
|
|
}
|
|
|
};
|
|
|
return _thenable;
|
|
|
} else {
|
|
|
// Since we're inside a nested `act` scope, the returned thenable
|
|
|
// immediately resolves. The outer scope will flush the queue.
|
|
|
var _thenable2 = {
|
|
|
then: function (resolve, reject) {
|
|
|
resolve(returnValue);
|
|
|
}
|
|
|
};
|
|
|
return _thenable2;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function popActScope(prevActScopeDepth) {
|
|
|
{
|
|
|
if (prevActScopeDepth !== actScopeDepth - 1) {
|
|
|
error('You seem to have overlapping act() calls, this is not supported. ' + 'Be sure to await previous act() calls before making a new one. ');
|
|
|
}
|
|
|
|
|
|
actScopeDepth = prevActScopeDepth;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function recursivelyFlushAsyncActWork(returnValue, resolve, reject) {
|
|
|
{
|
|
|
var queue = ReactCurrentActQueue.current;
|
|
|
|
|
|
if (queue !== null) {
|
|
|
try {
|
|
|
flushActQueue(queue);
|
|
|
enqueueTask(function () {
|
|
|
if (queue.length === 0) {
|
|
|
// No additional work was scheduled. Finish.
|
|
|
ReactCurrentActQueue.current = null;
|
|
|
resolve(returnValue);
|
|
|
} else {
|
|
|
// Keep flushing work until there's none left.
|
|
|
recursivelyFlushAsyncActWork(returnValue, resolve, reject);
|
|
|
}
|
|
|
});
|
|
|
} catch (error) {
|
|
|
reject(error);
|
|
|
}
|
|
|
} else {
|
|
|
resolve(returnValue);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var isFlushing = false;
|
|
|
|
|
|
function flushActQueue(queue) {
|
|
|
{
|
|
|
if (!isFlushing) {
|
|
|
// Prevent re-entrance.
|
|
|
isFlushing = true;
|
|
|
var i = 0;
|
|
|
|
|
|
try {
|
|
|
for (; i < queue.length; i++) {
|
|
|
var callback = queue[i];
|
|
|
|
|
|
do {
|
|
|
callback = callback(true);
|
|
|
} while (callback !== null);
|
|
|
}
|
|
|
|
|
|
queue.length = 0;
|
|
|
} catch (error) {
|
|
|
// If something throws, leave the remaining callbacks on the queue.
|
|
|
queue = queue.slice(i + 1);
|
|
|
throw error;
|
|
|
} finally {
|
|
|
isFlushing = false;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var createElement$1 = createElementWithValidation ;
|
|
|
var cloneElement$1 = cloneElementWithValidation ;
|
|
|
var createFactory = createFactoryWithValidation ;
|
|
|
var Children = {
|
|
|
map: mapChildren,
|
|
|
forEach: forEachChildren,
|
|
|
count: countChildren,
|
|
|
toArray: toArray,
|
|
|
only: onlyChild
|
|
|
};
|
|
|
|
|
|
exports.Children = Children;
|
|
|
exports.Component = Component;
|
|
|
exports.Fragment = REACT_FRAGMENT_TYPE;
|
|
|
exports.Profiler = REACT_PROFILER_TYPE;
|
|
|
exports.PureComponent = PureComponent;
|
|
|
exports.StrictMode = REACT_STRICT_MODE_TYPE;
|
|
|
exports.Suspense = REACT_SUSPENSE_TYPE;
|
|
|
exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = ReactSharedInternals;
|
|
|
exports.cloneElement = cloneElement$1;
|
|
|
exports.createContext = createContext;
|
|
|
exports.createElement = createElement$1;
|
|
|
exports.createFactory = createFactory;
|
|
|
exports.createRef = createRef;
|
|
|
exports.forwardRef = forwardRef;
|
|
|
exports.isValidElement = isValidElement;
|
|
|
exports.lazy = lazy;
|
|
|
exports.memo = memo;
|
|
|
exports.startTransition = startTransition;
|
|
|
exports.unstable_act = act;
|
|
|
exports.useCallback = useCallback;
|
|
|
exports.useContext = useContext;
|
|
|
exports.useDebugValue = useDebugValue;
|
|
|
exports.useDeferredValue = useDeferredValue;
|
|
|
exports.useEffect = useEffect;
|
|
|
exports.useId = useId;
|
|
|
exports.useImperativeHandle = useImperativeHandle;
|
|
|
exports.useInsertionEffect = useInsertionEffect;
|
|
|
exports.useLayoutEffect = useLayoutEffect;
|
|
|
exports.useMemo = useMemo;
|
|
|
exports.useReducer = useReducer;
|
|
|
exports.useRef = useRef;
|
|
|
exports.useState = useState;
|
|
|
exports.useSyncExternalStore = useSyncExternalStore;
|
|
|
exports.useTransition = useTransition;
|
|
|
exports.version = ReactVersion;
|
|
|
/* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */
|
|
|
if (
|
|
|
typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&
|
|
|
typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop ===
|
|
|
'function'
|
|
|
) {
|
|
|
__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error());
|
|
|
}
|
|
|
|
|
|
})();
|
|
|
}
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/react/index.js":
|
|
|
/*!*************************************!*\
|
|
|
!*** ./node_modules/react/index.js ***!
|
|
|
\*************************************/
|
|
|
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
if (false) {} else {
|
|
|
module.exports = __webpack_require__(/*! ./cjs/react.development.js */ "./node_modules/react/cjs/react.development.js");
|
|
|
}
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/scheduler/cjs/scheduler.development.js":
|
|
|
/*!*************************************************************!*\
|
|
|
!*** ./node_modules/scheduler/cjs/scheduler.development.js ***!
|
|
|
\*************************************************************/
|
|
|
/***/ ((__unused_webpack_module, exports) => {
|
|
|
|
|
|
"use strict";
|
|
|
/**
|
|
|
* @license React
|
|
|
* scheduler.development.js
|
|
|
*
|
|
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
|
*
|
|
|
* This source code is licensed under the MIT license found in the
|
|
|
* LICENSE file in the root directory of this source tree.
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
if (true) {
|
|
|
(function() {
|
|
|
|
|
|
'use strict';
|
|
|
|
|
|
/* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */
|
|
|
if (
|
|
|
typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&
|
|
|
typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart ===
|
|
|
'function'
|
|
|
) {
|
|
|
__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error());
|
|
|
}
|
|
|
var enableSchedulerDebugging = false;
|
|
|
var enableProfiling = false;
|
|
|
var frameYieldMs = 5;
|
|
|
|
|
|
function push(heap, node) {
|
|
|
var index = heap.length;
|
|
|
heap.push(node);
|
|
|
siftUp(heap, node, index);
|
|
|
}
|
|
|
function peek(heap) {
|
|
|
return heap.length === 0 ? null : heap[0];
|
|
|
}
|
|
|
function pop(heap) {
|
|
|
if (heap.length === 0) {
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
var first = heap[0];
|
|
|
var last = heap.pop();
|
|
|
|
|
|
if (last !== first) {
|
|
|
heap[0] = last;
|
|
|
siftDown(heap, last, 0);
|
|
|
}
|
|
|
|
|
|
return first;
|
|
|
}
|
|
|
|
|
|
function siftUp(heap, node, i) {
|
|
|
var index = i;
|
|
|
|
|
|
while (index > 0) {
|
|
|
var parentIndex = index - 1 >>> 1;
|
|
|
var parent = heap[parentIndex];
|
|
|
|
|
|
if (compare(parent, node) > 0) {
|
|
|
// The parent is larger. Swap positions.
|
|
|
heap[parentIndex] = node;
|
|
|
heap[index] = parent;
|
|
|
index = parentIndex;
|
|
|
} else {
|
|
|
// The parent is smaller. Exit.
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function siftDown(heap, node, i) {
|
|
|
var index = i;
|
|
|
var length = heap.length;
|
|
|
var halfLength = length >>> 1;
|
|
|
|
|
|
while (index < halfLength) {
|
|
|
var leftIndex = (index + 1) * 2 - 1;
|
|
|
var left = heap[leftIndex];
|
|
|
var rightIndex = leftIndex + 1;
|
|
|
var right = heap[rightIndex]; // If the left or right node is smaller, swap with the smaller of those.
|
|
|
|
|
|
if (compare(left, node) < 0) {
|
|
|
if (rightIndex < length && compare(right, left) < 0) {
|
|
|
heap[index] = right;
|
|
|
heap[rightIndex] = node;
|
|
|
index = rightIndex;
|
|
|
} else {
|
|
|
heap[index] = left;
|
|
|
heap[leftIndex] = node;
|
|
|
index = leftIndex;
|
|
|
}
|
|
|
} else if (rightIndex < length && compare(right, node) < 0) {
|
|
|
heap[index] = right;
|
|
|
heap[rightIndex] = node;
|
|
|
index = rightIndex;
|
|
|
} else {
|
|
|
// Neither child is smaller. Exit.
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function compare(a, b) {
|
|
|
// Compare sort index first, then task id.
|
|
|
var diff = a.sortIndex - b.sortIndex;
|
|
|
return diff !== 0 ? diff : a.id - b.id;
|
|
|
}
|
|
|
|
|
|
// TODO: Use symbols?
|
|
|
var ImmediatePriority = 1;
|
|
|
var UserBlockingPriority = 2;
|
|
|
var NormalPriority = 3;
|
|
|
var LowPriority = 4;
|
|
|
var IdlePriority = 5;
|
|
|
|
|
|
function markTaskErrored(task, ms) {
|
|
|
}
|
|
|
|
|
|
/* eslint-disable no-var */
|
|
|
|
|
|
var hasPerformanceNow = typeof performance === 'object' && typeof performance.now === 'function';
|
|
|
|
|
|
if (hasPerformanceNow) {
|
|
|
var localPerformance = performance;
|
|
|
|
|
|
exports.unstable_now = function () {
|
|
|
return localPerformance.now();
|
|
|
};
|
|
|
} else {
|
|
|
var localDate = Date;
|
|
|
var initialTime = localDate.now();
|
|
|
|
|
|
exports.unstable_now = function () {
|
|
|
return localDate.now() - initialTime;
|
|
|
};
|
|
|
} // Max 31 bit integer. The max integer size in V8 for 32-bit systems.
|
|
|
// Math.pow(2, 30) - 1
|
|
|
// 0b111111111111111111111111111111
|
|
|
|
|
|
|
|
|
var maxSigned31BitInt = 1073741823; // Times out immediately
|
|
|
|
|
|
var IMMEDIATE_PRIORITY_TIMEOUT = -1; // Eventually times out
|
|
|
|
|
|
var USER_BLOCKING_PRIORITY_TIMEOUT = 250;
|
|
|
var NORMAL_PRIORITY_TIMEOUT = 5000;
|
|
|
var LOW_PRIORITY_TIMEOUT = 10000; // Never times out
|
|
|
|
|
|
var IDLE_PRIORITY_TIMEOUT = maxSigned31BitInt; // Tasks are stored on a min heap
|
|
|
|
|
|
var taskQueue = [];
|
|
|
var timerQueue = []; // Incrementing id counter. Used to maintain insertion order.
|
|
|
|
|
|
var taskIdCounter = 1; // Pausing the scheduler is useful for debugging.
|
|
|
var currentTask = null;
|
|
|
var currentPriorityLevel = NormalPriority; // This is set while performing work, to prevent re-entrance.
|
|
|
|
|
|
var isPerformingWork = false;
|
|
|
var isHostCallbackScheduled = false;
|
|
|
var isHostTimeoutScheduled = false; // Capture local references to native APIs, in case a polyfill overrides them.
|
|
|
|
|
|
var localSetTimeout = typeof setTimeout === 'function' ? setTimeout : null;
|
|
|
var localClearTimeout = typeof clearTimeout === 'function' ? clearTimeout : null;
|
|
|
var localSetImmediate = typeof setImmediate !== 'undefined' ? setImmediate : null; // IE and Node.js + jsdom
|
|
|
|
|
|
var isInputPending = typeof navigator !== 'undefined' && navigator.scheduling !== undefined && navigator.scheduling.isInputPending !== undefined ? navigator.scheduling.isInputPending.bind(navigator.scheduling) : null;
|
|
|
|
|
|
function advanceTimers(currentTime) {
|
|
|
// Check for tasks that are no longer delayed and add them to the queue.
|
|
|
var timer = peek(timerQueue);
|
|
|
|
|
|
while (timer !== null) {
|
|
|
if (timer.callback === null) {
|
|
|
// Timer was cancelled.
|
|
|
pop(timerQueue);
|
|
|
} else if (timer.startTime <= currentTime) {
|
|
|
// Timer fired. Transfer to the task queue.
|
|
|
pop(timerQueue);
|
|
|
timer.sortIndex = timer.expirationTime;
|
|
|
push(taskQueue, timer);
|
|
|
} else {
|
|
|
// Remaining timers are pending.
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
timer = peek(timerQueue);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function handleTimeout(currentTime) {
|
|
|
isHostTimeoutScheduled = false;
|
|
|
advanceTimers(currentTime);
|
|
|
|
|
|
if (!isHostCallbackScheduled) {
|
|
|
if (peek(taskQueue) !== null) {
|
|
|
isHostCallbackScheduled = true;
|
|
|
requestHostCallback(flushWork);
|
|
|
} else {
|
|
|
var firstTimer = peek(timerQueue);
|
|
|
|
|
|
if (firstTimer !== null) {
|
|
|
requestHostTimeout(handleTimeout, firstTimer.startTime - currentTime);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function flushWork(hasTimeRemaining, initialTime) {
|
|
|
|
|
|
|
|
|
isHostCallbackScheduled = false;
|
|
|
|
|
|
if (isHostTimeoutScheduled) {
|
|
|
// We scheduled a timeout but it's no longer needed. Cancel it.
|
|
|
isHostTimeoutScheduled = false;
|
|
|
cancelHostTimeout();
|
|
|
}
|
|
|
|
|
|
isPerformingWork = true;
|
|
|
var previousPriorityLevel = currentPriorityLevel;
|
|
|
|
|
|
try {
|
|
|
if (enableProfiling) {
|
|
|
try {
|
|
|
return workLoop(hasTimeRemaining, initialTime);
|
|
|
} catch (error) {
|
|
|
if (currentTask !== null) {
|
|
|
var currentTime = exports.unstable_now();
|
|
|
markTaskErrored(currentTask, currentTime);
|
|
|
currentTask.isQueued = false;
|
|
|
}
|
|
|
|
|
|
throw error;
|
|
|
}
|
|
|
} else {
|
|
|
// No catch in prod code path.
|
|
|
return workLoop(hasTimeRemaining, initialTime);
|
|
|
}
|
|
|
} finally {
|
|
|
currentTask = null;
|
|
|
currentPriorityLevel = previousPriorityLevel;
|
|
|
isPerformingWork = false;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function workLoop(hasTimeRemaining, initialTime) {
|
|
|
var currentTime = initialTime;
|
|
|
advanceTimers(currentTime);
|
|
|
currentTask = peek(taskQueue);
|
|
|
|
|
|
while (currentTask !== null && !(enableSchedulerDebugging )) {
|
|
|
if (currentTask.expirationTime > currentTime && (!hasTimeRemaining || shouldYieldToHost())) {
|
|
|
// This currentTask hasn't expired, and we've reached the deadline.
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
var callback = currentTask.callback;
|
|
|
|
|
|
if (typeof callback === 'function') {
|
|
|
currentTask.callback = null;
|
|
|
currentPriorityLevel = currentTask.priorityLevel;
|
|
|
var didUserCallbackTimeout = currentTask.expirationTime <= currentTime;
|
|
|
|
|
|
var continuationCallback = callback(didUserCallbackTimeout);
|
|
|
currentTime = exports.unstable_now();
|
|
|
|
|
|
if (typeof continuationCallback === 'function') {
|
|
|
currentTask.callback = continuationCallback;
|
|
|
} else {
|
|
|
|
|
|
if (currentTask === peek(taskQueue)) {
|
|
|
pop(taskQueue);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
advanceTimers(currentTime);
|
|
|
} else {
|
|
|
pop(taskQueue);
|
|
|
}
|
|
|
|
|
|
currentTask = peek(taskQueue);
|
|
|
} // Return whether there's additional work
|
|
|
|
|
|
|
|
|
if (currentTask !== null) {
|
|
|
return true;
|
|
|
} else {
|
|
|
var firstTimer = peek(timerQueue);
|
|
|
|
|
|
if (firstTimer !== null) {
|
|
|
requestHostTimeout(handleTimeout, firstTimer.startTime - currentTime);
|
|
|
}
|
|
|
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function unstable_runWithPriority(priorityLevel, eventHandler) {
|
|
|
switch (priorityLevel) {
|
|
|
case ImmediatePriority:
|
|
|
case UserBlockingPriority:
|
|
|
case NormalPriority:
|
|
|
case LowPriority:
|
|
|
case IdlePriority:
|
|
|
break;
|
|
|
|
|
|
default:
|
|
|
priorityLevel = NormalPriority;
|
|
|
}
|
|
|
|
|
|
var previousPriorityLevel = currentPriorityLevel;
|
|
|
currentPriorityLevel = priorityLevel;
|
|
|
|
|
|
try {
|
|
|
return eventHandler();
|
|
|
} finally {
|
|
|
currentPriorityLevel = previousPriorityLevel;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function unstable_next(eventHandler) {
|
|
|
var priorityLevel;
|
|
|
|
|
|
switch (currentPriorityLevel) {
|
|
|
case ImmediatePriority:
|
|
|
case UserBlockingPriority:
|
|
|
case NormalPriority:
|
|
|
// Shift down to normal priority
|
|
|
priorityLevel = NormalPriority;
|
|
|
break;
|
|
|
|
|
|
default:
|
|
|
// Anything lower than normal priority should remain at the current level.
|
|
|
priorityLevel = currentPriorityLevel;
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
var previousPriorityLevel = currentPriorityLevel;
|
|
|
currentPriorityLevel = priorityLevel;
|
|
|
|
|
|
try {
|
|
|
return eventHandler();
|
|
|
} finally {
|
|
|
currentPriorityLevel = previousPriorityLevel;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function unstable_wrapCallback(callback) {
|
|
|
var parentPriorityLevel = currentPriorityLevel;
|
|
|
return function () {
|
|
|
// This is a fork of runWithPriority, inlined for performance.
|
|
|
var previousPriorityLevel = currentPriorityLevel;
|
|
|
currentPriorityLevel = parentPriorityLevel;
|
|
|
|
|
|
try {
|
|
|
return callback.apply(this, arguments);
|
|
|
} finally {
|
|
|
currentPriorityLevel = previousPriorityLevel;
|
|
|
}
|
|
|
};
|
|
|
}
|
|
|
|
|
|
function unstable_scheduleCallback(priorityLevel, callback, options) {
|
|
|
var currentTime = exports.unstable_now();
|
|
|
var startTime;
|
|
|
|
|
|
if (typeof options === 'object' && options !== null) {
|
|
|
var delay = options.delay;
|
|
|
|
|
|
if (typeof delay === 'number' && delay > 0) {
|
|
|
startTime = currentTime + delay;
|
|
|
} else {
|
|
|
startTime = currentTime;
|
|
|
}
|
|
|
} else {
|
|
|
startTime = currentTime;
|
|
|
}
|
|
|
|
|
|
var timeout;
|
|
|
|
|
|
switch (priorityLevel) {
|
|
|
case ImmediatePriority:
|
|
|
timeout = IMMEDIATE_PRIORITY_TIMEOUT;
|
|
|
break;
|
|
|
|
|
|
case UserBlockingPriority:
|
|
|
timeout = USER_BLOCKING_PRIORITY_TIMEOUT;
|
|
|
break;
|
|
|
|
|
|
case IdlePriority:
|
|
|
timeout = IDLE_PRIORITY_TIMEOUT;
|
|
|
break;
|
|
|
|
|
|
case LowPriority:
|
|
|
timeout = LOW_PRIORITY_TIMEOUT;
|
|
|
break;
|
|
|
|
|
|
case NormalPriority:
|
|
|
default:
|
|
|
timeout = NORMAL_PRIORITY_TIMEOUT;
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
var expirationTime = startTime + timeout;
|
|
|
var newTask = {
|
|
|
id: taskIdCounter++,
|
|
|
callback: callback,
|
|
|
priorityLevel: priorityLevel,
|
|
|
startTime: startTime,
|
|
|
expirationTime: expirationTime,
|
|
|
sortIndex: -1
|
|
|
};
|
|
|
|
|
|
if (startTime > currentTime) {
|
|
|
// This is a delayed task.
|
|
|
newTask.sortIndex = startTime;
|
|
|
push(timerQueue, newTask);
|
|
|
|
|
|
if (peek(taskQueue) === null && newTask === peek(timerQueue)) {
|
|
|
// All tasks are delayed, and this is the task with the earliest delay.
|
|
|
if (isHostTimeoutScheduled) {
|
|
|
// Cancel an existing timeout.
|
|
|
cancelHostTimeout();
|
|
|
} else {
|
|
|
isHostTimeoutScheduled = true;
|
|
|
} // Schedule a timeout.
|
|
|
|
|
|
|
|
|
requestHostTimeout(handleTimeout, startTime - currentTime);
|
|
|
}
|
|
|
} else {
|
|
|
newTask.sortIndex = expirationTime;
|
|
|
push(taskQueue, newTask);
|
|
|
// wait until the next time we yield.
|
|
|
|
|
|
|
|
|
if (!isHostCallbackScheduled && !isPerformingWork) {
|
|
|
isHostCallbackScheduled = true;
|
|
|
requestHostCallback(flushWork);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return newTask;
|
|
|
}
|
|
|
|
|
|
function unstable_pauseExecution() {
|
|
|
}
|
|
|
|
|
|
function unstable_continueExecution() {
|
|
|
|
|
|
if (!isHostCallbackScheduled && !isPerformingWork) {
|
|
|
isHostCallbackScheduled = true;
|
|
|
requestHostCallback(flushWork);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function unstable_getFirstCallbackNode() {
|
|
|
return peek(taskQueue);
|
|
|
}
|
|
|
|
|
|
function unstable_cancelCallback(task) {
|
|
|
// remove from the queue because you can't remove arbitrary nodes from an
|
|
|
// array based heap, only the first one.)
|
|
|
|
|
|
|
|
|
task.callback = null;
|
|
|
}
|
|
|
|
|
|
function unstable_getCurrentPriorityLevel() {
|
|
|
return currentPriorityLevel;
|
|
|
}
|
|
|
|
|
|
var isMessageLoopRunning = false;
|
|
|
var scheduledHostCallback = null;
|
|
|
var taskTimeoutID = -1; // Scheduler periodically yields in case there is other work on the main
|
|
|
// thread, like user events. By default, it yields multiple times per frame.
|
|
|
// It does not attempt to align with frame boundaries, since most tasks don't
|
|
|
// need to be frame aligned; for those that do, use requestAnimationFrame.
|
|
|
|
|
|
var frameInterval = frameYieldMs;
|
|
|
var startTime = -1;
|
|
|
|
|
|
function shouldYieldToHost() {
|
|
|
var timeElapsed = exports.unstable_now() - startTime;
|
|
|
|
|
|
if (timeElapsed < frameInterval) {
|
|
|
// The main thread has only been blocked for a really short amount of time;
|
|
|
// smaller than a single frame. Don't yield yet.
|
|
|
return false;
|
|
|
} // The main thread has been blocked for a non-negligible amount of time. We
|
|
|
|
|
|
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
function requestPaint() {
|
|
|
|
|
|
}
|
|
|
|
|
|
function forceFrameRate(fps) {
|
|
|
if (fps < 0 || fps > 125) {
|
|
|
// Using console['error'] to evade Babel and ESLint
|
|
|
console['error']('forceFrameRate takes a positive int between 0 and 125, ' + 'forcing frame rates higher than 125 fps is not supported');
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (fps > 0) {
|
|
|
frameInterval = Math.floor(1000 / fps);
|
|
|
} else {
|
|
|
// reset the framerate
|
|
|
frameInterval = frameYieldMs;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var performWorkUntilDeadline = function () {
|
|
|
if (scheduledHostCallback !== null) {
|
|
|
var currentTime = exports.unstable_now(); // Keep track of the start time so we can measure how long the main thread
|
|
|
// has been blocked.
|
|
|
|
|
|
startTime = currentTime;
|
|
|
var hasTimeRemaining = true; // If a scheduler task throws, exit the current browser task so the
|
|
|
// error can be observed.
|
|
|
//
|
|
|
// Intentionally not using a try-catch, since that makes some debugging
|
|
|
// techniques harder. Instead, if `scheduledHostCallback` errors, then
|
|
|
// `hasMoreWork` will remain true, and we'll continue the work loop.
|
|
|
|
|
|
var hasMoreWork = true;
|
|
|
|
|
|
try {
|
|
|
hasMoreWork = scheduledHostCallback(hasTimeRemaining, currentTime);
|
|
|
} finally {
|
|
|
if (hasMoreWork) {
|
|
|
// If there's more work, schedule the next message event at the end
|
|
|
// of the preceding one.
|
|
|
schedulePerformWorkUntilDeadline();
|
|
|
} else {
|
|
|
isMessageLoopRunning = false;
|
|
|
scheduledHostCallback = null;
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
|
isMessageLoopRunning = false;
|
|
|
} // Yielding to the browser will give it a chance to paint, so we can
|
|
|
};
|
|
|
|
|
|
var schedulePerformWorkUntilDeadline;
|
|
|
|
|
|
if (typeof localSetImmediate === 'function') {
|
|
|
// Node.js and old IE.
|
|
|
// There's a few reasons for why we prefer setImmediate.
|
|
|
//
|
|
|
// Unlike MessageChannel, it doesn't prevent a Node.js process from exiting.
|
|
|
// (Even though this is a DOM fork of the Scheduler, you could get here
|
|
|
// with a mix of Node.js 15+, which has a MessageChannel, and jsdom.)
|
|
|
// https://github.com/facebook/react/issues/20756
|
|
|
//
|
|
|
// But also, it runs earlier which is the semantic we want.
|
|
|
// If other browsers ever implement it, it's better to use it.
|
|
|
// Although both of these would be inferior to native scheduling.
|
|
|
schedulePerformWorkUntilDeadline = function () {
|
|
|
localSetImmediate(performWorkUntilDeadline);
|
|
|
};
|
|
|
} else if (typeof MessageChannel !== 'undefined') {
|
|
|
// DOM and Worker environments.
|
|
|
// We prefer MessageChannel because of the 4ms setTimeout clamping.
|
|
|
var channel = new MessageChannel();
|
|
|
var port = channel.port2;
|
|
|
channel.port1.onmessage = performWorkUntilDeadline;
|
|
|
|
|
|
schedulePerformWorkUntilDeadline = function () {
|
|
|
port.postMessage(null);
|
|
|
};
|
|
|
} else {
|
|
|
// We should only fallback here in non-browser environments.
|
|
|
schedulePerformWorkUntilDeadline = function () {
|
|
|
localSetTimeout(performWorkUntilDeadline, 0);
|
|
|
};
|
|
|
}
|
|
|
|
|
|
function requestHostCallback(callback) {
|
|
|
scheduledHostCallback = callback;
|
|
|
|
|
|
if (!isMessageLoopRunning) {
|
|
|
isMessageLoopRunning = true;
|
|
|
schedulePerformWorkUntilDeadline();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function requestHostTimeout(callback, ms) {
|
|
|
taskTimeoutID = localSetTimeout(function () {
|
|
|
callback(exports.unstable_now());
|
|
|
}, ms);
|
|
|
}
|
|
|
|
|
|
function cancelHostTimeout() {
|
|
|
localClearTimeout(taskTimeoutID);
|
|
|
taskTimeoutID = -1;
|
|
|
}
|
|
|
|
|
|
var unstable_requestPaint = requestPaint;
|
|
|
var unstable_Profiling = null;
|
|
|
|
|
|
exports.unstable_IdlePriority = IdlePriority;
|
|
|
exports.unstable_ImmediatePriority = ImmediatePriority;
|
|
|
exports.unstable_LowPriority = LowPriority;
|
|
|
exports.unstable_NormalPriority = NormalPriority;
|
|
|
exports.unstable_Profiling = unstable_Profiling;
|
|
|
exports.unstable_UserBlockingPriority = UserBlockingPriority;
|
|
|
exports.unstable_cancelCallback = unstable_cancelCallback;
|
|
|
exports.unstable_continueExecution = unstable_continueExecution;
|
|
|
exports.unstable_forceFrameRate = forceFrameRate;
|
|
|
exports.unstable_getCurrentPriorityLevel = unstable_getCurrentPriorityLevel;
|
|
|
exports.unstable_getFirstCallbackNode = unstable_getFirstCallbackNode;
|
|
|
exports.unstable_next = unstable_next;
|
|
|
exports.unstable_pauseExecution = unstable_pauseExecution;
|
|
|
exports.unstable_requestPaint = unstable_requestPaint;
|
|
|
exports.unstable_runWithPriority = unstable_runWithPriority;
|
|
|
exports.unstable_scheduleCallback = unstable_scheduleCallback;
|
|
|
exports.unstable_shouldYield = shouldYieldToHost;
|
|
|
exports.unstable_wrapCallback = unstable_wrapCallback;
|
|
|
/* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */
|
|
|
if (
|
|
|
typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&
|
|
|
typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop ===
|
|
|
'function'
|
|
|
) {
|
|
|
__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error());
|
|
|
}
|
|
|
|
|
|
})();
|
|
|
}
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/scheduler/index.js":
|
|
|
/*!*****************************************!*\
|
|
|
!*** ./node_modules/scheduler/index.js ***!
|
|
|
\*****************************************/
|
|
|
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
if (false) {} else {
|
|
|
module.exports = __webpack_require__(/*! ./cjs/scheduler.development.js */ "./node_modules/scheduler/cjs/scheduler.development.js");
|
|
|
}
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./src/containers/DashboardContainer/index.less":
|
|
|
/*!******************************************************!*\
|
|
|
!*** ./src/containers/DashboardContainer/index.less ***!
|
|
|
\******************************************************/
|
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
|
|
|
/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);
|
|
|
/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../../../node_modules/style-loader/dist/runtime/styleDomAPI.js */ "./node_modules/style-loader/dist/runtime/styleDomAPI.js");
|
|
|
/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__);
|
|
|
/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../node_modules/style-loader/dist/runtime/insertBySelector.js */ "./node_modules/style-loader/dist/runtime/insertBySelector.js");
|
|
|
/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__);
|
|
|
/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js");
|
|
|
/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__);
|
|
|
/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../../../node_modules/style-loader/dist/runtime/insertStyleElement.js */ "./node_modules/style-loader/dist/runtime/insertStyleElement.js");
|
|
|
/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__);
|
|
|
/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../../../node_modules/style-loader/dist/runtime/styleTagTransform.js */ "./node_modules/style-loader/dist/runtime/styleTagTransform.js");
|
|
|
/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__);
|
|
|
/* harmony import */ var _node_modules_css_loader_dist_cjs_js_ruleSet_1_rules_3_use_1_node_modules_less_loader_dist_cjs_js_ruleSet_1_rules_3_use_2_index_less__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../../node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./index.less */ "./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./src/containers/DashboardContainer/index.less");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var options = {};
|
|
|
|
|
|
options.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());
|
|
|
options.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default());
|
|
|
|
|
|
options.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head");
|
|
|
|
|
|
options.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default());
|
|
|
options.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default());
|
|
|
|
|
|
var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_ruleSet_1_rules_3_use_1_node_modules_less_loader_dist_cjs_js_ruleSet_1_rules_3_use_2_index_less__WEBPACK_IMPORTED_MODULE_6__["default"], options);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_ruleSet_1_rules_3_use_1_node_modules_less_loader_dist_cjs_js_ruleSet_1_rules_3_use_2_index_less__WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_css_loader_dist_cjs_js_ruleSet_1_rules_3_use_1_node_modules_less_loader_dist_cjs_js_ruleSet_1_rules_3_use_2_index_less__WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_css_loader_dist_cjs_js_ruleSet_1_rules_3_use_1_node_modules_less_loader_dist_cjs_js_ruleSet_1_rules_3_use_2_index_less__WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined);
|
|
|
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js":
|
|
|
/*!****************************************************************************!*\
|
|
|
!*** ./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js ***!
|
|
|
\****************************************************************************/
|
|
|
/***/ ((module) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
var stylesInDOM = [];
|
|
|
|
|
|
function getIndexByIdentifier(identifier) {
|
|
|
var result = -1;
|
|
|
|
|
|
for (var i = 0; i < stylesInDOM.length; i++) {
|
|
|
if (stylesInDOM[i].identifier === identifier) {
|
|
|
result = i;
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
function modulesToDom(list, options) {
|
|
|
var idCountMap = {};
|
|
|
var identifiers = [];
|
|
|
|
|
|
for (var i = 0; i < list.length; i++) {
|
|
|
var item = list[i];
|
|
|
var id = options.base ? item[0] + options.base : item[0];
|
|
|
var count = idCountMap[id] || 0;
|
|
|
var identifier = "".concat(id, " ").concat(count);
|
|
|
idCountMap[id] = count + 1;
|
|
|
var indexByIdentifier = getIndexByIdentifier(identifier);
|
|
|
var obj = {
|
|
|
css: item[1],
|
|
|
media: item[2],
|
|
|
sourceMap: item[3],
|
|
|
supports: item[4],
|
|
|
layer: item[5]
|
|
|
};
|
|
|
|
|
|
if (indexByIdentifier !== -1) {
|
|
|
stylesInDOM[indexByIdentifier].references++;
|
|
|
stylesInDOM[indexByIdentifier].updater(obj);
|
|
|
} else {
|
|
|
var updater = addElementStyle(obj, options);
|
|
|
options.byIndex = i;
|
|
|
stylesInDOM.splice(i, 0, {
|
|
|
identifier: identifier,
|
|
|
updater: updater,
|
|
|
references: 1
|
|
|
});
|
|
|
}
|
|
|
|
|
|
identifiers.push(identifier);
|
|
|
}
|
|
|
|
|
|
return identifiers;
|
|
|
}
|
|
|
|
|
|
function addElementStyle(obj, options) {
|
|
|
var api = options.domAPI(options);
|
|
|
api.update(obj);
|
|
|
|
|
|
var updater = function updater(newObj) {
|
|
|
if (newObj) {
|
|
|
if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
api.update(obj = newObj);
|
|
|
} else {
|
|
|
api.remove();
|
|
|
}
|
|
|
};
|
|
|
|
|
|
return updater;
|
|
|
}
|
|
|
|
|
|
module.exports = function (list, options) {
|
|
|
options = options || {};
|
|
|
list = list || [];
|
|
|
var lastIdentifiers = modulesToDom(list, options);
|
|
|
return function update(newList) {
|
|
|
newList = newList || [];
|
|
|
|
|
|
for (var i = 0; i < lastIdentifiers.length; i++) {
|
|
|
var identifier = lastIdentifiers[i];
|
|
|
var index = getIndexByIdentifier(identifier);
|
|
|
stylesInDOM[index].references--;
|
|
|
}
|
|
|
|
|
|
var newLastIdentifiers = modulesToDom(newList, options);
|
|
|
|
|
|
for (var _i = 0; _i < lastIdentifiers.length; _i++) {
|
|
|
var _identifier = lastIdentifiers[_i];
|
|
|
|
|
|
var _index = getIndexByIdentifier(_identifier);
|
|
|
|
|
|
if (stylesInDOM[_index].references === 0) {
|
|
|
stylesInDOM[_index].updater();
|
|
|
|
|
|
stylesInDOM.splice(_index, 1);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
lastIdentifiers = newLastIdentifiers;
|
|
|
};
|
|
|
};
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/style-loader/dist/runtime/insertBySelector.js":
|
|
|
/*!********************************************************************!*\
|
|
|
!*** ./node_modules/style-loader/dist/runtime/insertBySelector.js ***!
|
|
|
\********************************************************************/
|
|
|
/***/ ((module) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
var memo = {};
|
|
|
/* istanbul ignore next */
|
|
|
|
|
|
function getTarget(target) {
|
|
|
if (typeof memo[target] === "undefined") {
|
|
|
var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself
|
|
|
|
|
|
if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {
|
|
|
try {
|
|
|
// This will throw an exception if access to iframe is blocked
|
|
|
// due to cross-origin restrictions
|
|
|
styleTarget = styleTarget.contentDocument.head;
|
|
|
} catch (e) {
|
|
|
// istanbul ignore next
|
|
|
styleTarget = null;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
memo[target] = styleTarget;
|
|
|
}
|
|
|
|
|
|
return memo[target];
|
|
|
}
|
|
|
/* istanbul ignore next */
|
|
|
|
|
|
|
|
|
function insertBySelector(insert, style) {
|
|
|
var target = getTarget(insert);
|
|
|
|
|
|
if (!target) {
|
|
|
throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");
|
|
|
}
|
|
|
|
|
|
target.appendChild(style);
|
|
|
}
|
|
|
|
|
|
module.exports = insertBySelector;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/style-loader/dist/runtime/insertStyleElement.js":
|
|
|
/*!**********************************************************************!*\
|
|
|
!*** ./node_modules/style-loader/dist/runtime/insertStyleElement.js ***!
|
|
|
\**********************************************************************/
|
|
|
/***/ ((module) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
/* istanbul ignore next */
|
|
|
function insertStyleElement(options) {
|
|
|
var element = document.createElement("style");
|
|
|
options.setAttributes(element, options.attributes);
|
|
|
options.insert(element, options.options);
|
|
|
return element;
|
|
|
}
|
|
|
|
|
|
module.exports = insertStyleElement;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js":
|
|
|
/*!**********************************************************************************!*\
|
|
|
!*** ./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js ***!
|
|
|
\**********************************************************************************/
|
|
|
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
/* istanbul ignore next */
|
|
|
function setAttributesWithoutAttributes(styleElement) {
|
|
|
var nonce = true ? __webpack_require__.nc : 0;
|
|
|
|
|
|
if (nonce) {
|
|
|
styleElement.setAttribute("nonce", nonce);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
module.exports = setAttributesWithoutAttributes;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/style-loader/dist/runtime/styleDomAPI.js":
|
|
|
/*!***************************************************************!*\
|
|
|
!*** ./node_modules/style-loader/dist/runtime/styleDomAPI.js ***!
|
|
|
\***************************************************************/
|
|
|
/***/ ((module) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
/* istanbul ignore next */
|
|
|
function apply(styleElement, options, obj) {
|
|
|
var css = "";
|
|
|
|
|
|
if (obj.supports) {
|
|
|
css += "@supports (".concat(obj.supports, ") {");
|
|
|
}
|
|
|
|
|
|
if (obj.media) {
|
|
|
css += "@media ".concat(obj.media, " {");
|
|
|
}
|
|
|
|
|
|
var needLayer = typeof obj.layer !== "undefined";
|
|
|
|
|
|
if (needLayer) {
|
|
|
css += "@layer".concat(obj.layer.length > 0 ? " ".concat(obj.layer) : "", " {");
|
|
|
}
|
|
|
|
|
|
css += obj.css;
|
|
|
|
|
|
if (needLayer) {
|
|
|
css += "}";
|
|
|
}
|
|
|
|
|
|
if (obj.media) {
|
|
|
css += "}";
|
|
|
}
|
|
|
|
|
|
if (obj.supports) {
|
|
|
css += "}";
|
|
|
}
|
|
|
|
|
|
var sourceMap = obj.sourceMap;
|
|
|
|
|
|
if (sourceMap && typeof btoa !== "undefined") {
|
|
|
css += "\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), " */");
|
|
|
} // For old IE
|
|
|
|
|
|
/* istanbul ignore if */
|
|
|
|
|
|
|
|
|
options.styleTagTransform(css, styleElement, options.options);
|
|
|
}
|
|
|
|
|
|
function removeStyleElement(styleElement) {
|
|
|
// istanbul ignore if
|
|
|
if (styleElement.parentNode === null) {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
styleElement.parentNode.removeChild(styleElement);
|
|
|
}
|
|
|
/* istanbul ignore next */
|
|
|
|
|
|
|
|
|
function domAPI(options) {
|
|
|
var styleElement = options.insertStyleElement(options);
|
|
|
return {
|
|
|
update: function update(obj) {
|
|
|
apply(styleElement, options, obj);
|
|
|
},
|
|
|
remove: function remove() {
|
|
|
removeStyleElement(styleElement);
|
|
|
}
|
|
|
};
|
|
|
}
|
|
|
|
|
|
module.exports = domAPI;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/style-loader/dist/runtime/styleTagTransform.js":
|
|
|
/*!*********************************************************************!*\
|
|
|
!*** ./node_modules/style-loader/dist/runtime/styleTagTransform.js ***!
|
|
|
\*********************************************************************/
|
|
|
/***/ ((module) => {
|
|
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
/* istanbul ignore next */
|
|
|
function styleTagTransform(css, styleElement) {
|
|
|
if (styleElement.styleSheet) {
|
|
|
styleElement.styleSheet.cssText = css;
|
|
|
} else {
|
|
|
while (styleElement.firstChild) {
|
|
|
styleElement.removeChild(styleElement.firstChild);
|
|
|
}
|
|
|
|
|
|
styleElement.appendChild(document.createTextNode(css));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
module.exports = styleTagTransform;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTQuNSAyLjVoLTEzQS41LjUgMCAwIDAgMSAzdjEwYS41LjUgMCAwIDAgLjUuNWgxM2EuNS41IDAgMCAwIC41LS41VjNhLjUuNSAwIDAgMC0uNS0uNXpNNS4yODEgNC43NWExIDEgMCAwIDEgMCAyIDEgMSAwIDAgMSAwLTJ6bTguMDMgNi44M2EuMTI3LjEyNyAwIDAgMS0uMDgxLjAzSDIuNzY5YS4xMjUuMTI1IDAgMCAxLS4wOTYtLjIwN2wyLjY2MS0zLjE1NmEuMTI2LjEyNiAwIDAgMSAuMTc3LS4wMTZsLjAxNi4wMTZMNy4wOCAxMC4wOWwyLjQ3LTIuOTNhLjEyNi4xMjYgMCAwIDEgLjE3Ny0uMDE2bC4wMTUuMDE2IDMuNTg4IDQuMjQ0YS4xMjcuMTI3IDAgMCAxLS4wMi4xNzV6IiBmaWxsPSIjOEM4QzhDIiBmaWxsLXJ1bGU9Im5vbnplcm8iLz48L3N2Zz4=":
|
|
|
/*!******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
|
|
|
!*** data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTQuNSAyLjVoLTEzQS41LjUgMCAwIDAgMSAzdjEwYS41LjUgMCAwIDAgLjUuNWgxM2EuNS41IDAgMCAwIC41LS41VjNhLjUuNSAwIDAgMC0uNS0uNXpNNS4yODEgNC43NWExIDEgMCAwIDEgMCAyIDEgMSAwIDAgMSAwLTJ6bTguMDMgNi44M2EuMTI3LjEyNyAwIDAgMS0uMDgxLjAzSDIuNzY5YS4xMjUuMTI1IDAgMCAxLS4wOTYtLjIwN2wyLjY2MS0zLjE1NmEuMTI2LjEyNiAwIDAgMSAuMTc3LS4wMTZsLjAxNi4wMTZMNy4wOCAxMC4wOWwyLjQ3LTIuOTNhLjEyNi4xMjYgMCAwIDEgLjE3Ny0uMDE2bC4wMTUuMDE2IDMuNTg4IDQuMjQ0YS4xMjcuMTI3IDAgMCAxLS4wMi4xNzV6IiBmaWxsPSIjOEM4QzhDIiBmaWxsLXJ1bGU9Im5vbnplcm8iLz48L3N2Zz4= ***!
|
|
|
\******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
|
|
|
/***/ ((module) => {
|
|
|
|
|
|
"use strict";
|
|
|
module.exports = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTQuNSAyLjVoLTEzQS41LjUgMCAwIDAgMSAzdjEwYS41LjUgMCAwIDAgLjUuNWgxM2EuNS41IDAgMCAwIC41LS41VjNhLjUuNSAwIDAgMC0uNS0uNXpNNS4yODEgNC43NWExIDEgMCAwIDEgMCAyIDEgMSAwIDAgMSAwLTJ6bTguMDMgNi44M2EuMTI3LjEyNyAwIDAgMS0uMDgxLjAzSDIuNzY5YS4xMjUuMTI1IDAgMCAxLS4wOTYtLjIwN2wyLjY2MS0zLjE1NmEuMTI2LjEyNiAwIDAgMSAuMTc3LS4wMTZsLjAxNi4wMTZMNy4wOCAxMC4wOWwyLjQ3LTIuOTNhLjEyNi4xMjYgMCAwIDEgLjE3Ny0uMDE2bC4wMTUuMDE2IDMuNTg4IDQuMjQ0YS4xMjcuMTI3IDAgMCAxLS4wMi4xNzV6IiBmaWxsPSIjOEM4QzhDIiBmaWxsLXJ1bGU9Im5vbnplcm8iLz48L3N2Zz4=";
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@babel/runtime/helpers/arrayLikeToArray.js":
|
|
|
/*!*****************************************************************!*\
|
|
|
!*** ./node_modules/@babel/runtime/helpers/arrayLikeToArray.js ***!
|
|
|
\*****************************************************************/
|
|
|
/***/ ((module) => {
|
|
|
|
|
|
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;
|
|
|
}
|
|
|
module.exports = _arrayLikeToArray, module.exports.__esModule = true, module.exports["default"] = module.exports;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@babel/runtime/helpers/arrayWithHoles.js":
|
|
|
/*!***************************************************************!*\
|
|
|
!*** ./node_modules/@babel/runtime/helpers/arrayWithHoles.js ***!
|
|
|
\***************************************************************/
|
|
|
/***/ ((module) => {
|
|
|
|
|
|
function _arrayWithHoles(arr) {
|
|
|
if (Array.isArray(arr)) return arr;
|
|
|
}
|
|
|
module.exports = _arrayWithHoles, module.exports.__esModule = true, module.exports["default"] = module.exports;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@babel/runtime/helpers/arrayWithoutHoles.js":
|
|
|
/*!******************************************************************!*\
|
|
|
!*** ./node_modules/@babel/runtime/helpers/arrayWithoutHoles.js ***!
|
|
|
\******************************************************************/
|
|
|
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
|
|
|
|
|
var arrayLikeToArray = __webpack_require__(/*! ./arrayLikeToArray.js */ "./node_modules/@babel/runtime/helpers/arrayLikeToArray.js");
|
|
|
function _arrayWithoutHoles(arr) {
|
|
|
if (Array.isArray(arr)) return arrayLikeToArray(arr);
|
|
|
}
|
|
|
module.exports = _arrayWithoutHoles, module.exports.__esModule = true, module.exports["default"] = module.exports;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@babel/runtime/helpers/assertThisInitialized.js":
|
|
|
/*!**********************************************************************!*\
|
|
|
!*** ./node_modules/@babel/runtime/helpers/assertThisInitialized.js ***!
|
|
|
\**********************************************************************/
|
|
|
/***/ ((module) => {
|
|
|
|
|
|
function _assertThisInitialized(self) {
|
|
|
if (self === void 0) {
|
|
|
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
|
|
|
}
|
|
|
return self;
|
|
|
}
|
|
|
module.exports = _assertThisInitialized, module.exports.__esModule = true, module.exports["default"] = module.exports;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@babel/runtime/helpers/classCallCheck.js":
|
|
|
/*!***************************************************************!*\
|
|
|
!*** ./node_modules/@babel/runtime/helpers/classCallCheck.js ***!
|
|
|
\***************************************************************/
|
|
|
/***/ ((module) => {
|
|
|
|
|
|
function _classCallCheck(instance, Constructor) {
|
|
|
if (!(instance instanceof Constructor)) {
|
|
|
throw new TypeError("Cannot call a class as a function");
|
|
|
}
|
|
|
}
|
|
|
module.exports = _classCallCheck, module.exports.__esModule = true, module.exports["default"] = module.exports;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@babel/runtime/helpers/createClass.js":
|
|
|
/*!************************************************************!*\
|
|
|
!*** ./node_modules/@babel/runtime/helpers/createClass.js ***!
|
|
|
\************************************************************/
|
|
|
/***/ ((module) => {
|
|
|
|
|
|
function _defineProperties(target, props) {
|
|
|
for (var i = 0; i < props.length; i++) {
|
|
|
var descriptor = props[i];
|
|
|
descriptor.enumerable = descriptor.enumerable || false;
|
|
|
descriptor.configurable = true;
|
|
|
if ("value" in descriptor) descriptor.writable = true;
|
|
|
Object.defineProperty(target, descriptor.key, descriptor);
|
|
|
}
|
|
|
}
|
|
|
function _createClass(Constructor, protoProps, staticProps) {
|
|
|
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
|
|
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
|
Object.defineProperty(Constructor, "prototype", {
|
|
|
writable: false
|
|
|
});
|
|
|
return Constructor;
|
|
|
}
|
|
|
module.exports = _createClass, module.exports.__esModule = true, module.exports["default"] = module.exports;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@babel/runtime/helpers/createSuper.js":
|
|
|
/*!************************************************************!*\
|
|
|
!*** ./node_modules/@babel/runtime/helpers/createSuper.js ***!
|
|
|
\************************************************************/
|
|
|
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
|
|
|
|
|
var getPrototypeOf = __webpack_require__(/*! ./getPrototypeOf.js */ "./node_modules/@babel/runtime/helpers/getPrototypeOf.js");
|
|
|
var isNativeReflectConstruct = __webpack_require__(/*! ./isNativeReflectConstruct.js */ "./node_modules/@babel/runtime/helpers/isNativeReflectConstruct.js");
|
|
|
var possibleConstructorReturn = __webpack_require__(/*! ./possibleConstructorReturn.js */ "./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js");
|
|
|
function _createSuper(Derived) {
|
|
|
var hasNativeReflectConstruct = isNativeReflectConstruct();
|
|
|
return function _createSuperInternal() {
|
|
|
var Super = getPrototypeOf(Derived),
|
|
|
result;
|
|
|
if (hasNativeReflectConstruct) {
|
|
|
var NewTarget = getPrototypeOf(this).constructor;
|
|
|
result = Reflect.construct(Super, arguments, NewTarget);
|
|
|
} else {
|
|
|
result = Super.apply(this, arguments);
|
|
|
}
|
|
|
return possibleConstructorReturn(this, result);
|
|
|
};
|
|
|
}
|
|
|
module.exports = _createSuper, module.exports.__esModule = true, module.exports["default"] = module.exports;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@babel/runtime/helpers/defineProperty.js":
|
|
|
/*!***************************************************************!*\
|
|
|
!*** ./node_modules/@babel/runtime/helpers/defineProperty.js ***!
|
|
|
\***************************************************************/
|
|
|
/***/ ((module) => {
|
|
|
|
|
|
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;
|
|
|
}
|
|
|
module.exports = _defineProperty, module.exports.__esModule = true, module.exports["default"] = module.exports;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@babel/runtime/helpers/extends.js":
|
|
|
/*!********************************************************!*\
|
|
|
!*** ./node_modules/@babel/runtime/helpers/extends.js ***!
|
|
|
\********************************************************/
|
|
|
/***/ ((module) => {
|
|
|
|
|
|
function _extends() {
|
|
|
module.exports = _extends = Object.assign ? Object.assign.bind() : 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;
|
|
|
}, module.exports.__esModule = true, module.exports["default"] = module.exports;
|
|
|
return _extends.apply(this, arguments);
|
|
|
}
|
|
|
module.exports = _extends, module.exports.__esModule = true, module.exports["default"] = module.exports;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@babel/runtime/helpers/getPrototypeOf.js":
|
|
|
/*!***************************************************************!*\
|
|
|
!*** ./node_modules/@babel/runtime/helpers/getPrototypeOf.js ***!
|
|
|
\***************************************************************/
|
|
|
/***/ ((module) => {
|
|
|
|
|
|
function _getPrototypeOf(o) {
|
|
|
module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) {
|
|
|
return o.__proto__ || Object.getPrototypeOf(o);
|
|
|
}, module.exports.__esModule = true, module.exports["default"] = module.exports;
|
|
|
return _getPrototypeOf(o);
|
|
|
}
|
|
|
module.exports = _getPrototypeOf, module.exports.__esModule = true, module.exports["default"] = module.exports;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@babel/runtime/helpers/inherits.js":
|
|
|
/*!*********************************************************!*\
|
|
|
!*** ./node_modules/@babel/runtime/helpers/inherits.js ***!
|
|
|
\*********************************************************/
|
|
|
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
|
|
|
|
|
var setPrototypeOf = __webpack_require__(/*! ./setPrototypeOf.js */ "./node_modules/@babel/runtime/helpers/setPrototypeOf.js");
|
|
|
function _inherits(subClass, superClass) {
|
|
|
if (typeof superClass !== "function" && superClass !== null) {
|
|
|
throw new TypeError("Super expression must either be null or a function");
|
|
|
}
|
|
|
subClass.prototype = Object.create(superClass && superClass.prototype, {
|
|
|
constructor: {
|
|
|
value: subClass,
|
|
|
writable: true,
|
|
|
configurable: true
|
|
|
}
|
|
|
});
|
|
|
Object.defineProperty(subClass, "prototype", {
|
|
|
writable: false
|
|
|
});
|
|
|
if (superClass) setPrototypeOf(subClass, superClass);
|
|
|
}
|
|
|
module.exports = _inherits, module.exports.__esModule = true, module.exports["default"] = module.exports;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@babel/runtime/helpers/interopRequireDefault.js":
|
|
|
/*!**********************************************************************!*\
|
|
|
!*** ./node_modules/@babel/runtime/helpers/interopRequireDefault.js ***!
|
|
|
\**********************************************************************/
|
|
|
/***/ ((module) => {
|
|
|
|
|
|
function _interopRequireDefault(obj) {
|
|
|
return obj && obj.__esModule ? obj : {
|
|
|
"default": obj
|
|
|
};
|
|
|
}
|
|
|
module.exports = _interopRequireDefault, module.exports.__esModule = true, module.exports["default"] = module.exports;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@babel/runtime/helpers/interopRequireWildcard.js":
|
|
|
/*!***********************************************************************!*\
|
|
|
!*** ./node_modules/@babel/runtime/helpers/interopRequireWildcard.js ***!
|
|
|
\***********************************************************************/
|
|
|
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
|
|
|
|
|
var _typeof = (__webpack_require__(/*! ./typeof.js */ "./node_modules/@babel/runtime/helpers/typeof.js")["default"]);
|
|
|
function _getRequireWildcardCache(nodeInterop) {
|
|
|
if (typeof WeakMap !== "function") return null;
|
|
|
var cacheBabelInterop = new WeakMap();
|
|
|
var cacheNodeInterop = new WeakMap();
|
|
|
return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) {
|
|
|
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
|
})(nodeInterop);
|
|
|
}
|
|
|
function _interopRequireWildcard(obj, nodeInterop) {
|
|
|
if (!nodeInterop && obj && obj.__esModule) {
|
|
|
return obj;
|
|
|
}
|
|
|
if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") {
|
|
|
return {
|
|
|
"default": obj
|
|
|
};
|
|
|
}
|
|
|
var cache = _getRequireWildcardCache(nodeInterop);
|
|
|
if (cache && cache.has(obj)) {
|
|
|
return cache.get(obj);
|
|
|
}
|
|
|
var newObj = {};
|
|
|
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
|
for (var key in obj) {
|
|
|
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
|
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
|
if (desc && (desc.get || desc.set)) {
|
|
|
Object.defineProperty(newObj, key, desc);
|
|
|
} else {
|
|
|
newObj[key] = obj[key];
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
newObj["default"] = obj;
|
|
|
if (cache) {
|
|
|
cache.set(obj, newObj);
|
|
|
}
|
|
|
return newObj;
|
|
|
}
|
|
|
module.exports = _interopRequireWildcard, module.exports.__esModule = true, module.exports["default"] = module.exports;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@babel/runtime/helpers/isNativeReflectConstruct.js":
|
|
|
/*!*************************************************************************!*\
|
|
|
!*** ./node_modules/@babel/runtime/helpers/isNativeReflectConstruct.js ***!
|
|
|
\*************************************************************************/
|
|
|
/***/ ((module) => {
|
|
|
|
|
|
function _isNativeReflectConstruct() {
|
|
|
if (typeof Reflect === "undefined" || !Reflect.construct) return false;
|
|
|
if (Reflect.construct.sham) return false;
|
|
|
if (typeof Proxy === "function") return true;
|
|
|
try {
|
|
|
Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
|
|
|
return true;
|
|
|
} catch (e) {
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
module.exports = _isNativeReflectConstruct, module.exports.__esModule = true, module.exports["default"] = module.exports;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@babel/runtime/helpers/iterableToArray.js":
|
|
|
/*!****************************************************************!*\
|
|
|
!*** ./node_modules/@babel/runtime/helpers/iterableToArray.js ***!
|
|
|
\****************************************************************/
|
|
|
/***/ ((module) => {
|
|
|
|
|
|
function _iterableToArray(iter) {
|
|
|
if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
|
|
|
}
|
|
|
module.exports = _iterableToArray, module.exports.__esModule = true, module.exports["default"] = module.exports;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@babel/runtime/helpers/iterableToArrayLimit.js":
|
|
|
/*!*********************************************************************!*\
|
|
|
!*** ./node_modules/@babel/runtime/helpers/iterableToArrayLimit.js ***!
|
|
|
\*********************************************************************/
|
|
|
/***/ ((module) => {
|
|
|
|
|
|
function _iterableToArrayLimit(arr, i) {
|
|
|
var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
|
|
|
if (_i == null) return;
|
|
|
var _arr = [];
|
|
|
var _n = true;
|
|
|
var _d = false;
|
|
|
var _s, _e;
|
|
|
try {
|
|
|
for (_i = _i.call(arr); !(_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;
|
|
|
}
|
|
|
module.exports = _iterableToArrayLimit, module.exports.__esModule = true, module.exports["default"] = module.exports;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@babel/runtime/helpers/nonIterableRest.js":
|
|
|
/*!****************************************************************!*\
|
|
|
!*** ./node_modules/@babel/runtime/helpers/nonIterableRest.js ***!
|
|
|
\****************************************************************/
|
|
|
/***/ ((module) => {
|
|
|
|
|
|
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.");
|
|
|
}
|
|
|
module.exports = _nonIterableRest, module.exports.__esModule = true, module.exports["default"] = module.exports;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@babel/runtime/helpers/nonIterableSpread.js":
|
|
|
/*!******************************************************************!*\
|
|
|
!*** ./node_modules/@babel/runtime/helpers/nonIterableSpread.js ***!
|
|
|
\******************************************************************/
|
|
|
/***/ ((module) => {
|
|
|
|
|
|
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.");
|
|
|
}
|
|
|
module.exports = _nonIterableSpread, module.exports.__esModule = true, module.exports["default"] = module.exports;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@babel/runtime/helpers/objectSpread2.js":
|
|
|
/*!**************************************************************!*\
|
|
|
!*** ./node_modules/@babel/runtime/helpers/objectSpread2.js ***!
|
|
|
\**************************************************************/
|
|
|
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
|
|
|
|
|
var defineProperty = __webpack_require__(/*! ./defineProperty.js */ "./node_modules/@babel/runtime/helpers/defineProperty.js");
|
|
|
function ownKeys(object, enumerableOnly) {
|
|
|
var keys = Object.keys(object);
|
|
|
if (Object.getOwnPropertySymbols) {
|
|
|
var symbols = Object.getOwnPropertySymbols(object);
|
|
|
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 = null != arguments[i] ? arguments[i] : {};
|
|
|
i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {
|
|
|
defineProperty(target, key, source[key]);
|
|
|
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {
|
|
|
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
|
|
});
|
|
|
}
|
|
|
return target;
|
|
|
}
|
|
|
module.exports = _objectSpread2, module.exports.__esModule = true, module.exports["default"] = module.exports;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@babel/runtime/helpers/objectWithoutProperties.js":
|
|
|
/*!************************************************************************!*\
|
|
|
!*** ./node_modules/@babel/runtime/helpers/objectWithoutProperties.js ***!
|
|
|
\************************************************************************/
|
|
|
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
|
|
|
|
|
var objectWithoutPropertiesLoose = __webpack_require__(/*! ./objectWithoutPropertiesLoose.js */ "./node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js");
|
|
|
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;
|
|
|
}
|
|
|
module.exports = _objectWithoutProperties, module.exports.__esModule = true, module.exports["default"] = module.exports;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js":
|
|
|
/*!*****************************************************************************!*\
|
|
|
!*** ./node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js ***!
|
|
|
\*****************************************************************************/
|
|
|
/***/ ((module) => {
|
|
|
|
|
|
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;
|
|
|
}
|
|
|
module.exports = _objectWithoutPropertiesLoose, module.exports.__esModule = true, module.exports["default"] = module.exports;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js":
|
|
|
/*!**************************************************************************!*\
|
|
|
!*** ./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js ***!
|
|
|
\**************************************************************************/
|
|
|
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
|
|
|
|
|
var _typeof = (__webpack_require__(/*! ./typeof.js */ "./node_modules/@babel/runtime/helpers/typeof.js")["default"]);
|
|
|
var assertThisInitialized = __webpack_require__(/*! ./assertThisInitialized.js */ "./node_modules/@babel/runtime/helpers/assertThisInitialized.js");
|
|
|
function _possibleConstructorReturn(self, call) {
|
|
|
if (call && (_typeof(call) === "object" || typeof call === "function")) {
|
|
|
return call;
|
|
|
} else if (call !== void 0) {
|
|
|
throw new TypeError("Derived constructors may only return object or undefined");
|
|
|
}
|
|
|
return assertThisInitialized(self);
|
|
|
}
|
|
|
module.exports = _possibleConstructorReturn, module.exports.__esModule = true, module.exports["default"] = module.exports;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@babel/runtime/helpers/regeneratorRuntime.js":
|
|
|
/*!*******************************************************************!*\
|
|
|
!*** ./node_modules/@babel/runtime/helpers/regeneratorRuntime.js ***!
|
|
|
\*******************************************************************/
|
|
|
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
|
|
|
|
|
var _typeof = (__webpack_require__(/*! ./typeof.js */ "./node_modules/@babel/runtime/helpers/typeof.js")["default"]);
|
|
|
function _regeneratorRuntime() {
|
|
|
"use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */
|
|
|
module.exports = _regeneratorRuntime = function _regeneratorRuntime() {
|
|
|
return exports;
|
|
|
}, module.exports.__esModule = true, module.exports["default"] = module.exports;
|
|
|
var exports = {},
|
|
|
Op = Object.prototype,
|
|
|
hasOwn = Op.hasOwnProperty,
|
|
|
defineProperty = Object.defineProperty || function (obj, key, desc) {
|
|
|
obj[key] = desc.value;
|
|
|
},
|
|
|
$Symbol = "function" == typeof Symbol ? Symbol : {},
|
|
|
iteratorSymbol = $Symbol.iterator || "@@iterator",
|
|
|
asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator",
|
|
|
toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag";
|
|
|
function define(obj, key, value) {
|
|
|
return Object.defineProperty(obj, key, {
|
|
|
value: value,
|
|
|
enumerable: !0,
|
|
|
configurable: !0,
|
|
|
writable: !0
|
|
|
}), obj[key];
|
|
|
}
|
|
|
try {
|
|
|
define({}, "");
|
|
|
} catch (err) {
|
|
|
define = function define(obj, key, value) {
|
|
|
return obj[key] = value;
|
|
|
};
|
|
|
}
|
|
|
function wrap(innerFn, outerFn, self, tryLocsList) {
|
|
|
var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator,
|
|
|
generator = Object.create(protoGenerator.prototype),
|
|
|
context = new Context(tryLocsList || []);
|
|
|
return defineProperty(generator, "_invoke", {
|
|
|
value: makeInvokeMethod(innerFn, self, context)
|
|
|
}), generator;
|
|
|
}
|
|
|
function tryCatch(fn, obj, arg) {
|
|
|
try {
|
|
|
return {
|
|
|
type: "normal",
|
|
|
arg: fn.call(obj, arg)
|
|
|
};
|
|
|
} catch (err) {
|
|
|
return {
|
|
|
type: "throw",
|
|
|
arg: err
|
|
|
};
|
|
|
}
|
|
|
}
|
|
|
exports.wrap = wrap;
|
|
|
var ContinueSentinel = {};
|
|
|
function Generator() {}
|
|
|
function GeneratorFunction() {}
|
|
|
function GeneratorFunctionPrototype() {}
|
|
|
var IteratorPrototype = {};
|
|
|
define(IteratorPrototype, iteratorSymbol, function () {
|
|
|
return this;
|
|
|
});
|
|
|
var getProto = Object.getPrototypeOf,
|
|
|
NativeIteratorPrototype = getProto && getProto(getProto(values([])));
|
|
|
NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype);
|
|
|
var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype);
|
|
|
function defineIteratorMethods(prototype) {
|
|
|
["next", "throw", "return"].forEach(function (method) {
|
|
|
define(prototype, method, function (arg) {
|
|
|
return this._invoke(method, arg);
|
|
|
});
|
|
|
});
|
|
|
}
|
|
|
function AsyncIterator(generator, PromiseImpl) {
|
|
|
function invoke(method, arg, resolve, reject) {
|
|
|
var record = tryCatch(generator[method], generator, arg);
|
|
|
if ("throw" !== record.type) {
|
|
|
var result = record.arg,
|
|
|
value = result.value;
|
|
|
return value && "object" == _typeof(value) && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) {
|
|
|
invoke("next", value, resolve, reject);
|
|
|
}, function (err) {
|
|
|
invoke("throw", err, resolve, reject);
|
|
|
}) : PromiseImpl.resolve(value).then(function (unwrapped) {
|
|
|
result.value = unwrapped, resolve(result);
|
|
|
}, function (error) {
|
|
|
return invoke("throw", error, resolve, reject);
|
|
|
});
|
|
|
}
|
|
|
reject(record.arg);
|
|
|
}
|
|
|
var previousPromise;
|
|
|
defineProperty(this, "_invoke", {
|
|
|
value: function value(method, arg) {
|
|
|
function callInvokeWithMethodAndArg() {
|
|
|
return new PromiseImpl(function (resolve, reject) {
|
|
|
invoke(method, arg, resolve, reject);
|
|
|
});
|
|
|
}
|
|
|
return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
function makeInvokeMethod(innerFn, self, context) {
|
|
|
var state = "suspendedStart";
|
|
|
return function (method, arg) {
|
|
|
if ("executing" === state) throw new Error("Generator is already running");
|
|
|
if ("completed" === state) {
|
|
|
if ("throw" === method) throw arg;
|
|
|
return doneResult();
|
|
|
}
|
|
|
for (context.method = method, context.arg = arg;;) {
|
|
|
var delegate = context.delegate;
|
|
|
if (delegate) {
|
|
|
var delegateResult = maybeInvokeDelegate(delegate, context);
|
|
|
if (delegateResult) {
|
|
|
if (delegateResult === ContinueSentinel) continue;
|
|
|
return delegateResult;
|
|
|
}
|
|
|
}
|
|
|
if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) {
|
|
|
if ("suspendedStart" === state) throw state = "completed", context.arg;
|
|
|
context.dispatchException(context.arg);
|
|
|
} else "return" === context.method && context.abrupt("return", context.arg);
|
|
|
state = "executing";
|
|
|
var record = tryCatch(innerFn, self, context);
|
|
|
if ("normal" === record.type) {
|
|
|
if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue;
|
|
|
return {
|
|
|
value: record.arg,
|
|
|
done: context.done
|
|
|
};
|
|
|
}
|
|
|
"throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg);
|
|
|
}
|
|
|
};
|
|
|
}
|
|
|
function maybeInvokeDelegate(delegate, context) {
|
|
|
var method = delegate.iterator[context.method];
|
|
|
if (undefined === method) {
|
|
|
if (context.delegate = null, "throw" === context.method) {
|
|
|
if (delegate.iterator["return"] && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method)) return ContinueSentinel;
|
|
|
context.method = "throw", context.arg = new TypeError("The iterator does not provide a 'throw' method");
|
|
|
}
|
|
|
return ContinueSentinel;
|
|
|
}
|
|
|
var record = tryCatch(method, delegate.iterator, context.arg);
|
|
|
if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel;
|
|
|
var info = record.arg;
|
|
|
return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel);
|
|
|
}
|
|
|
function pushTryEntry(locs) {
|
|
|
var entry = {
|
|
|
tryLoc: locs[0]
|
|
|
};
|
|
|
1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry);
|
|
|
}
|
|
|
function resetTryEntry(entry) {
|
|
|
var record = entry.completion || {};
|
|
|
record.type = "normal", delete record.arg, entry.completion = record;
|
|
|
}
|
|
|
function Context(tryLocsList) {
|
|
|
this.tryEntries = [{
|
|
|
tryLoc: "root"
|
|
|
}], tryLocsList.forEach(pushTryEntry, this), this.reset(!0);
|
|
|
}
|
|
|
function values(iterable) {
|
|
|
if (iterable) {
|
|
|
var iteratorMethod = iterable[iteratorSymbol];
|
|
|
if (iteratorMethod) return iteratorMethod.call(iterable);
|
|
|
if ("function" == typeof iterable.next) return iterable;
|
|
|
if (!isNaN(iterable.length)) {
|
|
|
var i = -1,
|
|
|
next = function next() {
|
|
|
for (; ++i < iterable.length;) {
|
|
|
if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next;
|
|
|
}
|
|
|
return next.value = undefined, next.done = !0, next;
|
|
|
};
|
|
|
return next.next = next;
|
|
|
}
|
|
|
}
|
|
|
return {
|
|
|
next: doneResult
|
|
|
};
|
|
|
}
|
|
|
function doneResult() {
|
|
|
return {
|
|
|
value: undefined,
|
|
|
done: !0
|
|
|
};
|
|
|
}
|
|
|
return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, "constructor", {
|
|
|
value: GeneratorFunctionPrototype,
|
|
|
configurable: !0
|
|
|
}), defineProperty(GeneratorFunctionPrototype, "constructor", {
|
|
|
value: GeneratorFunction,
|
|
|
configurable: !0
|
|
|
}), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) {
|
|
|
var ctor = "function" == typeof genFun && genFun.constructor;
|
|
|
return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name));
|
|
|
}, exports.mark = function (genFun) {
|
|
|
return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = Object.create(Gp), genFun;
|
|
|
}, exports.awrap = function (arg) {
|
|
|
return {
|
|
|
__await: arg
|
|
|
};
|
|
|
}, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () {
|
|
|
return this;
|
|
|
}), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) {
|
|
|
void 0 === PromiseImpl && (PromiseImpl = Promise);
|
|
|
var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl);
|
|
|
return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) {
|
|
|
return result.done ? result.value : iter.next();
|
|
|
});
|
|
|
}, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () {
|
|
|
return this;
|
|
|
}), define(Gp, "toString", function () {
|
|
|
return "[object Generator]";
|
|
|
}), exports.keys = function (val) {
|
|
|
var object = Object(val),
|
|
|
keys = [];
|
|
|
for (var key in object) {
|
|
|
keys.push(key);
|
|
|
}
|
|
|
return keys.reverse(), function next() {
|
|
|
for (; keys.length;) {
|
|
|
var key = keys.pop();
|
|
|
if (key in object) return next.value = key, next.done = !1, next;
|
|
|
}
|
|
|
return next.done = !0, next;
|
|
|
};
|
|
|
}, exports.values = values, Context.prototype = {
|
|
|
constructor: Context,
|
|
|
reset: function reset(skipTempReset) {
|
|
|
if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) {
|
|
|
"t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined);
|
|
|
}
|
|
|
},
|
|
|
stop: function stop() {
|
|
|
this.done = !0;
|
|
|
var rootRecord = this.tryEntries[0].completion;
|
|
|
if ("throw" === rootRecord.type) throw rootRecord.arg;
|
|
|
return this.rval;
|
|
|
},
|
|
|
dispatchException: function dispatchException(exception) {
|
|
|
if (this.done) throw exception;
|
|
|
var context = this;
|
|
|
function handle(loc, caught) {
|
|
|
return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught;
|
|
|
}
|
|
|
for (var i = this.tryEntries.length - 1; i >= 0; --i) {
|
|
|
var entry = this.tryEntries[i],
|
|
|
record = entry.completion;
|
|
|
if ("root" === entry.tryLoc) return handle("end");
|
|
|
if (entry.tryLoc <= this.prev) {
|
|
|
var hasCatch = hasOwn.call(entry, "catchLoc"),
|
|
|
hasFinally = hasOwn.call(entry, "finallyLoc");
|
|
|
if (hasCatch && hasFinally) {
|
|
|
if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0);
|
|
|
if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc);
|
|
|
} else if (hasCatch) {
|
|
|
if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0);
|
|
|
} else {
|
|
|
if (!hasFinally) throw new Error("try statement without catch or finally");
|
|
|
if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
},
|
|
|
abrupt: function abrupt(type, arg) {
|
|
|
for (var i = this.tryEntries.length - 1; i >= 0; --i) {
|
|
|
var entry = this.tryEntries[i];
|
|
|
if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) {
|
|
|
var finallyEntry = entry;
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null);
|
|
|
var record = finallyEntry ? finallyEntry.completion : {};
|
|
|
return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record);
|
|
|
},
|
|
|
complete: function complete(record, afterLoc) {
|
|
|
if ("throw" === record.type) throw record.arg;
|
|
|
return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel;
|
|
|
},
|
|
|
finish: function finish(finallyLoc) {
|
|
|
for (var i = this.tryEntries.length - 1; i >= 0; --i) {
|
|
|
var entry = this.tryEntries[i];
|
|
|
if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel;
|
|
|
}
|
|
|
},
|
|
|
"catch": function _catch(tryLoc) {
|
|
|
for (var i = this.tryEntries.length - 1; i >= 0; --i) {
|
|
|
var entry = this.tryEntries[i];
|
|
|
if (entry.tryLoc === tryLoc) {
|
|
|
var record = entry.completion;
|
|
|
if ("throw" === record.type) {
|
|
|
var thrown = record.arg;
|
|
|
resetTryEntry(entry);
|
|
|
}
|
|
|
return thrown;
|
|
|
}
|
|
|
}
|
|
|
throw new Error("illegal catch attempt");
|
|
|
},
|
|
|
delegateYield: function delegateYield(iterable, resultName, nextLoc) {
|
|
|
return this.delegate = {
|
|
|
iterator: values(iterable),
|
|
|
resultName: resultName,
|
|
|
nextLoc: nextLoc
|
|
|
}, "next" === this.method && (this.arg = undefined), ContinueSentinel;
|
|
|
}
|
|
|
}, exports;
|
|
|
}
|
|
|
module.exports = _regeneratorRuntime, module.exports.__esModule = true, module.exports["default"] = module.exports;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@babel/runtime/helpers/setPrototypeOf.js":
|
|
|
/*!***************************************************************!*\
|
|
|
!*** ./node_modules/@babel/runtime/helpers/setPrototypeOf.js ***!
|
|
|
\***************************************************************/
|
|
|
/***/ ((module) => {
|
|
|
|
|
|
function _setPrototypeOf(o, p) {
|
|
|
module.exports = _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {
|
|
|
o.__proto__ = p;
|
|
|
return o;
|
|
|
}, module.exports.__esModule = true, module.exports["default"] = module.exports;
|
|
|
return _setPrototypeOf(o, p);
|
|
|
}
|
|
|
module.exports = _setPrototypeOf, module.exports.__esModule = true, module.exports["default"] = module.exports;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@babel/runtime/helpers/slicedToArray.js":
|
|
|
/*!**************************************************************!*\
|
|
|
!*** ./node_modules/@babel/runtime/helpers/slicedToArray.js ***!
|
|
|
\**************************************************************/
|
|
|
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
|
|
|
|
|
var arrayWithHoles = __webpack_require__(/*! ./arrayWithHoles.js */ "./node_modules/@babel/runtime/helpers/arrayWithHoles.js");
|
|
|
var iterableToArrayLimit = __webpack_require__(/*! ./iterableToArrayLimit.js */ "./node_modules/@babel/runtime/helpers/iterableToArrayLimit.js");
|
|
|
var unsupportedIterableToArray = __webpack_require__(/*! ./unsupportedIterableToArray.js */ "./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js");
|
|
|
var nonIterableRest = __webpack_require__(/*! ./nonIterableRest.js */ "./node_modules/@babel/runtime/helpers/nonIterableRest.js");
|
|
|
function _slicedToArray(arr, i) {
|
|
|
return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();
|
|
|
}
|
|
|
module.exports = _slicedToArray, module.exports.__esModule = true, module.exports["default"] = module.exports;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@babel/runtime/helpers/toConsumableArray.js":
|
|
|
/*!******************************************************************!*\
|
|
|
!*** ./node_modules/@babel/runtime/helpers/toConsumableArray.js ***!
|
|
|
\******************************************************************/
|
|
|
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
|
|
|
|
|
var arrayWithoutHoles = __webpack_require__(/*! ./arrayWithoutHoles.js */ "./node_modules/@babel/runtime/helpers/arrayWithoutHoles.js");
|
|
|
var iterableToArray = __webpack_require__(/*! ./iterableToArray.js */ "./node_modules/@babel/runtime/helpers/iterableToArray.js");
|
|
|
var unsupportedIterableToArray = __webpack_require__(/*! ./unsupportedIterableToArray.js */ "./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js");
|
|
|
var nonIterableSpread = __webpack_require__(/*! ./nonIterableSpread.js */ "./node_modules/@babel/runtime/helpers/nonIterableSpread.js");
|
|
|
function _toConsumableArray(arr) {
|
|
|
return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();
|
|
|
}
|
|
|
module.exports = _toConsumableArray, module.exports.__esModule = true, module.exports["default"] = module.exports;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@babel/runtime/helpers/typeof.js":
|
|
|
/*!*******************************************************!*\
|
|
|
!*** ./node_modules/@babel/runtime/helpers/typeof.js ***!
|
|
|
\*******************************************************/
|
|
|
/***/ ((module) => {
|
|
|
|
|
|
function _typeof(obj) {
|
|
|
"@babel/helpers - typeof";
|
|
|
|
|
|
return (module.exports = _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) {
|
|
|
return typeof obj;
|
|
|
} : function (obj) {
|
|
|
return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
|
|
|
}, module.exports.__esModule = true, module.exports["default"] = module.exports), _typeof(obj);
|
|
|
}
|
|
|
module.exports = _typeof, module.exports.__esModule = true, module.exports["default"] = module.exports;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js":
|
|
|
/*!***************************************************************************!*\
|
|
|
!*** ./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js ***!
|
|
|
\***************************************************************************/
|
|
|
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
|
|
|
|
|
var arrayLikeToArray = __webpack_require__(/*! ./arrayLikeToArray.js */ "./node_modules/@babel/runtime/helpers/arrayLikeToArray.js");
|
|
|
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);
|
|
|
}
|
|
|
module.exports = _unsupportedIterableToArray, module.exports.__esModule = true, module.exports["default"] = module.exports;
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js":
|
|
|
/*!*********************************************************************!*\
|
|
|
!*** ./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js ***!
|
|
|
\*********************************************************************/
|
|
|
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (/* binding */ _arrayLikeToArray)
|
|
|
/* harmony export */ });
|
|
|
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;
|
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js":
|
|
|
/*!*******************************************************************!*\
|
|
|
!*** ./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js ***!
|
|
|
\*******************************************************************/
|
|
|
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (/* binding */ _arrayWithHoles)
|
|
|
/* harmony export */ });
|
|
|
function _arrayWithHoles(arr) {
|
|
|
if (Array.isArray(arr)) return arr;
|
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js":
|
|
|
/*!**********************************************************************!*\
|
|
|
!*** ./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js ***!
|
|
|
\**********************************************************************/
|
|
|
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (/* binding */ _arrayWithoutHoles)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var _arrayLikeToArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./arrayLikeToArray.js */ "./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js");
|
|
|
|
|
|
function _arrayWithoutHoles(arr) {
|
|
|
if (Array.isArray(arr)) return (0,_arrayLikeToArray_js__WEBPACK_IMPORTED_MODULE_0__["default"])(arr);
|
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js":
|
|
|
/*!**************************************************************************!*\
|
|
|
!*** ./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js ***!
|
|
|
\**************************************************************************/
|
|
|
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (/* binding */ _assertThisInitialized)
|
|
|
/* harmony export */ });
|
|
|
function _assertThisInitialized(self) {
|
|
|
if (self === void 0) {
|
|
|
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
|
|
|
}
|
|
|
return self;
|
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js":
|
|
|
/*!*********************************************************************!*\
|
|
|
!*** ./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js ***!
|
|
|
\*********************************************************************/
|
|
|
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (/* binding */ _asyncToGenerator)
|
|
|
/* harmony export */ });
|
|
|
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
|
|
|
try {
|
|
|
var info = gen[key](arg);
|
|
|
var value = info.value;
|
|
|
} catch (error) {
|
|
|
reject(error);
|
|
|
return;
|
|
|
}
|
|
|
if (info.done) {
|
|
|
resolve(value);
|
|
|
} else {
|
|
|
Promise.resolve(value).then(_next, _throw);
|
|
|
}
|
|
|
}
|
|
|
function _asyncToGenerator(fn) {
|
|
|
return function () {
|
|
|
var self = this,
|
|
|
args = arguments;
|
|
|
return new Promise(function (resolve, reject) {
|
|
|
var gen = fn.apply(self, args);
|
|
|
function _next(value) {
|
|
|
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
|
|
|
}
|
|
|
function _throw(err) {
|
|
|
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
|
|
|
}
|
|
|
_next(undefined);
|
|
|
});
|
|
|
};
|
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@babel/runtime/helpers/esm/classCallCheck.js":
|
|
|
/*!*******************************************************************!*\
|
|
|
!*** ./node_modules/@babel/runtime/helpers/esm/classCallCheck.js ***!
|
|
|
\*******************************************************************/
|
|
|
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (/* binding */ _classCallCheck)
|
|
|
/* harmony export */ });
|
|
|
function _classCallCheck(instance, Constructor) {
|
|
|
if (!(instance instanceof Constructor)) {
|
|
|
throw new TypeError("Cannot call a class as a function");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@babel/runtime/helpers/esm/createClass.js":
|
|
|
/*!****************************************************************!*\
|
|
|
!*** ./node_modules/@babel/runtime/helpers/esm/createClass.js ***!
|
|
|
\****************************************************************/
|
|
|
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (/* binding */ _createClass)
|
|
|
/* harmony export */ });
|
|
|
function _defineProperties(target, props) {
|
|
|
for (var i = 0; i < props.length; i++) {
|
|
|
var descriptor = props[i];
|
|
|
descriptor.enumerable = descriptor.enumerable || false;
|
|
|
descriptor.configurable = true;
|
|
|
if ("value" in descriptor) descriptor.writable = true;
|
|
|
Object.defineProperty(target, descriptor.key, descriptor);
|
|
|
}
|
|
|
}
|
|
|
function _createClass(Constructor, protoProps, staticProps) {
|
|
|
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
|
|
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
|
Object.defineProperty(Constructor, "prototype", {
|
|
|
writable: false
|
|
|
});
|
|
|
return Constructor;
|
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@babel/runtime/helpers/esm/createSuper.js":
|
|
|
/*!****************************************************************!*\
|
|
|
!*** ./node_modules/@babel/runtime/helpers/esm/createSuper.js ***!
|
|
|
\****************************************************************/
|
|
|
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (/* binding */ _createSuper)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var _getPrototypeOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getPrototypeOf.js */ "./node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js");
|
|
|
/* harmony import */ var _isNativeReflectConstruct_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./isNativeReflectConstruct.js */ "./node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js");
|
|
|
/* harmony import */ var _possibleConstructorReturn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./possibleConstructorReturn.js */ "./node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js");
|
|
|
|
|
|
|
|
|
|
|
|
function _createSuper(Derived) {
|
|
|
var hasNativeReflectConstruct = (0,_isNativeReflectConstruct_js__WEBPACK_IMPORTED_MODULE_1__["default"])();
|
|
|
return function _createSuperInternal() {
|
|
|
var Super = (0,_getPrototypeOf_js__WEBPACK_IMPORTED_MODULE_0__["default"])(Derived),
|
|
|
result;
|
|
|
if (hasNativeReflectConstruct) {
|
|
|
var NewTarget = (0,_getPrototypeOf_js__WEBPACK_IMPORTED_MODULE_0__["default"])(this).constructor;
|
|
|
result = Reflect.construct(Super, arguments, NewTarget);
|
|
|
} else {
|
|
|
result = Super.apply(this, arguments);
|
|
|
}
|
|
|
return (0,_possibleConstructorReturn_js__WEBPACK_IMPORTED_MODULE_2__["default"])(this, result);
|
|
|
};
|
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@babel/runtime/helpers/esm/defineProperty.js":
|
|
|
/*!*******************************************************************!*\
|
|
|
!*** ./node_modules/@babel/runtime/helpers/esm/defineProperty.js ***!
|
|
|
\*******************************************************************/
|
|
|
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (/* binding */ _defineProperty)
|
|
|
/* harmony export */ });
|
|
|
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;
|
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@babel/runtime/helpers/esm/extends.js":
|
|
|
/*!************************************************************!*\
|
|
|
!*** ./node_modules/@babel/runtime/helpers/esm/extends.js ***!
|
|
|
\************************************************************/
|
|
|
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (/* binding */ _extends)
|
|
|
/* harmony export */ });
|
|
|
function _extends() {
|
|
|
_extends = Object.assign ? Object.assign.bind() : 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);
|
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js":
|
|
|
/*!*******************************************************************!*\
|
|
|
!*** ./node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js ***!
|
|
|
\*******************************************************************/
|
|
|
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (/* binding */ _getPrototypeOf)
|
|
|
/* harmony export */ });
|
|
|
function _getPrototypeOf(o) {
|
|
|
_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) {
|
|
|
return o.__proto__ || Object.getPrototypeOf(o);
|
|
|
};
|
|
|
return _getPrototypeOf(o);
|
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@babel/runtime/helpers/esm/inherits.js":
|
|
|
/*!*************************************************************!*\
|
|
|
!*** ./node_modules/@babel/runtime/helpers/esm/inherits.js ***!
|
|
|
\*************************************************************/
|
|
|
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (/* binding */ _inherits)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var _setPrototypeOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./setPrototypeOf.js */ "./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js");
|
|
|
|
|
|
function _inherits(subClass, superClass) {
|
|
|
if (typeof superClass !== "function" && superClass !== null) {
|
|
|
throw new TypeError("Super expression must either be null or a function");
|
|
|
}
|
|
|
subClass.prototype = Object.create(superClass && superClass.prototype, {
|
|
|
constructor: {
|
|
|
value: subClass,
|
|
|
writable: true,
|
|
|
configurable: true
|
|
|
}
|
|
|
});
|
|
|
Object.defineProperty(subClass, "prototype", {
|
|
|
writable: false
|
|
|
});
|
|
|
if (superClass) (0,_setPrototypeOf_js__WEBPACK_IMPORTED_MODULE_0__["default"])(subClass, superClass);
|
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js":
|
|
|
/*!*****************************************************************************!*\
|
|
|
!*** ./node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js ***!
|
|
|
\*****************************************************************************/
|
|
|
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (/* binding */ _isNativeReflectConstruct)
|
|
|
/* harmony export */ });
|
|
|
function _isNativeReflectConstruct() {
|
|
|
if (typeof Reflect === "undefined" || !Reflect.construct) return false;
|
|
|
if (Reflect.construct.sham) return false;
|
|
|
if (typeof Proxy === "function") return true;
|
|
|
try {
|
|
|
Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
|
|
|
return true;
|
|
|
} catch (e) {
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@babel/runtime/helpers/esm/iterableToArray.js":
|
|
|
/*!********************************************************************!*\
|
|
|
!*** ./node_modules/@babel/runtime/helpers/esm/iterableToArray.js ***!
|
|
|
\********************************************************************/
|
|
|
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (/* binding */ _iterableToArray)
|
|
|
/* harmony export */ });
|
|
|
function _iterableToArray(iter) {
|
|
|
if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
|
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js":
|
|
|
/*!*************************************************************************!*\
|
|
|
!*** ./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js ***!
|
|
|
\*************************************************************************/
|
|
|
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (/* binding */ _iterableToArrayLimit)
|
|
|
/* harmony export */ });
|
|
|
function _iterableToArrayLimit(arr, i) {
|
|
|
var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
|
|
|
if (_i == null) return;
|
|
|
var _arr = [];
|
|
|
var _n = true;
|
|
|
var _d = false;
|
|
|
var _s, _e;
|
|
|
try {
|
|
|
for (_i = _i.call(arr); !(_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;
|
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js":
|
|
|
/*!********************************************************************!*\
|
|
|
!*** ./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js ***!
|
|
|
\********************************************************************/
|
|
|
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (/* binding */ _nonIterableRest)
|
|
|
/* harmony export */ });
|
|
|
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.");
|
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js":
|
|
|
/*!**********************************************************************!*\
|
|
|
!*** ./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js ***!
|
|
|
\**********************************************************************/
|
|
|
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (/* binding */ _nonIterableSpread)
|
|
|
/* harmony export */ });
|
|
|
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.");
|
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@babel/runtime/helpers/esm/objectSpread2.js":
|
|
|
/*!******************************************************************!*\
|
|
|
!*** ./node_modules/@babel/runtime/helpers/esm/objectSpread2.js ***!
|
|
|
\******************************************************************/
|
|
|
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (/* binding */ _objectSpread2)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var _defineProperty_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./defineProperty.js */ "./node_modules/@babel/runtime/helpers/esm/defineProperty.js");
|
|
|
|
|
|
function ownKeys(object, enumerableOnly) {
|
|
|
var keys = Object.keys(object);
|
|
|
if (Object.getOwnPropertySymbols) {
|
|
|
var symbols = Object.getOwnPropertySymbols(object);
|
|
|
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 = null != arguments[i] ? arguments[i] : {};
|
|
|
i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {
|
|
|
(0,_defineProperty_js__WEBPACK_IMPORTED_MODULE_0__["default"])(target, key, source[key]);
|
|
|
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {
|
|
|
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
|
|
});
|
|
|
}
|
|
|
return target;
|
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js":
|
|
|
/*!****************************************************************************!*\
|
|
|
!*** ./node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js ***!
|
|
|
\****************************************************************************/
|
|
|
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (/* binding */ _objectWithoutProperties)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var _objectWithoutPropertiesLoose_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./objectWithoutPropertiesLoose.js */ "./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js");
|
|
|
|
|
|
function _objectWithoutProperties(source, excluded) {
|
|
|
if (source == null) return {};
|
|
|
var target = (0,_objectWithoutPropertiesLoose_js__WEBPACK_IMPORTED_MODULE_0__["default"])(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;
|
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js":
|
|
|
/*!*********************************************************************************!*\
|
|
|
!*** ./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js ***!
|
|
|
\*********************************************************************************/
|
|
|
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (/* binding */ _objectWithoutPropertiesLoose)
|
|
|
/* harmony export */ });
|
|
|
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;
|
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js":
|
|
|
/*!******************************************************************************!*\
|
|
|
!*** ./node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js ***!
|
|
|
\******************************************************************************/
|
|
|
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (/* binding */ _possibleConstructorReturn)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var _typeof_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./typeof.js */ "./node_modules/@babel/runtime/helpers/esm/typeof.js");
|
|
|
/* harmony import */ var _assertThisInitialized_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./assertThisInitialized.js */ "./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js");
|
|
|
|
|
|
|
|
|
function _possibleConstructorReturn(self, call) {
|
|
|
if (call && ((0,_typeof_js__WEBPACK_IMPORTED_MODULE_0__["default"])(call) === "object" || typeof call === "function")) {
|
|
|
return call;
|
|
|
} else if (call !== void 0) {
|
|
|
throw new TypeError("Derived constructors may only return object or undefined");
|
|
|
}
|
|
|
return (0,_assertThisInitialized_js__WEBPACK_IMPORTED_MODULE_1__["default"])(self);
|
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@babel/runtime/helpers/esm/regeneratorRuntime.js":
|
|
|
/*!***********************************************************************!*\
|
|
|
!*** ./node_modules/@babel/runtime/helpers/esm/regeneratorRuntime.js ***!
|
|
|
\***********************************************************************/
|
|
|
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (/* binding */ _regeneratorRuntime)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var _typeof_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./typeof.js */ "./node_modules/@babel/runtime/helpers/esm/typeof.js");
|
|
|
|
|
|
function _regeneratorRuntime() {
|
|
|
"use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */
|
|
|
_regeneratorRuntime = function _regeneratorRuntime() {
|
|
|
return exports;
|
|
|
};
|
|
|
var exports = {},
|
|
|
Op = Object.prototype,
|
|
|
hasOwn = Op.hasOwnProperty,
|
|
|
defineProperty = Object.defineProperty || function (obj, key, desc) {
|
|
|
obj[key] = desc.value;
|
|
|
},
|
|
|
$Symbol = "function" == typeof Symbol ? Symbol : {},
|
|
|
iteratorSymbol = $Symbol.iterator || "@@iterator",
|
|
|
asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator",
|
|
|
toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag";
|
|
|
function define(obj, key, value) {
|
|
|
return Object.defineProperty(obj, key, {
|
|
|
value: value,
|
|
|
enumerable: !0,
|
|
|
configurable: !0,
|
|
|
writable: !0
|
|
|
}), obj[key];
|
|
|
}
|
|
|
try {
|
|
|
define({}, "");
|
|
|
} catch (err) {
|
|
|
define = function define(obj, key, value) {
|
|
|
return obj[key] = value;
|
|
|
};
|
|
|
}
|
|
|
function wrap(innerFn, outerFn, self, tryLocsList) {
|
|
|
var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator,
|
|
|
generator = Object.create(protoGenerator.prototype),
|
|
|
context = new Context(tryLocsList || []);
|
|
|
return defineProperty(generator, "_invoke", {
|
|
|
value: makeInvokeMethod(innerFn, self, context)
|
|
|
}), generator;
|
|
|
}
|
|
|
function tryCatch(fn, obj, arg) {
|
|
|
try {
|
|
|
return {
|
|
|
type: "normal",
|
|
|
arg: fn.call(obj, arg)
|
|
|
};
|
|
|
} catch (err) {
|
|
|
return {
|
|
|
type: "throw",
|
|
|
arg: err
|
|
|
};
|
|
|
}
|
|
|
}
|
|
|
exports.wrap = wrap;
|
|
|
var ContinueSentinel = {};
|
|
|
function Generator() {}
|
|
|
function GeneratorFunction() {}
|
|
|
function GeneratorFunctionPrototype() {}
|
|
|
var IteratorPrototype = {};
|
|
|
define(IteratorPrototype, iteratorSymbol, function () {
|
|
|
return this;
|
|
|
});
|
|
|
var getProto = Object.getPrototypeOf,
|
|
|
NativeIteratorPrototype = getProto && getProto(getProto(values([])));
|
|
|
NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype);
|
|
|
var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype);
|
|
|
function defineIteratorMethods(prototype) {
|
|
|
["next", "throw", "return"].forEach(function (method) {
|
|
|
define(prototype, method, function (arg) {
|
|
|
return this._invoke(method, arg);
|
|
|
});
|
|
|
});
|
|
|
}
|
|
|
function AsyncIterator(generator, PromiseImpl) {
|
|
|
function invoke(method, arg, resolve, reject) {
|
|
|
var record = tryCatch(generator[method], generator, arg);
|
|
|
if ("throw" !== record.type) {
|
|
|
var result = record.arg,
|
|
|
value = result.value;
|
|
|
return value && "object" == (0,_typeof_js__WEBPACK_IMPORTED_MODULE_0__["default"])(value) && hasOwn.call(value, "__await") ? PromiseImpl.resolve(value.__await).then(function (value) {
|
|
|
invoke("next", value, resolve, reject);
|
|
|
}, function (err) {
|
|
|
invoke("throw", err, resolve, reject);
|
|
|
}) : PromiseImpl.resolve(value).then(function (unwrapped) {
|
|
|
result.value = unwrapped, resolve(result);
|
|
|
}, function (error) {
|
|
|
return invoke("throw", error, resolve, reject);
|
|
|
});
|
|
|
}
|
|
|
reject(record.arg);
|
|
|
}
|
|
|
var previousPromise;
|
|
|
defineProperty(this, "_invoke", {
|
|
|
value: function value(method, arg) {
|
|
|
function callInvokeWithMethodAndArg() {
|
|
|
return new PromiseImpl(function (resolve, reject) {
|
|
|
invoke(method, arg, resolve, reject);
|
|
|
});
|
|
|
}
|
|
|
return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
function makeInvokeMethod(innerFn, self, context) {
|
|
|
var state = "suspendedStart";
|
|
|
return function (method, arg) {
|
|
|
if ("executing" === state) throw new Error("Generator is already running");
|
|
|
if ("completed" === state) {
|
|
|
if ("throw" === method) throw arg;
|
|
|
return doneResult();
|
|
|
}
|
|
|
for (context.method = method, context.arg = arg;;) {
|
|
|
var delegate = context.delegate;
|
|
|
if (delegate) {
|
|
|
var delegateResult = maybeInvokeDelegate(delegate, context);
|
|
|
if (delegateResult) {
|
|
|
if (delegateResult === ContinueSentinel) continue;
|
|
|
return delegateResult;
|
|
|
}
|
|
|
}
|
|
|
if ("next" === context.method) context.sent = context._sent = context.arg;else if ("throw" === context.method) {
|
|
|
if ("suspendedStart" === state) throw state = "completed", context.arg;
|
|
|
context.dispatchException(context.arg);
|
|
|
} else "return" === context.method && context.abrupt("return", context.arg);
|
|
|
state = "executing";
|
|
|
var record = tryCatch(innerFn, self, context);
|
|
|
if ("normal" === record.type) {
|
|
|
if (state = context.done ? "completed" : "suspendedYield", record.arg === ContinueSentinel) continue;
|
|
|
return {
|
|
|
value: record.arg,
|
|
|
done: context.done
|
|
|
};
|
|
|
}
|
|
|
"throw" === record.type && (state = "completed", context.method = "throw", context.arg = record.arg);
|
|
|
}
|
|
|
};
|
|
|
}
|
|
|
function maybeInvokeDelegate(delegate, context) {
|
|
|
var method = delegate.iterator[context.method];
|
|
|
if (undefined === method) {
|
|
|
if (context.delegate = null, "throw" === context.method) {
|
|
|
if (delegate.iterator["return"] && (context.method = "return", context.arg = undefined, maybeInvokeDelegate(delegate, context), "throw" === context.method)) return ContinueSentinel;
|
|
|
context.method = "throw", context.arg = new TypeError("The iterator does not provide a 'throw' method");
|
|
|
}
|
|
|
return ContinueSentinel;
|
|
|
}
|
|
|
var record = tryCatch(method, delegate.iterator, context.arg);
|
|
|
if ("throw" === record.type) return context.method = "throw", context.arg = record.arg, context.delegate = null, ContinueSentinel;
|
|
|
var info = record.arg;
|
|
|
return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, "return" !== context.method && (context.method = "next", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = "throw", context.arg = new TypeError("iterator result is not an object"), context.delegate = null, ContinueSentinel);
|
|
|
}
|
|
|
function pushTryEntry(locs) {
|
|
|
var entry = {
|
|
|
tryLoc: locs[0]
|
|
|
};
|
|
|
1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry);
|
|
|
}
|
|
|
function resetTryEntry(entry) {
|
|
|
var record = entry.completion || {};
|
|
|
record.type = "normal", delete record.arg, entry.completion = record;
|
|
|
}
|
|
|
function Context(tryLocsList) {
|
|
|
this.tryEntries = [{
|
|
|
tryLoc: "root"
|
|
|
}], tryLocsList.forEach(pushTryEntry, this), this.reset(!0);
|
|
|
}
|
|
|
function values(iterable) {
|
|
|
if (iterable) {
|
|
|
var iteratorMethod = iterable[iteratorSymbol];
|
|
|
if (iteratorMethod) return iteratorMethod.call(iterable);
|
|
|
if ("function" == typeof iterable.next) return iterable;
|
|
|
if (!isNaN(iterable.length)) {
|
|
|
var i = -1,
|
|
|
next = function next() {
|
|
|
for (; ++i < iterable.length;) {
|
|
|
if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next;
|
|
|
}
|
|
|
return next.value = undefined, next.done = !0, next;
|
|
|
};
|
|
|
return next.next = next;
|
|
|
}
|
|
|
}
|
|
|
return {
|
|
|
next: doneResult
|
|
|
};
|
|
|
}
|
|
|
function doneResult() {
|
|
|
return {
|
|
|
value: undefined,
|
|
|
done: !0
|
|
|
};
|
|
|
}
|
|
|
return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, "constructor", {
|
|
|
value: GeneratorFunctionPrototype,
|
|
|
configurable: !0
|
|
|
}), defineProperty(GeneratorFunctionPrototype, "constructor", {
|
|
|
value: GeneratorFunction,
|
|
|
configurable: !0
|
|
|
}), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction"), exports.isGeneratorFunction = function (genFun) {
|
|
|
var ctor = "function" == typeof genFun && genFun.constructor;
|
|
|
return !!ctor && (ctor === GeneratorFunction || "GeneratorFunction" === (ctor.displayName || ctor.name));
|
|
|
}, exports.mark = function (genFun) {
|
|
|
return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, "GeneratorFunction")), genFun.prototype = Object.create(Gp), genFun;
|
|
|
}, exports.awrap = function (arg) {
|
|
|
return {
|
|
|
__await: arg
|
|
|
};
|
|
|
}, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () {
|
|
|
return this;
|
|
|
}), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) {
|
|
|
void 0 === PromiseImpl && (PromiseImpl = Promise);
|
|
|
var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl);
|
|
|
return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) {
|
|
|
return result.done ? result.value : iter.next();
|
|
|
});
|
|
|
}, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, "Generator"), define(Gp, iteratorSymbol, function () {
|
|
|
return this;
|
|
|
}), define(Gp, "toString", function () {
|
|
|
return "[object Generator]";
|
|
|
}), exports.keys = function (val) {
|
|
|
var object = Object(val),
|
|
|
keys = [];
|
|
|
for (var key in object) {
|
|
|
keys.push(key);
|
|
|
}
|
|
|
return keys.reverse(), function next() {
|
|
|
for (; keys.length;) {
|
|
|
var key = keys.pop();
|
|
|
if (key in object) return next.value = key, next.done = !1, next;
|
|
|
}
|
|
|
return next.done = !0, next;
|
|
|
};
|
|
|
}, exports.values = values, Context.prototype = {
|
|
|
constructor: Context,
|
|
|
reset: function reset(skipTempReset) {
|
|
|
if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = "next", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) {
|
|
|
"t" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined);
|
|
|
}
|
|
|
},
|
|
|
stop: function stop() {
|
|
|
this.done = !0;
|
|
|
var rootRecord = this.tryEntries[0].completion;
|
|
|
if ("throw" === rootRecord.type) throw rootRecord.arg;
|
|
|
return this.rval;
|
|
|
},
|
|
|
dispatchException: function dispatchException(exception) {
|
|
|
if (this.done) throw exception;
|
|
|
var context = this;
|
|
|
function handle(loc, caught) {
|
|
|
return record.type = "throw", record.arg = exception, context.next = loc, caught && (context.method = "next", context.arg = undefined), !!caught;
|
|
|
}
|
|
|
for (var i = this.tryEntries.length - 1; i >= 0; --i) {
|
|
|
var entry = this.tryEntries[i],
|
|
|
record = entry.completion;
|
|
|
if ("root" === entry.tryLoc) return handle("end");
|
|
|
if (entry.tryLoc <= this.prev) {
|
|
|
var hasCatch = hasOwn.call(entry, "catchLoc"),
|
|
|
hasFinally = hasOwn.call(entry, "finallyLoc");
|
|
|
if (hasCatch && hasFinally) {
|
|
|
if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0);
|
|
|
if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc);
|
|
|
} else if (hasCatch) {
|
|
|
if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0);
|
|
|
} else {
|
|
|
if (!hasFinally) throw new Error("try statement without catch or finally");
|
|
|
if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
},
|
|
|
abrupt: function abrupt(type, arg) {
|
|
|
for (var i = this.tryEntries.length - 1; i >= 0; --i) {
|
|
|
var entry = this.tryEntries[i];
|
|
|
if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) {
|
|
|
var finallyEntry = entry;
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
finallyEntry && ("break" === type || "continue" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null);
|
|
|
var record = finallyEntry ? finallyEntry.completion : {};
|
|
|
return record.type = type, record.arg = arg, finallyEntry ? (this.method = "next", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record);
|
|
|
},
|
|
|
complete: function complete(record, afterLoc) {
|
|
|
if ("throw" === record.type) throw record.arg;
|
|
|
return "break" === record.type || "continue" === record.type ? this.next = record.arg : "return" === record.type ? (this.rval = this.arg = record.arg, this.method = "return", this.next = "end") : "normal" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel;
|
|
|
},
|
|
|
finish: function finish(finallyLoc) {
|
|
|
for (var i = this.tryEntries.length - 1; i >= 0; --i) {
|
|
|
var entry = this.tryEntries[i];
|
|
|
if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel;
|
|
|
}
|
|
|
},
|
|
|
"catch": function _catch(tryLoc) {
|
|
|
for (var i = this.tryEntries.length - 1; i >= 0; --i) {
|
|
|
var entry = this.tryEntries[i];
|
|
|
if (entry.tryLoc === tryLoc) {
|
|
|
var record = entry.completion;
|
|
|
if ("throw" === record.type) {
|
|
|
var thrown = record.arg;
|
|
|
resetTryEntry(entry);
|
|
|
}
|
|
|
return thrown;
|
|
|
}
|
|
|
}
|
|
|
throw new Error("illegal catch attempt");
|
|
|
},
|
|
|
delegateYield: function delegateYield(iterable, resultName, nextLoc) {
|
|
|
return this.delegate = {
|
|
|
iterator: values(iterable),
|
|
|
resultName: resultName,
|
|
|
nextLoc: nextLoc
|
|
|
}, "next" === this.method && (this.arg = undefined), ContinueSentinel;
|
|
|
}
|
|
|
}, exports;
|
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js":
|
|
|
/*!*******************************************************************!*\
|
|
|
!*** ./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js ***!
|
|
|
\*******************************************************************/
|
|
|
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (/* binding */ _setPrototypeOf)
|
|
|
/* harmony export */ });
|
|
|
function _setPrototypeOf(o, p) {
|
|
|
_setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {
|
|
|
o.__proto__ = p;
|
|
|
return o;
|
|
|
};
|
|
|
return _setPrototypeOf(o, p);
|
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@babel/runtime/helpers/esm/slicedToArray.js":
|
|
|
/*!******************************************************************!*\
|
|
|
!*** ./node_modules/@babel/runtime/helpers/esm/slicedToArray.js ***!
|
|
|
\******************************************************************/
|
|
|
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (/* binding */ _slicedToArray)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var _arrayWithHoles_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./arrayWithHoles.js */ "./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js");
|
|
|
/* harmony import */ var _iterableToArrayLimit_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./iterableToArrayLimit.js */ "./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js");
|
|
|
/* harmony import */ var _unsupportedIterableToArray_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./unsupportedIterableToArray.js */ "./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js");
|
|
|
/* harmony import */ var _nonIterableRest_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./nonIterableRest.js */ "./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function _slicedToArray(arr, i) {
|
|
|
return (0,_arrayWithHoles_js__WEBPACK_IMPORTED_MODULE_0__["default"])(arr) || (0,_iterableToArrayLimit_js__WEBPACK_IMPORTED_MODULE_1__["default"])(arr, i) || (0,_unsupportedIterableToArray_js__WEBPACK_IMPORTED_MODULE_2__["default"])(arr, i) || (0,_nonIterableRest_js__WEBPACK_IMPORTED_MODULE_3__["default"])();
|
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@babel/runtime/helpers/esm/toArray.js":
|
|
|
/*!************************************************************!*\
|
|
|
!*** ./node_modules/@babel/runtime/helpers/esm/toArray.js ***!
|
|
|
\************************************************************/
|
|
|
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (/* binding */ _toArray)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var _arrayWithHoles_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./arrayWithHoles.js */ "./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js");
|
|
|
/* harmony import */ var _iterableToArray_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./iterableToArray.js */ "./node_modules/@babel/runtime/helpers/esm/iterableToArray.js");
|
|
|
/* harmony import */ var _unsupportedIterableToArray_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./unsupportedIterableToArray.js */ "./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js");
|
|
|
/* harmony import */ var _nonIterableRest_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./nonIterableRest.js */ "./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function _toArray(arr) {
|
|
|
return (0,_arrayWithHoles_js__WEBPACK_IMPORTED_MODULE_0__["default"])(arr) || (0,_iterableToArray_js__WEBPACK_IMPORTED_MODULE_1__["default"])(arr) || (0,_unsupportedIterableToArray_js__WEBPACK_IMPORTED_MODULE_2__["default"])(arr) || (0,_nonIterableRest_js__WEBPACK_IMPORTED_MODULE_3__["default"])();
|
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js":
|
|
|
/*!**********************************************************************!*\
|
|
|
!*** ./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js ***!
|
|
|
\**********************************************************************/
|
|
|
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (/* binding */ _toConsumableArray)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var _arrayWithoutHoles_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./arrayWithoutHoles.js */ "./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js");
|
|
|
/* harmony import */ var _iterableToArray_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./iterableToArray.js */ "./node_modules/@babel/runtime/helpers/esm/iterableToArray.js");
|
|
|
/* harmony import */ var _unsupportedIterableToArray_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./unsupportedIterableToArray.js */ "./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js");
|
|
|
/* harmony import */ var _nonIterableSpread_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./nonIterableSpread.js */ "./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function _toConsumableArray(arr) {
|
|
|
return (0,_arrayWithoutHoles_js__WEBPACK_IMPORTED_MODULE_0__["default"])(arr) || (0,_iterableToArray_js__WEBPACK_IMPORTED_MODULE_1__["default"])(arr) || (0,_unsupportedIterableToArray_js__WEBPACK_IMPORTED_MODULE_2__["default"])(arr) || (0,_nonIterableSpread_js__WEBPACK_IMPORTED_MODULE_3__["default"])();
|
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@babel/runtime/helpers/esm/typeof.js":
|
|
|
/*!***********************************************************!*\
|
|
|
!*** ./node_modules/@babel/runtime/helpers/esm/typeof.js ***!
|
|
|
\***********************************************************/
|
|
|
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (/* binding */ _typeof)
|
|
|
/* harmony export */ });
|
|
|
function _typeof(obj) {
|
|
|
"@babel/helpers - typeof";
|
|
|
|
|
|
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) {
|
|
|
return typeof obj;
|
|
|
} : function (obj) {
|
|
|
return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
|
|
|
}, _typeof(obj);
|
|
|
}
|
|
|
|
|
|
/***/ }),
|
|
|
|
|
|
/***/ "./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js":
|
|
|
/*!*******************************************************************************!*\
|
|
|
!*** ./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js ***!
|
|
|
\*******************************************************************************/
|
|
|
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
|
|
|
|
|
"use strict";
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (/* binding */ _unsupportedIterableToArray)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var _arrayLikeToArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./arrayLikeToArray.js */ "./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js");
|
|
|
|
|
|
function _unsupportedIterableToArray(o, minLen) {
|
|
|
if (!o) return;
|
|
|
if (typeof o === "string") return (0,_arrayLikeToArray_js__WEBPACK_IMPORTED_MODULE_0__["default"])(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 (0,_arrayLikeToArray_js__WEBPACK_IMPORTED_MODULE_0__["default"])(o, minLen);
|
|
|
}
|
|
|
|
|
|
/***/ })
|
|
|
|
|
|
/******/ });
|
|
|
/************************************************************************/
|
|
|
/******/ // The module cache
|
|
|
/******/ var __webpack_module_cache__ = {};
|
|
|
/******/
|
|
|
/******/ // The require function
|
|
|
/******/ function __webpack_require__(moduleId) {
|
|
|
/******/ // Check if module is in cache
|
|
|
/******/ var cachedModule = __webpack_module_cache__[moduleId];
|
|
|
/******/ if (cachedModule !== undefined) {
|
|
|
/******/ return cachedModule.exports;
|
|
|
/******/ }
|
|
|
/******/ // Create a new module (and put it into the cache)
|
|
|
/******/ var module = __webpack_module_cache__[moduleId] = {
|
|
|
/******/ id: moduleId,
|
|
|
/******/ loaded: false,
|
|
|
/******/ exports: {}
|
|
|
/******/ };
|
|
|
/******/
|
|
|
/******/ // Execute the module function
|
|
|
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
|
|
|
/******/
|
|
|
/******/ // Flag the module as loaded
|
|
|
/******/ module.loaded = true;
|
|
|
/******/
|
|
|
/******/ // Return the exports of the module
|
|
|
/******/ return module.exports;
|
|
|
/******/ }
|
|
|
/******/
|
|
|
/******/ // expose the modules object (__webpack_modules__)
|
|
|
/******/ __webpack_require__.m = __webpack_modules__;
|
|
|
/******/
|
|
|
/************************************************************************/
|
|
|
/******/ /* webpack/runtime/compat get default export */
|
|
|
/******/ (() => {
|
|
|
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
|
|
/******/ __webpack_require__.n = (module) => {
|
|
|
/******/ var getter = module && module.__esModule ?
|
|
|
/******/ () => (module['default']) :
|
|
|
/******/ () => (module);
|
|
|
/******/ __webpack_require__.d(getter, { a: getter });
|
|
|
/******/ return getter;
|
|
|
/******/ };
|
|
|
/******/ })();
|
|
|
/******/
|
|
|
/******/ /* webpack/runtime/create fake namespace object */
|
|
|
/******/ (() => {
|
|
|
/******/ var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);
|
|
|
/******/ var leafPrototypes;
|
|
|
/******/ // create a fake namespace object
|
|
|
/******/ // mode & 1: value is a module id, require it
|
|
|
/******/ // mode & 2: merge all properties of value into the ns
|
|
|
/******/ // mode & 4: return value when already ns object
|
|
|
/******/ // mode & 16: return value when it's Promise-like
|
|
|
/******/ // mode & 8|1: behave like require
|
|
|
/******/ __webpack_require__.t = function(value, mode) {
|
|
|
/******/ if(mode & 1) value = this(value);
|
|
|
/******/ if(mode & 8) return value;
|
|
|
/******/ if(typeof value === 'object' && value) {
|
|
|
/******/ if((mode & 4) && value.__esModule) return value;
|
|
|
/******/ if((mode & 16) && typeof value.then === 'function') return value;
|
|
|
/******/ }
|
|
|
/******/ var ns = Object.create(null);
|
|
|
/******/ __webpack_require__.r(ns);
|
|
|
/******/ var def = {};
|
|
|
/******/ leafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];
|
|
|
/******/ for(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {
|
|
|
/******/ Object.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));
|
|
|
/******/ }
|
|
|
/******/ def['default'] = () => (value);
|
|
|
/******/ __webpack_require__.d(ns, def);
|
|
|
/******/ return ns;
|
|
|
/******/ };
|
|
|
/******/ })();
|
|
|
/******/
|
|
|
/******/ /* webpack/runtime/define property getters */
|
|
|
/******/ (() => {
|
|
|
/******/ // define getter functions for harmony exports
|
|
|
/******/ __webpack_require__.d = (exports, definition) => {
|
|
|
/******/ for(var key in definition) {
|
|
|
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
|
|
|
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
|
|
|
/******/ }
|
|
|
/******/ }
|
|
|
/******/ };
|
|
|
/******/ })();
|
|
|
/******/
|
|
|
/******/ /* webpack/runtime/hasOwnProperty shorthand */
|
|
|
/******/ (() => {
|
|
|
/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
|
|
|
/******/ })();
|
|
|
/******/
|
|
|
/******/ /* webpack/runtime/make namespace object */
|
|
|
/******/ (() => {
|
|
|
/******/ // define __esModule on exports
|
|
|
/******/ __webpack_require__.r = (exports) => {
|
|
|
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
|
|
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
|
/******/ }
|
|
|
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
/******/ };
|
|
|
/******/ })();
|
|
|
/******/
|
|
|
/******/ /* webpack/runtime/node module decorator */
|
|
|
/******/ (() => {
|
|
|
/******/ __webpack_require__.nmd = (module) => {
|
|
|
/******/ module.paths = [];
|
|
|
/******/ if (!module.children) module.children = [];
|
|
|
/******/ return module;
|
|
|
/******/ };
|
|
|
/******/ })();
|
|
|
/******/
|
|
|
/******/ /* webpack/runtime/jsonp chunk loading */
|
|
|
/******/ (() => {
|
|
|
/******/ __webpack_require__.b = document.baseURI || self.location.href;
|
|
|
/******/
|
|
|
/******/ // object to store loaded and loading chunks
|
|
|
/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched
|
|
|
/******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded
|
|
|
/******/ var installedChunks = {
|
|
|
/******/ "main": 0
|
|
|
/******/ };
|
|
|
/******/
|
|
|
/******/ // no chunk on demand loading
|
|
|
/******/
|
|
|
/******/ // no prefetching
|
|
|
/******/
|
|
|
/******/ // no preloaded
|
|
|
/******/
|
|
|
/******/ // no HMR
|
|
|
/******/
|
|
|
/******/ // no HMR manifest
|
|
|
/******/
|
|
|
/******/ // no on chunks loaded
|
|
|
/******/
|
|
|
/******/ // no jsonp function
|
|
|
/******/ })();
|
|
|
/******/
|
|
|
/******/ /* webpack/runtime/nonce */
|
|
|
/******/ (() => {
|
|
|
/******/ __webpack_require__.nc = undefined;
|
|
|
/******/ })();
|
|
|
/******/
|
|
|
/************************************************************************/
|
|
|
var __webpack_exports__ = {};
|
|
|
// This entry need to be wrapped in an IIFE because it need to be in strict mode.
|
|
|
(() => {
|
|
|
"use strict";
|
|
|
var __webpack_exports__ = {};
|
|
|
/*!**********************!*\
|
|
|
!*** ./src/index.js ***!
|
|
|
\**********************/
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
|
|
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
|
/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-dom */ "./node_modules/react-dom/index.js");
|
|
|
/* harmony import */ var _netuno_service_client__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @netuno/service-client */ "./node_modules/@netuno/service-client/index.js");
|
|
|
/* harmony import */ var _netuno_service_client__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_netuno_service_client__WEBPACK_IMPORTED_MODULE_2__);
|
|
|
/* harmony import */ var _containers_DashboardContainer__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./containers/DashboardContainer */ "./src/containers/DashboardContainer/index.js");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_netuno_service_client__WEBPACK_IMPORTED_MODULE_2___default().config({
|
|
|
prefix: netuno.config.urlServices
|
|
|
});
|
|
|
var dashboardDiv = document.getElementById("app-dashboard");
|
|
|
var dashboardContainer = dashboardDiv ? react_dom__WEBPACK_IMPORTED_MODULE_1__.render( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_containers_DashboardContainer__WEBPACK_IMPORTED_MODULE_3__["default"], null), dashboardDiv) : false;
|
|
|
netuno.addNavigationLoad(function () {
|
|
|
$('[netuno-navigation]').find('a').on('netuno:click', function (e) {
|
|
|
var link = $(e.target);
|
|
|
if (dashboardContainer && link.is('[netuno-navigation-dashboard]')) {
|
|
|
// Menu > Dashboard > Clicked!
|
|
|
}
|
|
|
});
|
|
|
});
|
|
|
netuno.addContentLoad(function (container) {
|
|
|
// When any content is loaded dinamically this is executed...
|
|
|
if (container.is('[netuno-form-search="YOUR_FORM_NAME"]')) {
|
|
|
// When search page is loaded...
|
|
|
} else if (container.is('[netuno-form-edit="YOUR_FORM_NAME"]')) {
|
|
|
// When form edit is loaded...
|
|
|
}
|
|
|
});
|
|
|
netuno.addPageLoad(function () {
|
|
|
// When page is loaded...
|
|
|
var modal = $('#app-dashboard-modal-form');
|
|
|
modal.on('hidden.bs.modal', function () {
|
|
|
modal.find('[netuno-form-edit]').empty();
|
|
|
});
|
|
|
$('#app-dashboard-modal-form-button').on('click', function () {
|
|
|
modal.modal('show');
|
|
|
netuno.loadFormEdit(modal.find('[netuno-form]'));
|
|
|
});
|
|
|
modal.find('[netuno-form]').on('netuno:save', function () {
|
|
|
modal.modal('hide');
|
|
|
});
|
|
|
});
|
|
|
})();
|
|
|
|
|
|
// This entry need to be wrapped in an IIFE because it need to be in strict mode.
|
|
|
(() => {
|
|
|
"use strict";
|
|
|
/*!******************************!*\
|
|
|
!*** ./src/styles/main.less ***!
|
|
|
\******************************/
|
|
|
__webpack_require__.r(__webpack_exports__);
|
|
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
|
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
|
/* harmony export */ });
|
|
|
/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
|
|
|
/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);
|
|
|
/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../../node_modules/style-loader/dist/runtime/styleDomAPI.js */ "./node_modules/style-loader/dist/runtime/styleDomAPI.js");
|
|
|
/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__);
|
|
|
/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../node_modules/style-loader/dist/runtime/insertBySelector.js */ "./node_modules/style-loader/dist/runtime/insertBySelector.js");
|
|
|
/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__);
|
|
|
/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js");
|
|
|
/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__);
|
|
|
/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../../node_modules/style-loader/dist/runtime/insertStyleElement.js */ "./node_modules/style-loader/dist/runtime/insertStyleElement.js");
|
|
|
/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__);
|
|
|
/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../../node_modules/style-loader/dist/runtime/styleTagTransform.js */ "./node_modules/style-loader/dist/runtime/styleTagTransform.js");
|
|
|
/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__);
|
|
|
/* harmony import */ var _node_modules_css_loader_dist_cjs_js_ruleSet_1_rules_3_use_1_node_modules_less_loader_dist_cjs_js_ruleSet_1_rules_3_use_2_main_less__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!../../node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./main.less */ "./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[3].use[1]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[3].use[2]!./src/styles/main.less");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var options = {};
|
|
|
|
|
|
options.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());
|
|
|
options.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default());
|
|
|
|
|
|
options.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head");
|
|
|
|
|
|
options.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default());
|
|
|
options.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default());
|
|
|
|
|
|
var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_ruleSet_1_rules_3_use_1_node_modules_less_loader_dist_cjs_js_ruleSet_1_rules_3_use_2_main_less__WEBPACK_IMPORTED_MODULE_6__["default"], options);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_ruleSet_1_rules_3_use_1_node_modules_less_loader_dist_cjs_js_ruleSet_1_rules_3_use_2_main_less__WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_css_loader_dist_cjs_js_ruleSet_1_rules_3_use_1_node_modules_less_loader_dist_cjs_js_ruleSet_1_rules_3_use_2_main_less__WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_css_loader_dist_cjs_js_ruleSet_1_rules_3_use_1_node_modules_less_loader_dist_cjs_js_ruleSet_1_rules_3_use_2_main_less__WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined);
|
|
|
|
|
|
})();
|
|
|
|
|
|
/******/ })()
|
|
|
;
|
|
|
//# sourceMappingURL=main.js.map
|