@siyahi/ui 0.0.0-stage → 0.1.0-next.3

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 (192) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +174 -2
  3. package/THIRD_PARTY_NOTICES.md +51 -0
  4. package/dist/components/registry/dashboard-01/section-cards.d.ts +17 -0
  5. package/dist/components/registry/dashboard-01/section-cards.js +39 -0
  6. package/dist/components/registry/dashboardcn/bar-list.d.ts +24 -0
  7. package/dist/components/registry/dashboardcn/bar-list.js +71 -0
  8. package/dist/components/registry/heatmap/calendar-heatmap.d.ts +134 -0
  9. package/dist/components/registry/heatmap/calendar-heatmap.js +497 -0
  10. package/dist/components/registry/heatmap/status-heatmap.d.ts +120 -0
  11. package/dist/components/registry/heatmap/status-heatmap.js +330 -0
  12. package/dist/components/registry/heatmap/weekday-heatmap.d.ts +145 -0
  13. package/dist/components/registry/heatmap/weekday-heatmap.js +489 -0
  14. package/dist/components/registry/niko-table/components/data-table-column-actions.d.ts +26 -0
  15. package/dist/components/registry/niko-table/components/data-table-column-actions.js +32 -0
  16. package/dist/components/registry/niko-table/components/data-table-column-filter.d.ts +13 -0
  17. package/dist/components/registry/niko-table/components/data-table-column-filter.js +17 -0
  18. package/dist/components/registry/niko-table/components/data-table-column-header.d.ts +30 -0
  19. package/dist/components/registry/niko-table/components/data-table-column-header.js +35 -0
  20. package/dist/components/registry/niko-table/components/data-table-column-sort.d.ts +21 -0
  21. package/dist/components/registry/niko-table/components/data-table-column-sort.js +36 -0
  22. package/dist/components/registry/niko-table/components/data-table-column-title.d.ts +12 -0
  23. package/dist/components/registry/niko-table/components/data-table-column-title.js +18 -0
  24. package/dist/components/registry/niko-table/components/data-table-empty-state.d.ts +108 -0
  25. package/dist/components/registry/niko-table/components/data-table-empty-state.js +148 -0
  26. package/dist/components/registry/niko-table/components/data-table-faceted-filter.d.ts +46 -0
  27. package/dist/components/registry/niko-table/components/data-table-faceted-filter.js +133 -0
  28. package/dist/components/registry/niko-table/components/data-table-grouped-rows.d.ts +111 -0
  29. package/dist/components/registry/niko-table/components/data-table-grouped-rows.js +77 -0
  30. package/dist/components/registry/niko-table/components/data-table-row-context-menu-slot.d.ts +65 -0
  31. package/dist/components/registry/niko-table/components/data-table-row-context-menu-slot.js +65 -0
  32. package/dist/components/registry/niko-table/components/data-table-row-context-menu.d.ts +50 -0
  33. package/dist/components/registry/niko-table/components/data-table-row-context-menu.js +42 -0
  34. package/dist/components/registry/niko-table/components/data-table-row-menu.d.ts +51 -0
  35. package/dist/components/registry/niko-table/components/data-table-row-menu.js +65 -0
  36. package/dist/components/registry/niko-table/components/data-table-toolbar-section.d.ts +7 -0
  37. package/dist/components/registry/niko-table/components/data-table-toolbar-section.js +63 -0
  38. package/dist/components/registry/niko-table/config/data-table.d.ts +156 -0
  39. package/dist/components/registry/niko-table/config/data-table.js +279 -0
  40. package/dist/components/registry/niko-table/config/feature-detection.d.ts +39 -0
  41. package/dist/components/registry/niko-table/config/feature-detection.js +174 -0
  42. package/dist/components/registry/niko-table/core/data-table-context.d.ts +157 -0
  43. package/dist/components/registry/niko-table/core/data-table-context.js +326 -0
  44. package/dist/components/registry/niko-table/core/data-table-error-boundary.d.ts +85 -0
  45. package/dist/components/registry/niko-table/core/data-table-error-boundary.js +116 -0
  46. package/dist/components/registry/niko-table/core/data-table-grouped-row.d.ts +49 -0
  47. package/dist/components/registry/niko-table/core/data-table-grouped-row.js +112 -0
  48. package/dist/components/registry/niko-table/core/data-table-root.d.ts +62 -0
  49. package/dist/components/registry/niko-table/core/data-table-root.js +406 -0
  50. package/dist/components/registry/niko-table/core/data-table-structure.d.ts +153 -0
  51. package/dist/components/registry/niko-table/core/data-table-structure.js +370 -0
  52. package/dist/components/registry/niko-table/core/data-table.d.ts +30 -0
  53. package/dist/components/registry/niko-table/core/data-table.js +126 -0
  54. package/dist/components/registry/niko-table/filters/table-column-actions.d.ts +49 -0
  55. package/dist/components/registry/niko-table/filters/table-column-actions.js +48 -0
  56. package/dist/components/registry/niko-table/filters/table-column-sort.d.ts +51 -0
  57. package/dist/components/registry/niko-table/filters/table-column-sort.js +184 -0
  58. package/dist/components/registry/niko-table/filters/table-column-title.d.ts +17 -0
  59. package/dist/components/registry/niko-table/filters/table-column-title.js +20 -0
  60. package/dist/components/registry/niko-table/filters/table-faceted-filter.d.ts +40 -0
  61. package/dist/components/registry/niko-table/filters/table-faceted-filter.js +210 -0
  62. package/dist/components/registry/niko-table/hooks/use-derived-column-title.d.ts +29 -0
  63. package/dist/components/registry/niko-table/hooks/use-derived-column-title.js +40 -0
  64. package/dist/components/registry/niko-table/hooks/use-generated-options.d.ts +49 -0
  65. package/dist/components/registry/niko-table/hooks/use-generated-options.js +144 -0
  66. package/dist/components/registry/niko-table/lib/build-faceted-options.d.ts +59 -0
  67. package/dist/components/registry/niko-table/lib/build-faceted-options.js +82 -0
  68. package/dist/components/registry/niko-table/lib/column-resize-handle.d.ts +33 -0
  69. package/dist/components/registry/niko-table/lib/column-resize-handle.js +175 -0
  70. package/dist/components/registry/niko-table/lib/constants.d.ts +128 -0
  71. package/dist/components/registry/niko-table/lib/constants.js +123 -0
  72. package/dist/components/registry/niko-table/lib/create-scroll-handler.d.ts +35 -0
  73. package/dist/components/registry/niko-table/lib/create-scroll-handler.js +63 -0
  74. package/dist/components/registry/niko-table/lib/data-table-features.d.ts +218 -0
  75. package/dist/components/registry/niko-table/lib/data-table-features.js +127 -0
  76. package/dist/components/registry/niko-table/lib/filter-functions.d.ts +47 -0
  77. package/dist/components/registry/niko-table/lib/filter-functions.js +309 -0
  78. package/dist/components/registry/niko-table/lib/filter-rows.d.ts +14 -0
  79. package/dist/components/registry/niko-table/lib/filter-rows.js +28 -0
  80. package/dist/components/registry/niko-table/lib/flex-columns.d.ts +48 -0
  81. package/dist/components/registry/niko-table/lib/flex-columns.js +65 -0
  82. package/dist/components/registry/niko-table/lib/format.d.ts +33 -0
  83. package/dist/components/registry/niko-table/lib/format.js +99 -0
  84. package/dist/components/registry/niko-table/lib/render-cell-content.d.ts +17 -0
  85. package/dist/components/registry/niko-table/lib/render-cell-content.js +65 -0
  86. package/dist/components/registry/niko-table/lib/row-click.d.ts +67 -0
  87. package/dist/components/registry/niko-table/lib/row-click.js +28 -0
  88. package/dist/components/registry/niko-table/lib/styles.d.ts +6 -0
  89. package/dist/components/registry/niko-table/lib/styles.js +24 -0
  90. package/dist/components/registry/niko-table/lib/use-header-min-widths.d.ts +17 -0
  91. package/dist/components/registry/niko-table/lib/use-header-min-widths.js +82 -0
  92. package/dist/components/registry/niko-table/types/index.d.ts +141 -0
  93. package/dist/components/registry/niko-table/types/index.js +2 -0
  94. package/dist/components/registry/niko-table/ui/table.d.ts +13 -0
  95. package/dist/components/registry/niko-table/ui/table.js +74 -0
  96. package/dist/components/registry/sidebar-07/app-sidebar.d.ts +18 -0
  97. package/dist/components/registry/sidebar-07/app-sidebar.js +26 -0
  98. package/dist/components/registry/sidebar-07/nav-main.d.ts +15 -0
  99. package/dist/components/registry/sidebar-07/nav-main.js +25 -0
  100. package/dist/components/registry/sidebar-07/nav-projects.d.ts +9 -0
  101. package/dist/components/registry/sidebar-07/nav-projects.js +43 -0
  102. package/dist/components/registry/sidebar-07/nav-user.d.ts +9 -0
  103. package/dist/components/registry/sidebar-07/nav-user.js +70 -0
  104. package/dist/components/registry/sidebar-07/team-switcher.d.ts +10 -0
  105. package/dist/components/registry/sidebar-07/team-switcher.js +70 -0
  106. package/dist/components/siyahi/delta.d.ts +10 -0
  107. package/dist/components/siyahi/delta.js +27 -0
  108. package/dist/components/siyahi/local-time.d.ts +7 -0
  109. package/dist/components/siyahi/local-time.js +22 -0
  110. package/dist/components/siyahi/price-chart.d.ts +12 -0
  111. package/dist/components/siyahi/price-chart.js +80 -0
  112. package/dist/components/siyahi/siyahi-provider.d.ts +12 -0
  113. package/dist/components/siyahi/siyahi-provider.js +31 -0
  114. package/dist/components/siyahi/treemap.d.ts +14 -0
  115. package/dist/components/siyahi/treemap.js +58 -0
  116. package/dist/components/ui/alert.d.ts +12 -0
  117. package/dist/components/ui/alert.js +43 -0
  118. package/dist/components/ui/avatar.d.ts +13 -0
  119. package/dist/components/ui/avatar.js +50 -0
  120. package/dist/components/ui/badge.d.ts +9 -0
  121. package/dist/components/ui/badge.js +29 -0
  122. package/dist/components/ui/breadcrumb.d.ts +12 -0
  123. package/dist/components/ui/breadcrumb.js +72 -0
  124. package/dist/components/ui/button.d.ts +10 -0
  125. package/dist/components/ui/button.js +44 -0
  126. package/dist/components/ui/calendar.d.ts +12 -0
  127. package/dist/components/ui/calendar.js +107 -0
  128. package/dist/components/ui/card.d.ts +13 -0
  129. package/dist/components/ui/card.js +56 -0
  130. package/dist/components/ui/chart.d.ts +46 -0
  131. package/dist/components/ui/chart.js +149 -0
  132. package/dist/components/ui/collapsible.d.ts +7 -0
  133. package/dist/components/ui/collapsible.js +24 -0
  134. package/dist/components/ui/command.d.ts +21 -0
  135. package/dist/components/ui/command.js +88 -0
  136. package/dist/components/ui/context-menu.d.ts +31 -0
  137. package/dist/components/ui/context-menu.js +132 -0
  138. package/dist/components/ui/dialog.d.ts +19 -0
  139. package/dist/components/ui/dialog.js +91 -0
  140. package/dist/components/ui/dropdown-menu.d.ts +31 -0
  141. package/dist/components/ui/dropdown-menu.js +136 -0
  142. package/dist/components/ui/input-group.d.ts +20 -0
  143. package/dist/components/ui/input-group.js +79 -0
  144. package/dist/components/ui/input.d.ts +5 -0
  145. package/dist/components/ui/input.js +15 -0
  146. package/dist/components/ui/popover.d.ts +11 -0
  147. package/dist/components/ui/popover.js +55 -0
  148. package/dist/components/ui/progress.d.ts +9 -0
  149. package/dist/components/ui/progress.js +43 -0
  150. package/dist/components/ui/scroll-area.d.ts +7 -0
  151. package/dist/components/ui/scroll-area.js +36 -0
  152. package/dist/components/ui/select.d.ts +17 -0
  153. package/dist/components/ui/select.js +97 -0
  154. package/dist/components/ui/separator.d.ts +5 -0
  155. package/dist/components/ui/separator.js +15 -0
  156. package/dist/components/ui/sheet.d.ts +16 -0
  157. package/dist/components/ui/sheet.js +89 -0
  158. package/dist/components/ui/sidebar.d.ts +65 -0
  159. package/dist/components/ui/sidebar.js +385 -0
  160. package/dist/components/ui/skeleton.d.ts +4 -0
  161. package/dist/components/ui/skeleton.js +12 -0
  162. package/dist/components/ui/slider.d.ts +5 -0
  163. package/dist/components/ui/slider.js +33 -0
  164. package/dist/components/ui/table.d.ts +12 -0
  165. package/dist/components/ui/table.js +66 -0
  166. package/dist/components/ui/tabs.d.ts +12 -0
  167. package/dist/components/ui/tabs.js +45 -0
  168. package/dist/components/ui/textarea.d.ts +5 -0
  169. package/dist/components/ui/textarea.js +13 -0
  170. package/dist/components/ui/toggle-group.d.ts +13 -0
  171. package/dist/components/ui/toggle-group.js +52 -0
  172. package/dist/components/ui/toggle.d.ts +10 -0
  173. package/dist/components/ui/toggle.js +36 -0
  174. package/dist/components/ui/tooltip.d.ts +8 -0
  175. package/dist/components/ui/tooltip.js +41 -0
  176. package/dist/hooks/use-mobile.d.ts +3 -0
  177. package/dist/hooks/use-mobile.js +18 -0
  178. package/dist/index.d.ts +73 -0
  179. package/dist/index.js +71 -0
  180. package/dist/lib/format.d.ts +24 -0
  181. package/dist/lib/format.js +58 -0
  182. package/dist/lib/locale.d.ts +12 -0
  183. package/dist/lib/locale.js +8 -0
  184. package/dist/lib/recharts.d.ts +2 -0
  185. package/dist/lib/recharts.js +1 -0
  186. package/dist/lib/utils.d.ts +2 -0
  187. package/dist/lib/utils.js +1 -0
  188. package/package.json +78 -3
  189. package/registry.lock.json +413 -0
  190. package/report.css +129 -0
  191. package/styles/shadcn.css +643 -0
  192. package/styles/siyahi.css +189 -0
@@ -0,0 +1,88 @@
1
+ "use client";
2
+ import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from "./dialog.js";
3
+ import { InputGroup, InputGroupAddon } from "./input-group.js";
4
+ import "react";
5
+ import { cn } from "cn";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
+ import { CheckIcon, SearchIcon } from "lucide-react";
8
+ import { Command as Command$1 } from "cmdk";
9
+ //#region src/components/ui/command.tsx
10
+ function Command({ className, ...props }) {
11
+ return /* @__PURE__ */ jsx(Command$1, {
12
+ "data-slot": "command",
13
+ className: cn("flex size-full flex-col overflow-hidden rounded-xl! bg-popover p-1 text-popover-foreground", className),
14
+ ...props
15
+ });
16
+ }
17
+ function CommandDialog({ title = "Command Palette", description = "Search for a command to run...", children, className, showCloseButton = false, ...props }) {
18
+ return /* @__PURE__ */ jsxs(Dialog, {
19
+ ...props,
20
+ children: [/* @__PURE__ */ jsxs(DialogHeader, {
21
+ className: "sr-only",
22
+ children: [/* @__PURE__ */ jsx(DialogTitle, { children: title }), /* @__PURE__ */ jsx(DialogDescription, { children: description })]
23
+ }), /* @__PURE__ */ jsx(DialogContent, {
24
+ className: cn("top-1/3 translate-y-0 overflow-hidden rounded-xl! p-0", className),
25
+ showCloseButton,
26
+ children
27
+ })]
28
+ });
29
+ }
30
+ function CommandInput({ className, ...props }) {
31
+ return /* @__PURE__ */ jsx("div", {
32
+ "data-slot": "command-input-wrapper",
33
+ className: "p-1 pb-0",
34
+ children: /* @__PURE__ */ jsxs(InputGroup, {
35
+ className: "h-8! rounded-lg! border-input/30 bg-input/30 shadow-none! *:data-[slot=input-group-addon]:pl-2!",
36
+ children: [/* @__PURE__ */ jsx(Command$1.Input, {
37
+ "data-slot": "command-input",
38
+ className: cn("w-full text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50", className),
39
+ ...props
40
+ }), /* @__PURE__ */ jsx(InputGroupAddon, { children: /* @__PURE__ */ jsx(SearchIcon, { className: "size-4 shrink-0 opacity-50" }) })]
41
+ })
42
+ });
43
+ }
44
+ function CommandList({ className, ...props }) {
45
+ return /* @__PURE__ */ jsx(Command$1.List, {
46
+ "data-slot": "command-list",
47
+ className: cn("no-scrollbar max-h-72 scroll-py-1 overflow-x-hidden overflow-y-auto outline-none", className),
48
+ ...props
49
+ });
50
+ }
51
+ function CommandEmpty({ className, ...props }) {
52
+ return /* @__PURE__ */ jsx(Command$1.Empty, {
53
+ "data-slot": "command-empty",
54
+ className: cn("py-6 text-center text-sm", className),
55
+ ...props
56
+ });
57
+ }
58
+ function CommandGroup({ className, ...props }) {
59
+ return /* @__PURE__ */ jsx(Command$1.Group, {
60
+ "data-slot": "command-group",
61
+ className: cn("overflow-hidden p-1 text-foreground **:[[cmdk-group-heading]]:px-2 **:[[cmdk-group-heading]]:py-1.5 **:[[cmdk-group-heading]]:text-xs **:[[cmdk-group-heading]]:font-medium **:[[cmdk-group-heading]]:text-muted-foreground", className),
62
+ ...props
63
+ });
64
+ }
65
+ function CommandSeparator({ className, ...props }) {
66
+ return /* @__PURE__ */ jsx(Command$1.Separator, {
67
+ "data-slot": "command-separator",
68
+ className: cn("-mx-1 h-px w-auto bg-border", className),
69
+ ...props
70
+ });
71
+ }
72
+ function CommandItem({ className, children, ...props }) {
73
+ return /* @__PURE__ */ jsxs(Command$1.Item, {
74
+ "data-slot": "command-item",
75
+ className: cn("group/command-item relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none in-data-[slot=dialog-content]:rounded-lg! data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 data-selected:bg-muted data-selected:text-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-selected:**:[svg]:text-foreground", className),
76
+ ...props,
77
+ children: [children, /* @__PURE__ */ jsx(CheckIcon, { className: "ml-auto opacity-0 group-has-data-[slot=command-shortcut]/command-item:hidden group-data-[checked=true]/command-item:opacity-100" })]
78
+ });
79
+ }
80
+ function CommandShortcut({ className, ...props }) {
81
+ return /* @__PURE__ */ jsx("span", {
82
+ "data-slot": "command-shortcut",
83
+ className: cn("ml-auto text-xs tracking-widest text-muted-foreground group-data-selected/command-item:text-foreground", className),
84
+ ...props
85
+ });
86
+ }
87
+ //#endregion
88
+ export { Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut };
@@ -0,0 +1,31 @@
1
+ import * as React$1 from "react";
2
+ import { ContextMenu as ContextMenu$1 } from "@base-ui/react/context-menu";
3
+ //#region src/components/ui/context-menu.d.ts
4
+ declare function ContextMenu({ ...props }: ContextMenu$1.Root.Props): React$1.JSX.Element;
5
+ declare function ContextMenuPortal({ ...props }: ContextMenu$1.Portal.Props): React$1.JSX.Element;
6
+ declare function ContextMenuTrigger({ className, ...props }: ContextMenu$1.Trigger.Props): React$1.JSX.Element;
7
+ declare function ContextMenuContent({ className, align, alignOffset, side, sideOffset, ...props }: ContextMenu$1.Popup.Props & Pick<ContextMenu$1.Positioner.Props, "align" | "alignOffset" | "side" | "sideOffset">): React$1.JSX.Element;
8
+ declare function ContextMenuGroup({ ...props }: ContextMenu$1.Group.Props): React$1.JSX.Element;
9
+ declare function ContextMenuLabel({ className, inset, ...props }: ContextMenu$1.GroupLabel.Props & {
10
+ inset?: boolean;
11
+ }): React$1.JSX.Element;
12
+ declare function ContextMenuItem({ className, inset, variant, ...props }: ContextMenu$1.Item.Props & {
13
+ inset?: boolean;
14
+ variant?: "default" | "destructive";
15
+ }): React$1.JSX.Element;
16
+ declare function ContextMenuSub({ ...props }: ContextMenu$1.SubmenuRoot.Props): React$1.JSX.Element;
17
+ declare function ContextMenuSubTrigger({ className, inset, children, ...props }: ContextMenu$1.SubmenuTrigger.Props & {
18
+ inset?: boolean;
19
+ }): React$1.JSX.Element;
20
+ declare function ContextMenuSubContent({ ...props }: React$1.ComponentProps<typeof ContextMenuContent>): React$1.JSX.Element;
21
+ declare function ContextMenuCheckboxItem({ className, children, checked, inset, ...props }: ContextMenu$1.CheckboxItem.Props & {
22
+ inset?: boolean;
23
+ }): React$1.JSX.Element;
24
+ declare function ContextMenuRadioGroup({ ...props }: ContextMenu$1.RadioGroup.Props): React$1.JSX.Element;
25
+ declare function ContextMenuRadioItem({ className, children, inset, ...props }: ContextMenu$1.RadioItem.Props & {
26
+ inset?: boolean;
27
+ }): React$1.JSX.Element;
28
+ declare function ContextMenuSeparator({ className, ...props }: ContextMenu$1.Separator.Props): React$1.JSX.Element;
29
+ declare function ContextMenuShortcut({ className, ...props }: React$1.ComponentProps<"span">): React$1.JSX.Element;
30
+ //#endregion
31
+ export { ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger };
@@ -0,0 +1,132 @@
1
+ import "react";
2
+ import { cn } from "cn";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ import { CheckIcon, ChevronRightIcon } from "lucide-react";
5
+ import { ContextMenu as ContextMenu$1 } from "@base-ui/react/context-menu";
6
+ //#region src/components/ui/context-menu.tsx
7
+ function ContextMenu({ ...props }) {
8
+ return /* @__PURE__ */ jsx(ContextMenu$1.Root, {
9
+ "data-slot": "context-menu",
10
+ ...props
11
+ });
12
+ }
13
+ function ContextMenuPortal({ ...props }) {
14
+ return /* @__PURE__ */ jsx(ContextMenu$1.Portal, {
15
+ "data-slot": "context-menu-portal",
16
+ ...props
17
+ });
18
+ }
19
+ function ContextMenuTrigger({ className, ...props }) {
20
+ return /* @__PURE__ */ jsx(ContextMenu$1.Trigger, {
21
+ "data-slot": "context-menu-trigger",
22
+ className: cn("select-none", className),
23
+ ...props
24
+ });
25
+ }
26
+ function ContextMenuContent({ className, align = "start", alignOffset = 4, side = "right", sideOffset = 0, ...props }) {
27
+ return /* @__PURE__ */ jsx(ContextMenu$1.Portal, { children: /* @__PURE__ */ jsx(ContextMenu$1.Positioner, {
28
+ className: "isolate z-50 outline-none",
29
+ align,
30
+ alignOffset,
31
+ side,
32
+ sideOffset,
33
+ children: /* @__PURE__ */ jsx(ContextMenu$1.Popup, {
34
+ "data-slot": "context-menu-content",
35
+ className: cn("z-50 max-h-(--available-height) min-w-36 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-md bg-popover p-1 text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 outline-none 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),
36
+ ...props
37
+ })
38
+ }) });
39
+ }
40
+ function ContextMenuGroup({ ...props }) {
41
+ return /* @__PURE__ */ jsx(ContextMenu$1.Group, {
42
+ "data-slot": "context-menu-group",
43
+ ...props
44
+ });
45
+ }
46
+ function ContextMenuLabel({ className, inset, ...props }) {
47
+ return /* @__PURE__ */ jsx(ContextMenu$1.GroupLabel, {
48
+ "data-slot": "context-menu-label",
49
+ "data-inset": inset,
50
+ className: cn("px-2 py-1.5 text-xs font-medium text-muted-foreground data-inset:pl-8", className),
51
+ ...props
52
+ });
53
+ }
54
+ function ContextMenuItem({ className, inset, variant = "default", ...props }) {
55
+ return /* @__PURE__ */ jsx(ContextMenu$1.Item, {
56
+ "data-slot": "context-menu-item",
57
+ "data-inset": inset,
58
+ "data-variant": variant,
59
+ className: cn("group/context-menu-item relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-inset:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 focus:*:[svg]:text-accent-foreground data-[variant=destructive]:*:[svg]:text-destructive", className),
60
+ ...props
61
+ });
62
+ }
63
+ function ContextMenuSub({ ...props }) {
64
+ return /* @__PURE__ */ jsx(ContextMenu$1.SubmenuRoot, {
65
+ "data-slot": "context-menu-sub",
66
+ ...props
67
+ });
68
+ }
69
+ function ContextMenuSubTrigger({ className, inset, children, ...props }) {
70
+ return /* @__PURE__ */ jsxs(ContextMenu$1.SubmenuTrigger, {
71
+ "data-slot": "context-menu-sub-trigger",
72
+ "data-inset": inset,
73
+ className: cn("flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-inset:pl-8 data-open:bg-accent data-open:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className),
74
+ ...props,
75
+ children: [children, /* @__PURE__ */ jsx(ChevronRightIcon, { className: "ml-auto" })]
76
+ });
77
+ }
78
+ function ContextMenuSubContent({ ...props }) {
79
+ return /* @__PURE__ */ jsx(ContextMenuContent, {
80
+ "data-slot": "context-menu-sub-content",
81
+ className: "shadow-lg",
82
+ side: "right",
83
+ ...props
84
+ });
85
+ }
86
+ function ContextMenuCheckboxItem({ className, children, checked, inset, ...props }) {
87
+ return /* @__PURE__ */ jsxs(ContextMenu$1.CheckboxItem, {
88
+ "data-slot": "context-menu-checkbox-item",
89
+ "data-inset": inset,
90
+ className: cn("relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-inset:pl-8 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className),
91
+ checked,
92
+ ...props,
93
+ children: [/* @__PURE__ */ jsx("span", {
94
+ className: "pointer-events-none absolute right-2",
95
+ children: /* @__PURE__ */ jsx(ContextMenu$1.CheckboxItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, {}) })
96
+ }), children]
97
+ });
98
+ }
99
+ function ContextMenuRadioGroup({ ...props }) {
100
+ return /* @__PURE__ */ jsx(ContextMenu$1.RadioGroup, {
101
+ "data-slot": "context-menu-radio-group",
102
+ ...props
103
+ });
104
+ }
105
+ function ContextMenuRadioItem({ className, children, inset, ...props }) {
106
+ return /* @__PURE__ */ jsxs(ContextMenu$1.RadioItem, {
107
+ "data-slot": "context-menu-radio-item",
108
+ "data-inset": inset,
109
+ className: cn("relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-inset:pl-8 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className),
110
+ ...props,
111
+ children: [/* @__PURE__ */ jsx("span", {
112
+ className: "pointer-events-none absolute right-2",
113
+ children: /* @__PURE__ */ jsx(ContextMenu$1.RadioItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, {}) })
114
+ }), children]
115
+ });
116
+ }
117
+ function ContextMenuSeparator({ className, ...props }) {
118
+ return /* @__PURE__ */ jsx(ContextMenu$1.Separator, {
119
+ "data-slot": "context-menu-separator",
120
+ className: cn("-mx-1 my-1 h-px bg-border", className),
121
+ ...props
122
+ });
123
+ }
124
+ function ContextMenuShortcut({ className, ...props }) {
125
+ return /* @__PURE__ */ jsx("span", {
126
+ "data-slot": "context-menu-shortcut",
127
+ className: cn("ml-auto text-xs tracking-widest text-muted-foreground group-focus/context-menu-item:text-accent-foreground", className),
128
+ ...props
129
+ });
130
+ }
131
+ //#endregion
132
+ export { ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger };
@@ -0,0 +1,19 @@
1
+ import * as React$1 from "react";
2
+ import { Dialog as Dialog$1 } from "@base-ui/react/dialog";
3
+ //#region src/components/ui/dialog.d.ts
4
+ declare function Dialog({ ...props }: Dialog$1.Root.Props): React$1.JSX.Element;
5
+ declare function DialogTrigger({ ...props }: Dialog$1.Trigger.Props): React$1.JSX.Element;
6
+ declare function DialogPortal({ ...props }: Dialog$1.Portal.Props): React$1.JSX.Element;
7
+ declare function DialogClose({ ...props }: Dialog$1.Close.Props): React$1.JSX.Element;
8
+ declare function DialogOverlay({ className, ...props }: Dialog$1.Backdrop.Props): React$1.JSX.Element;
9
+ declare function DialogContent({ className, children, showCloseButton, ...props }: Dialog$1.Popup.Props & {
10
+ showCloseButton?: boolean;
11
+ }): React$1.JSX.Element;
12
+ declare function DialogHeader({ className, ...props }: React$1.ComponentProps<"div">): React$1.JSX.Element;
13
+ declare function DialogFooter({ className, showCloseButton, children, ...props }: React$1.ComponentProps<"div"> & {
14
+ showCloseButton?: boolean;
15
+ }): React$1.JSX.Element;
16
+ declare function DialogTitle({ className, ...props }: Dialog$1.Title.Props): React$1.JSX.Element;
17
+ declare function DialogDescription({ className, ...props }: Dialog$1.Description.Props): React$1.JSX.Element;
18
+ //#endregion
19
+ export { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger };
@@ -0,0 +1,91 @@
1
+ import { Button } from "./button.js";
2
+ import "react";
3
+ import { cn } from "cn";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ import { XIcon } from "lucide-react";
6
+ import { Dialog as Dialog$1 } from "@base-ui/react/dialog";
7
+ //#region src/components/ui/dialog.tsx
8
+ function Dialog({ ...props }) {
9
+ return /* @__PURE__ */ jsx(Dialog$1.Root, {
10
+ "data-slot": "dialog",
11
+ ...props
12
+ });
13
+ }
14
+ function DialogTrigger({ ...props }) {
15
+ return /* @__PURE__ */ jsx(Dialog$1.Trigger, {
16
+ "data-slot": "dialog-trigger",
17
+ ...props
18
+ });
19
+ }
20
+ function DialogPortal({ ...props }) {
21
+ return /* @__PURE__ */ jsx(Dialog$1.Portal, {
22
+ "data-slot": "dialog-portal",
23
+ ...props
24
+ });
25
+ }
26
+ function DialogClose({ ...props }) {
27
+ return /* @__PURE__ */ jsx(Dialog$1.Close, {
28
+ "data-slot": "dialog-close",
29
+ ...props
30
+ });
31
+ }
32
+ function DialogOverlay({ className, ...props }) {
33
+ return /* @__PURE__ */ jsx(Dialog$1.Backdrop, {
34
+ "data-slot": "dialog-overlay",
35
+ className: cn("fixed inset-0 isolate z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0", className),
36
+ ...props
37
+ });
38
+ }
39
+ function DialogContent({ className, children, showCloseButton = true, ...props }) {
40
+ return /* @__PURE__ */ jsxs(DialogPortal, { children: [/* @__PURE__ */ jsx(DialogOverlay, {}), /* @__PURE__ */ jsxs(Dialog$1.Popup, {
41
+ "data-slot": "dialog-content",
42
+ className: cn("fixed top-1/2 left-1/2 z-50 grid w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 gap-6 rounded-xl bg-popover p-6 text-sm text-popover-foreground ring-1 ring-foreground/10 duration-100 outline-none sm:max-w-md 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),
43
+ ...props,
44
+ children: [children, showCloseButton && /* @__PURE__ */ jsxs(Dialog$1.Close, {
45
+ "data-slot": "dialog-close",
46
+ render: /* @__PURE__ */ jsx(Button, {
47
+ variant: "ghost",
48
+ className: "absolute top-4 right-4",
49
+ size: "icon-sm"
50
+ }),
51
+ children: [/* @__PURE__ */ jsx(XIcon, {}), /* @__PURE__ */ jsx("span", {
52
+ className: "sr-only",
53
+ children: "Close"
54
+ })]
55
+ })]
56
+ })] });
57
+ }
58
+ function DialogHeader({ className, ...props }) {
59
+ return /* @__PURE__ */ jsx("div", {
60
+ "data-slot": "dialog-header",
61
+ className: cn("flex flex-col gap-2", className),
62
+ ...props
63
+ });
64
+ }
65
+ function DialogFooter({ className, showCloseButton = false, children, ...props }) {
66
+ return /* @__PURE__ */ jsxs("div", {
67
+ "data-slot": "dialog-footer",
68
+ className: cn("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end", className),
69
+ ...props,
70
+ children: [children, showCloseButton && /* @__PURE__ */ jsx(Dialog$1.Close, {
71
+ render: /* @__PURE__ */ jsx(Button, { variant: "outline" }),
72
+ children: "Close"
73
+ })]
74
+ });
75
+ }
76
+ function DialogTitle({ className, ...props }) {
77
+ return /* @__PURE__ */ jsx(Dialog$1.Title, {
78
+ "data-slot": "dialog-title",
79
+ className: cn("leading-none font-medium", className),
80
+ ...props
81
+ });
82
+ }
83
+ function DialogDescription({ className, ...props }) {
84
+ return /* @__PURE__ */ jsx(Dialog$1.Description, {
85
+ "data-slot": "dialog-description",
86
+ className: cn("text-sm text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground", className),
87
+ ...props
88
+ });
89
+ }
90
+ //#endregion
91
+ export { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger };
@@ -0,0 +1,31 @@
1
+ import * as React$1 from "react";
2
+ import { Menu } from "@base-ui/react/menu";
3
+ //#region src/components/ui/dropdown-menu.d.ts
4
+ declare function DropdownMenu({ ...props }: Menu.Root.Props): React$1.JSX.Element;
5
+ declare function DropdownMenuPortal({ ...props }: Menu.Portal.Props): React$1.JSX.Element;
6
+ declare function DropdownMenuTrigger({ ...props }: Menu.Trigger.Props): React$1.JSX.Element;
7
+ declare function DropdownMenuContent({ align, alignOffset, side, sideOffset, className, ...props }: Menu.Popup.Props & Pick<Menu.Positioner.Props, "align" | "alignOffset" | "side" | "sideOffset">): React$1.JSX.Element;
8
+ declare function DropdownMenuGroup({ ...props }: Menu.Group.Props): React$1.JSX.Element;
9
+ declare function DropdownMenuLabel({ className, inset, ...props }: Menu.GroupLabel.Props & {
10
+ inset?: boolean;
11
+ }): React$1.JSX.Element;
12
+ declare function DropdownMenuItem({ className, inset, variant, ...props }: Menu.Item.Props & {
13
+ inset?: boolean;
14
+ variant?: "default" | "destructive";
15
+ }): React$1.JSX.Element;
16
+ declare function DropdownMenuSub({ ...props }: Menu.SubmenuRoot.Props): React$1.JSX.Element;
17
+ declare function DropdownMenuSubTrigger({ className, inset, children, ...props }: Menu.SubmenuTrigger.Props & {
18
+ inset?: boolean;
19
+ }): React$1.JSX.Element;
20
+ declare function DropdownMenuSubContent({ align, alignOffset, side, sideOffset, className, ...props }: React$1.ComponentProps<typeof DropdownMenuContent>): React$1.JSX.Element;
21
+ declare function DropdownMenuCheckboxItem({ className, children, checked, inset, ...props }: Menu.CheckboxItem.Props & {
22
+ inset?: boolean;
23
+ }): React$1.JSX.Element;
24
+ declare function DropdownMenuRadioGroup({ ...props }: Menu.RadioGroup.Props): React$1.JSX.Element;
25
+ declare function DropdownMenuRadioItem({ className, children, inset, ...props }: Menu.RadioItem.Props & {
26
+ inset?: boolean;
27
+ }): React$1.JSX.Element;
28
+ declare function DropdownMenuSeparator({ className, ...props }: Menu.Separator.Props): React$1.JSX.Element;
29
+ declare function DropdownMenuShortcut({ className, ...props }: React$1.ComponentProps<"span">): React$1.JSX.Element;
30
+ //#endregion
31
+ export { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger };
@@ -0,0 +1,136 @@
1
+ import "react";
2
+ import { cn } from "cn";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ import { CheckIcon, ChevronRightIcon } from "lucide-react";
5
+ import { Menu } from "@base-ui/react/menu";
6
+ //#region src/components/ui/dropdown-menu.tsx
7
+ function DropdownMenu({ ...props }) {
8
+ return /* @__PURE__ */ jsx(Menu.Root, {
9
+ "data-slot": "dropdown-menu",
10
+ ...props
11
+ });
12
+ }
13
+ function DropdownMenuPortal({ ...props }) {
14
+ return /* @__PURE__ */ jsx(Menu.Portal, {
15
+ "data-slot": "dropdown-menu-portal",
16
+ ...props
17
+ });
18
+ }
19
+ function DropdownMenuTrigger({ ...props }) {
20
+ return /* @__PURE__ */ jsx(Menu.Trigger, {
21
+ "data-slot": "dropdown-menu-trigger",
22
+ ...props
23
+ });
24
+ }
25
+ function DropdownMenuContent({ align = "start", alignOffset = 0, side = "bottom", sideOffset = 4, className, ...props }) {
26
+ return /* @__PURE__ */ jsx(Menu.Portal, { children: /* @__PURE__ */ jsx(Menu.Positioner, {
27
+ className: "isolate z-50 outline-none",
28
+ align,
29
+ alignOffset,
30
+ side,
31
+ sideOffset,
32
+ children: /* @__PURE__ */ jsx(Menu.Popup, {
33
+ "data-slot": "dropdown-menu-content",
34
+ className: cn("z-50 max-h-(--available-height) w-(--anchor-width) min-w-32 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-md bg-popover p-1 text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 outline-none 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:overflow-hidden data-closed:fade-out-0 data-closed:zoom-out-95", className),
35
+ ...props
36
+ })
37
+ }) });
38
+ }
39
+ function DropdownMenuGroup({ ...props }) {
40
+ return /* @__PURE__ */ jsx(Menu.Group, {
41
+ "data-slot": "dropdown-menu-group",
42
+ ...props
43
+ });
44
+ }
45
+ function DropdownMenuLabel({ className, inset, ...props }) {
46
+ return /* @__PURE__ */ jsx(Menu.GroupLabel, {
47
+ "data-slot": "dropdown-menu-label",
48
+ "data-inset": inset,
49
+ className: cn("px-2 py-1.5 text-xs font-medium text-muted-foreground data-inset:pl-8", className),
50
+ ...props
51
+ });
52
+ }
53
+ function DropdownMenuItem({ className, inset, variant = "default", ...props }) {
54
+ return /* @__PURE__ */ jsx(Menu.Item, {
55
+ "data-slot": "dropdown-menu-item",
56
+ "data-inset": inset,
57
+ "data-variant": variant,
58
+ className: cn("group/dropdown-menu-item relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-[variant=destructive]:*:[svg]:text-destructive", className),
59
+ ...props
60
+ });
61
+ }
62
+ function DropdownMenuSub({ ...props }) {
63
+ return /* @__PURE__ */ jsx(Menu.SubmenuRoot, {
64
+ "data-slot": "dropdown-menu-sub",
65
+ ...props
66
+ });
67
+ }
68
+ function DropdownMenuSubTrigger({ className, inset, children, ...props }) {
69
+ return /* @__PURE__ */ jsxs(Menu.SubmenuTrigger, {
70
+ "data-slot": "dropdown-menu-sub-trigger",
71
+ "data-inset": inset,
72
+ className: cn("flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-8 data-popup-open:bg-accent data-popup-open:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className),
73
+ ...props,
74
+ children: [children, /* @__PURE__ */ jsx(ChevronRightIcon, { className: "ml-auto" })]
75
+ });
76
+ }
77
+ function DropdownMenuSubContent({ align = "start", alignOffset = -3, side = "right", sideOffset = 0, className, ...props }) {
78
+ return /* @__PURE__ */ jsx(DropdownMenuContent, {
79
+ "data-slot": "dropdown-menu-sub-content",
80
+ className: cn("w-auto min-w-[96px] rounded-md bg-popover p-1 text-popover-foreground shadow-lg ring-1 ring-foreground/10 duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open: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),
81
+ align,
82
+ alignOffset,
83
+ side,
84
+ sideOffset,
85
+ ...props
86
+ });
87
+ }
88
+ function DropdownMenuCheckboxItem({ className, children, checked, inset, ...props }) {
89
+ return /* @__PURE__ */ jsxs(Menu.CheckboxItem, {
90
+ "data-slot": "dropdown-menu-checkbox-item",
91
+ "data-inset": inset,
92
+ className: cn("relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-8 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className),
93
+ checked,
94
+ ...props,
95
+ children: [/* @__PURE__ */ jsx("span", {
96
+ className: "pointer-events-none absolute right-2 flex items-center justify-center",
97
+ "data-slot": "dropdown-menu-checkbox-item-indicator",
98
+ children: /* @__PURE__ */ jsx(Menu.CheckboxItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, {}) })
99
+ }), children]
100
+ });
101
+ }
102
+ function DropdownMenuRadioGroup({ ...props }) {
103
+ return /* @__PURE__ */ jsx(Menu.RadioGroup, {
104
+ "data-slot": "dropdown-menu-radio-group",
105
+ ...props
106
+ });
107
+ }
108
+ function DropdownMenuRadioItem({ className, children, inset, ...props }) {
109
+ return /* @__PURE__ */ jsxs(Menu.RadioItem, {
110
+ "data-slot": "dropdown-menu-radio-item",
111
+ "data-inset": inset,
112
+ className: cn("relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-8 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className),
113
+ ...props,
114
+ children: [/* @__PURE__ */ jsx("span", {
115
+ className: "pointer-events-none absolute right-2 flex items-center justify-center",
116
+ "data-slot": "dropdown-menu-radio-item-indicator",
117
+ children: /* @__PURE__ */ jsx(Menu.RadioItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, {}) })
118
+ }), children]
119
+ });
120
+ }
121
+ function DropdownMenuSeparator({ className, ...props }) {
122
+ return /* @__PURE__ */ jsx(Menu.Separator, {
123
+ "data-slot": "dropdown-menu-separator",
124
+ className: cn("-mx-1 my-1 h-px bg-border", className),
125
+ ...props
126
+ });
127
+ }
128
+ function DropdownMenuShortcut({ className, ...props }) {
129
+ return /* @__PURE__ */ jsx("span", {
130
+ "data-slot": "dropdown-menu-shortcut",
131
+ className: cn("ml-auto text-xs tracking-widest text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground", className),
132
+ ...props
133
+ });
134
+ }
135
+ //#endregion
136
+ export { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger };
@@ -0,0 +1,20 @@
1
+ import { Button } from "./button.js";
2
+ import * as React$1 from "react";
3
+ import { VariantProps } from "class-variance-authority";
4
+ //#region src/components/ui/input-group.d.ts
5
+ declare function InputGroup({ className, ...props }: React$1.ComponentProps<"div">): React$1.JSX.Element;
6
+ declare const inputGroupAddonVariants: (props?: ({
7
+ align?: "block-end" | "block-start" | "inline-end" | "inline-start" | null | undefined;
8
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
9
+ declare function InputGroupAddon({ className, align, ...props }: React$1.ComponentProps<"div"> & VariantProps<typeof inputGroupAddonVariants>): React$1.JSX.Element;
10
+ declare const inputGroupButtonVariants: (props?: ({
11
+ size?: "icon-sm" | "icon-xs" | "sm" | "xs" | null | undefined;
12
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
13
+ declare function InputGroupButton({ className, type, variant, size, ...props }: Omit<React$1.ComponentProps<typeof Button>, "size" | "type"> & VariantProps<typeof inputGroupButtonVariants> & {
14
+ type?: "button" | "submit" | "reset";
15
+ }): React$1.JSX.Element;
16
+ declare function InputGroupText({ className, ...props }: React$1.ComponentProps<"span">): React$1.JSX.Element;
17
+ declare function InputGroupInput({ className, ...props }: React$1.ComponentProps<"input">): React$1.JSX.Element;
18
+ declare function InputGroupTextarea({ className, ...props }: React$1.ComponentProps<"textarea">): React$1.JSX.Element;
19
+ //#endregion
20
+ export { InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea };
@@ -0,0 +1,79 @@
1
+ "use client";
2
+ import { Button } from "./button.js";
3
+ import { Input } from "./input.js";
4
+ import { Textarea } from "./textarea.js";
5
+ import "react";
6
+ import { cva } from "class-variance-authority";
7
+ import { cn } from "cn";
8
+ import { jsx } from "react/jsx-runtime";
9
+ //#region src/components/ui/input-group.tsx
10
+ function InputGroup({ className, ...props }) {
11
+ return /* @__PURE__ */ jsx("div", {
12
+ "data-slot": "input-group",
13
+ role: "group",
14
+ className: cn("group/input-group relative flex h-9 w-full min-w-0 items-center rounded-md border border-input shadow-xs transition-[color,box-shadow] outline-none in-data-[slot=combobox-content]:focus-within:border-inherit in-data-[slot=combobox-content]:focus-within:ring-0 has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-3 has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50 has-[[data-slot][aria-invalid=true]]:border-destructive has-[[data-slot][aria-invalid=true]]:ring-3 has-[[data-slot][aria-invalid=true]]:ring-destructive/20 has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>textarea]:h-auto dark:bg-input/30 dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40 has-[>[data-align=block-end]]:[&>input]:pt-3 has-[>[data-align=block-start]]:[&>input]:pb-3 has-[>[data-align=inline-end]]:[&>input]:pr-1.5 has-[>[data-align=inline-start]]:[&>input]:pl-1.5", className),
15
+ ...props
16
+ });
17
+ }
18
+ const inputGroupAddonVariants = cva("flex h-auto cursor-text items-center justify-center gap-2 py-1.5 text-sm font-medium text-muted-foreground select-none group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-4", {
19
+ variants: { align: {
20
+ "inline-start": "order-first pl-2 has-[>button]:-ml-1 has-[>kbd]:ml-[-0.15rem]",
21
+ "inline-end": "order-last pr-2 has-[>button]:-mr-1 has-[>kbd]:mr-[-0.15rem]",
22
+ "block-start": "order-first w-full justify-start px-2.5 pt-2 group-has-[>input]/input-group:pt-2 [.border-b]:pb-2",
23
+ "block-end": "order-last w-full justify-start px-2.5 pb-2 group-has-[>input]/input-group:pb-2 [.border-t]:pt-2"
24
+ } },
25
+ defaultVariants: { align: "inline-start" }
26
+ });
27
+ function InputGroupAddon({ className, align = "inline-start", ...props }) {
28
+ return /* @__PURE__ */ jsx("div", {
29
+ role: "group",
30
+ "data-slot": "input-group-addon",
31
+ "data-align": align,
32
+ className: cn(inputGroupAddonVariants({ align }), className),
33
+ onClick: (e) => {
34
+ if (e.target.closest("button")) return;
35
+ e.currentTarget.parentElement?.querySelector("input")?.focus();
36
+ },
37
+ ...props
38
+ });
39
+ }
40
+ const inputGroupButtonVariants = cva("flex items-center gap-2 text-sm shadow-none", {
41
+ variants: { size: {
42
+ xs: "h-6 gap-1 rounded-[calc(var(--radius)-5px)] px-1.5 [&>svg:not([class*='size-'])]:size-3.5",
43
+ sm: "",
44
+ "icon-xs": "size-6 rounded-[calc(var(--radius)-5px)] p-0 has-[>svg]:p-0",
45
+ "icon-sm": "size-8 p-0 has-[>svg]:p-0"
46
+ } },
47
+ defaultVariants: { size: "xs" }
48
+ });
49
+ function InputGroupButton({ className, type = "button", variant = "ghost", size = "xs", ...props }) {
50
+ return /* @__PURE__ */ jsx(Button, {
51
+ type,
52
+ "data-size": size,
53
+ variant,
54
+ className: cn(inputGroupButtonVariants({ size }), className),
55
+ ...props
56
+ });
57
+ }
58
+ function InputGroupText({ className, ...props }) {
59
+ return /* @__PURE__ */ jsx("span", {
60
+ className: cn("flex items-center gap-2 text-sm text-muted-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4", className),
61
+ ...props
62
+ });
63
+ }
64
+ function InputGroupInput({ className, ...props }) {
65
+ return /* @__PURE__ */ jsx(Input, {
66
+ "data-slot": "input-group-control",
67
+ className: cn("flex-1 rounded-none border-0 bg-transparent shadow-none ring-0 focus-visible:ring-0 aria-invalid:ring-0 dark:bg-transparent", className),
68
+ ...props
69
+ });
70
+ }
71
+ function InputGroupTextarea({ className, ...props }) {
72
+ return /* @__PURE__ */ jsx(Textarea, {
73
+ "data-slot": "input-group-control",
74
+ className: cn("flex-1 resize-none rounded-none border-0 bg-transparent py-2 shadow-none ring-0 focus-visible:ring-0 aria-invalid:ring-0 dark:bg-transparent", className),
75
+ ...props
76
+ });
77
+ }
78
+ //#endregion
79
+ export { InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea };
@@ -0,0 +1,5 @@
1
+ import * as React$1 from "react";
2
+ //#region src/components/ui/input.d.ts
3
+ declare function Input({ className, type, ...props }: React$1.ComponentProps<"input">): React$1.JSX.Element;
4
+ //#endregion
5
+ export { Input };