@contractspec/lib.ui-kit-web 1.46.1 → 1.47.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 (108) hide show
  1. package/dist/ui/accordion.d.ts +5 -5
  2. package/dist/ui/alert-dialog.d.ts +12 -12
  3. package/dist/ui/alert-dialog.d.ts.map +1 -1
  4. package/dist/ui/alert.d.ts +4 -4
  5. package/dist/ui/atoms/FilterSelect/FilterSelect.js.map +1 -1
  6. package/dist/ui/atoms/LoadingSpinner/LoadingSpinner.js.map +1 -1
  7. package/dist/ui/atoms/Pagination/Pagination.js.map +1 -1
  8. package/dist/ui/atoms/SearchInput/SearchInput.js.map +1 -1
  9. package/dist/ui/avatar.d.ts +4 -4
  10. package/dist/ui/badge.d.ts +2 -2
  11. package/dist/ui/breadcrumb.d.ts +8 -8
  12. package/dist/ui/breadcrumb.d.ts.map +1 -1
  13. package/dist/ui/button.d.ts +3 -3
  14. package/dist/ui/calendar.d.ts +3 -3
  15. package/dist/ui/card.d.ts +8 -8
  16. package/dist/ui/carousel.d.ts +6 -6
  17. package/dist/ui/checkbox.d.ts +2 -2
  18. package/dist/ui/collapsible.d.ts +4 -4
  19. package/dist/ui/collapsible.d.ts.map +1 -1
  20. package/dist/ui/command.d.ts +10 -10
  21. package/dist/ui/confirm-dialog.d.ts +2 -2
  22. package/dist/ui/context-menu.d.ts +2 -2
  23. package/dist/ui/cta.js.map +1 -1
  24. package/dist/ui/date-picker.d.ts +2 -2
  25. package/dist/ui/date-range-picker.d.ts +2 -2
  26. package/dist/ui/date-range-picker.d.ts.map +1 -1
  27. package/dist/ui/datetime-picker.d.ts +2 -2
  28. package/dist/ui/drawer.d.ts +11 -11
  29. package/dist/ui/dropdown-menu.d.ts +16 -16
  30. package/dist/ui/empty-state.d.ts +4 -4
  31. package/dist/ui/empty.d.ts +9 -9
  32. package/dist/ui/empty.d.ts.map +1 -1
  33. package/dist/ui/field.d.ts +13 -13
  34. package/dist/ui/form.d.ts +7 -7
  35. package/dist/ui/hover-card.d.ts +4 -4
  36. package/dist/ui/input-group.d.ts +11 -11
  37. package/dist/ui/input-group.d.ts.map +1 -1
  38. package/dist/ui/input.d.ts +2 -2
  39. package/dist/ui/label.d.ts +2 -2
  40. package/dist/ui/live-region.d.ts +2 -2
  41. package/dist/ui/loading-button.d.ts +2 -2
  42. package/dist/ui/map/MapBase.d.ts +2 -2
  43. package/dist/ui/map/MapGeoJsonOverlay.d.ts +2 -2
  44. package/dist/ui/map/MapGeoJsonOverlay.js.map +1 -1
  45. package/dist/ui/map/MapHeatmapH3.d.ts +2 -2
  46. package/dist/ui/map/MapHeatmapH3.js.map +1 -1
  47. package/dist/ui/map/MapMarkers.d.ts +2 -2
  48. package/dist/ui/marketing/FeatureGrid.d.ts +2 -2
  49. package/dist/ui/marketing/Hero.d.ts +2 -2
  50. package/dist/ui/marketing/PricingTable.d.ts +2 -2
  51. package/dist/ui/marketing/PricingTable.d.ts.map +1 -1
  52. package/dist/ui/menubar.d.ts +17 -17
  53. package/dist/ui/molecules/Autocomplete/index.d.ts +2 -2
  54. package/dist/ui/molecules/Autocomplete/index.js.map +1 -1
  55. package/dist/ui/molecules/SearchAndFilter/SearchAndFilter.js +0 -2
  56. package/dist/ui/molecules/SearchAndFilter/SearchAndFilter.js.map +1 -1
  57. package/dist/ui/molecules/SkeletonList.d.ts +2 -2
  58. package/dist/ui/molecules/SkeletonList.d.ts.map +1 -1
  59. package/dist/ui/nav-layout.d.ts +7 -7
  60. package/dist/ui/navigation-menu.d.ts +11 -11
  61. package/dist/ui/navigation-menu.d.ts.map +1 -1
  62. package/dist/ui/organisms/ErrorBoundary/ErrorBoundary.d.ts +2 -2
  63. package/dist/ui/organisms/ErrorBoundary/ErrorBoundary.js.map +1 -1
  64. package/dist/ui/organisms/ListPage/ListPage.d.ts +2 -2
  65. package/dist/ui/organisms/ListPage/ListPage.js +0 -2
  66. package/dist/ui/organisms/ListPage/ListPage.js.map +1 -1
  67. package/dist/ui/page-header.d.ts +4 -4
  68. package/dist/ui/pagination.d.ts +6 -6
  69. package/dist/ui/popover.d.ts +5 -5
  70. package/dist/ui/progress.d.ts +2 -2
  71. package/dist/ui/radio-group.d.ts +3 -3
  72. package/dist/ui/resizable.d.ts +4 -4
  73. package/dist/ui/resizable.d.ts.map +1 -1
  74. package/dist/ui/route-announcer.d.ts +2 -2
  75. package/dist/ui/scroll-area.d.ts +3 -3
  76. package/dist/ui/section.d.ts +3 -3
  77. package/dist/ui/select.d.ts +11 -11
  78. package/dist/ui/separator.d.ts +2 -2
  79. package/dist/ui/sheet.d.ts +9 -9
  80. package/dist/ui/sidebar.d.ts +26 -26
  81. package/dist/ui/sidebar.d.ts.map +1 -1
  82. package/dist/ui/skeleton.d.ts +2 -2
  83. package/dist/ui/skip-link.d.ts +2 -2
  84. package/dist/ui/slider.d.ts +2 -2
  85. package/dist/ui/sonner.d.ts +2 -2
  86. package/dist/ui/stack.d.ts +13 -13
  87. package/dist/ui/stat-card-group.d.ts +2 -2
  88. package/dist/ui/stepper.d.ts +4 -4
  89. package/dist/ui/switch.d.ts +2 -2
  90. package/dist/ui/switch.d.ts.map +1 -1
  91. package/dist/ui/table.d.ts +9 -9
  92. package/dist/ui/tabs.d.ts +5 -5
  93. package/dist/ui/tabs.d.ts.map +1 -1
  94. package/dist/ui/text.d.ts +2 -2
  95. package/dist/ui/textarea.d.ts +2 -2
  96. package/dist/ui/time-picker.d.ts +2 -2
  97. package/dist/ui/toast.d.ts +2 -2
  98. package/dist/ui/toaster.d.ts +2 -2
  99. package/dist/ui/toggle-group.d.ts +3 -3
  100. package/dist/ui/toggle.d.ts +4 -4
  101. package/dist/ui/tooltip.d.ts +5 -5
  102. package/dist/ui/typography.d.ts +12 -12
  103. package/dist/ui/use-toast.js.map +1 -1
  104. package/dist/ui/useListState.js.map +1 -1
  105. package/dist/ui/usecases/UseCaseCard.d.ts +2 -2
  106. package/dist/ui/usecases/UserStoryCard.d.ts +2 -2
  107. package/dist/ui/visually-hidden.js.map +1 -1
  108. package/package.json +15 -16
@@ -1 +1 @@
1
- {"version":3,"file":"MapHeatmapH3.js","names":["fillLayer: any","lineLayer: any"],"sources":["../../../ui/map/MapHeatmapH3.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Layer, Source } from 'react-map-gl/maplibre';\n\nexport interface H3FeatureProperties {\n id: string;\n h3Index?: string;\n count: number;\n}\n\nexport interface H3HeatmapProps {\n id?: string;\n data: GeoJSON.FeatureCollection<\n GeoJSON.Polygon | GeoJSON.MultiPolygon,\n H3FeatureProperties\n >;\n colorStops?: [number, string][]; // [count, color]\n maxCount?: number; // for normalization\n}\n\nfunction buildChoroplethPaint(\n stops: [number, string][],\n _maxCount: number | undefined\n) {\n const scaleStops = (stops || []).map(([c, col]) => [c, col]);\n return {\n 'fill-color': [\n 'interpolate',\n ['linear'],\n ['get', 'count'],\n ...scaleStops.flat(),\n ],\n 'fill-opacity': 0.6,\n } as const;\n}\n\nexport function MapHeatmapH3(props: H3HeatmapProps) {\n const {\n id = 'h3-heatmap',\n data,\n colorStops = [\n [0, '#22c55e'],\n [5, '#eab308'],\n [10, '#ef4444'],\n ],\n maxCount,\n } = props;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const fillLayer: any = {\n id: `${id}-fill`,\n type: 'fill',\n paint: buildChoroplethPaint(colorStops, maxCount),\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const lineLayer: any = {\n id: `${id}-outline`,\n type: 'line',\n paint: {\n 'line-color': '#ffffff',\n 'line-width': 0.25,\n 'line-opacity': 0.25,\n },\n };\n\n return (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n <Source id={id} type=\"geojson\" data={data as any}>\n <Layer {...fillLayer} />\n <Layer {...lineLayer} />\n </Source>\n );\n}\n"],"mappings":";;;;;;;AAqBA,SAAS,qBACP,OACA,WACA;CACA,MAAM,cAAc,SAAS,EAAE,EAAE,KAAK,CAAC,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC;AAC5D,QAAO;EACL,cAAc;GACZ;GACA,CAAC,SAAS;GACV,CAAC,OAAO,QAAQ;GAChB,GAAG,WAAW,MAAM;GACrB;EACD,gBAAgB;EACjB;;AAGH,SAAgB,aAAa,OAAuB;CAClD,MAAM,EACJ,KAAK,cACL,MACA,aAAa;EACX,CAAC,GAAG,UAAU;EACd,CAAC,GAAG,UAAU;EACd,CAAC,IAAI,UAAU;EAChB,EACD,aACE;CAGJ,MAAMA,YAAiB;EACrB,IAAI,GAAG,GAAG;EACV,MAAM;EACN,OAAO,qBAAqB,YAAY,SAAS;EAClD;CAGD,MAAMC,YAAiB;EACrB,IAAI,GAAG,GAAG;EACV,MAAM;EACN,OAAO;GACL,cAAc;GACd,cAAc;GACd,gBAAgB;GACjB;EACF;AAED,QAEE,qBAAC;EAAW;EAAI,MAAK;EAAgB;aACnC,oBAAC,SAAM,GAAI,YAAa,EACxB,oBAAC,SAAM,GAAI,YAAa;GACjB"}
1
+ {"version":3,"file":"MapHeatmapH3.js","names":[],"sources":["../../../ui/map/MapHeatmapH3.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { Layer, Source } from 'react-map-gl/maplibre';\n\nexport interface H3FeatureProperties {\n id: string;\n h3Index?: string;\n count: number;\n}\n\nexport interface H3HeatmapProps {\n id?: string;\n data: GeoJSON.FeatureCollection<\n GeoJSON.Polygon | GeoJSON.MultiPolygon,\n H3FeatureProperties\n >;\n colorStops?: [number, string][]; // [count, color]\n maxCount?: number; // for normalization\n}\n\nfunction buildChoroplethPaint(\n stops: [number, string][],\n _maxCount: number | undefined\n) {\n const scaleStops = (stops || []).map(([c, col]) => [c, col]);\n return {\n 'fill-color': [\n 'interpolate',\n ['linear'],\n ['get', 'count'],\n ...scaleStops.flat(),\n ],\n 'fill-opacity': 0.6,\n } as const;\n}\n\nexport function MapHeatmapH3(props: H3HeatmapProps) {\n const {\n id = 'h3-heatmap',\n data,\n colorStops = [\n [0, '#22c55e'],\n [5, '#eab308'],\n [10, '#ef4444'],\n ],\n maxCount,\n } = props;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const fillLayer: any = {\n id: `${id}-fill`,\n type: 'fill',\n paint: buildChoroplethPaint(colorStops, maxCount),\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const lineLayer: any = {\n id: `${id}-outline`,\n type: 'line',\n paint: {\n 'line-color': '#ffffff',\n 'line-width': 0.25,\n 'line-opacity': 0.25,\n },\n };\n\n return (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n <Source id={id} type=\"geojson\" data={data as any}>\n <Layer {...fillLayer} />\n <Layer {...lineLayer} />\n </Source>\n );\n}\n"],"mappings":";;;;;;;AAqBA,SAAS,qBACP,OACA,WACA;CACA,MAAM,cAAc,SAAS,EAAE,EAAE,KAAK,CAAC,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC;AAC5D,QAAO;EACL,cAAc;GACZ;GACA,CAAC,SAAS;GACV,CAAC,OAAO,QAAQ;GAChB,GAAG,WAAW,MAAM;GACrB;EACD,gBAAgB;EACjB;;AAGH,SAAgB,aAAa,OAAuB;CAClD,MAAM,EACJ,KAAK,cACL,MACA,aAAa;EACX,CAAC,GAAG,UAAU;EACd,CAAC,GAAG,UAAU;EACd,CAAC,IAAI,UAAU;EAChB,EACD,aACE;CAGJ,MAAM,YAAiB;EACrB,IAAI,GAAG,GAAG;EACV,MAAM;EACN,OAAO,qBAAqB,YAAY,SAAS;EAClD;CAGD,MAAM,YAAiB;EACrB,IAAI,GAAG,GAAG;EACV,MAAM;EACN,OAAO;GACL,cAAc;GACd,cAAc;GACd,gBAAgB;GACjB;EACF;AAED,QAEE,qBAAC;EAAW;EAAI,MAAK;EAAgB;aACnC,oBAAC,SAAM,GAAI,YAAa,EACxB,oBAAC,SAAM,GAAI,YAAa;GACjB"}
@@ -1,4 +1,4 @@
1
- import * as react_jsx_runtime268 from "react/jsx-runtime";
1
+ import * as react_jsx_runtime265 from "react/jsx-runtime";
2
2
 
3
3
  //#region ui/map/MapMarkers.d.ts
4
4
  interface MapPoint {
@@ -14,7 +14,7 @@ declare function MapMarkers({
14
14
  points
15
15
  }: {
16
16
  points: MapPoint[];
17
- }): react_jsx_runtime268.JSX.Element;
17
+ }): react_jsx_runtime265.JSX.Element;
18
18
  //#endregion
19
19
  export { MapMarkers, MapPoint };
20
20
  //# sourceMappingURL=MapMarkers.d.ts.map
@@ -1,5 +1,5 @@
1
1
  import * as React$1 from "react";
2
- import * as react_jsx_runtime269 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime266 from "react/jsx-runtime";
3
3
 
4
4
  //#region ui/marketing/FeatureGrid.d.ts
5
5
  interface FeatureItem {
@@ -15,7 +15,7 @@ declare function FeatureGrid({
15
15
  items: FeatureItem[];
16
16
  columns?: 2 | 3 | 4;
17
17
  className?: string;
18
- }): react_jsx_runtime269.JSX.Element;
18
+ }): react_jsx_runtime266.JSX.Element;
19
19
  //#endregion
20
20
  export { FeatureGrid, FeatureItem };
21
21
  //# sourceMappingURL=FeatureGrid.d.ts.map
@@ -1,5 +1,5 @@
1
1
  import * as React$1 from "react";
2
- import * as react_jsx_runtime270 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime271 from "react/jsx-runtime";
3
3
 
4
4
  //#region ui/marketing/Hero.d.ts
5
5
  declare function Hero({
@@ -22,7 +22,7 @@ declare function Hero({
22
22
  onClick?: () => void;
23
23
  };
24
24
  className?: string;
25
- }): react_jsx_runtime270.JSX.Element;
25
+ }): react_jsx_runtime271.JSX.Element;
26
26
  //#endregion
27
27
  export { Hero };
28
28
  //# sourceMappingURL=Hero.d.ts.map
@@ -1,4 +1,4 @@
1
- import * as react_jsx_runtime271 from "react/jsx-runtime";
1
+ import * as react_jsx_runtime20 from "react/jsx-runtime";
2
2
 
3
3
  //#region ui/marketing/PricingTable.d.ts
4
4
  interface PricingTier {
@@ -19,7 +19,7 @@ declare function PricingTable({
19
19
  }: {
20
20
  tiers: PricingTier[];
21
21
  className?: string;
22
- }): react_jsx_runtime271.JSX.Element;
22
+ }): react_jsx_runtime20.JSX.Element;
23
23
  //#endregion
24
24
  export { PricingTable, PricingTier };
25
25
  //# sourceMappingURL=PricingTable.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PricingTable.d.ts","names":[],"sources":["../../../ui/marketing/PricingTable.tsx"],"sourcesContent":[],"mappings":";;;UAIiB,WAAA;;;EAAA,OAAA,CAAA,EAAA,MAAW;EASZ,QAAA,EAAA,MAAY,EAAA;EAC1B,GAAA,CAAA,EAAA;IACA,KAAA,EAAA,MAAA;IAEO,IAAA,CAAA,EAAA,MAAA;IAER,OAAA,CAAA,EAAA,GAAA,GAAA,IAAA;EAAA,CAAA;;;iBANe,YAAA;;;;SAIP;;IAER,oBAAA,CAAA,GAAA,CAAA"}
1
+ {"version":3,"file":"PricingTable.d.ts","names":[],"sources":["../../../ui/marketing/PricingTable.tsx"],"sourcesContent":[],"mappings":";;;UAIiB,WAAA;;;EAAA,OAAA,CAAA,EAAA,MAAW;EASZ,QAAA,EAAA,MAAY,EAAA;EAC1B,GAAA,CAAA,EAAA;IACA,KAAA,EAAA,MAAA;IAEO,IAAA,CAAA,EAAA,MAAA;IAER,OAAA,CAAA,EAAA,GAAA,GAAA,IAAA;EAAA,CAAA;;;iBANe,YAAA;;;;SAIP;;IAER,mBAAA,CAAA,GAAA,CAAA"}
@@ -1,35 +1,35 @@
1
1
  import * as React$1 from "react";
2
- import * as react_jsx_runtime165 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime122 from "react/jsx-runtime";
3
3
  import * as MenubarPrimitive from "@radix-ui/react-menubar";
4
4
 
5
5
  //#region ui/menubar.d.ts
6
6
  declare function Menubar({
7
7
  className,
8
8
  ...props
9
- }: React$1.ComponentProps<typeof MenubarPrimitive.Root>): react_jsx_runtime165.JSX.Element;
9
+ }: React$1.ComponentProps<typeof MenubarPrimitive.Root>): react_jsx_runtime122.JSX.Element;
10
10
  declare function MenubarMenu({
11
11
  ...props
12
- }: React$1.ComponentProps<typeof MenubarPrimitive.Menu>): react_jsx_runtime165.JSX.Element;
12
+ }: React$1.ComponentProps<typeof MenubarPrimitive.Menu>): react_jsx_runtime122.JSX.Element;
13
13
  declare function MenubarGroup({
14
14
  ...props
15
- }: React$1.ComponentProps<typeof MenubarPrimitive.Group>): react_jsx_runtime165.JSX.Element;
15
+ }: React$1.ComponentProps<typeof MenubarPrimitive.Group>): react_jsx_runtime122.JSX.Element;
16
16
  declare function MenubarPortal({
17
17
  ...props
18
- }: React$1.ComponentProps<typeof MenubarPrimitive.Portal>): react_jsx_runtime165.JSX.Element;
18
+ }: React$1.ComponentProps<typeof MenubarPrimitive.Portal>): react_jsx_runtime122.JSX.Element;
19
19
  declare function MenubarRadioGroup({
20
20
  ...props
21
- }: React$1.ComponentProps<typeof MenubarPrimitive.RadioGroup>): react_jsx_runtime165.JSX.Element;
21
+ }: React$1.ComponentProps<typeof MenubarPrimitive.RadioGroup>): react_jsx_runtime122.JSX.Element;
22
22
  declare function MenubarTrigger({
23
23
  className,
24
24
  ...props
25
- }: React$1.ComponentProps<typeof MenubarPrimitive.Trigger>): react_jsx_runtime165.JSX.Element;
25
+ }: React$1.ComponentProps<typeof MenubarPrimitive.Trigger>): react_jsx_runtime122.JSX.Element;
26
26
  declare function MenubarContent({
27
27
  className,
28
28
  align,
29
29
  alignOffset,
30
30
  sideOffset,
31
31
  ...props
32
- }: React$1.ComponentProps<typeof MenubarPrimitive.Content>): react_jsx_runtime165.JSX.Element;
32
+ }: React$1.ComponentProps<typeof MenubarPrimitive.Content>): react_jsx_runtime122.JSX.Element;
33
33
  declare function MenubarItem({
34
34
  className,
35
35
  inset,
@@ -38,36 +38,36 @@ declare function MenubarItem({
38
38
  }: React$1.ComponentProps<typeof MenubarPrimitive.Item> & {
39
39
  inset?: boolean;
40
40
  variant?: 'default' | 'destructive';
41
- }): react_jsx_runtime165.JSX.Element;
41
+ }): react_jsx_runtime122.JSX.Element;
42
42
  declare function MenubarCheckboxItem({
43
43
  className,
44
44
  children,
45
45
  checked,
46
46
  ...props
47
- }: React$1.ComponentProps<typeof MenubarPrimitive.CheckboxItem>): react_jsx_runtime165.JSX.Element;
47
+ }: React$1.ComponentProps<typeof MenubarPrimitive.CheckboxItem>): react_jsx_runtime122.JSX.Element;
48
48
  declare function MenubarRadioItem({
49
49
  className,
50
50
  children,
51
51
  ...props
52
- }: React$1.ComponentProps<typeof MenubarPrimitive.RadioItem>): react_jsx_runtime165.JSX.Element;
52
+ }: React$1.ComponentProps<typeof MenubarPrimitive.RadioItem>): react_jsx_runtime122.JSX.Element;
53
53
  declare function MenubarLabel({
54
54
  className,
55
55
  inset,
56
56
  ...props
57
57
  }: React$1.ComponentProps<typeof MenubarPrimitive.Label> & {
58
58
  inset?: boolean;
59
- }): react_jsx_runtime165.JSX.Element;
59
+ }): react_jsx_runtime122.JSX.Element;
60
60
  declare function MenubarSeparator({
61
61
  className,
62
62
  ...props
63
- }: React$1.ComponentProps<typeof MenubarPrimitive.Separator>): react_jsx_runtime165.JSX.Element;
63
+ }: React$1.ComponentProps<typeof MenubarPrimitive.Separator>): react_jsx_runtime122.JSX.Element;
64
64
  declare function MenubarShortcut({
65
65
  className,
66
66
  ...props
67
- }: React$1.ComponentPropsWithoutRef<'span'>): react_jsx_runtime165.JSX.Element;
67
+ }: React$1.ComponentPropsWithoutRef<'span'>): react_jsx_runtime122.JSX.Element;
68
68
  declare function MenubarSub({
69
69
  ...props
70
- }: React$1.ComponentProps<typeof MenubarPrimitive.Sub>): react_jsx_runtime165.JSX.Element;
70
+ }: React$1.ComponentProps<typeof MenubarPrimitive.Sub>): react_jsx_runtime122.JSX.Element;
71
71
  declare function MenubarSubTrigger({
72
72
  className,
73
73
  inset,
@@ -75,11 +75,11 @@ declare function MenubarSubTrigger({
75
75
  ...props
76
76
  }: React$1.ComponentProps<typeof MenubarPrimitive.SubTrigger> & {
77
77
  inset?: boolean;
78
- }): react_jsx_runtime165.JSX.Element;
78
+ }): react_jsx_runtime122.JSX.Element;
79
79
  declare function MenubarSubContent({
80
80
  className,
81
81
  ...props
82
- }: React$1.ComponentProps<typeof MenubarPrimitive.SubContent>): react_jsx_runtime165.JSX.Element;
82
+ }: React$1.ComponentProps<typeof MenubarPrimitive.SubContent>): react_jsx_runtime122.JSX.Element;
83
83
  //#endregion
84
84
  export { Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger };
85
85
  //# sourceMappingURL=menubar.d.ts.map
@@ -1,7 +1,7 @@
1
- import * as react_jsx_runtime264 from "react/jsx-runtime";
1
+ import * as react_jsx_runtime268 from "react/jsx-runtime";
2
2
 
3
3
  //#region ui/molecules/Autocomplete/index.d.ts
4
- declare function ComboBoxResponsive(): react_jsx_runtime264.JSX.Element;
4
+ declare function ComboBoxResponsive(): react_jsx_runtime268.JSX.Element;
5
5
  //#endregion
6
6
  export { ComboBoxResponsive };
7
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["statuses: Status[]","React"],"sources":["../../../../ui/molecules/Autocomplete/index.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\n\nimport { Button } from '../../button';\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from '../../command';\nimport { Drawer, DrawerContent, DrawerTrigger } from '../../drawer';\nimport { Popover, PopoverContent, PopoverTrigger } from '../../popover';\nimport { useMediaQuery } from '../../use-media-query';\n\ninterface Status {\n value: string;\n label: string;\n}\n\nconst statuses: Status[] = [\n {\n value: 'backlog',\n label: 'Backlog',\n },\n {\n value: 'in progress',\n label: 'In Progress',\n },\n {\n value: 'done',\n label: 'Done',\n },\n {\n value: 'canceled',\n label: 'Canceled',\n },\n];\n\nexport function ComboBoxResponsive() {\n const [open, setOpen] = React.useState(false);\n const isDesktop = useMediaQuery('(min-width: 768px)');\n const [selectedStatus, setSelectedStatus] = React.useState<Status | null>(\n null\n );\n\n if (isDesktop) {\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button variant=\"outline\" className=\"w-[150px] justify-start\">\n {selectedStatus ? <>{selectedStatus.label}</> : <>+ Set status</>}\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-[200px] p-0\" align=\"start\">\n <StatusList setOpen={setOpen} setSelectedStatus={setSelectedStatus} />\n </PopoverContent>\n </Popover>\n );\n }\n\n return (\n <Drawer open={open} onOpenChange={setOpen}>\n <DrawerTrigger asChild>\n <Button variant=\"outline\" className=\"w-[150px] justify-start\">\n {selectedStatus ? <>{selectedStatus.label}</> : <>+ Set status</>}\n </Button>\n </DrawerTrigger>\n <DrawerContent>\n <div className=\"mt-4 border-t\">\n <StatusList setOpen={setOpen} setSelectedStatus={setSelectedStatus} />\n </div>\n </DrawerContent>\n </Drawer>\n );\n}\n\nfunction StatusList({\n setOpen,\n setSelectedStatus,\n}: {\n setOpen: (open: boolean) => void;\n setSelectedStatus: (status: Status | null) => void;\n}) {\n return (\n <Command>\n <CommandInput placeholder=\"Filter status...\" />\n <CommandList>\n <CommandEmpty>No results found.</CommandEmpty>\n <CommandGroup>\n {statuses.map((status) => (\n <CommandItem\n key={status.value}\n value={status.value}\n onSelect={(value) => {\n setSelectedStatus(\n statuses.find((priority) => priority.value === value) || null\n );\n setOpen(false);\n }}\n >\n {status.label}\n </CommandItem>\n ))}\n </CommandGroup>\n </CommandList>\n </Command>\n );\n}\n"],"mappings":";;;;;;;;;;;AAsBA,MAAMA,WAAqB;CACzB;EACE,OAAO;EACP,OAAO;EACR;CACD;EACE,OAAO;EACP,OAAO;EACR;CACD;EACE,OAAO;EACP,OAAO;EACR;CACD;EACE,OAAO;EACP,OAAO;EACR;CACF;AAED,SAAgB,qBAAqB;CACnC,MAAM,CAAC,MAAM,WAAWC,QAAM,SAAS,MAAM;CAC7C,MAAM,YAAY,cAAc,qBAAqB;CACrD,MAAM,CAAC,gBAAgB,qBAAqBA,QAAM,SAChD,KACD;AAED,KAAI,UACF,QACE,qBAAC;EAAc;EAAM,cAAc;aACjC,oBAAC;GAAe;aACd,oBAAC;IAAO,SAAQ;IAAU,WAAU;cACjC,iBAAiB,0CAAG,eAAe,QAAS,GAAG,0CAAE,iBAAe;KAC1D;IACM,EACjB,oBAAC;GAAe,WAAU;GAAgB,OAAM;aAC9C,oBAAC;IAAoB;IAA4B;KAAqB;IACvD;GACT;AAId,QACE,qBAAC;EAAa;EAAM,cAAc;aAChC,oBAAC;GAAc;aACb,oBAAC;IAAO,SAAQ;IAAU,WAAU;cACjC,iBAAiB,0CAAG,eAAe,QAAS,GAAG,0CAAE,iBAAe;KAC1D;IACK,EAChB,oBAAC,2BACC,oBAAC;GAAI,WAAU;aACb,oBAAC;IAAoB;IAA4B;KAAqB;IAClE,GACQ;GACT;;AAIb,SAAS,WAAW,EAClB,SACA,qBAIC;AACD,QACE,qBAAC,sBACC,oBAAC,gBAAa,aAAY,qBAAqB,EAC/C,qBAAC,0BACC,oBAAC,0BAAa,sBAAgC,EAC9C,oBAAC,0BACE,SAAS,KAAK,WACb,oBAAC;EAEC,OAAO,OAAO;EACd,WAAW,UAAU;AACnB,qBACE,SAAS,MAAM,aAAa,SAAS,UAAU,MAAM,IAAI,KAC1D;AACD,WAAQ,MAAM;;YAGf,OAAO;IATH,OAAO,MAUA,CACd,GACW,IACH,IACN"}
1
+ {"version":3,"file":"index.js","names":["React"],"sources":["../../../../ui/molecules/Autocomplete/index.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\n\nimport { Button } from '../../button';\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from '../../command';\nimport { Drawer, DrawerContent, DrawerTrigger } from '../../drawer';\nimport { Popover, PopoverContent, PopoverTrigger } from '../../popover';\nimport { useMediaQuery } from '../../use-media-query';\n\ninterface Status {\n value: string;\n label: string;\n}\n\nconst statuses: Status[] = [\n {\n value: 'backlog',\n label: 'Backlog',\n },\n {\n value: 'in progress',\n label: 'In Progress',\n },\n {\n value: 'done',\n label: 'Done',\n },\n {\n value: 'canceled',\n label: 'Canceled',\n },\n];\n\nexport function ComboBoxResponsive() {\n const [open, setOpen] = React.useState(false);\n const isDesktop = useMediaQuery('(min-width: 768px)');\n const [selectedStatus, setSelectedStatus] = React.useState<Status | null>(\n null\n );\n\n if (isDesktop) {\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger asChild>\n <Button variant=\"outline\" className=\"w-[150px] justify-start\">\n {selectedStatus ? <>{selectedStatus.label}</> : <>+ Set status</>}\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-[200px] p-0\" align=\"start\">\n <StatusList setOpen={setOpen} setSelectedStatus={setSelectedStatus} />\n </PopoverContent>\n </Popover>\n );\n }\n\n return (\n <Drawer open={open} onOpenChange={setOpen}>\n <DrawerTrigger asChild>\n <Button variant=\"outline\" className=\"w-[150px] justify-start\">\n {selectedStatus ? <>{selectedStatus.label}</> : <>+ Set status</>}\n </Button>\n </DrawerTrigger>\n <DrawerContent>\n <div className=\"mt-4 border-t\">\n <StatusList setOpen={setOpen} setSelectedStatus={setSelectedStatus} />\n </div>\n </DrawerContent>\n </Drawer>\n );\n}\n\nfunction StatusList({\n setOpen,\n setSelectedStatus,\n}: {\n setOpen: (open: boolean) => void;\n setSelectedStatus: (status: Status | null) => void;\n}) {\n return (\n <Command>\n <CommandInput placeholder=\"Filter status...\" />\n <CommandList>\n <CommandEmpty>No results found.</CommandEmpty>\n <CommandGroup>\n {statuses.map((status) => (\n <CommandItem\n key={status.value}\n value={status.value}\n onSelect={(value) => {\n setSelectedStatus(\n statuses.find((priority) => priority.value === value) || null\n );\n setOpen(false);\n }}\n >\n {status.label}\n </CommandItem>\n ))}\n </CommandGroup>\n </CommandList>\n </Command>\n );\n}\n"],"mappings":";;;;;;;;;;;AAsBA,MAAM,WAAqB;CACzB;EACE,OAAO;EACP,OAAO;EACR;CACD;EACE,OAAO;EACP,OAAO;EACR;CACD;EACE,OAAO;EACP,OAAO;EACR;CACD;EACE,OAAO;EACP,OAAO;EACR;CACF;AAED,SAAgB,qBAAqB;CACnC,MAAM,CAAC,MAAM,WAAWA,QAAM,SAAS,MAAM;CAC7C,MAAM,YAAY,cAAc,qBAAqB;CACrD,MAAM,CAAC,gBAAgB,qBAAqBA,QAAM,SAChD,KACD;AAED,KAAI,UACF,QACE,qBAAC;EAAc;EAAM,cAAc;aACjC,oBAAC;GAAe;aACd,oBAAC;IAAO,SAAQ;IAAU,WAAU;cACjC,iBAAiB,0CAAG,eAAe,QAAS,GAAG,0CAAE,iBAAe;KAC1D;IACM,EACjB,oBAAC;GAAe,WAAU;GAAgB,OAAM;aAC9C,oBAAC;IAAoB;IAA4B;KAAqB;IACvD;GACT;AAId,QACE,qBAAC;EAAa;EAAM,cAAc;aAChC,oBAAC;GAAc;aACb,oBAAC;IAAO,SAAQ;IAAU,WAAU;cACjC,iBAAiB,0CAAG,eAAe,QAAS,GAAG,0CAAE,iBAAe;KAC1D;IACK,EAChB,oBAAC,2BACC,oBAAC;GAAI,WAAU;aACb,oBAAC;IAAoB;IAA4B;KAAqB;IAClE,GACQ;GACT;;AAIb,SAAS,WAAW,EAClB,SACA,qBAIC;AACD,QACE,qBAAC,sBACC,oBAAC,gBAAa,aAAY,qBAAqB,EAC/C,qBAAC,0BACC,oBAAC,0BAAa,sBAAgC,EAC9C,oBAAC,0BACE,SAAS,KAAK,WACb,oBAAC;EAEC,OAAO,OAAO;EACd,WAAW,UAAU;AACnB,qBACE,SAAS,MAAM,aAAa,SAAS,UAAU,MAAM,IAAI,KAC1D;AACD,WAAQ,MAAM;;YAGf,OAAO;IATH,OAAO,MAUA,CACd,GACW,IACH,IACN"}
@@ -1,9 +1,7 @@
1
1
  import { Button } from "../../button.js";
2
2
  import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "../../collapsible.js";
3
3
  import { FilterSelect } from "../../atoms/FilterSelect/FilterSelect.js";
4
- import "../../atoms/FilterSelect/index.js";
5
4
  import { SearchInput } from "../../atoms/SearchInput/SearchInput.js";
6
- import "../../atoms/SearchInput/index.js";
7
5
  import React, { useState } from "react";
8
6
  import { ChevronDown, ChevronUp, Filter } from "lucide-react";
9
7
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -1 +1 @@
1
- {"version":3,"file":"SearchAndFilter.js","names":["SearchAndFilter: React.FC<SearchAndFilterProps>"],"sources":["../../../../ui/molecules/SearchAndFilter/SearchAndFilter.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport { ChevronDown, ChevronUp, Filter } from 'lucide-react';\nimport { Button } from '../../button';\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from '../../collapsible';\nimport { SearchInput } from '../../atoms/SearchInput';\nimport { FilterSelect } from '../../atoms/FilterSelect';\nimport type { SearchAndFilterProps } from './types';\n\nexport const SearchAndFilter: React.FC<SearchAndFilterProps> = ({\n searchValue,\n onSearchChange,\n searchPlaceholder,\n filters = [],\n isLoading = false,\n disabled = false,\n className = '',\n collapsible = true,\n defaultCollapsed = false,\n}) => {\n const [isCollapsed, setIsCollapsed] = useState(defaultCollapsed);\n\n const hasFilters = filters.length > 0;\n const activeFiltersCount = filters.filter((f) => f.value).length;\n\n // On mobile, show collapsible by default; on desktop, always show filters\n const shouldUseCollapsible = collapsible && hasFilters;\n\n console.log('SearchAndFilter', { filters });\n\n const FilterComponents = () => (\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4\">\n {filters.map((filter) => (\n <FilterSelect\n key={filter.key}\n value={filter.value}\n options={filter.options}\n onChange={filter.onChange}\n label={filter.label}\n disabled={disabled || isLoading}\n showCounts={filter.showCounts}\n className=\"min-w-0\"\n />\n ))}\n </div>\n );\n\n return (\n <div className={`space-y-4 ${className}`}>\n {/* Search - Always visible */}\n <div className=\"flex flex-col gap-4 sm:flex-row\">\n <div className=\"flex-1\">\n <SearchInput\n value={searchValue}\n onChange={onSearchChange}\n placeholder={searchPlaceholder}\n disabled={disabled || isLoading}\n className=\"w-full\"\n />\n </div>\n\n {/* Filter toggle for mobile */}\n {shouldUseCollapsible && (\n <Collapsible\n open={!isCollapsed}\n onOpenChange={setIsCollapsed}\n className=\"sm:hidden\"\n >\n <CollapsibleTrigger asChild>\n <Button\n variant=\"outline\"\n className=\"sm:hidden\"\n disabled={disabled || isLoading}\n >\n <Filter className=\"mr-2 h-4 w-4\" />\n Filtres\n {activeFiltersCount > 0 && (\n <span className=\"bg-primary text-primary-foreground ml-2 flex h-5 w-5 items-center justify-center rounded-full text-sm\">\n {activeFiltersCount}\n </span>\n )}\n {isCollapsed ? (\n <ChevronDown className=\"ml-2 h-4 w-4\" />\n ) : (\n <ChevronUp className=\"ml-2 h-4 w-4\" />\n )}\n </Button>\n </CollapsibleTrigger>\n <CollapsibleContent className=\"mt-4 space-y-4\">\n <FilterComponents />\n </CollapsibleContent>\n </Collapsible>\n )}\n </div>\n\n {/* Filters - Always visible on desktop, collapsible on mobile */}\n {hasFilters && (\n <div className=\"hidden sm:block\">\n <FilterComponents />\n </div>\n )}\n\n {/* Active filters summary */}\n {activeFiltersCount > 0 && (\n <div className=\"flex flex-wrap items-center gap-2\">\n <span className=\"text-muted-foreground text-base\">\n Filtres actifs:\n </span>\n {filters\n .filter((f) => f.value)\n .map((filter) => {\n const selectedOption = filter.options.find(\n (opt) => opt.value === filter.value\n );\n return (\n <Button\n key={filter.key}\n variant=\"secondary\"\n size=\"sm\"\n onClick={() => filter.onChange('')}\n disabled={disabled || isLoading}\n className=\"h-7 px-2 text-sm\"\n >\n {filter.label}: {selectedOption?.label}\n <span className=\"ml-1\">×</span>\n </Button>\n );\n })}\n </div>\n )}\n </div>\n );\n};\n"],"mappings":";;;;;;;;;;;AAYA,MAAaA,mBAAmD,EAC9D,aACA,gBACA,mBACA,UAAU,EAAE,EACZ,YAAY,OACZ,WAAW,OACX,YAAY,IACZ,cAAc,MACd,mBAAmB,YACf;CACJ,MAAM,CAAC,aAAa,kBAAkB,SAAS,iBAAiB;CAEhE,MAAM,aAAa,QAAQ,SAAS;CACpC,MAAM,qBAAqB,QAAQ,QAAQ,MAAM,EAAE,MAAM,CAAC;CAG1D,MAAM,uBAAuB,eAAe;AAE5C,SAAQ,IAAI,mBAAmB,EAAE,SAAS,CAAC;CAE3C,MAAM,yBACJ,oBAAC;EAAI,WAAU;YACZ,QAAQ,KAAK,WACZ,oBAAC;GAEC,OAAO,OAAO;GACd,SAAS,OAAO;GAChB,UAAU,OAAO;GACjB,OAAO,OAAO;GACd,UAAU,YAAY;GACtB,YAAY,OAAO;GACnB,WAAU;KAPL,OAAO,IAQZ,CACF;GACE;AAGR,QACE,qBAAC;EAAI,WAAW,aAAa;;GAE3B,qBAAC;IAAI,WAAU;eACb,oBAAC;KAAI,WAAU;eACb,oBAAC;MACC,OAAO;MACP,UAAU;MACV,aAAa;MACb,UAAU,YAAY;MACtB,WAAU;OACV;MACE,EAGL,wBACC,qBAAC;KACC,MAAM,CAAC;KACP,cAAc;KACd,WAAU;gBAEV,oBAAC;MAAmB;gBAClB,qBAAC;OACC,SAAQ;OACR,WAAU;OACV,UAAU,YAAY;;QAEtB,oBAAC,UAAO,WAAU,iBAAiB;;QAElC,qBAAqB,KACpB,oBAAC;SAAK,WAAU;mBACb;UACI;QAER,cACC,oBAAC,eAAY,WAAU,iBAAiB,GAExC,oBAAC,aAAU,WAAU,iBAAiB;;QAEjC;OACU,EACrB,oBAAC;MAAmB,WAAU;gBAC5B,oBAAC,qBAAmB;OACD;MACT;KAEZ;GAGL,cACC,oBAAC;IAAI,WAAU;cACb,oBAAC,qBAAmB;KAChB;GAIP,qBAAqB,KACpB,qBAAC;IAAI,WAAU;eACb,oBAAC;KAAK,WAAU;eAAkC;MAE3C,EACN,QACE,QAAQ,MAAM,EAAE,MAAM,CACtB,KAAK,WAAW;KACf,MAAM,iBAAiB,OAAO,QAAQ,MACnC,QAAQ,IAAI,UAAU,OAAO,MAC/B;AACD,YACE,qBAAC;MAEC,SAAQ;MACR,MAAK;MACL,eAAe,OAAO,SAAS,GAAG;MAClC,UAAU,YAAY;MACtB,WAAU;;OAET,OAAO;OAAM;OAAG,gBAAgB;OACjC,oBAAC;QAAK,WAAU;kBAAO;SAAQ;;QAR1B,OAAO,IASL;MAEX;KACA;;GAEJ"}
1
+ {"version":3,"file":"SearchAndFilter.js","names":[],"sources":["../../../../ui/molecules/SearchAndFilter/SearchAndFilter.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport { ChevronDown, ChevronUp, Filter } from 'lucide-react';\nimport { Button } from '../../button';\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from '../../collapsible';\nimport { SearchInput } from '../../atoms/SearchInput';\nimport { FilterSelect } from '../../atoms/FilterSelect';\nimport type { SearchAndFilterProps } from './types';\n\nexport const SearchAndFilter: React.FC<SearchAndFilterProps> = ({\n searchValue,\n onSearchChange,\n searchPlaceholder,\n filters = [],\n isLoading = false,\n disabled = false,\n className = '',\n collapsible = true,\n defaultCollapsed = false,\n}) => {\n const [isCollapsed, setIsCollapsed] = useState(defaultCollapsed);\n\n const hasFilters = filters.length > 0;\n const activeFiltersCount = filters.filter((f) => f.value).length;\n\n // On mobile, show collapsible by default; on desktop, always show filters\n const shouldUseCollapsible = collapsible && hasFilters;\n\n console.log('SearchAndFilter', { filters });\n\n const FilterComponents = () => (\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4\">\n {filters.map((filter) => (\n <FilterSelect\n key={filter.key}\n value={filter.value}\n options={filter.options}\n onChange={filter.onChange}\n label={filter.label}\n disabled={disabled || isLoading}\n showCounts={filter.showCounts}\n className=\"min-w-0\"\n />\n ))}\n </div>\n );\n\n return (\n <div className={`space-y-4 ${className}`}>\n {/* Search - Always visible */}\n <div className=\"flex flex-col gap-4 sm:flex-row\">\n <div className=\"flex-1\">\n <SearchInput\n value={searchValue}\n onChange={onSearchChange}\n placeholder={searchPlaceholder}\n disabled={disabled || isLoading}\n className=\"w-full\"\n />\n </div>\n\n {/* Filter toggle for mobile */}\n {shouldUseCollapsible && (\n <Collapsible\n open={!isCollapsed}\n onOpenChange={setIsCollapsed}\n className=\"sm:hidden\"\n >\n <CollapsibleTrigger asChild>\n <Button\n variant=\"outline\"\n className=\"sm:hidden\"\n disabled={disabled || isLoading}\n >\n <Filter className=\"mr-2 h-4 w-4\" />\n Filtres\n {activeFiltersCount > 0 && (\n <span className=\"bg-primary text-primary-foreground ml-2 flex h-5 w-5 items-center justify-center rounded-full text-sm\">\n {activeFiltersCount}\n </span>\n )}\n {isCollapsed ? (\n <ChevronDown className=\"ml-2 h-4 w-4\" />\n ) : (\n <ChevronUp className=\"ml-2 h-4 w-4\" />\n )}\n </Button>\n </CollapsibleTrigger>\n <CollapsibleContent className=\"mt-4 space-y-4\">\n <FilterComponents />\n </CollapsibleContent>\n </Collapsible>\n )}\n </div>\n\n {/* Filters - Always visible on desktop, collapsible on mobile */}\n {hasFilters && (\n <div className=\"hidden sm:block\">\n <FilterComponents />\n </div>\n )}\n\n {/* Active filters summary */}\n {activeFiltersCount > 0 && (\n <div className=\"flex flex-wrap items-center gap-2\">\n <span className=\"text-muted-foreground text-base\">\n Filtres actifs:\n </span>\n {filters\n .filter((f) => f.value)\n .map((filter) => {\n const selectedOption = filter.options.find(\n (opt) => opt.value === filter.value\n );\n return (\n <Button\n key={filter.key}\n variant=\"secondary\"\n size=\"sm\"\n onClick={() => filter.onChange('')}\n disabled={disabled || isLoading}\n className=\"h-7 px-2 text-sm\"\n >\n {filter.label}: {selectedOption?.label}\n <span className=\"ml-1\">×</span>\n </Button>\n );\n })}\n </div>\n )}\n </div>\n );\n};\n"],"mappings":";;;;;;;;;AAYA,MAAa,mBAAmD,EAC9D,aACA,gBACA,mBACA,UAAU,EAAE,EACZ,YAAY,OACZ,WAAW,OACX,YAAY,IACZ,cAAc,MACd,mBAAmB,YACf;CACJ,MAAM,CAAC,aAAa,kBAAkB,SAAS,iBAAiB;CAEhE,MAAM,aAAa,QAAQ,SAAS;CACpC,MAAM,qBAAqB,QAAQ,QAAQ,MAAM,EAAE,MAAM,CAAC;CAG1D,MAAM,uBAAuB,eAAe;AAE5C,SAAQ,IAAI,mBAAmB,EAAE,SAAS,CAAC;CAE3C,MAAM,yBACJ,oBAAC;EAAI,WAAU;YACZ,QAAQ,KAAK,WACZ,oBAAC;GAEC,OAAO,OAAO;GACd,SAAS,OAAO;GAChB,UAAU,OAAO;GACjB,OAAO,OAAO;GACd,UAAU,YAAY;GACtB,YAAY,OAAO;GACnB,WAAU;KAPL,OAAO,IAQZ,CACF;GACE;AAGR,QACE,qBAAC;EAAI,WAAW,aAAa;;GAE3B,qBAAC;IAAI,WAAU;eACb,oBAAC;KAAI,WAAU;eACb,oBAAC;MACC,OAAO;MACP,UAAU;MACV,aAAa;MACb,UAAU,YAAY;MACtB,WAAU;OACV;MACE,EAGL,wBACC,qBAAC;KACC,MAAM,CAAC;KACP,cAAc;KACd,WAAU;gBAEV,oBAAC;MAAmB;gBAClB,qBAAC;OACC,SAAQ;OACR,WAAU;OACV,UAAU,YAAY;;QAEtB,oBAAC,UAAO,WAAU,iBAAiB;;QAElC,qBAAqB,KACpB,oBAAC;SAAK,WAAU;mBACb;UACI;QAER,cACC,oBAAC,eAAY,WAAU,iBAAiB,GAExC,oBAAC,aAAU,WAAU,iBAAiB;;QAEjC;OACU,EACrB,oBAAC;MAAmB,WAAU;gBAC5B,oBAAC,qBAAmB;OACD;MACT;KAEZ;GAGL,cACC,oBAAC;IAAI,WAAU;cACb,oBAAC,qBAAmB;KAChB;GAIP,qBAAqB,KACpB,qBAAC;IAAI,WAAU;eACb,oBAAC;KAAK,WAAU;eAAkC;MAE3C,EACN,QACE,QAAQ,MAAM,EAAE,MAAM,CACtB,KAAK,WAAW;KACf,MAAM,iBAAiB,OAAO,QAAQ,MACnC,QAAQ,IAAI,UAAU,OAAO,MAC/B;AACD,YACE,qBAAC;MAEC,SAAQ;MACR,MAAK;MACL,eAAe,OAAO,SAAS,GAAG;MAClC,UAAU,YAAY;MACtB,WAAU;;OAET,OAAO;OAAM;OAAG,gBAAgB;OACjC,oBAAC;QAAK,WAAU;kBAAO;SAAQ;;QAR1B,OAAO,IASL;MAEX;KACA;;GAEJ"}
@@ -1,4 +1,4 @@
1
- import * as react_jsx_runtime263 from "react/jsx-runtime";
1
+ import * as react_jsx_runtime38 from "react/jsx-runtime";
2
2
 
3
3
  //#region ui/molecules/SkeletonList.d.ts
4
4
  interface Props {
@@ -10,7 +10,7 @@ declare function SkeletonList({
10
10
  count,
11
11
  className,
12
12
  itemClassName
13
- }: Props): react_jsx_runtime263.JSX.Element;
13
+ }: Props): react_jsx_runtime38.JSX.Element;
14
14
  //#endregion
15
15
  export { SkeletonList };
16
16
  //# sourceMappingURL=SkeletonList.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SkeletonList.d.ts","names":[],"sources":["../../../ui/molecules/SkeletonList.tsx"],"sourcesContent":[],"mappings":";;;UAGU,KAAA;;;EAAA,aAAK,CAAA,EAAA,MAAA;AAMf;AACE,iBADc,YAAA,CACd;EAAA,KAAA;EAAA,SAAA;EAAA;AAAA,CAAA,EAGC,KAHD,CAAA,EAGM,oBAAA,CAAA,GAAA,CAAA,OAHN"}
1
+ {"version":3,"file":"SkeletonList.d.ts","names":[],"sources":["../../../ui/molecules/SkeletonList.tsx"],"sourcesContent":[],"mappings":";;;UAGU,KAAA;;;EAAA,aAAK,CAAA,EAAA,MAAA;AAMf;AACE,iBADc,YAAA,CACd;EAAA,KAAA;EAAA,SAAA;EAAA;AAAA,CAAA,EAGC,KAHD,CAAA,EAGM,mBAAA,CAAA,GAAA,CAAA,OAHN"}
@@ -1,13 +1,13 @@
1
1
  import { NavigationMenu, NavigationMenuContent, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger } from "./navigation-menu.js";
2
2
  import * as React$1 from "react";
3
- import * as react_jsx_runtime160 from "react/jsx-runtime";
4
- import * as class_variance_authority_types9 from "class-variance-authority/types";
3
+ import * as react_jsx_runtime141 from "react/jsx-runtime";
4
+ import * as class_variance_authority_types6 from "class-variance-authority/types";
5
5
 
6
6
  //#region ui/nav-layout.d.ts
7
7
  declare const navPanelVariants: (props?: ({
8
8
  width?: "sm" | "lg" | "md" | "full" | null | undefined;
9
9
  padding?: "none" | "sm" | "md" | null | undefined;
10
- } & class_variance_authority_types9.ClassProp) | undefined) => string;
10
+ } & class_variance_authority_types6.ClassProp) | undefined) => string;
11
11
  interface NavPanelProps extends React$1.ComponentPropsWithoutRef<'div'> {
12
12
  width?: 'sm' | 'md' | 'lg' | 'full';
13
13
  padding?: 'none' | 'sm' | 'md';
@@ -17,7 +17,7 @@ declare function NavPanel({
17
17
  padding,
18
18
  className,
19
19
  ...props
20
- }: NavPanelProps): react_jsx_runtime160.JSX.Element;
20
+ }: NavPanelProps): react_jsx_runtime141.JSX.Element;
21
21
  declare function NavSimpleList({
22
22
  title,
23
23
  items
@@ -28,7 +28,7 @@ declare function NavSimpleList({
28
28
  label: string;
29
29
  description?: string;
30
30
  }[];
31
- }): react_jsx_runtime160.JSX.Element;
31
+ }): react_jsx_runtime141.JSX.Element;
32
32
  declare function NavColumns({
33
33
  columns
34
34
  }: {
@@ -40,7 +40,7 @@ declare function NavColumns({
40
40
  description?: string;
41
41
  }[];
42
42
  }[];
43
- }): react_jsx_runtime160.JSX.Element;
43
+ }): react_jsx_runtime141.JSX.Element;
44
44
  declare function NavCategorizedWithPreview({
45
45
  categories,
46
46
  modules,
@@ -65,7 +65,7 @@ declare function NavCategorizedWithPreview({
65
65
  activeKey: string | null;
66
66
  setActiveKey: (k: string | null) => void;
67
67
  preview: React$1.ReactNode;
68
- }): react_jsx_runtime160.JSX.Element;
68
+ }): react_jsx_runtime141.JSX.Element;
69
69
  //#endregion
70
70
  export { NavCategorizedWithPreview, NavColumns, NavigationMenuContent as NavContent, NavigationMenuItem as NavItem, NavigationMenuLink as NavLink, NavigationMenuList as NavList, NavPanel, NavPanelProps, NavigationMenu as NavRoot, NavSimpleList, NavigationMenuTrigger as NavTrigger, navPanelVariants };
71
71
  //# sourceMappingURL=nav-layout.d.ts.map
@@ -1,7 +1,7 @@
1
1
  import * as React$1 from "react";
2
- import * as react_jsx_runtime182 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime151 from "react/jsx-runtime";
3
3
  import * as NavigationMenuPrimitive from "@radix-ui/react-navigation-menu";
4
- import * as class_variance_authority_types11 from "class-variance-authority/types";
4
+ import * as class_variance_authority_types9 from "class-variance-authority/types";
5
5
 
6
6
  //#region ui/navigation-menu.d.ts
7
7
  declare function NavigationMenu({
@@ -11,37 +11,37 @@ declare function NavigationMenu({
11
11
  ...props
12
12
  }: React$1.ComponentProps<typeof NavigationMenuPrimitive.Root> & {
13
13
  viewport?: boolean;
14
- }): react_jsx_runtime182.JSX.Element;
14
+ }): react_jsx_runtime151.JSX.Element;
15
15
  declare function NavigationMenuList({
16
16
  className,
17
17
  ...props
18
- }: React$1.ComponentProps<typeof NavigationMenuPrimitive.List>): react_jsx_runtime182.JSX.Element;
18
+ }: React$1.ComponentProps<typeof NavigationMenuPrimitive.List>): react_jsx_runtime151.JSX.Element;
19
19
  declare function NavigationMenuItem({
20
20
  className,
21
21
  ...props
22
- }: React$1.ComponentProps<typeof NavigationMenuPrimitive.Item>): react_jsx_runtime182.JSX.Element;
23
- declare const navigationMenuTriggerStyle: (props?: class_variance_authority_types11.ClassProp | undefined) => string;
22
+ }: React$1.ComponentProps<typeof NavigationMenuPrimitive.Item>): react_jsx_runtime151.JSX.Element;
23
+ declare const navigationMenuTriggerStyle: (props?: class_variance_authority_types9.ClassProp | undefined) => string;
24
24
  declare function NavigationMenuTrigger({
25
25
  className,
26
26
  children,
27
27
  ...props
28
- }: React$1.ComponentProps<typeof NavigationMenuPrimitive.Trigger>): react_jsx_runtime182.JSX.Element;
28
+ }: React$1.ComponentProps<typeof NavigationMenuPrimitive.Trigger>): react_jsx_runtime151.JSX.Element;
29
29
  declare function NavigationMenuContent({
30
30
  className,
31
31
  ...props
32
- }: React$1.ComponentProps<typeof NavigationMenuPrimitive.Content>): react_jsx_runtime182.JSX.Element;
32
+ }: React$1.ComponentProps<typeof NavigationMenuPrimitive.Content>): react_jsx_runtime151.JSX.Element;
33
33
  declare function NavigationMenuViewport({
34
34
  className,
35
35
  ...props
36
- }: React$1.ComponentProps<typeof NavigationMenuPrimitive.Viewport>): react_jsx_runtime182.JSX.Element;
36
+ }: React$1.ComponentProps<typeof NavigationMenuPrimitive.Viewport>): react_jsx_runtime151.JSX.Element;
37
37
  declare function NavigationMenuLink({
38
38
  className,
39
39
  ...props
40
- }: React$1.ComponentProps<typeof NavigationMenuPrimitive.Link>): react_jsx_runtime182.JSX.Element;
40
+ }: React$1.ComponentProps<typeof NavigationMenuPrimitive.Link>): react_jsx_runtime151.JSX.Element;
41
41
  declare function NavigationMenuIndicator({
42
42
  className,
43
43
  ...props
44
- }: React$1.ComponentProps<typeof NavigationMenuPrimitive.Indicator>): react_jsx_runtime182.JSX.Element;
44
+ }: React$1.ComponentProps<typeof NavigationMenuPrimitive.Indicator>): react_jsx_runtime151.JSX.Element;
45
45
  //#endregion
46
46
  export { NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, navigationMenuTriggerStyle };
47
47
  //# sourceMappingURL=navigation-menu.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"navigation-menu.d.ts","names":[],"sources":["../../ui/navigation-menu.tsx"],"sourcesContent":[],"mappings":";;;;;;iBAOS,cAAA;;;;;GAKN,OAAA,CAAM,sBAAsB,uBAAA,CAAwB;;IAEtD,oBAAA,CAAA,GAAA,CAAA;iBAiBQ,kBAAA;;;GAGN,OAAA,CAAM,sBAAsB,uBAAA,CAAwB,QAAK,oBAAA,CAAA,GAAA,CAAA;AAjCe,iBA8ClE,kBAAA,CAxCc;EAAA,SAAA;EAAA,GAAA;AAAA,CAAA,EA2CpB,OAAA,CAAM,cA3Cc,CAAA,OA2CQ,uBAAA,CAAwB,IA3ChC,CAAA,CAAA,EA2CqC,oBAAA,CAAA,GAAA,CAAA,OA3CrC;cAqDjB,0BApDJ,EAAA,CAAA,KAAA,CAAA,EAsDD,gCAAA,CAF+B,SAAA,GApD9B,SAAA,EAAA,GAAA,MAAA;iBAwDO,qBAAA,CAvDP;EAAA,SAAA;EAAA,QAAA;EAAA,GAAA;AAAA,CAAA,EA2DC,OAAA,CAAM,cA3DP,CAAA,OA2D6B,uBAAA,CAAwB,OA3DrD,CAAA,CAAA,EA2D6D,oBAAA,CAAA,GAAA,CAAA,OA3D7D;iBA2EO,qBAAA,CA1EP;EAAA,SAAA;EAAA,GAAA;AAAA,CAAA,EA6EC,OAAA,CAAM,cA7EP,CAAA,OA6E6B,uBAAA,CAAwB,OA7ErD,CAAA,CAAA,EA6E6D,oBAAA,CAAA,GAAA,CAAA,OA7E7D;iBA2FO,sBAAA,CAzF8C;EAAA,SAAA;EAAA,GAAA;AAAA,CAAA,EA4FpD,OAAA,CAAM,cA5F8C,CAAA,OA4FxB,uBAAA,CAAwB,QA5FA,CAAA,CAAA,EA4FS,oBAAA,CAAA,GAAA,CAAA,OA5FT;iBA+G9C,kBAAA,CA/GA;EAAA,SAAA;EAAA,GAAA;AAAA,CAAA,EAkHN,OAAA,CAAM,cAlHA,CAAA,OAkHsB,uBAAA,CAAwB,IAlH9C,CAAA,CAAA,EAkHmD,oBAAA,CAAA,GAAA,CAAA,OAlHnD;iBA+HA,uBAAA,CA7HR;EAAA,SAAA;EAAA,GAAA;AAAA,CAAA,EAgIE,OAAA,CAAM,cAhIR,CAAA,OAgI8B,uBAAA,CAAwB,SAhItD,CAAA,CAAA,EAgIgE,oBAAA,CAAA,GAAA,CAAA,OAhIhE"}
1
+ {"version":3,"file":"navigation-menu.d.ts","names":[],"sources":["../../ui/navigation-menu.tsx"],"sourcesContent":[],"mappings":";;;;;;iBAOS,cAAA;;;;;GAKN,OAAA,CAAM,sBAAsB,uBAAA,CAAwB;;IAEtD,oBAAA,CAAA,GAAA,CAAA;iBAiBQ,kBAAA;;;GAGN,OAAA,CAAM,sBAAsB,uBAAA,CAAwB,QAAK,oBAAA,CAAA,GAAA,CAAA;AAjCe,iBA8ClE,kBAAA,CAxCc;EAAA,SAAA;EAAA,GAAA;AAAA,CAAA,EA2CpB,OAAA,CAAM,cA3Cc,CAAA,OA2CQ,uBAAA,CAAwB,IA3ChC,CAAA,CAAA,EA2CqC,oBAAA,CAAA,GAAA,CAAA,OA3CrC;cAqDjB,0BApDJ,EAAA,CAAA,KAAA,CAAA,EAsDD,+BAAA,CAF+B,SAAA,GApD9B,SAAA,EAAA,GAAA,MAAA;iBAwDO,qBAAA,CAvDP;EAAA,SAAA;EAAA,QAAA;EAAA,GAAA;AAAA,CAAA,EA2DC,OAAA,CAAM,cA3DP,CAAA,OA2D6B,uBAAA,CAAwB,OA3DrD,CAAA,CAAA,EA2D6D,oBAAA,CAAA,GAAA,CAAA,OA3D7D;iBA2EO,qBAAA,CA1EP;EAAA,SAAA;EAAA,GAAA;AAAA,CAAA,EA6EC,OAAA,CAAM,cA7EP,CAAA,OA6E6B,uBAAA,CAAwB,OA7ErD,CAAA,CAAA,EA6E6D,oBAAA,CAAA,GAAA,CAAA,OA7E7D;iBA2FO,sBAAA,CAzF8C;EAAA,SAAA;EAAA,GAAA;AAAA,CAAA,EA4FpD,OAAA,CAAM,cA5F8C,CAAA,OA4FxB,uBAAA,CAAwB,QA5FA,CAAA,CAAA,EA4FS,oBAAA,CAAA,GAAA,CAAA,OA5FT;iBA+G9C,kBAAA,CA/GA;EAAA,SAAA;EAAA,GAAA;AAAA,CAAA,EAkHN,OAAA,CAAM,cAlHA,CAAA,OAkHsB,uBAAA,CAAwB,IAlH9C,CAAA,CAAA,EAkHmD,oBAAA,CAAA,GAAA,CAAA,OAlHnD;iBA+HA,uBAAA,CA7HR;EAAA,SAAA;EAAA,GAAA;AAAA,CAAA,EAgIE,OAAA,CAAM,cAhIR,CAAA,OAgI8B,uBAAA,CAAwB,SAhItD,CAAA,CAAA,EAgIgE,oBAAA,CAAA,GAAA,CAAA,OAhIhE"}
@@ -1,5 +1,5 @@
1
1
  import React from "react";
2
- import * as react_jsx_runtime265 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime269 from "react/jsx-runtime";
3
3
 
4
4
  //#region ui/organisms/ErrorBoundary/ErrorBoundary.d.ts
5
5
  interface ErrorBoundaryState {
@@ -22,7 +22,7 @@ declare class ErrorBoundary extends React.Component<ErrorBoundaryProps, ErrorBou
22
22
  static getDerivedStateFromError(error: Error): Partial<ErrorBoundaryState>;
23
23
  componentDidCatch(error: Error, errorInfo: React.ErrorInfo): void;
24
24
  resetError: () => void;
25
- render(): string | number | bigint | boolean | react_jsx_runtime265.JSX.Element | Iterable<React.ReactNode> | Promise<string | number | bigint | boolean | React.ReactPortal | React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode> | null | undefined> | null | undefined;
25
+ render(): string | number | bigint | boolean | react_jsx_runtime269.JSX.Element | Iterable<React.ReactNode> | Promise<string | number | bigint | boolean | React.ReactPortal | React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode> | null | undefined> | null | undefined;
26
26
  }
27
27
  declare const useErrorHandler: () => (error: Error) => never;
28
28
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"ErrorBoundary.js","names":["DefaultErrorFallback: React.FC<ErrorFallbackProps>"],"sources":["../../../../ui/organisms/ErrorBoundary/ErrorBoundary.tsx"],"sourcesContent":["'use client';\n\nimport React from 'react';\n// import * as Sentry from '@sentry/nextjs';\nimport { AlertTriangle, RefreshCw, Home } from 'lucide-react';\nimport { Button } from '../../button';\n\ninterface ErrorBoundaryState {\n hasError: boolean;\n error: Error | null;\n errorId: string | null;\n}\n\ninterface ErrorBoundaryProps {\n children: React.ReactNode;\n fallback?: React.ComponentType<ErrorFallbackProps>;\n onError?: (error: Error, errorInfo: React.ErrorInfo) => void;\n}\n\ninterface ErrorFallbackProps {\n error: Error;\n errorId: string | null;\n resetError: () => void;\n}\n\nconst DefaultErrorFallback: React.FC<ErrorFallbackProps> = ({\n error,\n errorId,\n resetError,\n}) => {\n const isDevelopment = process.env.NODE_ENV === 'development';\n\n return (\n <div className=\"flex min-h-screen items-center justify-center bg-gray-50 px-4\">\n <div className=\"w-full max-w-md rounded-lg bg-white p-6 text-center shadow-lg\">\n <div className=\"mb-4 flex justify-center\">\n <AlertTriangle className=\"h-12 w-12 text-red-500\" />\n </div>\n\n <h1 className=\"mb-2 text-2xl font-semibold text-gray-900\">\n Une erreur s'est produite\n </h1>\n\n <p className=\"mb-6 text-gray-600\">\n Nous nous excusons pour ce désagrément. Notre équipe a été notifiée et\n travaille à résoudre le problème.\n </p>\n\n {isDevelopment && (\n <div className=\"mb-6 rounded-md bg-red-50 p-4 text-left\">\n <p className=\"mb-2 text-base font-medium text-red-800\">\n Erreur de développement:\n </p>\n <p className=\"font-mono text-sm break-all text-red-700\">\n {error.message}\n </p>\n {errorId && (\n <p className=\"mt-2 text-sm text-red-600\">ID: {errorId}</p>\n )}\n </div>\n )}\n\n <div className=\"flex flex-col justify-center gap-3 sm:flex-row\">\n <Button onClick={resetError} className=\"flex items-center gap-2\">\n <RefreshCw className=\"h-4 w-4\" />\n Réessayer\n </Button>\n\n <Button\n onClick={() => (window.location.href = '/')}\n variant=\"secondary\"\n className=\"flex items-center gap-2\"\n >\n <Home className=\"h-4 w-4\" />\n Accueil\n </Button>\n </div>\n\n {!isDevelopment && errorId && (\n <p className=\"mt-4 text-sm text-gray-500\">Code d'erreur: {errorId}</p>\n )}\n </div>\n </div>\n );\n};\n\nexport class ErrorBoundary extends React.Component<\n ErrorBoundaryProps,\n ErrorBoundaryState\n> {\n constructor(props: ErrorBoundaryProps) {\n super(props);\n this.state = {\n hasError: false,\n error: null,\n errorId: null,\n };\n }\n\n static getDerivedStateFromError(error: Error): Partial<ErrorBoundaryState> {\n return {\n hasError: true,\n error,\n };\n }\n\n componentDidCatch(error: Error, errorInfo: React.ErrorInfo) {\n // Generate unique error ID\n const errorId = `err_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n\n // Log to Sentry with additional context\n // Sentry.withScope((scope) => {\n // scope.setTag('errorBoundary', true);\n // scope.setContext('errorInfo', { ...errorInfo });\n // scope.setContext('errorId', { errorId });\n // Sentry.captureException(error);\n // });\n\n // Update state with error ID\n this.setState({ errorId });\n\n // Call custom error handler if provided\n this.props.onError?.(error, errorInfo);\n\n // Log to console in development\n if (process.env.NODE_ENV === 'development') {\n console.error('ErrorBoundary caught an error:', error, errorInfo);\n }\n }\n\n resetError = () => {\n this.setState({\n hasError: false,\n error: null,\n errorId: null,\n });\n };\n\n render() {\n if (this.state.hasError && this.state.error) {\n const FallbackComponent = this.props.fallback || DefaultErrorFallback;\n\n return (\n <FallbackComponent\n error={this.state.error}\n errorId={this.state.errorId}\n resetError={this.resetError}\n />\n );\n }\n\n return this.props.children;\n }\n}\n\n// Hook for functional components to trigger error boundary\nexport const useErrorHandler = () => {\n return React.useCallback((error: Error) => {\n // This will be caught by the nearest error boundary\n throw error;\n }, []);\n};\n\nexport type { ErrorBoundaryProps, ErrorFallbackProps };\n"],"mappings":";;;;;;;;AAyBA,MAAMA,wBAAsD,EAC1D,OACA,SACA,iBACI;AAGJ,QACE,oBAAC;EAAI,WAAU;YACb,qBAAC;GAAI,WAAU;;IACb,oBAAC;KAAI,WAAU;eACb,oBAAC,iBAAc,WAAU,2BAA2B;MAChD;IAEN,oBAAC;KAAG,WAAU;eAA4C;MAErD;IAEL,oBAAC;KAAE,WAAU;eAAqB;MAG9B;IAGF,qBAAC;KAAI,WAAU;;MACb,oBAAC;OAAE,WAAU;iBAA0C;QAEnD;MACJ,oBAAC;OAAE,WAAU;iBACV,MAAM;QACL;MACH,WACC,qBAAC;OAAE,WAAU;kBAA4B,QAAK;QAAY;;MAExD;IAGR,qBAAC;KAAI,WAAU;gBACb,qBAAC;MAAO,SAAS;MAAY,WAAU;iBACrC,oBAAC,aAAU,WAAU,YAAY;OAE1B,EAET,qBAAC;MACC,eAAgB,OAAO,SAAS,OAAO;MACvC,SAAQ;MACR,WAAU;iBAEV,oBAAC,QAAK,WAAU,YAAY;OAErB;MACL;IAEL;;IAGG;GACF;;AAIV,IAAa,gBAAb,cAAmC,MAAM,UAGvC;CACA,YAAY,OAA2B;AACrC,QAAM,MAAM;AACZ,OAAK,QAAQ;GACX,UAAU;GACV,OAAO;GACP,SAAS;GACV;;CAGH,OAAO,yBAAyB,OAA2C;AACzE,SAAO;GACL,UAAU;GACV;GACD;;CAGH,kBAAkB,OAAc,WAA4B;EAE1D,MAAM,UAAU,OAAO,KAAK,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC,SAAS,GAAG,CAAC,OAAO,GAAG,EAAE;AAW5E,OAAK,SAAS,EAAE,SAAS,CAAC;AAG1B,OAAK,MAAM,UAAU,OAAO,UAAU;AAIpC,UAAQ,MAAM,kCAAkC,OAAO,UAAU;;CAIrE,mBAAmB;AACjB,OAAK,SAAS;GACZ,UAAU;GACV,OAAO;GACP,SAAS;GACV,CAAC;;CAGJ,SAAS;AACP,MAAI,KAAK,MAAM,YAAY,KAAK,MAAM,MAGpC,QACE,oBAHwB,KAAK,MAAM,YAAY;GAI7C,OAAO,KAAK,MAAM;GAClB,SAAS,KAAK,MAAM;GACpB,YAAY,KAAK;IACjB;AAIN,SAAO,KAAK,MAAM;;;AAKtB,MAAa,wBAAwB;AACnC,QAAO,MAAM,aAAa,UAAiB;AAEzC,QAAM;IACL,EAAE,CAAC"}
1
+ {"version":3,"file":"ErrorBoundary.js","names":[],"sources":["../../../../ui/organisms/ErrorBoundary/ErrorBoundary.tsx"],"sourcesContent":["'use client';\n\nimport React from 'react';\n// import * as Sentry from '@sentry/nextjs';\nimport { AlertTriangle, RefreshCw, Home } from 'lucide-react';\nimport { Button } from '../../button';\n\ninterface ErrorBoundaryState {\n hasError: boolean;\n error: Error | null;\n errorId: string | null;\n}\n\ninterface ErrorBoundaryProps {\n children: React.ReactNode;\n fallback?: React.ComponentType<ErrorFallbackProps>;\n onError?: (error: Error, errorInfo: React.ErrorInfo) => void;\n}\n\ninterface ErrorFallbackProps {\n error: Error;\n errorId: string | null;\n resetError: () => void;\n}\n\nconst DefaultErrorFallback: React.FC<ErrorFallbackProps> = ({\n error,\n errorId,\n resetError,\n}) => {\n const isDevelopment = process.env.NODE_ENV === 'development';\n\n return (\n <div className=\"flex min-h-screen items-center justify-center bg-gray-50 px-4\">\n <div className=\"w-full max-w-md rounded-lg bg-white p-6 text-center shadow-lg\">\n <div className=\"mb-4 flex justify-center\">\n <AlertTriangle className=\"h-12 w-12 text-red-500\" />\n </div>\n\n <h1 className=\"mb-2 text-2xl font-semibold text-gray-900\">\n Une erreur s'est produite\n </h1>\n\n <p className=\"mb-6 text-gray-600\">\n Nous nous excusons pour ce désagrément. Notre équipe a été notifiée et\n travaille à résoudre le problème.\n </p>\n\n {isDevelopment && (\n <div className=\"mb-6 rounded-md bg-red-50 p-4 text-left\">\n <p className=\"mb-2 text-base font-medium text-red-800\">\n Erreur de développement:\n </p>\n <p className=\"font-mono text-sm break-all text-red-700\">\n {error.message}\n </p>\n {errorId && (\n <p className=\"mt-2 text-sm text-red-600\">ID: {errorId}</p>\n )}\n </div>\n )}\n\n <div className=\"flex flex-col justify-center gap-3 sm:flex-row\">\n <Button onClick={resetError} className=\"flex items-center gap-2\">\n <RefreshCw className=\"h-4 w-4\" />\n Réessayer\n </Button>\n\n <Button\n onClick={() => (window.location.href = '/')}\n variant=\"secondary\"\n className=\"flex items-center gap-2\"\n >\n <Home className=\"h-4 w-4\" />\n Accueil\n </Button>\n </div>\n\n {!isDevelopment && errorId && (\n <p className=\"mt-4 text-sm text-gray-500\">Code d'erreur: {errorId}</p>\n )}\n </div>\n </div>\n );\n};\n\nexport class ErrorBoundary extends React.Component<\n ErrorBoundaryProps,\n ErrorBoundaryState\n> {\n constructor(props: ErrorBoundaryProps) {\n super(props);\n this.state = {\n hasError: false,\n error: null,\n errorId: null,\n };\n }\n\n static getDerivedStateFromError(error: Error): Partial<ErrorBoundaryState> {\n return {\n hasError: true,\n error,\n };\n }\n\n componentDidCatch(error: Error, errorInfo: React.ErrorInfo) {\n // Generate unique error ID\n const errorId = `err_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n\n // Log to Sentry with additional context\n // Sentry.withScope((scope) => {\n // scope.setTag('errorBoundary', true);\n // scope.setContext('errorInfo', { ...errorInfo });\n // scope.setContext('errorId', { errorId });\n // Sentry.captureException(error);\n // });\n\n // Update state with error ID\n this.setState({ errorId });\n\n // Call custom error handler if provided\n this.props.onError?.(error, errorInfo);\n\n // Log to console in development\n if (process.env.NODE_ENV === 'development') {\n console.error('ErrorBoundary caught an error:', error, errorInfo);\n }\n }\n\n resetError = () => {\n this.setState({\n hasError: false,\n error: null,\n errorId: null,\n });\n };\n\n render() {\n if (this.state.hasError && this.state.error) {\n const FallbackComponent = this.props.fallback || DefaultErrorFallback;\n\n return (\n <FallbackComponent\n error={this.state.error}\n errorId={this.state.errorId}\n resetError={this.resetError}\n />\n );\n }\n\n return this.props.children;\n }\n}\n\n// Hook for functional components to trigger error boundary\nexport const useErrorHandler = () => {\n return React.useCallback((error: Error) => {\n // This will be caught by the nearest error boundary\n throw error;\n }, []);\n};\n\nexport type { ErrorBoundaryProps, ErrorFallbackProps };\n"],"mappings":";;;;;;;;AAyBA,MAAM,wBAAsD,EAC1D,OACA,SACA,iBACI;AAGJ,QACE,oBAAC;EAAI,WAAU;YACb,qBAAC;GAAI,WAAU;;IACb,oBAAC;KAAI,WAAU;eACb,oBAAC,iBAAc,WAAU,2BAA2B;MAChD;IAEN,oBAAC;KAAG,WAAU;eAA4C;MAErD;IAEL,oBAAC;KAAE,WAAU;eAAqB;MAG9B;IAGF,qBAAC;KAAI,WAAU;;MACb,oBAAC;OAAE,WAAU;iBAA0C;QAEnD;MACJ,oBAAC;OAAE,WAAU;iBACV,MAAM;QACL;MACH,WACC,qBAAC;OAAE,WAAU;kBAA4B,QAAK;QAAY;;MAExD;IAGR,qBAAC;KAAI,WAAU;gBACb,qBAAC;MAAO,SAAS;MAAY,WAAU;iBACrC,oBAAC,aAAU,WAAU,YAAY;OAE1B,EAET,qBAAC;MACC,eAAgB,OAAO,SAAS,OAAO;MACvC,SAAQ;MACR,WAAU;iBAEV,oBAAC,QAAK,WAAU,YAAY;OAErB;MACL;IAEL;;IAGG;GACF;;AAIV,IAAa,gBAAb,cAAmC,MAAM,UAGvC;CACA,YAAY,OAA2B;AACrC,QAAM,MAAM;AACZ,OAAK,QAAQ;GACX,UAAU;GACV,OAAO;GACP,SAAS;GACV;;CAGH,OAAO,yBAAyB,OAA2C;AACzE,SAAO;GACL,UAAU;GACV;GACD;;CAGH,kBAAkB,OAAc,WAA4B;EAE1D,MAAM,UAAU,OAAO,KAAK,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC,SAAS,GAAG,CAAC,OAAO,GAAG,EAAE;AAW5E,OAAK,SAAS,EAAE,SAAS,CAAC;AAG1B,OAAK,MAAM,UAAU,OAAO,UAAU;AAIpC,UAAQ,MAAM,kCAAkC,OAAO,UAAU;;CAIrE,mBAAmB;AACjB,OAAK,SAAS;GACZ,UAAU;GACV,OAAO;GACP,SAAS;GACV,CAAC;;CAGJ,SAAS;AACP,MAAI,KAAK,MAAM,YAAY,KAAK,MAAM,MAGpC,QACE,oBAHwB,KAAK,MAAM,YAAY;GAI7C,OAAO,KAAK,MAAM;GAClB,SAAS,KAAK,MAAM;GACpB,YAAY,KAAK;IACjB;AAIN,SAAO,KAAK,MAAM;;;AAKtB,MAAa,wBAAwB;AACnC,QAAO,MAAM,aAAa,UAAiB;AAEzC,QAAM;IACL,EAAE,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { ListPageProps } from "./types.js";
2
- import * as react_jsx_runtime266 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime270 from "react/jsx-runtime";
3
3
 
4
4
  //#region ui/organisms/ListPage/ListPage.d.ts
5
5
  declare function ListPage<T>({
@@ -23,7 +23,7 @@ declare function ListPage<T>({
23
23
  renderStats,
24
24
  className,
25
25
  itemClassName
26
- }: ListPageProps<T>): react_jsx_runtime266.JSX.Element;
26
+ }: ListPageProps<T>): react_jsx_runtime270.JSX.Element;
27
27
  //#endregion
28
28
  export { ListPage };
29
29
  //# sourceMappingURL=ListPage.d.ts.map
@@ -3,9 +3,7 @@ import { Card, CardContent } from "../../card.js";
3
3
  import { HStack, VStack } from "../../stack.js";
4
4
  import { Separator } from "../../separator.js";
5
5
  import { Pagination } from "../../atoms/Pagination/Pagination.js";
6
- import "../../atoms/Pagination/index.js";
7
6
  import { SearchAndFilter } from "../../molecules/SearchAndFilter/SearchAndFilter.js";
8
- import "../../molecules/SearchAndFilter/index.js";
9
7
  import React from "react";
10
8
  import { AlertTriangle, Loader2, Plus, RefreshCcw } from "lucide-react";
11
9
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
@@ -1 +1 @@
1
- {"version":3,"file":"ListPage.js","names":["Link"],"sources":["../../../../ui/organisms/ListPage/ListPage.tsx"],"sourcesContent":["import React from 'react';\nimport Link from 'next/link';\nimport { AlertTriangle, Loader2, Plus, RefreshCcw } from 'lucide-react';\nimport { Button } from '../../button';\nimport { Card, CardContent } from '../../card';\nimport { VStack, HStack } from '../../stack';\nimport { Separator } from '../../separator';\nimport { SearchAndFilter } from '../../molecules/SearchAndFilter';\nimport { Pagination } from '../../atoms/Pagination';\nimport type { ListPageProps } from './types';\n\nexport function ListPage<T>({\n title,\n description,\n header,\n items,\n totalItems,\n totalPages,\n isLoading,\n isFetching,\n error,\n listState,\n searchPlaceholder,\n filters = [],\n onRefresh,\n primaryAction,\n toolbar,\n renderItem,\n renderEmpty,\n renderStats,\n className = '',\n itemClassName = '',\n}: ListPageProps<T>) {\n const {\n searchQuery,\n setSearchQuery,\n filters: filterValues,\n setFilter,\n currentPage,\n itemsPerPage,\n setCurrentPage,\n setItemsPerPage,\n } = listState;\n\n // Loading state with no items\n if (isLoading && !items.length) {\n return (\n <VStack className={`space-y-4 md:space-y-6 ${className}`}>\n {header ? (\n header\n ) : (\n <VStack className=\"gap-1\">\n <h1 className=\"text-2xl font-bold md:text-3xl\">{title}</h1>\n {description && (\n <p className=\"text-muted-foreground text-base\">{description}</p>\n )}\n </VStack>\n )}\n\n <div className=\"flex min-h-[400px] items-center justify-center\">\n <Card>\n <CardContent className=\"flex items-center gap-4 p-6\">\n <Loader2 className=\"text-primary h-8 w-8 animate-spin\" />\n <div>\n <h3 className=\"font-medium\">Chargement...</h3>\n <p className=\"text-muted-foreground text-base\">\n Récupération des données en cours\n </p>\n </div>\n </CardContent>\n </Card>\n </div>\n </VStack>\n );\n }\n\n // Error state with no items\n if (error && !items.length) {\n return (\n <VStack className={`space-y-4 md:space-y-6 ${className}`}>\n {header ? (\n header\n ) : (\n <VStack className=\"gap-1\">\n <h1 className=\"text-2xl font-bold md:text-3xl\">{title}</h1>\n {description && (\n <p className=\"text-muted-foreground text-base\">{description}</p>\n )}\n </VStack>\n )}\n\n <div className=\"flex min-h-[400px] items-center justify-center\">\n <Card>\n <CardContent className=\"flex flex-col items-center gap-4 p-6 text-center\">\n <AlertTriangle className=\"text-destructive h-12 w-12\" />\n <div>\n <h3 className=\"font-medium\">Erreur de chargement</h3>\n <p className=\"text-muted-foreground text-base\">\n {error.message || 'Une erreur est survenue'}\n </p>\n </div>\n {onRefresh && (\n <Button onClick={onRefresh} variant=\"outline\" size=\"sm\">\n <RefreshCcw className=\"mr-2 h-4 w-4\" />\n Réessayer\n </Button>\n )}\n </CardContent>\n </Card>\n </div>\n </VStack>\n );\n }\n\n // Prepare filter configurations\n const filterConfigs = filters.map((filter) => ({\n key: filter.key,\n label: filter.label,\n value: filterValues[filter.key] || '',\n options: filter.options,\n onChange: (value: string) => {\n setFilter(filter.key, value === 'all' ? '' : value);\n },\n showCounts: filter.showCounts,\n }));\n\n return (\n <VStack className={`space-y-4 md:space-y-6 ${className}`}>\n {/* Header */}\n {header ? (\n header\n ) : (\n <HStack className=\"items-center justify-between\">\n <VStack className=\"gap-1\">\n <h1 className=\"text-2xl font-bold md:text-3xl\">{title}</h1>\n {description && (\n <p className=\"text-muted-foreground text-base\">{description}</p>\n )}\n </VStack>\n\n <HStack className=\"items-center gap-4\">\n {toolbar}\n {(isLoading || isFetching) && (\n <div className=\"text-muted-foreground flex items-center gap-2 text-base\">\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n <span className=\"hidden sm:inline\">Mise à jour...</span>\n </div>\n )}\n\n {onRefresh && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={onRefresh}\n disabled={Boolean(isLoading)}\n aria-label=\"Rafraîchir\"\n >\n <RefreshCcw\n className={`mr-2 h-4 w-4 ${isLoading || isFetching ? 'animate-spin' : ''}`}\n />\n <span className=\"hidden sm:inline\">Rafraîchir</span>\n </Button>\n )}\n\n {primaryAction && (\n <>\n {primaryAction.href ? (\n <Link href={primaryAction.href}>\n <Button>\n {primaryAction.icon || <Plus className=\"mr-2 h-4 w-4\" />}\n <span className=\"hidden sm:inline\">\n {primaryAction.label}\n </span>\n <span className=\"sm:hidden\">Nouveau</span>\n </Button>\n </Link>\n ) : (\n <Button onClick={primaryAction.onClick}>\n {primaryAction.icon || <Plus className=\"mr-2 h-4 w-4\" />}\n <span className=\"hidden sm:inline\">\n {primaryAction.label}\n </span>\n <span className=\"sm:hidden\">Nouveau</span>\n </Button>\n )}\n </>\n )}\n </HStack>\n </HStack>\n )}\n\n {/* Stats (optional) */}\n {renderStats && (\n <>\n {renderStats(items)}\n <Separator />\n </>\n )}\n\n {/* Search and Filters */}\n <SearchAndFilter\n searchValue={searchQuery}\n onSearchChange={setSearchQuery}\n searchPlaceholder={searchPlaceholder}\n filters={filterConfigs}\n isLoading={isLoading}\n />\n\n {/* Content */}\n {items.length === 0 && !isLoading ? (\n renderEmpty ? (\n renderEmpty()\n ) : (\n <Card>\n <CardContent className=\"flex flex-col items-center gap-4 p-8 text-center\">\n <div className=\"bg-muted flex h-12 w-12 items-center justify-center rounded-full\">\n <div className=\"bg-muted-foreground/20 h-6 w-6 rounded-full\" />\n </div>\n <div>\n <h3 className=\"font-medium\">Aucun élément trouvé</h3>\n <p className=\"text-muted-foreground text-base\">\n {searchQuery || Object.values(filterValues).some((v) => v)\n ? 'Essayez de modifier vos critères de recherche'\n : 'Commencez par créer votre premier élément'}\n </p>\n </div>\n {primaryAction &&\n !searchQuery &&\n !Object.values(filterValues).some((v) => v) && (\n <>\n {primaryAction.href ? (\n <Link href={primaryAction.href}>\n <Button>\n {primaryAction.icon || (\n <Plus className=\"mr-2 h-4 w-4\" />\n )}\n {primaryAction.label}\n </Button>\n </Link>\n ) : (\n <Button onClick={primaryAction.onClick}>\n {primaryAction.icon || (\n <Plus className=\"mr-2 h-4 w-4\" />\n )}\n {primaryAction.label}\n </Button>\n )}\n </>\n )}\n </CardContent>\n </Card>\n )\n ) : (\n <>\n {/* Items List */}\n <div className={`space-y-4 ${itemClassName}`}>\n {items.map((item, index) => renderItem(item, index))}\n </div>\n\n {/* Pagination */}\n {totalPages > 1 && (\n <Pagination\n currentPage={currentPage}\n totalPages={totalPages}\n totalItems={totalItems}\n itemsPerPage={itemsPerPage}\n onPageChange={setCurrentPage}\n onItemsPerPageChange={setItemsPerPage}\n disabled={isLoading}\n />\n )}\n </>\n )}\n </VStack>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ListPage.js","names":["Link"],"sources":["../../../../ui/organisms/ListPage/ListPage.tsx"],"sourcesContent":["import React from 'react';\nimport Link from 'next/link';\nimport { AlertTriangle, Loader2, Plus, RefreshCcw } from 'lucide-react';\nimport { Button } from '../../button';\nimport { Card, CardContent } from '../../card';\nimport { VStack, HStack } from '../../stack';\nimport { Separator } from '../../separator';\nimport { SearchAndFilter } from '../../molecules/SearchAndFilter';\nimport { Pagination } from '../../atoms/Pagination';\nimport type { ListPageProps } from './types';\n\nexport function ListPage<T>({\n title,\n description,\n header,\n items,\n totalItems,\n totalPages,\n isLoading,\n isFetching,\n error,\n listState,\n searchPlaceholder,\n filters = [],\n onRefresh,\n primaryAction,\n toolbar,\n renderItem,\n renderEmpty,\n renderStats,\n className = '',\n itemClassName = '',\n}: ListPageProps<T>) {\n const {\n searchQuery,\n setSearchQuery,\n filters: filterValues,\n setFilter,\n currentPage,\n itemsPerPage,\n setCurrentPage,\n setItemsPerPage,\n } = listState;\n\n // Loading state with no items\n if (isLoading && !items.length) {\n return (\n <VStack className={`space-y-4 md:space-y-6 ${className}`}>\n {header ? (\n header\n ) : (\n <VStack className=\"gap-1\">\n <h1 className=\"text-2xl font-bold md:text-3xl\">{title}</h1>\n {description && (\n <p className=\"text-muted-foreground text-base\">{description}</p>\n )}\n </VStack>\n )}\n\n <div className=\"flex min-h-[400px] items-center justify-center\">\n <Card>\n <CardContent className=\"flex items-center gap-4 p-6\">\n <Loader2 className=\"text-primary h-8 w-8 animate-spin\" />\n <div>\n <h3 className=\"font-medium\">Chargement...</h3>\n <p className=\"text-muted-foreground text-base\">\n Récupération des données en cours\n </p>\n </div>\n </CardContent>\n </Card>\n </div>\n </VStack>\n );\n }\n\n // Error state with no items\n if (error && !items.length) {\n return (\n <VStack className={`space-y-4 md:space-y-6 ${className}`}>\n {header ? (\n header\n ) : (\n <VStack className=\"gap-1\">\n <h1 className=\"text-2xl font-bold md:text-3xl\">{title}</h1>\n {description && (\n <p className=\"text-muted-foreground text-base\">{description}</p>\n )}\n </VStack>\n )}\n\n <div className=\"flex min-h-[400px] items-center justify-center\">\n <Card>\n <CardContent className=\"flex flex-col items-center gap-4 p-6 text-center\">\n <AlertTriangle className=\"text-destructive h-12 w-12\" />\n <div>\n <h3 className=\"font-medium\">Erreur de chargement</h3>\n <p className=\"text-muted-foreground text-base\">\n {error.message || 'Une erreur est survenue'}\n </p>\n </div>\n {onRefresh && (\n <Button onClick={onRefresh} variant=\"outline\" size=\"sm\">\n <RefreshCcw className=\"mr-2 h-4 w-4\" />\n Réessayer\n </Button>\n )}\n </CardContent>\n </Card>\n </div>\n </VStack>\n );\n }\n\n // Prepare filter configurations\n const filterConfigs = filters.map((filter) => ({\n key: filter.key,\n label: filter.label,\n value: filterValues[filter.key] || '',\n options: filter.options,\n onChange: (value: string) => {\n setFilter(filter.key, value === 'all' ? '' : value);\n },\n showCounts: filter.showCounts,\n }));\n\n return (\n <VStack className={`space-y-4 md:space-y-6 ${className}`}>\n {/* Header */}\n {header ? (\n header\n ) : (\n <HStack className=\"items-center justify-between\">\n <VStack className=\"gap-1\">\n <h1 className=\"text-2xl font-bold md:text-3xl\">{title}</h1>\n {description && (\n <p className=\"text-muted-foreground text-base\">{description}</p>\n )}\n </VStack>\n\n <HStack className=\"items-center gap-4\">\n {toolbar}\n {(isLoading || isFetching) && (\n <div className=\"text-muted-foreground flex items-center gap-2 text-base\">\n <Loader2 className=\"h-4 w-4 animate-spin\" />\n <span className=\"hidden sm:inline\">Mise à jour...</span>\n </div>\n )}\n\n {onRefresh && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={onRefresh}\n disabled={Boolean(isLoading)}\n aria-label=\"Rafraîchir\"\n >\n <RefreshCcw\n className={`mr-2 h-4 w-4 ${isLoading || isFetching ? 'animate-spin' : ''}`}\n />\n <span className=\"hidden sm:inline\">Rafraîchir</span>\n </Button>\n )}\n\n {primaryAction && (\n <>\n {primaryAction.href ? (\n <Link href={primaryAction.href}>\n <Button>\n {primaryAction.icon || <Plus className=\"mr-2 h-4 w-4\" />}\n <span className=\"hidden sm:inline\">\n {primaryAction.label}\n </span>\n <span className=\"sm:hidden\">Nouveau</span>\n </Button>\n </Link>\n ) : (\n <Button onClick={primaryAction.onClick}>\n {primaryAction.icon || <Plus className=\"mr-2 h-4 w-4\" />}\n <span className=\"hidden sm:inline\">\n {primaryAction.label}\n </span>\n <span className=\"sm:hidden\">Nouveau</span>\n </Button>\n )}\n </>\n )}\n </HStack>\n </HStack>\n )}\n\n {/* Stats (optional) */}\n {renderStats && (\n <>\n {renderStats(items)}\n <Separator />\n </>\n )}\n\n {/* Search and Filters */}\n <SearchAndFilter\n searchValue={searchQuery}\n onSearchChange={setSearchQuery}\n searchPlaceholder={searchPlaceholder}\n filters={filterConfigs}\n isLoading={isLoading}\n />\n\n {/* Content */}\n {items.length === 0 && !isLoading ? (\n renderEmpty ? (\n renderEmpty()\n ) : (\n <Card>\n <CardContent className=\"flex flex-col items-center gap-4 p-8 text-center\">\n <div className=\"bg-muted flex h-12 w-12 items-center justify-center rounded-full\">\n <div className=\"bg-muted-foreground/20 h-6 w-6 rounded-full\" />\n </div>\n <div>\n <h3 className=\"font-medium\">Aucun élément trouvé</h3>\n <p className=\"text-muted-foreground text-base\">\n {searchQuery || Object.values(filterValues).some((v) => v)\n ? 'Essayez de modifier vos critères de recherche'\n : 'Commencez par créer votre premier élément'}\n </p>\n </div>\n {primaryAction &&\n !searchQuery &&\n !Object.values(filterValues).some((v) => v) && (\n <>\n {primaryAction.href ? (\n <Link href={primaryAction.href}>\n <Button>\n {primaryAction.icon || (\n <Plus className=\"mr-2 h-4 w-4\" />\n )}\n {primaryAction.label}\n </Button>\n </Link>\n ) : (\n <Button onClick={primaryAction.onClick}>\n {primaryAction.icon || (\n <Plus className=\"mr-2 h-4 w-4\" />\n )}\n {primaryAction.label}\n </Button>\n )}\n </>\n )}\n </CardContent>\n </Card>\n )\n ) : (\n <>\n {/* Items List */}\n <div className={`space-y-4 ${itemClassName}`}>\n {items.map((item, index) => renderItem(item, index))}\n </div>\n\n {/* Pagination */}\n {totalPages > 1 && (\n <Pagination\n currentPage={currentPage}\n totalPages={totalPages}\n totalItems={totalItems}\n itemsPerPage={itemsPerPage}\n onPageChange={setCurrentPage}\n onItemsPerPageChange={setItemsPerPage}\n disabled={isLoading}\n />\n )}\n </>\n )}\n </VStack>\n );\n}\n"],"mappings":"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"}
@@ -1,12 +1,12 @@
1
1
  import * as React$1 from "react";
2
- import * as react_jsx_runtime198 from "react/jsx-runtime";
2
+ import * as react_jsx_runtime159 from "react/jsx-runtime";
3
3
  import { VariantProps } from "class-variance-authority";
4
- import * as class_variance_authority_types12 from "class-variance-authority/types";
4
+ import * as class_variance_authority_types10 from "class-variance-authority/types";
5
5
 
6
6
  //#region ui/page-header.d.ts
7
7
  declare const headerVariants: (props?: ({
8
8
  spacing?: "sm" | "lg" | "md" | null | undefined;
9
- } & class_variance_authority_types12.ClassProp) | undefined) => string;
9
+ } & class_variance_authority_types10.ClassProp) | undefined) => string;
10
10
  interface PageHeaderProps extends VariantProps<typeof headerVariants> {
11
11
  breadcrumb?: React$1.ReactNode;
12
12
  title: React$1.ReactNode;
@@ -21,7 +21,7 @@ declare function PageHeader({
21
21
  actions,
22
22
  spacing,
23
23
  className
24
- }: PageHeaderProps): react_jsx_runtime198.JSX.Element;
24
+ }: PageHeaderProps): react_jsx_runtime159.JSX.Element;
25
25
  //#endregion
26
26
  export { PageHeader, PageHeaderProps };
27
27
  //# sourceMappingURL=page-header.d.ts.map