@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
package/README.md CHANGED
@@ -1,109 +1,54 @@
1
1
  # @contractspec/lib.ui-kit-web
2
2
 
3
- Website: https://contractspec.io/
3
+ Website: https://contractspec.io
4
4
 
5
+ **Web UI components built on Radix primitives with design-system token integration.**
5
6
 
6
- Web-specific UI components and primitives for Next.js/React applications, built on top of Radix UI and Tailwind CSS.
7
+ ## What It Provides
7
8
 
8
- ## Purpose
9
-
10
- To provide a comprehensive set of accessible, high-performance UI components specifically optimized for the modern web. While `@contractspec/lib.ui-kit` focuses on universal (native + web) compatibility, this library leverages web-only capabilities like portals, heavy data tables, and mapping libraries.
9
+ - **Layer**: lib
10
+ - **Consumers**: design-system, example-shared-ui, presentation-runtime-react, bundles
11
11
 
12
12
  ## Installation
13
13
 
14
- ```bash
15
- npm install @contractspec/lib.ui-kit-web
16
- # or
17
- bun add @contractspec/lib.ui-kit-web
18
- ```
19
-
20
- ## Key Concepts
21
-
22
- - **Radix UI Primitives**: Most components are unstyled accessible wrappers around Radix UI.
23
- - **Shadcn UI Compatible**: Structure and styling closely follow the popular shadcn/ui patterns, making it easy to adopt and extend.
24
- - **Web Optimizations**: Includes `SkipLink`, `VisuallyHidden`, and `LiveRegion` for WCAG compliance.
25
- - **Mapping**: Integrated `maplibre-gl` components for geo-spatial visualizations.
26
-
27
- ## Exports
28
-
29
- ### Core UI
14
+ `npm install @contractspec/lib.ui-kit-web`
30
15
 
31
- - Standard Radix wrappers: `accordion`, `dialog`, `dropdown-menu`, `popover`, `tabs`, etc.
32
- - Forms: `input`, `select`, `checkbox`, `switch`, `slider`, `radio-group`.
33
- - Feedback: `toast`, `alert`, `progress`, `skeleton`.
16
+ or
34
17
 
35
- ### Web Specifics
36
-
37
- - `ui/map/*`: `MapBase`, `MapGeoJsonOverlay`, `MapHeatmapH3`, `MapMarkers`.
38
- - `ui/resizable`: Resizable panel layouts.
39
- - `ui/scroll-area`: Custom cross-browser scrollbars.
40
- - `ui/sonner`: High-performance toast notifications.
41
-
42
- ### Accessibility
43
-
44
- - `ui/skip-link`: For keyboard navigation users.
45
- - `ui/visually-hidden`: For screen-reader only content.
46
- - `ui/live-region`: Announce dynamic changes.
47
- - `ui/route-announcer`: Announce page changes in SPAs.
18
+ `bun add @contractspec/lib.ui-kit-web`
48
19
 
49
20
  ## Usage
50
21
 
51
- ```tsx
52
- import { Button } from '@contractspec/lib.ui-kit-web/ui/button';
53
- import {
54
- Dialog,
55
- DialogContent,
56
- DialogTrigger,
57
- } from '@contractspec/lib.ui-kit-web/ui/dialog';
58
- import { Input } from '@contractspec/lib.ui-kit-web/ui/input';
59
-
60
- export function LoginModal() {
61
- return (
62
- <Dialog>
63
- <DialogTrigger asChild>
64
- <Button variant="outline">Login</Button>
65
- </DialogTrigger>
66
- <DialogContent className="sm:max-w-[425px]">
67
- <div className="grid gap-4 py-4">
68
- <Input id="email" placeholder="Email" />
69
- <Button type="submit">Sign in</Button>
70
- </div>
71
- </DialogContent>
72
- </Dialog>
73
- );
74
- }
75
- ```
76
-
77
-
78
-
79
-
80
-
81
-
82
-
83
-
84
-
85
-
86
-
87
-
88
-
89
-
90
-
91
-
92
-
93
-
94
-
95
-
96
-
97
-
98
-
99
-
100
-
101
-
22
+ Import the root entrypoint from `@contractspec/lib.ui-kit-web`, or use one of the documented subpaths when you want a narrower surface area.
102
23
 
24
+ ## Public Entry Points
103
25
 
26
+ - `.` — main entry
27
+ - `./ui/*` — individual component exports (many components)
104
28
 
29
+ ## Local Commands
105
30
 
31
+ - `bun run dev` — contractspec-bun-build dev
32
+ - `bun run build` — bun run prebuild && bun run build:bundle && bun run build:types
33
+ - `bun run test` — jest --passWithNoTests
34
+ - `bun run lint` — bun run lint:fix
35
+ - `bun run lint:check` — biome check .
36
+ - `bun run lint:fix` — biome check --write --unsafe --only=nursery/useSortedClasses . && biome check --write .
37
+ - `bun run typecheck` — tsc --noEmit
38
+ - `bun run publish:pkg` — bun publish --tolerate-republish --ignore-scripts --verbose
39
+ - `bun run publish:pkg:canary` — bun publish:pkg --tag canary
40
+ - `bun run clean` — rm -rf dist
41
+ - `bun run build:bundle` — contractspec-bun-build transpile
42
+ - `bun run build:types` — contractspec-bun-build types
106
43
 
44
+ ## Recent Updates
107
45
 
46
+ - Missing dependencies (thanks to knip)
47
+ - Replace eslint+prettier by biomejs to optimize speed
48
+ - Add data visualization capabilities
108
49
 
50
+ ## Notes
109
51
 
52
+ - Radix primitive wrappers must stay accessible (ARIA, keyboard nav)
53
+ - Component API must align with design-system tokens
54
+ - Do not bypass Radix for custom implementations without justification
@@ -7,9 +7,9 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
7
7
  });
8
8
 
9
9
  // ui/accordion.tsx
10
+ import { cn } from "@contractspec/lib.ui-kit-core/utils";
10
11
  import * as AccordionPrimitive from "@radix-ui/react-accordion";
11
12
  import { ChevronDownIcon } from "lucide-react";
12
- import { cn } from "@contractspec/lib.ui-kit-core/utils";
13
13
  import { jsxDEV } from "react/jsx-dev-runtime";
14
14
  "use client";
15
15
  function Accordion({
@@ -39,12 +39,12 @@ function AccordionTrigger({
39
39
  className: "flex",
40
40
  children: /* @__PURE__ */ jsxDEV(AccordionPrimitive.Trigger, {
41
41
  "data-slot": "accordion-trigger",
42
- className: cn("focus-visible:border-ring focus-visible:ring-ring/50 flex flex-1 items-start justify-between gap-4 rounded-md py-4 text-left text-sm font-medium outline-hidden transition-all hover:underline focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&[data-state=open]>svg]:rotate-180", className),
42
+ className: cn("flex flex-1 items-start justify-between gap-4 rounded-md py-4 text-left font-medium text-sm outline-hidden transition-all hover:underline focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 [&[data-state=open]>svg]:rotate-180", className),
43
43
  ...props,
44
44
  children: [
45
45
  children,
46
46
  /* @__PURE__ */ jsxDEV(ChevronDownIcon, {
47
- className: "text-muted-foreground pointer-events-none size-4 shrink-0 translate-y-0.5 transition-transform duration-200"
47
+ className: "pointer-events-none size-4 shrink-0 translate-y-0.5 text-muted-foreground transition-transform duration-200"
48
48
  }, undefined, false, undefined, this)
49
49
  ]
50
50
  }, undefined, true, undefined, this)
@@ -57,7 +57,7 @@ function AccordionContent({
57
57
  }) {
58
58
  return /* @__PURE__ */ jsxDEV(AccordionPrimitive.Content, {
59
59
  "data-slot": "accordion-content",
60
- className: "data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm",
60
+ className: "overflow-hidden text-sm data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down",
61
61
  ...props,
62
62
  children: /* @__PURE__ */ jsxDEV("div", {
63
63
  className: cn("pt-0 pb-4", className),
@@ -7,23 +7,23 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
7
7
  });
8
8
 
9
9
  // ui/button.tsx
10
+ import { cn } from "@contractspec/lib.ui-kit-core/utils";
10
11
  import { Slot } from "@radix-ui/react-slot";
11
12
  import { cva } from "class-variance-authority";
12
- import { cn } from "@contractspec/lib.ui-kit-core/utils";
13
13
  import { jsxDEV } from "react/jsx-dev-runtime";
14
- 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", {
14
+ 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", {
15
15
  variants: {
16
16
  variant: {
17
17
  default: "bg-primary text-primary-foreground hover:bg-primary/90",
18
- destructive: "bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",
19
- 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",
18
+ destructive: "bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40",
19
+ 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",
20
20
  secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80",
21
21
  ghost: "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",
22
22
  link: "text-primary underline-offset-4 hover:underline"
23
23
  },
24
24
  size: {
25
25
  default: "h-9 px-4 py-2 has-[>svg]:px-3",
26
- sm: "h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",
26
+ sm: "h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5",
27
27
  lg: "h-10 rounded-md px-6 has-[>svg]:px-4",
28
28
  icon: "size-9"
29
29
  }
@@ -56,8 +56,8 @@ function Button({
56
56
  }, undefined, false, undefined, this);
57
57
  }
58
58
  // ui/alert-dialog.tsx
59
- import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog";
60
59
  import { cn as cn2 } from "@contractspec/lib.ui-kit-core/utils";
60
+ import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog";
61
61
  import { jsxDEV as jsxDEV2 } from "react/jsx-dev-runtime";
62
62
  "use client";
63
63
  function AlertDialog({
@@ -90,7 +90,7 @@ function AlertDialogOverlay({
90
90
  }) {
91
91
  return /* @__PURE__ */ jsxDEV2(AlertDialogPrimitive.Overlay, {
92
92
  "data-slot": "alert-dialog-overlay",
93
- className: cn2("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50", className),
93
+ className: cn2("data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50 data-[state=closed]:animate-out data-[state=open]:animate-in", className),
94
94
  ...props
95
95
  }, undefined, false, undefined, this);
96
96
  }
@@ -103,7 +103,7 @@ function AlertDialogContent({
103
103
  /* @__PURE__ */ jsxDEV2(AlertDialogOverlay, {}, undefined, false, undefined, this),
104
104
  /* @__PURE__ */ jsxDEV2(AlertDialogPrimitive.Content, {
105
105
  "data-slot": "alert-dialog-content",
106
- className: cn2("bg-background 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 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg", className),
106
+ className: cn2("data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border bg-background p-6 shadow-lg duration-200 data-[state=closed]:animate-out data-[state=open]:animate-in sm:max-w-lg", className),
107
107
  ...props
108
108
  }, undefined, false, undefined, this)
109
109
  ]
@@ -135,7 +135,7 @@ function AlertDialogTitle({
135
135
  }) {
136
136
  return /* @__PURE__ */ jsxDEV2(AlertDialogPrimitive.Title, {
137
137
  "data-slot": "alert-dialog-title",
138
- className: cn2("text-lg font-semibold", className),
138
+ className: cn2("font-semibold text-lg", className),
139
139
  ...props
140
140
  }, undefined, false, undefined, this);
141
141
  }
@@ -7,14 +7,14 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
7
7
  });
8
8
 
9
9
  // ui/alert.tsx
10
- import { cva } from "class-variance-authority";
11
10
  import { cn } from "@contractspec/lib.ui-kit-core/utils";
11
+ import { cva } from "class-variance-authority";
12
12
  import { jsxDEV } from "react/jsx-dev-runtime";
13
- var alertVariants = cva("relative w-full rounded-lg border px-4 py-3 text-sm grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current", {
13
+ var alertVariants = cva("relative grid w-full grid-cols-[0_1fr] items-start gap-y-0.5 rounded-lg border px-4 py-3 text-sm has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] has-[>svg]:gap-x-3 [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current", {
14
14
  variants: {
15
15
  variant: {
16
16
  default: "bg-card text-card-foreground",
17
- destructive: "text-destructive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90"
17
+ destructive: "bg-card text-destructive *:data-[slot=alert-description]:text-destructive/90 [&>svg]:text-current"
18
18
  }
19
19
  },
20
20
  defaultVariants: {
@@ -49,7 +49,7 @@ function AlertDescription({
49
49
  }) {
50
50
  return /* @__PURE__ */ jsxDEV("div", {
51
51
  "data-slot": "alert-description",
52
- className: cn("text-muted-foreground col-start-2 grid justify-items-start gap-1 text-sm [&_p]:leading-relaxed", className),
52
+ className: cn("col-start-2 grid justify-items-start gap-1 text-muted-foreground text-sm [&_p]:leading-relaxed", className),
53
53
  ...props
54
54
  }, undefined, false, undefined, this);
55
55
  }
@@ -6,16 +6,31 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
6
6
  throw Error('Dynamic require of "' + x + '" is not supported');
7
7
  });
8
8
 
9
+ // ui/label.tsx
10
+ import { cn } from "@contractspec/lib.ui-kit-core/utils";
11
+ import * as LabelPrimitive from "@radix-ui/react-label";
12
+ import { jsxDEV } from "react/jsx-dev-runtime";
13
+ "use client";
14
+ function Label({
15
+ className,
16
+ ...props
17
+ }) {
18
+ return /* @__PURE__ */ jsxDEV(LabelPrimitive.Root, {
19
+ "data-slot": "label",
20
+ className: cn("flex select-none items-center gap-2 font-medium text-sm leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-50 group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50", className),
21
+ ...props
22
+ }, undefined, false, undefined, this);
23
+ }
9
24
  // ui/select.tsx
25
+ import { cn as cn2 } from "@contractspec/lib.ui-kit-core/utils";
10
26
  import * as SelectPrimitive from "@radix-ui/react-select";
11
27
  import { CheckIcon, ChevronDownIcon, ChevronUpIcon } from "lucide-react";
12
- import { cn } from "@contractspec/lib.ui-kit-core/utils";
13
- import { jsxDEV } from "react/jsx-dev-runtime";
28
+ import { jsxDEV as jsxDEV2 } from "react/jsx-dev-runtime";
14
29
  "use client";
15
30
  function Select({
16
31
  ...props
17
32
  }) {
18
- return /* @__PURE__ */ jsxDEV(SelectPrimitive.Root, {
33
+ return /* @__PURE__ */ jsxDEV2(SelectPrimitive.Root, {
19
34
  "data-slot": "select",
20
35
  ...props
21
36
  }, undefined, false, undefined, this);
@@ -23,7 +38,7 @@ function Select({
23
38
  function SelectGroup({
24
39
  ...props
25
40
  }) {
26
- return /* @__PURE__ */ jsxDEV(SelectPrimitive.Group, {
41
+ return /* @__PURE__ */ jsxDEV2(SelectPrimitive.Group, {
27
42
  "data-slot": "select-group",
28
43
  ...props
29
44
  }, undefined, false, undefined, this);
@@ -31,7 +46,7 @@ function SelectGroup({
31
46
  function SelectValue({
32
47
  ...props
33
48
  }) {
34
- return /* @__PURE__ */ jsxDEV(SelectPrimitive.Value, {
49
+ return /* @__PURE__ */ jsxDEV2(SelectPrimitive.Value, {
35
50
  "data-slot": "select-value",
36
51
  ...props
37
52
  }, undefined, false, undefined, this);
@@ -42,16 +57,16 @@ function SelectTrigger({
42
57
  children,
43
58
  ...props
44
59
  }) {
45
- return /* @__PURE__ */ jsxDEV(SelectPrimitive.Trigger, {
60
+ return /* @__PURE__ */ jsxDEV2(SelectPrimitive.Trigger, {
46
61
  "data-slot": "select-trigger",
47
62
  "data-size": size,
48
- className: cn("aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive border-input focus-visible:border-ring focus-visible:ring-ring/50 data-placeholder:text-muted-foreground dark:bg-input/30 dark:hover:bg-input/50 [&_svg:not([class*='text-'])]:text-muted-foreground flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-2xs outline-hidden transition-[color,box-shadow] focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className),
63
+ className: cn2("flex w-fit items-center justify-between gap-2 whitespace-nowrap rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-2xs outline-hidden transition-[color,box-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-[size=default]:h-9 data-[size=sm]:h-8 data-placeholder:text-muted-foreground *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 dark:bg-input/30 dark:aria-invalid:ring-destructive/40 dark:hover:bg-input/50 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0", className),
49
64
  ...props,
50
65
  children: [
51
66
  children,
52
- /* @__PURE__ */ jsxDEV(SelectPrimitive.Icon, {
67
+ /* @__PURE__ */ jsxDEV2(SelectPrimitive.Icon, {
53
68
  asChild: true,
54
- children: /* @__PURE__ */ jsxDEV(ChevronDownIcon, {
69
+ children: /* @__PURE__ */ jsxDEV2(ChevronDownIcon, {
55
70
  className: "size-4 opacity-50"
56
71
  }, undefined, false, undefined, this)
57
72
  }, undefined, false, undefined, this)
@@ -64,19 +79,19 @@ function SelectContent({
64
79
  position = "popper",
65
80
  ...props
66
81
  }) {
67
- return /* @__PURE__ */ jsxDEV(SelectPrimitive.Portal, {
68
- children: /* @__PURE__ */ jsxDEV(SelectPrimitive.Content, {
82
+ return /* @__PURE__ */ jsxDEV2(SelectPrimitive.Portal, {
83
+ children: /* @__PURE__ */ jsxDEV2(SelectPrimitive.Content, {
69
84
  "data-slot": "select-content",
70
- className: cn("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 relative z-50 max-h-(--radix-select-content-available-height) min-w-32 origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md", position === "popper" && "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1", className),
85
+ className: cn2("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 relative z-50 max-h-(--radix-select-content-available-height) min-w-32 origin-(--radix-select-content-transform-origin) overflow-y-auto overflow-x-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=closed]:animate-out data-[state=open]:animate-in", position === "popper" && "data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=bottom]:translate-y-1 data-[side=top]:-translate-y-1", className),
71
86
  position,
72
87
  ...props,
73
88
  children: [
74
- /* @__PURE__ */ jsxDEV(SelectScrollUpButton, {}, undefined, false, undefined, this),
75
- /* @__PURE__ */ jsxDEV(SelectPrimitive.Viewport, {
76
- className: cn("p-1", position === "popper" && "h-(--radix-select-trigger-height) w-full min-w-(--radix-select-trigger-width) scroll-my-1"),
89
+ /* @__PURE__ */ jsxDEV2(SelectScrollUpButton, {}, undefined, false, undefined, this),
90
+ /* @__PURE__ */ jsxDEV2(SelectPrimitive.Viewport, {
91
+ className: cn2("p-1", position === "popper" && "h-(--radix-select-trigger-height) w-full min-w-(--radix-select-trigger-width) scroll-my-1"),
77
92
  children
78
93
  }, undefined, false, undefined, this),
79
- /* @__PURE__ */ jsxDEV(SelectScrollDownButton, {}, undefined, false, undefined, this)
94
+ /* @__PURE__ */ jsxDEV2(SelectScrollDownButton, {}, undefined, false, undefined, this)
80
95
  ]
81
96
  }, undefined, true, undefined, this)
82
97
  }, undefined, false, undefined, this);
@@ -85,9 +100,9 @@ function SelectLabel({
85
100
  className,
86
101
  ...props
87
102
  }) {
88
- return /* @__PURE__ */ jsxDEV(SelectPrimitive.Label, {
103
+ return /* @__PURE__ */ jsxDEV2(SelectPrimitive.Label, {
89
104
  "data-slot": "select-label",
90
- className: cn("text-muted-foreground px-2 py-1.5 text-xs", className),
105
+ className: cn2("px-2 py-1.5 text-muted-foreground text-xs", className),
91
106
  ...props
92
107
  }, undefined, false, undefined, this);
93
108
  }
@@ -96,20 +111,20 @@ function SelectItem({
96
111
  children,
97
112
  ...props
98
113
  }) {
99
- return /* @__PURE__ */ jsxDEV(SelectPrimitive.Item, {
114
+ return /* @__PURE__ */ jsxDEV2(SelectPrimitive.Item, {
100
115
  "data-slot": "select-item",
101
- className: cn("focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-xs py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2", className),
116
+ className: cn2("relative flex w-full cursor-default select-none items-center gap-2 rounded-xs py-1.5 pr-8 pl-2 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:not([class*='text-'])]:text-muted-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2", className),
102
117
  ...props,
103
118
  children: [
104
- /* @__PURE__ */ jsxDEV("span", {
119
+ /* @__PURE__ */ jsxDEV2("span", {
105
120
  className: "absolute right-2 flex size-3.5 items-center justify-center",
106
- children: /* @__PURE__ */ jsxDEV(SelectPrimitive.ItemIndicator, {
107
- children: /* @__PURE__ */ jsxDEV(CheckIcon, {
121
+ children: /* @__PURE__ */ jsxDEV2(SelectPrimitive.ItemIndicator, {
122
+ children: /* @__PURE__ */ jsxDEV2(CheckIcon, {
108
123
  className: "size-4"
109
124
  }, undefined, false, undefined, this)
110
125
  }, undefined, false, undefined, this)
111
126
  }, undefined, false, undefined, this),
112
- /* @__PURE__ */ jsxDEV(SelectPrimitive.ItemText, {
127
+ /* @__PURE__ */ jsxDEV2(SelectPrimitive.ItemText, {
113
128
  children
114
129
  }, undefined, false, undefined, this)
115
130
  ]
@@ -119,9 +134,9 @@ function SelectSeparator({
119
134
  className,
120
135
  ...props
121
136
  }) {
122
- return /* @__PURE__ */ jsxDEV(SelectPrimitive.Separator, {
137
+ return /* @__PURE__ */ jsxDEV2(SelectPrimitive.Separator, {
123
138
  "data-slot": "select-separator",
124
- className: cn("bg-border pointer-events-none -mx-1 my-1 h-px", className),
139
+ className: cn2("pointer-events-none -mx-1 my-1 h-px bg-border", className),
125
140
  ...props
126
141
  }, undefined, false, undefined, this);
127
142
  }
@@ -129,11 +144,11 @@ function SelectScrollUpButton({
129
144
  className,
130
145
  ...props
131
146
  }) {
132
- return /* @__PURE__ */ jsxDEV(SelectPrimitive.ScrollUpButton, {
147
+ return /* @__PURE__ */ jsxDEV2(SelectPrimitive.ScrollUpButton, {
133
148
  "data-slot": "select-scroll-up-button",
134
- className: cn("flex cursor-default items-center justify-center py-1", className),
149
+ className: cn2("flex cursor-default items-center justify-center py-1", className),
135
150
  ...props,
136
- children: /* @__PURE__ */ jsxDEV(ChevronUpIcon, {
151
+ children: /* @__PURE__ */ jsxDEV2(ChevronUpIcon, {
137
152
  className: "size-4"
138
153
  }, undefined, false, undefined, this)
139
154
  }, undefined, false, undefined, this);
@@ -142,30 +157,15 @@ function SelectScrollDownButton({
142
157
  className,
143
158
  ...props
144
159
  }) {
145
- return /* @__PURE__ */ jsxDEV(SelectPrimitive.ScrollDownButton, {
160
+ return /* @__PURE__ */ jsxDEV2(SelectPrimitive.ScrollDownButton, {
146
161
  "data-slot": "select-scroll-down-button",
147
- className: cn("flex cursor-default items-center justify-center py-1", className),
162
+ className: cn2("flex cursor-default items-center justify-center py-1", className),
148
163
  ...props,
149
- children: /* @__PURE__ */ jsxDEV(ChevronDownIcon, {
164
+ children: /* @__PURE__ */ jsxDEV2(ChevronDownIcon, {
150
165
  className: "size-4"
151
166
  }, undefined, false, undefined, this)
152
167
  }, undefined, false, undefined, this);
153
168
  }
154
- // ui/label.tsx
155
- import * as LabelPrimitive from "@radix-ui/react-label";
156
- import { cn as cn2 } from "@contractspec/lib.ui-kit-core/utils";
157
- import { jsxDEV as jsxDEV2 } from "react/jsx-dev-runtime";
158
- "use client";
159
- function Label2({
160
- className,
161
- ...props
162
- }) {
163
- return /* @__PURE__ */ jsxDEV2(LabelPrimitive.Root, {
164
- "data-slot": "label",
165
- className: cn2("flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50", className),
166
- ...props
167
- }, undefined, false, undefined, this);
168
- }
169
169
  // ui/atoms/FilterSelect/FilterSelect.tsx
170
170
  import { jsxDEV as jsxDEV3 } from "react/jsx-dev-runtime";
171
171
  var FilterSelect = ({
@@ -181,8 +181,8 @@ var FilterSelect = ({
181
181
  return /* @__PURE__ */ jsxDEV3("div", {
182
182
  className: `space-y-2 ${className}`,
183
183
  children: [
184
- label && /* @__PURE__ */ jsxDEV3(Label2, {
185
- className: "text-foreground text-base font-medium",
184
+ label && /* @__PURE__ */ jsxDEV3(Label, {
185
+ className: "font-medium text-base text-foreground",
186
186
  children: label
187
187
  }, undefined, false, undefined, this),
188
188
  /* @__PURE__ */ jsxDEV3(Select, {
@@ -204,7 +204,7 @@ var FilterSelect = ({
204
204
  children: [
205
205
  "Tous",
206
206
  showCounts && /* @__PURE__ */ jsxDEV3("span", {
207
- className: "text-muted-foreground ml-2 text-sm",
207
+ className: "ml-2 text-muted-foreground text-sm",
208
208
  children: [
209
209
  "(",
210
210
  options.reduce((sum, option) => sum + (option.count || 0), 0),
@@ -222,7 +222,7 @@ var FilterSelect = ({
222
222
  children: option.label
223
223
  }, undefined, false, undefined, this),
224
224
  showCounts && option.count !== undefined && /* @__PURE__ */ jsxDEV3("span", {
225
- className: "text-muted-foreground ml-2 text-sm",
225
+ className: "ml-2 text-muted-foreground text-sm",
226
226
  children: [
227
227
  "(",
228
228
  option.count,