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.
- package/LICENSE +73 -0
- package/README.md +167 -0
- package/dist/components/accordion.d.ts +9 -0
- package/dist/components/accordion.js +46 -0
- package/dist/components/agent-steps.d.ts +47 -0
- package/dist/components/agent-steps.js +223 -0
- package/dist/components/alert-dialog.d.ts +21 -0
- package/dist/components/alert-dialog.js +74 -0
- package/dist/components/alert.d.ts +12 -0
- package/dist/components/alert.js +45 -0
- package/dist/components/aspect-ratio.d.ts +9 -0
- package/dist/components/aspect-ratio.js +22 -0
- package/dist/components/autocomplete.d.ts +35 -0
- package/dist/components/autocomplete.js +160 -0
- package/dist/components/avatar.d.ts +17 -0
- package/dist/components/avatar.js +65 -0
- package/dist/components/badge.d.ts +15 -0
- package/dist/components/badge.js +46 -0
- package/dist/components/breadcrumb.d.ts +12 -0
- package/dist/components/breadcrumb.js +75 -0
- package/dist/components/button-group.d.ts +14 -0
- package/dist/components/button-group.js +45 -0
- package/dist/components/button-split.d.ts +19 -0
- package/dist/components/button-split.js +73 -0
- package/dist/components/button.d.ts +15 -0
- package/dist/components/button.js +54 -0
- package/dist/components/calendar.d.ts +63 -0
- package/dist/components/calendar.js +425 -0
- package/dist/components/card.d.ts +17 -0
- package/dist/components/card.js +139 -0
- package/dist/components/carousel.d.ts +59 -0
- package/dist/components/carousel.js +503 -0
- package/dist/components/checkbox.d.ts +16 -0
- package/dist/components/checkbox.js +86 -0
- package/dist/components/circular-progress.d.ts +28 -0
- package/dist/components/circular-progress.js +127 -0
- package/dist/components/collapsible.d.ts +8 -0
- package/dist/components/collapsible.js +27 -0
- package/dist/components/color-picker.d.ts +159 -0
- package/dist/components/color-picker.js +1589 -0
- package/dist/components/combobox.d.ts +46 -0
- package/dist/components/combobox.js +237 -0
- package/dist/components/command.d.ts +22 -0
- package/dist/components/command.js +129 -0
- package/dist/components/context-menu.d.ts +38 -0
- package/dist/components/context-menu.js +164 -0
- package/dist/components/copy-to-clipboard.d.ts +32 -0
- package/dist/components/copy-to-clipboard.js +83 -0
- package/dist/components/corner-badge.d.ts +22 -0
- package/dist/components/corner-badge.js +84 -0
- package/dist/components/dashboard-grid.d.ts +83 -0
- package/dist/components/dashboard-grid.js +486 -0
- package/dist/components/date-picker.d.ts +29 -0
- package/dist/components/date-picker.js +261 -0
- package/dist/components/dialog.d.ts +26 -0
- package/dist/components/dialog.js +97 -0
- package/dist/components/dot-matrix.d.ts +32 -0
- package/dist/components/dot-matrix.js +707 -0
- package/dist/components/draggable.d.ts +42 -0
- package/dist/components/draggable.js +346 -0
- package/dist/components/drawer.d.ts +66 -0
- package/dist/components/drawer.js +304 -0
- package/dist/components/empty.d.ts +14 -0
- package/dist/components/empty.js +75 -0
- package/dist/components/field.d.ts +12 -0
- package/dist/components/field.js +44 -0
- package/dist/components/fieldset.d.ts +7 -0
- package/dist/components/fieldset.js +21 -0
- package/dist/components/file-upload.d.ts +61 -0
- package/dist/components/file-upload.js +482 -0
- package/dist/components/form.d.ts +6 -0
- package/dist/components/form.js +14 -0
- package/dist/components/frame.d.ts +10 -0
- package/dist/components/frame.js +47 -0
- package/dist/components/gauge.d.ts +27 -0
- package/dist/components/gauge.js +74 -0
- package/dist/components/grid.d.ts +26 -0
- package/dist/components/grid.js +204 -0
- package/dist/components/group.d.ts +19 -0
- package/dist/components/group.js +45 -0
- package/dist/components/input-group.d.ts +15 -0
- package/dist/components/input-group.js +61 -0
- package/dist/components/input-otp.d.ts +24 -0
- package/dist/components/input-otp.js +50 -0
- package/dist/components/input-payment.d.ts +131 -0
- package/dist/components/input-payment.js +1140 -0
- package/dist/components/input-phone.d.ts +70 -0
- package/dist/components/input-phone.js +657 -0
- package/dist/components/input-sensitive.d.ts +12 -0
- package/dist/components/input-sensitive.js +169 -0
- package/dist/components/input.d.ts +13 -0
- package/dist/components/input.js +26 -0
- package/dist/components/kbd.d.ts +6 -0
- package/dist/components/kbd.js +19 -0
- package/dist/components/kinetic-click.d.ts +48 -0
- package/dist/components/kinetic-click.js +1184 -0
- package/dist/components/label.d.ts +6 -0
- package/dist/components/label.js +18 -0
- package/dist/components/list-box.d.ts +20 -0
- package/dist/components/list-box.js +148 -0
- package/dist/components/loader.d.ts +13 -0
- package/dist/components/loader.js +430 -0
- package/dist/components/marker.d.ts +15 -0
- package/dist/components/marker.js +59 -0
- package/dist/components/menu.d.ts +42 -0
- package/dist/components/menu.js +186 -0
- package/dist/components/menubar.d.ts +40 -0
- package/dist/components/menubar.js +107 -0
- package/dist/components/message.d.ts +33 -0
- package/dist/components/message.js +112 -0
- package/dist/components/meter.d.ts +10 -0
- package/dist/components/meter.js +42 -0
- package/dist/components/morphic-toast.d.ts +61 -0
- package/dist/components/morphic-toast.js +916 -0
- package/dist/components/navigation-menu.d.ts +26 -0
- package/dist/components/navigation-menu.js +116 -0
- package/dist/components/number-field.d.ts +15 -0
- package/dist/components/number-field.js +86 -0
- package/dist/components/option-picker.d.ts +18 -0
- package/dist/components/option-picker.js +89 -0
- package/dist/components/orb.d.ts +38 -0
- package/dist/components/orb.js +1413 -0
- package/dist/components/pagination.d.ts +25 -0
- package/dist/components/pagination.js +147 -0
- package/dist/components/popover.d.ts +22 -0
- package/dist/components/popover.js +79 -0
- package/dist/components/preview-card.d.ts +16 -0
- package/dist/components/preview-card.js +60 -0
- package/dist/components/progress.d.ts +21 -0
- package/dist/components/progress.js +139 -0
- package/dist/components/radio.d.ts +16 -0
- package/dist/components/radio.js +68 -0
- package/dist/components/resizable.d.ts +58 -0
- package/dist/components/resizable.js +964 -0
- package/dist/components/ruler-picker.d.ts +27 -0
- package/dist/components/ruler-picker.js +253 -0
- package/dist/components/scroll-area.d.ts +13 -0
- package/dist/components/scroll-area.js +34 -0
- package/dist/components/scroll-bar.d.ts +13 -0
- package/dist/components/scroll-bar.js +47 -0
- package/dist/components/select.d.ts +29 -0
- package/dist/components/select.js +140 -0
- package/dist/components/separator.d.ts +6 -0
- package/dist/components/separator.js +15 -0
- package/dist/components/sidebar.d.ts +65 -0
- package/dist/components/sidebar.js +408 -0
- package/dist/components/skeleton.d.ts +5 -0
- package/dist/components/skeleton.js +12 -0
- package/dist/components/slider.d.ts +12 -0
- package/dist/components/slider.js +96 -0
- package/dist/components/sortable.d.ts +44 -0
- package/dist/components/sortable.js +327 -0
- package/dist/components/switch.d.ts +15 -0
- package/dist/components/switch.js +63 -0
- package/dist/components/table.d.ts +12 -0
- package/dist/components/table.js +65 -0
- package/dist/components/tabs.d.ts +12 -0
- package/dist/components/tabs.js +39 -0
- package/dist/components/text.d.ts +14 -0
- package/dist/components/text.js +69 -0
- package/dist/components/textarea.d.ts +9 -0
- package/dist/components/textarea.js +20 -0
- package/dist/components/theme-provider.d.ts +52 -0
- package/dist/components/theme-provider.js +148 -0
- package/dist/components/timeline.d.ts +34 -0
- package/dist/components/timeline.js +147 -0
- package/dist/components/toast.d.ts +17 -0
- package/dist/components/toast.js +161 -0
- package/dist/components/toggle-group.d.ts +14 -0
- package/dist/components/toggle-group.js +53 -0
- package/dist/components/toggle.d.ts +11 -0
- package/dist/components/toggle.js +36 -0
- package/dist/components/toolbar.d.ts +11 -0
- package/dist/components/toolbar.js +49 -0
- package/dist/components/tooltip.d.ts +17 -0
- package/dist/components/tooltip.js +56 -0
- package/dist/components/waveform.d.ts +61 -0
- package/dist/components/waveform.js +500 -0
- package/dist/components/wheel-picker.d.ts +44 -0
- package/dist/components/wheel-picker.js +771 -0
- package/dist/hooks/use-copy-to-clipboard.d.ts +9 -0
- package/dist/hooks/use-copy-to-clipboard.js +36 -0
- package/dist/hooks/use-media-query.d.ts +21 -0
- package/dist/hooks/use-media-query.js +58 -0
- package/dist/styles.css +202 -0
- package/dist/themes/afterglow.css +89 -0
- package/dist/themes/afterglow.scoped.css +90 -0
- package/dist/themes/blacklight.css +89 -0
- package/dist/themes/blacklight.scoped.css +90 -0
- package/dist/themes/cathode.css +89 -0
- package/dist/themes/cathode.scoped.css +90 -0
- package/dist/themes/cel.css +89 -0
- package/dist/themes/cel.scoped.css +90 -0
- package/dist/themes/cinder.css +89 -0
- package/dist/themes/cinder.scoped.css +90 -0
- package/dist/themes/clay.css +89 -0
- package/dist/themes/clay.scoped.css +90 -0
- package/dist/themes/cobalt.css +89 -0
- package/dist/themes/cobalt.scoped.css +90 -0
- package/dist/themes/crimson.css +89 -0
- package/dist/themes/crimson.scoped.css +90 -0
- package/dist/themes/ion.css +89 -0
- package/dist/themes/ion.scoped.css +90 -0
- package/dist/themes/iris.css +89 -0
- package/dist/themes/iris.scoped.css +90 -0
- package/dist/themes/lagoon.css +89 -0
- package/dist/themes/lagoon.scoped.css +90 -0
- package/dist/themes/mochi.css +89 -0
- package/dist/themes/mochi.scoped.css +90 -0
- package/dist/themes/riso.css +89 -0
- package/dist/themes/riso.scoped.css +90 -0
- package/dist/themes/roast.css +89 -0
- package/dist/themes/roast.scoped.css +90 -0
- package/dist/themes/sage.css +89 -0
- package/dist/themes/sage.scoped.css +90 -0
- package/dist/themes/sepia.css +89 -0
- package/dist/themes/sepia.scoped.css +90 -0
- package/dist/themes/sorbet.css +89 -0
- package/dist/themes/sorbet.scoped.css +90 -0
- package/dist/themes/taffy.css +89 -0
- package/dist/themes/taffy.scoped.css +90 -0
- package/dist/themes/toxin.css +89 -0
- package/dist/themes/toxin.scoped.css +90 -0
- 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 };
|