@retinalabsllc/zairusjs 21.1.2 → 21.1.4

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.js CHANGED
@@ -3388,6 +3388,7 @@ var ManagedDocument = ({
3388
3388
  var import_react55 = __toESM(require("react"));
3389
3389
  var import_react56 = require("@hugeicons/react");
3390
3390
  var import_core_free_icons20 = require("@hugeicons/core-free-icons");
3391
+ var import_react_hot_toast10 = __toESM(require("react-hot-toast"));
3391
3392
  var TextInput2 = ({
3392
3393
  label,
3393
3394
  value,
@@ -3462,13 +3463,11 @@ var ManagedContactBlock = ({
3462
3463
  company,
3463
3464
  socials
3464
3465
  }) => {
3465
- const [formData, setFormData] = (0, import_react55.useState)({ name: "", title: "", phone: "", message: "" });
3466
+ const [formData, setFormData] = (0, import_react55.useState)({ name: "", email: "", title: "", phone: "", message: "" });
3466
3467
  const [status, setStatus] = (0, import_react55.useState)("idle");
3467
- const [responseMessage, setResponseMessage] = (0, import_react55.useState)("");
3468
3468
  const handleSubmit = async (e) => {
3469
3469
  e.preventDefault();
3470
3470
  setStatus("loading");
3471
- setResponseMessage("");
3472
3471
  try {
3473
3472
  const res = await fetch("/api/contact", {
3474
3473
  method: "POST",
@@ -3478,15 +3477,15 @@ var ManagedContactBlock = ({
3478
3477
  const data = await res.json();
3479
3478
  if (res.ok) {
3480
3479
  setStatus("success");
3481
- setResponseMessage(data.message || "Message sent successfully!");
3482
- setFormData({ name: "", title: "", phone: "", message: "" });
3480
+ import_react_hot_toast10.default.success(data.message || "Message sent successfully!");
3481
+ setFormData({ name: "", email: "", title: "", phone: "", message: "" });
3483
3482
  } else {
3484
3483
  setStatus("error");
3485
- setResponseMessage(data.error || "Failed to send message.");
3484
+ import_react_hot_toast10.default.error(data.error || "Failed to send message.");
3486
3485
  }
3487
3486
  } catch (error) {
3488
3487
  setStatus("error");
3489
- setResponseMessage("An unexpected error occurred. Please try again.");
3488
+ import_react_hot_toast10.default.error("An unexpected error occurred. Please try again.");
3490
3489
  }
3491
3490
  };
3492
3491
  return /* @__PURE__ */ import_react55.default.createElement("div", { className: "grow pt-4 pb-20 px-4 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ import_react55.default.createElement("div", { className: "relative bg-white rounded-2xl w-full max-w-7xl mx-auto overflow-hidden" }, /* @__PURE__ */ import_react55.default.createElement(
@@ -3533,6 +3532,16 @@ var ManagedContactBlock = ({
3533
3532
  disabled: status === "loading"
3534
3533
  }
3535
3534
  ), /* @__PURE__ */ import_react55.default.createElement(
3535
+ TextInput2,
3536
+ {
3537
+ label: "EMAIL ADDRESS",
3538
+ type: "email",
3539
+ placeholder: "john@example.com",
3540
+ value: formData.email,
3541
+ onChange: (val) => setFormData({ ...formData, email: val }),
3542
+ disabled: status === "loading"
3543
+ }
3544
+ )), /* @__PURE__ */ import_react55.default.createElement("div", { className: "flex flex-col md:flex-row gap-6" }, /* @__PURE__ */ import_react55.default.createElement(
3536
3545
  TextInput2,
3537
3546
  {
3538
3547
  label: "SUBJECT TITLE",
@@ -3541,7 +3550,7 @@ var ManagedContactBlock = ({
3541
3550
  onChange: (val) => setFormData({ ...formData, title: val }),
3542
3551
  disabled: status === "loading"
3543
3552
  }
3544
- )), /* @__PURE__ */ import_react55.default.createElement(
3553
+ ), /* @__PURE__ */ import_react55.default.createElement(
3545
3554
  TextInput2,
3546
3555
  {
3547
3556
  label: "PHONE NUMBER (OPTIONAL)",
@@ -3551,7 +3560,7 @@ var ManagedContactBlock = ({
3551
3560
  onChange: (val) => setFormData({ ...formData, phone: val }),
3552
3561
  disabled: status === "loading"
3553
3562
  }
3554
- ), /* @__PURE__ */ import_react55.default.createElement(
3563
+ )), /* @__PURE__ */ import_react55.default.createElement(
3555
3564
  TextAreaInput,
3556
3565
  {
3557
3566
  label: "MESSAGE",
@@ -3560,12 +3569,12 @@ var ManagedContactBlock = ({
3560
3569
  onChange: (val) => setFormData({ ...formData, message: val }),
3561
3570
  disabled: status === "loading"
3562
3571
  }
3563
- ), responseMessage && /* @__PURE__ */ import_react55.default.createElement("p", { className: `text-sm ${status === "error" ? "text-red-500" : "text-green-600"}` }, responseMessage), /* @__PURE__ */ import_react55.default.createElement("div", { className: "pt-4" }, /* @__PURE__ */ import_react55.default.createElement(
3572
+ ), /* @__PURE__ */ import_react55.default.createElement("div", { className: "pt-4" }, /* @__PURE__ */ import_react55.default.createElement(
3564
3573
  ThreeDActionButton2,
3565
3574
  {
3566
3575
  type: "submit",
3567
3576
  isLoading: status === "loading",
3568
- disabled: !formData.name || !formData.title || !formData.message
3577
+ disabled: !formData.name || !formData.email || !formData.title || !formData.message
3569
3578
  },
3570
3579
  "Submit Message"
3571
3580
  )))))))));
@@ -4263,7 +4272,7 @@ var UniversalVerificationPage = ({
4263
4272
  // src/components/UniversalRewardPage.tsx
4264
4273
  var import_react73 = __toESM(require("react"));
4265
4274
  var import_axios = __toESM(require("axios"));
4266
- var import_react_hot_toast10 = __toESM(require("react-hot-toast"));
4275
+ var import_react_hot_toast11 = __toESM(require("react-hot-toast"));
4267
4276
  var import_react_confetti = __toESM(require("react-confetti"));
4268
4277
  var import_react_use = require("react-use");
4269
4278
  var import_react74 = require("@hugeicons/react");
@@ -4314,7 +4323,7 @@ var UniversalRewardPage = ({
4314
4323
  const res = await import_axios.default.post(selectedReward.endpoint, selectedReward.config);
4315
4324
  if (res.data.success) {
4316
4325
  setShowConfetti(true);
4317
- import_react_hot_toast10.default.success(res.data.message || "Reward claimed successfully!");
4326
+ import_react_hot_toast11.default.success(res.data.message || "Reward claimed successfully!");
4318
4327
  setSelectedReward(null);
4319
4328
  onRefresh();
4320
4329
  setTimeout(() => {
@@ -4322,7 +4331,7 @@ var UniversalRewardPage = ({
4322
4331
  }, 6e3);
4323
4332
  }
4324
4333
  } catch (error) {
4325
- import_react_hot_toast10.default.error(error.response?.data?.error || "Failed to claim reward. Please try again.");
4334
+ import_react_hot_toast11.default.error(error.response?.data?.error || "Failed to claim reward. Please try again.");
4326
4335
  } finally {
4327
4336
  setIsClaiming(false);
4328
4337
  }
@@ -4372,7 +4381,7 @@ var UniversalRewardPage = ({
4372
4381
 
4373
4382
  // src/components/UniversalReferralPage.tsx
4374
4383
  var import_react75 = __toESM(require("react"));
4375
- var import_react_hot_toast11 = __toESM(require("react-hot-toast"));
4384
+ var import_react_hot_toast12 = __toESM(require("react-hot-toast"));
4376
4385
  var import_react76 = require("@hugeicons/react");
4377
4386
  var import_core_free_icons27 = require("@hugeicons/core-free-icons");
4378
4387
  var PageSpinner5 = () => /* @__PURE__ */ import_react75.default.createElement("div", { className: "flex justify-center items-center py-12" }, /* @__PURE__ */ import_react75.default.createElement(import_react76.HugeiconsIcon, { icon: import_core_free_icons27.Loading03Icon, size: 32, className: "animate-spin mb-4 text-black" }));
@@ -4401,9 +4410,9 @@ var UniversalReferralPage = ({
4401
4410
  if (!referralCode) return;
4402
4411
  try {
4403
4412
  await navigator.clipboard.writeText(referralCode);
4404
- import_react_hot_toast11.default.success("Referral code copied!");
4413
+ import_react_hot_toast12.default.success("Referral code copied!");
4405
4414
  } catch {
4406
- import_react_hot_toast11.default.error("Failed to copy code.");
4415
+ import_react_hot_toast12.default.error("Failed to copy code.");
4407
4416
  }
4408
4417
  };
4409
4418
  const AvatarLogo2 = ({ src, alt, name, sizeClass = "w-10 h-10" }) => {
@@ -4708,7 +4717,7 @@ var PinDialerBottomSheet = ({
4708
4717
 
4709
4718
  // src/components/UniversalBuyCryptoPage.tsx
4710
4719
  var import_react81 = __toESM(require("react"));
4711
- var import_react_hot_toast12 = __toESM(require("react-hot-toast"));
4720
+ var import_react_hot_toast13 = __toESM(require("react-hot-toast"));
4712
4721
  var import_react82 = require("@hugeicons/react");
4713
4722
  var import_core_free_icons30 = require("@hugeicons/core-free-icons");
4714
4723
  var CircularLogo = ({ src, alt, fallbackText }) => {
@@ -4831,7 +4840,7 @@ var UniversalBuyCryptoPage = ({
4831
4840
  if (result.ratePerToken) setRateDisplay(result.ratePerToken);
4832
4841
  if (result.rateKey) setCurrentRateKey(result.rateKey);
4833
4842
  } catch {
4834
- import_react_hot_toast12.default.error("Failed to calculate live rate.");
4843
+ import_react_hot_toast13.default.error("Failed to calculate live rate.");
4835
4844
  } finally {
4836
4845
  setIsCalculating(false);
4837
4846
  }
@@ -4862,11 +4871,11 @@ var UniversalBuyCryptoPage = ({
4862
4871
  const handleCheckout = async () => {
4863
4872
  const numFiat = parseFloat(fiatAmount) || 0;
4864
4873
  const numCrypto = parseFloat(cryptoAmount) || 0;
4865
- if (numFiat <= 0 || numCrypto <= 0) return import_react_hot_toast12.default.error("Please enter a valid amount.");
4874
+ if (numFiat <= 0 || numCrypto <= 0) return import_react_hot_toast13.default.error("Please enter a valid amount.");
4866
4875
  if (selectedNetwork.minimumWithdrawal && numCrypto < selectedNetwork.minimumWithdrawal) {
4867
- return import_react_hot_toast12.default.error(`Minimum purchase for ${selectedNetwork.name} is ${selectedNetwork.minimumWithdrawal} ${selectedCrypto.code}`);
4876
+ return import_react_hot_toast13.default.error(`Minimum purchase for ${selectedNetwork.name} is ${selectedNetwork.minimumWithdrawal} ${selectedCrypto.code}`);
4868
4877
  }
4869
- if (!recipientAddress.trim() || !isAddressValid) return import_react_hot_toast12.default.error("Please enter a valid wallet address.");
4878
+ if (!recipientAddress.trim() || !isAddressValid) return import_react_hot_toast13.default.error("Please enter a valid wallet address.");
4870
4879
  if (onSubmitCheckout) {
4871
4880
  setIsSubmitting(true);
4872
4881
  try {
@@ -5065,7 +5074,7 @@ var UniversalHuddlesPage = ({
5065
5074
  // src/components/UniversalMembersPage.tsx
5066
5075
  var import_react85 = __toESM(require("react"));
5067
5076
  var import_react86 = require("@hugeicons/react");
5068
- var import_react_hot_toast13 = __toESM(require("react-hot-toast"));
5077
+ var import_react_hot_toast14 = __toESM(require("react-hot-toast"));
5069
5078
  var import_core_free_icons32 = require("@hugeicons/core-free-icons");
5070
5079
  var MemberAvatar2 = ({ src, status }) => {
5071
5080
  const [loaded, setLoaded] = (0, import_react85.useState)(false);
@@ -5160,11 +5169,11 @@ var UniversalMembersPage = ({
5160
5169
  setIsRemoving(true);
5161
5170
  try {
5162
5171
  await onRemoveMember(memberToRemove.id);
5163
- import_react_hot_toast13.default.success("Member removed successfully.");
5172
+ import_react_hot_toast14.default.success("Member removed successfully.");
5164
5173
  setExpandedId(null);
5165
5174
  setMemberToRemove(null);
5166
5175
  } catch (error) {
5167
- import_react_hot_toast13.default.error("Failed to remove member.");
5176
+ import_react_hot_toast14.default.error("Failed to remove member.");
5168
5177
  } finally {
5169
5178
  setIsRemoving(false);
5170
5179
  }
@@ -5178,7 +5187,7 @@ var UniversalMembersPage = ({
5178
5187
  setInviteEmail("");
5179
5188
  setIsInviteMode(false);
5180
5189
  } catch (error) {
5181
- import_react_hot_toast13.default.error(error.message || "Failed to send invitation.");
5190
+ import_react_hot_toast14.default.error(error.message || "Failed to send invitation.");
5182
5191
  } finally {
5183
5192
  setIsInviting(false);
5184
5193
  }
@@ -5325,7 +5334,7 @@ var UniversalMembersPage = ({
5325
5334
  var import_react87 = __toESM(require("react"));
5326
5335
  var import_navigation6 = require("next/navigation");
5327
5336
  var import_react88 = require("@hugeicons/react");
5328
- var import_react_hot_toast14 = __toESM(require("react-hot-toast"));
5337
+ var import_react_hot_toast15 = __toESM(require("react-hot-toast"));
5329
5338
  var import_core_free_icons33 = require("@hugeicons/core-free-icons");
5330
5339
  var OrgAvatar = ({ src, sizeClass = "w-10 h-10" }) => {
5331
5340
  const [loaded, setLoaded] = (0, import_react87.useState)(false);
@@ -5380,7 +5389,7 @@ var UniversalHome2 = ({
5380
5389
  await onResolveInvite(selectedNotif, resolution);
5381
5390
  window.location.reload();
5382
5391
  } catch (error) {
5383
- import_react_hot_toast14.default.error("Failed to process invitation");
5392
+ import_react_hot_toast15.default.error("Failed to process invitation");
5384
5393
  setIsResolving(false);
5385
5394
  }
5386
5395
  };
@@ -5389,7 +5398,7 @@ var UniversalHome2 = ({
5389
5398
  try {
5390
5399
  if (onLogout) await onLogout();
5391
5400
  } catch (e) {
5392
- import_react_hot_toast14.default.error("Failed to log out cleanly.");
5401
+ import_react_hot_toast15.default.error("Failed to log out cleanly.");
5393
5402
  } finally {
5394
5403
  setIsLoggingOut(false);
5395
5404
  setShowLogoutConfirm(false);
@@ -5542,7 +5551,7 @@ var UniversalHome2 = ({
5542
5551
 
5543
5552
  // src/components/UniversalSettings.tsx
5544
5553
  var import_react89 = __toESM(require("react"));
5545
- var import_react_hot_toast15 = __toESM(require("react-hot-toast"));
5554
+ var import_react_hot_toast16 = __toESM(require("react-hot-toast"));
5546
5555
  var import_react90 = require("@hugeicons/react");
5547
5556
  var import_core_free_icons34 = require("@hugeicons/core-free-icons");
5548
5557
  var MemberAvatar3 = ({ src, status, sizeClass = "w-10 h-10" }) => {
@@ -5675,13 +5684,13 @@ var UniversalSettings = ({
5675
5684
  const file = e.target.files?.[0];
5676
5685
  if (!file) return;
5677
5686
  if (file.size > 1024 * 1024) {
5678
- import_react_hot_toast15.default.error("Image size must be less than 1MB.");
5687
+ import_react_hot_toast16.default.error("Image size must be less than 1MB.");
5679
5688
  e.target.value = "";
5680
5689
  return;
5681
5690
  }
5682
5691
  const validTypes = ["image/jpeg", "image/jpg", "image/png"];
5683
5692
  if (!validTypes.includes(file.type)) {
5684
- import_react_hot_toast15.default.error("Only PNG and JPEG images are allowed.");
5693
+ import_react_hot_toast16.default.error("Only PNG and JPEG images are allowed.");
5685
5694
  e.target.value = "";
5686
5695
  return;
5687
5696
  }
@@ -5716,11 +5725,11 @@ var UniversalSettings = ({
5716
5725
  setIsRemoving(true);
5717
5726
  try {
5718
5727
  await onRemoveMember(memberToRemove.userId);
5719
- import_react_hot_toast15.default.success("Member removed successfully.");
5728
+ import_react_hot_toast16.default.success("Member removed successfully.");
5720
5729
  setExpandedId(null);
5721
5730
  setMemberToRemove(null);
5722
5731
  } catch (error) {
5723
- import_react_hot_toast15.default.error(error.message || "Failed to remove member.");
5732
+ import_react_hot_toast16.default.error(error.message || "Failed to remove member.");
5724
5733
  } finally {
5725
5734
  setIsRemoving(false);
5726
5735
  }
@@ -5734,7 +5743,7 @@ var UniversalSettings = ({
5734
5743
  setInviteEmail("");
5735
5744
  setIsInviteMode(false);
5736
5745
  } catch (error) {
5737
- import_react_hot_toast15.default.error(error.message || "Failed to send invitation.");
5746
+ import_react_hot_toast16.default.error(error.message || "Failed to send invitation.");
5738
5747
  } finally {
5739
5748
  setIsInviting(false);
5740
5749
  }
@@ -5782,7 +5791,7 @@ var UniversalSettings = ({
5782
5791
  const handleSaveOrganization = async (e) => {
5783
5792
  e.preventDefault();
5784
5793
  if (isSavingOrg || isCheckingSlug || !canManage || !onSaveOrganization) return;
5785
- if (orgSlug !== initialOrgSlug && slugAvailable === false) return import_react_hot_toast15.default.error("Address handle unavailable.");
5794
+ if (orgSlug !== initialOrgSlug && slugAvailable === false) return import_react_hot_toast16.default.error("Address handle unavailable.");
5786
5795
  setIsSavingOrg(true);
5787
5796
  try {
5788
5797
  let finalAvatarUrl = orgAvatarUrl;
@@ -5795,7 +5804,7 @@ var UniversalSettings = ({
5795
5804
  setOrgAvatarUrl(finalAvatarUrl);
5796
5805
  }
5797
5806
  } catch (err) {
5798
- import_react_hot_toast15.default.error("Failed to securely upload workspace avatar.");
5807
+ import_react_hot_toast16.default.error("Failed to securely upload workspace avatar.");
5799
5808
  setIsSavingOrg(false);
5800
5809
  setIsUploadingOrgAvatar(false);
5801
5810
  return;
@@ -5804,10 +5813,10 @@ var UniversalSettings = ({
5804
5813
  setIsUploadingOrgAvatar(false);
5805
5814
  }
5806
5815
  const res = await onSaveOrganization({ name: orgName, slug: orgSlug, avatarUrl: finalAvatarUrl });
5807
- if (res.success) import_react_hot_toast15.default.success("Workspace updated successfully.");
5808
- else import_react_hot_toast15.default.error(res.error || "Failed to update workspace.");
5816
+ if (res.success) import_react_hot_toast16.default.success("Workspace updated successfully.");
5817
+ else import_react_hot_toast16.default.error(res.error || "Failed to update workspace.");
5809
5818
  } catch (error) {
5810
- import_react_hot_toast15.default.error("Service unavailable.");
5819
+ import_react_hot_toast16.default.error("Service unavailable.");
5811
5820
  } finally {
5812
5821
  setIsSavingOrg(false);
5813
5822
  setIsUploadingOrgAvatar(false);
@@ -5828,7 +5837,7 @@ var UniversalSettings = ({
5828
5837
  setAvatarUrl(finalAvatarUrl);
5829
5838
  }
5830
5839
  } catch (err) {
5831
- import_react_hot_toast15.default.error("Failed to securely upload profile avatar.");
5840
+ import_react_hot_toast16.default.error("Failed to securely upload profile avatar.");
5832
5841
  setIsSavingProfile(false);
5833
5842
  setIsUploadingUserAvatar(false);
5834
5843
  return;
@@ -5837,10 +5846,10 @@ var UniversalSettings = ({
5837
5846
  setIsUploadingUserAvatar(false);
5838
5847
  }
5839
5848
  const res = await onSaveProfile({ firstName, lastName, jobTitle, description, avatarUrl: finalAvatarUrl });
5840
- if (res.success) import_react_hot_toast15.default.success("Identity updated successfully.");
5841
- else import_react_hot_toast15.default.error(res.error || "Failed to update identity.");
5849
+ if (res.success) import_react_hot_toast16.default.success("Identity updated successfully.");
5850
+ else import_react_hot_toast16.default.error(res.error || "Failed to update identity.");
5842
5851
  } catch (error) {
5843
- import_react_hot_toast15.default.error("Service unavailable.");
5852
+ import_react_hot_toast16.default.error("Service unavailable.");
5844
5853
  } finally {
5845
5854
  setIsSavingProfile(false);
5846
5855
  setIsUploadingUserAvatar(false);
@@ -5907,7 +5916,7 @@ var UniversalSettings = ({
5907
5916
 
5908
5917
  // src/components/UniversalCreateHuddle.tsx
5909
5918
  var import_react91 = __toESM(require("react"));
5910
- var import_react_hot_toast16 = __toESM(require("react-hot-toast"));
5919
+ var import_react_hot_toast17 = __toESM(require("react-hot-toast"));
5911
5920
  var import_react92 = require("@hugeicons/react");
5912
5921
  var import_core_free_icons35 = require("@hugeicons/core-free-icons");
5913
5922
  var MemberAvatar4 = ({ src, sizeClass = "w-10 h-10" }) => {
@@ -5998,8 +6007,8 @@ var UniversalCreateHuddle = ({
5998
6007
  e.preventDefault();
5999
6008
  if (!canManage) return;
6000
6009
  const cleanTitle = title.trim();
6001
- if (cleanTitle.length < 2) return import_react_hot_toast16.default.error("Please enter a valid huddle name.");
6002
- if (isPrivate && selectedParticipants.size === 0) return import_react_hot_toast16.default.error("Private huddles require at least one participant.");
6010
+ if (cleanTitle.length < 2) return import_react_hot_toast17.default.error("Please enter a valid huddle name.");
6011
+ if (isPrivate && selectedParticipants.size === 0) return import_react_hot_toast17.default.error("Private huddles require at least one participant.");
6003
6012
  setIsSubmitting(true);
6004
6013
  try {
6005
6014
  await onCreateSubmit({
@@ -6010,7 +6019,7 @@ var UniversalCreateHuddle = ({
6010
6019
  participantIds: isPrivate ? Array.from(selectedParticipants) : []
6011
6020
  });
6012
6021
  } catch (error) {
6013
- import_react_hot_toast16.default.error(error.message || "Failed to schedule huddle.");
6022
+ import_react_hot_toast17.default.error(error.message || "Failed to schedule huddle.");
6014
6023
  setIsSubmitting(false);
6015
6024
  }
6016
6025
  };
package/dist/index.mjs CHANGED
@@ -3387,6 +3387,7 @@ var ManagedDocument = ({
3387
3387
  import React32, { useState as useState24 } from "react";
3388
3388
  import { HugeiconsIcon as HugeiconsIcon24 } from "@hugeicons/react";
3389
3389
  import { Loading03Icon as Loading03Icon14 } from "@hugeicons/core-free-icons";
3390
+ import toast9 from "react-hot-toast";
3390
3391
  var TextInput2 = ({
3391
3392
  label,
3392
3393
  value,
@@ -3461,13 +3462,11 @@ var ManagedContactBlock = ({
3461
3462
  company,
3462
3463
  socials
3463
3464
  }) => {
3464
- const [formData, setFormData] = useState24({ name: "", title: "", phone: "", message: "" });
3465
+ const [formData, setFormData] = useState24({ name: "", email: "", title: "", phone: "", message: "" });
3465
3466
  const [status, setStatus] = useState24("idle");
3466
- const [responseMessage, setResponseMessage] = useState24("");
3467
3467
  const handleSubmit = async (e) => {
3468
3468
  e.preventDefault();
3469
3469
  setStatus("loading");
3470
- setResponseMessage("");
3471
3470
  try {
3472
3471
  const res = await fetch("/api/contact", {
3473
3472
  method: "POST",
@@ -3477,15 +3476,15 @@ var ManagedContactBlock = ({
3477
3476
  const data = await res.json();
3478
3477
  if (res.ok) {
3479
3478
  setStatus("success");
3480
- setResponseMessage(data.message || "Message sent successfully!");
3481
- setFormData({ name: "", title: "", phone: "", message: "" });
3479
+ toast9.success(data.message || "Message sent successfully!");
3480
+ setFormData({ name: "", email: "", title: "", phone: "", message: "" });
3482
3481
  } else {
3483
3482
  setStatus("error");
3484
- setResponseMessage(data.error || "Failed to send message.");
3483
+ toast9.error(data.error || "Failed to send message.");
3485
3484
  }
3486
3485
  } catch (error) {
3487
3486
  setStatus("error");
3488
- setResponseMessage("An unexpected error occurred. Please try again.");
3487
+ toast9.error("An unexpected error occurred. Please try again.");
3489
3488
  }
3490
3489
  };
3491
3490
  return /* @__PURE__ */ React32.createElement("div", { className: "grow pt-4 pb-20 px-4 md:px-8 w-full flex justify-center z-10 relative" }, /* @__PURE__ */ React32.createElement("div", { className: "relative bg-white rounded-2xl w-full max-w-7xl mx-auto overflow-hidden" }, /* @__PURE__ */ React32.createElement(
@@ -3532,6 +3531,16 @@ var ManagedContactBlock = ({
3532
3531
  disabled: status === "loading"
3533
3532
  }
3534
3533
  ), /* @__PURE__ */ React32.createElement(
3534
+ TextInput2,
3535
+ {
3536
+ label: "EMAIL ADDRESS",
3537
+ type: "email",
3538
+ placeholder: "john@example.com",
3539
+ value: formData.email,
3540
+ onChange: (val) => setFormData({ ...formData, email: val }),
3541
+ disabled: status === "loading"
3542
+ }
3543
+ )), /* @__PURE__ */ React32.createElement("div", { className: "flex flex-col md:flex-row gap-6" }, /* @__PURE__ */ React32.createElement(
3535
3544
  TextInput2,
3536
3545
  {
3537
3546
  label: "SUBJECT TITLE",
@@ -3540,7 +3549,7 @@ var ManagedContactBlock = ({
3540
3549
  onChange: (val) => setFormData({ ...formData, title: val }),
3541
3550
  disabled: status === "loading"
3542
3551
  }
3543
- )), /* @__PURE__ */ React32.createElement(
3552
+ ), /* @__PURE__ */ React32.createElement(
3544
3553
  TextInput2,
3545
3554
  {
3546
3555
  label: "PHONE NUMBER (OPTIONAL)",
@@ -3550,7 +3559,7 @@ var ManagedContactBlock = ({
3550
3559
  onChange: (val) => setFormData({ ...formData, phone: val }),
3551
3560
  disabled: status === "loading"
3552
3561
  }
3553
- ), /* @__PURE__ */ React32.createElement(
3562
+ )), /* @__PURE__ */ React32.createElement(
3554
3563
  TextAreaInput,
3555
3564
  {
3556
3565
  label: "MESSAGE",
@@ -3559,12 +3568,12 @@ var ManagedContactBlock = ({
3559
3568
  onChange: (val) => setFormData({ ...formData, message: val }),
3560
3569
  disabled: status === "loading"
3561
3570
  }
3562
- ), responseMessage && /* @__PURE__ */ React32.createElement("p", { className: `text-sm ${status === "error" ? "text-red-500" : "text-green-600"}` }, responseMessage), /* @__PURE__ */ React32.createElement("div", { className: "pt-4" }, /* @__PURE__ */ React32.createElement(
3571
+ ), /* @__PURE__ */ React32.createElement("div", { className: "pt-4" }, /* @__PURE__ */ React32.createElement(
3563
3572
  ThreeDActionButton2,
3564
3573
  {
3565
3574
  type: "submit",
3566
3575
  isLoading: status === "loading",
3567
- disabled: !formData.name || !formData.title || !formData.message
3576
+ disabled: !formData.name || !formData.email || !formData.title || !formData.message
3568
3577
  },
3569
3578
  "Submit Message"
3570
3579
  )))))))));
@@ -4271,7 +4280,7 @@ var UniversalVerificationPage = ({
4271
4280
  // src/components/UniversalRewardPage.tsx
4272
4281
  import React44, { useState as useState30 } from "react";
4273
4282
  import axios from "axios";
4274
- import toast9 from "react-hot-toast";
4283
+ import toast10 from "react-hot-toast";
4275
4284
  import Confetti from "react-confetti";
4276
4285
  import { useWindowSize } from "react-use";
4277
4286
  import { HugeiconsIcon as HugeiconsIcon30 } from "@hugeicons/react";
@@ -4326,7 +4335,7 @@ var UniversalRewardPage = ({
4326
4335
  const res = await axios.post(selectedReward.endpoint, selectedReward.config);
4327
4336
  if (res.data.success) {
4328
4337
  setShowConfetti(true);
4329
- toast9.success(res.data.message || "Reward claimed successfully!");
4338
+ toast10.success(res.data.message || "Reward claimed successfully!");
4330
4339
  setSelectedReward(null);
4331
4340
  onRefresh();
4332
4341
  setTimeout(() => {
@@ -4334,7 +4343,7 @@ var UniversalRewardPage = ({
4334
4343
  }, 6e3);
4335
4344
  }
4336
4345
  } catch (error) {
4337
- toast9.error(error.response?.data?.error || "Failed to claim reward. Please try again.");
4346
+ toast10.error(error.response?.data?.error || "Failed to claim reward. Please try again.");
4338
4347
  } finally {
4339
4348
  setIsClaiming(false);
4340
4349
  }
@@ -4384,7 +4393,7 @@ var UniversalRewardPage = ({
4384
4393
 
4385
4394
  // src/components/UniversalReferralPage.tsx
4386
4395
  import React45, { useState as useState31 } from "react";
4387
- import toast10 from "react-hot-toast";
4396
+ import toast11 from "react-hot-toast";
4388
4397
  import { HugeiconsIcon as HugeiconsIcon31 } from "@hugeicons/react";
4389
4398
  import {
4390
4399
  ArrowLeft01Icon as ArrowLeft01Icon12,
@@ -4418,9 +4427,9 @@ var UniversalReferralPage = ({
4418
4427
  if (!referralCode) return;
4419
4428
  try {
4420
4429
  await navigator.clipboard.writeText(referralCode);
4421
- toast10.success("Referral code copied!");
4430
+ toast11.success("Referral code copied!");
4422
4431
  } catch {
4423
- toast10.error("Failed to copy code.");
4432
+ toast11.error("Failed to copy code.");
4424
4433
  }
4425
4434
  };
4426
4435
  const AvatarLogo2 = ({ src, alt, name, sizeClass = "w-10 h-10" }) => {
@@ -4729,7 +4738,7 @@ var PinDialerBottomSheet = ({
4729
4738
 
4730
4739
  // src/components/UniversalBuyCryptoPage.tsx
4731
4740
  import React48, { useState as useState34, useEffect as useEffect18, useRef as useRef12, useCallback } from "react";
4732
- import toast11 from "react-hot-toast";
4741
+ import toast12 from "react-hot-toast";
4733
4742
  import { HugeiconsIcon as HugeiconsIcon34 } from "@hugeicons/react";
4734
4743
  import {
4735
4744
  ArrowLeft01Icon as ArrowLeft01Icon14,
@@ -4855,7 +4864,7 @@ var UniversalBuyCryptoPage = ({
4855
4864
  if (result.ratePerToken) setRateDisplay(result.ratePerToken);
4856
4865
  if (result.rateKey) setCurrentRateKey(result.rateKey);
4857
4866
  } catch {
4858
- toast11.error("Failed to calculate live rate.");
4867
+ toast12.error("Failed to calculate live rate.");
4859
4868
  } finally {
4860
4869
  setIsCalculating(false);
4861
4870
  }
@@ -4886,11 +4895,11 @@ var UniversalBuyCryptoPage = ({
4886
4895
  const handleCheckout = async () => {
4887
4896
  const numFiat = parseFloat(fiatAmount) || 0;
4888
4897
  const numCrypto = parseFloat(cryptoAmount) || 0;
4889
- if (numFiat <= 0 || numCrypto <= 0) return toast11.error("Please enter a valid amount.");
4898
+ if (numFiat <= 0 || numCrypto <= 0) return toast12.error("Please enter a valid amount.");
4890
4899
  if (selectedNetwork.minimumWithdrawal && numCrypto < selectedNetwork.minimumWithdrawal) {
4891
- return toast11.error(`Minimum purchase for ${selectedNetwork.name} is ${selectedNetwork.minimumWithdrawal} ${selectedCrypto.code}`);
4900
+ return toast12.error(`Minimum purchase for ${selectedNetwork.name} is ${selectedNetwork.minimumWithdrawal} ${selectedCrypto.code}`);
4892
4901
  }
4893
- if (!recipientAddress.trim() || !isAddressValid) return toast11.error("Please enter a valid wallet address.");
4902
+ if (!recipientAddress.trim() || !isAddressValid) return toast12.error("Please enter a valid wallet address.");
4894
4903
  if (onSubmitCheckout) {
4895
4904
  setIsSubmitting(true);
4896
4905
  try {
@@ -5093,7 +5102,7 @@ var UniversalHuddlesPage = ({
5093
5102
  // src/components/UniversalMembersPage.tsx
5094
5103
  import React50, { useState as useState35, useEffect as useEffect19, useRef as useRef13 } from "react";
5095
5104
  import { HugeiconsIcon as HugeiconsIcon36 } from "@hugeicons/react";
5096
- import toast12 from "react-hot-toast";
5105
+ import toast13 from "react-hot-toast";
5097
5106
  import {
5098
5107
  ArrowLeft01Icon as ArrowLeft01Icon16,
5099
5108
  ArrowRight01Icon as ArrowRight01Icon11,
@@ -5195,11 +5204,11 @@ var UniversalMembersPage = ({
5195
5204
  setIsRemoving(true);
5196
5205
  try {
5197
5206
  await onRemoveMember(memberToRemove.id);
5198
- toast12.success("Member removed successfully.");
5207
+ toast13.success("Member removed successfully.");
5199
5208
  setExpandedId(null);
5200
5209
  setMemberToRemove(null);
5201
5210
  } catch (error) {
5202
- toast12.error("Failed to remove member.");
5211
+ toast13.error("Failed to remove member.");
5203
5212
  } finally {
5204
5213
  setIsRemoving(false);
5205
5214
  }
@@ -5213,7 +5222,7 @@ var UniversalMembersPage = ({
5213
5222
  setInviteEmail("");
5214
5223
  setIsInviteMode(false);
5215
5224
  } catch (error) {
5216
- toast12.error(error.message || "Failed to send invitation.");
5225
+ toast13.error(error.message || "Failed to send invitation.");
5217
5226
  } finally {
5218
5227
  setIsInviting(false);
5219
5228
  }
@@ -5360,7 +5369,7 @@ var UniversalMembersPage = ({
5360
5369
  import React51, { useState as useState36 } from "react";
5361
5370
  import { useRouter as useRouter3 } from "next/navigation";
5362
5371
  import { HugeiconsIcon as HugeiconsIcon37 } from "@hugeicons/react";
5363
- import toast13 from "react-hot-toast";
5372
+ import toast14 from "react-hot-toast";
5364
5373
  import {
5365
5374
  Loading03Icon as Loading03Icon25,
5366
5375
  Notification01Icon as Notification01Icon2,
@@ -5424,7 +5433,7 @@ var UniversalHome2 = ({
5424
5433
  await onResolveInvite(selectedNotif, resolution);
5425
5434
  window.location.reload();
5426
5435
  } catch (error) {
5427
- toast13.error("Failed to process invitation");
5436
+ toast14.error("Failed to process invitation");
5428
5437
  setIsResolving(false);
5429
5438
  }
5430
5439
  };
@@ -5433,7 +5442,7 @@ var UniversalHome2 = ({
5433
5442
  try {
5434
5443
  if (onLogout) await onLogout();
5435
5444
  } catch (e) {
5436
- toast13.error("Failed to log out cleanly.");
5445
+ toast14.error("Failed to log out cleanly.");
5437
5446
  } finally {
5438
5447
  setIsLoggingOut(false);
5439
5448
  setShowLogoutConfirm(false);
@@ -5586,7 +5595,7 @@ var UniversalHome2 = ({
5586
5595
 
5587
5596
  // src/components/UniversalSettings.tsx
5588
5597
  import React52, { useState as useState37, useEffect as useEffect20, useRef as useRef14 } from "react";
5589
- import toast14 from "react-hot-toast";
5598
+ import toast15 from "react-hot-toast";
5590
5599
  import { HugeiconsIcon as HugeiconsIcon38 } from "@hugeicons/react";
5591
5600
  import {
5592
5601
  ArrowLeft01Icon as ArrowLeft01Icon18,
@@ -5730,13 +5739,13 @@ var UniversalSettings = ({
5730
5739
  const file = e.target.files?.[0];
5731
5740
  if (!file) return;
5732
5741
  if (file.size > 1024 * 1024) {
5733
- toast14.error("Image size must be less than 1MB.");
5742
+ toast15.error("Image size must be less than 1MB.");
5734
5743
  e.target.value = "";
5735
5744
  return;
5736
5745
  }
5737
5746
  const validTypes = ["image/jpeg", "image/jpg", "image/png"];
5738
5747
  if (!validTypes.includes(file.type)) {
5739
- toast14.error("Only PNG and JPEG images are allowed.");
5748
+ toast15.error("Only PNG and JPEG images are allowed.");
5740
5749
  e.target.value = "";
5741
5750
  return;
5742
5751
  }
@@ -5771,11 +5780,11 @@ var UniversalSettings = ({
5771
5780
  setIsRemoving(true);
5772
5781
  try {
5773
5782
  await onRemoveMember(memberToRemove.userId);
5774
- toast14.success("Member removed successfully.");
5783
+ toast15.success("Member removed successfully.");
5775
5784
  setExpandedId(null);
5776
5785
  setMemberToRemove(null);
5777
5786
  } catch (error) {
5778
- toast14.error(error.message || "Failed to remove member.");
5787
+ toast15.error(error.message || "Failed to remove member.");
5779
5788
  } finally {
5780
5789
  setIsRemoving(false);
5781
5790
  }
@@ -5789,7 +5798,7 @@ var UniversalSettings = ({
5789
5798
  setInviteEmail("");
5790
5799
  setIsInviteMode(false);
5791
5800
  } catch (error) {
5792
- toast14.error(error.message || "Failed to send invitation.");
5801
+ toast15.error(error.message || "Failed to send invitation.");
5793
5802
  } finally {
5794
5803
  setIsInviting(false);
5795
5804
  }
@@ -5837,7 +5846,7 @@ var UniversalSettings = ({
5837
5846
  const handleSaveOrganization = async (e) => {
5838
5847
  e.preventDefault();
5839
5848
  if (isSavingOrg || isCheckingSlug || !canManage || !onSaveOrganization) return;
5840
- if (orgSlug !== initialOrgSlug && slugAvailable === false) return toast14.error("Address handle unavailable.");
5849
+ if (orgSlug !== initialOrgSlug && slugAvailable === false) return toast15.error("Address handle unavailable.");
5841
5850
  setIsSavingOrg(true);
5842
5851
  try {
5843
5852
  let finalAvatarUrl = orgAvatarUrl;
@@ -5850,7 +5859,7 @@ var UniversalSettings = ({
5850
5859
  setOrgAvatarUrl(finalAvatarUrl);
5851
5860
  }
5852
5861
  } catch (err) {
5853
- toast14.error("Failed to securely upload workspace avatar.");
5862
+ toast15.error("Failed to securely upload workspace avatar.");
5854
5863
  setIsSavingOrg(false);
5855
5864
  setIsUploadingOrgAvatar(false);
5856
5865
  return;
@@ -5859,10 +5868,10 @@ var UniversalSettings = ({
5859
5868
  setIsUploadingOrgAvatar(false);
5860
5869
  }
5861
5870
  const res = await onSaveOrganization({ name: orgName, slug: orgSlug, avatarUrl: finalAvatarUrl });
5862
- if (res.success) toast14.success("Workspace updated successfully.");
5863
- else toast14.error(res.error || "Failed to update workspace.");
5871
+ if (res.success) toast15.success("Workspace updated successfully.");
5872
+ else toast15.error(res.error || "Failed to update workspace.");
5864
5873
  } catch (error) {
5865
- toast14.error("Service unavailable.");
5874
+ toast15.error("Service unavailable.");
5866
5875
  } finally {
5867
5876
  setIsSavingOrg(false);
5868
5877
  setIsUploadingOrgAvatar(false);
@@ -5883,7 +5892,7 @@ var UniversalSettings = ({
5883
5892
  setAvatarUrl(finalAvatarUrl);
5884
5893
  }
5885
5894
  } catch (err) {
5886
- toast14.error("Failed to securely upload profile avatar.");
5895
+ toast15.error("Failed to securely upload profile avatar.");
5887
5896
  setIsSavingProfile(false);
5888
5897
  setIsUploadingUserAvatar(false);
5889
5898
  return;
@@ -5892,10 +5901,10 @@ var UniversalSettings = ({
5892
5901
  setIsUploadingUserAvatar(false);
5893
5902
  }
5894
5903
  const res = await onSaveProfile({ firstName, lastName, jobTitle, description, avatarUrl: finalAvatarUrl });
5895
- if (res.success) toast14.success("Identity updated successfully.");
5896
- else toast14.error(res.error || "Failed to update identity.");
5904
+ if (res.success) toast15.success("Identity updated successfully.");
5905
+ else toast15.error(res.error || "Failed to update identity.");
5897
5906
  } catch (error) {
5898
- toast14.error("Service unavailable.");
5907
+ toast15.error("Service unavailable.");
5899
5908
  } finally {
5900
5909
  setIsSavingProfile(false);
5901
5910
  setIsUploadingUserAvatar(false);
@@ -5962,7 +5971,7 @@ var UniversalSettings = ({
5962
5971
 
5963
5972
  // src/components/UniversalCreateHuddle.tsx
5964
5973
  import React53, { useState as useState38, useEffect as useEffect21, useRef as useRef15 } from "react";
5965
- import toast15 from "react-hot-toast";
5974
+ import toast16 from "react-hot-toast";
5966
5975
  import { HugeiconsIcon as HugeiconsIcon39 } from "@hugeicons/react";
5967
5976
  import {
5968
5977
  ArrowLeft01Icon as ArrowLeft01Icon19,
@@ -6063,8 +6072,8 @@ var UniversalCreateHuddle = ({
6063
6072
  e.preventDefault();
6064
6073
  if (!canManage) return;
6065
6074
  const cleanTitle = title.trim();
6066
- if (cleanTitle.length < 2) return toast15.error("Please enter a valid huddle name.");
6067
- if (isPrivate && selectedParticipants.size === 0) return toast15.error("Private huddles require at least one participant.");
6075
+ if (cleanTitle.length < 2) return toast16.error("Please enter a valid huddle name.");
6076
+ if (isPrivate && selectedParticipants.size === 0) return toast16.error("Private huddles require at least one participant.");
6068
6077
  setIsSubmitting(true);
6069
6078
  try {
6070
6079
  await onCreateSubmit({
@@ -6075,7 +6084,7 @@ var UniversalCreateHuddle = ({
6075
6084
  participantIds: isPrivate ? Array.from(selectedParticipants) : []
6076
6085
  });
6077
6086
  } catch (error) {
6078
- toast15.error(error.message || "Failed to schedule huddle.");
6087
+ toast16.error(error.message || "Failed to schedule huddle.");
6079
6088
  setIsSubmitting(false);
6080
6089
  }
6081
6090
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@retinalabsllc/zairusjs",
3
- "version": "21.1.2",
3
+ "version": "21.1.4",
4
4
  "description": "A perceptive, Ai data driven Next.js UI component library.",
5
5
  "author": "Retina Labs Company",
6
6
  "license": "MIT",