UNPKG

tdesign-react

Version:
320 lines (312 loc) 13.3 kB
/** * tdesign v1.16.6 * (c) 2026 tdesign * @license MIT */ 'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var toConsumableArray = require('../../../_chunks/dep-33be2db8.js'); var slicedToArray = require('../../../_chunks/dep-3281986a.js'); var React = require('react'); var classNames = require('classnames'); var color = require('../../../_chunks/dep-086b36f5.js'); var constants = require('../../../_chunks/dep-0b355e35.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-400d026f.js'); require('../../../_chunks/dep-ef5bfcf1.js'); require('../../../_chunks/dep-989c8b4a.js'); require('../../../_chunks/dep-54373955.js'); require('../../../_chunks/dep-5eada4cb.js'); require('../../../_chunks/dep-1f6c39e3.js'); require('../../../_chunks/dep-90a93885.js'); require('../../../_chunks/dep-79967866.js'); require('../../../_chunks/dep-202d6c73.js'); require('../../../_chunks/dep-615c149d.js'); require('../../../_chunks/dep-a8d5081a.js'); require('../../../_chunks/dep-0173c82c.js'); require('../../../_chunks/dep-2bd15884.js'); require('../../../hooks/useConfig.js'); require('../../../config-provider/ConfigContext.js'); require('../../../_chunks/dep-875a5344.js'); require('../../../_chunks/dep-20f09a63.js'); require('dayjs'); require('../../../_chunks/dep-e691746e.js'); require('../../../_chunks/dep-9d3b1a05.js'); require('../../../_chunks/dep-1f8c969d.js'); require('../../../_chunks/dep-403f5edf.js'); require('../../../_chunks/dep-d24b94bc.js'); require('../../../_chunks/dep-6478e7e3.js'); require('../../../_chunks/dep-c9025587.js'); require('../../../_chunks/dep-8663a5c9.js'); require('../../../_chunks/dep-50349518.js'); require('../../../_chunks/dep-8c9795f9.js'); require('../../../_chunks/dep-723e29d6.js'); require('../../../_chunks/dep-0bd8b970.js'); require('../../../_chunks/dep-73ef2133.js'); require('../../../_chunks/dep-cae1e5aa.js'); require('../../../_chunks/dep-0b97e212.js'); require('../../../_chunks/dep-0652d2a6.js'); require('../../../_chunks/dep-1a7ce20e.js'); require('../../../_chunks/dep-116af952.js'); require('../../../_chunks/dep-f6a777ad.js'); require('../../../_chunks/dep-ff301423.js'); require('../../../input-number/InputNumber.js'); require('tdesign-icons-react'); require('../../../input/index.js'); require('../../../input/Input.js'); require('../../../_chunks/dep-79129c54.js'); require('../../../_util/forwardRefWithStatics.js'); require('hoist-non-react-statics'); require('../../../_util/parseTNode.js'); require('../../../_chunks/dep-ed99b2c6.js'); require('../../../hooks/useControlled.js'); require('../../../_util/noop.js'); require('../../../_chunks/dep-825f3fca.js'); require('../../../_chunks/dep-0cf6dbad.js'); require('../../../_chunks/dep-cb9114ad.js'); require('../../../_chunks/dep-d7d7df54.js'); require('../../../_chunks/dep-4748ebeb.js'); require('../../../hooks/useDefaultProps.js'); require('../../../hooks/useGlobalIcon.js'); require('../../../hooks/useLayoutEffect.js'); require('../../../_chunks/dep-2bbded38.js'); require('../../../locale/LocalReceiver.js'); require('../../../config-provider/ConfigProvider.js'); require('../../../_chunks/dep-081faea2.js'); require('../../../_chunks/dep-91b467dd.js'); require('../../../_chunks/dep-18ca5cd9.js'); require('../../../_chunks/dep-3facd669.js'); require('../../../input/defaultProps.js'); require('../../../input/InputGroup.js'); require('../../../input/useLengthLimit.js'); require('../../../_chunks/dep-d7a3225b.js'); require('../../../_chunks/dep-4c4d8eee.js'); require('../../../button/index.js'); require('../../../button/Button.js'); require('../../../hooks/useDomRefCallback.js'); require('../../../hooks/useRipple.js'); require('../../../_chunks/dep-4cca69f7.js'); require('../../../hooks/useAnimation.js'); require('../../../loading/index.js'); require('../../../loading/Loading.js'); require('../../../common/Portal.js'); require('react-dom'); require('../../../loading/defaultProps.js'); require('../../../loading/gradient.js'); require('../../../loading/plugin.js'); require('../../../_util/react-render.js'); require('../../../_chunks/dep-05097eca.js'); require('../../../common/PluginContainer.js'); require('../../../button/defaultProps.js'); require('../../../input-number/useInputNumber.js'); require('../../../_chunks/dep-ceca7b69.js'); require('../../../_chunks/dep-8e51ca2b.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