@turtleclub/ui 0.7.0-beta.3 → 0.7.0-beta.30

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 (69) hide show
  1. package/.turbo/turbo-build.log +143 -132
  2. package/CHANGELOG.md +152 -0
  3. package/dist/index.cjs +76 -36
  4. package/dist/index.cjs.map +1 -1
  5. package/dist/index.js +36068 -17674
  6. package/dist/index.js.map +1 -1
  7. package/dist/styles.css +1 -1
  8. package/dist/types/components/charts/area-chart.d.ts +108 -0
  9. package/dist/types/components/charts/area-chart.d.ts.map +1 -0
  10. package/dist/types/components/charts/bar-chart.d.ts +110 -0
  11. package/dist/types/components/charts/bar-chart.d.ts.map +1 -0
  12. package/dist/types/components/charts/index.d.ts +5 -0
  13. package/dist/types/components/charts/index.d.ts.map +1 -0
  14. package/dist/types/components/charts/pie-chart.d.ts +94 -0
  15. package/dist/types/components/charts/pie-chart.d.ts.map +1 -0
  16. package/dist/types/components/charts/radial-chart.d.ts +151 -0
  17. package/dist/types/components/charts/radial-chart.d.ts.map +1 -0
  18. package/dist/types/components/features/data-table/data-table.d.ts +7 -4
  19. package/dist/types/components/features/data-table/data-table.d.ts.map +1 -1
  20. package/dist/types/components/features/data-table/sort-dropdown.d.ts.map +1 -1
  21. package/dist/types/components/features/search-bar.d.ts +1 -0
  22. package/dist/types/components/features/search-bar.d.ts.map +1 -1
  23. package/dist/types/components/molecules/swap-input.d.ts +3 -0
  24. package/dist/types/components/molecules/swap-input.d.ts.map +1 -1
  25. package/dist/types/components/molecules/token-selector.d.ts +2 -1
  26. package/dist/types/components/molecules/token-selector.d.ts.map +1 -1
  27. package/dist/types/components/ui/avatar.d.ts +2 -2
  28. package/dist/types/components/ui/avatar.d.ts.map +1 -1
  29. package/dist/types/components/ui/chart.d.ts +18 -4
  30. package/dist/types/components/ui/chart.d.ts.map +1 -1
  31. package/dist/types/components/ui/combobox.d.ts +21 -0
  32. package/dist/types/components/ui/combobox.d.ts.map +1 -1
  33. package/dist/types/components/ui/dialog.d.ts.map +1 -1
  34. package/dist/types/components/ui/dropdown.d.ts +2 -1
  35. package/dist/types/components/ui/dropdown.d.ts.map +1 -1
  36. package/dist/types/components/ui/index.d.ts +1 -0
  37. package/dist/types/components/ui/index.d.ts.map +1 -1
  38. package/dist/types/components/ui/multi-select.d.ts.map +1 -1
  39. package/dist/types/components/ui/segment-control.d.ts +1 -0
  40. package/dist/types/components/ui/segment-control.d.ts.map +1 -1
  41. package/dist/types/components/ui/slider.d.ts.map +1 -1
  42. package/dist/types/index.d.ts +1 -0
  43. package/dist/types/index.d.ts.map +1 -1
  44. package/package.json +3 -3
  45. package/src/components/charts/QUICK_REFERENCE.md +323 -0
  46. package/src/components/charts/README.md +658 -0
  47. package/src/components/charts/RECHARTS_FEATURES.md +458 -0
  48. package/src/components/charts/area-chart.tsx +248 -0
  49. package/src/components/charts/bar-chart.tsx +362 -0
  50. package/src/components/charts/index.ts +4 -0
  51. package/src/components/charts/pie-chart.tsx +277 -0
  52. package/src/components/charts/radial-chart.tsx +312 -0
  53. package/src/components/features/data-table/data-table.tsx +136 -125
  54. package/src/components/features/data-table/sort-dropdown.tsx +8 -11
  55. package/src/components/features/search-bar.tsx +6 -1
  56. package/src/components/molecules/swap-input.tsx +44 -30
  57. package/src/components/molecules/token-selector.tsx +10 -1
  58. package/src/components/ui/avatar.tsx +8 -15
  59. package/src/components/ui/chart.tsx +100 -109
  60. package/src/components/ui/combobox.tsx +150 -137
  61. package/src/components/ui/dialog.tsx +9 -23
  62. package/src/components/ui/dropdown.tsx +3 -1
  63. package/src/components/ui/index.ts +1 -0
  64. package/src/components/ui/multi-select.tsx +325 -307
  65. package/src/components/ui/segment-control.tsx +7 -2
  66. package/src/components/ui/slider.tsx +6 -11
  67. package/src/index.ts +1 -0
  68. package/src/styles/globals.css +4 -0
  69. package/src/styles/themes/semantic.css +26 -56
@@ -69,6 +69,7 @@ export type SegmentControlProps<T extends string> = {
69
69
  items: {
70
70
  label: React.ReactNode;
71
71
  value: T;
72
+ disabled?: boolean;
72
73
  }[];
73
74
  cursorPointer?: boolean;
74
75
  className?: string;
@@ -129,8 +130,12 @@ export function SegmentControl<T extends string>({
129
130
  type="button"
130
131
  key={button.value}
131
132
  data-active={value === button.value}
132
- className={tabVariants({ variant, size, cursorPointer })}
133
- onClick={() => handleClick(button.value)}
133
+ disabled={button.disabled}
134
+ className={cn(
135
+ tabVariants({ variant, size, cursorPointer }),
136
+ button.disabled && "cursor-not-allowed opacity-50",
137
+ )}
138
+ onClick={() => !button.disabled && handleClick(button.value)}
134
139
  >
135
140
  {button.label}
136
141
  </button>
@@ -14,13 +14,8 @@ function Slider({
14
14
  ...props
15
15
  }: React.ComponentProps<typeof SliderPrimitive.Root>) {
16
16
  const _values = React.useMemo(
17
- () =>
18
- Array.isArray(value)
19
- ? value
20
- : Array.isArray(defaultValue)
21
- ? defaultValue
22
- : [min, max],
23
- [value, defaultValue, min, max],
17
+ () => (Array.isArray(value) ? value : Array.isArray(defaultValue) ? defaultValue : [min, max]),
18
+ [value, defaultValue, min, max]
24
19
  );
25
20
 
26
21
  return (
@@ -32,20 +27,20 @@ function Slider({
32
27
  max={max}
33
28
  className={cn(
34
29
  "relative flex w-full touch-none items-center select-none data-[disabled]:opacity-50 data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-44 data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col",
35
- className,
30
+ className
36
31
  )}
37
32
  {...props}
38
33
  >
39
34
  <SliderPrimitive.Track
40
35
  data-slot="slider-track"
41
36
  className={cn(
42
- "bg-secondary relative grow overflow-hidden rounded-full data-[orientation=horizontal]:h-1.5 data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-1.5",
37
+ "bg-secondary relative grow overflow-hidden rounded-full data-[orientation=horizontal]:h-1.5 data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-1.5"
43
38
  )}
44
39
  >
45
40
  <SliderPrimitive.Range
46
41
  data-slot="slider-range"
47
42
  className={cn(
48
- "bg-primary absolute data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full",
43
+ "bg-primary absolute data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full"
49
44
  )}
50
45
  />
51
46
  </SliderPrimitive.Track>
@@ -53,7 +48,7 @@ function Slider({
53
48
  <SliderPrimitive.Thumb
54
49
  data-slot="slider-thumb"
55
50
  key={index}
56
- className="border-border bg-foreground ring-ring/50 block size-4 shrink-0 rounded-full border shadow-sm transition-[color,box-shadow] hover:ring-4 focus-visible:ring-4 focus-visible:outline-hidden disabled:pointer-events-none disabled:opacity-50"
51
+ className="bg-primary ring-primary/20 border-background block size-3 shrink-0 rounded-full border-2 ring-2 transition-[color,box-shadow] hover:ring-[6px] focus-visible:ring-[6px] focus-visible:outline-hidden disabled:pointer-events-none disabled:opacity-50"
57
52
  />
58
53
  ))}
59
54
  </SliderPrimitive.Root>
package/src/index.ts CHANGED
@@ -4,6 +4,7 @@ export * from "./components/ui";
4
4
  export * from "./components/molecules";
5
5
  export * from "./components/icons";
6
6
  export * from "./components/features";
7
+ export * from "./components/charts";
7
8
 
8
9
  // Re-export utilities
9
10
  export * from "./lib/utils";
@@ -83,6 +83,10 @@
83
83
  --color-chart-3: var(--chart-3);
84
84
  --color-chart-4: var(--chart-4);
85
85
  --color-chart-5: var(--chart-5);
86
+ --color-chart-6: var(--chart-6);
87
+ --color-chart-7: var(--chart-7);
88
+ --color-chart-8: var(--chart-8);
89
+ --color-chart-9: var(--chart-9);
86
90
 
87
91
  --border-gradient-white: linear-gradient(
88
92
  175deg,
@@ -17,9 +17,7 @@
17
17
  /* Default theme: DARK (Turtle's primary brand experience) */
18
18
 
19
19
  /* Background colors */
20
- --background: var(
21
- --color-brand-black
22
- ); /* #141514 - Dark background (default) */
20
+ --background: var(--color-brand-black); /* #141514 - Dark background (default) */
23
21
  --foreground: var(--color-brand-white); /* #F9F9F9 - Light text (default) */
24
22
 
25
23
  /* Card colors */
@@ -28,47 +26,31 @@
28
26
 
29
27
  /* Popover colors */
30
28
  --popover: var(--color-brand-black); /* #141514 - Dark popover */
31
- --popover-foreground: var(
32
- --color-brand-white
33
- ); /* #F9F9F9 - Light popover text */
29
+ --popover-foreground: var(--color-brand-white); /* #F9F9F9 - Light popover text */
34
30
 
35
31
  /* Primary colors */
36
32
  --primary: var(--color-brand-green); /* #73F36C - Primary brand color */
37
- --primary-foreground: var(
38
- --color-brand-black
39
- ); /* #141514 - Black text on green */
33
+ --primary-foreground: var(--color-brand-black); /* #141514 - Black text on green */
40
34
 
41
35
  /* Secondary colors */
42
- --secondary: var(
43
- --color-neutral-base-800
44
- ); /* #262626 - Light overlay on dark */
36
+ --secondary: var(--color-neutral-base-800); /* #262626 - Light overlay on dark */
45
37
  --secondary-foreground: var(--color-brand-white); /* #F9F9F9 - Light text */
46
38
 
47
39
  /* Muted colors */
48
40
  --muted: var(--color-neutral-base-850); /* #191A19 - Subtle overlay */
49
- --muted-foreground: var(
50
- --color-neutral-alpha-50
51
- ); /* #FFFFFF80 - Muted text */
41
+ --muted-foreground: var(--color-neutral-alpha-50); /* #FFFFFF80 - Muted text */
52
42
 
53
43
  /* Accent colors */
54
44
  --accent: var(--color-brand-green); /* #73F36C - Accent color */
55
- --accent-foreground: var(
56
- --color-brand-black
57
- ); /* #141514 - Black text on green */
45
+ --accent-foreground: var(--color-brand-black); /* #141514 - Black text on green */
58
46
 
59
47
  /* Destructive colors */
60
48
  --destructive: var(--color-error); /* #EF4444 - Error/destructive */
61
- --destructive-foreground: var(
62
- --color-brand-white
63
- ); /* #F9F9F9 - Light text on red */
49
+ --destructive-foreground: var(--color-brand-white); /* #F9F9F9 - Light text on red */
64
50
 
65
51
  /* Border and input colors */
66
- --border: var(
67
- --color-neutral-alpha-10
68
- ); /* #F9F9F91A - Light borders on dark */
69
- --input: var(
70
- --color-neutral-alpha-2
71
- ); /* #F9F9F905 - Subtle input background */
52
+ --border: var(--color-neutral-alpha-10); /* #F9F9F91A - Light borders on dark */
53
+ --input: var(--color-neutral-alpha-2); /* #F9F9F905 - Subtle input background */
72
54
  --ring: var(--color-brand-green); /* #73F36C - Focus ring */
73
55
 
74
56
  --sidebar: var(--color-neutral-base-850);
@@ -78,11 +60,15 @@
78
60
  --radius: var(--radius-turtle); /* 16px - Default border radius */
79
61
 
80
62
  /* ===== CHART COLORS (FOR DATA VISUALIZATION) ===== */
81
- --chart-1: var(--color-brand-green); /* Primary chart color */
82
- --chart-2: var(--color-info); /* Secondary chart color */
83
- --chart-3: var(--color-warning); /* Tertiary chart color */
84
- --chart-4: var(--color-error); /* Quaternary chart color */
85
- --chart-5: var(--color-success); /* Quinary chart color */
63
+ --chart-1: oklch(0.75 0.17 164); /* Emerald */
64
+ --chart-2: oklch(0.72 0.14 200); /* Cyan */
65
+ --chart-3: oklch(0.56 0.18 272); /* Indigo */
66
+ --chart-4: oklch(0.68 0.13 192); /* Teal */
67
+ --chart-5: oklch(0.72 0.18 350); /* Pink */
68
+ --chart-6: oklch(0.75 0.15 75); /* Amber */
69
+ --chart-7: oklch(0.7 0.14 230); /* Sky */
70
+ --chart-8: oklch(0.62 0.02 60); /* Stone */
71
+ --chart-9: oklch(0.58 0.02 240); /* Slate */
86
72
  }
87
73
 
88
74
  /* ===== LIGHT THEME ===== */
@@ -99,17 +85,11 @@
99
85
 
100
86
  /* Popover colors */
101
87
  --popover: var(--color-brand-white); /* #F9F9F9 - Light popover */
102
- --popover-foreground: var(
103
- --color-brand-black
104
- ); /* #141514 - Dark popover text */
88
+ --popover-foreground: var(--color-brand-black); /* #141514 - Dark popover text */
105
89
 
106
90
  /* Primary colors */
107
- --primary: var(
108
- --color-brand-green
109
- ); /* #73F36C - Same green (brand consistency) */
110
- --primary-foreground: var(
111
- --color-brand-black
112
- ); /* #141514 - Black text on green */
91
+ --primary: var(--color-brand-green); /* #73F36C - Same green (brand consistency) */
92
+ --primary-foreground: var(--color-brand-black); /* #141514 - Black text on green */
113
93
 
114
94
  /* Secondary colors */
115
95
  --secondary: var(--color-neutral-alpha-10); /* #F9F9F91A - Light overlay */
@@ -117,29 +97,19 @@
117
97
 
118
98
  /* Muted colors */
119
99
  --muted: var(--color-neutral-alpha-2); /* #F9F9F905 - Subtle overlay */
120
- --muted-foreground: var(
121
- --color-neutral-alpha-50
122
- ); /* #FFFFFF80 - Muted text */
100
+ --muted-foreground: var(--color-neutral-alpha-50); /* #FFFFFF80 - Muted text */
123
101
 
124
102
  /* Accent colors */
125
103
  --accent: var(--color-brand-green); /* #73F36C - Same accent */
126
- --accent-foreground: var(
127
- --color-brand-black
128
- ); /* #141514 - Black text on green */
104
+ --accent-foreground: var(--color-brand-black); /* #141514 - Black text on green */
129
105
 
130
106
  /* Destructive colors */
131
107
  --destructive: var(--color-error); /* #EF4444 - Same error color */
132
- --destructive-foreground: var(
133
- --color-brand-white
134
- ); /* #F9F9F9 - Light text on red */
108
+ --destructive-foreground: var(--color-brand-white); /* #F9F9F9 - Light text on red */
135
109
 
136
110
  /* Border and input colors */
137
- --border: var(
138
- --color-neutral-alpha-dark-10
139
- ); /* #1415141A - Dark borders on light */
140
- --input: var(
141
- --color-neutral-alpha-2
142
- ); /* #F9F9F905 - Subtle input background */
111
+ --border: var(--color-neutral-alpha-dark-10); /* #1415141A - Dark borders on light */
112
+ --input: var(--color-neutral-alpha-2); /* #F9F9F905 - Subtle input background */
143
113
  --ring: var(--color-brand-green); /* #73F36C - Same focus ring */
144
114
 
145
115
  --sidebar: var(--color-neutral-base-850);