@gearbox-protocol/permissionless-ui 1.22.0-next.1 → 1.22.0-next.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/dist/cjs/components/buttons/button/button.cjs +1 -1
  2. package/dist/cjs/components/checkbox/checkbox-labeled.cjs +1 -1
  3. package/dist/cjs/components/client-adapters/index.cjs +1 -1
  4. package/dist/cjs/components/client-adapters/styled-button/styled-button.cjs +1 -1
  5. package/dist/cjs/components/client-adapters/styled-rounded-image/index.cjs +1 -0
  6. package/dist/cjs/components/client-adapters/styled-rounded-image/styled-rounded-image.cjs +1 -0
  7. package/dist/cjs/components/index.cjs +1 -1
  8. package/dist/cjs/components/layout/app-logo/app-logo.cjs +1 -1
  9. package/dist/cjs/components/network-icon/network-icon.cjs +1 -1
  10. package/dist/cjs/components/points-icon/points-icon.cjs +1 -1
  11. package/dist/cjs/components/rounded-image/rounded-image.cjs +1 -1
  12. package/dist/cjs/components/token-icon/token-icon.cjs +1 -1
  13. package/dist/cjs/components/vertical-list/vertical-list.cjs +1 -1
  14. package/dist/cjs/configs/tailwind-preset.cjs +1 -1
  15. package/dist/cjs/index.cjs +1 -1
  16. package/dist/cjs/utils/format-money.cjs +1 -1
  17. package/dist/cjs/utils/format-slippage.cjs +1 -0
  18. package/dist/cjs/utils/index.cjs +1 -1
  19. package/dist/cjs/utils/search-in-token.cjs +1 -1
  20. package/dist/cjs/utils/static.cjs +1 -0
  21. package/dist/esm/components/buttons/button/button.js +18 -13
  22. package/dist/esm/components/checkbox/checkbox-labeled.js +2 -0
  23. package/dist/esm/components/client-adapters/index.js +4 -2
  24. package/dist/esm/components/client-adapters/styled-button/styled-button.js +13 -12
  25. package/dist/esm/components/client-adapters/styled-rounded-image/index.js +4 -0
  26. package/dist/esm/components/client-adapters/styled-rounded-image/styled-rounded-image.js +132 -0
  27. package/dist/esm/components/index.js +466 -464
  28. package/dist/esm/components/layout/app-logo/app-logo.js +8 -7
  29. package/dist/esm/components/network-icon/network-icon.js +22 -21
  30. package/dist/esm/components/points-icon/points-icon.js +29 -34
  31. package/dist/esm/components/rounded-image/rounded-image.js +58 -27
  32. package/dist/esm/components/token-icon/token-icon.js +24 -23
  33. package/dist/esm/components/vertical-list/vertical-list.js +39 -33
  34. package/dist/esm/configs/tailwind-preset.js +5 -3
  35. package/dist/esm/index.js +595 -592
  36. package/dist/esm/utils/format-money.js +13 -17
  37. package/dist/esm/utils/format-slippage.js +7 -0
  38. package/dist/esm/utils/index.js +48 -47
  39. package/dist/esm/utils/search-in-token.js +8 -8
  40. package/dist/esm/utils/static.js +6 -0
  41. package/dist/globals.css +1 -1
  42. package/dist/types/components/buttons/button/button.d.ts +1 -1
  43. package/dist/types/components/client-adapters/index.d.ts +1 -0
  44. package/dist/types/components/client-adapters/styled-button/styled-button.d.ts +1 -1
  45. package/dist/types/components/client-adapters/styled-rounded-image/index.d.ts +1 -0
  46. package/dist/types/components/client-adapters/styled-rounded-image/styled-rounded-image.d.ts +9 -0
  47. package/dist/types/components/points-icon/points-icon.d.ts +2 -5
  48. package/dist/types/components/rounded-image/rounded-image.d.ts +19 -4
  49. package/dist/types/components/table/edit-button.d.ts +1 -1
  50. package/dist/types/components/vertical-list/vertical-list.d.ts +2 -5
  51. package/dist/types/configs/tailwind-preset.d.ts +2 -0
  52. package/dist/types/utils/format-money.d.ts +0 -15
  53. package/dist/types/utils/format-slippage.d.ts +15 -0
  54. package/dist/types/utils/index.d.ts +2 -1
  55. package/dist/types/utils/static.d.ts +3 -0
  56. package/package.json +5 -3
  57. package/src/styles/base.css +492 -0
  58. package/src/styles/theme.css +18 -3
@@ -1,11 +1,26 @@
1
- import type * as React from "react";
2
- export interface RoundedImageProps extends React.ImgHTMLAttributes<HTMLImageElement> {
1
+ import { default as React } from '../../../node_modules/.pnpm/react@19.2.0/node_modules/react';
2
+ export interface RoundedImageProps extends Omit<React.ImgHTMLAttributes<HTMLImageElement>, "onError"> {
3
3
  /**
4
4
  * Size of the image in pixels
5
5
  */
6
- size?: number;
6
+ size: number;
7
+ /**
8
+ * Whether to apply rounded corners (circle)
9
+ */
10
+ rounded?: boolean;
11
+ /**
12
+ * Default icon to display if the image fails to load
13
+ */
14
+ defaultIcon?: string;
15
+ /**
16
+ * Image fit behavior
17
+ * - "contain" — show full image without cropping (best for icons)
18
+ * - "cover" — fill bounds, may crop (best for photos/avatars)
19
+ */
20
+ fit?: "contain" | "cover";
7
21
  }
8
22
  /**
9
23
  * RoundedImage — a circular image component
10
24
  */
11
- export declare function RoundedImage({ className, size, style, ...props }: RoundedImageProps): import("react/jsx-runtime").JSX.Element;
25
+ declare const RoundedImage: React.ForwardRefExoticComponent<RoundedImageProps & React.RefAttributes<HTMLImageElement>>;
26
+ export { RoundedImage };
@@ -1,6 +1,6 @@
1
1
  import { ButtonProps } from '../buttons';
2
2
  import type * as React from "react";
3
- interface EditButtonProps extends Omit<ButtonProps, "variant"> {
3
+ interface EditButtonProps extends Omit<ButtonProps, "variant" | "width"> {
4
4
  /**
5
5
  * @deprecated Use children instead
6
6
  */
@@ -1,14 +1,11 @@
1
1
  import { VariantProps } from 'class-variance-authority';
2
2
  import * as React from "react";
3
3
  declare const verticalListVariants: (props?: ({
4
- gap?: "default" | "sm" | "lg" | "xs" | "md" | null | undefined;
4
+ rowGap?: "default" | "xs" | "md" | null | undefined;
5
5
  divided?: boolean | null | undefined;
6
+ nested?: boolean | null | undefined;
6
7
  } & import('class-variance-authority/types').ClassProp) | undefined) => string;
7
8
  export interface VerticalListProps extends React.HTMLAttributes<HTMLUListElement>, VariantProps<typeof verticalListVariants> {
8
- /**
9
- * Gap between items
10
- */
11
- gap?: "xs" | "sm" | "default" | "md" | "lg";
12
9
  /**
13
10
  * Show dividers between items
14
11
  */
@@ -57,6 +57,8 @@ export declare const preset: {
57
57
  foreground: string;
58
58
  };
59
59
  success: string;
60
+ "success-foreground": string;
61
+ "success-hover": string;
60
62
  warning: string;
61
63
  liquidation: string;
62
64
  border: string;
@@ -84,18 +84,3 @@ export declare const SLIPPAGE_DECIMALS = 1000n;
84
84
  * ```
85
85
  */
86
86
  export declare function formatMoneyAmount(value: number | bigint | string, options?: number | Intl.NumberFormatOptions): string;
87
- /**
88
- * Formats a slippage value to percentage string
89
- *
90
- * @param slippage - The slippage value (e.g., 10 for 1%)
91
- * @param precision - Number of decimal places (default: 1)
92
- * @returns Formatted slippage string like "1.0%"
93
- *
94
- * @example
95
- * ```ts
96
- * slippageTemplate(10) // "1.0%"
97
- * slippageTemplate(5, 2) // "0.50%"
98
- * slippageTemplate(undefined) // "-"
99
- * ```
100
- */
101
- export declare function slippageTemplate(slippage?: number, precision?: number): string;
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Formats a slippage value to percentage string
3
+ *
4
+ * @param slippage - The slippage value (e.g., 10 for 1%)
5
+ * @param precision - Number of decimal places (default: 1)
6
+ * @returns Formatted slippage string like "1.0%"
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * slippageTemplate(10) // "1.0%"
11
+ * slippageTemplate(5, 2) // "0.50%"
12
+ * slippageTemplate(undefined) // "-"
13
+ * ```
14
+ */
15
+ export declare function slippageTemplate(slippage?: number, precision?: number): string;
@@ -7,8 +7,9 @@ export * from './colors';
7
7
  export * from './copy';
8
8
  export * from './format';
9
9
  export * from './format-asset-amount';
10
- export { formatMoney, formatMoney as formatMoneyAmount, formatPercentAmount, PERCENTAGE_FACTOR, percentageTemplate, percentTemplate, SLIPPAGE_DECIMALS, slippageTemplate, } from './format-money';
10
+ export { formatMoney, formatMoney as formatMoneyAmount, formatPercentAmount, PERCENTAGE_FACTOR, percentageTemplate, percentTemplate, SLIPPAGE_DECIMALS, } from './format-money';
11
11
  export { FORMAT_CONSTANTS, type FormatNumberOptions, formatNumberWithSuffix, formatPrice, getAdaptiveDecimals, isBelowDisplayThreshold, isEffectivelyZero, toSignificantDigits, } from './format-number';
12
+ export * from './format-slippage';
12
13
  export * from './interface';
13
14
  export * from './network-icons';
14
15
  export * from './parse-input-to-bn';
@@ -0,0 +1,3 @@
1
+ export declare const STATIC_SERVER = "https://static.gearbox.finance";
2
+ export declare const buildStaticUrl: (domain?: string) => (url: string) => string;
3
+ export declare const getStatic: (url: string) => string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gearbox-protocol/permissionless-ui",
3
- "version": "1.22.0-next.1",
3
+ "version": "1.22.0-next.10",
4
4
  "description": "Internal UI components",
5
5
  "license": "MIT",
6
6
  "main": "./dist/cjs/index.js",
@@ -32,13 +32,15 @@
32
32
  },
33
33
  "./globals.css": "./dist/globals.css",
34
34
  "./grid-safelist.css": "./dist/grid-safelist.css",
35
- "./theme.css": "./src/styles/theme.css"
35
+ "./theme.css": "./src/styles/theme.css",
36
+ "./base.css": "./src/styles/base.css"
36
37
  },
37
38
  "files": [
38
39
  "dist",
39
40
  "dist/globals.css",
40
41
  "dist/grid-safelist.css",
41
- "src/styles/theme.css"
42
+ "src/styles/theme.css",
43
+ "src/styles/base.css"
42
44
  ],
43
45
  "scripts": {
44
46
  "clean": "rm -rf dist",
@@ -0,0 +1,492 @@
1
+ /**
2
+ * Base styles for @gearbox-protocol/permissionless-ui
3
+ *
4
+ * This file contains:
5
+ * - Google Fonts import (Rubik)
6
+ * - CSS variables for light/dark themes (:root, .dark)
7
+ * - Base body styles with fallbacks
8
+ * - Scrollbar styles (custom + navbar)
9
+ * - Table responsive grid (.table-sm-grid)
10
+ * - React-Slick carousel overrides
11
+ * - Liquidation graph styles
12
+ *
13
+ * Does NOT contain:
14
+ * - @import "tailwindcss" (import separately)
15
+ * - @theme block (use theme.css for Tailwind v4 utilities)
16
+ * - Grid safelist (use grid-safelist.css)
17
+ *
18
+ * Usage:
19
+ * - For full setup: import globals.css (includes everything)
20
+ * - For modular setup: import base.css + theme.css + tailwindcss separately
21
+ */
22
+ @import url("https://fonts.googleapis.com/css2?family=Rubik:wght@300;400;500;600;700&display=swap");
23
+
24
+ /*
25
+ * Critical fallback styles for browsers without CSS variable support
26
+ * or when @layer/@theme directives fail. These use raw color values
27
+ * to ensure the page is at least readable.
28
+ */
29
+ html {
30
+ /* Light theme fallback */
31
+ background-color: #f8f9fa;
32
+ color: #1f1f23;
33
+ }
34
+
35
+ html.dark {
36
+ /* Dark theme fallback */
37
+ background-color: #141416;
38
+ color: #ffffff;
39
+ }
40
+
41
+ @layer base {
42
+ :root {
43
+ color-scheme: light dark;
44
+
45
+ --background: 225 15% 98%;
46
+ --foreground: 240 5% 12%;
47
+ --card: 0 0% 100%;
48
+ --card-foreground: 240 5% 12%;
49
+ --popover: 0 0% 100%;
50
+ --popover-foreground: 240 5% 12%;
51
+ --primary: 323.89 93.39% 47.45%;
52
+ --primary-foreground: 0 0% 100%;
53
+ --secondary: 225 12% 92%;
54
+ --secondary-foreground: 240 8.94% 75.88%;
55
+ --muted: 225 10% 90%;
56
+ --muted-foreground: 225 6% 40%;
57
+ --accent: 323.83 100% 58.04%;
58
+ --accent-foreground: 0 0% 100%;
59
+ --destructive: 0 85% 50%;
60
+ --destructive-foreground: 0 0% 100%;
61
+ --success: 136.51 100% 78.63%;
62
+ --success-foreground: 0 0% 0%;
63
+ --success-hover: 136.58 100% 85.1%;
64
+ --warning: 38 95% 45%;
65
+ --liquidation: 274 67% 48%;
66
+ --input: 225 10% 88%;
67
+ --ring: 330 100% 50%;
68
+ --radius: 0.75rem;
69
+ --gray-10: 228 6.76% 70.98%;
70
+ --gray-20: 220 6.12% 51.96%;
71
+ --gray-30: 222.86 5.74% 47.84%;
72
+ --gray-40: 221.54 5.83% 43.73%;
73
+ --gray-50: 223.64 5.42% 39.8%;
74
+ --gray-60: 220 6.59% 35.69%;
75
+ --gray-70: 223.64 6.83% 31.57%;
76
+ --gray-80: 220 6.47% 27.25%;
77
+ --gray-90: 220 7.56% 23.33%;
78
+ --gray-100: 217.5 8.16% 19.22%;
79
+ --gray-110: 225 5.26% 14.9%;
80
+ --text-secondary: 225 6% 45%;
81
+ --dropdown-dark-button: 225 8% 25%;
82
+ --white: 0 0% 100%;
83
+ --white-foreground: 240 2.56% 7.65%;
84
+ --black: 0 0% 0%;
85
+ --border: 225 10% 88%;
86
+ }
87
+
88
+ .dark {
89
+ color-scheme: dark;
90
+
91
+ --background: 240 3% 8%;
92
+ --foreground: 0 0% 100%;
93
+ --card: 240 4% 10%;
94
+ --card-foreground: 0 0% 100%;
95
+ --popover: 240 6% 12%;
96
+ --popover-foreground: 0 0% 100%;
97
+ --primary: 323.89 93.39% 47.45%;
98
+ --primary-foreground: 0 0% 100%;
99
+ --secondary: 240 7% 17%;
100
+ --secondary-foreground: 240 8.94% 75.88%;
101
+ --muted: 225 6% 19%;
102
+ --muted-foreground: 240 2% 75%;
103
+ --accent: 323.83 100% 58.04%;
104
+ --accent-foreground: 0 0% 100%;
105
+ --destructive: 3 93% 63%;
106
+ --success: 136.51 100% 78.63%;
107
+ --success-foreground: 0 0% 0%;
108
+ --success-hover: 136.58 100% 85.1%;
109
+ --destructive-foreground: 0 0% 100%;
110
+ --warning: 44 100% 69%;
111
+ --liquidation: 274 67% 58%;
112
+ --input: 225 6% 19%;
113
+ --ring: 330 100% 59%;
114
+ --gray-10: 225 5.26% 14.9%;
115
+ --gray-20: 217.5 8.16% 19.22%;
116
+ --gray-30: 220 7.56% 23.33%;
117
+ --gray-40: 220 6.47% 27.25%;
118
+ --gray-50: 223.64 6.83% 31.57%;
119
+ --gray-60: 220 6.59% 35.69%;
120
+ --gray-70: 223.64 5.42% 39.8%;
121
+ --gray-80: 221.54 5.83% 43.73%;
122
+ --gray-90: 222.86 5.74% 47.84%;
123
+ --gray-100: 220 6.12% 51.96%;
124
+ --gray-110: 228 6.76% 70.98%;
125
+ --text-secondary: 240 2% 75%;
126
+ --dropdown-dark-button: 225 6% 19%;
127
+ --white: 0 0% 100%;
128
+ --white-foreground: 240 2.56% 7.65%;
129
+ --black: 0 0% 0%;
130
+ --border: 0 0% 100% / 0.05;
131
+ }
132
+ }
133
+
134
+ @layer base {
135
+ body {
136
+ margin: 0;
137
+ padding: 0;
138
+ min-height: 100vh;
139
+ font-family:
140
+ "Rubik", -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen",
141
+ "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue",
142
+ sans-serif;
143
+ font-size: 1rem;
144
+ line-height: 1.1875rem;
145
+ /* Fallback colors for browsers without CSS variable support */
146
+ background-color: #f8f9fa;
147
+ background-color: hsl(var(--background));
148
+ color: #1f1f23;
149
+ color: hsl(var(--foreground));
150
+ border-color: #dfe2e6;
151
+ border-color: hsl(var(--border));
152
+ -webkit-font-smoothing: antialiased;
153
+ -moz-osx-font-smoothing: grayscale;
154
+ -webkit-tap-highlight-color: transparent;
155
+ font-feature-settings:
156
+ "ss01" on,
157
+ "ss02" on,
158
+ "cv01" on,
159
+ "cv03" on;
160
+ }
161
+
162
+ /* Dark theme body styles with fallback */
163
+ .dark body,
164
+ html.dark body {
165
+ background-color: #141416;
166
+ background-color: hsl(var(--background));
167
+ color: #ffffff;
168
+ color: hsl(var(--foreground));
169
+ }
170
+
171
+ /* Prevent layout shift for fixed elements when modals/dialogs lock scroll */
172
+ body[data-scroll-locked] [class~="fixed"] {
173
+ padding-right: var(--removed-body-scroll-bar-size, 0px);
174
+ }
175
+
176
+ /* Prevent Select/Combobox from blocking page scroll */
177
+ body[data-scroll-locked="1"] {
178
+ overflow: auto !important;
179
+ margin-right: 0 !important;
180
+ padding-right: 0 !important;
181
+ }
182
+
183
+ html.dark {
184
+ color-scheme: dark;
185
+ }
186
+
187
+ *:not(.navbar-scrollbar)::-webkit-scrollbar {
188
+ width: 6px;
189
+ height: 6px;
190
+ border-radius: 8px;
191
+ }
192
+
193
+ *:not(.navbar-scrollbar)::-webkit-scrollbar-thumb {
194
+ background: hsl(var(--gray-90));
195
+ border-radius: 8px;
196
+ }
197
+
198
+ *:not(.navbar-scrollbar)::-webkit-scrollbar-track {
199
+ background: hsl(var(--gray-20));
200
+ }
201
+ }
202
+
203
+ .navbar-scrollbar {
204
+ scrollbar-width: none;
205
+ -ms-overflow-style: none;
206
+ }
207
+
208
+ .navbar-scrollbar::-webkit-scrollbar {
209
+ display: none;
210
+ }
211
+
212
+ @media (min-width: 768px) {
213
+ .navbar-scrollbar {
214
+ scrollbar-width: thin;
215
+ scrollbar-color: hsl(var(--muted-foreground) / 0.2) transparent;
216
+ }
217
+
218
+ .navbar-scrollbar::-webkit-scrollbar {
219
+ display: block;
220
+ width: 2px;
221
+ height: 2px;
222
+ }
223
+
224
+ .navbar-scrollbar::-webkit-scrollbar-thumb {
225
+ background: hsl(var(--muted-foreground) / 0.2);
226
+ border-radius: 1px;
227
+ }
228
+
229
+ .navbar-scrollbar::-webkit-scrollbar-thumb:hover {
230
+ background: hsl(var(--muted-foreground) / 0.35);
231
+ }
232
+
233
+ .navbar-scrollbar::-webkit-scrollbar-track {
234
+ background: transparent;
235
+ margin: 2px;
236
+ }
237
+ }
238
+
239
+ /* Table responsive grid with CSS variables */
240
+ .table-sm-grid {
241
+ grid-template-columns: repeat(var(--grid-cols-xs, 1), minmax(0, 1fr));
242
+ }
243
+
244
+ @media (min-width: 640px) {
245
+ .table-sm-grid {
246
+ grid-template-columns: repeat(var(--grid-cols-sm, var(--grid-cols-xs, 1)),
247
+ minmax(0, 1fr));
248
+ }
249
+ }
250
+
251
+ @media (min-width: 768px) {
252
+ .table-sm-grid {
253
+ grid-template-columns: repeat(var(--grid-cols-md, var(--grid-cols-sm, var(--grid-cols-xs, 1))),
254
+ minmax(0, 1fr));
255
+ }
256
+ }
257
+
258
+ @media (min-width: 1024px) {
259
+ .table-sm-grid {
260
+ grid-template-columns: repeat(var(--grid-cols-lg,
261
+ var(--grid-cols-md, var(--grid-cols-sm, var(--grid-cols-xs, 1)))),
262
+ minmax(0, 1fr));
263
+ }
264
+ }
265
+
266
+ /* React-Slick Carousel Styles - Override Tailwind Preflight */
267
+ .slick-slider {
268
+ position: relative;
269
+ display: block;
270
+ box-sizing: border-box;
271
+ user-select: none;
272
+ touch-action: pan-y;
273
+ -webkit-tap-highlight-color: transparent;
274
+ }
275
+
276
+ .slick-list {
277
+ position: relative;
278
+ display: block;
279
+ overflow: hidden;
280
+ margin: 0;
281
+ padding: 0;
282
+ }
283
+
284
+ .slick-track {
285
+ position: relative;
286
+ display: flex !important;
287
+ align-items: flex-start;
288
+ margin-left: 0;
289
+ }
290
+
291
+ .slick-slide {
292
+ float: none;
293
+ min-height: 1px;
294
+ }
295
+
296
+ .slick-slide>div {
297
+ width: 100%;
298
+ }
299
+
300
+ /* Slick Dots - Override Tailwind list resets */
301
+ .slick-dots {
302
+ position: relative;
303
+ display: flex !important;
304
+ justify-content: center;
305
+ align-items: center;
306
+ gap: 4px;
307
+ margin: 20px 0 0 0;
308
+ padding: 0;
309
+ list-style: none;
310
+ bottom: 0;
311
+ }
312
+
313
+ .slick-dots li {
314
+ position: relative;
315
+ display: inline-block;
316
+ margin: 0;
317
+ padding: 0;
318
+ width: 8px;
319
+ height: 8px;
320
+ list-style: none;
321
+ }
322
+
323
+ .slick-dots li button {
324
+ display: block;
325
+ width: 8px;
326
+ height: 8px;
327
+ padding: 0;
328
+ margin: 0;
329
+ border: 0;
330
+ border-radius: 50%;
331
+ background: hsl(var(--muted-foreground));
332
+ font-size: 0;
333
+ line-height: 0;
334
+ cursor: pointer;
335
+ transition: background-color 0.2s ease;
336
+ }
337
+
338
+ .slick-dots li button:hover {
339
+ background: hsl(var(--muted-foreground) / 0.8);
340
+ }
341
+
342
+ .slick-dots li button::before {
343
+ display: none;
344
+ }
345
+
346
+ .slick-dots li.slick-active button {
347
+ background: hsl(var(--white));
348
+ }
349
+
350
+ /* Slick Arrows */
351
+ .slick-arrow {
352
+ position: absolute;
353
+ z-index: 10;
354
+ display: flex;
355
+ align-items: center;
356
+ justify-content: center;
357
+ width: 24px;
358
+ height: 24px;
359
+ padding: 0;
360
+ border: 0;
361
+ background: transparent;
362
+ color: hsl(var(--foreground));
363
+ font-size: 0;
364
+ line-height: 0;
365
+ cursor: pointer;
366
+ transition: color 0.2s ease;
367
+ }
368
+
369
+ .slick-arrow:hover {
370
+ color: hsl(var(--muted-foreground));
371
+ }
372
+
373
+ .slick-prev {
374
+ top: -25px;
375
+ right: 32px;
376
+ left: auto;
377
+ }
378
+
379
+ .slick-next {
380
+ top: -25px;
381
+ right: 0;
382
+ }
383
+
384
+ .slick-disabled {
385
+ opacity: 0.5;
386
+ cursor: not-allowed;
387
+ }
388
+
389
+ /* Liquidation Graph Styles */
390
+ .liquidation-graph-container .rct-xy-plot {
391
+ .rct-chart-background {
392
+ fill: transparent;
393
+ }
394
+
395
+ .rct-chart-inner {
396
+ .rct-plot-background {
397
+ fill: transparent;
398
+ }
399
+
400
+ /* Crosshair lines */
401
+ .rct-chart-line-x.rct-crosshair-x,
402
+ .rct-chart-line-y.rct-crosshair-y {
403
+ stroke: black;
404
+ stroke-dasharray: 1px, 1px;
405
+ }
406
+
407
+ /* Axis text styling */
408
+ &>g:not([class])>text {
409
+ font-family: inherit;
410
+ font-size: 12px;
411
+ line-height: 14px;
412
+ font-weight: 400;
413
+ font-style: normal;
414
+ fill: hsl(var(--muted-foreground));
415
+ user-select: none;
416
+ }
417
+
418
+ .rct-chart-axis.rct-chart-axis-y,
419
+ .rct-chart-axis.rct-chart-axis-x {
420
+ cursor: pointer;
421
+ }
422
+
423
+ .rct-chart-axis.rct-chart-axis-y .rct-chart-value-labels-y text,
424
+ .rct-chart-axis.rct-chart-axis-x .rct-chart-value-labels-x text {
425
+ font-family: inherit;
426
+ font-size: 12px;
427
+ line-height: 14px;
428
+ font-weight: 400;
429
+ font-style: normal;
430
+ fill: hsl(var(--muted-foreground));
431
+ user-select: none;
432
+ }
433
+
434
+ .rct-chart-axis.rct-chart-axis-y>g:not([class])>text,
435
+ .rct-chart-axis.rct-chart-axis-x>g:not([class])>text {
436
+ font-family: inherit;
437
+ font-size: 12px;
438
+ line-height: 14px;
439
+ font-weight: 400;
440
+ font-style: normal;
441
+ fill: hsl(var(--muted-foreground));
442
+ user-select: none;
443
+ }
444
+
445
+ .rct-chart-grid-x .rct-chart-line-x.rct-chart-grid-line:first-of-type,
446
+ .rct-chart-grid-y .rct-chart-line-y.rct-chart-grid-line:first-of-type {
447
+ stroke-width: 2px;
448
+ stroke: hsl(var(--border));
449
+ }
450
+
451
+ .rct-chart-axis.rct-chart-axis-y .rct-chart-ticks-y line,
452
+ .rct-chart-axis.rct-chart-axis-x .rct-chart-ticks-x line {
453
+ stroke-width: 2px;
454
+ stroke: hsl(var(--border));
455
+ }
456
+
457
+ /* Heatmap cell colors */
458
+ .rct-chart__heatmap-cell--current {
459
+ fill: white !important;
460
+ stroke: black;
461
+ stroke-width: 0.1px;
462
+ }
463
+
464
+ .rct-chart__heatmap-cell--liquidation {
465
+ fill: rgb(244, 67, 54) !important;
466
+ stroke: black;
467
+ stroke-width: 0.1px;
468
+ }
469
+
470
+ .rct-chart__heatmap-cell--bad {
471
+ fill: rgb(255, 152, 0) !important;
472
+ stroke: black;
473
+ stroke-width: 0.1px;
474
+ }
475
+
476
+ .rct-chart__heatmap-cell--ok {
477
+ fill: rgb(255, 193, 7) !important;
478
+ stroke: black;
479
+ stroke-width: 0.1px;
480
+ }
481
+
482
+ .rct-chart__heatmap-cell--good {
483
+ fill: rgb(67, 160, 71) !important;
484
+ stroke: black;
485
+ stroke-width: 0.1px;
486
+ }
487
+
488
+ .rct-chart__heatmap-cell--hovered {
489
+ opacity: 0.6;
490
+ }
491
+ }
492
+ }
@@ -1,7 +1,14 @@
1
- /*
1
+ /**
2
2
  * Tailwind v4 theme configuration
3
- * Import this file in consuming projects to get @theme definitions
4
- * for generating utility classes (bg-black, text-primary, etc.)
3
+ *
4
+ * This file contains ONLY the @theme block for generating Tailwind utility classes
5
+ * (bg-background, text-primary, border-gray-50, etc.)
6
+ *
7
+ * Requires CSS variables from base.css to be loaded first.
8
+ *
9
+ * Usage:
10
+ * - For full setup: import globals.css (includes everything)
11
+ * - For modular setup: import base.css before this file
5
12
  */
6
13
  @theme {
7
14
  /* Delayed fade-in animation for loading states */
@@ -34,6 +41,8 @@
34
41
  --color-destructive: hsl(var(--destructive));
35
42
  --color-destructive-foreground: hsl(var(--destructive-foreground));
36
43
  --color-success: hsl(var(--success));
44
+ --color-success-foreground: hsl(var(--success-foreground));
45
+ --color-success-hover: hsl(var(--success-hover));
37
46
  --color-warning: hsl(var(--warning));
38
47
  --color-liquidation: hsl(var(--liquidation));
39
48
  --color-border: hsl(var(--border));
@@ -42,6 +51,7 @@
42
51
  --color-text-secondary: hsl(var(--text-secondary));
43
52
  --color-dropdown-dark-button: hsl(var(--dropdown-dark-button));
44
53
  --color-white: hsl(var(--white));
54
+ --color-white-foreground: hsl(var(--white-foreground));
45
55
  --color-black: hsl(var(--black));
46
56
  --color-gray-10: hsl(var(--gray-10));
47
57
  --color-gray-20: hsl(var(--gray-20));
@@ -55,6 +65,11 @@
55
65
  --color-gray-100: hsl(var(--gray-100));
56
66
  --color-gray-110: hsl(var(--gray-110));
57
67
 
68
+ /* Additional semantic colors (aliases) */
69
+ --color-additional-success: hsl(var(--success));
70
+ --color-additional-warning: hsl(var(--warning));
71
+ --color-additional-alert: hsl(var(--destructive));
72
+
58
73
  --radius-lg: var(--radius);
59
74
  --radius-md: calc(var(--radius) - 2px);
60
75
  --radius-sm: calc(var(--radius) - 4px);