@turtleclub/ui 0.3.0-beta.9 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.prettierrc.json +4 -0
- package/.turbo/turbo-build.log +152 -39
- package/CHANGELOG.md +334 -0
- package/dist/index.cjs +170 -28
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +23743 -4141
- package/dist/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/types/components/features/data-table.d.ts +9 -0
- package/dist/types/components/features/data-table.d.ts.map +1 -0
- package/dist/types/components/features/index.d.ts +5 -0
- package/dist/types/components/features/index.d.ts.map +1 -0
- package/dist/types/components/features/page-heading.d.ts +10 -0
- package/dist/types/components/features/page-heading.d.ts.map +1 -0
- package/dist/types/components/features/search-bar.d.ts +10 -0
- package/dist/types/components/features/search-bar.d.ts.map +1 -0
- package/dist/types/components/features/segmented-navigation.d.ts +7 -0
- package/dist/types/components/features/segmented-navigation.d.ts.map +1 -0
- package/dist/types/components/features/sidebar-layout.d.ts +36 -0
- package/dist/types/components/features/sidebar-layout.d.ts.map +1 -0
- package/dist/types/components/icons/arrow.d.ts +4 -0
- package/dist/types/components/icons/arrow.d.ts.map +1 -0
- package/dist/types/components/icons/beta.d.ts +4 -0
- package/dist/types/components/icons/beta.d.ts.map +1 -0
- package/dist/types/components/icons/dot.d.ts +4 -0
- package/dist/types/components/icons/dot.d.ts.map +1 -0
- package/dist/types/components/icons/index.d.ts +8 -0
- package/dist/types/components/icons/index.d.ts.map +1 -0
- package/dist/types/components/icons/issue.d.ts +4 -0
- package/dist/types/components/icons/issue.d.ts.map +1 -0
- package/dist/types/components/icons/turtle.d.ts +4 -0
- package/dist/types/components/icons/turtle.d.ts.map +1 -0
- package/dist/types/components/icons/update.d.ts +4 -0
- package/dist/types/components/icons/update.d.ts.map +1 -0
- package/dist/types/components/icons/warning.d.ts +4 -0
- package/dist/types/components/icons/warning.d.ts.map +1 -0
- package/dist/types/components/molecules/index.d.ts +0 -1
- package/dist/types/components/molecules/index.d.ts.map +1 -1
- package/dist/types/components/molecules/opportunity/opportunity-apr.d.ts +6 -2
- package/dist/types/components/molecules/opportunity/opportunity-apr.d.ts.map +1 -1
- package/dist/types/components/molecules/opportunity/opportunity-disclaimer.d.ts +1 -2
- package/dist/types/components/molecules/opportunity/opportunity-disclaimer.d.ts.map +1 -1
- package/dist/types/components/molecules/opportunity/opportunity-list/hooks/use-opportunity-filtering.d.ts +2 -1
- package/dist/types/components/molecules/opportunity/opportunity-list/hooks/use-opportunity-filtering.d.ts.map +1 -1
- package/dist/types/components/molecules/opportunity/opportunity-list/opportunity-list.d.ts.map +1 -1
- package/dist/types/components/molecules/opportunity/opportunity-rate-estimator.d.ts +1 -2
- package/dist/types/components/molecules/opportunity/opportunity-rate-estimator.d.ts.map +1 -1
- package/dist/types/components/molecules/opportunity/opportunity-section.d.ts +3 -0
- package/dist/types/components/molecules/opportunity/opportunity-section.d.ts.map +1 -1
- package/dist/types/components/molecules/opportunity/opportunity-selector.d.ts +1 -2
- package/dist/types/components/molecules/opportunity/opportunity-selector.d.ts.map +1 -1
- package/dist/types/components/molecules/opportunity/opportunity-type.d.ts +1 -2
- package/dist/types/components/molecules/opportunity/opportunity-type.d.ts.map +1 -1
- package/dist/types/components/molecules/route-details.d.ts +1 -1
- package/dist/types/components/molecules/route-details.d.ts.map +1 -1
- package/dist/types/components/molecules/slippage-selector.d.ts +1 -2
- package/dist/types/components/molecules/slippage-selector.d.ts.map +1 -1
- package/dist/types/components/molecules/swap-details.d.ts.map +1 -1
- package/dist/types/components/molecules/swap-input.d.ts +5 -1
- package/dist/types/components/molecules/swap-input.d.ts.map +1 -1
- package/dist/types/components/molecules/tabs.d.ts +2 -2
- package/dist/types/components/molecules/tabs.d.ts.map +1 -1
- package/dist/types/components/molecules/token-selector.d.ts +1 -1
- package/dist/types/components/molecules/token-selector.d.ts.map +1 -1
- package/dist/types/components/molecules/tx-status.d.ts.map +1 -1
- package/dist/types/components/molecules/widget/asset-list/asset-filters.d.ts.map +1 -1
- package/dist/types/components/molecules/widget/asset-list/asset-list.d.ts.map +1 -1
- package/dist/types/components/molecules/widget/asset-list/hooks/use-asset-grouping.d.ts.map +1 -1
- package/dist/types/components/molecules/widget/base-selector.d.ts +1 -1
- package/dist/types/components/molecules/widget/base-selector.d.ts.map +1 -1
- package/dist/types/components/molecules/widget/campaign-item.d.ts +1 -1
- package/dist/types/components/molecules/widget/campaign-item.d.ts.map +1 -1
- package/dist/types/components/molecules/widget/index.d.ts +3 -3
- package/dist/types/components/molecules/widget/index.d.ts.map +1 -1
- package/dist/types/components/molecules/widget/opportunity-item.d.ts +7 -0
- package/dist/types/components/molecules/widget/opportunity-item.d.ts.map +1 -1
- package/dist/types/components/molecules/widget/widget-item.d.ts +2 -2
- package/dist/types/components/molecules/widget/widget-item.d.ts.map +1 -1
- package/dist/types/components/molecules/widget/widget-list-items.d.ts +2 -2
- package/dist/types/components/molecules/widget/widget-list-items.d.ts.map +1 -1
- package/dist/types/components/ui/alert-dialog.d.ts +15 -0
- package/dist/types/components/ui/alert-dialog.d.ts.map +1 -0
- package/dist/types/components/ui/animated-background/animated-background.d.ts +9 -0
- package/dist/types/components/ui/animated-background/animated-background.d.ts.map +1 -0
- package/dist/types/components/ui/animated-background/index.d.ts +2 -0
- package/dist/types/components/ui/animated-background/index.d.ts.map +1 -0
- package/dist/types/components/ui/avatar.d.ts +10 -6
- package/dist/types/components/ui/avatar.d.ts.map +1 -1
- package/dist/types/components/ui/badge.d.ts +5 -4
- package/dist/types/components/ui/badge.d.ts.map +1 -1
- package/dist/types/components/ui/banner.d.ts +7 -0
- package/dist/types/components/ui/banner.d.ts.map +1 -0
- package/dist/types/components/ui/button.d.ts +8 -6
- package/dist/types/components/ui/button.d.ts.map +1 -1
- package/dist/types/components/ui/card.d.ts +10 -11
- package/dist/types/components/ui/card.d.ts.map +1 -1
- package/dist/types/components/ui/checkbox.d.ts +5 -0
- package/dist/types/components/ui/checkbox.d.ts.map +1 -0
- package/dist/types/components/ui/chip.d.ts +1 -1
- package/dist/types/components/ui/chip.d.ts.map +1 -1
- package/dist/types/components/ui/collapsible.d.ts +7 -0
- package/dist/types/components/ui/collapsible.d.ts.map +1 -0
- package/dist/types/components/ui/combobox.d.ts +148 -0
- package/dist/types/components/ui/combobox.d.ts.map +1 -0
- package/dist/types/components/ui/command.d.ts +19 -0
- package/dist/types/components/ui/command.d.ts.map +1 -0
- package/dist/types/components/ui/dialog.d.ts +10 -10
- package/dist/types/components/ui/dialog.d.ts.map +1 -1
- package/dist/types/components/ui/dropdown.d.ts +30 -0
- package/dist/types/components/ui/dropdown.d.ts.map +1 -0
- package/dist/types/components/ui/field.d.ts +26 -0
- package/dist/types/components/ui/field.d.ts.map +1 -0
- package/dist/types/components/ui/heading.d.ts +12 -0
- package/dist/types/components/ui/heading.d.ts.map +1 -0
- package/dist/types/components/ui/hover-card.d.ts +7 -7
- package/dist/types/components/ui/hover-card.d.ts.map +1 -1
- package/dist/types/components/ui/icon-animation.d.ts +1 -1
- package/dist/types/components/ui/icon-animation.d.ts.map +1 -1
- package/dist/types/components/ui/icon-list.d.ts +3 -0
- package/dist/types/components/ui/icon-list.d.ts.map +1 -1
- package/dist/types/components/ui/index.d.ts +28 -9
- package/dist/types/components/ui/index.d.ts.map +1 -1
- package/dist/types/components/ui/info-card.d.ts +4 -4
- package/dist/types/components/ui/info-card.d.ts.map +1 -1
- package/dist/types/components/ui/input-group.d.ts +17 -0
- package/dist/types/components/ui/input-group.d.ts.map +1 -0
- package/dist/types/components/ui/input.d.ts +1 -3
- package/dist/types/components/ui/input.d.ts.map +1 -1
- package/dist/types/components/ui/label-with-icon.d.ts +3 -3
- package/dist/types/components/ui/label-with-icon.d.ts.map +1 -1
- package/dist/types/components/ui/label.d.ts +1 -1
- package/dist/types/components/ui/label.d.ts.map +1 -1
- package/dist/types/components/ui/multi-select.d.ts +192 -0
- package/dist/types/components/ui/multi-select.d.ts.map +1 -0
- package/dist/types/components/ui/navigation-bar.d.ts +2 -2
- package/dist/types/components/ui/navigation-bar.d.ts.map +1 -1
- package/dist/types/components/ui/navigation-menu.d.ts +15 -0
- package/dist/types/components/ui/navigation-menu.d.ts.map +1 -0
- package/dist/types/components/ui/opportunity-details-v1.d.ts +1 -1
- package/dist/types/components/ui/opportunity-details-v1.d.ts.map +1 -1
- package/dist/types/components/ui/popover.d.ts +8 -0
- package/dist/types/components/ui/popover.d.ts.map +1 -0
- package/dist/types/components/ui/scroll-area.d.ts +2 -2
- package/dist/types/components/ui/scroll-area.d.ts.map +1 -1
- package/dist/types/components/ui/segment-control.d.ts +19 -0
- package/dist/types/components/ui/segment-control.d.ts.map +1 -0
- package/dist/types/components/ui/select.d.ts +14 -13
- package/dist/types/components/ui/select.d.ts.map +1 -1
- package/dist/types/components/ui/separator.d.ts +1 -1
- package/dist/types/components/ui/separator.d.ts.map +1 -1
- package/dist/types/components/ui/sheet.d.ts +14 -0
- package/dist/types/components/ui/sheet.d.ts.map +1 -0
- package/dist/types/components/ui/sidebar.d.ts +69 -0
- package/dist/types/components/ui/sidebar.d.ts.map +1 -0
- package/dist/types/components/ui/skeleton.d.ts +4 -0
- package/dist/types/components/ui/skeleton.d.ts.map +1 -0
- package/dist/types/components/ui/slider.d.ts +5 -0
- package/dist/types/components/ui/slider.d.ts.map +1 -0
- package/dist/types/components/ui/sonner.d.ts +1 -2
- package/dist/types/components/ui/sonner.d.ts.map +1 -1
- package/dist/types/components/ui/switch.d.ts +1 -1
- package/dist/types/components/ui/switch.d.ts.map +1 -1
- package/dist/types/components/ui/table-shadcn.d.ts +11 -0
- package/dist/types/components/ui/table-shadcn.d.ts.map +1 -0
- package/dist/types/components/ui/table.d.ts +2 -2
- package/dist/types/components/ui/table.d.ts.map +1 -1
- package/dist/types/components/ui/textarea.d.ts +4 -0
- package/dist/types/components/ui/textarea.d.ts.map +1 -0
- package/dist/types/components/ui/toggle-group.d.ts +2 -2
- package/dist/types/components/ui/toggle-group.d.ts.map +1 -1
- package/dist/types/components/ui/toggle.d.ts +2 -2
- package/dist/types/components/ui/toggle.d.ts.map +1 -1
- package/dist/types/components/ui/tooltip.d.ts +7 -4
- package/dist/types/components/ui/tooltip.d.ts.map +1 -1
- package/dist/types/hooks/useIsMobile.d.ts +7 -0
- package/dist/types/hooks/useIsMobile.d.ts.map +1 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +38 -28
- package/src/components/features/data-table.tsx +96 -0
- package/src/components/features/index.ts +4 -0
- package/src/components/features/page-heading.tsx +22 -0
- package/src/components/features/search-bar.tsx +50 -0
- package/src/components/features/segmented-navigation.tsx +18 -0
- package/src/components/features/sidebar-layout.tsx +190 -0
- package/src/components/icons/arrow.tsx +23 -0
- package/src/components/icons/beta.tsx +86 -0
- package/src/components/icons/dot.tsx +89 -0
- package/src/components/icons/index.ts +7 -0
- package/src/components/icons/issue.tsx +97 -0
- package/src/components/icons/turtle.tsx +143 -0
- package/src/components/icons/update.tsx +108 -0
- package/src/components/icons/warning.tsx +86 -0
- package/src/components/molecules/index.ts +0 -2
- package/src/components/molecules/opportunity/opportunity-apr.tsx +97 -16
- package/src/components/molecules/opportunity/opportunity-list/hooks/use-opportunity-filtering.ts +4 -3
- package/src/components/molecules/opportunity/opportunity-list/hooks/use-opportunity-grouping.ts +1 -1
- package/src/components/molecules/opportunity/opportunity-list/opportunity-list.tsx +21 -17
- package/src/components/molecules/opportunity/opportunity-rate-estimator.tsx +4 -1
- package/src/components/molecules/opportunity/opportunity-section.tsx +19 -17
- package/src/components/molecules/opportunity/opportunity-selector.tsx +2 -3
- package/src/components/molecules/route-details.tsx +48 -37
- package/src/components/molecules/swap-details.tsx +2 -4
- package/src/components/molecules/swap-input.tsx +56 -21
- package/src/components/molecules/token-selector.tsx +2 -2
- package/src/components/molecules/tx-status.tsx +1 -5
- package/src/components/molecules/widget/asset-list/asset-filters.tsx +17 -23
- package/src/components/molecules/widget/asset-list/asset-list.tsx +23 -19
- package/src/components/molecules/widget/asset-list/asset-row.tsx +7 -7
- package/src/components/molecules/widget/asset-list/hooks/use-asset-grouping.ts +38 -23
- package/src/components/molecules/widget/base-selector.tsx +11 -11
- package/src/components/molecules/widget/campaign-item.tsx +2 -2
- package/src/components/molecules/widget/index.ts +10 -4
- package/src/components/molecules/widget/opportunity-item.tsx +8 -1
- package/src/components/molecules/widget/widget-item.tsx +45 -26
- package/src/components/molecules/widget/widget-list-items.tsx +6 -5
- package/src/components/ui/alert-dialog.tsx +146 -0
- package/src/components/ui/animated-background/animated-background.tsx +174 -0
- package/src/components/ui/animated-background/index.ts +1 -0
- package/src/components/ui/avatar.tsx +16 -3
- package/src/components/ui/badge.tsx +18 -8
- package/src/components/ui/banner.tsx +78 -0
- package/src/components/ui/button.tsx +51 -21
- package/src/components/ui/card.tsx +21 -61
- package/src/components/ui/checkbox.tsx +29 -0
- package/src/components/ui/collapsible.tsx +22 -0
- package/src/components/ui/combobox.tsx +617 -0
- package/src/components/ui/command.tsx +164 -0
- package/src/components/ui/dialog.tsx +5 -9
- package/src/components/ui/dropdown.tsx +263 -0
- package/src/components/ui/field.tsx +232 -0
- package/src/components/ui/heading.tsx +49 -0
- package/src/components/ui/hover-card.tsx +10 -10
- package/src/components/ui/icon-list.tsx +109 -21
- package/src/components/ui/index.ts +29 -10
- package/src/components/ui/info-card.tsx +1 -1
- package/src/components/ui/input-group.tsx +158 -0
- package/src/components/ui/input.tsx +17 -25
- package/src/components/ui/label-with-icon.tsx +40 -30
- package/src/components/ui/label.tsx +8 -9
- package/src/components/ui/multi-select.tsx +1000 -0
- package/src/components/ui/navigation-menu.tsx +181 -0
- package/src/components/ui/opportunity-details-v1.tsx +2 -2
- package/src/components/ui/popover.tsx +42 -0
- package/src/components/ui/scroll-area.tsx +11 -11
- package/src/components/ui/segment-control.tsx +140 -0
- package/src/components/ui/select.tsx +26 -31
- package/src/components/ui/sheet.tsx +130 -0
- package/src/components/ui/sidebar.tsx +693 -0
- package/src/components/ui/skeleton.tsx +14 -0
- package/src/components/ui/slider.tsx +58 -0
- package/src/components/ui/switch.tsx +8 -11
- package/src/components/ui/{table-shad.tsx → table-shadcn.tsx} +25 -39
- package/src/components/ui/table.tsx +3 -2
- package/src/components/ui/textarea.tsx +22 -0
- package/src/components/ui/tooltip.tsx +11 -7
- package/src/hooks/useIsMobile.ts +74 -0
- package/src/index.ts +2 -0
- package/src/styles/globals.css +87 -20
- package/src/styles/themes/semantic.css +11 -5
- package/src/styles/tokens/colors.css +64 -53
- package/src/styles/tokens/radius.css +3 -34
- package/tsconfig.json +11 -15
- package/vite.config.js +41 -57
- package/dist/types/components/molecules/search-bar.d.ts +0 -10
- package/dist/types/components/molecules/search-bar.d.ts.map +0 -1
- package/dist/types/components/ui/table-shad.d.ts +0 -11
- package/dist/types/components/ui/table-shad.d.ts.map +0 -1
- package/src/components/molecules/search-bar.tsx +0 -42
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import * as SliderPrimitive from "@radix-ui/react-slider";
|
|
5
|
+
|
|
6
|
+
import { cn } from "@/lib/utils";
|
|
7
|
+
|
|
8
|
+
function Slider({
|
|
9
|
+
className,
|
|
10
|
+
defaultValue,
|
|
11
|
+
value,
|
|
12
|
+
min = 0,
|
|
13
|
+
max = 100,
|
|
14
|
+
...props
|
|
15
|
+
}: React.ComponentProps<typeof SliderPrimitive.Root>) {
|
|
16
|
+
const _values = React.useMemo(
|
|
17
|
+
() => (Array.isArray(value) ? value : Array.isArray(defaultValue) ? defaultValue : [min, max]),
|
|
18
|
+
[value, defaultValue, min, max]
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
return (
|
|
22
|
+
<SliderPrimitive.Root
|
|
23
|
+
data-slot="slider"
|
|
24
|
+
defaultValue={defaultValue}
|
|
25
|
+
value={value}
|
|
26
|
+
min={min}
|
|
27
|
+
max={max}
|
|
28
|
+
className={cn(
|
|
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",
|
|
30
|
+
className
|
|
31
|
+
)}
|
|
32
|
+
{...props}
|
|
33
|
+
>
|
|
34
|
+
<SliderPrimitive.Track
|
|
35
|
+
data-slot="slider-track"
|
|
36
|
+
className={cn(
|
|
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"
|
|
38
|
+
)}
|
|
39
|
+
>
|
|
40
|
+
<SliderPrimitive.Range
|
|
41
|
+
data-slot="slider-range"
|
|
42
|
+
className={cn(
|
|
43
|
+
"bg-primary absolute data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full"
|
|
44
|
+
)}
|
|
45
|
+
/>
|
|
46
|
+
</SliderPrimitive.Track>
|
|
47
|
+
{Array.from({ length: _values.length }, (_, index) => (
|
|
48
|
+
<SliderPrimitive.Thumb
|
|
49
|
+
data-slot="slider-thumb"
|
|
50
|
+
key={index}
|
|
51
|
+
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"
|
|
52
|
+
/>
|
|
53
|
+
))}
|
|
54
|
+
</SliderPrimitive.Root>
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export { Slider };
|
|
@@ -1,17 +1,14 @@
|
|
|
1
|
-
import * as React from "react"
|
|
2
|
-
import * as SwitchPrimitive from "@radix-ui/react-switch"
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import * as SwitchPrimitive from "@radix-ui/react-switch";
|
|
3
3
|
|
|
4
|
-
import { cn } from "@/lib/utils"
|
|
4
|
+
import { cn } from "@/lib/utils";
|
|
5
5
|
|
|
6
|
-
function Switch({
|
|
7
|
-
className,
|
|
8
|
-
...props
|
|
9
|
-
}: React.ComponentProps<typeof SwitchPrimitive.Root>) {
|
|
6
|
+
function Switch({ className, ...props }: React.ComponentProps<typeof SwitchPrimitive.Root>) {
|
|
10
7
|
return (
|
|
11
8
|
<SwitchPrimitive.Root
|
|
12
9
|
data-slot="switch"
|
|
13
10
|
className={cn(
|
|
14
|
-
"peer data-[state=checked]:bg-primary data-[state=unchecked]:bg-input focus-visible:border-ring focus-visible:ring-ring/50 dark:data-[state=unchecked]:bg-input/80 inline-flex h-[1.15rem] w-8 shrink-0 items-center rounded-full border
|
|
11
|
+
"peer group data-[state=checked]:bg-primary data-[state=unchecked]:bg-input focus-visible:border-ring focus-visible:ring-ring/50 dark:data-[state=unchecked]:bg-input/80 border-border inline-flex h-[1.15rem] w-8 shrink-0 items-center rounded-full border shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",
|
|
15
12
|
className
|
|
16
13
|
)}
|
|
17
14
|
{...props}
|
|
@@ -19,11 +16,11 @@ function Switch({
|
|
|
19
16
|
<SwitchPrimitive.Thumb
|
|
20
17
|
data-slot="switch-thumb"
|
|
21
18
|
className={cn(
|
|
22
|
-
"bg-
|
|
19
|
+
"bg-muted-foreground dark:group-data-[state=unchecked]:bg-foreground dark:group-data-[state=checked]:bg-primary pointer-events-none block size-4 rounded-full ring-0 transition-transform data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0"
|
|
23
20
|
)}
|
|
24
21
|
/>
|
|
25
22
|
</SwitchPrimitive.Root>
|
|
26
|
-
)
|
|
23
|
+
);
|
|
27
24
|
}
|
|
28
25
|
|
|
29
|
-
export { Switch }
|
|
26
|
+
export { Switch };
|
|
@@ -1,53 +1,40 @@
|
|
|
1
|
-
|
|
1
|
+
"use client";
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import { cn } from "@/lib/utils";
|
|
4
5
|
|
|
5
6
|
function Table({ className, ...props }: React.ComponentProps<"table">) {
|
|
6
7
|
return (
|
|
7
|
-
<div
|
|
8
|
-
data-slot="table-container"
|
|
9
|
-
className="relative w-full overflow-x-auto"
|
|
10
|
-
>
|
|
8
|
+
<div data-slot="table-container" className="relative w-full overflow-x-auto">
|
|
11
9
|
<table
|
|
12
10
|
data-slot="table"
|
|
13
|
-
className={cn(
|
|
11
|
+
className={cn(
|
|
12
|
+
"w-full caption-bottom text-sm",
|
|
13
|
+
"border-separate border-spacing-y-2",
|
|
14
|
+
className
|
|
15
|
+
)}
|
|
14
16
|
{...props}
|
|
15
17
|
/>
|
|
16
18
|
</div>
|
|
17
|
-
)
|
|
19
|
+
);
|
|
18
20
|
}
|
|
19
21
|
|
|
20
22
|
function TableHeader({ className, ...props }: React.ComponentProps<"thead">) {
|
|
21
|
-
return (
|
|
22
|
-
<thead
|
|
23
|
-
data-slot="table-header"
|
|
24
|
-
className={cn("[&_tr]:border-b", className)}
|
|
25
|
-
{...props}
|
|
26
|
-
/>
|
|
27
|
-
)
|
|
23
|
+
return <thead data-slot="table-header" className={cn(className)} {...props} />;
|
|
28
24
|
}
|
|
29
25
|
|
|
30
26
|
function TableBody({ className, ...props }: React.ComponentProps<"tbody">) {
|
|
31
|
-
return (
|
|
32
|
-
<tbody
|
|
33
|
-
data-slot="table-body"
|
|
34
|
-
className={cn("[&_tr:last-child]:border-0", className)}
|
|
35
|
-
{...props}
|
|
36
|
-
/>
|
|
37
|
-
)
|
|
27
|
+
return <tbody data-slot="table-body" className={cn("", className)} {...props} />;
|
|
38
28
|
}
|
|
39
29
|
|
|
40
30
|
function TableFooter({ className, ...props }: React.ComponentProps<"tfoot">) {
|
|
41
31
|
return (
|
|
42
32
|
<tfoot
|
|
43
33
|
data-slot="table-footer"
|
|
44
|
-
className={cn(
|
|
45
|
-
"bg-muted/50 border-t font-medium [&>tr]:last:border-b-0",
|
|
46
|
-
className
|
|
47
|
-
)}
|
|
34
|
+
className={cn("border-t font-medium [&>tr]:last:border-b-0", className)}
|
|
48
35
|
{...props}
|
|
49
36
|
/>
|
|
50
|
-
)
|
|
37
|
+
);
|
|
51
38
|
}
|
|
52
39
|
|
|
53
40
|
function TableRow({ className, ...props }: React.ComponentProps<"tr">) {
|
|
@@ -55,12 +42,12 @@ function TableRow({ className, ...props }: React.ComponentProps<"tr">) {
|
|
|
55
42
|
<tr
|
|
56
43
|
data-slot="table-row"
|
|
57
44
|
className={cn(
|
|
58
|
-
|
|
45
|
+
'hover:[&>[data-slot="table-cell"]]:bg-neutral-alpha-5 data-[state=selected]:bg-neutral-alpha-10 transition-colors',
|
|
59
46
|
className
|
|
60
47
|
)}
|
|
61
48
|
{...props}
|
|
62
49
|
/>
|
|
63
|
-
)
|
|
50
|
+
);
|
|
64
51
|
}
|
|
65
52
|
|
|
66
53
|
function TableHead({ className, ...props }: React.ComponentProps<"th">) {
|
|
@@ -69,37 +56,36 @@ function TableHead({ className, ...props }: React.ComponentProps<"th">) {
|
|
|
69
56
|
data-slot="table-head"
|
|
70
57
|
className={cn(
|
|
71
58
|
"text-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",
|
|
59
|
+
"text-xs",
|
|
72
60
|
className
|
|
73
61
|
)}
|
|
74
62
|
{...props}
|
|
75
63
|
/>
|
|
76
|
-
)
|
|
64
|
+
);
|
|
77
65
|
}
|
|
78
66
|
|
|
79
|
-
function
|
|
67
|
+
function ShadTableCell({ className, ...props }: React.ComponentProps<"td">) {
|
|
80
68
|
return (
|
|
81
69
|
<td
|
|
82
70
|
data-slot="table-cell"
|
|
83
71
|
className={cn(
|
|
84
72
|
"p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",
|
|
73
|
+
"first:rounded-l-full first:pl-4 last:rounded-r-full last:pr-4 bg-neutral-alpha-2",
|
|
85
74
|
className
|
|
86
75
|
)}
|
|
87
76
|
{...props}
|
|
88
77
|
/>
|
|
89
|
-
)
|
|
78
|
+
);
|
|
90
79
|
}
|
|
91
80
|
|
|
92
|
-
function TableCaption({
|
|
93
|
-
className,
|
|
94
|
-
...props
|
|
95
|
-
}: React.ComponentProps<"caption">) {
|
|
81
|
+
function TableCaption({ className, ...props }: React.ComponentProps<"caption">) {
|
|
96
82
|
return (
|
|
97
83
|
<caption
|
|
98
84
|
data-slot="table-caption"
|
|
99
85
|
className={cn("text-muted-foreground mt-4 text-sm", className)}
|
|
100
86
|
{...props}
|
|
101
87
|
/>
|
|
102
|
-
)
|
|
88
|
+
);
|
|
103
89
|
}
|
|
104
90
|
|
|
105
91
|
export {
|
|
@@ -109,6 +95,6 @@ export {
|
|
|
109
95
|
TableFooter,
|
|
110
96
|
TableHead,
|
|
111
97
|
TableRow,
|
|
112
|
-
|
|
98
|
+
ShadTableCell,
|
|
113
99
|
TableCaption,
|
|
114
|
-
}
|
|
100
|
+
};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
|
|
2
3
|
import React, { useState } from "react";
|
|
3
4
|
import { cn } from "@/lib/utils";
|
|
4
5
|
|
|
@@ -69,7 +70,7 @@ export function ManagedTable<T>({
|
|
|
69
70
|
<th
|
|
70
71
|
key={column.name}
|
|
71
72
|
className={cn(
|
|
72
|
-
"px-3 py-1 text-left text-xs font-normal
|
|
73
|
+
"text-muted-foreground h-6 px-3 py-1 text-left text-xs font-normal",
|
|
73
74
|
column.comparator && "cursor-pointer select-none"
|
|
74
75
|
)}
|
|
75
76
|
onClick={() => column.comparator && handleSort(column.name)}
|
|
@@ -102,7 +103,7 @@ interface TableCellProps extends React.TdHTMLAttributes<HTMLTableCellElement> {
|
|
|
102
103
|
|
|
103
104
|
export function TableCell({ children, className, ...props }: TableCellProps) {
|
|
104
105
|
return (
|
|
105
|
-
<td className={cn("p-2 align-middle
|
|
106
|
+
<td className={cn("text-foreground p-2 align-middle", className)} {...props}>
|
|
106
107
|
{children}
|
|
107
108
|
</td>
|
|
108
109
|
);
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
|
|
3
|
+
import { cn } from "@/lib/utils";
|
|
4
|
+
|
|
5
|
+
function Textarea({ className, ...props }: React.ComponentProps<"textarea">) {
|
|
6
|
+
return (
|
|
7
|
+
<textarea
|
|
8
|
+
data-slot="control"
|
|
9
|
+
className={cn(
|
|
10
|
+
"bg-neutral-alpha-2 placeholder:text-muted-foreground flex field-sizing-content min-h-16 w-full rounded-lg border border-none px-4 py-2.5 text-base md:text-sm",
|
|
11
|
+
"focus-visible:border-ring focus-visible:ring-ring/50 transition-[color,box-shadow] outline-none focus-visible:ring-2",
|
|
12
|
+
"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
|
|
13
|
+
"disabled:cursor-not-allowed disabled:opacity-50",
|
|
14
|
+
"caret-primary shadow",
|
|
15
|
+
className
|
|
16
|
+
)}
|
|
17
|
+
{...props}
|
|
18
|
+
/>
|
|
19
|
+
);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export { Textarea };
|
|
@@ -30,25 +30,29 @@ function TooltipTrigger({ ...props }: React.ComponentProps<typeof TooltipPrimiti
|
|
|
30
30
|
|
|
31
31
|
function TooltipContent({
|
|
32
32
|
className,
|
|
33
|
-
sideOffset =
|
|
33
|
+
sideOffset = 2,
|
|
34
|
+
gradient,
|
|
34
35
|
children,
|
|
36
|
+
container = document.querySelector(".turtle-widget-root") ?? document.body,
|
|
35
37
|
...props
|
|
36
|
-
}: React.ComponentProps<typeof TooltipPrimitive.Content>
|
|
38
|
+
}: React.ComponentProps<typeof TooltipPrimitive.Content> & {
|
|
39
|
+
gradient?: "primary" | "white";
|
|
40
|
+
container?: HTMLElement;
|
|
41
|
+
}) {
|
|
37
42
|
return (
|
|
38
|
-
<TooltipPrimitive.Portal
|
|
39
|
-
container={document.querySelectorAll(".turtle-widget-root")[0] ?? undefined}
|
|
40
|
-
>
|
|
43
|
+
<TooltipPrimitive.Portal container={container}>
|
|
41
44
|
<TooltipPrimitive.Content
|
|
42
45
|
data-slot="tooltip-content"
|
|
43
46
|
sideOffset={sideOffset}
|
|
44
47
|
className={cn(
|
|
45
|
-
"
|
|
48
|
+
"animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 bg-neutral-alpha-10 border-border z-50 origin-(--radix-tooltip-content-transform-origin) rounded-lg border p-2 backdrop-blur-lg transition-all",
|
|
49
|
+
gradient === "primary" && "border-gradient-primary",
|
|
50
|
+
gradient === "white" && "border-gradient-white",
|
|
46
51
|
className
|
|
47
52
|
)}
|
|
48
53
|
{...props}
|
|
49
54
|
>
|
|
50
55
|
{children}
|
|
51
|
-
<TooltipPrimitive.Arrow className="bg-primary fill-primary z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]" />
|
|
52
56
|
</TooltipPrimitive.Content>
|
|
53
57
|
</TooltipPrimitive.Portal>
|
|
54
58
|
);
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { useState, useEffect } from "react";
|
|
4
|
+
|
|
5
|
+
interface UseIsMobileReturn {
|
|
6
|
+
isMobile: boolean;
|
|
7
|
+
isLoading: boolean;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export const useIsMobile = (): UseIsMobileReturn => {
|
|
11
|
+
const [isMobile, setIsMobile] = useState(false);
|
|
12
|
+
const [isLoading, setIsLoading] = useState(true);
|
|
13
|
+
|
|
14
|
+
useEffect(() => {
|
|
15
|
+
const checkIsMobile = () => {
|
|
16
|
+
// Check using media query
|
|
17
|
+
const mediaQuery = window.matchMedia("(max-width: 768px)");
|
|
18
|
+
|
|
19
|
+
// Check using user agent (additional detection)
|
|
20
|
+
const userAgent = navigator.userAgent.toLowerCase();
|
|
21
|
+
const mobileKeywords = [
|
|
22
|
+
"android",
|
|
23
|
+
"webos",
|
|
24
|
+
"iphone",
|
|
25
|
+
"ipad",
|
|
26
|
+
"ipod",
|
|
27
|
+
"blackberry",
|
|
28
|
+
"windows phone",
|
|
29
|
+
"mobile",
|
|
30
|
+
];
|
|
31
|
+
|
|
32
|
+
const isMobileUA = mobileKeywords.some((keyword) => userAgent.includes(keyword));
|
|
33
|
+
|
|
34
|
+
// Combine both checks - prioritize media query but consider user agent
|
|
35
|
+
const isMobileDevice = mediaQuery.matches || (isMobileUA && window.innerWidth <= 768);
|
|
36
|
+
|
|
37
|
+
setIsMobile(isMobileDevice);
|
|
38
|
+
setIsLoading(false);
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
// Initial check
|
|
42
|
+
checkIsMobile();
|
|
43
|
+
|
|
44
|
+
// Listen for media query changes
|
|
45
|
+
const mediaQuery = window.matchMedia("(max-width: 768px)");
|
|
46
|
+
const handleChange = () => checkIsMobile();
|
|
47
|
+
|
|
48
|
+
if (mediaQuery.addEventListener) {
|
|
49
|
+
mediaQuery.addEventListener("change", handleChange);
|
|
50
|
+
} else {
|
|
51
|
+
// Fallback for older browsers
|
|
52
|
+
mediaQuery.addListener(handleChange);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// Listen for window resize
|
|
56
|
+
window.addEventListener("resize", checkIsMobile);
|
|
57
|
+
|
|
58
|
+
return () => {
|
|
59
|
+
if (mediaQuery.removeEventListener) {
|
|
60
|
+
mediaQuery.removeEventListener("change", handleChange);
|
|
61
|
+
} else {
|
|
62
|
+
mediaQuery.removeListener(handleChange);
|
|
63
|
+
}
|
|
64
|
+
window.removeEventListener("resize", checkIsMobile);
|
|
65
|
+
};
|
|
66
|
+
}, []);
|
|
67
|
+
|
|
68
|
+
return {
|
|
69
|
+
isMobile,
|
|
70
|
+
isLoading,
|
|
71
|
+
};
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
export default useIsMobile;
|
package/src/index.ts
CHANGED
package/src/styles/globals.css
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Turtle Design System - Global Styles
|
|
3
|
-
*
|
|
3
|
+
*
|
|
4
4
|
* This is the main entry point for the Turtle Design System.
|
|
5
5
|
* It imports our complete token-based theming architecture and
|
|
6
6
|
* provides base styles for all components.
|
|
@@ -17,16 +17,21 @@
|
|
|
17
17
|
@custom-variant dark (&:is(.dark *));
|
|
18
18
|
|
|
19
19
|
/* ===== TAILWIND THEME INTEGRATION ===== */
|
|
20
|
-
/*
|
|
20
|
+
/*
|
|
21
21
|
* This section maps our semantic variables to Tailwind's color system
|
|
22
22
|
* so we can use classes like bg-background, text-foreground, etc.
|
|
23
23
|
*/
|
|
24
|
-
@theme
|
|
24
|
+
@theme static {
|
|
25
|
+
--default-font-family: "DM Sans", sans-serif;
|
|
26
|
+
|
|
25
27
|
/* Border radius mapping */
|
|
26
|
-
--radius-
|
|
27
|
-
--radius-
|
|
28
|
+
--radius-xs: calc(var(--radius) - 16px);
|
|
29
|
+
--radius-sm: calc(var(--radius) - 8px);
|
|
30
|
+
--radius-md: calc(var(--radius) - 4px);
|
|
28
31
|
--radius-lg: var(--radius);
|
|
29
32
|
--radius-xl: calc(var(--radius) + 4px);
|
|
33
|
+
--radius-2xl: calc(var(--radius) + 8px);
|
|
34
|
+
--radius-full: calc(infinity * 1px);
|
|
30
35
|
--radius-turtle: var(--radius-turtle);
|
|
31
36
|
--radius-info-card: var(--radius-info-card);
|
|
32
37
|
|
|
@@ -47,32 +52,94 @@
|
|
|
47
52
|
--color-accent-foreground: var(--accent-foreground);
|
|
48
53
|
--color-destructive: var(--destructive);
|
|
49
54
|
--color-destructive-foreground: var(--destructive-foreground);
|
|
55
|
+
|
|
50
56
|
--color-border: var(--border);
|
|
51
57
|
--color-input: var(--input);
|
|
52
58
|
--color-ring: var(--ring);
|
|
59
|
+
|
|
60
|
+
--color-sidebar: var(--sidebar);
|
|
61
|
+
--color-sidebar-foreground: var(--sidebar-foreground);
|
|
62
|
+
--color-sidebar-primary: var(--primary);
|
|
63
|
+
--color-sidebar-primary-foreground: var(--primary-foreground);
|
|
64
|
+
--color-sidebar-accent: var(--accent);
|
|
65
|
+
--color-sidebar-accent-foreground: var(--accent-foreground);
|
|
66
|
+
--color-sidebar-border: var(--border);
|
|
67
|
+
--color-sidebar-ring: var(--ring);
|
|
68
|
+
|
|
69
|
+
--color-neutral-alpha-2: var(--color-neutral-alpha-2);
|
|
70
|
+
--color-neutral-alpha-5: var(--color-neutral-alpha-5);
|
|
71
|
+
--color-neutral-alpha-10: var(--color-neutral-alpha-10);
|
|
72
|
+
--color-neutral-alpha-20: var(--color-neutral-alpha-20);
|
|
73
|
+
--color-neutral-alpha-30: var(--color-neutral-alpha-30);
|
|
74
|
+
--color-neutral-alpha-50: var(--color-neutral-alpha-50);
|
|
75
|
+
|
|
76
|
+
--color-primary-alpha-10: var(--color-brand-green-alpha-10);
|
|
77
|
+
--color-primary-alpha-20: var(--color-brand-green-alpha-20);
|
|
78
|
+
--color-primary-alpha-30: var(--color-brand-green-alpha-30);
|
|
79
|
+
--color-primary-alpha-50: var(--color-brand-green-alpha-50);
|
|
80
|
+
|
|
53
81
|
--color-chart-1: var(--chart-1);
|
|
54
82
|
--color-chart-2: var(--chart-2);
|
|
55
83
|
--color-chart-3: var(--chart-3);
|
|
56
84
|
--color-chart-4: var(--chart-4);
|
|
57
85
|
--color-chart-5: var(--chart-5);
|
|
86
|
+
|
|
87
|
+
--border-gradient-white: linear-gradient(
|
|
88
|
+
175deg,
|
|
89
|
+
var(--color-neutral-alpha-50) 0%,
|
|
90
|
+
var(--color-neutral-alpha-5) 40%,
|
|
91
|
+
var(--color-neutral-alpha-2) 62%,
|
|
92
|
+
var(--color-neutral-alpha-20) 100%
|
|
93
|
+
)
|
|
94
|
+
border-box;
|
|
95
|
+
--border-gradient-soft: linear-gradient(
|
|
96
|
+
165deg,
|
|
97
|
+
var(--color-neutral-alpha-20) 0%,
|
|
98
|
+
var(--color-neutral-alpha-2) 40%,
|
|
99
|
+
var(--color-neutral-alpha-2) 62%,
|
|
100
|
+
var(--color-neutral-alpha-5) 100%
|
|
101
|
+
)
|
|
102
|
+
border-box;
|
|
103
|
+
--border-gradient-primary: linear-gradient(
|
|
104
|
+
175deg,
|
|
105
|
+
var(--color-primary-alpha-50) 0%,
|
|
106
|
+
var(--color-primary-alpha-20) 40%,
|
|
107
|
+
var(--color-primary-alpha-10) 62%,
|
|
108
|
+
var(--color-primary-alpha-30) 100%
|
|
109
|
+
)
|
|
110
|
+
border-box;
|
|
111
|
+
--border-gradient-accent: linear-gradient(
|
|
112
|
+
to bottom,
|
|
113
|
+
var(--color-primary) 0%,
|
|
114
|
+
var(--color-primary-alpha-50) 30%,
|
|
115
|
+
var(--color-primary-alpha-20) 70%,
|
|
116
|
+
var(--color-primary-alpha-10) 100%
|
|
117
|
+
)
|
|
118
|
+
border-box;
|
|
58
119
|
}
|
|
59
120
|
|
|
60
|
-
|
|
61
|
-
@
|
|
62
|
-
/* Universal border and outline styles */
|
|
63
|
-
* {
|
|
64
|
-
@apply border-border outline-ring/50;
|
|
65
|
-
}
|
|
121
|
+
@utility border-gradient-* {
|
|
122
|
+
@apply relative border border-transparent;
|
|
66
123
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
124
|
+
&::before {
|
|
125
|
+
content: "";
|
|
126
|
+
@apply pointer-events-none absolute -inset-px border border-transparent;
|
|
127
|
+
border-radius: inherit; /* match rounded-* from parent */
|
|
128
|
+
background: --value(--border-gradient-*); /* gradient from utility */
|
|
129
|
+
-webkit-mask:
|
|
130
|
+
linear-gradient(#fff 0 0) padding-box,
|
|
131
|
+
linear-gradient(#fff 0 0) border-box;
|
|
132
|
+
-webkit-mask-composite: xor;
|
|
133
|
+
mask:
|
|
134
|
+
linear-gradient(#fff 0 0) padding-box,
|
|
135
|
+
linear-gradient(#fff 0 0) border-box;
|
|
136
|
+
mask-composite: exclude;
|
|
71
137
|
}
|
|
138
|
+
}
|
|
72
139
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
@apply
|
|
140
|
+
@layer base {
|
|
141
|
+
* {
|
|
142
|
+
@apply selection:text-primary-foreground selection:bg-primary;
|
|
76
143
|
}
|
|
77
144
|
}
|
|
78
145
|
|
|
@@ -89,11 +156,11 @@
|
|
|
89
156
|
}
|
|
90
157
|
|
|
91
158
|
.managed-table thead tr th {
|
|
92
|
-
@apply text-
|
|
159
|
+
@apply text-muted-foreground h-6 px-3 py-1 text-xs font-normal;
|
|
93
160
|
}
|
|
94
161
|
|
|
95
162
|
.managed-table tbody tr > td {
|
|
96
|
-
@apply
|
|
163
|
+
@apply bg-muted/5 h-[38px] font-normal lg:py-1;
|
|
97
164
|
}
|
|
98
165
|
|
|
99
166
|
.managed-table tbody tr > td:first-child {
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Turtle Design System - Semantic Theme Variables
|
|
3
|
-
*
|
|
3
|
+
*
|
|
4
4
|
* This file maps our core design tokens to the semantic variables
|
|
5
5
|
* expected by shadcn/ui components. This is the bridge between our
|
|
6
6
|
* brand identity and the component API.
|
|
7
|
-
*
|
|
7
|
+
*
|
|
8
8
|
* All shadcn/ui components use these semantic variables, making them
|
|
9
9
|
* fully themeable while maintaining our brand consistency.
|
|
10
10
|
*/
|
|
@@ -33,11 +33,11 @@
|
|
|
33
33
|
--primary-foreground: var(--color-brand-black); /* #141514 - Black text on green */
|
|
34
34
|
|
|
35
35
|
/* Secondary colors */
|
|
36
|
-
--secondary: var(--color-neutral-
|
|
36
|
+
--secondary: var(--color-neutral-base-800); /* #262626 - Light overlay on dark */
|
|
37
37
|
--secondary-foreground: var(--color-brand-white); /* #F9F9F9 - Light text */
|
|
38
38
|
|
|
39
39
|
/* Muted colors */
|
|
40
|
-
--muted: var(--color-neutral-
|
|
40
|
+
--muted: var(--color-neutral-base-850); /* #191A19 - Subtle overlay */
|
|
41
41
|
--muted-foreground: var(--color-neutral-alpha-50); /* #FFFFFF80 - Muted text */
|
|
42
42
|
|
|
43
43
|
/* Accent colors */
|
|
@@ -53,8 +53,11 @@
|
|
|
53
53
|
--input: var(--color-neutral-alpha-2); /* #F9F9F905 - Subtle input background */
|
|
54
54
|
--ring: var(--color-brand-green); /* #73F36C - Focus ring */
|
|
55
55
|
|
|
56
|
+
--sidebar: var(--color-neutral-base-850);
|
|
57
|
+
--sidebar-foreground: var(--color-brand-white);
|
|
58
|
+
|
|
56
59
|
/* ===== SEMANTIC SPACING MAPPING ===== */
|
|
57
|
-
--radius: var(--radius-
|
|
60
|
+
--radius: var(--radius-turtle); /* 16px - Default border radius */
|
|
58
61
|
|
|
59
62
|
/* ===== CHART COLORS (FOR DATA VISUALIZATION) ===== */
|
|
60
63
|
--chart-1: var(--color-brand-green); /* Primary chart color */
|
|
@@ -104,4 +107,7 @@
|
|
|
104
107
|
--border: var(--color-neutral-alpha-dark-10); /* #1415141A - Dark borders on light */
|
|
105
108
|
--input: var(--color-neutral-alpha-2); /* #F9F9F905 - Subtle input background */
|
|
106
109
|
--ring: var(--color-brand-green); /* #73F36C - Same focus ring */
|
|
110
|
+
|
|
111
|
+
--sidebar: var(--color-neutral-base-850);
|
|
112
|
+
--sidebar-foreground: var(--color-brand-white);
|
|
107
113
|
}
|