@0xsquid/ui 2.6.2 → 2.6.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/dist/cjs/index.js +221 -72
  2. package/dist/cjs/types/components/buttons/Button.d.ts +4 -1
  3. package/dist/cjs/types/components/controls/Switch.d.ts +1 -1
  4. package/dist/cjs/types/components/icons/Arrow.d.ts +2 -1
  5. package/dist/cjs/types/components/icons/Generic.d.ts +11 -2
  6. package/dist/cjs/types/components/icons/Social.d.ts +9 -1
  7. package/dist/cjs/types/components/icons/index.d.ts +0 -1
  8. package/dist/cjs/types/components/layout/DropdownMenu.d.ts +2 -1
  9. package/dist/cjs/types/components/lists/ListItem.d.ts +4 -1
  10. package/dist/cjs/types/components/views/SwapProgressView.d.ts +3 -2
  11. package/dist/cjs/types/core/utils.d.ts +7 -0
  12. package/dist/cjs/types/hooks/useColorFromSeed.d.ts +1 -0
  13. package/dist/cjs/types/hooks/useDropdownMenu.d.ts +5 -5
  14. package/dist/cjs/types/stories/buttons/AssetsButton.stories.d.ts +1 -0
  15. package/dist/cjs/types/stories/buttons/Button.stories.d.ts +30 -15
  16. package/dist/cjs/types/stories/controls/Switch.stories.d.ts +5 -3
  17. package/dist/cjs/types/stories/layout/AppContainer.stories.d.ts +1 -1
  18. package/dist/cjs/types/stories/lists/ListItem.stories.d.ts +3 -0
  19. package/dist/cjs/types/stories/views/MainView.stories.d.ts +1 -1
  20. package/dist/cjs/types/stories/views/SwapDetailsView.stories.d.ts +1 -1
  21. package/dist/cjs/types/types/components.d.ts +1 -1
  22. package/dist/cjs/types/types/config.d.ts +3 -3
  23. package/dist/cjs/types/types/index.d.ts +1 -1
  24. package/dist/esm/index.js +215 -70
  25. package/dist/esm/types/components/buttons/Button.d.ts +4 -1
  26. package/dist/esm/types/components/controls/Switch.d.ts +1 -1
  27. package/dist/esm/types/components/icons/Arrow.d.ts +2 -1
  28. package/dist/esm/types/components/icons/Generic.d.ts +11 -2
  29. package/dist/esm/types/components/icons/Social.d.ts +9 -1
  30. package/dist/esm/types/components/icons/index.d.ts +0 -1
  31. package/dist/esm/types/components/layout/DropdownMenu.d.ts +2 -1
  32. package/dist/esm/types/components/lists/ListItem.d.ts +4 -1
  33. package/dist/esm/types/components/views/SwapProgressView.d.ts +3 -2
  34. package/dist/esm/types/core/utils.d.ts +7 -0
  35. package/dist/esm/types/hooks/useColorFromSeed.d.ts +1 -0
  36. package/dist/esm/types/hooks/useDropdownMenu.d.ts +5 -5
  37. package/dist/esm/types/stories/buttons/AssetsButton.stories.d.ts +1 -0
  38. package/dist/esm/types/stories/buttons/Button.stories.d.ts +30 -15
  39. package/dist/esm/types/stories/controls/Switch.stories.d.ts +5 -3
  40. package/dist/esm/types/stories/layout/AppContainer.stories.d.ts +1 -1
  41. package/dist/esm/types/stories/lists/ListItem.stories.d.ts +3 -0
  42. package/dist/esm/types/stories/views/MainView.stories.d.ts +1 -1
  43. package/dist/esm/types/stories/views/SwapDetailsView.stories.d.ts +1 -1
  44. package/dist/esm/types/types/components.d.ts +1 -1
  45. package/dist/esm/types/types/config.d.ts +3 -3
  46. package/dist/esm/types/types/index.d.ts +1 -1
  47. package/dist/index.css +1 -1
  48. package/dist/index.d.ts +43 -23
  49. package/package.json +1 -1
  50. package/dist/cjs/types/components/icons/Copy.d.ts +0 -5
  51. package/dist/esm/types/components/icons/Copy.d.ts +0 -5
package/dist/cjs/index.js CHANGED
@@ -117,6 +117,13 @@ const THEME_COLOR_KEYS = [
117
117
  "button-md-secondary-text",
118
118
  "button-md-tertiary-bg",
119
119
  "button-md-tertiary-text",
120
+ // sm button variant colors
121
+ "button-sm-primary-bg",
122
+ "button-sm-primary-text",
123
+ "button-sm-secondary-bg",
124
+ "button-sm-secondary-text",
125
+ "button-sm-tertiary-bg",
126
+ "button-sm-tertiary-text",
120
127
  // input colors
121
128
  "input-placeholder",
122
129
  "input-text",
@@ -146,12 +153,18 @@ const THEME_COLOR_KEYS = [
146
153
  "material-light-blend-grey-800",
147
154
  ];
148
155
  const THEME_BORDER_RADIUS_KEYS = [
156
+ // lg button
149
157
  "button-lg-primary",
150
158
  "button-lg-secondary",
151
159
  "button-lg-tertiary",
160
+ // md button
152
161
  "button-md-primary",
153
162
  "button-md-secondary",
154
163
  "button-md-tertiary",
164
+ // sm button
165
+ "button-sm-primary",
166
+ "button-sm-secondary",
167
+ "button-sm-tertiary",
155
168
  "container",
156
169
  "input",
157
170
  "menu-sm",
@@ -2953,6 +2966,19 @@ function mapToCssVariables(obj) {
2953
2966
  return acc;
2954
2967
  }, {});
2955
2968
  }
2969
+ /**
2970
+ * Simple hash function to create a deterministic index from a given string.
2971
+ * @param {string} str - The input string to hash.
2972
+ * @param {number} max - The maximum value for the hash.
2973
+ * @returns {number} - The index within the array.
2974
+ */
2975
+ function hashStringToIndex(str, max) {
2976
+ let index = 0;
2977
+ for (let i = 0; i < str.length; i++) {
2978
+ index = (index * 31 + str.charCodeAt(i)) % max;
2979
+ }
2980
+ return index;
2981
+ }
2956
2982
 
2957
2983
  const spacing$1 = {
2958
2984
  "squid-xxs": "0.3125rem", // 5px
@@ -3347,12 +3373,18 @@ const defaultFontFamily = {
3347
3373
  "squid-main": "Geist, sans-serif",
3348
3374
  };
3349
3375
  const defaultBorderRadius = {
3376
+ // lg button
3350
3377
  "button-lg-primary": spacing$1["squid-xxl"],
3351
3378
  "button-lg-secondary": spacing$1["squid-xxl"],
3352
3379
  "button-lg-tertiary": spacing$1["squid-xxl"],
3380
+ // md button
3353
3381
  "button-md-primary": spacing$1["squid-m"],
3354
3382
  "button-md-secondary": spacing$1["squid-m"],
3355
3383
  "button-md-tertiary": spacing$1["squid-m"],
3384
+ // sm button
3385
+ "button-sm-primary": spacing$1["squid-m"],
3386
+ "button-sm-secondary": spacing$1["squid-m"],
3387
+ "button-sm-tertiary": spacing$1["squid-m"],
3356
3388
  container: spacing$1["squid-l"],
3357
3389
  input: "9999px",
3358
3390
  "menu-sm": spacing$1["squid-s"],
@@ -3394,18 +3426,27 @@ const lightTheme = {
3394
3426
  "animation-bg": "#B893EC",
3395
3427
  "animation-text": "#FBFBFD",
3396
3428
  // buttons
3429
+ // lg button
3397
3430
  "button-lg-primary-bg": "#B893EC",
3398
3431
  "button-lg-primary-text": "#FBFBFD",
3399
3432
  "button-lg-secondary-bg": "#17191C",
3400
3433
  "button-lg-secondary-text": "#EDEEF3",
3401
3434
  "button-lg-tertiary-bg": "#EDEEF3",
3402
3435
  "button-lg-tertiary-text": "#292C32",
3436
+ // md button
3403
3437
  "button-md-primary-bg": "#B893EC",
3404
3438
  "button-md-primary-text": "#FBFBFD",
3405
3439
  "button-md-secondary-bg": "#17191C",
3406
3440
  "button-md-secondary-text": "#EDEEF3",
3407
3441
  "button-md-tertiary-bg": "#EDEEF3",
3408
3442
  "button-md-tertiary-text": "#292C32",
3443
+ // sm button
3444
+ "button-sm-primary-bg": "#B893EC",
3445
+ "button-sm-primary-text": "#FBFBFD",
3446
+ "button-sm-secondary-bg": "#17191C",
3447
+ "button-sm-secondary-text": "#EDEEF3",
3448
+ "button-sm-tertiary-bg": "#EDEEF3",
3449
+ "button-sm-tertiary-text": "#292C32",
3409
3450
  // input
3410
3451
  "input-bg": "#FBFBFD",
3411
3452
  "input-placeholder": "#A7ABBE",
@@ -3454,18 +3495,27 @@ const darkTheme = {
3454
3495
  "animation-bg": "#9E79D2",
3455
3496
  "animation-text": "#FBFBFD",
3456
3497
  // buttons
3498
+ // lg button
3457
3499
  "button-lg-primary-bg": "#9E79D2",
3458
3500
  "button-lg-primary-text": "#FBFBFD",
3459
3501
  "button-lg-secondary-bg": "#FBFBFD",
3460
3502
  "button-lg-secondary-text": "#292C32",
3461
3503
  "button-lg-tertiary-bg": "#292C32",
3462
3504
  "button-lg-tertiary-text": "#D1D6E0",
3505
+ // md button
3463
3506
  "button-md-primary-bg": "#9E79D2",
3464
3507
  "button-md-primary-text": "#FBFBFD",
3465
3508
  "button-md-secondary-bg": "#FBFBFD",
3466
3509
  "button-md-secondary-text": "#292C32",
3467
3510
  "button-md-tertiary-bg": "#292C32",
3468
3511
  "button-md-tertiary-text": "#D1D6E0",
3512
+ // sm button
3513
+ "button-sm-primary-bg": "#9E79D2",
3514
+ "button-sm-primary-text": "#FBFBFD",
3515
+ "button-sm-secondary-bg": "#FBFBFD",
3516
+ "button-sm-secondary-text": "#292C32",
3517
+ "button-sm-tertiary-bg": "#292C32",
3518
+ "button-sm-tertiary-text": "#D1D6E0",
3469
3519
  // input
3470
3520
  "input-bg": "#17191C",
3471
3521
  "input-placeholder": "#676B7E",
@@ -3544,7 +3594,7 @@ const boxShadowClassMap = {
3544
3594
  xlarge: "tw-shadow-elevation-light-2",
3545
3595
  xxlarge: "tw-shadow-elevation-dark-1",
3546
3596
  };
3547
- const roundedClassMap$1 = {
3597
+ const roundedClassMap = {
3548
3598
  xxs: "tw-rounded-squid-xxs",
3549
3599
  xs: "tw-rounded-squid-xs",
3550
3600
  s: "tw-rounded-squid-s",
@@ -3573,7 +3623,7 @@ const borderClassMap = {
3573
3623
  };
3574
3624
  function Image$1(_a) {
3575
3625
  var { src, size = "medium", className: propsClassName, placeholderImageUrl, border = "none", rounded = "xxs", shadow = false, children, containerProps } = _a, props = __rest$1(_a, ["src", "size", "className", "placeholderImageUrl", "border", "rounded", "shadow", "children", "containerProps"]);
3576
- const className = cn("tw-object-cover tw-aspect-square tw-relative tw-duration-300 tw-transition-[width,height] tw-max-w-full tw-bg-grey-500", sizeClassMap$1[size], propsClassName, roundedClassMap$1[rounded], shadow && boxShadowClassMap[size], borderClassMap[border]);
3626
+ const className = cn("tw-object-cover tw-aspect-square tw-relative tw-duration-300 tw-transition-[width,height] tw-max-w-full tw-bg-grey-500", sizeClassMap$1[size], propsClassName, roundedClassMap[rounded], shadow && boxShadowClassMap[size], borderClassMap[border]);
3577
3627
  const [imageState, setImageState] = React$1.useState(exports.ImageState.LOADED);
3578
3628
  return (jsxRuntime.jsxs("div", Object.assign({}, containerProps, { className: cn("tw-relative", containerProps === null || containerProps === void 0 ? void 0 : containerProps.className), children: [border === "gradient" && (jsxRuntime.jsx("span", { style: {
3579
3629
  borderRadius: gradientRoundedClassMap[rounded],
@@ -3760,8 +3810,8 @@ function ArrowUpIcon() {
3760
3810
  function ArrowCornerDownRightIcon({ size = "24", className, }) {
3761
3811
  return (jsxRuntime.jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: size, height: size, viewBox: "0 0 24 24", fill: "none", className: className, children: jsxRuntime.jsx("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M4 4C4.55228 4 5 4.44772 5 5V13C5 13.5523 5.44772 14 6 14H17.5858L15.2929 11.7071C14.9024 11.3166 14.9024 10.6834 15.2929 10.2929C15.6834 9.90237 16.3166 9.90237 16.7071 10.2929L20.7071 14.2929C21.0976 14.6834 21.0976 15.3166 20.7071 15.7071L16.7071 19.7071C16.3166 20.0976 15.6834 20.0976 15.2929 19.7071C14.9024 19.3166 14.9024 18.6834 15.2929 18.2929L17.5858 16H6C4.34315 16 3 14.6569 3 13V5C3 4.44772 3.44772 4 4 4Z", fill: "currentColor" }) }));
3762
3812
  }
3763
- function ChevronDownSmallIcon({ size = "16", className, }) {
3764
- return (jsxRuntime.jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: size, height: size, viewBox: "0 0 16 16", fill: "none", className: className, children: jsxRuntime.jsx("path", { d: "M5.33325 6.66666L7.52851 8.86192C7.78886 9.12227 8.21097 9.12227 8.47132 8.86192L10.6666 6.66666", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) }));
3813
+ function ChevronDownSmallIcon({ size = "16", strokeWidth = "2", className, }) {
3814
+ return (jsxRuntime.jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: size, height: size, viewBox: "0 0 16 16", fill: "none", className: className, children: jsxRuntime.jsx("path", { d: "M5.33325 6.66666L7.52851 8.86192C7.78886 9.12227 8.21097 9.12227 8.47132 8.86192L10.6666 6.66666", stroke: "currentColor", strokeWidth: strokeWidth, strokeLinecap: "round", strokeLinejoin: "round" }) }));
3765
3815
  }
3766
3816
  function ArrowDownIcon({ size = "24", className, }) {
3767
3817
  return (jsxRuntime.jsx("svg", { className: className, xmlns: "http://www.w3.org/2000/svg", width: size, height: size, viewBox: "0 0 24 25", fill: "none", children: jsxRuntime.jsx("path", { d: "M18 14.5L12 20.5L6 14.5M12 19.5V4.5", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) }));
@@ -3869,11 +3919,6 @@ function PowerIcon({ size = "24", className, }) {
3869
3919
  return (jsxRuntime.jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: size, height: size, viewBox: "0 0 24 24", fill: "none", className: className, children: jsxRuntime.jsx("path", { d: "M7.02331 4.5C4.59826 6.11238 3 8.86954 3 12C3 16.9706 7.02944 21 12 21C16.9706 21 21 16.9706 21 12C21 8.86954 19.4017 6.11238 16.9767 4.5M12 2V7", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) }));
3870
3920
  }
3871
3921
 
3872
- function Copy(_a) {
3873
- var { size = "24", strokeWidth = "2" } = _a, props = __rest$1(_a, ["size", "strokeWidth"]);
3874
- return (jsxRuntime.jsx("svg", Object.assign({ xmlns: "http://www.w3.org/2000/svg", width: size, height: size, fill: "none", viewBox: "0 0 24 24" }, props, { children: jsxRuntime.jsx("path", { stroke: "currentColor", strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: strokeWidth, vectorEffect: "non-scaling-stroke", d: "M9 9V5.25A2.25 2.25 0 0111.25 3h7.5A2.25 2.25 0 0121 5.25v7.5A2.25 2.25 0 0118.75 15H15m-2.25-6h-7.5A2.25 2.25 0 003 11.25v7.5A2.25 2.25 0 005.25 21h7.5A2.25 2.25 0 0015 18.75v-7.5A2.25 2.25 0 0012.75 9z" }) })));
3875
- }
3876
-
3877
3922
  function CrossAnimatedIcon({ size = 24, isOpen, transitionDuration, className, }) {
3878
3923
  const rotateDegrees = isOpen ? 45 : 0;
3879
3924
  return (jsxRuntime.jsxs("div", { style: {
@@ -3998,11 +4043,11 @@ function PhoneIcon({ size = "24", className, }) {
3998
4043
  function LaptopIcon({ size = "24", className, }) {
3999
4044
  return (jsxRuntime.jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", width: size, height: size, viewBox: "0 0 25 24", fill: "none", className: className, children: [jsxRuntime.jsx("path", { d: "M4.5 6C4.5 4.89543 5.39543 4 6.5 4H18.5C19.6046 4 20.5 4.89543 20.5 6V15C20.5 15.5523 20.0523 16 19.5 16H5.5C4.94772 16 4.5 15.5523 4.5 15V6Z", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "square", strokeLinejoin: "round" }), jsxRuntime.jsx("path", { d: "M2.5 16H22.5V18C22.5 19.1046 21.6046 20 20.5 20H4.5C3.39543 20 2.5 19.1046 2.5 18V16Z", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "square", strokeLinejoin: "round" })] }));
4000
4045
  }
4001
- function CopyOutlinedIcon({ size = "24", className, }) {
4002
- return (jsxRuntime.jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: size, height: size, viewBox: "0 0 24 24", fill: "none", className: className, children: jsxRuntime.jsx("path", { d: "M9 9V5.25C9 4.00736 10.0074 3 11.25 3H18.75C19.9926 3 21 4.00736 21 5.25V12.75C21 13.9926 19.9926 15 18.75 15H15M12.75 9H5.25C4.00736 9 3 10.0074 3 11.25V18.75C3 19.9926 4.00736 21 5.25 21H12.75C13.9926 21 15 19.9926 15 18.75V11.25C15 10.0074 13.9926 9 12.75 9Z", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) }));
4046
+ function CopyOutlinedIcon({ size = "24", strokeWidth = "2", className, }) {
4047
+ return (jsxRuntime.jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: size, height: size, viewBox: "0 0 24 24", fill: "none", className: className, children: jsxRuntime.jsx("path", { d: "M9 9V5.25C9 4.00736 10.0074 3 11.25 3H18.75C19.9926 3 21 4.00736 21 5.25V12.75C21 13.9926 19.9926 15 18.75 15H15M12.75 9H5.25C4.00736 9 3 10.0074 3 11.25V18.75C3 19.9926 4.00736 21 5.25 21H12.75C13.9926 21 15 19.9926 15 18.75V11.25C15 10.0074 13.9926 9 12.75 9Z", stroke: "currentColor", strokeWidth: strokeWidth, strokeLinecap: "round", strokeLinejoin: "round" }) }));
4003
4048
  }
4004
- function CopyIcon({ size = "20", className, }) {
4005
- return (jsxRuntime.jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: size, height: size, viewBox: "0 0 21 20", fill: "none", className: className, children: jsxRuntime.jsx("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M7.16663 6.66666V3.54166C7.16663 2.50612 8.00609 1.66666 9.04163 1.66666H16.9583C17.9938 1.66666 18.8333 2.50612 18.8333 3.54166V11.4583C18.8333 12.4939 17.9938 13.3333 16.9583 13.3333H13.8333V16.4583C13.8333 17.4939 12.9938 18.3333 11.9583 18.3333H4.04163C3.00609 18.3333 2.16663 17.4939 2.16663 16.4583V8.54166C2.16663 7.50612 3.00609 6.66666 4.04163 6.66666H7.16663ZM9.04163 13.3333C8.00609 13.3333 7.16663 12.4939 7.16663 11.4583V8.33332H4.04163C3.92657 8.33332 3.83329 8.4266 3.83329 8.54166V16.4583C3.83329 16.5734 3.92657 16.6667 4.04163 16.6667H11.9583C12.0734 16.6667 12.1666 16.5734 12.1666 16.4583V13.3333H9.04163Z", fill: "currentColor" }) }));
4049
+ function Copy2Icon({ size = "20", className, }) {
4050
+ return (jsxRuntime.jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: size, height: size, viewBox: "0 0 20 20", fill: "none", className: className, children: jsxRuntime.jsx("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M18.3327 4.37496C18.3327 2.87919 17.1201 1.66663 15.6243 1.66663H9.37435C7.87858 1.66663 6.66602 2.87919 6.66602 4.37496V6.66663H4.37435C2.87858 6.66663 1.66602 7.87919 1.66602 9.37496V15.625C1.66602 17.1207 2.87858 18.3333 4.37435 18.3333H10.6243C12.1201 18.3333 13.3327 17.1207 13.3327 15.625V13.3333H15.6243C17.1201 13.3333 18.3327 12.1207 18.3327 10.625V4.37496ZM13.3327 11.6666H15.6243C16.1996 11.6666 16.666 11.2003 16.666 10.625V4.37496C16.666 3.79966 16.1996 3.33329 15.6243 3.33329H9.37435C8.79905 3.33329 8.33268 3.79966 8.33268 4.37496V6.66663H10.6243C12.1201 6.66663 13.3327 7.87919 13.3327 9.37496V11.6666Z", fill: "currentColor" }) }));
4006
4051
  }
4007
4052
  function FileDownloadIcon({ size = "20", className, }) {
4008
4053
  return (jsxRuntime.jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", width: size, height: size, viewBox: "0 0 21 20", fill: "none", className: className, children: [jsxRuntime.jsx("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M6.33337 1.66666H10.5V5.83332C10.5 7.21404 11.6193 8.33332 13 8.33332H17.1667V15.8333C17.1667 17.214 16.0474 18.3333 14.6667 18.3333H6.33337C4.95266 18.3333 3.83337 17.214 3.83337 15.8333V4.16666C3.83337 2.78594 4.95266 1.66666 6.33337 1.66666ZM13.1726 14.3392L11.0893 16.4226C10.7639 16.748 10.2362 16.748 9.91079 16.4226L7.82745 14.3392C7.50201 14.0138 7.50201 13.4862 7.82745 13.1607C8.15289 12.8353 8.68053 12.8353 9.00596 13.1607L9.66671 13.8215V10.8333C9.66671 10.3731 10.0398 9.99999 10.5 9.99999C10.9603 9.99999 11.3334 10.3731 11.3334 10.8333V13.8215L11.9941 13.1607C12.3196 12.8353 12.8472 12.8353 13.1726 13.1607C13.4981 13.4862 13.4981 14.0138 13.1726 14.3392Z", fill: "currentColor" }), jsxRuntime.jsx("path", { d: "M12.1667 2.15481L16.6786 6.66666H13C12.5398 6.66666 12.1667 6.29356 12.1667 5.83332V2.15481Z", fill: "currentColor" })] }));
@@ -4037,6 +4082,12 @@ function ArrowExpandIcon({ className, size = "24", }) {
4037
4082
  function MoneyBagIcon({ className, size = "24", }) {
4038
4083
  return (jsxRuntime.jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: size, height: size, viewBox: "0 0 24 24", fill: "none", className: className, children: jsxRuntime.jsx("path", { d: "M9.5 8H14.5M9.5 8C9.5 8 3.99996 11 4 16C4.00003 20.0207 7.97931 21 12 21C16.0207 21 20 20.0207 20 16C20 11 14.5 8 14.5 8M9.5 8L8.55725 5.48601C8.23089 4.6157 8.56249 3.64123 9.45158 3.37016C10.1074 3.1702 10.9686 3 12 3C13.0314 3 13.8926 3.1702 14.5484 3.37016C15.4375 3.64123 15.7691 4.6157 15.4427 5.48601L14.5 8", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) }));
4039
4084
  }
4085
+ function PluginIcon({ size = "16", className, }) {
4086
+ return (jsxRuntime.jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: size, height: size, viewBox: "0 0 16 16", fill: "none", className: className, children: jsxRuntime.jsx("path", { d: "M6.66675 1.99998C6.66675 1.63179 6.36827 1.33331 6.00008 1.33331C5.63189 1.33331 5.33341 1.63179 5.33341 1.99998V3.99998H4.66675C3.56218 3.99998 2.66675 4.89541 2.66675 5.99998V9.33331C2.66675 11.1743 4.15913 12.6666 6.00008 12.6666H7.33341V14C7.33341 14.3682 7.63189 14.6666 8.00008 14.6666C8.36827 14.6666 8.66675 14.3682 8.66675 14V12.6666H10.0001C11.841 12.6666 13.3334 11.1743 13.3334 9.33331V5.99998C13.3334 4.89541 12.438 3.99998 11.3334 3.99998H10.6667V1.99998C10.6667 1.63179 10.3683 1.33331 10.0001 1.33331C9.63189 1.33331 9.33341 1.63179 9.33341 1.99998V3.99998H6.66675V1.99998Z", fill: "currentColor" }) }));
4087
+ }
4088
+ function CircleCheckIcon({ className, size = "24", }) {
4089
+ return (jsxRuntime.jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: size, height: size, viewBox: "0 0 24 24", fill: "none", className: className, children: jsxRuntime.jsx("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2ZM15.774 10.1333C16.1237 9.70582 16.0607 9.0758 15.6332 8.72607C15.2058 8.37635 14.5758 8.43935 14.226 8.86679L10.4258 13.5116L9.20711 12.2929C8.81658 11.9024 8.18342 11.9024 7.79289 12.2929C7.40237 12.6834 7.40237 13.3166 7.79289 13.7071L9.79289 15.7071C9.99267 15.9069 10.2676 16.0129 10.5498 15.9988C10.832 15.9847 11.095 15.8519 11.274 15.6333L15.774 10.1333Z", fill: "currentColor" }) }));
4090
+ }
4040
4091
 
4041
4092
  function EmptyHeartIcon({ className }) {
4042
4093
  return (jsxRuntime.jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", className: className, children: jsxRuntime.jsx("path", { d: "M21 10C21 15.75 12.75 20 12 20C11.25 20 3 15.75 3 10C3 6 5.5 4 8 4C10.5 4 12 5.5 12 5.5C12 5.5 13.5 4 16 4C18.5 4 21 6 21 10Z", stroke: "currentColor", strokeWidth: "2", strokeLinejoin: "round" }) }));
@@ -4142,7 +4193,7 @@ function SearchIcon({ className, size = "24", }) {
4142
4193
  return (jsxRuntime.jsx("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", className: className, children: jsxRuntime.jsx("path", { d: "M20 20L16.05 16.05M18 11C18 14.866 14.866 18 11 18C7.13401 18 4 14.866 4 11C4 7.13401 7.13401 4 11 4C14.866 4 18 7.13401 18 11Z", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" }) }));
4143
4194
  }
4144
4195
 
4145
- function XSocial({ className, size = "24", }) {
4196
+ function XSocialIcon({ className, size = "24", }) {
4146
4197
  return (jsxRuntime.jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: size, height: size, viewBox: "0 0 24 24", fill: "none", className: className, children: jsxRuntime.jsx("path", { d: "M17.4033 3.5H20.2852L13.989 10.701L21.396 20.5H15.5964L11.054 14.557L5.85637 20.5H2.97269L9.70709 12.7977L2.60156 3.5H8.54839L12.6544 8.93215L17.4033 3.5ZM16.3918 18.7738H17.9887L7.68067 5.13549H5.96702L16.3918 18.7738Z", fill: "currentColor" }) }));
4147
4198
  }
4148
4199
  function GithubIcon({ size = "24", className, }) {
@@ -4154,6 +4205,12 @@ function DiscordIcon({ size = "24", className, }) {
4154
4205
  function MirrorIcon({ size = "24", className, }) {
4155
4206
  return (jsxRuntime.jsx("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", className: className, children: jsxRuntime.jsx("path", { d: "M6 9C6 5.68629 8.68629 3 12 3C15.3137 3 18 5.68629 18 9V20C18 20.5523 17.5523 21 17 21H7C6.44771 21 6 20.5523 6 20V9Z", stroke: "currentColor", strokeWidth: "2" }) }));
4156
4207
  }
4208
+ function FarcasterIcon({ size = "20", className, }) {
4209
+ return (jsxRuntime.jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: size, height: size, viewBox: "0 0 20 20", fill: "none", className: className, children: jsxRuntime.jsx("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M15.8884 2H4.77734V4.28529L15.8884 4.28571V2ZM18.1115 16.2853V16.8567H13.667V16.2853C13.667 15.9696 13.9156 15.7139 14.2225 15.7139L14.2221 11.0971C14.2221 8.88795 12.481 7.0971 10.3332 7.0971C8.20241 7.0971 6.47187 8.85978 6.44466 11.0448V15.7139C6.75155 15.7139 7.00011 15.9696 7.00011 16.2853V16.8567H2.55566V16.2853C2.55566 15.9696 2.80428 15.7139 3.11122 15.7139L3.11133 6.57185H2.55556L2 4.28613H18.6667L18.1111 6.57185H17.556V15.7139C17.8629 15.7139 18.1115 15.9696 18.1115 16.2853ZM18.6669 17.4289C18.6669 17.1132 18.4185 16.8567 18.1115 16.8567H13.667C13.36 16.8567 13.1113 17.1132 13.1113 17.4289V18.0003H18.6669V17.4289ZM7.00011 16.8567C7.30706 16.8567 7.55555 17.1132 7.55555 17.4289V18.0003H2V17.4289C2 17.1132 2.24871 16.8567 2.55566 16.8567H7.00011Z", fill: "currentColor" }) }));
4210
+ }
4211
+ function TelegramIcon({ className, size = "20", }) {
4212
+ return (jsxRuntime.jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: size, height: size, viewBox: "0 0 20 20", fill: "none", className: className, children: jsxRuntime.jsx("path", { d: "M1.31748 8.8995C6.46345 6.66525 9.89405 5.19215 11.6094 4.48047C16.5127 2.44826 17.5302 2.09531 18.1949 2.08349C18.341 2.08102 18.6664 2.11703 18.8788 2.28828C19.0553 2.43259 19.105 2.62776 19.1298 2.76465C19.1518 2.90154 19.1822 3.21354 19.1574 3.45708C18.8926 6.2389 17.7427 12.9895 17.158 16.1053C16.9126 17.4237 16.4244 17.8657 15.9528 17.9089C14.927 18.0029 14.1492 17.2337 13.1564 16.5852C11.6038 15.5701 10.7269 14.9384 9.21842 13.948C7.47552 12.8034 8.60617 12.1742 9.59896 11.1461C9.85819 10.877 14.3754 6.78262 14.4608 6.41126C14.4719 6.3648 14.483 6.19162 14.3782 6.10036C14.2761 6.00883 14.1244 6.04016 14.0141 6.0649C13.8569 6.10009 11.3776 7.73509 6.56812 10.9696C5.8649 11.4518 5.22787 11.6868 4.65426 11.6744C4.02549 11.661 2.81216 11.3193 1.91037 11.0274C0.807272 10.6692 -0.0724949 10.4798 0.0047222 9.87149C0.0433308 9.55482 0.481884 9.23074 1.31748 8.8995Z", fill: "currentColor" }) }));
4213
+ }
4157
4214
 
4158
4215
  function SortIcon() {
4159
4216
  return (jsxRuntime.jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", children: jsxRuntime.jsx("path", { d: "M3 5H21M9 19H15M6 12H18", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" }) }));
@@ -4363,9 +4420,9 @@ function UsdAmount({ usdAmount }) {
4363
4420
  }
4364
4421
 
4365
4422
  function HashLink({ showTx = false, hash, showCopyButton = false, url, children, className, formattedHash, copyIconSize = "16", }) {
4366
- return (jsxRuntime.jsxs("div", { className: cn("tw-flex tw-items-center", className), children: [showTx && jsxRuntime.jsx("span", { className: "tw-mr-squid-xs tw-text-grey-700", children: "TX" }), children !== null && children !== void 0 ? children : formattedHash, url && (jsxRuntime.jsx("a", { href: url, target: "_blank", className: "tw-rounded-squid-s tw-px-squid-xxs hover:tw-bg-material-light-thin", rel: "noreferrer", children: jsxRuntime.jsx(SquareArrowTopRight2Icon, { strokeWidth: "1.5", className: "tw-h-[1.2em] tw-w-[1.2em] tw-text-royal-500" }) })), showCopyButton && (jsxRuntime.jsx("span", { className: "tw-rounded-squid-s tw-px-squid-xxs hover:tw-bg-material-light-thin", children: jsxRuntime.jsx(Copy, { size: copyIconSize, strokeWidth: "2", className: "tw-cursor-pointer tw-text-royal-500", onClick: () => {
4367
- navigator.clipboard.writeText(hash).catch(() => { });
4368
- } }) }))] }));
4423
+ return (jsxRuntime.jsxs("div", { className: cn("tw-flex tw-items-center", className), children: [showTx && jsxRuntime.jsx("span", { className: "tw-mr-squid-xs tw-text-grey-700", children: "TX" }), children !== null && children !== void 0 ? children : formattedHash, url && (jsxRuntime.jsx("a", { href: url, target: "_blank", className: "tw-rounded-squid-s tw-px-squid-xxs hover:tw-bg-material-light-thin", rel: "noreferrer", children: jsxRuntime.jsx(SquareArrowTopRight2Icon, { strokeWidth: "1.5", className: "tw-h-[1.2em] tw-w-[1.2em] tw-text-royal-500" }) })), showCopyButton && (jsxRuntime.jsx("span", { onClick: () => {
4424
+ navigator.clipboard.writeText(hash).catch(() => { });
4425
+ }, className: "tw-cursor-pointer tw-rounded-squid-s tw-px-squid-xxs hover:tw-bg-material-light-thin", children: jsxRuntime.jsx(CopyOutlinedIcon, { size: copyIconSize, strokeWidth: "2.5", className: "tw-text-royal-500" }) }))] }));
4369
4426
  }
4370
4427
 
4371
4428
  function WalletLink({ imageURI, address }) {
@@ -4397,16 +4454,23 @@ function Chip(_a) {
4397
4454
  return (jsxRuntime.jsx("div", Object.assign({}, props, { className: cn("tw-flex tw-h-squid-m tw-items-center tw-justify-center tw-rounded-squid-m tw-bg-grey-500 tw-text-grey-900", icon && "tw-w-squid-m", props.className), children: label ? (jsxRuntime.jsx(CaptionText, { className: "tw-min-w-squid-xl tw-text-nowrap tw-px-squid-xxs tw-text-center", children: label })) : (icon) })));
4398
4455
  }
4399
4456
 
4457
+ const loaderSizeMap = {
4458
+ sm: "16px",
4459
+ md: "24px",
4460
+ lg: "36px",
4461
+ };
4400
4462
  const baseButtonClassName = "tw-border tw-relative tw-overflow-hidden tw-group/base-button tw-flex tw-items-center tw-justify-center";
4401
4463
  const buttonWidthClassnameMap = {
4464
+ sm: "tw-w-max",
4402
4465
  md: "tw-min-w-[60px]",
4403
4466
  lg: "tw-w-full",
4404
4467
  };
4405
4468
  const buttonSizeClassMap = {
4406
4469
  md: "tw-px-squid-xs tw-py-squid-xxs tw-h-squid-xl",
4407
4470
  lg: "tw-p-1 tw-h-button",
4471
+ sm: "tw-h-squid-l tw-px-squid-xs",
4408
4472
  };
4409
- const roundedClassMap = {
4473
+ const buttonRoundedClassMap = {
4410
4474
  lg: {
4411
4475
  primary: "tw-rounded-button-lg-primary",
4412
4476
  secondary: "tw-rounded-button-lg-secondary",
@@ -4417,6 +4481,11 @@ const roundedClassMap = {
4417
4481
  secondary: "tw-rounded-button-md-secondary",
4418
4482
  tertiary: "tw-rounded-button-md-tertiary",
4419
4483
  },
4484
+ sm: {
4485
+ primary: "tw-rounded-button-sm-primary",
4486
+ secondary: "tw-rounded-button-sm-secondary",
4487
+ tertiary: "tw-rounded-button-sm-tertiary",
4488
+ },
4420
4489
  };
4421
4490
  const buttonVariantClassMap = {
4422
4491
  lg: {
@@ -4429,35 +4498,42 @@ const buttonVariantClassMap = {
4429
4498
  secondary: "tw-bg-button-md-secondary-bg tw-text-button-md-secondary-text",
4430
4499
  tertiary: "tw-bg-button-md-tertiary-bg tw-text-button-md-tertiary-text",
4431
4500
  },
4501
+ sm: {
4502
+ primary: "tw-bg-button-sm-primary-bg tw-text-button-sm-primary-text",
4503
+ secondary: "tw-bg-button-sm-secondary-bg tw-text-button-sm-secondary-text",
4504
+ tertiary: "tw-bg-button-sm-tertiary-bg tw-text-button-sm-tertiary-text",
4505
+ },
4432
4506
  };
4433
4507
  // right now all variants have the same disabled styles
4434
4508
  // in the future, we can add more disabled styles for different variants
4435
4509
  const buttonDisabledClass = "!tw-bg-grey-800 !tw-text-grey-600 tw-cursor-not-allowed";
4436
4510
  const loadingClassname = "tw-invisible tw-opacity-0";
4437
4511
  function Button$1(_a) {
4438
- var { label, disabled = false, size, variant, icon, link, isLoading = false, showLoader = false, chip, containerClassName, anchorRef, buttonRef } = _a, props = __rest$1(_a, ["label", "disabled", "size", "variant", "icon", "link", "isLoading", "showLoader", "chip", "containerClassName", "anchorRef", "buttonRef"]);
4512
+ var { label, disabled = false, size, variant, icon, link, isLoading = false, showLoader = false, loaderSize = "md", chip, containerClassName, anchorRef, buttonRef } = _a, props = __rest$1(_a, ["label", "disabled", "size", "variant", "icon", "link", "isLoading", "showLoader", "loaderSize", "chip", "containerClassName", "anchorRef", "buttonRef"]);
4439
4513
  const chipElement = chip != null ? (jsxRuntime.jsx(Chip, Object.assign({}, chip, { className: cn("tw-absolute -tw-right-squid-xxs -tw-top-squid-xxs tw-z-10", chip.className) }))) : null;
4440
- const children = (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [!disabled && !isLoading && (jsxRuntime.jsx(ButtonHoverOverlay, { className: roundedClassMap[size][variant] })), jsxRuntime.jsx("div", { className: "tw-relative tw-z-[5] tw-flex tw-items-center tw-justify-center tw-gap-squid-xxs", children: label == null && icon == null ? (props.children) : size === "lg" ? (jsxRuntime.jsxs("span", { className: "tw-flex tw-items-center tw-justify-center tw-gap-squid-xs tw-px-squid-m", children: [showLoader && jsxRuntime.jsx(Loader, {}), jsxRuntime.jsx(BodyText, { className: isLoading ? loadingClassname : "", size: "medium", children: label })] })) : size === "md" ? (label != null && icon == null ? (
4441
- // label only
4442
- jsxRuntime.jsx(BodyText, { className: isLoading ? loadingClassname : "", size: "small", children: label })) : label == null && icon != null ? (
4443
- // icon only
4444
- isLoading ? null : (icon)) : (
4445
- // icon and label
4446
- jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [icon, jsxRuntime.jsx(BodyText, { className: "tw-pr-1", size: "small", children: label })] }))) : null })] }));
4447
- const className = cn(baseButtonClassName, buttonSizeClassMap[size], buttonWidthClassnameMap[size], buttonVariantClassMap[size][variant], "tw-border-material-light-thin", !disabled && !isLoading && "hover:tw-border-material-light-average", roundedClassMap[size][variant],
4514
+ const children = (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [!disabled && !isLoading && (jsxRuntime.jsx(ButtonHoverOverlay, { className: buttonRoundedClassMap[size][variant] })), jsxRuntime.jsx("div", { className: "tw-relative tw-z-[5] tw-flex tw-items-center tw-justify-center tw-gap-squid-xxs", children: label == null && icon == null && !showLoader ? (props.children) : (jsxRuntime.jsxs("span", { className: cn("tw-flex tw-items-center tw-justify-center", size === "lg"
4515
+ ? "tw-gap-squid-xs tw-px-squid-m"
4516
+ : "tw-gap-squid-xxs"), children: [showLoader && jsxRuntime.jsx(Loader, { size: loaderSizeMap[loaderSize] }), !isLoading && icon, label != null &&
4517
+ (size === "sm" ? (jsxRuntime.jsx(CaptionText, { className: cn(isLoading && loadingClassname, icon != null && "tw-pr-1"), children: label })) : (jsxRuntime.jsx(BodyText, { className: cn(isLoading && loadingClassname, icon != null && "tw-pr-1"), size: size === "lg" ? "medium" : "small", children: label })))] })) })] }));
4518
+ const className = cn(baseButtonClassName, buttonSizeClassMap[size], buttonWidthClassnameMap[size], buttonVariantClassMap[size][variant], "tw-border-material-light-thin", !disabled && !isLoading && "hover:tw-border-material-light-average", buttonRoundedClassMap[size][variant],
4448
4519
  // disabled styles
4449
4520
  disabled && buttonDisabledClass, isLoading && "tw-cursor-not-allowed",
4450
4521
  // custom classes from props
4451
4522
  props.className);
4452
- const ButtonWrapper = ({ children }) => (jsxRuntime.jsx("div", { className: cn("tw-relative", buttonWidthClassnameMap[size], roundedClassMap[size][variant], containerClassName), children: children }));
4523
+ const buttonWrapperProps = {
4524
+ className: containerClassName,
4525
+ size,
4526
+ variant,
4527
+ };
4453
4528
  if (link != null) {
4454
- return (jsxRuntime.jsxs(ButtonWrapper, { children: [jsxRuntime.jsx("a", { ref: anchorRef, "aria-disabled": disabled, href: disabled ? undefined : link, target: "_blank", className: className, rel: "noreferrer", children: children }), chipElement] }));
4529
+ return (jsxRuntime.jsxs(ButtonWrapper, Object.assign({}, buttonWrapperProps, { children: [jsxRuntime.jsx("a", { ref: anchorRef, "aria-disabled": disabled, href: disabled ? undefined : link, target: "_blank", className: className, rel: "noreferrer", children: children }), chipElement] })));
4455
4530
  }
4456
- return (jsxRuntime.jsxs(ButtonWrapper, { children: [jsxRuntime.jsx("button", Object.assign({}, props, { type: "button", ref: buttonRef, "aria-disabled": disabled || isLoading, className: className, disabled: disabled || isLoading, children: children })), chipElement] }));
4531
+ return (jsxRuntime.jsxs(ButtonWrapper, Object.assign({}, buttonWrapperProps, { children: [jsxRuntime.jsx("button", Object.assign({}, props, { type: "button", ref: buttonRef, "aria-disabled": disabled || isLoading, className: className, disabled: disabled || isLoading, children: children })), chipElement] })));
4457
4532
  }
4458
4533
  const ButtonHoverOverlay = ({ className }) => {
4459
4534
  return (jsxRuntime.jsx("span", { className: cn("tw-absolute tw-inset-0 tw-z-0 tw-hidden tw-h-full tw-w-full tw-bg-material-light-thin group-hover/base-button:tw-block", className) }));
4460
4535
  };
4536
+ const ButtonWrapper = ({ children, size, variant, className, }) => (jsxRuntime.jsx("div", { className: cn("tw-relative", buttonWidthClassnameMap[size], buttonRoundedClassMap[size][variant], className), children: children }));
4461
4537
 
4462
4538
  function AccountsButton(_a) {
4463
4539
  var { imageUrls } = _a, props = __rest$1(_a, ["imageUrls"]);
@@ -4483,6 +4559,26 @@ function ArrowButton(_a) {
4483
4559
  "aria-disabled:tw-bg-grey-600 aria-disabled:tw-text-grey-800"), children: jsxRuntime.jsx(ArrowRightIcon, {}) })] })));
4484
4560
  }
4485
4561
 
4562
+ const colors = [
4563
+ "#D94E41",
4564
+ "#E58845",
4565
+ "#D9BA21",
4566
+ "#B1CC29",
4567
+ "#66CC33",
4568
+ "#19A654",
4569
+ "#56BFB6",
4570
+ "#45B0E5",
4571
+ "#3973E5",
4572
+ "#7562D9",
4573
+ "#B167E5",
4574
+ "#E573BF",
4575
+ ];
4576
+ function useColorFromSeed(seed) {
4577
+ return React$1.useMemo(() => {
4578
+ return colors[hashStringToIndex(seed, colors.length)];
4579
+ }, [seed]);
4580
+ }
4581
+
4486
4582
  function Input(_a) {
4487
4583
  var { placeholder = "Search", showIcon = true, className, icon, isError = false, isWarning = false, containerClassName, actionButtonProps, autoFocusTimeout, inputRef: inputRefProp } = _a, props = __rest$1(_a, ["placeholder", "showIcon", "className", "icon", "isError", "isWarning", "containerClassName", "actionButtonProps", "autoFocusTimeout", "inputRef"]);
4488
4584
  const showActionButton = actionButtonProps != null;
@@ -18869,8 +18965,8 @@ function DetailsToolbar({ errorMessage, helpButton, isLoading, isEmpty, flipButt
18869
18965
  "group-hover/flip-button:tw-rotate-180") }) }) }))) }), jsxRuntime.jsx("div", { className: cn(detailClassName, "tw-justify-end"), children: !!stopsButton && jsxRuntime.jsx(StopsButton, Object.assign({}, stopsButton)) })] })) }));
18870
18966
  }
18871
18967
 
18872
- function DropdownMenu({ dropdownRef, className, menuRef, isHidden = false, listClassName, containerClassName, children, contentWrapperProps, menuContentClassName, }) {
18873
- return (jsxRuntime.jsx("div", { ref: dropdownRef, className: cn("tw-relative", containerClassName), children: jsxRuntime.jsx(Menu, { menuRef: menuRef, rounded: "sm", containerClassName: cn("tw-absolute tw-right-0 tw-z-30", className), contentClassName: cn("!tw-p-0", menuContentClassName), contentWrapperProps: contentWrapperProps, children: !isHidden && (jsxRuntime.jsx("ul", { className: cn("tw-flex tw-max-w-full tw-flex-col tw-gap-squid-xxs tw-px-0 tw-py-squid-xxs", listClassName), children: children })) }) }));
18968
+ function DropdownMenu({ dropdownRef, className, menuRef, isHidden = false, listClassName, containerClassName, children, contentWrapperProps, menuContentClassName, trigger, }) {
18969
+ return (jsxRuntime.jsxs("div", { ref: dropdownRef, className: cn("tw-relative", containerClassName), children: [trigger, jsxRuntime.jsx(Menu, { menuRef: menuRef, rounded: "sm", containerClassName: cn("tw-absolute tw-right-0 tw-z-30", className), contentClassName: cn("!tw-p-0", menuContentClassName), contentWrapperProps: contentWrapperProps, children: !isHidden && (jsxRuntime.jsx("ul", { className: cn("tw-flex tw-max-w-full tw-flex-col tw-gap-squid-xxs tw-px-0 tw-py-squid-xxs", listClassName), children: children })) })] }));
18874
18970
  }
18875
18971
 
18876
18972
  function InfoBox({ title, description, icon }) {
@@ -19031,19 +19127,20 @@ function AccountListItem({ isConnected, imageUrls = [], imageUrl, badgeUrl, acti
19031
19127
 
19032
19128
  const SPACING = 10;
19033
19129
  function useDropdownMenu(props) {
19034
- const { initialIsModalOpen, itemsContainerRef } = props !== null && props !== void 0 ? props : {};
19035
- const [isDropdownOpen, setIsModalOpen] = React$1.useState(Boolean(initialIsModalOpen));
19130
+ const { initialIsDropdownOpen, itemsContainerRef } = props !== null && props !== void 0 ? props : {};
19131
+ const [isDropdownOpen, setIsDropdownOpen] = React$1.useState(Boolean(initialIsDropdownOpen));
19036
19132
  const dropdownRef = React$1.useRef(null);
19037
19133
  const openDropdownButtonRef = React$1.useRef(null);
19038
19134
  React$1.useEffect(() => {
19039
19135
  const handleClickOutside = (event) => {
19040
- // close modal if the user clicked outside of it
19136
+ // close dropdown if the user clicked outside of it
19041
19137
  var _a;
19042
- if (dropdownRef.current &&
19138
+ const hasClickedOutside = dropdownRef.current &&
19043
19139
  event.target !== openDropdownButtonRef.current &&
19044
19140
  !dropdownRef.current.contains(event.target) &&
19045
- !((_a = openDropdownButtonRef.current) === null || _a === void 0 ? void 0 : _a.contains(event.target))) {
19046
- setIsModalOpen(false);
19141
+ !((_a = openDropdownButtonRef.current) === null || _a === void 0 ? void 0 : _a.contains(event.target));
19142
+ if (hasClickedOutside) {
19143
+ setIsDropdownOpen(false);
19047
19144
  }
19048
19145
  };
19049
19146
  if (isDropdownOpen) {
@@ -19054,10 +19151,10 @@ function useDropdownMenu(props) {
19054
19151
  };
19055
19152
  }, [dropdownRef, isDropdownOpen]);
19056
19153
  const openDropdown = React$1.useCallback(() => {
19057
- setIsModalOpen((prev) => !prev);
19154
+ setIsDropdownOpen((prev) => !prev);
19058
19155
  }, []);
19059
19156
  const closeDropdown = React$1.useCallback(() => {
19060
- setIsModalOpen(false);
19157
+ setIsDropdownOpen(false);
19061
19158
  }, []);
19062
19159
  const [dropdownStyles, setDropdownStyles] = React$1.useState(null);
19063
19160
  const itemRef = React$1.useRef(null);
@@ -19097,10 +19194,11 @@ function useDropdownMenu(props) {
19097
19194
  // if the dropdown is not visible at top or bottom of the item
19098
19195
  // we just center it
19099
19196
  if (!isDropdownVisibleAtItemTopOrBottom) {
19100
- return setDropdownStyles({
19197
+ setDropdownStyles({
19101
19198
  position: "center",
19102
19199
  maxHeight,
19103
19200
  });
19201
+ return;
19104
19202
  }
19105
19203
  // finally, if the dropdown fits, position it where it has more space
19106
19204
  if (distanceBetweenItemBottomAndContainerBottomEdge >=
@@ -19374,7 +19472,7 @@ const collapsedListItemClassMap = {
19374
19472
  large: "tw-w-[80px]",
19375
19473
  };
19376
19474
  function ListItem(_a) {
19377
- var { itemTitle, mainImageUrl, subtitle, subtitleOnHover, detail, icon, secondaryImageUrl, placeholderImageUrl, size = "large", mainIcon, className, isSelected = false, onDetailClick, showDetailOnHoverOnly, rounded = "xxs", detailButtonClassName, loading, containerProps, compactOnMobile, extraPadding = true, itemsContainerRef, dropdownMenuContent, imageGroup, multilineSubtitle = false } = _a, props = __rest$1(_a, ["itemTitle", "mainImageUrl", "subtitle", "subtitleOnHover", "detail", "icon", "secondaryImageUrl", "placeholderImageUrl", "size", "mainIcon", "className", "isSelected", "onDetailClick", "showDetailOnHoverOnly", "rounded", "detailButtonClassName", "loading", "containerProps", "compactOnMobile", "extraPadding", "itemsContainerRef", "dropdownMenuContent", "imageGroup", "multilineSubtitle"]);
19475
+ var { itemTitle, mainImageUrl, subtitle, subtitleOnHover, detail, icon, secondaryImageUrl, placeholderImageUrl, size = "large", mainIcon, className, isSelected = false, onDetailClick, showDetailOnHoverOnly, rounded = "xxs", detailButtonClassName, loading, containerProps, compactOnMobile, extraPadding = true, itemsContainerRef, dropdownMenuContent, imageGroup, multilineSubtitle = false, control } = _a, props = __rest$1(_a, ["itemTitle", "mainImageUrl", "subtitle", "subtitleOnHover", "detail", "icon", "secondaryImageUrl", "placeholderImageUrl", "size", "mainIcon", "className", "isSelected", "onDetailClick", "showDetailOnHoverOnly", "rounded", "detailButtonClassName", "loading", "containerProps", "compactOnMobile", "extraPadding", "itemsContainerRef", "dropdownMenuContent", "imageGroup", "multilineSubtitle", "control"]);
19378
19476
  const { isDropdownOpen, dropdownRef, openDropdown, closeDropdown, openDropdownButtonRef, itemRef, menuRef, dropdownStyles, } = useDropdownMenu({
19379
19477
  itemsContainerRef,
19380
19478
  });
@@ -19410,9 +19508,11 @@ function ListItem(_a) {
19410
19508
  }
19411
19509
  return null;
19412
19510
  };
19413
- const isInteractive = !!props.onClick;
19414
- const ItemTag = isInteractive ? "button" : "div";
19415
- const itemProps = isInteractive ? props : {};
19511
+ const isInteractive = !!props.onClick || !!control;
19512
+ const ItemTag = isInteractive ? (control ? "label" : "button") : "div";
19513
+ const itemProps = isInteractive
19514
+ ? props
19515
+ : {};
19416
19516
  const handleInteraction = (e) => {
19417
19517
  var _a;
19418
19518
  e.preventDefault();
@@ -19429,9 +19529,9 @@ function ListItem(_a) {
19429
19529
  };
19430
19530
  return (jsxRuntime.jsxs("li", Object.assign({}, containerProps, { ref: itemRef, className: cn("tw-relative tw-flex tw-max-w-full tw-bg-grey-900 tw-text-grey-300 tw-highlight-adjacent", !multilineSubtitle && listItemSizeMap[size], extraPadding && "tw-px-squid-xs", compactOnMobile
19431
19531
  ? `${collapsedListItemClassMap[size]} mobile-lg:tw-w-full`
19432
- : "tw-w-full", className), children: [jsxRuntime.jsxs(ItemTag, Object.assign({}, itemProps, { onClick: handleItemClick, className: cn("tw-group/list-item tw-peer/list-item tw-relative tw-flex tw-w-full tw-max-w-full tw-justify-start tw-gap-squid-xs tw-rounded-squid-s tw-px-squid-xs", !multilineSubtitle
19532
+ : "tw-w-full", className), children: [jsxRuntime.jsxs(ItemTag, Object.assign({}, itemProps, { onClick: control == null ? handleItemClick : undefined, className: cn("tw-group/list-item tw-peer/list-item tw-relative tw-flex tw-w-full tw-max-w-full tw-justify-start tw-gap-squid-xs tw-rounded-squid-s tw-px-squid-xs", !multilineSubtitle
19433
19533
  ? "tw-items-center tw-py-squid-xxs"
19434
- : "tw-py-squid-xs", (isSelected || isDropdownOpen) && "tw-bg-material-light-thin", isInteractive && "hover:tw-bg-material-light-thin", isInteractive && "tw-text-left tw-normal-case"), children: [size === "large" ? (jsxRuntime.jsx("div", { className: "tw-h-10 tw-w-10", children: mainIcon !== null && mainIcon !== void 0 ? mainIcon : (imageGroup != null ? (jsxRuntime.jsx(ImageGroup, { size: "small", imageUrls: imageGroup })) : (jsxRuntime.jsx(BadgeImage, { image: {
19534
+ : "tw-py-squid-xs", (isSelected || isDropdownOpen) && "tw-bg-material-light-thin", isInteractive && control == null && "hover:tw-bg-material-light-thin", isInteractive && "tw-text-left tw-normal-case"), children: [size === "large" ? (jsxRuntime.jsx("div", { className: "tw-h-10 tw-w-10", children: mainIcon !== null && mainIcon !== void 0 ? mainIcon : (imageGroup != null ? (jsxRuntime.jsx(ImageGroup, { size: "small", imageUrls: imageGroup })) : (jsxRuntime.jsx(BadgeImage, { image: {
19435
19535
  src: mainImageUrl,
19436
19536
  placeholderImageUrl,
19437
19537
  size: "xlarge",
@@ -19451,7 +19551,7 @@ function ListItem(_a) {
19451
19551
  : "tw-flex", isDetailInteractive && "hover:tw-bg-material-light-thin", detailButtonClassName), children: [!!detail && (jsxRuntime.jsx(CaptionText, { className: "min-tw-w-4 min-tw-h-4 tw-px-squid-xxs tw-leading-[10px]", children: detail })), icon ? (jsxRuntime.jsx("span", { className: "tw-flex tw-items-center tw-justify-center tw-px-[3px] tw-py-2", children: icon })) : null] }))), !!dropdownMenuContent && (jsxRuntime.jsx(ListItemActionsButton, { ref: openDropdownButtonRef, onClick: (e) => {
19452
19552
  e.stopPropagation();
19453
19553
  isDropdownOpen ? closeDropdown() : openDropdown();
19454
- }, isActive: isDropdownOpen, className: "tw-z-20 peer-hover/list-item:tw-opacity-100" }))] })), isDropdownOpen && !!dropdownMenuContent ? (jsxRuntime.jsx(DropdownMenu, { menuRef: menuRef, isHidden: !dropdownStyles, className: cn(!!dropdownStyles &&
19554
+ }, isActive: isDropdownOpen, className: "tw-z-20 peer-hover/list-item:tw-opacity-100" })), control] })), isDropdownOpen && !!dropdownMenuContent ? (jsxRuntime.jsx(DropdownMenu, { menuRef: menuRef, isHidden: !dropdownStyles, className: cn(!!dropdownStyles &&
19455
19555
  dropdownPositionClassMap$1[dropdownStyles.position]), dropdownRef: dropdownRef, children: dropdownMenuContent })) : null] })));
19456
19556
  }
19457
19557
  const ListItemActionsButton = React$1.forwardRef((_a, ref) => {
@@ -27546,19 +27646,23 @@ function Switch({ checked = false, onChange, size, disabled = false, inputProps,
27546
27646
  // size styles
27547
27647
  switchSizeClassMap[size],
27548
27648
  // checked styles
27549
- checked ? "tw-bg-status-positive" : "tw-bg-grey-800",
27649
+ disabled || !checked ? "tw-bg-grey-800" : "tw-bg-status-positive",
27550
27650
  // disabled styles
27551
27651
  disabled ? "tw-cursor-not-allowed" : "tw-cursor-pointer",
27552
27652
  // Focus visible styles
27553
27653
  "tw-focus-visible-within-outline"), children: [jsxRuntime.jsx("input", Object.assign({}, inputProps, { 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: {
27554
- filter: "drop-shadow(0px 5px 20px rgba(0, 0, 0, 0.33)) drop-shadow(0px 2px 5px rgba(0, 0, 0, 0.20))",
27654
+ filter: disabled
27655
+ ? "drop-shadow(0px 5px 20px rgba(0, 0, 0, 0.10)) drop-shadow(0px 1px 5px rgba(0, 0, 0, 0.10))"
27656
+ : "drop-shadow(0px 5px 20px rgba(0, 0, 0, 0.33)) drop-shadow(0px 2px 5px rgba(0, 0, 0, 0.20))",
27555
27657
  }, className: clsx("tw-absolute tw-rounded-full tw-border tw-border-material-light-thin tw-transition-all",
27556
27658
  // size styles
27557
27659
  switchKnobSizeClassMap[size],
27558
27660
  // checked styles
27559
- switchKnobCheckedClassMap[size][checked ? "checked" : "unchecked"], checked
27560
- ? "group-data-[squid-theme-type=dark]:tw-bg-grey-100 group-data-[squid-theme-type=light]:tw-bg-grey-900"
27561
- : "tw-bg-grey-500") })] }));
27661
+ switchKnobCheckedClassMap[size][checked ? "checked" : "unchecked"], disabled
27662
+ ? "group-data-[squid-theme-type=dark]:tw-bg-grey-700 group-data-[squid-theme-type=light]:tw-bg-grey-900"
27663
+ : checked
27664
+ ? "group-data-[squid-theme-type=dark]:tw-bg-grey-100 group-data-[squid-theme-type=light]:tw-bg-grey-900"
27665
+ : "tw-bg-grey-500") })] }));
27562
27666
  }
27563
27667
 
27564
27668
  function RangeInput({ label, initialValue, onChange, min = 0, max = 99, isWarning = false, }) {
@@ -27672,7 +27776,8 @@ function RangeInput({ label, initialValue, onChange, min = 0, max = 99, isWarnin
27672
27776
  }, onMouseLeave: handleUpdateValue, className: cn("tw-relative tw-flex tw-h-full tw-items-center tw-justify-center tw-self-stretch tw-rounded-squid-xs tw-p-squid-xxs tw-text-left tw-text-caption tw-font-caption tw-leading-[10px] placeholder-shown:tw-text-grey-600 hover:tw-bg-material-light-thin"), children: jsxRuntime.jsx(CirclePlusIcon, {}) })] })] }) }));
27673
27777
  }
27674
27778
 
27675
- const imageClass = "tw-w-[40px] tw-aspect-square tw-flex tw-items-center tw-justify-center";
27779
+ const imageWrapperClassName = "tw-w-[40px] tw-aspect-square tw-flex tw-items-center tw-justify-center";
27780
+ const tokenImageClassName = "tw-absolute tw-h-squid-xl tw-w-squid-xl tw-rounded-full tw-object-cover";
27676
27781
  const themeKeyVariantMap = {
27677
27782
  primary: "grey-800",
27678
27783
  accent: "royal-500",
@@ -27692,6 +27797,12 @@ var AssetsButtonState;
27692
27797
  AssetsButtonState[AssetsButtonState["EMPTY"] = 2] = "EMPTY";
27693
27798
  AssetsButtonState[AssetsButtonState["LOADING"] = 3] = "LOADING";
27694
27799
  })(AssetsButtonState || (AssetsButtonState = {}));
27800
+ var ImageLoadingState;
27801
+ (function (ImageLoadingState) {
27802
+ ImageLoadingState[ImageLoadingState["LOADING"] = 0] = "LOADING";
27803
+ ImageLoadingState[ImageLoadingState["LOADED"] = 1] = "LOADED";
27804
+ ImageLoadingState[ImageLoadingState["ERROR"] = 2] = "ERROR";
27805
+ })(ImageLoadingState || (ImageLoadingState = {}));
27695
27806
  const outlineWidthMap = {
27696
27807
  [AssetsButtonState.LOADING]: {
27697
27808
  inner: 75,
@@ -27711,7 +27822,9 @@ const outlineWidthMap = {
27711
27822
  },
27712
27823
  };
27713
27824
  function AssetsButton({ chain, token, onClick, variant = "primary", isLoading = false, tooltip, emptyTokenLabel = "Select token", }) {
27714
- var _a, _b;
27825
+ var _a, _b, _c, _d;
27826
+ const [tokenImageLoadingState, setTokenImageLoadingState] = React$1.useState(ImageLoadingState.LOADING);
27827
+ const fallbackBgColor = useColorFromSeed((_a = token === null || token === void 0 ? void 0 : token.symbol) !== null && _a !== void 0 ? _a : "");
27715
27828
  const state = React$1.useMemo(() => {
27716
27829
  if (chain != null && !isLoading) {
27717
27830
  if (token != null) {
@@ -27726,10 +27839,27 @@ function AssetsButton({ chain, token, onClick, variant = "primary", isLoading =
27726
27839
  }, [token, chain, isLoading]);
27727
27840
  const defaultBgColor = `var(${themeKeysToCssVariables.color[themeKeyVariantMap[variant]].cssVariable})`;
27728
27841
  const outlineWidth = outlineWidthMap[state];
27729
- const chainBgColor = (_a = chain === null || chain === void 0 ? void 0 : chain.bgColor) !== null && _a !== void 0 ? _a : defaultBgColor;
27730
- const tokenBgColor = state === AssetsButtonState.FULL
27731
- ? (_b = token === null || token === void 0 ? void 0 : token.bgColor) !== null && _b !== void 0 ? _b : defaultBgColor
27732
- : defaultBgColor;
27842
+ const chainBgColor = (_b = chain === null || chain === void 0 ? void 0 : chain.bgColor) !== null && _b !== void 0 ? _b : defaultBgColor;
27843
+ const tokenTextColor = tokenImageLoadingState === ImageLoadingState.ERROR
27844
+ ? "#fff"
27845
+ : token === null || token === void 0 ? void 0 : token.textColor;
27846
+ const tokenBgColor = React$1.useMemo(() => {
27847
+ if (state !== AssetsButtonState.FULL) {
27848
+ return defaultBgColor;
27849
+ }
27850
+ if (tokenImageLoadingState === ImageLoadingState.ERROR) {
27851
+ // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
27852
+ return fallbackBgColor || defaultBgColor;
27853
+ }
27854
+ // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
27855
+ return (token === null || token === void 0 ? void 0 : token.bgColor) || defaultBgColor;
27856
+ }, [
27857
+ state,
27858
+ token === null || token === void 0 ? void 0 : token.bgColor,
27859
+ defaultBgColor,
27860
+ tokenImageLoadingState,
27861
+ fallbackBgColor,
27862
+ ]);
27733
27863
  const bgGradient = React$1.useMemo(() => {
27734
27864
  switch (state) {
27735
27865
  case AssetsButtonState.EMPTY:
@@ -27747,12 +27877,22 @@ function AssetsButton({ chain, token, onClick, variant = "primary", isLoading =
27747
27877
  ? "tw-cursor-not-allowed"
27748
27878
  : "tw-group/assets-button"), children: [jsxRuntime.jsx("svg", { className: "tw-absolute tw-left-0 tw-z-10 tw-h-[40px] tw-w-[72px] tw-text-material-light-thin", viewBox: "0 0 72 40", xmlns: "http://www.w3.org/2000/svg", fill: "currentColor", children: jsxRuntime.jsx("path", { d: "m57.86 5.86c-.53.53-1.05 1.06-1.56 1.59-3.29 3.38-6.37 6.55-10.3 6.55s-7.01-3.17-10.3-6.55c-.51-.53-1.03-1.06-1.56-1.59-3.9-3.91-9.02-5.86-14.14-5.86s-10.24 1.95-14.14 5.86c-3.91 3.9-5.86 9.02-5.86 14.14s1.95 10.24 5.86 14.14c3.91 3.91 9.02 5.86 14.14 5.86s10.24-1.95 14.14-5.86c.52-.53 1.04-1.06 1.55-1.58 3.29-3.39 6.37-6.56 10.31-6.56s7.02 3.17 10.31 6.56c.51.53 1.03 1.06 1.55 1.58 3.91 3.91 9.02 5.86 14.14 5.86v-40c-5.12 0-10.24 1.95-14.14 5.86zm14.14 33.14c-5.07 0-9.85-1.98-13.43-5.56-.52-.52-1.02-1.04-1.54-1.57-3.43-3.53-6.67-6.86-11.02-6.86s-7.6 3.33-11.04 6.88c-.5.52-1.01 1.04-1.53 1.56-3.59 3.59-8.36 5.57-13.44 5.57s-9.85-1.98-13.43-5.57c-3.59-3.59-5.56-8.36-5.56-13.43s1.98-9.85 5.56-13.44c3.58-3.6 8.35-5.58 13.43-5.58s9.85 1.98 13.44 5.57c.52.52 1.04 1.05 1.55 1.58 3.43 3.53 6.66 6.86 11.02 6.86s7.59-3.33 11.02-6.86c.51-.52 1.02-1.05 1.55-1.58 3.59-3.59 8.36-5.56 13.43-5.56v38z" }) }), jsxRuntime.jsxs("svg", { className: "tw-absolute -tw-left-[2px] -tw-top-[2px] tw-z-20 tw-hidden group-hover/assets-button:tw-block", xmlns: "http://www.w3.org/2000/svg", width: outlineWidth.inner, height: "44", viewBox: `0 0 ${outlineWidth.inner} 44`, fill: "none", children: [jsxRuntime.jsx("clipPath", { id: "halfClip1", children: jsxRuntime.jsx("rect", { x: "0", y: "0", width: outlineWidth.inner, height: "44" }) }), jsxRuntime.jsx("path", { d: "M59.1506 36.849L59.1508 36.8492C63.2511 40.9496 68.6272 43 74.0001 43H145C156.598 43 166 33.598 166 22C166 10.402 156.598 1 145 1H74.0001C68.6272 0.999977 63.2511 3.05042 59.1508 7.15076C58.6183 7.68325 58.0958 8.22097 57.5842 8.74755L57.5817 8.75009C55.9228 10.4574 54.3925 12.0283 52.8031 13.1834C51.2282 14.3279 49.6791 15 48 15C46.3209 15 44.7718 14.3279 43.1969 13.1834C41.6075 12.0283 40.0772 10.4574 38.4183 8.75009L38.4159 8.74759C37.9042 8.22101 37.3817 7.68327 36.8492 7.15076C32.7489 3.05042 27.3728 0.999977 21.9999 1C16.6271 1.00002 11.251 3.05047 7.15076 7.15076C3.05045 11.2511 1 16.6272 1 22C1 27.3728 3.05045 32.7489 7.15076 36.8492C11.251 40.9495 16.6271 43 21.9999 43C27.3728 43 32.7489 40.9496 36.8492 36.8492L36.8494 36.849C37.3794 36.3188 37.8994 35.7834 38.4088 35.2589L38.4108 35.2569C40.0704 33.5483 41.6019 31.9756 43.1928 30.8191C44.7691 29.6731 46.3197 29 48 29C49.6803 29 51.2309 29.6731 52.8072 30.8191C54.3981 31.9756 55.9296 33.5483 57.5892 35.2569L57.5912 35.2589C58.1006 35.7834 58.6206 36.3188 59.1506 36.849Z", stroke: "currentColor", className: "tw-text-grey-900", strokeWidth: "2", clipPath: "url(#halfClip1)" })] }), jsxRuntime.jsxs("svg", { className: "tw-absolute -tw-left-[4px] -tw-top-[4px] tw-z-10 tw-hidden group-hover/assets-button:tw-block", xmlns: "http://www.w3.org/2000/svg", width: outlineWidth.outer, height: "48", viewBox: `0 0 ${outlineWidth.outer} 48`, fill: "none", children: [jsxRuntime.jsx("clipPath", { id: "halfClip2", children: jsxRuntime.jsx("rect", { x: "0", y: "0", width: outlineWidth.outer, height: "48" }) }), jsxRuntime.jsx("path", { d: "M60.4432 39.5559L60.4437 39.5564C64.7391 43.8517 70.3729 46 76.0001 46H147C159.15 46 169 36.1503 169 24C169 11.8497 159.15 2 147 2H76.0001C70.3729 1.99998 64.7391 4.14825 60.4437 8.44365C59.9062 8.98109 59.3797 9.52298 58.8697 10.0479L58.8645 10.0532C57.1905 11.7761 55.7217 13.2796 54.2152 14.3745C52.7378 15.4481 51.3923 16 50 16C48.6077 16 47.2622 15.4481 45.7848 14.3745C44.2783 13.2796 42.8095 11.7761 41.1355 10.0532L41.1305 10.0481C40.6205 9.52314 40.0939 8.98117 39.5563 8.44365C35.2609 4.14825 29.6271 1.99998 23.9999 2C18.3727 2.00002 12.739 4.1483 8.44365 8.44365C4.14827 12.739 2 18.3728 2 24C2 29.6272 4.14827 35.261 8.44365 39.5564C12.739 43.8517 18.3727 46 23.9999 46C29.6271 46 35.2609 43.8517 39.5563 39.5564L39.5568 39.5559C40.0917 39.0207 40.6159 38.481 41.1237 37.9582L41.1281 37.9537C42.8028 36.2295 44.2728 34.7243 45.7808 33.6279C47.2597 32.5528 48.6066 32 50 32C51.3934 32 52.7403 32.5528 54.2192 33.6279C55.7272 34.7243 57.1972 36.2295 58.8719 37.9537L58.8763 37.9582C59.3841 38.481 59.9083 39.0207 60.4432 39.5559Z", stroke: "currentColor", className: "tw-text-material-light-average", strokeWidth: "4", clipPath: "url(#halfClip2)" })] }), jsxRuntime.jsx("div", { className: cn("tw-assets-button-mask tw-flex tw-h-squid-xl tw-w-[92px] tw-items-center tw-justify-between", state !== AssetsButtonState.FULL && "!tw-w-[72px]"), style: {
27749
27879
  backgroundImage: bgGradient,
27750
- }, children: jsxRuntime.jsx("div", { className: clsx(imageClass), children: state === AssetsButtonState.CHAIN_ONLY ||
27751
- state === AssetsButtonState.FULL ? (jsxRuntime.jsx("img", { src: chain === null || chain === void 0 ? void 0 : chain.iconUrl, alt: "", className: "tw-h-squid-xl tw-w-squid-xl tw-rounded-full tw-object-cover" })) : (state !== AssetsButtonState.LOADING && (jsxRuntime.jsx("span", { className: emptyChainIconTextClassNameMap[variant], children: jsxRuntime.jsx(PlusIcon, {}) }))) }) }), state === AssetsButtonState.FULL ? (jsxRuntime.jsxs("div", { className: clsx(imageClass, "tw-absolute tw-left-[54px] tw-z-[5] tw-h-squid-xl tw-overflow-hidden"), children: [jsxRuntime.jsx("div", { className: "tw-absolute tw-right-0 tw-h-full tw-w-[22px]", style: {
27880
+ }, children: jsxRuntime.jsx("div", { className: clsx(imageWrapperClassName), children: state === AssetsButtonState.CHAIN_ONLY ||
27881
+ state === AssetsButtonState.FULL ? (jsxRuntime.jsx("img", { src: chain === null || chain === void 0 ? void 0 : chain.iconUrl, alt: "", className: "tw-h-squid-xl tw-w-squid-xl tw-rounded-full tw-object-cover" })) : (state !== AssetsButtonState.LOADING && (jsxRuntime.jsx("span", { className: emptyChainIconTextClassNameMap[variant], children: jsxRuntime.jsx(PlusIcon, {}) }))) }) }), state === AssetsButtonState.FULL ? (jsxRuntime.jsxs("div", { className: clsx(imageWrapperClassName, "tw-absolute tw-left-[54px] tw-z-[5] tw-h-squid-xl tw-overflow-hidden"), children: [jsxRuntime.jsx("div", { className: "tw-absolute tw-right-0 tw-h-full tw-w-[22px]", style: {
27752
27882
  backgroundColor: tokenBgColor,
27753
- } }), jsxRuntime.jsx("img", { src: token === null || token === void 0 ? void 0 : token.iconUrl, alt: token === null || token === void 0 ? void 0 : token.symbol, className: "tw-absolute tw-h-squid-xl tw-w-squid-xl tw-rounded-full tw-object-cover" }), jsxRuntime.jsx("div", { className: "tw-absolute tw-right-0 tw-h-full tw-w-[22px] tw-border-b\n tw-border-t tw-border-material-light-thin" })] })) : null, jsxRuntime.jsxs("div", { className: cn("tw-relative tw-flex tw-h-squid-xl tw-w-fit tw-min-w-fit tw-items-center tw-gap-squid-xxs tw-rounded-br-full tw-rounded-tr-full tw-border tw-border-l-0 tw-border-material-light-thin tw-py-squid-xs tw-pr-squid-xs before:tw-absolute before:-tw-inset-[3px] before:tw-z-[1] before:tw-w-[calc(100%+3px)] before:tw-translate-x-[3px] before:tw-rounded-br-full before:tw-rounded-tr-full before:tw-border-2 before:tw-border-l-0 before:tw-border-transparent after:tw-absolute after:-tw-inset-[5px] after:tw-z-0 after:tw-w-[calc(100%+4px)] after:tw-translate-x-[6px] after:tw-rounded-br-full after:tw-rounded-tr-full after:tw-border-4 after:tw-border-l-0 after:tw-border-transparent group-hover/assets-button:before:tw-border-grey-900 group-hover/assets-button:after:tw-border-material-light-average", state === AssetsButtonState.FULL && "tw-pl-[7px]"), style: {
27883
+ } }), tokenImageLoadingState === ImageLoadingState.ERROR && (
27884
+ // show fallback
27885
+ jsxRuntime.jsx("div", { style: { color: tokenTextColor }, className: cn(tokenImageClassName, "tw-flex tw-items-center tw-justify-center tw-text-body-small"), children: (_d = (_c = token === null || token === void 0 ? void 0 : token.symbol) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.toUpperCase() })), jsxRuntime.jsx("img", { onLoad: () => {
27886
+ setTokenImageLoadingState(ImageLoadingState.LOADED);
27887
+ }, onError: () => {
27888
+ setTokenImageLoadingState(ImageLoadingState.ERROR);
27889
+ }, src: token === null || token === void 0 ? void 0 : token.iconUrl, alt: token === null || token === void 0 ? void 0 : token.symbol, className: cn(tokenImageClassName,
27890
+ // when image load failed, hide it with opacity: 0 instead of display: none
27891
+ // so new images can load and update the loading state
27892
+ tokenImageLoadingState === ImageLoadingState.ERROR &&
27893
+ "tw-opacity-0") }), jsxRuntime.jsx("div", { className: "tw-absolute tw-right-0 tw-h-full tw-w-[22px] tw-border-b\n tw-border-t tw-border-material-light-thin" })] })) : null, jsxRuntime.jsxs("div", { className: cn("tw-relative tw-flex tw-h-squid-xl tw-w-fit tw-min-w-fit tw-items-center tw-gap-squid-xxs tw-rounded-br-full tw-rounded-tr-full tw-border tw-border-l-0 tw-border-material-light-thin tw-py-squid-xs tw-pr-squid-xs before:tw-absolute before:-tw-inset-[3px] before:tw-z-[1] before:tw-w-[calc(100%+3px)] before:tw-translate-x-[3px] before:tw-rounded-br-full before:tw-rounded-tr-full before:tw-border-2 before:tw-border-l-0 before:tw-border-transparent after:tw-absolute after:-tw-inset-[5px] after:tw-z-0 after:tw-w-[calc(100%+4px)] after:tw-translate-x-[6px] after:tw-rounded-br-full after:tw-rounded-tr-full after:tw-border-4 after:tw-border-l-0 after:tw-border-transparent group-hover/assets-button:before:tw-border-grey-900 group-hover/assets-button:after:tw-border-material-light-average", state === AssetsButtonState.FULL && "tw-pl-[7px]"), style: {
27754
27894
  backgroundColor: tokenBgColor,
27755
- color: token === null || token === void 0 ? void 0 : token.textColor,
27895
+ color: tokenTextColor,
27756
27896
  }, children: [jsxRuntime.jsx(BodyText, { size: "small", className: cn("tw-leading-[13px]", state === AssetsButtonState.LOADING && "tw-min-w-[135px]"), children: state === AssetsButtonState.FULL
27757
27897
  ? token === null || token === void 0 ? void 0 : token.symbol
27758
27898
  : state !== AssetsButtonState.LOADING && emptyTokenLabel }), state !== AssetsButtonState.LOADING && (jsxRuntime.jsx(ChevronLargeRightIcon, { className: "tw-w-4 tw-min-w-4 tw-opacity-66" }))] })] }) })));
@@ -69218,7 +69358,7 @@ const swapProgressButtonTexts = {
69218
69358
  [SwapState.PARTIAL_SUCCESS]: "Cancel",
69219
69359
  [SwapState.NEEDS_GAS]: "Go to Axelarscan",
69220
69360
  };
69221
- function SwapProgressView({ steps, isOpen = true, handleClose, handleComplete, socialLink, supportLink, fromAmount, fromChain, fromToken, toAmount, toChain, toToken, fromAddressFormatted, toAddressFormatted, swapState, estimatedTimeToComplete, footerButton, refundTokenSymbol, addGasLink, }) {
69361
+ function SwapProgressView({ steps, isOpen = true, handleClose, handleComplete, supportLink, fromAmount, fromChain, fromToken, toAmount, toChain, toToken, fromAddressFormatted, toAddressFormatted, swapState, estimatedTimeToComplete, footerButton, refundTokenSymbol, addGasLink, shareSwapDropdownContent, }) {
69222
69362
  const [showSwapInfoSection, setShowSwapInfoSection] = React$1.useState(true);
69223
69363
  const isFirstRenderRef = React$1.useRef(true);
69224
69364
  const { timer, stopTimer, startTimer } = useTimer({
@@ -69277,7 +69417,7 @@ function SwapProgressView({ steps, isOpen = true, handleClose, handleComplete, s
69277
69417
  height: "100%",
69278
69418
  maxHeight: "100%",
69279
69419
  width: "auto",
69280
- }, autoplay: true, loop: true, src: swapProgressAnimations[swapState] }) }), jsxRuntime.jsx("div", { className: "tw-relative tw-flex tw-h-squid-m tw-w-full tw-items-end tw-justify-between tw-self-stretch tw-px-squid-m", children: swapState === SwapState.COMPLETED ? (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("span", { className: "-tw-mb-1 -tw-ml-1", children: jsxRuntime.jsx(SwapSuccessIcon, {}) }), jsxRuntime.jsx(Button$1, { size: "md", variant: "secondary", icon: jsxRuntime.jsx(XSocial, {}), label: "Share", link: socialLink, title: "Share on X" })] })) : swapState === SwapState.ERROR ? (jsxRuntime.jsx(SwapErrorTopMenu, { supportLink: supportLink, type: "error" })) : swapState === SwapState.PARTIAL_SUCCESS ? (jsxRuntime.jsx(SwapErrorTopMenu, { supportLink: supportLink, type: "warning" })) : (jsxRuntime.jsx(TokenPair, { firstToken: {
69420
+ }, autoplay: true, loop: true, src: swapProgressAnimations[swapState] }) }), jsxRuntime.jsx("div", { className: "tw-relative tw-flex tw-h-squid-m tw-w-full tw-items-end tw-justify-between tw-self-stretch tw-px-squid-m", children: swapState === SwapState.COMPLETED ? (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("span", { className: "-tw-mb-1 -tw-ml-1", children: jsxRuntime.jsx(SwapSuccessIcon, {}) }), jsxRuntime.jsx(ShareSwapButton, { dropdownContent: shareSwapDropdownContent })] })) : swapState === SwapState.ERROR ? (jsxRuntime.jsx(SwapErrorTopMenu, { supportLink: supportLink, type: "error" })) : swapState === SwapState.PARTIAL_SUCCESS ? (jsxRuntime.jsx(SwapErrorTopMenu, { supportLink: supportLink, type: "warning" })) : (jsxRuntime.jsx(TokenPair, { firstToken: {
69281
69421
  bgColor: fromToken.bgColor,
69282
69422
  logoURI: fromToken.logoUrl,
69283
69423
  }, secondToken: {
@@ -69301,8 +69441,6 @@ const TrackTransactionView = React$1.forwardRef((props, ref) => {
69301
69441
  currentStepIndex: rawSteps.length - 1,
69302
69442
  };
69303
69443
  }
69304
- // Vercel build throws an error for findLastIndex, probably related to the Node version being used
69305
- // @ts-expect-error - TODO: Fix this
69306
69444
  const lastSuccessfulStepIndex = rawSteps.findLastIndex((s) => s.status === "executed" || s.status === "success");
69307
69445
  if (swapState === SwapState.PROGRESS) {
69308
69446
  onTxStart();
@@ -69340,8 +69478,6 @@ const TrackTransactionView = React$1.forwardRef((props, ref) => {
69340
69478
  };
69341
69479
  }
69342
69480
  if (swapState === SwapState.PARTIAL_SUCCESS) {
69343
- // Vercel build throws an error for findLastIndex, probably related to the Node version being used
69344
- // @ts-expect-error - TODO: Fix this
69345
69481
  const lastWarningStepIndex = rawSteps.findLastIndex((s) => s.status === "warning");
69346
69482
  if (lastWarningStepIndex !== -1) {
69347
69483
  return {
@@ -69375,6 +69511,15 @@ const SwapErrorTopMenu = ({ supportLink, type, }) => {
69375
69511
  return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("span", { className: "-tw-mb-1 -tw-ml-1", children: type === "error" ? jsxRuntime.jsx(SwapErrorIcon, {}) : jsxRuntime.jsx(SwapWarningIcon, {}) }), jsxRuntime.jsx(Button$1, { size: "md", variant: "secondary", label: "Get help", link: supportLink, title: "Contact support" })] }));
69376
69512
  };
69377
69513
  TrackTransactionView.displayName = "TrackTransactionView";
69514
+ function ShareSwapButton({ dropdownContent, }) {
69515
+ const containerRef = useContainerStore((state) => state.containerRef);
69516
+ const { dropdownRef, isDropdownOpen, openDropdown, menuRef } = useDropdownMenu({
69517
+ itemsContainerRef: containerRef,
69518
+ });
69519
+ return (jsxRuntime.jsx(DropdownMenu, { dropdownRef: dropdownRef, menuRef: menuRef, className: "-tw-bottom-[calc(100%+5px)] tw-left-1/2 tw-right-[unset] tw-top-[calc(100%+5px)] -tw-translate-x-1/2", isHidden: !isDropdownOpen, trigger: jsxRuntime.jsx(Button$1, { size: "md", variant: "secondary", onClick: () => {
69520
+ openDropdown();
69521
+ }, children: jsxRuntime.jsxs("div", { className: "tw-flex tw-items-center", children: [jsxRuntime.jsx(BodyText, { size: "small", className: "tw-px-squid-xxs", children: "Share" }), jsxRuntime.jsx(ChevronDownSmallIcon, { size: "24", strokeWidth: "1.5" })] }) }), children: dropdownContent }));
69522
+ }
69378
69523
 
69379
69524
  function TransactionViewLayout(_a) {
69380
69525
  var { isLoading, header, properties, actions, fees } = _a, props = __rest$1(_a, ["isLoading", "header", "properties", "actions", "fees"]);
@@ -69832,6 +69977,7 @@ exports.ChevronRightSmallIcon = ChevronRightSmallIcon;
69832
69977
  exports.ChevronTopIcon = ChevronTopIcon;
69833
69978
  exports.ChevronTopSmallIcon = ChevronTopSmallIcon;
69834
69979
  exports.Chip = Chip;
69980
+ exports.CircleCheckIcon = CircleCheckIcon;
69835
69981
  exports.CircleMinusIcon = CircleMinusIcon;
69836
69982
  exports.CirclePlusIcon = CirclePlusIcon;
69837
69983
  exports.CircleX = CircleX;
@@ -69851,8 +69997,7 @@ exports.CommandIcon = CommandIcon;
69851
69997
  exports.CompassRoundOutlinedIcon = CompassRoundOutlinedIcon;
69852
69998
  exports.CompassRoundSolidIcon = CompassRoundSolidIcon;
69853
69999
  exports.ConsoleIcon = ConsoleIcon;
69854
- exports.Copy = Copy;
69855
- exports.CopyIcon = CopyIcon;
70000
+ exports.Copy2Icon = Copy2Icon;
69856
70001
  exports.CopyOutlinedIcon = CopyOutlinedIcon;
69857
70002
  exports.CrossAnimatedIcon = CrossAnimatedIcon;
69858
70003
  exports.CrossedOutSunSolidIcon = CrossedOutSunSolidIcon;
@@ -69881,6 +70026,7 @@ exports.ErrorMessage = ErrorMessage;
69881
70026
  exports.EthereumIcon = EthereumIcon;
69882
70027
  exports.ExplosionIcon = ExplosionIcon;
69883
70028
  exports.EyeOpenIcon = EyeOpenIcon;
70029
+ exports.FarcasterIcon = FarcasterIcon;
69884
70030
  exports.FavouriteFilterIcon = FavouriteFilterIcon;
69885
70031
  exports.FeeButton = FeeButton;
69886
70032
  exports.FeesAction = FeesAction;
@@ -69950,6 +70096,7 @@ exports.PercentIcon = PercentIcon;
69950
70096
  exports.PhoneIcon = PhoneIcon;
69951
70097
  exports.PieChartIcon = PieChartIcon;
69952
70098
  exports.PipeSeparator = PipeSeparator;
70099
+ exports.PluginIcon = PluginIcon;
69953
70100
  exports.PlusIcon = PlusIcon;
69954
70101
  exports.PoopIcon = PoopIcon;
69955
70102
  exports.PowerIcon = PowerIcon;
@@ -70018,6 +70165,7 @@ exports.Tab = Tab;
70018
70165
  exports.Tabs = Tabs;
70019
70166
  exports.TagIcon = TagIcon;
70020
70167
  exports.TagIconFilled = TagIconFilled;
70168
+ exports.TelegramIcon = TelegramIcon;
70021
70169
  exports.TextSkeleton = TextSkeleton;
70022
70170
  exports.ThemeProvider = ThemeProvider;
70023
70171
  exports.ThumbsUp = ThumbsUp;
@@ -70052,10 +70200,11 @@ exports.WalletFilledIcon = WalletFilledIcon;
70052
70200
  exports.WalletIcon = WalletIcon;
70053
70201
  exports.WalletLink = WalletLink;
70054
70202
  exports.WrapAction = WrapAction;
70055
- exports.XSocial = XSocial;
70203
+ exports.XSocialIcon = XSocialIcon;
70056
70204
  exports.adjustColorForContrast = adjustColorForContrast;
70057
70205
  exports.baseTailwindConfig = baseTailwindConfig;
70058
70206
  exports.blendColors = blendColors;
70207
+ exports.buttonRoundedClassMap = buttonRoundedClassMap;
70059
70208
  exports.cn = cn;
70060
70209
  exports.darkTheme = darkTheme;
70061
70210
  exports.getColorBrightness = getColorBrightness;