@thenamespace/ens-components 1.3.1 → 1.4.0

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.ts CHANGED
@@ -172,6 +172,45 @@ declare const yearsFromSeconds: (seconds: number) => number;
172
172
  */
173
173
  declare const formatDurationSummary: (durationSeconds: number) => string;
174
174
 
175
+ /**
176
+ * Pure helpers for formatting ETH/USD pricing in the registration UI.
177
+ *
178
+ * Display rules:
179
+ * - ETH is rendered at a fixed 4 decimals.
180
+ * - Non-zero values smaller than 0.0001 ETH render as the literal "<0.0001"
181
+ * so cheap-gas rows stay informative without claiming a misleading exact
182
+ * figure. The USD subtitle is derived from wei (when available) so it
183
+ * stays numerically honest even when the ETH cell is rounded.
184
+ * - "Free" and "N/A" are sentinel strings — they bypass formatting and
185
+ * suppress the USD subtitle.
186
+ */
187
+ declare const ETH_SENTINELS: readonly ["Free", "N/A"];
188
+ type EthSentinel = (typeof ETH_SENTINELS)[number];
189
+ declare const isSentinel: (amount: number | string) => amount is EthSentinel;
190
+ /**
191
+ * Format an ETH amount for display at a fixed 4 decimals.
192
+ *
193
+ * Any positive value below the 4-decimal threshold renders as the literal
194
+ * "<0.0001" — honest about the rounding direction, and (crucially) avoids
195
+ * the misleading 1:1 read against the wei-derived USD subtitle when the
196
+ * true amount is much smaller than 0.0001 ETH.
197
+ */
198
+ declare const formatEth: (eth: number) => string;
199
+ /**
200
+ * Convert wei → USD. Note the `Number(bigint)` cast loses exactness above
201
+ * 2^53 wei (~0.009 ETH); the resulting error is < 1e-7 relative, which is
202
+ * invisible after `.toFixed(2)` for any realistic ENS registration total.
203
+ */
204
+ declare const usdFromWei: (wei: bigint, rate: number) => number;
205
+ /**
206
+ * Compute the `≈ $X.XX` subtitle for a fee row.
207
+ *
208
+ * Prefers `weiAmount` (precise) over the displayed string (which may have
209
+ * been rounded by `formatEth`). Returns `null` when the row is loading,
210
+ * unpriced, a sentinel ("Free"/"N/A"), or otherwise unparseable.
211
+ */
212
+ declare const computeUsd: (amount: number | string, weiAmount: bigint | undefined, ethUsdRate: number | null | undefined, isChecking: boolean) => string | null;
213
+
175
214
  interface EnsRecordsFormProps {
176
215
  resolverChainId?: number;
177
216
  resolverAddress?: Address;
@@ -459,20 +498,20 @@ interface ProgressBarProps {
459
498
  }
460
499
  declare function ProgressBar({ progress }: ProgressBarProps): react_jsx_runtime.JSX.Element;
461
500
 
501
+ interface FeeRow {
502
+ amount: number | string;
503
+ isChecking: boolean;
504
+ /** Optional precise wei value. When provided, USD is computed from wei
505
+ * rather than from the (possibly rounded) display string. See
506
+ * `usdFromWei` for the precision bound. */
507
+ weiAmount?: bigint;
508
+ }
462
509
  interface PricingDisplayProps {
463
- primaryFee: {
510
+ primaryFee: FeeRow & {
464
511
  label: string;
465
- amount: number | string;
466
- isChecking: boolean;
467
- };
468
- networkFees?: {
469
- amount: number | string;
470
- isChecking: boolean;
471
- };
472
- total: {
473
- amount: number | string;
474
- isChecking: boolean;
475
512
  };
513
+ networkFees?: FeeRow;
514
+ total: FeeRow;
476
515
  expiryPicker?: {
477
516
  durationSeconds: number;
478
517
  onDurationChange: (seconds: number) => void;
@@ -889,5 +928,5 @@ declare const useAvatarClient: ({ isTestnet, domain }: UseAvatarClientParams) =>
889
928
  getErrorMessage: (err: unknown, imageType?: UploadImageType) => string;
890
929
  };
891
930
 
892
- export { Accordion, Alert, Button, Card, ChainIcon, ConnectAndSetChain, ContenthashIcon, ContenthashProtocol, ContractErrorLabel, Dropdown, DurationPicker, ENS_RESOLVER_ABI, EnsNameRegistrationForm, EnsRecordsForm, Icon, Input, ListingNetwork, ListingType, MIN_REGISTRATION_SECONDS, MULTICALL, Modal, ONE_DAY, ONE_YEAR, OffchainSubnameForm, PricingDisplay, ProfileHeader, ProgressBar, SET_ADDRESS_FUNC, SET_CONTENTHASH_FUNC, SET_TEXT_FUNC, SelectRecordsForm, ShurikenSpinner, SubnameMintForm, Text, TextRecordCategory, Textarea, ThemeProvider, Tooltip, TransactionPendingScreen, TxProgress, capitalize, convertEVMChainIdToCoinType, convertToMulticallResolverData, convertToResolverData, createEnsReferer, debounce, deepCopy, diffToEnsRecords, ensureFloatInput, equalsIgnoreCase, formatDurationSummary, formatFloat, getAvatarUploadErrorMessage, getBlockExplorer, getBlockExplorerAddressUrl, getBlockExplorerName, getBlockExplorerTransactionUrl, getChainIdForListingNetwork, getEnsAppUrl, getEnsRecordsDiff, getImageUploadErrorMessage, getSupportedAddressByChainId, getSupportedAddressByCoin, getSupportedAddressByName, getSupportedAddressMap, getSupportedChashByProtocol, getSupportedText, isCommitmentToNewErr, isContenthashValid, isUserDeniedError, roundDurationWithDay, secondsFromYears, secondsToDateInput, supportedAddresses, supportedContenthashRecords, supportedTexts, useAvatarClient, useENSResolver, useEthDollarValue, useMintManager, useMintSubname, useOffchainManager, useRegisterENS, useTheme, useWaitTransaction, validateEnsRecords, wait, yearsFromSeconds };
893
- export type { AccordionProps, AlertPosition, AlertProps, AlertVariant, ButtonProps, ButtonSize, ButtonVariant, ChainName$1 as ChainName, ConnectAndSetChainProps, ContractErrorLabelProps, DropdownProps, DurationPickerProps, EnsAddressRecord$1 as EnsAddressRecord, EnsContenthashRecord, EnsRecords$1 as EnsRecords, EnsRecordsDiff, EnsTextRecord$1 as EnsTextRecord, EstimatedFees, IconName, IconProps, InputProps, InputSize, InputType, ModalPresentation, ModalProps, ModalResponsivePresentation, ModalSize, NameListing, OffchainSubnameCreatedData, PricingDisplayProps, ProfileHeaderProps, RecordValidationError, RegistrationFeeEstimate, RegistrationRequest, ShurikenSpinnerProps, SupportedContenthashRecord, SupportedEnsAddress, SupportedText, SupportedTextRecord, TextCategory, TextColor, TextProps, TextSize, TextWeight, TextareaProps, TextareaSize, ThemeContextValue, ThemeName, ThemeProviderProps, TooltipPosition, TooltipProps, UploadAvatarParams, UploadImageType };
931
+ export { Accordion, Alert, Button, Card, ChainIcon, ConnectAndSetChain, ContenthashIcon, ContenthashProtocol, ContractErrorLabel, Dropdown, DurationPicker, ENS_RESOLVER_ABI, ETH_SENTINELS, EnsNameRegistrationForm, EnsRecordsForm, Icon, Input, ListingNetwork, ListingType, MIN_REGISTRATION_SECONDS, MULTICALL, Modal, ONE_DAY, ONE_YEAR, OffchainSubnameForm, PricingDisplay, ProfileHeader, ProgressBar, SET_ADDRESS_FUNC, SET_CONTENTHASH_FUNC, SET_TEXT_FUNC, SelectRecordsForm, ShurikenSpinner, SubnameMintForm, Text, TextRecordCategory, Textarea, ThemeProvider, Tooltip, TransactionPendingScreen, TxProgress, capitalize, computeUsd, convertEVMChainIdToCoinType, convertToMulticallResolverData, convertToResolverData, createEnsReferer, debounce, deepCopy, diffToEnsRecords, ensureFloatInput, equalsIgnoreCase, formatDurationSummary, formatEth, formatFloat, getAvatarUploadErrorMessage, getBlockExplorer, getBlockExplorerAddressUrl, getBlockExplorerName, getBlockExplorerTransactionUrl, getChainIdForListingNetwork, getEnsAppUrl, getEnsRecordsDiff, getImageUploadErrorMessage, getSupportedAddressByChainId, getSupportedAddressByCoin, getSupportedAddressByName, getSupportedAddressMap, getSupportedChashByProtocol, getSupportedText, isCommitmentToNewErr, isContenthashValid, isSentinel, isUserDeniedError, roundDurationWithDay, secondsFromYears, secondsToDateInput, supportedAddresses, supportedContenthashRecords, supportedTexts, usdFromWei, useAvatarClient, useENSResolver, useEthDollarValue, useMintManager, useMintSubname, useOffchainManager, useRegisterENS, useTheme, useWaitTransaction, validateEnsRecords, wait, yearsFromSeconds };
932
+ export type { AccordionProps, AlertPosition, AlertProps, AlertVariant, ButtonProps, ButtonSize, ButtonVariant, ChainName$1 as ChainName, ConnectAndSetChainProps, ContractErrorLabelProps, DropdownProps, DurationPickerProps, EnsAddressRecord$1 as EnsAddressRecord, EnsContenthashRecord, EnsRecords$1 as EnsRecords, EnsRecordsDiff, EnsTextRecord$1 as EnsTextRecord, EstimatedFees, EthSentinel, IconName, IconProps, InputProps, InputSize, InputType, ModalPresentation, ModalProps, ModalResponsivePresentation, ModalSize, NameListing, OffchainSubnameCreatedData, PricingDisplayProps, ProfileHeaderProps, RecordValidationError, RegistrationFeeEstimate, RegistrationRequest, ShurikenSpinnerProps, SupportedContenthashRecord, SupportedEnsAddress, SupportedText, SupportedTextRecord, TextCategory, TextColor, TextProps, TextSize, TextWeight, TextareaProps, TextareaSize, ThemeContextValue, ThemeName, ThemeProviderProps, TooltipPosition, TooltipProps, UploadAvatarParams, UploadImageType };
package/dist/index.js CHANGED
@@ -11686,6 +11686,24 @@ const formatDurationSummary = (durationSeconds) => {
11686
11686
  return parts.slice(0, 2).join(", ") || "0 days";
11687
11687
  };
11688
11688
 
11689
+ const ETH_SENTINELS = ["Free", "N/A"];
11690
+ const isSentinel = (amount) => amount === "Free" || amount === "N/A";
11691
+ const formatEth = (eth) => {
11692
+ if (!isFinite(eth) || eth <= 0) return "0.0000";
11693
+ if (eth < 1e-4) return "<0.0001";
11694
+ return eth.toFixed(4);
11695
+ };
11696
+ const usdFromWei = (wei, rate) => Number(wei) * rate / 1e18;
11697
+ const computeUsd = (amount, weiAmount, ethUsdRate, isChecking) => {
11698
+ if (!ethUsdRate || isChecking || isSentinel(amount)) return null;
11699
+ if (weiAmount !== void 0 && weiAmount > 0n) {
11700
+ return usdFromWei(weiAmount, ethUsdRate).toFixed(2);
11701
+ }
11702
+ const eth = parseFloat(String(amount).replace(/^~/, ""));
11703
+ if (isNaN(eth) || eth <= 0) return null;
11704
+ return (eth * ethUsdRate).toFixed(2);
11705
+ };
11706
+
11689
11707
  const isValidEmvAddress = (value) => {
11690
11708
  return isAddress$1(value);
11691
11709
  };
@@ -12017,6 +12035,7 @@ const DurationPicker = ({
12017
12035
  ] });
12018
12036
  };
12019
12037
 
12038
+ const NBSP = "\xA0";
12020
12039
  const PricingDisplay = ({
12021
12040
  primaryFee,
12022
12041
  networkFees,
@@ -12026,14 +12045,10 @@ const PricingDisplay = ({
12026
12045
  className = ""
12027
12046
  }) => {
12028
12047
  const totalLoading = total.isChecking || primaryFee.isChecking || networkFees?.isChecking;
12029
- const totalUsd = React__default.useMemo(() => {
12030
- if (!ethUsdRate || totalLoading || total.amount === "Free" || total.amount === "N/A") {
12031
- return null;
12032
- }
12033
- const eth = parseFloat(String(total.amount).replace(/^~/, ""));
12034
- if (isNaN(eth) || eth <= 0) return null;
12035
- return (eth * ethUsdRate).toFixed(2);
12036
- }, [ethUsdRate, total.amount, totalLoading]);
12048
+ const totalUsd = React__default.useMemo(
12049
+ () => computeUsd(total.amount, total.weiAmount, ethUsdRate, !!totalLoading),
12050
+ [ethUsdRate, total.amount, total.weiAmount, totalLoading]
12051
+ );
12037
12052
  return /* @__PURE__ */ jsxs("div", { className: `ens-registration-pricing ${className}`, children: [
12038
12053
  expiryPicker && /* @__PURE__ */ jsx("div", { className: "ens-expiry-picker mb-2", children: /* @__PURE__ */ jsx(
12039
12054
  DurationPicker,
@@ -12045,20 +12060,17 @@ const PricingDisplay = ({
12045
12060
  ) }),
12046
12061
  /* @__PURE__ */ jsxs("div", { className: "d-flex justify-content-between align-items-center mb-1", children: [
12047
12062
  /* @__PURE__ */ jsx(Text, { size: "sm", color: "grey", children: primaryFee.label }),
12048
- primaryFee.isChecking ? /* @__PURE__ */ jsx(ShurikenSpinner, { size: 16 }) : /* @__PURE__ */ jsx(Text, { size: "sm", color: "grey", children: primaryFee.amount === "Free" || primaryFee.amount === "N/A" ? primaryFee.amount : `${primaryFee.amount} ETH` })
12063
+ /* @__PURE__ */ jsx(Text, { size: "sm", color: "grey", children: primaryFee.isChecking ? /* @__PURE__ */ jsx(ShurikenSpinner, { size: 14 }) : isSentinel(primaryFee.amount) ? primaryFee.amount : `${primaryFee.amount} ETH` })
12049
12064
  ] }),
12050
12065
  networkFees && /* @__PURE__ */ jsxs("div", { className: "d-flex justify-content-between align-items-center mb-1", children: [
12051
12066
  /* @__PURE__ */ jsx(Text, { size: "sm", color: "grey", children: "Est. network fees" }),
12052
- networkFees.isChecking ? /* @__PURE__ */ jsx(ShurikenSpinner, { size: 16 }) : /* @__PURE__ */ jsx(Text, { size: "sm", color: "grey", children: networkFees.amount === "N/A" ? "N/A" : `${networkFees.amount} ETH` })
12067
+ /* @__PURE__ */ jsx(Text, { size: "sm", color: "grey", children: networkFees.isChecking ? /* @__PURE__ */ jsx(ShurikenSpinner, { size: 14 }) : networkFees.amount === "N/A" ? "N/A" : `${networkFees.amount} ETH` })
12053
12068
  ] }),
12054
12069
  /* @__PURE__ */ jsxs("div", { className: "d-flex justify-content-between align-items-center mt-2 total-fee", children: [
12055
12070
  /* @__PURE__ */ jsx(Text, { size: "lg", weight: "bold", children: "Total" }),
12056
- totalLoading ? /* @__PURE__ */ jsx(ShurikenSpinner, { size: 20 }) : /* @__PURE__ */ jsxs("div", { style: { textAlign: "right" }, children: [
12057
- /* @__PURE__ */ jsx(Text, { size: "lg", weight: "bold", children: total.amount === "Free" || total.amount === "N/A" ? total.amount : `${total.amount} ETH` }),
12058
- totalUsd && /* @__PURE__ */ jsxs(Text, { size: "xs", color: "grey", children: [
12059
- "\u2248 $",
12060
- totalUsd
12061
- ] })
12071
+ /* @__PURE__ */ jsxs("div", { style: { textAlign: "right" }, children: [
12072
+ /* @__PURE__ */ jsx(Text, { size: "lg", weight: "bold", children: totalLoading ? /* @__PURE__ */ jsx(ShurikenSpinner, { size: 18 }) : isSentinel(total.amount) ? total.amount : `${total.amount} ETH` }),
12073
+ /* @__PURE__ */ jsx(Text, { size: "xs", color: "grey", children: totalUsd ? `\u2248 $${totalUsd}` : NBSP })
12062
12074
  ] })
12063
12075
  ] })
12064
12076
  ] });
@@ -64169,7 +64181,7 @@ const useRegisterENS = ({ isTestnet }) => {
64169
64181
  const totalPrice = price.base + price.premium;
64170
64182
  return {
64171
64183
  wei: totalPrice,
64172
- eth: formatFloat(formatEther(totalPrice, "wei"), 4)
64184
+ eth: parseFloat(formatEther(totalPrice))
64173
64185
  };
64174
64186
  };
64175
64187
  const isEnsAvailable = async (label) => {
@@ -89578,14 +89590,15 @@ const RegistrationSummary = ({
89578
89590
  const { isConnected } = useAccount();
89579
89591
  const { ethUsdRate } = useEthDollarValue();
89580
89592
  const { isEnsAvailable, getRegistrationPrice } = useRegisterENS({ isTestnet });
89581
- const { regPrice, regFees, regTotal } = useMemo(() => {
89593
+ const { regPrice, regFees, regTotal, regTotalWei } = useMemo(() => {
89582
89594
  const priceEth = price?.eth ?? 0;
89583
89595
  const feesEth = transactionFees?.price.eth ?? 0;
89584
89596
  const heuristicPrefix = transactionFees?.isHeuristic ? "~" : "";
89585
- const regPrice2 = priceEth > 0 ? priceEth.toFixed(4) : "0.0000";
89586
- const regFees2 = transactionFees?.failed ? "N/A" : `${heuristicPrefix}${feesEth.toFixed(4)}`;
89587
- const regTotal2 = transactionFees?.failed ? "N/A" : `${heuristicPrefix}${(priceEth + feesEth).toFixed(4)}`;
89588
- return { regPrice: regPrice2, regFees: regFees2, regTotal: regTotal2 };
89597
+ const regPrice2 = priceEth > 0 ? formatEth(priceEth) : "0.0000";
89598
+ const regFees2 = transactionFees?.failed ? "N/A" : `${heuristicPrefix}${formatEth(feesEth)}`;
89599
+ const regTotal2 = transactionFees?.failed ? "N/A" : `${heuristicPrefix}${formatEth(priceEth + feesEth)}`;
89600
+ const regTotalWei2 = (price?.wei ?? 0n) + (transactionFees?.price.wei ?? 0n);
89601
+ return { regPrice: regPrice2, regFees: regFees2, regTotal: regTotal2, regTotalWei: regTotalWei2 };
89589
89602
  }, [price, transactionFees]);
89590
89603
  const checkAvailability = async (labelToCheck) => {
89591
89604
  try {
@@ -89607,6 +89620,14 @@ const RegistrationSummary = ({
89607
89620
  onPriceChange({ isChecking: false, eth: -1, wei: 0n });
89608
89621
  }
89609
89622
  };
89623
+ useEffect(() => {
89624
+ if (label.length >= MIN_ENS_LEN$2) {
89625
+ onNameValidationChange({ isChecking: true, isTaken: false });
89626
+ onPriceChange({ isChecking: true, eth: 0, wei: 0n });
89627
+ checkAvailability(label);
89628
+ checkRegistrationPrice(label, durationSeconds);
89629
+ }
89630
+ }, []);
89610
89631
  const debouncedCheckAvailability = useCallback(
89611
89632
  debounce((labelToCheck) => checkAvailability(labelToCheck), 500),
89612
89633
  []
@@ -89648,7 +89669,7 @@ const RegistrationSummary = ({
89648
89669
  );
89649
89670
  const nextBtnDisabled = label.length < MIN_ENS_LEN$2 || nameValidation.isChecking || nameValidation.isTaken;
89650
89671
  const totalPriceLoading = transactionFees?.isChecking || price.isChecking;
89651
- const transactionFeesLoading = transactionFees?.isChecking || false;
89672
+ const transactionFeesLoading = transactionFees?.isChecking || price.isChecking;
89652
89673
  return /* @__PURE__ */ jsxs("div", { className: "ens-registration-summary", children: [
89653
89674
  !hideBanner && /* @__PURE__ */ jsx("div", { className: "d-flex justify-content-center", children: /* @__PURE__ */ jsx(
89654
89675
  "img",
@@ -89702,7 +89723,8 @@ const RegistrationSummary = ({
89702
89723
  networkFees: transactionFees ? { amount: regFees, isChecking: transactionFeesLoading } : void 0,
89703
89724
  total: {
89704
89725
  amount: regTotal,
89705
- isChecking: totalPriceLoading
89726
+ isChecking: totalPriceLoading,
89727
+ weiAmount: regTotalWei
89706
89728
  },
89707
89729
  expiryPicker: {
89708
89730
  durationSeconds,
@@ -91153,6 +91175,7 @@ const RegistrationProcess = ({
91153
91175
  };
91154
91176
 
91155
91177
  const REG_SECRET_PLACEHOLDER = "0x0000000000000000000000000000000000000000000000000000000000000001";
91178
+ const FEE_ESTIMATE_OWNER_PLACEHOLDER = "0x0000000000000000000000000000000000000001";
91156
91179
  const getLabel = (name) => {
91157
91180
  if (!name) return "";
91158
91181
  if (name.split(".").length !== 1) return name.split(".")[0];
@@ -91227,8 +91250,9 @@ const EnsNameRegistrationForm = (props) => {
91227
91250
  []
91228
91251
  );
91229
91252
  useEffect(() => {
91230
- if (!connectedAddress || !label || label.length < 3 || nameValidation.isChecking || nameValidation.isTaken || price.isChecking || price.eth <= 0) {
91253
+ if (!label || label.length < 3 || nameValidation.isChecking || nameValidation.isTaken || price.isChecking || price.eth <= 0) {
91231
91254
  feeRequestRef.current += 1;
91255
+ setRegTxFees((prev) => prev.isChecking ? { ...prev, isChecking: false } : prev);
91232
91256
  return;
91233
91257
  }
91234
91258
  const requestId = feeRequestRef.current + 1;
@@ -91238,7 +91262,9 @@ const EnsNameRegistrationForm = (props) => {
91238
91262
  );
91239
91263
  debouncedEstimate(requestId, {
91240
91264
  label,
91241
- owner: connectedAddress,
91265
+ // Estimation works without a wallet — gas price comes from the network
91266
+ // and the owner's balance is state-overridden in the estimator.
91267
+ owner: connectedAddress ?? FEE_ESTIMATE_OWNER_PLACEHOLDER,
91242
91268
  durationInSeconds: durationSeconds,
91243
91269
  records: ensRecords
91244
91270
  });
@@ -91297,7 +91323,7 @@ const EnsNameRegistrationForm = (props) => {
91297
91323
  price,
91298
91324
  nameValidation,
91299
91325
  isTestnet: props.isTestnet || false,
91300
- transactionFees: connectedAddress ? regTxFees : void 0,
91326
+ transactionFees: regTxFees,
91301
91327
  title: props.title,
91302
91328
  subtitle: props.subtitle,
91303
91329
  bannerImage: props.bannerImage,
@@ -93806,5 +93832,5 @@ const useTheme = () => {
93806
93832
  return ctx;
93807
93833
  };
93808
93834
 
93809
- export { Accordion, Alert, Button, Card, ChainIcon, ConnectAndSetChain, ContenthashIcon, ContenthashProtocol, ContractErrorLabel, Dropdown, DurationPicker, ENS_RESOLVER_ABI, EnsNameRegistrationForm, EnsRecordsForm, Icon, Input, ListingNetwork, ListingType, MIN_REGISTRATION_SECONDS, MULTICALL, Modal, ONE_DAY, ONE_YEAR, OffchainSubnameForm, PricingDisplay, ProfileHeader, ProgressBar, SET_ADDRESS_FUNC, SET_CONTENTHASH_FUNC, SET_TEXT_FUNC, SelectRecordsForm, ShurikenSpinner, SubnameMintForm, Text, TextRecordCategory, Textarea, ThemeProvider, Tooltip, TransactionPendingScreen, TxProgress, capitalize, convertEVMChainIdToCoinType, convertToMulticallResolverData, convertToResolverData, createEnsReferer, debounce, deepCopy, diffToEnsRecords, ensureFloatInput, equalsIgnoreCase, formatDurationSummary, formatFloat, getAvatarUploadErrorMessage, getBlockExplorer, getBlockExplorerAddressUrl, getBlockExplorerName, getBlockExplorerTransactionUrl, getChainIdForListingNetwork, getEnsAppUrl, getEnsRecordsDiff, getImageUploadErrorMessage, getSupportedAddressByChainId, getSupportedAddressByCoin, getSupportedAddressByName, getSupportedAddressMap, getSupportedChashByProtocol, getSupportedText, isCommitmentToNewErr, isContenthashValid, isUserDeniedError, roundDurationWithDay, secondsFromYears, secondsToDateInput, supportedAddresses, supportedContenthashRecords, supportedTexts, useAvatarClient, useENSResolver, useEthDollarValue, useMintManager, useMintSubname, useOffchainManager, useRegisterENS, useTheme, useWaitTransaction, validateEnsRecords, wait, yearsFromSeconds };
93835
+ export { Accordion, Alert, Button, Card, ChainIcon, ConnectAndSetChain, ContenthashIcon, ContenthashProtocol, ContractErrorLabel, Dropdown, DurationPicker, ENS_RESOLVER_ABI, ETH_SENTINELS, EnsNameRegistrationForm, EnsRecordsForm, Icon, Input, ListingNetwork, ListingType, MIN_REGISTRATION_SECONDS, MULTICALL, Modal, ONE_DAY, ONE_YEAR, OffchainSubnameForm, PricingDisplay, ProfileHeader, ProgressBar, SET_ADDRESS_FUNC, SET_CONTENTHASH_FUNC, SET_TEXT_FUNC, SelectRecordsForm, ShurikenSpinner, SubnameMintForm, Text, TextRecordCategory, Textarea, ThemeProvider, Tooltip, TransactionPendingScreen, TxProgress, capitalize, computeUsd, convertEVMChainIdToCoinType, convertToMulticallResolverData, convertToResolverData, createEnsReferer, debounce, deepCopy, diffToEnsRecords, ensureFloatInput, equalsIgnoreCase, formatDurationSummary, formatEth, formatFloat, getAvatarUploadErrorMessage, getBlockExplorer, getBlockExplorerAddressUrl, getBlockExplorerName, getBlockExplorerTransactionUrl, getChainIdForListingNetwork, getEnsAppUrl, getEnsRecordsDiff, getImageUploadErrorMessage, getSupportedAddressByChainId, getSupportedAddressByCoin, getSupportedAddressByName, getSupportedAddressMap, getSupportedChashByProtocol, getSupportedText, isCommitmentToNewErr, isContenthashValid, isSentinel, isUserDeniedError, roundDurationWithDay, secondsFromYears, secondsToDateInput, supportedAddresses, supportedContenthashRecords, supportedTexts, usdFromWei, useAvatarClient, useENSResolver, useEthDollarValue, useMintManager, useMintSubname, useOffchainManager, useRegisterENS, useTheme, useWaitTransaction, validateEnsRecords, wait, yearsFromSeconds };
93810
93836
  //# sourceMappingURL=index.js.map