UNPKG

tdesign-react

Version:
360 lines (352 loc) 14.5 kB
/** * tdesign v1.13.2 * (c) 2025 tdesign * @license MIT */ 'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var toConsumableArray = require('../../../_chunks/dep-64a1054a.js'); var slicedToArray = require('../../../_chunks/dep-e17e2d31.js'); var React = require('react'); var classNames = require('classnames'); var color = require('../../../_chunks/dep-3f53c7e2.js'); var constants = require('../../../_chunks/dep-11227668.js'); var hooks_useCommonClassName = require('../../../hooks/useCommonClassName.js'); var colorPicker_hooks_useClassNames = require('../../hooks/useClassNames.js'); var inputNumber_index = require('../../../input-number/index.js'); var cloneDeep = require('../../../_chunks/dep-ed886f2a.js'); require('../../../_chunks/dep-b7d577ac.js'); require('../../../_chunks/dep-5ad10091.js'); require('../../../_chunks/dep-cc768e34.js'); require('../../../_chunks/dep-6d4d8660.js'); require('../../../_chunks/dep-7bc521fe.js'); require('../../../_chunks/dep-3e2d2665.js'); require('../../../_chunks/dep-f0379c5f.js'); require('../../../_chunks/dep-028b759d.js'); require('../../../_chunks/dep-ddacd27a.js'); require('../../../_chunks/dep-4cdd0807.js'); require('../../../hooks/useConfig.js'); require('../../../config-provider/ConfigContext.js'); require('../../../_chunks/dep-3a869b87.js'); require('../../../_chunks/dep-ac58e1cc.js'); require('dayjs'); require('../../../_chunks/dep-7da96a57.js'); require('../../../_chunks/dep-07b911d8.js'); require('../../../_chunks/dep-4b02d669.js'); require('../../../_chunks/dep-8a116183.js'); require('../../../_chunks/dep-4671b9bd.js'); require('../../../_chunks/dep-bed9d73e.js'); require('../../../_chunks/dep-780eda7b.js'); require('../../../_chunks/dep-47bdc05f.js'); require('../../../_chunks/dep-cab13149.js'); require('../../../_chunks/dep-a30819a4.js'); require('../../../_chunks/dep-6a7ba247.js'); require('../../../_chunks/dep-c87d9752.js'); require('../../../_chunks/dep-bd956a2d.js'); require('../../../_chunks/dep-0cdb3286.js'); require('../../../_chunks/dep-865c186c.js'); require('../../../_chunks/dep-f4e58639.js'); require('../../../_chunks/dep-781a2854.js'); require('../../../_chunks/dep-1ef213f8.js'); require('../../../_chunks/dep-e2c832a5.js'); require('../../../input-number/InputNumber.js'); require('tdesign-icons-react'); require('../../../input/index.js'); require('../../../input/Input.js'); require('../../../_chunks/dep-810b3643.js'); require('../../../hooks/useLayoutEffect.js'); require('../../../_chunks/dep-3f65dfe7.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-4be7f839.js'); require('../../../_chunks/dep-d42c60f4.js'); require('../../../_chunks/dep-05b4c661.js'); require('../../../_chunks/dep-62193a48.js'); require('../../../_chunks/dep-f076775e.js'); require('../../../locale/LocalReceiver.js'); require('../../../config-provider/ConfigProvider.js'); require('../../../_chunks/dep-aeef4e56.js'); require('../../../_chunks/dep-0c1ca63f.js'); require('../../../_chunks/dep-fd5d57c1.js'); require('../../../_chunks/dep-ac2874ce.js'); require('../../../_chunks/dep-6cfc06a0.js'); require('../../../_chunks/dep-5d9d080b.js'); require('../../../input/defaultProps.js'); require('../../../_util/parseTNode.js'); require('../../../_chunks/dep-4bc3c0ab.js'); require('../../../input/useLengthLimit.js'); require('../../../_chunks/dep-b8d4cf07.js'); require('../../../_chunks/dep-422caf30.js'); require('../../../hooks/useDefaultProps.js'); require('../../../button/index.js'); require('../../../button/Button.js'); require('../../../hooks/useDomRefCallback.js'); require('../../../hooks/useRipple.js'); require('../../../_chunks/dep-58719304.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-a93b6608.js'); require('../../../common/PluginContainer.js'); require('../../../button/defaultProps.js'); require('../../../input-number/useInputNumber.js'); require('../../../_chunks/dep-0a15e4d8.js'); require('../../../_chunks/dep-f400737d.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 refSlider = React.useRef(null); var sliderRectRef = React.useRef({ left: 0, width: constants.GRADIENT_SLIDER_DEFAULT_WIDTH }); var isDragging = React.useRef(false); var isMoved = React.useRef(false); var degree = React.useRef(props.color.gradientDegree); var _useState = React.useState(props.color.gradientSelectedId), _useState2 = slicedToArray._slicedToArray(_useState, 2), selectedId = _useState2[0], setSelectedId = _useState2[1]; var selectedRef = React.useRef(props.color.gradientSelectedId); var colors = React.useRef(cloneDeep.cloneDeep(color$1.gradientColors)); 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 = refSlider.current.getBoundingClientRect(); sliderRectRef.current = { left: rect.left, width: rect.width || constants.GRADIENT_SLIDER_DEFAULT_WIDTH }; }; var handleChange = React.useCallback(function (key, payload, addUsedColor) { if (disabled) { return; } onChange({ key: key, payload: payload, addUsedColor: addUsedColor }); }, [onChange, disabled]); var handleDegreeChange = function handleDegreeChange(value) { if (props.disabled || value === props.color.gradientDegree) { return; } degree.current = value; handleChange("degree", value, true); }; var handleSelectedIdChange = function handleSelectedIdChange(value) { if (props.disabled) { return; } setSelectedId(value); selectedRef.current = value; handleChange("selectedId", value); }; var handleColorsChange = React.useCallback(function (value, isEnded) { if (props.disabled) { return; } colors.current = value; setColorsState(value); handleChange("colors", value, isEnded); }, [props.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 (isDragging.current || props.disabled) { return; } selectedRef.current = id; setSelectedId(id); isMoved.current = false; isDragging.current = true; e.preventDefault(); e.stopPropagation(); handleSelectedIdChange(id); refSlider.current.focus(); }; var handleMove = React.useCallback(function (e) { if (!isDragging.current || disabled) { return; } var rect = refSlider.current.getBoundingClientRect(); var left = e.clientX - rect.x; isMoved.current = true; updateActiveThumbLeft(left); }, [disabled, updateActiveThumbLeft]); var handleEnd = React.useCallback(function () { if (!isDragging.current) { return; } setTimeout(function () { isDragging.current = false; }, 0); if (isMoved.current) { handleColorsChange(colors.current, true); isMoved.current = false; } }, [handleColorsChange]); var handleKeyup = function handleKeyup(e) { if (props.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, true); handleSelectedIdChange(current === null || current === void 0 ? void 0 : current.id); } }; var handleThumbBarClick = function handleThumbBarClick(e) { if (props.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, true); handleSelectedIdChange(newPoint.id); }; React.useEffect(function () { updateSliderRect(); window.addEventListener("mousemove", handleMove, false); window.addEventListener("mouseup", handleEnd, false); window.addEventListener("contextmenu", handleEnd, false); return function () { window.removeEventListener("mousemove", handleMove, false); window.removeEventListener("mouseup", handleEnd, false); window.removeEventListener("contextmenu", handleEnd, false); }; }, []); 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", { className: classNames__default["default"]("".concat(baseClassName, "__slider"), "".concat(baseClassName, "--bg-alpha")), onKeyUp: handleKeyup, tabIndex: 0, ref: refSlider }, /* @__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