@contractspec/lib.ui-kit-web 3.7.6 → 3.9.2

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 (234) hide show
  1. package/README.md +33 -88
  2. package/dist/browser/ui/accordion.js +4 -4
  3. package/dist/browser/ui/alert-dialog.js +9 -9
  4. package/dist/browser/ui/alert.js +4 -4
  5. package/dist/browser/ui/atoms/FilterSelect/FilterSelect.js +51 -51
  6. package/dist/browser/ui/atoms/FilterSelect/index.js +51 -51
  7. package/dist/browser/ui/atoms/LoadingSpinner/LoadingSpinner.js +1 -1
  8. package/dist/browser/ui/atoms/Pagination/Pagination.js +13 -13
  9. package/dist/browser/ui/atoms/Pagination/index.js +13 -13
  10. package/dist/browser/ui/atoms/SearchInput/SearchInput.js +8 -8
  11. package/dist/browser/ui/atoms/SearchInput/index.js +8 -8
  12. package/dist/browser/ui/avatar.js +1 -1
  13. package/dist/browser/ui/badge.js +3 -3
  14. package/dist/browser/ui/breadcrumb.js +4 -4
  15. package/dist/browser/ui/button.js +5 -5
  16. package/dist/browser/ui/calendar.js +21 -21
  17. package/dist/browser/ui/card.js +2 -2
  18. package/dist/browser/ui/carousel.js +6 -6
  19. package/dist/browser/ui/checkbox.js +2 -2
  20. package/dist/browser/ui/command.js +14 -14
  21. package/dist/browser/ui/confirm-dialog.js +9 -9
  22. package/dist/browser/ui/context-menu.js +10 -10
  23. package/dist/browser/ui/cta.js +5 -5
  24. package/dist/browser/ui/data-table.js +1009 -0
  25. package/dist/browser/ui/data-table.parts.js +467 -0
  26. package/dist/browser/ui/date-picker.js +26 -26
  27. package/dist/browser/ui/date-range-picker.js +24 -24
  28. package/dist/browser/ui/datetime-picker.js +29 -29
  29. package/dist/browser/ui/dialog.js +5 -5
  30. package/dist/browser/ui/drawer.js +5 -5
  31. package/dist/browser/ui/dropdown-menu.js +10 -10
  32. package/dist/browser/ui/empty-state.js +5 -5
  33. package/dist/browser/ui/empty.js +7 -7
  34. package/dist/browser/ui/field.js +12 -12
  35. package/dist/browser/ui/form.js +4 -4
  36. package/dist/browser/ui/hover-card.js +2 -2
  37. package/dist/browser/ui/input-group.js +16 -16
  38. package/dist/browser/ui/input-otp.js +4 -4
  39. package/dist/browser/ui/input.js +1 -1
  40. package/dist/browser/ui/label.js +2 -2
  41. package/dist/browser/ui/loading-button.js +8 -8
  42. package/dist/browser/ui/marketing/FeatureGrid.js +3 -3
  43. package/dist/browser/ui/marketing/Hero.js +7 -7
  44. package/dist/browser/ui/marketing/PricingTable.js +10 -10
  45. package/dist/browser/ui/menubar.js +12 -12
  46. package/dist/browser/ui/molecules/Autocomplete/index.js +26 -26
  47. package/dist/browser/ui/molecules/SearchAndFilter/SearchAndFilter.js +62 -62
  48. package/dist/browser/ui/molecules/SearchAndFilter/index.js +62 -62
  49. package/dist/browser/ui/molecules/SkeletonList.js +1 -1
  50. package/dist/browser/ui/nav-layout.js +22 -22
  51. package/dist/browser/ui/navigation-menu.js +7 -7
  52. package/dist/browser/ui/organisms/ErrorBoundary/ErrorBoundary.js +11 -11
  53. package/dist/browser/ui/organisms/ListPage/ListPage.js +84 -84
  54. package/dist/browser/ui/page-header.js +4 -4
  55. package/dist/browser/ui/pagination.js +6 -6
  56. package/dist/browser/ui/popover.js +2 -2
  57. package/dist/browser/ui/progress.js +3 -3
  58. package/dist/browser/ui/radio-group.js +3 -3
  59. package/dist/browser/ui/resizable.js +3 -3
  60. package/dist/browser/ui/scroll-area.js +4 -4
  61. package/dist/browser/ui/section.js +1 -1
  62. package/dist/browser/ui/select.js +6 -6
  63. package/dist/browser/ui/separator.js +2 -2
  64. package/dist/browser/ui/sheet.js +5 -5
  65. package/dist/browser/ui/sidebar.js +64 -64
  66. package/dist/browser/ui/skeleton.js +1 -1
  67. package/dist/browser/ui/slider.js +6 -6
  68. package/dist/browser/ui/stack.js +1 -1
  69. package/dist/browser/ui/stat-card-group.js +5 -5
  70. package/dist/browser/ui/stepper.js +2 -2
  71. package/dist/browser/ui/switch.js +3 -3
  72. package/dist/browser/ui/table.js +5 -5
  73. package/dist/browser/ui/tabs.js +3 -3
  74. package/dist/browser/ui/text.js +2 -2
  75. package/dist/browser/ui/textarea.js +1 -1
  76. package/dist/browser/ui/time-picker.js +10 -10
  77. package/dist/browser/ui/toast.js +5 -5
  78. package/dist/browser/ui/toaster.js +5 -5
  79. package/dist/browser/ui/toggle-group.js +7 -7
  80. package/dist/browser/ui/toggle.js +5 -5
  81. package/dist/browser/ui/tooltip.js +3 -3
  82. package/dist/browser/ui/typography.js +14 -14
  83. package/dist/browser/ui/usecases/UseCaseCard.js +8 -8
  84. package/dist/browser/ui/usecases/UserStoryCard.js +3 -3
  85. package/dist/browser/ui/visualization/Visualization.js +447 -0
  86. package/dist/browser/ui/visualization/Visualization.support.js +128 -0
  87. package/dist/browser/ui/visualization/index.js +10 -0
  88. package/dist/ui/accordion.d.ts +2 -2
  89. package/dist/ui/accordion.js +4 -4
  90. package/dist/ui/alert-dialog.d.ts +2 -2
  91. package/dist/ui/alert-dialog.js +9 -9
  92. package/dist/ui/alert.d.ts +2 -2
  93. package/dist/ui/alert.js +4 -4
  94. package/dist/ui/atoms/FilterSelect/FilterSelect.js +51 -51
  95. package/dist/ui/atoms/FilterSelect/index.d.ts +1 -1
  96. package/dist/ui/atoms/FilterSelect/index.js +51 -51
  97. package/dist/ui/atoms/LoadingSpinner/LoadingSpinner.js +1 -1
  98. package/dist/ui/atoms/LoadingSpinner/index.d.ts +1 -1
  99. package/dist/ui/atoms/Pagination/Pagination.js +13 -13
  100. package/dist/ui/atoms/Pagination/index.js +13 -13
  101. package/dist/ui/atoms/SearchInput/SearchInput.js +8 -8
  102. package/dist/ui/atoms/SearchInput/index.js +8 -8
  103. package/dist/ui/avatar.d.ts +2 -2
  104. package/dist/ui/avatar.js +1 -1
  105. package/dist/ui/badge.d.ts +1 -1
  106. package/dist/ui/badge.js +3 -3
  107. package/dist/ui/breadcrumb.d.ts +1 -1
  108. package/dist/ui/breadcrumb.js +4 -4
  109. package/dist/ui/button.d.ts +1 -1
  110. package/dist/ui/button.js +5 -5
  111. package/dist/ui/calendar.js +21 -21
  112. package/dist/ui/card.d.ts +1 -1
  113. package/dist/ui/card.js +2 -2
  114. package/dist/ui/carousel.d.ts +2 -2
  115. package/dist/ui/carousel.js +6 -6
  116. package/dist/ui/checkbox.d.ts +1 -1
  117. package/dist/ui/checkbox.js +2 -2
  118. package/dist/ui/collapsible.d.ts +1 -1
  119. package/dist/ui/command.d.ts +2 -2
  120. package/dist/ui/command.js +14 -14
  121. package/dist/ui/confirm-dialog.js +9 -9
  122. package/dist/ui/context-menu.d.ts +2 -2
  123. package/dist/ui/context-menu.js +10 -10
  124. package/dist/ui/cta.js +5 -5
  125. package/dist/ui/data-table.d.ts +12 -0
  126. package/dist/ui/data-table.js +1004 -0
  127. package/dist/ui/data-table.parts.d.ts +14 -0
  128. package/dist/ui/data-table.parts.js +462 -0
  129. package/dist/ui/date-picker.js +26 -26
  130. package/dist/ui/date-range-picker.js +24 -24
  131. package/dist/ui/datetime-picker.js +29 -29
  132. package/dist/ui/dialog.d.ts +1 -1
  133. package/dist/ui/dialog.js +5 -5
  134. package/dist/ui/drawer.d.ts +1 -1
  135. package/dist/ui/drawer.js +5 -5
  136. package/dist/ui/dropdown-menu.d.ts +2 -2
  137. package/dist/ui/dropdown-menu.js +10 -10
  138. package/dist/ui/empty-state.d.ts +1 -1
  139. package/dist/ui/empty-state.js +5 -5
  140. package/dist/ui/empty.d.ts +2 -2
  141. package/dist/ui/empty.js +7 -7
  142. package/dist/ui/field.d.ts +2 -2
  143. package/dist/ui/field.js +12 -12
  144. package/dist/ui/form.d.ts +3 -3
  145. package/dist/ui/form.js +4 -4
  146. package/dist/ui/hover-card.d.ts +2 -2
  147. package/dist/ui/hover-card.js +2 -2
  148. package/dist/ui/input-group.d.ts +2 -2
  149. package/dist/ui/input-group.js +16 -16
  150. package/dist/ui/input-otp.d.ts +2 -2
  151. package/dist/ui/input-otp.js +4 -4
  152. package/dist/ui/input.js +1 -1
  153. package/dist/ui/label.d.ts +1 -1
  154. package/dist/ui/label.js +2 -2
  155. package/dist/ui/loading-button.js +8 -8
  156. package/dist/ui/map/index.d.ts +1 -1
  157. package/dist/ui/marketing/FeatureGrid.js +3 -3
  158. package/dist/ui/marketing/Hero.js +7 -7
  159. package/dist/ui/marketing/PricingTable.js +10 -10
  160. package/dist/ui/marketing/index.d.ts +1 -1
  161. package/dist/ui/menubar.d.ts +2 -2
  162. package/dist/ui/menubar.js +12 -12
  163. package/dist/ui/molecules/Autocomplete/index.js +26 -26
  164. package/dist/ui/molecules/SearchAndFilter/SearchAndFilter.js +62 -62
  165. package/dist/ui/molecules/SearchAndFilter/index.js +62 -62
  166. package/dist/ui/molecules/SkeletonList.js +1 -1
  167. package/dist/ui/nav-layout.d.ts +1 -1
  168. package/dist/ui/nav-layout.js +22 -22
  169. package/dist/ui/navigation-menu.d.ts +2 -2
  170. package/dist/ui/navigation-menu.js +7 -7
  171. package/dist/ui/organisms/ErrorBoundary/ErrorBoundary.js +11 -11
  172. package/dist/ui/organisms/ErrorBoundary/index.d.ts +1 -1
  173. package/dist/ui/organisms/ListPage/ListPage.js +84 -84
  174. package/dist/ui/organisms/ListPage/index.d.ts +1 -1
  175. package/dist/ui/organisms/ListPage/types.d.ts +1 -1
  176. package/dist/ui/page-header.d.ts +1 -1
  177. package/dist/ui/page-header.js +4 -4
  178. package/dist/ui/pagination.js +6 -6
  179. package/dist/ui/popover.d.ts +2 -2
  180. package/dist/ui/popover.js +2 -2
  181. package/dist/ui/progress.d.ts +1 -1
  182. package/dist/ui/progress.js +3 -3
  183. package/dist/ui/radio-group.d.ts +1 -1
  184. package/dist/ui/radio-group.js +3 -3
  185. package/dist/ui/resizable.d.ts +2 -2
  186. package/dist/ui/resizable.js +3 -3
  187. package/dist/ui/scroll-area.d.ts +1 -1
  188. package/dist/ui/scroll-area.js +4 -4
  189. package/dist/ui/section.d.ts +1 -1
  190. package/dist/ui/section.js +1 -1
  191. package/dist/ui/select.d.ts +1 -1
  192. package/dist/ui/select.js +6 -6
  193. package/dist/ui/separator.d.ts +1 -1
  194. package/dist/ui/separator.js +2 -2
  195. package/dist/ui/sheet.d.ts +2 -2
  196. package/dist/ui/sheet.js +5 -5
  197. package/dist/ui/sidebar.d.ts +1 -1
  198. package/dist/ui/sidebar.js +64 -64
  199. package/dist/ui/skeleton.js +1 -1
  200. package/dist/ui/slider.d.ts +1 -1
  201. package/dist/ui/slider.js +6 -6
  202. package/dist/ui/stack.d.ts +4 -4
  203. package/dist/ui/stack.js +1 -1
  204. package/dist/ui/stat-card-group.js +5 -5
  205. package/dist/ui/stepper.js +2 -2
  206. package/dist/ui/switch.d.ts +1 -1
  207. package/dist/ui/switch.js +3 -3
  208. package/dist/ui/table.d.ts +1 -1
  209. package/dist/ui/table.js +5 -5
  210. package/dist/ui/tabs.d.ts +2 -2
  211. package/dist/ui/tabs.js +3 -3
  212. package/dist/ui/text.js +2 -2
  213. package/dist/ui/textarea.js +1 -1
  214. package/dist/ui/time-picker.js +10 -10
  215. package/dist/ui/toast.d.ts +2 -2
  216. package/dist/ui/toast.js +5 -5
  217. package/dist/ui/toaster.js +5 -5
  218. package/dist/ui/toggle-group.d.ts +1 -1
  219. package/dist/ui/toggle-group.js +7 -7
  220. package/dist/ui/toggle.d.ts +1 -1
  221. package/dist/ui/toggle.js +5 -5
  222. package/dist/ui/tooltip.d.ts +2 -2
  223. package/dist/ui/tooltip.js +3 -3
  224. package/dist/ui/typography.js +14 -14
  225. package/dist/ui/use-toast.d.ts +1 -1
  226. package/dist/ui/usecases/UseCaseCard.js +8 -8
  227. package/dist/ui/usecases/UserStoryCard.js +3 -3
  228. package/dist/ui/visualization/Visualization.d.ts +9 -0
  229. package/dist/ui/visualization/Visualization.js +442 -0
  230. package/dist/ui/visualization/Visualization.support.d.ts +15 -0
  231. package/dist/ui/visualization/Visualization.support.js +123 -0
  232. package/dist/ui/visualization/index.d.ts +1 -0
  233. package/dist/ui/visualization/index.js +5 -0
  234. package/package.json +75 -12
@@ -0,0 +1,14 @@
1
+ import type { ContractTableColumnRenderModel, ContractTableController, ContractTableRowRenderModel } from '@contractspec/lib.presentation-runtime-core';
2
+ import * as React from 'react';
3
+ export declare function ColumnVisibilityMenu({ columns, }: {
4
+ columns: ContractTableController<unknown, React.ReactNode>['columns'];
5
+ }): import("react/jsx-runtime").JSX.Element | null;
6
+ export declare function PinMenu({ column, }: {
7
+ column: ContractTableColumnRenderModel<React.ReactNode>;
8
+ }): import("react/jsx-runtime").JSX.Element | null;
9
+ export declare function ResizeHandle({ column, }: {
10
+ column: ContractTableColumnRenderModel<React.ReactNode>;
11
+ }): import("react/jsx-runtime").JSX.Element;
12
+ export declare function renderHeaderContent<TItem>(controller: ContractTableController<TItem, React.ReactNode>, column: ContractTableColumnRenderModel<React.ReactNode>): string | number | bigint | boolean | Iterable<React.ReactNode> | Promise<string | number | bigint | boolean | React.ReactPortal | React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode> | null | undefined> | import("react/jsx-runtime").JSX.Element | null | undefined;
13
+ export declare function renderCellContent<TItem>(row: ContractTableRowRenderModel<TItem, React.ReactNode>, cell: ContractTableRowRenderModel<TItem, React.ReactNode>['cells'][number] | undefined): string | number | bigint | boolean | Iterable<React.ReactNode> | Promise<string | number | bigint | boolean | React.ReactPortal | React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode> | null | undefined> | import("react/jsx-runtime").JSX.Element | null | undefined;
14
+ export declare function stickyStyle(column: ContractTableColumnRenderModel<React.ReactNode>, isHeader?: boolean): React.CSSProperties;
@@ -0,0 +1,462 @@
1
+ // @bun
2
+ var __require = import.meta.require;
3
+
4
+ // ui/button.tsx
5
+ import { cn } from "@contractspec/lib.ui-kit-core/utils";
6
+ import { Slot } from "@radix-ui/react-slot";
7
+ import { cva } from "class-variance-authority";
8
+ import { jsxDEV } from "react/jsx-dev-runtime";
9
+ var buttonVariants = cva("inline-flex shrink-0 items-center justify-center gap-2 whitespace-nowrap rounded-md font-medium text-sm outline-hidden transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0", {
10
+ variants: {
11
+ variant: {
12
+ default: "bg-primary text-primary-foreground hover:bg-primary/90",
13
+ destructive: "bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40",
14
+ outline: "border bg-background shadow-2xs hover:bg-accent hover:text-accent-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",
15
+ secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80",
16
+ ghost: "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",
17
+ link: "text-primary underline-offset-4 hover:underline"
18
+ },
19
+ size: {
20
+ default: "h-9 px-4 py-2 has-[>svg]:px-3",
21
+ sm: "h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5",
22
+ lg: "h-10 rounded-md px-6 has-[>svg]:px-4",
23
+ icon: "size-9"
24
+ }
25
+ },
26
+ defaultVariants: {
27
+ variant: "default",
28
+ size: "default"
29
+ }
30
+ });
31
+ function Button({
32
+ className,
33
+ variant,
34
+ size,
35
+ asChild = false,
36
+ ref,
37
+ ...props
38
+ }) {
39
+ if (asChild) {
40
+ return /* @__PURE__ */ jsxDEV(Slot, {
41
+ "data-slot": "button",
42
+ className: cn(buttonVariants({ variant, size, className })),
43
+ ...props
44
+ }, undefined, false, undefined, this);
45
+ }
46
+ return /* @__PURE__ */ jsxDEV("button", {
47
+ ref,
48
+ "data-slot": "button",
49
+ className: cn(buttonVariants({ variant, size, className })),
50
+ ...props
51
+ }, undefined, false, undefined, this);
52
+ }
53
+ // ui/checkbox.tsx
54
+ import { cn as cn2 } from "@contractspec/lib.ui-kit-core/utils";
55
+ import * as CheckboxPrimitive from "@radix-ui/react-checkbox";
56
+ import { CheckIcon } from "lucide-react";
57
+ import { jsxDEV as jsxDEV2 } from "react/jsx-dev-runtime";
58
+ "use client";
59
+ function Checkbox({
60
+ className,
61
+ ...props
62
+ }) {
63
+ return /* @__PURE__ */ jsxDEV2(CheckboxPrimitive.Root, {
64
+ "data-slot": "checkbox",
65
+ className: cn2("peer size-4 shrink-0 rounded-[4px] border border-input shadow-xs outline-none transition-shadow focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[state=checked]:border-primary data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:bg-input/30 dark:data-[state=checked]:bg-primary dark:aria-invalid:ring-destructive/40", className),
66
+ ...props,
67
+ children: /* @__PURE__ */ jsxDEV2(CheckboxPrimitive.Indicator, {
68
+ "data-slot": "checkbox-indicator",
69
+ className: "grid place-content-center text-current transition-none",
70
+ children: /* @__PURE__ */ jsxDEV2(CheckIcon, {
71
+ className: "size-3.5"
72
+ }, undefined, false, undefined, this)
73
+ }, undefined, false, undefined, this)
74
+ }, undefined, false, undefined, this);
75
+ }
76
+ // ui/dropdown-menu.tsx
77
+ import { cn as cn3 } from "@contractspec/lib.ui-kit-core/utils";
78
+ import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu";
79
+ import { CheckIcon as CheckIcon2, ChevronRightIcon, CircleIcon } from "lucide-react";
80
+ import { jsxDEV as jsxDEV3 } from "react/jsx-dev-runtime";
81
+ "use client";
82
+ function DropdownMenu({
83
+ ...props
84
+ }) {
85
+ return /* @__PURE__ */ jsxDEV3(DropdownMenuPrimitive.Root, {
86
+ "data-slot": "dropdown-menu",
87
+ ...props
88
+ }, undefined, false, undefined, this);
89
+ }
90
+ function DropdownMenuPortal({
91
+ ...props
92
+ }) {
93
+ return /* @__PURE__ */ jsxDEV3(DropdownMenuPrimitive.Portal, {
94
+ "data-slot": "dropdown-menu-portal",
95
+ ...props
96
+ }, undefined, false, undefined, this);
97
+ }
98
+ function DropdownMenuTrigger({
99
+ ...props
100
+ }) {
101
+ return /* @__PURE__ */ jsxDEV3(DropdownMenuPrimitive.Trigger, {
102
+ "data-slot": "dropdown-menu-trigger",
103
+ ...props
104
+ }, undefined, false, undefined, this);
105
+ }
106
+ function DropdownMenuContent({
107
+ className,
108
+ sideOffset = 4,
109
+ ...props
110
+ }) {
111
+ return /* @__PURE__ */ jsxDEV3(DropdownMenuPrimitive.Portal, {
112
+ children: /* @__PURE__ */ jsxDEV3(DropdownMenuPrimitive.Content, {
113
+ "data-slot": "dropdown-menu-content",
114
+ sideOffset,
115
+ className: cn3("data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 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 z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-32 origin-(--radix-dropdown-menu-content-transform-origin) overflow-y-auto overflow-x-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[state=closed]:animate-out data-[state=open]:animate-in", className),
116
+ ...props
117
+ }, undefined, false, undefined, this)
118
+ }, undefined, false, undefined, this);
119
+ }
120
+ function DropdownMenuGroup({
121
+ ...props
122
+ }) {
123
+ return /* @__PURE__ */ jsxDEV3(DropdownMenuPrimitive.Group, {
124
+ "data-slot": "dropdown-menu-group",
125
+ ...props
126
+ }, undefined, false, undefined, this);
127
+ }
128
+ function DropdownMenuItem({
129
+ className,
130
+ inset,
131
+ variant = "default",
132
+ ...props
133
+ }) {
134
+ return /* @__PURE__ */ jsxDEV3(DropdownMenuPrimitive.Item, {
135
+ "data-slot": "dropdown-menu-item",
136
+ "data-inset": inset,
137
+ "data-variant": variant,
138
+ className: cn3("relative flex cursor-default select-none items-center gap-2 rounded-xs px-2 py-1.5 text-sm outline-hidden focus:bg-accent focus:text-accent-foreground data-disabled:pointer-events-none data-inset:pl-8 data-[variant=destructive]:text-destructive data-disabled:opacity-50 data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 data-[variant=destructive]:*:[svg]:text-destructive!", className),
139
+ ...props
140
+ }, undefined, false, undefined, this);
141
+ }
142
+ function DropdownMenuCheckboxItem({
143
+ className,
144
+ children,
145
+ checked,
146
+ ...props
147
+ }) {
148
+ return /* @__PURE__ */ jsxDEV3(DropdownMenuPrimitive.CheckboxItem, {
149
+ "data-slot": "dropdown-menu-checkbox-item",
150
+ className: cn3("relative flex cursor-default select-none items-center gap-2 rounded-xs py-1.5 pr-2 pl-8 text-sm outline-hidden focus:bg-accent focus:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0", className),
151
+ checked,
152
+ ...props,
153
+ children: [
154
+ /* @__PURE__ */ jsxDEV3("span", {
155
+ className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center",
156
+ children: /* @__PURE__ */ jsxDEV3(DropdownMenuPrimitive.ItemIndicator, {
157
+ children: /* @__PURE__ */ jsxDEV3(CheckIcon2, {
158
+ className: "size-4"
159
+ }, undefined, false, undefined, this)
160
+ }, undefined, false, undefined, this)
161
+ }, undefined, false, undefined, this),
162
+ children
163
+ ]
164
+ }, undefined, true, undefined, this);
165
+ }
166
+ function DropdownMenuRadioGroup({
167
+ ...props
168
+ }) {
169
+ return /* @__PURE__ */ jsxDEV3(DropdownMenuPrimitive.RadioGroup, {
170
+ "data-slot": "dropdown-menu-radio-group",
171
+ ...props
172
+ }, undefined, false, undefined, this);
173
+ }
174
+ function DropdownMenuRadioItem({
175
+ className,
176
+ children,
177
+ ...props
178
+ }) {
179
+ return /* @__PURE__ */ jsxDEV3(DropdownMenuPrimitive.RadioItem, {
180
+ "data-slot": "dropdown-menu-radio-item",
181
+ className: cn3("relative flex cursor-default select-none items-center gap-2 rounded-xs py-1.5 pr-2 pl-8 text-sm outline-hidden focus:bg-accent focus:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0", className),
182
+ ...props,
183
+ children: [
184
+ /* @__PURE__ */ jsxDEV3("span", {
185
+ className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center",
186
+ children: /* @__PURE__ */ jsxDEV3(DropdownMenuPrimitive.ItemIndicator, {
187
+ children: /* @__PURE__ */ jsxDEV3(CircleIcon, {
188
+ className: "size-2 fill-current"
189
+ }, undefined, false, undefined, this)
190
+ }, undefined, false, undefined, this)
191
+ }, undefined, false, undefined, this),
192
+ children
193
+ ]
194
+ }, undefined, true, undefined, this);
195
+ }
196
+ function DropdownMenuLabel({
197
+ className,
198
+ inset,
199
+ ...props
200
+ }) {
201
+ return /* @__PURE__ */ jsxDEV3(DropdownMenuPrimitive.Label, {
202
+ "data-slot": "dropdown-menu-label",
203
+ "data-inset": inset,
204
+ className: cn3("px-2 py-1.5 font-medium text-sm data-inset:pl-8", className),
205
+ ...props
206
+ }, undefined, false, undefined, this);
207
+ }
208
+ function DropdownMenuSeparator({
209
+ className,
210
+ ...props
211
+ }) {
212
+ return /* @__PURE__ */ jsxDEV3(DropdownMenuPrimitive.Separator, {
213
+ "data-slot": "dropdown-menu-separator",
214
+ className: cn3("-mx-1 my-1 h-px bg-border", className),
215
+ ...props
216
+ }, undefined, false, undefined, this);
217
+ }
218
+ function DropdownMenuShortcut({
219
+ className,
220
+ ...props
221
+ }) {
222
+ return /* @__PURE__ */ jsxDEV3("span", {
223
+ "data-slot": "dropdown-menu-shortcut",
224
+ className: cn3("ml-auto text-muted-foreground text-xs tracking-widest", className),
225
+ ...props
226
+ }, undefined, false, undefined, this);
227
+ }
228
+ function DropdownMenuSub({
229
+ ...props
230
+ }) {
231
+ return /* @__PURE__ */ jsxDEV3(DropdownMenuPrimitive.Sub, {
232
+ "data-slot": "dropdown-menu-sub",
233
+ ...props
234
+ }, undefined, false, undefined, this);
235
+ }
236
+ function DropdownMenuSubTrigger({
237
+ className,
238
+ inset,
239
+ children,
240
+ ...props
241
+ }) {
242
+ return /* @__PURE__ */ jsxDEV3(DropdownMenuPrimitive.SubTrigger, {
243
+ "data-slot": "dropdown-menu-sub-trigger",
244
+ "data-inset": inset,
245
+ className: cn3("flex cursor-default select-none items-center rounded-xs px-2 py-1.5 text-sm outline-hidden focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-inset:pl-8 data-[state=open]:text-accent-foreground", className),
246
+ ...props,
247
+ children: [
248
+ children,
249
+ /* @__PURE__ */ jsxDEV3(ChevronRightIcon, {
250
+ className: "ml-auto size-4"
251
+ }, undefined, false, undefined, this)
252
+ ]
253
+ }, undefined, true, undefined, this);
254
+ }
255
+ function DropdownMenuSubContent({
256
+ className,
257
+ ...props
258
+ }) {
259
+ return /* @__PURE__ */ jsxDEV3(DropdownMenuPrimitive.SubContent, {
260
+ "data-slot": "dropdown-menu-sub-content",
261
+ className: cn3("data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 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 z-50 min-w-32 origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=closed]:animate-out data-[state=open]:animate-in", className),
262
+ ...props
263
+ }, undefined, false, undefined, this);
264
+ }
265
+ // ui/data-table.parts.tsx
266
+ import {
267
+ ChevronDown,
268
+ ChevronRight,
269
+ Columns3,
270
+ GripVertical,
271
+ PanelLeft,
272
+ PanelRight,
273
+ PinOff
274
+ } from "lucide-react";
275
+ import * as React from "react";
276
+ import { jsxDEV as jsxDEV4 } from "react/jsx-dev-runtime";
277
+ "use client";
278
+ function ColumnVisibilityMenu({
279
+ columns
280
+ }) {
281
+ const hideableColumns = columns.filter((column) => column.canHide);
282
+ if (!hideableColumns.length)
283
+ return null;
284
+ return /* @__PURE__ */ jsxDEV4(DropdownMenu, {
285
+ children: [
286
+ /* @__PURE__ */ jsxDEV4(DropdownMenuTrigger, {
287
+ asChild: true,
288
+ children: /* @__PURE__ */ jsxDEV4(Button, {
289
+ variant: "outline",
290
+ size: "sm",
291
+ children: [
292
+ /* @__PURE__ */ jsxDEV4(Columns3, {
293
+ className: "h-4 w-4"
294
+ }, undefined, false, undefined, this),
295
+ "Columns"
296
+ ]
297
+ }, undefined, true, undefined, this)
298
+ }, undefined, false, undefined, this),
299
+ /* @__PURE__ */ jsxDEV4(DropdownMenuContent, {
300
+ align: "end",
301
+ children: [
302
+ /* @__PURE__ */ jsxDEV4(DropdownMenuLabel, {
303
+ children: "Visible Columns"
304
+ }, undefined, false, undefined, this),
305
+ /* @__PURE__ */ jsxDEV4(DropdownMenuSeparator, {}, undefined, false, undefined, this),
306
+ hideableColumns.map((column) => /* @__PURE__ */ jsxDEV4(DropdownMenuCheckboxItem, {
307
+ checked: column.visible,
308
+ onCheckedChange: (checked) => column.toggleVisibility?.(Boolean(checked)),
309
+ children: column.label
310
+ }, column.id, false, undefined, this))
311
+ ]
312
+ }, undefined, true, undefined, this)
313
+ ]
314
+ }, undefined, true, undefined, this);
315
+ }
316
+ function PinMenu({
317
+ column
318
+ }) {
319
+ if (!column.canPin)
320
+ return null;
321
+ return /* @__PURE__ */ jsxDEV4(DropdownMenu, {
322
+ children: [
323
+ /* @__PURE__ */ jsxDEV4(DropdownMenuTrigger, {
324
+ asChild: true,
325
+ children: /* @__PURE__ */ jsxDEV4(Button, {
326
+ variant: "ghost",
327
+ size: "icon",
328
+ className: "h-6 w-6",
329
+ onClick: (event) => event.stopPropagation(),
330
+ children: /* @__PURE__ */ jsxDEV4(Columns3, {
331
+ className: "h-3.5 w-3.5"
332
+ }, undefined, false, undefined, this)
333
+ }, undefined, false, undefined, this)
334
+ }, undefined, false, undefined, this),
335
+ /* @__PURE__ */ jsxDEV4(DropdownMenuContent, {
336
+ align: "start",
337
+ children: [
338
+ /* @__PURE__ */ jsxDEV4(DropdownMenuItem, {
339
+ onClick: () => column.pin?.("left"),
340
+ children: [
341
+ /* @__PURE__ */ jsxDEV4(PanelLeft, {
342
+ className: "h-4 w-4"
343
+ }, undefined, false, undefined, this),
344
+ "Pin Left"
345
+ ]
346
+ }, undefined, true, undefined, this),
347
+ /* @__PURE__ */ jsxDEV4(DropdownMenuItem, {
348
+ onClick: () => column.pin?.("right"),
349
+ children: [
350
+ /* @__PURE__ */ jsxDEV4(PanelRight, {
351
+ className: "h-4 w-4"
352
+ }, undefined, false, undefined, this),
353
+ "Pin Right"
354
+ ]
355
+ }, undefined, true, undefined, this),
356
+ /* @__PURE__ */ jsxDEV4(DropdownMenuItem, {
357
+ onClick: () => column.pin?.(false),
358
+ children: [
359
+ /* @__PURE__ */ jsxDEV4(PinOff, {
360
+ className: "h-4 w-4"
361
+ }, undefined, false, undefined, this),
362
+ "Unpin"
363
+ ]
364
+ }, undefined, true, undefined, this)
365
+ ]
366
+ }, undefined, true, undefined, this)
367
+ ]
368
+ }, undefined, true, undefined, this);
369
+ }
370
+ function ResizeHandle({
371
+ column
372
+ }) {
373
+ const lastX = React.useRef(null);
374
+ const onMouseDown = React.useCallback((event) => {
375
+ event.preventDefault();
376
+ event.stopPropagation();
377
+ lastX.current = event.clientX;
378
+ const onMouseMove = (moveEvent) => {
379
+ if (lastX.current == null)
380
+ return;
381
+ const delta = moveEvent.clientX - lastX.current;
382
+ lastX.current = moveEvent.clientX;
383
+ column.resizeBy?.(delta);
384
+ };
385
+ const onMouseUp = () => {
386
+ lastX.current = null;
387
+ window.removeEventListener("mousemove", onMouseMove);
388
+ window.removeEventListener("mouseup", onMouseUp);
389
+ };
390
+ window.addEventListener("mousemove", onMouseMove);
391
+ window.addEventListener("mouseup", onMouseUp);
392
+ }, [column]);
393
+ return /* @__PURE__ */ jsxDEV4("span", {
394
+ role: "separator",
395
+ "aria-label": `Resize ${column.label} column`,
396
+ "aria-orientation": "vertical",
397
+ tabIndex: -1,
398
+ className: "absolute inset-y-0 right-0 flex w-3 cursor-col-resize items-center justify-center",
399
+ onMouseDown,
400
+ children: /* @__PURE__ */ jsxDEV4(GripVertical, {
401
+ className: "h-3.5 w-3.5 text-muted-foreground"
402
+ }, undefined, false, undefined, this)
403
+ }, undefined, false, undefined, this);
404
+ }
405
+ function renderHeaderContent(controller, column) {
406
+ if (column.kind === "selection" && controller.selectionMode === "multiple") {
407
+ return /* @__PURE__ */ jsxDEV4(Checkbox, {
408
+ "aria-label": "Select all rows",
409
+ checked: controller.allRowsSelected || (controller.someRowsSelected ? "indeterminate" : false),
410
+ onCheckedChange: (checked) => controller.toggleAllRowsSelected?.(Boolean(checked)),
411
+ onClick: (event) => event.stopPropagation()
412
+ }, undefined, false, undefined, this);
413
+ }
414
+ if (column.kind === "expansion")
415
+ return null;
416
+ return column.header;
417
+ }
418
+ function renderCellContent(row, cell) {
419
+ if (!cell)
420
+ return null;
421
+ if (cell.kind === "selection") {
422
+ return /* @__PURE__ */ jsxDEV4(Checkbox, {
423
+ "aria-label": `Select row ${row.id}`,
424
+ checked: row.isSelected,
425
+ onCheckedChange: (checked) => row.toggleSelected?.(Boolean(checked))
426
+ }, undefined, false, undefined, this);
427
+ }
428
+ if (cell.kind === "expansion") {
429
+ return row.canExpand ? /* @__PURE__ */ jsxDEV4(Button, {
430
+ variant: "ghost",
431
+ size: "icon",
432
+ className: "h-7 w-7",
433
+ "aria-label": row.isExpanded ? `Collapse row ${row.id}` : `Expand row ${row.id}`,
434
+ onClick: () => row.toggleExpanded?.(),
435
+ children: row.isExpanded ? /* @__PURE__ */ jsxDEV4(ChevronDown, {
436
+ className: "h-4 w-4"
437
+ }, undefined, false, undefined, this) : /* @__PURE__ */ jsxDEV4(ChevronRight, {
438
+ className: "h-4 w-4"
439
+ }, undefined, false, undefined, this)
440
+ }, undefined, false, undefined, this) : null;
441
+ }
442
+ return cell.content;
443
+ }
444
+ function stickyStyle(column, isHeader = false) {
445
+ return {
446
+ width: column.size,
447
+ minWidth: column.size,
448
+ maxWidth: column.size,
449
+ left: column.pinState === "left" ? column.stickyOffset : undefined,
450
+ right: column.pinState === "right" ? column.stickyOffset : undefined,
451
+ position: column.pinState ? "sticky" : "relative",
452
+ zIndex: column.pinState ? isHeader ? 30 : 20 : undefined
453
+ };
454
+ }
455
+ export {
456
+ stickyStyle,
457
+ renderHeaderContent,
458
+ renderCellContent,
459
+ ResizeHandle,
460
+ PinMenu,
461
+ ColumnVisibilityMenu
462
+ };
@@ -2,23 +2,23 @@
2
2
  var __require = import.meta.require;
3
3
 
4
4
  // ui/button.tsx
5
+ import { cn } from "@contractspec/lib.ui-kit-core/utils";
5
6
  import { Slot } from "@radix-ui/react-slot";
6
7
  import { cva } from "class-variance-authority";
7
- import { cn } from "@contractspec/lib.ui-kit-core/utils";
8
8
  import { jsxDEV } from "react/jsx-dev-runtime";
9
- var buttonVariants = cva("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-hidden focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive", {
9
+ var buttonVariants = cva("inline-flex shrink-0 items-center justify-center gap-2 whitespace-nowrap rounded-md font-medium text-sm outline-hidden transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0", {
10
10
  variants: {
11
11
  variant: {
12
12
  default: "bg-primary text-primary-foreground hover:bg-primary/90",
13
- destructive: "bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",
14
- outline: "border bg-background shadow-2xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",
13
+ destructive: "bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40",
14
+ outline: "border bg-background shadow-2xs hover:bg-accent hover:text-accent-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",
15
15
  secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80",
16
16
  ghost: "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",
17
17
  link: "text-primary underline-offset-4 hover:underline"
18
18
  },
19
19
  size: {
20
20
  default: "h-9 px-4 py-2 has-[>svg]:px-3",
21
- sm: "h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",
21
+ sm: "h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5",
22
22
  lg: "h-10 rounded-md px-6 has-[>svg]:px-4",
23
23
  icon: "size-9"
24
24
  }
@@ -57,19 +57,19 @@ function Input({ className, type, ...props }) {
57
57
  return /* @__PURE__ */ jsxDEV2("input", {
58
58
  type,
59
59
  "data-slot": "input",
60
- className: cn2("file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm", "focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]", "aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive", className),
60
+ className: cn2("h-9 w-full min-w-0 rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-xs outline-none transition-[color,box-shadow] selection:bg-primary selection:text-primary-foreground file:inline-flex file:h-7 file:border-0 file:bg-transparent file:font-medium file:text-foreground file:text-sm placeholder:text-muted-foreground disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm dark:bg-input/30", "focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50", "aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40", className),
61
61
  ...props
62
62
  }, undefined, false, undefined, this);
63
63
  }
64
64
  // ui/calendar.tsx
65
- import * as React from "react";
65
+ import { cn as cn3 } from "@contractspec/lib.ui-kit-core/utils";
66
66
  import {
67
67
  ChevronDownIcon,
68
68
  ChevronLeftIcon,
69
69
  ChevronRightIcon
70
70
  } from "lucide-react";
71
+ import * as React from "react";
71
72
  import { DayPicker, getDefaultClassNames } from "react-day-picker";
72
- import { cn as cn3 } from "@contractspec/lib.ui-kit-core/utils";
73
73
  import { jsxDEV as jsxDEV3 } from "react/jsx-dev-runtime";
74
74
  "use client";
75
75
  function Calendar({
@@ -85,7 +85,7 @@ function Calendar({
85
85
  const defaultClassNames = getDefaultClassNames();
86
86
  return /* @__PURE__ */ jsxDEV3(DayPicker, {
87
87
  showOutsideDays,
88
- className: cn3("group/calendar bg-background p-3 [--cell-size:--spacing(8)] in-data-[slot=card-content]:bg-transparent in-data-[slot=popover-content]:bg-transparent", String.raw`rtl:**:[.rdp-button\_next>svg]:rotate-180`, String.raw`rtl:**:[.rdp-button\_previous>svg]:rotate-180`, className),
88
+ className: cn3("group/calendar bg-background in-data-[slot=card-content]:bg-transparent in-data-[slot=popover-content]:bg-transparent p-3 [--cell-size:--spacing(8)]", String.raw`rtl:**:[.rdp-button\_next>svg]:rotate-180`, String.raw`rtl:**:[.rdp-button\_previous>svg]:rotate-180`, className),
89
89
  captionLayout,
90
90
  formatters: {
91
91
  formatMonthDropdown: (date) => date.toLocaleString("default", { month: "short" }),
@@ -96,24 +96,24 @@ function Calendar({
96
96
  months: cn3("relative flex flex-col gap-4 md:flex-row", defaultClassNames.months),
97
97
  month: cn3("flex w-full flex-col gap-4", defaultClassNames.month),
98
98
  nav: cn3("absolute inset-x-0 top-0 flex w-full items-center justify-between gap-1", defaultClassNames.nav),
99
- button_previous: cn3(buttonVariants({ variant: buttonVariant }), "size-(--cell-size) p-0 select-none aria-disabled:opacity-50", defaultClassNames.button_previous),
100
- button_next: cn3(buttonVariants({ variant: buttonVariant }), "size-(--cell-size) p-0 select-none aria-disabled:opacity-50", defaultClassNames.button_next),
99
+ button_previous: cn3(buttonVariants({ variant: buttonVariant }), "size-(--cell-size) select-none p-0 aria-disabled:opacity-50", defaultClassNames.button_previous),
100
+ button_next: cn3(buttonVariants({ variant: buttonVariant }), "size-(--cell-size) select-none p-0 aria-disabled:opacity-50", defaultClassNames.button_next),
101
101
  month_caption: cn3("flex h-(--cell-size) w-full items-center justify-center px-(--cell-size)", defaultClassNames.month_caption),
102
- dropdowns: cn3("flex h-(--cell-size) w-full items-center justify-center gap-1.5 text-sm font-medium", defaultClassNames.dropdowns),
103
- dropdown_root: cn3("has-focus:border-ring has-focus:ring-ring/50 border-input relative rounded-md border shadow-2xs has-focus:ring-[3px]", defaultClassNames.dropdown_root),
104
- dropdown: cn3("bg-popover absolute inset-0 opacity-0", defaultClassNames.dropdown),
105
- caption_label: cn3("font-medium select-none", captionLayout === "label" ? "text-sm" : "[&>svg]:text-muted-foreground flex h-8 items-center gap-1 rounded-md pr-1 pl-2 text-sm [&>svg]:size-3.5", defaultClassNames.caption_label),
102
+ dropdowns: cn3("flex h-(--cell-size) w-full items-center justify-center gap-1.5 font-medium text-sm", defaultClassNames.dropdowns),
103
+ dropdown_root: cn3("relative rounded-md border border-input shadow-2xs has-focus:border-ring has-focus:ring-[3px] has-focus:ring-ring/50", defaultClassNames.dropdown_root),
104
+ dropdown: cn3("absolute inset-0 bg-popover opacity-0", defaultClassNames.dropdown),
105
+ caption_label: cn3("select-none font-medium", captionLayout === "label" ? "text-sm" : "flex h-8 items-center gap-1 rounded-md pr-1 pl-2 text-sm [&>svg]:size-3.5 [&>svg]:text-muted-foreground", defaultClassNames.caption_label),
106
106
  table: "w-full border-collapse",
107
107
  weekdays: cn3("flex", defaultClassNames.weekdays),
108
- weekday: cn3("text-muted-foreground flex-1 rounded-md text-[0.8rem] font-normal select-none", defaultClassNames.weekday),
108
+ weekday: cn3("flex-1 select-none rounded-md font-normal text-[0.8rem] text-muted-foreground", defaultClassNames.weekday),
109
109
  week: cn3("mt-2 flex w-full", defaultClassNames.week),
110
110
  week_number_header: cn3("w-(--cell-size) select-none", defaultClassNames.week_number_header),
111
- week_number: cn3("text-muted-foreground text-[0.8rem] select-none", defaultClassNames.week_number),
112
- day: cn3("group/day relative aspect-square h-full w-full p-0 text-center select-none [&:first-child[data-selected=true]_button]:rounded-l-md [&:last-child[data-selected=true]_button]:rounded-r-md", defaultClassNames.day),
113
- range_start: cn3("bg-accent rounded-l-md", defaultClassNames.range_start),
111
+ week_number: cn3("select-none text-[0.8rem] text-muted-foreground", defaultClassNames.week_number),
112
+ day: cn3("group/day relative aspect-square h-full w-full select-none p-0 text-center [&:first-child[data-selected=true]_button]:rounded-l-md [&:last-child[data-selected=true]_button]:rounded-r-md", defaultClassNames.day),
113
+ range_start: cn3("rounded-l-md bg-accent", defaultClassNames.range_start),
114
114
  range_middle: cn3("rounded-none", defaultClassNames.range_middle),
115
- range_end: cn3("bg-accent rounded-r-md", defaultClassNames.range_end),
116
- today: cn3("bg-accent text-accent-foreground rounded-md data-[selected=true]:rounded-none", defaultClassNames.today),
115
+ range_end: cn3("rounded-r-md bg-accent", defaultClassNames.range_end),
116
+ today: cn3("rounded-md bg-accent text-accent-foreground data-[selected=true]:rounded-none", defaultClassNames.today),
117
117
  outside: cn3("text-muted-foreground aria-selected:text-muted-foreground", defaultClassNames.outside),
118
118
  disabled: cn3("text-muted-foreground opacity-50", defaultClassNames.disabled),
119
119
  hidden: cn3("invisible", defaultClassNames.hidden),
@@ -182,13 +182,13 @@ function CalendarDayButton({
182
182
  "data-range-start": modifiers.range_start,
183
183
  "data-range-end": modifiers.range_end,
184
184
  "data-range-middle": modifiers.range_middle,
185
- className: cn3("data-[range-end=true]:bg-primary data-[range-middle=true]:bg-accent data-[range-start=true]:bg-primary data-[selected-single=true]:bg-primary data-[range-end=true]:text-primary-foreground data-[range-middle=true]:text-accent-foreground data-[range-start=true]:text-primary-foreground data-[selected-single=true]:text-primary-foreground group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-ring/50 dark:hover:text-accent-foreground flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 leading-none font-normal group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:ring-[3px] data-[range-end=true]:rounded-md data-[range-end=true]:rounded-r-md data-[range-middle=true]:rounded-none data-[range-start=true]:rounded-md data-[range-start=true]:rounded-l-md [&>span]:text-xs [&>span]:opacity-70", defaultClassNames.day, className),
185
+ className: cn3("flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 font-normal leading-none data-[range-end=true]:rounded-md data-[range-middle=true]:rounded-none data-[range-start=true]:rounded-md data-[range-end=true]:rounded-r-md data-[range-start=true]:rounded-l-md data-[range-end=true]:bg-primary data-[range-middle=true]:bg-accent data-[range-start=true]:bg-primary data-[selected-single=true]:bg-primary data-[range-end=true]:text-primary-foreground data-[range-middle=true]:text-accent-foreground data-[range-start=true]:text-primary-foreground data-[selected-single=true]:text-primary-foreground group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-[3px] group-data-[focused=true]/day:ring-ring/50 dark:hover:text-accent-foreground [&>span]:text-xs [&>span]:opacity-70", defaultClassNames.day, className),
186
186
  ...props
187
187
  }, undefined, false, undefined, this);
188
188
  }
189
189
  // ui/popover.tsx
190
- import * as PopoverPrimitive from "@radix-ui/react-popover";
191
190
  import { cn as cn4 } from "@contractspec/lib.ui-kit-core/utils";
191
+ import * as PopoverPrimitive from "@radix-ui/react-popover";
192
192
  import { jsxDEV as jsxDEV4 } from "react/jsx-dev-runtime";
193
193
  "use client";
194
194
  function Popover({
@@ -218,7 +218,7 @@ function PopoverContent({
218
218
  "data-slot": "popover-content",
219
219
  align,
220
220
  sideOffset,
221
- className: cn4("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 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 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden", className),
221
+ className: cn4("data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 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 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-hidden data-[state=closed]:animate-out data-[state=open]:animate-in", className),
222
222
  ...props
223
223
  }, undefined, false, undefined, this)
224
224
  }, undefined, false, undefined, this);
@@ -232,9 +232,9 @@ function PopoverAnchor({
232
232
  }, undefined, false, undefined, this);
233
233
  }
234
234
  // ui/date-picker.tsx
235
- import * as React2 from "react";
236
- import { CalendarIcon } from "lucide-react";
237
235
  import { cn as cn5 } from "@contractspec/lib.ui-kit-core/utils";
236
+ import { CalendarIcon } from "lucide-react";
237
+ import * as React2 from "react";
238
238
  import { jsxDEV as jsxDEV5 } from "react/jsx-dev-runtime";
239
239
  "use client";
240
240
  function DatePicker({