@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.
Files changed (160) hide show
  1. package/dist/chunk-3CAXHUAL.js +23 -0
  2. package/dist/chunk-3CAXHUAL.js.map +1 -0
  3. package/dist/chunk-3YCD2QLS.js +113 -0
  4. package/dist/chunk-3YCD2QLS.js.map +1 -0
  5. package/dist/chunk-5CXIFF6J.js +46 -0
  6. package/dist/chunk-5CXIFF6J.js.map +1 -0
  7. package/dist/chunk-EP6DYU4N.js +26 -0
  8. package/dist/chunk-EP6DYU4N.js.map +1 -0
  9. package/dist/chunk-FHYW2QBY.js +21 -0
  10. package/dist/chunk-FHYW2QBY.js.map +1 -0
  11. package/dist/chunk-HRFMTZ55.js +49 -0
  12. package/dist/chunk-HRFMTZ55.js.map +1 -0
  13. package/dist/chunk-ILNHKDYA.js +107 -0
  14. package/dist/chunk-ILNHKDYA.js.map +1 -0
  15. package/dist/chunk-JTVU6ANA.js +37 -0
  16. package/dist/chunk-JTVU6ANA.js.map +1 -0
  17. package/dist/chunk-K7JWN6NH.js +21 -0
  18. package/dist/chunk-K7JWN6NH.js.map +1 -0
  19. package/dist/chunk-QZIKXMHP.js +131 -0
  20. package/dist/chunk-QZIKXMHP.js.map +1 -0
  21. package/dist/chunk-SSC2M625.js +24 -0
  22. package/dist/chunk-SSC2M625.js.map +1 -0
  23. package/dist/chunk-TLULUIYC.js +14 -0
  24. package/dist/chunk-TLULUIYC.js.map +1 -0
  25. package/dist/chunk-VJ6P5FFS.js +90 -0
  26. package/dist/chunk-VJ6P5FFS.js.map +1 -0
  27. package/dist/chunk-Y2TKUANL.js +11 -0
  28. package/dist/chunk-Y2TKUANL.js.map +1 -0
  29. package/dist/components/accordion.d.ts +6 -0
  30. package/dist/components/accordion.js +59 -0
  31. package/dist/components/accordion.js.map +1 -0
  32. package/dist/components/alert-dialog.d.ts +18 -0
  33. package/dist/components/alert-dialog.js +144 -0
  34. package/dist/components/alert-dialog.js.map +1 -0
  35. package/dist/components/app-header.d.ts +19 -0
  36. package/dist/components/app-header.js +17 -0
  37. package/dist/components/app-header.js.map +1 -0
  38. package/dist/components/badge.d.ts +7 -0
  39. package/dist/components/badge.js +47 -0
  40. package/dist/components/badge.js.map +1 -0
  41. package/dist/components/bet-value.d.ts +49 -0
  42. package/dist/components/bet-value.js +12 -0
  43. package/dist/components/bet-value.js.map +1 -0
  44. package/dist/components/breadcrumb.d.ts +10 -0
  45. package/dist/components/breadcrumb.js +65 -0
  46. package/dist/components/breadcrumb.js.map +1 -0
  47. package/dist/components/button.d.ts +8 -0
  48. package/dist/components/button.js +10 -0
  49. package/dist/components/button.js.map +1 -0
  50. package/dist/components/calendar.d.ts +10 -0
  51. package/dist/components/calendar.js +145 -0
  52. package/dist/components/calendar.js.map +1 -0
  53. package/dist/components/carousel.d.ts +28 -0
  54. package/dist/components/carousel.js +153 -0
  55. package/dist/components/carousel.js.map +1 -0
  56. package/dist/components/chart.d.ts +39 -0
  57. package/dist/components/chart.js +219 -0
  58. package/dist/components/chart.js.map +1 -0
  59. package/dist/components/checkbox.d.ts +3 -0
  60. package/dist/components/checkbox.js +26 -0
  61. package/dist/components/checkbox.js.map +1 -0
  62. package/dist/components/collapsible.d.ts +5 -0
  63. package/dist/components/collapsible.js +20 -0
  64. package/dist/components/collapsible.js.map +1 -0
  65. package/dist/components/command.d.ts +19 -0
  66. package/dist/components/command.js +130 -0
  67. package/dist/components/command.js.map +1 -0
  68. package/dist/components/context-menu.d.ts +29 -0
  69. package/dist/components/context-menu.js +186 -0
  70. package/dist/components/context-menu.js.map +1 -0
  71. package/dist/components/dialog.d.ts +17 -0
  72. package/dist/components/dialog.js +28 -0
  73. package/dist/components/dialog.js.map +1 -0
  74. package/dist/components/drawer.d.ts +16 -0
  75. package/dist/components/drawer.js +164 -0
  76. package/dist/components/drawer.js.map +1 -0
  77. package/dist/components/dropdown-menu.d.ts +29 -0
  78. package/dist/components/dropdown-menu.js +207 -0
  79. package/dist/components/dropdown-menu.js.map +1 -0
  80. package/dist/components/input-group.d.ts +18 -0
  81. package/dist/components/input-group.js +22 -0
  82. package/dist/components/input-group.js.map +1 -0
  83. package/dist/components/input.d.ts +3 -0
  84. package/dist/components/input.js +8 -0
  85. package/dist/components/input.js.map +1 -0
  86. package/dist/components/loading.d.ts +9 -0
  87. package/dist/components/loading.js +26 -0
  88. package/dist/components/loading.js.map +1 -0
  89. package/dist/components/member-profile.d.ts +79 -0
  90. package/dist/components/member-profile.js +342 -0
  91. package/dist/components/member-profile.js.map +1 -0
  92. package/dist/components/popover.d.ts +9 -0
  93. package/dist/components/popover.js +52 -0
  94. package/dist/components/popover.js.map +1 -0
  95. package/dist/components/progress.d.ts +7 -0
  96. package/dist/components/progress.js +40 -0
  97. package/dist/components/progress.js.map +1 -0
  98. package/dist/components/radio-group.d.ts +5 -0
  99. package/dist/components/radio-group.js +31 -0
  100. package/dist/components/radio-group.js.map +1 -0
  101. package/dist/components/scroll-area.d.ts +4 -0
  102. package/dist/components/scroll-area.js +42 -0
  103. package/dist/components/scroll-area.js.map +1 -0
  104. package/dist/components/select.d.ts +15 -0
  105. package/dist/components/select.js +136 -0
  106. package/dist/components/select.js.map +1 -0
  107. package/dist/components/separator.d.ts +3 -0
  108. package/dist/components/separator.js +8 -0
  109. package/dist/components/separator.js.map +1 -0
  110. package/dist/components/sheet.d.ts +14 -0
  111. package/dist/components/sheet.js +23 -0
  112. package/dist/components/sheet.js.map +1 -0
  113. package/dist/components/sidebar.d.ts +63 -0
  114. package/dist/components/sidebar.js +536 -0
  115. package/dist/components/sidebar.js.map +1 -0
  116. package/dist/components/skeleton.d.ts +2 -0
  117. package/dist/components/skeleton.js +8 -0
  118. package/dist/components/skeleton.js.map +1 -0
  119. package/dist/components/slider.d.ts +3 -0
  120. package/dist/components/slider.js +45 -0
  121. package/dist/components/slider.js.map +1 -0
  122. package/dist/components/sonner.d.ts +3 -0
  123. package/dist/components/sonner.js +39 -0
  124. package/dist/components/sonner.js.map +1 -0
  125. package/dist/components/switch.d.ts +5 -0
  126. package/dist/components/switch.js +36 -0
  127. package/dist/components/switch.js.map +1 -0
  128. package/dist/components/table.d.ts +12 -0
  129. package/dist/components/table.js +56 -0
  130. package/dist/components/table.js.map +1 -0
  131. package/dist/components/tabs.d.ts +10 -0
  132. package/dist/components/tabs.js +63 -0
  133. package/dist/components/tabs.js.map +1 -0
  134. package/dist/components/textarea.d.ts +3 -0
  135. package/dist/components/textarea.js +8 -0
  136. package/dist/components/textarea.js.map +1 -0
  137. package/dist/components/toggle-group.d.ts +11 -0
  138. package/dist/components/toggle-group.js +80 -0
  139. package/dist/components/toggle-group.js.map +1 -0
  140. package/dist/components/toggle.d.ts +8 -0
  141. package/dist/components/toggle.js +11 -0
  142. package/dist/components/toggle.js.map +1 -0
  143. package/dist/components/tooltip.d.ts +6 -0
  144. package/dist/components/tooltip.js +14 -0
  145. package/dist/components/tooltip.js.map +1 -0
  146. package/dist/hooks/use-mobile.d.ts +1 -0
  147. package/dist/hooks/use-mobile.js +7 -0
  148. package/dist/hooks/use-mobile.js.map +1 -0
  149. package/dist/lib/date.d.ts +14 -0
  150. package/dist/lib/date.js +24 -0
  151. package/dist/lib/date.js.map +1 -0
  152. package/dist/lib/format.d.ts +16 -0
  153. package/dist/lib/format.js +9 -0
  154. package/dist/lib/format.js.map +1 -0
  155. package/dist/lib/utils.d.ts +2 -0
  156. package/dist/lib/utils.js +7 -0
  157. package/dist/lib/utils.js.map +1 -0
  158. package/package.json +71 -0
  159. package/src/styles/globals.css +151 -0
  160. 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,3 @@
1
+ import type * as React from 'react';
2
+ declare function Input({ className, type, ...props }: React.ComponentProps<'input'>): React.JSX.Element;
3
+ export { Input };
@@ -0,0 +1,8 @@
1
+ import {
2
+ Input
3
+ } from "../chunk-EP6DYU4N.js";
4
+ import "../chunk-Y2TKUANL.js";
5
+ export {
6
+ Input
7
+ };
8
+ //# sourceMappingURL=input.js.map
@@ -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;