@betfin/ui 0.1.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/dist/chunk-3CAXHUAL.js +23 -0
- package/dist/chunk-3CAXHUAL.js.map +1 -0
- package/dist/chunk-3YCD2QLS.js +113 -0
- package/dist/chunk-3YCD2QLS.js.map +1 -0
- package/dist/chunk-5CXIFF6J.js +46 -0
- package/dist/chunk-5CXIFF6J.js.map +1 -0
- package/dist/chunk-EP6DYU4N.js +26 -0
- package/dist/chunk-EP6DYU4N.js.map +1 -0
- package/dist/chunk-FHYW2QBY.js +21 -0
- package/dist/chunk-FHYW2QBY.js.map +1 -0
- package/dist/chunk-HRFMTZ55.js +49 -0
- package/dist/chunk-HRFMTZ55.js.map +1 -0
- package/dist/chunk-ILNHKDYA.js +107 -0
- package/dist/chunk-ILNHKDYA.js.map +1 -0
- package/dist/chunk-JTVU6ANA.js +37 -0
- package/dist/chunk-JTVU6ANA.js.map +1 -0
- package/dist/chunk-K7JWN6NH.js +21 -0
- package/dist/chunk-K7JWN6NH.js.map +1 -0
- package/dist/chunk-QZIKXMHP.js +131 -0
- package/dist/chunk-QZIKXMHP.js.map +1 -0
- package/dist/chunk-SSC2M625.js +24 -0
- package/dist/chunk-SSC2M625.js.map +1 -0
- package/dist/chunk-TLULUIYC.js +14 -0
- package/dist/chunk-TLULUIYC.js.map +1 -0
- package/dist/chunk-VJ6P5FFS.js +90 -0
- package/dist/chunk-VJ6P5FFS.js.map +1 -0
- package/dist/chunk-Y2TKUANL.js +11 -0
- package/dist/chunk-Y2TKUANL.js.map +1 -0
- package/dist/components/accordion.d.ts +6 -0
- package/dist/components/accordion.js +59 -0
- package/dist/components/accordion.js.map +1 -0
- package/dist/components/alert-dialog.d.ts +18 -0
- package/dist/components/alert-dialog.js +144 -0
- package/dist/components/alert-dialog.js.map +1 -0
- package/dist/components/app-header.d.ts +19 -0
- package/dist/components/app-header.js +17 -0
- package/dist/components/app-header.js.map +1 -0
- package/dist/components/badge.d.ts +7 -0
- package/dist/components/badge.js +47 -0
- package/dist/components/badge.js.map +1 -0
- package/dist/components/bet-value.d.ts +49 -0
- package/dist/components/bet-value.js +12 -0
- package/dist/components/bet-value.js.map +1 -0
- package/dist/components/breadcrumb.d.ts +10 -0
- package/dist/components/breadcrumb.js +65 -0
- package/dist/components/breadcrumb.js.map +1 -0
- package/dist/components/button.d.ts +8 -0
- package/dist/components/button.js +10 -0
- package/dist/components/button.js.map +1 -0
- package/dist/components/calendar.d.ts +10 -0
- package/dist/components/calendar.js +145 -0
- package/dist/components/calendar.js.map +1 -0
- package/dist/components/carousel.d.ts +28 -0
- package/dist/components/carousel.js +153 -0
- package/dist/components/carousel.js.map +1 -0
- package/dist/components/chart.d.ts +39 -0
- package/dist/components/chart.js +219 -0
- package/dist/components/chart.js.map +1 -0
- package/dist/components/checkbox.d.ts +3 -0
- package/dist/components/checkbox.js +26 -0
- package/dist/components/checkbox.js.map +1 -0
- package/dist/components/collapsible.d.ts +5 -0
- package/dist/components/collapsible.js +20 -0
- package/dist/components/collapsible.js.map +1 -0
- package/dist/components/command.d.ts +19 -0
- package/dist/components/command.js +130 -0
- package/dist/components/command.js.map +1 -0
- package/dist/components/context-menu.d.ts +29 -0
- package/dist/components/context-menu.js +186 -0
- package/dist/components/context-menu.js.map +1 -0
- package/dist/components/dialog.d.ts +17 -0
- package/dist/components/dialog.js +28 -0
- package/dist/components/dialog.js.map +1 -0
- package/dist/components/drawer.d.ts +16 -0
- package/dist/components/drawer.js +164 -0
- package/dist/components/drawer.js.map +1 -0
- package/dist/components/dropdown-menu.d.ts +29 -0
- package/dist/components/dropdown-menu.js +207 -0
- package/dist/components/dropdown-menu.js.map +1 -0
- package/dist/components/input-group.d.ts +18 -0
- package/dist/components/input-group.js +22 -0
- package/dist/components/input-group.js.map +1 -0
- package/dist/components/input.d.ts +3 -0
- package/dist/components/input.js +8 -0
- package/dist/components/input.js.map +1 -0
- package/dist/components/loading.d.ts +9 -0
- package/dist/components/loading.js +26 -0
- package/dist/components/loading.js.map +1 -0
- package/dist/components/member-profile.d.ts +79 -0
- package/dist/components/member-profile.js +342 -0
- package/dist/components/member-profile.js.map +1 -0
- package/dist/components/popover.d.ts +9 -0
- package/dist/components/popover.js +52 -0
- package/dist/components/popover.js.map +1 -0
- package/dist/components/progress.d.ts +7 -0
- package/dist/components/progress.js +40 -0
- package/dist/components/progress.js.map +1 -0
- package/dist/components/radio-group.d.ts +5 -0
- package/dist/components/radio-group.js +31 -0
- package/dist/components/radio-group.js.map +1 -0
- package/dist/components/scroll-area.d.ts +4 -0
- package/dist/components/scroll-area.js +42 -0
- package/dist/components/scroll-area.js.map +1 -0
- package/dist/components/select.d.ts +15 -0
- package/dist/components/select.js +136 -0
- package/dist/components/select.js.map +1 -0
- package/dist/components/separator.d.ts +3 -0
- package/dist/components/separator.js +8 -0
- package/dist/components/separator.js.map +1 -0
- package/dist/components/sheet.d.ts +14 -0
- package/dist/components/sheet.js +23 -0
- package/dist/components/sheet.js.map +1 -0
- package/dist/components/sidebar.d.ts +63 -0
- package/dist/components/sidebar.js +536 -0
- package/dist/components/sidebar.js.map +1 -0
- package/dist/components/skeleton.d.ts +2 -0
- package/dist/components/skeleton.js +8 -0
- package/dist/components/skeleton.js.map +1 -0
- package/dist/components/slider.d.ts +3 -0
- package/dist/components/slider.js +45 -0
- package/dist/components/slider.js.map +1 -0
- package/dist/components/sonner.d.ts +3 -0
- package/dist/components/sonner.js +39 -0
- package/dist/components/sonner.js.map +1 -0
- package/dist/components/switch.d.ts +5 -0
- package/dist/components/switch.js +36 -0
- package/dist/components/switch.js.map +1 -0
- package/dist/components/table.d.ts +12 -0
- package/dist/components/table.js +56 -0
- package/dist/components/table.js.map +1 -0
- package/dist/components/tabs.d.ts +10 -0
- package/dist/components/tabs.js +63 -0
- package/dist/components/tabs.js.map +1 -0
- package/dist/components/textarea.d.ts +3 -0
- package/dist/components/textarea.js +8 -0
- package/dist/components/textarea.js.map +1 -0
- package/dist/components/toggle-group.d.ts +11 -0
- package/dist/components/toggle-group.js +80 -0
- package/dist/components/toggle-group.js.map +1 -0
- package/dist/components/toggle.d.ts +8 -0
- package/dist/components/toggle.js +11 -0
- package/dist/components/toggle.js.map +1 -0
- package/dist/components/tooltip.d.ts +6 -0
- package/dist/components/tooltip.js +14 -0
- package/dist/components/tooltip.js.map +1 -0
- package/dist/hooks/use-mobile.d.ts +1 -0
- package/dist/hooks/use-mobile.js +7 -0
- package/dist/hooks/use-mobile.js.map +1 -0
- package/dist/lib/date.d.ts +14 -0
- package/dist/lib/date.js +24 -0
- package/dist/lib/date.js.map +1 -0
- package/dist/lib/format.d.ts +16 -0
- package/dist/lib/format.js +9 -0
- package/dist/lib/format.js.map +1 -0
- package/dist/lib/utils.d.ts +2 -0
- package/dist/lib/utils.js +7 -0
- package/dist/lib/utils.js.map +1 -0
- package/package.json +71 -0
- package/src/styles/globals.css +151 -0
- package/src/styles/theme.css +144 -0
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import {
|
|
2
|
+
cn
|
|
3
|
+
} from "../chunk-Y2TKUANL.js";
|
|
4
|
+
|
|
5
|
+
// src/components/dropdown-menu.tsx
|
|
6
|
+
import { Menu as MenuPrimitive } from "@base-ui/react/menu";
|
|
7
|
+
import { CheckIcon, ChevronRightIcon } from "lucide-react";
|
|
8
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
9
|
+
function DropdownMenu({ ...props }) {
|
|
10
|
+
return /* @__PURE__ */ jsx(MenuPrimitive.Root, { "data-slot": "dropdown-menu", ...props });
|
|
11
|
+
}
|
|
12
|
+
function DropdownMenuPortal({ ...props }) {
|
|
13
|
+
return /* @__PURE__ */ jsx(MenuPrimitive.Portal, { "data-slot": "dropdown-menu-portal", ...props });
|
|
14
|
+
}
|
|
15
|
+
function DropdownMenuTrigger({ ...props }) {
|
|
16
|
+
return /* @__PURE__ */ jsx(MenuPrimitive.Trigger, { "data-slot": "dropdown-menu-trigger", ...props });
|
|
17
|
+
}
|
|
18
|
+
function DropdownMenuContent({
|
|
19
|
+
align = "start",
|
|
20
|
+
alignOffset = 0,
|
|
21
|
+
side = "bottom",
|
|
22
|
+
sideOffset = 4,
|
|
23
|
+
className,
|
|
24
|
+
...props
|
|
25
|
+
}) {
|
|
26
|
+
return /* @__PURE__ */ jsx(MenuPrimitive.Portal, { children: /* @__PURE__ */ jsx(MenuPrimitive.Positioner, { className: "isolate z-50 outline-none", align, alignOffset, side, sideOffset, children: /* @__PURE__ */ jsx(
|
|
27
|
+
MenuPrimitive.Popup,
|
|
28
|
+
{
|
|
29
|
+
"data-slot": "dropdown-menu-content",
|
|
30
|
+
className: cn(
|
|
31
|
+
"data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-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 data-open:fade-in-0 data-open:zoom-in-95 data-closed:fade-out-0 data-closed:zoom-out-95 z-50 max-h-(--available-height) w-(--anchor-width) min-w-32 origin-(--transform-origin) overflow-y-auto overflow-x-hidden rounded-lg bg-popover p-1 text-popover-foreground shadow-md outline-none ring-1 ring-foreground/10 duration-100 data-closed:animate-out data-open:animate-in data-closed:overflow-hidden",
|
|
32
|
+
className
|
|
33
|
+
),
|
|
34
|
+
...props
|
|
35
|
+
}
|
|
36
|
+
) }) });
|
|
37
|
+
}
|
|
38
|
+
function DropdownMenuGroup({ ...props }) {
|
|
39
|
+
return /* @__PURE__ */ jsx(MenuPrimitive.Group, { "data-slot": "dropdown-menu-group", ...props });
|
|
40
|
+
}
|
|
41
|
+
function DropdownMenuLabel({
|
|
42
|
+
className,
|
|
43
|
+
inset,
|
|
44
|
+
...props
|
|
45
|
+
}) {
|
|
46
|
+
return /* @__PURE__ */ jsx(
|
|
47
|
+
MenuPrimitive.GroupLabel,
|
|
48
|
+
{
|
|
49
|
+
"data-slot": "dropdown-menu-label",
|
|
50
|
+
"data-inset": inset,
|
|
51
|
+
className: cn("px-1.5 py-1 font-medium text-muted-foreground text-xs data-inset:pl-7", className),
|
|
52
|
+
...props
|
|
53
|
+
}
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
function DropdownMenuItem({
|
|
57
|
+
className,
|
|
58
|
+
inset,
|
|
59
|
+
variant = "default",
|
|
60
|
+
...props
|
|
61
|
+
}) {
|
|
62
|
+
return /* @__PURE__ */ jsx(
|
|
63
|
+
MenuPrimitive.Item,
|
|
64
|
+
{
|
|
65
|
+
"data-slot": "dropdown-menu-item",
|
|
66
|
+
"data-inset": inset,
|
|
67
|
+
"data-variant": variant,
|
|
68
|
+
className: cn(
|
|
69
|
+
"group/dropdown-menu-item relative flex cursor-default select-none items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-disabled:pointer-events-none data-inset:pl-7 data-[variant=destructive]:text-destructive data-disabled:opacity-50 data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0 data-[variant=destructive]:*:[svg]:text-destructive",
|
|
70
|
+
className
|
|
71
|
+
),
|
|
72
|
+
...props
|
|
73
|
+
}
|
|
74
|
+
);
|
|
75
|
+
}
|
|
76
|
+
function DropdownMenuSub({ ...props }) {
|
|
77
|
+
return /* @__PURE__ */ jsx(MenuPrimitive.SubmenuRoot, { "data-slot": "dropdown-menu-sub", ...props });
|
|
78
|
+
}
|
|
79
|
+
function DropdownMenuSubTrigger({
|
|
80
|
+
className,
|
|
81
|
+
inset,
|
|
82
|
+
children,
|
|
83
|
+
...props
|
|
84
|
+
}) {
|
|
85
|
+
return /* @__PURE__ */ jsxs(
|
|
86
|
+
MenuPrimitive.SubmenuTrigger,
|
|
87
|
+
{
|
|
88
|
+
"data-slot": "dropdown-menu-sub-trigger",
|
|
89
|
+
"data-inset": inset,
|
|
90
|
+
className: cn(
|
|
91
|
+
"flex cursor-default select-none items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-open:bg-accent data-popup-open:bg-accent data-inset:pl-7 data-open:text-accent-foreground data-popup-open:text-accent-foreground [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0",
|
|
92
|
+
className
|
|
93
|
+
),
|
|
94
|
+
...props,
|
|
95
|
+
children: [
|
|
96
|
+
children,
|
|
97
|
+
/* @__PURE__ */ jsx(ChevronRightIcon, { className: "ml-auto" })
|
|
98
|
+
]
|
|
99
|
+
}
|
|
100
|
+
);
|
|
101
|
+
}
|
|
102
|
+
function DropdownMenuSubContent({
|
|
103
|
+
align = "start",
|
|
104
|
+
alignOffset = -3,
|
|
105
|
+
side = "right",
|
|
106
|
+
sideOffset = 0,
|
|
107
|
+
className,
|
|
108
|
+
...props
|
|
109
|
+
}) {
|
|
110
|
+
return /* @__PURE__ */ jsx(
|
|
111
|
+
DropdownMenuContent,
|
|
112
|
+
{
|
|
113
|
+
"data-slot": "dropdown-menu-sub-content",
|
|
114
|
+
className: cn(
|
|
115
|
+
"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 data-open:fade-in-0 data-open:zoom-in-95 data-closed:fade-out-0 data-closed:zoom-out-95 w-auto min-w-[96px] rounded-lg bg-popover p-1 text-popover-foreground shadow-lg ring-1 ring-foreground/10 duration-100 data-closed:animate-out data-open:animate-in",
|
|
116
|
+
className
|
|
117
|
+
),
|
|
118
|
+
align,
|
|
119
|
+
alignOffset,
|
|
120
|
+
side,
|
|
121
|
+
sideOffset,
|
|
122
|
+
...props
|
|
123
|
+
}
|
|
124
|
+
);
|
|
125
|
+
}
|
|
126
|
+
function DropdownMenuCheckboxItem({
|
|
127
|
+
className,
|
|
128
|
+
children,
|
|
129
|
+
checked,
|
|
130
|
+
inset,
|
|
131
|
+
...props
|
|
132
|
+
}) {
|
|
133
|
+
return /* @__PURE__ */ jsxs(
|
|
134
|
+
MenuPrimitive.CheckboxItem,
|
|
135
|
+
{
|
|
136
|
+
"data-slot": "dropdown-menu-checkbox-item",
|
|
137
|
+
"data-inset": inset,
|
|
138
|
+
className: cn(
|
|
139
|
+
"relative flex cursor-default select-none items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-disabled:pointer-events-none data-inset:pl-7 data-disabled:opacity-50 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0",
|
|
140
|
+
className
|
|
141
|
+
),
|
|
142
|
+
checked,
|
|
143
|
+
...props,
|
|
144
|
+
children: [
|
|
145
|
+
/* @__PURE__ */ jsx("span", { className: "pointer-events-none absolute right-2 flex items-center justify-center", "data-slot": "dropdown-menu-checkbox-item-indicator", children: /* @__PURE__ */ jsx(MenuPrimitive.CheckboxItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, {}) }) }),
|
|
146
|
+
children
|
|
147
|
+
]
|
|
148
|
+
}
|
|
149
|
+
);
|
|
150
|
+
}
|
|
151
|
+
function DropdownMenuRadioGroup({ ...props }) {
|
|
152
|
+
return /* @__PURE__ */ jsx(MenuPrimitive.RadioGroup, { "data-slot": "dropdown-menu-radio-group", ...props });
|
|
153
|
+
}
|
|
154
|
+
function DropdownMenuRadioItem({
|
|
155
|
+
className,
|
|
156
|
+
children,
|
|
157
|
+
inset,
|
|
158
|
+
...props
|
|
159
|
+
}) {
|
|
160
|
+
return /* @__PURE__ */ jsxs(
|
|
161
|
+
MenuPrimitive.RadioItem,
|
|
162
|
+
{
|
|
163
|
+
"data-slot": "dropdown-menu-radio-item",
|
|
164
|
+
"data-inset": inset,
|
|
165
|
+
className: cn(
|
|
166
|
+
"relative flex cursor-default select-none items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-disabled:pointer-events-none data-inset:pl-7 data-disabled:opacity-50 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0",
|
|
167
|
+
className
|
|
168
|
+
),
|
|
169
|
+
...props,
|
|
170
|
+
children: [
|
|
171
|
+
/* @__PURE__ */ jsx("span", { className: "pointer-events-none absolute right-2 flex items-center justify-center", "data-slot": "dropdown-menu-radio-item-indicator", children: /* @__PURE__ */ jsx(MenuPrimitive.RadioItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, {}) }) }),
|
|
172
|
+
children
|
|
173
|
+
]
|
|
174
|
+
}
|
|
175
|
+
);
|
|
176
|
+
}
|
|
177
|
+
function DropdownMenuSeparator({ className, ...props }) {
|
|
178
|
+
return /* @__PURE__ */ jsx(MenuPrimitive.Separator, { "data-slot": "dropdown-menu-separator", className: cn("-mx-1 my-1 h-px bg-border", className), ...props });
|
|
179
|
+
}
|
|
180
|
+
function DropdownMenuShortcut({ className, ...props }) {
|
|
181
|
+
return /* @__PURE__ */ jsx(
|
|
182
|
+
"span",
|
|
183
|
+
{
|
|
184
|
+
"data-slot": "dropdown-menu-shortcut",
|
|
185
|
+
className: cn("ml-auto text-muted-foreground text-xs tracking-widest group-focus/dropdown-menu-item:text-accent-foreground", className),
|
|
186
|
+
...props
|
|
187
|
+
}
|
|
188
|
+
);
|
|
189
|
+
}
|
|
190
|
+
export {
|
|
191
|
+
DropdownMenu,
|
|
192
|
+
DropdownMenuCheckboxItem,
|
|
193
|
+
DropdownMenuContent,
|
|
194
|
+
DropdownMenuGroup,
|
|
195
|
+
DropdownMenuItem,
|
|
196
|
+
DropdownMenuLabel,
|
|
197
|
+
DropdownMenuPortal,
|
|
198
|
+
DropdownMenuRadioGroup,
|
|
199
|
+
DropdownMenuRadioItem,
|
|
200
|
+
DropdownMenuSeparator,
|
|
201
|
+
DropdownMenuShortcut,
|
|
202
|
+
DropdownMenuSub,
|
|
203
|
+
DropdownMenuSubContent,
|
|
204
|
+
DropdownMenuSubTrigger,
|
|
205
|
+
DropdownMenuTrigger
|
|
206
|
+
};
|
|
207
|
+
//# sourceMappingURL=dropdown-menu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/components/dropdown-menu.tsx"],"sourcesContent":["import { Menu as MenuPrimitive } from '@base-ui/react/menu';\nimport { cn } from '@betfin/ui/lib/utils';\nimport { CheckIcon, ChevronRightIcon } from 'lucide-react';\nimport type * as React from 'react';\n\nfunction DropdownMenu({ ...props }: MenuPrimitive.Root.Props) {\n\treturn <MenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />;\n}\n\nfunction DropdownMenuPortal({ ...props }: MenuPrimitive.Portal.Props) {\n\treturn <MenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />;\n}\n\nfunction DropdownMenuTrigger({ ...props }: MenuPrimitive.Trigger.Props) {\n\treturn <MenuPrimitive.Trigger data-slot=\"dropdown-menu-trigger\" {...props} />;\n}\n\nfunction DropdownMenuContent({\n\talign = 'start',\n\talignOffset = 0,\n\tside = 'bottom',\n\tsideOffset = 4,\n\tclassName,\n\t...props\n}: MenuPrimitive.Popup.Props & Pick<MenuPrimitive.Positioner.Props, 'align' | 'alignOffset' | 'side' | 'sideOffset'>) {\n\treturn (\n\t\t<MenuPrimitive.Portal>\n\t\t\t<MenuPrimitive.Positioner className=\"isolate z-50 outline-none\" align={align} alignOffset={alignOffset} side={side} sideOffset={sideOffset}>\n\t\t\t\t<MenuPrimitive.Popup\n\t\t\t\t\tdata-slot=\"dropdown-menu-content\"\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-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 data-open:fade-in-0 data-open:zoom-in-95 data-closed:fade-out-0 data-closed:zoom-out-95 z-50 max-h-(--available-height) w-(--anchor-width) min-w-32 origin-(--transform-origin) overflow-y-auto overflow-x-hidden rounded-lg bg-popover p-1 text-popover-foreground shadow-md outline-none ring-1 ring-foreground/10 duration-100 data-closed:animate-out data-open:animate-in data-closed:overflow-hidden',\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\t{...props}\n\t\t\t\t/>\n\t\t\t</MenuPrimitive.Positioner>\n\t\t</MenuPrimitive.Portal>\n\t);\n}\n\nfunction DropdownMenuGroup({ ...props }: MenuPrimitive.Group.Props) {\n\treturn <MenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />;\n}\n\nfunction DropdownMenuLabel({\n\tclassName,\n\tinset,\n\t...props\n}: MenuPrimitive.GroupLabel.Props & {\n\tinset?: boolean;\n}) {\n\treturn (\n\t\t<MenuPrimitive.GroupLabel\n\t\t\tdata-slot=\"dropdown-menu-label\"\n\t\t\tdata-inset={inset}\n\t\t\tclassName={cn('px-1.5 py-1 font-medium text-muted-foreground text-xs data-inset:pl-7', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction DropdownMenuItem({\n\tclassName,\n\tinset,\n\tvariant = 'default',\n\t...props\n}: MenuPrimitive.Item.Props & {\n\tinset?: boolean;\n\tvariant?: 'default' | 'destructive';\n}) {\n\treturn (\n\t\t<MenuPrimitive.Item\n\t\t\tdata-slot=\"dropdown-menu-item\"\n\t\t\tdata-inset={inset}\n\t\t\tdata-variant={variant}\n\t\t\tclassName={cn(\n\t\t\t\t\"group/dropdown-menu-item relative flex cursor-default select-none items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-disabled:pointer-events-none data-inset:pl-7 data-[variant=destructive]:text-destructive data-disabled:opacity-50 data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0 data-[variant=destructive]:*:[svg]:text-destructive\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction DropdownMenuSub({ ...props }: MenuPrimitive.SubmenuRoot.Props) {\n\treturn <MenuPrimitive.SubmenuRoot data-slot=\"dropdown-menu-sub\" {...props} />;\n}\n\nfunction DropdownMenuSubTrigger({\n\tclassName,\n\tinset,\n\tchildren,\n\t...props\n}: MenuPrimitive.SubmenuTrigger.Props & {\n\tinset?: boolean;\n}) {\n\treturn (\n\t\t<MenuPrimitive.SubmenuTrigger\n\t\t\tdata-slot=\"dropdown-menu-sub-trigger\"\n\t\t\tdata-inset={inset}\n\t\t\tclassName={cn(\n\t\t\t\t\"flex cursor-default select-none items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-open:bg-accent data-popup-open:bg-accent data-inset:pl-7 data-open:text-accent-foreground data-popup-open:text-accent-foreground [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t\t<ChevronRightIcon className=\"ml-auto\" />\n\t\t</MenuPrimitive.SubmenuTrigger>\n\t);\n}\n\nfunction DropdownMenuSubContent({\n\talign = 'start',\n\talignOffset = -3,\n\tside = 'right',\n\tsideOffset = 0,\n\tclassName,\n\t...props\n}: React.ComponentProps<typeof DropdownMenuContent>) {\n\treturn (\n\t\t<DropdownMenuContent\n\t\t\tdata-slot=\"dropdown-menu-sub-content\"\n\t\t\tclassName={cn(\n\t\t\t\t'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 data-open:fade-in-0 data-open:zoom-in-95 data-closed:fade-out-0 data-closed:zoom-out-95 w-auto min-w-[96px] rounded-lg bg-popover p-1 text-popover-foreground shadow-lg ring-1 ring-foreground/10 duration-100 data-closed:animate-out data-open:animate-in',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\talign={align}\n\t\t\talignOffset={alignOffset}\n\t\t\tside={side}\n\t\t\tsideOffset={sideOffset}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction DropdownMenuCheckboxItem({\n\tclassName,\n\tchildren,\n\tchecked,\n\tinset,\n\t...props\n}: MenuPrimitive.CheckboxItem.Props & {\n\tinset?: boolean;\n}) {\n\treturn (\n\t\t<MenuPrimitive.CheckboxItem\n\t\t\tdata-slot=\"dropdown-menu-checkbox-item\"\n\t\t\tdata-inset={inset}\n\t\t\tclassName={cn(\n\t\t\t\t\"relative flex cursor-default select-none items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-disabled:pointer-events-none data-inset:pl-7 data-disabled:opacity-50 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tchecked={checked}\n\t\t\t{...props}\n\t\t>\n\t\t\t<span className=\"pointer-events-none absolute right-2 flex items-center justify-center\" data-slot=\"dropdown-menu-checkbox-item-indicator\">\n\t\t\t\t<MenuPrimitive.CheckboxItemIndicator>\n\t\t\t\t\t<CheckIcon />\n\t\t\t\t</MenuPrimitive.CheckboxItemIndicator>\n\t\t\t</span>\n\t\t\t{children}\n\t\t</MenuPrimitive.CheckboxItem>\n\t);\n}\n\nfunction DropdownMenuRadioGroup({ ...props }: MenuPrimitive.RadioGroup.Props) {\n\treturn <MenuPrimitive.RadioGroup data-slot=\"dropdown-menu-radio-group\" {...props} />;\n}\n\nfunction DropdownMenuRadioItem({\n\tclassName,\n\tchildren,\n\tinset,\n\t...props\n}: MenuPrimitive.RadioItem.Props & {\n\tinset?: boolean;\n}) {\n\treturn (\n\t\t<MenuPrimitive.RadioItem\n\t\t\tdata-slot=\"dropdown-menu-radio-item\"\n\t\t\tdata-inset={inset}\n\t\t\tclassName={cn(\n\t\t\t\t\"relative flex cursor-default select-none items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-disabled:pointer-events-none data-inset:pl-7 data-disabled:opacity-50 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<span className=\"pointer-events-none absolute right-2 flex items-center justify-center\" data-slot=\"dropdown-menu-radio-item-indicator\">\n\t\t\t\t<MenuPrimitive.RadioItemIndicator>\n\t\t\t\t\t<CheckIcon />\n\t\t\t\t</MenuPrimitive.RadioItemIndicator>\n\t\t\t</span>\n\t\t\t{children}\n\t\t</MenuPrimitive.RadioItem>\n\t);\n}\n\nfunction DropdownMenuSeparator({ className, ...props }: MenuPrimitive.Separator.Props) {\n\treturn <MenuPrimitive.Separator data-slot=\"dropdown-menu-separator\" className={cn('-mx-1 my-1 h-px bg-border', className)} {...props} />;\n}\n\nfunction DropdownMenuShortcut({ className, ...props }: React.ComponentProps<'span'>) {\n\treturn (\n\t\t<span\n\t\t\tdata-slot=\"dropdown-menu-shortcut\"\n\t\t\tclassName={cn('ml-auto text-muted-foreground text-xs tracking-widest group-focus/dropdown-menu-item:text-accent-foreground', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport {\n\tDropdownMenu,\n\tDropdownMenuCheckboxItem,\n\tDropdownMenuContent,\n\tDropdownMenuGroup,\n\tDropdownMenuItem,\n\tDropdownMenuLabel,\n\tDropdownMenuPortal,\n\tDropdownMenuRadioGroup,\n\tDropdownMenuRadioItem,\n\tDropdownMenuSeparator,\n\tDropdownMenuShortcut,\n\tDropdownMenuSub,\n\tDropdownMenuSubContent,\n\tDropdownMenuSubTrigger,\n\tDropdownMenuTrigger,\n};\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Button } from '@betfin/ui/components/button';
|
|
2
|
+
import { type VariantProps } from 'class-variance-authority';
|
|
3
|
+
import type * as React from 'react';
|
|
4
|
+
declare function InputGroup({ className, ...props }: React.ComponentProps<'div'>): React.JSX.Element;
|
|
5
|
+
declare const inputGroupAddonVariants: (props?: ({
|
|
6
|
+
align?: "block-end" | "block-start" | "inline-end" | "inline-start" | null | undefined;
|
|
7
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
8
|
+
declare function InputGroupAddon({ className, align, ...props }: React.ComponentProps<'div'> & VariantProps<typeof inputGroupAddonVariants>): React.JSX.Element;
|
|
9
|
+
declare const inputGroupButtonVariants: (props?: ({
|
|
10
|
+
size?: "icon-sm" | "icon-xs" | "sm" | "xs" | null | undefined;
|
|
11
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
12
|
+
declare function InputGroupButton({ className, type, variant, size, ...props }: Omit<React.ComponentProps<typeof Button>, 'size' | 'type'> & VariantProps<typeof inputGroupButtonVariants> & {
|
|
13
|
+
type?: 'button' | 'submit' | 'reset';
|
|
14
|
+
}): React.JSX.Element;
|
|
15
|
+
declare function InputGroupText({ className, ...props }: React.ComponentProps<'span'>): React.JSX.Element;
|
|
16
|
+
declare function InputGroupInput({ className, ...props }: React.ComponentProps<'input'>): React.JSX.Element;
|
|
17
|
+
declare function InputGroupTextarea({ className, ...props }: React.ComponentProps<'textarea'>): React.JSX.Element;
|
|
18
|
+
export { InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea };
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {
|
|
3
|
+
InputGroup,
|
|
4
|
+
InputGroupAddon,
|
|
5
|
+
InputGroupButton,
|
|
6
|
+
InputGroupInput,
|
|
7
|
+
InputGroupText,
|
|
8
|
+
InputGroupTextarea
|
|
9
|
+
} from "../chunk-QZIKXMHP.js";
|
|
10
|
+
import "../chunk-SSC2M625.js";
|
|
11
|
+
import "../chunk-EP6DYU4N.js";
|
|
12
|
+
import "../chunk-5CXIFF6J.js";
|
|
13
|
+
import "../chunk-Y2TKUANL.js";
|
|
14
|
+
export {
|
|
15
|
+
InputGroup,
|
|
16
|
+
InputGroupAddon,
|
|
17
|
+
InputGroupButton,
|
|
18
|
+
InputGroupInput,
|
|
19
|
+
InputGroupText,
|
|
20
|
+
InputGroupTextarea
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=input-group.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Centered loading indicator for a page/route that is still resolving — e.g. a
|
|
3
|
+
* module-federation remote whose chunks are in flight, or a lazily-loaded route.
|
|
4
|
+
* Fills its container so it reads as a full-page state.
|
|
5
|
+
*/
|
|
6
|
+
export declare function LoadingScreen({ label, className }: {
|
|
7
|
+
label?: string;
|
|
8
|
+
className?: string;
|
|
9
|
+
}): import("react").JSX.Element;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import {
|
|
2
|
+
cn
|
|
3
|
+
} from "../chunk-Y2TKUANL.js";
|
|
4
|
+
|
|
5
|
+
// src/components/loading.tsx
|
|
6
|
+
import { Loader2Icon } from "lucide-react";
|
|
7
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
8
|
+
function LoadingScreen({ label, className }) {
|
|
9
|
+
return /* @__PURE__ */ jsxs(
|
|
10
|
+
"div",
|
|
11
|
+
{
|
|
12
|
+
className: cn("flex min-h-[60vh] w-full flex-col items-center justify-center gap-3 text-muted-foreground", className),
|
|
13
|
+
role: "status",
|
|
14
|
+
"aria-live": "polite",
|
|
15
|
+
children: [
|
|
16
|
+
/* @__PURE__ */ jsx(Loader2Icon, { className: "size-8 animate-spin text-primary" }),
|
|
17
|
+
label && /* @__PURE__ */ jsx("span", { className: "text-sm", children: label }),
|
|
18
|
+
/* @__PURE__ */ jsx("span", { className: "sr-only", children: label ?? "Loading" })
|
|
19
|
+
]
|
|
20
|
+
}
|
|
21
|
+
);
|
|
22
|
+
}
|
|
23
|
+
export {
|
|
24
|
+
LoadingScreen
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=loading.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/components/loading.tsx"],"sourcesContent":["import { cn } from '@betfin/ui/lib/utils';\nimport { Loader2Icon } from 'lucide-react';\n\n/**\n * Centered loading indicator for a page/route that is still resolving — e.g. a\n * module-federation remote whose chunks are in flight, or a lazily-loaded route.\n * Fills its container so it reads as a full-page state.\n */\nexport function LoadingScreen({ label, className }: { label?: string; className?: string }) {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn('flex min-h-[60vh] w-full flex-col items-center justify-center gap-3 text-muted-foreground', className)}\n\t\t\trole=\"status\"\n\t\t\taria-live=\"polite\"\n\t\t>\n\t\t\t<Loader2Icon className=\"size-8 animate-spin text-primary\" />\n\t\t\t{label && <span className=\"text-sm\">{label}</span>}\n\t\t\t<span className=\"sr-only\">{label ?? 'Loading'}</span>\n\t\t</div>\n\t);\n}\n"],"mappings":";;;;;AACA,SAAS,mBAAmB;AAS1B,SAKC,KALD;AAFK,SAAS,cAAc,EAAE,OAAO,UAAU,GAA2C;AAC3F,SACC;AAAA,IAAC;AAAA;AAAA,MACA,WAAW,GAAG,6FAA6F,SAAS;AAAA,MACpH,MAAK;AAAA,MACL,aAAU;AAAA,MAEV;AAAA,4BAAC,eAAY,WAAU,oCAAmC;AAAA,QACzD,SAAS,oBAAC,UAAK,WAAU,WAAW,iBAAM;AAAA,QAC3C,oBAAC,UAAK,WAAU,WAAW,mBAAS,WAAU;AAAA;AAAA;AAAA,EAC/C;AAEF;","names":[]}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared, presentation-only member-profile dialog. Data-driven — it receives a
|
|
3
|
+
* `member` object and callbacks, and does no fetching of its own, so every app
|
|
4
|
+
* can render the same profile modal. The data source and open/close wiring live
|
|
5
|
+
* in the app-side provider (see `@workspace/member-profile`).
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Invitation-link placement side, relative to the member the modal is opened for:
|
|
9
|
+
* - 'L' → straight-left (SL), 'R' → straight-right (SR), null → normal/auto (N).
|
|
10
|
+
*/
|
|
11
|
+
export type InviteSide = 'L' | 'R' | null;
|
|
12
|
+
/** A member's direct/linear volume split for one product. */
|
|
13
|
+
export interface MemberNetworkVolume {
|
|
14
|
+
direct?: number | bigint;
|
|
15
|
+
linear?: number | bigint;
|
|
16
|
+
}
|
|
17
|
+
export interface MemberProfileData {
|
|
18
|
+
/** Full member wallet address. */
|
|
19
|
+
address: string;
|
|
20
|
+
/** Resolved display name (custom nickname > own username); falls back to the shortened address. */
|
|
21
|
+
username?: string;
|
|
22
|
+
/** Whether the profiled member is the connected viewer — drives what the editor means. */
|
|
23
|
+
isSelf?: boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Current value of the field the viewer may edit: their OWN username when
|
|
26
|
+
* viewing themselves, or their private nickname for this member otherwise.
|
|
27
|
+
*/
|
|
28
|
+
editableUsername?: string;
|
|
29
|
+
/** Full inviter (upline) wallet address. */
|
|
30
|
+
inviter?: string;
|
|
31
|
+
/** Registered-date label (already formatted). */
|
|
32
|
+
registered?: string;
|
|
33
|
+
/** Days since registration. */
|
|
34
|
+
memberDays?: number;
|
|
35
|
+
/** Membership NFT token id and its explorer link. */
|
|
36
|
+
nftId?: string | number;
|
|
37
|
+
nftUrl?: string;
|
|
38
|
+
directCount?: number;
|
|
39
|
+
totalCount?: number;
|
|
40
|
+
/** Referral (matching) earnings — a number or a raw on-chain bigint (18-decimals). */
|
|
41
|
+
referralEarnings?: number | bigint;
|
|
42
|
+
/** Member's own volumes. */
|
|
43
|
+
stakingVolume?: number | bigint;
|
|
44
|
+
bettingVolume?: number | bigint;
|
|
45
|
+
/** Lifetime rewards earned. */
|
|
46
|
+
lifetimeRewards?: number | bigint;
|
|
47
|
+
/** Network (downline) volume split per product. */
|
|
48
|
+
network?: {
|
|
49
|
+
staking?: MemberNetworkVolume;
|
|
50
|
+
betting?: MemberNetworkVolume;
|
|
51
|
+
};
|
|
52
|
+
/** Weak-leg binary volume. */
|
|
53
|
+
weakLegVolume?: number | bigint;
|
|
54
|
+
/** Strong-leg binary volume. */
|
|
55
|
+
strongLegVolume?: number | bigint;
|
|
56
|
+
}
|
|
57
|
+
export interface MemberProfileProps {
|
|
58
|
+
open: boolean;
|
|
59
|
+
onOpenChange: (open: boolean) => void;
|
|
60
|
+
member: MemberProfileData | null;
|
|
61
|
+
loading?: boolean;
|
|
62
|
+
onCopyAddress?: (address: string) => void;
|
|
63
|
+
onCreateInvite?: (member: MemberProfileData) => void;
|
|
64
|
+
/**
|
|
65
|
+
* Copy an invitation link that places new invitees under THIS member (the
|
|
66
|
+
* inviter being the connected wallet). When provided, the modal shows a
|
|
67
|
+
* "Copy invitation link" section with straight-left / straight-right / normal.
|
|
68
|
+
*/
|
|
69
|
+
onCopyInviteLink?: (side: InviteSide) => void;
|
|
70
|
+
/** Persist an edited username/nickname. Provider routes it to the right on-chain write. */
|
|
71
|
+
onSaveUsername?: (member: MemberProfileData, username: string) => void;
|
|
72
|
+
/** Whether to show the edit affordance (only when a wallet is connected). */
|
|
73
|
+
canEditUsername?: boolean;
|
|
74
|
+
/** Whether a username/nickname write is in flight (drives the save spinner). */
|
|
75
|
+
savingUsername?: boolean;
|
|
76
|
+
/** Build an explorer URL for an address; when provided, wallet/inviter get "view on explorer" links. */
|
|
77
|
+
explorerUrl?: (address: string) => string;
|
|
78
|
+
}
|
|
79
|
+
export declare function MemberProfile({ open, onOpenChange, member, loading, onCopyAddress, onCreateInvite, onCopyInviteLink, onSaveUsername, canEditUsername, savingUsername, explorerUrl, }: MemberProfileProps): import("react").JSX.Element;
|