@0xsquid/ui 0.6.3 → 0.7.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.
Files changed (35) hide show
  1. package/dist/cjs/index.js +23 -19
  2. package/dist/cjs/types/components/buttons/BoostButton.d.ts +1 -1
  3. package/dist/cjs/types/components/controls/Switch.d.ts +2 -1
  4. package/dist/cjs/types/components/icons/Heart.d.ts +9 -3
  5. package/dist/cjs/types/components/layout/DetailsToolbar.d.ts +6 -2
  6. package/dist/cjs/types/components/layout/ErrorMessage.d.ts +3 -0
  7. package/dist/cjs/types/components/layout/ProductCard.d.ts +1 -5
  8. package/dist/cjs/types/components/layout/SwapConfiguration.d.ts +4 -1
  9. package/dist/cjs/types/components/layout/index.d.ts +1 -0
  10. package/dist/cjs/types/components/lists/ListItem.d.ts +3 -1
  11. package/dist/cjs/types/components/views/AssetsView.d.ts +2 -6
  12. package/dist/cjs/types/stories/controls/Switch.stories.d.ts +2 -0
  13. package/dist/cjs/types/stories/layout/DetailsToolbar.stories.d.ts +1 -0
  14. package/dist/cjs/types/stories/layout/ErrorMessage.stories.d.ts +6 -0
  15. package/dist/cjs/types/stories/layout/SwapConfiguration.stories.d.ts +1 -0
  16. package/dist/cjs/types/stories/lists/ListItem.stories.d.ts +3 -0
  17. package/dist/esm/index.js +23 -20
  18. package/dist/esm/types/components/buttons/BoostButton.d.ts +1 -1
  19. package/dist/esm/types/components/controls/Switch.d.ts +2 -1
  20. package/dist/esm/types/components/icons/Heart.d.ts +9 -3
  21. package/dist/esm/types/components/layout/DetailsToolbar.d.ts +6 -2
  22. package/dist/esm/types/components/layout/ErrorMessage.d.ts +3 -0
  23. package/dist/esm/types/components/layout/ProductCard.d.ts +1 -5
  24. package/dist/esm/types/components/layout/SwapConfiguration.d.ts +4 -1
  25. package/dist/esm/types/components/layout/index.d.ts +1 -0
  26. package/dist/esm/types/components/lists/ListItem.d.ts +3 -1
  27. package/dist/esm/types/components/views/AssetsView.d.ts +2 -6
  28. package/dist/esm/types/stories/controls/Switch.stories.d.ts +2 -0
  29. package/dist/esm/types/stories/layout/DetailsToolbar.stories.d.ts +1 -0
  30. package/dist/esm/types/stories/layout/ErrorMessage.stories.d.ts +6 -0
  31. package/dist/esm/types/stories/layout/SwapConfiguration.stories.d.ts +1 -0
  32. package/dist/esm/types/stories/lists/ListItem.stories.d.ts +3 -0
  33. package/dist/index.css +30 -34
  34. package/dist/index.d.ts +22 -11
  35. package/package.json +1 -1
package/dist/cjs/index.js CHANGED
@@ -2819,14 +2819,16 @@ const switchCircleSizeClassMap = {
2819
2819
  small: 'tw-w-4 tw-h-4',
2820
2820
  large: 'tw-w-6 tw-h-6',
2821
2821
  };
2822
- function Switch({ checked = false, onChange, size }) {
2822
+ function Switch({ checked = false, onChange, size, disabled = false, }) {
2823
2823
  return (
2824
2824
  // Switch container
2825
- jsxRuntime.jsxs("label", { className: clsx('tw-relative tw-inline-flex tw-cursor-pointer tw-items-center tw-justify-end tw-overflow-hidden tw-rounded-squid-m tw-border tw-border-material-light-thin tw-transition-colors',
2825
+ jsxRuntime.jsxs("label", { className: clsx('tw-relative tw-inline-flex tw-items-center tw-justify-end tw-overflow-hidden tw-rounded-squid-m tw-border tw-border-material-light-thin tw-transition-colors',
2826
2826
  // size styles
2827
2827
  switchSizeClassMap[size],
2828
2828
  // checked styles
2829
- checked ? 'tw-bg-status-positive' : 'tw-bg-grey-800'), children: [jsxRuntime.jsx("input", { checked: checked, onChange: (e) => onChange === null || onChange === void 0 ? void 0 : onChange(e.target.checked), type: "checkbox", className: "tw-peer tw-sr-only" }), jsxRuntime.jsx("span", { style: {
2829
+ checked ? 'tw-bg-status-positive' : 'tw-bg-grey-800',
2830
+ // disabled styles
2831
+ disabled ? 'tw-cursor-not-allowed' : 'tw-cursor-pointer'), children: [jsxRuntime.jsx("input", { disabled: disabled, checked: checked, onChange: disabled ? undefined : (e) => onChange === null || onChange === void 0 ? void 0 : onChange(e.target.checked), type: "checkbox", className: "tw-peer tw-sr-only" }), jsxRuntime.jsx("span", { style: {
2830
2832
  filter: 'drop-shadow(0px 5px 20px rgba(0, 0, 0, 0.33)) drop-shadow(0px 2px 5px rgba(0, 0, 0, 0.20))',
2831
2833
  }, className: clsx('tw-absolute tw-rounded-full tw-border tw-border-material-light-thin tw-transition-all',
2832
2834
  // size styles
@@ -2864,10 +2866,8 @@ function Tooltip({ children, tooltipContent, tooltipWidth = 'container', thresho
2864
2866
  }
2865
2867
 
2866
2868
  const animationDuration = '500ms';
2867
- function BoostButton({ boostMode: _boostMode, onToggleBoostMode, canToggleBoostMode = true, boostDisabledMessage = 'Boost disabled', }) {
2869
+ function BoostButton({ boostMode, onToggleBoostMode, canToggleBoostMode = true, boostDisabledMessage = 'Boost disabled', }) {
2868
2870
  const boostIndicatorRef = react.useRef(null);
2869
- // force normal mode if canToggleBoostMode is false
2870
- const boostMode = canToggleBoostMode ? _boostMode : 'normal';
2871
2871
  function handleToggleBoostMode() {
2872
2872
  if (!boostIndicatorRef.current || !canToggleBoostMode)
2873
2873
  return;
@@ -2956,19 +2956,20 @@ function EmojiSadIcon() {
2956
2956
  return (jsxRuntime.jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", children: jsxRuntime.jsx("path", { "fill-rule": "evenodd", "clip-rule": "evenodd", d: "M10 20C15.5228 20 20 15.5228 20 10C20 4.47715 15.5228 0 10 0C4.47715 0 0 4.47715 0 10C0 15.5228 4.47715 20 10 20ZM13.5341 12.4645C11.5815 10.5118 8.41568 10.5118 6.46306 12.4645C6.07254 12.855 6.07254 13.4882 6.46306 13.8787C6.85358 14.2692 7.48675 14.2692 7.87727 13.8787C9.04885 12.7071 10.9483 12.7071 12.1199 13.8787C12.5104 14.2692 13.1436 14.2692 13.5341 13.8787C13.9247 13.4882 13.9247 12.855 13.5341 12.4645ZM8.5 7.5C8.5 8.32843 7.94036 9 7.25 9C6.55964 9 6 8.32843 6 7.5C6 6.67157 6.55964 6 7.25 6C7.94036 6 8.5 6.67157 8.5 7.5ZM12.75 9C13.4404 9 14 8.32843 14 7.5C14 6.67157 13.4404 6 12.75 6C12.0596 6 11.5 6.67157 11.5 7.5C11.5 8.32843 12.0596 9 12.75 9Z", fill: "currentColor" }) }));
2957
2957
  }
2958
2958
 
2959
+ function ErrorMessage({ message }) {
2960
+ return (jsxRuntime.jsxs("div", { className: "tw-flex tw-h-squid-xl tw-flex-1 tw-items-center tw-gap-squid-xxs tw-text-status-negative", children: [jsxRuntime.jsx(EmojiSadIcon, {}), jsxRuntime.jsx(CaptionText, { children: message })] }));
2961
+ }
2962
+
2959
2963
  const detailStateClassMap = {
2960
2964
  loading: 'tw-opacity-33 tw-pointer-events-none',
2961
2965
  empty: 'tw-pointer-events-none tw-hidden',
2962
2966
  error: 'tw-opacity-33 tw-pointer-events-none',
2963
2967
  full: '',
2964
2968
  };
2965
- function DetailsToolbar({ state = 'full', errorMessage, boostMode = 'normal', onToggleBoostMode, onInvertSwapButtonClick, onFeeButtonClick, feeInUsd, estimatedTime, canToggleBoostMode, boostDisabledMessage, }) {
2969
+ function DetailsToolbar({ state = 'full', errorMessage = 'Something went wrong', boostMode = 'normal', onToggleBoostMode, onInvertSwapButtonClick, onFeeButtonClick, feeInUsd, estimatedTime, canToggleBoostMode, boostDisabledMessage, helpButton, }) {
2966
2970
  const detailClassName = cn('tw-w-[190px]', detailStateClassMap[state]);
2967
- return (jsxRuntime.jsx("aside", { className: "tw-h-squid-[50px] tw-flex tw-w-[480px] tw-items-center tw-justify-around tw-bg-grey-900 tw-px-squid-m tw-py-squid-xxs tw-text-grey-500", children: state === 'error' ? (jsxRuntime.jsx(ErrorMessage, { message: errorMessage })) : (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("div", { className: detailClassName, children: jsxRuntime.jsx(FeeButton, { feeInUsd: feeInUsd, onClick: onFeeButtonClick }) }), jsxRuntime.jsx("div", { className: "tw-flex tw-h-squid-xl tw-w-squid-xxl tw-items-center tw-justify-center", children: state === 'loading' ? (jsxRuntime.jsx(Loader, { size: "32" })) : (jsxRuntime.jsx(Button, { variant: "tertiary", size: "md", onClick: onInvertSwapButtonClick, className: "tw-border-transparent tw-bg-transparent hover:tw-bg-material-light-thin", icon: jsxRuntime.jsx(ChevronLargeDownIcon, {}) })) }), jsxRuntime.jsx("div", { className: detailClassName, children: jsxRuntime.jsx(Boost, { estimatedTime: estimatedTime !== null && estimatedTime !== void 0 ? estimatedTime : '0s', boostMode: boostMode, onToggleBoostMode: onToggleBoostMode, canToggleBoostMode: state === 'loading' ? false : canToggleBoostMode, boostDisabledMessage: boostDisabledMessage }) })] })) }));
2971
+ return (jsxRuntime.jsx("aside", { className: cn('tw-h-squid-[50px] tw-flex tw-w-[480px] tw-items-center tw-justify-around tw-bg-grey-900 tw-py-squid-xxs tw-text-grey-500', state === 'error' ? 'tw-px-squid-l' : 'tw-px-squid-m'), children: state === 'error' && errorMessage ? (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(ErrorMessage, { message: errorMessage }), helpButton ? (jsxRuntime.jsx(Button, { onClick: helpButton.onClick, size: "md", variant: "tertiary", label: helpButton.label })) : null] })) : (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("div", { className: detailClassName, children: jsxRuntime.jsx(FeeButton, { feeInUsd: feeInUsd, onClick: onFeeButtonClick }) }), jsxRuntime.jsx("div", { className: "tw-flex tw-h-squid-xl tw-w-squid-xxl tw-items-center tw-justify-center", children: state === 'loading' ? (jsxRuntime.jsx(Loader, { size: "32" })) : (jsxRuntime.jsx(Button, { variant: "tertiary", size: "md", onClick: onInvertSwapButtonClick, className: "tw-border-transparent tw-bg-transparent hover:tw-bg-material-light-thin", icon: jsxRuntime.jsx(ChevronLargeDownIcon, {}) })) }), jsxRuntime.jsx("div", { className: detailClassName, children: jsxRuntime.jsx(Boost, { estimatedTime: estimatedTime !== null && estimatedTime !== void 0 ? estimatedTime : '0s', boostMode: boostMode, onToggleBoostMode: onToggleBoostMode, canToggleBoostMode: state === 'loading' ? false : canToggleBoostMode, boostDisabledMessage: boostDisabledMessage }) })] })) }));
2968
2972
  }
2969
- const ErrorMessage = ({ message }) => {
2970
- return (jsxRuntime.jsxs("div", { className: "tw-flex tw-h-squid-xl tw-flex-1 tw-items-center tw-gap-squid-xxs tw-text-status-negative", children: [jsxRuntime.jsx(EmojiSadIcon, {}), jsxRuntime.jsx(CaptionText, { children: message })] }));
2971
- };
2972
2973
 
2973
2974
  function DropdownMenuItem({ label, imageUrl, icon, labelClassName, }) {
2974
2975
  return (jsxRuntime.jsx("li", { className: "tw-max-h-squid-xl tw-w-full tw-px-squid-xxs", children: jsxRuntime.jsxs("div", { className: "tw-flex tw-h-squid-l tw-cursor-pointer tw-items-center tw-gap-squid-xxs tw-rounded-squid-xs tw-pl-squid-xxs hover:tw-bg-material-light-thin", children: [jsxRuntime.jsx("div", { className: "tw-flex tw-h-squid-m tw-w-squid-m tw-items-center tw-justify-between tw-rounded-squid-xs", children: imageUrl ? (jsxRuntime.jsx("img", { src: imageUrl, className: "tw-h-full tw-w-full tw-rounded-squid-xxs" })) : (icon) }), jsxRuntime.jsx(CaptionText, { className: labelClassName, children: label })] }) }));
@@ -3047,10 +3048,12 @@ const listItemSizeMap = {
3047
3048
  large: 'tw-max-w-list-item-large tw-h-list-item-large tw-px-squid-xs',
3048
3049
  };
3049
3050
  function ListItem(_a) {
3050
- var { itemTitle, mainImageUrl, subtitle, detail, icon, secondaryImageUrl, size = 'large', mainIcon, className, isSelected } = _a, props = __rest(_a, ["itemTitle", "mainImageUrl", "subtitle", "detail", "icon", "secondaryImageUrl", "size", "mainIcon", "className", "isSelected"]);
3051
- return (jsxRuntime.jsx("li", Object.assign({}, props, { className: cn('tw-flex tw-bg-grey-900 tw-text-grey-300', listItemSizeMap[size], className), children: jsxRuntime.jsxs("div", { className: cn('tw-flex tw-w-full tw-cursor-pointer tw-items-center tw-justify-start tw-gap-squid-xs tw-rounded-squid-s tw-px-squid-xs tw-py-squid-xxs hover:tw-bg-material-light-thin', isSelected && 'tw-bg-material-light-thin'), children: [size === 'large' ? (jsxRuntime.jsx("div", { className: "tw-h-10 tw-w-10", children: mainIcon ? (mainIcon) : (jsxRuntime.jsx(BadgeImage, { extraMarginForBadge: false, imageUrl: mainImageUrl, badgeUrl: secondaryImageUrl, size: "md", rounded: false })) })) : (jsxRuntime.jsx("div", { className: "tw-flex tw-min-h-[30px] tw-min-w-[30px] tw-items-center tw-justify-center", children: mainIcon ? (mainIcon) : (jsxRuntime.jsx("img", { src: mainImageUrl, className: "tw-h-[30px] tw-w-[30px] tw-rounded-squid-xs" })) })), jsxRuntime.jsxs("div", { className: cn('tw-flex tw-h-[40px] tw-w-full tw-flex-1 tw-flex-col tw-items-start tw-justify-center tw-gap-squid-xs',
3051
+ var { itemTitle, mainImageUrl, subtitle, detail, icon, secondaryImageUrl, size = 'large', mainIcon, className, isSelected, onDetailClick, showDetailOnHoverOnly } = _a, props = __rest(_a, ["itemTitle", "mainImageUrl", "subtitle", "detail", "icon", "secondaryImageUrl", "size", "mainIcon", "className", "isSelected", "onDetailClick", "showDetailOnHoverOnly"]);
3052
+ return (jsxRuntime.jsx("li", Object.assign({}, props, { className: cn('tw-group/list-item tw-flex tw-bg-grey-900 tw-text-grey-300', listItemSizeMap[size], className), children: jsxRuntime.jsxs("div", { className: cn('tw-flex tw-w-full tw-cursor-pointer tw-items-center tw-justify-start tw-gap-squid-xs tw-rounded-squid-s tw-px-squid-xs tw-py-squid-xxs hover:tw-bg-material-light-thin', isSelected && 'tw-bg-material-light-thin'), children: [size === 'large' ? (jsxRuntime.jsx("div", { className: "tw-h-10 tw-w-10", children: mainIcon ? (mainIcon) : (jsxRuntime.jsx(BadgeImage, { extraMarginForBadge: false, imageUrl: mainImageUrl, badgeUrl: secondaryImageUrl, size: "md", rounded: false })) })) : (jsxRuntime.jsx("div", { className: "tw-flex tw-min-h-[30px] tw-min-w-[30px] tw-items-center tw-justify-center", children: mainIcon ? (mainIcon) : (jsxRuntime.jsx("img", { src: mainImageUrl, className: "tw-h-[30px] tw-w-[30px] tw-rounded-squid-xs" })) })), jsxRuntime.jsxs("div", { className: cn('tw-flex tw-h-[40px] tw-w-full tw-flex-1 tw-flex-col tw-items-start tw-justify-center tw-gap-squid-xs',
3052
3053
  // 'large' variant has extra padding
3053
- size === 'large' && 'tw-px-squid-xxs'), children: [typeof itemTitle === 'string' ? (jsxRuntime.jsx(BodyText, { size: "small", className: "tw-truncate !tw-leading-[18px]", children: itemTitle })) : (itemTitle), size === 'large' && subtitle ? (jsxRuntime.jsx(CaptionText, { className: "tw-h-squid-xs !tw-leading-[10px] tw-text-grey-500", children: subtitle })) : null] }), jsxRuntime.jsxs("span", { className: "tw-flex tw-max-h-4 tw-items-center", children: [size === 'large' ? (jsxRuntime.jsx(CaptionText, { className: "min-tw-w-4 min-tw-h-4 tw-px-squid-xxs tw-leading-[10px]", children: detail })) : null, jsxRuntime.jsx("span", { className: "min-tw-w-4 min-tw-h-4", children: icon ? icon : null })] })] }) })));
3054
+ size === 'large' && 'tw-px-squid-xxs'), children: [typeof itemTitle === 'string' ? (jsxRuntime.jsx(BodyText, { size: "small", className: "tw-truncate !tw-leading-[18px]", children: itemTitle })) : (itemTitle), size === 'large' && subtitle ? (jsxRuntime.jsx(CaptionText, { className: "tw-h-squid-xs !tw-leading-[10px] tw-text-grey-500", children: subtitle })) : null] }), jsxRuntime.jsxs("button", { onClick: onDetailClick, className: cn('tw-cursor-pointer tw-items-center tw-justify-center tw-rounded-squid-xs hover:tw-bg-material-light-thin', size === 'large' ? 'tw-h-squid-xl' : 'tw-h-squid-l', showDetailOnHoverOnly
3055
+ ? 'tw-hidden group-hover/list-item:tw-flex'
3056
+ : 'tw-flex'), children: [size === 'large' && detail ? (jsxRuntime.jsx(CaptionText, { className: "min-tw-w-4 min-tw-h-4 tw-px-squid-xxs tw-leading-[10px]", children: detail })) : null, icon ? (jsxRuntime.jsx("span", { className: "tw-flex tw-items-center tw-justify-center tw-px-[3px] tw-py-2", children: icon })) : null] })] }) })));
3054
3057
  }
3055
3058
 
3056
3059
  function MenuItem({ label, imageUrl, icon }) {
@@ -3070,10 +3073,10 @@ function SettingsItem({ icon, label, controls, transparentControls = false, show
3070
3073
  }
3071
3074
 
3072
3075
  function SwapDetailListItem({ label, detail, icon, isLoading = false, }) {
3073
- return (jsxRuntime.jsx("li", { className: "tw-swap-detail-list-item-gradient tw-h-squid-l tw-w-full tw-bg-grey-800 tw-px-squid-xs tw-text-grey-300", children: jsxRuntime.jsxs("div", { className: "tw-flex tw-h-squid-l tw-items-center tw-justify-between tw-gap-squid-xs tw-rounded-squid-xs tw-px-squid-xs", children: [jsxRuntime.jsx("div", { className: "tw-h-6 tw-w-6 tw-text-grey-500", children: icon }), jsxRuntime.jsx(CaptionText, { className: "tw-flex-1 tw-text-grey-500", children: label }), isLoading ? (jsxRuntime.jsx(LoadingSkeleton, {})) : typeof detail === 'string' ? (jsxRuntime.jsx(CaptionText, { children: detail })) : (detail)] }) }));
3076
+ return (jsxRuntime.jsx("li", { className: "tw-swap-detail-list-item-gradient tw-h-squid-l tw-w-full tw-bg-grey-800 tw-px-squid-xs tw-text-grey-300", children: jsxRuntime.jsxs("div", { className: "tw-flex tw-h-squid-l tw-items-center tw-justify-between tw-gap-squid-xs tw-rounded-squid-xs tw-px-squid-xs", children: [jsxRuntime.jsx("div", { className: "tw-h-6 tw-w-6 tw-text-grey-500", children: icon }), jsxRuntime.jsx(CaptionText, { className: "tw-flex-1 tw-text-grey-500", children: label }), isLoading ? (jsxRuntime.jsx(LoadingSkeleton, { className: "tw-text-grey-500" })) : typeof detail === 'string' ? (jsxRuntime.jsx(CaptionText, { children: detail })) : (detail)] }) }));
3074
3077
  }
3075
- function LoadingSkeleton() {
3076
- return (jsxRuntime.jsx("div", { className: "tw-h-squid-xs tw-w-16 tw-animate-pulse tw-rounded-full tw-bg-grey-700" }));
3078
+ function LoadingSkeleton({ className }) {
3079
+ return (jsxRuntime.jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", width: "100", height: "20", viewBox: "0 0 100 20", fill: "none", className: className, children: [jsxRuntime.jsxs("g", { "clip-path": "url(#clip0_1083_18992)", children: [jsxRuntime.jsx("mask", { id: "mask0_1083_18992", style: { maskType: 'alpha' }, maskUnits: "userSpaceOnUse", x: "0", y: "0", width: "100", height: "20", children: jsxRuntime.jsx("rect", { width: "100", height: "20", fill: "url(#paint0_linear_1083_18992)" }) }), jsxRuntime.jsx("g", { mask: "url(#mask0_1083_18992)", children: jsxRuntime.jsx("rect", { width: "100", height: "20", fill: "currentColor" }) })] }), jsxRuntime.jsxs("defs", { children: [jsxRuntime.jsxs("linearGradient", { id: "paint0_linear_1083_18992", x1: "0", y1: "10", x2: "100", y2: "10", gradientUnits: "userSpaceOnUse", className: "tw-animate-loading-gradient", children: [jsxRuntime.jsx("stop", { "stop-color": "#D9D9D9", "stop-opacity": "0.33" }), jsxRuntime.jsx("stop", { offset: "0.395881", "stop-color": "#737373", "stop-opacity": "0.33" }), jsxRuntime.jsx("stop", { offset: "0.597867", "stop-color": "#737373", "stop-opacity": "0.66" }), jsxRuntime.jsx("stop", { offset: "0.697004", "stop-color": "#737373", "stop-opacity": "0.33" })] }), jsxRuntime.jsx("clipPath", { id: "clip0_1083_18992", children: jsxRuntime.jsx("path", { d: "M0 10C0 4.47715 4.47715 0 10 0H90C95.5228 0 100 4.47715 100 10C100 15.5228 95.5229 20 90 20H10C4.47716 20 0 15.5228 0 10Z", fill: "white" }) })] })] }));
3077
3080
  }
3078
3081
 
3079
3082
  function SwapStepSeparator() {
@@ -3135,7 +3138,7 @@ function SwapInputsIcon() {
3135
3138
  return (jsxRuntime.jsxs("svg", { width: "20", height: "21", viewBox: "0 0 20 21", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [jsxRuntime.jsx("g", { "clip-path": "url(#clip0_40_7936)", children: jsxRuntime.jsx("path", { "fill-rule": "evenodd", "clip-rule": "evenodd", d: "M20 10.5C20 16.0228 15.5228 20.5 10 20.5C4.47715 20.5 0 16.0228 0 10.5C0 4.97715 4.47715 0.5 10 0.5C15.5228 0.5 20 4.97715 20 10.5ZM8.38268 4.57612C8.75636 4.7309 9 5.09554 9 5.5V15.5C9 16.0523 8.55228 16.5 8 16.5C7.44772 16.5 7 16.0523 7 15.5V7.91421L5.70711 9.20711C5.31658 9.59763 4.68342 9.59763 4.29289 9.20711C3.90237 8.81658 3.90237 8.18342 4.29289 7.79289L7.29289 4.79289C7.57889 4.5069 8.00901 4.42134 8.38268 4.57612ZM11 15.5C11 15.9045 11.2436 16.2691 11.6173 16.4239C11.991 16.5787 12.4211 16.4931 12.7071 16.2071L15.7071 13.2071C16.0976 12.8166 16.0976 12.1834 15.7071 11.7929C15.3166 11.4024 14.6834 11.4024 14.2929 11.7929L13 13.0858V5.5C13 4.94771 12.5523 4.5 12 4.5C11.4477 4.5 11 4.94771 11 5.5V15.5Z", fill: "currentColor" }) }), jsxRuntime.jsx("defs", { children: jsxRuntime.jsx("clipPath", { id: "clip0_40_7936", children: jsxRuntime.jsx("rect", { width: "20", height: "20", fill: "white", transform: "translate(0 0.5)" }) }) })] }));
3136
3139
  }
3137
3140
 
3138
- function SwapConfiguration({ priceImpactPercentage, amount, swapAmountUsd = '0', balance = '0', isFetching = false, chain, token, direction, onAmountChange, onWalletButtonClick, onAssetsButtonClick, address, }) {
3141
+ function SwapConfiguration({ priceImpactPercentage, amount, swapAmountUsd = '0', balance = '0', isFetching = false, chain, token, direction, onAmountChange, onWalletButtonClick, onAssetsButtonClick, address, error, }) {
3139
3142
  var _a;
3140
3143
  const priceImpactClass = ((_a = Number(priceImpactPercentage)) !== null && _a !== void 0 ? _a : 0) > 5
3141
3144
  ? 'tw-text-status-negative'
@@ -3143,7 +3146,7 @@ function SwapConfiguration({ priceImpactPercentage, amount, swapAmountUsd = '0',
3143
3146
  const isInteractive = direction === 'from';
3144
3147
  // improve accessibility
3145
3148
  const BalanceButtonTag = isInteractive ? 'button' : 'div';
3146
- return (jsxRuntime.jsxs("section", { className: "tw-h-[205px] tw-max-h-[205px] tw-bg-grey-900 tw-pb-squid-m", children: [jsxRuntime.jsx("header", { className: "tw-flex tw-items-center tw-gap-1 tw-px-squid-l tw-py-squid-xs tw-leading-5 tw-text-grey-300", children: jsxRuntime.jsxs("button", { onClick: onWalletButtonClick, className: "-tw-ml-squid-xs tw-flex tw-h-squid-l tw-items-center tw-gap-squid-xxs tw-rounded-squid-s tw-px-squid-xs tw-text-grey-600 hover:tw-bg-material-light-thin", children: [jsxRuntime.jsx(BodyText, { className: "tw-text-grey-500", size: "small", children: direction === 'from' ? 'Pay' : 'Receive' }), jsxRuntime.jsx(BodyText, { size: "small", children: ":" }), jsxRuntime.jsxs("div", { className: "tw-flex tw-items-center tw-gap-1", children: [jsxRuntime.jsx(BodyText, { size: "small", className: address ? 'tw-text-grey-300' : 'tw-text-royal-400', children: address ? address : 'Connect wallet' }), jsxRuntime.jsx(ChevronArrowIcon, { className: address ? 'tw-text-grey-600' : 'tw-text-royal-400' })] })] }) }), jsxRuntime.jsx("div", { className: "tw-px-squid-l", children: jsxRuntime.jsx(AssetsButton, { onClick: onAssetsButtonClick, chainImageUrl: chain === null || chain === void 0 ? void 0 : chain.iconUrl, tokenImageUrl: token === null || token === void 0 ? void 0 : token.iconUrl, tokenSymbol: token === null || token === void 0 ? void 0 : token.symbol, chainBgColor: chain === null || chain === void 0 ? void 0 : chain.bgColor, tokenBgColor: token === null || token === void 0 ? void 0 : token.bgColor, tokenTextColor: token === null || token === void 0 ? void 0 : token.textColor }) }), direction === 'from' ? (jsxRuntime.jsx("div", { className: "tw-px-squid-m tw-pb-[15px] tw-pt-[5px]", children: jsxRuntime.jsx("input", { className: "tw-h-[55px] tw-w-full tw-rounded-squid-s tw-bg-transparent tw-px-squid-xs tw-py-squid-s tw-text-heading-small tw-font-heading-regular tw-text-grey-300 placeholder:tw-text-grey-600 hover:tw-bg-material-light-thin focus:tw-bg-material-light-thin focus:tw-text-royal-400 focus:tw-outline-none", placeholder: "0", value: amount, onChange: onAmountChange }) })) : (jsxRuntime.jsx("div", { className: "tw-w-full tw-px-squid-m tw-pb-[15px] tw-pt-[5px]", children: jsxRuntime.jsx("div", { className: "tw-flex tw-h-[55px] tw-w-full tw-items-center tw-rounded-squid-s tw-bg-transparent tw-px-squid-xs tw-py-squid-s tw-text-heading-small tw-font-heading-regular tw-text-grey-300", children: jsxRuntime.jsx("span", { children: amount }) }) })), !(token === null || token === void 0 ? void 0 : token.iconUrl) || isFetching ? null : (jsxRuntime.jsxs("footer", { className: "tw-flex tw-h-squid-m tw-max-h-squid-m tw-items-center tw-justify-between tw-gap-2 tw-px-squid-m tw-text-grey-500", children: [jsxRuntime.jsxs("div", { className: cn('tw-flex tw-h-squid-l tw-items-center tw-gap-1.5 tw-rounded-squid-s tw-px-squid-xs', isInteractive && 'hover:tw-bg-material-light-thin'), children: [jsxRuntime.jsx(SwapInputsIcon, {}), jsxRuntime.jsx(UsdAmount, { usdAmount: swapAmountUsd }), priceImpactPercentage && direction === 'to' ? (jsxRuntime.jsxs("span", { className: clsx('tw-flex tw-items-center', priceImpactClass), children: [jsxRuntime.jsx(ArrowTriangle, {}), jsxRuntime.jsx(CaptionText, { bold: true, children: priceImpactPercentage.toString().concat('%') })] })) : null] }), jsxRuntime.jsxs(BalanceButtonTag, { className: cn('tw-flex tw-h-squid-l tw-items-center tw-gap-1.5 tw-rounded-squid-s tw-px-squid-xs', isInteractive && 'hover:tw-bg-material-light-thin', direction === 'to' && 'tw-pointer-events-none'), children: [jsxRuntime.jsx(CaptionText, { className: "tw-opacity-66", children: "Balance" }), jsxRuntime.jsx(CaptionText, { children: balance }), jsxRuntime.jsx(MaxIcon, {})] })] }))] }));
3149
+ return (jsxRuntime.jsxs("section", { className: "tw-h-[205px] tw-max-h-[205px] tw-bg-grey-900 tw-pb-squid-m", children: [jsxRuntime.jsx("header", { className: "tw-flex tw-items-center tw-gap-1 tw-px-squid-l tw-py-squid-xs tw-leading-5 tw-text-grey-300", children: jsxRuntime.jsxs("button", { onClick: onWalletButtonClick, className: "-tw-ml-squid-xs tw-flex tw-h-squid-l tw-items-center tw-gap-squid-xxs tw-rounded-squid-s tw-px-squid-xs tw-text-grey-600 hover:tw-bg-material-light-thin", children: [jsxRuntime.jsx(BodyText, { className: "tw-text-grey-500", size: "small", children: direction === 'from' ? 'Pay' : 'Receive' }), jsxRuntime.jsx(BodyText, { size: "small", children: ":" }), jsxRuntime.jsxs("div", { className: "tw-flex tw-items-center tw-gap-1", children: [jsxRuntime.jsx(BodyText, { size: "small", className: address ? 'tw-text-grey-300' : 'tw-text-royal-400', children: address ? address : 'Connect wallet' }), jsxRuntime.jsx(ChevronArrowIcon, { className: address ? 'tw-text-grey-600' : 'tw-text-royal-400' })] })] }) }), jsxRuntime.jsx("div", { className: "tw-px-squid-l", children: jsxRuntime.jsx(AssetsButton, { onClick: onAssetsButtonClick, chainImageUrl: chain === null || chain === void 0 ? void 0 : chain.iconUrl, tokenImageUrl: token === null || token === void 0 ? void 0 : token.iconUrl, tokenSymbol: token === null || token === void 0 ? void 0 : token.symbol, chainBgColor: chain === null || chain === void 0 ? void 0 : chain.bgColor, tokenBgColor: token === null || token === void 0 ? void 0 : token.bgColor, tokenTextColor: token === null || token === void 0 ? void 0 : token.textColor }) }), direction === 'from' ? (jsxRuntime.jsx("div", { className: "tw-px-squid-m tw-pb-[15px] tw-pt-[5px]", children: jsxRuntime.jsx("input", { className: "tw-h-[55px] tw-w-full tw-rounded-squid-s tw-bg-transparent tw-px-squid-xs tw-py-squid-s tw-text-heading-small tw-font-heading-regular tw-text-grey-300 placeholder:tw-text-grey-600 hover:tw-bg-material-light-thin focus:tw-bg-material-light-thin focus:tw-text-royal-400 focus:tw-outline-none", placeholder: "0", value: amount, onChange: onAmountChange }) })) : (jsxRuntime.jsx("div", { className: "tw-w-full tw-px-squid-m tw-pb-[15px] tw-pt-[5px]", children: jsxRuntime.jsx("div", { className: "tw-flex tw-h-[55px] tw-w-full tw-items-center tw-rounded-squid-s tw-bg-transparent tw-px-squid-xs tw-py-squid-s tw-text-heading-small tw-font-heading-regular tw-text-grey-300", children: jsxRuntime.jsx("span", { children: amount }) }) })), !(token === null || token === void 0 ? void 0 : token.iconUrl) || isFetching ? null : (jsxRuntime.jsxs("footer", { className: "tw-flex tw-h-squid-m tw-max-h-squid-m tw-items-center tw-justify-between tw-gap-2 tw-px-squid-m tw-text-grey-500", children: [error ? (jsxRuntime.jsx("div", { className: "tw-px-squid-xs", children: jsxRuntime.jsx(ErrorMessage, { message: error.message }) })) : (jsxRuntime.jsxs("div", { className: cn('tw-flex tw-h-squid-l tw-items-center tw-gap-1.5 tw-rounded-squid-s tw-px-squid-xs', isInteractive && 'hover:tw-bg-material-light-thin'), children: [jsxRuntime.jsx(SwapInputsIcon, {}), jsxRuntime.jsx(UsdAmount, { usdAmount: swapAmountUsd }), priceImpactPercentage && direction === 'to' ? (jsxRuntime.jsxs("span", { className: clsx('tw-flex tw-items-center', priceImpactClass), children: [jsxRuntime.jsx(ArrowTriangle, {}), jsxRuntime.jsx(CaptionText, { bold: true, children: priceImpactPercentage.toString().concat('%') })] })) : null] })), jsxRuntime.jsxs(BalanceButtonTag, { className: cn('tw-flex tw-h-squid-l tw-items-center tw-gap-1.5 tw-rounded-squid-s tw-px-squid-xs', isInteractive && 'hover:tw-bg-material-light-thin', direction === 'to' && 'tw-pointer-events-none'), children: [jsxRuntime.jsx(CaptionText, { className: "tw-opacity-66", children: "Balance" }), jsxRuntime.jsx(CaptionText, { children: balance }), jsxRuntime.jsx(MaxIcon, {})] })] }))] }));
3147
3150
  }
3148
3151
 
3149
3152
  function SwapProgressViewHeader({ title, description, }) {
@@ -3260,6 +3263,7 @@ exports.Chip = Chip;
3260
3263
  exports.DetailsToolbar = DetailsToolbar;
3261
3264
  exports.DropdownMenu = DropdownMenu;
3262
3265
  exports.DropdownMenuItem = DropdownMenuItem;
3266
+ exports.ErrorMessage = ErrorMessage;
3263
3267
  exports.FeeButton = FeeButton;
3264
3268
  exports.HeadingText = HeadingText;
3265
3269
  exports.HistoryItem = HistoryItem;
@@ -7,5 +7,5 @@ interface BoostButtonProps {
7
7
  }) => void;
8
8
  boostDisabledMessage?: string;
9
9
  }
10
- export declare function BoostButton({ boostMode: _boostMode, onToggleBoostMode, canToggleBoostMode, boostDisabledMessage, }: BoostButtonProps): import("react/jsx-runtime").JSX.Element;
10
+ export declare function BoostButton({ boostMode, onToggleBoostMode, canToggleBoostMode, boostDisabledMessage, }: BoostButtonProps): import("react/jsx-runtime").JSX.Element;
11
11
  export {};
@@ -3,6 +3,7 @@ interface SwitchProps {
3
3
  checked?: boolean;
4
4
  onChange?: (checked: boolean) => void;
5
5
  size: SwitchSize;
6
+ disabled?: boolean;
6
7
  }
7
- export declare function Switch({ checked, onChange, size }: SwitchProps): import("react/jsx-runtime").JSX.Element;
8
+ export declare function Switch({ checked, onChange, size, disabled, }: SwitchProps): import("react/jsx-runtime").JSX.Element;
8
9
  export {};
@@ -1,4 +1,10 @@
1
- export declare function EmptyHeartIcon(): import("react/jsx-runtime").JSX.Element;
2
- export declare function FilledHeartIcon(): import("react/jsx-runtime").JSX.Element;
3
- export declare function BrokenHeartIcon(): import("react/jsx-runtime").JSX.Element;
1
+ export declare function EmptyHeartIcon({ className }: {
2
+ className?: string;
3
+ }): import("react/jsx-runtime").JSX.Element;
4
+ export declare function FilledHeartIcon({ className }: {
5
+ className?: string;
6
+ }): import("react/jsx-runtime").JSX.Element;
7
+ export declare function BrokenHeartIcon({ className }: {
8
+ className?: string;
9
+ }): import("react/jsx-runtime").JSX.Element;
4
10
  export declare function HeartSmallIcon(): import("react/jsx-runtime").JSX.Element;
@@ -1,7 +1,7 @@
1
1
  import { BoostMode, DetailsToolbarState } from '../../types/components';
2
2
  interface DetailsToolbarProps {
3
3
  state?: DetailsToolbarState;
4
- errorMessage: string;
4
+ errorMessage?: string;
5
5
  boostMode?: BoostMode;
6
6
  onToggleBoostMode?: ({ boostMode }: {
7
7
  boostMode: BoostMode;
@@ -12,6 +12,10 @@ interface DetailsToolbarProps {
12
12
  estimatedTime?: string;
13
13
  canToggleBoostMode?: boolean;
14
14
  boostDisabledMessage?: string;
15
+ helpButton?: {
16
+ label: string;
17
+ onClick: () => void;
18
+ };
15
19
  }
16
- export declare function DetailsToolbar({ state, errorMessage, boostMode, onToggleBoostMode, onInvertSwapButtonClick, onFeeButtonClick, feeInUsd, estimatedTime, canToggleBoostMode, boostDisabledMessage, }: DetailsToolbarProps): import("react/jsx-runtime").JSX.Element;
20
+ export declare function DetailsToolbar({ state, errorMessage, boostMode, onToggleBoostMode, onInvertSwapButtonClick, onFeeButtonClick, feeInUsd, estimatedTime, canToggleBoostMode, boostDisabledMessage, helpButton, }: DetailsToolbarProps): import("react/jsx-runtime").JSX.Element;
17
21
  export {};
@@ -0,0 +1,3 @@
1
+ export declare function ErrorMessage({ message }: {
2
+ message: string;
3
+ }): import("react/jsx-runtime").JSX.Element;
@@ -1,6 +1,2 @@
1
1
  /// <reference types="react" />
2
- interface ProductCardProps {
3
- children?: React.ReactNode;
4
- }
5
- export declare function ProductCard({ children }: ProductCardProps): import("react/jsx-runtime").JSX.Element;
6
- export {};
2
+ export declare function ProductCard({ children }: React.PropsWithChildren): import("react/jsx-runtime").JSX.Element;
@@ -21,6 +21,9 @@ interface SwapConfigurationProps {
21
21
  onAmountChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;
22
22
  onWalletButtonClick?: () => void;
23
23
  onAssetsButtonClick?: () => void;
24
+ error?: {
25
+ message: string;
26
+ };
24
27
  }
25
- export declare function SwapConfiguration({ priceImpactPercentage, amount, swapAmountUsd, balance, isFetching, chain, token, direction, onAmountChange, onWalletButtonClick, onAssetsButtonClick, address, }: SwapConfigurationProps): import("react/jsx-runtime").JSX.Element;
28
+ export declare function SwapConfiguration({ priceImpactPercentage, amount, swapAmountUsd, balance, isFetching, chain, token, direction, onAmountChange, onWalletButtonClick, onAssetsButtonClick, address, error, }: SwapConfigurationProps): import("react/jsx-runtime").JSX.Element;
26
29
  export {};
@@ -1,6 +1,7 @@
1
1
  export * from './Boost';
2
2
  export * from './DetailsToolbar';
3
3
  export * from './DropdownMenu';
4
+ export * from './ErrorMessage';
4
5
  export * from './Menu';
5
6
  export * from './Modal';
6
7
  export * from './NavigationBar';
@@ -10,7 +10,9 @@ interface ListItemProps extends React.HTMLAttributes<HTMLLIElement> {
10
10
  mainIcon?: React.ReactNode;
11
11
  isSelected?: boolean;
12
12
  className?: string;
13
+ onDetailClick?: () => void;
14
+ showDetailOnHoverOnly?: boolean;
13
15
  }
14
16
  type ListItemSize = 'small' | 'large';
15
- export declare function ListItem({ itemTitle, mainImageUrl, subtitle, detail, icon, secondaryImageUrl, size, mainIcon, className, isSelected, ...props }: ListItemProps): import("react/jsx-runtime").JSX.Element;
17
+ export declare function ListItem({ itemTitle, mainImageUrl, subtitle, detail, icon, secondaryImageUrl, size, mainIcon, className, isSelected, onDetailClick, showDetailOnHoverOnly, ...props }: ListItemProps): import("react/jsx-runtime").JSX.Element;
16
18
  export {};
@@ -1,4 +1,4 @@
1
- import { ReactNode } from 'react';
1
+ import React from 'react';
2
2
  interface AssetsViewProps {
3
3
  chains: {
4
4
  name: string;
@@ -25,9 +25,5 @@ interface AssetsViewProps {
25
25
  }[];
26
26
  }
27
27
  export declare function AssetsView({ chains, favoriteTokens, popularTokens, userTokens, }: AssetsViewProps): import("react/jsx-runtime").JSX.Element;
28
- export declare const List: ({ children }: {
29
- children: ReactNode;
30
- }) => import("react/jsx-runtime").JSX.Element;
31
- export declare const AddFavoriteToken: () => import("react/jsx-runtime").JSX.Element;
32
- export declare const RemoveFavoriteToken: () => import("react/jsx-runtime").JSX.Element;
28
+ export declare const List: ({ children }: React.PropsWithChildren) => import("react/jsx-runtime").JSX.Element;
33
29
  export {};
@@ -5,5 +5,7 @@ export default meta;
5
5
  type Story = StoryObj<typeof meta>;
6
6
  export declare const LargeChecked: Story;
7
7
  export declare const LargeUnchecked: Story;
8
+ export declare const LargeDisabled: Story;
8
9
  export declare const SmallChecked: Story;
9
10
  export declare const SmallUnchecked: Story;
11
+ export declare const SmallDisabled: Story;
@@ -7,4 +7,5 @@ export declare const Default: Story;
7
7
  export declare const Loading: Story;
8
8
  export declare const Empty: Story;
9
9
  export declare const Error: Story;
10
+ export declare const ErrorHelpButton: Story;
10
11
  export declare const BoostDisabled: Story;
@@ -0,0 +1,6 @@
1
+ import { Meta, StoryObj } from '@storybook/react';
2
+ import { ErrorMessage } from '../../components/layout/ErrorMessage';
3
+ declare const meta: Meta<typeof ErrorMessage>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof meta>;
6
+ export declare const Default: Story;
@@ -16,3 +16,4 @@ export declare const AllProps: Story;
16
16
  export declare const ToDirection: Story;
17
17
  export declare const FromAddressEmpty: Story;
18
18
  export declare const ToAddressEmpty: Story;
19
+ export declare const Error: Story;
@@ -7,10 +7,13 @@ export declare const Large: Story;
7
7
  export declare const LargeWithSubtitle: Story;
8
8
  export declare const LargeWithDetail: Story;
9
9
  export declare const LargeWithIcon: Story;
10
+ export declare const LargeWithDetailAndIcon: Story;
11
+ export declare const LargeShowDetailOnHoverOnly: Story;
10
12
  export declare const LargeWithSecondaryImage: Story;
11
13
  export declare const LargeSelected: Story;
12
14
  export declare const LargeWithCustomIconAsImage: Story;
13
15
  export declare const Small: Story;
14
16
  export declare const SmallWithIcon: Story;
17
+ export declare const SmallShowDetailOnHoverOnly: Story;
15
18
  export declare const SmallSelected: Story;
16
19
  export declare const SmallWithCustomIconAsImage: Story;
package/dist/esm/index.js CHANGED
@@ -2817,14 +2817,16 @@ const switchCircleSizeClassMap = {
2817
2817
  small: 'tw-w-4 tw-h-4',
2818
2818
  large: 'tw-w-6 tw-h-6',
2819
2819
  };
2820
- function Switch({ checked = false, onChange, size }) {
2820
+ function Switch({ checked = false, onChange, size, disabled = false, }) {
2821
2821
  return (
2822
2822
  // Switch container
2823
- jsxs("label", { className: clsx('tw-relative tw-inline-flex tw-cursor-pointer tw-items-center tw-justify-end tw-overflow-hidden tw-rounded-squid-m tw-border tw-border-material-light-thin tw-transition-colors',
2823
+ jsxs("label", { className: clsx('tw-relative tw-inline-flex tw-items-center tw-justify-end tw-overflow-hidden tw-rounded-squid-m tw-border tw-border-material-light-thin tw-transition-colors',
2824
2824
  // size styles
2825
2825
  switchSizeClassMap[size],
2826
2826
  // checked styles
2827
- checked ? 'tw-bg-status-positive' : 'tw-bg-grey-800'), children: [jsx("input", { checked: checked, onChange: (e) => onChange === null || onChange === void 0 ? void 0 : onChange(e.target.checked), type: "checkbox", className: "tw-peer tw-sr-only" }), jsx("span", { style: {
2827
+ checked ? 'tw-bg-status-positive' : 'tw-bg-grey-800',
2828
+ // disabled styles
2829
+ disabled ? 'tw-cursor-not-allowed' : 'tw-cursor-pointer'), children: [jsx("input", { disabled: disabled, checked: checked, onChange: disabled ? undefined : (e) => onChange === null || onChange === void 0 ? void 0 : onChange(e.target.checked), type: "checkbox", className: "tw-peer tw-sr-only" }), jsx("span", { style: {
2828
2830
  filter: 'drop-shadow(0px 5px 20px rgba(0, 0, 0, 0.33)) drop-shadow(0px 2px 5px rgba(0, 0, 0, 0.20))',
2829
2831
  }, className: clsx('tw-absolute tw-rounded-full tw-border tw-border-material-light-thin tw-transition-all',
2830
2832
  // size styles
@@ -2862,10 +2864,8 @@ function Tooltip({ children, tooltipContent, tooltipWidth = 'container', thresho
2862
2864
  }
2863
2865
 
2864
2866
  const animationDuration = '500ms';
2865
- function BoostButton({ boostMode: _boostMode, onToggleBoostMode, canToggleBoostMode = true, boostDisabledMessage = 'Boost disabled', }) {
2867
+ function BoostButton({ boostMode, onToggleBoostMode, canToggleBoostMode = true, boostDisabledMessage = 'Boost disabled', }) {
2866
2868
  const boostIndicatorRef = useRef(null);
2867
- // force normal mode if canToggleBoostMode is false
2868
- const boostMode = canToggleBoostMode ? _boostMode : 'normal';
2869
2869
  function handleToggleBoostMode() {
2870
2870
  if (!boostIndicatorRef.current || !canToggleBoostMode)
2871
2871
  return;
@@ -2954,19 +2954,20 @@ function EmojiSadIcon() {
2954
2954
  return (jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", children: jsx("path", { "fill-rule": "evenodd", "clip-rule": "evenodd", d: "M10 20C15.5228 20 20 15.5228 20 10C20 4.47715 15.5228 0 10 0C4.47715 0 0 4.47715 0 10C0 15.5228 4.47715 20 10 20ZM13.5341 12.4645C11.5815 10.5118 8.41568 10.5118 6.46306 12.4645C6.07254 12.855 6.07254 13.4882 6.46306 13.8787C6.85358 14.2692 7.48675 14.2692 7.87727 13.8787C9.04885 12.7071 10.9483 12.7071 12.1199 13.8787C12.5104 14.2692 13.1436 14.2692 13.5341 13.8787C13.9247 13.4882 13.9247 12.855 13.5341 12.4645ZM8.5 7.5C8.5 8.32843 7.94036 9 7.25 9C6.55964 9 6 8.32843 6 7.5C6 6.67157 6.55964 6 7.25 6C7.94036 6 8.5 6.67157 8.5 7.5ZM12.75 9C13.4404 9 14 8.32843 14 7.5C14 6.67157 13.4404 6 12.75 6C12.0596 6 11.5 6.67157 11.5 7.5C11.5 8.32843 12.0596 9 12.75 9Z", fill: "currentColor" }) }));
2955
2955
  }
2956
2956
 
2957
+ function ErrorMessage({ message }) {
2958
+ return (jsxs("div", { className: "tw-flex tw-h-squid-xl tw-flex-1 tw-items-center tw-gap-squid-xxs tw-text-status-negative", children: [jsx(EmojiSadIcon, {}), jsx(CaptionText, { children: message })] }));
2959
+ }
2960
+
2957
2961
  const detailStateClassMap = {
2958
2962
  loading: 'tw-opacity-33 tw-pointer-events-none',
2959
2963
  empty: 'tw-pointer-events-none tw-hidden',
2960
2964
  error: 'tw-opacity-33 tw-pointer-events-none',
2961
2965
  full: '',
2962
2966
  };
2963
- function DetailsToolbar({ state = 'full', errorMessage, boostMode = 'normal', onToggleBoostMode, onInvertSwapButtonClick, onFeeButtonClick, feeInUsd, estimatedTime, canToggleBoostMode, boostDisabledMessage, }) {
2967
+ function DetailsToolbar({ state = 'full', errorMessage = 'Something went wrong', boostMode = 'normal', onToggleBoostMode, onInvertSwapButtonClick, onFeeButtonClick, feeInUsd, estimatedTime, canToggleBoostMode, boostDisabledMessage, helpButton, }) {
2964
2968
  const detailClassName = cn('tw-w-[190px]', detailStateClassMap[state]);
2965
- return (jsx("aside", { className: "tw-h-squid-[50px] tw-flex tw-w-[480px] tw-items-center tw-justify-around tw-bg-grey-900 tw-px-squid-m tw-py-squid-xxs tw-text-grey-500", children: state === 'error' ? (jsx(ErrorMessage, { message: errorMessage })) : (jsxs(Fragment, { children: [jsx("div", { className: detailClassName, children: jsx(FeeButton, { feeInUsd: feeInUsd, onClick: onFeeButtonClick }) }), jsx("div", { className: "tw-flex tw-h-squid-xl tw-w-squid-xxl tw-items-center tw-justify-center", children: state === 'loading' ? (jsx(Loader, { size: "32" })) : (jsx(Button, { variant: "tertiary", size: "md", onClick: onInvertSwapButtonClick, className: "tw-border-transparent tw-bg-transparent hover:tw-bg-material-light-thin", icon: jsx(ChevronLargeDownIcon, {}) })) }), jsx("div", { className: detailClassName, children: jsx(Boost, { estimatedTime: estimatedTime !== null && estimatedTime !== void 0 ? estimatedTime : '0s', boostMode: boostMode, onToggleBoostMode: onToggleBoostMode, canToggleBoostMode: state === 'loading' ? false : canToggleBoostMode, boostDisabledMessage: boostDisabledMessage }) })] })) }));
2969
+ return (jsx("aside", { className: cn('tw-h-squid-[50px] tw-flex tw-w-[480px] tw-items-center tw-justify-around tw-bg-grey-900 tw-py-squid-xxs tw-text-grey-500', state === 'error' ? 'tw-px-squid-l' : 'tw-px-squid-m'), children: state === 'error' && errorMessage ? (jsxs(Fragment, { children: [jsx(ErrorMessage, { message: errorMessage }), helpButton ? (jsx(Button, { onClick: helpButton.onClick, size: "md", variant: "tertiary", label: helpButton.label })) : null] })) : (jsxs(Fragment, { children: [jsx("div", { className: detailClassName, children: jsx(FeeButton, { feeInUsd: feeInUsd, onClick: onFeeButtonClick }) }), jsx("div", { className: "tw-flex tw-h-squid-xl tw-w-squid-xxl tw-items-center tw-justify-center", children: state === 'loading' ? (jsx(Loader, { size: "32" })) : (jsx(Button, { variant: "tertiary", size: "md", onClick: onInvertSwapButtonClick, className: "tw-border-transparent tw-bg-transparent hover:tw-bg-material-light-thin", icon: jsx(ChevronLargeDownIcon, {}) })) }), jsx("div", { className: detailClassName, children: jsx(Boost, { estimatedTime: estimatedTime !== null && estimatedTime !== void 0 ? estimatedTime : '0s', boostMode: boostMode, onToggleBoostMode: onToggleBoostMode, canToggleBoostMode: state === 'loading' ? false : canToggleBoostMode, boostDisabledMessage: boostDisabledMessage }) })] })) }));
2966
2970
  }
2967
- const ErrorMessage = ({ message }) => {
2968
- return (jsxs("div", { className: "tw-flex tw-h-squid-xl tw-flex-1 tw-items-center tw-gap-squid-xxs tw-text-status-negative", children: [jsx(EmojiSadIcon, {}), jsx(CaptionText, { children: message })] }));
2969
- };
2970
2971
 
2971
2972
  function DropdownMenuItem({ label, imageUrl, icon, labelClassName, }) {
2972
2973
  return (jsx("li", { className: "tw-max-h-squid-xl tw-w-full tw-px-squid-xxs", children: jsxs("div", { className: "tw-flex tw-h-squid-l tw-cursor-pointer tw-items-center tw-gap-squid-xxs tw-rounded-squid-xs tw-pl-squid-xxs hover:tw-bg-material-light-thin", children: [jsx("div", { className: "tw-flex tw-h-squid-m tw-w-squid-m tw-items-center tw-justify-between tw-rounded-squid-xs", children: imageUrl ? (jsx("img", { src: imageUrl, className: "tw-h-full tw-w-full tw-rounded-squid-xxs" })) : (icon) }), jsx(CaptionText, { className: labelClassName, children: label })] }) }));
@@ -3045,10 +3046,12 @@ const listItemSizeMap = {
3045
3046
  large: 'tw-max-w-list-item-large tw-h-list-item-large tw-px-squid-xs',
3046
3047
  };
3047
3048
  function ListItem(_a) {
3048
- var { itemTitle, mainImageUrl, subtitle, detail, icon, secondaryImageUrl, size = 'large', mainIcon, className, isSelected } = _a, props = __rest(_a, ["itemTitle", "mainImageUrl", "subtitle", "detail", "icon", "secondaryImageUrl", "size", "mainIcon", "className", "isSelected"]);
3049
- return (jsx("li", Object.assign({}, props, { className: cn('tw-flex tw-bg-grey-900 tw-text-grey-300', listItemSizeMap[size], className), children: jsxs("div", { className: cn('tw-flex tw-w-full tw-cursor-pointer tw-items-center tw-justify-start tw-gap-squid-xs tw-rounded-squid-s tw-px-squid-xs tw-py-squid-xxs hover:tw-bg-material-light-thin', isSelected && 'tw-bg-material-light-thin'), children: [size === 'large' ? (jsx("div", { className: "tw-h-10 tw-w-10", children: mainIcon ? (mainIcon) : (jsx(BadgeImage, { extraMarginForBadge: false, imageUrl: mainImageUrl, badgeUrl: secondaryImageUrl, size: "md", rounded: false })) })) : (jsx("div", { className: "tw-flex tw-min-h-[30px] tw-min-w-[30px] tw-items-center tw-justify-center", children: mainIcon ? (mainIcon) : (jsx("img", { src: mainImageUrl, className: "tw-h-[30px] tw-w-[30px] tw-rounded-squid-xs" })) })), jsxs("div", { className: cn('tw-flex tw-h-[40px] tw-w-full tw-flex-1 tw-flex-col tw-items-start tw-justify-center tw-gap-squid-xs',
3049
+ var { itemTitle, mainImageUrl, subtitle, detail, icon, secondaryImageUrl, size = 'large', mainIcon, className, isSelected, onDetailClick, showDetailOnHoverOnly } = _a, props = __rest(_a, ["itemTitle", "mainImageUrl", "subtitle", "detail", "icon", "secondaryImageUrl", "size", "mainIcon", "className", "isSelected", "onDetailClick", "showDetailOnHoverOnly"]);
3050
+ return (jsx("li", Object.assign({}, props, { className: cn('tw-group/list-item tw-flex tw-bg-grey-900 tw-text-grey-300', listItemSizeMap[size], className), children: jsxs("div", { className: cn('tw-flex tw-w-full tw-cursor-pointer tw-items-center tw-justify-start tw-gap-squid-xs tw-rounded-squid-s tw-px-squid-xs tw-py-squid-xxs hover:tw-bg-material-light-thin', isSelected && 'tw-bg-material-light-thin'), children: [size === 'large' ? (jsx("div", { className: "tw-h-10 tw-w-10", children: mainIcon ? (mainIcon) : (jsx(BadgeImage, { extraMarginForBadge: false, imageUrl: mainImageUrl, badgeUrl: secondaryImageUrl, size: "md", rounded: false })) })) : (jsx("div", { className: "tw-flex tw-min-h-[30px] tw-min-w-[30px] tw-items-center tw-justify-center", children: mainIcon ? (mainIcon) : (jsx("img", { src: mainImageUrl, className: "tw-h-[30px] tw-w-[30px] tw-rounded-squid-xs" })) })), jsxs("div", { className: cn('tw-flex tw-h-[40px] tw-w-full tw-flex-1 tw-flex-col tw-items-start tw-justify-center tw-gap-squid-xs',
3050
3051
  // 'large' variant has extra padding
3051
- size === 'large' && 'tw-px-squid-xxs'), children: [typeof itemTitle === 'string' ? (jsx(BodyText, { size: "small", className: "tw-truncate !tw-leading-[18px]", children: itemTitle })) : (itemTitle), size === 'large' && subtitle ? (jsx(CaptionText, { className: "tw-h-squid-xs !tw-leading-[10px] tw-text-grey-500", children: subtitle })) : null] }), jsxs("span", { className: "tw-flex tw-max-h-4 tw-items-center", children: [size === 'large' ? (jsx(CaptionText, { className: "min-tw-w-4 min-tw-h-4 tw-px-squid-xxs tw-leading-[10px]", children: detail })) : null, jsx("span", { className: "min-tw-w-4 min-tw-h-4", children: icon ? icon : null })] })] }) })));
3052
+ size === 'large' && 'tw-px-squid-xxs'), children: [typeof itemTitle === 'string' ? (jsx(BodyText, { size: "small", className: "tw-truncate !tw-leading-[18px]", children: itemTitle })) : (itemTitle), size === 'large' && subtitle ? (jsx(CaptionText, { className: "tw-h-squid-xs !tw-leading-[10px] tw-text-grey-500", children: subtitle })) : null] }), jsxs("button", { onClick: onDetailClick, className: cn('tw-cursor-pointer tw-items-center tw-justify-center tw-rounded-squid-xs hover:tw-bg-material-light-thin', size === 'large' ? 'tw-h-squid-xl' : 'tw-h-squid-l', showDetailOnHoverOnly
3053
+ ? 'tw-hidden group-hover/list-item:tw-flex'
3054
+ : 'tw-flex'), children: [size === 'large' && detail ? (jsx(CaptionText, { className: "min-tw-w-4 min-tw-h-4 tw-px-squid-xxs tw-leading-[10px]", children: detail })) : null, icon ? (jsx("span", { className: "tw-flex tw-items-center tw-justify-center tw-px-[3px] tw-py-2", children: icon })) : null] })] }) })));
3052
3055
  }
3053
3056
 
3054
3057
  function MenuItem({ label, imageUrl, icon }) {
@@ -3068,10 +3071,10 @@ function SettingsItem({ icon, label, controls, transparentControls = false, show
3068
3071
  }
3069
3072
 
3070
3073
  function SwapDetailListItem({ label, detail, icon, isLoading = false, }) {
3071
- return (jsx("li", { className: "tw-swap-detail-list-item-gradient tw-h-squid-l tw-w-full tw-bg-grey-800 tw-px-squid-xs tw-text-grey-300", children: jsxs("div", { className: "tw-flex tw-h-squid-l tw-items-center tw-justify-between tw-gap-squid-xs tw-rounded-squid-xs tw-px-squid-xs", children: [jsx("div", { className: "tw-h-6 tw-w-6 tw-text-grey-500", children: icon }), jsx(CaptionText, { className: "tw-flex-1 tw-text-grey-500", children: label }), isLoading ? (jsx(LoadingSkeleton, {})) : typeof detail === 'string' ? (jsx(CaptionText, { children: detail })) : (detail)] }) }));
3074
+ return (jsx("li", { className: "tw-swap-detail-list-item-gradient tw-h-squid-l tw-w-full tw-bg-grey-800 tw-px-squid-xs tw-text-grey-300", children: jsxs("div", { className: "tw-flex tw-h-squid-l tw-items-center tw-justify-between tw-gap-squid-xs tw-rounded-squid-xs tw-px-squid-xs", children: [jsx("div", { className: "tw-h-6 tw-w-6 tw-text-grey-500", children: icon }), jsx(CaptionText, { className: "tw-flex-1 tw-text-grey-500", children: label }), isLoading ? (jsx(LoadingSkeleton, { className: "tw-text-grey-500" })) : typeof detail === 'string' ? (jsx(CaptionText, { children: detail })) : (detail)] }) }));
3072
3075
  }
3073
- function LoadingSkeleton() {
3074
- return (jsx("div", { className: "tw-h-squid-xs tw-w-16 tw-animate-pulse tw-rounded-full tw-bg-grey-700" }));
3076
+ function LoadingSkeleton({ className }) {
3077
+ return (jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", width: "100", height: "20", viewBox: "0 0 100 20", fill: "none", className: className, children: [jsxs("g", { "clip-path": "url(#clip0_1083_18992)", children: [jsx("mask", { id: "mask0_1083_18992", style: { maskType: 'alpha' }, maskUnits: "userSpaceOnUse", x: "0", y: "0", width: "100", height: "20", children: jsx("rect", { width: "100", height: "20", fill: "url(#paint0_linear_1083_18992)" }) }), jsx("g", { mask: "url(#mask0_1083_18992)", children: jsx("rect", { width: "100", height: "20", fill: "currentColor" }) })] }), jsxs("defs", { children: [jsxs("linearGradient", { id: "paint0_linear_1083_18992", x1: "0", y1: "10", x2: "100", y2: "10", gradientUnits: "userSpaceOnUse", className: "tw-animate-loading-gradient", children: [jsx("stop", { "stop-color": "#D9D9D9", "stop-opacity": "0.33" }), jsx("stop", { offset: "0.395881", "stop-color": "#737373", "stop-opacity": "0.33" }), jsx("stop", { offset: "0.597867", "stop-color": "#737373", "stop-opacity": "0.66" }), jsx("stop", { offset: "0.697004", "stop-color": "#737373", "stop-opacity": "0.33" })] }), jsx("clipPath", { id: "clip0_1083_18992", children: jsx("path", { d: "M0 10C0 4.47715 4.47715 0 10 0H90C95.5228 0 100 4.47715 100 10C100 15.5228 95.5229 20 90 20H10C4.47716 20 0 15.5228 0 10Z", fill: "white" }) })] })] }));
3075
3078
  }
3076
3079
 
3077
3080
  function SwapStepSeparator() {
@@ -3133,7 +3136,7 @@ function SwapInputsIcon() {
3133
3136
  return (jsxs("svg", { width: "20", height: "21", viewBox: "0 0 20 21", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [jsx("g", { "clip-path": "url(#clip0_40_7936)", children: jsx("path", { "fill-rule": "evenodd", "clip-rule": "evenodd", d: "M20 10.5C20 16.0228 15.5228 20.5 10 20.5C4.47715 20.5 0 16.0228 0 10.5C0 4.97715 4.47715 0.5 10 0.5C15.5228 0.5 20 4.97715 20 10.5ZM8.38268 4.57612C8.75636 4.7309 9 5.09554 9 5.5V15.5C9 16.0523 8.55228 16.5 8 16.5C7.44772 16.5 7 16.0523 7 15.5V7.91421L5.70711 9.20711C5.31658 9.59763 4.68342 9.59763 4.29289 9.20711C3.90237 8.81658 3.90237 8.18342 4.29289 7.79289L7.29289 4.79289C7.57889 4.5069 8.00901 4.42134 8.38268 4.57612ZM11 15.5C11 15.9045 11.2436 16.2691 11.6173 16.4239C11.991 16.5787 12.4211 16.4931 12.7071 16.2071L15.7071 13.2071C16.0976 12.8166 16.0976 12.1834 15.7071 11.7929C15.3166 11.4024 14.6834 11.4024 14.2929 11.7929L13 13.0858V5.5C13 4.94771 12.5523 4.5 12 4.5C11.4477 4.5 11 4.94771 11 5.5V15.5Z", fill: "currentColor" }) }), jsx("defs", { children: jsx("clipPath", { id: "clip0_40_7936", children: jsx("rect", { width: "20", height: "20", fill: "white", transform: "translate(0 0.5)" }) }) })] }));
3134
3137
  }
3135
3138
 
3136
- function SwapConfiguration({ priceImpactPercentage, amount, swapAmountUsd = '0', balance = '0', isFetching = false, chain, token, direction, onAmountChange, onWalletButtonClick, onAssetsButtonClick, address, }) {
3139
+ function SwapConfiguration({ priceImpactPercentage, amount, swapAmountUsd = '0', balance = '0', isFetching = false, chain, token, direction, onAmountChange, onWalletButtonClick, onAssetsButtonClick, address, error, }) {
3137
3140
  var _a;
3138
3141
  const priceImpactClass = ((_a = Number(priceImpactPercentage)) !== null && _a !== void 0 ? _a : 0) > 5
3139
3142
  ? 'tw-text-status-negative'
@@ -3141,7 +3144,7 @@ function SwapConfiguration({ priceImpactPercentage, amount, swapAmountUsd = '0',
3141
3144
  const isInteractive = direction === 'from';
3142
3145
  // improve accessibility
3143
3146
  const BalanceButtonTag = isInteractive ? 'button' : 'div';
3144
- return (jsxs("section", { className: "tw-h-[205px] tw-max-h-[205px] tw-bg-grey-900 tw-pb-squid-m", children: [jsx("header", { className: "tw-flex tw-items-center tw-gap-1 tw-px-squid-l tw-py-squid-xs tw-leading-5 tw-text-grey-300", children: jsxs("button", { onClick: onWalletButtonClick, className: "-tw-ml-squid-xs tw-flex tw-h-squid-l tw-items-center tw-gap-squid-xxs tw-rounded-squid-s tw-px-squid-xs tw-text-grey-600 hover:tw-bg-material-light-thin", children: [jsx(BodyText, { className: "tw-text-grey-500", size: "small", children: direction === 'from' ? 'Pay' : 'Receive' }), jsx(BodyText, { size: "small", children: ":" }), jsxs("div", { className: "tw-flex tw-items-center tw-gap-1", children: [jsx(BodyText, { size: "small", className: address ? 'tw-text-grey-300' : 'tw-text-royal-400', children: address ? address : 'Connect wallet' }), jsx(ChevronArrowIcon, { className: address ? 'tw-text-grey-600' : 'tw-text-royal-400' })] })] }) }), jsx("div", { className: "tw-px-squid-l", children: jsx(AssetsButton, { onClick: onAssetsButtonClick, chainImageUrl: chain === null || chain === void 0 ? void 0 : chain.iconUrl, tokenImageUrl: token === null || token === void 0 ? void 0 : token.iconUrl, tokenSymbol: token === null || token === void 0 ? void 0 : token.symbol, chainBgColor: chain === null || chain === void 0 ? void 0 : chain.bgColor, tokenBgColor: token === null || token === void 0 ? void 0 : token.bgColor, tokenTextColor: token === null || token === void 0 ? void 0 : token.textColor }) }), direction === 'from' ? (jsx("div", { className: "tw-px-squid-m tw-pb-[15px] tw-pt-[5px]", children: jsx("input", { className: "tw-h-[55px] tw-w-full tw-rounded-squid-s tw-bg-transparent tw-px-squid-xs tw-py-squid-s tw-text-heading-small tw-font-heading-regular tw-text-grey-300 placeholder:tw-text-grey-600 hover:tw-bg-material-light-thin focus:tw-bg-material-light-thin focus:tw-text-royal-400 focus:tw-outline-none", placeholder: "0", value: amount, onChange: onAmountChange }) })) : (jsx("div", { className: "tw-w-full tw-px-squid-m tw-pb-[15px] tw-pt-[5px]", children: jsx("div", { className: "tw-flex tw-h-[55px] tw-w-full tw-items-center tw-rounded-squid-s tw-bg-transparent tw-px-squid-xs tw-py-squid-s tw-text-heading-small tw-font-heading-regular tw-text-grey-300", children: jsx("span", { children: amount }) }) })), !(token === null || token === void 0 ? void 0 : token.iconUrl) || isFetching ? null : (jsxs("footer", { className: "tw-flex tw-h-squid-m tw-max-h-squid-m tw-items-center tw-justify-between tw-gap-2 tw-px-squid-m tw-text-grey-500", children: [jsxs("div", { className: cn('tw-flex tw-h-squid-l tw-items-center tw-gap-1.5 tw-rounded-squid-s tw-px-squid-xs', isInteractive && 'hover:tw-bg-material-light-thin'), children: [jsx(SwapInputsIcon, {}), jsx(UsdAmount, { usdAmount: swapAmountUsd }), priceImpactPercentage && direction === 'to' ? (jsxs("span", { className: clsx('tw-flex tw-items-center', priceImpactClass), children: [jsx(ArrowTriangle, {}), jsx(CaptionText, { bold: true, children: priceImpactPercentage.toString().concat('%') })] })) : null] }), jsxs(BalanceButtonTag, { className: cn('tw-flex tw-h-squid-l tw-items-center tw-gap-1.5 tw-rounded-squid-s tw-px-squid-xs', isInteractive && 'hover:tw-bg-material-light-thin', direction === 'to' && 'tw-pointer-events-none'), children: [jsx(CaptionText, { className: "tw-opacity-66", children: "Balance" }), jsx(CaptionText, { children: balance }), jsx(MaxIcon, {})] })] }))] }));
3147
+ return (jsxs("section", { className: "tw-h-[205px] tw-max-h-[205px] tw-bg-grey-900 tw-pb-squid-m", children: [jsx("header", { className: "tw-flex tw-items-center tw-gap-1 tw-px-squid-l tw-py-squid-xs tw-leading-5 tw-text-grey-300", children: jsxs("button", { onClick: onWalletButtonClick, className: "-tw-ml-squid-xs tw-flex tw-h-squid-l tw-items-center tw-gap-squid-xxs tw-rounded-squid-s tw-px-squid-xs tw-text-grey-600 hover:tw-bg-material-light-thin", children: [jsx(BodyText, { className: "tw-text-grey-500", size: "small", children: direction === 'from' ? 'Pay' : 'Receive' }), jsx(BodyText, { size: "small", children: ":" }), jsxs("div", { className: "tw-flex tw-items-center tw-gap-1", children: [jsx(BodyText, { size: "small", className: address ? 'tw-text-grey-300' : 'tw-text-royal-400', children: address ? address : 'Connect wallet' }), jsx(ChevronArrowIcon, { className: address ? 'tw-text-grey-600' : 'tw-text-royal-400' })] })] }) }), jsx("div", { className: "tw-px-squid-l", children: jsx(AssetsButton, { onClick: onAssetsButtonClick, chainImageUrl: chain === null || chain === void 0 ? void 0 : chain.iconUrl, tokenImageUrl: token === null || token === void 0 ? void 0 : token.iconUrl, tokenSymbol: token === null || token === void 0 ? void 0 : token.symbol, chainBgColor: chain === null || chain === void 0 ? void 0 : chain.bgColor, tokenBgColor: token === null || token === void 0 ? void 0 : token.bgColor, tokenTextColor: token === null || token === void 0 ? void 0 : token.textColor }) }), direction === 'from' ? (jsx("div", { className: "tw-px-squid-m tw-pb-[15px] tw-pt-[5px]", children: jsx("input", { className: "tw-h-[55px] tw-w-full tw-rounded-squid-s tw-bg-transparent tw-px-squid-xs tw-py-squid-s tw-text-heading-small tw-font-heading-regular tw-text-grey-300 placeholder:tw-text-grey-600 hover:tw-bg-material-light-thin focus:tw-bg-material-light-thin focus:tw-text-royal-400 focus:tw-outline-none", placeholder: "0", value: amount, onChange: onAmountChange }) })) : (jsx("div", { className: "tw-w-full tw-px-squid-m tw-pb-[15px] tw-pt-[5px]", children: jsx("div", { className: "tw-flex tw-h-[55px] tw-w-full tw-items-center tw-rounded-squid-s tw-bg-transparent tw-px-squid-xs tw-py-squid-s tw-text-heading-small tw-font-heading-regular tw-text-grey-300", children: jsx("span", { children: amount }) }) })), !(token === null || token === void 0 ? void 0 : token.iconUrl) || isFetching ? null : (jsxs("footer", { className: "tw-flex tw-h-squid-m tw-max-h-squid-m tw-items-center tw-justify-between tw-gap-2 tw-px-squid-m tw-text-grey-500", children: [error ? (jsx("div", { className: "tw-px-squid-xs", children: jsx(ErrorMessage, { message: error.message }) })) : (jsxs("div", { className: cn('tw-flex tw-h-squid-l tw-items-center tw-gap-1.5 tw-rounded-squid-s tw-px-squid-xs', isInteractive && 'hover:tw-bg-material-light-thin'), children: [jsx(SwapInputsIcon, {}), jsx(UsdAmount, { usdAmount: swapAmountUsd }), priceImpactPercentage && direction === 'to' ? (jsxs("span", { className: clsx('tw-flex tw-items-center', priceImpactClass), children: [jsx(ArrowTriangle, {}), jsx(CaptionText, { bold: true, children: priceImpactPercentage.toString().concat('%') })] })) : null] })), jsxs(BalanceButtonTag, { className: cn('tw-flex tw-h-squid-l tw-items-center tw-gap-1.5 tw-rounded-squid-s tw-px-squid-xs', isInteractive && 'hover:tw-bg-material-light-thin', direction === 'to' && 'tw-pointer-events-none'), children: [jsx(CaptionText, { className: "tw-opacity-66", children: "Balance" }), jsx(CaptionText, { children: balance }), jsx(MaxIcon, {})] })] }))] }));
3145
3148
  }
3146
3149
 
3147
3150
  function SwapProgressViewHeader({ title, description, }) {
@@ -3245,4 +3248,4 @@ function SquidConfigProvider({ theme, children, themeType = 'light', }) {
3245
3248
  return (jsx("div", { style: parsedStyle, "data-squid-theme-type": themeType, className: clsx('tw-text-base-content tw-group tw-relative tw-font-geist'), children: children }));
3246
3249
  }
3247
3250
 
3248
- export { AddressButton, ArrowButton, AssetsButton, BadgeImage, BodyText, Boost, BoostButton, Button, CaptionText, Chip, DetailsToolbar, DropdownMenu, DropdownMenuItem, FeeButton, HeadingText, HistoryItem, Input, ListItem, Menu, MenuItem, Modal, NavigationBar, ProductCard, SectionTitle, SettingsButton, SettingsItem, SettingsSlider, SquidConfigProvider, SwapConfiguration, SwapDetailListItem, SwapProgressViewHeader, SwapStepItem, SwapStepsCollapsed, Switch, TokenPair, Tooltip, UsdAmount, useModal };
3251
+ export { AddressButton, ArrowButton, AssetsButton, BadgeImage, BodyText, Boost, BoostButton, Button, CaptionText, Chip, DetailsToolbar, DropdownMenu, DropdownMenuItem, ErrorMessage, FeeButton, HeadingText, HistoryItem, Input, ListItem, Menu, MenuItem, Modal, NavigationBar, ProductCard, SectionTitle, SettingsButton, SettingsItem, SettingsSlider, SquidConfigProvider, SwapConfiguration, SwapDetailListItem, SwapProgressViewHeader, SwapStepItem, SwapStepsCollapsed, Switch, TokenPair, Tooltip, UsdAmount, useModal };
@@ -7,5 +7,5 @@ interface BoostButtonProps {
7
7
  }) => void;
8
8
  boostDisabledMessage?: string;
9
9
  }
10
- export declare function BoostButton({ boostMode: _boostMode, onToggleBoostMode, canToggleBoostMode, boostDisabledMessage, }: BoostButtonProps): import("react/jsx-runtime").JSX.Element;
10
+ export declare function BoostButton({ boostMode, onToggleBoostMode, canToggleBoostMode, boostDisabledMessage, }: BoostButtonProps): import("react/jsx-runtime").JSX.Element;
11
11
  export {};
@@ -3,6 +3,7 @@ interface SwitchProps {
3
3
  checked?: boolean;
4
4
  onChange?: (checked: boolean) => void;
5
5
  size: SwitchSize;
6
+ disabled?: boolean;
6
7
  }
7
- export declare function Switch({ checked, onChange, size }: SwitchProps): import("react/jsx-runtime").JSX.Element;
8
+ export declare function Switch({ checked, onChange, size, disabled, }: SwitchProps): import("react/jsx-runtime").JSX.Element;
8
9
  export {};
@@ -1,4 +1,10 @@
1
- export declare function EmptyHeartIcon(): import("react/jsx-runtime").JSX.Element;
2
- export declare function FilledHeartIcon(): import("react/jsx-runtime").JSX.Element;
3
- export declare function BrokenHeartIcon(): import("react/jsx-runtime").JSX.Element;
1
+ export declare function EmptyHeartIcon({ className }: {
2
+ className?: string;
3
+ }): import("react/jsx-runtime").JSX.Element;
4
+ export declare function FilledHeartIcon({ className }: {
5
+ className?: string;
6
+ }): import("react/jsx-runtime").JSX.Element;
7
+ export declare function BrokenHeartIcon({ className }: {
8
+ className?: string;
9
+ }): import("react/jsx-runtime").JSX.Element;
4
10
  export declare function HeartSmallIcon(): import("react/jsx-runtime").JSX.Element;
@@ -1,7 +1,7 @@
1
1
  import { BoostMode, DetailsToolbarState } from '../../types/components';
2
2
  interface DetailsToolbarProps {
3
3
  state?: DetailsToolbarState;
4
- errorMessage: string;
4
+ errorMessage?: string;
5
5
  boostMode?: BoostMode;
6
6
  onToggleBoostMode?: ({ boostMode }: {
7
7
  boostMode: BoostMode;
@@ -12,6 +12,10 @@ interface DetailsToolbarProps {
12
12
  estimatedTime?: string;
13
13
  canToggleBoostMode?: boolean;
14
14
  boostDisabledMessage?: string;
15
+ helpButton?: {
16
+ label: string;
17
+ onClick: () => void;
18
+ };
15
19
  }
16
- export declare function DetailsToolbar({ state, errorMessage, boostMode, onToggleBoostMode, onInvertSwapButtonClick, onFeeButtonClick, feeInUsd, estimatedTime, canToggleBoostMode, boostDisabledMessage, }: DetailsToolbarProps): import("react/jsx-runtime").JSX.Element;
20
+ export declare function DetailsToolbar({ state, errorMessage, boostMode, onToggleBoostMode, onInvertSwapButtonClick, onFeeButtonClick, feeInUsd, estimatedTime, canToggleBoostMode, boostDisabledMessage, helpButton, }: DetailsToolbarProps): import("react/jsx-runtime").JSX.Element;
17
21
  export {};
@@ -0,0 +1,3 @@
1
+ export declare function ErrorMessage({ message }: {
2
+ message: string;
3
+ }): import("react/jsx-runtime").JSX.Element;
@@ -1,6 +1,2 @@
1
1
  /// <reference types="react" />
2
- interface ProductCardProps {
3
- children?: React.ReactNode;
4
- }
5
- export declare function ProductCard({ children }: ProductCardProps): import("react/jsx-runtime").JSX.Element;
6
- export {};
2
+ export declare function ProductCard({ children }: React.PropsWithChildren): import("react/jsx-runtime").JSX.Element;
@@ -21,6 +21,9 @@ interface SwapConfigurationProps {
21
21
  onAmountChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;
22
22
  onWalletButtonClick?: () => void;
23
23
  onAssetsButtonClick?: () => void;
24
+ error?: {
25
+ message: string;
26
+ };
24
27
  }
25
- export declare function SwapConfiguration({ priceImpactPercentage, amount, swapAmountUsd, balance, isFetching, chain, token, direction, onAmountChange, onWalletButtonClick, onAssetsButtonClick, address, }: SwapConfigurationProps): import("react/jsx-runtime").JSX.Element;
28
+ export declare function SwapConfiguration({ priceImpactPercentage, amount, swapAmountUsd, balance, isFetching, chain, token, direction, onAmountChange, onWalletButtonClick, onAssetsButtonClick, address, error, }: SwapConfigurationProps): import("react/jsx-runtime").JSX.Element;
26
29
  export {};
@@ -1,6 +1,7 @@
1
1
  export * from './Boost';
2
2
  export * from './DetailsToolbar';
3
3
  export * from './DropdownMenu';
4
+ export * from './ErrorMessage';
4
5
  export * from './Menu';
5
6
  export * from './Modal';
6
7
  export * from './NavigationBar';
@@ -10,7 +10,9 @@ interface ListItemProps extends React.HTMLAttributes<HTMLLIElement> {
10
10
  mainIcon?: React.ReactNode;
11
11
  isSelected?: boolean;
12
12
  className?: string;
13
+ onDetailClick?: () => void;
14
+ showDetailOnHoverOnly?: boolean;
13
15
  }
14
16
  type ListItemSize = 'small' | 'large';
15
- export declare function ListItem({ itemTitle, mainImageUrl, subtitle, detail, icon, secondaryImageUrl, size, mainIcon, className, isSelected, ...props }: ListItemProps): import("react/jsx-runtime").JSX.Element;
17
+ export declare function ListItem({ itemTitle, mainImageUrl, subtitle, detail, icon, secondaryImageUrl, size, mainIcon, className, isSelected, onDetailClick, showDetailOnHoverOnly, ...props }: ListItemProps): import("react/jsx-runtime").JSX.Element;
16
18
  export {};
@@ -1,4 +1,4 @@
1
- import { ReactNode } from 'react';
1
+ import React from 'react';
2
2
  interface AssetsViewProps {
3
3
  chains: {
4
4
  name: string;
@@ -25,9 +25,5 @@ interface AssetsViewProps {
25
25
  }[];
26
26
  }
27
27
  export declare function AssetsView({ chains, favoriteTokens, popularTokens, userTokens, }: AssetsViewProps): import("react/jsx-runtime").JSX.Element;
28
- export declare const List: ({ children }: {
29
- children: ReactNode;
30
- }) => import("react/jsx-runtime").JSX.Element;
31
- export declare const AddFavoriteToken: () => import("react/jsx-runtime").JSX.Element;
32
- export declare const RemoveFavoriteToken: () => import("react/jsx-runtime").JSX.Element;
28
+ export declare const List: ({ children }: React.PropsWithChildren) => import("react/jsx-runtime").JSX.Element;
33
29
  export {};
@@ -5,5 +5,7 @@ export default meta;
5
5
  type Story = StoryObj<typeof meta>;
6
6
  export declare const LargeChecked: Story;
7
7
  export declare const LargeUnchecked: Story;
8
+ export declare const LargeDisabled: Story;
8
9
  export declare const SmallChecked: Story;
9
10
  export declare const SmallUnchecked: Story;
11
+ export declare const SmallDisabled: Story;
@@ -7,4 +7,5 @@ export declare const Default: Story;
7
7
  export declare const Loading: Story;
8
8
  export declare const Empty: Story;
9
9
  export declare const Error: Story;
10
+ export declare const ErrorHelpButton: Story;
10
11
  export declare const BoostDisabled: Story;
@@ -0,0 +1,6 @@
1
+ import { Meta, StoryObj } from '@storybook/react';
2
+ import { ErrorMessage } from '../../components/layout/ErrorMessage';
3
+ declare const meta: Meta<typeof ErrorMessage>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof meta>;
6
+ export declare const Default: Story;
@@ -16,3 +16,4 @@ export declare const AllProps: Story;
16
16
  export declare const ToDirection: Story;
17
17
  export declare const FromAddressEmpty: Story;
18
18
  export declare const ToAddressEmpty: Story;
19
+ export declare const Error: Story;
@@ -7,10 +7,13 @@ export declare const Large: Story;
7
7
  export declare const LargeWithSubtitle: Story;
8
8
  export declare const LargeWithDetail: Story;
9
9
  export declare const LargeWithIcon: Story;
10
+ export declare const LargeWithDetailAndIcon: Story;
11
+ export declare const LargeShowDetailOnHoverOnly: Story;
10
12
  export declare const LargeWithSecondaryImage: Story;
11
13
  export declare const LargeSelected: Story;
12
14
  export declare const LargeWithCustomIconAsImage: Story;
13
15
  export declare const Small: Story;
14
16
  export declare const SmallWithIcon: Story;
17
+ export declare const SmallShowDetailOnHoverOnly: Story;
15
18
  export declare const SmallSelected: Story;
16
19
  export declare const SmallWithCustomIconAsImage: Story;
package/dist/index.css CHANGED
@@ -787,10 +787,6 @@ video {
787
787
  margin-top: 0.25rem;
788
788
  }
789
789
 
790
- .tw-block {
791
- display: block;
792
- }
793
-
794
790
  .tw-inline-block {
795
791
  display: inline-block;
796
792
  }
@@ -967,10 +963,6 @@ video {
967
963
  height: 3.75rem;
968
964
  }
969
965
 
970
- .tw-max-h-4 {
971
- max-height: 1rem;
972
- }
973
-
974
966
  .tw-max-h-\[120px\] {
975
967
  max-height: 120px;
976
968
  }
@@ -1051,10 +1043,6 @@ video {
1051
1043
  width: 3rem;
1052
1044
  }
1053
1045
 
1054
- .tw-w-16 {
1055
- width: 4rem;
1056
- }
1057
-
1058
1046
  .tw-w-36 {
1059
1047
  width: 9rem;
1060
1048
  }
@@ -1344,14 +1332,24 @@ video {
1344
1332
  animation: tw-fade-out 0.2s ease-out both;
1345
1333
  }
1346
1334
 
1347
- @keyframes tw-pulse {
1335
+ @keyframes tw-loading-gradient {
1336
+ 0% {
1337
+ transform: translateX(-70%);
1338
+ opacity: 0;
1339
+ }
1340
+
1348
1341
  50% {
1349
- opacity: .5;
1342
+ opacity: 1;
1343
+ }
1344
+
1345
+ 100% {
1346
+ opacity: 0;
1347
+ transform: translateX(70%);
1350
1348
  }
1351
1349
  }
1352
1350
 
1353
- .tw-animate-pulse {
1354
- animation: tw-pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
1351
+ .tw-animate-loading-gradient {
1352
+ animation: tw-loading-gradient 1s ease-in-out both infinite;
1355
1353
  }
1356
1354
 
1357
1355
  @keyframes tw-slide-to-bottom {
@@ -1386,6 +1384,10 @@ video {
1386
1384
  animation: tw-slide-to-top 0.35s ease-out both;
1387
1385
  }
1388
1386
 
1387
+ .tw-cursor-not-allowed {
1388
+ cursor: not-allowed;
1389
+ }
1390
+
1389
1391
  .tw-cursor-pointer {
1390
1392
  cursor: pointer;
1391
1393
  }
@@ -1700,10 +1702,6 @@ video {
1700
1702
  background-color: var(--squid-theme-grey-500);
1701
1703
  }
1702
1704
 
1703
- .tw-bg-grey-700 {
1704
- background-color: var(--squid-theme-grey-700);
1705
- }
1706
-
1707
1705
  .tw-bg-grey-800 {
1708
1706
  background-color: var(--squid-theme-grey-800);
1709
1707
  }
@@ -1879,6 +1877,11 @@ video {
1879
1877
  padding-right: 1.25rem;
1880
1878
  }
1881
1879
 
1880
+ .tw-px-\[3px\] {
1881
+ padding-left: 3px;
1882
+ padding-right: 3px;
1883
+ }
1884
+
1882
1885
  .tw-px-\[70px\] {
1883
1886
  padding-left: 70px;
1884
1887
  padding-right: 70px;
@@ -1919,6 +1922,11 @@ video {
1919
1922
  padding-bottom: 0.125rem;
1920
1923
  }
1921
1924
 
1925
+ .tw-py-2 {
1926
+ padding-top: 0.5rem;
1927
+ padding-bottom: 0.5rem;
1928
+ }
1929
+
1922
1930
  .tw-py-squid-s {
1923
1931
  padding-top: 0.9375rem;
1924
1932
  padding-bottom: 0.9375rem;
@@ -2470,20 +2478,8 @@ li {
2470
2478
  color: var(--squid-theme-grey-600);
2471
2479
  }
2472
2480
 
2473
- .tw-group\/token-action-add:hover .group-hover\/token-action-add\:tw-block {
2474
- display: block;
2475
- }
2476
-
2477
- .tw-group\/token-action-remove:hover .group-hover\/token-action-remove\:tw-block {
2478
- display: block;
2479
- }
2480
-
2481
- .tw-group\/token-action-add:hover .group-hover\/token-action-add\:tw-hidden {
2482
- display: none;
2483
- }
2484
-
2485
- .tw-group\/token-action-remove:hover .group-hover\/token-action-remove\:tw-hidden {
2486
- display: none;
2481
+ .tw-group\/list-item:hover .group-hover\/list-item\:tw-flex {
2482
+ display: flex;
2487
2483
  }
2488
2484
 
2489
2485
  .tw-group\/history-item:hover .group-hover\/history-item\:tw-opacity-0 {
package/dist/index.d.ts CHANGED
@@ -67,7 +67,7 @@ interface BoostButtonProps {
67
67
  }) => void;
68
68
  boostDisabledMessage?: string;
69
69
  }
70
- declare function BoostButton({ boostMode: _boostMode, onToggleBoostMode, canToggleBoostMode, boostDisabledMessage, }: BoostButtonProps): react_jsx_runtime.JSX.Element;
70
+ declare function BoostButton({ boostMode, onToggleBoostMode, canToggleBoostMode, boostDisabledMessage, }: BoostButtonProps): react_jsx_runtime.JSX.Element;
71
71
 
72
72
  interface ButtonProps extends React.HTMLAttributes<HTMLButtonElement> {
73
73
  label?: string;
@@ -113,8 +113,9 @@ interface SwitchProps {
113
113
  checked?: boolean;
114
114
  onChange?: (checked: boolean) => void;
115
115
  size: SwitchSize;
116
+ disabled?: boolean;
116
117
  }
117
- declare function Switch({ checked, onChange, size }: SwitchProps): react_jsx_runtime.JSX.Element;
118
+ declare function Switch({ checked, onChange, size, disabled, }: SwitchProps): react_jsx_runtime.JSX.Element;
118
119
 
119
120
  type TooltipWidth = 'max' | 'container';
120
121
  type TooltipThreshold = 'xxs' | 'xs' | 's' | 'm' | 'l' | 'xl' | 'xxl';
@@ -142,7 +143,7 @@ declare function Boost({ boostMode, onToggleBoostMode, estimatedTime, boostDisab
142
143
 
143
144
  interface DetailsToolbarProps {
144
145
  state?: DetailsToolbarState;
145
- errorMessage: string;
146
+ errorMessage?: string;
146
147
  boostMode?: BoostMode;
147
148
  onToggleBoostMode?: ({ boostMode }: {
148
149
  boostMode: BoostMode;
@@ -153,8 +154,12 @@ interface DetailsToolbarProps {
153
154
  estimatedTime?: string;
154
155
  canToggleBoostMode?: boolean;
155
156
  boostDisabledMessage?: string;
157
+ helpButton?: {
158
+ label: string;
159
+ onClick: () => void;
160
+ };
156
161
  }
157
- declare function DetailsToolbar({ state, errorMessage, boostMode, onToggleBoostMode, onInvertSwapButtonClick, onFeeButtonClick, feeInUsd, estimatedTime, canToggleBoostMode, boostDisabledMessage, }: DetailsToolbarProps): react_jsx_runtime.JSX.Element;
162
+ declare function DetailsToolbar({ state, errorMessage, boostMode, onToggleBoostMode, onInvertSwapButtonClick, onFeeButtonClick, feeInUsd, estimatedTime, canToggleBoostMode, boostDisabledMessage, helpButton, }: DetailsToolbarProps): react_jsx_runtime.JSX.Element;
158
163
 
159
164
  interface DropdownMenuItemProps {
160
165
  label: string;
@@ -188,9 +193,11 @@ interface ListItemProps extends React.HTMLAttributes<HTMLLIElement> {
188
193
  mainIcon?: React.ReactNode;
189
194
  isSelected?: boolean;
190
195
  className?: string;
196
+ onDetailClick?: () => void;
197
+ showDetailOnHoverOnly?: boolean;
191
198
  }
192
199
  type ListItemSize = 'small' | 'large';
193
- declare function ListItem({ itemTitle, mainImageUrl, subtitle, detail, icon, secondaryImageUrl, size, mainIcon, className, isSelected, ...props }: ListItemProps): react_jsx_runtime.JSX.Element;
200
+ declare function ListItem({ itemTitle, mainImageUrl, subtitle, detail, icon, secondaryImageUrl, size, mainIcon, className, isSelected, onDetailClick, showDetailOnHoverOnly, ...props }: ListItemProps): react_jsx_runtime.JSX.Element;
194
201
 
195
202
  interface MenuItemProps {
196
203
  label: string;
@@ -239,6 +246,10 @@ interface DropdownMenuProps {
239
246
  }
240
247
  declare function DropdownMenu({ dropdownRef, items, className, }: DropdownMenuProps): react_jsx_runtime.JSX.Element;
241
248
 
249
+ declare function ErrorMessage({ message }: {
250
+ message: string;
251
+ }): react_jsx_runtime.JSX.Element;
252
+
242
253
  type Rounded = 'sm' | 'lg';
243
254
  interface MenuProps extends React$1.ComponentProps<'div'> {
244
255
  containerClassName?: string;
@@ -269,10 +280,7 @@ interface NavigationBarProps {
269
280
  }
270
281
  declare function NavigationBar({ title, displayBackButton, logoUrl, transparent, displayButtonShadows, onBackButtonClick, label, onAddressButtonClick, isLoading, }: NavigationBarProps): react_jsx_runtime.JSX.Element;
271
282
 
272
- interface ProductCardProps {
273
- children?: React.ReactNode;
274
- }
275
- declare function ProductCard({ children }: ProductCardProps): react_jsx_runtime.JSX.Element;
283
+ declare function ProductCard({ children }: React.PropsWithChildren): react_jsx_runtime.JSX.Element;
276
284
 
277
285
  interface SwapConfigurationProps {
278
286
  direction: SwapDirection;
@@ -295,8 +303,11 @@ interface SwapConfigurationProps {
295
303
  onAmountChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;
296
304
  onWalletButtonClick?: () => void;
297
305
  onAssetsButtonClick?: () => void;
306
+ error?: {
307
+ message: string;
308
+ };
298
309
  }
299
- declare function SwapConfiguration({ priceImpactPercentage, amount, swapAmountUsd, balance, isFetching, chain, token, direction, onAmountChange, onWalletButtonClick, onAssetsButtonClick, address, }: SwapConfigurationProps): react_jsx_runtime.JSX.Element;
310
+ declare function SwapConfiguration({ priceImpactPercentage, amount, swapAmountUsd, balance, isFetching, chain, token, direction, onAmountChange, onWalletButtonClick, onAssetsButtonClick, address, error, }: SwapConfigurationProps): react_jsx_runtime.JSX.Element;
300
311
 
301
312
  interface SwapProgressViewHeaderProps {
302
313
  title: string;
@@ -392,4 +403,4 @@ declare function useModal(props?: {
392
403
  openModalButtonRef: React.RefObject<HTMLButtonElement>;
393
404
  };
394
405
 
395
- export { AddressButton, ArrowButton, AssetsButton, BadgeImage, BodyText, Boost, BoostButton, Button, CaptionText, Chip, DetailsToolbar, DropdownMenu, DropdownMenuItem, type DropdownMenuItemProps, FeeButton, HeadingText, HistoryItem, Input, ListItem, Menu, MenuItem, Modal, NavigationBar, ProductCard, SectionTitle, SettingsButton, type SettingsButtonProps, SettingsItem, type SettingsItemProps, SettingsSlider, type SettingsSliderProps, SquidConfigProvider, SwapConfiguration, SwapDetailListItem, SwapProgressViewHeader, SwapStepItem, SwapStepsCollapsed, Switch, TokenPair, Tooltip, type TooltipThreshold, type TooltipWidth, UsdAmount, useModal };
406
+ export { AddressButton, ArrowButton, AssetsButton, BadgeImage, BodyText, Boost, BoostButton, Button, CaptionText, Chip, DetailsToolbar, DropdownMenu, DropdownMenuItem, type DropdownMenuItemProps, ErrorMessage, FeeButton, HeadingText, HistoryItem, Input, ListItem, Menu, MenuItem, Modal, NavigationBar, ProductCard, SectionTitle, SettingsButton, type SettingsButtonProps, SettingsItem, type SettingsItemProps, SettingsSlider, type SettingsSliderProps, SquidConfigProvider, SwapConfiguration, SwapDetailListItem, SwapProgressViewHeader, SwapStepItem, SwapStepsCollapsed, Switch, TokenPair, Tooltip, type TooltipThreshold, type TooltipWidth, UsdAmount, useModal };
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "url": "git+https://github.com/0xsquid/squid-ui.git"
6
6
  },
7
7
  "description": "Squid's UI components",
8
- "version": "0.6.3",
8
+ "version": "0.7.0",
9
9
  "author": "",
10
10
  "license": "MIT",
11
11
  "scripts": {