UNPKG

tdesign-react

Version:
319 lines (311 loc) 13.3 kB
/** * tdesign v1.15.1 * (c) 2025 tdesign * @license MIT */ 'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var toConsumableArray = require('../../../_chunks/dep-e4e1901e.js'); var slicedToArray = require('../../../_chunks/dep-8e4d656d.js'); var React = require('react'); var classNames = require('classnames'); var color = require('../../../_chunks/dep-7cfeaee5.js'); var constants = require('../../../_chunks/dep-15247f60.js'); var hooks_useCommonClassName = require('../../../hooks/useCommonClassName.js'); var hooks_useMouseEvent = require('../../../hooks/useMouseEvent.js'); var inputNumber_index = require('../../../input-number/index.js'); var colorPicker_hooks_useClassNames = require('../../hooks/useClassNames.js'); var cloneDeep = require('../../../_chunks/dep-ab2f63ec.js'); require('../../../_chunks/dep-00b49251.js'); require('../../../_chunks/dep-69792df2.js'); require('../../../_chunks/dep-0006fcfa.js'); require('../../../_chunks/dep-667ac7af.js'); require('../../../_chunks/dep-4d5c26af.js'); require('../../../_chunks/dep-4ed9eda4.js'); require('../../../_chunks/dep-25585736.js'); require('../../../_chunks/dep-64577888.js'); require('../../../_chunks/dep-62e73936.js'); require('../../../_chunks/dep-95a6dd1c.js'); require('../../../hooks/useConfig.js'); require('../../../config-provider/ConfigContext.js'); require('../../../_chunks/dep-1df1dad8.js'); require('../../../_chunks/dep-5b5ab11b.js'); require('dayjs'); require('../../../_chunks/dep-f32c03f1.js'); require('../../../_chunks/dep-31c4bc3d.js'); require('../../../_chunks/dep-eea2872a.js'); require('../../../_chunks/dep-71455db7.js'); require('../../../_chunks/dep-9e5a468d.js'); require('../../../_chunks/dep-ec8d2dca.js'); require('../../../_chunks/dep-fc596d16.js'); require('../../../_chunks/dep-f26edb7b.js'); require('../../../_chunks/dep-f33c1939.js'); require('../../../_chunks/dep-21ece627.js'); require('../../../_chunks/dep-25e4aa84.js'); require('../../../_chunks/dep-e1fbe1c3.js'); require('../../../_chunks/dep-df2b541f.js'); require('../../../_chunks/dep-edd366db.js'); require('../../../_chunks/dep-a56c4939.js'); require('../../../_chunks/dep-6c297e20.js'); require('../../../_chunks/dep-b7ad4d54.js'); require('../../../_chunks/dep-a2cb9299.js'); require('../../../_chunks/dep-f981815b.js'); require('../../../input-number/InputNumber.js'); require('tdesign-icons-react'); require('../../../input/index.js'); require('../../../input/Input.js'); require('../../../_chunks/dep-8fa3a4c2.js'); require('../../../hooks/useLayoutEffect.js'); require('../../../_chunks/dep-381fa848.js'); require('../../../_util/forwardRefWithStatics.js'); require('hoist-non-react-statics'); require('../../../hooks/useGlobalIcon.js'); require('../../../input/InputGroup.js'); require('../../../hooks/useControlled.js'); require('../../../_util/noop.js'); require('../../../_chunks/dep-66114ce9.js'); require('../../../_chunks/dep-62d1dd66.js'); require('../../../_chunks/dep-7a148045.js'); require('../../../_chunks/dep-255ceed8.js'); require('../../../_chunks/dep-79629634.js'); require('../../../locale/LocalReceiver.js'); require('../../../config-provider/ConfigProvider.js'); require('../../../_chunks/dep-a48c7e8b.js'); require('../../../_chunks/dep-3d4656ee.js'); require('../../../_chunks/dep-0ffc9d96.js'); require('../../../_chunks/dep-efe6d243.js'); require('../../../_chunks/dep-4b18243f.js'); require('../../../_chunks/dep-bff2c990.js'); require('../../../input/defaultProps.js'); require('../../../_util/parseTNode.js'); require('../../../_chunks/dep-59671c87.js'); require('../../../input/useLengthLimit.js'); require('../../../_chunks/dep-002fcc1e.js'); require('../../../_chunks/dep-2ffa3ff1.js'); require('../../../hooks/useDefaultProps.js'); require('../../../button/index.js'); require('../../../button/Button.js'); require('../../../hooks/useDomRefCallback.js'); require('../../../hooks/useRipple.js'); require('../../../_chunks/dep-dc4ce063.js'); require('../../../hooks/useAnimation.js'); require('../../../loading/index.js'); require('../../../loading/Loading.js'); require('../../../common/Portal.js'); require('react-dom'); require('../../../loading/gradient.js'); require('../../../loading/defaultProps.js'); require('../../../loading/plugin.js'); require('../../../_util/react-render.js'); require('../../../_chunks/dep-65ef8e09.js'); require('../../../common/PluginContainer.js'); require('../../../button/defaultProps.js'); require('../../../input-number/useInputNumber.js'); require('../../../_chunks/dep-e75d22fc.js'); require('../../../_chunks/dep-221787fe.js'); require('../../../input-number/defaultProps.js'); function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } var React__default = /*#__PURE__*/_interopDefaultLegacy(React); var classNames__default = /*#__PURE__*/_interopDefaultLegacy(classNames); var DELETE_KEYS = ["delete", "backspace"]; var LinearGradient = function LinearGradient(props) { var _allGradientColors$, _allGradientColors; var onChange = props.onChange, color$1 = props.color, disabled = props.disabled; var baseClassName = colorPicker_hooks_useClassNames["default"](); var _useCommonClassName = hooks_useCommonClassName["default"](), statusClassNames = _useCommonClassName.STATUS; var sliderRef = React.useRef(null); var sliderRectRef = React.useRef({ left: 0, width: constants.GRADIENT_SLIDER_DEFAULT_WIDTH }); var degree = React.useRef(props.color.gradientDegree); var selectedRef = React.useRef(props.color.gradientSelectedId); var colors = React.useRef(cloneDeep.cloneDeep(color$1.gradientColors)); var _useState = React.useState(props.color.gradientSelectedId), _useState2 = slicedToArray._slicedToArray(_useState, 2), selectedId = _useState2[0], setSelectedId = _useState2[1]; var _useState3 = React.useState(colors.current), _useState4 = slicedToArray._slicedToArray(_useState3, 2), colorsState = _useState4[0], setColorsState = _useState4[1]; React.useEffect(function () { degree.current = color$1 === null || color$1 === void 0 ? void 0 : color$1.gradientDegree; setSelectedId(color$1.gradientSelectedId); selectedRef.current = color$1.gradientSelectedId; colors.current = cloneDeep.cloneDeep(color$1.gradientColors); setColorsState(colors.current); }, [color$1.gradientColors, color$1 === null || color$1 === void 0 ? void 0 : color$1.gradientDegree, color$1.gradientSelectedId, color$1.value, color$1.saturation]); var updateSliderRect = function updateSliderRect() { var rect = sliderRef.current.getBoundingClientRect(); sliderRectRef.current = { left: rect.left, width: rect.width || constants.GRADIENT_SLIDER_DEFAULT_WIDTH }; }; var handleChange = React.useCallback(function (key, payload) { if (disabled) return; onChange({ key: key, payload: payload }); }, [onChange, disabled]); var handleDegreeChange = function handleDegreeChange(value) { if (disabled || value === props.color.gradientDegree) { return; } degree.current = value; handleChange("degree", value); }; var handleSelectedIdChange = function handleSelectedIdChange(value) { if (disabled) return; setSelectedId(value); selectedRef.current = value; handleChange("selectedId", value); }; var handleColorsChange = React.useCallback(function (value) { if (disabled) return; colors.current = value; setColorsState(value); handleChange("colors", value); }, [disabled, handleChange]); var updateActiveThumbLeft = React.useCallback(function (left) { var index = colors.current.findIndex(function (c) { return c.id === selectedRef.current; }); if (index === -1) { return; } var point = colors.current[index]; var formatLeft = Math.max(0, Math.min(sliderRectRef.current.width, left)); var percentLeft = formatLeft / sliderRectRef.current.width * 100; var newColors = colors.current.map(function (item, i) { return index !== i ? item : { color: point.color, left: percentLeft, id: point.id }; }); handleColorsChange(newColors); }, [handleColorsChange]); var handleStart = function handleStart(id, e) { if (disabled) return; e.preventDefault(); e.stopPropagation(); handleSelectedIdChange(id); sliderRef.current.focus(); }; hooks_useMouseEvent["default"](sliderRef, { onMove: function onMove(_, ctx) { if (disabled) return; updateActiveThumbLeft(ctx.coordinate.x); } }); var handleKeyup = function handleKeyup(e) { if (disabled) return; var points = toConsumableArray._toConsumableArray(colors.current); var pos = points.findIndex(function (c) { return c.id === selectedRef.current; }); var length = points.length; if (DELETE_KEYS.includes(e.key.toLocaleLowerCase()) && length > 2 && pos >= 0 && pos <= length - 1) { points.splice(pos, 1); if (!points[pos]) { pos = points[pos + 1] ? pos + 1 : points[pos - 1] ? pos - 1 : 0; } var current = points[pos]; handleColorsChange(points); handleSelectedIdChange(current === null || current === void 0 ? void 0 : current.id); } }; var handleThumbBarClick = function handleThumbBarClick(e) { if (disabled || !props.enableMultipleGradient) return; updateSliderRect(); var left = e.clientX - sliderRectRef.current.left; left = Math.max(0, Math.min(sliderRectRef.current.width, left)); var percentLeft = left / sliderRectRef.current.width * 100; var newPoint = color.genGradientPoint(percentLeft, props.color.rgba); var newColors = toConsumableArray._toConsumableArray(colors.current); newColors.push(newPoint); handleColorsChange(newColors); handleSelectedIdChange(newPoint.id); }; React.useEffect(function () { updateSliderRect(); }, []); var gradientColors = props.color.gradientColors; var thumbBackground = color.gradientColors2string({ points: gradientColors, degree: 90 }); var handleClickThumb = function handleClickThumb(e, t) { handleSelectedIdChange(t.id); e.stopPropagation(); }; var allGradientColors = toConsumableArray._toConsumableArray(colorsState); var _genGradientPoint = color.genGradientPoint(0, (_allGradientColors$ = allGradientColors[0]) === null || _allGradientColors$ === void 0 ? void 0 : _allGradientColors$.color), leftColor = _genGradientPoint.color; var _genGradientPoint2 = color.genGradientPoint(100, (_allGradientColors = allGradientColors[allGradientColors.length - 1]) === null || _allGradientColors === void 0 ? void 0 : _allGradientColors.color), rightColor = _genGradientPoint2.color; return /* @__PURE__ */React__default["default"].createElement("div", { className: "".concat(baseClassName, "__gradient") }, /* @__PURE__ */React__default["default"].createElement("div", { className: "".concat(baseClassName, "__gradient-slider"), style: { background: "linear-gradient(90deg, ".concat(leftColor, " 0%, ").concat(leftColor, " 50%, ").concat(rightColor, " 50%, ").concat(rightColor, " 100%)") } }, /* @__PURE__ */React__default["default"].createElement("div", { ref: sliderRef, className: classNames__default["default"]("".concat(baseClassName, "__slider"), "".concat(baseClassName, "--bg-alpha")), onKeyUp: handleKeyup, tabIndex: 0 }, /* @__PURE__ */React__default["default"].createElement("ul", { className: "gradient-thumbs", onClick: handleThumbBarClick, style: { background: thumbBackground } }, colorsState.map(function (t) { var left = "".concat(Math.round(t.left * 100) / 100, "%"); return /* @__PURE__ */React__default["default"].createElement("li", { className: classNames__default["default"](["".concat(baseClassName, "__thumb"), "gradient-thumbs__item", selectedId === t.id ? statusClassNames.active : ""]), key: t.id, title: "".concat(t.color, " ").concat(left), style: { color: t.color, left: left }, onClick: function onClick(e) { return handleClickThumb(e, t); }, onMouseDown: function onMouseDown(e) { return handleStart(t.id, e); } }, /* @__PURE__ */React__default["default"].createElement("span", { className: classNames__default["default"](["gradient-thumbs__item-inner", "".concat(baseClassName, "--bg-alpha")]) })); })))), /* @__PURE__ */React__default["default"].createElement("div", { className: "".concat(baseClassName, "__gradient-degree"), title: "".concat(degree, "deg") }, /* @__PURE__ */React__default["default"].createElement(inputNumber_index.InputNumber, { theme: "normal", min: 0, max: 360, step: 1, size: "small", format: function format(value) { return "".concat(value, "\xB0"); }, value: degree.current, onBlur: handleDegreeChange, onEnter: handleDegreeChange, onChange: handleDegreeChange, disabled: props.disabled }))); }; var LinearGradient$1 = /*#__PURE__*/React__default["default"].memo(LinearGradient); exports["default"] = LinearGradient$1; //# sourceMappingURL=linear-gradient.js.map