@deframe-sdk/components 0.1.11 → 0.1.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -2,10 +2,10 @@
2
2
 
3
3
  var tailwindMerge = require('tailwind-merge');
4
4
  var jsxRuntime = require('react/jsx-runtime');
5
+ var hi2 = require('react-icons/hi2');
5
6
  var React6 = require('react');
6
7
  var framerMotion = require('framer-motion');
7
8
  var md = require('react-icons/md');
8
- var hi2 = require('react-icons/hi2');
9
9
  var io5 = require('react-icons/io5');
10
10
 
11
11
  function _interopNamespace(e) {
@@ -108,6 +108,20 @@ function ActionButton(_a) {
108
108
  })
109
109
  );
110
110
  }
111
+ var CloseButton = ({ onClick, testId, ariaLabel = "Close", className }) => {
112
+ const baseClasses = "w-12 h-12 rounded-[var(--deframe-widget-size-radius-full)] flex items-center justify-center text-[color:var(--deframe-widget-color-text-secondary)] hover:text-[color:var(--deframe-widget-color-brand-primary)] transition-colors cursor-pointer";
113
+ return /* @__PURE__ */ jsxRuntime.jsx(
114
+ "button",
115
+ {
116
+ "data-test-id": testId != null ? testId : "close-button",
117
+ onClick,
118
+ className: tailwindMerge.twMerge(baseClasses, className),
119
+ "aria-label": ariaLabel,
120
+ children: /* @__PURE__ */ jsxRuntime.jsx(hi2.HiXMark, { className: "w-6 h-6" })
121
+ }
122
+ );
123
+ };
124
+ var CloseButton_default = CloseButton;
111
125
  function PercentageButton(_a) {
112
126
  var _b = _a, {
113
127
  children,
@@ -2178,3111 +2192,146 @@ function DeframeComponentsProvider({
2178
2192
  }
2179
2193
  );
2180
2194
  }
2181
- function StatCard(_a) {
2182
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
2183
- const baseClasses = [
2184
- "w-full self-start flex flex-col gap-[var(--deframe-widget-size-gap-sm)]",
2185
- "bg-[var(--deframe-widget-color-bg-secondary)] border border-[color:var(--deframe-widget-color-border-secondary)]",
2186
- "rounded-[var(--deframe-widget-size-radius-md)]",
2187
- "px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-md)]"
2188
- ].join(" ");
2189
- const cardClasses = tailwindMerge.twMerge(baseClasses, className);
2190
- return /* @__PURE__ */ jsxRuntime.jsx(
2191
- "article",
2192
- __spreadValues({
2193
- "data-slot": "stat-card",
2194
- "data-test-id": "stat-card",
2195
- className: cardClasses
2196
- }, props)
2197
- );
2198
- }
2199
- function StatCardHeader(_a) {
2200
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
2201
- const baseClasses = "flex items-center justify-between gap-[var(--deframe-widget-size-gap-sm)]";
2202
- const headerClasses = tailwindMerge.twMerge(baseClasses, className);
2203
- return /* @__PURE__ */ jsxRuntime.jsx(
2204
- "div",
2205
- __spreadValues({
2206
- "data-slot": "stat-card-header",
2207
- "data-test-id": "stat-card-header",
2208
- className: headerClasses
2209
- }, props)
2210
- );
2211
- }
2212
- function StatCardLabel(_a) {
2213
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
2214
- const baseClasses = [
2215
- "text-[color:var(--deframe-widget-color-text-tertiary)]",
2216
- "text-[11px] [font-weight:var(--deframe-widget-font-weight-medium)] uppercase tracking-[0.08em]",
2217
- "[line-height:1.4]"
2218
- ].join(" ");
2219
- const labelClasses = tailwindMerge.twMerge(baseClasses, className);
2220
- return /* @__PURE__ */ jsxRuntime.jsx(
2221
- "p",
2222
- __spreadValues({
2223
- "data-slot": "stat-card-label",
2224
- "data-test-id": "stat-card-label",
2225
- className: labelClasses
2226
- }, props)
2227
- );
2228
- }
2229
- function StatCardValue(_a) {
2230
- var _b = _a, { tone = "default", size = "md", className } = _b, props = __objRest(_b, ["tone", "size", "className"]);
2231
- const sizeClasses2 = {
2232
- sm: "text-[20px]",
2233
- md: "text-[28px]",
2234
- lg: "text-[38px]"
2235
- };
2236
- const toneClasses = {
2237
- default: "text-[color:var(--deframe-widget-color-text-primary)]",
2238
- positive: "text-[color:var(--deframe-widget-color-brand-primary)]",
2239
- negative: "text-[color:var(--deframe-widget-color-state-error)]",
2240
- warning: "text-[color:var(--deframe-widget-color-state-warning)]",
2241
- brand: "text-[color:var(--deframe-widget-color-brand-secondary)]"
2242
- };
2243
- const baseClasses = "[font-weight:var(--deframe-widget-font-weight-bold)] [line-height:1.15]";
2244
- const valueClasses = tailwindMerge.twMerge(baseClasses, sizeClasses2[size], toneClasses[tone], className);
2245
- return /* @__PURE__ */ jsxRuntime.jsx(
2246
- "p",
2247
- __spreadValues({
2248
- "data-slot": "stat-card-value",
2249
- "data-test-id": "stat-card-value",
2250
- className: valueClasses
2251
- }, props)
2252
- );
2253
- }
2254
- function StatCardDescription(_a) {
2255
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
2256
- const baseClasses = "text-[color:var(--deframe-widget-color-text-secondary)] text-[13px] [line-height:1.45]";
2257
- const descClasses = tailwindMerge.twMerge(baseClasses, className);
2258
- return /* @__PURE__ */ jsxRuntime.jsx(
2259
- "p",
2260
- __spreadValues({
2261
- "data-slot": "stat-card-description",
2262
- "data-test-id": "stat-card-description",
2263
- className: descClasses
2264
- }, props)
2265
- );
2266
- }
2267
- function StatCardTrend(_a) {
2268
- var _b = _a, { direction, value, className } = _b, props = __objRest(_b, ["direction", "value", "className"]);
2269
- const baseClasses = "inline-flex items-center gap-[3px] text-[12px] [font-weight:var(--deframe-widget-font-weight-medium)] [line-height:1.4]";
2270
- const directionClasses = {
2271
- up: "text-[color:var(--deframe-widget-color-brand-primary)]",
2272
- down: "text-[color:var(--deframe-widget-color-state-error)]",
2273
- neutral: "text-[color:var(--deframe-widget-color-text-tertiary)]"
2274
- };
2275
- const trendClasses = tailwindMerge.twMerge(baseClasses, directionClasses[direction], className);
2276
- const icons = {
2277
- up: /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "10", height: "10", viewBox: "0 0 10 10", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M5 1.5L9 7H1L5 1.5Z", fill: "currentColor" }) }),
2278
- down: /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "10", height: "10", viewBox: "0 0 10 10", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M5 8.5L1 3H9L5 8.5Z", fill: "currentColor" }) }),
2279
- neutral: /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "12", height: "12", viewBox: "0 0 12 12", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M2 6H10M10 6L7 3M10 6L7 9", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) })
2280
- };
2281
- return /* @__PURE__ */ jsxRuntime.jsxs(
2282
- "span",
2283
- __spreadProps(__spreadValues({
2284
- "data-slot": "stat-card-trend",
2285
- "data-test-id": "stat-card-trend",
2286
- className: trendClasses,
2287
- "aria-label": `Tend\xEAncia: ${direction === "up" ? "alta" : direction === "down" ? "baixa" : "est\xE1vel"} ${value}`
2288
- }, props), {
2289
- children: [
2290
- icons[direction],
2291
- value
2292
- ]
2293
- })
2294
- );
2295
- }
2296
- function StatCardBadge(_a) {
2297
- var _b = _a, { tone = "default", className } = _b, props = __objRest(_b, ["tone", "className"]);
2298
- const baseClasses = [
2299
- "inline-flex items-center justify-center",
2300
- "px-[6px] py-[2px]",
2301
- "rounded-[var(--deframe-widget-size-radius-xs)]",
2302
- "text-[10px] [font-weight:var(--deframe-widget-font-weight-semibold)] uppercase tracking-[0.06em]",
2303
- "[line-height:1.4]"
2304
- ].join(" ");
2305
- const toneClasses = {
2306
- default: "bg-[color:color-mix(in_srgb,var(--deframe-widget-color-bg-tertiary)_84%,transparent)] border border-[color:var(--deframe-widget-color-border-secondary)] text-[color:var(--deframe-widget-color-text-secondary)]",
2307
- positive: "bg-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_12%,transparent)] border border-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_32%,transparent)] text-[color:var(--deframe-widget-color-brand-primary)]",
2308
- negative: "bg-[color:color-mix(in_srgb,var(--deframe-widget-color-state-error)_16%,transparent)] border border-[color:color-mix(in_srgb,var(--deframe-widget-color-state-error)_32%,transparent)] text-[color:var(--deframe-widget-color-state-error)]",
2309
- warning: "bg-[color:color-mix(in_srgb,var(--deframe-widget-color-state-warning)_16%,transparent)] border border-[color:color-mix(in_srgb,var(--deframe-widget-color-state-warning)_32%,transparent)] text-[color:var(--deframe-widget-color-state-warning)]",
2310
- brand: "bg-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_18%,transparent)] border border-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_32%,transparent)] text-[color:var(--deframe-widget-color-brand-primary)]"
2311
- };
2312
- const badgeClasses = tailwindMerge.twMerge(baseClasses, toneClasses[tone], className);
2313
- return /* @__PURE__ */ jsxRuntime.jsx(
2314
- "span",
2315
- __spreadValues({
2316
- "data-slot": "stat-card-badge",
2317
- "data-test-id": "stat-card-badge",
2318
- className: badgeClasses
2319
- }, props)
2320
- );
2321
- }
2322
- function StatCardDivider(_a) {
2323
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
2324
- const dividerClasses = tailwindMerge.twMerge(
2325
- "border-none h-px bg-[var(--deframe-widget-color-border-secondary)] my-[var(--deframe-widget-size-gap-xs)]",
2326
- className
2327
- );
2328
- return /* @__PURE__ */ jsxRuntime.jsx(
2329
- "hr",
2330
- __spreadValues({
2331
- "data-slot": "stat-card-divider",
2332
- "data-test-id": "stat-card-divider",
2333
- className: dividerClasses
2334
- }, props)
2335
- );
2336
- }
2337
- function StatCardRow(_a) {
2338
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
2339
- const baseClasses = "flex items-center justify-between gap-[var(--deframe-widget-size-gap-sm)]";
2340
- const rowClasses = tailwindMerge.twMerge(baseClasses, className);
2341
- return /* @__PURE__ */ jsxRuntime.jsx(
2342
- "div",
2343
- __spreadValues({
2344
- "data-slot": "stat-card-row",
2345
- "data-test-id": "stat-card-row",
2346
- className: rowClasses
2347
- }, props)
2348
- );
2349
- }
2350
- function StatCardIcon(_a) {
2351
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
2352
- const baseClasses = [
2353
- "flex items-center justify-center flex-shrink-0",
2354
- "w-9 h-9",
2355
- "rounded-[var(--deframe-widget-size-radius-sm)]",
2356
- "bg-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_12%,transparent)] text-[color:var(--deframe-widget-color-brand-primary)]"
2357
- ].join(" ");
2358
- const iconClasses = tailwindMerge.twMerge(baseClasses, className);
2359
- return /* @__PURE__ */ jsxRuntime.jsx(
2360
- "div",
2361
- __spreadValues({
2362
- "data-slot": "stat-card-icon",
2363
- "data-test-id": "stat-card-icon",
2364
- className: iconClasses
2365
- }, props)
2366
- );
2367
- }
2368
- var sizeClasses = {
2369
- sm: [
2370
- "h-[var(--deframe-widget-font-leading-sm)]",
2371
- "px-[var(--deframe-widget-size-padding-x-lg)]",
2372
- "[font-size:var(--deframe-widget-font-size-md)]",
2373
- "[line-height:var(--deframe-widget-font-leading-md)]"
2374
- ].join(" "),
2375
- md: [
2376
- "h-[var(--deframe-widget-font-leading-md)]",
2377
- "px-[var(--deframe-widget-size-padding-x-xl)]",
2378
- "[font-size:var(--deframe-widget-font-size-lg)]",
2379
- "[line-height:var(--deframe-widget-font-leading-lg)]"
2380
- ].join(" ")
2195
+ var InfoRow = ({ children, borderBottom, className }) => {
2196
+ const baseClasses = "self-stretch inline-flex justify-between items-start";
2197
+ const borderClasses = borderBottom ? "border-b border-[color:var(--deframe-widget-color-border-secondary)] pb-[var(--deframe-widget-size-padding-y-sm)]" : "";
2198
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-test-id": "info-row", className: tailwindMerge.twMerge(baseClasses, borderClasses, className), children });
2199
+ };
2200
+ var InfoLabel = ({ children, className }) => {
2201
+ const baseClasses = "[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] text-[color:var(--deframe-widget-color-text-secondary)]";
2202
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-test-id": "info-label", className: tailwindMerge.twMerge(baseClasses, className), children });
2203
+ };
2204
+ var variantClasses = {
2205
+ default: "text-[color:var(--deframe-widget-color-text-primary)]",
2206
+ success: "text-[color:var(--deframe-widget-color-state-success)]",
2207
+ warning: "text-[color:var(--deframe-widget-color-state-warning)]",
2208
+ error: "text-[color:var(--deframe-widget-color-state-error)]"
2209
+ };
2210
+ var InfoValue = ({ children, variant = "default", className }) => {
2211
+ const baseClasses = "[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] [font-weight:var(--deframe-widget-font-weight-semibold)]";
2212
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-test-id": "info-value", className: tailwindMerge.twMerge(baseClasses, variantClasses[variant], className), children });
2213
+ };
2214
+ var InfoRowWithIcon = ({ children, borderBottom, className }) => {
2215
+ const baseClasses = "flex items-start justify-between h-[17px]";
2216
+ const borderClasses = borderBottom ? "border-b border-[color:var(--deframe-widget-color-border-secondary)] pb-[var(--deframe-widget-size-padding-y-sm)]" : "";
2217
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-test-id": "info-row-with-icon", className: tailwindMerge.twMerge(baseClasses, borderClasses, className), children });
2218
+ };
2219
+ var InfoRowIconLabel = ({ children, className }) => {
2220
+ const baseClasses = "[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] text-[color:var(--deframe-widget-color-text-secondary)]";
2221
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-test-id": "info-row-icon-label", className: tailwindMerge.twMerge(baseClasses, className), children: [
2222
+ "\u2022 ",
2223
+ children
2224
+ ] });
2225
+ };
2226
+ var InfoRowIconValue = ({ children, className }) => {
2227
+ const baseClasses = "[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] [font-weight:var(--deframe-widget-font-weight-semibold)] text-[color:var(--deframe-widget-color-text-primary)]";
2228
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-test-id": "info-row-icon-value", className: tailwindMerge.twMerge(baseClasses, className), children });
2381
2229
  };
2382
- function SegmentedControl({
2383
- options,
2230
+ var CollapsibleInfoRow = ({
2231
+ label,
2384
2232
  value,
2385
- onChange,
2386
- variant = "outlined",
2387
- size = "md",
2388
- fullWidth = false
2389
- }) {
2390
- const containerClasses = tailwindMerge.twMerge(
2391
- "inline-flex rounded-[var(--deframe-widget-size-radius-md)]",
2392
- "bg-[var(--deframe-widget-color-bg-secondary)]",
2393
- "border border-[color:var(--deframe-widget-color-border-secondary)]",
2394
- "p-[3px] gap-[2px]",
2395
- fullWidth ? "w-full" : "w-auto"
2396
- );
2397
- return /* @__PURE__ */ jsxRuntime.jsx(
2233
+ children,
2234
+ defaultOpen = false,
2235
+ className,
2236
+ collapseLabel,
2237
+ expandLabel
2238
+ }) => {
2239
+ const [isOpen, setIsOpen] = React6__namespace.default.useState(defaultOpen);
2240
+ const baseClasses = "flex flex-col gap-[var(--deframe-widget-size-gap-sm)] w-full";
2241
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-test-id": "collapsible-info-row", className: tailwindMerge.twMerge(baseClasses, className), children: [
2242
+ /* @__PURE__ */ jsxRuntime.jsxs(
2243
+ "button",
2244
+ {
2245
+ type: "button",
2246
+ onClick: () => setIsOpen(!isOpen),
2247
+ className: "flex items-start justify-between w-full text-left h-[18px] cursor-pointer",
2248
+ "aria-expanded": isOpen,
2249
+ "aria-label": `${isOpen ? collapseLabel : expandLabel} ${label}`,
2250
+ children: [
2251
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start gap-[2px]", children: [
2252
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] text-[color:var(--deframe-widget-color-text-secondary)]", children: label }),
2253
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center w-[18px] h-[18px]", children: isOpen ? /* @__PURE__ */ jsxRuntime.jsx(hi2.HiChevronUp, { className: "w-3 h-3 text-[color:var(--deframe-widget-color-text-secondary)]" }) : /* @__PURE__ */ jsxRuntime.jsx(hi2.HiChevronDown, { className: "w-3 h-3 text-[color:var(--deframe-widget-color-text-secondary)]" }) })
2254
+ ] }),
2255
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] [font-weight:var(--deframe-widget-font-weight-semibold)] text-[color:var(--deframe-widget-color-text-secondary)]", children: value })
2256
+ ]
2257
+ }
2258
+ ),
2259
+ isOpen && children
2260
+ ] });
2261
+ };
2262
+ var BackgroundContainer = ({ children, className }) => {
2263
+ const baseClasses = "w-full flex-1 min-h-0 px-[var(--deframe-widget-size-padding-x-md)] bg-[var(--deframe-widget-color-bg-primary)] lg:bg-[var(--deframe-widget-color-bg-secondary)] text-[color:var(--deframe-widget-color-text-primary)] flex flex-col relative overflow-y-auto";
2264
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-test-id": "background-container", className: tailwindMerge.twMerge(baseClasses, className), children });
2265
+ };
2266
+ var SectionCard = ({ children, className }) => {
2267
+ const baseClasses = "bg-[var(--deframe-widget-color-bg-secondary)] lg:!bg-[var(--deframe-widget-color-bg-secondary)] rounded-[var(--deframe-widget-size-radius-xs)] shadow-[0_2px_8px_color-mix(in_srgb,var(--deframe-widget-color-text-primary)_18%,transparent)] px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-md)] flex flex-col gap-[var(--deframe-widget-size-gap-sm)]";
2268
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-test-id": "section-card", className: tailwindMerge.twMerge(baseClasses, className), children });
2269
+ };
2270
+ var Navbar = ({ children, className }) => {
2271
+ const baseClasses = "w-full px-[var(--deframe-widget-size-padding-x-sm)] pr-[var(--deframe-widget-size-padding-x-md)] pt-[var(--deframe-widget-size-padding-y-sm)] pb-[var(--deframe-widget-size-padding-y-md)] border-b items-center border-[color:var(--deframe-widget-color-border-tertiary)] flex";
2272
+ return /* @__PURE__ */ jsxRuntime.jsx("nav", { "data-test-id": "navbar", className: tailwindMerge.twMerge(baseClasses, className), children });
2273
+ };
2274
+ var gapClasses = {
2275
+ xs: "gap-[var(--deframe-widget-size-gap-xs)]",
2276
+ sm: "gap-[var(--deframe-widget-size-gap-sm)]",
2277
+ md: "gap-[var(--deframe-widget-size-gap-md)]",
2278
+ lg: "gap-[var(--deframe-widget-size-gap-lg)]"
2279
+ };
2280
+ var FlexCol = ({ children, className, gap = "xs" }) => {
2281
+ const baseClasses = "flex flex-col";
2282
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-test-id": "flex-col", className: tailwindMerge.twMerge(baseClasses, gapClasses[gap], className), children });
2283
+ };
2284
+ var gapClasses2 = {
2285
+ xs: "gap-[var(--deframe-widget-size-gap-xs)]",
2286
+ sm: "gap-[var(--deframe-widget-size-gap-sm)]",
2287
+ md: "gap-[var(--deframe-widget-size-gap-md)]",
2288
+ lg: "gap-[var(--deframe-widget-size-gap-lg)]"
2289
+ };
2290
+ var FlexRow = ({ children, className, gap = "xs" }) => {
2291
+ const baseClasses = "flex items-center";
2292
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-test-id": "flex-row", className: tailwindMerge.twMerge(baseClasses, gapClasses2[gap], className), children });
2293
+ };
2294
+ var ScrollableContent = ({ children, className }) => {
2295
+ const baseClasses = "flex-1 overflow-y-auto px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-lg)]";
2296
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-test-id": "scrollable-content", className: tailwindMerge.twMerge(baseClasses, className), children });
2297
+ };
2298
+ var DetailsHeader = ({ title, onBack, className, backAriaLabel = "Back" }) => {
2299
+ const baseClasses = "w-full px-[var(--deframe-widget-size-padding-x-sm)] pr-[var(--deframe-widget-size-padding-x-md)] pt-[var(--deframe-widget-size-padding-y-sm)] pb-[var(--deframe-widget-size-padding-y-md)] border-b border-[color:var(--deframe-widget-color-border-tertiary)] flex items-center";
2300
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-test-id": "details-header", className: tailwindMerge.twMerge(baseClasses, className), children: [
2301
+ /* @__PURE__ */ jsxRuntime.jsx(
2302
+ "button",
2303
+ {
2304
+ "data-test-id": "details-header-back-button",
2305
+ onClick: onBack,
2306
+ className: "w-12 h-12 rounded-[var(--deframe-widget-size-radius-full)] flex items-center justify-center text-[color:var(--deframe-widget-color-text-secondary)] hover:text-[color:var(--deframe-widget-color-brand-primary)] cursor-pointer",
2307
+ "aria-label": backAriaLabel,
2308
+ children: /* @__PURE__ */ jsxRuntime.jsx(hi2.HiChevronLeft, { className: "w-6 h-6 text-[color:var(--deframe-widget-color-text-tertiary)]" })
2309
+ }
2310
+ ),
2311
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 flex items-center", children: /* @__PURE__ */ jsxRuntime.jsx(TextHeading, { variant: "h-large", children: title }) })
2312
+ ] });
2313
+ };
2314
+ var HighRiskBadge = ({ className, label }) => {
2315
+ const baseClasses = "inline-flex justify-start items-start gap-[var(--deframe-widget-size-gap-xs)]";
2316
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-test-id": "high-risk-badge", className: tailwindMerge.twMerge(baseClasses, className), children: /* @__PURE__ */ jsxRuntime.jsx(
2398
2317
  "div",
2399
2318
  {
2400
- role: "tablist",
2401
- "data-test-id": "segmented-control",
2402
- "data-slot": "segmented-control",
2403
- className: containerClasses,
2404
- children: options.map((opt) => {
2405
- const isActive = opt.value === value;
2406
- const buttonClasses = tailwindMerge.twMerge(
2407
- "inline-flex items-center justify-center",
2408
- "gap-[var(--deframe-widget-size-gap-xs)]",
2409
- "rounded-[var(--deframe-widget-size-radius-sm)]",
2410
- "border-[length:var(--deframe-widget-size-border-sm)] border-solid",
2411
- "outline-none whitespace-nowrap transition-[background,color,border-color] duration-150",
2412
- "font-[var(--deframe-widget-font-family)]",
2413
- "[font-weight:var(--deframe-widget-font-weight-medium)]",
2414
- sizeClasses[size],
2415
- fullWidth && "flex-1",
2416
- isActive ? variant === "outlined" ? "border-[color:var(--deframe-widget-color-brand-primary)] bg-[color:color-mix(in_srgb,var(--deframe-widget-color-bg-tertiary)_84%,transparent)] text-[color:var(--deframe-widget-color-text-primary)]" : "border-transparent bg-transparent text-[color:var(--deframe-widget-color-brand-primary)]" : "border-transparent bg-transparent text-[color:var(--deframe-widget-color-text-secondary)] hover:bg-[color:color-mix(in_srgb,var(--deframe-widget-color-bg-secondary)_72%,transparent)]"
2417
- );
2418
- return /* @__PURE__ */ jsxRuntime.jsxs(
2419
- "button",
2420
- {
2421
- role: "tab",
2422
- "aria-selected": isActive,
2423
- "data-test-id": "segmented-control-option",
2424
- "data-slot": "segmented-control-option",
2425
- onClick: () => onChange(opt.value),
2426
- className: buttonClasses,
2427
- children: [
2428
- opt.icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex items-center", children: opt.icon }),
2429
- opt.label
2430
- ]
2431
- },
2432
- opt.value
2433
- );
2434
- })
2319
+ "data-size": "Small",
2320
+ "data-type": "Failed",
2321
+ className: "h-6 px-[var(--deframe-widget-size-padding-x-sm)] py-[var(--deframe-widget-size-padding-y-xs)] opacity-95 bg-[color:color-mix(in_srgb,var(--deframe-widget-color-state-error)_20%,transparent)] rounded-[var(--deframe-widget-size-radius-md)] outline outline-1 outline-offset-[-1px] outline-[color:var(--deframe-widget-color-state-error)] flex justify-center items-center gap-[var(--deframe-widget-size-gap-xs)]",
2322
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex justify-start items-center gap-[var(--deframe-widget-size-gap-sm)].5", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "justify-start text-[color:var(--deframe-widget-color-state-error)] [font-size:var(--deframe-widget-font-size-xs)] [line-height:var(--deframe-widget-font-leading-xs)] [font-weight:var(--deframe-widget-font-weight-regular)] font-[var(--deframe-widget-font-family)] leading-4", children: label }) })
2435
2323
  }
2436
- );
2437
- }
2438
- function IconCircle({ item, size = 36, className }) {
2439
- const [imgError, setImgError] = React6__namespace.useState(false);
2440
- if (item.iconUrl && !imgError) {
2441
- return /* @__PURE__ */ jsxRuntime.jsx(
2442
- "img",
2443
- {
2444
- "data-test-id": "icon-circle-img",
2445
- "data-slot": "icon-circle",
2446
- src: item.iconUrl,
2447
- alt: item.name,
2448
- width: size,
2449
- height: size,
2450
- className: tailwindMerge.twMerge("rounded-[var(--deframe-widget-size-radius-full)] flex-shrink-0 object-cover", className),
2451
- onError: () => setImgError(true)
2452
- }
2453
- );
2454
- }
2455
- return /* @__PURE__ */ jsxRuntime.jsx(
2324
+ ) });
2325
+ };
2326
+ var MediumRiskBadge = ({ className, label }) => {
2327
+ const baseClasses = "inline-flex justify-start items-start gap-[var(--deframe-widget-size-gap-xs)]";
2328
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-test-id": "medium-risk-badge", className: tailwindMerge.twMerge(baseClasses, className), children: /* @__PURE__ */ jsxRuntime.jsx(
2456
2329
  "div",
2457
2330
  {
2458
- "data-test-id": "icon-circle-fallback",
2459
- "data-slot": "icon-circle",
2460
- className: tailwindMerge.twMerge("rounded-[var(--deframe-widget-size-radius-full)] flex-shrink-0 flex items-center justify-center [font-weight:var(--deframe-widget-font-weight-bold)] text-[color:var(--deframe-widget-color-text-primary-dark)]", className),
2461
- style: {
2462
- width: size,
2463
- height: size,
2464
- background: item.color,
2465
- fontSize: size * 0.33,
2466
- letterSpacing: "-0.01em"
2467
- },
2468
- children: item.name.slice(0, 2).toUpperCase()
2469
- }
2470
- );
2471
- }
2472
- function CloseButton(_a) {
2473
- var _b = _a, { onClick, className, testId } = _b, rest = __objRest(_b, ["onClick", "className", "testId"]);
2474
- const baseClasses = [
2475
- "inline-flex items-center justify-center",
2476
- "w-9 h-9",
2477
- "rounded-[var(--deframe-widget-size-radius-sm)]",
2478
- "border-none",
2479
- "cursor-pointer",
2480
- "bg-transparent",
2481
- "hover:bg-[color:color-mix(in_srgb,var(--deframe-widget-color-bg-tertiary)_92%,transparent)]",
2482
- "transition-[background] duration-150",
2483
- "flex-shrink-0",
2484
- "outline-none",
2485
- "text-[color:var(--deframe-widget-color-text-secondary)]"
2486
- ].join(" ");
2487
- return /* @__PURE__ */ jsxRuntime.jsx(
2488
- "button",
2489
- __spreadProps(__spreadValues({
2490
- "data-test-id": testId != null ? testId : "close-button",
2491
- "data-slot": "close-button",
2492
- onClick,
2493
- "aria-label": "Fechar",
2494
- className: tailwindMerge.twMerge(baseClasses, className)
2495
- }, rest), {
2496
- children: /* @__PURE__ */ jsxRuntime.jsx(
2497
- "svg",
2498
- {
2499
- "data-test-id": "close-button-icon",
2500
- "data-slot": "close-button-icon",
2501
- viewBox: "0 0 24 24",
2502
- width: "20",
2503
- height: "20",
2504
- fill: "currentColor",
2505
- "aria-hidden": "true",
2506
- children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M11.9997 10.5865L16.9495 5.63672L18.3637 7.05093L13.4139 12.0007L18.3637 16.9504L16.9495 18.3646L11.9997 13.4149L7.04996 18.3646L5.63574 16.9504L10.5855 12.0007L5.63574 7.05093L7.04996 5.63672L11.9997 10.5865Z" })
2507
- }
2508
- )
2509
- })
2510
- );
2511
- }
2512
- function ChainRow({ chain, selected, onClick, onKeyDown, index }) {
2513
- const baseClasses = [
2514
- "relative flex items-center gap-[10px]",
2515
- "py-[9px] px-[var(--deframe-widget-size-padding-x-sm)] pl-[14px]",
2516
- "rounded-[var(--deframe-widget-size-radius-sm)]",
2517
- "cursor-pointer",
2518
- "outline-none",
2519
- "mb-[var(--deframe-widget-size-gap-none)].5",
2520
- "transition-[background] duration-150"
2521
- ].join(" ");
2522
- const stateClasses = {
2523
- selected: "bg-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_12%,transparent)] hover:bg-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_12%,transparent)]",
2524
- default: "bg-transparent hover:bg-[color:color-mix(in_srgb,var(--deframe-widget-color-bg-secondary)_72%,transparent)]"
2525
- };
2526
- const rowClasses = tailwindMerge.twMerge(baseClasses, stateClasses[selected ? "selected" : "default"]);
2527
- const nameClasses = [
2528
- "text-[14px] [font-weight:var(--deframe-widget-font-weight-medium)]",
2529
- selected ? "text-[color:var(--deframe-widget-color-text-primary)]" : "text-[color:var(--deframe-widget-color-text-secondary)]"
2530
- ].join(" ");
2531
- return /* @__PURE__ */ jsxRuntime.jsxs(
2532
- framerMotion.motion.div,
2533
- {
2534
- "data-test-id": "chain-row",
2535
- "data-slot": "chain-row",
2536
- role: "option",
2537
- "aria-selected": selected,
2538
- tabIndex: 0,
2539
- onClick,
2540
- onKeyDown,
2541
- "data-chain-index": index,
2542
- className: rowClasses,
2543
- children: [
2544
- selected && /* @__PURE__ */ jsxRuntime.jsx(
2545
- framerMotion.motion.div,
2546
- {
2547
- "data-test-id": "chain-row-accent",
2548
- "data-slot": "chain-row-accent",
2549
- layoutId: "chain-accent",
2550
- className: "absolute left-0 top-2 bottom-2 w-[3px] rounded-[var(--deframe-widget-size-radius-xs)] bg-[var(--deframe-widget-color-brand-primary)]",
2551
- transition: { type: "spring", stiffness: 400, damping: 30 }
2552
- }
2553
- ),
2554
- /* @__PURE__ */ jsxRuntime.jsx(
2555
- IconCircle,
2556
- {
2557
- "data-test-id": "chain-row-icon",
2558
- "data-slot": "chain-row-icon",
2559
- item: chain,
2560
- size: 34
2561
- }
2562
- ),
2563
- /* @__PURE__ */ jsxRuntime.jsxs(
2564
- "div",
2565
- {
2566
- "data-test-id": "chain-row-content",
2567
- "data-slot": "chain-row-content",
2568
- className: "flex-1 min-w-0",
2569
- children: [
2570
- /* @__PURE__ */ jsxRuntime.jsx(
2571
- "div",
2572
- {
2573
- "data-test-id": "chain-row-name",
2574
- "data-slot": "chain-row-name",
2575
- className: nameClasses,
2576
- children: chain.name
2577
- }
2578
- ),
2579
- chain.balanceUsd && /* @__PURE__ */ jsxRuntime.jsx(
2580
- "div",
2581
- {
2582
- "data-test-id": "chain-row-balance",
2583
- "data-slot": "chain-row-balance",
2584
- className: "text-[12px] text-[color:var(--deframe-widget-color-text-tertiary)] mt-px",
2585
- children: chain.balanceUsd
2586
- }
2587
- )
2588
- ]
2589
- }
2590
- )
2591
- ]
2592
- }
2593
- );
2594
- }
2595
- function ChainChip({ chain, selected, onClick }) {
2596
- const baseClasses = [
2597
- "inline-flex items-center gap-[var(--deframe-widget-size-gap-sm)]",
2598
- "py-[var(--deframe-widget-size-padding-y-sm)] pl-[var(--deframe-widget-size-padding-x-sm)] pr-[14px]",
2599
- "rounded-[var(--deframe-widget-size-radius-full)]",
2600
- "cursor-pointer",
2601
- "whitespace-nowrap",
2602
- "transition-all duration-150",
2603
- "flex-shrink-0",
2604
- "outline-none",
2605
- "border"
2606
- ].join(" ");
2607
- const stateClasses = {
2608
- selected: "border-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_32%,transparent)] bg-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_12%,transparent)]",
2609
- default: "border-[color:var(--deframe-widget-color-border-secondary)] bg-[color:color-mix(in_srgb,var(--deframe-widget-color-bg-secondary)_72%,transparent)]"
2610
- };
2611
- const buttonClasses = tailwindMerge.twMerge(baseClasses, stateClasses[selected ? "selected" : "default"]);
2612
- const nameLabelClasses = [
2613
- "text-[13px] [font-weight:var(--deframe-widget-font-weight-medium)] leading-[1.2]",
2614
- selected ? "text-[color:var(--deframe-widget-color-brand-primary)]" : "text-[color:var(--deframe-widget-color-text-secondary)]"
2615
- ].join(" ");
2616
- return /* @__PURE__ */ jsxRuntime.jsxs(
2617
- "button",
2618
- {
2619
- "data-test-id": "chain-chip",
2620
- "data-slot": "chain-chip",
2621
- onClick,
2622
- className: buttonClasses,
2623
- children: [
2624
- /* @__PURE__ */ jsxRuntime.jsx(
2625
- IconCircle,
2626
- {
2627
- "data-test-id": "chain-chip-icon",
2628
- "data-slot": "chain-chip-icon",
2629
- item: chain,
2630
- size: 24
2631
- }
2632
- ),
2633
- /* @__PURE__ */ jsxRuntime.jsxs(
2634
- "div",
2635
- {
2636
- "data-test-id": "chain-chip-content",
2637
- "data-slot": "chain-chip-content",
2638
- className: "text-left",
2639
- children: [
2640
- /* @__PURE__ */ jsxRuntime.jsx(
2641
- "div",
2642
- {
2643
- "data-test-id": "chain-chip-label",
2644
- "data-slot": "chain-chip-label",
2645
- className: nameLabelClasses,
2646
- children: chain.name
2647
- }
2648
- ),
2649
- chain.balanceUsd && /* @__PURE__ */ jsxRuntime.jsx(
2650
- "div",
2651
- {
2652
- "data-test-id": "chain-chip-balance",
2653
- "data-slot": "chain-chip-balance",
2654
- className: "text-[11px] text-[color:var(--deframe-widget-color-text-tertiary)] leading-[1.4]",
2655
- children: chain.balanceUsd
2656
- }
2657
- )
2658
- ]
2659
- }
2660
- )
2661
- ]
2662
- }
2663
- );
2664
- }
2665
- function AssetRow({ asset, first, onClick, onKeyDown, index, chainName, chainColor }) {
2666
- const hasBalance = asset.balance || asset.balanceUsd;
2667
- const baseClasses = [
2668
- "group",
2669
- "relative flex items-center gap-[var(--deframe-widget-size-gap-sm)]",
2670
- "py-[10px] px-[14px]",
2671
- "rounded-[var(--deframe-widget-size-radius-sm)]",
2672
- "cursor-pointer outline-none",
2673
- "transition-[background] duration-150"
2674
- ].join(" ");
2675
- const stateClasses = {
2676
- first: "bg-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_12%,transparent)]",
2677
- default: "bg-transparent hover:bg-[color:color-mix(in_srgb,var(--deframe-widget-color-bg-secondary)_72%,transparent)]"
2678
- };
2679
- const rowClasses = tailwindMerge.twMerge(baseClasses, stateClasses[first ? "first" : "default"]);
2680
- return /* @__PURE__ */ jsxRuntime.jsxs(
2681
- "div",
2682
- {
2683
- "data-test-id": "asset-row",
2684
- "data-slot": "asset-row",
2685
- role: "option",
2686
- "aria-selected": first,
2687
- tabIndex: 0,
2688
- onClick,
2689
- onKeyDown,
2690
- "data-asset-index": index,
2691
- className: rowClasses,
2692
- children: [
2693
- first && /* @__PURE__ */ jsxRuntime.jsx(
2694
- "div",
2695
- {
2696
- "data-test-id": "asset-row-accent",
2697
- "data-slot": "asset-row-accent",
2698
- className: "absolute left-0 top-2 bottom-2 w-[3px] rounded-[var(--deframe-widget-size-radius-xs)] bg-[var(--deframe-widget-color-brand-primary)]"
2699
- }
2700
- ),
2701
- /* @__PURE__ */ jsxRuntime.jsx(
2702
- IconCircle,
2703
- {
2704
- "data-test-id": "asset-row-icon",
2705
- "data-slot": "asset-row-icon",
2706
- item: asset,
2707
- size: 38
2708
- }
2709
- ),
2710
- /* @__PURE__ */ jsxRuntime.jsxs(
2711
- "div",
2712
- {
2713
- "data-test-id": "asset-row-content",
2714
- "data-slot": "asset-row-content",
2715
- className: "flex-1 min-w-0",
2716
- children: [
2717
- /* @__PURE__ */ jsxRuntime.jsx(
2718
- "div",
2719
- {
2720
- "data-test-id": "asset-row-symbol",
2721
- "data-slot": "asset-row-symbol",
2722
- className: "text-[14px] [font-weight:var(--deframe-widget-font-weight-semibold)] text-[color:var(--deframe-widget-color-text-primary)]",
2723
- children: asset.symbol
2724
- }
2725
- ),
2726
- /* @__PURE__ */ jsxRuntime.jsx(
2727
- "div",
2728
- {
2729
- "data-test-id": "asset-row-name",
2730
- "data-slot": "asset-row-name",
2731
- className: "text-[13px] text-[color:var(--deframe-widget-color-text-secondary)] mt-px",
2732
- children: asset.name
2733
- }
2734
- ),
2735
- chainName && /* @__PURE__ */ jsxRuntime.jsxs(
2736
- "div",
2737
- {
2738
- "data-test-id": "asset-row-chain",
2739
- "data-slot": "asset-row-chain",
2740
- className: "flex items-center gap-[var(--deframe-widget-size-gap-xs)] mt-[3px]",
2741
- children: [
2742
- chainColor && /* @__PURE__ */ jsxRuntime.jsx(
2743
- "span",
2744
- {
2745
- "data-test-id": "asset-row-chain-dot",
2746
- "data-slot": "asset-row-chain-dot",
2747
- className: "inline-block w-[6px] h-[6px] rounded-[var(--deframe-widget-size-radius-full)] flex-shrink-0",
2748
- style: { background: chainColor }
2749
- }
2750
- ),
2751
- /* @__PURE__ */ jsxRuntime.jsxs(
2752
- "span",
2753
- {
2754
- "data-test-id": "asset-row-chain-label",
2755
- "data-slot": "asset-row-chain-label",
2756
- className: "text-[11px] text-[color:var(--deframe-widget-color-text-tertiary)]",
2757
- children: [
2758
- "via ",
2759
- chainName
2760
- ]
2761
- }
2762
- )
2763
- ]
2764
- }
2765
- )
2766
- ]
2767
- }
2768
- ),
2769
- hasBalance ? /* @__PURE__ */ jsxRuntime.jsxs(
2770
- "div",
2771
- {
2772
- "data-test-id": "asset-row-balance",
2773
- "data-slot": "asset-row-balance",
2774
- className: "flex-shrink-0 text-right",
2775
- children: [
2776
- asset.balance && /* @__PURE__ */ jsxRuntime.jsxs(
2777
- "div",
2778
- {
2779
- "data-test-id": "asset-row-balance-amount",
2780
- "data-slot": "asset-row-balance-amount",
2781
- className: "text-[13px] [font-weight:var(--deframe-widget-font-weight-medium)] text-[color:var(--deframe-widget-color-text-primary)]",
2782
- children: [
2783
- asset.balance,
2784
- " ",
2785
- /* @__PURE__ */ jsxRuntime.jsx(
2786
- "span",
2787
- {
2788
- "data-test-id": "asset-row-balance-symbol",
2789
- "data-slot": "asset-row-balance-symbol",
2790
- className: "text-[12px] text-[color:var(--deframe-widget-color-text-tertiary)] [font-weight:var(--deframe-widget-font-weight-regular)]",
2791
- children: asset.symbol
2792
- }
2793
- )
2794
- ]
2795
- }
2796
- ),
2797
- asset.balanceUsd && /* @__PURE__ */ jsxRuntime.jsx(
2798
- "div",
2799
- {
2800
- "data-test-id": "asset-row-balance-usd",
2801
- "data-slot": "asset-row-balance-usd",
2802
- className: "text-[12px] text-[color:var(--deframe-widget-color-text-secondary)] mt-[var(--deframe-widget-size-gap-none)].5",
2803
- children: asset.balanceUsd
2804
- }
2805
- )
2806
- ]
2807
- }
2808
- ) : /* @__PURE__ */ jsxRuntime.jsx(
2809
- "span",
2810
- {
2811
- "data-test-id": "asset-row-select-hint",
2812
- "data-slot": "asset-row-select-hint",
2813
- className: "text-[13px] text-[color:var(--deframe-widget-color-brand-primary)] [font-weight:var(--deframe-widget-font-weight-medium)] whitespace-nowrap flex-shrink-0 opacity-0 translate-x-1 group-hover:opacity-100 group-hover:translate-x-0 transition-all duration-150",
2814
- children: "Select \u2192"
2815
- }
2816
- )
2817
- ]
2818
- }
2819
- );
2820
- }
2821
- var SearchInput = React6__namespace.forwardRef(
2822
- ({ value, onChange, placeholder = "Buscar por s\xEDmbolo, nome ou endere\xE7o", onArrowDown, className }, ref) => {
2823
- const wrapperClasses = tailwindMerge.twMerge("relative", className);
2824
- const inputClasses = [
2825
- "w-full box-border h-10",
2826
- "bg-[var(--deframe-widget-color-bg-tertiary)]",
2827
- "border border-[color:var(--deframe-widget-color-border-secondary)]",
2828
- "rounded-[var(--deframe-widget-size-radius-sm)]",
2829
- "py-[var(--deframe-widget-size-padding-y-none)] pr-[var(--deframe-widget-size-padding-x-xl)] pl-[14px]",
2830
- "text-[14px] text-[color:var(--deframe-widget-color-text-primary)]",
2831
- "outline-none focus:outline-none",
2832
- "focus:border-[color:var(--deframe-widget-color-brand-primary)]",
2833
- "transition-colors duration-150",
2834
- "font-[var(--deframe-widget-font-family)]",
2835
- "placeholder:text-[color:var(--deframe-widget-color-text-tertiary)]"
2836
- ].join(" ");
2837
- return /* @__PURE__ */ jsxRuntime.jsxs(
2838
- "div",
2839
- {
2840
- "data-test-id": "search-input-wrapper",
2841
- "data-slot": "search-input-wrapper",
2842
- className: wrapperClasses,
2843
- children: [
2844
- /* @__PURE__ */ jsxRuntime.jsx(
2845
- "input",
2846
- {
2847
- "data-test-id": "search-input",
2848
- "data-slot": "search-input",
2849
- ref,
2850
- type: "text",
2851
- value,
2852
- onChange: (e) => onChange(e.target.value),
2853
- placeholder,
2854
- "aria-label": "Buscar ativo",
2855
- onKeyDown: (e) => {
2856
- if (e.key === "ArrowDown") {
2857
- e.preventDefault();
2858
- onArrowDown == null ? void 0 : onArrowDown();
2859
- }
2860
- },
2861
- className: inputClasses
2862
- }
2863
- ),
2864
- /* @__PURE__ */ jsxRuntime.jsx(
2865
- "div",
2866
- {
2867
- "data-test-id": "search-input-icon",
2868
- "data-slot": "search-input-icon",
2869
- className: "absolute right-3 top-1/2 -translate-y-1/2 pointer-events-none text-[color:var(--deframe-widget-color-text-tertiary)]",
2870
- children: /* @__PURE__ */ jsxRuntime.jsxs(
2871
- "svg",
2872
- {
2873
- width: "15",
2874
- height: "15",
2875
- viewBox: "0 0 24 24",
2876
- fill: "none",
2877
- stroke: "currentColor",
2878
- strokeWidth: "2",
2879
- strokeLinecap: "round",
2880
- "aria-hidden": "true",
2881
- children: [
2882
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "11", cy: "11", r: "8" }),
2883
- /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "21", y1: "21", x2: "16.65", y2: "16.65" })
2884
- ]
2885
- }
2886
- )
2887
- }
2888
- )
2889
- ]
2890
- }
2891
- );
2892
- }
2893
- );
2894
- SearchInput.displayName = "SearchInput";
2895
- function FilterGroupBar({ groups, selected, onSelect }) {
2896
- return /* @__PURE__ */ jsxRuntime.jsx(
2897
- "div",
2898
- {
2899
- "data-test-id": "filter-group-bar",
2900
- "data-slot": "filter-group-bar",
2901
- role: "tablist",
2902
- "aria-label": "Filtrar ativos",
2903
- className: "flex gap-[var(--deframe-widget-size-gap-sm)] overflow-x-auto [scrollbar-width:none] px-[var(--deframe-widget-size-padding-x-md)] pb-[var(--deframe-widget-size-padding-y-sm)] flex-shrink-0",
2904
- children: groups.map((group) => /* @__PURE__ */ jsxRuntime.jsx(
2905
- FilterPill,
2906
- {
2907
- group,
2908
- isSelected: group.id === selected,
2909
- onSelect
2910
- },
2911
- group.id
2912
- ))
2913
- }
2914
- );
2915
- }
2916
- function FilterPill({ group, isSelected, onSelect }) {
2917
- const baseClasses = [
2918
- "inline-flex items-center",
2919
- "py-[6px] px-[14px]",
2920
- "rounded-[var(--deframe-widget-size-radius-full)]",
2921
- "text-[12px] [font-weight:var(--deframe-widget-font-weight-medium)]",
2922
- "cursor-pointer",
2923
- "flex-shrink-0",
2924
- "whitespace-nowrap",
2925
- "outline-none",
2926
- "font-[var(--deframe-widget-font-family)]",
2927
- "transition-all duration-150",
2928
- "border"
2929
- ].join(" ");
2930
- const stateClasses = {
2931
- selected: "border-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_32%,transparent)] bg-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_12%,transparent)] text-[color:var(--deframe-widget-color-brand-primary)]",
2932
- default: "border-[color:var(--deframe-widget-color-border-secondary)] bg-[color:color-mix(in_srgb,var(--deframe-widget-color-bg-secondary)_72%,transparent)] text-[color:var(--deframe-widget-color-text-secondary)] hover:bg-[color:color-mix(in_srgb,var(--deframe-widget-color-bg-tertiary)_84%,transparent)]"
2933
- };
2934
- const pillClasses = tailwindMerge.twMerge(baseClasses, stateClasses[isSelected ? "selected" : "default"]);
2935
- return /* @__PURE__ */ jsxRuntime.jsx(
2936
- "button",
2937
- {
2938
- "data-test-id": "filter-pill",
2939
- "data-slot": "filter-pill",
2940
- role: "tab",
2941
- "aria-selected": isSelected,
2942
- onClick: () => onSelect(group.id),
2943
- className: pillClasses,
2944
- children: /* @__PURE__ */ jsxRuntime.jsx(
2945
- "span",
2946
- {
2947
- "data-test-id": "filter-pill-label",
2948
- "data-slot": "filter-pill-label",
2949
- children: group.label
2950
- }
2951
- )
2952
- }
2953
- );
2954
- }
2955
- function parseUsd(s) {
2956
- if (!s) return -1;
2957
- const n = parseFloat(s.replace(/[$,\s]/g, ""));
2958
- return isNaN(n) ? -1 : n;
2959
- }
2960
- function useIsMobile(breakpoint = 640) {
2961
- const [isMobile, setIsMobile] = React6__namespace.useState(false);
2962
- React6__namespace.useEffect(() => {
2963
- const check = () => setIsMobile(window.innerWidth < breakpoint);
2964
- check();
2965
- window.addEventListener("resize", check);
2966
- return () => window.removeEventListener("resize", check);
2967
- }, [breakpoint]);
2968
- return isMobile;
2969
- }
2970
- var DEFAULT_FILTER_GROUPS = [
2971
- { id: "all", label: "All" },
2972
- { id: "most-used", label: "Most Used" },
2973
- { id: "stablecoin", label: "Stablecoins" }
2974
- ];
2975
- function SearchAndAssets({
2976
- query,
2977
- setQuery,
2978
- searchRef,
2979
- assetListRef,
2980
- filtered,
2981
- isMobile,
2982
- onSelect,
2983
- handleAssetKeyDown,
2984
- activeTab,
2985
- onTabChange,
2986
- visibleChains,
2987
- filterGroups,
2988
- selectedFilter,
2989
- onFilterChange
2990
- }) {
2991
- const tabPadding = isMobile ? "px-[var(--deframe-widget-size-padding-x-md)] pb-[10px] pt-[var(--deframe-widget-size-padding-y-none)]" : "px-[var(--deframe-widget-size-padding-x-md)] pb-[10px] pt-[var(--deframe-widget-size-padding-y-sm)]";
2992
- return /* @__PURE__ */ jsxRuntime.jsxs(
2993
- "div",
2994
- {
2995
- "data-slot": "search-and-assets",
2996
- "data-test-id": "search-and-assets",
2997
- className: "flex flex-col flex-1 overflow-hidden",
2998
- children: [
2999
- /* @__PURE__ */ jsxRuntime.jsx(
3000
- "div",
3001
- {
3002
- "data-slot": "tab-switcher",
3003
- "data-test-id": "tab-switcher",
3004
- className: tailwindMerge.twMerge("flex-shrink-0", tabPadding),
3005
- children: /* @__PURE__ */ jsxRuntime.jsx(
3006
- SegmentedControl,
3007
- {
3008
- options: [
3009
- { value: "crypto", label: "Crypto" },
3010
- { value: "stock", label: "Stocks" }
3011
- ],
3012
- value: activeTab,
3013
- onChange: onTabChange,
3014
- variant: "outlined",
3015
- fullWidth: true
3016
- }
3017
- )
3018
- }
3019
- ),
3020
- /* @__PURE__ */ jsxRuntime.jsx(
3021
- "div",
3022
- {
3023
- "data-slot": "search-wrapper",
3024
- "data-test-id": "search-wrapper",
3025
- className: "px-[var(--deframe-widget-size-padding-x-md)] pb-[var(--deframe-widget-size-padding-y-sm)] flex-shrink-0",
3026
- children: /* @__PURE__ */ jsxRuntime.jsx(
3027
- SearchInput,
3028
- {
3029
- ref: searchRef,
3030
- value: query,
3031
- onChange: setQuery,
3032
- onArrowDown: () => {
3033
- var _a, _b;
3034
- (_b = (_a = assetListRef.current) == null ? void 0 : _a.querySelector("[data-asset-index='0']")) == null ? void 0 : _b.focus();
3035
- }
3036
- }
3037
- )
3038
- }
3039
- ),
3040
- /* @__PURE__ */ jsxRuntime.jsx(
3041
- FilterGroupBar,
3042
- {
3043
- groups: filterGroups,
3044
- selected: selectedFilter,
3045
- onSelect: onFilterChange
3046
- }
3047
- ),
3048
- /* @__PURE__ */ jsxRuntime.jsx(
3049
- "div",
3050
- {
3051
- "data-slot": "section-label",
3052
- "data-test-id": "section-label",
3053
- className: "px-[var(--deframe-widget-size-padding-x-md)] pb-[var(--deframe-widget-size-padding-y-xs)] flex-shrink-0 text-[11px] [font-weight:var(--deframe-widget-font-weight-semibold)] text-[color:var(--deframe-widget-color-text-tertiary)] tracking-[0.06em] uppercase",
3054
- children: activeTab === "stock" ? "A\xE7\xF5es" : "Ativos"
3055
- }
3056
- ),
3057
- /* @__PURE__ */ jsxRuntime.jsx(
3058
- "div",
3059
- {
3060
- ref: assetListRef,
3061
- role: "listbox",
3062
- "aria-label": "Ativos dispon\xEDveis",
3063
- "data-slot": "asset-list",
3064
- "data-test-id": "asset-list",
3065
- className: "flex-1 overflow-y-auto px-[var(--deframe-widget-size-padding-x-sm)] pb-[var(--deframe-widget-size-padding-y-sm)] pt-[var(--deframe-widget-size-padding-y-xs)]",
3066
- children: visibleChains.length === 0 ? /* @__PURE__ */ jsxRuntime.jsxs(
3067
- "div",
3068
- {
3069
- "data-slot": "empty-state",
3070
- "data-test-id": "empty-state",
3071
- className: "py-[var(--deframe-widget-size-padding-y-xl)] px-[var(--deframe-widget-size-padding-x-md)] text-center",
3072
- children: [
3073
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-[14px] text-[color:var(--deframe-widget-color-text-secondary)] mb-[var(--deframe-widget-size-gap-xs)]", children: activeTab === "stock" ? "Nenhuma a\xE7\xE3o dispon\xEDvel" : "Nenhum ativo dispon\xEDvel" }),
3074
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-[12px] text-[color:var(--deframe-widget-color-text-tertiary)]", children: activeTab === "stock" ? "Mude para Crypto para ver as redes dispon\xEDveis" : "Nenhuma rede suportada encontrada" })
3075
- ]
3076
- }
3077
- ) : filtered.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(
3078
- "div",
3079
- {
3080
- "data-slot": "no-results",
3081
- "data-test-id": "no-results",
3082
- className: "py-[var(--deframe-widget-size-padding-y-xl)] px-[var(--deframe-widget-size-padding-x-md)] text-center text-[14px] text-[color:var(--deframe-widget-color-text-tertiary)]",
3083
- children: "Nenhum ativo encontrado"
3084
- }
3085
- ) : filtered.map((asset, i) => /* @__PURE__ */ jsxRuntime.jsx(
3086
- AssetRow,
3087
- {
3088
- asset,
3089
- first: i === 0 && !query,
3090
- onClick: () => onSelect(asset),
3091
- onKeyDown: (e) => handleAssetKeyDown(e, asset, i),
3092
- index: i
3093
- },
3094
- asset.id
3095
- ))
3096
- }
3097
- )
3098
- ]
3099
- }
3100
- );
3101
- }
3102
- function BlockchainAssetSelector({
3103
- chains,
3104
- assets,
3105
- onSelect,
3106
- onClose,
3107
- defaultChain,
3108
- defaultTab,
3109
- filterGroups
3110
- }) {
3111
- var _a;
3112
- const [activeTab, setActiveTab] = React6__namespace.useState(defaultTab != null ? defaultTab : "crypto");
3113
- const [query, setQuery] = React6__namespace.useState("");
3114
- const [selectedFilter, setSelectedFilter] = React6__namespace.useState("all");
3115
- const searchRef = React6__namespace.useRef(null);
3116
- const chainListRef = React6__namespace.useRef(null);
3117
- const assetListRef = React6__namespace.useRef(null);
3118
- const isMobile = useIsMobile();
3119
- const resolvedGroups = filterGroups != null ? filterGroups : DEFAULT_FILTER_GROUPS;
3120
- const visibleChains = chains.filter(
3121
- (c) => {
3122
- var _a2;
3123
- return ((_a2 = assets[c.id]) != null ? _a2 : []).some((a) => a.category === activeTab);
3124
- }
3125
- );
3126
- const [selectedChain, setSelectedChain] = React6__namespace.useState(() => {
3127
- var _a2, _b;
3128
- const preferred = chains.find((c) => c.id === defaultChain);
3129
- if (preferred && ((_a2 = assets[preferred.id]) != null ? _a2 : []).some((a) => a.category === (defaultTab != null ? defaultTab : "crypto"))) {
3130
- return preferred;
3131
- }
3132
- return (_b = visibleChains[0]) != null ? _b : chains[0];
3133
- });
3134
- const chainAssets = ((_a = assets[selectedChain.id]) != null ? _a : []).filter((a) => a.category === activeTab);
3135
- const filtered = chainAssets.filter((a) => {
3136
- var _a2, _b;
3137
- return selectedFilter === "all" || ((_b = (_a2 = a.tags) == null ? void 0 : _a2.includes(selectedFilter)) != null ? _b : false);
3138
- }).filter(
3139
- (a) => a.symbol.toLowerCase().includes(query.toLowerCase()) || a.name.toLowerCase().includes(query.toLowerCase())
3140
- ).sort((a, b) => parseUsd(b.balanceUsd) - parseUsd(a.balanceUsd));
3141
- React6__namespace.useEffect(() => {
3142
- setQuery("");
3143
- setSelectedFilter("all");
3144
- if (chainListRef.current) chainListRef.current.scrollLeft = 0;
3145
- const stillValid = visibleChains.find((c) => c.id === selectedChain.id);
3146
- if (!stillValid && visibleChains.length > 0) {
3147
- setSelectedChain(visibleChains[0]);
3148
- }
3149
- }, [activeTab]);
3150
- const handleChainSelect = React6__namespace.useCallback((chain) => {
3151
- var _a2;
3152
- setSelectedChain(chain);
3153
- setQuery("");
3154
- setSelectedFilter("all");
3155
- (_a2 = searchRef.current) == null ? void 0 : _a2.focus();
3156
- }, []);
3157
- const handleTabChange = React6__namespace.useCallback((tab) => {
3158
- setActiveTab(tab);
3159
- }, []);
3160
- React6__namespace.useEffect(() => {
3161
- const onKey = (e) => {
3162
- if (e.key === "Escape") onClose();
3163
- };
3164
- window.addEventListener("keydown", onKey);
3165
- return () => window.removeEventListener("keydown", onKey);
3166
- }, [onClose]);
3167
- React6__namespace.useEffect(() => {
3168
- var _a2;
3169
- (_a2 = searchRef.current) == null ? void 0 : _a2.focus();
3170
- }, []);
3171
- const handleChainKeyDown = (e, chain, idx) => {
3172
- var _a2, _b, _c, _d;
3173
- if (e.key === "Enter" || e.key === " ") {
3174
- e.preventDefault();
3175
- handleChainSelect(chain);
3176
- }
3177
- if (e.key === "ArrowDown") {
3178
- e.preventDefault();
3179
- (_b = (_a2 = chainListRef.current) == null ? void 0 : _a2.querySelector(`[data-chain-index="${idx + 1}"]`)) == null ? void 0 : _b.focus();
3180
- }
3181
- if (e.key === "ArrowUp") {
3182
- e.preventDefault();
3183
- (_d = (_c = chainListRef.current) == null ? void 0 : _c.querySelector(`[data-chain-index="${idx - 1}"]`)) == null ? void 0 : _d.focus();
3184
- }
3185
- };
3186
- const handleAssetKeyDown = (e, asset, idx) => {
3187
- var _a2, _b, _c, _d, _e;
3188
- if (e.key === "Enter" || e.key === " ") {
3189
- e.preventDefault();
3190
- onSelect(selectedChain, asset);
3191
- }
3192
- if (e.key === "ArrowDown") {
3193
- e.preventDefault();
3194
- (_b = (_a2 = assetListRef.current) == null ? void 0 : _a2.querySelector(`[data-asset-index="${idx + 1}"]`)) == null ? void 0 : _b.focus();
3195
- }
3196
- if (e.key === "ArrowUp") {
3197
- e.preventDefault();
3198
- if (idx === 0) {
3199
- (_c = searchRef.current) == null ? void 0 : _c.focus();
3200
- return;
3201
- }
3202
- (_e = (_d = assetListRef.current) == null ? void 0 : _d.querySelector(`[data-asset-index="${idx - 1}"]`)) == null ? void 0 : _e.focus();
3203
- }
3204
- };
3205
- const sharedSearchAssets = /* @__PURE__ */ jsxRuntime.jsx(
3206
- SearchAndAssets,
3207
- {
3208
- query,
3209
- setQuery,
3210
- searchRef,
3211
- assetListRef,
3212
- filtered,
3213
- isMobile,
3214
- onSelect: (asset) => onSelect(selectedChain, asset),
3215
- handleAssetKeyDown,
3216
- activeTab,
3217
- onTabChange: handleTabChange,
3218
- visibleChains,
3219
- filterGroups: resolvedGroups,
3220
- selectedFilter,
3221
- onFilterChange: setSelectedFilter
3222
- }
3223
- );
3224
- if (isMobile) {
3225
- return /* @__PURE__ */ jsxRuntime.jsx(
3226
- framerMotion.motion.div,
3227
- {
3228
- initial: { opacity: 0 },
3229
- animate: { opacity: 1 },
3230
- exit: { opacity: 0 },
3231
- transition: { duration: 0.2 },
3232
- onClick: onClose,
3233
- "data-slot": "backdrop",
3234
- "data-test-id": "backdrop",
3235
- className: "fixed inset-0 bg-[color:color-mix(in_srgb,var(--deframe-widget-color-bg-primary)_88%,transparent)] backdrop-blur-[4px] z-50 flex flex-col justify-end",
3236
- children: /* @__PURE__ */ jsxRuntime.jsxs(
3237
- framerMotion.motion.div,
3238
- {
3239
- role: "dialog",
3240
- "aria-modal": "true",
3241
- "aria-label": "Seletor de Blockchains e Ativos",
3242
- initial: { y: "100%" },
3243
- animate: { y: 0 },
3244
- exit: { y: "100%" },
3245
- transition: { type: "spring", stiffness: 320, damping: 32, mass: 0.8 },
3246
- onClick: (e) => e.stopPropagation(),
3247
- "data-slot": "sheet",
3248
- "data-test-id": "sheet",
3249
- className: [
3250
- "bg-[var(--deframe-widget-color-bg-secondary)] flex flex-col overflow-hidden",
3251
- "rounded-t-[var(--deframe-widget-size-radius-lg)]",
3252
- "border border-[color:var(--deframe-widget-color-border-secondary)] border-b-0",
3253
- "shadow-[0_10px_30px_color-mix(in_srgb,var(--deframe-widget-color-text-primary)_22%,transparent)]",
3254
- "max-h-[88vh]"
3255
- ].join(" "),
3256
- children: [
3257
- /* @__PURE__ */ jsxRuntime.jsx(
3258
- "div",
3259
- {
3260
- "data-slot": "drag-handle",
3261
- "data-test-id": "drag-handle",
3262
- className: "flex justify-center pt-[var(--deframe-widget-size-padding-y-sm)] pb-[var(--deframe-widget-size-padding-y-xs)].5 flex-shrink-0",
3263
- children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-9 h-1 rounded-[var(--deframe-widget-size-radius-full)] bg-[var(--deframe-widget-color-border-primary)]" })
3264
- }
3265
- ),
3266
- /* @__PURE__ */ jsxRuntime.jsxs(
3267
- "div",
3268
- {
3269
- "data-slot": "sheet-header",
3270
- "data-test-id": "sheet-header",
3271
- className: "flex items-center justify-between pt-[var(--deframe-widget-size-padding-y-xs)].5 pr-[var(--deframe-widget-size-padding-x-md)] pb-[var(--deframe-widget-size-padding-y-sm)].5 pl-[var(--deframe-widget-size-padding-x-md)] flex-shrink-0",
3272
- children: [
3273
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[16px] [font-weight:var(--deframe-widget-font-weight-semibold)] text-[color:var(--deframe-widget-color-text-primary)] font-[var(--deframe-widget-font-family)]", children: "Seletor de Blockchains e Ativos" }),
3274
- /* @__PURE__ */ jsxRuntime.jsx(CloseButton, { onClick: onClose })
3275
- ]
3276
- }
3277
- ),
3278
- /* @__PURE__ */ jsxRuntime.jsxs(
3279
- "div",
3280
- {
3281
- "data-slot": "chain-section",
3282
- "data-test-id": "chain-section",
3283
- className: "flex-shrink-0 pb-[var(--deframe-widget-size-padding-y-sm)].5",
3284
- children: [
3285
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-[11px] [font-weight:var(--deframe-widget-font-weight-semibold)] text-[color:var(--deframe-widget-color-text-tertiary)] tracking-[0.06em] uppercase px-[var(--deframe-widget-size-padding-x-md)] pb-[var(--deframe-widget-size-padding-y-sm)]", children: "Redes" }),
3286
- /* @__PURE__ */ jsxRuntime.jsx(
3287
- "div",
3288
- {
3289
- ref: chainListRef,
3290
- role: "listbox",
3291
- "aria-label": "Redes",
3292
- "data-slot": "chain-chip-list",
3293
- "data-test-id": "chain-chip-list",
3294
- className: "flex gap-[var(--deframe-widget-size-gap-sm)] overflow-x-auto px-[var(--deframe-widget-size-padding-x-md)] pb-[var(--deframe-widget-size-padding-y-xs)] [scrollbar-width:none]",
3295
- children: visibleChains.map((chain) => /* @__PURE__ */ jsxRuntime.jsx(
3296
- ChainChip,
3297
- {
3298
- chain,
3299
- selected: selectedChain.id === chain.id,
3300
- onClick: () => handleChainSelect(chain)
3301
- },
3302
- chain.id
3303
- ))
3304
- }
3305
- )
3306
- ]
3307
- }
3308
- ),
3309
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-px bg-[var(--deframe-widget-color-border-secondary)] flex-shrink-0" }),
3310
- /* @__PURE__ */ jsxRuntime.jsx(
3311
- "div",
3312
- {
3313
- "data-slot": "sheet-body",
3314
- "data-test-id": "sheet-body",
3315
- className: "flex-1 flex flex-col overflow-hidden pt-[var(--deframe-widget-size-padding-y-xs)]",
3316
- children: sharedSearchAssets
3317
- }
3318
- )
3319
- ]
3320
- }
3321
- )
3322
- }
3323
- );
3324
- }
3325
- return /* @__PURE__ */ jsxRuntime.jsx(
3326
- framerMotion.motion.div,
3327
- {
3328
- initial: { opacity: 0 },
3329
- animate: { opacity: 1 },
3330
- exit: { opacity: 0 },
3331
- transition: { duration: 0.2 },
3332
- onClick: onClose,
3333
- "data-slot": "backdrop",
3334
- "data-test-id": "backdrop",
3335
- className: "fixed inset-0 bg-[color:color-mix(in_srgb,var(--deframe-widget-color-bg-primary)_88%,transparent)] backdrop-blur-[4px] z-50 flex items-center justify-center px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-md)]",
3336
- children: /* @__PURE__ */ jsxRuntime.jsxs(
3337
- framerMotion.motion.div,
3338
- {
3339
- role: "dialog",
3340
- "aria-modal": "true",
3341
- "aria-label": "Seletor de Blockchains e Ativos",
3342
- initial: { opacity: 0, scale: 0.96 },
3343
- animate: { opacity: 1, scale: 1 },
3344
- exit: { opacity: 0, scale: 0.96 },
3345
- transition: { duration: 0.2, ease: "easeOut" },
3346
- onClick: (e) => e.stopPropagation(),
3347
- "data-slot": "modal",
3348
- "data-test-id": "modal",
3349
- className: [
3350
- "w-[min(680px,calc(100vw-32px))]",
3351
- "max-h-[min(620px,calc(100vh-64px))]",
3352
- "bg-[var(--deframe-widget-color-bg-secondary)]",
3353
- "border border-[color:var(--deframe-widget-color-border-secondary)]",
3354
- "rounded-[var(--deframe-widget-size-radius-md)]",
3355
- "shadow-[0_20px_50px_color-mix(in_srgb,var(--deframe-widget-color-text-primary)_28%,transparent)]",
3356
- "flex flex-col overflow-hidden"
3357
- ].join(" "),
3358
- children: [
3359
- /* @__PURE__ */ jsxRuntime.jsxs(
3360
- "div",
3361
- {
3362
- "data-slot": "modal-header",
3363
- "data-test-id": "modal-header",
3364
- className: "flex items-center justify-between pt-[var(--deframe-widget-size-padding-y-md)] pr-[var(--deframe-widget-size-padding-x-md)] pb-[14px] pl-[var(--deframe-widget-size-padding-x-md)] border-b border-[color:var(--deframe-widget-color-border-secondary)] flex-shrink-0",
3365
- children: [
3366
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[16px] [font-weight:var(--deframe-widget-font-weight-semibold)] text-[color:var(--deframe-widget-color-text-primary)] font-[var(--deframe-widget-font-family)]", children: "Seletor de Blockchains e Ativos" }),
3367
- /* @__PURE__ */ jsxRuntime.jsx(CloseButton, { onClick: onClose })
3368
- ]
3369
- }
3370
- ),
3371
- /* @__PURE__ */ jsxRuntime.jsxs(
3372
- "div",
3373
- {
3374
- "data-slot": "modal-body",
3375
- "data-test-id": "modal-body",
3376
- className: "flex flex-1 overflow-hidden",
3377
- children: [
3378
- /* @__PURE__ */ jsxRuntime.jsxs(
3379
- "div",
3380
- {
3381
- "data-slot": "chain-sidebar",
3382
- "data-test-id": "chain-sidebar",
3383
- className: [
3384
- "w-[210px] flex-shrink-0",
3385
- "border-r border-[color:var(--deframe-widget-color-border-secondary)]",
3386
- "bg-[var(--deframe-widget-color-bg-secondary)]",
3387
- "flex flex-col overflow-hidden"
3388
- ].join(" "),
3389
- children: [
3390
- /* @__PURE__ */ jsxRuntime.jsx(
3391
- "div",
3392
- {
3393
- "data-slot": "chain-sidebar-label",
3394
- "data-test-id": "chain-sidebar-label",
3395
- className: "px-[var(--deframe-widget-size-padding-x-md)] pt-[var(--deframe-widget-size-padding-y-sm)] pb-[var(--deframe-widget-size-padding-y-xs)].5 text-[11px] [font-weight:var(--deframe-widget-font-weight-semibold)] text-[color:var(--deframe-widget-color-text-tertiary)] tracking-[0.06em] uppercase",
3396
- children: "Redes"
3397
- }
3398
- ),
3399
- /* @__PURE__ */ jsxRuntime.jsx(
3400
- "div",
3401
- {
3402
- ref: chainListRef,
3403
- role: "listbox",
3404
- "aria-label": "Redes",
3405
- "data-slot": "chain-list",
3406
- "data-test-id": "chain-list",
3407
- className: "flex-1 overflow-y-auto px-[var(--deframe-widget-size-padding-x-sm)] pb-[var(--deframe-widget-size-padding-y-sm)] pt-[var(--deframe-widget-size-padding-y-xs)]",
3408
- children: visibleChains.map((chain, i) => /* @__PURE__ */ jsxRuntime.jsx(
3409
- ChainRow,
3410
- {
3411
- chain,
3412
- selected: selectedChain.id === chain.id,
3413
- onClick: () => handleChainSelect(chain),
3414
- onKeyDown: (e) => handleChainKeyDown(e, chain, i),
3415
- index: i
3416
- },
3417
- chain.id
3418
- ))
3419
- }
3420
- )
3421
- ]
3422
- }
3423
- ),
3424
- /* @__PURE__ */ jsxRuntime.jsx(
3425
- "div",
3426
- {
3427
- "data-slot": "asset-panel",
3428
- "data-test-id": "asset-panel",
3429
- className: "flex-1 flex flex-col overflow-hidden",
3430
- children: sharedSearchAssets
3431
- }
3432
- )
3433
- ]
3434
- }
3435
- )
3436
- ]
3437
- }
3438
- )
3439
- }
3440
- );
3441
- }
3442
- function AssetList(_a) {
3443
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
3444
- return /* @__PURE__ */ jsxRuntime.jsx(
3445
- "div",
3446
- __spreadValues({
3447
- "data-slot": "asset-list",
3448
- "data-test-id": "asset-list",
3449
- className: tailwindMerge.twMerge(
3450
- "w-full self-start flex flex-col",
3451
- "bg-[var(--deframe-widget-color-bg-secondary)] border border-[color:var(--deframe-widget-color-border-secondary)]",
3452
- "rounded-[var(--deframe-widget-size-radius-md)]",
3453
- "overflow-hidden",
3454
- className
3455
- )
3456
- }, props)
3457
- );
3458
- }
3459
- function AssetListHeader(_a) {
3460
- var _b = _a, { action, children, className } = _b, props = __objRest(_b, ["action", "children", "className"]);
3461
- return /* @__PURE__ */ jsxRuntime.jsxs(
3462
- "div",
3463
- __spreadProps(__spreadValues({
3464
- "data-slot": "asset-list-header",
3465
- "data-test-id": "asset-list-header",
3466
- className: tailwindMerge.twMerge("flex items-center justify-between px-[var(--deframe-widget-size-padding-x-md)] pt-[var(--deframe-widget-size-padding-y-md)] pb-[var(--deframe-widget-size-padding-y-sm)]", className)
3467
- }, props), {
3468
- children: [
3469
- /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-[color:var(--deframe-widget-color-text-primary)] text-[15px] [font-weight:var(--deframe-widget-font-weight-semibold)] font-[var(--deframe-widget-font-family)] leading-[1.3]", children }),
3470
- action != null && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-[var(--deframe-widget-size-gap-sm)] flex-shrink-0", children: action })
3471
- ]
3472
- })
3473
- );
3474
- }
3475
- function AssetListFilter({ filters, selected, onSelect, className }) {
3476
- return /* @__PURE__ */ jsxRuntime.jsx(
3477
- "div",
3478
- {
3479
- "data-slot": "asset-list-filter",
3480
- "data-test-id": "asset-list-filter",
3481
- className: tailwindMerge.twMerge(
3482
- "flex items-center gap-[var(--deframe-widget-size-gap-sm)] px-[var(--deframe-widget-size-padding-x-md)] pb-[var(--deframe-widget-size-padding-y-sm)]",
3483
- "overflow-x-auto",
3484
- className
3485
- ),
3486
- style: { scrollbarWidth: "none" },
3487
- children: filters.map((filter) => {
3488
- const isSelected = filter.id === selected;
3489
- return /* @__PURE__ */ jsxRuntime.jsx(
3490
- "button",
3491
- {
3492
- type: "button",
3493
- "data-slot": "asset-list-filter-pill",
3494
- "data-test-id": "asset-list-filter-pill",
3495
- onClick: () => onSelect(filter.id),
3496
- className: tailwindMerge.twMerge(
3497
- "inline-flex items-center px-[var(--deframe-widget-size-padding-x-sm)] py-[5px]",
3498
- "rounded-[var(--deframe-widget-size-radius-full)] border",
3499
- "text-[12px] [font-weight:var(--deframe-widget-font-weight-medium)] leading-[1.4]",
3500
- "font-[var(--deframe-widget-font-family)]",
3501
- "cursor-pointer whitespace-nowrap flex-shrink-0",
3502
- "outline-none transition-all duration-150",
3503
- isSelected ? "bg-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_12%,transparent)] border-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_32%,transparent)] text-[color:var(--deframe-widget-color-brand-primary)]" : "bg-transparent border-[color:var(--deframe-widget-color-border-secondary)] text-[color:var(--deframe-widget-color-text-secondary)] hover:bg-[color:color-mix(in_srgb,var(--deframe-widget-color-bg-secondary)_72%,transparent)]"
3504
- ),
3505
- children: filter.label
3506
- },
3507
- filter.id
3508
- );
3509
- })
3510
- }
3511
- );
3512
- }
3513
- function AssetListColumns(_a) {
3514
- var _b = _a, {
3515
- labels = ["ATIVO", "TEND\xCANCIA", "SALDO"],
3516
- className
3517
- } = _b, props = __objRest(_b, [
3518
- "labels",
3519
- "className"
3520
- ]);
3521
- return /* @__PURE__ */ jsxRuntime.jsxs(
3522
- "div",
3523
- __spreadProps(__spreadValues({
3524
- "data-slot": "asset-list-columns",
3525
- "data-test-id": "asset-list-columns",
3526
- className: tailwindMerge.twMerge(
3527
- "grid grid-cols-[1fr_auto_auto] gap-x-[var(--deframe-widget-size-gap-md)]",
3528
- "px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-sm)]",
3529
- "border-t border-[color:var(--deframe-widget-color-border-secondary)]",
3530
- className
3531
- )
3532
- }, props), {
3533
- children: [
3534
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] [font-weight:var(--deframe-widget-font-weight-medium)] uppercase tracking-[0.08em] text-[color:var(--deframe-widget-color-text-tertiary)] leading-[1.4]", children: labels[0] }),
3535
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] [font-weight:var(--deframe-widget-font-weight-medium)] uppercase tracking-[0.08em] text-[color:var(--deframe-widget-color-text-tertiary)] leading-[1.4] text-center", children: labels[1] }),
3536
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] [font-weight:var(--deframe-widget-font-weight-medium)] uppercase tracking-[0.08em] text-[color:var(--deframe-widget-color-text-tertiary)] leading-[1.4] text-right", children: labels[2] })
3537
- ]
3538
- })
3539
- );
3540
- }
3541
- function AssetTrendBadge(_a) {
3542
- var _b = _a, { direction, value, className } = _b, props = __objRest(_b, ["direction", "value", "className"]);
3543
- const directionClasses = {
3544
- up: "bg-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_12%,transparent)] border-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_32%,transparent)] text-[color:var(--deframe-widget-color-brand-primary)]",
3545
- down: "bg-[color:color-mix(in_srgb,var(--deframe-widget-color-state-error)_16%,transparent)] border-[color:color-mix(in_srgb,var(--deframe-widget-color-state-error)_32%,transparent)] text-[color:var(--deframe-widget-color-state-error)]",
3546
- neutral: "bg-[color:color-mix(in_srgb,var(--deframe-widget-color-bg-tertiary)_84%,transparent)] border-[color:var(--deframe-widget-color-border-secondary)] text-[color:var(--deframe-widget-color-text-tertiary)]"
3547
- };
3548
- const arrowIcons = {
3549
- up: /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "8", height: "8", viewBox: "0 0 10 10", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M5 1.5L9 7H1L5 1.5Z", fill: "currentColor" }) }),
3550
- down: /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "8", height: "8", viewBox: "0 0 10 10", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M5 8.5L1 3H9L5 8.5Z", fill: "currentColor" }) }),
3551
- neutral: /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "9", height: "9", viewBox: "0 0 12 12", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M2 6H10", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round" }) })
3552
- };
3553
- return /* @__PURE__ */ jsxRuntime.jsxs(
3554
- "span",
3555
- __spreadProps(__spreadValues({
3556
- "data-slot": "asset-trend-badge",
3557
- "data-test-id": "asset-trend-badge",
3558
- className: tailwindMerge.twMerge(
3559
- "inline-flex items-center gap-[3px]",
3560
- "px-[7px] py-[3px]",
3561
- "rounded-[var(--deframe-widget-size-radius-full)] border",
3562
- "text-[11px] [font-weight:var(--deframe-widget-font-weight-medium)] leading-[1.4]",
3563
- "font-[var(--deframe-widget-font-family)]",
3564
- "whitespace-nowrap",
3565
- directionClasses[direction],
3566
- className
3567
- )
3568
- }, props), {
3569
- children: [
3570
- arrowIcons[direction],
3571
- value
3572
- ]
3573
- })
3574
- );
3575
- }
3576
- function AssetListItem(_a) {
3577
- var _b = _a, {
3578
- asset,
3579
- name,
3580
- symbol,
3581
- trendDirection,
3582
- trendValue,
3583
- balance,
3584
- balanceUsd,
3585
- className
3586
- } = _b, props = __objRest(_b, [
3587
- "asset",
3588
- "name",
3589
- "symbol",
3590
- "trendDirection",
3591
- "trendValue",
3592
- "balance",
3593
- "balanceUsd",
3594
- "className"
3595
- ]);
3596
- return /* @__PURE__ */ jsxRuntime.jsxs(
3597
- "div",
3598
- __spreadProps(__spreadValues({
3599
- "data-slot": "asset-list-item",
3600
- "data-test-id": "asset-list-item",
3601
- className: tailwindMerge.twMerge(
3602
- "grid grid-cols-[1fr_auto_auto] gap-x-[var(--deframe-widget-size-gap-md)] items-center",
3603
- "px-[var(--deframe-widget-size-padding-x-md)] py-[11px]",
3604
- "border-t border-[color:var(--deframe-widget-color-border-secondary)]",
3605
- "transition-colors duration-150",
3606
- "hover:bg-[color:color-mix(in_srgb,var(--deframe-widget-color-bg-secondary)_72%,transparent)]",
3607
- className
3608
- )
3609
- }, props), {
3610
- children: [
3611
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-[var(--deframe-widget-size-gap-sm)] min-w-0", children: [
3612
- /* @__PURE__ */ jsxRuntime.jsx(IconCircle, { item: asset, size: 36 }),
3613
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col min-w-0", children: [
3614
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[13px] [font-weight:var(--deframe-widget-font-weight-semibold)] text-[color:var(--deframe-widget-color-text-primary)] leading-[1.3] font-[var(--deframe-widget-font-family)] truncate", children: name }),
3615
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[11px] text-[color:var(--deframe-widget-color-text-secondary)] leading-[1.4]", children: symbol })
3616
- ] })
3617
- ] }),
3618
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(AssetTrendBadge, { direction: trendDirection, value: trendValue }) }),
3619
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-end text-right", children: [
3620
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[13px] [font-weight:var(--deframe-widget-font-weight-semibold)] text-[color:var(--deframe-widget-color-text-primary)] leading-[1.3] font-[var(--deframe-widget-font-family)]", children: balanceUsd }),
3621
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[11px] text-[color:var(--deframe-widget-color-text-secondary)] leading-[1.4]", children: balance })
3622
- ] })
3623
- ]
3624
- })
3625
- );
3626
- }
3627
- var riskConfig = {
3628
- low: {
3629
- label: "Baixo",
3630
- wrapperClass: "bg-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_12%,transparent)] border-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_32%,transparent)]",
3631
- dotClass: "bg-[var(--deframe-widget-color-brand-primary)]",
3632
- labelClass: "text-[color:var(--deframe-widget-color-brand-primary)]"
3633
- },
3634
- medium: {
3635
- label: "M\xE9dio",
3636
- wrapperClass: "bg-[color:color-mix(in_srgb,var(--deframe-widget-color-state-warning)_16%,transparent)] border-[color:color-mix(in_srgb,var(--deframe-widget-color-state-warning)_32%,transparent)]",
3637
- dotClass: "bg-[var(--deframe-widget-color-state-warning)]",
3638
- labelClass: "text-[color:var(--deframe-widget-color-state-warning)]"
3639
- },
3640
- high: {
3641
- label: "Alto",
3642
- wrapperClass: "bg-[color:color-mix(in_srgb,var(--deframe-widget-color-state-error)_16%,transparent)] border-[color:color-mix(in_srgb,var(--deframe-widget-color-state-error)_32%,transparent)]",
3643
- dotClass: "bg-[var(--deframe-widget-color-state-error)]",
3644
- labelClass: "text-[color:var(--deframe-widget-color-state-error)]"
3645
- }
3646
- };
3647
- function StrategyList(_a) {
3648
- var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
3649
- return /* @__PURE__ */ jsxRuntime.jsx(
3650
- "div",
3651
- __spreadValues({
3652
- "data-slot": "strategy-list",
3653
- "data-test-id": "strategy-list",
3654
- className: tailwindMerge.twMerge("w-full self-start flex flex-col gap-[var(--deframe-widget-size-gap-sm)]", className)
3655
- }, props)
3656
- );
3657
- }
3658
- function StrategyListHeader(_a) {
3659
- var _b = _a, {
3660
- onBack,
3661
- subtitle,
3662
- children,
3663
- className
3664
- } = _b, props = __objRest(_b, [
3665
- "onBack",
3666
- "subtitle",
3667
- "children",
3668
- "className"
3669
- ]);
3670
- return /* @__PURE__ */ jsxRuntime.jsxs(
3671
- "div",
3672
- __spreadProps(__spreadValues({
3673
- "data-slot": "strategy-list-header",
3674
- "data-test-id": "strategy-list-header",
3675
- className: tailwindMerge.twMerge("w-full flex flex-col gap-[var(--deframe-widget-size-gap-xs)]", className)
3676
- }, props), {
3677
- children: [
3678
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-[var(--deframe-widget-size-gap-sm)]", children: [
3679
- onBack != null && /* @__PURE__ */ jsxRuntime.jsx(
3680
- "button",
3681
- {
3682
- type: "button",
3683
- onClick: onBack,
3684
- "aria-label": "Voltar",
3685
- className: tailwindMerge.twMerge(
3686
- "flex items-center justify-center",
3687
- "w-8 h-8",
3688
- "rounded-[var(--deframe-widget-size-radius-sm)]",
3689
- "border border-[color:var(--deframe-widget-color-border-secondary)]",
3690
- "text-[color:var(--deframe-widget-color-text-secondary)]",
3691
- "hover:text-[color:var(--deframe-widget-color-text-primary)] hover:bg-[color:color-mix(in_srgb,var(--deframe-widget-color-bg-secondary)_72%,transparent)]",
3692
- "transition-all duration-150",
3693
- "cursor-pointer flex-shrink-0 outline-none"
3694
- ),
3695
- children: /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "16", height: "16", viewBox: "0 0 16 16", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M10 12L6 8L10 4", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) })
3696
- }
3697
- ),
3698
- /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-[color:var(--deframe-widget-color-text-primary)] text-[17px] [font-weight:var(--deframe-widget-font-weight-semibold)] font-[var(--deframe-widget-font-family)] leading-[1.3]", children })
3699
- ] }),
3700
- subtitle != null && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[color:var(--deframe-widget-color-text-secondary)] text-[13px] font-[var(--deframe-widget-font-family)] leading-[1.5]", children: subtitle })
3701
- ]
3702
- })
3703
- );
3704
- }
3705
- function StrategyRiskBadge(_a) {
3706
- var _b = _a, { risk, label, className } = _b, props = __objRest(_b, ["risk", "label", "className"]);
3707
- const config = riskConfig[risk];
3708
- const displayLabel = label != null ? label : config.label;
3709
- return /* @__PURE__ */ jsxRuntime.jsxs(
3710
- "span",
3711
- __spreadProps(__spreadValues({
3712
- "data-slot": "strategy-risk-badge",
3713
- "data-test-id": "strategy-risk-badge",
3714
- className: tailwindMerge.twMerge(
3715
- "inline-flex items-center gap-[5px]",
3716
- "py-[3px] pr-[10px] pl-[7px]",
3717
- "rounded-[var(--deframe-widget-size-radius-full)] border",
3718
- config.wrapperClass,
3719
- className
3720
- )
3721
- }, props), {
3722
- children: [
3723
- /* @__PURE__ */ jsxRuntime.jsx(
3724
- "span",
3725
- {
3726
- className: tailwindMerge.twMerge("w-[6px] h-[6px] rounded-[var(--deframe-widget-size-radius-full)] flex-shrink-0 inline-block", config.dotClass)
3727
- }
3728
- ),
3729
- /* @__PURE__ */ jsxRuntime.jsx(
3730
- "span",
3731
- {
3732
- className: tailwindMerge.twMerge(
3733
- "text-[11px] [font-weight:var(--deframe-widget-font-weight-medium)] font-[var(--deframe-widget-font-family)]",
3734
- config.labelClass
3735
- ),
3736
- children: displayLabel
3737
- }
3738
- )
3739
- ]
3740
- })
3741
- );
3742
- }
3743
- function StrategyListItem(_a) {
3744
- var _b = _a, {
3745
- strategy,
3746
- name,
3747
- network,
3748
- rendimento,
3749
- risk,
3750
- onInvestir,
3751
- onSacar,
3752
- showSacar = true,
3753
- className
3754
- } = _b, props = __objRest(_b, [
3755
- "strategy",
3756
- "name",
3757
- "network",
3758
- "rendimento",
3759
- "risk",
3760
- "onInvestir",
3761
- "onSacar",
3762
- "showSacar",
3763
- "className"
3764
- ]);
3765
- return /* @__PURE__ */ jsxRuntime.jsxs(
3766
- "div",
3767
- __spreadProps(__spreadValues({
3768
- "data-slot": "strategy-list-item",
3769
- "data-test-id": "strategy-list-item",
3770
- className: tailwindMerge.twMerge(
3771
- "w-full flex flex-col gap-[var(--deframe-widget-size-gap-sm)] px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-md)]",
3772
- "bg-[var(--deframe-widget-color-bg-secondary)] border border-[color:var(--deframe-widget-color-border-secondary)]",
3773
- "rounded-[var(--deframe-widget-size-radius-md)]",
3774
- className
3775
- )
3776
- }, props), {
3777
- children: [
3778
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "w-full flex items-center gap-[var(--deframe-widget-size-gap-sm)]", children: [
3779
- /* @__PURE__ */ jsxRuntime.jsx(IconCircle, { item: strategy, size: 40 }),
3780
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col flex-1 min-w-0", children: [
3781
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[14px] [font-weight:var(--deframe-widget-font-weight-semibold)] text-[color:var(--deframe-widget-color-text-primary)] leading-[1.3] font-[var(--deframe-widget-font-family)] truncate", children: name }),
3782
- network != null && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[12px] text-[color:var(--deframe-widget-color-text-secondary)] leading-[1.4]", children: network })
3783
- ] }),
3784
- risk != null && /* @__PURE__ */ jsxRuntime.jsx(StrategyRiskBadge, { risk })
3785
- ] }),
3786
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "w-full flex items-baseline gap-[var(--deframe-widget-size-gap-sm)]", children: [
3787
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[11px] [font-weight:var(--deframe-widget-font-weight-medium)] uppercase tracking-[0.08em] text-[color:var(--deframe-widget-color-text-tertiary)]", children: "Rendimento" }),
3788
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[22px] [font-weight:var(--deframe-widget-font-weight-bold)] text-[color:var(--deframe-widget-color-brand-primary)] font-[var(--deframe-widget-font-family)] leading-[1.1]", children: rendimento })
3789
- ] }),
3790
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "w-full flex items-center gap-[var(--deframe-widget-size-gap-sm)]", children: [
3791
- /* @__PURE__ */ jsxRuntime.jsx(
3792
- PrimaryButton,
3793
- {
3794
- className: "h-9 text-[13px] flex-1",
3795
- onClick: onInvestir,
3796
- children: "Investir"
3797
- }
3798
- ),
3799
- showSacar && /* @__PURE__ */ jsxRuntime.jsx(
3800
- SecondaryButton,
3801
- {
3802
- className: "h-9 text-[13px] flex-1",
3803
- onClick: onSacar,
3804
- children: "Sacar"
3805
- }
3806
- )
3807
- ] })
3808
- ]
3809
- })
3810
- );
3811
- }
3812
- function TokenIcon({ token, size = 40, badge, badgeSize = 18, className }) {
3813
- return /* @__PURE__ */ jsxRuntime.jsxs(
3814
- "div",
3815
- {
3816
- "data-test-id": "token-icon",
3817
- "data-slot": "token-icon",
3818
- className: tailwindMerge.twMerge("relative flex-shrink-0", className),
3819
- style: { width: size, height: size },
3820
- children: [
3821
- /* @__PURE__ */ jsxRuntime.jsx(
3822
- IconCircle,
3823
- {
3824
- "data-test-id": "token-icon-circle",
3825
- "data-slot": "token-icon-circle",
3826
- item: token,
3827
- size
3828
- }
3829
- ),
3830
- badge && /* @__PURE__ */ jsxRuntime.jsx(
3831
- "div",
3832
- {
3833
- "data-test-id": "token-icon-badge",
3834
- "data-slot": "token-icon-badge",
3835
- className: "absolute -bottom-0.5 -right-0.5 rounded-[var(--deframe-widget-size-radius-full)] shadow-[0_0_0_2px_var(--deframe-widget-color-bg-secondary)]",
3836
- children: /* @__PURE__ */ jsxRuntime.jsx(
3837
- IconCircle,
3838
- {
3839
- "data-test-id": "token-icon-badge-circle",
3840
- "data-slot": "token-icon-badge-circle",
3841
- item: badge,
3842
- size: badgeSize
3843
- }
3844
- )
3845
- }
3846
- )
3847
- ]
3848
- }
3849
- );
3850
- }
3851
- function PercentageChips({
3852
- options = [25, 50, 75, 100],
3853
- maxLabel = "M\xE1x.",
3854
- selected = null,
3855
- onSelect
3856
- }) {
3857
- return /* @__PURE__ */ jsxRuntime.jsx(
3858
- "div",
3859
- {
3860
- "data-test-id": "percentage-chips",
3861
- "data-slot": "percentage-chips",
3862
- className: "flex gap-[6px] items-center",
3863
- children: options.map((pct, i) => {
3864
- const isLast = i === options.length - 1;
3865
- const isActive = pct === selected;
3866
- const label = isLast ? maxLabel : `${pct}%`;
3867
- return /* @__PURE__ */ jsxRuntime.jsx(
3868
- ChipPill,
3869
- {
3870
- label,
3871
- active: isActive,
3872
- onClick: () => onSelect(pct)
3873
- },
3874
- pct
3875
- );
3876
- })
3877
- }
3878
- );
3879
- }
3880
- function ChipPill({ label, active, onClick }) {
3881
- const baseClasses = [
3882
- "inline-flex items-center justify-center",
3883
- "py-[3px] px-[10px]",
3884
- "rounded-[var(--deframe-widget-size-radius-full)]",
3885
- "cursor-pointer",
3886
- "text-[12px]",
3887
- "transition-all duration-150",
3888
- "outline-none",
3889
- "font-[var(--deframe-widget-font-family)]",
3890
- "whitespace-nowrap",
3891
- "border"
3892
- ].join(" ");
3893
- const stateClasses = {
3894
- active: [
3895
- "border-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_32%,transparent)]",
3896
- "bg-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_12%,transparent)]",
3897
- "text-[color:var(--deframe-widget-color-brand-primary)]",
3898
- "[font-weight:var(--deframe-widget-font-weight-semibold)]"
3899
- ].join(" "),
3900
- default: [
3901
- "border-[color:var(--deframe-widget-color-border-secondary)]",
3902
- "bg-[color:color-mix(in_srgb,var(--deframe-widget-color-bg-tertiary)_84%,transparent)]",
3903
- "text-[color:var(--deframe-widget-color-text-secondary)]",
3904
- "[font-weight:var(--deframe-widget-font-weight-regular)]",
3905
- "hover:border-[color:var(--deframe-widget-color-border-primary)]",
3906
- "hover:bg-[color:color-mix(in_srgb,var(--deframe-widget-color-bg-tertiary)_92%,transparent)]",
3907
- "hover:text-[color:var(--deframe-widget-color-text-primary)]"
3908
- ].join(" ")
3909
- };
3910
- const chipClasses = tailwindMerge.twMerge(baseClasses, stateClasses[active ? "active" : "default"]);
3911
- return /* @__PURE__ */ jsxRuntime.jsx(
3912
- "button",
3913
- {
3914
- "data-test-id": "chip-pill",
3915
- "data-slot": "chip-pill",
3916
- onClick,
3917
- className: chipClasses,
3918
- children: /* @__PURE__ */ jsxRuntime.jsx(
3919
- "span",
3920
- {
3921
- "data-test-id": "chip-pill-label",
3922
- "data-slot": "chip-pill-label",
3923
- children: label
3924
- }
3925
- )
3926
- }
3927
- );
3928
- }
3929
- var variantClasses = {
3930
- error: {
3931
- wrapper: "bg-[color:color-mix(in_srgb,var(--deframe-widget-color-state-error)_16%,transparent)] border-[color:color-mix(in_srgb,var(--deframe-widget-color-state-error)_32%,transparent)]"
3932
- },
3933
- warning: {
3934
- wrapper: "bg-[color:color-mix(in_srgb,var(--deframe-widget-color-state-warning)_16%,transparent)] border-[color:color-mix(in_srgb,var(--deframe-widget-color-state-warning)_32%,transparent)]"
3935
- },
3936
- info: {
3937
- wrapper: "bg-[color:color-mix(in_srgb,var(--deframe-widget-color-state-info)_16%,transparent)] border-[color:color-mix(in_srgb,var(--deframe-widget-color-state-info)_32%,transparent)]"
3938
- },
3939
- success: {
3940
- wrapper: "bg-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_12%,transparent)] border-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_32%,transparent)]"
3941
- }
3942
- };
3943
- var variantData = {
3944
- error: {
3945
- accentClass: "bg-[var(--deframe-widget-color-state-error)]",
3946
- actionClass: "text-[color:var(--deframe-widget-color-state-error)]"
3947
- },
3948
- warning: {
3949
- accentClass: "bg-[var(--deframe-widget-color-state-warning)]",
3950
- actionClass: "text-[color:var(--deframe-widget-color-state-warning)]"
3951
- },
3952
- info: {
3953
- accentClass: "bg-[var(--deframe-widget-color-state-info)]",
3954
- actionClass: "text-[color:var(--deframe-widget-color-state-info)]"
3955
- },
3956
- success: {
3957
- accentClass: "bg-[var(--deframe-widget-color-brand-primary)]",
3958
- actionClass: "text-[color:var(--deframe-widget-color-brand-primary)]"
3959
- }
3960
- };
3961
- function InlineNotification({
3962
- variant,
3963
- message,
3964
- action,
3965
- onDismiss
3966
- }) {
3967
- const { wrapper } = variantClasses[variant];
3968
- const { accentClass, actionClass } = variantData[variant];
3969
- const wrapperClasses = tailwindMerge.twMerge(
3970
- "relative flex items-center gap-[var(--deframe-widget-size-gap-sm)]",
3971
- "py-[7px] pr-[10px] pl-[14px]",
3972
- "rounded-[var(--deframe-widget-size-radius-sm)]",
3973
- "border",
3974
- "overflow-hidden",
3975
- wrapper
3976
- );
3977
- return /* @__PURE__ */ jsxRuntime.jsxs(
3978
- "div",
3979
- {
3980
- "data-test-id": "inline-notification",
3981
- "data-slot": "inline-notification",
3982
- role: "alert",
3983
- className: wrapperClasses,
3984
- children: [
3985
- /* @__PURE__ */ jsxRuntime.jsx(
3986
- "div",
3987
- {
3988
- "data-test-id": "inline-notification-accent",
3989
- "data-slot": "inline-notification-accent",
3990
- className: tailwindMerge.twMerge(
3991
- "absolute left-0 top-0 bottom-0 w-[3px] rounded-[var(--deframe-widget-size-radius-sm)_0_0_var(--deframe-widget-size-radius-sm)]",
3992
- accentClass
3993
- )
3994
- }
3995
- ),
3996
- /* @__PURE__ */ jsxRuntime.jsx(
3997
- "div",
3998
- {
3999
- "data-test-id": "inline-notification-dot",
4000
- "data-slot": "inline-notification-dot",
4001
- className: tailwindMerge.twMerge("w-[6px] h-[6px] rounded-[var(--deframe-widget-size-radius-full)] flex-shrink-0", accentClass)
4002
- }
4003
- ),
4004
- /* @__PURE__ */ jsxRuntime.jsx(
4005
- "span",
4006
- {
4007
- "data-test-id": "inline-notification-message",
4008
- "data-slot": "inline-notification-message",
4009
- className: "flex-1 text-[13px] text-[color:var(--deframe-widget-color-text-secondary)] font-[var(--deframe-widget-font-family)] leading-[1.4]",
4010
- children: message
4011
- }
4012
- ),
4013
- action && /* @__PURE__ */ jsxRuntime.jsxs(
4014
- "button",
4015
- {
4016
- "data-test-id": "inline-notification-action",
4017
- "data-slot": "inline-notification-action",
4018
- onClick: () => action.onClick(),
4019
- className: tailwindMerge.twMerge(
4020
- "flex-shrink-0 bg-none border-none cursor-pointer text-[13px] [font-weight:var(--deframe-widget-font-weight-semibold)] py-[var(--deframe-widget-size-padding-y-none)] px-[var(--deframe-widget-size-padding-x-xs)] outline-none font-[var(--deframe-widget-font-family)] whitespace-nowrap",
4021
- actionClass
4022
- ),
4023
- children: [
4024
- action.label,
4025
- " \u2192"
4026
- ]
4027
- }
4028
- ),
4029
- onDismiss && /* @__PURE__ */ jsxRuntime.jsx(
4030
- "button",
4031
- {
4032
- "data-test-id": "inline-notification-dismiss",
4033
- "data-slot": "inline-notification-dismiss",
4034
- onClick: onDismiss,
4035
- "aria-label": "Dismiss notification",
4036
- className: "flex-shrink-0 bg-none border-none cursor-pointer text-[color:var(--deframe-widget-color-text-tertiary)] py-[var(--deframe-widget-size-padding-y-none)] px-[var(--deframe-widget-size-padding-x-none)].5 outline-none flex items-center",
4037
- children: /* @__PURE__ */ jsxRuntime.jsxs(
4038
- "svg",
4039
- {
4040
- width: "12",
4041
- height: "12",
4042
- viewBox: "0 0 24 24",
4043
- fill: "none",
4044
- stroke: "currentColor",
4045
- strokeWidth: "2.5",
4046
- strokeLinecap: "round",
4047
- "aria-hidden": "true",
4048
- children: [
4049
- /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "18", y1: "6", x2: "6", y2: "18" }),
4050
- /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "6", y1: "6", x2: "18", y2: "18" })
4051
- ]
4052
- }
4053
- )
4054
- }
4055
- )
4056
- ]
4057
- }
4058
- );
4059
- }
4060
- function TokenSelector({ token, onClick, disabled = false }) {
4061
- var _a;
4062
- const badge = token.network ? {
4063
- name: token.network,
4064
- color: (_a = token.networkColor) != null ? _a : "var(--deframe-widget-color-brand-secondary)",
4065
- iconUrl: token.networkIconUrl
4066
- } : void 0;
4067
- const baseClasses = [
4068
- "inline-flex items-center gap-[10px]",
4069
- "py-[var(--deframe-widget-size-padding-y-sm)] px-[10px]",
4070
- "rounded-[var(--deframe-widget-size-radius-sm)]",
4071
- "bg-[var(--deframe-widget-color-bg-secondary)]",
4072
- "border-none",
4073
- "outline-none",
4074
- "transition-[background] duration-150",
4075
- "flex-shrink-0",
4076
- disabled ? "cursor-default" : "cursor-pointer hover:bg-[color:color-mix(in_srgb,var(--deframe-widget-color-bg-secondary)_72%,transparent)]"
4077
- ].join(" ");
4078
- return /* @__PURE__ */ jsxRuntime.jsxs(
4079
- "button",
4080
- {
4081
- "data-test-id": "token-selector",
4082
- "data-slot": "token-selector",
4083
- onClick: !disabled ? onClick : void 0,
4084
- disabled,
4085
- "aria-label": `Select token \u2014 currently ${token.symbol} on ${token.network}`,
4086
- className: tailwindMerge.twMerge(baseClasses),
4087
- children: [
4088
- /* @__PURE__ */ jsxRuntime.jsx(
4089
- TokenIcon,
4090
- {
4091
- "data-test-id": "token-selector-icon",
4092
- "data-slot": "token-selector-icon",
4093
- token,
4094
- size: 38,
4095
- badge,
4096
- badgeSize: 16
4097
- }
4098
- ),
4099
- /* @__PURE__ */ jsxRuntime.jsxs(
4100
- "div",
4101
- {
4102
- "data-test-id": "token-selector-info",
4103
- "data-slot": "token-selector-info",
4104
- className: "flex flex-col items-start min-w-0",
4105
- children: [
4106
- /* @__PURE__ */ jsxRuntime.jsx(
4107
- "span",
4108
- {
4109
- "data-test-id": "token-selector-symbol",
4110
- "data-slot": "token-selector-symbol",
4111
- className: [
4112
- "text-[16px] [font-weight:var(--deframe-widget-font-weight-semibold)] leading-[1.2]",
4113
- "font-[var(--deframe-widget-font-family)]",
4114
- disabled ? "text-[color:var(--deframe-widget-color-text-secondary)]" : "text-[color:var(--deframe-widget-color-text-primary)]"
4115
- ].join(" "),
4116
- children: token.symbol
4117
- }
4118
- ),
4119
- /* @__PURE__ */ jsxRuntime.jsx(
4120
- "span",
4121
- {
4122
- "data-test-id": "token-selector-network",
4123
- "data-slot": "token-selector-network",
4124
- className: "text-[11px] [font-weight:var(--deframe-widget-font-weight-medium)] text-[color:var(--deframe-widget-color-text-tertiary)] uppercase tracking-[0.04em] font-[var(--deframe-widget-font-family)] leading-[1.2]",
4125
- children: token.network
4126
- }
4127
- )
4128
- ]
4129
- }
4130
- ),
4131
- !disabled && /* @__PURE__ */ jsxRuntime.jsx(
4132
- "svg",
4133
- {
4134
- "data-test-id": "token-selector-chevron",
4135
- "data-slot": "token-selector-chevron",
4136
- width: "14",
4137
- height: "14",
4138
- viewBox: "0 0 24 24",
4139
- fill: "none",
4140
- stroke: "currentColor",
4141
- strokeWidth: "2.5",
4142
- strokeLinecap: "round",
4143
- strokeLinejoin: "round",
4144
- className: "flex-shrink-0 text-[color:var(--deframe-widget-color-text-secondary)]",
4145
- "aria-hidden": "true",
4146
- children: /* @__PURE__ */ jsxRuntime.jsx("polyline", { points: "6 9 12 15 18 9" })
4147
- }
4148
- )
4149
- ]
4150
- }
4151
- );
4152
- }
4153
- function AmountInput({
4154
- value,
4155
- onChange,
4156
- conversionUsd,
4157
- readOnly = false,
4158
- disabled = false
4159
- }) {
4160
- const isEmpty = !value || value === "0" || value === "";
4161
- const inputClasses = [
4162
- "bg-transparent border-none outline-none",
4163
- "text-right",
4164
- "text-[36px] [font-weight:var(--deframe-widget-font-weight-semibold)] [line-height:1.1]",
4165
- "w-full px-[var(--deframe-widget-size-padding-x-none)] py-[var(--deframe-widget-size-padding-y-none)]",
4166
- "font-[var(--deframe-widget-font-family)]",
4167
- isEmpty ? "text-[color:var(--deframe-widget-color-text-tertiary)]" : "text-[color:var(--deframe-widget-color-text-primary)]",
4168
- readOnly || disabled ? "cursor-default" : "cursor-text"
4169
- ].join(" ");
4170
- return /* @__PURE__ */ jsxRuntime.jsxs(
4171
- "div",
4172
- {
4173
- "data-test-id": "amount-input-wrapper",
4174
- "data-slot": "amount-input-wrapper",
4175
- className: "flex flex-col items-end flex-1 min-w-0",
4176
- children: [
4177
- /* @__PURE__ */ jsxRuntime.jsx(
4178
- "input",
4179
- {
4180
- "data-test-id": "amount-input",
4181
- "data-slot": "amount-input",
4182
- type: "text",
4183
- inputMode: "decimal",
4184
- value: value || "",
4185
- readOnly,
4186
- disabled,
4187
- placeholder: "0",
4188
- onChange: (e) => {
4189
- const v = e.target.value;
4190
- if (/^[0-9]*\.?[0-9]*$/.test(v) || v === "") {
4191
- onChange(v);
4192
- }
4193
- },
4194
- className: tailwindMerge.twMerge(inputClasses)
4195
- }
4196
- ),
4197
- conversionUsd && /* @__PURE__ */ jsxRuntime.jsx(
4198
- "span",
4199
- {
4200
- "data-test-id": "amount-input-conversion",
4201
- "data-slot": "amount-input-conversion",
4202
- className: "text-[13px] text-[color:var(--deframe-widget-color-text-tertiary)] mt-[var(--deframe-widget-size-gap-none)].5 font-[var(--deframe-widget-font-family)]",
4203
- children: conversionUsd
4204
- }
4205
- )
4206
- ]
4207
- }
4208
- );
4209
- }
4210
- function SwapDirectionButton({ onClick, disabled = false }) {
4211
- const [hovered, setHovered] = React6__namespace.useState(false);
4212
- const baseClasses = [
4213
- "inline-flex items-center justify-center",
4214
- "w-10 h-10",
4215
- "rounded-[var(--deframe-widget-size-radius-sm)]",
4216
- "bg-[var(--deframe-widget-color-bg-secondary)]",
4217
- "border border-[color:var(--deframe-widget-color-border-secondary)]",
4218
- "outline-none",
4219
- "flex-shrink-0",
4220
- "shadow-[0_2px_8px_color-mix(in_srgb,var(--deframe-widget-color-text-primary)_18%,transparent)]",
4221
- disabled ? "cursor-default text-[color:var(--deframe-widget-color-text-tertiary)]" : "cursor-pointer text-[color:var(--deframe-widget-color-brand-primary)]"
4222
- ].join(" ");
4223
- return /* @__PURE__ */ jsxRuntime.jsx(
4224
- framerMotion.motion.button,
4225
- {
4226
- "data-test-id": "swap-direction-button",
4227
- "data-slot": "swap-direction-button",
4228
- onClick: !disabled ? onClick : void 0,
4229
- onMouseEnter: () => setHovered(true),
4230
- onMouseLeave: () => setHovered(false),
4231
- disabled,
4232
- animate: { rotate: hovered ? 180 : 0 },
4233
- transition: { duration: 0.25, ease: "easeInOut" },
4234
- "aria-label": "Swap direction",
4235
- className: tailwindMerge.twMerge(baseClasses),
4236
- children: /* @__PURE__ */ jsxRuntime.jsxs(
4237
- "svg",
4238
- {
4239
- "data-test-id": "swap-direction-button-icon",
4240
- "data-slot": "swap-direction-button-icon",
4241
- width: "18",
4242
- height: "18",
4243
- viewBox: "0 0 24 24",
4244
- fill: "none",
4245
- stroke: "currentColor",
4246
- strokeWidth: "2.5",
4247
- strokeLinecap: "round",
4248
- strokeLinejoin: "round",
4249
- "aria-hidden": "true",
4250
- children: [
4251
- /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "12", y1: "5", x2: "12", y2: "19" }),
4252
- /* @__PURE__ */ jsxRuntime.jsx("polyline", { points: "19 12 12 19 5 12" })
4253
- ]
4254
- }
4255
- )
4256
- }
4257
- );
4258
- }
4259
- function TokenInputCard({
4260
- token,
4261
- amount,
4262
- onAmountChange,
4263
- balance,
4264
- balanceSymbol,
4265
- conversionUsd,
4266
- onTokenSelect,
4267
- readOnly = false,
4268
- error = null,
4269
- onHoverChange,
4270
- chipsSlot
4271
- }) {
4272
- const hasError = error === "insufficient_balance";
4273
- const wrapperClasses = tailwindMerge.twMerge(
4274
- "rounded-[var(--deframe-widget-size-radius-sm)]",
4275
- "border",
4276
- "px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-md)]",
4277
- "transition-[border-color,background] duration-200",
4278
- hasError ? "border-[color:color-mix(in_srgb,var(--deframe-widget-color-state-error)_32%,transparent)] bg-[color:color-mix(in_srgb,var(--deframe-widget-color-state-error)_16%,transparent)]" : "border-[color:var(--deframe-widget-color-border-secondary)] bg-[var(--deframe-widget-color-bg-secondary)]"
4279
- );
4280
- return /* @__PURE__ */ jsxRuntime.jsxs(
4281
- "div",
4282
- {
4283
- "data-test-id": "token-input-card",
4284
- "data-slot": "token-input-card",
4285
- onMouseEnter: () => onHoverChange == null ? void 0 : onHoverChange(true),
4286
- onMouseLeave: () => onHoverChange == null ? void 0 : onHoverChange(false),
4287
- className: wrapperClasses,
4288
- children: [
4289
- /* @__PURE__ */ jsxRuntime.jsxs(
4290
- "div",
4291
- {
4292
- "data-test-id": "token-input-card-top-row",
4293
- "data-slot": "token-input-card-top-row",
4294
- className: "flex items-center gap-[var(--deframe-widget-size-gap-sm)]",
4295
- children: [
4296
- /* @__PURE__ */ jsxRuntime.jsx(
4297
- TokenSelector,
4298
- {
4299
- "data-test-id": "token-input-card-selector",
4300
- "data-slot": "token-input-card-selector",
4301
- token,
4302
- onClick: onTokenSelect,
4303
- disabled: !onTokenSelect
4304
- }
4305
- ),
4306
- /* @__PURE__ */ jsxRuntime.jsx(
4307
- "div",
4308
- {
4309
- "data-test-id": "token-input-card-divider",
4310
- "data-slot": "token-input-card-divider",
4311
- className: "w-px h-10 bg-[var(--deframe-widget-color-border-secondary)] flex-shrink-0"
4312
- }
4313
- ),
4314
- /* @__PURE__ */ jsxRuntime.jsx(
4315
- AmountInput,
4316
- {
4317
- "data-test-id": "token-input-card-amount",
4318
- "data-slot": "token-input-card-amount",
4319
- value: amount,
4320
- onChange: onAmountChange != null ? onAmountChange : (() => {
4321
- }),
4322
- conversionUsd,
4323
- readOnly,
4324
- disabled: !onAmountChange && !readOnly
4325
- }
4326
- )
4327
- ]
4328
- }
4329
- ),
4330
- (balance !== void 0 || balanceSymbol) && /* @__PURE__ */ jsxRuntime.jsx(
4331
- "div",
4332
- {
4333
- "data-test-id": "token-input-card-balance-row",
4334
- "data-slot": "token-input-card-balance-row",
4335
- className: "flex items-center justify-between mt-[var(--deframe-widget-size-gap-sm)]",
4336
- children: /* @__PURE__ */ jsxRuntime.jsxs(
4337
- "span",
4338
- {
4339
- "data-test-id": "token-input-card-balance-label",
4340
- "data-slot": "token-input-card-balance-label",
4341
- className: "text-[13px] text-[color:var(--deframe-widget-color-text-tertiary)] font-[var(--deframe-widget-font-family)]",
4342
- children: [
4343
- "Saldo:",
4344
- " ",
4345
- /* @__PURE__ */ jsxRuntime.jsxs(
4346
- "span",
4347
- {
4348
- "data-test-id": "token-input-card-balance-value",
4349
- "data-slot": "token-input-card-balance-value",
4350
- className: hasError ? "text-[color:var(--deframe-widget-color-state-error)]" : "text-[color:var(--deframe-widget-color-text-secondary)]",
4351
- children: [
4352
- balance != null ? balance : "0",
4353
- " ",
4354
- balanceSymbol != null ? balanceSymbol : token.symbol
4355
- ]
4356
- }
4357
- )
4358
- ]
4359
- }
4360
- )
4361
- }
4362
- ),
4363
- chipsSlot && /* @__PURE__ */ jsxRuntime.jsx(
4364
- "div",
4365
- {
4366
- "data-test-id": "token-input-card-chips-slot",
4367
- "data-slot": "token-input-card-chips-slot",
4368
- className: "mt-[var(--deframe-widget-size-gap-sm)]",
4369
- children: chipsSlot
4370
- }
4371
- ),
4372
- hasError && /* @__PURE__ */ jsxRuntime.jsx(
4373
- "div",
4374
- {
4375
- "data-test-id": "token-input-card-error",
4376
- "data-slot": "token-input-card-error",
4377
- className: "mt-[var(--deframe-widget-size-gap-sm)]",
4378
- children: /* @__PURE__ */ jsxRuntime.jsx(
4379
- InlineNotification,
4380
- {
4381
- variant: "error",
4382
- message: "Saldo insuficiente para realizar a troca.",
4383
- action: {
4384
- label: "Adicionar via PIX",
4385
- onClick: () => {
4386
- }
4387
- }
4388
- }
4389
- )
4390
- }
4391
- )
4392
- ]
4393
- }
4394
- );
4395
- }
4396
-
4397
- // src/stories/blockchain-asset-selector/tokens.ts
4398
- var T = {
4399
- bgLeft: "var(--deframe-widget-color-bg-secondary)",
4400
- border: "var(--deframe-widget-color-border-secondary)",
4401
- textPrimary: "var(--deframe-widget-color-text-primary)",
4402
- textSecondary: "var(--deframe-widget-color-text-secondary)",
4403
- green: "var(--deframe-widget-color-brand-primary)",
4404
- radiusModal: "var(--deframe-widget-size-radius-md)"};
4405
- var SWAP_FEEDBACK_DEFAULTS = {
4406
- loading: {
4407
- title: "PROCESSANDO TRANSA\xC7\xC3O...",
4408
- subtitle: "Aguarde enquanto sua troca \xE9 confirmada."
4409
- },
4410
- success: {
4411
- title: "Troca Aprovada!",
4412
- subtitle: "Seu saldo foi atualizado."
4413
- },
4414
- error: {
4415
- title: "Troca Falhou",
4416
- subtitle: "Tente novamente mais tarde."
4417
- }
4418
- };
4419
- function SwapFeedbackOverlay({
4420
- variant,
4421
- title,
4422
- subtitle,
4423
- standalone = false
4424
- }) {
4425
- const defaults = SWAP_FEEDBACK_DEFAULTS[variant];
4426
- const resolvedTitle = title != null ? title : defaults.title;
4427
- const resolvedSubtitle = subtitle != null ? subtitle : defaults.subtitle;
4428
- const isLoading = variant === "loading";
4429
- const overlay = /* @__PURE__ */ jsxRuntime.jsxs(
4430
- framerMotion.motion.div,
4431
- {
4432
- "data-test-id": "swap-feedback-overlay",
4433
- "data-slot": "swap-feedback-overlay",
4434
- initial: { opacity: 0 },
4435
- animate: { opacity: 1 },
4436
- exit: { opacity: 0 },
4437
- transition: { duration: 0.2 },
4438
- style: {
4439
- position: standalone ? "relative" : "absolute",
4440
- inset: standalone ? void 0 : 0,
4441
- borderRadius: "inherit",
4442
- backdropFilter: "blur(12px)",
4443
- WebkitBackdropFilter: "blur(12px)",
4444
- background: "color-mix(in srgb, var(--deframe-widget-color-bg-primary) 88%, transparent)",
4445
- zIndex: 10,
4446
- display: "flex",
4447
- flexDirection: "column",
4448
- alignItems: "center",
4449
- justifyContent: "center",
4450
- gap: 24,
4451
- padding: standalone ? "52px 32px" : "36px 24px",
4452
- fontFamily: "var(--deframe-widget-font-family)"
4453
- },
4454
- children: [
4455
- isLoading && /* @__PURE__ */ jsxRuntime.jsx(LoadingIcon, {}),
4456
- variant === "success" && /* @__PURE__ */ jsxRuntime.jsx(SuccessIcon, {}),
4457
- variant === "error" && /* @__PURE__ */ jsxRuntime.jsx(ErrorIcon, {}),
4458
- /* @__PURE__ */ jsxRuntime.jsxs(
4459
- "div",
4460
- {
4461
- "data-test-id": "swap-feedback-text",
4462
- "data-slot": "swap-feedback-text",
4463
- style: {
4464
- display: "flex",
4465
- flexDirection: "column",
4466
- alignItems: "center",
4467
- gap: 8,
4468
- textAlign: "center"
4469
- },
4470
- children: [
4471
- /* @__PURE__ */ jsxRuntime.jsx(
4472
- "span",
4473
- {
4474
- "data-test-id": "swap-feedback-title",
4475
- "data-slot": "swap-feedback-title",
4476
- style: {
4477
- fontSize: isLoading ? 12 : 22,
4478
- fontWeight: isLoading ? 600 : 700,
4479
- letterSpacing: isLoading ? "0.10em" : void 0,
4480
- textTransform: isLoading ? "uppercase" : void 0,
4481
- color: isLoading ? T.green : T.textPrimary,
4482
- lineHeight: 1.25
4483
- },
4484
- children: resolvedTitle
4485
- }
4486
- ),
4487
- /* @__PURE__ */ jsxRuntime.jsx(
4488
- "span",
4489
- {
4490
- "data-test-id": "swap-feedback-subtitle",
4491
- "data-slot": "swap-feedback-subtitle",
4492
- style: {
4493
- fontSize: 14,
4494
- fontWeight: 400,
4495
- color: T.textSecondary,
4496
- lineHeight: 1.6,
4497
- maxWidth: 260
4498
- },
4499
- children: resolvedSubtitle
4500
- }
4501
- )
4502
- ]
4503
- }
4504
- )
4505
- ]
4506
- },
4507
- "swap-feedback-overlay"
4508
- );
4509
- if (standalone) {
4510
- return /* @__PURE__ */ jsxRuntime.jsx(
4511
- "div",
4512
- {
4513
- style: {
4514
- width: "100%",
4515
- borderRadius: T.radiusModal,
4516
- overflow: "hidden",
4517
- border: `1px solid ${T.border}`,
4518
- background: T.bgLeft
4519
- },
4520
- children: overlay
4521
- }
4522
- );
4523
- }
4524
- return overlay;
4525
- }
4526
- function LoadingIcon() {
4527
- const green = T.green;
4528
- const trackColor = "color-mix(in srgb, var(--deframe-widget-color-brand-primary) 12%, transparent)";
4529
- const sw = 2.8;
4530
- const aw = 2.4;
4531
- return /* @__PURE__ */ jsxRuntime.jsxs(
4532
- framerMotion.motion.svg,
4533
- {
4534
- "data-test-id": "swap-feedback-loading-icon",
4535
- "data-slot": "swap-feedback-loading-icon",
4536
- width: "56",
4537
- height: "56",
4538
- viewBox: "0 0 56 56",
4539
- fill: "none",
4540
- "aria-hidden": "true",
4541
- animate: { rotate: 360 },
4542
- transition: { duration: 1.6, repeat: Infinity, ease: "linear" },
4543
- children: [
4544
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "28", cy: "28", r: "22", stroke: trackColor, strokeWidth: sw }),
4545
- /* @__PURE__ */ jsxRuntime.jsx(
4546
- "path",
4547
- {
4548
- d: "M 6.75 22.31 A 22 22 0 0 1 49.25 22.31",
4549
- stroke: green,
4550
- strokeWidth: sw,
4551
- strokeLinecap: "round"
4552
- }
4553
- ),
4554
- /* @__PURE__ */ jsxRuntime.jsx(
4555
- "path",
4556
- {
4557
- d: "M 45.0 18.1 L 49.25 22.31 L 51.0 16.5",
4558
- stroke: green,
4559
- strokeWidth: aw,
4560
- strokeLinecap: "round",
4561
- strokeLinejoin: "round"
4562
- }
4563
- ),
4564
- /* @__PURE__ */ jsxRuntime.jsx(
4565
- "path",
4566
- {
4567
- d: "M 49.25 33.69 A 22 22 0 0 1 6.75 33.69",
4568
- stroke: green,
4569
- strokeWidth: sw,
4570
- strokeLinecap: "round"
4571
- }
4572
- ),
4573
- /* @__PURE__ */ jsxRuntime.jsx(
4574
- "path",
4575
- {
4576
- d: "M 11.0 37.9 L 6.75 33.69 L 5.0 39.5",
4577
- stroke: green,
4578
- strokeWidth: aw,
4579
- strokeLinecap: "round",
4580
- strokeLinejoin: "round"
4581
- }
4582
- )
4583
- ]
4584
- }
4585
- );
4586
- }
4587
- function SuccessIcon() {
4588
- return /* @__PURE__ */ jsxRuntime.jsx(
4589
- framerMotion.motion.div,
4590
- {
4591
- "data-test-id": "swap-feedback-success-icon",
4592
- "data-slot": "swap-feedback-success-icon",
4593
- initial: { scale: 0.55, opacity: 0 },
4594
- animate: { scale: 1, opacity: 1 },
4595
- transition: { type: "spring", stiffness: 300, damping: 20, delay: 0.05 },
4596
- style: {
4597
- width: 84,
4598
- height: 84,
4599
- borderRadius: "50%",
4600
- background: "var(--deframe-widget-color-state-success)",
4601
- boxShadow: "0 0 0 10px color-mix(in srgb, var(--deframe-widget-color-brand-primary) 12%, transparent), 0 0 32px color-mix(in srgb, var(--deframe-widget-color-brand-primary) 22%, transparent)",
4602
- display: "flex",
4603
- alignItems: "center",
4604
- justifyContent: "center",
4605
- flexShrink: 0
4606
- },
4607
- children: /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "44", height: "44", viewBox: "0 0 44 44", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntime.jsx(
4608
- framerMotion.motion.path,
4609
- {
4610
- d: "M10 22 L18 30 L34 14",
4611
- stroke: "white",
4612
- strokeWidth: "3.5",
4613
- strokeLinecap: "round",
4614
- strokeLinejoin: "round",
4615
- initial: { pathLength: 0 },
4616
- animate: { pathLength: 1 },
4617
- transition: { duration: 0.45, delay: 0.2, ease: "easeOut" }
4618
- }
4619
- ) })
4620
- }
4621
- );
4622
- }
4623
- var ERROR_RED = "var(--deframe-widget-color-state-error)";
4624
- function ErrorIcon() {
4625
- return /* @__PURE__ */ jsxRuntime.jsx(
4626
- framerMotion.motion.div,
4627
- {
4628
- "data-test-id": "swap-feedback-error-icon",
4629
- "data-slot": "swap-feedback-error-icon",
4630
- initial: { scale: 0.55, opacity: 0 },
4631
- animate: { scale: 1, opacity: 1 },
4632
- transition: { type: "spring", stiffness: 300, damping: 20, delay: 0.05 },
4633
- style: {
4634
- width: 84,
4635
- height: 84,
4636
- borderRadius: "50%",
4637
- background: ERROR_RED,
4638
- boxShadow: "0 0 0 10px color-mix(in srgb, var(--deframe-widget-color-state-error) 12%, transparent), 0 0 32px color-mix(in srgb, var(--deframe-widget-color-state-error) 22%, transparent)",
4639
- display: "flex",
4640
- alignItems: "center",
4641
- justifyContent: "center",
4642
- flexShrink: 0
4643
- },
4644
- children: /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: "44", height: "44", viewBox: "0 0 44 44", fill: "none", "aria-hidden": "true", children: [
4645
- /* @__PURE__ */ jsxRuntime.jsx(
4646
- framerMotion.motion.line,
4647
- {
4648
- x1: "14",
4649
- y1: "14",
4650
- x2: "30",
4651
- y2: "30",
4652
- stroke: "white",
4653
- strokeWidth: "3.5",
4654
- strokeLinecap: "round",
4655
- initial: { pathLength: 0 },
4656
- animate: { pathLength: 1 },
4657
- transition: { duration: 0.25, delay: 0.2, ease: "easeOut" }
4658
- }
4659
- ),
4660
- /* @__PURE__ */ jsxRuntime.jsx(
4661
- framerMotion.motion.line,
4662
- {
4663
- x1: "30",
4664
- y1: "14",
4665
- x2: "14",
4666
- y2: "30",
4667
- stroke: "white",
4668
- strokeWidth: "3.5",
4669
- strokeLinecap: "round",
4670
- initial: { pathLength: 0 },
4671
- animate: { pathLength: 1 },
4672
- transition: { duration: 0.25, delay: 0.38, ease: "easeOut" }
4673
- }
4674
- )
4675
- ] })
4676
- }
4677
- );
4678
- }
4679
- function SwapPanel({
4680
- fromToken,
4681
- toToken,
4682
- fromAmount,
4683
- toAmount,
4684
- onFromAmountChange,
4685
- onFromPercentageSelect,
4686
- onFromTokenSelect,
4687
- onToTokenSelect,
4688
- onSwapTokens,
4689
- fromBalance,
4690
- fromBalanceSymbol,
4691
- toBalance,
4692
- toBalanceSymbol,
4693
- fromConversionUsd,
4694
- toConversionUsd,
4695
- onSubmit,
4696
- submitLabel = "Revisar Troca",
4697
- submitDisabled = false,
4698
- onHistory,
4699
- onAdvanced,
4700
- loading = false,
4701
- error = null,
4702
- feedback = null
4703
- }) {
4704
- const [fromCardHovered, setFromCardHovered] = React6__namespace.useState(false);
4705
- const [selectedPct, setSelectedPct] = React6__namespace.useState(null);
4706
- const hideTimerRef = React6__namespace.useRef(void 0);
4707
- function handleHoverStart() {
4708
- clearTimeout(hideTimerRef.current);
4709
- setFromCardHovered(true);
4710
- }
4711
- function handleHoverEnd() {
4712
- hideTimerRef.current = setTimeout(() => setFromCardHovered(false), 150);
4713
- }
4714
- React6__namespace.useEffect(() => () => clearTimeout(hideTimerRef.current), []);
4715
- const isSubmitDisabled = submitDisabled || loading || !fromAmount || fromAmount === "0" || fromAmount === "";
4716
- function handlePctSelect(pct) {
4717
- setSelectedPct(pct);
4718
- onFromPercentageSelect == null ? void 0 : onFromPercentageSelect(pct);
4719
- if (!fromBalance) return;
4720
- const bal = parseFloat(fromBalance.replace(/[^\d.]/g, ""));
4721
- if (isNaN(bal)) return;
4722
- const computed = (bal * pct / 100).toFixed(6).replace(/\.?0+$/, "");
4723
- onFromAmountChange(computed);
4724
- }
4725
- const submitClasses = tailwindMerge.twMerge(
4726
- "mt-[10px] w-full h-12",
4727
- "rounded-[var(--deframe-widget-size-radius-sm)]",
4728
- "border-none",
4729
- "text-[15px] [font-weight:var(--deframe-widget-font-weight-semibold)]",
4730
- "transition-[background,color] duration-200",
4731
- "flex items-center justify-center gap-[var(--deframe-widget-size-gap-sm)]",
4732
- "font-[var(--deframe-widget-font-family)]",
4733
- isSubmitDisabled ? "bg-[var(--deframe-widget-color-brand-primary-disabled)] text-[color:var(--deframe-widget-color-text-primary-disabled)] cursor-not-allowed" : "bg-[var(--deframe-widget-color-brand-primary)] text-[color:var(--deframe-widget-color-text-primary-dark)] cursor-pointer"
4734
- );
4735
- return /* @__PURE__ */ jsxRuntime.jsxs(
4736
- "div",
4737
- {
4738
- "data-test-id": "swap-panel",
4739
- "data-slot": "swap-panel",
4740
- className: "relative bg-[var(--deframe-widget-color-bg-secondary)] rounded-[var(--deframe-widget-size-radius-md)] border border-[color:var(--deframe-widget-color-border-secondary)] px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-md)] flex flex-col w-full max-w-[480px] box-border font-[var(--deframe-widget-font-family)]",
4741
- children: [
4742
- onHistory && /* @__PURE__ */ jsxRuntime.jsx(
4743
- "div",
4744
- {
4745
- "data-test-id": "swap-panel-top-row",
4746
- "data-slot": "swap-panel-top-row",
4747
- className: "flex items-center justify-end mb-[var(--deframe-widget-size-gap-sm)]",
4748
- children: /* @__PURE__ */ jsxRuntime.jsx(HistoryButton, { onClick: onHistory })
4749
- }
4750
- ),
4751
- /* @__PURE__ */ jsxRuntime.jsx(
4752
- TokenInputCard,
4753
- {
4754
- token: {
4755
- name: fromToken.name,
4756
- symbol: fromToken.symbol,
4757
- color: fromToken.color,
4758
- iconUrl: fromToken.iconUrl,
4759
- network: fromToken.network,
4760
- networkColor: fromToken.networkColor,
4761
- networkIconUrl: fromToken.networkIconUrl
4762
- },
4763
- amount: fromAmount,
4764
- onAmountChange: (v) => {
4765
- setSelectedPct(null);
4766
- onFromAmountChange(v);
4767
- },
4768
- balance: fromBalance,
4769
- balanceSymbol: fromBalanceSymbol,
4770
- conversionUsd: fromConversionUsd,
4771
- onTokenSelect: onFromTokenSelect,
4772
- error,
4773
- onHoverChange: (h) => h ? handleHoverStart() : handleHoverEnd(),
4774
- chipsSlot: /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { children: fromCardHovered && /* @__PURE__ */ jsxRuntime.jsx(
4775
- framerMotion.motion.div,
4776
- {
4777
- "data-test-id": "swap-panel-pct-chips",
4778
- "data-slot": "swap-panel-pct-chips",
4779
- initial: { opacity: 0, y: -4 },
4780
- animate: { opacity: 1, y: 0 },
4781
- exit: { opacity: 0, y: -4 },
4782
- transition: { duration: 0.15 },
4783
- children: /* @__PURE__ */ jsxRuntime.jsx(
4784
- PercentageChips,
4785
- {
4786
- selected: selectedPct,
4787
- onSelect: handlePctSelect
4788
- }
4789
- )
4790
- },
4791
- "pct-chips"
4792
- ) })
4793
- }
4794
- ),
4795
- /* @__PURE__ */ jsxRuntime.jsx(
4796
- "div",
4797
- {
4798
- "data-test-id": "swap-panel-direction-row",
4799
- "data-slot": "swap-panel-direction-row",
4800
- className: "flex justify-center relative -my-[var(--deframe-widget-size-gap-sm)] z-[1]",
4801
- children: /* @__PURE__ */ jsxRuntime.jsx(SwapDirectionButton, { onClick: onSwapTokens, disabled: !onSwapTokens })
4802
- }
4803
- ),
4804
- /* @__PURE__ */ jsxRuntime.jsx(
4805
- TokenInputCard,
4806
- {
4807
- token: {
4808
- name: toToken.name,
4809
- symbol: toToken.symbol,
4810
- color: toToken.color,
4811
- iconUrl: toToken.iconUrl,
4812
- network: toToken.network,
4813
- networkColor: toToken.networkColor,
4814
- networkIconUrl: toToken.networkIconUrl
4815
- },
4816
- amount: toAmount,
4817
- balance: toBalance,
4818
- balanceSymbol: toBalanceSymbol,
4819
- conversionUsd: toConversionUsd,
4820
- onTokenSelect: onToTokenSelect,
4821
- readOnly: true
4822
- }
4823
- ),
4824
- onAdvanced && /* @__PURE__ */ jsxRuntime.jsx(
4825
- "div",
4826
- {
4827
- "data-test-id": "swap-panel-advanced-row",
4828
- "data-slot": "swap-panel-advanced-row",
4829
- className: "flex justify-end mt-[var(--deframe-widget-size-gap-sm)]",
4830
- children: /* @__PURE__ */ jsxRuntime.jsx(AdvancedButton, { onClick: onAdvanced })
4831
- }
4832
- ),
4833
- /* @__PURE__ */ jsxRuntime.jsx(
4834
- "button",
4835
- {
4836
- "data-test-id": "swap-panel-submit",
4837
- "data-slot": "swap-panel-submit",
4838
- onClick: !isSubmitDisabled ? onSubmit : void 0,
4839
- disabled: isSubmitDisabled,
4840
- title: error === "insufficient_balance" ? "Adicione fundos para continuar" : void 0,
4841
- className: submitClasses,
4842
- children: loading ? /* @__PURE__ */ jsxRuntime.jsx(Spinner, {}) : submitLabel
4843
- }
4844
- ),
4845
- /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { children: feedback && /* @__PURE__ */ jsxRuntime.jsx(
4846
- SwapFeedbackOverlay,
4847
- {
4848
- variant: feedback.variant,
4849
- title: feedback.title,
4850
- subtitle: feedback.subtitle
4851
- },
4852
- feedback.variant
4853
- ) })
4854
- ]
4855
- }
4856
- );
4857
- }
4858
- function HistoryButton({ onClick }) {
4859
- return /* @__PURE__ */ jsxRuntime.jsx(
4860
- "button",
4861
- {
4862
- "data-test-id": "history-button",
4863
- "data-slot": "history-button",
4864
- onClick,
4865
- "aria-label": "Hist\xF3rico de transa\xE7\xF5es",
4866
- className: tailwindMerge.twMerge(
4867
- "inline-flex items-center justify-center",
4868
- "w-9 h-9",
4869
- "rounded-[var(--deframe-widget-size-radius-sm)]",
4870
- "border-none",
4871
- "cursor-pointer",
4872
- "bg-transparent",
4873
- "hover:bg-[color:color-mix(in_srgb,var(--deframe-widget-color-bg-tertiary)_92%,transparent)]",
4874
- "transition-[background] duration-150",
4875
- "flex-shrink-0",
4876
- "outline-none",
4877
- "text-[color:var(--deframe-widget-color-text-secondary)]"
4878
- ),
4879
- children: /* @__PURE__ */ jsxRuntime.jsxs(
4880
- "svg",
4881
- {
4882
- "data-test-id": "history-button-icon",
4883
- "data-slot": "history-button-icon",
4884
- viewBox: "0 0 24 24",
4885
- width: "20",
4886
- height: "20",
4887
- fill: "none",
4888
- stroke: "currentColor",
4889
- strokeWidth: "2",
4890
- strokeLinecap: "round",
4891
- strokeLinejoin: "round",
4892
- "aria-hidden": "true",
4893
- children: [
4894
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "10" }),
4895
- /* @__PURE__ */ jsxRuntime.jsx("polyline", { points: "12 6 12 12 16 14" })
4896
- ]
4897
- }
4898
- )
4899
- }
4900
- );
4901
- }
4902
- function AdvancedButton({ onClick }) {
4903
- return /* @__PURE__ */ jsxRuntime.jsxs(
4904
- "button",
4905
- {
4906
- "data-test-id": "advanced-button",
4907
- "data-slot": "advanced-button",
4908
- onClick,
4909
- className: tailwindMerge.twMerge(
4910
- "inline-flex items-center gap-[5px]",
4911
- "py-[5px] px-[var(--deframe-widget-size-padding-x-sm)]",
4912
- "rounded-[var(--deframe-widget-size-radius-full)]",
4913
- "border border-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_32%,transparent)]",
4914
- "bg-transparent",
4915
- "hover:bg-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_12%,transparent)]",
4916
- "cursor-pointer",
4917
- "text-[color:var(--deframe-widget-color-brand-primary)]",
4918
- "text-[13px] [font-weight:var(--deframe-widget-font-weight-medium)]",
4919
- "outline-none",
4920
- "font-[inherit]",
4921
- "transition-[background] duration-150",
4922
- "flex-shrink-0"
4923
- ),
4924
- children: [
4925
- /* @__PURE__ */ jsxRuntime.jsxs(
4926
- "svg",
4927
- {
4928
- "data-test-id": "advanced-button-icon",
4929
- "data-slot": "advanced-button-icon",
4930
- width: "13",
4931
- height: "13",
4932
- viewBox: "0 0 24 24",
4933
- fill: "none",
4934
- stroke: "currentColor",
4935
- strokeWidth: "2.5",
4936
- strokeLinecap: "round",
4937
- strokeLinejoin: "round",
4938
- "aria-hidden": "true",
4939
- children: [
4940
- /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "4", y1: "6", x2: "20", y2: "6" }),
4941
- /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "4", y1: "12", x2: "20", y2: "12" }),
4942
- /* @__PURE__ */ jsxRuntime.jsx("line", { x1: "4", y1: "18", x2: "20", y2: "18" }),
4943
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "8", cy: "6", r: "2", fill: "currentColor", stroke: "none" }),
4944
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "16", cy: "12", r: "2", fill: "currentColor", stroke: "none" }),
4945
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "10", cy: "18", r: "2", fill: "currentColor", stroke: "none" })
4946
- ]
4947
- }
4948
- ),
4949
- /* @__PURE__ */ jsxRuntime.jsx(
4950
- "span",
4951
- {
4952
- "data-test-id": "advanced-button-label",
4953
- "data-slot": "advanced-button-label",
4954
- children: "Avan\xE7ado"
4955
- }
4956
- )
4957
- ]
4958
- }
4959
- );
4960
- }
4961
- function Spinner() {
4962
- return /* @__PURE__ */ jsxRuntime.jsxs(
4963
- "svg",
4964
- {
4965
- "data-test-id": "spinner",
4966
- "data-slot": "spinner",
4967
- width: "18",
4968
- height: "18",
4969
- viewBox: "0 0 24 24",
4970
- fill: "none",
4971
- stroke: "currentColor",
4972
- strokeWidth: "2.5",
4973
- strokeLinecap: "round",
4974
- className: "animate-spin",
4975
- "aria-hidden": "true",
4976
- children: [
4977
- /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "12", r: "10", opacity: "0.3" }),
4978
- /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 2 A10 10 0 0 1 22 12" })
4979
- ]
4980
- }
4981
- );
4982
- }
4983
- function TransactionDetailRow({
4984
- label,
4985
- value,
4986
- valueColor,
4987
- divider = false
4988
- }) {
4989
- return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
4990
- /* @__PURE__ */ jsxRuntime.jsxs(
4991
- "div",
4992
- {
4993
- "data-test-id": "transaction-detail-row",
4994
- "data-slot": "transaction-detail-row",
4995
- className: "flex justify-between items-center py-[10px] gap-[var(--deframe-widget-size-gap-sm)]",
4996
- children: [
4997
- /* @__PURE__ */ jsxRuntime.jsx(
4998
- "span",
4999
- {
5000
- "data-test-id": "transaction-detail-row-label",
5001
- "data-slot": "transaction-detail-row-label",
5002
- className: "text-[11px] [font-weight:var(--deframe-widget-font-weight-medium)] uppercase tracking-[0.07em] text-[color:var(--deframe-widget-color-text-tertiary)] font-[var(--deframe-widget-font-family)] flex-shrink-0",
5003
- children: label
5004
- }
5005
- ),
5006
- /* @__PURE__ */ jsxRuntime.jsx(
5007
- "span",
5008
- {
5009
- "data-test-id": "transaction-detail-row-value",
5010
- "data-slot": "transaction-detail-row-value",
5011
- className: [
5012
- "text-[13px] [font-weight:var(--deframe-widget-font-weight-semibold)] text-right font-[var(--deframe-widget-font-family)]",
5013
- !valueColor ? "text-[color:var(--deframe-widget-color-text-primary)]" : ""
5014
- ].join(" "),
5015
- style: valueColor ? { color: valueColor } : void 0,
5016
- children: value
5017
- }
5018
- )
5019
- ]
5020
- }
5021
- ),
5022
- divider && /* @__PURE__ */ jsxRuntime.jsx(
5023
- "div",
5024
- {
5025
- "data-test-id": "transaction-detail-row-divider",
5026
- "data-slot": "transaction-detail-row-divider",
5027
- className: "h-px bg-[var(--deframe-widget-color-border-secondary)]"
5028
- }
5029
- )
5030
- ] });
5031
- }
5032
- function TransactionDetails({
5033
- title = "Detalhes da transa\xE7\xE3o",
5034
- subtitle,
5035
- items,
5036
- onClose
5037
- }) {
5038
- return /* @__PURE__ */ jsxRuntime.jsxs(
5039
- "div",
5040
- {
5041
- "data-test-id": "transaction-details",
5042
- "data-slot": "transaction-details",
5043
- className: "bg-[var(--deframe-widget-color-bg-secondary)] rounded-[var(--deframe-widget-size-radius-md)] border border-[color:var(--deframe-widget-color-border-secondary)] px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-md)] w-full max-w-[320px] box-border font-[var(--deframe-widget-font-family)]",
5044
- children: [
5045
- /* @__PURE__ */ jsxRuntime.jsxs(
5046
- "div",
5047
- {
5048
- "data-test-id": "transaction-details-header",
5049
- "data-slot": "transaction-details-header",
5050
- className: [
5051
- "flex justify-between items-center",
5052
- subtitle ? "mb-[6px]" : "mb-[var(--deframe-widget-size-gap-none)]"
5053
- ].join(" "),
5054
- children: [
5055
- /* @__PURE__ */ jsxRuntime.jsx(
5056
- "span",
5057
- {
5058
- "data-test-id": "transaction-details-title",
5059
- "data-slot": "transaction-details-title",
5060
- className: "text-[15px] [font-weight:var(--deframe-widget-font-weight-semibold)] text-[color:var(--deframe-widget-color-text-primary)] font-[inherit]",
5061
- children: title
5062
- }
5063
- ),
5064
- onClose && /* @__PURE__ */ jsxRuntime.jsx(
5065
- CloseIconButton,
5066
- {
5067
- "data-test-id": "transaction-details-close",
5068
- "data-slot": "transaction-details-close",
5069
- onClick: onClose
5070
- }
5071
- )
5072
- ]
5073
- }
5074
- ),
5075
- subtitle && /* @__PURE__ */ jsxRuntime.jsx(
5076
- "p",
5077
- {
5078
- "data-test-id": "transaction-details-subtitle",
5079
- "data-slot": "transaction-details-subtitle",
5080
- className: "text-[13px] text-[color:var(--deframe-widget-color-text-secondary)] m-[var(--deframe-widget-size-gap-none)] mb-[var(--deframe-widget-size-gap-sm)] leading-[1.4] font-[inherit]",
5081
- children: subtitle
5082
- }
5083
- ),
5084
- /* @__PURE__ */ jsxRuntime.jsx(
5085
- "div",
5086
- {
5087
- "data-test-id": "transaction-details-divider",
5088
- "data-slot": "transaction-details-divider",
5089
- className: [
5090
- "h-px bg-[var(--deframe-widget-color-border-secondary)]",
5091
- subtitle ? "mt-[var(--deframe-widget-size-gap-none)]" : "mt-[var(--deframe-widget-size-gap-sm)]"
5092
- ].join(" ")
5093
- }
5094
- ),
5095
- items.map((item, i) => /* @__PURE__ */ jsxRuntime.jsx(
5096
- TransactionDetailRow,
5097
- {
5098
- label: item.label,
5099
- value: item.value,
5100
- valueColor: item.valueColor,
5101
- divider: i < items.length - 1
5102
- },
5103
- item.label
5104
- ))
5105
- ]
5106
- }
5107
- );
5108
- }
5109
- function CloseIconButton(_a) {
5110
- var _b = _a, { onClick } = _b, rest = __objRest(_b, ["onClick"]);
5111
- return /* @__PURE__ */ jsxRuntime.jsx(
5112
- "button",
5113
- __spreadProps(__spreadValues({
5114
- onClick,
5115
- "aria-label": "Fechar detalhes",
5116
- className: tailwindMerge.twMerge(
5117
- "inline-flex items-center justify-center",
5118
- "w-7 h-7",
5119
- "rounded-[var(--deframe-widget-size-radius-sm)]",
5120
- "border-none",
5121
- "cursor-pointer",
5122
- "bg-transparent",
5123
- "hover:bg-[color:color-mix(in_srgb,var(--deframe-widget-color-bg-tertiary)_92%,transparent)]",
5124
- "transition-[background] duration-150",
5125
- "flex-shrink-0",
5126
- "outline-none",
5127
- "text-[color:var(--deframe-widget-color-text-secondary)]"
5128
- )
5129
- }, rest), {
5130
- children: /* @__PURE__ */ jsxRuntime.jsx(
5131
- "svg",
5132
- {
5133
- "data-test-id": "transaction-details-close-icon",
5134
- "data-slot": "transaction-details-close-icon",
5135
- viewBox: "0 0 24 24",
5136
- width: "16",
5137
- height: "16",
5138
- fill: "currentColor",
5139
- "aria-hidden": "true",
5140
- children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M11.9997 10.5865L16.9495 5.63672L18.3637 7.05093L13.4139 12.0007L18.3637 16.9504L16.9495 18.3646L11.9997 13.4149L7.04996 18.3646L5.63574 16.9504L10.5855 12.0007L5.63574 7.05093L7.04996 5.63672L11.9997 10.5865Z" })
5141
- }
5142
- )
5143
- })
5144
- );
5145
- }
5146
- var InfoRow = ({ children, borderBottom, className }) => {
5147
- const baseClasses = "self-stretch inline-flex justify-between items-start";
5148
- const borderClasses = borderBottom ? "border-b border-[color:var(--deframe-widget-color-border-secondary)] pb-[var(--deframe-widget-size-padding-y-sm)]" : "";
5149
- return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-test-id": "info-row", className: tailwindMerge.twMerge(baseClasses, borderClasses, className), children });
5150
- };
5151
- var InfoLabel = ({ children, className }) => {
5152
- const baseClasses = "[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] text-[color:var(--deframe-widget-color-text-secondary)]";
5153
- return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-test-id": "info-label", className: tailwindMerge.twMerge(baseClasses, className), children });
5154
- };
5155
- var variantClasses2 = {
5156
- default: "text-[color:var(--deframe-widget-color-text-primary)]",
5157
- success: "text-[color:var(--deframe-widget-color-state-success)]",
5158
- warning: "text-[color:var(--deframe-widget-color-state-warning)]",
5159
- error: "text-[color:var(--deframe-widget-color-state-error)]"
5160
- };
5161
- var InfoValue = ({ children, variant = "default", className }) => {
5162
- const baseClasses = "[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] [font-weight:var(--deframe-widget-font-weight-semibold)]";
5163
- return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-test-id": "info-value", className: tailwindMerge.twMerge(baseClasses, variantClasses2[variant], className), children });
5164
- };
5165
- var InfoRowWithIcon = ({ children, borderBottom, className }) => {
5166
- const baseClasses = "flex items-start justify-between h-[17px]";
5167
- const borderClasses = borderBottom ? "border-b border-[color:var(--deframe-widget-color-border-secondary)] pb-[var(--deframe-widget-size-padding-y-sm)]" : "";
5168
- return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-test-id": "info-row-with-icon", className: tailwindMerge.twMerge(baseClasses, borderClasses, className), children });
5169
- };
5170
- var InfoRowIconLabel = ({ children, className }) => {
5171
- const baseClasses = "[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] text-[color:var(--deframe-widget-color-text-secondary)]";
5172
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-test-id": "info-row-icon-label", className: tailwindMerge.twMerge(baseClasses, className), children: [
5173
- "\u2022 ",
5174
- children
5175
- ] });
5176
- };
5177
- var InfoRowIconValue = ({ children, className }) => {
5178
- const baseClasses = "[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] [font-weight:var(--deframe-widget-font-weight-semibold)] text-[color:var(--deframe-widget-color-text-primary)]";
5179
- return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-test-id": "info-row-icon-value", className: tailwindMerge.twMerge(baseClasses, className), children });
5180
- };
5181
- var CollapsibleInfoRow = ({
5182
- label,
5183
- value,
5184
- children,
5185
- defaultOpen = false,
5186
- className,
5187
- collapseLabel,
5188
- expandLabel
5189
- }) => {
5190
- const [isOpen, setIsOpen] = React6__namespace.default.useState(defaultOpen);
5191
- const baseClasses = "flex flex-col gap-[var(--deframe-widget-size-gap-sm)] w-full";
5192
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-test-id": "collapsible-info-row", className: tailwindMerge.twMerge(baseClasses, className), children: [
5193
- /* @__PURE__ */ jsxRuntime.jsxs(
5194
- "button",
5195
- {
5196
- type: "button",
5197
- onClick: () => setIsOpen(!isOpen),
5198
- className: "flex items-start justify-between w-full text-left h-[18px] cursor-pointer",
5199
- "aria-expanded": isOpen,
5200
- "aria-label": `${isOpen ? collapseLabel : expandLabel} ${label}`,
5201
- children: [
5202
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start gap-[2px]", children: [
5203
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] text-[color:var(--deframe-widget-color-text-secondary)]", children: label }),
5204
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center w-[18px] h-[18px]", children: isOpen ? /* @__PURE__ */ jsxRuntime.jsx(hi2.HiChevronUp, { className: "w-3 h-3 text-[color:var(--deframe-widget-color-text-secondary)]" }) : /* @__PURE__ */ jsxRuntime.jsx(hi2.HiChevronDown, { className: "w-3 h-3 text-[color:var(--deframe-widget-color-text-secondary)]" }) })
5205
- ] }),
5206
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] [font-weight:var(--deframe-widget-font-weight-semibold)] text-[color:var(--deframe-widget-color-text-secondary)]", children: value })
5207
- ]
5208
- }
5209
- ),
5210
- isOpen && children
5211
- ] });
5212
- };
5213
- var BackgroundContainer = ({ children, className }) => {
5214
- const baseClasses = "w-full flex-1 min-h-0 px-[var(--deframe-widget-size-padding-x-md)] bg-[var(--deframe-widget-color-bg-primary)] lg:bg-[var(--deframe-widget-color-bg-secondary)] text-[color:var(--deframe-widget-color-text-primary)] flex flex-col relative overflow-y-auto";
5215
- return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-test-id": "background-container", className: tailwindMerge.twMerge(baseClasses, className), children });
5216
- };
5217
- var SectionCard = ({ children, className }) => {
5218
- const baseClasses = "bg-[var(--deframe-widget-color-bg-secondary)] lg:!bg-[var(--deframe-widget-color-bg-secondary)] rounded-[var(--deframe-widget-size-radius-xs)] shadow-[0_2px_8px_color-mix(in_srgb,var(--deframe-widget-color-text-primary)_18%,transparent)] px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-md)] flex flex-col gap-[var(--deframe-widget-size-gap-sm)]";
5219
- return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-test-id": "section-card", className: tailwindMerge.twMerge(baseClasses, className), children });
5220
- };
5221
- var Navbar = ({ children, className }) => {
5222
- const baseClasses = "w-full px-[var(--deframe-widget-size-padding-x-sm)] pr-[var(--deframe-widget-size-padding-x-md)] pt-[var(--deframe-widget-size-padding-y-sm)] pb-[var(--deframe-widget-size-padding-y-md)] border-b items-center border-[color:var(--deframe-widget-color-border-tertiary)] flex";
5223
- return /* @__PURE__ */ jsxRuntime.jsx("nav", { "data-test-id": "navbar", className: tailwindMerge.twMerge(baseClasses, className), children });
5224
- };
5225
- var gapClasses = {
5226
- xs: "gap-[var(--deframe-widget-size-gap-xs)]",
5227
- sm: "gap-[var(--deframe-widget-size-gap-sm)]",
5228
- md: "gap-[var(--deframe-widget-size-gap-md)]",
5229
- lg: "gap-[var(--deframe-widget-size-gap-lg)]"
5230
- };
5231
- var FlexCol = ({ children, className, gap = "xs" }) => {
5232
- const baseClasses = "flex flex-col";
5233
- return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-test-id": "flex-col", className: tailwindMerge.twMerge(baseClasses, gapClasses[gap], className), children });
5234
- };
5235
- var gapClasses2 = {
5236
- xs: "gap-[var(--deframe-widget-size-gap-xs)]",
5237
- sm: "gap-[var(--deframe-widget-size-gap-sm)]",
5238
- md: "gap-[var(--deframe-widget-size-gap-md)]",
5239
- lg: "gap-[var(--deframe-widget-size-gap-lg)]"
5240
- };
5241
- var FlexRow = ({ children, className, gap = "xs" }) => {
5242
- const baseClasses = "flex items-center";
5243
- return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-test-id": "flex-row", className: tailwindMerge.twMerge(baseClasses, gapClasses2[gap], className), children });
5244
- };
5245
- var ScrollableContent = ({ children, className }) => {
5246
- const baseClasses = "flex-1 overflow-y-auto px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-lg)]";
5247
- return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-test-id": "scrollable-content", className: tailwindMerge.twMerge(baseClasses, className), children });
5248
- };
5249
- var DetailsHeader = ({ title, onBack, className, backAriaLabel = "Back" }) => {
5250
- const baseClasses = "w-full px-[var(--deframe-widget-size-padding-x-sm)] pr-[var(--deframe-widget-size-padding-x-md)] pt-[var(--deframe-widget-size-padding-y-sm)] pb-[var(--deframe-widget-size-padding-y-md)] border-b border-[color:var(--deframe-widget-color-border-tertiary)] flex items-center";
5251
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-test-id": "details-header", className: tailwindMerge.twMerge(baseClasses, className), children: [
5252
- /* @__PURE__ */ jsxRuntime.jsx(
5253
- "button",
5254
- {
5255
- "data-test-id": "details-header-back-button",
5256
- onClick: onBack,
5257
- className: "w-12 h-12 rounded-[var(--deframe-widget-size-radius-full)] flex items-center justify-center text-[color:var(--deframe-widget-color-text-secondary)] hover:text-[color:var(--deframe-widget-color-brand-primary)] cursor-pointer",
5258
- "aria-label": backAriaLabel,
5259
- children: /* @__PURE__ */ jsxRuntime.jsx(hi2.HiChevronLeft, { className: "w-6 h-6 text-[color:var(--deframe-widget-color-text-tertiary)]" })
5260
- }
5261
- ),
5262
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex-1 flex items-center", children: /* @__PURE__ */ jsxRuntime.jsx(TextHeading, { variant: "h-large", children: title }) })
5263
- ] });
5264
- };
5265
- var HighRiskBadge = ({ className, label }) => {
5266
- const baseClasses = "inline-flex justify-start items-start gap-[var(--deframe-widget-size-gap-xs)]";
5267
- return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-test-id": "high-risk-badge", className: tailwindMerge.twMerge(baseClasses, className), children: /* @__PURE__ */ jsxRuntime.jsx(
5268
- "div",
5269
- {
5270
- "data-size": "Small",
5271
- "data-type": "Failed",
5272
- className: "h-6 px-[var(--deframe-widget-size-padding-x-sm)] py-[var(--deframe-widget-size-padding-y-xs)] opacity-95 bg-[color:color-mix(in_srgb,var(--deframe-widget-color-state-error)_20%,transparent)] rounded-[var(--deframe-widget-size-radius-md)] outline outline-1 outline-offset-[-1px] outline-[color:var(--deframe-widget-color-state-error)] flex justify-center items-center gap-[var(--deframe-widget-size-gap-xs)]",
5273
- children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex justify-start items-center gap-[var(--deframe-widget-size-gap-sm)].5", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "justify-start text-[color:var(--deframe-widget-color-state-error)] [font-size:var(--deframe-widget-font-size-xs)] [line-height:var(--deframe-widget-font-leading-xs)] [font-weight:var(--deframe-widget-font-weight-regular)] font-[var(--deframe-widget-font-family)] leading-4", children: label }) })
5274
- }
5275
- ) });
5276
- };
5277
- var MediumRiskBadge = ({ className, label }) => {
5278
- const baseClasses = "inline-flex justify-start items-start gap-[var(--deframe-widget-size-gap-xs)]";
5279
- return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-test-id": "medium-risk-badge", className: tailwindMerge.twMerge(baseClasses, className), children: /* @__PURE__ */ jsxRuntime.jsx(
5280
- "div",
5281
- {
5282
- "data-size": "Small",
5283
- "data-type": "Warning",
5284
- className: "h-6 px-[var(--deframe-widget-size-padding-x-sm)] py-[var(--deframe-widget-size-padding-y-xs)] opacity-95 bg-[color:color-mix(in_srgb,var(--deframe-widget-color-state-warning)_20%,transparent)] rounded-[var(--deframe-widget-size-radius-md)] outline outline-1 outline-offset-[-1px] outline-[color:var(--deframe-widget-color-state-warning)] flex justify-center items-center gap-[var(--deframe-widget-size-gap-xs)]",
5285
- children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex justify-start items-center gap-[var(--deframe-widget-size-gap-sm)].5", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "justify-start text-[color:var(--deframe-widget-color-state-warning)] [font-size:var(--deframe-widget-font-size-xs)] [line-height:var(--deframe-widget-font-leading-xs)] [font-weight:var(--deframe-widget-font-weight-regular)] font-[var(--deframe-widget-font-family)] leading-4", children: label }) })
2331
+ "data-size": "Small",
2332
+ "data-type": "Warning",
2333
+ className: "h-6 px-[var(--deframe-widget-size-padding-x-sm)] py-[var(--deframe-widget-size-padding-y-xs)] opacity-95 bg-[color:color-mix(in_srgb,var(--deframe-widget-color-state-warning)_20%,transparent)] rounded-[var(--deframe-widget-size-radius-md)] outline outline-1 outline-offset-[-1px] outline-[color:var(--deframe-widget-color-state-warning)] flex justify-center items-center gap-[var(--deframe-widget-size-gap-xs)]",
2334
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex justify-start items-center gap-[var(--deframe-widget-size-gap-sm)].5", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "justify-start text-[color:var(--deframe-widget-color-state-warning)] [font-size:var(--deframe-widget-font-size-xs)] [line-height:var(--deframe-widget-font-leading-xs)] [font-weight:var(--deframe-widget-font-weight-regular)] font-[var(--deframe-widget-font-family)] leading-4", children: label }) })
5286
2335
  }
5287
2336
  ) });
5288
2337
  };
@@ -5311,7 +2360,7 @@ var AmountInUsd = ({ children }) => /* @__PURE__ */ jsxRuntime.jsxs("p", { "data
5311
2360
  "~ ",
5312
2361
  children
5313
2362
  ] });
5314
- var TokenIcon2 = ({ src, alt }) => /* @__PURE__ */ jsxRuntime.jsx(
2363
+ var TokenIcon = ({ src, alt }) => /* @__PURE__ */ jsxRuntime.jsx(
5315
2364
  "img",
5316
2365
  {
5317
2366
  "data-test-id": "token-icon",
@@ -5387,7 +2436,7 @@ var HistoryDepositDetailsView = ({
5387
2436
  /* @__PURE__ */ jsxRuntime.jsx(TransactionTypeLabel, { children: transactionTypeLabel }),
5388
2437
  shouldShowFlow && assetIn && assetOut ? /* @__PURE__ */ jsxRuntime.jsxs(FlexCol, { gap: "sm", children: [
5389
2438
  /* @__PURE__ */ jsxRuntime.jsxs(FlexRow, { gap: "sm", children: [
5390
- /* @__PURE__ */ jsxRuntime.jsx(TokenIcon2, { src: assetIn.iconUrl, alt: assetIn.symbol }),
2439
+ /* @__PURE__ */ jsxRuntime.jsx(TokenIcon, { src: assetIn.iconUrl, alt: assetIn.symbol }),
5391
2440
  /* @__PURE__ */ jsxRuntime.jsxs(FlexCol, { children: [
5392
2441
  /* @__PURE__ */ jsxRuntime.jsxs(Amount, { children: [
5393
2442
  assetIn.amount,
@@ -5398,7 +2447,7 @@ var HistoryDepositDetailsView = ({
5398
2447
  ] })
5399
2448
  ] }),
5400
2449
  /* @__PURE__ */ jsxRuntime.jsxs(FlexRow, { gap: "sm", children: [
5401
- /* @__PURE__ */ jsxRuntime.jsx(TokenIcon2, { src: assetOut.iconUrl, alt: assetOut.symbol }),
2450
+ /* @__PURE__ */ jsxRuntime.jsx(TokenIcon, { src: assetOut.iconUrl, alt: assetOut.symbol }),
5402
2451
  /* @__PURE__ */ jsxRuntime.jsxs(FlexCol, { children: [
5403
2452
  /* @__PURE__ */ jsxRuntime.jsxs(Amount, { children: [
5404
2453
  assetOut.amount,
@@ -5409,7 +2458,7 @@ var HistoryDepositDetailsView = ({
5409
2458
  ] })
5410
2459
  ] })
5411
2460
  ] }) : /* @__PURE__ */ jsxRuntime.jsxs(FlexRow, { gap: "sm", children: [
5412
- /* @__PURE__ */ jsxRuntime.jsx(TokenIcon2, { src: primaryAssetIconUrl, alt: symbol }),
2461
+ /* @__PURE__ */ jsxRuntime.jsx(TokenIcon, { src: primaryAssetIconUrl, alt: symbol }),
5413
2462
  /* @__PURE__ */ jsxRuntime.jsx(FlexCol, { children: /* @__PURE__ */ jsxRuntime.jsxs(FlexRow, { gap: "xs", children: [
5414
2463
  /* @__PURE__ */ jsxRuntime.jsx(Amount, { children: amountWithSymbol }),
5415
2464
  amountInUsdFormatted !== "-" ? /* @__PURE__ */ jsxRuntime.jsx(AmountInUsd, { children: amountInUsdFormatted }) : null
@@ -5477,7 +2526,7 @@ var HistoryWithdrawDetailsView = ({
5477
2526
  /* @__PURE__ */ jsxRuntime.jsx(TransactionTypeLabel, { children: transactionTypeLabel }),
5478
2527
  shouldShowFlow && assetIn && assetOut ? /* @__PURE__ */ jsxRuntime.jsxs(FlexCol, { gap: "sm", children: [
5479
2528
  /* @__PURE__ */ jsxRuntime.jsxs(FlexRow, { gap: "sm", children: [
5480
- /* @__PURE__ */ jsxRuntime.jsx(TokenIcon2, { src: assetIn.iconUrl, alt: assetIn.symbol }),
2529
+ /* @__PURE__ */ jsxRuntime.jsx(TokenIcon, { src: assetIn.iconUrl, alt: assetIn.symbol }),
5481
2530
  /* @__PURE__ */ jsxRuntime.jsxs(FlexCol, { children: [
5482
2531
  /* @__PURE__ */ jsxRuntime.jsxs(Amount, { children: [
5483
2532
  assetIn.amount,
@@ -5488,7 +2537,7 @@ var HistoryWithdrawDetailsView = ({
5488
2537
  ] })
5489
2538
  ] }),
5490
2539
  /* @__PURE__ */ jsxRuntime.jsxs(FlexRow, { gap: "sm", children: [
5491
- /* @__PURE__ */ jsxRuntime.jsx(TokenIcon2, { src: assetOut.iconUrl, alt: assetOut.symbol }),
2540
+ /* @__PURE__ */ jsxRuntime.jsx(TokenIcon, { src: assetOut.iconUrl, alt: assetOut.symbol }),
5492
2541
  /* @__PURE__ */ jsxRuntime.jsxs(FlexCol, { children: [
5493
2542
  /* @__PURE__ */ jsxRuntime.jsxs(Amount, { children: [
5494
2543
  assetOut.amount,
@@ -5499,7 +2548,7 @@ var HistoryWithdrawDetailsView = ({
5499
2548
  ] })
5500
2549
  ] })
5501
2550
  ] }) : /* @__PURE__ */ jsxRuntime.jsxs(FlexRow, { gap: "sm", children: [
5502
- /* @__PURE__ */ jsxRuntime.jsx(TokenIcon2, { src: primaryAssetIconUrl, alt: symbol }),
2551
+ /* @__PURE__ */ jsxRuntime.jsx(TokenIcon, { src: primaryAssetIconUrl, alt: symbol }),
5503
2552
  /* @__PURE__ */ jsxRuntime.jsx(FlexCol, { children: /* @__PURE__ */ jsxRuntime.jsxs(FlexRow, { gap: "xs", children: [
5504
2553
  /* @__PURE__ */ jsxRuntime.jsx(Amount, { children: amountWithSymbol }),
5505
2554
  amountInUsdFormatted !== "-" ? /* @__PURE__ */ jsxRuntime.jsx(AmountInUsd, { children: amountInUsdFormatted }) : null
@@ -5751,27 +2800,14 @@ var SwapQuoteBlockchainCostsView = ({
5751
2800
  /* @__PURE__ */ jsxRuntime.jsxs(InfoRowWithIcon, { children: [
5752
2801
  /* @__PURE__ */ jsxRuntime.jsx(InfoRowIconLabel, { children: networkGasLabel }),
5753
2802
  /* @__PURE__ */ jsxRuntime.jsx(InfoRowIconValue, { children: gasCostFormatted })
5754
- ] }),
5755
- /* @__PURE__ */ jsxRuntime.jsxs(InfoRowWithIcon, { borderBottom: true, children: [
5756
- /* @__PURE__ */ jsxRuntime.jsx(InfoRowIconLabel, { children: protocolFeeLabel }),
5757
- /* @__PURE__ */ jsxRuntime.jsx(InfoRowIconValue, { children: protocolFee })
5758
- ] })
5759
- ] })
5760
- }
5761
- ) });
5762
- };
5763
- var CloseButton2 = ({ onClick, testId, ariaLabel = "Close", className }) => {
5764
- const baseClasses = "w-12 h-12 rounded-[var(--deframe-widget-size-radius-full)] flex items-center justify-center text-[color:var(--deframe-widget-color-text-secondary)] hover:text-[color:var(--deframe-widget-color-brand-primary)] transition-colors cursor-pointer";
5765
- return /* @__PURE__ */ jsxRuntime.jsx(
5766
- "button",
5767
- {
5768
- "data-test-id": testId != null ? testId : "close-button",
5769
- onClick,
5770
- className: tailwindMerge.twMerge(baseClasses, className),
5771
- "aria-label": ariaLabel,
5772
- children: /* @__PURE__ */ jsxRuntime.jsx(hi2.HiXMark, { className: "w-6 h-6" })
2803
+ ] }),
2804
+ /* @__PURE__ */ jsxRuntime.jsxs(InfoRowWithIcon, { borderBottom: true, children: [
2805
+ /* @__PURE__ */ jsxRuntime.jsx(InfoRowIconLabel, { children: protocolFeeLabel }),
2806
+ /* @__PURE__ */ jsxRuntime.jsx(InfoRowIconValue, { children: protocolFee })
2807
+ ] })
2808
+ ] })
5773
2809
  }
5774
- );
2810
+ ) });
5775
2811
  };
5776
2812
  var ChooseAStrategyActionsheetView = ({
5777
2813
  isOpen,
@@ -5805,7 +2841,7 @@ var ChooseAStrategyActionsheetView = ({
5805
2841
  height: "full",
5806
2842
  contentClassName: "w-full max-w-[620px] mx-auto",
5807
2843
  children: /* @__PURE__ */ jsxRuntime.jsxs(BackgroundContainer, { className: "flex flex-col h-full", children: [
5808
- /* @__PURE__ */ jsxRuntime.jsx(Navbar, { children: /* @__PURE__ */ jsxRuntime.jsx(CloseButton2, { onClick: onClose, ariaLabel: closeAriaLabel }) }),
2844
+ /* @__PURE__ */ jsxRuntime.jsx(Navbar, { children: /* @__PURE__ */ jsxRuntime.jsx(CloseButton_default, { onClick: onClose, ariaLabel: closeAriaLabel }) }),
5809
2845
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col flex-1 w-full px-[var(--deframe-widget-size-padding-x-lg)] py-[var(--deframe-widget-size-padding-y-lg)] overflow-hidden", children: [
5810
2846
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-shrink-0", children: [
5811
2847
  /* @__PURE__ */ jsxRuntime.jsx(TextHeading, { children: resolvedYieldLabel }),
@@ -5887,7 +2923,7 @@ var LoadingDots = ({ className = "" }) => {
5887
2923
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "animate-bounce", style: { animationDelay: "400ms", animationDuration: "1.4s" }, children: "." })
5888
2924
  ] });
5889
2925
  };
5890
- var SearchInput2 = ({
2926
+ var SearchInput = ({
5891
2927
  placeholder = "Search",
5892
2928
  value: controlledValue,
5893
2929
  disabled = false,
@@ -6035,7 +3071,7 @@ var TransactionScreen = ({
6035
3071
  }) => {
6036
3072
  return /* @__PURE__ */ jsxRuntime.jsx(BackgroundContainer, { children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col h-full", children: [
6037
3073
  onBack && /* @__PURE__ */ jsxRuntime.jsx(DetailsHeader, { title: backTitle, onBack }),
6038
- onClose && /* @__PURE__ */ jsxRuntime.jsx("div", { "data-testid": testId, className: "flex justify-start px-[var(--deframe-widget-size-padding-x-md)] pt-md", children: /* @__PURE__ */ jsxRuntime.jsx(CloseButton2, { onClick: onClose }) }),
3074
+ onClose && /* @__PURE__ */ jsxRuntime.jsx("div", { "data-testid": testId, className: "flex justify-start px-[var(--deframe-widget-size-padding-x-md)] pt-md", children: /* @__PURE__ */ jsxRuntime.jsx(CloseButton_default, { onClick: onClose }) }),
6039
3075
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full px-[var(--deframe-widget-size-padding-x-md)] pt-[var(--deframe-widget-size-padding-y-sm)]", children: /* @__PURE__ */ jsxRuntime.jsx(ProgressIndicator, { progress }) }),
6040
3076
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 overflow-y-auto px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-lg)] flex flex-col gap-[var(--deframe-widget-size-gap-lg)]", children: [
6041
3077
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col items-center gap-[var(--deframe-widget-size-gap-md)] pt-lg", children: [
@@ -6273,6 +3309,144 @@ var SwapProcessingView = ({
6273
3309
  }
6274
3310
  );
6275
3311
  };
3312
+ function LoadingIcon() {
3313
+ const green = "var(--deframe-widget-color-brand-primary)";
3314
+ const trackColor = "color-mix(in srgb, var(--deframe-widget-color-brand-primary) 12%, transparent)";
3315
+ const sw = 2.8;
3316
+ const aw = 2.4;
3317
+ return /* @__PURE__ */ jsxRuntime.jsxs(
3318
+ framerMotion.motion.svg,
3319
+ {
3320
+ "data-test-id": "swap-processing-simple-loading-icon",
3321
+ width: "56",
3322
+ height: "56",
3323
+ viewBox: "0 0 56 56",
3324
+ fill: "none",
3325
+ "aria-hidden": "true",
3326
+ animate: { rotate: 360 },
3327
+ transition: { duration: 1.6, repeat: Infinity, ease: "linear" },
3328
+ children: [
3329
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "28", cy: "28", r: "22", stroke: trackColor, strokeWidth: sw }),
3330
+ /* @__PURE__ */ jsxRuntime.jsx(
3331
+ "path",
3332
+ {
3333
+ d: "M 6.75 22.31 A 22 22 0 0 1 49.25 22.31",
3334
+ stroke: green,
3335
+ strokeWidth: sw,
3336
+ strokeLinecap: "round"
3337
+ }
3338
+ ),
3339
+ /* @__PURE__ */ jsxRuntime.jsx(
3340
+ "path",
3341
+ {
3342
+ d: "M 45.0 18.1 L 49.25 22.31 L 51.0 16.5",
3343
+ stroke: green,
3344
+ strokeWidth: aw,
3345
+ strokeLinecap: "round",
3346
+ strokeLinejoin: "round"
3347
+ }
3348
+ ),
3349
+ /* @__PURE__ */ jsxRuntime.jsx(
3350
+ "path",
3351
+ {
3352
+ d: "M 49.25 33.69 A 22 22 0 0 1 6.75 33.69",
3353
+ stroke: green,
3354
+ strokeWidth: sw,
3355
+ strokeLinecap: "round"
3356
+ }
3357
+ ),
3358
+ /* @__PURE__ */ jsxRuntime.jsx(
3359
+ "path",
3360
+ {
3361
+ d: "M 11.0 37.9 L 6.75 33.69 L 5.0 39.5",
3362
+ stroke: green,
3363
+ strokeWidth: aw,
3364
+ strokeLinecap: "round",
3365
+ strokeLinejoin: "round"
3366
+ }
3367
+ )
3368
+ ]
3369
+ }
3370
+ );
3371
+ }
3372
+ var SwapProcessingViewSimple = ({
3373
+ titleText,
3374
+ descriptionPrefix,
3375
+ activityHistoryText,
3376
+ onGoToHistory
3377
+ }) => {
3378
+ return /* @__PURE__ */ jsxRuntime.jsxs(
3379
+ "div",
3380
+ {
3381
+ "data-test-id": "swap-processing-simple-screen",
3382
+ className: tailwindMerge.twMerge(
3383
+ "absolute inset-0 z-10",
3384
+ "flex flex-col items-center justify-center",
3385
+ "gap-[var(--deframe-widget-size-gap-lg)]",
3386
+ "px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-lg)]",
3387
+ "rounded-[inherit]",
3388
+ "backdrop-blur-[12px] [-webkit-backdrop-filter:blur(12px)]",
3389
+ "bg-[color-mix(in_srgb,var(--deframe-widget-color-bg-primary)_88%,transparent)]"
3390
+ ),
3391
+ children: [
3392
+ /* @__PURE__ */ jsxRuntime.jsx(LoadingIcon, {}),
3393
+ /* @__PURE__ */ jsxRuntime.jsxs(
3394
+ "div",
3395
+ {
3396
+ "data-test-id": "swap-processing-simple-copy",
3397
+ className: "flex flex-col items-center gap-[var(--deframe-widget-size-gap-sm)] text-center",
3398
+ children: [
3399
+ /* @__PURE__ */ jsxRuntime.jsx(
3400
+ "span",
3401
+ {
3402
+ "data-test-id": "swap-processing-simple-title",
3403
+ className: tailwindMerge.twMerge(
3404
+ "[font-size:12px] [line-height:1.25] [letter-spacing:0.10em] uppercase",
3405
+ "[font-weight:var(--deframe-widget-font-weight-semibold)]",
3406
+ "font-[var(--deframe-widget-font-family)]",
3407
+ "text-[color:var(--deframe-widget-color-brand-primary)]"
3408
+ ),
3409
+ children: titleText
3410
+ }
3411
+ ),
3412
+ /* @__PURE__ */ jsxRuntime.jsxs(
3413
+ "span",
3414
+ {
3415
+ "data-test-id": "swap-processing-simple-subtitle",
3416
+ className: tailwindMerge.twMerge(
3417
+ "[font-size:var(--deframe-widget-font-size-md)] [line-height:1.6]",
3418
+ "[font-weight:var(--deframe-widget-font-weight-regular)]",
3419
+ "font-[var(--deframe-widget-font-family)]",
3420
+ "text-[color:var(--deframe-widget-color-text-secondary)]",
3421
+ "max-w-[260px]"
3422
+ ),
3423
+ children: [
3424
+ descriptionPrefix,
3425
+ " ",
3426
+ /* @__PURE__ */ jsxRuntime.jsx(
3427
+ "button",
3428
+ {
3429
+ "data-test-id": "swap-processing-simple-history-link",
3430
+ onClick: onGoToHistory,
3431
+ "aria-label": activityHistoryText,
3432
+ className: tailwindMerge.twMerge(
3433
+ "bg-transparent border-0 p-0 cursor-pointer",
3434
+ "[font-weight:var(--deframe-widget-font-weight-semibold)]",
3435
+ "text-[color:var(--deframe-widget-color-brand-primary)]"
3436
+ ),
3437
+ children: activityHistoryText
3438
+ }
3439
+ )
3440
+ ]
3441
+ }
3442
+ )
3443
+ ]
3444
+ }
3445
+ )
3446
+ ]
3447
+ }
3448
+ );
3449
+ };
6276
3450
  var SwapCrossChainProcessingView = ({
6277
3451
  fromTokenSymbol,
6278
3452
  fromTokenIcon,
@@ -6532,6 +3706,113 @@ var SwapSuccessView = ({
6532
3706
  }
6533
3707
  );
6534
3708
  };
3709
+ function SuccessIcon() {
3710
+ return /* @__PURE__ */ jsxRuntime.jsx(
3711
+ framerMotion.motion.div,
3712
+ {
3713
+ "data-test-id": "swap-success-simple-icon",
3714
+ initial: { scale: 0.55, opacity: 0 },
3715
+ animate: { scale: 1, opacity: 1 },
3716
+ transition: { type: "spring", stiffness: 300, damping: 20, delay: 0.05 },
3717
+ className: tailwindMerge.twMerge(
3718
+ "w-[84px] h-[84px] rounded-[var(--deframe-widget-size-radius-full)] flex-shrink-0",
3719
+ "flex items-center justify-center",
3720
+ "bg-[var(--deframe-widget-color-state-success)]",
3721
+ "shadow-[0_0_0_10px_color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_12%,transparent),0_0_32px_color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_22%,transparent)]"
3722
+ ),
3723
+ children: /* @__PURE__ */ jsxRuntime.jsx("svg", { width: "44", height: "44", viewBox: "0 0 44 44", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntime.jsx(
3724
+ framerMotion.motion.path,
3725
+ {
3726
+ d: "M10 22 L18 30 L34 14",
3727
+ stroke: "white",
3728
+ strokeWidth: "3.5",
3729
+ strokeLinecap: "round",
3730
+ strokeLinejoin: "round",
3731
+ initial: { pathLength: 0 },
3732
+ animate: { pathLength: 1 },
3733
+ transition: { duration: 0.45, delay: 0.2, ease: "easeOut" }
3734
+ }
3735
+ ) })
3736
+ }
3737
+ );
3738
+ }
3739
+ var SwapSuccessViewSimple = ({
3740
+ onGoToWallet,
3741
+ labels
3742
+ }) => {
3743
+ return /* @__PURE__ */ jsxRuntime.jsxs(
3744
+ "div",
3745
+ {
3746
+ "data-test-id": "swap-success-simple-screen",
3747
+ className: tailwindMerge.twMerge(
3748
+ "absolute inset-0 z-10",
3749
+ "flex flex-col items-center justify-center",
3750
+ "gap-[var(--deframe-widget-size-gap-lg)]",
3751
+ "px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-lg)]",
3752
+ "rounded-[inherit]",
3753
+ "backdrop-blur-[12px] [-webkit-backdrop-filter:blur(12px)]",
3754
+ "bg-[color-mix(in_srgb,var(--deframe-widget-color-bg-primary)_88%,transparent)]"
3755
+ ),
3756
+ children: [
3757
+ /* @__PURE__ */ jsxRuntime.jsx(SuccessIcon, {}),
3758
+ /* @__PURE__ */ jsxRuntime.jsxs(
3759
+ "div",
3760
+ {
3761
+ "data-test-id": "swap-success-simple-copy",
3762
+ className: "flex flex-col items-center gap-[var(--deframe-widget-size-gap-sm)] text-center",
3763
+ children: [
3764
+ /* @__PURE__ */ jsxRuntime.jsx(
3765
+ "span",
3766
+ {
3767
+ "data-test-id": "swap-success-simple-title",
3768
+ className: tailwindMerge.twMerge(
3769
+ "[font-size:var(--deframe-widget-font-size-xl)]",
3770
+ "[line-height:var(--deframe-widget-font-leading-xl)]",
3771
+ "[font-weight:var(--deframe-widget-font-weight-bold)]",
3772
+ "font-[var(--deframe-widget-font-family)]",
3773
+ "text-[color:var(--deframe-widget-color-text-primary)]"
3774
+ ),
3775
+ children: labels == null ? void 0 : labels.title
3776
+ }
3777
+ ),
3778
+ /* @__PURE__ */ jsxRuntime.jsxs(
3779
+ "span",
3780
+ {
3781
+ "data-test-id": "swap-success-simple-subtitle",
3782
+ className: tailwindMerge.twMerge(
3783
+ "[font-size:var(--deframe-widget-font-size-md)] [line-height:1.6]",
3784
+ "[font-weight:var(--deframe-widget-font-weight-regular)]",
3785
+ "font-[var(--deframe-widget-font-family)]",
3786
+ "text-[color:var(--deframe-widget-color-text-secondary)]",
3787
+ "max-w-[260px]"
3788
+ ),
3789
+ children: [
3790
+ labels == null ? void 0 : labels.descriptionSuffix,
3791
+ " ",
3792
+ /* @__PURE__ */ jsxRuntime.jsx(
3793
+ "button",
3794
+ {
3795
+ "data-test-id": "swap-success-simple-wallet-link",
3796
+ onClick: onGoToWallet,
3797
+ "aria-label": labels == null ? void 0 : labels.walletLinkText,
3798
+ className: tailwindMerge.twMerge(
3799
+ "bg-transparent border-0 p-0 cursor-pointer",
3800
+ "[font-weight:var(--deframe-widget-font-weight-semibold)]",
3801
+ "text-[color:var(--deframe-widget-color-brand-primary)]"
3802
+ ),
3803
+ children: labels == null ? void 0 : labels.walletLinkText
3804
+ }
3805
+ )
3806
+ ]
3807
+ }
3808
+ )
3809
+ ]
3810
+ }
3811
+ )
3812
+ ]
3813
+ }
3814
+ );
3815
+ };
6535
3816
  var SwapTransactionFailedView = ({
6536
3817
  fromTokenSymbol,
6537
3818
  fromTokenIcon,
@@ -6608,6 +3889,114 @@ var SwapTransactionFailedView = ({
6608
3889
  }
6609
3890
  );
6610
3891
  };
3892
+ function ErrorIcon() {
3893
+ return /* @__PURE__ */ jsxRuntime.jsx(
3894
+ framerMotion.motion.div,
3895
+ {
3896
+ "data-test-id": "swap-failed-simple-icon",
3897
+ initial: { scale: 0.55, opacity: 0 },
3898
+ animate: { scale: 1, opacity: 1 },
3899
+ transition: { type: "spring", stiffness: 300, damping: 20, delay: 0.05 },
3900
+ className: tailwindMerge.twMerge(
3901
+ "w-[84px] h-[84px] rounded-[var(--deframe-widget-size-radius-full)] flex-shrink-0",
3902
+ "flex items-center justify-center",
3903
+ "bg-[var(--deframe-widget-color-state-error)]",
3904
+ "shadow-[0_0_0_10px_color-mix(in_srgb,var(--deframe-widget-color-state-error)_12%,transparent),0_0_32px_color-mix(in_srgb,var(--deframe-widget-color-state-error)_22%,transparent)]"
3905
+ ),
3906
+ children: /* @__PURE__ */ jsxRuntime.jsxs("svg", { width: "44", height: "44", viewBox: "0 0 44 44", fill: "none", "aria-hidden": "true", children: [
3907
+ /* @__PURE__ */ jsxRuntime.jsx(
3908
+ framerMotion.motion.line,
3909
+ {
3910
+ x1: "14",
3911
+ y1: "14",
3912
+ x2: "30",
3913
+ y2: "30",
3914
+ stroke: "white",
3915
+ strokeWidth: "3.5",
3916
+ strokeLinecap: "round",
3917
+ initial: { pathLength: 0 },
3918
+ animate: { pathLength: 1 },
3919
+ transition: { duration: 0.25, delay: 0.2, ease: "easeOut" }
3920
+ }
3921
+ ),
3922
+ /* @__PURE__ */ jsxRuntime.jsx(
3923
+ framerMotion.motion.line,
3924
+ {
3925
+ x1: "30",
3926
+ y1: "14",
3927
+ x2: "14",
3928
+ y2: "30",
3929
+ stroke: "white",
3930
+ strokeWidth: "3.5",
3931
+ strokeLinecap: "round",
3932
+ initial: { pathLength: 0 },
3933
+ animate: { pathLength: 1 },
3934
+ transition: { duration: 0.25, delay: 0.38, ease: "easeOut" }
3935
+ }
3936
+ )
3937
+ ] })
3938
+ }
3939
+ );
3940
+ }
3941
+ var SwapTransactionFailedViewSimple = ({
3942
+ errorTitle,
3943
+ errorDescription
3944
+ }) => {
3945
+ return /* @__PURE__ */ jsxRuntime.jsxs(
3946
+ "div",
3947
+ {
3948
+ "data-test-id": "swap-failed-simple-screen",
3949
+ className: tailwindMerge.twMerge(
3950
+ "absolute inset-0 z-10",
3951
+ "flex flex-col items-center justify-center",
3952
+ "gap-[var(--deframe-widget-size-gap-lg)]",
3953
+ "px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-lg)]",
3954
+ "rounded-[inherit]",
3955
+ "backdrop-blur-[12px] [-webkit-backdrop-filter:blur(12px)]",
3956
+ "bg-[color-mix(in_srgb,var(--deframe-widget-color-bg-primary)_88%,transparent)]"
3957
+ ),
3958
+ children: [
3959
+ /* @__PURE__ */ jsxRuntime.jsx(ErrorIcon, {}),
3960
+ /* @__PURE__ */ jsxRuntime.jsxs(
3961
+ "div",
3962
+ {
3963
+ "data-test-id": "swap-failed-simple-copy",
3964
+ className: "flex flex-col items-center gap-[var(--deframe-widget-size-gap-sm)] text-center",
3965
+ children: [
3966
+ /* @__PURE__ */ jsxRuntime.jsx(
3967
+ "span",
3968
+ {
3969
+ "data-test-id": "swap-failed-simple-title",
3970
+ className: tailwindMerge.twMerge(
3971
+ "[font-size:22px] [line-height:1.25]",
3972
+ "[font-weight:var(--deframe-widget-font-weight-bold)]",
3973
+ "font-[var(--deframe-widget-font-family)]",
3974
+ "text-[color:var(--deframe-widget-color-text-primary)]"
3975
+ ),
3976
+ children: errorTitle
3977
+ }
3978
+ ),
3979
+ /* @__PURE__ */ jsxRuntime.jsx(
3980
+ "span",
3981
+ {
3982
+ "data-test-id": "swap-failed-simple-subtitle",
3983
+ className: tailwindMerge.twMerge(
3984
+ "[font-size:var(--deframe-widget-font-size-md)] [line-height:1.6]",
3985
+ "[font-weight:var(--deframe-widget-font-weight-regular)]",
3986
+ "font-[var(--deframe-widget-font-family)]",
3987
+ "text-[color:var(--deframe-widget-color-text-secondary)]",
3988
+ "max-w-[260px]"
3989
+ ),
3990
+ children: errorDescription
3991
+ }
3992
+ )
3993
+ ]
3994
+ }
3995
+ )
3996
+ ]
3997
+ }
3998
+ );
3999
+ };
6611
4000
  var ChooseAnAssetSwapView = ({
6612
4001
  actionSheetId,
6613
4002
  isOpen,
@@ -6641,13 +4030,13 @@ var ChooseAnAssetSwapView = ({
6641
4030
  height: "full",
6642
4031
  contentClassName: "w-full max-w-[620px] mx-auto",
6643
4032
  children: /* @__PURE__ */ jsxRuntime.jsxs(BackgroundContainer, { className: "flex flex-col h-full", children: [
6644
- /* @__PURE__ */ jsxRuntime.jsx(Navbar, { children: /* @__PURE__ */ jsxRuntime.jsx(CloseButton2, { testId: `swap-token-actionsheet-close-${actionSheetId}`, onClick: onClose }) }),
4033
+ /* @__PURE__ */ jsxRuntime.jsx(Navbar, { children: /* @__PURE__ */ jsxRuntime.jsx(CloseButton_default, { testId: `swap-token-actionsheet-close-${actionSheetId}`, onClick: onClose }) }),
6645
4034
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col flex-1 w-full px-[var(--deframe-widget-size-padding-x-lg)] py-[var(--deframe-widget-size-padding-y-lg)] overflow-hidden", children: [
6646
4035
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-shrink-0", children: [
6647
4036
  /* @__PURE__ */ jsxRuntime.jsx(TextHeading, { children: labels.title }),
6648
4037
  /* @__PURE__ */ jsxRuntime.jsx("br", {}),
6649
4038
  /* @__PURE__ */ jsxRuntime.jsx(
6650
- SearchInput2,
4039
+ SearchInput,
6651
4040
  {
6652
4041
  onSearch: handleSearch,
6653
4042
  placeholder: labels.searchPlaceholder,
@@ -7081,22 +4470,11 @@ var ConfirmSwapButtonView = ({
7081
4470
  exports.ActionButton = ActionButton;
7082
4471
  exports.ActionSheet = ActionSheet;
7083
4472
  exports.AddressDisplay = AddressDisplay;
7084
- exports.AmountInput = AmountInput;
7085
- exports.AssetList = AssetList;
7086
- exports.AssetListColumns = AssetListColumns;
7087
- exports.AssetListFilter = AssetListFilter;
7088
- exports.AssetListHeader = AssetListHeader;
7089
- exports.AssetListItem = AssetListItem;
7090
- exports.AssetRow = AssetRow;
7091
- exports.AssetTrendBadge = AssetTrendBadge;
7092
4473
  exports.BackgroundContainer = BackgroundContainer;
7093
4474
  exports.BannerNotification = BannerNotification;
7094
- exports.BlockchainAssetSelector = BlockchainAssetSelector;
7095
- exports.ChainChip = ChainChip;
7096
- exports.ChainRow = ChainRow;
7097
4475
  exports.ChooseAStrategyActionsheetView = ChooseAStrategyActionsheetView;
7098
4476
  exports.ChooseAnAssetSwapView = ChooseAnAssetSwapView;
7099
- exports.CloseButton = CloseButton;
4477
+ exports.CloseButton = CloseButton_default;
7100
4478
  exports.CollapsibleInfoRow = CollapsibleInfoRow;
7101
4479
  exports.CollapsibleSection = CollapsibleSection;
7102
4480
  exports.ConfirmSwapButtonView = ConfirmSwapButtonView;
@@ -7105,20 +4483,17 @@ exports.Currency = Currency;
7105
4483
  exports.DeframeComponentsProvider = DeframeComponentsProvider;
7106
4484
  exports.DetailsHeader = DetailsHeader;
7107
4485
  exports.Fiat = Currency;
7108
- exports.FilterGroupBar = FilterGroupBar;
7109
4486
  exports.FlexCol = FlexCol;
7110
4487
  exports.FlexRow = FlexRow;
7111
4488
  exports.HighRiskBadge = HighRiskBadge;
7112
4489
  exports.HistoryDepositDetailsView = HistoryDepositDetailsView;
7113
4490
  exports.HistoryWithdrawDetailsView = HistoryWithdrawDetailsView;
7114
- exports.IconCircle = IconCircle;
7115
4491
  exports.InfoLabel = InfoLabel;
7116
4492
  exports.InfoRow = InfoRow;
7117
4493
  exports.InfoRowIconLabel = InfoRowIconLabel;
7118
4494
  exports.InfoRowIconValue = InfoRowIconValue;
7119
4495
  exports.InfoRowWithIcon = InfoRowWithIcon;
7120
4496
  exports.InfoValue = InfoValue;
7121
- exports.InlineNotification = InlineNotification;
7122
4497
  exports.Input = Input2;
7123
4498
  exports.Link = Link;
7124
4499
  exports.ListItem = ListItem;
@@ -7130,50 +4505,33 @@ exports.LowRiskBadge = LowRiskBadge;
7130
4505
  exports.MediumRiskBadge = MediumRiskBadge;
7131
4506
  exports.Navbar = Navbar;
7132
4507
  exports.PercentageButton = PercentageButton;
7133
- exports.PercentageChips = PercentageChips;
7134
4508
  exports.PrimaryButton = PrimaryButton;
7135
4509
  exports.ProgressIndicator = ProgressIndicator;
7136
4510
  exports.ScrollableContent = ScrollableContent;
7137
4511
  exports.SearchEmptyState = SearchEmptyState;
7138
- exports.SearchInput = SearchInput2;
4512
+ exports.SearchInput = SearchInput;
7139
4513
  exports.SecondaryButton = SecondaryButton;
7140
4514
  exports.SectionCard = SectionCard;
7141
- exports.SegmentedControl = SegmentedControl;
7142
4515
  exports.Select = Select;
7143
4516
  exports.SelectContent = SelectContent;
7144
4517
  exports.SelectItem = SelectItem;
7145
4518
  exports.SelectTrigger = SelectTrigger;
7146
4519
  exports.Skeleton = Skeleton;
7147
- exports.StatCard = StatCard;
7148
- exports.StatCardBadge = StatCardBadge;
7149
- exports.StatCardDescription = StatCardDescription;
7150
- exports.StatCardDivider = StatCardDivider;
7151
- exports.StatCardHeader = StatCardHeader;
7152
- exports.StatCardIcon = StatCardIcon;
7153
- exports.StatCardLabel = StatCardLabel;
7154
- exports.StatCardRow = StatCardRow;
7155
- exports.StatCardTrend = StatCardTrend;
7156
- exports.StatCardValue = StatCardValue;
7157
4520
  exports.StepDisplay = StepDisplay;
7158
4521
  exports.StepStatusIcon = StepStatusIcon;
7159
4522
  exports.StepStatusText = StepStatusText;
7160
4523
  exports.StrategyDetailsView = StrategyDetailsView;
7161
- exports.StrategyList = StrategyList;
7162
- exports.StrategyListHeader = StrategyListHeader;
7163
- exports.StrategyListItem = StrategyListItem;
7164
- exports.StrategyRiskBadge = StrategyRiskBadge;
7165
4524
  exports.SummaryDetails = SummaryDetails;
7166
4525
  exports.SummaryDetailsCryptoControlV2 = SummaryDetailsCryptoControlV2;
7167
4526
  exports.SwapAdvancedSettingsView = SwapAdvancedSettingsView;
7168
4527
  exports.SwapAmountInputView = SwapAmountInputView;
7169
4528
  exports.SwapCrossChainProcessingView = SwapCrossChainProcessingView;
7170
- exports.SwapDirectionButton = SwapDirectionButton;
7171
4529
  exports.SwapFormView = SwapFormView;
7172
4530
  exports.SwapFromCardView = SwapFromCardView;
7173
4531
  exports.SwapNetworkSelectorView = SwapNetworkSelectorView;
7174
4532
  exports.SwapOutputAmountView = SwapOutputAmountView;
7175
- exports.SwapPanel = SwapPanel;
7176
4533
  exports.SwapProcessingView = SwapProcessingView;
4534
+ exports.SwapProcessingViewSimple = SwapProcessingViewSimple;
7177
4535
  exports.SwapQuoteBlockchainCostsView = SwapQuoteBlockchainCostsView;
7178
4536
  exports.SwapQuoteDetailsView = SwapQuoteDetailsView;
7179
4537
  exports.SwapQuoteErrorsView = SwapQuoteErrorsView;
@@ -7181,9 +4539,11 @@ exports.SwapQuoteHeaderView = SwapQuoteHeaderView;
7181
4539
  exports.SwapSignatureWarningView = SwapSignatureWarningView;
7182
4540
  exports.SwapSlippageToleranceButtonsView = SwapSlippageToleranceButtonsView;
7183
4541
  exports.SwapSuccessView = SwapSuccessView;
4542
+ exports.SwapSuccessViewSimple = SwapSuccessViewSimple;
7184
4543
  exports.SwapToCardView = SwapToCardView;
7185
4544
  exports.SwapTokenSelectorView = SwapTokenSelectorView;
7186
4545
  exports.SwapTransactionFailedView = SwapTransactionFailedView;
4546
+ exports.SwapTransactionFailedViewSimple = SwapTransactionFailedViewSimple;
7187
4547
  exports.Tabs = Tabs;
7188
4548
  exports.TabsContent = TabsContent;
7189
4549
  exports.TabsList = TabsList;
@@ -7194,12 +4554,7 @@ exports.TextAccent = TextAccent;
7194
4554
  exports.TextBody = TextBody;
7195
4555
  exports.TextHeading = TextHeading;
7196
4556
  exports.Title = Title;
7197
- exports.TokenIcon = TokenIcon;
7198
- exports.TokenInputCard = TokenInputCard;
7199
- exports.TokenSelector = TokenSelector;
7200
4557
  exports.TokenWithChainBadge = TokenWithChainBadge;
7201
- exports.TransactionDetailRow = TransactionDetailRow;
7202
- exports.TransactionDetails = TransactionDetails;
7203
4558
  exports.TransactionProcessingDetails = TransactionProcessingDetails;
7204
4559
  exports.TransactionScreen = TransactionScreen;
7205
4560
  exports.TransactionScreenIcon = TransactionScreenIcon;