@siyahi/ui 0.1.9-next.34 → 0.1.9-next.36

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 (101) hide show
  1. package/DESIGN.md +43 -26
  2. package/README.md +12 -14
  3. package/THIRD_PARTY_NOTICES.md +10 -11
  4. package/agents/examples/app-sidebar.tsx +0 -2
  5. package/agents/examples/chart-panels.tsx +0 -4
  6. package/agents/examples/{section-cards-select.tsx → metric-strip-select.tsx} +5 -5
  7. package/agents/examples/metric-strip-trend.tsx +33 -0
  8. package/agents/examples/overview-dashboard.tsx +4 -4
  9. package/agents/examples/scatter-chart.tsx +0 -1
  10. package/agents/examples/stale-blocks.tsx +9 -9
  11. package/agents/examples/surfaces.tsx +2 -3
  12. package/agents/manifest.json +27 -49
  13. package/dist/components/registry/dashboardcn/kpi-row-card.d.ts +14 -6
  14. package/dist/components/registry/dashboardcn/kpi-row-card.js +49 -32
  15. package/dist/components/registry/niko-table/core/data-table-error-boundary.js +1 -1
  16. package/dist/components/registry/niko-table/filters/table-faceted-filter.js +2 -2
  17. package/dist/components/siyahi/panel-grid.d.ts +5 -6
  18. package/dist/components/siyahi/panel-grid.js +10 -9
  19. package/dist/components/siyahi/scatter-chart.d.ts +3 -3
  20. package/dist/components/siyahi/scatter-chart.js +6 -3
  21. package/dist/components/siyahi/siyahi-provider.d.ts +5 -6
  22. package/dist/components/siyahi/siyahi-provider.js +1 -1
  23. package/dist/components/siyahi/status-badge.js +1 -0
  24. package/dist/components/ui/alert-dialog.d.ts +20 -0
  25. package/dist/components/ui/alert-dialog.js +94 -0
  26. package/dist/components/ui/aspect-ratio.d.ts +6 -0
  27. package/dist/components/ui/aspect-ratio.js +13 -0
  28. package/dist/components/ui/attachment.d.ts +25 -0
  29. package/dist/components/ui/attachment.js +104 -0
  30. package/dist/components/ui/bubble.d.ts +18 -0
  31. package/dist/components/ui/bubble.js +73 -0
  32. package/dist/components/ui/button-group.d.ts +12 -0
  33. package/dist/components/ui/button-group.js +41 -0
  34. package/dist/components/ui/button.d.ts +1 -1
  35. package/dist/components/ui/button.js +1 -1
  36. package/dist/components/ui/carousel.d.ts +30 -0
  37. package/dist/components/ui/carousel.js +131 -0
  38. package/dist/components/ui/checkbox.d.ts +5 -0
  39. package/dist/components/ui/checkbox.js +20 -0
  40. package/dist/components/ui/combobox.d.ts +26 -0
  41. package/dist/components/ui/combobox.js +162 -0
  42. package/dist/components/ui/command.js +1 -1
  43. package/dist/components/ui/direction.d.ts +2 -0
  44. package/dist/components/ui/direction.js +1 -0
  45. package/dist/components/ui/drawer.d.ts +18 -0
  46. package/dist/components/ui/drawer.js +123 -0
  47. package/dist/components/ui/empty.d.ts +13 -0
  48. package/dist/components/ui/empty.js +59 -0
  49. package/dist/components/ui/field.js +1 -1
  50. package/dist/components/ui/hover-card.d.ts +7 -0
  51. package/dist/components/ui/hover-card.js +36 -0
  52. package/dist/components/ui/input-otp.d.ts +13 -0
  53. package/dist/components/ui/input-otp.js +46 -0
  54. package/dist/components/ui/item.d.ts +24 -0
  55. package/dist/components/ui/item.js +121 -0
  56. package/dist/components/ui/kbd.d.ts +5 -0
  57. package/dist/components/ui/kbd.js +19 -0
  58. package/dist/components/ui/marker.d.ts +12 -0
  59. package/dist/components/ui/marker.js +43 -0
  60. package/dist/components/ui/menubar.d.ts +31 -0
  61. package/dist/components/ui/menubar.js +136 -0
  62. package/dist/components/ui/message-scroller.d.ts +12 -0
  63. package/dist/components/ui/message-scroller.js +60 -0
  64. package/dist/components/ui/message.d.ts +12 -0
  65. package/dist/components/ui/message.js +49 -0
  66. package/dist/components/ui/native-select.d.ts +10 -0
  67. package/dist/components/ui/native-select.js +38 -0
  68. package/dist/components/ui/navigation-menu.d.ts +13 -0
  69. package/dist/components/ui/navigation-menu.js +82 -0
  70. package/dist/components/ui/pagination.d.ts +19 -0
  71. package/dist/components/ui/pagination.js +80 -0
  72. package/dist/components/ui/questionnaire.d.ts +21 -0
  73. package/dist/components/ui/questionnaire.js +170 -0
  74. package/dist/components/ui/radio-group.d.ts +7 -0
  75. package/dist/components/ui/radio-group.js +26 -0
  76. package/dist/components/ui/resizable.d.ts +9 -0
  77. package/dist/components/ui/resizable.js +28 -0
  78. package/dist/components/ui/sidebar.js +1 -1
  79. package/dist/components/ui/spinner.d.ts +4 -0
  80. package/dist/components/ui/spinner.js +15 -0
  81. package/dist/components/ui/switch.d.ts +7 -0
  82. package/dist/components/ui/switch.js +19 -0
  83. package/dist/components/ui/toast.d.ts +18 -0
  84. package/dist/components/ui/toast.js +123 -0
  85. package/dist/components/ui/trace.d.ts +20 -0
  86. package/dist/components/ui/trace.js +75 -0
  87. package/dist/index.d.ts +32 -3
  88. package/dist/index.js +35 -5
  89. package/dist/lib/chart-frame.d.ts +1 -1
  90. package/dist/lib/chart-frame.js +3 -1
  91. package/dist/lib/chart-series.d.ts +10 -2
  92. package/dist/lib/chart-series.js +10 -0
  93. package/package.json +5 -3
  94. package/registry.lock.json +0 -8
  95. package/styles/siyahi.css +257 -109
  96. package/agents/examples/section-cards-trend.tsx +0 -32
  97. package/agents/examples/section-cards.tsx +0 -48
  98. package/agents/report-rules.json +0 -7
  99. package/dist/components/registry/dashboard-01/section-cards.d.ts +0 -30
  100. package/dist/components/registry/dashboard-01/section-cards.js +0 -74
  101. package/report.css +0 -146
@@ -0,0 +1,123 @@
1
+ "use client";
2
+ import { cn } from "cn";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ import * as React$1 from "react";
5
+ import { Drawer as Drawer$1 } from "@base-ui/react/drawer";
6
+ //#region src/components/ui/drawer.tsx
7
+ const DrawerContext = React$1.createContext(null);
8
+ function useDrawer() {
9
+ const context = React$1.useContext(DrawerContext);
10
+ if (!context) throw new Error("useDrawer must be used within a Drawer.");
11
+ return context;
12
+ }
13
+ function Drawer({ modal = true, showSwipeHandle = false, snapPoints, swipeDirection = "down", ...props }) {
14
+ const hasSnapPoints = snapPoints != null && snapPoints.length > 0;
15
+ const contextValue = React$1.useMemo(() => ({
16
+ hasSnapPoints,
17
+ modal,
18
+ showSwipeHandle,
19
+ swipeDirection
20
+ }), [
21
+ hasSnapPoints,
22
+ modal,
23
+ showSwipeHandle,
24
+ swipeDirection
25
+ ]);
26
+ return /* @__PURE__ */ jsx(DrawerContext.Provider, {
27
+ value: contextValue,
28
+ children: /* @__PURE__ */ jsx(Drawer$1.Root, {
29
+ "data-slot": "drawer",
30
+ modal,
31
+ snapPoints,
32
+ swipeDirection,
33
+ ...props
34
+ })
35
+ });
36
+ }
37
+ function DrawerTrigger({ ...props }) {
38
+ return /* @__PURE__ */ jsx(Drawer$1.Trigger, {
39
+ "data-slot": "drawer-trigger",
40
+ ...props
41
+ });
42
+ }
43
+ function DrawerPortal({ ...props }) {
44
+ return /* @__PURE__ */ jsx(Drawer$1.Portal, {
45
+ "data-slot": "drawer-portal",
46
+ ...props
47
+ });
48
+ }
49
+ function DrawerClose({ ...props }) {
50
+ return /* @__PURE__ */ jsx(Drawer$1.Close, {
51
+ "data-slot": "drawer-close",
52
+ ...props
53
+ });
54
+ }
55
+ function DrawerOverlay({ className, ...props }) {
56
+ return /* @__PURE__ */ jsx(Drawer$1.Backdrop, {
57
+ "data-slot": "drawer-overlay",
58
+ className: cn("fixed inset-0 z-50 min-h-dvh bg-black/10 opacity-[max(var(--drawer-overlay-min-opacity,0),calc(1-var(--drawer-swipe-progress)))] transition-opacity duration-450 ease-[cubic-bezier(0.32,0.72,0,1)] select-none data-ending-style:pointer-events-none data-ending-style:opacity-0 data-ending-style:duration-[calc(var(--drawer-swipe-strength)*400ms)] data-snap-points:[--drawer-overlay-min-opacity:0.5] data-starting-style:opacity-0 data-swiping:duration-0 supports-backdrop-filter:backdrop-blur-xs supports-[-webkit-touch-callout:none]:absolute", className),
59
+ ...props
60
+ });
61
+ }
62
+ function DrawerSwipeHandle({ className, ...props }) {
63
+ return /* @__PURE__ */ jsx("div", {
64
+ "data-slot": "drawer-swipe-handle",
65
+ "aria-hidden": "true",
66
+ className: cn("relative z-10 flex shrink-0 cursor-grab transition-opacity duration-200 group-data-nested-drawer-open/drawer-popup:opacity-0 group-data-nested-drawer-swiping/drawer-popup:opacity-100 group-data-[swipe-axis=x]/drawer-popup:h-full group-data-[swipe-axis=x]/drawer-popup:w-3 group-data-[swipe-axis=x]/drawer-popup:items-center group-data-[swipe-axis=y]/drawer-popup:h-3 group-data-[swipe-axis=y]/drawer-popup:w-full group-data-[swipe-axis=y]/drawer-popup:justify-center group-data-[swipe-direction=down]/drawer-popup:items-end group-data-[swipe-direction=left]/drawer-popup:order-last group-data-[swipe-direction=left]/drawer-popup:justify-start group-data-[swipe-direction=right]/drawer-popup:justify-end group-data-[swipe-direction=up]/drawer-popup:order-last group-data-[swipe-direction=up]/drawer-popup:items-start after:block after:shrink-0 after:rounded-full after:bg-muted group-data-[swipe-axis=x]/drawer-popup:after:h-24 group-data-[swipe-axis=x]/drawer-popup:after:w-1 group-data-[swipe-axis=y]/drawer-popup:after:h-1 group-data-[swipe-axis=y]/drawer-popup:after:w-24 active:cursor-grabbing", className),
67
+ ...props
68
+ });
69
+ }
70
+ function DrawerContent({ className, children, ...props }) {
71
+ const { hasSnapPoints, modal, showSwipeHandle, swipeDirection } = useDrawer();
72
+ const swipeAxis = swipeDirection === "down" || swipeDirection === "up" ? "y" : "x";
73
+ return /* @__PURE__ */ jsxs(DrawerPortal, {
74
+ "data-slot": "drawer-portal",
75
+ children: [modal === true && /* @__PURE__ */ jsx(DrawerOverlay, { "data-snap-points": hasSnapPoints ? "" : void 0 }), /* @__PURE__ */ jsx(Drawer$1.Viewport, {
76
+ "data-slot": "drawer-viewport",
77
+ "data-modal": modal,
78
+ className: "pointer-events-none fixed inset-0 z-50 select-none data-[modal=true]:pointer-events-auto",
79
+ children: /* @__PURE__ */ jsxs(Drawer$1.Popup, {
80
+ "data-slot": "drawer-popup",
81
+ "data-swipe-axis": swipeAxis,
82
+ "data-snap-points": hasSnapPoints ? "" : void 0,
83
+ className: cn("group/drawer-popup pointer-events-auto fixed z-50 m-(--drawer-inset,0px) flex h-(--drawer-content-height) max-h-(--drawer-content-max-height,none) min-h-0 w-(--drawer-content-width,auto) transform-[translate3d(var(--translate-x,0px),var(--translate-y,0px),0)_scale(var(--stack-scale))] flex-col bg-popover text-sm text-popover-foreground transition-[transform,height,opacity,filter] duration-450 ease-[cubic-bezier(0.22,1,0.36,1)] will-change-transform outline-none select-none [interpolate-size:allow-keywords] data-[swipe-direction=down]:rounded-t-xl data-[swipe-direction=down]:border-t data-[swipe-direction=left]:rounded-r-xl data-[swipe-direction=left]:border-r data-[swipe-direction=right]:rounded-l-xl data-[swipe-direction=right]:border-l data-[swipe-direction=up]:rounded-b-xl data-[swipe-direction=up]:border-b", "data-nested-drawer-open:overflow-hidden data-nested-drawer-open:brightness-95", "after:pointer-events-none after:absolute after:bg-(--drawer-bleed-background,var(--color-popover)) data-[swipe-axis=x]:after:inset-y-0 data-[swipe-axis=x]:after:w-(--bleed) data-[swipe-axis=y]:after:inset-x-0 data-[swipe-axis=y]:after:h-(--bleed) data-[swipe-direction=down]:after:top-full data-[swipe-direction=left]:after:right-full data-[swipe-direction=right]:after:left-full data-[swipe-direction=up]:after:bottom-full", "[--drawer-content-height:var(--drawer-height,auto)] data-[swipe-axis=x]:[--drawer-content-width:75%] data-[swipe-axis=y]:[--drawer-content-max-height:calc(100dvh-6rem)] data-[swipe-axis=y]:data-snap-points:[--drawer-content-height:100dvh] data-[swipe-axis=x]:sm:[--drawer-content-width:24rem]", "[--bleed:3rem] [--peek:1rem] [--stack-height:var(--drawer-frontmost-height,var(--drawer-height,0px))] [--stack-peek-offset:max(0px,calc((var(--nested-drawers)-var(--stack-progress))*var(--peek)))] [--stack-progress:clamp(0,var(--drawer-swipe-progress),1)] [--stack-scale-base:max(0,calc(1-(var(--nested-drawers)*var(--stack-step))))] [--stack-scale:clamp(0,calc(var(--stack-scale-base)+(var(--stack-step)*var(--stack-progress))),1)] [--stack-shrink:calc(1-var(--stack-scale))] [--stack-step:0.05]", "data-ending-style:transform-(--closed-transform) data-ending-style:opacity-[0.9999] data-ending-style:duration-[calc(var(--drawer-swipe-strength)*400ms)] data-nested-drawer-swiping:duration-0 data-ending-style:data-nested-drawer-swiping:duration-[calc(var(--drawer-swipe-strength)*400ms)] data-starting-style:transform-(--closed-transform) data-swiping:duration-0 data-ending-style:data-swiping:duration-[calc(var(--drawer-swipe-strength)*400ms)]", "data-[swipe-axis=y]:inset-x-0 data-[swipe-axis=y]:data-nested-drawer-open:h-(--stack-height)", "data-[swipe-axis=x]:inset-y-0 data-[swipe-axis=x]:flex-row", "data-[swipe-direction=down]:bottom-0 data-[swipe-direction=down]:origin-bottom data-[swipe-direction=down]:[--closed-transform:translate3d(0,calc(100%+var(--drawer-inset,0px)+2px),0)] data-[swipe-direction=down]:[--translate-y:calc(var(--drawer-snap-point-offset,0px)+var(--drawer-swipe-movement-y)-var(--stack-peek-offset)-(var(--stack-shrink)*var(--stack-height)))]", "data-[swipe-direction=up]:top-0 data-[swipe-direction=up]:origin-top data-[swipe-direction=up]:[--closed-transform:translate3d(0,calc(-100%-var(--drawer-inset,0px)-2px),0)] data-[swipe-direction=up]:[--translate-y:calc(var(--drawer-snap-point-offset,0px)+var(--drawer-swipe-movement-y)+var(--stack-peek-offset)+(var(--stack-shrink)*var(--stack-height)))]", "data-[swipe-direction=left]:left-0 data-[swipe-direction=left]:origin-left data-[swipe-direction=left]:[--closed-transform:translate3d(calc(-100%-var(--drawer-inset,0px)-2px),0,0)] data-[swipe-direction=left]:[--translate-x:calc(var(--drawer-swipe-movement-x)+var(--stack-peek-offset)+(var(--stack-shrink)*100%))]", "data-[swipe-direction=right]:right-0 data-[swipe-direction=right]:origin-right data-[swipe-direction=right]:[--closed-transform:translate3d(calc(100%+var(--drawer-inset,0px)+2px),0,0)] data-[swipe-direction=right]:[--translate-x:calc(var(--drawer-swipe-movement-x)-var(--stack-peek-offset)-(var(--stack-shrink)*100%))]", className),
84
+ ...props,
85
+ children: [showSwipeHandle && /* @__PURE__ */ jsx(DrawerSwipeHandle, {}), /* @__PURE__ */ jsx(Drawer$1.Content, {
86
+ "data-slot": "drawer-content",
87
+ className: cn("flex min-h-0 flex-1 flex-col overflow-hidden overscroll-contain rounded-[inherit] transition-opacity duration-300 ease-[cubic-bezier(0.45,1.005,0,1.005)] select-text group-data-nested-drawer-open/drawer-popup:opacity-0 group-data-nested-drawer-swiping/drawer-popup:opacity-100 group-data-swiping/drawer-popup:select-none"),
88
+ children
89
+ })]
90
+ })
91
+ })]
92
+ });
93
+ }
94
+ function DrawerHeader({ className, ...props }) {
95
+ return /* @__PURE__ */ jsx("div", {
96
+ "data-slot": "drawer-header",
97
+ className: cn("flex shrink-0 flex-col gap-0.5 p-4 pb-0 group-data-[swipe-axis=y]/drawer-popup:text-center md:gap-0.5 md:text-left", className),
98
+ ...props
99
+ });
100
+ }
101
+ function DrawerFooter({ className, ...props }) {
102
+ return /* @__PURE__ */ jsx("div", {
103
+ "data-slot": "drawer-footer",
104
+ className: cn("mt-auto flex shrink-0 flex-col gap-2 p-4 pt-0", className),
105
+ ...props
106
+ });
107
+ }
108
+ function DrawerTitle({ className, ...props }) {
109
+ return /* @__PURE__ */ jsx(Drawer$1.Title, {
110
+ "data-slot": "drawer-title",
111
+ className: cn("font-heading text-base font-medium text-foreground", className),
112
+ ...props
113
+ });
114
+ }
115
+ function DrawerDescription({ className, ...props }) {
116
+ return /* @__PURE__ */ jsx(Drawer$1.Description, {
117
+ "data-slot": "drawer-description",
118
+ className: cn("text-sm text-balance text-muted-foreground", className),
119
+ ...props
120
+ });
121
+ }
122
+ //#endregion
123
+ export { Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerSwipeHandle, DrawerTitle, DrawerTrigger };
@@ -0,0 +1,13 @@
1
+ import { VariantProps } from "class-variance-authority";
2
+ //#region src/components/ui/empty.d.ts
3
+ declare function Empty({ className, ...props }: React.ComponentProps<"div">): import("react").JSX.Element;
4
+ declare function EmptyHeader({ className, ...props }: React.ComponentProps<"div">): import("react").JSX.Element;
5
+ declare const emptyMediaVariants: (props?: ({
6
+ variant?: "default" | "icon" | null | undefined;
7
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
8
+ declare function EmptyMedia({ className, variant, ...props }: React.ComponentProps<"div"> & VariantProps<typeof emptyMediaVariants>): import("react").JSX.Element;
9
+ declare function EmptyTitle({ className, ...props }: React.ComponentProps<"div">): import("react").JSX.Element;
10
+ declare function EmptyDescription({ className, ...props }: React.ComponentProps<"p">): import("react").JSX.Element;
11
+ declare function EmptyContent({ className, ...props }: React.ComponentProps<"div">): import("react").JSX.Element;
12
+ //#endregion
13
+ export { Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle };
@@ -0,0 +1,59 @@
1
+ import { cn } from "cn";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import { cva } from "class-variance-authority";
4
+ //#region src/components/ui/empty.tsx
5
+ function Empty({ className, ...props }) {
6
+ return /* @__PURE__ */ jsx("div", {
7
+ "data-slot": "empty",
8
+ className: cn("flex w-full min-w-0 flex-1 flex-col items-center justify-center gap-4 rounded-xl border-dashed p-6 text-center text-balance", className),
9
+ ...props
10
+ });
11
+ }
12
+ function EmptyHeader({ className, ...props }) {
13
+ return /* @__PURE__ */ jsx("div", {
14
+ "data-slot": "empty-header",
15
+ className: cn("flex max-w-sm flex-col items-center gap-2", className),
16
+ ...props
17
+ });
18
+ }
19
+ const emptyMediaVariants = cva("mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0", {
20
+ variants: { variant: {
21
+ default: "bg-transparent",
22
+ icon: "flex size-8 shrink-0 items-center justify-center rounded-lg bg-muted text-foreground [&_svg:not([class*='size-'])]:size-4"
23
+ } },
24
+ defaultVariants: { variant: "default" }
25
+ });
26
+ function EmptyMedia({ className, variant = "default", ...props }) {
27
+ return /* @__PURE__ */ jsx("div", {
28
+ "data-slot": "empty-icon",
29
+ "data-variant": variant,
30
+ className: cn(emptyMediaVariants({
31
+ variant,
32
+ className
33
+ })),
34
+ ...props
35
+ });
36
+ }
37
+ function EmptyTitle({ className, ...props }) {
38
+ return /* @__PURE__ */ jsx("div", {
39
+ "data-slot": "empty-title",
40
+ className: cn("font-heading text-sm font-medium tracking-tight", className),
41
+ ...props
42
+ });
43
+ }
44
+ function EmptyDescription({ className, ...props }) {
45
+ return /* @__PURE__ */ jsx("div", {
46
+ "data-slot": "empty-description",
47
+ className: cn("text-sm/relaxed text-muted-foreground [&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary", className),
48
+ ...props
49
+ });
50
+ }
51
+ function EmptyContent({ className, ...props }) {
52
+ return /* @__PURE__ */ jsx("div", {
53
+ "data-slot": "empty-content",
54
+ className: cn("flex w-full max-w-sm min-w-0 flex-col items-center gap-2.5 text-sm text-balance", className),
55
+ ...props
56
+ });
57
+ }
58
+ //#endregion
59
+ export { Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle };
@@ -1,5 +1,5 @@
1
- import { Label } from "./label.js";
2
1
  import { Separator } from "./separator.js";
2
+ import { Label } from "./label.js";
3
3
  import { cn } from "cn";
4
4
  import { jsx, jsxs } from "react/jsx-runtime";
5
5
  import { useMemo } from "react";
@@ -0,0 +1,7 @@
1
+ import { PreviewCard } from "@base-ui/react/preview-card";
2
+ //#region src/components/ui/hover-card.d.ts
3
+ declare function HoverCard({ ...props }: PreviewCard.Root.Props): import("react").JSX.Element;
4
+ declare function HoverCardTrigger({ ...props }: PreviewCard.Trigger.Props): import("react").JSX.Element;
5
+ declare function HoverCardContent({ className, side, sideOffset, align, alignOffset, ...props }: PreviewCard.Popup.Props & Pick<PreviewCard.Positioner.Props, "align" | "alignOffset" | "side" | "sideOffset">): import("react").JSX.Element;
6
+ //#endregion
7
+ export { HoverCard, HoverCardContent, HoverCardTrigger };
@@ -0,0 +1,36 @@
1
+ "use client";
2
+ import { cn } from "cn";
3
+ import { jsx } from "react/jsx-runtime";
4
+ import { PreviewCard } from "@base-ui/react/preview-card";
5
+ //#region src/components/ui/hover-card.tsx
6
+ function HoverCard({ ...props }) {
7
+ return /* @__PURE__ */ jsx(PreviewCard.Root, {
8
+ "data-slot": "hover-card",
9
+ ...props
10
+ });
11
+ }
12
+ function HoverCardTrigger({ ...props }) {
13
+ return /* @__PURE__ */ jsx(PreviewCard.Trigger, {
14
+ "data-slot": "hover-card-trigger",
15
+ ...props
16
+ });
17
+ }
18
+ function HoverCardContent({ className, side = "bottom", sideOffset = 4, align = "center", alignOffset = 4, ...props }) {
19
+ return /* @__PURE__ */ jsx(PreviewCard.Portal, {
20
+ "data-slot": "hover-card-portal",
21
+ children: /* @__PURE__ */ jsx(PreviewCard.Positioner, {
22
+ align,
23
+ alignOffset,
24
+ side,
25
+ sideOffset,
26
+ className: "isolate z-50",
27
+ children: /* @__PURE__ */ jsx(PreviewCard.Popup, {
28
+ "data-slot": "hover-card-content",
29
+ className: cn("z-50 w-64 origin-(--transform-origin) rounded-lg bg-popover p-2.5 text-sm text-popover-foreground shadow-md ring-1 ring-foreground/10 outline-hidden duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", className),
30
+ ...props
31
+ })
32
+ })
33
+ });
34
+ }
35
+ //#endregion
36
+ export { HoverCard, HoverCardContent, HoverCardTrigger };
@@ -0,0 +1,13 @@
1
+ import * as React$1 from "react";
2
+ import { OTPInput } from "input-otp";
3
+ //#region src/components/ui/input-otp.d.ts
4
+ declare function InputOTP({ className, containerClassName, ...props }: React$1.ComponentProps<typeof OTPInput> & {
5
+ containerClassName?: string;
6
+ }): React$1.JSX.Element;
7
+ declare function InputOTPGroup({ className, ...props }: React$1.ComponentProps<"div">): React$1.JSX.Element;
8
+ declare function InputOTPSlot({ index, className, ...props }: React$1.ComponentProps<"div"> & {
9
+ index: number;
10
+ }): React$1.JSX.Element;
11
+ declare function InputOTPSeparator({ ...props }: React$1.ComponentProps<"div">): React$1.JSX.Element;
12
+ //#endregion
13
+ export { InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot };
@@ -0,0 +1,46 @@
1
+ import { cn } from "cn";
2
+ import { MinusIcon } from "lucide-react";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ import * as React$1 from "react";
5
+ import { OTPInput, OTPInputContext } from "input-otp";
6
+ //#region src/components/ui/input-otp.tsx
7
+ function InputOTP({ className, containerClassName, ...props }) {
8
+ return /* @__PURE__ */ jsx(OTPInput, {
9
+ "data-slot": "input-otp",
10
+ containerClassName: cn("cn-input-otp flex items-center has-disabled:opacity-50", containerClassName),
11
+ spellCheck: false,
12
+ className: cn("disabled:cursor-not-allowed", className),
13
+ ...props
14
+ });
15
+ }
16
+ function InputOTPGroup({ className, ...props }) {
17
+ return /* @__PURE__ */ jsx("div", {
18
+ "data-slot": "input-otp-group",
19
+ className: cn("flex items-center rounded-lg has-aria-invalid:border-destructive has-aria-invalid:ring-3 has-aria-invalid:ring-destructive/20 dark:has-aria-invalid:ring-destructive/40", className),
20
+ ...props
21
+ });
22
+ }
23
+ function InputOTPSlot({ index, className, ...props }) {
24
+ const { char, hasFakeCaret, isActive } = React$1.useContext(OTPInputContext)?.slots[index] ?? {};
25
+ return /* @__PURE__ */ jsxs("div", {
26
+ "data-slot": "input-otp-slot",
27
+ "data-active": isActive,
28
+ className: cn("relative flex size-8 items-center justify-center border-y border-r border-input text-sm transition-all outline-none first:rounded-l-lg first:border-l last:rounded-r-lg aria-invalid:border-destructive data-[active=true]:z-10 data-[active=true]:border-ring data-[active=true]:ring-3 data-[active=true]:ring-ring/50 data-[active=true]:aria-invalid:border-destructive data-[active=true]:aria-invalid:ring-destructive/20 dark:bg-input/30 dark:data-[active=true]:aria-invalid:ring-destructive/40", className),
29
+ ...props,
30
+ children: [char, hasFakeCaret && /* @__PURE__ */ jsx("div", {
31
+ className: "pointer-events-none absolute inset-0 flex items-center justify-center",
32
+ children: /* @__PURE__ */ jsx("div", { className: "h-4 w-px animate-caret-blink bg-foreground duration-1000" })
33
+ })]
34
+ });
35
+ }
36
+ function InputOTPSeparator({ ...props }) {
37
+ return /* @__PURE__ */ jsx("div", {
38
+ "data-slot": "input-otp-separator",
39
+ className: "flex items-center [&_svg:not([class*='size-'])]:size-4",
40
+ role: "separator",
41
+ ...props,
42
+ children: /* @__PURE__ */ jsx(MinusIcon, {})
43
+ });
44
+ }
45
+ //#endregion
46
+ export { InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot };
@@ -0,0 +1,24 @@
1
+ import { Separator } from "./separator.js";
2
+ import * as React$1 from "react";
3
+ import { VariantProps } from "class-variance-authority";
4
+ import { useRender } from "@base-ui/react/use-render";
5
+ //#region src/components/ui/item.d.ts
6
+ declare function ItemGroup({ className, ...props }: React$1.ComponentProps<"div">): React$1.JSX.Element;
7
+ declare function ItemSeparator({ className, ...props }: React$1.ComponentProps<typeof Separator>): React$1.JSX.Element;
8
+ declare const itemVariants: (props?: ({
9
+ variant?: "default" | "muted" | "outline" | null | undefined;
10
+ size?: "default" | "sm" | "xs" | null | undefined;
11
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
12
+ declare function Item({ className, variant, size, render, ...props }: useRender.ComponentProps<"div"> & VariantProps<typeof itemVariants>): React$1.ReactElement<unknown, string | React$1.JSXElementConstructor<any>>;
13
+ declare const itemMediaVariants: (props?: ({
14
+ variant?: "default" | "icon" | "image" | null | undefined;
15
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
16
+ declare function ItemMedia({ className, variant, ...props }: React$1.ComponentProps<"div"> & VariantProps<typeof itemMediaVariants>): React$1.JSX.Element;
17
+ declare function ItemContent({ className, ...props }: React$1.ComponentProps<"div">): React$1.JSX.Element;
18
+ declare function ItemTitle({ className, ...props }: React$1.ComponentProps<"div">): React$1.JSX.Element;
19
+ declare function ItemDescription({ className, ...props }: React$1.ComponentProps<"p">): React$1.JSX.Element;
20
+ declare function ItemActions({ className, ...props }: React$1.ComponentProps<"div">): React$1.JSX.Element;
21
+ declare function ItemHeader({ className, ...props }: React$1.ComponentProps<"div">): React$1.JSX.Element;
22
+ declare function ItemFooter({ className, ...props }: React$1.ComponentProps<"div">): React$1.JSX.Element;
23
+ //#endregion
24
+ export { Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemHeader, ItemMedia, ItemSeparator, ItemTitle };
@@ -0,0 +1,121 @@
1
+ import { Separator } from "./separator.js";
2
+ import { cn } from "cn";
3
+ import { jsx } from "react/jsx-runtime";
4
+ import "react";
5
+ import { cva } from "class-variance-authority";
6
+ import { mergeProps } from "@base-ui/react/merge-props";
7
+ import { useRender } from "@base-ui/react/use-render";
8
+ //#region src/components/ui/item.tsx
9
+ function ItemGroup({ className, ...props }) {
10
+ return /* @__PURE__ */ jsx("div", {
11
+ role: "list",
12
+ "data-slot": "item-group",
13
+ className: cn("group/item-group flex w-full flex-col gap-4 has-data-[size=sm]:gap-2.5 has-data-[size=xs]:gap-2", className),
14
+ ...props
15
+ });
16
+ }
17
+ function ItemSeparator({ className, ...props }) {
18
+ return /* @__PURE__ */ jsx(Separator, {
19
+ "data-slot": "item-separator",
20
+ orientation: "horizontal",
21
+ className: cn("my-2", className),
22
+ ...props
23
+ });
24
+ }
25
+ const itemVariants = cva("group/item flex w-full flex-wrap items-center rounded-lg border text-sm transition-colors duration-100 outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 [a]:transition-colors [a]:hover:bg-muted", {
26
+ variants: {
27
+ variant: {
28
+ default: "border-transparent",
29
+ outline: "border-border",
30
+ muted: "border-transparent bg-muted/50"
31
+ },
32
+ size: {
33
+ default: "gap-2.5 px-3 py-2.5",
34
+ sm: "gap-2.5 px-3 py-2.5",
35
+ xs: "gap-2 px-2.5 py-2 in-data-[slot=dropdown-menu-content]:p-0"
36
+ }
37
+ },
38
+ defaultVariants: {
39
+ variant: "default",
40
+ size: "default"
41
+ }
42
+ });
43
+ function Item({ className, variant = "default", size = "default", render, ...props }) {
44
+ return useRender({
45
+ defaultTagName: "div",
46
+ props: mergeProps({ className: cn(itemVariants({
47
+ variant,
48
+ size,
49
+ className
50
+ })) }, props),
51
+ render,
52
+ state: {
53
+ slot: "item",
54
+ variant,
55
+ size
56
+ }
57
+ });
58
+ }
59
+ const itemMediaVariants = cva("flex shrink-0 items-center justify-center gap-2 group-has-data-[slot=item-description]/item:translate-y-0.5 group-has-data-[slot=item-description]/item:self-start [&_svg]:pointer-events-none", {
60
+ variants: { variant: {
61
+ default: "bg-transparent",
62
+ icon: "[&_svg:not([class*='size-'])]:size-4",
63
+ image: "size-10 overflow-hidden rounded-sm group-data-[size=sm]/item:size-8 group-data-[size=xs]/item:size-6 [&_img]:size-full [&_img]:object-cover"
64
+ } },
65
+ defaultVariants: { variant: "default" }
66
+ });
67
+ function ItemMedia({ className, variant = "default", ...props }) {
68
+ return /* @__PURE__ */ jsx("div", {
69
+ "data-slot": "item-media",
70
+ "data-variant": variant,
71
+ className: cn(itemMediaVariants({
72
+ variant,
73
+ className
74
+ })),
75
+ ...props
76
+ });
77
+ }
78
+ function ItemContent({ className, ...props }) {
79
+ return /* @__PURE__ */ jsx("div", {
80
+ "data-slot": "item-content",
81
+ className: cn("flex flex-1 flex-col gap-1 group-data-[size=xs]/item:gap-0 [&+[data-slot=item-content]]:flex-none", className),
82
+ ...props
83
+ });
84
+ }
85
+ function ItemTitle({ className, ...props }) {
86
+ return /* @__PURE__ */ jsx("div", {
87
+ "data-slot": "item-title",
88
+ className: cn("line-clamp-1 flex w-fit items-center gap-2 text-sm leading-snug font-medium underline-offset-4", className),
89
+ ...props
90
+ });
91
+ }
92
+ function ItemDescription({ className, ...props }) {
93
+ return /* @__PURE__ */ jsx("p", {
94
+ "data-slot": "item-description",
95
+ className: cn("line-clamp-2 text-left text-sm leading-normal font-normal text-muted-foreground group-data-[size=xs]/item:text-xs [&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary", className),
96
+ ...props
97
+ });
98
+ }
99
+ function ItemActions({ className, ...props }) {
100
+ return /* @__PURE__ */ jsx("div", {
101
+ "data-slot": "item-actions",
102
+ className: cn("flex items-center gap-2", className),
103
+ ...props
104
+ });
105
+ }
106
+ function ItemHeader({ className, ...props }) {
107
+ return /* @__PURE__ */ jsx("div", {
108
+ "data-slot": "item-header",
109
+ className: cn("flex basis-full items-center justify-between gap-2", className),
110
+ ...props
111
+ });
112
+ }
113
+ function ItemFooter({ className, ...props }) {
114
+ return /* @__PURE__ */ jsx("div", {
115
+ "data-slot": "item-footer",
116
+ className: cn("flex basis-full items-center justify-between gap-2", className),
117
+ ...props
118
+ });
119
+ }
120
+ //#endregion
121
+ export { Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemHeader, ItemMedia, ItemSeparator, ItemTitle };
@@ -0,0 +1,5 @@
1
+ //#region src/components/ui/kbd.d.ts
2
+ declare function Kbd({ className, ...props }: React.ComponentProps<"kbd">): import("react").JSX.Element;
3
+ declare function KbdGroup({ className, ...props }: React.ComponentProps<"div">): import("react").JSX.Element;
4
+ //#endregion
5
+ export { Kbd, KbdGroup };
@@ -0,0 +1,19 @@
1
+ import { cn } from "cn";
2
+ import { jsx } from "react/jsx-runtime";
3
+ //#region src/components/ui/kbd.tsx
4
+ function Kbd({ className, ...props }) {
5
+ return /* @__PURE__ */ jsx("kbd", {
6
+ "data-slot": "kbd",
7
+ className: cn("pointer-events-none inline-flex h-5 w-fit min-w-5 items-center justify-center gap-1 rounded-sm bg-muted px-1 font-sans text-xs font-medium text-muted-foreground select-none in-data-[slot=tooltip-content]:bg-background/20 in-data-[slot=tooltip-content]:text-background dark:in-data-[slot=tooltip-content]:bg-background/10 [&_svg:not([class*='size-'])]:size-3", className),
8
+ ...props
9
+ });
10
+ }
11
+ function KbdGroup({ className, ...props }) {
12
+ return /* @__PURE__ */ jsx("kbd", {
13
+ "data-slot": "kbd-group",
14
+ className: cn("inline-flex items-center gap-1", className),
15
+ ...props
16
+ });
17
+ }
18
+ //#endregion
19
+ export { Kbd, KbdGroup };
@@ -0,0 +1,12 @@
1
+ import * as React$1 from "react";
2
+ import { VariantProps } from "class-variance-authority";
3
+ import { useRender } from "@base-ui/react/use-render";
4
+ //#region src/components/ui/marker.d.ts
5
+ declare const markerVariants: (props?: ({
6
+ variant?: "border" | "default" | "separator" | null | undefined;
7
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
8
+ declare function Marker({ className, variant, render, ...props }: useRender.ComponentProps<"div"> & VariantProps<typeof markerVariants>): React$1.ReactElement<unknown, string | React$1.JSXElementConstructor<any>>;
9
+ declare function MarkerIcon({ className, ...props }: React$1.ComponentProps<"span">): React$1.JSX.Element;
10
+ declare function MarkerContent({ className, ...props }: React$1.ComponentProps<"span">): React$1.JSX.Element;
11
+ //#endregion
12
+ export { Marker, MarkerContent, MarkerIcon, markerVariants };
@@ -0,0 +1,43 @@
1
+ import { cn } from "cn";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import "react";
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/ui/marker.tsx
8
+ const markerVariants = cva("group/marker relative flex min-h-4 w-full items-center gap-2 text-left text-sm text-muted-foreground [&_svg:not([class*='size-'])]:size-4 [a]:underline [a]:underline-offset-3 [a]:hover:text-foreground", { variants: { variant: {
9
+ default: "",
10
+ separator: "before:mr-1 before:h-px before:min-w-0 before:flex-1 before:bg-border after:ml-1 after:h-px after:min-w-0 after:flex-1 after:bg-border",
11
+ border: "border-b border-border pb-2"
12
+ } } });
13
+ function Marker({ className, variant = "default", render, ...props }) {
14
+ return useRender({
15
+ defaultTagName: "div",
16
+ props: mergeProps({ className: cn(markerVariants({
17
+ variant,
18
+ className
19
+ })) }, props),
20
+ render,
21
+ state: {
22
+ slot: "marker",
23
+ variant
24
+ }
25
+ });
26
+ }
27
+ function MarkerIcon({ className, ...props }) {
28
+ return /* @__PURE__ */ jsx("span", {
29
+ "data-slot": "marker-icon",
30
+ "aria-hidden": "true",
31
+ className: cn("size-4 shrink-0 [&_svg:not([class*='size-'])]:size-4", className),
32
+ ...props
33
+ });
34
+ }
35
+ function MarkerContent({ className, ...props }) {
36
+ return /* @__PURE__ */ jsx("span", {
37
+ "data-slot": "marker-content",
38
+ className: cn("min-w-0 wrap-break-word group-data-[variant=separator]/marker:flex-none group-data-[variant=separator]/marker:text-center *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground", className),
39
+ ...props
40
+ });
41
+ }
42
+ //#endregion
43
+ export { Marker, MarkerContent, MarkerIcon, markerVariants };
@@ -0,0 +1,31 @@
1
+ import { DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger } from "./dropdown-menu.js";
2
+ import * as React$1 from "react";
3
+ import { Menu } from "@base-ui/react/menu";
4
+ import { Menubar as Menubar$1 } from "@base-ui/react/menubar";
5
+ //#region src/components/ui/menubar.d.ts
6
+ declare function Menubar({ className, ...props }: Menubar$1.Props): React$1.JSX.Element;
7
+ declare function MenubarMenu({ ...props }: React$1.ComponentProps<typeof DropdownMenu>): React$1.JSX.Element;
8
+ declare function MenubarGroup({ ...props }: React$1.ComponentProps<typeof DropdownMenuGroup>): React$1.JSX.Element;
9
+ declare function MenubarPortal({ ...props }: React$1.ComponentProps<typeof DropdownMenuPortal>): React$1.JSX.Element;
10
+ declare function MenubarTrigger({ className, ...props }: React$1.ComponentProps<typeof DropdownMenuTrigger>): React$1.JSX.Element;
11
+ declare function MenubarContent({ className, align, alignOffset, sideOffset, ...props }: React$1.ComponentProps<typeof DropdownMenuContent>): React$1.JSX.Element;
12
+ declare function MenubarItem({ className, inset, variant, ...props }: React$1.ComponentProps<typeof DropdownMenuItem>): React$1.JSX.Element;
13
+ declare function MenubarCheckboxItem({ className, children, checked, inset, ...props }: Menu.CheckboxItem.Props & {
14
+ inset?: boolean;
15
+ }): React$1.JSX.Element;
16
+ declare function MenubarRadioGroup({ ...props }: React$1.ComponentProps<typeof DropdownMenuRadioGroup>): React$1.JSX.Element;
17
+ declare function MenubarRadioItem({ className, children, inset, ...props }: Menu.RadioItem.Props & {
18
+ inset?: boolean;
19
+ }): React$1.JSX.Element;
20
+ declare function MenubarLabel({ className, inset, ...props }: React$1.ComponentProps<typeof DropdownMenuLabel> & {
21
+ inset?: boolean;
22
+ }): React$1.JSX.Element;
23
+ declare function MenubarSeparator({ className, ...props }: React$1.ComponentProps<typeof DropdownMenuSeparator>): React$1.JSX.Element;
24
+ declare function MenubarShortcut({ className, ...props }: React$1.ComponentProps<typeof DropdownMenuShortcut>): React$1.JSX.Element;
25
+ declare function MenubarSub({ ...props }: React$1.ComponentProps<typeof DropdownMenuSub>): React$1.JSX.Element;
26
+ declare function MenubarSubTrigger({ className, inset, ...props }: React$1.ComponentProps<typeof DropdownMenuSubTrigger> & {
27
+ inset?: boolean;
28
+ }): React$1.JSX.Element;
29
+ declare function MenubarSubContent({ className, ...props }: React$1.ComponentProps<typeof DropdownMenuSubContent>): React$1.JSX.Element;
30
+ //#endregion
31
+ export { Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger };