@appcorp/shadcn 1.1.99 → 2.0.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 (233) hide show
  1. package/components/app-sidebar.js +16 -23
  2. package/components/audio.js +11 -19
  3. package/components/dashboard.js +27 -65
  4. package/components/drawer-generic.js +20 -28
  5. package/components/enhanced-checkbox.js +10 -57
  6. package/components/enhanced-combobox.js +99 -143
  7. package/components/enhanced-drawer-footer.js +22 -31
  8. package/components/enhanced-drawer-header.js +6 -14
  9. package/components/enhanced-dropzone-impl.d.ts +32 -0
  10. package/components/enhanced-dropzone-impl.js +218 -0
  11. package/components/enhanced-dropzone.d.ts +2 -63
  12. package/components/enhanced-dropzone.js +6 -294
  13. package/components/enhanced-input.js +10 -57
  14. package/components/enhanced-label.js +6 -52
  15. package/components/enhanced-radio.js +12 -20
  16. package/components/enhanced-select.js +13 -61
  17. package/components/enhanced-slider.js +11 -58
  18. package/components/enhanced-switch.js +11 -58
  19. package/components/enhanced-table-footer-action.js +11 -19
  20. package/components/enhanced-table-footer-page.js +16 -24
  21. package/components/enhanced-table-footer-pagination.js +11 -21
  22. package/components/enhanced-table-header-action.js +22 -30
  23. package/components/enhanced-table-header-search.js +9 -17
  24. package/components/enhanced-table.js +125 -153
  25. package/components/enhanced-textarea.js +10 -57
  26. package/components/field.d.ts +1 -1
  27. package/components/field.js +31 -88
  28. package/components/image-resize-dialog.js +61 -159
  29. package/components/nav-main.js +32 -78
  30. package/components/nav-projects.js +37 -48
  31. package/components/nav-user.js +41 -51
  32. package/components/show-toast.d.ts +2 -0
  33. package/components/show-toast.js +7 -0
  34. package/components/sidebar.d.ts +1 -1
  35. package/components/sidebar.js +115 -184
  36. package/components/team-switcher.js +36 -47
  37. package/components/theme-provider.js +36 -84
  38. package/components/timeline.d.ts +12 -0
  39. package/components/timeline.js +13 -0
  40. package/components/tooltip.js +10 -59
  41. package/components/ui/accordion.js +17 -67
  42. package/components/ui/alert-dialog.js +32 -89
  43. package/components/ui/alert.d.ts +1 -1
  44. package/components/ui/alert.js +14 -63
  45. package/components/ui/area-chart-v1-impl.d.ts +19 -0
  46. package/components/ui/area-chart-v1-impl.js +75 -0
  47. package/components/ui/area-chart-v1.d.ts +2 -19
  48. package/components/ui/area-chart-v1.js +4 -113
  49. package/components/ui/aspect-ratio.js +3 -39
  50. package/components/ui/avatar.js +13 -62
  51. package/components/ui/badge.d.ts +2 -2
  52. package/components/ui/badge.js +7 -55
  53. package/components/ui/breadcrumb.js +27 -80
  54. package/components/ui/button.d.ts +2 -2
  55. package/components/ui/button.js +10 -58
  56. package/components/ui/calendar-impl.d.ts +8 -0
  57. package/components/ui/calendar-impl.js +55 -0
  58. package/components/ui/calendar.d.ts +2 -8
  59. package/components/ui/calendar.js +5 -108
  60. package/components/ui/card.js +21 -73
  61. package/components/ui/carousel-impl.d.ts +18 -0
  62. package/components/ui/carousel-impl.js +117 -0
  63. package/components/ui/carousel.d.ts +6 -18
  64. package/components/ui/carousel.js +8 -170
  65. package/components/ui/chart-impl.d.ts +62 -0
  66. package/components/ui/chart-impl.js +162 -0
  67. package/components/ui/chart.d.ts +7 -62
  68. package/components/ui/chart.js +9 -219
  69. package/components/ui/checkbox.js +10 -57
  70. package/components/ui/collapsible.js +5 -43
  71. package/components/ui/combobox.js +22 -58
  72. package/components/ui/command-impl.d.ts +80 -0
  73. package/components/ui/command-impl.js +63 -0
  74. package/components/ui/command.d.ts +9 -80
  75. package/components/ui/command.js +12 -117
  76. package/components/ui/context-menu.js +41 -102
  77. package/components/ui/dialog.js +28 -84
  78. package/components/ui/drawer-impl.d.ts +22 -0
  79. package/components/ui/drawer-impl.js +56 -0
  80. package/components/ui/drawer.d.ts +10 -22
  81. package/components/ui/drawer.js +13 -111
  82. package/components/ui/dropdown-menu.js +41 -102
  83. package/components/ui/form.d.ts +4 -2
  84. package/components/ui/form.js +41 -95
  85. package/components/ui/hover-card.js +9 -58
  86. package/components/ui/input-otp-impl.d.ts +34 -0
  87. package/components/ui/input-otp-impl.js +43 -0
  88. package/components/ui/input-otp.d.ts +4 -34
  89. package/components/ui/input-otp.js +7 -92
  90. package/components/ui/input.js +6 -53
  91. package/components/ui/label.d.ts +1 -1
  92. package/components/ui/label.js +9 -56
  93. package/components/ui/language-selector.js +17 -55
  94. package/components/ui/menubar.js +46 -108
  95. package/components/ui/navigation-menu.d.ts +1 -1
  96. package/components/ui/navigation-menu.js +29 -84
  97. package/components/ui/pagination.js +30 -83
  98. package/components/ui/popover.js +10 -60
  99. package/components/ui/progress.js +8 -55
  100. package/components/ui/radio-group.js +12 -60
  101. package/components/ui/resizable-impl.d.ts +24 -0
  102. package/components/ui/resizable-impl.js +27 -0
  103. package/components/ui/resizable.d.ts +3 -24
  104. package/components/ui/resizable.js +6 -78
  105. package/components/ui/scroll-area.js +10 -58
  106. package/components/ui/select.js +34 -90
  107. package/components/ui/separator.js +7 -54
  108. package/components/ui/sheet.d.ts +1 -1
  109. package/components/ui/sheet.js +30 -86
  110. package/components/ui/skeleton.js +5 -21
  111. package/components/ui/slider.js +10 -57
  112. package/components/ui/sonner.js +7 -24
  113. package/components/ui/switch.js +8 -55
  114. package/components/ui/table.js +27 -81
  115. package/components/ui/tabs.js +14 -64
  116. package/components/ui/textarea.js +6 -53
  117. package/components/ui/theme-switcher.js +41 -91
  118. package/components/ui/toggle.d.ts +2 -2
  119. package/components/ui/toggle.js +9 -57
  120. package/data/admin-dashboard.js +16 -19
  121. package/hooks/use-enhanced-combobox.js +47 -124
  122. package/hooks/use-mobile.js +8 -44
  123. package/hooks/use-outside-click.js +6 -10
  124. package/lib/themes.js +1 -4
  125. package/lib/toast-utils.js +78 -120
  126. package/lib/utils.js +4 -11
  127. package/package.json +9 -90
  128. package/utils/transform-breadcrumbs.js +4 -8
  129. package/utils/transform-navitems.js +7 -22
  130. package/components/aceternity-ui/apple-cards-carousel.d.ts +0 -35
  131. package/components/aceternity-ui/apple-cards-carousel.js +0 -263
  132. package/components/shadcn-example/ai-chat/chat-interface.d.ts +0 -11
  133. package/components/shadcn-example/ai-chat/chat-interface.js +0 -70
  134. package/components/shadcn-example/ai-chat/index.d.ts +0 -38
  135. package/components/shadcn-example/ai-chat/index.js +0 -66
  136. package/components/shadcn-example/ai-chat/sidebar.d.ts +0 -15
  137. package/components/shadcn-example/ai-chat/sidebar.js +0 -68
  138. package/components/shadcn-example/ai-chat/welcome-section.d.ts +0 -12
  139. package/components/shadcn-example/ai-chat/welcome-section.js +0 -26
  140. package/components/shadcn-example/authentication/index.d.ts +0 -24
  141. package/components/shadcn-example/authentication/index.js +0 -59
  142. package/components/shadcn-example/authentication/user-auth-form.d.ts +0 -11
  143. package/components/shadcn-example/authentication/user-auth-form.js +0 -54
  144. package/components/shadcn-example/blog-detail-page/comment-section.d.ts +0 -15
  145. package/components/shadcn-example/blog-detail-page/comment-section.js +0 -83
  146. package/components/shadcn-example/blog-detail-page/content.d.ts +0 -7
  147. package/components/shadcn-example/blog-detail-page/content.js +0 -15
  148. package/components/shadcn-example/blog-detail-page/header.d.ts +0 -11
  149. package/components/shadcn-example/blog-detail-page/header.js +0 -36
  150. package/components/shadcn-example/blog-detail-page/index.d.ts +0 -25
  151. package/components/shadcn-example/blog-detail-page/index.js +0 -74
  152. package/components/shadcn-example/blog-page/blog-post-card.d.ts +0 -13
  153. package/components/shadcn-example/blog-page/blog-post-card.js +0 -30
  154. package/components/shadcn-example/blog-page/featured-post-sidebar-item.d.ts +0 -10
  155. package/components/shadcn-example/blog-page/featured-post-sidebar-item.js +0 -19
  156. package/components/shadcn-example/blog-page/index.d.ts +0 -20
  157. package/components/shadcn-example/blog-page/index.js +0 -36
  158. package/components/shadcn-example/coming-soon/countdown.d.ts +0 -2
  159. package/components/shadcn-example/coming-soon/countdown.js +0 -82
  160. package/components/shadcn-example/coming-soon/index.d.ts +0 -10
  161. package/components/shadcn-example/coming-soon/index.js +0 -41
  162. package/components/shadcn-io/color-picker/index.d.ts +0 -43
  163. package/components/shadcn-io/color-picker/index.js +0 -304
  164. package/components/shadcn-io/copy-button/index.d.ts +0 -16
  165. package/components/shadcn-io/copy-button/index.js +0 -121
  166. package/components/shadcn-io/dropzone/index.d.ts +0 -19
  167. package/components/shadcn-io/dropzone/index.js +0 -131
  168. package/components/shadcn-io/gantt/index.d.ts +0 -145
  169. package/components/shadcn-io/gantt/index.js +0 -766
  170. package/components/shadcn-io/table/index.d.ts +0 -60
  171. package/components/shadcn-io/table/index.js +0 -138
  172. package/templates/appcorp-v1/footer/bottom-bar.d.ts +0 -6
  173. package/templates/appcorp-v1/footer/bottom-bar.js +0 -25
  174. package/templates/appcorp-v1/footer/cta.d.ts +0 -6
  175. package/templates/appcorp-v1/footer/cta.js +0 -21
  176. package/templates/appcorp-v1/footer/footer-grid.d.ts +0 -14
  177. package/templates/appcorp-v1/footer/footer-grid.js +0 -52
  178. package/templates/appcorp-v1/footer/index.d.ts +0 -3
  179. package/templates/appcorp-v1/footer/index.js +0 -28
  180. package/templates/appcorp-v1/footer/newsletter.d.ts +0 -11
  181. package/templates/appcorp-v1/footer/newsletter.js +0 -28
  182. package/templates/appcorp-v1/footer/stats.d.ts +0 -6
  183. package/templates/appcorp-v1/footer/stats.js +0 -15
  184. package/templates/appcorp-v1/header/announcement-bar.d.ts +0 -3
  185. package/templates/appcorp-v1/header/announcement-bar.js +0 -15
  186. package/templates/appcorp-v1/header/dropdown-panel.d.ts +0 -8
  187. package/templates/appcorp-v1/header/dropdown-panel.js +0 -72
  188. package/templates/appcorp-v1/header/index.d.ts +0 -12
  189. package/templates/appcorp-v1/header/index.js +0 -16
  190. package/templates/appcorp-v1/header/mobile-menu.d.ts +0 -14
  191. package/templates/appcorp-v1/header/mobile-menu.js +0 -101
  192. package/templates/appcorp-v1/header/navigation-bar.d.ts +0 -3
  193. package/templates/appcorp-v1/header/navigation-bar.js +0 -117
  194. package/templates/appcorp-v1/header/social-button.d.ts +0 -7
  195. package/templates/appcorp-v1/header/social-button.js +0 -48
  196. package/templates/appcorp-v1/home.d.ts +0 -3
  197. package/templates/appcorp-v1/home.js +0 -27
  198. package/templates/data/appcorp-v1.d.ts +0 -93
  199. package/templates/data/appcorp-v1.js +0 -348
  200. package/templates/data/edupilotpro-v1.d.ts +0 -33
  201. package/templates/data/edupilotpro-v1.js +0 -116
  202. package/templates/data/school-v1.d.ts +0 -328
  203. package/templates/data/school-v1.js +0 -1563
  204. package/templates/edupilotpro-v1/feature-card.d.ts +0 -13
  205. package/templates/edupilotpro-v1/feature-card.js +0 -28
  206. package/templates/edupilotpro-v1/mockups/dashboard-mockup.d.ts +0 -3
  207. package/templates/edupilotpro-v1/mockups/dashboard-mockup.js +0 -55
  208. package/templates/school-v1/footer.d.ts +0 -3
  209. package/templates/school-v1/footer.js +0 -75
  210. package/templates/school-v1/index.d.ts +0 -18
  211. package/templates/school-v1/index.js +0 -60
  212. package/templates/school-v1/navigation.d.ts +0 -3
  213. package/templates/school-v1/navigation.js +0 -123
  214. package/templates/school-v1/sections/about.d.ts +0 -3
  215. package/templates/school-v1/sections/about.js +0 -49
  216. package/templates/school-v1/sections/admissions.d.ts +0 -3
  217. package/templates/school-v1/sections/admissions.js +0 -77
  218. package/templates/school-v1/sections/contact.d.ts +0 -3
  219. package/templates/school-v1/sections/contact.js +0 -67
  220. package/templates/school-v1/sections/faqs.d.ts +0 -3
  221. package/templates/school-v1/sections/faqs.js +0 -50
  222. package/templates/school-v1/sections/hero.d.ts +0 -3
  223. package/templates/school-v1/sections/hero.js +0 -132
  224. package/templates/school-v1/sections/management.d.ts +0 -3
  225. package/templates/school-v1/sections/management.js +0 -34
  226. package/templates/school-v1/sections/policies.d.ts +0 -3
  227. package/templates/school-v1/sections/policies.js +0 -127
  228. package/templates/school-v1/sections/programs.d.ts +0 -3
  229. package/templates/school-v1/sections/programs.js +0 -107
  230. package/templates/school-v1/sections/testimonials.d.ts +0 -3
  231. package/templates/school-v1/sections/testimonials.js +0 -46
  232. package/templates/school-v1/sections/why-choose-us.d.ts +0 -3
  233. package/templates/school-v1/sections/why-choose-us.js +0 -57
@@ -1,48 +1,3 @@
1
- "use strict";
2
- var __assign = (this && this.__assign) || function () {
3
- __assign = Object.assign || function(t) {
4
- for (var s, i = 1, n = arguments.length; i < n; i++) {
5
- s = arguments[i];
6
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
- t[p] = s[p];
8
- }
9
- return t;
10
- };
11
- return __assign.apply(this, arguments);
12
- };
13
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
- if (k2 === undefined) k2 = k;
15
- var desc = Object.getOwnPropertyDescriptor(m, k);
16
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
17
- desc = { enumerable: true, get: function() { return m[k]; } };
18
- }
19
- Object.defineProperty(o, k2, desc);
20
- }) : (function(o, m, k, k2) {
21
- if (k2 === undefined) k2 = k;
22
- o[k2] = m[k];
23
- }));
24
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
25
- Object.defineProperty(o, "default", { enumerable: true, value: v });
26
- }) : function(o, v) {
27
- o["default"] = v;
28
- });
29
- var __importStar = (this && this.__importStar) || (function () {
30
- var ownKeys = function(o) {
31
- ownKeys = Object.getOwnPropertyNames || function (o) {
32
- var ar = [];
33
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
34
- return ar;
35
- };
36
- return ownKeys(o);
37
- };
38
- return function (mod) {
39
- if (mod && mod.__esModule) return mod;
40
- var result = {};
41
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
42
- __setModuleDefault(result, mod);
43
- return result;
44
- };
45
- })();
46
1
  var __rest = (this && this.__rest) || function (s, e) {
47
2
  var t = {};
48
3
  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
@@ -54,17 +9,15 @@ var __rest = (this && this.__rest) || function (s, e) {
54
9
  }
55
10
  return t;
56
11
  };
57
- Object.defineProperty(exports, "__esModule", { value: true });
58
- exports.EnhancedTextarea = void 0;
59
- var React = __importStar(require("react"));
60
- var utils_1 = require("../lib/utils");
61
- var textarea_1 = require("./ui/textarea");
62
- var enhanced_label_1 = require("./enhanced-label");
63
- var EnhancedTextarea = React.forwardRef(function (_a, ref) {
64
- var className = _a.className, error = _a.error, info = _a.info, label = _a.label, required = _a.required, id = _a.id, testIdWrapper = _a.testIdWrapper, testIdLabel = _a.testIdLabel, testIdTextarea = _a.testIdTextarea, testIdMessage = _a.testIdMessage, testIdError = _a.testIdError, testIdInfo = _a.testIdInfo, props = __rest(_a, ["className", "error", "info", "label", "required", "id", "testIdWrapper", "testIdLabel", "testIdTextarea", "testIdMessage", "testIdError", "testIdInfo"]);
12
+ import * as React from "react";
13
+ import { cn } from "../lib/utils";
14
+ import { Textarea } from "./ui/textarea";
15
+ import { EnhancedLabel } from "./enhanced-label";
16
+ const EnhancedTextarea = React.forwardRef((_a, ref) => {
17
+ var { className, error, info, label, required, id, testIdWrapper, testIdLabel, testIdTextarea, testIdMessage, testIdError, testIdInfo } = _a, props = __rest(_a, ["className", "error", "info", "label", "required", "id", "testIdWrapper", "testIdLabel", "testIdTextarea", "testIdMessage", "testIdError", "testIdInfo"]);
65
18
  // Determine if there's an error (for aria-invalid and styling)
66
- var hasError = Boolean(error);
67
- var textareaElement = (React.createElement(textarea_1.Textarea, __assign({ ref: ref, id: id, "data-testid": testIdTextarea, "aria-invalid": hasError, required: required, className: (0, utils_1.cn)(
19
+ const hasError = Boolean(error);
20
+ const textareaElement = (React.createElement(Textarea, Object.assign({ ref: ref, id: id, "data-testid": testIdTextarea, "aria-invalid": hasError, required: required, className: cn(
68
21
  // Error state styling
69
22
  hasError &&
70
23
  "border-destructive focus-visible:border-destructive focus-visible:ring-destructive/20",
@@ -74,7 +27,7 @@ var EnhancedTextarea = React.forwardRef(function (_a, ref) {
74
27
  // If label is provided, render the complete textarea with label structure
75
28
  if (label) {
76
29
  return (React.createElement("div", { className: "w-full space-y-2", "data-testid": testIdWrapper },
77
- React.createElement(enhanced_label_1.EnhancedLabel, { htmlFor: id, required: required, testIdLabel: testIdLabel }, label),
30
+ React.createElement(EnhancedLabel, { htmlFor: id, required: required, testIdLabel: testIdLabel }, label),
78
31
  textareaElement,
79
32
  (error || info) && (React.createElement("div", { "data-testid": testIdMessage }, error ? (React.createElement("p", { className: "text-xs text-destructive", "data-testid": testIdError }, error)) : info ? (React.createElement("p", { className: "text-xs text-blue-600 dark:text-blue-400", "data-testid": testIdInfo }, info)) : null))));
80
33
  }
@@ -83,5 +36,5 @@ var EnhancedTextarea = React.forwardRef(function (_a, ref) {
83
36
  textareaElement,
84
37
  (error || info) && (React.createElement("div", { "data-testid": testIdMessage }, error ? (React.createElement("p", { className: "text-xs text-destructive", "data-testid": testIdError }, error)) : info ? (React.createElement("p", { className: "text-xs text-blue-600 dark:text-blue-400", "data-testid": testIdInfo }, info)) : null))));
85
38
  });
86
- exports.EnhancedTextarea = EnhancedTextarea;
87
39
  EnhancedTextarea.displayName = "EnhancedTextarea";
40
+ export { EnhancedTextarea };
@@ -8,7 +8,7 @@ declare function FieldLegend({ className, variant, ...props }: React.ComponentPr
8
8
  declare function FieldGroup({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
9
9
  declare const fieldVariants: (props?: ({
10
10
  orientation?: "horizontal" | "vertical" | "responsive" | null | undefined;
11
- } & import("class-variance-authority/dist/types").ClassProp) | undefined) => string;
11
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
12
12
  declare function Field({ className, orientation, ...props }: React.ComponentProps<"div"> & VariantProps<typeof fieldVariants>): React.JSX.Element;
13
13
  declare function FieldContent({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
14
14
  declare function FieldLabel({ className, ...props }: React.ComponentProps<typeof Label>): React.JSX.Element;
@@ -1,49 +1,4 @@
1
1
  "use client";
2
- "use strict";
3
- var __assign = (this && this.__assign) || function () {
4
- __assign = Object.assign || function(t) {
5
- for (var s, i = 1, n = arguments.length; i < n; i++) {
6
- s = arguments[i];
7
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
8
- t[p] = s[p];
9
- }
10
- return t;
11
- };
12
- return __assign.apply(this, arguments);
13
- };
14
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
15
- if (k2 === undefined) k2 = k;
16
- var desc = Object.getOwnPropertyDescriptor(m, k);
17
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
18
- desc = { enumerable: true, get: function() { return m[k]; } };
19
- }
20
- Object.defineProperty(o, k2, desc);
21
- }) : (function(o, m, k, k2) {
22
- if (k2 === undefined) k2 = k;
23
- o[k2] = m[k];
24
- }));
25
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
26
- Object.defineProperty(o, "default", { enumerable: true, value: v });
27
- }) : function(o, v) {
28
- o["default"] = v;
29
- });
30
- var __importStar = (this && this.__importStar) || (function () {
31
- var ownKeys = function(o) {
32
- ownKeys = Object.getOwnPropertyNames || function (o) {
33
- var ar = [];
34
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
35
- return ar;
36
- };
37
- return ownKeys(o);
38
- };
39
- return function (mod) {
40
- if (mod && mod.__esModule) return mod;
41
- var result = {};
42
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
43
- __setModuleDefault(result, mod);
44
- return result;
45
- };
46
- })();
47
2
  var __rest = (this && this.__rest) || function (s, e) {
48
3
  var t = {};
49
4
  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
@@ -55,35 +10,24 @@ var __rest = (this && this.__rest) || function (s, e) {
55
10
  }
56
11
  return t;
57
12
  };
58
- Object.defineProperty(exports, "__esModule", { value: true });
59
- exports.Field = Field;
60
- exports.FieldLabel = FieldLabel;
61
- exports.FieldDescription = FieldDescription;
62
- exports.FieldError = FieldError;
63
- exports.FieldGroup = FieldGroup;
64
- exports.FieldLegend = FieldLegend;
65
- exports.FieldSeparator = FieldSeparator;
66
- exports.FieldSet = FieldSet;
67
- exports.FieldContent = FieldContent;
68
- exports.FieldTitle = FieldTitle;
69
- var react_1 = __importStar(require("react"));
70
- var class_variance_authority_1 = require("class-variance-authority");
71
- var utils_1 = require("../lib/utils");
72
- var label_1 = require("./ui/label");
73
- var separator_1 = require("./ui/separator");
13
+ import React, { useMemo } from "react";
14
+ import { cva } from "class-variance-authority";
15
+ import { cn } from "../lib/utils";
16
+ import { Label } from "./ui/label";
17
+ import { Separator } from "./ui/separator";
74
18
  function FieldSet(_a) {
75
- var className = _a.className, props = __rest(_a, ["className"]);
76
- return (react_1.default.createElement("fieldset", __assign({ "data-slot": "field-set", className: (0, utils_1.cn)("flex flex-col gap-6", "has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3", className) }, props)));
19
+ var { className } = _a, props = __rest(_a, ["className"]);
20
+ return (React.createElement("fieldset", Object.assign({ "data-slot": "field-set", className: cn("flex flex-col gap-6", "has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3", className) }, props)));
77
21
  }
78
22
  function FieldLegend(_a) {
79
- var className = _a.className, _b = _a.variant, variant = _b === void 0 ? "legend" : _b, props = __rest(_a, ["className", "variant"]);
80
- return (react_1.default.createElement("legend", __assign({ "data-slot": "field-legend", "data-variant": variant, className: (0, utils_1.cn)("mb-3 font-medium", "data-[variant=legend]:text-base", "data-[variant=label]:text-sm", className) }, props)));
23
+ var { className, variant = "legend" } = _a, props = __rest(_a, ["className", "variant"]);
24
+ return (React.createElement("legend", Object.assign({ "data-slot": "field-legend", "data-variant": variant, className: cn("mb-3 font-medium", "data-[variant=legend]:text-base", "data-[variant=label]:text-sm", className) }, props)));
81
25
  }
82
26
  function FieldGroup(_a) {
83
- var className = _a.className, props = __rest(_a, ["className"]);
84
- return (react_1.default.createElement("div", __assign({ "data-slot": "field-group", className: (0, utils_1.cn)("group/field-group @container/field-group flex w-full flex-col gap-7 data-[slot=checkbox-group]:gap-3 [&>[data-slot=field-group]]:gap-4", className) }, props)));
27
+ var { className } = _a, props = __rest(_a, ["className"]);
28
+ return (React.createElement("div", Object.assign({ "data-slot": "field-group", className: cn("group/field-group @container/field-group flex w-full flex-col gap-7 data-[slot=checkbox-group]:gap-3 [&>[data-slot=field-group]]:gap-4", className) }, props)));
85
29
  }
86
- var fieldVariants = (0, class_variance_authority_1.cva)("group/field data-[invalid=true]:text-destructive flex w-full gap-3", {
30
+ const fieldVariants = cva("group/field data-[invalid=true]:text-destructive flex w-full gap-3", {
87
31
  variants: {
88
32
  orientation: {
89
33
  vertical: ["flex-col [&>*]:w-full [&>.sr-only]:w-auto"],
@@ -104,34 +48,34 @@ var fieldVariants = (0, class_variance_authority_1.cva)("group/field data-[inval
104
48
  },
105
49
  });
106
50
  function Field(_a) {
107
- var className = _a.className, _b = _a.orientation, orientation = _b === void 0 ? "vertical" : _b, props = __rest(_a, ["className", "orientation"]);
108
- return (react_1.default.createElement("div", __assign({ role: "group", "data-slot": "field", "data-orientation": orientation, className: (0, utils_1.cn)(fieldVariants({ orientation: orientation }), className) }, props)));
51
+ var { className, orientation = "vertical" } = _a, props = __rest(_a, ["className", "orientation"]);
52
+ return (React.createElement("div", Object.assign({ role: "group", "data-slot": "field", "data-orientation": orientation, className: cn(fieldVariants({ orientation }), className) }, props)));
109
53
  }
110
54
  function FieldContent(_a) {
111
- var className = _a.className, props = __rest(_a, ["className"]);
112
- return (react_1.default.createElement("div", __assign({ "data-slot": "field-content", className: (0, utils_1.cn)("group/field-content flex flex-1 flex-col gap-1.5 leading-snug", className) }, props)));
55
+ var { className } = _a, props = __rest(_a, ["className"]);
56
+ return (React.createElement("div", Object.assign({ "data-slot": "field-content", className: cn("group/field-content flex flex-1 flex-col gap-1.5 leading-snug", className) }, props)));
113
57
  }
114
58
  function FieldLabel(_a) {
115
- var className = _a.className, props = __rest(_a, ["className"]);
116
- return (react_1.default.createElement(label_1.Label, __assign({ "data-slot": "field-label", className: (0, utils_1.cn)("group/field-label peer/field-label flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-50", "has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col has-[>[data-slot=field]]:rounded-md has-[>[data-slot=field]]:border [&>[data-slot=field]]:p-4", "has-data-[state=checked]:bg-primary/5 has-data-[state=checked]:border-primary dark:has-data-[state=checked]:bg-primary/10", className) }, props)));
59
+ var { className } = _a, props = __rest(_a, ["className"]);
60
+ return (React.createElement(Label, Object.assign({ "data-slot": "field-label", className: cn("group/field-label peer/field-label flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-50", "has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col has-[>[data-slot=field]]:rounded-md has-[>[data-slot=field]]:border [&>[data-slot=field]]:p-4", "has-data-[state=checked]:bg-primary/5 has-data-[state=checked]:border-primary dark:has-data-[state=checked]:bg-primary/10", className) }, props)));
117
61
  }
118
62
  function FieldTitle(_a) {
119
- var className = _a.className, props = __rest(_a, ["className"]);
120
- return (react_1.default.createElement("div", __assign({ "data-slot": "field-label", className: (0, utils_1.cn)("flex w-fit items-center gap-2 text-sm font-medium leading-snug group-data-[disabled=true]/field:opacity-50", className) }, props)));
63
+ var { className } = _a, props = __rest(_a, ["className"]);
64
+ return (React.createElement("div", Object.assign({ "data-slot": "field-label", className: cn("flex w-fit items-center gap-2 text-sm font-medium leading-snug group-data-[disabled=true]/field:opacity-50", className) }, props)));
121
65
  }
122
66
  function FieldDescription(_a) {
123
- var className = _a.className, props = __rest(_a, ["className"]);
124
- return (react_1.default.createElement("p", __assign({ "data-slot": "field-description", className: (0, utils_1.cn)("text-muted-foreground text-sm font-normal leading-normal group-has-[[data-orientation=horizontal]]/field:text-balance", "nth-last-2:-mt-1 last:mt-0 [[data-variant=legend]+&]:-mt-1.5", "[&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4", className) }, props)));
67
+ var { className } = _a, props = __rest(_a, ["className"]);
68
+ return (React.createElement("p", Object.assign({ "data-slot": "field-description", className: cn("text-muted-foreground text-sm font-normal leading-normal group-has-[[data-orientation=horizontal]]/field:text-balance", "nth-last-2:-mt-1 last:mt-0 [[data-variant=legend]+&]:-mt-1.5", "[&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4", className) }, props)));
125
69
  }
126
70
  function FieldSeparator(_a) {
127
- var children = _a.children, className = _a.className, props = __rest(_a, ["children", "className"]);
128
- return (react_1.default.createElement("div", __assign({ "data-slot": "field-separator", "data-content": !!children, className: (0, utils_1.cn)("relative -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2", className) }, props),
129
- react_1.default.createElement(separator_1.Separator, { className: "absolute inset-0 top-1/2" }),
130
- children && (react_1.default.createElement("span", { className: "bg-background text-muted-foreground relative mx-auto block w-fit px-2", "data-slot": "field-separator-content" }, children))));
71
+ var { children, className } = _a, props = __rest(_a, ["children", "className"]);
72
+ return (React.createElement("div", Object.assign({ "data-slot": "field-separator", "data-content": !!children, className: cn("relative -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2", className) }, props),
73
+ React.createElement(Separator, { className: "absolute inset-0 top-1/2" }),
74
+ children && (React.createElement("span", { className: "bg-background text-muted-foreground relative mx-auto block w-fit px-2", "data-slot": "field-separator-content" }, children))));
131
75
  }
132
76
  function FieldError(_a) {
133
- var className = _a.className, children = _a.children, errors = _a.errors, props = __rest(_a, ["className", "children", "errors"]);
134
- var content = (0, react_1.useMemo)(function () {
77
+ var { className, children, errors } = _a, props = __rest(_a, ["className", "children", "errors"]);
78
+ const content = useMemo(() => {
135
79
  var _a;
136
80
  if (children) {
137
81
  return children;
@@ -142,12 +86,11 @@ function FieldError(_a) {
142
86
  if ((errors === null || errors === void 0 ? void 0 : errors.length) === 1 && ((_a = errors[0]) === null || _a === void 0 ? void 0 : _a.message)) {
143
87
  return errors[0].message;
144
88
  }
145
- return (react_1.default.createElement("ul", { className: "ml-4 flex list-disc flex-col gap-1" }, errors.map(function (error, index) {
146
- return (error === null || error === void 0 ? void 0 : error.message) && react_1.default.createElement("li", { key: index }, error.message);
147
- })));
89
+ return (React.createElement("ul", { className: "ml-4 flex list-disc flex-col gap-1" }, errors.map((error, index) => (error === null || error === void 0 ? void 0 : error.message) && React.createElement("li", { key: index }, error.message))));
148
90
  }, [children, errors]);
149
91
  if (!content) {
150
92
  return null;
151
93
  }
152
- return (react_1.default.createElement("div", __assign({ role: "alert", "data-slot": "field-error", className: (0, utils_1.cn)("text-destructive text-sm font-normal", className) }, props), content));
94
+ return (React.createElement("div", Object.assign({ role: "alert", "data-slot": "field-error", className: cn("text-destructive text-sm font-normal", className) }, props), content));
153
95
  }
96
+ export { Field, FieldLabel, FieldDescription, FieldError, FieldGroup, FieldLegend, FieldSeparator, FieldSet, FieldContent, FieldTitle, };
@@ -1,129 +1,44 @@
1
1
  "use client";
2
- "use strict";
3
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
- if (k2 === undefined) k2 = k;
5
- var desc = Object.getOwnPropertyDescriptor(m, k);
6
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
- desc = { enumerable: true, get: function() { return m[k]; } };
8
- }
9
- Object.defineProperty(o, k2, desc);
10
- }) : (function(o, m, k, k2) {
11
- if (k2 === undefined) k2 = k;
12
- o[k2] = m[k];
13
- }));
14
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
- Object.defineProperty(o, "default", { enumerable: true, value: v });
16
- }) : function(o, v) {
17
- o["default"] = v;
18
- });
19
- var __importStar = (this && this.__importStar) || (function () {
20
- var ownKeys = function(o) {
21
- ownKeys = Object.getOwnPropertyNames || function (o) {
22
- var ar = [];
23
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
- return ar;
25
- };
26
- return ownKeys(o);
27
- };
28
- return function (mod) {
29
- if (mod && mod.__esModule) return mod;
30
- var result = {};
31
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
- __setModuleDefault(result, mod);
33
- return result;
34
- };
35
- })();
36
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
37
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
38
- return new (P || (P = Promise))(function (resolve, reject) {
39
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
40
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
41
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
42
- step((generator = generator.apply(thisArg, _arguments || [])).next());
43
- });
44
- };
45
- var __generator = (this && this.__generator) || function (thisArg, body) {
46
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
47
- return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
48
- function verb(n) { return function (v) { return step([n, v]); }; }
49
- function step(op) {
50
- if (f) throw new TypeError("Generator is already executing.");
51
- while (g && (g = 0, op[0] && (_ = 0)), _) try {
52
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
53
- if (y = 0, t) op = [op[0] & 2, t.value];
54
- switch (op[0]) {
55
- case 0: case 1: t = op; break;
56
- case 4: _.label++; return { value: op[1], done: false };
57
- case 5: _.label++; y = op[1]; op = [0]; continue;
58
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
59
- default:
60
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
61
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
62
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
63
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
64
- if (t[2]) _.ops.pop();
65
- _.trys.pop(); continue;
66
- }
67
- op = body.call(thisArg, _);
68
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
69
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
70
- }
71
- };
72
- var __importDefault = (this && this.__importDefault) || function (mod) {
73
- return (mod && mod.__esModule) ? mod : { "default": mod };
74
- };
75
- Object.defineProperty(exports, "__esModule", { value: true });
76
- exports.ImageResizeDialog = void 0;
77
- var react_1 = __importStar(require("react"));
78
- var react_easy_crop_1 = __importDefault(require("react-easy-crop"));
79
- var dialog_1 = require("./ui/dialog");
80
- var button_1 = require("./ui/button");
81
- var slider_1 = require("./ui/slider");
2
+ import React, { Suspense, useCallback, useState } from "react";
3
+ import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "./ui/dialog";
4
+ import { Button } from "./ui/button";
5
+ import { Slider } from "./ui/slider";
6
+ const Cropper = React.lazy(() => import("react-easy-crop"));
82
7
  /**
83
8
  * Create a cropped image from the provided source and crop area.
84
9
  */
85
- function getCroppedImg(imageSrc_1, pixelCrop_1) {
86
- return __awaiter(this, arguments, void 0, function (imageSrc, pixelCrop, fileName) {
87
- var image, canvas, ctx;
88
- if (fileName === void 0) { fileName = "cropped-image.jpg"; }
89
- return __generator(this, function (_a) {
90
- switch (_a.label) {
91
- case 0: return [4 /*yield*/, createImage(imageSrc)];
92
- case 1:
93
- image = _a.sent();
94
- canvas = document.createElement("canvas");
95
- ctx = canvas.getContext("2d");
96
- if (!ctx) {
97
- throw new Error("No 2d context");
98
- }
99
- // Set canvas size to match the crop area
100
- canvas.width = pixelCrop.width;
101
- canvas.height = pixelCrop.height;
102
- // Draw the cropped image
103
- ctx.drawImage(image, pixelCrop.x, pixelCrop.y, pixelCrop.width, pixelCrop.height, 0, 0, pixelCrop.width, pixelCrop.height);
104
- // Convert canvas to blob and then to File
105
- return [2 /*return*/, new Promise(function (resolve, reject) {
106
- canvas.toBlob(function (blob) {
107
- if (!blob) {
108
- reject(new Error("Canvas is empty"));
109
- return;
110
- }
111
- var file = new File([blob], fileName, { type: "image/jpeg" });
112
- resolve(file);
113
- }, "image/jpeg");
114
- })];
10
+ async function getCroppedImg(imageSrc, pixelCrop, fileName = "cropped-image.jpg") {
11
+ const image = await createImage(imageSrc);
12
+ const canvas = document.createElement("canvas");
13
+ const ctx = canvas.getContext("2d");
14
+ if (!ctx) {
15
+ throw new Error("No 2d context");
16
+ }
17
+ // Set canvas size to match the crop area
18
+ canvas.width = pixelCrop.width;
19
+ canvas.height = pixelCrop.height;
20
+ // Draw the cropped image
21
+ ctx.drawImage(image, pixelCrop.x, pixelCrop.y, pixelCrop.width, pixelCrop.height, 0, 0, pixelCrop.width, pixelCrop.height);
22
+ // Convert canvas to blob and then to File
23
+ return new Promise((resolve, reject) => {
24
+ canvas.toBlob((blob) => {
25
+ if (!blob) {
26
+ reject(new Error("Canvas is empty"));
27
+ return;
115
28
  }
116
- });
29
+ const file = new File([blob], fileName, { type: "image/jpeg" });
30
+ resolve(file);
31
+ }, "image/jpeg");
117
32
  });
118
33
  }
119
34
  /**
120
35
  * Create an HTMLImageElement from a URL.
121
36
  */
122
37
  function createImage(url) {
123
- return new Promise(function (resolve, reject) {
124
- var image = new Image();
125
- image.addEventListener("load", function () { return resolve(image); });
126
- image.addEventListener("error", function (error) { return reject(error); });
38
+ return new Promise((resolve, reject) => {
39
+ const image = new Image();
40
+ image.addEventListener("load", () => resolve(image));
41
+ image.addEventListener("error", (error) => reject(error));
127
42
  image.src = url;
128
43
  });
129
44
  }
@@ -131,50 +46,37 @@ function createImage(url) {
131
46
  * A dialog component that allows users to crop/resize an image to a square aspect ratio.
132
47
  * Uses react-easy-crop for the cropping functionality.
133
48
  */
134
- var ImageResizeDialog = function (_a) {
135
- var open = _a.open, onClose = _a.onClose, imageUrl = _a.imageUrl, onCropComplete = _a.onCropComplete, _b = _a.fileName, fileName = _b === void 0 ? "cropped-image.jpg" : _b;
136
- var _c = (0, react_1.useState)({ x: 0, y: 0 }), crop = _c[0], setCrop = _c[1];
137
- var _d = (0, react_1.useState)(1), zoom = _d[0], setZoom = _d[1];
138
- var _e = (0, react_1.useState)(null), croppedAreaPixels = _e[0], setCroppedAreaPixels = _e[1];
139
- var handleCropComplete = (0, react_1.useCallback)(function (_croppedArea, croppedAreaPixels) {
49
+ export const ImageResizeDialog = ({ open, onClose, imageUrl, onCropComplete, fileName = "cropped-image.jpg", }) => {
50
+ const [crop, setCrop] = useState({ x: 0, y: 0 });
51
+ const [zoom, setZoom] = useState(1);
52
+ const [croppedAreaPixels, setCroppedAreaPixels] = useState(null);
53
+ const handleCropComplete = useCallback((_croppedArea, croppedAreaPixels) => {
140
54
  setCroppedAreaPixels(croppedAreaPixels);
141
55
  }, []);
142
- var handleSave = (0, react_1.useCallback)(function () { return __awaiter(void 0, void 0, void 0, function () {
143
- var croppedImage, error_1;
144
- return __generator(this, function (_a) {
145
- switch (_a.label) {
146
- case 0:
147
- if (!croppedAreaPixels)
148
- return [2 /*return*/];
149
- _a.label = 1;
150
- case 1:
151
- _a.trys.push([1, 3, , 4]);
152
- return [4 /*yield*/, getCroppedImg(imageUrl, croppedAreaPixels, fileName)];
153
- case 2:
154
- croppedImage = _a.sent();
155
- onCropComplete(croppedImage);
156
- onClose();
157
- return [3 /*break*/, 4];
158
- case 3:
159
- error_1 = _a.sent();
160
- console.error("Failed to crop image:", error_1);
161
- return [3 /*break*/, 4];
162
- case 4: return [2 /*return*/];
163
- }
164
- });
165
- }); }, [croppedAreaPixels, imageUrl, fileName, onCropComplete, onClose]);
166
- return (react_1.default.createElement(dialog_1.Dialog, { open: open, onOpenChange: onClose },
167
- react_1.default.createElement(dialog_1.DialogContent, { className: "max-w-3xl", "data-slot": "image-resize-dialog", "data-testid": "image-resize-dialog" },
168
- react_1.default.createElement(dialog_1.DialogHeader, null,
169
- react_1.default.createElement(dialog_1.DialogTitle, null, "Resize Image"),
170
- react_1.default.createElement(dialog_1.DialogDescription, null, "Adjust the crop area to create a square image. Use the slider to zoom in or out.")),
171
- react_1.default.createElement("div", { className: "relative h-[400px] w-full bg-muted rounded-md overflow-hidden" },
172
- react_1.default.createElement(react_easy_crop_1.default, { image: imageUrl, crop: crop, zoom: zoom, aspect: 1, onCropChange: setCrop, onCropComplete: handleCropComplete, onZoomChange: setZoom })),
173
- react_1.default.createElement("div", { className: "space-y-2" },
174
- react_1.default.createElement("label", { className: "text-sm font-medium" }, "Zoom"),
175
- react_1.default.createElement(slider_1.Slider, { value: [zoom], onValueChange: function (values) { return setZoom(values[0] || 1); }, min: 1, max: 3, step: 0.1, className: "w-full", "data-testid": "zoom-slider" })),
176
- react_1.default.createElement(dialog_1.DialogFooter, null,
177
- react_1.default.createElement(button_1.Button, { variant: "outline", onClick: onClose, "data-testid": "cancel-button" }, "Cancel"),
178
- react_1.default.createElement(button_1.Button, { onClick: handleSave, "data-testid": "save-button" }, "Save")))));
56
+ const handleSave = useCallback(async () => {
57
+ if (!croppedAreaPixels)
58
+ return;
59
+ try {
60
+ const croppedImage = await getCroppedImg(imageUrl, croppedAreaPixels, fileName);
61
+ onCropComplete(croppedImage);
62
+ onClose();
63
+ }
64
+ catch (error) {
65
+ console.error("Failed to crop image:", error);
66
+ }
67
+ }, [croppedAreaPixels, imageUrl, fileName, onCropComplete, onClose]);
68
+ return (React.createElement(Dialog, { open: open, onOpenChange: onClose },
69
+ React.createElement(DialogContent, { className: "max-w-3xl", "data-slot": "image-resize-dialog", "data-testid": "image-resize-dialog" },
70
+ React.createElement(DialogHeader, null,
71
+ React.createElement(DialogTitle, null, "Resize Image"),
72
+ React.createElement(DialogDescription, null, "Adjust the crop area to create a square image. Use the slider to zoom in or out.")),
73
+ React.createElement("div", { className: "relative h-[400px] w-full bg-muted rounded-md overflow-hidden" },
74
+ React.createElement(Suspense, { fallback: React.createElement("div", { className: "flex h-full w-full items-center justify-center text-muted-foreground text-sm" }, "Loading crop editor...") },
75
+ React.createElement(Cropper, { image: imageUrl, crop: crop, zoom: zoom, aspect: 1, onCropChange: setCrop, onCropComplete: handleCropComplete, onZoomChange: setZoom }))),
76
+ React.createElement("div", { className: "space-y-2" },
77
+ React.createElement("label", { className: "text-sm font-medium" }, "Zoom"),
78
+ React.createElement(Slider, { value: [zoom], onValueChange: (values) => setZoom(values[0] || 1), min: 1, max: 3, step: 0.1, className: "w-full", "data-testid": "zoom-slider" })),
79
+ React.createElement(DialogFooter, null,
80
+ React.createElement(Button, { variant: "outline", onClick: onClose, "data-testid": "cancel-button" }, "Cancel"),
81
+ React.createElement(Button, { onClick: handleSave, "data-testid": "save-button" }, "Save")))));
179
82
  };
180
- exports.ImageResizeDialog = ImageResizeDialog;