@bearmenu/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 (207) hide show
  1. package/dist/chunk-2CUFS5LF.js +80 -0
  2. package/dist/chunk-3GWWZKX7.js +33 -0
  3. package/dist/chunk-3VMDCCCX.js +10 -0
  4. package/dist/chunk-4AVS6CV4.js +89 -0
  5. package/dist/chunk-4JOV7FXW.js +17 -0
  6. package/dist/chunk-4KOMHDZD.js +89 -0
  7. package/dist/chunk-4UO73SKC.js +26 -0
  8. package/dist/chunk-7H54PTVH.js +116 -0
  9. package/dist/chunk-CW24PLDW.js +24 -0
  10. package/dist/chunk-EBAMCZDW.js +112 -0
  11. package/dist/chunk-ERMIA7NP.js +106 -0
  12. package/dist/chunk-ESO2EM3L.js +46 -0
  13. package/dist/chunk-EUHEIWHZ.js +32 -0
  14. package/dist/chunk-FEK5XGZW.js +8 -0
  15. package/dist/chunk-NKHH23YK.js +31 -0
  16. package/dist/chunk-R47NEOSI.js +78 -0
  17. package/dist/chunk-UXAYXRFN.js +69 -0
  18. package/dist/chunk-X6GATUI2.js +19 -0
  19. package/dist/components/accordion.d.ts +9 -0
  20. package/dist/components/accordion.js +53 -0
  21. package/dist/components/alert-dialog.d.ts +23 -0
  22. package/dist/components/alert-dialog.js +98 -0
  23. package/dist/components/alert.d.ts +11 -0
  24. package/dist/components/alert.js +52 -0
  25. package/dist/components/aspect-ratio.d.ts +6 -0
  26. package/dist/components/aspect-ratio.js +2 -0
  27. package/dist/components/avatar.d.ts +8 -0
  28. package/dist/components/avatar.js +47 -0
  29. package/dist/components/badge.d.ts +13 -0
  30. package/dist/components/badge.js +3 -0
  31. package/dist/components/breadcrumb.d.ts +14 -0
  32. package/dist/components/breadcrumb.js +96 -0
  33. package/dist/components/button.d.ts +16 -0
  34. package/dist/components/button.js +4 -0
  35. package/dist/components/calendar.d.ts +11 -0
  36. package/dist/components/calendar.js +56 -0
  37. package/dist/components/card.d.ts +13 -0
  38. package/dist/components/card.js +4 -0
  39. package/dist/components/carousel.d.ts +24 -0
  40. package/dist/components/carousel.js +198 -0
  41. package/dist/components/checkbox.d.ts +6 -0
  42. package/dist/components/checkbox.js +25 -0
  43. package/dist/components/collapsible.d.ts +8 -0
  44. package/dist/components/collapsible.js +26 -0
  45. package/dist/components/command.d.ts +84 -0
  46. package/dist/components/command.js +4 -0
  47. package/dist/components/currency-input.d.ts +17 -0
  48. package/dist/components/currency-input.js +121 -0
  49. package/dist/components/dialog.d.ts +22 -0
  50. package/dist/components/dialog.js +3 -0
  51. package/dist/components/drawer.d.ts +27 -0
  52. package/dist/components/drawer.js +85 -0
  53. package/dist/components/dropdown-menu.d.ts +28 -0
  54. package/dist/components/dropdown-menu.js +211 -0
  55. package/dist/components/empty-state.d.ts +22 -0
  56. package/dist/components/empty-state.js +81 -0
  57. package/dist/components/form.d.ts +28 -0
  58. package/dist/components/form.js +97 -0
  59. package/dist/components/haptic-button.d.ts +12 -0
  60. package/dist/components/haptic-button.js +17 -0
  61. package/dist/components/input-otp.d.ts +14 -0
  62. package/dist/components/input-otp.js +62 -0
  63. package/dist/components/input.d.ts +6 -0
  64. package/dist/components/input.js +3 -0
  65. package/dist/components/label.d.ts +8 -0
  66. package/dist/components/label.js +3 -0
  67. package/dist/components/lazy-markdown.d.ts +11 -0
  68. package/dist/components/lazy-markdown.js +13 -0
  69. package/dist/components/link-button.d.ts +30 -0
  70. package/dist/components/link-button.js +17 -0
  71. package/dist/components/markdown-renderer.d.ts +11 -0
  72. package/dist/components/markdown-renderer.js +10 -0
  73. package/dist/components/multi-select-combobox.d.ts +23 -0
  74. package/dist/components/multi-select-combobox.js +114 -0
  75. package/dist/components/pagination.d.ts +18 -0
  76. package/dist/components/pagination.js +101 -0
  77. package/dist/components/popover.d.ts +8 -0
  78. package/dist/components/popover.js +3 -0
  79. package/dist/components/progress.d.ts +6 -0
  80. package/dist/components/progress.js +30 -0
  81. package/dist/components/radio-group.d.ts +7 -0
  82. package/dist/components/radio-group.js +30 -0
  83. package/dist/components/rating.d.ts +15 -0
  84. package/dist/components/rating.js +120 -0
  85. package/dist/components/scroll-area.d.ts +7 -0
  86. package/dist/components/scroll-area.js +44 -0
  87. package/dist/components/search-bar.d.ts +17 -0
  88. package/dist/components/search-bar.js +92 -0
  89. package/dist/components/searchable-select.d.ts +22 -0
  90. package/dist/components/searchable-select.js +104 -0
  91. package/dist/components/select.d.ts +15 -0
  92. package/dist/components/select.js +129 -0
  93. package/dist/components/separator.d.ts +6 -0
  94. package/dist/components/separator.js +25 -0
  95. package/dist/components/sheet.d.ts +29 -0
  96. package/dist/components/sheet.js +96 -0
  97. package/dist/components/skeleton-card.d.ts +13 -0
  98. package/dist/components/skeleton-card.js +154 -0
  99. package/dist/components/skeleton.d.ts +6 -0
  100. package/dist/components/skeleton.js +3 -0
  101. package/dist/components/slider.d.ts +6 -0
  102. package/dist/components/slider.js +24 -0
  103. package/dist/components/sliding-panels.d.ts +19 -0
  104. package/dist/components/sliding-panels.js +75 -0
  105. package/dist/components/sonner.d.ts +6 -0
  106. package/dist/components/sonner.js +23 -0
  107. package/dist/components/sticky-container.d.ts +44 -0
  108. package/dist/components/sticky-container.js +39 -0
  109. package/dist/components/switch.d.ts +6 -0
  110. package/dist/components/switch.js +31 -0
  111. package/dist/components/table.d.ts +12 -0
  112. package/dist/components/table.js +81 -0
  113. package/dist/components/tabs.d.ts +12 -0
  114. package/dist/components/tabs.js +55 -0
  115. package/dist/components/text.d.ts +31 -0
  116. package/dist/components/text.js +3 -0
  117. package/dist/components/textarea.d.ts +6 -0
  118. package/dist/components/textarea.js +23 -0
  119. package/dist/components/toast.d.ts +18 -0
  120. package/dist/components/toast.js +3 -0
  121. package/dist/components/toaster.d.ts +5 -0
  122. package/dist/components/toaster.js +25 -0
  123. package/dist/components/toggle-group.d.ts +12 -0
  124. package/dist/components/toggle-group.js +72 -0
  125. package/dist/components/toggle.d.ts +13 -0
  126. package/dist/components/toggle.js +3 -0
  127. package/dist/components/tooltip.d.ts +9 -0
  128. package/dist/components/tooltip.js +26 -0
  129. package/dist/components/use-mobile.d.ts +3 -0
  130. package/dist/components/use-mobile.js +19 -0
  131. package/dist/components/use-toast.d.ts +42 -0
  132. package/dist/components/use-toast.js +2 -0
  133. package/dist/hooks/use-haptic.d.ts +22 -0
  134. package/dist/hooks/use-haptic.js +2 -0
  135. package/dist/hooks/use-mobile.d.ts +3 -0
  136. package/dist/hooks/use-mobile.js +19 -0
  137. package/dist/hooks/use-mounted-theme.d.ts +6 -0
  138. package/dist/hooks/use-mounted-theme.js +18 -0
  139. package/dist/hooks/use-sticky.d.ts +18 -0
  140. package/dist/hooks/use-sticky.js +2 -0
  141. package/dist/lib/utils.d.ts +5 -0
  142. package/dist/lib/utils.js +2 -0
  143. package/package.json +203 -0
  144. package/src/components/accordion.tsx +57 -0
  145. package/src/components/alert-dialog.tsx +116 -0
  146. package/src/components/alert.tsx +57 -0
  147. package/src/components/aspect-ratio.tsx +9 -0
  148. package/src/components/avatar.tsx +49 -0
  149. package/src/components/badge.tsx +38 -0
  150. package/src/components/breadcrumb.tsx +102 -0
  151. package/src/components/button.tsx +94 -0
  152. package/src/components/calendar.tsx +60 -0
  153. package/src/components/card.tsx +67 -0
  154. package/src/components/carousel.tsx +230 -0
  155. package/src/components/checkbox.tsx +27 -0
  156. package/src/components/collapsible.tsx +28 -0
  157. package/src/components/command.tsx +148 -0
  158. package/src/components/currency-input.tsx +158 -0
  159. package/src/components/dialog.tsx +103 -0
  160. package/src/components/drawer.tsx +99 -0
  161. package/src/components/dropdown-menu.tsx +228 -0
  162. package/src/components/empty-state.tsx +118 -0
  163. package/src/components/form.tsx +152 -0
  164. package/src/components/haptic-button.tsx +19 -0
  165. package/src/components/input-otp.tsx +70 -0
  166. package/src/components/input.tsx +23 -0
  167. package/src/components/label.tsx +20 -0
  168. package/src/components/lazy-markdown.tsx +20 -0
  169. package/src/components/link-button.tsx +40 -0
  170. package/src/components/markdown-renderer.tsx +20 -0
  171. package/src/components/multi-select-combobox.tsx +148 -0
  172. package/src/components/pagination.tsx +106 -0
  173. package/src/components/popover.tsx +30 -0
  174. package/src/components/progress.tsx +27 -0
  175. package/src/components/radio-group.tsx +37 -0
  176. package/src/components/rating.tsx +136 -0
  177. package/src/components/scroll-area.tsx +45 -0
  178. package/src/components/search-bar.tsx +113 -0
  179. package/src/components/searchable-select.tsx +134 -0
  180. package/src/components/select.tsx +152 -0
  181. package/src/components/separator.tsx +25 -0
  182. package/src/components/sheet.tsx +121 -0
  183. package/src/components/skeleton-card.tsx +282 -0
  184. package/src/components/skeleton.tsx +17 -0
  185. package/src/components/slider.tsx +24 -0
  186. package/src/components/sliding-panels.tsx +99 -0
  187. package/src/components/sonner.tsx +25 -0
  188. package/src/components/sticky-container.tsx +88 -0
  189. package/src/components/switch.tsx +28 -0
  190. package/src/components/table.tsx +90 -0
  191. package/src/components/tabs.tsx +72 -0
  192. package/src/components/text.test.tsx +192 -0
  193. package/src/components/text.tsx +114 -0
  194. package/src/components/textarea.tsx +22 -0
  195. package/src/components/toast.tsx +129 -0
  196. package/src/components/toaster.tsx +31 -0
  197. package/src/components/toggle-group.tsx +69 -0
  198. package/src/components/toggle.tsx +46 -0
  199. package/src/components/tooltip.tsx +29 -0
  200. package/src/components/use-mobile.tsx +19 -0
  201. package/src/components/use-toast.ts +180 -0
  202. package/src/globals.css +409 -0
  203. package/src/hooks/use-haptic.ts +118 -0
  204. package/src/hooks/use-mobile.ts +19 -0
  205. package/src/hooks/use-mounted-theme.ts +20 -0
  206. package/src/hooks/use-sticky.ts +47 -0
  207. package/src/lib/utils.ts +6 -0
@@ -0,0 +1,106 @@
1
+ import { cn } from './chunk-FEK5XGZW.js';
2
+ import { __objRest, __spreadValues, __spreadProps } from './chunk-3GWWZKX7.js';
3
+ import * as React from 'react';
4
+ import * as ToastPrimitives from '@radix-ui/react-toast';
5
+ import { cva } from 'class-variance-authority';
6
+ import { X } from 'lucide-react';
7
+ import { jsx } from 'react/jsx-runtime';
8
+
9
+ var ToastProvider = ToastPrimitives.Provider;
10
+ var ToastViewport = React.forwardRef((_a, ref) => {
11
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
12
+ return /* @__PURE__ */ jsx(
13
+ ToastPrimitives.Viewport,
14
+ __spreadValues({
15
+ ref,
16
+ className: cn(
17
+ "fixed top-0 z-[100] flex max-h-screen w-full flex-col-reverse p-4 sm:bottom-0 sm:right-0 sm:top-auto sm:flex-col md:max-w-[420px]",
18
+ className
19
+ )
20
+ }, props)
21
+ );
22
+ });
23
+ ToastViewport.displayName = ToastPrimitives.Viewport.displayName;
24
+ var toastVariants = cva(
25
+ "group pointer-events-auto relative flex w-full items-center justify-between space-x-4 overflow-hidden rounded-xl glass p-6 pr-8 shadow-2xl transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full border border-border/50",
26
+ {
27
+ variants: {
28
+ variant: {
29
+ default: "border bg-background text-foreground",
30
+ destructive: "destructive border-destructive/50 bg-destructive text-destructive-foreground"
31
+ }
32
+ },
33
+ defaultVariants: {
34
+ variant: "default"
35
+ }
36
+ }
37
+ );
38
+ var Toast = React.forwardRef((_a, ref) => {
39
+ var _b = _a, { className, variant } = _b, props = __objRest(_b, ["className", "variant"]);
40
+ return /* @__PURE__ */ jsx(
41
+ ToastPrimitives.Root,
42
+ __spreadValues({
43
+ ref,
44
+ className: cn(toastVariants({ variant }), className)
45
+ }, props)
46
+ );
47
+ });
48
+ Toast.displayName = ToastPrimitives.Root.displayName;
49
+ var ToastAction = React.forwardRef((_a, ref) => {
50
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
51
+ return /* @__PURE__ */ jsx(
52
+ ToastPrimitives.Action,
53
+ __spreadValues({
54
+ ref,
55
+ className: cn(
56
+ "inline-flex h-8 shrink-0 items-center justify-center rounded-lg border border-muted bg-transparent px-3 text-xs font-medium ring-offset-background transition-colors hover:bg-secondary focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 group-[.destructive]:border-muted/40 group-[.destructive]:hover:border-destructive/30 group-[.destructive]:hover:bg-destructive group-[.destructive]:hover:text-destructive-foreground group-[.destructive]:focus:ring-destructive",
57
+ className
58
+ )
59
+ }, props)
60
+ );
61
+ });
62
+ ToastAction.displayName = ToastPrimitives.Action.displayName;
63
+ var ToastClose = React.forwardRef((_a, ref) => {
64
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
65
+ return /* @__PURE__ */ jsx(
66
+ ToastPrimitives.Close,
67
+ __spreadProps(__spreadValues({
68
+ ref,
69
+ className: cn(
70
+ "absolute right-2 top-2 rounded-md p-1 text-foreground/50 opacity-0 transition-opacity hover:text-foreground focus:opacity-100 focus:outline-none focus:ring-2 group-hover:opacity-100 group-[.destructive]:text-white group-[.destructive]:opacity-100 group-[.destructive]:hover:text-white group-[.destructive]:focus:ring-white/50 group-[.destructive]:focus:ring-offset-destructive",
71
+ className
72
+ ),
73
+ "toast-close": ""
74
+ }, props), {
75
+ children: /* @__PURE__ */ jsx(X, { className: "h-4 w-4" })
76
+ })
77
+ );
78
+ });
79
+ ToastClose.displayName = ToastPrimitives.Close.displayName;
80
+ var ToastTitle = React.forwardRef((_a, ref) => {
81
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
82
+ return /* @__PURE__ */ jsx(
83
+ ToastPrimitives.Title,
84
+ __spreadValues({
85
+ ref,
86
+ className: cn(
87
+ "text-sm font-semibold group-[.destructive]:text-destructive-foreground",
88
+ className
89
+ )
90
+ }, props)
91
+ );
92
+ });
93
+ ToastTitle.displayName = ToastPrimitives.Title.displayName;
94
+ var ToastDescription = React.forwardRef((_a, ref) => {
95
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
96
+ return /* @__PURE__ */ jsx(
97
+ ToastPrimitives.Description,
98
+ __spreadValues({
99
+ ref,
100
+ className: cn("text-sm opacity-90 group-[.destructive]:text-white", className)
101
+ }, props)
102
+ );
103
+ });
104
+ ToastDescription.displayName = ToastPrimitives.Description.displayName;
105
+
106
+ export { Toast, ToastAction, ToastClose, ToastDescription, ToastProvider, ToastTitle, ToastViewport };
@@ -0,0 +1,46 @@
1
+ import { cn } from './chunk-FEK5XGZW.js';
2
+ import { __objRest, __spreadValues } from './chunk-3GWWZKX7.js';
3
+ import * as TogglePrimitive from '@radix-ui/react-toggle';
4
+ import { cva } from 'class-variance-authority';
5
+ import { jsx } from 'react/jsx-runtime';
6
+
7
+ var toggleVariants = cva(
8
+ "inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium hover:bg-muted hover:text-muted-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] outline-none transition-[color,box-shadow] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive whitespace-nowrap",
9
+ {
10
+ variants: {
11
+ variant: {
12
+ default: "bg-transparent",
13
+ outline: "border border-input bg-transparent shadow-xs hover:bg-accent hover:text-accent-foreground"
14
+ },
15
+ size: {
16
+ default: "h-9 px-2 min-w-9",
17
+ sm: "h-8 px-1.5 min-w-8",
18
+ lg: "h-10 px-2.5 min-w-10"
19
+ }
20
+ },
21
+ defaultVariants: {
22
+ variant: "default",
23
+ size: "default"
24
+ }
25
+ }
26
+ );
27
+ function Toggle(_a) {
28
+ var _b = _a, {
29
+ className,
30
+ variant,
31
+ size
32
+ } = _b, props = __objRest(_b, [
33
+ "className",
34
+ "variant",
35
+ "size"
36
+ ]);
37
+ return /* @__PURE__ */ jsx(
38
+ TogglePrimitive.Root,
39
+ __spreadValues({
40
+ "data-slot": "toggle",
41
+ className: cn(toggleVariants({ variant, size, className }))
42
+ }, props)
43
+ );
44
+ }
45
+
46
+ export { Toggle, toggleVariants };
@@ -0,0 +1,32 @@
1
+ import { useState, useRef, useEffect } from 'react';
2
+
3
+ function useSticky() {
4
+ const [isSticky, setIsSticky] = useState(false);
5
+ const sentinelRef = useRef(null);
6
+ const stickyRef = useRef(null);
7
+ useEffect(() => {
8
+ const sentinel = sentinelRef.current;
9
+ if (!sentinel) return;
10
+ const observer = new IntersectionObserver(
11
+ ([entry]) => {
12
+ setIsSticky(!entry.isIntersecting);
13
+ },
14
+ {
15
+ threshold: [0],
16
+ // Negative top margin to detect when element reaches sticky position
17
+ rootMargin: "-1px 0px 0px 0px"
18
+ }
19
+ );
20
+ observer.observe(sentinel);
21
+ return () => {
22
+ observer.disconnect();
23
+ };
24
+ }, []);
25
+ return {
26
+ isSticky,
27
+ ref: stickyRef,
28
+ sentinelRef
29
+ };
30
+ }
31
+
32
+ export { useSticky };
@@ -0,0 +1,8 @@
1
+ import { clsx } from 'clsx';
2
+ import { twMerge } from 'tailwind-merge';
3
+
4
+ function cn(...inputs) {
5
+ return twMerge(clsx(inputs));
6
+ }
7
+
8
+ export { cn };
@@ -0,0 +1,31 @@
1
+ import { cn } from './chunk-FEK5XGZW.js';
2
+ import { __objRest, __spreadValues } from './chunk-3GWWZKX7.js';
3
+ import { cva } from 'class-variance-authority';
4
+ import { jsx } from 'react/jsx-runtime';
5
+
6
+ var badgeVariants = cva(
7
+ "inline-flex items-center rounded-lg border px-2.5 py-0.5 text-xs font-semibold transition-[background-color,color,box-shadow,border-color] duration-300 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 backdrop-blur-md",
8
+ {
9
+ variants: {
10
+ variant: {
11
+ default: "border-transparent bg-primary/80 text-primary-foreground shadow-lg hover:bg-primary hover:shadow-xl hover:shadow-primary/20",
12
+ secondary: "border-transparent bg-secondary/80 text-secondary-foreground shadow-lg hover:bg-secondary hover:shadow-xl hover:shadow-secondary/20",
13
+ destructive: "border-transparent bg-destructive/80 text-destructive-foreground shadow-lg hover:bg-destructive hover:shadow-xl hover:shadow-destructive/20",
14
+ outline: "text-foreground glass glass-hover",
15
+ overlay: "border-transparent bg-black/50 text-white backdrop-blur-sm shadow-lg",
16
+ glass: "glass glass-hover text-foreground border-border/50",
17
+ success: "border-transparent bg-green-500/80 text-primary shadow-lg hover:bg-green-500 hover:shadow-xl hover:shadow-green-500/20",
18
+ warning: "border-transparent bg-yellow-500/80 text-primary shadow-lg hover:bg-yellow-500 hover:shadow-xl hover:shadow-yellow-500/20"
19
+ }
20
+ },
21
+ defaultVariants: {
22
+ variant: "default"
23
+ }
24
+ }
25
+ );
26
+ function Badge(_a) {
27
+ var _b = _a, { className, variant } = _b, props = __objRest(_b, ["className", "variant"]);
28
+ return /* @__PURE__ */ jsx("div", __spreadValues({ className: cn(badgeVariants({ variant }), className) }, props));
29
+ }
30
+
31
+ export { Badge, badgeVariants };
@@ -0,0 +1,78 @@
1
+ import { useState, useEffect } from 'react';
2
+
3
+ var useHaptic = () => {
4
+ const [platform, setPlatform] = useState("unknown");
5
+ const [isSupported, setIsSupported] = useState(false);
6
+ useEffect(() => {
7
+ var _a, _b;
8
+ const userAgent = navigator.userAgent.toLowerCase();
9
+ const isIOS = /iphone|ipad|ipod/.test(userAgent);
10
+ const isAndroid = /android/.test(userAgent);
11
+ if (isIOS) {
12
+ setPlatform("ios");
13
+ } else if (isAndroid) {
14
+ setPlatform("android");
15
+ } else if (/windows|mac|linux/.test(userAgent)) {
16
+ setPlatform("desktop");
17
+ }
18
+ const hasVibration = "vibrate" in navigator;
19
+ const hasTelegram = typeof window !== "undefined" && ((_b = (_a = window.Telegram) == null ? void 0 : _a.WebApp) == null ? void 0 : _b.HapticFeedback);
20
+ setIsSupported(hasVibration || !!hasTelegram);
21
+ }, []);
22
+ const trigger = (style) => {
23
+ var _a, _b;
24
+ if (typeof window !== "undefined" && ((_b = (_a = window.Telegram) == null ? void 0 : _a.WebApp) == null ? void 0 : _b.HapticFeedback)) {
25
+ triggerTelegramHaptic(style);
26
+ return;
27
+ }
28
+ if ("vibrate" in navigator) {
29
+ triggerVibrationAPI(style);
30
+ return;
31
+ }
32
+ console.debug("Haptic feedback not supported on this device");
33
+ };
34
+ return { isSupported, platform, trigger };
35
+ };
36
+ function triggerTelegramHaptic(style) {
37
+ var _a, _b;
38
+ const telegram = (_b = (_a = window.Telegram) == null ? void 0 : _a.WebApp) == null ? void 0 : _b.HapticFeedback;
39
+ if (!telegram) return;
40
+ switch (style) {
41
+ case "light":
42
+ telegram.impactOccurred("light");
43
+ break;
44
+ case "medium":
45
+ telegram.impactOccurred("medium");
46
+ break;
47
+ case "heavy":
48
+ telegram.impactOccurred("heavy");
49
+ break;
50
+ case "success":
51
+ telegram.notificationOccurred("success");
52
+ break;
53
+ case "warning":
54
+ telegram.notificationOccurred("warning");
55
+ break;
56
+ case "error":
57
+ telegram.notificationOccurred("error");
58
+ break;
59
+ case "selection":
60
+ telegram.selectionChanged();
61
+ break;
62
+ }
63
+ }
64
+ function triggerVibrationAPI(style) {
65
+ if (!("vibrate" in navigator)) return;
66
+ const patterns = {
67
+ light: 10,
68
+ medium: 20,
69
+ heavy: 50,
70
+ success: [10, 50, 10],
71
+ warning: [20, 100, 20],
72
+ error: [50, 100, 50],
73
+ selection: 5
74
+ };
75
+ navigator.vibrate(patterns[style]);
76
+ }
77
+
78
+ export { useHaptic };
@@ -0,0 +1,69 @@
1
+ import { textVariants } from './chunk-4KOMHDZD.js';
2
+ import { cn } from './chunk-FEK5XGZW.js';
3
+ import { __objRest, __spreadValues } from './chunk-3GWWZKX7.js';
4
+ import * as React from 'react';
5
+ import { jsx } from 'react/jsx-runtime';
6
+
7
+ var Card = React.forwardRef((_a, ref) => {
8
+ var _b = _a, { className, variant = "glass" } = _b, props = __objRest(_b, ["className", "variant"]);
9
+ return /* @__PURE__ */ jsx(
10
+ "div",
11
+ __spreadValues({
12
+ ref,
13
+ className: cn(
14
+ variant === "glass" ? "glass rounded-[22px] border border-transparent text-card-foreground transition-[transform,border-color] duration-300 [@media(hover:hover)]:hover:-translate-y-0.5 hover:border-primary/40" : "bg-surface rounded-[22px] border border-border text-card-foreground transition-all duration-200 hover:border-primary/40 hover:-translate-y-0.5",
15
+ className
16
+ )
17
+ }, props)
18
+ );
19
+ });
20
+ Card.displayName = "Card";
21
+ var CardHeader = React.forwardRef(
22
+ (_a, ref) => {
23
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
24
+ return /* @__PURE__ */ jsx("div", __spreadValues({ ref, className: cn("flex flex-col space-y-1.5 p-6", className) }, props));
25
+ }
26
+ );
27
+ CardHeader.displayName = "CardHeader";
28
+ var CardTitle = React.forwardRef(
29
+ (_a, ref) => {
30
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
31
+ return /* @__PURE__ */ jsx(
32
+ "div",
33
+ __spreadValues({
34
+ ref,
35
+ className: cn(textVariants({ variant: "h4", wrap: "balance" }), className)
36
+ }, props)
37
+ );
38
+ }
39
+ );
40
+ CardTitle.displayName = "CardTitle";
41
+ var CardDescription = React.forwardRef(
42
+ (_a, ref) => {
43
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
44
+ return /* @__PURE__ */ jsx(
45
+ "div",
46
+ __spreadValues({
47
+ ref,
48
+ className: cn("text-sm", textVariants({ color: "muted", wrap: "pretty" }), className)
49
+ }, props)
50
+ );
51
+ }
52
+ );
53
+ CardDescription.displayName = "CardDescription";
54
+ var CardContent = React.forwardRef(
55
+ (_a, ref) => {
56
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
57
+ return /* @__PURE__ */ jsx("div", __spreadValues({ ref, className: cn("p-6 pt-0", className) }, props));
58
+ }
59
+ );
60
+ CardContent.displayName = "CardContent";
61
+ var CardFooter = React.forwardRef(
62
+ (_a, ref) => {
63
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
64
+ return /* @__PURE__ */ jsx("div", __spreadValues({ ref, className: cn("flex items-center p-6 pt-0", className) }, props));
65
+ }
66
+ );
67
+ CardFooter.displayName = "CardFooter";
68
+
69
+ export { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle };
@@ -0,0 +1,19 @@
1
+ import { cn } from './chunk-FEK5XGZW.js';
2
+ import { __objRest, __spreadValues } from './chunk-3GWWZKX7.js';
3
+ import { jsx } from 'react/jsx-runtime';
4
+
5
+ function Skeleton(_a) {
6
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
7
+ return /* @__PURE__ */ jsx(
8
+ "div",
9
+ __spreadValues({
10
+ className: cn(
11
+ "animate-pulse rounded-xl glass border border-border/30 relative overflow-hidden",
12
+ "before:absolute before:inset-0 before:-translate-x-full before:animate-[shimmer_2s_infinite] before:bg-gradient-to-r before:from-transparent before:via-white/10 before:to-transparent",
13
+ className
14
+ )
15
+ }, props)
16
+ );
17
+ }
18
+
19
+ export { Skeleton };
@@ -0,0 +1,9 @@
1
+ import * as React from 'react';
2
+ import * as AccordionPrimitive from '@radix-ui/react-accordion';
3
+
4
+ declare const Accordion: React.ForwardRefExoticComponent<(AccordionPrimitive.AccordionSingleProps | AccordionPrimitive.AccordionMultipleProps) & React.RefAttributes<HTMLDivElement>>;
5
+ declare const AccordionItem: React.ForwardRefExoticComponent<Omit<AccordionPrimitive.AccordionItemProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
6
+ declare const AccordionTrigger: React.ForwardRefExoticComponent<Omit<AccordionPrimitive.AccordionTriggerProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
7
+ declare const AccordionContent: React.ForwardRefExoticComponent<Omit<AccordionPrimitive.AccordionContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
8
+
9
+ export { Accordion, AccordionContent, AccordionItem, AccordionTrigger };
@@ -0,0 +1,53 @@
1
+ import { cn } from '../chunk-FEK5XGZW.js';
2
+ import { __objRest, __spreadValues, __spreadProps } from '../chunk-3GWWZKX7.js';
3
+ import * as React from 'react';
4
+ import * as AccordionPrimitive from '@radix-ui/react-accordion';
5
+ import { ChevronDown } from 'lucide-react';
6
+ import { jsx, jsxs } from 'react/jsx-runtime';
7
+
8
+ var Accordion = AccordionPrimitive.Root;
9
+ var AccordionItem = React.forwardRef((_a, ref) => {
10
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
11
+ return /* @__PURE__ */ jsx(
12
+ AccordionPrimitive.Item,
13
+ __spreadValues({
14
+ ref,
15
+ className: cn("border-b border-border/50", className)
16
+ }, props)
17
+ );
18
+ });
19
+ AccordionItem.displayName = "AccordionItem";
20
+ var AccordionTrigger = React.forwardRef((_a, ref) => {
21
+ var _b = _a, { className, children } = _b, props = __objRest(_b, ["className", "children"]);
22
+ return /* @__PURE__ */ jsx(AccordionPrimitive.Header, { className: "flex", children: /* @__PURE__ */ jsxs(
23
+ AccordionPrimitive.Trigger,
24
+ __spreadProps(__spreadValues({
25
+ ref,
26
+ className: cn(
27
+ "flex flex-1 items-center justify-between py-4 font-medium transition-all duration-300 hover:underline [&[data-state=open]>svg]:rotate-180 glass-hover rounded-xl px-4 hover:bg-accent/20",
28
+ className
29
+ )
30
+ }, props), {
31
+ children: [
32
+ children,
33
+ /* @__PURE__ */ jsx(ChevronDown, { className: "h-4 w-4 shrink-0 transition-transform duration-300" })
34
+ ]
35
+ })
36
+ ) });
37
+ });
38
+ AccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName;
39
+ var AccordionContent = React.forwardRef((_a, ref) => {
40
+ var _b = _a, { className, children } = _b, props = __objRest(_b, ["className", "children"]);
41
+ return /* @__PURE__ */ jsx(
42
+ AccordionPrimitive.Content,
43
+ __spreadProps(__spreadValues({
44
+ ref,
45
+ className: "overflow-hidden text-sm transition-all data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down"
46
+ }, props), {
47
+ children: /* @__PURE__ */ jsx("div", { className: cn("pb-4 pt-0 px-4", className), children })
48
+ })
49
+ );
50
+ });
51
+ AccordionContent.displayName = AccordionPrimitive.Content.displayName;
52
+
53
+ export { Accordion, AccordionContent, AccordionItem, AccordionTrigger };
@@ -0,0 +1,23 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as React from 'react';
3
+ import * as AlertDialogPrimitive from '@radix-ui/react-alert-dialog';
4
+
5
+ declare const AlertDialog: React.FC<AlertDialogPrimitive.AlertDialogProps>;
6
+ declare const AlertDialogTrigger: React.ForwardRefExoticComponent<AlertDialogPrimitive.AlertDialogTriggerProps & React.RefAttributes<HTMLButtonElement>>;
7
+ declare const AlertDialogPortal: React.FC<AlertDialogPrimitive.AlertDialogPortalProps>;
8
+ declare const AlertDialogOverlay: React.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogOverlayProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
9
+ declare const AlertDialogContent: React.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
10
+ declare const AlertDialogHeader: {
11
+ ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
12
+ displayName: string;
13
+ };
14
+ declare const AlertDialogFooter: {
15
+ ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
16
+ displayName: string;
17
+ };
18
+ declare const AlertDialogTitle: React.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogTitleProps & React.RefAttributes<HTMLHeadingElement>, "ref"> & React.RefAttributes<HTMLHeadingElement>>;
19
+ declare const AlertDialogDescription: React.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogDescriptionProps & React.RefAttributes<HTMLParagraphElement>, "ref"> & React.RefAttributes<HTMLParagraphElement>>;
20
+ declare const AlertDialogAction: React.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogActionProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
21
+ declare const AlertDialogCancel: React.ForwardRefExoticComponent<Omit<AlertDialogPrimitive.AlertDialogCancelProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
22
+
23
+ export { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger };
@@ -0,0 +1,98 @@
1
+ import { buttonVariants } from '../chunk-2CUFS5LF.js';
2
+ import '../chunk-R47NEOSI.js';
3
+ import { cn } from '../chunk-FEK5XGZW.js';
4
+ import { __objRest, __spreadProps, __spreadValues } from '../chunk-3GWWZKX7.js';
5
+ import * as React from 'react';
6
+ import * as AlertDialogPrimitive from '@radix-ui/react-alert-dialog';
7
+ import { jsx, jsxs } from 'react/jsx-runtime';
8
+
9
+ var AlertDialog = AlertDialogPrimitive.Root;
10
+ var AlertDialogTrigger = AlertDialogPrimitive.Trigger;
11
+ var AlertDialogPortal = AlertDialogPrimitive.Portal;
12
+ var AlertDialogOverlay = React.forwardRef((_a, ref) => {
13
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
14
+ return /* @__PURE__ */ jsx(
15
+ AlertDialogPrimitive.Overlay,
16
+ __spreadProps(__spreadValues({
17
+ className: cn(
18
+ "fixed inset-0 z-50 bg-black/50 backdrop-blur-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
19
+ className
20
+ )
21
+ }, props), {
22
+ ref
23
+ })
24
+ );
25
+ });
26
+ AlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName;
27
+ var AlertDialogContent = React.forwardRef((_a, ref) => {
28
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
29
+ return /* @__PURE__ */ jsxs(AlertDialogPortal, { children: [
30
+ /* @__PURE__ */ jsx(AlertDialogOverlay, {}),
31
+ /* @__PURE__ */ jsx(
32
+ AlertDialogPrimitive.Content,
33
+ __spreadValues({
34
+ ref,
35
+ className: cn(
36
+ "fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 glass p-6 shadow-2xl duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] rounded-2xl border border-border/50",
37
+ className
38
+ )
39
+ }, props)
40
+ )
41
+ ] });
42
+ });
43
+ AlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName;
44
+ var AlertDialogHeader = (_a) => {
45
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
46
+ return /* @__PURE__ */ jsx("div", __spreadValues({ className: cn("flex flex-col space-y-2 text-center sm:text-left", className) }, props));
47
+ };
48
+ AlertDialogHeader.displayName = "AlertDialogHeader";
49
+ var AlertDialogFooter = (_a) => {
50
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
51
+ return /* @__PURE__ */ jsx(
52
+ "div",
53
+ __spreadValues({
54
+ className: cn("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2", className)
55
+ }, props)
56
+ );
57
+ };
58
+ AlertDialogFooter.displayName = "AlertDialogFooter";
59
+ var AlertDialogTitle = React.forwardRef((_a, ref) => {
60
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
61
+ return /* @__PURE__ */ jsx(
62
+ AlertDialogPrimitive.Title,
63
+ __spreadValues({
64
+ ref,
65
+ className: cn("text-lg font-semibold", className)
66
+ }, props)
67
+ );
68
+ });
69
+ AlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName;
70
+ var AlertDialogDescription = React.forwardRef((_a, ref) => {
71
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
72
+ return /* @__PURE__ */ jsx(
73
+ AlertDialogPrimitive.Description,
74
+ __spreadValues({
75
+ ref,
76
+ className: cn("text-sm text-muted-foreground", className)
77
+ }, props)
78
+ );
79
+ });
80
+ AlertDialogDescription.displayName = AlertDialogPrimitive.Description.displayName;
81
+ var AlertDialogAction = React.forwardRef((_a, ref) => {
82
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
83
+ return /* @__PURE__ */ jsx(AlertDialogPrimitive.Action, __spreadValues({ ref, className: cn(buttonVariants(), className) }, props));
84
+ });
85
+ AlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName;
86
+ var AlertDialogCancel = React.forwardRef((_a, ref) => {
87
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
88
+ return /* @__PURE__ */ jsx(
89
+ AlertDialogPrimitive.Cancel,
90
+ __spreadValues({
91
+ ref,
92
+ className: cn(buttonVariants({ variant: "outline" }), "mt-2 sm:mt-0", className)
93
+ }, props)
94
+ );
95
+ });
96
+ AlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName;
97
+
98
+ export { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger };
@@ -0,0 +1,11 @@
1
+ import * as class_variance_authority_types from 'class-variance-authority/types';
2
+ import * as React from 'react';
3
+ import { VariantProps } from 'class-variance-authority';
4
+
5
+ declare const Alert: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & VariantProps<(props?: ({
6
+ variant?: "default" | "destructive" | "success" | "warning" | null | undefined;
7
+ } & class_variance_authority_types.ClassProp) | undefined) => string> & React.RefAttributes<HTMLDivElement>>;
8
+ declare const AlertTitle: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLHeadingElement> & React.RefAttributes<HTMLParagraphElement>>;
9
+ declare const AlertDescription: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLParagraphElement> & React.RefAttributes<HTMLParagraphElement>>;
10
+
11
+ export { Alert, AlertDescription, AlertTitle };
@@ -0,0 +1,52 @@
1
+ import { textVariants } from '../chunk-4KOMHDZD.js';
2
+ import { cn } from '../chunk-FEK5XGZW.js';
3
+ import { __objRest, __spreadValues } from '../chunk-3GWWZKX7.js';
4
+ import * as React from 'react';
5
+ import { cva } from 'class-variance-authority';
6
+ import { jsx } from 'react/jsx-runtime';
7
+
8
+ var alertVariants = cva(
9
+ "relative w-full rounded-xl border border-border/50 px-4 py-3 text-sm glass transition-all duration-300 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground [&>svg~*]:pl-7",
10
+ {
11
+ variants: {
12
+ variant: {
13
+ default: "bg-background text-foreground",
14
+ destructive: "border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive bg-destructive/10",
15
+ warning: "border-yellow-500/50 text-yellow-600 dark:border-yellow-500 [&>svg]:text-yellow-600 bg-yellow-500/10",
16
+ success: "border-green-500/50 text-green-600 dark:border-green-500 [&>svg]:text-green-600 bg-green-500/10"
17
+ }
18
+ },
19
+ defaultVariants: {
20
+ variant: "default"
21
+ }
22
+ }
23
+ );
24
+ var Alert = React.forwardRef((_a, ref) => {
25
+ var _b = _a, { className, variant } = _b, props = __objRest(_b, ["className", "variant"]);
26
+ return /* @__PURE__ */ jsx("div", __spreadValues({ ref, role: "alert", className: cn(alertVariants({ variant }), className) }, props));
27
+ });
28
+ Alert.displayName = "Alert";
29
+ var AlertTitle = React.forwardRef(
30
+ (_a, ref) => {
31
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
32
+ return /* @__PURE__ */ jsx(
33
+ "h5",
34
+ __spreadValues({
35
+ ref,
36
+ className: cn(
37
+ "mb-1",
38
+ textVariants({ weight: "medium", leading: "none", tracking: "tight" }),
39
+ className
40
+ )
41
+ }, props)
42
+ );
43
+ }
44
+ );
45
+ AlertTitle.displayName = "AlertTitle";
46
+ var AlertDescription = React.forwardRef((_a, ref) => {
47
+ var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
48
+ return /* @__PURE__ */ jsx("div", __spreadValues({ ref, className: cn("text-sm [&_p]:leading-relaxed", className) }, props));
49
+ });
50
+ AlertDescription.displayName = "AlertDescription";
51
+
52
+ export { Alert, AlertDescription, AlertTitle };
@@ -0,0 +1,6 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as AspectRatioPrimitive from '@radix-ui/react-aspect-ratio';
3
+
4
+ declare function AspectRatio({ ...props }: React.ComponentProps<typeof AspectRatioPrimitive.Root>): react_jsx_runtime.JSX.Element;
5
+
6
+ export { AspectRatio };
@@ -0,0 +1,2 @@
1
+ export { AspectRatio } from '../chunk-3VMDCCCX.js';
2
+ import '../chunk-3GWWZKX7.js';