UNPKG

tdesign-react

Version:
144 lines (136 loc) 6.39 kB
/** * tdesign v1.15.1 * (c) 2025 tdesign * @license MIT */ 'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var defineProperty = require('../_chunks/dep-0006fcfa.js'); var slicedToArray = require('../_chunks/dep-8e4d656d.js'); var objectWithoutProperties = require('../_chunks/dep-8fa3a4c2.js'); var React = require('react'); var qrcode_hooks_useQRCode = require('../_chunks/dep-f088ebdd.js'); require('../_chunks/dep-667ac7af.js'); require('../_chunks/dep-00b49251.js'); require('../_chunks/dep-69792df2.js'); function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } var React__default = /*#__PURE__*/_interopDefaultLegacy(React); var _excluded = ["value", "size", "level", "bgColor", "fgColor", "includeMargin", "minVersion", "marginSize", "style", "imageSettings"]; function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { defineProperty._defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } var QRCodeCanvas = /*#__PURE__*/React__default["default"].forwardRef(function (props, ref) { var value = props.value, _props$size = props.size, size = _props$size === void 0 ? qrcode_hooks_useQRCode.DEFAULT_SIZE : _props$size, _props$level = props.level, level = _props$level === void 0 ? qrcode_hooks_useQRCode.DEFAULT_LEVEL : _props$level, _props$bgColor = props.bgColor, bgColor = _props$bgColor === void 0 ? qrcode_hooks_useQRCode.DEFAULT_BACKGROUND_COLOR : _props$bgColor, _props$fgColor = props.fgColor, fgColor = _props$fgColor === void 0 ? qrcode_hooks_useQRCode.DEFAULT_FRONT_COLOR : _props$fgColor, _props$includeMargin = props.includeMargin, includeMargin = _props$includeMargin === void 0 ? qrcode_hooks_useQRCode.DEFAULT_NEED_MARGIN : _props$includeMargin, _props$minVersion = props.minVersion, minVersion = _props$minVersion === void 0 ? qrcode_hooks_useQRCode.DEFAULT_MINVERSION : _props$minVersion, marginSize = props.marginSize, style = props.style, imageSettings = props.imageSettings, otherProps = objectWithoutProperties._objectWithoutProperties(props, _excluded); var imgSrc = imageSettings === null || imageSettings === void 0 ? void 0 : imageSettings.src; var canvasRef = React__default["default"].useRef(null); var imageRef = React__default["default"].useRef(null); var setCanvasRef = React__default["default"].useCallback(function (node) { canvasRef.current = node; if (typeof ref === "function") { ref(node); } else if (ref) { ref.current = node; } }, [ref]); var _React$useState = React__default["default"].useState(false), _React$useState2 = slicedToArray._slicedToArray(_React$useState, 2), setIsImageLoaded = _React$useState2[1]; var _useQRCode = qrcode_hooks_useQRCode.useQRCode({ value: value, level: level, minVersion: minVersion, includeMargin: includeMargin, marginSize: marginSize, imageSettings: imageSettings, size: size }), margin = _useQRCode.margin, cells = _useQRCode.cells, numCells = _useQRCode.numCells, calculatedImageSettings = _useQRCode.calculatedImageSettings; React__default["default"].useEffect(function () { if (canvasRef.current) { var canvas = canvasRef.current; var ctx = canvas.getContext("2d"); if (!ctx) { return; } var cellsToDraw = cells; var image = imageRef.current; var haveImageToRender = calculatedImageSettings != null && image !== null && image.complete && image.naturalHeight !== 0 && image.naturalWidth !== 0; if (haveImageToRender) { if (calculatedImageSettings.excavation != null) { cellsToDraw = qrcode_hooks_useQRCode.excavateModules(cells, calculatedImageSettings.excavation); } } var pixelRatio = window.devicePixelRatio || 1; canvas.height = size * pixelRatio; canvas.width = size * pixelRatio; var scale = size / numCells * pixelRatio; ctx.scale(scale, scale); ctx.fillStyle = bgColor; ctx.fillRect(0, 0, numCells, numCells); ctx.fillStyle = fgColor; if (qrcode_hooks_useQRCode.isSupportPath2d) { ctx.fill(new Path2D(qrcode_hooks_useQRCode.generatePath(cellsToDraw, margin))); } else { cells.forEach(function (row, rdx) { row.forEach(function (cell, cdx) { if (cell) { ctx.fillRect(cdx + margin, rdx + margin, 1, 1); } }); }); } if (calculatedImageSettings) { ctx.globalAlpha = calculatedImageSettings.opacity; } if (haveImageToRender) { ctx.drawImage(image, calculatedImageSettings.x + margin, calculatedImageSettings.y + margin, calculatedImageSettings.w, calculatedImageSettings.h); } } }); React__default["default"].useEffect(function () { setIsImageLoaded(false); }, [imgSrc]); var img = null; if (imgSrc != null) { img = /* @__PURE__ */React__default["default"].createElement("img", { src: imgSrc, key: imgSrc, style: { display: "none" }, onLoad: function onLoad() { setIsImageLoaded(true); }, ref: imageRef, crossOrigin: calculatedImageSettings === null || calculatedImageSettings === void 0 ? void 0 : calculatedImageSettings.crossOrigin }); } return /* @__PURE__ */React__default["default"].createElement(React__default["default"].Fragment, null, /* @__PURE__ */React__default["default"].createElement("canvas", _objectSpread({ style: style, height: size, width: size, ref: setCanvasRef, role: "img" }, otherProps)), img); }); QRCodeCanvas.displayName = "QRCodeCanvas"; exports.QRCodeCanvas = QRCodeCanvas; //# sourceMappingURL=QRCodeCanvas.js.map