@volr/react-ui 0.1.119 → 0.1.120

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/dist/index.d.cts CHANGED
@@ -151,6 +151,7 @@ declare const en: {
151
151
  readonly titleTouchId: "Set up Touch ID login";
152
152
  readonly titleFaceId: "Set up Face ID login";
153
153
  readonly titleFingerprint: "Set up fingerprint login";
154
+ readonly titleQrCode: "Set up mobile login";
154
155
  readonly description: "Sign in instantly, every time.";
155
156
  readonly touchId: "Use Touch ID to create your passkey";
156
157
  readonly faceId: "Use Face ID to create your passkey";
@@ -178,6 +179,7 @@ declare const en: {
178
179
  readonly outdatedSamsung: "Please update Samsung Internet to the latest version.";
179
180
  readonly outdatedIOS: "iOS 17.4 or later is required. Please check for software updates in Settings.";
180
181
  readonly firefoxNotSupported: "Secure login is not available in Firefox. Please use Chrome or Safari.";
182
+ readonly whaleNotSupported: "Secure login is not available in Whale browser. Please use Chrome.";
181
183
  readonly unknownBrowser: "Secure login may not work properly in this browser.";
182
184
  readonly openInExternalBrowser: "Open in external browser";
183
185
  readonly updateBrowser: "Update browser";
package/dist/index.d.ts CHANGED
@@ -151,6 +151,7 @@ declare const en: {
151
151
  readonly titleTouchId: "Set up Touch ID login";
152
152
  readonly titleFaceId: "Set up Face ID login";
153
153
  readonly titleFingerprint: "Set up fingerprint login";
154
+ readonly titleQrCode: "Set up mobile login";
154
155
  readonly description: "Sign in instantly, every time.";
155
156
  readonly touchId: "Use Touch ID to create your passkey";
156
157
  readonly faceId: "Use Face ID to create your passkey";
@@ -178,6 +179,7 @@ declare const en: {
178
179
  readonly outdatedSamsung: "Please update Samsung Internet to the latest version.";
179
180
  readonly outdatedIOS: "iOS 17.4 or later is required. Please check for software updates in Settings.";
180
181
  readonly firefoxNotSupported: "Secure login is not available in Firefox. Please use Chrome or Safari.";
182
+ readonly whaleNotSupported: "Secure login is not available in Whale browser. Please use Chrome.";
181
183
  readonly unknownBrowser: "Secure login may not work properly in this browser.";
182
184
  readonly openInExternalBrowser: "Open in external browser";
183
185
  readonly updateBrowser: "Update browser";
package/dist/index.js CHANGED
@@ -526,6 +526,7 @@ var en = {
526
526
  titleTouchId: "Set up Touch ID login",
527
527
  titleFaceId: "Set up Face ID login",
528
528
  titleFingerprint: "Set up fingerprint login",
529
+ titleQrCode: "Set up mobile login",
529
530
  // Short description
530
531
  description: "Sign in instantly, every time.",
531
532
  // Legacy keys for backward compatibility
@@ -555,6 +556,7 @@ var en = {
555
556
  outdatedSamsung: "Please update Samsung Internet to the latest version.",
556
557
  outdatedIOS: "iOS 17.4 or later is required. Please check for software updates in Settings.",
557
558
  firefoxNotSupported: "Secure login is not available in Firefox. Please use Chrome or Safari.",
559
+ whaleNotSupported: "Secure login is not available in Whale browser. Please use Chrome.",
558
560
  unknownBrowser: "Secure login may not work properly in this browser.",
559
561
  openInExternalBrowser: "Open in external browser",
560
562
  updateBrowser: "Update browser",
@@ -753,6 +755,7 @@ var ko = {
753
755
  titleTouchId: "Touch ID \uB85C\uADF8\uC778 \uC124\uC815",
754
756
  titleFaceId: "Face ID \uB85C\uADF8\uC778 \uC124\uC815",
755
757
  titleFingerprint: "\uC9C0\uBB38 \uB85C\uADF8\uC778 \uC124\uC815",
758
+ titleQrCode: "\uD734\uB300\uD3F0\uC73C\uB85C \uB85C\uADF8\uC778 \uC124\uC815",
756
759
  // Short description
757
760
  description: "\uD55C \uBC88 \uB4F1\uB85D\uD558\uBA74, \uB2E4\uC74C\uBD80\uD130 \uBC14\uB85C \uB85C\uADF8\uC778",
758
761
  // Legacy keys for backward compatibility
@@ -782,6 +785,7 @@ var ko = {
782
785
  outdatedSamsung: "Samsung Internet\uC744 \uCD5C\uC2E0 \uBC84\uC804\uC73C\uB85C \uC5C5\uB370\uC774\uD2B8\uD574\uC8FC\uC138\uC694.",
783
786
  outdatedIOS: "iOS 17.4 \uC774\uC0C1 \uBC84\uC804\uC774 \uD544\uC694\uD569\uB2C8\uB2E4. \uC124\uC815\uC5D0\uC11C \uC18C\uD504\uD2B8\uC6E8\uC5B4 \uC5C5\uB370\uC774\uD2B8\uB97C \uD655\uC778\uD574\uC8FC\uC138\uC694.",
784
787
  firefoxNotSupported: "Firefox\uC5D0\uC11C\uB294 \uBCF4\uC548 \uB85C\uADF8\uC778\uC744 \uC0AC\uC6A9\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. Chrome \uB610\uB294 Safari\uB97C \uC0AC\uC6A9\uD574\uC8FC\uC138\uC694.",
788
+ whaleNotSupported: "\uC6E8\uC77C \uBE0C\uB77C\uC6B0\uC800\uC5D0\uC11C\uB294 \uBCF4\uC548 \uB85C\uADF8\uC778\uC744 \uC0AC\uC6A9\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. Chrome\uC744 \uC0AC\uC6A9\uD574\uC8FC\uC138\uC694.",
785
789
  unknownBrowser: "\uC774 \uBE0C\uB77C\uC6B0\uC800\uC5D0\uC11C\uB294 \uBCF4\uC548 \uB85C\uADF8\uC778\uC774 \uC81C\uB300\uB85C \uC791\uB3D9\uD558\uC9C0 \uC54A\uC744 \uC218 \uC788\uC2B5\uB2C8\uB2E4.",
786
790
  openInExternalBrowser: "\uC678\uBD80 \uBE0C\uB77C\uC6B0\uC800\uC5D0\uC11C \uC5F4\uAE30",
787
791
  updateBrowser: "\uBE0C\uB77C\uC6B0\uC800 \uC5C5\uB370\uC774\uD2B8",
@@ -1366,13 +1370,21 @@ var ModalHeader = ({
1366
1370
 
1367
1371
  // src/components/features/passkey/utils/biometric.ts
1368
1372
  function getBiometricType() {
1373
+ if (typeof navigator === "undefined") return "fingerprint";
1369
1374
  const ua = navigator.userAgent;
1375
+ const platform = navigator.platform || "";
1370
1376
  if (/iPhone|iPad|iPod/.test(ua)) {
1371
1377
  return "faceId";
1372
1378
  }
1373
1379
  if (/Macintosh|MacIntel/.test(ua)) {
1380
+ if (navigator.maxTouchPoints > 1) {
1381
+ return "faceId";
1382
+ }
1374
1383
  return "touchId";
1375
1384
  }
1385
+ if (/Win/.test(platform)) {
1386
+ return "qrCode";
1387
+ }
1376
1388
  return "fingerprint";
1377
1389
  }
1378
1390
  function getUserFriendlyError(error, t) {
@@ -1620,12 +1632,44 @@ function FingerprintIcon({ size }) {
1620
1632
  }
1621
1633
  );
1622
1634
  }
1635
+ function QrCodeIcon({ size }) {
1636
+ const fill = "#f87171";
1637
+ return /* @__PURE__ */ jsxs(
1638
+ "svg",
1639
+ {
1640
+ width: size,
1641
+ height: size,
1642
+ viewBox: "0 0 24 24",
1643
+ fill: "none",
1644
+ xmlns: "http://www.w3.org/2000/svg",
1645
+ children: [
1646
+ /* @__PURE__ */ jsx("rect", { x: "3", y: "3", width: "7", height: "7", rx: "1", fill }),
1647
+ /* @__PURE__ */ jsx("rect", { x: "14", y: "3", width: "7", height: "7", rx: "1", fill }),
1648
+ /* @__PURE__ */ jsx("rect", { x: "3", y: "14", width: "7", height: "7", rx: "1", fill }),
1649
+ /* @__PURE__ */ jsx("rect", { x: "5", y: "5", width: "3", height: "3", fill: "white" }),
1650
+ /* @__PURE__ */ jsx("rect", { x: "16", y: "5", width: "3", height: "3", fill: "white" }),
1651
+ /* @__PURE__ */ jsx("rect", { x: "5", y: "16", width: "3", height: "3", fill: "white" }),
1652
+ /* @__PURE__ */ jsx("rect", { x: "14", y: "14", width: "2", height: "2", fill }),
1653
+ /* @__PURE__ */ jsx("rect", { x: "17", y: "14", width: "2", height: "2", fill }),
1654
+ /* @__PURE__ */ jsx("rect", { x: "14", y: "17", width: "2", height: "2", fill }),
1655
+ /* @__PURE__ */ jsx("rect", { x: "19", y: "17", width: "2", height: "2", fill }),
1656
+ /* @__PURE__ */ jsx("rect", { x: "17", y: "19", width: "2", height: "2", fill }),
1657
+ /* @__PURE__ */ jsx("rect", { x: "11", y: "3", width: "2", height: "2", fill }),
1658
+ /* @__PURE__ */ jsx("rect", { x: "11", y: "6", width: "2", height: "2", fill }),
1659
+ /* @__PURE__ */ jsx("rect", { x: "11", y: "11", width: "2", height: "2", fill }),
1660
+ /* @__PURE__ */ jsx("rect", { x: "3", y: "11", width: "2", height: "2", fill }),
1661
+ /* @__PURE__ */ jsx("rect", { x: "6", y: "11", width: "2", height: "2", fill })
1662
+ ]
1663
+ }
1664
+ );
1665
+ }
1623
1666
  function BiometricIcon({ type, size = 80, animate = false }) {
1624
1667
  const className = animate ? "volr:animate-pulse" : "";
1625
1668
  return /* @__PURE__ */ jsxs("div", { className, children: [
1626
1669
  type === "faceId" && /* @__PURE__ */ jsx(FaceIdIcon, { size }),
1627
1670
  type === "touchId" && /* @__PURE__ */ jsx(TouchIdIcon, { size }),
1628
- type === "fingerprint" && /* @__PURE__ */ jsx(FingerprintIcon, { size })
1671
+ type === "fingerprint" && /* @__PURE__ */ jsx(FingerprintIcon, { size }),
1672
+ type === "qrCode" && /* @__PURE__ */ jsx(QrCodeIcon, { size })
1629
1673
  ] });
1630
1674
  }
1631
1675
  var sizeMap = {
@@ -1960,13 +2004,16 @@ function PasskeyEnrollView({
1960
2004
  }
1961
2005
  };
1962
2006
  const getBiometricTitle = () => {
1963
- if (biometricType === "faceId") {
1964
- return t("passkey.titleFaceId");
1965
- }
1966
- if (biometricType === "touchId") {
1967
- return t("passkey.titleTouchId");
2007
+ switch (biometricType) {
2008
+ case "faceId":
2009
+ return t("passkey.titleFaceId");
2010
+ case "touchId":
2011
+ return t("passkey.titleTouchId");
2012
+ case "qrCode":
2013
+ return t("passkey.titleQrCode");
2014
+ default:
2015
+ return t("passkey.titleFingerprint");
1968
2016
  }
1969
- return t("passkey.titleFingerprint");
1970
2017
  };
1971
2018
  const getBiometricDescription = () => {
1972
2019
  return t("passkey.description");