@wallet-ui/react 4.1.1 → 4.2.0-canary-20260602204251

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,10 +1,6 @@
1
1
  [![npm][npm-image]][npm-url]
2
2
  [![npm-downloads][npm-downloads-image]][npm-url]
3
- <br />
4
- [![code-style-prettier][code-style-prettier-image]][code-style-prettier-url]
5
3
 
6
- [code-style-prettier-image]: https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square
7
- [code-style-prettier-url]: https://github.com/prettier/prettier
8
4
  [npm-downloads-image]: https://img.shields.io/npm/dm/@wallet-ui/react/latest.svg?style=flat
9
5
  [npm-image]: https://img.shields.io/npm/v/@wallet-ui/react/latest.svg?style=flat
10
6
  [npm-url]: https://www.npmjs.com/package/@wallet-ui/react/v/latest
@@ -1045,6 +1045,92 @@ function WalletUiModal({ wallets, select, ...props }) {
1045
1045
  function WalletUiModalTrigger({ label = "Select Wallet", modal, ...props }) {
1046
1046
  return /* @__PURE__ */ React19__default.default.createElement(BaseButton, { label, onClick: () => void modal.open(), ...props });
1047
1047
  }
1048
+ var DEFAULT_QR_CODE_BACKGROUND_COLOR = "#fff";
1049
+ var DEFAULT_QR_CODE_FOREGROUND_COLOR = "#000";
1050
+ var DEFAULT_QR_CODE_LOGO_SIZE = 0.2;
1051
+ var LOGO_BACKGROUND_PADDING = 1;
1052
+ var MAX_QR_CODE_LOGO_SIZE = 0.25;
1053
+ function WalletUiQrCode({
1054
+ backgroundColor = DEFAULT_QR_CODE_BACKGROUND_COLOR,
1055
+ border,
1056
+ errorCorrection,
1057
+ foregroundColor = DEFAULT_QR_CODE_FOREGROUND_COLOR,
1058
+ logo,
1059
+ title,
1060
+ value,
1061
+ ...props
1062
+ }) {
1063
+ const effectiveErrorCorrection = errorCorrection ?? (logo ? "high" : void 0);
1064
+ const hasAccessibleName = Boolean(title || props["aria-label"] || props["aria-labelledby"]);
1065
+ const titleId = React19__default.default.useId();
1066
+ const qrCode = React19__default.default.useMemo(
1067
+ () => core$1.createQrCode(value, {
1068
+ border,
1069
+ errorCorrection: effectiveErrorCorrection
1070
+ }),
1071
+ [border, effectiveErrorCorrection, value]
1072
+ );
1073
+ const path = React19__default.default.useMemo(() => createQrCodeSvgPath(qrCode.cells), [qrCode.cells]);
1074
+ return /* @__PURE__ */ React19__default.default.createElement(
1075
+ BaseSvg,
1076
+ {
1077
+ "aria-hidden": hasAccessibleName ? void 0 : true,
1078
+ "aria-labelledby": props["aria-labelledby"] ?? (title ? titleId : void 0),
1079
+ "data-wu": "wallet-ui-qr-code",
1080
+ role: hasAccessibleName ? "img" : void 0,
1081
+ shapeRendering: "crispEdges",
1082
+ viewBox: `0 0 ${qrCode.size} ${qrCode.size}`,
1083
+ ...props
1084
+ },
1085
+ title ? /* @__PURE__ */ React19__default.default.createElement("title", { id: titleId }, title) : null,
1086
+ /* @__PURE__ */ React19__default.default.createElement("rect", { fill: backgroundColor, height: qrCode.size, width: qrCode.size, x: 0, y: 0 }),
1087
+ /* @__PURE__ */ React19__default.default.createElement("path", { d: path, fill: foregroundColor }),
1088
+ logo ? /* @__PURE__ */ React19__default.default.createElement(WalletUiQrCodeLogo, { backgroundColor, logo, size: qrCode.size }) : null
1089
+ );
1090
+ }
1091
+ function WalletUiQrCodeLogo({
1092
+ backgroundColor,
1093
+ logo,
1094
+ size
1095
+ }) {
1096
+ const logoSize = size * getQrCodeLogoSize(logo.size);
1097
+ const logoPosition = (size - logoSize) / 2;
1098
+ const logoBackgroundPosition = Math.max(0, Math.floor(logoPosition) - LOGO_BACKGROUND_PADDING);
1099
+ const logoBackgroundEnd = Math.min(size, Math.ceil(logoPosition + logoSize) + LOGO_BACKGROUND_PADDING);
1100
+ const logoBackgroundSize = logoBackgroundEnd - logoBackgroundPosition;
1101
+ const logoBackgroundColor = logo.backgroundColor ?? backgroundColor;
1102
+ return /* @__PURE__ */ React19__default.default.createElement(React19__default.default.Fragment, null, /* @__PURE__ */ React19__default.default.createElement(
1103
+ "rect",
1104
+ {
1105
+ fill: logoBackgroundColor,
1106
+ height: formatSvgNumber(logoBackgroundSize),
1107
+ width: formatSvgNumber(logoBackgroundSize),
1108
+ x: formatSvgNumber(logoBackgroundPosition),
1109
+ y: formatSvgNumber(logoBackgroundPosition)
1110
+ }
1111
+ ), /* @__PURE__ */ React19__default.default.createElement(
1112
+ "image",
1113
+ {
1114
+ height: formatSvgNumber(logoSize),
1115
+ href: logo.href,
1116
+ preserveAspectRatio: "xMidYMid meet",
1117
+ width: formatSvgNumber(logoSize),
1118
+ x: formatSvgNumber(logoPosition),
1119
+ y: formatSvgNumber(logoPosition)
1120
+ }
1121
+ ));
1122
+ }
1123
+ function createQrCodeSvgPath(cells) {
1124
+ return cells.flatMap(
1125
+ (row, rowIndex) => row.map((cell, columnIndex) => cell ? `M${columnIndex} ${rowIndex}h1v1H${columnIndex}z` : "")
1126
+ ).join("");
1127
+ }
1128
+ function formatSvgNumber(value) {
1129
+ return Number(value.toFixed(6));
1130
+ }
1131
+ function getQrCodeLogoSize(size = DEFAULT_QR_CODE_LOGO_SIZE) {
1132
+ return Math.min(size, MAX_QR_CODE_LOGO_SIZE);
1133
+ }
1048
1134
 
1049
1135
  Object.defineProperty(exports, "getWalletAccountFeature", {
1050
1136
  enumerable: true,
@@ -1088,6 +1174,7 @@ exports.WalletUiList = WalletUiList;
1088
1174
  exports.WalletUiListButton = WalletUiListButton;
1089
1175
  exports.WalletUiModal = WalletUiModal;
1090
1176
  exports.WalletUiModalTrigger = WalletUiModalTrigger;
1177
+ exports.WalletUiQrCode = WalletUiQrCode;
1091
1178
  exports.createWalletUiConfig = createWalletUiConfig;
1092
1179
  exports.ellipsify = ellipsify;
1093
1180
  exports.useBaseDropdown = useBaseDropdown;