@exsto/ds 0.0.1-rc.13 → 0.0.1-rc.15

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 (184) hide show
  1. package/dist/date-picker.js +1 -344
  2. package/dist/index.js +75 -4513
  3. package/dist/rich-text-editor.js +3 -904
  4. package/dist/source-hash.txt +1 -1
  5. package/dist/styles.css +9 -8
  6. package/dist/ui/src/components/edyn/animated-number/animated-number.js +108 -0
  7. package/dist/ui/src/components/edyn/animated-number/animated-number.js.map +1 -0
  8. package/dist/ui/src/components/edyn/audio-player/audio-player.js +86 -0
  9. package/dist/ui/src/components/edyn/audio-player/audio-player.js.map +1 -0
  10. package/dist/ui/src/components/edyn/date-picker/date-picker.js +250 -0
  11. package/dist/ui/src/components/edyn/date-picker/date-picker.js.map +1 -0
  12. package/dist/ui/src/components/edyn/date-picker/date-text.js +105 -0
  13. package/dist/ui/src/components/edyn/date-picker/date-text.js.map +1 -0
  14. package/dist/ui/src/components/edyn/date-range-picker/date-range-picker.js +59 -0
  15. package/dist/ui/src/components/edyn/date-range-picker/date-range-picker.js.map +1 -0
  16. package/dist/ui/src/components/edyn/initials-avatar/initials-avatar.js +86 -0
  17. package/dist/ui/src/components/edyn/initials-avatar/initials-avatar.js.map +1 -0
  18. package/dist/ui/src/components/edyn/multi-select/multi-select.js +332 -0
  19. package/dist/ui/src/components/edyn/multi-select/multi-select.js.map +1 -0
  20. package/dist/ui/src/components/edyn/progress-line/progress-line.js +100 -0
  21. package/dist/ui/src/components/edyn/progress-line/progress-line.js.map +1 -0
  22. package/dist/ui/src/components/edyn/rich-text-content/allow-list.js +37 -0
  23. package/dist/ui/src/components/edyn/rich-text-content/allow-list.js.map +1 -0
  24. package/dist/ui/src/components/edyn/rich-text-content/rich-text-content.js +124 -0
  25. package/dist/ui/src/components/edyn/rich-text-content/rich-text-content.js.map +1 -0
  26. package/dist/ui/src/components/edyn/rich-text-editor/extensions.js +124 -0
  27. package/dist/ui/src/components/edyn/rich-text-editor/extensions.js.map +1 -0
  28. package/dist/ui/src/components/edyn/rich-text-editor/mention-list.js +232 -0
  29. package/dist/ui/src/components/edyn/rich-text-editor/mention-list.js.map +1 -0
  30. package/dist/ui/src/components/edyn/rich-text-editor/rich-text-editor.js +244 -0
  31. package/dist/ui/src/components/edyn/rich-text-editor/rich-text-editor.js.map +1 -0
  32. package/dist/ui/src/components/edyn/rich-text-editor/serialize.js +55 -0
  33. package/dist/ui/src/components/edyn/rich-text-editor/serialize.js.map +1 -0
  34. package/dist/ui/src/components/edyn/rich-text-editor/sync.js +34 -0
  35. package/dist/ui/src/components/edyn/rich-text-editor/sync.js.map +1 -0
  36. package/dist/ui/src/components/edyn/rich-text-editor/toolbar.js +235 -0
  37. package/dist/ui/src/components/edyn/rich-text-editor/toolbar.js.map +1 -0
  38. package/dist/ui/src/components/edyn/rich-text-editor/types.js +26 -0
  39. package/dist/ui/src/components/edyn/rich-text-editor/types.js.map +1 -0
  40. package/dist/ui/src/components/edyn/video-player/video-player.js +132 -0
  41. package/dist/ui/src/components/edyn/video-player/video-player.js.map +1 -0
  42. package/dist/ui/src/components/ui/accordion/accordion.js +83 -0
  43. package/dist/ui/src/components/ui/accordion/accordion.js.map +1 -0
  44. package/dist/ui/src/components/ui/alert/alert.js +47 -0
  45. package/dist/ui/src/components/ui/alert/alert.js.map +1 -0
  46. package/dist/ui/src/components/ui/alert-dialog/alert-dialog.js +95 -0
  47. package/dist/ui/src/components/ui/alert-dialog/alert-dialog.js.map +1 -0
  48. package/dist/ui/src/components/ui/aspect-ratio/aspect-ratio.js +15 -0
  49. package/dist/ui/src/components/ui/aspect-ratio/aspect-ratio.js.map +1 -0
  50. package/dist/ui/src/components/ui/attachment/attachment.js +105 -0
  51. package/dist/ui/src/components/ui/attachment/attachment.js.map +1 -0
  52. package/dist/ui/src/components/ui/avatar/avatar.js +51 -0
  53. package/dist/ui/src/components/ui/avatar/avatar.js.map +1 -0
  54. package/dist/ui/src/components/ui/badge/badge.js +47 -0
  55. package/dist/ui/src/components/ui/badge/badge.js.map +1 -0
  56. package/dist/ui/src/components/ui/breadcrumb/breadcrumb.js +73 -0
  57. package/dist/ui/src/components/ui/breadcrumb/breadcrumb.js.map +1 -0
  58. package/dist/ui/src/components/ui/bubble/bubble.js +74 -0
  59. package/dist/ui/src/components/ui/bubble/bubble.js.map +1 -0
  60. package/dist/{chunks/input-syWxjY2U.js → ui/src/components/ui/button/button.js} +3 -82
  61. package/dist/ui/src/components/ui/button/button.js.map +1 -0
  62. package/dist/ui/src/components/ui/button-group/button-group.js +37 -0
  63. package/dist/ui/src/components/ui/button-group/button-group.js.map +1 -0
  64. package/dist/{chunks/date-range-picker-CWVcHgy2.js → ui/src/components/ui/calendar/calendar.js} +6 -100
  65. package/dist/ui/src/components/ui/calendar/calendar.js.map +1 -0
  66. package/dist/ui/src/components/ui/card/card.js +57 -0
  67. package/dist/ui/src/components/ui/card/card.js.map +1 -0
  68. package/dist/ui/src/components/ui/carousel/carousel.js +136 -0
  69. package/dist/ui/src/components/ui/carousel/carousel.js.map +1 -0
  70. package/dist/ui/src/components/ui/chart/chart.js +168 -0
  71. package/dist/ui/src/components/ui/chart/chart.js.map +1 -0
  72. package/dist/ui/src/components/ui/checkbox/checkbox.js +21 -0
  73. package/dist/ui/src/components/ui/checkbox/checkbox.js.map +1 -0
  74. package/dist/ui/src/components/ui/collapsible/collapsible.js +26 -0
  75. package/dist/ui/src/components/ui/collapsible/collapsible.js.map +1 -0
  76. package/dist/ui/src/components/ui/combobox/combobox.js +85 -0
  77. package/dist/ui/src/components/ui/combobox/combobox.js.map +1 -0
  78. package/dist/ui/src/components/ui/command/command.js +118 -0
  79. package/dist/ui/src/components/ui/command/command.js.map +1 -0
  80. package/dist/ui/src/components/ui/context-menu/context-menu.js +134 -0
  81. package/dist/ui/src/components/ui/context-menu/context-menu.js.map +1 -0
  82. package/dist/ui/src/components/ui/dialog/dialog.js +92 -0
  83. package/dist/ui/src/components/ui/dialog/dialog.js.map +1 -0
  84. package/dist/ui/src/components/ui/direction/direction.js +2 -0
  85. package/dist/ui/src/components/ui/drawer/drawer.js +86 -0
  86. package/dist/ui/src/components/ui/drawer/drawer.js.map +1 -0
  87. package/dist/ui/src/components/ui/dropdown-menu/dropdown-menu.js +160 -0
  88. package/dist/ui/src/components/ui/dropdown-menu/dropdown-menu.js.map +1 -0
  89. package/dist/ui/src/components/ui/empty/empty.js +61 -0
  90. package/dist/ui/src/components/ui/empty/empty.js.map +1 -0
  91. package/dist/ui/src/components/ui/field/field.js +36 -0
  92. package/dist/ui/src/components/ui/field/field.js.map +1 -0
  93. package/dist/ui/src/components/ui/hover-card/hover-card.js +38 -0
  94. package/dist/ui/src/components/ui/hover-card/hover-card.js.map +1 -0
  95. package/dist/ui/src/components/ui/indicator/indicator.js +79 -0
  96. package/dist/ui/src/components/ui/indicator/indicator.js.map +1 -0
  97. package/dist/ui/src/components/ui/input/input.js +16 -0
  98. package/dist/ui/src/components/ui/input/input.js.map +1 -0
  99. package/dist/ui/src/components/ui/input-group/input-group.js +77 -0
  100. package/dist/ui/src/components/ui/input-group/input-group.js.map +1 -0
  101. package/dist/ui/src/components/ui/input-otp/input-otp.js +48 -0
  102. package/dist/ui/src/components/ui/input-otp/input-otp.js.map +1 -0
  103. package/dist/ui/src/components/ui/item/item.js +122 -0
  104. package/dist/ui/src/components/ui/item/item.js.map +1 -0
  105. package/dist/ui/src/components/ui/kbd/kbd.js +21 -0
  106. package/dist/ui/src/components/ui/kbd/kbd.js.map +1 -0
  107. package/dist/ui/src/components/ui/label/label.js +14 -0
  108. package/dist/ui/src/components/ui/label/label.js.map +1 -0
  109. package/dist/ui/src/components/ui/marker/marker.js +44 -0
  110. package/dist/ui/src/components/ui/marker/marker.js.map +1 -0
  111. package/dist/ui/src/components/ui/menubar/menubar.js +137 -0
  112. package/dist/ui/src/components/ui/menubar/menubar.js.map +1 -0
  113. package/dist/ui/src/components/ui/message/message.js +50 -0
  114. package/dist/ui/src/components/ui/message/message.js.map +1 -0
  115. package/dist/ui/src/components/ui/message-scroller/message-scroller.js +61 -0
  116. package/dist/ui/src/components/ui/message-scroller/message-scroller.js.map +1 -0
  117. package/dist/ui/src/components/ui/native-select/native-select.js +39 -0
  118. package/dist/ui/src/components/ui/native-select/native-select.js.map +1 -0
  119. package/dist/ui/src/components/ui/navigation-menu/navigation-menu.js +84 -0
  120. package/dist/ui/src/components/ui/navigation-menu/navigation-menu.js.map +1 -0
  121. package/dist/ui/src/components/ui/pagination/pagination.js +104 -0
  122. package/dist/ui/src/components/ui/pagination/pagination.js.map +1 -0
  123. package/dist/ui/src/components/ui/popover/popover.js +56 -0
  124. package/dist/ui/src/components/ui/popover/popover.js.map +1 -0
  125. package/dist/ui/src/components/ui/progress/progress.js +70 -0
  126. package/dist/ui/src/components/ui/progress/progress.js.map +1 -0
  127. package/dist/ui/src/components/ui/questionnaire/questionnaire.js +171 -0
  128. package/dist/ui/src/components/ui/questionnaire/questionnaire.js.map +1 -0
  129. package/dist/ui/src/components/ui/radio-group/radio-group.js +29 -0
  130. package/dist/ui/src/components/ui/radio-group/radio-group.js.map +1 -0
  131. package/dist/ui/src/components/ui/resizable/resizable.js +29 -0
  132. package/dist/ui/src/components/ui/resizable/resizable.js.map +1 -0
  133. package/dist/ui/src/components/ui/scroll-area/scroll-area.js +119 -0
  134. package/dist/ui/src/components/ui/scroll-area/scroll-area.js.map +1 -0
  135. package/dist/ui/src/components/ui/select/select.js +99 -0
  136. package/dist/ui/src/components/ui/select/select.js.map +1 -0
  137. package/dist/ui/src/components/ui/separator/separator.js +30 -0
  138. package/dist/ui/src/components/ui/separator/separator.js.map +1 -0
  139. package/dist/ui/src/components/ui/sheet/sheet.js +89 -0
  140. package/dist/ui/src/components/ui/sheet/sheet.js.map +1 -0
  141. package/dist/ui/src/components/ui/sidebar/sidebar.js +383 -0
  142. package/dist/ui/src/components/ui/sidebar/sidebar.js.map +1 -0
  143. package/dist/ui/src/components/ui/skeleton/skeleton.js +14 -0
  144. package/dist/ui/src/components/ui/skeleton/skeleton.js.map +1 -0
  145. package/dist/ui/src/components/ui/slider/slider.js +49 -0
  146. package/dist/ui/src/components/ui/slider/slider.js.map +1 -0
  147. package/dist/ui/src/components/ui/spinner/spinner.js +28 -0
  148. package/dist/ui/src/components/ui/spinner/spinner.js.map +1 -0
  149. package/dist/ui/src/components/ui/switch/switch.js +20 -0
  150. package/dist/ui/src/components/ui/switch/switch.js.map +1 -0
  151. package/dist/ui/src/components/ui/table/table.js +68 -0
  152. package/dist/ui/src/components/ui/table/table.js.map +1 -0
  153. package/dist/ui/src/components/ui/tabs/tabs.js +50 -0
  154. package/dist/ui/src/components/ui/tabs/tabs.js.map +1 -0
  155. package/dist/ui/src/components/ui/textarea/textarea.js +14 -0
  156. package/dist/ui/src/components/ui/textarea/textarea.js.map +1 -0
  157. package/dist/ui/src/components/ui/toast/toast.js +124 -0
  158. package/dist/ui/src/components/ui/toast/toast.js.map +1 -0
  159. package/dist/ui/src/components/ui/toggle/toggle.js +37 -0
  160. package/dist/ui/src/components/ui/toggle/toggle.js.map +1 -0
  161. package/dist/ui/src/components/ui/toggle-group/toggle-group.js +56 -0
  162. package/dist/ui/src/components/ui/toggle-group/toggle-group.js.map +1 -0
  163. package/dist/ui/src/components/ui/tooltip/tooltip.js +42 -0
  164. package/dist/ui/src/components/ui/tooltip/tooltip.js.map +1 -0
  165. package/dist/ui/src/hooks/use-media-player.js +140 -0
  166. package/dist/ui/src/hooks/use-media-player.js.map +1 -0
  167. package/dist/ui/src/hooks/use-merged-refs.js +18 -0
  168. package/dist/ui/src/hooks/use-merged-refs.js.map +1 -0
  169. package/dist/ui/src/hooks/use-mobile.js +20 -0
  170. package/dist/ui/src/hooks/use-mobile.js.map +1 -0
  171. package/dist/ui/src/lib/first-weekday.js +34 -0
  172. package/dist/ui/src/lib/first-weekday.js.map +1 -0
  173. package/dist/ui/src/lib/popup-list.js +26 -0
  174. package/dist/ui/src/lib/popup-list.js.map +1 -0
  175. package/dist/ui/src/lib/utils.js +21 -0
  176. package/dist/ui/src/lib/utils.js.map +1 -0
  177. package/package.json +1 -1
  178. package/dist/chunks/date-range-picker-CWVcHgy2.js.map +0 -1
  179. package/dist/chunks/input-syWxjY2U.js.map +0 -1
  180. package/dist/chunks/toggle-Bxg8P-61.js +0 -490
  181. package/dist/chunks/toggle-Bxg8P-61.js.map +0 -1
  182. package/dist/date-picker.js.map +0 -1
  183. package/dist/index.js.map +0 -1
  184. package/dist/rich-text-editor.js.map +0 -1
@@ -0,0 +1,134 @@
1
+ "use client";
2
+ import { cn } from "../../../lib/utils.js";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ import { IconCheck, IconChevronRight } from "@tabler/icons-react";
5
+ import { ContextMenu } from "@base-ui/react/context-menu";
6
+ //#region ../ui/src/components/ui/context-menu/context-menu.tsx
7
+ var ContextMenu$1 = ({ ...props }) => {
8
+ return /* @__PURE__ */ jsx(ContextMenu.Root, {
9
+ "data-slot": "context-menu",
10
+ ...props
11
+ });
12
+ };
13
+ var ContextMenuPortal = ({ ...props }) => {
14
+ return /* @__PURE__ */ jsx(ContextMenu.Portal, {
15
+ "data-slot": "context-menu-portal",
16
+ ...props
17
+ });
18
+ };
19
+ var ContextMenuTrigger = ({ className, ...props }) => {
20
+ return /* @__PURE__ */ jsx(ContextMenu.Trigger, {
21
+ "data-slot": "context-menu-trigger",
22
+ className: cn("select-none", className),
23
+ ...props
24
+ });
25
+ };
26
+ var ContextMenuContent = ({ className, align = "start", alignOffset = 4, side = "right", sideOffset = 0, ...props }) => {
27
+ return /* @__PURE__ */ jsx(ContextMenu.Portal, { children: /* @__PURE__ */ jsx(ContextMenu.Positioner, {
28
+ className: "isolate z-50 outline-none",
29
+ align,
30
+ alignOffset,
31
+ side,
32
+ sideOffset,
33
+ children: /* @__PURE__ */ jsx(ContextMenu.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-lg 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", "motion-reduce:animate-none", className),
36
+ ...props
37
+ })
38
+ }) });
39
+ };
40
+ var ContextMenuGroup = ({ ...props }) => {
41
+ return /* @__PURE__ */ jsx(ContextMenu.Group, {
42
+ "data-slot": "context-menu-group",
43
+ ...props
44
+ });
45
+ };
46
+ var ContextMenuLabel = ({ className, inset, ...props }) => {
47
+ return /* @__PURE__ */ jsx(ContextMenu.GroupLabel, {
48
+ "data-slot": "context-menu-label",
49
+ "data-inset": inset,
50
+ className: cn("px-1.5 py-1 text-xs font-medium text-muted-foreground data-[inset=true]:pl-7", className),
51
+ ...props
52
+ });
53
+ };
54
+ var ContextMenuItem = ({ className, inset, variant = "default", ...props }) => {
55
+ return /* @__PURE__ */ jsx(ContextMenu.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-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[inset=true]:pl-7 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
+ var ContextMenuSub = ({ ...props }) => {
64
+ return /* @__PURE__ */ jsx(ContextMenu.SubmenuRoot, {
65
+ "data-slot": "context-menu-sub",
66
+ ...props
67
+ });
68
+ };
69
+ var ContextMenuSubTrigger = ({ className, inset, children, ...props }) => {
70
+ return /* @__PURE__ */ jsxs(ContextMenu.SubmenuTrigger, {
71
+ "data-slot": "context-menu-sub-trigger",
72
+ "data-inset": inset,
73
+ className: cn("flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[inset=true]:pl-7 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),
74
+ ...props,
75
+ children: [children, /* @__PURE__ */ jsx(IconChevronRight, { className: "ml-auto" })]
76
+ });
77
+ };
78
+ var 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
+ var ContextMenuCheckboxItem = ({ className, children, checked, inset, ...props }) => {
87
+ return /* @__PURE__ */ jsxs(ContextMenu.CheckboxItem, {
88
+ "data-slot": "context-menu-checkbox-item",
89
+ "data-inset": inset,
90
+ className: cn("relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[inset=true]:pl-7 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.CheckboxItemIndicator, { children: /* @__PURE__ */ jsx(IconCheck, {}) })
96
+ }), children]
97
+ });
98
+ };
99
+ var ContextMenuRadioGroup = ({ ...props }) => {
100
+ return /* @__PURE__ */ jsx(ContextMenu.RadioGroup, {
101
+ "data-slot": "context-menu-radio-group",
102
+ ...props
103
+ });
104
+ };
105
+ var ContextMenuRadioItem = ({ className, children, inset, ...props }) => {
106
+ return /* @__PURE__ */ jsxs(ContextMenu.RadioItem, {
107
+ "data-slot": "context-menu-radio-item",
108
+ "data-inset": inset,
109
+ className: cn("relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[inset=true]:pl-7 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.RadioItemIndicator, { children: /* @__PURE__ */ jsx(IconCheck, {}) })
114
+ }), children]
115
+ });
116
+ };
117
+ var ContextMenuSeparator = ({ className, ...props }) => {
118
+ return /* @__PURE__ */ jsx(ContextMenu.Separator, {
119
+ "data-slot": "context-menu-separator",
120
+ className: cn("-mx-1 my-1 h-px bg-border", className),
121
+ ...props
122
+ });
123
+ };
124
+ var 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$1 as ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger };
133
+
134
+ //# sourceMappingURL=context-menu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-menu.js","names":[],"sources":["../../../../../../../ui/src/components/ui/context-menu/context-menu.tsx"],"sourcesContent":["'use client';\n\nimport { ContextMenu as ContextMenuPrimitive } from '@base-ui/react/context-menu';\nimport { cn } from '@edyn/ui/lib/utils';\nimport { IconCheck, IconChevronRight } from '@tabler/icons-react';\nimport type * as React from 'react';\n\nexport const ContextMenu = ({ ...props }: ContextMenuPrimitive.Root.Props) => {\n return <ContextMenuPrimitive.Root data-slot=\"context-menu\" {...props} />;\n};\n\nexport const ContextMenuPortal = ({ ...props }: ContextMenuPrimitive.Portal.Props) => {\n return <ContextMenuPrimitive.Portal data-slot=\"context-menu-portal\" {...props} />;\n};\n\nexport const ContextMenuTrigger = ({ className, ...props }: ContextMenuPrimitive.Trigger.Props) => {\n return <ContextMenuPrimitive.Trigger data-slot=\"context-menu-trigger\" className={cn('select-none', className)} {...props} />;\n};\n\nexport const ContextMenuContent = ({\n className,\n align = 'start',\n alignOffset = 4,\n side = 'right',\n sideOffset = 0,\n ...props\n}: ContextMenuPrimitive.Popup.Props & Pick<ContextMenuPrimitive.Positioner.Props, 'align' | 'alignOffset' | 'side' | 'sideOffset'>) => {\n return (\n <ContextMenuPrimitive.Portal>\n <ContextMenuPrimitive.Positioner\n className=\"isolate z-50 outline-none\"\n align={align}\n alignOffset={alignOffset}\n side={side}\n sideOffset={sideOffset}\n >\n <ContextMenuPrimitive.Popup\n data-slot=\"context-menu-content\"\n className={cn(\n 'z-50 max-h-(--available-height) min-w-36 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-lg 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',\n 'motion-reduce:animate-none',\n className,\n )}\n {...props}\n />\n </ContextMenuPrimitive.Positioner>\n </ContextMenuPrimitive.Portal>\n );\n};\n\nexport const ContextMenuGroup = ({ ...props }: ContextMenuPrimitive.Group.Props) => {\n return <ContextMenuPrimitive.Group data-slot=\"context-menu-group\" {...props} />;\n};\n\nexport const ContextMenuLabel = ({\n className,\n inset,\n ...props\n}: ContextMenuPrimitive.GroupLabel.Props & {\n inset?: boolean;\n}) => {\n return (\n <ContextMenuPrimitive.GroupLabel\n data-slot=\"context-menu-label\"\n data-inset={inset}\n className={cn('px-1.5 py-1 text-xs font-medium text-muted-foreground data-[inset=true]:pl-7', className)}\n {...props}\n />\n );\n};\n\nexport const ContextMenuItem = ({\n className,\n inset,\n variant = 'default',\n ...props\n}: ContextMenuPrimitive.Item.Props & {\n inset?: boolean;\n variant?: 'default' | 'destructive';\n}) => {\n return (\n <ContextMenuPrimitive.Item\n data-slot=\"context-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"group/context-menu-item relative flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[inset=true]:pl-7 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\",\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const ContextMenuSub = ({ ...props }: ContextMenuPrimitive.SubmenuRoot.Props) => {\n return <ContextMenuPrimitive.SubmenuRoot data-slot=\"context-menu-sub\" {...props} />;\n};\n\nexport const ContextMenuSubTrigger = ({\n className,\n inset,\n children,\n ...props\n}: ContextMenuPrimitive.SubmenuTrigger.Props & {\n inset?: boolean;\n}) => {\n return (\n <ContextMenuPrimitive.SubmenuTrigger\n data-slot=\"context-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[inset=true]:pl-7 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\",\n className,\n )}\n {...props}\n >\n {children}\n <IconChevronRight className=\"ml-auto\" />\n </ContextMenuPrimitive.SubmenuTrigger>\n );\n};\n\nexport const ContextMenuSubContent = ({ ...props }: React.ComponentProps<typeof ContextMenuContent>) => {\n return <ContextMenuContent data-slot=\"context-menu-sub-content\" className=\"shadow-lg\" side=\"right\" {...props} />;\n};\n\nexport const ContextMenuCheckboxItem = ({\n className,\n children,\n checked,\n inset,\n ...props\n}: ContextMenuPrimitive.CheckboxItem.Props & {\n inset?: boolean;\n}) => {\n return (\n <ContextMenuPrimitive.CheckboxItem\n data-slot=\"context-menu-checkbox-item\"\n data-inset={inset}\n className={cn(\n \"relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[inset=true]:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n checked={checked}\n {...props}\n >\n <span className=\"pointer-events-none absolute right-2\">\n <ContextMenuPrimitive.CheckboxItemIndicator>\n <IconCheck />\n </ContextMenuPrimitive.CheckboxItemIndicator>\n </span>\n {children}\n </ContextMenuPrimitive.CheckboxItem>\n );\n};\n\nexport const ContextMenuRadioGroup = ({ ...props }: ContextMenuPrimitive.RadioGroup.Props) => {\n return <ContextMenuPrimitive.RadioGroup data-slot=\"context-menu-radio-group\" {...props} />;\n};\n\nexport const ContextMenuRadioItem = ({\n className,\n children,\n inset,\n ...props\n}: ContextMenuPrimitive.RadioItem.Props & {\n inset?: boolean;\n}) => {\n return (\n <ContextMenuPrimitive.RadioItem\n data-slot=\"context-menu-radio-item\"\n data-inset={inset}\n className={cn(\n \"relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[inset=true]:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n >\n <span className=\"pointer-events-none absolute right-2\">\n <ContextMenuPrimitive.RadioItemIndicator>\n <IconCheck />\n </ContextMenuPrimitive.RadioItemIndicator>\n </span>\n {children}\n </ContextMenuPrimitive.RadioItem>\n );\n};\n\nexport const ContextMenuSeparator = ({ className, ...props }: ContextMenuPrimitive.Separator.Props) => {\n return <ContextMenuPrimitive.Separator data-slot=\"context-menu-separator\" className={cn('-mx-1 my-1 h-px bg-border', className)} {...props} />;\n};\n\nexport const ContextMenuShortcut = ({ className, ...props }: React.ComponentProps<'span'>) => {\n return (\n <span\n data-slot=\"context-menu-shortcut\"\n className={cn('ml-auto text-xs tracking-widest text-muted-foreground group-focus/context-menu-item:text-accent-foreground', className)}\n {...props}\n />\n );\n};\n"],"mappings":"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"}
@@ -0,0 +1,92 @@
1
+ import { cn } from "../../../lib/utils.js";
2
+ import { Button } from "../button/button.js";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ import { IconX } from "@tabler/icons-react";
5
+ import { Dialog } from "@base-ui/react/dialog";
6
+ //#region ../ui/src/components/ui/dialog/dialog.tsx
7
+ var Dialog$1 = ({ ...props }) => {
8
+ return /* @__PURE__ */ jsx(Dialog.Root, {
9
+ "data-slot": "dialog",
10
+ ...props
11
+ });
12
+ };
13
+ var DialogTrigger = ({ ...props }) => {
14
+ return /* @__PURE__ */ jsx(Dialog.Trigger, {
15
+ "data-slot": "dialog-trigger",
16
+ ...props
17
+ });
18
+ };
19
+ var DialogPortal = ({ ...props }) => {
20
+ return /* @__PURE__ */ jsx(Dialog.Portal, {
21
+ "data-slot": "dialog-portal",
22
+ ...props
23
+ });
24
+ };
25
+ var DialogClose = ({ ...props }) => {
26
+ return /* @__PURE__ */ jsx(Dialog.Close, {
27
+ "data-slot": "dialog-close",
28
+ ...props
29
+ });
30
+ };
31
+ var DialogOverlay = ({ className, ...props }) => {
32
+ return /* @__PURE__ */ jsx(Dialog.Backdrop, {
33
+ "data-slot": "dialog-overlay",
34
+ className: cn("fixed inset-0 isolate z-50 bg-overlay duration-100 motion-reduce:animate-none 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),
35
+ ...props
36
+ });
37
+ };
38
+ var DialogContent = ({ className, children, showCloseButton = true, ...props }) => {
39
+ return /* @__PURE__ */ jsxs(DialogPortal, { children: [/* @__PURE__ */ jsx(DialogOverlay, {}), /* @__PURE__ */ jsxs(Dialog.Popup, {
40
+ "data-slot": "dialog-content",
41
+ 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-4 rounded-xl bg-popover p-4 text-sm text-popover-foreground ring-1 ring-foreground/10 duration-100 motion-reduce:animate-none outline-none sm:max-w-sm 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),
42
+ ...props,
43
+ children: [children, showCloseButton && /* @__PURE__ */ jsxs(Dialog.Close, {
44
+ "data-slot": "dialog-close",
45
+ render: /* @__PURE__ */ jsx(Button, {
46
+ variant: "ghost",
47
+ className: "absolute top-2 right-2",
48
+ size: "icon-sm"
49
+ }),
50
+ children: [/* @__PURE__ */ jsx(IconX, {}), /* @__PURE__ */ jsx("span", {
51
+ className: "sr-only",
52
+ children: "Close"
53
+ })]
54
+ })]
55
+ })] });
56
+ };
57
+ var DialogHeader = ({ className, ...props }) => {
58
+ return /* @__PURE__ */ jsx("div", {
59
+ "data-slot": "dialog-header",
60
+ className: cn("flex flex-col gap-2", className),
61
+ ...props
62
+ });
63
+ };
64
+ var DialogFooter = ({ className, showCloseButton = false, children, ...props }) => {
65
+ return /* @__PURE__ */ jsxs("div", {
66
+ "data-slot": "dialog-footer",
67
+ className: cn("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end", className),
68
+ ...props,
69
+ children: [children, showCloseButton && /* @__PURE__ */ jsx(Dialog.Close, {
70
+ render: /* @__PURE__ */ jsx(Button, { variant: "outline" }),
71
+ children: "Close"
72
+ })]
73
+ });
74
+ };
75
+ var DialogTitle = ({ className, ...props }) => {
76
+ return /* @__PURE__ */ jsx(Dialog.Title, {
77
+ "data-slot": "dialog-title",
78
+ className: cn("text-base leading-none font-medium", className),
79
+ ...props
80
+ });
81
+ };
82
+ var DialogDescription = ({ className, ...props }) => {
83
+ return /* @__PURE__ */ jsx(Dialog.Description, {
84
+ "data-slot": "dialog-description",
85
+ className: cn("text-sm text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground", className),
86
+ ...props
87
+ });
88
+ };
89
+ //#endregion
90
+ export { Dialog$1 as Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger };
91
+
92
+ //# sourceMappingURL=dialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dialog.js","names":[],"sources":["../../../../../../../ui/src/components/ui/dialog/dialog.tsx"],"sourcesContent":["import { Dialog as DialogPrimitive } from '@base-ui/react/dialog';\nimport { cn } from '@edyn/ui/lib/utils';\nimport { IconX } from '@tabler/icons-react';\nimport type * as React from 'react';\nimport { Button } from '../button';\n\nexport const Dialog = ({ ...props }: DialogPrimitive.Root.Props) => {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />;\n};\n\nexport const DialogTrigger = ({ ...props }: DialogPrimitive.Trigger.Props) => {\n return <DialogPrimitive.Trigger data-slot=\"dialog-trigger\" {...props} />;\n};\n\nexport const DialogPortal = ({ ...props }: DialogPrimitive.Portal.Props) => {\n return <DialogPrimitive.Portal data-slot=\"dialog-portal\" {...props} />;\n};\n\nexport const DialogClose = ({ ...props }: DialogPrimitive.Close.Props) => {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />;\n};\n\nexport const DialogOverlay = ({ className, ...props }: DialogPrimitive.Backdrop.Props) => {\n return (\n <DialogPrimitive.Backdrop\n data-slot=\"dialog-overlay\"\n className={cn(\n 'fixed inset-0 isolate z-50 bg-overlay duration-100 motion-reduce:animate-none supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0',\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const DialogContent = ({\n className,\n children,\n showCloseButton = true,\n ...props\n}: DialogPrimitive.Popup.Props & {\n showCloseButton?: boolean;\n}) => {\n return (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Popup\n data-slot=\"dialog-content\"\n className={cn(\n '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-4 rounded-xl bg-popover p-4 text-sm text-popover-foreground ring-1 ring-foreground/10 duration-100 motion-reduce:animate-none outline-none sm:max-w-sm 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',\n className,\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close data-slot=\"dialog-close\" render={<Button variant=\"ghost\" className=\"absolute top-2 right-2\" size=\"icon-sm\" />}>\n <IconX />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Popup>\n </DialogPortal>\n );\n};\n\nexport const DialogHeader = ({ className, ...props }: React.ComponentProps<'div'>) => {\n return <div data-slot=\"dialog-header\" className={cn('flex flex-col gap-2', className)} {...props} />;\n};\n\nexport const DialogFooter = ({\n className,\n showCloseButton = false,\n children,\n ...props\n}: React.ComponentProps<'div'> & {\n showCloseButton?: boolean;\n}) => {\n return (\n <div data-slot=\"dialog-footer\" className={cn('flex flex-col-reverse gap-2 sm:flex-row sm:justify-end', className)} {...props}>\n {children}\n {showCloseButton && <DialogPrimitive.Close render={<Button variant=\"outline\" />}>Close</DialogPrimitive.Close>}\n </div>\n );\n};\n\nexport const DialogTitle = ({ className, ...props }: DialogPrimitive.Title.Props) => {\n return <DialogPrimitive.Title data-slot=\"dialog-title\" className={cn('text-base leading-none font-medium', className)} {...props} />;\n};\n\nexport const DialogDescription = ({ className, ...props }: DialogPrimitive.Description.Props) => {\n return (\n <DialogPrimitive.Description\n data-slot=\"dialog-description\"\n className={cn('text-sm text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground', className)}\n {...props}\n />\n );\n};\n"],"mappings":";;;;;;AAMA,IAAa,YAAU,EAAE,GAAG,YAAwC;CAClE,OAAO,oBAAC,OAAgB,MAAjB;EAAsB,aAAU;EAAS,GAAI;CAAQ,CAAA;AAC9D;AAEA,IAAa,iBAAiB,EAAE,GAAG,YAA2C;CAC5E,OAAO,oBAAC,OAAgB,SAAjB;EAAyB,aAAU;EAAiB,GAAI;CAAQ,CAAA;AACzE;AAEA,IAAa,gBAAgB,EAAE,GAAG,YAA0C;CAC1E,OAAO,oBAAC,OAAgB,QAAjB;EAAwB,aAAU;EAAgB,GAAI;CAAQ,CAAA;AACvE;AAEA,IAAa,eAAe,EAAE,GAAG,YAAyC;CACxE,OAAO,oBAAC,OAAgB,OAAjB;EAAuB,aAAU;EAAe,GAAI;CAAQ,CAAA;AACrE;AAEA,IAAa,iBAAiB,EAAE,WAAW,GAAG,YAA4C;CACxF,OACE,oBAAC,OAAgB,UAAjB;EACE,aAAU;EACV,WAAW,GACT,mNACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,IAAa,iBAAiB,EAC5B,WACA,UACA,kBAAkB,MAClB,GAAG,YAGC;CACJ,OACE,qBAAC,cAAD,EAAA,UAAA,CACE,oBAAC,eAAD,CAAgB,CAAA,GAChB,qBAAC,OAAgB,OAAjB;EACE,aAAU;EACV,WAAW,GACT,qYACA,SACF;EACA,GAAI;EANN,UAAA,CAQG,UACA,mBACC,qBAAC,OAAgB,OAAjB;GAAuB,aAAU;GAAe,QAAQ,oBAAC,QAAD;IAAQ,SAAQ;IAAQ,WAAU;IAAyB,MAAK;GAAW,CAAA;GAAnI,UAAA,CACE,oBAAC,OAAD,CAAQ,CAAA,GACR,oBAAC,QAAD;IAAM,WAAU;IAAU,UAAA;GAAW,CAAA,CAChB;EAEJ,CAAA,CAAA;CACX,CAAA,CAAA,EAAA,CAAA;AAElB;AAEA,IAAa,gBAAgB,EAAE,WAAW,GAAG,YAAyC;CACpF,OAAO,oBAAC,OAAD;EAAK,aAAU;EAAgB,WAAW,GAAG,uBAAuB,SAAS;EAAG,GAAI;CAAQ,CAAA;AACrG;AAEA,IAAa,gBAAgB,EAC3B,WACA,kBAAkB,OAClB,UACA,GAAG,YAGC;CACJ,OACE,qBAAC,OAAD;EAAK,aAAU;EAAgB,WAAW,GAAG,0DAA0D,SAAS;EAAG,GAAI;EAAvH,UAAA,CACG,UACA,mBAAmB,oBAAC,OAAgB,OAAjB;GAAuB,QAAQ,oBAAC,QAAD,EAAQ,SAAQ,UAAW,CAAA;GAAG,UAAA;EAA4B,CAAA,CAC1G;;AAET;AAEA,IAAa,eAAe,EAAE,WAAW,GAAG,YAAyC;CACnF,OAAO,oBAAC,OAAgB,OAAjB;EAAuB,aAAU;EAAe,WAAW,GAAG,sCAAsC,SAAS;EAAG,GAAI;CAAQ,CAAA;AACrI;AAEA,IAAa,qBAAqB,EAAE,WAAW,GAAG,YAA+C;CAC/F,OACE,oBAAC,OAAgB,aAAjB;EACE,aAAU;EACV,WAAW,GAAG,sGAAsG,SAAS;EAC7H,GAAI;CACL,CAAA;AAEL"}
@@ -0,0 +1,2 @@
1
+ import { DirectionProvider, useDirection } from "@base-ui/react/direction-provider";
2
+ export { DirectionProvider, useDirection };
@@ -0,0 +1,86 @@
1
+ import { cn } from "../../../lib/utils.js";
2
+ import { Button } from "../button/button.js";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ import { IconX } from "@tabler/icons-react";
5
+ import { Dialog } from "@base-ui/react/dialog";
6
+ //#region ../ui/src/components/ui/drawer/drawer.tsx
7
+ var Drawer = ({ ...props }) => {
8
+ return /* @__PURE__ */ jsx(Dialog.Root, {
9
+ "data-slot": "drawer",
10
+ ...props
11
+ });
12
+ };
13
+ var DrawerTrigger = ({ ...props }) => {
14
+ return /* @__PURE__ */ jsx(Dialog.Trigger, {
15
+ "data-slot": "drawer-trigger",
16
+ ...props
17
+ });
18
+ };
19
+ var DrawerClose = ({ ...props }) => {
20
+ return /* @__PURE__ */ jsx(Dialog.Close, {
21
+ "data-slot": "drawer-close",
22
+ ...props
23
+ });
24
+ };
25
+ var DrawerOverlay = ({ className, ...props }) => {
26
+ return /* @__PURE__ */ jsx(Dialog.Backdrop, {
27
+ "data-slot": "drawer-overlay",
28
+ className: cn("fixed inset-0 isolate z-50 bg-overlay duration-100 motion-reduce:animate-none 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),
29
+ ...props
30
+ });
31
+ };
32
+ var DrawerContent = ({ className, children, side = "right", showCloseButton = true, ...props }) => {
33
+ return /* @__PURE__ */ jsxs(Dialog.Portal, {
34
+ "data-slot": "drawer-portal",
35
+ children: [/* @__PURE__ */ jsx(DrawerOverlay, {}), /* @__PURE__ */ jsxs(Dialog.Popup, {
36
+ "data-slot": "drawer-content",
37
+ "data-side": side,
38
+ className: cn("fixed z-50 flex flex-col gap-4 border-border bg-popover p-4 text-sm text-popover-foreground shadow-lg outline-none duration-100 motion-reduce:animate-none data-open:animate-in data-closed:animate-out", side === "right" && "inset-y-0 right-0 h-full w-3/4 max-w-sm border-l data-open:slide-in-from-right data-closed:slide-out-to-right", side === "left" && "inset-y-0 left-0 h-full w-3/4 max-w-sm border-r data-open:slide-in-from-left data-closed:slide-out-to-left", side === "top" && "inset-x-0 top-0 h-auto border-b data-open:slide-in-from-top data-closed:slide-out-to-top", side === "bottom" && "inset-x-0 bottom-0 h-auto border-t data-open:slide-in-from-bottom data-closed:slide-out-to-bottom", className),
39
+ ...props,
40
+ children: [children, showCloseButton && /* @__PURE__ */ jsxs(Dialog.Close, {
41
+ "data-slot": "drawer-close",
42
+ render: /* @__PURE__ */ jsx(Button, {
43
+ variant: "ghost",
44
+ className: "absolute top-2 right-2",
45
+ size: "icon-sm"
46
+ }),
47
+ children: [/* @__PURE__ */ jsx(IconX, {}), /* @__PURE__ */ jsx("span", {
48
+ className: "sr-only",
49
+ children: "Close"
50
+ })]
51
+ })]
52
+ })]
53
+ });
54
+ };
55
+ var DrawerHeader = ({ className, ...props }) => {
56
+ return /* @__PURE__ */ jsx("div", {
57
+ "data-slot": "drawer-header",
58
+ className: cn("flex flex-col gap-2", className),
59
+ ...props
60
+ });
61
+ };
62
+ var DrawerFooter = ({ className, ...props }) => {
63
+ return /* @__PURE__ */ jsx("div", {
64
+ "data-slot": "drawer-footer",
65
+ className: cn("mt-auto flex flex-col gap-2", className),
66
+ ...props
67
+ });
68
+ };
69
+ var DrawerTitle = ({ className, ...props }) => {
70
+ return /* @__PURE__ */ jsx(Dialog.Title, {
71
+ "data-slot": "drawer-title",
72
+ className: cn("text-base leading-none font-medium", className),
73
+ ...props
74
+ });
75
+ };
76
+ var DrawerDescription = ({ className, ...props }) => {
77
+ return /* @__PURE__ */ jsx(Dialog.Description, {
78
+ "data-slot": "drawer-description",
79
+ className: cn("text-sm text-muted-foreground", className),
80
+ ...props
81
+ });
82
+ };
83
+ //#endregion
84
+ export { Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerTitle, DrawerTrigger };
85
+
86
+ //# sourceMappingURL=drawer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drawer.js","names":[],"sources":["../../../../../../../ui/src/components/ui/drawer/drawer.tsx"],"sourcesContent":["import { Dialog as DialogPrimitive } from '@base-ui/react/dialog';\nimport { cn } from '@edyn/ui/lib/utils';\nimport { IconX } from '@tabler/icons-react';\nimport type * as React from 'react';\nimport { Button } from '../button';\n\n// A Drawer is a side-anchored overlay (a \"sheet\"): the same Base UI Dialog\n// primitive as Dialog, positioned against an edge with a slide animation. It is\n// click-triggered (no swipe). The swipe-gesture Drawer (Base UI's dedicated\n// drawer primitive) is a deferred enhancement.\n\nexport const Drawer = ({ ...props }: DialogPrimitive.Root.Props) => {\n return <DialogPrimitive.Root data-slot=\"drawer\" {...props} />;\n};\n\nexport const DrawerTrigger = ({ ...props }: DialogPrimitive.Trigger.Props) => {\n return <DialogPrimitive.Trigger data-slot=\"drawer-trigger\" {...props} />;\n};\n\nexport const DrawerClose = ({ ...props }: DialogPrimitive.Close.Props) => {\n return <DialogPrimitive.Close data-slot=\"drawer-close\" {...props} />;\n};\n\nconst DrawerOverlay = ({ className, ...props }: DialogPrimitive.Backdrop.Props) => {\n return (\n <DialogPrimitive.Backdrop\n data-slot=\"drawer-overlay\"\n className={cn(\n 'fixed inset-0 isolate z-50 bg-overlay duration-100 motion-reduce:animate-none supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0',\n className,\n )}\n {...props}\n />\n );\n};\n\ntype TDrawerSide = 'left' | 'right' | 'top' | 'bottom';\n\nexport const DrawerContent = ({\n className,\n children,\n side = 'right',\n showCloseButton = true,\n ...props\n}: DialogPrimitive.Popup.Props & {\n side?: TDrawerSide;\n showCloseButton?: boolean;\n}) => {\n return (\n <DialogPrimitive.Portal data-slot=\"drawer-portal\">\n <DrawerOverlay />\n <DialogPrimitive.Popup\n data-slot=\"drawer-content\"\n data-side={side}\n className={cn(\n // duration-100 matches the overlay's duration so both exit animations finish\n // together; a longer content animation leaves the overlay mounted after its\n // fade-out ends, reverting it to full opacity (a visible flash on close).\n // border-border is explicit because the portal renders outside .edx-root,\n // where the scoped reset's default border color does not reach.\n 'fixed z-50 flex flex-col gap-4 border-border bg-popover p-4 text-sm text-popover-foreground shadow-lg outline-none duration-100 motion-reduce:animate-none data-open:animate-in data-closed:animate-out',\n side === 'right' && 'inset-y-0 right-0 h-full w-3/4 max-w-sm border-l data-open:slide-in-from-right data-closed:slide-out-to-right',\n side === 'left' && 'inset-y-0 left-0 h-full w-3/4 max-w-sm border-r data-open:slide-in-from-left data-closed:slide-out-to-left',\n side === 'top' && 'inset-x-0 top-0 h-auto border-b data-open:slide-in-from-top data-closed:slide-out-to-top',\n side === 'bottom' && 'inset-x-0 bottom-0 h-auto border-t data-open:slide-in-from-bottom data-closed:slide-out-to-bottom',\n className,\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <DialogPrimitive.Close data-slot=\"drawer-close\" render={<Button variant=\"ghost\" className=\"absolute top-2 right-2\" size=\"icon-sm\" />}>\n <IconX />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Popup>\n </DialogPrimitive.Portal>\n );\n};\n\nexport const DrawerHeader = ({ className, ...props }: React.ComponentProps<'div'>) => {\n return <div data-slot=\"drawer-header\" className={cn('flex flex-col gap-2', className)} {...props} />;\n};\n\nexport const DrawerFooter = ({ className, ...props }: React.ComponentProps<'div'>) => {\n return <div data-slot=\"drawer-footer\" className={cn('mt-auto flex flex-col gap-2', className)} {...props} />;\n};\n\nexport const DrawerTitle = ({ className, ...props }: DialogPrimitive.Title.Props) => {\n return <DialogPrimitive.Title data-slot=\"drawer-title\" className={cn('text-base leading-none font-medium', className)} {...props} />;\n};\n\nexport const DrawerDescription = ({ className, ...props }: DialogPrimitive.Description.Props) => {\n return <DialogPrimitive.Description data-slot=\"drawer-description\" className={cn('text-sm text-muted-foreground', className)} {...props} />;\n};\n"],"mappings":";;;;;;AAWA,IAAa,UAAU,EAAE,GAAG,YAAwC;CAClE,OAAO,oBAAC,OAAgB,MAAjB;EAAsB,aAAU;EAAS,GAAI;CAAQ,CAAA;AAC9D;AAEA,IAAa,iBAAiB,EAAE,GAAG,YAA2C;CAC5E,OAAO,oBAAC,OAAgB,SAAjB;EAAyB,aAAU;EAAiB,GAAI;CAAQ,CAAA;AACzE;AAEA,IAAa,eAAe,EAAE,GAAG,YAAyC;CACxE,OAAO,oBAAC,OAAgB,OAAjB;EAAuB,aAAU;EAAe,GAAI;CAAQ,CAAA;AACrE;AAEA,IAAM,iBAAiB,EAAE,WAAW,GAAG,YAA4C;CACjF,OACE,oBAAC,OAAgB,UAAjB;EACE,aAAU;EACV,WAAW,GACT,mNACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAIA,IAAa,iBAAiB,EAC5B,WACA,UACA,OAAO,SACP,kBAAkB,MAClB,GAAG,YAIC;CACJ,OACE,qBAAC,OAAgB,QAAjB;EAAwB,aAAU;EAAlC,UAAA,CACE,oBAAC,eAAD,CAAgB,CAAA,GAChB,qBAAC,OAAgB,OAAjB;GACE,aAAU;GACV,aAAW;GACX,WAAW,GAMT,2MACA,SAAS,WAAW,iHACpB,SAAS,UAAU,8GACnB,SAAS,SAAS,4FAClB,SAAS,YAAY,qGACrB,SACF;GACA,GAAI;GAhBN,UAAA,CAkBG,UACA,mBACC,qBAAC,OAAgB,OAAjB;IAAuB,aAAU;IAAe,QAAQ,oBAAC,QAAD;KAAQ,SAAQ;KAAQ,WAAU;KAAyB,MAAK;IAAW,CAAA;IAAnI,UAAA,CACE,oBAAC,OAAD,CAAQ,CAAA,GACR,oBAAC,QAAD;KAAM,WAAU;KAAU,UAAA;IAAW,CAAA,CAChB;GAEJ,CAAA,CAAA;EACD,CAAA,CAAA;;AAE5B;AAEA,IAAa,gBAAgB,EAAE,WAAW,GAAG,YAAyC;CACpF,OAAO,oBAAC,OAAD;EAAK,aAAU;EAAgB,WAAW,GAAG,uBAAuB,SAAS;EAAG,GAAI;CAAQ,CAAA;AACrG;AAEA,IAAa,gBAAgB,EAAE,WAAW,GAAG,YAAyC;CACpF,OAAO,oBAAC,OAAD;EAAK,aAAU;EAAgB,WAAW,GAAG,+BAA+B,SAAS;EAAG,GAAI;CAAQ,CAAA;AAC7G;AAEA,IAAa,eAAe,EAAE,WAAW,GAAG,YAAyC;CACnF,OAAO,oBAAC,OAAgB,OAAjB;EAAuB,aAAU;EAAe,WAAW,GAAG,sCAAsC,SAAS;EAAG,GAAI;CAAQ,CAAA;AACrI;AAEA,IAAa,qBAAqB,EAAE,WAAW,GAAG,YAA+C;CAC/F,OAAO,oBAAC,OAAgB,aAAjB;EAA6B,aAAU;EAAqB,WAAW,GAAG,iCAAiC,SAAS;EAAG,GAAI;CAAQ,CAAA;AAC5I"}
@@ -0,0 +1,160 @@
1
+ import { cn } from "../../../lib/utils.js";
2
+ import { ScrollArea } from "../scroll-area/scroll-area.js";
3
+ import { POPUP_GROUP_LABEL_CLASS, POPUP_ITEM_INDICATOR_CLASS, popupItemClass } from "../../../lib/popup-list.js";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ import { IconCheck, IconChevronRight } from "@tabler/icons-react";
6
+ import { Menu } from "@base-ui/react/menu";
7
+ //#region ../ui/src/components/ui/dropdown-menu/dropdown-menu.tsx
8
+ var DropdownMenu = ({ ...props }) => {
9
+ return /* @__PURE__ */ jsx(Menu.Root, {
10
+ "data-slot": "dropdown-menu",
11
+ ...props
12
+ });
13
+ };
14
+ var DropdownMenuPortal = ({ ...props }) => {
15
+ return /* @__PURE__ */ jsx(Menu.Portal, {
16
+ "data-slot": "dropdown-menu-portal",
17
+ ...props
18
+ });
19
+ };
20
+ var DropdownMenuTrigger = ({ ...props }) => {
21
+ return /* @__PURE__ */ jsx(Menu.Trigger, {
22
+ "data-slot": "dropdown-menu-trigger",
23
+ ...props
24
+ });
25
+ };
26
+ /**
27
+ * Scrolls inside a DS ScrollArea like the other popup lists, with the bar shown
28
+ * for as long as the menu overflows and a fade on whichever end is cut off.
29
+ *
30
+ * Base UI puts `role="menu"` on this popup itself and offers no inner list part
31
+ * to move it onto, so the ScrollArea sits INSIDE the role. That is only legal
32
+ * because ScrollArea drops the `role="presentation"` Base UI gives its root,
33
+ * viewport and content: a menu may not own presentation wrappers (axe reports
34
+ * a critical aria-required-children violation), but it may own plain divs.
35
+ * e2e/a11y.spec.ts scans the open menu in both themes to keep it that way.
36
+ */
37
+ var DropdownMenuContent = ({ align = "start", alignOffset = 0, side = "bottom", sideOffset = 4, className, children, ...props }) => {
38
+ return /* @__PURE__ */ jsx(Menu.Portal, { children: /* @__PURE__ */ jsx(Menu.Positioner, {
39
+ className: "isolate z-50 outline-none",
40
+ align,
41
+ alignOffset,
42
+ side,
43
+ sideOffset,
44
+ children: /* @__PURE__ */ jsx(Menu.Popup, {
45
+ "data-slot": "dropdown-menu-content",
46
+ className: cn("z-50 max-h-(--available-height) w-(--anchor-width) min-w-32 origin-(--transform-origin) overflow-hidden rounded-lg bg-popover 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", "motion-reduce:animate-none", className),
47
+ ...props,
48
+ children: /* @__PURE__ */ jsx(ScrollArea, {
49
+ type: "always",
50
+ fade: true,
51
+ focusable: false,
52
+ className: "max-h-inherit",
53
+ children: /* @__PURE__ */ jsx("div", {
54
+ className: "p-1",
55
+ children
56
+ })
57
+ })
58
+ })
59
+ }) });
60
+ };
61
+ var DropdownMenuGroup = ({ ...props }) => {
62
+ return /* @__PURE__ */ jsx(Menu.Group, {
63
+ "data-slot": "dropdown-menu-group",
64
+ ...props
65
+ });
66
+ };
67
+ var DropdownMenuLabel = ({ className, inset, ...props }) => {
68
+ return /* @__PURE__ */ jsx(Menu.GroupLabel, {
69
+ "data-slot": "dropdown-menu-label",
70
+ "data-inset": inset,
71
+ className: cn(POPUP_GROUP_LABEL_CLASS, "data-[inset=true]:pl-7", className),
72
+ ...props
73
+ });
74
+ };
75
+ var DropdownMenuItem = ({ className, inset, variant = "default", ...props }) => {
76
+ return /* @__PURE__ */ jsx(Menu.Item, {
77
+ "data-slot": "dropdown-menu-item",
78
+ "data-inset": inset,
79
+ "data-variant": variant,
80
+ className: cn("group/dropdown-menu-item", popupItemClass(), "data-[inset=true]:pl-7", "data-[variant=destructive]:text-destructive data-[variant=destructive]:[&>svg]:text-destructive", "data-[variant=destructive]:data-highlighted:bg-destructive/10 data-[variant=destructive]:data-highlighted:text-destructive", className),
81
+ ...props
82
+ });
83
+ };
84
+ var DropdownMenuSub = ({ ...props }) => {
85
+ return /* @__PURE__ */ jsx(Menu.SubmenuRoot, {
86
+ "data-slot": "dropdown-menu-sub",
87
+ ...props
88
+ });
89
+ };
90
+ var DropdownMenuSubTrigger = ({ className, inset, children, ...props }) => {
91
+ return /* @__PURE__ */ jsxs(Menu.SubmenuTrigger, {
92
+ "data-slot": "dropdown-menu-sub-trigger",
93
+ "data-inset": inset,
94
+ className: cn(popupItemClass(), "data-[inset=true]:pl-7 data-popup-open:bg-foreground/6 data-popup-open:[&>svg]:text-foreground", className),
95
+ ...props,
96
+ children: [children, /* @__PURE__ */ jsx(IconChevronRight, { className: "ml-auto" })]
97
+ });
98
+ };
99
+ var DropdownMenuSubContent = ({ align = "start", alignOffset = -3, side = "right", sideOffset = 0, className, ...props }) => {
100
+ return /* @__PURE__ */ jsx(DropdownMenuContent, {
101
+ "data-slot": "dropdown-menu-sub-content",
102
+ className: cn("w-auto min-w-[96px] rounded-lg 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", "motion-reduce:animate-none", className),
103
+ align,
104
+ alignOffset,
105
+ side,
106
+ sideOffset,
107
+ ...props
108
+ });
109
+ };
110
+ var DropdownMenuCheckboxItem = ({ className, children, checked, inset, ...props }) => {
111
+ return /* @__PURE__ */ jsxs(Menu.CheckboxItem, {
112
+ "data-slot": "dropdown-menu-checkbox-item",
113
+ "data-inset": inset,
114
+ className: cn(popupItemClass("base-ui", true), "data-checked:font-medium data-[inset=true]:pl-7", className),
115
+ checked,
116
+ ...props,
117
+ children: [/* @__PURE__ */ jsx("span", {
118
+ className: POPUP_ITEM_INDICATOR_CLASS,
119
+ "data-slot": "dropdown-menu-checkbox-item-indicator",
120
+ children: /* @__PURE__ */ jsx(Menu.CheckboxItemIndicator, { children: /* @__PURE__ */ jsx(IconCheck, {}) })
121
+ }), children]
122
+ });
123
+ };
124
+ var DropdownMenuRadioGroup = ({ ...props }) => {
125
+ return /* @__PURE__ */ jsx(Menu.RadioGroup, {
126
+ "data-slot": "dropdown-menu-radio-group",
127
+ ...props
128
+ });
129
+ };
130
+ var DropdownMenuRadioItem = ({ className, children, inset, ...props }) => {
131
+ return /* @__PURE__ */ jsxs(Menu.RadioItem, {
132
+ "data-slot": "dropdown-menu-radio-item",
133
+ "data-inset": inset,
134
+ className: cn(popupItemClass("base-ui", true), "data-checked:font-medium data-[inset=true]:pl-7", className),
135
+ ...props,
136
+ children: [/* @__PURE__ */ jsx("span", {
137
+ className: POPUP_ITEM_INDICATOR_CLASS,
138
+ "data-slot": "dropdown-menu-radio-item-indicator",
139
+ children: /* @__PURE__ */ jsx(Menu.RadioItemIndicator, { children: /* @__PURE__ */ jsx(IconCheck, {}) })
140
+ }), children]
141
+ });
142
+ };
143
+ var DropdownMenuSeparator = ({ className, ...props }) => {
144
+ return /* @__PURE__ */ jsx(Menu.Separator, {
145
+ "data-slot": "dropdown-menu-separator",
146
+ className: cn("-mx-1 my-1 h-px bg-border", className),
147
+ ...props
148
+ });
149
+ };
150
+ var DropdownMenuShortcut = ({ className, ...props }) => {
151
+ return /* @__PURE__ */ jsx("span", {
152
+ "data-slot": "dropdown-menu-shortcut",
153
+ className: cn("ml-auto text-xs tracking-widest text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground", className),
154
+ ...props
155
+ });
156
+ };
157
+ //#endregion
158
+ export { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger };
159
+
160
+ //# sourceMappingURL=dropdown-menu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dropdown-menu.js","names":[],"sources":["../../../../../../../ui/src/components/ui/dropdown-menu/dropdown-menu.tsx"],"sourcesContent":["import { Menu as MenuPrimitive } from '@base-ui/react/menu';\nimport { POPUP_GROUP_LABEL_CLASS, POPUP_ITEM_INDICATOR_CLASS, popupItemClass } from '@edyn/ui/lib/popup-list';\nimport { cn } from '@edyn/ui/lib/utils';\nimport { IconCheck, IconChevronRight } from '@tabler/icons-react';\nimport type * as React from 'react';\nimport { ScrollArea } from '../scroll-area';\n\nexport const DropdownMenu = ({ ...props }: MenuPrimitive.Root.Props) => {\n return <MenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />;\n};\n\nexport const DropdownMenuPortal = ({ ...props }: MenuPrimitive.Portal.Props) => {\n return <MenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />;\n};\n\nexport const DropdownMenuTrigger = ({ ...props }: MenuPrimitive.Trigger.Props) => {\n return <MenuPrimitive.Trigger data-slot=\"dropdown-menu-trigger\" {...props} />;\n};\n\n/**\n * Scrolls inside a DS ScrollArea like the other popup lists, with the bar shown\n * for as long as the menu overflows and a fade on whichever end is cut off.\n *\n * Base UI puts `role=\"menu\"` on this popup itself and offers no inner list part\n * to move it onto, so the ScrollArea sits INSIDE the role. That is only legal\n * because ScrollArea drops the `role=\"presentation\"` Base UI gives its root,\n * viewport and content: a menu may not own presentation wrappers (axe reports\n * a critical aria-required-children violation), but it may own plain divs.\n * e2e/a11y.spec.ts scans the open menu in both themes to keep it that way.\n */\nexport const DropdownMenuContent = ({\n align = 'start',\n alignOffset = 0,\n side = 'bottom',\n sideOffset = 4,\n className,\n children,\n ...props\n}: MenuPrimitive.Popup.Props & Pick<MenuPrimitive.Positioner.Props, 'align' | 'alignOffset' | 'side' | 'sideOffset'>) => {\n return (\n <MenuPrimitive.Portal>\n <MenuPrimitive.Positioner className=\"isolate z-50 outline-none\" align={align} alignOffset={alignOffset} side={side} sideOffset={sideOffset}>\n <MenuPrimitive.Popup\n data-slot=\"dropdown-menu-content\"\n className={cn(\n 'z-50 max-h-(--available-height) w-(--anchor-width) min-w-32 origin-(--transform-origin) overflow-hidden rounded-lg bg-popover 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',\n 'motion-reduce:animate-none',\n className,\n )}\n {...props}\n >\n {/* max-h-inherit hands the positioner's measured height to the element that\n scrolls; the padding sits on the content so the cap is the popup's exactly. */}\n <ScrollArea type=\"always\" fade focusable={false} className=\"max-h-inherit\">\n <div className=\"p-1\">{children}</div>\n </ScrollArea>\n </MenuPrimitive.Popup>\n </MenuPrimitive.Positioner>\n </MenuPrimitive.Portal>\n );\n};\n\nexport const DropdownMenuGroup = ({ ...props }: MenuPrimitive.Group.Props) => {\n return <MenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />;\n};\n\nexport const DropdownMenuLabel = ({\n className,\n inset,\n ...props\n}: MenuPrimitive.GroupLabel.Props & {\n inset?: boolean;\n}) => {\n return (\n <MenuPrimitive.GroupLabel\n data-slot=\"dropdown-menu-label\"\n data-inset={inset}\n className={cn(POPUP_GROUP_LABEL_CLASS, 'data-[inset=true]:pl-7', className)}\n {...props}\n />\n );\n};\n\nexport const DropdownMenuItem = ({\n className,\n inset,\n variant = 'default',\n ...props\n}: MenuPrimitive.Item.Props & {\n inset?: boolean;\n variant?: 'default' | 'destructive';\n}) => {\n return (\n <MenuPrimitive.Item\n data-slot=\"dropdown-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n 'group/dropdown-menu-item',\n popupItemClass(),\n 'data-[inset=true]:pl-7',\n // A destructive item keeps its own colour, and its own highlight with it:\n // the shared translucent one would make it read like any other item.\n 'data-[variant=destructive]:text-destructive data-[variant=destructive]:[&>svg]:text-destructive',\n 'data-[variant=destructive]:data-highlighted:bg-destructive/10 data-[variant=destructive]:data-highlighted:text-destructive',\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const DropdownMenuSub = ({ ...props }: MenuPrimitive.SubmenuRoot.Props) => {\n return <MenuPrimitive.SubmenuRoot data-slot=\"dropdown-menu-sub\" {...props} />;\n};\n\nexport const DropdownMenuSubTrigger = ({\n className,\n inset,\n children,\n ...props\n}: MenuPrimitive.SubmenuTrigger.Props & {\n inset?: boolean;\n}) => {\n return (\n <MenuPrimitive.SubmenuTrigger\n data-slot=\"dropdown-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n popupItemClass(),\n // An open submenu holds its trigger in the highlight while the pointer is\n // down in its panel.\n 'data-[inset=true]:pl-7 data-popup-open:bg-foreground/6 data-popup-open:[&>svg]:text-foreground',\n className,\n )}\n {...props}\n >\n {children}\n <IconChevronRight className=\"ml-auto\" />\n </MenuPrimitive.SubmenuTrigger>\n );\n};\n\nexport const DropdownMenuSubContent = ({\n align = 'start',\n alignOffset = -3,\n side = 'right',\n sideOffset = 0,\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuContent>) => {\n return (\n <DropdownMenuContent\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(\n 'w-auto min-w-[96px] rounded-lg 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',\n 'motion-reduce:animate-none',\n className,\n )}\n align={align}\n alignOffset={alignOffset}\n side={side}\n sideOffset={sideOffset}\n {...props}\n />\n );\n};\n\nexport const DropdownMenuCheckboxItem = ({\n className,\n children,\n checked,\n inset,\n ...props\n}: MenuPrimitive.CheckboxItem.Props & {\n inset?: boolean;\n}) => {\n return (\n <MenuPrimitive.CheckboxItem\n data-slot=\"dropdown-menu-checkbox-item\"\n data-inset={inset}\n className={cn(popupItemClass('base-ui', true), 'data-checked:font-medium data-[inset=true]:pl-7', className)}\n checked={checked}\n {...props}\n >\n <span className={POPUP_ITEM_INDICATOR_CLASS} data-slot=\"dropdown-menu-checkbox-item-indicator\">\n <MenuPrimitive.CheckboxItemIndicator>\n <IconCheck />\n </MenuPrimitive.CheckboxItemIndicator>\n </span>\n {children}\n </MenuPrimitive.CheckboxItem>\n );\n};\n\nexport const DropdownMenuRadioGroup = ({ ...props }: MenuPrimitive.RadioGroup.Props) => {\n return <MenuPrimitive.RadioGroup data-slot=\"dropdown-menu-radio-group\" {...props} />;\n};\n\nexport const DropdownMenuRadioItem = ({\n className,\n children,\n inset,\n ...props\n}: MenuPrimitive.RadioItem.Props & {\n inset?: boolean;\n}) => {\n return (\n <MenuPrimitive.RadioItem\n data-slot=\"dropdown-menu-radio-item\"\n data-inset={inset}\n className={cn(popupItemClass('base-ui', true), 'data-checked:font-medium data-[inset=true]:pl-7', className)}\n {...props}\n >\n <span className={POPUP_ITEM_INDICATOR_CLASS} data-slot=\"dropdown-menu-radio-item-indicator\">\n <MenuPrimitive.RadioItemIndicator>\n <IconCheck />\n </MenuPrimitive.RadioItemIndicator>\n </span>\n {children}\n </MenuPrimitive.RadioItem>\n );\n};\n\nexport const DropdownMenuSeparator = ({ className, ...props }: MenuPrimitive.Separator.Props) => {\n return <MenuPrimitive.Separator data-slot=\"dropdown-menu-separator\" className={cn('-mx-1 my-1 h-px bg-border', className)} {...props} />;\n};\n\nexport const DropdownMenuShortcut = ({ className, ...props }: React.ComponentProps<'span'>) => {\n return (\n <span\n data-slot=\"dropdown-menu-shortcut\"\n className={cn('ml-auto text-xs tracking-widest text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground', className)}\n {...props}\n />\n );\n};\n"],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ import { cn } from "../../../lib/utils.js";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import { cva } from "class-variance-authority";
4
+ //#region ../ui/src/components/ui/empty/empty.tsx
5
+ var 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
+ var 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
+ var 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
+ var 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
+ var 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
+ var 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
+ var 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 };
60
+
61
+ //# sourceMappingURL=empty.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"empty.js","names":[],"sources":["../../../../../../../ui/src/components/ui/empty/empty.tsx"],"sourcesContent":["import { cn } from '@edyn/ui/lib/utils';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nexport const Empty = ({ className, ...props }: React.ComponentProps<'div'>) => {\n return (\n <div\n data-slot=\"empty\"\n className={cn(\n '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',\n className,\n )}\n {...props}\n />\n );\n};\n\nexport const EmptyHeader = ({ className, ...props }: React.ComponentProps<'div'>) => {\n return <div data-slot=\"empty-header\" className={cn('flex max-w-sm flex-col items-center gap-2', className)} {...props} />;\n};\n\nconst emptyMediaVariants = cva('mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0', {\n variants: {\n variant: {\n default: 'bg-transparent',\n icon: \"flex size-8 shrink-0 items-center justify-center rounded-lg bg-muted text-foreground [&_svg:not([class*='size-'])]:size-4\",\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n});\n\nexport const EmptyMedia = ({ className, variant = 'default', ...props }: React.ComponentProps<'div'> & VariantProps<typeof emptyMediaVariants>) => {\n return <div data-slot=\"empty-icon\" data-variant={variant} className={cn(emptyMediaVariants({ variant, className }))} {...props} />;\n};\n\nexport const EmptyTitle = ({ className, ...props }: React.ComponentProps<'div'>) => {\n return <div data-slot=\"empty-title\" className={cn('font-heading text-sm font-medium tracking-tight', className)} {...props} />;\n};\n\nexport const EmptyDescription = ({ className, ...props }: React.ComponentProps<'p'>) => {\n return (\n <div\n data-slot=\"empty-description\"\n className={cn('text-sm/relaxed text-muted-foreground [&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary', className)}\n {...props}\n />\n );\n};\n\nexport const EmptyContent = ({ className, ...props }: React.ComponentProps<'div'>) => {\n return (\n <div\n data-slot=\"empty-content\"\n className={cn('flex w-full max-w-sm min-w-0 flex-col items-center gap-2.5 text-sm text-balance', className)}\n {...props}\n />\n );\n};\n"],"mappings":";;;;AAGA,IAAa,SAAS,EAAE,WAAW,GAAG,YAAyC;CAC7E,OACE,oBAAC,OAAD;EACE,aAAU;EACV,WAAW,GACT,+HACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,IAAa,eAAe,EAAE,WAAW,GAAG,YAAyC;CACnF,OAAO,oBAAC,OAAD;EAAK,aAAU;EAAe,WAAW,GAAG,6CAA6C,SAAS;EAAG,GAAI;CAAQ,CAAA;AAC1H;AAEA,IAAM,qBAAqB,IAAI,+FAA+F;CAC5H,UAAU,EACR,SAAS;EACP,SAAS;EACT,MAAM;CACR,EACF;CACA,iBAAiB,EACf,SAAS,UACX;AACF,CAAC;AAED,IAAa,cAAc,EAAE,WAAW,UAAU,WAAW,GAAG,YAAmF;CACjJ,OAAO,oBAAC,OAAD;EAAK,aAAU;EAAa,gBAAc;EAAS,WAAW,GAAG,mBAAmB;GAAE;GAAS;EAAU,CAAC,CAAC;EAAG,GAAI;CAAQ,CAAA;AACnI;AAEA,IAAa,cAAc,EAAE,WAAW,GAAG,YAAyC;CAClF,OAAO,oBAAC,OAAD;EAAK,aAAU;EAAc,WAAW,GAAG,mDAAmD,SAAS;EAAG,GAAI;CAAQ,CAAA;AAC/H;AAEA,IAAa,oBAAoB,EAAE,WAAW,GAAG,YAAuC;CACtF,OACE,oBAAC,OAAD;EACE,aAAU;EACV,WAAW,GAAG,2GAA2G,SAAS;EAClI,GAAI;CACL,CAAA;AAEL;AAEA,IAAa,gBAAgB,EAAE,WAAW,GAAG,YAAyC;CACpF,OACE,oBAAC,OAAD;EACE,aAAU;EACV,WAAW,GAAG,mFAAmF,SAAS;EAC1G,GAAI;CACL,CAAA;AAEL"}