xiod-ui 1.0.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 (224) hide show
  1. package/LICENSE +73 -0
  2. package/README.md +167 -0
  3. package/dist/components/accordion.d.ts +9 -0
  4. package/dist/components/accordion.js +46 -0
  5. package/dist/components/agent-steps.d.ts +47 -0
  6. package/dist/components/agent-steps.js +223 -0
  7. package/dist/components/alert-dialog.d.ts +21 -0
  8. package/dist/components/alert-dialog.js +74 -0
  9. package/dist/components/alert.d.ts +12 -0
  10. package/dist/components/alert.js +45 -0
  11. package/dist/components/aspect-ratio.d.ts +9 -0
  12. package/dist/components/aspect-ratio.js +22 -0
  13. package/dist/components/autocomplete.d.ts +35 -0
  14. package/dist/components/autocomplete.js +160 -0
  15. package/dist/components/avatar.d.ts +17 -0
  16. package/dist/components/avatar.js +65 -0
  17. package/dist/components/badge.d.ts +15 -0
  18. package/dist/components/badge.js +46 -0
  19. package/dist/components/breadcrumb.d.ts +12 -0
  20. package/dist/components/breadcrumb.js +75 -0
  21. package/dist/components/button-group.d.ts +14 -0
  22. package/dist/components/button-group.js +45 -0
  23. package/dist/components/button-split.d.ts +19 -0
  24. package/dist/components/button-split.js +73 -0
  25. package/dist/components/button.d.ts +15 -0
  26. package/dist/components/button.js +54 -0
  27. package/dist/components/calendar.d.ts +63 -0
  28. package/dist/components/calendar.js +425 -0
  29. package/dist/components/card.d.ts +17 -0
  30. package/dist/components/card.js +139 -0
  31. package/dist/components/carousel.d.ts +59 -0
  32. package/dist/components/carousel.js +503 -0
  33. package/dist/components/checkbox.d.ts +16 -0
  34. package/dist/components/checkbox.js +86 -0
  35. package/dist/components/circular-progress.d.ts +28 -0
  36. package/dist/components/circular-progress.js +127 -0
  37. package/dist/components/collapsible.d.ts +8 -0
  38. package/dist/components/collapsible.js +27 -0
  39. package/dist/components/color-picker.d.ts +159 -0
  40. package/dist/components/color-picker.js +1589 -0
  41. package/dist/components/combobox.d.ts +46 -0
  42. package/dist/components/combobox.js +237 -0
  43. package/dist/components/command.d.ts +22 -0
  44. package/dist/components/command.js +129 -0
  45. package/dist/components/context-menu.d.ts +38 -0
  46. package/dist/components/context-menu.js +164 -0
  47. package/dist/components/copy-to-clipboard.d.ts +32 -0
  48. package/dist/components/copy-to-clipboard.js +83 -0
  49. package/dist/components/corner-badge.d.ts +22 -0
  50. package/dist/components/corner-badge.js +84 -0
  51. package/dist/components/dashboard-grid.d.ts +83 -0
  52. package/dist/components/dashboard-grid.js +486 -0
  53. package/dist/components/date-picker.d.ts +29 -0
  54. package/dist/components/date-picker.js +261 -0
  55. package/dist/components/dialog.d.ts +26 -0
  56. package/dist/components/dialog.js +97 -0
  57. package/dist/components/dot-matrix.d.ts +32 -0
  58. package/dist/components/dot-matrix.js +707 -0
  59. package/dist/components/draggable.d.ts +42 -0
  60. package/dist/components/draggable.js +346 -0
  61. package/dist/components/drawer.d.ts +66 -0
  62. package/dist/components/drawer.js +304 -0
  63. package/dist/components/empty.d.ts +14 -0
  64. package/dist/components/empty.js +75 -0
  65. package/dist/components/field.d.ts +12 -0
  66. package/dist/components/field.js +44 -0
  67. package/dist/components/fieldset.d.ts +7 -0
  68. package/dist/components/fieldset.js +21 -0
  69. package/dist/components/file-upload.d.ts +61 -0
  70. package/dist/components/file-upload.js +482 -0
  71. package/dist/components/form.d.ts +6 -0
  72. package/dist/components/form.js +14 -0
  73. package/dist/components/frame.d.ts +10 -0
  74. package/dist/components/frame.js +47 -0
  75. package/dist/components/gauge.d.ts +27 -0
  76. package/dist/components/gauge.js +74 -0
  77. package/dist/components/grid.d.ts +26 -0
  78. package/dist/components/grid.js +204 -0
  79. package/dist/components/group.d.ts +19 -0
  80. package/dist/components/group.js +45 -0
  81. package/dist/components/input-group.d.ts +15 -0
  82. package/dist/components/input-group.js +61 -0
  83. package/dist/components/input-otp.d.ts +24 -0
  84. package/dist/components/input-otp.js +50 -0
  85. package/dist/components/input-payment.d.ts +131 -0
  86. package/dist/components/input-payment.js +1140 -0
  87. package/dist/components/input-phone.d.ts +70 -0
  88. package/dist/components/input-phone.js +657 -0
  89. package/dist/components/input-sensitive.d.ts +12 -0
  90. package/dist/components/input-sensitive.js +169 -0
  91. package/dist/components/input.d.ts +13 -0
  92. package/dist/components/input.js +26 -0
  93. package/dist/components/kbd.d.ts +6 -0
  94. package/dist/components/kbd.js +19 -0
  95. package/dist/components/kinetic-click.d.ts +48 -0
  96. package/dist/components/kinetic-click.js +1184 -0
  97. package/dist/components/label.d.ts +6 -0
  98. package/dist/components/label.js +18 -0
  99. package/dist/components/list-box.d.ts +20 -0
  100. package/dist/components/list-box.js +148 -0
  101. package/dist/components/loader.d.ts +13 -0
  102. package/dist/components/loader.js +430 -0
  103. package/dist/components/marker.d.ts +15 -0
  104. package/dist/components/marker.js +59 -0
  105. package/dist/components/menu.d.ts +42 -0
  106. package/dist/components/menu.js +186 -0
  107. package/dist/components/menubar.d.ts +40 -0
  108. package/dist/components/menubar.js +107 -0
  109. package/dist/components/message.d.ts +33 -0
  110. package/dist/components/message.js +112 -0
  111. package/dist/components/meter.d.ts +10 -0
  112. package/dist/components/meter.js +42 -0
  113. package/dist/components/morphic-toast.d.ts +61 -0
  114. package/dist/components/morphic-toast.js +916 -0
  115. package/dist/components/navigation-menu.d.ts +26 -0
  116. package/dist/components/navigation-menu.js +116 -0
  117. package/dist/components/number-field.d.ts +15 -0
  118. package/dist/components/number-field.js +86 -0
  119. package/dist/components/option-picker.d.ts +18 -0
  120. package/dist/components/option-picker.js +89 -0
  121. package/dist/components/orb.d.ts +38 -0
  122. package/dist/components/orb.js +1413 -0
  123. package/dist/components/pagination.d.ts +25 -0
  124. package/dist/components/pagination.js +147 -0
  125. package/dist/components/popover.d.ts +22 -0
  126. package/dist/components/popover.js +79 -0
  127. package/dist/components/preview-card.d.ts +16 -0
  128. package/dist/components/preview-card.js +60 -0
  129. package/dist/components/progress.d.ts +21 -0
  130. package/dist/components/progress.js +139 -0
  131. package/dist/components/radio.d.ts +16 -0
  132. package/dist/components/radio.js +68 -0
  133. package/dist/components/resizable.d.ts +58 -0
  134. package/dist/components/resizable.js +964 -0
  135. package/dist/components/ruler-picker.d.ts +27 -0
  136. package/dist/components/ruler-picker.js +253 -0
  137. package/dist/components/scroll-area.d.ts +13 -0
  138. package/dist/components/scroll-area.js +34 -0
  139. package/dist/components/scroll-bar.d.ts +13 -0
  140. package/dist/components/scroll-bar.js +47 -0
  141. package/dist/components/select.d.ts +29 -0
  142. package/dist/components/select.js +140 -0
  143. package/dist/components/separator.d.ts +6 -0
  144. package/dist/components/separator.js +15 -0
  145. package/dist/components/sidebar.d.ts +65 -0
  146. package/dist/components/sidebar.js +408 -0
  147. package/dist/components/skeleton.d.ts +5 -0
  148. package/dist/components/skeleton.js +12 -0
  149. package/dist/components/slider.d.ts +12 -0
  150. package/dist/components/slider.js +96 -0
  151. package/dist/components/sortable.d.ts +44 -0
  152. package/dist/components/sortable.js +327 -0
  153. package/dist/components/switch.d.ts +15 -0
  154. package/dist/components/switch.js +63 -0
  155. package/dist/components/table.d.ts +12 -0
  156. package/dist/components/table.js +65 -0
  157. package/dist/components/tabs.d.ts +12 -0
  158. package/dist/components/tabs.js +39 -0
  159. package/dist/components/text.d.ts +14 -0
  160. package/dist/components/text.js +69 -0
  161. package/dist/components/textarea.d.ts +9 -0
  162. package/dist/components/textarea.js +20 -0
  163. package/dist/components/theme-provider.d.ts +52 -0
  164. package/dist/components/theme-provider.js +148 -0
  165. package/dist/components/timeline.d.ts +34 -0
  166. package/dist/components/timeline.js +147 -0
  167. package/dist/components/toast.d.ts +17 -0
  168. package/dist/components/toast.js +161 -0
  169. package/dist/components/toggle-group.d.ts +14 -0
  170. package/dist/components/toggle-group.js +53 -0
  171. package/dist/components/toggle.d.ts +11 -0
  172. package/dist/components/toggle.js +36 -0
  173. package/dist/components/toolbar.d.ts +11 -0
  174. package/dist/components/toolbar.js +49 -0
  175. package/dist/components/tooltip.d.ts +17 -0
  176. package/dist/components/tooltip.js +56 -0
  177. package/dist/components/waveform.d.ts +61 -0
  178. package/dist/components/waveform.js +500 -0
  179. package/dist/components/wheel-picker.d.ts +44 -0
  180. package/dist/components/wheel-picker.js +771 -0
  181. package/dist/hooks/use-copy-to-clipboard.d.ts +9 -0
  182. package/dist/hooks/use-copy-to-clipboard.js +36 -0
  183. package/dist/hooks/use-media-query.d.ts +21 -0
  184. package/dist/hooks/use-media-query.js +58 -0
  185. package/dist/styles.css +202 -0
  186. package/dist/themes/afterglow.css +89 -0
  187. package/dist/themes/afterglow.scoped.css +90 -0
  188. package/dist/themes/blacklight.css +89 -0
  189. package/dist/themes/blacklight.scoped.css +90 -0
  190. package/dist/themes/cathode.css +89 -0
  191. package/dist/themes/cathode.scoped.css +90 -0
  192. package/dist/themes/cel.css +89 -0
  193. package/dist/themes/cel.scoped.css +90 -0
  194. package/dist/themes/cinder.css +89 -0
  195. package/dist/themes/cinder.scoped.css +90 -0
  196. package/dist/themes/clay.css +89 -0
  197. package/dist/themes/clay.scoped.css +90 -0
  198. package/dist/themes/cobalt.css +89 -0
  199. package/dist/themes/cobalt.scoped.css +90 -0
  200. package/dist/themes/crimson.css +89 -0
  201. package/dist/themes/crimson.scoped.css +90 -0
  202. package/dist/themes/ion.css +89 -0
  203. package/dist/themes/ion.scoped.css +90 -0
  204. package/dist/themes/iris.css +89 -0
  205. package/dist/themes/iris.scoped.css +90 -0
  206. package/dist/themes/lagoon.css +89 -0
  207. package/dist/themes/lagoon.scoped.css +90 -0
  208. package/dist/themes/mochi.css +89 -0
  209. package/dist/themes/mochi.scoped.css +90 -0
  210. package/dist/themes/riso.css +89 -0
  211. package/dist/themes/riso.scoped.css +90 -0
  212. package/dist/themes/roast.css +89 -0
  213. package/dist/themes/roast.scoped.css +90 -0
  214. package/dist/themes/sage.css +89 -0
  215. package/dist/themes/sage.scoped.css +90 -0
  216. package/dist/themes/sepia.css +89 -0
  217. package/dist/themes/sepia.scoped.css +90 -0
  218. package/dist/themes/sorbet.css +89 -0
  219. package/dist/themes/sorbet.scoped.css +90 -0
  220. package/dist/themes/taffy.css +89 -0
  221. package/dist/themes/taffy.scoped.css +90 -0
  222. package/dist/themes/toxin.css +89 -0
  223. package/dist/themes/toxin.scoped.css +90 -0
  224. package/package.json +140 -0
@@ -0,0 +1,59 @@
1
+ "use client";
2
+ import { cn } from "cn";
3
+ import { jsx } from "react/jsx-runtime";
4
+ import { cva } from "class-variance-authority";
5
+ import { mergeProps } from "@base-ui/react/merge-props";
6
+ import { useRender } from "@base-ui/react/use-render";
7
+ //#region src/components/marker.tsx
8
+ const markerVariants = cva("group/marker relative flex min-h-4 w-full items-center gap-2 text-left text-muted-foreground transition-colors [a]:underline [a]:underline-offset-3 [a]:hover:text-foreground", {
9
+ variants: {
10
+ variant: {
11
+ default: "",
12
+ separator: "before:mr-1.5 before:h-px before:min-w-0 before:flex-1 before:bg-border after:ml-1.5 after:h-px after:min-w-0 after:flex-1 after:bg-border",
13
+ border: "border-b border-border pb-2"
14
+ },
15
+ size: {
16
+ default: "text-sm",
17
+ sm: "text-xs",
18
+ lg: "text-base font-semibold text-foreground"
19
+ }
20
+ },
21
+ defaultVariants: {
22
+ variant: "default",
23
+ size: "default"
24
+ }
25
+ });
26
+ function Marker({ className, variant = "default", size = "default", render, ...props }) {
27
+ const defaultProps = {
28
+ className: cn(markerVariants({
29
+ variant,
30
+ size,
31
+ className
32
+ })),
33
+ "data-slot": "marker",
34
+ "data-variant": variant,
35
+ "data-size": size
36
+ };
37
+ return useRender({
38
+ defaultTagName: "div",
39
+ props: mergeProps(defaultProps, props),
40
+ render
41
+ });
42
+ }
43
+ function MarkerIcon({ className, ...props }) {
44
+ return /* @__PURE__ */ jsx("span", {
45
+ "data-slot": "marker-icon",
46
+ "aria-hidden": "true",
47
+ className: cn("shrink-0 flex items-center justify-center text-muted-foreground/80 group-data-[size=sm]/marker:size-3.5 group-data-[size=default]/marker:size-4 group-data-[size=lg]/marker:size-5 [&_svg:not([class*='size-'])]:size-full", className),
48
+ ...props
49
+ });
50
+ }
51
+ function MarkerContent({ className, ...props }) {
52
+ return /* @__PURE__ */ jsx("span", {
53
+ "data-slot": "marker-content",
54
+ className: cn("min-w-0 break-words group-data-[variant=separator]/marker:flex-none group-data-[variant=separator]/marker:text-center", className),
55
+ ...props
56
+ });
57
+ }
58
+ //#endregion
59
+ export { Marker, MarkerContent, MarkerIcon, markerVariants };
@@ -0,0 +1,42 @@
1
+ import * as React$1 from "react";
2
+ import { Menu as Menu$1 } from "@base-ui/react/menu";
3
+ //#region src/components/menu.d.ts
4
+ declare const MenuCreateHandle: typeof Menu$1.createHandle;
5
+ declare const Menu: <Payload>(props: Menu$1.Root.Props<Payload>) => React$1.JSX.Element;
6
+ declare const MenuPortal: React$1.ForwardRefExoticComponent<Omit<import("@base-ui/react").ContextMenuPortalProps, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
7
+ declare function MenuTrigger({ className, children, ...props }: Menu$1.Trigger.Props): React$1.JSX.Element;
8
+ declare function MenuPopup({ children, className, sideOffset, align, alignOffset, side, anchor, hideArrow, ...props }: Menu$1.Popup.Props & {
9
+ align?: Menu$1.Positioner.Props["align"];
10
+ sideOffset?: Menu$1.Positioner.Props["sideOffset"];
11
+ alignOffset?: Menu$1.Positioner.Props["alignOffset"];
12
+ side?: Menu$1.Positioner.Props["side"];
13
+ anchor?: Menu$1.Positioner.Props["anchor"];
14
+ hideArrow?: boolean;
15
+ }): React$1.JSX.Element;
16
+ declare function MenuGroup(props: Menu$1.Group.Props): React$1.JSX.Element;
17
+ declare function MenuItem({ className, inset, variant, ...props }: Menu$1.Item.Props & {
18
+ inset?: boolean;
19
+ variant?: "default" | "destructive";
20
+ }): React$1.JSX.Element;
21
+ declare function MenuCheckboxItem({ className, children, checked, variant, ...props }: Menu$1.CheckboxItem.Props & {
22
+ variant?: "default" | "switch";
23
+ }): React$1.JSX.Element;
24
+ declare function MenuRadioGroup(props: Menu$1.RadioGroup.Props): React$1.JSX.Element;
25
+ declare function MenuRadioItem({ className, children, ...props }: Menu$1.RadioItem.Props): React$1.JSX.Element;
26
+ declare function MenuGroupLabel({ className, inset, ...props }: Menu$1.GroupLabel.Props & {
27
+ inset?: boolean;
28
+ }): React$1.JSX.Element;
29
+ declare function MenuSeparator({ className, ...props }: Menu$1.Separator.Props): React$1.JSX.Element;
30
+ declare function MenuShortcut({ className, ...props }: React$1.ComponentProps<"kbd">): React$1.JSX.Element;
31
+ declare function MenuSub(props: Menu$1.SubmenuRoot.Props): React$1.JSX.Element;
32
+ declare function MenuSubTrigger({ className, inset, children, ...props }: Menu$1.SubmenuTrigger.Props & {
33
+ inset?: boolean;
34
+ }): React$1.JSX.Element;
35
+ declare function MenuSubPopup({ className, sideOffset, alignOffset, align, ...props }: Menu$1.Popup.Props & {
36
+ align?: Menu$1.Positioner.Props["align"];
37
+ sideOffset?: Menu$1.Positioner.Props["sideOffset"];
38
+ alignOffset?: Menu$1.Positioner.Props["alignOffset"];
39
+ }): React$1.JSX.Element;
40
+ declare const MenuArrow: React$1.ForwardRefExoticComponent<Omit<import("@base-ui/react").ContextMenuArrowProps, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
41
+ //#endregion
42
+ export { Menu as DropdownMenu, Menu, MenuCheckboxItem as DropdownMenuCheckboxItem, MenuCheckboxItem, MenuPopup as DropdownMenuContent, MenuPopup, MenuCreateHandle as DropdownMenuCreateHandle, MenuCreateHandle, MenuGroup as DropdownMenuGroup, MenuGroup, MenuItem as DropdownMenuItem, MenuItem, MenuGroupLabel as DropdownMenuLabel, MenuGroupLabel, MenuPortal as DropdownMenuPortal, MenuPortal, MenuRadioGroup as DropdownMenuRadioGroup, MenuRadioGroup, MenuRadioItem as DropdownMenuRadioItem, MenuRadioItem, MenuSeparator as DropdownMenuSeparator, MenuSeparator, MenuShortcut as DropdownMenuShortcut, MenuShortcut, MenuSub as DropdownMenuSub, MenuSub, MenuSubPopup as DropdownMenuSubContent, MenuSubPopup, MenuSubTrigger as DropdownMenuSubTrigger, MenuSubTrigger, MenuTrigger as DropdownMenuTrigger, MenuTrigger, MenuArrow };
@@ -0,0 +1,186 @@
1
+ "use client";
2
+ import { cn } from "cn";
3
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
4
+ import { ChevronRight } from "xiod-icons/icons/ChevronRight";
5
+ import { Menu as Menu$1 } from "@base-ui/react/menu";
6
+ //#region src/components/menu.tsx
7
+ const MenuCreateHandle = Menu$1.createHandle;
8
+ const Menu = Menu$1.Root;
9
+ const MenuPortal = Menu$1.Portal;
10
+ function MenuTrigger({ className, children, ...props }) {
11
+ return /* @__PURE__ */ jsx(Menu$1.Trigger, {
12
+ className: cn(className),
13
+ "data-slot": "menu-trigger",
14
+ ...props,
15
+ children
16
+ });
17
+ }
18
+ function MenuPopup({ children, className, sideOffset = 8, align = "center", alignOffset, side = "bottom", anchor, hideArrow = false, ...props }) {
19
+ return /* @__PURE__ */ jsx(Menu$1.Portal, { children: /* @__PURE__ */ jsx(Menu$1.Positioner, {
20
+ align,
21
+ alignOffset,
22
+ anchor,
23
+ className: "z-50",
24
+ "data-slot": "menu-positioner",
25
+ side,
26
+ sideOffset,
27
+ children: /* @__PURE__ */ jsxs(Menu$1.Popup, {
28
+ className: cn("relative flex not-[class*='w-']:min-w-32 origin-(--transform-origin) rounded-lg border bg-popover shadow-lg/5 outline-none before:pointer-events-none before:absolute before:inset-0 before:rounded-[calc(var(--radius-lg)-1px)] before:shadow-[0_1px_--theme(--color-black/4%)] focus:outline-none transition-[scale,opacity] duration-100 ease-out data-ending-style:scale-97 data-starting-style:scale-97 data-ending-style:opacity-0 data-starting-style:opacity-0 dark:before:shadow-[0_-1px_--theme(--color-white/6%)]", className),
29
+ "data-slot": "menu-popup",
30
+ ...props,
31
+ children: [!hideArrow && /* @__PURE__ */ jsx(Menu$1.Arrow, {
32
+ className: "z-10 flex data-[side=bottom]:-top-[9px] data-[side=bottom]:rotate-0 data-[side=left]:right-[-14px] data-[side=left]:rotate-90 data-[side=right]:left-[-14px] data-[side=right]:-rotate-90 data-[side=top]:-bottom-[9px] data-[side=top]:rotate-180",
33
+ children: /* @__PURE__ */ jsx(ArrowSvg, {})
34
+ }), /* @__PURE__ */ jsx("div", {
35
+ className: "max-h-(--available-height) w-full overflow-y-auto p-1",
36
+ children
37
+ })]
38
+ })
39
+ }) });
40
+ }
41
+ function MenuGroup(props) {
42
+ return /* @__PURE__ */ jsx(Menu$1.Group, {
43
+ "data-slot": "menu-group",
44
+ ...props
45
+ });
46
+ }
47
+ function MenuItem({ className, inset, variant = "default", ...props }) {
48
+ return /* @__PURE__ */ jsx(Menu$1.Item, {
49
+ className: cn("[&>svg]:-mx-0.5 relative flex min-h-8 cursor-default select-none items-center gap-2 rounded-sm px-2 py-1 text-base text-foreground outline-none data-disabled:pointer-events-none data-highlighted:bg-accent data-inset:ps-8 data-[variant=destructive]:text-destructive-foreground data-highlighted:text-accent-foreground data-disabled:opacity-64 pointer-coarse:after:absolute pointer-coarse:after:size-full pointer-coarse:after:min-h-11 pointer-coarse:after:min-w-11 sm:min-h-7 sm:text-sm [&>svg:not([class*='opacity-'])]:opacity-80 [&>svg:not([class*='size-'])]:size-4.5 sm:[&>svg:not([class*='size-'])]:size-4 [&>svg]:pointer-events-none [&>svg]:shrink-0", className),
50
+ "data-inset": inset,
51
+ "data-slot": "menu-item",
52
+ "data-variant": variant,
53
+ ...props
54
+ });
55
+ }
56
+ function MenuCheckboxItem({ className, children, checked, variant = "default", ...props }) {
57
+ return /* @__PURE__ */ jsx(Menu$1.CheckboxItem, {
58
+ checked,
59
+ className: cn("relative grid min-h-8 in-data-[side=none]:min-w-[calc(var(--anchor-width)+1.25rem)] cursor-default items-center gap-2 rounded-sm py-1 ps-2 text-base text-foreground outline-none data-disabled:pointer-events-none data-highlighted:bg-accent data-highlighted:text-accent-foreground data-disabled:opacity-64 pointer-coarse:after:absolute pointer-coarse:after:size-full pointer-coarse:after:min-h-11 pointer-coarse:after:min-w-11 sm:min-h-7 sm:text-sm [&_svg:not([class*='size-'])]:size-4.5 sm:[&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0", variant === "switch" ? "grid-cols-[1fr_auto] gap-4 pe-1.5" : "grid-cols-[.75rem_1fr] pe-4", className),
60
+ "data-slot": "menu-checkbox-item",
61
+ ...props,
62
+ children: variant === "switch" ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("span", {
63
+ className: "col-start-1",
64
+ children
65
+ }), /* @__PURE__ */ jsx(Menu$1.CheckboxItemIndicator, {
66
+ className: "inset-shadow-[0_1px_--theme(--color-black/4%)] inline-flex h-[calc(var(--thumb-size)+2px)] w-[calc(var(--thumb-size)*2-2px)] shrink-0 items-center rounded-full p-px outline-none transition-[background-color,box-shadow] duration-200 [--thumb-size:--spacing(4)] focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-background data-checked:bg-primary data-unchecked:bg-input data-disabled:opacity-64 sm:[--thumb-size:--spacing(3)]",
67
+ keepMounted: true,
68
+ children: /* @__PURE__ */ jsx("span", { className: "pointer-events-none block aspect-square h-full in-[[data-slot=menu-checkbox-item][data-checked]]:origin-[var(--thumb-size)_50%] origin-left in-[[data-slot=menu-checkbox-item][data-checked]]:translate-x-[calc(var(--thumb-size)-4px)] in-[[data-slot=menu-checkbox-item]:active]:not-data-disabled:scale-x-110 in-[[data-slot=menu-checkbox-item]:active]:rounded-[var(--thumb-size)/calc(var(--thumb-size)*1.10)] rounded-(--thumb-size) bg-background shadow-sm/5 will-change-transform [transition:translate_.15s,border-radius_.15s,scale_.1s_.1s,transform-origin_.15s]" })
69
+ })] }) : /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(Menu$1.CheckboxItemIndicator, {
70
+ className: "-ms-0.5 col-start-1",
71
+ children: /* @__PURE__ */ jsx("svg", {
72
+ fill: "none",
73
+ height: "24",
74
+ stroke: "currentColor",
75
+ strokeLinecap: "round",
76
+ strokeLinejoin: "round",
77
+ strokeWidth: "2",
78
+ viewBox: "0 0 24 24",
79
+ width: "24",
80
+ xmlns: "http://www.w3.org/2000/svg",
81
+ children: /* @__PURE__ */ jsx("path", { d: "M5.252 12.7 10.2 18.63 18.748 5.37" })
82
+ })
83
+ }), /* @__PURE__ */ jsx("span", {
84
+ className: "col-start-2",
85
+ children
86
+ })] })
87
+ });
88
+ }
89
+ function MenuRadioGroup(props) {
90
+ return /* @__PURE__ */ jsx(Menu$1.RadioGroup, {
91
+ "data-slot": "menu-radio-group",
92
+ ...props
93
+ });
94
+ }
95
+ function MenuRadioItem({ className, children, ...props }) {
96
+ return /* @__PURE__ */ jsxs(Menu$1.RadioItem, {
97
+ className: cn("relative grid min-h-8 in-data-[side=none]:min-w-[calc(var(--anchor-width)+1.25rem)] cursor-default grid-cols-[.75rem_1fr] items-center gap-2 rounded-sm py-1 ps-2 pe-4 text-base text-foreground outline-none data-disabled:pointer-events-none data-highlighted:bg-accent data-highlighted:text-accent-foreground data-disabled:opacity-64 pointer-coarse:after:absolute pointer-coarse:after:size-full pointer-coarse:after:min-h-11 pointer-coarse:after:min-w-11 sm:min-h-7 sm:text-sm [&_svg:not([class*='size-'])]:size-4.5 sm:[&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0", className),
98
+ "data-slot": "menu-radio-item",
99
+ ...props,
100
+ children: [/* @__PURE__ */ jsx(Menu$1.RadioItemIndicator, {
101
+ className: "-ms-0.5 col-start-1",
102
+ children: /* @__PURE__ */ jsx("svg", {
103
+ fill: "none",
104
+ height: "24",
105
+ stroke: "currentColor",
106
+ strokeLinecap: "round",
107
+ strokeLinejoin: "round",
108
+ strokeWidth: "2",
109
+ viewBox: "0 0 24 24",
110
+ width: "24",
111
+ xmlns: "http://www.w3.org/2000/svg",
112
+ children: /* @__PURE__ */ jsx("path", { d: "M5.252 12.7 10.2 18.63 18.748 5.37" })
113
+ })
114
+ }), /* @__PURE__ */ jsx("span", {
115
+ className: "col-start-2",
116
+ children
117
+ })]
118
+ });
119
+ }
120
+ function MenuGroupLabel({ className, inset, ...props }) {
121
+ return /* @__PURE__ */ jsx(Menu$1.GroupLabel, {
122
+ className: cn("px-2 py-1.5 font-medium text-muted-foreground text-xs data-inset:ps-9 sm:data-inset:ps-8", className),
123
+ "data-inset": inset,
124
+ "data-slot": "menu-label",
125
+ ...props
126
+ });
127
+ }
128
+ function MenuSeparator({ className, ...props }) {
129
+ return /* @__PURE__ */ jsx(Menu$1.Separator, {
130
+ className: cn("mx-2 my-1 h-px bg-border", className),
131
+ "data-slot": "menu-separator",
132
+ ...props
133
+ });
134
+ }
135
+ function MenuShortcut({ className, ...props }) {
136
+ return /* @__PURE__ */ jsx("kbd", {
137
+ className: cn("ms-auto font-medium font-sans text-muted-foreground/72 text-xs tracking-widest", className),
138
+ "data-slot": "menu-shortcut",
139
+ ...props
140
+ });
141
+ }
142
+ function MenuSub(props) {
143
+ return /* @__PURE__ */ jsx(Menu$1.SubmenuRoot, {
144
+ "data-slot": "menu-sub",
145
+ ...props
146
+ });
147
+ }
148
+ function MenuSubTrigger({ className, inset, children, ...props }) {
149
+ return /* @__PURE__ */ jsxs(Menu$1.SubmenuTrigger, {
150
+ className: cn("[&>svg:not(:last-child)]:-mx-0.5 flex min-h-8 items-center gap-2 rounded-sm px-2 py-1 text-base text-foreground outline-none data-disabled:pointer-events-none data-highlighted:bg-accent data-popup-open:bg-accent data-inset:ps-8 data-highlighted:text-accent-foreground data-popup-open:text-accent-foreground data-disabled:opacity-64 sm:min-h-7 sm:text-sm [&_svg:not([class*='size-'])]:size-4.5 sm:[&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none", className),
151
+ "data-inset": inset,
152
+ "data-slot": "menu-sub-trigger",
153
+ ...props,
154
+ children: [children, /* @__PURE__ */ jsx(ChevronRight, { className: "-me-0.5 ms-auto opacity-80" })]
155
+ });
156
+ }
157
+ function MenuSubPopup({ className, sideOffset = 0, alignOffset, align = "start", ...props }) {
158
+ return /* @__PURE__ */ jsx(MenuPopup, {
159
+ align,
160
+ alignOffset: alignOffset ?? (align !== "center" ? -5 : void 0),
161
+ className: cn(className),
162
+ "data-slot": "menu-sub-content",
163
+ side: "inline-end",
164
+ sideOffset,
165
+ ...props
166
+ });
167
+ }
168
+ function ArrowSvg(props) {
169
+ return /* @__PURE__ */ jsxs("svg", {
170
+ width: "20",
171
+ height: "10",
172
+ viewBox: "0 0 20 10",
173
+ fill: "none",
174
+ ...props,
175
+ children: [/* @__PURE__ */ jsx("path", {
176
+ d: "M9.66437 2.60207L4.80758 6.97318C4.07308 7.63423 3.11989 8 2.13172 8H0V10H20V8H18.5349C17.5468 8 16.5936 7.63423 15.8591 6.97318L11.0023 2.60207C10.622 2.2598 10.0447 2.25979 9.66437 2.60207Z",
177
+ className: "fill-popover"
178
+ }), /* @__PURE__ */ jsx("path", {
179
+ d: "M10.3333 3.34539L5.47654 7.71648C4.55842 8.54279 3.36693 9 2.13172 9H0V8H2.13172C3.11989 8 4.07308 7.63423 4.80758 6.97318L9.66437 2.60207C10.0447 2.25979 10.622 2.2598 11.0023 2.60207L15.8591 6.97318C16.5936 7.63423 17.5468 8 18.5349 8H20V9H18.5349C17.2998 9 16.1083 8.54278 15.1901 7.71648L10.3333 3.34539Z",
180
+ className: "fill-border"
181
+ })]
182
+ });
183
+ }
184
+ const MenuArrow = Menu$1.Arrow;
185
+ //#endregion
186
+ export { Menu as DropdownMenu, Menu, MenuCheckboxItem as DropdownMenuCheckboxItem, MenuCheckboxItem, MenuPopup as DropdownMenuContent, MenuPopup, MenuCreateHandle as DropdownMenuCreateHandle, MenuCreateHandle, MenuGroup as DropdownMenuGroup, MenuGroup, MenuItem as DropdownMenuItem, MenuItem, MenuGroupLabel as DropdownMenuLabel, MenuGroupLabel, MenuPortal as DropdownMenuPortal, MenuPortal, MenuRadioGroup as DropdownMenuRadioGroup, MenuRadioGroup, MenuRadioItem as DropdownMenuRadioItem, MenuRadioItem, MenuSeparator as DropdownMenuSeparator, MenuSeparator, MenuShortcut as DropdownMenuShortcut, MenuShortcut, MenuSub as DropdownMenuSub, MenuSub, MenuSubPopup as DropdownMenuSubContent, MenuSubPopup, MenuSubTrigger as DropdownMenuSubTrigger, MenuSubTrigger, MenuTrigger as DropdownMenuTrigger, MenuTrigger, MenuArrow };
@@ -0,0 +1,40 @@
1
+ import * as React$1 from "react";
2
+ import { Menu } from "@base-ui/react/menu";
3
+ import { Menubar as Menubar$1 } from "@base-ui/react/menubar";
4
+ //#region src/components/menubar.d.ts
5
+ declare function Menubar({ className, ...props }: Menubar$1.Props): React$1.JSX.Element;
6
+ declare function MenubarMenu(props: Menu.Root.Props): React$1.JSX.Element;
7
+ declare function MenubarGroup(props: Menu.Group.Props): React$1.JSX.Element;
8
+ declare function MenubarPortal(props: Menu.Portal.Props): React$1.JSX.Element;
9
+ declare function MenubarSub(props: Menu.SubmenuRoot.Props): React$1.JSX.Element;
10
+ declare function MenubarRadioGroup(props: Menu.RadioGroup.Props): React$1.JSX.Element;
11
+ declare function MenubarTrigger({ className, ...props }: Menu.Trigger.Props): React$1.JSX.Element;
12
+ declare function MenubarPopup({ align, sideOffset, hideArrow, ...props }: Menu.Popup.Props & {
13
+ align?: Menu.Positioner.Props["align"];
14
+ sideOffset?: Menu.Positioner.Props["sideOffset"];
15
+ alignOffset?: Menu.Positioner.Props["alignOffset"];
16
+ side?: Menu.Positioner.Props["side"];
17
+ anchor?: Menu.Positioner.Props["anchor"];
18
+ /**
19
+ * Whether to hide the arrow indicator.
20
+ * @default false
21
+ */
22
+ hideArrow?: boolean;
23
+ }): React$1.JSX.Element;
24
+ declare function MenubarItem(props: Menu.Item.Props & {
25
+ inset?: boolean;
26
+ variant?: "default" | "destructive";
27
+ }): React$1.JSX.Element;
28
+ declare function MenubarCheckboxItem(props: Menu.CheckboxItem.Props): React$1.JSX.Element;
29
+ declare function MenubarRadioItem(props: Menu.RadioItem.Props): React$1.JSX.Element;
30
+ declare function MenubarLabel(props: Menu.GroupLabel.Props & {
31
+ inset?: boolean;
32
+ }): React$1.JSX.Element;
33
+ declare function MenubarSeparator(props: Menu.Separator.Props): React$1.JSX.Element;
34
+ declare function MenubarShortcut(props: React$1.HTMLAttributes<HTMLSpanElement>): React$1.JSX.Element;
35
+ declare function MenubarSubTrigger(props: Menu.SubmenuTrigger.Props & {
36
+ inset?: boolean;
37
+ }): React$1.JSX.Element;
38
+ declare function MenubarSubPopup(props: Menu.Popup.Props): React$1.JSX.Element;
39
+ //#endregion
40
+ export { Menubar, MenubarCheckboxItem, MenubarPopup as MenubarContent, MenubarPopup, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubPopup as MenubarSubContent, MenubarSubPopup, MenubarSubTrigger, MenubarTrigger };
@@ -0,0 +1,107 @@
1
+ "use client";
2
+ import { DropdownMenu as Menu$1, DropdownMenuCheckboxItem as MenuCheckboxItem, DropdownMenuContent as MenuPopup, DropdownMenuGroup as MenuGroup, DropdownMenuItem as MenuItem, DropdownMenuLabel as MenuGroupLabel, DropdownMenuPortal as MenuPortal, DropdownMenuRadioGroup as MenuRadioGroup, DropdownMenuRadioItem as MenuRadioItem, DropdownMenuSeparator as MenuSeparator, DropdownMenuShortcut as MenuShortcut, DropdownMenuSub as MenuSub, DropdownMenuSubContent as MenuSubPopup, DropdownMenuSubTrigger as MenuSubTrigger } from "./menu.js";
3
+ import { cn } from "cn";
4
+ import { jsx } from "react/jsx-runtime";
5
+ import { Menu } from "@base-ui/react/menu";
6
+ import { Menubar as Menubar$1 } from "@base-ui/react/menubar";
7
+ //#region src/components/menubar.tsx
8
+ function Menubar({ className, ...props }) {
9
+ return /* @__PURE__ */ jsx(Menubar$1, {
10
+ className: cn("relative flex flex-wrap min-h-10 sm:min-h-9 items-center gap-1 rounded-lg border bg-card not-dark:bg-clip-padding p-[calc(--spacing(1)-1px)] text-card-foreground shadow-xs/5 before:pointer-events-none before:absolute before:inset-0 before:rounded-[calc(var(--radius-lg)-1px)] before:shadow-[0_1px_--theme(--color-black/4%)] dark:before:shadow-[0_-1px_--theme(--color-white/6%)]", className),
11
+ "data-slot": "menubar",
12
+ ...props
13
+ });
14
+ }
15
+ function MenubarMenu(props) {
16
+ return /* @__PURE__ */ jsx(Menu$1, {
17
+ "data-slot": "menubar-menu",
18
+ ...props
19
+ });
20
+ }
21
+ function MenubarGroup(props) {
22
+ return /* @__PURE__ */ jsx(MenuGroup, {
23
+ "data-slot": "menubar-group",
24
+ ...props
25
+ });
26
+ }
27
+ function MenubarPortal(props) {
28
+ return /* @__PURE__ */ jsx(MenuPortal, { ...props });
29
+ }
30
+ function MenubarSub(props) {
31
+ return /* @__PURE__ */ jsx(MenuSub, {
32
+ "data-slot": "menubar-sub",
33
+ ...props
34
+ });
35
+ }
36
+ function MenubarRadioGroup(props) {
37
+ return /* @__PURE__ */ jsx(MenuRadioGroup, {
38
+ "data-slot": "menubar-radio-group",
39
+ ...props
40
+ });
41
+ }
42
+ function MenubarTrigger({ className, ...props }) {
43
+ return /* @__PURE__ */ jsx(Menu.Trigger, {
44
+ className: cn("relative flex cursor-default select-none items-center rounded-sm px-3 py-1.5 sm:py-1 text-base sm:text-sm font-medium outline-none focus-visible:bg-accent focus-visible:text-accent-foreground data-popup-open:bg-accent data-popup-open:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-64 pointer-coarse:after:absolute pointer-coarse:after:size-full pointer-coarse:after:min-h-11 pointer-coarse:after:min-w-11", className),
45
+ "data-slot": "menubar-trigger",
46
+ ...props
47
+ });
48
+ }
49
+ function MenubarPopup({ align = "start", sideOffset = 10, hideArrow = false, ...props }) {
50
+ return /* @__PURE__ */ jsx(MenuPopup, {
51
+ align,
52
+ "data-slot": "menubar-popup",
53
+ sideOffset,
54
+ hideArrow,
55
+ ...props
56
+ });
57
+ }
58
+ function MenubarItem(props) {
59
+ return /* @__PURE__ */ jsx(MenuItem, {
60
+ "data-slot": "menubar-item",
61
+ ...props
62
+ });
63
+ }
64
+ function MenubarCheckboxItem(props) {
65
+ return /* @__PURE__ */ jsx(MenuCheckboxItem, {
66
+ "data-slot": "menubar-checkbox-item",
67
+ ...props
68
+ });
69
+ }
70
+ function MenubarRadioItem(props) {
71
+ return /* @__PURE__ */ jsx(MenuRadioItem, {
72
+ "data-slot": "menubar-radio-item",
73
+ ...props
74
+ });
75
+ }
76
+ function MenubarLabel(props) {
77
+ return /* @__PURE__ */ jsx(MenuGroupLabel, {
78
+ "data-slot": "menubar-label",
79
+ ...props
80
+ });
81
+ }
82
+ function MenubarSeparator(props) {
83
+ return /* @__PURE__ */ jsx(MenuSeparator, {
84
+ "data-slot": "menubar-separator",
85
+ ...props
86
+ });
87
+ }
88
+ function MenubarShortcut(props) {
89
+ return /* @__PURE__ */ jsx(MenuShortcut, {
90
+ "data-slot": "menubar-shortcut",
91
+ ...props
92
+ });
93
+ }
94
+ function MenubarSubTrigger(props) {
95
+ return /* @__PURE__ */ jsx(MenuSubTrigger, {
96
+ "data-slot": "menubar-sub-trigger",
97
+ ...props
98
+ });
99
+ }
100
+ function MenubarSubPopup(props) {
101
+ return /* @__PURE__ */ jsx(MenuSubPopup, {
102
+ "data-slot": "menubar-sub-popup",
103
+ ...props
104
+ });
105
+ }
106
+ //#endregion
107
+ export { Menubar, MenubarCheckboxItem, MenubarPopup as MenubarContent, MenubarPopup, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubPopup as MenubarSubContent, MenubarSubPopup, MenubarSubTrigger, MenubarTrigger };
@@ -0,0 +1,33 @@
1
+ import { VariantProps } from "class-variance-authority";
2
+ import * as React$1 from "react";
3
+ import { useRender } from "@base-ui/react/use-render";
4
+ //#region src/components/message.d.ts
5
+ export interface MessageGroupProps extends React$1.HTMLAttributes<HTMLDivElement> {}
6
+ export declare function MessageGroup({ className, ...props }: MessageGroupProps): React$1.JSX.Element;
7
+ export interface MessageProps extends React$1.HTMLAttributes<HTMLDivElement> {
8
+ align?: "start" | "end";
9
+ }
10
+ export declare function Message({ className, align, ...props }: MessageProps): React$1.JSX.Element;
11
+ export interface MessageAvatarProps extends React$1.HTMLAttributes<HTMLDivElement> {}
12
+ export declare function MessageAvatar({ className, ...props }: MessageAvatarProps): React$1.JSX.Element;
13
+ export interface MessageContentProps extends React$1.HTMLAttributes<HTMLDivElement> {}
14
+ export declare function MessageContent({ className, ...props }: MessageContentProps): React$1.JSX.Element;
15
+ export interface MessageHeaderProps extends React$1.HTMLAttributes<HTMLDivElement> {}
16
+ export declare function MessageHeader({ className, ...props }: MessageHeaderProps): React$1.JSX.Element;
17
+ export interface MessageFooterProps extends React$1.HTMLAttributes<HTMLDivElement> {}
18
+ export declare function MessageFooter({ className, ...props }: MessageFooterProps): React$1.JSX.Element;
19
+ export declare const bubbleVariants: (props?: ({
20
+ variant?: "default" | "destructive" | "outline" | "secondary" | "ghost" | "muted" | "tinted" | null | undefined;
21
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
22
+ export interface BubbleProps extends React$1.HTMLAttributes<HTMLDivElement>, VariantProps<typeof bubbleVariants> {
23
+ align?: "start" | "end";
24
+ }
25
+ export declare function Bubble({ variant, align, className, ...props }: BubbleProps): React$1.JSX.Element;
26
+ export declare function BubbleContent({ className, render, ...props }: useRender.ComponentProps<"div">): React$1.ReactElement;
27
+ export declare const bubbleReactionsVariants: (props?: ({
28
+ side?: "top" | "bottom" | null | undefined;
29
+ align?: "start" | "end" | null | undefined;
30
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
31
+ export interface BubbleReactionsProps extends React$1.HTMLAttributes<HTMLDivElement>, VariantProps<typeof bubbleReactionsVariants> {}
32
+ export declare function BubbleReactions({ side, align, className, ...props }: BubbleReactionsProps): React$1.JSX.Element;
33
+ //#endregion
@@ -0,0 +1,112 @@
1
+ "use client";
2
+ import { cn } from "cn";
3
+ import { jsx } from "react/jsx-runtime";
4
+ import { cva } from "class-variance-authority";
5
+ import { mergeProps } from "@base-ui/react/merge-props";
6
+ import { useRender } from "@base-ui/react/use-render";
7
+ //#region src/components/message.tsx
8
+ function MessageGroup({ className, ...props }) {
9
+ return /* @__PURE__ */ jsx("div", {
10
+ "data-slot": "message-group",
11
+ className: cn("flex min-w-0 flex-col gap-2", className),
12
+ ...props
13
+ });
14
+ }
15
+ function Message({ className, align = "start", ...props }) {
16
+ return /* @__PURE__ */ jsx("div", {
17
+ "data-slot": "message",
18
+ "data-align": align,
19
+ className: cn("group/message relative flex w-full min-w-0 gap-3 text-sm data-[align=end]:flex-row-reverse", className),
20
+ ...props
21
+ });
22
+ }
23
+ function MessageAvatar({ className, ...props }) {
24
+ return /* @__PURE__ */ jsx("div", {
25
+ "data-slot": "message-avatar",
26
+ className: cn("flex w-8 h-8 shrink-0 items-center justify-center self-end overflow-hidden rounded-full bg-muted select-none group-has-data-[slot=message-footer]/message:-translate-y-6 transition-transform duration-200", className),
27
+ ...props
28
+ });
29
+ }
30
+ function MessageContent({ className, ...props }) {
31
+ return /* @__PURE__ */ jsx("div", {
32
+ "data-slot": "message-content",
33
+ className: cn("flex w-full min-w-0 flex-col gap-1.5 break-words group-data-[align=end]/message:*:data-[slot=bubble]:self-end group-data-[align=end]/message:*:data-[slot=message-header]:self-end group-data-[align=end]/message:*:data-[slot=message-footer]:self-end", className),
34
+ ...props
35
+ });
36
+ }
37
+ function MessageHeader({ className, ...props }) {
38
+ return /* @__PURE__ */ jsx("div", {
39
+ "data-slot": "message-header",
40
+ className: cn("flex max-w-full min-w-0 items-center px-3.5 text-xs font-medium text-muted-foreground", className),
41
+ ...props
42
+ });
43
+ }
44
+ function MessageFooter({ className, ...props }) {
45
+ return /* @__PURE__ */ jsx("div", {
46
+ "data-slot": "message-footer",
47
+ className: cn("flex max-w-full min-w-0 items-center px-3.5 text-xs font-medium text-muted-foreground group-data-[align=end]/message:justify-end", className),
48
+ ...props
49
+ });
50
+ }
51
+ const bubbleVariants = cva("group/bubble relative flex w-fit max-w-[80%] min-w-0 flex-col gap-1 transition-[color,background-color,border-color,opacity,box-shadow] duration-200", {
52
+ variants: { variant: {
53
+ default: "*:data-[slot=bubble-content]:bg-primary *:data-[slot=bubble-content]:text-primary-foreground [&_[data-slot=bubble-content]:is(button,a):hover]:bg-primary/90",
54
+ secondary: "*:data-[slot=bubble-content]:bg-secondary *:data-[slot=bubble-content]:text-secondary-foreground [&_[data-slot=bubble-content]:is(button,a):hover]:bg-secondary/80",
55
+ muted: "*:data-[slot=bubble-content]:bg-muted *:data-[slot=bubble-content]:text-foreground [&_[data-slot=bubble-content]:is(button,a):hover]:bg-muted/80",
56
+ tinted: "*:data-[slot=bubble-content]:bg-primary/8 *:data-[slot=bubble-content]:text-primary [&_[data-slot=bubble-content]:is(button,a):hover]:bg-primary/16",
57
+ outline: "*:data-[slot=bubble-content]:border-border *:data-[slot=bubble-content]:bg-background *:data-[slot=bubble-content]:text-foreground [&_[data-slot=bubble-content]:is(button,a):hover]:bg-muted",
58
+ ghost: "*:data-[slot=bubble-content]:border-none *:data-[slot=bubble-content]:bg-transparent *:data-[slot=bubble-content]:p-0 *:data-[slot=bubble-content]:text-foreground [&_[data-slot=bubble-content]:is(button,a):hover]:bg-muted/30",
59
+ destructive: "*:data-[slot=bubble-content]:bg-destructive/10 *:data-[slot=bubble-content]:text-destructive [&_[data-slot=bubble-content]:is(button,a):hover]:bg-destructive/20"
60
+ } },
61
+ defaultVariants: { variant: "default" }
62
+ });
63
+ function Bubble({ variant = "default", align = "start", className, ...props }) {
64
+ return /* @__PURE__ */ jsx("div", {
65
+ "data-slot": "bubble",
66
+ "data-variant": variant,
67
+ "data-align": align,
68
+ className: cn(bubbleVariants({ variant }), "has-[[data-slot=bubble-reactions][data-side=bottom]]:mb-2.5", "has-[[data-slot=bubble-reactions][data-side=top]]:mt-2.5", className),
69
+ ...props
70
+ });
71
+ }
72
+ function BubbleContent({ className, render, ...props }) {
73
+ const defaultProps = {
74
+ className: cn("w-fit max-w-full min-w-0 overflow-hidden rounded-3xl border border-transparent px-[calc(--spacing(4)-1px)] py-[calc(--spacing(2.5)-1px)] text-sm leading-relaxed break-words", "group-data-[align=end]/bubble:self-end group-data-[align=end]/bubble:rounded-tr-md", "group-data-[align=start]/bubble:self-start group-data-[align=start]/bubble:rounded-tl-md", "[button]:text-left [button,a]:transition-colors [button,a]:outline-none [button,a]:focus-visible:border-ring [button,a]:focus-visible:ring-2 [button,a]:focus-visible:ring-ring/30", className),
75
+ "data-slot": "bubble-content"
76
+ };
77
+ return useRender({
78
+ defaultTagName: "div",
79
+ props: mergeProps(defaultProps, props),
80
+ render
81
+ });
82
+ }
83
+ const bubbleReactionsVariants = cva("absolute z-10 flex w-fit shrink-0 items-center justify-center gap-1 rounded-full bg-muted border border-border px-[calc(--spacing(1.5)-1px)] py-[calc(--spacing(0.5)-1px)] text-xs select-none shadow-sm/5 transition-[transform,opacity,color,background-color,border-color,box-shadow]", {
84
+ variants: {
85
+ side: {
86
+ top: "top-0 -translate-y-1/2",
87
+ bottom: "bottom-0 translate-y-1/2"
88
+ },
89
+ align: {
90
+ start: "left-4",
91
+ end: "right-4"
92
+ }
93
+ },
94
+ defaultVariants: {
95
+ side: "bottom",
96
+ align: "end"
97
+ }
98
+ });
99
+ function BubbleReactions({ side = "bottom", align = "end", className, ...props }) {
100
+ return /* @__PURE__ */ jsx("div", {
101
+ "data-slot": "bubble-reactions",
102
+ "data-align": align,
103
+ "data-side": side,
104
+ className: cn(bubbleReactionsVariants({
105
+ side,
106
+ align
107
+ }), className),
108
+ ...props
109
+ });
110
+ }
111
+ //#endregion
112
+ export { Bubble, BubbleContent, BubbleReactions, Message, MessageAvatar, MessageContent, MessageFooter, MessageGroup, MessageHeader, bubbleReactionsVariants, bubbleVariants };
@@ -0,0 +1,10 @@
1
+ import * as React$1 from "react";
2
+ import { Meter as Meter$1 } from "@base-ui/react/meter";
3
+ //#region src/components/meter.d.ts
4
+ declare function Meter({ className, children, ...props }: Meter$1.Root.Props): React$1.JSX.Element;
5
+ declare function MeterLabel({ className, ...props }: Meter$1.Label.Props): React$1.JSX.Element;
6
+ declare function MeterTrack({ className, ...props }: Meter$1.Track.Props): React$1.JSX.Element;
7
+ declare function MeterIndicator({ className, ...props }: Meter$1.Indicator.Props): React$1.JSX.Element;
8
+ declare function MeterValue({ className, ...props }: Meter$1.Value.Props): React$1.JSX.Element;
9
+ //#endregion
10
+ export { Meter, MeterIndicator, MeterLabel, MeterTrack, MeterValue };
@@ -0,0 +1,42 @@
1
+ "use client";
2
+ import { cn } from "cn";
3
+ import { jsx } from "react/jsx-runtime";
4
+ import { Meter as Meter$1 } from "@base-ui/react/meter";
5
+ //#region src/components/meter.tsx
6
+ function Meter({ className, children, ...props }) {
7
+ return /* @__PURE__ */ jsx(Meter$1.Root, {
8
+ className: cn("flex w-full flex-col gap-2", className),
9
+ ...props,
10
+ children: children ? children : /* @__PURE__ */ jsx(MeterTrack, { children: /* @__PURE__ */ jsx(MeterIndicator, {}) })
11
+ });
12
+ }
13
+ function MeterLabel({ className, ...props }) {
14
+ return /* @__PURE__ */ jsx(Meter$1.Label, {
15
+ className: cn("font-medium text-foreground text-sm", className),
16
+ "data-slot": "meter-label",
17
+ ...props
18
+ });
19
+ }
20
+ function MeterTrack({ className, ...props }) {
21
+ return /* @__PURE__ */ jsx(Meter$1.Track, {
22
+ className: cn("block h-2 w-full overflow-hidden bg-input inset-shadow-[0_1px_2px_var(--input)]", className),
23
+ "data-slot": "meter-track",
24
+ ...props
25
+ });
26
+ }
27
+ function MeterIndicator({ className, ...props }) {
28
+ return /* @__PURE__ */ jsx(Meter$1.Indicator, {
29
+ className: cn("bg-primary inset-shadow-[0_1px_--alpha(var(--primary-foreground)/16%)] transition-[width,transform] duration-500", className),
30
+ "data-slot": "meter-indicator",
31
+ ...props
32
+ });
33
+ }
34
+ function MeterValue({ className, ...props }) {
35
+ return /* @__PURE__ */ jsx(Meter$1.Value, {
36
+ className: cn("text-foreground text-sm tabular-nums", className),
37
+ "data-slot": "meter-value",
38
+ ...props
39
+ });
40
+ }
41
+ //#endregion
42
+ export { Meter, MeterIndicator, MeterLabel, MeterTrack, MeterValue };