@emara/ui 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (218) hide show
  1. package/components/ui/.gitkeep +0 -0
  2. package/components/ui/accordion.stories.tsx +231 -0
  3. package/components/ui/accordion.tsx +250 -0
  4. package/components/ui/app-shell.stories.tsx +270 -0
  5. package/components/ui/app-shell.tsx +491 -0
  6. package/components/ui/avatar.stories.tsx +174 -0
  7. package/components/ui/avatar.tsx +257 -0
  8. package/components/ui/badge.stories.tsx +127 -0
  9. package/components/ui/badge.tsx +146 -0
  10. package/components/ui/breadcrumb.stories.tsx +92 -0
  11. package/components/ui/breadcrumb.tsx +302 -0
  12. package/components/ui/button.stories.tsx +186 -0
  13. package/components/ui/button.tsx +128 -0
  14. package/components/ui/card.stories.tsx +279 -0
  15. package/components/ui/card.tsx +250 -0
  16. package/components/ui/checkbox.stories.tsx +93 -0
  17. package/components/ui/checkbox.tsx +131 -0
  18. package/components/ui/combobox.stories.tsx +489 -0
  19. package/components/ui/combobox.tsx +874 -0
  20. package/components/ui/context-menu.stories.tsx +202 -0
  21. package/components/ui/context-menu.tsx +309 -0
  22. package/components/ui/data-table.stories.tsx +227 -0
  23. package/components/ui/data-table.tsx +539 -0
  24. package/components/ui/date-picker.stories.tsx +225 -0
  25. package/components/ui/date-picker.tsx +597 -0
  26. package/components/ui/dialog.stories.tsx +193 -0
  27. package/components/ui/dialog.tsx +262 -0
  28. package/components/ui/divider.stories.tsx +84 -0
  29. package/components/ui/divider.tsx +135 -0
  30. package/components/ui/drawer.stories.tsx +218 -0
  31. package/components/ui/drawer.tsx +329 -0
  32. package/components/ui/dropdown-menu.stories.tsx +270 -0
  33. package/components/ui/dropdown-menu.tsx +353 -0
  34. package/components/ui/empty-state.stories.tsx +121 -0
  35. package/components/ui/empty-state.tsx +289 -0
  36. package/components/ui/field-group.stories.tsx +201 -0
  37. package/components/ui/field-group.tsx +276 -0
  38. package/components/ui/form.stories.tsx +219 -0
  39. package/components/ui/form.tsx +542 -0
  40. package/components/ui/input.stories.tsx +154 -0
  41. package/components/ui/input.tsx +208 -0
  42. package/components/ui/label.stories.tsx +84 -0
  43. package/components/ui/label.tsx +98 -0
  44. package/components/ui/page-header.stories.tsx +136 -0
  45. package/components/ui/page-header.tsx +315 -0
  46. package/components/ui/pagination.stories.tsx +136 -0
  47. package/components/ui/pagination.tsx +427 -0
  48. package/components/ui/popover.stories.tsx +212 -0
  49. package/components/ui/popover.tsx +167 -0
  50. package/components/ui/radio-group.stories.tsx +96 -0
  51. package/components/ui/radio-group.tsx +250 -0
  52. package/components/ui/select.stories.tsx +203 -0
  53. package/components/ui/select.tsx +318 -0
  54. package/components/ui/sidebar.stories.tsx +186 -0
  55. package/components/ui/sidebar.tsx +623 -0
  56. package/components/ui/skeleton.stories.tsx +131 -0
  57. package/components/ui/skeleton.tsx +311 -0
  58. package/components/ui/switch.stories.tsx +74 -0
  59. package/components/ui/switch.tsx +186 -0
  60. package/components/ui/table.stories.tsx +107 -0
  61. package/components/ui/table.tsx +285 -0
  62. package/components/ui/tabs.stories.tsx +222 -0
  63. package/components/ui/tabs.tsx +287 -0
  64. package/components/ui/textarea.stories.tsx +96 -0
  65. package/components/ui/textarea.tsx +182 -0
  66. package/components/ui/toast.stories.tsx +169 -0
  67. package/components/ui/toast.tsx +250 -0
  68. package/components/ui/tooltip.stories.tsx +146 -0
  69. package/components/ui/tooltip.tsx +156 -0
  70. package/components/ui/top-bar.stories.tsx +182 -0
  71. package/components/ui/top-bar.tsx +155 -0
  72. package/dist/components/ui/accordion.d.ts +45 -0
  73. package/dist/components/ui/accordion.d.ts.map +1 -0
  74. package/dist/components/ui/accordion.js +99 -0
  75. package/dist/components/ui/accordion.js.map +1 -0
  76. package/dist/components/ui/app-shell.d.ts +70 -0
  77. package/dist/components/ui/app-shell.d.ts.map +1 -0
  78. package/dist/components/ui/app-shell.js +199 -0
  79. package/dist/components/ui/app-shell.js.map +1 -0
  80. package/dist/components/ui/avatar.d.ts +41 -0
  81. package/dist/components/ui/avatar.d.ts.map +1 -0
  82. package/dist/components/ui/avatar.js +104 -0
  83. package/dist/components/ui/avatar.js.map +1 -0
  84. package/dist/components/ui/badge.d.ts +27 -0
  85. package/dist/components/ui/badge.d.ts.map +1 -0
  86. package/dist/components/ui/badge.js +65 -0
  87. package/dist/components/ui/badge.js.map +1 -0
  88. package/dist/components/ui/breadcrumb.d.ts +35 -0
  89. package/dist/components/ui/breadcrumb.d.ts.map +1 -0
  90. package/dist/components/ui/breadcrumb.js +88 -0
  91. package/dist/components/ui/breadcrumb.js.map +1 -0
  92. package/dist/components/ui/button.d.ts +26 -0
  93. package/dist/components/ui/button.d.ts.map +1 -0
  94. package/dist/components/ui/button.js +73 -0
  95. package/dist/components/ui/button.js.map +1 -0
  96. package/dist/components/ui/card.d.ts +52 -0
  97. package/dist/components/ui/card.d.ts.map +1 -0
  98. package/dist/components/ui/card.js +96 -0
  99. package/dist/components/ui/card.js.map +1 -0
  100. package/dist/components/ui/checkbox.d.ts +18 -0
  101. package/dist/components/ui/checkbox.d.ts.map +1 -0
  102. package/dist/components/ui/checkbox.js +59 -0
  103. package/dist/components/ui/checkbox.js.map +1 -0
  104. package/dist/components/ui/combobox.d.ts +194 -0
  105. package/dist/components/ui/combobox.d.ts.map +1 -0
  106. package/dist/components/ui/combobox.js +361 -0
  107. package/dist/components/ui/combobox.js.map +1 -0
  108. package/dist/components/ui/context-menu.d.ts +46 -0
  109. package/dist/components/ui/context-menu.d.ts.map +1 -0
  110. package/dist/components/ui/context-menu.js +95 -0
  111. package/dist/components/ui/context-menu.js.map +1 -0
  112. package/dist/components/ui/data-table.d.ts +53 -0
  113. package/dist/components/ui/data-table.d.ts.map +1 -0
  114. package/dist/components/ui/data-table.js +163 -0
  115. package/dist/components/ui/data-table.js.map +1 -0
  116. package/dist/components/ui/date-picker.d.ts +103 -0
  117. package/dist/components/ui/date-picker.d.ts.map +1 -0
  118. package/dist/components/ui/date-picker.js +306 -0
  119. package/dist/components/ui/date-picker.js.map +1 -0
  120. package/dist/components/ui/dialog.d.ts +40 -0
  121. package/dist/components/ui/dialog.d.ts.map +1 -0
  122. package/dist/components/ui/dialog.js +110 -0
  123. package/dist/components/ui/dialog.js.map +1 -0
  124. package/dist/components/ui/divider.d.ts +30 -0
  125. package/dist/components/ui/divider.d.ts.map +1 -0
  126. package/dist/components/ui/divider.js +62 -0
  127. package/dist/components/ui/divider.js.map +1 -0
  128. package/dist/components/ui/drawer.d.ts +56 -0
  129. package/dist/components/ui/drawer.d.ts.map +1 -0
  130. package/dist/components/ui/drawer.js +147 -0
  131. package/dist/components/ui/drawer.js.map +1 -0
  132. package/dist/components/ui/dropdown-menu.d.ts +63 -0
  133. package/dist/components/ui/dropdown-menu.d.ts.map +1 -0
  134. package/dist/components/ui/dropdown-menu.js +116 -0
  135. package/dist/components/ui/dropdown-menu.js.map +1 -0
  136. package/dist/components/ui/empty-state.d.ts +43 -0
  137. package/dist/components/ui/empty-state.d.ts.map +1 -0
  138. package/dist/components/ui/empty-state.js +128 -0
  139. package/dist/components/ui/empty-state.js.map +1 -0
  140. package/dist/components/ui/field-group.d.ts +38 -0
  141. package/dist/components/ui/field-group.d.ts.map +1 -0
  142. package/dist/components/ui/field-group.js +107 -0
  143. package/dist/components/ui/field-group.js.map +1 -0
  144. package/dist/components/ui/form.d.ts +67 -0
  145. package/dist/components/ui/form.d.ts.map +1 -0
  146. package/dist/components/ui/form.js +286 -0
  147. package/dist/components/ui/form.js.map +1 -0
  148. package/dist/components/ui/input.d.ts +36 -0
  149. package/dist/components/ui/input.d.ts.map +1 -0
  150. package/dist/components/ui/input.js +99 -0
  151. package/dist/components/ui/input.js.map +1 -0
  152. package/dist/components/ui/label.d.ts +37 -0
  153. package/dist/components/ui/label.d.ts.map +1 -0
  154. package/dist/components/ui/label.js +34 -0
  155. package/dist/components/ui/label.js.map +1 -0
  156. package/dist/components/ui/page-header.d.ts +65 -0
  157. package/dist/components/ui/page-header.d.ts.map +1 -0
  158. package/dist/components/ui/page-header.js +140 -0
  159. package/dist/components/ui/page-header.js.map +1 -0
  160. package/dist/components/ui/pagination.d.ts +67 -0
  161. package/dist/components/ui/pagination.d.ts.map +1 -0
  162. package/dist/components/ui/pagination.js +109 -0
  163. package/dist/components/ui/pagination.js.map +1 -0
  164. package/dist/components/ui/popover.d.ts +28 -0
  165. package/dist/components/ui/popover.d.ts.map +1 -0
  166. package/dist/components/ui/popover.js +85 -0
  167. package/dist/components/ui/popover.js.map +1 -0
  168. package/dist/components/ui/radio-group.d.ts +35 -0
  169. package/dist/components/ui/radio-group.d.ts.map +1 -0
  170. package/dist/components/ui/radio-group.js +103 -0
  171. package/dist/components/ui/radio-group.js.map +1 -0
  172. package/dist/components/ui/select.d.ts +42 -0
  173. package/dist/components/ui/select.d.ts.map +1 -0
  174. package/dist/components/ui/select.js +86 -0
  175. package/dist/components/ui/select.js.map +1 -0
  176. package/dist/components/ui/sidebar.d.ts +59 -0
  177. package/dist/components/ui/sidebar.d.ts.map +1 -0
  178. package/dist/components/ui/sidebar.js +189 -0
  179. package/dist/components/ui/sidebar.js.map +1 -0
  180. package/dist/components/ui/skeleton.d.ts +77 -0
  181. package/dist/components/ui/skeleton.d.ts.map +1 -0
  182. package/dist/components/ui/skeleton.js +115 -0
  183. package/dist/components/ui/skeleton.js.map +1 -0
  184. package/dist/components/ui/switch.d.ts +26 -0
  185. package/dist/components/ui/switch.d.ts.map +1 -0
  186. package/dist/components/ui/switch.js +84 -0
  187. package/dist/components/ui/switch.js.map +1 -0
  188. package/dist/components/ui/table.d.ts +52 -0
  189. package/dist/components/ui/table.d.ts.map +1 -0
  190. package/dist/components/ui/table.js +109 -0
  191. package/dist/components/ui/table.js.map +1 -0
  192. package/dist/components/ui/tabs.d.ts +42 -0
  193. package/dist/components/ui/tabs.d.ts.map +1 -0
  194. package/dist/components/ui/tabs.js +163 -0
  195. package/dist/components/ui/tabs.js.map +1 -0
  196. package/dist/components/ui/textarea.d.ts +26 -0
  197. package/dist/components/ui/textarea.d.ts.map +1 -0
  198. package/dist/components/ui/textarea.js +96 -0
  199. package/dist/components/ui/textarea.js.map +1 -0
  200. package/dist/components/ui/toast.d.ts +77 -0
  201. package/dist/components/ui/toast.d.ts.map +1 -0
  202. package/dist/components/ui/toast.js +141 -0
  203. package/dist/components/ui/toast.js.map +1 -0
  204. package/dist/components/ui/tooltip.d.ts +31 -0
  205. package/dist/components/ui/tooltip.d.ts.map +1 -0
  206. package/dist/components/ui/tooltip.js +71 -0
  207. package/dist/components/ui/tooltip.js.map +1 -0
  208. package/dist/components/ui/top-bar.d.ts +30 -0
  209. package/dist/components/ui/top-bar.d.ts.map +1 -0
  210. package/dist/components/ui/top-bar.js +64 -0
  211. package/dist/components/ui/top-bar.js.map +1 -0
  212. package/dist/lib/utils.d.ts +3 -0
  213. package/dist/lib/utils.d.ts.map +1 -0
  214. package/dist/lib/utils.js +6 -0
  215. package/dist/lib/utils.js.map +1 -0
  216. package/lib/utils.ts +6 -0
  217. package/package.json +112 -0
  218. package/styles/globals.css +685 -0
@@ -0,0 +1,46 @@
1
+ import * as ContextMenuPrimitive from "@radix-ui/react-context-menu";
2
+ import { type VariantProps } from "class-variance-authority";
3
+ declare const ContextMenu: import("react").FC<ContextMenuPrimitive.ContextMenuProps>;
4
+ declare const ContextMenuTrigger: import("react").ForwardRefExoticComponent<ContextMenuPrimitive.ContextMenuTriggerProps & import("react").RefAttributes<HTMLSpanElement>>;
5
+ declare const ContextMenuGroup: import("react").ForwardRefExoticComponent<ContextMenuPrimitive.ContextMenuGroupProps & import("react").RefAttributes<HTMLDivElement>>;
6
+ declare const ContextMenuPortal: import("react").FC<ContextMenuPrimitive.ContextMenuPortalProps>;
7
+ declare const ContextMenuSub: import("react").FC<ContextMenuPrimitive.ContextMenuSubProps>;
8
+ declare const ContextMenuRadioGroup: import("react").ForwardRefExoticComponent<ContextMenuPrimitive.ContextMenuRadioGroupProps & import("react").RefAttributes<HTMLDivElement>>;
9
+ declare const contextContentVariants: (props?: ({
10
+ size?: "sm" | "md" | null | undefined;
11
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
12
+ type ContextMenuContentProps = React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Content> & VariantProps<typeof contextContentVariants>;
13
+ declare const ContextMenuContent: import("react").ForwardRefExoticComponent<Omit<ContextMenuPrimitive.ContextMenuContentProps & import("react").RefAttributes<HTMLDivElement>, "ref"> & VariantProps<(props?: ({
14
+ size?: "sm" | "md" | null | undefined;
15
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string> & import("react").RefAttributes<HTMLDivElement>>;
16
+ type ContextMenuItemProps = React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Item> & {
17
+ variant?: "default" | "destructive";
18
+ icon?: React.ReactNode;
19
+ description?: React.ReactNode;
20
+ kbd?: string[];
21
+ loading?: boolean;
22
+ inset?: boolean;
23
+ };
24
+ declare const ContextMenuItem: import("react").ForwardRefExoticComponent<Omit<ContextMenuPrimitive.ContextMenuItemProps & import("react").RefAttributes<HTMLDivElement>, "ref"> & {
25
+ variant?: "default" | "destructive";
26
+ icon?: React.ReactNode;
27
+ description?: React.ReactNode;
28
+ kbd?: string[];
29
+ loading?: boolean;
30
+ inset?: boolean;
31
+ } & import("react").RefAttributes<HTMLDivElement>>;
32
+ declare const ContextMenuCheckboxItem: import("react").ForwardRefExoticComponent<Omit<ContextMenuPrimitive.ContextMenuCheckboxItemProps & import("react").RefAttributes<HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
33
+ declare const ContextMenuRadioItem: import("react").ForwardRefExoticComponent<Omit<ContextMenuPrimitive.ContextMenuRadioItemProps & import("react").RefAttributes<HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
34
+ declare const ContextMenuLabel: import("react").ForwardRefExoticComponent<Omit<ContextMenuPrimitive.ContextMenuLabelProps & import("react").RefAttributes<HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
35
+ declare const ContextMenuSeparator: import("react").ForwardRefExoticComponent<Omit<ContextMenuPrimitive.ContextMenuSeparatorProps & import("react").RefAttributes<HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
36
+ declare function ContextMenuShortcut({ keys, className }: {
37
+ keys: string[];
38
+ className?: string;
39
+ }): import("react/jsx-runtime").JSX.Element;
40
+ declare const ContextMenuSubTrigger: import("react").ForwardRefExoticComponent<Omit<ContextMenuPrimitive.ContextMenuSubTriggerProps & import("react").RefAttributes<HTMLDivElement>, "ref"> & {
41
+ icon?: React.ReactNode;
42
+ } & import("react").RefAttributes<HTMLDivElement>>;
43
+ declare const ContextMenuSubContent: import("react").ForwardRefExoticComponent<Omit<ContextMenuPrimitive.ContextMenuSubContentProps & import("react").RefAttributes<HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
44
+ export { ContextMenu, ContextMenuTrigger, ContextMenuContent, ContextMenuItem, ContextMenuCheckboxItem, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuLabel, ContextMenuSeparator, ContextMenuShortcut, ContextMenuGroup, ContextMenuPortal, ContextMenuSub, ContextMenuSubTrigger, ContextMenuSubContent, contextContentVariants, };
45
+ export type { ContextMenuContentProps, ContextMenuItemProps };
46
+ //# sourceMappingURL=context-menu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-menu.d.ts","sourceRoot":"","sources":["../../../components/ui/context-menu.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,oBAAoB,MAAM,8BAA8B,CAAC;AAErE,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAQlE,QAAA,MAAM,WAAW,2DAA4B,CAAC;AAC9C,QAAA,MAAM,kBAAkB,0IAA+B,CAAC;AACxD,QAAA,MAAM,gBAAgB,uIAA6B,CAAC;AACpD,QAAA,MAAM,iBAAiB,iEAA8B,CAAC;AACtD,QAAA,MAAM,cAAc,8DAA2B,CAAC;AAChD,QAAA,MAAM,qBAAqB,4IAAkC,CAAC;AAM9D,QAAA,MAAM,sBAAsB;;8EAe3B,CAAC;AAEF,KAAK,uBAAuB,GAAG,KAAK,CAAC,wBAAwB,CAAC,OAAO,oBAAoB,CAAC,OAAO,CAAC,GAChG,YAAY,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAE9C,QAAA,MAAM,kBAAkB;;gIAatB,CAAC;AAmBH,KAAK,oBAAoB,GAAG,KAAK,CAAC,wBAAwB,CAAC,OAAO,oBAAoB,CAAC,IAAI,CAAC,GAAG;IAC7F,OAAO,CAAC,EAAE,SAAS,GAAG,aAAa,CAAC;IACpC,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,QAAA,MAAM,eAAe;cART,SAAS,GAAG,aAAa;WAC5B,KAAK,CAAC,SAAS;kBACR,KAAK,CAAC,SAAS;UACvB,MAAM,EAAE;cACJ,OAAO;YACT,OAAO;kDA8Df,CAAC;AAOH,QAAA,MAAM,uBAAuB,2MAc3B,CAAC;AAGH,QAAA,MAAM,oBAAoB,wMAcxB,CAAC;AAOH,QAAA,MAAM,gBAAgB,oMAcpB,CAAC;AAGH,QAAA,MAAM,oBAAoB,wMAWxB,CAAC;AAGH,iBAAS,mBAAmB,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,2CAmBvF;AAMD,QAAA,MAAM,qBAAqB;WAGhB,KAAK,CAAC,SAAS;kDAoBxB,CAAC;AAGH,QAAA,MAAM,qBAAqB,yMAgBzB,CAAC;AAGH,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EACf,uBAAuB,EACvB,qBAAqB,EACrB,oBAAoB,EACpB,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,GACvB,CAAC;AACF,YAAY,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,CAAC"}
@@ -0,0 +1,95 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { forwardRef } from "react";
4
+ import * as ContextMenuPrimitive from "@radix-ui/react-context-menu";
5
+ import { RiArrowRightSLine, RiCheckLine, RiCircleFill, RiLoader2Line } from "@remixicon/react";
6
+ import { cva } from "class-variance-authority";
7
+ import { cn } from "@/lib/utils";
8
+ // Per docs/emara-ui-phase-3-components.md §6. Same API shape as DropdownMenu;
9
+ // the only difference is `Trigger` wraps any element and listens for the
10
+ // context-menu event (right-click / long-press) instead of being a button.
11
+ const ContextMenu = ContextMenuPrimitive.Root;
12
+ const ContextMenuTrigger = ContextMenuPrimitive.Trigger;
13
+ const ContextMenuGroup = ContextMenuPrimitive.Group;
14
+ const ContextMenuPortal = ContextMenuPrimitive.Portal;
15
+ const ContextMenuSub = ContextMenuPrimitive.Sub;
16
+ const ContextMenuRadioGroup = ContextMenuPrimitive.RadioGroup;
17
+ // ----------------------------------------------------------------------------
18
+ // ContextMenuContent
19
+ // ----------------------------------------------------------------------------
20
+ const contextContentVariants = cva([
21
+ "z-popover min-w-32 overflow-hidden rounded-md border border-border bg-popover text-popover-foreground shadow-md",
22
+ "data-[state=open]:animate-[scale-in_var(--duration-fast)_var(--ease-out)]",
23
+ "data-[state=closed]:animate-[scale-out_var(--duration-fast)_var(--ease-in)]",
24
+ ].join(" "), {
25
+ variants: {
26
+ size: {
27
+ sm: "py-1 text-xs",
28
+ md: "py-1 text-sm",
29
+ },
30
+ },
31
+ defaultVariants: { size: "md" },
32
+ });
33
+ const ContextMenuContent = forwardRef(function ContextMenuContent({ className, size, ...props }, ref) {
34
+ return (_jsx(ContextMenuPortal, { children: _jsx(ContextMenuPrimitive.Content, { ref: ref, className: cn(contextContentVariants({ size }), className), ...props }) }));
35
+ });
36
+ ContextMenuContent.displayName = "ContextMenuContent";
37
+ // ----------------------------------------------------------------------------
38
+ // Shared item base
39
+ // ----------------------------------------------------------------------------
40
+ const itemBase = [
41
+ "relative flex cursor-pointer select-none items-start gap-2 rounded-sm py-1.5 ps-8 pe-2 text-sm outline-none",
42
+ "transition-colors",
43
+ "focus:bg-accent focus:text-accent-foreground",
44
+ "data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
45
+ "aria-busy:cursor-progress",
46
+ ].join(" ");
47
+ const ContextMenuItem = forwardRef(function ContextMenuItem({ className, variant = "default", icon, description, kbd, loading = false, inset = false, children, onSelect, ...props }, ref) {
48
+ return (_jsxs(ContextMenuPrimitive.Item, { ref: ref, "aria-busy": loading || undefined, onSelect: (e) => {
49
+ if (loading) {
50
+ e.preventDefault();
51
+ return;
52
+ }
53
+ onSelect?.(e);
54
+ }, className: cn(itemBase, variant === "destructive" &&
55
+ "text-destructive focus:bg-destructive/10 focus:text-destructive", inset && "ps-2", className), ...props, children: [_jsx("span", { className: "absolute start-2 inline-flex h-4 w-4 items-center justify-center text-current", children: loading ? _jsx(RiLoader2Line, { className: "size-3.5 animate-spin" }) : (icon ?? null) }), _jsxs("span", { className: "flex flex-1 flex-col gap-0.5 leading-none", children: [_jsx("span", { children: children }), description ? _jsx("span", { className: "text-muted-foreground text-xs", children: description }) : null] }), kbd ? (_jsx("span", { className: "text-muted-foreground ms-auto inline-flex items-center gap-0.5 text-xs", children: kbd.map((k, i) => (_jsx("kbd", { className: "border-border bg-muted min-w-[1em] rounded border px-1 font-mono text-[10px] leading-tight", children: k }, `${k}-${i}`))) })) : null] }));
56
+ });
57
+ ContextMenuItem.displayName = "ContextMenuItem";
58
+ // ----------------------------------------------------------------------------
59
+ // CheckboxItem / RadioItem
60
+ // ----------------------------------------------------------------------------
61
+ const ContextMenuCheckboxItem = forwardRef(function ContextMenuCheckboxItem({ className, children, ...props }, ref) {
62
+ return (_jsxs(ContextMenuPrimitive.CheckboxItem, { ref: ref, className: cn(itemBase, className), ...props, children: [_jsx("span", { className: "absolute start-2 inline-flex h-4 w-4 items-center justify-center", children: _jsx(ContextMenuPrimitive.ItemIndicator, { children: _jsx(RiCheckLine, { className: "size-4" }) }) }), _jsx("span", { className: "flex-1", children: children })] }));
63
+ });
64
+ ContextMenuCheckboxItem.displayName = "ContextMenuCheckboxItem";
65
+ const ContextMenuRadioItem = forwardRef(function ContextMenuRadioItem({ className, children, ...props }, ref) {
66
+ return (_jsxs(ContextMenuPrimitive.RadioItem, { ref: ref, className: cn(itemBase, className), ...props, children: [_jsx("span", { className: "absolute start-2 inline-flex h-4 w-4 items-center justify-center", children: _jsx(ContextMenuPrimitive.ItemIndicator, { children: _jsx(RiCircleFill, { className: "size-2 fill-current" }) }) }), _jsx("span", { className: "flex-1", children: children })] }));
67
+ });
68
+ ContextMenuRadioItem.displayName = "ContextMenuRadioItem";
69
+ // ----------------------------------------------------------------------------
70
+ // Label / Separator / Shortcut
71
+ // ----------------------------------------------------------------------------
72
+ const ContextMenuLabel = forwardRef(function ContextMenuLabel({ className, ...props }, ref) {
73
+ return (_jsx(ContextMenuPrimitive.Label, { ref: ref, className: cn("text-muted-foreground px-2 py-1.5 text-xs font-semibold tracking-wide uppercase", className), ...props }));
74
+ });
75
+ ContextMenuLabel.displayName = "ContextMenuLabel";
76
+ const ContextMenuSeparator = forwardRef(function ContextMenuSeparator({ className, ...props }, ref) {
77
+ return (_jsx(ContextMenuPrimitive.Separator, { ref: ref, className: cn("bg-border -mx-1 my-1 h-px", className), ...props }));
78
+ });
79
+ ContextMenuSeparator.displayName = "ContextMenuSeparator";
80
+ function ContextMenuShortcut({ keys, className }) {
81
+ return (_jsx("span", { className: cn("text-muted-foreground ms-auto inline-flex items-center gap-0.5 text-xs", className), dir: "ltr", children: keys.map((k, i) => (_jsxs("span", { className: "inline-flex items-center gap-0.5", children: [i > 0 ? _jsx("span", { className: "opacity-70", children: "+" }) : null, _jsx("kbd", { className: "border-border bg-muted min-w-[1em] rounded border px-1 font-mono text-[10px] leading-tight", children: k })] }, `${k}-${i}`))) }));
82
+ }
83
+ // ----------------------------------------------------------------------------
84
+ // SubTrigger / SubContent
85
+ // ----------------------------------------------------------------------------
86
+ const ContextMenuSubTrigger = forwardRef(function ContextMenuSubTrigger({ className, icon, children, ...props }, ref) {
87
+ return (_jsxs(ContextMenuPrimitive.SubTrigger, { ref: ref, className: cn(itemBase, "data-[state=open]:bg-accent data-[state=open]:text-accent-foreground", className), ...props, children: [_jsx("span", { className: "absolute start-2 inline-flex h-4 w-4 items-center justify-center", children: icon ?? null }), _jsx("span", { className: "flex-1", children: children }), _jsx(RiArrowRightSLine, { className: "rtl-mirror ms-auto size-4", "aria-hidden": "true" })] }));
88
+ });
89
+ ContextMenuSubTrigger.displayName = "ContextMenuSubTrigger";
90
+ const ContextMenuSubContent = forwardRef(function ContextMenuSubContent({ className, ...props }, ref) {
91
+ return (_jsx(ContextMenuPrimitive.SubContent, { ref: ref, className: cn("border-border bg-popover text-popover-foreground z-popover min-w-32 overflow-hidden rounded-md border py-1 text-sm shadow-md", "data-[state=open]:animate-[scale-in_var(--duration-fast)_var(--ease-out)]", "data-[state=closed]:animate-[scale-out_var(--duration-fast)_var(--ease-in)]", className), ...props }));
92
+ });
93
+ ContextMenuSubContent.displayName = "ContextMenuSubContent";
94
+ export { ContextMenu, ContextMenuTrigger, ContextMenuContent, ContextMenuItem, ContextMenuCheckboxItem, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuLabel, ContextMenuSeparator, ContextMenuShortcut, ContextMenuGroup, ContextMenuPortal, ContextMenuSub, ContextMenuSubTrigger, ContextMenuSubContent, contextContentVariants, };
95
+ //# sourceMappingURL=context-menu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-menu.js","sourceRoot":"","sources":["../../../components/ui/context-menu.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ import { type ReactNode } from "react";
2
+ import { type ColumnDef } from "@tanstack/react-table";
3
+ import { type TableDensity } from "./table";
4
+ type EmaraAlign = "start" | "center" | "end";
5
+ declare module "@tanstack/react-table" {
6
+ interface ColumnMeta<TData, TValue> {
7
+ /** Logical alignment for header + cells. RTL-aware. */
8
+ align?: EmaraAlign;
9
+ /** Fixed/min width. */
10
+ width?: number | string;
11
+ /** Single-line with ellipsis. */
12
+ truncate?: boolean;
13
+ /** Pin column to start/end. (Visual style only in v1; pin layout deferred.) */
14
+ sticky?: "start" | "end";
15
+ }
16
+ }
17
+ type SelectionMode = "none" | "single" | "multi";
18
+ interface DataTableProps<T> {
19
+ data: T[];
20
+ columns: ColumnDef<T, unknown>[];
21
+ loading?: boolean;
22
+ error?: ReactNode;
23
+ empty?: ReactNode;
24
+ density?: TableDensity;
25
+ striped?: boolean;
26
+ bordered?: boolean;
27
+ hoverable?: boolean;
28
+ stickyHeader?: boolean;
29
+ enableSorting?: boolean;
30
+ enableMultiSort?: boolean;
31
+ enableGlobalSearch?: boolean;
32
+ /** Placeholder for the global search input. */
33
+ searchPlaceholder?: string;
34
+ enableSelection?: SelectionMode;
35
+ onSelectionChange?: (rows: T[]) => void;
36
+ getRowId?: (row: T, index: number) => string;
37
+ enablePagination?: boolean;
38
+ pageSize?: number;
39
+ pageSizeOptions?: number[];
40
+ enableColumnVisibility?: boolean;
41
+ enableRowExpand?: boolean;
42
+ renderExpandedRow?: (row: T) => ReactNode;
43
+ toolbar?: ReactNode;
44
+ toolbarActions?: ReactNode;
45
+ rowClassName?: (row: T) => string;
46
+ className?: string;
47
+ }
48
+ declare const DataTable: <T>(props: DataTableProps<T> & {
49
+ ref?: React.Ref<HTMLDivElement>;
50
+ }) => React.ReactElement;
51
+ export { DataTable };
52
+ export type { DataTableProps, SelectionMode };
53
+ //# sourceMappingURL=data-table.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table.d.ts","sourceRoot":"","sources":["../../../components/ui/data-table.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAkD,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACvF,OAAO,EAQL,KAAK,SAAS,EAKf,MAAM,uBAAuB,CAAC;AAwB/B,OAAO,EAOL,KAAK,YAAY,EAClB,MAAM,SAAS,CAAC;AAkBjB,KAAK,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;AAE7C,OAAO,QAAQ,uBAAuB,CAAC;IAIrC,UAAU,UAAU,CAAC,KAAK,EAAE,MAAM;QAChC,uDAAuD;QACvD,KAAK,CAAC,EAAE,UAAU,CAAC;QACnB,uBAAuB;QACvB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QACxB,iCAAiC;QACjC,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,+EAA+E;QAC/E,MAAM,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;KAC1B;CACF;AAID,KAAK,aAAa,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEjD,UAAU,cAAc,CAAC,CAAC;IACxB,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,OAAO,EAAE,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC;IAEjC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,KAAK,CAAC,EAAE,SAAS,CAAC;IAElB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,+CAA+C;IAC/C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,eAAe,CAAC,EAAE,aAAa,CAAC;IAChC,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAE7C,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAE3B,sBAAsB,CAAC,EAAE,OAAO,CAAC;IAEjC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,SAAS,CAAC;IAE1C,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,CAAC;IAElC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAoZD,QAAA,MAAM,SAAS,EAAiC,CAAC,CAAC,EAChD,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG;IAAE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;CAAE,KAC3D,KAAK,CAAC,YAAY,CAAC;AAIxB,OAAO,EAAE,SAAS,EAAE,CAAC;AACrB,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,CAAC"}
@@ -0,0 +1,163 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { forwardRef, Fragment, useId, useMemo, useState } from "react";
4
+ import { flexRender, getCoreRowModel, getExpandedRowModel, getFilteredRowModel, getPaginationRowModel, getSortedRowModel, useReactTable, } from "@tanstack/react-table";
5
+ import { RiArrowDownLine, RiArrowUpDownLine, RiArrowUpLine, RiSearchLine, RiSettings3Line, } from "@remixicon/react";
6
+ import { cn } from "@/lib/utils";
7
+ import { Button } from "./button";
8
+ import { Checkbox } from "./checkbox";
9
+ import { DataPagination } from "./pagination";
10
+ import { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from "./dropdown-menu";
11
+ import { EmptyState } from "./empty-state";
12
+ import { Input } from "./input";
13
+ import { Skeleton } from "./skeleton";
14
+ import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "./table";
15
+ // --- Helpers ---------------------------------------------------------------
16
+ function alignClass(align) {
17
+ switch (align) {
18
+ case "center":
19
+ return "text-center";
20
+ case "end":
21
+ return "text-end";
22
+ case "start":
23
+ case undefined:
24
+ default:
25
+ return "text-start";
26
+ }
27
+ }
28
+ function widthStyle(w) {
29
+ if (w === undefined)
30
+ return undefined;
31
+ return { width: typeof w === "number" ? `${w}px` : w };
32
+ }
33
+ // --- DataTable -------------------------------------------------------------
34
+ function DataTableInner(props, ref) {
35
+ const { data, columns, loading = false, error, empty, density, striped, bordered, hoverable, stickyHeader, enableSorting = false, enableMultiSort = false, enableGlobalSearch = false, searchPlaceholder = "Search…", enableSelection = "none", onSelectionChange, getRowId, enablePagination = false, pageSize = 25, pageSizeOptions = [10, 25, 50, 100], enableColumnVisibility = false, enableRowExpand = false, renderExpandedRow, toolbar, toolbarActions, rowClassName, className, } = props;
36
+ const searchInputId = useId();
37
+ const [sorting, setSorting] = useState([]);
38
+ const [rowSelection, setRowSelection] = useState({});
39
+ const [columnVisibility, setColumnVisibility] = useState({});
40
+ const [globalFilter, setGlobalFilter] = useState("");
41
+ const [expanded, setExpanded] = useState({});
42
+ const [pagination, setPagination] = useState({ pageIndex: 0, pageSize });
43
+ // Inject selection column if needed.
44
+ const augmentedColumns = useMemo(() => {
45
+ const cols = [...columns];
46
+ if (enableSelection !== "none") {
47
+ cols.unshift({
48
+ id: "__select",
49
+ size: 36,
50
+ header: ({ table }) => enableSelection === "multi" ? (_jsx(Checkbox, { "aria-label": "Select all rows", checked: table.getIsAllPageRowsSelected()
51
+ ? true
52
+ : table.getIsSomePageRowsSelected()
53
+ ? "indeterminate"
54
+ : false, onCheckedChange: (v) => table.toggleAllPageRowsSelected(Boolean(v)) })) : null,
55
+ cell: ({ row }) => (_jsx(Checkbox, { "aria-label": `Select row ${row.index + 1}`, checked: row.getIsSelected(), onCheckedChange: (v) => {
56
+ if (enableSelection === "single") {
57
+ row.toggleSelected(Boolean(v));
58
+ }
59
+ else {
60
+ row.toggleSelected(Boolean(v));
61
+ }
62
+ } })),
63
+ enableSorting: false,
64
+ enableHiding: false,
65
+ meta: { align: "center" },
66
+ });
67
+ }
68
+ return cols;
69
+ }, [columns, enableSelection]);
70
+ const table = useReactTable({
71
+ data,
72
+ columns: augmentedColumns,
73
+ state: {
74
+ sorting,
75
+ rowSelection,
76
+ columnVisibility,
77
+ globalFilter,
78
+ expanded,
79
+ ...(enablePagination ? { pagination } : {}),
80
+ },
81
+ enableSorting,
82
+ enableMultiSort,
83
+ enableRowSelection: enableSelection !== "none",
84
+ enableMultiRowSelection: enableSelection === "multi",
85
+ onSortingChange: setSorting,
86
+ onRowSelectionChange: (next) => {
87
+ setRowSelection((prev) => {
88
+ const nextState = typeof next === "function" ? next(prev) : next;
89
+ // Single-mode: keep at most one selected row.
90
+ if (enableSelection === "single") {
91
+ const keys = Object.keys(nextState).filter((k) => nextState[k]);
92
+ const lastKey = keys[keys.length - 1];
93
+ const cleaned = lastKey ? { [lastKey]: true } : {};
94
+ queueMicrotask(() => {
95
+ const rows = table
96
+ .getRowModel()
97
+ .rows.filter((r) => cleaned[r.id])
98
+ .map((r) => r.original);
99
+ onSelectionChange?.(rows);
100
+ });
101
+ return cleaned;
102
+ }
103
+ queueMicrotask(() => {
104
+ const rows = table
105
+ .getRowModel()
106
+ .rows.filter((r) => nextState[r.id])
107
+ .map((r) => r.original);
108
+ onSelectionChange?.(rows);
109
+ });
110
+ return nextState;
111
+ });
112
+ },
113
+ onColumnVisibilityChange: setColumnVisibility,
114
+ onGlobalFilterChange: setGlobalFilter,
115
+ onExpandedChange: setExpanded,
116
+ ...(enablePagination ? { onPaginationChange: setPagination } : {}),
117
+ getCoreRowModel: getCoreRowModel(),
118
+ ...(enableSorting ? { getSortedRowModel: getSortedRowModel() } : {}),
119
+ ...(enableGlobalSearch ? { getFilteredRowModel: getFilteredRowModel() } : {}),
120
+ ...(enablePagination ? { getPaginationRowModel: getPaginationRowModel() } : {}),
121
+ ...(enableRowExpand ? { getExpandedRowModel: getExpandedRowModel() } : {}),
122
+ ...(getRowId ? { getRowId } : {}),
123
+ });
124
+ const visibleColumnCount = table.getVisibleLeafColumns().length;
125
+ const showSkeletonRows = loading;
126
+ const showError = !loading && error !== undefined;
127
+ const showEmpty = !loading && !showError && table.getRowModel().rows.length === 0;
128
+ const skeletonRows = pageSize > 0 ? Math.min(pageSize, 8) : 5;
129
+ // Toolbar
130
+ const showColumnToggle = enableColumnVisibility;
131
+ const showSearch = enableGlobalSearch;
132
+ const showToolbar = toolbar !== undefined || showSearch || showColumnToggle || toolbarActions;
133
+ // Polite live-region announcement for sort changes. `aria-sort` on each
134
+ // <th> exposes per-column state at focus time, but state CHANGES are
135
+ // silent without a live region. Per spec phase-4 §118 (sort announcements).
136
+ const sortAnnouncement = sorting.length > 0
137
+ ? `Sorted by ${sorting[0].id}, ${sorting[0].desc ? "descending" : "ascending"}`
138
+ : "";
139
+ return (_jsxs("div", { ref: ref, className: cn("space-y-3", className), children: [_jsx("div", { role: "status", "aria-live": "polite", "aria-atomic": "true", className: "sr-only", children: sortAnnouncement }), showToolbar ? (_jsx("div", { className: "flex flex-wrap items-center gap-2", children: toolbar ?? (_jsxs(_Fragment, { children: [showSearch ? (_jsx("div", { className: "w-72", children: _jsx(Input, { id: searchInputId, type: "search", placeholder: searchPlaceholder, value: globalFilter, onChange: (e) => setGlobalFilter(e.target.value), startAdornment: _jsx(RiSearchLine, {}), clearable: true, onClear: () => setGlobalFilter(""), "aria-label": "Search rows" }) })) : null, _jsxs("div", { className: "ms-auto flex items-center gap-2", children: [toolbarActions, showColumnToggle ? (_jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsx(Button, { variant: "outline", size: "sm", leftIcon: _jsx(RiSettings3Line, {}), children: "Columns" }) }), _jsxs(DropdownMenuContent, { align: "end", children: [_jsx(DropdownMenuLabel, { children: "Toggle columns" }), _jsx(DropdownMenuSeparator, {}), table
140
+ .getAllLeafColumns()
141
+ .filter((c) => c.id !== "__select" && c.getCanHide())
142
+ .map((col) => (_jsx(DropdownMenuCheckboxItem, { checked: col.getIsVisible(), onCheckedChange: (v) => col.toggleVisibility(Boolean(v)), children: String(col.columnDef.header ?? col.id) }, col.id)))] })] })) : null] })] })) })) : null, _jsxs(Table, { ...(density !== undefined ? { density } : {}), ...(striped !== undefined ? { striped } : {}), ...(bordered !== undefined ? { bordered } : {}), ...(hoverable !== undefined ? { hoverable } : {}), ...(stickyHeader !== undefined ? { stickyHeader } : {}), children: [_jsx(TableHeader, { children: table.getHeaderGroups().map((headerGroup) => (_jsx(TableRow, { children: headerGroup.headers.map((header) => {
143
+ const meta = header.column.columnDef.meta;
144
+ const align = meta?.align;
145
+ const sortDir = header.column.getIsSorted();
146
+ const canSort = header.column.getCanSort();
147
+ return (_jsx(TableHead, { style: widthStyle(meta?.width), "aria-sort": canSort
148
+ ? sortDir === "asc"
149
+ ? "ascending"
150
+ : sortDir === "desc"
151
+ ? "descending"
152
+ : "none"
153
+ : undefined, className: cn(alignClass(align), meta?.truncate && "truncate"), children: header.isPlaceholder ? null : canSort ? (_jsxs("button", { type: "button", onClick: (e) => header.column.toggleSorting(undefined, e.shiftKey && enableMultiSort), className: cn("inline-flex cursor-pointer items-center gap-1 rounded-sm select-none", "hover:text-foreground", "focus-visible:ring-ring focus-visible:ring-offset-background focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none", "[&_svg]:size-3.5 [&_svg]:shrink-0"), children: [_jsx("span", { children: flexRender(header.column.columnDef.header, header.getContext()) }), sortDir === "asc" ? (_jsx(RiArrowUpLine, { className: "rtl-mirror" })) : sortDir === "desc" ? (_jsx(RiArrowDownLine, { className: "rtl-mirror" })) : (_jsx(RiArrowUpDownLine, { className: "rtl-mirror opacity-50" }))] })) : (flexRender(header.column.columnDef.header, header.getContext())) }, header.id));
154
+ }) }, headerGroup.id))) }), _jsx(TableBody, { children: showSkeletonRows ? (Array.from({ length: skeletonRows }, (_, i) => (_jsx(TableRow, { children: Array.from({ length: visibleColumnCount }, (__, c) => (_jsx(TableCell, { children: _jsx(Skeleton, { className: "h-4 w-full" }) }, c))) }, `skeleton-${i}`)))) : showError ? (_jsx(TableRow, { children: _jsx(TableCell, { colSpan: visibleColumnCount, className: "p-0", children: _jsx("div", { className: "p-6", children: error }) }) })) : showEmpty ? (_jsx(TableRow, { children: _jsx(TableCell, { colSpan: visibleColumnCount, className: "p-0", children: empty ?? (_jsx(EmptyState, { size: "sm", title: "No results", description: "There are no rows to display." })) }) })) : (table.getRowModel().rows.map((row) => (_jsxs(Fragment, { children: [_jsx(TableRow, { "data-state": row.getIsSelected() ? "selected" : undefined, "aria-selected": row.getIsSelected() || undefined, className: rowClassName?.(row.original), children: row.getVisibleCells().map((cell, cellIdx) => {
155
+ const meta = cell.column.columnDef.meta;
156
+ const expandCellIdx = enableSelection !== "none" ? 1 : 0;
157
+ return (_jsx(TableCell, { style: widthStyle(meta?.width), className: cn(alignClass(meta?.align), meta?.truncate && "truncate"), children: enableRowExpand && cellIdx === expandCellIdx ? (_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("button", { type: "button", onClick: () => row.toggleExpanded(), "aria-label": row.getIsExpanded() ? "Collapse row" : "Expand row", "aria-expanded": row.getIsExpanded(), className: cn("inline-flex size-6 items-center justify-center rounded", "hover:bg-accent cursor-pointer", "focus-visible:ring-ring focus-visible:ring-offset-background focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-none", "[&_svg]:size-4 [&_svg]:shrink-0"), children: row.getIsExpanded() ? (_jsx(RiArrowDownLine, {})) : (_jsx(RiArrowUpDownLine, { className: "rtl-mirror" })) }), flexRender(cell.column.columnDef.cell, cell.getContext())] })) : (flexRender(cell.column.columnDef.cell, cell.getContext())) }, cell.id));
158
+ }) }), enableRowExpand && row.getIsExpanded() ? (_jsx(TableRow, { children: _jsx(TableCell, { colSpan: row.getVisibleCells().length, className: "bg-muted/30", children: renderExpandedRow?.(row.original) ?? null }) })) : null] }, row.id)))) })] }), enablePagination && !loading && !showError ? (_jsx(DataPagination, { page: table.getState().pagination.pageIndex + 1, pageCount: Math.max(1, table.getPageCount()), onPageChange: (p) => table.setPageIndex(p - 1), pageSize: table.getState().pagination.pageSize, pageSizeOptions: pageSizeOptions, onPageSizeChange: (s) => table.setPageSize(s), totalItems: table.getFilteredRowModel().rows.length })) : null] }));
159
+ }
160
+ const DataTable = forwardRef(DataTableInner);
161
+ DataTable.displayName = "DataTable";
162
+ export { DataTable };
163
+ //# sourceMappingURL=data-table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-table.js","sourceRoot":"","sources":["../../../components/ui/data-table.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,103 @@
1
+ import { format as fnsFormat, parse as fnsParse } from "date-fns";
2
+ import { enUS } from "date-fns/locale";
3
+ import { type DayPickerProps } from "react-day-picker";
4
+ import { type VariantProps } from "class-variance-authority";
5
+ type NumberingSystem = "latn" | "arab";
6
+ type Locale = typeof enUS;
7
+ declare const triggerVariants: (props?: ({
8
+ size?: "sm" | "md" | "lg" | "xs" | "xl" | null | undefined;
9
+ invalid?: boolean | null | undefined;
10
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
11
+ type TriggerVariants = VariantProps<typeof triggerVariants>;
12
+ type DateRange = {
13
+ from: Date | undefined;
14
+ to?: Date | undefined;
15
+ };
16
+ /**
17
+ * Quick-pick option rendered as a side-column button next to the calendar.
18
+ * The `value` shape must match the picker's current `mode` — passing a
19
+ * `Date` to a range-mode picker (or vice versa) is a consumer error and
20
+ * will be ignored at click time.
21
+ */
22
+ export type DatePickerPreset = {
23
+ label: React.ReactNode;
24
+ value: Date | DateRange | Date[];
25
+ };
26
+ type DatePickerCommonProps = Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, "value" | "defaultValue" | "onChange"> & TriggerVariants & {
27
+ open?: boolean;
28
+ defaultOpen?: boolean;
29
+ onOpenChange?: (open: boolean) => void;
30
+ placeholder?: string;
31
+ /** Range-only: trigger text shown after a start date is picked but the
32
+ * end date isn't yet. Default "Pick end date". */
33
+ rangeEndPlaceholder?: string;
34
+ /** Display format string per date-fns. Falls back to the locale default. */
35
+ format?: string;
36
+ /** BCP-47 locale string (e.g. "fr-MA", "ar-MA"). */
37
+ locale?: string;
38
+ /** Direct locale object; takes precedence over `locale`. */
39
+ localeObject?: Locale;
40
+ min?: Date;
41
+ max?: Date;
42
+ clearable?: boolean;
43
+ /** Forwarded to react-day-picker's `disabled` for custom disable logic. */
44
+ disabledDates?: DayPickerProps["disabled"];
45
+ /** Override the locale's week start (0 = Sunday, 1 = Monday, ...). */
46
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6;
47
+ showOutsideDays?: boolean;
48
+ showWeekNumbers?: boolean;
49
+ /**
50
+ * Numeral system for day numbers, week numbers, and year labels in the
51
+ * grid + trigger. `"latn"` (default) = Western Arabic digits (0123…);
52
+ * `"arab"` = Eastern Arabic digits (٠١٢…). Resolves via
53
+ * `Intl.NumberFormat`; the spec calls it out for Arabic locales.
54
+ */
55
+ numberingSystem?: NumberingSystem;
56
+ /**
57
+ * Render the calendar inline (no Popover trigger). The component still
58
+ * controls `value` / `onValueChange`; `placeholder`, `format`, `clearable`,
59
+ * and trigger-only styling props (`size`, `invalid`) are ignored.
60
+ * Useful for date-picker filters that sit permanently inside a sidebar.
61
+ */
62
+ inline?: boolean;
63
+ /**
64
+ * Quick-pick rows rendered in a side column next to the calendar.
65
+ * Common patterns: Today / Yesterday / Last 7 days / This month.
66
+ * Clicking a preset applies its `value` to the picker and (in popover
67
+ * single/range mode) closes the popover.
68
+ */
69
+ presets?: DatePickerPreset[];
70
+ };
71
+ type DatePickerSingleProps = DatePickerCommonProps & {
72
+ mode?: "single";
73
+ value?: Date | null;
74
+ defaultValue?: Date | null;
75
+ onValueChange?: (value: Date | null) => void;
76
+ };
77
+ type DatePickerRangeProps = DatePickerCommonProps & {
78
+ mode: "range";
79
+ value?: DateRange | null;
80
+ defaultValue?: DateRange | null;
81
+ onValueChange?: (value: DateRange | null) => void;
82
+ };
83
+ type DatePickerMultipleProps = DatePickerCommonProps & {
84
+ mode: "multiple";
85
+ value?: Date[] | null;
86
+ defaultValue?: Date[] | null;
87
+ onValueChange?: (value: Date[]) => void;
88
+ /** Trigger-only: how many dates to render before collapsing the rest into
89
+ * "+N more". Default 2. */
90
+ maxVisibleDates?: number;
91
+ };
92
+ type DatePickerProps = DatePickerSingleProps | DatePickerRangeProps | DatePickerMultipleProps;
93
+ declare const DatePicker: import("react").ForwardRefExoticComponent<DatePickerProps & import("react").RefAttributes<HTMLButtonElement>>;
94
+ export { DatePicker };
95
+ export type { DatePickerProps };
96
+ /**
97
+ * Utility export — re-exports date-fns' `format` + `parse` so consumers don't
98
+ * have to import them separately for adapter glue. Pulls in date-fns
99
+ * tree-shakably.
100
+ */
101
+ export declare const dateFormat: typeof fnsFormat;
102
+ export declare const dateParse: typeof fnsParse;
103
+ //# sourceMappingURL=date-picker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-picker.d.ts","sourceRoot":"","sources":["../../../components/ui/date-picker.tsx"],"names":[],"mappings":"AAUA,OAAO,EAAE,MAAM,IAAI,SAAS,EAAE,KAAK,IAAI,QAAQ,EAAE,MAAM,UAAU,CAAC;AAClE,OAAO,EAAM,IAAI,EAAM,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAa,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAalE,KAAK,eAAe,GAAG,MAAM,GAAG,MAAM,CAAC;AAwCvC,KAAK,MAAM,GAAG,OAAO,IAAI,CAAC;AAiB1B,QAAA,MAAM,eAAe;;;8EAwBpB,CAAC;AAEF,KAAK,eAAe,GAAG,YAAY,CAAC,OAAO,eAAe,CAAC,CAAC;AAM5D,KAAK,SAAS,GAAG;IAAE,IAAI,EAAE,IAAI,GAAG,SAAS,CAAC;IAAC,EAAE,CAAC,EAAE,IAAI,GAAG,SAAS,CAAA;CAAE,CAAC;AAEnE;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,KAAK,EAAE,IAAI,GAAG,SAAS,GAAG,IAAI,EAAE,CAAC;CAClC,CAAC;AAEF,KAAK,qBAAqB,GAAG,IAAI,CAC/B,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAC7C,OAAO,GAAG,cAAc,GAAG,UAAU,CACtC,GACC,eAAe,GAAG;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;uDACmD;IACnD,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,4EAA4E;IAC5E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oDAAoD;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4DAA4D;IAC5D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,IAAI,CAAC;IACX,GAAG,CAAC,EAAE,IAAI,CAAC;IACX,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,2EAA2E;IAC3E,aAAa,CAAC,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;IAC3C,sEAAsE;IACtE,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACzC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;;OAKG;IACH,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAC9B,CAAC;AAEJ,KAAK,qBAAqB,GAAG,qBAAqB,GAAG;IACnD,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,KAAK,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACpB,YAAY,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAC3B,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI,KAAK,IAAI,CAAC;CAC9C,CAAC;AAEF,KAAK,oBAAoB,GAAG,qBAAqB,GAAG;IAClD,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IACzB,YAAY,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IAChC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,KAAK,IAAI,CAAC;CACnD,CAAC;AAEF,KAAK,uBAAuB,GAAG,qBAAqB,GAAG;IACrD,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;IACtB,YAAY,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;IAC7B,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;IACxC;gCAC4B;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,KAAK,eAAe,GAAG,qBAAqB,GAAG,oBAAoB,GAAG,uBAAuB,CAAC;AAE9F,QAAA,MAAM,UAAU,+GA4Xd,CAAC;AAGH,OAAO,EAAE,UAAU,EAAE,CAAC;AACtB,YAAY,EAAE,eAAe,EAAE,CAAC;AAEhC;;;;GAIG;AACH,eAAO,MAAM,UAAU,kBAAY,CAAC;AACpC,eAAO,MAAM,SAAS,iBAAW,CAAC"}